././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1728561637.207707 objgraph-3.6.2/0000775000175000017500000000000014701740745011161 5ustar00mgmg././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1686897781.0 objgraph-3.6.2/.coveragerc0000664000175000017500000000024314443002165013267 0ustar00mgmg[run] source = objgraph [report] exclude_lines = pragma: PY2 pragma: nocover except ImportError: except NameError: if __name__ == .__main__.: ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/.gitattributes0000644000175000017500000000002313500440053014026 0ustar00mgmg*.png diff=imgdiff ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/.gitignore0000644000175000017500000000021313500440053013124 0ustar00mgmgdist/ objects.dot objgraph.egg-info/ tmp/ .coverage _build/ tags build/ temp/ __pycache__/ .tox/ .toxbox/ *.py[co] .cache *.DS_Store venv/ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1686140906.0 objgraph-3.6.2/.readthedocs.yaml0000664000175000017500000000110114440073752014376 0ustar00mgmg# .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Set the version of Python and other tools you might need build: os: ubuntu-22.04 tools: python: "3.11" # Build documentation in the docs/ directory with Sphinx sphinx: configuration: docs/conf.py # We recommend specifying your dependencies to enable reproducible builds: # https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html # python: # install: # - requirements: docs/requirements.txt ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561534.0 objgraph-3.6.2/CHANGES.rst0000664000175000017500000002274314701740576012775 0ustar00mgmgChanges ======= .. currentmodule:: objgraph 3.6.2 (2024-10-10) ------------------ - Add support for Python 3.13. 3.6.1 (2024-02-26) ------------------ - Add support for Python 3.12. 3.6.0 (2023-06-16) ------------------ - Add support for Python 3.9, 3.10, and 3.11. - Drop support for Python 2.7 and 3.6. 3.5.0 (2020-10-11) ------------------ - Do not require ``mock`` for the test suite on Python 3; use unittest.mock instead. - 100% test coverage for each version of Python rather than combined, using ``coverage-python-version``. - Add the optional ``extra_node_attrs`` parameter to ``show_backrefs`` and ``show_backrefs`` - Fix IPython/Jupyter inline graph support code that would kick in even if you explicitly passed a filename='foo.png' argument to ``show_refs``/``show_backrefs``. See `issue 47 `_. - Add support for Python 3.8. - Drop support for Python 3.5. 3.4.1 (2019-04-23) ------------------ - Add support for Python 3.7. - Drop support for Python 3.3 and 3.4. 3.4.0 (2018-02-13) ------------------ - New functions: :func:`get_new_ids`, :func:`at_addrs`. Contributed by Justin Black in `PR 36 `_. 3.3.0 (2017-12-28) ------------------ - New function: :func:`growth`. 3.2.0 (2017-12-20) ------------------ - New ``filter`` argument for :func:`typestats`, :func:`most_common_types`, :func:`show_most_common_types`, :func:`show_growth`. - Show lambda functions in a more human-friendly way. 3.1.2 (2017-11-27) ------------------ - Correct UTF-8 mojibake in the changelog and switch all links to HTTPS. 3.1.1 (2017-10-30) ------------------ - Add support for Python 3.6. - Replace bare ``except:`` in ``safe_repr()`` with ``except Exception:``. 3.1.0 (2016-12-07) ------------------ - Support displaying graphs inline in IPython/Jupyter notebooks (`issue 28 `). 3.0.1 (2016-09-17) ------------------ - The ``file`` argument of :func:`show_most_common_types` and :func:`show_growth` now defaults to ``None`` instead of ``sys.stdout``. ``None`` is interpreted to be the same as ``sys.stdout``, which means the right stdout will be used if you change it at runtime (which happens, in doctests). 3.0.0 (2016-04-13) ------------------ - :func:`show_most_common_types` and :func:`show_growth` now accept a ``file`` argument if you want to redirect the output elsewhere. Fixes `issue 24 `_. Contributed by "d-sun-d". - Don't trust ``__class__`` to be accurate and ``__name__`` to be a string. Fixes errors in some convoluted corner cases when mocks are involved. Contributed by Andrew Shannon Brown in `PR 26 `_. - Drop support for Python 2.4, 2.5, and 2.6. - Drop support for Python 3.1 and 3.2. - Add support for Python 3.5. 2.0.1 (2015-07-28) ------------------ - Avoid creating reference cycles between the stack frame and the local ``objects`` variable in :func:`by_type`, :func:`count`, and :func:`typestats`. Fixes `issue 22 `_. Contributed by Erik Bray. 2.0.0 (2015-04-18) ------------------ - :func:`show_refs` and :func:`show_backrefs` now accept a file-like object (via the new ``output`` argument) as an alternative to a filename. - Made internal helper methods private. This includes ``find_chain``, ``show_graph``, ``obj_node_id``, ``obj_label``, ``quote``, ``long_typename``, ``safe_repr``, ``short_repr``, ``gradient``, ``edge_label``, and ``_program_in_path``. - Correctly determine the name of old-style classes in :func:`count`, :func:`by_type`, and graph drawing functions. Fixes `issue 16 `_. Contributed by Mike Lambert. 1.8.1 (2014-05-15) ------------------ - Do not expect file objects to have an ``encoding`` attribute. Makes objgraph compatible with Eventlet's monkey-patching. Fixes `issue 6 `_. Contributed by Jakub Stasiak. 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: :func:`is_proper_module`. - New ``shortnames`` argument for :func:`typestats`, :func:`most_common_types`, :func:`show_most_common_types`, :func:`show_growth`, :func:`show_refs`, and :func:`show_backrefs`. :func:`count` and :func:`by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for :func:`show_refs` and :func:`show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten :func:`find_ref_chain`, update :func:`show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: :func:`find_ref_chain`. - New ``backrefs`` argument for :func:`show_chain`. - New function: :func:`get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for :func:`count`, :func:`typestats`, :func:`most_common_types`, :func:`show_most_common_types`, and :func:`by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: :func:`show_growth`, :func:`show_chain`. - :func:`find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of :func:`show_refs`/:func:`show_backrefs` by specifying ``too_many``. - Make :func:`show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in :func:`show_refs`/:func:`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: :func:`most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to :func:`show_refs`, :func:`show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: :func:`show_refs`, :func:`show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: :func:`show_refs` for showing forward references. - New functions: :func:`typestats` and :func:`show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1603534027.0 objgraph-3.6.2/HACKING.rst0000664000175000017500000001226313744776313012771 0ustar00mgmg.. _hacking: Hacking on objgraph =================== Start by geting the latest source with :: git clone https://github.com/mgedmin/objgraph Run the test suite with :: make test The test suite is mostly smoke tests (i.e. crashes will be noticed, subtly wrong output will be missed). I hope to improve that in the future, but don't hold your breath. Most of the testing is done manually or semi-automatically, e.g. by running ``make images`` and eyeballing the results (`imgdiff `_ is handy there). Sending me patches ------------------ GitHub pull requests are probably the best way to send me patches. Or just email them to . I'd appreciate `issues in GitHub `_ for each proposed change, be it a bug or a feature request. Supported Python versions ------------------------- Python 2.7 and 3.5+. You can run the test suite for all supported Python versions with :: tox -p auto If a test fails, often the easiest way to debug is is to compare the output visually :: make images PYTHON=pythonX.Y git config diff.imgdiff.command 'f() { imgdiff --eog -H $1 $2; }; f' git diff docs/*.png git checkout -- docs/*.png docs/*.dot An easy way to get multiple Pythons versions on Ubuntu is to use Felix Krull's "`deadsnakes `_" PPA:: sudo add-apt-repository -y ppa:deadsnakes sudo apt-get update sudo apt-get install python3.{6,7,8,9} Test coverage ------------- As I mentioned, the tests are mostly smoke tests, and even then they're incomplete. Install `coverage `_ to see how incomplete they are with :: make coverage I use a `vim plugin `_ to higlight lines not covered by tests while I edit :: make coverage vim objgraph.py :HighlightCoverage If you prefer HTML reports, run :: make coverage coverage html and then browse ``htmlcov/index.html``. Documentation ------------- To fully rebuild the documentation, run :: make clean images docs Please ``git checkout --`` the png files that haven't changed significantly. (Many of the images include things like memory addresses which tend to change from run to run.) `imgdiff `_ is useful for comparing the images with their older versions:: git config diff.imgdiff.command 'f() { imgdiff $1 $2; }; f' git diff docs/*.png It has a few options that may make the changes easier to see. I personally like:: git config diff.imgdiff.command 'f() { imgdiff --eog -H $1 $2; }; f' git diff docs/*.png When you add a new doctest file, remember to include it in ``docs/index.txt``. When you add a new function, make sure it has a `PEP-257 `_-compliant docstring and add the appropriate autodoc directive to ``objgraph.txt``. I insist on one departure from PEP-257: the closing ``"""`` should *not* be preceded by a blank line. Example:: def do_something(): """Do something. Return something valuable. """ If Emacs is broken, fix emacs, do not make my docstrings ugly. On the other hand, if the last thing in a docstring is an indented block quote or a doctest section, it should be surrounded by blank lines. Like this:: def do_something(): """Do something. Return something valuable. Example: >>> do_something() 42 """ I find `restview `_ very handy for documentation writing: it lets me see how the text looks by pressing Ctrl-R in a browser window, without having to re-run any documentation building commands. The downside is that ``restview`` doesn't support Sphinx extensions to ReStructuredText, so you end up with error messages all over the place. Then again this is useful for bits that *can't* use Sphinx extensions, like the PyPI long description. To preview the PyPI long description (which is generated by concatenating ``README.rst`` and ``CHANGES.rst``) with ``restview``, use this handy command:: make preview-pypi-description because typing :: restview -e "python setup.py --long-description" is tedious, and bash has tab-completion for makefile rules. Making releases --------------- You need write access to the PyPI package and to the Git branch on GitHub. At the moment of this writing, this means you must be me. Run ``make release`` and follow the instructions. It is safe to run this command at any time: it never commits/pushes/uploads to PyPI, it just tells you what to do. Avoiding incomplete releases ---------------------------- It is important to keep `MANIFEST.in `_ up to date so that source tarballs generated with ``python setup.py sdist`` aren't missing any files, even if you don't have the right setuptools version control plugins installed. You can run :: make distcheck to be sure this is so, but it's not necessary -- ``make release`` will do this every time. (I've later written a standalone tool, `check-manifest `_ that can do this check for every Python package.) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/LICENSE0000644000175000017500000000206013500440053012143 0ustar00mgmgMIT License Copyright (c) 2016 Marius Gedminas 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. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1686144541.0 objgraph-3.6.2/MANIFEST.in0000644000175000017500000000070214440103035012675 0ustar00mgmginclude Makefile include *.rst include tests.py include tox.ini include docs/*.txt include docs/*.dot include docs/*.png include docs/conf.py include docs/_static/*.css include .gitignore include .gitattributes include *.yml # added by check_manifest.py include *.txt # added by check_manifest.py include LICENSE # added by check_manifest.py include *.mk # added by check_manifest.py include .coveragerc # added by check-manifest include *.yaml ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561628.0 objgraph-3.6.2/Makefile0000664000175000017500000000655614701740734012633 0ustar00mgmgPYTHON = python3 FILE_WITH_VERSION = objgraph.py FILE_WITH_CHANGELOG = CHANGES.rst VCS_DIFF_IMAGES = git diff docs/*.png SPHINXOPTS = -Wn SPHINXBUILD = sphinx-build SPHINXBUILDDIR = docs/_build ALLSPHINXOPTS = -d $(SPHINXBUILDDIR)/doctrees $(SPHINXOPTS) docs/ .PHONY: all all: @echo "Nothing to build here" .PHONY: images images: ##: regenerate graphs used in documentation $(PYTHON) setup.py --build-images .PHONY: docs docs: ##: build HTML documentation $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(SPHINXBUILDDIR)/html @echo @echo "Now look at $(SPHINXBUILDDIR)/html/index.html" .PHONY: clean clean: ##: remove build artifacts -rm -rf $(SPHINXBUILDDIR)/* build .PHONY: test test: ##: run tests tox -p auto .PHONY: check: # 'make check' is defined in release.mk and here's how you can override it define check_recipe = @$(MAKE) coverage endef .PHONY: coverage coverage: ##: measure test coverage tox -e coverage .PHONY: flake8 flake8: ##: check for style problems tox -e flake8 # Make sure $(VCS_DIFF_IMAGES) can work .PHONY: config-imgdiff config-imgdiff: @test -z "`git config diff.imgdiff.command`" && git config diff.imgdiff.command 'f() { imgdiff --eog -H $$1 $$2; }; f' || true .PHONY: imgdiff imgdiff: config-imgdiff ##: compare differences in generated images $(VCS_DIFF_IMAGES) .PHONY: releasechecklist releasechecklist: check-date # also release.mk will add other checks include release.mk .PHONY: check-date check-date: @date_line="__date__ = '`date +%Y-%m-%d`'" && \ grep -q "^$$date_line$$" $(FILE_WITH_VERSION) || { \ echo "$(FILE_WITH_VERSION) doesn't specify $$date_line"; \ echo "Please run make update-date"; exit 1; } .PHONY: update-date update-date: ##: set release date in source code to today sed -i -e "s/^__date__ = '.*'/__date__ = '`date +%Y-%m-%d`'/" $(FILE_WITH_VERSION) .PHONY: do-release do-release: config-imgdiff # override the release recipe in release.mk define release_recipe = # I'm chicken so I won't actually do these things yet @echo "It is a good idea to run" @echo @echo " make clean images docs" @echo @echo "about now. Then review the images for unexpected differences with" @echo @echo " make imgdiff" @echo @echo "then either revert or commit the new images and run" @echo @echo " $(PYPI_PUBLISH)" @echo " $(VCS_TAG)" @echo " make publish-docs" @echo @echo "then create a GitHub release with" @echo @echo " gh release create" @echo @echo "Please increment the version number in $(FILE_WITH_VERSION)" @echo "and add a new empty entry at the top of the changelog in $(FILE_WITH_CHANGELOG), then" @echo @echo ' $(VCS_COMMIT_AND_PUSH)' @echo endef # XXX: I should switch to readthedocs.org .PHONY: publish-docs publish-docs: ##: publish documentation on the website test -d ~/www/objgraph || { \ echo "There's no ~/www/objgraph, do you have the website checked out?"; exit 1; } make clean docs cp -r docs/_build/html/* ~/www/objgraph/ cd ~/www/objgraph && git add . && git status @echo @echo "If everything looks fine, please run" @echo @echo " cd ~/www/ && git commit -m \"Released objgraph `$(PYTHON) setup.py --version`\" && git push" @echo " ssh fridge 'cd www && git pull'" @echo ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1728561637.207707 objgraph-3.6.2/PKG-INFO0000644000175000017500000003031114701740745012252 0ustar00mgmgMetadata-Version: 2.1 Name: objgraph Version: 3.6.2 Summary: Draws Python object reference graphs with graphviz Home-page: https://mg.pov.lt/objgraph/ Author: Marius Gedminas Author-email: marius@gedmin.as License: MIT Project-URL: Source, https://github.com/mgedmin/objgraph Keywords: object graph visualization graphviz garbage collection Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Requires-Python: >=3.7 Description-Content-Type: text/x-rst License-File: LICENSE Provides-Extra: ipython Requires-Dist: graphviz; extra == "ipython" Provides-Extra: test Python Object Graphs ==================== .. image:: https://github.com/mgedmin/objgraph/workflows/build/badge.svg?branch=master :target: https://github.com/mgedmin/objgraph/actions :alt: Build Status .. image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/objgraph?branch=master&svg=true :target: https://ci.appveyor.com/project/mgedmin/objgraph :alt: Build Status (Windows) .. image:: https://coveralls.io/repos/mgedmin/objgraph/badge.svg?branch=master :target: https://coveralls.io/r/mgedmin/objgraph?branch=master :alt: Test Coverage .. image:: https://readthedocs.org/projects/objgraph/badge/?version=latest :target: https://readthedocs.org/projects/objgraph/?badge=latest :alt: Documentation Status ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at https://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. Changes ======= 3.6.2 (2024-10-10) ------------------ - Add support for Python 3.13. 3.6.1 (2024-02-26) ------------------ - Add support for Python 3.12. 3.6.0 (2023-06-16) ------------------ - Add support for Python 3.9, 3.10, and 3.11. - Drop support for Python 2.7 and 3.6. 3.5.0 (2020-10-11) ------------------ - Do not require ``mock`` for the test suite on Python 3; use unittest.mock instead. - 100% test coverage for each version of Python rather than combined, using ``coverage-python-version``. - Add the optional ``extra_node_attrs`` parameter to ``show_backrefs`` and ``show_backrefs`` - Fix IPython/Jupyter inline graph support code that would kick in even if you explicitly passed a filename='foo.png' argument to ``show_refs``/``show_backrefs``. See `issue 47 `_. - Add support for Python 3.8. - Drop support for Python 3.5. 3.4.1 (2019-04-23) ------------------ - Add support for Python 3.7. - Drop support for Python 3.3 and 3.4. 3.4.0 (2018-02-13) ------------------ - New functions: `get_new_ids`, `at_addrs`. Contributed by Justin Black in `PR 36 `_. 3.3.0 (2017-12-28) ------------------ - New function: `growth`. 3.2.0 (2017-12-20) ------------------ - New ``filter`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`. - Show lambda functions in a more human-friendly way. 3.1.2 (2017-11-27) ------------------ - Correct UTF-8 mojibake in the changelog and switch all links to HTTPS. 3.1.1 (2017-10-30) ------------------ - Add support for Python 3.6. - Replace bare ``except:`` in ``safe_repr()`` with ``except Exception:``. 3.1.0 (2016-12-07) ------------------ - Support displaying graphs inline in IPython/Jupyter notebooks (`issue 28 `). 3.0.1 (2016-09-17) ------------------ - The ``file`` argument of `show_most_common_types` and `show_growth` now defaults to ``None`` instead of ``sys.stdout``. ``None`` is interpreted to be the same as ``sys.stdout``, which means the right stdout will be used if you change it at runtime (which happens, in doctests). 3.0.0 (2016-04-13) ------------------ - `show_most_common_types` and `show_growth` now accept a ``file`` argument if you want to redirect the output elsewhere. Fixes `issue 24 `_. Contributed by "d-sun-d". - Don't trust ``__class__`` to be accurate and ``__name__`` to be a string. Fixes errors in some convoluted corner cases when mocks are involved. Contributed by Andrew Shannon Brown in `PR 26 `_. - Drop support for Python 2.4, 2.5, and 2.6. - Drop support for Python 3.1 and 3.2. - Add support for Python 3.5. 2.0.1 (2015-07-28) ------------------ - Avoid creating reference cycles between the stack frame and the local ``objects`` variable in `by_type`, `count`, and `typestats`. Fixes `issue 22 `_. Contributed by Erik Bray. 2.0.0 (2015-04-18) ------------------ - `show_refs` and `show_backrefs` now accept a file-like object (via the new ``output`` argument) as an alternative to a filename. - Made internal helper methods private. This includes ``find_chain``, ``show_graph``, ``obj_node_id``, ``obj_label``, ``quote``, ``long_typename``, ``safe_repr``, ``short_repr``, ``gradient``, ``edge_label``, and ``_program_in_path``. - Correctly determine the name of old-style classes in `count`, `by_type`, and graph drawing functions. Fixes `issue 16 `_. Contributed by Mike Lambert. 1.8.1 (2014-05-15) ------------------ - Do not expect file objects to have an ``encoding`` attribute. Makes objgraph compatible with Eventlet's monkey-patching. Fixes `issue 6 `_. Contributed by Jakub Stasiak. 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: `is_proper_module`. - New ``shortnames`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`, `show_refs`, and `show_backrefs`. `count` and `by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for `show_refs` and `show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten `find_ref_chain`, update `show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: `find_ref_chain`. - New ``backrefs`` argument for `show_chain`. - New function: `get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for `count`, `typestats`, `most_common_types`, `show_most_common_types`, and `by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: `show_growth`, `show_chain`. - `find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of `show_refs`/`show_backrefs` by specifying ``too_many``. - Make `show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in `show_refs`/`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: `most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to `show_refs`, `show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: `show_refs`, `show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: `show_refs` for showing forward references. - New functions: `typestats` and `show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1686899626.0 objgraph-3.6.2/README.rst0000664000175000017500000000405414443005652012645 0ustar00mgmgPython Object Graphs ==================== .. image:: https://github.com/mgedmin/objgraph/workflows/build/badge.svg?branch=master :target: https://github.com/mgedmin/objgraph/actions :alt: Build Status .. image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/objgraph?branch=master&svg=true :target: https://ci.appveyor.com/project/mgedmin/objgraph :alt: Build Status (Windows) .. image:: https://coveralls.io/repos/mgedmin/objgraph/badge.svg?branch=master :target: https://coveralls.io/r/mgedmin/objgraph?branch=master :alt: Test Coverage .. image:: https://readthedocs.org/projects/objgraph/badge/?version=latest :target: https://readthedocs.org/projects/objgraph/?badge=latest :alt: Documentation Status ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at https://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561526.0 objgraph-3.6.2/appveyor.yml0000664000175000017500000000170514701740566013555 0ustar00mgmgversion: build-{build}-{branch} environment: matrix: # https://www.appveyor.com/docs/installed-software#python lists available # versions - PYTHON: "C:\\Python37" - PYTHON: "C:\\Python38" - PYTHON: "C:\\Python39" - PYTHON: "C:\\Python310" - PYTHON: "C:\\Python311" - PYTHON: "C:\\Python312" - PYTHON: "C:\\Python313" init: - "echo %PYTHON%" install: - ps: | if (-not (Test-Path $env:PYTHON)) { curl -o install_python.ps1 https://raw.githubusercontent.com/matthew-brett/multibuild/11a389d78892cf90addac8f69433d5e22bfa422a/install_python.ps1 .\install_python.ps1 } - ps: if (-not (Test-Path $env:PYTHON)) { throw "No $env:PYTHON" } - "set PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%" - python --version - pip install -U virtualenv # upgrade pip in tox's virtualenvs - pip install tox - choco install graphviz --version=2.38.0.20190211 - dot -V build: off test_script: - tox -e py ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1728561637.206707 objgraph-3.6.2/docs/0000775000175000017500000000000014701740745012111 5ustar00mgmg././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/42.png0000664000175000017500000004025514701712343013043 0ustar00mgmgPNG  IHDReZbKGD IDATxy\MAѩ"*$$WZr~Y/r}eݢMaK/JTsxΆjL|>3׶P(BNu!P7!jKB}LTҕ,XO\Is%9̕0W PNv s6̕0WxP`ť Lii:0W\Is%92!jKB}X/BaD!ڇ!jKB}]T/ﯣjjjϟp8]sbM4K.%G0QJr+Ԇ.k֬7oFJ54C!Vh$Ge\Is%9jCo&((HvmKII_C!wݴiIӲD`$ _VWW[֭[׿i#jjj>-=0KJr+ac=Ndaa駟8"Y,͞:ujff?9hkkxbccWnܸqҤIpep8\.Wʚi&cc8%%eɒ%==IbܰaǏ\ӧOϓ<<<~嗴4 srrRTT^`EDX,33'O믔F'[0W\INru9CyDZۢ#~Z?{,((Xxv\YYyС7nܸq#44dJr+Sb{q|^Jk!ɹluuuџV>\WW73gθyG+a$B"Ҫ<۽&N(HIzz5kΜ9S[[`̕0W\dҪYYYBpv$S.d eee;; ңtO|ڵkأD`$ WŒ꫾}?|kkk077gX\.7 F-\… 7o7MAM:O>R U > N>]EEW^4-55zd̕0W\z~~~666?ŋSSSsss窪={>}>zhEEEyf.+*#lmmw'Oo3ghhhDEEAJr+ԆBa@VZZImJr+a$6Kv_YlgԒO;rSǶ58|qɍ^m]nxq[Gr]6!Pw,%e˗LP'7gެTӆs7{С45;C!ܼ;4yn.%O>\wРklygrsg]kleu23tN΀a~yboGks%&fg߿qc֓'g%%*\+ɤe]5tܸ?u棈.=z>4;݁66c]]s=?xozTT 6lX::$])zB.yaNLL~fl,K RR_YSQMnN޵PCx?|MW;I]ga%jjjϟp8R|\Is%9̕0Wm߾\dh:>|rEhLtqq]@SSf>^WWwʔ)'O޺u9s/]tƍٳgϛ7OUU5,,ܹs.zzz6m266ߋSRR>6"۸s%Jr+q3gڴi:::SLuwwel6{͚5ތ:qℿ?,\p\.СC˗//**ڶm׮];w\--ӧgffnܸ1++cٲek׮ΝkeeE>v͡˖-KNN^rG%z+a$ ceXX{m@`Yf}Ydd ! cŊ'N(++h [nhheffV^^ɓ_#9s%9̕0W\v}L,ǫLII?\]]o޼DOZZZA. $ǙL&477WVV:tƍ7n \Is%9̕0Wm] ==ҥKVb2<6֒WWW+V]@-[̟?Μ9W\_]a$Jr+ԶNX'==b62ڛ?k֬1c jkkZwJr+G=AP/`hW__|r&dbb2zsΑ ѻt,kܹ׮] 177+a$|w`h(%XzuNNNTT"655=~;/sss\WW III_WZbŊ+Vߵk$cɬ?NG Æ {@ 1b9{-Xpׯcbbi4ZjjFijj***jii<2`>Jr+00 ^ d7<1{^<899͙3g޼y遁~=z谰/^XZZN6-)))333++PQQ177ǻv3f ?L2sL0`m```jjkuu9""ޒڲ2Ǒ0Wr۷t}}}77g\aJr+9Iubnnn.o6pK<3v̕0W\Ist'A!KB}X/BzY[[Ku>;  EuZ/utt,XHu A>&m֓'O -=^eff:885Fd022Sbbb3w\33ÇE;9r(=^.[,555&&>322ڶm[qq1qɢcǎNNN YT~##5kdeeQ,ڷoߐ!CΟ?mnHI:zInk֬9{,XAu\2GMMmiii+W$>~dѠA;VZZ?rsJ^^ܹsW^=l0%N;+ե0 irUUUoar'*++kGaْN# ϶}?WrFn?eBBѣG)˴}6..r ZhѪU޾ s% Μ9sU>?k֬e˖͘1bsIIIǎr劒5k e=3WIII[n?C $'t\<~ѱo߾\/*PQ~o"!z*???wEEAɨ@#K+KKK󫯯:(YneesÑ"h"hcAe;=<47LM]. +**<== (555͚5KCC#99XP^~@ggg044,((:(U]]LѴNE%%% B(绻h4{{wRNkhh4i6>ٷo_A~kQ۷oСCT%sDMѿOO\ؽ{&LWW'LFu,-X/;Acc/2~xfddw|i[[GGG􀳴dNqqÿ[[[3L9srrׯ_FFձzٙlү_?:>eʔK.566Rjjj~ŋUUUIӯ^:._Nzzx? 466VQQ|5uׯ_= ''XߨB"X/;">[׵dd`~~~Sdgg{zzjkk<꠨AjhhۛRQ種322Y=€K)*++>|hҶׯs8_[[Ku\2^x LMM꠨+OOO%%ڪ*[[g:¨(ˮ@=PSScXdZEծ*eeeR8q)qYYY}5뙃i <<ӧOƎ+u X/eO= Ϣp^|) ^pڇRutt^nґxꕟ}}M6PTPYYpzEVµj=xXPDD-@ׯm i8p y啞NuPC}}=YrOMMNlooo X,֣G3uTZ%@aÆվ}p[ ׇ,^X]]F8p@fwн{֮]0gonnׯw7*?>Қ>}zۚ,1##6mڤ-ro޼zj?}|׉ ;{z{{uY {;wn,#^,Df&R]]Mu\ٻw/>|w}' {xx0LKK@ÑH\\kOz^>]-//Ϗ *,,:.$''oڴO>d19ڔAN<[QUU]`AwiU^z޻wod􌉉 HrESu?P(555066^zu@@G#/### ,,C{}8}%%%0k֬6Nubd%CG&t6XYY;wQT|===OOOfԩS4ۛ@ KHٙb 2~Iz ǎ{^lll8%n޼~z e߾}.\2F455-W__޷o____YחF~Y^ ~~~Ҿ2!!֮]+޽{qJ񧥥Li͖ IDAT2EIIԺe˖)ZJ[[lKHC Fuz:xTTT]]]'6@n۷ş_/ \h{" l4b~p2ƊF)++sb!+...wdP~~;F3fLtt4B#Gh4Ձ H*cbbH-i}&M{Ғḻ-9@u۷oWWW*m۶\x͍KD>{݂&immf'Nطo_cE??X.kee?oSNp8***T־#G;v_~#Â8PaÆgφtBA@,X@u7w{hhwLLLAJLϕddzCg:u*PWWO#""ȠBaggwΝ@ xxxX7ovYEu%u\.W]]ݻwo{{{{{{  ɦ܈۷oWVV?yڴid]Cի9>>^KKݝfw}탤m۶ƍ>>>]yw@|򐐐7oqHrX/Qw"cbbrsstرct:a >#R;NSSS7|9˗/_|9##cnnn-1bq%""ѣGG!]/[իn"k# aDׯI3%%%&&jjjÇ'<ǎۧOcv>zFّB1,9---((ҥKnnn+V077:w ۶m+++۴iӶmȆ6]/]4444,,lܸq]sS9 26%%  dĐ 6=W^EDD(++9yܸqrP;.\p…R2eҥdWNY|ݻwx[~䁽̟??:::<<ή (^"ŋzuuu{{ѣGߟeB~~;wܹSRRJ&L0֖`PAAAd.e:#GhkkܹsժU]ݮՕ:Jvr%</555!!!11޽{BΎQFݛ0KUUTTTn: .\|r]]YhաCqqϞ=kaa-477ϝ;޽{w!6`D=Nmm_Fzz:꒧TI1 Ȋ 551ctrÃ~F{{e˖-\P-eddxyy9;;9rFkll5k֓'O"##qs۰^,99Τ/_2۾1zhUYj1cΑ#Gwjllpµkt~u{{{Ca̙QQQһѻEDpX/P(|7>|Рjccckk;rȑ#Gwz>|SWW;qq999YZZR \\\ݧM& ߐ;vX[~ƌ]HoY%BH|Ǐz5|o 6LAAH)߿_WWC 㭬WmYY5o<77 &Pݨ={===7m$_2eϣMLLqwzxYYY=oy;r^zQiW# #Bwyy'^>љ7oނ -uuu?wgI#)SGGGKq [o:;L.Df|>xѣG555L&Ɔ>G!{<,..VQQ1by5 ;.??ڵkAAAqqq}9s&Ù1c ٗ~7ΝݻW^^9tPKKKKK8@棉 Ç'˻~:)}1c333sϞ=~رc;_|9qĖ(]]]vrrzevvv't޺*K¹st`DHZ=zyyye-fСݨ={}ݼ<egg7n86fe=[R8/\ҷoy湻;'[n?C:w &j''*zぎTUlx88;wҁ.RSSBߒǟI;LfiiIjq㌌-d yq8JF/>}uOqq z]\\\]],ZΞ55duVQ"MO }X[[[YY >|ذar?޽{ۖB:#OY^΀LCCùsv}xΝۻwomm vܩ)|mWWzG0m۶߿NNXv-;ɊϟǏZZZ͇JaútkiiIMM%Å+++UUUl6YI6^"YYY'N:tHMMmϞ=+WՇN8WSS+))hI JK[OH{}4aDHFxByKzq333---I/OF Fglll^^ɴ&sĉ}:H_>}jdd4gΜ,>>>&&&kc@ x{v2iҤQRdz{{ZZ>b` ã^"m~ Æu3 %BrΞSA)m`0 "pFFd``0sLi㌈322>ot۷o4{֭oldgϞ/_ BJALLL;:k~ؿ]搑ѡO>3>'*4mvذaC AgrrrSSh-5j .ZaR-BBBlRQQq[YYԐ4̙3k,677_|yΝUF̝;C䀙m4zP6)itX***FEznnj#[%/'9rDIIEl Nnk׮R5 Ç;ȑ!h2?%B=@ )++{ٳgϜ9/-Y$((HqI0 UUՄ_tQ C~9Vr'o:om֩᫯rppbDIiiieeeb $^A]3bx)Sܹ#w 1[BB~h$ h4!Yܜ#(ӧUUUF 4hРAT܎7"1_Ɔxٳgڶ\WW<\z9F=ywo7unQ/ BeeeR[- QPP@Z`JJJjҺE C:tsP\\ɓ'{mee%*611}x<^nnӧ,Y֯ܮ]`!\PP r./m,Sp\UUUkkkbԤ,Yro_fggAj*Y0cO}AJ ?ܻCBѝ/BӰX,33333Vǹ\niixc֭[٢$猊zt;e#EZ˖-7yF333Qm>ܹFd?wE())`ح-^ II 3fS`j ۷CUhh#$&!!&2%B|SŋyyyaaadhFo"uޒ񲲲Dʕ+&9***d&Fc0VVVL&SMMFy{{!Hgc#$'1()kbcѣ ;֝cBGKKKEDGQQKT0511S|>?++>a2oN?~|֬YTAm-l7h>oۗu+| }vX9k677h~~~AAAaaG ڭt:]WWW500 {_aiiiiitR Ϟ=#3 o![ZL8~x{7|ld{=!uX,YESeeeSWTMW^ EP___[[hq"Mޘ#Flڴ3oqtl8yCO+Hj^"L3fLMMM%%%N]?Z]hBѣi|rv_ʕ`o oǂdoNsnٰ^"LSTT|g.444߼yX4HYYHMM*ӧO𰳳=mmXjj@(45RR ?2h%BuWz277777T}}x)hϟ?r>za`PPka:/c`2HJ6 -Np|,Bɿ?/$[F_Q4iҵkפ:8>-oBIԩS߹:(((i.]z)bqB=BYY ---t:}SLqttttt#g=<<~ه!_cccmm-X,[[ɓ'cݛк !$>fGEKZZZ[l: BzB%B}}'y!:JK!?_%%B {zBÔFر /o_8qq0255h5R7:Ə֭7+ſ^] %B0nÆ eep 0f |9Cf&|5@TgÖ-?.)ҫS^] %BO`Î~ cƀ[0}:dea,_.. ͐ OuJt!P"Dm7r %zxܼ)`D!ԩWA^PZ)`D!D}}d2ԴSzBSVv;^a;66`h/C]CM u"X/Bufx<h@((hjEEjXJK ֭i`NQ'A!yߐի= 5pu7``0`~05~`RسnmM(RuoB2F,X@:Y]B%B!>!P^"BzB%B!>!P^"BzB lJIDAT%Bhr9cBC@@!Hرc?~,B!>E!ڇ!jKB}IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/CHANGES.txt0000644000175000017500000000003413500440053013676 0ustar00mgmg.. include:: ../CHANGES.rst ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/HACKING.txt0000644000175000017500000000003413500440053013672 0ustar00mgmg.. include:: ../HACKING.rst ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1728561637.206707 objgraph-3.6.2/docs/_static/0000775000175000017500000000000014701740745013537 5ustar00mgmg././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1686899514.0 objgraph-3.6.2/docs/_static/mg.css0000644000175000017500000000044414443005472014646 0ustar00mgmg@import url("default.css"); pre { border: 1px dotted #869abf; overflow: hidden; } div.document { display: block; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { border: none; font-weight: bold; } div.figure { text-align: center; } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/all-the-chars.dot0000664000175000017500000010704714701712343015247 0ustar00mgmgdigraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; o139622177708864[fontcolor=red]; o139622177708864[label="dict\n256 items"]; o139622177708864[fillcolor="0,0,1"]; o139622177708864 -> o94591410055336 [label="str\n'\\x00'"]; o139622177708864 -> o94591410055368 [label="str\n'\\x01'"]; o139622177708864 -> o94591410055400 [label="str\n'\\x02'"]; o139622177708864 -> o94591410055432 [label="str\n'\\x03'"]; o139622177708864 -> o94591410055464 [label="str\n'\\x04'"]; o139622177708864 -> o94591410055496 [label="str\n'\\x05'"]; o139622177708864 -> o94591410055528 [label="str\n'\\x06'"]; o139622177708864 -> o94591410055560 [label="str\n'\\x07'"]; o139622177708864 -> o94591410055592 [label="str\n'\\x08'"]; o139622177708864 -> o94591410055624 [label="str\n'\\t'"]; o139622177708864 -> o94591410055656 [label="str\n'\\n'"]; o139622177708864 -> o94591410055688 [label="str\n'\\x0b'"]; o139622177708864 -> o94591410055720 [label="str\n'\\x0c'"]; o139622177708864 -> o94591410055752 [label="str\n'\\r'"]; o139622177708864 -> o94591410055784 [label="str\n'\\x0e'"]; o139622177708864 -> o94591410055816 [label="str\n'\\x0f'"]; o139622177708864 -> o94591410055848 [label="str\n'\\x10'"]; o139622177708864 -> o94591410055880 [label="str\n'\\x11'"]; o139622177708864 -> o94591410055912 [label="str\n'\\x12'"]; o139622177708864 -> o94591410055944 [label="str\n'\\x13'"]; o139622177708864 -> o94591410055976 [label="str\n'\\x14'"]; o139622177708864 -> o94591410056008 [label="str\n'\\x15'"]; o139622177708864 -> o94591410056040 [label="str\n'\\x16'"]; o139622177708864 -> o94591410056072 [label="str\n'\\x17'"]; o139622177708864 -> o94591410056104 [label="str\n'\\x18'"]; o139622177708864 -> o94591410056136 [label="str\n'\\x19'"]; o139622177708864 -> o94591410056168 [label="str\n'\\x1a'"]; o139622177708864 -> o94591410056200 [label="str\n'\\x1b'"]; o139622177708864 -> o94591410056232 [label="str\n'\\x1c'"]; o139622177708864 -> o94591410056264 [label="str\n'\\x1d'"]; o139622177708864 -> o94591410056296 [label="str\n'\\x1e'"]; o139622177708864 -> o94591410056328 [label="str\n'\\x1f'"]; o139622177708864 -> o94591410056360 [label="str\n' '"]; o139622177708864 -> o94591410056392 [label="str\n'!'"]; o139622177708864 -> o94591410056424 [label="str\n'\"'"]; o139622177708864 -> o94591410056456 [label="str\n'#'"]; o139622177708864 -> o94591410056488 [label="str\n'$'"]; o139622177708864 -> o94591410056520 [label="str\n'%'"]; o139622177708864 -> o94591410056552 [label="str\n'&'"]; o139622177708864 -> o94591410056584 [label="str\n\"'\""]; o139622177708864 -> o94591410056616 [label="str\n'('"]; o139622177708864 -> o94591410056648 [label="str\n')'"]; o139622177708864 -> o94591410056680 [label="str\n'*'"]; o139622177708864 -> o94591410056712 [label="str\n'+'"]; o139622177708864 -> o94591410056744 [label="str\n','"]; o139622177708864 -> o94591410056776 [label="str\n'-'"]; o139622177708864 -> o94591410056808 [label="str\n'.'"]; o139622177708864 -> o94591410056840 [label="str\n'/'"]; o139622177708864 -> o94591410056872 [label="str\n'0'"]; o139622177708864 -> o94591410056904 [label="str\n'1'"]; o139622177708864 -> o94591410056936 [label="str\n'2'"]; o139622177708864 -> o94591410056968 [label="str\n'3'"]; o139622177708864 -> o94591410057000 [label="str\n'4'"]; o139622177708864 -> o94591410057032 [label="str\n'5'"]; o139622177708864 -> o94591410057064 [label="str\n'6'"]; o139622177708864 -> o94591410057096 [label="str\n'7'"]; o139622177708864 -> o94591410057128 [label="str\n'8'"]; o139622177708864 -> o94591410057160 [label="str\n'9'"]; o139622177708864 -> o94591410057192 [label="str\n':'"]; o139622177708864 -> o94591410057224 [label="str\n';'"]; o139622177708864 -> o94591410057256 [label="str\n'<'"]; o139622177708864 -> o94591410057288 [label="str\n'='"]; o139622177708864 -> o94591410057320 [label="str\n'>'"]; o139622177708864 -> o94591410057352 [label="str\n'?'"]; o139622177708864 -> o94591410057384 [label="str\n'@'"]; o139622177708864 -> o94591410057416 [label="A",weight=2]; o139622177708864 -> o94591410057448 [label="B",weight=2]; o139622177708864 -> o94591410057480 [label="C",weight=2]; o139622177708864 -> o94591410057512 [label="D",weight=2]; o139622177708864 -> o94591410057544 [label="E",weight=2]; o139622177708864 -> o94591410057576 [label="F",weight=2]; o139622177708864 -> o94591410057608 [label="G",weight=2]; o139622177708864 -> o94591410057640 [label="H",weight=2]; o139622177708864 -> o94591410057672 [label="I",weight=2]; o139622177708864 -> o94591410057704 [label="J",weight=2]; o139622177708864 -> o94591410057736 [label="K",weight=2]; o139622177708864 -> o94591410057768 [label="L",weight=2]; o139622177708864 -> o94591410057800 [label="M",weight=2]; o139622177708864 -> o94591410057832 [label="N",weight=2]; o139622177708864 -> o94591410057864 [label="O",weight=2]; o139622177708864 -> o94591410057896 [label="P",weight=2]; o139622177708864 -> o94591410057928 [label="Q",weight=2]; o139622177708864 -> o94591410057960 [label="R",weight=2]; o139622177708864 -> o94591410057992 [label="S",weight=2]; o139622177708864 -> o94591410058024 [label="T",weight=2]; o139622177708864 -> o94591410058056 [label="U",weight=2]; o139622177708864 -> o94591410058088 [label="V",weight=2]; o139622177708864 -> o94591410058120 [label="W",weight=2]; o139622177708864 -> o94591410058152 [label="X",weight=2]; o139622177708864 -> o94591410058184 [label="Y",weight=2]; o139622177708864 -> o94591410058216 [label="Z",weight=2]; o139622177708864 -> o94591410058248 [label="str\n'['"]; o139622177708864 -> o94591410058280 [label="str\n'\\\\'"]; o139622177708864 -> o94591410058312 [label="str\n']'"]; o139622177708864 -> o94591410058344 [label="str\n'^'"]; o139622177708864 -> o94591410058376 [label="_",weight=2]; o139622177708864 -> o94591410058408 [label="str\n'`'"]; o139622177708864 -> o94591410058440 [label="a",weight=2]; o139622177708864 -> o94591410058472 [label="b",weight=2]; o139622177708864 -> o94591410058504 [label="c",weight=2]; o139622177708864 -> o94591410058536 [label="d",weight=2]; o139622177708864 -> o94591410058568 [label="e",weight=2]; o139622177708864 -> o94591410058600 [label="f",weight=2]; o139622177708864 -> o94591410058632 [label="g",weight=2]; o139622177708864 -> o94591410058664 [label="h",weight=2]; o139622177708864 -> o94591410058696 [label="i",weight=2]; o139622177708864 -> o94591410058728 [label="j",weight=2]; o139622177708864 -> o94591410058760 [label="k",weight=2]; o139622177708864 -> o94591410058792 [label="l",weight=2]; o139622177708864 -> o94591410058824 [label="m",weight=2]; o139622177708864 -> o94591410058856 [label="n",weight=2]; o139622177708864 -> o94591410058888 [label="o",weight=2]; o139622177708864 -> o94591410058920 [label="p",weight=2]; o139622177708864 -> o94591410058952 [label="q",weight=2]; o139622177708864 -> o94591410058984 [label="r",weight=2]; o139622177708864 -> o94591410059016 [label="s",weight=2]; o139622177708864 -> o94591410059048 [label="t",weight=2]; o139622177708864 -> o94591410059080 [label="u",weight=2]; o139622177708864 -> o94591410059112 [label="v",weight=2]; o139622177708864 -> o94591410059144 [label="w",weight=2]; o139622177708864 -> o94591410059176 [label="x",weight=2]; o139622177708864 -> o94591410059208 [label="y",weight=2]; o139622177708864 -> o94591410059240 [label="z",weight=2]; o139622177708864 -> o94591410059272 [label="str\n'{'"]; o139622177708864 -> o94591410059304 [label="str\n'|'"]; o139622177708864 -> o94591410059336 [label="str\n'}'"]; o139622177708864 -> o94591410059368 [label="str\n'~'"]; o139622177708864 -> o94591410059400 [label="str\n'\\x7f'"]; o139622177708864 -> o94591410059432 [label="str\n'\\x80'"]; o139622177708864 -> o94591410059464 [label="str\n'\\x81'"]; o139622177708864 -> o94591410059496 [label="str\n'\\x82'"]; o139622177708864 -> o94591410059528 [label="str\n'\\x83'"]; o139622177708864 -> o94591410059560 [label="str\n'\\x84'"]; o139622177708864 -> o94591410059592 [label="str\n'\\x85'"]; o139622177708864 -> o94591410059624 [label="str\n'\\x86'"]; o139622177708864 -> o94591410059656 [label="str\n'\\x87'"]; o139622177708864 -> o94591410059688 [label="str\n'\\x88'"]; o139622177708864 -> o94591410059720 [label="str\n'\\x89'"]; o139622177708864 -> o94591410059752 [label="str\n'\\x8a'"]; o139622177708864 -> o94591410059784 [label="str\n'\\x8b'"]; o139622177708864 -> o94591410059816 [label="str\n'\\x8c'"]; o139622177708864 -> o94591410059848 [label="str\n'\\x8d'"]; o139622177708864 -> o94591410059880 [label="str\n'\\x8e'"]; o139622177708864 -> o94591410059912 [label="str\n'\\x8f'"]; o139622177708864 -> o94591410059944 [label="str\n'\\x90'"]; o139622177708864 -> o94591410059976 [label="str\n'\\x91'"]; o139622177708864 -> o94591410060008 [label="str\n'\\x92'"]; o139622177708864 -> o94591410060040 [label="str\n'\\x93'"]; o139622177708864 -> o94591410060072 [label="str\n'\\x94'"]; o139622177708864 -> o94591410060104 [label="str\n'\\x95'"]; o139622177708864 -> o94591410060136 [label="str\n'\\x96'"]; o139622177708864 -> o94591410060168 [label="str\n'\\x97'"]; o139622177708864 -> o94591410060200 [label="str\n'\\x98'"]; o139622177708864 -> o94591410060232 [label="str\n'\\x99'"]; o139622177708864 -> o94591410060264 [label="str\n'\\x9a'"]; o139622177708864 -> o94591410060296 [label="str\n'\\x9b'"]; o139622177708864 -> o94591410060328 [label="str\n'\\x9c'"]; o139622177708864 -> o94591410060360 [label="str\n'\\x9d'"]; o139622177708864 -> o94591410060392 [label="str\n'\\x9e'"]; o139622177708864 -> o94591410060424 [label="str\n'\\x9f'"]; o139622177708864 -> o94591410060456 [label="str\n'\\xa0'"]; o139622177708864 -> o94591410060488 [label="str\n'¡'"]; o139622177708864 -> o94591410060520 [label="str\n'¢'"]; o139622177708864 -> o94591410060552 [label="str\n'£'"]; o139622177708864 -> o94591410060584 [label="str\n'¤'"]; o139622177708864 -> o94591410060616 [label="str\n'¥'"]; o139622177708864 -> o94591410060648 [label="str\n'¦'"]; o139622177708864 -> o94591410060680 [label="str\n'§'"]; o139622177708864 -> o94591410060712 [label="str\n'¨'"]; o139622177708864 -> o94591410060744 [label="str\n'©'"]; o139622177708864 -> o94591410060776 [label="str\n'ª'"]; o139622177708864 -> o94591410060808 [label="str\n'«'"]; o139622177708864 -> o94591410060840 [label="str\n'¬'"]; o139622177708864 -> o94591410060872 [label="str\n'\\xad'"]; o139622177708864 -> o94591410060904 [label="str\n'®'"]; o139622177708864 -> o94591410060936 [label="str\n'¯'"]; o139622177708864 -> o94591410060968 [label="str\n'°'"]; o139622177708864 -> o94591410061000 [label="str\n'±'"]; o139622177708864 -> o94591410061032 [label="str\n'²'"]; o139622177708864 -> o94591410061064 [label="str\n'³'"]; o139622177708864 -> o94591410061096 [label="str\n'´'"]; o139622177708864 -> o94591410061128 [label="str\n'µ'"]; o139622177708864 -> o94591410061160 [label="str\n'¶'"]; o139622177708864 -> o94591410061192 [label="str\n'·'"]; o139622177708864 -> o94591410061224 [label="str\n'¸'"]; o139622177708864 -> o94591410061256 [label="str\n'¹'"]; o139622177708864 -> o94591410061288 [label="str\n'º'"]; o139622177708864 -> o94591410061320 [label="str\n'»'"]; o139622177708864 -> o94591410061352 [label="str\n'¼'"]; o139622177708864 -> o94591410061384 [label="str\n'½'"]; o139622177708864 -> o94591410061416 [label="str\n'¾'"]; o139622177708864 -> o94591410061448 [label="str\n'¿'"]; o139622177708864 -> o94591410061480 [label="str\n'À'"]; o139622177708864 -> o94591410061512 [label="str\n'Á'"]; o139622177708864 -> o94591410061544 [label="str\n'Â'"]; o139622177708864 -> o94591410061576 [label="str\n'Ã'"]; o139622177708864 -> o94591410061608 [label="str\n'Ä'"]; o139622177708864 -> o94591410061640 [label="str\n'Å'"]; o139622177708864 -> o94591410061672 [label="str\n'Æ'"]; o139622177708864 -> o94591410061704 [label="str\n'Ç'"]; o139622177708864 -> o94591410061736 [label="str\n'È'"]; o139622177708864 -> o94591410061768 [label="str\n'É'"]; o139622177708864 -> o94591410061800 [label="str\n'Ê'"]; o139622177708864 -> o94591410061832 [label="str\n'Ë'"]; o139622177708864 -> o94591410061864 [label="str\n'Ì'"]; o139622177708864 -> o94591410061896 [label="str\n'Í'"]; o139622177708864 -> o94591410061928 [label="str\n'Î'"]; o139622177708864 -> o94591410061960 [label="str\n'Ï'"]; o139622177708864 -> o94591410061992 [label="str\n'Ð'"]; o139622177708864 -> o94591410062024 [label="str\n'Ñ'"]; o139622177708864 -> o94591410062056 [label="str\n'Ò'"]; o139622177708864 -> o94591410062088 [label="str\n'Ó'"]; o139622177708864 -> o94591410062120 [label="str\n'Ô'"]; o139622177708864 -> o94591410062152 [label="str\n'Õ'"]; o139622177708864 -> o94591410062184 [label="str\n'Ö'"]; o139622177708864 -> o94591410062216 [label="str\n'×'"]; o139622177708864 -> o94591410062248 [label="str\n'Ø'"]; o139622177708864 -> o94591410062280 [label="str\n'Ù'"]; o139622177708864 -> o94591410062312 [label="str\n'Ú'"]; o139622177708864 -> o94591410062344 [label="str\n'Û'"]; o139622177708864 -> o94591410062376 [label="str\n'Ü'"]; o139622177708864 -> o94591410062408 [label="str\n'Ý'"]; o139622177708864 -> o94591410062440 [label="str\n'Þ'"]; o139622177708864 -> o94591410062472 [label="str\n'ß'"]; o139622177708864 -> o94591410062504 [label="str\n'à'"]; o139622177708864 -> o94591410062536 [label="str\n'á'"]; o139622177708864 -> o94591410062568 [label="str\n'â'"]; o139622177708864 -> o94591410062600 [label="str\n'ã'"]; o139622177708864 -> o94591410062632 [label="str\n'ä'"]; o139622177708864 -> o94591410062664 [label="str\n'å'"]; o139622177708864 -> o94591410062696 [label="str\n'æ'"]; o139622177708864 -> o94591410062728 [label="str\n'ç'"]; o139622177708864 -> o94591410062760 [label="str\n'è'"]; o139622177708864 -> o94591410062792 [label="str\n'é'"]; o139622177708864 -> o94591410062824 [label="str\n'ê'"]; o139622177708864 -> o94591410062856 [label="str\n'ë'"]; o139622177708864 -> o94591410062888 [label="str\n'ì'"]; o139622177708864 -> o94591410062920 [label="str\n'í'"]; o139622177708864 -> o94591410062952 [label="str\n'î'"]; o139622177708864 -> o94591410062984 [label="str\n'ï'"]; o139622177708864 -> o94591410063016 [label="str\n'ð'"]; o139622177708864 -> o94591410063048 [label="str\n'ñ'"]; o139622177708864 -> o94591410063080 [label="str\n'ò'"]; o139622177708864 -> o94591410063112 [label="str\n'ó'"]; o139622177708864 -> o94591410063144 [label="str\n'ô'"]; o139622177708864 -> o94591410063176 [label="str\n'õ'"]; o139622177708864 -> o94591410063208 [label="str\n'ö'"]; o139622177708864 -> o94591410063240 [label="str\n'÷'"]; o139622177708864 -> o94591410063272 [label="str\n'ø'"]; o139622177708864 -> o94591410063304 [label="str\n'ù'"]; o139622177708864 -> o94591410063336 [label="str\n'ú'"]; o139622177708864 -> o94591410063368 [label="str\n'û'"]; o139622177708864 -> o94591410063400 [label="str\n'ü'"]; o139622177708864 -> o94591410063432 [label="str\n'ý'"]; o139622177708864 -> o94591410063464 [label="str\n'þ'"]; o139622177708864 -> o94591410063496 [label="str\n'ÿ'"]; o94591410055336[label="int\n0"]; o94591410055336[fillcolor="0,0,0.766667"]; o94591410055368[label="int\n1"]; o94591410055368[fillcolor="0,0,0.766667"]; o94591410055400[label="int\n2"]; o94591410055400[fillcolor="0,0,0.766667"]; o94591410055432[label="int\n3"]; o94591410055432[fillcolor="0,0,0.766667"]; o94591410055464[label="int\n4"]; o94591410055464[fillcolor="0,0,0.766667"]; o94591410055496[label="int\n5"]; o94591410055496[fillcolor="0,0,0.766667"]; o94591410055528[label="int\n6"]; o94591410055528[fillcolor="0,0,0.766667"]; o94591410055560[label="int\n7"]; o94591410055560[fillcolor="0,0,0.766667"]; o94591410055592[label="int\n8"]; o94591410055592[fillcolor="0,0,0.766667"]; o94591410055624[label="int\n9"]; o94591410055624[fillcolor="0,0,0.766667"]; o94591410055656[label="int\n10"]; o94591410055656[fillcolor="0,0,0.766667"]; o94591410055688[label="int\n11"]; o94591410055688[fillcolor="0,0,0.766667"]; o94591410055720[label="int\n12"]; o94591410055720[fillcolor="0,0,0.766667"]; o94591410055752[label="int\n13"]; o94591410055752[fillcolor="0,0,0.766667"]; o94591410055784[label="int\n14"]; o94591410055784[fillcolor="0,0,0.766667"]; o94591410055816[label="int\n15"]; o94591410055816[fillcolor="0,0,0.766667"]; o94591410055848[label="int\n16"]; o94591410055848[fillcolor="0,0,0.766667"]; o94591410055880[label="int\n17"]; o94591410055880[fillcolor="0,0,0.766667"]; o94591410055912[label="int\n18"]; o94591410055912[fillcolor="0,0,0.766667"]; o94591410055944[label="int\n19"]; o94591410055944[fillcolor="0,0,0.766667"]; o94591410055976[label="int\n20"]; o94591410055976[fillcolor="0,0,0.766667"]; o94591410056008[label="int\n21"]; o94591410056008[fillcolor="0,0,0.766667"]; o94591410056040[label="int\n22"]; o94591410056040[fillcolor="0,0,0.766667"]; o94591410056072[label="int\n23"]; o94591410056072[fillcolor="0,0,0.766667"]; o94591410056104[label="int\n24"]; o94591410056104[fillcolor="0,0,0.766667"]; o94591410056136[label="int\n25"]; o94591410056136[fillcolor="0,0,0.766667"]; o94591410056168[label="int\n26"]; o94591410056168[fillcolor="0,0,0.766667"]; o94591410056200[label="int\n27"]; o94591410056200[fillcolor="0,0,0.766667"]; o94591410056232[label="int\n28"]; o94591410056232[fillcolor="0,0,0.766667"]; o94591410056264[label="int\n29"]; o94591410056264[fillcolor="0,0,0.766667"]; o94591410056296[label="int\n30"]; o94591410056296[fillcolor="0,0,0.766667"]; o94591410056328[label="int\n31"]; o94591410056328[fillcolor="0,0,0.766667"]; o94591410056360[label="int\n32"]; o94591410056360[fillcolor="0,0,0.766667"]; o94591410056392[label="int\n33"]; o94591410056392[fillcolor="0,0,0.766667"]; o94591410056424[label="int\n34"]; o94591410056424[fillcolor="0,0,0.766667"]; o94591410056456[label="int\n35"]; o94591410056456[fillcolor="0,0,0.766667"]; o94591410056488[label="int\n36"]; o94591410056488[fillcolor="0,0,0.766667"]; o94591410056520[label="int\n37"]; o94591410056520[fillcolor="0,0,0.766667"]; o94591410056552[label="int\n38"]; o94591410056552[fillcolor="0,0,0.766667"]; o94591410056584[label="int\n39"]; o94591410056584[fillcolor="0,0,0.766667"]; o94591410056616[label="int\n40"]; o94591410056616[fillcolor="0,0,0.766667"]; o94591410056648[label="int\n41"]; o94591410056648[fillcolor="0,0,0.766667"]; o94591410056680[label="int\n42"]; o94591410056680[fillcolor="0,0,0.766667"]; o94591410056712[label="int\n43"]; o94591410056712[fillcolor="0,0,0.766667"]; o94591410056744[label="int\n44"]; o94591410056744[fillcolor="0,0,0.766667"]; o94591410056776[label="int\n45"]; o94591410056776[fillcolor="0,0,0.766667"]; o94591410056808[label="int\n46"]; o94591410056808[fillcolor="0,0,0.766667"]; o94591410056840[label="int\n47"]; o94591410056840[fillcolor="0,0,0.766667"]; o94591410056872[label="int\n48"]; o94591410056872[fillcolor="0,0,0.766667"]; o94591410056904[label="int\n49"]; o94591410056904[fillcolor="0,0,0.766667"]; o94591410056936[label="int\n50"]; o94591410056936[fillcolor="0,0,0.766667"]; o94591410056968[label="int\n51"]; o94591410056968[fillcolor="0,0,0.766667"]; o94591410057000[label="int\n52"]; o94591410057000[fillcolor="0,0,0.766667"]; o94591410057032[label="int\n53"]; o94591410057032[fillcolor="0,0,0.766667"]; o94591410057064[label="int\n54"]; o94591410057064[fillcolor="0,0,0.766667"]; o94591410057096[label="int\n55"]; o94591410057096[fillcolor="0,0,0.766667"]; o94591410057128[label="int\n56"]; o94591410057128[fillcolor="0,0,0.766667"]; o94591410057160[label="int\n57"]; o94591410057160[fillcolor="0,0,0.766667"]; o94591410057192[label="int\n58"]; o94591410057192[fillcolor="0,0,0.766667"]; o94591410057224[label="int\n59"]; o94591410057224[fillcolor="0,0,0.766667"]; o94591410057256[label="int\n60"]; o94591410057256[fillcolor="0,0,0.766667"]; o94591410057288[label="int\n61"]; o94591410057288[fillcolor="0,0,0.766667"]; o94591410057320[label="int\n62"]; o94591410057320[fillcolor="0,0,0.766667"]; o94591410057352[label="int\n63"]; o94591410057352[fillcolor="0,0,0.766667"]; o94591410057384[label="int\n64"]; o94591410057384[fillcolor="0,0,0.766667"]; o94591410057416[label="int\n65"]; o94591410057416[fillcolor="0,0,0.766667"]; o94591410057448[label="int\n66"]; o94591410057448[fillcolor="0,0,0.766667"]; o94591410057480[label="int\n67"]; o94591410057480[fillcolor="0,0,0.766667"]; o94591410057512[label="int\n68"]; o94591410057512[fillcolor="0,0,0.766667"]; o94591410057544[label="int\n69"]; o94591410057544[fillcolor="0,0,0.766667"]; o94591410057576[label="int\n70"]; o94591410057576[fillcolor="0,0,0.766667"]; o94591410057608[label="int\n71"]; o94591410057608[fillcolor="0,0,0.766667"]; o94591410057640[label="int\n72"]; o94591410057640[fillcolor="0,0,0.766667"]; o94591410057672[label="int\n73"]; o94591410057672[fillcolor="0,0,0.766667"]; o94591410057704[label="int\n74"]; o94591410057704[fillcolor="0,0,0.766667"]; o94591410057736[label="int\n75"]; o94591410057736[fillcolor="0,0,0.766667"]; o94591410057768[label="int\n76"]; o94591410057768[fillcolor="0,0,0.766667"]; o94591410057800[label="int\n77"]; o94591410057800[fillcolor="0,0,0.766667"]; o94591410057832[label="int\n78"]; o94591410057832[fillcolor="0,0,0.766667"]; o94591410057864[label="int\n79"]; o94591410057864[fillcolor="0,0,0.766667"]; o94591410057896[label="int\n80"]; o94591410057896[fillcolor="0,0,0.766667"]; o94591410057928[label="int\n81"]; o94591410057928[fillcolor="0,0,0.766667"]; o94591410057960[label="int\n82"]; o94591410057960[fillcolor="0,0,0.766667"]; o94591410057992[label="int\n83"]; o94591410057992[fillcolor="0,0,0.766667"]; o94591410058024[label="int\n84"]; o94591410058024[fillcolor="0,0,0.766667"]; o94591410058056[label="int\n85"]; o94591410058056[fillcolor="0,0,0.766667"]; o94591410058088[label="int\n86"]; o94591410058088[fillcolor="0,0,0.766667"]; o94591410058120[label="int\n87"]; o94591410058120[fillcolor="0,0,0.766667"]; o94591410058152[label="int\n88"]; o94591410058152[fillcolor="0,0,0.766667"]; o94591410058184[label="int\n89"]; o94591410058184[fillcolor="0,0,0.766667"]; o94591410058216[label="int\n90"]; o94591410058216[fillcolor="0,0,0.766667"]; o94591410058248[label="int\n91"]; o94591410058248[fillcolor="0,0,0.766667"]; o94591410058280[label="int\n92"]; o94591410058280[fillcolor="0,0,0.766667"]; o94591410058312[label="int\n93"]; o94591410058312[fillcolor="0,0,0.766667"]; o94591410058344[label="int\n94"]; o94591410058344[fillcolor="0,0,0.766667"]; o94591410058376[label="int\n95"]; o94591410058376[fillcolor="0,0,0.766667"]; o94591410058408[label="int\n96"]; o94591410058408[fillcolor="0,0,0.766667"]; o94591410058440[label="int\n97"]; o94591410058440[fillcolor="0,0,0.766667"]; o94591410058472[label="int\n98"]; o94591410058472[fillcolor="0,0,0.766667"]; o94591410058504[label="int\n99"]; o94591410058504[fillcolor="0,0,0.766667"]; o94591410058536[label="int\n100"]; o94591410058536[fillcolor="0,0,0.766667"]; o94591410058568[label="int\n101"]; o94591410058568[fillcolor="0,0,0.766667"]; o94591410058600[label="int\n102"]; o94591410058600[fillcolor="0,0,0.766667"]; o94591410058632[label="int\n103"]; o94591410058632[fillcolor="0,0,0.766667"]; o94591410058664[label="int\n104"]; o94591410058664[fillcolor="0,0,0.766667"]; o94591410058696[label="int\n105"]; o94591410058696[fillcolor="0,0,0.766667"]; o94591410058728[label="int\n106"]; o94591410058728[fillcolor="0,0,0.766667"]; o94591410058760[label="int\n107"]; o94591410058760[fillcolor="0,0,0.766667"]; o94591410058792[label="int\n108"]; o94591410058792[fillcolor="0,0,0.766667"]; o94591410058824[label="int\n109"]; o94591410058824[fillcolor="0,0,0.766667"]; o94591410058856[label="int\n110"]; o94591410058856[fillcolor="0,0,0.766667"]; o94591410058888[label="int\n111"]; o94591410058888[fillcolor="0,0,0.766667"]; o94591410058920[label="int\n112"]; o94591410058920[fillcolor="0,0,0.766667"]; o94591410058952[label="int\n113"]; o94591410058952[fillcolor="0,0,0.766667"]; o94591410058984[label="int\n114"]; o94591410058984[fillcolor="0,0,0.766667"]; o94591410059016[label="int\n115"]; o94591410059016[fillcolor="0,0,0.766667"]; o94591410059048[label="int\n116"]; o94591410059048[fillcolor="0,0,0.766667"]; o94591410059080[label="int\n117"]; o94591410059080[fillcolor="0,0,0.766667"]; o94591410059112[label="int\n118"]; o94591410059112[fillcolor="0,0,0.766667"]; o94591410059144[label="int\n119"]; o94591410059144[fillcolor="0,0,0.766667"]; o94591410059176[label="int\n120"]; o94591410059176[fillcolor="0,0,0.766667"]; o94591410059208[label="int\n121"]; o94591410059208[fillcolor="0,0,0.766667"]; o94591410059240[label="int\n122"]; o94591410059240[fillcolor="0,0,0.766667"]; o94591410059272[label="int\n123"]; o94591410059272[fillcolor="0,0,0.766667"]; o94591410059304[label="int\n124"]; o94591410059304[fillcolor="0,0,0.766667"]; o94591410059336[label="int\n125"]; o94591410059336[fillcolor="0,0,0.766667"]; o94591410059368[label="int\n126"]; o94591410059368[fillcolor="0,0,0.766667"]; o94591410059400[label="int\n127"]; o94591410059400[fillcolor="0,0,0.766667"]; o94591410059432[label="int\n128"]; o94591410059432[fillcolor="0,0,0.766667"]; o94591410059464[label="int\n129"]; o94591410059464[fillcolor="0,0,0.766667"]; o94591410059496[label="int\n130"]; o94591410059496[fillcolor="0,0,0.766667"]; o94591410059528[label="int\n131"]; o94591410059528[fillcolor="0,0,0.766667"]; o94591410059560[label="int\n132"]; o94591410059560[fillcolor="0,0,0.766667"]; o94591410059592[label="int\n133"]; o94591410059592[fillcolor="0,0,0.766667"]; o94591410059624[label="int\n134"]; o94591410059624[fillcolor="0,0,0.766667"]; o94591410059656[label="int\n135"]; o94591410059656[fillcolor="0,0,0.766667"]; o94591410059688[label="int\n136"]; o94591410059688[fillcolor="0,0,0.766667"]; o94591410059720[label="int\n137"]; o94591410059720[fillcolor="0,0,0.766667"]; o94591410059752[label="int\n138"]; o94591410059752[fillcolor="0,0,0.766667"]; o94591410059784[label="int\n139"]; o94591410059784[fillcolor="0,0,0.766667"]; o94591410059816[label="int\n140"]; o94591410059816[fillcolor="0,0,0.766667"]; o94591410059848[label="int\n141"]; o94591410059848[fillcolor="0,0,0.766667"]; o94591410059880[label="int\n142"]; o94591410059880[fillcolor="0,0,0.766667"]; o94591410059912[label="int\n143"]; o94591410059912[fillcolor="0,0,0.766667"]; o94591410059944[label="int\n144"]; o94591410059944[fillcolor="0,0,0.766667"]; o94591410059976[label="int\n145"]; o94591410059976[fillcolor="0,0,0.766667"]; o94591410060008[label="int\n146"]; o94591410060008[fillcolor="0,0,0.766667"]; o94591410060040[label="int\n147"]; o94591410060040[fillcolor="0,0,0.766667"]; o94591410060072[label="int\n148"]; o94591410060072[fillcolor="0,0,0.766667"]; o94591410060104[label="int\n149"]; o94591410060104[fillcolor="0,0,0.766667"]; o94591410060136[label="int\n150"]; o94591410060136[fillcolor="0,0,0.766667"]; o94591410060168[label="int\n151"]; o94591410060168[fillcolor="0,0,0.766667"]; o94591410060200[label="int\n152"]; o94591410060200[fillcolor="0,0,0.766667"]; o94591410060232[label="int\n153"]; o94591410060232[fillcolor="0,0,0.766667"]; o94591410060264[label="int\n154"]; o94591410060264[fillcolor="0,0,0.766667"]; o94591410060296[label="int\n155"]; o94591410060296[fillcolor="0,0,0.766667"]; o94591410060328[label="int\n156"]; o94591410060328[fillcolor="0,0,0.766667"]; o94591410060360[label="int\n157"]; o94591410060360[fillcolor="0,0,0.766667"]; o94591410060392[label="int\n158"]; o94591410060392[fillcolor="0,0,0.766667"]; o94591410060424[label="int\n159"]; o94591410060424[fillcolor="0,0,0.766667"]; o94591410060456[label="int\n160"]; o94591410060456[fillcolor="0,0,0.766667"]; o94591410060488[label="int\n161"]; o94591410060488[fillcolor="0,0,0.766667"]; o94591410060520[label="int\n162"]; o94591410060520[fillcolor="0,0,0.766667"]; o94591410060552[label="int\n163"]; o94591410060552[fillcolor="0,0,0.766667"]; o94591410060584[label="int\n164"]; o94591410060584[fillcolor="0,0,0.766667"]; o94591410060616[label="int\n165"]; o94591410060616[fillcolor="0,0,0.766667"]; o94591410060648[label="int\n166"]; o94591410060648[fillcolor="0,0,0.766667"]; o94591410060680[label="int\n167"]; o94591410060680[fillcolor="0,0,0.766667"]; o94591410060712[label="int\n168"]; o94591410060712[fillcolor="0,0,0.766667"]; o94591410060744[label="int\n169"]; o94591410060744[fillcolor="0,0,0.766667"]; o94591410060776[label="int\n170"]; o94591410060776[fillcolor="0,0,0.766667"]; o94591410060808[label="int\n171"]; o94591410060808[fillcolor="0,0,0.766667"]; o94591410060840[label="int\n172"]; o94591410060840[fillcolor="0,0,0.766667"]; o94591410060872[label="int\n173"]; o94591410060872[fillcolor="0,0,0.766667"]; o94591410060904[label="int\n174"]; o94591410060904[fillcolor="0,0,0.766667"]; o94591410060936[label="int\n175"]; o94591410060936[fillcolor="0,0,0.766667"]; o94591410060968[label="int\n176"]; o94591410060968[fillcolor="0,0,0.766667"]; o94591410061000[label="int\n177"]; o94591410061000[fillcolor="0,0,0.766667"]; o94591410061032[label="int\n178"]; o94591410061032[fillcolor="0,0,0.766667"]; o94591410061064[label="int\n179"]; o94591410061064[fillcolor="0,0,0.766667"]; o94591410061096[label="int\n180"]; o94591410061096[fillcolor="0,0,0.766667"]; o94591410061128[label="int\n181"]; o94591410061128[fillcolor="0,0,0.766667"]; o94591410061160[label="int\n182"]; o94591410061160[fillcolor="0,0,0.766667"]; o94591410061192[label="int\n183"]; o94591410061192[fillcolor="0,0,0.766667"]; o94591410061224[label="int\n184"]; o94591410061224[fillcolor="0,0,0.766667"]; o94591410061256[label="int\n185"]; o94591410061256[fillcolor="0,0,0.766667"]; o94591410061288[label="int\n186"]; o94591410061288[fillcolor="0,0,0.766667"]; o94591410061320[label="int\n187"]; o94591410061320[fillcolor="0,0,0.766667"]; o94591410061352[label="int\n188"]; o94591410061352[fillcolor="0,0,0.766667"]; o94591410061384[label="int\n189"]; o94591410061384[fillcolor="0,0,0.766667"]; o94591410061416[label="int\n190"]; o94591410061416[fillcolor="0,0,0.766667"]; o94591410061448[label="int\n191"]; o94591410061448[fillcolor="0,0,0.766667"]; o94591410061480[label="int\n192"]; o94591410061480[fillcolor="0,0,0.766667"]; o94591410061512[label="int\n193"]; o94591410061512[fillcolor="0,0,0.766667"]; o94591410061544[label="int\n194"]; o94591410061544[fillcolor="0,0,0.766667"]; o94591410061576[label="int\n195"]; o94591410061576[fillcolor="0,0,0.766667"]; o94591410061608[label="int\n196"]; o94591410061608[fillcolor="0,0,0.766667"]; o94591410061640[label="int\n197"]; o94591410061640[fillcolor="0,0,0.766667"]; o94591410061672[label="int\n198"]; o94591410061672[fillcolor="0,0,0.766667"]; o94591410061704[label="int\n199"]; o94591410061704[fillcolor="0,0,0.766667"]; o94591410061736[label="int\n200"]; o94591410061736[fillcolor="0,0,0.766667"]; o94591410061768[label="int\n201"]; o94591410061768[fillcolor="0,0,0.766667"]; o94591410061800[label="int\n202"]; o94591410061800[fillcolor="0,0,0.766667"]; o94591410061832[label="int\n203"]; o94591410061832[fillcolor="0,0,0.766667"]; o94591410061864[label="int\n204"]; o94591410061864[fillcolor="0,0,0.766667"]; o94591410061896[label="int\n205"]; o94591410061896[fillcolor="0,0,0.766667"]; o94591410061928[label="int\n206"]; o94591410061928[fillcolor="0,0,0.766667"]; o94591410061960[label="int\n207"]; o94591410061960[fillcolor="0,0,0.766667"]; o94591410061992[label="int\n208"]; o94591410061992[fillcolor="0,0,0.766667"]; o94591410062024[label="int\n209"]; o94591410062024[fillcolor="0,0,0.766667"]; o94591410062056[label="int\n210"]; o94591410062056[fillcolor="0,0,0.766667"]; o94591410062088[label="int\n211"]; o94591410062088[fillcolor="0,0,0.766667"]; o94591410062120[label="int\n212"]; o94591410062120[fillcolor="0,0,0.766667"]; o94591410062152[label="int\n213"]; o94591410062152[fillcolor="0,0,0.766667"]; o94591410062184[label="int\n214"]; o94591410062184[fillcolor="0,0,0.766667"]; o94591410062216[label="int\n215"]; o94591410062216[fillcolor="0,0,0.766667"]; o94591410062248[label="int\n216"]; o94591410062248[fillcolor="0,0,0.766667"]; o94591410062280[label="int\n217"]; o94591410062280[fillcolor="0,0,0.766667"]; o94591410062312[label="int\n218"]; o94591410062312[fillcolor="0,0,0.766667"]; o94591410062344[label="int\n219"]; o94591410062344[fillcolor="0,0,0.766667"]; o94591410062376[label="int\n220"]; o94591410062376[fillcolor="0,0,0.766667"]; o94591410062408[label="int\n221"]; o94591410062408[fillcolor="0,0,0.766667"]; o94591410062440[label="int\n222"]; o94591410062440[fillcolor="0,0,0.766667"]; o94591410062472[label="int\n223"]; o94591410062472[fillcolor="0,0,0.766667"]; o94591410062504[label="int\n224"]; o94591410062504[fillcolor="0,0,0.766667"]; o94591410062536[label="int\n225"]; o94591410062536[fillcolor="0,0,0.766667"]; o94591410062568[label="int\n226"]; o94591410062568[fillcolor="0,0,0.766667"]; o94591410062600[label="int\n227"]; o94591410062600[fillcolor="0,0,0.766667"]; o94591410062632[label="int\n228"]; o94591410062632[fillcolor="0,0,0.766667"]; o94591410062664[label="int\n229"]; o94591410062664[fillcolor="0,0,0.766667"]; o94591410062696[label="int\n230"]; o94591410062696[fillcolor="0,0,0.766667"]; o94591410062728[label="int\n231"]; o94591410062728[fillcolor="0,0,0.766667"]; o94591410062760[label="int\n232"]; o94591410062760[fillcolor="0,0,0.766667"]; o94591410062792[label="int\n233"]; o94591410062792[fillcolor="0,0,0.766667"]; o94591410062824[label="int\n234"]; o94591410062824[fillcolor="0,0,0.766667"]; o94591410062856[label="int\n235"]; o94591410062856[fillcolor="0,0,0.766667"]; o94591410062888[label="int\n236"]; o94591410062888[fillcolor="0,0,0.766667"]; o94591410062920[label="int\n237"]; o94591410062920[fillcolor="0,0,0.766667"]; o94591410062952[label="int\n238"]; o94591410062952[fillcolor="0,0,0.766667"]; o94591410062984[label="int\n239"]; o94591410062984[fillcolor="0,0,0.766667"]; o94591410063016[label="int\n240"]; o94591410063016[fillcolor="0,0,0.766667"]; o94591410063048[label="int\n241"]; o94591410063048[fillcolor="0,0,0.766667"]; o94591410063080[label="int\n242"]; o94591410063080[fillcolor="0,0,0.766667"]; o94591410063112[label="int\n243"]; o94591410063112[fillcolor="0,0,0.766667"]; o94591410063144[label="int\n244"]; o94591410063144[fillcolor="0,0,0.766667"]; o94591410063176[label="int\n245"]; o94591410063176[fillcolor="0,0,0.766667"]; o94591410063208[label="int\n246"]; o94591410063208[fillcolor="0,0,0.766667"]; o94591410063240[label="int\n247"]; o94591410063240[fillcolor="0,0,0.766667"]; o94591410063272[label="int\n248"]; o94591410063272[fillcolor="0,0,0.766667"]; o94591410063304[label="int\n249"]; o94591410063304[fillcolor="0,0,0.766667"]; o94591410063336[label="int\n250"]; o94591410063336[fillcolor="0,0,0.766667"]; o94591410063368[label="int\n251"]; o94591410063368[fillcolor="0,0,0.766667"]; o94591410063400[label="int\n252"]; o94591410063400[fillcolor="0,0,0.766667"]; o94591410063432[label="int\n253"]; o94591410063432[fillcolor="0,0,0.766667"]; o94591410063464[label="int\n254"]; o94591410063464[fillcolor="0,0,0.766667"]; o94591410063496[label="int\n255"]; o94591410063496[fillcolor="0,0,0.766667"]; } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/canary-chain.png0000664000175000017500000013470014701712343015152 0ustar00mgmgPNG  IHDR 8bKGD IDATxg\ H/*MAQPibCi1j^\Wl4AieüEX)?3;̸ه);#H۸.2H`]t)..PU ,NNNyr+ b`9x ]]ĀQ}Z:vAr;H`2L/3 &c2 K}/4o=tׯ0K {foye 5) 9[lЖNvvPAUYw&yו|!95-ٜdn+fED\yŇjxLq;%p}־{߿SCESDks_;͘'ZNINS`UDDixs\!Xs/YՖCArOD7Rj?_ykh8ٸnz۾~cHg_e;vr|sMqg(Pl7{oee;î?qpiE?[ {MpCDǾ5y9DhۿjX,V]m3$(㣠ωhDknq,&>M-{D"!5Zoci:{Xm?mҭ|0ҞWMvJ9zߝ`ᭂ {Ʀ_0N\9>Rէ ઉlvAr;H`t{ 5VY ߰ җo%K@[}9TkLg 9n~X[ih*1cΓ[$So~Pݣ'ÀxĔPA[>_,Fl|k|)w=%w!~Zw4{mJfΐ=Oy__c6VmmmD? 2oEƞb晉W 2{^d!7gN^9b<ο\~C<~XW :xfs}=hv&:C{JrW96nYpd Hg&i#]v"q5էPC@;Xw3I{k+U垎;v὜0S}s"1=c7rS*jz|.?p.WQ> D$ Ol=dԸ5tR$3cn.̼v{מFL\1YNMD$czF]ǛЄ:3w;0lۿk8MkkߤDɟv8[CúJ" t0^Ez蚆jwC"$n=8x~'TR&.C/8WCs _T?5(3nhnljgn-;q{?,}-+{#U~e38xMDnD4Q(P4ҙS֣Yi~pּY־{E!5"Z0elI֓LFttzMA\u;N6D4ƭUmK˻ܡC2 o eMei"21Y4^OO2fvp$"x[qSwʚQZYbe2RIQ)-7/܈$TWYG-v͂eU;͋J m?MB=G6bED36|{gݽGϝZ, 5 LyC>@lvAr;H` 9< `@k}H .!9.GGGy@DTRR4k,yBDdbb"O wH:vAr;H` 9$vAr;H` 9$vAr;H` 9$܏?0??*++l"ﺀ5$~o---H$3UUU}Y~r̙kJ?#so۶KvtuuoE1Đзbccǎ+̀}? 8q;hŊ{%Aq8:lt>_RRnݺÇ\~mee;ڵCD*-vЇ^})S^ZSS3 `ɒ%td+W\~kU__/1.YK.ёNHH(//gmll***N` Wn߾Mq)++#) z}EAA޽)h߾}}^$'r[b"jii!ǫ8p?~mm3g6nHDOa @r@_122zn޼dɒcǎԩSp"kllTUUO%ƍ.\8|"4h%''o"` 9رcݺu.\9rK}}3fQll#Yf&&&ޑ#G$;99-\PEEHDD1  1vui{%ޒ5z@ 9<s]Z9^0p 9$vAr;H` 9}o…>>>Gӭ {xx(++ei0 9_:{t~ժURTT``ArֲeѢE:::}Q X 9< `Ȑ!߿}63RAA%''ȑ#ѣGϚ5ظŋaaaK,qrr";vћo, ~xZĉ;v9rK/Č RVVaL0!00.(( ݻwoyyyV\ ~Uϵs544$%%1>sd|>?((ĉ"(22[8x~JJ_ajjVPP ;V' 48x~1-*&}NDjjjS pHWKK  yyy&LWWW cƌ9s\uÇ###_~GxcZ\\LD ͧO7o̙3hllܲe s82lذ?|P\;p@CCرc]~+Wڵk7l*Nsᒒ"JNNk,GGSN_H?~~EEѣGutt\\\&Oe˖cz{{+((ydgg ˖-{6m4w\+++v+W,_<((HSS3++O>5kVZZZff&-_<444--_OOO}gA111DAD555w`סx\.w{)++ۿ?ٶmۙ3g(&&&77!""ܹs'==]$>)(( 6B,gffv8聧95<oܹ+i$p\!`]u%"55M6ihh(L2Q"zaaa=P$fϟg2siPVV}%^&5+V6mԩSϝ;wqzxl3;333%%p8%%%i٬HD=0;;{ݺu!9&LϿvx#FYZZ2D4j(Hq޼yJJJÇ_`tzi3ssNL:L#f̘!/^'^Uψ3f̞=m۶ɓ'8`ffuN;ZYY?E"Q'O ?󉨭o#F`}ñ!ÇK$kkk"1b3f&$$())q8>-M)nSNeoO$\xÇWVV={666х;7d^nذAEEeʕHHH "WWiӦihh9r+W3f 3ɓ'uuu'M &&&Κ5LKK۹sgKKKTTԙ3g-n )>H9$vAr;H` 9< .^%!9o.LLLvϭ wH:vAr;H` 9$vAr;H` 9$vAr;H` 9$ƽ{|̘Jcc-[ȷ0xHC?cUU?~ދH$w% Ñ_uWmƼ JIIiVqqG}$ҠGWx\頶^:v옽ۿbkk8|#Gъ+KD p8uuuOL566۷mڵD镖~'چ|"vuu\fq޽~ @D$Dt){]v1_ \.wqq.//rCf9DK${jjjњ5k$3#+W^vESSS,K$pСm=gLr̟?_OOO:O"b]]۷o3 ^LDRTT$MDQaa!3wQQQQWohh Df;8tRVVD DDDiiieee'yc~PWWBtuD$Z[o[o=<`9[֮]jժڄ˗/Qyy94-- r2d,?$$DSSs֭q[[[7beejժ4}}W^y姟~"" " Xsvvmy۷Q %>>̙3aaa}sBNCCcڵ_uIIIuu˗WZEDT~'&"jmmeԴi&PfffZ[[x!9[9:tŋB뛛׬Ycdd9k,"4h%''oD]__ODDCDD,GFF2(**v/_~H$r;ϛO'ުWv100`ٵk/]Čprrٿhht.##cǎImmmܤ|ĉ?Coll7nܨkdd_k=o8vϐxTHHH``kjj^yfdCCCnne *ܕ 391Gx7޸~zMMM}}}jjg}dyrn9sL~~itttlmmȻ.n>}] 8vAr;H` 9$vr訲2,,L:xU":tt*OYttt꺚`ѢEW V@GBpܹ .\؟@N,\(uuu//~$tKKK`… _ H4!b1NU@bcc'Oa~qq1:>stt466n?FAA!88@8Nppp;D"QPPKgK7n3ft,''GcѣGVPPXl\ˁ,Y9a%] 8[ZXXH$[[۔y9@33qҥK] 8>r׋x:ٳg˻xBNNN.Pqqq"B IDATbbb/.Z%311}tQҹ[.VAAyKCCCQQƍLs\ @^Hg 333#"sssr---̌r8 "255---aaa|>>^~۷oQcc#1׺ ,x>^OO/ @CCCKKkȑDK/k@:f#F 9s樫<Ύ\\\444===hȑ-ڳgϕ+WD"ϟ?GD7n7n\``ӧg͚ejjJD ,а122"s綵]vM"Z.%%%<hʔ)O+{wŋ̙zYi{?QSLa~#/Hx9:: B̞=YUUW1sL~9rƌۓzz_J;fѢE/vppPTT쇕v4k֬/N]ynNMMݱcG1[n{WP)9(9sٳ';;{֭YYY}NDUUU޽R^ǦHxthݕ?Khhhܟ_J.;Ɩ1c FCy{{%xn< w9g33>}y쒦MMMJKKO}ƍt:!2= èQݵO::Z"tUFW[!^26j/^DD֭[9993g 񍍍>Ym{s۷oڵ?::֭[BPUU2dlQ;w ƍONNDřq]],;J =|%//N2ƋDҐ@*{SSSÅ;wQL`w~$<)^>w\55趶6P_voQpj=fꍫN*ƆآNwH/"##---O~SSS7B"9;;GGG_xBoe"z%%%YmTw3הel<:t*URRRPPxW~駔gdvSWvWetE]^GGG[n…'NxuwgΜihh2eʣj3;NWTTdwO8性1[ 6hРǏKOdufH$3իbxذaFFF2n3y<^JJH$200aznGEE+REEÇ2gV{#dK|5tK.uEEEE^gϞ&&&VVVwnk:4Bu+W$%%C PsmmmKK55ׯK2_~O (((0o1&***"ʥ]e|#Ȩ/ 9YwyP8gΜ└D]aaСC+ڃ ̌ ;w*))Inr\i䰰0???______"jkk۽{7s{ҤIϟxҞQQQ2~ gnD!CD"q .˴t577OLL H1߰lmmMMM7m$SUUu;wtRuQDQ__prss;\}:3hmmÄ===>_ZZzaK';;=zɪEEE***].>|ҥKHCCcܸqK,aF6ccc#MfiiluCCCllletE2vH~~~ommmD$ -,,bbb ;]Z)Pػ;׫8880vZkפ7{{{[XXJ*++;wN8cN4iԨQmmm &L`#""d|}}KKKd^+}ȡiٳgoB011ZZZ=8;3*Z:200x뭷vYTT${J!Gz,mmٳg%X,.++KOOȱAD$$$d„ &&&Yf]|<ńB6lX 0hkk+))****((xyy€URRrE1B޵?uu%KTTT\pA. 9ȟNjbŊcǎIτ (.==:{qrrZlRuuuzzzTTs |?=<<233] Í7us}z 9@ΐAr; xҧ$Ǐ˻+ Ar;H` 9$vAr;H` 9$vAr;H` 9$v0 466ݻO?m?>==}jjjzzz~aKK*)$ Ǐbbb$tdqqʕ+ .]˱H` 9`@ JII0r߾}_*=$ +((ȥ}(;;USSs͚5ǽ{!!!Ç?r3Hgt_***8)**@gЇ.\r{M>}?]vYXXhkkرowڵk~m}}2kkks͛.X@r@ ܺuV^^NDEEEv])>윝m۶o޼yD"!9455mڴI(qqqvvvk׮KJJ/_j*"DW"Yn]@r@/~jD. ׯ_ܼf###MMMOOYfQDDEGGQqqqttt]]3$lᎎ-z׉wݵkϝ;z9"1bիWBq?"Q!!!)s;H`<؜{'(wk) Ȉ{ Zs;H` 9$vAr;H`OJJJ}] `阡C~7( N :ݻ]v͛7g=0ltbҥw.\؟@cDFFuoYZZfees=0:aee5j(a@ xR Hܒ%Kx<^---/\ꁁgsCmpX 8ΙL4[dK] n- @. 'z`@r@$88XY/^\$xgϖw90 9@ӧOАw90 ZHHK~5vثWbbb[=3Cu9I,]NU@?imm=} x91x<޴i] Hx<yAr;H` 9@nT xVVV'O~;w-co~EGG;88())u( B'' &`"hΜ9rMLL|||Y-f^|sss.\hmm}c-;;͛DZXX8z3fHn߾}ܹuuu777WWW;;;PnjRRR.^x}---???[[[IOO:44411֭[GD[nUTTLРѶmۈh˖-eee̼ Wxs̱+++-f-\^^~{!Cz_:15~x"~:eff7n;wnRRΝ;ׯ7o9rcǮ_.#6HAA!999::_ܰaޞ={w_9ɓD`3f͛mhlQvvD"VSS#M6; :y}Ⱥ0[[O>D[[;$$M[DhMKKQPPhjjꅽ2!9(曷B"9rd„ FRTTsww/,,kii9z@ prrRVV~왨SNjkk̝;W"X,.,,bA^D"ݷorPP3^IIiɔo+ ѣG766xW\9e"2dȐ!C>>UD")***//ttt<[ ꌍ_~cYRRRWWe˖#ݻGD@]]~rvvvqqqqq>p0:ܻۆiE<@[2jVQQ!"]]n8$u}"խ$"H$}KCCCAAY-֯_iK۷/,,,22}]udQSS[~kdggO:h[2jFØUTBBijj?A"r6D\>zJJJ}dzgVVVtRTTEq\w۷ d 0EEEݺuKWWHSS UUUMMMvvv&&& ׯ_?w\mmmss[Ο?/{%ӧOWWW7558qZZZ.\֭[/ƍKOO?|tlfXL:01 vg䩪2}AZZZSRR _yD={s8Ç[YYr8S>}L`wyG|DR\\LD>lhhPVV&">{SN:u\orUUq555I$KKK"bf,**nkkkii=//ܹcggv"I&uZH$&WYO9pMWtx|UUU1cƌ7Y .H9_|9""qذa3g422_>x@:8m4Ո8w???斤W644DGGx<'''ooooϙ3'--}VVV*o߾YU[nikkϛ7///͛W\),,d5kVjjjAA;[suqqy۷3Ө2? eW}ȑ';9pAr;H` 9$_UTT\z5!!'r`{n\\\VV֧~|󍓓S)--=uTnn@ 0a_)$ߑ#GzKN%Ep9H${MM *3#{#Gܾ}[YY IDAT ;gߕ~aɒ%.]wvv4hP^pyr7l mdO$Ivvv\\MVXqܹ>mI]{q^ #~__ʆ xO=Wss;>]v5773-evZ1籿MJJjkk"3gΜ9)#FalA]]]||իWUUUz=|P.ٽ8/pQ__caaaaau~mժUOp }Y->}¿ .xxx=u>3:|ee;CAt{nwհU>ήOEp{o&644,))a+#޽d> N1I̞ ^^^G0vX\26ihhhhhX[[O4_ _!9zzzzxx09N<9n8GGG .1tp{=-au;lwG ﭭx*{Nܰa]; uu]SSroܸY;gϞ\^%H$҅zT7?ffffLw%UW8×.]޽~HJJjiia>UUU2VX}'zo+~p{髫}?onn>{{pP(,//a\3UUU/͛7]Bvv6oFoCr@SSS\nԩS322p;'=uհ:lwOV >2ޣɉtҭ[UUU߿#Fdggkhh޺u++++222,,,))OSS_~QUUijjJLL7nܐ!Cϫ?[ZZ2 WUUEDDH$;;;EEEX|ݓ'OFFFXBUUjjj-$???));V-O"ޞȨQܹsƍ---UU7o{w3MTZd-Q"ɖl{ u\\Z.WJP 7Uej~;iA3^?TQQyYii͎)**244444N: -X]]֭[1z ͛7ٍeee{^~:٪KOOO׌Y,V||<֭ۓ'O+**X,VsKB:uꔜ\RRҽ{qٳLLLbcc322:uꤣC6m)//zjUUU׮]KM&QYYi``PWW7o޸sVg@ۧ%={촴JSS#Fwɓ'QQQ)))ݻww277g2EEEk׮FFFۿ|2!!ʪsfffZZZ,cǎ3f֭VWW>ydRR ߲/^:~ٳg?ܹs, ggg777W Lٺuk\\!*::ZNN{r"66644f_NN*===//ԧ6///0jԨBHZZ  !7nܠJMMmذaW+++~TuU[[W\yٰaƎ}~zΝ{pGCCb%''w޽SNYYY AR%%޽{DDD|r„ Eବ+++;vb=xܜÇ?xW(trssmF@njfxآЇBl6fSКdee|8qDiӭ[7~GzzzpAr=H 9$Ѓz@Ar=H 9$Ѓz@Ar=H 9$Ѓz@Ar=H 9$Ѓz@ap8i%??ՕbQKJJ̸3K8 .dq]]]ff&'OpxQ Cp QPh/K$GU ׯ F߾}Rs:uJI ; 4m4yxxMwtt422J= ; y'z{{KHh7Er99SJHhԩSUPP7ntKYfihh(**Bf͚%@& 9@3g666BTTT\\\]$2~x&IqssSUUv9 p*KhhK111ˠ211qpp>G@,=,, e˖ 8PUgʔ).cϞ=|Sp>BNNnĉҮd>!9$Ѓz@9wNJJ>d0 FFF}qvvVVV5'''!88篮_>d&к 9+Vxի ƍuuul˗/]rUV|š 2k, wժUl6;77w޽2ʕ+C b@p Ҿ}{MMM999ccceeeUUUKKۻtǎ555چ___MMMuyԩuuuVOd9ڄq=y$%%֭[̰/_M>{Аzܹׯ_kkk7nر qH1`yyGFFN>}o>#GY[[߹sG RQQi!/m#!$!!?wٺukSS5ÇgΜyȑ}8q"!!A(ee{]~ۿ={^|Iv߾}cƌ9x𠍍ͩS!~~~ӧO' 6Z$@[allLy-9vذa2p@۷oXݽgϞJJJ#GTWW榦ӧOuACCח\tАhaa&]UmRf^TTD1ܹs)));vܹ35]ׯ+**y'B7o} 0`L:T`nڴ~K)--VSS#(**>}ӄyyuQ?^SSXZZB_|YRRbmm-4,!0 t}|w!(**jjjvnРA7IJJ:|AANHի/_֭ی3̸K}w܇ӦMv9LLL<==!,׮]SPP9rɓ FUUՎ;||| bC_={LLLx#9@,H6K09pAr=H 9$Ѓo4544$&&FGG[ZZN6MZeyYYYJJJÆ s/+++66v۶mArEvi]yapppUUeqsmܸqҥK,=z.z>MSSSii˗)-dddܺukȐ!hBZW ԣGK]Pweք//////|޽{O0!$$jj"pZDEEŋW\fkkۧO-uU+',%tΒ@>u%Q+W0B- !BdZDFF͞=k׮_ nqqq۶m~͛7|}}E,믿;vk֬:uӧOLMMgϞmff(X.]hkk n8&&&66vƍ $ÇzjVV-_͍Ν;שϷwBmz߾}ݫURRݻԩS_xqڵΝ;SoU󏅅޺u2226,>>ڵkl6;22gϞz"4dɷT ?{O>'O677} ؿOۻwJKK?v*..:IJJק0>{l6{Ȑ!'ONMMsqqa0=t gl%&&jiiyxxpl|wxxIl2b[E6iKȎ>|#{)---[Y~q!...fffL&555aÆ &BvڥK?ʊikkXYY ="b􄮓oDɓ'Bvd29Nݭ;B8`cc`0ttt̙b^*%IQWW1c?~Lp̟?>%8PzjnTi PIIIܣOʸqLMM544_YYYQQ!iUP8[_?3bĈ*))x˵&wJJJ555_ZZZy555 !{S#$bꔷ!w-[!_IIIܵ1zF[gvvƍs;G4ijS.Qj:B::: [KKKUUU)&.cQ~~~o޼ٹsI+"B Q5| ժ;ԪX,֗*sƖ MMMWWWT!!! 9r$u0Q-" -'Mv)OO,L4N9rÇ...>G}tܦiYGGo"1ᣬHhZZZ'NܹsԩSEܢ-I]?E/RRR֭[wر{Κ5:? 7!fSk5,GVVVII 1ޕU+b)H耈4*}Ȼ~q1&|9s >),,ɓ'B{WQ;\߿WSS"ȷ*uE l? -`{"f766eeeٳ'88~PVVVTT9sfMM߿nlSr8 ~7㽺";<:}ŋlBt[nȾ}vYYNgffΚ5뿖-[b !O>p8MMMO>%ddd(((]>##jԧ_ݻWSSٳOV[YY S(inԎp 33PoO>=GBM:t(OGk׮buþ=/^XjԸw&&& Ts, n:""bʔ)#۷SZV||!CLf߾}P[[{eooڹs{B͛w BHv FUUTv 9%&&9rҤI?˖-p8Ԕ3g|;v(++0aϜ9sa9x 9͟?V֞6m5ɓ'-[aÆC.X@GGZJUG(HjrpTRRү_?ꡕջw$V'Ѕch)'/9}RRR"3!9())B^~9utt!-^| Hh)rrr!!!l6w:ulb!;;;55ӧO_˛6m"P_^HYbll` 7o?2z۷GGGBjkkgi&MMM///wwwBHv!Ɂ# 9ݻ~ llllb``Bwpp Yf&&&111wwAyyyKyBǀ Zhh'+ @ArGPץQO዗!KK:GϞ=^Pp 9$Ѓz@Ar=H 9e55tи8I2hȐ!TWf̘!z@ 9@Yf5nnnd pww.//?j(}}}ɗBkn̘1 8TJفfΜ7QQQqҤIRd8q I&K$HdN2EQQ;i̙R, dbnj#z@F 9YGҢ~VTTPVVnI ,EEӧ+))BX,+(Ç' 58Q fhhH5kb(8hev)-?{lĈ:::nXX$7(ȸ7oބ6Lb[TWWWUUmll|dXRR)m'@rJ$7w֭#GJls6t:|$cdAr=H 9? <<<!ӧO?}طo_hhhYYw i9Ȫ, d c˖-48{E/UWWwܹ. d G[["{),,lb@f;m]FFÇ_xѱcG[[[jb}}}\\\TT51))ĉ999:::nnnSLٹs7!'O&\xQUUUZ;c6-33sժU>{ׅ qqqOOOy;v̟?}ʕ+\y&b@riwﶶPWWwtttvv;;;rgcXݻF]])*G͝ҥKϼ<˻uF=433;Ycׄnq>!\2Cr]qnhhhBHgϞ #::7(ulHijj"CEEkjjhhtuu]]]_zm۶{B֬Ys̙TBӧOUUUg͚pM6q-[P} Ñϟ_rT{+mڒ%K/_?dO0AEEeݺue˖:thJJJaaaUUUs555% 6[lYxw$cL%44͛.Qd$p Ar=H 9$ЃhoBr|jjjΜ9h"cǎ 8h9ӧ{߾} sR}G%2Ar|׮]koovZ궸@_q($ש|Æ VVV֭on6~Bƞ:u:t:thAAATTԵk{޽zɓ'?>44u޼yVwؑbbb2`Ɍ\:|0gΜQF5JW^qRPoUUUBRTo(eee>00t8U:Wd2S('''83qPϜ9#xCR~-[9s&<ihh8uꔒ;um$i***7o~mIIޯ_!Co>>>,ȑ#&MZjCcc#Tjj*ijjz!!$--PJKKcXK.UWWWWWs8 |y& ʈM677***#F3g <[~=s.]:TYYO?-^ԕ+WΜ9;333??}[.11Z'??֭[ÇwĉC{{GEEUVVFFF*((zyy΁n2ʠ9HV=H 9$Ѓz@Ar=:@4j(im4hٳg%ńݻwKx p*NYx.\z@Ar=H 9$Ѓz@Ar=H 9$Ѓz@Ar=H 9$ЃR[[{ĉCϢLJJ;wnΝ%Si[ddw}WVV(b66=eʔB-Yf̘Ǐ/!9s9~Vq?_~vvv oXGGG555 ~.''GIMMuttTUU{.ϟ6L[[{͚5ǎ+**>@rX.]x⢢y 8`y WWUVݻ788ٹmuukΞ={ƱcRkZlYQQWZ%Z8"={ޡCO0n:fudׯ'8p|۷*55`,_j޽{ %kipba2 Cdْ?nmm͝2o|9sfAAAaa… njN122*++[n]QQǏ̙N8믿:t899IwAi_YG}|o QQQ܇"ʝ:ul6ȑ#JJJ={h;pC… KJJLf^MhX-ZRQQQ]]/H.$˯^7nuHHʕ+ ]HVXƏ{@Ar=H 9$Ѓz@Cnݺ}x}BHXXw ɜ0a*ـ:===nS?A3g>> OOOi2g@]r8kkTi2 -!Wڵ1@+FIf.Ҏ;$yIliiiЅhƌ#\[Dr2\plCr=H 9$G^^޽{GQPP@)//9rd``غuKJJx'2.x d~~~܇ZZZnoE/U[[{ĉ. d GGG"7okb@f!9ںTO6/^={ݻs޽{˫cƌ9u!dƍ.\ 4w555R0$@ts9s~~-99{_~޽{۶mZ~+!?f2R $@i&;;9shhh=zĉtWWHl ۢElmm=<M9uꔳ}@@w+v튌,--m݇::tÇ ׯߔ)S߿/8_q⑑!!!vu떹ff-[?^RRfccѻwm۶ٳŋǏ5k̜93&&fС+f\ojjtɚ%KyoN~|vڵaÆN:knڵl6رcܹs !SLӧ'۷!CTTT&L@y!>##XYY .l=@r|JKK߿߿ggg555 UVןTs[n 6;v^ѣ9s,YBkq5xB) t \z3뱵|ի9"Z$WHMMmС>w-)))//wrr8}{衮gϞoVUU%''رCp)995O}}C/^hnnr:Z~rpp9r+^^^hѢ]v9ourrbXIII$6OyaSSá>BȡCª8Gܷo߇XH ְj IDATAGG'??z׮]f͒bI -8OhѢiWҁ;::]2o޼'NBڵk`0]HIJlٲ8C9|0uG]]]ՁD!9@,O}TفU ܛ7oLMMy" FXsp&&&߻Kfy{{^`ӦMb= #,ޜwrrСf5Np]$2k,"ɓ]$2i$ǏҒv9 pCBCC]}޿K.xb&&&bΌs Mch]Ĝe>|xҤIҮZڼyƍ]???Z:|5k]$|ɔv C@Ar=H 9;zhyy/СCҮZ5kJ hAH+Wnj#_?NNN;vtppt!ŋ6mիWqqoֳg>}\pA"ﯿjee?k֬=zYXX<~S7F޽{ !'O633Zz5u"K:%8fލ79s}ZZZ:dޙ !!"!tڕ;ƍG^t6^iii999K,Nޱc͛7gϞ-Nh޲eˢ7lذvϟ߿„ wBRSS ~A"]X W\Y\\xb(BjjjS TUUZhuhѢOZYY}3gܶm!DSS{_zĉ7npssSVV:@ϟ?睨`jj*~U kp=z͛ӭ4557obݙLfFFƵk6lP__OijjdلFpׯF F# a޽"##ׯ_F)((Z szFFF666VYYyժU unnjАHwaX񄐻w*)) ]ݻbjsUTT\p!))ٳgڄSN{nÆ .,***..^z:@rzSN_t)!d޼yfff***666gΜqpp}6!d8q"uz?((H"nnn"6l kɒ%QQQ K.URR:y]]],Xd2 'MtѼ<;;qYZZ8q`Z 1 !j̙e˖]z+Ĝ9Z/^^:33;EUUG h!xan999>|XfǏ+++kjj222o!ૅhF}ԩ7o̘1)""b:tvi*VoԨQFvІAr=HIIIYreֻvpU_ G^޾}+Z6Hfh3m6={쐐*3p7!#/]?Ն3WDWiiytbkk$ ccc;8x+# 5'..nܹ׮]v-Bt3m994Wutt.L~i.~_`ޕ?jC"]յ>99900pGyy) C_g@ JKKO>}I]]]__ÇK"!$Lde|VҾ}\_o޼r劶ܹso>ydihh˻}v!322j 9Ν;:th^^/_AWL[俷}ɓ;u4b^SLٴi=ܺukر:u߿#GR"JNgjO8ePpWB}q֭=zr劈gnn:/_H\l6;44ֶ]vԔ#FX)SpOCgΜ)--=p% .8;;Ӫsq>!{?ܹsgkk뀀/_ sIk׮/_PO99ݻw8cǎqㆽ=us޼y/..ȀE6mt5##0aÆ=~8!!Ȩ_~T=ʹCCCObxBLE5jTvv6Hɩ=rH^^z Sg1.ys$]v˖-~YL<_k3mR30̥K:ujBBw%QCCÏ?jժjkk6D]6w7E<}a4磃F˼y󬬬tttƍWVVVZZ* 4H77[ćKVII?cǎݻwO8j+77WYY:/'~ uիWݻٳuuupiSis;Oi ."9s=zhѢH]fڽzN&ܼyS:_O^222r6G=z]>}z왝%]*{oe@k>0߳x-ħ;g=̙3kWp$AWWwҥK,sNppMLӽ{w<_k3m խ:MV|U[*)'W"*߳SDB⣯O)++Nw:!DUUロ;wnbbŋ_i… W^_9@r ưaÎ9=qpo6e:w7=VAR3\47b|!ٳFNNw˗/ !Â]v]~}޽k{n=444hU zzz˖-՘LիW=ڸq#un{߾}EEE T 6\Dh3m///1is?#~3mINN...6mƆd?/))q4RS(_֒! >+!P'?57"^K|!QTTHJJ~l,&&FEEՕR]]m6//3gn߾̙3'O>χa0cƌ!_o3m%%斥 ֭[߾}|r///j@x57jjj+Wp8VVV]tYp!f yRK533#Ԅ<||ر# >bJlu}BHBBBuu5߳77obG`ժUzzzKUUU\\Ç׮]khh;GGG[Vb0sν{.yѣGu"z>X&icGTT_3mBHv/..4hwS)[nws?d ={;vlL&svvv۷믿9=ګW/%%%cc˗yu lqqqQQΝ;wﮨح[۷Soyyŋs eFFFjjj7oޤ& GR"J͝0ar=Ο?v~ڵF2pW Yn ߳77/$><1bjnKM;v,UǏʭ;w PjT.E ###O ЇZ%4dii)B kL+::""""!!lȑҮ9@&Pʹg̘cccKRW۔:0+V 4(44T;íχ o]\\=*<.{gEEPqLMSTܗ܀25P3L\)\4L\BD3rGq# 1Y_<3wܫ͙{y#C iѴiӰ0SGax 4KD<;Z%"$s!B!G2BT*UV̲Ь YK־}{ (jСIMM|իWk׮}=x9Oӆ! O}r!yIMM/ϟoee5}I&edAAxy!?r!ܹs{&N8k֬˛:(*VU+S!̈saN>j(??&ij*!Lɓ;wٳgÆ /\rJIId===۷oqر :(!L2&?[͛7xmBCC;t`ꠄxZr\Zj``1c:W a)FbBsQ̷VB-[ʕ+-KQl" L2[:aF$saxRn+6BR,mтEL0#R[%ad/={ۊ"L2JmEq#UBۊIsQ@EV!Dr[! D2)}饗Vg9x*mH"C'9sϜ9aꠌYf4uŒHUr[ B)"r!DNSN 5jMȝ;8;:a.> )N҆N2 BdQI%wE}u@YV$wEq$B< 9ŋ >(Fdu[! B2(#:aF$s"Nm !M0#9D%S"Z:aFJAmgϞ-v/LZZ/x6l0b@¼Hm(RΛ7Om ёtΟFFZ%۷7lpcǎvڌ3$m܈R׌0/9DQ 嶆MFq6mSs"CX6)-,NNV}EXY1b)fD2TRn[G3>tCE2|fDsˠ)󳶶mo1L%w>(d>0w) Hɒ$'Я \fNmMΎ)Q #aL0 9r[sCz:@chY!̎ۚ>}([ÃҥM0 9r[rׯs;.Ib#&&U,,^XV5$ É2D4jDÆ4k;͚3((r۾{8v-[IRRWfpqaC֥|yʕL֬IL$1wf3gjUto_Ի$ dQ=zTreJ)=|֭|5'NP:{ӵ+]Rgd,03ӧ a G9 )$s’ֿ |?9Z]zFuffa}09bڴi}Yfff% e <<|޼y۷oСMZͦML0s&cRW&$\ĥKs>$&vvS Ұ!-Zg%vk֯CVY;at9}'gRw߭]QF͓e uF&4㏩PAkص`~ ʖJ*VΎR(QRSIM%%](_wwz`Pk膅1a|%K #! lƍ#GD666}ѫjOTQv7[իi:wa_}ťKTBԭK:کyS{HTzbHyo#3UaCm`{'LD20~РA۷wJMeV`-#QQ,[ƪUXYѠԭ[jt]y.^ɉS;6qk2$̃da0K.]2uFΞ=+'F:Ś56sӮ-[J#.'O*Wf||tQr2'r%K0u>TdaΝСCbbiCCRmٲȁG11G˖:Om0o9\~m۶qqqEUQTjպrJ }ww9pz; ZW\k -m/f$6mbh^+e %I:Yݹsk׮<ȑ6lll͠K˖-###eB}V2xxˈԭk`yu~)S e+԰a/ϐ!TĢEFG9Ǎ7M8VVV)B}5˕+gHMٹ[nի?N:鉓fQHvёYS߼Y)SLx:#((K'OѣGVVVVQ2ip"$sa>H6lPsOO ')7QQ2ظ1 x1/.29dQQ,XJ1Uf&>>df2`NPٶիߦiS&N4]X"$sa&OfMMSF>f UuqswrE;bm͊Pg@$saΜa./V.o ''FݩT ^WCda 'Cp!-ZЯ22ivvXD,++z!vT?-9IDATٽta"DX_R%*Tݝ͛9w%KL׮s'g+73c.zߵjʔ)iG7WI0_~E Vb._M>qu]S',b_t1_.ܼȬY''N.&d9 ^~[[~W_jUʔՕ+s7u|u+,(r4?dש+_Y۴E 6n4iX $sƲxnhy9(<JBDD0cDEѯ+R)`z5ktijGooed2tUnn\ƾ}ȰalJRbO øgnJo_=ϪT|!!qO?y >wY!Cv;z7=e˸s;7;;6l@\oQ ȑ 70zQ0MpwWp$$<)C*ʕSVF||HHMxu2Ԩm^/d hЀnݸv 1{`tZ|y$.;wr$4T۳iӆ(F`:llشIYqqܾtgIMiSl7gnx%L,KqOxYX& ƶmJIj2KMlnhN,k]Yq#Ç? vUFnm I&dfg2ҭ. 9KӎPtM>}奼8ӂ6ѻĴi$&eraёFSS9vJr(UZ QFt "#MȓdjԈF\_@ǎ/OX>>OD~7iْnX5s^]MpII:M-QZ8r CE9G1S,JѢ[G">^N(4tAc[-dHk+11 Eɒ9G1ӶvCa=ҙ+\2 {[III}40gi,smJsj%W̒saQlmIIyH)>3]!۶m=~ڶuԸ> ZdX: h}R=CboN\b j׾3}:i` Zt&|,=ⲏ!#Nz5ܸiтGfΟחc(S#Yb:>u֮嫯8qЛ9RS fq-=_*,X,5UHL2+X ^%3gX7g~O/}vouEZ/g0*T0Vw;GŊO~ß~3`R_t4;e 7p!ԮsG!:jHIa6m]0q,x(]rႲ_ w!8X˷Ghʕ#>^P"%J6rR~~~%.J2y2}`<=u-ն/iT̙͛SOL U|v"҄8&FgnkԬiE3gwAΥ_?آjC0 ՇڵTD۶LĜ9OX:%(Μ!-M{ O>ڎy|2@֬QNwm5rYkiX4eD zOowۑLv{woW:5\ƍ-8BCZMPrG:zS~~DELӦ1uqj5}Gڳx$32ؽ>}hߞ BC Wxڷ֖ÇC 7MgArN=|nd}uUп Y0ٴdKj]bc4?MU4s\3$ 0 pdM)W+WMWά& æM]ߣwWHM4r۩=n g+j5˗g-Q7Q\LМ@d_;KG2:wG"* ӬY nnJ<0|8:Q-˹st^z0iL"/ϜҫWgL\a\vAV-[R&[*wOh8y[\zyʗg,/M<矙66mcٻW[9I?c%1PAJF&vBcDzbG̙CppwXJSryf”)í[iZ{ѣ,X|@x8.zd @۶XYys"u$IL$$C4I㼽ٳG97^ݵR-Nb"W(;HO7@M(4:Tу0,ն-K7orӫɉfmΝc(ƌ`vJGJ 3fP*ЭP,sV88PwX ,5ky܎̑#ymǂԨ{ =zh5U(ߛVwԮ'ᆱ\id]}=V^=JM^&15)[=8r&M}{^1˒ۑ)ʕ9z۷qpw~K&!!L9tbcMqm#gQޝ:yӖtջҤ ~~tnj4+1p +#& ` c4*!2G0:Տ ///ܒ}qcxa޼/@"`{ִgw:t 7?0ÇsM?p劉<҅BmAF-ZxJ;ұ# *#CҲ%?ZÉ̙۷Y__If(fC([++{y S*7s(Z<*q̞+W~ 8@z2t)kk+Zm;:bgǘ1,^Y|ՋvUN2Zb8-}3DDrrzq:̜)}_Q\ZmZYmu.^̡C|-ÇLٷ)S)GIԭ,G&̘Biî]V 0I(z^aΜݼ/_fx^=t6n1 Οq#e5C5kxm<<+g$sQDݾ_0zSj5?ȇrδhA>p,g!Ç9`%$0n[0k}deHJOgϵ=۳;t@~ [u,7DGsWEj;PVW:ňİqNUL9(ghg(=?cc bNBCIJR%mcʕ֖R22HM%)Xn"9GGzW]%&gjta=,!D1!sb/ȢE6'15S8vp.^>2''5Q#\]qwEv-acҥx{"C2L̑#t_4nc!t8| '2 ƆGHH !A..4k;]R&CT^ xȠtiʖޞUqv3iC9B!B?9Bd!z*ź,IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/canary.png0000664000175000017500000053263514701712343014103 0ustar00mgmgPNG  IHDR$h@bKGD IDATx{\LLSEME(] %\DT,ʵug]ˮ~eYK;Q%[-t=oiz̜g}>9z S@ɦ &H,i y_y󦴣 &M$:[nH; hu1i)TC|$rAz4C"g]rPpЉ_t:G^TMtx'Nv?M8QZ2h8;hHRyO' v=! . 9(-OѣG*l CrssSRR@g```*(@K.I;h#\.WGGGQ@HvDʓ%Yz@!٬mii)У@L;=@肐Cx)8CdS M@$L60DdS MCWW788ݻwov!ZZZSNݿ=$t Xv,} =,&/7bڹ׷UhIgڵ>}L+Uo>__V*će@S!o@( t|&)OOO%%%Bȼy󼽽9NKJ QSSPt֜tHXvPC/YM3o`0&0#""bbb/_榮.y`0%X>4:>@MBI0ˏ7{ժUOnaᑑ- fJ; 0&!F~>̢ Nٙd&''*?BJKK$U>4:>@MBI0̙3GKKe iGZAXޗv$ٳ <NtYT($ .%:mmm777˗[[[{{{Czyyt-..n޽U'OܫW߼ys#F 9r[WWG:uQjjjvu-ss)SUTTܺukeeeGfffӧOׯׯhmmM(6Veoی`vcy/R`+n:؟g{-Yڭ޸]_][iu )(u"|eL2 ٢7ߟaBTBt}*?",N^m4'?;|o'X~=wLL G^^^]vB|}}]\\ƌC *}-**:ydLL@ rϞ=ۿ?lK_4:>@MBpgS͞={jjj#G|CBBM;{'N?~򮮮7n Yre~~gxUYYI-㓘8{3 BŚ5kw~zB7|siӦEFF3FJ.>|+V ݻi\]]Gz@&dɒ<YYY᯿Zn]VVɓ߾}f͚/T榢rcccfϞ~z55BO8AYhQhhhUUۼEua`فl˂KԴGyvv{IB~Z3m܌!M~S;[]-;+v9O="KEbbugo2}ƙcRhjt_f{/=IT@MB0q_udd$!ҥKeeegϞe0iiiUUU'222?s^^^IIݻ O:YRRrm`0̙swVVV&$$8qÃ2o޼GEGG%$$\ra2>>>#G w}weBȅ rrr***RSSUTT˟={+,-Y>۶m#ܼy3++<>>`_O@MBQ,i1BjjjǕgX}r8;wNskjꏪ*Bcϝ;?dȐ4}}}j%33S1KYY9<UM?~$} !\.Fq: ,;|BHu? #!S'%,KbahOy;J݇IJi?eպj+F2 MN;;4=]%!ŤAސ166p8/^ΦnU&ۜ={VT]-<BBF!QtA@MR__/EwUUUzzz (++BVXA'~ǛՒRUU6mùpB]]E  ^ゞfB"[Λ܊rmu=3Bw-DI1 #jCe_zٌ&m BBF!QtA@aJ;Φboo|͛7ԏH> 2=Wf-[VQQaÆ$5mRu``فPs@߬TMfum5![Ҋ2~RK uvgg&Em$t|.  yDw)l Ir3 BO>*++ 0a+ZW&}̂GGGyyy# EE7n;99 '''b FFF'N$ r,Ƣk $j%M### D/x9{4@'e"˒%|_$0}ϗ"<̼wAG?%nԧ:UoTW_@CݬS !#,!dBek(ql|Kn?t@,KVV25졺9wüQYY8ejL2tP???^Au _lCSW@e@S!o@( t|hL6h8p !d CFFBedd @VWW>|XVV688xGoܹC={>} @4h`XT{QRRZtܹsSRR߿׻wŋkhhhiiB֯_ IİX,[.^,АbbbBmcccwBl!dժUNNN&&&ŘLf !L&`QX,QUll"Bqyy9!O>JJJB F@+c9 t&8 tf2, ׃bgĒa1ٲ쪚YQRmZj:Zj?y9Ĩe{j2O9‰+"Lu(4m0SBȵMu0șb3AQ^kٲg~u79-vH]]} #˻B~ѣGS^ޠR=`08pرK&&&<&Ԉ6̀e@S!o@( t|h*kJ; {ITT5H"XYYBFM133ӧu^zǧ̭[>z{xx$%%S3 lllg̘AV޾}meex;vP III7n\322TTT/]$PZZc@ EFFQsdeekkk۷/##cѢEP.[UU5qD ǏoݺrΟ??l0jz윜!ѡf_iiiΝ;B^luTTT>}ZRR"''gmmr={E KHH(((044tppxAff״]EffIx2u'MX$5"~rp?F[%[OH3F!XꚘ1n,jtgQ񇞽z4hOtzsj?B.gɰO;naZ)wU4Ew3SMf3n±k~T cԦ?W p oW`+}LǏlْM7󨪪~WMMaÆŽzJhٰaopհ.v ^iyQ@DAARzyZrH'D̓ K6Nرc'Ov XnnnJJ -뛒*@@K.qHi`p\\X$5"889Wy2g7Q"y= 3u__DKK˖̓ bJNNkr@ׄg]llѣG[”b4a)ɦ &Hl "a)ɦ_~W666^`={>--S߿G&Mrvvn$o߾SNݸqO"""FQ::: ,ضmۖ-[&LdvѾ͛ե @QVV޷ooԅFL;qcuzji^/RG]FF*j(''7bĈ֮Ituu<ؽ{wiҺlj*(X:Η0 sgzAAAАHl aEM/V;[ڃCdv @ Zht@dkk;cƌ_~eݻwcjaab!W^]rΝ;>✝[X3gU_ͮyүgnn^^^~k׮5Z… ތx"Z˖-3j(;;k׮^cǎ3f w]]KKKY,֘1c ]vzu/^v7oo8ojjJ;99YZZjii]|ԩSb!0 yղ2ւq8ٳg[ZZ~gΜi@ w'NЬդjʔ)~~~ߟ>} *..&L:USS3;;{Ϟ=iii- ?1RDUD-Au(^TB3Iܨݙ|ƍs}uGK|h XCBBDQa@Cm7ZN+".&4P;M HDv{%٠ tT@:x6hvr=>6ڬw{t8&&& ,XvmJJJPPн{Fxxxdd$wXXXL4I*@0 33K;bٮ)~Ŋ4Y>~|f*Z˗/]jկ:n8F6l;ML'Oˏ?xbQ3Mo.RBw֭[f͚/_8}tqf۷o?wk׮KHHobbbh IZ!Q)((l޼YVVvƌԝ&NhNNN߸q~-w*///SWdɒ%K0uq8ß+ETKkkkI;E=f6 Yݙ[n/z#hIU'-kxxxttDÀQqhΚ.HhQt1A(dQ!h9D"Z;+ < j٠a2N \O \Rhڪ-;x'7@ۓYhӧsrrwTغukDDDRRRvvBzʶO>vD- Q"[CB_k̘16m*++ʺ|qݻ'j(!b_>77fCBB>|@Oĉ)))o*++geeݾ}RYY[YY?~1ﻸ4Z.}=ڳgOmmm?~ׯ_OMMډ9shiI 6i \A;i 1ݽ8..={O]LL%%%RQ[߿GK.---MOO?})S_Ns_VVVSSs999]^^~ŊtXw1cl۶͛S_zu5k7;$~QTE4jǏoذ!77ܹson%q]-?JZYLݙgٷn;v8GK{m1 'l/]t\$B/x[=!h9D"ڠߵ+ <6R٠%ڲc)tQnnn.../3g2]vB|}}]\\ƌ3jԨ K1b.̚5޵ko)S***nݺSN1cff6}~~eee|nPhabb`jjsο!C5JKK|q IDAT)))={Y~Ýjkk=JNPBȺuzI SQQݼy\LLիWG?Phvvv666~m@@mJJJ|}}rrr>hmmM(MǎۧO'NPϩɓÇxBVVۿ|ͽtuuKJJ.]tǣ&666YYYBF.\H}{nBʕ+?|p3 !nnnW^MD+--fR߼yA24Kׯ߄ z͛gϞJ֭ۜ9s^xkhcƞ={qҤIIII7nxLςv~ɽz߿͛7[sssUV 8ߟu7nٹ?{l1b!ȑ#__ʖi#&Nsf/tMw r9ffWT'axIK'6e79 YZv@AEovqW6BH/f|o?p"[af]fާYJ22n|쪚ʥ:A_u`0 4rA%$$lܸ˗Gcӌ2 o߾EEE'Ob\. Zb !DSSsƌdٙvlxƺvڌ  -&w*SRk׮[n)@h `1"####F |ݻWXһwiӦ*++92%%eL&sɒ%Ĉ,owww_[.++ko߾]fŋy V榢rcccfϞ~z55BO8AYhQhhhUU6ټy.\tңGZYY-\VK߿i&&g$CN6-**jѢE=>>gϟ?>S RKYPP pٙ7>mÝ@TSxxxp8=zmݺuԩjjj!={:uѣׯ_O}H ("QѴ$Ν;֭[dImmƍׯ_oggbt0t/̙3SN=-[bbbN>.tGHНyYw&>hQG=ZVq>r… 'LayA't\Asf͚1cp8#GرcѢE,kݺuz"1;D4)dfFC(?4$t`XgϞ0a?!d׮]f͢.^/+Wܺuk˖-/^D6 ])]seA;tҘiӦݻw? I"' 4mMZ|95=(##ӧOOLLLMM-PZZЊ+EGGgffݾ}[III~oYYYSSW^ _UUÇ-[l1gΜ˗/߽{2!!ĉFFFeee f޼y=.++KHHnb,kРA-nB ??cǞ;wnƍ7nh8Ǒd\VVԿ###OO?#99544jkkـ͌_boݺU__?j(|ꫯJKKCCC,9//d ǧt߾}׮]駄ګWΛ7Uˆ\=`=\VBȶf/)+}ړ%Z鋟C2^/)X;`,c˲#Bm:֓{v}(-Td+BLfo?+yZ!4Sv(3}I'U449=DUE'44tʔ)-:8өʆ>|ŕl: ߤs@q.!L&֭[>|}5 kxQ -N:YRRrmC5޽;gQw+WUUəhiiP?Z Zv˗&M3ۤI8Έ#x?|M'FQ -%b+((?CCCW\iee%!.../^<޽;vآ"1w` i"AwJwfXfڹsgÓ&QG^-8[bmmuֿf yhnЉ]!W\__ႂ]vRX9$!{A5AҐݣzΝ&==s^|ŋ?ӧOxwb N6JHdv=ANN(??LJZ:АDLSp4m}@hKԄ xw!P;l2ѣ#}}}CCCgU;wȐ!gϞmF0㿡7; ڃ#Gzjȑvvv7nܸw(^z)++󿩣C& rZ0Bh[6l ;;;s\ht[ݻGԍ?)7n8p`||¯_პ:ysrss/^0Ԇ@ԯ8uQzA]]9s;wÇB wF5\f3?}TTTTTT㄄ xxx\vuoo~c?ʕ+BpB[f{իW/SBGYYΝ;ԝ\srr"##gϞB=S1y444쨇5|ܹۗM }^:22. #Rx_|BHU?.+ !23a48/wҲS;-$ 1 \0vBUM%!fyJeul9yQUx%iݙnnnϟq^$J3v_;~h X-fԎa}R :+ xW>|X^^nddD|IjOCi٣yCw6rʷovw%$$9rիc BHWVtlޮ'TWWnܸ166666z|CBC2MYZZj6l ]W SPP ;Kb%%%o?),,gڌ`V Ye RZZz .:88L0ݻׯ_ˣ:+^$jR3Wݐi8΅ ,,,] 6ZTTT]]-ꗾT%|m"..K֭[[$@ @ץH誫Ϟ=bhhx7 2dƍ7!jF7ŋ1112226'NxE B mm&Nz //O=TQ>|XWWףGFd8IOO֭[7o~&C ~}O=bŊGGGx0"@Q۫${7cm'>}oZjۢv7!DCB1CTJqqqTT1}ׯ?ID}Tg1LbVM.,X'kk놡W$D Ō)Oy3y 3G+fS<}СC3g]'TWW?zٳg?c'1 Hhi$:tQ \b ޙE!$22??pހ\I swg.`0z(GKjkkK_f>}<<u!֭24NSTTTWW{ӧO%%%4zzznܸqĈ7o\rett4fB۠O544m۶aÆM8͢ˆ-BOxBBd+w;qikVT/ߌۡԈ~W?,i!MZK"UJ .vCTEJhFfիWwd{O<^63 ]^^ޤhISӧ _SS>!jqcÊDFӒ{;vK>}h}}\… *߁ݹqbEݳdΝv=}Ѣ:ɓ3g :nhn;W4`֭[~~>EN'= كfFC}vgxB233}bcci5( u떣"uFѿl6;00>|000;v˗/iȶo@j |Rf6lK.^:4;;+##ӯ_?##_~E ͛7B[~ v9SVV~ǏﯪJ9p8JJJ<)pȑ555?`fʂX,իW w^yyϟ?OMM%&j8FÒ%y)Ky9yB o`R>J-)+:[Yѫ˫6Ck+&:gsfGyUE?˔w_Ou.%#eBbWKۨɚwけ#GSaXŚeddTVV:::9sܼ_~G_o<%*]eXfT!S,-- 䴵y}WRRZFEE)**Θ1CUU_xxxDFFVUU͜9SMM{iiiߧi#G?~3MA*>,++#G|7wp8_} !_b5~j.vZ >>WWWߵgaaqڵ?ҴLuum'<}TFFUEE˗ݺux͛7>|hffckk~A(1[(33S[[{Ҥjhpmmmeee^XXf333nѣe˖YZZrsUVV^...***_MMaÆŽ}IIIϞ=T`Pgt'r5^z.A/d4r0Oo{_.qv*>|;!d0’1 sM+f:=5BEeEf}0e$Q~[dq\Ny~rT=&4\x/ 3~"m5ۗZ5mX5k\\\N<)4]lggg[[<Ғ2bjcXV$ ]><<‚bccS]]=c jK޾}0HoFV]]}mٳg8p ..B3>}J=elĈuuu- x6НJhSB}||cǎQ%ՙ[ZZ=j۷}EiM$'' M.\011ZMiUUUB[$x 222'']9Ǐy*$())YXX Q)))g7oiooOILL 3iP Ϝ9SRR"zjBn#~B_󶶶铖a(o<{Lݠyyy{nroܸr^z1cƤ=RRR_LD -p~4JC""p%a߾}Bw=z 6L]]/ `ҤIwc/^HOO罃lХG H ##S\\p,YzҥSN <:8Nhڊ y'@uرɓ'{zzJv/ܽ{J4%KPGc@ J;.dΝgΜv a\tFFFJ;h] *U)?#<(z@&u.^QQ… K6pŋ *hSrr]+1o޼ÇJ;Ai֮]ߗJ;pp=ڏأG)h:-[9zq!++;gΜǏ7d2_v R)Ν;ŋw^z肨KҎ:9VRR'@;-eff~_~!C?׬YH; 0`?l0ccw=yDHFҥ8tܹZ.,F5Rw!_>8V\h4jZFBQTBBBDDE =X6rFBi~~~IIIwuww$QDKI Ht=H$9ruSYY9|p6^܌@ jU %J322pwVuӦMs=; ~т{ŋqqq`h"@Tv!fsiiiQQɓ' ]6jԨ)S$''$$$cZmIIIyy\.////++#=%X,&PV<(Ɋy<}G mP_u^^7|~=4h"???KG* aJ\./--(1Dv@ N-BF6x>° 3A 裏Jҭ[>Ӭ`Zcbb`d0 ~{U__)S x `ozzz\.X,̬H$bX\t/d'O XpU̙2/nC]]]nn.oܹ?z2L ɕq zma^![(dR>/ح¦,@iE)},VokA``l&Lw;'VWW'JwU^^tR\\\. _:\\@y\.ۥ @lsUUUf] ؎Abbbٮ`2L LTՒƥuuu$J|~pp0-) 6_鞞yyycǎe+W{?8P`J￿|çMFSLT+} .S} M8qذal 0rL&ۻwoUU@ Xd R04a|Wƾ}*++CCC.\:|\qC^͕ˍ"+*!D"d^!GV3YRF}}b(Ih___k) 6G2NNN޷o?PEeff;wBa2 } ӧOOJJJNN뮻<gZ`p8Bɞ&&&ĸ],@!Bh"ٮ ``|pC8??,,Id(__h&W*1v|$}K.f<==KDH;\) 6Vu/c=O'O&''>}zԩlN`Vkyy?pi3f өSb-;۫Rl2 _FGG3SD8:ݽ{RX|իcccٮ ``a|`l6:uJ&d2N'RSSq )פ) .477S.J1.LEד;j(//pN@@˥C9ݻwy.zǏ2e'|v!0 ,*****tÙ0aBү.dR(LY/**ɞ7nl oJJJvČh^r1cخ `@`|@Qh,((?tPKK 9gddpzz3R\rvxo۲4<<Օ9!l MN[xBds֭[_yVv-0 Hӝ={ɓEEE?dɤiBB(Z[[kjjŋNE'&&N0al pG2L*666C=vi ʺ[L_vvvN>=--mҥ8ԃQL`0P\H$ d^gf4/]t%Ju%үTәfÅBaدH`tA) 6ϟOOOryyy111lscW\ 裏ykg`ptΝ#ӓ'OzS3 v'z&{*KKK;;;)jT"xzz],`T޻woss3IZJ$]@?WWFqڴi4M4tww0R\^UUe69P(drb8!!ۛzhj=JIzBQmR_):@ܶ^zĉ9r$LFFFCCɓ'.&J<-**p8cƌ!MOgϞ- ٮ4VdOɭhdIT,b  I޽{߾}ӧOizXR0t\|dGussKIIIKK[xQ. \vֶk) frvF3A뢥dwL¦,@lݺuݺu=|v9رc͓bZia2Ve:;wb|,Ɏ;ꚒB%K|||. 0@2{쩮 /NKK={6@`zzzjeW]]]ԯ]D"r;nܸѣG]/|ZVT.]RT}NG6 aaaB0,,,,,,((¦,@}+V7nܡCtyyzz>|B9a2VoooUUizZRRRQQaZ|>x8yd@ooJbKJJf{ttmSXv^'7=z͍N.]U5`|l6:uth4iii4M'%%ddR(LTTuwws8PJb vdII7 d @  IDKp2M l Mn֭[׭[__}.n[ IDAT{G}T8hX&n&W?O Ӱ/)))//Z<ɓъu|L7߸s=VJOOǵ`'0{iL&Jb1Miiil555LT.WVVZ,www@`ۭ?66vذal 0zK.f<<0${zŦ&x<36Q˗/}̙3gΜillp8ƍ>}ԩSN:f dz==ϟ(3Srˋbaihh8pL&+..OMMizlC`:;;;LvСӧ4tPK!g2ҲF\X,E &~Mi}}bЦ l M~OYYYzzzOOOnnnBB¹sVTTİ] 8L V[RRrɢ_~`0?>WbSjI&IF# mPTd'O Xp!M ,p8lC`^/Ɏ;f6MFtFFFPPۥPĜCۋ/ƊL}+H$H{mJ6hS `6`¦7tь DrѣG]NX,V_kg`~g2JKK7 ` tNpJ&$ryYYY[,7N"7...],8ÇiHHҥKiNJJBZ`WZZZkLvQ77. ^JErJR.vvvR6Rr3ukSʄJoҦJЦn!l Mھ}3Jbq||}ѫqF￟={6۵Sd0 (---ɞ_M:uԨQl LSr{5IG+=NS]]h"ٮ "RG2<i{`4pNmmm 6WZUUe6mҘooo`Sww7'UTZMDE 6HI4,,LaS l z*M?ݻ/^v9hĉ&Mھ};ۅSd0.\dO+**Vmtƌl Hr;::>&N8l0GRymmmDDDZZի'Nv]<0GlRbȑ ,izlNEJV+ˍH$"I$[w O Y s܀='w}>C¦,@P(iiiNLLdyF.v-<0 `WZZZj...ѓ~v0Z- 1jyy`p8BжEV\\mw޽{V4M?cǎe.px_X,ΝQ(L3f]8r9+%9\X,qssc^AIJJ%xqర0|d8MX)EQ˗/9tPPP 8J~ȑ ] 8L3NwYnjj(ʶI|>eUTLܡY5::ڶill,6X,bN|hKG (|)L~V+RSSiNJJB3<̥>$Wz…f״>`0 }ZVR(xL6W* 9B65 2lǎg~י׿8qbذaW~71`}g}ϼ.gL6-&&?ۅ`X Z}ܹsΕ;wҥKE &$$$$$$D"}R>+..zy晗^zS]]D"ryeeb!&&&";맟~ڱcGaaa]]]?aR{mnn&UVD~]̡G4 `4lQ˗/wص&rRdΣΟ?Os<6W*H>u`oFVۦlyU†~>@Q&֗_~ /\zu֬Ỹf̙{y7?gy&,,:`1֭{_} 6 ӌ7~Ǟl'_@N~lmmx"{zѷ~d2?֧̏8mE=\aadbZr|#!!ᩧZr1ck ===j9G*/////7 E|DH. z+L&˗oئ6 !qҔL+.>@!l xdPhݻf)ڼy͛Y+W~ʕ+.gX/˱cǘ C%@# #tX?Hrf'NSS5Cʑ#G6nܸi&#4w}/3\vUjLˮx w*7}ߟι/͛7;vL&֭>}:MWveÛ8¼iӦk˖- _]twwv2G(└5kֈ℄oo{ ɤjjFQjHr!!!@({。~hhh@@ P8#G^H}}=eڴ'NL4rX󓒒ۇ)8X 4U(2͕d7hii('jPF駟&#썿m(^OȐCV%mĉ ^Ꭽ ﹍έ?yHKKKKK32W^iӦ4K`3/Cġʕ+Gdǎsqq9sobŊѣG/ŮЮ]V[[k۵b+$IZZup'FFh4*NCCCSSQpHt̙BP \iPP+#lB뮻ׯ_g1WIx1c8pC3iJddd>|Bpb `7nknnV*x(O|@ HMM}W^^vჭ899yذa Ll`0޽{֬Y/_=uT//{5kڵ(Br{v%'']v۶mEEE`|>ɓ?̙3}}}###^|]vtww]9tPbbɓϜ9IQԎ; ֮]_ISZN@m߾_LKK1bĤI֬Y啙w޲2 ˥RivvUYIbݭT*d2֭[_|˗'''GFFz{{GEE͚5Gٺukqql8q?`0'O۷ڵk)SL# n߾}}4iL&3 ?C@@NZ~̙3 EKKˢE\]]KJJV`(o}р~ynǎ˖-d566d2 'A4Mӷoqb К=b Dp(8qի(NӞ7oRLBڵߟד-?3Pg[oQY}6777;;;33S,Q.iްaT*-++3l˦<۷o'% ם;v'//}߾}ޓ&MZ>gvvN+--H$ VuҤI)))::44tڴiٮ{ NTr=<Ċ)8;#Mbrb6aX.v,[l̏&M}2[nذ>DeڵVuĉ~!y|Ձ}gb^߹sgjj'IPV}w6ś8egg'%%Q=#-[Y&))v0f͚-[lWzRK:>p=g}g}(_cccm,koo;k׮zrŢE6nh2\.۵ЅK'.H$ M^/KJJKJJ>䓮.# bqbbD"bx0WGϟ?իG&L dO---Ǹ+W Z,{dhoor|J(??(jhذä,((ٳ}7+))Q(_G֬YiӦ#GϜxH$q1 M!`0t:Rjm[GHHNII!wD" "t9|&kIR숈o(… lW CR6mٳg?%KlCN,KNN^vmۊZ[[kkk<%222fO<֭[:::.VUTTP ڲknn(8UVegg'Nl޼9))Iӽs#F=8]{y饗|}}򗿴OǏ?~Hw! jo׮](J,X'X`AFFj}ݮ#FZ*//?(G &LAd,KQQы/s{ĉ*j۶miii4kd2ƍ/_>i$:.))w=qD{{V-((ضmڵkSRR7iJasFATڵO<6i$7lذȹs>۷o^^^)))ׯJgϞh48]v-iq|IS )t6p0 ?o̘1(T /]9ytiPv9%,,,>>sepb 0p8H$#׮]x_tttD80**jВ 鰢Rp#FP{N q#}r998P+vĉ/9rHPPȑ#{_f!!!ԯv9iZmRRRGG̙3Lvĉ+غuT߿_&-Z?55b MtfԩS2L&t:XlٲToA]kдԐ~JR.WVVZ,www@ SRR$Ill"ul6755jNV5FihhjjNQ_hh@  ILL$wAhh/~#7)#1o+?#ӦM;uO?K/233O8QWW3OalgboKHHڵk׮]Vb^_W__߸޽^8rL)l0444++ĉw^?;q'aSʕ+;wi-))i˖-n mh4[lYfMRR/y-</))$aW^={lnnm6lذf͚XEyzzD$H$ĉl]8D#7b*QN*fdd Τ!==]V8p஻b_xB-_(Tv!0DL&B)+++- &vllb۫mWU*EEEEDDtV4R#?vuu)ʇ~~aO2l޽UUUBp4M'%%1-/vNx˗+LvQ77ŋ5nT*Nx<s6׮^/FVj:*JrGR1Kx<>LnE"쾄!  MX)8SN-YdԨQdUeC~mJJJMMMdd$۵CM{{{EEŋ+**j5EQÇ'111111z`\vHŋMMMos0>>>WFUUՌ3ZZZlɭV͛ׯ_?p׹_|QSSNtrr?q LR:t(??~rs̡izŶv0z)J&`j4)z W^ m̄r܀Iý~pG#̞={޽Gj;1k,??oga~3eʔ)S0YpoUTEq1cČ;V,;hpVɶD^/KJJ!"''ꓕ8qaW>O6jq¦,J8C-ɤRicc#ivi@Q췽hm$sJn% g^p06Bj+UTd3ҠҰ0 aS l K*>wu׾}.eee8qܹsl 0ȩBP(UUUMMMEGDD3f̘1V ]2 6BdOVottm'""}1L_vvv<0j(K0gP&涶<0vXKҘfP|>]/8t&J5 KQLj#l2RPg) 6GdZ7oK/=~!a"gpȑ4F6p{0 UTY22)rCCCm{kmm*Jl"bXPP 8rHK0C}L&;tPWW g/]444҆*pB!m"ٮjmjjjllh4$Bht:]CCNknn&=:888888444((H P> aS l h4>Rt˖-< 8#Fl߾}ժUl H3S5(~E"cƌA+ 'vڵZ&'TRR(d⧓&MB}0-8`6ΝKŋpa|a?^/Ɏ;f6I;###((҆ri{B}}brQQQLT"H$OOOw{GZ!.v/;:aSp,Zvŵ2lΜ9llΝ;jԨ/B!a2Y,K.) BQUUU]]P(.]d6)QQQQQQ^]x(gtܸqGfX'wڵ\suuMIIi>|8ۥ _믿dGuss#tKs~}(frb8&&͍z} AN#_F[ңtC p,aSp -;v,8z>h4l d2VUU)Ꚛچ2$uOx<U@.rtOtFbXHs=dprl?|L&+..3gMK,Ajms.\ kvtww_rokR'vٌܰA)؅i l MQ߿IIIRHQQ̙3kkkE"۵d0 0L ߒYI$\c?-))pB{{;ibbb||BnBCCѣ3!l 0Z@ `F}͜9YEQ~~~=,YRQQs}RP+Hj {]&lݺ ؛f=%Ӻ:RHk`` <%D"@ @{3'jKJJTz䎗:Ju!Lvɀ 4pBu_ 4|)L~V+H<:))Ņ^gzr\D"H$l d2577744455i4rHҥfl9|p&?JW!MɬYN8{Gݏ>詧`{׎?n;u…tbyCѣGϟhٮ]SSSpp]jG=Umh4ߪimm%x#9&M4cƌ{B|g=X߫>䓇~``fΆRtd_1Bp8===նOf@ ʼnH4''GP-ZdG_9^_XXwA8m4-[viv6gT*r;::(x׵yl j׮]c^w+i)IKKoz{{mtuuݵk׃>VU0TcF򣋋KjjW_};dee[ې /|l-00d2]{KK BEChd~E:Q]Rd2) ieebrQQQL$K,ƺ]}!?6""bWe.;mrʑ#Gd2ٱc\\\fΜbŊѣG]}Qն- EQ|>9Dx9^GkPVf\.7 6Ej۠T(r8v_M޽{W\y݁Çg*Ҏ=Zvqqp8?֮]na{wԕ $!FvHX "UQkq\F鴝j2:Զ3o-*U.l $@XB y?d#y%{OssH?'Nx<5kL4qO\nNNNffsT… _|EHryEEvyf333"ԩ666hRO'r[ʖܫeXpx.A) v%$$?~܄Qƚ .,^Xc"BI>>>3g4u,QĉVRDO"WXa¨|]]]\.(Z]]  <<<,,,L>@OVT4W}Lj///dxMFT޼y3==_~8tݺuަ͔1Ϝ9~M[[E%$$BJSSSJ9ñ4uF,RBY 0 H6aK/W_.]jڨcGWWɓoTInݺLBR'۶m3u,Q`SLQ 'p'Od2N@%@L駶ސ~ӓ~1HNlC3|a@qqqVVVff7bbbM H$ f@?LJ+ZԤ4) Jϩ3ussb@$:{l\\Fb( 6~{ァiHK:u 92{{{0:_>-- JY6uPCPIUUUĀt:]#?0a|`JDXaa!GM8H6m>DѣGWZ5VZӏ?^VVd*jІS+-**D>䬛PGGvzRbNBJ===x]^l JP8::677#Tjrr?hcJ\c b׮]W\),,4u K,Qxb`x\.={ ?x+++777wwwwww777F6~*Rc@id,9\~iLNW^dІ|@)ʛ7ofee8qr„ K.MLL5ksI][[K?|W78 :tRDŽK'uqq`A) [?B]ti0V\̙3FJ* 6 9rdӦMcs 6@_uww;99555!b1|`D TAeeT*JTB===a]L)))3jtS;T:;;/\1sĵk::::!4?_m||||\\\DDC* 皗tttlvpp囊\. <O$DuuuBH, uuuurrruue2c$l -//o޼y!GGG>_ǥK"##8ǔdnذaӦM>>>& `%%%޽{SN5u,aRT)))|z'Hjkkx<˭'P-,,\\\]\\\]]ݝuuu)[ZZ҂7# ?xO;::.^~ԩΙ3g&'''%%ښ:!1>_⬬ X4ydS6ryEEWZ\\ɓ333"ԩ6669!IE"ϗH$ĜvvvL&珺yx{ l MR;v|嗦0&( JD233KHHذaCdd$L6ut~[ IDAT鱵?i&Sn޼9k, ,,ry<^]]]]]ϯOBRDH$~sO]\\\]]@H$_ mSSSVVVVVVvv6S254BǏQ+aD"L$%s!KY,<7 #HL&[Q!E"M(FGGĜ8j===<ƆFAiUUU?~|ժUfغukYYٕ+W1(0/IIIl6ԁhjjBOƬ^,0b\ H$Ƴh4<.bZ[[Q(\.JJJJJJ:::B'44499f;:::(M@P(T*xNb{\v֬Yt333#ɓ'ᦎNG_==="H(x_WWՅ477wpp ~ p>*0A)#ǸqJKK!ӢP(*)St! |H$ϯxN333&sOY,3ptt$j0;tDzYO>=~/raFb\p>~x{2uN$JsI]\\BCC5X,H`x[e$׷ԁzaee5a„ &A*TzH$P(,** r:::X,&k:::T6`>>>[RR҂+JopN>=}tS9.[JcGX,P(4iҊ+MfI$Ҫ*ĉ9/7T??? bxX,D:8.~ZD0, $oΜ98?`dSF??RSG(;;;;;ɓ'A* B#bX,>@*3[ZZJ98-`0 KKakѣGe2I駾UUUBųf׿qm$KMMMIIYHHȁ8Ib#o~UUUEEE"!Dldd$H$i\ 8gӖ@ g4P(mWf2...NNNSLQO$uqqT0Z@)}꺺---t:10wOl'F~o&HgRnڴ֭[xB #"""<<|#VUggGD q3MkkkMÇV\\al6{8c 5N@8y?prrzk0v@)`III !TnL& \~Omf`m۶߾}?www.] 2)r4L2eժU666uVקkHJG/6][[w0JFDDL>dZZZ655ݿի3f6a`yyy):OOOSd2SRRlll233CBBכ0t_6eBq̙2\d2gϞq .**;77wyL&GGGj9 C}W^ē'Ozzz<<<###l?eʔq ʋ)嶶3%e2  cD"immxJyyyyy… WZk}qcǴT*Ϟ=;{l_M׮]K'Ouuu˖-ktGrLwA+a7ռB555l NoBh޽---xP()--]~ c`l߾]&ݻAե D݂Jr<ORegg744p9 2MgGPzMMMMMM AcccMMMaaaSSSSSzBP_A<O  Z\ƒ(ڏӂPXXH$1c3gjfgg4ԙzSYYBhܸqVVVh֦J:uTMRieezҚRinnpwލq++k(@.)$.] ={BK.|AFF-r~޽{Df{)JдiӢY,VSSSFFƽ{BL&399իK.+믿NP\]]Y,@ mr\+ˍiȽi֬Yaaa~ڵkl_ҒknnrҸ\utYSS3Ldmm]]]=w\SHrJOuK#"">y͝;ㅅoTTujj+Wc} 뗑g]vоI&G?3yNII>|z111טC"S899 jo:cPTgggcR:::$$ T,www/Hd;s,,,2DT*fd2X*,,MJJڷotĉ+V8tbpzw}j*)_w)ʎ;^z%cU W8q"y[7B5#-1}rI% t#???((hϟ=11~YreRRRkkݻw ߷'''oٲe޽7o>wܣGn#G444,_|ǎ8ի7o~wsss/^';w!k׮z>`۷oǵBCC4f4+QEc?Bٚ{իdrHHHVV֭[֮]޾gKK˝;w]v ;_^͡_$S=w @~:;;=zs_?y,MJJbd2yɒ%7o}W׭[w}Ri/2eB/Ju &''뗑g_QQQQQQO>;wnZZڃn޼w}>666~~~2ita֭k@JR"Ç o6^Eo6C`2\'!R"P(,..O5+7Ce0Rtʎ0%%%<'N>qĉ'6n;::Owvq̙N}://o6N&>s|{رc/=== Eyyyff޽knnjժ؅ ⻙eeeDi[[[ii)N6uVYYn~Ǿ<[J5f55 >,!!!**$$$>>Ǐoii1wĉd2Q T*UoߩS^xTBT7.Y/{Ik1a\!z еkfϞr>@0 H$Cs* TTOJmmm@9NM_kO?7TǏd ׿7ް׭[W^^*,,3gҺUeffֿC>駟pmNb*Z"Ç9N+?..l6=la㾮N}KKKbP3fh%uwwR9ɦ?H$BL&{xx0vZ\\\`` ǣhDOsNcwssh{QP(wuwZqFQQŋΝ5gΜÇF5R _SHt1E}?2~55 JP($'!//燄G<6HQ^^n(pMJoa/_\XX{n˗ O>ij \`iiIbees#x^i*j"?CGGB_ B_}Ϟ=6m8)\.x~˫wWccKJ#.2}H$2>X|9B}\.wss >}E/]tƍ~{ĉ/^Ը9qJzzzB8Z\Fri2RoV_H'N hw~DRg{m{%DR_LJ`%)4w4#!#cCCRmG}7ccc_g:::XG566 luuJzΝ;~OoUݧ}e38qYOO-)) vuu544}MgF)U(t:BH>ɦNa% B?~hhh]]ݷ~?qM6=zTR]޽{*ٳ qqqqqqNsD"#tBjժR/B2ݻ$ɓ'!ǏI$kv̙d25k444ܾ}!ZEDD\~}ڴil6!;##9:k,T*W_}d?~ݻQQQnݚ9sYRǏ]T*uӦMb8--;007n/]WWGi43_!ŋCBBNbb{"##%*T*MKK{WӺ}k|ʔ)W^^^[n smjj:s挹K/tڵ'NX[[k4hM0:tUV(88 'H`2r˖-dXYYY͙3'00b( X\RRr5H>ڵ 3"N<cǎ]|_H???[[[\.n޼y ⓻ Ν;emz7[ZZv؁^[[K0}t<'BÇiTTH$>B?trr"zsyzz_kMu &رB}{hnn~뭷tv?yf󡻻U"dVLFڴiׯ_Y]@OYQU_}?>d2GBn6nܸvZc]MMMnn.~LPzzz ϟ=qL#o`NNNk׮ݵk1LS¥I݂JJ8񴫫 guuuHҞf\U.K$zh׮]-ZaÆ_| &L׿eoo…3gB B"w0A)# zԁdccvګWbJzS0VH$:>tU JYPd2\.qNjssRH$===---x6.$q>+1/NL앾 T"PT<8FCQ(bgg$V-LF?^HJ/\p9|::C\|~ߤR)JU*D H6}M9l с2u (BcsLI$bG6uA`0-[g988:MȀ,\mܸQ_֭ JHHǏoq$C15;̨T̙3|_|O-9'L/ݻWqcbb9e_b \$ SQ{{;Bԁ0R>g=܃k 1]BPB...;vs@ ?aLaMxެYl@{o߾3]aٔJdBʕ+]]]!m63l۶kt7>>].\t)<<ȡT*f̰-K寿D h"ooo&Q2eʪUlllէo:iv>XDzWlmmO]_b(v|zꀀ_r'O?Ic'.\``);;7|駟g͚uʕF3/]466?V*oVkkYll3h4ZCCÕ+W^jxɓ'.\h2Ν;?@cM"\Mh74тsV뾢RӧOg2MMM߿z3%g:"""44dH$.{ڵzk[ضm[pp0BHTbX{f~ 5Q NLLLLL xoƐ޻dSF%7{۷o?|P_|M|||\\\}->@R߿L&{xx,X`Ŋ;x G(Jڽ{kfu z~?;[oy&[XX?p/JUPP`x3gbɓ'O?d~]k 08::VVVbnwhx@) F ={vkkk^^Ό7o0/+HZ[[|>R^^^^^pUVkq?~Qmnn~1JgΞ=dSFFF>y$//?ϯ[lY_z3;eiӦ:u !d "QPy{gз!݌ <0;~llþ}ڪ/]/+8233裏x}!w{)))? /T*CCC#""*++322_՘H+sss+++T~B,[lΜ9 رcs|+g͚gM2%22<33 ,Xxu^^z:uEDҏ6N$ҪuvP{{ ^*e:99͚5+,,O?]v-[ZZ}}}͹\nZZ٠΍Jg555;=))i„ B0--JDDDȃzh޼ys>~xaa]v;:le}2|0ʕ+ Ʒ~}BQ/omXdxzQQQ֩W\92>eggDGG>|X=ژ:O \57U PozuT>`<|`fth4ׯ_s޽hTڹsg^^O?$J/_NP.]1ym۶8q"--M,ܸqCRM>}ڵG9~8 ΝhSl0G իW/]ܹs{v{1֭+//moo/,,I$ڵk󋊊ryAA <==qORRRffӧO E^^^[[Fd29!!ȑ#"H&;vD"-^Jzzz666*̡[|>!`0mݻwSSS{zzbcc?ӄq'TLЭ[א#:R#BT.]re2كƍG _5^yfuuu{{{^^D,..wEY,V늈Om"Z[[oܸ!˯]ٳGmݺW3%ν9z2m}NGyKKKI$҃ZZZD"QYYv6*m,---uuu?ŋܹ{ڣ~鵆#Cvԩ۷oťj'2nf@7v7TyiT*qWNlժUG*3&5bH$^kkkJJJppv# L`2⤠og1phOرcK,5kֵk pL`"F`2B]h4. x;w~u777qEP477ڵH$BL&;A\kjs΍3gÇq27oL&kHCבA|7BQ#pAJ5V1bdDNP Z;qZYY&LpC9o;K Bb'|eBBBtFݦj\WW'HqDyyydL5!=!D&BD6ϑ#G\]]_ysk/((0) tG*JǏ_~}QQQW\Q_B,[$Jc627z]1k,w!!H(:99 Vk #N vOO^DSx!NcN edeeԘ~ݻw3www/_\g_ Ӟp G6wݻۻ_ӷ o}}z 5hT1;oۧ MZ[[ϟ?0 IDAT7{+Vܽ{ի'B~GBHT*겳?e&pg۽{7СC7o^dɢErssO>=D_A wG۠tɓ999 .޼y@ 7:05<7o6mihh(1BJdph0kHo!pV\믿X,___)fm/^4V;8X۹]rrmnnR2e<7*lkk+NA+D_BBBPNZCssk<!Օeoo\wD"M6m޽;ȃpEEEfffbb"BQcʕ.\cv_#T;/6<ǏuMs纻gbp Mog1|4`xI^Okc|A:N4.[ZZ F}}7}Gu#H"R<u,YsN}kK[DE` ]c`M^i߽>hORJKK:677o3T*RNF%(JXֆ9sŃL:x~嗶 sG ;q{{{ff#GdԩS1!o)c:=?LSPPP1 t`FF@ uuu=p@JJt6;l{@8zu7On߾0@6.kgg/}=^kcq>}3fLL4i) tJݬJꙦĞE"F:wJ_l͋$^~=BhϞ=~5iggw ܼy>uԠg"Bz '};ˠ Oz=:õBٳgd2\~\'r~~D":u*J%Ngq4]A@*2R5ۧɦ2---Ν{L_]]R^x<<*HMfaa'tKK˂\>}[ZZš-r;::/_egggeerJ*P(.]{'!(p@@׿6zzz p6-ic!ֹvN雧i&D)R{)@T_{@!//j_qSz6G!FU_Q_>.:wTQQ-o&,fq7[Vc!R={ƍssssrrx#F4ha„ ~u7󨗗lB?k4^79vؓ'O8paæN7y?~ uo믿̞|GJeRRҪU ]8q@ԛ8 9aS#^3k5un^FFFuuuTTT3f!YoӦMBh__;a„,W]]_x{{⋟y4ǚ*MuolU@աnݍ_htO-u3*?ܱcǃ>O> m۶?wܹs322nY vnO?z+W$&& !~!DHHH߾}lb2~駟~ZQ[[$o}}}e2ُ?x{O<|淨O>^^^ z衇t:x92,88Xѷo_ON!jd l޼AAAѥ?=1ch4!DBB¦M.]$h4 r>oen֘1c~{3;|{rxZCݹsgSO=kd2OMa n4a;vhkڬ vں֯_V~kg =3dRYUU&)n]dvsRԻwoqV;d;W^ lEum TWW7'O>}^z͙3'77qsz5VUUnlrwƏ>;4 ~ z/~ϟ,6a„y楤㏞|}}Z QBJ5tPϾL\>cƌSNٳG_ԩSO`O^sgF7Ѩ?S͟ Ԟ_UTWW;M}4s;aÆy&97tjBHHhr9L<{'Nӟ4o޼W^yfٳ?,,nv7ullfoH{222fΜdɒ>=z1bFٴiSy{9!DNNԩSϟ?_PP dB۷GMb8q|=4 nlU"qm#p.y e˖I֖/_hӒF> C@@'zivyԩѣGO>}ر?w(>?˗ryQQQZZB;wnȐ!>>O { /L81773R]u5wL9"&&W( bQQQaԨQ.]?úzs^z=裵uwj̘1駟5jTQQٴ;4iҽ޻gϞZ/:&&Fx]wegg>v3uĉF.FV7?uֺ_˞ks2ѣG;wnϞ=>/ѣ= !&N8i$!Dhhǎi5νm<7 6r٢:ujժU ?Xӵ,M$-Z9{UUU>[ƻ"//ﺇNGkϯsVvvv3zfgg_reĈ?'Mtw8p`ݺuF}vizz=a„SN<9,,? G}t֬Y bʔ) okkkrCΜ9#X,B={>#2,//=6f...v:F;6-׾ZѼ9w\Tkv.۷.ҿLpSd2`ha )SL>_:H+3fo]YO~~߼-?i{jѸ~vBk׮?uVHMM裏8ꫯ&O|̙o݂S̜1cƼytnm Y7Ǹ3 : >ѿL.u:o}֬Yus^ZRRo>~r\.w8RAWs ??nM ЍtN } Ql n=z̚5+88WT8'ؽ{Q9rʕw߰a~炂9ye2A@#:na˗/ogRyK|wӟ&O/?~۶m_tŋfsaa[]]-u"t5?F:u3nDGŦÙ3gbbbNV%u֗/uN۾GBB)ЕN0A@m\AwcL.u:zСCN(6:sΕQl P(6:"!Đ!C(6:G 4H bS(**h4^^^RWR v{キU9vXjjj4(,,:t))qRwbS@b}r￿sNBjCub-oW^1-oЮ]}]]؄ y4??ڴi]Ä 8hf\tJR,h,D$|j*!ĢE$@:,:pºuV^}ر'= B\@W9c zhիW{DGGK@t:GSOYt&I)u@G$:sPTqqqEEE6-(((:::$$$>>pH #G\z5<<\ >Znݺ7JŦ CfffaalNKK 5Lv{aÆI@{qp+4MbbHOO/..jRG :"))i3gt\Rg@F))JјVcbbρF-u ݈RϷX,Rg@F)tiXv{xx^Z7vݻwܸqRнhڤ+VdeeIŦVR⊊l6[PPPtttHHH||:ttpŦ_LLd3gNiiYAQl her`0dff洴Pdn(,,<|pݻ. #֮]P(f354bS@[h4#==822R&''WTTH ߎ9r>1cx{{K @wR6l`֬Y#utDږR4999yyy j:&&&??_h %J%8{|`26lp7|s޽RK.^Rg@C)tiXv{xx^Z.Kh >}xvnSlzΘ1ԩS&,Ydĉ&qŦvR⊊l6[PPPtttHHH||:b<.]*))8p`Эח-ZH,X(6H@. Bٜj2v:J|L.Wju6n(ut | FILLt8őZ699TvSSS y#***66666Rg@GA)@zJh4EDD$$$ꘘ|@[i0SPL>}֬YDϜ9rIŦDӥ8Nbzj@ԫWr\RRRoXbS@R⊊l6[PPPtttHHH||:޽{ןt֭ *jIII+Vʒ: G)!33l6L&vN~]… {1 @}111&iΜ9Rg(6tt&11pGFFj䊊 @󇷷 ]VPf~Ql JhˋHHHP111RG[Էo_\.p~~~R'CRmذfYF,ŦNFӥ8Nbzju\RGӧOL&˗/_>vX@#zҥK/^|A@2:%JWTTdقCBBFT1cKdɒ'L @:1\n0233 fsZZZhhdn[t:LY[o !Ktr|eee-: -uZFILL\|͛###ϟ?wܞ={J@c4 ǏBy睭ӧwݺmjuM6yhQl :Jh4KMMMHHxgΜpQFI@2rH#!ĠAz-Sl EEEƎ7իɥ@t)))Nbp^oZ].WmTi m$))i3gΤOPl T*U\\\QQf  w8RG|JeFFF~~b: Ŧ.N. Bٜj2v:@gjVX%uM݅FILLt8őZ699BhFLLd3gNiiYN(6t/Jh4EDD$$$ꘘ|tk׮U(fq MݔNKIIq:nzrs\zo.u*jÆ 6m͚5Rg@{ЭT"p8ڻw+Wny#Gl۶ԩS ڙ^_tŋ<(u9Mr`0dff洴Pd۹9,^k׮>RYdĉM&SEEYж(6W&11pGFFjdJ(ٺu[؈ ח-ZH,h[RQ*Fh4۷/555!!_9s… G%u:RڲeˡC/[Lf͚R!DBB¹s8?Ν;裏xYUVynq 00tK j@h/_yȰϝ;gϞR"~~~sέT(3f̨}޼ySL)eˤN[renn̙3srr q/^zG1`*矅]w}wry3ui?33SR%&&yoV[[,MR4999yyy j:&&:)VbŊ,!aaaw}7`/B[Fz}QQѪUbŊw}2A)NKIIq:nzr9/_NJJoTLLd3gNiiY\ߞ={nݚUYYyɕ+Wztw_x1;;^Bd2!๤Y]]+W555I0MʕzÏ?8bĈ]vЁT"p8t/۷owo/|w^Ϸ&k* ̱@cooo l˖-WZRLO!#طo_WW_ !J!ۅv|rUUUNN⫯r.믿,T*j7LIIxŋnC=$nbS:\n0233 fsZZZhhdh/ӧOll nj]W_ɫW24R6l`֬Y#u1k֬={֟sԩ9s!?;v۶mBg}v„ fѣ?}t!Ν;駟>?#_|"::zʕ}ݷgϞ;w^|y̘1?翜;wngϞt:t(:%Kرd2߿1usGi44nt:.%%tZ,V:ŕs=?|~Ii ">>~ٲe>>>ػw3^}[֒>lΝ U՟yVVV߾},X0a„;w8qM^{mС66Z\._~}YY٢Eqeee/ҁ.]TYYyС_l6K 1MdT*U\\\QQf  w8RGSNFMGK/5bmmn6mZ``c=vsssgϞ!瞁;v2DP !JKK.XRy{{￿7nܝw)u M:uԩRt8йi4˗o޼9999222,,lsٳN/?~mvWVV !^y啀_ZF?ٵkׄ &OLA9Nmʕ3gQ(R5>>\JhˋHHHP111RG:]v <8,,3voju___!DAAA c 4_~GݻwAoFFF~~b: nŦt):.%%tZ,V:1BQSSsĉk{:fee斗_rɓ_~kyot:;;{ܸq .߿ӧjhڤ+VdeeI-uT*U\\… oߞ}m  8Pt@'}3gϞ}ǏB>}r) ???!DIIɅ  n۶fl6!\.3gtUqĉ>}G !N<9dLv1ϣcƌBرԨQUUUn;lm_ϙ3:ȦtYr`0dff洴Pdon@sk+M ~Bl޼yǎ~inn"77wرeO㙙BGyOSZZ]w@.`ڵ l63d|@7QUUyܰϝ;gϞR9c zhmdz-[&u6TPP`Zyrrrz衤 JL&W`dS Ri4srr"""juLLL~~@7.]xJMnGӥ8Nbzju\RGΒ%K&Nh2***Ql @7R⊊l6[PPPtttHHH||:Fr-Z$u4bS5\n0233 fsZZZhhdn[t[P֭KKK۸qYMBh4DÑ^\\j-hQQQǏ: JTƜZ/u4ŭ\r3gt\RgA)hNKIIq:nzJh#E,?(6MRTqqqEEE6-(((:::$$$>>pH tAZ6))iŊYYYRg::\n0 ñcRSSVZ5}yM2E&IiRGhCO:ܺzΜ9ׯq Ŧi4˗o޼9999222,,lsٳ逛`ZhڵkټuV~ȥ:Ri4srr"""juLLL~~р3LK/M4Q3pT*Ն l6ۚ5k!(6Lӥ8Nbzju\RG$v̙H:1^tŋRi4srr"""juLLL~~р6w_~bShQQQǏ: @E)hC:.%%tZ,V:VΜ9#Zʕ+>>R.%&&d2͙33gΝ#G|w t^^޽Dm޼yu{~((6P*F1'''///"""!!AVK]!CTVVVTTTTT/.{Lꌸ9.]ի) ZvB0oVDDDII͛kjjtJӦM+// UUUUUUU7Y^^>m43: Mt:]JJX,v=<<\[V%uvb6&{eF=à)6R6l`7xv_tiΝRG:7zaJ.?>88S:&M@R⊊l6[PPPtttHHH||:Z1cFryDDZn`L&{%t#@rJ\\ܓO>yß_zuӦM:5hgi0bSi4DÑ^\\j+**&kie2SO=%IDyy9Ŧк~N{1M;vѣ:@]Wddd~J(6R4999yyy j:&&&??_h쩧jpM *nYyyy@@)KpB3?8޲eK{ٳg7M~;(6NKIIq:nzZ.Z@@@TTTzӚٳgK gϞR.eGdryK555|$.'?GP<RtLNCRl萐x!uVsM>-zjoh-z?o߾ n{Νϟ*Щcڴi 3=}t~I hbSrYXXh6BCCM&nw]FDTToB3Msq2L5=#O=v:{wMMs='m@D)4MbbHOO/..jͬvv y|}}}YPm.k֬YR'-ڔJ333{Y7ĩ\.ic=֫W/={|G(6R4999yyy j:&&&??څkkk_z7x^׬Y^*ݻ`:nŦ֌Fc~~/˅[n M1 BP̘1CTJPl Nt:-nVr-矟>}ZoΝ;L<900P1k,B!u"-u _; B.J f͚r\.WttYZJ[pSSSo6ټ`^ۻv_̙3V߿~ RBw}۶m0`1Ǐ/nwG6u8;wl<ݜdjy#vԩÚ0a[NjoիO:gϞ::z;>=ujn; @?K{} -A_@ۑ1~駿/~EE?uook۶m П}Y*uNLt49cƌ֊ԝ>żmOOh;l wyb|K.򪮮{3fCCCƑ#GJW}3F.صkhM=-[*tOVmARZS;}t}}}mOOdAAAR- MɥfΜY^^^r7dk@&t:SEZpS4nZM@VTT4JU/ IDAT: vN(;;\^[[+u Z Ŧ[Xzu3TUUEEE} ]˗N@:@o}ʤNц^[lٵkWeeeKZvY^^J;8K#(6hWϯ?W_ͬu]vq4.\lZfܸq-l{Z sctI|`MڛͮuϷE}n/=zVisctI|`ot;2ou !Ĺs6o|YNׯ_C~WB$&& !||| t\RgUYYف< /9rd.ٳs˗/3[ ;;TRM2EnٲKb:u#<-8q⫯*..V*aaaӧm6[III߾}5M{N?}ܹ~M:uu]R/--_ϟc8DA, H(-/9r1$ \,h&^.rILD]4V@E@iJ"H1QV_γ}|ʕHuuiӦ5K~~~tt_Ǐgdd̛7OOO~KMM0111cF~^GZZZ^,ijj* @ƀОl 'O0@rq :433S.[YY͚5 88ϯ{tXFFF ܿCM6=qĝ;wlll8pɢ :tAA;w#G}}}jNNNcǎݳgѣGmlld2YJJ\. t effO{l;;7n|w dKm'OT(#Fpssa:w0a\./++;~[oUVVO??~|u.Ç-Ss .#=I[oU?իƠA&L a64v]vvAǼy<<<Aprr2339rR0` yyy (Yfv}J2""njcbbҽ{wǏ+'N8:::TKK-;;;**Jcǎ 4][[ѱNCDiv5]]]'''---:t͚5zzz63Fww~ikkؔ>zccǎtҥC Q*Æ dyGj*.zlSF@{beSV[SSS__5jԨQF-a04fVVAj[PKKK5gvB!½{mVs܆JԬʻw绻W?%444))i999SNI+^FᩥYZZZUU%s===q*.^/%P(Tҽ{wAS}… dff^|9>>T\,#G[&0 M$&j>ڿxx &NX V64Axw{Ѽ*((zfQQJ9x"O-ӧOO81///--mذaʦҤ] 9#77755[n-PŢ"к0ڍ?-Z4m4/JMfjj'6 qqq.A(jjj*>lYFԏCӧO77{}ry̙Bzw)//߱cC˚ */Ƨ F@ 1UUU YΝ3f;cddQR"/lRVSMLLϜ9QTTTZZvꢪbCe366\SaaaYYL&qF,zQwxjeff&%%^zҥSN੢WVV vuM=xɩޣڼPRL0`&7qbZZ;wAoCvRR9x`AtttA{ntttaaIIIRUUUbKMMU* "99Y4BT*o߾-RCCӳ2((/ذaO?dmm-oS~zzzuUUUiiiCuu?O(*****:v옥m=\]]߿>x͛ ڵ+<<\ԁQwxݸq#55uڵy攔zeee-^>wQWWwr񃸨H|Q}}}AbbbJKK+**rssSSSk^G?nb[&0ړ:?ظONN_A(,,~={ćIIIκ?>xkלƎ+ ӣ( qqqFFFmO]vZJ&5{zzV{&$$ ɮ^)F2ɱ733˫ׯߜ9sy5s_n޼yiaBBqbbbHHHllų>+VRP_xNNN ݮrss[e+VºkP//WP_wh9Xq]%QYYٝ;wm;ws|||n݂RRRAHLL=zt]v!<֭b ==7o2,99Y&8666b[$g @ۑvbZhS2n PL&kIK\. :Hᑙijjڼrܹsa-*//x~ ʜŇ<8t믿'@Zu)5] RN,//رcNNN[455lmmi Θl }'66V Љ痔?~ݻeee999!!!RGxhH_.u Ĭ_zK.%%%={6lظqttta)¤N) Iccc+++@K1h} Rl /;wUÇӻpAZݻ{:rȖ-[?Μ9_ĴuPr?~_;wSg=zy%ΨxZEE]Ajh]( tJ=yf||ь3jĉFjR)ɪ^|A[[ shhh92""bRgiӧO?{}葎Ng8q۷Appp3gl$&!!aϞ=*7'P]^~(ƴRhI/&&&9884:-IU޽{oݺU]SSSWWȨ9r$::{͈ lO;=z4==]P4%jgTu֩SJJJ TWChh5%b *)@sGFF޹sweee?CUUՒ%KBBB-AGG7nZƍ!uf}XYY՚65vXuu/mQ~~~~tt_Ǐgdda۶myyy ZPl3f077ݭ[7ɓ'kkk]V\a222޽ۻw!C6`PooV=-Zakkjjju3ԺCBB꾷,nRyΝ;w͝;o߾5ps'̬Ou///OYK6o<==~-55dƌzLSSZ^B-R3552eJCG$nOJJ wرcG]oFVӉ'*++'O\k궡ӥK._Pt݄*NKS?Uj0zCAl <|nNz) utukkkmm155Uꫯ 0gΜ#F8 uO7ƷYܽ{ի ߏ;vΝ޽{O6Mz]zNB8sLddƌ3 &tCÙjq{GT Q4&[SjjV9Q2<8?366n̓Í*>=y5w=yd~~!C544n߾7yduuWFEE Ǐ>gϞnz߿cqG{{BrBaoo陒Vk N?~|=zL4i/_vtt֭[JJʾ}N:sLCCs%%%9993&!!a233'WW^xA__W(cƌ3zK ה*z'VkԬ."""wuuׯ}skԊ5:44Ku5Fc+W:t(==6lX)7q9s樫ݻ744ٳu*Rǎ,--=*82==ٹKCo߾esvvv│&5W{=+++L6a„=z͘1ҥKB]Z3fImll?~\\\jGT i3BSDm}=f IA08˰jI޽{۶mQWu<ꛋuijj㏣F5jT~ўMf͚ÇEݻwO>[j5]zPRSAAAUUXrCLLLz葓s|ww?&%%9arrrrrrNZjJJ-o͸f>}IXXXtt]|fiiiUUxZF=K*v.\(vf|||ݨǺe6~ZOn9b:;{\T}z*V驢Pl*ZjByyԌ'L PRNihh|⿋ryͿΚ5޽{{^!ͣ=zdu&v~bo/Ic3Q뫡 TQ'πjƘHt @c-<@-%%%k{jJn%TU/\6q&펖suu566>ydM6mR6&OWniiiAA 555F\OTl?ƈWQ7>^ݻ Jq8]&1y݄-9uon^C~WnoE5K__յMMM IDAT Uq8<@'UңG63PN'“3Q눚:.PMPc"ZxFt @cI066֭QET qqq-cnnhѢiӦ脅]x?9rD M#O&***244 A^]]Ç*SYY)w7^ud!Cxyy{bbb}qssw.˝gΜ)4뽽񻔗رC[[[RMWl966tDbk~c4A~UxFj(ak]WW lQ(-VQRahB-*ZTC1Ş9sѣ3gtrrrvv }Q ǎ'X7#+W<8i$BqMAv5nܸq +[|PWRD|ШA|z/Z-5ߎ",,,,,,ć7nHMM]vmz9{l zRYwM___SSӔ Zmz פ h9 Ə|Ynݺ-X@PنU4h?ݻwO4Ĥ<11188_WjN2KכPiiҧҥK!!!333{Bګ1o B gAAA^jZԃ궓Z P\\\UUUTT$#"""JKK?tP*===]=hР6Ȧ:SNM<ѣwpplLgNEIIIu^P_455ɩI=8?LKK+//ҪՐL&k긠n85Zg@u5uL$R޽{OЈ @cK쌍U?-((H.+s؈S.455mllN<1iҤ#G֭[{0)) ===::L__?//_~syyy7otppPSS+֭[PPcbbi͒5bĈ[4G׮]ן=z3<#6'cccccĐX g}Vռ0&LP(/^,..655}8;88DQBnnn|||wsss]ZW_-ׯ8""BMMm BR+vרP///CGG'66V}WTVVv77zoΝzѣRUTTܼysȐ!fff2ťVhmõh*Z gϞ0`XfCm\[[;77WTD+6}~~~DDę3g._\XX8z3fTZSJiiҧ}Cg&33355Q٘CcΟ?1BP(.^moo_}jQ111E],ڵkӅ BCCCCCϞ={…̩S)))ZZZ?*++_>p@{{&5'z4flyyy{rʀy--wTb͛O&$$?뎊L]ɿ ׯ_700P|||SB$'duThH.eyyy램ǵbw2}]mJ֌[ta2U&-uRr600P ]Jpp)S\.;wT1LT~7C2e$Tپ} jM+...00U;^^^]򧚮QkyuWVVVbEEŃ:?qWv &L0A -رc111Vjъ:阨k hSjRgyᅲ:Hcd>22R[QYYy ww'F[]^^ޱcǜhjjv_U۔v%lbRx;&b OdSm}iiY_~?\.OJJ:),,_ 'M$u.n]%%%Ǐ{nYYYyyyNNNHH[rrMnܸfhhJKK޽[YY-:N=&b iH|}}׭[yI{u2Eիvvv...R邨VdmmK/]t.))ٳaƍ#uuA[~^^޶mmݼ-;v={v-;c"M6ׯ_{w'l*B߾};/a&L:BWF]"++򫤴LLL,Yv߿@[ڽ}tszL&uo?>22R 4 M0qđ#G[N 4 MvzÇGEEI&`)NfϞaRp.\'uvRRRL[[[i#ua2lժU^^^7nܰry; [L)AE7CiiL&֭AF@bH.6dSE*44Çvvv2vرR?1bNRtXYYyU++^zI:Eq#Fd27[[tݵXYYu_4_q#RgAQZZ8ekk?/bbbbxxoݥN 0988ر~>|Ν;Jԡ=zlذoyzV}j*t)+V011y.".._a߾}iii6l:dSC&$$$x{{ϟ?366VP]ͫ:q TTTH=hkkoڴiΝOڶvҥ{~ݺu: : >СC˗/ А:'c*oGFF[|򉾾ԉÇZYӳ2L,R?~Bd٢vޭP(f͚;i$ZtA.K)9""_lllv)ucРA}ڵko޼)uve˖+WٳG ޾}Ο?uV޽qFKKKWWרgggɓ'ӢP+߿rʟ~iʔ)_}ԉ1cꆆ>%s,Xpԩ]]]tVÆ 0a?(ut&UUU!!!~7G!u.+T`eS4;Ν;w={{e˖J87|#uv~G}gR6o|޽RAgjj:u|۷og`a!8!uɦhqEGGwv2d֭[չ9;;+VyYڃU6mڔ&uN7n\r΂400pʔ)666w~W|||tttN1ܾ-ۻT,aɒ% x)}zzz˖-::ŋΛ7O[[{߾}6l|cǞ o֯أGtt#FٿY ~m׮]zceS ]k'ss{^tݻRL ￯]V,O>ܰaA:o6))O?:$7`9s/ҡ|Nj-: QRR8eʔaÆϯZJJJPPɔJe|WׯѣǺu^~eL&ua2dYwoe˖ر#))P,hoQQQ{)//={/D Ȯ]^eMܼykii={ӷnLvr%3MɦFW\//Z>00PPԗ_~9uٳgH |_}UbbTJJJv;c }}}X}F|e:AaaΝ;Lbkk/̟?AAA^^^R :)&@J{ްaCLLܹs===/]$uGMMmfff=\AAq… -[&UC-]4<<\TVoXhQFF+?deeC7 uڢ.\hjjk``aÆJ P褘l :tUUUcǎ+uEOOѣ>|g?~,ue˖Gox]Vk]M֫WM6?|ժU&&&mZ稻8::r|2LtЮ@'dStcǎ ;}tzzwRRԡ:33=))iΜ9Ri+'N={ҥK+**$ ЧOZ[RSS9ƪU -Z>/AQ(- njrʺ' B3b):ɓ'GFFݻ7&&n…7ձc.\k) 㴕/U`RR{r;vrcn݆zqc͕&e2e2L&lT*\zuݟ}Yݛ]H;$33sƍSL}m۲o>n8@` ]Md2//988xȐ! .wԹ:#G>|Yڊ;J-Z3cƌ˗wرm۶deez{{GGGqJ{޽JR433kH-YdԨQ-)uPVV8ess[Ν;7)))22WWWWtІ@dStPjjj^^^7o믏9biiCsIoĉ?ӷ~Sm* IDAT,m壏>֭ڵk[^TIIIddA'LfA*++,--W_)>/r k.T;x???33_|Q}mذRhx??!&F@ L6@뛔r۷[ZZnܸѣGRܹsYfӦMRgik׮obcc[XN~y?++w111a; 8P"/ޒr:Qw^ƍ_~۷oyyyijjJqp!΍A(< l N@OO>HII]n?Ӣ"sI7o>S#FXtiˋzڰaW^P(rssATV7322֯_:QwFQQQ .߿ŋonn.u4Pl Npݺuwy7m4x`sIwͫVڸqYZږ-[Μ9sĉ5nܸ͛7{[lٳ r5?cK u\rrrnjoofffɓ'd2ӡYRR3tz Bc):޽{غu# +VNtԝB677_f[TTT\\ʕ+{-u:̐!!΍A(< l N?--mŊ[n8p9tɒ%}_-u_fgg7-)>|CR3hkk\ԴW^&M={ !!!  #q{۹uV@@{*viҤӧOO2E,O]v}w<󌯯g s@kdSӀɦR=z999_lmm~~W^ye׿Ԥj~駿Rgi}UUUNNN :rY^>ܷoۣ_{W_}o߾RdS ]g@==ŋ'''wQQQÇ5kօ N?/\YY)uVd͛]l=N$**j…_xEPP͛7W\LSMiiiܸqnnnƍ;zӰY>|a//LtҐY/injFzzmWGܽ{wƍVVVQQQׯʒ'OdR 2K4\HHƍ#FsҒ:Tۊ={͑#Gz-uK/]x1>>[nRgi5ۓL5upUUU!!!~7G!u.HBka sA.K)gyԩS6664hкuՆ/]tѣG'%%Iulڴ޽{[n:Hꫯ>#fD???SSөS>x޾};3Mvo Ic)NNN{ݼyύ7V,--z5~(SS˗'wޕ:KX|y~|MteSLٽ{㣣#u:t..!::&bbb0nܸ*>OO~M8`Ŋ~AZŋr_|ѭ[7tMQQQ/6557o}RSS7l0d#L:@GdS<}||bcc Νkccub2}}cǎ >o㴔Χ~cǎ+WHEJe&LsI)((pvvvuu=}+222=奡!u:S)J3ݺuݻwkRje[n}w,Xm6MMM4R0aBUUUxxL&:N3//˗]\\E(ڵkJg4iRm$μARtDL6Onno6++kڴioiԺ8.?;@@Rq[:pBYX+뵭UkQE 8Q .d ZQ\,H y/PFD ^?ss@{r0 vqm6_~&Le:˧իWGIKK344tvv={"ӹ΍sԹsg77gϞ]|fO:U[[{֭LG ++蔔aÆ%''3 Νj*.tؾ}7o6mtㅆc֭&&&݋svvF)d_lIhhhJJmۺwncct4 ՍQQQ9rdXXqo֭;v`:{޶mۚ5k444V[NSSsƌ޺LG4a;wLJJ9rÏ;V^^tq 33I&mݺU(29tv_5##,~PRRZbAڞ`SSϟ?ɓ'aaa222Le^^^gϞURRrtttvv߿?ӡ>ϲe͏=ھ}{㼷A >Ϗ,Mhhhxa%>>>ǏxsΝ>>!!!so~N:`>}ݛ8ŋ))) LgiԞ={V^?Ӈ,;wߥK:wlcc4x`skl:yKrrLd` 1Z#l lɓ'322֮]_yyyLk*++;wTVV3=l޼d֭LiT~~ƍ;TuuήwF)ٳ4ph,T4ŦvڔaÆihh؄VVV2tttbbbllllmm 5o34lƍl6͍ Eqq更0kkkt: LHu|=4mM$;;;ѣӧOZnݓ'Orrr=zÇL'j˗kjj[ xɾ}~3y...:t KOOѣsᐽ=QE&L`(@kbS"''gmm4{#G蘘0N9sܿ_AA`BD ##tVZիW 2I>>>CtwwEPP b:|ǫp ЪZmcOCee :t%3c SSS)))5r͛7o6119|:Ӊ<;;;..n-~q.]dnntW={V^^vܹFb:PHݺ5-QQ4bsgccCDAAALŦ[AAAHHѣG\jee՚+"""y<ޡC&Ntqtuu}||ϟt""@_3c{ⅿ={fhh޲~]\\\.ӉСCqǎ_zբ䔗nٶm[qq Zt\5jO^tiZZZXX5*M pt$"aeSV $$ѣW\СìYΝ;j(su[n1bqꪬ9u۷oJ iccb^|ٷoq͚5-4"}||Mz666zb:edd,\0<<|[lQVVf:ѿ^|933syyyׯ_3fL h"=9CCý{ݻ7***))]v-4"S23388:::99uؑ\(/v_(?H^:w&RP֦***#"%1ƍqHMٓh!.\:u&"MCAUULpJhPl ;v,000??̘1gϞ9s*.]*--[YY5@ e5*))B!o[hCteeݻ.]B}|ի>>>gϞuqq100`:@#9:z^rݛƏ'}}ۗtt{G޼I5ЃATUEdoOsPnTZܹsaaa{srrddd>r*hPl fxK.;vUUUӧOo߾=S׭[wʔ)^[TT"zjÆ RRRFiis>Pح[ׯ_iWWW%aІ8::fffz{{ڴij{|>uРA׮]H999 ]]uݹsLJ ª*ss'OHdƬXRRR LJJjqeddKKKkjjFGGJӀ[XXchh8hР3gά^˗aaa֨4֫6n3/u,,4--˗͍&O=INz"]]1LMiX:S'=\\Qz'??zSҒ?‰PgV+##JS +|R޼ys…K.)**ZXXX[[O8}˗/mܸUR*++wO?feeUVV9֝;wT޹p ZflѣO8ѥKIk׮+Vԙnp81c\tW|YNNNzSKرC###vԔ)SN8Q]ɠ '''f;6vX??<~pܹsUUUe6-@SG+VGݻM۷bQ~ԧI?Oϟӓ'!呾>-[FTgc~<<Ɔ||HIC ڏ?իWK9 9(6=Ӣ:L2jՏp8O1bćr333,IDRRR_>|^~mnnT8""B*))՞XXe˖ڵ5|`^^ŭ[1^G IDATz葞4h Crk:yizpڴ""Gקꖇ/=ztuɉڵcڷs 7nܼy#gׯg:.(6\={688866+%%% lٲf͚ uww[j,kΝ~ 666guͫRaad _}gQk֬'fdd4x-v"++4_a!YXЃLk׋t4A#FP߾nݢXڕ&Oׯʊ= HC'OhkkW4LIIa66/G=9s[ꯪJ YXX^}=}t۶mUP(\b=D)((,^RRRDf?J*M A)14nի4_%%_iJDdbBK"MBUkWvƌEɏВzbX,*M>|^Bŋl*"._r0ɡc˥խi&L hHrv&-Lfܹt& BW쒕@&KK|ecH#Y5B)֭[YW㫇gee5jΜ9w---MLLuqq122#"6ݮ];%_zx+W ,+,,P GSSd$S~$͙CdaAd?s%i鷍|>͘AwPd$L0iӦOoR b!AaXׯ=z4A ~C>?aaaFd:4GTTT%Uxxx~:v(Z"YYYQ} fEՊyTTTTTTD奥%%%ϟ?WWWIFFfȐ!iii)++WVmW^X,uuuՔ]e٭!v͛dS^MoӍ4%Kh027W3`0jߞ &99""ixXRP`, 9r$AԩaYZp!)m@)@,,,N,ތ*Y\.W^^^RT! 8.ᅮ4>LӸqV!:qi-,/O'O>99LGh>GGG#rHfhmgDڵkJSA…Px<99q4${{|g{w :tpM%//JSh n@`ihЮ]5-w5ѸqjH4s&?NZ8i\I~K/_2 @Pl ωt*ۖ"& 2X,F5o_25ƍMkWZXbShei*Zitv$vk}7Ȉ#;;y"+K{P` ]h2ZogÃNQPMNJJz,,ǣk'N3h*KAPl @k׮t[nyzz;w\BիcǷ-\.}Qތ&kvhd:q^iWJN3gA:tJYY 8ooM%--إK;VFFy={yy%&&6KWWwɒ%#ѽ{JKKutt9ˍ ݺu̚೶g hQMˆ Oez}P~hq8DD̙y3͜I,cknbbxyyIIIW׮]322fkN]]xĈ mMށXYY1⒟O?XkvQ ddd\zԩSׯ__lF3z^xqnnMn*jrׯ_OMM%"aÆgݺuM9--LJXXXOVV6;;͛455mFTK{ԾۖׯiRP`48oyF4i-7xFFF֊+W}/ջBBBvݻM2ɓ'Ǐ ;|ƍM!iii/^tuuWSS矣e˖A^:88GD 111&MrssSVVnOUЊM0!997oޜ8q"=z($$$==]vzzzՋr/^,ۛ~Ǭ,ѱ111ׯ~7mmm %~欬WW׀˗kiiIbXXZ0'''&&:88L:UCC{{rJooܽ{N2%&&FKKkբ<ɹpŠ+KJJ ^KWWW"tss#W^)((DDD̛7oߴiɓ'mmm+++2|p"%fff۷w%7k֬;w<800PtH111SSSBaCGGG_~e֭]v(--wrHXXXQQQBBԩSedd>C)::u3gɋ/:u/xzzjiin޼Y xyy={v…DdҀEEE r9"Ӌ366&MRSSٳgg ֦ /NLLoϏ|DrssBa@@Ç "++;tPSS7oVVVN6M[[3FAAUwRPP|rz-DW_mذqӧB_)TTT}eP(SVVVSSׯ_NN;r8J̍ $gm $ee2aߟdd HzYZfVG"f68-C(DDD8p@AA믿ˋHDAAW^=a"233ԔrEEEbv5y͚5DԳgO---wOrrrEEE|>Zbb"=|077wѵ#"ԩU/ Zԁ9DUUz]~e"JHH8x \O>]tiuۯ\2o޼}٢166>Q\\_544vQ[ nWTTll/^שF}h λ~ O^v-!!AxӾ}۷?"hp |RԔD 4o>6))?m4MDf jl>KLKSTTxbQΉ'5 d%%-222DTUU%f̢{.]yPl k׮֭KMMuɓ͛7D^`WuHffʕ+,Y"--ŋDT[t"'')&HM]]]]{b"*))ygogȑ՛lv_ s֭***B1~~~fffl6޽{vggaaafffӧOol Ee%EF֭5-QXfS߾ttM TUE4il6[n=x`JJԩS@d]ZO`J>}-ZC]]]ggٳgoٲAHHHӻj!3fPRR|̙3\֔DE{T6mQPPtҕ+WsKEE4~|MKx8Am={Rb"TS5F3@"n5R1]l##S>{དྷ4MIHHrJPPГ'Obcc7l zyРA[l***uƍ%\D$zJ!or파 {{{)))QD8{liihׯ-,, tʕ[]]}̘1_|EDD_^^>tP---YYТ_nhSܙ3g._\PPPVVzI""Ǐ鰼<:::55577wȑ+P/r8 &lڴk׮O<3g!&IG&G11mxYS=I(1c(*@кlW4i){{M_&&&Tu&z3:heVwɪoى%&hĖsPl Ι3gbbb4555oذa+Wx7oׯǻsEGG B>CD222 r###(;;[4hӧOƖ=z(::}DthҥYYYYYY֭;vԩS ͐_RR"rrr*+++**RSS}||w|rYYYiiYfq\__߂€N2E(?~~ (//喕eggWLDiii|>RRRgڴiO^vw}c]]]"2dٳ3337o]PPPUUUTTt3gT/KsǏxׯ_?z… eeeeeeBo߾b,$'Ӏ5wRYY/6# i0 hٮP(|9yO3OKH^^### JJJrssEG͛7w7oܱcǣG***:wLDQQQiiiDe˖ׯ?~RRRBaUUգGD|>] fM ?XoڿhJlmmҥݻw?ׯۨQDեD~ .$$$6?dԩt$͛7=z[nWrk׮upp:::>}tӦM3f .ܹǝ;wZbL}#۵k]X :ûp8=z/% .dff*++OZZZʕ+aaa\.W^VVV^^^xs?GuƍtѱVVV O>egg7nܸ=<N_|A4r$Ŧ@ӡ\Z'O[ήENNo߾ӦMC)'IK#СFΝ-ǎmh:vtnvN'6к>x𠸸&%%yzz⻱>eDD״deB c:-X@UUTXv"% FZSSӣG>|Μ9 2119}K.]-FT|XRRB22I^^{]É(13Ν_dejZ I3 &L0))մSǎ#2㼼7ee^W[<TCTlZ{)Sl m Mi<S瓔++R}SVVVYg"WW-EEEM6Z=6೧HDTZZ"/O|O۳PViA)|ZzmTyuz|UV:uJ 0>SLСCVVVʵk$G |7*** ?u IDAT>@(V<-%bH$pu'k֬sNee&+77ի۷_daDD]qѢETUUy&,,̾/JҥKܭބB} {Dˆwرw^O-;BWY"]fddصhEYYAyywYөgz7QiҢ"bg!҇L:;;!!zbIKK+**vecǎi^D///1򒒒z>ϢNl6ݮ];uuucc#F4/hkFQ'Nxĉǎ>|Xsf255sTAAӂ .]5v؎;6 .~f۶mS@rPl 1B022رcVVVfffLǩXYYPl6ݻ >@UUݻK}d,πLMMO:_1w+7uֽ{5EEm۶I*x+W|5mt?%RUp-q PNNM73v?qz|RV.r%UU:7ot9%??~bXk׮ر@ ȸzS_l2 f 񌌌KKKW\9xe˖ ϟ8p⽊ kEulOOO>3#GL<?~yGo۶k׮[l޳gOEEĉyΝ:-,kС⏺u@ 8p YYYyڵk՛ @)HM$ 77700߿cǎcƌa:Q\]]ӛ[t}}!u:iğΝ;_xqy''m۶YXXhjj6v{+WtѢE]vmh1qqq3g$"E7A$ۦz6v:-w -t?\@@@nn.)mbW/zo_:}@ lPVӧ{xqqqtt͛7ƌg>p!vAIIV#sʕ{7c9UgggW@6ݣG)SoiŮ "`͛7_xLNKr3fu…7oެ[NAAgϞ&L8wСCżwWYY~z 6MD>>>:t͛7M\ƍs500hʃL2Z!PuرiӦ߿.]k׮>}/ ٽ{Ǐw6eʔ'O?~<(((,,~~~2227n6mZc_x5.._MM.++8p-[ z`"ׯ*((xzz&&&***N4MYY>{gwݻ-[ˊ?~\OOݽ3_zuIIIjjj ,h0HUSS^zEDO<؅hJ ?b^`;aXDTUU'++e˖I&5v{k˗M|!U"%7nۃbbbD'Oپ};ܹx޽jjj?Ĥz)iTTT2={6""U=z($$$==]vzzz999QQQk֬w^xx8Ǜ6mڸq^_q1c^"..ҥK^4ϻw^x1++K]]޾gϞ `vvߋ/F>hР2%vuu HKK[|փBCC_|lbb2~5T?ϟ? |Y.]"##7>++~0eeGx|k.^"СC!07N Ŧ͛cǎ)++ϝ;wǎW  srrھ}ř3gNJDoܸq ___ee+W\tiUUU{]xyV^=i$ii'$$TUU]paŊNNN%%%ƫWΚ5544ӳG[lINN1ʕ++VHLL Y;VX˽~sss.]:{l{o6xF>wO?~]]M6_SNQӧOo,?3mڴTᡡ Dr.;cTk.fƆ򲳳svv377o5 7^gt''jKMM5jTuݻ{;vÇ rȑ_~ܜԩS:3"11"믿Fabb;vLOOb=|p ,۷痞nݺǏ'''WUUݼySOOoĈ7n|,}vqqqss/j'y>߿=wܡC޹sÃX,J

}A9rӧ !!aԩ/++ ^pɓ' Vj9Ux$gg碢"__={lܸѣG'Nr=zuXxUU:7lP^^cǎkݻPZZ:""bΜ9޻w^~kZt>}sN e˖=|СC/ 1gsUzsᒒN9b333_Z'N}|:ut̙;wY73C Z~M]] +w- k))ԫ5>I<*>x<^QQhSTYPPPUUUXX(:VTTUUUEZZZIIIVVV^^^AAAFF}RRR***CrrrڵSRRVQQVVVN2366vtt_(RIGc6߿;qfL,###f߼HNN ;wu}m۶~ZwڵhZ??fbvN6 3L 1eӢQ?}tѢE/_|7n_NNNbN~~~۱c葍n޼Y\\LDbϘ1CkLh~m۶-_?3gNTwI=Ys511yEN~OOO---UU͛7 //g.\,Y"Zܼ(77CΝ;'P^\\@ 4iZϞ=={V?P(tuu655UPPXxqbb}6X.]6`?2**Έ㹻\Ȩ]vsUQQr/GcG\TTT7\w0',\p&MͭՆ33_!N:Uj䨨Ϝ9ƍwqQUlð3.Ȧ".嚹UYjYi2sI}KC-ǥ\@DA\XTaYA yzs9s%/e˖͛7GDD4xlѱG˹Emfc 3fLnns,Y3Ѱa\]] CCCry^x<^@@L&;xٳmll_x\~IH'%&&>/d3݊\KKK==}+V3f s}ٿDDD>}BCCD"JƍgjjK$Qmu[N%0\>p@SSS~vƍZZZ~̙Ӗ={;vXCCC@֮aչju[QMMM[N/_>zh";vjjj]Z-_uӨBè[Spu3{C'C7o..ԣ@ZI ȑ[<+ysEGG/{ݽ{-[֯_.]_9s)Sƌ}kf͚ϿS⒒nܸqΝJ\.+++ܹsڵ'O8p`޽v~ʕiӦ=aaa5><~UV >Zxҳ SMEyy!{"urP(<{_mddK/vCCCH###;ĎyT;?Ԭ~Ű⵵FFF'O2dHzzzVVѣGΝ2ӴekTSkfhh /^9schT6xk׮ٶm۾}fϞ|} jjjb1Kz*ݼy<$$DygS4*}޾}{ӦM=G=}Vg@ݩuC'5r$57SB)1f )|wI99$ܯl*ٳǜн555*͵VP(Duuuuuu"H(677744(럥뛛x<777V(U555eDx< + *xh QRջuM.L&{8Rު8Ǎ {Q÷uC;VD"!0EFٳ ǫpAiTˣ4 -677޾}'FM… ,XgϞkN4iΜ9ʋ.^866?~w.\0a"  ʹSuHqqo]RR`]]Ǐ0??500`%ԅіc[T|$HQ7cǎ)vhˣxI[TbV7ìAג\H*ؒaʫ BE;//^?~y?4INN{nl8E5y<%ſb57ljj}3"mGώ233濈7nرn:wo6xEUQR.-m=zmBFajjaÆ˗/m @ôtͣy)))ު033S9PND<o„ w}رc[}j*̓jY޽#""~Tڲ*CC)>|K/̙3'<<\__woFLL̀,,,^|+Vߏ>kDm?8p?sVwc{YYYʍ... ǖ u3k wwwE 8tP~۲e˲evرxbX'튖s׮]{WPl :pnرiii˗/7664iRO>9{Occ㖑<.\d{D(ZtYC*7mԳgEikk߾}[,u[յ~Z+SYYr7 #0WNۡnu~il˨[ܻw]vlTÇЅE11_FDOׯS@w1=ɡ?r4ڒ'w1}˪/Ν;<~3OO٢i*G NKgggCI!C_z5,,Ls$$zK(SNM0aAAAׯsNXXJo={׿|Mhh( VMήV.+S|afeeϚ5K,b1[2#0`@˙T*ꪥuҥ+-a+ܩ7n\˩4hʻnꮓSIᐶO5*}fgg ]('XMFOwdkԔ?Z>pék<&lzPX__PSSSSSРhf;TWWU|b@ xxx|###V:TyA6>i?~ܸqn:{,pNL4[ׇ+nfgg1k\ IDAT\Ípͣ(--tҾ}f͚vfdY̬hmmgM~C;{DDD[mUxنCCC"JOOggϞٳg ÇC+q)esx,;;QZdS^:t(11Y͛CBB~5k֬]vڵD{Ht%":>+H(>>~֬YODlrVAqqq/_nll,//g 9]v޽{FZzop 6ѻ;bĈ}xe׿+o̙3ǎ҉~#222z뭷>-[lٲLLL9B/D_y]uuGigϞDO?h+VPFhCE'\E܉0K .Qbbʻnյ ;'NXf'|W_\-370;s^{6l{_WWiӦ^'' KJJRxdmVVְaæNW_}7/־}$IFF;J.Qff͛7wCCC"""8peT"iW.]̜? s'>v옱r{ss3;Wuu53ן8q=zQ"J愈~QFAAA,STceT.^ꚞ~mHJف\\\=mhhPyhh3g;455?^HZVZe5ãD"(3h L^zHW4rss+**Սej9N]UUծ ^{Ƒ-C~WܹTTDedt*͚ESJ miXнrPXWWPWW' Y&hMMMmm-bl꺺:XܲOE([bP zl>y'LQ蔽%VbǦ>|7dZTUUT*ˋMNNvrrZ`ˏ|\~="P$)ge2N"[YYѼy***Ν;WRRJ'%%eggѺu}YuwoUtCu3ADS^* GDD\r_~1cFNNNtts=gnn^[[_w믻֦9s&"PVjSSӢEbbbz駟^|9::z֬Y?իWս?0Z.6vBVZuk׮򮩛au~!{.\hѢӧ/| "r劍Yv,߿7ݷowءa[Uk_~{>֫j f۶ml5r"zSRRrssy 6,%%رcŦC ݱcGZZ-<<%ѠADh"":w܉'B?߯_?HgNN֭[YY_333'''nbqBBB}}}llNhh3u}]xqɇJ>} dÇNjD"___V788xȐ!F\:۷oW@uc߸qc׉pL¦^xᅑ#G:3iҤ &C DʣHIIQkɒ%DTWW~zv:[[?o~̙3o߾UCT(7-=Cu3kFYooU۷/++b񁁁DsN\qӦM[nuҥ,;>>>33W^Q堲_3쏱[S.wW\rtt9rd1_߿?{MZ!ɦ{ܥK-z&-[[oqqD{m۶=.u~H6^j*Ql,W4u*͟O\rڽF={jin&WWzZ3MMMUS~[lkh(@j]ڢMCXH6]׋b;w*kDd``m3MRT*:PURRo߾͛7+Zx<Z&d2'''Y86#hݺɦ=GK3fpX\F%%joJZcjVXV(ֲmm=[vMLLLLL͍MLLx)ض!+CH6"??_~0`@V ޜ9s\\\ttt޽{y=uf/O{9j(#U%%% *++KNNnܸΘ1ˋ:(xV|Z,geeݻdjv7ƌD $"֦/#)3Ys3>Molbڴorp42 moRTڲ7EQE Q{{{OOO F---Vl E^tuub\.x}2dH}|| `ii!3fLTT7|3k,P8a„ŋuH]e'===#o Q݉'~WOG׿ŋ>}z۶m o񆆆\fff?c߾}.]K|CC[oŶ?9s(Vnaa4t([GGJӧɓJwh-QQO˗sӬ柪Bb[mhhh$\jԴeQcccSSS33n cCnuqqs\.DQ$ݸq###$ ;;;ѥKBCC%7tѣGػ6OOK.qEݻwaaagCx{{{{{s899[e#ohhk׮GK]x4v,?Nղe yzidE/STR]MOJ..F444(FB![^95tcjj*Lٙ$Qccc333333ͲK92!pɦЍ?''G&4SF( B"355}3f MF98О=Bs554k?$ ꖧWXYYܬ W^z^ OQyz;;;pH6_UU۷Ϝ9s-{YfٲeZZZO&BPe yxІ f_-d EdkipHё~cj*I_}EEK*/Rh}}J'<U9jccj%b1$l OD}Ν7n䔔(.UGOOOWWwɒ%ɲe˞@} XAС5nHo2ue2:x?z=襗 "}`QbSE@ d!l ]D"JOO())JD%ˉsȐ!C !!!*]^zO>%7ߤX>RS BѼy:%Pv6EG P'TʪVUU WkUUJ|>ܜ533sppb/5G9)pɦR]zͻwb"ӓd,¢O>~~~~~~>>>+PٱdҤI6lիIjjjqۉ:3 tZZ7K:Wʦ8AAAy<t7 tptUꌶEZRR"ɔoYvٹXXX|F A)t.BΝ;qFZZK144J Ddbbҿ???ooo//////-jdddggWTT#JCBB>ҥK;|tIEs}hH,gE](0ߍɓig24|,G8dShtV4;;D߫W/9驥% ^zk׮555|V׷|>  ׬Y9lذH#JYYو#bq\\cJ/NiL ={ߊ7ߤTۗ#)%iZttW.mhr9N RiEEEeeeee%АB?jhhrzux<Wcl jD,TʲKo޼@D͍m$%%]t555|>݌\.ZbD"YnݫuPT G9s挣#rIOxZbc֖<=k֬[ZZZr ##.^(ڷB=Օ=77Si)ݽKG2GsҤI2Z|ڿtn.d_TTTXXRVV&HG͹dSnJ(޹s+e_̬wފznnn^^^,gT$\p… .]!"WW׀<ؘA'P__iӦ>/:"x ?3qqqz:\N_~IV?s#Qt4EGөSN2O<\NMMLTQAB!-CFQx8Y[sF-^L˴y3!7VSH[&VTTD"|>uppАKjoo.$t B%*7K-rppP>… MMMVVVC Q$ZYYq4&褎9hѢ5k,ZHGG)0q3gxxxpp/={hHC1B힕FIQe%Rs3ii@@deE}R~ԯibͥÃvaè:LSSSee,RE.iAAAssR͉;@)S&++KjiNN\.ի.uuuU)-#JoݺM\j4Ъŋ‚}eۊ 2$ty"(++KWzƍ[nd2׻woE^vkWUU?>11/_333:th`````СCMMM illܰa=<<"##u^ɴ{7un"hʔ)\Lj*}+ԩKVU/Џ?Գ'&w@Q,gxJKYYD"QRT]ER+++B)@pKOO{\.700RҳgO hJKK/^*Y`__VRZ:rȒ%K>Eu543t5bxڴiN :23)*졻w_?=FPlG'"]HOӔH4y2͙CF==466:iYYYYYRX,VbhhhiiieeeccceeŶ---KmiiRxܐl &''RTOOO>UK$gN IDATϞ={͛:::Ç1bDPPe>} ^dɱcÿ '''#j3$tARtΜ9ϐNO.s1Ņ%wwݛlmؘȈb*;w(3ŅF1cgȈ!AبRպʇEіUH-\@M:괴k~zmm|||||||i||rȩSboXXXxxxPPSYYر#44422ÃW^JV|?{X򲲲Ⲳ2^RRRWW֖mXYYs8p!]mmիWK 5m4?Je2YbbC>%ƍ_?c<\.zy(@ ѣ_dSxJ*RKL===pJ}}/|?ӓ U׮][`AbbYnjiiuD}EGGGDD |󍶶6tFukݻwO,+vfkN@B)tUiii .]*--qww|`RԩS{=tH$ ٹsg@@@0nܸ'۷OGGpFSSSeeJbZ3%m5i !+W(ʗ޼yS.۳aÆr7~b9s ȑ# .[fŋJLL7nܘ1c߯u8j痔(vvv666666vvv쥃 +B)t^$##&$$\rE*4(((С\h~~o_r^xWu\x'OΞ={͝tsG:tC8)F JJJ XRiIII~~~iiH$b{888(珲rO%$@RRRljj:hР <ٙ" >cnn>mڴ9siiiq?444lܸq;w :"zѣ|n-m޽{bUָWjoo_B)pL&ݸqn߾9lذaÆww޽gL6w{NOOZqȑ%K>hѢEX/%%Faa\Meddz{{9rp)!˫ZM'˓H$lO>.A p;NɦԄWVV 80888((hذa\ Pk׮7n <_>} qΝ;K,?M}v[[[#L3p!+++44ĉ\] [쾰U$-../...++SiiiigghggH888 tB]|eHdoozjujR{Jv :(D"֭[?#SN~'tcƌѣǑi  ,eFiII:)[ϏڲS}}}nGAeSx\$IFFK0=wݻwuuuʗٓ~/SSSK/\ILL̢E/_jժΜͥl^:޽{fff111)@w\QQ}vv6.f[XX(VwssS,vdff($@G|r|||BBBBBBcci@@@PP1* VEFF۷O,O>7 :((((x###{uDxXKKKǮJ9T9D&"T%N[[QdSx$r<== Æ ۷/1\.?qĖ-[ϛ7נ;wo>~x#ґ#GJ$8;;;!UIƽ{b1ۍ+rIU2JMd2ٵkΞ=[QQallʗscDyӦMׯ_ Zrexxq|ĈÇ0`.1>ڝ;wnݺj̙˖-߿?AIQQʕ+3q۷ٓTUWW@佢F)׷PY鞽ѣG׽@)Lbbb*++MMM|}}TTTl۶mdK.:(6H$WuD3fLaaa\\tkRX4i^^^aaaAAASŠ&ek;::::::;;;88XYYq;MRiJJӧkkkmmmCBBBCCCCC6n_x7|s*>>~…7oޜ?u댌 &Ly3g<<<P(V(˓H$l@RmܜsB)ݾ};::::::66nĈ,)Ϸmfdd;\V;Fcǎ'uTNNa wرa--ŋ/[ԔJ&ٳx}ܹsKNݻi.x:Dɓ''$$q@WȊ*W.Mƶ]\\'UЁl н466&$$"ZZZd Ç:B"޽>Do[o4SZRRR.\<kךpQw͘A-1SN;uknn.((PI'ήb(e{6336~&t;LrĉfOOϰ5k֌1Z;z+-Zj* #hPf͚Ƞooo#D*Ν;7&&?D)\./**cK߽{mWTT} 2NNN&L`=zpvvFF)pMZeee'O<~ɓ'KKKutOµkז-[vS_͍A.GEE-_\[[{Æ s:HD$pSE&͛7ǎ1bp177WT(wH$""mmm{{={:;;DRWjmmuj)SE*^r%::ȑ#ZZZ?~DD_T]f uDsՅ &&&޸q#u<x<x8pG)EDDDDDDDDDDDDM̀۷oרQ/477777744:0?;~+Wjkk x{{O:5%%eѢE,.c_㯿P>fͪ4Ds]vϞ=#F: {mxxgϞ>}ٳgϞ=QQQj֬ٴiS]4iҤI}}&M4jHdQbS*&66;!!777:`R֭[駆 w]DD&44tO3f̟Y~}}r$"&E<+ct89Ux,O VZcǎѣG HxYQin]l1>>^g}ߴiSYQiz HpJB  :qℷkה{l2  'N?NHH%_~ٰaCVZU"""""""""""""3U^iii/^>|ׯonnnii9pڵk 8rȄ ԩu^z x{{O>=11qɒ%ӦMSTT:'utTS """Q"֮];{lWWI& 'O+}QbblܢR]]]Y]i֭kժ%lr""""""""""""*3U:>>>ǎIJJ2222dHnNW9s8;;_ДǏ'O3fի?3UffhUTw4%PNNNfZz5+M~ӧ[?{L <<<-- bF6mڴiS }}}}}M驨M*TxooZj 0bB=z4rGmڴiԨQB!iii+W\rsNT,Z+Yk'D j˖-?gЧ#==˗O@YYY[[;NDDDDDDDDDDDDc)222e5zRUU:]u#F4kl߾}͛7:8{ԩS#""fϞ`θV>D6[ÇB!<<<&Lt_U,T%D 6lVHFNDDDDDDDDDDDDTM) :?s挷ѣG!Ct]8۴iӬmVfMTddw9d__&MZ24Dvwl ;;A3U1^^^?VRI?)ٳgtuu6lhjjjcc#uֵj:83UgϞ:u7;;K.-[:ZՐ=c WWe˖/,̥"33_ݰaNT^ (c4k&h&*#G6mںuBKҗ/_zɓ'lذAijj *;v#Gvmmm-t:wԩS>}:w竪 {93D \&t&gذa?O>}ǏeOh IDAT>}irr2%%ƍ7+DWWWDDDDDDDDDDDDDQ@iH$.]:vttto 8PEEEtUX,5jӧ/tyռyv9dȐǏ7mTDC.z 1nЁӧO[YY=z4&dER@7on```ii[TڤI%%^c}E QY;x#G۴iccccmmmjj*t*,--"88ϯSNB!z,Eikk;vBDcsf3H`c#t* jĈ Bǡ]{Y]]ݶm۶jEZIe%v///oo####F ʲ|q… SN}ɓ/_.t"*$& @"A>8{V4D˗꫁zzzrʪ.###""@]RSS6j]FFF5j:8 ŦD CRSSvjiiimmݲeK}"Rӧu&t[ts޽]\\ ND37ǩSؾvvBG!nݺկ_^z߿_YYY8 OVɓpD@KKˠf͚D"QebSs_$zС:::BG̛7ﯿ:zB$D"ٵkO?8n8ѻ^Ç 爏GJ <@` A]ZZh ZukhhHjjj_=zTUUU`Taaa!!!aaaaaa?NJJ߼y͛_fMSQUbS9t萗ʠA-,,455iڽ{رc=<<Ǝ+t"yL8y]Av6n݂?q"޾:uд)55o"%11xд)zB߾zzQ۷o?cƌܖ;wۻp* %%%%,,LVT8-[lժU˖-sJNMDDDDDDDDDDDDDUM#>>ԩSb=Y ޽ɓ׬Y#tԩSSK,qqqѣK۶m+8OOBG}W/}Κoޠ~Ŭ,#$7oW =7Ga >ٴiӬ+V̛7@XXX^ |||jժ%tjJ*>{ߗW@QQQ__U>-[lҤЩbST@fff%%%Pv1cٗJ;w3gʕ+ǎ+ I77lڄaX mQ%- . [3an^*s_.]:z޽{rSa$ӧO 4hݺe˖[n޼Бa)}K~P֘ N"ٳg׮]WqZ{Eǎcccg͚)S\vmʔ)[ڵ IHH3֯Gz:vv⋲ܿX oo)_0t(8w }B޾}۰aCYQ#HԮ];UU3ghjj ߻wOPPU222j۶cc LLDDDDDDDDDDDDDTXlJI& 2D5 1ҥK\bbb"tҺuv޽LEE'&&.ZL[v6 B$´i1+dNV-4i}?p0LLΝhbŊ fee(((|w xΝ;o߾}}ֵk<wb,3µkxHrRR*TTв%ڷG߾͛{G;ᅦ{[*=Xܸq㘘 &LشiS{䉲*99޽{wܑ՘hҤIeiF]]#"""""""""""""*o,6OӉ'FYF5k>)%%ԴI&>>>ժ*e˖-]T[D"/_\KKKl,,Z+ѻ7\\`hXplb=3}>GzWPQbD|H$Z222255m۶mׯ_ቈ*MS#JWZ5|H$D#FHHH8z(kL+-C7lP,T:th~?D:uڶO>H=g&>U[L OO3.G$I˖->}Zbvvɓ+>[E:xӣ%M޻Ijj۷nݺu֭理(((4o޼C:th֬H$C """""""""""""*o,6OJRRҸq=.%%%3g(((XZZjhh 8w\߾}gcc#tւt" ~TVVvpppvv$>c~kSX 7B$):t@ݺ۝Tp=4k_~qKN7oƌ03áCe#Q:x L;wاOVa¦M&3$ۅ׌Օ LCBBk׮mbbbbb"+-m۶m􉈈>%,6OGhh!C>}U)Yѣ---9i%$;vشi'N?իW?FdD"ѕ+W:uT-%lڄKBEŋFظocԮ 4n\]N:fgg䖙._o߾f+o)))Vrttۮ˛7o޿޽{7o|T*2222O6m;"""""""""""""bSDx{{ڊ"Kݿ E%puݹsYfBg+##/ _uTH$233|2*֭8pv~gn1nѹ3z*2޼ɓǤIX/|HNƩS04, Deݻwb)3S丱SNO<D͛7رcǎMLL:vؠAOKDDDDDDDDDDDDDTؔ>>3f`)UbիWE"RfD_ 'Os'NΩzm5իWF 㔻쒬_ޑJM$|NxGI*"""""""""""(_xmhh~+TJẺ%\CCCOOUZ.\:;ΝkeeU7}mHHw&OzzsLLL5jgqݒۿ~DGoп?6n̫49>ĸqhذ{OQvmNB׮<;wS瑑bOjjjrrrΝuttR233cccSRRd"HAAA"LfffV_Ϟ= SVDDDDDDDDDDDDQ*4* aS.tCBB kѢE QrΝrܻDcۑ[򕚊1c%Խ;uu,Xؼ9v쀅zߗSzzzQeddL0A{ׯ_|իׯ_Jfff8Y2,&ѧl? +ؔ-]tɕbΝC@i7޽Ri*cb,+tt`ohns ***BG^ݺu֭۶mIII 5jrb) ->>:U>`R8:,qLcXhk (_|$L-лwNoaoK d<"*1  Qa~ "^zʔ)Bg!g4k3Z+,,Шpק 1b^iQR ɈMHnnnf:U>w9@Q1cLN`l,h2,-!`XH$9-mbt̟7oMFDDDDDDDDDDDDDDDXlJDM,Zjĉ 6: U2gۣKFԪ.V ض-q߅EDDDDDDDDDDDDDDDTXlZ<{lɒ%666cƌٶm[vvv9uwyyy۷o_tt9sBD/y-{CIIX%Ө0{6bbrZ440oꕠɈEUNn;o޼9s̙3gO);vO>ET*jDmذaĈ5:c~~={ᗎG]ojDΟ?ƍQ T._FpsO?!$/_bz\-t8")ko$&_?2} UU郭[Ӣ3D!Q?mj֬sΟ~I]]}֭SLyY,k׮G޽#G֭[+?hƁD$ ^Qb*#**C'*s֯_߭[N: ӧ*_ǨQ_5kC`z wwXZ gQ,ڵ05E͚@ĪUy-'"+ ZfMccGGG/[,%%#TPPhѢmZZ@ʃ}DDDDDDDDDDDDTiXT.\({lii)ooo&M{Y''Ǐ5m/1kΝCj*LL쌎-[ၠ `F`zIhh&׮a\޼6oy3+NJĹs8p e6a2"vŖ-XΝQ0tׯ sAAxS=֮Et4Vx-ZYYn2aQQ,^ uuxxfuhk{7&LS@eahjbРѮj.Si@Y;w浌""""""""""""TXSU)))_TQQ}EVؗآE Y={ Pxnѣ/_6k,7Gs=z(6HL5޳͛2Wbۇ̜vȝKfM9l&&M0b ;wb؏?28}y-WMt耐ܺ'h&DR)l9 OLLH͛7υSn]UUX9}m633UtBCV>= =^œ9PR9r>Fۤ^fƞ=prҥػ>><?D"r 彣*ƍcбcNK>1b{!""@ƍ J>rOիWy^3fUo#""""""""""" /Zjd /^ߨؠA2FCqZO! -vd MMܼo͛TݤcGgg&*S'g+!jUH}}=ҷ/RSqp9s ={hn䦮 g6mdoo#G.?UZ#"""""""""""rb*#+++3Ҁ"tbFFFX"ȞʽOkVΟ?{ׯ{zzS&%mmڳgO9}9*ɓ֥6..qƎe0}:޾-TRmÅ x&@Q1>[r?7d'YY6]ٳ#erXTq^EyPTD&* Me,qc#G\~qƃ3zȭH͚5SWWRRR޽uVSQQ:tƍf& IDAT>|a8ċ>""""""""""""XlZ5޻w/==۲]]]O ;qܾ}[*feeݹs@ppȑ#RرcGf͚ݻo=z Ç}JJʚ5k\]]?ݻgff//^z޷ J9!!QY2xL~ݻ9 HL.^Dj*ǩSM8w {qWc::֭ʀTP\F"\д)22pV^!BB D-&&۷իWYYY[r{f͖.]&gVMF*>y@tttrrQEE633svvvF_;u${'%%%55U*oƁ}?#"""""""""""LI~!!!gϖ=_tuuz}MSNM4Cbx'O z؋/pqqoTTT:lhh8~x===ݻw[fCXXgvrrѣ}:u3j(HhѢwא!C:cT٤?~|ժUۼnݺ)))֭3fL22y2zĺuX&A]maСƍ IJe7&7nEDșqDlP&~ĸqX}EU%ЪU^[W@eDS ɫ~n 'ҥKTTTj׮ݢE~/ToZL8իW={fkk;f̘#G:t?ogg׮];& 'NTRR4hРA8Pv+m"x#"""""""""""JN29[@DTNVXU]:t&""A7;;;vשS$>8Ru1x0v* 2T9{#* ::9-M{3+V,:9GիW?#& `ʕ?uѧ>߈=zk׮4MKK۹sg^ϟaǎD"Q] bVhkҴꉌZ^iz:^*ױۖ-׮o1ߵ˥3---6mK_DDDDDDDDDDDDDDDDŦDT$E6?p?xy$=nnnRiZ2+UQgϢV-((`L,^,tpII];o1! j,XeW_S_Qy*y"""""""""""""""jXlJD͛_iPT|gG|h'.-M @ lY}PTDVVޢdfWwDDDDDDDDDDDDDDDD%\DT޾}{ƍ*Z"ʥ"sF.{wΝjhXi3{_%yv<̦Ϟ=۶m۽{TUU7n8󖕝ӧ[XXؔ?UO>s̆ S)T؛H$={dffov@$RU;׮af9Ox66cdk'ܹp5k˗CY=y-[m.]BӦBy "5/y?_G͙`5YdG*rYl8uꔱ1c!ťSN8x^~-[zNqUG*44ԩSAAA[lU+UF;o޼9s̙3gOEڇ:vX>}eRcn-R&kd'...ϖݭXP+11qƍ7oެU-,,޻à h0a>M{nOOOcEEEMM}'&&6h` *μ{ \]]7nxǎϞ=4h7|Sumڴ>f'~~~._VF Y͛7 ԨQZB pwx LLcc`Μ M$XY+ԭ[ RiοRsvƘ1S,8yZZ;SO㫯 6Y* =w/غSB_-og ##ghh3l3bEO;Wf2b-VbSGGK..D"eeڵk7jtիWw9+:tH+dTaV\Ԯ]ݶƴ}!_VVVTTԡC*8u_)lڴ)(((/1?i_?kɦQ@EvޭRSSO8qҥ/^|cǎE$ʦT*:uwޝ;w/HLMM?~eґLzz#G#[(WR&kp'˗/ߺuC>fOq͝;WOOo˖-/_\dIZZ7|#oH5KMKK]ر[-[hbÆ v ̄ '99yڵg}>sLSS˗/;99M8Q~ڪܹs{=>|XUKv7xxx=z[i*Ya|5\#eЯB@A2W6^,SRn>t-[%%G!<aa4ɘ7=ܻ`H#߳ΝΆ9ZU]3) 6-~UNY05Ep0hLӧq '|q,YK6)LΘ5588yGr2!]ZZ/ꨩI,/!ݻ-FEfMt͟??&&fԩ"H6^vvǏ;ucǎ-ZHzkbq>}ڵk'%%}fff-H$OtΪ_~]N;`%?29;)cMqݻ7::z͚5[w_ʙ-)33͛76lӓi1==}ʕM{[n[n-jf͚3f =w\oF7nصkףG涸իGvر7,OaÆIߝknݺ/^hm۰y3tt0iR4Out֭TVof)SIolq2EΘ1 bHy9adOtr2F +<**% ww N7c@زWb׮ŦӦ ח PX׺39w.ѷ/Zĉ6 tZT07@˖ IEyU"-Eش555d9r}ٲeNNNS,;884NAAEiii۪5ZiT[6*1m^Gׅ P9ɕJu+C_Ç/ 6477ҥK_jriV";ݻ/6335kr!Vqg _J"""""""""""Pʯ.R۷}||n߾ݣG 4'm,--o%dҤIbcc}}}Ϟ=t'O*++;7oܳgOxxx:u fii,Qڵ+00P0w޽;,,F]vSWWWCJ$=奦Vd",2WNdggܹSlҤI]v<}ٳg׮]?|pɒ%Z طo_DD]7mŵ͛-[ܹsG,L4@J~~~Zß={޽+k\|;wd3͜9Cf͒i=7Yi imۦ]{ ##ê7n2dlCMMD"==w|||Zl&&&ӧmٳcdŦŽkT_=~T ??668tyΙxlقOOŋs̚s琚 8;cG`xx (..ظ**X66nɵk2/#..7o!+e޼#/-ЀsSAA1׮uk8;Gl3xpt̫n֭In9|)<<ܼqƦw~`틌ӛ8qb|'pGIqV 6ōKk8'DKK1իWd;\jՕ+W>,G=doo&''4h„ ?~|WY 6tpp(V8-Zޮ];+++MMyK[[[Z.z"~jkk8uTbbbttӧgΜsN/VnZv7HLLmiР(>,vZ wFZV0oGx8\]ߩ4ő#PSEl.a2> sAAxS=֮Et4Vx-ZYYn2aQQ,^ uuxx^{7 ͜> KK̙(89aN :}p `nH<Ĺsywx߶ DF#F 0<=Xqq >RiJSV :>ZѢ\1w. ^0ktt?zzTص 7x-TGzJ!q͈Ƴgز">oC:3Ktf;\~0t(^Ăpu}QT%Õ+PUE0 3أ+[00@HH^Kǎx2XEED@$z 84ŠM;`.\?(?}QUU=w\q#5kXZZر/غu+7TpuGGG ;w8pٖ_ulllܤqQ 6ŝ"Yt>!(fLqC:;;nmǎ 6ܸqաCܹ`ٲeǏOLL2eʺu벲-ZQ8CIFz|ٲeō俠dv*|;ttM/0CBB~.]رM\H&=ЩSEJJJ ,XpŋrGL,Ν;w͚5ً/6LJJj߾ٳM$L$"""""""""""H\liӦݻwج[nr#s.jhhrʡC600PWWҥKJJJBBBffm۶mUTT ! O>...RׯZ=N:%,k9;/1$'I)6tPڵkw۷VЪU-[n۶xӦMխ]ĉRl/܋D"ڵVÆ ;tPb 1bRVw֭[wݻw3zQ>_VVV*i dɒ~)((߿?߿fVV͛'O,z 4D7o̽S|zz:2G2~zkt,Zq~+BBF*o? РZD~}BN96 *v̚: ϟc8l %%ڕWB^9J1u*0djˆ=7n`1o4@ؽXG#44o'YYgE hk  VXĒ%5j`$ԭ"S>٧D> P.VķKe ll'PUE099y2"#q젨ˑwP()gd`Lq"LL޽1gԁ ƍ{,@OK"4::#EZ911ky{#%U^xmAy+ŀ-?YSTT!G~]Ү];[[ےD={زeK33G֩SȎ ̊Vx\dbbRW> l^ )K߿֭,J۴icjjګW/=<|7|{K~˗>?ǎ[3E!C.\p &0BVD4XwM???S(fNrsᆪ~#??<_؁>[ocCDDLҒL=m).Lzɓi>Kԉ^n{ Oez+ IDAT2o'? AqqO(-\rpxaDy}ɉ]%dDlJ_]hxZFn|%'ՐРnݨ[79Υޣ-[裏^HDNWӲeԵk#jtf .e+/I ڻ8:zd ZDNNdbBԭ[eP{w%˗I"[I1QSS#gѫWf>XSS?=zѣ][եX,fHL]ꭋH[1;v޼y&D֡e[lNaK㙘JouvvIOOw Rdz/V4 f:YYZ2mMxߧ9*ʉ1RODDu.gR9ѣgφ߿?zߚcaaabbьɺK~~~qqODsN:rϤ"%@[jrI&Nw?c#G{&sanȼ<"XKK(c)xhˡq$׀wԩF7?L0AMMƍ/\rTL|}}7oޜ4a-%ɵk׾{gѐO?GG>`߾}>~^z1H$nE .9wܙ3gJKKy<s!ņ`Wnn[R\Ҧt!Z.\_+i?`aAD!I$4ʢs);V uuȺKGY;oFw嘻u# й3I)Is=|Hu*$NSSS"zv"ѡ/ɓϧ+1}/SI5|9xH3ӌDk=/ɚ:}vX9|zɡn`*-(z"">éN,EE$Ϸ\DT粹 6rr}$w֭[?O0a Ϙ1_|6z1Y_HƄ:"9N:5T|Ki͋Y%,,9 Вmo>EQTNгfhXޞw/+#//20h6MM JvŋdoOu{=TR2RT Bz֍9fGo76&" xIz13DPǎTޝ;D1Çt :E652ŋOa:?Mu{AHh.HEf98̙iF Z-dV} YXΝ4kݿO7PiJDvvdnNϷLNQA a"!{)4n^%G~]gϞs=z4$$O0!##cƌ6m>|8'O_ fK 6GGSư7Oބ4oM(TYYYw͘FӚ7oTqdnsy׌?שCs&??ȑ#s9y򤷷rfޱ̬=z$ݢkdd$g&Pv4444iҞ={Nq-fX,1W&""555"de>c0_3W:mСիW:TTTTQQ(SAs=D_KKKWJ'O0Wuz'%o96,_NKJss=(0ʞnyJJ_M7(;f̨Օ hjڲB*.WirۗtuZ=R[gX}5sr˦sM>>DDeeG?Dgܹ/)2)S^~Rj"s\N~@rw㉈D"r֯SH"y%'SJ̙iF~HUg/Oɛ͛.^ hdjA՚KGԥˋkiѶmTTDӦPHٴp!.MDDԭК5C 4k͙Ёߟw'CC:Ǝ%==KHoԔ:v>x:2shڷ^M\,^DdjJ|BJ;vԽ;Ӱadnt7<.^|^jYZJ/?)"ʢkרTNS,ŋߩ i^}^l~=MJ<`IQCf&*w (1fΤH '͛eΝeK#mY1c%'Sto).^VedPN͜|ԫxe"j`{qIIImmmvvX,LLLܼy},,,:YD"D[]!00+//D"a~_*\rٳccceH΂PCCѻ4\)`k8fNCߺu9DRSSCDo߮H$LWBBBݺ{>z ?1;v7nkkk/_޻wo"ڵkRRٳgW\\~z"zqddȑ#{ٻw^zmѢEjjj_|dǪWe ND;G///888șغg '2ruMM~6""رc̵_^TTFD:uzAuu̔^Quu˗]\\lmmiGajj*gy>gϞ3f5m3rHmm7fggWWW_xёzKTUUu{m4mOF***׮] 믿8/Szĉ?aKFFƍ7FݱcG"8qbTT_C$y(k||>___/S)6l>bĈ9+[׺ۗ&Llڿ6l;%rr5kHSLM`:<No-3'C}ɓHÆF4i~+ Ko%o^{wJJJrs^###JLZ8"G‚|ڻƎ_+kf#KK""7h  hB"iYZh{*+"KK"RSϵѓq8]?K?M ;hVxx<⋧};^H_~z]bc)$/&y3մD4bt=zDO+VddḺcLjHi*D$}ppmH_^ӧSΥYرcx-+]v%D"ѩSBBB 'O<|}}}fO9KϟI"*..VSSsrr"+CCÒ>44tذaƍSQQw"zzzW^ɓ7z ±c6˪UBCH񅍬k8fǨ uț7oohh3g(999++L,@0pȇ-g"m$ k8QfuOBCJak׮NڵA@Ut= kT &˭!!!EEE'Njttuu7nH <6 ޚ$44СCqqqcƌ6msǦH]H__#..?pႋŋff J.G=ulڴ̌)kmcǎr EFezeeeɓ'2dڵ;wTWW'&&(BÇ.\(VNE)\zz^׮]ӣʊ~9Ҝ94p ;G>v{iҧ[P?d x.^>"7[$ZF$wwV<<<֮]{ԩkזuܹ&Mc;ZU^^>eUV-YdFŦ텹S -nccK+S~qB22@3ҥ4e uBDCBcƐ9;O6NiݺMyX?wwww6.TlݻwmllN"ZޣK)/X/s:S` >LCӍЬY4{6Mj8Po)33c@Ջ (//oeeeI$VlvMqqAkndDѠA};-_t#CCKGɤZGWPHG=0UUKffsg/jjjNZSheȡ)6]dI6`mmGy!u޽ 8#&MԊ{zʹbI'?ؿ?]B#FЁ4e bܡˋyZ9uib-PDzuZҬ,K?~x?3qKII={?ljjvcǎݺukTWW7RzUerڹNw}]>ixݻu4$իt };ih<_ۻ/ KJJZo&IxeeeZZZNNNCe;#޾#QMMݻwRRRbS>}ݚ>B)gO<駟TTTjkkٳgG.,, ۷/q{]bEQQA Ќt$/xϷBGmva hvZ֬͛1?°4...:::::gdd'r:t`;&2Ba3|>HCCYࠪvL7M_ SNwX,&"Pn[~6mqm޼yϞ= h:sinGZhHիucRD]BݻSPqo>~}[7FDiiiaaa|>?:::%%̌11qB '''ww}r8v Plމ۷***"TTT\ndd$䩩Yf͖-[V\wߩΪUBCCi5=TݻGtC.Pj*]LjZEu;wVV5R Li)cǎ}r<˫ C111̿yyyvvvLii߾}]]]CØvM L:5::FQ]]}„ ,RڦM>裌kkk HAAZԵ+͙CѴ}rO++?:qV~"''zM9ǭ$ Gfn IDATi~a4{yTAP2aaaLA2~~~\.: r\"b:"/Z^ElNI${.[ihZWBB+*44ڵ+q-L4I]]=00 :o=z yZ/Žɉ s<JJ 5ké_ќ9diIGU3ψ%%%%LikrrrWKKj[]W%p\###c@ش=CCCkkkڭ[Olw=ztyy'َnȐ!?3A5u.RZ} -YB ڴ_NtQ׮Գ'E]1I(Lwh4޽B!}ђ%u+ij*[H$L5XrrD"a 2 َ ĸؘuuuGGG.[oq\Ҡش݉ H4t(5D\,kĄvQZL[&%%Ek0**ɉyzzzxx8( 66)-KJJD:tprrruuussrl'ւbh˖- o=wܰa>U ԬYf˖-+Wܸq*ۉ?;wh:{Ǝ5ko_{VVRj*QZRYRy9듁uHdoOԫ %ѡCwt\IWS+{%k>_TT*m_訢vLh/&IIIL/dCCCüp8'''---@Ai;ܱcG@fϞvx3>MSD N˗С2E[)+O5kJɇh℄0>\555;;;iuǫlQVV4./))QUUqqqqsssqqqqq֭I5(6m*++Gu%UUZ"RSS?~c؎"&LҥKHHq@:4e$46l˗ܜM3ib1=Kt$ѬYr%-Q^^~-iRݠSZﯣnHhbKSRRjkk555nnnlŦףGϝ;WQQ!TUUӧ>|8~G28LbXCC#88x„ lg7Oj*tYXА!4x0 Dݻ+:XLt"]HWRi)x4s&AkF&%%EZ]Y]]mhhr~Ν; ^ B)*VVVVёr8GGG{{{555@;bk̙/_NNNqㆪjnnnN؎ \~?q@i***tttN<9f)4.\7 ֖ښHOHU (%&8 Qw?PȔ?yDOOEqQEE@䄄Ąr '''p455 S|>Ǐ'"X^zlGSD~kΛ7oΝZZZl'%())100}]Sd$PZ%'Sf&QYih<-<50 #{{rr"''RUm˘EEEQQQ|>?:::"""//O]]VZ]گ_? H$III)))))))))Ddff$.uppc;/Plbww]={bzBBBfΜܭ[7@K=~s.\2dYI]F?,H̸\.rlv,555%%%)))555))Ν;"HEEwvvv`عsgJJѣGm*Mߏ7nkPPN-"WeW@VT4,,,66.r󎉉I[FP $&&&%%1fffjhhqرZ M۝++ŋ[,mt֬Y!!!ׯg;4߽{z}ƍ~eB)-111zzz...g8] III۷oQǎmllRcii䤥v^x㠳ii&uu+VM;vl˖-yBB޽{qW:,;;;**i_zƍǏ2Ky<*1M"LQ)S][^^NDFFFLQ7󅅅 ۑٴ 6667n\lYq̙iӦݻ7qɒ8NBBYZ]YYYlll3IIIDdff<== 7Yqq;w-KSSSkjǰH[:;;w҅Cilٲ'NuЁ,ssrrvh8WWה;;;(X,NMM )))fffgߩS'c; ,MJJȐH$LQ)S]ࠣv^Eشի׆ ضReeef￷mۆxǻ$''۳@9B!SZSQQTx?##,--===:t`;&J4==]ZWOD:teաi{T\\|(-*o!"MMMsssiQ%133c;2@bvaՇTQQa;K>iҤ#G]]SN=,))) vZNN}jiiL(JJZ"2332{F9@SH"M:/eccx{oʕ6lPSSc;@SSoH󣣣%˝?>xFFFl),,[T*>3K%]`߿1idffñg;54Ŧ,g;+l̙nnn{a;ћаЮԤD?Y]]m``4f̘M6ׯK.lEUVV޽{nQ@ `9::r8oooNOO(,**k׮=z`;ȫ>""~~~;wb;ԛ MQB)- 䉮+r***l(,,4ԕٓ)'֕:8831Ŧ,{뭷N:С?0`sFEEذ bS`EEE7o檫r܍7r\MMMcL JHCCGJN ʇbSݽ{o߾lx}L8}SNe;ћ033[nE?,H̸\~[o!@T411Dinn^N]o%e&Mb;k:<<|ʕӦM;s̮]:vv7 :9bqjj422LJ۝;wf;&@ZW$KJJN])p8zRSSc;5 ŦlիA^7ZZZ?{7k,gg 0PoƄBatttXXϿu֓'O\\\\p8lg" @p]iһwVTTa,X|mnnvjhPlʦrDdᱱs-M3g>}w}tY'[mm㳳>RD|>(X,NMMeJKnݺU[[kff.r~Xaa{SK|ݳgOuue._ M٤KD,f(//7}t% .]ZbŶmZ2oܸ~>̙3񇙙YINz)7UUլѣG߸qC+3BiP( 111ΞK.roF޹s4+eJ/Z? zm'B(6eS%PTTbE  ;wnညSWW}3foGn+H.]-djjJDmsDPP(~궶\.w̙lx5ڬLiVTZ5%lq9s_~;wnruuuMMM.\ԪHooo|[VVrʮ]fgg&&&ݺu;v8peEmtFpI,YSNݻw?q޿ѝ:uy&=zEKK688X: ;cǎ]paii̭ĉ\.W__o߾GPJ$3S;p@mmmWWW>t}Ν;zzz޺u `hh( utt5 4Oii)fΜieeս{c}׮]+--MLLUPPPPPuM61}L۬^@ e666 Ι3g۶m޲ecƌYbţGv0l0Xc|=w>77wӦM'N{X,_;"*,,H$zzzr6SV9'+p[nIMMիD"={=zvZ]]ݒ?c׮]YYY'O!"Ye1008tÇ;|E9;ӧOO8>{UTTԲ)Ϟ=t X>>\.Ȉųx'l^)11ƪK_ˋ,XpȑrDG}'O7ݻw…LWk׮-_|+V077'q]vѣGݻwo^lI:laa[l۷/syݻ_rښvuրUV5~2eʐ!C-Z=o޼m۶7g.?ҥٳh޼yk׮]O>MD^:ɺDdjjz!77[رv񦦦CfݻwvZ垣Mچ@ TVVvرO>^^^ ,PAAAfffFFFff􋌌'O9sCZZZZYYYZZ\!oZŦ,svv޺uD"{ћ7oq\[''|"JOO_rtO??oYpfݑҥK-:::D$;::ZN]7S`bbBDvvvM񹹹uQbbK.Ǐ?vآEΝ;o߾C65|3WWW3iTTTݚ4...=z􈋋cHD?cppp G] IDATxŋ/YD'H(6hMBPZZ^PPacc\s1khJP(xݻw722bJGmLϞ=zMX@K|[n[ҍDWo{@ѭ[7P((J:jvEH$"[}KfÇ={8p… 6-NW^-_|Æ W^0aBݚ:ɝ;wf`Νb uu=:uM61]o׭[牙٭[5$>>.vZffꫯ\n߾}؎ ʪ[Q* 322{ƌݺue; h ť{obS披#F3SO\wee3=zO>Qd{t%88Z/_155511;wuI eee^^^OVSSv횬</==}ݛ7o޸qcN>Ӗsfff^!!|~tttJJJmm\.322b;&ÇZRiiifffmm-=+*533p8cƌa Lmmm[Oڕ7aq-bS=ѣ_|tc߾}uuu9bmmh"WFGG#00p֭zzzDÒ___" 2榊 "c.L_SSÌϔVbz@Ҩ=$Qp"D\]] V^-Ow7}۶m/=z||| h"ۙSS… jjjnb&9&M7g̘qwaQ#06 [ n j2h-ZVmfjKfm٭ukyVnZm&jhC"& *6 l8_k ㏹9|uɹ^ӧO/[~F?m555 ,x7&OhРٳg8W@V___\\ܰN*?i( q:8TܸƵ')7nܸG޽~7ߴlo_z'xeO?8k>Oc^/®]l6[}}o&Ν;m68/99>ϿBΆ+KJJ/veZ#ݻ+++w)BAAxB={vmm===G}rǯݰaêU֯_߳gϭ[^ul͚5wm߾]]v wު+jܹs3g4G=z?裏jA%$$$&&?>--~kxqA̙|򲲲2v=4=]A0 ?ٳ /$&&j+V知z~ѢE4ML&SrrrBBB||رc0WWWg}vŊYYYqqq|MRRR~~~uuSo߾|ӧjZp#e%NS .Z7Lݻx|Æ s}gP]]3lٲ%,,lҥ?Ӌ/'$%%Ο?w,YSO :ĉ-z'ܹsV^.5^dܹsׯ_hȑ#cJ?x9w\/wƗ_~y#Fn ߿РA T?|⮿^^pf[r~xI&7N;}e˖i4~jܸqqqq z?yʕ+ϝ;tR''q͜9S}\@aXsrrΜ9}̙ӧO9s&''GP(CBB/% 'AٴEذa?hZlK/LzkĉMDu֕ 糲Fu6l\]]/_>rHOMM6MRҘIXMMMNNNvv*Jsrrħ^+UTRgu'Aٴ8pb pjQΝ|򨨨ǣV7l6ۼyO~oQvOΚ5K cX222/HJJt:& u3gXVA Z UTpRy5k|8tͦRjiLLLtt1fQWWhLiVVVNNl9 SjiHH2(,Ǐzǿ+L&u\֭['LP\\|={^ uL 3gdgg斖k4Mpp}cǎ҆l}w?M6w\J^{YpaݥNԂԸÆ : p IIIz>99yrsb4&&W^kD+UTT$vIsrrĂhǔ:;;j4F(J۵k'u|P6m1c-YD.KWwW^y?0a¬YJԉZ1c̜9S BeeeJJJiii T*ZZ-5;"geeۙR Q6m6mOtJVի_{^{W^Q(R?ܱcUVIml>~X-MLLLIIX,bTԿ///cWa2vIFQP( i^iPPivG}gӦM!!!RUTVV.X`޼ysyg%iӦ޽RAb0z}rrC۷oߣG{[nRg.рRq;''l6kJeJjFٴ~N>tg}V89s\;?]w%u"|gSL)//SPP$/ݷo_II\.ܹVt2Lꘀ \'O,++4|}RFmeVv֬Y|;JWꫯر;wn׮]N$^?`@QQQqȑ APTbT_ڮ];c7rss5ڵh4ƾğ^Q6m5~ѣG,]G:/k9r֬YAAAR'Ξ=m۶_,hfǓz}FFjUT ;u$uL-uuuA,70+\R4M@@@@@F KR_@ٴ5)**4iҷ~c-\088XD:պaÆ3g9sfѳgVTRyO>e1 bT_ZSSӾ}=zHbE\T*>޾-icǎ'Μ9ԉpu_|om2^xᅙ3gHfxj_~)ut!?ٳNNN~{LLNj2L꘸(*ʦR}}o(7xc̘14]Z>(>>l6|Wڷo/uꫯرRASQQq]O>-BhhX-jQQQ B꘸E(M[y-_<88xƌ< cZ>`…SN4i-\9]z?_QQ,uH>33311Q'''gddXVJ@uQhh4ʦɓ'g͚vڞ={Æ stt:?~d2/^Rd2i7eӶ+%%eݺuׯ?qD``aÆ M:|~f͚W_}uNNNR&qqqǏ߽{A4Œaoɓ'Qb X-MLLϟ?޳gOL5n]:]RSYY).kX'mhڷo/]ul9vO?߿:t?,u44hѢ+WZQFM4oz͖t͐Tĉ?_~Ly{{wU ͪ4))I'''߿X.w.ׯ_kfUUUƆ:_@@J_jZ_ Q6%={vΝ??PVV:hРA-fRQQ7|'N{'M#\rP寿:bĈ-[璗]~}3O< uTYY|AzzfSTZ6&&FivI {0//(//OܶI}}}U*8TlT???___imeS\I]]޽{o߾}Lvw ӧ[պyŋرgϞ&Lxg }...7n|xٲe_uF=i$Z-`h4aٲe/bscccM&S||oӧ+X65 bT:tݽgϞinݤ\NW^^..svvԩSR9::J{#UQ6ܽ{ݻ|WW߿o߾:t:`VXX'|GÇ6mZBB{g6kf͚5{gQ6mQ +));w111{dRǼlO/,,zo4kkkŕ Bl⫯78ʦQ'N{ɑd߿~"""'UV-\0==ͭWe2s=b C)J2%%%4AT*ULLN;ڵ:-ٳ,Rh@innn}}RP4GϏ/nmMєFŶ^/--?;&&fRgl[l6ی3/Mwtt2dȷ~+V)df/KbbÇVJ^ݩS'cngϞ5F@HZTT$N'-(((--UT*WV3m\ :tС ?s߾}۶mے%Kl6[hhwٯ_>}Mȷ8ݻwd2K8p/B0 z>99СC۷ѣN4iRLLLhh[pd2VTT˜;u$N' ׯ}.R rwwF)\.իW^ƍ'BEEő#GĦݜ9sJJJAh8DZ[n4\ZZھ}.7l69r;v|qY''o]Վ9RӅ+(//7 ǑJŃEEEBVIDAT8R>}j??????qRwvkJ,ᥥ;v,999==fyzzv=tqq:i6a„+V\<ִ!\գG~?W#F=zt+>}RLHHš^{mÆ -R.O!44TӉ u-d2g6MW^^n_T*#7׀ o1PjzСdJII9rHJJʞ={-[VWWP("##{ճgpZ-mk֬i*e2fZfh4ٳ9b̛7#6'[n۷oTx뭷.\hX###dqjoFFjG9Rt;6w@A*"-,,4EEE>>>8Ҿ}>>>>>>dSDǎGIMM={ ]tڵkxxxDDDHHMl;M&S]qȑ#fy…zj +VXb?pu#F^ ˦WlN4ܹsfqŊcƌuz}555:t޽V0`_SenjjjΝ;h.}`0+K%w$WdSDNNNzիs='1LYYYǎKKK;v؊+Μ9cZ#""u&vM-JXMSAJ_=o08qb„ ;vdVULveS`ΝsrrcbbZmxx7w]Rqþa444T5,8;;Kx/neSJRjZʌ􌌌M6fY&i4n-,,,,,Lܸ\]]%.Z(###((o߾_uӦM=z8qx_|'z#F;7o{aϞ=?~޼y+6MA߳g8411q޽FѱK.ZVӧKG.`ܹ-Z`AǎgΜt]vo߾9Ǐ/,,45==}*JՎ;VĴ?-gϞx"}h4 ( {yQTTj4fz MqpvvhxԩSN:y򤸡볳AرcXXXhhhPPF 7<<<$[Ļ5rHA t7 0dȐ!Cϟ?~޽{ 0lذ_~Y:u꥗^ںuL&O3mfm޼ٞ:|QQh,...***((w#eee۷W>>>]v8pJV( )nq [nݺukxl6gggYYY;v)))xzzڻbTspp>ZGy~K.A;f2ݰ;w6_0՚!N\TLvKrU&I?zhRqd27K->^K@ylH.= WUUeggggg䈯)))6m*((X, h4ZVT*U``D7Բ9sFOOK~U&ٷdd9}+++Appppvvlۋl4SKVHEEE7RkjZ*ʆϸ܏eS""""""Ͼ //`0=zP\#|}}j``FQT^^^7n$#A0W]١CAlܩBBBofee>}ӧNJOO7l6^ߥٳHj2%U*ݺu7}}}oP6)88888/ՕmBkffo֨V(Χ m5٪EFFd_~eԨQ oTVfAɝڵۺuk```llB8tPzz/ &ҧO>}y睂\ިl*jkkM&RlxA 7 844ܴ7M)pCiZ⯚L&~j4 9RTTT\\lZJԩ}<-gذa f͚8ql޵k /ҨQAHMMuuu},Y駟~駂 } o^ T֮];w܌ \nZƍ{ KJJŦ 2L|U*UDD]w+k>>>~~~M$\#*VN CEEE%%%NNN ^^^ <==n{xx0&)>>nmٲe}]mmwm۶oڵ={sk֬oYzuEEE'MԥKA'O;mڴ|IRM2ٳFf5fHPPZ7G޷$Z2ʦ@VSSӰ{ڨZZZ*>ϽY2r=TO<дeSNA&]i*BrrwqS@&:+Q(W^f6Sp[=yd/5:ӳSNu-@߾}u:?}m۶;;;KOo~Hh(\u/~͚pssX,)))z~[n=l=d2ʦ l EJRT6dȐ/B BꫯF9`?kl6}wݺu7+ iȥIMM׿3GV_C?}obL@l 9t/3gggkAM}YYYYTTԨQ~?tfa̙'Na׮]III?úu͛?V*))ٸqc=֮]`>HlذgYjUrr]x#Fl۶-&&a Є(VVu֭AAA˗//'Oh!C]b,]t̙j믗,Y2fA}?VgϞ ⡇!;;[ڴ4J|w5@E*))1LZ{uuuҥɓ曋+]ĉΝ{'yAgrq 2J쳍7VVVVVVlA5LW]*zhڵk~6mݹs5k֔O<977wڴi> }W_}U\\6qľ}N|Uo6šA‘SjP C>})lF`-s!B`k9k5] ̈{9?d4jM:MD6co{bA]iWN-_:9WukÄ+ ~l3JKsrf|uBY[B;*,*󃙫}}jx:s "~N5ˣc>+tZ'S>ٛ;q˳xYaxs.h9gf tiw'zrc{j.-&4GM"B'K DG@/Jmy<>BcR"H+Uf99;? {4/~soʿi^\лG!Dd3>wD.ߓ]CDdǧ{=٣C/ iڮZi?_\;qwb\(@""q&-<[FELĭ驴KDwdΪo]SV^7~{6+>\`_ϙ2!GMZۡnN?lwK ;<=i;Y[yܟ^YD 65Eg{6>v?~HYJΊ9qm3r+VDE1ʜ`2"ɈP&#B`2"ɈPf\ڤyJCbO]vy+Aњ`h?C#;*o_wof a P)lF`Ŗ7x}sj/YhPPzz5spgr] Po=;kKq׿)H+o?a겫 <_~N12,Ҹf.ᡣ}reU=;lĭĞO啺M&vhѩEDx#s?^?C:F>2f3BTJD>F>s+$ |ӟMF4SN~ot)^'/Wb:v=}>j6=>DdUNvΡfz5)l{ŌG_Z3/|6JUšQKqq_PDwt&qsvsnd/|1 J=їV.৹IG+*)\7mDDV+g2Rwk+"Ul煇wm]WdžnN֯ yRVn)"h57nӴ]g ާpWs ҺԡӇ.H+J +ҺC?6SOwܬyەiI[xz}>[tH"^wUe_7<] F~}K "}Qǡ(hEBm?iimi-"FYTrߚBbb]ws tcz?{wUP\HAi|LJ=w~ZQ__<.PzG^"Үw-"!֖6VZmÔmT*B!"=;.\+?s~y'n_tERf{+i1yĕ3D$*bȰmn۩U;nlҮKRk-{#+;ٮ L;wk*'/6jAcUDyO3?8БaȈG =QEd`ay׾^rvw[+Cg<;D$Xb.O;ZxdM:zpfU+۱&`嗢 2MN:p1" y'?Q*mū]Sٮ/j?' 2wuFbŊ(&Q7LF0 dD(LF0 dD(<_@ )g" P.$$%dddݻw.DD%}G}tec`PTw/ɩ`"jݺus1.6h ==W^z/N駟pi0 n.?ٳgk"a׮]aaa:u2¥KWڰaCnlll7oh":u%KDERP ҧO#Fddd׿+WΘ1#>>`0(-˗/'?!C ˗/o7n0 f;@{g"""^z%ggɓ'+G1nV\\j2'$nυ7{ F dD(LF0 dD(LF0 d*eddx{{WA=k$Bpg7 STm0~ڬu  JM4hF] BP1ch45M߾}k$D(*2` [ CttYJBA*'N,++QՎ1, BPÇ[[[Wl1bJB]@*FjƖ'$D(b„ z޸hoo?`3փ]Ij[̎]hqYZZ^0a+nΝ"v;>, F={zzzȤIOF!fn:kʕ 63KJJ,,,Μ9se⎈PmΝk޼oCv̅^1?!B`2"ɈP&#B'cƌYhQÆ E>6lBBO\^Dݯ_?[[ u  ?׮]k\t/¯Z^VVV PU^^L2ݽ&Aiժոq|||\rQ2888"""555&&FiСã>흛q͛7?aaa"W_ԩSu"D(W^Yjܾ}S*ѶJK'Lܹsƍ4iR^^ŋ333}قj7ׯ/((ؽ{wbbҞ8gfѫW>ydIIɶmt:91 x5mڴiӦ Ɩ .?߼yܹsbZZs=WkuNa kܸT> !G>0;;o U֎9otgΜټyѣ6lxnL^õ/Q(@q͊cE!##CyJ ;sL~~СCF [fMN,--#""RSScbbx≰0ꫯDdԩEEEݺu>|kbccޣGy 8r[l߿mmmmۦǓO>}˗/8::^~ݸի"{.ѭ[V/^#">ɓzٷoE ӦMk֬ٔ)SܫWW_}̙3&Mr/aÆiFۼy<8nܸZ^D(@WVV/""g\ wrre9sT֧FZxիWo޼tRJ5x /"̙8JzС$KK͛_vMן8qbaO&22/,//WEĸZyfez{{;::Ο?bόrtcRFNNΜ9snݺe˖-[<4!!V, dݷS5RT"r…!Cڶnz퍋_V;b^iӦ_~9##UV5q)PsWF1z[,X "W 8qҥK}}} rljH۶mEe˖%%%:ND5kvիWO8qرcǎ>B٫m۶YYYj: @D>\^^ޮ];iӦM\\Rg^^^JJJ:vX^T;w^*gϞ>>>m0h e@g}V6eׯ]6!!N&x믿ngg/zxx,[LúC:;;=z_ TZzuFLII5jx?<<<ή_~eee۶m_{ Z@e5BoD:P&#B`2"ɈP&#B`2"ɈP&yxs`N.XbpBmƣ"ޑ=;v,ߛP0 dD(LF0 dD(LF0 dD(LF0 dD(LF0 dD(LF0 dD(LF0 SXXdɒ=zJKvvv&M}Sq_|ENNY{BB`05 *|~Y:O?U>?6h ==W^1GiD(j?YbÆ X  Ӭ^:((!888%%⪘;ZYYZJDNdqqqQT.]4<<|Μ9"rɗ_~QF/_~6lظq*Ԟ={:;;Ϟ=￿rJ-\܃+VڵkU*w}7(_j:--m=zHMM1bZ޷o`P߸qC駰PD^{5dggg={` h4"2cƌ=''Gz`0T.]bcc wze]  {D1c4jإK!C ^~q… "2n8C`0#`ȥKŏ?XD*뿠@D٣/ZU;,j{ 2[[ܒKKKػw:t(33M67>z];tss."É^OO^zM6mڴiӧO=c.&3gYn޼{HVVU8t];TU,ULL|мy^{OwEf:t萇GddSO=SDD$&&[Eaaa~{キp0AJJʺut:݅ >c^[``Ӝ9s>ÌYf'x?EEEE"RVV,*CJ_TT;X[[Ϝ9ɓmڴIJJ"B`qΝ?lٲzܹųgrvvӧEEDߦo߾]D~7N'"۶m℄پ}`;vPy}׹W^f:ڛ_y|zzz*|7666[nU_?nذի;v 7..X[n?~o׼yu**C: IDATwČ;vŊyyyO=XPPp{lݕGC 0s=qֶ]v䧇 ?oL߿?//O]roVj%yzzyx1 {E~ dD(LF0 {>|w};quu:t;4j]sϞ=cǎUh"22uʃY0 @U,--{|w~W7o~в`nD(j\>7SÆ CBBu駟v!""rÆ {MLL\fqN: 0QFk׮=pqv*"^z\DjСCz}llCZl9doo]PYռy#Fx{{gff۷o:u>l0|~!55m۶'Nlڴ'|R^^3mڴ&M2߅AF~/)G))).\(,,LHHPTgϞ=~xIIɾ}D]DjaÖ/_V\RSY;vHOOtWT)))G)..޿\\\ӦMCCCEdܸqO+,,ܿݻk20 )Gbqq(w_yyy988kwg^|())VuV6v4hPvΝ;U16WPz`0"o߱o޼O>"RPP "!!!"R4زe˲5kL<1**MHH􌎎vqqquuСo۷fܹ G]ren]bԩ"&"-Zpww5j4jԨI&;|nnVMOO_lӧE뾾G8p:vXZZ:j(e1 ;;{޽/_2dHPPɓ'cbb'NP՝:upttx񢽽}\\\JJq;jZvvӧ+}AČ;v.xHnܸ7LF0 dD(LF0 P)wwÇ׃СCyrj]v9s!C[[y[] T/_(oo吏zgfydߨ~ "w:txG[hq+P@0{|ħz{WԦQ{ٳgddd!D(xhYZZիm>;v}TȔ#G߿?..iӦ UT.hZjU^ ''`0o񤦦5mTD,X ">>>;v}||/],^|W^^W>Vrppx*nUK.==>?ʢ F*@URRH^^c/^˛>}zn?D 4Mssrrܶnj\k׮Ak.!!_?cUW~ߨ\j ebJE999FD&LW^^poeԹsg)ϷQ @RF``TrFw xe˖6mڌ5jڵ-[DFOVVV3g,,,\`޽{+"N'"&=PDQUvA Tի۶mkܸO$%%woϞ=;o޼:lPPP NEw䔕#k׮_j UkPPOhZDD5jpa___WWddTFŋ/ <ʪ]ve(˸AѤ6o߾NNN666#G<` ُwQVKx\rjŻQUvA T}>>>ڵ/f͚[o^Z3XEoR~Zz;y睫W6osssKKKFj֬={nܸdIlmmmjߍ*(e)33_ѣ_xqϞ=d.]\p߿EЂw ;qÇ8P EEE|򉭭ݻWV+-[LNNްaã>:|ÇHyyУGkת:-[T"s ???,))Q7oj C-DUVW-[TXFqqH w uuҥe˖ .4ܸq㧟~:qDeRNUׅ"zKͥOe`)77vС'NLJJ:|Y...%%4mڴygDť[nׯ_:uؾ}N:) ,..5jr:nΝw,gT+P °iݺmΟ?*Bi47oGGGw=99yw{)))>}:''{C iݺΝ;wʕ˗/ 2$((ɓ111ʰիW=<<[VVfiie˖P%3ݱM6U5|Ī/~>@u D@M;vkcϚ5&:G5R~ 8qs='"3go|}}mll7nسgύ71BDvպu&M?^DzݲeKT_*3vX7` dD('"2ݘ1c'NG[.///1\(&cB`2"ɈP&#B`2"ɈP&#B`2^edd̜9ӸxU(cς QOūvŋ+[;gΜ{6A<*5eV[ &f1SR'NhӦWjԩS\FvT*-Z7KI#PTeqƙ*.]uRt{n3Vc x{{w]oLF3yd3]DGGWU^^izPIիQFfu hذa߾}I!::PݤIfȑ.GF<|NNN.k>ĘԪN:%''x{{s>jϘ1cbccoog ѣ۶mk*PKʶm֯_?sڳrV1 {h"""] "JQ >LF0 dD(\(7 CYYYAAkRSSwޭg &T?񏲲2֭n)ڵk{ݿ"̖/_4m4;''GV7nܸ[n ֭۲e233gV{7ؼ+NZlZj&E(KKЃV,[M46lبQwy/ytYYYzܹs˗/߰aI[V~zNw322oniiiRCuqqlsii7k4(!Bꮤ-Zn:88~f͚˫[l)**R6nժU^<<˻}mLLLddd=BCCnnG=yw2*VUQs&p#PuYD9rMqssƍ"ұcGz...?fY… .ܰaCaaaϞ=CBB誼;vhҤIdd2TBBB]{˗/Dheeu޽{[YYEDDTݹ2ͨo߾aaa͚5Sf[XX&%%}gYYY{v۶mۡC fܦ\D5+h`qN*ܲbU5Wysrr j4OOݻkʕ+?o6m3fڵkEdذaO>v`عsg~"""T\\7WTʟ9;;(V۷o4hP/"?QPPpa+++Ju9QvlܸsjjJpqqqㆈY9((A;vHOO}o^b>l\\4oȑ#jy"ҢEV۷5[ZZhBD*BQqJ=ztW|)--tǎ;|2h۶mDDDÆ u:r8:$$$44ҥK7o|q3g6hg|zxPPP=233lrY ֭[YYٞ={ ĉ]]]ׯ_߮]e>}zɒ%"bkk;uTp׮]/G痝nݺM۷/88KwӦMڵkҤU֭KIIS*tlڴ~+WkNyb-PpP@WE)ɈP&#B}Eq?6`"UDD@((Fܘ4MK47&_15P4A"Rv?"̙93~̙R(!R(֚cͱcG;+tuummm]yyO>$99YxMMMooo~= PcNB233ۇp][_ ֺd7hVZ%a;wvwwKUba88888u}>ٳ `DhI&͘1#333//OgϺp䔙9^xQYYO?TٳgkjjQ&*''_={VFFFKKkL&SJ°yabbr=zh"kkkB֭[ !w:uٳǍI}/^x񩩩s@j0i$SSS;;;Asss%dHԷ֢F 0 999.cB7|CٸqquOnccs!{{{;;qZ[[=zt…zzzgΜ)// ֣Ʀ`]]ݺВaaa1} aL5cF4eey2̪Ъ*kh4kkVjNaaI&NHׯ]rEɞ=k.B޽{zVd2x<ɓD8h;vy)A;w2eF_ p8'Oܼyӧb nJJʕ+WΝKۍVZu۷oz$==] XZZܹsGEEݽ.66ᅬ ן={v~~>]vGBBBx<ŋY3g2xSNOMM6Ja9L&ť>++b̙t:]8իWD333s}BHVVRll˧NftzvvvLLÇWX[}gaaf222͟={ ڒZL[[)***;;!##GCCʿj3b;wݺuSN;::<~8??_Z...eeeԭŅ]|F?{,66999mmmbۼybbbavV~;::zfMM f̘`0I+77WSSs=M Gll#Gz{E|||{{{NNNFF5Ffddwvv>yÇ::: ܿ㥤1Leddn޼իPd2utt[111oXMԞPՂF)))-[vў6!UUUO>UPPV_="WTT۷OQBQ tvvq+W0Lgg第\oO>rEEEjjj@O:ҨYYYFFF'NtssqFNNNMUUWznZB5SRRs̙ @o]$É<BJMMrMKKKKKK6B]>'O~%=>~xqFљ<wMJJJJJNs Z0j__o0!:UWWkZ/99Ylꦦ&---X4黹ttt&Μ9sʔ)RCjya;߼ys+W@r M*FB5 V^2%@ 0\ZZZK𼽽SRR#VVV&477xoff*Tz*///C)L[y<^LLL``uS6uԣGJTOɓ7̌ z%z.X__?Y,{qȑC]]]8:W\\LM*))YYYݸqt֬Y=K044 \^͒7$)rqqq133366.//ӦM/"éz%uA>!DIIfgggWTTtvvZZZzxx(((ɓ' oH{ބ3w\EEEYYى'z{{3ٳgwuu%$$8pVOOOl݁stt?//oʔ)666SL а2eJVVg2qqqM,,,:;; !gϦNN|511gUڔ)S.O>g##hnnn›\?fDrL&¢Ą&a-B˛:u{RRR!&&&)))+WTSSc2֥)Kkkk@{g}FuXYY%&&UMKKK'''ggI&R(ڛ !+hK.} رcGLL̛ߟzr劅EpppϷ0 -&######cbbtҰ0.+90B};;;/^\\\|ԩH>(0 @jH @jH;Qp-PlٲFTeeejjh#zRo/r@|oc @jH @jH @jH @jH @jH @jH @jH @jH @jH @jH @jH @jH @jH @jH @jH @jHFXTQQpBGMN8Q3gF'8m`ioo'O_xP0VD@֮]`݀ 'TZZ:qĞߕ4&--mTP}׷k׮`@  ڵki4QP,_\lN={cR(I444t5k֌V<0F ǚ5kDGb<0 臿 c***:PPTTe2իWvD0Bw"v80Bo򄐥Kɍv80<$$$v0 bbb._<ڱ(prrN/ rhG#ҥK7 C/ԦM4QHQQQ͛7X(3ghGcR(a¡ 5PRC  5PRC  5 lN:%ht:hjj999Xs Ot:]2mmmИR( jllܳg!dƍ|>"..֭[ׯDɝ~~~o177_~=ϯtRYYƍeddCBB֬Yw֭7n(((H(b%''[NNN˧Ouuu !gϞ2eJIIɩSCCCwލPoBիWLfnܸ=i$&$//I:>0n8xb@Cxeee kj P"uuu·#""rss\.{Do-㏢3 !L&SII......CY% H௥@[RRRbXMMM\.BB7|ݵkמ9s&::nnnodB5PVkooƄ̬306ѨQu0@AAAI/;m4w&+++22FQQq^^^ _ikk300ߋs޼y覦&---BHWWWRRRkkk||̙33D ]yy۷K޽#NrR-!C@O<֭[111#^#J.Fm߾/--u3W'ˍ޽;eSSSB áǏgXFFF֭[hQCC%K((( zyyuvvJUիWEd2T^>eeddPyyHr)MQQq6'PE <{,11wߝ0aBk&$$xxxB?^^^f---,X F˻{neeYdee*ҒNgddܻwFUUgڴiԻuuu.]ttt477OMM%|ׄf KxYYY'N񩩩INNNIIټyÇtŋ勋o߾]^^I=9NgHz93jŊvvv[^^SPPpQ͛ !}Q^^^jjM^ZRRG듒RRR>'Olmmutt,((8yEǍgooOӯ]dɒW^EFFjjj xИ>}:5N&&&^zܹ%%%ݛ2e!~sss[|9 vvva2wȸ~zmmɓO*''3$GGGBHqqܹsVXaee%`BhTSNPuuuooׯ_766>gΜ/b̙Ҏ ?~yCoɒ%:::QQQIII3gδf2_] P괵o9::FDDjiiq\'8!DKKoJ.?ά&0L%%Ç;;; $T!;Ԥwuwwweeeee 8a$D :y9sL2pE1IMJ#NNNTuP8(u7Æz5THhvHjkk+**`_Xku&MY[[[EEڜB 0<<<ݩKn߾mccHu/M@[RRRbXMMM\.BB7|#A"jڵgΜ~[_|I)UH,/^NcIW#=sadff "E  U],*5gΜ |H8~K^6mI8EK&=q8AN N 6ykPRR:~Һ$LNȨSIKK*$jyfffnݺuѢEQQQR./(mH_NKK ɉd+:fWnnnUUU;v8}`p&m455"HFW_}ɓ| >}TSSYGGGEE%==zzzz,+==ݻO>NK755ݺu`0\]][5 &<Ot:#i4Ǐ9B---B|ҥK MVA4VG (}Mmm>b1 ;wʕ+ӦMcٞ ""bǎ[n={`d@PQQAihhb`x{{wuuݾ}{Ν۶m;||dddBBB{{{{{@ 066& (++KJJzX={F)..x]]]/^f nϞ=SRRrrr>|ccc}}'O!G5$.{ SSSۛri𸸸m۶ o(dEE%W/^YXXHG ucUjg7dzz}[[[QQhKRϟ?C@_GX$Vϟ?߲eڽ{wAAXl=[\4 ;\UUuEAwM 3ԩSTG\\\ddΝd#)&L1ye˖Qcu 嫫;#zߩ~!..ƞ222FFFee/_vuu\J|BKKSRRgϞM^xdaa1qDZܬ`dd3s;99?+55аٳg3f̠$ >|(aESRRO?QfjjjZZZff&dggs\ȉ'rrr!䄄BHqqqmmmuu5յVSSSQQ!%22S8.رcTKfgg3̐j2''GMMvHHD2322D̷vvv믿l^r %LTTTRRR g͚-\722rĉazϛT@`ppp&;;;_zu…?Mn-[xyyyzz͛/]|r!PSSsU{{{5~x++?|>?g 75!P[[zUGGGuuu7g]yyyϟ_xA CbqqqǎkmmUQQ6mڜ9s:꨻F]t?m)H`hSghkkSϙ~C  5PRC  5PRpr:ujф @:T??FɓD/r@|oc @jH @jH @jH @jH @jH @jH @jH @jH @jH @jH @jH @jHFTQQѶm۴ !^F;.R(gݻJ8G h~W8}4!DUUFqQB 0쒒̙hѢʭ[:tʕ7 jŋ{ス{zgӦM/^ߨ @AAaj `}nnn[lQQQ Xv-5͚5O<.ѱq;v̚5KNNnÆ jjj---5H233333s544kkkmmmɩS׏X B O?U%#kjj!# PËbBJKK]RMMr̙a R( ##sy>/:mx.Bùp_|k.BuMsuHΆ rrr֮][VVVTTtuB׏?MIHHhkkSPP׿%vڥjժe˖BTUU !iii{EER(g֭SLٱcw}Ky董#!~g===OOϘ)SB-[j*3Bh˗/{(R(!j7Mzx𡒗7< =cF= PRC  5PRC  5PRC  5PRC  5PR&}-0k֬ؑ BN[[ŅFʕ+G2SBi}Pt:}ҥ#Hl2:s>N;wȇcR(>z{{3 `͚5H$ywf2EJ<0F OVVVtXhhcR(I,Yd2syQ PXjN*((x{{b<0 臗2d._fnH0BdXbBx<ުUF;"}x @>>G 577/_T>v_|QWWGiiiټyshhhc R(۴iKܹC*7nrI@@ц|ܹs_g0**u8C1)`DFF|{{{?ƍǏEoFrʡ*$}||g ,VGGGDD0cR(f0δ?sUU0(*gΜ``le굇[ф2BHhhh]]]XXݻw;v͐&駟 㓜-[߾}Y???BȵkRRRBCC-,,}j̓'O˻ eee={,88DKKܜٙklll2jfvv7˕Ν{ԩGB>SBÇlhUFzckk`%%萐ݻwopppcc f͚u9mm}QcϣGݼys̙޼y3*DGG/YYYҶmxڵ>,22r˖-ݒٳf>>>ߧ槦?@dRR҉'iӦ?>)))((J|؄yRC  5PRC  5PRC  5PZ/^/}||=:|nnn^|燩|yWz#ҲyH6m%oo;w a7nܠ-I.6޿ppG ܘv]bō7R`ZZG/_T'O Käaڵ룏>vZˈQQQ# e @۷o{zz:99B"##|=!?pssΥ&1KoX#9WV1{\rcnܸ… _~e[[ʕ+%%6FQ`ׯ 'g̘"pϟ??|02e n1gɎGG &Hnw UQQD<>~窪a*|,` {|KnӧOWWWo>̙37n477555lL* ""\IIcooԩLj333O:E?9}[RIyh7Ct钆FhGGGpp0NNN^h} #saD^`RttttttHHp K yp¬YΝ;o>jltt={>裛7oΜ9ћ7oR蔔_~z.%--m۶m׮]"##l-y[bzݴ8p۷o[XX{ԩ˗_|9##u7n444ܺu/8rHWW?7nVb۾};=~cjjj8bׯ_߹sgppΝ; %իGܰR՝k<=ætٳO>=~} X=.y&$$l߾}W^O<<<̙sStF#BӧOwڵb BU@@Ν)?B"##Im3!˰ 6?~\rv_Xjj ɠe˖BL \tIbXVVVAAAVKҥK]\\^~(%ֈΜ93**04jAUUUBHCC|0wӧOoٲe=TUU1LG§/88̹s8@ HJJRQQ?_wtt8pFlI''or|+W455VZ%B\\\&M$//.LLL,--Y,!Y\\00N\˗{/|ݻ/\m>x䭯Z*99^iiifff_Ҙb&fB<^fΝ;{ޅA >|x aiinݺC HyTh -$FL]w>#GP#ϟdɒap"Dlmmo~quum۶mڴ)22$H֢{JJJDg &p!*jnn?~Wokk۴iáF6kp!111Rfiiy̙O>DIIܹsW\.A~-]tǎ>>>6mS|yyp%`eeEMR#.\г'So:,--Ց?"UUU tݔ7ʕ+n߾M]0o)Po7UUՕ+W9sfڵ=JMMx<'\Lx65IufP:"|mjj*++444&&&>}ZX0:onjMM U[[J+k[bkӒ N'6)NaNIIICC-*;;jb95illp;v,^uvv={b-]CU~ۭ,=N$֧O&&&۷Ν;/^裏z=<`0}֭.+,xD~u͝pg3m HEEuu bYub YADbCEP{$~C[\03+3gΡ5oNJJ=cƌQsM9u3g#G͛RXXaSSS~ٳgX?fc+//[kzO5D\gXXXUUUIIIhhwgkk+))yر'O۷#|}s߿'&?}SZZ:iҤ˗/\rŻv266{ϥ(=^xEw~NZ!!!QQQס޽{ @@sݼy35x{6˹so޼y֭)St111֢vvvGcLḺcX JJJӦM344\~==zFrrrhhyAA !999t=zǟ>}:22]zǏzZׯޗnh6lGpIHH`Xaaa!MKKKMM%|ݻw?ӽ{>}4j(wwW_>Qб9r6---+++oݺu,FSSZ߾}q?}ptuu׮]kdd_*))_7n7nܴiX,Vs{CXIIɣGҋ߿ţ8Ν;5;=~?FMYYֱ477|Ⅳ#}\kƚ >= 2ʕ+GIIڰa~FF/hCccYnA8-\" 0D(h6)))5hpG^SsShܼy.:(DVdСlJP;wpժULl6nhdd4e iqqqDc555sss333fvLNN޶mAl:̑m@rrˣwѵkW+jN=zXx5k.L4)44]XBBhhhL6mڴiZJCCþ}2] % ZyyIYYY||o;OΝ;3]Es:v옌 8!$33ѣ!!!th oߞq 6 Zо}zyy޽;>>~LWlvYY Ӆ4.]UUUBrrrΜ93auuuT!%%e[nbhc5ə>}͐!C^z|rQQQjv!g=zx_Yݻ]tzi(^z-^ZAwrhu]\\dddnܸ1fiY5BBN>ݻwo:0b_ӧݻ'&OCBA+RXX믿>ɓ'>?v455Pq__^z $W^j*SSSk6  Z۷o_~=,,߿SNLW$ JJJL"GYrԩSNTUϟߥK͛73] UP׏="99yرLW$t-N B?#F6l؝;wTUU.(..gh"""\.rz׬Yccct-~ B0O>}Μ9/_@v|E(**2]󔕕\aktʔ)۶mchW]t~GmpR.P4##Cܹ3((Z(133ŋN|8iҤS_^SS355_W~?,//Z]]8{+fPMߑ,X@Ҷmۢ߿/ׂƥ]V]]=++o󵴴<<<_X-7o>|sE#бPbbbomsB>~iiiJJJaaakܹ֬sjjj_… ʄuTA֔RSSULEEE>|=W;kWiDmYL<*m&6!P<;ŋ8bG@fp#G>|[nͲx ccZ=zzzu<b>L<{lUUUK~DrBÇ_yzz6ׯ߿=_UWW/?xqɒ%5#GPuӧOY,˩`͍aۄΝ;?~~$99YYYɓ7o_B]F/yr1zqܸqbdd$!Ņj  5ތUqn}oz#ԇEzˬ,(zL/_Ћ{%бv =P~j=".wڼyk^eIIIIIIG?ٳg_~ӧ}%{/^ԻEݿϯ~V#))T%--1b77K6ː},o{LQQát钘XwķogwvRRiBBH^^ %%;v_}E(777իW}eP }vYY٧O˟Qkkk_tiiiŶuy޽̙3g6rknK$%%/^iӦ쒒?KrUkl6nW^eggO84fj6FZo87׾7ROͲ&Z^k6n"##cn݊ppph|}CCxⅨ(}WTZh!߿E'_EGGS֣GBHdd$EQO>%̚5@LLŋw"ߥ'O1b!|UBСCKKK):~8!֭[^^^޽8vXaaϟ{5=lһwo{ejuNQT#L0!===##f̘1,kݺuϞ=ݻc+**Z%%%5};ŋFSˋVUUB֬YSUUĉl6EQ,)//Ç p8E5fj6Ljiii 54tkfƍ#r\3uTBݩڵkt(//gcƌ!\xq8iӦB?i*66VCCW^nk?fPf͚շo_.[^n̙3=<<>\XXHQԉ'z)--=pj}ٳ'EQ W\߹\nyy)S{Νm۶ <ԩS-tڕC^pСCZ׮]n,oݺUOO۞{=pMaaavzԟnݺ[(yyyKHHȑ#`۵k:,dggBn߾kkkɍ5ݻKݴi=֖Fߥ,++{aeee3go͔l$ 4.[k5f܈Fs{C,ʊ,~~B}fhhXsݻwc@>4aDG} L6MDDd˖-Ŕ߿_UU~cMRRK o޼qqqyL߾}O+Uwrs |.-BCCwCG)hI "//+Vn7GE=y򤸸,))iƍfj"cii٢{EEEl6ݻw VTT炎}С#OAsAYYYgRCj!tSNڎ|fm۶}FBCCnj.!!ѳgOWW|%%%222Gm jVRҏ4~ʛ)ncbb~GEEE//oc:#О|=a}J[IRR]pqС & ?u՞zyŋC8qxLHJJBE}Ç1}611YzY^|Yk0  P^^8o< i'豒kN|<mۧOlmmޭ[/_8p@^^^f鱆SBU]gϞ}Ǐ.ZJaakj & BΟ??zhuuu i'o%%%Ldee^ť_~L̙ͯ3՛7o^b}QmA ?s ӅMFQԂ <<<_HHʕ+?p-[())1]7B 9|',"T-vqFTT}ڍ7nlܸ111-=<@KCwrhQF՝B~ݻw3] 4H qƩ=zٳO BA7mQVVF)//}6NA5/ :BUTT'''3]c.&&6l0 __1cƌ;fXnnmzljjhbbt]€OAhhEEE7oܧOFJj kS5dȐ3fDUUҥKgϞdɒ .{ZZw-_{w>}w||| @xНYˎ5k*Xr)Sj>"..?3U}uƌ>Ôm ǻyCzk׮9s`Tp Yz=}4N| &Ժ=zΝ;FFFG~jC٣7~7o,^ :,D(hfE11+W2zQQ˗׼hdd`IBP^^|rkkkssO[쬭OIII'NDH0&4(##?򓈈ׯ;NgVXXf !K.ݻwoΜ9YYYvmBQQŋO:ѣ888>|exӧOf4g0cƌaf ~ŋOEQѳf\jݻw.\jY(hjnn77^۷/65Kc/Xb1]4(==o߾555utt y \yy}1]K;ԧOÇ߹sGWW߯Xڵk6667nhhV`\IIIPPodd˗ Åϟ>}:~P姎MߤqƄkkG3]B͎srr3wiӦ׏|@\˗=<L>׷Lաq܇ݸqѣGbbbVVVv0avh P$YYYG9~xaa̙3_tQWNNNTTTDDDpppVVV.]FzѣGc0L@ɓcǎ={V^^~޼yK,b>}4"""$$$!!ADDlŊ hӝ"D(h[n]rtѢELӆeggGDDDFFzxxXbܸqSNelv``cbcc >lgg'%%t]Λ7o#""tuuǎ6b:K.?^^^۞~Ν={4oa׳gϪk>ؔׯ_mߛ7oN8S\\}yڄM6oׯOJJOHH8ydYY3gάZJWWԩS...ΝmP:uS,,,w@>|H'..޿A2^QHZQQx-ssspBuuu?\pF\ڵkyLm[jjjjjj;j«۷={uvٖ.OTT_ݣͽ|ŋ_xJJJg611RRRcǎ|ON?VfS͛7tr*,,$gҥׯfDի sssmmmB?3y7o>{boob BEQw^tiiiٷo_BȣG!?^p={8@w=qj)++3ƍpppr'lٲeʔ)ݺu#p8))iӦBddd<<<!x>|ݧ6(޽{GǦϟ?x>XIII&My󦽽3grrrtuu-[6`w?[GGG!秬/.[L,JJJ| =z{Ĉzzzz8,\hmmm0[CCCZ5]F_rBZP\\޽{:eeeAAA>>><B233322222Ҿ|G&7Y(\.ˍ8w\```eexLT\\׬,:*gffr8zM999mm.]hiikkkQIGG}!B+--}yq]{ⅯӧsrrĪ !|~N+3?!BTUU544444LMM'NեKmmm99-P%%%I7nXkLhN}РA'N}6!$--FJOO?wܸq~%BŋǍgnn~|W^ϳϟ?xEEDDL<'::zÆ Ν#=z4**2s)SlBH\\>}ŋ'$$BΟ?蘝4{ׯBBCC|||a__Hzf!%%տ@;:;wBݵ<==cbb/W^ ޻w-[\]]ϝ;wСTWW1bĉ֭۽{wNNIPP---MMM !nnns6lXrrU,,,accݻ .vmCZBBɓ'zEqqqQWW?w,!$22222UVVȑ#{ٽ{s璓\[ 4r:u@__󏟟!d߾}SL155MIIٵkf}hQ8 ?> r\OOOwwwmmm%%kx<Ç;::B&Nد_?yyiӦx<##CJII7J|򥦦… s&**rJ33/_00> BuDZ%ңKNN999?޷o}@j.r8/// {{W<{Lh{'LbbbtW$IRR.}uttdddΝ;_^^KooocN_bUU˗mll:͛i (*''2''Yc|QRR2cƌ*__;88lڴiРA?NOSBȋ/cDrr'#IZ[['O/^t;w\YOOϯh?vuu;v,!ʕ+gΜ]l٠A-[v]Y_|("3GǏ---T\\|%11_u _vmi1rʿhbbbggWwIܣG}_Y[nguп۷'&&ϲ̌͵EWW׈ׯ3_mݻs hzjnj.  @`PC" 0D(1]4OۚI |D6cڵLݻ/Pzz / 0D(!B  @`PC" 0D(!B  @`PC" 0D(!B  @`PC" 0D(!B  @`PC"Ę.Zlooog!;w?ҩS'''':(b`^uuzQQR5EQ,r'N`@Bf̘!""R_3!ΎZWB. Y(sssMMͺKHH̚5 &D( ..^qo1R@ y>}jll\ݻ2Q@녳P~ǚHHH̙3rZ/D(fͪy-2X@ y?޿?ҭb/))ZѳgO###BجY5Bf͚EGj\.AmZZZ<oСqqqL,ԦAS>{lkhp chC ***.\(W|ӧr ?~0_¢K.|ED(hC 'ж B  @`PC"T={B rh:͛78qׯG(bXijgdi"TvEݻO:¥jP]Ν}ϟ[#JLL6mZ>}ƏA6dkkk.QQQ&Mݻ7!ʕ+CCCr&aPӧOGuŋҏm޼~CBB֮]~O9r˖-!!!?0'Ap֭[7x`'''yʔ)'Oy&5y+V 8PJJ^II hfcyիWND__s~QIIIޓ'OV'@+P˻wH]ED=BS@ۂձBuM%%%BHPPP!Bu,FFF"""<٦*B%߿?77,22ӓBu!Bu,]tOIIYjUffϟ.3g޽˗/N:tΞ=K:th߾}/N>;v|rNNN5!Bu8aaa7o~=!+!$))Ǐ222/_9v%K<|ƍ'NŋMLLnܸadde˖ݻwܾ}{^^^˖-;wÇGDg7ol\.wΝݻwԩ͛y<މ'|||/^L6m3118q"!Ç6%))iff|rp/TGԹs~իpƍƟUÇ=jiigeP? !߹SSӨ(wwN:>|Q@kUUUB\.HI.חߵkdzKJJTk^СC͋}pwe!B+EeggʆV'<~fB !ϟ?+((Xbٱcogggmm]UU@wr111s\r8B JJJJJJ(2dPsК~_믿u wvvӧ ϟM6M0rҥcǎegg鹺;::FFFZ|OzƦgϞGy??"qqq{{ŋלO%K5@[4=B]PжB 0D(!B  @`PC@S}Կ&Xd %`= @C @`PC" 0D(!B  @`PC" 0D(!B  @`PC" 0D(!B  t!"4(Ք5:TXXbLrzzzS,++ۿCKJ,4E}* keeFy捫zff TTT455/_Lqrr:{,!SN,Z"4hٲe111EBϟo߾_رcԩ߿urr>q张(999 hqPРϟ{+!k֬166VTT4iRaaavv6s0 ZsQMM"%%E/B_A""",tdP"4HW]]M/lB˥y<ts IIHH%ܹs(z:uDILL6lO999w9s%+&""*+̙3'OlԸm6CDDT8 Ec'ggW^y5 E&g0""""2#EDDDd6F(""""1BlPDDDDfc""""2#EDDDd6F(""""1BMm*$&&v%''Gx]''Fwx׮]kꈈ#@333Ϝ9SԩSuVEY/^#E~ [۳gϲ,ʩD5UtRڵ;:wlr#ܹFcr#1x|G={ԬY3&&,߷{evDDDB=bbbBCC-]EY৑zl{.X ""q˖-aaaevDDDB jzіz1Bivvv.z1BlPDDDDfc""""2#S->>~ƌKHHpBKEDDdjƍvZ~Tb7\|۷K4"""TyO>=jԨXti)FDDdvn2f̘R4ر/;u4mڴ?sv<==>sFڰaZj߻wG@DDdaPO_K.AAAgΜ=z+t~mDDā{n޼y3f̈ǏyEM2@|||ZZFaY#S1b[׮]{k =x`~숈ǿKaaas"""ʧtTN:uԩQF+V~yfƍu׿pBIDDd8 t9{,J*\kc<ܸq@JJJFDDxazHLL,;ݝDDDdoccqFV[͛rss /8;;oڴiׯ_{͛mDDDV5`3g_JJJ曋-ڳg,F3vX7o^ݺu  |?l#"""FܹsGk׮-Z̙3u֍5^z.]ZtiÆ }||/_?oذa?w9|PPP͚5Nvׯ ""*SPOO>-.Zhʔ)3& IDAT4ڵk/_֭[w'N;vlddkV^ݼy7mtӧOSΑ#G'۷O:ٳ۷/ POCj*44m;mڴŋ?3+V;wV]d_=zh{wss8pV}۶mo8wcǎըQUVvDDDtə>}+lmmMvXba7nh޼y3g`ookh4Bמ ѱJ*o 2dȐG?("""Q'ɓ^~:~MgZ/z^mѢE~~~3fjcz,]4 ((HXP&زe#/o?>wHDDdU(7onҤIΝ߿v]n7.l5ju/zjzz&O!<]Ѣnwppxw{ȑ#uDDD?+Wܹs^x{|?:~S֯_f͚߻w/{jܝ;wؿnn/ۗ ࣏>ZjUzzzzznݺNQOYf5:995ԋk߾޽{ׯ_?x9sxyy΋/NNN[l}v#Grʅ 6n`ɒ%>ܹs|5knOZVg̽W^LLLhhhZZ )E[l 㧑GDDDd6F(""""1BlPDDDDfc""""2#K(EIII. Poo~,ʕ+k.]kժUV2{;""G/x!t_)Qax/EDDDd6F(""""1BlPDDDDfc""""2#EDDDd6F(""""1BlPDDDDfc""""2#EDDDd6F(""""1BlPDDDDfc""""2#jk׶tDDDֈL+Ws玥k!""FPdJdB#rʖ.J1BQlll?~M6NNN7޷onUBBBn<<<4MV;ٳ ;wXb\\%0BQQݻ?FGG:t(77cǎIIIz[nǏOHH6l \vmӦMSLh4>""REEh4%??kfdd|GZmHH>۶mطoߘ1c4o޼Yf ڵ dž'=zÇ?M69::TT @ݺu-X'Q`"3xxxܺu @RRҠAǎV]ݣ|DDDO<^#3\rN:wmݺѣG{?EDD`:tPrrr߾}{Ű0[[[*TZ-\UIDDT&PUVMMM4iիW 8K.UVv۷ooܸqgllΝ;$''[v""E6mڲe˾曚5kv}Ĉ˗/7nܸo& @VGDD888Xbڴi?#:[|""RʿC/&&&44 ""plPDDDDfc""""2#EDDDd6F(""""1BlPDDDDfc""""2#EDDDd6X+Wx{{k:nzϞ=eY5(@ժUT*UazYY9F(Rӧekk[oq=DDD֌oڵ\rٗDDDdHޡCZm."}HIDDDVzghgglz#uѱ`ZvqqTIDDD։CBB[zm#իWNNNK,Xub"],[b"vvv=zӫW/KWDDDd/dlݯ dE=8 E^~e///}a~"""2`!+qɳgϾk*Tt-dy7nt DDV`_J!QF 'JLL DD&/N]3BQLLLhh "FLc~"""*#EDDDd6F(""""1B=RSQ:f϶ta`ԮmzmJ U̙e[c*e]BJ;;?oϷ*}T*LZ8:zu`6"PJZۃ?]md$n2hINFD43\]K"$+W{Q~ڃ&FRy3Z\?̚ƍb"7 !(_F|<>g"0K(*T@RƏ/-[pqAj3YԆaBᅦ/NBT#1w.^z IIAR aJr'Sp!""*ePA4i(\ha6T5j(/ ڢZ5!!ر2żT*͠|֭p0\_F2i遨Y0qAK j7owBEf&֬A60Aa4mrЬ.;p>Э<<ѠU+;C * ݡR]ٰ18թ0:HѦ и1,|^}鷍sشIhNN][u{""UV|K\oܹ*aCqqhQƥGH֮EXGGh(220y2ll1{o-;{Wb"T*")ɸ{8[u Ǒa`2F45+*TnGDG!cG$%af_~Vt[ ش IIE7ذb|S' qq)ٟ#a*+*&L@Nr3fAZ_|_}ܺWѫ~'5ΰ34?`]hܛu.ZEpt4gФ ޽& 8ru74&ƸBXʉ#TٲرFϞE A鄇#5}M .;t(4n 77Lyp nƞ=Gfh~=Lks>D=DDD]+J4j@ǏKHM5ذcG4jʕѲ%ܸ\nVͽ&/ Aeu{7j\ 5k⧟ !ii}mAVkq66n_Gb $%M|C` p>RSf Z³"6SS1i^c .]O#NEv6""PʗG۶..<">puE^xm) ::ڨUpOp8wlެ[W)S 6_@.47ݏJ%ʸq""e~ȡCb:u2.~8qu efYF4y}˓iR<+"̙S> 01l5{+Wӥ|y΃ޓ/۷%!AyGuRSF beqwXȐ˗[7[`>|S /*# CmDDyu̙#>>K嗒I&V˅ ƛ :]||''/o^:ժD(3ڤ_?iN ;'4lJ+SrVR[ܼ,N*vv`RVm+'NHNr>aВ9s믍_(b^ԯ/^^z#Kz^/'*ܺe租D('p{!O;v 4 %lقЯ}&MBn.mgĉ-ի/_ZY\tnnpp@n.Zdfbi lAӦ(W͚ᢎe:>th4hJrDE;T*ܽ٘=x:uS @Y{8ڴ7ƾ}«b811{6-Z kcj08eƍO ص f!/"XpsS88;I\`C[[>DDp u;WԑMe2{t7??jW$>^߾ct*iiPIIҶrҢJH] H !Zddȱcܹ""QQʅe[E+]YLbc\b+8 u',Kv,gJJ@*T0}/"2p8:ʜ9,ǏKHb]+Ș1V_|![˹sr=*"~xyɞ=!'_o\σordVsGEeTR%9uJSrr,%EƍS>BZKc^{M_/tg(TaxMԯ/˖O7VV2*%4TiPzGG7O$&FGD`Y$B*re1DD֬1'W$.8BȥKVȑbj~-j̛h~[TѯNժ-?B|P^MHFqUǏJ#+^$!YY!T +VcDg-{e.XIRk$D$7WiTY[T*ٵKƌ[M.t "}IJᅲ"#M޽Ҩ*ҡ\*"蒴ZUllD;C=`""*,i=Z/YT=U탽=53ѳF t+k\P237-0nzV qpOO=jСZ5L o?zÆah(U_^C[['R%'Ouԯ\EYqqqM*6DJ 49[tkPkDoѝY !$+\+hjsP*0P*z5v킫+3<''b:`*U{]̙xE 77tի 8_+*d̏P+#"gb4ƢV-?4s4==妓ѫZt66XAAرƗ_0'i"<w .{cGo舰0bR1t(j˗fDxyz$7n@b~Zkڒt 22-UWX$Dj4};gg|n¾}w(sP*a`T$$'p /Q.hlތԯqN7C=DDd\BvɓB.h_},+Wbfdf g&hع5@\!<'OݺaРfiBmw.ZE7{4i;ww;w0\A:ƍ#1nP֬)rUͧVg,VR O s- @JLW_aJlݪdt#;w*;)T @ժУ…x+"… r%})7W^WصK7JH(=DDdGZJs[lnc";={5Tbbzj8t O'}0bccåKXFaŋ _]_\j5&N4:>}M .;t(4n 77Lyp nƞ=Gfh~=Lks>D=5ioolؠ-1Ye_ROlAɶouw1d>aa4'矍z5z(tGv4r F/ne+'wcLlj0ȴj>3g* Ԫh4h66Xx1O&=7Fc^ [32JZ%ԫ'))6j$-*nnrܺ%r r玈w -[JFȈ7ר!۷\$"OT_?uKbbaCQ?d.s䧟dr屾 IڵÇ%;[RR$*JV͕Edd塭d9E&'IDATyRՓogkmBw3ǠUCDLSPtҥ$%ɕ+ҹ䚥J2tx{;Hzʂ""ׯk+EwwٱC?S1=!_a(j ;w*=MfN\)YY*˖ɀOьƟ:@m3>(' +iVdLIMWePi@ED @z9^^])_^*S$7V,o''"*L)D(]+su ~gLbp?Iш$-[kuO:$..zycz:Ɖ4l(7˚5K^H˖!;?/Æ88k\V+˗KztAh5z2''iL~Y߾hx{o/4??qp5dDʲpIf؂.\YՓի?dQfgr< >>>V+}+'Z<?"T9:Z^zu2D?nL("}Ҹ|215;V,#QaTRJLLLhhV5k>c e1#.wg|՘2'[$(;*RftT鯿8;AtfE)/yyxyKQDDDd#R`(L{;{6 ǎ!= |!'j}4۶an~Н%Y=rq#||gyԽbcd ooƏ?QFѦ o $"""gE ۅ)AA 'wOC|0d%Y=븐GDDDXa""""2#EDDDd6OtJDDDD0P-[}%Ao""""2""""2#c9L;@$IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/chain.txt0000644000175000017500000000157213500440053013720 0ustar00mgmgGraph searches -------------- The other day I was wondering why pickling a particular object errored out with an error deep in one of the subobjects. >>> class MyUnpicklableObject(object): ... def __getstate__(self): ... raise NotImplementedError ... >>> my_object = dict(foo=dict(unrelated='things'), ... bar=[dict(nesting='fun'), ... dict(boobytrap=MyUnpicklableObject())]) >>> import objgraph >>> objgraph.show_chain( ... objgraph.find_ref_chain( ... my_object, ... lambda x: isinstance(x, MyUnpicklableObject)), ... backrefs=False, ... filename='forward-chain.png') Graph written to ...dot (4 nodes) Image generated as forward-chain.png .. figure:: chain.png :alt: [chain of references from my_object to a MyUnpicklableObject instance] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/class-with-finalizers.png0000644000175000017500000002176213500440053017030 0ustar00mgmgPNG  IHDRk9~bKGD IDATxyX3IdJcA(.(`qA"*R)zZjzuik-޶j]ZJEVuE@DC y?& 1 %I ;ga2s"B1vN BX}B@s#GM$EgAYg+?#Q x<^CCQt͋ir<66 ӓbV; ؁!>!v`ABX}BꃚQRvtu o@^eܽ iپ =3oA ի χiXwb?`8qB9N]\ 0h\!iY7 !>`fs> /͛5 ^B 9&OmYpॗB&j7++ذApN5 \`* VFXrso( ( 23!>E!1vR cOq8|at4Kp jj؎=ҽ}HOUV@QЧH$M˳`(4 !V pv6hFEkBHP\?SoV99`A^-[ !++HI"P(81?kNNypKUa:G /J>oo= !Zcs~x++pumVVVӖ7o*XXIL??x`c"SǴyzBF0u*d:Vx-THIѣ!%>B!) &N;;2Ls’%hS]xk\XG+p?吝 @PV#F@nz!ºuM@"u !, ֬B\0c<ׅ0f 88ᐟ;uUĬY 5,_|x>H.]Cr6W@%Ef !ܸA\ 'W( 'nn#Bݛ89)_CWF"\beE$3̚E?&={aC 'ӧB?@{jLZUSK&G4bmM|RTԔzM=;ҼtD0 sʹTLLȯ>w )+kz7h!'mxU"r͜_!Ņ \N dJASUմ.׭#UrlJuP>Rƍ̚Ք1zM=;<> o^怢`V3UrslmPKTq:qyi`co CXS=ӳ1]-, !u6KK&h]V3ak {'0mZB~vww{{}Cݺ̜==͘'O `(8wa6D_:*m*n%ί6-gʄ>9|XSz1Z"de߃\ァ\AE*U>AcݾJQ7;L_:)+{q?8S26am-YhYByFv&> 55d÷" w2|8%ݺ> ÇٳIVil$$&8:wwkʊC ݻ> Nbbȝ;mqt$K:M̟OΟW-Jɐ!LO'ORr&\Ll4edd'1x!>!v`ABX}BbV; ؁wd'_V@Y'P:/gT*q޿c"=0-66%%%ƍiNӧOR(پ>>>رc  r6}8[rƍE"QvvA<}4:t Bf̘#Uuk_~؂Ǽ]re\.wPÆj4B۷---?C k.C\/_\ W]SnpBv?kmm|aRREQ%%%1Yׯ5kBpppXXa$TTTڮX°fggD"-[(T͌9cfϟBCC_n333 77#B.]jooo5d\.wWUcN233{iggg bƍ3ȴggE-7 󁁁`͚52,>桲2>>'i[5PuY#OYvN444Y* ̙32 >f`׮]nnnۊB 1&!O< g6&_/^mVVRRIQTRRR5}=ٳgùtQBٲe1NZ(-[=zxBDџ{{ݻp_sry>}Lb B^ycoH}^bVic^C(?T7D7(NSj<==Pa1-2HshhhDlsilN}^ݻw(z&>&̙3BLvonaaq ƶH9x ´իK4X}Ljȑ#z:V[}}}g͚FiLnQ5/qĈ׮]crHVeeeڲ;y˖-w{2ɓpA{h J5RP(LNNf~Ӵ~3H5/qΝcx눆Շ5BWWW!>ƛ>>>|Ƕ<`7[n-[j^bRR;!09zֺ-99ˋ߿k޽FI`a}S  09ZD"ج]@%VTTNؚCGuuòeIjjsMM ہϼDGGGvvxX}H}Im[||i>trrzDI5/qرof; ;PJ;;UVիWw޽{l… yƀTs'LBRSSDD"~7)yAAAt(X} lݬ!޽{&r~W?߼y@4-,,p^a1wFFFsKII6~27!!@tPKӧӧ#c&5P++O?@ٹs'˽|2ہ O{BΝ+ M\.߿IDz^"3Mo;0>mH!ӧϩSn޼iaaaX~%V6:{lMj~={4P !Æ g;g%:99EY75X}Zɓ'/x/ BիW\m؋urrr@f8g1%FDDҤ|aiGB C y=zD3rƍPp\[[ۅ x;vT\x,[^H`6ռġC"w49A ˖-]]]%++ƍaaaz1iX}ܹ}`s5fDv￿.|lGly}c;ӅՇBRi@@EQ]t)//!d A)T Gvlذ( |>}`[lҤI')).[gϞ&fyX}!W^xo1cCmʕ|>_p8Pl@@wh;v,=/GV-,((rEEDDyt`!7o8R7oY9sw[ _؎Ο?G(]K|L&+5o ɓTlmm͛gG3d-}lRW^.@įivڵk׹s窿(:pѱSWﻻk&XXXe-쬱;]ta;ֹsNϞ= 1ѣGfRplmmoܸvt,@g8yj\TCC۳X b_y<bTmЭ[ӧOik׮R;uҥ@kBJQQQyϊ+rsst>KQٳR)QMpvv>uT`` Q[NNU |>ݨ,--ܹsoׯ'&&>bǁtMFQv߳gۑ޽{]ݺu3>%GMAxlG]taܺu+a23ܼysԩ -,,#|@tңGFGG`EYZZzxx?~GlG^?y<^cccaa!_WWgaaٳϟ?dT,c1M"ݛ~XZZҿQ׭[v2gD|IT4443۱œ'O8D\wUU2"#sɎq۷+,,lz~#d믿uN8l-O?0WEEEeee#GlZ+Tz̙'N|P6͕wЀڜ+\^PPsĉ쪪*pqq1BlzaTTTFFjd0$?GÇ s0`ϟׯ_>}[:^Ν;3uFdD".s` ؁!>!v`Accc:ÇO2@0qjO0aȐ!zR]nݺ˗/oݺ:*PQZZ>i\ &}d2پ}'<~xsԵsJJJkCc0WbydG/YbŮ]}ѢEƌM;Lf`LUc\\\/_~/caaZŌeNjkkK7s8C<=55,--#""|||bӧ3j(P(Ν/NVhرcΝ QQQcƌyW ::6lСCSSSʶn_ikeeI'󫯾/5kVHWhh믿wرw^\>bĈ lڴTOȏ $EQKZZڷ~o999O)/988]ti=>/ȑ#3f2dHzz:t{wС{OI$~~Hpssڳg_|! W\ٵkW1)JNNݸq#}߫+WZ[[3gjt?~|G7zٳg?']X>aaaͣ-//wl]]jͨϙ3^ѣrF di*3gTVVzyyر'Li&/ӧϙ3g>0W?GGGO0nz:v1VoR^^Z|@~Xʹؽ{wb gR0Wjjj92vo߾?4.fco^вvvv:,BD߲ɓ'B8h<+;&&F$iDžJ31V飞Q(пw۷$ʦN\PP  {EgaZE;v 1֑ח,Yrw}7--w7o!!!Ǐ?x`KV^bgwwŋaf_~k׮xmܸqРA}mnN+z'=0W-Z={:1VW&O:tЫWfeegFf Q9NT霹j̕1VWkkL4)==^Svfc o߾^znذފP(LJJv횅ń ⴛM_>|XYUaC2R|fΜsN3mڴ1chѿYlsc닊BBBBD"YpH$ZlY``5kRSSE"k;sέ[zիWO<966vرڝh0W-j쁮=ez:䈈|X~IDAT?RSSCkܽ{7ܺuF$^boookk;w644yҥKw HHHHNNnllj9U{hd=mNLLl/zjJ\Xzy $&&92--4[Օ└0ꃹj9U{h=m%BQWWWVVqlnnoq{> oLwZu\ 檵XV'''''nN2lҥk׮p8ӧOoL/)oʝw^+ovXw#GOJJCwUeUf„ #+**ZGF5qė^zn<_}Cilj֠={R/_޽{w^;$$dҤIYYY{=*..w: @PLKKspp:uuQQ)׮]=z#~̙Æ ş~/?.//WiI`111'Ntrrz:s&֯_I& zLCu:v`׮]ņǔG\\?occ#H&NiӦiǏU)5HP^^ޭ[XF\::#LV; ؁!>!v`ABX}BbS6+_8R0 w `Z>㔗wti+-Rr9Q1=$$`Zs*7o v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. html_short_title = "home" # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [ '_static', ] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_use_modindex = True # If false, no index is generated. html_use_index = False # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. html_show_sourcelink = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'objgraphdoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'objgraph.tex', u'objgraph Documentation', u'Marius Gedminas', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/extra-info.png0000664000175000017500000004606014701712343014672 0ustar00mgmgPNG  IHDRTTSbKGD IDATxyס d `0͏) "D |)\ 6? a>¯ ٹ;7dd`no`  'As\ ۶-Cm|o6B )Iھ6?Y^h46 DEՕ:$Y}l~ ϡ ѣп?ñcd `c ɺ:8xDE޼x/*&1\ݻP] 8>>PQhiٳ 9n#./xƎXyR] aPWKKؼ44$$`@!pg=zgܲZ!zX ͏) ͏) ͏)uAx8%'ul~L=x?'ON 9Yp2͏<{w;zт86mjCmf2_h(L ""0f \=;(+Ǐp( p$0dHI5}U166666&[B ̄APVV3!vn.Oʚ'ϟGswPQZ tp!RrrB2x1@(6UW#WWmd jkѽ{߳uG@HHHOԌA^PTAA<,q},46¨Q /Ǐqq660{6@Ü9`a EbcAm-ܽ p0lq},deAa!  %pDz`$QN$S 6? * Cl,•+m#[TeeuTk&c㖈. 4GM 6?#,^W,}|S@~ +TT-K19$@^C6yyTT7de{ǜWRnnP_w #::l444gݽ t:46­[IIAB{P_N O0\GzzH\j{p7y2B 4`|y__4r$C3g20hYYZL6_# Pm-:yߏDZhK}Ì #[m(JHHȪUf|؏) ͏) ͏) ͏铼x(*cWI?6?c aP8uE㛟c;r|sa6~Οg^]zػ 8N˹++!9$%k[`k{sEpz_e%=-_JJHVyxtMs>`?DRRl /n.߲?**ЧO~‡ht zhmKB][=y6?éQy QGv!YZɆQφ@Wɦ&:-) !ccTWNR DaczԄfKۇ~e{n˭' LI0=G aBL 5 aÐw55HA ֮EOӿb="cc$/őF˂EESEОoS-#xyKIqqavI rtDhBDJBCQCChkm]=p0RRBe @!oW m5®]0aBKɗ/hliڪ*)ٖ.AAxvYoOm+ 10~FzzHWb^e;>Lщ >Gơ˛rⒾNvϸT,-ۨuޣGqȑs;FHW~ׯ_'%% 23gǧWy!} l~L'ݾ}+/^Aδi߿]ZZJ͏gʔ)AAAAAAd+TTT}WœE6ޚ~s&ƎTRR[!l~L|IKKk}Vĕ1"))L__l9M2ǻw!CyѢE߿'[6?*++7nhjjjbbB퓭5jTbb/_^[[Kl~L<~xڴiQQQ>>>ocǎuֳg HT͏nnnF\w0?I}ڰaC3+=?Btuug͚ |8p/baaѣlW^YZZ>}zÆ dk(ʙ3g~jdd:dȐi3gRtJ 0`QMMM4_-[>%%ed+4#%%uƍO>YYY^y&6?qɓ'geeݽ{ÃJ vʕHOO^h/۾}fFFܹsViOO=::~˗/-,,rssV^MLرG\Cx O.!!-p.bcciӦ2C]~B~СCR!6?7MMM|Ȱana2sss m۶:!_$[cw8cƌxUxW鹹m~8qĻwx{{>544;P(,G>> Zjر ?R 6 ##JR(͛73 N*%%COiiP4zzzd>| ""H%S[[;n8bP(QQQ@ Yf}l\ŋ[?, DbΝ r cggqQ(~-X@PPŅF;|r~aaF{r $DzRTdqբ̫QHHؘl]=ˑ#G߮-GɤҒ4233,U܈˙ț,--I lٲ姟~rwwS:xTjVV K_pCpvxOOhm~233eU܋4JZnQRR²ի;wvDR^~}^ƽPT333aaahd+ T]:,6? &Ng)'Nlٲkג![177'x߿ɖK]VLL̙3^OA0o1.J P('޽;99lJSS"888WqvvVPP1yucTM^xqAbM:uڴi'OfrƠA~PLhh׸p͛7QF;˗/bbbrrr?XfkkkwWm}[n-\l޽{;gƍSNZ<׫ 8ǝa9CTTTΝ;" `ccsE㽱1ƦA\l~ G722p~l~ wX~G8|* ƌsyNfwPYYiddtua8;;;-k eڵAAA555;?zhpppII !Ik׾ޓ0Irrdz 9k>h[[ۺ_6JKKGDD^RuuuFb%5t!'~c~"kO"|QpB_vرkNaժU׮]klllo.6?xWPPDH1y&Mtʕm۶IKK^Z'%%7_UUU@@ >>姝?xMMM"**pܹҚL\>WZ;;uΜ9͛>>DHHȊ+ ]aaa+V=u֙p=O/{7oްiwK~[먶k׮Çwqqy9qĠ UUUooo!C\|<888##hu&pwwh4B6?K~ MMMgΜqtt4hP~t˗9beeFFFt:}ĉgO>΄K2!g9?߿/++d.#¿POĹ D9Ȅ[rʕ+{pO?oߔ\o~6fos/pssx+W,,,֭[ǦQLk(((@qq1s!Wl6i8+膧mߨѣGKJJ9sҥK߿ FDDh۷o)++r~ѣGҘo铸36mD<5 ۶mpСC.އN%%%͓{YYYCCիW3Za)))4mΜ9,]l޼F]z~~~.]p %nݢgϖnoSz*cr֬Y'._}C 5k0&ܹ~gh4^UUu[,&{nuufx͛7ׯ_cǎ_Bw;vРA,]GZZZUUO[[[IIEh4ڷo F3??Jr*< 7nXZZ2ߦ6q1߯fMvOz>6[!߽{goommm999Çg,NXx-.--MOOjU18݉ٳgO2LVVzzz rrrܾ}!3f,Y_~)))))) -[bccս˨o߾ݼysڵl/YM}sFFFZYY3711󳶶޷o:#i#} ˭ld纤'fqmjjڹsgQQq¼N!ڵkT*UOOW6?f|DDvXbrĈ111ҥKK. 6666nNNNNN΢E,ϖN0yl 5f FRPPɑ׏󳰰(//'bEGEBJw߿;m~b#f~_UUDEEݛeaa* B(11Ϗd1gyy9&Mdkk{ĉFЩSF]␯;w$%%ٳgFZW |wgB ##Cl׮]7oތ֮R_{[)"!!'cӇÇcaSL!& oݺ/ӧD%$kġ '$&MgBBBNx!^/qAAA5_~]EE,//СOڵk!!!1wwwpMx9o fQQQVVVJ{[Hw7BԔpNT>sDTb8QAAŋ~~~***3f`!&&]!`D566.\PTT4'''%%h4#IEEETT4!!aРAFFFo޼i Iƍ7ydhll|Eff&qJߺ]SSSիW3Ƕ+)) 1JkO'~%&6kݽvZ[yeII {KKKw(io a&{۷oz9ckk+''w񚚚0i̙Đ-Bٻwozz:ΖTCaa6(++`A/[LOOo߾}ZZZMMM^^^4****''Ԕ?00m˖-ľw***;`˗_~>رҥKą#G(++Ϛ5=m][]蔞MWVV}ɒ%ԺZYYM4ݝho a&{N85iҤfbW~~Ç={zj999ox%cLj7222\\\X*lˍ72f8p`HHWUUM0acƌAΝ;˖-ՕLLL 铬ƍWn[kcieޚ^n@ݼy3$$˗/ƌ;͛8aUUUl!].x;իFFF̓3Wtvvv999Zo`0,|Ǐg|Gz1L8xO?dmm~6`x700l{~ ؿ!C1ٳgh c0̙3-,,81!,,,))ѣGƖ=? 9::Yf.ƞ޽ݪ ӧ {n﷋"˗/͛~ÇOq?x`cc㮨r-whhh011h7o.vٳ.;Y ^5 d0]!nݺ(wa~7n;v?~Um ¶mFM UPPƍd rrriӦ 󳒖6sԙ3g 533;ydސiM]]ݜ9s=z$&&~Vf̘1~xk.++;wbw#۶m-444-[ჂAcc#Zx˗/S(k׮uW >}4|Hƫ1SYY9g*ܕ0m1wM6>|o+**/pF[hѫWddd̛7oժUΝ#[ 3k֬ Ǵ ??#F}0rxt==3gFFFq)-|jjj %$$ñD--3fxb  MMMdkQ}ʽlܜFEFF-+lݺɓ'у "[ w ?~g1g;e˖-\l]@@^{ztpp"[NC 1JrssI!W^&[w!""2eʔ'O-;!jkkedd9R[[j`` $$Kfnݺ.&!!~z$qIII***wAK,QTTP(BBBO&[BUVV\(UTTr5EEE eٲek%ȫW\]] T*1BRȭrBBBӦMϯ4ijyy944G^^^II;MCCy}tzڴicT*+))d$$$L8Jn۶l9= iT) Fks:˒ZŋOJh4ZIIɽ{ B>JNNΪU,X0tW^y{{KKK-g K.=x`{q}s1466رɓ$TWWM01117n9r$٢z=:njj*$$IJ>EDDH{O}}LMPn{]̙3?u=P(&Lh}OadddEEE_!N8aoo˒o۶۷vvvyl#&&)---((\Nao$BBBBBBW;$$$̜9bʔ)ǎ#[ `C bqKLLd@<-X$#T]]]YYP~9o lECCח\;wHD@@`Ȑ!ѱ|xbŊjjj )))SL![`wvvv ˑh~:˸IR%%%_~xbTKVVɓ߿>~(:\Yx6WQQY\\ljjzUUUUEq#;;ɓvvv9`c7n>^LL,EFFƲe Bᶶx傂MMcǎZs{=%nnns޳g3gx#i'((ht:QXQQ9bĈ7ZYY1D| 6opiӦ_VRR2e z{{{bfRRR222 /|>O"`Hnݺrʕ+W(!˕ СC7oeU^%RRR/^411%=0aBVV>3?bҤIW\ٶmtPPPhh(يC|=NOJJ*,,Ma6)0l@| WZ$̷p^t soߜUUUMLL;\'0<6?G8UUUF,Zcc#te, IDATL}}[Ϝ9d>MMM_~EKK޽{˗100vXBWWԩSVl٢X #߲2F ;;eN"/33ёH쌋KIIv1|pozyyDFFN81((HUUgȐ!/_677 Zqss366RWW{i-`x l~ v̙㷭w .d3tGGAN_|ȑ#VVV```*))iddD'N8{lQQQ]]]A w~A@TTQBrP3yX ?~"$#Dn7]D9^#QRUU(g%""<DFF~t  >3EEիW/ZS1>S1>E>|?{LTTtѢE7nd~XJJrŊ.?ر̌REEEvvvsss ^bO?gϞ  > FDDh۷o)++Ѝ:w555]~=I\\|ƌ6mbta5b1?{$$$P(mmmKݺuNϞ=بz*cr֬Yģ'N;vl@@@uuٳg9Ϧ. 33ӧ+));w\\\MVQQq K.Q(F 7;'2|||3ͽMh4ڷo Fֺ0'I~~~O&< 7nXZZJJJrUxl2݉ٳgO2LVVzzz ,iof|HTYxC ƍ7o466fffn{<{,??K$jedd%%%ÕTX 1+//wrr9s&1mkkKPݛHˬIMMe n3ljkk=111eۧMѪrrrLMMܶlB\/?J{׊<ܾ}w}y]]]nnnFF֭[\]] ㏙3g5ĥ#G(++Ϛ5jվ <fƞ3q%''}v"`;6c qFFF K^|qF  પ &l޼y̘1޿B9rʕ# ?K[ZvyZOPTT\n]mm_|-[?~bbb ,ذac0/11100ӧOjjj7nd\$ō1dύa? ͏) ͏) ͏) ͏)\H/q_=. {1LO1>S1> IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/extra-info.txt0000644000175000017500000000143713500440053014712 0ustar00mgmgExtra information ----------------- .. currentmodule:: objgraph You can add extra information to object graphs, if you desire. For example, let's add object IDs: >>> x = [] >>> y = [x, [x], dict(x=x)] >>> import objgraph >>> objgraph.show_refs([y], extra_info=lambda x: hex(id(x)), ... filename='extra-info.png') Graph written to ....dot (... nodes) Image generated as extra-info.png .. figure:: extra-info.png This way you can then look them up later with :func:`at`, if you desire to get a closer look at a particular object: >>> objgraph.at(id(x)) is x True Warning: this doesn't work with strings or ints or other simple types that aren't tracked by the cyclic garbage collector: >>> a = 'a string' >>> objgraph.at(id(a)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/finalizers.png0000644000175000017500000007155513500440053014761 0ustar00mgmgPNG  IHDR*sS^bKGD IDATxy\4c*TTC%-T}e]ײ%bs캭²%g:Bҩf>?t(LNG;{S׼"!!4T"^idggcF=\.СC!ɴɓ'ZYVe b=:TD뭈_}CRRrssF}K|<iB@V`iieVt7o{HJFǨ!GAE< *BQPB"xTPAedhNӛӮm9UTy]@t>29f{| U{|к1~~#ʱC&V6_|O]A GV!ĢGCׯʱ';;GD"ڸ$yWfMMGtdfg .9=G_Դl$''tR8p177ǜ9s4Ya~mY&{(:[>6GVe L\=Udr,4h'Q1i(<|@F 2 }K0gBT$Ȥ2V?x; X3`Oj18,bjXI U1yLZأIfHNKm "DӫBСCQZ5B*J*b:uB۶mannyT޽{^zHKKCFp5:t...FZZL7@h_VfVy7; ECxڣC[~w.zaԏdZ:qkTϭ_ V@Zf휇o}Ыm_\Z{F8$ԴX[v5,TfDjԲ\ڒrn/.Udz\[yr>fZmx#&wjY_F%ղewz^XXC033C.]TS. UY )ZV #cBi]>Sp=4[oB?G Wepj g[ {HLυtSQ݀ si U r)fӗa;t!6L݇ceX1~-ݮᵤ(J=-ZL&CU-,P__G8Tt˖-C>})S$$$<2"4E-z!oPcЅh׸TÍGao週}&C,P*n=nc00@zVD=BJz2_ j5EIhn[DRj"fmD'ĕ{MsL?#"!%U p_q:>uĀCСIl; "^^~\Ef 6 ))x쇭\Z}n-z3EuiDYe=Ѵvw-^VVpar=ؠpssCJJ T[n!>>o޼4iǸpLMMQ~}h_| wj5uݝ|"VܑI=QqZYH$vMt~~~|RABQPB"xT"!D(!GAEp ;6L$aشi8իWk׮%~ N4yƍCq ^z;w.\]]Kgq=ҩ:y_T\ժUѡCũ 733q lٲ˖-|駥ηptN>U%&0tPEլY۶mSvHyH ;D"L0 "%={VkU 0$4RҒѶQGvzU߾}qe zA1z8z].cPN߶m""" ѱcGifff8rƏx^2 GF 5k:1~x<~R'222>p>~jBXJY'⛭\~"Io4m`֙ufsըQ#H$|8BBBpܹR_J ܙϟc4"^ lڴ 3gرcѽ{w ==Ժ0 >~]脗0Wo vx|c%FuBTѾ}{/U:tl.&rwŪ+00$b =gwEmvlo1ݿf6hՠ-\)m+./񁕕S?׺ukԬYW޴iwU葑d;4LM0Ku#QHVmzBD[TG`g`s.ؤW Lл~PPBt!D(!Wi˳ aaa仌 pwŸR}:t( 6y'׮]tؑJH$h߾֖_uϟpww绔2' ە!%8莼d"!D(!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT*$K R*Aff&~tjڷo9sT!U r9K>-ZKm… aii1cիx VX>+)%uwz^6m?V8pqnn8 ݻׯcʕ8|0͛DTEٳgСC;w.ХK\v /_<}x 557`޽8x z#&&7nCx% ˗رch֬={իdeZ-mϟGF0x`4jW\A-0aDDD %%˗/DEEaڵ044͛71dϱk.(r9m бcGbرOйsg4jk޽{aaaQz%1.}yxxx<=={n~3g(J|.\Yk+%B~(r&}QFtn͚6b$$$bԩS:u=!]?www0>KW55k 33Nnܸc3-TCtxyyuOTK 2DuÆ5jbUDTP}駥nQ 4H?.}S(>|"FzӧRiqR}EyáP('1p@-WDtNw\,P\./2\*t9 )U>}!zCE44hP-᜜ 6.ѹ}:BCCeޚcDFFm۶022⻜RM0C ỌJׯ_ѬY3>y'W^\IBBB0bĈr u>̐)011?BOjּy}]tA}9޽{.GgQB* *BQPB"xTӉ=#$e" >ϱb ո7֖ں gvJOO]vE\\ ѫjժ%''kLw0zψ6&cؾ};0dD"ʕ+ib1ׯ}VZ?]vjժH$BPPgΜAj^=#"cTn“'OХKD"\7,|@600aaapvvV=u2dlmmS|%ElQRY_?}ڛH$iӦ<${FE0[T=_xM=#"255u|u\pA,Qbb"BBBTJ${FE0AX'O",, 999x)RRR,=z􀾾>BBBm6\v gΜÇѰaC@jՐh^YEU:u0n8aϞ=FDD,--Ѿ}{$&&"++ .\ʕ+d6m5kX#99~SoM>gD[B7o|}}Q.D6l"֠{QF㻔JO0[TR *BQPB"xT"!D4d$ ͚5+FeccS\ԫWOmիW\^yo~ٸr }}}kFvv6߿O׮]qQ9998u"##QV-xxxLUGll,;:u@PXhT~+g]S.g_M5,22Je/~۷nBjj*i3p4k 6mD"mۆ,HRX[[#88qqq:u*^x;v ,, Çĉ ;vL={ ** nnnݻ77n]MB2"V*8u>S/xzz:0xw_YnZ֭[uVqϞ=CƍUMުV \+xt `aaUŋjHKKCzz:ѹsgA*k*zψi|:tPk= X,VRV"/^)n>y G\\ڰ8~8n߾T]zψi4߿===զ~y{{syfee!11E~J%m֬,,,p>>O+=#@cAc$''Emxxx8-[VdzoooŽw͑K.U5<66aaaܹ{-#쌱c"88;Μ9] ŋGի_\.{ Ӷ@ƍQfM;wɰG\\?///-* P7]W\Aahh͛ȑ#066~$]Ab׮]gϊ;w{;;;Hm? H$7v&M0tPTRtb'O@T")) piΝ;[@]|mڴ!ӱaiiiiEu3kgPtC=Ӆ'B"xT"!D(!GAE< *BQPBGh$ JjYzz画"Ho>۷ܖQw- IDAT5mڔMff&NjRݱ|8 KKK!L *H]" R*g3gߥJBŋỔ h֬ߥJU޽˗/] ӧO› T666hԨN>w):ohҤ >K!T *q)iػw/f͚Hw9AիW/|6m1RH%V rgϞM6aҤIR JBpAKIvBFF&Mw)A ¹s琜w):ETb͚51bjժw9Aտ( 8qRtS|W|BHź_Iz ccc|ݺuCq1K!oQߩS[ # @+xz!A5`dffj\\NNN055?ĺuЪU+ѣ\毫R!O.733VVVHHHЉFFF;vm9^*1Nׯ\\Sg֯_KKKxxxrtm~U2dT???KdlٲSNT*BT*MPbسgOcXz5>3L8UTH$R}Ǐ1h ̟?^^^֭P(pE̜9666x%u놺u"!!AW^066F׮]nZҼߥT,[ GF6mгgOyD0a",9y$DӧEƭ]bkc7ndجYT8880;;;cȈ5nܘeff@&b ƌ޼y6ls3g0f``d2{[]J%1b U=ՕRMNNW1c"8*rrr?~qzb"eee1{:t蠚LJmٲ1ƘB`vvvLOOO5`jT [v-ƌSyV˗b;Vٿ?c^T]?ĉedffԩc+i&L[K.EVVrssUbnu֨Q`o;޽[yVߍ7ФI0W߾}K]7V A`ccCȧh&JݻՆ+JuVfbbfϞVXrssU0+++v XA6<##` (ӼKoɒ%L__Y~PW JT1:u6,''͘1Cul8N:gRdǏSyVpBgk׮-51؀XΝW =-n ƤI۷oe˖˗رch֬={իd$''#00YYY+Wm٧ԨQ1Y7n\}ׯ_?888`ҥ3BCC8>|G-qʺ^|P*AlagΜafffE={0_ sttdlӦMĄuܙM>]ӧ[nϜ٘1cؤIʕ+YNNjT_dd$0`311alܸq,66bɬ~LP;",2c~cREDD0۽{7[fjB`ϟ?gvb|R1?ku$fTڠfcӧOg/fXBBB hc ͛7GVsN!T̜92 ?ߥh?߿ٳg] !eR鷨ܹsCԫWr]^T*w) cU 6DϞ=믿]N F-pI|'|CHPPgϞ=5jкuk)7_|2* R}"-6n܈1c]!eV?ի{]Jظq#LLLw) 1yd|WJKK/I&"DPPb W];w"##&MBU!رcN8}]{)ܽTTbڵ9r$ݢ$ bt &MEzj{?FFF3f ݻ8v>}[R_ мys|G?3߇1Ԛ O?o"pvvFbb"j׮'O]!J`hh[رc9s&>#'d'Ҳ<##~~~ӧOQjUL>ĥKp5k׮,Xllڴ <5,XU%a700iR2Ӳ1UV{o믿B,c̙HKKL&CӦMqYDDD[nEhh(Ν ,]7nÇ~z:JNrL+$$O.reFN`ee vÇׯ5j 44Tm2AAq} NEUZjfϞ~ׯӧ_Rv"X'PVu-Hݩ;%TR lQEDDСC"$TS-}޹sgԩS;v+plݺ֭C޽999e377ȼ+X"4T֭[Xf VE/\*bڵ+a$&&ᅦ!T׉?111-[ 99Btt4Grr2;!BC=C= L'D[T"!D(!GAE< *BQPB"x=G]Nx!%J?VVVH$駟.EgX[[]$#4zHeFǨ!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT"!D(!GAE< *BQPB"xT"!D(!wD߽{Om:777lRc]gjj$HR0D"qVVN :aÆA" ++Ky-*z*:wi,-- ,B*2ڢ;ʪRÇ" D"1BUA999ϴ\!]?{.W~}i"BE[TԼys4hРp===1@5 zzꗹ) > ԳgP~}="}6ϕ}E%PvvvhժX,ȑ#y~PP ȑ#!soc C"BAA%`C RH$BǎaaawIJ,--ѽ{w0]!t[[[DDD]9sয়~ %kYfcǎ|"1$$$ԔRcϬ\P@;)с.h"!D(!GAE< *BQP$+(o v!n/D@Ӧ@zg^mpӗLcG]Ծ=0g \ 895KCwkNRavPyz/s??x̜>gO`f{ˋ\|%Tjnϟkn^…)rLKS_Vj*l0z4wgOy%1ƾ>ثW0[[{U-YXDc'Np;u➣P0بQ)ܰ'OHT26bcruědq&ը?znؐ93@rn36f co0fg:S-ˋ1ƶl9Rtyyoؐ6w.cg0Øc2ce];swwVJdln؉E Ky 3{ܠAs1};7>8X}>ϻ|cǸijYݻGՇGIü>oq\ʒ*33ڵܰ1c|^YEQPU>g/HШ@{jvm^͟OR?}__}:qUzФI}r `h̚Z (Nk(y?}S'T톙ݑJ߽[eYСC@FPRysߍʶp.|LM+| ??dp6ܼ tsyҲeY@*/{&ŋNPwkٖ%ut4i…>`~S^…断-ay[qW:`.'ŏ/˺ $|{w=Feǜ̜~&-MRutfzf1KKnXVcAA܁Z錝;Xj4OpS aoyǡLM~V(36fcGcݹ_ 7:|)7o{:ŝ 01؆ -XX^9VV5R?NT26iԧqԫ=.˺(#:FUvP:'p}0Ptl. JI2Kް!Ō%%q͞ӥKuʅSݺܴ]26acg2Xd$w&Ą;?n\~0q/ ŋ:q۷s[.L,ɯatnʟOx8@kیu۷{mϞq'jBlԨ3yf *Ϙ3w|$VϧO6-yWsK[eDAU""Py~~~TTQ_zY!'CYYqU^wڤQȑ7 PP A^rjwBHhOۊC^\r=Ҁ={>:uzAk<|ܹb72ڶ_PI "?]ާƷ$!/ ZÜ>u'gwpkx[v mQ,Ǵ 7n78P^>ssnښk5)֔#7  u\#K^|D(>ycfl\j'GTBU=Ƶի ˻xi  *M)xӄ;?‚Wp0_?.H.ƌ,p9"X4$iiQQڵ-ؗ/fF&Ν ;w/w,+҂=a~"kÆ[y{_s?sǦ,fnW !C=ӉΡ]NtNTTܹ:"*U进r1w\~ 'D"DEE{I$ b1rssQ^= *DǨ100QIS(ɁD"NA IDATqP!4 *p,RĨQʻ4R(DXx1~wHRH$H$޽;X! *K.RiJ%޽3f "r 3(HСCq+zSNѰaC17 P0pUbqT*8x bbbо}{l[lAzz:ǣu|Bj˖-+OBުa/_F.]Ԧ ƦM{nTZ_|Lkkr~aemm_W_}UoXz2A`1^xϟLMM\.gcǎeaaa&HpAE Pӧ3}}}vʕrk׮ite֠AǼ؃ʹBRTBWAP(;355e/e\w^֤I& 滬J ]>\kr gj nnn7B%'H0l0ܿOƿ GGGҙBPP !`gWnd8x ѻwoǗ۲tQϞ=q5ՙ:`СxP>\QPT^rssѻwolG 0x`c߾}{.5k///xTK(VZ8u"##1h dgg]bxzz"$$;wĵkШQ#̙3oA4̙30zh(ZH$BXXlق}nݺXh222.B"j5kÇ?3.Gb1FP̘1+WDq1Kp(Hݻw/|||rJիcٲe C0`?滴 ظq#k|,--{n˗h֬͛G''4 H)N`Ύ/YI$v!jEJܹ3ssssNKiE%tg-~…6mpe5"#GDHH\\\0j( 6 |(๓7~!8Ljժ{ҥKy&4huw$6/DrrrЯ_? 00666|sRRR_cݻ7n T޼y=z 99W\9%餋//@JJ ~]Ѯ)jժ᯿D"A~l{޽;s:0zꅐt...X|9byoׯ_ >slܸrtޮ]0en탥%% mQ֡C߿[l.G9W\ALL ڵk+W]`PP ]b"p&U_~߰pBl۶rt#t ...$axR63]/_$ ;x ߥT7ofR}g,--rxE[TD#ϟ3f |S!?ϟǹsХKJӞJ7~*dժUD~pm˩t˗/#33]tAHH%p֖*d 27nÇѣGK*ڢ"%JqA^⻤  WWWlٲh= L777$%%]R HqF̟?'NTWi׏/^sΰǩS6uVL4 s+.QPru}899 D"Ụ ĉ2dFw2"M6ɓ'S]NҧO>|{쁗rss.PPr׾}{b۶mXd T(zWaaDEEaݘ1cD"(QݥKehQF!""+WDhhpʈ#w^޽ś^'#Kh/`,22Rt(z'&&@ѡhDIZ%K ;;olmm1l0!!C`0ab !i =j骨[[ύ  mlZ[o(GtHzeڵ ĺu0{lhf 70z4J%PVJP`ݺu?xtUtXzc޼y#FhD%7 ^͓ѓ< 41R >8~8EW,XGpܜ= <χc-.i*?gϞӧ*:&x钅lllp`(++044֭[aoocǢXtHMFJ|01 `4iiaߑɓ'uԬk.ܹsi2JTr4ujsT^^gyݻFPPpJ.][",,Lt8MBJu^xP(ԏіݻyf|ᇢ+~~~Xb-Zs2,!4.WVo)@z:Lc۶mo pJˆ#ىhD%W'j 4PϓL:xwc D(Qɕ+ЯPcPo4aɒ%>}:E7yfDFFbi4kxwdc={6"##޽{Ioa֭|NWQcG@䪪0i$!>>C x饗ЩS'DGGCFfOaƀCt4Bb˖-°ap! DDD &&y*QAZp y:P\ dg%%@`ck^xޝoRڶEcD\\j|* >ԩ'Yr0|DFF"992VD%BR㯬,>k/[[03yw~>ޣ0h k'ԺL 0A6mEEE7n^۷oXpݺuèQa4LF}Wf&cV1;v16nc|XBceeM;<3ֿ?cFF06v,co+S׮]c:t`Gf,;;y{{3CCCP(ضmDsm J(Q?1CCƬ9cj2y3c0ֶ-c|8~8kӦ >}:srrbFFF 300`>>>IW^Rt(DRF``Hn#-[[Ƭ[\o7|,--!:}t癁ۺuPEsTv.0>okd x`m_'5fr`fO5/{q_+C7n***lellI&a˖-]3gDll,RRR`PQDgJR1q#c3؞=O|Ucg0WXv| sL3X.yx0֩cNN|n7kݻu,.#,>Wv־}l۶1BQg$U222bYYYC9ԔYFt(uЈJuN[ /_^#cǏT*?gdd?X!Jmؿ?RSSaff&:_3GG`ǎ{E?|1Ofs=zI< Va 0mXnn.c>#ܹ'mA@.]s%;``$`ݺG0'OK_hܩSˎ`˧NګY>E)SRxdƮ]`ddToGPB۷cҤI"mߐ*DO>XK>jt>HI?b +>󤥙$ C~N:Eɓ044TX744D߾}qIꦛ7ok׮1eD/ , ذ?~&* ='9**cؾ^[Z|u=vZy9 OO܄ioo .}p̛7w܁CkJTq">}/߻rV_(- {W,kk~(#B!Cйs&}}ii)dN[6n܈;vhigqq1IH,7;OU-Ғ')-;xΝy ?oջ7htttV6m"""'*L?')kIZǎl@sk*`j``~1f̘+W !!Ah$:ز')'U*sR2Zj$:Q|򁁼(iU|}})|BUC9sxȑ}K2^෷ZFzU\|D)S ##ChM%P6;w5z-[ZZܼVXлwotBOJӆ c2tVT?tfQ/͘1:Gnn.mۦͰ300apA1rUp?՚6Mu| I^by-YRcƼ,COUs#""R늡C">>KUm?tAT[wϛӓ/P?>}: 񇐰Rp%DFFbݺu5dz#::{gr;w(,,?,0r6l/)Qն{70a>#&& ye~v}u{M"@BBjoٲ>|8F ///TTT`Ȑ!+++?^T-]tA^efg˟~\\v%ZϞ|Plc 9$T$zqq1JJJpq00|p 0!%???Q u0ߺm8o[v;O{ Νz1ƍ ۇիWCTTG7t}Ǚ3gPQQ!u)QU;z?ի=;w6psk4 *={Dpp0<<>())ի{SNx022e=]٫W/\pAk2HMO^xJ~vIhϩ]nzcƌvޱwzK/P(ʚZ>ana%{QL}{YEEJL> kk^Q[ǎTR"}*T?V'oBV{a?lu k_{ 6yyj'*}vJdddΝ;ӈJr%'{o^^xQ )!uGN4jud PD>6[PjeessC?nCfFuP+ܓ<֭[7$(Q|dhV>:-|112kϞB4oZZyyyꟙw<%ut] Xke|1oEk"A/mpطovv`+W>]4WUm˃"`mֵ>얖(h'%ڦNc՞O[T|Տ:ē)bPԡCTTTѣjɓ'}a+++[%xxj.]%ի@q10c[T.bjQ\lހk>B8<<{ϣ'սk_J-ڟԇ],--Q\\,Fjss.E~sc-* :cs7n_~{;v ~^T]!fϞݻիؿ?0eя?ב>FII N8Q3sر>rdii J$`ZDD󶻵Z,Л 'z?Drq>{/^ ܾ- :^|>Xlv؁I&;???dffc o)G#*MӦ5~CC!aI?՛8Q=I~yk԰z5Cy*JTw֯jIDAT֮SQ Q?>.^,$,"/fPKVR?>c DG?norrӧ?VoRZ |9rt6V*HU},,-NH#f`l5Q녊 `.\&(HOFdUinJT y->z R޽;ΟinȩŜvj|tG4"u4(Q5 A77y2ڻW=G61,\[4S&iGRDX$hi:u?/ٸu!uHYDi>;+T31"#''`v.5'wS߁cz΅ )FT=i LJmxmyg͛ZA]/p߾Μ |{Qu'%vuK:@%ps j^^l8~_y83x;X`R>jW1/%B7BJJۇkSUUJez7\%d>5moᇏ߳;~U1T;WKM WRQO8ILLzz*z={ @t8ZE#*2y_z5/sxW#9͛VM^6p<٦ĩGz]n,ERLV( % ɰ0Ft{a!`p޲F3Iٳ[Lz(885cqKg$cL)Vk?O4?-Tyׁ-NX%%|qqXy m?w66Mt=z4:u5kֈE{RٳRzϫGv֭#-o_Gv6OJ|KO>W~v^DĄI@AAAЫ)Qѣ?/u>/,((33^amGk 4%&xիC @ee%:$:fOT)H[731SSCҤJXl,cS2fdGz!!Kc xPmٲeGkdzKܙOl}VK'uGO׺|XOy,"̈#Э[7rrr`oo/ɵO*J%R@ϞϏ{΀3,(,z#GƠ|oDV[,[ oF;]ZĮah۶-~%* zO| uKK.T*ÇӺ]9/:zVIdxtR4/ /ůEJyW?ngl-Pڕ<=yr31=gpBڵ 7n܀ѳe ,b v%DE7n@׮]isss_ӧOokd:!t#GDhhP$??eeepppz$88qqq8wPٟ P{#DA ={dWJT"駟j~uEff&$DE@o&,--qFѡ<4JĒ!i3gDXXXMk_]:JTlDEEn޼N:Iv=JT1cTiqI9sFt(ORp-JT6 7[ѡ>>ׯ,zU]pm۶t1r5JT\pp0~ܼyShϟ7 צDEM0;vDXX8.\ DEa޼yظq#PYYW[)QΝrBeO>BOо}{L:BJN8mۢ{_DEXp!q!ɯ}) H(Q3^x )U8u^~eɯ[!:$88GJJd7Я_?ɮ!:dرpwww}v} _ZAbhhcӦMGRRϟGGG 8Ey)xzzֶE &ՎFΆ{9\pFFF[hzC6mڤ> Q#222l2tyyyt$)xVYVV'N`Z=2zuBH,]Jz12 4Hkl JTCT>377W=z(>+#Dٳ}}o= ???)(QڴiݽdehhRĉ'(QB]v8|0all\}m'ϣT!8r`hhB@^^֮'''%*BtajjT*VGTİaÄ-D!:O>طo a`+++6^TT'OW_!:5#r8TTT`ذaZ9_sQ"D;_u߿_+獉A=СC 5 Xz5rrrs߿ʹ \\\EɄ CDGGcjhDEH *((yзoc Z z >s!- i4N=JT٣DE=JT٣DE=JT\`͢C*JTtcŊV{oΜ9XfȚ!z ,mںfmDEi*?u{aʕZ2R#;;K,ْK.(QT*9'N޽{5T ***}vDGG_Ezz:,--_bɒ%ncӧ~7v3˗/GJJ fϞ 81cN6I DE޳s,//عs'T*f͚% smΰxb!44gFYY,,,D8i޽{#%%E JTB7o BBBrJT*lذ*E=RVVo^PZZZs,22!C`ii GGG|GRTXv- ++ ;v@vv6~@NN"##Q\\|̞= A^GΝ  ^4 B?C N8p v؁I&!D(QBd!D(QBd!D(QBd!D!23gԩSƺuuś7Z8BшbccQXX诫/z7%*BdRO]ϛnCr}TqEoyii)"##7nҥ pQ3EIHH_ >߾};]틮xWիW#//+Vrsskdeeٳ8}4ׯG~~>p=mېO\3D=ӟ L',JT٣DE=JT٣DE=JT٣DE=JT٣ cǎTrDEH 0`]%01tҥqZBC="%*BQ"ȞEA!OjFIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/forward-chain.png0000664000175000017500000003751014701712343015342 0ustar00mgmgPNG  IHDRaa%bKGD IDATxgxT i i"E@T,T Ѕ?tEA)Ԡ@/_H\Mpa {}s5ǏF#!Cs YH~ [;{_~ g1ɂBX[e%qYKk.Yb\w;'梣ϯ_챎Οz*XI}ֺƍѫgG2H.RKغaɬ\fs3f[G'[A{f5h:%RuT;tu ukk7^oo5:WVJ"y@!,y7 `ѢEf!rGHXҵkWJ.mvX3gΘ]F]v%882eqi>>ԨQ[9qݺu#00___4hΝ;8tcƌD8qvQhQon1Xv-$''ӺukN> @.]c޽ڵ'N0l0 IYd ƍחK.?@!,w ___hz̝;+W{JN(Q˗ylݺg}~z'NТE ^7]H^^:޽(~>c,YmbŊPb/VrG $..ӧOs=;˗/kX*S4!w3gpse5j?QQQDDD؍E̢;?Ltt4}a˖-;vP@:UJMM 999k.J*Ell,cǎٳݻ3p@:t@R;w./^dѢE\rj*֯_@tt/Ek Fjj1sLrʆQR%cʔ)Fjjm(Tb,]Ԙ3gkJKtqiHwnv)"D""&RH!,"b"""&RH!,"b"""&RH!,"b"""&RHѸqclْznnnbŊѢEbsXQKݻ7Y}N֭ DnBX\JNz___ڷoGǼh׮ U:yxxйsg|}}MJ(i???eIIIDDDTȭS[nvS E&V%rkzERR`;g˖%PdIΝ;ƍiҤUF (`.Q52"[nvufv =z\MF< 3 qr aqŋR AAAfbbbb.Ά ֭BXуf͚]-[]F 64q, a)EDL1BXDD aq:׮]c͚5 63gږ_tN:1g] aq:[laٳ'ca`X֒%K|rn'tZhY2,/T˗/w{Fbb"\HRSmL83gB5"yGW̉Sqڵklܸ+W!C8uo6';vL2ԫW>5kкuk֭[Olh$,.aƍ|ڵˮڵ++V^zL2k֬a֭ `qJ aq ZpVĵk?(Y$ԨQTȭQ(\^^^-Z#F0m4Ν;G׮] 0BSpsv})X _5ݺucƌPȭQKV ,`ȑ*T ]┒sJJ ׯ_gxzzҽ{wϟ=ϰPEqf aqJ;v`Ϟ=$&&vfo$$$`j`r'w*u֐<SbEf͚EBB}&M"::aÆe>rkժU^-4\G*Uh۶- /p=voON\Wp V777ʖ-Kų|޵kXv-ÇgڴiװaC^ ۷/ٓ7piONǎ&22Ν;Ӷm[,YEܹ3aaa|vu:u'|֭[3uTVZElll)%?~vexf}j*,Y›o˹{yW9t>'&&oUW_Qre>#ON2e7o̟?;wȪoH^PKسg igG.3)))L6ҥKϨQHMMe޼yL4{ mRreԩTZ:uMXX'NԷN><7n\-һ\fO.\@DDDǎ;@"Epw-m@ei0>}ߺ.]ХKvmM"J!,yO?gϞ+W.u i .lٲ,|)n93~xk,X@^xM$<I͚5iԨm~0ԷNBXOJhܸ1`׮]̞=;G2+_<~~~L6sry._̮]O춓rڟo;mm<1{lfΜc&My7Mݺu0`'OfԩL:~G$%%zر%Kb۷o`׮]ԩS777~7vINkߺ… Ӽys\b׷N$)%-X 2жl‹/Gn֬Y4mڔիW3~xFE`` ݻw6.WC FT%r{4!.gϞX,FXXX\BX\FΝv>}C5"C!,.`kAA*ۣArrrөS'*[Ҷm[|}}3},%%|H(ťxyyѵkW<==3UF, =e˖U]!ݺu3 .]S3P^='qbL2]ÇSL.޽{{f"NN#aqXÆ Ve9t*T0 ^xK9aqi"91BXDD a)EDLڵky7pW\᭷bÆ &W'rԾ6oL|||Dzky~WVi"B!,N-뮻x饗rtׯu\N)e('/_Nlll.T#tŜ8Ǐrl%%%w^~Wʖ-K֭my$ }ݶeŋW_ͻbErF4 n<5-!!+QH}&J4ʔ)ba׮]dk m@jj*xzz{n֭[˗v? ;Di*Tum6.\H֭IIIa߾}|4mڔŋp y^~^^^<ӧOs*VHBLx"Tڷo7۷ogp}C='fO2z&M͛z*e˖M6BTTϧC `q1'X,9^xA=!1BXDD a)EDL1BXDD aq*'5 a3l۶3g77^fprsg֬Yӧ9{,Ŋs9iKWfͼ(ST K֭#GW8i$,yάٳ 6?PHZnMHH111oo :ehѢgnݺ<#:Ο?ϒ%KN:RbE ,H42U~(z7K,aܹ >k۩R kf\x^FͦMTʕ`4i҄x'N_SbEӎ4!N#qIMMe͚5tܙEK0 ͛73`BCCx LJube˖B xxxPF Ν;XGNH"S\9Zhw/Z4]k#|2&Mmn`0XHҤ=vx ,Ȍ3_K$(ũ8#K/}mNEDD0|6nȖ-[hܸ1-[Tw ={ds=ڵ㮻bÆ lݺ5O%rc88:.UެYM6q%9vVr;i n,99NÆ =z4AAA8q"_CaORR.]"999OqkѢիYz5`4h)))=z СCe*Tbp۲u?KչvaΜmjo$FVb˖-vFIR2]̙3sɒ%yꩧr gtЁի}vHxnݚ￟YfضӢE bbbعsmYj ￷-T{_ʕ+l۶ 777֭KhhhH\(Q1BXDD a)EDL1BXDD a)EDL169+8$222գGFEz.% ^4Ţ4 H!,"b"""&RH!,"b"""&RH!,"b"""&RH!,"b"""&RH!,"b"""&RH!,"b"""&R;r {}m߾=% 0 U"EG@@ϟϳ}LtttO>w.\8*WiӦ#~8}t+!!> W%K!,w װa8zhlK\BXnnַ]hҤ >>>ԨQ[ڭi&4i/%J`СhUti,+mb֬Yennn|W)RŽ;3f %Jĉk׎E}vN8An ח sNv)S O]vRF 6mڔG[r!#228pm;Fttk.J*q)0 3 ,h\҈7"## ___4^'}>}h޼TSNܹs6… aF  ۷o7u>ѢE #::8tQtinݺaFɒ% 2^yɓƁʕ+^^j IDAT^%C aqiChѢvڵ˰X,SO=e˗7nθq 2eC 0?n~6 È5իg6 x غukժe|駶k~nӦc$''ۖ_C4!wիݻT^n'xUV9#(S ݻw>#&&9sЧO\X1*Vh<**aÆ/лwo"##IJJ=^ti(PmYhh( ~>\ arJ⮻̙3ȾҌ=&O իMaX2]~iڴiiӦ =zHwviSR%s._LF'**3gdrll,e˖>%(?M>}Y&,X˗/9u.]GȾ=z4уA=6M$''ۖmٲcǎ1`C711W~رcIL;BReر={{ҿHbĉ3gfСjՊ]:#JuTZ ׯoX"E|g}ơCX~=v `ܹ\xE?r8ƍk(5X;ƠAx衇mj̜9Ө\iTTvCz/6Wnxyyeʔ1^z%#111G84&M2> cbbƼy:uƳ>k[7 *dK.5̙cO?b <5>S# (TѧO#&&v;B\b!22ݻ]Jy̙CѢElC 믿Fnv"w*0/)VX0@JJ )))y a\?бcG(XrEHLLd˖-4l0S9\燷7ժUc͚5w}y8 .l ƍ$i$,ԩ5Np™,C#a)EDL1BXDD a)EDL1BXDD a9qVz7T^ ͛7' Je޽{3wlܹsq6:tY,.C!,.e˖6LJJ""""*} aq: YfXQK >I>}pw:0O?Q^|Ji$,.bDR[ U:̦$<==ׯztse{%$$ĤDnF郇+%)%EDD XO]߿MG˪Y&vbpʕ+gvI"9>}Pvm./}K_寮]FժU+DƑ#G([݇t"رc.2K*gňB gv"*O KSSH!,"b"""&RK+X f͢[n_dI˜9s(VXxzzҬY3}]zv+T#ϳ\V{+n#js^~eԩ@JJ C4:u/~?>v?f͢hѢv/^ٳm?/X___ .dΜ9X,B'F7Qn]q ,Ⱦ}رc)R/_ε( :SxqRRR8q7nd͚5$'';\KZvڱarus 7䩧"%% d;RL }޽{0XorI铫O߾}YxCk,]l޼#G:\aۗ~-Wރ>Ȕ)S([,>={dX.]0qD-p-.]o߾,Xjʌ7;v̵Q0 =ʉ'8z(͚5x♮[vm.]slvt?ŋYrYn.G^_NA^{nlbŊK>| &pgͼK}ݼk ԒJ%Lٷd'ɋ/H3<޽{wfϞMڵ8Kh޼9F?Q=w}7-[y9mҦM9s&[n#,,:u0zh|IUƙ3g1cӓ вeKxڵիsqqq,_+WfZO>}޽Çg:uZ*^^^=ziӦqQ۔Hr4h*TL64lؐ=zPtifϞO?૯t%::uѾ}{ڶm˲e˲%؅qaKjٱ>|u[n$&&KHIl۶'OҬY3V.]3ϰ{n۟Fqׯg۶mL8u帞#G裏O׮]4h > ꫯҶm[iݺ5SL駟ݝ &Pti4h3pqƌ9/p~Wx 7ni={a5.]dz,^|E|}}>|8#G$00aÆ٭EZѣ)PZyZhAvx뭷۷/'O^dɒ/_xoٵk5rzOPjU9ՒݱOlٓ+Mvah"3 ٓ fX>#RRRhڴm/EaӦM ޘ1coXt)G%!!___ .L߾}0 ϟ9y$ӦMÃ۳a|Im{xxO0|Yz5xyyeyԭ[??3˖nnnl۶ .pvޝWk׮xb.\cǘ8q"^^^t9m(P~'ͥK>}:Ν;scz9[#lڴ稖[1#ȦMEDFFry*WLrr2;{!sαuVZlɂ '44 6V=isCڵk5 Ο?Ojj*uÕ+W(_vTPqǏW^jhժc՜6SbEڵkGIJJs;{3}{ߟSfxL2?uIҥKvfWKN8IMMeɒ% >nݺ1uԛ[t)M4C̝;&M0n8)))Oi ٴz(;&&vٍ}@ʖ-KVXvm-Z#FҥKIIInݺ>ŋY'Vg~2+vS8uTjIj_z4d~Ο?OXXӡU=ݻi۶-ժUԩSv&&&ty@.\3;Ϗ'΍ vc<^ۛw}+W0j(6nܘ(8M@@@hdž fٳg9z(>>>TR%}TV ƓW؊sP;d.]=C4˖-`3&QN%$kݺ]্}n_===F.\_~nݴ"11ƍA…ᡇgϞvj{$%%1zhiKJ*/^uٍ⳻СbŊئoncHHHo߾t҅|}} a̜9{L%xG8rk֬qeW#"C!lŋhwFڵk㯿bǎLZ ,a[QQQ_\x=9+ԪU ooo||| W_ӓm۶*W XGpwwwV @4 RxqFÇmARzu*U'DFFbXٳ'sa…=///UV%66I&q3|p[8,T74m___6l<TZӧE{aԨQ[ƍ۽~:Ã~1{l,Xoطo&McTPwww ,Hhh(gΜ^ ;Rˍ%c ~Zlyߎ$e趼pBzAv̪?#e o]t̙3P6mZlf-?a;Ft҅URpaf|~/ PbE۲ӧSlY6mʗ_~I޽)P 3g$>>u2vXs;f"Ct ???Ky__y111vC~ׯmڴܹs̝;ooo ڵkmi Gdɒ={+Wzj àvڌ?>v!a.](Z(ǏgٶӔ(QN:QfM+FRR6l￷0XcY-i/_nwpvdulz?W^yRJ1c 6oޜ{ErWTT 4`ѢEvw3i$eO>$M6u>>Ã~SڵkפIL-[Nhh(nnnDEE_~I^ `  ܹv{ՁrYF!C8rC]%y#???y\6OFѲeK.^իٹs]O50h֬j΍0amԐ͛9|0'O^gwDO5W n'<< FM||<dŊDDDyl dĈʵkx?ۿ z ɓԨu>|8騜tׯvbL:5TSO5VF ^}U.]J޽>}:v9kaz[[oŒ%Kk8۷e˖qE}]6m3?uhh ff׮]oߞuOi߾=ϟTV'((0>Cqߘ!Kf͚X"m`ѢE<Ӭ]֡ƁꩦjSb0tP~~Wٺu+˖-|j_8~N"E2Lӥ6Ppa5k7nf͚G}֭[:(QIIIiMV9fWo߾?~TwN۶mnʕIII awww ԩS۞>}:G[nvZlrHj,=~J*eݥYf <|N7J;K'}+&O>{aر,Z(4Í7on9r̒%66(;ƍG.]2=ݝ{'ڽgˊ+쳣/xb,YBiժgͬ^'Of\TH=a˵kײ3CziS76{Aɘ1c\2K.`XhԨ>>ԪUq؀u%^(P!C~~~jՊrمp=xxwl#e˖osСLMn+0>}C-j,^ *^~e ';vcͤ?l?6m:uPBt޽{ő#G8x`]p ڵkGDD۷|l۶?6bx7m٠A^ʀU?0.]paƎK۶m9x >ԭ[v^`` ?0W$$$PlYطo'N|TT ^FB% \rӪU+Znmn͙5k^^^R~}vÇmV]{CXXmrJΝ XM}W|rJΝ^:MSN75LDʕnݺZ*G:EGGSL1jw;ڝ$wq=St'T^Kիh"VXA?~ƞj}ڵkN3 qɞjwksH8Գg2eʔ|節w?˗T۷oKT^ED\AVs.7!"r'QH!,"b"<;"""rz!v;NQ9a)EDL1;(۵DD$O?DwĐIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1669625829.0 objgraph-3.6.2/docs/generator-sample.txt0000664000175000017500000000273114341073745016121 0ustar00mgmgStack frames and generators =========================== Let's define a custom class >>> class Canary(object): ... pass Suppose we've a generator that uses it >>> def count_to_three(): ... tweety = Canary() ... yield 1 ... yield 2 ... yield 3 and we make it active >>> it = count_to_three() >>> next(it) 1 Now we can see that our Canary object is alive in memory >>> import objgraph >>> objgraph.count('Canary') 1 and we can see what holds it in memory >>> objgraph.show_backrefs(objgraph.by_type('Canary'), ... max_depth=7, ... filename='canary.png') # doctest: +NODES_VARY Graph written to ....dot (15 nodes) Image generated as canary.png .. figure:: canary.png :alt: [graph of objects from which the canary is reachable] :scale: 50% Or we can examine just one of the reference chains leading straight to a module. >>> objgraph.show_chain( ... objgraph.find_backref_chain(objgraph.by_type('Canary')[0], ... objgraph.is_proper_module), ... filename='canary-chain.png') # doctest: +NODES_VARY Graph written to ....dot (11 nodes) Image generated as canary-chain.png .. figure:: canary-chain.png :alt: [chain of objects from a module to the canary] :scale: 50% To a first approximation, modules are garbage-collection roots, which makes the latter technique most useful. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/highlight.png0000664000175000017500000010371214701712343014563 0ustar00mgmgPNG  IHDRu ribKGD IDATxwXl-e^2De "QTe{-nEV{2ŽA@@%"{o?ڴpދɓZ~$izB`Xxwv +/^A>]GCC,Ѐ~@1''Jтॷs)p+/^| W _N(.x_t߬c2ru=XSesr"tjۖ Z_R 9SvA"[?lgמ?ۻg]oOZ&՝i 6 Y^"Y%7swY); ֱAk/'|}⳪S*5Z/@>R+HSZ&;6N87wBKV?6O Ϭ{9] l銅?Bj]r%jى i冣IW 6]*ߕ` Be7V'&bXwN&I@;]D!PP5! |\O%&__MխoG_Jl|o򨁮=Y,fA 2Lj$e6=: W-Q]vs/mF<_8KWMTuO} t@CեsL+ɖ-͙ruq]LRoG,꒕0 L}B+GO:e+[(f߈lg_>n>>Zeݵ׎}_O00܅I${Mr:z5rV!Lb}l`-]~ASk$eb+R7 vٛ?-,c_륷& `O# \@x+/^| h"_gvv,ڿ]_C'KZyz91\__b.>([SI ,iՒrmtyˍTw6vMhŪ#M t;~-Jy %FcEJZ13$DV2.0Bol&.ݤk ܗE4g۹C>Ղ`-X, ]$j,@p"k{N3TJ+~4a[T<=ڶKV"(f_?>pM9 v),!j+Ad2z |`͙BN"^[aܛHG͵*w8m6ꒉ~-+YU2z_ⴖl;wH8 zcD iML628BşۻDv}ynplf/˻nS.Q|ԘWI)K[9>p[@"nS~yb$ j+t-QP^baCD95}yƼ1'՝(]QtP"|&;eG<;Z\M>igc[f|Uw"X@ zpyo8Ya\o`x;1_Uqt:yh캗}#$1jzIF],ݪ9IJZ.{˛E "4~ƺw{VdZidK%8(ɸ`ϮeU_^zi |!ttCo5{<9UC@-G-$]Q`u6$|4֬ _!QJgHdW%Wӝ7V&asZW3. t;l17V3|^s% o BhIU;~Pk%!Ke'J(jw>gWy6f=B(.U 2*G ZQ7\Ba>1lTb/7XaCVI).ZxUf" ]X-MǨf' [aRgV՛ђl;BL")︓kF[{ت}$rB/wx:nӞQ)b̌WY#bP.[ϥ%7E#4e %B^_`g`D)UMt3̱\V5_U'弦eJsBuk$ByUR w&4scw\w)zs{t7岙oG,p"q,"i=^j8BϔLH9֬Nr*˶#.OqEwl;R!۹O[zPQ.4Q N3cee3;#cB a(Mg3O5/[w- rf٧DACWBRZ.H銂_aSՍ֜) Ե+!aS,"TQI,?gI|e1ǧ5(j+jdȥ]J|3y{x1$mKn1$lv+e;[l;ցw秚|1ٔ ҭB.Xr~>APʳY'4p s6:?.e a%.BR\ h\I֌dKsY$Dmr29UT%YUžJ>uK5$bE}.GV&z:\Cb:9ra6[{3b}3q(IgN&_L"ap諳?cífx_"{ٜ_sO|#i gY.7:\IvA\WU'kGrI^6g!ӵWJ7`SJ2Jyyz~0ᾆ#}{ݵW j]תTKpyz4`X?k؋6Obw5870lЎ ;s*˶sypyˀr%YcwY=ىCfo<-Ve;?qۡԇ&1 <4?ramݿ-ͩӺ2u~{ܝ2eyƱD}hvʈzs粥]BnJT &JVR=T}VV$yzӮRKO4Ůjy0 ]fjV~yoyN+IⴙD2˷Eɪ!4~ƾ'_w}l?,ѵa7KI;<̇Svswöӳj7Ml N(Y]jid[%JԳ4t}V+[øOM49,v=طޣHLze2,z1f݇!sR wU&J{uCep<`XЫA /_\`N3c3;Os`Jӵ$%+bfFoPvϔC.ę:TrYUQj>zH1WSD _ܝR!dl #&__#]F,F;=(i/ލXDZ||r^Vkw*B`I5Qݿ n0v+LG_gF>:hw]b_GK9 O_&.V:sv~9=UIӀ#2@M@F=3SEt@Wr "[7ޅ+%>Mz[#w#|p OEӌsS޼ o>f]h?+/^| j.#vƻfk+4{7WDN|iUt\޽ Ϟ(R ́u'`ҥˆ 6lpճO>={4 ` 1cFӳqƑڹsN8W|ҥKcǎUSSkt:Bb=xݻwmP  o߾;wnӳ#FHZ|kk7h4  /^TQQ5j/677' `2HKk; _`07nܘ;w>3fL F|||>}n޼ɣvd/@P>>::ח4m۶mۖw-<-_IIIN[XXUvm^D[n͙3G!$""r娨SN]K;pT^^΋Vu-fllaÆM6]K{G7Ç ƻP(SSS--Ǐ]Ѓk 11/>{x" _>xڪ,,,ϟbŊkn/|hUJ_nޅ7>k%3g\vx".ZյI&}9!!ABBZ~O6]TT{n V/֪tcǎ&&&]P#o|kU& FeddBBB:c!/٪MHs΅]W3gLHH»`'%%GB o߾RTaYYY``P٭g߾},B ࡔggΝ;]۷onbXnnnxwԩHk&p|xwʔ),L&h4={>{LJJ :t(B 0/࡚WsaaaDD˗/o@8}tLLիWEh@b d2 *z=[[[KKK cyhś6m*++ûxkFh4HUc&w!Puu5kN8!:~8oC 'HUV-] Z B ࡚z'qEDDlll:WIG$;ի]|>>!!!gϞ}-Bh̙NNNvmǦLc  7/_ṯc/]djjzuТE+]Ae#H;vŻA3tУGRԴ42lhhcmcҤIfffx3ꞎ߾}͛7pM@OODFF] _?ڵk;ux[n Tx'Z'O5k;w:ҍڲe˃bbb.7/it:!`0؍h4Z`` L;vzJJ jwC߾};7 _@ӰՉľ|JNNR/^TWWWUUX,###PNBiii^*..Ƴzt؛UC&|y˗GFFݻ{yfЬYʖ/_y9!daaw1111|7GĻ|@vw!<kΝԳgOk7M];\ E"ݯ\/k7xn٪u{ _9QQ5k֜?Z ~?ٳg. _II x{{wn/hۆ-[VZZzm ȗٳg/^lrwmK.'OwZ 򥃺ygϾ~VQ]uۊ{BB‹/.O _:K:tL&Rn[166>rޅDBR_z7uԺ]uB>>>>| RVV:usss_~{ȇR(ѣG?~#G1cӧOsȑ]v۷oPf͚cZx_GZ6ɓu]pA]]?~x{JJJ^xwa˗/ߺuKMMgax/zva0>>>-RUU;w.źw֭['Mԩ۷B(;;uaʕ7oŻ# ;lʕu'fff"deeB""]?̰X*vѣG=ޞ'!`8 IDATOu3gδ{@n+//G?a{j^vڣG߿nnn/\u=.\$BÇc]pa~~. _7u[wL%%%o޼yo߾a'hcRbldN{=MMM;;s]oAtP,Jh4Nk[nEE FY`3vaffFӱφX,C}`XxYl.\ŋ]i~ׯ߿СCݺu7Odd$}n:TYYwޜ9s`|Ԝ:u޽{\\\rrrBCC]vիWO .\|O666ϟǻ|Oa޼y>>>ؽwp6uvy2 8ҥˈ#nܸw!mM>H/oĉ⾾xv~*og͚w!m + k~aÆ͛7w6`666IIIxf`4!+++**w{L&[n3fصk޵8C///!SLa7i`4ή$""򅟾}֫W7o :Z쿀ž?w^>344ׯ_{_@}t: ÇٓǾP/_y=b.&M*..~ ޅ 4hӧO.۷AN:w!m_=zo%ܹ>>E277WSSw޵th_~566 4h޵V{8DpppTTTLL ޅttFFFzzz _` 455e<hƍ~~~xZp ׯ_===. cFFv_:عs)S  Ѐ444. _qFjj-[.A &Lp i-8h4}}Ç_pZBBBڳgOki9._yf L2%))=SSSs̙8VZF^^^OO۷ok̙?~HMMy];DEE]?|ib2n՝>}u233u|i.** #&&&==}xZ̬ !D _ڧh4Nz0~O>]ȿ|iUhT*ëWƥ*bFFFBw OɍN'NNNW\s=LMMӉDٳo߾M&_h%ccx7/ϟ? FD"qѢE.\ ](]?Z; ֭;u@=M! /PZZZ#۷z@PRRRUU|PZZ{?@ ;vlŊڄׯ_@C)))4@ K.͚5 @׏GPRR"H.퉎NJJ Uȗbeff=|r@[-(((..ƻfc5 &NNN*-Ǐ6ސ9|m4ɠK)j]H2V%..bnnΟ5|UcRRq""Ɵյ@hjjfff]EsA L455w0Ѐ|F/ Za@Te?9|o砪xxKMM !$,]GTg]<>aF.~6QؼswGnJQ!&hTTTBx,o*='2HIy{Ni9|^.!s/X̃bQPP ɐ/#QI9a4 w}|Q?)&UD %_O} vERFOhqWx'uE%d 3bb/JQ3R{yXX;fc?l~q旴O[Uz/*!gٟV ,&#λ:s`!iGdddk$oE)c縝L Sz 7JLK&bPT[Y]ݕx3HKK $_vK !۹6$ !Ġհ甐Q!%jBbV[Y-LB3?|'--5|p|$D$λIA=DIYUPy__'HRD!T]EťB1🴴tEEU4 䋠V6Lrjb)ؔ\Zmf1&, bdqCהj+ ~|}xFZZZXο@ࣶ<4' ?."D)<hsm}|b奆XN.qLJ.8 I~LJ^Z6>Zӂ{s_NzuҕA:lyk9ӣ!'&c/d2JȘ3S)Uﯳ ~??#1j1+hG@e5eo pՊI5Zqbz=:PY$4-mR[Y)0bO)zV$1a~}QCZYsO lf2˻Qw<*&ܗ»͊@QI9EM93<=g CE&Z]=jC:Rgl.JH$rsjNyObEMn& R\sd솺E١n<2%jk m*.X/H{}frݺIt@`Ed򾇧}j95ze!Tswgxi+k1̸?"4z%8+''Jeֵ)`KFT0B6Sx1ɺTf'?-NjS!X,fFT6EM'2Eb/ :,Vf50/5,LY_!m%eUn&BAM~{DIzc9]!.(ҳ[}U0nx$ذ$.ۮʹabrVe^ˍFe4;mZ{^9* 4[ˏ(ʼn!{t-&h..\Gѩ5,]b^]S˳;"w9WHM&6Nb0,ׯ؇wwGM|{pAZS1Kx /UV[Y$)ƞ">V3OX/@ V>@\q)EZ% B(#F\6C߻p|C%eULPZ_meQUI֏Ȁg?9S.u$ UoFKV˩*.` DRWC^]D}}zJȹO XV<_E#Wa*"*efܺr!$"*a`P\ZYŔ#tZm Z}l|ŤS4BY?,bYLHqieinu5簿}@(3f?">?1eF +2"ؗߦf:y&oΤ4 =Hπ {&wSI\׊SUGRNn嘍/ťî/Jx@t|Wo 1pf{Y8u2xAS,@RV4;!$I紮8Je6EVUw(@v!~ť;),"اf"u^a(8*I~uE] 7:HzTnrL"IDBFEBFEMhwsw% A|bQq%.ToEJjrTUǩ*ǧ YU=Z/R -G߸5Mpܳq2ep@@侮!Je1US`<"&s#e!YҰ ӣа ? F,֯#WQ Vflȕf2uwb6WVU{X,5CI%Y߸o{3j5d1ى!od%j9,/ϧ :ӽG}$!W&gDc) Y.7:My>vLޜua 3r:)WݪZ㛳U!KUfTD)8,7#Y^ks 7ov? JOXa7]u!ݣ#97*.Ԕ}}~a)״;9l 3f=KهpJX/M KKkD I;ˬ؍I͆]f /dM2n&Jf'e%4 ް59֛i]F#WJ} 3hDȒ_{B\Ww]u.0l"9}M)>sI~O"kG)՟w-)ZG5;X!=*HdlLbs*h渙+Ye{b*h)kG1ŒCOA~?QS8eU*.ab9E> hU]+'p,B)5eOV$Gm>a,D]d/eJx}w-}o>)5-¿c1 PF=ZmEfܓh:<{~ZBFv+ť?MT奆^=jlgJeq蕅VΚȕ+򾇳/]Srw1iN)+HSDqL#2IRk"JOxyϪWܰ LQå$NްZUqt .mpj@@@VU}k}%_ ﴟ|QVUGVU7/OPUײ$/I!7dd?N Z[QٛZUo'3'P9a\\BV5SЗR?Z0[>sR7S1cD·*"ܨT*3Juss÷E8ikkc?kiizh1c 2L&g͚w-4 pssh4Zh~c˅gffs/_|o+а@{rG z5vU:Lkaxj۶m|[h _ ?փ^| W _BP>}dɒ .`Soܸoa` =qD|||݉,@ p_0(( _իWN{iӸ,U[[w/GVV_9tPvv6/5]SPByFFF-B{޽iiiǏԴxӧOBFBxBBB _ڛ7o=b)NNN߷8}4BhX<}.@p@4;;Q($555QQQٳgXM|trrr/_~ق'''k;AG$o%--|y&Wa4 EwŊ222ׯ_ǻ"8|8t: !DR]&**rnݺ%$$> |8111ZPtt4B(!!B ^z޽ʪ*ejjF%''?x𠠠EDDDlܸ!77c.\Z|yII… G9aаaÌ IDAT===%$$:bnnS=8q"B-dddΜ97@x+/^| V|+V9rZBW] :~8{lrrrZZٰVXW];;;O@͛L#i)  H2ByٲeΞ=:pUMM B3gδLSN"†~z󄆆nڴ իW OOUV)++c/ݻw_h?|ڿAA߿?uV^^˗lٲk.v^ &`{ԢŜ.mۦw!?B G^| W _@x+pn$$$l۶ *x(!!aȐ!xWKYXXsu,׽{nآw  K˭YRbbbV/ a_cݧ"4>/Ɨ> !"4G@@ BEh :/B_Ё|ЀϧЁ|p|Ѐ# t _"4`/@@ BEh@@ 8>BEh:/B_Ё|Ѐ t _N'Bh.Aa`0 ./B_Ё|Ѐ t _"4`_ח/_N<~TVVqFDvqq@"^JI$"cǎ!X,J=t5  .;;;"Ht:JR BPT0ydkd2N'H#Fڵ+K _CtY,ٳ_EIKK5111\J _ɓ"dggg)))J _ݸqh3gU"褥GU7bTTTcI4OeQ&޵R?8>Yoλ>RUla8bIs9'AkRh=:\$:zI䷗R_Ӿ!s/*hHnf 4[Ƀbh-~3DQ/Bܔz/)E-QIS\J-n:l|F{,ܽyR/'"&dfQ?SS]x=U]gώvR;~ |_p7tN/eҐө5e gIz^6K~Gd+o*̈y{Ԥ=qFv+S]a/7!.M'ziAqmu@੯Nyic"6u7wjd+"IfIѯ0Puu, mJj]YL{N9,-&`漛b~{y#ӎV$ y]XN|(+r%Y LAɫ~(J(eUw%9< 3"Kʩz#u䖔槀ɡDIY5Pynj9 D)%-"*j8 Bg} @3@qiKoJ| ؂M0}N¦Tj+WfJ 3XבRY$nD;婚\ZMy;= _pQ[QXSSX,D֋|?G$~ԚWԔ֔Eb`e2VRNMgҜחWdW̌{zu5ͅ> :]-&~t_p0g;A_-:xG3gGny~J9DbLD'Gn .=xZD ;TemEΠi'%dDD%^.˕aJρl)V?NX,j-X.C< ?~O ,8>8.݀| W _Am٢?Z{w{FTm1hW$J^⻶G&;vB :㮍,5ybr@ZqeA&@R6g{-*!khLo&IzkXeҜG[>c5go IAљ3(2iwNhڊB)%-tfb֕Ĥq[t}CZl 9 @X9B/ͧVrY8iwl^#8 &0iw5-NN 9׶Kj+q`ҩ;Ͻp_‹M\o#Y,F<'r ZmeK] K+!blRö0E>~cy[Z]z_ⴖl;[wѢ~UQA3v00qi%jHd1K2EFv$_wj#6Vlۥ<9RU9R7Sa2/iZU5fk95]Q!D_{F{l,AXm*ZVkubEAč"{Nd/el!k$xޯ"Ǎg~eӆO%]~vjv7i F!$,&ehu v~1ސ4M=9Vz1v86zƺˏ-R;qXn K<;6'.<;v7f!,HB_(]ZYy%R0”'m[o^9TS*l0[)}BB![B{"}i7vU3Z再p'?̘R,3?9Dq6E}w} Cʳc+rݨȉy!d~LMSTiޱ1<'iXui*La"tZfYXM0clA1I,\0$^SM盐0Diǒxx?Nsxm7sN 1j[w)ő@ͣS<ߣ?yᯩ\w DtY+G6f>꜃]-kSMYɋ;)׶Wijත´|0KhFjυiaVfNB·O PU۞qWD^ږda1݉+EeZ|X,#UZYJi.U/wE*qY;,{RaGGoP]$Dnk~^ԛrot&ȯ2/$DѶv^2\;˭$c1 n9<֮lq9u9[JR~:K=>>Xstm=F;ŸMPY+כU4$d?xgsǢtZGMlw\?D" g=PqL Ǔ"BeON"KKWߚ̧x7wcqnܥ+2j>?l,t狘zʲ>uWȨu:?!eyEZ밯3AuDBXG : OV{YK}N6ĥO_q;E÷Ns|'YLב9~zԄ37߂/}ϧI$5ɓ>?w[4UZߊG2-<:_XLZyqU3gO*@2 9zPc0eɜg.^;4j!$82/)70YJʼn*hm.H^⎚$őfoH$vBRmO1sڦ7i%B(ҷQeOt'xz~UCu!ޒc)8!T|$Da^[.Hm2v*?) 9`NIB´sOg*kO0v޽goֱ  B}~vD%yc9"GE4)]Sο\E@]>/{y[z}.7?b2XLh `0 mԵGިMRH@B*BO쭢c3}U ~BrF M% 8>^ _x|॓ϏbccsUJlڴښB@'45r|H"_ 6`hrqq p^ _x|^ _x|^ _x|^ _x|^ _x|^ _x|^ _x|^ _x!X,k[dIbb"eee(RDD$..NMMaBBB\\\/Bt+++ׯsNfmnn/777!@ eʕ\=¿խ;dɒ/ |k$D2lggNHIt _svv/!/|krrrᅄ-ZDTIt swwg0 eٲ@7A糯yA1 www _󅅅bbbs%$ E,_N#,YBRn|!:Ft9tvvvFN>r.O _z4M:so7$$w0<==lsO<#uv9/N6n8`K9::NGp|$08\;^ _x|4͛˖-;z(6Ϗ5~or>w;Ϡ ó4z _̛7/""sl||OK _\OٹsgII w/|M),,tuu533;x`hhhUUo޼277ijj"n|S_SRRا`W\8eʔ#~7sssʼn _Ԃ ݻ~I^z!**:a3%//ZLLLYYy徾+VPRR"6~~~vvvf2D@7A?~xrrrgΜx">ֆb?M {f6ԩSϟ?G~ԝx/|$11!܌JHH@h4ɓ'B!ׯCBB***, _ELL̷~z3"##׬Y\t)Bh?~1cƒ%KT*UEE!'O%XsN܀o //@ //@h b c_UUU/_vww_x |묬,---av/ǿ@ x _?8`0{t<Pd(ڵݻwΝkhh8cƌ#}}}mll޿0iҤ"I&;kؾQ@hjcWSNlܸ͛7vr効;wLMM뫥իW'%%a[ؾ(Z`0:w#Fܹd?> `ڵŋHKK1qM!r9ܹs}.AAC_ _Bݻ}\4 _@pE_v544  IDAT:tйs*++SRR~w= v^lq{ |`X4lZrvխٸqckkmllg̘Aӱ~L&`<{ !`0X,V\\B())qi  /\222044l7Odd?o݈7nx{{رCEES\\ٳzzz>>>k֬Fm۶(<<!tRmmǏ#=znݺ'OR(777}/D/$xEHǏ;::]ttt^Lt! ϟߺukMM хt 0|^X,Ekk+3>iiiQ@ `Z[[EDD[KOO'0A DWVA9>|饁D" @@p!@G/οG/p| GtECCqÞ _0uuuDW-/: /W[[@C a/ UTTd IeeL&n|@TUU)))]EwA H*++ _$/@RYY _b1B QQQA _!EEEd2YCCB QTT!(w HB \|NsNOKKcחa򴴴H,@.\bbb#F]~ #[d2yΜ9.CJCCCII!х rrr[L&}dXG&|_bbb-*0%eff /BHXXELLQ233ɵH۷uA9 IAAaԩDfjjJt=\]]9DDDk']YYه&L@t!=lmm/[[[y|n $dnnNt!=H$iذa軔YYY >DYr%D""0В`bbjmm]l倁bRSS-,,. _ʕ+Bcƌ!0233kjj,--.ǾDx!H!!!D:immʣdddpZ?X^Jt9%Kph"'''֏Nx7 t2/IY[38kd2cbboߎ&_ДQ]]=m4 ZTTׇ|EGGO6MHH Th'O̜9Bz IΝKt!u떥*х*H"kd޽{ɉBz4ʳ;4p/w6 oi}m1:|J3m[* \bbbyy@ (UInJ,&D|?w]N%ˏf 쿻>b"""@ 4Q 1SJ ){-IH^sJ)s |!иŻ̶3uy)ϊwpVZ+G%\TVe^ҝ3^ۦsaX%}IaZ8cIOOtvv&>|!4/ٛ[??:38JF=:dæeG ,]}sd!Sn:woɜOγʉ ̌67GVǢ'#FĞ _4~nme9~,&X ulk-,*eh̬ g\DnT՟dID\f:eD 95%l$2YJiE!D pv@V&".ϕ,M$'_4bS?7kY,QO" %XLΕ5NJPӮzuhSMYks]yv\JȶTUU]H?|!s+b'J*D9Gd}M1W5Ք5Ֆ'n01rq9u)_הf>Ѓ#No6uhkI qGs4M3N+SL"~_ZJȶ#!nFYL+/ RbILjI+k[/3#"BV"1鷇;Lnҟ9E*-,*ޑr9Vճ%dܹsE $?!!!...XN}}ڵk}_~R*ːbV\98A?srr<==.@/LLL.@>~xͯB |_LLl 1 ??UVIJJ]K|UqQmitG}ߐmE֩{kx +..^v-х~˲X̨SMrπXb!V̨VDeq)Z}UbЖ6M+,}HgcϥwOݚwem0IΜ7~k!!1)%F[ˋꪤFLkԡ@yV}_Dž{ReTxcV[6N81w\mmm gbhm$o,n3I*5c&d.E5?Ao]z soޑ.יZ/Ib1rYL{qKQ-\贆Qg/Սc)WR`W⢽G'\ڔz}Ge[jb.iwbj㶶୩;H_ٰaQ৯/Fbcf}WQ#f`'epVpٻʈxOѢrJ,f}Gbn0Z>,%QF@H4>[!!b.>gq9'꫕FYh["R_OK2~/ǻyNw^[m%!q!Fk'("LFa?kI)b!dj8߄?GwcIN;Mt+DXY+GQDōgoʨkۭՃ?FY:/nb$ߦkCOY-*!aDQVV3R_"͵!1]JQ Kh[|x<;6־G_q߾,,q 9 $2E|a&oGӽJ1vV+[B~R>^qZZZ?z||d0]gۭ,^,Xf4BHLRm[ijf9n:i%בӎXPU~Jf_aZ8YXEm!8{ ϒج8ǧu;ӕ]f~^" ˪˪ 37^;&vcݚzck6ĭ$c1 nuNWf\̉ U789ׯoqI)l]$+ϔk?DkYuN',s"D-Bjtsi_kD`Mxs#ZjBqӹ?DyT$`b^=:jB?2t]mcfmكO uڭ6'´0~rc>x;rBQɋ;a{CՍx"SB3ojT[w 5Ij5m- &VU3ܱ +Wӟ$!wyҷѣg53EF~+Yp9:VPeTyW (u$Dқ)m)E:lnA q~NQ?=o}-,&k}U>NˍRѵv.tPU7wNB_K=cm$!R~rȓQDEdػ:/nvۧ }+&}6vn0P~z={K||_72N?0wBCC.\ka#i~b2p~==;|0 Їב1-]QeTcTEqqqPPtG#ʨRD%b/U՛8kn@/۷OSS͍B Bk/=*WVV_;vBz qEEŕ+W]|`TWWv}9|Ě5k.d@0jkkϜ9yfqq,:9}}o./S5y=J&x"_455,@08$&&",--e+F"iY[[ʗGnݺUJJj_Yf\ϏZM6|ɓ^xaÆD3T=zt !ܹs^^^Ν[yxxgff aeo>|%//h"^z<ːqFN8Z3GGǪyN_GΝ;ӧ&&&D38=~޽{C3\ e4m̙qqq#Fz*VSSS}}7o] aRKLL,""BQQӧO]/zEEEG!"A i222wmlltttll߿sN-x5߂#rrr&N8a„7o$x7o^~~~FFp)nDDDttUߛy;wN81 `s΂ ~A \544DB/2==QFm޼YVVʪc@7mڴ)###,,LRRZ?%%%7oVWW_ti /=z/88XEEZO>}m{{{k$ƶD/ _@{,kʕO<133#W^)((] |hmm7o^FFFll. FDD̙3Z \}})Sjkklocƌ;w?ѵUUULtt4| rrrz˗/.u+%%{,Xrԑ#G߿e _/wINNd2DwRRRm۶w^[[[kGp|aÆC] 177׿s玐S ~tMKKKGGg֭666DX, ݻ7ww\ eٲe?~ܰaÐz<;ǏTUU%kݺuk֬QQQqpp "%&&~w6mѵ58zbZ*$$ѣGX8?֭[pڅ73t:})))D3t+**dee.Akjj/++jg+W$$$];cᢢ3gά!s .\|¥ _@o(**>|f…---D3lٲ{y]#{_, _@<}Dׂϟ?RԧO}=GO\rܹݷ"""ctsmmmxx8KO l2l0ssslOnݺ?~XOOZ ?7nX_;I1|pAtig2Nt! &zj*`3o&^ &HN"wAill3fLqq1S B:uÇ-?~|Z  NNNϞ=kkkN"޽{'X'/^x1e˗/F}ֱ!DPΞ=KHU;k֬q]x¥`UiiMQQ)--URROOIDATS􄄄:)((h 9sP(۷oC d^~ۻ)CC7oU[w466Κ5(..nD3H BBBK.޻w$_kD۸8F͟??;;.'qq~h˖-taa'N[7t:}ҥ=z4 *p|𒗗?^~Bt RRRo {DD'NHt9 hkk_v-11!vy }6 `RBB‘#G9sYYً/ #Oijj7nェk׮ XI 襐 ts~U\\,))ka=`0xt*--MNN^>t%ƍ+V _x|^ _x||9((~Ϟ=ؔϟ?[Gn߾?$$$p^rb$ٳ8Wz K&$$pNٲe O444HHHY1 _)))ϟ?>|ĉmF`m; __STTdMRUUUgϞk׮R///k]||eee>ldd{n"|ŋ?tЩS lNt:%F;pغu222п9A(>ӧOBqqq'ˤfЁ.\PWWW[[bB/Y= #...$33%K`/MڿUUɴi\\\V^Zp:C.%nCCх #/@ //@| _***Ο?yfsk ]u<n׮]o޼1j못l2 x|c0=Z p|L1CVvսq㆕Ixx8B_~),,m߾eǎs̙3gNkkkLL ,lkk{B(66bEGG#={҂8b+W^E5tƍ9;̞ظRQQ1 ĉZZZT*uܸqonhhppp`/m6w/fŜ988TWW9rVRR.] #}wA/A]%8>^ _x|^ _x|>)K666-Hp_x| DFIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1669625829.0 objgraph-3.6.2/docs/highlighting.txt0000664000175000017500000000120614341073745015315 0ustar00mgmgHighlighting ------------ You can highlight some graph nodes. >>> class Node(object): ... def __init__(self, *neighbours): ... self.neighbours = list(neighbours) >>> a = Node() >>> b = Node(a) >>> c = Node(b) >>> d = Node(c) >>> a.neighbours.append(d) >>> import objgraph >>> objgraph.show_backrefs(a, max_depth=15, ... extra_ignore=[id(locals())], ... highlight=lambda x: isinstance(x, Node), ... filename='highlight.png') # doctest: +NODES_VARY Graph written to ....dot (12 nodes) Image generated as highlight.png .. figure:: highlight.png :scale: 50% ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1686898678.0 objgraph-3.6.2/docs/index.txt0000664000175000017500000001343414443003766013764 0ustar00mgmg.. include:: ../README.rst :end-before: .. _history: .. currentmodule:: objgraph Quick start ----------- Try this in a Python shell: >>> x = [] >>> y = [x, [x], dict(x=x)] >>> import objgraph >>> objgraph.show_refs([y], filename='sample-graph.png') Graph written to ....dot (... nodes) Image generated as sample-graph.png (If you've installed ``xdot``, omit the filename argument to get the interactive viewer.) You should see a graph like this: .. figure:: sample-graph.png :alt: [graph of objects reachable from y] If you prefer to handle your own file output, you can provide a file object to the ``output`` parameter of ``show_refs`` and ``show_backrefs`` instead of a filename. The contents of this file will contain the graph source in DOT format. Backreferences -------------- Now try >>> objgraph.show_backrefs([x], filename='sample-backref-graph.png') ... # doctest: +NODES_VARY Graph written to ....dot (8 nodes) Image generated as sample-backref-graph.png and you'll see .. figure:: sample-backref-graph.png :alt: [graph of objects from which y is reachable] :scale: 50% Memory leak example ------------------- The original purpose of :mod:`objgraph` was to help me find memory leaks. The idea was to pick an object in memory that shouldn't be there and then see what references are keeping it alive. To get a quick overview of the objects in memory, use the imaginatively-named :func:`show_most_common_types`: >>> objgraph.show_most_common_types() # doctest: +RANDOM_OUTPUT tuple 5224 function 1329 wrapper_descriptor 967 dict 790 builtin_function_or_method 658 method_descriptor 340 weakref 322 list 168 member_descriptor 167 type 163 But that's looking for a small needle in a large haystack. Can we limit our haystack to objects that were created recently? Perhaps. Let's define a function that "leaks" memory >>> class MyBigFatObject(object): ... pass ... >>> def computate_something(_cache={}): ... _cache[42] = dict(foo=MyBigFatObject(), ... bar=MyBigFatObject()) ... # a very explicit and easy-to-find "leak" but oh well ... x = MyBigFatObject() # this one doesn't leak We take a snapshot of all the objects counts that are alive before we call our function >>> objgraph.show_growth(limit=3) # doctest: +RANDOM_OUTPUT tuple 5228 +5228 function 1330 +1330 wrapper_descriptor 967 +967 and see what changes after we call it >>> computate_something() >>> objgraph.show_growth() # doctest: +RANDOM_OUTPUT MyBigFatObject 2 +2 dict 797 +1 It's easy to see ``MyBigFatObject`` instances that appeared and were not freed. I can pick one of them at random and trace the reference chain back to one of the garbage collector's roots. For simplicity's sake let's assume all of the roots are modules. ``objgraph`` provides a function, :func:`~objgraph.is_proper_module`, to check this. If you've any examples where that isn't true, I'd love to hear about them (although see :ref:`leaking-objects`). >>> import random >>> objgraph.show_chain( ... objgraph.find_backref_chain( ... random.choice(objgraph.by_type('MyBigFatObject')), ... objgraph.is_proper_module), ... filename='chain.png') # doctest: +NODES_VARY Graph written to ...dot (13 nodes) Image generated as chain.png .. figure:: chain.png :alt: [chain of references from a module to a MyBigFatObject instance] :scale: 50% It is perhaps surprising to find :mod:`linecache` at the end of that chain (apparently :mod:`doctest` monkey-patches it), but the important things -- ``computate_something`` and its cache dictionary -- are in there. There are other tools, perhaps better suited for memory leak hunting: `heapy `_, `Dozer `_. .. _leaking-objects: Reference counting bugs ----------------------- Bugs in C-level reference counting may leave objects in memory that do not have any other objects pointing at them. You can find these by calling :func:`get_leaking_objects`, but you'll have to filter out legitimate GC roots from them, and there are a *lot* of those: >>> roots = objgraph.get_leaking_objects() >>> len(roots) # doctest: +RANDOM_OUTPUT 4621 >>> objgraph.show_most_common_types(objects=roots) ... # doctest: +RANDOM_OUTPUT tuple 4333 dict 171 list 74 instancemethod 4 listiterator 2 MemoryError 1 Sub 1 RuntimeError 1 Param 1 Add 1 >>> objgraph.show_refs(roots[:3], refcounts=True, filename='roots.png') ... # doctest: +NODES_VARY Graph written to ...dot (19 nodes) Image generated as roots.png .. figure:: roots.png :alt: [GC roots and potentially leaked objects] :scale: 25% API Documentation ----------------- .. toctree:: :maxdepth: 2 objgraph More examples, that also double as tests ---------------------------------------- .. toctree:: :maxdepth: 2 references extra-info highlighting uncollectable generator-sample chain quoting .. include:: ../README.rst :start-after: .. _history: :end-before: .. _devel: And here's the change log .. toctree:: :maxdepth: 2 CHANGES .. include:: ../README.rst :start-after: .. _devel: For more information, see :ref:`hacking`. .. toctree:: :hidden: HACKING .. Indices and tables .. ------------------ .. .. * :ref:`genindex` .. * :ref:`modindex` .. * :ref:`search` ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/objgraph.txt0000644000175000017500000000322513500440053014427 0ustar00mgmg:mod:`objgraph` =============== .. automodule:: objgraph .. currentmodule:: objgraph Statistics ---------- .. autofunction:: count(typename[, objects]) .. autofunction:: typestats([objects, shortnames=True]) .. autofunction:: most_common_types([limit=10, objects, shortnames=True]) .. autofunction:: show_most_common_types([limit=10, objects, shortnames=True, file=sys.stdout]) .. autofunction:: growth([limit=10, peak_stats={}, shortnames=True, filter=None]) .. autofunction:: show_growth([limit=10, peak_stats={}, shortnames=True, file=sys.stdout, filter=None]) .. autofunction:: get_new_ids([skip_update=False, limit=10, sortby='deltas', shortnames=True, file=sys.stdout]) Locating and Filtering Objects ------------------------------ .. autofunction:: get_leaking_objects([objects]) .. autofunction:: by_type(typename[, objects]) .. autofunction:: at .. autofunction:: at_addrs(address_set) .. autofunction:: is_proper_module(obj) Traversing and Displaying Object Graphs --------------------------------------- .. autofunction:: find_ref_chain(obj, predicate[, max_depth=20, extra_ignore=()]) .. autofunction:: find_backref_chain(obj, predicate[, max_depth=20, extra_ignore=()]) .. autofunction:: show_chain(chain[, ..., highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) .. autofunction:: show_backrefs(objs[, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) .. autofunction:: show_refs(objs[, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True]) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/quoting.txt0000644000175000017500000000065213500440053014322 0ustar00mgmgQuoting unsafe characters ------------------------- Let's make sure our string quoting function can handle *anything*: >>> import objgraph >>> all_the_chars = dict((chr(i), i) for i in range(256)) >>> objgraph.show_refs(all_the_chars, too_many=600, ... filename='all-the-chars.dot') Graph written to all-the-chars.dot (... nodes) Trust me, you do not want to see the resulting image. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/refcounts.png0000664000175000017500000011625214701712343014627 0ustar00mgmgPNG  IHDRgèbKGD IDATxy\Tװ ⚡KiiV|>O}M PS*.|RTQo20 xs=s8{BRB!BaT&@!B!t΄B!RΙB!BTfO/HHH 22!D0jԨrٮԿBQr4laa' aƊG!*GI_!([E3!*Z;gj^^^BTzo&::ӑW!k.c A3gB!BQ HL!B!* !B!D% 3!B!s&B!t΄B!(r*}!JF|/T*ѣܹslڴ!/ .]xb˗/`l[!DpE:gU;#Ge*lRSSuOfdff,wwb9q} Brޮ]SF Ο?_mll0`={^z( ػw/7nܠSN| ##__Bk׮Mn޽;]:vvv̘1Ν;Co/@TTϗ! 1V}￯׺Ç'''LyyyAzz}ѣGܺu={p2WU׶m[VXYHHHYQasV|'ԩSߨT*.\ȝ;w055///L˗/ƍI?_Lonݺ,^RHLL$==w>d֭\pߧ8M''',YBvv6äI\\k֬oF%vy[js%;;[cǎnݺ^4._̎;?~}茥4*\Pзo_bccIKK,fܸqۗ-[:]!D)622:/Hrss믢ӷo_MKFFnܸJBTbkkKrr2ᘘ<vZ4hٞ _~3dLvv6| GA:Q+j_4h'c̜9-[tRbcc/oРA\rBarٿ?={C,^0&L@PP}?^z;v,QQQL>^zq޽;~~~mVgˋ+V0i$Yh...ԨQwww8uTPTl޼x| sGGGf͚YwܹW_}SN1eb14gggHJJ*\=EOSQ~ ]1$''GgUTW_i.3oo";fڵCPHrr2ƍ#>>z .˚ 6 ;;;FѣG6m̙3SSSցs2|pjժdffbmmW~װaC:vȎ;J[!0U# B̙39pQQQdddp~'7o177gsسgiiiXXXض;wdΝEDD0{l񙚚2yd+IMM%((B#hذ!ܻwȡO311رc]̘6mk֬:T!* kF/ҬY3ׯ w^Ǝ /7իoܸ2߽{4(JMV*qٱf͚B=+چe޼y;O^^^xxxh:vYYYܿ+Vk.vڥRl,~VC:bg}OZjٿm۶^’:[._wtk_7ߺuK}fҤIر~ !DEY5ҰaCptt(tEdff_}eeeisQɓw^שSqpp7ޞ0rssڵ@.\ȑ#6laaalڴIg,~Llmm |/*FOW̤Iݻ7ϧ]v~6//賯eթS' O.vdXc5ҿ~wM#\h\/})qZ/_.!|=z}BB %u۟X|9S?c7sLf̘Q !DiH笊S5kĄzaff%mڴ! _8,YBFF|wذ`g֬YDGGsQ222غu+ 1cưqFBBBX`GLUokk +1o߾=ƶ]viKKKܜɓ'alG}ɓ'b͚58;;j*뇃fffԮ]^zɓ's}^z%lllѣZggg3f  kkk gϞ+R(caa&~G6mVVVtЁCq Z)Џ[5BAӦM[f>WQu׬Y3 ԬYkkk4i^/2p@>cܰ$11`ii_~֭[ 777IT*u]ZZZjKBQ)TO  axyy+&wyB˳HMMիDFFraL5ƌCÆ INN U?oС >[[[.]yqww/(/_^`Y׮]y4ذaK.,?yWpppƍlذ,_5LJSvm222HHH`۷Oɓ|8[2':[nU4MGP{Qvm>|sٳKt'~~~t3PDŽ|g|g5 OOO~ܹch+7///"""HOO7v(Zy.]hJEvv6ܺuӧO{n233 ;^>2?s^^=֭[ٳGK~xw;vvv̘1Ν;Co/R:t~O?鵝9Ǐg̘1ϹL4wDjƠw:vˎ; r:o:*I&q)릦2i$lbˬ[qyl2BCC Zӧ&&&>}t{ƍt,--1vFP(Сk]wC>Oxx̚5 ___&N?ә2e _552XlDDD0aM ÛoIbb"eJ|ȿx{{5{&^kPǻ۱O?ܜSȄ 9rdݻ*]픶ͱ*4!33Ҟ={a*ur叻YtRWuIrr!B*1CNNNe:_͜9{a 0Sl|X q8::oOnn.@RRq2d׿,o 9֖{O$SSS&Nfڵ;vLm2~x7oǏ9v6l ==zI~xڵ+Æ ‚]v͈#eϞ=_@\=z`4lؐ;waÆA ^n=z4 4 >>BCy:ׯ?7f޽$$$pi5̟?3gҲeK.]Jll,;wfܸq4nܘd~gͻ[+3M2m4\]]uk׮%&&RIʕ+|z{ ܗ0uTܰ]ׯ₧',XٳgӮ];n߾ͺu8|7myҪU+^{5\\\HHH̙3o][E U\^yL?=DEkFRRR+mz 4` o#G7Py+3g}\z*͚5ӬرcXjUP(h׮ ]v9r+Vк}k+___222JUǏ/r{%Nҥ f۶meH:\l 7n@RT*%99pLL Q߱Xv9W___t%9K[hS헮r)4GG":}P(۷/iGGG3n8Ki۶;muޙ3g/ գ=z **вҴ9JaÆ /]~bca8q#FpQf̘;w3gfwXx1aaaL0 Ç~)3f`3h .]Ĝ9s|2ӧOW_̘1~ÇIxyyb &MD||<-EkeMK.;/L8_?;wcՂ عs'*Nbʔ)̝;ÇSV-<<<&33kkkzꅿ?ׯgرDEE1}tzUdo5 :uħ~ʂ 055eٲe888Э[7O[1}E;# sGGGf͚ŋ2dvvv 47|333/_NÆ >޴I-裏8~8* 267]QTkr/?f߾}퍷7III3l09r$Geڴi$&&2gFy+ꫯ4wnj7/f?`Ο?O?DJJ :tUvvvv+1ydONʚ5kv*xV.碶WZܩ6{',33^zIgd|h׮ Dqp9=K[hS헮c4ǻ6ŵun;;Bwn߾ <9WXKJJzO>=zT)U8;;;֭'VbĉZMg:gݻw/pBsuRSS9~85kB̙39pQQQdddp~'7oYdyseٽ{7 /ri2335`2yd+IMM%((B#]GJJ ###_+WСC5wkT*i޼9w G <˕+Wx׸pӧO'88 .Ş={HKK+LCtoLmƃ?‚#Fp! }:u}?111رc  4 ƪU4ߧMZZZSzU^헮8 U@m3?=Y}VZ{95C;iٞ={4iK.1jԨBxdX-*J,gR*4k֌kݻc /{nMYGLJz([ճ5n;;;֬YS(ȸKz133T~T=fVVgŊڵ]v P`?WWWzfٍ77n\őD&M41dߵ y'W(IIIg#7o^`[EoI&4iҤАC+ɷ7n,Xq-9wMO݈kwSSSǪKi:?J⫯qƼ{Squ|}}_/Pjy?MױdrE}ԴW}ΧCZ߶m/G?̟>^tSzGltũO{/]m>s<=zj-iׯ_'rrr>?aɒ%+%uR ݻNGGGBW߿Offfӝ}L@RiYκW}ϧC^^lٲWWW.\R Qg+NCm.7oѣGԯ_zpͲyڵƍl޼CάY t5yӡg;ڔg+NNN[.p7SNdeeif,iF}F6L˖-矋^gE;gz*tBҦM3Fivm۶-999|wذ`g֬YDGGsQ4!gW255SN혚j^^ܜ,177glذ-[GqIq%=xBǶmΝ;5_:hM4h lllFPpY,--i׮𿇀3p[nEP0f6nHHH ,ѣZ֙ -'Nv4nܘyo߾bKУGZjfÜ6m5jɉ7x+WֻwByr=?S=ݺu?Gg*X[YWix2lM6wMܜ֭[wuo^3g;x2-[hѢ&Y0Mhf8QThbnwV\ɉ'*x jԨQr~z{Z˾N:ԬYիiӆ^uXd zՋ쯚BiӦԭ[W3 ;KԬYkkk4Yz5/^d|Ǹaii4`,--t/m>ہ'Wrr2ӦMʊ:0tP6nȽ{+QgeeEN  hostz6nOOOͱe4mT:gBK.] ضmzm`̘1lݺ8e˖i:/ݺu#++SҾ}{ɴ7ƍ3az_Mnn.>xzz/OӠA5jӰaC6mʡC|2YNUVq9q5ҫWBAh:(OijjJJJ vvv[ߟʕ+5jҼL6&&t5j楣7nкod8Dq pyݻ*Ν;ټysm;K.ifҵ]vպ/XXXЧO<<<8s W\stggg"""x2d/_zo;vdժU$::SSSz聏k&665kv|+<+cmeU\wLhтZs5_~Ӈ;wҦk{<~)Sh.f⋤?7(.ɕV777"""4CoZn9q^^^tܙN:w^222xWJ~P괴4y4ֿ%U;.K.mwx74wٽ3f Æ s$''RԋWmݺu :x2Aȑ# 5+.@[> >9sT*155eСlْlj'Ņ~ѽ{w֬Y3/2ݻwbiiɶm8pVQѣ5;wYzGltKixi:~8={dƌjՊ7gJRۗS+m+zŰa1b۷'&&"˿8j. Q)TOѣ2VLUV=?f=cU~p5Ϟ=^z ___.Diݾ}r;=~m׮]lݺQF;! 8O WC 4`֬Y۷Ln޼ѣGMwuzB!DY<~ !De#H Qf͢iӦX[[ciiI&M?~|VE;wf͚g9}4PnccCfP*iӦZ>$~ !Dec 8y$˖-ۛe˖akkݻwd۶mZ_]ܿ 9</Lw[^nccS`ʕ+/ B!S\%t ԩS:ua8NZx{{tB!-/!LdXB!BT9B!BJ@:gB!BQ HL!B!*"'if(LJL_ eddTH:RVXZZ; !LΙ3#G4F,BTyyyyٳtZjEӦMBoRVIII={dzIݺuUC`*Je NS:ud찄BT2rI_]6+W$66kѵkW>lЄ,))sҶm[Ο?OHHBs&D9qvv&(('ObccC޽MQ=zD`` ...l߾ߜ;w___c&Ιso۷;wбcG믿h֬}3gҥKL>SSSc'Ι|wڵf͚h"ҌOǎyի\[[[c&ΙĄW_}+WfZlɺu5vxBR8u}ӓ .CBQHL#& k׮1qDx  5vhB=ݼy???yfΝ4oء !s&թS+Wr9ڶmѣׯMQh"Zhٲe ǎgϞM!D'3!*WWWBBB8vټ 5ׯ;4!իqqqoeҥ={___yBΙ;&<ݻGǎyWILL4vhBT9٬[ye阚;޽KN㯿2vh ~y|G\rӧcjjjB #3!Dߟh~G~W5kƢEHKK3vhٿ?:t_ۛWtRBQs&(|}}>`ڵzjrrr䢢ӧ4jԈprr2vhB!HLQ&p5LB@@nnn;4Q ݼyW_}www2228|0;wYfM!0: ! +WrY=z4DFF;4Q ܿEʉ'غu+ء !t΄JHHǎ̌=z0j(]yyyU@kիWw}Dze8w( T!:s&(>|pOZjw-76mW^ܺu#%ǤI+rJEhh(-[wϏk׮RhBCRTBQegg߳xb`ܹXZZjy1M6寿e˖;vZj1jQzT*"""x饗 |~~mΜ9Yr%7NB!D"w΄ܜӧsUquueݺuzj]k׮1d222>* SSS̙)ØF'1B!$w΄֭[,_:0qI333cˋ+`ƏOfCP_rYMy~gLj !Ut΄FsY8~8>,~4SSSNJPP"j "''PVXرce!s&08\]]|q ˖-߯Ȅӧٳ'!`BC:gB9r$;v ;;u | SNҥ )))-qppBE&Bɓ' +cOe>}:?SE&޽KIKK+c'|RA !Փ9BM=Djsss"""֭[Dl{!ݻwŋ:;jҸq N!Ι(RRRӧÆ iӦMLL,4Cc^^999 >>Ev =zb̙ܹs"CB!s&c (''۷o@||<ܸq$P(CڵO]îvT*_}GAPP(4Lƍiذ! 6#G-à ˶,m !DU\h4tD Sw !DmݺQF˶CBB=ztl[!#GZ`bƍGv 999baaaP<2226v(-ZBYre#U͛.ΙJ233L0C211BaD2!B!BT9B!BJ@:gB!BQ HL!B!* !B!D% S !DwvڥܱcG+uE6lؠٳ%F!ijfšT*ԩ Ĥ/( m>Qs&N:@5?`ooy+::Z3ti' 9{,=z(rƍpB?ΡCښ={:mcǎqE9R/GGGz2!P>m&3!Du.]#]v;;;Ξ=ː!C4TRRR̤}8;;T*9s Xq-WKnn.;vDTHLL C !''Çӷo_zA.]͛7]4iReO&44z GGRo[!%''2Ƭ,M Ç&{4S/k/C۪_6I&BTY)))ǽ{%++86o̮]WSLATbffƐ!Cx1[l!554~g\]]i۶-J~R8p}K,!88*D}ǨÞ={XbK.ou֚8' ##JEӦM]-uQQQ!7BQ٤GVV׮],wpp **,4+;_]J"77ׯk묗՗8n޼Ivv^m@NNxwRHMM%;;BX!ΙJڴiϟ|π'"6lȨQСCi۵k O?֖;ڻwo8|0?QF >7ػ(wib!@, ( QokLL4$⦅7{KnLFEX"X@ EҗeҖ"x9g{}6~,Y-[XC4u"..p5|Xx1[I4H$Œ3зo_uBqQZeٳyyyXhQ+FF/O? {!޽ӦMBL^XLM}vB"(-F"""""" 䌈H3"v ~)ӦMktk׮_vtt|au<SK19#"zy{{7,> "Vc1k$"""""LΈ45Q>GC5O cccX[[w򂮮n{UlݺUvKHH' [TN}qF>}:N8$xyyE4U]eicLǏ#..YYYQwH*QݖI:|Y׷*lߑ߿7oބL&SyW"** eeepqqy5䒒8p7n܀!F//&Օ~&Licǎ kii? qq\p%%% Ro?<55GAaa!lmm''&}J9s)))χʉ}klrnٳgYf~-D"p֯HHHqi[m8R)<==###᫯+z 555Ŏ;PUUբ lryԠwc/>M6nz/Kwq)uENM1z]>6!W[={6bcc:3Ndd$ttt0x`tܹ96Jcree%6n|'x!lق*1B.]TrH}\NsJ$$$(-իLLLppp| =zxQ嗗cݐJ322,ZH$駟tR>ǝ;w}v={TLc۫-ֳd$&&Cv~sss666:...pqqA||_;;&[nڵkHLL0{(%R7n@ll,rssajj ooo >}􁁁AuG8`_|'N@~~>:uꄀٳ2dꊘ? j*);wx;w`ptt7oP/}]ܹs8<,YӧO̙3Fpp0h+4=oj޽{,X ̲X,۷U6󑖖Vo6?>|$$%%wիWT  6 'N:r :TR033Cjjjp={::: ދm|ܭQ_jj*? $$so\eeeLct}Y)ʿx/xQ_ƍ8w P_nW۷oɁ5z! Ù6zzzo533?F7nٳW<  TUU!!!s[uL8<LWWWu222ٳ'MV{pssSMn{P*"..q`oo/ell,$f "666(**նڵk' wnn.:unݺ?Ϡm۶z5]U^Gnqj +WloҰR>}YYY۷/N 34JHH@uuutttpeaȐ!HOOǶm0aL4 ;wǑB$ҥK)SǏرcF׮]ʗJ8uпa6DL>~~~s?777a˖-Ahh(tuugxyy͛7b y&_EJJ *++aaaʕ+puuEFFFu;;;EEE(,,W_}4}U_DD^MM ܹsmݞͭV+~dݾ}{v튤$b*mKK:8<<6|a3<</^DEEtuuѫW/5 wӧ! &N8F_r:u!ѿƍ8ۗZkcwբ]m۶aر֭[cǎaׯV]vջ--- J qkJMMߔct}vJKKz ;vhϯ~zDFFNNNի4ڗ7iI{v]l޼^^^>}:qGnthkkǏG݅NU$G߾}HܸqwE0o< 8  A2T6ѣGsΜ9 s# 1tPr899wN(z7$%%γÇ=R/$ƶu]qmΟ?ccc 8zzzcƌ l߾W^\ ={ÇyO<Zb4LIII=z!iNP_:9fϞ^{ "'Nӧ-7++ ZZZ8pL&!22&Mjp"Y'N@iipYCr9.^333X[[cxwQUU_~Ev mWUW]ڷ N8sa۷of[Tܪ( <~:lmmQZZtf˗/orݹ())7|SCWWؼy3 &T/ggkܒgǜ+~d2ܽ{n)S //۶mȑ#k UiP9tPag$(>{fPzc3C$9}OoTcU?wKFWWd릦w^mXk;Z]Ei>cj_n,4U NNNkg=_Bc 5immm1s'EywEBBRRRUpG@7; 99Yi"~үaff333bРA9L&Ñ#Gj -<|0^$sss^wcp)b̘1Pt{{{L0O7]ԾLΨ111#+bu!C QCU3(,,ZgU̠bP gݟ7sLܹ'OD\\|}}1vOJm^coŨQ}vdee;l5?3cRRR꼩!/:VUu]qmh7P:_>^1>-=^Z}9۳gb&Q{ׯ_Ǚ3g`…*T\\O LOOO 7ݎ7N¨QAǝ;w~١֭\&I5>E=>GEQFMMMm?bĈg]j㪪*ݻSL9n߾8:: c4,ml<߆OEyϯ[Wyu-{^qq1 k Rzkcǧ6w1o޼:`V 9Uˮct]_éJ;Rx1z:}xZZ4uH/bȑڦ:uRi(TU&AGG ,h֕LRz?~W^yEiC__HOOGqqpɓ'(++{UubrF H^z)ݘ\TT$\~!,,, ɄPK.x7/ &`ǎصkplDDzW_}"GơCp1;v ͢Eb`xzQQQ8t:x cccpqqgвcQUU[nxzS\Wbdff eѣ[_uupF֭[۷/jjj)oݺA5-m?111;w0mh Ϫ3f }v̚5 ...*mڸ6ld2a݌ XZZB.#--MXֻwoD"ܼySX6t:_t֏rmտ 33S(o/<ֆu]q/"##-,,Zus{U1@u9 4.]?3fL@МO+Jh_Veii٤6ϷWK*mCӧ{n@&ʕ+~ #Glt C#$+R͡8^pHOOGVVR)QRR1Bpp0޽x;fff(--Ŏ;PlJcʔ)J4;XOO~]SSH888JHIIAnn.BCC?GٞsQ݋󃉉  o?0a~ܹӦMH$^zCvml{YZ ҧv)S7o{HHH4!!!Jǰ^\t zɓ3044ZӧOZx`cii)hii)}u fffGuu5!ѣGؽ{70h @$SNBbb"T6n(hr JJJ }|tŅ 0|kn}W\>|j?^>mS_ۆϭ[ڵkBD"$%%̙3=-((@~~><2''GQ ǎuUjj*tuu-pv,--Bcmh[wK322¥KjMPQQ7oHR IDATV M6ջUiS7ECS{zzBKK R#GĹsڮNjlݺ>T=~u-|555|2QRRGGG}۶m099>>> -ejj T .ʕ+ٳ'ul </_Ɓpm7C|(^pZZZJ(4; .]B||dSLJUOO7HZH$Œ3١_~ؾ}; Mbgg^zaѸuV񖗗#)) 000#bŊoj6&gDDD blݺطo\\\_k׮Bv=uJ1PTT ;;;$''׻Nrr2ѯ_? ,DGG׻n~K. e8{,f͚pHz744D.]> xagg)144CGDD\\\b 8:: YKKKSwDjg 1<==]v)=s޽{(..ƴi̙3_!33śg=_wEEV^ |qpVh j LΈɴCS$j|||"lܸݺuêUPZZ bDŽ y&~'>^ݡQ+gDDD! !!QQQq-8;;#88bÇH$RwԊx43""""H$عs'Э[7L4 bÆ 옜crFDDDE{n\v X,F@@tuu"5qqqOKK wޅ}DE0&gDDDD HMMETT"##s?~43"""" QYY8DFFb׮]iӦM!;O4Ι37nTsTD19#"""@2 OD"D"Ann.1qD[!4d2t邂ɓ'1b5GET3"""" WSSH$ٳ޽;&NXÇC$;LテarFDDDIMMD";'''hL&Z]=zǏw۷é0H͘Zxx8_]b B`` ttt<&Hشy 9s ^}U;%'N@xx8 3"""vBEEE!99VVV X,F@@tuu]\.WH$ªU0jԨf"=zcǎUwx{{39#Xr%p-|@HHo 22UUUM*7== mhbbF,&gDDDD퐋 ,Yxddd`Bfkk0lݺg?~8{lDO119#"""j眝DXr%?~s'N֭[ɓ:߹s'D"׷' u Xd bbb 6͛\Lj|Faa:? Q䌈CQUUyXr%֓8|0<==qe5EO09#""""X[[c8rqFr9r2R)ݻbͭONN6oތ1ydl۶۽{7VZz J-Xc)[o7KՐJXp!f͚Vaڵعs'>|)S+ٳ%%%񈏏|ŋ۷o &Ԥ䌈gϞZC"իR//QZfff̚5Kr****1=y_}jjjZ<19#""":9.ĠAZN:999 ׷U" """"s}9su^={T*4A:tQfJJ ~[nxׄ*++qIDFFW_… Μ9-[ܹ͛3 f>|aZW^i%R3""""ݻxaff҂W,,,1n8ŰTWbɒ%7oܹsXzɓ'vZCXXj^y|Xn:uꄥK7nÇabbҬ}6Ξ=իWСC*HLΈb^G*'ffxzzbƌ???$%%aqa}rJZ]QHDDDDj `Jg͚%b1bqaÆ 1~V+YrFDDDDDik$""""PQQoooرc|FIHH}:N< ƦM\cʔ)0aH$2e ƌ^){aѢE GZP䌈=z~~~wI]/^\.,] .>|044Dtt4ك@ݱ|roΝ;C߿}֭[uaӦM֭v؁_;wą 8V\S?-D 3""""(999ՅE7nJ4d2lܸK.E׮]ann>555رc &&&&:w ԩS>LΈHcr?~?cj|Ǐ탵uy~*ꫯrJoصkO?/IDATf̘ykHc?ݻwqx[vŋaff[b/.j8x UzbxL&))& իLLLqFl߾<@II .^?J(lي2˪믿BOOaaaعs'N&gDDDD!ʐJNN`jj q"##QTT9s@*bÆ 4idx{{C*^L&Cbb"ŋdHJJ\pR/`())Aii)r9 zB 9#""""p1 47..} %%o6~9ʕ+aaa000`…߿?.]w= رc߿'''lٲE{ٲeXz5}<~:ttt0i$L4w",Q+DXjFP^ GXXC!5F"""""" 䌈H09#"""""LΈ43"""""" 䌈H09#"""""LΈ43"""""" ruADDDDH$Rw/p; R3u@DDDDKxxCӴiKݡ2l0u@WΈCDBEi&gDDDDDD`rFDDDDDi&gDDDDDD`rFDDDDDi&gDDDDDD`rFDDDDDi&gDDDDDD`rFDDDDDi&gDDDDDD`rFDDDDDi&gDDDDDD`rFDDDDD\Xt)53""""Pvv6|||xbܽ{o&lقluF䌈%m6d2k֬Ш019#"""?#`ll ;;;;(,,ܸqK.-rss_ H$J޽>z={CZZ>Ν; BΝ`ٱDشi>|HH{5^skJ{:tC !w׷Z{ur""""<<<\~Q<22RyxxX>p@T*{{{˵/?^^XX([XXȥR\.˷l"񑧧 !!!r---yrrJ >\o'&&111*=w\yΝlh֧j{ܹSޥKSeeeEw*09#"""|׮]^z{=VX! r\G޽+o߻wO.J666k׮ ߾}[@>}tcZt<>>^Xj'gk |ӦM)))rKKKVkDzz:맴|h @x@*χ0P1GjjXYY\]]e-[[_c푘k믾*>|sZ{w:ʔ999-a(ʹwH$jUY5Je5 DDDDԁXZZ]V5T9\=KѮ۶m{autLΈpvv#vڅa{PwQU? !!dQAE~`V'؊(e>AQ((""P*)(HCE0q݄$Yޯ{ kBIґ#G~,SRR"I*..VΝqS^^;ZJcƌ=e,kEEE:tPG׮]ըQ#͛7O&LЮ]ŋkĉU6^I/ދ5$߿ر_~ֻwo+))BݻKJJ `lƌVRRbSL1I![reL)((<~aȾhugal1W:&M:&MƍcDipffkYVV駟n>YϞ=Cܺu駟633gZvAֵkW[lY)[gf{ _^k֬9&i׮]*{ԩSM6nW]u1A׉ `fVwDx75g UZT$B Ts9Gu@ep $3Hg @ 8@p @JTŋl_v@ȶ+B54\3x7JC +\zz٣@Ș3hРeիfHgH:W_}222"9|\C-#8@ҩW r˜tIիW IiРA*** /55UCUJ 8Hdfjժvv￯.[;gHJ@@;e˖޽{Z I+Tr-< 75 o^[l 'cǎqjwԆz}fHHgHjVqq$O?|8iHz\p֯_@ -[m۶np  :TԥK3$,Zl{SNNk|<jsFL?hԨQȈwSP 8Ipj.F׹fGpƚ3̐ @ 8@p mIg޽RV#Lʚ:U !Cb;B޽zۉZ SR"]4kYUyFڷ/zF;7ӥ^QB/ẍUn$sSGڱÃk#=)/j4eJw7NZN쳫m8 7yKںxE5\)iIw:{ Νի}{aO%riк,4s~[rsӦ&r[W_r? 8@ZTZ]<83G*8Xrr|cqԧO{| WVuj^|׌;<);[C?z oL=ڷϜ)=[_^c Lni0_WӘ1ҿ-=\lF,WnIڴ)b<:,_6mo?.:K^wC@H0g>I7{UȑxqfeImHO9ŧڰAڽ[:`m)쑺t ӱ's"϶m~`- g_l,4/I Mo ʖOVgKIڶ||^OY '#,?3̉N \pOM??4bn4p`Ǯ]+) ~'=r}'ZkںvulI&x2|J9qQ:Ml TOZgJܷO<;=~ 7x-=o+}?yp_ֿdy"VNIOƏkDO4Ҥ')=oӦn̼_[vkm[{wS'7w~{ϺxRlϴX6cǏkγ1v*teS]z_SK[Fiq}~\Qhc׃^J/~ҭ+ƍC?v3z̔''v8r_:Ż%@ 8@zOʕ>}ox gH\-ZZ#<#%Rjj|r@aCv[o5zۇZ5gH\YY_Ļx{*~\~G̸s @e|o?g`=Hʹ"٧J\8TiX8ޭBTTIt!??rY*=o_O>Tݻ&MA>[s-]Lq'cgKA_~) &o桇B[ԟ,u]z󫯤ӥ^Q*_&Z{cϪj33i2);[_S/&zSN㏿L9:'?_!O0`g䊝o޼b5g?O餓<_{I~ӡۮZj^BڴIZV׿<;4xŸqҟ$^wb)gnh?P8qx_ X^`ִnj{bgD5K̔ucy萴}֭co_TӧK?z7s?@qc{6aTP }YGIiiW&R{chرRÆ~+ Z X̤ww m_f~`ٕ+=9[&yg:?\J_4:wV텅ܹdY x4쳥_~ڠ 6ͷ)ܴa(((۷K5.SRuN>9Oe/tJ݊?ϞܹRNRJ'R-\},cl7c+?77IKO=%{tq(;B?owumL˪[7C8Dko,wת[zKgH'C.+m6nmֽ{p,|4(t_k1ۻlXܻYIf͛-X`VTT~zWcS:'ZO12 |0|n}[m/ژav=Rwf=}J #aT*Bpj ]< hf6kV%%fۛ} >?^/BG{6gٶxYaYff3fYfXd胙OjÆyݥbg2/SڟRžK](r>ܬohcSqe̊v0|RRg mӗ_41ciY޲ϊ|wӸ^zɧ]nyOK+kH/hYYR6Fd@p >sSJ@l쑺t ӱO1"&CJq]b)'뉊aG{ٵ_3gJ,7?vfMml˘ի'lfDMx2Zޓzxm1E-wW'=ԶkO3C(a&/u)GKOhm-[Eb^^s5k~]1 /[gWv8)O; %zusEETf.m~lpU{mbL+#R{Y7O=zի}߀,&83pb <ۂ~ܢԿ?sj\OѪ .%I^tYedgf9I2 3xptwl6oݾe_vYp[n̚%-Z$MT~˗.mlS1 <Ҥn1H 7|w;v\J Rvחj@pN\6oTo)-Y"]pO??4_nY]+) ~~agڗ- _ҍ7VllJy*RY8kHM%2)R{Íg,=kvvKVpB99>Ojg֯_0 t;wzVsdeխpʔ'y+}IolF?co[}6~ΞwuhNvҥ=SجYsl֮]1+)12ķ7nlv꫽ c*2fΏ> 'RX[VUxgN P(;;;M,%ŧT^2xš3t䈿:uwK*/gUw<J+WzƸ}ݪI>LJtZ{#FH={zf@-CpPղ/w+O2e $3H$ښ5k3x72@ (;;ǝ3Pk7fɄ5g @H0ލ6EIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/references.txt0000644000175000017500000000255113500440053014755 0ustar00mgmgToo many references ------------------- Objects that have too many references are truncated >>> import objgraph >>> objgraph.show_refs([list(range(7))], too_many=5, filename='too-many.png') Graph written to ....dot (6 nodes) Image generated as too-many.png .. figure:: too-many.png The same sort of thing applies to backreferences >>> moo = 'moo' >>> refs_to_moo = [[moo] for n in range(42)] >>> objgraph.show_backrefs([moo], too_many=5, max_depth=1, filename='42.png') Graph written to ....dot (6 nodes) Image generated as 42.png .. figure:: 42.png Reference counts ---------------- You can enable reference counts. The number of arrows pointing to an object should match the number in square brackets, usually, but there can be exceptions. E.g. objects internal to objgraph's implementation may inflate the reference count somewhat. >>> import sys >>> one_reference = object() >>> objgraph.show_backrefs([one_reference], refcounts=True, ... filename='refcounts.png') # doctest: +NODES_VARY Graph written to ....dot (5 nodes) Image generated as refcounts.png .. figure:: refcounts.png We see two references to the ``one_reference`` object: the one not shown comes from the list passed to show_backrefs. I think the extra references to the frame object and locals dict come from the interpreter internals. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/roots.png0000664000175000017500000075705314701712343013777 0ustar00mgmgPNG  IHDR$E,DZbKGD IDATxidg}_޷wݙ4al@% 06(Lb6ǩ` ZxImH)J!"FҌn3Oso;Kό>v>}_'y'Ds3p=0δ'#5 8>|Xַ=ҳlٳg9ꮻC=4iiOntݻWW]uմqNJxM{O~^WO{nضkVwy紧q^3źMWJwqǴq.#58J$Ӟ4w>hV`ݦ3kiδ'Ùt8ӞgL{`:iOL3 8 oKҡCei#9OIĉk^3rMA 3 ?.=v ֶPZ]|\/}JҾ}_.s 83<N!g-ץo6;+=MfS'?w[ZZ[яgZnK_K$x/|^ڷOgoytZMJ$Fc,,H}6 .pp"gy.&δ'wP馛?ywIIwbW"M?.-/K/}t }NGq++J} <3<N#gMKW_-=R*]{םx~t~q7K}Ko}4;+5gwR*%gنp=w׿~tW_X/;&]ym]&?~zM7I_L&d υ̙`C_ œP9ѣc~NQ~뷤w/A LƿOY_Ǥz]ץ~H'SHxW7)}C'p. gy.fδ'ڽ[z[{^:顇~E/ݿow%R$Erk43#]Wck5ߕ>yᇷ6}H_<(/2ꫥg>Yp9Ӟl3nISڿ_fϗB"oIW]~{O}Jڻ/_ _PguŢ_7O|/ԋR(tp%<= o]~uΗ)}Shlo~HIO'Hnu]wӵ^+I; =ou]ZǯL{zr99q`0+l{kR҉Iº9m/uOIQ$μߓ믗t]R,E\z]fLHA7Goy|L\%1t,K\丬kr7Ͳ9g|>\.Bl6Rt:rTj㖲J%2_3Jmqi2$Ţ$ٟIŢI Ӟ`6ZFQkmq]WF#u1c'R|Ȉ@2_eN:ĭm|z(Ɍ[/s|l4I߇9G=}}ǽp8 6. E5ݺݮZV>Bpqb1\U. s3affFdrd[:kձQ gff8XIJ&Q+2JR#lT& ey755o3* :\yXphL&cGQ{~T1hTkZYYٴtZr9TJr9r_j5rL&mxHu]Ez=ygNL&#u5l``~F`vph]׵ŒUԧJxtӞͶviǾ}&oVfiuU/c.Pzq?.]R,_?ǤÇZMڽ[dph\B8/frs0<$G5|MT'7nq٘l6k%AqqTT"_#*H$tEeu$X,df|>\.7=ɨX,N}\|tUnP HH): Es C:R|>#.w!gpȈʊH)>C8D2\1DYgܹӮyldFĬb^'8_Q.{_L.$o0GiZ#erW0;fjL&FZf5J$k&{8=w+u~8ǏcgL&3rlqNyHȌ Ν;7gs>W")(+d2d2clbq4JubpN+*P+6*(LQmwTV^L*jl=awT+"uGFǦהQۣ5j6#9fqٜfqM#JT&fF\FQI;<ɤQ:8r6eKrYlV|^lVjUlVrS2J.e5nvկK{'R>QkĭҝwJI.gSx.^ &H`pe1\0l$S\  FtZKKKv`0PT=S&)r 0f2bd2d29RW,G|>?R0dL&mT*e_'1wTcҨ"ب!x)Q 5َ*Bj=777V׉*z"t:=ry3Ǭ9筬5-7s4s3;nbno$N+(J)H:GҕWJw7~Ju&)Ν Mk^o]p:طM: >F)ݼ/o7ǏnEsިY(%̌7̻0܄fh`F#`& 62gxu`p^!܈788T*o8 lcsRD~K:p8ɴQMͿjD5o4c9Nd>u<љռ=*o#Eg^^\^tEcN2G2;Q2?RtFؘ9M|/r<+++lדc+ Lt2f@Vk<^6U.S.SZPX9c}u:Z-m"J%jKZ},L~׶~KӟJoxOh|q>er9Wҿl&'{/FjtJW~&ňvHg}|H, ™&g5it}#׽sQpbҹNQ9Pgu|Gcr^&w?fs,'0 q20:)Q≠lfw$7%ɑc?xőcp-wq{ L$*$$ٌ^X\>).%EgsB\6KWI-Jm㏫ڼQ۵^`e{lu] mpNco܎Y7ȬdygI$fz衇:|~a=C:|H k޽(K^ IDATZ\\޽{HO}ccҳ%[|GҗoHxOo}ۥ\lVy{;ٸWVS.ٜz>zQ ޣIkkkc Í4?-Q٘r[8r$} ȥJI7N>h#dO/˿ )(͘P*i}]X|ağI_ٛ[nsB;wJdsآ`v%|ح>lN\$6fmf+Em3Lm&dlƧjX,ښpnF_?Gs9k07>{?ڡ_SKӑ#JӱcNsڏ0 6`&Ѵi{ GAuȺQF*{8v{Nc[~Ѿ*lj| 's~<5(]__zns7FC~_FC^Ϯj[sH䈆HFqLN6d2KTJ|^D®dlKrɐf2 r9iΚt\nyhh8ڼp8TS^`0PTT|i(عϟod2f*J*󚙙B;vP(P(hffFry$eV#\lK|c7Z _X'بRXeoelղE,`mev.l#p\.'qH$d4L&mS"E.ij5I~q{*yj6`<5 [|X>G\޽{g-..|vޭݻw /"_oN4<7Gs3!ݑm;g?[GEVqz]*o>aG?.WJ?l?gOT'VKf3>qieEz[}<x@zӛ{~ץ4)75[:1u<F6Ff_"{#CH&* `0P*cfggŢǑd2J$6㺮Q.S`0P&7k5t:-ut>Ǜ+++6f΄T*my}"s^__Z[[9P<ڜk{uu^`h+9 qTTF>R}LΧX,V\.k0(suS"6亮lOUٴVGyDw~kmMz6oS>/{?.j5 oǎIͦ?Rl<* _$X$br2F6Ƴ&O_ԜLMuO%6sR&fmbhs0hsuXkm /<ݮe2e2WXѣGmIIf <;z\`0Bߗ#1 c?,gnqyݮ=n8'l6kW_IX.'J|Qp[&YRid&?&]Fx#kQ?64f ~9cu]u]?~\Pz]F}yl3k C5M sr]Wp$/=ݒɤ]7-L*Jqi%I[JJfJNL&o],L&P(R(HVK D^WR]wiuuݮmuu]DB33377l8<^^y9#qjF~߂2JժfffT*T.U.UVmV Y  u0%gm/ ӟ=vuI)w0wARj!%@ @Ma)3PGinz=m;RiS8s2-0  ;=5G LG")L<.ŜBFSgL_#Jq Ex]8.\p.NƋY uQsj`rnBj 99ZYYM!ښ\ם4%VefҒ-3336ܜC>̹ VVVoRQyluuUʊvz[lg~$]|zs{jڳg[yFwH|w)]tU}NZZn/r3w_o7K]'+t7#ot ґ#Ϳ^R}_J/{x/~ߒ3Y`qᅓ{򓥯}_7o_[۸T򏕿qw-=I~V/.Lv0{Sm64]]]t"lXkZ`4 p8TѰl=D"a&tZLF܈8fr]wqt߷ Vݮk_k8f~_v{$bnmuuuQyl/77l2&c2?[}]r%zK^}iiiIl/l}R&z[?͛cG僂γM7ݤ.L%\Zc~޿L4EL67Q_YXH?tcדv^L~]Nz&=orI3=lVdRd2d2t:JRrGFî㺮:]dZ9vmf0<51~d?Pu]F{7NPL|M"5kd293qGBad XqiiJR6U,JNd2rL&3VP8d3F 3Mf$-{uQZ-5Miz6nGj6r]@kz=zO)LIOz.r߿_]v߯[1U$YZ^>^wY:$oIߠW~eNNpnV5voGeX$j>fqo7 []r\;%@vF7xZVZ}J%D"azivVyL/fNcj1ﳙyݮ}\U^u؞獼Ǐ۹~``,0}mY0Lvk|M>H$J$4Ud2J$#](J#NU(T*T*\.T*%qgfd=:pS+|r<\ȼ~x}CϬnuqǏnnkyyY@+++r]WVKz]P+++6h&#l6y|`0yz;8jΥqe2{>d2v4s.,JJ&vM48fY %Iرîc~뱅E;F5 {1FV5{hh}}]VKVK+++jvF - _jKU(FX&;mVR׵b!\[[ʊ:d 3YTlj~~763 DPu]wm}Go{W9nO}iqQz;1YiY ۗ|0~o INoj FcĆ F%iuuUNG@juuU@ C[bbRy-D .Jy%\Ph ɤ-61TJBEeYSp!ad2R)e2-,,'X*b`4Z fMǧѤ.@z wnoG7pŢz:x$>=M_~.첱Rc)%Hd/ot xW/կƏnuvVz++bMnL>dLVU CmL4\__Wp8cmkw]447AOuI% eYd2w\V>uiP4 6h9pnS#>sNXv+6=f!3=;v,vє\kjvܩ<)c%4`?Z}Q=:z~a=zn{F1B;vh׮]ZXXݻuWjaaA ڹsvic|r?~fzғK/T\s.LvG7~PǥBo@re}?ޫ??>1u:R)]xڿ.R{}em92yR*%=mnE/.Ə=vLTFU8LjI:LSٔtbmiuuU4m`&&M뺶^4xdi yT*e3fs;j8*Lɝxg}N5 34d2nnk_\wݑLG]<̭O´܎~Lm fg٬ɤM.ef2bq$H$?(J# G29%z,6/!7w:=zT^kmmMnWvj66G~Ve/otQ`0kنá]:mf5qzluR]&LR(iZ.N9W̨X,*Nkǎd2** *Jv}6iV$ٻ6N_/nH C-)Qvdk+&I7v#iSim3M&oI&lɺmZov74qDZ6-YuX %"ű ϣ ["%}?3})X:Ń& ʍ ȳ,"{<-k|"\.WWD`w3YVY EXglOQȢ(DQ(pPza2d񋪪zx<аMntttc|>YdIDtכx<. &E(\cbD"!D#NcR). +x/_'_ IDATLbqq󘙙5L@0DGG:::ىv}t+8wΟ?_7}O=HòA0bٛ݁i%&,,/ ּT׫Mܗ\-@%"""""""""""""""""D̎::sȳ٬r9^|-;aXdYR]tV+<f( ,Ѭ(0hkk"s9UUc6[:,LP( "JA4٠Zz ̹12@~_:N' Ͷ$#rAaf4Mf|\׋~ټ[<|>D"ٳGfz_|ףT*avvӈbfgg0==YLNN.ppH;wy`0`0p8P(?͠iΞ=g. -..޽wߏO|ؽ{7ك-~kpw 9|tfVnP˳>\:&&&r@/r`2$~:8UK;w־~-ך~zx8} эAǣ5Iub4tZQYΘoIӨV(ucϬlnGZ9r]RnZe|&4nR<傮0LhooR]zWUqc2]̏܈״rp>"#l܍鄢(ZX,r*k뵷qxDfGUU\.2cev:r"B\Sc1x0BX,r,|>bL&rl6+bQ^t]GRcsJeE\+f3f́눸~|>X,l68Nf*#!1^~?n7:::`2)={/AdLFNxnY|ŘQbV=|>tuub1X6f8籰P7`qqxl%1R @[[z{{qA1i8FGGqix yD"ĽދGyPcdd/"^y啍ѣ zΝ,_j1u*g׶7ڷv<4Ϯ8= ?| c@{{xpTU0я~TGGGl6ڵ ò9vBK) }/c= 8@~ D.,33&,:%""""""""""""""""9c#uuf;G]NfƦEOZd2STd3R6 vv]΋|v\rY4w8p8F- o\BaIGdDDfBd2|>BPeYdZlx)b1LNN"ajj ӘF,,sn7"00u4MjEoo/qA|cyxSہ~cVdn쏑(2;bϟN=3җJ"@"$Lvr=i5fg~Zͻ L je-'IYZ*dm>c,..֍PTQ*dX.b 4 JEfT[Dor$s,׋bjbsfY`dZ ''VlFxd(ll.QkjD\|dl|^6#4|QfJi42 4Mϗ+P6+o~vn9F8n>v^Wq)JH$H&H$H$uS:c> d2LMMavv333bC,åK0;;+ L&BB0Bv؁`0`0P(`09ʊ"\1Y6661\xjy?;v63ߨ~{k˺^k to}`i (EՊ>+ //_=J:zB?> wzEQDѦ GFFd1WU"l><0?-w|3>P,pjϚhS@̌qьUHӲVDV2"c6O4MdsR]a6Q*P(`2dCb(s:˩P(Ȇ+8l6(R@8o|QG#߷(2clNDDۓd2HR( d2Hrl6Bd2) +rAbЏVĵDUUݘ 2#$Oy!m4nP,[6S(ׅBX SSSQLD"!cX FDӃ `hpphnx뭷dB<;wrYp1|3[j~r?ǹ?F6M6E衇z߿<2fqmȬܹswW rnqݓ>y YݹѶ8KcF$R6oD"EdY\*zeRyTUJ%TU,,,@2DZERAZE.RX,eqFDݕxu& & Vf`6aX>Nl6狾fYW*L&ٟ\uX,L&YK\*gP,eF4, Z>s~mb|""jN\5xN&T*~x]O$rl4qOuD˼LXD.CRA&[TUfXV9)R7fYcSlo8Nb zY휹͗JL&c"@*[6碑(PU>@) M稪Z\XX˗1??y,,,`qq unTUE{{;:::ގvy͸rm֢x=OUU{n GD"i+x_D"v|c0^~O?|'Nm~#6-;1KDDDDDDDDDD jPl~-n(& -\n?t-~D0LO[׸m筵Iz[[[fkyd&ƴ^4kDՍ㼪novm6Xm;)63o5%>>~_N@;w[g'u"XL.fff077sann333b4@4B(B0Dgg':;;qm! # `PhscttgΜ(Ξ=z V0Lݻ{nǞ={g-uc`c~/<<, /6n_:A+h|u9O~zx7jMZuUyM{MvJ%J%٘l6#l6&R b!JT*!HQn*rʒm`Zzyz<XVAM<6M65>v٤5n|e^,d|O8^Uqmn256~^Ʃɺ4t*\.czzb4&''C@mp8Ntuus"DFox뭷Yܹs(˰Z|AXozWõ:o} 8yjX>ٟYzHO&pBw'Zr׮]Ao[ـڴڔN׾  ?_x >A`ǎ"""""""""""""""-P.J1Dj@ؗ<@ufQ,[KԘ !J%ZVH$Oc^e3ǟil6f1LZVrX,T*T*T*(k>7 łj *_l6bqVL&7ͨT*X,bd2AuL&TU9_Tfz!?0cXVny{QOԍ5|  s3d6DDDn=|t\J\Nn4Mf\.B\6hXjݵh9DbMS*B2z|PUUN>}}}K֋mb"Zރ ,..LV,ԲˍD*"w^2n;mbgϞERfî]088|# v)xcG?FGGQTgs=?Ss=ؼ|b<(p˿ r pox*rZSS,a צ"Z#cqXi,4s =ft:-8J\./>T*H&~?c៱ P4 ƂCQh,P\pxL94oS-˟XL&Q*L&w@' 躎t:-tmƂ _DCs3ZPUU,d!\D$"g,\kSV&ѬxF䫙U qd%dzlM'/'Q(֯~H¾,35X Oƙ3g0::*݋Aٳwc[O?}C/VW}6 X\ ok3޽͟w|W-.>?<8XɟԊx߿z o}v_u?Bo~gd2df~?N'N'lvt:*<\.<l@vdT\n뭲>Dbu{Ѥ1j%V@0??_Kk.Ju%͞S*8s N:%3CNŋQ.( ك={n塇<3{B6 //Xk&k m֛I?kS]D?O@N4y ٹeL?c ?etv~HDDDDDDDDDDDDDDDUNdw3_S3ٌc̬gbnT*\.bj\.CuT*T*(MPV~RT*d2P(RX,ZP(\.=W"l6fl6jl6TEATjEZEZdB\FRe6Q,:L&2̺몌9:"c1`Zeǘ1dOƘg1%dcxsb<:WYcǩbk4MpWK\$)֒llp82t:r겛}y]͔JH$5}v׍IdTUy%UUqz(ycff_<77Y.tPP`B@{{{Dt(˸|2FGG:"GiV+z{{w%ㆎG?^x?ƹs`Zqa;N}a5猪UL&`hԧZi5n>Wz?:87I XGn1U2GDDDDDDDDDD[Uz7x@}0v6@~?7{ֺ}@eKmkX\JDDמ(Lrx<.4$r,䪚/rrɦN^^Wؠ\f66;TU,,,`qqMZX,Ԋgv͐ep0qrrR)K8wvv"  ޲Mٯx7q>}Ommmľ}d}{ưxߌL&z)<[v8y|MʢoCCCuM[/9 DZ[T*'?yNh| \mlig5ffDTjSjSyqA4Ed2Uff&nɄjJJr M6T>+s-cэ+LÊȾecvVlE&7@uybl6+eܮbndVjJ&I^s"*t]GTZ՘{f^v]\v;늌1)BQu\)rƌ.V11+\iK8ZvgJcvvӘ133%69AB!B!ttt,xm˗/ԩSrӧif3q bwʱ1x饗/ӰZ8x wѣx߽sf܆,0X~Wkj]tu7x;6pDDDDDDDDDDDDDDDkYsDcZo&\έ&P(yb>#J!ɠP(ZkMeSƳ\hl*B݈^6MP;~l6x<x<v|v%ir>N#LflطR|=-c^W|>^/咙R YbٞiffϯY֧^6yK'nr)\|r&''1??/lFFww7w݈FEgg-WugΜɓ'qI8q'O `hhG'?I -Кfq׭r N>7|N?( X,ؽ{78P7_ӌ'i@6[rjK<$028DDDDDDDDDDDDDDtC5d&d2T*%8tc]~:}c|7fZE"hE ~_c~fL"wz2UU"5m6nxdUk6b|͔NQ,L&1??l6+SR8t]G"H4 BBX,ʩT*A4T5#>, N'L&N'l6f3~?f3\.\.jp`J '͞CDDƼ~4ϭnnZBQ( Պj* j& Z\.nT*\.{Е\.("n[^G~?EUU( |>{@ =حϥOX"WˉDryDZL>~]]]D 8n/c֫qlgc&sZho{#uhi[uc߼Pˊ {#<>|5?xrp]wƻ.o:D[}DDDDDDDDDD%n͛BS2J4 @E͎c,Nmv0~6+Sǃ@ PWD8bPc!Af3\_GBxQ7<<\FFԔ,JjΝC\fî]0<G.C"@P|ij슟\2 dCNcnvnmWUv]~W峧Ve?`0{522MOO/\31NMdƥR)LLLҥK8qecjjJEAWWzzzׇ#bǎFF8fr\.'O_믿ǏԩS(lʌB0&ֺݍ=r]\˗1::*szw/|J.788ywB7nulO~,s? g8t_imTZͯvq\.M6+-,lt_cd3f|D" C48??L&#lVNbܔd2RBb]בQTP,QTdZ.[UQff8l60PUfb}\.<6Cho!"VّR~Ҩql3EQd2ɼnZnj*BR R lR buh>i˭[ƱnVLn x2\.nx^yq|r -b_UU}IӘ<.,,4-6uEbjooo:/ϻT*azzr \"'''1>>ihX,Doo/ݍ^tww lĿMy:u ǏөSfa6ߏ!߿n6_GO?4>-`6d2~/;wYRQ`:666es'}~2@(;G""""""""""""""ZlsoV6g3Fۃٜl6T*t:-,r %T*%sf˱p\2Krp81#版ix3r2\DT\^\2xn}n7~ 5΍X,baano1NƁUU[fzYw}mqall SSSbKÁh4~#-jnRN8_]NgϞE\Çq>|CCCطos`kCy->S=c>P(է"Ο?_l^4L p\->se/._i"nHDDDDDDDDDDDDD_TB:TU$ -HȾtR fQ,@.@f*2|67boh\.9nT ƌ6ZyQV^@2ze-ul|(x<j}UUmz}1Yr4Mf1DjTB"bBb(ժ|u}"#  EQ`6a٠( V+n7f3<l6^/l6|>_W|>G]6~wCkl<iblVÉ}Hq}oqlV=ƂUQ`,nբXsC44Ͳ X* SŀX*[G8tI&rk:x\6mP=J},YC;NU5QolNDD7\.qy:ojnl="pxx6/w\zM\.n^ofłm- Eo" mWiaq~|| :,in 7x<Ǐ8q?sΡT*8tO=yMQܬuddB`uEwuV6403{/z:;O} ع'06Y16yѨS,O\z33"cl*RΦs}>l4.͋lJϡjr9\tZrrW,}EfdzNcnpy~/h%m-y}~͍קu>B9a~~n]f9}ߏ @@/7T*ĥKpE\xQ_|rp2EQFۋ;v===uw1ZY2^{5xqTUA>|GSy?A|Sw߽էvM-לb`ǎnNO)+_>@ODDDDDDDDDDDDt3#6kZk#F,Z7mDB|DvH#rF&՘[߽d2J"3Jb B\.'u]G.[yzJjj(rEQdffC:D#tmmmN""tbq=n|6^ qȣjE\q1U* eey>͋8>qAALe^I,q,..Ia(JRyvϮ:fff011i\rSSS|lPhPD"B(B(>3ͦ:z%cb1%G}R"NW^>g}:, YSssEPkh2VlNπhtfdH$dT*T*%' d2" I`^/TUˢ鄪x|mmu׆dw]}77hooST͊V_}U",V0~oCC}1 n _~HDDDDDDDDDDDDD7 [4YX[.g|OcHud25,ip5{c<P4CLX9L&\.'Egs9"w#r9. nBUU*rnZ%>⾲miT;zxϷUǸi\t /^\8>>bC__v܉>;v@$:y8qz-TUtuuȑ#8r>#GgOΛO<~i|k_qa<#_eoD7r˗/"tYT*l6ڵ6>uz<<̿\mسHDDDDDDDDDDDD0!Q@#ڀߢOZ!܅jDc3|pF@]˜+x<.81aCŘ\x,w_|'ş=x<.,RTi8x8jL&}q8T*Pj&I>J%T*e][ֲ ~NSxzzt:xdrffF% ymzܶx<.ͫٶ>V>OcnSB& xLF3\'b9N#JP(>UU5_UU8yo6oXn];L <P7?;;+P(ꎡ( :::.%Ȭ[eĹ9b1\rqrrb˂atvvH]]]2 F d"Z 8y$N8'O… (p:āp ahh`pݯf /s='Nd2СCp}{V۴uېgLU~kh@'[kv,Ņurc.& E(IRH&r]6E<G.MѓɤlL&W,Mн^/TU?>^Wnu }>\VU^W6M'"_:śb2{m$&cاc11!ه_:ŃƢAQD877PݎvYD  |GG xo|>˗/ҥK|rtEb1{Mw؁;v===A4eCD"SK/_ī@$߿gLkkd2ᩧ? 8kkjjJ6CΝ;r ǃoCTU-/@{;ov?QQ``#t=9g-:clOt-yq9?/[Ǘ}Á@ @ ͖&炈CT IDATxĔH$>ڧUd2ey.~_ZeC[.ܒfͲ>bjbycǸ]EW>G,ؒ魷B:pY|4E\.ٳdd4M8p{sέ>[ ;ofy<x'( >3 LNX122"A\a A ȑ#B[X~:iS@_i? zߩ) z{fވ6irjF@] Z2DRAZE"J%Y[c1N* $c8va_ &Ɉ^Dcx<WԔnV+^/l6sjn#" rClbLH$$2RS,f{DA|UUERBRီPR R@ueMӠ:t]G6iK7RUNSt:rdtrrAUUٿ^ԽW'""Zf9_c>q3v̿F5VfK+ldTJ.Ǹc->ŽSq1y1o0jvqb1LMM-Y199)]( ȜqFKuvvޒ9B)LMMϹq||\{ Pϰ;86&4 x7oɓx7عs'044`hhv޸cccǏch~;v ǎߏ εqsso-J ǯeܮxZ6;7H4MC&4x|نtg_cWۍ@ - o|>\VUZ\XNDD7h~~~7=~c!j8V3`G[[ [j,l\^kaA|o# E.]Jj`cpQ sΛU% kxWL&vڅ;wy';ɓ?q|#u36Eя?@$%m'EG[+ lZADDDDDDDDDDDD7Q)}Fw}Do\cl/ Eo>k!ffk\/6. v]c2uq6L45sD W,uinL'z^x<~9/݋Xol+2=DDD9ehHkl`O7|bcQx8fπTT8.\'rx".]$6͈FΝ;$\_~/2_ǏG.Ƒ#Gd~;Į]toylS% _ҥKx;ށ>{?{] -[d_d98IsZ%)Кf@Fs`@Y)%a<;8A)݀3ekVZ@ںq.vsuۑlɎ~?:d$Y%M,_ޯ>_)|G__ !Zhoo jkkg@{^@J }mز8> ]yȱx+&Ǥ߈{Rd`P.DΒG*B0q, N׎G6(27I\L& '$rD^pȜ"KNQUUL& R)dYid2;%rb2C̳2YȿpшjZ]] $.2ͨbDDHVˊ !  |x<UUeqnކr>21婈`lZ`n豙k¼.s LgN0h+Vf:?Q?x<•+W0<< ǃ+WvvcxxXNӉ&\.,]r؈e˖;M!;N:x<N5kulݺuϐ /_x1::zu]صkp~yʇysoMk  ե@(Δ,,<@H.uN)r^xbTGk&Wy+c YlhEƐL&޿XdcOuuut\z1661x^x^|>attT&$Y,ףۮjjjw$".]¥Kpe\|.]<˗/mŊXb$; _8ƱcdZOON>L&˅Nnt 94 ۇ~%#|+V!n; z{felgg'lXn-~FPTOrN' h:K/4:G-$T @ LhBUUB!Y(XQ eQRP:vE·Zy- l6,|/9͸""8 O'cgbbjfaZ~1Qb4ͨgfmtt4o)1|jkkt:e󩭭e!(a``.\eNqe}p`ժUXjV\+WbŊXr%/_,H7ѣGq>|èĆ uVz뭸[>IMhv7|L&^z {SO=Ӊ?KboT*A$rD^bAkk+enmYM..^wwV]˹'fDDDDDDDDDDD4'dY(r.}"TUE&A2D(kD.D&;eSj2d2*o<͆9Qf3t:***`@GnF9z^hOOn4:s9TUE*r.!zUUd@`1EQdx-O7InkBJ&kO.VUƪP]]d2d2t:d2T*H$@ P($s3EA8~\B=*y6 f&)/NUbME|VxpX"PbϝEbr\sF# vl`0g0`X.j.+vFb2EQ xB}6(`0107S|pd2}=.GF022'srsr뫪PSS#H9LQ\,n7<``@cc#ZZZr8a|r͒T*3gZޞذa KEww7y9r6mwߍ{7oFEE 6ޒ,M J}ou9] ]NuNn$q87&Z nTU-Z8=XlnST#͖@+Ɩ*. •;k?66VskgMÑצ:nA-?--[e`at2 ks[ZZd[z5EvСC8x zzzk!HfaĎ;sN4444 ^={|YPx ۷??O} #[97ٱ_X8Pow& wX,jxn`0x<.8~KH $Ep, JAQ$ ay/4s$^3:v}1 V .sD^jNfpf8X\TqFGGeBj{ɒ%̽"" b)]8Mi}/Ql}Fn?<ql&t 0hK&||>l^yFաuuuDmm-jjjPSS#Y2=%H`xxCCCܾ|2TUUa˖-ضmn݊n +V(wwia|;7 m6/Ϟ= hmm-sO糟,m64w/bոXdMNqY8q8~8N8+WN'6n܈M6[nƍn:W ,pp P] tv>G?>I`ٲk;wR'毩~N553\d}=bE~?|>_ɜNuvf""ZD^Ώ$RENQ"l6[^^bnf#S v,>#4]zUχk+**d~OaNhNSBӕRܹspΟ?|J455aXjlbd2Q,NL}}}xq!:tm6C4_r1ho}[8rH޾+WvBeeezѣXf jjjݕiix<~qaᓟ$>O}p~,/onnE;;;сrw8sAᇁwO0%&?%""""""""""-bl6+뢊D|#dNUsyIr%3ɽd2^Lfɘft:TUUɿXe1V\V+*++e.F]^:f9^|ZLYEEEyZTRad9NŎOwܣ^FĤ9Sϭk/SEğU;8&v]Ϋb6E-Z""@pHUUcUUs Aqyx<EQuf3fAyz=V+F# vm6 L&, CYic\j)OM4񽨐VzXRl6}jDFxveyvE:λprpQڦnx< /_.UUUAccrms3!b``ǎCoosexxPWW7a{X,_W/~Νlw܁]va׮]XjMC9rַ DQ>|o{n;e ~eM9ӱm6|-w7LH$x<.EA&(HR2hX_@`/zE((t`=d+x ,"P@L&<%Mas[aMn @ H$Rf- 5DD-lŊ6EQJN`">E-Vp8&6n`0   #{<km6PWW:ף~BsQ/H`xxڛo)? ͜܋$ۍCkD"%ر۷og"L&WUU _l6[6-/sOn3gG?? Ja?Slܸ]ES Aa͚57ofyr|xkE?ax@G^&!qDkDq~/kDoqt#kDnGee%l6,/ kD~Œ' M(v]*'wnLdEps+g`""Zt^>Ty?c(_b9?b9)>###t=w"#Fzt:Q[[+szv>FSGKseCcp-/)/I62? J$x+8x Ef۱m6o6nV~/[<ك'xw=Օ[F}dBӃ{韠}{AGGG6/R)9s'OesӉ[n6mƍq-`ݺuk +}^: <<|9r%b"""""""""M2LɹӹFA̔o]/\;6󧺗ng, -Z"WI+>8~{ rp8x<EQ{2/JK:E&sDNj9dZaX`2a%%"~?~_1@@ƪ\ܘUZ~F(,vXEEM}DD4EQ9Np}m`0pڥ֧:^x\z.KW /|猈OGy<nTl{hhhz8.Kn744;[q%\|CCC O4 ܌&455ahjj²eUGDD$ 7TVVb͚5شi̕ظq㬾=~_gEww7"6mڄ]va׮]ؾ};6fу>g}Νsl|s,4b&""""""yK4`d H ##H@Q$IA[$T(Ul6C6!t: - Z-v;***`'ܟה +Ls=7 !"Z& N0tƦb\.ItSEѼRW\VHXj'v-tٳ8w.\ .```.\XraժUXjZZZUTAb;R;W^y/29׋*lٲ[nŶm۰m64554dY<˿K (򕯠]Q}e N:Nٳw?!L cǎǏyA7o͛i&Ds- h?cFF&8Ѣ4|T*u]=tźE>fCee%v &iF9w[h4۷O-?1y\x۷og>}V-w=EQp)}}}x7Fftttt:m5447_[|!"""""""""Zļ lVs4  !LDDA*B0,zM0D*B$A<pM&dEL4Z"~J*Z 9?s,#r'~6͌xB!H$H$EQ8/ O8O^Ɉ' ^&_vz&I?dZkp9V̗2L6XbX)5WdǝN''19v+"Ř/8D';n2`2`6ajhEk4aX(2gshž l6v) .ss7f*vctt###xgyG^qw?*/bݺuxGq{s 4ٙH&PUU b/{~2D(S"M>l2OϤlYxVh.*UP/Zя⡇B(XLve(>00p\y;;;=SZ1/~gJ{ +VѬE;E `0D2(H$ g"H&>_QR)i%7_GNW2Gy>wnOEE&d2Kػw/z)#~a,[[PRΜ93aZun^PGG6ljZ؂A%d&wmIDDDDDDDDD4ACN*2\*l6 ߏl6+E1XEDނX΄sB bۡh`Xje.WD*F5" s`.,D"D"rNP(UUDd Zyb"E֜Fv]2l6L&FX,X,FL&vzL&X,zXVp8d^x鴌GUeb5V+vnGuuu""MbnRy+v>RJɎn.8nR9,=S%K?0T ^###xP- W^nfM]g HMV0''7'JMgeee^\s>.[\RbN^]j5쉈1^ e0TUE03@8r.C$q,> L&9kvp!Kyy3i@`*++Zang"(<n7~\/\z޼ rp_SSӂ;1OQasݸxAXt)ZZZ&4GDΛ_r)tvvx^rwl6-w/Cq>/U0]OFL&/&C>Y"Q17"WuSqvFVA,1 N2燈h&b-&Oח}-7pcDDt3B >V=Vk^OahǬV+l6L&,? D)ǃQ\r^W\xu. NGCCN'֫h1HR8χT*5^ӝS9Ns^o9SRt=#NիիWsa||\;rUVV^p8`Zh#s ! ]+rrp8z>*/-E={Vt:455;1Wh+V@EEE UD'Oocǎ'N@8VE[[;شi6o<9v_>,;ш.}x{ U.R y{zkAє;4dGDDDDDD4(WUX p`X `PxʠS\;g`0`2ds͖}l٠a6e`1ld2*[86wY,d2ɢbr2< DD4jłuGFF~DŐpC ["X ɤNcɒ%%žf~Re a__100/"BբY---Xr%?-F8tqA'R,`}voUGxֆ/}Kؽ{wuC/sO7|㏣w~alذ][pRΜ9~*^/rS6X OKv_\+Nu1@0D @,C(B(B,C @$A,(y:xp8ﺩvYjB_W^j 0nnBq$ ntaQbQTDDt3]wUZTUU3@43E % / h%I \&G4p-C2[ny,N2(raǎ»n4554G~|c=xGF} o===ػw/~ӟBC>Ocڢ488'Nĉqyd2 6mڄvtrwhnO?kO> ND L&( RFk "`T ~dPH HSEbȘZNN,YVTVVʥfCEEv;4p@n6M^GDx/*,79܀bq:ghQcccիyۅ#ȄԠK,jkkQ[[+,YXGLDDoP%o; M *TUE&)z ŒG޶lb0/zbllLŖcccPe}K,)D4W^/<FFF0:: =!oNNGcc#N'rP__2=2ʕN144s8<p%\x***؈+Wʶb tE;&LٳkX UUUXzuޜ#[lsfxWO'pw{;N rwpAܹ?rw_]@?#سg>m7FOOo&,hQ;p7ظ'Ouu@C*,}=;o%g&:Ŏ fS6En^ EQbs ׋p8r9z6#fiO+)wr21dqyR*G,GsA"sd\q?p)qhZ477@{{;6m\ 000ntww矇hhhΝ;Յw]XreIsL6ŏ~#|s^w]^5c9@4(Gy/^|{jݽE- ̙32/ǎC$NÚ5kd^PGG6o̜P"Hk46G+W o{HDDDDDDDD4M"!# ! ! "! " !H@Q$ aD"q$I*a$ Wﴔ*L&Fzl6hZl6zFL&TUUfAjcf:v:E"c;"BBUU 늢@QB!B!~ J_Y,vn6a`Za6~! $ޥ~Wꕪop8db->@]]s9b9ғ/5gS͕Roɒ%gի|z0>>.>CN%K&o)s[2=j"q, / }-[*p8 RGGd2 8<Ν;ٳxp8zj`ʕXbV\+WbohK&8{믿x<ł[n%ouc{{nl߾3x;f]&[9" @Q| 1/ "0ETU@d !׭V+, Llnh`nDD(2hO([X=NWUUUGDD["0 < %V7AŖL" bxxnW\+W022ǃnD"yMee%rrЀF8N,]Xt)N'D"3g Jjj*_mmmhkkCkk+Z[[aZ}Zr PN~;k.,_ݤy, {կbK_>/ע ܓ/_޽{uuuG>~˖-+w UUqIߏ'O"Hl6cڵhoo rk˯|ۀG"""""""""y#N(]j1χT*U|b8 mN缚Y|ƈf&}3d{ii,ODD7S2K1a)]|G)xvZHF8TTT>/G466A2>:(d>S?|M\xLUUUXf ֆ[֭c&ॗ^/K<jw܁ wy'Z[[MN:z IDATƧ>)_ռho>De2Kػw/z)3gJRy9===xWz.+//---e5w/sm?(}<$z5~=P[;;#"""""""y! ! ! "! " !! #9DbM EA,˫[ZLEECEft:8hZX,S`XufYZ1L)UUu_X /z_V ՚(A2Ͱrl6sv9 FFr; -sv;VZP(޼^{ DV6lhkkCEEE=t:#Gx'v҂w;ygضm[CM6͖DDDDDD LPEnB! dD"D"D"yE׊Fv& FVU΍Fchlp"$L±p_J,YCԈ&pXL2=DD4IǟRBЄ{UWWCN,K=ܑN1::*REw{ \.Y\C_l,Ѐ9HB%I e,VEss3!mmm,~OƋ/^z p8x;ށ;wy'֭[WnH$_J}{AuuuvӉ/sO+Wã> UUq@WWW(%I={==="CբUAooo֭[QWWWnэ6< \Rw>asZZn>HD(2|#y$htҟp8d(m4a2fc4eO"(N+ ʍ.),{DDt c]e`0LmSUVV =d2/G 9>"'7GףQ5DFOOO^13g NCa͚5@KKi`(w&d28vݍ_~T 7oFWWp]9.a{vm[ho>Dsadd>OϝC]]D]]jjjd[d t:]-lbctK,aM v166&'>yjQ[[+'ۧhޚX, Sty 466yIJE777CՖL~9lOvVBKKKFDG096 ׯϋokk7L8r8}attؽ{7tvve2tvvbʕxꩧݝk.\N~l6-w/ UUeAbs Ů+E[Vl6X,tlKG=f`6a4a6g""*  JIO՜N' K"pI8u=Rcc#G9F :L}sz?ڬ_OxO?4݋n[> ~=4._,^(r`i>??S,}o~@sp8,ssTUE y<"WGl^N V !v,rvL&F<_#"Zh7OL㡉h*5q$ ޼TX,Z s|rs{yfLUUL&ݎx8G, /駟hooݻq}aڵ"@?Oя~ǏGGGGs? pQ0esQ bl6?‹m,8[4]\ ʉ F^q|>-jzX,6^VK,) ;J8YAJ&ܫXqbf``~y~UUjjj@aXfIRX,J,_˶6~g|2?=^|EB!~7wcΝ&-0l>,_8}4>_2\.W6DA'_OO݋jЇ>={̝`G wqgzoӛ jY. &Cb!YB(K&!{K6ɒK0  98I8dn[fٲ4h4,iFu~x3H6w9#ϝ<ۀ8q 8w@TbʕXj-++"BD'>ѻ/w4DDDDDDDDDtfRZ@ U# ))IdffZȺi_牬>?m|>:cccӞb5:tMDDW.ux<LNNN{hv p/0q/ ^b$""""""" CCCZimWӑtQ? ݗ3~zz:,j CDsT5[L^+sss(\eggu<"*ÿIBn7N'n7<\.x`pp0\ξƳXt:Ŷ띶N||'"zzz5Il>爋C~~~OHHiDD4\S?3\PՈ_h Bp:36Bw\ZQBKi4,YDƙѵӃ466 hkkQ\\*,]˖-ҥKQQQ}Hv8rۇHMM 7܀M6[nAEEa~<X,ODd#5D9wƎ;p9lذ>(/9j``'OZ|b  !##QY煮p+g> /$?#""""""""}ؚ϶lu9'77=###G|Qu:󡿿deeAP@P ??_sDDt5C!VEi=S|IbH-d@@J'N0`2Dmee%f3f3O,B`[olPTԧ>-[ӟ4233q366Nb;233QVV())JyD4A444رcDZcpiLNNBa͚5ZVÇW_E]]|>֯_;[n]0s=xڊbÉv4PRp]`O\x΃DDDDDDC__HbLhO?2:dgg#;;Bvv܎|<33b ?}hR2l d#)Zj\9SR: 3-!-4b]-1uX2̚ha BZlfϟ'''CAC׋AV NNgEr3g؈466hb \+VҥKtRlҜv;`߾}xwߏblڴ 7o'?IUw1<ӟM6__j*ÒNHIعs' ZC=R)wxt###hjjMЏ?&B!`QЫ$wD$/`V[g>Q￐|~uL@'""""""""! N 1ymiϝfGjG999bDDiуvn7\`jMNzBlGoo5@~_4$''_LjnZU)jy"|FQլE#Ǐb'eUUUXbPUUJֈ,r^o> f3lق͛7cÆ \j>g&xZQDWJ{=Ft:aXhZԈvZj#&z{ `w(+oDDDDDDD?G5?1$GVVrssEM@ff&E@zz Qwt.*NDАsr!cި\XҺI99931̹?Bz{{E-LSA5[ZXDDWi|>qдJMMa:<0skLGp8 9IIIPT"^ARATBFmgee8;"k6mD]]]lp:pKVF1}> \__Ξ=N477ElB!>gfTVVXlޔqGcddYYYʛ;+ xс |_]w݅Rãk$ v~iámO\8/dDDDDDLk\J\$=VASj>Ү#%j>StχlIz4 #""ČMͥɨIKKC~~J2j?2727>>^-.p\"nG%vx^q|JJ L&H,(( H&.巷Y$ 544`hh(((lBWV;lo>[8tRRRalڴ r ***f|~;lذ?qFÚ3uuu2G={v¯~+?r oߎM6}188E%uWWWw@";/l,&"""""""hhh(fNT3vGZ@ږxM5Sԅ b'0KϑD__ߴIII.gjݎRDbb 3&"`||||bOEMNNχB35OOOiD Vݎa0`4a2`0j0J$qq1N8~$$$X|9VX*jæ9b7}Ѐ4|g?Yl޼Fi>{ruUšVى;w'wxt9NDr"CF z]6׿w`/""""""9- " 931::cOMM7^SscABQϑ|j4rrru~ .$>d}.+\hZQh4 Z ]}>߬Sedd5O9V*ìJ|pp8} ~199zjj:j_R1QrSgg'Ξ=Ug/X|vjp8hmmmmmhmm 娨@EEQ^^:7"t8p, N8addd`ŊQfyAC~x饗p!hZvmضm"Z|I?ƙ3gyZ{pX(HRc=_RRhzl~x)))2K-lӒ=O^W$T M{LCTFuHskA׋U,9ۢ:2͘/%FnwvvjF-h3P.,,dif[[&''Rf(T]]4&8{=wofA IDAT ш}s[|rIHGGl2ftF5688kwkQؑ9⾩K̫#"LNNUxzL},''Gb0bj~<&''gfj $\rfS^l2ΈhnG{{miibA @BBʢ Z)$>{b޽d͛yf|g&''k.?RRROn;k"...gΝؿ?|<\pԩVaF{/!Q =n^]pfH盚:cNcj5ѵ;Scc~?fݖx|]^/v;VkԶnZ+11* z:&j_BR |>XkK!O{,(J(k>ƞ S0}i?^>wqJɓ'Carr999zd6y$Rӧ/ȬZ5qh.F""""""9* W /LyyyC~~؞쨑%̉7>>%#sdiHQ4Fd^cp8```aۣ#˃`d`N`Z^ZZ[DD%bj D侴0>>u~d=jP(HJJit-nݰp8ZBףz>j[Z7';;[KZhjގAq|nnnB%9Nt{I?,CDDC}}=8E||<ˣrW^C&&&?/݋q|mp뭷"==]igϞot% OEDDDDD% " !LjNMMhѵ7[sXfn鹹Ӓb%XI L"""IEfkvr=ϥ49|LT"11Qѥ35E|o|vYY٢jJW N8!766cccHNNƲe˰rJXB |oc߾}aZ 7oߎ CE⩧Ž;V|wmNz/V+n&l߾[nE||dZqrŨFuuH(ϗ9b"7韀'&L :R x&&&=Wff%L̡#"zH_^L[Rju}Ffu]XsD6X͏4j5su`j]oZTfDnll ObP(//lk֬Arra611ÇcϞ=lƶm۰e"-`~?G ˖-;k...~駟Fkk+jjj#;D]bA{{;&&&jYWիQPP wD o? OXoLDDDDDDL?n7zzz+z{{ž =Ovv6󑟟xi^>>/d(Jj(JZ9 "5>>Պ.tuujݰlB3maiM ȑ DDL9ұs::b:Sc~4]-b鳊-5OLX@ N1N'\.:;;Z t:8jd2 411V|b`||٨Fuu5VZj]`0xoc``k֬ފ[Di /|;HIIO>{GdZQDjv܉{BT_2z!F# ǏbA}}=Z[[111JիWcbQ F#wDSQd y3c" {. ###QO-J2͘hn ^wcmKۙIBE_mituudL&[^db-ч4::   ׋sӡT*hP(T*VRT*c6?p!p3Ν;ȳhdjFm2!󌈈s"isjQTTBL&*[#lhCss3N:&q jXl`6QYYK";;[ȉh8};|00>>Fuaݺu"|^^}U⋰X,())W}ݬנ=x뭷сTpąQ]MRܙN},VR3p!.VܙU*~_4x{ 7pܡ5ߏjQ;z(JC&b|BV`z䎈hޛZs:!iE5^7j[ى# Z-\iJ5^GT27p8,y1GISHM֝J״DL8¹sKKҭڐшBQ#mK0%''<#vGA}}=Ο?t`ڵXv-Q\\&P&&&pax088c˖-[QRR"wH{xڊ|?я}?8֊ vڅ{g>G}7|3!8q"6 "_~xvLkkR] %pyiiiPT箔RDV%%%4C"mrrR>Gd%KT*kFyZJ})Iv;w]]]p\LL&d20L(,,dOm"appG|>IѤzH999jPPTPTOTiii2͎@ p:p\hmm$%%`0X V NbOD  tN{m|}Z^^ gBsPKK ŭ=++ 0ͨlƚ5khϣāp !!eeeظq#6lpC_+Ilٲ۷ogm]ԹsPQQ{_Wٱ/'& ErGADDDDa?^$E&I~~===:?%%%qXp}eee4[""% R”ږ&Sʼn)R)g %"(`p"M3Z#%%%L ,XIҰZ{dz&i,Ԅ>GE}}=Z[[111\^:dQQ!]1}}}x7gp7c۶mXEs }Y'?A||<?0>/NH(P(:x@ iu:Z6j!ȚdfIDD ] '>A:Xz4S"f[ CCCDƨQPPrP貍ɓ8pbk׮em.]p8ÇW_E]]zzzp;BV"-". ַ+ছn~3,e* jkkE -###x7sN߿W۷#77Wh ҙZa2_~-`fy!""""""YnnjjrnۑqNJJ 4 t:j5zM5 J%{f])GRʃuk٢z'''#//oZdmJgHE?:;;q9s'mwuu:ô4"d2]>vl6x^8x<\.\.n8N sR}STsVVEJJbbb8}4сsΉ ot/**j2τhnjVt9tuucj5 gӥ8y$Ѐ'O̙3GRRf3*++QUUe˖aٲe(((;l"&&&łhkk߸q#6l؀իW:?\.^xڵ X~=>|_Dffv0:7??j:*i9)zdc|ddd4K""M0\6r?rv#+ lҾhDbb3%"bנKiv~)u: -2KjהdF ҋ'lh|Gѣ8q zjYF4,..;\+. b߾}x饗;`ɒ%شimۆ[;f3_ O>$ '"%!z]]̑X,رq=CQQܡLpԩfb7Sp ϗ9b"W}'?LX]|DDDDDDDDȇu^/|>ߴ J%Z|QÆDD=X@Թgjs$"+. kl>Ҿds\zƺ!V}X[[" 5=2φhqp:bA}}=FFF5k`Æ +uuuO9sf۶m]w݅RãEfll =?Ə~#s=r5šVeXsN+w܁먪;4"k<n iTWW#--M戉rrf>_ 1>k]9NݰlZlbrch4th4jb8#"tjpt&bbbB%^z=j5 UTtׇtttb~o.**FYm:)͑gϞE__8>99yyy&"VNdBBB3M\O>v={J2q/,,DDwƵl6X('''TaaEEEHMMy&4'ODcc# >`ŊX|9PUURw$rP__/օ8p+V7nG>jÝS0ߏ_x7{_WtRãy +WDmm-n6ù<> ,_xܑP=qp8,wDDDD0E6˝QfXԹRٚ䲱 622F. v]$H6i['""̶p|>H\Jsi_T"11Q\)T0Յa@RR H&K,y6 ɓIѣGz2ԈUVP(?سg݋P(믿snvdee" _?O cGlDI d.ݻsn㦛n#<͛7sMB IRB`KՊ\(zx]!""""""EBjzy:Ás/5o`0 ;;[$ u3Jv gΗK=BV:"GZ CCCDiu=((( $ꛎ9zv[ IDAT$&&7nĆ PSSa"v;^uٳ`֭[m6lܸQh~7oHII;9'..~駟Fkk+jjj#;`()j, >|i555Xz5_7 >PX>,w4DDDDDDl6[)u"Kvp8p8`Zt:aat:a YYY0 h4h4"7RӉd-CCCOFGG|> yw(--EYYYT]aa!e s;sXff&F#F#zmyӕ2223gΠ%껁&x<wz=f3*++ŵ jZ }zYc[gDNbAKK aX D=NMM *++a6n:T*&ylll 'OZ󡥥P\\,jjjn: ̠uuuرcZZZPSS۷K_~ǎc-]i{pX(hnnfMr^HL$''CRA@RͺT*ᇈh^. n. >>. ϟ:7--M+J(JT*VŶRdA  @>n[|pנިsP(T*P(VŶRC K,iD4 ̙38{,Ξ=3gܹsj( }QEEEj2τDss3}:t|Μ9Brڵkn:YHMM9bkrr.vލ7x`pc֭˓;D(ؽ{7~ w]aRC:#krro6yOu]?Ӊz0___ǃ%KWիfZ Dy<fu6 """""")zEfl6tww6 V6 vN3*w2??zFzz&IlFdff8#Zv;Z[[҂V>}OpdBii)JKKQVV2 DWW{iDە (ʒqF~455MMMhoo'&&/]  CCC̙38s :;; ͆q@NNcĺuwwb8q5]VcXj/_+VfqA:tFCCƠT*E_k3%8ryݻRh;pnF;'>!w8 a """"vptN. ✄j h4=9ͅۈp8,ÐnHF}@ ܜT*łu@j. hnh|-5DzQE;qqqz#}P(P*P(h4QMϕJ3%G5Fx<.,g4EvdC"hZ69' رc8pHCff&֯_/֮]k&-*V/"vލ.\뮻m6j#& a׮]O~><ַſ׫Dj^WW's$8}4^xܹ`۶m?+WQvE4EABBf3V^5k`͚5X|9 Ɉxu M䎈!)gfvn`rrRV r5V"{ɒ%2Ύ$@. N3NrzzzΆNQTjjwd-D5?Rmr#̌^T*TZZ-SRRd)E^gϞ푆0`Z}![&&&؈}|>dddnE似<åѣկ~^{ ccc 'LēO>(,,O?O}Sr5šVp8k.<裸YOP__z=z E^^֮]u։|C&Z_hn|ظqcGGk<211N bBJ]w\;&&&t:ݍnl6XVXVtwwjb``@$N`hNhDjj3nrrΝz_܌6P(`6QQQR 2πhnGww7Ĉ|_ ɄL&FFz%h!GKK N:SNNklaٲeXt)JKKQ^^21@__Μ9N4n7 L%%%)rp8N?~ǏdaժUXr%VX+V@6-R Cp!8p6 XbnQXRR"w~`ǎPSS}k/}c_"w(0 a """+trΨ6JͅVNd2!!!Aƙlh?>͆1q^rr2򐛛;u 77ISDD% 7:3ӶxgOmH",===hkkCGGGTc3gΠB\wu"%%%(**bayo/CP__Qzlܸ6lƍ|r.5566{^P(pwl;6l؀~j*-/2vڅ'Obٲeqws ]8/oBַ{s.Q\\jkkE o###x7sN߿eee}vchooqX,"CբFpjjZ>Q?Chd1666UӧOTTT`ҥQCP= t:ojD( t:Xut͌C?n A'0ͨ@ee%1|iX`0]QPP~tM NBKK  ̄lƲePYY)n˚zαL4***.,h!ȑ#A||SsF%K8S"Z(aZىfm x rf2+8v?#9qfqF*l/Dn ۷o-܂$#ittwCx^{kDj^WW's$tY,رpDAAܡ=_$GHq~!Ӄ8/V|||JNl B` ߿>o:u FUW]EZZ$$$H."yy`ɒ%YFFa#''M6q!V^Ox䑋ow,A`M!B!.fl6VRl6ttt i~C||B t:CFUU  !$$xRժ'b,|=c񄇇w 0V:_r8z(;vlrp>Shh(gVFXXgh4JgqYԐ|?~]=BOR).^ZZJGGp.ppQtzHHL#ng߾}hnnF}tn&Sv222x{ޘ%Fn^ux Yj>(z^wAwyGHrx7ocÆ ,^#Loo/CbԩbXa6Y1 <f3l IIjG$B!B===\.%gpP[[Kuu5بl`qh4*BN>M]]lhhW{n0h4z4 Z@&L !M?5ǽبw|???l4!ĥ|^nfS-. 1Lʜ=!F||}}IMM%==t{."~_o~6n܈ڡ @mm-[l77 qqqj5"yxxk.%H>Of׮]>X∎>d B-N\Nxhh(& HHHȐ 5SQQAQQQXX\1w\㕥d>t_cǎ 9l6JJJ>k>>>zL&yLFQhii!77CKnn.7LRRW]uvÂׅ4ܽsOuu5^^^ǓbꫯN@?׿xٳYn{/&MR;+FWΝ;Yr%EEEE\N=ԎB!b,:y$JtweK~֬YJatш^Wփ2Y!1w1Ou\vN' +quR !ECC Js{8NΜ933gD(9jh4e}֬Y !ƪ3gPZZJqq1PZZM& 22HuI&E__+{I&"E…Ç?Ȇ { z-{1jkkYj>(z^$wAwyGH͞={`߾}DDDzj֬Y#/WѣGZʄ#GߏVb(C !.r_~gJB!B!\.CᩮVwWr?VKpp0 е;G \ !MSSӧqi3>>>̘1cH~dĴiT3!AOO444P__Occ#J墱Fۄ \Yf $ Yfhdkll͆fÔԩS|(e=""B 2 1466w^Ç~HGGf믿믿 2acPvv6?Oٷor_ÿYp!\oóϪXc```@(B!FѵTVV){^2AN!NꨫfȺpzCC}}}gtzZ-z@ FYJ-!8Nk1e-}ܜ !9ݔRZZJII fQUU&MRbbb!22R Ĩ?wN:Ett4K,a$''B|Bii)?8wfΜ9lݺo]bX᭷pj*nJPPڡiʑ+ȑ#W_Ã˗n: IDATMgΜժODwTf̘vB`8y^]hB!BE-򔗗se[wa L&RqoBttt(:筻\.N8lFA 1 JގV"B!2wυr|766-u|VΏ1B\il6l6%%%J`̙3ܞ9sIdd$:NȅncϞ=dgg׿unz.Tǣ>pBn׿uB100ˏ~#Z[[y衇xQ;Ã]v)9@blp:ddd /pIn&6nȢEN>MIIҬ('''NEDDҨ(55b3bcXhB!"??_V` >>8㉍%<<\rTrJx @{{;;vlnp8`ĉ7BBB eڴi*0 ??*t:5B\\QQQRsXr} z z/!!!a2&MRyO!5HV+L2bbb:L8Q9 ^jjjԉlRUUaj!}w"*p8}:IIICFQ;1Abq:ʼ欬, d2mNLLy͗gW^+VamDc /i&0Ljsy|1|k7v4cnB!iz{{jQ^:HHHFHpp0`y .T{{;5558Njkkq8Jtáu?~R,=((^NwRL0AŽBgRWWGCCt\H]]8qt:jy/00@(֪(,,H)^YYIoo/DFFb6#&&XBBBT;t!.&?>>Xd r j(İTYYOS~mbbbOʷ-X'z-qVb֭bpDwTD~͆baÆ ,_\ DKC,].DFFrUW1o<*Ν! !F?OOش۵A{;H"B!BSUUv8Z !yh4%' FVe*B ݍfÇsal6uuuL6 ٌlfΜ9R0 16{nCqq1~~~,^[onA$ >|[gxLnn.<999u]<֨] 1twwg222طo^5kvxb\rrrͥnf̘IJJ"99di p%% 7p롸`֬+B!bp:XVebہs-2,XO>Iyy9 ?Caa!xcҥY_~yȟ&sN>Mee%ǎtٳ1L*C}}PZZfSyjUxt!~TTTPYYv1cᄅa2 ^/} İÇZ呗Gqq1L2D͛\̞=[_"rbkiiرcvl6rf rΏl6c2n9x  ;;Zc̟?9r^z{{)**"33,㉋#554f\˪_ܹF/sőcAxx8wq>\^s/~v$cnB!nnt:q\ve R@Wӝ0<88X !0сrz}}=_WuȸqT3!jinnr)zN' @mm-gϞU>3n8๻йVEѠht{ӦMSq顬Be҂'&XfsbLinng׮]|x{{s7s-pM71c Cb:}4O<;v ,,m۶qwHrֺxxꩧp\s=< C ;*G"Ԗ?{̙3Yr%֭טּ>Y,'''NEDDR$--B\uΝvDB!B!F!wυrx>^?oN{Ȝn!P_WWuuu;gLJ3f|jNHH<B񅵷rW|QihhO܄ \Yf)>fRr}>RPM1577SPP@QQQZZJOO&L &&9s(=111 ;~8oo`0p뭷rmqWK$1,455uV^~ebccyYda 1Dmm-[l7kg!..NFvڥ+??^z;ww֭[';. !77b ::dRRRHII!::Z{ 1wyn}nuB!BrˡCZ؈g&11Bbb"? 6O~z).\ȁcÆ Z Ē%K())QjB}Fiir-pG ;Zl6jU!>[__eee呗jN&MDBBy1o<"""de$!~)//re___"##$**("""gԩ*РEVVL:$RSSX,,\Pׅ8ɓdffIvv6V.Y`iii`XRTTįk?~ڡ r |I~_PYYFQ;˫Վb-B!z{{U&nze)S`4 !22o|c41 \!gR]]PFMM NZmmm'N`0 n@a0 B !PSss҄tܬ*???t:F){,@B[[GfaZdƏOxx8[oLbb"3fP;l!T޽{ٵk?n#K,aҤIj(İϛo͛a[NŰ/̯~+Xz5=4bKKK#-- IFF/O?47x#7ndѢExxxet::nH :G{w`ʔ)̛7$ebԺfط!"ӷLlB!B!Fҽrփx8bZjjjԩS`z`Bs}.|}},\PyjhZ"NSZZfOlꫯ?!f9svB&Ovbs';,//WO?M__R=8⒘6 -:7>˷UU}CB!B1*y;v*%44DBBַ !$$(sBeNpPSSCUU^SSCuu5皻 0 ǣ1  z̫B񹵷+9=\.%AoCr}&L@`` Z"##Yp3I#!ht:9DVҥKX,f)x*5'|yٷo&MnIOO<@1߿cǎi&l”)SKEWW/?/~/¦Mƚ5kχ~HFFs7ofժUMFzz:yGQ$~l߾L&X,HHHS=Bgov-TVBB_B!СCtww+W^baBs+n'NP!>ȑ#=z#G(3n8F2gs̞=0!>Y+++~X,RSS%r!.)//#G( \HYd g&<<{'HE~~>999pA$22OlyÄ(++ȑ#TWW3001LDGGκu눎&22???zzz#33?,N:Ŕ)SX`+V %%dNvcXt:b߾}dffRVV'sG뮓*+O>$ 55={xb<<<oXcSOɃ>v(b ;`B!S >}///f͚Nd21oѣ8ϟYl$- >}-[/h"vMDDa qQmmm<䓜={իWCjMx{{tR.]J~~>/[lG;d̙3G0ll6b Μ9CaaRDeǴiӘ={6&o`6V 19NV+YYYdffOGGSL!..T6l… U;\@/bEEE9sOxLL 7p%bujS˲eHMMe9 嵵QVVÇ,8q"p5Itt4&ǫٳ(J@@IIIl޼TV;\d$++TUUE||KFFlܸo]_+jɤB^^\&b`XHKK#!!A& !. HOX&N&B!simmcǎQYYvL2EmFhh(&P|||T!:::.c۩Q+y:YVN#<<\!T\.|3x.f3h4|jX,@t:RW1fiɓ'7nQQQX,n, sΕbBjjj7W_(z!jO_gŊj$~!7oo}[۷B|Nc۶mlٲ={׿u"""Xz5%O ӦM#==?#G(M?oRϝ4w\i2*pݾ}[/o\B!Bq͎߳7H, 7X,X1={2l6>|2gܸqYbDEEvB\RgϞ@Gqĉ!uVXAjj*RK1j(--\d2Mjj*W&&&H_K<4662~x?>k׮e- IDATB\RTTT`ە6#Gߏ7gl6j*f3111DEE$18qLOff&FZZ< DFFb|r߾}I&ʕ+^j+.v~3;M7/Lbbڡ q???>Cct^B!zzzرcCpzgg'&M"44PXlR(=44I&'B!$Ϊ*ZUUU300/A/h4JF!C+>rSİh" {jPqHqQ^y^u.y2jkk9x $''|ۙ:u*od̛֭7Pb+**⥗^bΝtwws裏.uSNǺux_f߾}?~\ƴ'On:yV^ۥN8~;}Yذa7n1vW^y^{,ݻy嗹kx'L#[~ӦMc͚5{_"##˗+X~=z^0=\ӧORt*X233yw`cXa6U^1\  goJJhi.B!LSSs1***'N`ܸq+;-RM&3gTy/bljjjjH{TWWڪl;sL1 p7b0&88@g-₺ijjseCChZ,ː:U;1V]h~YAGG(OOO֭[X,$$$HmqɉbZ7ˋ[o7,ZHa׳sNn~ߌ1zm6vMzz:VsE}:rNۛKtRxy'ضmK.$>>^0P7ٌlfŊ>}Cje۶m JKKka֬Y*SZ IIm^L 5B!N:Ł&++Cގ)))|{#55ɓ'zzzUsSssso~n:εA{{;eeel6JKKll6LJh{$22p|||_ˢl^X`[l!99r} ƺ!j&O\|k_#22hV9z!.FM`` ,`$''Ȅ W|r?(--ÇS\\LYY555L8henl&&&<==U^/طoxxxEZZׯꫯh4.F^TEL2JRR=ttt/_VV^͏~'꫼ rC\q^j Bѯ:v2ܓjjj_ 0LL&,YL&-ĩSfHijjR'88HRR˖-S 4{"J줶:uuuQSS墶!jHBBZբh4;~9aH,gϞՊj%33Ǐ3n8HwAZZ rF~rw3}tC޽{`߾}eV^-/3|?g``q\̸D;{{xbC/gy;v0i$x6mĴi Y~=smi&N:W_iVy"OOOIOOn+3<íʚ5kHOOW;aWt,Y87Ỽ\_o[`U!Ĩ g:8yn B!BCxܹ<6Ə`d2˭ުDGG3qDB!ƞVrv;UUU={8|JJHHr Fш` $$D!Nt:q8JO}}#e0ZTUUq7U!n***(--Uz?l6SrbbbMLL (ƍvB\6Ouu5^^^DDDƍX,f\G~@xx8fUVa6!::Z~?>{~YY}+WJLL̗S%/9㔔pa)))ѣCLL skU'裏ؿ?}eeexyyȵ^c=FZZڈ!Cbkoo'??_EGG̛7'a z)ڸy% G!$$+W ',P;1c```@ B1]X{TUUR =7ЁB}_|v6mDFFw}7;vsv{ >]uu5o`ڴilڴ׏۶m㄄|`y~}c~w޹$ޅ~K{ϒMBBk׮宻2e+hkk#//\eAdd$W]ugKat!W]  rN:0k֕M!B!T.V}Qڀs1^!28;p\LwOhh~F-tt:q8\.%ǝrV>3}tzFQU3!. O9+r:{,R{8@ss3>>>$$$0|HNNd2\pɉ[9Ž;Hoo/˖-#))IFkHFFwuר%̙3Fڡ >}ZaZʢɓ'OZZ2c B|`pŷkn>0NB!rСC|s'O2qD͛Gjj*))),XW߮gVկ~ŻKNNގ;wÒ%KcW4v!>?NQQʰMdd)::9s&9cbL8qʵA~~>]]]h4Y`)))̛7 &@F;vBJJJ(--NooXd21n8$77LΦI&DZZr@znrcӧfaZ)--PjfbbbX,f̙ʑ 544~233"??OOOΝKjj*iiivQC1]]]hZJLL+溻yyijjbʕl۶ Vvh/Νˮ];G]o+WjG3V'B!ܚѣTTTPQQAee%ǎ?ˆo&,,0L&*B]8N8~8555TWW7^h$$$oѨ`9 !(ѡ4p7xtR__>>>̘1NdꫯVֵZ-:(_Ű627Jz{{)**R&]gffR[[se…l޼d)7v_bǎ|hZ6o=C@@ڡ _gBߝKS_LII wy'!b|ąSOsNxXjըhE}3gXYпXoq~ҥKYt)V x6o̲eظq#111j9l|㊸cEKr|o 111rz!ann.ެih~ Ya)''QQQATT.\jXXX@&cǎS{^sNDGD߰yf8q666Xf Ν ?R{s;Ղѱ-tzjTWWK,k-wufpuuE~~>كlܸ&M<<<Cٳ'r9r9XŁahii2 ...pqqD"9zX۹``য়#}l1c2={8s bccq W ym b7oRVVD\p.\ŋqE@SS􄝝Fhk-(YqDDD ""HII&F L ;T&T$$$… HLLDii)`cc#F_Ĉ#`oo!C9HDEE!22jfffJL&Ø1cx~?Ljkkqe? ?"''`ll#Gbȑx1rH1=z9rZիWqi:u |2ttt0zhL:| d2 =ܮ#44Euu5$ d2lقSZPY ]׮]ܹssssCT/_'''̜9SP uG{M)v1k_~5k+`̘1իLMM Fee%&O 6 $$(//GZZ?;6m>@~PPP?}􁹹98Po`888@OOCŏ?444⯿~@2֑BR ,Y/ѣG 8nnnx"99={ij>͛7#$$P™3g{n]:LCr4x{{Άzsh[oKKKpttDxxxXWQRRD;v ܹs1uTݻw1e,\vBRRu?Xz59ڵkPG\\yfx{{CPZZZb:cMԼ;d^]]UVw0`~'al( 2 ϟ^|2q}^3Ć 0m4V70|9r7n̚5 V-q8ksJwp$***{n888`~ X ~'HRaшoΗ66_~e'<<{쁻;VX!Xf'$$ݺu#"##ܽ)]ݘbaÆ ϕ6z֭É'PTTtΝë kkk`ʔ)ѣGq-gmzEL6 =z􀵵5݋~W\'`9o͍VVML1c1B7n@tt4vڅUVAPɓpb֬Yعs'q5ARaX~=͛www 0@Cc0`j5222۷cBގ!0w\@R5S^^L>}v킯/Ν &`РA1{$8_8{,~Gl޼>^y<㰱An,ZAAAHLLDn0uTXBll,P]][n!..GE`` |}}T*1m4HRSg_9~8ƎnݺaРAزeZs9? Oil cͩARRoߎ9s`ٳ T;w"11999طo0v;+ΉhJKK}v9O=JKK~`ҥ011;Dq>G\^ ht555سglmm;`޼yȀw[k~BK 5wwwXp!gWannoooc߾}gyذaC΍h piEaϞ=HOOGAA~'}/@bb"~,YG9)??ؼy3̙{{{ƍ{gX 41"""P\\˗/裏cذaP{222{n,X ¼y)S 88ׯ_GBBmOOO I$dP(ۛ)88`]ƍiԧO8;;\.JKK# 7nggg:pSXXݛ ZGER455 B CeBSƧ~J+֗O>>>ԧO%BAbn=z444hΝTZZJ۷o9yކҲ3g266&-O~~~TPP@ dooOK4|pr͛7iرn߾hl}]MQQ͚5455ˋ*++U4UrmH"""Ã444kٳgI__>3*,,`֭L"jZ^^NhժU~;wUPBh5Y5YBBB:f#\*+wX*++)..ӓsDBOTQQ!v5WVgϞOtyaR]߃6U]MԳ'шD~~bGc1Bj5%&& ry/ <^^^H!!!#9<էVҥKtq/iٲeϓT*^z uv5WWW3gЮ](<k8_U[[KK"z_$LFSm133#gggzghѢEn:ڵkPRR}Xj޽dffFgΜ;wŋ ݻc!%%%B>>>A={$dddDr|||ȑ#}:^ׯ/_plقÇcƍػw/|}}ٳall_~-BJJ R) 66;whX u?¶&&&H$H$~H$zuXg}1c`Fuu5 hݟz aaa񁖖 &M–-[7cIaa!QPP .z sssoff&.H`bb"1;4h!޸vZ>>puu)1:\T*$$$HHH@VV_~prr:j\p EDD***5J%&M޽{*cABBPEEE\e<;Tw^]٘;w.V^ݥcX/ <<bº8m`1ؿW[[l"-- .]BZZҐ"!C`Ȑ!!C`С4htuu> Էo_\(x"]Çޤ$q0tP:tgpw^z!88R%%%055YFVVX+WL\r׮]۷/1h r 4HʊSxwBQ--,,YorĉѣG5oڋ [ޅpma{DP|${;QSwo̴uVyKn`ff'⭷[o~Ϻ[n!::шD\\ajjcѢEpqqssd9޸g Z~[nEBBƏ={`̙;{(..Fee0ܿ\%t i}SSą AgSSSO?k֬O>S%5UǷra駟FLL ƍ'vh… p^}z;:: ?:~~~Epp0 L2EX }AW} ӦMôi ^tIX់- .h+tƋr1Q3g}4g&!Xh8c1c+,,DFF,wrvvv]⦈c#==v233Jw  A`kk'|Dx2Yg:̵kא\dgg#77yyyB^^PQQ!l߷o_ 06l&O XZZ >cܹs~:R܈#pM֚ƺr!** ш7Э[7=SLƏߩ=8's"ڋ ݻ7oFBB\\\cƌe#Wmm-6mڄ?rvƥ;:"##j*9sr* NNNbժ'4wMuf* /_|PyR5kرcXp!.GP*P*Ė-[xb|G;w..\oP9CP@Pn߾XDFFBREEE022رc! Jccc{ m'bOϻlDEcFF>>c1\~8}4 mmm8;;c̙pww 뀪*Rpyܹs:::2dR) R))ΉӧgϢ0afϞ WWW :TPcEj5.\xT*#11UUU022F7|F-7uiAXX/a̘1x:)cupU؝;w.R)!HD'Nĉ@YY0i$|74i1I !!‰'P\\ zps?^ʕ+aii)vh=Z^=Ə/v8vc(,,DZZRSS4VMD-r9  2'ISSׯ_ŀnΜ9X~=ܹ۷o /28 6_~/ܪ3Vz$a!H3f72dz!0& kIXaaa!ܸ}3VQPPp_dffo'`ooR)neekCue3//: l2hkk K/???|Xl֮]9NY痚DEE!** .] 6 ...7oƏ u!Zopu૯Ž;pm رcYb~7O3g`ƌZ>O͵-Xi)oAgٳg#&&6mWk97?իW/;G"%%@ w1qcΜ93gT*oߎ%Ks;#AfS礥{{{cΜ9R$$$@R!** _5֬Y---B*2 Ç><{+pquHFWMc1c]ZryҐ"\RRٳ+`С:t( nݺ|𰎨9u{d:H$X[[3r8_1B.?s{pma{{.,Ycii7b \v oZsXWPPhDEE!&&* UUU077L&êU'''.k#} qT*l޼C^0|ۼ(C6l};v G>}cڵZ~Nwm)??2_|ɑ#G0o<111prr;Gft&%%%ꫯqFj̟?,--dgg7MgR)c׮]ꫯI&ATbƌ;GCCCK,p}oQ^^., J wwwW#ښ+umcfҤy1ԩݣ1c1jߛ˓T;FٳaooDABK&{-HKKeBӑÇGE>?aב!'''999}}}XYYa𻅅,--ѭ[71Vn!={'uSSSK.՛MMMB*^+1Ήhhܛdbb^{ /C|%$$*&?t&q\x֭Á p)L8QX;PWrkڼFktR>|۷o3>pttL&7N*̧cܝ7&JT*!J1~xr=_~ϟ1{lrCGGGPcTJJ N:ӧO#<<7n@^___L4 vvv|މb \.Ǟ={cc >>>*],c5Xzj`bb;;; aذaƆթ+u7ZwѳgOXUUU={6 p9r6mXZZbĉ1x`XXX 3֨J6xzjj*JKK4xa``` 01[iiݯVQ^^.,8ӧOotߌT]G~~> ~}]OC" 氵GkHUUC"""y >j56mڄ?͛q!&&Eg_II Ν;HatZ~aXp!\]] }}}e@sF{o$ƿWQQ#G/Ξ= T̙3d+űcpDZ[rN|sm/p9yS>7WΞ=xzz0Tۗ{C%CChymgV퍭[b/;PSuEe9j^ "̝;+V@X9 IDATM;|rhjj{-Ywq 5 7c ׯl2:u 7oƬY Ho_G޽Utվ6mߋTtغu+HHuuuL&3㵡%KÇg;\[ kֈc1cߛ˓?%%%ސӦM71|pt]#`& 5,Ÿw^\.R~'cq:Jܸq \|Y 133{z=܎0q=ػw/lllh"tgΜJѣ\%fGii)hܺu pppiWWW.kG8's"Ree%>/1115j)sGUU>]3gall,vXh1f9rD5OhPcy0NNN8p ۇ7 }\`֬Y,BP@PҥKꫯn:BPw߅a>Vfܹx!hڵq (ԚDͭS0哱#~=sc1:"44ᨪ\'OF^1ZΝz*`oocbӦM3f ~Qݣqqq8uN}Dtpc֭[О={*++i̙:<9sPQQӈ#H[[㤫K_5Qvv6 6m֢֊1NAAAT*Ύ444I$@JLL[֨F "@@!!!cJMM쿐O>>>djjJP((22R://%8q?wرcMO=Tv~@...t""Zz5ihhʕ+.^HÆ ۱c *--o&NHW^74[K4;rtt=z?ityyy>׏|||HDh"@ eggSzz:M:15]=|PRBBB* R(~VDV{KMM%ooo211!===R(-vXNSDDGّR i͕瓖}tMJ333 GO&:yMa1c)**B ;;zsH.R$a^8!sxأTfrwcuXGpmJLLGR@@-[ ;̄[ndkkKSLy摯/}wtIJKK#Z-0Z}U=())Esscˣ`"LF:::B JCeDpND[((( ???0`B48}t999޽[phOT*IKKFA]z? -&POg<'z'?+..@1b TJBh*\~XKRRRm߾̙C&EF"///ڿ?(***#c*-[VhONj'cƍ|3cuT555R>SR ЛoIYBG&}}}7yFrkW@mF'Nŋ7c /YZZR@@:sĉM6 :tƎKQQQߓPkMuj5}dmmMݻw#FЗ_~#\`ffFCGBeݩ?iڴiԣG@Iv+W&pm|>]UII EDD?) ߿pΎ<==bXRQQAzjrqq!mmm GGGzwѣ]v玨+͝$斎o)..&???rvv&Zj@k?vIJ׏MF֭'N͛71Q]~IT%w.ߟn'Mo6Zػ2:~8c꒻;[Ξ=KbPvv#dooOb*z%i9U{s 0,Y@Ң숊Ŏ 0cYqq1;wvM+V3fÅE444ʊNJK,N<)z2?c흻{7رc=uV""ھ}; $00wNƍ i3DtP(HKKLT^^.vX+W)'}H۶m?~^9`"}idhhXo}Ą;FwܡR(dkk+\Xx1}T\\L4w\@˖-{*//8@K.Ǔɓiʕ?\#ƚpo‚!r󣸸.y=3Z~ZTUUQ\\mݺ<==֖444YYYBM6љ3gTpk)00 ѣ5@kՕ$斌oՉСC믿˗/SQ'??9B>>>AzR)yyyQPP%&& ~~~$HSSH*7Peea{p6mzkֱwV555B$˅|DBJ]ԍ7ۛʊZZ_566~z244W>B޽>PH:` ""0cIHJJBrr2222333ADagg{{{H$FFFbcZEE򐑑q#99}}}C"z" c5RCa"),,磠tD"}m5455E>cbEJJ bccg"998p ƍ :::b?nݻK.aرxP(+vxZpp0JJJ ݹs;w.Ν;}."??o~7x{{?7檫??L{ӧO纈5^pmcPTؼy3kx7amm-vh /^Ddd$T*T*2 RRcƌ6_c…亊uMyy@j*0iRTTo}]\1cCHNNsE\v `llߗ3|p&c 999 ;G[OO 7/nu`Z^.?¶&&&B[S#a1&6"˗qYٳx"ػ/EPRWAu 4n^mjMmW4i^+~ݫ2!*.6/+WMT0~>18ߟLHHz}ҲeKC6Nr"DMx"֭?2i$fٳjɉz+V4/dN>ͽ  x뭷ݽZj?nnn3>F̍|2<,YYf)lj%,,;w2h {1Ξ=ەY,BCCˣ[2i$#??j?EYYݻ{bX??? @pp0[q+;wd2a2ʢe˖zF#z`݀Hjr?y5DΝc߾}ݻBZjE~l۷W;\!ꥬ,~mLL mۖ!C(}Vv.5V[Ƭj5>Pc޽#G2f֮]K͕2>p^J||駟8y$M6GW^R@~o+mFAAFF#ÇUVj)nBikjν!9}4=111رs}1h F#FK.j)Tr-[;#=/gϮ_urx```sOcxyy1c ,XPkRχ^S;h|B!WYY999dee)ғ9|0/^X'&MBJA^!yyy7,Evv6@"FH8!D#`ZZj!jQ^^?~\y:;;B5kF.]pwwݝq1k,<<>+WvZxG/!jGzz:ӦM_򼣣#ZIn$6nȴipuue S>C~Fbaj&Jӱf{=V^G}/EgooNC)ϝ9sO||< , //'''t:IEr_O4^: =c&6!B!TPZZ/R%'%%TeN`֭h4hZjk֬駟e<ڵkСClܸ0SNIIIt֍`@̙[ożyhڴ)| s{8'>/חSNUi.^O?l&>>={PPP {GUƐ"***l6m68|0vvv3l0BBBo@IoW'ϭޟ^R||r?)55 <==?@@@&پ};qqqL&qrr"44^xaÆѻwoj@sǫsv5>P^}{l׮_~{o>C}Q\\\Q… WZZld2! kWB!FJJJ GQ?jYfxyyh5kvB ;vcǎUܹs;:w^^^ 6LK)!h<$_q)..ԩSUry*cǎQPPFy=nnntWXL!D͹r 7t̙3^OPPNr"ݺp_5VСCݛEOȜ3`:u3fi&Mƻ+sDywW^|g<٩B!""" --̟?*X١jjDFF,jkXXl¶^F{YBزv 8fP;!BɓűuVL&3bOСCeQF̙3ʜJ^^^dgg+ϥ7|իתU||g+[}xRSS9wÆ |ؿ?Fe<^v-֭S]Y6;;O>5kְe˖*_f͚?7֭[Ǐ'RSSy)))!11?sRSS)//Cۗ'D~MlQk}_|֭[qvvG/ ((HlJMŨQˣK.L0yU&nVʈ_cǎرAɱkw!wbb"|֭M6̜93gҦM:65ݨt[n|E#<|Xyj7z ___|}}޽[}WTTDff&)))Uj9rD)aooO.]W^7NJ!𔖖Cvv kBo<==9r$֥K55B?fkmk+9t萒?jo߾DDDD߾}i߾! !9Kce֬YCll,͚5fŊh;`]VVƲexi۶-۷ogȐ!uv`M7ͼ0`6mDXXXXV~6%GyGyD lK,7믿fٲe鈌dҤIl]Gsl~ر#B.]bf, f͢:`@ӯ_?$- O>!8B!hطoiѢzya4tj)ꘗM4a֭[ʸ˗KJJ={6Wix衇8tׯ/ߦcǎL>Ǫ[S9?|V8{l~n$++͛Ӯ]*ϟC m۶j+Dwyv؁db֭1bݺuS;L\OCddd`Xسg{%==={ҿ-ZDj6WNvYvލdb͜9s3p@>S\gqs[Әo4>pc_ӱcGz?c?~<9r//XΜ9Áb`Xz*׏ɓ' U~Bm6l֭[9{,;wfL>Cv.I^7mzMԹw||ڵ+Wyg:t|׉_d׮]w)cd \k:^S\~.\֭[3mڴ^!jTBaJJJ8z()))$''+XV5kF׮]h4t: 7o>Վ-D&92>#B!PYY999Ury*?^j vL_ݲ*y;[FFΝ~/A=իǏWryt"~j_3%_6QNONNeee:v숧'}Trzz쉋g"uZիW9|0 Ur{JKK{ ",,ӷo_vv†INDҘ_?~DEE裏J4ߝkyǪ[SRRcV+Պ:/Gy;wիWٷo .,X@y͛oIHH/"<?0}O=u+--+_}vvv~lE~~2c69pt 1 ի !nj vIEE<F tGuD"Q_AYYbg, Νё}CBHH{ Qa6i޼9ٳgc4 WwXO_c„ xb&L%K:>P^^NJJ fY8~8vvvhZ I gϞj+DEtt4111޽Պ?SN%<<\Hikr&Ͻ>|2?111lݺekhDөN<o'|BPP{쩲&@C&񚻎=WPl6;;>˗Z^jvB!Dup cZKgܹhZ4tĄ撒r]Aܔ^ @֭ǏFZR Bܭ"rssoX p_^78+BTGAA$&&*SRR(++Ņ>}0`f͚E߾}ѣL%''qFk222ٳ'3f੧BsİPU;,~z{=lڴ0 !D5^W gaΜ9O\\K.FHHRHQ>M,8{t: B!~*++#''J.OcQQQ|̙3%G!j@ii)2G)//~h4hZ”Z-Z|B!jdddp%U]tQ^_%C!cyyyJNOe~Ozz:eeeҧOeBغÇ7߰af̙L4I^F!''o| <ÇvX(//'66 hd޽B`ӬY>Ceo!nr!Oܹs\4oƍ,\M`h42dڶmrBfgǎAN\ǯ-/M&.!B:RXXȏ?dbͤDYp!<ݺuS;LQ,_WWW>S>c~a.\?0qqqTTT0jԨگ`` boocUGuСϟ|^^^U<Ν~UQQ 駟n[-...ߟ~^O~%MT#?999mۖ!Cj*e6n?sWj_O#Fo߾2Y+W{Ѯ];>s&Mr:~z-5f_}Uy'mM****B!VII GPzzz:VU)XYQ !D˫R0rKMMpzek7Vg nݰ@zVVT+ݬ=B!j™3g q^x)V!jM$ 6@ҥK9s Fb֬Y 6LB܁<߯l#//-[HHH $$;1z ߡE F툄B!D=K|||^ ˣjrBarssINN&##2kWRVI3BQJJJ8yu<>},ӭ[7)'Fp!%'11ǏWzGBwa6nƍIKKsL0'vxBԉR{JKK h4ƀdFNio~uٳ޽hbccp۷gF%k2w\;w.gϦyjV/u5qfu96{aY~==M!66S;!WII GR(=99tV+tEL;w\Z-Z-ZB4yyyJk qZh'ZHddd¸B!lWQQI"55B7oNNkh4BԸʱk֋ʤćzHYXOH6yfDǎy衇O߿ +W;PQQE6m?.!!+VvZy'3g:uR;4!h0ܘ;w.?<6mbʕ >ooo~i"##iݺa a3Znȑ#9r\eaxGTT%|(!D{58~zP;!ByynnnhZz=h4dBܡ\;gup4 Z=z!imÍ'N`Z777:vV%<<\rzBԚ/rQ%'%%$Ν;_nϓO>NCJ!DQ^^N||<7ofƍӹsg&L8IxX\|˗ҴiS}]N*D]|?ŋ?ΦMٳڡ !j퉈 ""t>s-Z 矧j)Сᄇp%߯,7sLe^!cI'pqQ;!Bj;<;vd2w/жm[ BTTcƌZL⎝9s|Pϟ@ttu/xIMMۻw//BUՍg|ӪU+mF˖-V</ rHvv6GVѣGݝ͛Wn: QY|:O]+//'55łd~~ Yh{Q%F!lQyy9 L&L&w怜Yd x+?AkٳԶLvͮ]سgYYY4k֌>}`0={6:Ipc0j(mFnn.;v\pq)gkGb(s1iҤ P|I uٌdbͤ",,Lv!mzOM~^VVVƾ}d2q#Ej IDATA7o``Μ9FS)nd^ --~7|vکV!;=^{[c# &5UK w!h*biiicooO.]h43w\Z-~~~2YF!jq-˗h޼9^^^hZF#Ja\0BGEҳ.!mBdZ$))#GpaʢGGGZ-{fΜ9 ^CBԐbvɦMɓt҅cEhh ,`xb\yW5BԆR[.]bϏ>I&vxB`988(Xboo>(3f̠W^j)M2yd~vbb"X,/^̼yzN,(5G߷?r&ȑuB!$&&rZ-:ɓ'hYȅkoFF.]njqssS BԤkۅ\N>;55B;wSBQ+JJJHKKȑ#J~ϑ#G8qs~~~G>}d!2!DsemFll,={]2~x>3/9Qgҥ,YbfΜɜ9s jӧYt)+V~_~nݺB+,ZW_}e˖1`t:L4-[6шh*о}{`@, aK}KO 4,!BeZILLd2a2صkcƀFc;v͛7O<{[Seee̞=@q oHLLO?cUTTpi^Jnn.EEEhklڴ(oҩSjSTt۶mcʕU?y$:QFꫯr}_?nل[osQRR믿'#F7߼"[n6YV<ݻٵk{!??6mʫJhh(٩6ٳ޽Dtt4O} 8KFǎS8]m]G-޽[:u-[̤I0 H/Mll,.\C'N֭SؠW?7/^LHH'Ndڵ4mڔgyÇ1>dl6k.rrrw,\CzCBTٶm&[r%<== #**Aɜ%6np^[*FΝȑ#qqqDÔ/̖-[ o{jU/u5qUY̖-[ضm2״sW}{xIy2Z!D)..رcKOKK{{{zV%""VFG& !]@n58++:uBT)鉇|xBUTTDVVǎ#33Sٲ8~8%%%8::*{Ÿq㪴͛7WLB44VǏl&99Wbgg{'W^OOOI:wqqqDGG+xg;v,j(_,_?bf̘ /@۶mM4`Ν?g"jѣGYlVŅ3g2c cB[pqq!22HYd 3f`ܹLGGG%gܹq!f3yLHHz^y.!߆~߇^R;"!B4yyylݺhp]veĈL6aÆq=h \]]ҥ  &&~>(((`֬Y̞=޽{3}t>;:/ŋe˖$$$_^vs=Gڵ+QQQ>Pcу={ϣjqrrG7Vî]0͜?WWW =))9޽{d2# 7`tE0E=%mzݴ5}nϽ\r{͛9~8 <1B]9< .䣏>"00]v1p@êW:~ZVV7j?:CoTTTTBrRRRHJJ"--#Gʉ'hٲ%h4ejxxx`ggrBa+ѣGx"PpzpLBUPP@ff&;vקNrx͍ݻ+k:|B!bIKK#55U)NQQ]tG)޻wo4,.DvU%Id2@&M !""B&P QUhҤ =s̡M6j&xV\ɿ/x'yqwwW;4ш=lذAHٱc+W7ڵc̘1Ν; ҕ+WHHH >>®]8w͚5gϞ z=:VvBn^pq4Q;!BFܹs$%%DJJ G!%%K.ЩS'4 ~~~U]]]U\!lGqq1NRvΦ{{{tReve!DqE233ʺ1''2Zj^^^J၇]v^3BNJJ iiiBvv6eeeၯ燷SBܹsڵKY)%%''' Bxx8ḹ6ɉӧ3{lZjvh3L,^8|||x4i͛7W;4a#4i !9sիWGq)Jdd$ǏB԰kݽ{7'Nޞ޽{c4JZ[UQ))Ц ȘB!jIzz:`XhҤ 3#GhQ!eee:tHٳgoߞ}b00D qΞ=w}Gll,=2zhFAhh(-ZP;L!D#fZIKKSرLHHz˅wYbccٲe ۶mҥKhZF)}!DP9.`6@^^O',IBTٲe 7o&..K.Ø1c5jҷBԸr㉋#..}QQQAPP#F`Ĉ˜cqJJJXt)oL8Q! q111?ҿi.\IHl&jG!~Z8qB)ޛL|| !5vyM! NR>ǤFZZN~Cヷ7͛7W9z!.\`ΝرfС :؎hXn}?3L>{Lr:D*..f,^$z=fbRPܶ&M~z%HV+[l!**۷+ySL{U;>>RH@!jdddFFF+G)^YDs2W!lԵғIII!++cǎQPP;wat___)$'Vsԩ*/QV];Vj)--%>>ž={X,ooߞaÆ1|pNNUq_b՜8q#F0sLF!֜={/e˖ѣ5kÆ 1oQTD߰aʑQyfV\dLJS2eOFʕ+$$$(wٳgi֬={`0th4o !j pLv4B!6+77W9rӣGt:2O#((777BpE%g'55U:##">|||Vrwy*BURRɓ'̋ӹ|2<>>>r/T!D6\Ԍ .]@VӳJ~ԁB4Fݻ}aXHJJI&0tP`>hڵkYn.]b„ L>^vh;y$˗/gժU\t'2sLMذ&M~z%Hqc|\BƎٳ0`ڡ Ѡ9s( &$$P^^8ߏڡ !Gm _~v4B!.\ۉ&::|<== #<FAxx8#FU0TYYRwŋoߞ}*W,U_`ȑ<׻0xƫl",$$4$m!Lڤɛ1s:Y:,)L!&d6$vA1 Fޑy.Kzȫ[-p|?}Gk9o7oބjzλp6h'"GuuuRSWW~yh'::qqq 1<< K.hoo;V^u!-- iii;.L&>c|ǨT*ŋ/(=tg}%KW^C,_\h4 899B >Sŵk ɐ_|D._| r9 V^^DQS`I0L/^fúuVsNʼnCCC(((\RRcNFgb 99* jD$a#??:zoAMW(**>b@"lق8###tjh4hmmEDDlJm۶MD4tvv… h48~8[BTb֭Xh1iĿW$ }]@8D_Gn 466Nin4QUUooo |R)RRRX,hjj0}r\pwwGpp@ccchiirw466bbbGDDp=T0LG}}=L&nܸZ477rGsDDDpC=9fW\+Wp%j"** 刍;.JKKqCn㩧ž={uVf!>|pUd2OOOݗ!zVVIf^#%%EYv-7B# €<ѬaZQPPVG K.͛RsNY#" z8$ r9 n݊ph(,,VFAEE,Y (Jر˖-;&AP(T*!ˑ vTmN`6mZ Z@cֆ<@II ..NXi&hfɓ'jq 99* j聳Z(--FVEqq1<<*" IDATc۰X,;kzH$b!:v]DDݘfAX\\yFRpvv;:ьh;YhDMM &&&|8Rqqq\!"a&7J}444f ŋE> ""FFF`2cpp7@dd =<"PTT+W@RR֮] BB iׯ_ǵk`4QRRׯcbb~~~Xf v܉g}W*++Á'`ttvo 6ks4D9 dpy8p9oo'v<9l6`0 FGGh"Yr2 @Dt~"""iFA)))=kzR)7'"GcDZ !!!SoK$X ‰f1ܵ###OOOMq'U3!"㎺hllz,Xzǐ~!"044k׮%%%BM8rJY֭Æ ㉦0#G`0h"T* زe +Cw{==?ĺuĎF>,7ֆCss36oތLڵ= ?n‚ n:r߇q._.^~sDDD3ޭ[pyh4;v }}}H$霗'"Quww#//.\@nn.`tlܸiii z:;;qIhZ9siiipss;&1nB^^.^xg7 ĎJ4uuu/FFAoo7n1h1χN^Gee%$?%KĎJ4cFhZh4\t ȀZZ~>Dj8{CTBTb۶m;&EEEx7qUݻO___c###3<_b!vDD4nJ2tvv鎣L&üyDNND43xxx 22Rhb"}===wmn4 †D7JH$Cw*$l>>>w}H$ eQ4Mߏk׮`0 ??yyyhkk bcc!Ʉc)4/Y^~ׯ_ǵkp-e˰b Z k֬AJJ """DNM(4 8Nhػw/ĎG9geehq}sNdffBT?łk׮A`0@ף~'[{DDH[B777 00AAA|"" kV .Dbb8px;Fdgg#++ ۱{np:b'""", .\cǎAբx'Ob֭GDEnn..\ . b lڴ ظq#,Y"rR١NqItvv"<<O<T*1o!DHUVV… @[[ ˑ4CD3Zww7Ν;FcǎRj* r릉聪ٳgpiC"@TBRa˖-AX,xw_ܹSXD3Roo/"##oŎ37UT bIv]DDs_~cccBtGtQ*r+86 7LSWUUahhDrGtTʅDD38QQQ9lHDD1c444Ix.Mi Lq&հZXx1P( ˱vZ FQ8:6QF\\R)!Jb ^bttNCtt4^}Uݻ~~~b#z  ѳDNB4; 8p;{9[;ʠ9 662LsdDH< r9^DDD-vJMOii)B-cC游8hzC]]***TWWcppkxth7M7nVtRH$DFF"22Rx,HODDP9jOu<7o755A? DDD_jd2())Aqq1f3 ,, Xzp 95ݍ3gɓjƪUO駟ʕ+ŎHsD111ػw/H4NNN8|PDD>Sŵk ɐ_|;hkkÕ+WNl6H$r( lٲbG%opw.; ќ3<hSrZT+V`"VhllDkk+ܼymmmlOOOu>{233qFÇ 5@D ۷}g[;M200˗/C#??yyyC``  իYN4<-b!""ѺjjqI #99* ?yn\\7$"Mh&"---hnnFkkF!0| 88xJstc6F'(--Fyy9x$%%aժUHJJBrr2|||ĎM4gMLL&iJs2 :y|&tىO>|]8kx f5GC, 6 ϟǾ}pqDDD 33*ofq(((@cc#uaXn@&ؼY$DDD4(--EYYp냳3"##$',,LDD6///G?{J7o鉈똼Q[[+\,\'8xyy|&DD4 ffMMMhmm^kiiA{{;l6  BHHYlgED43mhr}D``T$,X@D3˭[pyt:hZf`֭Pزe /^,vLCZ[[>ň޽{w^nEӆ>,ֆCss36oތLڵ}!\|Caa!TlܸXbk|fρӧ0 'GDDDD3NSSN< FӧOPTxg(vD"cQXXN^"X,H$(Jrddd`bG%UV+ jja۶mPx'VN"??:%%%prrBll, J%222d*6 %%%h4FEE.]'xj۶m㾲DHL&t:t:|‚ n:a^ %%bG%5F#Jbؽ{7q{#fxx.]FcЀ  ==j۷oGHH1o~~~طoT*رfѣGQWW}4e;v)f*ł q˗ -2Lh"gggMOmmmDUUpFcc#/FGG#>>Je\"FFF777Y:=PcccDKK :::ֆV+/_˗/"88˗/g#Q"z PWW7IxEE`퍕+WNkdAM$ł;VTT`ddOrʕ9=YV|8p= OOOܹ{AFF[Ҝh%rchh;v[o 6V\zvZrd2rsC @x!""UP^^>`0`ttnnnd2nLD4Ǩ 44qqqT*鉈CKK<&iZ'OOOH$a͌Ekk+:::`6сVfMMM~<ז-[FDDQOOeeeB-.q\jDNN43Y,̙38y$ \]]!˱}vl۶ bǤ9fxx9998tΞ= gK/\.v<;899B =:6 Ǐq9H$xWyhX,z*z=rss>,]HOOGZZV\ɞD3znnn.4f2hK.a޼yؼy3vލz .;"!CCC(((N^GQQ, $ J%r96oތ`:###tj8z(!HR{nlذcDuvvt(..3bccP(T*%Kh^FGfDDD@VCV#==w'"l6*++ϟǭ[`[NXv-x聱Z(((@vv6>s477#<<;vg"z%Z-`X R R4Ӵt0Lx;SXDB}}=ql'n;Lhb0fׯ_%4IOHH@rr2.]*vl"igbb0LB3,Ʉr-Z)K$X"ݏlGMM X|&}hh(ob!4AoooG{{l6 ݺuk.\AAAGpp0 6E'0DKK K<1'''====Feep@}}=V+\]] J8xyy‡~ׯǞ={sshs ѳDNB4w"++ 2d2dff⥗^¼yĎGDߒbAII PPPK. HLLĆ ~zlذb%i_((._NDDDDߒlRjۅ '$&&r~N1}NY-Jj*x{{BOO5<Rs ""6FGGсtvvN幽gttT=# ˗/G`` ǡ gGD4NEUUzzz~~~HLLT*Ŋ+f 塯˖-Ö-[F IDATVuV,ZH4l6\t g}!lڴ /y̟?_DÇ 5@D$0<<;v7߄\.;}nH4GǀV l Wׂc4,TVV۷oݻuVu@D 둟\C"7oތ`J]]]8qZ-N8$''CRC||hDaa0'_\\ gggBP@TBTrCݍsA ''Jؽ{7j5d2hZ>;wڵkyo!ٳgjHRjT*rCD hZ>111Hf>=zNCpp0^x눌;h ѳDNBD`0o>|gž={bG#W^E~~>z=^1,[ =d2 r9͛'v\"醆M{5550 0 @ii)|YdZt"gJX__www ;c||<76&"n;xpssCHH]xbcc`ςfUx&]kyn-44 ۈ)L9vWWW#** QQQT*Ŋ+'(++N^Gnn.l2B.CP`լ%$QTWWO?7n@*bϞ=xW v< jH\_{(++L&Cff&^|Eދ&AL&t:t:.\N,X֭lܸf" '3,gZQPPlOBKK ñcjs=CCC(((^G~~>rss1>>DR \M6!$$DDdFAvv6 ၌ jjf\|t(..3bccP(T*T*#vTYGVŋBJgy˗/;"RVUUUsΡXv9 99{=8{,4 rrr044dT*?@llhl())]x6 IIIP*PTذaiڳX,xw_طo|Ich6yy9ga"%#βv]DDbCyy$h4###pssCtt ]*"%%DDWl6YD"T*ŪU-v|""1ܵa͛7aZ>>>wmDD4w nݚrt .tuuS |}})/4F'"zTPWW7e8fHH$<&&+V@\\D>gll uuuw\ݪ* 2"=VgϞG}#G+ == diB~k .#FDS?{gfl޼?яR! ,bXp5ŋWWWZ r2 7nDxxqh֬l^~X^DDDDsBoo/_ \~cccpwwGTTd20`cl6qhkk,ZQQQS76>>fvg򨬬0AAAwqH$ uŭ[Yxىtuu 9kMO@@ S%";nݺ4QpssCxxP-<gA4tttEEE˗122P#-- iii;*aG}K.!00< ^y$''&:rhy=xDt}>/7d?2d2AA… hjj֯_\BTxxxQb#ft:dggCѠRwZL&;"CCC(((db||Jr6mBHHQf-FYYYҥKO@VcK%/_F~~>t:쌤$a>]Trh4";;Z>>>P*PTxꩧpB#,dZQZZ* t:k׮>$'';CՅ'N ;;gΜjźu{n޽AAAbG$Y _|t:4 Z[[7BRAV{?(yyy+L&xw#;B??⩧Ny'ގ+Wp?ɲv]DDl$h4v/FBBd2i"IM M&W6MH$HHHhktɄz8 |||,=::f1Պ>Wx7屣Adɒ;$} "Koo/qM466Nhmm8;;#$$Dh >Qxdd$DD3e񸡡6 nnn nbb"ĎO?Ƨ~6lذ {9М#33k?DDUV+N8ܹsk_K,;=f0 (**bA`` d2 r9RRR.v\"ɺ/)`oFDDDDz||| J!ɄcbbbS{Fappk㾷qDDMCqm\sk<211!ܳnܺuKxoqpssgҥE@@G7""z ٌV;y]]`Jm}^! \rEEE|2n޼ '''DGGcشi6n܈7<<Ǐ㣏>™3g Z^z ۷ogΜʟsuuEkk+|}}A*"*MMMؼy3233k."L&ӧqM̟?F sD3 2؉ GN8 ~is477#,, ?8T*q#jT8{,z{{sիY L544ѣFAA<<<ݻwcΝXhhst:h4k׮Z=X===/~7HOO{gXc X~=`7#55O֭[ENHd;v)h4 KKK144MihKDD_6Ȫc* `t"n ӍF#F#z{{ܿa\\D> ""648w,^S0ܟfOQRRP?hM ===},.'fݻIIIbG#hppχ^GAAnݺ///$%%A&AP`ӦMԄps;ѴeXPSS#TTTn 5=2 =ENMD${TTT`ddkx rz""f7nܸec!H|&DD Oq<2088x׿E u=>>>wYt.\ "l68iv͛0 $$Dm ADD*~0(//GQQ\ՊL/;2q1deeԩSغu+{9?~AAAxop? g2Ϝ9aʕP*P*7oQtw'N|9~ &FDDDDwu?l>}...P(PTxl2#,600^\\xW\bcc4>ƹs琝 !99* j2LD4 f\x/^Dnn.*++ L4!55bG%FFF鐝cǎRj* r5112t:z塯ظq#r9 V^Cf4?ӟP^^___j<زe !﬽OVNCOO$g6MKCCCpuuyv~3WS~޽{aꊉ ,]z~::k׿N3]e;WGD4ݼy%%%(++õkPZZzv,^+WĪUb N6 ^'7KwcdffBTٌ|t:t:L&bժUP*{wU}=5[&"$lI(Ҫ (ȢQ?ڢUץ [kkVǥ$(@i(&a f3ٷ7$y>qܹ\}NdRV]a!DD8; !DYY6l`ݺu 7@JJ f͒>B^S__Ϯ]عs';w$33Fɓ4iSL!44١ 1 TUUgaV+SNofܹ9;D!;vsN8z(ZL<ɓ'Cb@eͬ_m۶ĉY`#Bڬ=b00Q__OPP&M"11$Ə/uޅdݺu_\X`gҤIg)$ڵm۶m6~<<<2e fbƌ >a qN~;111<3~Q~߲}v-Zğg)D/X|9+WMYj`ڴi'?#g0e 󎳣RU6(\, G%++aARE||>>x{{+]w,IBImm-&*++R.몪Օ  "<<@Ia!l6SXX hСC~#&&FSRo·~X,L> 2w\\\\ښ5k;8S*Jի82!0Z72h n/^|ރϤ뉍Hc4`׮]͘1cHJJRral ׿:;!ϔEff2 Qzƍرc>| ,pjjjwߝeeexzz*9<5JjN^!@yyCNyii]HH9'**JVB'jiiV۩sySWWU*c/jmmd29L&Duu5PYYIEERݝBCC  00 "44¤NPTTĉ'8~2رcft:#Gd'?aь=CJwꫯHMMeƍ4551aRRRۥ}J\qϟ͛{WWWV֮]ʕ+9x 8^{E !.VII `999hZƎKrr2L8???g*8_ee Çòe_9;"!W* RSSٺu+:믿,X ?B^޽{gc6RaLBddCb|Om64 ̙3yWif˖-W_aXkIII[o1=b00 Bpp0'NTU?^ GIMMO>DDD0|RRR뤖m6mFZZ1c fΜĉ_\GyNQkii_qqq\}NV+7ƍZ]tX,nVXAxx"gΝ IU4B8lѣddd(ӁhjjB2b#66뮻;;l!prss&77rrr@+1j(F%1BOL&8ETT)ӥB􌖖.kgl6w{L777ݽ˺sNnBFGG L&e`;^,W...ze t B^w !ΤV>}8y׾,ŕbZVYz5k׮d21i$~_r7ۋ qeinnFnnnTUUǑ !.Eii)~!%%%p zow}_|AbbbF,MÇh$##4 #G$!!$gP!DϩooIfBqY*))Qrzrrr;!!!$$$(OS)'pjjjkcyYY0zh\Hi{B'3vs1Se"""<ӈ#v!ĕbs{L&'t| ! IDAT]PP5BKss3---DssBcc#466vdG0h  !00BCC  00yNɪ)..BN89~8'NP=<<6lь51c(m:!zٱc>|E_'|Ncc#'Nno?mt?j,XO> !.UFFo~!vm<r.//aÆ1al"ׄLk.F#dffVWLNN١ !ΤFKZ? !Gl6+Wd޼yDGG_оEEE|lڴ[´iHIIaxyyRB}a00߿LTT$&&2m4EPZZʚ5kx衇.x߂>S6o̎;t\0o<|||z!b!@TRRBzz:@^^Zc*'O~^zVVV_ʶmh4$''3gϟO@@@/E-H:::8xrNKK !!!;D6{1~_{Afggի9z(̛7F566}v6o̶mˋ)S0gfΜIddl߾ӧcXt;}Vٲe 0LXwR#A^6rH=zx ^x>H\{<{I]Vb蠣޼ >>rB\VڨZihhpw^ojkkS>777w{|FOE~]<H{f^^Ҏipqq!<<ܡ266x)>"n6l~ʼyιϚ5kXv-=;3;3>Z+ӝwIjj*faN#%%?I !.U{{;}o#Fp=pw)|1F OMM妛nrFB>PZZOzz:FQ~3HJJ"11G,~̜9;[ow ! ?Þϓw}Gyy9!!!9=\s )P8~CONN'Ofû :T k !r KT>fw9oL6￟j]t)*QQQ ^Pyy9iiiFDV3rHe믿A]FDD ,ȅ%?A]!ĀwyY|9),,dÆ gܘ6m)))|xzzAB{` ++ JTT$''3uTzCⲖƂ hnnݜ s|6nܨ +ۻ"B\ZZZPF#(svB\ ?><3<';;T>c?ΐ!C馛HII!11QAj``0sNV+JɓtUKRXXH||+ g+>djD!L&`2WWWw۠vݽ킃,,د&I)5\ߝ3]7[o_'T!mmm?~\4ގKss3_{}YqJvv6sΥJJJ Wv֮ۜ]˚5k8r̛7 Ǒ qeڲe g>w7pCG$ 7wEV??,Y1cCٌJBR7N\f30dddF~~>Z#FDbb"&MbȐ!3V#11gOB< _|wÿ`/裏Annnb۳w^h49R韞u]{g !ŰX,...URqq<N=Mz'B61466bXfQ[[ 6s:/777eIɻlYpOC]]G}}X.J???T*hZ<==qqqQ\]]OOO|}}qwwC[OOOQ'2L&ՔSYYIee%UUUttt8+00PÉ 44 %22RFJzz:vXV󉌌<|glܸbaҤI̟?yއ }l6;WWW'E&IVoolٲP-ZĒ%K`Y_رcRTTTo>e0ʬ,F F9mڴ [n__q#.W^qv4B!zё#G3g?#frrrݶO?Tvލ/saΜ9xxxxqB+UwϘ*#G^3{6/,[ 8Λ7٤yf2227NHJJ١ qؼy3wqX,fΜɖ-[6//M6)x̙3nA !.Iss3Jh> 99(g*믿[o Ltt4Ǐﲝjeݤ~z:t(s!%%D"(夥i&lBMM AAAL4ٳg3{l 01mmm\wu:tKnAAA̜9I 1t:""" b̘1:-n!իWsb6TWW+ ٰa7,%b2RYYNsRdBP__Ϛ5kXj$$$~./]?NTl%%%c4ᆪ]Dbb"?k lFZfq}/+ !vP@=Bpj@UVOڊfoo :NGGGq9pMMMhZFABB2?^ !/z#Gp]wq8~x\{pχ "}Q\\mÇijjՕ.9r !DϩƋZX,ʼLss3mmmtWWW垷󲛛/󲻻2Vuh{WkUUL<<<:o?FS\&e4ulL&\[[ۥȲ?4h  $ ^OPPzj}/ űX,+<gV˪UXxölܸ͛7cZ-̙3sS_ꫯ1c:N]woü|q뭷2d^xVVݝ-[0qD'F,I߿` ++ JTT2P)SZ???, :OOOx n><!Çjwv4B!zɦM;hkksxMll,߶Tvލg&%%3fHC!Dxl4IOO'33Zȑ#IJJ"99믿^=444pwqFV2|֮]lMjj*k֬ȑ#DDD0k,fϞͬYa00رB<==0a$%%1q%0{Jt:*++>{kג^g֬Y0sL*hMMMٳGiصkmmm(mӧOgСU+fO˗/pu!Fjeݤn:JJJR$%%9+|!X,4%Ѩ+͍D_e,qZh|2Qg:ٳga'D&uVf͚eZFVs뭷:!2!zLvB7xe˖aX0ͨjnF>k/n/޽{POW_}$ !.X7|Zt">>c6),,R0=''sXbٳgz)?K*B eZٸq#E&JKK唗SUUEeeR^sFC@@?ۋ !{m6ygr^L&J>VUUQSSdrwW ĠA|}}N|m߾T"""zgٟyyydggTϽqqqDEE'hB\|I^~eT*kT*>ZZZ}!zŋyhooNu]h#B&ȪUظq#š NV_wyG?bkjj"++tFWÃqƑ@RR[b7yWYpa_?᷿3` 5 !p۷xb;v־DfGL>|CnOSy#8?h4X,ƌ/8uuu?~K.ɓ'l$$$ǐ!CPսtvBѿl66l`2T;_:}:t$BtT*]wC9/TVVRVV_w7n*9>J^S@@R^qecǎs=GtttP[[K]]ʲ}u&zZ[[illp_ٺu+l޼M6{n|}}>}:gfx{{; , 8o:uBV֮]˫Jaa!&KZFK  }ߏl&**d:uC}m۶1sL3xw BvB\v, =?<*Mӱd BjjjJ3fʼn !iΝ;|Gt2vڅh$==Lj5$&&Drr2=;̝;'Ov|Uya2d7t)))$&&JLGG_bɒ%t< ;vPYY'&LP&M$B*n6v'xF6l@~~>C a,X &H.LII K,aժU4BSS{Qhoo'**J1cW]uUF/8]}}= .dӦM]\\\[`ƍTTT0fnnbbbYV+_߾ctn غu+ Jdf͚%c᭷׿9۸q#s탈xG h4hZ6nЗYTy=!Āi&,YBIIC<@pp0geemxyB\?O[[C:ZG}wev;0pxNN?mmmhZ"## eܸqRpL1}w<|WDDDPPPk?K !#š5kx8z(/2=1L`2(--]gnnnJHHHΟh4N:C!"==gyo0GKK RQQAii)UUUFTUU)S痋 4A0?}\'x233Yt)9yni_>r($$ġҾ#11`222jxzzbZ7o~;ӧOG9!Z!4&OeB\98|pd:;FìYXv-R`UI^^F j* $%%1n8>cH'NfĈ:!3i0t#BNJXl1ZQ?|F8@NNdddֆ7cƌQzO~"Eb}Y{=4CWWW-pYWWǕwɓ'lM\\<66))l6}O<9991#G2vs1S1BB +0X~کw9Υ=.Bټ|'5lg䠭jBYajjjx^^^L?닛,具7Z5_<;p:%搿X]]Mee%d2Q[[dRK퍟>>>퍷7>>>)퓿v:_BÆ կ~EKKK|c8wɉ' eܹ̟?)SH[o^Lr 233IHH8* Jkŋ02!3ֲk.vIZZX,bbbȇ~FƲ*--h4b00h;v,$%%1}tz,},Z|X;J ̙3ٳgHw}]wEnn.7x#7o>}V+{ IDATc0oˋkdC>w1o<*++h~ٳg&%%DKfo#¿/޿{b4IOO'--vcRR3g$22B馛())MP꼤p3jԨ>R__ȠA:Fo͛ٶmxyy1e̙#i߾}L8T*zcǎI}dɒ%ߧVݝ/D'G'DHU:W6B G૯BVq@g}cǎ M||<ƍcܸq'B˞je/Kb\,>Qff&O>$_~%:ٌF?L&봽`'^0}i !f>#{9 PTj~GV{{;eeeQQQAqq1PVVFYY] &$$  $,, " W)& !iii<3رC';lTTT8\KKKkaIIrc @ף t@PPYBs^wEb6t,Y伏yćaǨ(2&&:E!;vp-P__Nnnn3hР>Nag `e@d!*jg֭ <"B\jjjسg{a߿&pqqZ-j˗K!ęY, 8 !UVbXXm 6L;je?^ƍǰaäkƊ+8,,CONN'Of9 #mB͛y'FbJKKEKr TPPM6'**JB8fcͬX Z-6_W=(++SS^^Niic󽱛AAA:^'88@ *(}/6mBގuuu3f3TUUQ]]Muu5766:CV3x`z=V&???|}}&:???eYAݱX,^zG}_|~NGGGLџ[ŋSWW\;+O~}JJJHOO`0`4A2vXILLdҤI2Nƣ>jp |g}?iii駟fʕh4f3֞bʽ7|CMM \s5ʽ5\#e $oK,faXθVJۅ;w޽{ZhZqFݫ ߿LTTr0uTy+|{X,nyL!},YlVdeee[0  v܉j%>>d ӟ~lذἊt: 7|#B+/_~AԀ#Gk(3`HJrvDB!.MoKii9===2e Ǐg7"B{˩;g+;///bbb=z|Ȑ!B\ K.%33F3߹RwCO~Kv~BqV+[lᩧ]|t̖3ו;#.sN}|ƁRxmmwSSt̖L&uyEEER777ݭ \q!DZ_\yֵQz뭬^UQQAaa!PZZJii)SQQAEEC_"/// $44^' z2Im#!lnfN8qw:{7|aو}qW;9*!D_0Lv^۫jN}]wb*//',,3u::W_}Ojq!B~}݇j=g >(/BE'Yx1~)jZ7ҥKymKJJHOO`0_sIZ-cǎU;NLL]© Y`8<0777h䮻530d" k$7n{Xn9w~!wygD'O:::?e˰X,y*QQQ8qB}0 Fߏl&**Ji6m8!{UVRy/{^|>PџTVVh">skN_GNGHKKcӦMlٲ4igfΜ9RDN_O6{v;ZFVс+W_}5SNeĉ$'';!b! ***t}v ĥ!C'aRgGl*,l6>#z!ϫs +V`ٲe}B8GNN/-۝@:t(B+GNN/-ig0?~JCwСC%\ѯ455;K/QUUf붣Fll,l6)))BJKK),, ihhPuss#,,P"## !<3͛w^jZ, -W^ǧB\6jj࣏`&^qvDB!.±cxضmCAQT !D3 <=z(;sqqogŊ\uU?\!.hdҥ޽3wADDD9< WWWº቉>KB~j~z/_Ή'PGGGsqf3PZZJQQCN}]KKw=,,L鉌$((H.=Bg9(6$P^^.<˗/ߑ+ s4 ?Yno 1mݺYf*뮻_"?z}x-;T>^숄bhkkcɒ%1r}mqƱxbvɎ;(..ݝ &0yd&O5\Bto%%%3N=Jbݺu,XB'uuuKcc9RWW?,2Z H{Imm-\/FM7tŵyf_\PS!Gjjj{ʕٳ׎%㴷ގll6qƁU*6 NGRR㨅r ~رc&蟍+Ǐ',,"Bw~BtBrss9z9&--'hLr=B5T*\s5]PBѕ?hD՞Zvh Qw:M&~B &5k3(NcرS^^lR "440IKKSrz}u:]_BO>-[Oss9***) !$$NGQQJ}ruuAi]`0#p!jYS]]"22H"""l6+W\nZ[[(//.\osѢ_C\\W)?:tttqAKE+ĕr8zh4ƌCttt$8އ o 7Cf&H݀! B8Wss3w1n쮿z{8A'ɓ'{ٱcsj5nnn7$IJJR;V~_p>Fnn.999.p %rr/{梁i4"""hiiaҤI$&&7W!222X,T3 l]j57tZ/BbH.q9fV\ɓO> pƜf3ETT$''3uTzv*DPQQ޽{ioo?}DIzyy.K:t0}t~3iҤnǕW!N),,d߾}g/// <///'F'zb04h'NPfz_hhlZ`X .-[S:# !DkoohiiQBݽS AUUU[^A;BgP444xŝ;wzѡuG```!-dggsw'jZj4MMxxxܵk駟}_;t<3u0ZZZXhC !<K,--]=>{dtr, D@DQAQp8 "!2PR|l>}Fl6-ZH]tt>@ȑ#jҤ$b;~bAArrr]A/PR|袋SOi2͕Z:vW|PjѢRg~߭V:TsTJ>_l٢;Ccbbtw߯t>@Y,effYfiU4jsBIڵk5l0eddHR,&M=zT~c,޽{ռys%&&*11Q111Njfx 4矪W.R;v,ͩ1~ڵ~ҎR{۶mP7?&9rDJKKSZZRSSueddPドL&S@*?О={~9rD-٬bIKȍpmy!ѱcJf͚%PO,bbb?HjժUZfrrr$aް2dH_}&F"//OO<$ f픲ljܸԉի~zU^n^_.RRR FJKK$5m4-AX|Ǝ\r%RjN:b)7.!!A 6g>[jذ7n A\?o :%]zRV{6 A#sJKKSzzӕ?C:~sm޼o OBII:˓%&٬hckܸqr഼<3F~ܟYRR]z^O T-ekllnOJ߯(?L:::Z;vc=ԉBMb iUoQ۷j^r@b@NRaaN:x_wCMN֭[*`P 5|pկ__5RRRT~}խ[W ԛ79 IDAT4PzT^=խ[װur@7nڵk믿jVzjet׫Cҥ~mذA'OTttL&\,BUӦMu=hر;w֬Y+Wjǎ튉QIIVnWZZZZ seIF)ժk޽튍j=ɤ}5da 66VSNk6MA,>>^_~e ~UƌF޽8p@76yted6s$I$UҪUB%I'NdrٳgrssU~}5YAA6mڤWib-ZH'OSY\CIK| EG;I)3S:o_DKRR!I)))lV:uԮ];k׮gy&@-'Iz'ӲqFmڴI6l땛+ɤXnj5l6~z'OHrܜvZ[N+WԮ]d'"&ɤC_CСC%IEEEڲe~'_^WVzzKo߾.::Z _L✞m۶i۶mڲe6nܨTK~_8@hU@7@$2%O_qԶ+3eҲeREgwO?@͉QVԪUr e2*  >j(5J̭[jƍڸq֯_{n+66VVUV3hկ__/$jjǎvZZyz\\ %925555M ""I7nPFFrrrTRRl6;sHv]Wր 򔙙uꫯVNNto6-ɤݻWjҤIZP]"n{í~y;;|&@Hjذz޽{;:?\}ݺuڴi?|իW/hٲZlo]2']|x:kF\s}QIRVV֯_~IW͛% ͚5Sft7;?~\۷o׶mۜ_FI E1'v?_~4cc@KKIqqqС:tvqm޼Y7nO?u)33SNRZZ𿨨(kNڵC=$Iкu?jժUھ}JJJ %&&W^ի$D[lя?իW~PNNY "Ԯ][;wVΝrrri&mܸ9177W\Cx+۲GJ~(J?R۶ƶ L4h@ 4P/2dN*Wjjrssk 111袋$I/yrrr >|XVFFt! %%%UV_͛W1ͦ|9sZjj4i=KgKCHVǝhߤ.]j}"[fԬY3 8Pd۵w^eP3j׮]k׮oo*,, p 5jZWYVEGTvm]/o11ҎҌRRRM.HvttMҗ_J{XSqj׮Ν;siي \ 4iAiРABmڴI֊>Pttj]}=z$?2 gϞٳsZZZ*XNz%~k$$1~oRR^&MI&+Pjժ?_~AjР.@7 ٬~n oVzp|{Is ">'jمHB-7ꀚGn!P Z[$@yd" K륦M@YfgQnnԩcHvL&$iz뭷t1o߾|_|z衄-;;[>^|E7N|,Yq~fY5lN4I۷oK1kӦMX,獏ײe\iժUZbZhJ\wuZf$i„ ڿ5U9s?^ӦMӧ~rw$EV&M4c }g5eM:5 ` rwԋ@x }Grw ~Dߑ@##}GF_~֮u@3tV3B0q?(pC$n7w#Eߑ@x"}G.<y2wd"~Dߑ@"}G6"\}F.x_5k*?cK_֗_~:KIIIZf-[_:q^y}U^o P=zŋzj-YD/3iӦ*,, pk\p Z3j 8Q GuZN1<jDFgI.خ]iSXIzX[.&O mӝL6KbÙ[߶WgG}Tϛyp2?#>|XO?ԩ6mh6m233&ANXuG%\>}謳Rrr~ihB~mEP/ 9>7>Aߐ@x"}C& f^{u;64}t-RQ0ǿcPù7dGߐ@"}C.\ 7!Dߐ@x"}C&l وpJc=@vE7n$t4@JNN.wUv /H>cY,*3}VXXѣGnݺ2L.f]tE9rN<zƹ8u@B-GP9 P Q TZ/+jQ ZU }4`d6;EEIv +)=ݻW?t颿oھ}$SNJIIQJJsÇ;:uJEEEowuYwI&iҥ={*%%EGqYСCzwԷo_jڴiӧ+Vxo6mRJJ+=z?SUڰ~z{ҥyUiKmݺU?v~i*((0OVjjN~)++KcƌQ޽sNMOO{ァ+33SsէO}yi֭~mu,_\wynF :T+W?O:%Dz~zKرCa܏}b~3s_xnv #GD.r=r\D"#ED=z$믿vN[h!As ‘1Aeu78i۠mx[p 5jT<SL @-c\uP3۠j\l4{t=츗ݪc6jEN҆ K/ߗj?l}jѢE}]iʕ+k֭ng̘1%IK.՚5kO?,;a͞=[nAsQӦM5qDYV몫Қ5kt7+11Qk֬њ5ktRm-[_z衇7k՛oe˖yqF3FÇעE4zh-]TGj5O+Yf)//O+Wȑ#'Oz\kYf)77W_}ڶmO>Dmڴћo{O͛7g}aÆi֬Yڲes%K/j:4vXٳm֪U˹Yt7j֬Yjܸ&NcO,I;wԣ>;ꫯwܡ{ݯ@>@:tPTTz)5mTK.e]D͝;WԴiS=Z3%$$誫*7:utW;ѣfΜӶ-;hȐ!aÆ /TBB:v쨂R7mX,z7t]w/W\\ :uꨰ2ez뮻NjR.]4|pڵK .4OԩS5l0IR6mԺuk}.}Δ)StwH6m(!!Arl6ڶm:(>>^ݺu$:tHdZj̘1jڴ5zhl6}g=djJر=|Y&MkJHHЍ7ި={zկ@Y5jV~'I֭=|a!9!Chw6M7pԴiS]yJOO$}Wkd65j(%''EzeX{5: y>q_c۷t9#U\Azgo9ݺul65HUpA8 ĸE ZZPTM-pBP pMP P Z ~HO?sRCFo}(99YcCѮ-{ݺu}ޞeK踸8xIRII*>yjΝ;u]tk IDATE[lmwVZZFQnz~jݺu[ o(Ij޼W-eVZ(K۾o>维Mu/^s۶m→W^iժ\r%j֬VZ=zHruuEĉ[bbb$?kʕ*99Y&If9+Yg]vy57ǟ{<xjC~~$ȑ#ZÇ%I7h@=v[&mliΟ?_ 6yev!z쩙3gP'OTխ[7-_\<֮]nݺ9ք Ç+**JW\Æ Ey9|=95n8?ٳ5|p}^eqEmwj"[%9/=zǏ{9INErѸ\Er\J"!yHdb)2L$2H&ed#وՒ]d𔔔 e9<|Yc>76L>su]ZlLRn#^xs U -rgo^;vtNo0@.R/"r 9C9"9@D&"D2ҁ$#HǸcpù/2P7;P7S7g"G(E.:"P\t E@yyy:y֮]> e˖kϟ'N覛n2OViYվ.eUw;ZRBB}]}QAAnݪ$?e>iFfY}v*}NUѨQ#]qZrN8d]xᅺ 7())m۶)33S}|:#J3L8|uѫy9|o/O/..X 2DfR-믿z]~xӟgfQMd(ֳgOm߾]6lP\\nF  9@N@)rс\4.K-[L_|:u܏[?z#EED.rЁ$y?C"ArRd"CF:d$øWq?"uu3u3p&с|$RH.Er\C<$2H&XL$FlDj. @뮻ԭ[7YF'Ov71u57UwTÇױc4vX<} -5W[tWk{ ZZvPT<@Q C-5 QE-@-;j=Y t1Ӿ}+oVJJ$sΑ$-^XZx~Idڼy$HgIUXX(I]$iZh]X,ھ}sv]%%%NFvvo߮SN9fϟ 9rv>#Oݻw׋/ o7&&F? /*''G}h"p iw 4$}w*((Њ+cڲe$7Աcǔ'u/4:5o<3W_@'NnW\ZjUŕݹ˛<39l-kԨQJJJ[o'OjӦM;w5lBN$PH.ƍzH)))JIIQΝu>)"HHG "Gt 9Hd"T$#H r0q?ϸ}p|$GLYYY:sJV^g}V&MҐ!CO?T999jٲ~kmk~?~_v-I0afz]>Kk… zjuIW\qկ_?uͫ>(ٳ%I?t颏>HZ<];wuE9u][nURRsZE\#Fhڳgn1B-ZzH˖-S\\ZjCj*%%E>O*:#P\t E@.y@D&"D@"Kd"P@6=WKv]s=+W:|l5ue=^4Fӹ԰aÔ.Iڿz{GwyKKf¾k\pvbn\꾪xBhqeQ Z0u@ (*uTy-@T` jQ@ZmE-jfv섹snӚ5k& ̝;W-[L0A_RRRE?;ꫯo9T#,}E>c#,}E.o7rXWyh`+o) ":1 "xdFu4 ??x'?Dun\>|8*rb<_TT PL8 xk |C-zkx:\&Vy@_ᇜ4}>rXEcW@!E_3}rXDcW@x!#E_!񺦠@ o8]'Stt@t͑#׻w@QE_|4}>rXEcW@"E_L4}62XFcWBoԺb]K^h3@hZd~ɡĹ pF-@dT P&@dsG%&u͊[W vOG@7Xڽ{m6v}rXEcW@#E_4}XzAcW@h#E_ᅌ4}@jV{wE_.DS_ Tu+ |ƢG.Bh, ]䡱+ ƢF&h, @("୳.\[ڶUqZo@` Z6oެ]cǎz75j(qn -uGсn@QȑCj1y'Mұץ:v32jp_ݷ\deU8O Կ,ʚ6c-?+k 59R;oY'zB-m:5kVnܢs_yE{Guj#ZeXƢnh,}䢱E "E<Bh,2mdD <"@vȓ$ȷߖgTVZ9眣'xBs<5qn\ @UP @Ux1[\SI*?d/)yo $IUgɒ#Ade'̝;Wv֬YS)))3g ;B?k޼y~ۆdK/.]mO˗/رcuNPGԍ:@$.~3 u$ e޿ZpgK99mClެ\er}66mZ[F?n weF90oJrhP:&wݳH`F6"RERq, ;2gMgrr5Ecd+.F32٭U.WdD8?2LAUkѢE5}t%''e;DGjZfDu@͈@ZfDsV =G9PA=1&1W[o۷_|[>2335`͟??M FGvv|A k!+X_3WYY1ѿ5+Bf(l[ yDF*oh6Ooy ;vwA/6nܨ?gz=ӧ 7P?oW׮]ujǎ.شiuE ̙3]2ۛy{5J]vU~K/? yyy?ykn5WʈIK9֛nY[nUNtA<ol˛7n-( IDAT=my52bhڴi+/fwy|364СCx饗jr VX|*++f^k.\@aa!Μ9馨cݨǍ7ވ`L2۷oG76mڄ޽{>7$$7oƃ>L4ߟ]V1ٸ`;V{M1+cVR=kG<hQ=ԘD%0S*fzk3g~;ޙ1=3Wu<~Cpg:f1CU1+ԏuznlObͬ,fz1#-sWe.2Ղ٨jF]WQ_lume;OaDz+LtsQ=\M߇::7B~rss?8aɜ9s0qDC$?EfåKc֭ìYd|'v/%%^^^#ݽ^w1j~OgkOm<Q}ԘjD{1sU=>q6h~zgaO}\YZgZxPL)ϟ!CH_8tPX~= Ν; =믿FΝ/7رc1e\xh82}to%֟Ra=TlM[0`֮]bZro"푛NDDPΉd\F֢k׮[?t޽SL^>zZ1̹P"wj p^j"鈮/=`TDFF "Yzc"5\rN`ZZ~i3f0˽RhcX sg- GzXGX PR} a-`NM%W-ZS-::@d }^ 5(a¶m۰sNX6lM닩SbРAs݋+W"++ ۷ǣ>{3g?qI Ö-[#=>n8<,JCC9͛7`صkBك i8عs',Ysƛop8rp㩧BΝqql۶ 0g9r:u*ZX˂l)OK.f@BBo,vݞ9Bty:SJׯ`Æ -h[i?Czz:1m4t طomۆeocٲe8q1vX3r?Zl4^67/ƦMiӦagZ]VmBdJ`V2+݅Yi̬>.]b,[ _|kC0DUBcf!|WXbiӦ>X[ϟ|-[nAJJcֲw8{,n݊/xG @}}= 55@ideeI^`ޏZl4f6ZLd=zT˘}>駟pB?~ѣGڟ,w[ @a33捾Z0M؈hl>'O>@ZZڴiG}wƴiqYɬ$"c=>W7~lKlpp0˥o߾!!!رcfϞ =z4f7HemZKv,"sF]uwdV1nV31 Dz37LFŪ*߿}dKx#)<4^^Wf։--**yEF33JdVm;Tԙ;Ad]vZ:uG}Tޗ;:yFDjj6u]B9'~ /"u놙3glm۶9X hܹ6d `ЈuD#zBkkzX8_y/ޞn_^%%%qM7a͚5믿:W_ŦM3fo>>>x]v[n g}wOvt| Ə gϞX~=~7e̙3q=`˖-ݻ7.\hs?}YL0[nԩSk.L:uuuxg1ܵkRSS-7EEEXj~L4 t^|E\p}VXgbܹÆ PRR͛7gҥKQ[[z Blgٳϒk +WjH#䖇ܶ׳gOb Ajj*RSS-$h>?iTTTŋӦMCAAK;8zᜀmRRRkΝ;ѻwơ7)))V'g3*fqUVaРAXj:t_ `sYbۄ+Yɬt%f^~mֆ`މGo/"nlݺ#G#<~a(((k3g gmo#--Eikޱc͞h"9]^Zl4v6ZjD֣GgKOOǓO>cxqF8R1Z3v5'>ż9@[2!9c62FF?믿6lkŋSYIDF{|HX7n<ُٖ?X KJ7~0`^~e|No3Jۄ5fq3ߦq7c6a.c6;9vcݑZl4v6reZ 5ԟZ,4vr,;3ё~1梑sq-އ\O:7B~⟘C:ѱf1df*ZeO6[Xjyf\}ѥK̛7|駟bXj=*ޑs&>Ud[9fi;udP6XÌFF۷/x ,^?Sb߾},\ɞㄣes0tP,[ {իmo~{mR󈉉x<={6&Nqbܸq ŬYp뭷"22ŗAIwrҶlق9s۶mC=ŋŋcƍx(**X\B1c`Xd |A+ݻNL֑Z)'6#zkN+w%#-v;vioK"he ֖[/X :@Q.C=UXRo\3\ 5HEsN+PVV뮻< x]<'Z)֍=rY:u=X PR}"P ȍP:Ow-::@d:<x{z .aܹ3ѿuuuXh}Y"$$SNE}}=>S`ɨÁ2d>4,==cǎBHio6.]0rHZ|nUU~7DEE^{-&Mdu ;w.nvAAAY62zGBعs'BCC1l0bȑ+ѧO|W sh|EY[>׿GY|:88ŲmӦ zp羯cV1֧yLd=zT˘}>x7н{wL04h* YVZ3vF0M:~Ff\kaРA3f q;T M1+DLJuqfϣ"""0}t`c!Ce%͚Y 3Ҹ)M+q=]IE\l4n6α~b679v]_SBcٙ[0v["ד-՘_0"뇵Z#f7hl6=z03af>ƞl;w.xaХKcѨW_o2d ++ }v"wvLߝɠmC=UV!44/k'r%{Ա޲y`5;w⫯‹/Ν;qRJqq1 44.L{6mc[oe˖^AkqyyyC۶m8~lѣGcӦMx7q~!6l`6sa̘1QRR]v@㗈yyyhhh^SQQzb̙߿?N>rVhJd]0zhq_ w@}]EtۭO7yk> }9gb+khرc1DEıPg-dk"X(WwOuڭ,T5` ȵ _S;fKU__={ ""qqqX`>TTTgkKX ֍cHV``<Tߵ8ڭ ('X PP>y0f 1Sa][['O'ND~Я_?} @׮]/R6m`޽/m۶trSG}{ ;wDUU <<?h"{AXXAN9r$ᄈ7!!!xi-[ GFzz:/@mmHxyy]wZn~M9"Y`}bi"Y>۞Rԩ"##q ˨i)QZZ+BzMrr2vѢ0VChl4TUWWD [wf:eJf`mhNd"fqh\娩 v/|EY[>oҴ~mµ)Z=hѸhk}5AzT˘};'Nĉ˥ߙ@=c7Ԇycyωi/K`67wqdffO>fkݺʬ4nHxifyӾ}{ <[nEYY`׮]ۤ(šYyHf6tw`.2l4n6p-JdV1nV3HM1 n3ј0rדS_<qPthJbٟu|Ɣ1̴{=VyAAA1My6a[Eh";\ŒFF[W>1cP\\Yf˅=N[NJ5[bժUxꩧZ|ĵӸ_&YWWff"X P:wlk"X(?wOu@#Y-izuQFLlԎ9[***Bii)wUVܹ3x TWWcڵ-sa-Zpl4=Ƌd`-Z@sJ]kX c-Z@d+mb-y^O"]PRRظq#ڵkgyCG}J\t 2d݋{ ~- hۉ ĉ1a>|7o… q-;Dbbg͚3g?ի1a<3g*++@`` n//((_a„ _-vIEsD_toiδ[d+=ݶm[KhBx IDAToWG˘F[/+{ Kwf8feJcg92#a; ~8py>}?#n&orW#W6|Z} hl>՚ D=e>fӧsf 3PϘ?aވ[Ԃye0F3^ F6C!sbZGmF^\\6Yìe"evxf~u=zqa$$$ḪÌ4^FmZ\d.xpGf1ޒV3H0 n3ؙ0z9E1{0봓uZ){003cf>F4媜VDΣy73B;a(((ep=`ݺu6l6l؀{ 111vxq8aO+SN<\s ϟ>)ylRJRRZnݢkVzܹsؽ{7^x|7㏭Nȑ#ҴM39a%MaРA ԩSel߾<='JlذSDD^uTWWȑ# ?G^Qvׯ_5k֠_~ٳ@Zko"rqd_sXhj͚5޽;/= Z@ܑ DPZf;:uyjVb::u=\  ͫ]vA~~|}}0yN5ypfݘ"Y:uX P}2Z@tib-/oQpƃz鈩`nZ¨_~9h"|'(,,Dyy9Ji߾=:߿/^Ddd$:wN:aΝ-NhKXX>^&MBjj*CoGJJ ֯_'xĶOdZZdzԒbUѴJKK-C-Vzlll>՚ D=7̾FzϾ.]{TiiPwfnZ̿Fz?:<3oqP?zTzql<`9?1=E׏0L<1T.HhmLf&#Z6^Q9wt~>Ud[9&Ѿ[{3۹#`F4R[]'Ǽy0x`_FƘ:NձrH=[SS#>sLW^1{ܙq"赕0tP;v D@@ q<oiӦaذa1b,YCY;p-=h=?cܸqVyyyݻſc֭&Ols|}}[|IYTTX D5f,M)OߕڏҶo 55gO>~D%KD>`=LRY~MoGJJÆ ֭[qM7cDxyyǬYmtŊؼy3qE444i?8v*++'xxWPXX"書1p@e]߱uVl~SYY)r۷?*++qi=z@c:o՚ D=W>}g_vpw"##p9᫯W]7~l6{7cǎ W_l3J52HmZd9Ye1w`.2݅٨l8vc#fc[j:fcmc&2-a.;CE'744X|DZ1[b;E֏00V6 QhmLf&#y6ԘG]]ViiiCCCEKGEMMCO:%٭ۊyO>pdfv2Z]1uTL2E5<}4R m"Zsrw}43fǜ9sP__Ըmtڊ%'OFXXϟK.СC ڵCii)y\^兗^z 6¾K.ӧ|\᭷QSS .`˖-8q^_7bAyy9֮]'OXYY'ObʕxЭ[7̞=Dsȑ#Xr%.\b̝;ѸPXX*L6l!CZݦǓRkKU]H D]9"=۾E"+Wb̙xǥO<Z@ݵR#X `(!Q"ȹfDY>rNt^?_~gϞŹsꫯǀ5Z@Ⱥ9Ƌd`-Z@k]oX vkqJ kˌV pPaxz<,9ș/Xn&OM'n^߿?Zj{?oA۶m1fDDDӨFΝ//66ƏoXVV,[ cƌA׮]]2}WN]]BCCQVVYfaǎ6l^,7 ;wĸq㐔dbɒ%HII 7܀ ** ǎÖ-[пlS͔)S7_~%q 7 ,, UUU_gϞꪫ #Fw}ӧOcС>}:6n܈]bƌ |ڵ,>w5[黧@v_p}sN޽cƌqzн{wk;vҥKq!s=x%Mkq_ݺue] ף{1c:vo>j cǎu0HJJRtF}eO?-DW_! ,TtVw܁0ۄp嗻JmeeFFۇfo;:Y)j^}ֆ;`,TK@6mZ/^Ca}wM7.\4{k<oFگ7bリ*[עmJJ@DfZQNT[&V3(օ>d uuuػw/>3K.(++ĉqw{Vp}ʔ)@fUkRv7Υ۾6GڵkQQQ+>m1ĘFF_B_;wDhh(waر G4VV"i6Cujy?u6[UU+cg% fu(f2M-H[b.'-ݷocǎI*^%8Νyk_AZZ87J[7x`|ԩS1|_&򜸸8$&&bӦMXhكX̘1Z ^+{׿zdggcʕ߿?ÅrNd^mڴA߾}qa,Z;wu]{n?'X Y7]w1^.+D:W:ϷpO-g.B۫#X R-лwoqCU$OX XZ@m[Y8_(q}ߐHuҽ>g{k֬qE2̙ݻw#%%ũ蕑`x=E8ڟ^z Xvk ]~"MϘ)F{Ō3mbXG*YI`cݨ F½{ŋ1bXee%ꫯbɒ%s$;Y'jQMK(Bm`h)]}<٢}03EEE5kaClT%jѺM67ڵkR8Hq6n}3ॗ^BHHZ[nz=PcFa FF]'Q~d#^O9YHfL8nI+$J/qCe0 `ֹ'e0f>^qH={9k{S\veGx,h?eVE9f O݌f ϳS+C> p\_ѣ!!!qqqG\\|$"#裏j@HH:vh'66n1yJ}}=piO> ddd 77uuu6mxDDQUU ++l䠨Hz~@@ޅ <"77ƙ3ggϢM%""""RܠA>>>FBB`@ȽOӧሎFrr2%;EMM 88XŤ$d$&&~$"""""""""!EFFN:%c7??_zndd$BBB-cVV233VZ!,,̃%"""""""""""""""""""""""k|_~l~!33StѡCpi\tIz~X#&&111ﱱ->(CDZs=?xi6fff"55^4Zg3f3<=""?~uuu©Sp ]vĉ(//HNNFǎ>lcǎhժU鳎$"{\>֍DD-N$"a]HDԨҵӧO#33Ztuu5?&%%K.6l$ˋGDr9#''Enn.Ν;'=ZXf+)+p3i W""=i W"2o%-JD=Bdff}$ӍJفbbbЮ];xyy!44GXX-~X&Zšw޲;w\W7ݼi)#"")#""&ee@@+FDc>ܹs8qN:'OJ~IKСѱcGDDDh߾=BCC] "͛7_~QQQ֭[+W\+;vih>e&r|ڵ+z)/"cqY`߾} 7܀znf.,((@vv6)bbb9rBDVWWBBAAN>\h߄'11 HJJBRRes~|_LDjQ]]"%%%(..B~~>#..QQQALL +tA6 ;dggDDªQZZ*())Aii P[[+.((QQQB#&&۷G\\:tvɶ H/\}^9"㑻^TTL{zLdgg#??_:/ 4ŌEXX|||&YGhh(|}}]-""ExdeeI_\Iԋ}G}}yڶmpՎY%" .H혾EҗTz{{#&&HJJBxx8*++vI$ lݺUʞ2xyy!::IIIHNNFrr2y_[owusIx O'C<5G" !-nݺᦛnRtD?eee(((s{~|||󄕕Iߓ%;/։DV ҽ?(,,)**Byy9 p%5AAA?qqqFLL +sHQVV")Q\\BTTTٳRm۶0::ZX#11Z7F"23d DdT<.)+\9Ii^q%^%^%^Iuz5444xDd%%%C~~>N:,2 00 ԩBBB<#""ecvv6.\ =_.) 5pE_#}rӟ+[pOH uuu7 55_5N> ___\s5۷/A!""%"+8owuV\ ///O7,޽{xblذx#..#228q >t]K.ѣv튮]"00-'"=FNNٵ?YYY]HHH&4kn^^Μ9CBCCͲKDZTQQaM-))q.2144T=**狉\8u٨juzTTH PTTdܯt_O"*Kf9Y"&//~:3ghأGo߾ p,\׿ ntȆm0|~nYм^pYHs{Ο?/=ֹxz'DD_"QXXhHvm۶`z54""hEr>p=;;3-DHhĉ(++ ,$o'"=0} 6m}SRRH7 55| =z$''o߾ׯ틮]zDĞ={0|p   "`˖-zwh9~8ww6N8ӧOcǎ'?|3,Ft7@,C4E$~+;Dcc='"##cxxCCC###f]]]⨞oݺUǑUzj J/iٸIDk^P@&A6,rP ͊\.Yq`lf$IZp8X,Zl\+!""""wenn (@]]VQjq&Skk##"yJ<,#cbbBSYSâDTh[<+ݍGCD5YDD(tttcͣT*k_z)n;v ?"ڔJ{9_$IѣG;;zwhS|o=s ,cǎ`0ȜD4dY:7VKF;/Ӄo---:huJk@jDD ŠFR\"Y;%""""""""""""""""""""""d޽ "ҋZ(Fd@j`L LDDYT*Uv-)j !SXV GEDtcVJ-\DJ^Hv BBD}}=v܉@ `0~0zwhSx'3??GGzwhSHR7g}###?Ç㡇b dvv/^D,C4E$A,>,Ν;֦sωh-sF<G<G"&''%IKܬhʭ&o"2ocWW >њV,i$IJ{ՂFqOj%sss"^'LBeqig]ë{~u)K>DeY(Pٹb<ǃVGFDh㽫5ѨH"2"hPS~_@ {L СC{gһ[DK/ x^~|>twwݒ,U cnn5I56zc4%5arrT LFhNHPT tBAܣ&\KT ߫댜g'jjj bq3gbDeFH(iգbA}}N#$"""""Q?d2XXXS?3:暜D",H&HReL&yqjbbscCC##"NO!~TB۶oo Nש~($ ~_@ {L:u F6?'|3nd2'|?<݋cǎ- =̙3fÎ;3wڅLD7YTB2\6G;?Uvɜ3D^dYd2R)SX*=p8"r|gEQ;ڼgh++G """""""""""""""""""""""ZN,... "@-P\pfgg=jJ FDYTB>_1x466jЮt:L:LDkZX\X}VՒ :h+P(p8P(il6s={&Ǿ}?Ok.Da\rwx7q!۷A+bhX hH:&&&](;Dcc='B7VOLU8v񠮮Nfd 2E(}*B6E2JP[[  !-l6\.Hg9d2C:F.C:˲\.iq_mm-f3, $Ijllj$IX,0\#$"""""keYF"2ZLcyh#C&A",-eNSlj"ZSnVQ><"dYF$x{:::t1755#Gȑ# W]ٔ IDATцR*s//p8pQo"*_yr9aǎevBKK]&@;T-G;T-Gm۷og~,"Zs}drcTlٲe:tnrYǑsSSS+JeøzggڣAkk##"""""""""""""""""""""""zWN,... "bqqQedtDbQc0`XkV+ bѺ\069L"쬸2X[(h-.Kxuk@jSSSW===f"^uB!a?FP@KK nA<LNG.J%Ν;ӻKDkmb߾}8p55T*ҥKD"bFbp wtDZjI/F,wm]fV,WL[,111!ihh@ggX3U\. GGDTN}Ų\y*LٽՒk9./ˉ=,#J!J4r~]]V+\.l6n7$InD[[""Jue2QX]?g& 333HRe{:1Pocǎ+FAȲH$"Z?EH/Z @GG=&Zz-:t?~|_jջ[DީS~L?8x 466-uW^A.C]]vQ^{nz Zfgga1??rFGCDtrq@}񕱍MMMh$F3HRd2e L䤸Qp8$ N6 . ---:=qfQFDDkɤHdL&fL&ŵp]@=WV+t;W-6pF,0.ZY100˗//Idwm6E,N:hs@(B8F(B,- >7~7`X*Ѻ2>>DXD($Izwh])Jxq >};v'?I<#LJ 5qy,C4E$ 0??l߾~>^>===zwt,700!1?Q0^OO\. #"dffBajx<9qjl6KњP,df( rrEA6E>(- f6 f6 &IV__(V(J+UO$H mF՞ՎlV.vMf7>>! app844$jjj I%ASSΣ!wJW~($ ~_@ {L~:u ĕ+WSOB\|g}{vѺQ+ ˉqݻܬwJ%qq cxxl~'J떖tuu{E:(@ n ra֭:6Q ahheǡ!6 nG5bYDD(@ wD+3<~wq?On SSS8r9ǃG~њV/#ϣ}}}eqwFss]&G<qhhtZonnFWWײl6<"ڬ⊹C4fgg=^/vſ5D(H$DS$r-[xt:rvvŹASS#"͠2oBdccce]onr`042"kڴ73r^-MP^;""""""қrD"qqr*6{։hCYMqC~x\. [nqdD٨1=lhhH{1mL6֧|Dk,ˈD"iJ/Z @GG=&Z[.]G?ߏbѻ[Dk֩SpadYG}}=v͜ Dkv6OrSϺQSSh3Y͚W"쬸Gu/ݮȈޙBfPY)In5jT/mz *"|> "[VvX,v&&u2QrHk5Z4;;D"$._Q]XKۘ蝛믿P(p8'hiiwߍ`0@ zwhMFxp}^@}}]"Z\~'b1~:toMTFDFqy,,,۷oŞ={`:d*q͉k>s#[effBA1Ūkϭ&8ZqDYcMmi$IJʵ;Ѹ ˉh^JpqOCC:;;[pΐ6Yd2R)d2$ɲc*(d2Kb|v8:",fffJoYEH6ɲH$"Z?EH/Z @GG=&ߩSpK_8 "˗/{gһ[D|z嗑Q__ݻwY.W,Cs$.]ؘr?===ؾ};mۦHhC6(HPEKiL,NS\ڪ興ޙwR㈴*stVt\]LDDDDDDDDDDDDDDDDDDDDDDD5̎DDD033S5;J!Bed2dYϋlI`Xp8`X Il6H lXРn$DYru)˲8{jjj`XDb "6 v6 MMM:6 mX SSSF8%{zzׇ6GB  !# !;v@0D ?AnJ3gࡇ& ӦvY|_Ƿmb߾}xp]w5[X,"" !ٳD}}=n7^/~?|>^/u"zbpue󦦦$In7um4333fHfbE)9rG??ֻ[D|/BzO~lٲE.mZR drI fgg ,qtwwYF655%֎J4ŕ֓#z2>>.{@Q7VT*"}JjMma'km\jᕂ"EOjHD ŠIWp8ޮhT]m]2y<](xW pB$AA޽555zw=siݻ<=wwSR /"N8ӧOgGyFQtx"("b~_#bLpLiI!,,,pptc17"Yĺ7"Ɉ`ttޖm6EAq6/ {`vOu.++YF*?p\0 :ǑL&dJdu2yMmQ2I\'F077'{u YZJ011Qvdju RbitD{ml*ިF}66$ݎH',#EQ$ѡs/^āpi߿ɤwsN¡C'~C4*ߓ~_P(}}}eI~[lѻD|@Y 2GV\)L&#̈ XYnbpEݘW"N#Ɉb.\.'}jjJWSS,b%Q$_mL'k4FFF $ڤڣĶmtэ+ejx<^VesQ=2Y1l333HRevӹ$zOOn6<gbbΝC8F(s\r[nŽދ}Cسg.-ؿ? _!dYƉ's!wwqa^{/V]'( $$xy<G:suuu$ .K45 ѻ133BPܺt&kk0ڵ9薛E>G>G.C&A.)R|ZL&fL&Qd2]n2XthRL7_H$0>>^voeOwǁ6>gnitDLOOCy500!#=Ix<\'"zɲH$"Z?EH/Z `iN:{ W^Eֆ1??Zҳdgj³&*$077 . O\.fڵ `@`FQt>,8'N- pQ '> ^wq%ָ\.d2d2x<`4 i m߾kD,ˈD"CQ~:::t1ѻ_ >(~_OO} zw9u:bc=zETWr=I.m333HRUc177ZN!ӹ䷼n7;]o#/h4~FD\zUrfPE{k2 FFFmmmnbj{il6l6f3f3SѭpfQhVXsL&qJ5+%IBMM#%"ZZ\DڱX,ݧ>VJ$"Il6P L\5Ce5&Q(̙3BxWQ* I  vſ˴n}s=}{x;o_:_G>}sعs]#Z,.^X,h4*o&uVᮻbѻD+o\"ͭMvb֭:փj˭V+zy@"ԂbQ43KRT{J6K,#""""""b0wڼF[[N#$"yn3zHD7B]CSi,e6G@eD"( @$~:::t1эY\\?/| __uҥK8|0~`W ժwnX{H8FX`@ooo{=܃&Lni*i ohwuu]nvNpt:]vl IDAT/SleA$ffX,e5774J"""""""""""""""""""""""""ɚEm1""" %gYϋ{ѱ$zsZvU$IdYi>͉Eb$IlX,p8X,ll '뚛C< 144$Ef0LFWW˚Acc#!^g"# ! att[nŽދ@ `0`0dn,,,OO??O~ݻw%U+Jxq >}ԧ>O,.Ak,ˈbFD"|zzG"ED:,Kח/_~eRDvueBA$Uzf011Qvo{{Xl"y$IX,e|9_AD7 BYSyq](gkkka2 $l꿩 [[[u1122"4٬d2+Sf3V8W9iƹ"Ţx>VѮ-,,˞՞dqDxx"~cǎzwhE,DZc 2|A:t{EMM#•+W_X hX ΝC>p-Qcr$$dYF<G*B2D<G2~ss3n7N'Ngs&9'" dYd2y\Mn[.C>l& ff$uL.=դ捍:6iڦ]Զl6['x{=Zj[,qj+_vnZQWWHޝy'2,E\.W4 0bOFXsQR$@%>CCC1D:,#EQ\+E +5ܹsxp<̢.:u ĕ+WSOc5IC־7;wW^`@ooo{="Pshs],[`0d2ޱcZ[[uEccc"6a.C:4miif@VVUv---:hubYlrFdY.>sĽ#DDDDDDDDDDDDDDDDDDDDDDDD Y\\\ԻDDD,,,j`5d`jjV@@Ml`6a2DB) Z& PTK$NQ,kjjI%`"fzz,%OWŋE'˵$qںP[[hY k~; ~twwU2xᇑH$rPG /N|__5ڤfggqEb1DQD"b1 bqq۶mzpwd2u M-2L&ED"T*T*D" -[rprrttvtaffBjI໚$.LC>G>GP*M[jjjٹl3LU?shs+J-NH$0;;[vh:w^yt:Р(nhrIяF-q%:t?~|_jջ[Dy?}ܹsz* z{{455m5evvV ߮ox<^6g!~s 8D$:Śrr9UmT,7UUj6{蚓5H"""Z7x]N&(JeW&+X$IZLBDk Ty՞=ՒhLNDbeM}b1LMMp8SyBQ6+p8P(~@$AAڵ zw6Buuu~&;=h4 ߏGyǘS,#!" 7̌HLzBD7RM=ex}OOϒ9+3I*&U,.w(JYFtttT]\'t:ضm#%r O}6U6 ’<|V̲X,aDDDDDDDDۂ+h]. N$"z,w^znٸh,Keו{Fc~,5G3HCeD"( @$~8HWbO=?@ Ǐ;Ի[DI<3xqwmb8|sի"Hw~Ϟ=hllԻDSWT1??hhh@gggߞ===ؾ};mr333( 177WvvrqAvN :hyeYd%׹\N|k:::`6a2`6a`X`6aZaZa6aX٩Hֵ5LDDDa r9EL,7˕[__,}ՠ_5X VUQ-f( 4,dYF&(PE$Ajiin $Ib$I"ٖ-[tX,uM,iM]$^{5aB!aE? .mBd`6 /ZZZmRϟs=>svܩwhoX,h4H$_]$ >^~>wy'Kjb56z^xXM:NT#m>+r+&3^qPIPSSHh=  FFFʚ,ﴶ0LZ3~""""""""ƐN1;jX3"z4R"wg5şW^Rg(H/j܏v_zhh F8]]غu#"җ,ˈD"CQ*~:::t1m6{1Gŗe>IWN066z @]]ݢMd~~ϟ/}YLNN`0={gD RԲ/]1ʸ oǞx<>6i3天TjCDkRX^_oOϥ\.VtAm'k=+W++6j Z,8Z""`vvl@QdYR)dYiY:xٽ$IznX It!JɤHzWD}ppP?FN$IBOOl٢hRaB!Q__;w"  DggݥMҥKسg^xLT‹/'Nŧ>)|ӟf!fggqEb1DQD"b1 zsN%zo8w,es sj2s\$twwYѭ&2Z:F2DT*Z宙̜g||###AP@P(VϵP(,I.^[[NtttCwvvf6ˮ;;;Y hɕhCD6qf"XS\p]{T*!ϋ=a?o\"o4ipm:,#EQ$n|[>9444+_ >-d.^CG?ߏbѻ[… eϞ=I ]޳gѦQ,^ aaaño>m"w˝R9$`jDDk X޺\6|F0f!""""""""""""""""""""""""Z{N,Uޡir9d2dYyyr|>l6Ѳ`2D3ͰX,eYֲ놆FKDt722b2aCcc#:::VL΂D4dYIZt5a^ectZKdYF8F(B8ٳgA|>Jث|o~󛨭ջKi|ıc 2|A:t{EMMݣ @-FDpϋ>^~>===zwh]P sXL|S{&63kbblͫP( CQr9멩[[[aZaX{Vyߏj/Zݵڋl@ a҄34L'åCK"""""""""Z?d2c{b#>?PoDDQ6qE}bbBQU9xjRpѦpܰw/h@|;LX,*~^PzF;;;u)'?֩$"*7u:.L&S5aӧ{ 1izz/"  @]wJ]D}Y|w܁Gڄ yV+nvyӻkAe2aD"aB!:uJ:;^/<|>vڅZ{N $I鞋x-%)7FJ~=%n7n76RTWL`^-+ԤH+&5o;4554Z"ZfggN%J!JiB؏`fnWlkv.IDDDDDDDDErE^jCDQ.C"8b-.y$=#|!ʷu)] "|5~Ҧ%BT5WZ,~6Mf O|'Oĝwމdһ[ =8rfffȑ#T*ahhH=zIϣ;wT|H޾};u]LlX n2V簳X,hooqBb̐b\.N$"RkT*U')...* .vt,a6u-aI&"""ZkȓMȓRm-P+&Pbb[]]N%l'+U/6UDww7mp~2::R2YرIghME+3W\qZ[[u9!toD\(ZDzOOt]\NZWk.[m^6 ӈhP;%NW, uZ4\k1q DDDDDDDDDtIJ%)6'H`rrRZ,Q\8Qݦ.q<yM###>oZ+ɷoι+)P($Ab1瓊fӹǴQ-..G?Fpm-$O~[n7t:mPR CCC'N ˡ;vP|?}8w~~}л}'> |{>1Cӧ|O<Jn&s=+cr###ÈD"BB\V$"zxT~?l6=$J<{pQ޽[n577z_װg=z\sݢ T*ahhHw r9EܑXiG BRD,\] IDATm~l6{L /#GW_ŝwމ~hmmջ[<Ӹ뮻0;;|Ga-T*ahhH}v r9b3zX,1ctt###&&&Fȶm*t6Rmh9nXRGMѪ )Ѻ<Ẹ-OΞH$J0;;GMM vl];NMX.|>D"A$bT㘜Ջ1 ˅v!-8rxL#Zr&&&0<<\QΜ9o.&ۍN+ʶmۘh޶G0 <:::pW#|'.Sgc駟_wwhC;v h'?Ip 0 zwtV(pYB!D"ałV>^W^y%ӣMmnncccb(!FGG199R$L{{Zww7:;;Ӄ.tuuc=u^h4)˓WK+os:#"fdf"V42bQGQKKtLlJDDDDDDDDDDS> /JlKR( Z NV{vrPWWÈV/ Kqxx\uTo, p8xq[ u)-'@EL|{ddr1ACuz&BTn7|>T~?l6=T*رcxֆ~sCCC3o7M8NELTА{ĉrhmmSvBmm&RP_[###>oZ++xmA1LOOcrrRʑL&199(J&ommE{{Gp(N"hiDUy"鴔R7RXE@CCf)Ey#6ㆥ%{ADDDU,,, J)WK.OMpVjى.\.Wq,Sx<.%O8ˈd"Ν;'-B؈.)q\veX,:6R_~`xgJd@~G٬wwiXZZߎïk|>DL(?z V~;>c۶mzwtP*0::p8P(H$p8ӧOcqq رc|>^/<8Nt b1cbbh @DQLLL`||333444===DWWTAWW:;; :Q*I|| }mjbr1QZ[KK%ffdz[d5}VE*fi򜃈湯&vG\;VGY)~G|pAVPq cm. uuu:DBh81::*yшntww^twwf8""%A 288X,p|RK |sÏ~#|?~Ez!|k_޽{qQ]һ[J% )N8\.'żʿvڅZM[\.Ą@]?s"^h4Svmۍ>8""O^#f>"ZSgy<99E~8V˱555:H KZJѺ'Iii[N+mjjfnnf&uƤZDtщ Fh%Q'bj(uvvI `xxX\.V"\~LH6<<`0AD"akt:*X,OOK/^]lff?OpQ|>>[oMMMzwH&A8F(B$A8ɓ'1??:`LZHxM.^k{׾>G$҉\ A|  _k!W)=+p8p8hoo)m'\%_M(|bظƿ""""""""""W[Psi.l`04r"4bNB<%cffF555\qRrnEmm F|ኺ<ޯ]]] ujyT P($Ab1瓊fӹǤwu^u{ク`4lii ?p=`~~<9[TTА{% !ϣW|0!^~N+b FyX߹s't&&ɉfgg?_[['N'N'㫉hM"NK%Hy91tbQzqZnzFNDDDDDDDDDDDDDDDDDDDDDDDDD7,٦hSQ'b|]5&b'"=y)y8H.-1Lv\iD[CPDQܹsRbt*%@W^RUɓ'~~~x<n1122%{<>3 F4Ξ=p8P(H$W^yx>^W]uu9r9:Yuxxcccbr1Ym۸r勌Wى.4664j"X[9/~<G\اsBTY>/$"""""""""X,V,).P,.Jx޼hT,)6y"De2Z&&&F4mN |>AA:٬yqb4?Q^߹s'tm5  IeppX vat1Rcǎ_"\.y|л[_~Go~|ַáwhE9sF} a2o>ݻQSSwi+ H&b][؈.sp1^j<*Ck.{e L* Q[[ӈh+f3P1?XW{Bb_EEaΝx<|zػw/:QUbrzv龜e]ŢȈ6?urdF155UqQ"Db)TJ3)Is 'DDDDDDDDDDDJNuq[ҊB"biiiaDDV3BQ.Xiaxu[GG.\. Ks3g`ffF8GJ :>8"A@( bvIkƢ!><䓸裏b۶mzwH6Ń>{ DZcwSn%T,q@(B>d¾}wu]LF:~7@7>n7 Σ"ڼ_EEjxJlBcc#%@+iXȕtlcѺwܰw/hcfR"v1z&W+b%Qmm-l6V ՟c0":_H$RbH$H&H$D2J"P`ᐊD{{rrI :hs'tT'u<}4̱[JިR_~`d2\qx{ŢwwFp\xg#={Kb~رcF8t>ozw&AD DDPWW^x<|>x^x<&uGLj,&结{hbc1 UEТ|5fh4o.5%d2(2+.D.@D,>/qy"PcAȈ'(OcPH*b 'ͦsb{p]wܹs{q\`[ZZ“O>{b<n^n2bgΜQCȈޝj<g@t&fHޮu]_~ىbWrNMMU쫱q\ՊlaDDDDDDDDDDDDDDDDDDDDDDDDDDt7,--- """"ښV0<1L:BžV :AngA":/Z ӫ%PCXTrm]]]X,:hcBjyBHq1 !ikF0 "jkkq#kEoo]^C ޽{__hllٳgq!cqI( SO=vm?۷5SSSx D/#HxsA #|>455s׎Wyr5|A }HHRdTjQOhiinnp8p8`ڪӨhr155%l6+eYd2dY`ZaX"^=ɴƿ"""""""""""ڌW\ZQ?/_vSqQT:~DDoI&H&HRҶ& ܛL&|v4774b/(`acttRIjU̻T{{{y>Bo BRD,v'ͦs*x/|xGş+J<ެr+~ԩS8r~oƷ-85!]JbgΜ8n/,,d2a߾}ݻQSSwiR_Cva0t :rܰFIDDDD^P"\.W/$-0+nFFODlfbb HdۙL㘞V:Lgg'nwm&!P(`ttΝoQQ&&&E[f3m&۷+fΣK-ᥗ^ ^|EEn~\uU22r,}j_1S^߶mzyPH*b 'ͦsBDQx'q 7ѣٳgqa7׸$*?3|_ƾ}4?fرc+q1/,,d2a߾}ݻ}O41QJ=1ܬ㈈6r\K"/#{Q9N8N8"ZeaabUTxMJDDDDDDDDDDDDDDDDDDDDDDDDDDoqÒ;&'&Jf "Z 655Iڊeۭ:h' U6Ɗ :;;v5Q[[h֗BqĔx7 FR].2X,GC,N:Wo~r8pm0< O(J"LuuuW{WJΜ9'x?8w[2A@$A8F(|عs'^/<x]RLFsAk,Ѫ_6ri߀ԴB}'.j}Ud2bX W+. uuu:hZ.6H]&&&F5yq .xGX,"HT1C sBŸ! PH*b 'ͦsi}Y9r###g?￿"СC[o?u)}ģ>@ ^q^ZZ“O>~(555:VX,̙3مa޽ݻ4`ll 8FFFFyłnEOOѨ㈈71{xrY{;'":_sssf9VS|V\K7KH' K;HӅ.ědŠǘDvyɾۓRfQ$Ւ1mUBH><Ŋn<^2~_G3<~|c__p=fH$p8H$SN!Lx24]T$111!Fъk%ۍntttn]]]Dgg'Q[[Ȉ=Ֆ}tT랅@CC#'\.sOӚ;ASSӊgN'7BDDDDDDDDDDDDoԔ,3j ɪbx5 :hL]R̢y {sC|>1cll FR}||\q܌tuu ˥h=PH*bޜWat1US,c _:;;裏?şxZoFnI_GN]w݅wov]2"Μ9Sq\XX@[[ݫ8~޽555zwց\.'ŀź*[LJی 'zZBccN&F}Z)i5qN+f1n6%u0]tM.xrb$Bd2D"x1 VsS/֖bޯ<455-{\Prx_Z,555:h+HQ:isz'j0::1DQ"*LFhDWW۫Y`qT7A 288X,p|Rl:q=C}/ɤd0_Їt /СC(J`q ?; ǎÁt-ɉIڰw^qqݼޢtA8FGG177'}Eqק87jqDDQKպ /hSSSU t^Fdf155l6l]-Ve Ţ[e߳Z0:&tsܰGDDDDDƅ&dO&([bZf19$?UKb&o_)AV"3u[{{;jkku1ѥh4a ܹsRb- ۍN+Ν;֦hh5&''/b```/ n7~?*&׿u|Lh'Ż.5q9:tHJ4v~6 SO=vm?۷aI$.DD? Ν;zxz}vh2tTullLqC8ګE2fffd iiR).nWd2fnnfIE-oaD[x./T BAs-16 d2d 'R T$I$IRijjR"ݎFN6<AP T}}=bky8[8__,b 'ͦs駟Ƨ>)LLLT*T*Ih4=٣c/s+̌hjj7 r-+YXę3g;1 {U<mZ1Es^{ SSSFR%bnnN'$_.H~RnPɋbiDyKxD"Qq|_)i'ժoh:nXZng"""""ЦlVDbͰX,mn6a6aX`6~ DrlP|H=A}{BP~jۉ6DQ KEܹs߉jH);wMѐ9}x066z۷]w~?_"F4LOOkgŇ>! i'AP__3g'?y|Ƨ>)~{yɓG"aD" , ^/^/<|> &%oI&KA@&Qg+Z0:9$211Q&UÁFO9dY`ffV%TeYLOOcffFsE[[, L&L&Z[[+bZa2`6&-jk~""""""""""""ivvLlVQVۦEzh6aZ+fsEbb`Xm&\N1R̙H|~O*Mⷿ-Ţsq>%P.~>w[m1sss8}4t|z饗P(`6gsd2su}ttŸ"Nر1E񚘈t!b򆭔DDDDDDDDDDDDDDDDDDDDDDDDDDDqÒV!۴\r1 JtšIPVE9xD48$$R$-J!JU$]jnnnPll-N#&Z^> V1qs礿Պdx;ɤh.A000_WxWQSS/@~y{}vi ?3~LOO+544@vz?G?Q,..\.KsN8{?˿dL\ H ƇP.Ѐ;v_nJ hNNNbqqQ91)xӃ6GGta.$p&A<W|Vs?Kfh40zKuoj=Hh^+o-kݣ^mn6QSSƿ""""""""""""",VZO6]q0ގ|>t:YFZ,q.VW{{;jkku9d2!u}ll bQjUbD,n|>~k\$?q-hO[n5qw;m9M7ݴF=fggq)qGQ2سgxx}A-w!x Kv!ܹﱉVU#_:4444r"1==l6+է133)dي"o׺OVSSRQfVUai*DDDDDD:rJ^3dRUndQ+%iDXR$E_)>z!+|TdZ_༿_~9Z[[un7~?J mvvǎ×eEyd}}=/ӱ?|3P轶8|0nF.&6e2aD"aB!:u sssZa׮]obApWueyBrXv vgZmBru2Ŀj~mtZh5 wjۜN'7CDDDDDDDDDDDDDti,,,`jjJ*Ŕɷ3 *zޜi6V&ժؖdnnT ttTJVRIZl6vlebfbiDd2!UloΫ1Eb. FB! "x+@,~6Mo,رcdEG}wunkw;sU5 p\xpfggq)dhhrf{QO< ݦUP+룣sfy|ch*RA:V׉T*L&S/Ѩyhu:JP̌t}zzӘLF-3V(4o4uqm#DDDDDDDDDDDDDDDDDDDDDDDDDDD7,& $_-Q.5E-Ų6j 1 { :h :;;vCn7~ҚEL`*Z^W_}5n]I~^YU<#Iկ===$]ydYd2ūV֫q:պfS$nhhX*q_v*BPR'JнR2o """""""""""""g^mn>YpZt:94E)X /ZǝΧH$ 0>>h4QDQ>??/}BWWT0wvvt8"RPH*b 'ͦsןD"^z /"^|EwC&`@ccon0`2088;wٳ133#}ף\.cqq|kp\}ضm^fggq)߿dXzAnoy\w},uuuhooG__:;;ݍ^E׺VsMՐNP @MM'eWfjDnZBDDDDDDDDDDDDDDDDDDDDDDDDDDDtQ7,U$"""""b\%֩Kt1f&"Zuj띝pUuvv :6\. W_lVjEntvvb׮]hiiq$ @0N8%#C]=oַvMl 85odwy'gE\^455!n}d2BD"8y$Q[[>x<x^x<|>ڵ zwC& s>. 7r.tA|>L& MBp8аƿl6YannLF*gff055%mOOOWol6 ---hiild- Z[[mՊVL&XVL&~'њ,JdbQs< ].mQbJ1CRt:;; Ѩid2FE4{w]-h/I{9sr9JHaB2I6Д0ɐ2Bxɔa8) a qm!$i!k eNwmkyt]G~ݫ_3ysKB!;wϟ/f2 ׋nx^tuu ===p|_nP(`0#G <Zr6x7g_Əc㦛n7ވ/fts8~x}})y8Np( .ܹs;… B{uffF`0NSw݌;5آH$R5r%0hk*~~,p'''竮5r19N~ IMP(l^Q}&GQ Xg)|hcavvfRjIҫ% V@ VAGN[H?::ZQΜ9h4+I|>_Ex _r勂,U}[kk2JyއhjjnaaA~gd2l5OoZ7h)8$(b:FԮ(%2hZ88Nvl6v$ 3hU<)0E^덎|Khu>3Dqd(blĄ 5mQAofW̵'r$ >x<|> 1KN~>d~ IDATN6tw(Ν;WmUUxAK8{,t::c=궧={طoߪBcǎСC'?;"9j\S,cxx`###ѣGNӃ>5x__*62 fffJw)N>.IǍF#\.WIF3D P]T U/.$IMt:+j#J!N#"L"N#!H N###NE"oH-%l6TZ%ōO"7DDDDDDDDDDDDDDDhx\DƗ7~^/Gy(a1Nu<;D(fgg!˲-.TZ*QRoV6 TN劺ߣ%,|}>zzzxP(`0#G <Zr6x֡C000llKCCC8x`wvqԩS$IYo.oysssBu9ccc%%Ixcǎ!󡿿wF"qtwwK_~455-̞={pi۷oۥ~<ػwFʚbx70<<`0 !@I"q߯ /N$/{ᒄ&$xq0A+(M0\-p2;;[wlwoR<߿Y%Iib1$ iu4b4$(4REA:V+ѯ(Jm 0ͰX,X,l68unn$tñNgh:+i\] ˲\w[+mX] `0"jNeyA6X_#+^eDQyr1v}j Bj9r0 .kx:t8pFʶ444bQb*oN:|>_$Jb.V=QZ ZZZJ u\\&,;vCn 7;[xCgJ]x󁈈󤦰ݲyE'"#""!Ee$I$I$ (D"Q2,DzXV8NX,X,l68X֒aZ2lX`aaZa2,m333UHV^WrUI7iLNNbll gϞؘ/J2hZx<رjW;v\x<7Ç18895ݻߏo{?9Bc=k2{ӧo߾8,ZCO<{n<1<<`0 ɓ( D~^{-7z׷l6iȲ\T+2KEqIJw%IBoo/V!mZIƫ% n`i 38mF[J4r\m^XI(׉6Z#uOVR`V uMOy3ܹs^_IR[1|e]s088Ç_ V+:޽va6_" B!Ǘ嚍ٳOƾ}h߿O<ݻѻ$P###F0TӃ$W]uV N{ D[b9_ӯ(J{)^gh=)llDDDDDDD[b 2<==\.Ws[ԗtKwttiXnIu-7%-N qH[oI|㎎bpp?Qt:\wuݻmmmwx饗JG655<nmٳOƾ}hyߏ'x{mxϣk 귢(Μ9aA㘚v|ߏ>l6muLHPHpILLL #Nt:񠣣^DGG<n7[X:F4E,C,(PEDWX,d2Yu& vv$ w$IdaZxLX T L,# J!! #L"@Qii(T*/dtXvz=V+v;f3, f3t:a6a6fYml6njl6ff""""""""""""""""Dj(z):L&S`0#8R)(Y( ѨZ׵R-OחUu:%uX˧Zp&h(.\# a||Pd\$Qt@WW<xىNx<tuunoQmP`P-GA8v H PK?\.ךO>VmxCa``Xýx uѪYq9bJߓ'OP(T\7x#<Ϛf'˲Yq$t~ǃ^Od2YUL|S`0T[TmƲU7??x>^z  Q(pW|'qd2嚚}_*Z[[i{ӧo߾77Wuݵ~Kz\.L&:ڪ,EQh4L&D"D"L&& e2$Iqd25IwXVF5dd"jlffN[GDDDDDDDDDDDDDDDDtqG<G4E*B:(HUى:FUNhnnloX`2zGah]jevvjP=ިV)ovjLP=L.\@(¹s011v/\N+, x ׋Nx<twwv_t1fP`P-GA8x<rڶp xz:t8pz[˘2 h4,ۍ}sKZbJ˓'OP(T\7x#<Ϫm{K8|3BBxw^RybMh3|m]vo}zz\˿Eʓ /6kW/qbM%ϳZ%^,v6 :n m5ԏZjB#κRDKT Xjޥuj|&m]8nq<H wE|vB!A9rpx˵`vv>ַԘZ:8p`I 1Qoy䑪u][~EQс??@ooo2ˉeX|>Gy!2N'?ix;Ţ(N8Qr.xLF177WCQ5b>4bĢ.`\5w:KBDDDDDDDDDDDDDDDDDDDDDDDDDDDDD[֓"FDDDDDDtX,X,hoo_.7z* N8Q1,uDզv455! ^K$UH:33S2ܹs8~:.JUbrIrҢd`4Nf8|I_Q$F|>رcS&'w:뮻p]wﯛD3AQ{8x ~em7bppvZ'__ann=~cvvwygɼxǡq-`Ν$I… hmmbZ2׿u|K_ܹsH&X,uWFFF0<<`0!qo''> ~~L5?B|;7zP>f%˖7*3@|b$|uJ(^\kZGG/Bdl "H H ɨ( 2 $8l"ib> á&hbfhTtF8ΪӉ63$iɱ$Iib1$ ͩtx?cnnNퟚ848nfd2fUfX֊~^jnn9Nc~V 3/..uUn{SƸlfn,vtE莌7߄(2F.$N8>񠧧6m=sy^x^}P(`0~p1(@@-p\uqywqoK.Yc*1QǏ:^kbzzwEO>Gyԧ`Ze? ># L/rCFQ8q::y$ z ٳ@7tnZʺC(|1Ν+4L%ϗnzo5V-v2;;L&Su |>ߢE[7:X,ƒR/Fss3\.%ol"""""""""""""""""""""""""""""QDDDDDDD&D"ՔH$ŐNL&FNJ(JI*B:F4E24FFFJ7 t$N0$IMna0`K X,l6FU=?YVXV,yYY &, 8y:D&4//mmmq*P7Qy.Ԕ,<W0 *IH.ۋ< >w y\uU+j*L7pĹsp1yo}Q\yhtϞ=Pu{M_+|PBtM޾_u`xx`###x뭷P(t:g~ڵ ---z\%`ff,W$/ J,*|nI"XzTk88xb$I|Fh=,'R5Ґd %IB___鵖omm`X3IDDDDDDDDDDDDDDDDD=X,X,zc|*}jH$RFݶFTxl6zVWh3+}zK^bettzύU: x^5Nt:] b+b!'w7CR#9qP`P-?00 .K]6 ">^W^O~ۿ[XV(xV fxp8x m݆{ HdUU=333o|hjjR`zzx|>K]]]ߜVxZevvLzkERwFY3A4➉FfHRd2eldxlh2dlbFF#V+, CIv5DŽʗ1Of31X IDAT mz^MDBdꊢ N #S.L"N#! ɨAQdY$E-։tVFd`j-n2`6k&#{,%ijqB󩩩 Mf^^Z[[a0VTl9z~$P(:u dR]Wkkpi B/JHh4Nt:W_}6 D?qQ%o_ʼn?b  '4 FFFp}?!|MS @$q꫗tN, nᆊsގh4K&;v{QWj^x|SP(ԄŚ/zCCC8s `2ׇqꫯ^V# H".rE#&''KQO XF'qb1DQuXehXLGt(EzFxvڵ/^>$Ip8u",jcP"v,C.C4E&A*Rh+yZjnNS_Ʈ !~gXVwNSiL&v v477h4o5""""""""""""""""""ڜ*G ޜ6:.Ԝ/H -.]qWUt:h-llV/U:(PEO]^DH$_dZ&XgSSZZ$8Βp8*e7qz4٬ #&&&Ը$022P(p8\RO^3^)cEw߭; >,{JLT2l6[!\uU7\2}bb$gI[y|>9dY w@z{{}H۷9B;::sΕ|%q/{MMMxd[#jjߩz(I<ꪊwG[, 8D5333fb<ϲ1揈kh2 0 떈}) 4fgg1<<$%[N&Mh.rCettT|R\K-. &i5NǦ%I`qEy>}Dd]"yqxGB$ݻ_|T >7099}عs犷N:~я~&jZ{ݻ\s ܹ:BH$)aaLMM! arr@$A$)i l6v񠽽===ѡzϴHH$ex\p"P']Fl65)h(\rژFF6v:G|jEQ;c~~,#!H J! !!" J!L"͖VUm Jjv:>zv]n/^NfSEDDDDDDDDDDDDDDDDDDX"FQr9beHht:a4 ^qnGSSN'Z-N皝Cbx".hvv =??[x?quct:oaaa@{/wcMm%dYV+ C8"L"˲_iG Ic8Ί"byƨ^.+X~ԜC9j:- mQk=J!@ed2R)qd2blddH,xId2$I$ 5yb , l6F#v tBnI- t:Gib5k.yYqm6RFGGYd2d,g7IN8!(y% 2'#+`ZkG<g?Y|//xߏ=ܳ<{,Z-nF@P ݎ6_fff}=>OY|Ƌ/r9|>?\[|>)D"aLNN"`bbHHPHX vvىwhooWǵfmQn}q㥌yۍ곿|&ntFij9mf6mt """"""""""""""""""J"A5ND"5K$r G:KhuniL&Z~"U.2pܹiSSS5WKVִmQ_d2֌QގSIÇ# arr|^]F$5F8Vx㩈7ZKXnujEP8_׸p}nXlYth4|pQq> .ӟ4q455\_k3>^|G~cǎU=]RjʿDqI}DKŰY1??HRj%2<(y=ӈfF5I$455ny!I:Oq1jhP+b$"""""""""""""""""""""""""""""ڬ~"""""""Xss(p- "H H I@(2 $2 E'YrH$ hn^(I(DzV4d8 #m׻e%-/ 'vvD`Ij&$/NF>::o&E)Y+I<./2|/,,^u +g>۷MMMzN^{-^yzhnnѣGK;h4ݥ^ шcbbD=P'''W ~{G~<G2_ۉ.|Woy ~CѨF>}zv*q]˲& _8L嗫$~ oj 777YknA5tkۍvFe|h"K&fUIw`I7hDssz XVzvH>hZ8ΚVfߚDDDDDDDDDDDDDDDDDDDD%b#֊ŰEQ(JEMQ7J1@\bّh6E2TmVNfSdL&fX, 5p@B$uZDk-K,IX|yؤd٪.^b[[[a0}lI9O6QE0ą FeF#\.T!Zkr\.\@2lh\.׾( +o1Q qVw8G^/Kz~+ަ]KxW^yeۯG<#ʯq-+=~?kG m[m,2Lu{|m쥵#ʻThTb1ϗ#'i.v8hjjTw`(lݎ&H_y """""""K$$iͶ!qCd"zi㘟G,S@iP(,/"iH^*KT 4 ^ VvErIݾfVp L8%+X2rq>066z cccx饗pYȲ[s;"믿{O}sطoߪW_ÇqG?N`p`aaA[]g-܂uHl4Kꪫj1==\:7t}Y|cd‰'0<ѣu9&P(`hh:>===׾Ǐo_6<},Fk40n[ŮKߏz|[6fxzӧ媮^[)ztwoʻv& ~*UPX.N[whhw^C___~vhZΖͶjRpc޽g_*~ar'Nd,BeYM^/SSS%F#\.$IR|>xfL.eddD L"##"b1.H H܎njfj$IllhkkWljl6$I*LZ֢q O~@esD"6貰X,}hjjR\7p8jFZD- !ʗ$I].hnn^ q@FEQ[l(‚#U^x)D]Q_WԽuqF#aZ:pŹt:h4lnnhX'm^űr^wY똛C,SdY..FQa>}dZ2nI~"I vl68Ε%1||ue%q&;22 ---j\Iq񠫫|0\tV+aϞ=+p饗000@ m֘(x7Xw>Nkǎ[6Z-ZkPhgΜk??\.^D"H$d³>ڵ ]w1 ǏGgg'.[o[oW\7xX vǑJ׷cǎᡇ¿C"՝_+_ 8ID"LMM$7LhkkCgg'с믿F{{;n&w9õL&-Y1zKk|BEQ]XXPߝ\y<ѨL=Z# arrRj4ttt;w-܂nx<tuurq#Zrfggdjn}ގ+}_|xZD\NM(oM<1VocwK#o1oD111w H$Ѕ  2 v[uw܁91[r cccysEhȿ樣Yg dٴiSj7˗HSSӼsdɒeѢE9חC9$tn*errrgA|@Q|_?߭wj\}گxIDAT)555$ag߳s}[/uS}FNI@EoEբY299M!(x6o<櫶yOOOJRzQ(ZF/ V(ޚl[lZ\) ,x{^o300PްaC7ټyu37ͼijjʛo^{-}}}g}nŋzvm9 'R4o}+SSS9cryU ~innʕ+388<0˖-aS1Z*?猡($~s}ܜ;n>`VZ$ok?&&&&I{LLL{|T=3[fƍޕEU~sߞ"֢¢-yX@,lmQkWmٙ깙hvѷl`oR|PAjהkɋɻ̋|ڼ"gv={ T5>>^zi\Zڹw*PS5/֘yE9BŚs_;_;T;wmQqk׾͊|ݡ6c|_zmes̖1W[ooo:tA9g?===JJz+v['ȩ:{CNT5kQ-}}}YfM֬Y,^8W]uUwx?M)J8 7|ݮ|vkۊlK^{846~J՞Ѻ(m.E\>;3yjjvF2ۓ`E0zQ`(^]T*BE-[dllZv||<###I-^)3 ҋE֋Ewv466:600~n喝*.]*RT֖|_LGGn??reU~WUr?ǻ}ߗ+Zwu+WX0r9'3444hooOGGG:;;ݝttt+]]]쬾ɂ fHsssZ}lm=$>a %y>VvV>=xBsss:::f33BػvUm^O T]_@9DZ5\E.RNNyw殺jJ/TJ]_O(XGsΝ$innA*r:244T͛g ?3 V?iooOggg5OGihhȊ+k\ŋso 7ܰNÇ6'jWr~vmkr]weӦM֖;ogdhhHS?Of>?H"۵fmevkU{/Wimg3v6[.lmE^UqO/ܥ쬢0lQVNf/^C-\-h 6pb;yq鵅g+[>/(Jf f…3Xvm|yYTۛLMM"J%WNGG6ſw85YjU[oJ%]]]KTJKKKZ[[S.ҒɴT*ezz:KRQ`(:>::Zf[{;x@50[[q]477OCj>P^Eqڢس횛9$KP]?00SsCm\+cӯ#3T*=ghhy`200 _KN͚5k3$I^|q;5{ɉibb"k׮Mۿۼ$ɢEٙtvvhIWWWs err2I288m\͛7_^lTT]XSX=99)kߏv{kA-jmة=x<`'jA=ll6n89j9Ξrz+[lIggglْ?9I^x|xZZZrngtt46ld^~z;]jzz:MMM::+27oMMM>S-\T---illLooo>Ϥw[f7ޘ/8'x.su%I.].lͽ;V_LyIC=4J255U-z=R)`,X MMM`vEnQ="hW err2I2::[&I288X_WxwrwFFF$TwFGG̃JW^y=<<;^*J֭[$YjU:묔坞Ü~rx>r>1>>%KK._:!6֭ W2g-[__r'瓟ឡ7>yrwfikkwx0%Iё /0\rI>O1 K/ͥ^-[䡇ߞ/[n9S`X׾믿avJ%7|sֶþOdҥ;<+_~y.LNN;ՕW^:+{nZZZ퍹F/sgtt4?я;,4;>:߻T*_jW_nߎ|k_ۭ?Ky?H=ӷz0o\ߗ\pHz ,qu96kz{^z)?O~cɲe֖$)JI7˺u .ȡ<3/~EOOsY&_7x#O-[ŋW?syGiӦtvvOi+V䩧J|L\innN -ר5>w^:wqGONTʳ>:+Vȋ//˗/^<(`X`o{^>#ڵkswfÆ $x\qtM򗿜^z){onݚ>:/ˬ^:u][r5O??W\qE-Z|0w_,X.(o~}u:-hpp0~{^x\s5HygGG3<9Oʟ\.WU}tt4CCC9=GuTJR>tww\g?awkw۰aC|͜y3O:<#YvmN>Y;6mJtttT*Uoڴ)_=֭H>jo|r===YdI~_N{{{z>)J)ն#8"---Y~[c=]d|||F{WWW288.J푑$Wtuum37͌~;3ȯg?˹瞛~:_ksjuwwgjjjyPޭ\`OW~7W.nw`z{{gښ$Yfͬڒ$O=Լp|ϓO>_|15PTu>;̃nz{ ;k֬x}`` ccc9cꫯfhh(K.s$)J {qٲeKn֜tI쟜Do|awkwkll̟ٟ[o|3ITwߝ#<2/Ntuue֭я~SO=5###;r'Ĝss9C塇J|_Lsss>Yw}YlYFGGs]weѢEYti ,YrG}4O dҥ9S*$sNzzzjժ"*JV^o{>|_~dLooo:z|Ƚ w񴴴kݦh6lؐɼ9CS*-P/zvinnΝwޙ+W//P466/_;c֭[ٸqco/z Qc|+_wG!o|sokk 7Fr\(;>z3뮫w&' *JAOr>'C4UIENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/sample-backref-graph.png0000664000175000017500000013447314701712343016577 0ustar00mgmgPNG  IHDR|kً;bKGD IDATxy\G8IBB ܈( *%!"(7Z끊GZm=[G(ZED(hAQP.D@*rc8H~̯ɱ Ivg?3;3\.!:a._TVV*G&QQQ!x}ٳe}@Fn֬Y.]D._,x}\D19|||>}i%5x`ik޼y+(`n.` !~a.` !~ޔ㏀F4iҁϟ/dL}sAw}wǏrl6*'''>>g)vvv"?z?"3>.]Ig0&L=gΜe˖9;; FBqGiwww{.Zb˖-ÇWVVcX«pHw}`0V^ظqc\\… ,YB)4ic\PGGGggf%= qB$!4w܊ ާ6m*))N6MUUu֬Yiii_uuuի) GHL?vӧ?>**CQQQ:;>hkkH+W޾};++=55?9rɓTeˢ>}bZZZyhjj]t7MNN^jR(GVWW7778qD"͘1cȐ! fM&322޼yχh#GӠQQQJgIi#YlH$צMZZZ>g2?-Ғ߼ysll,B(&&d>x`|$.o?D={/.*H$BB1BGGʕ+n޼9gΜcǖx_^^gKh4_{7N:t(>b^nBgxLb{ׯiÇ!Ii#l⨩8/_b cὃo(يH\k$8H s{ݐ!CBZZZ!9!§J1WԂ0`Nd"ijjYFCC#&&M6͚5kڴi111Ν!76mJ kȍ-rqqٰa+ ݏ&gW^>?߿ruu$Ia'999 _YYYYY`0&[ݻ /_~ԩٳgԛ6?f% p8.\022ڴi7@?`ۻǍWYY_ZZZ[[L PTTg۝͛0nܸO#⿼7YYY\h̙3544_ri˅QPPpww733NLL=i4Z`` Ŋ]bEEE zikV" o-NEFF޻w.$$ /f9(獉y3>"¼n >JǀTTTdt͛.]ZVVcǎv637jhhhhh榥_xD"EDDDGGoܸ1-- !`0kii211=!333:bTjpppxx ~LPVV>榩)''>q#&N`0LMM̓ "D'kD244D 8PII>An!|xĈZZZ***8#GM<~277!OOO:၇N:j(B4MGl6[dt:Kdٙс>>>2 s$hMjnn~EzzzJJ >j?>((hȐ!d"oJӕϜ9SZZ*_$K{{m۶w܉_.Y}Qdtq$UUU}9YH$ҶmD.?SVZ}*2;˗/yd$w|||L쳤RSxeUUU999='X`靝J 9NkkkUUUBB۷{ :TUUWXacc+Wܸq ZYYٳGӧOkijj8pgϞqƍ ϛ7议E555}00͵~֭[]&ŀzIO85.hѢlq 477/Z… Ҋ$Tdvv6[ZZ-Ztn.tt9deeyfga_S۷oŭL&3$$$ ` \dɱc{Qyy͛7!~jyyvcco@@O?nݺٳg,O;Qԯϟ5ktqqx޿x-WWW2d2Ϝ93w\qc\___G &#dyd%IM%Hew"nl+W4ht!UUUOOϦ?>?׭mjjRRR/]t=8,//IŋQQQ JV 8lz92{W Zs8pƍZJJJ]6o޼qPJZfMEE~3N߼ysmm-q$Goo_5==]0W^^^II!pB eSLaaaaxѣGϛ7oȑmmmL&snnn~iϟ?u__3f())%$$?)00pȐ!555Itpp խ8qDII 脆ܼy2''GQQokÆ +W411ٹsglllΝk``xո8ĕ B744믍 i4Ϝ9Cp` _}|iiiXXXii=<<6nܸj* 7oޜ\ 9nܸƍ ,u])7-\0;;{ɒ%kN>]MMmQQQΡO3gNVVֲe˜K\Onjkƍ e׮]˖-377Mqݻ իCCCBBBB۷oVUU:vv=d}*cc .t钷7ou++آyFӦMSUU5kVZZ_]]]zjD֨{^r!ɓ?GŇ|}}o.nE%WUUu̙'N~W_}uq1wp9kuc0)) !4a„L|cĉ‚D"UWWsFmڴS7 .CM*.aIdF*Q7o mm-!ꚖFǏ&&&֊&O:p@Ç/X@Lt[FƖ677?x@EEEUUD"\YYYȑ#'OceX ---{/q円Ϙ1޽{˗//mqW=~L&gdd444y&//[hQNNˍ RÄ_jUAAALL LMMs~ T*UdY,j-&''Z͛cccB111L& CMM 6q5?{ѣ̙sȑv2|y]tin9HY. =Y@b: $ISSkӦM---3ǏkiiP'YC.R%n=+Ȟ{ cFMMMVG1T:.q[7Vn#=<@YY}$A+&H&LذaqIX ϟ?tRQ ɤ[[["f,ynmTrrrq$"UVV 6,""b˖-@˗/?uTKKٳEުktuu%eQ]]ݭ[ݻ<gDppvp/䔠Du2Al5 !4`'믶iW!.^~8p+FG $inswwGݿc@\ |##M6㋽8fRmgOܳV;F=}`+(//omm%Δ0ɳYXXX__c\OwO(**=x- x-^"iYY\h̙3544 ѣ,Y".ID7n۶mfZdHFX+VTTTٳvggy橩)((7.((H 52`ll,# fff;?hx*BHOOOMM (S씔p\Ც*ANŕȢ8k C%M\BիW%&&_Ϸ.^\<ڣ/_|(;;;kkk\85q@\s_WrƍE"E=Edd{BBBxn__ڎ,oJ%n=:;;ܹ3j(1cưX,| I?LOT*_jfbbrU=a3#WRR233C\#,''=ztgg`06nܨ&''x/¥P(cƌkQ(|z)JeXQQQT*5888<<… ?cff@$J!2zظ>}J YPPPPTT$Ht:sABŋ$)((("""::zƍiiilqeSRRZ`uEp`'2 '''SSSyyy==='keeemm5k<<99`g.!!aС6l0`AB{Sqe%w%Bd IDATĄFQQFeiiY__/.6???5JUU~x\.w8q__ .0x=== V_RI>ݿÇsAYYY.@b***d2yrrrt:lK.-++۱cG{{;A##Hs!qT\hii(**jkk㵎9RTT4y~ܜNct:O:U\ͧh>b"c7HWbCг766~ VVV~~~uuu0f^&fffM|!*4ydCCC -;w^<}FFF+]x7ci׮]xb+< {{ϟѣcǎuuu}1KԩSB!C ݻWRRR__xႂH2 QFM<Ç>>>+,..&h\C`]tlHq-bZd^Ą/5kAAAӦMillA3vI???ڬY8>-2 HL!ӧ^FQ(???wr8?~nnnǏӛ:uݻwt˗'O| @|"^dYd&@*CгbX<0aŠ+LMM#""BOϘ4i݁)cccǎcnnnqqqlذynGDFF♸999HJ3#Fh433>~u"O'233wk.%%wޥ_|Y2W__ɓ۷[|| wqx#BlYGeee_}</H >/t` !~q  l[4O *?ef͚%P/_>|Qh4,988DX,ӧOKKK eC#.y掎͛7_cgΜٶmB_z5BuP s1̟uDH_RRҺu?bŊ={:"4 e cΝ%%%>>>O>uPHMqqǰaÊ9c\` zСCϞ={Νkkk666:(>J}}ڵk{:(b0"WWG:u… Ç?rHWWlɓ'/]733YA >>|_~uDH g OAMMmG2eoii4\0|:FFFщ^255]vmss@:< ۷)))qqqÆ uPSswwϛ|@撒֮][VVm6eeeYGh. #G 4իW |LahhXXX~@LLLnܸXZZ:jԨ-[:(Mí~\\ 0}ǏfjjzI#@?? رc>trruP悾nnjs:"?ŭ_z͚50 %8 MM#Gdee)((899͞=ײ +=8q1c>} pa.苬ݻcjjsζ6Y>{k׮7n\kka.c0}oQQ޽{={؀aXx+W;GGGYw0i4mڵEEESN]xÇeřnݺuʕ˖-#z9qDff&J?~… oY>...666nJJJ '\ٰIIIpBJJʈ#v!@U]]|r[[۶h}}}Ya.H~СCGt钬} kbbm\QTTܼysqqC``[~~}4ܢ H$Y@6` >WgϞ}A[[… kjjdiEEE0  s6--̙3III&&&`X |Ro޼pҢ*<L&>pСC:#@kkk_ݫO?-X(`0;w|왝ӧOeEqqqfff{Y~g`.0ٳg߽{gmm|ZY,''ر;wTPPuP~hĉN566>rHggRba.0L^p/֬YyfssYz&&& gΜȰuP4LIIiΝSN}򥬃r/]4jԨ={lذ sA7r褤rSSӵk655:( lgg砠 &xbΝt:]A<0|)rss=5|#Gtuu:( VUU䲳Ϟ=;h Ys\[lYIIҥK[[[۔Y8pOýs玵a.⨫߿???РA...eee pH sƍeeefff[liiiuP_ &9;;4\ѣ}pMLL222.^x++O~ #G 455'L0{reZZZfϞ`.+ ?Gׯ_x7 o d! SSӛ7o5j˖-߿}o߾[0ȣGf͚pBCCl6L''' W0AEEE{=~ٳg\nii8?.0)Sl.G"*++.\hooOsssϞ=-HO$8 8[n={;wx$drBBl#쳚_x+1%%fO<955J?~5kh4 a.eaaQRR"p`999 !C*>GFF ?KL&?~\&\>ԩSEEEƒΆS_v!\\! f͚O/HSSaCC"''y5 c.\0w\^ޟ,$_,8 ={ɉ[֭[֭QM7P($o៳ Ν;e}|cc#~' J0>K鉝q>Ssεu_(d2e'N&Vyi~i%9# 5d2K"tCD;-~a.` !~io߾/++hcƌ"{(UkkÇ\]]{#}>1;wɓ'$B0 ---###?*ٳ O [i[[[+((,$T477͙3'(((999;;A]]]Z tx7` 3_~D"s8`mmf}||[[[cbbpϟ?b5`eX= E!4uԩSJ1quV)l\>)UUU%%%2A߿?to߾R'Oe }t{\II<רB~`'mcT0ϱjllDkQQQRL&!v ^e֭***͛7/**ݻwvv 9r%7S @+Bx$ʛ~d &&p꺺X,VYYYddd&''v…斖W=Fq۷o;v숊⿉˭F544߂WNNݽ3!!a޽;wF}Ç۹\!OUUUVV>G X,˗/;,=z4##իW/_rܮRJ7Z:ׯl6AG)n[/} jdB"Νkaa!@hE1!CYYYߋɓ'o~j6}})Sx/==='M{jkk{yy13++5##L&ۻHZ???⻕?сnxcx/5557mf/^X\\իb[[TVV%NZPPo4?~~EDDUvZ$#:y$׊')a>_0W` q` @?\0C0 s@?\:zEkkÇ\]]%_>+++;;;$$D]]뙷oǗh1cxyygĘz*''gڵʟl‘8;;0/'KZEEEff/6o,)<|ڳI삂LCCCOOOa_K= sx~DP( CKKJ,³g,O?XJ.==?G>666ŋq %\9,,lΜ9AAAl,pW^y8q,qj\.7""EܾC*|z]W[J?x6Oaa[[[ ? ׮]+))QPPpqqqpp`ϟ?0aZݪW[*))g?zvvv!HL>VGGǃ jjj/$ r_|Ckk755/$ Tp8UUU= ͶQTTlmmݳgIpp0é>>>%%SnZd$}`H15Ƀ =-ESLA./'+Ij|q";u8$l\\%33~0`ݨQzG !!!Ƶkjkk),+22RUU8ՃfΜ9zh7Lޘ1cBfͪx.=ӧOߎėw _"|d"33˗ ,4hrrrzeQQQff&^ZZXYY)//off$%%UWW+++;999::tq.???99F]] wW\266NLLEڵ !{nK O_z]VVVnnڵk322|8`?}ٲeL@@ 111AVUU\ ;/^8u˖-v[ IDATٳg999Wzׯ/^'reggggg\l6ݝFlv{{ 0ùuÇ @d5i>}Ν;޽8p W,©+^Iy&..BKK!C|c"@*~C޽{ڽ{wSSq.a6?Z:^Kd<={]g֭xjph4EEE}ҤI%%%>&>"xƍRﯣ#P]㍼rss_|)1bD`` |SSS׫NUUUddߧR%%%:::xEǸD8p`SS%*L&3""`Μ9 JܹͭS1ٵk9&qҥW^YXX̚5LWlzzzgg'99V;;ϟGDDx{{O6MSSΝ;Ϟ=;v,D˻z3n߾5d^:l6;%%eVVV B&333\]]_~}SSSӧOO0a̙T*ʕ+VVVrrr/^رcǔ)S~Ž{N__ȑYYY$ɓAAAnp8NNN "sˍ\]] 󘚚PEhffF ww={_xHMMm̘1O<166G.^v*:rI&UTTdddtuuz{{# y䉺.\.յ$77*UH.\Э4"""<==(ٳgn߾mkk+//ϟAvҮx$ğA3)**RSS*((Ȱ)))vڻw*ɱ÷o||O˗/,D:::1LUiiiss nՕt EEE<E SnD8q'ЭxWWWWWuuuuu5dމ'qf̘GDDL8txE8k =^]F"M fK+b[R]]]}eeJ l]QQ!F\&w\ZZ1qIH+?~Y\\\U vvv͈ZZZ!+***T*7c-x[&5̛7/**ݻwvv @`q 1W~ăR&M|yO=^A|_=PPP  "V\]]={vƍɓ'ԔHVFPS#.a 7فMɻ \"$=:wScƌYb˗/8;;O~px~-njkk㽏$\n~~ի%? ky?q &5lH*E)L J[I _"4bĈy[NYY9<<<,,ѣG+fgg#,--qi2c`ӦMfdɩM\"A555=zh֬YEEEwޕ|=^Ȕ$9` ]HDrvvH[[iӦLVFPSn477_]=@$׳nD@Zy$󑜸ܜtcnٲeʔ)b5kX[[;x,@[[[^^zذa/_D#Lb``?MMM544Sq7 LmB%] /ĉ]\\^x)//O0HMM-..Ҳ'ɪ{rug}3tP''d2bbbbf̘Z^^'* Vࡦ.X^#¥!K~ /qR+ DF"a***.]*pN "+@j*qS#._nii}D…fB&A7"RqVح,.$G]]_qKNNnٲeOk "(ÇٳgT*OBo.z%Myy9S'tuu@Lx-^{V166~yss3ڊ&$޽ۭ] iA$iaajjjJIIr;9~Ҫ}JRBe724R5df0iÌiƐ,-w"ӈ&ՄQ$=|$ѽSz?z99D"Qaas璒LMM-ZE܌rKKϟ>}Օl궃\wwItМ l6˽uV~~~bbb|||FFClaaQQQkccs]mmnݽsNff&rppJ.]233޽D"ILL011uǏ-,,?~p_GUU777OJJy󦅅~rrCCٲH%^Ķ/&669::RjoD"$$$TVVC*zQ^^.J̙r];v߄K.pSGGB$уG"hiiՅ>|ر,K__)))zjy999O>uVvvv~~>!$;;[MMܹsw!vmĉƍIIIԿ7aì^'$$$/////oȑjjjǎDTh.((2ds[y6اOW]NaaO?DLOOʺwuE?$ ͥb^rʊgB*++KJJx\xÇW2''GEEٳwޥZ600pttI ^MԼ~z?޲Vl{}nMBmXYYꦦ3ť/^l^$mܖ^~3UVVR/9::lP|ڵLj发?S-Gm|\D{o߾ѣG/ƱcǨKNKK;vl?/o- 322-,,!#F000xG!DEEƍy>qN!ܸqɓ$ ={6(Y}>t] \eeeDDD2UTTx<;gƕH$ԔB6܂JѣG#G444dXUUUYYY/,IPmmmCCCj)Mxk xСC zzz9]VUU߭,Y@KGMMM7l@wss@ !B% J),*MMζ6BgSv CWTfΜIw '޽[RRBm offFm #Ft |0DIIIjji.A&]6!''G ޺u|ʔ)'Oru7@m sntttZZ)S|*ݥtUݻw/22R $''鹻{OMM:/\`]_RRҽ{낂OOOZ :!@׫W/*ܹdG]k L<͗/_UVVHYlY]\\***.1wۧ_) @p 0B}}ŋADDD]]ѣ|̙3. @p 0Fs455VVV_^^a4)111***$$֖Ϟ={t G@ŗ/_ɉd11$99Y :uwӦMcƌaXtW ˳pvvrt!m@ y󦑑ɓ| ݥ \`\v)((SNts9sϜ9C]]]]wwӧkii]!s :u*:::>>^EEeĉ|>KGG^ 1C% ??@BҥKwo߾J `4\222񉊊*++ۻw/!dڵNNNeeetD2c``@Ǐ>}/477nII 0QCCÅ 3gjkk,X`mmMwiP ́ ѧOs߿?ݥ s (X,|@  +++򮇇СC. 11$99Y [ZZzxx1cưX, ́ @3Du;wӓ;l6nC(lСC򲳳-ZtcǚP6D"khKCCCPPرc꫶LIIYl<xb.@'bggӦMkλϟ?@VDDD[.))AbD}gϞɼq!tFvvv6lHJJ*((ꫯ <==+._s|il6xʔ)he_RR낂9sx<7##v8@K]CϞ=[VVgBҥKӧO.C>|իW<ȥKƍ׭[7>ɓ'qqihh888$%%Q*,,ݺu3fLFFF߹sw۰aÇ6 b.@cllLM---ݻw/!dٲeݻwwqq (//@PZ3fXzuYYGb8Nqq gzxx|˱c\\\o?CCC\"ܨf̘ɓUVZƼy֮][VV6eʔO?T ]b.@WehhHݲ}fffNNNtѣ<׷[n˖-6lԩSbYӤRի}www--Yf}'N֭ۆ LLLO8Q__}v{LLLlll&NxݗkhhhHMMݻqk\8tQ]OXXXEEӧ+sss''m۶ނӧOW011IKK{;w7Y|9!ٳ/loooaaquꉫVz BCCBkhh?>+..^fLb.ԤVTTDDDXYYmٲښZ,//kttt>gϞ$$$|ڃ!Gz衩YRRjɓ'XbmauVKK/B"@!(!uuu*VUU%&&N4)00_~T޽y&BԿO>ƍ&&&|>ҥ˧Qsrss[rVVV6[RRbmm][[;vX]]ݴ竫 '';wܹ??ܱ 85Uʻﷳӧn܇zٳg/^XWWQSS5"$$nQQQMMٳ_nʕ+ .LLLw/álxccw}Gݾ}{/_eC yÇ|>ٳcǎBޅv:yK\.zK믿!uuujjj;vxKJJJKK?WWי3gBz/,++kK,6mZ=!'Nx@ o޼߲qB͛ӧOJ@g&GXvmllP(.зʕ+ZZZ/ ) IDAT SS?unooֳg?:.HokkڿݻwK$[ׯ8pS;֭[uֵq̬a׮]~-333ۼys^#͛7&OTTT. d,,,^ܚKR -ZBmЩ  ArrԩS|{ァFwi oso߾;TVVLR~ذaLk Μ94b.0b.ȞX,|@  +++pwwwrr4C@9H$ <<Ã3b]!s4#6MݚVTT;wԺ@9!egg/^866vر&&&Ժ B@`&''':::**6442e wuuUUU4I @{EFF d]]])St֍Ҕ b.0b.t"O/_VWW0a֦¢9cǎMHHPdIЉٓ5|Ϟ=Kx<O]`ӣG''6ֵ;w"P@h@pyX=44ƪ 1GsKJJ|1cXj!ϟ/gXiӦ[ H$zdx={{CmmJ555K+\Pr999 $$'Ovww>>(9BntttZZ)S| ݥ)ʕ+>sBŋ'L@wEr SPP%ҥK΄ccRCwEr *jhhL0O>]YؒJfff֭駟.@sHQQѹs碢bbbTTT&N󽼼ttt˗7oܸ7aE+Ahٳ,kرsx.,,lǏGzYNNΨQcEEENN(b.@+Ϟ=4j(j SSSBܤ$Zϟ]\\ܦM7@tUVV>}ꫯ277wrr (..nO#k֬ی)21-AAAVVV_^^ޫ( ̙vZj /P$\vhλ&MڳgO~WMM !dݣG~U0b.QSS4iR@@@IIIbbIgkkkggq扶*!D,gee 8ԩS,oPSu>|?qǏ;o߾7nsBa}}3֮]+ -!s:7_~yarrgpp'OZ#H!wvvv.))wI%%%,--%x{{;vLt2bF}iӦQ3^ ]fgg+Jv\UU|D*X>1<>>**j+W^rСCf?CLL !͍!h czzz˗/SY,!fB8EFFw}G v͛7.]}k׮}w;w6 .~m}}#000&&FKKK&%1@ƾv)! I?y!ǏOMM=s !uȐ!iB^|=!… 2@P'On>bcc55Ly'OG=:wP ߿O7ζf/~uu5!e}b.2PQQ!Ljf0uCPl6;66ڨQ[j0À/\pǏ'''>|B!| 1@{zz޻wᆱ())IHH [ĉiii& ŋKÇO6oƏO&ܾ};**+ \%n:v݅1k8p7ӤR)g/%<}o\6o񐐐y-]Nh%@3x`##3n۴!qqq=$$dڵ:::AAAaaal@Ns9s-jjX,Rôi666ZZZ'NxQmmmff]%HgQ_47B=zGΚ5+88w999rT@bO?tYPٳٳgzrZZ!$''M}vTTӧO}}}B={Bazz:!$==]"└BHffX,J PH9rș3gjkkR!CJ_4Pٳg'%%qT*X,V>}f̘1iҤVLLLϨ9RSSaÆ~GԳ"##\+++W:tԳ|}}Ο?O=8qb^:D=|w蚚p.޸M6!o!Ц=1C`(!\PBs@ !B% J1b.(!.0%(!\ڼ;q֭|Al۶WXUnhhx6ιzQƎdsszȑ#ǎeŔ ' ҞKٸq1AsL2dȐ۷+$9A`v\Bȧ~*ܹ#1As|Տ?(1As99rDUb.?B-Zdhh?˵$9A`7jjj~~~r @sb.!>rw_Ir osWZsκ:U  1nݺÇ˩$9A`/?.1A"B֯__^^"1A.ZXX̙3g֭DUb.]%lܸQQQ2/ @Nsc<<<ȼ$9A`?<%%%>>^ b.t$1y˖-- @Ns#1qϧɰ$9A`\WWסCn۶M% b.t0B6l'1A:sg̘amm}vY ' f;sl~zBYU  pD"QyMMMdR 0P(x#k׮ݻwGdR< 0Lb.!dʕwxSr ݺu[jU@@@mmm[\rK{e!0Fs !K,ٱcϩ#9rzxt ~ "ØKO***N8A=LII8q"!ڵkFFFĉsD1|۶mH$=z:t?~:ɓ'eeec9@`\BȆ ܹA=ٳY8PUUE9v… e@!0cn~n|O>_!͓aw퇘 27^vŋCGGlj'ڵ+..s<>|ĉ[li>'<~x˖-m_퇘 ***Z77^xʕ+C77AxwyG}@q1i2iҤQFm߾=<<:h"AD"X,y˟~ӧsrr.\ @/\QSS#455ɼeooRСCFFF20iA !mbM2eǎȐmo sѸ622ӧ<h?\bnCC<3f̏?X__occ#b.hhhB/_ޭ[]vɩ}C`NZ hjj~ᇻvz왜h'\w%|Bp=sD1`ٲe?<-h?\Q@%|Ǐ=:v\{hb.(&暙-\p֭n sᨨ;B6nxSNɻ#WA`uuu9R>}OKRy*\fQWWWh.!?qFlll˃999  0b˖-[!̙3Æ suuU@.Bijj*`>?~7|sĉ;wl%Hl !0KnQSSSaaaݿEH$  K0KnjkkEMMM@@oEET*.DP0 ,ZZZreee zѫN(..2d `4Y׾IPPJp\nqqzh ,%L<922Ἔt9&-b 0B"""8uY3X\P \ffSL k>(>|sE1ӧXI1Y073gRIHiiz&C`MZhO<|;ڳg 0b.(rBٳg߿yL̢%ܯ@sEKK]>ϒ%KHRBȻ+6eE:`_fbn]]Q;bgg7{lY;Ȫ =\fy\BǛ0a 0aBee츿@0iY !5554Щ2.(+\f#~SvQRR"b@)a4ơ}4r~BSSS|||TTW\I)**ڲeݻw==={9zB!t]Fs-(sLTJ9sfddѣwMY~=cbbqs3LZhյ MMMn255UUUuppXx1Aׅ 8Ԥ΀ڂfhhf͚ʙ3gXtQ'._ld͛7kkk?~۷O"Ut]C vy /}:!dѢE-ٳGՁh.s!rC`"ccc'-(b.x<\PnLs@!0{1똂x{{;vL] 0UUU2l3!!a&MZ|yVVVgJRj^Jxxxmm + D"&>ܷoR̈́utt""",X@=lll UsBd8=7??/nhhxA{cǎY 1 8 Gs{˧555~a`` !~!999544Bϙ3'>>R\\w^OOӧO:5<<"Oo5RTTzj77={={DzLBsp4WEERZZo߾ӧOo۶MUUwܙ)J !ׯ_r%!$&&&))ICCٳ}DDM~પ3g 4(((6 `޽={}+ $ !D,B233bT*MMM%dddBBȑ#GΜ9S[[[WW'J k.ssܜR\\lmmtttlll미8ssqٳK}!$++kŊGqvv??#ccYfSVVV+WtppX~}rr2!d۶mEEEϟ'-''gӦM). 1LZ`.6ݫW6RfP$&&q[ww^UU)STUU5N1ѬݻGw &?}./_pʕk:?\Fj{4WD"y]̝2eJ~~嗷eС׮]svvxv3C`4KKNs\6aXW z ϝ;7| ,{릠sB`4++γtn{Fs !H_,kÆ .\p°arrr:t6fee%J߿Ow!bnۣMMM___ǧ=:,,A灘 h}!ty :u㝚'$$Zj+Vxy!0Q特휴@իn r[n=qɓ'ir'Nȣ##?,m…, A`ݻu+ Y,iS͛ JQYZTTԹs~My2 Ν;tWA!"X7zֺurss/\ !SL5j@ _G +@IFs8p=}">>~ųg> W@lll:hP(l2 -;w֭[2/%55cǎK;w޽{eR[6K :xĉKKK骄s jjj+V lhhIUog׮]p0b..''ٙ_GQ@ 2@YjճgN<:bW\qvvvssfi yS֯_Oquu7nx+LZ xٳgRuvXXݻxyya4AUTTm۶͟?.]os555'O$%%)@󋊊} cc?cÆ +Wfi 0`XQQ<uV I iӦYZZ޽[V vYڙ3gnjs]+RZ/.˗oK.ꫯ '-B8ի>SY)C 儘 tqq177'P ͚5+..Nav!dٲe,СC2lS&z왐h">1ekkѣ?D'ɻNZ hkk/Z_~2lV&Ҏ=zI&a4BB.]$JMLL!.\פI]Gs !k֬),,mp䒒/]@QwBss)SN<+>--wuss۶m(\ '-P.]*eEGG',,lǎ_}ד'O讨CaggGh<&-B&NhoooɼebX~~~/^vڈ#nܸAwE]b.jM1zh.!d͚5}uرc_ޫW#G8pr0\vvv=wyͥ,X@OO/00P˖qLL̆ VX@wE]b.[[[B]r@QSS[lٞ={ѾlQEDDP]Q׃ \OO+\BȪU6!@+x<-B"ܬ,~ݻŚmll^g̘qF*766zyyڵ+99 1Z=iW^=bϟ?o*9u?rȯJmJ$6pFkT(\h[X++Wuѥc.'!!#F8ro 1Zgoo-E{!诿x&ݮxˆTVVH$ڶm[ZZ]U)b.A$egg+GŬ`ffpZgXJ0Ky왏[SSK0b.FKKK!455[&].1W*.\!"(//~0CֱA).4E;x?SEEbQGlLZؾ}3g^5d+\WE \x%߅ȘK=ztdd$áT*U\CCdzl+)J}||$kS0\x%{{ׯ+,)lB3GR_D"%K,slD4mڴyjxb@3[[3fl޼Y}%$$7'+S>kChhY:3_+@[yڛNZo'L ޥR]֬Y#;IVMZfff3F9B˯@[sy ZK,kմtM ---'''ȸB8::),l66Hy2l0u5EJ s-VVV I ds5+ l6fLm1l0MZ\xÇ?|P sKJJYZZJ>vuu"MMM111Vڿ?uJC p8 DabΝ;H,^[[y\Tπl (^MM @$rWĴVf.^-MMTԇ[\7KI`. 2"930=|9ηxsQsj̙sԩEY%s.1=@FEE/Cn\]]-2ң*;wZj-ZׯEfEOشiSs-{… .+- 4uVFөS'M*J+V6l؂ nܸn)s@.4K+W_ZAʖ."n2˼ʒBﮛ4iˊ+BCC-Z-0% "//Ǐ7kڵkO=UDR 7of͚ÇĬ[s "8wzCX-hM4ٹsgMG㮭Ncoܸ],Yv޽.[L{qYRnn~kooz:u={V̾D\P$M6urrR.4K-xxxt˓'O~zJJʾ}DdԨQ+Wf9}ADw#F\7|SNiӦMf"##<<<,-cǎӧO߿* 6,===<<|РAoFnK!@Qyyyk8p[[o:944444Pktt,=ZnWa=D+h%b7O?Rͅ!>sJ[e2\PT\]]ի[`1M˖-ջ ( ȑ#*uNDs̙;w9E P1^WnE w޽w}g˖V\P իWYf||>|̙O>`0Fkqƌ e'SYZwP<>>>Vg5js,XxŚ5k>4WWM6fgg]}N"2eJ feetǎS_gggٽ{w i޼5kn:%fW"b]v/jz yyyC֣. 8;;/X`ʕ7o8yܹsƫ;1^nܦO>`hmVK!k׆gs(Z򲳳Wy (b.0S͕-ϵssa}D\K V LsĉlEzz\( L㓛{ Ez3>W\( LT~*U(uB)\`W^yEk%B)\`:??8Eh&`:c^t^z%ʄkٳt:[[[FHoPj999Ζڈt^^^qqq%-Z )%$$deek Yr!!!5kTϩǏwrr *yϥk~@kM4Ypa rJݺu9Ċ.))~7d0̙3f̘+VTR3RD)ϵʕ+ln߾:zqر3s@ /%ROZHKK[xG}doooѣ-[<|pllldd3/ huV\\`PjP@ź M}ڵǏ.MJJZbŒ%Kn:uTEF):`U=Z1*X0mڴUÌ.Z3>>?~x Tqر"Tח.]駟7vڮ];OOO1>P,,,lz= EhԨQժUcccxRE QQQ...70`}џ)"}tw.pCQThڴigϞc|Evsܹ'899[6mT]vpP4`7%(((...77('+R?c2 Jb.PKPPн{=ZK^3{!CQPPҠAZjٳ(%/ZXlYZZڈ#J҉(T(m* ܳgOQ,aB^^_ݯ_jժ܉i(T(@EAAA~%k׮|lrPԢh(888;;СCmڴyE#͘1~L*fժUN:E[(nmN81zh.7 1+((H;uԎ;lҴˋB2+Wfff/_ \pС:P`7+888777>>ɧ;i$fW *-\ի7hu =7ԩS?g}f슊B2S6k쭷2ujEBBYn.P]PPѣG޽k< )Jт`(xx׏;V(;# ^|œ'Oqvsڶmvܝ;wwݽ{w*UE$//`0䤧#wv;v8h ggg6mZ͚5CCCUvjjj߾}w1a„'ذ?Xh Vq׮]7n4t:Fk׮]hggTr傍NNN...#G gΜ9x`5f_f6q"~)ظqc jԨ{Z*33SDt:Nؼ2[/ {ԩS7o^vLrgΜ)Hu Uk4^owqe?kZNwƍ6a/^6lXݍܨ6o\bEzFi@TҥKWYJJ*>SggΝ;jzjVk,mڴi׮]]V+W==z~L?PK.]y3YժUE$<<P{rr#sV5 իW/Td|M||qWxʕK,Psϟ^(_гgχ/j}}=99ޛ7o^+vҥc4 A=z[lP:sbbb .TTID*UW(׮]uw 5gɒ%E/0}+بhT2x` 3#u_`01WDy睂n̚IIIneիҥKUDe,W(ب]r\9sxxxm<<<{QpW둝oϴ޽{q3nbbqycN[~ҥKJ3b.Pw}_rwsTꫯݺuIveO}?pAyyyO~7СC~."b.0C+ Ҍ˕+שSu+HTTTBBBr 1cY^ ݻ7NII1 /_Sի5j0 ׯ_wqqyڔ5jHrz 6< Oؼy;;;NW\ݻwX`25kHgVV={|dh4ڵ[~}q3n^^޻kNՖ/_k׮=zx7{9ӿJ+b.(l̙*u^^+Wz2{D? }UƘ[re''޽{wӧOC5jԨ/?\PX||C|||yw-믿,-$++jrΝ~QFիWwww7:twZ7b.x׫yRRgm۶uq㏯ ݹsյP㶍a5θ"+"&pųzX!b.1V +Df%11k[SL`,6mQ$.N h4Op\uKթ*sYɓiqwd;IWefʬY ֊ ̥Rb_r S#s)X%}'2n% @Oe2O8PbbDD*TF22,0gY\` 6o߃R^dpOy-Eߠ.8;[l(3gfeIBԩ#(f+A೓T&AA2n$'˰aRfk@bnԩRL z+A?/fIŊe l#sjEDtGfg(#GJb4n,"{8C7JECg)"{H|deL$ r $"Rȱcx$'[f(,o]EDFd&̙r4l(һ """*zIRf' :=(t8t]PyfN s`B\X!b.1V ԗ&2eg1*k˼yO:`^s-gg{WIrEΟ7ߔ GWffʬYf)ASr,Y"Һ!.W<?KTm\`^bbukX~KJLL3$0Pƍ89*F#""K/4l(7\(Kr̚%jIJ2wȜ9R'<y 77SYLSoҏ L/rԬDD.| 2|'ȢEEKOAe2;W6ndiDq:Tf̐We"yU9uҰ;',3fHlQz?孷"K+W~&"rZ33gۏN'cʢE R̙#zL.۷""I&C^/~~ҡ<%"("% R8:J` ~QQ\`\{В'"bo=<ϩSr4n,h4Rٳ":;?4k""NNRɸq,ÆIժ~1X b.01G>hIO^#Ǎ""IIb0<ԩ\uMNueq-1UΟrႈH@@yyuJ:9^f͒/%*#KD=x+NN:C{"wh!?/ɴi"o˾}2z􃫌"7h ΖɓQFDiX({TR%wʮ]%'K8snxPAD1YXRS%2RrrOF qs`Erse={DNvٻWt:1d.X4I.۷m1$( ҌSU({ʇJժR̙#}>M{wWN[Kfϖ5dH)_^JRRiS2ES'ٶMDdIJ dJoCDdfS6l3uiPd`2lˀIc0BCCEdhV +D" s`B\X!b.1VGذaF,b)@EXzYgs`" s`n3cD-IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/sample-graph.png0000664000175000017500000002567214701712343015204 0ustar00mgmgPNG  IHDRpZbKGD IDATx{\ߟtG.YF䒢]vײX+ٵXZŷUe()DZ5tr~|4|>3y><ę3gҭ lHIHH@aa Cg*>P 0T}LC\kּ-y zMh%ϔc` KA|`ÈxZ 2@q1ZVP]Lԩ͛|5Sb΅[޽Wwo҂q`:3sw[7ptի-]S6ϔD02͛~Bd3~$-gJ76l-- B0.^U㢱ϔ,8wE h*@`(.G>S&22S߾ض ʠ_?ٳa5 f]]07O}k|'eUr'vRxw[ 0T}3 `a Cg*>S%YOr2 zz0r$ĐD*GKΆ%|BpqkJBԿ`)7 8a@Xjj]6T>S0{]PzTHh6?1MM>~c  ""v M42^cKU!GP qq%6!TY}h│#!f#jt UV)SVF騶[PVFGGzLM}&#m!45ʕoӢxm]G!mm(3!mn=ۙ3ߞP}=@#33dnBCP((92B>BGO71T}3 `a Cg*>P :.bƌWzJ<@ !]ÑWx>={^^xQ.KJJRRRHNNNP$=zwܽ4͛7Ǐ733q\d bbb䡨 L!~zĉw={Aovɒ%׮]_3SYYR\\'-G_~e̘1u}&gƏŋ,+++4[NtѣO_Lnxb„ </77Ғn9~Æ ?֗gٳgcƌ Ν3WE%LGx䉣wNi!bϞ=B?WY{1c233;뫔tСC ]ܻwѱk׮gΜ155[,7n͚5AAAğ(odΝ;&LӧٳgMLL#;k֬khhPPg2rqYYY}ZMS|b-YDU >C߿^.fkϝ;700pΝq:QQQſ|[Ւ]v1`BtC|ڲeGYDFFBwP3gccϚa֭JgLHKKkg;gl޼ 0HBB>>>}mhhhO#gAlǎt i|VTT?wY`ݻn!CB7n-..3 +V`2tki}rpB[>CB0 ̞[Kk3L۷eۼL(~IIItkL  :S;|q1|z}JKK\>s>uZv!&L0rHnv<o̙III)))&M[?_|ĉmݰ#7##ĉtQ%F1}жnC\.wƌϟOOOK4O6G>awޢ C 9pŪ;;3gδ'*}ҐfSSSE%FFF/_Q 0]w`۴:lСAlHf„ ;wϧ[lڴ0ӢܹsOYjj* BCC#%%޾K.tKkO>m6 [[[=zԩW[ڊfaaaq=u;;XpU?㼼<)fZZڵk=^(2zyNiP(nnn ھ}(t!>`2W\[](++c2_dtBњTV,==]|2!oܸA0ܹ%6w\3gNllTz걵`0k,5XC46]YYI( ի`Muɓ'[rASLQ+gTWWkhh_bM>nEo{.Ad$l6Ś3g*l"'c  &HsC|.0&Оc%!))<֮[;=d2>}z5 AAm۶MH}}.yMhll455ݼysp8jnܸqUڵѣY,VKkO{왘HeJHHnqӑtX s޽JfR]Kee%ñ`sέ]V^R9VB0..?G)ѱ[nG]fMKu:4&Si 2\m oej0ϴ3s{ݾ} g90j(ss? g9`0&MD4_J55ҥK555~}</''O)YIIɮ]ݟ?՞(9\.7##믿޽{7YBեK={O)YXXÇşfeᤤb#''gǎ SKh_c``pر9s派UCCCǹa 򌒓SAAAiiiӏ;>366n&[n-))Qа((7 fo*27oܹs-,, FrO>ddKSSS__3flٲ%##\]]̙3–E6(iӦ[XXٳGyF_~yyy)p>snjsy%''aaad.YiӦKkl߾=333((܌܎`2 THHsNPQ>|x^^^rl˖-C5k#(_}Z 뀈e˼}||heee劚Ϟ}ҤI?#@aaajjjyy*AtAAy&$>P{񚚚Z-((s8BoXb޼yW\={޽{mmm-Zdbb7o\h̞={fffڟ~?r؄hkkwYqR˗/Z n޼#1P˖-_hѤI<<<@FGM}޺3gT!cۿck׮MNNyx! ##W0r C93aX!0r!q #gHI*g*N;j3V\$Vg^JNNضm[5%ە$J:Xjhh$1.(**Ç={l.zKF֩ƪFOOOPFBɩM[)O$;t&o#l=u7|pܹ>/;;Lτ///77$8zĉwQ/gҥiii^)5V <ooɞqcǎYZZ]۶m#3=?nccgmm}h xÇ_~iȼ*NcU\\ܽ{wBL"]@ԣGCC@Po͛7ܬ<==B͈#&NϞ= u>Sl^]Kqٳg>~9RS3rjff6|aaFZZ[J0򡴴ҥKSLiS3|>(8___f?>ȁ|~`a;RGt>Uf|:)C (eeerlcE R}}}% z={TܩSJSSӦ2 }vQQK"|Aرcʕ+Z'JCCСCt Q8Ϟ=ٶmBdԩSuuuՔgϙ3n ǧo߾ t TR/:u"]ԕ\ N8AYxy]]k*/_LE!Ly葆޽{>CkݺutPwfX7oޤ[xyy}<O볯Ύn [nt 3gɓ'>KNNf0t ?+W466~%Bd~^^^o>Ԍ[yfDDBdgӦMڏ?~Bߟnrf hll[酆i+֭[MLL|>B Ȏg߾}۴RΝ;p>occ3}t 8}t[7Tj!fUȇ]CCn!2RRRbbbl2Uv-Ydذat^ԩʕ+";o޼a[eYJJ A%%%t i/fff_[߿`dgg˶FKK+&&n!ݻl6{׮]t 'O/_\GWN\\\";SL)))SPBƍ|rKi&F~WaaaRGSB ++n!2޹s=  ''n!M9y$AlG|۷?@ Y " SN~~~oJ5|lٲ!CЭTTT/aԨQB3rp8t iK,ҥKUUBda…nݒKkᳺ:={- ܾ}bȆ FJJT !&OZGӓ&MULi&92>۱c$''qy B962>{|߃J\*FΕoذaBrDeqׯ_zz:B>Lxx8ٴiBF}};;q[BU(666t!!!t i|>ݻh_|v)x)BZ/ѣGMM BƲe˴sssԾ*AOO/::n!-r5O~z&.TgSzxxǍ'gee[|Mcرc{h~7 U1zzz'AAA" @jհw^ l٢TgO>gϊJfϞMDVVw}J޽{gt 2Dvƍb>C 0@<ʾvРAFFF BCC􊋋i&L&eUg}x iӦu`pB||P(oL&yA *3'|H5k듳r444h> ߿?ttt~W5|7o޸>ϲt 9sG}Ks8!CttkQY566 9iȝھ};e=JI^^);S ߻w2/\ cIDATJ>&&&<;w)KJ,X@ď? ,B3fpqqQt/|>nnnHz,*3ЁgϞi?nv400믿䥼\ul-e3nn2rNfl6gϞrHJŋ9R>{uş skyyyMgÇK_lZmmmpp0;v,e>C䈟{N6MXYc2OOϺ:yIwyL)q%9;;(::Z13իI0yN@@gr(//ի&HO_}ASNUx<-f퉰'/a0H9*lll3fP`߿?%%ܼk׮Gc_J !TXX?l-B====}|͙3G|L.A ,o_J yu3fPPˏ=v획Meؼ6==]KKkرߒ#lذaڵCb9ΎT|F[LLLw.ö/_|ɠAd#+++!!__fǙbݺuK_j̅o 9s rUUգG*ö7o޴"w|7gΜVj.YWoTNRbhh(F.&S{|~VVVjj;UNgC}}kuu@ df ,,,.^H@Jg P(2Taii9raÆ:АnT}(nܸL&jȑ&/t4` .4h|Tu8>r_ݻɒjOOf(<8q6:,''gǎD$%%(R-3ggXcǎ~᪡!!!A0>ڶnZRR1y.fgg~'/iӦ[XXٳ'##\]]̙3t|&NvvvXXX~~*|HHOJJΝ; ((`FFFnn.6QCir{uMCCcȐ!_|:,j3_dZSStٲeQQQ>>>J*QOIC%j3>/_ hllܿÇ{}m0ώڵkPPPd۷\.?~|-@aaajjjyy9;˗/Z n޼D]h,[ѢE&M؄hkkwܙޯГ~zm+  |Q~0T}3 `a C*3zS0R>\vIVjJ%DIi,Ybiip8~MkdԿ b1FI糘/^Zzƌw~7Qʉ2L(fddX[[KFɈ~q\S曨(زe(Ν;g9::egg@qqqttܒѣ^^^'NEp8KFFFzQP/gO>_ ܹ#QS"iZZZRRƍ;fiivo۶Ǐ޾}{ttE||Çɴrh.Vgall,*!cxN$=z ~m޼yfmm) mllF5qDx9<W #}x*>8{x1gb#)|'d9,)J/iW(<*Qɛ7oDԺJHNNn^% 9x#Gf͚`V:42.!CTWG}f]]] D[\شx*oeeuС/_GDD%>/D^i3?Ɏ;^pf%Rģϟ"##=<<\]]/_|k׮ B@p'~rU~:ylzM(oϷnzƍ.]̙3gM^|ݷoࢢ@gggHII!>},^xذaAAA.\ ?>9}4ɩW^#ߎ5jÆ 'NNJJbXۖ@y}`IM}3 `a Cg*>P 0T@{|?@:SHFE% g*>P e?IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550115.0 objgraph-3.6.2/docs/too-many.png0000664000175000017500000003400714701712343014357 0ustar00mgmgPNG  IHDR=hJbKGD IDATxw\S'6( eFZn*D;DkmqcVZԊ'K) C=$$G(Œ$NxMM" 7[!4-_с زEO"OBG֮"B3C,֭OÌP] ~~p6h&H1o!z֙3nk j7?#Ghl-B_XƠ ..H]dBAO߯UT3aV0o!MZZGKQXB0t(| S -Bl6NkPV  /&L$S( B\׮$%s'Bs3473ghk±cPQ!H1o!Р $&)?^^O^Np0m\ }x1L+V!`bB! ps/?K@B#BI[! -BB!iy !4BH`B!rkkksrr `hdSiBH"466VVV666666VUU濬0TL ̝}`Ӧ>N7a*z!rBH:::?~\[[[WWcgMMjjjtݧ&O;qėԩhtigӛ0a°a='=== !")*11 ?? ƸqƎkkߟ12IXp ;ӧ÷߂8fnk+CD`d~ Aa!3? p<<};[}Ac#Y{>K~>ܻ~ff_vļZZZ*******+++++˪j)@>l0sssaÆ=Of ~^^IQ&&&&&&K,1777nܐ!C//ȑw8}3ϜhjzR?01[__?--x}Xޅ>k׀͆#G7w`J3 7;\]V;w`"x BHuvv3SUUUyyyuuuYYYMMMYYOIIА`L<@03˿l6t(ҋZjرcǎ;n8uu|EEzz}|fz![͛@:y}{Bt4l;v;} byy ,1(+ wy !$#KKK+**KJJ˫9Æ >|8={ȑ# d燐N^Kuww'''߸q1? BȻwjka„g޿ INT`0`LX֭0o!IKKKYYYYYYyy`*--mkk#hhh9rȑ cʔ).Ԉ# z})//!_TTT<<<6mdjj:n8Er͛7::: _en "" 9'Ƚx!o]@yyk ""`r ;¼8%%%eee,Ehmm%稩5pڴi ^/<"ݩ3foaaannnff dffߺu`899|7Ą`0}|SsssAA?K/:;;1ZXXXXXx;~MHH`X$Wݻ׿lhE3iUo5hj֭fêU='?\/ w^`BAmmm⒒YaÆ5PGGG<VVV>x 77777MMMMMM===TEEe@n\_s_k+9"k'3SS<<`vظ NW_~F.\y@^bcn܀>ع`2hif/ BhSɳɬ999alllll=j(###*FX_NNNVVVMM <7ann>w\SOOOFFhsp34`@b"Lx1p6 `i ~ 3f\P^{Bi)3pk|`(ޞu)&INϷ4%^EQQQ|||BB¥K***444Ng1L[[[>mBЅ9r$:"_kD255 r\EEűcZXX|vvvGCuVlllLḶGTUUO~z&icc#&#>[ :daÇ*(($O HZrww_vɘ1cF!!YYY,Im1 ;;;oo;; &-;wGViiiVVVK,a2JJJ{ځ,c>$ir4pܸqfffQ6Vtlݻw޽,wС&M{,,,bݺu~x _~xOLLL|||ggY>sWWWm2}\4Ceee[!ֻн{t RNܜ(X!w޽KNSH9X,VBBs}oooMܿɓ'~+V y !I&X5''fh4###SS)S^i>|8DgggfffjjjzzzFFFvvvggg}fmmmee%! .\x >k@@8޽ҥK&M_V\I y !* ?\.wnnno87z}icc[[[[XXP8u2 z!w_1.^_yyyyH!Vo2"[^BC &*2dȸqH~"&,--|>եA✕*:::ÀJJJNNNL&UV<ŋvs玣c@@}||_>!!aԩÆ w_+O]y !x٤v)J >̌333{s# g2dĉ%6Qٗ/_NHH4iҜ9s̙,|\.ҥK۷oOOO/NyMoooHeeh4ɨ,y QWWw=R&S'I<~g9;33ݻwMMM}Ҳ`bb"bcc/_\ZZ7w\www&):O±SN}7۱cK|||ϟĉ3BB`޼y ݝ//DF@[[?ETUx<^^^ݻw޽ե9yɓ'ڎ30)**pBLL Ͷ!À 믫-[矛ȕ}}}~ÇK`w`BLt2u$*"xd%,&RHJJ'}윜%sOyju…dСfb2^^^2񲭭޳gO}}[o_ ԏ~w]fw}'}߁y > N5ܜ$\V2CGGG27y{:"J].sssooo&"9CBBBBB}݀M?7o4L_cFȣ)KKˉ'ZZZJb6q2C.khh8e{{)SL裍7y:th{qy mGPHMHHS蟓yڵEEEsIСC7n<{aÆ~~뭷 AKNN&["x7 HFssݻwIknn&*2bC:~%%bbb:::I6m$=ڻwɓ'׬Y#===ީSN:pBQBbaB?+HOOPPP7nR\*SEFeSǯx :h"CCCC{o̙3'Ң˗/>wܹsEtga&{ -$I5q*??jiiY[[[[[X[[O0Ay6MMͩSN6AKK_SOOORRŋϟ?&DEmllnݺxbNCX`Arr2)c(=Ce`]]$X,VFF)ِ mll.]JҕtM1xUUUOeff?qʕRک"$ .455xyy}4n۶-))1**JxQ+WL2EԷLB?"xR7LMMɓ*WWW1lT(j=x͛7\o9P5#ĀܹsݻwLW_}gQZZcii);kX&MM_ d&ϨԬ)(NPg޸qLUU$ Ń妧Wڤo!]Û\.? ˛7o޶mss綶Č;V<7Lk ݾ}BĔ)Szttt\4dȐ)SD,-qՋ/FEEUWW@R\=vww>}믿.,,\hю;&L 0L:#STD 欬,ҩgk Qݸq#...55;;;;99999M0Afт5mI:~ر{-]/7n8͝3gޕ+WykɄy Vgg'KB=ѣG?ekk+e)^ݸq#55嚛N✓sٳgϦkhhy{{{zzJ1fX~M_7==8::ZfrG+))ILL};wl>)GHT%'s+nݺmbbd2g͚%c RSSI500?… ]]]zСC!!!<o| %h޽1qĨ(0ofݻǯP\\29B`窙3g^?ɓFz7h 2| Ubnܸo 2zM wIJJd cԩӧOwppSUU:Fϭ*2]&FGFF9sr>>>2{ImmBBB֮]+2ҥK/~7xby *ڂ*ң"Q:;;oܸqqƹ>%! .ԘHzN#xFPH/pxxcǎ^t "##+++N|H12d2C~qXX"?]UUUQwyXXͦ:'h4ھ}/))x ).{7oݺuZUUuڴiSNU Ādffa@R1ښd2L'''UVVvYoٳ}||ϟOܵkxy>|>:GuDpCCC}||ؗ: q),,$MAv011󋈈:4qxݻ'OLѴVZuvx///fmmr_\.wǏ:-fIm6==='''ggg+++ }SbĈORWp/_LΙ3JR&ǏϞ={ĉDMMMMo۶$cas"_rܹss̡:Au  Yޯϟ(Q"Q[[K&őPZtUUU.-.ETd2TGԷsjii%$$Pt+vZ}}O~dddMҔHS0LY!*.^͟jh"kCsܱcGZZ_~);m\bmmMu8R7nikkϘ1c̙3gΜ8q`UP[[{MIa@&>J677={ԩS׮]SVVZd6mڴ+W1_}Uiie.\0~xz qqqRMj*46RST'N ҍ b2d+BA,V젠 GGG99ܵ"RRR <((hP4xmmm#FPTTK}}͛CCC[[Z{}&&K [ѣ/& ƪU?.{E^]wwwLL*\pШ8vX>|HuP`0%?֭[HZZޔ)Sv¼E+W|~,CR[[[TTn|y)))ٵk#( 33(/Ʌkjj` Fꫯx<^rrZ!:č_^LuR=z*X5(((77(?]6..nxuuuZZZC ƍwz\fŢ:4yKbbb^M^^^%%%TF12Eyyy566Re8NLLWDD̯~!CJ?UHM&9Ue-otԩSmۖ88gX,GAƾCᲳ vvvuuuTEꀀ}}f#zUk֬l4ɓT&;0o 5k֌5 zӧOK544WUUh_|T#488 %pv8+++5*88X}/.:@yk`3>>>dW@@`MWWWwQ777%%%OOЊ XSSӑ#Gi4rr2AQl@lll,O~ޝ-~KAAիT( 0oЂ%< عWWtUPP 5šD!^qz[OOO\\inQG'dggtP)}q##0|]6x㵵Zĉrr}}'|||Ȇfff6mz ߼ygit:]EE+)z8zΞ=c!甔2]em``򖖖aaaRwҥ;[ԩS#""xT-^vv6Y-t%%%77BIׯ/:$88ԳPUU%j߷oFhd2i4T\B>羕CѬ¤}D=;; 4m޼yJ`ޒaaaQb[06hkkxsBCCɞȚ)=zD7""w*vZ SSS捻KkQTT$Cd%qqq^^^0}(Xo;[d߿N@Ob~yb[|?z"##y8Qx,k yeWXXOW:::qx<^kk;|o.++ 3f <-88ũ={͞=eir]JJ Ç߿_Ʃ[III Å q8A:noo`0\agg77xcҤI>999`oo|aÆ-X`ѢEd0xڧ=//f*((7.77WOOoժUos[+ IHH3gNwwwOO rss/z_Az'>>ZKKа=G:ARhFʂ#,5(++;s̙3) Etjkk߿yܹիWwuu ~(INN={}G+$dɒڇf{?s] 4퓙 f:uj…}.$퓘;i@wwƍd&)mcccC*j644.L6d2]\\\M.\fKDOOOKKˋV>o3i@OOω'v%|4k65[`HKaӦ?ӧggϊ7.Iںp>@^^s`СC{|\.~sT#--mܹ]]]/9*QNNkXŋ3Q޲|'fO*;;/(cҥK---bJr|7n㥥eee30 ===_uWW8C׷rr0s& &hBf/_ }RPPPPPPTTTRRRPPhnn{Tz IؤJ|wwwTT^ww7SMO;&%YHQ(X]QQQCC#11Q-^ }V3xrlv[[l. ,({:;;I"""BiIA')) z,UUUUUU%%% :)//E544TUUZDSSp̘1G6665jѨQ(--pw˗A7Zyy?CRVVcDd/]cD...W^ :Iޞ&HMMY.^%^^I]@b'liiY`o&I)l}}<<<?077EyH=ooPVeOZE]4O1@o'T}G8lDU.I4 12rfgggxxC(>a#X@A||@;: Ʌ#p>aܹ fʕTG uʕu>|JKKGooGzzzΟ?gϞhpwwwrrbX" LB`#p>Nett@2pvƍlkk#3ւ\|򀀀ݻwϘ1cÇ?|ptt4~0G8ld}ˁod=PUNhH6Jyv?ߟ>}z윙08v`#p>t)\WPsŋAe|d)y #p>^$Pt_@E6ː{L\UC1l}gP!+d? |# G8l}I"[p.6}=HKKx'--RCC.\PWW'$p>a#D;/#..n֭gdd_{as̹|7l {3l}GV6o9;;ǿ˗/`+G8l}U8/!d}YEL .>/phjҞ7ODBHFYYO]^9{njaq[[EtWy !dpNSS[zrľo쫪.\hWTdfĉvSjjΝ35+%%K .[f"x3TWMQW+,ͥ3t4 8"[!$Ch4v[J yUawњ;7uȌ#6n]ц E|p\]=kGy'?׷uyfц 쪪µk'O'M3344no_gmw-B!њ;_ML:ȑR(++wqZZr**vО^w/A!'O433ۿ?.7:䭌O>ĉ744$tܹ-[?3t3fP)((XrѣyQ& OOO555}}-[_j/D(xO4i혮z:}۷.\8~x#DQQQfff*o.,,4000770)''gddUtǏ777͜9s)O jllx{w#8%%%wYd ՁH":rȹsvޭHuPˋ(P;oqܘ]]ݑ#GX͛7WTT9`۷CNNĉgϞ:( fM6 Po>>>'NhllG/r=yyy[RGyUUUu֭s$N:88|!!!jjjAIP\׮] 8qS~W#D'44400PNIqutt*\YY# &MzwkjjȶΝ;<@$cccG˖-311:o➗'//_UUot:"&MեlW&&& T+W5ɓTE%fΜz qvv&/y< ;R~<+OCUUUǏ@}}}KK zNvve˨BRٳG7FFFT$*++޶l533oS+1:I@oׯ ܶmF Dž8DOOϡCLMMΝy-[P[ou aaa߿`g9@I244UVj4C2ɵ:th̘1-l12dȸq_~5CCC~IEE$ӧ{'-eee[[[JA&F}TG!5͛7%2bٲe8.p(B!iy !4BH`B!$M0o!&BI[! -BB!iG '''!E}G8lRӧ?C#p>aWDxTǀB*|BH`B!$M0o!&q1Qꧯ%IENDB`././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/docs/uncollectable.txt0000644000175000017500000000234013500440053015444 0ustar00mgmgUncollectable garbage --------------------- Objects that have a ``__del__`` method cannot be collected by the garbage collector if they participate in a cycle, prior to Python 3.4. >>> class Nondestructible(list): ... def __del__(self): ... pass >>> x = Nondestructible() >>> y = [] >>> z = [] >>> x.append(y) >>> y.append(z) >>> z.append(x) When you remove all other references to these, they end up in ``gc.garbage``. >>> import objgraph >>> del x, y, z >>> import gc >>> _ = gc.collect() >>> len(gc.garbage) 1 We highlight these objects by showing the existence of a ``__del__``. >>> objgraph.show_backrefs(objgraph.by_type('Nondestructible'), ... filename='finalizers.png') # doctest: +NODES_VARY Graph written to ....dot (8 nodes) Image generated as finalizers.png .. figure:: finalizers.png Note that classes that *define* a ``__del__`` method do not have this indicator >>> objgraph.show_refs(Nondestructible, max_depth=1, ... filename='class-with-finalizers.png') Graph written to ....dot (5 nodes) Image generated as class-with-finalizers.png .. figure:: class-with-finalizers.png ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1728561637.207707 objgraph-3.6.2/objgraph.egg-info/0000775000175000017500000000000014701740745014447 5ustar00mgmg././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561637.0 objgraph-3.6.2/objgraph.egg-info/PKG-INFO0000644000175000017500000003031114701740745015540 0ustar00mgmgMetadata-Version: 2.1 Name: objgraph Version: 3.6.2 Summary: Draws Python object reference graphs with graphviz Home-page: https://mg.pov.lt/objgraph/ Author: Marius Gedminas Author-email: marius@gedmin.as License: MIT Project-URL: Source, https://github.com/mgedmin/objgraph Keywords: object graph visualization graphviz garbage collection Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Requires-Python: >=3.7 Description-Content-Type: text/x-rst License-File: LICENSE Provides-Extra: ipython Requires-Dist: graphviz; extra == "ipython" Provides-Extra: test Python Object Graphs ==================== .. image:: https://github.com/mgedmin/objgraph/workflows/build/badge.svg?branch=master :target: https://github.com/mgedmin/objgraph/actions :alt: Build Status .. image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/objgraph?branch=master&svg=true :target: https://ci.appveyor.com/project/mgedmin/objgraph :alt: Build Status (Windows) .. image:: https://coveralls.io/repos/mgedmin/objgraph/badge.svg?branch=master :target: https://coveralls.io/r/mgedmin/objgraph?branch=master :alt: Test Coverage .. image:: https://readthedocs.org/projects/objgraph/badge/?version=latest :target: https://readthedocs.org/projects/objgraph/?badge=latest :alt: Documentation Status ``objgraph`` is a module that lets you visually explore Python object graphs. You'll need `graphviz `_ if you want to draw the pretty graphs. I recommend `xdot `_ for interactive use. ``pip install xdot`` should suffice; objgraph will automatically look for it in your ``PATH``. Installation and Documentation ------------------------------ ``pip install objgraph`` or `download it from PyPI `_. Documentation lives at https://mg.pov.lt/objgraph. .. _history: History ------- I've developed a set of functions that eventually became objgraph when I was hunting for memory leaks in a Python program. The whole story -- with illustrated examples -- is in this series of blog posts: * `Hunting memory leaks in Python `_ * `Python object graphs `_ * `Object graphs with graphviz `_ .. _devel: Support and Development ----------------------- The source code can be found in this Git repository: https://github.com/mgedmin/objgraph. To check it out, use ``git clone https://github.com/mgedmin/objgraph``. Report bugs at https://github.com/mgedmin/objgraph/issues. Changes ======= 3.6.2 (2024-10-10) ------------------ - Add support for Python 3.13. 3.6.1 (2024-02-26) ------------------ - Add support for Python 3.12. 3.6.0 (2023-06-16) ------------------ - Add support for Python 3.9, 3.10, and 3.11. - Drop support for Python 2.7 and 3.6. 3.5.0 (2020-10-11) ------------------ - Do not require ``mock`` for the test suite on Python 3; use unittest.mock instead. - 100% test coverage for each version of Python rather than combined, using ``coverage-python-version``. - Add the optional ``extra_node_attrs`` parameter to ``show_backrefs`` and ``show_backrefs`` - Fix IPython/Jupyter inline graph support code that would kick in even if you explicitly passed a filename='foo.png' argument to ``show_refs``/``show_backrefs``. See `issue 47 `_. - Add support for Python 3.8. - Drop support for Python 3.5. 3.4.1 (2019-04-23) ------------------ - Add support for Python 3.7. - Drop support for Python 3.3 and 3.4. 3.4.0 (2018-02-13) ------------------ - New functions: `get_new_ids`, `at_addrs`. Contributed by Justin Black in `PR 36 `_. 3.3.0 (2017-12-28) ------------------ - New function: `growth`. 3.2.0 (2017-12-20) ------------------ - New ``filter`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`. - Show lambda functions in a more human-friendly way. 3.1.2 (2017-11-27) ------------------ - Correct UTF-8 mojibake in the changelog and switch all links to HTTPS. 3.1.1 (2017-10-30) ------------------ - Add support for Python 3.6. - Replace bare ``except:`` in ``safe_repr()`` with ``except Exception:``. 3.1.0 (2016-12-07) ------------------ - Support displaying graphs inline in IPython/Jupyter notebooks (`issue 28 `). 3.0.1 (2016-09-17) ------------------ - The ``file`` argument of `show_most_common_types` and `show_growth` now defaults to ``None`` instead of ``sys.stdout``. ``None`` is interpreted to be the same as ``sys.stdout``, which means the right stdout will be used if you change it at runtime (which happens, in doctests). 3.0.0 (2016-04-13) ------------------ - `show_most_common_types` and `show_growth` now accept a ``file`` argument if you want to redirect the output elsewhere. Fixes `issue 24 `_. Contributed by "d-sun-d". - Don't trust ``__class__`` to be accurate and ``__name__`` to be a string. Fixes errors in some convoluted corner cases when mocks are involved. Contributed by Andrew Shannon Brown in `PR 26 `_. - Drop support for Python 2.4, 2.5, and 2.6. - Drop support for Python 3.1 and 3.2. - Add support for Python 3.5. 2.0.1 (2015-07-28) ------------------ - Avoid creating reference cycles between the stack frame and the local ``objects`` variable in `by_type`, `count`, and `typestats`. Fixes `issue 22 `_. Contributed by Erik Bray. 2.0.0 (2015-04-18) ------------------ - `show_refs` and `show_backrefs` now accept a file-like object (via the new ``output`` argument) as an alternative to a filename. - Made internal helper methods private. This includes ``find_chain``, ``show_graph``, ``obj_node_id``, ``obj_label``, ``quote``, ``long_typename``, ``safe_repr``, ``short_repr``, ``gradient``, ``edge_label``, and ``_program_in_path``. - Correctly determine the name of old-style classes in `count`, `by_type`, and graph drawing functions. Fixes `issue 16 `_. Contributed by Mike Lambert. 1.8.1 (2014-05-15) ------------------ - Do not expect file objects to have an ``encoding`` attribute. Makes objgraph compatible with Eventlet's monkey-patching. Fixes `issue 6 `_. Contributed by Jakub Stasiak. 1.8.0 (2014-02-13) ------------------ - Moved to GitHub. - Python 3.4 support (`LP#1270872 `_). - New function: `is_proper_module`. - New ``shortnames`` argument for `typestats`, `most_common_types`, `show_most_common_types`, `show_growth`, `show_refs`, and `show_backrefs`. `count` and `by_type` accept fully-qualified type names now. Fixes `issue 4 `_. 1.7.2 (2012-10-23) ------------------ - Bugfix: setup.py sdist was broken on Python 2.7 (UnicodeDecodeError in tarfile). - The ``filename`` argument for `show_refs` and `show_backrefs` now allows arbitrary image formats, not just PNG. Patch by `Riccardo Murri `_. - Temporary dot files are now named `objgraph-*.dot` instead of `tmp*.dot`. - Python 3.3 support: no code changes, but some tests started failing because the new and improved dictionary implementation no longer holds references to str objects used as dict keys. - Added a tox.ini for convenient multi-Python testing. 1.7.1 (2011-12-11) ------------------ - Bugfix: non-ASCII characters in object representations would break graph generation on Python 3.x, in some locales (e.g. with LC_ALL=C). Reported and fixed by `Stefano Rivera `_. - Bugfix: setup.py was broken on Python 3.x - Bugfix: dot.exe/xdot.exe were not found on Windows (`LP#767239 `_). - Documentation updates: document the forgotten `find_ref_chain`, update `show_chain` prototype. 1.7.0 (2011-03-11) ------------------ - New function: `find_ref_chain`. - New ``backrefs`` argument for `show_chain`. - New function: `get_leaking_objects`, based on `a blog post by Kristján Valur `_. - New ``objects`` argument for `count`, `typestats`, `most_common_types`, `show_most_common_types`, and `by_type`. - Edges pointing to function attributes such as __defaults__ or __globals__ are now labeled. - Edge labels that are not simple strings now show the type. - Bugfix: '\0' and other unsafe characters used in a dictionary key could break graph generation. - Bugfix: show_refs(..., filename='graph.dot') would then go to complain about unrecognized file types and then produce a png. 1.6.0 (2010-12-18) ------------------ - Python 3 support, thanks to Stefano Rivera (fixes `LP#687601 `_). - Removed weird weakref special-casing. 1.5.1 (2010-12-09) ------------------ - Avoid test failures in uncollectable-garbage.txt (fixes `LP#686731 `_). - Added HACKING.txt (later renamed to HACKING.rst). 1.5.0 (2010-12-05) ------------------ - Show frame objects as well (fixes `LP#361704 `_). - New functions: `show_growth`, `show_chain`. - `find_backref_chain` returns ``[obj]`` instead of ``None`` when a chain could not be found. This makes ``show_chain(find_backref_chain(...), ...)`` not break. - Show how many references were skipped from the output of `show_refs`/`show_backrefs` by specifying ``too_many``. - Make `show_refs` descend into modules. - Do not highlight classes that define a ``__del__``, highlight only instances of those classes. - Option to show reference counts in `show_refs`/`show_backrefs`. - Add `Sphinx `_ documentation and a PyPI long description. 1.4.0 (2010-11-03) ------------------ - Compatibility with Python 2.4 and 2.5 (``tempfile.NamedTemporaryFile`` has no ``delete`` argument). - New function: `most_common_types`. 1.3.1 (2010-07-17) ------------------ - Rebuild an sdist with no missing files (fixes `LP#606604 `_). - Added MANIFEST.in and a Makefile to check that setup.py sdist generates source distributions with no files missing. 1.3 (2010-07-13) ---------------- - Highlight objects with a ``__del__`` method. - Fixes `LP#483411 `_: suggest always passing ``[obj]`` to `show_refs`, `show_backrefs`, since obj might be a list/tuple. - Fixes `LP#514422 `_: `show_refs`, `show_backrefs` don't create files in the current working directory any more. Instead they accept a filename argument, which can be a .dot file or a .png file. If None or not specified, those functions will try to spawn xdot as before. - New extra_info argument to graph-generating functions (patch by Thouis Jones, `LP#558914 `_). - setup.py should work with distutils now (`LP#604430 `_, thanks to Randy Heydon). 1.2 (2009-03-25) ---------------- - Project website, public source repository, uploaded to PyPI. - No code changes. 1.1 (2008-09-10) ---------------- - New function: `show_refs` for showing forward references. - New functions: `typestats` and `show_most_common_types`. - Object boxes are less crammed with useless information (such as IDs). - Spawns `xdot `_ if it is available. 1.0 (2008-06-14) ---------------- - First public release. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561637.0 objgraph-3.6.2/objgraph.egg-info/SOURCES.txt0000664000175000017500000000166414701740745016342 0ustar00mgmg.coveragerc .gitattributes .gitignore .readthedocs.yaml CHANGES.rst HACKING.rst LICENSE MANIFEST.in Makefile README.rst appveyor.yml objgraph.py other-requirements.txt release.mk setup.cfg setup.py tests.py tox.ini docs/42.png docs/CHANGES.txt docs/HACKING.txt docs/all-the-chars.dot docs/canary-chain.png docs/canary.png docs/chain.png docs/chain.txt docs/class-with-finalizers.png docs/conf.py docs/extra-info.png docs/extra-info.txt docs/finalizers.png docs/forward-chain.png docs/generator-sample.txt docs/highlight.png docs/highlighting.txt docs/index.txt docs/objgraph.txt docs/quoting.txt docs/refcounts.png docs/references.txt docs/roots.png docs/sample-backref-graph.png docs/sample-graph.png docs/too-many.png docs/uncollectable.txt docs/_static/mg.css objgraph.egg-info/PKG-INFO objgraph.egg-info/SOURCES.txt objgraph.egg-info/dependency_links.txt objgraph.egg-info/requires.txt objgraph.egg-info/top_level.txt objgraph.egg-info/zip-safe././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561637.0 objgraph-3.6.2/objgraph.egg-info/dependency_links.txt0000664000175000017500000000000114701740745020515 0ustar00mgmg ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561637.0 objgraph-3.6.2/objgraph.egg-info/requires.txt0000664000175000017500000000003414701740745017044 0ustar00mgmg [ipython] graphviz [test] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561637.0 objgraph-3.6.2/objgraph.egg-info/top_level.txt0000664000175000017500000000001114701740745017171 0ustar00mgmgobjgraph ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561559.0 objgraph-3.6.2/objgraph.egg-info/zip-safe0000664000175000017500000000000114701740627016076 0ustar00mgmg ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561542.0 objgraph-3.6.2/objgraph.py0000775000175000017500000012361214701740606013333 0ustar00mgmg""" Tools for drawing Python object reference graphs with graphviz. You can find documentation online at https://mg.pov.lt/objgraph/ Copyright (c) 2008-2023 Marius Gedminas and contributors Released under the MIT licence. """ # 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. import codecs import collections import gc import inspect import itertools import operator import os import re import subprocess import sys import tempfile import types from io import StringIO __author__ = "Marius Gedminas (marius@gedmin.as)" __copyright__ = "Copyright (c) 2008-2023 Marius Gedminas and contributors" __license__ = "MIT" __version__ = '3.6.2' __date__ = '2024-10-10' IS_INTERACTIVE = False try: # pragma: nocover import graphviz if 'TerminalInteractiveShell' not in get_ipython().__class__.__name__: # So far I know two shells where it's inappropriate to use inline # graphics, because they're text only: # - ipython uses a TerminalInteractiveShell # - pycharm's console uses PyDevTerminalInteractiveShell IS_INTERACTIVE = True except (NameError, ImportError): pass def _isinstance(object, classinfo): """Return whether an object is an instance of a class or its subclass. Differs from the builtin isinstance() implementation in that it does not depend on the ``__class__`` attribute which is proxied by mock.Mock(spec=...). """ return issubclass(type(object), classinfo) def count(typename, objects=None): """Count objects tracked by the garbage collector with a given class name. The class name can optionally be fully qualified. Example: >>> count('dict') 42 >>> count('mymodule.MyClass') 2 .. note:: The Python garbage collector does not track simple objects like int or str. See https://docs.python.org/3/library/gc.html#gc.is_tracked for more information. Instead of looking through all objects tracked by the GC, you may specify your own collection, e.g. >>> count('MyClass', get_leaking_objects()) 3 See also: :func:`get_leaking_objects`. .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 Accepts fully-qualified type names (i.e. 'package.module.ClassName') as well as short type names (i.e. 'ClassName'). """ if objects is None: objects = gc.get_objects() try: if '.' in typename: return sum(1 for o in objects if _long_typename(o) == typename) else: return sum(1 for o in objects if _short_typename(o) == typename) finally: del objects # clear cyclic references to frame def typestats(objects=None, shortnames=True, filter=None): """Count the number of instances for each type tracked by the GC. Note that the GC does not track simple objects like int or str. Note that classes with the same name but defined in different modules will be lumped together if ``shortnames`` is True. If ``filter`` is specified, it should be a function taking one argument and returning a boolean. Objects for which ``filter(obj)`` returns ``False`` will be ignored. Example: >>> typestats() {'list': 12041, 'tuple': 10245, ...} >>> typestats(get_leaking_objects()) {'MemoryError': 1, 'tuple': 2795, 'RuntimeError': 1, 'list': 47, ...} .. versionadded:: 1.1 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 3.1.3 New parameter: ``filter``. """ if objects is None: objects = gc.get_objects() try: if shortnames: typename = _short_typename else: typename = _long_typename stats = {} for o in objects: if filter and not filter(o): continue n = typename(o) stats[n] = stats.get(n, 0) + 1 return stats finally: del objects # clear cyclic references to frame def most_common_types(limit=10, objects=None, shortnames=True, filter=None): """Count the names of types with the most instances. Returns a list of (type_name, count), sorted most-frequent-first. Limits the return value to at most ``limit`` items. You may set ``limit`` to None to avoid that. If ``filter`` is specified, it should be a function taking one argument and returning a boolean. Objects for which ``filter(obj)`` returns ``False`` will be ignored. The caveats documented in :func:`typestats` apply. Example: >>> most_common_types(limit=2) [('list', 12041), ('tuple', 10245)] .. versionadded:: 1.4 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 3.1.3 New parameter: ``filter``. """ stats = sorted( typestats(objects, shortnames=shortnames, filter=filter).items(), key=operator.itemgetter(1), reverse=True) if limit: stats = stats[:limit] return stats def show_most_common_types( limit=10, objects=None, shortnames=True, file=None, filter=None): """Print the table of types of most common instances. If ``filter`` is specified, it should be a function taking one argument and returning a boolean. Objects for which ``filter(obj)`` returns ``False`` will be ignored. The caveats documented in :func:`typestats` apply. Example: >>> show_most_common_types(limit=5) tuple 8959 function 2442 wrapper_descriptor 1048 dict 953 builtin_function_or_method 800 .. versionadded:: 1.1 .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 3.0 New parameter: ``file``. .. versionchanged:: 3.1.3 New parameter: ``filter``. """ if file is None: file = sys.stdout stats = most_common_types(limit, objects, shortnames=shortnames, filter=filter) width = max(len(name) for name, count in stats) for name, count in stats: file.write('%-*s %i\n' % (width, name, count)) def growth(limit=10, peak_stats={}, shortnames=True, filter=None): """Count the increase in peak object since last call. Returns a list of (type_name, total_count, increase_delta), descending order by increase_delta. Limits the output to ``limit`` largest deltas. You may set ``limit`` to None to see all of them. Uses and updates ``peak_stats``, a dictionary from type names to previously seen peak object counts. Usually you don't need to pay attention to this argument. If ``filter`` is specified, it should be a function taking one argument and returning a boolean. Objects for which ``filter(obj)`` returns ``False`` will be ignored. The caveats documented in :func:`typestats` apply. Example: >>> growth(2) [(tuple, 12282, 10), (dict, 1922, 7)] .. versionadded:: 3.3.0 """ gc.collect() stats = typestats(shortnames=shortnames, filter=filter) deltas = {} for name, count in stats.items(): old_count = peak_stats.get(name, 0) if count > old_count: deltas[name] = count - old_count peak_stats[name] = count deltas = sorted(deltas.items(), key=operator.itemgetter(1), reverse=True) if limit: deltas = deltas[:limit] return [(name, stats[name], delta) for name, delta in deltas] def show_growth(limit=10, peak_stats=None, shortnames=True, file=None, filter=None): """Show the increase in peak object counts since last call. if ``peak_stats`` is None, peak object counts will recorded in func `growth`, and your can record the counts by yourself with set ``peak_stats`` to a dictionary. The caveats documented in :func:`growth` apply. Example: >>> show_growth() wrapper_descriptor 970 +14 tuple 12282 +10 dict 1922 +7 ... .. versionadded:: 1.5 .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 2.1 New parameter: ``file``. .. versionchanged:: 3.1.3 New parameter: ``filter``. """ if peak_stats is None: result = growth(limit, shortnames=shortnames, filter=filter) else: result = growth(limit, peak_stats, shortnames, filter) if result: if file is None: file = sys.stdout width = max(len(name) for name, _, _ in result) for name, count, delta in result: file.write('%-*s%9d %+9d\n' % (width, name, count, delta)) def get_new_ids(skip_update=False, limit=10, sortby='deltas', shortnames=None, file=None, _state={}): """Find and display new objects allocated since last call. Shows the increase in object counts since last call to this function and returns the memory address ids for new objects. Returns a dictionary mapping object type names to sets of object IDs that have been created since the last time this function was called. ``skip_update`` (bool): If True, returns the same dictionary that was returned during the previous call without updating the internal state or examining the objects currently in memory. ``limit`` (int): The maximum number of rows that you want to print data for. Use 0 to suppress the printing. Use None to print everything. ``sortby`` (str): This is the column that you want to sort by in descending order. Possible values are: 'old', 'current', 'new', 'deltas' ``shortnames`` (bool): If True, classes with the same name but defined in different modules will be lumped together. If False, all type names will be qualified with the module name. If None (default), ``get_new_ids`` will remember the value from previous calls, so it's enough to prime this once. By default the primed value is True. ``_state`` (dict): Stores old, current, and new_ids in memory. It is used by the function to store the internal state between calls. Never pass in this argument unless you know what you're doing. The caveats documented in :func:`growth` apply. When one gets new_ids from :func:`get_new_ids`, one can use :func:`at_addrs` to get a list of those objects. Then one can iterate over the new objects, print out what they are, and call :func:`show_backrefs` or :func:`show_chain` to see where they are referenced. Example: >>> _ = get_new_ids() # store current objects in _state >>> _ = get_new_ids() # current_ids become old_ids in _state >>> a = [0, 1, 2] # list we don't know about >>> b = [3, 4, 5] # list we don't know about >>> new_ids = get_new_ids(limit=3) # we see new lists ====================================================================== Type Old_ids Current_ids New_ids Count_Deltas ====================================================================== list 324 326 +3 +2 dict 1125 1125 +0 +0 wrapper_descriptor 1001 1001 +0 +0 ====================================================================== >>> new_lists = at_addrs(new_ids['list']) >>> a in new_lists True >>> b in new_lists True .. versionadded:: 3.4 """ if not _state: _state['old'] = collections.defaultdict(set) _state['current'] = collections.defaultdict(set) _state['new'] = collections.defaultdict(set) _state['shortnames'] = True new_ids = _state['new'] if skip_update: return new_ids old_ids = _state['old'] current_ids = _state['current'] if shortnames is None: shortnames = _state['shortnames'] else: _state['shortnames'] = shortnames gc.collect() objects = gc.get_objects() for class_name in old_ids: old_ids[class_name].clear() for class_name, ids_set in current_ids.items(): old_ids[class_name].update(ids_set) for class_name in current_ids: current_ids[class_name].clear() for o in objects: if shortnames: class_name = _short_typename(o) else: class_name = _long_typename(o) id_number = id(o) current_ids[class_name].add(id_number) for class_name in new_ids: new_ids[class_name].clear() rows = [] keys_to_remove = [] for class_name in current_ids: num_old = len(old_ids[class_name]) num_current = len(current_ids[class_name]) if num_old == 0 and num_current == 0: # remove the key from our dicts if we don't have any old or # current class_name objects keys_to_remove.append(class_name) continue new_ids_set = current_ids[class_name] - old_ids[class_name] new_ids[class_name].update(new_ids_set) num_new = len(new_ids_set) num_delta = num_current - num_old row = (class_name, num_old, num_current, num_new, num_delta) rows.append(row) for key in keys_to_remove: del old_ids[key] del current_ids[key] del new_ids[key] index_by_sortby = {'old': 1, 'current': 2, 'new': 3, 'deltas': 4} rows.sort(key=operator.itemgetter(index_by_sortby[sortby], 0), reverse=True) if limit is not None: rows = rows[:limit] if not rows: return new_ids if file is None: file = sys.stdout width = max(len(row[0]) for row in rows) print('='*(width+13*4), file=file) print('%-*s%13s%13s%13s%13s' % (width, 'Type', 'Old_ids', 'Current_ids', 'New_ids', 'Count_Deltas'), file=file) print('='*(width+13*4), file=file) for row_class, old, current, new, delta in rows: print('%-*s%13d%13d%+13d%+13d' % (width, row_class, old, current, new, delta), file=file) print('='*(width+13*4), file=file) return new_ids def get_leaking_objects(objects=None): """Return objects that do not have any referents. These could indicate reference-counting bugs in C code. Or they could be legitimate. Note that the GC does not track simple objects like int or str. .. versionadded:: 1.7 """ if objects is None: gc.collect() objects = gc.get_objects() try: ids = set(id(i) for i in objects) for i in objects: ids.difference_update(id(j) for j in gc.get_referents(i)) # this then is our set of objects without referrers return [i for i in objects if id(i) in ids] finally: del objects, i # clear cyclic references to frame def by_type(typename, objects=None): """Return objects tracked by the garbage collector with a given class name. Example: >>> by_type('MyClass') [] Note that the GC does not track simple objects like int or str. .. versionchanged:: 1.7 New parameter: ``objects``. .. versionchanged:: 1.8 Accepts fully-qualified type names (i.e. 'package.module.ClassName') as well as short type names (i.e. 'ClassName'). """ if objects is None: objects = gc.get_objects() try: if '.' in typename: return [o for o in objects if _long_typename(o) == typename] else: return [o for o in objects if _short_typename(o) == typename] finally: del objects # clear cyclic references to frame def at(addr): """Return an object at a given memory address. The reverse of id(obj): >>> at(id(obj)) is obj True Note that this function does not work on objects that are not tracked by the GC (e.g. ints or strings). """ for o in gc.get_objects(): if id(o) == addr: return o return None def at_addrs(address_set): """Return a list of objects for a given set of memory addresses. The reverse of [id(obj1), id(obj2), ...]. Note that objects are returned in an arbitrary order. When one gets ``new_ids`` from :func:`get_new_ids`, one can use this function to get a list of those objects. Then one can iterate over the new objects, print out what they are, and call :func:`show_backrefs` or :func:`show_chain` to see where they are referenced. >>> a = [0, 1, 2] >>> new_ids = get_new_ids() >>> new_lists = at_addrs(new_ids['list']) >>> a in new_lists True Note that this function does not work on objects that are not tracked by the GC (e.g. ints or strings). .. versionadded:: 3.4 """ res = [] for o in gc.get_objects(): if id(o) in address_set: res.append(o) return res def find_ref_chain(obj, predicate, max_depth=20, extra_ignore=()): """Find a shortest chain of references leading from obj. The end of the chain will be some object that matches your predicate. ``predicate`` is a function taking one argument and returning a boolean. ``max_depth`` limits the search depth. ``extra_ignore`` can be a list of object IDs to exclude those objects from your search. Example: >>> find_ref_chain(obj, lambda x: isinstance(x, MyClass)) [obj, ..., ] Returns ``[obj]`` if such a chain could not be found. .. versionadded:: 1.7 """ return _find_chain(obj, predicate, gc.get_referents, max_depth=max_depth, extra_ignore=extra_ignore)[::-1] def find_backref_chain(obj, predicate, max_depth=20, extra_ignore=()): """Find a shortest chain of references leading to obj. The start of the chain will be some object that matches your predicate. ``predicate`` is a function taking one argument and returning a boolean. ``max_depth`` limits the search depth. ``extra_ignore`` can be a list of object IDs to exclude those objects from your search. Example: >>> find_backref_chain(obj, is_proper_module) [, ..., obj] Returns ``[obj]`` if such a chain could not be found. .. versionchanged:: 1.5 Returns ``obj`` instead of ``None`` when a chain could not be found. """ return _find_chain(obj, predicate, gc.get_referrers, max_depth=max_depth, extra_ignore=extra_ignore) def show_backrefs(objs, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True, output=None, extra_node_attrs=None): """Generate an object reference graph ending at ``objs``. The graph will show you what objects refer to ``objs``, directly and indirectly. ``objs`` can be a single object, or it can be a list of objects. If unsure, wrap the single object in a new list. ``filename`` if specified, can be the name of a .dot or a image file, whose extension indicates the desired output format; note that output to a specific format is entirely handled by GraphViz: if the desired format is not supported, you just get the .dot file. If ``filename`` and ``output`` are not specified, ``show_backrefs`` will try to display the graph inline (if you're using IPython), otherwise it'll try to produce a .dot file and spawn a viewer (xdot). If xdot is not available, ``show_backrefs`` will convert the .dot file to a .png and print its name. ``output`` if specified, the GraphViz output will be written to this file object. ``output`` and ``filename`` should not both be specified. Use ``max_depth`` and ``too_many`` to limit the depth and breadth of the graph. Use ``filter`` (a predicate) and ``extra_ignore`` (a list of object IDs) to remove undesired objects from the graph. Use ``highlight`` (a predicate) to highlight certain graph nodes in blue. Use ``extra_info`` (a function taking one argument and returning a string) to report extra information for objects. Use ``extra_node_attrs`` (a function taking the current object as argument, returning a dict of strings) to add extra attributes to the nodes. See https://www.graphviz.org/doc/info/attrs.html for a list of possible node attributes. Specify ``refcounts=True`` if you want to see reference counts. These will mostly match the number of arrows pointing to an object, but can be different for various reasons. Specify ``shortnames=False`` if you want to see fully-qualified type names ('package.module.ClassName'). By default you get to see only the class name part. Examples: >>> show_backrefs(obj) >>> show_backrefs([obj1, obj2]) >>> show_backrefs(obj, max_depth=5) >>> show_backrefs(obj, filter=lambda x: not inspect.isclass(x)) >>> show_backrefs(obj, highlight=inspect.isclass) >>> show_backrefs(obj, extra_ignore=[id(locals())]) >>> show_backrefs(obj, extra_node_attrs=lambda x: dict(URL=str(id(x)))) .. versionchanged:: 1.3 New parameters: ``filename``, ``extra_info``. .. versionchanged:: 1.5 New parameter: ``refcounts``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 2.0 New parameter: ``output``. .. versionchanged:: 3.5 New parameter: ``extra_node_attrs``. """ # For show_backrefs(), it makes sense to stop when reaching a # module because you'll end up in sys.modules and explode the # graph with useless clutter. That's why we're specifying # cull_func here, but not in show_graph(). return _show_graph(objs, max_depth=max_depth, extra_ignore=extra_ignore, filter=filter, too_many=too_many, highlight=highlight, edge_func=gc.get_referrers, swap_source_target=False, filename=filename, output=output, extra_info=extra_info, refcounts=refcounts, shortnames=shortnames, cull_func=is_proper_module, extra_node_attrs=extra_node_attrs) def show_refs(objs, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True, output=None, extra_node_attrs=None): """Generate an object reference graph starting at ``objs``. The graph will show you what objects are reachable from ``objs``, directly and indirectly. ``objs`` can be a single object, or it can be a list of objects. If unsure, wrap the single object in a new list. ``filename`` if specified, can be the name of a .dot or a image file, whose extension indicates the desired output format; note that output to a specific format is entirely handled by GraphViz: if the desired format is not supported, you just get the .dot file. If ``filename`` and ``output`` is not specified, ``show_refs`` will try to display the graph inline (if you're using IPython), otherwise it'll try to produce a .dot file and spawn a viewer (xdot). If xdot is not available, ``show_refs`` will convert the .dot file to a .png and print its name. ``output`` if specified, the GraphViz output will be written to this file object. ``output`` and ``filename`` should not both be specified. Use ``max_depth`` and ``too_many`` to limit the depth and breadth of the graph. Use ``filter`` (a predicate) and ``extra_ignore`` (a list of object IDs) to remove undesired objects from the graph. Use ``highlight`` (a predicate) to highlight certain graph nodes in blue. Use ``extra_info`` (a function returning a string) to report extra information for objects. Use ``extra_node_attrs`` (a function taking the current object as argument, returning a dict of strings) to add extra attributes to the nodes. See https://www.graphviz.org/doc/info/attrs.html for a list of possible node attributes. Specify ``refcounts=True`` if you want to see reference counts. Examples: >>> show_refs(obj) >>> show_refs([obj1, obj2]) >>> show_refs(obj, max_depth=5) >>> show_refs(obj, filter=lambda x: not inspect.isclass(x)) >>> show_refs(obj, highlight=inspect.isclass) >>> show_refs(obj, extra_ignore=[id(locals())]) >>> show_refs(obj, extra_node_attrs=lambda x: dict(URL=str(id(x)))) .. versionadded:: 1.1 .. versionchanged:: 1.3 New parameters: ``filename``, ``extra_info``. .. versionchanged:: 1.5 Follows references from module objects instead of stopping. New parameter: ``refcounts``. .. versionchanged:: 1.8 New parameter: ``shortnames``. .. versionchanged:: 2.0 New parameter: ``output``. .. versionchanged:: 3.5 New parameter: ``extra_node_attrs``. """ return _show_graph(objs, max_depth=max_depth, extra_ignore=extra_ignore, filter=filter, too_many=too_many, highlight=highlight, edge_func=gc.get_referents, swap_source_target=True, filename=filename, extra_info=extra_info, refcounts=refcounts, shortnames=shortnames, output=output, extra_node_attrs=extra_node_attrs) def show_chain(*chains, **kw): """Show a chain (or several chains) of object references. Useful in combination with :func:`find_ref_chain` or :func:`find_backref_chain`, e.g. >>> show_chain(find_backref_chain(obj, is_proper_module)) You can specify if you want that chain traced backwards or forwards by passing a ``backrefs`` keyword argument, e.g. >>> show_chain(find_ref_chain(obj, is_proper_module), ... backrefs=False) Ideally this shouldn't matter, but for some objects :func:`gc.get_referrers` and :func:`gc.get_referents` are not perfectly symmetrical. You can specify ``highlight``, ``extra_info``, ``refcounts``, ``shortnames``, ``filename`` or ``output`` arguments like for :func:`show_backrefs` or :func:`show_refs`. .. versionadded:: 1.5 .. versionchanged:: 1.7 New parameter: ``backrefs``. .. versionchanged:: 2.0 New parameter: ``output``. """ backrefs = kw.pop('backrefs', True) chains = [chain for chain in chains if chain] # remove empty ones def in_chains(x, ids=set(map(id, itertools.chain(*chains)))): return id(x) in ids max_depth = max(map(len, chains)) - 1 if backrefs: show_backrefs([chain[-1] for chain in chains], max_depth=max_depth, filter=in_chains, **kw) else: show_refs([chain[0] for chain in chains], max_depth=max_depth, filter=in_chains, **kw) def is_proper_module(obj): """ Returns ``True`` if ``obj`` can be treated like a garbage collector root. That is, if ``obj`` is a module that is in ``sys.modules``. >>> import types >>> is_proper_module([]) False >>> is_proper_module(types) True >>> is_proper_module(types.ModuleType('foo')) False .. versionadded:: 1.8 """ return ( inspect.ismodule(obj) and obj is sys.modules.get(getattr(obj, '__name__', None)) ) # # Internal helpers # def _find_chain(obj, predicate, edge_func, max_depth=20, extra_ignore=()): queue = [obj] depth = {id(obj): 0} parent = {id(obj): None} ignore = set(extra_ignore) ignore.add(id(extra_ignore)) ignore.add(id(queue)) ignore.add(id(depth)) ignore.add(id(parent)) ignore.add(id(ignore)) ignore.add(id(sys._getframe())) # this function ignore.add(id(sys._getframe(1))) # find_chain/find_backref_chain gc.collect() while queue: target = queue.pop(0) if predicate(target): chain = [target] while parent[id(target)] is not None: target = parent[id(target)] chain.append(target) return chain tdepth = depth[id(target)] if tdepth < max_depth: referrers = edge_func(target) ignore.add(id(referrers)) for source in referrers: if id(source) in ignore: continue if id(source) not in depth: depth[id(source)] = tdepth + 1 parent[id(source)] = target queue.append(source) return [obj] # not found def _show_graph(objs, edge_func, swap_source_target, max_depth=3, extra_ignore=(), filter=None, too_many=10, highlight=None, filename=None, extra_info=None, refcounts=False, shortnames=True, output=None, cull_func=None, extra_node_attrs=None): if not _isinstance(objs, (list, tuple)): objs = [objs] is_interactive = False if filename and output: raise ValueError('Cannot specify both output and filename.') elif output: f = output elif filename and filename.endswith('.dot'): f = codecs.open(filename, 'w', encoding='utf-8') dot_filename = filename elif IS_INTERACTIVE and not filename: is_interactive = True f = StringIO() else: fd, dot_filename = tempfile.mkstemp(prefix='objgraph-', suffix='.dot', text=True) f = os.fdopen(fd, "w") if getattr(f, 'encoding', None): # pragma: PY3 # Python 3 will wrap the file in the user's preferred encoding # Re-wrap it for utf-8 import io f = io.TextIOWrapper(f.detach(), 'utf-8') f.write('digraph ObjectGraph {\n' ' node[shape=box, style=filled, fillcolor=white];\n') queue = [] depth = {} ignore = set(extra_ignore) ignore.add(id(objs)) ignore.add(id(extra_ignore)) ignore.add(id(queue)) ignore.add(id(depth)) ignore.add(id(ignore)) ignore.add(id(sys._getframe())) # this function ignore.add(id(sys._getframe().f_locals)) ignore.add(id(sys._getframe(1))) # show_refs/show_backrefs ignore.add(id(sys._getframe(1).f_locals)) for obj in objs: f.write(' %s[fontcolor=red];\n' % (_obj_node_id(obj))) depth[id(obj)] = 0 queue.append(obj) del obj gc.collect() nodes = 0 while queue: nodes += 1 # The names "source" and "target" are reversed here because # originally there was just show_backrefs() and we were # traversing the reference graph backwards. target = queue.pop(0) tdepth = depth[id(target)] f.write(' %s[label="%s"%s];\n' % (_obj_node_id(target), _obj_label(target, extra_info, refcounts, shortnames), _obj_attrs(target, extra_node_attrs))) h, s, v = _gradient((0, 0, 1), (0, 0, .3), tdepth, max_depth) if inspect.ismodule(target): h = .3 s = 1 if highlight and highlight(target): h = .6 s = .6 v = 0.5 + v * 0.5 f.write(' %s[fillcolor="%g,%g,%g"];\n' % (_obj_node_id(target), h, s, v)) if v < 0.5: f.write(' %s[fontcolor=white];\n' % (_obj_node_id(target))) if hasattr(getattr(target, '__class__', None), '__del__'): f.write(' %s->%s_has_a_del[color=red,style=dotted,' 'len=0.25,weight=10];\n' % (_obj_node_id(target), _obj_node_id(target))) f.write(' %s_has_a_del[label="__del__",shape=doublecircle,' 'height=0.25,color=red,fillcolor="0,.5,1",fontsize=6];\n' % (_obj_node_id(target))) if tdepth >= max_depth: continue if cull_func is not None and cull_func(target): continue neighbours = edge_func(target) ignore.add(id(neighbours)) n = 0 skipped = 0 for source in neighbours: if id(source) in ignore: continue if filter and not filter(source): continue if n >= too_many: skipped += 1 continue if swap_source_target: srcnode, tgtnode = target, source else: srcnode, tgtnode = source, target elabel = _edge_label(srcnode, tgtnode, shortnames) f.write(' %s -> %s%s;\n' % (_obj_node_id(srcnode), _obj_node_id(tgtnode), elabel)) if id(source) not in depth: depth[id(source)] = tdepth + 1 queue.append(source) n += 1 del source del neighbours if skipped > 0: h, s, v = _gradient((0, 1, 1), (0, 1, .3), tdepth + 1, max_depth) if swap_source_target: label = "%d more references" % skipped edge = "%s->too_many_%s" % (_obj_node_id(target), _obj_node_id(target)) else: label = "%d more backreferences" % skipped edge = "too_many_%s->%s" % (_obj_node_id(target), _obj_node_id(target)) f.write(' %s[color=red,style=dotted,len=0.25,weight=10];\n' % edge) f.write(' too_many_%s[label="%s",shape=box,height=0.25,' 'color=red,fillcolor="%g,%g,%g",fontsize=6];\n' % (_obj_node_id(target), label, h, s, v)) f.write(' too_many_%s[fontcolor=white];\n' % (_obj_node_id(target))) f.write("}\n") if output: return if is_interactive: return graphviz.Source(f.getvalue()) else: # The file should only be closed if this function was in charge of # opening the file. f.close() print("Graph written to %s (%d nodes)" % (dot_filename, nodes)) _present_graph(dot_filename, filename) def _present_graph(dot_filename, filename=None): """Present a .dot file to the user in the requested fashion. If ``filename`` is provided, runs ``dot`` to convert the .dot file into the desired format, determined by the filename extension. If ``filename`` is not provided, tries to launch ``xdot``, a graphical .dot file viewer. If ``xdot`` is not present on the system, converts the graph to a PNG. """ if filename == dot_filename: # nothing to do, the user asked for a .dot file and got it return if not filename and _program_in_path('xdot'): print("Spawning graph viewer (xdot)") subprocess.Popen(['xdot', dot_filename], close_fds=True) elif _program_in_path('dot'): if not filename: print("Graph viewer (xdot) not found, generating a png instead") filename = dot_filename[:-4] + '.png' stem, ext = os.path.splitext(filename) cmd = ['dot', '-T' + ext[1:], '-o' + filename, dot_filename] dot = subprocess.Popen(cmd, close_fds=False) dot.wait() if dot.returncode != 0: # XXX: shouldn't this go to stderr or a log? print('dot failed (exit code %d) while executing "%s"' % (dot.returncode, ' '.join(cmd))) else: print("Image generated as %s" % filename) else: if not filename: print("Graph viewer (xdot) and image renderer (dot) not found," " not doing anything else") else: print("Image renderer (dot) not found, not doing anything else") def _obj_node_id(obj): return ('o%d' % id(obj)).replace('-', '_') def _obj_attrs(obj, extra_node_attrs): if extra_node_attrs is not None: attrs = extra_node_attrs(obj) return ", " + ", ".join('%s="%s"' % (name, _quote(value)) for name, value in sorted(attrs.items()) if value is not None) else: return "" def _obj_label(obj, extra_info=None, refcounts=False, shortnames=True): if shortnames: label = [_short_typename(obj)] else: label = [_long_typename(obj)] if refcounts: label[0] += ' [%d]' % (sys.getrefcount(obj) - 4) # Why -4? To ignore the references coming from # obj_label's frame (obj) # show_graph's frame (target variable) # sys.getrefcount()'s argument # something else that doesn't show up in gc.get_referrers() label.append(_safe_repr(obj)) if extra_info: label.append(str(extra_info(obj))) return _quote('\n'.join(label)) def _quote(s): return (s.replace("\\", "\\\\") .replace("\"", "\\\"") .replace("\n", "\\n") .replace("\0", "\\\\0")) def _get_obj_type(obj): objtype = type(obj) return objtype def _short_typename(obj): return _get_obj_type(obj).__name__ def _long_typename(obj): objtype = _get_obj_type(obj) name = objtype.__name__ module = getattr(objtype, '__module__', None) if module: return '%s.%s' % (module, name) else: return name def _safe_repr(obj): try: return _short_repr(obj) except Exception: return '(unrepresentable)' def _name_or_repr(value): try: result = value.__name__ except AttributeError: result = repr(value)[:40] if _isinstance(result, str): return result else: return repr(value)[:40] def _short_repr(obj): if _isinstance(obj, (type, types.ModuleType, types.BuiltinMethodType, types.BuiltinFunctionType)): return _name_or_repr(obj) if _isinstance(obj, types.MethodType): name = _name_or_repr(obj.__func__) if obj.__self__: return name + ' (bound)' else: # pragma: PY2 -- no unbound methods on Python 3 return name # NB: types.LambdaType is an alias for types.FunctionType! if _isinstance(obj, types.LambdaType) and obj.__name__ == '': return 'lambda: %s:%s' % (os.path.basename(obj.__code__.co_filename), obj.__code__.co_firstlineno) if _isinstance(obj, types.FrameType): return '%s:%s' % (obj.f_code.co_filename, obj.f_lineno) if _isinstance(obj, (tuple, list, dict, set)): return '%d items' % len(obj) return repr(obj)[:40] def _gradient(start_color, end_color, depth, max_depth): if max_depth == 0: # avoid division by zero return start_color h1, s1, v1 = start_color h2, s2, v2 = end_color f = float(depth) / max_depth h = h1 * (1-f) + h2 * f s = s1 * (1-f) + s2 * f v = v1 * (1-f) + v2 * f return h, s, v def _edge_label(source, target, shortnames=True): if (_isinstance(target, dict) and target is getattr(source, '__dict__', None)): return ' [label="__dict__",weight=10]' if _isinstance(source, types.FrameType): if target is source.f_locals: # pragma: nocover return ' [label="f_locals",weight=10]' if target is source.f_globals: return ' [label="f_globals",weight=10]' if _isinstance(source, types.MethodType): try: if target is source.__self__: return ' [label="__self__",weight=10]' if target is source.__func__: return ' [label="__func__",weight=10]' except AttributeError: # pragma: nocover # Python < 2.6 compatibility if target is source.im_self: return ' [label="im_self",weight=10]' if target is source.im_func: return ' [label="im_func",weight=10]' if _isinstance(source, types.FunctionType): for k in dir(source): if target is getattr(source, k): return ' [label="%s",weight=10]' % _quote(k) if _isinstance(source, dict): for k, v in source.items(): if v is target: if _isinstance(k, str) and _is_identifier(k): return ' [label="%s",weight=2]' % _quote(k) else: if shortnames: tn = _short_typename(k) else: tn = _long_typename(k) return ' [label="%s"]' % _quote(tn + "\n" + _safe_repr(k)) return '' _is_identifier = re.compile('[a-zA-Z_][a-zA-Z_0-9]*$').match def _program_in_path(program): # XXX: Consider using distutils.spawn.find_executable or shutil.which path = os.environ.get("PATH", os.defpath).split(os.pathsep) path = [os.path.join(dir, program) for dir in path] path = [True for file in path if os.path.isfile(file) or os.path.isfile(file + '.exe')] return bool(path) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1560428587.0 objgraph-3.6.2/other-requirements.txt0000644000175000017500000000001113500440053015533 0ustar00mgmggraphviz ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728548398.0 objgraph-3.6.2/release.mk0000664000175000017500000001270614701707056013136 0ustar00mgmg# release.mk version 2.2.3 (2024-10-10) # # Helpful Makefile rules for releasing Python packages. # https://github.com/mgedmin/python-project-skel # You might want to change these FILE_WITH_VERSION ?= setup.py FILE_WITH_CHANGELOG ?= CHANGES.rst CHANGELOG_DATE_FORMAT ?= %Y-%m-%d CHANGELOG_FORMAT ?= $(changelog_ver) ($(changelog_date)) DISTCHECK_DIFF_OPTS ?= $(DISTCHECK_DIFF_DEFAULT_OPTS) # These should be fine PYTHON ?= python3 PYPI_PUBLISH ?= rm -rf dist && $(PYTHON) -m build && twine check dist/* && twine upload dist/* LATEST_RELEASE_MK_URL = https://raw.githubusercontent.com/mgedmin/python-project-skel/master/release.mk DISTCHECK_DIFF_DEFAULT_OPTS = -x PKG-INFO -x setup.cfg -x '*.egg-info' -x .github -I'^\#' # These should be fine, as long as you use Git VCS_GET_LATEST ?= git pull VCS_STATUS ?= git status --porcelain VCS_EXPORT ?= git archive --format=tar --prefix=tmp/tree/ HEAD | tar -xf - VCS_TAG ?= git tag -s $(changelog_ver) -m \"Release $(changelog_ver)\" VCS_COMMIT_AND_PUSH ?= git commit -av -m "Post-release version bump" && git push && git push --tags # These are internal implementation details changelog_ver = `$(PYTHON) setup.py --version` changelog_date = `LC_ALL=C date +'$(CHANGELOG_DATE_FORMAT)'` # Tweaking the look of 'make help'; most of these are awk literals and need the quotes HELP_INDENT = "" HELP_PREFIX = "make " HELP_WIDTH = 24 HELP_SEPARATOR = " \# " HELP_SECTION_SEP = "\n" .PHONY: help help: @grep -Eh -e '^[a-zA-Z0-9_ -]+:.*?##: .*$$' -e '^##:' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = "(^|:[^#]*)##: "; section=""}; \ /^##:/ {printf "%s%s\n%s", section, $$2, $(HELP_SECTION_SEP); section=$(HELP_SECTION_SEP)} \ /^[^#]/ {printf "%s\033[36m%-$(HELP_WIDTH)s\033[0m%s%s\n", \ $(HELP_INDENT), $(HELP_PREFIX) $$1, $(HELP_SEPARATOR), $$2}' .PHONY: dist dist: $(PYTHON) -m build # Provide a default 'make check' to be the same as 'make test', since that's # what 80% of my projects use, but make it possible to override. Now # overriding Make rules is painful, so instead of a regular rule definition # you'll have to override the check_recipe macro. .PHONY: check check: $(check_recipe) ifndef check_recipe define check_recipe = @$(MAKE) test endef endif .PHONY: distcheck distcheck: distcheck-vcs distcheck-sdist .PHONY: distcheck-vcs distcheck-vcs: ifndef FORCE # Bit of a chicken-and-egg here, but if the tree is unclean, make # distcheck-sdist will fail. @test -z "`$(VCS_STATUS) 2>&1`" || { echo; echo "Your working tree is not clean:" 1>&2; $(VCS_STATUS) 1>&2; exit 1; } endif # NB: do not use $(MAKE) in rules with multiple shell commands joined by && # because then make -n distcheck will actually run those instead of just # printing what it does # TBH this could (and probably should) be replaced by check-manifest .PHONY: distcheck-sdist distcheck-sdist: dist pkg_and_version=`$(PYTHON) setup.py --name|tr A-Z.- a-z__`-`$(PYTHON) setup.py --version` && \ rm -rf tmp && \ mkdir tmp && \ $(VCS_EXPORT) && \ cd tmp && \ tar -xzf ../dist/$$pkg_and_version.tar.gz && \ diff -ur $$pkg_and_version tree $(DISTCHECK_DIFF_OPTS) && \ cd $$pkg_and_version && \ make dist check && \ cd .. && \ mkdir one two && \ cd one && \ tar -xzf ../../dist/$$pkg_and_version.tar.gz && \ cd ../two/ && \ tar -xzf ../$$pkg_and_version/dist/$$pkg_and_version.tar.gz && \ cd .. && \ diff -ur one two -x SOURCES.txt -I'^#:' && \ cd .. && \ rm -rf tmp && \ echo "sdist seems to be ok" .PHONY: check-latest-rules check-latest-rules: ifndef FORCE @curl -s $(LATEST_RELEASE_MK_URL) | cmp -s release.mk || { printf "\nYour release.mk does not match the latest version at\n$(LATEST_RELEASE_MK_URL)\n\n" 1>&2; exit 1; } endif .PHONY: check-latest-version check-latest-version: $(VCS_GET_LATEST) .PHONY: check-version-number check-version-number: @$(PYTHON) setup.py --version | grep -qv dev || { \ echo "Please remove the 'dev' suffix from the version number in $(FILE_WITH_VERSION)"; exit 1; } .PHONY: check-long-description check-long-description: @$(PYTHON) setup.py --long-description | rst2html --exit-status=2 > /dev/null .PHONY: check-changelog check-changelog: @ver_and_date="$(CHANGELOG_FORMAT)" && \ grep -q "^$$ver_and_date$$" $(FILE_WITH_CHANGELOG) || { \ echo "$(FILE_WITH_CHANGELOG) has no entry for $$ver_and_date"; exit 1; } # NB: the Makefile that includes release.mk may want to add additional # dependencies to the releasechecklist target, but I want 'make distcheck' to # happen last, so that's why I put it into the recipe and not at the end of the # list of dependencies. .PHONY: releasechecklist releasechecklist: check-latest-rules check-latest-version check-version-number check-long-description check-changelog $(MAKE) distcheck .PHONY: release release: releasechecklist do-release ##: prepare a new PyPI release .PHONY: do-release do-release: $(release_recipe) define default_release_recipe_publish_and_tag = # I'm chicken so I won't actually do these things yet @echo "Please run" @echo @echo " $(PYPI_PUBLISH)" @echo " $(VCS_TAG)" @echo endef define default_release_recipe_increment_and_push = @echo "Please increment the version number in $(FILE_WITH_VERSION)" @echo "and add a new empty entry at the top of the changelog in $(FILE_WITH_CHANGELOG), then" @echo @echo ' $(VCS_COMMIT_AND_PUSH)' @echo endef ifndef release_recipe define release_recipe = $(default_release_recipe_publish_and_tag) $(default_release_recipe_increment_and_push) endef endif ././@PaxHeader0000000000000000000000000000003300000000000010211 xustar0027 mtime=1728561637.208707 objgraph-3.6.2/setup.cfg0000644000175000017500000000032514701740745013000 0ustar00mgmg[flake8] exclude = .tox,build,dist,docs/conf.py doctests = yes builtins = obj, obj1, obj2, MyClass ignore = E226,W503 [zest.releaser] python-file-with-version = objgraph.py [egg_info] tag_build = tag_date = 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561526.0 objgraph-3.6.2/setup.py0000775000175000017500000000552614701740566012707 0ustar00mgmg#!/usr/bin/python import doctest import io import os import re import sys import unittest from setuptools import setup def read(filename): with io.open(filename, encoding='UTF-8') as f: return f.read() def unsphinx(text): # remove Sphinx extensions used in CHANGES.rst from reStructuredText # so that it can be handled by plain docutils return (text.replace(':func:', '') .replace('.. currentmodule:: objgraph', '')) def get_version(): r = re.compile('''^__version__ = ["'](.+)["']$''') for line in read('objgraph.py').splitlines(): m = r.match(line) if m: # our read() returns unicode; coerce it back into str, or # python2.7 setup.py sdist will try to mix a unicode filename with # the byte stream of the .tar file return str(m.group(1)) raise AssertionError('Could not determine version number from objgraph.py') def get_description(): readme = read('README.rst') changelog = read('CHANGES.rst') description = unsphinx(readme + '\n\n\n' + changelog) return description def build_images(doctests=()): import tests if not doctests: doctests = tests.find_doctests() suite = doctest.DocFileSuite(optionflags=doctest.ELLIPSIS, checker=tests.IgnoreNodeCountChecker(), *doctests) os.chdir('docs') result = unittest.TextTestRunner().run(suite) if not result.wasSuccessful(): sys.exit(1) if len(sys.argv) > 1 and sys.argv[1] == '--build-images': build_images(sys.argv[2:]) sys.exit(0) setup( name='objgraph', version=get_version(), author='Marius Gedminas', author_email='marius@gedmin.as', url='https://mg.pov.lt/objgraph/', project_urls={ 'Source': 'https://github.com/mgedmin/objgraph', }, license='MIT', description='Draws Python object reference graphs with graphviz', long_description=get_description(), long_description_content_type='text/x-rst', classifiers=[ 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', ], keywords='object graph visualization graphviz garbage collection', py_modules=['objgraph'], python_requires=">=3.7", extras_require={ 'ipython': [ 'graphviz', # just for ipython support currently ], 'test': [], }, zip_safe=True, ) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728550273.0 objgraph-3.6.2/tests.py0000775000175000017500000005433514701712601012700 0ustar00mgmg#!/usr/bin/python import doctest import gc import glob import os import re import shutil import string import sys import tempfile import textwrap import types import unittest from io import StringIO from unittest import mock, skipIf import objgraph def format(text, **kwargs): template = string.Template(text) return template.substitute(kwargs) class GarbageCollectedMixin(object): """A mixin for test cases that garbage collects before running.""" def setUp(self): super().setUp() gc.collect() def tearDown(self): super().tearDown() gc.enable() class CaptureMixin(object): """A mixing that captures sys.stdout""" def setUp(self): super(CaptureMixin, self).setUp() self.real_stdout = sys.stdout sys.stdout = StringIO() def tearDown(self): sys.stdout = self.real_stdout super(CaptureMixin, self).tearDown() def assertOutput(self, output): self.assertEqual(sys.stdout.getvalue(), textwrap.dedent(output.lstrip('\n'))) class TemporaryDirectoryMixin(object): """A mixin that sets up a temporary directory""" def setUp(self): super(TemporaryDirectoryMixin, self).setUp() self.prevdir = os.getcwd() self.tmpdir = tempfile.mkdtemp(prefix='test-objgraph-') os.chdir(self.tmpdir) def tearDown(self): os.chdir(self.prevdir) shutil.rmtree(self.tmpdir) super(TemporaryDirectoryMixin, self).tearDown() # Unit tests SINGLE_ELEMENT_OUTPUT = textwrap.dedent('''\ digraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; ${label_a}[fontcolor=red]; ${label_a}[label="TestObject\\nTestObject(A)"]; ${label_a}[fillcolor="0,0,1"]; } ''') SINGLE_ELEMENT_OUTPUT_WITH_ATTR = textwrap.dedent('''\ digraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; ${label_a}[fontcolor=red]; ${label_a}[label="TestObject\\nTestObject(A)", x="y"]; ${label_a}[fillcolor="0,0,1"]; } ''') TWO_ELEMENT_OUTPUT = textwrap.dedent('''\ digraph ObjectGraph { node[shape=box, style=filled, fillcolor=white]; ${label_a}[fontcolor=red]; ${label_a}[label="TestObject\\nTestObject(A)"]; ${label_a}[fillcolor="0,0,1"]; ${label_b} -> ${label_a}; ${label_b}[label="TestObject\\nTestObject(B)"]; ${label_b}[fillcolor="0,0,0.766667"]; } ''') class TestObject: _objs = {} def __init__(self, name): self.name = name def __repr__(self): return 'TestObject(%s)' % self.name @classmethod def get(cls, name): if name in cls._objs: return cls._objs[name] obj = TestObject(name) cls._objs[name] = obj return obj def edge_function(chain_map=None): """Given a mapping of src name -> dst name or src name -> [dst names] returns an edge_function. The default edge_function is empty.""" if not chain_map: chain_map = {} def helper(src): if src.name not in chain_map: return [] dst_names = chain_map[src.name] if not isinstance(dst_names, (list, tuple)): dst_names = [dst_names] return [TestObject.get(dst_name) for dst_name in dst_names] return helper class ShowGraphTest(unittest.TestCase): """Tests for the show_graph function.""" def test_basic_file_output(self): obj = TestObject.get("A") output = StringIO() objgraph._show_graph([obj], edge_function(), False, output=output, shortnames=True) output_value = output.getvalue() label = objgraph._obj_node_id(obj) self.assertEqual(output_value, format(SINGLE_ELEMENT_OUTPUT, label_a=label)) def test_with_extra_node_attrs(self): obj = TestObject.get("A") output = StringIO() objgraph._show_graph([obj], edge_function(), False, output=output, shortnames=True, extra_node_attrs=lambda o: {'x': 'y'}) output_value = output.getvalue() label = objgraph._obj_node_id(obj) self.assertEqual(output_value, format(SINGLE_ELEMENT_OUTPUT_WITH_ATTR, label_a=label)) def test_filename_and_output(self): output = StringIO() self.assertRaises(ValueError, objgraph._show_graph, [], edge_function(), False, filename='filename', output=output) def test_simple_chain(self): edge_fn = edge_function({'A': 'B'}) output = StringIO() objgraph._show_graph([TestObject.get("A")], edge_fn, False, output=output, shortnames=True) output_value = output.getvalue() label_a = objgraph._obj_node_id(TestObject.get("A")) label_b = objgraph._obj_node_id(TestObject.get("B")) self.assertEqual(output_value, format(TWO_ELEMENT_OUTPUT, label_a=label_a, label_b=label_b)) def test_cull_func(self): edge_fn = edge_function({'A': 'B', 'B': 'C'}) output = StringIO() objgraph._show_graph([TestObject.get("A")], edge_fn, False, output=output, shortnames=True, cull_func=lambda obj: obj.name == 'B') output_value = output.getvalue() label_a = objgraph._obj_node_id(TestObject.get("A")) label_b = objgraph._obj_node_id(TestObject.get("B")) self.assertEqual(output_value, format(TWO_ELEMENT_OUTPUT, label_a=label_a, label_b=label_b)) @mock.patch('objgraph.IS_INTERACTIVE', True) @mock.patch('objgraph.graphviz', create=True) def test_ipython(self, mock_graphviz): mock_graphviz.Source = lambda x: x res = objgraph._show_graph([TestObject.get("A")], edge_function(), False) self.assertTrue(res.startswith('digraph')) class FindChainTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the find_chain function.""" def test_no_chain(self): a = object() self.assertEqual( [a], objgraph._find_chain(a, lambda x: False, gc.get_referrers)) class CountTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the count function.""" def test_long_type_names(self): x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa y = type('MyClass', (), {'__module__': 'other'})() # noqa self.assertEqual(2, objgraph.count('MyClass')) self.assertEqual(1, objgraph.count('mymodule.MyClass')) def test_no_new_reference_cycles(self): # Similar to https://github.com/mgedmin/objgraph/pull/22 but for # count() gc.disable() x = type('MyClass', (), {})() before = len(gc.get_referrers(x)) objgraph.count('MyClass') after = len(gc.get_referrers(x)) self.assertEqual(before, after) class TypestatsTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the typestats function.""" def test_long_type_names(self): x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa stats = objgraph.typestats(shortnames=False) self.assertEqual(1, stats['mymodule.MyClass']) def test_no_new_reference_cycles(self): # Similar to https://github.com/mgedmin/objgraph/pull/22 but for # typestats() gc.disable() x = type('MyClass', (), {})() before = len(gc.get_referrers(x)) objgraph.typestats() after = len(gc.get_referrers(x)) self.assertEqual(before, after) class TypestatsFilterArguTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the typestats function, especially for augument ``filter`` which is added at version 3.1.3""" def test_without_filter(self): MyClass = type('MyClass', (), {'__module__': 'mymodule'}) # noqa x, y = MyClass(), MyClass() x.magic_attr = True y.magic_attr = False stats = objgraph.typestats(shortnames=False) self.assertEqual(2, stats['mymodule.MyClass']) def test_with_filter(self): MyClass = type('MyClass', (), {'__module__': 'mymodule'}) # noqa x, y = MyClass(), MyClass() x.magic_attr = True y.magic_attr = False stats = objgraph.typestats( shortnames=False, filter=lambda e: isinstance(e, MyClass) and e.magic_attr) self.assertEqual(1, stats['mymodule.MyClass']) class GrowthTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the growth function.""" def test_growth(self): objgraph.growth(limit=None) x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa growth_info = objgraph.growth(limit=None) cared = [record for record in growth_info if record[0] == 'MyClass'] self.assertEqual(1, len(cared)) self.assertEqual(1, cared[0][2]) def test_show_growth_custom_peak_stats(self): ps = {} objgraph.show_growth(peak_stats=ps, file=StringIO()) self.assertNotEqual(ps, {}) class GetNewIdsTest(unittest.TestCase): maxDiff = None def setUp(self): objgraph.get_new_ids(limit=0, shortnames=True) def test_get_new_ids(self): x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa new_ids = objgraph.get_new_ids(limit=0) self.assertIn(id(x), new_ids['MyClass']) new_ids = objgraph.get_new_ids(limit=0) self.assertNotIn(id(x), new_ids['MyClass']) def test_get_new_ids_skip_update(self): x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa new_ids = objgraph.get_new_ids(limit=0) self.assertIn(id(x), new_ids['MyClass']) new_ids = objgraph.get_new_ids(skip_update=True, limit=0) self.assertIn(id(x), new_ids['MyClass']) def test_get_new_ids_long_typename(self): objgraph.get_new_ids(limit=0, shortnames=False) x = type('MyClass', (), {'__module__': 'mymodule'})() # noqa new_ids = objgraph.get_new_ids(limit=0) self.assertIn(id(x), new_ids['mymodule.MyClass']) def doctest_get_new_ids_prints(): """Test for get_new_ids() >>> _ = objgraph.get_new_ids(limit=0) >>> _ = objgraph.get_new_ids(limit=0) >>> a = [[] for n in range(10)] # noqa >>> _ = objgraph.get_new_ids(limit=1) ... # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ======================================================== Type Old_ids Current_ids New_ids Count_Deltas ======================================================== list ... ... ... +11 ======================================================== """ class ByTypeTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the by_test function.""" def test_long_type_names(self): x = type('MyClass', (), {'__module__': 'mymodule'})() self.assertEqual([x], objgraph.by_type('mymodule.MyClass')) def test_new_garbage(self): # Regression test for https://github.com/mgedmin/objgraph/pull/22 gc.disable() x = type('MyClass', (), {})() res = objgraph.by_type('MyClass') self.assertEqual(res, [x]) # referrers we expect: # 1. this stack frame (except on Python 3.7 where it's somehow missing) # 2. the `res` list # referrers we don't want: # the ``objects`` list in the now-dead stack frame of objgraph.by_type self.assertLessEqual(len(gc.get_referrers(res[0])), 2) class AtAddrsTest(unittest.TestCase): def test_at_addrs(self): a = [0, 1, 2] new_ids = objgraph.get_new_ids(limit=0) new_lists = objgraph.at_addrs(new_ids['list']) self.assertIn(a, new_lists) class StringRepresentationTest(GarbageCollectedMixin, unittest.TestCase): """Tests for the string representation of objects and edges.""" def test_obj_label_long_type_name(self): x = type('MyClass', (), {'__module__': 'mymodule'})() self.assertRegex( objgraph._obj_label(x, shortnames=False), r'mymodule\.MyClass\\n 2, "Python 3 has no unbound methods") def test_short_repr_unbound_method(self): class MyClass(object): def a_method(self): pass self.assertEqual('a_method', objgraph._short_repr(MyClass.a_method)) def test_short_repr_frame(self): frame = sys._getframe() # we're calling _short_repr() 6 lines down from here lineno = frame.f_lineno + 6 # Python >= 3.9 uses absolute filenames expected = { 'tests.py:%d' % lineno, '%s:%d' % (os.path.abspath('tests.py'), lineno), } self.assertIn(objgraph._short_repr(frame), expected) def test_gradient_empty(self): self.assertEqual((0.1, 0.2, 0.3), objgraph._gradient((0.1, 0.2, 0.3), (0.2, 0.3, 0.4), 0, 0)) def test_edge_label_frame_globals(self): frame = sys._getframe() self.assertEqual(' [label="f_globals",weight=10]', objgraph._edge_label(frame, frame.f_globals)) @skipIf(sys.version_info[0] > 2, "Python 3 has no unbound methods") def test_edge_label_unbound_method(self): class MyClass(object): def a_method(self): pass self.assertEqual(' [label="__func__",weight=10]', objgraph._edge_label(MyClass.a_method, MyClass.a_method.__func__)) def test_edge_label_bound_method(self): class MyClass(object): def a_method(self): pass self.assertEqual(' [label="__func__",weight=10]', objgraph._edge_label(MyClass().a_method, MyClass().a_method.__func__)) def test_edge_label_long_type_names(self): x = type('MyClass', (), {'__module__': 'mymodule'})() d = {x: 1} self.assertRegex( objgraph._edge_label(d, 1, shortnames=False), r' [label="mymodule\.MyClass\n= (3, 4): # Skip uncollectable.txt on Python 3.4 and newer doctests.discard(os.path.join('docs', 'uncollectable.txt')) return sorted(doctests) def doctest_setup_py_works(): """Test that setup.py works >>> import sys >>> orig_argv = sys.argv >>> sys.argv = ['setup.py', '--description'] >>> import setup # noqa Draws Python object reference graphs with graphviz >>> sys.argv = orig_argv """ def test_suite(): doctests = find_doctests() return unittest.TestSuite([ unittest.defaultTestLoader.loadTestsFromName(__name__), doctest.DocFileSuite(setUp=setUp, tearDown=tearDown, optionflags=doctest.ELLIPSIS, checker=IgnoreNodeCountChecker(), *doctests), doctest.DocTestSuite(), ]) if __name__ == '__main__': unittest.main(defaultTest='test_suite') ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1728561526.0 objgraph-3.6.2/tox.ini0000664000175000017500000000200614701740566012473 0ustar00mgmg[tox] envlist = py37, py38, py39, py310, py311, py312, py313 [testenv] deps = setuptools commands = python tests.py {posargs} [testenv:py] commands = python --version python tests.py {posargs} [testenv:coverage] deps = {[testenv]deps} coverage commands = coverage run tests.py coverage report -m --fail-under=100 [testenv:docs] deps = Sphinx commands = sphinx-build -Wn -b html -d docs/_build/doctrees docs/ docs/_build/html [testenv:livedocs] deps = Sphinx sphinx-autobuild commands = sphinx-autobuild docs/ docs/_build/html [testenv:flake8] deps = flake8 skip_install = true commands = flake8 objgraph.py setup.py tests.py [testenv:isort] deps = isort skip_install = true commands = isort {posargs: -c --diff objgraph.py setup.py tests.py} [testenv:check-manifest] deps = check-manifest skip_install = true commands = check-manifest {posargs} [testenv:check-python-versions] deps = check-python-versions skip_install = true commands = check-python-versions {posargs}