sql_exporter-0.2.0/000077500000000000000000000000001307561357100142505ustar00rootroot00000000000000sql_exporter-0.2.0/.gitignore000066400000000000000000000000441307561357100162360ustar00rootroot00000000000000config.yaml config.yml sql_exporter sql_exporter-0.2.0/.promu.yml000066400000000000000000000012061307561357100162120ustar00rootroot00000000000000go: cgo: false repository: path: github.com/justwatchcom/sql_exporter build: flags: -a -tags netgo ldflags: | -X {{repoPath}}/vendor/github.com/prometheus/common/version.Version={{.Version}} -X {{repoPath}}/vendor/github.com/prometheus/common/version.Revision={{.Revision}} -X {{repoPath}}/vendor/github.com/prometheus/common/version.Branch={{.Branch}} -X {{repoPath}}/vendor/github.com/prometheus/common/version.BuildUser={{user}}@{{host}} -X {{repoPath}}/vendor/github.com/prometheus/common/version.BuildDate={{date "20060102-15:04:05"}} tarball: files: - LICENSE - config.yml.dist sql_exporter-0.2.0/.travis.yml000066400000000000000000000002151307561357100163570ustar00rootroot00000000000000language: go go: - 1.8 - tip script: - make style - make vet - make test - make build matrix: allow_failures: - go: tip sql_exporter-0.2.0/Dockerfile000066400000000000000000000001541307561357100162420ustar00rootroot00000000000000FROM prom/busybox:glibc ADD sql_exporter /bin/sql_exporter EXPOSE 9237 ENTRYPOINT [ "/bin/sql_exporter" ] sql_exporter-0.2.0/LICENSE000066400000000000000000000020651307561357100152600ustar00rootroot00000000000000The MIT License (MIT) Copyright 2017 JustWatch GmbH 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. sql_exporter-0.2.0/Makefile000066400000000000000000000032741307561357100157160ustar00rootroot00000000000000# Copyright 2015 The Prometheus Authors # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. GO := GO15VENDOREXPERIMENT=1 go PROMU := $(GOPATH)/bin/promu pkgs = $(shell $(GO) list ./... | grep -v /vendor/) PREFIX ?= $(shell pwd) BIN_DIR ?= $(shell pwd) DOCKER_IMAGE_NAME ?= sql-exporter DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) all: format build test style: @echo ">> checking code style" @! gofmt -d $(shell find . -path ./vendor -prune -o -name '*.go' -print) | grep '^' test: @echo ">> running tests" @$(GO) test -short -race $(pkgs) format: @echo ">> formatting code" @$(GO) fmt $(pkgs) vet: @echo ">> vetting code" @$(GO) vet $(pkgs) build: promu @echo ">> building binaries" @$(PROMU) build --prefix $(PREFIX) tarball: promu @echo ">> building release tarball" @$(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) docker: @echo ">> building docker image" @docker build -t "$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . promu: @GOOS=$(shell uname -s | tr A-Z a-z) \ GOARCH=$(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m))) \ $(GO) get -u github.com/prometheus/promu .PHONY: all style format build test vet tarball docker promu sql_exporter-0.2.0/README.md000066400000000000000000000131531307561357100155320ustar00rootroot00000000000000# Prometheus SQL Exporter [![Build Status](https://travis-ci.org/justwatchcom/sql_exporter.svg?branch=master)](https://travis-ci.org/justwatchcom/sql_exporter) [![Docker Pulls](https://img.shields.io/docker/pulls/justwatch/sql_exporter.svg?maxAge=604800)](https://hub.docker.com/r/justwatchcom/sql_exporter) [![Go Report Card](https://goreportcard.com/badge/github.com/justwatchcom/sql_exporter)](https://goreportcard.com/report/github.com/justwatchcom/sql_exporter) This repository contains an service that runs user-defined SQL queries at flexible intervals and exports the resulting metrics via HTTP for Prometheus consumption. Status ====== Actively used with PostgreSQL in production. We'd like to eventually support all databases for which stable Go database [drivers](https://github.com/golang/go/wiki/SQLDrivers) are available. Contributions welcome. What does it look like? ======================= ![Grafana DB Dashboard](/examples/grafana/screenshot.jpg?raw=true) Getting Started =============== Create a config.yml and run the service: ``` go get github.com/justwatchcom/sql_exporter cp config.yml.dist config.yml ./prom-sql-exporter ``` Running in Docker: ``` docker run -v `pwd`/config.yml:/config/config.yml -e CONFIG=/config/config.yml -d -p 9237:9237 --name sql_exporter justwatchcom/sql_exporter ``` Manual `scrape_configs` snippet: ``` scrape_configs: - job_name: sql_exporter static_configs: - targets: ['localhost:9237'] ``` Flags ----- None Environment Variables --------------------- Name | Description --------|------------ CONFIG | Location of Configuration File (yaml) Usage ===== We recommend to deploy and run the SQL exporter in Kubernetes. Kubernetes ---------- See `examples/kubernetes` Grafana ------- See `examples/grafana` Prometheus ---------- Example recording and alerting rules are available in `examples/prometheus`. Configuration ------------- When writing queries for this exporter please keep in mind that Prometheus data model assigns exactly one `float` to a metric , possibly further identified by a set of zero or more labels. These labels need to be of type `string` or `text`. If your SQL dialect supports explicit type casts, you should always cast your label columns to `text` and the metric colums to `float`. The SQL exporter will try hard to support other types or drivers w/o support for explicit cast as well, but the results may not be what you expect. Below is a documented configuration example showing all available options. For a more realistic example please have a look at `examples/kubernetes/configmap.yml`. ``` --- # jobs is a map of jobs, define any number but please keep the connection usage on the DBs in mind jobs: # each job needs a unique name, it's used for logging and as an default label - name: "example" # interval defined the pause between the runs of this job interval: '5m' # connections is an array of connection URLs # each query will be executed on each connection connections: - 'postgres://postgres@localhost/postgres?sslmode=disable' # queries is a map of Metric/Query mappings queries: # name is prefied with sql_ and used as the metric name - name: "running_queries" # help is a requirement of the Prometheus default registry, currently not # used by the Prometheus server. Important: Must be the same for all metrics # with the same name! help: "Number of running queries" # Labels is an array of columns which will be used as additional labels. # Must be the same for all metrics with the same name! # All labels columns should be of type text, varchar or string labels: - "datname" - "usename" # Values is an array of columns used as metric values. All values should be # of type float values: - "count" # Query is the SQL query that is run unalterted on the each of the connections # for this job query: | SELECT datname::text, usename::text, COUNT(*)::float AS count FROM pg_stat_activity GROUP BY datname, usename; ``` Running as non-superuser on PostgreSQL -------------------------------------- Some queries require superuser privileges on PostgreSQL. If you prefer not to run the exporter with superuser privileges, you can use some views/functions to get around this limitation. ``` CREATE USER postgres_exporter PASSWORD 'pw'; ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog; CREATE SCHEMA postgres_exporter AUTHORIZATION postgres_exporter; CREATE FUNCTION postgres_exporter.f_select_pg_stat_activity() RETURNS setof pg_catalog.pg_stat_activity LANGUAGE sql SECURITY DEFINER AS $$ SELECT * from pg_catalog.pg_stat_activity; $$; CREATE FUNCTION postgres_exporter.f_select_pg_stat_replication() RETURNS setof pg_catalog.pg_stat_replication LANGUAGE sql SECURITY DEFINER AS $$ SELECT * from pg_catalog.pg_stat_replication; $$; CREATE VIEW postgres_exporter.pg_stat_replication AS SELECT * FROM postgres_exporter.f_select_pg_stat_replication(); CREATE VIEW postgres_exporter.pg_stat_activity AS SELECT * FROM postgres_exporter.f_select_pg_stat_activity(); GRANT SELECT ON postgres_exporter.pg_stat_replication TO postgres_exporter; GRANT SELECT ON postgres_exporter.pg_stat_activity TO postgres_exporter; ``` Logging ------- You can change the loglevel by setting the `LOGLEVEL` variable in the exporters environment. ``` LOGLEVEL=info ./sql_exporter ``` Why this exporter exists ======================== The other projects with similar goals did not meet our requirements on either maturity or flexibility. This exporter does not rely on any other service and runs in production for some time already. License ======= MIT License sql_exporter-0.2.0/VERSION000066400000000000000000000000061307561357100153140ustar00rootroot000000000000000.2.0 sql_exporter-0.2.0/config.go000066400000000000000000000035441307561357100160520ustar00rootroot00000000000000package main import ( "io/ioutil" "net/url" "os" "sync" "time" "github.com/go-kit/kit/log" "github.com/jmoiron/sqlx" "github.com/prometheus/client_golang/prometheus" "gopkg.in/yaml.v2" ) // Read attempts to parse the given config and return a file // object func Read(path string) (File, error) { f := File{} fh, err := os.Open(path) if err != nil { return f, err } defer fh.Close() buf, err := ioutil.ReadAll(fh) if err != nil { return f, err } if err := yaml.Unmarshal(buf, &f); err != nil { return f, err } return f, nil } // File is a collection of jobs type File struct { Jobs []*Job `yaml:"jobs"` Queries map[string]string `yaml:"queries"` } // Job is a collection of connections and queries type Job struct { log log.Logger conns []*connection Name string `yaml:"name"` // name of this job KeepAlive bool `yaml:"keepalive"` // keep connection between runs? Interval time.Duration `yaml:"interval"` // interval at which this job is run Connections []string `yaml:"connections"` Queries []*Query `yaml:"queries"` } type connection struct { conn *sqlx.DB url *url.URL driver string host string database string user string } // Query is an SQL query that is executed on a connection type Query struct { sync.Mutex log log.Logger desc *prometheus.Desc metrics map[*connection][]prometheus.Metric Name string `yaml:"name"` // the prometheus metric name Help string `yaml:"help"` // the prometheus metric help text Labels []string `yaml:"labels"` // expose these columns as labels per gauge Values []string `yaml:"values"` // expose each of these as an gauge Query string `yaml:"query"` // a literal query QueryRef string `yaml:"query_ref"` // references an query in the query map } sql_exporter-0.2.0/config.yml.dist000066400000000000000000000063241307561357100172070ustar00rootroot00000000000000--- jobs: - name: "global" interval: '5m' connections: - 'postgres://postgres@localhost/postgres?sslmode=disable' queries: - name: "running_queries" help: "Number of running queries" labels: - "datname" - "usename" values: - "count" query: | SELECT datname::text, usename::text, COUNT(*)::float AS count FROM pg_stat_activity GROUP BY datname, usename; - name: "db_sizes" help: "Database Sizes" labels: - "dbname" values: - "dbsize" query: | SELECT datname::text AS dbname, pg_database_size(datname)::float AS dbsize FROM pg_database; - name: "replication_lag" help: "Replication Lag" labels: - "hostname" values: - "replication_lag" query: | WITH lag AS ( SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location() THEN 0 ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp()) END AS lag ) SELECT split_part(inet_server_addr()::text, '/', 1) AS hostname, lag::float AS replication_lag FROM lag - name: "mydb" interval: '5m' connections: - 'postgres://postgres@localhost/mydb?sslmode=disable' queries: - name: "pg_stat_user_tables" help: "Table stats" labels: - "schemaname" - "relname" values: - "seq_scan" - "seq_tup_read" - "idx_scan" - "idx_tup_fetch" - "n_tup_ins" - "n_tup_upd" - "n_tup_del" - "n_tup_hot_upd" - "n_live_tup" - "n_dead_tup" - "vacuum_count" - "autovacuum_count" - "analyze_count" - "autoanalyze_count" query: | SELECT schemaname::text , relname::text , seq_scan::float , seq_tup_read::float , idx_scan::float , idx_tup_fetch::float , n_tup_ins::float , n_tup_upd::float , n_tup_del::float , n_tup_hot_upd::float , n_live_tup::float , n_dead_tup::float , vacuum_count::float , autovacuum_count::float , analyze_count::float , autoanalyze_count::float FROM pg_stat_user_tables; - name: "pg_statio_user_tables" help: "IO Stats" labels: - "schemaname" - "relname" values: - "heap_blks_read" - "heap_blks_hit" - "idx_blks_read" - "idx_blks_hit" query: | SELECT schemaname::text , relname::text , heap_blks_read::float , heap_blks_hit::float , idx_blks_read::float , idx_blks_hit::float FROM pg_statio_user_tables; queries: pg_statio_user_tables: | SELECT schemaname::text , relname::text , heap_blks_read::float , heap_blks_hit::float , idx_blks_read::float , idx_blks_hit::float FROM pg_statio_user_tables; sql_exporter-0.2.0/examples/000077500000000000000000000000001307561357100160665ustar00rootroot00000000000000sql_exporter-0.2.0/examples/grafana/000077500000000000000000000000001307561357100174655ustar00rootroot00000000000000sql_exporter-0.2.0/examples/grafana/Databases.json000066400000000000000000000361621307561357100222570ustar00rootroot00000000000000{ "__inputs": [ { "name": "DS_PROMETHEUS", "label": "Prometheus", "description": "", "type": "datasource", "pluginId": "prometheus", "pluginName": "Prometheus" } ], "__requires": [ { "type": "panel", "id": "graph", "name": "Graph", "version": "" }, { "type": "panel", "id": "singlestat", "name": "Singlestat", "version": "" }, { "type": "grafana", "id": "grafana", "name": "Grafana", "version": "4.0.0" }, { "type": "datasource", "id": "prometheus", "name": "Prometheus", "version": "1.0.0" } ], "id": null, "title": "Databases", "description": "Database Metrics Dashboard", "tags": [ "postgresql" ], "style": "dark", "timezone": "browser", "editable": true, "sharedCrosshair": true, "hideControls": true, "time": { "from": "now-24h", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ], "time_options": [ "5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d" ] }, "templating": { "list": [ { "allValue": null, "current": {}, "datasource": "${DS_PROMETHEUS}", "hide": 0, "includeAll": false, "label": null, "multi": false, "name": "env", "options": [], "query": "label_values(sql_db_sizes,env)", "refresh": 1, "regex": "", "sort": 1, "tagValuesQuery": null, "tagsQuery": null, "type": "query" }, { "allValue": null, "current": {}, "datasource": "${DS_PROMETHEUS}", "hide": 0, "includeAll": false, "label": null, "multi": false, "name": "host", "options": [], "query": "label_values(node_boot_time{env=\"$env\",role=~\"psql.*\"},role)", "refresh": 1, "regex": "", "sort": 0, "tagValuesQuery": null, "tagsQuery": null, "type": "query" }, { "allValue": null, "current": {}, "datasource": "${DS_PROMETHEUS}", "hide": 0, "includeAll": false, "label": null, "multi": false, "name": "database", "options": [], "query": "label_values(sql_db_sizes{env=\"$env\",host=\"$host.$env\"},dbname)", "refresh": 1, "regex": "", "sort": 1, "tagValuesQuery": null, "tagsQuery": null, "type": "query" } ] }, "annotations": { "list": [] }, "refresh": "1m", "schemaVersion": 13, "version": 6, "links": [], "gnetId": null, "rows": [ { "title": "Database", "panels": [ { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 8, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": false, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 4, "stack": false, "steppedLine": false, "targets": [ { "expr": "avg(sql_db_sizes{env=\"$env\", dbname=\"$database\"}) by (host)", "interval": "", "intervalFactor": 2, "legendFormat": "{{dbname}}", "refId": "A", "step": 600 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Database Size", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bytes", "label": null, "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ] }, { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 2, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 4, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(sql_connections{host=\"$host.$env\",datname=\"$database\"}) by (state)", "interval": "", "intervalFactor": 2, "legendFormat": "{{state}}", "metric": "", "refId": "A", "step": 600 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "DB Connections", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ] }, { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 13, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": false, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 4, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(sql_running_queries{env=\"$env\", host=\"$host.$env\", datname=\"$database\"})", "intervalFactor": 2, "refId": "A", "step": 600 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Running Queries", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ] }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "format": "percentunit", "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": 4, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": true, "lineColor": "rgb(31, 120, 193)", "show": true }, "targets": [ { "expr": "avg(sql_table_cache_hitrate{env=\"$env\", host=\"$host.$env\", database=\"$database\"}) by (database) / 100", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 1800 } ], "thresholds": ".5,.9", "title": "Cache Table Hitrate", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "format": "percentunit", "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": "", "postfixFontSize": "50%", "prefix": "", "prefixFontSize": "50%", "rangeMaps": [ { "from": "null", "text": "N/A", "to": "null" } ], "span": 4, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": true, "lineColor": "rgb(31, 120, 193)", "show": true }, "targets": [ { "expr": "avg(sql_index_cache_hitrate{env=\"$env\", host=\"$host.$env\", database=\"$database\"}) by (database) / 100", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 1800 } ], "thresholds": ".8,.9", "title": "Cache Index Hitrate", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": false, "colorValue": true, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "format": "percentunit", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "id": 14, "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": 4, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": true, "lineColor": "rgb(31, 120, 193)", "show": true }, "targets": [ { "expr": "avg(sql_table_index_usage_rate{env=\"$env\",host=\"$host.$env\",database=\"$database\"}) by (database) / 100", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 1800 } ], "thresholds": ".3,.5", "title": "Index Usage", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" } ], "showTitle": false, "titleSize": "h4", "height": 250, "repeat": null, "repeatRowId": null, "repeatIteration": null, "collapse": false } ] } sql_exporter-0.2.0/examples/grafana/Hosts.json000066400000000000000000000545641307561357100214760ustar00rootroot00000000000000{ "__inputs": [ { "name": "DS_PROMETHEUS", "label": "Prometheus", "description": "", "type": "datasource", "pluginId": "prometheus", "pluginName": "Prometheus" } ], "__requires": [ { "type": "panel", "id": "singlestat", "name": "Singlestat", "version": "" }, { "type": "panel", "id": "graph", "name": "Graph", "version": "" }, { "type": "grafana", "id": "grafana", "name": "Grafana", "version": "4.0.0" }, { "type": "datasource", "id": "prometheus", "name": "Prometheus", "version": "1.0.0" } ], "id": null, "title": "Hosts", "description": "Database Host Metrics Dashboard", "tags": [ "postgresql" ], "style": "dark", "timezone": "browser", "editable": true, "sharedCrosshair": true, "hideControls": true, "time": { "from": "now-24h", "to": "now" }, "timepicker": { "refresh_intervals": [ "5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d" ], "time_options": [ "5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d" ] }, "templating": { "list": [ { "allValue": null, "current": {}, "datasource": "${DS_PROMETHEUS}", "hide": 0, "includeAll": false, "label": null, "multi": false, "name": "env", "options": [], "query": "label_values(sql_db_sizes,env)", "refresh": 1, "regex": "", "sort": 1, "tagValuesQuery": null, "tagsQuery": null, "type": "query" }, { "allValue": null, "current": {}, "datasource": "${DS_PROMETHEUS}", "hide": 0, "includeAll": false, "label": null, "multi": false, "name": "host", "options": [], "query": "label_values(node_boot_time{env=\"$env\",role=~\"psql.*\"},role)", "refresh": 1, "regex": "", "sort": 0, "tagValuesQuery": null, "tagsQuery": null, "type": "query" }, { "allValue": null, "current": {}, "datasource": "${DS_PROMETHEUS}", "hide": 0, "includeAll": false, "label": null, "multi": false, "name": "database", "options": [], "query": "label_values(sql_db_sizes{env=\"$env\",host=\"$host.$env\"},dbname)", "refresh": 1, "regex": "", "sort": 1, "tagValuesQuery": null, "tagsQuery": null, "type": "query" } ] }, "annotations": { "list": [] }, "refresh": "1m", "schemaVersion": 13, "version": 3, "links": [], "gnetId": null, "rows": [ { "title": "Host", "panels": [ { "cacheTimeout": null, "colorBackground": true, "colorValue": false, "colors": [ "rgba(50, 172, 45, 0.97)", "rgba(237, 129, 40, 0.89)", "rgba(245, 54, 54, 0.9)" ], "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "height": "100px", "id": 15, "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": 5, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "targets": [ { "expr": "avg(sql_pg_is_in_recovery{env=\"$env\",host=\"$host.$env\"}) by (host)", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 1800 } ], "thresholds": "1", "title": "Master not in Recovery", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" }, { "op": "=", "text": "OK", "value": "0" }, { "op": "=", "text": "RECOVERY", "value": "1" } ], "valueName": "current" }, { "cacheTimeout": null, "colorBackground": true, "colorValue": false, "colors": [ "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 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 }, "height": "100px", "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": 6, "sparkline": { "fillColor": "rgba(31, 118, 189, 0.18)", "full": false, "lineColor": "rgb(31, 120, 193)", "show": false }, "targets": [ { "expr": "avg(sql_pg_is_in_recovery{env=\"$env\",host=\"$host-slaves.$env\"}) by (host)", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 1800 } ], "thresholds": "0,1", "title": "Slave in Recovery", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" }, { "op": "=", "text": "OK", "value": "1" }, { "op": "=", "text": "RECOVERY", "value": "0" } ], "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}", "editable": true, "error": false, "format": "none", "gauge": { "maxValue": 100, "minValue": 0, "show": false, "thresholdLabels": false, "thresholdMarkers": true }, "height": "100", "id": 19, "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": true, "lineColor": "rgb(31, 120, 193)", "show": true }, "targets": [ { "expr": "avg(sql_replication_senders_count{env=\"$env\",host=\"$host.$env\"}) by (host)", "intervalFactor": 2, "refId": "A", "step": 1800 } ], "thresholds": "", "title": "Senders Count", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ { "op": "=", "text": "N/A", "value": "null" } ], "valueName": "current" }, { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 18, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": false, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 6, "stack": false, "steppedLine": false, "targets": [ { "expr": "avg(sql_replication_lag_seconds{env=\"$env\", host=\"$host-slaves.$env\"}) by (host)", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 240 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Replication Lag Seconds", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "s", "label": "", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ] }, { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 17, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": false, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 6, "stack": false, "steppedLine": false, "targets": [ { "expr": "(sum(sql_xlog_location{host=\"$host.$env\",type=\"current\"}) - sum(sql_xlog_location{host=\"$host-slaves.$env\",type=\"receive\"}))", "intervalFactor": 2, "legendFormat": "", "refId": "A", "step": 240 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Replication Lag Bytes", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bytes", "label": "", "logBase": 1, "max": "0", "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ] } ], "showTitle": false, "titleSize": "h4", "height": 163, "repeat": null, "repeatRowId": null, "repeatIteration": null, "collapse": false }, { "title": "Dashboard Row", "panels": [ { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 1, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 4, "stack": false, "steppedLine": false, "targets": [ { "expr": "1 - (avg(irate(node_cpu{mode=\"idle\", env=\"$env\", role=~\"psql-.*\",instance_name=~\"$env-$host.*\"}[5m])) by (instance_name))", "interval": "", "intervalFactor": 2, "legendFormat": "{{instance_name}}", "refId": "A", "step": 600 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "CPU Utilization", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "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": true } ] }, { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 12, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 4, "stack": false, "steppedLine": false, "targets": [ { "expr": "sum(rate(node_network_receive_bytes{env=\"$env\",role=\"$host\",device!=\"lo\"}[5m])) by (instance_name)", "interval": "", "intervalFactor": 2, "legendFormat": "{{instance_name}}", "refId": "A", "step": 600 }, { "expr": "sum(rate(node_network_transmit_bytes{env=\"$env\",role=\"$host\",device!=\"lo\"}[5m])) by (instance_name) * -1", "interval": "", "intervalFactor": 2, "legendFormat": "{{instance_name}}", "refId": "B", "step": 600 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Network Traffic", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "Bps", "label": null, "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ] }, { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 4, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 4, "stack": false, "steppedLine": false, "targets": [ { "expr": "(node_memory_MemTotal{env=\"$env\",role=~\"$host\"} - node_memory_MemAvailable) / node_memory_MemTotal", "interval": "", "intervalFactor": 2, "legendFormat": "{{instance_name}}", "refId": "A", "step": 600 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Memory Usage", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "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": true } ] } ], "showTitle": false, "titleSize": "h6", "height": 301, "repeat": null, "repeatRowId": null, "repeatIteration": null, "collapse": false }, { "title": "Dashboard Row", "panels": [ { "aliasColors": {}, "bars": false, "datasource": "${DS_PROMETHEUS}", "editable": true, "error": false, "fill": 1, "id": 3, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": true, "total": false, "values": false }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "connected", "percentage": false, "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [], "span": 6, "stack": false, "steppedLine": false, "targets": [ { "expr": "1-node_filesystem_free{env=\"$env\",role=~\"$host\",device=\"/dev/mapper/vgdata-data\"} / node_filesystem_size", "interval": "", "intervalFactor": 2, "legendFormat": "{{instance_name}}", "metric": "", "refId": "A", "step": 240 } ], "thresholds": [], "timeFrom": null, "timeShift": null, "title": "Disk Usage", "tooltip": { "msResolution": false, "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "percentunit", "label": null, "logBase": 1, "max": "1", "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ] } ], "showTitle": false, "titleSize": "h6", "height": 280, "repeat": null, "repeatRowId": null, "repeatIteration": null, "collapse": false } ] } sql_exporter-0.2.0/examples/grafana/screenshot.jpg000066400000000000000000007562351307561357100223660ustar00rootroot00000000000000JFIF``Created with GIMPC     C   Yi Do+[WSc. UcWlޚ޿&x52Pu,ٚ՝Ho@<~?K/:?}i~**dDZP+N~;O->AikwK=:m۫Lc2_}~?Uߕ~XjV㍏7-߳۫|L3+fި[c} ':n]*,kwsKX)Z\ٗXRBe=[vY<ۥ}f9ePddδ"Ҁ˦:.9mFl9uo%8aJY֣P"JӇߎ(Y~R~OWMǹu~䥟=~p=U5o=Ii@y۟kåصsvvו=ql:sc+zhsx"JӇߎ(Qx{ƿUsoZ,Y?v8Ԅٚ"HJ{dV՞gUUW6<nw@E?W~u+U;qۈ)Tq :Tbqf`ff`$EKh7%k30f3Z̫"JӇߎ(hG_9n|`c}n6;q?75!2ET d&! @c" 1DZ]M6ĘbLB1:y~%si~O_yg]W<_4{ƿUsoZGuF ,:wvcu.^WY)Tq 6I[%&! @bg9LB"<Iizs`h\8EbLBsИb榴]{Dxw g~ <=\_?4^~꿜[0E9oϫr~[:wvc>!אO꣍HL1ڧ Y+ ٍ.zLt~ϣǟbg&&!Dx"Dr_>VbZ @9:O?cgϟ=g&y]` 矏;:9hG+N~;վ>Ok_}~{i8E?W~u+D'{N}WPU;qۈ_H!אO꣍HLZl dtzǛv9oOp/)_Mu>nt~<ߣb$"D&+ВLI"i,g;whms-kn.5|[)>3 .zΝ6XĒQުkRG_ގ>cDͧ?ۿPucK/c5~^N| E?W~u+~ރ~g_ڇIkq>C=Gaۍ@ ĽnuQƤ&P:sdrwxzxOO<=<zxzxODZPfYN>[Xǧe;rLDt22zf؎ܓO h$m8y€~5W~W:wvcSzR(`q:Dמ쒪4to  hWnsf7Ϯ8U"HJ|Lzm8vE٢4 N̪\4F>0;2)N@ӛ]W6<nw@E?W~u+Uڳ-@aT Ⱥ` f+il aHdm %NVܓp"HJٴ!-o!(-rdך  lZ9D|_'Ǘo:\Șd !e@IJDZP+5y{:鋅3g\!LK )AўW5l7>55DZPuR\e=7)O.l)a@j+w]Ii@uIζOGNS7Nzos1t%%rR€)a@$-@Հ%rR=<-30ff` @!LK 3;Dךe䉌O 30f$E W\H` f$JXY L$d b @11,( ]O=n<+v+O}Y2Aw42 I2X6qE56YDySD%G^Y첌+$­s.AgsZG,5Iid'SbLB @&! DK @1&! s^S€:h /oXQzXᝂvk39Y5eg%e"Ia. t1"HJ6DLB @1 )aGbZL漘bLBGߵk@  %i6ILѮbv+ Gz~q $-%%ݧ$rLB @&! %rR€bLB @179T޵6ϭ_ &!%؝75g |7@{|@1"HJly=OOA)W֥b#<=<<=$@<=%" oNP+3k .zH/5],ILBocW1ו,s5fEhwǔv:?s a@{\ݺ)aoANM{D%g {po1"HJv/XxzHFR xz@%XSxz $d#OWCrpDK C̹iC}#CgsV% u5_U5gk{ Gz3mKrUTg5-1Q[o9u锛\fZ~G 9A}m0kPcIۮq爪Itݷz;xSuF4NJFxLB @16zP1"-(nNiώ͉ V$U V${$z)a@apIq)|`x,/Y";"ܛ@ǔƽOcB=k WO.qڠfO`y@afr%Rskҥ@!=<#DY@+ؙ@fhHkd"_O0;2u187\]`!LK B3|Z.`udvɫ]s/a7ί<rRdѮ:խЮ$E`茋]0C59d@XF`vePno9٧:DK cr@Nk `׀=:R ! ᙙ )M)!LK ܈рĸx S)f!*fhڃ#^k)$FS-ˆnLKրFF` o Ho x6&ȪX5PDK %"ҀI\:c:Ye$zLo2g\𽗼[+ow_?kz5:)v Mr)a@ϓɎwWqߍ5bMf:hw4{w=yw|WA|W~Fkqޛ-s(Rvzsr鞦g޻sr;56l9YMtj=wϻIDU^Z&;tu帣Vp ЩfNd KJ"!Jĥ 9wF,yvv/T1)%5ѵ5.YmI\{.t힃:F>@+bP ǀ Ihf<=2+I\ЧgA! B0`$#! HFB0$f!!O.d`$#! HFB03.ZqB0"J䥅 1 @LBb &!1LB IhFV @LBb &!1l=6LBb%rR€LBb &!1 @LBb&!$f- &!1 @LBb5=z^r &!Dx)aFܐSLBb &!1 @LBb&!$fHl@&!1 @LBb ٱ4M>@LBb$JXQ^ @LB &!1 @LBb )%5N/{cX"XYM#Y[rʴ2Y9|&?qbΚ̘X,k(m=fL4ZMeb.럂%Rɬg,Y.uG;7ƹɍөiՃ d,ks_R\[q\~T5!ȃ%0ad+';tӛ^|Nu)ӛ^|o#YS]to'80:DrNqt`|t[.o(,.tERr)a@ ͑)0bxjN@jl XސV'7ER"RL[6eRC^W ɍICPՀ9"<5`)%53=!5X&,6&D"#rH\. E p E hDLkѳ+zY%5`h`Jkxו9")a@%"`C |њDk@@JD)$G@)@)`%rR€;gY%Is$ކg>]3uw {Qw+cyEnvōcA޹fZ3P6s^=Z^lg׍c]\+qӐ˧^mf|_)?ui˿7ӖR~;td)5n=usYuzSM4U"n{=dIql{}lkV7|_sӕ~~~\l.sAjMWk69wny$JXPJ\#ee$5J5\ze^mC5%XX$fsxǵ]BC]btXZ2duj.Lf2k<ͲijBk%j\ηb" A42͐VY _^Jlg^Y=gU$MGfd͚iei`2eZVD * @gff`X=ַLwf:;7{痏ףV(EY:۝7jyf7wL$ηӴΖuC->rڀ @ gXX%̳$ELB+~k]"-(tc)14|덯-Qq^Ƶ9|p+,YjA.j23mk8.Zİ jqޤdCkiW7F5SP"-(uqKO5vŎ=5X֞M|G`W%,.ܐȶdr bX])$Er%rRHܦg bLB @&!  %i5@71 rb @1"<IiF؜!1&!LB1"J䥅 b @11,(6Ư{J dH%HJD O]h"-( @1 b @I\%31%")JDAxz HY`B#*b H)@R k7(Dy!1&!Nuz$jb /Pb @W%,/DnR#QfHA=<G/G(R HLBioBo&!LB1&!$EܐLB @&!" '5FE3`\9pbW%,,ҩxIo9R JD)%"(o`BrzR3版@&! LB @G{ƄIi@T bLB1 $JXPIo9R JD)%"(o`B5G1@R H)5"HJ!1&!LB1"J䥅BBs)%"@R JDP1,(aLB @&!"ҀLB @&!DK ;#HObLB @1 `Bo X̄`B0 $#`cB$0j1&!LB1+[e"@JD H %'rDAdӀVxS dӀېVDZ]ɳ292BbLB1&!b#DK I-2R JD H%"@ S` Ӟ]n΍(>x詭[)(:T֛Ү>xiP"ҀLB @&!DK RlSْR JD H%"@zİDZ_Mɱ9bBbLB1&!b#DK Ɏ` bXP4"HKl^9$JXP)` ptɁp^;TWd}m9EۥCP);% !LK |Ls}fz"HJi!>xVqNtI^>t'0:sKJwIǮ95 $JXP"2dZ0&*,Jdp̌ľʀ%"Ҁ$6C 'de`@]  LɊF lĨW2%3P00&3@0<$@10%,(B"HJ%rR€&-q˦bhSƾS=6/ bXP|m|83}kespIY{rkDZPgMwizIyk:s@)a@mΩEMM:l{s9KbBnq:+)ou89[^ٓL5\DZPj45F -n3m&sP+z6=O ;n7~@ <]u^?erSaۍ@]lv<#aӝGw\vc!_þ&÷.8wtkOSb]/__yun ~C>e?{\;w_6|_N۾oO/(!ևz<3NG>A?a_|CO;|u~ρy5Mn6;q:yeux/m^]ˆ"޹u>`.6xF4_On>Уq}3}z΢8C>`.8wtk{:σox߽wS~߇/OsKD}ɀy5Mn6;q%玛|8~'܃M'c')<!_þ&÷O[_eKżq?~%oyK;oyuüFç;^8|霟ygѹ=q|I?-|oO?'a|t7^R=Xcwu}x:ymq= x޻Jl;qۈaۍ@Z;l:s7zklvrg,ۼ` N.Rd?pJf_y{m.ĕ1LnV!C, qq8H2a 7#l( 4ʸZdڐ}"Ui4NK Gn1kpɵ|_kƛt(YȣHL-<"džMYr;i10`HiǥOp͸0$I?RTWVKnAY4(t = %D<}Rel{#hO?G<{1Cݭ[Kug)P1mf87xw9Lm %aVpN[d{| ku-0^[ݼ8V¹45ڋ ;LM`+.ot }9 o0gFŬ0ޢ X/<H;ĿQl{2} 6uq=mxKt}Yq1tAۅh.4Kꀖa7Ctȳ=E*z_kJ^:9j +PVAZj +PVAZ/rsҼTyFhd$ȋ(+_Kӿ/ =;*HF kk֜ p5\ p5ǁkx5\ p5U`Nkik\ p5j*@'WH E# U8kkk\ p5\ p5T`Nkkcp5\ p5\ p5N`^kk\ p5\ p5ZJ^?G/_1}U텶B5m!Eg_A9?_/LVxDɷe Z!9v??O?/>B+_!O>RDR%kH lgJ^ѵuC鹅lkrt1·ڍqRV!PU UMMӲ}>{/D1G\Z 1.2oW|1;i;=-Ց{- y\km#n?Q;{1}Qp};'G=|~5E9}+)U®$ӿ\}A>'g=Vp;POj'':=R>/&wOUϪs>zb\.2=w|{z'WsEg>~Vp'p]9}ApjnqI/< ~?3~_O_??mtR[d 4klbCb_SL+ro?/{<[hIƗH}MXnn(Tkk\ p5\ p5\ \ p5\ p5\ p4: p5\ p5\ p5եtY:w\ p5zcYbkjkk/<ѻlEn<[|pH~&xB"|U?!~_ZÒA wV6<:i΋:,賢΋:,賢΋:*>s΋:,賢΋:,賢Ή9gEtYgEtYgDvtYgEtYgEtYXFMh9gEtYgEtYgD賢΋:,賢΋:,/)G=Ϻ1|QrhM ɱ*ݵ B2FF ?!~jA,1l7EGNtYgEtYgEtY1:,賢΋:,賢΋:,etYgEtYgEtYݝtYgEtYgEtE}2΋:,賢΋:,賢΋:*s΋:,賢΋:,賧H~OO3*cqR?/y4Krs䈃}EZd=1۸q-[n"EqLn"Eq-[n"n"Eq-[n"n"Eq-[n"_Rn"Eqakq-[Pոq-[n"E_yn+Wld$%v+I]JWldl{d$.!v+H]BE"lmk\$%v+I]JWld$$TJWld$%v+]JQ-*!v+I]BrWld$.!v d!v+I]BWldՎ ͫC5 Z=DtݨO3H^+_H"⩣s+HBA9ۮ:;Ӿ q֜VDV/GNWn ']"6EcGuP{xkkhT| p5\ p5\ p4: p5\ p5\ p55\ p5\ p5Vk!hZp5\ p5JW\ p5\ p5~\e04J-w)K]Zrt-6+-w9k]Zrs%-w9hw)\9k]Zrs-w9k]Z%^-w9k]Zrs%-w9i)Twr-wIk]Zrrܥrt-w)k]ZrR_??d;ScnJ6(:,g.!F'ڌ/=.HfP1 ɍQ Gldxq#e{dV ㍟1rjMh=5r {_?9N?/<ΖdQf|LD~~ SfiwʷկyWwwʗԭ/SNⷹUsUzsѮ.})'p]w\}.=:9ԥ}|.p]z}.=wO]zKS]z|'.= }']>z|w];g6nBxDĢ*.~>DsۚVQmUmVڭ[jmU[jmUmVڭ[jnrUmVڭ[jmUsڭ[jmUmVڭ[mUmVڭ[jm嶫mVڭ[jmU_y!9.lA)N"ꈺ."ꈺ."ꈺ"ꈺ."ꈺ."ꊺ."ꈺ."ꈺ."UuD]QTEuD]QTEuD]QWTEuD]QTEuD]QTEuE]QTEuD]QTEuD]QkC[Ί1(!WK`$VP7re,Ytg,8`Ƒ4j㒲C% 5Y"zw  LXPV@J{0",Z#<`~V*qօ_1Gcq78q"l\{G'$I͕9ڢ˝1<u;$ͬO{,->`F dr@["tk|Eg=FҘ#|f,SùcxۣX $A5'EÉ$C=G2Z(PbՇ_9(B+153,zb;" jF蠮5;KNb$Lt{_*cR]H.?{s^zFG-؅ ؁[p|IՊM.U $w?_ExǎAb:7R']Ę/pԲqozpG3jt[ަ\+,~_mO{"MoDMKt2V^?dNoLIeơ/y}2[K)$'6 -ūnli7bIb618y )݉{݉LOd`ݪ*veb.GB0t/#/i~_yA@ {$ll̙jm#SX[PvLLZuUgnz<bBβŷE$Ȳųīdn `ZsgjbɁ0- tY./e.%nأS,Dub*ر3j* iL6N,[Ę,cFN4s/ w)oN ; Ose˂ a5 ,S]sr౽}Fgm#F:+G9. f6k]+G9. jkhFGEwcZeudݙ-v5Z&Z,wcZec0A&Y-v5Z!*w`K}ݍi }[4 r1cF+՗yL3?#(GxPBݥ֝rl.r}Yۤ}A#{d^q.J4Ύn/yn&25YԹV\Jy,{#J$B2-) v${"4*Y$72){G"\Ak.rGWi!pnҁOhrI%/2V\7{,mKc @[̉uQ˸wy֛]erm["^%cld,,,dV"-AKIJT$Aܦ,,$ KI[DK74D+/r#:T$Y!dJ$V&UM"A%I"i4?syU4odi$^+osRV* .R w.b'H~ F1_cq_ ⾴⿇ oANo3/n  '|ˆ7Y~bEA%wåؖZmy! (qEd8jtXƕr2c+=&Os· Ó.C"  $A,#i3#${9Kl#˿Կ3l cvHk}k*@["[Zp$\ ~Z(tvłGOB85ɭ,F4lHl=8XA'iABE)v|zCJõGdQJ:,HqZXzْh/t(d$lKkI~-j9 !`-"A($ F3:Q#(Wj!]&!]WK<=te4i!V=TF:wL/Nʓ$5:1 bH!uf]x11!l4Gx'I1\e u[v/R-y^D&zl,u.)$SdG*tc'Qw)b!?m[q:LtG[c&1AȄǙ{)c#.j:sW]YFzJe$I4-;|eI\eqw[/Rm^WVI:Kk&u# 2eO>>T"6D/exvMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVMY5dՓVM1&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɫ&jɨi܈M5~0udIoOK 񅞠}`hH2U.imzhm6pw&X=|ClM\bטmKVye"ܭ"s# dU`{9?f6WRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRsqMUԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԜU)u-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ-KRԵ'31# "K[WpLM4$p^{u1!N)`[6x :6 ["Xn.=9;u\蠎_xqZ->?2p%ǵ[.+pl öۭkk &oҶHnwՇrLѿpV ڣP ]$VsW2dXW+ly$~$GY\( ]eOP8ߗǛ;,-`xcw *OS'Էl ̻b 4_POF2Tɦ~UDh%4%+61isF3%|*5 K~7ʖY?/<0#i^ 3vަ6H3kQM)w_P\ w{iޢIː/Y0[:@Y C8-͟:`iGI~Al%KKj!R[G *@o" Qҵwq-[n"Eq*wn"Eq-[n"q-[n"Eq!n"Eq-[n"E&[n"Eq-[beq-[n"EB،"U\%2Ylzn"Eq-[n"Dn"Eq-[n"-[n"EqGX4qjEq-[n"Eq N7n"Eq-[n" q-[n"Eq/~$Hk.q&[bnEq-[n"E&;n"Eq-[n"y-[n"Eq-B12Eq-[n"EqLM;n"Eq-[n"1q-[n"EqkH~|*o/餾LE"iZb-1LE"R@=1LE"iZb-1ALE"iZb-1$a鈴զ"iZb-1LE"iLE"iZb-1LE"bliZb-1LE"i/<<~7B~3~H~~mmmle-vk]Zml[l]Zmle-vk]Z-vk]Zml&.1vɋLC˶L]bld&.1vɋL]bm^1vɋL]bld&.1vɈyvɋL]bld&.1vɞY. -|3^q8b.b዆.b዆.b% \1p \1p \1 φ.b዆.b዆.bᚸb዆.b዆.b዆'ы.b዆.b዆.Fm዆.b዆.b዆'~ 5T<2!mm9XQ݅XQaEXQaELe1‹ ,(‹ ,(‹ ,(cV6 Li4H,Qku<-3X{t0M V\2)d·gY(‹ ,(Š(‹ ,(‹ ,(ˆ̦(‹ ,(‹ ,(/p1d)PbKn?&UDs7,ܳr7,ܳr7*ڳr',',rʏvܳr7,ܲrʫj9sUW5YUsUVU\sUW5EvUW5\sUW5\eUQk\櫚*jcA"0(©JW|d7|Bger=# &xoeH*if']:9/s V^N9/YݤIIn^eY%\E*_|CB;™s8”PKĨg/_S|B~"|C m|y '/?/<=!w?:߻/H_WO 7~j"`Klnz_s[=nzsD+s[=nzE~{=nzs[=nz[=nzs[=nzy^=nzs[=nz_s[=nzs߂36>o T{kFkFiWiDrE/<#`4D%H.x) &" X Z% Ң-'P&`j Y(llEm_~40VڣmUmVڭ[jmakڭ[jmUmVڭ[jZ㶫mVڭ[jmUmP\mUmVڭ[jmURNڭ[jmUmVڭ[jZUmVڭ[jmU_Kg/_S|B~"|;;" uEI-$ZHi"E~:Hi"EI-$ZHi"x-$ZHi"EI-$C$ZHi"EI-$ZHTOդI-$ZHi"EI".-$ZHi"EI*ӏ~n͔8wpcы??s!1LMvg6փ$H~~AEhm5QA0TŤ?зN권c i1qCys9&Z?AOas} ZU-ƹ??/}Vh1.5%<(Q(ݵs |mtu~Qms_W>k۴sp3U #dԽ+X}i Yr$&1I$aOb:YK<{,涓6YgM$/Á~_y6:-|6t7?O6IW1jY I,{ܥo_'͐t,D |'y_$)(bPa%6EkWW՞:Iެ?_]jڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶ6jڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjsTڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڶjڜ5[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nUmZNk[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܪڵS[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵkr[-nZܵUo~i~_??%%=#/u-[[-ޗoecZ^$YV[+}+[d: .DE۷[|_}(˅:´"LBuè$gґ&ۜ1z^,7X-Ցffa]{ Gڠ@ґcL'ӶȰۡ[.=-a!ȵzd2}<H}}-žYanĸɓjoXq?/-|,=E*J~%V˹H~x_UJޞ@7ԲZy0N'\PJyBz\E~.%a,t5!'LRi5n7SAED_?\IC!TzAd[d^,7RBZS#+ʓЯ@&zkDr2E#~_??4LM/i~_y9o"Eu[Ⱥ]AWPEu[Ⱥ."Eo" ]AV.*Eo"[Ⱥ" u]APEo"Eu]AV-]AWPU*Eu[Ⱥ]APUo" ."Eo" ]AV#i~bo"-]A."]APUo" u]AV.yPUo" u]AV-]AWPEu[Ⱥ" o" y.*Eo" -]AV.*u]APUo" u]AV.yLv-[\9nrs[޷o"Ey-[ȷo"Ey-[ȷo"Ey-[ȷo"Eo"]AV.*E* u[ȺyPU" .yPEu[Ⱥ[Ⱥ-[ȷ9ԫ /~bL/~//_/_3^_o/ _0%g_?1\-J82lp:I{vRmt-Ujw~b3垾vڭ:t[%mbKuzZWb 50[mAceZ1(1&EmQYrD ِAIw|!lxonӡY Rc}:l&]ŜZ%MI 1{nA/+:ˡ}G:WOJ>dPsa%NA.ZqLK[]|K1y}UbgۺKaBVҒ2= HQ޷Nn|!]JȔ$01np#3+43l-/Ӄc7\;岷Ki֨zo7O.ml`x{h:7,ߗĿL_ύ^jk<"hՍNe`1aָZS?ĿH~bV9}=#yҒ'M#N$VY#ք#HY4F._?1Ŀca|K1yĿH~bL/~/bK~__/<!0% _y-%C煕VUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUs/eUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVU\?VUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUeUVUYUsT_][hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmDd\km-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[h+vmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEm-[hmEmߗL  !Q1AR"aq2b 03@BP`#4pCr$Sc?<>&ƻ0XCBalOp j3g5>7F*@ٿ;~E /:M6cQMjR"~rPkb`,Jgm5mԤ@pڲ@IfDžL#m50NG%Bo(d')H;`#Q%#⵨z'':ȕf S.Pa&[hjDivJ#~x&&KQ\dv$L [&ܧ J? >V`n;a>'?*X-c8Jjө*JlkZ'ִ*K<y.*C) s! 豬iPwRҬ̪ײ}+1ZCNƀs'bCl4A5vPӭI- 8D#YG}0m$<HzZY)ciŭ}57xSGP}:mF|Tni k#p E1Vd-!9_3? *miLmySƶ :Z: gejA̮N-ԩchc b !@]VhR 8:֜DIfV !U|k!;,&N{RT~4L9=i͖{SѶ8&@HO}>'G|恇S3ةX96NN'P;1)i~̗kӂsy.p(^vz)˟jsppN-28qVV2uئ9\j{ ޓԣoORt9Z2 lT[`ۨnw2?jw{BcLScd`'8T +V¥ɺVMfSULԴ3(@`1\!,` 4 2/\Fm{qJ i؜mZ1L_Gؿ-2ҵN~vx)ã '4ݛQoj\ϱ^|\ϱ^|\+ڹbWr>{W!Wr>{W j\ϱ^&[.?jx3c0?#>mxSGz?gb6~vx)ãmfT=۽6~/?qBs ͕ 6^?IFO,;x4[OqgNS⯡Tm*; UN?p?voOQ #wߢ x?vi>ѿ_}ƃayn6*iZ%i^ STY^1޴+ G4[Ope ;LڗtB~R^)U1SujA{WCI&O4ݛS ~ ;iWR.Biⵌ}$}&@biC4igO.4(v]:{=Xvbto'~~ߝ/ }ׄ)W'a^ ]Z*걐.[W:{5~v}CuC=v *OwGА k +a VJ8mM1N|jVڋHJq@;gKLlV\hFhA()Dj،īa㎥x^VV·ʝi0j8+|2kL+d _bNv,BJ>ťipFol*muVg*KHaϿ-1M"S&"S|3MRu KbC-)ԷOo4ݛS83 V5XjaV5Xj`+ V5XjaU5XjaU V5XjaU V5XjaV5Xja~U7%a+ XnJrVܕPP+#%@P(8P(Q`x@GGؿM~ߝ/ }@ٿ;|U>G}-ɴݛ@:Ն V5XjaU V5XjaP f4>+>O4>+>O4>+>O4>+>O4>+>O4>+>O4>+>O4>+>O4>+>OKS-+A۵ >O4>+>O4>+>O4>+>O4>+>O4>+>O4>+>O4>+>O4>+>O4>+>\ScAY [FD&6hec<КVyIָSi1V֌֠vB&^u kv9hSǵ 憼uA(X: O%m_YHá}[~~{yZ!B&hWᴞls*9VBo+Ro+Ro+WAqȠqȩ fӳ i1gSxaT?kg8GR1- 긔\m=JW5qGY#cwQ@X` 4V}6qZiǬN=eZv( YVzʶ֭?xYPCΣo`3҃?*ӷYV߼zbX YJW.}7uiǬO=eZv(S=KYVzʴU;x-ǬN=eZv?HWکaMCJ<M ԇ/ҽ6t2a3Bɉjoϣ3m[njsVڭ[jmUmVڭ[jmUmVڭ ն歷5mm[jmUmVڭ[jmUmVڭ[jmUmVڭ[jmUmVڭ[jmUmVڭ[j߮$ P >7> d*~ӜcdIsu } O菡Q:ҐL}@tt6:~]zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zW^5zD?[`(sdK$&EK!["hNh1֠):dًh< <`ljz;UuhJ+SQdPfهα<>}la=lM86~q+eƒhY֝F,uK'-;o( C}ɿvIhdMCG7gxOrf6AɾHqچraO&~N_؉*Zq4ַ'Mu$Cʵ{Gwxw?~rCgF 0 l9VQwx`S5-#$׭ :ۇpP">qN$ * SDWu0J8 ܋SNdlׂ܆c ev\?PSyQ!=aUW1r30hHTOb,lO^aWBo(g"6MG>"\'P ۭ3hC5Z^4mSNd$r?$#g%TȜ} 4eKC#[Du ;u!h$I/93mSF$dcx2`w3hL⋭47wr IWX?#꼐=^Δ+ì lax;ÇjXJǶbz8a1ـǹn#'ίiܯ>g}鮽pV]UY Z;3{;#= `_NlOzzc1|ʾ_!Kw~ 0q? Z5o? nc (X{a%9žNKKAm]a1Ͳ*?Q )kGEf{{W:w>[mM2 +G^{=V;6Gf$<=ˁox _9+Mz^Imà.Ho+Gduw+cw+n܍Jm<tMs 0LYNS zLm`=Jjc}|Vp Av3 p|'iT 5)մpS-'قlupV-p 큩^'{E?L`]4Ȳ_4U~\.8dGPWh:z>:x MCxf~Դq N =mp؋鍿5q!zϱZk"[`:mXe ُá^R-A~-RRѭJslإ? ǽM˒4N^SuεnGyK-NpuigǯԪjl?`PAL`!ZCw|&LZMȀuÈG%և?FogB{YY~?g9bx=1Qi`~pFp ;>m>$Nhp^d[H',:SSghZ0g_7B7B7UЭlnlnlnct+ct+ct+ct+ct+ct+ct+ct+cu[[[[[ VV7B7B7UЭЭlnct+cu[[VV7UЭЭЭЭЭЭlnlnlnlnhnct+ct+cu[ VV7B7B7B7UЭЭlnlnlnlncu[[ VVV7UЭlnct'lZzMۭ>.-cߗr,ZisuwDk`+}ix1*$t5ύXGvڭsFsUHyՏjw3hf!ށ$H!8dx=ďb2րq?8*fS77Wk-.A\StťT)eyN֛.,oro.:O?0stqfg;]C1 }GN8BnNxܦ)ah 1osUwJq -yٷUs; ]xLŔ۝ܶ0?Zciҩ]#̜~zӝexRslq-oh̞§lDŽcGgzyϹ33JD#xFe"J6@luӹrd֫:YUdd*9l̶Yإ7 s$rlC!j{6-bJ36iniFr(A+Z`UG[qvf|P5#:GB1>!B@~=lkũ@Ԏ:b֎3;|[gF 0ԣziN0S3ڎ$4a)#_ñdO?Ju.K\ч Zo5ǟ%3 M̃y--'ے?nW`UM(Cq ϭ3W$5g\%j&LbV;'eo(kQ8*\N1Lhs#UG4 e=HYp:ׇD0[vKCkd=%l&q)ԁTwێjȧ2TWS駒8$vGܜ K8U Q)qM+alSzQGވT%GU065hJ]ީka98iT}[C 1:pm67ވ-Ûrl20Ȃ sG;QvZ)1Q}%?ɈأQ2ԛԣ2hj8EMj-hd3*5s)$kGS_q$0̇&#aj$@QnN6(,͊*Yȟ.ZL \\\\\\ȂLr)r)r)r)r)r)r)r)r)r6P\\\\\\\\\\\\\\\\\ߧ jsVۚն歷5mm[njsVۚն歷5mm[njsVۚն歷5mm[njsVۚն歷5mm[njsVۚն歷5mm[njsVۚն歷5mm[njsVۚն歷5mm[njsVۚն歷5mm[njsVۚeB( ( ( ( @P@P@P(QxG}Q8Be c!j:8&eS)o$8gN=l9vw6MV72 }@{*fN}ی:(7lMnڱA=K0U7ф!Z̈LvpvS97ެx=*'j0vkB"uƲa3템&eI:9>SR7ܜ!`iΉ#bh=gS'p߶H~5OMiE ySB1 2)NDqGz`wS-vuAUpqnTv9/kYNk`:r֛[CQ=zf6x6IsۏdD"eqI=/XBm,Yu&y8j1v(u+SCFOZ!Xw{1≒v:'.Vp#aS˷o'Cf?Ds!Y86$;6'؏,JUeUۭO.GH/YtJfJ+dYfJ+dfJ+dYfJ+dYfJ+dYfJ+dfJ+dYfJ+dYfJ+dYfJ+dYfJ+dYfJ+dfJ+dfJ+dYfJ+dYfJ+dYfJ+dfJ+dYfJ+dtf5*+dfJ+dYfJ+dYfJ+dYfJ+dYfJ+dYfJ+dfJ+dYfJ+dYfJ+dYfJ+dfJ+dYfJ+dYfJ+dYfJ+dfJ+dfJ+dYfJ+dYfJ+dƵ+T_lf\Wm4>5iW)Y^kijC콪`* mS nգR>2CM!+M3 SyEbdM_M\$0Nt\ȴ["ڴDџ cx+Cf55s'GGº% ЎcKG꼉}MGhJs7Ncu?h+F}/1h}j)Tlz_BhU*t\#|BZefVp,Ti9-8GTҲ;#jCBJrqZ>4=~:hj-'^ڳ LƎh!/8{zљZ=[t&ij/ 4V^2h/HK,J4qNumZntB1 SWoZ%x JRZ׸*hʍƩ3KE]:_1a/1-'Zk(BځN3DPThشYH_1|WGg4z| ޛ{mJZt%3i=([hz_B-;r%h,/yUQ8%V-Ң0U*Gh[؜46rZMZƩOM&W0 UjO<ֻIdiQ9$Z}_KNO^ Z;v9DO 544V额a^:]Z`/mWzU7BsKjx,|'M_Eu]{&8x+O>ςRcM?:sK #J.m&n/NK :lҥT>HOF+4x?@>UI zn/nl꟟b(: =.=/S XSt ! 'T8T)A9\S(ֆj{mR-[EX˕*,!Snӊo4 ZFWI3PMÂ*Cl2Ѵ+SU4jo40VVҾЪox|L-'I~oZ6[EKHҪiNS zu5~Axbt3ޅW6u̦Itֈ!Zg8Y2 AtkEuZg;K4{>*zC*)M9 gt-3V,v:M։VЪ^87:V˺7} )O_ьOє~SWz_Bzu?FS㩫c=/Se=~:)1ЉP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Ĩ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( } ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( }I!Q1AR"Saq2Bb #03@P`4pr񀐲C$?[wV/0`Hd&T1]fN|USܻ K;)P#N1`C'>}(~*73~^g^έ~auitOplL3 ڗ77ӊKa5[HYm#[enŖ5[HYm#[enŖ5[HYm#[enŖ5[HYm#[enŖ5[HYm#[enŖ5[HYm#[enŖ5[HYm#[enŖ5[HYm#[enŖ5[HYm#[enŖ5$`DXQXt,زFbi݋-kv,زFbi݋-kv,زFbi݋-kv,زFbi݋-kv,زFbi݋-kv,زFbi݋-kv,زFbi݋-kv,زFbi݋-kv,زFbi݋-kv,بtH!O?e6ĞFE|%`^Shsz&GT& 7E@"WXgJ3(2t؋K]TQpL:tmg'Q8Vn]OY:7rs 4/G?z:,.K4B`;t᛽d')h:Q]2Ocњ+'ެ"T+ZJxsG:F64h8U!Pgo?A r*^7b.Q>yĻSԹU4*brN}Pr4Z'ؽ.@O8_7cМdȇKDр(_9h^v!"49FS-k$l FSBқ' qQrЅCgOGLms$ pcٻPx`nS'][R5iM.tzw#NNz&ǡNT-}pP br??#B2dOVCh$B48ɘV;тBZA}I!V ՝o #Ca9[z8huj[3 7/Qb5j ~ Ĥ#s&֠c1U""W{WO)i (Dk:Ǿj-%79!xu]q3-3C}zap8բ]]h_7Ə7~u}] ;Lt^H8K@) }k昻䢾Ij}g%[ѹ>ؕ9 ǠO6LYJWuRDiq Qc5nOHhQM..dUiB4Umvީx*u4|@ijsjm35瑙ɧ2}0]'7@0UqD6'<8ޢAIiG@WʭmJNtƽOPhoo(K\h_Ɵ46޲Vp*%Yī8Xg bU,JVp*%Yī8Xg bU,Jxo}$)}ʗf#O?Phoo(;|iC ??MB4yj/~w7G0hc^r>N0Nia $vWiLQ菣 ގ5MCюy(XD.Pb<0iQʶ8;|iCd??n~5<߆k7!JFɡ (ttɚ6vGa^N{m\u!(_7Ə7~u~ɰiQ]2P-~pʚcCr"$6迹S) l!;|iCӜ}5?Y/w7|w&a0ͳVk>IP>}xtA p`pS nuG6'*=!ƹF` |~xJ{ "P{>Ba-t*Vޫ1@t uZF^MCȘέVO&@ɼF~eh~b`ZiVUsЭ1OuЭ:ZA?hN`kMzB }FHug*%2U4Pb: ۡS)0i 1  _Y\9mQ\*P!Ek΂2Am] MgV/Oh??YTjjffQͪͪUUF66YYYfQͪͪUUF6ڪ7fQ͸+666ڪ7ffffQͪͪUUF6iQ*YfF7f0UF撪R pRH) < AH)$<y!撗/G?z:&~|t5 ގɨ_Ɵ0$fUʮUr\W*UʮUr\W*YqmvF{kўgF{kўgF{kўgF{kўgF{kўgF{kўgF{kўgF{kўgF{kўg4ԚPդF{kўgF{kўgF{kўgF{kўgF{kўgF{kўgF{kўgF{kўgF{kўg0ah'J a=ܝɫ=ƫA;zh{[v\nl֒w47L9N T? 7rR3wAKdK} Z["HAgzܛ#9^:I6d$ '!Zx8r=d9N32hg@Mzs&sy"nNgOLBw#t[zGz-cNyĸ{ӀuWO4눳w}ct5ne 5KYT q,86d \퍫* eP5вjʨڅ6rʠlmYe\#L3:}WWGSiwK#K ڗ]ݫ+덫*hFGM@9.WGՕQ, eP5deT~pm * eP5\'^}WKD녕@VS\mYT q,86\S T텕Q,WGՕ@V[rneeT~pmYUBu6^?86 eP9, eT~pmS`pY]{cjUGЁ:nk]gPlVpFꍊجꍊجꍊجꍁYC=QYY=QY=Q+8z`VpgTl =AY6gPlVpFꍁY=Q+8zb6gPlVpFꍊ=QYY=QY=QY=QYC=Q06'Byb6+8zb6(-kfj6+8z`VpFgTlVpFgPlVpFꍊجꍊج Y6gTlY~cz;?BxkļfB>9~pꏠlQ IOѣgU1VZ7hUqVVVVVVVVVVVVVVUۊf*јFn*ѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѪѫ?ڒ23|I6tUP[aZ >y9>>+`@x LZ<8вh:duɠA &MP,Y, @h:duɠA &MP,Y4@h:duɠA &MP,Y4@h:duɠA &MP,Y4@h:duɠA &MP,Y4@h:duɠA &MP,Y4@h:duɠjA &MP,Y4@h:duɠjA &MP,Y4@h:du` hj( ݥ7N;9F%+[VA@7y(t o>+k6w%1I9^֛ɯnɦJ \pUHEU ¼q2 K+d">IЫ8W3DݡUҫ.UZ5ϡCj*o*gRJYV3K^MBiT΄nEbzk!rҌB~*n^ 55gSt4HFd':b`Nu`g6!E=TY, JY$ @Xd}A4g`V:d3K=IGŒQŒQ,͍$ $cb(b( ,x`زJ>زJ?66,6,IG $cb jQ(d}@J>؍زJ>Y%P,Y%P,Y$ @J>M [r(d~llB^IG $QŒQd}Ad}@J?66,6,6,6,P,͍$ $R AH) R AH) R AH) R AH) R AH) R AH) R AH) R AH) mW,uZ˜UU#~Vz::OOvޝ.'0]='L5ܝ&'U^#/F870$l2O3kHǹj_Ef!Vԡy^$Heˑ=6&ؚ#7YC[> 6Y7 ͭ~wg 6'@wktH*q>%2.Aa' e1cM8 2 {\dDJ-NMi\S?<ʵ]I$=r pŮN䃌n':H9eA#b}ikS̪ϥ("&,7 $$P}ᭇ[RYL76}2Or|7 U7Z۹NьssW&c= #L!Kɀ ՞4 vSzovIC+gSGB f7 tL0ͳu  F5{&4=Ob4hkS{ {ԧKoq2\b&@ & K'0*< CPx5_ߛf t~*$c j Pmg1a`Oy;"'`p5ޝUۦ/OoBtK|-Iܚˊ}]DrF61AH[Ro"9&[NfW̚+ժ̧hn[]c}2PoTwV|(\;ʁɀ Omn۷"9N ZMoF e<]#[ `݊WO8n-3~t[F//S3L*WUFX}<_ 6f䙄Q!'W{.Ѽ>O-R93Oq(45iKK|]r)I$oF?}e)dyBE;đ<3xzw)S!մtZ$K#BkCEPRKa>O7An)iO﬈>_5I=2.T=Kcܥ{|~8&g.b\qA3fFKg?$ sBo(‚ ܡyJgmT5i-" )\;?t) otӤs GrtO$޳d$AZ4g'a|qF2dKy!wz?{ō7/f7ARHuY ;!"fo}w9UFDL^ܯ1|\f*s%_Cmg2a0Ԝ$\Na-^Cjtt5g.9ޟޟs/"sџEfm̥l%>Mz[yEF?aÊ!S9pC4t.)tƌ =')E4\6:>8ޢc{3)3M-PlOTpL28THx?W^<>-M? m,:oGa|l ȝjzÝ98nI'w?[{dWq[K ڧ=cYݳY;c,Q 9oY1A$tVJVF흮0D/q5d"~%t{LY3U_\;{Ө^ g d,;ʱ:Y5f񻊱L84w0MvO+6nYS`^˥>s'qA&(9̻UF0ՈLU3*3V}p~qVV NKPq*Ĵ/=~]NAmj?: Y !f5. ˥ 8?ɞn=6,q?)@!?+&.X8k.vJVwlbI5%X|3V$Vaw)̂V;'3]gK$xVHWI?ޅ35{°xS99ySCkkU%'_d=j;g1Ggz;sn A{ĝ]op*8?Q+;}3xV%wo[-Khz!¨ _U#:ofA3ݡ9Lrpm#tvՅLUblv~S|kU7e%{SgɟFwXiI{?ܬ]gH SS.Qg|zϵd8w`WY=&CZUٿHfYqnd[:WHk*3\[蹡E1YwY?Cc.~`Ul}(~V\}aiN4H d`ٸ pDز<}n_λwbu۸+Xv pV/]:n_λw`u۸+Xv pV/]:n_λw`u۸+Xv pV/]:n_λwbu۸+Xv pV/]:n_λwbu۸+Xv pV/]:n_λwbu۸+Xv pV/]:n_λwbu۸+Xv pV/]:n_λwbu۸+X?v pV/]:n_λwbu۸+Xv pV/]:n_λwbu۸+Xv pV/]:n_λwbu۸+Xv pV/]:n_λwbu۸+Xv pV/]:nλwbu۸+Xv pV/]:nλwi>]?C?h1snUf4yҚk_/f}f&q;%U%e7ihv&brw%7;Q:/#㷳~to{H)wHCV9JK4>/SYguQK0z'ޅ %դ}UF@MlƟj}ٶ隆Ig?vLpluQ; `9g_iJ\{̫Dˊ2N7{}Cҥ't:S >kDW#${lGSbR!CeUFQko*2N䶷@?ª9N$8oo]iƫ\p%T0yxź9 u}Lr߇+):b  _c{И$.P-7gE|]?:?WojnVP5';H;?>O}wOEz9iq=fEn_4%}^)/?P~B'qM3kIW>(&.*ކ?3^3^7;֌ޖ5)Z4f޴WaWxo'3>+!YM?QLHEo*N2DɵvqAsa8=*t'hvKph (3vgЅINob}vDdtv]G/1܄PHڡΪMql;}? w80+t~VV|Җ{֙qRӹN.=ڭ[枟7o3?D!ˇMm+LӹF%̣|^-Y oΦJ!m馶BG -Z$4,ٓ I`Q ,z|a؅ِW.̴fRA6)gF"(HH Dm]+T^tvd9"AKJ̅ҖJ/>ILARF/FaL -t!vd ”] ;A6.o($T%L{/fA<9л2 '?6=+LitfR2hg豥 4.okLkD7I?[̔kiofP. Th$O]WEUӮa|~ tp"-@oRqQ3;fBER&By >G'pSo9oаtUۇEvӄ wMB?Zf "pKjkCwLMk'^/S$98fMHf;O JLf;4bc :r,߭ޚLiǽDͺ(C}@Dzi!S- kN$:KYce{ 3wRo]G5`8m@2wD*ӄb`oeoW(ipcObsKHi;vioQ 7Q"U掩 ܗj<gUK }&8{0A[xR ܹJkiF. H8^ưRw+:Ǫ_.J_.ҧ?'rdog@t9- 0Bs!mPzzYANUz3-!^4N}ΜkV#i)#A٦*4 e!"1#|/^m*W24W>D  גo ͹MoSzަ7MoSz&joSzަ7MoSzަ7MoSzѮnR7IMoSzަ7MoSzަ7MoSzަ7MoSzަ7MoSzɕWf*јFbf*јFbf*јFbf*јFbf*1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VZ3hU1VVTR AH) R AH) R AH) R AH) RR AH) R AH) RR AH) R AH) IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIKdfqd}Q(#M6Wߙ8.= n^QޚV gv*3<]YcH ۜPt6:DZJVLh ){ؠ_aZA=o "Zdh`{Cx κq]c.Ԋ](wnK≫ gPnw)@j?{eմK)S|[K]tC_5r&8g3Ԣ w:zu_dE̎AW3$UƜ}(C"&̾zb خJg&N Vj ʝf2Y^L2fCp$Wo7\uRz֞mQA,ԐyIR$j ki~~ZXuLg4]o{:w.]iYqi̱JIbK,ă8$ W5ű-tݹ7IڋAhPɴ8*o,eLWu!E,1/JbaT) S$qm]PiB4ؑ)y<$3C7ǒ&TJyՋ4؄k:ǚ‡X!Ls5Q>+fLZСRc=jRL"zI1f" MfrߛCʍ&#E5yҨqFmU><8Ip^Rit  ΨMfXEGhw?I̠Fo9)#?  \ 7BckiNy;i+ˍFux q*DxNS_Х5$CJqP"JkҨQ.7GֈA6 #>4Jl'72JuZ ƴqyW&R"`m[8$88U+HkdLJRLQ&œ!A}G~=?ZkO ĉ^McʌY#`,htV DchO|5 )aDP)Q mFo"fshܜW 'OLדVY տf…O"&kו Dc!˽0"*u"҄bA7C6Ҩd2V(x1٦SrhxށK\ʦss_Lxy S DYE!E2 2u y<ɴ.%4oNc^$ bJm^ǿ7ЇXb+ 7ɐe5TO'ŠM P*E'̇ SbE#-YvbCH3vu("flFp;bf& % *M *Gmҩ4XtՈ…bG8L*= ˆFNSTj,:#*CTY5aA7#Qʨ"FTxpjGdc7(Y\kUa 2X%Dآ*,8F{}"f7я!dLxyF?7Ї2&oj6XӽEg xz#gz#8kox=-ѸѤ:xA+洇eugwz6ke)Z+LkaxVA>4S溟_gnGֈM<7#r4OnSG+cLkD٣e}:66),fg~JvoAm*(nމ*8k2Ycl`txm(4oR%nBaa|觊cvPu*&do,0wfHObKhm4wrtxxkd?R9 6h+.RGB.?_1 d[woF P-BN چF2&e mk.l65YCMK#WX` 2T7f)"mޔ7ȨoM&r5NiM Qcəw 5v sP 0]%`{lRV}%b |OЖX.8n->&Y.>u5kNGӯ輡o~dtbϣwEF~Jaem }L; OݸcY ٯM,GXh x{k/&5ُqҋը["Ejmc.# ]b.= ѭ]ury0YL '54O~SFF}mj2e+vRFlr'YmWR]4VfM~}b v \֟u5ָg46ltm5.ӻr|]/&G2_;dsu5ڃ}Ic-$7JR)Bd٭-X֭V;MY#Ks@{Tf{ϕR#{.TtSgE~[l؝4Ov.|V_9 D`Լ4t٭lD G5+E+]i{0z~Um FkݏbYifHE\]\-O{ -٬S2JmJ"p5P7=F6|A|XbVǸUTIflCkA٭Zek \5zNg녨iףG^NCc螑mQ}YLnۯhpf 6\|W'ץmFG:*o* KY^9 / JfVX%7ODQZ'GWМAN2[Dt kL,Y+A\fjtV9>!ku;ZyP4VV5B40$Nd9iy}7ҳ5pZHYOs?ZKlצlwv8y?U,=4Sc;AU&K?O1\<&ŚM4ft,nM4ft,lY 4i7B&&ŚMгI; iQpZ3!XMAQI##ݬƤM$nVy_3G>FGsy?O?_1_y⏇ Yj x *{=bTmTr's(*>_sM-{R_5m|)~j fvk3y;wk3yvy;wk3y;whYfv5ۼgnYfv5ۼ7;wk3y;wk3y~k3y;wk3y;w?5ۼgnYfv5ۼgn7nZfJ-VMc>gjTR1<W YjڶY#DaֹF5;_S 8ufv4ޓfv5ۼgnYfv5ۼgnYfv5ۼ7;wk3y;wk3y;wi'jk3y;wk3y;wk3y/;Y(_c 5v1@rM$8 LYԛfj|?O1My2po{%y?)(y .P{=bTmTr's(*>_sM-{R_5m|)~j R>Io1ŦYfv5ۼgnYfv5'I~;wk3y8ji'b=doSfv5ۼgnYfv5ۼzN gv|y;wk3yۼ}'a~';wh;tVk3y;wYfv5ۼgnYfv?||V=:g7Oƽi"6pLSTi4m6_nlH _?$,/eesjdmZ ^Ok( ՙۼ}'a~';wk3y;wk3y;wi'b=k3y;wk3y;wk3y1߈ D];wk3y;w uN&ZckE6AsTX:ZgnBI]wۼgnTmřۼ՞B}.fv5ۼgnYfvx|/kKۼgnYfv4kO5+Ev|-Yfv4ַNՙۼgnYfv5ۼgnYfv5ۼYkUTw ֊Xta5hEݭ?'S&@6~(Sݺ׆_h[*># Q` ANGrZݮD|l8$3h6SF?Dۥ|ZړNatUzfC1SGmrx~gG;~?Z}[>?oJ<A(-p4'm=PMS@Ӭ-NH#yksCkI]j $$U4ʞs_v) SG4ЅUGQN贻,ذ]-!ű6ZRj(&>?Au;ܚ g5ph7m^Z¢W5jD3H "`x#%6u#Ud-.fp)PD׻> Gy+?줒cDAP1?6jz;Ow~j;Wgk)uAE{B#!_G+,KD= ܌R-q*FXX[庎'ۗ{](M;nc]z 8w,1RM?BI(};ѱδhEp8mz2h[Zfgǵ2NjڋқͩMWɟ.:{!h]'LpJfaLtұkkWgXY֞886=^kk+轏&xg:NӳPNvKKov]> v4X"X6J$kM\tr6Q ?,f _Wl]AkRC αw95Gv~c,,7e6vJut i;3-& T vW''GdwbFш.JqF4!=p>Jꪨ4 4jX777Y]` gup,p,p.nŠn BY]` 8 8 gu .n[_Yh]e|Zq[X777Y]` 8 8 ggIm_ƳCt՚^uYVx_{З3)i AVs/k WRi^׹ub;?j6vPNI>vnٺfELWfTƔ]vnvGQPvn | t.л7B t.л7B t.л7B t.л7B `y?O?_1_y⏇۰$UUwf%Y KYytОUQh55+s"D;d#_Wgٱ26`}8҄sN=5t-hfFf5xuT0 7ޘAQk#GZU:wYfҾyoAYk+K'N69kL9⬶kI {+-2+`I&@קz3dl;9κ߯m})s=.ہ=Ýt=:}7Dی6rQشڥOsH*(ZM'Y%_I3E К[_Ϋӽ6A]mo׶4Lƻ^AiZE)RFזi%kKW榴]n>έp=T!iiXuU;z}HP|~2hds:T !5۬uut~MjsEV^:A΃Nɦnݝ> hk]+~L/gkAW`cc%s45-.y:, /ގֱ<8s4w֝1ؠ&4BK1miU}{,gكw0 mqVFޏB2Ƽ]tⴭc\zm s{z-, 5eZ)Hi.qõZ#1MasD.5}Z{: ;&Cz vv)to,cfϊbXV+bXV+3Qvv㑐<5SMGb{9Z8ioNa6+ d=ogٳk 4`SQU,25֢ [Rk3*(#i.hI~sh5[) $ YW'n#%50 01Qq#`5m18'߂!ph8^է6_wx &ƝH n PbFr5[FaeE^t𢡊GDwGUw 7G0]yZtl8u(4v5C{N~MC~wrs qϦFzJa^^0dsRs:)|6Q9 5G$ɟ[̽=Af)x<6Pu8v(9̎YxgVjkLI]x_hkp4u;uS$QNLP$wŸ.q>y{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1RC-{͢Z{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1^w׳}{1N6{<ݫvڻWj]vڻWj]Wj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj@ڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWjBذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX xyblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX `6,ŀذblX i:}; ,U);֫O!TtHF=*|ՆIh6{c~})_7 / fW,Y;cէow)gAtP楛O>NtJm^Fy&;e5y>_Ia`)LU'Id1w@w4amcoz޽v0ۭZ(t.? FctF1f!ok) >>7ߺi{& M 1ߢ+GV)*?2@~1 حWZ?(c~YW}F|dmѴz$нE{W?(sa(z4ۣ~-m{;GSY^hz;mc+GV)ՁkoFW?,b~Q^hE{򊯣ƴΓ߮2N^h^ D8MU-4#Q8ɤdOƸM&^7v)LtyUkJ^qsO#rx~}_~'շޭ#rx~ճzU??sG2OK6GAs =RCV# }0E M#e#lsؚi3_{sLbd>Q E\n:Ma+J'Ҟ߃ur/ky{\ʎ~br]S^.v>](w%_I{~kjw})=kڞK-U>fN])t\}$NWje/jzٌ`v1{S׵ɵk9]cyjz6z_Jє;OMڽOU6yԫoF sokyL_hH&sEJhMVq>#Zviz_׵I+ڽMޗK{b>Kڽ]ڽM7.5^RmN{8ԟ8M.OXCm?g>kZ p& G@s p$b&^miT:WV _"=fջ~OzxW q~֏9M{ORC;84_B/e#u`g^sphO_?hQUM;s곶:d&euBܻJ@<@ש{JQk$xΓY]c }])cVN2׺vRVaoZ\NaVaؙ^| r{EKԺM{ oշum⺶][xWV+oշwݷ][xWV+oշum⺶][xTv>=um⺶][xWV+oշum⺶L;V+oշum⺶][xWV+o#4P7cTFN=oշum⺶][xWV+oշۇǼWV+oշum⺶][x~8{X-y#n=h*{0QZ K[fmDժYLHOµ$W)|l$roSz]f&2N: 8Y1:a^!yag,GzЛcm'sH;vv'ZA/߻vqd#&@iin wi/.*O. .֧ j‹#x}qշum⺶][xWV+oշImV+oշum⺶][xWV+oշܺ][xWV+oշum⺶][xSշum⺶][xWV+oշumw.WV+oշum⺶][xWV)vOum⺶][xWV+oշumo[Gǫgv\y+Pؚ߯("mq~֏8Zz; ؚd|To:C1\cF]U/iH(\I siJ\[,rO-&Hw|UI EYc )$r#q1HukZ 7c޳j;ڳj;ڳj;ڳj;ڳj;ڳjwMwڳj;ڳj;ڳjwMwڳj;ڳj;ڳjU;VwmYݵgvbHn|wmYݵgv՝VwmGGj;ڳj;ڳj`&٥ nb==u%uEu\WW.]_uA#;AAAAՕY[ߪ;m½M?]KTWU.]_!uWp]_d?77777777770YYYY[Ցj|,|,|&'oooooooooZq>K6*)RHoBa#NxoA,`b AA nq4u|x~: :Xy )y3ZHh |JܑR:@: ^l´|]_pM&Ƿڊg 2Z=Q~]CtjשY&!}~hxy͝G^?)Y&lh-tnٯ`g^sphO_?hQUM;s곶:d&euBܻJ@<@ש{JQk$xΓ}d(::Q2RMݮ8ç]}8pS.]1EgBkD𽫲)FWX'LukN^xޤtd LaͯVXddPܟeָՄy xQ>\i=xW-Jnx~ϥg KMJW9VvS؀Fӳڅj=٫Rp4pDrj;BgײZ7Nmqfg"euV'ZC {ڥ6F :4KL *:S1߁ ֺAr9u\-DZ ;ir-Z]HuEE~LKEE+֟ ѯr6{5\#b4h\1sX) YW RK+AIy46(k^ 4wt hpR("8%h[G TI_`=7%EN*loq5tuPA%{zF䓲ڴX$hƛh)H+P`ExZODfs{K /xdn٫㯇p8X#XK(/c{kLkG[Vxi7}u |T>VRm/y Nģf;KOJGaPiɰяnv$w }Y&,P2`tqIz{5Q=^n7;z~OXWoNel=s.RowPoG^.mMO>nW/A~#MgZ }% }!*KHuW/ׯZizOTzTW5ܽMڞ^&n*jt iT)r ^^.vly{dڽ]rm^&AHA6kj^&R/kj={Tjj6zT<={K׵H|Jiz+]j.y^&rm"޽ERm^&/kj6ly{TW˵{\Q"N+ڽM`xyۦh.pu;(5LǻL#ݾW(aYlH&дޑI=V;IdloC٢Y҄tM0+Z]g;l❥|eB_gJ:Ϙ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^74=tIhy=CwXq'^]橄Kpe-H(>JpXXXXXXXXXXY,x,x,x,x,x,x,x,x,x,x,<<<<<<<<<<<n           7ǂǂǂǂǂǂǂǂǂz[; ]RYt_{k{pP6]euOx֡ǡ674$]QR@cӛdbH,uf貋Fnߧu)X!#,^?wϽZ](DY#oq3?Mke*p8Q>FˍYG卑ZeO;L(װ:.֤{J"c\.T5{K9s<RGnjsAWcԲAp޲6 JpBnC8PSG}w.ֽ^(ztq&m#W26|>-0/}Ao :=3ؙn26`яo%4eF."$4 AW k8F׹cPcc;Hcv;Fa30рƝb r ?zk)- 1iڝ05` 4`g`b8d6[;SIU[2Ũˏ#^1Zqݧo(&9kJ;ISJ$2CT\{\kC$0uEJCzGLJ0P\/|޴Ǜ m)vݡu((oFbڌZ87z;[F^ k=F v."q,o w`Na6+ d=ogk5 `^.qEMMGc4fk5.JX `O$QAIuȫBOni)8a9$P_r&#ѱ3]j5⃚H%|0'lb(U'Yl}Ƌg9tశCRYwDcX`7]xQթԣ2(mGh;{~pk^ۮcpOlC$&!7iZ{Kˋo04z/Grk\uⴎ n5oN4:Iu•54CP>SOu&݂@n]uWְ34Ōw60"tqe~šE &X6 q68AGK$9#/i/Sgh!u=Zhp&ܜms餑ޒWhp&ܮLZwFj9::Z;4Zj;CX#a&9 楃tR3Gu;Plwhpxkh֍$ql/cOQ ѲhtrVb&Xahx4a{ش#sej!tkpm{{S;uzPNn9OcV8L{&#*KTn]xkX,ץK/< k2ht@׽5q avCy8Y>鵔;54YHgx\iJYG@+]"*ӫAj \JEAޭ2N^Zb-O笎QuRyCF5)d(lw07nI(zXYfk#^6("D}݇'c4e*Ɨ]5ܦDϹ+c ḃ=4:c 4u5Y,B}]vSWA|Z=îVM3ڥtWBpcޡK+I(R"]Ml~uVyv|P:"CG$fA8kD#k3 !oj˯/]!OlE`$Y"ClF6Tj8'Gi\3ZzjSq`X=M 9,r=΍iJW@tudbuJM(c%֊M֣lmqcX_  u6 co|hh#cѺDk4jC'[>jX6QuVBd#lN5RЦ7zR{^=*T&E)k)Gh{WU,Mu%/}Wk@&q<խ $ #J_ޗ~Y^Ki_{k[#k\i*Qwhd{chi-:*:IbnJ2EAJK1\5SP dPEƕ: ,( 7elΔF JW.aߥ tn4lkz]YQW6u-k#k8fn@bq,muZ;׶;8Q$ 5A G$"k[G4 J:VVwfBu #%&^iQLB׵zשU,mu(~!ԌIOQ4t']C=1m9fUGh[ p]Kԭ& n |eqa"RW\ix*{|ӿI&_{!5¦G)}J1ՇD1ޑ.q.t+OZh:ZeuֆN@Mk5uAxkQu~1~#AG+a.kYX8guNcck)j)kakMF TB22&0@SHێ`2w'>4L5SQmk@LmuUJ:_-q K-#ĎՉ:^aWb~iK#KmmHP@nٝ).6QN9\#m󮹩U; c1ME Zc Zدwk:*>KT:DQx:pM[Y=&GIۺ&{$H%RMWq; ͵lF-BMܬldsaSGW]<xd32]k+{ԲZĶ89ОRnF@EtӶVH^[rՋCj,A5q?%<eњjՆ=) J^0kXaBCjj'.W_˿Cb6FՈڱV#jmXb6FՈڱV#jmXb6FՈڱV#jmXb6FՈڱV#jmXb6FՈڱV#jmXb6FՈڱV#jmXb6FՈڱV#jmXb6FՈڱV#jmXb6FՈڱV#jmXb6FՈڱV#jj6G4wJ!yh|;: B#_x`!l` u>;T0 <6x.s[{i\IV&AN;9oGRӳml^ m|جaXvh|{U2Pe!Μ ^J[GA2WzUmE5t1A7N+|m8&bq~4pLc5P8}׼o#({Wj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj]vڻWj] bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bGXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+?YuCd4mXje|9k%FYb 3}$8W^Tkn[-1/Ď^Y##Prw4^Lh]r8xړZlGt yR4o!3%ӇH4-?_˝l|?f1D!h=qqRYu}q XLYt.cO5Zh3E5ц1mMјb#DJWr/C#Xev5;,A)nM8]ܭV;!' ݹS,c* 3d0 FKdl.Bt2HfsZHo'ݐцoy|θ>nw^`֊r11kRV7ܧpb09ŽV[@2+tDI#hV٨}[,LB|E֖-ޓZ|(lq8;X-%FՕܖWorY],䲻{K+,䲻{K+' %ܖWorY]ev%ܖWorY]4]v,䲻{K+,䲻{K+&%ܖWorY]ev%ܖWorY]ev%{K+,䲻{K+,䲻{wEڇ䲻{K+,䲻{K+,䉺%ܖWorY]ev%ܖWorY]ev$ c,䲻{K+,䲻{K+&]~.K+,䲻{K+,䲻{K+%ܖWorY]ev%ܖWorY]ev$uڏ䲻{K+,䲻{K+&%ܖWorY]ev%ܖWorZ'|C/>#Գz=L.oL~?!zPꏇlZ֓NMJwKمiZVℒp ϟOS'=L2x~RxԻ~AUޝ'Eiot}CG[oRz>C/>#Գz=L.oL~?!zPꏇh_sH<=mX~!ݻKWG Nk45#Z⺶][p=˫oշum⺶][xWV*On][xWV+oշum oշum⺶][xWV*On][xWV+oշum oշum⺶][xWV)vGum⺶][xWV+oշ;ۈWV+oշum⺶][x}qշum⺶][xWV(F:ݿU:NS]WV+oշum⺶VkK4;}vGum⺶][xWV+oշ7ۉ.WV+oշum⺶][xq=շum⺶][xWw}i;DםON(ɤly86I Mdwp1P@]mhNDVԿxR~G2x~Ի~'1~_}Cok/=ƀ ,Sa1wvS'=L2x~Ի~#.IH_?ugeta1HYP* ~K:O6WSG[oRz~z :iwUjV[D CtէR{)⬷B);MҾH۹[~8OKhtYֽнн;}нннннннЙ̸t/wt/wt/wt/wt/wt/wt/wt/wt/w&\? qwt/wt/wt/wt/wt/wt/wt/wt&нннннннУˇ{{{{{{{{{tw/wt/wt/wt/wt/wt/wt/wt/wt'{{{{{{{3.# <y]}< 6x'$ZtSV=ԮV3cFEc~oFBMflu[,6XXtخ9Hhx)= /Kd> Gk魰Y"75v ;iava=Aj8wuTc˩i()ZQ6f-3fy2kAnY,}1V,ٱ>bu`CP|~cQIfihk2O[5̴Yo,L65L"5"(\0.mA/5XtVCHigQ/ǫ[HAG[d|rkd;W=,3`&fp֌f{5,,_~}68d?֋#V߲tsZl= VQa8aH E 6vM\;F*]3,XeW%C ~PwY㯺'`Z6v%t"9`;FMf>#=F e2M~_V -&df|?@ΎtUN*Tz T*췿 <qe@A9IF 㦆G~; w[_5ϴnU#\v]_ܟd,k5'Ql.RQE-{bGhU']GWF#eq>C/>#Գz=L.oL~?!zPꏇFAyԝI6&ji\hGbY,۔ uz>gB7&OٕB[]Xđ<7IJ5;tni.{q%JS[(CAmܷuo=Ƥ1 _{MJ7sn-If\" {ӥVNk=h#$`E# 1КxDk;~QF2K/B:t[F4VC7r*4vF;W6ߴ&2i ?i(8::;TrFǵĂ>HI-CnѸzjJ,m6/=g~'3zxS?#-?>?OR=Q|F?½)Ηz_t\>OOK| (F& @(M~<wmY݁,ڳj;ڳj;:nÿwmYݵgv՝VwmYݵgv՝T7a ;ڳj;ڳjNVwmYݵgv՝VwmYݵgv'MwB;ڳj;ڳjwM؎VwmRut⳻j;ڳjwM؎VwmYݵgv՝VwmYݵgv+;ڳj;ڳjK8;&0gv՝VwmYݵgv՝VwmYݵ;Go;ڳj;ڳjoM؞VwmYݵgv՝VwmYݵgvޛ= ;ڳj;ڵۍϡIzՎCXQROs{nh7׷!NcZpxؿX]_ì{Ldwcw꿇XTβn꿇X]_ì{cwdwdwnc?T>ɏ?U:ɺcwncwn꿇Y7]Uα꿇Y7]Ck?U:ɺcwW:Ǻdwncwn꿇X]Tϲ`}}W뾫uqU:ɺdw;꿇Y7]_ì{M}S&cw꿇Y7]_ì{=}U{=}W&뾨&#?U:Ǻcw꿇X]Uα꿇Y7]_ì{gX]Cc]_ì{gY7]_ì{=}W&뾫uuU:Ǻdw7a]⿇Y7]_ì=}W&뾫uuU:ǺdwW:ɺd{_ìgX]_ìM}W&뾫uuU_뾫uuTd꿇X]_ì=}U?=}W뾫uuTd꿇X_ì=}W&뾫uuU:Ǻ`m5?_9|ӓ0TKE/Tą% sJj?$;e5yG2x~S'=L.wKG]?RԷި}iwi=qWLkM>%cX ;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;n'|<4 U!QO,VHϻ`hm0 ~uwcof4_Ho Ũ೻j;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;ڳj;~q %:z?KFs=|> hdw!ր_JޟjLhjގ=ZQfBǻB\e i I4FH`|O褴d~8Ϥ0>]l7hmv]F4?f4,0}S̽ 1unק ȠCk7ih_bǢeWIp^/ocP݁OrGIڑ7Xi p5_@xu=C[,9<{t+eCex`^q5~Ս!k噦6FãZӿV?xd?  uxidp `RYROmoo[H; P:8c ]X iCKj;BloKqyJڥx=5mڷ=Bc9Lzm I]-a#_}#C+aY3hdѷS52lt[k]uC=ƱDKtT=´}l Pbd"׎/H&V2Mmtz\`Z$QZ-MGci!?ҧ'DegG_+L*![ghpJý>$կ9@{ʵ+͋#m.K苚vceM$RIWBz˩KL6G#C%J#|vk}7j{1DcCl6me#X/VB{Cb2a H+ "I ݦhsՠ } 7G%I]%zAYƉHdҭzXV[ScJz=ec$y`z ] fgG#/WMoP| xƀ/=2b)?``"w~es[OjH28ⳉtkuY+ S,tllB45hM,f54:Rh%S# >؝F.`w TOkC4B֊H6C 5⢷棶2en:c^jUiHײY"p CK( 0Cbv0qQ= Z(#,k 7׊u@aHfcidG}HlNգs^*'XY!kE$}\ō{Q[aFIn2> 1d#4Iu C/7j>P0 ڴbv pD3K $-h $y 1&7i[m>KG4W^!"]-moףZ#]`v|=@BH׎ n^$ ~MZYBƐEkB;u%(]}VrsKROo}K|_mx"ZѴ>친_W4q ڒ0zE/ `+H*q{Fz8з(\iWկjV0 >2+se ` 瘴iꏈMsވs@lm^: 8+ *{1>?eSo Ba1Z^y3Uk/K Zow1?pp `h>d^ mnruQ9^ަ)ܣH5^:)@ |744KҍZ !c19kyxƁS K}ܻm˽iJ'K+=؟,CȣhtƤqLF V#_z] .5a'=Ĺ5$_tVC+ke"ZѴ>친_W4q 05X*ƇNx@n 8! nѫ^t-*W} ~|Tec~tWH#("Z?QRO>oۂf]RSya.7_i4惥 @kC@>њLAaB0Nph(eo M1H7E!3Z(1} h 5˟h0%̴s uI?4)ZY<$6F`KAVgFu]NzDaF-x]`niJA.ֆ>}$FX?$ocKi.ҊiovMjp4F۔J#,t; b5ƒB5 湱 ѱoDmN봢2?gI*idu_J|Iҙ3oDmN봢2?gI*>[Cv қM-k-6h)vFY]y"4vA'-tm-ՇFA^Iz&} #mw]W^y,3u5 P~*2 G^!ѴVQ:G5.=Xז`j>z1散G]::ݽMUi{hR'-c^줌}U״ҴpںƗa[x^T=n ƗP^4u,v4p^Z*~KZ*F?ۍ[^H6ϲ,ݍ'q}i>8^Lhu;EZi5vv(6?G$1۬Mf&sc YJilN/:;^4f0BFu/^MT]=eGeW s4d0p44^Ȭ)W\Q-YO߹-JylMdVpzd[^ ʖp>699ǿm>j@χ2>PXYVS#gdbu {:Cyѽݢfz+l5x.nckiU0TωӇ8)d9Gkҿ<ٙ :A!tkZ;zGm5A ?e;Eu0[@Rj"~WcY 1tzC<`ͣ ^|֡gdA 7su5qF1]mNmwYPr)VVd2Pkࣴc OXZ댨:ʰak6s՗^:뮪Yd_;8Ccܳ:]/SC ^2hook٧_h}ECN*]h#(ׇU@x(}4uTF?}"5˕lylltLh jovQC%fzKɤQ^̎5Q 6ѰFKܬ-d <}8S qѩ-oWBhg͢iAO}ZdmZ>8s̽>^PwP.x/r*j z,c]ɠu@q#e|p}l5҂S_qjꚷe5[:/)X64Uהgd\7G+tq`6=!Z}"z=^}6?tןnžO@d~h6v[- . P6i)/91~4R<3=hi{ik7V_6 +ejdeho vӽF"AX >ͥ|x}M4M<}s peݴS T; 7Y챓h:FUYleѱe=zUqݎڼ J^5KԎ{R4 HIpi#ɢGaaZ,"Wf{dtu.^Nhvi_zZV,q٢#N7k]xtYLW68ą=ѬDCdNwoڔSXgdSoH(rZ槷|VO8 |GHI!~Đ!{P:{ڗPҙddy4vH$~_xM+n2M4 #%t]Q-{H &W,,w#4ݐ6qhYγtl@R\\㬓S>oچz^Ѽ>(HLnVBnx'z<{QѼ͂4-v#8θLZEx?4Իқ6y^#Di$ lS:溅[l6I3Jj$Ї^t"B.(*p yvoyC C P/H" G9א:h^]Mc\P]^ޕN֛mj]i]zO{-S1s!^˜jOҴ(iJU=%\^j;eVч0Vح 9%I*[ۥ%$=?贒Ig,{4:Ct^V5}s֟zW#mS6J^SevJ x ssJ S}e:YuJCkDi-qFI|~G^>x-7ovkQ@OlakEQTFMn2BFBL-+9SSL{e H@hs N Օ wK0"("ybK)M.ڽ!ҵ;ji%eyu6i4KҔ$pњ^_twݾi{Z'^]y,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̎6+2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,2̳,P6x'kud't&ݞhmphP7|?4/1VI㝑`a4mVI|aJɩ%Nyy>N>:FNkyNZ4x2 4-9k͞JՆ;uZ>N~gJk4 l/k[dyO&:i-$`P߯zZ E>jmFY`Ӱx$s?+cXkEINcXPa7+9xI@ٙjȇ?'^[]Dɞz4(EjZ_ftp\* 2!Yl cPk6H{aw^X{g'J\P+L8+'Jz7WXc!`k.·\5GBH[oTNڽyڌueT"}.i3 RH뵽:%8eGH}h]]no=ݠEN,5w6 j#KbR{Y~)52Bt;էɰ;Ѭ,6֊7řh_Ln{ (a6:d:m+P>KkKlѽG Ԯ$oi{h\m(jt1^y` ڼbc<^1^QOf6γ7JtcZJ򴏳HbcE/ %kblVM SHq.MAamN٪GZWQ^^vfk"z" 8lzY!Ҳm#Nj`>&3]VuH1F8i"sz7i cC*1Y 3&2kBY;AVUZgϓis[ѻ%q944#ӺuLFo]4VwQiה$ ktpNޭ0^ds@{#.Ly>MG+0sNGћ1=:)Ʈk^֙ m=F: A ' u"~}LJn2[Q >~S-q 1v ;F#tm w6 x 6xUB" 沬iv8 vZP,})`Byd ?h%fWRiKJ`ܟ֋ѾcEvjܔ!Š&1FҔQ](:#SN#O}x*ǑKLiV "44jkb^~{}Ic2㥣w|BgZNuG>HÃKbh52^cLIMe*s `޺5-3:&^ K_lmE3VĔttω<JͤO.Fٯ^?^Es 5@)&9 8m9ptq^smSnˎSJ >{=لXh[ڇz0W5]4>Ţ?y`z1KbԀ ҢwDhNz ;C6UvDVhUwmY݀,ڳj;ڳj;ڳjoM؞VwmYݵgv՝VwmYݵgv՝VwmN⳻j;ڳj;ڳj;=VwmYݵgv՝VwmYݵgv՝VwmYݵ?Oj;ڳj;ڳj;vwmYݵgv՝VwmYݵgv՝Vwmhu̹#f|)(ƝIkTޛ= ;ڳj;ڳj;ڳjm+4Yݵgv՝VwmYݵgv՝VwmYݵgv՝VwmYݵgv՝VwmYݵgv՝Pmk4G4-uUgv՝ڳj;ڳj;ڳj7a޳j;ڳj;ڳj7c޳j;ڳj;ڳj`&,H E5so%"OKm\ oWEgv=;ڳj;ڳj;ڤYݵgv՝VwmYݵgv՝VwmYݵgv՝T}7a+;ڳj;ڳj;ڳYݵgv՝VwmYݵgv՝VwmYݵgv՝Szn,ڳj;ڳj;ڳj7b{VwmYݵgv՝VwmYݵgv՝VwmoV=cO֏y T1C6'UmYUmYUmYUmYUmYUmZ&,x铎 <ۣͺ><ۣͺ><ۣͺ><ۣͺ><ۣͺ><ۣͺ><ۣͺ><ۣͺ><ۣͺ><ۣ[Lo]][سͺ><YUmYUmYUmYUmYUmYTޜ~YUmYUmYUmYUmYUmM͏UmYUmYUmYUmYUmYT뵻]UǬ>OXzZ=Hc^Z*We{,g{,ߖWe{,ߖWe{,ߖWe{,ߖWe{,ߖWe7؟gབo+fo+fo+fo+fo+flG3^7~Y^7~Y^7~Y^?Y^?Y^6^?Y^?Y^?Y^?Y^?Y^?bY^?Y^?~Y^?Y^7Y^?`?Y^?Y^?Y^?Y^?Y6򏼲taMxs~8]wH^ViI]!8߲3SzN3VgnY;ufvՙ۫3VgnC;ufvՙ۫3VgnY;ufvՙ۫3VgnY;ufvՙ۫3VgnY;ufvՙ۫3VgnY;u7? ՙ۫3VgnY;ufvՙ۩'cVgnY;ufvՙ۫3VgnG||M{NiC."fڅM.sЗcO77޺]cxWX+o7u]cx>|{u]cxWX+o7uQp7H= 1Rtw+* L,G9$7-m p13'zqQYLp:p$ufz_%fyt^{Ա 1B&/'uJSUI\IAWE -p&ڋi/|A[:)gD$m#䧷bHZ'HӤк]cxWX+o77.WX+o7u]cxWX+on'u]cxWX+o7uضбЗYoYt1Kd|}zk{WB%tq5y `ѷLm 2>' ˫ɱE:f:p}]W_v+W_Į]%uJ+S~+W_]%uJ);OuJ+W_Į]uߪUv~W]]wuU~W]i]uߪU~W]]u݃uU~W]]u߯w2+D1ٚǐ WǐeFI\R|>x?XVV|7:AVZĭ-k)t;RwW'=d~斟_~?!nV|t&Aq w@TN=ekޘ u:L蟆_%gt2`&8Z(^ `/cD#^&Cf}53=B:" hh-=]JuXu'>}4ۧz8з(\h.kbJ2~˦&?z69G6|JCm?w_>?OZ<<)dxccN:&_qpOJ7s.;eO'Ϝ&>Minev%ܖWorY]ev%ܖWorY]ev%ܖWorOrY]ev%ܖWorY]ev%ܖWorY]vصӸR6^d"56v].<dkx%Ҷ׳o[GG!z}`~>orx~GW?ocOd K>҃+As م#f_/wN> Ɏw,]7` U][xw.WV+oշum⺶][xWV){ oշum⺶][xWV+oշwAum⺶][xWV+oշum7ܺ][xWV+oշum⺶][xS ⺶][xWV+oշum⺶][xw.WV+oշum⺶][x~C 5⢷򆵆hC |q|cYqYqYqYqYqY:c88888㊭gVqgVqgVqgVqgVqgU/~+8Ⳏ+8Ⳏ+8Ⳏ+8Ⳏ+8Ⳏ+8LjqYqYqYqYqY gVqgVqgVqgVqgVq8M5@~)x軻XQL-tzWȩ#Rϻ´4$3A#mj[~)zZ0utFf0]!!*1l XS+)Ll$Dn% Sb\! 7'=Kb@8SF"(mP *1}/f}1 %eq?X||<#+d‡&.;_KnDbs[cPP_PП&\? <~WGrwBwBwBwBwBwBwBwBwBwBwBn\O> q>^^^^^^^^^oV=c}_~x}i[t6J;Yii04${^+ ig"\:0 &5͓E #sj ^ph0H5ۥYFE>J]|ԖgZ! z@t5•D펑{սT$Qd:X$Oqp TP2^͔vTֽ,f7x]ǰ)J&Al> ׂiRjGgvP5{/"QyH|N%Av0+! ?mY/G2@IV;=>H7WaQ"G xoDii6W&5%ֈtB^4] p{D1{csoC;#sZm.1挰^~4A}= %ieSZdd";)w¼(9p^ I`Mo>Oz?sG?ڄ&M-AQaYdt6%.iahq= kYNŔ?EYNŔYNŔYNŔYNŔYNމĬbv,bv,bv,bv,bv'tN!e;Se;Se;Se;Se;Se8e;Se;Se;Se;Se;Se;'YNŔYNŔYNŔYNŔYNŔ?EYNŔYNŔYNŔYNŔ||}Iď6*nEꋚu)#B #'r#,ز;b#,ز;b#'wdvőGlYdvőGlYdvőGlL;#,ز;b#,ز;b#,|GlYdvőGlYdvőGlYdvރ= #,ز;b#,ز;b#,ز;bA,ز;b#,ز;b#,ۚ9mL5k*]gYIs&k]=q"{^dykI$}SLɡS{& x(M>#a~F?%eCyǣ-K"VƆ)u8Z4F{ȬOz[fI ԋ/F mG3­蟅u};K+Mk6Heuݽ+SKOrqsQDe馥҂GE_WOZc-fk [ݯr YNIlohnxkM).Hj;t?/i~;>+<ֶ:>f޻t~Z١sl>&򈞴>[8z'}[<_R~ ZbwhvkaXfCE w= rIƠpgZ% 45z3 ȇT'RKcci"aZtqPCe-HcrU7pV<>pJ I&ק= kC0zXd+kW*lZ.^e%Ҋx6Boٞ=WYi2 [hc Vڵy6(b;Ţ>WXwQ .5pSZ%e9[vfTOK;g;tbNm])ap7G3R; ߋ]_2wY!9~5^O1rhҙnSuk+Tv:hdl鴚6ZiN1&6Jغ#|+ueTҖKgNCt|5+,ֆ:h{$MWS}5_'Š4m^iޛ+V{I4dGK!5>6I4dyഏJ)vIrlC uˍLlI#Y&t-FчCiW--/Y=?`H vq~^)=$Gɻ$.9;!|:e$4MtQGOQWP({~ޣ+ۣ;/6iNqLJ C=*6_Hj6gtz]p)Z ɦՕP14a!6ˎx*h[hHM fKVw de>ys u}Qcm$HZҕxJژ̍џngM]g7Y q]7Ai༡gh'H)Xqe;\O/),Aj ;؎rHM}Gr۹o,ѵc#5ح6HLVoHqm̵ |e]+,-/ikc:(YDp1/n`j"H Y\uVKu!n֪ \l{eoi lY4%dj-^OX-/kJ TS :[cL'>޸gnZzG׉+vhlFNZK}Guƕs7iqc"m _fµ,i|A⭷ޚ \ 58Mf:wi:pR69bRHfm9LYc6)Y}0:Z)[s ΃EkA V.֙%\YV!)r@ǥCwk@cn}(8 w$ѴZ⬬Y6bLRHʹ:*k+H /i{[8Mf:wi:pֳF[-N5 Gz.ɨ]H 1àt76jk5ӣf^ѵ6z0A72Cuכq*׎+ctNZ=A`k΁ki #Y-Hk*u݂# ڇ,YHJ5XN;լ9IL#joGYt2="{qRmCdX+*Xi fZߤ{Fk53Zϼofhie4*`Lk)KcRG9^i է_T6XT#7@{94(y˸/c{KVfIpѨR-Nz}UZ?hp \iR9 ?f ႳxycIo.dэI84u|wpSF$Zl3u⛡]ziL?5Hs8lbN)1_dc! ?_JĚ.%ƵDj n!3[CQM>uS];XNj9ɪlǔ<dm*<.qSche:5 Ӛ֫U\88]]e {H|w?n`BZ`}`ZC(*k!RLj;4t`MhJj"->t ! ?KZA5֯ F^ wG"R48`Wj*8{Qc{0ЫopPhhM&<<<|ɥ9&1&iCɣɡ7PV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV>abXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+b6+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+bXV+5VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV|XqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqCRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa _-!1aAQq 0P@`p?! J/A$@fR`e Drb$3LElf`ٲ(P 'CYNwO;[?tA088wh0/֓8|;&OM!F0#P!^0"dHpD8aiSs&̄,DF`& AA*'Od &gÞti"Ĭz2€1wwi,oB&ApM#&J=[8K&>{EbŪ= `ɏ8&N(߀<b:ĥ"BaLFi4,!@E%̕J!1i 5eQ7H3QEYq(ؠĘ X3*(`bXYY G8 :Ŧ `d.ИހS`T?`S EKp%92IB}l@fJf-%3, ᒞsBCCfr- 0 9$D HΏx>l\@EW*O $ v.t!BEf $l,ڑ2:hO9jp Dͷ ? N(c$hg/{ xfĝ9jHFB>!0&PQٚȓ8E01f&%J>&謈 ,X h~BHQ ډ ^➇ tC;͞^5gȗ.g=6eT}E7WfhVud[CVhu[C{Y=ꬎU`@,$xU{w2i|Qj7$I.N'\g"D-"w& ]"xg0@el6ɓnqȥp?<[*HapLz"#6+799\K1!1frD488dɀtK,DK ԙV"Xb%"Xb $+,DK,Dv "Xb%"XdƤ̏±K,DK1"Xb%"XYDWכ=,v` dLN)0,,70𠱀%pU0D(@Gb!2? K,DK,DK%` _Xb%"Xb%"Xb!0?JK,DK,DK|v%"Xb%"Xb%"X$ɈtK,DK,D@")LHb%"Xb%"Xb!g-_^l6ɓnqȥp?<[*A,,aP6pBs@P^g ` . D5ϝp !/ie6l =, <9=Pif 4F@`oH bo:$L_.6_igK4Nl !=AC 8A  `]nR6LvClsJ .l\оbܱ)Dqw/ 0w 0 fL B&1`%LQ`I^ӌ#0C@9axc!b)5[j-Dj2`hZ!|  #*cdBr}L&cM$8p¹,3k]yѐ0# N"PpR6G*.sW("L@N q"::`b21l 00sF ܩh1jwP!<"dR'@SY`~|8 l``1FDd)4j)]`-Ӗa !Q 4DAT||h[,۠pqE ?1BS>dd?&HȠd9ms@3XN_fJY`;ba "|0u:`C1exUHq`c;#13'[-Dn`?G$< Ez&w<44[[Ǣ=oDgbJ ;C<6DPzHt@ĆqA &3xU+*$PPĔPs,ADx0j*28 c@9GCI$9`zhX$fSly "dY0DBP`@2i\"Û"`E6Iɺ"A!rEܕm-k,9.[13{ wrlfH`nQD$W$"%LQcEFx̖aHQnananana`TQSڢEOj=*{TDOM?l=6W;sŲZ'!@,g gT!<xc\$p1x 9&f! a'9!pbw@0 1(`>(G&LZ1);}: `F=Q!%iUŝ"HȣLkd N G XB/تL"1gv|']s,q@cE9΢ȄȣLkdk 901$P,ph.1f29-pn`bhŐ?2Esl[E=" 2'4a.`v&,]hLc0Y1 <8="!2 2xIb.PFdC(KCk.$" H" jz$Z($0lb"Q LAH HwL]D@&fc_LKL`e;[,0{D$H RnFq(VP <'b'g =0c-\ E#1e BcȹgןLvCێE+Rmm!9eQ6fb '~$3H(;;AW :H`b!Fmq$?7:q"qb]3% NNd!!Gk4rt`.B!EQ9h MݖŦJ`9f@($&$ iقD9L7D3L2L"Cq"L4F$ pQ10$-&瓹/I4)9'R謜7=H?$pK>MQrb$s?S@9KG @`|I`M!"1?IH0! |>Bk53CG@$[b  Fݘ 3G)蔜iI0H` !Iğ==I5-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò;-ò '4_/B4TEv[ev[ev[ev[ev[ev[ev[ev[ev[ev[ev[ev[ev[ev[ev[ev[ev[ev[evB0@L% (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x P*ς(x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x :Dp@2b(x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x (x :Dp*jC̵Q~2|%YbdqL82}ƈUՃI4 s4␐ZA1,$iЈX8<B .C@XCLSPCd0%2p  ʥJ?"`H1. fw""Ts&h ,|L(f1zHKqB8fL(.Ns@'qH-=%́,zԈ""D?͞Mct %#R7d[0~$#xHG53J'p BjF,an릚sY,1B,"Xe?20$TɊlU#3 db$7t0FC4^֛`"'M1" YiPZh0cd5`@%ɠ 0s8M `c[O8t)4PoT&v%ᦥp -0b$`fA\ W|L@bgn$@. {# PF@t$NC&N\|DzC3M>kfH'P~͞&yIk#  cOB,"z303x&+`8X&G&L@1Mqk;xtʨ% Ko9br- m@Ψ8!`AllT;=,<`;K,DK,DK,Dqؖ"Xb%"Xb%"XdƤ̏±K,DK,D=JzYY  7Fc|_K0ZCͶdFS"o@1'iK,DK,DK!5< b%"Xb%"Xb%Ǒ,DK,DK,D@c4BK#[rflɻg6U*WFaqDT,q 0C D!ԡS @3b쓘a  #q_Cxc1b~ԛXA@x[p[g`<-'p FW$AHrFcq_kd[ar -$O\Ny- ' ԅ 00cP<1D%dƘ ~c p3@q[ǢYL"d@vm^)~g8$ă~} $גu 0|AN$9(/E2 =mo~l(W^ JNmlPony"6Ā/ GshCRc."3裴]-m^M?qp`H?B=;}c,E= Ė $}s .xs AW;+>Ϧ͗OɻgdzeW|m/4ݳX͉(KvlTd@#fEM#@pn%TP=/͞P,߹ sp$1p.BK`݆LplQZNL\Qelv CvlTpOMu 7Fc|_F0&&7cBq2ZhmwtRh\?,DK,DK,Di82K,DK,DK,D'Xb%"Xb%"Xb'8K,DK,DKǗIK,DkK,DɑK,DK,DK 9hg垭s/ $ Q}}22ER`0El8vg 8D=6l~M?^>=/͞Q{<0L'0LyiG CCH34c;D2~s/igxI\Y*W|W|W|W|W|_?_;_;_;_;_;;yW|W|W|W|W|Wͥw+rw+rw+rw+rw+rg*ܯܯܯܯܹTܯܯܯܯȗ$Pzgٲ6_ig7<2ȄYHeRp?Dk8;fJLnN*DSEfI fXΔb"[y# `<|Idg);!q^WUUz4y+^WUUz^jWUUz^WUUz^WUꈤE^WPpsUz^\\UUz^WQ$%g8 `pI0%3ey vo6URo}PX*޽V귯UӦU3iPxǨ\U[[AmU&ʭ}V_Unu['}VGUzo7Um^zD/)ob[ת=V궏Un.͞ς` ̣YЉylAQ#ٳdHog|1`~B(`K! IѠn!T`9'" >RP `: N@v>hbT⻏_a&\Y X[☀Kt klHqRA7lAx0R͢bD`1t4 DDG I0Md&i` .qb>uTK,DK,DKr K,DK,DK8"Xb%"Xb%"XK,DK,D@$a,DCh ?DK,D2dRK,DK,DBZ"g0eGW262̮u\W7Ȯes+E'W젴 3̮dYẙg:οvus+\_:lqW2̡}s+^JQ^,W2,̮e{*g_:5yϙ\Ȉߋ\+ĜW/es+~'@%yW `Q#!,IAlT# zA1]T-?H$"G_bL sC$y{`ɜÄئ#HD$3Ԓ@d91`K`$sLZa7XL0AY#VFBK]vdG4FpCB /x8 ."D,r7!@#Ȱ@auG1qX! i*L.$3(Np S|FD8Q'Bw `'1ᙲ ’CkuX``bBocDqL,_%D3L`"GV-pqx c`Kz"@ $100`ٳq ȲÁo̡a1,30`0@ dž r/# E^̉ќM.F"y3yery2 dp!18D̗*lA5ni0 I`i؇CA \i鍥4Iɳ܌0z+QN$IDMbN'#IPȸɁRJP0 >`(dh8,ʥJ=ؖ`L5C^Va3p$ xd "Bh1 7 s;c?W)Fg|yD=#gҼHf8ϓNQrd~=|㕺b|\כ==%p?"h(F! t-@Fb &&hE{Y šXBam 0K2$>Ix!;O4 u@"2I42 EFZ4x*L !D@9 `/  NhD2a+na%2cvsJ;]^w &)@ PKSw;dtE<D HAC. Jf?s@ 3IyH~":`'dDY@c_ {!<Gu*Ere $d,CbC1 I2mT\缚'$Xi8hXH4|18e @ЊBKbdt= BN=""3d`yc,L}Agdg|D@ `V;ĘqDh`c /7Pd`~h|aD$6@V;ĘqDh`c /7Pn5"AՃ (%:$78>3t*"A.T`w bd䀕p8$1g|3pɈX\2Fg&4 r wg>l\~.|L1' !aG0a~K(K &jj<&Nh0A<+&4xOR$!Dlb"Q LA Y3Ap b'0GV#w,.!yn?;|aƔY!"1y ;PM <xe;[,0{D$H P{Z(6"<>f, (`%ŚEɔ 0r A4OI\(tA"2d݄Ȱ>DйhLS|'@pP t$D [ş I>׮p`̊&( a`q3$I@苠Å(pI g`&E fU$' cDbE@|@̓Cx0bLQEDX}9s 3&FGd( AZ@li~PI3 "6<$@ױРquY)?ʥJ>ޞCpmq Q9fC#H'j*#@܌0#t9\8,#/O2-~o/R2Df &B-1q1 3GcG<||+T\w6z.Y͞h' ų< nดf Wot:`A "P/ ><""y Xx?jl!lL?x H-P:i C٢Q.pdLf<Qwc>>:" xPll$I$ i F7j"6;|Zp& T#ۋMC̎ }P{iɡH$,[2  4FM?T\~$$*m0 6btIX>a¶c\q qHXvq0 f$e&1 YF,QlgY dpAQvH:qZ.JH-!H !h o\ ȘpMNMsjf$"0F60D`^\'y<N;1s`FWHAӛ83(F‘ @@~&qb"e"ON$M,y&X_ Xafc1£j2q78. "i24qUA5Cft($#'@Md"a耉1wB P{l0 h(:">(1~'F‘f,ȼ$ c1?SrIFOSɛ{YPyˁ 1`L'y|1Ю9`=d@| %8xG1PO&3''6z.Yq$P[bOf_14AYOqGD(6ÌcE@WR+jXY8h`O,D2DdU@ 0 hA.DɅcaf$X}b)sa!I+hrbY"$!`JfXAp0C7"` J`'i[JŌi3\"#GWP!@p`iiIT4X$0ya#,L93==%p?w!0$dtM? @#")R&)  O F0LKdRN) NkX$t FJ$2 a$0$+ bc~g! Y8D`LfE=,Ә;_HI P Eb'6/`"D E=` E18A.`tB@' D%FO:g30G0@@3eRp?2p5%i8WLBNdB,= 4ny,"b8x<@x:)0``#qtd㘜h1zc 2vMp@@@/xa'6z.Y&@8DX1jdg0Cs ljKẌ́b<`ʩ`]4&"]V: , ȘR! @+fHAJ @D8VPOLJS'Xs@@  hzQ '{&H4\D̤y0<&3OR'r8sx@H DJg6zzCP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<,h5Rh(ء[0 ư)M&"rfQ D@H;̤Zr1\*C@ nQG(08 m..K\EV" ggT0!"ԏ|&0m䴹Fi٢pz<Ĭ`6z"b1CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CP<CDpbdx=bHۉ! p0 D"@"' ~% PCD8L2'Qw, <28ckI`D(v:Ii@uCd3EvE lYC Ә: c=?FKpy[V$dք`pdm 09([Ab0"M$:Xb%"Xb%"$%"Xb%"X'H"Xb%"Xb%zb%"Xb%"X4b%"Xb%"XI3DK,DK8V"Xb%"Xb% zHIu+,DK,D@?Ib%"Xb%"X4b%"Xb%"X#H"Xb%"Xb "Xb%"Xb!=Gİc >A)]E8 M,RĹ Q tV"$:Xb%"Xb%"RL+,DK,D@?Ib%"Xb%"XI3DK,DK)&`~"Xb%"Xb b K,DK,D@ 1~b%"Xb%"XǠBK,DKΆ#e0( ҆0%"Xb%"XǠBK,DK,D cBLXb%"Xb%"1!& ԬDK,Daכ==%p?|;ûgٲ[6_i/|g~OԸpI_cȳ 2G~iel͗(əYSA6l͗ٲ+ݳ7l?~Ŧ͗ٲI{wl ?~z~U4?  ); 4U]YQ01A{BS̪w+rw+rw+rw+r ܯܯܯܯ+rw+rw+rw+rw/Яܯܯܯܿ|Bw+rw+rw+rw+rRw+rw+rw+rw+rRw+rw+rw+rw+rRw+rw+rw+rw""Fc9EE*Nw+rw+rw+r@9d %Jܯܯܯܯ˛ %Jܯܯܯܯ˛ %JܯܯܯȜ͞PF@Mf7ɐ$D; *64IAl_Y{wl ?v៾/iel^>?vA 0&5~iel͗>ܛoNQG}!AAs(3 &|жl͗ٲ+ñ&@XqCI he Ę !E,x&la%:N 0@ x1BC zL!aS^c5#4KͫD3 0 bVweۏ@cL EaLS0Č c Q%Q0p\,d( ZEy>K w2Ό&"&X"&q$8V90|  tJoɾ~D9){wl ?v៾/iel^>?vC&"r+ 4"*7[Aa?|HMޑ؈ 1!>H :B#% 6٢'lF K&QZ!nOzb.V @ #K$~$5"撤e^)'&km55@4'`BAX|&+fbQ"&B9֍f 8hql!B0C<1pC3| icp#pг lz@L)OARh9A@2@B 0i OYpPI?͒:4=!P WKûgn; M/e&=Ul%vH?a: `$D)DOM ^[WUUz^_^WUUz~z^WUU+EUz^WWUUz^\\WͲZaUz^+^WUUzsrK^WUT;r ~Uz^WW0W$UUz^W 䗪UUz^\\WUUz$}yW%(&<I ) k ~8B+W@U$ft@W@ov1C X2^]GȗY j% :q$:rnLJ6.bL"-2 @=h60&1IWq`˰UfmJ$ %tgcTRfYè)ngF# gVSmޡbE3],l"s\%f˽TA WUv U$f˵U/8ԂB X2^@Mvb3[PJ빌(T۽9#1zuܘ2 .J ;`NHLgc (vPj dHTU[eE P'M1J&:1_$.۽9#9zu?b"(J%?=?wOGN!:L)&89 LM>{ .BPq r7M4fl|-/el͗ٲ+r63DFҥ8n ^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^X,_!6` 2(0Qf  &EN0B[I`h@͹L34dI;72UUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUUz^WUTC$O6zzJ>MdrI^CC&@?!MD& $lӍfT @0hRYtC!Ya9N `A π'3ĥ6 YvD . q|OA?3m0d(r80aÇ>]"H /s!Dh.03Ǔ 5 "Z!I509d5Q:{ls ǒ E&f3Q`aGZpF!NJA/6ih\(8.3P銼X pi 8 ,\X%A!\L,h03MBa A]O{DD0|fd=;ɻr! BDâ"n6 M ]\)M2B]!E2s4fA 䟒S\鮴 18 B4pŏHCK@}_4(hYH`TfyAUxN)IaLBY\"quY 1d)N!T{CZ(+N3"уKA7]10`(Zd@ =,9t𩙢 2QHf.8KHJB0*]p!8fxQ`(#D?; q % LVaUD]8Ђ t̀.@P(ca' rP X@@{OJ9( "fLILO,#2&Rhp0y}J9"@6,#2&Rhp0y}J9!_Q,Q#Ѓ#jāF! Fd M¤0`j^3 ,rNnF4cxCY3q&,#2&Rhp0y}J9&%GhGaf@Cp4E8F<ھ ZF愖2 |CȺSCgC*DJYb1S_6zzJ>K0NJs <\#B320y̆ ,&-(0` SPr9FI3a5H9Z$1JAc4k  D`+;Gvg48.PIa.[! fϢ,< XX0@g@>jLYs c|AbAEӅMH@<@o.wd8}s -xN3E1:@>iB" 3f=zR0PJFh( G @`W+N(`n$8 F,b'8nT؝  g3 da ѐ3'$a=\@b.sQ `8s f2 8b YC d)V"Pf abhw$F1.xry q(\R$`` ` Gp!FvDA2nYL,a,'`K3-cTB[RP A3Yy@ɢxq$s2zTjc# bb%ϊ*`$c 01\8&1r|GI0`18i L<Y% 0 1r|GI0`18i 10j'7sLbdXE>@#s⊤AI0ChpE mh!B  8b,q:p&!!sd|3E@ȏq.g"ɧ p8gHkl.Cg6zzJ=R!(l1 ( A&x`vp#)"}% f5r1Mm4 j0P bG6!8PDҨx3G%IZ} ^ ČTȆL(iD@!/B<¸3A(9BD 8Hܩ)ЈY`o  q/AN@$Q' qL <BCr6$jBR01<E"0(Ӹ%bdNsCR<%Fʈ a@`&p& &!0>w!LTJ@2ϣh"yh !4$M_i)N'!AA!<00M Ñ eA")p?!pBGTY26$"%ZL0$Y'vfcQ.%h8 ]`vcؐjOtsiq -q%qNl s.fdgFNsȐ 0<V<8wPXp\&" Bb0F'S3 ~d8q1f`7&2`q4D]@VCM)#3dPK$MLauu'؃$HKA''?6g%8M^A=Ő<`g 0<=`g15Lm.E$4>,bqq@&LT[c7Pi#(iNp17"#".l{a1% I\D& hU /׎FH`,ŌPba T$d"?(LĚ\W$=22qgV z"Raa.Y@r 04jP`ɐ1e4*{pH,p8"q$hV Wp(Xk2FŹf'$GZ"pHPhdX 2̱2`R/ u .ޯ5-*v+G’ @4 NF#$-a"G:EIAcd  %"nn1%1x,8)70$Vv F $81Ys9.PF O܁ݜ\ d"@ ( ϋ3oX9Ő ~14}""c D.j1@ ܁f AK] 0tx4$ X:́B64@1 \hp~d!x,2'cg3DlA9>eD谺II_w)'F#D`' A.@ '\ XGPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUPhUD}iauATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATATAT.$# J!q3 &"} Z(풉I&-bI# Kh/ 7Aߐ\4q'H@ps( P$;b\t$Q6i! ,1y8O3;' r >,Gi7#vo $I=ٝ\ClFL8 s' 8$](!6(Ib8s"#وIKB(m/j _ ,/ rȀg$>Kjcb87= ,hEƠl)ד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny$Cuד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^F\5dד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^Ny:uד'^N /PC 8b ='݋eRp?$'x:#g| Npsg;T&4aM' HMBCĀz#DÈ"cS٨(b-T3 I \DA3 2xt,9g *q+ ,d\*v\pȔT+\>~C!2"LAR|q\ 3?Psl^i7|Ez-oދ~[߽D!ѡoދj[߽Ez-mދ~USY-oދ~[w߽Ez-l>R$#Ez-n>a['}OE-OE-lދ`[ٽDXqT[=Ez-n>d[!ʥJ=W48FN2gGIgx]Y#!UdwVGudwVGudwVGudwVGudwVGudw\L#;#;#;#;#;<.*2ˊ;#;#;#;#;#;;#;#;#;#;#Fכ=,43 @dXEQEE lFtVɥv+gbv+gbv+gbv+gbv+gb حححححؿ<v+gb?D9940 Gf#$ w', H%$Q :_S2 UH8ϋ,DPE;H<p0z?4csJp9 pD5sgdcA-[;[;[;rad[;[;[;[;[;[;&n حححح؁+&12nhJF 9%`Y jE-ڛlemVemVemVemVemV[{V[nչ[[}'mVemVemVemվ{U>^nA΢׵Qک[Goվ{V[oմ{V_-ڷj=| {U^Oj=|n{*hڷj=|ڶj=|ʥJ=9ӌ_zQ9*OՐ7l9|ɿ|=yr@XF4zTX ݳV7.!,S8 Gw.hpN&ĉ($q*X8`*,94g@m[,p0-;Fe΢2S9l|?==%p?rD8(Ȭ&<˫S !B|\f$Hǵe񶬾4|㑾eRp?Gc89)qa$wNZ/ Ր7l9|ɿ|=yr`!)~M/gg/F>=/eo濿|*+%cnD%X1>%t+] WBЮt+3Y+] WBЮt+] ]dt+] WBЮt+7,ʺЮt+] WBЩщ] WBЮt+] DK%&'כ=,2\F'"L`LK,DK,DK?$HXb%"Xb%"Xb%$,DK,DK,DCfK,DK,DK,D ,DK,DK,DNA&ib%"Xb%"Xb#}yW$bCÁc*cKjmY|i9#|.ʥJ=VCݲ?&sS򯏘E=I6lF͞Q{<0L'0Qiq DI[<Lw&o"ܮܮܮܮܮ˙%Jܮܮܮܮܮ˙%Jܮܮܮܮܮ[̪w+rw+rw+rw+rw+rw*㛊w+rw+rw+rw+rw+rj*ܮܮܮܮ͕Jzg(X- &"X+_b+_b+_b+_b+_b"L]ح}ح}ح}ح}ح}Pح}ح}ح}ح}ح}سz)v+_b+_b+_b+_b+_b+_bDZZZZZ<ZZZZZ ?^l\A 0&5KݳOɳe7l^l{Hǵe񶬾4|㑾eRp?Ib 8"p@@P&J@``OAp!@.>D 3 '`" r=Pi<@%BcQ!ÉCs, #4BLr.d`f(xf3@4491X0g D!̞G(VW?F J(rL4d ~?lOP CN(p0eqAB AĚ#sg垂1)3I%v$D N?\=*{TTQSڢEOj=*{TRؒEOj=*{TTQSڢEOj$QSڢEOj=*{TTQSڢsW(QSڢEOj=*{TTQSڢE"tU =*{TTQSڢEOj=*{TR/UpTQSڢEOj=*{TTOI\_|{V_jL~9vU*W앋\AlV-B0x@bDhHF]2\BI&9юHFPTj~e&!SDѦA `dܤ; &1?'6z.YݳOɳe7l^l{&`H 0( &`ĥG{2Jj{eD?{18)U{{(qj~{ĥG{Jsg垂qGј (dpA$2 .<AfUz^WUUz݉ YUz^WUUzفYUz^WUTx̯Uz^WUUz3"JvIz^WUUz^ jWUUz^D"b0>+ЬɖQl @e'U*W eAB d.89/6z.YfDd4N39X@sgC\QE&cHXb1ΓFDX8@h̔IĝO|G"!iXz7Ffs@3(Fh\ԟ~pӧ&8bqTQb`(F×B$]e41,{[#,0P!D ͌NSE^IrвvC Bi&Bi=3)$ FrP>_XM/3R1B1t '0B"sDdN$|{*+*$sbHbDn,͂C0e>r Fla8 F=,IrIyCd0`0Jd>3MC\&0)bF!.Ę ;Ax=Jp%BfX9 Yl@y&&-z6t^ +D&4a4 ɰWUF :C`[?$ ̰rtE ɸ&F#%XȔ b`EZnf2 ddXL<$*3"A0$w s 9d Ws!j4yO==%p?Tj9frb&d "80r`P'1CSԨ>܅2g h+btq̟{ok4f`9—|-f&5)93)M~US E&.y10!v -vjQŬ5bH`dp_̈fdd&"=L(8 *+E=.v$f9G'8@_EX`1-_hX'"!5H f8C~A QN}F? r+ UeEpd ^A`A`IUD .yH3!a9FI"Op8F0z&s>9!O%') (csr"P &f" 4Rg!"PB"ђ(A͞Jsg+T\w6z.Y͞ʼn:- @[*Th hQ[*- @UTh @4 xQ[-FoUTh @ hQ[-Fl4 x*Th @[*m4 h*- @[*ThvD̶U*W2go[@- h]UTh @4 h-FlU*Th hQ[-FmU*Th xQ[*o4 @U- @[@*o4 @4 h- @U]@,3.l\ PJCEUE*T;wQP]*T;wQPECu*T;wQPECu*[වUQU-FoUThFo4 xQ[@-FoU-VTh xQ[- |'6d͗6zzJ?iVʥJ?iW6z.Xp+q[*+q\b7sg6lT6sgg͞dD SInE0IF;|d*Ș `cP7DGU%78<>#T\fq!X(#a%MfJ !AdaO ppp&*rf⹳r3ϒ)" (NL$̩D:"P2 s!尊c .CX8tqssbšfC>)L0視 >AC (G8l\LQ^}@`a@yH?BthNfqĬX a8QJn" DbP![C0 ͞P7qPAc:) H F~L0H)!fɀt2nq00t6cyL☦.$3C>1,r8J`$httPСjf~$'2B1C$`)q;@3;.+܂SуpQ@DAgH⹳r364 60D hO 3Y;D̫]Xy2`տ L|Wy`EÈ̔Bq(b`HȆH` ߍ`\ h7 N!H858J=`' Ȧ$M&&r'rJ,h` G'L@a.ȰL;.40sggI@FeM*lH;+#l3lJj7a38ɰ$ ؠsg6lT6sgg͞GRG͞)?w6zzJ?iVʥJ?iW6z.Xp+q[*+q\b7sg5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UQ)+eRp?QTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTjLI\bYTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5UUFUQTj5Ui\U;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pU;pN`MuSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSƪ.vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ? ['Ԝ $I$I$I$I$$I$I$I$I$$I$II$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$ [mܿxWbm[mZA$:Qmm"Rmmm2+mmmmmmjX 1Kmmmhm› `m cչmH &emmO`[mmemmmE6Nmmmmmmmmmnm8a0mmEmmmmmmmm-lmmmmmmmmmmmmmm$I$I!DI$I$I$I$I$I YI"I$I$I$I$I$I$I$)$Hm[mmmmm[mmmmm"$I$HhC--- --m mmlm[memmhmm%m`mm]mHI$I$,$I$I$E$I$I$edI$I$I$IdI$I$"I$mR+mmmRyOmm,I I$-I$I'I$!O$I$6e$I$I$7$Ly$)$WIdI!mmcJmmmm[mm$@$I!H(l۬VlX[lmQHkiB?nh kƾ mm[mmҜmm[mmmm"$I$HmL<I$ HI$MmND%F۲V?%{mI$hmmmm`mmmmHI$I$m -B--I--memAm m[mIm(mmmmmmmmmy/~o-}$HȢI$A$I I$I$I$I$I$e?momm}mmmvm&m i[mm(m-dmIm(D[m-emmL[m@-mm,mm$h[m- mKmmm h[m-l m%m[m- m m@m-m[mmmmmmmmmm"mmmmmmmmmmmmmmmmmmmhQCe[mmmmmH܎%ZaBᅲ<$mmeN?Qrmmmmm(KQmmmmm-Ӕ̮HH]hUCymmmmm &Emmmmm$I$I$I$I$I$I$I$I$I$m Pq/mmmmmmmI$I$I$I$I$I$I$I$I$I$ [HTĶmmmmmmm$I$I$I$I$I$I$I$I$I$@ [mmmmmmm2.,mmmmmmlmmmmmmm$mmmmmmmhmmmmmmL߶mmmmmmmmmmmmm mmmmmmm mmmmmmmmmmmmmmi6mmmmmmmmmmmmmma&I I I$I$I$I$ $A$H$II I I- $A$H$II I$I$I$I$ $A$H$IIm[mm--elmmm[mmm--lm[mmm-elmmm[mmmhm[mmmm-elmmm[mmm[dI$I$I$I$I$I$I$I$IrI#I$I$I$Immmm[mmm-elmmmmm[-elmmm[mmmն%lmmh $I$I$I$I$I$I$I$I$I$I$I$I$I-lqnŴmrFB<}FrS/XO @Ym[mm--elmmm[mmm--l_-[emat{lm[mzmTmm.hm[mmmm-elmmm[mmmIdI$I$I$I$I$I"I$I$II$I$I$I$[=[߯kr:~.|yk^~ݾYlh[-elmmm[mmm-elmmmI$I$I$I$I$I$I$I$I$I$I$I$I$I-I$I$I$I$I$I$I$I$I$I$I$I$I$Im[mIE i 6Ll[hmYm-mMIlim2Qm - E(E,E[hmYm-ehm mm- DDl[mKmm-`i[m mm@-@d[lKm2Cmm6mi+mmmmmmmmmmmmZmmEnM[mm[mmmmmmm]mmmmmmmmmml Ac7GXb? &po1]mmmm[m(m{qmmmmmmmmmmlh80IxHoDB BmmmmhE%ߝHy@I$I$I$I$I$I$I$I$I$II$I$I$I$I$I$I$I$I$HI$I$I$I$I$I$I$I$I$@mmmmemmmmHmmmmm[mmmmemmmmmmmmmmmmi6Z[mmmm-mmmIQ՛mmmmmmmmmmmmmmmmډmmmmmmmm8!mmmm[mmmmK$ mmmmPmmmmmmmmm"-mmmmmmmmmmmmmmmmmmhIyI$I$I$I$I$I$I$I$[H#$I$I$I$IܒI$I$I$I$eY$I$I$I$I$I$I$I$I$lm[m-mmmlm-H(I$KI@ $IIZ$6mmem[m-mm-mmѷ{lX@I$I$II$I$II$I$UYI$I$I$C &ZI$I$I$HmPEeMIimdI$mR $Hm"ImmMmmMmmmlm[me@$@--mmh}mmmomm}mHmmmmm6mmim[e[-mmmlmmlmmommmmmv(I$M$I&I$i$I&I$I$IVm6I$I$I$I$I$I$I$I$I!h7mmmmommݴm&mmm6mmm6mmu[mmmmmmlmmm[#m"mlm[memm-mmhk}mmmomm}mH l[mL[mI-`meY$I$I$I$I$I$I$I$I$mommmmmv- -,2m[mimmmmmmem[m-mm-mmmmmmmmmmmmmmmmmmmmRI$A$I$I$ $I I$ $Hm[lmmmmmmmmm"m[mmmmmmmmmmmmmmmmmmhlm[E 2m&SmImmHܻmmmmmmmmemM[mE "m-mm@mm%h[m-m-mmmmmmmmmmImdm m$mm%mI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I"I$I$I$I$I$I$I$I$I$ImmmmmmmmmHmmmmmmmmmemmmmmmmmmmmm n@֎mmm-mmmܒPYOmmmmmmmmP,[mmmmmmmm&ҽ mmmmmmmmG;[mmmm[mmmmJĩmmmm[mmmmmmmmmm"mmmmmmmmmmmmmmmmmmmhmmmmmmmmmHmmmmmmmmmemmmmmmmmmomm}}o}o}ommi}4y$I$I?}m}mmNdI$I$I$I$I$I$I$I$I$$I$I$I$I$I$I$I$I$I$y$I$I$I$I$I$I$I$I$I%Y$I$I$I$I$I$I$I$I$I&"$I$I$I$I$I$I$I$I$I5I$I$I$I$I$I$I$I$I$IhI$I$I$I$I$I$I$I$I$II$I$I$I$I$I$I$I$I$MgI$I$I$I$I$I$I$I$I$ZI$I$I$I&^$I$I$I$b,I$I$I$IZI$I$I$I$YI$I$I$EnR҈I$I$I$I$dI$I$I$HEO~I$I$I$I$$I$I$I$IJI$I$I$I$y$I$I$I$䷷I$I$I$I%Y$I$I$I$p!I$I$I$I&"$I$I$I$5hFLI$I$I$I5I$I$I$I$Z$I$I$I$IhI$I$I$I$DI$I$I$II$I$I$I$M$I$I$I$MgI$I$I$I!B$I$I$I$ZI$I$I$I$I$I$I$I$I$b,I$I$I$I$I$I$I$I$I$YI$I$I$I$I$I$I$I$I$dI$I$I$I$I$I$I$I$I$$I$I$I$I$I$I$I$I$I$y$I$I$I$I$I$I$I$I$I%Y$I$I$I$I$I$I$I$I$I&"$I$I$I$I$I$I$I$I$I5I$I$I$I$I$I$I$I$I$IhI$I$I$I$I$I$I$I$I$II$I$I$I$I$I$I$I$I$MgI$I$I$I$I$I$I$I$I$Z/mmmmmmmmmm mmmmmmmmmm[mmmmmmmmmm-!1aAQq 0P@`p?ub:S帀j7D (LhCJhna*L[Šـ<$'Z$ xo@ ܉C49lEF1a ƍ-qVX$i袊((((QEQEQEQEQEQEQEQEQEQEQEQEQEQEP((((((((((((((((((((}<@6#Ma@,ޠ;X56%"& Ix5@U Q=klJUN]!}qBmУg@C֠m}zZƱlaAZQE  ;USH:4.@Cթ Z8GR.'jk ŧp6[Q]֛p&ryN׶?7Ӿ~2RН|!8E@nL#U *-A'`7(@"C7Pr\dXFM  ĶళZtW@V0jHd?i)J P 7Dѡrdd(DIq`ƚ}ϛ,L87n" i_m"JHaEr!Uq"nF a+"2gA!E HN¶{AG4Ы ^aa@ q RBHJLMikr!7>1SQ]ֺYk5\ᆅh$kIl d ;M4Ø ;<" +lmq:mմ!x8&ٝ-JԐY:B =蓆4ƽW{ D7{+FćR8.!8;wHD#P슽c2y?ϵ 1gdqh~ۍ5C ] hŘp#kOݠ%9cs@:T,W[DrFBgV?v ;h r k(4u q \Ȗ0yv! =j^S<<qG4k&Ru$kMS$@# q$qH2  $^}:htR $XC&O \FirB[}؄ɥvbZ5եV \`&Ox`bHUr K!]]+4K*lp AfKy ()JC1zt Al66 A 85–d^T:B 4CIA%GQ@RRC$yC[f Dt[@U$Ҕ`hjkTD+e4XU,4T3{ 5O,,*S&֕HR!C|ϛ ÚwT rU5$GzB 9A0T`vE.$7BܰH,}";jRES2Ӑ^XELq ( ݅E ǜ@0)> @h@R:ЖP"nXųp8-ϴ5j #F;nP*V1PF է+Bf`Nk4sA/!DPa>fEpFuPB90J ADD<Ћ iAS@F `(: n@j@kFw`6 t~^gW) POP-D^ HM E" {*ңRS1 RUe1S}O HVPm`OIl޶є`ry 42DZ^\RbA u5*5d(Q$1qHf@ qCbbbՃY S ڇTv}<50L? 8;'S>obđ XX?1?1icc{O{@`qűYQ 02(hI m |ߗN34Ǡ>sO:w76=Os>]o>cc+S}CP606{9" R@/?##^@@.Pl.T6(N, 4;~ CD^/ZS>Ot6@%rze_hlɏAՁ=+ma~^; \K!Qq'^ P֊B`SRe~XDFO>oOi=4kAhC|}&ωXkSH`,11mkMa@Ԑ>$ЃIA@`,1w>cc$>OH%XH0x\ϠjbHm7+1_/Np{D/ƨ?{|ST$Hؕh/Nw/59{NS&)|@*0{۷_)VW`&V`O΀B`5 Aߚu@|qRW7UV@BvyAyP/8ݢ h{7kr8yPS@kT? ` gln%%q2LL(`M{7b&r@6Zp;:wexDr+)r\rbf5P;uq~Q_T?~^~ =CS0L1L01L0S1L0LS1L0LS1L30LS!~a3D&)/O(HY` : 'v.FB!*5+5X,,""!BBȈDmD"PD"D B!D"B!D"CO17zt>oOlz/O17zt>oʘ& `& `& `& `=Q}k^QE/E?iE_eEQETQ}_pV$>!~7RR7;* '; *9qqqq88888888888888\qqqqqqqqqqqqqqqqqqq䢊(((((((((((((((((((TQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE>(((((((((((((((((((g=:1f<G\Y#_h!jNwBaꟀMsA =r((t@.# {j6!MPN㼠 @?%:@2{%~?q C<3 a?0J~wq$D$Q[8EmK0+?:~yqA>м06=̜B]>5-XI5%懏IG䍬@ ?ŀa0=i򩏁 < ~ \8Bf Eq?R9hM{o៲@Qsfifif43L43L43L373|37C3| 3t37C3t37C3t37C3t37C3t37C3t37C3t37C3t37C3t37C3t370C$k O kb 2;?ZJX #WPH<>`.=Xk1{~IHpd~@e|_92̾s/2̾s/2̾s/2̾s/2̾s/2̾s/2̾s/2̾s/2̾s/2̾s/2̾s/2̾s?2̾s/2̾s/2̾s/2̾pJ21Rox+mڅ|¨* 0Y ϵRWZ ~^# m^"Vj8tʓs;rE0(_J| CfP>u@/ޔ-Mtrw Wc  F@"@IEo:BEJ^v(n|Ǹ$}ks PmN5R CNUa-xS8?a~4"5.&+_7 E6(< q$?P'_l &$/nܗXXF+sP:Ĭ|p I^SޯwhX=HtDH Զ)F'?&0?]%?d/LLAzfVf.+B+7|9`>qi̮fds33|f_9>f2g|_32̾s/3y2̹e̹3 s3dK2̾s3|39E?9̾f(~_?x ퟳck쯶J(_p_eE^ETQ}+}T^EWky~2 BG"1.`BjW JcAN+ow@Y hCQD4EJo:oiJuv l:MNFBhAIKx^5&i6"#LkEKiu6fLޮ Z#ҰML@ f^-]a dn=+B"-k\5qxd*&b 5p5ZFŕ X!#j +KoW@( 敏BmPbpcs*OJ{AEhHe[ T!8~0D#@[ۄcWohwphnl#ZXeڊ '}u !k.Ԇ65 +0*MG A+wZr PZKf&.8IF0[Hf8Ij2<uX҂Dk7(V= &hC/t8) |Xm u\V4'L"5@vYJؤ]C4Bޭ꽴Ą7aP=6jUY߁0 wahAP @0,%GK0T4Kr-K ;M+}(@<%[@֤Bhl< }bl@n^ٮ Mm AԐ*a 5Sgr͢(#p] tk:X!m)Y[3R(zpIy":5{ Kz]aHDJ-hRmGqcp:c.` НUi V{`%]KTMJ1$߅!bvd&ַ@_a f}\qqqqqqqqqqqqqqqqqqq\BF KBa{AuCaz J4$7k ^j5ZQ$r jⴥH2@ h}݊ȫ삭+tt`-NnRIU" { jbʖДj,oN4"^۹®*PKTe]Ċ8888888888888888888!0L&4 Ϊ^ዉM[%-k@r4; 2R 0U2}A(F 4@u2[]:ρA>*ФWd?m7Xܓ .G{3LڸVl$Y? 8888888888888888888S?]h [rC=:JpQWXjv﹀˭nbXtqxV#Ix1 ًEOB'e5i4Q[~X̫ ` )zM؁q~^Lh}c[pրb))Fkf ]"ѢYߎ%wN`Ł`қ@&\% NtQ `誁*:<[~e[L9[n&&#Qd9 W9hI<.?2A@Q(8b@X?ϠH،ҷZd!}=X*9קO} 3C0ЅmE}F20GH[~=$6x4Im^I:4Uh8ɐhk'(GUZXi@ IJB?0#^Z^MlLq Ł^ Kz!"E/ TI0wqJAY ѐJ0P$T$ԕdG|az K$J''7;<4VFNUvlmn^=4 DEU @G.@ V+3^oHjN>7uQ"߇j06p$cA8F%X2gz_&ԀV/ (7O%QPnݽn!$% R&$B /lD  B%l XSr{ zP Y@8:T5t0uLfujY_PB p !m@F㚍M>"|I0QIP kw%R~У/C} .8jC?L.{ʽy=^={#G^;<Pw*?y׼y;{ʯ<xy׼0:?}bߐd}GI?m} 쯲_Z/}_e}Wֽֽֽֽ_e}W?pT1n@VGԐ #}@2i$@ Yz}hT,~@ԐI($g-أȂ8i;}Z<>Pz{g [" 2:kKP(d *4 7`'d!kT樀PnĵW)7jT\,Q-AdQG%P*k).2-An5T'\O|4UފرmY R.lal%jZxT !kF#2PA'[\G! ]+-{/@F 06 VHw2xa؂(Huiu,*L!-@#R1q5Rp\,*b \uҲ $و2ЉX~MP^LS>,/[HC_0 p8 Z؁"eX Q  h5+"A{]P @ Zjވ$kV @N ō GUmQ~U 5țC(-,:Q57 OJM1\ڔo,E L<,$3эTg ٹ8H + 0 8$ @ @λ^ bmRK [LR@BƚEeK=#VO(&47SZP$-ڢayKx]XP](Z*ͦ+Q@Za@X TZ6f@DfC!KQz>F- pnFԒҖn8pv F)}g pH]Duԝ`q!. Fȡ n*HDMkMBж#6ջ Quj bMd .!J {Su W#0OGP!s 80|0@LK\B`MZj e 6*X?|S%( . >*O$I7x6H E6@j @$x(;KDM/Dg}U!$@ض=Ɔ ưHoh^}alp`' %Xm/vw1"=dp&s[4B0Գ8PS Gblpa$ԱO!=ҍ 48m6Y ȷ- Vq*WՑܢ Mu)@& ؆tծ~~oAi!ԁhɰʹ/ SUP )^7B8 HC\lC!]j "i}a׫2 q&쵤e2 LV *$! o/zJ-TE ;w4*oozr(((((((((((((((((((QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^(((((((((((((((((((D!H$iO}$@B "? *T{m~R@Ҿ|\lM 2Trdh1yKh5`@6P֗0B(=TE t! @D;"26J eTM 7C7 N &44>M (JDi@' #v-2t!wZ©-.~nlön\KtaxT\olN"W ekT4*TiCZ*!abE)Uh""qoF)v fB8XpB_tS#NSSs*rXiZVFΧ=1Bm ;k2!z#J\ Iu+kxkEocj̄؍3b5W =Xgl#n2+mUr;Z uռN/! UjӆӃ Г_X `!|o0J@kjaeIq Y* 3]$zS# A2V^EB7 6 ' J +h M^ሟ*,{Am1<(ڵiQɀ!rN#\Q B<PtǴ@YG^/鰂%!(8RAßDaf״:#iu0af״:#n&-0afafa{L#iu0״:G^a{L#iuG^DRL#iu0״:GYu0״:#iu0״:#iu0a{L#iu0״:G^0000U?2Bas\9as \&9Lnbas &9as\10.s \0L.s \&?11L~bas&?11L~bcs&711L~bc&711Lnbc&711L~bcA>8& 0L0L0L0LM `& `& `"m& D6m& D!ChD6MD& D6MD& D!ChD6m̋z~ E^ЇOP9ȷ~ɷsz8m ~d[O?Q6~b1F#cDb1F#b11F#b1hF#b1F#b1F#b1F#b1m6?~ɷsG/6QH?a!@.|vHOOO?@cXʒy.Bp2 5Q@p쓥e5J&ԗZ,O?Z}\qqqqqqqqqqqqqqqqqqq8888888888888888888qqqqqqqqqqqqqqqqqqq~#.h0x#mJJބ5 q5v-HjEHPS&*Ա@i\(TYk H]*t (@˪֖]m>tqP1J: ,^[KU6yMb2t;@D m?rlO% d԰QZ( +@x2=O_ >ڍU6';HJ78} i {$ɥ/@h i*-%`tCj&=Ɉ 0hQ*ޝ4j? WN]wUx l0K"@jҭKUH,Aˀ[BA:0}Lk/*؂K4 b23|E:b  Q@6 tgB. ްֲvE QU-=LP 8!*XjW:qRtS@6~..zl$7}??40F`Ё^:abz2,:  ?0{~֍ Q7RPE-qk$ \X@$DuDAQP', .j&TqSPK[Tr8}tdh_gah y#. X,d9Q旧 L@-3SNqpJ"u;@dT$U%@"T"1dH/ia7R,+Bͤ8 D%象 ySl^FX\@?@lq Eyث0Ch]MSsdt!Q+fX,-&0$]h8^06BI1wf:JA/uCA ԐF&!r5$$F@\mAGeiw>xLxCeY2>]xCg*Lн͐ _j} mH (< ?bPD0DPC_u_n?M?ȹj OPv=W[@#"BB=D!Iddmf{MR L? BpGʦ\~}40.0ih *c$A;4x!Ś\v (פC:ؤsX]H*&] $kdf C~jBt:4#>WxCgCpA7)Ph+5Aj+IFX*ucd 8^U ,yZ(M\.(()W!),^U`5D`Ë́:e@7l@B`)TH Q!` șj|?$I,=5W5 !TX6kW—.OG~8-P$ZP ORK"Z1^jɪfZ4q)@U_V% ]DI0p Wނ}w>xC9[1͇XHvEQR2@e4:bFQ0 e(@k]i0Y'S8:>.NBVwkxaHvf֘@!!/>>e 045%Fh,,e'4H3$vo).O nA} s@XXo iTyIjD~N J˄_B!( AqDѷXa̘tpJ0zBZP]?&Y,h h,D(;Xc7$)YCSLd:)0]Z _7pO|YO'%;{ܟr}6O~52VPFG;R'ٯ؇O˼!2},b]?.O˼!e}tLM?.!2}4LK<Xԅc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11LbcЅc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11LbcЀo1Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11Lbc&11LbT}\qqqqqqqqqqqqqqqqqqq8888888888888888888qqqqqqqqqqqqqqqqqqq/!1AaQq 0@P`pတ?g"z ٵIGޘЂZ^ĻT@rbzL?eOo<!{E$lu. z i^fGDFDa"9KLC"^tu&y9 2e(SDP5Mg6$6A"$#4[j /.칾E-wk~?$+vW!^Cey;+vW!^Cey;+vW!^Cey;+vW!^Cey;+vW!^CeHNBCW!^Cey;+vW!^Cey;+vW!^Cey;+vW!^Cey;+vW!^CeyUOi ڂfps[c#JF,B#ŵY]#l(w{[$[Fp[]0H ~mVYD3f($IjF}=mJ6U&a|Nh"Bsse08 ' \"]hBڒN$; 0ƤŦoPeޱQFl#40xegQ+r\/Ty_t{g0ȹ rkѯpC(݃-E `tqCK0/RBd 2"hܶJ@p("(e4'I1"/Jiŧdł919B$LOI(&[pR\C1r>g PLcvњPp^;7@`Gxq3ѮW;ҀOd^qdhh'P)8Rc-$R}V'^M-eB/Ҁ㤃GPjkgy=h':o0}"xi4鮍ҙ7}q&)C E;PB7v :En0TcOA%pc731IY6@Sp|SX*k#h )qѡ/uQm( hOZ i f\[f0sYYz Y!-̐'IIrǯ љ8_s$VLF6 q kn /ŗK yB_dkS)^xlN3mơ=Fv1?jMpPG6XX0PNpok{f}cM&n_'j <*f"\h0HQ db(XQkG m)(A4Ȁ KjbcI$f m}*B.XEc}=q؆\@,1{8`6; MHx! 3L@Hǥ$ˋE (zU* P "v*$2ݷ8;oI ͉W چNݮ MF.\"FxZ[ᛀ3 '9~N~BX߅bdjiF6")%KD|& l]u`Z=@@`u[([1"#-b$m#ɍV"\g\Tf >RipXpM7K }/JAq%sIBF/f00:,e,8ƘLB tQ4BHC  iV%Յdf~&8cO4+8j6@@5xX}!jߥ.!:3vRt(l-h}jɉ#b qq.I% 6˽\ֹ9+:SP<&'L^ ' 'KGY"%6.i3n ,uAQCpNHũKX͘^DUbZdN!-d$ښ_ [RXkЌm[o w"tE+J nDc( el\LRP'$w,E} aAbnCT@-XC)tH B>:1dpv~}=L-ߙNM9~8_;~8_;~8_;~8_;?r1ok$&A@& 8M>_Ol/|Mg/3ѠD6[~Tl"/)Ѩ K RV(em3{g+ uN"箧H'O7DN8Ҹif8֬A$ǧ>gKGe>bN)я'x0_Ol.zkBf%睏{A),}TAGV A~hDҮc N!Fzǥ@T̥5.qV9Fv;/|'A*>7%0^x5(I5d+"c{ڀ܅}3uϗWd_JF`pK~Yۿy~d?\Hh;!C4#2kz$mHoD(BVQ)ߕ4^ܸJ8 Zb}3Cҵ4)3ƴ-gi]u8Tͻ3L!Q*w@.;y4Jn}Z^?oJBoiP#C$>z㷥Zj1돚-Xħ X7#3Rq1}v&83?zqҮ% jgtjc{4I(!?m4Z* =ҳP2**\|RI>KDxTp0RhA5`] FFXF,.} zV(P}RͪYp m٘m!>畳* OT`ǬLt>٩`fG4MbAo&{xNgNեfK&1/JD^spDԨ`*F( > idC&aHqR:}S4k>$Yрqj:ot7c0X@/f{rn:aԂ^Ϲ A! ْbiXfZd |NZ\QnK8I„f/'(,]D7O+; 0ţ)ћ{K`3\T-dM -߇O4^b#s.[C^jpP(gޙ~n=bL8eq&Vx٨e8L370sYoʙSVMotZ 0[tB8lxJ`!.QJKDaI"gX?ߏ;Q1rv9W\ i>+۽CMuIwsoK1lMx޼SBi4z׊}>=05j}zedbKw<ML\z7^X^ Hm_@nv\OuOz%ddv\;.zރw+KP>:n ] jH >ԉ/M޿RsXjS~!ڂ=>ԩav(W}_GjϵxGڕ>jyS>jSN;W}Nj>ӵ:g_v;W❨<,ϴQvjQ* g;R/GjS0}j4_v>'JS~)ڿA}>jC~)ڵj|S#^Q;P r/ɇJx9|Ҕ{d/m8//AiwbGZ~ݭߚkw٭f=ks٭gn{=s[juR[[[5[5[n5[n5[n{5[n{5gn{=s[n{5[n5[n{5[$Yf#Xk>@ ~ (fzRS+tc5Dԇў"n}s@' o Ld <ިMjKUfW a_+~0W a_+~0¿W aZ_+~¿W !_+~¿W !_+~¿W a_+~¿W a_+~¿W a_+~¿P{ ]cؤC #Wr 9YO[;zjd< ]IS1^t(^vKxqSdysqo=v7kkbWH)fi,]5)yGk$=>2sڣg4@qQ# 3٠cjU7tH%/Ϟw}(V~D}|Xߎ( 槅Xc~/|Lb>sږ:ژ;cNkؿ?FiFc mJ }KG=Rq)2xvmyzũeС)tsopז:L-^~b$||7ސmЖiz5v5Pc 饋߆֏z].rmz \=\>܊Kߡ53Gߝ PKKHQ$z_AZt/"3='^6ӏ?a/ÙB69ߝ[`p.GR`P0Oɦ4$tP _Z1Aa9Wipj=G6U90c*~Nw'>\eڿ׍jxOvW]JIFԣ/I_v+E~(ĻUQ\NS-I*nMs_'~(W@Wj:b ZQ\n#`~(+ԧmڿW]J_vح/eڿ96V[emV[emV[emV[emV[emV[emV[emV[emV[emV[emV[emV[emV[emV[emV[emV[emVXQLkKN,*nT\-d1&75DR < r2qC ʸGnkQ1i0 e\}oq ]X*$N0̚D-\"!Ţt#.F(k :ӄ_] bӟEϫ$ m,N8hqPx5E2. Z8# 8bEHm K^a+f" mLEg@8L:Őbzcߦ}i)"0fؖ+d3%yV*iL$Ȧx̭ڰt*BKK,M.je$!{ A !S[43#&TSq<ȶ/=ٻw kskD s pTI)h@ENKyFp$ e+r2q$Z51e@`0zBZ|GHtU,W/x( c$z84o8K7S PW^T!#@rԈuA1cݩ%;!ABvɛ,@8Eyq#L|ӑ/2( *U!ZIKcVEח!7mmjHMU#$D[Q#+=d'&`XIu3ޓ5 X˻z&)ZB潐0z@ I <,ړnؔ׆^1$7:ZsY'U\}6"B-ؾ p[Xq&.i@2sHhp#ђo#>K9`5We} }Wz#lyI ukhDs3]Ք"x+=d'&uO*γ~txbC&}h@Eβ}ئ^뼹G$p)˅ @Ґ [v/8c7"ײfOA$*Օ4 bHf 863 p8.Z/@m3bf"7cDs,$ b{Ed]1mܹx8= AIq<,z.L]7Ǝ\ȶz3k%k.=HH q.LKH0OXEjӚ3 ,bi ݱF'J F7E[ C!"<3С:mcH.i_v  uJD[~V7$""Oalqlf-]=g} WX=I XT1WX+. հFK4 3,0ҹ@rؠ(ŲFBӊQԐ-'QrI3j-6N$"p(2?{`dnHSM14`GN&nCS(117bsP]cLkB>R O(Lo3bQH Mo1A1dґ[ ZNa5a1 zIR9YѴ|#.Tsv!r1 ބ'@&VQY5^s &c|dAђuΔ&_tXPZ㛜b'QE. 0gO'ء MN^r*g :) OK}ўn# r_U}_ɐ,GE( rQQ?1E(#ܡf}"gܢ{~bQr}?1E9(rQ,ǹE(>w(~bPܠ}#ܣb(>{*ϹE(\rXr;\r~RQQr}Qb=J*}%T0'RyHLJE:o=$qI?тcه9eYvLV pN e[G!Y!}2G-h`O}0J%l_% k]|PE4wbC{dm4lFiW _Fl+8ς7j@ =ɚaeUKbcUK1. %t0uQlYKwEGH< sWjO"ˑ`( ,tu[nz*lF)v&޷E#u-H%a՝, jtKjN:"Q+rK)5Vv3bjr}ZD`&u;!nҥ0AqK!{[6lcaZOZ@ Mzw DM%PYxdfX`gQl6'AjYuya5pRpo0Eb_:P w 9zҌE[(Y\:MS:Bs IFH"@X̽x{ґ0g\z4i]b6'I\[Fl"qq&  ,&Ht& CDl@Bha|$J@R$^1t*eZ`A$e1b&DWڼ څX<,i.}-@5tS` F!t6`K.n5._t݁<$ja)n-þE3Hnѹ eZ3gi|QGloR@16^.I1"MLUas2 &5' 1DIb@cR >澍:Ζ Ōpeu:pT1 :+Գé[~‘5<Ȩ,MbIu*~˂ `K,R9Κ"2Y0.]#zz'qCJoHqaOU}"A |KW3LAM=gEtlJ$'1EpYmz8E('8.O.D/E\rC޿ƪr˱)/K䘀#@雈ma'U%1+Jqm~X)m. _NwzԹyD#&I܇>'/WJnqvכzߝY\JnC}nO8S s~jЃc*׭ ^=`E[h4Ea9:Z]9"tA:Uѕ._]k tcnTAn 3x Me<:iYM(p !Nw@T: AX:][;"tHJ&7v0[;4X'x @,k2$A;$z⣆%rz'z@2ϯudڹgkNT,@_/NZR$ΑI% 33o-HJyfzz, i٣ 6S9sPB8@*;K 2^v˘gh$ѱXzQ8#&3VxaLYK+ 7o,X Ԯi/Q_ܠ_IH9A f 8j/? h$KfYug@J?Ĺ8}tm`sjct B.%t&`@Q&v/- !5J$$6_F 79#Жm1",b$Fz\qĪ:1dx$J^1::a%ƨؔP& pd 2jCzI,f<3]QN*D`!@p ?C2GJwW3xZZwl/$ p67 7ζ^lJ#k%F*AfyiNSB2V -.BB5TI^j\v q56d#[$F<t8Cf/u`E"\lKL)T63}(T 3d2xiDۅثZܻ&$jY hi'{tXxzG\năGԥLc銴/;}[^m\bm1'+x#Zco9h PلY0낒y $bHbN4j(hBLşwq)tqR6"V凜^}s_< ݞ4$z, ؘhrs^ig4a81 -,m9N, Q!Јڶj:hڶ~մu{V[GWm^մu{VSI:h[GWm^մu{V[Gj=Vڶj:h[GWmhڶj:hHXI+Mmhߵm^մ{ڶj:hڶj=Vڶj:hڶj:hڶ~մu{Vڶj=V[GWm^մu{Vڶj=V[GWI 6H+kԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=J+cԭR=O??C[[U[U[U[U[U[U[[[[U[U[U[U[U[[P[[[[[[[[P[[[[[[[[ q1mL3NSu:NSu:NSu:NSu:NSu:NSu:NSu:NSu:NS CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CP5 CPެT_AT%pS_Rb(P`2AX C$kjL]M. Lh 92!8#̕Cw9Qml-nWl.CHҡ8KԈm0L(Q7}FG&Վit[fqlrRE!&\L"RdԪh˰RD??LE/E E6TˌH*"!,139C  9j08'ZI#ͷ(QzS(%xv+.3a ) 4%LX'.{D73rJLc~"᭭Ǘёlв Nc3M4S ֆ9ަl&0yƭ55A:PKD_zQԨb;U瀅޳,y\԰,.@w(ۯ7eAwzҖ|i ] j vN50Xf铓LQ31j4aH$dQ:39m82mj9͆xlxleZg4}&}`l7 UKԌ[ \ϙy 9Zsj1[@zTui!2SYtuP&ikofu`yi i_4CqW 7(PkYz}邠j$C^6 :ң/ gRPOaЧc)T&uoȊFQI\{WP<<6Dc]&_i ٸVd/xXzf"˪N0jL#D鹯_I NFGc ?L ojf{A+v*Q[|ԓA`N,Z $j ͨMi0 =iEsWrध=OD]rYް2)Oʮo`0 Ih2FGGW',I${I!\C5,0QȖO!*) s<Ӏ6r9[ragfI *@ZFCן>?ȄZ;4pHS׹J~-N(,cj*DB zI9=Ƒ\*?EUƯF>`jfOF>`jfO@5[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[ս[սJrDaޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭS)ޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޭޥ,-!1AQa0q P@`p?|jv=]0gЯl5a*f AˆfNڴ}Е46 Rb, i(._fcFa͕gvx'Bz#ϠYH@D7z.5!/Pa̔"+IO+"/bUxu a]qlƅ"qmd]]BH2۫kDE[8n킗tL @&:Mׯ^zׯ^zׯ^zׯ^zׯ^/kMD +7^zׯ^zׯ^zׯ^zׯ^zjjWUPTMMMMMMMMM"4(x9ͿMMMMMMMMMMMMMMMMMMMMMMMMMMMMAd"9~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~)~(9φ\kPZ,y*ZqbVQJ 꼜1GPe!XŁjŠ5qrD,C*.R4lTӰq r7WHXD0ۈ ̠QKD3RJOTs*ͅg_#{.RKwD-Kuy- v P%n3U?17)v\ APKB͋qI;@o.,* LP<#L`27ֳ*U'QNYIv ^*s x]ӡUT󓾏5kYcJԵWMԶkqM|[ΠBP@A% gV/ 0J Zb R\Yh=rm !Q! u(U%:F*5"^v72.2ruR PYw`Ʌ#(hZ_%$T2 Rȧ(8]g8"B=>raOu#ũerF`ZB\c2bұWtjzq=F8CvFEE@T&.THZV ,# U:?hHE*}N&q,".GP*PR%䍄z9nNDDEuVYG?pw^^}bxe)C)XGLDh-}8!b5B–$lkE&yrEk)'j]1W(y,~+ԳV *`@Ņ^KYxUIa"D4tqhV|>ւ Ef@3UjR0 S!St^p&,wÌ1/H(6HEsvٹ~P,ZXcK  /n] B'd"Z.12lpz@9QݦEh _7 CJc.?1P6}#W K2bL "zٖ%.p\pC ]L<Ɠh}SbB&8pӌz/^j[Wc}:Ļ32)ѹ}!sIM8?vK-.)^/Z&@*!h[Z(&p,!e-KVT@tZ[Dób.S(sS@@+8^䧇 zarF&β&Ai-~֜P ;kUpRdT.UVVBMLChx ֠޵XXB&j((2|B;@gS] 1@ű0opvz 4mju 10] p0/ (Uqwc>J,)瓏|X:[YSsZ^ Qو|s޸.&#]ygH4{LX@ ژr؄4TnEJW@9 9q16wi*4 Я5TEqE%o/fwRj#"542b:U!WWy}h#[> N&[Eڇ' ȜO2[eTI׬9GAdhReb:~*ԵyնßDFc!zjr9 ZC$D}Z SrMNpFwaM#o-irK b<)`j!Gdc/Mo5IkX%oS&L2d]m>Dɓ&L3 6f"dɓ&L TWO2dɓ&LlL2dɓ~_dɓ&L nJu>;o(9ݢQ/+X[h(/ZQJR43r(9,Ig $/L2WKA_2dɓ&L2fmQ^~\ɓ&L2dɕ |&L2dɓ̪&L2dɓ&LoSs&L2dɓ&-F}ۡL2dɓ&M> zmǚv{o?HX 01JG:*θU8@kA<,0P &W 2ar%-/UvQnMP"&C`#H"(wZ4ˉrlXI[c47*[[h[H'S?W훓sKo/f%D%j-:dLe(9 akiQJ:[n%ZVͪTp$"p>rZt?E% LWGZ+W ]N(0ۨ!C]DuRYCiBtn*"g(Z mǚv{2#}`-?p`[R# i= kK~?( \ݦ[͠KVi =#zlpyMsZj,C Jes&L2gDI&LAH:PGg YqB \dɓ&L`j`IC3&L°|gT&L9@œɓ&g?ω2dɓ&M:nLt< BQ*j )I+DD ܡr*JK7RY ʿ& #V`:ZZFX[(}x|)E$ϗ+#TL#<7 9-ln3 O h(_;XJTl5+Y+x.4 H1ܽ*@)*6¢"|x|yF~i 4z%+7T+<`HStY%jI`/4 @umVQ-Y$t;o(9^iP+b](xݐB[pi :"6fʷlaI()%CVPpj9'멑F? @_p))݅/6;ŠU`(m*eKpf>$iL^q ֙>!Wo~*PƊh+ƒA98Ahm a` @[)@}!U2evӶڥkVYUq`Ñd, x>fx]ݎ?')]Lp5\Ce*yΤ CJVgRRjBpQBbK 9Z 4$ Q1ԀE`@`V`(u 'ci,u.u .N:tӧR[@?ٹǦyg? s<@  UX% gu"5 %fA>86kR !E%. " ~V@DAf2_L8uthʝW.Xf@ ˖B"ȩ"oc(]PԪ66XFYw!g.FmdLLxIJß< Z(P¤pP9 k+kiZdnzenRtZqVU =\]+ÈY ћYeQ`#]r!T}\a]+I )Rr,WacA5_#m?vEb!FB"8Ac8QD.ˉ SO |>DKh`3@`(j (-Du'%AtP-T6 `*OV*n&* Lp07 0_Q-bTP"J5$:e Tϵ֯U_4)K4X( hb?JڷJ\UD5ANh MYu1U&݃Ġ(i= %L[5 MB @puf ?J*-$CV E,sHT BzH8BUGDITD. T@FA,7 ^7HQ*R \% oXRx$CU#o3uW>u|/4Skj U֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧֧6CU..inD:::::::::::::::::: ,^cG j3t~S/21]Kq  lnEUFTmVA ]я "A -`n Ln} bw}T@U6R76 D 1*)1ʘ֠a* ab؜Œ0q'E*muMs]}Q:@&6VJԍ9¸:"+41a\P4iX25fL*)Pe$Kύ ЩC' 6Q,Xf>kE@*QO6Qs4SMNڍT|FT}o1wP-\H++DZ|ii?! 4,x Pj %^;)3El^h,*rKuxJ uY8 8[ugB2"/O- 7}R]J )%#dAfB99eQTI@i1P+;KqB& 5eMB,A@vօ@͵f644`аe3bRjCPLtEq77״a@ᒯ,o$A1 0!!န\@6ļ Z0- \ (KU ZTVDgB Fc]p#;"FL2q eRuꀫˬUac Zi7нAQt^e~ `s@C<ܚ&Y0:SAAQ. rX؁0&Գh[2ŨUxP%b\XH{ NT A,tpQ [P!R[GZʌ!GLW;o/qѸQs(*KA[t:9:[_m Ǜ:YܹR(Z^%%L EҚʺ qo6٭שׂv&YMd˜ u TWO2dɓ&L2fmQ^~\ɓ&L2dɕ |&L2dɓ̪&L2dɓ&Lv%]5-2dɓ&L2e쮖f:dɓ&L2e7ªMY 'k ]GHeմ. Bm Ą."E¶PjWI%P ?*L2dɓ&L3ݠ̙2dɓ&L&L2dɓ&LsV&L2dɓ&RkZ̙2dɓ&LV+Dɓ&L2d ?n@9%%j1ۊ [~RoXqi-KMư!;Z1^cEAA!`58OE{5s&L2dɓ&V^h6iL2dɓ&Lַ)|ɓ&L2dɓ&+݉WM_L2dɓ&LoSs&L2dɓ&a?L2dɓ&L nJ}3y|7WV8ќ)6W*̹,<}+s&T4DiuU2g]r|͛Tn<c@WdJUR+%RӬ hXTp?Ft[5~NP jܺCjuBcuwÕ'lٹ53mn<̙lܟ.}Bl/:q*ʧGhg12^ i-ٜrtNŗ.dzثT.V-3+l4ec؜~̃[k,8%qWH^ KI}"W? 0j2} YMb0Kr_lQ}?RWܖt ZA6i!p_#*w㇤:̹u:J ѹX.N> kHl#hTzhPQ@W m}E4QUI Z)J@=uTUg֌PV"QrLKT$U.˯Y+sWRyWP} m\`e][z%6La^" Zӌt&IхP:$"3[z::hB9O<[̠l7yUQQJxbp5PHTd cI?"~&1R>0J` C.Cy4Pպ㷑ހkXZn[77fm Ǜ~*KUZ2ۂmp fS`˯])%`ǑᦑDɟv+f7 (ژDx5m 52jqG QTS(D7l&^PT[*)>/I&L2dɞL2dɓ&LL2dɓ&Lk>Zdɓ&L2d)rodÓUArSS&L3Jdɓ&L2apS韎7Q8c;fBunM Ny^SAk3J2ȣf~xo/qgxDamI#$e4FCAMPak[z+u߿~_O~߿} [}߿~n߿~JiW"/߿~R~߿tn<*42њ9Bl FE c( kAݨ FL6J\Bh@FS\(TQ "PZ`aO[?ӽ=}V?-pu7gfvQsx]D Y~LMPPɢ(F>7 l|}>߿~/m߿~J2o~߿~˓e߿~_Y߿~߿~lmn<̙lܟ.Ñ˗ :x_7IҁD "rΕ 6-9A#ыˑKX,)Kņu&NX + -W%ΠնEOgY{36gy;͙lfw3ٝ6gxz͙lfw3ٝ6gy;͙lLf6gy;͙lfw3ٝ6gx>fw3ٝ6gy;͙lfw38՗^mu3ٝ N96gy;͙lחpfw3ٝ6gy;͙lfw֥ßp<6 %p̸C/򓙬mu yfzfx}w~dwQa_ JZ4;LT WJu ]HY,3 j߱Y?huSҪ8&Ju\ߙOfԝN%O}8>zTN+şOO>+N;W- e@+/Ҝku_eٗ5PÆW=Mq}iarNJT.0SUMe;\k-gI(j WJu׫=! ,ґ~ݜG" %~|1g9u#Mm xX_"7 ~#@T"6 Q`KT5*PI0Z4e.H-̆م,>} ""#h D~g@Zx*e@_T4| ]^Nd4*/|9ģ)'X ͦ n}iOq”')4m OQm:4gqdqB 3mT_lqHC E2jAkd!N6Qƈo*PL%$6bT)R}_&Oʓ&L2dɓ=L2dɓ&L[2dɓ&L2>|ɓ&L2dɍ*O2dɀhT s)&Lʥ2dɓ&L0mE)m?lDx)ּowg70q8Wu9U֜xLu+iyqj^XAFxo=e Vμ`uGU]=8Kiٯ.-U a x񀷞C))u][nj8O:3,U pM8ݽ׏n-U`U»yϗknjON<& U\+לym-8x VPPWl5=xqq4+keJ]y@jDŽ˜:NxΡuW,@ A\!/v^խF.9kNVQ'1 Sb y(:[!0W3)u@ ^ ءցXBDjlGMj`͍€ڠu`x[7SVWY#Ý,,\6rioZU*jT@lp5`lU[Die3-CYX+]ofie :hFKd +YҜq5(` q`VGJ3`Z#W@Wوx-6Em*- pCP*! Z9Z=6!JEt}CHh3!jgEdCEg#JanYE'%WA/Ua KetXTKt+'|KD2**5s>Ys5uωV n%Et"+F|A l)J}?76}yȏVbHe!H$MS-fJSƪ zsTXδ7ӉbR~o$;>^|L1+NZ&~AnZ+f(TYo5ٙ/ce^Ck|?)@P Ǜ(S @ WDpT]+36ȅ%Elxˌh bVs^$@.P*"2+?H(dIEUaZRQ~2Jp9/3c´0¤ [SX/Lk ұuh 9L4Dk 16LEj(ʧ LE\l5 '#Eb (UU@*UUg,fqcSHAZ$M;SQNuX+5θ^ km>Ƴ U㥟Fib s9`*RТ Rڢ.%,82 hgZk DJ[J%鏤*B`!Cvs2!ccE.C%ֺo[7UX$xpe"`SKfv+2nAIXB:޴/ 9Lu]Tʼk,ΞiBbꍍA!ahw^bƺAb5epѓ[*)CU`Tj*XZMV!H9 4Z1j5 (7B6Ndٕi yYB8OJ˲^j1˾lUh B(#=lFKJO_w(;L((3X( &*T+2;CvddIhc,pW1q81F)sKP ]v5CR?66XFYw2W–X;P-v2x *L+m?]t- .i&k|)m޼R:#{bjt "",[bP ҉|#r.!ib-*f4 $`8D͉Hǁ4;Uy(4ߣ$RqF^m]1\xl`$xTCsDs (@hDh׽@<ŵA[ChQ8"D_2HH5_@@i!-]!Eŭ[:EƘqcjVuPrլHSIb :/% ­ْl)l4i.:oP:47mB1@dS^m$" WA+REb9](r|S͜b:r);qxr" *.ܰ9F?DuϋԲ6(H  EV%zS:yxH(WրHKAJ#-RmUQ*E .̣q5ƈ`Y$*P AHx:浂!̹jKSP+,[*cJ `[w-QIjjbE D-' SCjײ֕iARt,h WA Q-9^6,!A,c2L_e֘pX*($Z%1 `dhxqȕZP4fI*,3au 9 } B"F* K3̰p)u@_Bk KM+7T,d (R"UTŎi_JH8BUGDIW`C[䢋;X.Uec!p={<EGv-m2b ?诀 [H'7o}7;m?vy)L4ДH4Dޜ0Ԭ0ЇME* bX[闠 [ 2I$T[E3O)4 &YlV-.{;hiɟ xxjcnU2G(VB@4ETš(*u G(R:nh”o._zJ\J]'ɡ\U4 AP"XȪȓET`{#]f\1d,Dؒc1Pʲs FoPhs9C(dilm7\AtWPDގw͢`rC՞ q rp(mL@pYL TM>I_AkQ4MIW>*YZ яQ)z͆_<1 MG JAW)P%tYXdgh*\rq*pNdO[:#cGV``hZ[֣`l%x@j4gQoEz0]SM{hKK8lЄ TɥyĜDTN+dD&Nr2/`x&`:!U(R EOXNpMh7Obh=aڽЎ Lf 9&0(2 ZҠȢQ[UFCE4%B<3NI _]aE4 s j%Ѧl~R}80mj .R(C(ىrQ}` |{8 +Ԭ ȻdD@F[&J-@8/$EVl7 SJ/W@kmU&7ESk &y:E6jL.0 9*62gL̓Ґ7`g^"M5(V8JвMpXk`wJЇb#9PkZW;mD.:PUU5\4kKp] @Tp %WUt%RUreRsAx\< Mj&ы|L aC.L5V jX5jnjmpT(M+޲3 "ŅجUxOTIJكUѪB@ֆ(Y7oXɺZWvYK &*ZU`f&\8 mm^@%]_D +M98em%/h [0{ ,\]Z xE HP>SwJK-i} / .1r6\ZƄ'FZ$\X A-q/ Qfam97os :ڬRY4ז@ڴ¨0R),TX e8]Vݳ4  ZK ZQ, :mtRvE3tjPrbem-, hNګlhlV pZ; iSJ z%\ i8mp> &4 32QX*Abs 0+%NʙrۖM $XQM" B5u4*YZV y&~9o/"pQ`H.b@_|nAU;A@hU9QYijm0׫VۘXj*0ҡɂX26T*Pdl LBbD0YUBJFRnxuK  ?yFM $tBȹZLUz_[-o)Q˗d5VG#:’:UElR0 Sfn'E6Q*YjsUCA\cr#\uV҅6D}U K]K%qUw4(qk,#eUu{B`vjfߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚmߚQ7o~ LpZjaޙR4Xp]v]p\(ȮJ-% -jP"ض~w nÉa%4&8 9GCNkؾ+ކ˕Ad3A\1qi.\K% 4ʝC@ Ϳ4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4A#C_gGq:c % eIb@Xf7GV$wr^bP.h\+qi)P=oUJd{ye%^[+FfEzTH.T ŝl QTy %jK^j4ݑy"~S& #\\V%X\Da Dhh+H8q -ȝ_____________________________________________________________________________ƴPWi2ڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOjhWk{TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڧOj={TSڢ-UA#HKV0KZR0E"씷(o-t~'е\`̢D(6X zkV  #E{ /\%[0$U'e\oכᥳܩJr\V Ŋǒ)\W|" l;za SY3y($pBj? M C9B2ef4& sr<ߒJmfԂq12D^)M2+ء c_'"RD+A@흯7Kf?-]- %n`_"U?*efB4L-;o/q-AQ qi/P1pJ90I(:&049kFUNZxf"g R&띯7Kf>,rЀ_ #SL9Yf*y|7B(z[͈&M- 0!M^KyM$i^ϑ .;MF(0U2cN̙2dɓ&:Е>Bdɓ&LkJRP)&L2dZRL2dɓ&P`(>Lɓ&L2c52dɓ&L2T>Lɓ&L2fp1Pg3&L2dɆY'>Lɓ&L2cN̙2dɓ&:Е>Bdɓ&LkJRPi&L0b7ilb/c`l_L2-`-jZx (f$D[\}¿[WiA3&L2dɎHg>Lɓ&L2c52dɓ&L$f{̙2dɓ&8I#Y3&L2dɘ,A̙2dɓ&c 2dɓ&L2T>Dɓ&L1bF\e).& zˌ4ɓ&L3e7|&L2dbfL2dɓ3Y?g2dɓK Gy|7fnor|#_3Fnor|kُi"%0S kEc;fBn0J ?0M~߫2gdA.sX}N8O⿤2fy5s|ܟ_tɟ5s|;^o|J0VXieiNnڇP.j¾|=_߿~_[߿~п߿~o~B߿~_O~}>߿u߿~iUɸqꞲnZ mσ߾-EL"7M}>߿u߿~߿~ʿ|U-p*th0fr HA[cV,R*[!^ԎrOkf7'ٹ?5?wkf7'v - ^ۀuT%TPd,ف6S_,M~߫2e~6}zڑЍL"LSGb,COS&Ly|7/HT1Mb,ђdտ, # Bԑ@W"gl8 Akt%:tӧN<N:t/tӧN:xxN:tӧO/1ӧN:tcN:t:tӧN'ӧN:uտӧN:t%:tӧN<N:t/tӧN >.כᥳ[%w1yB 6},֖9f1S &<WXO_V'dSK-&gEUV׌\= #B˧lphiF;BP5h?j0[zbeμv Q^#KC󘀊&D.g%_c*Q1I8l_ $y*@E_h4 XhJs32"hdA_a tPhZL>Al:JږQגLRV%'>mDt?y5s|ܟ_tɟ5s|;^o|q)Xt%BZQ @/fLX85"J)[>֦nس6gy;͙lfw3ٝ~lfw3ٝ6gy;͙+ٝ6gy;͙lfw3W%);͙lfw3ٝ6gxKSfw3ٝ6gy;͙lx3fw3;OS&6gy;͙lx3fw3ٝ6gy;͙lx3fw3ٝ6gy;͙::dHFIr.ϣٝ6gy;͙lfw3 ٝ6gy;͙lfw3 ٝ6gy;͙lfw3 ٝ6gy;͙lbk Ǜۍ? *T-e !X TpNZe"ҹrWO?]H c\>C:&_K 0*!:̜IZ8Ɲ^lTᕜ?_E)?u뼰}1l1%ŢZxLgy)mtΜNm|-FNiy*q"'?o3}1xDp9:|fesTysCNΰ,Pdpbie~D>85o6/ c1/:;p1`8EEsǯE ۬ /1zx5G"a~^lKMz(9ΰj\i@d|JAT&69BN 4x8/͋d BÝ9W"_hcҮ̴X8q+8U~D6m^>9 ֝fV;yɚl\N"(!7X"E],2814bd<~ChÈ_e3t5xKoN#U pyQi\9j 0۬ /1j?KF ~^lB r5%mh(o^`VuysVKG".T&869@N 4x8( ΚPr'癛()T<^p1y8߃fNX>^>y ip f4~͙xs˝:poX2U]*2814b(њr!zu 5_ VcH XuJ G:~l][W 0InÍ9YŁzǏ0oX^>%@yAT S_il ScEVؕ 2w{nLDž5^H.@5~߫74ɓ&L3mn$0$0E?N $qDbT- '"E!ajn_7  #r@q-Zˎ>=|Z5RV"<@bLC+)TaZ2h ]g]ŘCc1$%Y*FqVV-\)Dn`EC%Kei ZoJH–Qb%BՊŪA 'TjpQTn R-V"L%I!ŁV4f^T@5Bm%E)$R<!zȂR % Z T!ym x*h ӣʉ"k(0L|HaI`0|kُ`-8+ji dhYi$!0:,V`.(h,rO2$V2H$A 9b(<*;|XT di)lkt)A Uns)(@ ˆ#&}C,و_)A Uns)(@ ˆ#$[DUT|KF9F|e H!e2%HrXQyA(@iaVƑ#L(y 9@ H^Ķ~䪛5*xaf*I*%8y|7]ie@h'V +.BjwC@A5T)õil:p"ڀʪk3)Q>* FDBj45F>Qp # cZU09? `Wᷴ: K \q2؄e̥Z6&!\*V7@:u!WKDNS|f.ւgɟvJ")3HWgL K6nEA}T49BV2GJ.(jEDF?aMS@0UH0QLp.G!S~[@,lu!sHXcP=ApfUGX-+"7}ceARf J4V`j K#!V2=1peCv]&U2*6r#RvѦ/r8-ꫬ442 4Y(MPK *ۣ4"!,Hq0USh&QY:+Sq *WZ,$R @bl0kd|.yT`nU[o/qb4p[qB.\0e:uF8H< -W-{W6aaj)Ci8 EGL),"쾄P1Aoc.C5It^>3∈kR%rhC`"f$9[Z.x#UFnG,Z3Wlb@RÐQ"e|q@Ø_*h40bQ\J6n h #*Qʫjݯ7Kf?Qp^Mrs, m5%ޣ3@!5[_W .ʈ^ۊg* jk,]`p-m,. b$iڜ,ZԱ02xTrzS2uth $AFkg:nS%lm<%Ud*հ=b(>.c,hhn(Ee`ЪJfR8RJqbx݄"„\@A7' Z+NB`\%S*\[A1n8 +H!!D\&4]"lsyS}e (q6VDAHuu5tD8ơۏ@\t\((0w& B(X$(X<+ԣ3PVڹu r( eAWfC:#?Ak(ᘱ8 E/̾@Lg5 hAZnB+q%kZ=ڕp+xk|V #P4أ f,],`*@kHA ji )oR^UБ&-uE[P,:.VxhBPv@fRA"ތn&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&n&m8" `w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~wGHe¹bS 7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~w7~t\+J8**JM![cM]:IFQDeWMHRGßw%X%XtPJ k-E,-nnC%.HθHxDe cxVS3 uGrJ0+mE8+JE%$&K&eT7lY*[UflPV`TYtv^TnqՈ2u@%*ݕ@ixT}9Z )Թ{hrxd! iKb ׍P@QAjPӍ6)In79T@@[u rcm Ǜ4|T "Dߜa:`q[lJ8RhـWWbs/%GƪX9)T /5 WиQUDs TBq芯 x zD Da(O6gxjvř;͙lfw3ٝ6gy;͙^rlfw3ٝ6gy;͙lfw3ٝ6gy;͙lfw3ٝf6gy;͙lfw3ٝ6gy;'f6gy;͙lfw3ٝ6gxjvř;͙lfw3ٝ6gy;ŷQ|*ٹe^]݄]"@;Nd4Y*J!UZ r,W-Yw6gy;͙lfw3ٝ6gy;͙84iUGY;͙lfw3ٝ6gy;͙*Qlfw3ٝ6gy;͙uX)3.k͙lfw3ٝ6gy;͙lfw?a6gy;͙lfw3ٝ6gy;O>fw3ٝ6gy;͙lfw3vε-^n$"u2hJ0e3#B7Ҕ*剳;'f6gy;͙lfw3ٝ6gxKSfw3ٝ6gy;͙lfw3ٝ๯Mlfw3ٝ6gy;͙l3fw3ٝ6gy;͙lfw3ٝ.f6gy;͙lfw3ٝ6gy;'f6gy;͙lfw3ٝKW7oLkf7U ZCKÒ70\FFd臁 @hm`H(Q]cA@BSU\c-C% F<a\<4o`N cE!&?-~mj7a )/6'xrDdAOm?s|Ʀl7mnU 閳W/?{O )=q߳c-g4`42~kKZa+W|-!?5ɃiD?,Jɓk?Ci/]𴌵kbUreP~iTY.xF lŭd⫾#>Ʊ{Y0}M#㫾$0ZF W|-"Z} b߱4E*?c]AS-d+cXY4⫾S>ư"&(y0sۡ %lK5,Z+$x"ϟ>|v|ϟ>|=|ϟ>|ϟ>KUϟ>|Ϟ,>|ϟ>|7~ϟ>|E)|;o(9IҰ,J^ިTq\V#/Z ɜWB?m~߿~߿~žA ڜrʤ]Bj t - Xհgj+so8*)`ޙ")Acrbư!7f'h !Y%eUWTe&  e]Cj6UM&0.߿u߿~?_+߿~ $hmn< Ǘu حB 6f8Z TĨ^$9[iWR$$w.1Aa ֦-O!fUW oQzr}>aVO3W@} >Ƞϩ3W@} >Ƞϩ3W@} >tPKwwŪc4HW^2^F:UW Һ}>ɎR}Mc=Ud QG쉵>cw|Z Z>dPKSgw|Z Z>d\F"s5[HZB汒]+6Wy-~`Y>ww(4>aK6A ^ _O~?/ß lMHL!:3GH#Aٹ_egK|!8mZNJ XBʖqwQ" k€bknKlmn.bqޕعTpM$b0154ұ17w5t$@*P.YLX"RpHjny/6no7o&2g+y.|TEmǂi:VƠ0*V؊*ˎ6~o\Q|-hXƷ%)Vi:0[QQ vSwO|Wfp)Xhjٹ_eS6no7o.8qFB|J\MlRrABDƮf,6yͽmow{6x*Yͽmow{6yͽ:Imow{6yͽmow{.9ͽmow{6yͽmowq6yͽmow{6y ow{6yͽmow{Rʔoß*x_y]5T~3pi&L2dɓ:'L2dɓ&L3$ɓ&L2dɘL2dɓ&L3dɓ&L2də|ɓ&L2dĘV֏y7⤾UU--Tn.X&hYiJ޵R5-Zi[\O{lq&r|O7/_m?s|Ʀl7mn<,9-1EYuҌ4ʀ1 \NftaꃇZG`ɓ&L2dɓ 2dɓ&L9ɓ&L2dɓL2dɓ&L&y2dɓ&L2uɓ&L2dun<RNi  ijbbK 5TJ7 ?g*TRJ*TDXbJ*TRUdO *TRJ+̜UUJ*TRJ!*TRJ*UMB*TRJ*U .m?@:(2cZl)ar*8(|vno~8͛ Ǜˎ6~o\Q|A 9b(<. Az#@7 *v(р^&s-GVhi 62Cr(2aN41%4 ]bP-a7fad\ԕ49.ҷE%Jm6# ha*ľ@66H( G ŨJ43igJQ#ૈNQoEhȢLb݅:Hӯ˄rhLp\ m,-u%kwMK@IAmp4FfY1FUUBfMYUYRqjV_,ӧN:tFN:tӧNuoltӧN:t1:tӧN:t=:tӧN:8y:tӧNPm0|v_^?7.(yWO .UwKJh]- `Rs#`]% ΧV9SKJܥպ5sH;]  m"ިJ[8ɕ^>60JhPȶ/"Bh7JTX&+T_,JGAT%¡a4 ]/ȿ6C; 95 i4e75QAT@"&>A^(bώc啺jZ`%#0,oT-dʊ[%4j(}0njOkSb,DV..XKBh_ßٹ_eS6no7o a)E"&^T"] tjln@OڼOj=ڼOj=ڼE64=ڼOj=ڼOj=mj=ڼOj=ڼOj=]Y=ڼOj=ڼOj=ڼG%=ڼOj=ڼOj=tjln@OڼOj=ڼOj=)njF 6!m2T1Ft Tߤ6W%:FCW0# 8 l?Fjŭ&09r X_.k%{ wX *QbMnƢY" MiPU4DYHX돌]&#tJ 6 ٧U STT3+,*QU%_SvYch8dm`-ie9"D&s5)N+!fX:UC(:aw UIEĿq.n%LG9irjag@lϫd#LCn@#/ S9iF-AX&Rb*|a f@Y`=G(U>RoXo/qf畽Ta!݅mMjI:j@5)r_&LXP3ܹ]LpDƺb-aU3\ %4YxTl`qNz]CJ-~@1x&H.4iR#5=Flːq… 4.:6`DCZFغ]mۼ5-՚3Bpe8#[s,.Ս>UC[l:pRIДPqH 7ov7ĉP(rj…r-<MT$ y2kOJ T T\Ɯ V_#nA E[.XG+e'"#2i*Z$Qsphr(RY5Z9f̺Xb+i8:1CAAZ]@E@AeG6Tadm{6wI)%hQ97h(o-XH)u3m)+FJ7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~Sw7~S~H Z2Wy))))))))))))))))))))))))))))))))))))))#2\ޑ)))))))))))))))))))))))))))))))))))))))(:S.5 v]f7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNR8} cx7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrw RO Vf7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNrwܝ7'y;nNj@7o}7;m?vyVޤy2+@"L &L0rն3`%Ša` Ez,XY,q.ǛJ`uI4Z]7uQE9 *[P0 P” ,u(*Ff@c/hP3n+g%(ymxPhSE  *'%BGa!QQM@A49Sd.jTQDF0Cr @-S10͖T`'# &~D t= jIJ9Y)Չ^eX mb%!CBKJh 7H]R[YABk5FF)%U49a~7(J[pjıTԹ(Zvd$0jq4Z=э? ʡUbU\<L#2gQBB]%(V:V[*e[n݂],A{DARjDU:۴pF~k[P#F=r0x%߶7oCs) W p(icPQSvpT%L!5` by-mdA9ˢ>ȋP[5dU!}J"^$<ʚ v+3RyUs@A/5QCde | &ljJ/-A`sV @/ 7o/Ғs E4.bin},rꆵQmGưtE) V5`Ȫ-5s)mњAX!BPAUq^Ul"*+ vNf reAH6'85D(.ea pFxH~7 1,qXx ]!SЂ(U}#d\ q"8`yzff `)qMDJ©8%^'VVk4 y8|R@[$)j( ( {!X 9b2A7o}7;m?vynN3mn<ӳQNg?mp?ay|4~~n<ӳo(936_;=4~f7s7MN B򂋗z1_ +tRP6 `uA +-]3 W@s4­r"GҘD=)LQ?4[UN,/LY0UFx7 D`le5ҳ$oj'qT9+XG8b: ƶChb_Mif?'h tw?ÜށBՙ y*6?rKյ(>2egXWBʃ ҐƣƣU~-LD `4~=\f6U"kn+1@(-TP4(5M2L]7MNDC_QH EWAW,, < +X4p#8Z`݀ D[p@Kv3}r}e_*qX9 z9[*E09\N*њr}(yg t>J# pQMӛf/54b Bx"vBlG_X+> C"&x\]v1KH$k<!@ Ktjlo96QsO6NjZ19e9%z6j^5X J^"2WZ,PwLZYg$zDl`aD 3J":?7MN2,#lћ rsefrGՊ־`3 eLXX9uAոf[v%B\?TTWzrر]`\Ry,j“p'4?'%v Z[pt Z9K iES%o Q^QQ6j[ q.Ѕ/)fK(!Z"y֗35m%prRh?t6QsO?}-)sVhL.t[j]r~g)dA@q)_9. 6-u \c[Kph΂t*9#_y|4J&A9˚^GGIBuez?RWg΍^f #fxXyJ(kq~C3Z-`?Ɗμ" ۯxR?5hirAQN,? J_D~!ǫl3%b?DEK;LD `* f\^YfH2PE/5rx,Um̺A-=GN2JuUpr6QsO-=8RCAXAo2?J:) | )q~Ρw Njʶ߅RE PXHN4Wy|4~~n<ӳo(936_;=4~f7s7MNg?F;=Ü?mn<ӳQNg?mp?ay|4kMOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn=Br[QKۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۡ'%Ürs={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tۧOn={tmU֢w8 .ܤB.mw]SaS3ӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӣӡt9sql_exporter-0.2.0/examples/kubernetes/000077500000000000000000000000001307561357100202355ustar00rootroot00000000000000sql_exporter-0.2.0/examples/kubernetes/configmap.yml000066400000000000000000000212221307561357100227220ustar00rootroot00000000000000--- apiVersion: v1 kind: ConfigMap metadata: name: sql-exporter-config data: config.yml: | --- jobs: - name: "master-nodes" interval: '1m' connections: - 'postgres://postgres_exporter@postgres/postgres?sslmode=disable' queries: - name: "pg_settings" help: "Values of PostgreSQL runtime settings" labels: - "name" values: - "setting" query: | SELECT name::text, setting::float FROM pg_settings WHERE vartype IN ('integer','real') UNION SELECT name::text, CASE setting WHEN 't' THEN 1::float ELSE 0::float END FROM pg_settings WHERE vartype = 'bool'; - name: "pg_stat_database" help: "PostgreSQL Database stats" labels: - "datname" values: - "numbackends" - "xact_commit" - "xact_rollback" - "blks_read" - "blks_hit" - "tup_returned" - "tup_fetched" - "tup_inserted" - "tup_updated" - "tup_deleted" - "conflicts" - "temp_files" - "deadlocks" - "blk_read_time" - "blk_write_time" query: | SELECT datname::text, numbackends::float, xact_commit::float, xact_rollback::float, blks_read::float, blks_hit::float, tup_returned::float, tup_fetched::float, tup_inserted::float, tup_updated::float, tup_deleted::float, conflicts::float, temp_files::float, deadlocks::float, blk_read_time::float, blk_write_time::float FROM pg_stat_database; - name: "connections" help: "Number of connections in different states" labels: - "datname" - "usename" - "state" values: - "count" query: | SELECT datname::text, usename::text, state::text, COUNT(state)::float AS count FROM pg_stat_activity GROUP BY datname, usename, state; - name: "db_sizes" help: "Database Sizes" labels: - "dbname" values: - "dbsize" query: | SELECT datname::text AS dbname, pg_database_size(datname)::float AS dbsize FROM pg_database; - name: "replication_senders_count" help: "Replication Senders connected" values: - "count" query: | SELECT COUNT(*)::float AS count FROM pg_stat_replication; - name: "pg_is_in_recovery" help: "Bool flag if the node is in recovery" values: - "case" query: | SELECT CASE pg_is_in_recovery() WHEN 't' THEN 1::float ELSE 0::float END; - name: "slave-nodes" interval: '1m' connections: - 'postgres://postgres_exporter@postgres-slave1/postgres?sslmode=disable' - 'postgres://postgres_exporter@postgres-slave2/postgres?sslmode=disable' queries: - name: "replication_lag_seconds" help: "Replication Lag in Seconds" labels: - "hostname" values: - "replication_lag" query: | WITH lag AS ( SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location() THEN 0 ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp()) END AS lag ) SELECT split_part(inet_server_addr()::text, '/', 1) AS hostname, lag::float AS replication_lag FROM lag - name: "pg_settings" help: "Values of PostgreSQL runtime settings" labels: - "name" values: - "setting" query: | SELECT name::text, setting::float FROM pg_settings WHERE vartype IN ('integer','real') UNION SELECT name::text, CASE setting WHEN 't' THEN 1::float ELSE 0::float END FROM pg_settings WHERE vartype = 'bool'; - name: "pg_stat_database" help: "PostgreSQL Database stats" labels: - "datname" values: - "numbackends" - "xact_commit" - "xact_rollback" - "blks_read" - "blks_hit" - "tup_returned" - "tup_fetched" - "tup_inserted" - "tup_updated" - "tup_deleted" - "conflicts" - "temp_files" - "deadlocks" - "blk_read_time" - "blk_write_time" query: | SELECT datname::text, numbackends::float, xact_commit::float, xact_rollback::float, blks_read::float, blks_hit::float, tup_returned::float, tup_fetched::float, tup_inserted::float, tup_updated::float, tup_deleted::float, conflicts::float, temp_files::float, deadlocks::float, blk_read_time::float, blk_write_time::float FROM pg_stat_database; - name: "connections" help: "Number of connections in different states" labels: - "datname" - "usename" - "state" values: - "count" query: | SELECT datname::text, usename::text, state::text, COUNT(state)::float AS count FROM pg_stat_activity GROUP BY datname, usename, state; - name: "pg_is_in_recovery" help: "Bool flag if the node is in recovery" values: - "case" query: | SELECT CASE pg_is_in_recovery() WHEN 't' THEN 1::float ELSE 0::float END; - name: "per-db-stats" interval: '15m' keepalive: false connections: - 'postgres://postgres_exporter@postgres/db1?sslmode=disable' - 'postgres://postgres_exporter@postgres/db2?sslmode=disable' - 'postgres://postgres_exporter@postgres/db3?sslmode=disable' queries: - name: "pg_stat_user_tables" help: "Table stats" labels: - "schemaname" - "relname" values: - "seq_scan" - "seq_tup_read" - "idx_scan" - "idx_tup_fetch" - "n_tup_ins" - "n_tup_upd" - "n_tup_del" - "n_tup_hot_upd" - "n_live_tup" - "n_dead_tup" - "vacuum_count" - "autovacuum_count" - "analyze_count" - "autoanalyze_count" query: | SELECT schemaname::text , relname::text , seq_scan::float , seq_tup_read::float , idx_scan::float , idx_tup_fetch::float , n_tup_ins::float , n_tup_upd::float , n_tup_del::float , n_tup_hot_upd::float , n_live_tup::float , n_dead_tup::float , vacuum_count::float , autovacuum_count::float , analyze_count::float , autoanalyze_count::float FROM pg_stat_user_tables; - name: "pg_statio_user_tables" help: "IO Stats" labels: - "schemaname" - "relname" values: - "heap_blks_read" - "heap_blks_hit" - "idx_blks_read" - "idx_blks_hit" query: | SELECT schemaname::text , relname::text , heap_blks_read::float , heap_blks_hit::float , idx_blks_read::float , idx_blks_hit::float FROM pg_statio_user_tables; sql_exporter-0.2.0/examples/kubernetes/deployment.yml000066400000000000000000000026771307561357100231540ustar00rootroot00000000000000apiVersion: extensions/v1beta1 kind: Deployment metadata: name: prom-sql-exporter spec: replicas: 1 strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 type: RollingUpdate template: metadata: annotations: prometheus.io/port: "9237" prometheus.io/scrape: "true" labels: app: prom-sql-exporter spec: containers: - env: - name: CONFIG value: /config/config.yml - name: PGPASSFILE value: /pgpass/pgpass image: justwatchcom/prom-sql-exporter:latest livenessProbe: httpGet: path: /healthz port: 9237 initialDelaySeconds: 30 timeoutSeconds: 10 name: prom-sql-exporter ports: - containerPort: 9237 name: http readinessProbe: httpGet: path: /healthz port: 9237 initialDelaySeconds: 10 timeoutSeconds: 10 resources: limits: cpu: 250m memory: 32Mi requests: cpu: 5m memory: 16Mi volumeMounts: - mountPath: /config name: config-volume - mountPath: /pgpass name: pgpass restartPolicy: Always volumes: - configMap: name: sql-exporter-config name: config-volume - name: pgpass secret: secretName: sql-exporter-pgpass sql_exporter-0.2.0/examples/prometheus/000077500000000000000000000000001307561357100202615ustar00rootroot00000000000000sql_exporter-0.2.0/examples/prometheus/dba-alert.rules000066400000000000000000000030371307561357100231730ustar00rootroot00000000000000ALERT DBAPostresTableCacheHitrateLow IF sql_table_cache_hitrate{relname!="schema_version"} < 90 FOR 6h LABELS { severity = "notice", } ANNOTATIONS { summary = "PostgreSQL Table Cache Hitrate is low", description = "Table Cache Hitrate of {{$labels.database}}.{{$labels.schemaname}}.{{$labels.relname}} is {{$value}} < 90", } ALERT DBAPostresIndexCacheHitrateLow IF sql_index_cache_hitrate{relname!="schema_version"} < 90 FOR 6h LABELS { severity = "notice", } ANNOTATIONS { summary = "PostgreSQL Index Cache Hitrate is low", description = "Index Cache Hitrate of {{$labels.database}}.{{$labels.schemaname}}.{{$labels.relname}} is {{$value}} < 90", } ALERT DBAPostresIndexUsageRateLow IF sql_index_usage_rate{relname!="schema_version"} < 90 FOR 6h LABELS { severity = "notice", } ANNOTATIONS { summary = "PostgreSQL Index Usage Rate is low", description = "Index Usage Rate of {{$labels.database}}.{{$labels.schemaname}}.{{$labels.relname}} is {{$value}} < 90", } ALERT DBANoReplicationSendersRunning IF sql_replication_senders_count < 1 FOR 5m LABELS { severity = "critical", } ANNOTATIONS { summary = "PostgreSQL has no replication senders running", description = "There must be at least one replication sender running", } ALERT DBAPostgresHighReplicationLagSeconds IF sql_replication_lag_seconds > 60 FOR 5m LABELS { severity = "critical", } ANNOTATIONS { summary = "High Master-Slave Replication Lag", description = "The replication lag between the master and slave in {{$labels.env}} is above the high water mark: {{$value}}", } sql_exporter-0.2.0/examples/prometheus/dba-recording.rules000066400000000000000000000012631307561357100240370ustar00rootroot00000000000000sql_table_cache_hitrate = (sql_pg_statio_user_tables{col="heap_blks_hit"} - ignoring(col) sql_pg_statio_user_tables{col="heap_blks_read"}) / ignoring(col) sql_pg_statio_user_tables{col="heap_blks_hit"} * 100 >= 0 sql_table_index_usage_rate = sql_pg_stat_user_tables{col="idx_scan"} / ignoring(col) (sql_pg_stat_user_tables{col="seq_scan"} + ignoring(col) sql_pg_stat_user_tables{col="idx_scan"}) * 100 >= 0 sql_index_cache_hitrate = (sql_pg_statio_user_tables{col="idx_blks_hit"} - ignoring(col) sql_pg_statio_user_tables{col="idx_blks_read"}) / ignoring(col) sql_pg_statio_user_tables{col="idx_blks_hit"} * 100 >= 0 sql_running_queries = sum(sql_connections{state="active"}) without(state) sql_exporter-0.2.0/exporter.go000066400000000000000000000033041307561357100164470ustar00rootroot00000000000000package main import ( "github.com/go-kit/kit/log" "github.com/go-kit/kit/log/level" "github.com/prometheus/client_golang/prometheus" ) // Exporter collects SQL metrics. It implements prometheus.Collector. type Exporter struct { jobs []*Job logger log.Logger } // NewExporter returns a new SQL Exporter for the provided config. func NewExporter(logger log.Logger, configFile string) (*Exporter, error) { if configFile == "" { configFile = "config.yml" } // read config cfg, err := Read(configFile) if err != nil { return nil, err } exp := &Exporter{ jobs: make([]*Job, 0, len(cfg.Jobs)), logger: logger, } // dispatch all jobs for _, job := range cfg.Jobs { if job == nil { continue } if err := job.Init(logger, cfg.Queries); err != nil { level.Warn(logger).Log("msg", "Skipping job. Failed to initialize", "err", err, "job", job.Name) continue } exp.jobs = append(exp.jobs, job) go job.Run() } return exp, nil } // Describe implements prometheus.Collector func (e *Exporter) Describe(ch chan<- *prometheus.Desc) { for _, job := range e.jobs { if job == nil { continue } for _, query := range job.Queries { if query == nil { continue } if query.desc == nil { level.Error(e.logger).Log("msg", "Query has no descriptor", "query", query.Name) continue } ch <- query.desc } } } // Collect implements prometheus.Collector func (e *Exporter) Collect(ch chan<- prometheus.Metric) { for _, job := range e.jobs { if job == nil { continue } for _, query := range job.Queries { if query == nil { continue } for _, metrics := range query.metrics { for _, metric := range metrics { ch <- metric } } } } } sql_exporter-0.2.0/job.go000066400000000000000000000121411307561357100153500ustar00rootroot00000000000000package main import ( "fmt" "net/url" "regexp" "strings" "time" "github.com/cenkalti/backoff" _ "github.com/denisenkom/go-mssqldb" // register the MS-SQL driver "github.com/go-kit/kit/log" "github.com/go-kit/kit/log/level" _ "github.com/go-sql-driver/mysql" // register the MySQL driver "github.com/jmoiron/sqlx" _ "github.com/lib/pq" // register the PostgreSQL driver "github.com/prometheus/client_golang/prometheus" ) var ( // MetricNameRE matches any invalid metric name // characters, see github.com/prometheus/common/model.MetricNameRE MetricNameRE = regexp.MustCompile("[^a-zA-Z0-9_:]+") ) // Init will initialize the metric descriptors func (j *Job) Init(logger log.Logger, queries map[string]string) error { j.log = log.With(logger, "job", j.Name) // register each query as an metric for _, q := range j.Queries { if q == nil { level.Warn(j.log).Log("msg", "Skipping invalid query") continue } q.log = log.With(j.log, "query", q.Name) if q.Query == "" && q.QueryRef != "" { if qry, found := queries[q.QueryRef]; found { q.Query = qry } } if q.Query == "" { level.Warn(q.log).Log("msg", "Skipping empty query") continue } if q.metrics == nil { // we have no way of knowing how many metrics will be returned by the // queries, so we just assume that each query returns at least one metric. // after the each round of collection this will be resized as necessary. q.metrics = make(map[*connection][]prometheus.Metric, len(j.Queries)) } // try to satisfy prometheus naming restrictions name := MetricNameRE.ReplaceAllString("sql_"+q.Name, "") help := q.Help // prepare a new metrics descriptor // // the tricky part here is that the *order* of labels has to match the // order of label values supplied to NewConstMetric later q.desc = prometheus.NewDesc( name, help, append(q.Labels, "driver", "host", "database", "user", "col"), prometheus.Labels{ "sql_job": j.Name, }, ) } return nil } // Run prepares and runs the job func (j *Job) Run() { if j.log == nil { j.log = log.NewNopLogger() } // if there are no connection URLs for this job it can't be run if j.Connections == nil { level.Error(j.log).Log("msg", "No conenctions for job", "job", j.Name) return } // make space for the connection objects if j.conns == nil { j.conns = make([]*connection, 0, len(j.Connections)) } // parse the connection URLs and create an connection object for each if len(j.conns) < len(j.Connections) { for _, conn := range j.Connections { u, err := url.Parse(conn) if err != nil { level.Error(j.log).Log("msg", "Failed to parse URL", "url", conn, "err", err) continue } user := "" if u.User != nil { user = u.User.Username() } // we expose some of the connection variables as labels, so we need to // remember them j.conns = append(j.conns, &connection{ conn: nil, url: u, driver: u.Scheme, host: u.Host, database: strings.TrimPrefix(u.Path, "/"), user: user, }) } } level.Debug(j.log).Log("msg", "Starting") // enter the run loop // tries to run each query on each connection at approx the interval for { bo := backoff.NewExponentialBackOff() bo.MaxElapsedTime = j.Interval if err := backoff.Retry(j.runOnce, bo); err != nil { level.Error(j.log).Log("msg", "Failed to run", "err", err) } level.Debug(j.log).Log("msg", "Sleeping until next run", "sleep", j.Interval.String()) time.Sleep(j.Interval) } } func (j *Job) runOnceConnection(conn *connection, done chan int) { updated := 0 defer func() { done <- updated }() // connect to DB if not connected already if err := conn.connect(j.Interval); err != nil { level.Warn(j.log).Log("msg", "Failed to connect", "err", err) return } for _, q := range j.Queries { if q == nil { continue } if q.desc == nil { // this may happen if the metric registration failed level.Warn(q.log).Log("msg", "Skipping query. Collector is nil") continue } level.Debug(q.log).Log("msg", "Running Query") // execute the query on the connection if err := q.Run(conn); err != nil { level.Warn(q.log).Log("msg", "Failed to run query", "err", err) continue } level.Debug(q.log).Log("msg", "Query finished") updated++ } } func (j *Job) runOnce() error { doneChan := make(chan int, len(j.conns)) // execute queries for each connection in parallel for _, conn := range j.conns { go j.runOnceConnection(conn, doneChan) } // connections now run in parallel, wait for and collect results updated := 0 for range j.conns { updated += <-doneChan } if updated < 1 { return fmt.Errorf("zero queries ran") } return nil } func (c *connection) connect(iv time.Duration) error { // already connected if c.conn != nil { return nil } dsn := c.url.String() switch c.url.Scheme { case "mysql": dsn = strings.TrimPrefix(dsn, "mysql://") } conn, err := sqlx.Connect(c.url.Scheme, dsn) if err != nil { return err } // be nice and don't use up too many connections for mere metrics conn.SetMaxOpenConns(1) conn.SetMaxIdleConns(1) conn.SetConnMaxLifetime(iv * 2) c.conn = conn return nil } sql_exporter-0.2.0/main.go000066400000000000000000000046471307561357100155360ustar00rootroot00000000000000package main import ( "flag" "fmt" "net/http" "os" "strings" "github.com/go-kit/kit/log" "github.com/go-kit/kit/log/level" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/common/version" ) func init() { prometheus.MustRegister(version.NewCollector("sql_exporter")) } func main() { var ( showVersion = flag.Bool("version", false, "Print version information.") listenAddress = flag.String("web.listen-address", ":9237", "Address to listen on for web interface and telemetry.") metricsPath = flag.String("web.telemetry-path", "/metrics", "Path under which to expose metrics.") configFile = flag.String("config.file", os.Getenv("CONFIG"), "SQL Exporter configuration file name.") ) flag.Parse() if *showVersion { fmt.Fprintln(os.Stdout, version.Print("sql_exporter")) os.Exit(0) } // init logger logger := log.NewJSONLogger(os.Stdout) logger = log.With(logger, "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller, ) // set the allowed log level filter switch strings.ToLower(os.Getenv("LOGLEVEL")) { case "debug": logger = level.NewFilter(logger, level.AllowDebug()) case "info": logger = level.NewFilter(logger, level.AllowInfo()) case "warn": logger = level.NewFilter(logger, level.AllowWarn()) case "error": logger = level.NewFilter(logger, level.AllowError()) default: logger = level.NewFilter(logger, level.AllowAll()) } logger.Log("msg", "Starting sql_exporter", "version_info", version.Info(), "build_context", version.BuildContext()) exporter, err := NewExporter(logger, *configFile) if err != nil { level.Error(logger).Log("msg", "Error starting exporter", "err", err) os.Exit(1) } prometheus.MustRegister(exporter) // setup and start webserver http.Handle(*metricsPath, promhttp.Handler()) http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { http.Error(w, "OK", http.StatusOK) }) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(` SQL Exporter

