pax_global_header00006660000000000000000000000064141541576510014523gustar00rootroot0000000000000052 comment=88a7ace6e2128d902f8d54f4ca053d48881f0c7c prometheus_varnish_exporter-1.6.1/000077500000000000000000000000001415415765100174055ustar00rootroot00000000000000prometheus_varnish_exporter-1.6.1/.gitignore000066400000000000000000000001021415415765100213660ustar00rootroot00000000000000 bin prometheus_varnish_exporter prometheus_varnish_exporter.exe prometheus_varnish_exporter-1.6.1/.travis.yml000066400000000000000000000033111415415765100215140ustar00rootroot00000000000000os: linux dist: focal language: go go: - 1.17.4 before_script: - sudo apt-get install varnish -y - varnishstat -V script: - go build -v - sudo $GOROOT/bin/go test -v ./... after_success: - if [ -n "$TRAVIS_TAG" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then ./build.sh $TRAVIS_TAG; fi deploy: edge: true # opt in to dpl v2 provider: releases token: secure: "sY70uGYD3R5urUhwG97ncA6GFtVG9qBcJ+Ge+dlO1c36vi8XafuqhvY7isNfrXvbAmNSr70JZLzU2UsQ3A5XMWXh4LvvOSPjOgusDWnxS/XYjscIyb4KaL2q+Mt8+VrobaC30gPzKS8srmQ0ToJ3LCMvVtu9ZRLBJ3K+pbMRF2grxwqUGZp4xnOSxxr2bSYhzYHe0I0wfUdfQ+9cqsfoIAcTf6JcJn7UP2LdOdNiqBdKoCgMRUoLS7UARO/mTupY+fJRv/UdiqS9zDr2E3/mA9CnLSaj+nzKsYMNDrOMFynHCq19PuVi8TvJcEDAgqYFiLt5NybrHuAXQmwH1ndPD4GS5RgSm8N46rD0a8rH/SzvyjDGOfar803KjjeV6DxIZwFIfrM+tkQQT8GwiCB1rsxsZ1Q6JqEv6AhjgDi5mZOoKtIysyz2DHNV0r7os2MRujQumz8cwGeMVUnWOJJer3yEcjiL7wXC8WK113w1DdvKlrlW7X+Z0cnEtHjIgxr8LTnmJbjqSWknj1x+jZoRi5K9Z/OXfHl9w7JvLv5+TYsNA0KSgZssFDYG8mVqxbk4piiOl1i1pMgRc62hsh/mim302FRdVXJjUePuvNIwbPT1NCvZ8ZhwamwwIgzaL7VqxCuKygaOpqWY4Nd83fVFKMz55SkWP6tH0GCgzMkqEGY=" file: - "bin/release/prometheus_varnish_exporter-$TRAVIS_TAG.linux-amd64.tar.gz" - "bin/release/prometheus_varnish_exporter-$TRAVIS_TAG.freebsd-amd64.tar.gz" - "bin/release/prometheus_varnish_exporter-$TRAVIS_TAG.openbsd-amd64.tar.gz" - "bin/release/prometheus_varnish_exporter-$TRAVIS_TAG.netbsd-amd64.tar.gz" - "bin/release/prometheus_varnish_exporter-$TRAVIS_TAG.darwin-amd64.tar.gz" - "bin/release/prometheus_varnish_exporter-$TRAVIS_TAG.windows-amd64.tar.gz" - "bin/release/dashboards-$TRAVIS_TAG.tar.gz" - "bin/release/sha256sums.txt" on: repo: jonnenauha/prometheus_varnish_exporter tags: true overwrite: true prometheus_varnish_exporter-1.6.1/.vscode/000077500000000000000000000000001415415765100207465ustar00rootroot00000000000000prometheus_varnish_exporter-1.6.1/.vscode/settings.json000066400000000000000000000001411415415765100234750ustar00rootroot00000000000000{ "editor.formatOnSave": true, "go.buildOnSave": "package", "go.lintOnSave": "off" } prometheus_varnish_exporter-1.6.1/.vscode/tasks.json000066400000000000000000000030041415415765100227630ustar00rootroot00000000000000{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "group": { "kind": "build", "isDefault": true }, "problemMatcher": [ "$go" ], "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": false, "clear": true }, "command": [ "go build -v" ] }, { "label": "test", "type": "shell", "group": { "kind": "test", "isDefault": true }, "problemMatcher": [ "$go" ], "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": false, "clear": true }, "command": [ "go test -v &&", // this will most likely fail to scrape, would need sudo to access varnishd. // still runs our executable and prints varnishstat version etc. "./prometheus_varnish_exporter -test" ] } ] } prometheus_varnish_exporter-1.6.1/CHANGELOG.md000066400000000000000000000125301415415765100212170ustar00rootroot00000000000000# 1.6.1 - Fix duplicate counter errors on VLC reloads ([#70](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/70) @LorenzoPeri) - Match cache hit rate calculation in example dashboard to match Varnish internals ([#73](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/73)] @dhpowrhost) - Start building releases with go 1.17.4 # 1.6 - Varnish 6.5.x support ([#64](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/64) @johanneswuerbach) - Update github.com/prometheus/client_golang dependency to v1.9.0 - Remove GOARCH=386 builds from releases - Start building releases with go 1.15.6 # 1.5.2 - Fix metric names and missing labels for file cache metrics ([#55](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/55) @thedustin) - Fix scraping for Varnish 3.x. Removes the `main_n_ban` grouping. Metrics will now have individual `bans_` metrics instad of the grouped metric that had `type` as a label. ([#51](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/51) @glennslaven) - If you previously updated to 1.5 your exports would have already been broken as the grouping tries to combine gauge and counter metrics, which is not allowed by Prometheus. - This is breaking change if you are using Varnish 3.x and use ban metrics in your dashboards, you'll need to update them to the new ones. - Clean exported backend name if beginning with reload\_ ([#56](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/56) @stromnet) # 1.5.1 - Fix incorrectly typing Varnish 4.0.x stat flag `a` metrics as gauges instead of counters. ([#48](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/48) @glennslaven) - Fix `-test` mode to wait for full metrics scrape before continuing. # 1.5 - Deprecate `-no-exit`. Default behavior is now not to exit on scrape errors as it should be for a long running HTTP server. - This was design misstep. You will now get a deprecation warning if you pass `-no-exit` but the process behaves as before. - New explicit `-exit-on-errors` has been added for users who want the old default behavior back. - Correctly export gauge and counter types from `varnishstat` output `type` property. - Add go module support. - Use `github.com/prometheus/client_golang` v1.0.0 - Start building releases with go 1.12.6 # 1.4.1 - `-docker-container-name` to signal that `varnishstat` should be ran in a docker container with `docker exec ` . - Support Varnish 6.0.0 by testing the main logic works and metrics are exported. - Start building releases with go 1.10.3 # 1.4 - Standard non Varnish prometheus metrics need to now be enabled with `-with-go-metrics`. Before they were included by default. Now dropped to export less clutter that majority of users will never need (@nipuntalukdar). - Fix `varnish_backend_up` with Varnish 4.0 and earlier versions. # 1.3.4 - New per backend metric `varnish_backend_up` with 1/0 value that reflects the latest health probe result. The Varnish bitmap uint64 `varnish_backend_happy` as a prometheus float metric was not that useful in detecting latest up/down per backend. - Ability to give custom path to varnishstat with `-varnishstat-path` (@zstyblik) - Github releases now include Grafana dashboards archive. This includes all the dashboards posted by users in the repo, starting with my own. # 1.3.3 - New `-no-exit` mode that does not exit the process if varnish is not running at the time of startup. - Support Varnish 5.2 [that removed](http://varnish-cache.org/docs/5.2/whats-new/upgrading-5.2.html#other-changes) `type` and `ident` properties from varnishstat JSON output. If `ident` is not present, it is now parsed from the metric name. - Add tests to run scrape on static json files. - Start building releases with go 1.9.1 # 1.3.2 - Update readme to mention that exporter has been tested to work against Varnish 5.x releases. - Start building releases with go 1.9 # 1.3.1 - Don't return a 400 for `/` to behave more like other Prometheus exporters out there. Can now be used for health checks. ([#15](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/15)) - Start building releases with go 1.8 # 1.3 - Release packages now use the same naming and internal structure scheme with [promu](https://github.com/prometheus/promu). - Fixes issues running this exporter with systems like [puppet-prometheus](https://github.com/voxpupuli/puppet-prometheus) - No code changes - Start building releases with go 1.7.5 # 1.2 - Fix VBE label inconsistencies by always having `backend` and `server` labels present. ([#5](https://github.com/jonnenauha/prometheus_varnish_exporter/issues/5) [#8](https://github.com/jonnenauha/prometheus_varnish_exporter/issues/8)) - Resulted in varnish reporting lots of errors for a while after VCL reloads. - Fix bugs in `backend` and `server` label value parsing from VBE ident. ([#5](https://github.com/jonnenauha/prometheus_varnish_exporter/issues/5) [#8](https://github.com/jonnenauha/prometheus_varnish_exporter/issues/8)) - Add travis-ci build and test integration. Also auto pushes cross compiled binaries to github releases on tags. # 1.1 - `-web.health-path ` can be configured to return a 200 OK response, by default not enabled. [#6](https://github.com/jonnenauha/prometheus_varnish_exporter/pull/6) - Start building releases with go 1.7.3 # 1.0 - First official release - Start building releases with go 1.7.1 prometheus_varnish_exporter-1.6.1/ISSUE_TEMPLATE.md000066400000000000000000000001561415415765100221140ustar00rootroot00000000000000* **Varnish** `fill_version` * **prometheus_varnish_exporter** `fill_version` ------------------ Message... prometheus_varnish_exporter-1.6.1/LICENSE000066400000000000000000000020661415415765100204160ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2016 Jonne Nauha 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. prometheus_varnish_exporter-1.6.1/README.md000066400000000000000000000124461415415765100206730ustar00rootroot00000000000000[![Build Status](https://travis-ci.com/jonnenauha/prometheus_varnish_exporter.svg?branch=master)](https://travis-ci.com/github/jonnenauha/prometheus_varnish_exporter) # Varnish exporter for Prometheus ![Grafana example](dashboards/jonnenauha/dashboard.png) Scrapes the `varnishstat -j` JSON output on each Prometheus collect and exposes all reported metrics. Metrics with multiple backends or varnish defined identifiers (e.g. `VBE.*.happy SMA.*.c_bytes LCK.*.creat`) and other metrics with similar structure (e.g. `MAIN.fetch_*`) are combined under a single metric name with distinguishable labels. Vanish naming conventions are preserved as much as possible to be familiar to Varnish users when building queries, while at the same time trying to following Prometheus conventions like lower casing and using `_` separators. Handles runtime Varnish changes like adding new backends via vlc reload. Removed backends are reported by `varnishstat` until Varnish is restarted. Advanced users can use `-n -N`, they are passed to `varnishstat`. I have personally tested the following versions of Varnish to work `6.0.0, 5.2.1, 5.1.2, 4.1.1, 4.1.0, 4.0.3 and 3.0.5`. Missing category groupings in 3.x like `MAIN.` are detected and added automatically for label names to be consistent across versions, assuming of course that the Varnish project does not remove/change the stats. I won't make any backwards compatibility promises at this point. Your built queries can break on new versions if metric names or labels are refined. If you find bugs or have feature requests feel free to create issues or send PRs. # Installing and running You can find the latest binary releases for linux, darwin, windows, freebsd, openbsd and netbsd from the [github releases page](https://github.com/jonnenauha/prometheus_varnish_exporter/releases). By default the exporter listens on port 9131. See `prometheus_varnish_exporter -h` for available options. To test that `varnishstat` is found on the host machine and to preview all exported metrics run prometheus_varnish_exporter -test # Troubleshooting > Could not get hold of varnishd, is it running? > > 2020/12/18 20:22:33 [FATAL] Startup test: varnishstat scrape failed: exit status 1 User you are executing as can't find or access varnish services. `sudo` is a hammer that works, see for proper solutions [#62](https://github.com/jonnenauha/prometheus_varnish_exporter/issues/62). # Docker Scraping metrics from Varnish running in a docker container is possible since 1.4.1. Resolve your Varnish container name with `docker ps` and run the following. This will use `docker exec ` to execute varnishstat inside the spesified container. prometheus_varnish_exporter -docker-container-name I still don't have a easy, clear and user friendly way of running this exporter in a docker container. For community efforts and solutions see [this issue](https://github.com/jonnenauha/prometheus_varnish_exporter/issues/25#issuecomment-492546458). # Grafana dashboards You can download my dashboard seen in the above picture [here](dashboards/jonnenauha/dashboard.json). I use it at work with our production Varnish instances. I would be interested in your dashboards if you wish to share them or improvement ideas to my current one. # Varnish 4 and VCL UUIDs Starting with version 1.2 `backend` and `server` labels are always set. For backend-related metrics and Varnish 4 the `server` tag will be set to the VCL UUIDs for that backend. Note that there might be multiple VCLs loaded at the same time and the `server` tag might not be meaningful in that case. To aggregate all loaded VCLs into per-backend metric the following Prometheus [recording rules](https://prometheus.io/docs/querying/rules/) are recommended: backend:varnish_backend_bereq_bodybytes:sum = sum(varnish_backend_bereq_bodybytes) without (server) backend:varnish_backend_bereq_hdrbytes:sum = sum(varnish_backend_bereq_hdrbytes) without (server) backend:varnish_backend_beresp_bodybytes:sum = sum(varnish_backend_beresp_bodybytes) without (server) backend:varnish_backend_beresp_hdrbytes:sum = sum(varnish_backend_beresp_hdrbytes) without (server) backend:varnish_backend_conn:sum = sum(varnish_backend_conn) without (server) backend:varnish_backend_happy:sum = sum(varnish_backend_happy) without (server) backend:varnish_backend_pipe_hdrbytes:sum = sum(varnish_backend_pipe) without (server) backend:varnish_backend_pipe_in:sum = sum(varnish_backend_pipe_in) without (server) backend:varnish_backend_pipe_out:sum = sum(varnish_backend_pipe_out) without (server) backend:varnish_backend_req:sum = sum(varnish_backend_req) without (server) # Build **One time setup** This repot support go modules so out of `GOPATH` builds are supported. This makes development and buildings easier for go "novices". You need go 1.11 or higher, otherwise you can keep using `GOPATH` based development ([see old README](https://github.com/jonnenauha/prometheus_varnish_exporter/blob/1.4.1/README.md#build)). 1. [Install latest go](https://golang.org/doc/install) or use OS repos `golang` package. **Development** ```bash # clone git clone git@github.com:jonnenauha/prometheus_varnish_exporter.git cd prometheus_varnish_exporter # build binary to current directory go build # release with cross compilation ./build.sh ``` prometheus_varnish_exporter-1.6.1/build.sh000077500000000000000000000037771415415765100210610ustar00rootroot00000000000000#!/bin/bash set -e if [ ! -e main.go ] ; then echo "Error: Script can only be ran on the root of the source tree" exit 1 fi rm -rf bin mkdir -p bin/build bin/release VERSION=$1 VERSION_HASH="$(git rev-parse --short HEAD)" VERSION_DATE="$(date -u '+%d.%m.%Y %H:%M:%S')" echo -e "\nVERSION=$VERSION" echo "VERSION_HASH=$VERSION_HASH" echo "VERSION_DATE=$VERSION_DATE" if [ -z "$VERSION" ]; then echo "Error: First argument must be release version" exit 1 fi tar -cvzf ./bin/release/dashboards-$VERSION.tar.gz dashboards/* > /dev/null 2>&1 for goos in linux darwin windows freebsd openbsd netbsd ; do for goarch in amd64; do # path file_versioned="prometheus_varnish_exporter-$VERSION.$goos-$goarch" outdir="bin/build/$file_versioned" path="$outdir/prometheus_varnish_exporter" if [ $goos = windows ] ; then path=$path.exe fi mkdir -p $outdir cp LICENSE CHANGELOG.md README.md $outdir/ # build echo -e "\nBuilding $goos/$goarch" GOOS=$goos GOARCH=$goarch go build -o $path -ldflags "-X 'main.Version=$VERSION' -X 'main.VersionHash=$VERSION_HASH' -X 'main.VersionDate=$VERSION_DATE'" echo " > `du -hc $path | awk 'NR==1{print $1;}'` `file $path`" # compress (for unique filenames to github release files) tar -C ./bin/build -cvzf ./bin/release/$file_versioned.tar.gz $file_versioned > /dev/null 2>&1 done done go env > .goenv source .goenv rm .goenv echo -e "\nRelease done: $(./bin/build/prometheus_varnish_exporter-$VERSION.$GOOS-$GOARCH/prometheus_varnish_exporter --version)" for goos in linux darwin windows freebsd openbsd netbsd ; do for goarch in amd64; do file_versioned="prometheus_varnish_exporter-$VERSION.$goos-$goarch" path=bin/release/$file_versioned.tar.gz echo " > `du -hc $path | awk 'NR==1{print $1;}'` $path" done done cd ./bin/release shasum --algorithm 256 --binary ./* | sed -En "s/\*\.\/(.*)$/\1/p" > sha256sums.txt cd ../.. prometheus_varnish_exporter-1.6.1/dashboards/000077500000000000000000000000001415415765100215175ustar00rootroot00000000000000prometheus_varnish_exporter-1.6.1/dashboards/jonnenauha/000077500000000000000000000000001415415765100236455ustar00rootroot00000000000000prometheus_varnish_exporter-1.6.1/dashboards/jonnenauha/dashboard.json000066400000000000000000001150031415415765100264670ustar00rootroot00000000000000{ "__inputs": [ { "name": "DS_PROMETHEUS", "label": "Prometheus", "description": "", "type": "datasource", "pluginId": "prometheus", "pluginName": "Prometheus" } ], "__requires": [ { "type": "grafana", "id": "grafana", "name": "Grafana", "version": "4.5.2" }, { "type": "panel", "id": "graph", "name": "Graph", "version": "" }, { "type": "datasource", "id": "prometheus", "name": "Prometheus", "version": "1.0.0" }, { "type": "panel", "id": "singlestat", "name": "Singlestat", "version": "" } ], "annotations": { "list": [] }, "editable": true, "gnetId": null, "graphTooltip": 0, "hideControls": false, "id": null, "links": [], "refresh": "30s", "rows": [ { "collapse": false, "height": 160, "panels": [ { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "decimals": null, "description": "", "editable": true, "error": false, "format": "percentunit", "gauge": { "maxValue": 1, "minValue": 0, "show": true, "thresholdLabels": false, "thresholdMarkers": false }, "height": "", "hideTimeOverride": false, "id": 6, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "minSpan": null, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "100%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 1, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "Value", "targets": [ { "expr": "avg((rate(varnish_main_cache_hit{instance=~\"^($varnish_instance).*\"}[5m]) / (rate(varnish_main_cache_hit{instance=~\"^($varnish_instance).*\"}[5m]) + rate(varnish_main_cache_miss{instance=~\"^($varnish_instance).*\"}[5m]))))", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 2, "legendFormat": "", "metric": "", "refId": "A", "step": 1800 } ], "thresholds": "0,0,0.1", "title": "Cache Hit Rate", "transparent": true, "type": "singlestat", "valueFontSize": "70%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "decimals": 1, "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 9, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": " / sec", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "100%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 2, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum(irate(varnish_main_client_req{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "interval": "15s", "intervalFactor": 1, "legendFormat": "", "metric": "", "refId": "A", "step": 900 } ], "thresholds": "", "timeFrom": null, "title": "Frontend Requests", "transparent": true, "type": "singlestat", "valueFontSize": "70%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "decimals": 1, "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 2, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": " / sec", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "100%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 2, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum(irate(varnish_main_backend_req{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "interval": "15s", "intervalFactor": 1, "legendFormat": "", "metric": "varnish_main_backend_req", "refId": "A", "step": 900 } ], "thresholds": "", "title": "Backend Requests", "transparent": true, "type": "singlestat", "valueFontSize": "70%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "decimals": 1, "editable": true, "error": false, "format": "short", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 11, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": " / sec", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 1, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "frontend_for", "targets": [ { "expr": "sum(irate(varnish_main_sessions_total{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, "legendFormat": "", "refId": "A", "step": 900 } ], "thresholds": "", "title": "Sessions", "transparent": true, "type": "singlestat", "valueFontSize": "70%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "decimals": 1, "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "height": "", "id": 4, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": " / sec", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "100%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 1, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum(irate(varnish_main_cache_hit{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "interval": "15s", "intervalFactor": 1, "legendFormat": "", "metric": "varnish_main_backend_req", "refId": "A", "step": 900 } ], "thresholds": "", "title": "Cache Hit", "transparent": true, "type": "singlestat", "valueFontSize": "70%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": false, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 16, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 1, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "sum(varnish_main_vmods{instance=~\"^($varnish_instance).*\"})", "format": "time_series", "interval": "", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 1800 } ], "thresholds": "", "title": "Loaded VMODs", "transparent": true, "type": "singlestat", "valueFontSize": "70%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "avg" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(12, 145, 12, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 1, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 1, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "scalar(count(varnish_backend_up{instance=~\"^($varnish_instance).*\"} == 1))", "format": "time_series", "interval": "1m", "intervalFactor": 1, "legendFormat": "", "metric": "", "refId": "A", "step": 900 } ], "thresholds": "0,1", "title": "Backend Up", "transparent": true, "type": "singlestat", "valueFontSize": "70%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(138, 138, 138, 0.89)", "rgba(245, 54, 54, 0.9)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 7, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 1, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "", "targets": [ { "expr": "scalar(count(varnish_backend_up{instance=~\"^($varnish_instance).*\"} == 0))", "format": "time_series", "interval": "1m", "intervalFactor": 1, "legendFormat": "", "metric": "", "refId": "A", "step": 900 } ], "thresholds": "1", "title": "Backend Down", "transparent": true, "type": "singlestat", "valueFontSize": "70%", "valueMaps": [], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(245, 54, 54, 0.9)", "rgb(96, 96, 96)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "decimals": null, "editable": true, "error": false, "format": "dtdurations", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 18, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 1, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "__name__", "targets": [ { "expr": "min(varnish_main_uptime{instance=~\"^($varnish_instance).*\"})", "format": "time_series", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 1800 } ], "thresholds": "", "title": "Uptime", "transparent": true, "type": "singlestat", "valueFontSize": "50%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(245, 54, 54, 0.9)", "rgb(96, 96, 96)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "decimals": null, "editable": true, "error": false, "format": "dtdurations", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 10, "interval": null, "links": [], "mappingType": 1, "mappingTypes": [ { "name": "value to text", "value": 1 }, { "name": "range to text", "value": 2 } ], "maxDataPoints": 100, "nullPointMode": "connected", "nullText": null, "postfix": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 1, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "tableColumn": "version", "targets": [ { "expr": "varnish_version{instance=~\"^($varnish_instance).*\"}", "format": "table", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 1800 } ], "thresholds": "", "title": "Version", "transparent": true, "type": "singlestat", "valueFontSize": "50%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" } ], "repeat": "cluster", "repeatIteration": null, "repeatRowId": null, "showTitle": false, "title": "Row title", "titleSize": "h6" }, { "collapse": false, "height": 403, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_PROMETHEUS}", "decimals": 0, "editable": true, "error": false, "fill": 4, "grid": {}, "id": 8, "legend": { "alignAsTable": true, "avg": true, "current": false, "hideEmpty": false, "hideZero": false, "max": true, "min": false, "rightSide": true, "show": true, "sideWidth": 400, "total": true, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [ { "alias": "fetch total", "fill": 0, "yaxis": 2 }, { "alias": "frontend", "color": "#508642" }, { "alias": "backend", "color": "#CCA300" } ], "spaceLength": 10, "span": 8, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(irate(varnish_main_client_req{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "interval": "", "intervalFactor": 1, "legendFormat": "frontend", "metric": "", "refId": "A", "step": 60 }, { "expr": "sum(irate(varnish_main_backend_req{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "interval": "", "intervalFactor": 1, "legendFormat": "backend", "refId": "B", "step": 60 }, { "expr": "sum(varnish_main_fetch_total{instance=~\"^($varnish_instance).*\"})", "format": "time_series", "intervalFactor": 2, "legendFormat": "fetch total", "refId": "C", "step": 120 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Requests", "tooltip": { "shared": true, "sort": 0, "value_type": "cumulative" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "none", "label": "", "logBase": 1, "max": null, "min": 1, "show": true }, { "format": "none", "label": "", "logBase": 1, "max": null, "min": 0, "show": false } ] }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_PROMETHEUS}", "fill": 6, "id": 14, "legend": { "alignAsTable": true, "avg": true, "current": false, "hideEmpty": false, "hideZero": false, "max": true, "min": true, "rightSide": false, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 0, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [ { "alias": "/.*miss/", "color": "#890F02" }, { "alias": "/.*hit/", "color": "#508642" } ], "spaceLength": 10, "span": 4, "stack": true, "steppedLine": true, "targets": [ { "expr": "rate(varnish_main_cache_hit{instance=~\"^($varnish_instance).*\"}[5m]) / (rate(varnish_main_cache_hit{instance=~\"^($varnish_instance).*\"}[5m]) + rate(varnish_main_cache_miss{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 2, "legendFormat": "cache hit %", "refId": "A", "step": 240 }, { "expr": "rate(varnish_main_cache_miss{instance=~\"^($varnish_instance).*\"}[5m]) / (rate(varnish_main_cache_hit{instance=~\"^($varnish_instance).*\"}[5m]) + rate(varnish_main_cache_miss{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 2, "legendFormat": "cache miss %", "refId": "B", "step": 240 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Cache hits", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "percentunit", "label": "", "logBase": 1, "max": "1", "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ] } ], "repeat": null, "repeatIteration": null, "repeatRowId": null, "showTitle": false, "title": "Row title", "titleSize": "h6" }, { "collapse": false, "height": 388, "panels": [ { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_PROMETHEUS}", "decimals": null, "editable": true, "error": false, "fill": 5, "grid": {}, "hideTimeOverride": false, "id": 12, "legend": { "alignAsTable": true, "avg": true, "current": false, "hideEmpty": true, "hideZero": true, "max": true, "min": false, "rightSide": true, "show": true, "sideWidth": 400, "sort": null, "sortDesc": null, "total": true, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [ { "alias": "/backend .*/", "fill": 7 }, { "alias": "frontend", "color": "#508642", "stack": false, "zindex": -2 }, { "alias": "/^backend$/", "color": "#CCA300", "fill": 0, "stack": false, "zindex": 1 } ], "spaceLength": 10, "span": 8, "stack": true, "steppedLine": false, "targets": [ { "expr": "sum(irate(varnish_main_s_resp_hdrbytes{instance=~\"^($varnish_instance).*\"}[5m]) + irate(varnish_main_s_resp_bodybytes{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, "legendFormat": "frontend", "refId": "A", "step": 60 }, { "expr": "sum(irate(varnish_backend_beresp_hdrbytes{instance=~\"^($varnish_instance).*\"}[5m]) + irate(varnish_backend_beresp_bodybytes{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "hide": false, "interval": "", "intervalFactor": 1, "legendFormat": "backend", "metric": "", "refId": "B", "step": 60 }, { "expr": "sum(irate(varnish_backend_beresp_hdrbytes{instance=~\"^($varnish_instance).*\"}[5m]) + irate(varnish_backend_beresp_bodybytes{instance=~\"^($varnish_instance).*\"}[5m])) by (backend)", "format": "time_series", "intervalFactor": 2, "legendFormat": "backend {{ backend }}", "refId": "C", "step": 120 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Network", "tooltip": { "shared": true, "sort": 2, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bytes", "label": "", "logBase": 1, "max": null, "min": "1024", "show": true }, { "format": "short", "logBase": 1, "max": null, "min": null, "show": true } ] }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "${DS_PROMETHEUS}", "decimals": 2, "editable": true, "error": false, "fill": 4, "grid": {}, "hideTimeOverride": false, "id": 13, "legend": { "alignAsTable": true, "avg": false, "current": true, "hideZero": false, "max": true, "min": true, "rightSide": false, "show": true, "sort": null, "sortDesc": null, "total": true, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [ { "alias": "/.*expired/", "color": "#82B5D8" }, { "alias": "/.*LRU moved/", "color": "#F9E2D2" }, { "alias": "/.*LRU nuked/", "color": "#BF1B00" }, { "alias": "/.*mem /", "color": "#BA43A9", "fill": 0, "yaxis": 2 } ], "spaceLength": 10, "span": 4, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(irate(varnish_main_n_expired{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "interval": "", "intervalFactor": 2, "legendFormat": "expired", "metric": "varnish_main_n_object", "refId": "A", "step": 240 }, { "expr": "sum(irate(varnish_main_n_lru_moved{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "interval": "", "intervalFactor": 2, "legendFormat": "LRU moved", "refId": "C", "step": 240 }, { "expr": "sum(irate(varnish_main_n_lru_nuked{instance=~\"^($varnish_instance).*\"}[5m]))", "format": "time_series", "interval": "", "intervalFactor": 2, "legendFormat": "LRU nuked", "refId": "B", "step": 240 }, { "expr": "sum(varnish_sma_g_bytes{type=\"s0\", instance=~\"^($varnish_instance).*\"})", "format": "time_series", "intervalFactor": 2, "legendFormat": "mem used", "metric": "", "refId": "E", "step": 240 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Cache", "tooltip": { "shared": true, "sort": 0, "value_type": "cumulative" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "none", "logBase": 1, "max": null, "min": 1, "show": true }, { "format": "bytes", "logBase": 1, "max": null, "min": 1, "show": true } ] } ], "repeat": null, "repeatIteration": null, "repeatRowId": null, "showTitle": false, "title": "Row title", "titleSize": "h6" } ], "schemaVersion": 14, "style": "dark", "tags": [], "templating": { "list": [ { "allValue": null, "current": {}, "datasource": "${DS_PROMETHEUS}", "hide": 0, "includeAll": true, "label": "Instance", "multi": false, "name": "varnish_instance", "options": [], "query": "label_values(varnish_up, instance)", "refresh": 1, "regex": "/^(.*):/", "sort": 1, "tagValuesQuery": "", "tags": [], "tagsQuery": "", "type": "query", "useTags": false } ] }, "time": { "from": "now-24h", "to": "now" }, "timepicker": { "now": true, "nowDelay": "", "refresh_intervals": [ "5s", "15s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ], "time_options": [ "5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d" ] }, "timezone": "browser", "title": "Varnish", "version": 26 } prometheus_varnish_exporter-1.6.1/dashboards/jonnenauha/dashboard.png000066400000000000000000005207111415415765100263100ustar00rootroot00000000000000‰PNG  IHDRNºõ~î pHYs  šœ IDATxÚìÝ\›÷}ïýÏ%¡ ”ĨuPã $Eé=hVØèNĶÈçÔòݲÞ&§Üž8m!YLºAsÇ$‹±Cjã,ÁiŠsÈç,µ†uÆë‰ÜÖ¸«å»Eéz¬E¶¢KEÝŠ8N"9ö%Ðuÿ!ñ[¿°œ×óÑ:BH—¤ëúþºÞ|õ½”5kÖ “Øéˆz ãõ@Æ#ꀌGÔ ¨2Q/d<¢^ÈxD½ñˆz ãe-þ뜜œ+V\eŸ9_Ýp9ìX—ÓYfõfgg_ÝŸÿªÿ€ÞÎõ*Šruþ«þx?`­^ÈxD½ñˆz ãõ@Æ#ꀌGÔ ¨2Q/d¼,vA:Š¢$ÿIþ;óß™ è"¢ë3?NßNÿ”…¯:gƒºžøgrr’ƒ %¢Þ´ƒAQEQ’ÿQEQfÀ)²ÛD°;ýoò†ÈLP<÷I3Apª`yz#º×ã:Q/€tˆzÓ2ŒƒÁh4L››ø&oM¹3ñît8×ãSyo236(†éHwVÎ;õe^†œÜL|r2Ÿ>s†ƒ ¥¥ˆzs\¿nÿcËC;¯‰óSL·¼û1횟_λƘ••¼17ìU”9?ÍD½ñx\Ç'ã“““ñx|2×u}*ê5g"cIdĉÿϤÇsƒÞ¤ÉÉÉÉI‘wçïÅâûv?îøÙ“u]Ã"9·~â¾Ï~²ôæUªÄNþâ_^hÿçáS³{ß¹ïÓŽ[W©=îýÖ×:ü6&’sëÝ\÷©¬9õ[ÏKíû†NR%€LtefõÆ‹6„þôè2zƒÁ {³²²ŒÆy{ƒaNt«(SIo<>991111119©L&ÃÞ©'¤L•©Y½É—žZŸWOæ¼FƒarÁôLÝtßG¢Ç§òuu•éúJçЉ˜iõOÖö—õ/ ÏnÈY5‹‰é#o>T5Ùßô?|sòOyè +¶üÏ•Kö&'Õêñ¸ÇãÉ)·EƒA’—O3¦æþ&óZ=ŸœJyãñx<¹Xo|æâlÉÈØ0“ö †©å~õ©% t]ëºè’˜Ì›ˆ|gíæÒÏÝ·æÈžÎ㥥 ޷醲ëV}ûgéöê[oÍyã»ÇEbož0­»£8gxø”iÕGïüèõ×_#2õšŠï{¢®4wêÇè/_iÝë=E–!ÃRoðøuÿú‘“ÙÁ“7\/rÒtB¬_ûÞu&9u\}{áSbªÿ§¦˜ˆœÌñÿ&~]^âÞ,ÿáëþ<;g•–#b¯x'vôúÃÇ "rê¤1&b[û®üxõßãOÜf¹íÝ-Ù'Ñãq}Ör¹S7Ù­>uQµYS} S ®1ñ?£1˘e4fM¯ö;³zƒ!ùëéÿee%ž¹œ!y7crÕ‡™w–Sv߯ë¿Ûñ/¿÷ŽWâo_èüÆK_Ýü‘7¾õÍÁ·S¬Õ±ùÿ1}ç›ÇN‰Ä¼/í¼þ¾¿ûZdzOn.‹S“ÙñpløÛÿôKY½fÍš5kÖ˜ŽÿË·Èy€åjÉ×ê¦"Fƒˆ˜D$z]dž Õ¿ûruü×ýÖoô™çe9·œÜPýöM¹"¿îF L=ýTtê1UD$'oòퟚf?wUžöÁÛFÛ?žø)ž£­Ê]²O¢‹®ëq=nÐãñ¸Á èqEWfÖV˜·Ø‚$³ßdœœì«ëºˆÁ`0Æu™¾0Û¼Ì7±pobù‰'?I}Í?®Š|vûoî?yëS‡gÿòÔg{Óôbá“?6Šhwµ¿qCúMŸ7^w}LÄ8ëÓï^»ùñÿ¥^Š}3•âÆuÝ×uEŸ•ôÊTÖ×õäêºafµ]I,ï`4f‰t=®‹L-Ñ;½xƒ¢$Ò]]×ã"Jb5_}ÞŽT¦˜ºeú£¿([S\öì?Ü'""ªª>¾ï#ÿ²}Ë«oLï”ßzÿÉóß¾Rz³éC³gé®*ÛüøFõ›_ÙãM1á×ôѲ[c¿84¢°œôî}¤Ö‹Å¨+À2–ué_"W³åfß4ÈÉ•7 7™DD9•Õk4UL“9¹†ß½i‘œÛNþ§5ñ_§ßRà¨Ùô×'þ´¿àGoŠiUÌtÒ8|­éÿû³Ãk~xÜ ¦ÉåIbSKa&Ì+q%®(Š¢ÄEDEÑ㺮Äue2>)×ã‰_‹’˜Ö«ëñäR»¢EŒ‰… SRD×ã“ñ¸L&67õoâ¹Ós„çξ®ì¾ûnõv¾êù»Ïx¦ÞãªO~ù+7|ss×°˜nøèͱ_üòDLD®+ý¯ŽëûÝã11ÝúÉúuÑovüà·«Jêÿoê·¿²'Õä\Ó Qÿ¹ÒÿôøpªAÎ ,{—#ê=U¹-T”+"†·ºúë‡"ò“ÞÕÿù±‘¯­_ñÿ»©¿G}¨ÕÿgѬ·~þÁýqÖMé·û©µ½ÿømþÏ©ÏëxÈêÿÅõí=¡¶ÿâ³¹ºhY¾‚§ú—.êëq‰ÏLSÖuÝ`0º® z\Çã“““%1C7Ø&˜xôÔ¿‰€W1Ä1¯ÌÌÖãq=ùøÙ‘ïôkê³&¯ºõ£¥9ž+?K¹b®éúÒ÷5ܼJbšh'ylOûwOˆä\_\üÑ“«äê½oÝ-k¤±ÃјxüÉÖú½C«?ùÄß~êUN:øTª5!deÍš5‹üÚb±\}Ÿ9ŸË4ŒÊ¬åf]/mú?Sd“©ˆ6ÍNžý8‘DÖ;}‘·äôßY›»¹D&¬ÇOœx+ƒv,€Ë)‹]Ž®Ç%y%¶xr†Ä•Õ”YÑí‚„wfnïì;ç?tjeˆé¥OUD‘Ä à©…zõéGëéõ¦¥'/”¦ëSÉëì’¹íÂT7Ýææ†Â3Ë;è³/ƦL]mú†L…¼D½Ò"ê]ÄtÊÊ”ZËš]™Ž¨2Q/d<¢^ÈxD½ñˆz ãt]g/@F3ˆˆ®ë¾¹fp ð€ 5­Þyiï©S§®îÏÕ@ïÊš5kdAÂ+"Š¢°w #$gõ*Š2/Ûe1Èsp í€Ld˜—ç’ö@Æ1(Š¢ëúìHwÞb¤½°Ìdj&ï"Ó{I{`9K.à˜ÉK¤ ™È ³&íÎK{™Ø Á0oõÒ^È8ɵzg'¼‹¤½€eÈ0}k^›r/{`2Ìûyú*m³ïdb/,g†…k5L§½L쀌`˜ŽtSÎç½€/; –§äeÙdî4Þ”±/`y2,œÒ›nbï"÷® ä —qX8±—I¾°<¦sÞ…Ë82‚aö\Ýy!ï¼¥{…‰½°,DdáÄ^™•ꦌw™ù ˇa:áƒ!9É—$2HV"Û5™Lv»Ý`0ˆÈØØØ‰'¿ž–§ä&“)‘óŠHvvöÂ5˜ç Ë–aá¼ÝDª›.Ûe’/,7ÉÅyOŸ>‰DΜ9óÞ{ï½óÎ;ËôÍæW}õû‡ÿ~sá¥ÙxåÎ>ð?« )XVLŽ­ßþþk;ï4±+€ Rôà+‡¿÷\UÞ’o8×õô÷sK»W‹Âê¯øöÎÊ|öDF nßzà{ßßui† ¦’†W¿ó­­w䲟/º+jxõ{ßÿÚ†óèŠ ª¿~ø{ßØÌ™ ã Æ20(Â{¤Y"¢ëúäää¯ýëÙ 5,ùìÝÜ¢ÊÚ{«ÅV‹Y"¡àˆ¯¿«½ß»ŒG³ú…WêÌým|Ö?ݼoþ‡¯ÝéÜôW=£¢…áP$™~·ÕùÃ/Y8ê]·Ó½¥wwW¯wŒ3§%,e[¿µkíH{åç»5çšË†Zþò±ØyœÉ2(ºòóö-Ý»\á®÷÷L×nSÉ#¯¶»ÂŸ{ {ôb¶=7ý»*e%²]UU F£ˆ„B¡·Þzkz¹Þ%¹2[žcËs[×[µ ×sÀQ-ö’‚|mY5jãž§ðL¿_gm}•Ööò‘4gNZ``ßÀˆ9¯°d­³ªy§9ò¹ÝÞE>M«®¶*ä{‰ ÷w %oûCKØ…×l®+ð^–¡ó,‡—¾5.¯n¼'_ïAÿ8% K#t´»×Uóò‹*œ·ZÆ?÷ÅÞŒhHÃCûû¼ZžÍ^æ\»y—EîûRß}ßtCW“‚ê–5Å‘¡×úÝÕb+,²™#KÒöÜ~ÿAöïåë4 7<Ó¾¹X º=AMµÚKŠ­¦ :ë¸dg¢#=þUÏ•á •¨×í‹”—9+r¹“Fn¹«Ô¬ ¹=ãbÑ4µØéÌ;8ôå–W–J$"時Wòà3mUv u„4³­Ä±¶vWiI[ýc‡Æf“„$ÏRX쨨i.w7}q¯/Êx²‹"îïóŽ‹%¿°¤ÂQ×Væè|øKÝ#¤½W¾Sžw&ˠ芋ù܃a×ú;ù=SY¯©ÔUf‘áÞã¹í9éßÕ)KDE1™L‰œWDV¬X±ÔÕ¦¤¶a½UÚûPSßü? çmh¬­,-´YÌZ88Ôûlkwba*pnÞ¼ÉQj³H$<Úõèî#‰Ñ¬Zü…Í•¥6U ùÝ­{=‰ºh*pnnØä,¶™%ì}~w÷ùGò«¾új½¹·îó{eÃΖÚRU•æÿýýf ¾úÀçºæOîÕ‚½ÝÇb"&Oä¥öÊG±x}©?‹©¤¶ýñ*»ªÚw}½ÈО{¾tp\òÊj·l^_b³H8èswìîò2l¾¼"~wwnx©ft[“ÏÙTë´…{ëþªkÔTà¬Ý¼ÉYj³H$8|øå=GFc"¦Û·öî*8Ð:`«®*·[$ìÙÓÒçå9vn¹Û*RóÂáÑ<-•ÛÄR—Ìüª¯¾ºi¬½#âÜä,¶ªZÈ?б{O2…É-©ÝÚpw‰MûÜéÏàR—CSá]Õ»UÕB£={Ú&†y޷ֻЭjdx ³W«ivø›>½Û+…›ÿþ…{´Äôv)¨ùŸ/Õ©½uŸß;"’¦¬N¿„Y"¡  £µßÚ°«ÞiV¥¾÷{õv7~zw ¤ºéÁªR»EÕÂáÀpïó­½Ì÷ÅyŽã½=}‰¹fîÈ×÷ÕX DÆDòÊjî­(²Û,j$ìÙÝÖ—#ç–lhüBU¹ÝªJ8äïm{¸gNs{CÇŽJ³·¥~û‘±45%mÉw<¸%Q‰ž}ƒZúx%ìíï鑞ág^i,u”åöŒ&ÞÞƒ5v‹DBÃí{“ó¤L…w5=²©ÂnÖ‚Cº¼ö­õæ®{êŸ=½NDLw<Ñ»£b¸uý£Gbéjzî‚zw@Ý´ R³%Ñ.E¡À@WËóz¡Œ9)*)Vµ£{Ý}d~‹šº€Í4ã‘p(8س{÷¡Ñ”w=øJGU¸ã3_ìIÓŠiÝ®n”—Û%›]C` ³eÏ¡´/„´ÏÊÆÚbsÈÝôÀnïük¾ãÁ†M‰9—‘PÀ³¯-±‡S5qÄ€ÀêÚòÕMk‹ç5YiÛœs-l·oíÝån]ÿ¨¯<ÅçýUñÒÔˆôËT´¡ùojÊ ûÁqí¬UULë›jÅf-äè h"꼬÷¨{(â(w:r݉y½¹e®sÄç>1‹ˆðìEεù}ÉÌ+×á*ц<Árgr&¡TÕWÙ%ÐÛøÅ½Sƒ²}Î'^hvÔ×ßáÙv,Y##îî¾Ä8¹³`îŽÍUMµ›žõÇ$ÿ*í>R7Òž¨Š©ð®ÆújGq⸻÷4=ï=ßñFу¯t8¼m=jeâWÁ¡϶v%·ÎãEÏm7w´‡uÎävÚv¼ŠÅK:DL]I—hˆèëïéKôŽE›ÛŸ®ÚôHÕÑÄYXÊv¦°ö¥¯×H÷ý÷½8"’Wùô«%r´õžmG¢"E ÿðµõ᎚¿ö¬]äÔg¯ù®ÇçŸÉj³E‰ÚÚÞg®¬vØ-xö=Û­ÝÕ°ÉQlUÃAï¾–ÖdåºÈnó³^Oh}¥sm~O÷X"Xt–[´áž±ô`у¯´— 4>®ydS¹5Ðñ™‡Û†–éôo$}¿h•_ö gìN¯á0ûÊl5±·ÔUf‘Ð@g_ŠrÕD"¾Þ®––ݽsyÝãõ%&É-kØÕ\Y,þþνû^óŽŒN"l®:‡vôåÎΠ¹¤ª©áÎÜÄAß¼«Ùe ö··´vJiÝ[]©–ÝQÍù3ò-©›ß¾Ã~Mdxÿ¶G›ÝÝ\¬ô…#šˆª.òY‚ž^OP$2ص­éÑG;=ã"…µ;wl, ÞÛÒ²w \XÓ²³º€š|™™-ùI¹ÉîTKYCËæÍ?pøˆ7,¦²†]ÍUÅš¯·coïшýî­»oŸ^®Î¾q‹K;ÔѼ­íµ°µbó–M…"‘À@Ÿ7$ò´7?úhó˾آ%Óìl¬³ìÛ½­åå!)©lÚœ(Ìyέ;6–YB=^YWSa9{+8»æÝ¹µ­Áiöw·µ¶wûÍkv5Ý‘+"ù¶6W•ª#îήÞa˦¦JÛ9ì¦4eµ`SSƒË:ÚßÞÚÒÑã †CáhdØÝ? ºÛ}´éÉÔ=RWaîÞÝÒ¶·wp|<¢£ÃùRÍ–¼¼¼¼üBGe‰M"ÃÞĉgDìëhim-d]»yë¦ÄJKÚvÖ¯µ†¿Ü±¯×ŒÎn¿M…Õm[+-þަÖ#cékJÚ >· ™kî)SÏþ "‘ˆ&’8_Ï¿«å‰úrÍÓÙÚÒÞ´V6·Ô™DÄTÖøDãZ[ähwç>O´¼¡®ü6œæý§ªw º¡¼»¶4UÚ#-­íûFÂãWõ×—®¾qïèXHT»Ã‘?ouÖÔÌähغ±DìjiÙ³ï58Kê;çÄZ‹õ€ªZ^ÛXêmß¶­Ý±¹]yç°MÌKsŪ6ÔÓéM13!’øâN{kK‡'bw56% LÛÄ©å÷ÖXGz;÷öi¶é&+m›³°¥µÍ Žmsª¦láçýô¦¯i–©¬ñ‰ú [d0ѰW»lg©ª"…u-[\vmh×¾þ`AUeqŠêï=4QKŽÜ© ·T ¹§ ‘ñ K±Ó™\]2Ïé*x|3™q¾Ãam¨o߬SÕñ—‚b.u–šR69ý=GÃb-sÙE®Þî#õx#͉ªäݹµ½Áex÷ïíØ?àŒ£6Þ°V6VçzºZ›[{æòSÛ¿ñFÊÓG]ÅÛÙÚÚÖ´8[6—\Eÿ¸„CÄEÏ¥"ŠDýûº½Õî¬(HßÎŒx‡Bb+.ÊSIY¡D"jqY±IDòKŠ­ô%猥9µÄ¹Ô‹…g² X+ëï÷žmÍ]Cbw6>÷µMOgë¶öˆÕQߘhùϵÛŹòò†Ä>Õ©™JemØ=0¶x¨ZÍOl²{»ãg %Î?öÉY‰ÿ$.Ëf2™t]÷ÝwS>tÞJç¾°C^¾Õ"šw(ò·#}­Û·Ž åUÅñEUN«ækoÜ~pÁŠûÛÞ;&"¾Ü¢6Ûäˆ?×Q㲆myѳ–>Wérä¹<ÛâlÞ眷½ù/0>2äk¢Eü^oš¯Ã«f‹5?_,…ŽM.›„ÜîáôŸeÌ?8ÑÂ÷uÓíUëí2غmȑasIw­ÓUÐÓÅÜ—ËÈêڱϕ<}9¼ížÖc‰ò!CÞ¿ûõÄD‰u‰BØôäÁqq̯4¯­qv¾~01¨ ¹w·öùEdHÊ×îpØ sedÌçDÄ©ýž×GDDrïLS2EDDÚ׺×=.r,d½³¢nª0W–˜5_{ÓSÇEz½á¾Qg“s/‡ùk7TX‚½MOöŒˆˆg¼°lW¹«Ôt,¸v]©ht'&ÒïS¿ñµ»Ï6I[VͪYD‹ø‡<ž±Ø‘þÄ£_÷‡4‘H`ðõÄÄ_›Ù,ZhlØ{Ä7.|ÿ¢¸îûë’5uøÕí»çR1_×v_âÒõ»öB“ŒÄŠîª,VCž|tÏüBÓ,w6דּ‡û›¶%fw¤«)ɯò¤ªà–µëŠÕÈ@û¶=žèÙ*‘j±äçkªµ´º¦Ü¬ y¼ã"…ªJÍÃOîé9âûþ&‡«øyÿp™«Â*®m­=£"}‡Çžîn(=kL”úý{%U½›ß å›Íªh‘ßÑ#£±#‡(gÆßÙÞ[Ô\Õ¼¯¤æ¨»»»çÈHT$m šUU4mÔïðGõ%¢TwÎ’ëL×&ÇUî¶gŽŠˆ?Ïél´—ØM‡Ï²ṀZEBÔ+E=ÏoO6FÕál*.²™dÌžª‰KœCFö4=ë‰ç÷o-·æÊH4]›ã[ØÒ>÷RÝü¬y^Ü·`„ó¾²XH}°¤ÌUa‘@×¶mɆ=oºaOw\´»6 xjÛ^_L¤?hÞßâ\˜»º½áµŽÄ¹ÎR52èöÌÄŒjÄëöiMw: zzF%íºâˆ·gHªg ^U$û†àpH«²åç›ER”ÈXÀ?*ë‹òm& _µÝGšñFê“»üµ*Ì‘£Í·z¢"ÒwãÈѽ­ÝÇb"^­ÄYZYXlßXÁyŒ7ìÜÝ3y=`.zµÞá*}Öçeˆx–!búÛ’ ç¶öÁ`X–Â|“„Óµ3n¯?rwYY±éà`Iy±:|ØmY_Vfo°¤Ä&¡×ŽŠä§=µ¤»=Çz1ïL6ÕÓŽvµõ‹É±pѺòÖ¡}­=QžÓÕh/²›dÌv®Ý.Î}Ðë>ª¼'±†ƒ©ÔUfÑüûŽŽ‹,ªVmࡺçý119ª%ÒwñécŸLXÏhæ²lÑ=÷‰ IDATo¼ñF"º=™÷ÒË+ÙPw¯«´ÀjVEUÍ"QElv›*¡áTãßðÈpò›á±q‘|U[±U‹k—Û5«.¦®D¼Ýî@ò ªÝU[S~!ïZ-ox©;±Á€»íÉöD—‘ú³,`±XD-ßzàðÖ™Oe¶ˆõ^Faog‡;±Do,4=±!äu¿>Uo“…pjEº¨Ï”Š‚b»J<ÖŸücp,ªi¢ª)»ó´%S ’[D¢"æDa¶YgþÐH ,¶s/‡&[‘MÄ\Õù½ª™šóÌ&­Ð*224KŽÚ}£ÚÝgû“TÚ²êëÝçq4:wì+ ôî{ùPŠæ.6ØýòPéæªöWœÃw÷Ëû<|}ç-p õe¯&ª¥È¹¡jãÎg¢_| {D$ßQ[»¡¢ÈfI¶¶ª*ÉÚ#Ú oxaI³¸i,¶„_{²cê›—ijÊT‘¢‚›¬ÉJ=‡Jd«j%±åð`÷£m}c"&»Í*¢Ö¿òýú™ó‹<³I,¶³„þd0î ÉÙ¢Þtï?æ>—z7æ~ùµu[×7¼Ô»aðp_Ͼƒ,½™Y¢Þç¨9tgMuÍúªæµ•U¯n´Ë§¥)`Ñ£=½•OÔÔ=·¿Ò7ÐÛ½ïÀëc1Iyç윶Ld‘ÑÑä"÷Z$’¬!gÛ&RIý_S³¶¶ª¬ØjQUQͪDD1¥oâ$èŸêÞÇ£‘ä˜$m›#ó7|mÏ>ïTº«–Õ4¹¬9Ç‘ú`-Ò°§;.&³Õ*ÚQßô@ÍçÂÖ±!·7ìt:¹nÃY¢F<‡çÐðÑ¡Æ-NWAO—ætÚÃG_’‚ê¹eî¼WPMW}÷‘z¼‘úä.Ñx‡SœìŸÇx#9ПZR!ñ% Üóoœ%Ò %ßäXp4,ÅùÖ¼”q>CÄY‡l‘ÆsI†ˆçßÎ y‡5§½¬Ø.+±„ÜKEeIi¾ÉRV¬F¼žé‰k)O-±dõbº¶FÆ#"á±ädþä@輺]œOÖë ÞSå\›ß³¿ÀUjц»<ãgG§/ÖPbIbŸåõ&‚ݬ¬¬›nºÉh4êº~âĉ·ß~{IëR8"j~±MŽÌŸWóÎúâÐ@Ç“»‡Bkõ3m•gk©W¾QEBî––ƒÓ Òh‘PŠkmEB÷Ì·ÆŠî½°¨Wîmëö[+7וjÁ@r©®Å?ËÜ÷*‘£{í™ùP¡ Õøòž\} ÿÌ©içþ54íÜ–ÍJS2-‹oB›.ü1íüÊarðÓÛôì@dæ%ƒã “£´VsÕ³–Õ1÷öû†J\5ÕUk«š*¥ÍìöÌïÆFú®ñ:î®ÞPå¬iq8ö?|ÿ^ÖêÅyö#^'*"žQó«OWV®+ê~^«Ý¹c£eøÀžÖ~(R´¹skÅì"›zøl#öµVõ~±gf¡º5%9E.UíTϹ‰„Ú»¤¬¶ÞeŽø3£Gm¨óᮡ™úÅ’ËÑÎe»óF)Þlü\êݸg÷ç7ö¯«©ÙົᙠG[Ýc‡H{3KtäHדGöÜÕò\ãÆ+ÝÕ›®€E}]}fÀY]SårÖïr8÷>ôPßhÊ;Ï£MÕ}]ä6ßoB£a›½`áÜSÉæ]Í•êP÷žæC°8š¾Qo?K'Z$M»‘ªH,ö˜¾T¹ê"ê=g‹¬EöTÇ¥âÜz˜ÄejÖ:â(UÃG݃óiÔãŠ4W¬+tGö°·Ó“‚Ù/$b·äŠ?:»“´ªK= 6ÙD£ÁØUÜ}¤oôžëÉÝ7¬‰ƒŸæ\ñì¥AmΨ]Ĥªê¼s‡éßšäjËý.ñ1}ãy±CÄ9rív«Hpd4&é—ì‹ú¼)/.*”XÃ>¯ßŸ7q–••æš5ÿàL|­iš¼ïÅDÓDLª*>Ï;$V/æíÞ‹évqFy‚U5Nga  Ä¢ uN­¿h¨ÍZ ?e(q>ÁQ†V,Câ?ÙÙÙ+W®TU5;;;7÷,«ºœïº½±a/"6ç¦uùóG…¥vU;ú}#£caÕ<õÎ`0¤‰µ¸$ï_"jb±šCþi#£ã[«Ò×{-äóxŽô´íÔŠ75U.öY’퀪& FÃb¶æk³ÞìÈ8MÀrjbM¬‹$"¹%%6ÑBÀYZ‚™þäKf(ÒÄf/JVÃüB›å<ʡĂþ ˆ5ßœý’Q‰C!‘‚b{²Ú Ô9ïÚlMÙÜBûÔ)Þ¢e56æ;¸ç±ÏÕíÒ¬笵¿fWœØ¨§÷©‡7}±;¨Ú*ÖÙ)V¸ðóé\s²håÛDóõvñŒiæ©û¥\µ—Ø.ŠØ÷ðM{5û¦æÄšYéjÊb}Y¢•¦¬D N@CG<ý{vš×64:rE$†Dµæ«Yõi,*†"b±&»È܂˜Á…j±$_È^dS§ÞÌ"ï?E½›Û ‰ˆÈ¸ÿÐÞmu_‹'b)sU°œ[†žÑŒz½A³Õ’¾€‰ˆDG^l}èsÛ^ ™‹×9 ¹óbzÀÅ·‰¹Æ<Þ€¨¥Õ›,ãg-.²JØ»ïEtlLTóÙ›¸Ô¥c±"qæp†´kaÃ^h9Ëq‰…B!QmEÉor™ì…Öt'VnOX-qlr«a¯{á²ÉQ¯Û±9kë×ÙÃ^÷¼/y=QK7ÔÌ*xyÎj—M"ƒC©F¨¹Eµ÷V˜%èð¿?ºéñFÚ“»Xh$$RXZœâ³_ÆñF(ÒÄZR2}‚m²;ŠÍÍŠì-öd©µ•š%<ºÿ®»ÄCÄ h<Ïkˆ8KÞíõ›ÊTmØ}xlÑžwÌ7kÉ]ŶÈwX¢>ïˆØw[%àõFsÚëѰˆ­¤tºzæ–—ª ÆÎ©^\D'·ÔÝ.FÜGb»£¦²Ä’¼ éùÇ,‹…<è]æ²Þ5ä^Ô¥ØæŒ8º:+K+¶¼ð‚Ó3‹Ùbµ©ÞÝ­ýc¡°ˆ}ݦÊðUÖL¯_è÷n*uÔµ=nuû#ùE%ª§uÏ‘Å^¡Û½©¼²¾ýqk¯' ™­EeVÿž=î ìÌb¡PXÔ⪆ ꈄ<}Þ4¯?²»ÃõRÓ½[j½u¥û,"ѱ±°”–ÖÔUYCÚè@ÿ뽯œ«vìR»üšjµ—†ºŸì¡/+QO·;X^Yßöˆ¥ß/…ëª*ÌáÃ=îéI©…C¡ˆT8î­õŽkþ‡Î¿dŽ{ܾºÒ²º–¿1Œ¨EëªÎšÎ)‡#c‡{jv8wn± ‰¥°¤LõlÛ{lÔ}døžZgãŽp÷@È\Vy·M$yÉœ $"Ngã#Á~¿Z´®ªtzX”®¬U喝ú½C¡ˆZXfS%‹‰„FÇ4)ª¬«ÖüZd°?Z¹Ã%Þ!(b.)²ˆå=8_Ö²ê 긪æÛN§E‚ûD3‡ÂRZRY·NüæÒªê™ ×ø\5ëß%=c¹¶"[¨{{Ïtb:vhw»ã…æª-õÇîßãKWSùKÌL%êõóæT¢t‰¿ó©þò窷Þ~d¤¯wÈÕx÷㻤Çí «–¢Ò­Û‹¾˜ïà`¸bí½;¶H¯Oì® åÓaAlÄ”ŠÒê­µâÏwTÎLµKóþ½¥›SÕ»yÝÐPA}]aÈë„5«£@•ðXy ™£ð ϵ”E†|#£ã’_äX[,a·gX$–º€œ³µ,âõŒi‡Ý"‘‘PXrSÝ)æsèÓK½M¤oQº;û-•Uíß(<êõ‡"ªÙZ` ÷}éùáи&ö’šêu–°Å±¡Ê6õMŸ”MÜ"§"éÚœ |ÃóG8Wó÷tÌ…•µÕ%Éóó°ïÀ¡´5"ÝÁšiØÕ~¿fwn(5Ÿí¸ ò+«î~ü ­Ï;^à¨tZR,šœØöO¨²²¢LÂnwªt6zÔ=ÙQQ.¡ýO-˜¹4ÚÛÑëj«ªiÿFÑQ?¤™meŽ »%ìmë<µ\5J$ÏZTæ(·[´@w{—_D îÚz•v)Æ1-ÝÉÝèáƒC5 ÎÆZÑ‘ Øíš»ùyïåoD=½¡rW]ÇW‹ûBš¹ ÂYaÕ†;ûf]kF-­Û¹Å|([RyMBýî!†ˆg"ÆÎ¿ñ<Ÿ!¢¥¤²ZÆs-ö²Š2›9<ÔñlÿØYzÞ¯?¼ÑY^,Cí¾˜ÈøÐpÐ\UnWû½|)kž±×zŽVm­húúÓeX,ö2g¹%2ØÕ?r–z1÷L¶ïÈ…d’KÛíb¦~6Ö:*$r´kêoçšÊ6/J\Xì“Q¯¢(š¦Åb±ÄeÙN:%çsÕµs::›¾8¾©öÞµ%Î{ÊT- ¸5‘‘îöÊÊÆ-ί¿½u¤~GIòе>jnh¨qTÕ;ÕHhèÀÁÅÇ1ß³_jŽlÞäªjtª¢…ƒ>÷ÀEŒ2¼Ï—6êwïét}½ñžG6 |1ÝgñíëpÖ;«ê‹Âƒ{=ý¾‘®Çn®­tÕ7U©Z88<ÐÅéÐòó=ûhs¤a“kS£K"¡á»÷t;ÛŸåbžÎ®£¶Úò ¥¡¶×ùÏ¿dŽ»w·li¸»²¾88Ú³{_lǦ³…½³Êa×ȱ¶ÆÖHý½ŽM[\ª ‡zÆDd´§µ-k«¦±$<<°ï€¯qcÁÔ›Þ»{¿eózg}½#4<ÐÑ6Rל,¼iÊj$¬åWÕl®4«Z$xmÏž}#"2~ k_Ùã5kkë˃î@_ÿ˜ÖÔ:ïQE ‡ûÛÚúÆ(U8ßq|EM}…ˆH$Ü¿gÏ^LÄÛ¹§ßÖàºgKq$8¸ïɶÐãM–©ÛÜ*µ®õµ¥ªx:Ã2ûûpã{:œEÍw?Òèy`·7MMY¬+KV¢ªú’ðð@g[oMŠkæ,{Ûûí•õwú¶9Øü˜Ô×Ö¬­mº[Õ"¡ÀÑ—Ã""Qoûöõ‘Mk77V‡ô X7»¦ÏÉÛöØ›îull( »[;;’× OùþcáÔõnn7t4±TWÖ'jpÐÓ±½ÃÇ7K2GØç9œ•åfU‹„ƒÃ½-]Þ˜ˆŒ¥,`Z8¢–VÖ­7«¢…¾î–=G¢bJuçEö€ÚÙ¶‰ù9÷Ù‡Gëëî*«p•ª ‡ƒÃ=a‘èÀÞvÇãuµM¥áÀÑ—·u8ž©KßÄ-z›¦Í¹ÀaÑüÎÕõ»6NgDÎÇüéjDÚƒ5ݰ×ÖW‡º÷tD¶6Z=.1gËK¢ÁùܻǷ¥~>÷ÑPå=ÖÐÑC©ï˜÷Ð`¤bmØãö§ß>ÿPýH]݆²òÊR³ª…ƒÃ]»;{æœî˜‹+ëŠE´H(8ܵ{_¯7±öväªí>RŽ7ÒžÜÜÖlÞR¿Á±q³K‹‡^ÏÝ —g¼õ>õ¥¦ðæ:gÙÝ5fU ýîö®ŽþÙ³‡‚în~å½.« ´·í½šzûK9D<ÿÆó<†ˆ–ò{jËEÓ"áàpG÷Ë}SK„.Öó{†#® ó°w(*"2z̪±[C~/ë$-<1>ÒÚ(uõÕΊDÚߺ·óÈØÙêż3Ù#&-m·‹éúåÔÖÙç\†ôœÀÔ'Gùû,Êš5kfÿ<ð.rC¦.ݶ„Y0€Ë*×õô¦wÓ§w{ÙÀ²RÔðês•á½÷<ÔÇL pò«¾új½¹·îó{ùæ(@½ÀûŽaö‰wEQRÞX& ìÈtsp˜½,üås{YÀ–!fõ@Æ#ꀌGÔ ¨2Q/d<¢^ÈxD½ñˆz ãõ@Æ#ꀌGÔ ¨2Q/d<¢^ÈxD½ñˆz ãõ@Æ#ꀌGÔ ¨2Q/d<¢^ÈxD½ñˆz ãõ@Æ#ꀌGÔ ¨2Q/d<¢^ÈxD½ñ²®úOh0Ee–įtE×]×u=¦Çãq]×)2ÑÕõ&‚]£Ñ˜U nRåUÏVdµÉ¥èFÑ ŠbPtƒ®K2ïÕãºñädÜd0¼Ó£éǵxhbòÄÄä䤮ëñxœ"`ùËø¨W×u£Ñh0²VeeÝœ-öl¹EÕ?`Ò'uݤˆ.¢‹ˆÌD¶º(º¢Hò~E}U–(¿&[ ³•¸nÔ£"r2&¿‰éA-þ»Xì?NOj“Ìù°lejÔ›HxM&SÖŸ¬T>¶R¿QULŠˆèYŠè¢è¢™<×­)S‰°ˆ"‰Ù¾y&±˜”?XaŒéÆI‘_‰ÿ(¢ýÇ™Äl_Ê €eEY³fÍô‰3±´®ë3kÚ꺢(óî™~äå~ÇŠ’••eZe2¬5Ëí¹ú¤.¦d¼{Iéš®hqåGщEµHlbbâŠ||X(“¢^EQTU5Ù³eÝ5ñ©ŠQ”Ë»”®®ˆ(¢ÄEÞ8ÿA$öó÷&&&˜ä àŠËŒ!oÖÇs§Y¿&K1Äg¯¿{¹ÞÆÔ:ú‡³•5¦ìÉ<õÿ‹L{W{;Fà à Ê€Y½ê Uýĵú¹b2ˆ\ò…ήˆ¢Ååݸü8zæ‡ïÆb1Ê€+bùF½º®›L¦ìå蟼N®5*EY®gu-®DãñÿÖ~w&‹±†/€ËÌxíµ×λk:©œY&nÏ 1/]¦©(ÊŠ+ÔMÅaVrŒÊòNO£¢ç e9YyYÆ‘øää$ Àå´ì¢ÞÄdÞ•·™ _\-ù&Å3d{G_£¹Y¿ÐOÆãñ8Å Àå±ì¢Þ+V¬øïÝu­,ãÒQD$KQ>–cÊ7~1911A p,£¨WQ”×瘾t½nËVôL]ïVQ ЬÎRœfõ­Éø‰ÉĺÆpé,—¨×h4æ:Wþ‡E_aP®‚hTQEQnTMFƒ~|‚Å\RË"ê5™L+Ö_§ßyb4(WÓÞ]i5&“É Áɉ‰ EQ(p.…+õ꺞½âóÔKs£á*ÜÁ&ƒ^`2]cT~5999Ip)\ɨ7‘óª›> öŠáªñª¹Ád\¥ü|‚´À¥p%£Þ+V¨›,ò‘•rÕ/l (ºÕd¼!Kޱ’€%we¢^]×W¬Xaúyú¬|Ÿ¤žŠˆ|Àd¼1Kùi/€%ve¢^UU³«óôÛrý2}N]QD "ʬÿÉÌíË‘¼*¢çe™nRå§i/€%t¢Þ¬¬¬•ŸÊÓÿ8÷’漺"b}R— ‘,E‰NÊïb†E•ßM(¿Ó$3žœÔ#qåT\9“"“ºÄu1)"—0öU Ь2W(ò«‰xM)p‘.ßZ½&“)ûÕúuÆ¥Lz'u‰éÊ?ŽÇzOžþYdâØì<úb$¢í‰S±Ÿ’œÊ]±e‹.bXš·¯ˆèYb¼1Kþ]›œœ¤ ¸—)ê5 +*®ÿqîR-Ü +"±¸áõSÚ o½÷»S—4-œœ<óËSú¢Æ·'ô戲4ó’QäYÆðäd(Æ2.ÆeŠzW¬X¡<øÁ%ËycºœˆÅÿþ÷ïyߘ˜¸ »IQ”x<;~Fùá)ãGWJ¶AYšé½Jü¶•Æ}ïò| W«Ëõªªjºÿ²*ëâ׺Õ'â+ß}[ë=yæä™Ë?vrb2þãh–ªÈU²–d©1šôÿs:S\˜Kõ*вâcfù³k– çÕâÊ}r÷›ïýGô ®o«ëúDàtÖL(%+Eäâò^EDÏ1ÏèÁ3GFY³fÍô‰I²‰wöõÍ·çÝ#çõªªª>ñ!Ýd¸È¨W×âÊ»qí™1MӖɾËÎÎV¿`‰ß¨*¦‹]šB?Ÿ|æÍÓá÷(‘Ë€)¿lý].GI¡Ýf5›UU´H(ñôõ¾æ‹-x|n¡cý:gYQ¡Íj±$Ÿ‡‚Ã>û`¿w4vî/½„›Þ•µ`]SKƒÓ¦Šˆˆv´å/·¤®%¦¼WÍWy‘Íj1«¢EBÁaß@O¯ç«U¾ãov4UÚ͉Ÿ|íUç˜`±&¾Àáªt:JŠ ¬³YU5-Žøݽ½‡üã)JmQ…Ëå()´Ú,f5ñ„Dä9ØŸ²?Z¤c+q:޲âB›Õl6›UÑ´H8õ¹û{ø)º—£-ZŠ£{×Óý ¥çú¾¼m®Ç1tÈ|t7êš•+>oÍ^“Á2Wød­ÐÕ°¥Þ55˜žO ´7ï>4 宫Û\·¾Ä¢¦Ýbx¨»µùE_ô¬'oK·)àýxê+‹D½yŽGživÙRT.-4¸w[óÁ‘óŽBòJj·nÝXb™¹‡so,ÚÆmhlº×iKÓ»DýmÛ÷xÆf^¹¹a“ËnI»A-äílÞÖwe7¯¬º¡¾º"ÝK'û¶ímnþšx Û¢%; D½ï;t7™ê¦U¹÷~ ëš™;Î5êýƒÕ×|þÚ™iDD½Ë¶ný—ÿòñsSüæÌ¸ÿ_ÿ÷÷¸‚ —tëªm¥~ÛÊ‹]ºát\ùÍ™3{Ohš¶|r^QåÌ™3Ú‹¿—1™¼Ø.X/ÎQ¯1Q"¯SÁº­ßøZSÚœWDT›³©­Á1ݧ[Ë* gEÄRZ³£mCÁY_} 7¼/N}ŸþZKå"µu¦f}aWêœWDTkyîæ;óÎëÅs‹6ìzî™9'ÞÀ¢%¦jçK›‹Ä|f{eóÎÍESƒ“ÝUµXÎ+"ªµ¬¾më9”ÝÜb׆ÅÆdß¶³±,—CuÉÚ¢+t4!iÈôƃî&CO°ï°^S?'ç=WY+Wþ·k ìÁeOµ9Óä¼"’Wäü¿oËc/¸‚.áZ½ƒ!{ãåzÓEE½ïMê¡XìÅß/«ù¼³MNNþM3þIŽžc¸˜÷§%˨Lüâôå¿ÖuẒ»?õŸ¬3üû¿¿g\m1gNÈ ÅóÏÿ6."2þÓŸNÞþÉ?Ym-üwï¿ úþíçoŒ½§®¶^7½!uuáÊ¡oÍÌÖJi 7\õ§¾-O7¯¿eå‚Ö8ø¯=GÞ˜÷͈‚OyË'¬Ó8òühèˆyuªV¯´Ý¶zø;ÿúÛsšùf*X÷··ýÓÅ×-øÍؾyè§9È~Ë;ßûŽ?*"ñ±Ÿü<÷Ï?Q|1Ñýô'ƒ^ßÐ/ÞOš­«gú£•¶[&§ú£´b£?9n[ë¼Å,"¢…?ôþÛO|¿E×­žyu1ÛV}ÇM¾DmÑ…•¶[,ï…~{üxÊÿ½5yÝÌ !ò“W¾~h„cš¡èn2U–©æF³sÅÂ³Âøðxì·‹?WÉÚpÃÊÏMzß}ïÌ9ÜËÍš¯ûãMŸ MDOŒ¾|ó½,óµ+³’AÈÊë?p&ðË·øZ€+Õ]ºM«f5~‹j¸ˆ â¢+šëúýr›Ï;Ï™3gäé7[õ•ŠA.ð}*q‰ÿi®é;ïœ9ÃõÙ®ˆØh_s«­cG¥M=Ý{{½S !æ¯{¢cKÅÔœ [yYA×ȨˆˆŒv?ÕYö„#ØÓµoÎJ‹ù®/4•MMà±ØóÅw–€v 7\ŧ¾³ÄÑ4MU› _tWeñôïµ@çÃuÄD$·ú¾ê= IDAT¤¡ãéJ[²Z9jœyÞ³vþ×´5M}q Ñ»ø»k³~½y­E"wçó¯ùÆcɽ¡í¹úÒd‘R펲ܾƒÑäsvï/Úb÷íëì92UªŸé¬.ÔV{IζˆCôX{»» Nèìšé×DÄT´¹ó¹*ÛÔ ÍVd7ôrVz‰Ú¢¥: 1_×6_úFjÃsûJ¦~{zø–†¢»ÉPsçÑå¼N ?¸²<‹½¸ümEž™Ðøç&VkúðùË?¿1;‘²¬.úÃúü» Àq©¾ ¢(JÖŸç^d>«Ät½ó÷Ëç:l‹8}útü+cÊï'.j+YŠÉ‘»œCí«]ôõ=M{z_ÝvÝöžÙgbc‡úÃ3³Ìú&Ýhß—>ÿðžùWÔ;ìšSnÏ¥/ᦀ«‘©¨®mËL¶înyyxñ³&G™uú‡ˆçåýS¡XÔ·¯Û7]—Ôb§ã¬ß³+¨ÞÑñ‰OÜñ3{WÊ¥úËaVVVüO͵tÃé¸þÝ·Oʈý¨(ÊéÓ§sÿ÷;ò©ëÄ|¡{UýÏͦ£‘ŒH·¯Rc‡öv¥¸{Î!9—ã3gvOhdø"&Ö\Ȧ ª_øF]Dóµ×pí\-bþ}mýem•6uꉑÊç{BnañLr¦¼C³rñ!O@JŠ“µ¬°´Øtгh,2Ú»{ÿ_ÛhWEƒ{·µôÊw^ð$+“ãñý-N³Høµ‡7îö‘ǼJïÈÁ½#éz—é©¡‘³Ç9sº„ äb Yu)±€/@ѽTmÑ…4 ž£zít‹§ õöœË³òîzº»¡T vßwß‹£TÕå`I»\>“Ú·ÂjÃŒY"áè{ÒÞÌÉ9çë°?•¯&¦’Lœ>óo’]¾‚º\}ðƼìéÞ …f§oý&-º69å÷Z«5GÞ:Å»(YæÕ7ÞxÃjËu¹+²MF™Œ½wêÝ·ßúÍÈc§&Ø;ïêòE©Ö­?ùózƒg_ã&뺛KJnµd‹ÈÉŸÿÀ\<ÍÉÊY}ã-7Zó®ËYi2NÆÎœ~÷÷¿ycä7¿?Ϭºs‰¶k*^©ä”É }~\WF5íX†ý ûôO£+ËsõB£b¼™¹Š.ºÙhúpöÿæö.+ùE³®£ýÁ³•ÿ¢š ¥ÓçîÃ}½þ ¯J²©Âu.{âTÏí!çÅU$ê{v[§mG™gwKŸ?*’¿ø7ZmöY«o‡ƒcs¦G†ƒc)Nf,æ›U<‹§±‘®íí¶'\Á®Ö®×ÇELª\è¹w®£2±*Kh Ÿœ÷}ÍVT8“óýÿìÝ|už?ðw&™IÓLI“–6@¤­í íŠíeÅ*Zô9 ~©îCð{€{€»€wâž §¸·Âž‚ ø=…¯R¿*,RÁ"RÐÖj ÚL $ý‘ÐvÒ43IæûGÒ4ýEC)âëùà¡M:™&󙟯|æý±ÕTÙúZu2çNOk ïØwÑœþî dÐr¨à«îµÚ l+ô,qÆÜ¬ÀÊd+ú`_H‡ÿø{î÷u®,܃œ7l à᮫ºKŽwÕÚ;%çÛ6O)B½ÔÙ^ºÁ[T/ºãÔX˜á+2*²ãAk}ç}­ÝÞJÔ^Ý!R¯'BÔ{"†ý|Âm±Áߘ(YM”Aej¼Pzü»F¤½?*Ûï×2|ÂØŒÔ8MhSsú”±cGÔA«œZk>Ú04þÌÉSfa¥½ªkÓ*æî¨«]LöÊÒv›Û=È6^Çã~Ϧü­‘ú[±—¤¸?JõC«ÇãÁ&.Øô¹y·D %…E]¯Äô©Ùñ,qÏ“Ó323R ¾ˆ–Cë×|p—O1«Ôé9&""á’^¸éÔ<õxAàh|ùMWoºmJ°vNÑ$‡ÍFÔQÛ@ÔçæeÝÿܯöþx¿+'ês¦ûʳšV I´wæO5ÙN–tMOõé9éz"ŽãùÄÄ´”ÌÌ,“+ Ö¬=|»x6>=;Õ@Çq|bJjZfVºÑ?/¡|ó B¹Ù«nÿöEÛ ½œ©äOOé(Þpðƒ¢æ”˜“›Æ‘XZ¸Ä•:ÜÀõ&k¾ \‡Øs'""_ç/ÝPw©õo"ýƒ%¾"µÚŽÅåpu¾fou¸ÜˆE­äP{ïj´Õ›ë±Ã5$9[—HŒVgвD¤Ô O^ÕhƘ…?‘<&¿QIΖàÎÛâ¼löÊDûYFªQ« õEÄ%%´ç¼’³Åá"MT”ZIDltJjB]ñ Zå®MÔË©d§èwâÝæ•·7ÒÑÉÚš\ÚýÍò=:…º_{½$àTÖS¨7\.ÅïX¾rzÇ-‘æÝ[>ïÖç&eÚ²U¹]n)m•'îܲùpÍ]¸]ý¬Øô铌DD¶âýŸ÷Ö=HŸž÷ØÜÜÌ4“çH°Ùlæªâ¢ÂÂ}Ç:ÊBêÓg-œ››‘j2ò$ 6siQÁÛÛ ;—dã3g?6+'Ý7Q°™+K‹ vn/ªAGE¸>ÛçeËiƒ®ŽE±Ë}"Bp)Ž×²D×g½ îF×ÛÖlâÝóæÍÊÎ0 < 6›Íf./>T¸çPi{¡O6>{ö‚Y¹é)FO¢ÍRYúùÎíÛuÙö´É÷Ï›7-3Íd4ðœ(Ø,æò’ý;·ï©À·@7^üÝ+—åv÷bùŽí'¥nûó¹+ŸÍâºÊ?ÿ`çæ‚"ë­°|öÂg—¤uyR°”lßòA©«îµÜ d+ô|P¿gnvÇ™Jùîo& º¨·ÜúnPÒ&æÌ]—æŸÄRybÿÎí]Š“>}Ú¼¹Ó³’Mlj‚ÅRY^\¸ãíýUì à§M93Ní?H®w=D ‹›;Ø:2(5rwëå Ž0Ôj¢Þ«ân¬(ùÊâmj TkPÅÿ|Ò¸X–ˆÔj¢®¹Ÿ~÷¸8%µœ9zÜËE¦Ü™=ÊwœvüøÅ±ï}Wœ)sòèh"’,%GÊê½DDLDLBò-Ãc¢"Õ,I®¶ûóæú.7î«øaIÉ qº(N­$ÉÙÚÔP[]YÛtÙ^Š Ëø¬[£•D$5Tœøº¶•ˆ‰jºÕ4\¡fIr‰¢Óa«¿pñB}“èEÛwZzëË-=öN”ZC\:\̘ÛÇ&F±D$µ´¸£¢BèØÛV[Z¦›0V×T]q¦Ö.z‰ˆöó;o‹e‰”Q1:•¹mÐôF½6Qï$m¿{ôÊ "Áã:ë¼k¢ëH‹fïPõ¯T±‚Qpwñâ.YFIþŽM»þÙ܎˧ʂõo‡VQ°YìLFmMÍU^Æ\٬جiÙ""Û‰='z~«Úì§ÿ¼zjG SÞ`ä FSF2W~ìµ ""6yÖºõ‹3 1˜1%;oeffúÚ/ó_jÓox>¯c|hâxcJ†‘7ïß^„Û@!tºåµ[íNÑïu¼;6Ю¼ð`/Ýèg½ºqqßeMÉ0Z‹W챑6}Á†çó;¶>Î`JËydufVÁsËÿRÚ¾ŸHÌ}~ÝÊŽü‡8Þ`J›d”Š·ïAgâM›¾ìÅ•“;Y¡dó˄֫R°Ô¢Vo4°VëU~9!Ú,AäŒF}©ÝŽU÷¹ÂVèQr^~f`™ '>( m]êû >”ôÙO¿òìÔÀuÄLSdLÊܸü™ÚO˜ºžTÇMFƒphËþ*ì à'mdL侓eÏg–¶ Dý¿9n@~ÒCç,Oð$J,¯«äƒ3 ùz½»ì-=LnolòÄ”D‘1z•ù¢›ˆ8ƒ.ð}¬VÍ‘ ‘Jåk°¦:»—ˆH¥KùùÏGE*°j­Áx«!fèÙ¯OU6µÇ‹ñcïgì YMTlbjllÌ7'K­½õøŒ6öv_ÎëiùñëÒÚV"Š4ýÿú"¾ è„i/à º® ^®Ûå&†ˆœu%ž['ßR wãwÇŽ0^oàïˆöFÅF‘’˜A»«˜9ªTôZê÷’,6 êòn·Ûý®M9?†´ýÙ¹Ë ¢ -ó¡5n46qÖšçv\âØNløÃ–Н¬ycZ¦1-3göcå»Ö>·éäUôCº¢Yi³sý…‹z+¤¨Ï™å¯ h+ùøƒ¢2&¦&g¤§‰{Ú»¥.\å¿$³•ïÞQPj3dæÍËMã9ÓÔeKŠJ×9ˆ´™Ëßžó –’Ò Ó“ÓR„"Ô…°‰P(hÄ«n÷¿r|—‰¯Žnt{õǤçÍòíxDsQÁîRAŸhJIÍÌ0”ø:Þ±™K~ïË,Å; ËEã¤üÇrLŸ’÷ôÂcó_+•ˆ(qîÓËýa™h«,)© ñ))i|y¯Ý÷àzѦ.xqõŒŽt̲掠¡~CƛҳLéYSóç•lynÕΊ«ø2‘3¤dLJɘ4}Þ¼¢«Öî¹ü7™Xu¯+k…ÏV2çæv±ÚQÒJ¸Hèõ ¾”ô¹O?íËyEóç»vªâRrçæe9>}áʼâE;kˆˆí8© ÑR~¢ÂÊMÉ)\QoßHüTps¢;•n€Áp­ü ‡«}¤»á‡%µÄ¨Ôj­.Æ UI—~,;ÓØSâ$6Ô·’!ŠH©‹Õ1½ÄèbtDä‘$%ËRTŒŽ©­÷£‹Óùšª¥Þî&"F?z¬?çu6œ­ªmòjŒ£’ŒQ,=jlJý±ï›¼D‘0ög¾œWj¹P}¶ÎÉêMI# jÒÄ¥¦³÷˜ÑªôcnOõàvZʾò͈t &_ÎëqXªÍv¯*2J§‹‰ÑØÍVì º-BÖ_S3¦ß=\+­ú³½÷¥å*KÊÜqî f»È%\AJ”óÕþU£¥e0˜ø¨—MTËF!÷çIYA ÑÛV6è«—‹5mš&·Ì+ûѱW!“GEª8ÖsQï Ä&N[óÊ’¬@[ÉÆß>×[?™â—çÜó2«ÕM)iwææMÏñÇ |ÚìÕ«­O<âeüUÎJŸ›å/¤¸»·¾O<Ïû[Åî‚öN7¬VKÿEã,ÿE£íÐk+ÿTä ¢ÃÅ6þÝUÙ<²§gk‹ö;ôÙsýýÑÄ’O>Õþ–X½žCŠa³+vtŠzy¢àµ³SñCA¯OäšÛg)m–çÛ‹wš´—cÕjµ‘6gÖ=¾­Ï\°æ¹M.ôÛ—epdœtÆÆÒb‰Ró¦ùkŒ[ Ÿ[ør±?ÉÑêµ"î—¾±G—Ôü×=Òñ-¢åó—:î–èB:üÛ©‡‰ˆXVËMiéÙ¹³ò&ù3bCÆ‚u«lóŸÙÚN×þÁÒ)ø.£)9='/ojºoäBΘ½|ý2ë¼Àz‚U÷¹ÚVèñÀŸ›ŸTdOAhßI³YÓ2}ßé~Þ[âÚWƒR|nžïÛe±rûþ°£†ˆ*¥7·æ§—rÿô䛪ˆÍj?©+ –?¹ÉÿöX½ž³#é…Ÿ4å?ÕqDDäv¹ÞµáŽíÁÁÕT¢A¥ìì*ƒ‡ÔsΊ”ᆉ>jTà8çq6˜+¾«lì-ák³58(JKÄêb"©Q ]ŒNIäiª½ÀŒ­ŒŠ‰¢ú&ŠŠÑùú‰¶ÔÛD"R ½%Þ×éÓñcÉוQ½ÝËMJ5(IcLÐ}ßd'âM¦h%‘ÔPñÕwV‘ˆê[˜;³5ÄÆ&¹‹æà÷å½L¤éçé‰Z%I¶3_}Wßþ{•ڟĹ[,jÛŸfTŒ»‚nTí¥z•¬Zéÿ¿Ö0|´!&æÛ__ì½|n[ý9sûjÔϵO—r«Ñ—ÉÛ̵ Úp~Ž?‹ þRxdù`Ë ­;·ÛM_¶2®~n§J…Bu«Ûô ¼Oœ¶æ•åA9ï‰ ¿}¦ „ž6’Ã^SQ\øÖÚ%ØméH”Òòf¥^é{è׬ô÷äfø )ö~O¤¥²Æ?‹Ù·ŸäL©&"6%Ó?þ‹P¼ûãŽèY²Û‘"A¸¬¶ ‘ØøøÎ½xY½!¨*¶`».C±éÓï飑TYå?+1LzvÛ¶OOg‰þp…MËôaBM¥hôo¢œ¥Æ·£0$'ˆ(>=Íû{åÁAÉ‘Ãî@¸r#.©ù¯¬ë¸[D´\»â¹ý}¯|’ä°×TíÙòÜ“kv¬Ö|Ö¬ÜÄ~]¬U¥Ç>xí©¥K;ÎY 9s'i±ê^·ÝSZ¡G©só2‚FŽÝ½;´/–µÙ¹¾¤·÷{€újPÒ¦§û{ÛªÌäoÐDª4ûVQcrŠ–ˆRÒÛO*Ê÷ì舡q¾?uà šÉþ{·åómÞ<›Ùþ/.è ]ÁeòìϵÊ(,²ðÐêhíÈ*Ôjuç¬7R«îèJçnmEÿ̧ÔÄŽºýÎ;Ç&ð½$YB£Í—°kt†¢È˜h5µ6Zê[œD¤‰ÖGEè ¾´Åikh%"ÒÅú;ùJ-MÞ?•³Å—"ª#£"ˆ("P ¢­¥ñOÄI‚Ã×CO«ë²™z(ê2FG³DäqÔ”–š[;â!G“ÿ ¨6fÜygzÊ0ÇyÝz{ 6ZlN—³åRC]]]ƒ­%00›:vtjü5,Â1llúH-‘dû¾¢vp8À½z†QÜÂÉ ¢~•™•erµ(ƒ¾B‘B¡O¶ªfé™þ-V¡£VU \ï ¹ïœóŠ–CëŸZ{è c ©¼¸\˜Þ>®6M‰Zêçm¶W0«øÜÜôöBн_ëI'7o<”º2ÇÈq†´© VO}ÌR²{Óú-EV‰ˆ5´ÿ-.cñ›Û»½œãx"ÎhðOd3c6W–J‹HíwÉŒ7ƒ)(û-U–ë±wéèFWx™—­»þ²#ûÅü4žˆxSfÞò̼…•‡¶ÿiCA…#xëã³WnÎx"«±};¾N BiÿÔüuÁ9oåÇÏ=óÚ•–÷q”×Ð=¯)Œ)&–ú»¶Ÿ(¶PzJûšcL5QaVÝë,ôVè‰6;/¨xƒ­hçÁÐN5B¹¨¯%ƒÁàß¿s×lÍíát#'‚¥·ý®šÇòŒP1R§©ëy:ƒ6bŽ–H–þZÝz‹-´4· ñ?2tUíÚ†è#;´6·bq wí©¿×1*."JŸ”:ÒÀ²Zcj†ä8vÚÞC2ÚÔh—,QTŒNeauQDäjijmr¶x5ÊH½NUËøÊe¯o%"Rqœÿ›Ö8.h°€Ày§"ÿHpDD5*룺mÕŒŠ¡àB¦Ú[RÛKÿ¶Õu·­­¶â‡ø;nf‰ˆÕƺ-nÔè– •ßž©Ühó.ÄÆÊSŸWŸaÄŒ¹ãöD-±z£ž±Z¯EB?öŽÛâÔDäiù±ÔWayPevvJ¥’â8êw>ùùÍХ׿>Š¢ò›V¹©µLò-j†a°Y_ÿ+ñ.9¯y÷š'¯8ç%"âõ†ÎBõÿKÝg•<Í_H±|ÿåß²õÐ ó®Ýñy¥¸¶ÌÈ[½ñÙ»õþ‡}-%¬(0(8JKÍç)™iA«®6#3¥ã‘¹´ü:|eÜîäåþžT±eéã+6–XÚ·v>%gÉ+¯.H yãC7’°;º¤æ¯[·0½=çÊßýíŠ×úSÆÝ¨°¦6ÆBšVÝk)ÔVèI|îÜIßYUîÛb±|ý¤îê»Aûì€Ìao7»¥¾£,ÃXcdðÎu¤±cÇ誷àû­äu‹­vë÷e•þ››4qÃ{þ‚Äkohò)µº(_UO‹­Åëm²·‘R«ŠÒEùê04Õµ·Ròrù‰º•ifÙÀÙvÔ¸]§—{…sÅÇNTÔØœí]TÙ¨á©YwÜÂ#êûd±ñ\­T>%§¾Ýz#âÓýÃïyZ~üúä÷öÁ—Rp¯^…Jád˜þ…êN»H¸™Ö@Ï skE\ñƪI–I5ŒóÔ:±!_Ï+ñÎ9¯PY°ê©M¥½vÑgÿKr÷ÁÒÇç,ÎÏÚéXÌêÚÔi ós’ d«<´só_'Ãþͪ‹@!Å’Ý}]#ÕÞòÜáíúôÜ…ÿºpj OD†ìü©ñ‡wXm‘‘ˆ„ƒÏÌ^ÛóU=k³ D<LF–ªÐ±Â’õóÕ Sü‘®!û±‰%5±©óò3;¶+sqQÇ·#ñ™ Ìʈçkéî-Û‹¬¶vkÝèŠv÷ÝiÏ^ºûå§voJÌž»xI^–‘#âRfÌÊÚþ‰ÀÖg)XúÈ_z™“`ñO9£ÑHTƒ•áÆ]’;å¼¶’Í¿}fGï;ÎÄûL‹öUt+eÊ&N[<Õô„¹Ü,]vÕM¶8Ý^Xx¢ªÛ¼´©sæ…Œ¢¹ÊŒU÷Úè_+ô¹/bSóg¥vdbñîP÷ í ¾´ÈVcó×C/ßœÿë½|Ç,þfç‰z*EðƒÜùêZWr²¿{çÐÔŒß;ï!"â’Æ' Læ²TŸÇÂxnÉëñ¥ª*U—N´I[(6šH£gÔDÔÖÒä&r7µ8)Z£ÑêtŒšˆÈÓTçïìÛ$_w&Ç_û¾—PÊÕê"Ò‘§á›Ã_‡Ò“Ôe;{N4Ž6jˆ´#ÇþCýñÓ"C±©öô©Úï#‡šn§Q)£n©?÷]#º/ŒÍ;àÕ™Èaíýy%Û_—žk”½Q8êeÔý{¡¬ ò’»ù¦ê­îúÁáñ’‚éÇàl¤R(G© Qïu¼O¼Up}^E.}á‹î1?*|yíîÞ”™¿0?¹`®¬¨2[l6«Í¡5ÄÓÒ3R:uÄ­,Üãï5ÃÞ±|Í2ÿU]Zzo{dí1QfÕõý§ç¶¥½çóËÞ¿Éêã9»ÕAD$ÙK÷¼ô¤{õ=<ññ"kei…0ÛÈñYÓsô';øÃjµäpH$UV˜)'ˆøôY3‹:†eKÏ0VW „‡šÂ‚sWúR*âÒ–üùÍÌ¢R —˜•Ñqo–XR°'v$æÿ~õ#¾ð$--#‘þjËeMA¥´÷T]vJm|¼hõÅ:Žš¢·~[éxcÇ‚"â zޤ’âr1'‹#2fOÏ|»¢ÓNí›(Yª*m”b ¢”és3?îÛ*9;U,:‰è÷z]’ó×½Ú‘ó‰"Ÿý›W³{šÖüÁs/¶RsNÏ_(ÚÌ•••U5Áæpðúx£)µë!¡¤ãŽžW]VŸ9uÁ¤Ù D[eyyMÅ"ؤÕL)©é¦àúÕ¶¢ÞŽXu¯zèO+ô½/ÒfϽ§cGfû¼ 0Ä5qZNQ÷]¾A}7Nd¥QJn^jÁ¦NãÁ±Z­äpQei8ÃÈqiÓòR ·´O¥O½Ód;VjÅ.~š¼…æ¦Âž¥œ9’¿³ý"ý|cóŸ.¡¢_x9ÿí÷ÍÉcý¡îÈyhÈçíb¤Ñ4Rß‘…4W—!é½ÚÄ:TÙTß$zƒB¸„Q]Î^2>±Áî­%Òèõ IMö6"¢{‹'Q£Ô êË [ÁkSC“gx¬’H— ¯îÈ2*¹Ý^¢6[““¢5DJ}ÂðkçÒ­*ãîRi×YSúue5FêîHÔi6ºþøwn""ÇyEß'ó¶ÖŸ+mñfþbt4±§"B‡ 1ñZgccP•l.&9Á_ÙéhñÝ=¤âã†ëU­Vs­=äû‰˜È¡¦„®­Ñ\[ßæõ¯béw¤Æª‰ÈY÷íWe[kùäîÕ{ ÛÏ’ bª]çfZ'=â¨Cž2„TW¾PT ÆÄɲ|T.$LÓò'uº‡’3˜R =Ok(º2ãxSZ¦)­× åo¿´«ýú̘ž4O>-ÝDÇ*ú7«.’Ó|e…._H‘ˆÈ˜»zó\®¼´´¼¢Òj#>57Ã?bН0¢T´swev~ G|öÊÍÿ•uðX¹Uäôñ&Sjz†©býœµEY–,HËàˆøŒ%~'»´ÂFZcrZšÑ²ùqD½6ìû7lÉݼ,£½D¨)+×Ôål°üíM»­©\jJG’Æ¥$§õ¿jg¡w£c3¾ñl†¥äDiiUMàLÙ÷ûß³Å\ã ¢C;>–5ÕHdÌ]óFüÁCÅUv‘ÓSÒ³ÒùÏŸzôµ "©¤°È2uºÑ·ÉoO.)¯9ƒ1%5…+z.ï$Jl_GéyyéÆäŒ)iÆ^&>Ìu: ¥e™Ò²z›±­xã†=öÐV]Î’1)%£×7i9´qS‘«îµu%­Ð÷¾(qÆÜ¬ŽË|hÇÉ—Mêôì""¡¤ðò÷õÙ ÖÂEy«² Ä™f¿ò¦©°¨¸ÆFœ!199#=Cü`þ¢V"ljÝE¶Ì—’¿akzI…Uäõ¦ä4“X¸Q/ ƳËSÇ*FNMõ‡½ª!Æä!]ëÍU_žlÀ‚Žd) IDATºJLT¸Û2<.GSK‹(zI¡Õé¢ü#áyZjk{½#¼µÞæ¥Õ&:šˆ<-6_™oSS+ÅEùž%rØa­»þÜg¬/ýù­ÕRßÔæeT‘Q:]ŒžµœôõôÌçlÃS ,) ©&è/Xì­nF¥‹Ñ9+ºöôõz=^"²_ö£!k¤–H3üg?k8^j‰t£ïL×9íö¦&‡Ó£ÔÄ¢Kg+rÞÎÔCo½=qœÇåhq8E·W¥‰ÒEi«¹‰ˆˆÑ¾}Üp5 ×Ñç§jC {ù¤ŒŒQZ"J40EÇϵRD ç%ò0ÚQ‚K2{æ’ÒA38Û@F½ ÃÈ l?dsy=Um7ßjémp3¢—TÊ+_"D±*•Ju“Åß?5‚ùà–µë÷tܦk« &ŠÄöÇû3«N´YÓÛ )†P©ãMÙ¦ŒNÊDsáÛû|}UÛ×¼–¸~Ù$#G†´œÙi9Ao£=˜¶ïÙ°){ò,ñÆŒl#Z“uÏs«âW¯ÊÏè雡²`íªA%«ÅBHƒ-VËK!w£ DBYSS:g|‰;K‰ˆ¤Ò /l4>¿$Ã@œ1cj~prØ¥H¥[^Ú•¾n¶‰óÍmR{ibëDØ áôT(ß½aý¦Ã5}¯º}®Á¢­´`ýÚ-Åv¬º×Ε·B_û"6=?¯# K>(¨ í­°é¹“|ÕžJ÷„0†Ûe”ì‡^Z›úâêÙih^û÷%g4·ŽU“Rc>Ê0<è¯~j«-ûŽ¿cl¢VIl”qdTðpï·c{›*¿û16k¤–H—ú³aM__l#"¥&:N7¼ÓùBCÕ¹&4z/+BtçÁ㬫(9çoDŽSµO¡ uœ6Pç—Óª‰Z™¨˜Ž®ùJµVÛµfA„j-°!C†ty*Ð4¸?©ïç.=L»$˜Ï–Ÿ8ðÞÆu/ný´ºÙÛ÷ªë­9²¯¨ê‚ z¼DÄ)9ò­T¢ÐTo>SR´{ûë/mxçXMVÝk¸/êW+\~_¤¿oÙ¿Ý7¢½#pdã+Ÿ„Öᙿ`ù?ÒÙnú¯£¼WÙ $Y‹–4k ZFÇi”¾ýkeÙ‘÷þgOiûÙ@[ÍÑÂSN§7ðíÓXΜøøwm—uE‡ ÇÝÛ1À’·Ü.]íuc¢¹Äö×µ8]_¢¹Ã‘ÔTSQiq1jµR­æ"·£¹©®ú›/?;úãQ¯ètÊ R0ŒRÉ*"ärµ^ª7ÿMyµÝu¹†²ÄèLñZ†ˆHj8[UïôMíVLq‘¾§ë«~hÚ÷±Ér¾ÎA,˱*¥JÉGr¹Z.Õל57´Jþ)=­ ç/6I «æX£dòH.gSÃÅsç,M.Qdü-Ãx%IMµ5"‘ì²7«âGDsDÊH}”h¹hwÇq*¥ŠQ1 ‘Gr:ìõçN—ýP׆Š-]7¶V§G¥R2Je YZ/Õ›¿ÿöÛêÀ²ËÅê‡FE«î‡Óµ‚»[ì9â–¡DDm?^hjÿ"FtRt\´F!ÙªOŸke…Öx‹QÛûP[Ò¥ÚÛ`Ùº#FŒèX»e™ÚÜàÒ¾Ÿ» dÔËD(ú=Ì›Â{s–$‘e™.¸½ôW–Aÿ˜ Y–d™ ‡^½Ð·í4ê%Rõ+š”d¯ûæŒz …ç¢Èxe…BA^¹£Æ±R!+ˆÜ²Bô’SV¸¼r«—Ze…ÃC¯ì’NYnñ¸«Q¨ú6°Q¯BVÈŠ~¦u˲j¡^mzÞâǦg¦™ œ(X*‹ 6nú ÂømêôÅ ò2ÓL,æ’C[6¼UlïyFñ™sΛ–™bä9Ñf®(Ú±ic¡olimzþÓ‹óÒM< –ŠÂ k·”毿ÝÖ•æÍ ½³&Ô¥rZT¾wIÁ)ä6¯¢M¦6™Úd¹M&ß`ŒÔñßî?tø GÊ!C†ty*/猾Ÿ»$]F UË·Gv ËzJéòÐi—t¡ïr½lúâMëæ¡Ó8mŒ#R²îË¿Øó­ˆ(~úº?-Ï6é”NK½“7Ž5ö®‰Ú¯þv²¡[ެÍþýëÿ‘7v(Ï9-A3Ô8bô¤œ°úô{›¹ìO+s4§6=óŸÇ ÷<<ýcÕߎÖHDDúœßþñÓÙ¿þö墿?œJ¥bl$[=Ôè¥&™2¹ˆo^:OdÞõÔìG~9gÞk%"q¦éÝ£í6£øÜü#U,Íû壳ç<³ÏBÄgÍ{,¥´ìtÙŠwVTìß]b#CzvKD¤¿{Ù’l¾òí×vÔ\ÇBÎ }Ш×#Ëžþ¼P¡$…;” M©&ŽˆlÅ…'D$Uì(¬$">#;ƒ%2Ý™j "sQa…DDÖC‡ÊE".-3í269ÍDDTybO…DDŽâ‚Cf"2¤ç¤°¼Á@$ ‚DD‚M âõ"Òf/Y<‰¯,X_Pu…Ÿî*²Z_m_€ËȨ×ëöR¿¢IÙã/\ÛQ‰ˆ8žkoE‰ˆˆOL4k2‰ˆìf‹ÿwV›HD¼Édè6#ßÿ8Ž3?/]Ïjï^˜—JDDœ'Žç9"ýy0‘$ §ç»ÌGª*©‰ÈtÏÜiÉZVŸßø¶#q®Ñ¼{ÞäåËrM–Í󘽦”Ÿ´àÙ…©}ý¡«Ìjõ@(T8/Ùãí_Ô+3D±Œ,Ë}w€­)xj©%//7=ží¥…æìukr‰›DA‰8Žã9"‰ˆXÁ.t›Tñ—K*òór’ œÃR\¸[˜µñé,m6HÚ¿ö—‡6&š d3×i¿Ù¶ÜhÞõÔæÊÔu)™×HvKQ¹˜3)ãÎdª¸lé^…B^½p­ dÔëõxÉå%îÊ{ ËD±*†aBI6¥š¢¯íô=ˆÏÌ@D–ª*;If³…²M¤7‰ªˆˆ7ðD$X*m=ÍÈQuxËK‡ýR³Œ#"sM¥¿¯d¯©²±éËVN7Zv¯Ø\*ær‘( DD¢$úKù^Ã\U¿iD½Š­ÕÛ蕇ô7;ŽP*•}—ëM]ðú{íÛ»uq*KDú;NO!"ˉÃåDTu¬ØBD¦ìÜT–ˆsrÓˆH(9T*±©÷/Xð/ ÜŸÌ›¹ì¿ßßwà“×g%Åß?/ÛHD•‡ k‚ÿ›ºð7Ó–Ýë7•JD‚M‰x½ˆ8ƒž#² ¶¾–/Ã`%€km@ 8È25Jr «¸Â®¨ ™d½R˺-îËOYYT.ä¥L³_Ù5É&ŒŽÈrhÓöR‰ˆ¨bÇöâÜ•™Á¿Ëwn)’ˆˆO›–ÿHQ©eÇþ*I*/ªg¤pi‹ßÜ5ËF¾IÍ»7'½lê‚§g˜,ûžÙ웽£¸¨\ÌÊÈy,¿¦8qZGæ‡kúøh¡ä×},R€¾(‡ Òå©@mÙà"³¾Ÿ»”íþP}K„llz¯¤D­‚ˆ©w»ÌÎËW¶õ6?ÇšGCuJ§åì‰Ý/­ùÓñÿ¯ÛªŽ[†&šFG8§åÌÁ·×þÇûU‘&퇳†YïØÿ½DÒ…âb³î–QC‡úft¦hûú¶–::þ›ú¿×<9És`íª]çüEÚ¾/9˧dNº/wâ±ò঵ÿ}²Ù{™w+Ë2ÇqWS«W’$¤½Ð'ň#|©¢/š $Í÷s—g¨[Ô+Ë2‡ŽæÆô#ê•RT´9Þ²ÜLÉ&Ã0¦ß/—eÙáp\MR ?YIV¡PxÍ’ìégVëWÞd±¦,˧ß/÷x<Èy ªû’›s˲Zz¹^¯ÓCjÆ]êöÙe¯÷fZ¸²,·µµ˲J¥òJëözo®¥×ÎG½‡Î‹”A½G½²‚^¢6WIî2‡ûëVïçͽ”%I’$‰ˆT*•J¥ 1ó½šÁð“2ÀQ¯×ë¥*%Etÿ•¬ òȲËKŒÂ]"H_;¼Um?µÅív»Ýn7…ùúŠ? €„B5às”ω ÑK¬¿ °¬ …[öŠ^Y&÷W-ž’Vï.,w_æ«P(|…Tª® áõz‘ó@ˆ>ê•κXŽ!"…[&·ì½î¯©ÄAµ"w²,û2_Q}/Ã0¾„Õ tõz½^*uÈ#Õbq‹»Ì!_”°”ûÈ|}ý|U*Æd€Ð)FŒx Ë2ùz•ʲ( àû¹Ë3){À!à¸^˜k2Wä¼×ƒE0Ø!êôõ zˆz=D½ƒ¢^€AQ/À ‡¨`ÐCÔ 0è!êôõ zˆz=D½ƒžJ–åÀßÏ …Ë`A¯^€A¯‡¨Wn‡¥0(\®W/_€A¡#êí-ÕEÚ;(ƒ Ëa¼ªT(—€Ã( A¡ß-Š¥€ó"_Øéâ0 8ŒB8F•QQQ]_Ó>,[à‡@ÚÛeÄ6 àTCS’GÄGk¤æ¦6/–@¸í‡5qI)&c¬Né° n,F W€ÓßrkÒ°ØhÖu©EDœA¸aøa)I‰ÆÞ#\r¢EqF! £Wí£{o˜Šàµ,±Ú¨Dïaxº¤Ñj"F©e±4p4(\ &"J£$b8žWcià¼ÂÇóC¤Œ¢Qaià0 8ŒB8Fý½zƒcÜî½zû|n$Iòp*¯³ÁÚ€ïQÂWr+Õj…»¹¾®IÄ7ã8Œ®€,‰¤ŽPz„«½Íƒåó"7n—[Á‘Ëf­$ô Ãap…08Œªzì«xR–å.yn÷gàá¢FTκóM …‚Qø’w]ÂÃÇ™â´nûÅ:·‚aRv8ŒB£Ð†E+š/^leÄC„Åy„6j؈¡bÃùF¡`ˆ†!BxÃ(à0 apí»Vo÷ÿvŸn€ˆ¡ Ãt\$˪tC´,«Ö*Í" @˜\£Œ¦X-¡V±šè¨§áÜMöV|“ €Ã( A¡o|ÜÈø(N­Q±jÝH–Ð(„FA‚Áy„6zD‚!’Õp,ËGójV­eEû%”vÅap…08Œ¢žÎ åºtÉeP9mõ¶¥:šu7ÛøŠ lÈ­ö&g„Öko¨wËl\$ã´ãd ‡Q@ƒBhZ/]jÕFQ‹­Þ!©Ø(•Ëvɉ¥‚ó"’`ov±jÑ^ß P¨c#¼‚ Ãìá0 8ŒBxFU¾ž¹rmÐ`"c‡ÇñÔlµ´¸Ú\¢ªU%js‰^©£)„nÈ0£•l«èE•ÛåÝ­¢¨"§ ç¿8Œ.KÅÇ ‹ð4ÕYm.Gm¢(9].µ[t¡ (΋àÆSDè‡Åé”m m¢Ó%’Ëå–˜6—H§ˆÅap…ð8Œú{õ†ø¢Pï ÇFãu"í0Ò*uQiãI¡‹Ri¼BKm ¶^€ŠnˆREÈÊV^§eˆ•Už!: ‘ÖØÖ\Ý€,8Œz£‰6tG¤a!B¥¤H™iåuQ ënj¹ˆI8/‚ŠÑÅõQ E±Ä¹‡ ‰$2Êj¥Î·Õ¶6»„8Œ£pã£Lðôð î6§HD$:›[Ú$"¯ÔÚ,´yˆÈÛÖêBËÜh.G›‡ˆT¾â¼,ËÞzë­ Ã‘Õj­««ëaZY&$¼á‡ñuàeYÖ—óÇq=×p@Î –:p¸ŒŽ’|ÂŒŠˆdYv¹\‚ ¨T*Y–›››{žV–}©°L$Ë2Êõ„ ÑÇóã?VUUUVV ‚@í]}yeê¹?/_€Anô‚¿îÝýÊCqý{uÜC/ÿmï_&uÿvÂÊ·ÿßÖÅc±„®•ÿ*Õ­·ÞªT*‰Èb±444øBÞŽr½Ôó°lèÞ ƒí$vÑ–WgÆû~mµÕeŸl{óã2û ~WÑãgLaï:^‡€+>™›÷ø£SÆIГh·×VŸÚõæëGkÃâ­‰»µ¶Æ*ø±£îzt´õ}g$4Àµ ""…BÁqœ/ç%"µZÝó´¾~¾þïÀ fÿæÃN‰úĤñwM^¸ZOO<óñ YGL™?ofu-¢^¸RqSþøêŠñz¡úÔgU;¸¸„Ñcâ´b?g&ô»“ÊÞü÷'Û°ãg/™÷îGûÎØÑnׂJ¡Pt ¹Ö;…BáyÛÓ^€ÁË~joÁ®Z"ÚuzÝ[KÇM¯ýøEß>Ù¢)c d¯);ðækÛN]""bG=°bÙ£“´bmÙÞm§’ž^ÄotÅÇ—Ø{W´lôgk¹þK‰ˆØ|ög'ž~iæsG%"ÒÞöÐÒ…s&&éI°ž>ºíõÍGj¥à?!ØêjOíÚðºuÊú§Jæ¸äçÿvÑ7}fw×âåþbL"O‚ÝZ}dÛú-Çq6 Ýi±hÑx½íøú'_8ÒõŒ1úöùK8:)QÏ öêS»^}õã³›4ué¢ÙÆÄó$X«?}}Õ–¯ˆˆHÔ_¸.ʘxN¬-Û»qý¶oÔ>ýÒÙ’â9ÑZýÅ®×_ßw¶‡n¹"7zÞê•SÇ&r¢õÌ7^Ú|ü{ïêV$XõøŸj'ÿûêEwñ-zg÷"²Xù؆êÛf¯X8sl’žíöêÓnYÿúû\ ‡À°lDÔÒÒâ+ËÐQ¨×W¥¡§ƒšÃቈ8"šÿüª‡õ§?Üüîiýà#sV=/,ýÍ®Zöö¥¿_:Y_óÙ®÷OÓè)Kæ'stºÏ9Ç=°ê÷‹’j÷n}©Ì‘4åÑÙ+W‰Ö¥[ªÇ/YùðØº¿o_Ê¡Oºm,ÙíTûŇÇÇ?ó@ÜÉm>:+ Õ—ôS_\ñ@Rõ'o®+õ£Ç±Û´ô@;þÞñC £ù³µÿ ÆÌœÇ}öé»_ÐègL~øéù§þec™Dú_¬\½d¼ãÈ;¯n·ÇO˜óè’5œý‰õ_:ºþ¹„)s§öîØv`Ô]s¦Ì\±äÌã/ šÈqúÓON]t‡ãÀ«›?³‹uÕ4öñeO¤/¶¾vÄÊÆo·"ç¸:*_žëñxΞ=ÛGYä¼p³àôú¸8‘7{Îx^üæø);{ûÌ)Itò¥µou9­·mþä)#v½“0ebõÕWv"b´Z묧O)»DGö¡5®šŠˆdYfYö–[nQ*•²,×ÕÕ]ºtéò/Ãhl0¨%Ì\ÿÖL""²ŸÜõ܆ëˆHŸ` Îðô{{ŸLgçõ¤OHäÉþÅÿ¸ö3ÕVê3êe“≸'ÞúÛgÎz-ëøb×G§?çñÿüŸËŽ|¸ë½_ÕuïºP÷é;Ÿ²ò¾%o¼óЩ#½ÿξ2To€ž\¶lÜ„ùóš8:Q¯e‰ãxâ8âˆM“@töÔG÷Ô•Uûž•—"Ҳ䟞Ÿùúî™jõ¿Ùú»mß^&Ú­9¾Ý¶bÁgwÍž3óÞ»žx~ÂäÍO­ø¸ÛàÈ—Žoø×Ç÷ú±6% IDATÞ;çáS\²n„WŸüã§H{ {­U¤ñ qtªë¿£æ?¿êáèÓ{7­ß{Æ*Œ^ôúÓûš›(övª[ýáªMGUÅ$¡¶‡³SI¼Â¤Vªþø·Ÿšðàì‡fÞ5ç¹ >üÝ“o¢V/ÀÕ`|‘npzøY¡P Õ€›’£ºìèñO6mØ[«¼dÉ-‘ýl­ø¸xñLÀÙ³v‰ìµVôIIq¾—jôA'Ã"qz½?àMÀN[k­ÄÅdzՙUŸ­ó÷œpœ=²ý¥ÿºæïV~̽È—³±AoñÒ™O7¯ùÍëŽ †ñS|ï Ëyí©ã§E33ÿö®'ŒÚ1cHüö£7Ž–U×ÕIZ­ÿLUª«®#5vtˆg˜RíéZ¢¸xmmÇirõyÇÕ¼éà³^éüñþôÛEÿö~ —8ñÞ$´(ÀUQ‘B¡p¹\’$±,+˲Ãá“ %zàf%ÙúÚÞñÿ9sé²ãg^8bÿêÃÕw=Y³½ú®Å+Ç;N•U[EýÄ$= gëìDkÆ=ÿ¡¸:±ö³²„E'Õ|`ÝÃSV½‘pêø·µ«OHp|ºöõãV«ÆÝöÀã÷ÒiíØ™³Ç´¿¢ö³O¾™³dòÒ?JcŽÖPBR’x`Í–¯zÿ uGv}6çÙÉKÿ¸<~ß)+é“nÏ_óæ—ýè~k­©iô牧%Ç©O„?…¾*;muhÇŽÖ“X]‹;Ù®ŽÊ×u×ívŸ9ã/•œóv¾7!é̶×?™¸þEKñÍš£g·ýá9ÇÂùÞ»hÅCœh¯9}d›ˆ_½þ›ܲG&/\:±¶lïÇGâNñ¿þüG6&-dâÃKÆÚªO½ÿò›?¿ý”ø“5¤EóæÜ5oŃœ(X«¿Øa'ívÜÔù÷ñ‰öª²÷×o<â ¢oßyó@Ò¢»f>1Ú~róÇíýí<ñω‚µö‹7^{³ ÷±@og´¿[Q;ïñ‡&Œ2f"‰‚½öÌ^»HÒWÛ6îM\2eæ²1Bí©w^Ú`}z¹ïî´º}k×h—/zhÂà §ˆBÍ7;ì—?Ù´¹á™—‹™øè²)œ(XkË>Ü׿ÓÓK{·¿3þßçLž¿h|íê÷Z)iμÉ39í5§?ÙðêÇuhO€«¢>|x§>¼ 2ÄårQÐ l]J: ÂüÔŒ^²õ?´o~tÅÇ—°0úCi³Ù.?Á`p¶¶bY„~e¨÷®»èÒ 0(0]Ç»¾»èµ æÇ'"Y–e| ¯ï™!C†ˆ.—|»Õk@¸"(àp-£*_Âëœ-ðl o/:ö„?&êv‰w»Bæ ®˜îOù:ùbÑ —–-Xpô‹  ¬tŠz{Ëy œ1Ùºä¼]w»ÿá„¡ö7ùÀà¢ê³hƒ‚Hnÿ¡çY¨Tÿ+?ÿg?»M¡Ppûwì!!Ñáp¬ûˆ(6&öÌ™3¾_544 %¢¡116[£ïÉÆ†ÆØØ¡]f2f̘ÿ„Æ »xñâMÜ„ø€ø€ø€ø€ø€ø€ø€aõ–NŸ>SLø `î8ÿbô+ób”nàûðõ´ î±Ø‡r5c·Ûµ bc‡^¸xaĈ­­­­–_>ú˽{v/}òI†Q¾½}[ccc—÷ð@„Š%¹ï_ár¹¼½WVt³*7§’;_•+E7+ºýý£!ŠP«%QôÈr®jŽó¸Ýn¯7<75Ëz¼^·ÇscßFcrŒ}¤¾ë¦ËrD²$ul¶¬ ÅœµñõaÑiU© …(Iaج*¥RÉ0® ÷æQ)›‡ëS g¢¬Büw–ðÞF¥Rµ‰bxn èYÖér…á{S(µºµ­íZÿ!G„æÓKÂõXjFÏÿáD4vì¸Õk_øõÒ%’[¢öãAà +¹¥ŽÒÀ=ÅÇ×èÒ覿âÂÄÄÄÄÄÄ€¹Ç.ØCÑ_U]öJ1½åö@A„sð}À+½ žžˆ|¡êÞ={>ñ+¥RyðÀßïËÍ>|DѱcÍ—.Íyøý÷_6uù‹ÍB +÷3s”½²£µÕ+÷š چꚒ£=œ2øÉ!Uö˜K‚ò'‰^ïlkóxÝaØÊ‘­$J’'Lƒ­ˆˆHÇ#I78ØjnQ77w}"Ôj™ÈÕ9tkI##/?7VTŽ® |H½Uß<€ï™ã"” …ÓŽ»V¥V©”ζ֎ݩJÕܬhnf;¶èAÓÒ|ýß›Jɪ9Îát„ç¡T(Ý‘‘‚#kà(Œìñ6_û÷Öät’‚»ŸˆØÙ••}#´´ >¼¡¾!&&Ö÷dLLL£­‘ˆê:=ihllÀiÀu”Ú2ãÛí¦ËOä—_ßô¶¨Aù ëëê¯èjÔÖØ­ÓBáØ˜˜F[cKKË«ÿùòËë×M›6}ûÖ­ñÆxËÅ‹555ÆÃ:?MÏ:ãµ]þI<‡%VBŠz/_¾çùèèhßω‰‰†Ã… >ÿüóÉ99*•Šˆî½ï¾cEEDTtôè}÷ßOD‘‘‘&Lüòøq4ÀàÁ:ÝUµöÙ¦ÉëÌëöU½²ë¬çÿgïÎ㛨óÿ¿'ÉLÒLz$mÓBi‹P_Z9X9\ðTÀåK¥ XÝ "º»à.à ¸+(‡+•Šrh‘Ci‹= mÓ6é‘sf’üþHém¶Ð^ÏGÿÈgîÏç3™&ïùä=}–x^ü¾g„¡÷zá›ÛsÞ?˜õþö‚qÃD"g§…—ÖÌ~e˜Däì±,gíÁœIO:½§Zúa%³6]Z–œõþî˳^·øéÆ\yÿ`V≈ˆ~¿5smrQ­+lTñ¼íÙkfVÿ­«leÁИÊW–CÈÕuQæÚƒyƒbˆx¡Ï‚?%g­M¾ôæ2S§"rvzýʳñ.Š,]x0sÙKƒMäÅnðÛ(Ã0T(’$¥¥¥ÅÇÇQTT”ÊÇ'÷òeϦ._¾\XXh*/÷÷÷×éËM帀×Rxn]ºë'ßaÆ}Ãéx4M✹r¹LpN—ó½åËívûåË—Ž9¼úƒáçóçŽ9BDÉÉ{gΚµfí‡NIÚºuKi)Fõ´2n¿GKû Ü›l}|¸uÀ"[Ù)Ýþdû€á–“+ÓH&q®Ê3'‹¤®Ã+šQúë©6§6‹/ê:ÞØÃÌ ‹wZÏè¿üVî=U²‘ËÇÈ;ÊúÅnøýÙû6Ô\o½¿U·ÍÏiéJÖSš4]å¬Uº3Ák—3ƒ: š­æ«ZWï lA®¼³Î™0èdš"³ÈÕiö•çu–ñ=j{ô-›´HöîL5MeìP›ùÿîà¹Ê†›è¨×Vò¿ªÕê—ÿ0éÂ… †ââO>ÙðÚìÄgŸ# ÂÊË«¿-+OõÖâÅDômrò+Ó¦Ëå²O7oÆE¼VuÒ–›Ší^£¨¨hÞœ?^?}÷λwî¬;E’¤5«W£ÑZ3ß»<à´  ïk}H£Þ»\{Êìð‹· Ð‰,DYÚŠ°4""*µL{T¥Sg5_næÛϨœ°ˆ!ÁgÇG~FoªPÕž{ˆˆyöI–À'¥ð'/Èîïlîâ÷ë@sÉÏ}«#KBˆ)øÏüÑe2;“-WÞÊú.ÏçäùãÝ]Æcþߥ±¶Añý·$gŠÎ‚U—žë^Ù#ÆÿAuñìŠp³ÏÉm~†ÆšÈ»B½S&ýáf¿Z­Ö—^çy]RR²pÁ×lS’¤¤¹s=¯ ÅÅKÞúÞüàåh‚fÃqDDò:öœNO‘# ü¿%% _?¹¦úÇNŽÂ¹Æ— òíÜ•ˆÌ¿ÈT*õ}1ž¹æŒ_d*%ÕA s9ìÖ¬‹rNÉ·ïHD’à°ffÈ8NÓ>–ˆ”,u6UÎq|ûX"rJ¢åbšŒe5÷w""—$™/^)šk‹r…¦cg"rKRUÝ¢ÓY•ñ‹L&×Ä>@D.—Ëœþ³L&ÓÄv!"·\fͺÈñ ™Ü-Š–Ì4bÍýI~µH¤¹¿3)ä”Ì/'FÁ’Ëi¹xÁívóíc–c\NsÆ/n¢ê¢ÛeÉøÅåv«cbeG.—åâ·Û¥Žî(S*•Je‡s§].'ÝQªÜn·íâ—Ë©Žî SªˆÜæ_/TS$˯Ü’T[ÌLs‹¢OÔýr•Y³Ò]‚àÓ®½ÜGMDÖÌ4—(ªï‹‘©ùš¹êÈ_·-ã5DdÍÊp ŽÚböE—Ã®Žˆ’i|‰ÈšsÑe·û„·“ûú‘-çW§ÝæÑN®ñ#"Û¥L§Íª o§ð­S »Oáç¯R*c/^¬O‘ˆ¬—2]6«2,’õ "Ûål§Õ¬lÁúk‰Èv9Çi­Rµ WèˆÈ–{Éi©T…†+´µEeH« $"[Þ%§¹¶hÏ»,™+T¡a m 9òsŪreH[VDDö‚<©Ò¤Ô·aƒ‰ÈQ+V–_Sä‚C¹ =9®ä‰&ePBD•|¡ÂXS´Håe\ žÓ‡ª”ÊN—³ES¤ç‚C‰ÈQtE4•zæ‘£¸P4–°º`eH›Ú¢6HÚ–ˆ†"±ÌPS EB™Õ*CÃjŠŠ€@U›0"KŠ¥Åœ¿ŽkNDB©A()býµÊ¶µE¿eX$‰e‡¡¶(”•†B…ŸVAD¢±ÔQ|Eá  $"ÁT&(|ýUá÷‘d,µ_‘kü|"Ú©”Ê.…öâ+rÞÏ'²‰¦2GQBí«º/Šˆ$“Ñ^”_SËMŽÂ<¹Zãs_4‰•&GAžÜ‡÷iCDRe¹½ W¡æU÷Õe>¼Ú3·ªÂžY®RûDµ'"§¹Ò–w©¶XUaË¿,Sù¨£î'"—¹ÒšwI¦T©£;‘Ë\eÍË‘qJuLG"rYÌÖÜlÇ©cbk‹,§nKD’Õl¿\]T)•q&“írfÍÂN›ÍvéW†eùöˆÈå°[³/2 çš"ÉåšÔΕËÕ÷wfÆí°[²/2r9ß¾Éd.‡ÃšA2™æþÎ$“¹Áš•Î0Œ¦ãnFækfúí¾ì¨}}»Ûlu/;ärYM«{Ù±dֽδ²ËŽ&(¸»ÃQ÷²CDöËY’ÕRsùŸ.;õ¯3žbÍuÆsÙQ¶ôiNDöüËRU%¤ç‚CˆÈ–Ùi1³AÁ*O± ÏYUÉ+ƒõDd»’שּׁPè‚Tú:Å@•>´nÑ7,¢—(Ú ¤ŠrV¨ ­¾ U”˵:Ï…åJXY®ЩBÛ‘½ðŠTab´ž KuÑ?@Ù&ŒˆìE…R¹ñÚbpˆOÄ}ŒL.”$‹Yî£æ‚õ #s”–8-U __ež¹XYî¶ÛRgOÆÇ"¸Û™å•16Ȭ0š‰DF"7‘ÖÑvYßÎ_›å\DÕO«1&ûeŽ·tոŠ~§²¼ª>R§é¥CúÚõ:Kn¶úK’ü|ŠØÝÖ£¯Ã'^ ³æä)™ÉÉ­‹qøhåíBÝdT”µö®ÔH~¢LÖ(‘Üh”9u:¢Üi"@¨·)Ýþü²m„L¡JKœV³L©bƒe …PVâ´˜eJ%Ì(XÑX*™«dœ’ f¬`,uš«dÇ…0 EuQ©dƒe –̕݌e2¥’ÕËXV4–IæJ§dƒd,'šŒRU…ŒãØÀ`Ë åeÎÊJ†å¸ àš¹5E©Ü$Yª¥Šó×Ê”J¡¢Üe13 믕qJ’Ëd O{^ý”[!"±Â$˹œÕÊ8¥TY!™+¹\áà4WIåîvv†Uª£îgFª¬p;쌂ó‰h'Y-$cˆaÜ2Æ%“1 1 1²ºEÕ›ë®)ød²ºÅšM1Lý-»\Ä0®«E·ÛM ãf—LÆ9-ÑXJ2WnòlI4–ÈuŠDbeyÝ¢TYá) ÆRr»¥«O¢Leu‹“‘\NgH¥ój‘qIζNKËó“‘œ¢Ò–,æê…¢3¤­Ób&"ÉXæ–¤š¢h4º%¡Î\£Kt(õm\V‹g®K°sÁ¡.›Õts9ìbpˆÌn#"¡Üä¶Û¤ =ã¨SÔ3; åån»¥¦(–›\6‹,D$•›œV « r‰‚g®ÓjVhƒ\ÂÕ¢¥Š йÅ:E­[Yž*ÊUž¢§ÑœU¬_€(Iž“ÇYUÁúˆNçÕb¹Â7ÀíryBR…Qîëçv×)j|='¡³²\,¯-Š•åRy™œ÷õŒâ+M¢©L®ÖTwYU¹d,•ùðžG‹•墱TWT©E™Ì³#ÑX*SùxîgUõŠRuQÅ,Ï‹ž"§dä O¼R4–2Ç(D$™«‹2–­-²¬ÌÈÕlêš")2NID’¹R4–’\.*•D$zŠ2cT‘³ªR4–2 #SùÔ‰Hæ£&"éÚbEõ)mô©;W4ª‰Èi®¥n—[®æ‰H2W‰ÆRr¹Dc)Ëó¢g®Ó)5ž8©h,uI’ÜèKDN«¥nÑeµŠÆR—(*Œ¥Dä´YEc©Ë·ºè²ÛDc©Kå¾µE9ïþž°©h,u©5Õë BÝ¢KDc©\Í{ŽÜ%‰¢±TæS]t‹õŠ$I¢±”Q©Ù:E™RU½®ËYSdyÞi5‹ÆRâT¬¶Ôsq¥2VY½)"ÑXÊ(¸úE¶n‘ä,g*«W,7Öe ±^Q.˜êoóeÇí-–º—šëLÍeçšëLëºì89V´Xê^vˆ¨ú²sõ:ó¿\v®¹ÎTk¯3åRy™Ì‡—Œ¥Ä£´D(+ñ‰Šq ‰H()JK|¢ï·ç_&"ÁdK >÷EÙò/‘X^.”ûDFÙ .×ÃÛÙ r‰H¬¨ E>áí¸ªŠÊÊ ©¢Òa(T…GÚ®äzÞïö¢BŸ¶Ž+yDäª2ÛŠ TaöÂ<"’ÌGa¾²M¸­0¿¦¨ ³‘ÓjµäÕ]«íJž20Èt,Åóô[~®*<²æI¶ü\eH¡²’‘ɈH()ÂçK¸ŒØøÌ°1Å£úŠù»C?ÜÃ…Œ/˜Ð÷êôñÆNÆjfÔÝMCºñ_ž•yKuú˜Æ6+.m^Ê—u.MšQýluÛQß´–Nl¤»ò¨_š…(Íï˃•Ó-\þ(‘ÙçÐríe±µGí•f"¨cÉ(:u:'g¬qínº‰à–/£[vE¯ASÀí õþ/9šKÁgŸ¨Âªk/ÈeCÛÊ劚¢2¤ £`k‹ú†UÖ9}¨Œåj× ‘+•DTpötM±zn`°g°•§¨Ð)|ÔµsµºšàW½"ÃØs³Y]0#¯þ\ê(¼Âju2•Š‘Ë+Î6þš’çËmj´ØØØœôô;ÛQ_Ô+íÚ^¯¸{Góccc/{*ØŒ[¦›*Þ^±±±ÙwºéW0ón¯`ÆÝ^Áô–¯àm¼ìÔ«`s_Á¼á²ã=ؤCÿý+øë¯àÏg›*Üëß08""V'¶híÙ]ªÕSñÜp›¸v5óÜòÒ>3*OÎ(ð–8©[AÄr¢¾»9þI[3Ù¤>yJÞ5ÞÆ)Në#+ÄÇ‹b‘ú×\yUW¦‘|HnkmTU¬ÉÑ~ŒáÙ^læÿcGÙžƒ+Ç-w§™ÅÝÝb¦ß¹,"Va3…Vþ~ž³*Oó¯ÜFš¼ìƒ˜WMé…ótá|m¹îë›-RuQ[šž^Sl·/Î à].ïÐì^Ò£oÙ\ß=ü}g[‰¤>3Œí8EêÿËgé˃¯6>7š_µÍ;b†§öœ²‹¯®SÜ”:¹$¤z†,-Emí[¥6ò'Ïx¾[PU‘ŒmoíJDôÐpãC‘+>ie‘OÛAí¡':W=¤SïО^Ýö3*Ò·ª/'+>°{µ¿ˆDåþm¾÷O6w~´ªø OÛk"ð*ȱ7HôÙ2ºý–ê‚òË±í¿¬~Í홳Çó2O³e‚æê2tÌ351êØÕ)™+î{u…WUŠ;6?²æðh_ÍK)%d~JMTÓŸT8@£Ù0F¾˜•“6îo/(ˆ•ZW'ZT{f¶ÛS[fO­h{êº1î ywOmD·¡&bëœ ^Î¥PvÐ_3‘a¯¦ª²ªYvÁ¸ÜmÓ [¶šõÜVã&Ô®»Ífv…ô2‡s²K?(%´ @+à’1¶þš‰2F¦àÕ6W³ìBætSK'ÏC¨à·ÉO~¤o?ÛØ'©àq’Y‹TiÚ~¹_¨¼¤ä.=|ß½Yw|2¸‘/Ži¾›§ø¢À[ÉЭFõÜFUþ|y”ΡU¡)à¶Â¨^€V¡^€V¡^€V¡^€Ve¸÷°F½³xL{N8³nòÒK‹ÆÀ%_þáù¤=t ´r2¦ sÛk¦1.wÛôÂ;võÜsø¾cÇpÛgŒÚQü?m¥ÛÀîÆ”cyhÏ{Z@ÏQ3'Œˆ aI0œØ´bÝþ‘¨ÇìO—>Î ‘ºæ…¥GD6¬ßÄÉÏôë¨çH4eì_÷Þ¦ó­ ÂÏwµpÑXqýó‹‹õf°]f¬;ö»Wgm*h ½ÄF ™·hjÀ®‰sw™®NÓv=sòÐŽZ‹/›»)ƒHÛeÂìƒby²ä÷·N”³ s7ÎO௮Áq”ºêùÅûŦZàÞåbÈÂ_3QærSú;„zî9ºP›iüß6ÂÇ¿ûè±<zîe|D¸æøºiïdXØèQË–Ì”º`¯‰Õh…ýI/­>_wI [|`ÕÔ·r,ÐoîªÄñÇ'~œáÝuÓš»ä.Û`á®ÃÆMm2´’> H˜ùö„ðü|S·*5aÉŒðoVÌZšs5âÎ'Ì|½gö{SgÑ×,š7"{Á®ï½0²f•.³×Í>'6Ù2pÇH*¹M­”9]õ¾ÞKNNˆÜh€{B½÷–ˆ'“’†·×iæoèž»gá*J\¬Ý}0r„x:˜4iufçQI3ÇvåÈœytݲ5ÇŠ‰BF­^ÑéÂ]÷ö†3ýhÉGgBÇ,©é¼¹³ùÂÖ×ßùÖóäü¤)ñ¡$Ù´|Ùž,‘:ÍØ0Csª(´{¤F£áŠö,[²-ÍBÄw³xöèÎÁ˜{êŒgÜ'´^–ó»6{^‰Ù'Λ…ë‰LZ­Æb2Õ_PÌ8°«:´[žzºxfBKÞ}›À’w`uâymâßÕŸÎÆMž~dãñG&ò­£ŠoX|ŽžY?¶¶ =G÷3lµ7§vd5Û±wGÃ7«2,D”½{Sê)½õ»vÕ†³ùþ£ãò÷®74Õ2pYÃü¬a~×LôË2˜äN'Úàž…Ç²Ü[ò¾]¾|wfÑÁe“Ç'íÈ#â"‡íüÃ’ç_}–z͘?ܼiú˜aÃÆ/9Õ>qþ¨""âBãÛŸY>cò”ñ“6ûN#¦m[¾=³èè²ñãÇ¿ó­‰b&$MÐìyý÷ߟ¾C36iBŒgµÎÝCS–̘2yüŒ­4jÊ£Z"¶Û”¤á¶é¿=fúsçî ¼khc£Žæî IDAT5ùùDÄjYý ¥Ÿüã³Oÿ±jõ¢¬>aâðÔÃç¼~8¸%ãt†…ˆ¨ÞIÊv™2%|ÿª½j-箘“ú³¡~kG?m2i',ûà¯ûˇ‹FÅñDIJ$ÔÜ{1›µú:k„ ’ºó„¥‰–€–‡P/@«%g˜Fÿn|+\æîu{²,DÄv´»ùè¶cÅ"‘%mû¶3‘û†‘p&ù`1‘åÂ…"]h([1ÆkNmMÎI,>˜œÚ½»gµ¢3ɧLDD¦ÌL£.2”¥ö}»Ó©í«÷°û:ñnÐoÊhþ›­‡-DT°)qÒĉ“^~á‹wÒE¯÷ó{Ù‡æ}¶í«]OŠËß²åDy«¬&7urøþvZuÞV« ˆîžºjÎ+Sç¬/î7{æC¬˜q>?zÐÐ0–ˆÕ?2aPtýjÄžØuÙZn–KÆd ¸ÿJ·ð;³;$ph}íÛ¶Ä÷7¹ÖÊܯ «~;C‚±¨È\ýR§Ó˜/\Íá+fNGd$2›¯.B lÕétº¾‹7Ç DDGE<£ý³¹Nlˆ#b5Θk¬žh6›‘Àá®ÀÇMy{,·uñ9WO‹HD$æÞ¼äÊž±t8•H<¹â…1D|x˜¤¥oRâ[L­¬žlÜä)á–¯+híÆ¥³ù„A$Ïï®*óè.~x_φl娍gÞœ}ä¥Éù5a[6,.Nϱú~ãiON'ÒvŒ ¯>-ø¸!ýôùçóZ_6€Ó«_zzä(Ï߬-ÙÙ;_}®õÅy‰ˆ2ö§²ý'<¦g‰ø¸‘ üùuFìòG¼>‚v}Qý=ê8r|÷ $oh0ª õ2Šò•¼é‘½f[…í&·+žÝ°lûìÄ5Û9ŠŽ®[¶=¯Ñe-G·=ÃŽÑ6Í›¿gÓÒM‰Iï|>YC$ÏlZ¸8ÏÒÈÖ/?¸8éã=3È\têè©¢HôfkÆ&LÁÅým×dÏÓßxa=—0qúÂhžÑ’ŸúÅÒ çE"mÔˆÙo. aEALÙÇ×­Ùk@óµœìÍïly=iÕ§S8Ñ”¾kùòŸE"6aîßfv$‘Lé»W/M®îþ¡ýÌû3Ðf­VSp»ÝDÄ0Œç5Ã0þþþ»ýÚuƳdÍÂÞ,666==ý.îBTDQATDñ‘ uñQ«ÆßÈ£ÓélVk«¨NÉÆº]·¶®/ïk±Z]ÿ Ãì_Ñ!Ðyi{ü²L&¹ÓÙ\õÒ¨56»Ýé’¼°ÍÕ>¼(ˆ¢ÓK3¾«Tj§Ó)ŠŽš)Uþ|y”ΡUµü±)•n"‡ÃÑ,[Ó]2érJ›ñð8N%g›Ãæ…ÝÊ*” …Üf¯½.I Ee?cûÀÚw´ÁòKá?6…œUrœÅfñÎw„œ‘û¨ÕfKÕÛ£¤ä.=|ß,)cd^]YûTŠÛ‚q“P%Ÿk¶ûÜMüŨ^€æaå}*#íJ¹X'S¹S)—Ÿn?„zš‡S!Tv_VY´Üax,@«‡P/@«‡P/@«‡\½­«À§8hDIB#ÜÕ Ðê!Ô Ðê!Ô Ðê!Ô Ðê!Ô p¯ ¹öŸ|½…5Ùçl^ù´¶ŽAû»•ÿzãaÐ\ðìfhFlXßñ/z¤ƒž%±üâÁßÿôg+‘ºÃ°W& ÿ¿0žÄòŸw¬Yµç¢Ø ëvwԂذ>/MzZ–,9Gþ±ö/§ ¤ŽzôÅ?ŒŽ àH4ü¼ýo+÷\ìʆûàÞTåÏ—Gëªk¦û¨Tät¢}àÎè^hN¯­y­Wˆ†,g?_ùÞW颇gÍýÃŽ„¼}¼ý÷-D|ìÓs^{¾k(GBÚ?ç,øOÍúÚ‡ÿ¸òÜ?çü¿C&>öé9sŸïª!sñÿxoåwyÄ>8ç“çÅïÌ1]CX†²>_¹ò?Y"‘öÁio¼6 ‚,Yß§qè„»•xñàž‹ž—å§2L‹×³tQ¼ôí§—< GNæéÎRA«{wÔ‚¨üäWŸz^Y~9™!¾¤ *ù9ùëêZütÞôûp-QAƒ]ÙàDœ÷Þ¡^€{®kDÖÜ—WfSÈão®œóRÚ´¿¤‹Æ¼ï>}ë¯çòĈ§×¬}éñ¯Üi|ð•7/üsÎóûò($„+& !""6æÙ7§…|ýÖ›‡LÄ>øÊ›¿þþê¨CÆèçÞwÚïÒüÇHÄuêʽñêëç,ñÜš•/>¼ï­ï¸‡_™û`ñ{¯ÌûѤ}ðµ÷Þæ²Ðw96ø¡—žÒŸþòçúq@¶K}þÅœV¼;jAÜ!šò”×™¢{äÅǸŸþ’ñ[]ÙHÿÜYn†±ðEÝÛ )¡^€Ö‹•75Wl*I ¶o_¶HDŇ¾>ûÂúDPz¶˜wî奥Ÿ Õ1 «ùÐÛûòD"*.‰X""ÝÃs Èû`îWY"Ûm@Wó¡·Qö¾oóžïËþç{"Êý~ß9 QQVžÐ'DGlÄÃ]ßÏýÑDD¦¿þ>÷átáÝ{nÆÏùdÖCZžòþåÝSuãˆÄ?0iL»Ÿ>ùÐЪ+xwÔ‚(lð+™¿|»:XðäŸÞ)N«r’?X–!6Þ•Mô/´$„zZÿ8ÅûOÉù¦2;ß_/ýèhpž`1 žW¢ÉdÑh4,ñ‘O¼üâ1:ŽˆÕêè8étKZqý5¹˜§ž,__]_£ÓEöùÓ?xfj(K£!"D£å꾈ˆ8"޳¤™ª'‹-„PïÝK<µrü‹Dê°‡ž›óÖ|š»ô 'ȶûý‚©a–¿Ýª‚Þµ x(qÁ`Ã'oî»°.ÿöí?|KÄGõ™6wék”¸ò¤µá®l¬Z˜C¥tʘf{« ’Br2äFÃ@+‚P/@ëÈ𿹆i«"j8ÔËñŽH$"V«åÍ&³ûâ‚uÿš3w_±H±¯ü}.‘Ñ(ð¡Z"KÝU‹¾~ûÏy/ÿùµ?{õ¯é"™Æ¬Ïç½ú¯ºa¶Á}ͯ¹º5 Ï£ï~Ö‚“_½¬G4{ð´Hlذ‰=N¯{{OA+‘Þµ è1õOãiÛ‚¿ýd¹v–%çØŽÓÏ͉ÓÓÉK weSî AÅÙXF”ê=jÞÔ!ئU5×.t™F¿Â …$¡µ A¨à®ÕxðEÓé‰'¢S¾Ê¦OuϽ›Íjx ‹Œ"‘öá§ ¥‰Ä´ïÏi¦½øð×+¿/&mˆN(6 £)o߇ÿ°bî¤ï_ù˹³‡Îi§½<àû•‡òDâÃc4ÅYÅ LÚ÷麟~ðë´ð]Ÿz"¹zïVºðù?X‰ˆïòä#ú‚ù"QØ£s“ÉY÷öŽVý¯»£Äw™¸`¿ã­UGkFã²Á:RÎÏ%"?¬Ÿ¿ÍÐpW6Ü¿ÍâJ·0«N}#KªÕjQDÄaêC¨ õ¹|\Z[Á4™«—*ÜßU42KH;t,æÕ¿þ3DÇYÎ~¾òÓtÙ¯>ÏûÓÛÿÞf6Ÿýòû³1Y¾_û^į­ý|.Gæ´,X°ïêŠ÷½÷ÙÃk_~ìµ~üë»_¿úÚÊÏ_㈄âcyse±¹ÁZýõƒno¼öÙ6ÎlÉûñìY£ywÒ¶öZÒzNÁtéäÇ~k êñôK áZZ¶utõ9xâ½ÿß‘Ö"¼;jAŽÖ1œæ~Òw®gBþ—¯¿vªË¨™ hYQ…òŒäUkX)ª¡®lp"ÀÝOPrÊÉÖG,j”N%â*àE˜°°°š‚Ûí&"†a<¯†ñ÷÷wØí×®Ã0ž%köf±±±éééwq¢‚¨ *ˆ ¢‚¨ *x~†cøb ­Cƒã.}Ôj£ÑØôŠ:ÎfµÞÚNŸxòÉÇŸxÒn·+Š¿~üñåË—ˆhøˆýû`YöÌ™3ÿñ÷šoµDIJì+Ó¦GÞwŸR©ürÇöC))D4aÂD}h¨±¬ì“ 뉨ÿ€¡mBÿµmÛõ»ë#ÙX·ëÖÕ—÷µX­.w£OÒ4ûWttròßÜ”_–)°À$w:›«ï4jÍnwºîÜÈY¯Õë›[¡.±È¥êö´úûXÂýD w#ëú¨TN§S½ñNJ©t9ŽfÙšî’I—SÚŒ‡Çq*9ÃØ6¯üô¥T(ä6{íuIR(*ÛøÛÖž6sÈ/…wþØrVÉq›Å;ÿȹZm¶Tݦí»ÆÀuos ëÊ™†WWšÍ·µ7 URñ¹f»9ÚÄ¿Q|I€–¤‹ "FÎÈX¹Ó.ÉU §]bdŒÛå6æâ9?pÓ4ÍØq/L<Éáp<ثׄ—_~ûO‹ãâºöë? iÞ\I’æ/XððÃÇ«Yå™gžµÙlsÿ˜¨V«ß_µúìÙ³»½]tÔ[‹Ï›ÿFPPÙlú»¡‹.DóÞ;ª"ý«"ýÑк4C¨—a˜!C‡öëßßSܰ~}Vf&˲Ÿÿû‹‚ü|ÏÄwÞYj(.nðN)ܳ‚:†ôt3Dn7¹‰r¹I&cÈí&†aO)Š/”¢•à¦H’$I’šç‡ŸŸŸÉXFDözðÐÁƒ’$Ñþ}ûôxÝPoÏ^½Ö®YCDV«õäɽ{÷NýñÇÊÊ*"*7µZí“Oþz÷îæ p›4C¨×ív % ,$é.]f̘™8ûuÿ_ýuþ¼¹u—¼þN©é·~³w7[©Ãr©ßšiÚ©Ñ8p ìvûÚ5«W¼·òÒ¥K’$~°z Õ$ü)--  ª»Jp` ÑXæy]VZl2™t:µ #¢Ž±±…E…œ3'--í›ÿüçš=úi|YrßÚÑú¨Tr¹Ìåntu—¿ŸÛÏÏÉÉ~sSþNÿJIæt5WKª”JV!wºÝw¬ïÌ~¾ ¿ú T*'¹œÞy*9ÎérI^ùÔ8–åˆÜJ%×,[óóý|…æ<<…‚a–c½°ér¹\&cÙÚHšS!güü$?ßš)¾6ÆÏ·²((d2…B!WȽó!“É”,+“ݶ° #÷ã­u:âfVeT*Éns~Z7¹îbºÙí›'Ã?œò¼(¼rÅÏÏ—ˆü*L¦k»þNéõÿ#àÂPS_4Ü4¹\þäà!G¾t)gĈ‘%$|w(E”Djü‘3¢$Ö¦îe"!åà ÞLý1uäȧ·nÙ2~„7æ'-\¼øø÷ß›êÛ­4WÝr®^·ËÝt®ÞrSYÉÞH®^*¯TTU5c®^—óNçê­¬ôµ*nèøÕjçíÎÕû¿¸wrõ*ªÌŠªÊf<¼Ö—«·’©¬¬ L»«Ì>ÍÚ 7Ú^Ÿ«WºÝ¹zåÎÊJþÖ•12·ÓugrõÞ¡“¡y77dèД”"blû–.}‡S)ÏŸ;÷ù¶m’$]§ôšÕccc›½†mÚ´¡»*ˆ ¢‚¨ *ˆ ¶Þ 2AÄø¸”Êf©ˆ ôÑÆµº Þ›‰ðñ=ät¹>ݼ‰ˆ~üᇿmøäè‘Ã%†’ÀÀêÿ)eW¿™zJJƒÌf3êJJJˆèÀþýöïàÚµkWVVj4™ˆ¨ðJ¡>$ÄtÝÀ&oМ¡Þ~ýtì»äí·ˆ(==mÒËÝn7ÇqÓgÌ|î¹ç·lùìú;¥wæ«Ñ]ÿ DQATD[iƒ;úúó–²°Îûòf£Õ^‚l׎chqv›] “É\.—Æ×WE§ÓyôèÑ™¯¾šœ¼W’¤ÇüûcLj¨]»vœRy1#ãØ‘#?ñÄ'Ö«Õê„„Þ ß\àÙ”L&û +W¬°Ùl¾ é´ÚŠr<5¼T³…zôxÿ~ýþüî;5ÉhüP«ÕŽ~ö9ApÈdòŸÏÛùå—DÔØR¸71D>îÖMñ pãš!Ô[Ÿ?bØS×O?zôè5S»S ÷(†aåö„‚àFÈÐÐRÜMÎB ÷6b;Z¾mûŽ[ äovÕ^I[?r.dÔGÛæõb›ikªèOõ F—ÀÝO&€ÓøcÙ$o¸ø¾cÇpÛgŒÚQÜÈ}êΤœµÜÊÆÙ˜})%%«‰ÝwØÝ˜r,ï¦7- ì>¨«åxʯUõ§öü@ù¡ÃYö›ØT@[½p¥Èú›‹Å ì)¦H/¿{Ï6aîÆù 5!Ž£ÔUÏ/Þ>ùokG†¥oœöÆ.½ê/㢩vAӮę9ã6Nãj§ ßýé…å§¹ŽÃg'ŽŽãÉbHݲêãùb#{½¢?É`£†ÌŸ7..€µäŸØøÞêÃ"¢ðGf'MNaÅâÓ[V¯Ù›-ÖoâägúuÔs$š2ö¯{oÓyËmêý?8ѲzÜ»'Dbû½õïùq䩆ùðÒ‰œ‰ˆ 4yÆ3="8²·ÍZz öPØ.3Ö¿ûÝ«³6tœò—eCõµõåÒ7N˜»‹{d”±ýcX²dÞ°zÝI5¸¾ãˆéSFöçI4ýüŪ»2D"âãF%ÍÍs$ßøÞGžæ€–‡P/´(ŒÝm ºP›ill6óä„ᦅ·êe»ž0ðÌÑ”¬Fƒx|üèññ»Ë»Ù0Ÿº}÷вsûª®›aº˜ú‹h¿™MÉÚtz ôâo‡z]åééÖ'º¶»tø’ýn=Äï½0²¦ûºÌ^76ûœH¬VÃXþÌ»‡ëôÒöÄQÛ¯¾Öøó’èÙ–Ÿ?{ ¦gû-ú ßñ ‘í2eþ˺WŸKµèÍ[–46{Öæœ÷â%µ Š÷ú3´5ñÙ#&ýàEË_‘¾`—A?bædýþ7^ØUÀ'Ì]6{lú¬Í9¤a‹¬šúVŽ…úÍ]•8þøÄ3nG¯èÏ|œ5\}jµ|þ¿çÌÚ”Sw‘€~ó-Þ´hÚ Ã5-ÉÆMmª¿f¬Ÿöôú«s¢Ç8›R Ä'èÅýïL]\`á»L^6oJ¿ÓïØ «ÖflJ\sÞDú!o®š96uÖæ|ê8væ Óº×^8oa£G-[29áø»'D\WáØUÊÒBì~J4@sAh1L9ÜäFøöˆx2)ix{Ý£ó7l^>*‚HÛkÒêmÛ÷ìÙ¾mõô^Z¢‰ó‡·ïªSSi|cÚqE—J\DÜóñøˆÐ®÷ôÓ}"X ìß5LED¤Žˆlð'?=úÙçF¼š¹mÓý‘!O >üwýbƒY¢€}þ/LÙ{ð'zEÔîRÖ{ØÀUuIÕ®ßð„0™X˜cð‹j«º7N¾ÿè¸ü½û DÄkÉlj4~5b(b×Ïõæë~~×q E$Ä™O|‘ZN$öoúFLÔ±±½xI-Âú÷äŽÿûˆH4øâœ>¡wi{$„Ÿÿ⛑¨üÄöÔ£4‘˜q`ב Qyêéb^ÂÞŽè‡ÌR¼ewÍÀw>Dc.6Õ_&lÐ3úë>¹.ÎKlÜä)áG¶7_·Y¶ÇˆGÌû÷敟رép…ˆ,?ŸÈ´!Ú†÷"æìÝ´û¼I$ ‡Oäiõá,±Δo!"1/¿˜XžÃuÀK`T/´ 7¹ÝÍ`0â÷öÈûvùr]äÒÐõ“WŸI;pib|îªÉ³ºÍX=fŸIKSV­ï?!ëõ;ЉØ^ó6½>êÛ< ኉B‰kß]·dúØE&¶ÓŒÞ™Ð7yQÊÕhSÞž%Ûú~9ðàK󿉴O.Ÿ»drÒY“¶×ë+ggN_œ²mùö¾«Ûo¿ü‘ˆHÈL^7{UZ1ušþñŠ1}“§4rÜ*} ª<ýj Š ëvÚÉ_•؉èj*^6âÁ®lú¾½"š0¨CQJj ©|IPuàÛ¯«\ª¶½Ÿè“{ ýâiaœKN-«»WaNÑÿuj«Êʶ©BÛ”\,t‘ËPTÙ;2X–çºëϰ!CCR7ž°‘†gù„Ùã8–LG6®Û|ºN MÝÛ´71»ÞÊGᎿs^$b9MBõär“9 6„¥ ±½xI-Øp½¶85ß3YÌË6…D‡Sz¸Ö_}ÔùÙ&}¿p–²¯Ö‚Õ'L’ºýÜmͪ2}¨aóüs쌫qd ÇF[ùqgÉOݹaÝÞ‘íª1d÷|óý¤p-™ÎñѺý"±]¦L ß¿tƒ¡ÿc×nWÛodל½ë¯ ±ë;FSþw¦†÷Rg96..$?#[$¢Ÿwî¤E‹¦›·¤j‡ŽÕîúø°×U/Q½Ð‚æ2ˆóþ&–X–iüïÆ¶Ñ}`÷¢=›~0YÎ&Ÿ2wîÓ™­?ÿÑîæƒÛ¾Í‰ÄââêˆNÑÑÇLD$fžÊt¡ºF6ÎÇìž»gëY™~ذ;·ûàøëžgÉ:›V,‰™?dšu:M£‡ÊðSeM¸UÌÿ%½ä𤠼–·—˜D"Ë v> zgÎ’¬œ*ÙK «T~?ˆÎe¸TÈGEª‰Hɗ么ÈUUiWkù{à„Š1ˆ=±ë¼HDdJ^<'Nzaâ‚Å=“ëk 4²cúÎ#õòóèmúfWQ~j¶¶ßˆŽ<ô3²+‘ÐÈ^¼¥ljâÕƒ‘ãx–ã9¡f "qGDÄ>4ï³m_íú{R\þ–-'š?‰³~ðÌ¡¦O[ˆjËž_7í…‰“^~ᥩËkŸ}sJKÚp­¶c´°uñÔiSàǽ>"œˆØ¸©“Ã÷´ËÐ@ó†®OÝu¼~X6|ÈôAæí[΋ 略»Lºe¯'Nœs|×y>aÜÌÏ„çï?žä ^£z å41p×íÆ Þ&°þÜcV¯ßø$gJI{õÏÆ¦³Ñêt:®óø·!""NÃá®]@c¾PTš`.ºúÛp¨N@êF0k5šÍu¡\m·QSƌԑ&TgÎl¢Îr™K¬Xk©º¾fS¥*J¯ºxÉ® n£ªÌ­ôLíBÍzNÉ믤Š8äÿåä,ûioJvV>Û3\}1Wég¸hð¬æ´;媻ÿ'ê|ï‘=LßÌÉ¿ZE‘ˆH4œÞ²;{ã#±lruü0zÄPíéõ©õB†úA#bÓw}ä3k9¹~]lâÌ•åÓùéÙåBm…k÷âµ°ËrD"˱‚`‹À±µœcIð<ÝM<¹â…1D|x˜¤¥oRâ[LÍxüú!3‡˜6-8m!ªwÓ¥º–ìä-ÇGÌîNû‰L'¾Ø•c!"Ãáýéã‡Æò»´ã§„X¾® ¡÷O—gúÓþEõrn$Ì]8Ô°~~©Þ IDAT²¡±½œÏ!"b£F/š¾ÿÅž:ÛeÆÒ±Âºi/Ÿô=Ç/Z:ßmÖF€[†P/´¦©YLc¹€ˆ¸¨ßþ§PòDM‡zÍf³ù̆IIßÖÛ±uFa‚&TGt+¿Ð6œN§!2q: g6š‰êD{Ù>3–Ížñƒ‰Ø>‹>ÓÄÖœN—Œmú'ibÞOÛzì‰(‹(”ý”zcÏ}³g§|U›‰ÀžU ‚ý éÕ‘^’«äN—ón?§ôˆÎøbY#£TËÕS‚í1âÚÿ§ú£r£F Õ¦®:]s–”§n^œº™ˆˆdáªìýÙ7¶—–ª…XìÉÙp ƒˆ("ZkÊ6P~¾AÎ’A$¢ðhmyq~Ý:[òOìÞÿìÊžÑìÔæÕªMè×5<¶ë§ý<ïsŽëùÅ_ö/šöÑùú'ºE S¾‰MàÙêð4qD‚7(!<–ÿpçøêµií¿¢7L]œ\NÄ÷Ý3oïÆ:!ö€žÓ—N¤­ó?>ÝÈ›[ô´6bѼž©kï*¨®gt¿8ËÅç-DdHݼ%ûïCãØ‡1´À x#·)šând)ñ·“ËZN}{!rÔ”^Z–ˆXmLLKDfAÐÅD²D$^8zFóèø>!,« ¹4f³ ‹ô¬|&åLè°±Ýx"â»ÞþÂÁS"³Ù¬ Ôq '‹ÌDlÄ£OvÖ4µÝª*;ïç×ô§Wux¤,=e_Ê¡”cç‹ìM,(ëçÛг֪²r)¢{ _˜SVÝ|2_^e7ÝíÙH;ŽÂß}¢&^§ïÒ#ÜÓÛ=&Ï8QÕöÙ3çþzãFلѽ-ûwe\ìã£Kr|{M,ôÚ½xK- Nz|$€ˆÕ?öLWÓñTYNÏë8rPK0º—z8›HÛ1®zƒÄÇ é§Ï?Ÿ×¬•1í~c䨧=Ϭ8n<±ü™iç£â:°DDløàq½…ÔÔ²¤îψ7® OĆ?64:ÿxºxzõKO_]}Ö–ìì¯>·8¹œˆ(lÈÐðsߨ óq“Má¿XôÞaSÞº~/öØü…ý²×¼óEÞ5å›ô=zêY""mÞÑ–¼bÄy¼Fõ@Ëi*˜ë&dphœí«÷2Ê;É›^¨ü\iÉonÉ”²jYÌüÄ _ê8"snòê×?*ÓölÏ]ºøËíE—O_½zYä¢ÄwÌçÈ|aü¤äߨ xj{ò¨wÖl{43yÉìO–- Ÿ¸a‡†#sæÁeË¿5‘åèöƒ£çoØ1ú¦yK·î~rþÇ;›¹§v½0°‰ Û 1&ÔŠšê²Ùù‡ŸÝÕINÁ^~å§“© ‡»]E³:ô<¼Sɹ”c—ê…­¹y®.ŒgJ®Fzõ¡•E?Ýݱ,þ¡ýÌû3j§h;>3ÿÍ$žH°2v/_uÄë1<üüæÃõ~­0hd\þ7êædˆ›òÁìÞb÷SÞʵZQ’¼ô W©œN§ zãmB•Ré&r8Ͳ5Ý%“.§´ãTr†±9l^Øt¬B©PÈmöÚë’¤PT¶ñ3¶¬}ÇÌ!¿ÞùcSÈY%ÇYl^ú#$9#÷Q«Í–ªÛ´}7ÃXø¢îmna]#ÓðêJ³ù¶¶ã&¡J*>×lwˆ›ø7ŠÐ’eÄ0 õÂ5¬™çJ»Ä¨û¨Îó¼X^e÷„[äœ Vá¦w†v‰’ådUv–ÄÆªsÏå"Î Þ  Å0 ~Q 7ÃU’º/¥ñ¹…¿œ ‹8$ÖétÊåd)Ù°žˆúÚ&ô_Û¶¡yÀ{ÿ¢  Å0ßÅcÙàVM}ešÝnŸ“˜èr¹ùä“/¿øBD6|ò‰? ó¶Ul ‡wVò†Ãáª]5¼)Û*Ãá²H$""ápé¶mÛDäµ… _[¸ðàƒ0`@UUeuMˆlùrK·îÝ÷Jõàî\òï­H]˜°åË/‹Š Eäð#oÞ©yÿ#™RJ;5ëeY6@F6lØ.-íÓ·¯ˆôï? ÖÔØØ]ºtéèã÷ù|"2fܸ7—-‘8hˆ,[²d܉'ŠH(>|ÄÛË—ï ˜ ã‚‹.úë_þ\WWWXP "¥%%;¶og'¼Éå^½?8ùäÅ‹‹HY¸líÚµ©;w7BjÞÿh¯§<ØõöìÙ³cBÈ d€ pß *¶UHòÂyÍ2 ÄÈàÁ]ö¹îî h‰DbêÔû/½ìrŸiŠÈïîûˆlÜøÙ’%oL}দØï¿·tÉ9ò˜¢.EëÖ®]°à¥IW\1íÁéÉDbÖ¬™•••©—3vìʯLÕð®^³ú†›~©«-//g'¼ÉÍTï¨ÑÇ 4øÎ;~-"-6BjÞÿ(7¡Q‡¸ d€ 2À}t€½ {øµ/ZÕØü¡€Ðö¦5[8‚€¶útÆ[oþå^wΛ;wÞܹ{Þ3sæ_S7‰Ä´©S›¿Nê²Ô”Ù3g²cçÚ"žcÆŽ;fÌoî¾+Õ´¡r[eóFH_»³´ªª’@ç–ná5Mÿh5wR½'ŸrÊ‘G5yò;«rZl„äÔÿðm¸ÐÀ¡wŸ>¿¸ô²-[¶<8}zꞇ¦OÿðÛ7Brê:'¥”S]¯¡ÅfY6h5R½_lÞ|ú©?l~óFHNýö¢•è€Ö3Ø ]iv|{¤z@ûQΙ^­É@ë‘êí‰l.¸‚T/h?J)‡µ×´M³^h5R½À£Èô@ëùØÀ‹”¢·´U½ Ý(%Z;gt)ë€V#Õ ÚÖ$tÀ¤z@»r(êÕš0´©^Ð~”c:W õ¾Ð¤z@»Q"šÕ×À ¤z@»ÑʱƒhRÀФz€‘è€6!Õ vð&E¦ð- <ø·÷L¹ñúëÖ¯_/"§~úèÑÇY–µjÕª'ÿôG½GGx˲.½ìò~ýû9Ï>óúâÅ"2aÂO»õèQ]UõÄã‰ÈèãŽïѳÇßfÏfÇ<‹ª^Ð~Ò,¼F¢ð-ýô¿þûý÷ßKý8tè°Q£»ñ†ë¯¼bR·î݆}ôž¿|Î9çF£Ñ믽榮?ï¼—”–†B¡û}çÞ{~[—••ƒÁ“O9yîœ9ìX€—‘êíF)çl/ýº†qÕUW?ùÇ'‰Dêž#Ž<âõE‹R?.|å•cµçï~䑯¾òŠˆ444¼ýöò#FÖÖÖ‰Èöšê’’’³Î:ûùy󚚚ط/£hOÊ!¡Kš±óÏ¿`å;+×®]kìšOÊÂekÖ¬IÝ®¬¬ìZV¶çïw ‡«««R·«*«ÊʺÖÔÔ”––ŠH¯Þ½EdÐàÁ[Ê·\{Ýu«W¯~ñ…öús…¦•aU^^žašZÛÜÁ`Ðçóٞܶ@ ôûvÒ›ïÀ€ßŸ´íÝß4xŠeùEt à÷æ®óù,ÃP–'7Ï4}>Ó°¬6gÒ UQaýÞ¯V˜__TèÚ¶¦Ïò™>Ó›‡Õ0 ¿ßo^ü€¯” ƒ’ímÓbûôV©ÈÅIćÐ^´RÊ¡ª—¢^@f;ìðn=zÌœù×=ïŒ'⻯#QÍzÅñ¯Z÷*%"±Xlñ¢×n¾ù–•ÿ^yÆgΚ9óâ ~yÓ·Þ~û[o¾YSS³çÓ#uåËpÖÒ¶®oh°m/¦Sí¤Ý&<¹m¡P2‹Å=™K‘¼`0™LÆâqn[0Ð"ž-Qøý†RQOnžeY>Ÿ/¶ùTª‹„êj÷º³> S—¸³m¦éê¼yXMÃÈ …"‘ˆ·ÍP†NÚµYÞ6¥%V—£¯\Kõ6ìÚk¯{ôÑÿ}ë­·R'ÀÓÿÇ›7§½ë®É[·¶ØêÞÁZe]ïüêT"’Xû ì"è´´ˆNÓ®ÐvãÇïӯ߃Ó‘î=z\{ÝõO?={[Ŷpxg%o8®ÚUÛR±­2.K¥!ÂáÒmÛ¶‰Èk ¾¶páÁ<`À€ªªÊêšÙòå–nÝ»ï•êÀ#ÜIõ £F~ÿƒvßÓ¥K—õë×ßtÃõ{þÚîV÷¡Pè÷÷O}÷Ýwkª«9[0ä×"5ïÖˆ­µ(eˆ¶%õ«Ð ”Xì"èÌ”Í^¸ê·¿ýÍîÛ¿úÕ¯gÍš¹~ýúþýLºòÊ ^J$cÆ{sÙ20`€?X·ví²%KÆxâ? …†që-7§žnÆ]ô»{ïF£…"RZR²cûvv2À›ÜY–í_+VL¾ãŽÆÆÆÝ÷t).ÞÑì{Îæ­î9à-f*[Û1m'D'´Ó_ý?¡5ñ=trJ”Ó\@€{6nülÉ’7¦>ðÀïµ¼|é’%"2rä1cÆŒ‘ ^*(ÈŸöàôÉwÝ=kÖÌÊÊÊԳƌ»òß+kjjW¯Y}ÃM¿¬o¨///g¼ÉªÞí6ö¸ÊÒòYâòòó‹óûÚ³¦ª…Kœ|…VÐïÿdÍFŽ d€ vÚÐ/Y—ˆmµ0MÄ|AÓÿÉšÏ9‚ÐFö^:•ÕÅb‹__¼ÿþûË®V÷©GÃáÒªªJ@‡§Œ4K«k–Û8õoPJÑÁZ/[©Þ’’Ã0DÄ0Œ£GŒøpõG"’ju/"©V÷o/_Îèøï0¥ì4 yiÖ ›¢!/¸$[ >øà³Ï=/k2 óƒ÷Þ›;gŽˆ,XðÒ¤+®˜öàôd"±g«{td†ãz;J·ÜÇЉ(Dz^¾ €6q3ÕûЃì¾½téÒ¥K—îõ N­îÑ‘Cx¥´S°Nšð “ûZË` Ëo1¥m‡‡4Ù^èì´rléîÜÅÐR½È.eªœ§‰t³„¢¬ZT/²Ã+ѶCY¯ÖÄð€tè× ­FªÙ~‹)§6 ôo¤™ ´ÖLÐz¤z‘åÞ±–eSäz*ÃÇ_CªÙà¹úà8K(í<ZT/²Ã+¥ªziàH÷ ß@[êE–™ÊiM¥‰âÎÓ´©^d9NOÛÀw ÓÏ"Z§yÐJ¤z‘å^9ïR¬H3ÐèÚ‚T/²ÌTJ9DêJtJka.7êE–ßa†ó•¹š²^èìÒ$z5Ó´©^d™RvšŸB.@º9„yZ‹T/²ýSb·\–EF€¤Y½Ó`–€6 Õ‹,‡ðFÚÚ]›‹s sO,Ë.!Õ‹,Çð*m³E®ÌÜ@ªYfÊ¡t—,/ ­™)  Hõ"û¡ºCQ¯EpÂmBªY~‡J4 y-K׫7íC€½êE–cxSé4 îЫ:ûβ¬U«V=ù§?îÙMβ¬K/»¼_ÿþ@`γϼ¾x±ˆL˜ðÓn=zTWU=ñøc"2ú¸ã{ôìñ·Ù³ÙÃÏ¢ªîÈà[E®à|yýÜ™±mû?לּáºë®¿îÚõëן{ι"2tè°Q£»ñ†ë¯¼bR·î݆}ôžO9çœs£Ñèõ×^sÓ ×ŸwÞKJKC¡Ð€ý¾sï=¿- ‡ËÊÊ‚ÁàɧœË0”åÉÍ3MŸÏ4,«Í™´‚FUTX¿÷«æ×º¶m†é³|¦Ïôæa5 Ãï÷†?Û+¥‚Á d{Û´Ø>½U*rq1ýÕC2(ë%~€NO‹sí.׋¾]rée—}ôᇫV­‘x"¾;fi^qOÄ¿j¤”ˆÄb±Å‹^»ùæ[Vþ{ågœ9kæÌ‹'LøåM7Þzûío½ùfMMÍžOÔE”/ÃðFÛº¾¡Á¶½˜Nµ“vc4šðä¶…BÉx,÷d.UDò‚Ád2‹Ç=¸mÁ@@‹x¶D=à÷JE=¹y–eù|¾h4ÚæS©.ª«ÝëÎú€N]:à晦?¨ohðæa5 #/ŠD"Ü6C:i×fyÛ”–X]Žþ½¢\yÏJ† ÈöœB_ƒk?™º†1qÒцè_ÿò—Ô=Û*¶…Ã;+yÃápÕ®Þ”Šm•{β¬U«V=ù§?j­-˺ô²Ëûõïæ<ûÌë‹s:HœžÑ2éZ“ˆVŽó2pâø“ŽyÌÀÇŒ“ºgÒĉ7~¶dÉSx ©)öÁûï-]²DDFŽ<¦¨KѺµk,xiÒWL{pz2‘˜5kfeeeê‰cÆŽ]ùï•©v «×¬¾á¦_FêjËËËÙÉor'Õ{ü 'Œ=úý>Ø}ÏСÃF>îÆ®O$7Ý|óð£~kÙ²sÎ97^í5¡Pè÷÷O}÷Ýwkª«9A†9[M!tö „]pÛK/¾ðÒ‹/4¿ÞܹóæÎÝóž™3ÿšº‘H$¦MÚü)¯¾òÊîÛ³gÎdß<ÎÿZ±bòw466î¾çð#}Ñ¢Ôr“ _yåØcG‰ÈáG™š)Þ~{ùˆ#8&RÏ k«´s% ÓÌ N˯)¾€¶p§ªwç"z{”v–…ËÖ®]›º]YYÙµ¬LDº†ÃÕ»šßWUV••uÝëuìú{öìÙ±¡hÙâWùÉü6=K›Ê0ô7tŽ d€ vàš–..î"ñ–?¤(Ÿì‹ÓÄš5køˆ ÷|YzÝx".»Êâj÷ö ÷4,ÕXkÛÓ” ÷+nÍÆs d€ °£ðÀaûÕÕÔÛMÉf Ë(éQ¸fÍ:Ž ´†‘¥×­ÜV—¥n‡Ãáªê*©øÚ¥UU•€BIF]w¹4:ý¢E;NZX¿Z-[©Þ¥K—Ž>þxŸÏ'"cÆ{sÙ2Y¶dɸO‘P(4|øˆ·—/çt Z© £qbxèä3ˆˆá0(Öl€¶ÈV‡?[²ä©<ÐÔûàý÷–.Y"" ¼4éŠ+¦=8=™HÌš5³²’ªÞB©L*t©é¤Y–M3O@[¸™ê}èÁöüqÞܹóæÎÝóžD"1mêTvzÇcʶ‰È™q®Þ%Ý ­f° àÊû(£‹l à ³SJ4ù\p©^¸¨« Ât-JÑ«:ý ÂNWê…+tf‹²iÛfß@çæ8hÑšD0´©^¸§gRÕ«¸` Ú±½Ðz¤zá•ÑÂ9J åZÐéiC9Ì-B®ZT/\Y§EM`&—ê…+qºÎ ¬× × qœAèómAª.°Y@à6­„>?Ðz¤zá%Ö^i-âçMz q\¥Sqí´Y6¸@+•ñ2é~ñ± ÓRi¾+¤Ï´©^¸¨gÚOQk1‰ã€o‹T/Ü T˲‰ˆ2 ­Yv:÷ âð}¡Ö|m@ª®ê^b«µ6ysˆÃ,A®Z4܈ҕúµ¹¼  Óé®îàÂh=²lpƒ’Ìû0P²hq~ Ï mAªnТ)[€«  HõÂ`\ez­Öa<tb:Í7…š)ÐÄPhï Ÿ7!tbJD‹Ó·…šª^h=²lp#PÏ´W¯Òi"|@g˜B¾ÕÀÝHõÂ:ÓXÜæ-^Úå×ø:Z‹<܈ÒU†Á¸Ò¼-Ó;'@«fƒ ”R6p „€N?…P¹ ® Õ Wõ ³¶ZDч:÷ÂÚkà R½p)P§& Ù¢œ´©^¸ÀVéÕq¦‰ä Ós˜AøÚ„T/\ 2^— çé…t/´ž]àe]º»¬_<’0LeøD4™ú1IT}Zã¡`<£çi­Eñ}t^JDë–—fãªhR½®É+¦a˜†ˆØIÛ0ÔÿE$KD# ¼fÉÁ…¡¾!І©´mkÃTɤ6M¥•$ê“;*j=1øoStEÅtbZ ×…€+Hõº¦÷˜nR¿èígµÖÊP©4¦R²qî—‘šH›_TIݧõ±ªXóGº\ä¡z'%V_Ñ«à8EhQLÐZ¤z]“lJîX‰oo!-[¸~°Ìi{»å3¤1á{(δW¯¦]4tnÚyaO¥ù6Ú€T¯{”ãê1ñH"ü½ââ!EÊ¥”Ô¢v´*‘­oVÕn«kù%}†NjÇ?·ÏgzEi­©Ø€ṄI$ã+F óFXp…RŽk“Åë“É&[L%†Ò†S)ËS)Sùò}¡^yއÇpìd«¼Ôâ6Õ°‚÷ ­´¢U/¸ƒª^÷Ž+Œ%#‰º[nÔ›×+hXÎ5K–cU¯öRC­Ä•lû•Á— €´¹^¿!1›}߈D›«jÛ“¯vR~Ç£`˜Ê¶R½â¡Î†adVÕ«5éæÖ;Z‡T¯kœ[õ¦•H—ê5ý†8¤zE‹—Z&èÌ/¿åº]èäÓgÚ)Bs´á“›±j•­:©Í<ÓéQÃTvÒ¡°§Ö3S¢3Ûªz èw|ŸüÞA±uê›ÁT"¥DÛj×2¥ÎÓ„é•y¢ç÷ºå•ù€a7ÙÊoêxR´ÓnJVX·ýËhí‹T¯k´ˆ!ÒÖ~µvRü–cU¯6”cU¯ÞI’ªLÕÑ,®€¿ØŠíˆ'ã¶avBû‚f¢1©”>£~S“J;ƒxdÙÏ¢²ÂâaÅv4!†2CZ™ÊNšJDLÃ*ö—h!Õ  Ý‘êuMf tB+‡eÙBùAQŽ9T/­Ëömr½€ŽNÇ’MU±x]"ƒçô*°“†Rb);f~ÃŽÙJI"šŒTGr7ÑJ7%·XÛü¡@ØïÒc©^÷‚@¥2ib`Û†CU¯ò™:á¸æ¸Öâ¡D©Ö¢3ÍöR× •ÙדJ©^džE)-©ÎEÊÖÚPJDɵOç.Õ«Ó~¡k°ö Õë¥DÛm~V2¡M‡eÙLŸa'ÃJ¥=TÕ«éàH?Ef4KTþ«ºå/ù¾¼œÁùV[‹a0™À¾mèÐa?¹øbŸÏW]S=íþûëêêzõîý‹K/ÕZÿéü|ãFÓ4ïþÍoï¾kr]]» àYT¡¸ÆV¢ÚÇÚ¶VW}*3M£Þ‘³wbøŒ+Œ Ž ÃSÊåëP´Ö*dz`šlµÖdz`Ÿ …®¹îº{§ÜsõUÿóÎÊ•ç_x¡ˆŒ?餧gÍþÓOœ~ú"rò)?|ãÿ#Ï ð8ªz] dÛÉZD©ƒ.>P”|õ|­E)C©dÜq™7-ÞÊõfœéÕ„ÇÐÑie»™ìÕJåú«B¥œ¾T:uu `_uÐÁ¯[³fÛ¶m"òÚÂ…=öøc>ZÜ¥xûöšH$RZRRPTtôÈ‘·ÞüKöÀãHõºfºFxÕ;5†ßж(CD$u#õ;f;ÿ¹L¯†ÍRü›é^ce6èøS¤Û‰PeKο)ÔÊaÚm‡¼3ÀUeᲪêªÔíÆÆFŸeY–õå–/{÷îÝÐаekùE^ôâóó']q…a˜~jFUUÕ^¯_]hdÚ¸]WJH <ºk*%èÙm ˆ/àá÷•)â—<Ïnž%^ÞyRàáÍ+«í^‹Ê‡öjá¥*]ß¶"oVnž½-ÛÙ*9©^÷ÂNCeØ ©íhRö( Ö{üßñäüÚÕ4cO"gð±ÆC ‡Y›&TÆß‡:N 9ž•¡G`3™À¾-žˆ7Ÿ§^|þùK~q©iš‹¾:nüø^½z/{óÍÚíÛÏ9÷¼Gÿ÷‘½~yݺuìF€Ы×Í SrY¡ªÅ;­l‘ ;8@g \®ìÕ9ŸA”ÇëPtêë^À¾j[EEY¸,u; &m;×ÕÕÝÿ»ûî›rÏxêSO>Ù½G÷ò-[6mÚÔ³WOöÀ³Hõºæ´öP“ÛŒãw¥Éö@çàê©DrÜÿGkQt€ê£>ê׿×®]EdÌØ±Ëßzs÷CÇ߸qã–-[j¶oïÒ¥Kiix{ÍvöÀ³hààjä™Ãæ¹Z)å¥\o†EÆ\ñ ÛE¯ZT;Tõ:õÒ¿öq‰DâÑÿ}ä–ÛnÇã5UUÓ§?¸3ZöùÎ<ë¬_ß~»ˆ¼¼`Á¥—]nšÆŸŸzŠ=ð,R½î…±f.3½¢:Dd©µVÄÇÐÑéTOwWç\÷êMó×lÍTûºwß}÷ª+¯ØëÎD"qãõ×§nWlÝzç¯ÅŽx\S½_¸jÕªÝ÷ :lÔèãn¼áúD"qÓÍ7?úè·–-óÚé6´k×#J´•ª9ýúŠÛK*+?©vd%—™k-¹Î’—(ñ—ú•3d&ê“V$•3䓌k«¼´¸ [Ü^–ÍÈýw…†ca²­”!ôñÐþ²˜ê-.îRóõŽõGyÄë‹% YøÊ+'ŒçÁT¯RªqkcÖ&ÔÊT©ÿ‹ˆNê‚~yiò’J‰Ø9ÜМ÷oèzT‰4µ­E§òÚ;7@kI6&3ë^¡…Un ãSn/]ªÛ¡ƒãŸSZ¨êàYLõš¦ùóKafC}ýßþöôÚµkËÂekÖ¬I=ZYYÙµ¬l¯§ <ØõÍèÙ³gÛb¹°VÛ_lþT]»çuõuky¼>»¤´X’¹Š9óT [^™Ù­­̘aÛR®¥qç³»ƒZ%¢DJÃ¥™¼¦OzõîÕ³´—‹GpŸÃ d€~€¦_wé"!7?¿˜–J}lÈÍU­üºåÉÎ/fàkŸavÚ€\Êbª÷Ž_ý*ÕÐà€¸õöÛ'^vY<ß}ñc‹Õ1Y Úô²=‚Ýò†ªhó‡ò Cu• ÛÖV¶øÄÁ‡Ü^½C'rT¤š__»-R¹®*g!åÀúGw4%" _³¸gQù•;*j]<‚û"È ìØÿüœ9ÏzjÛÆŒ÷ƒ“ONÄãk×­}òôζ rÐÅ&ĉ¼¼¼çž}vÙ²¥íuXE¤[÷î7ÜxÓÚ5«ì±Ô=]»vtå•ùù"òÈCÓ7lØà‘móÔÑâ®óÈá´m^8#ZÜ6|ï{gŸ}Žßoù-ÿ?ÿ97uÂfãŒÈ6³¨¨hïðiWV) “‰„Ó/ˆ´ªGkuuõˆ£^·v]II‰a˜ëÖ­‘öìÕké’%ÙaYYYeeeë¿°G¾YàKÔ¶Ð´Š¬øöX}e´Å'v=¤´qkSΚõù‹­Xu¼¡*ÚÖfå.ND’vÜÍ.®ú MõM.Á}d€ vøvV«Šë¤ks¤2U^÷`åûÕ9`¨$/Ø#«Žµ°1>(õW}TCjZϲ¬h4šþwòòòñø¾8:Ó4“ÉÄŸŸzêÕW^éÙ«×÷ýÞþó޶í7ß\öâ Ï¿òò‚áG …B{&ª~üãó•RS~û›ÿ{ýõk®½îÍ7ߌF£ÅÅ%3ÿú—W^~yË–-—^zÙË xgó£ÑTBàúnܼéóÚµ«W¯öζ}܉ãOœ|Ç/¾øÂªÿüÇSûíÖÛoøá‡æ<ûÌò·ÞúõwÎ}î9WVýÉ`óú÷pà 7¾óÎJ˲ÞY¹2uçm·ÿjþ¼>ù§?®_·îªk®]ðÒ‹ÞÙ6ïœ-nžGΈ·Í#gD‹Ûæ3¢¬¬ì¥_xáùçß\¶ì–[o{m᫱X,gD¶§Ñ,._]Zºó"ÇÞ½û„Ãe›7oZºtéèã÷ù|"2fܸ7½×¨WD”¡´C2Ó0Ò­*£ŒœvÕ9ïÕ« Åj€ §-ÛÕIR;.’–­íWâôñ@¥Ör`—ÆÆÆ•»²å[Ê‹Š E¤ººº¶¶VDŠŠŠzöì¹yÓ&¹ð‹&Nš$"‡y䫯¼"" o¿½|Ĉ"ò¯o§–ºÙòå—©ñÔæ‰È9ç÷ÁûïmܸÑkÛvæ™g>þØc‘Hㇵ®®®¤¸DDòóó#uµ¶m·×æm޼閛¹yóæÝ/ æõéÛwÅŠ"òé§Ÿ&âñ¾}ûzdÛÔø“Æÿýé§S?;jÔgœÙ»OŸgžùLJ~("Ë–-õ"Ò5®®®JýZUeUYY×=_çä“OY¼h±×6ïÐCí߯ÿ}÷NùÑÎòÔ¶™¦Ù»OŸžsîyyyy/¿ôâòå˽³ß¦?0íæ[n=éä“»t)ºóŽ;Úq×%“Éúúú=?Ä„ÃášššÝ5•U••ee]7mÚä…móÔÑâæyäŒh¾mÞ9#ZÜoÞ9#v;äC¶×ÔTlÝÚ»wŸ¬žY’ÅTïm·ÜÜüÎysçΛ;×ãá¨Sñª•&»j‹äz-ðWõ*÷Hd #Ðu¹WåþÒç?§™ÏÛ¥—]öч®Zµ*uÏ’7ÞXòÆ¡PhÒ•ÿsÆ™gÎ}î¹Ï>û,õP<ÿêšå¯Ï:£F7hðà;~ý+Om^8>ïü ît{«\Ù¶@  kwì¸÷žßÞ{ßï>ûì³òòrÖ‘#ÙR¾eñk‹Æÿà¤S~øÃ½:½æróšÛs%—¿ªÿ–Ûæ©3¢9ïœÍyçŒh‘×Έþýü×Ï.¹û®ÉÙ>#²Çìõ>ÑNU½:]×ãØoÚNã=£ ¥Ý 6á1t†`W\¶tëV pó/*å8j­¨êìiÆÄIWD¢ýË_öz¨¡¡añ¢EwèžwVl« ‡ËR·ÃáÒªªmèÇŒ7nìØ»ïšœH$<µyÇŽUZZ:åÞûœþÐégžqú™güì’Ÿ{dÛvìØ‘ºæº®®nÝúõ}ûõ÷ȶrê©÷M™²bÅÛ“ï¸cÿý<¤½ksÕUUÅ]ºìþ”UWíªJn÷móÔÑœwΈæ¼sF4çµ3b¿ý÷¿úÚk§ÜóÛŠ­[³zFdwbn!uÌôjIË)¥s¾¥9•…ö*çÍí@kqµÝ»ÖÊCß©ka&ìÉ4Ík®½vkyùŒOî¾³wï>©ÙË0Œá#F|¼nˆ 0àÀAƒDdÙ’%ãN7÷‰ÇóήûÏþ3jôq" æxÀ7~æ‘m‹Åâ–åËÏÏ˲Bùù õíuX›K$«W¯>ꨣDä;ßùN0/ïs7Úκ²mž:#šóÎÑ"œÍyêŒ2ä ‰'ýæ®É_~ñEVψló ¾.Má‘J_B¤S+¥å(ÜÓ¢r]:ndcpš^½ÐñÊÝt¨ÒîwÿÆN_Mj[¨êìéÄñ'=ò˜Ž;&uϤ‰=jäÈ‘ÑhÔ4Ì>úèÙgŸ‘‘#)êR´níÚ ^štÅÓœžL$fÍšYYYÙ§oßK/»üË/¿œþÐC©™þàƒ©Î’^ؼ䣧Öçl€]_¿±¡ùCÚ0º~¯Ë‡^OjZ//ª®®Nÿ;¥¥¥Ñ†ö­ŸFiàÐ,x4”S,ªÓvÈUJŒœ^À©sÝæV‰ÊF³ ¡ ÃÏ­ÊÝþ ©•ÐrÛ«×püz[Ñ¿€7êu [~ÀqÝ^ÀÍb¥Öl¤Ö:ÇýŒ,dz‰Ž s̬îÎ ¹Ÿ=Ô®‹ŸZž‘iàÀHõ6ß%ʰ=åô¤vè9›ëîJ4}u™LX.àPÒs®ÃßÔ¢Xb€°,[óèÑ9\³/U†Êq”§s}ŨR"nW.k²ÇÐ håX›á”¤s=}håøÀp¾èr‰ªÞ汜rìŒàX*eè\'^UŽëˆ•‘•@–:(èø”û߇j-î>Ƥ–¬uÜ[[A?Ç@û"ÕÛ,–K¿K²ÊÐbçt;µÖ9¾zÕÖ:+½zÉõ@‡—þòZÛFî.NRé{F(eš|¦ÐÎKšíç¶Ú¹g‚ÊyÛ@­sÝ«W)q½¡á’Wèø”R¶rý5M#wcl¥Ò|ŪìvhÙ{!ÕÛ,Zóâ¼Ä¶SUo;­È’Û–F6.¿Õäz ãÏ­* ýåµÎa¦W”ú†FMíz´7R½-ÄŽŽa^ºE`ržëÕ’ë"!@Gç7²1Cj-v'%*Í'­¿±daIó]âXx¤EiÇ^½J"sã' IDATlÛ#—ózXCT6zõ’ì€Í2|YùªPK.«zE©4ëm[›ŠÞóÚ™]Ð,”sŽÕlçª^•yí%ãÝóuê”!vRl%†˧>­ÖOþ+Ôâ³Ú¡ñRZÜ^VGÑÚ:8Ó0²rJ®Ûäë4N‰h8hoTõ¶´SêsµˆásÜc:£’¥?yp1LµU£-M¶ŠÚÊ4TÔVM¶Xæ7æ¾CVÖO—tM1aVͪž’óž *mU¯¶5“€vGUoó`.ݲ+ÊqU¶ ×›éU”¨¨Ó‹?6v¾ÌŠòäû}Ó5Îõ•¢J)­r¼`_g§»^æÛ¼®–\öLP’®å-BU/¾-«éÔÇ¿+þóâ/ØÈ©Þ8Õ™êTOÞrXamï#ü¦JΗªz±L1•ÄmÙ•š¨ÊóiÓ§"Ò5_o«WAŸîS,;ÂF[,Óy#u®›(åzzY ¹cèØ #; —jÓyÐH·þª6è<€o/nT¨ˆ™Qv2Dª·¥XΡƒ²Å©0I‰S-4TÜ%’Ô¢DÊòÅP¢DImš*`Š­Ekm*n+Ë[‹¡ÔÊÍ-oˆm‹e¦kàË$©?/2b²¼Ðáe«§®Êi«^•6_­4U½pµìöÞËØ È©ÞCRÚ¹±¬’ú¤zo£.¯S-?¼÷üš¤V–²£ÊœV3Je£7°ÒZèÕ }bÍFUo®û©tš²ÒÍLáù_Þ}‰¼ú°uÀùu ÔÖá¿-Ž6±v@Úº*<ã¶¢/$záì/¾+þýÅeÖÜòpMí¼Òè¡Û‡ôKÆ?/˜?¹û²O¼4ž!5·<\S5«,zLõ°~vôãÂ9‡\RuØÀdôóÂ9·u{g“HIãØ«FÔ.ÚÏó_ÚõÿÞÕCnÝtÙ öGSû=:_vÏ玒÷¦ô{âeÓ#Ãêvê¶óΪïÝ#iÅ|Ÿ-*›1-ï€{6N8Ê|ýê~sÞé»ãš§¶ ø¨ë¯¯ ¸ºâÔÃþT  ¶>Ó÷îGüí½ù,ËÖ,”3”v\–Í9 ¬”©\;¶ö¥©êÕ’Ëj&ÃÑÔà2™Z³“ë•—õ¦¹EÓ«­Ó0îâøæ¥+ËíîÇT\yuÓÖ¥+Ëu÷£*pBór?û€Ó¶ç­*yiQPúÕýhb]žç†ctAMÞŠ’×W˜EwL˜RUúQÉë+¬¢~µ?:¿QD$¢ò ä‹E¥óæåI¿º³&ÖvsõãeïEìƒ.®>ìøêSJ6¬ ÏñLžWD¢bçUç/{&üNyò€Ó*~t¼¼÷r¨AâCFÆD¤ð¨úÞ¢>[œ?©ò“š¢ózý~JQ•Hê²³ýØ|ªz[ëLµv 䔈)Úvµ@Õ¶ÅtNÅ«ì”Ù¦‰q³§SÔ œRŽ‘¾Ý¢rü…ušÌrú5Û€¯l]Pö÷'ü…5 ‡Ol¨ZT6ó‰@ÞÖèáW7õM¶ðÛ—̜֥Úò 8&:¬4Q*â¹åÚ>*žùH—º!ö°£ªº§¶¶¯ 9j[ŸqŸñÀüI½ED$”whø±°%[ æ<•?pbí„Û”Äòž}¸¨ÚKª›ßýÞù""¾M‡ÝXÞ?™˜]°:RwøQ Ý7µbyo/õ•^³Ä·zqÞÆíÏ&ÖîWµ5^Ø|R½Í#RqªêÛ¹g‚CIÒv5†ek[ZÛ-üQ­Eå²Õ­‘•”,q1t|FV¾ÖÓ’Óž *íµ;ÚÖŠ ¥Ðš–µ[MIÄ”ˆªÛjŠH<¦â)ºx¹¯VDĈÆDü"–HÜ[ã‰Wû¢"Qq‘xµY+"1•ZVΑ!uç]²}ÈÀDž_‹_KdçGêêE_\?¬@Ç?*Zá©®’ryåŽiìVj[¢­Ôq©Ï[±Âwø uÃ2¤ã¾·Ud“—¦Þ>‰u/†rˋ间˥yÌñe(ѶË“ÔʧœCÜÄ*•­õÓ5e½Ðáea Éu!­RirË:µ2ðÍb_݌Ǿá#m\$áíѤÝÂÄȉß?T¯¼×”‰=ß.ÿêÞW)P Ã:´æ‡ØÏÈš ÏŽt«.~êê¾SíÊ«ëç×JlØÅ‘~cýâPHݼð²Ï탮þìþ‡«J?/úûSyÞ8RTõ:Dªck%¾,\ŸšHj¿iÇ“f‹aen—€ÉÊå·9MWÚiVÍR³÷ÜÎ!:M¯^_Ðìub÷žÒ]´VJ}8cÇñ‹ˆÎëÛ4dÿȰ"ÙÇy§5YŸ‡œªÎ›R9rbíÛ‹¿ðJµ²ö‰Xþx·C#GZ»îM¬(|¯zÇ÷j°bù+™""ë†ö“ªó¿(÷U—û}¥ Ùä…4+U½ÍâFçeÙĹU)1•$ÝÞ˜¸­LÓ1rÎiU¯‘­EuXí :øÄª²Rðªs>Š4²æÃÚšwÔ|°cǺHõ;8耈øÞyªËgÕ‰ƒN«:¦Gþœg""’9±z€ß·òñ.ß-š³È²VŸw¶gÚR¬(ž¿ÂX{ÚY ÑgËVFvݾ½Ô²üºaEá{õ""y⫎èðÀúaÇì8îìmMýòG‡xbŸó¶kÌ96jжVN˲)1DÛnWœk->å˜wÎiœ›´2%½Ðáeé*mëÜ6ëMÛ«7n'ã""v4É@Ëêf÷ºröÎÛÑù=¯œ¿óvâå×¾œºiÍ<{àÌÔÍÕ%wŸP²ó7ây3OÛu¿wì¹…›Šï=¡xçí­EÓO(Úy{YÙýËÊv=¡Ë;ˆˆÈ5ßY¶ë®ïíå½^TÜ¿ì¦~»7Oæí¾¹qZÿ+§íúÁŠž;¹²÷GÝ}[au\ ßzãm‘Þ“ò®ÙÞ ÕÛ,ZS"¶S°êXG«µø q=Õ›´µej§Éeˆ›6Âýv»›t/thYªêM7+giô "â·-¿X¥²êüñ§6Åüodz`ËHõ¶Ê9UË*­µSU¯!¦ÛíäkR+Ëám’¦qp¶õlôoPäz L¬:;/›Ã«[²õ•'€}O}þœ©].¼8rÞäV̬ú<ïÕÉeóW{aËHõ6ãÊiqn,«”±µv·'AÂÖ–áœwÎi¤Î;ѼjH6ÊzµÎíÒž†* Æeñ¢<»6jåÙ‘Fek•ú±¦AU7ð™ è4ª_î:ýå®ÞÛ.Â’b9缦Ãé!m*ÑY¨êõ9UõJN«zEe'Û«I"@§´hÉΞ9œAÊB‰kÐZÛZ™*iëT±²ÖZ™*ùa…<ú&Ÿ©´3Â’fiš Bµã²l¢”©$év$›´µÏp|Qe¹Û/†R¶û¯Êµ°Ð fVÑÙ©êÍåwž>C>P;‡´{l"}ºHY€ög° ZØ%¶SÏÇ"Ët?Ï+"I;]:Wå²Ga¶j²rÛr{ÙéÕ+Zçr´Ltøx·uÈÏ\ ý‘êm)&uHèj[fˆÎBÍ«$mm™:]ðœ»wŠÊÆ•ˆ°Ì tp:;ó•‘Ë>Có`SBò|ÌeÚ šކÒvšìªc˜´³±1R”'eɦ¤ ˜ZDR7š’*h%"ÊŸÛ@=;!5…PС)••/ ErÝÀÁéòDR…,R½Ú©Þæ!©8-®¦µ8¥;-ŸØYÈYšJΪÏ<8f¤.RÕÚ0TÒN-×tß»Æg9 ÔÝc3Î<}€/ϵ3Ò×"ÚÖÊPZT²>ññ¼Ïx#€WYi¤µä²å»e)§i°1!y4pà¤z÷–nU6çRù$ ‰PYö©±ìÓ¯ýÝ·ÆÑ~ÓÎÝnÉN ®2íÕëïbÅwÄÑ„á7í¸-Z›y¾d4aæù¬BÞÕà%Z²Õ«×È]‚Õ2«zme*ÛP¶­é‹Ø=sŒ¿gÎ ‹tãËñl>€¯#)æ”:ÜoXæà öW"¢”NŠ2w&€Ëq[*sÙŒ ©Å2s¸Kt.k§¾™2ÔöO"F³MR¦Q<´ˆ·0xè_l••¶ìJkÖa'œ¿`mJª_"Mm€ëºŸ5õÞýgýìÞÅ­ý?F/þäë3ÔþgM¾ý´YñÐ ü«^¤û©Snï;ëªGÞ%a ì+ú{õ— ïnÅ·¾3sê´—6Ä%ÿ°‰“/šÛ<÷Þ»^úBÄôóßœ³áî»nÏÂçÜn£&Ý1qðò›~ñÔ®ZÃü¡ç\?ñôA%R¿áG¦<öÎv±¾óƒ›n¸ph±U¿yù“÷M}£âë/ÒÒ£í;.)ùîÙ“.9yP‰Ä·¾qÏõ3ÖŠ”|wÂÕÇΗúÍÿ÷‡{_Þìï–vÉm×ÞtßESßÙ=¶>c/™xÎa}ýÛ0ûŠÉ¯ÕçxmFùI !©cùjRïXWÛX‹VÇ¢[£ñH,º5­njªijªlL&sº™‰¤øœVõ*í~D­u&éñü¢ØÚÐ-¾ 6M®¢OÍ«Ò3/vHŸ¦#û7žp`ô>M©ÿ§~ìÕ%žù çpaOŸ™®åPS\çY6ÇÕKg<6ÿ£¸ˆuèÙŽh}ýQë ÓNŠÌ¸|«ºà„ë ÆÇæÍ&Ï ì;º>é’n yѹçOš)§_}ÁwDŠG¶ß[w]:iVìäÓ‰Hɘ 03™ÄüïN˜rÇéþÍ5{þ»2ôgW­xìçŸ÷Ó»W¾|Ò¨|ùÎ…W#³®9÷ü‹n|­ä§WÞík/ÓÒ£í:.±¾3áΉƒÿ=튋~ò_?½~ÆZÉ>éªÃ7LûŹ?ùéäåûý↽FaíwÚ÷\\Róµ,vñ¨n=9öÏÛ.»è§?û¯É¯Õçx™ ÕÛ|—(å¬ÅwÄ£›¢ÑMÑ薦ȧ Ñ-MÑMцϣñÊÆd"§›™Ðb9¬³M“ÿv2xQÃ2“ñ–’¶µê/ÑJ]лö¿H^p¨>e°ü÷ö)ƒôa_x¨þá ¹ù„DfÓ™Q¹\–MÙif¬€¥nŸzzôÞ6L;#ÊA€&ÈYw>þì¼ùóç=;嬾"ÒwüÏzöÙgž}vÆ”³†¤²¯%GþlÊSÏÌŸ?oþì[Ç—ˆˆˆÈϧ̘ýì3óŸ}èÆã»Ë®_›:û™ùóŸ™=õò#Kšý©æO)=æç“N=Èê{êíOèwÔÏÿ<ã©)gíÿÕJK¥º<&Ÿ)èQjõ=mÂÀU3ÕpÌ€}FÉaÃû¼ÿ¿ˆ‹l_þÌr9lô~RÐ=¿¦¦Bâ5’_bYC/ùû3Ÿfã¯××¼7ó®›f®‰Ç¾ºoðè¡5/>óN½HüÓÎýtðèÃ,é=úpÿ[_R!¯xíïu>¢xWiéÑö—ˆuøÙ£*fM}éÓú¯î4bPÅ‹ÿX[/ß0oÆÊ’Q#¾–ë×l˜;忇ÿ]¿ÇÎè=öœnËzbyÅW_ år™E.œU{QÎ˲¥aš’´u.8Ämñ›¹LõÊ÷Šj{UJ RÛ(Åy²=*©W}iükS0£€dЫ×ð)Û¡c¢ѶÎ+E# ¼™ÀtSR¿ú™ªŒ¨=þµÞéÔƒu~ ¹=Úæ$Z‹ÎáW{>S%œgÝÅë¥8¨m-iÒrèP¬#'Þ~vlÆUg½¼Iºw÷o‘êÿÈž¸æüC–N{·àøk®9êóû/¹ú_±C&N½iÒÈŸM^V¿Çßjá);Ù4ÿÎÙÇÌ9~ÑOnúz+ßòr߯ÀòTZýqì¨ ÆGV­øù#3J«_~èÎÙïÖsôÏëÖ§¤bÃæçõæ 5ÝFõ±j6o/Ù¯U²__©y£û&ôùt¥uËô eÍÌ{^înõèï¬éS°Ç=ùݺù·þ{ç7FñÍ[#Ýöëcź•l]¹yç}›6Ôt߯Ȯ-±ú´ðèšö—ìwÄ~55k'ÜóÀÐ|óÂÇîöý˜eI,¶+[³5RÒ·›È5¼5¼S#ùƒö܃‡Tl8ü–ßߨ§DjÞÿÇÃ-ü"—£ÈU½ÍBGɤÐÔRŽ«µdëÈ)ñ«6pPrb¦Ãúªa=Õ€RÖKõ+QÃz©¡=Õ€RùÉ‘ÚÌlc2jàhZJœk¨uB> {À+”¡ü¦Š;L“ÿŸ½;o¢ZûþÌšeÒ¤I—Ú²P ¼¨²(‚^ATT\ØEPÄ«âzÙDPQ½,* ˆWA  Eh ÒšÐ&]’¦É̼¤”-bIëïûá£É,'óÌIÎÌ<=s¦LÑ-† 9‚2ZMÕK««Õè|Aæý£€ýÕÍüQ€“+€HÅ1Lµÿª?´¹±ý’o²"ÅíîÞïVˆ”?ð;Útlsdù‚-n…(P¾Ño–íQà—ŸXˆ„6]Ûä®Zð“(°{Ívÿ¯8m@†3VùÊþe‹so™úöˆ„ ‹ü«oÂ/Gš¶;2í‘—t¼÷F'j %Q>Ù§VVHÅÀÆÅ›œÃ¦½Ôͽhµ}`gÏNê`Y=aÂJ©ß½©ÿy¯(ÊJàÄß”dŸ"J"‰¢¨Tl¥"+¢(Uj½ªš{‰ãìöè”fI;§=õøcO½çî2fĵ‚’™îJéÞ3Q â;îžòçÅØ“ìöf)òâçúؤï¤OôN¢KZ;ç½zϸt¼ ä#ËN5š^T4j¶öUßœ¥Ù3:/3w¦ê¦ z®_@§^bÎúpMÓ9—Ù‘Bg#GŠZus_ª’E¼À?25úX6]Ã`¼µß´~ÓÎQòXë’¢#Ÿ+–ϘîpXüûrO¹öo}×£÷vm`!"K‚ÀÈápÈ^¯ÿÔe¿ß[ù½H‡C¼bМ%Âï-â/⟭ò§ÜfŒÙ@Dö®“'ç.ž'>š°ï€’k9b¹±°Ê1{"E¡â·.†û*‡VN·’ˆR½&}÷¶ïª1ÙY@ ]îd§ô¿wŒE–EAˆ""Ñ.È™²,bù4Ad9P©y©jK$ÊøzašG!RÒ¿Øä›œšBÛVO{;iìsïö¤€{çÆ —Óíùó‚|iŸ­< "Ϧuƒz6—–¹.aíœÓ!¿ª3.™ ˆcõÀAÕHdkr¯0FžQªéK[Ò‚æ/«¡ bV;K'jMg0\/@äWu]dôPu©^…$ñ‚Æê­ñT ÌPkñ6‘ûÓ…Ì‚ ™êõzeK‚ƒèÄhBÇÏß.¿>føO>:NZ:€ˆü~¿èpXˆÎ~ï÷ûý¿Ì2þ›‹>²‚Ðb@_ñ›—~‘û¢¶j—ËcOMÈ£QRнÀíªH¢J]¶ÌZ´ØÜ¾¢ÿö ¸<žN{xd!Éiñ¥ywxT†ï2‰ˆ’S쾬JIÒ*ç^⸷»ÀâŒ.oºEKyóîÙ6o¶yDDÑ=^¿*ëë?Kõú\>¡}EÞ›D¢Š .Míœ t~¬âÚñ,ýs“lJ—”àõƒW'–þëòàÕ‰¥]R‚74)½Ò©òl¦C5>V¯ÕËÔªgÊ*™yí‚J½ o­Èž¥#—®ƒ"Ã0"GÕ àÒèÂp¨aiáàP[iò9kôª®w”}›±Ü8¨£S ìN§$Z,¢ìÍõ É7þë Q`û†} n¿·µˆ»Ó.T“AÙþ;w=z] "ÁÞ¤‰S8(ü~ÙÑ A•k8o|žÅkÜJi‚àh@GrÑ¥ ¤mÍnÖ§{¢@ݾoq禬ò9B³½iÍg™Š’í¢”$AHJ‘ÜÙþ¿}‹²¾M—zöM•ˆ„ƽû4ËÚ´3@9i›ä}:G ñÝînåÛºÓCßeĸÞͪr+sÝNáúÁÝâ")µO{)=Íur¦Ô¬÷½iåg™T)Š*kgçºÌƶ”ˆ„¤n=S\[3”K[;ç½z«¸"­n°^‹¨>ÝU i é:Ç’¢êGªND:ÏÐñ@Í÷ê­¹kc–%ž¡Vu€e*™„ {~ºÎT¿Ó¬Ž(""“n‹³éªÆðŒÒžáMgÀA×tâðEˆ‚ ‡´j‡9’UÆb¸b/l  &²LHÓÙ^€ÚIÎÌÍ–ÜÙ/üÁÂ`•Wú[¦¿Þ`ÒØ9Ë'ˆäß7ïéñëù¯ s–ßâ÷Ù¾|ó¾®DD¾o¦Mk2a¼U‘üÛ§ {ys•ŸáÛ0íõ&ÆÎ[á‰üGÖLâm÷¹¡l_¶æ®—g,¹ñÀ𗯼¿¿ò±¶õ€^òªçv+D¾õËöM}y^'yß‚§³QñµAÁêÙ S&¼8ÿA‰|{?›¶0³|zt÷ÍÒ¼_@D™_®'¾5[ô|=5ýïÿŽ’9oú×Ǽ»ÄNWÚÛSÖ‘ë‹©Ÿ}zö§ÃÙ³sÁÔ•."²7KMuîWf*UͽÔqe-|yÑã§}ô¨¨ø2VN™²W!Ú{wD3RÈ—ñåôÉkÖ5ÅcÙ"†‘?Û$»€É.¨zVÓ8½ží,Í}þé•£š~þ*ÀùÂcÙNÝluãôÙLT1Û«#Öàõ¦dЕêŸt.«˜êÕIgªÙá›’/èQo,C<¾Ø‘Âh 傯–/,¥Ä¨³­Y“£Hñiò¼ÑêþX½WR<çò¨‘°%‡èõÊ5ù‰ÑV® ¨êØcí\žïâï–èú¶‚£…ç»–Y2–p“-@±FqEÅç}˜p:8··úµD–d­&£°G‹¾µ pQ`¬^€¿ã0ŠÎç'Bò¼DTÃy^"ª.ÏKDGž—ˆ. ÏKDÈóDš ÈóÑÙò¼D5œç%"äy Âa¬^¨ËW¾p‰)¡šxzõÔzHõÔzHõÔzHõÔzHõ\TÂÍ/þêMvÔ(¤z"žtÿ?~á&éüVJºù…9|ðþܧ®w† ¹î™¹Ïv°7"GbÇQ3>X´øã3Æþ«±@D$µúƬ·çüç™[‰ˆH¸|ÈkÏÜý·|º×iô¬Esîk|r’¹å]“Þ^øñ¢…ï¼<¤Mù§ þõ쬋?^4ïµQãÎ(¤ª¹—4®è–·zå‹?^´ø©£»& çEt»‡_™µ`á Îzù6§l–påÐyK§?XÓµs!êˆxÝŸÌ]±#p^ë4¹ù6ËÿžzxâÚ„;nkBD)÷Üc_ûñÖö&@¤ˆ»}ØCñß=?øÞûŸXB½F÷oLÝùöÆiS†þD¹å¶Ë‰(ºë€f¿.]_pñ?\ºòW'õr*-´|hT7ÏûÃî8äõ]ÍÚÙLDŒ¼‹>yúÞûOÜ``äíñ§SÕÜK‘(Qæ’IÜ{ÿÀA¯ïMzhh·è?‹Bø¿!µÌœöÈ ‡{7§ýãZVÚ%Cîk\à ¿©É(._K Ãô¼õÖ.×_~ûÞ»ï}ZQQ}jÜõ7ÜðÍš5«Ü}w¿`08îɱf³ù?Ó¦ïÞ½ÛçõžYH 0|µ‘Žèø@údXÿµ>’’’-n®¾ÿ~ûÚ§øÜ­H΋_©(Pñ¹•„ä!;9AÎöµ¸çaÿî[ÿ3÷!yχ¯Ì­œg€K$>Ñî9”Sþ«ÍÉòÅwN \ö”DaWã$òýÿ¯’ï'L@¿-™6wÛÅí=šóó.¢ÄÊcº˜ããÏ®òOQ\ž@|ã$A‰·ß•sbZ–/>%‘èÄ–‰UÌͼ´q$]~Û€Tåç7“ÐîlQ²íËÍwžð­Èj|û-ò'oîRˆˆ„+‡ I\ÿꇞÎ]ÃË]’(ÎG-Àá§íÛB¡;zÔj""¯×¾ü³Z­õêÕsegÑÀ÷ 1‚ˆ®ºæšo×®%¢’’’mÛÒ:tèPe!u,@"º»ÿ½é{þøã:YƒwÜqǼ÷Þ‹´ÌE °¸¸Øm'"I’üÅE’‚¹°]®ì‰Ï>ãr¹*J0MIÉÉÛ·o'¢C‡…%99¹.XÇ™*¬KL•Ö¥F¦ÊëR#óëÞ½á¹ÅÅÅÁ`Ðd6Gx#5ŒÓõjÿU¿–Ðú†Vþï?Y›­)nw€ˆ(µ'í)wôÛíZ_×:ûó~t+Dò…ˆ®]±'@DÝ;Zœ DBëZ»ÿ÷ÑQ`ÏÚþ×µ8õÁmòÁ¿Ï&"åÈþlïÁ?f+D”{0[v8-•–ÊušÜpÓÕÉ\Ùn…·ÛïìxçuM$ ¸³Ü•“ÇÙß~´ÿêgßyöšýŸìnÞ¯ÅÁ,ûÕþ¥O½¸!ù¾;›à+DI•È!E!Q?|òCücS_èêY²Ö> £gµ—¾ynâWRßþ-ÿþ DEœø‹‘\ ‹’@‚ Ȳ\±‘Š(H•Z¯ªæF@\‰w½¶hñÒůÞ!¤}üå¡j¶³ÒòJæÚU‡âo|àñ¡·Dÿ¶æç""¡å‡¿{w•çäŸÐ.iíœ ¾ü,zö¼uÃúò{ù;wéҧωIIË–}ö믿Ñ–-›Eƒˆâbb¼Þüðbùyù±±qÕR—lÓ¦Mà ߘ:åÎ;ïª{5Èq\bRRÓ¦Mïî×ßd2}³úë´´´:VƒoÍœñìÄçnéÙÓf³¾ô⋵ºUU L¥cbb|>Ÿ®ë'¢Î‹ËÎή3Ö±F¦ÊëR#sf€u¬‘©²ëR#S¡uëÖ>ŸÇíNLLª üÝL¥w—ξkúÖn;rfo(‡ÃØï®<ÅÞªÏÃ÷ÜÐÀBD§ÃÈa·Ë^ïi–ýï)ùrØíb‹ûf}Ü/üÞ"îOû09à?óµ^ûd:bÏœ‰3ï|èW?šýí3?üÑõÁ³ÿ¹ãáû^øð!÷Μ³1ûdR·cîÓ;ˆH¸zô”¯æøoKöî¸éšd*ør\br@…Џ ¬(¤^õê3«ˆ¨ñ}/Kæúþo´ëp H—oKŒ¦½oÏQY‘Q*»€ÄhQ(PQ˧ ‚ +JÍGUs# ®œåÏ \NBôå7ûÊiÞ= óµ£Çßâš6üÕßäÄŽ£'N¥L˜+ßÿpÒ†7çæœRsQëËÖåúš5o¾té’ðÛ6mzr옇JIiÒçŽ;ˆèðáÿef‘R*.öˆaÎRH 0&&¦ÿ€{g¿5«®Ö Á`0E……S_mÚ›o ü`BBBûŠvìØéXî±uk×úýþ[o»­V×à™”B!é SǬcÌ™êX#s¦:ÖÈT©î52 6zhÈ#Ó¦ý§¶42PLZÈð§ ij”^Õt¯W–ì'ß †N¼V¼8jÔ£žü`·ŸˆÈð‹‡åÏ>Âðûwøøýƒî¿Ðý÷¸£ÿk?^X®UqïøäµQ=17ûêÑ£oµ‘oÏço>}ÿã¯ý”üø¸;“Î\#ù¶~Mv¼!@åI:%y —LNŽ'ºqbyçÒÄ»ÏãªhÌ\yhɉ¨±n‰Ëˆ.oð’â%_ŽG9žå‹kœX¾DRн ËS©EªjnÄÄ¥ü¶~Í^©ÙåñgBhÙ9õøš%¿ˆ”œ-ïYвóå-»µKjvߌeK?[¶tÆ€Æ)½þ³èß7G_ÊÚ9¬~†ZôƒèÖý¦›ºwååÉá½ïè3ä‘GëR€%%%………á;s‹‹‹ûý÷ä ëR€V«õÖÛocÊ”íÛ·M~ñÅ&Mš6oÞ¢öXÅis~~´ÍÆœH¾ÄÆÄäŸè×\7¬cÌ™êX#SÅYNÝjdÎT÷™”&MÆ<ùä”×_ó¸Ýµ¢‘€š¡Ò¹ýµ¯ª¥”ý?î±ÜpÿuNH°;’h±ˆ²Ïí'’»ÞÜÂBDøiãþä[ïie'"Áî´ U—øéÛýÉw ¹Ú.‘`oÒÄ)\H8‚³ys»@¤¸îÏ–EÈÙ¤¹S "_öþì€`9#Û u¸¿«{éÒ,%×+¥$ Rr2¹à‹ÛÓ\—÷ê–(E_{g'ñçN<áK¸¼/Z»ü7Eq¹¨q¢ $¦HWàoߢCßý*õ¸³¥D$4º½×å‡~ø9@9Û~P®íÕ1šHˆïzWK_Ú®ãDq†Ž½ýrªœ{‰ã2'^~yt¸…;ßÒRÎ:ä;{ŠÇãKlÛ6œÈk{m|AVÎÏ3¾»ï=áO,9”õå“_\[pIkçÔân½í¶V­Û¼ôÒ‹ŠRþ‡ÄĤ£Gst]gY¶}‡~ûˆ5j$ ¿efnùᇛn¾ùýyï™Íæöí;<7ñÙ* ©Kæåå}ñùçáuÃ÷V¯X±¼ŽÕàÏ?ÿÜåú6~¿Áh4]~Ùe‹þûq] P–Aà%I*..Á,I%%Úà™%„B¡ýû÷·k×.üÄ$£Ét$’Æ{ýëÖ±FæÌ¾øüóºÔÈTYH]jdÎ,¡Ž52-Z\1ä‘G^}y²Çã© À?ÃqŒªÖüÀð…FëV1µ_“ʉYUÞõøqÖÉÏŒžµtœHþý>ûì÷K¿ºiܬ¥7û}Ù;>ÿqÿõDD¾ogÎl2nÜœÏ-"ùwÌõÚ–*?Ä·qæMÆžó©C$òg¯}ëÉ¹î ˆ'¹ë¨q¯9I–eoÆŠ™ßú„䛇<ój‘dÙpãܲN[¾É=w86Ìú1@D?®øþÖqïÌ”³?5£7D‚‚oæ~œ2nÒ¼$*Ø»|Æ+Ÿ}ã€Ë÷~4¿€ˆ~ûê;qÂŒ™‚gõ´½ÿWùíÙ«'Œžóq4rÒÞ}s}å|9mùè±3?.(žŸN[•CDöf©WÆïVý¦T5÷Çß御K‚¬(Š'}Å›ýªüI‡—ÏùjÔ°× !™¨`ï'3ׯ¾øKV;çr¨­_¿~Å›p—Þpç—ðu”Íf++-=}†©èüË\¢{!“’“ç¾óîÑ£GuM OykÖ¬ÔÖ­;vì 9–Û·oßÂóC¡ÐÀ÷YmÖ¹sæðX“ÃcR‹ŽûB Ã0Ä.,Îg0X"MFžäê—ãÏì´[]7^tï€óÁ˜¢m&KÑF“L"‘è Kdì€óp®7Çðt>9\d{àœé¥…þ2Ѥù|ªÆ;LLYQ‰B<p8ç{sLùánåç­Q¥¡Î`‰± ¡¢<¯\¦(¼*«!µLQx*•ÕsI𢺈=¨Aç}sÌ)GØsÌí" Õ3ÙcmfŽHŒaËLK|,§I‘)¶,àÂçà¼oŽaO®Šþ¼p(AY%"UÊH•RE#"¥LV±ÎF°Ä&Ô¯kôP™¢(²¬†ä2EQäÒ?9Šòá±w‘Û€‹$T|ôH©ÈªrH£¢Òb^Wü¥…<…U'ö@µ.üæ˜òÎ’ð5šLÃø†;íÉlxPTqÁÉ‹å¯áôP5%(«§ÊÁ@o6t9‰fƒÀ†oŽ©þXÊW$p‰è´Ç²QaaaxðôÊY]dx.ª ¿9†'¢ÊÙÞ*ax¨a&³;þ±.àæžeYMÓΜ!œÞ­èÌ‹l/ԯ׋p^X:u ^]בÕ¨]ØŠ~»§õêÅP¼µKÕÅ‹l/@­À†ûóž–í­Ì¡òØ™Øp>·r¶÷´Î¼x&@„;9€ÃY†kÀH‘Œ¥J™ÜÊã6Tôä­Æ"[yp†Ê)]¤wj ¶¢ïÙäEæ bÀ¡r2·bôÞsÉÀ¥ÅŸ}(Þèèh"b&œö=3)ŒÞ¾p¾¼^ïÙp8ØKçuå+wÝ­ÈÛ†_„§KJ*2¼§å…‘ç€óe2›Ïe±`I öÀ¹F«Àj¶ò›ÊcòV9J/ÒÁˆ¥JùÜ*j@z ÂÀˆX–Eb Ö),› —]v˲D”››{üøqì€Ú‚Õu]×uQÃy^"2§=¨ ]}"Ù)8„ö(¶Ó í iÊpƒ~¿Ÿçy]× ‰¨ò“Ù ’±D¤ëºªª‡>xðàÁƒý~?¡÷.@Í‹ïýÆÿ¾ž;8{"–Ðí¥Uÿûïè¶v@¤á5M#"Q›6mÊq;v,???< _¨“âû¾õÁƒM(û‹§F¾—©”Ÿ²¶}zÑ‹­¶>sßô½g]õÚ¾ëVî-À^€ZGjÜmà >š%9-ä÷¹³Ò×-š·,ç¶uCùX½¢(†ó¼Dd2™°_à!¹ç°ÞIç·J³~<Øó*;öÔ:BËG^slŸTɽkݧ˾ޚp¦8)p¥)Ø¡‘†?³ßn•e«²{/Æó€ZLÎHÏJI½{Ä-›&¬ñœ9[jÙ{Ä#wwH±“ßñÂÙó6¹¤ö#^ÓÓIÔwö×}IN{s&=>®múë÷¼¼I!j9|þk=®ÏF ]E$ÝòÚ¢áÉŸ¹oú^’Zö1¨÷U)NQöeïúì½9+ÓDßûwïvM~~ïõcuIö­1úëÊçáÍM›Ò7>cÞ““¾tá4þ²Æ‡÷iBYŸ>;vAæi'˜ñ퇌ؾY²ÓB~wVÚ¢is¾+?n;xøƒÝÛ&9HözÒ½üòj‘Bɽ'>xwÛù26ͯX¾Š³hœËÔ6ü¿ÒÒR¿ß_VVVZZZ\\ŒýuŸèÿî½EYb«{í"13¾Ç¤‰^%o?uÊì5.gñ“5Y¿Üé&r§Í~éß“&/þù—Y²ØüªfDD)W¥:ý~|jj< ©©)¢?ck&Q|ïI/>ÚÁîZ·ø½EßeYÚ?:ù…ЮĢ㪓†¤*™›6nÚé«üùÝ&Mê›”½òåÉÈóÀEѸ{‡$ò§-Z”yæ f€HÎúañì©SÞM ¤t1¶G<‘Ðlðk“úµ•²V/zwñºY.׉>Î.÷öö¬\8ÿëLjÞ}ĈnÑÕžEcÏÔ>ü¿ðcÙ°;àŸD\_Ìùºû«}ÒvëÌ]•g¥ôêÝÊ’ñîo¯ôý°“ÿwlûîÍß;=#ËO׋®Œ´]‡ˆˆäÙÔ*åª$Ú+§¶tºÓÖe·ï~Uª´ò»¤«›YäC;ÓJéÕ£•èþúÉïe*D+·*ï¼×÷î>-WÎl§=ÿ9}Wø®¹x""™¤¶ÃÇ»JÙ4åù÷Ó¨'¸„$§“(+3£ªž´÷_N ¿L:tÛ¼Y’@JíÝ3I<¸ìùçº*DDDžÕS^XED›””MIMÖìJ®ú,:3{ f”§z9ŽkÔ¨Çqº®{<ž¢¢¢*‡q¨[”̳¿ë0¥Ç£®9¿ÒÙkJ’“H|ìƒÿ=V1M¶KgvHÈIOwSÏf©vI¾*EÎúr垤îÛ¦ éIÍœ”½zg \”¼sOVùµ+=ÓÛ·{JJ4…S½îëvšÎ•R×ÔÔ!©Ë Á}®j-ˆ$ZDò“HDöÆN ù¶ît¹†?+#;ü*àóÉ”"Šg;‹Æ}j5£<Õk0*žÆf±XŠŠŠÎ²Ã0H@¡¤/|ocûI=‡ô^·D‘+Ï‘÷ÌvÁžŠådŸ»Š3Ô¬™¾>mSSÛRsÊšŸîÊLq[:_Õ*Õ™LÙ_ïòœèóp–Ï—Oï·ëlnÏÊò¦t8(uëœtœÀÅ9ñõ¸}DñSÚuêI¦úÈKzˆ{–Íž¼.ËGƾóhJù,±ºÒdY®fƹœEÀ߃=sRœ֪{öÔ%´÷æm•›ßýhgéÄY¨’år“èt Y™'dòèD¡â”WÉHË’-)×wk.ºv¦PÖÎL¯½yïÎ)¢/së!"R²¹ILi•RžóMJMq/;« Úíq1ù© ³7¹“{ŒÑVBýÀÅ‘•¶ÓMŽöw÷L<­;‚³y3'ùv.Z˜–™ãñPqêseûÉžÒ,éÜ> ú³h¨<1 £(Š¢(‚ èº^RR‚ýÿ$¾Þ›ßã­‘Ý;•™õåÊ=ÝFô|ú%Z¶nO´7Km¥¬ž¼0|Ÿ:´8صӧd|ý]f }g†<øªTò­NwQæÖL¹ËU©¢×ÎŒpQ«Wî¹eD÷q“ä/·ºíWõì•"gÍ_¹÷,gÈŠ¢ÒæÌþ¶Ù䛞¾uÔÔ´TüeJú¢…Û?}ýco¾Õ!mgF"FÇ'Y²½²Úí“)%õ٠ìzõI–)ÜeWÙµz“ûúž÷>÷’}ÝNŸ%%5>cÎÔÕÕ2VíY4Ô 6Üu7 ýöÛo{÷îýõ×_}>Œ ÿ0žÕo/ÎO™0ù…Ùߺœ]ðô£Û;ý.‘²uþ­ÙRj¿áƒû´uŠDT°3Ã%Šb`Ï®¬ð ôŽC$ŠrÖÎ=J¥¢6ú’ºñX¯æò®ù“þ½,ëO·(°köŒ¯ÝöëG<ÑÍŽú€‹Á÷ÃÔ±ÿž¿Ñ%¦téÓ¯oïîW¥Xü>6Í›½1Kl5xìØA×ÓêÉ烈83VÒßý÷”¯3©yÜû*{À'ÿÉiuÕgÑP3˜ÄÄÄŠ7áÁÂÉ_]׆±Ùle¥¥§¯Si¬Þ*y¨ŽÉlöz½g_ÆápqË)ÀùFYì€Ú©^€Z©^€Z©^€Z©^€Z©^€Z©^€Z©^€Z©^€Z©^€Z¿ˆeY¬ÖéÓg¬þßÿV¬X^11&&æÁÆÅÅr§©Úì·ÞÊÉqUÌýpÁÂÏW,Ÿÿá‡ï{à~ýú?þè#G}îùç?Z¸ðÈŒýDjjjaa!Ë0ª¦.\°à×½{Qÿp·ßÞëÁ‡~à¾~¿ŸˆAXúég9®ò Ï—_žìq»Ax|è°  †Ë—}¿aöüuÝoº¹Gš¦å{ógÏš>Uàyþξ}»tîÂqò>¯÷µW_)**úûž-ÕË0̨Q£Ó÷ì>mzqqñ§Ÿ, eoºùæ÷xó7*/pàÀï:uúø£B¡qסÃu‡ Ï}kæÌâââðë%‹þ»aÃ"j×îÚ!CóÄh|ŸþÉFŽí÷»ss+¦Øl¶ßÿ}ÂÓã*/v÷Ýý‚Áà¸'ÇšÍæÿL›¾{÷nŸ×‹½Erròm·Ý6þéqeee=zÞ:øÁ‡f¿5«b.Ã0'=ïÍÏzÜS%%%DÔ aâ¢"ú;žm‡»û÷ÿuoú‘#GN›.Ër8Ï+Âe—]öÇá?N[  íٳ纎ÃoÛµo¿û—Ÿ™s'<ól“&MN[Å,™{<ø>üÃ-˜ÿáü?d9®bŠ-:ºÐç;m±«®¹æÛµk‰¨¤¤dÛ¶´:`×À_Ô8¥É¾}¿–••Ñ·k¿¹¦]»Ês[µj3çíÙá>¾°°0|GFÇNÿí·* Ù°aý¬Ùo—••-Y²øO?±Y³fº®GæŸþj?!8pÉÑ¿Ä~k)ìÑFü¦-oÛÝ]ßÞNüÆ-ÓVláˆB©OïÕ©ÔáÐÈkܵ0~Ñ*¶ÅsÙCoÔöMoðÎ*¦íëG·£=S¼ÿ 9‘Åß~¼ÿ]ÄUùÃëcÌ„G'>Ì™×pÚžùÎ…GnpX ˆwßx|à€@’ãÄ=ùûâ'ް×öšmRôød¯“t礳&¾|$y]®ÜqÌñîJcˆsÿb[1ݾ߭¶xâh¿vQÞsëóJ6×›ð¼tæ~‹à]a·Û 5McYöº~Ý¿ˆ¶üðÃM7ßüþ¼÷Ìfsûöž›ø,~çp±DEE=ôðß/_^yâŽ; ¼oРÁ‹/R”?ìè¢$<ù¿)”¦MÞZZZãÆÞw¿¬(ªòù|3gL¯rù@ ¾g·ße¹º2 ¼ïÖÛ{±,£ªÚk¯¼üW:3ÀÙéÖó:mŽY½¦ä¦^%7L æow¬[SzC¯À mÞb÷µ¢_¢·å†Zõ*¼vxÞïÛëmŸ»§]n«AÞ¶~æövjÉ/ñ+")ÏKDAÒL^iËfÁÚÎ{m/Ï».\o9<¨ä²Ž%Ž%Voƒ@‹*ÙnÙï(9¼ØñKܬ)L÷Iž+dË'Ó¥â:P«²s„»Â¡ºÖÇnÛÏÈÕZŒ9ÚÿF5ÿ—¨Í~¥m§ü!“ØWFXJö½·”™ýÒ·Ë%ïCÕûmsÄyå•Wöí×_–ËX–Û»gÏ+VÑš5«GŒ9cÖ[j(´xñ"Ü! ň‘£’’“9ŽûjÕª´´´Ê³TU}ƒ žûî{Á`‰®éeee?ü°é´.nÂó"§zW¬(Ï^ïþùç‘ÇѶmÛ¶mÛVÝòyyyO~=cúÉ,ðˆaCÃ/ž™0>üâ­™3ðí¨A²´zJô.Ù˜Ô©äZ‹yõûv™µ]à‡#Ga÷OMÜODD9 ¡7ÊI ´}·eÅB©éð¢Á“’MËß¶FÚ3fŠW9§®""â³KÛŽÄ4Qiƒ´m{ÙþNëï]ýNâö|cVw“ó“tà'Æq€¹â áêBf›¶íãnj£y·Ø6n ‚ÝÛ…Èk[4>æL;Ü¿MQÛ&¶uëÍî1…I~Ó¶%VOuû-²R½y¸âõæÍ›7o>}óB¡PåKN€‹bö[³Î2×_TTå_“G•@•—'\‘LDLP&òó^?‘Â(2C¤ÙË®“ß銲(‹.ˆ‘^É»Æz`P •EWöY·Œ´B-†åõèTïÐÒ…òë!.}ƒIilÛ©ÌÔN&¿eÛv6Ô@ô’îhRf²stòòùu²Š-!«…è€àUˆˆóz9"Õá :r.û " ‹]U‘™³ +—8À}W§ ²9þ­áÉ‹6ŸLý%ò¶°0%~VhãëÑZ‹¬ˆ:úöõÇ{£ŽIž2Ï\]psÔ~YkÔÕÛª^´Ýº?@´ßºb½`½ñØ”å®NÓ÷oÛÿPêbûù"?‘CqD¤:*ç=Ù[?û~€ƒT/œ?^$"JÓ®7´ •OmRØ¿W™pÄ1w’Ã%ˇ% µÕ:O$ˆJ|Ûƒ'7ÍgÞ¶š–$ŠüþoL!"äví%×¼o{Ô¶õæ|KÈTW*®ØÍ+¤5àé÷´¯mÖÍ9ŠNñô{)÷ö6ºrÀºç ñA/QBÑOç PÊW·ß ² Õ çïåŽmGXG§üômólùDD¡ŽÃ½D~ç<Û»­+Ö BSoÿ¾‘Ôt{ôªí¢Ò´¨×]%Áå±;ý'¯‹öo0—ˆºà•¶ýBDD*Îe…„’+Ú_Û+ÿ®ñ®‘CêHgÖàzû÷ûx¡iñµíJ£ˆ=0½þט¨iq§vrñ/Ñ &Ûµþö3jÊ»ÊùʪŠBUí7¡Ò—"R½§,:YBÚƒ~Íy?Idÿda¿@DCªàܶ·ã›ŽñvŸs±%¹Æýóê¯XŽk'ˆp8]8UhÔÂG£° VÁcÙj=¤zj= àP;ÄYb›kU×âù˜|µ –³—j¥õ…ø VЂI¼37”—ÀÇæ†ò¬œ%Z³f‹Çâb=¡¼x>ÆÊ爋å¢Ýj~øm<ãå+š’$&xBùq|Ìñ7Žwk¿ê¯'Äùây‡W-”X³@|V”ÀÅæ©¾XΞ§úˆoËùâ8GÅÄ2]Näùjƒ³yÕÂh.ªD+-ÖKêñqÞPƒö† ¬hclCž½žÍ§Ú9«O-ÒuÍÎÙ|j¡ƒ‹öiEvÖêÓŠJµÒ>¾P+²±Q…š?Š“ÊÔ²"=àäb 5¿•µi~áEâ 5 ]ž¨úC¤Ú9k¡æf-Ej Š“ŠÕ@‰Làc‹´@+ùµ€‰5)z¨XõÇqv¿´0&¿dÖÆY}Bä4ô ÄšK´YW융X X8©D+5±Æ­4 âùØ-hbA­ÔȈ*i…jq oj¥&ÖÔÊÒ ŒX¬¢8K™.±L—KuÙÎXJôR#k,Óe‰e$«þXÎQFŠx™B<ÃQa¨ØÎYe ‰ÄËRuÕÎÙ É/:¹®ò ÒÕ½4š‹ jeFé*Çpª®jÅ1\tHW9–Ót•ˆáˆ-Њm\”¦k,±i²®˜£_š£FK¬Nš_ FsYS8†Ó‰"¨@-´s6" OÑtgùµ8Š•btÒbKõ2‡` è¥ä,/ŸeØBÕÍZTR‰–a5]e‰ËW 쬕eXUWy†“)dd ^µÐ˜Âñ ÐK-¬¹D ò,Ž]$Þ§G³•t4‘ø2 ‰Äç«>+gˆ“I1Xª—™£W+2±†ðÞ60¢_ 8Œv™QJãS¬Xª•™X£O-°²QDº¬‡Â5hbÇCùQœÅÈ‚Z©™5´ +yÕB#˜Ys‰VbfL…Zqg)ÕÊtÒÃß cÊS ¬œ…#6¨—ZXɯ,¬äåYX³Äš‹Õ€•“ µ€µä«ñVÎR¤ú­œÅ«:„hы㛅¿Ï6Öâ å[9 Ïð-hc-…Z±µæ†æ¸êÓHKœ9Š;‘?¢äÆ Q®Œk”$8]Š;YpRŽZX³…“ò”üd!![ÉM²”‘g¶|,Y¬wD>ZŸÏS}Šj Ö;"k,&k8Á¡ëº¬+õøøc!O}!®X-12†€|õÈÜZt˜@ªþé::®j"&ÿ¡m(ÔÿC9ÚP¨÷‡’«ëZ#±þJn!ሒÛ@HÈô’Býl%7Y¬—-‹á¢£µèƒfG²Õ™­¸Ãcˆã£³•ÜD!!çÄU]k Ö¿õ„òê ΢? —6ê¹BîdÞY ÛØ(‘ድ’d1!'t<‰w*zÈ™Ed]‰â$EW4]ó„ò]upÖ"-Ï;ËG%ÖT —j¥‰‚“e¸z|,ÇpFÆ 1æªÇÅñÄ&ð±<Ã3ÄØX3Ë0õøxžác¹hžádMqò1<Ã9ùX‘á£XÉÄ¢Xs’ 2bog‰X#V£•—ÊHÿ—!ÝÌeN²ò’ÌÈVÖ,“Ôù(Î$3²³(LÈ̆a4ÝÆ™C¤„ÿË3¼‰-¬ÉÆšU Ùx‹Jª¦«fÖ"ÅÆKšªZ9³¦ª<ÃZy“®ª6΢«š™yŽ%M·ñ©š•“Ucˆ^c4뉉Äè!]1³FÔ(^b²°Ë«1ÎL Eq£’‘=Äfå-¬ÆJ¬‰ÕXtcP8³•5skaMËÈšbf:£[Y‰g93c–aô(ÎıŒÄ–ã‰ÓuM'ÍÆK¢ÆY£¨ñª20bt/•ª¼‘5”j¼¨ókd4ÆÂ™Ë4^d ²&è¤Eñ&ƒÆXQÖV'S£x)¤+<#„tEÖBF֠ꪑ=$0œ¢«œÆJ¬‰gXkPOäUUâÌ!ÒâB¤éºÊ2œJª•5k¤³Äh¤—겉10I¬Ict–XtVe$Ö$0¼È ?)Qœ™ˆ†!"E Äkºjå%†tV'Agͬшå˜pù,1:ikRu•c8ŽØi<±2ÉÎħ’Æ1\™&!Df‰5‡#žÕ3cäFdøpì<#¨ª*±FM׉!‘dMYA&ÙÊVT4Yd ¼Æ£Â(fÆÞÛFÖÀff oÔ¨Qa°ÐçóEâ÷!99XÌËË‹Àm«Ÿ˜¨†Bn·;·-!!a˜cÇŽEà¶ÅÅÅ ×QWn[LLŒd±9öGn[tt´ÃáÈÊÍŠÀm‹ŠŠrš<p« ©^ø§[šûÕ¯{ùå—» ]%%%Øpiá±lÿø~V­©b¸`Hõüã8ò‘Þ¿VˆÔ®ï v_nÞ’,Ï%%JÊÖ÷ǾžY H©#Þÿ`úÎ)ÛNVI|¯ýÄÏÆ>°É'Ä÷˜8íÑn['¬)°ÇKóœðeA¥bìvÉõéS#ªæc”ìì@j÷¶ÂÎ…Û;_ïôdûÃo\ëæÏ£ò¤¿¼sÚÏoRˆ¤fƒ_xiL¯ô‘Ë/ÁõÙä¡»\!é–I¯ë½sô2w|Š=sÁØé>Šï1qÚˆ{wŽ\è²'%»—=ÿà.Ý~ü›cÜùÐì½U˜ÔcÜðæ›¦ŒÿÁCÂ%$íûúœ˜-´3ûÞ¬= ¥ ?Pülü›<ÑíǼ6iDÖcÓ÷žþ«þŸ½{kªüþyÎvŽÈfnS™˜à÷'Z@æ=E+5¥¾Š–’yùÞQEÅ»&iÞËR3ð†¦d©ß¼|EK±Ð¼C ¦ 2L¦m›À9Û9¿?Î6l(i1àó¶xsÛóœçŒsÎgÏù<>CÇø±–’k÷F…îµý—.ôMË®QMŒB¡¿ 8 „BÕ-Þ}bbBþ¥ê1sSb|¨·:tÕ'ᯇ.LÖ@ G÷Weçÿ—]iëÉüzu¦ÓÓ²þ®˼ºèÅ\8–Yv?¨5Ye3 о^ÚìlcÅæ:gŒò»ø5Œ®VÏ7ßRŸÿ&Í °¬µ>¬Þ@+Õòrµx/"0cýލÐtçA¯è}“]C›!„BU… B!„j, !Nç ‚ù1·Â\ß¿þÀ #Ðmz´1¤ÆœÎ縫{“. R''{éðñ|㯿ÞU½Ð”†ö›hÑ££üìúù@þñÃ×'j£†p÷Òá³zýõë:U³¦4@P8»ò¸åöÿ:¨6ã ÿ,îMµôçãOjËÎÓ¦}sþ­˜12&;iQ¦¸´ÞÊq€ÒPÌŒ¸¡šI 9éëÇ¿ÿ9Çq ó Ž‰›=F3þ“ôrIŒçÿ—5ò­nŠc‡ ¼Þ|NÆgÃGÇS@ÄÛÇ-WBþ±OâΟ~…o.\;2P)g³¿[¹$Ó¾˜2ÿ1C}Ïo\m¿hß÷Æ´ËÞU1q×€ˆþ@ç;‰fVgEè€þ½è´Åéh¯ä0QÁm•Yô2¿ýÛÉ!ݾ3<í34Â?ýóØŽiUaû½øe~ó©ý¯QMŒB¡¿C½!„B5ðî_Ïý«[Iå =üóö¾ß<:C‚îî]K:NP©ä†_­9|9Î W©tƒup°AZ¥R©‚æ&vdîþ*FÏXƒÁ.–ÄÐr9£»­³L4 ˜Àá)Hß<îÝÍ@{ ˜³ˆže—8Õ7ta„òÛ¨ð“ZEÀ;3âÁܨýà8±ôßîI04@9Ö‰ÆìÃ;~ê?µ¤—ϧ¤ôªòð•^m ?,Ñ€Ÿ£Ò°éë?˜{’ =:OXÍF,O{ʱÀ‚Cs‡ùv›³t*D~$¾í3(n¢×±Åsí#˜^Áq1þé+c•¡à‡eÓÎ_z%*9Çu*²W´Õ7ÝÒŽY‰ñßMˆX¶y «Í>–¥Wæ—~lhŸ¡®lž™ÅAÅ>½¾ýßR^ØxÞVèÔÄ!„úk0B!„PÍ#mÈH¹;MW5;‚Ng7UY~¡U*¹A÷8ƒ·q:ƒáîá9#ÂÂÞ {/44dbR®“% VÞTeyvœ‘cþ†§‡Ó¦sHãàk÷d¾W»Î²óûÅ4¯é{vžWvkW6!,Ð`—ÀncFGAx.ýØ½ÕÎx²|÷aGJKI¿¯¿«ÆÆìS{Îs¾´gÿ¸íίžûmžÝ¨tÝfĽ™»q~B–ÃÁ Z­Q³gù¶ÔHG ª¥"àѳ¿oÖ·Çl©8ŒYß.Ÿ46|ܤØUÙŒGnº]z ¯W_ñõ°ô«o’÷}³uL ú­EI¿ã)6mÛþÝàØ·éNÆM¬MŒB¡*ÂP/B!„PÍóÂã,öØ9,¸K‡Ï2Aa]Õ@·ÚæîéÔ|g  yÓfb\øÆñT6hdp €LÝÂ[æl­ë©—˜Ž!Aâ;„¿€mù„¾þ>–è­Ìç­7}ósr9 BgDtóÐçÈ[u£˜2¿Î­@“k¿¶>Jˤþr¸`™O€Ÿ‚ ½‚‡¾Âž?ŸçðIÿî‚ò ¯èSNêY4Zѹg€L“­}ª¦=üÄôÂ@+; h'Ódj<{ΜÓ={õâ=v1]e§©qƒŒçm:_ySí¡•‰ú^SFúÑ.P¿oÊ~ÚŸÆU\£SĘ€ô=)`k✄±¡ˆÿ ßx%ÿ»¸°i{ò”Ý´Ó|sÌÖŽ5§‰B!ô×a„B¡š‡Íº›ËºI*ïÙk(*,ªâv¹Ë›–íµzoìÝÔõËöæ:]Ö˜º÷ø ™›’ýš0cæ„E Q1‹w–°ºK sææ¼ÃÆøãsc>=0 wϦž½Û [ó‰0^=#âf{É€c9ƒ&mcüÎ…: 0@£„SÚ“›ÖN‰Ù¸™Vsråò xù¾­dØ‚¬c«ãiÞ½&,Šó¢åô9?}¹$!ÛÉûe¥ü¤ï¦>VÉóúL»¨­»#@ŸslåêýÓ­±2à)qq šå8NŸùÝG«N¡]ø^ñR¾²â«w-Ÿ– ÙÑjd¯^°hÛ[–iéÿû­ÃÂhSVnì¼2jtZÄ¡j®È:õïn8e?ԙϠe³¨–ÍþéËy éÈlMìdë^ýC¼ÒíµtÍib„BýeÄÓÓÓö‹ @_B6lXR\\~BÄ%m ×b­ZµÊÌÌÄzaÕ°jX5¬V ë…UC!ô´Ôww×=*?ŒJ¥*zø°FT§eË–æ¡K–Ö·E‹?îß/,,tÁ²5oÞ¼°°P¯wÅo ¼½½‹ŠŠîß¿ï‚e{ÎÓÓl2åçç»`Ùš6mJùý÷ß]°lMš4©W¯žF£qÁ²5jÔH&—ß¾uË˦P(T*Uvv¶ –­Aƒjµúúõëxµ‡ B!„B!„B¨ÆÃ!„ª~̓›I$`6ƒ„¡xÖ, u“˜‹ÍEZöîÅ|Ü?!„B!ôHO!Ô+•J‡…½ø¢?!„Í/E IDATaèÝI»Îž=c¿@ï>}Þèݧ¸¸X*•~öé§·nÝ´Íjܸñ–„Ä}_'¹e‹mâûÇ¿ûîàqcFß¹sgÎܹ[oߺ5)rJ@@@aa!Eˆ™7'&$ü’‘í‡BÕê»{Ô3³¼TJûa|üÙᥡ^¹\þÞÐ÷ÇŽ/))iß¡ÃÈQ£Ì›k¿úõë¿mÛºÕd2€D"yå•.999âÜukÖ??ÿ™g@C…¢@_€» !„\Y“ÆzvíõëÕó}Þó—kÙ†‡Eÿ÷=î™Ç÷ÔrõÎ[°ÀËËÛh4.[ºÄ~zqqñÚÕ«>Z¾âæÍ›&·fÕêr+R”äðáÃÃGŒC½o¿¹yó¦À—ÚT|‹wéÝ'X©T/Z¸ â­Zµzê;èÙgŸ­• _[ë…UêaÕ°jXµšX/ÒH ê ŒÒÍÁ, xzy‚©AUËÌÌüÞ…–∠¡š3™þÖí‹âàLѰaÃÀ—^JLø$Ri=»u€ÿ9">0jÏÏÏÏáF‡ºiS©TÊó¼ îÿ&Mš¸×¯ïš—ªF6l¨V«]°l …¢¤¤¤qãÆ.X¶gžyÆd6+•J,›\.'„4lØÐËæîîN3Œ\.wÁ²Õss“¹»»×¯ï‚e£iú™† †ùGÞKÚþÅVc÷Óܽ'‘HÏ4hå'sw»ž{×áò©´‘J%ý›¯Šyž¿víZ :í>µÝ±`Þ<\¸xÉ䈉ÅÅÅ–ý.‘ô ~óÔÉ“7oæôï? SçÎ?|_þœš•™Ù@Þà9OO³ÉD3Ìí[·¾ÅW»w‰çãö:,\¼$rR„Ùlþî¬þ™¶Úz#ŠUêaÕ°jX5¬×#yH›4hèþP_ìà.½‰wî\¹Yz½þìÏg[´øî%„rµ[ E ‚`»x ÷K•<…ý%—Ë …øÚÛÛ[ÕHuçÎ tîÜЋЕ EQ oЀã¸r]qE'N êÖé•WNŸ>ýÈwôóóÁ5¿úC!„ÐÓ%`¬!„PU(•Êysç%%íLKK³MlÔ¨‘øÂÍ­þË/·½zõ*î(„r¹ Š2—M†#àææ†»æñ=…r¹ üúýä°=BOnLø¶×Ëã—U\ !áKHøwB¹î-Š¢ì‡¸@žr” ÖEûßÑcÿ;*¾ 8ðmû8/!dvÜ\Ý̈ž.æsoöüóþù'¬[³FL%I;¶‹ƒ“uìØ)<|ôÔ)‘OR$»!„BÕ}UNù‚Ó,¾¡R´OpÔ¬pÅðY c®¢ïG›Gù€ø0ö@ôä­9¶…A±GÊvœ}Ôh· E¿G{¤Ì·ö‚-6ïÞcÞ–È€_–‡-Jåš_> >¶5‡š·-:€3°Æ¼‹ÉŸ®;’óO„ó_Žüb~O™ø€ {aÝÈ¥§9ºyðQ¡}4[ubÊíöU‚6“çDŠûÄÝ?|Ñx¯,Í ®îŠÐž=Fô² lÎî©KOþ3=¼‡Œ-È:¸fžkvi¾vI°‡õ7†a²Ãg}ÍÖÂ&F!TH1—½1¡¨š‘®÷ÁCv%í´Ÿظq£Å Ø2Øß›9+vË›ûí7ûåÝeî÷´Ú',†zB!TývÝEè¯Rt7Ü+/OÏ=î\eY֖ѳV +º Ujõ2ªqÑ¿ÇËô…³– )‚º©µK°0/%q XÆ4ç.¬µààÞrxܼȾSöåýí;–)¸”Ø!kíxTzzi¿^~IË):M_6yøÅ1~q¸²gð´ñ~©+bOk®îŠ€¢[Tì›Ú­ó'ÑZ›LÖuü„–×–Œs üÇ/š~mâš_lÍymóäw6[ñyU$\ÔøÔ¾&F!Tûï¡$T™ðfž¢ª³ëGýúõŸþùÒ ‚F£±ïº+òóó«W)—{ÁϯՕ˗™öÝÁCz÷ V*EEÅ‹.xÂã0v!„ra`¶Þ¿‰¼käêm»“öíÞ<`+¨»LZñEâîÝI»·}ôA{qš¬ÕÀyv'ïÛ—¼{éo»õ•]¦}ñŬה–e¾Ø¼{wâÚé¯zÐí§'®ˆ5íê 6oÛ0ëß-hq¥öã?Ú¶;i÷¶ÍK‡´b°ž£öÌ–óh{.­”ÑF½±â²Š®á¡tòÞ›cÆlúÅ<¿×;É,¿zt R¤ŸÕˆ ž=ÃGõô*·ÆÃk)gµJOb'(”rcA¹´"ÚÓ[“/i9(¸p*Gæá!s´¦¬mÄô`ýæùûr8W¨ˆgP3Ÿ~Yç ýƒü²&_{ð0#é„ÖÿuÇëÒ/‡SŽäÔÎ&F!T”KàÕ;zGQQQ¦¬¬¬Šq^xwÈä={ÊM”ÐRÁÚ£¥GÏžk×­ßôÅ–nÝ»—[ì«Ý»fÍŒ7vìŽÛ.^"y²„êE!„ UžžŒ*ÐûÆÚQƒÃÞ¼Þž>¼ ºÜ¶Î<8lú×Lßáo¨èöãf¿Íî›>dàÀ!“×ü/׺6ÝâÝÙãÕ—®ø^oYfÛäÐÁï/8ÝlÜø«€iÈ|=kÊøñá±ß«‡ëBȺŒ‹nŸ¿f\ØàaÑ_3­[`¬÷éàr.ü¢åª2—–ÉüG}²é‹„ĵ‹Çwõ°ÄòAáoÓÉŸŸ1íxKgSr|zvr€&AÝeSr*mC÷–=;2ég¯ý;QÒ=æ¶1ñ‹Ë£úµt/WaŸOmNNÅû2Úwà¬påáåë/]£"²–2-´ùèÓµ?]8¹‡'  ôRµy–h´Œ‡‡ÂÑºŠ ÿœÃÇïÕÒ&F!Tnˆ„û°Ï „rõ;‚æÍ›«ÕMÏž=[nzöõë­[·_OI™<)âü¹s SÏÙvÎýü³R©T*•OR õ"„B¨š œ…t&ëuŽ–Tö_¥Ø«Gfs\þ÷/Ó]½€Ë½r%—€Ü«™:YS%Ð/½hø~÷Ñ\€ËÏ·ÃT]¢c_Ë]³`ß ¬Ë|ŸÀe=’Ûºk+1ŠtûÇ£WŒwoä²*µ èÖ]u?î>§ý¹ƒ?Þf±«wfåÈŒýÁÈÈÏ/xšÖF…2_o8Uà<ëªñbÊ5ÏnA ðìÓ RSr–þã?KHübÇÞíó:ç%m=kü'ê”·5zìèÑãÆŒ·`?Ïžd׃—öÞöæ®ä›Öò ß×Kæî$šYQx*”-}ØÝ &Lž8ÿ„,,¢Ÿ'Èd k´}Z8Ž¥eŽJìÒ×ãÂÁ3ÆÚÚÄ!„j?©”)Ó§U ‚ qù\½ï ²ïëdA(Ÿ“îܹs©tĈ‘4M?ÎvüüüAÐëŸhücÌÕ‹B¡j¿¨#‚³Ù0‡¯ ¤÷•È*_È`þx£é\‰Ãy¬Ñ`‰qz½Q.—Ó kÖ{Ô°Þ-T ­TÁO RÉWóˮɴèûn Öxк¾\¥jÖuÞ¶×Ä™r¸!—°œÎÿa•Š1^µ^ºêò Æ†¬&'Fû ~9üKH˜¿BáF'Ï?]PéjÆ Ç3Âßî¦8šÑóeãÉeyÐÒáÆ36Œ[pŠ =:·$Š›²òÌ? är\Þ©m)!ËÚúAêðìýbÆê¹ŽÊ ?µ|æá€¸%SfDïËq‘ŠèÏ&¸imêñ¬÷ƒýÜS,£´wišá¸Š_“Ð/†vƒ”ù¶¾µ±‰BÕþÛŠ¾l®^³.þœßsžž­üZ®úxEÅYf³yΜÙ#GŒÜðùÆ¢¢‡/”””œ:u²ÜbaCßÿw¿Š"f3ÿá’ÅÌí[9 õ"„BÈ…/÷{S4"²G.$'Ϲ8õ229À­TÊ z×jXì0ÕîéÑGó9h5î‹hŽ•5U”‰âÜ=¸`i‘œžüY&îÆ®“wÛG„÷[ÐX™Üº5¹L†Íè h–…€×;y½Üió®H†aØ„Dÿá+Ï”ëÿÉýr5ÊÙ\ß®_·¶âôY3cÄëÖ¬~ºåÁ!„ªöË: κ8,Û“qþ ¶¼uïÞ¾4­~­ïKÜ•ÓÙ´\&Ý] ìÒ·}SîêWä¯ ë¢¦h¥Z-`:}îÑuÛô¯D‡ÒÀ]þþв÷¨×¼i™W µ³çÓ¸«?fªzl/Y`ßÞÍ0Wï߆ö8}|Wgƒey´lã£Û«e¿5§.œŠgÐËóä§o9¢B€Ë8tQ:®“þDjÁ£K¡èôº¿,/GûTØÓß¿ @{tÖSqñT€¢ã䨷›}qáa¥+ß;²f{AÏIÃ[ÒÕ_ãÅ”,Ÿ!a/ÊhÏ׃}òÒ²8.#5ëw¨ àî?¨GzjW®‰=û¼é™qøDA-nb„Bu‚„¢x¡ôê_ Ä @Q½¬ìÕ‹B!—Fxì×ëÀ­ŸLk ‰¢ò„¼…Â…Nf±W¿?ÝbògÛÔ*Æxy׊­™ÀÑûvåÎ[ðU’A—ùë/·`ÀøãÚåÞ³"×îŠfÀpuKlìQëò.ßÞeíä §#לûlÉÁÉ‘+vE2lþé ³W侩ñûÏÖ¼4+r{c0æž»|Y'džü›È<üý4 8í0Gûö™>{š‚àô×RÖ­8|¯ ›¾vâLAÇñJž×§ÛFnÙ1 rޝYw¼àï¯0Ó¤Óˆq³|dÀ²Æ¼‹ÉK·dpà3èýž¾^0K°å ÏØ>÷€ÃÂhO¬ÙÜñ£)£ÎD©æŠ@Aê§ŸùFýd§Œš3[WÑÀÙÍZNýl‡ Œ9'6,?Ë(욘öï,;³Â.p[ ›!„P¸ìBQ¤l¯^Ì<ŽÜQµÝèééYºÿÄÁOA „4lذ¤¸¸ü:„Ø2 ×ú‘RZµj•™™‰õªaÕ°jX5¬Öëï£hÒ ¹Ìx§¨â¬†ÿ'ÿýø½BíŸuóh¬-Å/ìB5g2UœXßÝ]§ÓU¾¢J¥*zø°FÔ±eË–æ¡K–Ö·E‹?îß/,,tÁ²5oÞ¼°°ð  ú›x{{Ý¿ßËöœ§§ÙdÊÏÏwÁ²5mÚ”òûï¿»`Ùš4iR¯^=Fã‚ekÔ¨‘L.¿}ë– –M¡P¨Tªìììà½<š4}³§Ÿïó?»,Nyæ™ouš¶dUnÞŠË7hÐ@­V_¿~½ž[+9bh„BU7öÜE!„B¨n“eé,ÑcÃP/B!„ª±^Æ9$à¥B!„Bu%‘”‹ô ÞT>ú‡ªíÆÐŒ”H(ÁÌ ¶fÖTl,Æ]„Bu‰Ó«7• !„B¡:rK@QÏóö÷‚€½z«C½¨z4öW*„”¹“Pä—/¯á.B¡ºE¨üª!„B!T«"!å†e€P˜“  0Ô‹ªéó P|·¸H[Rq–*°!sgg#½!„BÕ…{JBñå38ð†z«C½Èå0 ò,î „ªCü_òa¤×!‡#Ú#„B!TsQìï àà A•ö!îTm·ôÎ?ª~BÈzÂÀaÙB!„ªõ!Jb.›«—€ÂPoU`¨UÛXpÒƒ‹L„ªSg •ôëÜC!„BÕz”„ø²ÿ˜À¡Š°ó$ªF‚³©~aƒBÈvZÀ¯ñë‰D‚ €ø£Ê‰¸ã:£<•e ±ÀàüiI|T!„êàIÁÙ,ìÖ[7¸¹¹ñ¼À?F ‡²ÏÙ.{S`í,”ewA!„²ü/JÊ>-HE(BQ¶01!‚Àóf³Ùl6™L&ðÀ |êÕ«l;:.úÕÜåﯺ`D{õ=ñ¶Þ °ÙI“¥öysJÔ»JX}úžU«esv›h;u{Xö¤èoõ ³t¢zïÜEš·VNõ‘ Ùt÷…»bY `Ô\س¾Üêÿ¤ZSk}|G¬\Ù-3.ü“ôGÌU„üghH;_ FÍOI«Ö§h8™_ð˜±ýcÎ[ù qãÓ´ÖhGHĻ̞¨á'õ´Ç›³WŽéùÓÌÃŽ6èõfôÄV'ãcNi>öå&È'³çWŸ{’ùœ¿pjHú¤dMµT¸ÖTÄÒ~>CÇø±¹5—‘AæŽØõéZŽö¿tb¯ó³€Gðœ™Ýϯœµ*Ýánàrs½ÚÒçÏXe·WÕÚ\Ëý¶Æu÷ B¡Z‚Ê\.W//`‡*ÁP/ª¾Ï°ÓX¯€ùB¨®œõø»Èƒ¢ÖGul*Ã¥ñË’¯Ô]§ÌÓ±™œööá•q›~6ÈZ‡ÆD½×¦)쯉SböÛÖWv±z “0eñ ½¬uhÌÌ÷ÚÈÁp÷ì¦eñ'rî“ø{Üð¯6M¹®ï\à ì01.ªG3†5\Oý•)-Œ››±†W+¦ÈµErÛ&Y–·0—²Æz ¡(JbËú ‘H(béÕ+ð¼ ð¢ß¯1tÌ m˜".Á;lýê‘A‡ãN0]'ÎìxwYxÔÏze‡©«3×­¥¡iFL™`I˜`É‚k ² ¶·ö}À @…^ÀââBiœ×d³-˜Äh¯ BQIi:`ii¬W\ÍÌ›yž7óÖ.¾â?žç‰¹ì5ïÐÔg\ЃÌÏnЬU \›ÝnöÇ1^JЧïùdý±<.ûÐ7ÚQ1ú/±½†úœß‘¨­°%Ú7tÎåw‹æ_0Vò~2¿^éô½YÕUßZSÚ÷½ˆÀŒõ19­Um®Ì/dh{>>À#À´ù! ×µóƒþ§„UÏ”ß!lÚ±ì)½^‘ÀÖÌ bR]Š2‰é!ÄÌ @EI¤âxk4CÓR©Ô.Ôk¶þ3‹_Þ7P¦ Ô  ½N)½”J?_vÞܱ9¬GϘø)ý3£÷j´ißœ+&dL€ŒÉNZ”Y1ê5 ¢?ÐùŒã2_l´\ ùÇ>‰;c¬¶êÕ–ŠÐ>C#üÓ?Íá˜V=×ëå¿ã+gŒW¾YýM6x¨•¾9s£6kÀgТ½²æ+×Ã×xþY#ßê¦8v¸ÀëÍWád|6Œqé&F!TË®ú%Å åÇe ðÑïªÀP/ª®0qvë.•õíB!TÏ ¤²fòuDXoM©¬ò… \ü§ìÏ%ç±qT%N§3ÈårdÍúŒü/À¨T *•Üðëݲk2ÿ ְߺ¾\¥j´(©‡8S×år–ÕYÇÔ`•Š1üª³LÔå ©ý¥½]ôÖ>nk‰¯ZÒ* Kf°°féL @ @ ‚ H(J (ž"!<¡„Š"„"åP„ „Ò.»<Ï[A ò&Ôôžçú´=ßæ@{òX户ZÉö2Á #”ßF…ŸÔ*Þ™·æFí/ûx~Á˦ œ¿,*ôJTrN…c+}ýsOr´Gç ã£ÙˆåiÕ ô ­¡}†N¸²yfÀ<þ\ÍžèÁ{€VúõŠˆ^6fù¸À€æäq|¶œCDz´ó¥](7žšñ|JúØA¯*_éÕÖðà ø9üóá*MŒB¨öݾ\®^A &p¨‚§ê•J¥ƒÃÂ^|ÑŸÂ0ôî¤]gÏž±ÍmÔ¨Ñð‘ÿiÒ¤±D"áÍüúuëòòJ¯°Ô™f IDAT7n¼%!qß×É_nÙb›øþðáï¾;xܘÑwîÜ™3wîÖÄÄÛ·nMŠœPXXHbæÍ‰ ¿dd`ûÕN‚€½zB¨nýáçßÕã)Á!EcJöÈ…ä”§8 õ2r9À­RÉ :×zÄÜ‘ªS¦Éç õ„Ä™:+oª(Ź»?náíÑENðéU :ÝõS'&åÛ-B;|O•Ë­[“‹a[+—KÏkÍÚÀ[Ò犉v-=z E(ëØwéC‡úy@Z®^¦VZ³êÒ °à ¾\ú±+FöêæÕÎxr®‡z]¥‰BÕ.„€DBñ8`¯Þªx qq“ÉtúÔ©Ø™1³bf¬øè£ íç>xðà«Ý»bgÎŒ‰Ž>~<%ì½°r«_¿þ[PPTj :K$’W^é’“cùV}Ýš5š\ËH¯I;¶GO‹š5uïW{ÂÃGcãÕŽ[{Ç“ñSŒBuí®’sžªt-‹s:GþBpp €V÷iÃ^J½AËårÐÝÕqÊ®!›p¿¦^’÷ÑUMÐJµZÀtºÜ#«tA3ǼDwéø%Uðè×½i™w 5í¬0¿¦þª í ÙK!}š1e+#þ@ÞÌ›M&DZË–ˆØ¶„eYŽã8“õŸÉÄqDz¬m©’q!g²;O.Ïó¼Ùd6q&ŽeÅ­–”°%¶›¬kZþ7›Íf“Ùd6›m3xûNÆ59Ük<,ËgèPíÕó-_ÍO™œ>¿@Þª³Øž~[&×àpeí¡•‰ú^SFú9kqZѹg€L“­­žÊÕ–Šä$Œ 8@üoøÆ+ùßÅ…MÛ“G„Έèæáxn—ŸŸB¬ íÙý­6;[Ú“?èÛ ñ¡hŸwÞðÈ<ï0:Ë¥wAù΄Wô)'õ,[57±~ýB¾þæ[ûoBú÷ÿx媵ëÖú \üÚ†¦éI“#—¼ríúO^{ýu<‹ „ ÞH%”–Âûªx: nÞ¼ „Ö/¼pëæ-ûY,Ëæi4â™õÿþïÿÊÍ“ÉtåÊ•.]»žüáèØ¹óåKýýĹ3gÅnùbóo¿ýf¿Š»ÌýžV‹W³?ÀÄùó¸ø!F¡:xY‡Iªzõuš]U@)*¿”+4Ÿ(t2‹ýõx꿦nNjªb —vÆ'\ŽNÞy{Ñâ¯÷tw/íM½ô/Œ§W-kõiòL ¿nšsغü#˃>‘:qÕÏŸ,Ü?5jurÀÞM]Ÿï8¢f<ñÉÊ6qQ»ö2Ãí³—.éäv„EQ‚ ˆ‰u-ysyk¤ÕÒ©×–¯¢ˆÝ¸mÖ½„Øz!ÄÖWŒõZÏ›ÁÏó”É.ù”él7¶›%Ük›Lb¼Wã½5úð-8¹þSߘ‰Ÿ¥£æ§/—Òh7­œ³q3¬æäÊåœ}e MY¹±óʨÑi‡ì¦2í¢¶îŽ}α•«SôÕS7ãÉZR‡dê€ÀN9¼+òxuÄÂ8Ãq,›Ÿ¾7þË @ûíòïè¸a2Ö˜}òÓø“Nr.d¥ü¤ï¦>VIJWÛ3“&G òï–&› ìþêk13¢M&ÓÌØØÎ]ºütúô;ï¼[TT=-ÊÝÝýã•«._¾¬×éðl‚B®uW@ûÁˆY $%ªÊNôôô´Ûƒ‚íbYBHÆ KŠ‹Ë¯CJ÷»íQ¹y xyyÆeK—ܽ[&¥›§—פɑͼ½/]¾¼zåÇ,ËÚf5nÜxfììM?>bÄìY³`á¢Å›7oš3séâEwîÜùpY¼ê9å…Ö­ ”JEQQñ¢… tNÌ­Zµzê;èÙgŸýý÷ßk_ÃW{½ÈóZöáÇ«V¯]½úÖ­›0ò?ÿÑjµßý÷¿O«:-[¶Ôh4£´ÿ<ß-þ¸¿°°Ðÿø7o^XX¨×ë]°lÞÞÞEEE÷ïßwÁ²=çéi6™òóó]°lM›6%„¸æ5g“&MêÕ«§Ñh\°l5’Éå·oÝrÁ²) •J•ý¼×óޞ󧎽ü˵ßóï‰SÜë»uxéů¾KùþÇ3ÿþ«ÕêëׯãiÔÞS–mÁ¼y¸pñ’É‹íÄyÍÌщ$$¤̬Y‹,(·nVffyñ¯Í0Îî¯vï:qâ´ïÐaáâ%‘“"Ìfó?pgU[oت·^^Êgi ‹õÒ6l,¿sçÞŸÚ?±É°jX5¬V­ŽÔë9™ÚÍ­^‘£“‚\!ûã÷?tšÂ:{4ÖEEEbt¶´/®Ù¾G¯˜§W°Äu­wÅñÙľ¥a^+û ÚÒ7ðâ^c¿‚}ú]»x­õ7Û:Ö 1oŸX°®€q^„ªÓƒÀ®4nÔØv^¸ÿ~“Æ I£F:ÝâÄ?îÿѸq“rÛñóó#uÈuÓ¦R©”çyÜ?Mš4q¯_ÿÙgŸuÁ²©5jذ¡Z­vÁ²)Š’’’Æ»`Ùžyæ“Ù¬T*]°lr¹\ì5è‚esww§¦ÌX.£ž››ÌÝݽ~},MÓÏ4lÈ0Ì?ð^• å rÖt½nnõÜeîžÏ6uعS"•6R©l)aÿ&<Ï_»v­ŸòîHO¿bxðà¹çž«ï7›Í‡æpÅ£GŽô æM棇=ò]ÎýüóÔ¨iJ¥Ò5¿aCO»æ#„P"âô x«³nC½b…ÒÜ >>C߯rœÙlÒëõkV¯r¸£Ñ˜~å²Á`´Ïä[NØÐ÷ÿÝ/„¢ˆÙ̸dq¹ì ¨f*GìÀ…Buì¬à4hF*‹j ³ÙÖói·Y» Ž¢½ˆ%à*@ˆ™DàžðÄ>Êk;ÈJS-” üÚoÝAWpx`’ò_Lcÿ^„\GjjjÄäɇ2™L=ßxãÇÓ§àô©Soôî½yÓFww÷Î_™3;wB¹ØMH€vÉpš¦%ذ*žB¨÷îÝ»3¦O+7ñòÅ‹“&N€3gΜ9sÆÙº÷ïߟ5U|½zUi8bÂxñŬ™1â‹ukVckÕ6Äég»p!„P;#8ùÃ/ø¨GÀó<BÄkûp«íÕcdÐAžN–.‹µûÍ~©x¼=戡^„\Ç­[7O:¹jÍš’6#ýJê©Spøð¡ˆI“V¯]g6™vîÜÉBÈåî Eñ_î‹PîœÇ'Å]€ªíì쮂½zB¨NŸ†¯2ZZ«®âÄ.¶e/JÇÙ€å© ç}€u¶TžU9RëH‹ ôq&Ó?ð.cÂ?°ÿuÿ7ßìÿæû)&“ɾwB!$¥(/ÿí¼8Tiâ.@ÕwWïd–€_Ø „²œ/pX¶ºxe@õ®}úïYÕC D„B¡¿õêŒ"{õÁ Q`¨UÛœˆ]»B¨®œ~ˆÑµ:"T™~¶.s»A*\À”½õÀK„B¡§uå´TÊ—½¾@àAU`¨UApú¥ ößB!TzºÀ“B@Q” Ÿú)ó0©pÅÃ×Ã¥á]BˆýûÃR(æÅ/B!„ÐS¸ £±Oà X’|b¯Þ*ÀP/ª¾»w'÷îváB¡ºvF€JÇSBݸ$•HxÁÂ~d6òÈcƒT<œªvÐw— D¼Ý EBD/óOLŒá^„B¡'E(ªÌP õVî,T]_§÷`o•B¨®©äO?žþêk·MkOÿ…5éöÓW T>…2(ÿ½b÷¬.–2Ð MÓRñ?©”–Ò"©ÝHíH¤R‰T"‘HÄWâ4+ª"qFÙŬ«[Ö§išfêÕcêÕ«çææV¿¾[}·úõë×ss«W¯Ãд¸¦Æc !„Bè o (Šðfû\½‚PÉCáÈìÕ‹ªGeým¿ƒ@!TzRÀ0ZàææÆó¼¥SoKйA°þ/”ö;àBEYºí::ÂĬa1:L€ÀófÞl6™L&B€InH§æ2à´ûÍ9g·‰6“çDÎ:Pîþá‹Æ{|½`i^ðòIðé´­9tмmÑœ0æ]LþtÝ‘®šjKûOšú¢’VÿKòšr%©A±Õçý–]›?nCÆ£æ*ú~´y”° ==ykݼOtT˜¿’6jÎl]¹öÔ½2‡F¿G{¤Ì·ö‚­šî=æm‰ øeyØ¢T®ùpÞ3!„jB$Å—»à (—I¥Ò÷‡ |饒öð¡C?|¢ÜÜ· êÞ­»D"!¥×é>\ºäÏ?ÿœ3wîÖÄÄÛ·nMŠœPXXHbæÍ‰ ¿ddþkóò<Ï›E¼øxA „Ê–¼A*µ¥`°¬$†‡íú»Ž¿‚-‹¯%}/q’1Ø%qúœýË_ó›¹ÊÏ6ͳG¨Ç™5ñgìC~Š×C®mŽ|DœWÖ6bz°~óì}9xö k¦mͱ_äáµ”³ÚžžÕ”Éhc^^pÚl­±'ÃÔЊÐ>acý³¶§øLò}Œ¹´RF¯Ë,ãÙ­-}æÓÓZОHÎx{H'ÅeBßlúEmÛ×;ÉΦ<º)ÒÏjºùˆ«»êžA!T›î (ŠØLÅg²\9ÐÛ Aƒö:Œþ`TÅ8/6nÜhñÂf³YœrûÖ-ñÅÌY±[¾ØüÛo¿Ù/ï.s¿§Õ>a‘0Ô‹ªï¦Þi¤ÞÕ#„P‚ö«*ÐûFô¨Ù ~cöŠéïŽßÉérØ:ÿ³+¹œ÷ÀÕk‡¿qðÜ7ºöãf¿Ín›>äh.¨ÕL>€èïί>8ö÷z Û›ý6ûÅäÐïu¾ƒ?^2þß™±ÿÕ0­™Y“§\1‚÷àÕ+†u9:ÿ¦Ë¸èöùËÇÍ8§W¶\¾€¹a- MÓ@J;ÑZûÚŠÖÒŽºP&Y!¥?J¿%.óŠ^“Ùd2™L&³Ùlæ€JbMÅKÓ´T"‘P–~º‚`‹ [–é¶”É BÕ«N¿\,™ŸÝYË™6§mÌGÑž (ÈØûù†ãyàçï£×{E.î«`Œ7oZwàZù /í;pV¸òð’E•¼Ÿ{Ëž™ô}ת«¾9Ghã&O/ØzœíÖüBÒ¶Š·N5£"´Ïàñ¿lˆÍi9ÿñæÒ2™ÿ¨O6b£&m÷Úͧµà顼wÁ‘å4Ùz_O€²½œ¹³)9“zvrO=þ IPwÙÅM9>–P¯‹î„Bµ !JR¶O/ÀWo‡úõë?ÿüóv7.‚F£1-W>>>wîä… êíéÛwl·sÀϯՕ˗mq^gÞ<¤wŸ`¥RQTT¼há‚',0†zQu}€+– 8 „P];'8{Ôƒfp¨ìB®òë^Þä|{õèÑlò¿?xùýºzCf6—{å ä^ÍÔõmªÚûµ@Ã÷ ŽærŸÏЪ.ѱ¯å®‰Þwƒ _z-Ððý‚ïó ûè‘Ü!][ÑÿýnÿxôŠàî\¶«Z´w—@ÝÑçô ?wðÇÛ]Ô¶†{òR”D"¡¬Éq­]fÁ–Aë£?bŸZÊÚ¿ÖÚ X Êò¶>½&e²-DxA€P‰TJÓ4Ã0b¬—¢( @^ày³ÙÌ[ò–N¾oí$ öù!lá^¡æŽ¨ðT([ú°‹L¸Éz¼>}ID¿¬YG” ™OeRüÔŒE§ˆ%SÞÏšðeÙXžWÈx`´ŒãÒþã?KZ¦íñ óÏ«­z÷Îì¿Ý7<@Fgïþ0ëa…jHEèæa^ÌØ47‡£[>Þ\îÌÊ‘#8ŽP¼øvtÔ¬°¼©I4M³,k]€ãZF”â/¦\¤8~´À³O7H]‘á.ÝÄ!„j1—W¹î±ŠTg¨·¨¨(33ÓÙÜúõë{{7ûdýú;yy¾-ZÄÆÆŽ;Ö6WBKm½zôì9`ÀÀúîî[NpÓÚÔãYïû¹`3ö%e@Á™£FüÇß®•é«?µ|æá€¸%SfDïË)¿E.cø§8Ú£ÓØyK¢¸)+ÏTK,Ðg༠ÊýÑãRµ ÿШYóaAôÁ²yjDEhŸ°±þé_ξfý®å±ærœøÉ/øå@ò/!aþŠ$ Ç1 c îÒ4ÍrÆŠŒŽg„¿ÝMq4£çËÆ“Ëò ¥£"¹L#„ª=¤Öç¬Ê<ðGžH\÷v@¯×߸qãN^d߸ÁÔsss«_\\$Î;~ýÝÁCÄ×ÇSRާ¤Œ?aê9ÛÚ¹Ÿž5M©TÞ¿ÿ/ #j¨ú8½-Â[z„BxJxÔžQ¨½sê«)ÆÙY»n}‹-îÞý½ÜF†¾¿b媕«W‡ûá’ÅO’½0ª¾Ï0Êb½¸‡B¨N€8Kà€C¶9Ä_ßYÄ6'’Ê–Œ×MÅNæ±W¿?ÝbògÛÔ*Æxy׊­™ÀÑûvåÎ[ðU’A—ùë/·`ÀøãÚåÞ³"×îŠfÀpuKlìQëò.ßÞeíä §#לûlÉÁÉ‘+vE2lþé ³W侩ñûÏÖ¼4+r{c0æž»|Y'·»J¦(Šë`l‚-Û._ÚßV°ôý¥(KÊnd6Ëå…µ{°%Ë‚ öô×µä x³IžçM&BQTéjÖw»SÄš,XLãk2›,}Šk†^¡†*Xúég¾Ñc?Ù©£æÌÖ•G´pé‹åG'Oùx‡‚á´“ÖìÎq¶¶öÄšÍ?š2êL仩tÛÈ-;Æ‹›Ï9¾fÝñ‚ê©›ñÔ– þ“¦ú \^êš/r5²"É<üý4 8í0ÊJûö™>{š‚àô×RÖ­8|òö¯LŽŒZ½sÍi/&®<çdÓ×Nœ)ò8^IJ—Þ3!„j&ñ›tÁÄ—¿ å åÒUs²³çÄÎúöÎ<0Š"}ÿoUOwŽ 3@%Aü‘¸dQ‘VTT@P‚„QÁÄåÐPpô»"Ë¡5ˆ „!YÉ d„"3$™î®úýÑ=W2“ƒÃLÈû‰†IwWOUŸUO¿ý¼¡æ:ÿüsÉâ7*Ovj–öañ¢…—xhÕ¢…ïuî _Ð>Bš4iR^Vqˆ ™—y?_Ù‡ZjjjîËØ® ¦Õí-€Òr‡»ò¬è«#Ï>wæ¨w6 ›†Mæ5vµ¸%^2‹e¹)˜"í¹çÎØæÑX¢áŠz`M«VZ66¶ªë¼:šS÷ɸ5×Ûõdi£ÄƒK(¡@<9Ý4Ï-ÚWŸ ú$TtïM{VtdEÖkÇçY ’"2*:Ún¯¦Ão±XJ<žDu IDATÏŸ¯mlÓ¦Õj=–µMnÝúÌéÓ%%%aX·V­Z•””\ä«Ê—‰ÄÄÄÒÒÒ‹±Ë¼|\Ý¢…ª(ÅÅÅaX·øøxBÈÉ“'ðnÍ›7ˆˆ°Z­aX·¦M›M¦ã¿ý†u‹‰‰±X,—û‹¢£¢®MjùÚ³ï}ü™wbDDD»ÔÖG ‹–}´¾r‘FÅÅÅ=z´Þ[«¸bT/R‡ôo@An¨ ]ù”––RJ©7‡D«V°`ðhº^‘×÷!”P*TÁc¶à ËÕ²ºi©Ö´ã>ùW[;÷æôûˆºÜ« Wp‡À}ˆ ‚ ráBJ9¯è]Àho`!5¥^¤ÎÎa:Ù: Ö‹ ÒÀî ¡y)zõ6ÊÊʼ~ ÞZ_Š5–Ê}Š/žˆ×ÖR-¡š èPoŽ7oR6æùÑs¸y'º1]ó ì¤poj·€”oø@AAäb¡„0% OÅs ÅLcµ¥^¤nàPEš ëEA|÷ ¼%4ÊËË©ïîï'Érõëùtô _-¬—ªª¦ñjN¾Dóp¯L[aå•—óÚøîú-ˆ½‚ ‚ —„R¥òûß(jDµ¥^¤îÎazX9xAxåoÐ(²ì•o½ªkù•û$Ü“ŠMïW@aZ:5¿Äl¾~‚±Ÿì A„䮕ÇÕ‚ ‚  "PJ* G‡ÚR/R‡§qè8XBi`·„Ð:Ç›BC@QUÿ¾îÖÀ½Ÿ=“¹·“ød˜kÒ/`ºË®¿ÿ‚çðâ>{þ¬ýs(õ"‚ ‚\Â!”R^Áë“pN‰€Û§æ Ô‹ÔÕ žp`Ág › ÒÐn 2«4£}ý…R ¥Þ„x,à•qƒK®œW\÷‚ ‚ H8 ˆ@µrT/àÞZR/RwÃzz‡§1‚ Hƒ‚‡ ÝåhÖÛPKæß„湂 ‚ õD •¥"‚ÕËZ€ ©£T•– ßÕEi`=»ª®û¨Û5°.ÂEi¾äÒB•2¿ùU“²!‚ ‚\âPJc•{q’„›§æ Ô‹ÔÙ9¬%T 6#À… Òà¨"W'Þ”R= ›§›P«£G/ÅktLUê‘Ĭez#Ä÷ÁóeþYãü¦!‚ ‚  B…J^½À9¥¸yjJ½H]ÃÀB…pqŽƒzA†Gh­E´†Ð%ƹO@­vêéR¿c‰×¦8 2…ª¥!”PB¼ qÎ9cŒ3Î8cz­ Ü‹ ‚ rá•DõÎ:Õ Æ‘ºчጠÒ0o ¡¦c×î27héšgn/ ¤xsÖG ™/AÌw/Øð|W½’$J¢(Š¢A ƒA¬Ñà`0A ‚`´):´2‚ ‚Á³”^X/f0 ¢AEI’$)""222****:::****2"22"B” A0šŒG)‚ ‚ ÈÅAˆ T0p8`Xom0\Š]Aúöë×£gOíÏåË–;zÔÞÿ¸£oß¾Œ±3ö3KÞxÃétzg5kÖìÝ•«>ýdÃ{ï¾ëøððá>8øÉ1£ÿý÷çgÌX½jÕñß~›01#--­¤¤„¢2uÕÊ•¿<ˆû¯éIUV½€éAV¿y:‘‘‘ŒqæñF¨ñÁâ]Ø¿”/0˜â×{%„ha»„jþ ZAÿ(<’°&œ3¦ªªª*T& !Š¢€ª½kX/bs‡ÑÓ§ô,š÷ð‚½žIbBïÑãè(»`Í„Ù[] &ôÎÈ–fÁ‘¿~þœ…²ÿ*:Lú`hÁ„)Ÿ;À˜6æ•ñqëg̶ö›ŸK&®,{ÌZ›ÕÎít¸¬{×-YøU\G­“úfd>˜fÁíÈ]· BMêQC<íI1~÷¼é£–æV=7öþùo KöΑ$Çç™®È7·9i|ïT#¸¬ß¾ýÚòœ³þÅcÎûð‰¸-Ó_°ÇÛLc¯Y«3ÛåÎ}`æ9idoAä a€ëéÚšr ¤^ιÍöÇóÓ¦)Šr}Û¶ãǧgNÊðÎMLLìß¿Ö3SÊËËûö»kä£-Yü†ñ£GíÖ­Ûû«W+Š‚ tîÜ¥°°P›»xÑ¢sçÎiŸ×|øÁöíÛ cÇ[F=)c"î¿úKQZÚK¸‰AXç®V“‘+¨èhÑÜsIå#€Wî„úýö.àÕxu‹ÿ_\Ihq½úŸ;ƒ¿"¬©½šØKµÅ€3UUUE&úW0Î#õ$ªWL0=«—ÓjóŸÓã™çû¯œ>6ÇæQë’Ê&­Ë¾ÃÓiÒ«ÓÓ žXp0¨’—ÐwÊøÔs³vÚ@ÜòÞr(Ò&»÷Ì>c‡ `L9sÖ¤¹6Xë¤Á±Ò”Öeßácû>7L¯¦n:[¢ï¿¤acRÜE5™k[Ÿ9h½w3 |eVrN;¥gÜX0ï‰ùî䳦?3°`ÚçÇ‚\TäJëÝAܳKßÝæî=ãlEz˜Ž5|·LzÿãŽxÿ¼¦U«‡† v»Ýkÿ½î„U¯ëK/ͶãåA$|Æ‚@YÅ眡Ô[+.WïO»Ô>œüý÷ÆùÏJJn}èÐ/åååðßÍ_yoe…²Š¢8p K×®;¾ý:vê´ßÏmÛ¦is§>;íÝwVüúë¯þE¢ÑØl¸óê÷L€ã˺‚ Hµp@½÷2aê–¹$³c¼ œû>š;gÃa@\׌©c:¶4Ià>¾iþôå»]Æëee>Ô>^÷¡UY½åÍ]ŸY8FZ™ñÒv‡ñºAYSjoç©—Ï™»½Ä›³V=äÞæ¼¶}¼d2ÁÑæÌý☠`¾yüôÌÛ[JnçÑìC~¹”###ˆG^%>¼½|ý`à¾ã"È$ψ€s¦£úðh½„PJ½N ‚ šÎã^­¿P#Æ™Wð¥ÔWÕúÒ+; >›»5?å¹Å©Þi-z?›³àå¿®ulZ[ãžU;lp6gÙçý–ôMî­¤õoœ˜Õϱlê†Bz &®,ð_Ä•¿%ÇÖ;! nt@“IrZ‹ Û lÎOß] & —–·jKrFríæ& ìgÌ™{P;tN±ýg~¾ 6®ÜÓwLçØÏ+h½¹{l7öîlܵÃÛ£‡97ÇÚ# œ·LP¶üwó–ÿnÖ>·k×îÞ{ïs¹\Íš5ûõ×_§>3¯ÿ‚ a©!”©¬âh€q" ¸yjÎ%NËÖ·_?-ðÖKQÑñûî»/22ª¬¬´K×n‹EUU½ P*lÚ´iøˆšÔÛ·Oß+–·»¡}å•?8xÈwö1›cJKËfÏz±ò©©©—|]uÕUW䎯óv QŒKÄÔn%’E4ŠIµà.æaÓ°iØ´Ò.Ò„Óˆ6G™Å›ÇF5š×£¦åååÕ‡#ÂÒ¾åÑIÃ烸;g,ÌyhôÒòýøö•Ï/Ý_$'ZòæÈ>wo°ß<~Æý¾.‚¸8© ÄÖCg¤Ço|>k»Ä›Çϸ߽lÜ€íöÖCÎM¿ûPÖvéoí¥gÆ¥ïwAâÐ% GvÛ4}»ÔuüÔŽ§æŒÊÜí0ßcJïNbîúüºjoÁWŸÙ^ÌÌr¼·ÅÝ{XÒžWUŽ© “JowpIVaêìÚÍ;ÝßÙñUf€(Šàv»=ÇB±Óœ ¸IÜ9[ 2zw6îØâˆíÑÓ¸çí‚d]ê Ó-Sr¦ÁU#’ªºËUºgºmÚtL€âm÷Ó­%>&íßE‡ÙÄY@ly{{ç¶é_ÉP\,ˆ–nSgÜv|þ¤ Çd±ýííÛ¦o/€c›6¨ÛßÄ/²àxö×û]§Žww‹·€Ø²[{{ö¤ÝpìÞ˜}¼[¼§6„úÙ%xÓ¨¢ç]æœyývu©—ø9îÒ€`sƒî©KªK²„¨Œ!” zÎ5QEƒÁ õªªÊTM*öÉËà ú¥„2¨ ñ’zynN0›S’Ý/Ìx¢ÐÛ+knÆÀ¼)ëJ™}:˜ó÷:Œ)÷ ¼Ñ¹ÏÍ„{Ò‚X,_©”–þÎc@4™¡xËÒé»\uÖ<[Îg{úe “f” ÖÌΫ\‘zÒ1iXzÛÜ·§ÊRjíæÆô¾'%ï³7Ï€œŸkß»_‹ŸŸ€Øî#{'CÃ_מÿæì×=f˦³ }{ÂŽ¹0&¬wqµ¤¤¤DDHZ–Ñ ^Û¦ÍìÙ/I‘¹¬]³F³ô_ø‚ÝXââã CÅlBáAóæÍ££¢Â󉯥iÓ&MšÄÅÅ…aÝbbbÊËË›5k†ukܸ±¢ªf³9 ëf2™!Mš4 úEGG‹’d2™Â°n‘‘Æèè訨pìmŠbã&M$IºìA’⯊‹ŠŠð?ï ¢¡qãÆQAƒ;ƒ¡©Åb0.kÅcGŽ©GÝ»K¶9zõþGÏ=^yù¥ ÷Kغå¿[·üRRS ‚ßüõ×wöéÃu󦯪ý®Ÿvïž”ù´Ùl>}ú4 WœLˆ Òð®þA§¢£O(š4¥sþ5V½›-ÜÏöªÁç9º~'ÛíN“É$‚±å£Gö¹Ö"H d€Åbr:XRºvÀPp;7zÊ›,––Ýf¯¹]›i‚£ÚÊí¶{Rñº$‹Er²ëíÅNˆ÷ÛÕþê­¿n«ë¼åU3õ'~á¼¾[-gÊ) œs.PÊ)e”PB¡8!„RB(©¥T[ƒ¶JÓó+ÓRÚ‘³îóBØvlÉÑ/Õ¸~˪¹ÿ—>gÅ·­`KA¾Ã\\Qê=ûíœÉ_µ›9'sÐÌ …•Ž­Ü%ÏØ!ˆ±ÆÍš;Å>/§N´ÀäA³ÒÍŸgŽÚa‹I{à™é³aFæFkýkˆ˜4l\ÚSóe©vs“ö3ï]¶G«ôÙ¯æ/MÈ|þí~à*Þómž5®8H`…kÏÖÜ'îïiÞt wç·/[!%èå#\vqõ<8dȆuë´Ïyy‡G=ö(ç\’¤qãÓòá‡ø/œŸáñÉŒ1«Õzþüù0ÜnY>sútIIÉ_ð]×µi=kÒØ„øXUe‘‘’¬¨‘Ò˜i/íþ97èò­Zµ*))q„e´ubbbiiixjZœ\qXšMÇÇÇBNž<†ukÞ¼yDD„Õj ú5mÚÔh2… |¬[bbb,.WAAÁåþ"‹9æÚ„8§ë¼ÿy' 1Ñ‘ª1:h`G£FÊËÊŽ=ŠC.ÔÛï®»ÚÝÐ~öìY²,{7÷õ×_Ÿ““ã¿{üñO7lº†íÛ·½±diyyùš5Uûu)))œs¾}SßÇô!†ï„Ž{AvOª2pÇí„&ÑÄXíB¹Ê\ê•L& @Ñb19íNùº3FZ>ʘôu± ×[5Ànw›â-*ΩÓgýZæèìqo–Ái·ýhÒø5þ#N1èwÚn“ɳ¶€¨PÁž×ãÚÀtû\Ÿ¡hV´[„é"1x‹ú€õ,mZIý/æ1j *¥€SJý¿!(¥œ3Î3`ÀA[Mž2õ÷8rXb'£z¸àvÈùŸÏ›ð9€˜6nqQnAÅq§Íæ²®›÷á¯gŽÜ›¹²0D¹lËÙšûDFZäÔÅþ 7v2îY¡™ç®ûhO¿7š7Zõ®! =;''ǽòï{´}$I©k’?œüôºÕÍ; ì[^Èõ¶Ê¶kùÔ]Ëbúι±à?ÁÞ¡“s·7²w÷„];fØ ¸Ô.»¸:Zµjÿã?ún)œ€ÛíÞþÍöwÀ[É¥—„™Nž>³ëçܳçœQnE¹¯Ïmoä‚Ô"RáõÀ¸ö0©)—@êm‘ðÄ“cOž<ùÆâÅÚ”%‹$iØ#hRoú„§Aøò‹/üÅ_\.WîýN§Ëg U‰¡Ã¾ëî”Ue¯¾üRe#¤>Á¡ó—pÀ .AÄ{Sà8D NÍúArÈ—‰MëÓ§õ¶ Ç îöíÝûfM&ØOÙes×ãáGùPö>Súˆ®ç~W æ8‹»ØàvÚíE_/Xyû‚©c¾µtÿ¾mû,é£oËž»½HcbkÓ©cÁãŒäCÙ‡,#ݼqán—ñ†w¶ôyõr¢«±8çLÕTU¦ê?^¥×›(êI˜èÕëY%çœy³±ùDZÆQ•ι*PÁ³¿G Z±G.æÌ—ëÍgŒ³ Âõ מ-ùC‡ k›»ò ;¡W¿dëoûÔN1ö–ô1i¹Ë–Ÿ ^ØöÕüUçgŒüaòòà2ŸÓ©WšÑº®ŽÒ);ŠÏš:wJó e0¦tJëÎúØÂ•O Z©6ö³(ùÃQKsAL4©§må’Aç˜{Üs£õ³•'*­Ð˜20c |>#xcåÜÿì5Ï×9oÅJG¨§6᲋«ãÁC>ýdƒ÷©ŒÙl.))aŒQJ»tîüËáCx'¹äÄ4nÌåœÓuîœóÜ9'0Æêõ1AþJ™ˆg•®ðÍïZq ¤ÞVëÀ»ûWž>aüxíÃ’Åo„*{úôéÉ™“´Ï ,ðNO7VûðìÔ,íÃâE qo]i§q¨Q=ç°7€ Ò°àU<äÃ!b0Ž«KRžÌ³Cùõºm˾vÒŠ5ñɹ+ƒ,nøèøì—>Yï´ŸÚ·>{ßµ¸¾[0§åôÌ77L•Àyhù3Y›<+(þzΪnoNJÏ¿`÷ÒY'e.Ü)¸Oe/Éš[\Qsm_:¿ýô̵ë%§óøûöÙ½q½Š¢PJ)ç\]9gLÕ3«yõZŸ_ƒ.õ’À¤lÕW·æÕÃ{=Z¯ßñĘ pÆU¼æ~«ª˜åÍ+òªª¢ÈŠ¬ÈŠ¢¨ªâqõõÆ×?ÎîXòfrÖø·ÿ.ëïÍûÊI÷Ïyîž8Éí.øá½Væ†6}¶m¿¬ÓüÌÑ9éþlÒ™«?NGá–ù ·ÖÑ«x®Ë—´ËÈZ¶B·uÇüy{åzÙ ãÒÚ¥YͰ3”Êš0p@Bîª~u;My;=dpäm\0{SHy6ëŽîq[ª°dë-ãáê-RSÚ,øçëÞ)×_ýýv»Ë)8ðÙ'Ÿà­ä’cnÒÈí–¿ <Î8¥T’¤*‚ºA4JXÅ>gœ XH‹-ü{²Þ¾-ç\óÒ./+«X†ow™\é›;55õŠÌôRçíJê“Èʘû\°´lq¥¶ò“?ã.æaÓ°iØ´Ò®ÄnW¢ eö`iÙâ#ÿ<êü#ÿLÃ<­’’(¨@¨ÞeLeLUUQ½9Ò‚ HÂCHwŽw…†&õ][õ ¡ ®¦ú‚n‰Oûõzµ”ú’µy²¼‘k5Å–{–ðÿð† +ñKøÆ½sA:æÆmgÎ0Åg'¯2.¼“#R=¥XÅD„sBPê­(õ"uvW3äGAÖM!¤…;à]¡à.w{írýYO¸m%Õ?¬Wóu LUUªá³xð‰´~ѽþ?ÁtÞJÇ¡¿k4PAhÒØd=YàÕË™f¯ŽAjG*¿gÅ9Ç ÞZR/žg8vAJ*i UU¼÷®Éª>mÖÓͯ< z:4ΕpÂg„•×7Lÿõú ¿þkçÞ_þß~3çû¾E_A8±Íš©L•ÅÿÉcŒJð©-‚ ÕA€PJÔŠ*Î9  L­@©©«“˜„q p°„ Ò :v! ܉@qxØ`ŒÑt}Ý”×Û-ðöª=8çá!–ìyøýå?ƒx?R!ä|”zià4id”eEUUÿ‰*ã”Fõ"R“!¥”WÊsËÔ”z‘:Õ‡8øÛõVîùÃeT\}Ê„ŸF¡yDèª/¯±]‚ È•OSKŒ¢0èÕË£”>C¤”g•ÆL”zkJ½H ê 5v/³»Ëìî ³bRa/Aäʃ ¡M}ðÏÒ%Æuüƒf«2÷‘B×Zö(¹¾’^m—ăg²f,¬Á8ןL£Þ‹ H§iLYQ”À—¯9ç„R4èC¤&² Zÿ £zk5¶ÂM€Ô ZäN­O}Üp‚ WfÇ.ä%£z/ q÷¼ñþÓ7‰PR¼iòª×ï5_‚:˜ïzýãg»èu%Q Úƒh5 ~ÿÁà‡`0Aí“6Í­Œ6#`1_I¿™¢(Š’(EH:RD„$i_®­šP|3A ¦I#YV˜R!ª— „às[Aj‚ j``œT/kFõ"uCÀû˜µ)…}A+RÅM3¼ö7"##czPoûžî„)Sÿð[}Õz_‚B(%„P-^·ba})J)¡T Úÿ”ÎcŒ©Š¢(Šªª*€ Œ3½:aOLûÇŸ{º»õŸ#íÓ&ÛÞ;yÜIFܶ]«ç¿µó“úd>;*æ‹QÏ~q¶Â*Ú?µjpáDmztÛQ³ÇÆ~òâ+'úÌ›o>½ºPìöÂûSÒd§Àuâç o.þºP®£ÖŠI}&<5èz³nÇ/U¨I=jˆ·=¿6¯Û‘™O¾u°º¹1ý_[ñXh/ÊÙ¾˜òÔjÛm/,¢­äYZ’Ü;f|}Ÿ·I1w¿ºjtìÖ™O¾±×;-úöÞ˜ö˼¡³³åVÃÃxË uGŸ[»z¯%¦É9§ëê¸æþ³¥BT/c*¥ˆ!Rý€€^!ª—§Õ[PêEê þ•AAÂÿ–ÀñÕÎNTT”¦Å¿ð¼bG@·Zðýxƺô«»+0ÎÓ~iJ²>’ ” ú%”z¿ÆO¢%‚Ö"€©.UpÎTUQEåÕM©}1©ÿ´)·¹¬6¿im†Œ»Íñfæ‹Ï‹I÷¾<ó±[ræî’cn;}x‰Žjô»}ž›’ýú´ïl n]õ.XµÉòÞE½¸Sˆn3|ú ûÌøôD48¶ÿØAâ†)gŸcûL}mÔm»žÛ|¶>6Dß­†Žj#[k6×Üܘÿîèç¾ôkïöÚîùÝmÚüî`Ùjuµ½ýïâÞõé1ݺÇÙ¬.íá»e:DƒíŒ£°‚¶M# IDATè÷â?ÎÈŠrÆ~–W”z¹öd ·‚ ÕB(啼z­—”ÔÔWçÌÍš2ù×_ ¸N ÷Ýî=A ”:ìöW_yùÏ?ÿ|~ƌիVÿí· 3ÒÒÒJJJ(!*SW­\ùËÁƒueÆ# ©›¸NŠ"‚ á{[‘«Eàˆ©ëÄ…oŽ3kÿÚ×ç}šçˆë2aÊã7%š$pm^ôâ;?¹Œ©÷Nž8¤]¼îÃïOžöÞòæ.O¿þ¸ôþäW¿qSïü`ûöíбã-£Fž”1ñb*ƒ!ÐHÝê/à=Ç søEAÂþžò½ z/–v‰ÇÞxlðПúî›<‘®kíÞDQ%IŠˆˆˆŒˆˆŒŒŠŠŒŠŽŽŠŽŽŽŽŽŠŽŠŽŽŠŠŠŠŒŠŒŒŠŒˆômŒŽ6&“Ñä‡Ñh4ÑÑÆèèè訨ÈȈˆˆI’"¤í["#£¢¢¢££F£A£Éd2šŒ&“ÑèY‰ÑhÔ×!I’$ŠA¨èK¼‚t=àì/?VP÷~ùb#ÜýÜ·wèxß”Á1?Þé¹pï/¶*#zÅä{ŸeÞ4oÉÏ®*–ŠnÓ«£”û㑺joá×_Ø:>5¹ÿß;Ü1yt«½k¶ÙêiCĤÁcÓ~ykM!H5›+m[ºü•«Þxilר@cî6îs>=XyË?n-LêuK44ïÖÃøóÖB ÂzË užT3ôÛ—Œ1 ©Ù€R¡²PÄ9§$¬ÕKJiFƤ÷ÞY¡(J…YíÚµkÖ¬é›K—h:/ÿí7íÃÔg§µnݺâÕý‡Ív±Wf<”:;‰kÃG¯^A+âúN.ÌܽÁ TñÜ”µª¢îÛ7ÈPüÍ—û~¼k"äÈE´X„¢ÃyöþñfomçüæÅÍE2Ë"€¥Ë”i·-šòé1@¼áÖvÎo^ü¦ 6]4¤kªøßÀñï7pœ:Väîg1±K;û÷S~r€ã§/¿?Þ%Î×µ'„P¢y%xò¨yce½ñ¶œs®÷!à±Úõ‹æ€ë¾ LUUE¡Šw!Â8ç@¨  š¶,Š¢¨Çõêf Ç`=¬×£æͤWQp®ªŠ ”R_êï1T¸ë˃}Ÿ2¶£QþåU5´\M06$[Pl;ö_+Gh4ƒmÛ[3tÕYãþصñç>SúJ3Š¿š¾¾6Dl5tÜõ—Ï(”Å65›+ïš?r„,Ë1×ß7%óÙ¡'&­þŸ>ÏØqÀ-g7M †ëúyë‘á}ºÅlÛ|¶ÅÝ!ûõBÖ»©s ¢«â^Ä#”rÔz©T˜ªª@8uz ‰ŠŠºæšk|UâÜjµº\¾›ßСíÙ»'??ŸV’¬RRRì߯ªjÕ_ñàà!wÜÙÇlŽ)--›=ëÅ‹½2ã‘„Ô ¤ž$/AAêŽùBu:ËÎ:WQM9ê¿æ&ǃ‡A¸]ZV%Ùáp™L&Œ-ïxì‘;Z[$ÑlÀb1¹–”Z÷°µÛõ¥§¼ÉbiÙõ…÷oÕfšà˜Éà–íž.°@°X$×a‡>Ñ^ì‚8ÿžhFÚÿÄsø+°ŒsòïçéKüWB8ç@9ջ⥜RF)¡„2Â@[žúdb¿Ð\B¹öñÙIh+cLΘÏâW[‡·þõñú±3ËoNsPŽíðð³33aÊÜmg«-æØ9oꦴé/gÜ{pʧ…çÊßzòÅ2€{Ë/¼œ)gÌßU'Z`Ò½/Œ3oœòd¶-¦í Ìgg‹S¾ž*8íöckŸyä‘<2â‘ÁƒîöŽßiwº&ÏÚLFcÀ-Þë•y9çzd®¢*Šö[UTUÕR­qîû­ñ2¦2\ÏÕBt¹ž½ÍcãËcªæäë]¹îçë§'C ó¯ê]5gÞ•Ös’ºµumßpð<€lÛûÁÚÂ6ÝÓÄsÙlçOl˜¿ÆÝÿ©á­Bm»¶„6m[ÔMãZtèhÜûe¶ ÎÜðñÏ1];ÄÔdž´èÞ))iÀ¬Ö¯]·þÝQi±}f¾ÿÚ 5›«ân·gàÜêî¾1?o íW!ÿ²í`l÷^]ûtpíÜùGuu«ã]Œ„¢Á r^EcŒRŠ^½‚ÔDð‘ "Tòêåœ aœ—íÎ;ï¼öÚkßX¼äÅKþÖ¶íÓ“§ÜzÛmÞ¹G^wÝuÚçm[·>5!}ÏO?IRÈ^üO»w›Íf³Ù|1UB©©Cj=<"„à[¼‚ ®Ó‡C­á¦ ¹”éº;îHĸ[ûß ø®@4M`?e—Ì]úß þþ€éÖGºÄ‰¢9.ÎàvÙE›¿ïèü}žåŽ{o2€±]ÿ;ZJ}O¯Oá•e·F¹Û]^îv»ÝnY–eYQí·"˲¶P¹»Ü]^®-¥/¢‹ÂÌ'ú‚¦Ðr¦2EUdE+«­¹¼¼Üí–µõks´yåe¥¥¥çµŸó¥¥¥eeeåån·,+Z¾7ÇúÇÙŽØ¿ÿ]srùû-I.k±\ãÂ|½èƒ³½& oj‹1·ÜÖÖx¢ÐVG³5¦tLÒÌ6ÛÀ ««>6ä«Ç yà~í¿ÇVäÚ6Í|ä™ 'Ķ÷NÛ56ÄÜØ6í“bô–ß=àzëN]Ûo¹ï×öGªØËòÁ¯~Žôä-ŽíÙÕÇw×ñ.Fƒ@µ'k!ïVšÔ‹wsAjÐk¥TDê%aìÕûꫯŒûäSÒŸš~èàÁ¾>ï›íÛ½súé'Á`1b¤(Öäa:¤¤¤pÎÇE]™ñXBê~Aoñø úA+­k‡ÔŽ’ÈÆÛ©U¥À¨ RA¨Ž±ûð7ßµ~ê_ïÇY$×þµ¯¯ÎYütmÑ /þ{Ó^¼ÿ“ï÷·–ÀõýóŸøÆÚ)8¿;mÚfÏ Š7Ïû ËOûn⢟þõò—OM|}íD À]üÝ[Ͻ^<»ë›-ºáÙ‰¬‘œ®¢Ÿöï·›,k›Üºõ™Ó§KJJ.ÇÊŸ~b¤¥±é×Âã¥eåAèø÷¶¿)Øôí÷¿Ÿ*®<·U«V%%%¿v™HLL,--=}útÖíê-TE)..úÅÇÇBNž<†ukÞ¼yDD„Õj ú5mÚÔh2ÿí·0¬[LLŒÅb)((¸ì']‹«¦>9Òú{qA‘ï™$'¤YL“»zu»kä„ÊE5jwôèÑxo­â6ŠQ½HÝ€uAšÞ20ä·PZZJ©þޝ–~ãôú[0h]oê6ÏŸà ö%” AÏœæ{iXWmuéVû‡1î“9÷Eæz>ð`øÜ{œ€A$’ pƪ¸((úF"R£^?%D 4Å"À9pJq8P PêEê† qï#‚\¡7…—wÂÑÜ¡APVV¦åd]ê À+Ãú¾x^ ^[J)Aý¯?¤/)›Ÿ!ƒ/ÉZ@´/çž®Š7º×÷GåQêE¤á"ÆIÕWA*P4p@¤ZhÅnÎ`¦±Ú€R/Rw§ñ‹°€ reöìx(­—êh €òòr¿¬=~’¬/Ü6 ç èA¾ZX/UUMãÕœ|‰æá —÷Få2¿è^Î<‘¹•!Ž=óÄ"‚€Á xv‚£r(Å—:©Éˆ€RÊ+¿'À9ˆ”¤2·7R®Ì¸ ::‡É ‘8çØK@iPà…¿ È²W¾õª®ä×y•{R±yú€0Âõ·ò­4LðûíÿU‘¹¾ßêº6x¤"Òà©P®(U<þâŒQB>C¤Ú®Bc,hwL €RoÍ@©©«sýzAÏMsò¦€ EUÁoOën ÜûÙ3™{û,çž®Ó$WâoòìuZ¨ðj"äV¬DÈÃ;6‚4<ÑÀÝn¨*ª—£‚ 5€RV©×ÅsÎ*àª!—@ê%„ôíׯGÏžÚŸË—-;,ù]Jjê«sæfM™ü믿z'6kÖìÝ•«>ýdÃ{ï¾ëøððá>8øÉ1£ÿý÷çgÌX½jÕñß~›01#--­¤¤„¢2uÕÊ•¿<ˆû¯^ŸÃ0tÇÇÁ‚ W$\ËÅÞ$v¿::>’©(óÜË8Pqý^jÍþ«3MÍh_¡”BE©7ÔáÊTAŸ\P,Åq ‚\AÁ p^¥Óg”R̸‚ Hµ*}W¬XÞî†ö•—|pð;îìc6Ç”––ÍžõbåRSS/ùºêª«®È_çí¢“G@D-O|_Ð⪦ q—aÓ°iØ4lÚÜ.Í@%ÑAûo<²idLª¥Î›F#Y‹„Ê¢n@$÷ï„äååa³Ö›—R= ›ÞÕ¯ºÆP!6¼fNÈôZ¦7¢¥ñ_“-NËé„ Þ‹ aHãÆÇ}RñsVIKk×£ç­YÏLQeê´iºtùá»ïpC]$¢``Œó*.Ûhà€ HM!”RµRŸŠ0Î)ÅËHM¹”Rož·¦¤¤Îzq¦ÿÄnŒÿðê(˜Ÿ—×ÈÔèê-TE%éøo¿]ì߯Õtä›n¾yÖK/Oœ®ª‘5—idu¥Øê¶]ÿ/¥UÙ9w娍ªiÒÌtòĩ۟ s—aÓ°iØ4lÚ•Ú®V×$r™»Käʳ¢#"\ö²Sy¶:oZë6­ä?Ëåó D£ ⱼ߰[yQ]RA`ñTsÝ­vêb‰wDP«PÞJok/õüPJ}j/çLûÑÐ%ß {] Aˇ J ƒöM7ßôͶmÚÄ-›7ßÞûW˜ÔÛ<¦q#×ùRcT”«´”q^Rò§ëüùËú¥Ô{õS™@Fõ"R8%„‰êåœsŠ—‘š÷«/ÕŠzõþGÏ=^yù¥ 7Ô;ï¼3¡eË7/€¸øø§'OY»vÍ7•"7ýõ}ú0Eݼé«j¿ë§Ý»'e>m6›OŸ>»°¾r¡ x8žÝ‚ î–—þP7.Îy= VŠ´taë•Ã_Û-×¶¤xsÖª‡ŽŽŸ´Áq±u0ß½`Š뇼ô ’$2Æuá´Æš)î¿W¸gšÿÞ ø7à°"~"o€XL!„J ‚@)Ýj’sÆT¦ªªª*ª¢ª„©ŒCA A"""^xq–Éh´Z‹Þ_½Ún·7kÚÌû\ðôéÓÍ›5«P*%%å‚=eãâã C‹É¿Š¿]ÛjâˆMÑ‘*c’¤¨Šh'½¼èDñéæÍ›GGE]¦7`525iܸY¹ê2hjÜHŒŒLLHˆŒ6VžkiÚ´I“&qqqaxÅÄÄ”——7«tœ„7VTÕl6‡aÝL&!¤I“&aX·èèhQ’L&SÖ-"2ÒŽéDQlܤ‰$]v¿²æstT”¥IŒ ˆ×c´(J-[¶´4k^ñjo04µX Ãe­cìÈ‘#õè&xi6G¿»îjwCûÙ³gɲì¹â7ºþúësrr^}õïb/¼0ó£>¬`¼«±}û¶7–,-//_³æ£j¿.%%…sîp8©·\Øx¨ÊWƒAz !,Äý"lžà‡ª¡xsºx"##5©·Ú€Þ@ÍÝ»°)_`0ÄwÀ]ÎÕ~ù=OÐŽ8B)¡‚†A0ÕÞäLeªª(²,˸œsF8¨'b¯¹ÃèéSzÍ{xÁ^ï.¡÷èñtH”À]°fÂì­®Ø÷?1´_Z‚dWÁŽeóWä„Õw˜ôÁЂ S>w€1mÌ+ããÖϘmí7?–L\Y ö˜µ6«ÛépY÷®[²ð«¹NÚš2æ­9ýb=I’”÷ÞÈ)ëmõ¯!¾Ñvòˆùó»çMµ4×jR¯'F?Ð)É,ÉŽ¼­Kç®Êu@l§ô)c:%Hp¶àó¥s×t€˜Ôwê3ÃÒbD—5ç½y vìטó>|"nËôÇìñ6ÓØkÖêÌv¹s˜¹CNÆ[¦ªªx˜–±ýÎ>}§dM}6ëY‘½'jPI7??ÿb„«Õzþ2‡ÐVAlã/ùGÊ=ìr€ˆiØ=}[Oüz¬Ð-ËgNŸ.))¹ß+»ËíǧO‡º677VUõÄ kÁoE•ç¶jÕª¤¤$<‡ö‰‰‰¥¥¥á^¦½]\\†u‹'„œéÑ=-9Û7cLÂÎn´JmGÏɘT<ñ¥®¤aÀG™îtÄö™>7c`Þ´Ï6ˆ\TäJëÝAÜãÙÝæî=ãlENíkøn™P·ý±å¿›}ì1øÃöGӦͼªÊû™+j`o0¨Œy1zù-£¢" !œ³*îÔ8%½z©¾£M@ ”Wîð¸*Š›¨¦w„‹_Å «uàÝý+OŸ0~|…)/ÚøÀéÓ§'gNÒ>/\°À;=}ÜXíóS³´‹-Ľue ê/Ȱ‰s´yBiX}>§:‚eëO´*#k£·¼¹ë3 ÇH+3^Úî0^7(kêCíMà<õãò9s·i>îmÎkÛÇK&ýhÎÜ/ŽÉæ›ÇOϼ½¥ävÍ>ä÷"`dd$€–Í㌠ͫäz‚x+ü~B«&óê¨>›»5?å¹Å¾,‚-z?›³à倸]ëÎÏuÝΕ÷SÜc6œ­´6ã³ú9–MÝP(@Bï1£aÁÄ•!?®ü-9¶Þ ±u­Švwn™Vl^=iˆ˜4l\ZÞª-ÉÉæØv®\§}:»çÛBc¿8#ä§vN(øì+« \ùaþÛý:wäõ¼QúaÉNض®;pÿCc>ÿ<`Çʹ{l7öîlܵÃÛ£‡97ÇÚ# üwq¢££ceeeÐ¥k×Ç@vvvúSOmÚô•¢(½þñïÿZ£Þ.7ý]E ðÿ®I,,ú]QÕŸå•”üyÉŽQ4ïXIe\„Ë}i’$IU«òÈUFý*† ºÛO ”² a¦e«1ÜHÝ ˜/èÜGA®Àް°B‚úÅ^O}ä-í[4|î1ˆ»sÆÂ¬‘‡F/=,Ûo_ùüÒýErâ %oŽì³q÷ûÍãgÜï^™1èë"ˆ‹“Šâ5Q¡õÐéñŸÏÚîñæñ3îw/7`»½õÐ…sÓï>”õ…@ú[{é™qéû]8tÉ‘Ý6Mß.u?µã©9£2w;Ì7OZð’tÔ'RH ûãê·”x£m¹îëà¿ëëTˆÖç>WQTEQEÑÔ^Î ¡T QÇàÕz9óô¸=hâ3àŒåœúÐ } a„ õBîwÜëcŠßcj;“­àÆçþ™•`GK¶œððŠæ¶ÃîI)úvUeWLôüófÏÜëªâûŒ)½;‰¹ëóë¼áæ÷´+üjY˜ÞúÒ1ù¡ôv—d¦Î®r©v ¶‚H"€Û³#e‡ÃmN0‹ÎXsñ]‘•‹ qÉ 5|wΖ‚ŒÞ;¶¸b{ô4îy» Y—zÃ{WÚåKfæÓ@Q”3gÎ,Z¸~ûí;wîX°hQy¹û`îì;ÿ²úü½íu³3Ÿ,9çR˜ÚÜbv”üÙúšÄþ=uI¥^g¾+$SU½ìþB‚ ¨Õ'ÑFÑ IDAT¬3Šé”©Ù XT¯¦QŒê­1(õ"uwÿÅAp¾)„'r$¼Ýz5Ó:ª!sq PE‚ ÷¡M›ŽÉP¼mã¾cºµ„ÃÇä¢ýû èÐ!û€8 ˆ-ooïÜ6ýë"Š‹eÀÒmêŒÛŽÏŸ´á˜ ¶¿½½sÛôíÅplÓ¦ãuû›øE6Ïþz¿ àÔÑãînñ[vkoÏž´ÛŽÝ³w‹÷n[JˆŸi‚WLÕƒ¦¹_Æ6Å‚Ÿã. ˆö87hÉÓ(U4!—BTÆJƒ(Š’$‰’( zs®1-ï×õ^®e~Óý |І&Kkj¯®õÖÏsÏœ`6§$»_˜ñD¡;¶WÖÜŒySÖ[ÒFýkzß88~Z5wGe…4ážô ‡HÐ"¥¥¿óÁMf(Þ²tú.W]·2aà€Ø=ËRzÒ1iXzÛÜ·§ÊRjK%?4æÆ‚3  ?×1¬_Ø[mRRßa=âàsI’dÙã•'»eI2ŠÖ®=ÿÍÙ¯{Ì–Mgúö„s `L}ØÅ•8aµ>íyyÔŸŸ}¶ñ³ÏþúúH¢á¤íô³w•••kS&z˜¡”^ªLn¢ ¨Lõ¿—ÊŒÃeͤd(WÕê¤^&PŽ© ‚@9 þ>2ªÅÅ7>£åêáõõ%YAä¡á-ÉCèÑu£ò)¦®Eq-ªI\ ¿ª(Ç\Fp;ºè#ÛíN“É$‚±å£Gö¹Ö"H d€Åbr:XRºvÀPp;7zÊ›,––Ýf¯¹]›i‚£Zjk·Ûîô|€`±HÎCv}¢½Ø ñ]Ÿzë¯Ûê:¯G{®oro8¯7Áš& Ê) œs.PÊ)ezø-%À !”BI(¥ €ê~Œ1ð¨ÌCˆÀð5ŸwC=}8rÖ}^èÛŽ-y#ú¥×[]»âÉW€›vOFÖlqFf'Ö³ßΙüU»™s2ÈÜPÉÁ»äñ;d1¶Ó¸Ys§¸ÓçåÔ¡(¶} 'l™~0˜Ýp½hˆ˜4l\ÚSóe€Ð¢]BŸéYmsçOÓjhýìµÓ3f-»ÖœùŽä³p¹Ý¢(éâ®(‰n·«ò6qíÙšûÄý=Í›ôîàüöe+¤½|„×.®â…AVÔ …©‚A0·ûI½¢AU¹ÿXIUTR^Æ88Ñ``œW3@c,BQ£A¤2e•¥^޹1j9~ÂM€ÔÑILж‚ ˆÞã$”ŒÊÃED«"u\TIªOPk0*!ûz’ɤ«F¢Åbr:òu#fŒ´dÏ™4~|úøùÙš"k·»Mñ– EOmœ>n™ýöÌÑ׉N»ýèG“†}hèЇ†pwÖ¡R©Ûn“ɳ6“¦{·a{^㮪¨ªnÁ (ªâµÝÕ"p¹žoÍãÌëýä Ö³´i{ûùªº‘¯æî xÝ|õÔmZÀß0¼qÅz'¦þweV‡h6ŠÞ£À?E²lËýì+kBZ²X¡˜ÓfsY×ÍûÐ=0sd’rí²-gk.¤¤%Ôe=￱è«-Á­dëECzvNN¾ç•¶áÓÏVi×oöš>Ð"`‘ØîÏLï[´læÊ|¯kÉ­ ¦<ùèØ'3_Þ±ŽÜ<—\¬{6@b²ÙQ,Kœ»å@lÞÝûÝèÚ±ÃV]ÝÂb×DƒÀUÕÿ’ÁÕ`0\Â÷‘%ƒsæ?ÀRUU{GâòµK^ÔË<Žç‚ UËDÚEƒ,Pôê­1(õ"u7d&V OoA+±cWEîîðé|Í’ºJÊÔ}kÈígú[Ÿ>­E1îöíÝû²‰&“ ì§ì2€¹ë€Žñò¡ì}¦ÛGtDs\œÀí´Û‹¾^°ÒÞmê˜D÷mÛgé3ú¶DÀ˜Ø:.”b&Ê>dé3èf#opgK)°šÚ/œs¦2UQYvËnw¹†»Ü]îv»eY–ϢȲ,»ÝnïRååÚBЬøgcã~Iט¦ +²"»ÝÚZËËݲ,k¾¾Œù%iÓ‹ûâ{ý<}™'Ö¸^âÚ³%?iذ¶F1¡W¿dëyrLrÛ$³6Û˜Ô¯orqa‘´°í«ù«½3F¦„ÚãbL§^iFk­[Ø¢o¿„ÿÙz¶ªe¼!…+Ÿtï=Ú×(þÏô¡O¯;!¦ z&½{,˜o™4ý~ײ–ïq©ù#&u¶}¾åÀ‰œîÎ÷tc{=ÐÎñÞ í‘sÿ³×üÀ¸ÎŽ­;ÕÖ-vq½À`Îü¯nE)%—N‡5 * ø …©A¸¼í„ê¬z1N Žá NlófO=:ôç¯ÖþôŇ,˜)A%[À9¹¬®®´›n¤®FÌðF.G«^A+óž2³çáråç|¨ªÇüåHîŽcÍ«ì%ʦPK¸m˾vÒŠ5ñɹ+ƒ,nøèøì—>Yï´ŸÚ·>{ßµ¸¾[0§åôÌ77L•Àyhù3Y›<+(þzΪnoNJÏ¿`÷ÒY'e.Ü)¸Oe/Éš[ì ú¥®íKç·Ÿž¹v½ätÿqß>»7®WQJ)åœkƺÀ¹£«úëµ>¿J‰_Þ6O¸!Þè` „ø…ðúIœ0¦‚œ1F¯ùƒoM~ž^—^ÆTUez€±,{"Œ}Šp==ûÎîXòfrÖø·ÿ.ëïÍûʱ©½Ò§?—`Ù-;­9Ëæ~Tª´mëüeægŽÎIÿÊÿà¼1sõÇéà(Ü2áVG5OLØÏ˜37G®f¹°oHeŒqiíÒ¬fØi|`dïÖ 0ûý~ú¹»ìÑiŸCŸYóïOÁmÝ»nîkšhkýìµu™Ï,ù÷8ÑmÛ³òµÏ­!V¿õG÷¸-UX2„õ– KDÁPáa¡¢ªšOø%û ƒ3æ?Zb \Î88ƒÁ ²jv1Æ(p‡ HˆÞ*QÿqßÁ‡ž//çŒÉЬÎðå€ZlÔ-Zø¦¸·‹«a4iÒ¤¼¬¬ÒŽ Þîì¿­SSSóòò°]—œ6÷µ*-.WÊj76nÔÚhË>sö÷’¸Ë°iØ4l6í nWRŸDVÎÜ*•gEÅE”ÚÜ':UçM»öÞ¤²?ÊÕÒŠ½OC$Š‹8òÉÿ°[y1´JJ¢T ¡zG”1•1UUTEU=´žÎ§_6MžõÌГ¥Q*hIݨ&{Ò­1_®µÊCïêÁ+õêÑæ®L³|Ð|t šiyàЙ AjCTt´Ýn¯z‹ÅRzþ|½hN›6m¬VëùµíßûÖ{þÑóÛ÷ºËu‹”‘÷ß=íõ7üÏu‰8nÄk®ŠÿåhA¹'óÛw¾¾âƒ‡4;sútIIÉ%oõßÚ\›>âÁ_Žœ>RîO¸*.©e‹7ß_wèÈÑ ÿV­JJJŽp|Z˜˜XZZzúôé0¬ÛÕ-Z¨ŠR\\†u‹'„œÎTT…‹ZM7š<-S˜¢0÷'$Hƾƒ HT(€Ãî¨ò—ÅmF@J@¯ÞFôxRõ~ b )©ÝòQ½$Ñ‚ -Äú‘±1ŠR‚æaÉÔº"ŽA¯á!‚4EáR„7s†a$×ÀAQ!yøO!XR"ʪ )ë‹êEAâ Æ¨B ^ÏA!¶"hœñ¤(’Æô5”(ªÕï ßáK‰iÙAŽ»ÏB刚Xß6I”ÐZq¶V²8!ÝxöiȬ[Q„áý\Q•$NmT¦^+rØà\a šÖ«— ¨Gê•BPBq‡ Hôq!S¯gD%%0ôêmx§ƒ‡ eï‡˜Ó iê´ü=@ЊA ëbŽìÀ"bj¬„¢R¢wX ”J)ë^ µÎ?‰rq4ÉÕ:£æ‡ð¿!(ðÖ*.j¾‚Äæ©œ‹ðvBç\aJßZTUÆe-ÕUQŸ¹ÂQ« Œ QO Ãz‰9 `Œ Áão%¥ ¥Þ7ÎxRö~ˆù¾¨4$s[ÝÀA&ü5$ ‚´ÈN-ö*ë7ü8òLŽ^ „gf‹›5z 5Ùh 8êEFj ÁɆ”RJ!¤”Á2Ç{ ât8$Èð†I£LUXŸVÙTUÞ$€äf~‹Òt«ªÙÆÙFÁ°›D$ö0Œ1ʹˆ·‰4_®C1¨Á3‚T½bOb¸”6§Ò®»‡9£’)™Sá†d”pñëþbKT@ÈD6xk#‚´HÌøÈè«À:o}FM¿–šò^æ_Ÿ{ºûâÛÿùÞØoª˜´ð¦ýã'}pÔã ÏŸŸ~±ïû·<¹AUS…{£]í‰Ø4btZEˆˆÕ\Ðx)e”RJ %æ CJ!…àBι ‚ Ãz‰ S"… CHMaIêUk·Ÿ@aŠÒ´^½Œ™Ï¼âöð‚RŠÓ8A¢® Q• 3!ð-ºÆ4ÎxRJ‹Õëdí.jB\¹FL§[É葽¿Yá†N ‰ õ"‚XFA#Ñ cÊ‚xžŽ»Ý”zqmíjI¾²ÆS!ð&!Æ„Bi(b7Úi%”RÊ üERÁ¹a†AH ‚ )cL•vúÞ{Qþ?‡ÍÝê¹_š|Ž+¸RÓ`Ëœ[g¬ÑÓÎýû¤á—vuùKö|2÷éöúÂwqú=¯Ý˜;îþKÀÙ{øÌ‘ïÏxâÐÀÙcá_÷.ÎUû=üúä>º×à;´u鿞_‘«7SmÕ®ÇÞsí© üÅß/Q’ªH¨>·ücv¿½Œ˜¿³¡k3>úìm¾ç†ÎÚ¤ƒzÑ´·&Ÿ ~ð­bø¼­aJûË“¯Ý™±ú‘Ïm -u^úð+ãú|?{ðÌõúÉ·YøÈX•)º¿RÖöêeJ2½z…œ‡?ïâ\(”6éôIS˜õzõJÆj4‚Ä_KÆ(¯/-› èÕÛðAªÞ±ŸÏŠjQ²³,ê*׉ŽŸïK‰£AG?^b™§|±ŠbÊФàp8Lµ€„ý ‹è–µþaA¼²Æî!$¸¥]!…B˜Õ覎Ë(¡ÔW…yð ÄÔx ÄõšB/熡Ӛ߀C“Ù'µëULþ“/¿0´Dßô̰ëB«O½gî¹;up]8rTϽßýÐ^è=ræ¤á{GÏý>ª’×qà½#³Ö?ýÀW… ®~íÈìuËÜÛg|©8{Þ6íáqWíÿÁ¡f©pÆU#¯U—N¾c}‰š1pê?†ÿiÓƒ+KR±"tòàá=õüƬ͸|dµ0¨Ô{ÒœùïM°øÇ»Ðóó}½/=CÝòMàt§õ»(³0?ðõCÖ=2)€ª*Ü[+fMp®&Õ]AQ˜¨¥ô‚\Q›v¾Ï“D’¸­Ÿ’RôêE$Æ›…1CÔ3ˆRP ükx€‡ UgÅ”$𪠅RÇ žHA$nZ6I,UÊ–ãàî ÇÍwv¦|Ûß~zö9>€Ì ÆN¾ãÝøóVÎñòw>W¯k&»©o{ ü»_ŸôÀ§¡ï{.¸÷é;´×'=ùy±«×5“&ßÔ× Þ‚o_™ýôy¦Ïƒþ…·{ßLÕí†ýo?ýô§ûuÏFÞ?î5¿oÿ†ÝZMaìvG`¼Oh0Ú6è±iÎáÚPÇÄ!d¦kº,pι0ÿ)¤$„ÊcŠI d—˜!À Íñ º7„BzçÜÐý °{ÎBX9û¬†^œûÑì5{³¦>›e­ë¢¿õÎ_ñr!¨çöË:°ò¹½°sÉÚÂÙê ßo­»ý™c& ,^øà¹:tì?üv˜{ïâÜðM*ö®þ¦°Ç €æÑ].ÕwèP è… }ý5-êVÖ¯€Úuðݽ÷¼±ºëØn ]ÛnÀÈ…KÞ÷ì¨i¦Ë—_ç7üÙ[ ÏüÓ¹®oÖû2.ê—–ýMþE]¬|dRcÖÍ!jyõ\*Š’ÔŸP¹á-¢!¥h¾šì²T•ú¬zÍ×®ñ™(‚ ±Æ×DUÁã¥e3ó8 L#z<©z?™àô7•½äˆ è…‡ r|ux)ˆŒ=DMÍ®)½oçý“oúdþ߃OOºm÷Èù9zQÞ‹yqGžÞùš9ÏÝöŸ|÷aÑF<ø7ÿë“nZ™™™Z@¦9¿ï~Ã#3?yäÁÏ‹AýÈÿæùžk?/êvã?ùçœ>-ÐNé«ÝÏø>è|㜧o½`å#_hŒ˜ü‡‚Ù#îû®Øó‡q³ghûkôž Auµ& ¬&Pj™5RóWÍ…R£óšB¯aú-œs.¤ „2EQÕDaŒ™?%k­BÍòLzJ¯©ór!8çŒ1Î%B¤ŠŠQòýÖpeE]×qÀí¶¾ö £Sš¯ðP ”³$¿P;'#  ¶B¨v»æþážåÏÜê‹ó{ΞýÏѲ?ØÛ\õÍ]ñqá´{&•,^ãï?øä-K^/¬³IjT@ízãÈ>ßÏ ·ç# ]›1pÄÀÂ×ÊÖFn—ªuüÔ‚Áªæ;´å£Wæ/ÿ12X[ÿfuîØþç:ׯ©h×ïb×Ö—r»¤^‹™T™u3*„·¥çÂP“gkàr9…²vXœ48c¬I'‡Íf>$‹³’Š>|‚DGS¢ªŒ×Õ+AJ-jààt:orKϬžHiYéœ9s¼eµÞ³Wåo×]wñE3Æ¥ÅEEO>ñxYYÙCÓ§/~íµŸ;n|Ÿ>}JKK)!\ð×-ú~çΣêtðÂ:¾¦¾–y –ÒDÂ_ЫA¤¥öj1ŸDZ'-[ 7B'§Ü1ËxUÄ¡ý»W®< @ÁçŸl¿åŽ ;CÎ=oÇÈÛStU{¨ÿØ×ûùŒ•y:è*@ú“øcÞÜÉì×ÔÓþØ×ûùŒÏ àÀÊy7]ØKýtü´aåÀáýyþ 3ÓAí|Aߢ “¿+€âï>ÙðÓ™aý@´pÏ„ ]UÈAÖX9™&ɦÕnX°”ÁÔi¦ÔkÔmD„”eLQTUÕ4- õšŽ µ]}{S €Œ1ÓÀ—Rˆ@n ~Íjï«ú«ß<±S—KóûüÁ5ºîW]‘ѰÌ­P‹µ³‘/.ªË…kæ?ò¯Ùªõ릶œ|Õð>.õÀžÜSQgƒ©ˆzòàQ§î|iz®®ölàÚŒËG,^üà6œ£—íœ?vØB]×ÁÕõòILž?vþα׷uõÞÛöK[³²¤ã€‹`ýÓ¹0ÜÒ§8eî0… aà ÔäEõjªÆ #"&ÆRIªGD”z©ŠYoZ6BÑ¿AXÃU`¬ž¨^`Ý¡–bë–Í _Z7|Ãõ7¼òòš òà´éE¿ývßäIÐ夓ÊÊÊàù¹sËËËÍÍ–¼ùÆÚµkàœsÎ>üÎ ãÇM‘PêMáû!‘Yª¥¤RìïAõ]–é·¢õ\Íå&¬É¬ dºZÏ‘;²üðkôâù}Þ€š§ûÜn· ®.—ß~ëåÝÓ5Õ“_@zºÛ·» â§»_uCw¿ï“à÷Ýéé].|øõ?š+ݰßíðëEAýÇ ¤§k¾ÝÅ…E>Ȭ5,h¦$,H7Ðk:í z:ÌÓ—Ô(¾„H)Jj* ’Q*)”J¨ ÂsSBhLü.Bj2ÃÊ*‰Œ(i°´„´J繃Î(^>Õ|ßçókžø©ªš®û#¶/þröÔå}¦=>þš“?ÈÜ›¾sþˆ_êjƹw?üøD}ü3›šE ìzÍã<M±¾0­÷µïfLþäPêUDí:øîÞÙ¯>¸7ø¬¥þµíŒP¼xÚV_Ä7t]ðå®\²éªqgv„?FìηeÍÎá»(måÎþgøÖ=uzF+’eNqÊ ¨ªÁE¸kÁԤ鰪ªp)"Bi kZ‘UQ)Dü)—hAãBTÆ !ꛘïX‘ªªªÍ›7›ŸÿrøŒ3N_Û·oß¶mOxìÑ<(gÿtð ùaêý¼òòÂ~ø¡ÖÌåüµ°ðhg¼®Rõv Dˆf¿©;†æ¾Ai©Ã¼èÍ»¥’žEw™o¦ù«&jý[ÙbçcÕ\n @Õãqy‹½z¯[¸5ý?“&¯,С׈—'ù]í=µTœÃŸÌx"ïö'ÆÝñÕ=/æèà-*Úÿö}÷ü'\Ž^¶"¯ßåîÍír…EEçÖˆ«2 ÐzkÒª ˆ@%DÚ1ÀR¾´ß5³·I)¤¹?.8åf¾5*HЮ7tNƒÑÚ2ÜB„,»’ñ² ¦ —êºwéì€GCqþ¯®Þ]°×iPòe¤Šç+,¬8´ô™%g>uÏm[ï[ü£}¿zᦵ;‡íÝ65ÇþÏ<ǵåÕõ…P²sé¶¼åÌ´O•¤\E:^t^×®¾5ȼs5-ëõ®K¦Þ·ôP̵,÷÷é˜Õç•‹‚ËÎ\òÜšGî™_ûmP¿/Zuõï×ìq[ÿ ;éûò‘_!ºÔk•Sœ:¨ŒIÁkåLã\U’æ® 0fè‘’+碩£zÆD}®ú¥hÖ‹ HÌ9eTq½z¤Íhààp8N:餰é‰ÌÏÏ÷ù|u§3xçí·ÃfeõÚ±};¯/lù†oº|À@'­²²jæ£3޶qÆë*Uo‡„©)%™‹H’k0AZf¯[+#Ä*.ó$æðS6G÷$ˆ8:Ñ}Êå—w[ûÁÈüãU§é;? º]n(:\¤x.¸êíá;}÷†î‘·^ðÉÓ À“™î/(ðûŠŠóV>ÿúÿ1yø†ówlÿ|‡gäíÜðôçy:¸:uwì/ˆú“úî 9é·^ó‡OžÿÎçê{Õå]j¼z¥ù@7¨Ó ÁѼœ‹Ò|f]“º-蟊ð­uZj ´!ͤ\Ĥà¦[DM0„B‹k´cÓÂÐõßß°§t*€žƒ.wmš·)¨ûé;×ï~͵]×/ÎU{_7 #û?;£+ ¿®˜eÏw9 IDATûÆy³ÇÞ¶qêËÑe>5íÜ?õvZZØ<õ*),qwNWuo®®žçô„C}©X‘ºiqà³sÀãÏt[2bþNP{_3î¢ÂÅ󿊺Þ|3Xösî_ø§5ÃgmÒ]{w*Þ³·DµãåƒÏÕ·>5•š¾sÙÖ´GFœ»ç•Å%±žÚXå§ŠªðÚÍ„Á…¦©Éê>TE©;¹âR°&VFƤ¨¯ÂlXcõŠ‚‡“EQŒ¸ÍPF›Oª¬¬ÌÉÉ©§"„Œ9r×÷ßoÛ¶-|9S•På.íßÿ¯½Æát.~mÑ—ëÖ…oöÎÞ6 þpöÙ>öø¸±cަÁD©7e¤RB©E^I,‡Ä ^A:È‹©ôZÆ«—è.óÍeŽTûvÖ¶¸Û(;«pþÝŸÕýž_ÏL×|Ûß~zqèêoç=<ã%Þ¢‚íïoØÞ]߆çfw¾ÜsoOÖÀ»û•XÜAÁÊÙo\ðÜ=£¾7÷»ÿäžqO¿=Nð|5ÿÁ§ ¼QÔ÷ù‹sO»ÜK4¯/ï»íÛ‹Ü!ÕÃ0(¥TÊ`26rÛ¦®Ê–Tz) fL3ÿ‚`px¸§‚”BpÈOÌG …À Bà ÔLéþåпãS}¤yÓ„I¾2•ÓÆºÎt‘oõä0Ó÷ÍÂù='=ðâ›.ðå®?û=Öw ×Î]xÎ?Æß¾iÜŠ°¥ê™ã^ys$”ä®™ûüš’æ©™ïËWæ÷;é_/ª Z?÷Ÿ[õ”¬Hôó–Ñ»wŸü4øªÁ*«Ö±ÿÝ?ÐQ]/ÉÝ´ø©Å¹16Ü»vSI¿Œ5q,,}d,‰MUemÁ¹ËîN–«(Œ 1=”\h*kÒz)ªbèF½ïšJ!)% J½‚Dô&ª…ÕcàÈè`ÙŠPJGã-/ãõ×#VØ·ï†o2?¯Y½zÍêÕ#FŽÒ´˜Cøï¾ývÂÄ{=Ï‘#Goœ“U±¾}ûÞ{ï¤_œÿõ×_G¬ºìÿ.¿âŠ+„¿ý6ï¹ç¼ÞšÁÛ¶m_YôÚï/}õ•WB o¹í¶n¸qÄ]wþüóÏM—.Õ‘ EõJë˜$HÝœå‚ Èq%14ÝæJËF*  "Ñ/|8é€Âê>x`hÍ’OÍÿøvüç¡;þS³UÞÓC¿3?ÿï‘[ÿg~ÌùàɑԨ†6ÐwüóÖ{?¼aîø s먪ªÊÌÆ ¤ 輄™“­FÆ óÊ Í ÿRJ)3Íy„rº™HBpœÇ‰D¼ñ Ó{M™7 õ —"ø–O¿kyø¿¿yzè7Û”lyã¡;߈±ƒmÏ ­‰W)ùrÖ]_ì¯y¶×ϸi½Uêúë¦ùÓ7Å\›B Q±âÁ¯™9lM̵a÷õ7OÎoÉú¹÷Æ©QÉÇÓ'>î}yÔ­Á¯5ãæ¯àÇÅ–>2‡)ŠQKéCJ¦¨ÉzV¨*Šà<ÂHKáp¶jÒWžJõ:ÁuáR˜ 3^ ‚ÔjUõF}J)%£Äªµ`&N<øãÁwß}§îÚï¾ûnð[†öÖ[oóã’••%¥,..>ªÆ9)ûÓ¥—^|É%ÙÑ´×Î;_uÕUSî›\]]}Å•ö÷Ûç=ÿ\øûöýЯ_¿×/6 Ãã„¢âBÙ¥7ÝYïw—}öé²Ï>³·¬,"æÕäþ©SÌÏÏ“äÆ9){ x2D;îyy?ýío³ÛUU•\Ø/===ÂŽR¶|ùòÛ†5¥Þ+^±páK}O;½î®êMH׫W¯¤Ÿï:Xô–ðH°K‡ÇÙ¸oÙdÛv'¤Ë¶Í^/…‰V­[ÞÈ{Õí332황xÊZðÕˆUêaÕ°^G µ {+›Ô¢õ\N zõjÓìUS˜h•Ö†ÔyÃLIh­AH½yºTWW‡…·…I²!Qµ¶œZ+P-”DJ)¤Y3| 5ú`ÜníU^Ké ?×ub×PâEk"„غeó—Àƒßpý ¯¼¼°M›6?üðÃÔû&ûò¨Œ Áßr.˜Æ’Õ«p™sAmÒ°^© êÏ #ú°#‚ÔÁ)Œé²©WHMš–¢ªêöœV¹ÉüwzZ›«ÿï’=°Mž–-÷À?þø¡éÓ«ª*7~½ÑëõÖCÞ““ÓÊÝêÄŽ¹a¨šöÓÁƒQwUoBº&šYYsÂÖ1­ƒFÕªâêF}Ëåt”ÿæ-È9Òìõ:åÌe¥>¡‹Æ•¿•³èpqÑÁ’TQm¿9RZZšô#løýÅÅ%¿9"ãJ½UUUG óòóJKË"V|òÉ¥¥¥ÖœÚwîܹ²²Òšáeæ+ÑÇÊlºQ´oßžòË/¿X°líÚµ³ÙlùAÃnKq '¸ÜîXï¸7/iiié>ß’¿ç6­3Óܾún4‡ÝVîÍ,:r¤î[t­Zµª®ªÚ·oßQ–Ä“–Vé«(.) •Än·UTVüZpøHQêiM%õvëÑcÈ­·šR÷têÜ™1öÉLJ‹¿áø|¾ìÛ½^ŸßïµÏä&¤Kù ÈD²ÀXHè5gƬƒ”2ƒ Ò"{5ë7î„Dï´ðÑeR DׯÝU\¤æE´r"Ò¤PJGã-/ãõ×#Ú¿ß¿öóµWÿeÐ1šr+ŒFDËÄ9W(KVZ6Ea¬Î«Í\ …±&=QFeƒÒ² B)Îã©;¼fŠÂô°¼É l6ÍV)¡ºZ·Ûl©x\“)õÎ{nnèóö­[ÇŽX-Ӝɑ#G&Mœ`~žó쳡åcF4?4]Bº”ŸQ’À­Ä2Ó“ð7(7ËBAZâ@/v¨&±ŠƒƒD…ïØç£¬X£ŽÆü¤Î'<5'fAC&˜œ A,clÂĉ<øî»ï„z<žÒÒRÓ7ö‚óÏÿ~÷®c4åV"¢)Bhª’¬éª¨u-8”1BHµPš¦1ʸ¨?/›’šy2Aj ۈʨ!Dýcp´)›BHk·«¢¢*ügun8öT<° ^[) ¥$©Ô´¸³Ì] TG‚ -qœ¯G°P¿­˜(ò%i`CYØ9é!Q„ž!|^£„š™yÞh9Þ¤”„nRW¨÷"ˆ…¸|ÀÀ .ì×£Gþ—õ7—Œ=úÔSO½î†ýþjJÙÎ;>|ÿýcS¦(²ŽŽÁ9W%Y]ˆª©\DF× !TF›îÕ›M‚7¤é“B0 éE$ c†Qß+ûmÚ¨^â°ÛKËÊ×ÕÕ~Fõ"ÇtF¤fDZhœžyA–‰c1$­ÒwIˆj=DPàKÒ@_„ôSh¬p¼zHÍ„ 1ÚFä[ŦÂKÍ?&„RJR )„‚ !„üóe± Ë>ûtÙgŸF,\¿~ýúõë}a4Æ8”D¹Š’4ýSU˜"â'„Š¢4m‚ÂѰ¶šKI(н‚DÀ1E¢~wV„’¦”zØmªæ+AúýºÃŽR/r,o J€‹DæÒ–™Ôã|Ai@e™7>Itë¡Ô|á$óÚæt_tÛ?¾Õ-(œ=åµ›÷ž°ô¨STxþòìÂÓ޻鱯tÐ4U˜’©)ø6Œ}U—Õ, ì*Ê.Ca»Á¹FÍeH!„JY”J€”BpÎ97 Ãü !q¦Bäx@Q”ºœ Æ’æÕ«* ‘6C‚s…±¦Ëª* ç¢!MŸ‚@¯^AêÆÆŒzq¤iÀ¦©†¿f`L$T†ÃéHÉ~¯­EHhd`ÇÃÄzz)‡‚ Ç×ÐZe‘–/dŠb·ÛM©·Þ€ÞÚg!´qø·jƒemÂf9×ü+8. A˜Q½”2ʘ¢0ÆEaœBB Á C×) ‡LˆH‘#í9óÎi“/É›}˳[‚‹ÔN—Ý9úú3;kà?°dìÌÕ>€Œóî5äün.ð|øðýÿ=¶‹3'¼1øÀØÉÿ-WŸ»žùÞô™ùW>3æ[t@½øÑ·§ôõ{ý¾ü-ïΛ³ì€Þ,uͺkþSWfÿ¥iZΫÃ&¿W˜z ¡vúÌ3åLþBvØÒŒ3¯»{ð•}:¹@÷X·à™… !­Ï ¿tV7— ¾ü¯—<;ou¾êż3µ˜I°½ëfþ}î–° ¥]=ûÍ»3WM»ãÙÍ¡¥®þ.žØ7{Öõ¬Ó»³ð‘±ø”›1Áˆ† ¡&1ªWU„¬kà YS¦ecŒÖuˆŠ’PŠ^½‚DêQ3Å(°¦”z !šMÓÃÓ²ÔuÃeÓR²ßÁk+uï žTHébŒ{!CfAZb§»¿°Î3¾ØÖCR‚M£Õ~g2aNg@Œ5e áÉuôîõ–Í-¤ñŠ€ÓBØ_ÒDQj ¹”QS ü\-E8ÙkþaŒBH"dÈÖ!àæ›"GYí6hÚ”þÞüÂð…iß÷Е‹¦ÜXRëÔ>cf Sßzì®Gòã*x®˜<º×ºYS¾,uÕ«/Až¹Ø¿ù™Û¦¯Ó\YÃyt ì±K󛣾{Œ¼fAð݆>?6¦dE‚§¥ë»²üyu–k.ýë…ŸÚS¢»úŒyzÊß³7ÏÚ¤¹ çÍæeêj×a³ž}Ùæû—•x<®üw&]”ãô¼<_ŸËÎT7o œvÏE—dæyÍä[÷ÈX~Ê­0."-^¤@)U”øTÖ{q(Š4DD/B¡InŸZ·j¥©*‚Qêr8XÃfgBJÆ(*½‚D® QUEaõ83HÓ¡I cWµê:­±Ó²!Çö–Ùø]b·LSl1-‚ H‹ìÔ€¤DN+ÛOX2 :µ»»ßÄyÏiïï¶·f=µt· óÂñSï:§‹[ÿOËŸ™öÒ·>×)×N™xóéí5ðïzmü”Bß÷\xßœ»´Eã[[ì:åÚ)So>Ý ÞÃß¼ôÔ¬µy¦Ïƒ·Çéí5·ö½õÔ¬÷ëž³GO›xiÍïÝ·~WXœ„Ýn0s Ñ€öZ+ZHÉ•5ƒþ(‹‚§Cšfº"àµ`ÔzÍ€]% ¨¸_“Rˆ ðlþ ýŒyÉ€IoÊ<†Ö‹|8kõž¬ŸïZÖñ²ë36>ûøÆp ÔÓÿú>9 Æ|_çu5nʕЦ.ÍÕ ÓewÝ ÏŽ[t |ßžU /ë”ÐÜ: zæÕyW=›ÂQ»Õ'çµUÝÆw‹X“ÿåÅòå|wþêqnühYà¬ç~} ä¬L@‰+ÓíÍ‹g½¢go.<ë²ó]›Ö™¡Ý_ìÉÞ˜qWëŸb+£ª ¢î,Æ0¸B¥ R/‡H/.a,‰ùãùçL9¬Sû )e ¤0 ¾}÷Þz¿(¤ @ÐÀAºSEQ8oØ£&MËà´Û CWŸŒjÝî@ä˜Þ2µ”‹DÅ’ȬzAZðX/Fw'-TÀe!”ÊÔ{é$ýô.û&Ü6k?d˜>gʰ]w¾°[/úií¢‡^Øž§w¾vÞ¿† üèÛ¥Egž~ÑøkWäAf¦VÐÞÔºž>¦ýGMY[ êÙ£§_ç_0jÐÚ¢îƒçÌó—]S>.Ð~ºvߨ1Û}Ðyð¼9Ãú-Ÿ¶V»pôÔs?5|â·Åž³'<û˜¶¯F ÑBQ´fÄ­2KâvC·a> !ÔάV£ôš–ºÜ0 Ã0LµWJB(eLQÔJÖ+…àÁ?æÆ2¨ùÖèÇœaâ±BJ)’“­xç–bpe…-qõêë.t—ç³™lñÅù=WÖeç©ÙïíiöŠ{.þkßÜe ¢Äô¦JEÔn7é»sÞ”Ü^3coãé=ä¯Yy_¼VR«èƒ†ôñož• nMí6äéW†hš/ó‡/Í[–y^ýWÙù®u«|_âÚüïÝR¯µO±¥Q™ÂE%Cç\QXRrÊ»YÇ5W¡0–DyÕi·íÝÿãûËV—•{õE!$ ´³‚ µ†× £õ§e“@¤¤MÚ†bÓÔðw,$H?×vŒê=îéyõÉJºFÌÁ~ÈIÎ ñ‹ÝoîKæuHIs kYÝ’Dr³áA¤%;^–X§ˆ$v÷*…æ°ª¤ñ²ÖIˆëõäßµ|ù~ Ö|´mè]ýºÀîýzÞöí·kWÑ ÌtP»\zºwÍ´y:è*@z¿©ÓÿôÓ3–î×ÔÓ/=Ý»fÚÚØ¿|ùO7÷û½úñzøiýŠí>€Ãû~ò÷kŸj—~§­Ÿðm1ûÑúŸúµØmÌh¦A dÓaÛ‚†ºaŽ»´V pйÁLžF©aZ/B¡”)ªªjš¦jªª(Jm©7$ärQƒR8B.¸¬nd&9«áéäñduó?<ýî\Fÿ)³Æ_3y™Çãê–á™ùøØì’´óÆ=5qhÎÝ kkyþ:æjP bø×i}ƼüÆ] º=P°ê…i›|Í]ËNWÊØüÒ×QÊ‘"Q»Ó;ûßäêZ¯¨ôþâ´+2ÝPüÝk³ÖíN×ÏþçõÝÜšoLJs><=oä-ÿÖu\ÝN™öà]ù#_ÈŽh¸|›ÿ·gØ•¥­Z^ÒéŠK`ݬpW*œb‹O¹E¢î¼G†¢$ÇbÁ¦)\ò:&’ ÁvÔþœ»Ñ0sÞ:½¤ „âLAºòŽÂÌÄ•õ5#h“zõhšê×üz%ºîrØR²ßÁk+‰øý¼ê`…á3„óB’9˜½]ò¯Ôv@ ‰y8`Z6AJÌ>Á2í~ìÀM"¡©íâŒáÜçžÚþÄzFrFþ¾Ÿ¾->~ö{ͬJzQ‘×ív«àê2àÎa{¤kZz:¬€ôt·w×áÚßÔz  ~ïGÁï»ÓÓ»ô›¹äRs¥ö¹Ý渨(÷åÐÒÓ5ﮢÀ¢/´¯52¨QoÃuÛ€ÎTU!`«PÎJ°f Ã@€J*¨”R2J%¥‚Jˆ ”€$„PJ%PB®; '‚„p)ÍÈn)Âà¡7u_=*Þøîs}P¸nUÎÐ+{¹Vø³ß{3»J6.ßü÷á}2`O­ˆØ’/žš´¬ï#OM¼vÇÄ¥u\üÙóNP3Îõè¬Éþ1³76£¨ö¾þX5mg´§1)QµëQ}v,œºGˆ!Jg/qÃBP3úüuü”™êô‰Kóòß|ã» z².3ù©»fX°@×ußåo~}õ„³:Avd¥}›Wgß}Ý%žå;.;ÓûÅãùµù°Ö)¶ü”›1CŠº]ˆßàJ’b]E•"Š¡<ç‚QJxr¬äN7 ÑøIœ’ øŠ&‚ ‘£|¢hJüÊ¥$’4™CÀ΋2Ák•į‹Öæ 6Õ xm%ó2•@„”†”†”B€Ë¤¿J !++yÝ¢d‹ ‚„z§8ë,ãà@b…KzÌ{5ÕÖªþ'öŠÓs¬§¹ÝÕHMOw{½^ý”¡Ó‡¥¯jÂèÑcF?³ÞTd‹Šüîöé_=üÑ´Q Š.xç)*€·¨hß[¾yðà›_;è/S>ŽåZäõ»ÝÁ½¹ÃÏ ž7è˜À Î †ôN¤Y“Bò­yãpCQÀ5 2ÜÈ7Àkº;f¯i¿K¦ÁÔü«ÆH"ü÷Bξ S7klq~±êq©¡«Àï÷ë.+x¥iè‘*©·°Ð—ÿîì7ýWOÖU¹w½pãêlÈêÓ©9«èºäº³ò–­Šn%›étÉùݺýõ‰w>\úÁ‡‹ïê›yåÌ%ÿ¼¾cÔbf¸,¿SŸna5Ñ‹÷¬ú,ÛÝ++£îæ>´d¯Ú‘qñe]y–oݺÂúÊf‰Sly•E„•BQ”¤LŠ…qÁëv˜ç,yn§ÃBŠF ÇB4p@$êèZa¬^ %4]nGƘ¦*UþZY7¤”~Coår¦âqE©7¹—iœÉ!Iúo%k¥î5òLˆ ÒBûÏØ‚¤Ô*…ŒÓ§Éc>¦Šˆ;ˆ¹YÌ#ëþýÀÝU5óÒA§û·­ß¯ºÝn(:\¤x.tN{}×úmîK‡^˜©¨žÌL€ß[T”·âÙEEý¦Þuš ú¶5ÛÒÞù§Î*€«s÷ÌXŠ™¾ký®ôמí×iƒtÑj dàXJ)Ü0 ]÷ë~µ‰¿Ú_í÷ûu]×àÃÐu]÷ûý¡­ª«Í ÝÏÆyCJ/7¸¡ºßoîµ:¸oÈØ·F=®Éìf‘YÞB‘Æ)Šoóª=]‡ éíP;õ¿²[þ×9º¾cõæÌ«ÿ~V¤]|ÅYÞ;¢‹÷…Ëžy­ø²ñòbq5í¼þ}\ù ›±†¯¸²ÓŽÏV—ÄÛÆâÉ]t÷µ×üÕüßm v|6mð½ïRû\{ߘ‹2Òºõîê1·tu½òŠn¹yº«SVVšYµãÅWöñ8P ®®} ÕN‡œïß¼ùPÔû4û³-žëG_¼z]q½e³Â)¶>ªª²ho~†`ŒHJT/÷ªlyóÙ·rc}»põ3 Î{fâÇ, [ª5qñÆ@qîªgæ¬.n¶ê©}®¾ÒµqÖÆú¬´-_‘º¸2ûôí“ï/‹;õ3íÁN.Ðýº7ã‚Yoå‚væ%CÖÕ¥éºß_ýÞ¬WwêÖù²Q3§uRÁ¯ç~ýêã‹ÄØõžÕ__”¹*Ž%ƒ¥ŒõPã2Šap®*JRæ‰6E)6U2L‡$ME»Á…H ªWÆô"up­¨ ¯×dF†,¿›J¨]³EøHH)u¿aw8RñÀ¢Ô›ÜË4º¤KînIý-šX¤°•æ!”GåA1;6«sMWã½-J‹ËJýrÁÒ £–†/Ô÷/rsÍ’Íÿø¶/™:tIÍVy³nþÖüT¼bÚàæÇÝK»³Ö¾àÛÐfúö øá¯žóÕ³u TUUE)£ŒPtÄåBpnp#_LÇV+©¹v‚)Ú(¥”™¾ Ô¥B‚4½€ƒ*.‚CM2½H_Êà7ÍØ^΃ÿç"”°-àQ÷Û–Æ·ìÛÃõÌâ-‹¦Ž\±Íž»û£;Øòì-[Bÿ(Y÷øíë²ÇŽ3Ïöºé×®³LeõìÝ~7´€ŠÔœ½©Ã^õÈ-«`ÝÜ{×ͨ÷–ܾ â»%ëž·îÙ˜».ùïc÷¼t÷ààž¾œ~×»ÈÒGÆÊ¨Š"D”´l†àŠ’œ[EUE4]2Y?N»­Ì[!eœR{©;ü'J£zA6aBÀ¦©Õuìªt®cT/óTÙ9e$Ä{'3ö·ˆU^œ! ÉÎÓ²!‚g]«•¬{bÉy$ô’(•••AWÜ`,.è 8â†TÁÀ]¼ùlåeÞ á; Ù7ó/ÓæWˆàÇh’mèk5Yá‚ß06—Ÿ\#gÊ­°@VÎ…ÊIŽW¯"¢å‡”\(Œ%ËÄÏép—”%àà *Jçßÿ®ûygÖ'«{qI™Áù{ËWïÝ—‹—‚´Øq>!N›½Ü[obO)%°&{Ïb×4]7"~ÒÐ —Þ’ý^[ɼ>¢d= ^%"ÙiÙhì«gÎl‰éMØÖ§S‚ -±ÙØ5Ç ñÞGA¡÷(1¥^B€„Óòšhrj˜bPcÚ@ ¥Œ2Êc4$õÖ2d€ ÖÈ®ÆE˜Þ[[ê } iÀaÂnp%ª¼‚Ô‹ÊÍ]Ý0 ¦°¤t *cœóºo’r‘Ì´lN»ÝàB4¾ÝBRÚ ŒJ=»tñÙg´r»lš–Õí¤ÍÙ»)+/Ç«AZæ €€¦2£¾wÌÀ›ÍÞdÅ 6›æ×#“•úýº¥^ÄŒš>9LºWoB)É H«xõ’½z1¨A¤ŽóbÏt%Hb,²2î9 üÕÕAC–?- ÁÖ(«Ñb¨b/%”PN9å”QJ!½$x¢ µb{ÍPÝú#t#£Â‹ H#¦Üš"¸¨¦Ã¹HšW¯M“RD V”äd~‡]3¸‘@(¥¤„6$P)#ÝóKá¯_~»Åë­pØm»MQ^BÒb§„PE†Ñf¤é’wBl6[dZ6)uLˆ˜½¨mŠ Mõ¦‰h½8FiÁ}hÌQzcg^“R¡xÃ0B¡º5q³2Læ…ÀSn¸,„ePBITÂi /[äi ÿ;üÿqÔÛPp/ž$ABU”¨¡°œŠ¢$ÉÀñh ¬ Γ•–Í“ÖÆÒà"—,…Œ’†£mºÇL ••Õ»]QP²@ ¢0ÊëkU̶ƒ6™ D€Ø5U¯£8s) ƒ{ÒÒŠKJRëÀb»™Üë#ºÖ+eHÓD"J$!Öˆ !¯н‚ -²%$¶®E$6*c»L‚þBG ç"|„¦ïÆ”`!ü„H3ƒŸ$DQ uœxëû A£GeŒ ^· ѹPY’ (“œ×m˸Œ%GMvØm†¡K!ø®@¨”îiSVî5¸€*µÓ‰R/‚´ð€ÊaÔ×°HRBSzõÚl6íw«ªýv›–rÛͤ_!Ñ;°Äb}ÚeÐö¼t"‘\%@ IÏ8Nù,t¨Mˆj/‚ H $v— ‰u¬‡b)ºRJнÓQ^)jR¯&"½¾cêß”€º‚›)·ªDËÊR EQ’Ò1UáBÔ)qƒ+,9Q½v›B$”FHnz§ÇGÓ´´Ö­ŽÜÃ0ÜN§†R/‚´`0… y†$6YØ"!Än×t×ùM©ë~‡-õ<°ÝLòe}˜ðþᆿD—¨J„.U‰Ð¥Ð¹áoü3Ui¯^’Ð « ¢£A«ô¡±Z~j•Kgô)±ƒ:z’\‹º‚X ›¦ E"e”©ª’X ˉí3)¥”’V.—¯²Ò¦©\ˆºïÇp)X’¤^‡Ý¦†‰I½„‘ú Úî÷WëºnN+«ýN‡½z¤eÿ£\ðzwBJÖ„Ò¡i~C¯ûÃ~Ýp¦`f6”z“>ŒÒù‘„m(áU¢ºHOÞÊ*1±2±rÈD¿ˆ ‚XëU"¥UTTSE$øÎ ‚ §Ý.d ιÂXD—Ñ®íEgŸÑý¤N¿þvÊïºî9pP÷ëË×}}ä·¢Ð6çœÞç‰ûƺv!„ÝnóëºËáˆúÓÜŒ)Ié¢\‡nð ¤ ”Öû’NZ›V~ÝЀèS]åoÓÊ¥©(Y H‹…ÑEðz mB¯^›MóQ¢zý~ÝaǨÞã}žJb8Ã%jK ɯ­’ÒaG2… ÒBÇy)ð*=‘1ˉ!A˜Sn•é’–MUQ"fŸ}ÆÐë†QVîëØ>ãäŽ'öìzÒW›·‡K½YÝNÚõÃþ-Ù»+«ªãÿ4\a4)¦÷»sCÈļzcõgT:¡M ƒÔ–ªêªÛ·S/!iÁsÚ€¨^` =ïÌÓæ?ñ €<¹s§ÜƒyÕº1aÆì$ƒØm6-ª·Z×í(õïWi¬hŸDf)%R$uò+!µóÆ`Ø‚ Èñ7Ä÷ñAÔEeÌ_í¯Û™ ÎÕ:îÝOî¼kïþì=ût@t¸îªÿë~R§¢’²Ò²2sIŸ¬Å¥å!I4^J@©£&'†Ón‡Ø)Tã#¤hˆ‹Dº§ !‚õª¬ö;ì64p@–<Ì'Dc ¯OõÒu#gßR‚¦i7TVXYmôíÕÝåt&«n§Ã¯uÖÈj¿ßãµ +ƒRo2‰•9F†þjìG“<¿µ”— L¬ü¨õ"‚´À4¦ ›ø›1MÐËÇ\%±sBA¢£ª*羺³ƒ ¦ªèÉ;üôKAøëÌ¿éÕíäí»-ù]÷“¾ØðÁ`KÆ’Ò:œvÎEbvèRJë{3Ò=†á.‡Ca(õ"H‹…¢ªŠ0êp¥ëúΜšfÐívuêÑ!£mÁoÅÉ(8_ØËa«¨3£z)^[ɽN£ÆÌ&Þµ2šä \ëDFÉDßvÅl+‚ Ç2Š‚o ‚ ÑQ‹šÍŒ ®*,¢óèrbfYY9³Ä=\ðkïS~§iƒS~×½ªªÚ[YÙÛ\!„ª°$Eõ:„ÁLËÆ9¡´ÞŽò„Ò ƒ‡$ìÊê*‡Í¦ W/‚´\!Œ±†8ÔmUÊËËÛg´KV1lšfÔ‰ê•tCw9Pê=Î/ÓX“ÀD#’bHÇGUBëÜÓ‰…õâTA¤e+Ó‚ë7ýÖ =FA¬†¢0ÁyÝ×?¸jíÛ“:u¬Ö*¿> Ì+üõ”î'«J@ñìÙµKIi97¤Œ.(cIé Ü.‡.DbiÙ$#õ ÎmÛ´ÑuÝÚe !« îin— ¯"i±-$e¢ñ ‹²ÚotÌh›”2 v›¦G3pÐu# PêM*€D?¤‰ù& $©^½0µ‚ b½þ3ŽýŸ…Œ‡$‰QH"13‚ ÆXT'Jaµ¶Û©Cfqi9¯mÂ믪þ¥ðHÏ®]ÒÚ´€S{ö()kQ/p)U–œ¨Þ6n—ä\$49åH}v»Ý“ÖÚï÷a*vUU•ÓaW1°AZî€*ŠÑø†…Ká­¨èxbf’ÊvMÕëx髯¼ZxËm·ÝpÃ#îºóçŸ~húôů½öÓÁƒcÇïÓ§Oii)%„ þÚ¢EßïÜi½ë¢º%ŠJ(I¶ûŸ´Ì- ²ñ ×1¨AäxCʘñ¾ÍÐuÅ ‚ HT4U•BȺ^½B(ªÔåÄÌʪªº& …¿Ý~ý [ÿú烇~¾ä¼³>Y½¾aF½ ÎMŽW¯Ý¡ .šNJŒDf‡;«ï©ƒ¯Ø­s§r¯¯CÆ ¥å¾3Ûæìû1|›ŠÊj§Ã®ª*^EÒRQ¼ÑRˆr_ÅI'¶OV1lšê7"£z9ç·d—”•¤ØQMÊ^þté¥_rIvlíµuëÖ¿ýŽììuWíÛ÷C¿~ý^_¼Ø0 `Œþ¹¹¹æÚççÎ-//7?/yóµk×À9çœ;|øƳÚÑ$ãQe¢éZ’à;21»Y MG'`T2‚ HK„¤B eœžBA$ê”Ût¢¬Ó…Î].Wø;¡Ý»t.+÷Š:2}]}ºtìàpØ7|·ýçÂ_EC£z9cJ’¼zµr_¥L,ª— Õ™€®OV´Vî²roþáÂ’Ò²2¯oûî½…µÓ"UVU9ív3³!HKĦiª¢èOà»\H¯¯â´Sz&iOv‡aÔ5p!Ä÷?(8R”ZÇ69ß~óÍÌ3ªªª¢ÿ¥ãÇOxõå…Qœa;vì¸à ÍžsÞyÛ·m uSï {÷î‘ÝŒËùka¡%§Œ@<¡pZFDR'R>­&eCiÄ–Q H«´ýq:d‰Z/‚ UU¢8BØ´Z:ìÉÛ—•ûêf(òú|Ù9û>]ýå7[wnÙ™ã¯ö7𧹪’œwcNç\$‡$AUZ[ê=ý÷=ó.ü&;g÷þ7lÞ¾sϾ¬¬¬%)œ·r: ¤Be”ržH«"…ðUV¹v§= 9Ó›MÕu½ÅÛä4š^¯7px¢1xðÍ›·lÞ³g6 ¢”-_¾ü¶¡C×}ñ\1ðŠ… _ê{Úéu·¼áÆ›.0ÐãI«¬¬šù茺ôêÕ+é¨C‡ ߘiBie#¶º@I)I x,MJ§Ç™¬êH»t¦;[÷ò4ª^M3[OZ£¿ç”¶vŽ m²NYjUêaÕ°j-µ^L•JkŒ(ãâB©§‹?VU‹Ùs*Oìxâ‰'ÊŸ““ƒÃwAÄDSUÍÀs~‚'íÒ Îþ¹ðH·.æÿü»n'mþ~H^²ÎcJRÞŠt9ì:ç"¡°!!%¥µò²õú]7MU‹ËÊôhÑ`!ª««N‡¢`T/‚´@(¡Œ1ÎDÛ7^êõ¶Ïhë«6޲$„›¦ùŠ/¶&Mþ|ìÌ3ÏÊhßþÍ7߈³ÍžœœVîV'vìÈ CÕ´ŸŒºÙ;ÿyÛ4pøÃÙg?úØããÆŽ‰p¬o¢™UÃwÛ£Wתòj^ÁëÌI›­rr~hìOŸÜ¥3²º4iÏìŠæ/ÖånÞ‰¨M£ÝÏíQ\Üh»—ËYv¤¼0çH²NYÊUêaÕ°j-²^Y}ºùÊ«xU”–Æj£¹9yÍ\5žz^Ìž«M;÷Ï?ÿZVX†£vA$rÊ͘QÞþäB¦·i=ø/«u½CFÛ’ÒrÄï÷'ñ-L!„ÂXR^ß–»n}_UU"m”ËåZ»ñ»ƒùG{/pÎ)(¼àÚaþd4•¡©¤ÞV­Zzê©7n|òÉ'B ~ø‘·Þz󇢷®]»æ¹y/TWW/YòV½;ÏÊÊ’R[p¢Uê%‰i½„Êä*¢Ò3QI= hÕ‹ ÒIÆ¡–‹ ‚$HqIódo/7“Áш >_EÝ…»~Ø_ï)(Ä‹AZ0†ÁDm|>ŸÏçKJ1„-Iç…¦“z»õè1äÖ[7nÜØð“”½c»×ë‹s|¹åÏD)á\<ùøc‰=QlZ!$êtU’„f±”QžÔ¨^„XäPa»† ‚GX1»I)¥ºŒø^¥5BAA9ÎI¦Ô;ï¹¹¡ÏÛ·n;ztÄ3f<±äÈ‘#“&N0?ÏyöÙÐò1£FšîŸ:ÅüðüÜ9)p8‰Œ˜”X8mœ÷Yž«Zá81 ‰…+ã\A¤eBbwPìöS‡õBR @!ôAJù˪ÂâC¥–(?‚ ‚ ‚ HsƒçIèÅ/–W%%$©Q½‰»[F ÀÙ4‚ HËìBc´ïz9/ÏõP Œ]2…HB—®öcfüÎhüþßVAAA¤¹A©7™HÝK–$:¥4Ù‰^±D>4B<&Õ‹ rüaxkåà ýCòê«»'AAA,ÅC\¢N:õ¡4Ž}aë„%X )p2 Òò @èîä1-a܇”˜5AAAæ¥Þ¤Nã$ŽIhH’Õ+4 Nþe'qRŒ ‚e§v SRˆ÷ƒzAA±(õ&•ØiÔ$€¦iß¡LnT¯U´ÞDËò^ HÔn!±¶]Êcçà׉ Ö‹ ‚ ‚ ˆ@©7¹Ó@ˆ3ç”?ØD¡IµÆDTM4ÎgÒ‚ -q8’˜“¼„cæœ ë2a… ‚ ‚ HsƒiÙ’:$ñŒ ½±S_J¤$IœÇJkxõJ‰¥e#ÇpV ‚Ã~!‘ÎŽ$;wiüž+N %꼂 -§Óyó[zfõ$@JËJçÌ™ã-+ËêÕë¦o²;š¦ýòó¡yÏ?_UUúŠªª#FŽêrÒI6›íý¥ï}¾v-!äÊ?ÿùâK.17Xðïïß·Ï"e ­r·n=gÎÜÏ>ùäý÷—Zªlý/û¿+®¼ÒÐõ={÷¼úòËÖ)Û)§ü~è°aºa8Ž–.ýê«õÍR6ÈÈ̼oÊÔ=9»_Z°À\Ò®]»1÷Üãr¹à_óž?pà€EÊf{!êq³È½«lV¸¢–Í"÷ÂigœqÝu×kšª©Úÿû¡yŸ6Ž*°Ö­[GNœ‚R !Än·sȵAÄçIÛ¶m9ÒÀO8%M/3$2tfØ‹w—ºÑ¨_Ï8ý„ê#ÕIŒëeN º,Ë+oT½’ަ©m~ߺª°ºÑ_l¥T—¾ÂŠd²|5bÕ°jX5¬Z Õ«mïtiô4^§àÑ*~®ª*­:UÓ4µÍ)­«~ÞsÙ<šï§Êªòj@A†ªª•••ñ·q8†®7W cœ‹_{í+Wv8ñÄ3N?cëÖ-Rˆ ¾úìÓOV®X~Þ:Îp¹ê¦›Bf=ùÄŸ>ñÞI6l¨¬¬LKó¼ùÆë+W¬øå—_FŒ¹bùr‹”­ª²ÒœÑO¾oJ~ÞOe¥e»wï¶NÙ.¾ä—¸|挟}öé¶­[­sN«*+š>ý…潿ô½_ýÈ£~øÁò¨'í ”í¤“N¾ï¾)[¶lVUuËæÍæÂiÓþø£ÿ¾úÊË?ìÝ;~â½Ë—}Ö,Ç-jÙ,r/D-›Eî…¨e³È½µl¹Ú¶m»ì³O?ýä“ _}õàCÓV¯úŸßïoŠ{!UºQ4pH*„Ċ둉k2©^½Ì:Q±2Á/aà‚ HË#þk1q¾vLŸ8“xý: !‚´0ªªª6åŒÃ¿nݺ•••@ëÖ­;t蟗C†Ü2zÌ8ëì³ÿ·r%TTTlÚ´ñüóÏ€o¿ÙdüòóÏæN¬S6¸þÆwfï8xð ÕŽÛ5×\óÒ‚^ïÿ³wçñMTÛÀϽ“™¤Mº$…hËV„‚e|RTpcQ”E7‹Ê¾(—Çä© ( þ„ç7ô=Š *‹²¨ðd“Ú²h m¡I—lÍdæþþH©…fÍ›NÓr¾þ(™dfîÜ&·çäιöìÓ²²2s´ŒF£½¬T–å:9·ÜÜœ×^}%77·r'CXBbâ®]» ;;Û+Љ‰‰!rn¡ó^ð{n!ò^ð{n!ò^ð{n!ò^8rø°okYY™Ëå ¯¥÷B}T)…_mƈÿdoÓ›âÌ£˜WJã0 €#êæeYˆD¢Á~Å@°xB¡ÊA 4\–-p‘yü*!„pGÈý}îÿ÷W_ùþÛóŽ;~x`|BªUÿ9rälß¾MÐë qLŒÕZä{ZÑÅ¢FWÝO¿~ý·lÞRçÖ¥K—Í[Ì}gΠAƒCêºqŸÐ¦M›G¶aÝ;vìë¶è½…¯¾ö·>ýúEEE¾1sf]]7I’GÕ?@bbbl6[å´Ê¢‹5jœ““ ç:ï¿ç"ï…êç:ï¿×-DÞ •:wî\l³ÄÇ'Ôê{!Äá¬^uç$1_IA…Þ2Ñmó¸Î¹\Ü®bëœË]Tî*r—ž°«<7TbÑ`Cs ¤B¨A ÁÝìÁ€0; 4r1‚B5Ô¼0zôÑ#Göïßï{ä·_}qÊä‘#†·nôðÀpúôécYY zÅ?o^¾|ܸãλÚ%'õÕÊÐ9·˜˜˜¡Ã_¼èý¼nz½Þ`0”–”¼3ûíùóæñL“&MB§O{ôH=Ÿþçív{ÿ¨«ëV諦$ÔýFü<·Ðy/T:ï…êBç½àWH½Z´h92mÔüùïÖö{!ôaªWå÷°b¨ ‚%’[vç——ÛD÷OÅåîBä”T>EÆXD£ÿÃ\ú!„âÜÀBåcXÁ!„^´LéØqã]N×çŸ}vÅ&§Ó¹eóæS:V}°ðÂŘ˜F¾Ÿcb,EEuäï¾çÞ{ï¹çÍÌòz½¡sn=ï¸Ãb±Ìygîû‹?4ðá‡>œ6ê¹97§ÓYRRâ»ùº¬¬ìØñã‰Í[„ȹEFFöðÁ¹sæìÚµsÖÌ™IIm’“Û×ɹUg-*ŠŽŠª¬oÕ(&¦èÒ”ä:?·Ðy/T:ï…êBç½P]H½Z'%M~ñÅ9³ß.,(¨Õ÷Bý¼püVQ€Rƒ@1 L4,K@ê÷¼#†§B¨a"Á¥{CeyØÐ)…BH%ÇMyñÅ‚üüåËÿUù`||‚oè¡”Þö—¿œ8v Z¶lÙ¶];ØþÛo÷Þw„‡‡ßvÛ_vîØýx [÷îo¼1óеìëüܾýæ›çG¥M?nÂøqß}óíwß|»léÇ¡sÝöíÛwÇw€ÁÖö†Μ9"çæñˆ<¯3Àó|¸Ñèt:êäܪóz½ݺu€V­ZÂÂΪQyV•s ÷Bu¡ó^ð+DÞ Õ…Î{¡}ûcÇŽ{ë³ÎååÕê{¡¾ÀZ½*Ç©,˜W1¦Õ¼¤ª%ˆ1B¡ª£aÍÇ'ŽjÇxœÑ‹B Ï}÷÷¹½Gj›6mî¾çnß#ãÆŽíyç=zôp¹\åŽ=šž¾ zôHŒŠ<–•µ~ýºqãÇ/|‘äõ~ùå/^LИ3x IDATHL|aô˜sçÎ-Z¼Ø·“Eï¿ï«2YççÊ× >þøÿƌۧo_AþýõW¾™z!rnÿ÷ÑÿMýõrw¹Á`øñûïÏž=['çæw?Ë–-8yÊ£ =žyïÌ©«>­¾“Ðy/„ògˆßý„È{¡úNÜnWˆ¼^yí5Æä7fÍò=ýúõß~óMm¼êM`_ù_ÂÑ—)gŒB¢¢¢Ê«}ßB©LM’†Ü$''gff^ë“oSvÊ!‹~f‹îyfÍyg‰Ÿ5›ÝÚDßHp–kнEÊ¥œ_ÏÕ¨]ª3F…·o;ZZã65”u,T«Ëðo#6 ›†Mæգv%?ÑÆ~Ê!yj¶h¯)Á`=TVtʪAÓ\-Ã/ì¶ÙÎcf!„®QXx¸Õj ü‹Åâr:ñZ!„B×>Œâ¬^•‘@›—eƒšÏêíMŸíVJ H20:$€£ 3øxGDV©Ÿ}ÆBc:- r"s€•ïBÕçÑ3¨OwªÝM"„8c8±!„B!T÷0Õ«j¨œÍååЂ›Í°•Ñ­GâMúr/—8 QF7c¤Äaè’ËQÿ7š2±( òfWŒ¥B¨a *a«éJ£SÑ pÕP„B!„PÃT¯V¡ SNé•÷Ô+sqGÏÇUßtÛ ç%‘H”}!Tm!„j‚ûh'š~àHŒ®ŠB!„ªs/š0…˜“XË…&×x:G¨$ûï>‰JN¢ X4Ø;uB5PAÕçÑp.- ü ò O<ñ¤Ë倧L®|ðí9ïü²u‹ßvïÞ½_ÿf¾þw·Û½îÇØ¥Y¨+¿øÜ—îÖ­{Zڨɓ&†d´ªp•”#DF¼59Î.G3 ŒÈ2LjL¨L€xÇBºVïUæ/ÂL/B¡KhPëšý÷ÎUF5¡B!„jH­gõ…Î…—¢>‹½¿¸½ÝôËv]Ÿ‡ÙÝc˜xzEDž£>œí5GIÿû.¢Í–òòòüü|8uò¤ÃaoÑ¢EåÖ°°°^wß½nÝU_Ò¡C¯×{üøñê{ëÒµëGýÇ3}Ùáõë×ÿŠç„Ã/†æeÊ¢º•t¼Žp·3Üå +/:ô±ûîïc6G»\îYo̬þ„äädÕ/PÓ¦M¯ýÉ”ÊÑÑQ~WD#4Mˆoã/P —™á´f1"ÇÙ™—ð‚¿dÀSÎlŽö³)Œ’““kÔ® Ñv2±\ynó¢dæÿ  ƒ9,2Ù¬V—Õ/Ø4l6 ›ÖPÛEu,*: jX͈,¦Q#Kr# šFô@u²âÈ¥‡F±†F\¬ï™™™ø'8¶,lsüÌ…º6i†öqÆY èhÄÚ÷žôõ&Ûö%ß²=ÁDŠŽZ–O:å÷Ì)ènaÐ'÷ý>äø‚–‹ÖruÒ9–û GwñCÓO Í~wx£3‚§Çä ÷¤ºc€+صz9Ã^ýlYÇI¤º-¬†½+b¿XˇØÛH…T¯$IsçÎMõcìÔ©“¹y¹v{ÅÌg½^߯oß§L©úü¤6m¢£¢÷ïÝë' mÿÝwߎzî¹™¯¿ÎªÍù÷×_ù 8Ürë­oüã͉ãÇI’Tõ µY]ûn;to[R\Âd?¹ÞÈF¦üsJ J«ojÕ²¹T.‹¥5+çA£¨×KDŸï€Ä$›­¸ú&AÒ;yV›@´e³xpÐr›G­†ë Îb÷ù̵º¬ÞÁ¦aÓ°iشٮ·ÞP\\ƤšÍí5ÃÊ.Ú 2/jдˆF 7ÆÛÊüOaa¥…eŽa€†B!ô?rÞ;<|ÛKQjÑÍ©…º„í\c)JµÞÜíbßÞ¦e›¯x²|ÀâãkÌëNØïé]6hløÞ)!VÛAîð¸íè*óÖüâ{»•Œ˜ã8¾Æ¼ÕZro·ÒAÃ"÷¾c; 3AÞfËvpÝ5 lðX}ÆsÑKì–ßi¸µ«<ØMrî]] y^H*1­¨¥Gp½Ql"–åsæ®JÆž»ÙÃåž0X= m¬i“Á•¯?~’‹¸ÿBÚãvïþ˜¯Ó½Ý‡•<1Ïíp¥€kbNt±ÝÕåâàáóW‘‚‚³ƒŽF­Û®/<ÊÕULjVC®µ,® ðË茽U”ÛO;7´·T´?b›]ìšZ”6¾99¬ÚÙÊ^A.ݽ3ßÛi@I÷±ïjº+´&™«ShâXVÖ3^½^Ï=÷æäœõ=~ß}÷ïÙ³§¸ø²œãÐG‡¦¯úßýlúiãÖ­[_yíoC‡ ûêË/•·g÷îÉS^4›Í/^ ©«I0¥»;•N`ATÐ¥:&KþwÈdBvÈ4.@ˆÚÅ ±"B¡?ÇVY³a-`õÎ@c{Ä4îŒBŽ,?†ƒB!¤‚õþ½Lˆ°9oë,ÚÜè‹eú°×Í“‘‰’ŸgŸ0±0ÊÊëZ¦º:Y¼€[®íhôD•µ—;u+Šóm"´ïv!¡‰¨ƒWÔ¯áa]œ÷6ñÄðPX`Z½ÂØfléˆéöí7ß\Qxá N§söÛoOýõiS_ªúø°'žìÿàJ‰$Éo¿ùÀ; =L)ˆ n¢-¡ <˜P…T/L֮ф0µÇpá„jÓ×ü{OÜ—¥µpz²(ƒ2ö"B!„ ª$×DÏURbÀ¢¡ àz{Œ-ìÞÿcA³uGå»f奚*6Ä·¶7§„w±õíl\}€ª~b.;ðÆ4ñ^™¼aÀ{ãš°kk-µ€~Û¬Æ;+æ·Ò²®ìÍå[–Í®+µXD VQ²X$Áj0]öÜøaƒSÅÜ5M­â†çH Áö¨“ê]÷ãë~üñŠÚ¸ñ§¯xpþ¼¹J;YôÞÂÊŸÏœ96òøòË/ªo eLùq¥”.¡¤¦3™(Ž(æºSL+3ÐtpLVw.!A®ÒŽB(”GÏ >ÛY [fB!„ }°°ÄòöIöNMìT2t@96æýd蜋=Æ–î§ölåÂí¦‚Ç‹Z?Ÿ–d-ž°±­Ôåå“›Û” šy&WWË5î‰ËØ`tv±w\fÝ.€Ùo2¬= (>Ý®sÄt³>ñW¾t·eí–º*×˹ìÀ}×ä ñVýö¦íÛø›û”>1‡eØÅ®]˜x"òàI€¤ËÎö À[Ä6½œ7wñ†ä¬^Šï*uCU¢«_qÕ\ÊY–ýw“ UJ+k{=dÕK3À !„BHc¡¶ÕçŽ@!„BHMº½+¢N[½¥61®^¥o±Ö–‚î¥QgD®ÞÌóm¬C‡ÔBYŠŒ¨å "O{ÄN}J;µÂ³€ß¾4æx>$¤–µÂW¯ »Æ=•mhüáÒk“²£.ôàŒètOšÖ­×;M®î½¡.góe¬´͇¸ne]ÛH: '4û|}´)Kíæ)Û½|VTaµ³=“nÙy–ZR‹ú¦²K£BrUf_ù_ÊÑ—cŒB¢¢¢ÊÝnñ«ü¹a¿ë’““¯}Qï#ÚÚ•øÝÑÚxá¿E¶ÂT¯jþ— ÒJéP²ÄU€ ‰€ì÷UQ^!NÛL/0B•ÎS³\B¡JÙ¶°¶êíñH„ÉLG@!ÇN K Ø!„ª±n[þñјçE¨–{Ž×.kVÚ+YÐqÜ[ÓžËz~ÁáÐ{ÃÅ>4nTìϯ<ù]žñ¶©³'?ž9~EvÀ­Yøñ¥í­‡/š bÕ~?Ý3õG„S…×›ø‚MóŸŸ‘í€è;¦ÎŸ2ü÷g>ÈŒâï˦ÌÎ*ÇÍ›öÌ¡?æì æ`5¯e€<$aLiE1F»#Ìë%@äjñ¦ïVW…T/QÜ#¦e®—Â@åeÙð !„PŪX©6ÆšÅ<›•nsðYç"Ž‹°Ùù¬¼ð¼"¡YÆð!ÔÛ~cEúšôô/—Lë•ÆÓW.Û™H¶då½ÌÀßÿÆÊYc&ÏY¼téò•+æºÕ `I}n܃x€¸Á –¤õüÆŠµëWLîÌWß';›³<}íª•+æë"xðÂ#t5|Ç;’O­ÿO–Àqè‹Mîî‚giîz[¡ÿü˜'ïXµºÞÙúš·ßõ¡žöŸ×ecÕ>GΦSÞùÕæo›˜µé»ß²Åì-0šãx€Üß¾û9«XGæžS`6‡FÕLõª†\5‡ª°RÅ)¸:˜¬óWÞˆT1í)É„Åù¯LÛZ½„©¼GÌö"„PƒÄpA´¬KˆËK=šøãö+~ë¼ö@»ï´[ñ[ç´ÿõh „P!„PÃÅß:öïC<ËÇ üØômÍÇŽ{0Û|"uÜðö|âàqZ—/ÙbÁÒ­ÍÙÅ“G‘6ÿlê”Q·ò—íGh>àñ»ßx¬Ïð ú>ïüÜ´ž•c 6f©½CÞ/‚ÐÕ˜£í…¹5l¹…|\œ9ôÎ26Á\x*·bf@î)[lB­[Íw<Ü){ÝÏ…Ø_pdíõ”ôéËÇÞöÌ€¸?~=XeªoNyâáv9¿ì-‰v`ÍBX¦˜£¤Š·ŸòDÙ@,2Òçl†¥¼dð•°e¾tsT„Q @ U¤‰¦+›\– !„Pm ­ Ý÷€0ÙÏáDYq5T„B¡„§Ã_Ùëÿ ¾Kï.öÍÓ·ÀÉõëÏ>žÚ_[`Û²äãÞK¦,ìf²¯˜´¡À÷TÏÑí›sDpX»Í>+µ¿;¿Êž„k¯=éPÚg~jØ5s f¬ZstHoì3„®ÂhD{å xGä|è¥`<…ž¥‚ ˆ×²5ᡱ,ýÝý ƒH÷¿þkÒ_,&Èùuñ¬YÝŽiMïgÛžs~ ‘Œ<¦zUzTi3QSu$Æùy # É îó¤â ÏÈŸYU^jJþÖ%'ÚæJ‰ÚÇ 0G!T1̈Á´­JŒù»gÆ+Žbª!„Bš¾Ûë}ž¸ù*³dKÝþÖ¼s®j›,–橳Vú¯‚ N˜L6°m[µë¹…©ûÿº¹ ò©»½â'«Õ.4·TMõZóóíÊûäM&ÁzÖZ‘ß±ÛíXÀ¡«r8<¼¹ò­-¼(†`Y-Ã#ðž%çš¶ò)Ü ?O?,b…qç;O0&Ü6lÚ¬×`ÊŒM6€CË^xtð±ž4mÿ÷)é¹u¢˜êU1¤Lyq`=4åðPG‰×KÍ6^¦ŒÊ„2d"ƒBbÊKÝá&‚+ÃOÆdB(*U/æ«q®”eLRó"k¸B!íÆÐ î9!„h¸,% û«|å•9ŽÃ.D¡fˆ‹»z5„Èc@õT¯Ýj=ñåä±+ .8qÈsÝò7Ÿè0bxÒþe'EÁd±4ibñX­ŠÇò·Ïöv©‰…‡Öo@èêl9…¦Ž FÈr€96l¿ØCï,ss Íx( ¡µ¹¸ W¼–­Æ;‡Üœ³î_¹Ø_!Å‘»cÍÏλ¹5¿éKý(úv]î#w·æÓsë>y¥åÔ£¼ðšos€ ûTyÂdÕ—• ö}Yo/æíÅú²RÎi;cäyÙëÿH²ïP~:7ð)ÖÎUÁß „Bµ6Æh8¬)-‡*1ÂSFÓ½!ºäkz–ÿø\Ü¿y¿¥Ï¨^‰<€11)Ž€ÄÁ“ØWΞ5g¹µ÷”!I· ·é5¤³âz Köo;ªñûÝç‰mû…nRã€OЧvBW×úõ`bŸGZóÆŽô;ô로%êØñ{N»‡ï‰ç¢or‡ðǯ§Œ]GLÞÕ¨° ¾o¿„ƒ?n*ÆþªC•Ýdn×1¡bÑ5cǾwÄæÊ£[§´ª¨5llÕ¯oë‚ìœhÎêU3 0«(.”¦¦ò”Hõò’Dd/'UÙ-â9FýgêÃD&¢t–ZÞëJˆº‹£\– !„æl½­ÆB€ ^Ž“8®JÅ^‰2â8 ”q‘°+B(4•ý¼pGQ;CÀš’õpŽßi¸âî%o¬™>¾ò?¾L¥oÞ'cŒUîvW‹vHeN“4ô¼[rrrffæµ<ÓmJìߤ8³ÌïVc3ƒ-Ó^t¼¨ú¦OÝPœUÆ$?Aî3œùÇã g—¯÷"1اÿí ó“¬7·OþKÔâ‘^zeßéŒ:½™?ñÝéko×ÿ¢í#­]y.o¹¬Öõo©7÷÷óªtYþmĦaÓ°iØ´úÕ®Ÿik=XRÓWë=ÅbÞŽó4-:>jÎ é§oÚÚŠD&T& Æ8&pÒÓ£LÛÐH¼4ìžÿ£/„ ,,<Ü ¾X,—ÓYošÄß?{uï-ƒ¦m±{BÕÙ0гzÕ0éÍ”Ê2`Da>0OA’üõ¡a’Giš0e2 þ63K8µWc8©!„oLÐtY6B(xˆ»\ǪM”°€B!„B¨ŽaªWÅ0ÐݧBQJ˜Â­«I¦WLéÏ$™úß+‘PFýÅœZ§I™Ú©^Ìó"„P½¥hD‹hQçux G8çux©žR]°+h¹,c„(ö¤u2 IDATÕꥬՋB!„ªs˜êU/ X—QÚL@iR/$Ñßä\ŒÉJ©^`2!2ñ{.”F€2ñ—!„@L§ÆÑ)Q 3 „1Fa˜Ìˆ ~«]}Ѱ€;!@©ÿe}dÂ$ xBʱBèz&nxùÁ xBÕ-LõªˆÞÈJS\ŽFGü¦z:9Æ”fõJ2Fõ{Š&zR¢îá.ˆBõ!®·»PµŒ¨¶(‰ÉþGxIQìa„B!„PÝÂT¯z¬/©*ÉU·ê(+—¸3ºÂ#DfäÒÓI¸×*+åŽ#8¥Í m­^µ‹õb¢!„êë@IjáûFífõB˜¬0†J2è ¦zB!„BuLÍT¯)2rÁ‚…ë~øaõêtŽãÒF=×:©µ,³Òââ… ¸\.³Ù<~â$A Ãþ}{?ÿ쳪/?qÒჶlÙwÜygŸ¾}ߘ1£_ÿœNçúu?ŽŸ8©cÇŽ%%%”I–V,_~äðáлž,à…eÙ# 5mu¼ýÕÂQ"2 UâZiÈ©“2QœÕKˆÿY½Z£*‡àYÓyÉ!„ÔÔtµûþ¡Êß_J^°œñçß_å+àpË­·¾ñ7'Ž'IRÕ'dffÖÆ5ºÆÝF6Šhvcl‰Íîw«ÉVr±¬0³èŠÇ FCR·æV[±ßWqÜ)¯¬å!x½@5ò¹RÕ9D?›eà +w‰ÅÕv˨>Ìp<3»ö.WUío½¡´¸L–T›Ãe ¼è’s3Ï©Òeõ6 ›†MæÕßv%4nÆ{9·Í£ÖõDÊ¥œÌs4-®y<%àñH¥²\m£W” “e›ÂhŽB!„BÚPaºejÏž‹eöœwÞ{Ñ€‡ððCϦ4xðæM?ÿ´qãwß~û¯.{fä³0êùçßoáï¿ÿ¾ôã³23ûõëÅ®6ý´ñ‹Ï>óxġÆ8âžÝ»Íf³Ùl®OWšù/à@ p7+§ƒÂWœ—¡DRx/p„ø[–ÕB©Äja­u‚ËÞ „P=Åé”V! zH`šiœ „€¨´,›ÅÚô!„BHëg?\6±!„®3*ÌêýîÛo¿ûö[ßϾ«W§?õôpKLŒïÁ¨h³Ýá€r·ÛsþüyˆŠŽÎÎ>U}oŒ±…óß}wþ‚ŒŒŒûöù=b»víc6›-´®%+3…%¡ìNÙÞ»¯Ý+ƒŽ‚Ì€1à|?è(¸e?ùRÊXw±Èâüî”3P @üVëeZ_‚ë²!„ªòˆú¥zµúþGd…^ôS½!Ô`%¿ðÏ©0÷Ùþ¼„ÿË«ŸÏèa²{<x Nþ÷³¹ïýR Cß3ñÓ´y{* ýð·¼øùÓ9&üëú T{¢»?óRZïVFOqÖ÷ïÍûæ˜CÛÃóSÇLÝn×߯|ží;Ÿ®G?ý@J¬báÎó?Üœ'Ü4ñŸ3î6z<ž½‹F¼µýÏz`||êð‘ƒ{¶åA,>¶ùƒw?=ì„Ø.ƒÒ†öII0‚Ç‘½íŸïýkga÷ã覷ýíÅÉŸæU}ØO«5hWµ>>u̸§»Æ ެïß{ï›c€ènÏN}²g‚À‘»é“yŸî/†ð¶¾6à¦x#ˆÅ‡ÓÎ_{¬jÕ6?[Û¦½ÿfŸØKO!kEÚ+«ë¾§tµ´ßôUÿ;nü[³gË2ó¸ÝK–,€%‹=;ê9`Œ„ÓÙÙÖ¯÷ûZ§Ó9ûí·§¿þú´©/U}|ØOöp¥D’ä·ßüÇÕê>‚ œÕdLö;«ˆ؞㦃9±nQoàËÀ-ò^×93+—†žØ ”‚,û¢H™à8êUp#@(„£Z®lƘªS{NêE¡z‹P’¬ê0C4ËõR ”‚Ò_™pö0B]_2–œôMðqwNœ7aô]{flÅk‚æŒ=Fi{ìÍçÿv RFÏz)íØØ÷ŽˆÚýƧg<ŸRW¥ˆWxB¼qçãß>æä[ |sÆó½÷þ}C1oŒ7½úØû‡ýïE(Øüþ˜YÙˆî9å‰OíõÇx£¸ã_{¬X O=û¥§ì·K Ñ>àSÒžlU\=Áé¯ÕµÝ.?=Æž#Ób·¿–ö}žÝý¥Ù£ïšüiáMiϧdÍõÚiÑxãè¹ã‡í}áìØVæcŸN]t¸bû¼üΘ¡{'}þgêš÷³õز ,»ô„VO.˜ûB"#¯rªwõêtßN§sî;s®Øzúôé鯽ªôÚEï-¬üùÌ™Ói#Ÿ€/¿ü¢úÖP aÅ› ˆÿ­tÀÊ\ú³V‹ïw°êÆ—ÁE-Ås¢Ž£UÂc™£F3ïUŒGI£h6㉃² 0( þ}N<®Ù%! òœ^ [G!¤.æ“TÜ!cœN£QGè$f¤ «2´y èx$à8»!„®GbÁÿ›ñÂSIfØz ÏŽ{xÞ[íOf˜Û'™Ì&Èøê³íÞŸd2šàägo½µ1Ì·Œœ:úÞö&ÁcÏØøá»ÿÜ÷½õÁ}ÛǼôƒ ñÑ÷çµ_=ræVÓ_y{¢Ö“«ß{ûëƒH¼ëÅ©ÏÞ'Ø­¿ç8°{PCǧ¤¶;µñýcN8¼rKáÜ^)pdŸf‡wZ9geA·w¦V¦rœ‡×~^ñá½ë°­WB,@q´Ùä(Vº1]<¶yí1ßÅ{÷ŽîËñ¼ík+²ŒÎ¬½§a@´ 8D»`ä³ Û?ÝÑãiã[üµº¶Ûå§G€7òžÂìBŠs³‚™£9²OÙøŽâé Ÿžö½¤ð·¹ÃRxÈ«ÌCÞ üMR›¦g‡DŸèð“AÍV9­I8ˆéeN‰$€cÌ—úe x°;$ÿE“)€Ž¹=<'"ÑËæ EFèœ ³ÇM/ïÑ‚î%̈^'º½:w¦œÒôSBÔ-׫eYF„Bª Œ©™%Ö%ÒQÊôÏþƒB#¾ûl€ÂXDùáÔ“HÀ8 ýB× cÒ]÷µwd~_w-ÏštŠûlÌ„y6¾Ó‹Ÿ¼;A˜;i¼>ù…^zË–w÷˜î8õ–œ7ǼzÐf¾eü['œœ0sûÖ“ÏÞw»ù‡lq·ßwàë편3_H:0sä„Láöߟ82ã…E-ýGNÊxýé ™ž¸»^}ÿ5þ¿Ø=¨¡3'D; ó*¾Õ(Î-ºÅFk™ÍÛ· ÞèctÛVƼMy ˜ùØÞ3>Jx(<²véGk9ý<ŸoÜýéb÷®>\eš+}ã°msû,DWÿåoLK‹ßüÖ'…={Uÿ´ ÐêZk—Ÿ)Þüýá¾Ï¿:øó5¶›÷Ì[9ã4ì\³mðÄ—Ÿ†Õ§Z=ØÇóõ¼½—Í-æSRbse+Ì7ö³5:u@JöúeB£W0Õ«^À)Š7Ý…f–©@™L’9ƒÎë€3è8IöJþ“¶¼[¢Äã·òƒž²2…cIeÖ0‰7x½—õ/a:·‡£aO;R½.#þ®!„Pý(Õ/ßÎ4+à@•eHòErÙ`ÄKòÊm·¥4òòfÇÉ%@v7B…^F‚?A=5Ù_RÚGéOƒ`‚œïß›ñÁÁk¾Ù“¹u» Ä“™vó·€x2#Çt¯Àxës~yж=Ÿ|Ÿóé}··nÿ)ãÙþ·›øÁw{ó¯öˆæþ=3W¿’épìþiÏè =šÃɤ¿´Ïùan¦ ¶³;ÿEìtÔà‚Çá©ò&æBˆœZtjÚ@ãúùÛ÷éÔçWŠNøøžã_}m¼mÌœmUgÝóÝ^Z6¾»Ù¹Û>|sWEö3å™%¯ÞkÛŸÏûíBH^~>%mdü¦ùŠñ~¶*´Zûv9¯ÝTüú€‘£y¾pýüÃÅbÖÆµÙÓŸ~ú…ûŽmïí»¬Æ°ñÆ´a-÷-[促¿­ñˆÝûÉÎP¹“S½jF6JnÉy¾j‰¿òÊø¶ÀÙ9‹Uï«ò ‰Q 2PÆñ’WàÊýtYÇ)ÅË2K}/?Ae™rDÓT¯Êõ°V/BÕï’ÕÂ>µÀN)O-q$¯(ÌP]jv_z S½!ZšõõßoŠ ü$ëö¿Ž^¸þšÿ>¹ì…IßXoyé“ñ`-®-Ûk·Û}?x<詚^Àd4y¬ÖŠ'€Çf÷˜Ì&pìÙš1òÛÍ?ìùK/sæW»EhÞÄlê4ú“Ï‚ɱÕÈ_öZÑn³‹&ìyÔÐ9Á\™Üåy¡†_ÙÔ–ð”´éįg¦Ÿ®x@tú>%ò~ûlÓ€Ù]ÛÁ¶½Už.îš7ü)€ðøîC_šñ2Lµ¹àð¿Æ>þ/à§ ÿÒ ~æÔoòBìâó)#ŸMØ2ïCåóòÛjÍÛÛçÅ—R¶½–¶1OhyÿÄ—_O›ÿ×e¹]'Në“;ì[Ç<ñ=&¾6}‚øòû{|ËA¯>¿iÎÌÃþ>ÒýnåoÜ6Í82Å”)~2¨…[—VÇÉ`—tö£„³óee:{1o/åìÅùœ7R,õóƸ0Åõ_$˜ÉÎ,V½¥HsQo±êÍ6!ªX`^Êi›+%ªçzBÕO”S÷c\Ã/9 ŒLýO&„“Ë9 !„PèŠIŒ¼ê“,ÍÚÕ87*îùluÁíiýì6»ÉbùsJ¡`1 v›½&û³Úl‚Åré4³É·Çî­™q=nOºývóŸv‹ö|‡}Ï{#‡?õÔð§ž6t`Ú‡E»Ã.Tž7™0Ñ‹®¶Ü ÆøK·ëGÇÆBqnÝϬ oûôôÑñÞš»]a.¥|´3oç÷›‹[vmÍWyî…Ãk6äŧ´âCîâ§ÜÝ-¡Ý“ W}õŸU_-Öªõ€w¿xý¾håËËZ­]»ÂSº·Ì^»%OpœÞ°btí–À§ôìxaýÊc1oû²5Å)=Ûðñ¾:¥ëÞÅ3׿ùÉÛ*l5öÔ5wÃæÊÄcªW5A/6£ã˜WQðTþ“8IäEQð88Ê?¿_º€ßË Š78JtN›ÎeãÜ6ÓF]E:g±,W,ϦÑ5!ê #i„ª¿êïg8%º…šxV΋²Ñæ22ä1ß¿I+³O­yñ‰™‹+Ûå¯ÕuÑ.±°XlÕ½­ïÓ2þ¶¶æ‚¼B±°Ðßµ«ïTwí[|* ¾÷Ôi=³¿~ìÏ“ªlŽß­ñ÷÷?¼~K(SÆê 6¯©ãdYa*í)å È—gåyÆ„0!´ÊÃ>…T’9Nä¼— ,ÉŒ¢Q -SÿPX¬!„êï8©ö€DÃeÙa d…¯ÈMÞ'klÎwÈc¿”D¡“õõ’¿ÜÐ(` Ïòü£kr”66¸è§à±n˜ùä{UÓ¿ú*çý§†&ý÷““ß}Ó¿`… w~øÞ@úßO3{yxŠýÞú ÐuÜÓ·%˜aö—C|/ôì˜ûÔÛ§.5§Ý@?[ù”úwÎÛRŸ·$>þÏâɾÕR!¾Ÿ !QQQånwõP­r]BxÞ-99933óš~›DÅÝѨô¤½¦‡x©«{ï¯1g ¢ªo:¤‹xqM‡DΗà¤˜ÌÆ'Dýn¹§Œ&ó­ÜFFhãòÂö]hg×QÝe¿l#7ßu±¬YÙÒm×Þ®à?á BÛa­¬ÕüjCˆæ)@ö¦\Uº¬ÿ6bÓ°iØ4lZ¶+éÁžÑëT¢x“Ór4hÚÍmnš4ðXúÂ"¿[ÏÍ‹…ñ¬Ä÷ßmÅû0ðB¡ÀÂÂíVkàçX,—Ó©Nl¢ÃIN!„ê˜èõj0Œâ€§ÔÔ"Žét;I-ûôM|óU0 Œ 9‚.Z/•5‹®~áÆß ¼bIåá+hÉ ”È@¯(a(a@8­&q”‚¬úò;Àp²BÕO„•ïÌ`L³RT„,ƒd ìRåxàBìb‰MÏa!„B!„PÝÂT¯ŠQ`0 ‹SFu” çŽ1WÕàÕ ßd+ŒÀåÿ•¼‡p~Ü\¡ !dŸ±¸TË “IWɪÓjvmT&X¿!„ê÷8©æÈÀ|ÙcMp@ƒä¶&‘1d )—AG d” ¸þB!„B¨ŽaªW½6¸Õf˜Ž£Ì ´Ú«½n.ŒóûºB}3"û_]ÀCø¾¥û?‰3Ó_VˆŸ1ŽÉ„Óê‚È@NÁE!T9 ©=,Æ4[éMG€Éà0 åÕJWé¢Ç‘pS‰Çpip@!„BÕLõªqB žq¯ãX¹Â:/œ$“ÿ>òpTVs“#d®ZôKd‰ò’FQ1¥ ×F¢pÚBÕÏq’0ʘ¤æµ;yʉìo‰/@”Žu(?þ‡%Î7Tµ(ÀÞF!„BÕLõªp‘CÕI¼Ž"²ŽŠåïdJ<ÇK2'ËÍtÍx¿/´â™Â¬^*{#@ä$9Zú3 )•dI’‰N«È˜@-¬Ù§]UF„Bj ”Ê*×êÕ.ÛK a d…Cr&]˜Û X¬!„B!T§0Õ«n[óy½OrNf ÀËq%c:¯!{„ˆ(?Ç!º" Jós™Äí~î0  @&”z‘k¶,[°%-®²O £B¨¾’ê×êe„h”ëå¥T5Ñët. B(t©¸è9B!Ê0Õ«fÄ Ápà8Ìžb»žÀƒX1—‡ŽyüF•”÷(Kf’©mlÒÑ;?_Í€÷Ê’7–Óîv×Z8#¸,BÕßqRÝp¢á ÀÈLqœçLº¶Ùgc¢Ž“)9B!„ª ˜êU;Š­i˜*éu:dÿhÃør}£‹úDƼ@xBy`²„œå›Ñrÿµ)ÈåœV‹©eJdF4›ÕKaj/ËÆ3½!T_QNåeÙ€f¹^J€)W Œ| ùblA㈗ү8v7B!„BH{˜êUMp·ê€g D…׆qpÖÐú›ˆ^ ûóX²‹ó\PŠ—“8“±zê˜dJdÍr½@äZØ'Þ ‹BõU;-K@³ò¸ŒÁ…È.À¼@yJy%0/¡ºHw¶Y\è¹Ô@;!„B!T0Õ«nÀYc¥^ ÚEJÆ€x$B8ÂbÌü^}‚N´{Õm “ Gš™¸&Àôàa¤œ€Àà¬Lt ]ªWýR½ NëE¡z:NÂTýº‘iøå¥”1Xu‘ËejøóqÙÍÿÛhÒŸ~‰B!„ªK˜êU/‚P.âOu¶ß’@€e „€Ävq%GUÖä pÑ3™bã„|] H5>™]Ýoo—^å•.F ÀNË„jzAÔß)†Ñ!ToGJ¦òL»º>„ÊŒõ–,rà¸b¼»(4Ž7ÐÆvQðàw’!„TÁß?{uê†AÓ·\ûÍ"|¯7V÷ÙýØ´µ¼|!tÂT¯zñ& ”†¤„ür Ñ©‹‘àù0^t‹ Ö|àÚj'Øí•wg^õB—Á#Îî²ûÉ‹Eè0üƒ•Ã|MÂ~7™ëY«X¹o,à€®+‡‡7 •ïEÛ…íºÎ›ƒ©^õNnKtÌãfqÔwk'KÑn¬9[ÞDdÿ¿ ƒ·9üL1\žD¾ú_Ñô¢A'9ÅËWfc 8¢Ý1èeg¸K¼2P '1`å’Ž£Î Å|µš¨*­Ä$ ¦zB¨Öñ©þU#ÑîœR`@ÂÝg½þ¹ŒÎ=´¹Kâ°£B(4E19üêŒÜ´Æ;w/_•ÿÁsVMÏ»Õnêb*¢;ÁbììWß‹§j~Öd2AåkN¬³Xøû;“ïš’žv»Ý¾iÚ´ UÖxoßÅcjbá!GÁd°·ÑõÄ–Shê˜`„,˜ccÁö‹Û…íºÎ›ƒI.õâM Šøñ<ˆ^¹GS]¦ºM¹Mu©Mu=šênliÈÕņó’%L¬üÎKƒh ÛDœ$w'ØÔ(LLŒp·ˆt·ˆt7tÇ„‰±á"#Ô7/I‹ß-Âý{wßDþü™IfÒ$¥MÒ LK)å(RDPAh¹<*Џº€"°€«(ØÕ²*èz ˆ. »x?- ànéŠå(h+KÊÑ -ÐhZ’´MÚd&ÉüþH[ M+­Úôó~ñGŽÉwòÌL¿“yø~ŸQpν~ºÏÿÓVÿ Ü¢ý",Ðf#­“oúF–šQæQ®`¢³Ÿs+Ç_ÀMÇÉØ^ªò…ƒ­ Y_·,d}sõ8Ë›ƒ, [ŸëcmÎÉŽ$Æ{Ãz%bÈÑÀ€]tY£tb/´vÍŽUüíÆtÝøÉqj"kæ'º<õâ°5©£J|ªË/)™¿}Š—Œíoï¢%"Òö»ïÎ:uî,Fã™Mï}É?õÊøhެ™»Ntóç{´qÚèè0ŽN§ÿÂ÷{,>Œˆ¸èdžߎ½mëöؾ£ßìÌ©{=ùpر}ÇDÄ…¸Úx8Õ{ã4Z‚—“ŸÝZÚEGD¹˜Ú$;ç"¨÷Œ°uDı’S’DãtË’‚¥vr¡ÀÔœ‹XÉö\û/å2RȈˆìNIt2Kß‹òZ­^5£V)Läî~ÜlcÝ¥rrÊeCr‡T9"¼£hÖŶç—CÚß"“3 ãºý®.Ää’¶z’me‘猹ä’Ôêð†‰”ÙlvÖå¤ò2že]*¥£¢’ç9§L&u 5~N³­i£b«+Ø{éëÛð ÔîîÒœ<Íwµ9‡“1`w´0çeªÕŒ3°ñ“#OoðÊ ã«Òž ""Á˜òÚ¸¥u¯õ|ùåùU“ÇGXwf×¢7u/ÏX¶é^0žÏüú­÷Ò®ç=ßþ+¥ßŒl|Êh±\:ñËùŽ×¼¼èËøŸÈœ½)mé{ѯ$~²UÇYΧ|8ûÅGÖ.úáõ¿®Úñ"Y.e¦g^êˆÝ m‰5cíG1}mý5Yóv´(CD\ˆ«­‡ÃèõúÚ'’$‘ûþØD’$1 h·Ùê]í0RÍÈJ惡EbbbN:u=Kê"5º>Zk‡Š+-N°~¶1Bºë.IrI ±îRl`xû¼Ò~Ñ+•ýŽfvþð¼?}h½þ¸š-ª}ï÷¦œ.ùÞN¬\Á¸ˆÈ%1úHâI²ßÎ¥eEg2—šÔ& —+ؼ”‚úoEiƒîÑ fQ ¬²Ø$—$ã§£:ÿn¿ì¹f•\Á*õÊܯò|ìhôá?4„†ÐZ+K š?A~"+rûép›œ8‰dNrˤ•¤ÄQ?î, S%Mû/@™’U+~Ý~Ö ¡=ǽ±ù¥®ÏÖÁJRó$8%ÑÉÌ\n%h”R¥2¿q…¥ÓUUVb[\ÿi£zo†¹ê–Üuñ2IIÒžWù Ö)‘’«¾V䱯âÇroý€Q(DÖ[…ƒ9•ä¢õg“ä"FF +¹\$9‰$†‘³¯Qû¹ÈÞÄ,QCU2äí8W•Ë~YP¹T6Óõ¶ër‘ £z¼rš `\F³bÒù/I!c$’ì÷i³Té_Z£Jý$ÑÉr2 N‰—1N'[å$[CׯÜåô¦cY‰iôf¢¥UTZED8§À-ƒTï ¼ˆmð%C‚ƒi߃†Ý¶Íî$I"¹LR°I’Ë)8¼öÛ©­^+àà'¯²Sdà1–‘”2‰!É)16+IÄ3.g«ôs45ÕÛ.@æš\'Qr¸ÔêðÂI’e4jI°º‡û•rA‰ŽŠêó±%%¶áCˇ1 ‘DKä’Ü`hånû•Ê=7ëµR½ ±Œ„ý-R½7L#×Q)ŠUÝBN”WTˆnÉL$U€Ík·+÷S:‘©Óå ±5›G”§‹üd£”)Ì"cf%ÆÕÄÍìù²žä–&'Í%‰F`Üü“O2ioãìwˆ!ÌEQâFÎ0ÉÈQ¶W¹fµ¶ÐDDÄPˆdáYᢤsIôHÜ…{"leÇý õ*J‘äµ\/ÃJ2Ž!Ù^h¹P«×K†Ä†íÍ.¾å_#8п´ÌâµÕõÒëyþ&ZYL‡àôMÜ&T©oϹŸL$ÚE÷SŠNfÞ™q1ÍCÿ­TUv¯}ÿ•y¥ûà†@­^€›qEªZÊ5j-¤zšzEðeœW¾p‹‰oܬ 7¤hõêhõêhõêhõêhݸ;fm\16üF5Ü'ap”› µÁ}H|–*2®ðéôÿ‹W½¬è7D—“úKiSš ëÀ•\,sýÆbŠðo;›žyQÄÖoC8}ü 3&ö 剬9;—/ß–k­ó®æÑ÷×M‰"ˆˆ ;æÍü4ÿÊ{ñIÌRo™Š'"žçA  ».(ïÍÝÔHõø(6,¦‡,_q½¬«½øäacE“Úò×÷è,š/–Ùc9{á±Âîct±Ú õ )ÓBÌŸ¶³HÔôŸûÞô1™/Ztåmmˆ:góówšë}P3hÊ­Á$ÔoñΙ‹_ŠÊþ|ù¬·rÍ"§Ñwç DdÈÜ´.·¦éœO_xu‡™HÝiäÜ×fNÌýóêã^‹ë4qÁsú”¥/¿s¶6Ë5þ¥1´å/O0…&$½ýÒÈœ×w—7âR‡‡Š?,zqa‘UÝsêÛ‰Se½»_lü TóEÉo¿”UTÉé’Þynäá9[k¾kQò«O'‘~ô²¿†­š¹:·ú€õænj–¶˜êeæ‘#â~ºöãÏœ>Ý=&fÜØq~*Ïó/}´r¥Íf»rŒsÜóÓ_è©P(¶&½'-Íc#¾Ú•Óx@À²eËÿ½sç֭ɾÚý<øð#8D1'7çŸë×ûLh=zÜ>iòdÑáP*•Û’“Ho¡QhXØ_þúJΩ“Ÿ¬]ë~%$$dÆÌ™jµ?­úhe^^žÄå3}ˆÇ]æ}HC¡ù@â14ßèCz÷éóÄOò<Çsü7ßlww-­€V†Køû†¡…‡(&FëïÏ_Úº~oÇÑ#bÔþþü¥­‹n;%©cFÍ7î²ÿ¼añ’½ÄÝ=wÝ8ñGKtL˜ZË›ö~¶“O£UkyÓÞåol8Zgä—vÔûkzl›ðÎ"©G,Ùp÷Î ÷øß=uþó j"2Ù°àÿ{X qÑ#æÍpŽ,ŇEºTÿë³aÃ*Ϋ$"E§Áý¹œMïØPÊOOýU{·æDÊ/¥Äw»§w'…ŒUµSóN[ñ‘´ƒD¬¦c¿¡Q:µLf+>òãáBghŸþ݂ڹ†$t±ýy_nY;®÷Ç«³R~qguu}úXîÎ-:'ÄG7–ºpµ•¿5'ò "™ ó­¼–»ê]­š³æzò¨‰›6†KÞtvüc×¾5fJßÂÏg/Os'æDsQ¶û‘&~âôN›Ÿý(»îÒÖ³?dë¯áˆDoÆÕwt¼aËË)g넦Ô—ËXuÀ@D†´äìÑãúkvì0#./ÄeÎØöiuûÇ3rĉ¡¢’FÂÊì”îGbQÖ1Óèp-QQ£ëðînj–¶˜ê•$É`(™ÿ꫇£glìŒ/½<{V‰Áðá‡KËËˉ(qî¼!C‡îJI©ýÈ“Oþ±ªªjÞœD•JõÁÒ9b2ë7â3¡¹/°gÍš}ìèÛkƒ‡ ½ÿû¼þšÅbñ±Ðž›>}ù²óóòV­ùøÇº\®VZdd§—úY©TÖ¾˜8gîöm[322¢¢¢f'ΙõÒ ˆËc#­ñhô¸Ë|£ñšoô!Có>Ä!Š‹½W^^Þ®]»V­þß¡C-­€ÖG×£óù™³—pÑS—¯™ÿàªçç-/#Æ.[2n`ꂽÂÝÏÏ-¬Ÿ9f±óØÞž>âTÒwF"¾GŒ0gæìSbب%ëæýnÎÌÙ§DmÂ;«&&|7w[qãkŒH˜0ôÒš)sY9mD{*&â<¬E=zî]êü?nË£èÇß]’ÀôðÝo ¬,>R“|ìk=zð»Ÿ-."…¶æÅ˜¾e¿?nq©º è—u0¿’‚I¦ Qg§¥fŠl`ìøØÐ ™†¬#Ea·›÷î;{Õ¨^KÑ9[|d0k,ui#ÃÄ‚t •]Û·£Ò2?m„ù‡Ù?—4æóoM}Æ *Ú´àì5™Euì”|2…ç­…?mY±î€A$"Mü´Ñ\ò[Ö±¯m/¤O_mΦtóõf.õñý5¹¹¢wãŠêÛÉlÊøö±ZN(L[¿|[¶ Õ–®NŠ…y¦ÐÎz"3âòN\µß§[g*Üo¾ŽƒÐM¥ôÌý|Öêœf­í¦‡Ó$mô¶l?gf8"ºxáB@@;"2îëÆ€€€:ÑÓOOxqÆ "ºëž{þ›šJD•••? 0Àc#>=9vlö±£çÎó±½6jÔ¨OÖ®m99šZEE…V£%"µZm©(¿å9šæ…VXX0?éÕÂÂÂÚüü”á™™™D”ŸŸïňˆˆËgú¡ùFâ14ßèC<†æ}Èñìl÷»UUUJ•ªeö!p+Èäþkì£Â™ƒ{ ˆH<²ÀxæÐÁ‘ˆ.)taþÄõz‡eÏ–=ÅDb^ꮂq1îÑqçí9%‘ñLAñ¥£îǦ3gLÚöWŸóÄX\L=zG'š Läq-awÄéNíÜ™'‰g¾ÛyÄÓÎ_ÍUV\™Svúh‘åê³<ÛNÅ™K,."ª4V°í4îoç¬8{ºT$"WÙ“ÓOÕðw®,8WÌ‘.2Ìv¾ÐBDTQV©h§ÂàÛköŽÝæ¨Ç¦LŸÖïʾ:É&f,#îütw‰wãâ´ZmTwýá导øÂ+ë ñ3§÷ãˆã8A¨©G!Š"Ï©9Ä嵸ˆˆH?üùû-[7g‹¿yizcý_¾jº>{ãÖœ¦%k½NµõZ½<2"í‡êyýƒ~üñQúðð¯¿þêøñãDtà@:¯PQHPÑxÙ½ØåÒËÁÁ! 5â¡Ýyç‘#¿¿hôè1¾´×d2™><¼K—.Oþq¬R©ÜõŸÿôÓO>³×V._–4ÿoÃy$00àÍ… [é^s:V«•©óÁ   “É$IRM¼¥ÁÁ!­=.ŸéC<†æ}HýÐ|¦ñ¸×|£©Õ»wo³Éd(.ÖëÃ[rÞÑN5þo!]T/ä<¾¶hë1Éã{‚ÕRÿ±@DÄùëtãÞøl(ñþtÆßŸˆHÖÚ¡N–¿Ž$Ìž%IôÌÔéË&Ò©­«Wl9jñ°ÿöj‹±¶®Ñbñ£àd¬ètÖævÅJk½…\[÷0k0R`{XvZ¬MåÔn{m.<¸OB|¤‘í\zjVáùŠî‘!¬AŒ ¶æVV‡í$–“¡‚C:|ÎÜØôùÓR‹øNÍzåiKÿ²®î ÇšÊ||GòñÇÆÇj4¡ÓÆsÉ 40Ôd¸ÎZ÷„x1ýgÒÝ%S¯],ó¬Ww˜‰8MŸI¯½‘$Î^˜föb\QNÊg‘HÌþ6ݼ ge‰"ÏóÕ3ù9ŽĺvˆëæÆEDšþ‰IÃ ëæ§®}§ÞAHgÍdÞµpê."uTÜôyoÍ¢Ä%•×½*o„Ótmú¿ØÚ=&fóæMî§û÷훓øò”É“:wŽ~|Ô(":{ölnN‰±ö*‘¦‘F| ´   ±ãŸúhå ßÛk …ÂÏϯ¼¬ìý÷Þ]ºdñ¤Éjß¾½Ïqqñ/]ü>5Õb±ŒxôÑVº×ê"IW~qK ãqùLRŸÏô!õùLâ‘/õ!‘‘¦L{véÒZx^ÀkT¿¹,(¬y×Ç£ñÌæ¿<ó̤gž™ôÌØ1£’¾35éóuïF坿«ÁbÁž ¦Oœ»Å’0ÿùœ§µXŒVwZ™ˆÈŸç= ¼u:]œLÖø(ËÍ6wðÀÁñ=§Ÿ¸¾Š ¥Y©Û·»}{jV)‘x1¯Lb+,¨É’Èdär:qôµªØþòw¤‰DÖ³»6¦Sß~á -Ë õÖ?¼Ï¬u›¿úzóW  ë5å_û_9ˆK²sÄØA}Ô×¹~ÑœõŸtSç>Ý9oÆ% &uhM-N͉bIž)$J_ýZxg­9¯nÊqÝÔ¸HÓ÷¹7&ѦgY]Ž#„ºÿóeÍ?|XˆêÚœµÞ´pš¥í¦zïàÁxàí¿¿åžZ«²²2í‡zÆöªû¢¡¤4((¸&‹¡»|¹´ñFZuhƒÖét‹Þ_¼båGõøF=>íÙ?ûFh•••eeeîi¼¹¿þÑ1Ò7B 1räâE‹233ÞZ¸0:ºKLLÖZ}ÆË—5LMv&8(èr͈æV—Ïô!õùLRŸÏô!.€}¨éýòœ9‹Þ{×P\Ü’ûð&ñº–:R³?²ç¨6aÊÐŽˆHÖ´k}‹ÉD=:rDÄEMDDꈘh5‰'O™ˆç=®¥øÐã&„sD\D£½uZ·[¬.U»Æݬ6<¨ôÐ÷{÷í;ø¿sem+QtùiÔÒbqžIÓ½g{[aAMßv•ÝjÁÞ¶óWf0‹Qý»©‰ˆ8ý½Ý´ÅE¢¨á3f×Qh·;£ÜµAÔÝF>Ö³p–yÿ¢'ŸWýoÁ®âc&OZšQ'÷–›¼%¿×s¯Nì§w7ªÖhùF†Ä«bŽ5äŠ^+ww?hÂ}¡‘*ö±~êc™…T”±_ìÿXœ†ˆ 6&ÖôÓá«æõ#®›—:öOIÓÔÉ –Ö­ÌÅŽš;=.ÔÓAhåBºÅ†¸»lNÓod_uaŽ¡Yk¾I»©yÚh‡>zGï;ß|sa픽>üÂ…"I’X–½wÀ€Ó¹¹DÔ©S'^¡ÈÍÉ9°ÿƒ ë>Y«R©î½wÀßæ'ylÄ7B+--ݾm›û³îÉ×[·&ûÌ^ËÊÊYƒ¾Í³7®Ì˜õ܇yH4d¬^žf%NÛ§¯˜Î¥qš;ކ#M¹»W.I¹Žª¦†´w’„‰Ó&¼ýI¢š'¬†üÌM×Nš¸ê³qDDd-ÊX¿lg‘wãó?gÓKso˜Ê æœK–‰Š¾]š<+qÙ—Ïs¢!kãÒEˆË;qiî›4²{8Í[?ÏýBáÖÙ/|n íU¨¡Öú!×-vÌŒ¤$-' ¢`ÎIYºbeSÖx³wS3Oµz½¾ö‰{J¸{ä‹$I ÃÚm¶k?Ã0µ“Ç™V82<"bõš/\¸ ¹ª'“¬\±¢WïÞqqqUUU2Vvâĉÿú§Ãáxúé «W­’Ëå3^z©STg§ÃñÍ7Û÷íÝë±wÅÀÖZÝ[NšæF…æð /jµZžçw~ûMZZšÏ„60.þñQÛmv??¿Ýߟ’òŸÖš{±aÆuéÚõ“µkÝOCBBf½œ¨T*EAøxÍêüü|ˆËgú»Ì7ú¡ùFâ14ßèC>ýü IrUUVÿBKIIÙ¾m[KëCÚ*F¡ÓwÐ*H0_,¼Ì*UÆ+Uf=Óétµ]úïÄÉÛð]jذ{º—¤í;ko`ãtèß©øçŒs«ê4`ØmçR6ylÚ/¡KqÚÁsîÕøw½ :ëû_ŒÖ PM¼qÓy•ªO£m1Õ Þ%ÐGû‘ýòùBCª×{TQqýu§ÓÿWì1}ëßíþ{ý²~8jtØuð€vÙ©‡K›–¢eý» Œ×ÙyQ$"R„xÛÙƒ™í8ðjüþToíä¤zàV’)ƒB‚”L•Ñp¹’W!ÕÛbpÁ=ûõî &§“dä,;wô—ÓÆ¦Œé ì:t@?[aÖÇŠ‘ÚhÐïKõ^ï䘫Nxus¸µÜ9_ìh*V© R:ËKL†ab——-‹XzüÀîßQG¬ì×=)¿b3Ü\2…RÁ¯ô““Ððròú™\ävàF`”š@¥‚%Žq©•<¯S—U Ø0Mà°ͪ %Se´ˆÄs .'§«s»µ{‘í€ßG²•Yì¼ÒUn29]r’±—WŠ$ç°e~[S'ÇTpð8’×ã‹H@ã8ÿà ÎQ^jì¢(w N‡Ó.Šr² Îk* Þ|7ð¦ç^ÔäÉ1Í9ÃÖ¯ç PC© TɈø Ö®ôW²$–¹Ôþ "e°ÝZˆסɓcØÚQºu¸Hæ@s‰U‚“ˆœB•Õ.ºˆœ‚Õj]D$Ú'¶@c8ÿàö·uöç$‡]EAp:»(Š‚í7΢rª©ÉÐ`z× fBþ~›£âÂyÏ:‡‹ÊmrI]d±•ÉÉ!:%Rb 4¨ù“c®*àà.Î[{g¶ê¶•Jj´D/ª÷€‡ N9_ýˆã®}ž‰U‚Ó_)s UV»\¥RH‚ÕêàU ŽuOŽiø\*¯½÷Ú5^÷+f³Ù½@Ý[´¹C†à†jþä9Õ æu?¯ûàVQªTØÐ=\ SIDATf5crŒÜ=b÷šÒ ÈüÀ-d4±š„¥z·es?p6€V‚½f/Æð´:lÝ¢ uGò6”óÅh_€–¦º€CÝê µO¯y  eúI>/íab*ôIEND®B`‚prometheus_varnish_exporter-1.6.1/go.mod000066400000000000000000000001671415415765100205170ustar00rootroot00000000000000module github.com/jonnenauha/prometheus_varnish_exporter go 1.12 require github.com/prometheus/client_golang v1.11.0 prometheus_varnish_exporter-1.6.1/go.sum000066400000000000000000000323161415415765100205450ustar00rootroot00000000000000cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1 h1:7QnIQpGRHE5RnLKnESfDoxm2dTapTZua5a0kS0A+VXQ= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= prometheus_varnish_exporter-1.6.1/main.go000066400000000000000000000167401415415765100206700ustar00rootroot00000000000000package main import ( "encoding/json" "flag" "fmt" "log" "net/http" "os" "sync" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) var ( ApplicationName = "prometheus_varnish_exporter" Version string VersionHash string VersionDate string PrometheusExporter = NewPrometheusExporter() VarnishVersion = NewVarnishVersion() ExitHandler = &exitHandler{} StartParams = &startParams{ ListenAddress: ":9131", // Reserved and publicly announced at https://github.com/prometheus/prometheus/wiki/Default-port-allocations Path: "/metrics", VarnishstatExe: "varnishstat", Params: &varnishstatParams{}, } logger *log.Logger ) type startParams struct { ListenAddress string Path string HealthPath string VarnishstatExe string VarnishDockerContainer string Params *varnishstatParams Verbose bool ExitOnErrors bool Test bool Raw bool WithGoMetrics bool noExit bool // deprecated } type varnishstatParams struct { Instance string VSM string } func (p *varnishstatParams) isEmpty() bool { return p.Instance == "" && p.VSM == "" } func (p *varnishstatParams) make() (params []string) { // -n if p.Instance != "" { params = append(params, "-n", p.Instance) } // -N is not supported by 3.x if p.VSM != "" && VarnishVersion.EqualsOrGreater(4, 0) { params = append(params, "-N", p.VSM) } return params } func main() { // prometheus conventions flag.StringVar(&StartParams.ListenAddress, "web.listen-address", StartParams.ListenAddress, "Address on which to expose metrics and web interface.") flag.StringVar(&StartParams.Path, "web.telemetry-path", StartParams.Path, "Path under which to expose metrics.") flag.StringVar(&StartParams.HealthPath, "web.health-path", StartParams.HealthPath, "Path under which to expose healthcheck. Disabled unless configured.") // varnish flag.StringVar(&StartParams.VarnishstatExe, "varnishstat-path", StartParams.VarnishstatExe, "Path to varnishstat.") flag.StringVar(&StartParams.Params.Instance, "n", StartParams.Params.Instance, "varnishstat -n value.") flag.StringVar(&StartParams.Params.VSM, "N", StartParams.Params.VSM, "varnishstat -N value.") // docker flag.StringVar(&StartParams.VarnishDockerContainer, "docker-container-name", StartParams.VarnishDockerContainer, "Docker container name to exec varnishstat in.") // modes version := false flag.BoolVar(&version, "version", version, "Print version and exit") flag.BoolVar(&StartParams.ExitOnErrors, "exit-on-errors", StartParams.ExitOnErrors, "Exit process on scrape errors.") flag.BoolVar(&StartParams.Verbose, "verbose", StartParams.Verbose, "Verbose logging.") flag.BoolVar(&StartParams.Test, "test", StartParams.Test, "Test varnishstat availability, prints available metrics and exits.") flag.BoolVar(&StartParams.Raw, "raw", StartParams.Test, "Raw stdout logging without timestamps.") flag.BoolVar(&StartParams.WithGoMetrics, "with-go-metrics", StartParams.WithGoMetrics, "Export go runtime and http handler metrics") // deprecated flag.BoolVar(&StartParams.noExit, "no-exit", StartParams.noExit, "Deprecated: see -exit-on-errors") flag.Parse() if version { fmt.Printf("%s %s\n", ApplicationName, getVersion(true)) os.Exit(0) } logger = log.New(os.Stdout, "", log.Ldate|log.Ltime) if len(StartParams.Path) == 0 || StartParams.Path[0] != '/' { logFatal("-web.telemetry-path cannot be empty and must start with a slash '/', given %q", StartParams.Path) } if len(StartParams.HealthPath) != 0 && StartParams.HealthPath[0] != '/' { logFatal("-web.health-path must start with a slash '/' if configured, given %q", StartParams.HealthPath) } if StartParams.Path == StartParams.HealthPath { logFatal("-web.telemetry-path and -web.health-path cannot have same value") } // Don't log warning on !noExit as that would spam for the formed default value. if StartParams.noExit { logWarn("-no-exit is deprecated. As of v1.5 it is the default behavior not to exit process on scrape errors. You can remove this parameter.") } // Test run or user explicitly wants to exit on any scrape errors during runtime. ExitHandler.exitOnError = StartParams.Test == true || StartParams.ExitOnErrors == true if b, err := json.MarshalIndent(StartParams, "", " "); err == nil { logInfo("%s %s %s", ApplicationName, getVersion(false), b) } else { logFatal(err.Error()) } // Initialize if err := VarnishVersion.Initialize(); err != nil { ExitHandler.Errorf("Varnish version initialize failed: %s", err.Error()) } if VarnishVersion.Valid() { logInfo("Found varnishstat %s", VarnishVersion) if err := PrometheusExporter.Initialize(); err != nil { logFatal("Prometheus exporter initialize failed: %s", err.Error()) } } // Test to verify everything is ok before starting the server { done := make(chan bool) metrics := make(chan prometheus.Metric) go func() { for m := range metrics { if StartParams.Test { logInfo("%s", m.Desc()) } } done <- true }() tStart := time.Now() buf, err := ScrapeVarnish(metrics) close(metrics) <-done if err == nil { logInfo("Test scrape done in %s", time.Now().Sub(tStart)) logRaw("") } else { if len(buf) > 0 { logRaw("\n%s", buf) } ExitHandler.Errorf("Startup test: %s", err.Error()) } } if StartParams.Test { return } // Start serving logInfo("Server starting on %s with metrics path %s", StartParams.ListenAddress, StartParams.Path) if !StartParams.WithGoMetrics { registry := prometheus.NewRegistry() if err := registry.Register(PrometheusExporter); err != nil { logFatal("registry.Register failed: %s", err.Error()) } handler := promhttp.HandlerFor(registry, promhttp.HandlerOpts{ ErrorLog: logger, }) http.Handle(StartParams.Path, handler) } else { prometheus.MustRegister(PrometheusExporter) http.Handle(StartParams.Path, promhttp.Handler()) } if StartParams.Path != "/" { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(` Varnish Exporter

Varnish Exporter

Metrics

`)) }) } if StartParams.HealthPath != "" { http.HandleFunc(StartParams.HealthPath, func(w http.ResponseWriter, r *http.Request) { // As noted in the "up" metric, needs some way to determine if everything is actually Ok. // For now, this just lets us check that we're accepting connections w.WriteHeader(http.StatusOK) fmt.Fprintln(w, "Ok") }) } logFatalError(http.ListenAndServe(StartParams.ListenAddress, nil)) } type exitHandler struct { sync.RWMutex exitOnError bool err error } func (ex *exitHandler) Errorf(format string, a ...interface{}) error { return ex.Set(fmt.Errorf(format, a...)) } func (ex *exitHandler) HasError() bool { ex.RLock() hasError := ex.err != nil ex.RUnlock() return hasError } func (ex *exitHandler) Set(err error) error { ex.Lock() defer ex.Unlock() if err == nil { ex.err = nil return nil } errDiffers := ex.err == nil || ex.err.Error() != err.Error() ex.err = err if ex.exitOnError { logFatal("%s", err.Error()) } else if errDiffers { logError("%s", err.Error()) } return err } func getVersion(date bool) (version string) { if Version == "" { return "dev" } version = fmt.Sprintf("v%s (%s)", Version, VersionHash) if date { version += " " + VersionDate } return version } prometheus_varnish_exporter-1.6.1/prometheus.go000066400000000000000000000220611415415765100221300ustar00rootroot00000000000000package main import ( "regexp" "strings" "sync" "time" "github.com/prometheus/client_golang/prometheus" ) const ( exporterNamespace = "varnish" ) // prometheusExporter type prometheusExporter struct { sync.RWMutex up prometheus.Gauge version prometheus.Gauge } func NewPrometheusExporter() *prometheusExporter { return &prometheusExporter{ up: prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: exporterNamespace, Name: "up", Help: "Was the last scrape of varnish successful.", }), } } func (pe *prometheusExporter) Initialize() error { pe.version = prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: exporterNamespace, Name: "version", Help: "Varnish version information", ConstLabels: VarnishVersion.Labels(), }) pe.version.Set(1) return nil } // Implements prometheus.Collector func (pe *prometheusExporter) Describe(ch chan<- *prometheus.Desc) { start := time.Now() ch <- pe.up.Desc() if pe.version != nil { ch <- pe.version.Desc() } if StartParams.Verbose { logInfo("prometheus.Collector.Describe %s", time.Now().Sub(start)) } } // Implements prometheus.Collector func (pe *prometheusExporter) Collect(ch chan<- prometheus.Metric) { start := time.Now() pe.Lock() defer pe.Unlock() // Rare case of varnish not being installed in the system // when we started, but installed while we are running. if !VarnishVersion.Valid() { if VarnishVersion.Initialize() == nil { pe.version = prometheus.NewGauge(prometheus.GaugeOpts{ Namespace: exporterNamespace, Name: "version", Help: "Varnish version information", ConstLabels: VarnishVersion.Labels(), }) } } hadError := ExitHandler.HasError() _, err := ScrapeVarnish(ch) ExitHandler.Set(err) if err == nil { if hadError { logInfo("Successful scrape") } pe.up.Set(1) } else { pe.up.Set(0) } ch <- pe.up if pe.version != nil { ch <- pe.version } if StartParams.Verbose { postfix := "" if err != nil { postfix = " (scrape failed)" } logInfo("prometheus.Collector.Collect %s%s", time.Now().Sub(start), postfix) } } // utils type group struct { name string prefixes []string } var ( groups = []group{ group{name: "backend", prefixes: []string{ "vbe.", }}, group{name: "mempool", prefixes: []string{ "mempool.", }}, group{name: "lck", prefixes: []string{ "lck.", }}, group{name: "sma", prefixes: []string{ "sma.", }}, group{name: "smf", prefixes: []string{ "smf.", }}, group{name: "mgt", prefixes: []string{ "mgt.", }}, group{name: "main", prefixes: []string{ "main.", }}, } ) type grouping struct { newPrefix string prefix string total string desc string labelKey string } var ( fqGroupPrefixes = []*grouping{ &grouping{ prefix: "main_fetch", total: "main_s_fetch", desc: "Number of fetches", }, &grouping{ newPrefix: "main_sessions", prefix: "main_sess", total: "main_s_sess", desc: "Number of sessions", }, &grouping{ newPrefix: "main_worker_threads", prefix: "main_n_wrk", total: "main_n_wrk", desc: "Number of worker threads", }, } fqNames = map[string]string{ "varnish_lck_colls": "varnish_lock_collisions", "varnish_lck_creat": "varnish_lock_created", "varnish_lck_destroy": "varnish_lock_destroyed", "varnish_lck_locks": "varnish_lock_operations", } fqIdentifiers = map[string]string{ "varnish_lock_collisions": "target", "varnish_lock_created": "target", "varnish_lock_destroyed": "target", "varnish_lock_operations": "target", "varnish_sma_c_bytes": "type", "varnish_sma_c_fail": "type", "varnish_sma_c_freed": "type", "varnish_sma_c_req": "type", "varnish_sma_g_alloc": "type", "varnish_sma_g_bytes": "type", "varnish_sma_g_space": "type", "varnish_smf_c_bytes": "type", "varnish_smf_c_fail": "type", "varnish_smf_c_freed": "type", "varnish_smf_c_req": "type", "varnish_smf_g_alloc": "type", "varnish_smf_g_bytes": "type", "varnish_smf_g_smf_frag": "type", "varnish_smf_g_smf_large": "type", "varnish_smf_g_smf": "type", "varnish_smf_g_space": "type", } ) var ( // (prefix:). regexBackendUUID = regexp.MustCompile(`([[0-9A-Za-z]{8}-[0-9A-Za-z]{4}-[0-9A-Za-z]{4}-[89ABab][0-9A-Za-z]{3}-[0-9A-Za-z]{12})(.*)`) // (,(),) regexBackendParen = regexp.MustCompile(`(.*)\((.*)\)`) ) func findLabelValue(name string, keys, values []string) string { for i, key := range keys { if key == name { if i < len(values) { return values[i] } return "" } } return "" } func cleanBackendName(name string) string { name = strings.Trim(name, ".") for _, prefix := range []string{"boot.", "root:"} { if startsWith(name, prefix, caseInsensitive) { name = name[len(prefix):] } } // reload_2019-08-29T100458. as by varnish_reload_vcl in 4.x // reload_20191014_091124_78599. as by varnishreload in 6+ if strings.HasPrefix(name, "reload_") { dot := strings.Index(name, ".") if dot != -1 { name = name[dot + 1:] } } return name } // https://prometheus.io/docs/practices/naming/ func computePrometheusInfo(vName, vGroup, vIdentifier, vDescription string) (name, description string, labelKeys, labelValues []string) { { // Varnish >= 5.2 no longer has 'ident', parse from full vName // as ".." if len(vIdentifier) == 0 && strings.Count(vName, ".") > 1 { vIdentifier = prometheusTrimGroupPrefix(strings.ToLower(vName)) vIdentifier = vIdentifier[0:strings.LastIndex(vIdentifier, ".")] } } // name and description { fq := strings.ToLower(vName) // Remove unique identifiers from name to group similar metrics by labeling if len(vIdentifier) > 0 { fq = strings.Replace(fq, "."+strings.ToLower(vIdentifier), "", -1) } // Make sure our group is prefixed only once fq = prometheusTrimGroupPrefix(fq) // Build fq name name = exporterNamespace + "_" + vGroup + "_" + strings.Replace(fq, ".", "_", -1) if swapName := fqNames[name]; len(swapName) > 0 { name = swapName } description = vDescription } // labels: can alter final name and description { if len(vIdentifier) > 0 { if isVBE := startsWith(vName, "VBE.", caseSensitive); isVBE { if hits := regexBackendUUID.FindAllStringSubmatch(vIdentifier, -1); len(hits) > 0 && len(hits[0]) >= 3 { labelKeys, labelValues = append(labelKeys, "backend"), append(labelValues, cleanBackendName(hits[0][2])) labelKeys, labelValues = append(labelKeys, "server"), append(labelValues, hits[0][1]) } else if hits := regexBackendParen.FindAllStringSubmatch(vIdentifier, -1); len(hits) > 0 && len(hits[0]) >= 3 { labelKeys, labelValues = append(labelKeys, "backend"), append(labelValues, cleanBackendName(hits[0][1])) labelKeys, labelValues = append(labelKeys, "server"), append(labelValues, strings.Replace(hits[0][2], ",,", ":", 1)) } // We must be consistent with the number of labels and their names inside this scrape and between scrapes, or we will get this error: // https://github.com/prometheus/client_golang/blob/3fb8ace93bc4ccddea55af62320c2fd109252880/prometheus/registry.go#L704-L707 if len(labelKeys) == 0 { labelKeys, labelValues = append(labelKeys, "backend"), append(labelValues, cleanBackendName(vIdentifier)) labelKeys, labelValues = append(labelKeys, "server"), append(labelValues, "unknown") } } if len(labelKeys) == 0 { labelKey := fqIdentifiers[name] if len(labelKey) == 0 { labelKey = "id" } labelKeys, labelValues = append(labelKeys, labelKey), append(labelValues, vIdentifier) } } // create groupings by moving part of the fq name as a label and optional total for _, grouping := range fqGroupPrefixes { fqTotal := exporterNamespace + "_" + grouping.total fqPrefix := exporterNamespace + "_" + grouping.prefix fqNewName := fqPrefix if len(grouping.newPrefix) > 0 { fqNewName = exporterNamespace + "_" + grouping.newPrefix } if name == fqTotal { // @note total should not be a label as it breaks aggregation name, description = fqNewName+"_total", grouping.desc break } else if len(name) > len(fqPrefix)+1 && strings.HasPrefix(name, fqPrefix+"_") { labelKey := "type" if len(grouping.labelKey) > 0 { labelKey = grouping.labelKey } labelKeys, labelValues = append(labelKeys, labelKey), append(labelValues, name[len(fqPrefix)+1:]) name, description = fqNewName, grouping.desc break } } } return name, description, labelKeys, labelValues } func prometheusTrimGroupPrefix(name string) string { nameLower := strings.ToLower(name) for _, group := range groups { for _, prefix := range group.prefixes { if startsWith(nameLower, prefix, caseSensitive) { return name[len(prefix):] } } } return name } // Always returns at least one main label func prometheusGroup(vName string) string { vNameLower := strings.ToLower(vName) for _, group := range groups { if startsWithAny(vNameLower, group.prefixes, caseSensitive) { return group.name } } return "main" } prometheus_varnish_exporter-1.6.1/test/000077500000000000000000000000001415415765100203645ustar00rootroot00000000000000prometheus_varnish_exporter-1.6.1/test/docker-compose.yml000066400000000000000000000011201415415765100240130ustar00rootroot00000000000000version: "2" services: varnish: image: eeacms/varnish ports: - "5081:6081" - "5085:6085" depends_on: - hello_world environment: BACKENDS: "hello_world" BACKENDS_PORT: "5090" DNS_ENABLED: "true" BACKENDS_PROBE_INTERVAL: "3s" BACKENDS_PROBE_TIMEOUT: "1s" BACKENDS_PROBE_WINDOW: "3" BACKENDS_PROBE_THRESHOLD: "2" DASHBOARD_USER: "admin" DASHBOARD_PASSWORD: "admin" DASHBOARD_SERVERS: "varnish" DASHBOARD_DNS_ENABLED: "true" hello_world: image: eeacms/hello environment: PORT: "5090" prometheus_varnish_exporter-1.6.1/test/scrape/000077500000000000000000000000001415415765100216415ustar00rootroot00000000000000prometheus_varnish_exporter-1.6.1/test/scrape/3.0.5.json000066400000000000000000000662631415415765100232140ustar00rootroot00000000000000{ "timestamp": "2019-08-20T00:03:35", "client_conn": { "value": 216, "flag": "a", "description": "Client connections accepted" }, "client_drop": { "value": 0, "flag": "a", "description": "Connection dropped, no sess/wrk" }, "client_req": { "value": 0, "flag": "a", "description": "Client requests received" }, "cache_hit": { "value": 0, "flag": "a", "description": "Cache hits" }, "cache_hitpass": { "value": 0, "flag": "a", "description": "Cache hits for pass" }, "cache_miss": { "value": 0, "flag": "a", "description": "Cache misses" }, "backend_conn": { "value": 0, "flag": "a", "description": "Backend conn. success" }, "backend_unhealthy": { "value": 0, "flag": "a", "description": "Backend conn. not attempted" }, "backend_busy": { "value": 0, "flag": "a", "description": "Backend conn. too many" }, "backend_fail": { "value": 0, "flag": "a", "description": "Backend conn. failures" }, "backend_reuse": { "value": 0, "flag": "a", "description": "Backend conn. reuses" }, "backend_toolate": { "value": 0, "flag": "a", "description": "Backend conn. was closed" }, "backend_recycle": { "value": 0, "flag": "a", "description": "Backend conn. recycles" }, "backend_retry": { "value": 0, "flag": "a", "description": "Backend conn. retry" }, "fetch_head": { "value": 0, "flag": "a", "description": "Fetch head" }, "fetch_length": { "value": 0, "flag": "a", "description": "Fetch with Length" }, "fetch_chunked": { "value": 0, "flag": "a", "description": "Fetch chunked" }, "fetch_eof": { "value": 0, "flag": "a", "description": "Fetch EOF" }, "fetch_bad": { "value": 0, "flag": "a", "description": "Fetch had bad headers" }, "fetch_close": { "value": 0, "flag": "a", "description": "Fetch wanted close" }, "fetch_oldhttp": { "value": 0, "flag": "a", "description": "Fetch pre HTTP/1.1 closed" }, "fetch_zero": { "value": 0, "flag": "a", "description": "Fetch zero len" }, "fetch_failed": { "value": 0, "flag": "a", "description": "Fetch failed" }, "fetch_1xx": { "value": 0, "flag": "a", "description": "Fetch no body (1xx)" }, "fetch_204": { "value": 0, "flag": "a", "description": "Fetch no body (204)" }, "fetch_304": { "value": 0, "flag": "a", "description": "Fetch no body (304)" }, "n_sess_mem": { "value": 10, "flag": "i", "description": "N struct sess_mem" }, "n_sess": { "value": 0, "flag": "i", "description": "N struct sess" }, "n_object": { "value": 0, "flag": "i", "description": "N struct object" }, "n_vampireobject": { "value": 0, "flag": "i", "description": "N unresurrected objects" }, "n_objectcore": { "value": 0, "flag": "i", "description": "N struct objectcore" }, "n_objecthead": { "value": 0, "flag": "i", "description": "N struct objecthead" }, "n_waitinglist": { "value": 0, "flag": "i", "description": "N struct waitinglist" }, "n_vbc": { "value": 0, "flag": "i", "description": "N struct vbc" }, "n_wrk": { "value": 10, "flag": "i", "description": "N worker threads" }, "n_wrk_create": { "value": 10, "flag": "a", "description": "N worker threads created" }, "n_wrk_failed": { "value": 0, "flag": "a", "description": "N worker threads not created" }, "n_wrk_max": { "value": 0, "flag": "a", "description": "N worker threads limited" }, "n_wrk_lqueue": { "value": 0, "flag": "a", "description": "work request queue length" }, "n_wrk_queued": { "value": 0, "flag": "a", "description": "N queued work requests" }, "n_wrk_drop": { "value": 0, "flag": "a", "description": "N dropped work requests" }, "n_backend": { "value": 1, "flag": "i", "description": "N backends" }, "n_expired": { "value": 0, "flag": "i", "description": "N expired objects" }, "n_lru_nuked": { "value": 0, "flag": "i", "description": "N LRU nuked objects" }, "n_lru_moved": { "value": 0, "flag": "i", "description": "N LRU moved objects" }, "losthdr": { "value": 0, "flag": "a", "description": "HTTP header overflows" }, "n_objsendfile": { "value": 0, "flag": "a", "description": "Objects sent with sendfile" }, "n_objwrite": { "value": 0, "flag": "a", "description": "Objects sent with write" }, "n_objoverflow": { "value": 0, "flag": "a", "description": "Objects overflowing workspace" }, "s_sess": { "value": 216, "flag": "a", "description": "Total Sessions" }, "s_req": { "value": 0, "flag": "a", "description": "Total Requests" }, "s_pipe": { "value": 0, "flag": "a", "description": "Total pipe" }, "s_pass": { "value": 0, "flag": "a", "description": "Total pass" }, "s_fetch": { "value": 0, "flag": "a", "description": "Total fetch" }, "s_hdrbytes": { "value": 0, "flag": "a", "description": "Total header bytes" }, "s_bodybytes": { "value": 0, "flag": "a", "description": "Total body bytes" }, "sess_closed": { "value": 216, "flag": "a", "description": "Session Closed" }, "sess_pipeline": { "value": 0, "flag": "a", "description": "Session Pipeline" }, "sess_readahead": { "value": 0, "flag": "a", "description": "Session Read Ahead" }, "sess_linger": { "value": 0, "flag": "a", "description": "Session Linger" }, "sess_herd": { "value": 0, "flag": "a", "description": "Session herd" }, "shm_records": { "value": 673, "flag": "a", "description": "SHM records" }, "shm_writes": { "value": 673, "flag": "a", "description": "SHM writes" }, "shm_flushes": { "value": 0, "flag": "a", "description": "SHM flushes due to overflow" }, "shm_cont": { "value": 0, "flag": "a", "description": "SHM MTX contention" }, "shm_cycles": { "value": 0, "flag": "a", "description": "SHM cycles through buffer" }, "sms_nreq": { "value": 0, "flag": "a", "description": "SMS allocator requests" }, "sms_nobj": { "value": 0, "flag": "i", "description": "SMS outstanding allocations" }, "sms_nbytes": { "value": 0, "flag": "i", "description": "SMS outstanding bytes" }, "sms_balloc": { "value": 0, "flag": "i", "description": "SMS bytes allocated" }, "sms_bfree": { "value": 0, "flag": "i", "description": "SMS bytes freed" }, "backend_req": { "value": 0, "flag": "a", "description": "Backend requests made" }, "n_vcl": { "value": 1, "flag": "a", "description": "N vcl total" }, "n_vcl_avail": { "value": 1, "flag": "a", "description": "N vcl available" }, "n_vcl_discard": { "value": 0, "flag": "a", "description": "N vcl discarded" }, "n_ban": { "value": 1, "flag": "i", "description": "N total active bans" }, "n_ban_gone": { "value": 1, "flag": "i", "description": "N total gone bans" }, "n_ban_add": { "value": 1, "flag": "a", "description": "N new bans added" }, "n_ban_retire": { "value": 0, "flag": "a", "description": "N old bans deleted" }, "n_ban_obj_test": { "value": 0, "flag": "a", "description": "N objects tested" }, "n_ban_re_test": { "value": 0, "flag": "a", "description": "N regexps tested against" }, "n_ban_dups": { "value": 0, "flag": "a", "description": "N duplicate bans removed" }, "hcb_nolock": { "value": 0, "flag": "a", "description": "HCB Lookups without lock" }, "hcb_lock": { "value": 0, "flag": "a", "description": "HCB Lookups with lock" }, "hcb_insert": { "value": 0, "flag": "a", "description": "HCB Inserts" }, "esi_errors": { "value": 0, "flag": "a", "description": "ESI parse errors (unlock)" }, "esi_warnings": { "value": 0, "flag": "a", "description": "ESI parse warnings (unlock)" }, "accept_fail": { "value": 0, "flag": "a", "description": "Accept failures" }, "client_drop_late": { "value": 0, "flag": "a", "description": "Connection dropped late" }, "uptime": { "value": 561, "flag": "a", "description": "Client uptime" }, "dir_dns_lookups": { "value": 0, "flag": "a", "description": "DNS director lookups" }, "dir_dns_failed": { "value": 0, "flag": "a", "description": "DNS director failed lookups" }, "dir_dns_hit": { "value": 0, "flag": "a", "description": "DNS director cached lookups hit" }, "dir_dns_cache_full": { "value": 0, "flag": "a", "description": "DNS director full dnscache" }, "vmods": { "value": 0, "flag": "i", "description": "Loaded VMODs" }, "n_gzip": { "value": 0, "flag": "a", "description": "Gzip operations" }, "n_gunzip": { "value": 0, "flag": "a", "description": "Gunzip operations" }, "sess_pipe_overflow": { "value": 0, "flag": "c", "description": "Dropped sessions due to session pipe overflow" }, "LCK.sms.creat": { "type": "LCK", "ident": "sms", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.sms.destroy": { "type": "LCK", "ident": "sms", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.sms.locks": { "type": "LCK", "ident": "sms", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.sms.colls": { "type": "LCK", "ident": "sms", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.smp.creat": { "type": "LCK", "ident": "smp", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.smp.destroy": { "type": "LCK", "ident": "smp", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.smp.locks": { "type": "LCK", "ident": "smp", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.smp.colls": { "type": "LCK", "ident": "smp", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.sma.creat": { "type": "LCK", "ident": "sma", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.sma.destroy": { "type": "LCK", "ident": "sma", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.sma.locks": { "type": "LCK", "ident": "sma", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.sma.colls": { "type": "LCK", "ident": "sma", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.smf.creat": { "type": "LCK", "ident": "smf", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.smf.destroy": { "type": "LCK", "ident": "smf", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.smf.locks": { "type": "LCK", "ident": "smf", "value": 1, "flag": "a", "description": "Lock Operations" }, "LCK.smf.colls": { "type": "LCK", "ident": "smf", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.hsl.creat": { "type": "LCK", "ident": "hsl", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.hsl.destroy": { "type": "LCK", "ident": "hsl", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.hsl.locks": { "type": "LCK", "ident": "hsl", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.hsl.colls": { "type": "LCK", "ident": "hsl", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.hcb.creat": { "type": "LCK", "ident": "hcb", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.hcb.destroy": { "type": "LCK", "ident": "hcb", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.hcb.locks": { "type": "LCK", "ident": "hcb", "value": 4, "flag": "a", "description": "Lock Operations" }, "LCK.hcb.colls": { "type": "LCK", "ident": "hcb", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.hcl.creat": { "type": "LCK", "ident": "hcl", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.hcl.destroy": { "type": "LCK", "ident": "hcl", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.hcl.locks": { "type": "LCK", "ident": "hcl", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.hcl.colls": { "type": "LCK", "ident": "hcl", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.vcl.creat": { "type": "LCK", "ident": "vcl", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.vcl.destroy": { "type": "LCK", "ident": "vcl", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.vcl.locks": { "type": "LCK", "ident": "vcl", "value": 5, "flag": "a", "description": "Lock Operations" }, "LCK.vcl.colls": { "type": "LCK", "ident": "vcl", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.stat.creat": { "type": "LCK", "ident": "stat", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.stat.destroy": { "type": "LCK", "ident": "stat", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.stat.locks": { "type": "LCK", "ident": "stat", "value": 226, "flag": "a", "description": "Lock Operations" }, "LCK.stat.colls": { "type": "LCK", "ident": "stat", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.sessmem.creat": { "type": "LCK", "ident": "sessmem", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.sessmem.destroy": { "type": "LCK", "ident": "sessmem", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.sessmem.locks": { "type": "LCK", "ident": "sessmem", "value": 253, "flag": "a", "description": "Lock Operations" }, "LCK.sessmem.colls": { "type": "LCK", "ident": "sessmem", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.wstat.creat": { "type": "LCK", "ident": "wstat", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.wstat.destroy": { "type": "LCK", "ident": "wstat", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.wstat.locks": { "type": "LCK", "ident": "wstat", "value": 1129, "flag": "a", "description": "Lock Operations" }, "LCK.wstat.colls": { "type": "LCK", "ident": "wstat", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.herder.creat": { "type": "LCK", "ident": "herder", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.herder.destroy": { "type": "LCK", "ident": "herder", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.herder.locks": { "type": "LCK", "ident": "herder", "value": 1, "flag": "a", "description": "Lock Operations" }, "LCK.herder.colls": { "type": "LCK", "ident": "herder", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.wq.creat": { "type": "LCK", "ident": "wq", "value": 2, "flag": "a", "description": "Created locks" }, "LCK.wq.destroy": { "type": "LCK", "ident": "wq", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.wq.locks": { "type": "LCK", "ident": "wq", "value": 1566, "flag": "a", "description": "Lock Operations" }, "LCK.wq.colls": { "type": "LCK", "ident": "wq", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.objhdr.creat": { "type": "LCK", "ident": "objhdr", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.objhdr.destroy": { "type": "LCK", "ident": "objhdr", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.objhdr.locks": { "type": "LCK", "ident": "objhdr", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.objhdr.colls": { "type": "LCK", "ident": "objhdr", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.exp.creat": { "type": "LCK", "ident": "exp", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.exp.destroy": { "type": "LCK", "ident": "exp", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.exp.locks": { "type": "LCK", "ident": "exp", "value": 561, "flag": "a", "description": "Lock Operations" }, "LCK.exp.colls": { "type": "LCK", "ident": "exp", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.lru.creat": { "type": "LCK", "ident": "lru", "value": 2, "flag": "a", "description": "Created locks" }, "LCK.lru.destroy": { "type": "LCK", "ident": "lru", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.lru.locks": { "type": "LCK", "ident": "lru", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.lru.colls": { "type": "LCK", "ident": "lru", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.cli.creat": { "type": "LCK", "ident": "cli", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.cli.destroy": { "type": "LCK", "ident": "cli", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.cli.locks": { "type": "LCK", "ident": "cli", "value": 18, "flag": "a", "description": "Lock Operations" }, "LCK.cli.colls": { "type": "LCK", "ident": "cli", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.ban.creat": { "type": "LCK", "ident": "ban", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.ban.destroy": { "type": "LCK", "ident": "ban", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.ban.locks": { "type": "LCK", "ident": "ban", "value": 564, "flag": "a", "description": "Lock Operations" }, "LCK.ban.colls": { "type": "LCK", "ident": "ban", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.vbp.creat": { "type": "LCK", "ident": "vbp", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.vbp.destroy": { "type": "LCK", "ident": "vbp", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.vbp.locks": { "type": "LCK", "ident": "vbp", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.vbp.colls": { "type": "LCK", "ident": "vbp", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.vbe.creat": { "type": "LCK", "ident": "vbe", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.vbe.destroy": { "type": "LCK", "ident": "vbe", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.vbe.locks": { "type": "LCK", "ident": "vbe", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.vbe.colls": { "type": "LCK", "ident": "vbe", "value": 0, "flag": "a", "description": "Collisions" }, "LCK.backend.creat": { "type": "LCK", "ident": "backend", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.backend.destroy": { "type": "LCK", "ident": "backend", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.backend.locks": { "type": "LCK", "ident": "backend", "value": 1, "flag": "a", "description": "Lock Operations" }, "LCK.backend.colls": { "type": "LCK", "ident": "backend", "value": 0, "flag": "a", "description": "Collisions" }, "SMF.s0.c_req": { "type": "SMF", "ident": "s0", "value": 0, "flag": "a", "description": "Allocator requests" }, "SMF.s0.c_fail": { "type": "SMF", "ident": "s0", "value": 0, "flag": "a", "description": "Allocator failures" }, "SMF.s0.c_bytes": { "type": "SMF", "ident": "s0", "value": 0, "flag": "a", "description": "Bytes allocated" }, "SMF.s0.c_freed": { "type": "SMF", "ident": "s0", "value": 0, "flag": "a", "description": "Bytes freed" }, "SMF.s0.g_alloc": { "type": "SMF", "ident": "s0", "value": 0, "flag": "i", "description": "Allocations outstanding" }, "SMF.s0.g_bytes": { "type": "SMF", "ident": "s0", "value": 0, "flag": "i", "description": "Bytes outstanding" }, "SMF.s0.g_space": { "type": "SMF", "ident": "s0", "value": 2220228608, "flag": "i", "description": "Bytes available" }, "SMF.s0.g_smf": { "type": "SMF", "ident": "s0", "value": 4, "flag": "i", "description": "N struct smf" }, "SMF.s0.g_smf_frag": { "type": "SMF", "ident": "s0", "value": 0, "flag": "i", "description": "N small free smf" }, "SMF.s0.g_smf_large": { "type": "SMF", "ident": "s0", "value": 4, "flag": "i", "description": "N large free smf" }, "SMA.Transient.c_req": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "a", "description": "Allocator requests" }, "SMA.Transient.c_fail": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "a", "description": "Allocator failures" }, "SMA.Transient.c_bytes": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "a", "description": "Bytes allocated" }, "SMA.Transient.c_freed": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "a", "description": "Bytes freed" }, "SMA.Transient.g_alloc": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "i", "description": "Allocations outstanding" }, "SMA.Transient.g_bytes": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "i", "description": "Bytes outstanding" }, "SMA.Transient.g_space": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "i", "description": "Bytes available" }, "VBE.default(10.100.225.15,,80).vcls": { "type": "VBE", "ident": "default(10.100.225.15,,80)", "value": 1, "flag": "i", "description": "VCL references" }, "VBE.default(10.100.225.15,,80).happy": { "type": "VBE", "ident": "default(10.100.225.15,,80)", "value": 0, "flag": "b", "description": "Happy health probes" } }prometheus_varnish_exporter-1.6.1/test/scrape/4.0.5.json000066400000000000000000001333601415415765100232060ustar00rootroot00000000000000{ "timestamp": "2019-07-31T23:56:36", "MAIN.uptime": { "type": "MAIN", "value": 0, "flag": "a", "description": "Child process uptime" }, "MAIN.sess_conn": { "type": "MAIN", "value": 0, "flag": "c", "description": "Sessions accepted" }, "MAIN.sess_drop": { "type": "MAIN", "value": 0, "flag": "c", "description": "Sessions dropped" }, "MAIN.sess_fail": { "type": "MAIN", "value": 0, "flag": "c", "description": "Session accept failures" }, "MAIN.sess_pipe_overflow": { "type": "MAIN", "value": 0, "flag": "c", "description": "Session pipe overflow" }, "MAIN.client_req_400": { "type": "MAIN", "value": 0, "flag": "a", "description": "Client requests received, subject to 400 errors" }, "MAIN.client_req_411": { "type": "MAIN", "value": 0, "flag": "a", "description": "Client requests received, subject to 411 errors" }, "MAIN.client_req_413": { "type": "MAIN", "value": 0, "flag": "a", "description": "Client requests received, subject to 413 errors" }, "MAIN.client_req_417": { "type": "MAIN", "value": 0, "flag": "a", "description": "Client requests received, subject to 417 errors" }, "MAIN.client_req": { "type": "MAIN", "value": 0, "flag": "a", "description": "Good client requests received" }, "MAIN.cache_hit": { "type": "MAIN", "value": 0, "flag": "a", "description": "Cache hits" }, "MAIN.cache_hitpass": { "type": "MAIN", "value": 0, "flag": "a", "description": "Cache hits for pass" }, "MAIN.cache_miss": { "type": "MAIN", "value": 0, "flag": "a", "description": "Cache misses" }, "MAIN.backend_conn": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend conn. success" }, "MAIN.backend_unhealthy": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend conn. not attempted" }, "MAIN.backend_busy": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend conn. too many" }, "MAIN.backend_fail": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend conn. failures" }, "MAIN.backend_reuse": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend conn. reuses" }, "MAIN.backend_toolate": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend conn. was closed" }, "MAIN.backend_recycle": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend conn. recycles" }, "MAIN.backend_retry": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend conn. retry" }, "MAIN.fetch_head": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch no body (HEAD)" }, "MAIN.fetch_length": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch with Length" }, "MAIN.fetch_chunked": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch chunked" }, "MAIN.fetch_eof": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch EOF" }, "MAIN.fetch_bad": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch bad T-E" }, "MAIN.fetch_close": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch wanted close" }, "MAIN.fetch_oldhttp": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch pre HTTP/1.1 closed" }, "MAIN.fetch_zero": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch zero len body" }, "MAIN.fetch_1xx": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch no body (1xx)" }, "MAIN.fetch_204": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch no body (204)" }, "MAIN.fetch_304": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch no body (304)" }, "MAIN.fetch_failed": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch failed (all causes)" }, "MAIN.fetch_no_thread": { "type": "MAIN", "value": 0, "flag": "c", "description": "Fetch failed (no thread)" }, "MAIN.pools": { "type": "MAIN", "value": 2, "flag": "g", "description": "Number of thread pools" }, "MAIN.threads": { "type": "MAIN", "value": 200, "flag": "g", "description": "Total number of threads" }, "MAIN.threads_limited": { "type": "MAIN", "value": 0, "flag": "c", "description": "Threads hit max" }, "MAIN.threads_created": { "type": "MAIN", "value": 200, "flag": "c", "description": "Threads created" }, "MAIN.threads_destroyed": { "type": "MAIN", "value": 0, "flag": "c", "description": "Threads destroyed" }, "MAIN.threads_failed": { "type": "MAIN", "value": 0, "flag": "c", "description": "Thread creation failed" }, "MAIN.thread_queue_len": { "type": "MAIN", "value": 0, "flag": "g", "description": "Length of session queue" }, "MAIN.busy_sleep": { "type": "MAIN", "value": 0, "flag": "c", "description": "Number of requests sent to sleep on busy objhdr" }, "MAIN.busy_wakeup": { "type": "MAIN", "value": 0, "flag": "c", "description": "Number of requests woken after sleep on busy objhdr" }, "MAIN.sess_queued": { "type": "MAIN", "value": 0, "flag": "c", "description": "Sessions queued for thread" }, "MAIN.sess_dropped": { "type": "MAIN", "value": 0, "flag": "c", "description": "Sessions dropped for thread" }, "MAIN.n_object": { "type": "MAIN", "value": 0, "flag": "i", "description": "object structs made" }, "MAIN.n_vampireobject": { "type": "MAIN", "value": 0, "flag": "i", "description": "unresurrected objects" }, "MAIN.n_objectcore": { "type": "MAIN", "value": 0, "flag": "i", "description": "objectcore structs made" }, "MAIN.n_objecthead": { "type": "MAIN", "value": 0, "flag": "i", "description": "objecthead structs made" }, "MAIN.n_waitinglist": { "type": "MAIN", "value": 0, "flag": "i", "description": "waitinglist structs made" }, "MAIN.n_backend": { "type": "MAIN", "value": 1, "flag": "i", "description": "Number of backends" }, "MAIN.n_expired": { "type": "MAIN", "value": 0, "flag": "i", "description": "Number of expired objects" }, "MAIN.n_lru_nuked": { "type": "MAIN", "value": 0, "flag": "i", "description": "Number of LRU nuked objects" }, "MAIN.n_lru_moved": { "type": "MAIN", "value": 0, "flag": "i", "description": "Number of LRU moved objects" }, "MAIN.losthdr": { "type": "MAIN", "value": 0, "flag": "a", "description": "HTTP header overflows" }, "MAIN.s_sess": { "type": "MAIN", "value": 0, "flag": "a", "description": "Total sessions seen" }, "MAIN.s_req": { "type": "MAIN", "value": 0, "flag": "a", "description": "Total requests seen" }, "MAIN.s_pipe": { "type": "MAIN", "value": 0, "flag": "a", "description": "Total pipe sessions seen" }, "MAIN.s_pass": { "type": "MAIN", "value": 0, "flag": "a", "description": "Total pass-ed requests seen" }, "MAIN.s_fetch": { "type": "MAIN", "value": 0, "flag": "a", "description": "Total backend fetches initiated" }, "MAIN.s_synth": { "type": "MAIN", "value": 0, "flag": "a", "description": "Total synthethic responses made" }, "MAIN.s_req_hdrbytes": { "type": "MAIN", "value": 0, "flag": "a", "description": "Request header bytes" }, "MAIN.s_req_bodybytes": { "type": "MAIN", "value": 0, "flag": "a", "description": "Request body bytes" }, "MAIN.s_resp_hdrbytes": { "type": "MAIN", "value": 0, "flag": "a", "description": "Response header bytes" }, "MAIN.s_resp_bodybytes": { "type": "MAIN", "value": 0, "flag": "a", "description": "Response body bytes" }, "MAIN.s_pipe_hdrbytes": { "type": "MAIN", "value": 0, "flag": "a", "description": "Pipe request header bytes" }, "MAIN.s_pipe_in": { "type": "MAIN", "value": 0, "flag": "a", "description": "Piped bytes from client" }, "MAIN.s_pipe_out": { "type": "MAIN", "value": 0, "flag": "a", "description": "Piped bytes to client" }, "MAIN.sess_closed": { "type": "MAIN", "value": 0, "flag": "a", "description": "Session Closed" }, "MAIN.sess_pipeline": { "type": "MAIN", "value": 0, "flag": "a", "description": "Session Pipeline" }, "MAIN.sess_readahead": { "type": "MAIN", "value": 0, "flag": "a", "description": "Session Read Ahead" }, "MAIN.sess_herd": { "type": "MAIN", "value": 0, "flag": "a", "description": "Session herd" }, "MAIN.shm_records": { "type": "MAIN", "value": 6, "flag": "a", "description": "SHM records" }, "MAIN.shm_writes": { "type": "MAIN", "value": 6, "flag": "a", "description": "SHM writes" }, "MAIN.shm_flushes": { "type": "MAIN", "value": 0, "flag": "a", "description": "SHM flushes due to overflow" }, "MAIN.shm_cont": { "type": "MAIN", "value": 0, "flag": "a", "description": "SHM MTX contention" }, "MAIN.shm_cycles": { "type": "MAIN", "value": 0, "flag": "a", "description": "SHM cycles through buffer" }, "MAIN.sms_nreq": { "type": "MAIN", "value": 0, "flag": "a", "description": "SMS allocator requests" }, "MAIN.sms_nobj": { "type": "MAIN", "value": 0, "flag": "i", "description": "SMS outstanding allocations" }, "MAIN.sms_nbytes": { "type": "MAIN", "value": 0, "flag": "i", "description": "SMS outstanding bytes" }, "MAIN.sms_balloc": { "type": "MAIN", "value": 0, "flag": "i", "description": "SMS bytes allocated" }, "MAIN.sms_bfree": { "type": "MAIN", "value": 0, "flag": "i", "description": "SMS bytes freed" }, "MAIN.backend_req": { "type": "MAIN", "value": 0, "flag": "a", "description": "Backend requests made" }, "MAIN.n_vcl": { "type": "MAIN", "value": 1, "flag": "a", "description": "Number of loaded VCLs in total" }, "MAIN.n_vcl_avail": { "type": "MAIN", "value": 1, "flag": "a", "description": "Number of VCLs available" }, "MAIN.n_vcl_discard": { "type": "MAIN", "value": 0, "flag": "a", "description": "Number of discarded VCLs" }, "MAIN.bans": { "type": "MAIN", "value": 1, "flag": "g", "description": "Count of bans" }, "MAIN.bans_completed": { "type": "MAIN", "value": 1, "flag": "g", "description": "Number of bans marked 'completed'" }, "MAIN.bans_obj": { "type": "MAIN", "value": 0, "flag": "g", "description": "Number of bans using obj.*" }, "MAIN.bans_req": { "type": "MAIN", "value": 0, "flag": "g", "description": "Number of bans using req.*" }, "MAIN.bans_added": { "type": "MAIN", "value": 1, "flag": "c", "description": "Bans added" }, "MAIN.bans_deleted": { "type": "MAIN", "value": 0, "flag": "c", "description": "Bans deleted" }, "MAIN.bans_tested": { "type": "MAIN", "value": 0, "flag": "c", "description": "Bans tested against objects (lookup)" }, "MAIN.bans_obj_killed": { "type": "MAIN", "value": 0, "flag": "c", "description": "Objects killed by bans (lookup)" }, "MAIN.bans_lurker_tested": { "type": "MAIN", "value": 0, "flag": "c", "description": "Bans tested against objects (lurker)" }, "MAIN.bans_tests_tested": { "type": "MAIN", "value": 0, "flag": "c", "description": "Ban tests tested against objects (lookup)" }, "MAIN.bans_lurker_tests_tested": { "type": "MAIN", "value": 0, "flag": "c", "description": "Ban tests tested against objects (lurker)" }, "MAIN.bans_lurker_obj_killed": { "type": "MAIN", "value": 0, "flag": "c", "description": "Objects killed by bans (lurker)" }, "MAIN.bans_dups": { "type": "MAIN", "value": 0, "flag": "c", "description": "Bans superseded by other bans" }, "MAIN.bans_lurker_contention": { "type": "MAIN", "value": 0, "flag": "c", "description": "Lurker gave way for lookup" }, "MAIN.bans_persisted_bytes": { "type": "MAIN", "value": 13, "flag": "g", "description": "Bytes used by the persisted ban lists" }, "MAIN.bans_persisted_fragmentation": { "type": "MAIN", "value": 0, "flag": "g", "description": "Extra bytes in persisted ban lists due to fragmentation" }, "MAIN.n_purges": { "type": "MAIN", "value": 0, "flag": "i", "description": "Number of purge operations executed" }, "MAIN.n_obj_purged": { "type": "MAIN", "value": 0, "flag": "i", "description": "Number of purged objects" }, "MAIN.exp_mailed": { "type": "MAIN", "value": 0, "flag": "c", "description": "Number of objects mailed to expiry thread" }, "MAIN.exp_received": { "type": "MAIN", "value": 0, "flag": "c", "description": "Number of objects received by expiry thread" }, "MAIN.hcb_nolock": { "type": "MAIN", "value": 0, "flag": "a", "description": "HCB Lookups without lock" }, "MAIN.hcb_lock": { "type": "MAIN", "value": 0, "flag": "a", "description": "HCB Lookups with lock" }, "MAIN.hcb_insert": { "type": "MAIN", "value": 0, "flag": "a", "description": "HCB Inserts" }, "MAIN.esi_errors": { "type": "MAIN", "value": 0, "flag": "a", "description": "ESI parse errors (unlock)" }, "MAIN.esi_warnings": { "type": "MAIN", "value": 0, "flag": "a", "description": "ESI parse warnings (unlock)" }, "MAIN.vmods": { "type": "MAIN", "value": 0, "flag": "i", "description": "Loaded VMODs" }, "MAIN.n_gzip": { "type": "MAIN", "value": 0, "flag": "a", "description": "Gzip operations" }, "MAIN.n_gunzip": { "type": "MAIN", "value": 0, "flag": "a", "description": "Gunzip operations" }, "MAIN.vsm_free": { "type": "MAIN", "value": 974768, "flag": "g", "description": "Free VSM space" }, "MAIN.vsm_used": { "type": "MAIN", "value": 83959840, "flag": "g", "description": "Used VSM space" }, "MAIN.vsm_cooling": { "type": "MAIN", "value": 0, "flag": "g", "description": "Cooling VSM space" }, "MAIN.vsm_overflow": { "type": "MAIN", "value": 0, "flag": "g", "description": "Overflow VSM space" }, "MAIN.vsm_overflowed": { "type": "MAIN", "value": 0, "flag": "c", "description": "Overflowed VSM space" }, "MGT.uptime": { "type": "MGT", "value": 0, "flag": "c", "description": "Management process uptime" }, "MGT.child_start": { "type": "MGT", "value": 1, "flag": "c", "description": "Child process started" }, "MGT.child_exit": { "type": "MGT", "value": 0, "flag": "c", "description": "Child process normal exit" }, "MGT.child_stop": { "type": "MGT", "value": 0, "flag": "c", "description": "Child process unexpected exit" }, "MGT.child_died": { "type": "MGT", "value": 0, "flag": "c", "description": "Child process died (signal)" }, "MGT.child_dump": { "type": "MGT", "value": 0, "flag": "c", "description": "Child process core dumped" }, "MGT.child_panic": { "type": "MGT", "value": 0, "flag": "c", "description": "Child process panic" }, "MEMPOOL.vbc.live": { "type": "MEMPOOL", "ident": "vbc", "value": 0, "flag": "g", "description": "In use" }, "MEMPOOL.vbc.pool": { "type": "MEMPOOL", "ident": "vbc", "value": 10, "flag": "g", "description": "In Pool" }, "MEMPOOL.vbc.sz_wanted": { "type": "MEMPOOL", "ident": "vbc", "value": 88, "flag": "g", "description": "Size requested" }, "MEMPOOL.vbc.sz_needed": { "type": "MEMPOOL", "ident": "vbc", "value": 120, "flag": "g", "description": "Size allocated" }, "MEMPOOL.vbc.allocs": { "type": "MEMPOOL", "ident": "vbc", "value": 0, "flag": "c", "description": "Allocations" }, "MEMPOOL.vbc.frees": { "type": "MEMPOOL", "ident": "vbc", "value": 0, "flag": "c", "description": "Frees" }, "MEMPOOL.vbc.recycle": { "type": "MEMPOOL", "ident": "vbc", "value": 0, "flag": "c", "description": "Recycled from pool" }, "MEMPOOL.vbc.timeout": { "type": "MEMPOOL", "ident": "vbc", "value": 0, "flag": "c", "description": "Timed out from pool" }, "MEMPOOL.vbc.toosmall": { "type": "MEMPOOL", "ident": "vbc", "value": 0, "flag": "c", "description": "Too small to recycle" }, "MEMPOOL.vbc.surplus": { "type": "MEMPOOL", "ident": "vbc", "value": 0, "flag": "c", "description": "Too many for pool" }, "MEMPOOL.vbc.randry": { "type": "MEMPOOL", "ident": "vbc", "value": 0, "flag": "c", "description": "Pool ran dry" }, "MEMPOOL.busyobj.live": { "type": "MEMPOOL", "ident": "busyobj", "value": 0, "flag": "g", "description": "In use" }, "MEMPOOL.busyobj.pool": { "type": "MEMPOOL", "ident": "busyobj", "value": 10, "flag": "g", "description": "In Pool" }, "MEMPOOL.busyobj.sz_wanted": { "type": "MEMPOOL", "ident": "busyobj", "value": 65536, "flag": "g", "description": "Size requested" }, "MEMPOOL.busyobj.sz_needed": { "type": "MEMPOOL", "ident": "busyobj", "value": 65568, "flag": "g", "description": "Size allocated" }, "MEMPOOL.busyobj.allocs": { "type": "MEMPOOL", "ident": "busyobj", "value": 0, "flag": "c", "description": "Allocations" }, "MEMPOOL.busyobj.frees": { "type": "MEMPOOL", "ident": "busyobj", "value": 0, "flag": "c", "description": "Frees" }, "MEMPOOL.busyobj.recycle": { "type": "MEMPOOL", "ident": "busyobj", "value": 0, "flag": "c", "description": "Recycled from pool" }, "MEMPOOL.busyobj.timeout": { "type": "MEMPOOL", "ident": "busyobj", "value": 0, "flag": "c", "description": "Timed out from pool" }, "MEMPOOL.busyobj.toosmall": { "type": "MEMPOOL", "ident": "busyobj", "value": 0, "flag": "c", "description": "Too small to recycle" }, "MEMPOOL.busyobj.surplus": { "type": "MEMPOOL", "ident": "busyobj", "value": 0, "flag": "c", "description": "Too many for pool" }, "MEMPOOL.busyobj.randry": { "type": "MEMPOOL", "ident": "busyobj", "value": 0, "flag": "c", "description": "Pool ran dry" }, "MEMPOOL.req0.live": { "type": "MEMPOOL", "ident": "req0", "value": 0, "flag": "g", "description": "In use" }, "MEMPOOL.req0.pool": { "type": "MEMPOOL", "ident": "req0", "value": 10, "flag": "g", "description": "In Pool" }, "MEMPOOL.req0.sz_wanted": { "type": "MEMPOOL", "ident": "req0", "value": 65536, "flag": "g", "description": "Size requested" }, "MEMPOOL.req0.sz_needed": { "type": "MEMPOOL", "ident": "req0", "value": 65568, "flag": "g", "description": "Size allocated" }, "MEMPOOL.req0.allocs": { "type": "MEMPOOL", "ident": "req0", "value": 0, "flag": "c", "description": "Allocations" }, "MEMPOOL.req0.frees": { "type": "MEMPOOL", "ident": "req0", "value": 0, "flag": "c", "description": "Frees" }, "MEMPOOL.req0.recycle": { "type": "MEMPOOL", "ident": "req0", "value": 0, "flag": "c", "description": "Recycled from pool" }, "MEMPOOL.req0.timeout": { "type": "MEMPOOL", "ident": "req0", "value": 0, "flag": "c", "description": "Timed out from pool" }, "MEMPOOL.req0.toosmall": { "type": "MEMPOOL", "ident": "req0", "value": 0, "flag": "c", "description": "Too small to recycle" }, "MEMPOOL.req0.surplus": { "type": "MEMPOOL", "ident": "req0", "value": 0, "flag": "c", "description": "Too many for pool" }, "MEMPOOL.req0.randry": { "type": "MEMPOOL", "ident": "req0", "value": 0, "flag": "c", "description": "Pool ran dry" }, "MEMPOOL.sess0.live": { "type": "MEMPOOL", "ident": "sess0", "value": 0, "flag": "g", "description": "In use" }, "MEMPOOL.sess0.pool": { "type": "MEMPOOL", "ident": "sess0", "value": 10, "flag": "g", "description": "In Pool" }, "MEMPOOL.sess0.sz_wanted": { "type": "MEMPOOL", "ident": "sess0", "value": 384, "flag": "g", "description": "Size requested" }, "MEMPOOL.sess0.sz_needed": { "type": "MEMPOOL", "ident": "sess0", "value": 416, "flag": "g", "description": "Size allocated" }, "MEMPOOL.sess0.allocs": { "type": "MEMPOOL", "ident": "sess0", "value": 0, "flag": "c", "description": "Allocations" }, "MEMPOOL.sess0.frees": { "type": "MEMPOOL", "ident": "sess0", "value": 0, "flag": "c", "description": "Frees" }, "MEMPOOL.sess0.recycle": { "type": "MEMPOOL", "ident": "sess0", "value": 0, "flag": "c", "description": "Recycled from pool" }, "MEMPOOL.sess0.timeout": { "type": "MEMPOOL", "ident": "sess0", "value": 0, "flag": "c", "description": "Timed out from pool" }, "MEMPOOL.sess0.toosmall": { "type": "MEMPOOL", "ident": "sess0", "value": 0, "flag": "c", "description": "Too small to recycle" }, "MEMPOOL.sess0.surplus": { "type": "MEMPOOL", "ident": "sess0", "value": 0, "flag": "c", "description": "Too many for pool" }, "MEMPOOL.sess0.randry": { "type": "MEMPOOL", "ident": "sess0", "value": 0, "flag": "c", "description": "Pool ran dry" }, "MEMPOOL.req1.live": { "type": "MEMPOOL", "ident": "req1", "value": 0, "flag": "g", "description": "In use" }, "MEMPOOL.req1.pool": { "type": "MEMPOOL", "ident": "req1", "value": 10, "flag": "g", "description": "In Pool" }, "MEMPOOL.req1.sz_wanted": { "type": "MEMPOOL", "ident": "req1", "value": 65536, "flag": "g", "description": "Size requested" }, "MEMPOOL.req1.sz_needed": { "type": "MEMPOOL", "ident": "req1", "value": 65568, "flag": "g", "description": "Size allocated" }, "MEMPOOL.req1.allocs": { "type": "MEMPOOL", "ident": "req1", "value": 0, "flag": "c", "description": "Allocations" }, "MEMPOOL.req1.frees": { "type": "MEMPOOL", "ident": "req1", "value": 0, "flag": "c", "description": "Frees" }, "MEMPOOL.req1.recycle": { "type": "MEMPOOL", "ident": "req1", "value": 0, "flag": "c", "description": "Recycled from pool" }, "MEMPOOL.req1.timeout": { "type": "MEMPOOL", "ident": "req1", "value": 0, "flag": "c", "description": "Timed out from pool" }, "MEMPOOL.req1.toosmall": { "type": "MEMPOOL", "ident": "req1", "value": 0, "flag": "c", "description": "Too small to recycle" }, "MEMPOOL.req1.surplus": { "type": "MEMPOOL", "ident": "req1", "value": 0, "flag": "c", "description": "Too many for pool" }, "MEMPOOL.req1.randry": { "type": "MEMPOOL", "ident": "req1", "value": 0, "flag": "c", "description": "Pool ran dry" }, "MEMPOOL.sess1.live": { "type": "MEMPOOL", "ident": "sess1", "value": 0, "flag": "g", "description": "In use" }, "MEMPOOL.sess1.pool": { "type": "MEMPOOL", "ident": "sess1", "value": 10, "flag": "g", "description": "In Pool" }, "MEMPOOL.sess1.sz_wanted": { "type": "MEMPOOL", "ident": "sess1", "value": 384, "flag": "g", "description": "Size requested" }, "MEMPOOL.sess1.sz_needed": { "type": "MEMPOOL", "ident": "sess1", "value": 416, "flag": "g", "description": "Size allocated" }, "MEMPOOL.sess1.allocs": { "type": "MEMPOOL", "ident": "sess1", "value": 0, "flag": "c", "description": "Allocations" }, "MEMPOOL.sess1.frees": { "type": "MEMPOOL", "ident": "sess1", "value": 0, "flag": "c", "description": "Frees" }, "MEMPOOL.sess1.recycle": { "type": "MEMPOOL", "ident": "sess1", "value": 0, "flag": "c", "description": "Recycled from pool" }, "MEMPOOL.sess1.timeout": { "type": "MEMPOOL", "ident": "sess1", "value": 0, "flag": "c", "description": "Timed out from pool" }, "MEMPOOL.sess1.toosmall": { "type": "MEMPOOL", "ident": "sess1", "value": 0, "flag": "c", "description": "Too small to recycle" }, "MEMPOOL.sess1.surplus": { "type": "MEMPOOL", "ident": "sess1", "value": 0, "flag": "c", "description": "Too many for pool" }, "MEMPOOL.sess1.randry": { "type": "MEMPOOL", "ident": "sess1", "value": 0, "flag": "c", "description": "Pool ran dry" }, "SMA.s0.c_req": { "type": "SMA", "ident": "s0", "value": 0, "flag": "a", "description": "Allocator requests" }, "SMA.s0.c_fail": { "type": "SMA", "ident": "s0", "value": 0, "flag": "a", "description": "Allocator failures" }, "SMA.s0.c_bytes": { "type": "SMA", "ident": "s0", "value": 0, "flag": "a", "description": "Bytes allocated" }, "SMA.s0.c_freed": { "type": "SMA", "ident": "s0", "value": 0, "flag": "a", "description": "Bytes freed" }, "SMA.s0.g_alloc": { "type": "SMA", "ident": "s0", "value": 0, "flag": "i", "description": "Allocations outstanding" }, "SMA.s0.g_bytes": { "type": "SMA", "ident": "s0", "value": 0, "flag": "i", "description": "Bytes outstanding" }, "SMA.s0.g_space": { "type": "SMA", "ident": "s0", "value": 268435456, "flag": "i", "description": "Bytes available" }, "SMA.Transient.c_req": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "a", "description": "Allocator requests" }, "SMA.Transient.c_fail": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "a", "description": "Allocator failures" }, "SMA.Transient.c_bytes": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "a", "description": "Bytes allocated" }, "SMA.Transient.c_freed": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "a", "description": "Bytes freed" }, "SMA.Transient.g_alloc": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "i", "description": "Allocations outstanding" }, "SMA.Transient.g_bytes": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "i", "description": "Bytes outstanding" }, "SMA.Transient.g_space": { "type": "SMA", "ident": "Transient", "value": 0, "flag": "i", "description": "Bytes available" }, "VBE.default(127.0.0.1,,8080).vcls": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 1, "flag": "i", "description": "VCL references" }, "VBE.default(127.0.0.1,,8080).happy": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 0, "flag": "b", "description": "Happy health probes" }, "VBE.default(127.0.0.1,,8080).bereq_hdrbytes": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 0, "flag": "a", "description": "Request header bytes" }, "VBE.default(127.0.0.1,,8080).bereq_bodybytes": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 0, "flag": "a", "description": "Request body bytes" }, "VBE.default(127.0.0.1,,8080).beresp_hdrbytes": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 0, "flag": "a", "description": "Response header bytes" }, "VBE.default(127.0.0.1,,8080).beresp_bodybytes": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 0, "flag": "a", "description": "Response body bytes" }, "VBE.default(127.0.0.1,,8080).pipe_hdrbytes": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 0, "flag": "a", "description": "Pipe request header bytes" }, "VBE.default(127.0.0.1,,8080).pipe_out": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 0, "flag": "a", "description": "Piped bytes to backend" }, "VBE.default(127.0.0.1,,8080).pipe_in": { "type": "VBE", "ident": "default(127.0.0.1,,8080)", "value": 0, "flag": "a", "description": "Piped bytes from backend" }, "LCK.sms.creat": { "type": "LCK", "ident": "sms", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.sms.destroy": { "type": "LCK", "ident": "sms", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.sms.locks": { "type": "LCK", "ident": "sms", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.smp.creat": { "type": "LCK", "ident": "smp", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.smp.destroy": { "type": "LCK", "ident": "smp", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.smp.locks": { "type": "LCK", "ident": "smp", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.sma.creat": { "type": "LCK", "ident": "sma", "value": 2, "flag": "a", "description": "Created locks" }, "LCK.sma.destroy": { "type": "LCK", "ident": "sma", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.sma.locks": { "type": "LCK", "ident": "sma", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.smf.creat": { "type": "LCK", "ident": "smf", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.smf.destroy": { "type": "LCK", "ident": "smf", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.smf.locks": { "type": "LCK", "ident": "smf", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.hsl.creat": { "type": "LCK", "ident": "hsl", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.hsl.destroy": { "type": "LCK", "ident": "hsl", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.hsl.locks": { "type": "LCK", "ident": "hsl", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.hcb.creat": { "type": "LCK", "ident": "hcb", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.hcb.destroy": { "type": "LCK", "ident": "hcb", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.hcb.locks": { "type": "LCK", "ident": "hcb", "value": 1, "flag": "a", "description": "Lock Operations" }, "LCK.hcl.creat": { "type": "LCK", "ident": "hcl", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.hcl.destroy": { "type": "LCK", "ident": "hcl", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.hcl.locks": { "type": "LCK", "ident": "hcl", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.vcl.creat": { "type": "LCK", "ident": "vcl", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.vcl.destroy": { "type": "LCK", "ident": "vcl", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.vcl.locks": { "type": "LCK", "ident": "vcl", "value": 2, "flag": "a", "description": "Lock Operations" }, "LCK.sessmem.creat": { "type": "LCK", "ident": "sessmem", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.sessmem.destroy": { "type": "LCK", "ident": "sessmem", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.sessmem.locks": { "type": "LCK", "ident": "sessmem", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.sess.creat": { "type": "LCK", "ident": "sess", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.sess.destroy": { "type": "LCK", "ident": "sess", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.sess.locks": { "type": "LCK", "ident": "sess", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.wstat.creat": { "type": "LCK", "ident": "wstat", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.wstat.destroy": { "type": "LCK", "ident": "wstat", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.wstat.locks": { "type": "LCK", "ident": "wstat", "value": 2, "flag": "a", "description": "Lock Operations" }, "LCK.herder.creat": { "type": "LCK", "ident": "herder", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.herder.destroy": { "type": "LCK", "ident": "herder", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.herder.locks": { "type": "LCK", "ident": "herder", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.wq.creat": { "type": "LCK", "ident": "wq", "value": 3, "flag": "a", "description": "Created locks" }, "LCK.wq.destroy": { "type": "LCK", "ident": "wq", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.wq.locks": { "type": "LCK", "ident": "wq", "value": 404, "flag": "a", "description": "Lock Operations" }, "LCK.objhdr.creat": { "type": "LCK", "ident": "objhdr", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.objhdr.destroy": { "type": "LCK", "ident": "objhdr", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.objhdr.locks": { "type": "LCK", "ident": "objhdr", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.exp.creat": { "type": "LCK", "ident": "exp", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.exp.destroy": { "type": "LCK", "ident": "exp", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.exp.locks": { "type": "LCK", "ident": "exp", "value": 2, "flag": "a", "description": "Lock Operations" }, "LCK.lru.creat": { "type": "LCK", "ident": "lru", "value": 2, "flag": "a", "description": "Created locks" }, "LCK.lru.destroy": { "type": "LCK", "ident": "lru", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.lru.locks": { "type": "LCK", "ident": "lru", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.cli.creat": { "type": "LCK", "ident": "cli", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.cli.destroy": { "type": "LCK", "ident": "cli", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.cli.locks": { "type": "LCK", "ident": "cli", "value": 14, "flag": "a", "description": "Lock Operations" }, "LCK.ban.creat": { "type": "LCK", "ident": "ban", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.ban.destroy": { "type": "LCK", "ident": "ban", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.ban.locks": { "type": "LCK", "ident": "ban", "value": 7, "flag": "a", "description": "Lock Operations" }, "LCK.vbp.creat": { "type": "LCK", "ident": "vbp", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.vbp.destroy": { "type": "LCK", "ident": "vbp", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.vbp.locks": { "type": "LCK", "ident": "vbp", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.backend.creat": { "type": "LCK", "ident": "backend", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.backend.destroy": { "type": "LCK", "ident": "backend", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.backend.locks": { "type": "LCK", "ident": "backend", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.vcapace.creat": { "type": "LCK", "ident": "vcapace", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.vcapace.destroy": { "type": "LCK", "ident": "vcapace", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.vcapace.locks": { "type": "LCK", "ident": "vcapace", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.nbusyobj.creat": { "type": "LCK", "ident": "nbusyobj", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.nbusyobj.destroy": { "type": "LCK", "ident": "nbusyobj", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.nbusyobj.locks": { "type": "LCK", "ident": "nbusyobj", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.busyobj.creat": { "type": "LCK", "ident": "busyobj", "value": 0, "flag": "a", "description": "Created locks" }, "LCK.busyobj.destroy": { "type": "LCK", "ident": "busyobj", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.busyobj.locks": { "type": "LCK", "ident": "busyobj", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.mempool.creat": { "type": "LCK", "ident": "mempool", "value": 6, "flag": "a", "description": "Created locks" }, "LCK.mempool.destroy": { "type": "LCK", "ident": "mempool", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.mempool.locks": { "type": "LCK", "ident": "mempool", "value": 60, "flag": "a", "description": "Lock Operations" }, "LCK.vxid.creat": { "type": "LCK", "ident": "vxid", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.vxid.destroy": { "type": "LCK", "ident": "vxid", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.vxid.locks": { "type": "LCK", "ident": "vxid", "value": 0, "flag": "a", "description": "Lock Operations" }, "LCK.pipestat.creat": { "type": "LCK", "ident": "pipestat", "value": 1, "flag": "a", "description": "Created locks" }, "LCK.pipestat.destroy": { "type": "LCK", "ident": "pipestat", "value": 0, "flag": "a", "description": "Destroyed locks" }, "LCK.pipestat.locks": { "type": "LCK", "ident": "pipestat", "value": 0, "flag": "a", "description": "Lock Operations" } }prometheus_varnish_exporter-1.6.1/test/scrape/4.1.1.json000066400000000000000000001154721415415765100232070ustar00rootroot00000000000000{ "timestamp": "2017-10-07T16:11:13", "MAIN.uptime": { "description": "Child process uptime", "type": "MAIN", "flag": "c", "format": "d", "value": 12540 }, "MAIN.sess_conn": { "description": "Sessions accepted", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_drop": { "description": "Sessions dropped", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail": { "description": "Session accept failures", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req_400": { "description": "Client requests received, subject to 400 errors", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req_417": { "description": "Client requests received, subject to 417 errors", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req": { "description": "Good client requests received", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hit": { "description": "Cache hits", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hitpass": { "description": "Cache hits for pass", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_miss": { "description": "Cache misses", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_conn": { "description": "Backend conn. success", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_unhealthy": { "description": "Backend conn. not attempted", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_busy": { "description": "Backend conn. too many", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_fail": { "description": "Backend conn. failures", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_reuse": { "description": "Backend conn. reuses", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_recycle": { "description": "Backend conn. recycles", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_retry": { "description": "Backend conn. retry", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_head": { "description": "Fetch no body (HEAD)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_length": { "description": "Fetch with Length", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_chunked": { "description": "Fetch chunked", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_eof": { "description": "Fetch EOF", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_bad": { "description": "Fetch bad T-E", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_none": { "description": "Fetch no body", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_1xx": { "description": "Fetch no body (1xx)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_204": { "description": "Fetch no body (204)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_304": { "description": "Fetch no body (304)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_failed": { "description": "Fetch failed (all causes)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_no_thread": { "description": "Fetch failed (no thread)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.pools": { "description": "Number of thread pools", "type": "MAIN", "flag": "g", "format": "i", "value": 2 }, "MAIN.threads": { "description": "Total number of threads", "type": "MAIN", "flag": "g", "format": "i", "value": 200 }, "MAIN.threads_limited": { "description": "Threads hit max", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.threads_created": { "description": "Threads created", "type": "MAIN", "flag": "c", "format": "i", "value": 200 }, "MAIN.threads_destroyed": { "description": "Threads destroyed", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.threads_failed": { "description": "Thread creation failed", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.thread_queue_len": { "description": "Length of session queue", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.busy_sleep": { "description": "Number of requests sent to sleep on busy objhdr", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.busy_wakeup": { "description": "Number of requests woken after sleep on busy objhdr", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.busy_killed": { "description": "Number of requests killed after sleep on busy objhdr", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_queued": { "description": "Sessions queued for thread", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_dropped": { "description": "Sessions dropped for thread", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_object": { "description": "object structs made", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_vampireobject": { "description": "unresurrected objects", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_objectcore": { "description": "objectcore structs made", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_objecthead": { "description": "objecthead structs made", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_waitinglist": { "description": "waitinglist structs made", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_backend": { "description": "Number of backends", "type": "MAIN", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_expired": { "description": "Number of expired objects", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_lru_nuked": { "description": "Number of LRU nuked objects", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_lru_moved": { "description": "Number of LRU moved objects", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.losthdr": { "description": "HTTP header overflows", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_sess": { "description": "Total sessions seen", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_req": { "description": "Total requests seen", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_pipe": { "description": "Total pipe sessions seen", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_pass": { "description": "Total pass-ed requests seen", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_fetch": { "description": "Total backend fetches initiated", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_synth": { "description": "Total synthethic responses made", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_req_hdrbytes": { "description": "Request header bytes", "type": "MAIN", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_req_bodybytes": { "description": "Request body bytes", "type": "MAIN", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_resp_hdrbytes": { "description": "Response header bytes", "type": "MAIN", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_resp_bodybytes": { "description": "Response body bytes", "type": "MAIN", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_hdrbytes": { "description": "Pipe request header bytes", "type": "MAIN", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_in": { "description": "Piped bytes from client", "type": "MAIN", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_out": { "description": "Piped bytes to client", "type": "MAIN", "flag": "c", "format": "B", "value": 0 }, "MAIN.sess_closed": { "description": "Session Closed", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_closed_err": { "description": "Session Closed with error", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_readahead": { "description": "Session Read Ahead", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_herd": { "description": "Session herd", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rem_close": { "description": "Session OK REM_CLOSE", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_close": { "description": "Session OK REQ_CLOSE", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_http10": { "description": "Session Err REQ_HTTP10", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_bad": { "description": "Session Err RX_BAD", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_body": { "description": "Session Err RX_BODY", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_junk": { "description": "Session Err RX_JUNK", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_overflow": { "description": "Session Err RX_OVERFLOW", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_timeout": { "description": "Session Err RX_TIMEOUT", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_pipe": { "description": "Session OK TX_PIPE", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_error": { "description": "Session Err TX_ERROR", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_eof": { "description": "Session OK TX_EOF", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_resp_close": { "description": "Session OK RESP_CLOSE", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_overload": { "description": "Session Err OVERLOAD", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_pipe_overflow": { "description": "Session Err PIPE_OVERFLOW", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_range_short": { "description": "Session Err RANGE_SHORT", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_records": { "description": "SHM records", "type": "MAIN", "flag": "c", "format": "i", "value": 8364 }, "MAIN.shm_writes": { "description": "SHM writes", "type": "MAIN", "flag": "c", "format": "i", "value": 8364 }, "MAIN.shm_flushes": { "description": "SHM flushes due to overflow", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_cont": { "description": "SHM MTX contention", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_cycles": { "description": "SHM cycles through buffer", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_req": { "description": "Backend requests made", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_vcl": { "description": "Number of loaded VCLs in total", "type": "MAIN", "flag": "c", "format": "i", "value": 1 }, "MAIN.n_vcl_avail": { "description": "Number of VCLs available", "type": "MAIN", "flag": "c", "format": "i", "value": 1 }, "MAIN.n_vcl_discard": { "description": "Number of discarded VCLs", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans": { "description": "Count of bans", "type": "MAIN", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_completed": { "description": "Number of bans marked 'completed'", "type": "MAIN", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_obj": { "description": "Number of bans using obj.*", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.bans_req": { "description": "Number of bans using req.*", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.bans_added": { "description": "Bans added", "type": "MAIN", "flag": "c", "format": "i", "value": 1 }, "MAIN.bans_deleted": { "description": "Bans deleted", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_tested": { "description": "Bans tested against objects (lookup)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_obj_killed": { "description": "Objects killed by bans (lookup)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_tested": { "description": "Bans tested against objects (lurker)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_tests_tested": { "description": "Ban tests tested against objects (lookup)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_tests_tested": { "description": "Ban tests tested against objects (lurker)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_obj_killed": { "description": "Objects killed by bans (lurker)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_dups": { "description": "Bans superseded by other bans", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_contention": { "description": "Lurker gave way for lookup", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_persisted_bytes": { "description": "Bytes used by the persisted ban lists", "type": "MAIN", "flag": "g", "format": "B", "value": 16 }, "MAIN.bans_persisted_fragmentation": { "description": "Extra bytes in persisted ban lists due to fragmentation", "type": "MAIN", "flag": "g", "format": "B", "value": 0 }, "MAIN.n_purges": { "description": "Number of purge operations executed", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_obj_purged": { "description": "Number of purged objects", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.exp_mailed": { "description": "Number of objects mailed to expiry thread", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.exp_received": { "description": "Number of objects received by expiry thread", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_nolock": { "description": "HCB Lookups without lock", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_lock": { "description": "HCB Lookups with lock", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_insert": { "description": "HCB Inserts", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.esi_errors": { "description": "ESI parse errors (unlock)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.esi_warnings": { "description": "ESI parse warnings (unlock)", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.vmods": { "description": "Loaded VMODs", "type": "MAIN", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_gzip": { "description": "Gzip operations", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_gunzip": { "description": "Gunzip operations", "type": "MAIN", "flag": "c", "format": "i", "value": 0 }, "MAIN.vsm_free": { "description": "Free VSM space", "type": "MAIN", "flag": "g", "format": "B", "value": 973760 }, "MAIN.vsm_used": { "description": "Used VSM space", "type": "MAIN", "flag": "g", "format": "B", "value": 83960848 }, "MAIN.vsm_cooling": { "description": "Cooling VSM space", "type": "MAIN", "flag": "g", "format": "B", "value": 0 }, "MAIN.vsm_overflow": { "description": "Overflow VSM space", "type": "MAIN", "flag": "g", "format": "B", "value": 0 }, "MAIN.vsm_overflowed": { "description": "Overflowed VSM space", "type": "MAIN", "flag": "c", "format": "B", "value": 0 }, "MGT.uptime": { "description": "Management process uptime", "type": "MGT", "flag": "c", "format": "d", "value": 12539 }, "MGT.child_start": { "description": "Child process started", "type": "MGT", "flag": "c", "format": "i", "value": 1 }, "MGT.child_exit": { "description": "Child process normal exit", "type": "MGT", "flag": "c", "format": "i", "value": 0 }, "MGT.child_stop": { "description": "Child process unexpected exit", "type": "MGT", "flag": "c", "format": "i", "value": 0 }, "MGT.child_died": { "description": "Child process died (signal)", "type": "MGT", "flag": "c", "format": "i", "value": 0 }, "MGT.child_dump": { "description": "Child process core dumped", "type": "MGT", "flag": "c", "format": "i", "value": 0 }, "MGT.child_panic": { "description": "Child process panic", "type": "MGT", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.live": { "description": "In use", "type": "MEMPOOL", "ident": "busyobj", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.busyobj.pool": { "description": "In Pool", "type": "MEMPOOL", "ident": "busyobj", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.busyobj.sz_wanted": { "description": "Size requested", "type": "MEMPOOL", "ident": "busyobj", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.busyobj.sz_actual": { "description": "Size allocated", "type": "MEMPOOL", "ident": "busyobj", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.busyobj.allocs": { "description": "Allocations", "type": "MEMPOOL", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.frees": { "description": "Frees", "type": "MEMPOOL", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.recycle": { "description": "Recycled from pool", "type": "MEMPOOL", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.timeout": { "description": "Timed out from pool", "type": "MEMPOOL", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.toosmall": { "description": "Too small to recycle", "type": "MEMPOOL", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.surplus": { "description": "Too many for pool", "type": "MEMPOOL", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.randry": { "description": "Pool ran dry", "type": "MEMPOOL", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.live": { "description": "In use", "type": "MEMPOOL", "ident": "req0", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.req0.pool": { "description": "In Pool", "type": "MEMPOOL", "ident": "req0", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.req0.sz_wanted": { "description": "Size requested", "type": "MEMPOOL", "ident": "req0", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.req0.sz_actual": { "description": "Size allocated", "type": "MEMPOOL", "ident": "req0", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.req0.allocs": { "description": "Allocations", "type": "MEMPOOL", "ident": "req0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.frees": { "description": "Frees", "type": "MEMPOOL", "ident": "req0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.recycle": { "description": "Recycled from pool", "type": "MEMPOOL", "ident": "req0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.timeout": { "description": "Timed out from pool", "type": "MEMPOOL", "ident": "req0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.toosmall": { "description": "Too small to recycle", "type": "MEMPOOL", "ident": "req0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.surplus": { "description": "Too many for pool", "type": "MEMPOOL", "ident": "req0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.randry": { "description": "Pool ran dry", "type": "MEMPOOL", "ident": "req0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.live": { "description": "In use", "type": "MEMPOOL", "ident": "sess0", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.sess0.pool": { "description": "In Pool", "type": "MEMPOOL", "ident": "sess0", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.sess0.sz_wanted": { "description": "Size requested", "type": "MEMPOOL", "ident": "sess0", "flag": "g", "format": "B", "value": 512 }, "MEMPOOL.sess0.sz_actual": { "description": "Size allocated", "type": "MEMPOOL", "ident": "sess0", "flag": "g", "format": "B", "value": 480 }, "MEMPOOL.sess0.allocs": { "description": "Allocations", "type": "MEMPOOL", "ident": "sess0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.frees": { "description": "Frees", "type": "MEMPOOL", "ident": "sess0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.recycle": { "description": "Recycled from pool", "type": "MEMPOOL", "ident": "sess0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.timeout": { "description": "Timed out from pool", "type": "MEMPOOL", "ident": "sess0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.toosmall": { "description": "Too small to recycle", "type": "MEMPOOL", "ident": "sess0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.surplus": { "description": "Too many for pool", "type": "MEMPOOL", "ident": "sess0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.randry": { "description": "Pool ran dry", "type": "MEMPOOL", "ident": "sess0", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.live": { "description": "In use", "type": "MEMPOOL", "ident": "req1", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.req1.pool": { "description": "In Pool", "type": "MEMPOOL", "ident": "req1", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.req1.sz_wanted": { "description": "Size requested", "type": "MEMPOOL", "ident": "req1", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.req1.sz_actual": { "description": "Size allocated", "type": "MEMPOOL", "ident": "req1", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.req1.allocs": { "description": "Allocations", "type": "MEMPOOL", "ident": "req1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.frees": { "description": "Frees", "type": "MEMPOOL", "ident": "req1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.recycle": { "description": "Recycled from pool", "type": "MEMPOOL", "ident": "req1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.timeout": { "description": "Timed out from pool", "type": "MEMPOOL", "ident": "req1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.toosmall": { "description": "Too small to recycle", "type": "MEMPOOL", "ident": "req1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.surplus": { "description": "Too many for pool", "type": "MEMPOOL", "ident": "req1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.randry": { "description": "Pool ran dry", "type": "MEMPOOL", "ident": "req1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.live": { "description": "In use", "type": "MEMPOOL", "ident": "sess1", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.sess1.pool": { "description": "In Pool", "type": "MEMPOOL", "ident": "sess1", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.sess1.sz_wanted": { "description": "Size requested", "type": "MEMPOOL", "ident": "sess1", "flag": "g", "format": "B", "value": 512 }, "MEMPOOL.sess1.sz_actual": { "description": "Size allocated", "type": "MEMPOOL", "ident": "sess1", "flag": "g", "format": "B", "value": 480 }, "MEMPOOL.sess1.allocs": { "description": "Allocations", "type": "MEMPOOL", "ident": "sess1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.frees": { "description": "Frees", "type": "MEMPOOL", "ident": "sess1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.recycle": { "description": "Recycled from pool", "type": "MEMPOOL", "ident": "sess1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.timeout": { "description": "Timed out from pool", "type": "MEMPOOL", "ident": "sess1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.toosmall": { "description": "Too small to recycle", "type": "MEMPOOL", "ident": "sess1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.surplus": { "description": "Too many for pool", "type": "MEMPOOL", "ident": "sess1", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.randry": { "description": "Pool ran dry", "type": "MEMPOOL", "ident": "sess1", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_req": { "description": "Allocator requests", "type": "SMA", "ident": "s0", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_fail": { "description": "Allocator failures", "type": "SMA", "ident": "s0", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_bytes": { "description": "Bytes allocated", "type": "SMA", "ident": "s0", "flag": "c", "format": "B", "value": 0 }, "SMA.s0.c_freed": { "description": "Bytes freed", "type": "SMA", "ident": "s0", "flag": "c", "format": "B", "value": 0 }, "SMA.s0.g_alloc": { "description": "Allocations outstanding", "type": "SMA", "ident": "s0", "flag": "g", "format": "i", "value": 0 }, "SMA.s0.g_bytes": { "description": "Bytes outstanding", "type": "SMA", "ident": "s0", "flag": "g", "format": "B", "value": 0 }, "SMA.s0.g_space": { "description": "Bytes available", "type": "SMA", "ident": "s0", "flag": "g", "format": "B", "value": 268435456 }, "SMA.Transient.c_req": { "description": "Allocator requests", "type": "SMA", "ident": "Transient", "flag": "c", "format": "i", "value": 0 }, "SMA.Transient.c_fail": { "description": "Allocator failures", "type": "SMA", "ident": "Transient", "flag": "c", "format": "i", "value": 0 }, "SMA.Transient.c_bytes": { "description": "Bytes allocated", "type": "SMA", "ident": "Transient", "flag": "c", "format": "B", "value": 0 }, "SMA.Transient.c_freed": { "description": "Bytes freed", "type": "SMA", "ident": "Transient", "flag": "c", "format": "B", "value": 0 }, "SMA.Transient.g_alloc": { "description": "Allocations outstanding", "type": "SMA", "ident": "Transient", "flag": "g", "format": "i", "value": 0 }, "SMA.Transient.g_bytes": { "description": "Bytes outstanding", "type": "SMA", "ident": "Transient", "flag": "g", "format": "B", "value": 0 }, "SMA.Transient.g_space": { "description": "Bytes available", "type": "SMA", "ident": "Transient", "flag": "g", "format": "B", "value": 0 }, "VBE.boot.default.happy": { "description": "Happy health probes", "type": "VBE", "ident": "boot.default", "flag": "b", "format": "b", "value": 0 }, "VBE.boot.default.bereq_hdrbytes": { "description": "Request header bytes", "type": "VBE", "ident": "boot.default", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.bereq_bodybytes": { "description": "Request body bytes", "type": "VBE", "ident": "boot.default", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.beresp_hdrbytes": { "description": "Response header bytes", "type": "VBE", "ident": "boot.default", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.beresp_bodybytes": { "description": "Response body bytes", "type": "VBE", "ident": "boot.default", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.pipe_hdrbytes": { "description": "Pipe request header bytes", "type": "VBE", "ident": "boot.default", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.pipe_out": { "description": "Piped bytes to backend", "type": "VBE", "ident": "boot.default", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.pipe_in": { "description": "Piped bytes from backend", "type": "VBE", "ident": "boot.default", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.conn": { "description": "Concurrent connections to backend", "type": "VBE", "ident": "boot.default", "flag": "g", "format": "i", "value": 0 }, "VBE.boot.default.req": { "description": "Backend requests sent", "type": "VBE", "ident": "boot.default", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.creat": { "description": "Created locks", "type": "LCK", "ident": "backend", "flag": "c", "format": "i", "value": 2 }, "LCK.backend.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "backend", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.locks": { "description": "Lock Operations", "type": "LCK", "ident": "backend", "flag": "c", "format": "i", "value": 1 }, "LCK.backend_tcp.creat": { "description": "Created locks", "type": "LCK", "ident": "backend_tcp", "flag": "c", "format": "i", "value": 1 }, "LCK.backend_tcp.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "backend_tcp", "flag": "c", "format": "i", "value": 0 }, "LCK.backend_tcp.locks": { "description": "Lock Operations", "type": "LCK", "ident": "backend_tcp", "flag": "c", "format": "i", "value": 0 }, "LCK.ban.creat": { "description": "Created locks", "type": "LCK", "ident": "ban", "flag": "c", "format": "i", "value": 1 }, "LCK.ban.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "ban", "flag": "c", "format": "i", "value": 0 }, "LCK.ban.locks": { "description": "Lock Operations", "type": "LCK", "ident": "ban", "flag": "c", "format": "i", "value": 1020 }, "LCK.busyobj.creat": { "description": "Created locks", "type": "LCK", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "LCK.busyobj.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "LCK.busyobj.locks": { "description": "Lock Operations", "type": "LCK", "ident": "busyobj", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.creat": { "description": "Created locks", "type": "LCK", "ident": "cli", "flag": "c", "format": "i", "value": 1 }, "LCK.cli.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "cli", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.locks": { "description": "Lock Operations", "type": "LCK", "ident": "cli", "flag": "c", "format": "i", "value": 4193 }, "LCK.exp.creat": { "description": "Created locks", "type": "LCK", "ident": "exp", "flag": "c", "format": "i", "value": 1 }, "LCK.exp.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "exp", "flag": "c", "format": "i", "value": 0 }, "LCK.exp.locks": { "description": "Lock Operations", "type": "LCK", "ident": "exp", "flag": "c", "format": "i", "value": 3993 }, "LCK.hcb.creat": { "description": "Created locks", "type": "LCK", "ident": "hcb", "flag": "c", "format": "i", "value": 1 }, "LCK.hcb.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "hcb", "flag": "c", "format": "i", "value": 0 }, "LCK.hcb.locks": { "description": "Lock Operations", "type": "LCK", "ident": "hcb", "flag": "c", "format": "i", "value": 70 }, "LCK.lru.creat": { "description": "Created locks", "type": "LCK", "ident": "lru", "flag": "c", "format": "i", "value": 2 }, "LCK.lru.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "lru", "flag": "c", "format": "i", "value": 0 }, "LCK.lru.locks": { "description": "Lock Operations", "type": "LCK", "ident": "lru", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.creat": { "description": "Created locks", "type": "LCK", "ident": "mempool", "flag": "c", "format": "i", "value": 5 }, "LCK.mempool.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "mempool", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.locks": { "description": "Lock Operations", "type": "LCK", "ident": "mempool", "flag": "c", "format": "i", "value": 53891 }, "LCK.objhdr.creat": { "description": "Created locks", "type": "LCK", "ident": "objhdr", "flag": "c", "format": "i", "value": 1 }, "LCK.objhdr.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "objhdr", "flag": "c", "format": "i", "value": 0 }, "LCK.objhdr.locks": { "description": "Lock Operations", "type": "LCK", "ident": "objhdr", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.creat": { "description": "Created locks", "type": "LCK", "ident": "pipestat", "flag": "c", "format": "i", "value": 1 }, "LCK.pipestat.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "pipestat", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.locks": { "description": "Lock Operations", "type": "LCK", "ident": "pipestat", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.creat": { "description": "Created locks", "type": "LCK", "ident": "sess", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "sess", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.locks": { "description": "Lock Operations", "type": "LCK", "ident": "sess", "flag": "c", "format": "i", "value": 0 }, "LCK.smp.creat": { "description": "Created locks", "type": "LCK", "ident": "smp", "flag": "c", "format": "i", "value": 0 }, "LCK.smp.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "smp", "flag": "c", "format": "i", "value": 0 }, "LCK.smp.locks": { "description": "Lock Operations", "type": "LCK", "ident": "smp", "flag": "c", "format": "i", "value": 0 }, "LCK.vbe.creat": { "description": "Created locks", "type": "LCK", "ident": "vbe", "flag": "c", "format": "i", "value": 1 }, "LCK.vbe.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "vbe", "flag": "c", "format": "i", "value": 0 }, "LCK.vbe.locks": { "description": "Lock Operations", "type": "LCK", "ident": "vbe", "flag": "c", "format": "i", "value": 4183 }, "LCK.vcapace.creat": { "description": "Created locks", "type": "LCK", "ident": "vcapace", "flag": "c", "format": "i", "value": 1 }, "LCK.vcapace.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "vcapace", "flag": "c", "format": "i", "value": 0 }, "LCK.vcapace.locks": { "description": "Lock Operations", "type": "LCK", "ident": "vcapace", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.creat": { "description": "Created locks", "type": "LCK", "ident": "vcl", "flag": "c", "format": "i", "value": 1 }, "LCK.vcl.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "vcl", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.locks": { "description": "Lock Operations", "type": "LCK", "ident": "vcl", "flag": "c", "format": "i", "value": 3 }, "LCK.vxid.creat": { "description": "Created locks", "type": "LCK", "ident": "vxid", "flag": "c", "format": "i", "value": 1 }, "LCK.vxid.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "vxid", "flag": "c", "format": "i", "value": 0 }, "LCK.vxid.locks": { "description": "Lock Operations", "type": "LCK", "ident": "vxid", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.creat": { "description": "Created locks", "type": "LCK", "ident": "waiter", "flag": "c", "format": "i", "value": 2 }, "LCK.waiter.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "waiter", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.locks": { "description": "Lock Operations", "type": "LCK", "ident": "waiter", "flag": "c", "format": "i", "value": 252 }, "LCK.wq.creat": { "description": "Created locks", "type": "LCK", "ident": "wq", "flag": "c", "format": "i", "value": 3 }, "LCK.wq.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "wq", "flag": "c", "format": "i", "value": 0 }, "LCK.wq.locks": { "description": "Lock Operations", "type": "LCK", "ident": "wq", "flag": "c", "format": "i", "value": 17963 }, "LCK.wstat.creat": { "description": "Created locks", "type": "LCK", "ident": "wstat", "flag": "c", "format": "i", "value": 1 }, "LCK.wstat.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "wstat", "flag": "c", "format": "i", "value": 0 }, "LCK.wstat.locks": { "description": "Lock Operations", "type": "LCK", "ident": "wstat", "flag": "c", "format": "i", "value": 4062 }, "LCK.sma.creat": { "description": "Created locks", "type": "LCK", "ident": "sma", "flag": "c", "format": "i", "value": 2 }, "LCK.sma.destroy": { "description": "Destroyed locks", "type": "LCK", "ident": "sma", "flag": "c", "format": "i", "value": 0 }, "LCK.sma.locks": { "description": "Lock Operations", "type": "LCK", "ident": "sma", "flag": "c", "format": "i", "value": 0 } } prometheus_varnish_exporter-1.6.1/test/scrape/5.2.0.json000066400000000000000000000773401415415765100232110ustar00rootroot00000000000000{ "timestamp": "2017-10-07T16:18:42", "MGT.uptime": { "description": "Management process uptime", "flag": "c", "format": "d", "value": 55 }, "MGT.child_start": { "description": "Child process started", "flag": "c", "format": "i", "value": 1 }, "MGT.child_exit": { "description": "Child process normal exit", "flag": "c", "format": "i", "value": 0 }, "MGT.child_stop": { "description": "Child process unexpected exit", "flag": "c", "format": "i", "value": 0 }, "MGT.child_died": { "description": "Child process died (signal)", "flag": "c", "format": "i", "value": 0 }, "MGT.child_dump": { "description": "Child process core dumped", "flag": "c", "format": "i", "value": 0 }, "MGT.child_panic": { "description": "Child process panic", "flag": "c", "format": "i", "value": 0 }, "MAIN.summs": { "description": "stat summ operations", "flag": "c", "format": "i", "value": 0 }, "MAIN.uptime": { "description": "Child process uptime", "flag": "c", "format": "d", "value": 56 }, "MAIN.sess_conn": { "description": "Sessions accepted", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_drop": { "description": "Sessions dropped", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail": { "description": "Session accept failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req_400": { "description": "Client requests received, subject to 400 errors", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req_417": { "description": "Client requests received, subject to 417 errors", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req": { "description": "Good client requests received", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hit": { "description": "Cache hits", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hitpass": { "description": "Cache hits for pass.", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hitmiss": { "description": "Cache hits for miss.", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_miss": { "description": "Cache misses", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_conn": { "description": "Backend conn. success", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_unhealthy": { "description": "Backend conn. not attempted", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_busy": { "description": "Backend conn. too many", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_fail": { "description": "Backend conn. failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_reuse": { "description": "Backend conn. reuses", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_recycle": { "description": "Backend conn. recycles", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_retry": { "description": "Backend conn. retry", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_head": { "description": "Fetch no body (HEAD)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_length": { "description": "Fetch with Length", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_chunked": { "description": "Fetch chunked", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_eof": { "description": "Fetch EOF", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_bad": { "description": "Fetch bad T-E", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_none": { "description": "Fetch no body", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_1xx": { "description": "Fetch no body (1xx)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_204": { "description": "Fetch no body (204)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_304": { "description": "Fetch no body (304)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_failed": { "description": "Fetch failed (all causes)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_no_thread": { "description": "Fetch failed (no thread)", "flag": "c", "format": "i", "value": 0 }, "MAIN.pools": { "description": "Number of thread pools", "flag": "g", "format": "i", "value": 2 }, "MAIN.threads": { "description": "Total number of threads", "flag": "g", "format": "i", "value": 200 }, "MAIN.threads_limited": { "description": "Threads hit max", "flag": "c", "format": "i", "value": 0 }, "MAIN.threads_created": { "description": "Threads created", "flag": "c", "format": "i", "value": 200 }, "MAIN.threads_destroyed": { "description": "Threads destroyed", "flag": "c", "format": "i", "value": 0 }, "MAIN.threads_failed": { "description": "Thread creation failed", "flag": "c", "format": "i", "value": 0 }, "MAIN.thread_queue_len": { "description": "Length of session queue", "flag": "g", "format": "i", "value": 0 }, "MAIN.busy_sleep": { "description": "Number of requests sent to sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.busy_wakeup": { "description": "Number of requests woken after sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.busy_killed": { "description": "Number of requests killed after sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_queued": { "description": "Sessions queued for thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_dropped": { "description": "Sessions dropped for thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.req_dropped": { "description": "Requests dropped", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_object": { "description": "object structs made", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_vampireobject": { "description": "unresurrected objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_objectcore": { "description": "objectcore structs made", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_objecthead": { "description": "objecthead structs made", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_backend": { "description": "Number of backends", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_expired": { "description": "Number of expired objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_lru_nuked": { "description": "Number of LRU nuked objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_lru_moved": { "description": "Number of LRU moved objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.losthdr": { "description": "HTTP header overflows", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_sess": { "description": "Total sessions seen", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_pipe": { "description": "Total pipe sessions seen", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_pass": { "description": "Total pass-ed requests seen", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_fetch": { "description": "Total backend fetches initiated", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_synth": { "description": "Total synthethic responses made", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_req_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_req_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_resp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_resp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_in": { "description": "Piped bytes from client", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_out": { "description": "Piped bytes to client", "flag": "c", "format": "B", "value": 0 }, "MAIN.sess_closed": { "description": "Session Closed", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_closed_err": { "description": "Session Closed with error", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_readahead": { "description": "Session Read Ahead", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_herd": { "description": "Session herd", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rem_close": { "description": "Session OK REM_CLOSE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_close": { "description": "Session OK REQ_CLOSE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_http10": { "description": "Session Err REQ_HTTP10", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_bad": { "description": "Session Err RX_BAD", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_body": { "description": "Session Err RX_BODY", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_junk": { "description": "Session Err RX_JUNK", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_overflow": { "description": "Session Err RX_OVERFLOW", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_timeout": { "description": "Session Err RX_TIMEOUT", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_pipe": { "description": "Session OK TX_PIPE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_error": { "description": "Session Err TX_ERROR", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_eof": { "description": "Session OK TX_EOF", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_resp_close": { "description": "Session OK RESP_CLOSE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_overload": { "description": "Session Err OVERLOAD", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_pipe_overflow": { "description": "Session Err PIPE_OVERFLOW", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_range_short": { "description": "Session Err RANGE_SHORT", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_http20": { "description": "Session Err REQ_HTTP20", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_vcl_failure": { "description": "Session Err VCL_FAILURE", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_records": { "description": "SHM records", "flag": "c", "format": "i", "value": 42 }, "MAIN.shm_writes": { "description": "SHM writes", "flag": "c", "format": "i", "value": 42 }, "MAIN.shm_flushes": { "description": "SHM flushes due to overflow", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_cont": { "description": "SHM MTX contention", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_cycles": { "description": "SHM cycles through buffer", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_req": { "description": "Backend requests made", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_vcl": { "description": "Number of loaded VCLs in total", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_vcl_avail": { "description": "Number of VCLs available", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_vcl_discard": { "description": "Number of discarded VCLs", "flag": "g", "format": "i", "value": 0 }, "MAIN.vcl_fail": { "description": "VCL failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans": { "description": "Count of bans", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_completed": { "description": "Number of bans marked 'completed'", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_obj": { "description": "Number of bans using obj.*", "flag": "g", "format": "i", "value": 0 }, "MAIN.bans_req": { "description": "Number of bans using req.*", "flag": "g", "format": "i", "value": 0 }, "MAIN.bans_added": { "description": "Bans added", "flag": "c", "format": "i", "value": 1 }, "MAIN.bans_deleted": { "description": "Bans deleted", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_tested": { "description": "Bans tested against objects (lookup)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_obj_killed": { "description": "Objects killed by bans (lookup)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_tested": { "description": "Bans tested against objects (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_tests_tested": { "description": "Ban tests tested against objects (lookup)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_tests_tested": { "description": "Ban tests tested against objects (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_obj_killed": { "description": "Objects killed by bans (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_obj_killed_cutoff": { "description": "Objects killed by bans for cutoff (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_dups": { "description": "Bans superseded by other bans", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_contention": { "description": "Lurker gave way for lookup", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_persisted_bytes": { "description": "Bytes used by the persisted ban lists", "flag": "g", "format": "B", "value": 16 }, "MAIN.bans_persisted_fragmentation": { "description": "Extra bytes in persisted ban lists due to fragmentation", "flag": "g", "format": "B", "value": 0 }, "MAIN.n_purges": { "description": "Number of purge operations executed", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_obj_purged": { "description": "Number of purged objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.exp_mailed": { "description": "Number of objects mailed to expiry thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.exp_received": { "description": "Number of objects received by expiry thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_nolock": { "description": "HCB Lookups without lock", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_lock": { "description": "HCB Lookups with lock", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_insert": { "description": "HCB Inserts", "flag": "c", "format": "i", "value": 0 }, "MAIN.esi_errors": { "description": "ESI parse errors (unlock)", "flag": "c", "format": "i", "value": 0 }, "MAIN.esi_warnings": { "description": "ESI parse warnings (unlock)", "flag": "c", "format": "i", "value": 0 }, "MAIN.vmods": { "description": "Loaded VMODs", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_gzip": { "description": "Gzip operations", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_gunzip": { "description": "Gunzip operations", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_test_gunzip": { "description": "Test gunzip operations", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 3 }, "LCK.backend.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 3 }, "LCK.backend_tcp.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.backend_tcp.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.backend_tcp.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.ban.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.ban.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.ban.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 13 }, "LCK.busyobj.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 0 }, "LCK.busyobj.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.busyobj.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.cli.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 30 }, "LCK.exp.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.exp.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.exp.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 19 }, "LCK.hcb.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.hcb.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.hcb.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 1 }, "LCK.lru.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.lru.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.lru.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 5 }, "LCK.mempool.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 295 }, "LCK.objhdr.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.objhdr.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.objhdr.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.pipestat.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vbe.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vbe.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vbe.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 23 }, "LCK.vcapace.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vcapace.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vcapace.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vcl.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 3 }, "LCK.vxid.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vxid.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vxid.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.waiter.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 2 }, "LCK.wq.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 3 }, "LCK.wq.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.wq.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 464 }, "LCK.wstat.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.wstat.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.wstat.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 21 }, "MEMPOOL.busyobj.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.busyobj.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.busyobj.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.busyobj.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.busyobj.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.req0.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.req0.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.req0.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.req0.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.sess0.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.sess0.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 512 }, "MEMPOOL.sess0.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 480 }, "MEMPOOL.sess0.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "LCK.sma.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.sma.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.sma.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_req": { "description": "Allocator requests", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_fail": { "description": "Allocator failures", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_bytes": { "description": "Bytes allocated", "flag": "c", "format": "B", "value": 0 }, "SMA.s0.c_freed": { "description": "Bytes freed", "flag": "c", "format": "B", "value": 0 }, "SMA.s0.g_alloc": { "description": "Allocations outstanding", "flag": "g", "format": "i", "value": 0 }, "SMA.s0.g_bytes": { "description": "Bytes outstanding", "flag": "g", "format": "B", "value": 0 }, "SMA.s0.g_space": { "description": "Bytes available", "flag": "g", "format": "B", "value": 268435456 }, "SMA.Transient.c_req": { "description": "Allocator requests", "flag": "c", "format": "i", "value": 0 }, "SMA.Transient.c_fail": { "description": "Allocator failures", "flag": "c", "format": "i", "value": 0 }, "SMA.Transient.c_bytes": { "description": "Bytes allocated", "flag": "c", "format": "B", "value": 0 }, "SMA.Transient.c_freed": { "description": "Bytes freed", "flag": "c", "format": "B", "value": 0 }, "SMA.Transient.g_alloc": { "description": "Allocations outstanding", "flag": "g", "format": "i", "value": 0 }, "SMA.Transient.g_bytes": { "description": "Bytes outstanding", "flag": "g", "format": "B", "value": 0 }, "SMA.Transient.g_space": { "description": "Bytes available", "flag": "g", "format": "B", "value": 0 }, "MEMPOOL.req1.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.req1.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.req1.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.req1.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.req1.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.sess1.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.sess1.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 512 }, "MEMPOOL.sess1.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 480 }, "MEMPOOL.sess1.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.happy": { "description": "Happy health probes", "flag": "b", "format": "b", "value": 0 }, "VBE.boot.default.bereq_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.bereq_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.beresp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.beresp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.pipe_out": { "description": "Piped bytes to backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.pipe_in": { "description": "Piped bytes from backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.conn": { "description": "Concurrent connections to backend", "flag": "g", "format": "i", "value": 0 }, "VBE.boot.default.req": { "description": "Backend requests sent", "flag": "c", "format": "i", "value": 0 } } prometheus_varnish_exporter-1.6.1/test/scrape/6.0.0.json000066400000000000000000001074651415415765100232120ustar00rootroot00000000000000{ "timestamp": "2018-06-28T13:43:33", "MGT.uptime": { "description": "Management process uptime", "flag": "c", "format": "d", "value": 660 }, "MGT.child_start": { "description": "Child process started", "flag": "c", "format": "i", "value": 1 }, "MGT.child_exit": { "description": "Child process normal exit", "flag": "c", "format": "i", "value": 0 }, "MGT.child_stop": { "description": "Child process unexpected exit", "flag": "c", "format": "i", "value": 0 }, "MGT.child_died": { "description": "Child process died (signal)", "flag": "c", "format": "i", "value": 0 }, "MGT.child_dump": { "description": "Child process core dumped", "flag": "c", "format": "i", "value": 0 }, "MGT.child_panic": { "description": "Child process panic", "flag": "c", "format": "i", "value": 0 }, "MAIN.summs": { "description": "stat summ operations", "flag": "c", "format": "i", "value": 1064 }, "MAIN.uptime": { "description": "Child process uptime", "flag": "c", "format": "d", "value": 661 }, "MAIN.sess_conn": { "description": "Sessions accepted", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_drop": { "description": "Sessions dropped", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail": { "description": "Session accept failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req_400": { "description": "Client requests received, subject to 400 errors", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req_417": { "description": "Client requests received, subject to 417 errors", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req": { "description": "Good client requests received", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hit": { "description": "Cache hits", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hit_grace": { "description": "Cache grace hits", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hitpass": { "description": "Cache hits for pass.", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hitmiss": { "description": "Cache hits for miss.", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_miss": { "description": "Cache misses", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_conn": { "description": "Backend conn. success", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_unhealthy": { "description": "Backend conn. not attempted", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_busy": { "description": "Backend conn. too many", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_fail": { "description": "Backend conn. failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_reuse": { "description": "Backend conn. reuses", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_recycle": { "description": "Backend conn. recycles", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_retry": { "description": "Backend conn. retry", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_head": { "description": "Fetch no body (HEAD)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_length": { "description": "Fetch with Length", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_chunked": { "description": "Fetch chunked", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_eof": { "description": "Fetch EOF", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_bad": { "description": "Fetch bad T-E", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_none": { "description": "Fetch no body", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_1xx": { "description": "Fetch no body (1xx)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_204": { "description": "Fetch no body (204)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_304": { "description": "Fetch no body (304)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_failed": { "description": "Fetch failed (all causes)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_no_thread": { "description": "Fetch failed (no thread)", "flag": "c", "format": "i", "value": 0 }, "MAIN.pools": { "description": "Number of thread pools", "flag": "g", "format": "i", "value": 2 }, "MAIN.threads": { "description": "Total number of threads", "flag": "g", "format": "i", "value": 200 }, "MAIN.threads_limited": { "description": "Threads hit max", "flag": "c", "format": "i", "value": 0 }, "MAIN.threads_created": { "description": "Threads created", "flag": "c", "format": "i", "value": 200 }, "MAIN.threads_destroyed": { "description": "Threads destroyed", "flag": "c", "format": "i", "value": 0 }, "MAIN.threads_failed": { "description": "Thread creation failed", "flag": "c", "format": "i", "value": 0 }, "MAIN.thread_queue_len": { "description": "Length of session queue", "flag": "g", "format": "i", "value": 0 }, "MAIN.busy_sleep": { "description": "Number of requests sent to sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.busy_wakeup": { "description": "Number of requests woken after sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.busy_killed": { "description": "Number of requests killed after sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_queued": { "description": "Sessions queued for thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_dropped": { "description": "Sessions dropped for thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.req_dropped": { "description": "Requests dropped", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_object": { "description": "object structs made", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_vampireobject": { "description": "unresurrected objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_objectcore": { "description": "objectcore structs made", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_objecthead": { "description": "objecthead structs made", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_backend": { "description": "Number of backends", "flag": "g", "format": "i", "value": 4 }, "MAIN.n_expired": { "description": "Number of expired objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_lru_nuked": { "description": "Number of LRU nuked objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_lru_moved": { "description": "Number of LRU moved objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_lru_limited": { "description": "Reached nuke_limit", "flag": "c", "format": "i", "value": 0 }, "MAIN.losthdr": { "description": "HTTP header overflows", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_sess": { "description": "Total sessions seen", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_pipe": { "description": "Total pipe sessions seen", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_pass": { "description": "Total pass-ed requests seen", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_fetch": { "description": "Total backend fetches initiated", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_synth": { "description": "Total synthethic responses made", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_req_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_req_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_resp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_resp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_in": { "description": "Piped bytes from client", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_out": { "description": "Piped bytes to client", "flag": "c", "format": "B", "value": 0 }, "MAIN.sess_closed": { "description": "Session Closed", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_closed_err": { "description": "Session Closed with error", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_readahead": { "description": "Session Read Ahead", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_herd": { "description": "Session herd", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rem_close": { "description": "Session OK REM_CLOSE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_close": { "description": "Session OK REQ_CLOSE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_http10": { "description": "Session Err REQ_HTTP10", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_bad": { "description": "Session Err RX_BAD", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_body": { "description": "Session Err RX_BODY", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_junk": { "description": "Session Err RX_JUNK", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_overflow": { "description": "Session Err RX_OVERFLOW", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_timeout": { "description": "Session Err RX_TIMEOUT", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_pipe": { "description": "Session OK TX_PIPE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_error": { "description": "Session Err TX_ERROR", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_eof": { "description": "Session OK TX_EOF", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_resp_close": { "description": "Session OK RESP_CLOSE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_overload": { "description": "Session Err OVERLOAD", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_pipe_overflow": { "description": "Session Err PIPE_OVERFLOW", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_range_short": { "description": "Session Err RANGE_SHORT", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_http20": { "description": "Session Err REQ_HTTP20", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_vcl_failure": { "description": "Session Err VCL_FAILURE", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_records": { "description": "SHM records", "flag": "c", "format": "i", "value": 986 }, "MAIN.shm_writes": { "description": "SHM writes", "flag": "c", "format": "i", "value": 986 }, "MAIN.shm_flushes": { "description": "SHM flushes due to overflow", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_cont": { "description": "SHM MTX contention", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_cycles": { "description": "SHM cycles through buffer", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_req": { "description": "Backend requests made", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_vcl": { "description": "Number of loaded VCLs in total", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_vcl_avail": { "description": "Number of VCLs available", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_vcl_discard": { "description": "Number of discarded VCLs", "flag": "g", "format": "i", "value": 0 }, "MAIN.vcl_fail": { "description": "VCL failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans": { "description": "Count of bans", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_completed": { "description": "Number of bans marked 'completed'", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_obj": { "description": "Number of bans using obj.*", "flag": "g", "format": "i", "value": 0 }, "MAIN.bans_req": { "description": "Number of bans using req.*", "flag": "g", "format": "i", "value": 0 }, "MAIN.bans_added": { "description": "Bans added", "flag": "c", "format": "i", "value": 1 }, "MAIN.bans_deleted": { "description": "Bans deleted", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_tested": { "description": "Bans tested against objects (lookup)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_obj_killed": { "description": "Objects killed by bans (lookup)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_tested": { "description": "Bans tested against objects (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_tests_tested": { "description": "Ban tests tested against objects (lookup)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_tests_tested": { "description": "Ban tests tested against objects (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_obj_killed": { "description": "Objects killed by bans (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_obj_killed_cutoff": { "description": "Objects killed by bans for cutoff (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_dups": { "description": "Bans superseded by other bans", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_lurker_contention": { "description": "Lurker gave way for lookup", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_persisted_bytes": { "description": "Bytes used by the persisted ban lists", "flag": "g", "format": "B", "value": 16 }, "MAIN.bans_persisted_fragmentation": { "description": "Extra bytes in persisted ban lists due to fragmentation", "flag": "g", "format": "B", "value": 0 }, "MAIN.n_purges": { "description": "Number of purge operations executed", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_obj_purged": { "description": "Number of purged objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.exp_mailed": { "description": "Number of objects mailed to expiry thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.exp_received": { "description": "Number of objects received by expiry thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_nolock": { "description": "HCB Lookups without lock", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_lock": { "description": "HCB Lookups with lock", "flag": "c", "format": "i", "value": 0 }, "MAIN.hcb_insert": { "description": "HCB Inserts", "flag": "c", "format": "i", "value": 0 }, "MAIN.esi_errors": { "description": "ESI parse errors (unlock)", "flag": "c", "format": "i", "value": 0 }, "MAIN.esi_warnings": { "description": "ESI parse warnings (unlock)", "flag": "c", "format": "i", "value": 0 }, "MAIN.vmods": { "description": "Loaded VMODs", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_gzip": { "description": "Gzip operations", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_gunzip": { "description": "Gunzip operations", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_test_gunzip": { "description": "Test gunzip operations", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 5 }, "LCK.backend.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 1343 }, "LCK.ban.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.ban.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.ban.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 34 }, "LCK.busyobj.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 0 }, "LCK.busyobj.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.busyobj.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.cli.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 232 }, "LCK.exp.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.exp.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.exp.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 212 }, "LCK.hcb.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.hcb.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.hcb.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 4 }, "LCK.lru.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.lru.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.lru.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 5 }, "LCK.mempool.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 2899 }, "LCK.objhdr.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.objhdr.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.objhdr.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.pipestat.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.tcp_pool.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 3 }, "LCK.tcp_pool.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.tcp_pool.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 10 }, "LCK.vbe.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vbe.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vbe.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 767 }, "LCK.vcapace.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vcapace.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vcapace.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vcl.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 6 }, "LCK.vxid.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vxid.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vxid.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.waiter.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 14 }, "LCK.wq.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 3 }, "LCK.wq.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.wq.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 3201 }, "LCK.wstat.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.wstat.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.wstat.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 761 }, "MEMPOOL.busyobj.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.busyobj.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.busyobj.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.busyobj.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.busyobj.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.req0.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.req0.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.req0.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.req0.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.sess0.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.sess0.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 512 }, "MEMPOOL.sess0.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 480 }, "MEMPOOL.sess0.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "LCK.sma.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.sma.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.sma.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_req": { "description": "Allocator requests", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_fail": { "description": "Allocator failures", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_bytes": { "description": "Bytes allocated", "flag": "c", "format": "B", "value": 0 }, "SMA.s0.c_freed": { "description": "Bytes freed", "flag": "c", "format": "B", "value": 0 }, "SMA.s0.g_alloc": { "description": "Allocations outstanding", "flag": "g", "format": "i", "value": 0 }, "SMA.s0.g_bytes": { "description": "Bytes outstanding", "flag": "g", "format": "B", "value": 0 }, "SMA.s0.g_space": { "description": "Bytes available", "flag": "g", "format": "B", "value": 268435456 }, "SMA.Transient.c_req": { "description": "Allocator requests", "flag": "c", "format": "i", "value": 0 }, "SMA.Transient.c_fail": { "description": "Allocator failures", "flag": "c", "format": "i", "value": 0 }, "SMA.Transient.c_bytes": { "description": "Bytes allocated", "flag": "c", "format": "B", "value": 0 }, "SMA.Transient.c_freed": { "description": "Bytes freed", "flag": "c", "format": "B", "value": 0 }, "SMA.Transient.g_alloc": { "description": "Allocations outstanding", "flag": "g", "format": "i", "value": 0 }, "SMA.Transient.g_bytes": { "description": "Bytes outstanding", "flag": "g", "format": "B", "value": 0 }, "SMA.Transient.g_space": { "description": "Bytes available", "flag": "g", "format": "B", "value": 0 }, "MEMPOOL.req1.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.req1.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.req1.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.req1.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.req1.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.sess1.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.sess1.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 512 }, "MEMPOOL.sess1.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 480 }, "MEMPOOL.sess1.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.one-two-test.happy": { "description": "Happy health probes", "flag": "b", "format": "b", "value": 18446744073709551615 }, "VBE.boot.one-two-test.bereq_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.one-two-test.bereq_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.one-two-test.beresp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.one-two-test.beresp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.one-two-test.pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.one-two-test.pipe_out": { "description": "Piped bytes to backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.one-two-test.pipe_in": { "description": "Piped bytes from backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.one-two-test.conn": { "description": "Concurrent connections to backend", "flag": "g", "format": "i", "value": 0 }, "VBE.boot.one-two-test.req": { "description": "Backend requests sent", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.eu2.happy": { "description": "Happy health probes", "flag": "b", "format": "b", "value": 0 }, "VBE.boot.eu2.bereq_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.eu2.bereq_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.eu2.beresp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.eu2.beresp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.eu2.pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.eu2.pipe_out": { "description": "Piped bytes to backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.eu2.pipe_in": { "description": "Piped bytes from backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.eu2.conn": { "description": "Concurrent connections to backend", "flag": "g", "format": "i", "value": 0 }, "VBE.boot.eu2.req": { "description": "Backend requests sent", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.us1.happy": { "description": "Happy health probes", "flag": "b", "format": "b", "value": 18446744073709551615 }, "VBE.boot.us1.bereq_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us1.bereq_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us1.beresp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us1.beresp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us1.pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us1.pipe_out": { "description": "Piped bytes to backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us1.pipe_in": { "description": "Piped bytes from backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us1.conn": { "description": "Concurrent connections to backend", "flag": "g", "format": "i", "value": 0 }, "VBE.boot.us1.req": { "description": "Backend requests sent", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.us2.happy": { "description": "Happy health probes", "flag": "b", "format": "b", "value": 0 }, "VBE.boot.us2.bereq_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us2.bereq_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us2.beresp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us2.beresp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us2.pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us2.pipe_out": { "description": "Piped bytes to backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us2.pipe_in": { "description": "Piped bytes from backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.us2.conn": { "description": "Concurrent connections to backend", "flag": "g", "format": "i", "value": 0 }, "VBE.boot.us2.req": { "description": "Backend requests sent", "flag": "c", "format": "i", "value": 0 } } prometheus_varnish_exporter-1.6.1/test/scrape/6.5.1.json000066400000000000000000001543451415415765100232170ustar00rootroot00000000000000{ "version": 1, "timestamp": "2020-09-30T20:38:25", "counters": { "MGT.uptime": { "description": "Management process uptime", "flag": "c", "format": "d", "value": 112 }, "MGT.child_start": { "description": "Child process started", "flag": "c", "format": "i", "value": 1 }, "MGT.child_exit": { "description": "Child process normal exit", "flag": "c", "format": "i", "value": 0 }, "MGT.child_stop": { "description": "Child process unexpected exit", "flag": "c", "format": "i", "value": 0 }, "MGT.child_died": { "description": "Child process died (signal)", "flag": "c", "format": "i", "value": 0 }, "MGT.child_dump": { "description": "Child process core dumped", "flag": "c", "format": "i", "value": 0 }, "MGT.child_panic": { "description": "Child process panic", "flag": "c", "format": "i", "value": 0 }, "MAIN.summs": { "description": "stat summ operations", "flag": "c", "format": "i", "value": 138 }, "MAIN.uptime": { "description": "Child process uptime", "flag": "c", "format": "d", "value": 113 }, "MAIN.sess_conn": { "description": "Sessions accepted", "flag": "c", "format": "i", "value": 43 }, "MAIN.sess_fail": { "description": "Session accept failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail_econnaborted": { "description": "Session accept failures: connection aborted", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail_eintr": { "description": "Session accept failures: interrupted system call", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail_emfile": { "description": "Session accept failures: too many open files", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail_ebadf": { "description": "Session accept failures: bad file descriptor", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail_enomem": { "description": "Session accept failures: not enough memory", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_fail_other": { "description": "Session accept failures: other", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req_400": { "description": "Client requests received, subject to 400 errors", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req_417": { "description": "Client requests received, subject to 417 errors", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_req": { "description": "Good client requests received", "flag": "c", "format": "i", "value": 43 }, "MAIN.cache_hit": { "description": "Cache hits", "flag": "c", "format": "i", "value": 11 }, "MAIN.cache_hit_grace": { "description": "Cache grace hits", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hitpass": { "description": "Cache hits for pass.", "flag": "c", "format": "i", "value": 0 }, "MAIN.cache_hitmiss": { "description": "Cache hits for miss.", "flag": "c", "format": "i", "value": 2 }, "MAIN.cache_miss": { "description": "Cache misses", "flag": "c", "format": "i", "value": 26 }, "MAIN.beresp_uncacheable": { "description": "Uncacheable backend responses", "flag": "c", "format": "i", "value": 5 }, "MAIN.beresp_shortlived": { "description": "Shortlived objects", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_conn": { "description": "Backend conn. success", "flag": "c", "format": "i", "value": 3 }, "MAIN.backend_unhealthy": { "description": "Backend conn. not attempted", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_busy": { "description": "Backend conn. too many", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_fail": { "description": "Backend conn. failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_reuse": { "description": "Backend conn. reuses", "flag": "c", "format": "i", "value": 24 }, "MAIN.backend_recycle": { "description": "Backend conn. recycles", "flag": "c", "format": "i", "value": 26 }, "MAIN.backend_retry": { "description": "Backend conn. retry", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_head": { "description": "Fetch no body (HEAD)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_length": { "description": "Fetch with Length", "flag": "c", "format": "i", "value": 27 }, "MAIN.fetch_chunked": { "description": "Fetch chunked", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_eof": { "description": "Fetch EOF", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_bad": { "description": "Fetch bad T-E", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_none": { "description": "Fetch no body", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_1xx": { "description": "Fetch no body (1xx)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_204": { "description": "Fetch no body (204)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_304": { "description": "Fetch no body (304)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_failed": { "description": "Fetch failed (all causes)", "flag": "c", "format": "i", "value": 0 }, "MAIN.fetch_no_thread": { "description": "Fetch failed (no thread)", "flag": "c", "format": "i", "value": 0 }, "MAIN.pools": { "description": "Number of thread pools", "flag": "g", "format": "i", "value": 2 }, "MAIN.threads": { "description": "Total number of threads", "flag": "g", "format": "i", "value": 200 }, "MAIN.threads_limited": { "description": "Threads hit max", "flag": "c", "format": "i", "value": 0 }, "MAIN.threads_created": { "description": "Threads created", "flag": "c", "format": "i", "value": 200 }, "MAIN.threads_destroyed": { "description": "Threads destroyed", "flag": "c", "format": "i", "value": 0 }, "MAIN.threads_failed": { "description": "Thread creation failed", "flag": "c", "format": "i", "value": 0 }, "MAIN.thread_queue_len": { "description": "Length of session queue", "flag": "g", "format": "i", "value": 0 }, "MAIN.busy_sleep": { "description": "Number of requests sent to sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.busy_wakeup": { "description": "Number of requests woken after sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.busy_killed": { "description": "Number of requests killed after sleep on busy objhdr", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_queued": { "description": "Sessions queued for thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_dropped": { "description": "Sessions dropped for thread", "flag": "c", "format": "i", "value": 0 }, "MAIN.req_dropped": { "description": "Requests dropped", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_object": { "description": "object structs made", "flag": "g", "format": "i", "value": 10 }, "MAIN.n_vampireobject": { "description": "unresurrected objects", "flag": "g", "format": "i", "value": 0 }, "MAIN.n_objectcore": { "description": "objectcore structs made", "flag": "g", "format": "i", "value": 10 }, "MAIN.n_objecthead": { "description": "objecthead structs made", "flag": "g", "format": "i", "value": 18 }, "MAIN.n_backend": { "description": "Number of backends", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_expired": { "description": "Number of expired objects", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_lru_nuked": { "description": "Number of LRU nuked objects", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_lru_moved": { "description": "Number of LRU moved objects", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_lru_limited": { "description": "Reached nuke_limit", "flag": "c", "format": "i", "value": 0 }, "MAIN.losthdr": { "description": "HTTP header overflows", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_sess": { "description": "Total sessions seen", "flag": "c", "format": "i", "value": 43 }, "MAIN.n_pipe": { "description": "Number of ongoing pipe sessions", "flag": "g", "format": "i", "value": 0 }, "MAIN.pipe_limited": { "description": "Pipes hit pipe_sess_max", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_pipe": { "description": "Total pipe sessions seen", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_pass": { "description": "Total pass-ed requests seen", "flag": "c", "format": "i", "value": 0 }, "MAIN.s_fetch": { "description": "Total backend fetches initiated", "flag": "c", "format": "i", "value": 26 }, "MAIN.s_synth": { "description": "Total synthetic responses made", "flag": "c", "format": "i", "value": 6 }, "MAIN.s_req_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 6791 }, "MAIN.s_req_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_resp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 12350 }, "MAIN.s_resp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 77 }, "MAIN.s_pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_in": { "description": "Piped bytes from client", "flag": "c", "format": "B", "value": 0 }, "MAIN.s_pipe_out": { "description": "Piped bytes to client", "flag": "c", "format": "B", "value": 0 }, "MAIN.sess_closed": { "description": "Session Closed", "flag": "c", "format": "i", "value": 43 }, "MAIN.sess_closed_err": { "description": "Session Closed with error", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_readahead": { "description": "Session Read Ahead", "flag": "c", "format": "i", "value": 0 }, "MAIN.sess_herd": { "description": "Session herd", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rem_close": { "description": "Session OK REM_CLOSE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_close": { "description": "Session OK REQ_CLOSE", "flag": "c", "format": "i", "value": 43 }, "MAIN.sc_req_http10": { "description": "Session Err REQ_HTTP10", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_bad": { "description": "Session Err RX_BAD", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_body": { "description": "Session Err RX_BODY", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_junk": { "description": "Session Err RX_JUNK", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_overflow": { "description": "Session Err RX_OVERFLOW", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_timeout": { "description": "Session Err RX_TIMEOUT", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_rx_close_idle": { "description": "Session Err RX_CLOSE_IDLE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_pipe": { "description": "Session OK TX_PIPE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_error": { "description": "Session Err TX_ERROR", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_tx_eof": { "description": "Session OK TX_EOF", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_resp_close": { "description": "Session OK RESP_CLOSE", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_overload": { "description": "Session Err OVERLOAD", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_pipe_overflow": { "description": "Session Err PIPE_OVERFLOW", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_range_short": { "description": "Session Err RANGE_SHORT", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_req_http20": { "description": "Session Err REQ_HTTP20", "flag": "c", "format": "i", "value": 0 }, "MAIN.sc_vcl_failure": { "description": "Session Err VCL_FAILURE", "flag": "c", "format": "i", "value": 0 }, "MAIN.client_resp_500": { "description": "Delivery failed due to insufficient workspace.", "flag": "c", "format": "i", "value": 0 }, "MAIN.ws_backend_overflow": { "description": "workspace_backend overflows", "flag": "c", "format": "i", "value": 0 }, "MAIN.ws_client_overflow": { "description": "workspace_client overflows", "flag": "c", "format": "i", "value": 0 }, "MAIN.ws_thread_overflow": { "description": "workspace_thread overflows", "flag": "c", "format": "i", "value": 0 }, "MAIN.ws_session_overflow": { "description": "workspace_session overflows", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_records": { "description": "SHM records", "flag": "c", "format": "i", "value": 3487 }, "MAIN.shm_writes": { "description": "SHM writes", "flag": "c", "format": "i", "value": 400 }, "MAIN.shm_flushes": { "description": "SHM flushes due to overflow", "flag": "c", "format": "i", "value": 0 }, "MAIN.shm_cont": { "description": "SHM MTX contention", "flag": "c", "format": "i", "value": 3 }, "MAIN.shm_cycles": { "description": "SHM cycles through buffer", "flag": "c", "format": "i", "value": 0 }, "MAIN.backend_req": { "description": "Backend requests made", "flag": "c", "format": "i", "value": 27 }, "MAIN.n_vcl": { "description": "Number of loaded VCLs in total", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_vcl_avail": { "description": "Number of VCLs available", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_vcl_discard": { "description": "Number of discarded VCLs", "flag": "g", "format": "i", "value": 0 }, "MAIN.vcl_fail": { "description": "VCL failures", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans": { "description": "Count of bans", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_completed": { "description": "Number of bans marked 'completed'", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_obj": { "description": "Number of bans using obj.*", "flag": "g", "format": "i", "value": 1 }, "MAIN.bans_req": { "description": "Number of bans using req.*", "flag": "g", "format": "i", "value": 0 }, "MAIN.bans_added": { "description": "Bans added", "flag": "c", "format": "i", "value": 7 }, "MAIN.bans_deleted": { "description": "Bans deleted", "flag": "c", "format": "i", "value": 6 }, "MAIN.bans_tested": { "description": "Bans tested against objects (lookup)", "flag": "c", "format": "i", "value": 9 }, "MAIN.bans_obj_killed": { "description": "Objects killed by bans (lookup)", "flag": "c", "format": "i", "value": 7 }, "MAIN.bans_lurker_tested": { "description": "Bans tested against objects (lurker)", "flag": "c", "format": "i", "value": 37 }, "MAIN.bans_tests_tested": { "description": "Ban tests tested against objects (lookup)", "flag": "c", "format": "i", "value": 27 }, "MAIN.bans_lurker_tests_tested": { "description": "Ban tests tested against objects (lurker)", "flag": "c", "format": "i", "value": 82 }, "MAIN.bans_lurker_obj_killed": { "description": "Objects killed by bans (lurker)", "flag": "c", "format": "i", "value": 7 }, "MAIN.bans_lurker_obj_killed_cutoff": { "description": "Objects killed by bans for cutoff (lurker)", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_dups": { "description": "Bans superseded by other bans", "flag": "c", "format": "i", "value": 2 }, "MAIN.bans_lurker_contention": { "description": "Lurker gave way for lookup", "flag": "c", "format": "i", "value": 0 }, "MAIN.bans_persisted_bytes": { "description": "Bytes used by the persisted ban lists", "flag": "g", "format": "B", "value": 1626 }, "MAIN.bans_persisted_fragmentation": { "description": "Extra bytes in persisted ban lists due to fragmentation", "flag": "g", "format": "B", "value": 1610 }, "MAIN.n_purges": { "description": "Number of purge operations executed", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_obj_purged": { "description": "Number of purged objects", "flag": "c", "format": "i", "value": 0 }, "MAIN.exp_mailed": { "description": "Number of objects mailed to expiry thread", "flag": "c", "format": "i", "value": 42 }, "MAIN.exp_received": { "description": "Number of objects received by expiry thread", "flag": "c", "format": "i", "value": 42 }, "MAIN.hcb_nolock": { "description": "HCB Lookups without lock", "flag": "c", "format": "i", "value": 37 }, "MAIN.hcb_lock": { "description": "HCB Lookups with lock", "flag": "c", "format": "i", "value": 17 }, "MAIN.hcb_insert": { "description": "HCB Inserts", "flag": "c", "format": "i", "value": 17 }, "MAIN.esi_errors": { "description": "ESI parse errors (unlock)", "flag": "c", "format": "i", "value": 0 }, "MAIN.esi_warnings": { "description": "ESI parse warnings (unlock)", "flag": "c", "format": "i", "value": 0 }, "MAIN.vmods": { "description": "Loaded VMODs", "flag": "g", "format": "i", "value": 1 }, "MAIN.n_gzip": { "description": "Gzip operations", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_gunzip": { "description": "Gunzip operations", "flag": "c", "format": "i", "value": 0 }, "MAIN.n_test_gunzip": { "description": "Test gunzip operations", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.backend.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 54 }, "LCK.backend.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.backend.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.ban.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.ban.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.ban.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 170 }, "LCK.ban.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.ban.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.busyobj.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 32 }, "LCK.busyobj.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 32 }, "LCK.busyobj.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 158 }, "LCK.busyobj.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.busyobj.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.cli.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 50 }, "LCK.cli.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.cli.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.exp.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.exp.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.exp.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 156 }, "LCK.exp.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.exp.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.hcb.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.hcb.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.hcb.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 25 }, "LCK.hcb.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.hcb.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.lru.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.lru.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.lru.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 42 }, "LCK.lru.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.lru.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 5 }, "LCK.mempool.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 765 }, "LCK.mempool.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.mempool.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.objhdr.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 19 }, "LCK.objhdr.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.objhdr.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 357 }, "LCK.objhdr.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.objhdr.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.perpool.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.perpool.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.perpool.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 413 }, "LCK.perpool.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.perpool.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.pipestat.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.pipestat.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.probe.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.probe.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.probe.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 1 }, "LCK.probe.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.probe.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 43 }, "LCK.sess.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 43 }, "LCK.sess.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 95 }, "LCK.sess.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.sess.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.tcp_pool.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.tcp_pool.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.tcp_pool.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 106 }, "LCK.tcp_pool.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.tcp_pool.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vbe.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vbe.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vbe.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 41 }, "LCK.vbe.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vbe.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vcapace.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vcapace.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vcapace.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vcapace.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vcapace.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vcl.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 60 }, "LCK.vcl.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vcl.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vxid.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.vxid.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.vxid.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 3 }, "LCK.vxid.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.vxid.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.waiter.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 107 }, "LCK.waiter.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.waiter.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.wq.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.wq.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.wq.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 315 }, "LCK.wq.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.wq.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.wstat.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 1 }, "LCK.wstat.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.wstat.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 117 }, "LCK.wstat.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.wstat.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.busyobj.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.busyobj.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.busyobj.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.busyobj.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 26 }, "MEMPOOL.busyobj.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 26 }, "MEMPOOL.busyobj.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 26 }, "MEMPOOL.busyobj.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.busyobj.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.req0.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.req0.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.req0.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.req0.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 21 }, "MEMPOOL.req0.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 21 }, "MEMPOOL.req0.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 21 }, "MEMPOOL.req0.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req0.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.sess0.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.sess0.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 768 }, "MEMPOOL.sess0.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 736 }, "MEMPOOL.sess0.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 21 }, "MEMPOOL.sess0.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 21 }, "MEMPOOL.sess0.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 21 }, "MEMPOOL.sess0.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess0.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "LCK.sma.creat": { "description": "Created locks", "flag": "c", "format": "i", "value": 2 }, "LCK.sma.destroy": { "description": "Destroyed locks", "flag": "c", "format": "i", "value": 0 }, "LCK.sma.locks": { "description": "Lock Operations", "flag": "c", "format": "i", "value": 100 }, "LCK.sma.dbg_busy": { "description": "Contended lock operations", "flag": "c", "format": "i", "value": 0 }, "LCK.sma.dbg_try_fail": { "description": "Contended trylock operations", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_req": { "description": "Allocator requests", "flag": "c", "format": "i", "value": 42 }, "SMA.s0.c_fail": { "description": "Allocator failures", "flag": "c", "format": "i", "value": 0 }, "SMA.s0.c_bytes": { "description": "Bytes allocated", "flag": "c", "format": "B", "value": 6059 }, "SMA.s0.c_freed": { "description": "Bytes freed", "flag": "c", "format": "B", "value": 3969 }, "SMA.s0.g_alloc": { "description": "Allocations outstanding", "flag": "g", "format": "i", "value": 16 }, "SMA.s0.g_bytes": { "description": "Bytes outstanding", "flag": "g", "format": "B", "value": 2090 }, "SMA.s0.g_space": { "description": "Bytes available", "flag": "g", "format": "B", "value": 67106774 }, "SMA.Transient.c_req": { "description": "Allocator requests", "flag": "c", "format": "i", "value": 17 }, "SMA.Transient.c_fail": { "description": "Allocator failures", "flag": "c", "format": "i", "value": 0 }, "SMA.Transient.c_bytes": { "description": "Bytes allocated", "flag": "c", "format": "B", "value": 8021 }, "SMA.Transient.c_freed": { "description": "Bytes freed", "flag": "c", "format": "B", "value": 7621 }, "SMA.Transient.g_alloc": { "description": "Allocations outstanding", "flag": "g", "format": "i", "value": 2 }, "SMA.Transient.g_bytes": { "description": "Bytes outstanding", "flag": "g", "format": "B", "value": 400 }, "SMA.Transient.g_space": { "description": "Bytes available", "flag": "g", "format": "B", "value": 0 }, "VBE.boot.default.happy": { "description": "Happy health probes", "flag": "b", "format": "b", "value": 0 }, "VBE.boot.default.bereq_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 6901 }, "VBE.boot.default.bereq_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.beresp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 5637 }, "VBE.boot.default.beresp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 44 }, "VBE.boot.default.pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.pipe_out": { "description": "Piped bytes to backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.pipe_in": { "description": "Piped bytes from backend", "flag": "c", "format": "B", "value": 0 }, "VBE.boot.default.conn": { "description": "Concurrent connections used", "flag": "g", "format": "i", "value": 0 }, "VBE.boot.default.req": { "description": "Backend requests sent", "flag": "c", "format": "i", "value": 27 }, "VBE.boot.default.unhealthy": { "description": "Fetches not attempted due to backend being unhealthy", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.busy": { "description": "Fetches not attempted due to backend being busy", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.fail": { "description": "Connections failed", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.fail_eacces": { "description": "Connections failed with EACCES or EPERM", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.fail_eaddrnotavail": { "description": "Connections failed with EADDRNOTAVAIL", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.fail_econnrefused": { "description": "Connections failed with ECONNREFUSED", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.fail_enetunreach": { "description": "Connections failed with ENETUNREACH", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.fail_etimedout": { "description": "Connections failed ETIMEDOUT", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.fail_other": { "description": "Connections failed for other reason", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.happy": { "description": "Happy health probes", "flag": "b", "format": "b", "value": 0 }, "VBE.reload_20210114_155148_19902.default.bereq_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 6901 }, "VBE.reload_20210114_155148_19902.default.bereq_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.reload_20210114_155148_19902.default.beresp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 5637 }, "VBE.reload_20210114_155148_19902.default.beresp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 44 }, "VBE.reload_20210114_155148_19902.default.pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.reload_20210114_155148_19902.default.pipe_out": { "description": "Piped bytes to backend", "flag": "c", "format": "B", "value": 0 }, "VBE.reload_20210114_155148_19902.default.pipe_in": { "description": "Piped bytes from backend", "flag": "c", "format": "B", "value": 0 }, "VBE.reload_20210114_155148_19902.default.conn": { "description": "Concurrent connections used", "flag": "g", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.req": { "description": "Backend requests sent", "flag": "c", "format": "i", "value": 27 }, "VBE.reload_20210114_155148_19902.default.unhealthy": { "description": "Fetches not attempted due to backend being unhealthy", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.busy": { "description": "Fetches not attempted due to backend being busy", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.fail": { "description": "Connections failed", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.fail_eacces": { "description": "Connections failed with EACCES or EPERM", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.fail_eaddrnotavail": { "description": "Connections failed with EADDRNOTAVAIL", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.fail_econnrefused": { "description": "Connections failed with ECONNREFUSED", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.fail_enetunreach": { "description": "Connections failed with ENETUNREACH", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.fail_etimedout": { "description": "Connections failed ETIMEDOUT", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.fail_other": { "description": "Connections failed for other reason", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_155148_19902.default.helddown": { "description": "Connection opens not attempted", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.happy": { "description": "Happy health probes", "flag": "b", "format": "b", "value": 0 }, "VBE.reload_20210114_160902_21476.default.bereq_hdrbytes": { "description": "Request header bytes", "flag": "c", "format": "B", "value": 6901 }, "VBE.reload_20210114_160902_21476.default.bereq_bodybytes": { "description": "Request body bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.reload_20210114_160902_21476.default.beresp_hdrbytes": { "description": "Response header bytes", "flag": "c", "format": "B", "value": 5637 }, "VBE.reload_20210114_160902_21476.default.beresp_bodybytes": { "description": "Response body bytes", "flag": "c", "format": "B", "value": 44 }, "VBE.reload_20210114_160902_21476.default.pipe_hdrbytes": { "description": "Pipe request header bytes", "flag": "c", "format": "B", "value": 0 }, "VBE.reload_20210114_160902_21476.default.pipe_out": { "description": "Piped bytes to backend", "flag": "c", "format": "B", "value": 0 }, "VBE.reload_20210114_160902_21476.default.pipe_in": { "description": "Piped bytes from backend", "flag": "c", "format": "B", "value": 0 }, "VBE.reload_20210114_160902_21476.default.conn": { "description": "Concurrent connections used", "flag": "g", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.req": { "description": "Backend requests sent", "flag": "c", "format": "i", "value": 27 }, "VBE.reload_20210114_160902_21476.default.unhealthy": { "description": "Fetches not attempted due to backend being unhealthy", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.busy": { "description": "Fetches not attempted due to backend being busy", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.fail": { "description": "Connections failed", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.fail_eacces": { "description": "Connections failed with EACCES or EPERM", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.fail_eaddrnotavail": { "description": "Connections failed with EADDRNOTAVAIL", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.fail_econnrefused": { "description": "Connections failed with ECONNREFUSED", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.fail_enetunreach": { "description": "Connections failed with ENETUNREACH", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.fail_etimedout": { "description": "Connections failed ETIMEDOUT", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.fail_other": { "description": "Connections failed for other reason", "flag": "c", "format": "i", "value": 0 }, "VBE.reload_20210114_160902_21476.default.helddown": { "description": "Connection opens not attempted", "flag": "c", "format": "i", "value": 0 }, "VBE.boot.default.helddown": { "description": "Connection opens not attempted", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.req1.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.req1.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 65536 }, "MEMPOOL.req1.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 65504 }, "MEMPOOL.req1.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 22 }, "MEMPOOL.req1.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 22 }, "MEMPOOL.req1.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 22 }, "MEMPOOL.req1.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.req1.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.live": { "description": "In use", "flag": "g", "format": "i", "value": 0 }, "MEMPOOL.sess1.pool": { "description": "In Pool", "flag": "g", "format": "i", "value": 10 }, "MEMPOOL.sess1.sz_wanted": { "description": "Size requested", "flag": "g", "format": "B", "value": 768 }, "MEMPOOL.sess1.sz_actual": { "description": "Size allocated", "flag": "g", "format": "B", "value": 736 }, "MEMPOOL.sess1.allocs": { "description": "Allocations", "flag": "c", "format": "i", "value": 22 }, "MEMPOOL.sess1.frees": { "description": "Frees", "flag": "c", "format": "i", "value": 22 }, "MEMPOOL.sess1.recycle": { "description": "Recycled from pool", "flag": "c", "format": "i", "value": 22 }, "MEMPOOL.sess1.timeout": { "description": "Timed out from pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.toosmall": { "description": "Too small to recycle", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.surplus": { "description": "Too many for pool", "flag": "c", "format": "i", "value": 0 }, "MEMPOOL.sess1.randry": { "description": "Pool ran dry", "flag": "c", "format": "i", "value": 0 } } } prometheus_varnish_exporter-1.6.1/utils.go000066400000000000000000000047011415415765100210760ustar00rootroot00000000000000package main import ( "fmt" "os" "strings" ) // logging func logRaw(format string, args ...interface{}) { fmt.Printf(format+"\n", args...) } func logTitle(format string, args ...interface{}) { logInfo(format, args...) title := strings.Repeat("-", len(fmt.Sprintf(format, args...))) if len(title) > 0 { logInfo(title) } } func logInfo(format string, args ...interface{}) { if StartParams.Raw { logRaw(format, args...) } else { logger.Printf(format, args...) } } func logWarn(format string, args ...interface{}) { format = "[WARN] " + format if StartParams.Raw { logRaw(format, args...) } else { logger.Printf(format, args...) } } func logError(format string, args ...interface{}) { format = "[ERROR] " + format if StartParams.Raw { logRaw(format, args...) } else { logger.Printf(format, args...) } } func logFatal(format string, args ...interface{}) { format = "[FATAL] " + format if StartParams.Raw { logRaw(format, args...) } else { logger.Printf(format, args...) } os.Exit(1) } func logFatalError(err error) { if err != nil { logFatal(err.Error()) } } // strings type caseSensitivity int const ( caseSensitive caseSensitivity = 0 caseInsensitive caseSensitivity = 1 ) func startsWith(str, prefix string, cs caseSensitivity) bool { if cs == caseSensitive { return strings.HasPrefix(str, prefix) } return strings.HasPrefix(strings.ToLower(str), strings.ToLower(prefix)) } func startsWithAny(str string, prefixes []string, cs caseSensitivity) bool { for _, prefix := range prefixes { if startsWith(str, prefix, cs) { return true } } return false } func endsWith(str, postfix string, cs caseSensitivity) bool { if cs == caseSensitive { return strings.HasSuffix(str, postfix) } return strings.HasSuffix(strings.ToLower(str), strings.ToLower(postfix)) } func endsWithAny(str string, postfixes []string, cs caseSensitivity) bool { for _, postfix := range postfixes { if endsWith(str, postfix, cs) { return true } } return false } // file // Returns if file/dir in path exists. func fileExists(path string) bool { if len(path) == 0 { return false } if _, err := os.Stat(path); os.IsNotExist(err) { return false } return true } // data func stringProperty(data map[string]interface{}, key string) (string, error) { if value, ok := data[key]; ok { if vStr, ok := value.(string); ok { return vStr, nil } else { return "", fmt.Errorf("%s is not a string", key) } } return "", nil } prometheus_varnish_exporter-1.6.1/varnish.go000066400000000000000000000234441415415765100214150ustar00rootroot00000000000000package main import ( "bufio" "bytes" "encoding/json" "fmt" "os/exec" "reflect" "regexp" "strconv" "strings" "sync" "github.com/prometheus/client_golang/prometheus" ) const ( vbeReload = "VBE.reload_" ) var ( DescCache = &descCache{ descs: make(map[string]*prometheus.Desc), } ) type descCache struct { sync.RWMutex descs map[string]*prometheus.Desc } func (dc *descCache) Desc(key string) *prometheus.Desc { dc.RLock() desc := dc.descs[key] dc.RUnlock() return desc } func (dc *descCache) Set(key string, desc *prometheus.Desc) *prometheus.Desc { dc.Lock() dc.descs[key] = desc dc.Unlock() return desc } func ScrapeVarnish(ch chan<- prometheus.Metric) ([]byte, error) { params := []string{"-j"} if VarnishVersion.EqualsOrGreater(4, 1) { // 4.1 started to support timeout to exit immediately on connection errors. // Before that varnishstat exits immediately on faulty params or connection errors. params = append(params, "-t", "0") } if !StartParams.Params.isEmpty() { params = append(params, StartParams.Params.make()...) } buf, errExec := executeVarnishstat(StartParams.VarnishstatExe, params...) if errExec != nil { return buf.Bytes(), fmt.Errorf("%s scrape failed: %s", StartParams.VarnishstatExe, errExec) } return ScrapeVarnishFrom(buf.Bytes(), ch) } func ScrapeVarnishFrom(buf []byte, ch chan<- prometheus.Metric) ([]byte, error) { // The output JSON annoyingly is not structured so that we could make a nice map[string]struct for it. metricsJSON := make(map[string]interface{}) dec := json.NewDecoder(bytes.NewBuffer(buf)) dec.UseNumber() if err := dec.Decode(&metricsJSON); err != nil { return buf, err } countersJSON := make(map[string]interface{}) // From Varnish 6.5 https://varnish-cache.org/docs/6.5/whats-new/upgrading-6.5.html#varnishstat if metricsJSON["version"] != nil { version_raw, ok := metricsJSON["version"].(json.Number) if !ok { return nil, fmt.Errorf("Unhandled json stats version type: %T %#v", metricsJSON["version"], metricsJSON["version"]) } version, err := version_raw.Int64() if err != nil { return nil, fmt.Errorf("Unhandled json stats version type: %s", err) } switch version { case 1: countersJSON = metricsJSON["counters"].(map[string]interface{}) default: return nil, fmt.Errorf("Unimplemented json stats version %d", version) } } else { countersJSON = metricsJSON } mostRecentVbeReloadPrefix := findMostRecentVbeReloadPrefix(countersJSON) for vName, raw := range countersJSON { if isOutdatedVbe(vName, mostRecentVbeReloadPrefix) { continue } if vName == "timestamp" { continue } if dt := reflect.TypeOf(raw); dt.Kind() != reflect.Map { if StartParams.Verbose { logWarn("Found unexpected data from json: %s: %#v", vName, raw) } continue } data, ok := raw.(map[string]interface{}) if !ok { if StartParams.Verbose { logWarn("Failed to cast to map[string]interface{}: %s: %#v", vName, raw) } continue } var ( vGroup = prometheusGroup(vName) vDescription string vIdentifier string vValue float64 iValue uint64 vErr error ) flag, _ := stringProperty(data, "flag") if value, ok := data["description"]; ok && vErr == nil { if vDescription, ok = value.(string); !ok { vErr = fmt.Errorf("%s description it not a string", vName) } } if value, ok := data["ident"]; ok && vErr == nil { if vIdentifier, ok = value.(string); !ok { vErr = fmt.Errorf("%s ident it not a string", vName) } } if value, ok := data["value"]; ok && vErr == nil { if number, ok := value.(json.Number); ok { if vValue, vErr = number.Float64(); vErr != nil { vErr = fmt.Errorf("%s value float64 error: %s", vName, vErr) } if flag == "b" { if iValue, vErr = strconv.ParseUint(number.String(), 10, 64); vErr != nil { vErr = fmt.Errorf("%s value uint64 error: %s", vName, vErr) } } } else { vErr = fmt.Errorf("%s value it not a float64", vName) } } if vErr != nil { if StartParams.Verbose { logWarn(vErr.Error()) } continue } pName, pDescription, pLabelKeys, pLabelValues := computePrometheusInfo(vName, vGroup, vIdentifier, vDescription) descKey := pName + "_" + strings.Join(pLabelKeys, "_") pDesc := DescCache.Desc(descKey) if pDesc == nil { pDesc = DescCache.Set(descKey, prometheus.NewDesc( pName, pDescription, pLabelKeys, nil, )) } var metricType prometheus.ValueType switch flag { case "c", "a": metricType = prometheus.CounterValue case "g": metricType = prometheus.GaugeValue default: metricType = prometheus.GaugeValue } ch <- prometheus.MustNewConstMetric(pDesc, metricType, vValue, pLabelValues...) // augment varnish_backend_up from _happy varnish bitmap value // we are only interested in the latest happy value (up or down) on each scrape // see draw_line_bitmap function from https://github.com/varnishcache/varnish-cache/blob/master/bin/varnishstat/varnishstat_curses.c if pName == "varnish_backend_happy" { upName := "varnish_backend_up" upDesc := "Backend up as per the latest health probe" upValue := 0.0 if iValue > 0 && (iValue&uint64(1)) > 0 { upValue = 1.0 } descKey = upName + "_" + strings.Join(pLabelKeys, "_") pDesc = DescCache.Desc(descKey) if pDesc == nil { pDesc = DescCache.Set(descKey, prometheus.NewDesc( upName, upDesc, pLabelKeys, nil, )) } ch <- prometheus.MustNewConstMetric(pDesc, prometheus.GaugeValue, upValue, pLabelValues...) } } return buf, nil } // Returns the result of 'varnishtat' with optional command line params. func executeVarnishstat(varnishstatExe string, params ...string) (*bytes.Buffer, error) { buf := &bytes.Buffer{} var cmd *exec.Cmd if len(StartParams.VarnishDockerContainer) == 0 { cmd = exec.Command(varnishstatExe, params...) } else { cmd = exec.Command("docker", append([]string{"exec", "-t", StartParams.VarnishDockerContainer, varnishstatExe}, params...)...) } cmd.Stdout = buf cmd.Stderr = buf return buf, cmd.Run() } // Returns the most recent prefix for 'VBE.reload_' stats. Empty until first reload. // 'VBE.reload_2019-08-29T100458' as by varnish_reload_vcl in 4.1+ // 'VBE.reload_20191014_091124_78599' as by varnishreload in 6+ func findMostRecentVbeReloadPrefix(countersJSON map[string]interface{}) string { var mostRecentVbeReloadPrefix string for vName, _ := range countersJSON { // Checking only the required ".happy" stat if strings.HasPrefix(vName, vbeReload) && strings.HasSuffix(vName, ".happy") { dotAfterPrefixIndex := len(vbeReload) + strings.Index(vName[len(vbeReload):], ".") vbeReloadPrefix := vName[:dotAfterPrefixIndex] if strings.Compare(vbeReloadPrefix, mostRecentVbeReloadPrefix) > 0 { mostRecentVbeReloadPrefix = vbeReloadPrefix } } } return mostRecentVbeReloadPrefix } // Returns true if the given 'VBE.' statistic refers to an outdated VCL version func isOutdatedVbe(vName string, mostRecentVbeReloadPrefix string) bool { return len(mostRecentVbeReloadPrefix) > 0 && strings.HasPrefix(vName, "VBE.") && !strings.HasPrefix(vName, mostRecentVbeReloadPrefix) } // varnishVersion type varnishVersion struct { Major int Minor int Patch int Revision string } func NewVarnishVersion() *varnishVersion { return &varnishVersion{ Major: -1, Minor: -1, Patch: -1, } } func (v *varnishVersion) EqualsOrGreater(major, minor int) bool { if v.Major > major { return true } else if v.Major == major && v.Minor >= minor { return true } return false } func (v *varnishVersion) Valid() bool { return v.Major != -1 } func (v *varnishVersion) Initialize() error { return v.queryVersion() } func (v *varnishVersion) queryVersion() error { buf, err := executeVarnishstat(StartParams.VarnishstatExe, "-V") if err != nil { return err } if scanner := bufio.NewScanner(buf); scanner.Scan() { return v.parseVersion(scanner.Text()) } return fmt.Errorf("Failed to get varnishstat -V output") } func (v *varnishVersion) parseVersion(version string) error { r := regexp.MustCompile(`(?P\d+)(\.(?P\d+))?(\.(?P\d+))?(.*revision\s(?P[0-9a-f]*)\))?`) match := r.FindStringSubmatch(version) parts := make(map[string]string) for i, name := range r.SubexpNames() { if i != 0 && name != "" { parts[name] = match[i] } } if len(parts) > 1 { if err := v.set(parts); err != nil { return err } } if !v.Valid() { return fmt.Errorf("Failed to resolve version from %q", version) } return nil } func (v *varnishVersion) Labels() map[string]string { labels := make(map[string]string) if v.Major != -1 { labels["major"] = strconv.Itoa(v.Major) } if v.Minor != -1 { labels["minor"] = strconv.Itoa(v.Minor) } if v.Patch != -1 { labels["patch"] = strconv.Itoa(v.Patch) } if v.Revision != "" { labels["revision"] = v.Revision } labels["version"] = v.VersionString() return labels } func (v *varnishVersion) set(parts map[string]string) error { for name, value := range parts { // skip empty value if len(value) == 0 { continue } // save revision as-is (string) if name == "revision" { v.Revision = value continue } // convert semver parts to integer and save it num, err := strconv.Atoi(value) if err != nil { return err } switch name { case "major": v.Major = num case "minor": v.Minor = num case "patch": v.Patch = num } } return nil } // Version string with numbers only, no revision. func (v *varnishVersion) VersionString() string { parts := []string{} for _, num := range []int{v.Major, v.Minor, v.Patch} { if num != -1 { parts = append(parts, strconv.Itoa(num)) } } return strings.Join(parts, ".") } // Full version string, including revision. func (v *varnishVersion) String() string { version := v.VersionString() if v.Revision != "" { version += " " + v.Revision } return version } prometheus_varnish_exporter-1.6.1/varnish_test.go000066400000000000000000000266341415415765100224600ustar00rootroot00000000000000package main import ( "fmt" "io/ioutil" "os" "path/filepath" "runtime" "testing" "github.com/prometheus/client_golang/prometheus" ) var testFileVersions = []string{"3.0.5", "4.0.5", "4.1.1", "5.2.0", "6.0.0", "6.5.1"} func Test_VarnishVersion(t *testing.T) { tests := map[string]*varnishVersion{ "varnishstat (varnish-6.5.1 revision 1dae23376bb5ea7a6b8e9e4b9ed95cdc9469fb64)": &varnishVersion{ Major: 6, Minor: 5, Patch: 1, Revision: "1dae23376bb5ea7a6b8e9e4b9ed95cdc9469fb64", }, "varnishstat (varnish-6.0.0 revision a068361dff0d25a0d85cf82a6e5fdaf315e06a7d)": &varnishVersion{ Major: 6, Minor: 0, Patch: 0, Revision: "a068361dff0d25a0d85cf82a6e5fdaf315e06a7d", }, "varnishstat (varnish-5.2.0 revision 4c4875cbf)": &varnishVersion{ Major: 5, Minor: 2, Patch: 0, Revision: "4c4875cbf", }, "varnishstat (varnish-4.1.10 revision 1d090c5a08f41c36562644bafcce9d3cb85d824f)": &varnishVersion{ Major: 4, Minor: 1, Patch: 10, Revision: "1d090c5a08f41c36562644bafcce9d3cb85d824f", }, "varnishstat (varnish-4.1.0 revision 3041728)": &varnishVersion{ Major: 4, Minor: 1, Patch: 0, Revision: "3041728", }, "varnishstat (varnish-4 revision)": &varnishVersion{ Major: 4, Minor: -1, Patch: -1, }, "varnishstat (varnish-3.0.5 revision 1a89b1f)": &varnishVersion{ Major: 3, Minor: 0, Patch: 5, Revision: "1a89b1f", }, "varnish 2.0": &varnishVersion{ Major: 2, Minor: 0, Patch: -1, }, "varnish 1": &varnishVersion{ Major: 1, Minor: -1, Patch: -1, }, } for versionStr, test := range tests { v := NewVarnishVersion() if err := v.parseVersion(versionStr); err != nil { t.Error(err.Error()) continue } if test.Major != v.Major || test.Minor != v.Minor || test.Patch != v.Patch || test.Revision != v.Revision { t.Errorf("version mismatch on %q", versionStr) continue } t.Logf("%q > %s\n", versionStr, v.String()) if !test.EqualsOrGreater(test.Major, test.Minor) { t.Fatalf("%s does not satisfy itself", test) } if !test.EqualsOrGreater(test.Major-1, 0) { t.Fatalf("%s should satisfy version %d.0", test, test.Major-1) } if test.EqualsOrGreater(test.Major, test.Minor+1) { t.Fatalf("%s should not satisfy version %d.%d", test, test.Major, test.Minor+1) } } } func dummyBackendValue(backend string) (string, map[string]interface{}) { return fmt.Sprintf("VBE.%s.happy", backend), map[string]interface{}{ "description": "Happy health probes", "type": "VBE", "ident": backend, "flag": "b", "format": "b", "value": 0, } } func matchStringSlices(s1, s2 []string) bool { if len(s1) != len(s2) { return false } for i, v1 := range s1 { if s2[i] != v1 { return false } } return true } func Test_VarnishBackendNames(t *testing.T) { for _, variant := range [][]string{ {"eu1_x.y-z:w(192.52.0.192,,8085)", "eu1_x.y-z:w", "192.52.0.192,,8085"}, // 4.0.3 {"root:eu2_x.y-z:w", "eu2_x.y-z:w", "unknown"}, // 4.1 {"def0e7f7-a676-4eed-9d8b-78ef7ce21e93.us1_x.y-z:w", "us1_x.y-z:w", "def0e7f7-a676-4eed-9d8b-78ef7ce21e93"}, {"root:29813cbb-7329-4eb8-8969-26be2ef58c88.us2_x.y-z:w", "us2_x.y-z:w", "29813cbb-7329-4eb8-8969-26be2ef58c88"}, // ?? {"boot.default", "default", "unknown"}, {"reload_2019-08-29T100458.default", "default", "unknown"}, // varnish_reload_vcl in 4 {"reload_20191016_072034_54500.default", "default", "unknown"}, // varnishreload in 6+ {"ce19737f-72b5-4f4b-9d39-3d8c2d28240b.default", "default", "ce19737f-72b5-4f4b-9d39-3d8c2d28240b"}, } { backend := variant[0] expected_backend := variant[1] expected_server := variant[2] vName, data := dummyBackendValue(backend) var ( vGroup = prometheusGroup(vName) vDescription string vIdentifier string vErr error ) if value, ok := data["description"]; ok && vErr == nil { if vDescription, ok = value.(string); !ok { vErr = fmt.Errorf("%s description it not a string", vName) } } if value, ok := data["ident"]; ok && vErr == nil { if vIdentifier, ok = value.(string); !ok { vErr = fmt.Errorf("%s ident it not a string", vName) } } if vErr != nil { t.Error(vErr) return } // Varnish < 5.2 name_1, _, labelKeys_1, labelValues_1 := computePrometheusInfo(vName, vGroup, vIdentifier, vDescription) computed_backend := findLabelValue("backend", labelKeys_1, labelValues_1) computed_server := findLabelValue("server", labelKeys_1, labelValues_1) t.Logf("%s > %s > %s\n", vName, backend, name_1) t.Logf(" ident : %s\n", vIdentifier) t.Logf(" backend : %s\n", computed_backend) t.Logf(" server : %s\n", computed_server) if expected_backend != computed_backend { t.Fatalf("backend %q != %q", computed_backend, expected_backend) } if expected_server != expected_server { t.Fatalf("server %q != %q", computed_server, expected_server) } // Varnish >= 5.2 no longer has 'ident', test that detected correctly from vName name_2, _, labelKeys_2, labelValues_2 := computePrometheusInfo(vName, vGroup, "", vDescription) if name_1 != name_2 { t.Fatalf("name %q != %q", name_1, name_2) } if !matchStringSlices(labelKeys_1, labelKeys_2) { t.Fatalf("labelKeys %#v != %#v", labelKeys_1, labelKeys_2) } if !matchStringSlices(labelValues_1, labelValues_2) { t.Fatalf("labelKeys %#v != %#v", labelValues_1, labelValues_2) } } } func Test_VarnishMetrics(t *testing.T) { dir, _ := os.Getwd() if !fileExists(filepath.Join(dir, "test/scrape")) { t.Skipf("Cannot find test/scrape files from workind dir %s", dir) } for _, version := range testFileVersions { test := filepath.Join(dir, "test/scrape", version+".json") VarnishVersion.parseVersion(version) t.Logf("test scrape %s", VarnishVersion) buf, err := ioutil.ReadFile(test) if err != nil { t.Fatal(err.Error()) } done := make(chan bool) metrics := make(chan prometheus.Metric) descs := []*prometheus.Desc{} go func() { for m := range metrics { descs = append(descs, m.Desc()) } done <- true }() _, err = ScrapeVarnishFrom(buf, metrics) close(metrics) <-done if err != nil { t.Fatal(err.Error()) } t.Logf(" %d metrics", len(descs)) } } func Test_FindMostRecentVbeReloadPrefix(t *testing.T) { type testConfig struct { varnishCounters map[string]interface{} expectedMostRecentVbeReloadPrefix string } for _, testConfig := range []testConfig{ // Varnish <= 4.0 has no duplicated stats on reload {map[string]interface{}{ "VBE.default(127.0.0.1,,8080).happy": "any", }, ""}, // Varnish 4.1 or later, not yet reloaded {map[string]interface{}{ "VBE.boot.default.happy": "any", }, ""}, // Varnish 4.1, reloaded 2 times {map[string]interface{}{ "VBE.boot.default.happy": "any", "VBE.reload_2019-08-29T100458.default.happy": "any", "VBE.reload_2019-08-29T100459.default.happy": "any", }, "VBE.reload_2019-08-29T100459"}, // Varnish 6+, reloaded 2 times {map[string]interface{}{ "VBE.boot.default.happy": "any", "VBE.reload_20191016_072034_54500.default.happy": "any", "VBE.reload_20191016_072034_54501.default.happy": "any", }, "VBE.reload_20191016_072034_54501"}, } { computedMostRecentVbeReloadPrefix := findMostRecentVbeReloadPrefix(testConfig.varnishCounters) t.Logf("Varnish counters: %s\n", testConfig.varnishCounters) t.Logf(" expected most recent prefix : '%s'\n", testConfig.expectedMostRecentVbeReloadPrefix) t.Logf(" computed most recent prefix : '%s'\n", computedMostRecentVbeReloadPrefix) if computedMostRecentVbeReloadPrefix != testConfig.expectedMostRecentVbeReloadPrefix { t.Fatalf("mostRecentVbeReloadPrefix %q != %q", computedMostRecentVbeReloadPrefix, testConfig.expectedMostRecentVbeReloadPrefix) } } } func Test_IsOutdatedVbe(t *testing.T) { type testConfig struct { vName string mostRecentVbeReloadPrefix string expectedIsOutdatedVbe bool } for _, testConfig := range []testConfig{ {"MGT.uptime", "", false}, // not VBE {"MGT.uptime", "VBE.reload_20191016_072034_54500", false}, // not VBE {"VBE.boot.default.conn", "", false}, // VCL not yet reloaded {"VBE.boot.default.conn", "VBE.reload_20191016_072034_54500", true}, // VCL reloaded, 'boot' is now outdated {"VBE.reload_20191016_072034_54500.default.conn", "VBE.reload_20191016_072034_54500", false}, // current VCL version {"VBE.reload_20191016_072034_54499.default.conn", "VBE.reload_20191016_072034_54500", true}, // previous VCL version } { computedIsOutdatedVbe := isOutdatedVbe(testConfig.vName, testConfig.mostRecentVbeReloadPrefix) t.Logf("'%s', '%s'\n", testConfig.vName, testConfig.mostRecentVbeReloadPrefix) t.Logf(" expected outdated : %t\n", testConfig.expectedIsOutdatedVbe) t.Logf(" computed outdated : %t\n", computedIsOutdatedVbe) if computedIsOutdatedVbe != testConfig.expectedIsOutdatedVbe { t.Fatalf("outdatedVbe %t != %t", computedIsOutdatedVbe, testConfig.expectedIsOutdatedVbe) } } } type testCollector struct { filepath string t *testing.T } func (tc *testCollector) Describe(ch chan<- *prometheus.Desc) { } func (tc *testCollector) Collect(ch chan<- prometheus.Metric) { buf, err := ioutil.ReadFile(tc.filepath) if err != nil { tc.t.Fatal(err.Error()) } _, err = ScrapeVarnishFrom(buf, ch) if err != nil { tc.t.Fatal(err.Error()) } } func Test_PrometheusExport(t *testing.T) { dir, _ := os.Getwd() if !fileExists(filepath.Join(dir, "test/scrape")) { t.Skipf("Cannot find test/scrape files from workind dir %s", dir) } for _, version := range testFileVersions { test := filepath.Join(dir, "test/scrape", version+".json") VarnishVersion.parseVersion(version) t.Logf("test scrape %s", VarnishVersion) registry := prometheus.NewRegistry() collector := &testCollector{filepath: test, t: t} registry.MustRegister(collector) gathering, err := registry.Gather() if err != nil { errors, ok := err.(prometheus.MultiError) if ok { for _, e := range errors { t.Errorf(" Error in prometheus Gather: %#v", e) } } else { t.Errorf(" Error in prometheus Gather: %#v", err) } } metricCount := 0 includesVarnishBackendHappy := false for _, mf := range gathering { if *mf.Name == "varnish_backend_happy" { includesVarnishBackendHappy = true } metricCount += len(mf.Metric) } // Validate presence of a single metric, which is present across all versions if !includesVarnishBackendHappy { t.Error("Missing metric varnish_backend_happy") } t.Logf(" %d metrics", metricCount) } } // Testing against a live varnish instance is only executed in build bot(s). // This is because the usual end user setup requires tests to be ran with sudo in order to work. func Test_VarnishMetrics_CI(t *testing.T) { if runtime.GOOS != "linux" { t.Skipf("Host needs to be linux to run live metrics test: %s", runtime.GOOS) return } else if os.Getenv("CONTINUOUS_INTEGRATION") != "true" { t.Skip("Live metrics test only ran on CI") return } StartParams.Verbose = true StartParams.Raw = true if err := VarnishVersion.Initialize(); err != nil { t.Fatal(err) } done := make(chan bool) metrics := make(chan prometheus.Metric) go func() { for m := range metrics { t.Logf("%s", m.Desc()) } done <- true }() if _, err := ScrapeVarnish(metrics); err != nil { t.Fatal(err) } close(metrics) <-done }