SQL Exporter

Metrics

`)) }) level.Info(logger).Log("msg", "Listening", "listenAddress", *listenAddress) if err := http.ListenAndServe(*listenAddress, nil); err != nil { level.Error(logger).Log("msg", "Error starting HTTP server:", "err", err) os.Exit(1) } } sql_exporter-0.2.0/query.go000066400000000000000000000100621307561357100157430ustar00rootroot00000000000000package main import ( "fmt" "strconv" "github.com/go-kit/kit/log" "github.com/go-kit/kit/log/level" "github.com/prometheus/client_golang/prometheus" ) // Run executes a single Query on a single connection func (q *Query) Run(conn *connection) error { if q.log == nil { q.log = log.NewNopLogger() } if q.desc == nil { return fmt.Errorf("metrics descriptor is nil") } if q.Query == "" { return fmt.Errorf("query is empty") } if conn == nil || conn.conn == nil { return fmt.Errorf("db connection not initialized (should not happen)") } // execute query rows, err := conn.conn.Queryx(q.Query) if err != nil { return err } defer rows.Close() updated := 0 metrics := make([]prometheus.Metric, 0, len(q.metrics)) for rows.Next() { res := make(map[string]interface{}) err := rows.MapScan(res) if err != nil { level.Error(q.log).Log("msg", "Failed to scan", "err", err, "host", conn.host, "db", conn.database) continue } m, err := q.updateMetrics(conn, res) if err != nil { level.Error(q.log).Log("msg", "Failed to update metrics", "err", err, "host", conn.host, "db", conn.database) continue } metrics = append(metrics, m...) updated++ } if updated < 1 { return fmt.Errorf("zero rows returned") } // update the metrics cache q.Lock() q.metrics[conn] = metrics q.Unlock() return nil } // updateMetrics parses the result set and returns a slice of const metrics func (q *Query) updateMetrics(conn *connection, res map[string]interface{}) ([]prometheus.Metric, error) { updated := 0 metrics := make([]prometheus.Metric, 0, len(q.Values)) for _, valueName := range q.Values { m, err := q.updateMetric(conn, res, valueName) if err != nil { level.Error(q.log).Log( "msg", "Failed to update metric", "value", valueName, "err", err, "host", conn.host, "db", conn.database, ) continue } metrics = append(metrics, m) updated++ } if updated < 1 { return nil, fmt.Errorf("zero values found") } return metrics, nil } // updateMetrics parses a single row and returns a const metric func (q *Query) updateMetric(conn *connection, res map[string]interface{}, valueName string) (prometheus.Metric, error) { var value float64 if i, ok := res[valueName]; ok { switch f := i.(type) { case int: value = float64(f) case int32: value = float64(f) case int64: value = float64(f) case uint: value = float64(f) case uint32: value = float64(f) case uint64: value = float64(f) case float32: value = float64(f) case float64: value = float64(f) case []uint8: val, err := strconv.ParseFloat(string(f), 64) if err != nil { return nil, fmt.Errorf("Column '%s' must be type float, is '%T' (val: %s)", valueName, i, f) } value = val case string: val, err := strconv.ParseFloat(f, 64) if err != nil { return nil, fmt.Errorf("Column '%s' must be type float, is '%T' (val: %s)", valueName, i, f) } value = val default: return nil, fmt.Errorf("Column '%s' must be type float, is '%T' (val: %s)", valueName, i, f) } } // make space for all defined variable label columns and the "static" labels // added below labels := make([]string, 0, len(q.Labels)+5) for _, label := range q.Labels { // we need to fill every spot in the slice or the key->value mapping // won't match up in the end. // // ORDER MATTERS! lv := "" if i, ok := res[label]; ok { switch str := i.(type) { case string: lv = str case []uint8: lv = string(str) default: return nil, fmt.Errorf("Column '%s' must be type text (string)", label) } } labels = append(labels, lv) } labels = append(labels, conn.driver) labels = append(labels, conn.host) labels = append(labels, conn.database) labels = append(labels, conn.user) labels = append(labels, valueName) // create a new immutable const metric that can be cached and returned on // every scrape. Remember that the order of the lable values in the labels // slice must match the order of the label names in the descriptor! return prometheus.NewConstMetric(q.desc, prometheus.GaugeValue, value, labels...) }