pax_global_header00006660000000000000000000000064150420617660014521gustar00rootroot0000000000000052 comment=fd406855de30c54110d23eace25478ab9c6fa2cc golang-github-segmentio-encoding-0.5.3/000077500000000000000000000000001504206176600200315ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/.github/000077500000000000000000000000001504206176600213715ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/.github/workflows/000077500000000000000000000000001504206176600234265ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/.github/workflows/benchmark.yml000066400000000000000000000026611504206176600261100ustar00rootroot00000000000000--- name: Benchmark "on": - pull_request jobs: benchmark: strategy: matrix: ref: - master - ${{ github.sha }} runs-on: ubuntu-latest steps: - name: Setup Go uses: actions/setup-go@v2 with: go-version: "1.24" - name: Checkout uses: actions/checkout@v2 with: ref: ${{ matrix.ref }} - name: Run Benchmarks # Without 6 iterations, benchstat will claim statistical insignificance. run: go test -v -run '^$' -bench '(Marshal|Unmarshal)$/codeResponse' -benchmem -benchtime 3s -cpu 1 -count 6 ./json | tee bench.txt - name: Upload Benchmarks uses: actions/upload-artifact@v4 with: name: ${{ matrix.ref }} path: bench.txt benchstat: needs: [benchmark] runs-on: ubuntu-latest steps: - name: Setup Go uses: actions/setup-go@v2 with: go-version: "1.24" - name: Setup Benchstat run: go install golang.org/x/perf/cmd/benchstat@latest - name: Download Benchmark Results uses: actions/download-artifact@v4 with: path: . - name: Run Benchstat run: benchstat ./master/bench.txt ./${{ github.sha }}/bench.txt | tee benchstat.txt - name: Upload Benchstat Results uses: actions/upload-artifact@v4 with: name: benchstat path: benchstat.txt golang-github-segmentio-encoding-0.5.3/.github/workflows/test.yml000066400000000000000000000007001504206176600251250ustar00rootroot00000000000000--- name: Test "on": - pull_request jobs: test: strategy: matrix: go: - "1.23" - "1.24" runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Go ${{ matrix.go }} uses: actions/setup-go@v2 with: go-version: ${{ matrix.go }} - name: Download Dependencies run: go mod download - name: Run Tests run: make test golang-github-segmentio-encoding-0.5.3/.gitignore000066400000000000000000000006071504206176600220240ustar00rootroot00000000000000# Binaries for programs and plugins *.exe *.exe~ *.dll *.so *.dylib benchmark anonymize # Test binary, build with `go test -c` *.test # Output of the go coverage tool, specifically when used with LiteIDE *.out # Emacs *~ vendor benchmarks/msgs.json benchmarks/results/*json benchmarks/result/benchmark *.txt json/fuzz/corpus/* json/fuzz/crashers/* json/fuzz/suppressions/* *-fuzz.zip golang-github-segmentio-encoding-0.5.3/.golangci.yml000066400000000000000000000002621504206176600224150ustar00rootroot00000000000000version: "2" linters: exclusions: rules: # Tests copied from the stdlib are not meant to be linted. - path: 'golang_(.+_)?test\.go' source: "^" # regex golang-github-segmentio-encoding-0.5.3/LICENSE000066400000000000000000000020611504206176600210350ustar00rootroot00000000000000MIT License Copyright (c) 2019 Segment.io, Inc. 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. golang-github-segmentio-encoding-0.5.3/Makefile000066400000000000000000000063241504206176600214760ustar00rootroot00000000000000.PHONY: test bench-simple clean update-golang-test fuzz fuzz-json golang.version ?= 1.21 golang.tmp.root := /tmp/golang$(golang.version) golang.tmp.json.root := $(golang.tmp.root)/go-go$(golang.version)/src/encoding/json golang.test.files := $(wildcard json/golang_*_test.go) benchstat := ${GOPATH}/bin/benchstat go-fuzz := ${GOPATH}/bin/go-fuzz go-fuzz-build := ${GOPATH}/bin/go-fuzz-build go-fuzz-corpus := ${GOPATH}/src/github.com/dvyukov/go-fuzz-corpus go-fuzz-dep := ${GOPATH}/src/github.com/dvyukov/go-fuzz/go-fuzz-dep test: test-ascii test-json test-json-bugs test-proto test-iso8601 test-thrift test-purego test-ascii: go test -cover -race ./ascii test-json: go test -cover -race ./json test-json-bugs: go test -race ./json/bugs/... test-proto: go test -cover -race ./proto test-iso8601: go test -cover -race ./iso8601 test-thrift: go test -cover -race ./thrift test-purego: go test -race -tags purego ./... $(benchstat): GO111MODULE=off go get -u golang.org/x/perf/cmd/benchstat # This compares segmentio/encoding/json to the standard golang encoding/json; # for more in-depth benchmarks, see the `benchmarks` directory. count ?= 5 bench-simple: $(benchstat) @go test -v -run '^$$' -bench '(Marshal|Unmarshal)$$/codeResponse' -benchmem -cpu 1 -count $(count) ./json -package encoding/json | tee /tmp/encoding-json.txt @go test -v -run '^$$' -bench '(Marshal|Unmarshal)$$/codeResponse' -benchmem -cpu 1 -count $(count) ./json | tee /tmp/segmentio-encoding-json.txt benchstat /tmp/encoding-json.txt /tmp/segmentio-encoding-json.txt bench-master: $(benchstat) git stash git checkout master @go test -v -run '^$$' -bench /codeResponse -benchmem -benchtime 3s -cpu 1 ./json -count 8 | tee /tmp/segmentio-encoding-json-master.txt git checkout - git stash pop @go test -v -run '^$$' -bench /codeResponse -benchmem -benchtime 3s -cpu 1 ./json -count 8 | tee /tmp/segmentio-encoding-json.txt benchstat /tmp/segmentio-encoding-json-master.txt /tmp/segmentio-encoding-json.txt update-golang-test: $(golang.test.files) @echo "updated golang tests to $(golang.version)" json/golang_%_test.go: $(golang.tmp.json.root)/%_test.go $(golang.tmp.json.root) @echo "updating $@ with $<" cp $< $@ sed -i '' -E '/(import)?[ \t]*"internal\/.*".*/d' $@ $(golang.tmp.json.root): $(golang.tmp.root) curl -L "https://github.com/golang/go/archive/go${golang.version}.tar.gz" | tar xz -C "$ 17 { return s[:17] + "..." } return s } func TestHasPrefixFold(t *testing.T) { for _, test := range testStringsUTF8 { t.Run(limit(test), func(t *testing.T) { prefix := test if len(prefix) > 0 { prefix = prefix[:len(prefix)/2] } upper := strings.ToUpper(prefix) lower := strings.ToLower(prefix) if !HasPrefixFoldString(test, prefix) { t.Errorf("%q does not match %q", test, prefix) } if !HasPrefixFoldString(test, upper) { t.Errorf("%q does not match %q", test, upper) } if !HasPrefixFoldString(test, lower) { t.Errorf("%q does not match %q", test, lower) } }) } } func TestHasSuffixFold(t *testing.T) { for _, test := range testStringsUTF8 { t.Run(limit(test), func(t *testing.T) { suffix := test if len(suffix) > 0 { suffix = suffix[len(suffix)/2:] } upper := strings.ToUpper(suffix) lower := strings.ToLower(suffix) if !HasSuffixFoldString(test, suffix) { t.Errorf("%q does not match %q", test, suffix) } if !HasSuffixFoldString(test, upper) { t.Errorf("%q does not match %q", test, upper) } if !HasSuffixFoldString(test, lower) { t.Errorf("%q does not match %q", test, lower) } }) } } func TestEqualFoldASCII(t *testing.T) { pairs := [...][2]byte{ {0, ' '}, {'@', '`'}, {'[', '{'}, {'_', 127}, } for _, pair := range pairs { t.Run(fmt.Sprintf("0x%02x=0x%02x", pair[0], pair[1]), func(t *testing.T) { for i := 1; i <= 256; i++ { a := bytes.Repeat([]byte{'x'}, i) b := bytes.Repeat([]byte{'X'}, i) if !EqualFold(a, b) { t.Errorf("%q does not match %q", a, b) break } a[0] = pair[0] b[0] = pair[1] if EqualFold(a, b) { t.Errorf("%q matches %q", a, b) break } } }) } } func TestEqualFold(t *testing.T) { // Only test valid UTF-8 otherwise ToUpper/ToLower will convert invalid // characters to UTF-8 placeholders, which breaks the case-insensitive // equality. for _, test := range testStringsUTF8 { t.Run(limit(test), func(t *testing.T) { upper := strings.ToUpper(test) lower := strings.ToLower(test) if !EqualFoldString(test, test) { t.Errorf("%q does not match %q", test, test) } if !EqualFoldString(test, upper) { t.Errorf("%q does not match %q", test, upper) } if !EqualFoldString(test, lower) { t.Errorf("%q does not match %q", test, lower) } if len(test) > 1 { reverse := make([]byte, len(test)) for i := range reverse { reverse[i] = test[len(test)-(i+1)] } if EqualFoldString(test, string(reverse)) { t.Errorf("%q matches %q", test, reverse) } } }) } } func BenchmarkEqualFold(b *testing.B) { for _, test := range testStringsUTF8 { b.Run(limit(test), func(b *testing.B) { other := test + "_" // not the same pointer for range b.N { _ = EqualFoldString(test, other[:len(test)]) // same length } b.SetBytes(int64(len(test))) }) } } golang-github-segmentio-encoding-0.5.3/ascii/equal_fold.go000066400000000000000000000021541504206176600235650ustar00rootroot00000000000000//go:generate go run equal_fold_asm.go -out equal_fold_amd64.s -stubs equal_fold_amd64.go package ascii import ( "github.com/segmentio/asm/ascii" ) // EqualFold is a version of bytes.EqualFold designed to work on ASCII input // instead of UTF-8. // // When the program has guarantees that the input is composed of ASCII // characters only, it allows for greater optimizations. func EqualFold(a, b []byte) bool { return ascii.EqualFold(a, b) } func HasPrefixFold(s, prefix []byte) bool { return ascii.HasPrefixFold(s, prefix) } func HasSuffixFold(s, suffix []byte) bool { return ascii.HasSuffixFold(s, suffix) } // EqualFoldString is a version of strings.EqualFold designed to work on ASCII // input instead of UTF-8. // // When the program has guarantees that the input is composed of ASCII // characters only, it allows for greater optimizations. func EqualFoldString(a, b string) bool { return ascii.EqualFoldString(a, b) } func HasPrefixFoldString(s, prefix string) bool { return ascii.HasPrefixFoldString(s, prefix) } func HasSuffixFoldString(s, suffix string) bool { return ascii.HasSuffixFoldString(s, suffix) } golang-github-segmentio-encoding-0.5.3/ascii/valid.go000066400000000000000000000011411504206176600225440ustar00rootroot00000000000000//go:generate go run valid_asm.go -out valid_amd64.s -stubs valid_amd64.go package ascii import ( "github.com/segmentio/asm/ascii" ) // Valid returns true if b contains only ASCII characters. func Valid(b []byte) bool { return ascii.Valid(b) } // ValidBytes returns true if b is an ASCII character. func ValidByte(b byte) bool { return ascii.ValidByte(b) } // ValidBytes returns true if b is an ASCII character. func ValidRune(r rune) bool { return ascii.ValidRune(r) } // ValidString returns true if s contains only ASCII characters. func ValidString(s string) bool { return ascii.ValidString(s) } golang-github-segmentio-encoding-0.5.3/ascii/valid_print.go000066400000000000000000000012571504206176600237700ustar00rootroot00000000000000//go:generate go run valid_print_asm.go -out valid_print_amd64.s -stubs valid_print_amd64.go package ascii import ( "github.com/segmentio/asm/ascii" ) // Valid returns true if b contains only printable ASCII characters. func ValidPrint(b []byte) bool { return ascii.ValidPrint(b) } // ValidBytes returns true if b is an ASCII character. func ValidPrintByte(b byte) bool { return ascii.ValidPrintByte(b) } // ValidBytes returns true if b is an ASCII character. func ValidPrintRune(r rune) bool { return ascii.ValidPrintRune(r) } // ValidString returns true if s contains only printable ASCII characters. func ValidPrintString(s string) bool { return ascii.ValidPrintString(s) } golang-github-segmentio-encoding-0.5.3/benchmarks/000077500000000000000000000000001504206176600221465ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/benchmarks/Makefile000066400000000000000000000332011504206176600236050ustar00rootroot00000000000000benchmark.dir ?= results benchmark.batch ?= 1000 benchmark.count ?= 8 benchmark.encoding.json := $(benchmark.dir)/encoding-json benchmark.github.com.json-iterator.go := $(benchmark.dir)/json-iterator benchmark.github.com.segmentio.encoding.json := $(benchmark.dir)/segment-encoding-json benchmark.github.com.mailru.easyjson := $(benchmark.dir)/easyjson benchmark.github.com.protobuf.v1 := $(benchmark.dir)/segment-protobuf-v1 benchmark.vmihailenco.msgpack := $(benchmark.dir)/vmihailenco-msgpack benchmark.tinylib.msgp := $(benchmark.dir)/tinylib-msgp benchmark.encoding.json.gzip := $(benchmark.dir)/encoding-json+gzip benchmark.github.com.json-iterator.go.gzip := $(benchmark.dir)/json-iterator+gzip benchmark.github.com.segmentio.encoding.json.gzip := $(benchmark.dir)/segment-encoding-json+gzip benchmark.github.com.mailru.easyjson.gzip := $(benchmark.dir)/easyjson+gzip benchmark.github.com.protobuf.v1.gzip := $(benchmark.dir)/segment-protobuf-v1+gzip benchmark.vmihailenco.msgpack.gzip := $(benchmark.dir)/vmihailenco-msgpack+gzip benchmark.tinylib.msgp.gzip := $(benchmark.dir)/tinylib-msgp+gzip benchmark.encoding.json.snappy := $(benchmark.dir)/encoding-json+snappy benchmark.github.com.json-iterator.go.snappy := $(benchmark.dir)/json-iterator+snappy benchmark.github.com.segmentio.encoding.json.snappy := $(benchmark.dir)/segment-encoding-json+snappy benchmark.github.com.mailru.easyjson.snappy := $(benchmark.dir)/easyjson+snappy benchmark.github.com.protobuf.v1.snappy := $(benchmark.dir)/segment-protobuf-v1+snappy benchmark.vmihailenco.msgpack.snappy := $(benchmark.dir)/vmihailenco-msgpack+snappy benchmark.tinylib.msgp.snappy := $(benchmark.dir)/tinylib-msgp+snappy benchmark.encoding.json.zstd := $(benchmark.dir)/encoding-json+zstd benchmark.github.com.json-iterator.go.zstd := $(benchmark.dir)/json-iterator+zstd benchmark.github.com.segmentio.encoding.json.zstd := $(benchmark.dir)/segment-encoding-json+zstd benchmark.github.com.mailru.easyjson.zstd := $(benchmark.dir)/easyjson+zstd benchmark.github.com.protobuf.v1.zstd := $(benchmark.dir)/segment-protobuf-v1+zstd benchmark.vmihailenco.msgpack.zstd := $(benchmark.dir)/vmihailenco-msgpack+zstd benchmark.tinylib.msgp.zstd := $(benchmark.dir)/tinylib-msgp+zstd benchmark.data := ../json/testdata/msgs.json.gz benchmark.msgs := $(benchmark.dir)/msgs.json benchmark.bin := $(benchmark.dir)/benchmark benchmark.cmd.dir := cmd/benchmark benchmark.src := $(wildcard ./$(benchmark.cmd.dir)/*.go) benchmark.out := \ $(benchmark.encoding.json).txt \ $(benchmark.github.com.json-iterator.go).txt \ $(benchmark.github.com.segmentio.encoding.json).txt \ $(benchmark.github.com.mailru.easyjson).txt \ $(benchmark.github.com.protobuf.v1).txt \ $(benchmark.vmihailenco.msgpack).txt \ $(benchmark.tinylib.msgp).txt \ $(benchmark.encoding.json.gzip).txt \ $(benchmark.github.com.json-iterator.go.gzip).txt \ $(benchmark.github.com.segmentio.encoding.json.gzip).txt \ $(benchmark.github.com.mailru.easyjson.gzip).txt \ $(benchmark.github.com.protobuf.v1.gzip).txt \ $(benchmark.vmihailenco.msgpack.gzip).txt \ $(benchmark.tinylib.msgp.gzip).txt \ $(benchmark.encoding.json.snappy).txt \ $(benchmark.github.com.json-iterator.go.snappy).txt \ $(benchmark.github.com.segmentio.encoding.json.snappy).txt \ $(benchmark.github.com.mailru.easyjson.snappy).txt \ $(benchmark.github.com.protobuf.v1.snappy).txt \ $(benchmark.vmihailenco.msgpack.snappy).txt \ $(benchmark.tinylib.msgp.snappy).txt \ $(benchmark.encoding.json.zstd).txt \ $(benchmark.github.com.json-iterator.go.zstd).txt \ $(benchmark.github.com.segmentio.encoding.json.zstd).txt \ $(benchmark.github.com.mailru.easyjson.zstd).txt \ $(benchmark.github.com.protobuf.v1.zstd).txt \ $(benchmark.vmihailenco.msgpack.zstd).txt \ $(benchmark.tinylib.msgp.zstd).txt benchstat := ${GOPATH}/bin/benchstat all: $(benchstat): go install golang.org/x/perf/cmd/benchstat@latest $(benchmark.cmd.dir)/message.pb.go: $(benchmark.cmd.dir)/message.proto @protoc -I. \ -I$(GOPATH)/src \ -I$(GOPATH)/src/github.com/gogo/protobuf/protobuf \ --gogofaster_out=\ Mgoogle/protobuf/struct.proto=github.com/gogo/protobuf/types,\ Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types:.\ $(benchmark.cmd.dir)/message.proto bench: $(benchstat) $(benchmark.out) @for file in $(benchmark.out); do \ echo '======' $$(basename $$file | sed 's/.txt//') '======'; \ cat $$(echo $$file | sed 's/.txt/.log/'); \ echo; \ $(benchstat) $(benchmark.encoding.json).txt $$file; \ echo; \ done $(benchmark.dir): mkdir -p $(benchmark.dir) $(benchmark.bin): $(benchmark.src) go build -o $(benchmark.bin) ./$(benchmark.cmd.dir) $(benchmark.msgs): $(benchmark.dir) $(benchmark.data) cat $(benchmark.data) | gzip -d > $(benchmark.msgs) $(benchmark.encoding.json).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package encoding/json \ 1> $(benchmark.encoding.json).txt \ 2> $(benchmark.encoding.json).log $(benchmark.github.com.json-iterator.go).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/json-iterator/go \ 1> $(benchmark.github.com.json-iterator.go).txt \ 2> $(benchmark.github.com.json-iterator.go).log $(benchmark.github.com.segmentio.encoding.json).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/segmentio/encoding/json \ 1> $(benchmark.github.com.segmentio.encoding.json).txt \ 2> $(benchmark.github.com.segmentio.encoding.json).log $(benchmark.github.com.mailru.easyjson).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/mailru/easyjson \ 1> $(benchmark.github.com.mailru.easyjson).txt \ 2> $(benchmark.github.com.mailru.easyjson).log $(benchmark.github.com.protobuf.v1).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/segmentio/protobuf/v1 \ 1> $(benchmark.github.com.protobuf.v1).txt \ 2> $(benchmark.github.com.protobuf.v1).log $(benchmark.vmihailenco.msgpack).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/vmihailenco/msgpack \ 1> $(benchmark.vmihailenco.msgpack).txt \ 2> $(benchmark.vmihailenco.msgpack).log $(benchmark.tinylib.msgp).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/tinylib/msgp \ 1> $(benchmark.tinylib.msgp).txt \ 2> $(benchmark.tinylib.msgp).log $(benchmark.encoding.json.gzip).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package encoding/json -compression gzip \ 1> $(benchmark.encoding.json.gzip).txt \ 2> $(benchmark.encoding.json.gzip).log $(benchmark.github.com.json-iterator.go.gzip).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/json-iterator/go -compression gzip \ 1> $(benchmark.github.com.json-iterator.go.gzip).txt \ 2> $(benchmark.github.com.json-iterator.go.gzip).log $(benchmark.github.com.segmentio.encoding.json.gzip).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/segmentio/encoding/json -compression gzip \ 1> $(benchmark.github.com.segmentio.encoding.json.gzip).txt \ 2> $(benchmark.github.com.segmentio.encoding.json.gzip).log $(benchmark.github.com.mailru.easyjson.gzip).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/mailru/easyjson -compression gzip \ 1> $(benchmark.github.com.mailru.easyjson.gzip).txt \ 2> $(benchmark.github.com.mailru.easyjson.gzip).log $(benchmark.github.com.protobuf.v1.gzip).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/segmentio/protobuf/v1 -compression gzip \ 1> $(benchmark.github.com.protobuf.v1.gzip).txt \ 2> $(benchmark.github.com.protobuf.v1.gzip).log $(benchmark.vmihailenco.msgpack.gzip).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/vmihailenco/msgpack -compression gzip \ 1> $(benchmark.vmihailenco.msgpack.gzip).txt \ 2> $(benchmark.vmihailenco.msgpack.gzip).log $(benchmark.tinylib.msgp.gzip).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/tinylib/msgp -compression gzip \ 1> $(benchmark.tinylib.msgp.gzip).txt \ 2> $(benchmark.tinylib.msgp.gzip).log $(benchmark.encoding.json.snappy).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package encoding/json -compression snappy \ 1> $(benchmark.encoding.json.snappy).txt \ 2> $(benchmark.encoding.json.snappy).log $(benchmark.github.com.json-iterator.go.snappy).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/json-iterator/go -compression snappy \ 1> $(benchmark.github.com.json-iterator.go.snappy).txt \ 2> $(benchmark.github.com.json-iterator.go.snappy).log $(benchmark.github.com.segmentio.encoding.json.snappy).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/segmentio/encoding/json -compression snappy \ 1> $(benchmark.github.com.segmentio.encoding.json.snappy).txt \ 2> $(benchmark.github.com.segmentio.encoding.json.snappy).log $(benchmark.github.com.mailru.easyjson.snappy).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/mailru/easyjson -compression snappy \ 1> $(benchmark.github.com.mailru.easyjson.snappy).txt \ 2> $(benchmark.github.com.mailru.easyjson.snappy).log $(benchmark.github.com.protobuf.v1.snappy).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/segmentio/protobuf/v1 -compression snappy \ 1> $(benchmark.github.com.protobuf.v1.snappy).txt \ 2> $(benchmark.github.com.protobuf.v1.snappy).log $(benchmark.vmihailenco.msgpack.snappy).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/vmihailenco/msgpack -compression snappy \ 1> $(benchmark.vmihailenco.msgpack.snappy).txt \ 2> $(benchmark.vmihailenco.msgpack.snappy).log $(benchmark.tinylib.msgp.snappy).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/tinylib/msgp -compression snappy \ 1> $(benchmark.tinylib.msgp.snappy).txt \ 2> $(benchmark.tinylib.msgp.snappy).log $(benchmark.encoding.json.zstd).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package encoding/json -compression zstd \ 1> $(benchmark.encoding.json.zstd).txt \ 2> $(benchmark.encoding.json.zstd).log $(benchmark.github.com.json-iterator.go.zstd).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/json-iterator/go -compression zstd \ 1> $(benchmark.github.com.json-iterator.go.zstd).txt \ 2> $(benchmark.github.com.json-iterator.go.zstd).log $(benchmark.github.com.segmentio.encoding.json.zstd).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/segmentio/encoding/json -compression zstd \ 1> $(benchmark.github.com.segmentio.encoding.json.zstd).txt \ 2> $(benchmark.github.com.segmentio.encoding.json.zstd).log $(benchmark.github.com.mailru.easyjson.zstd).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/mailru/easyjson -compression zstd \ 1> $(benchmark.github.com.mailru.easyjson.zstd).txt \ 2> $(benchmark.github.com.mailru.easyjson.zstd).log $(benchmark.github.com.protobuf.v1.zstd).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/segmentio/protobuf/v1 -compression zstd \ 1> $(benchmark.github.com.protobuf.v1.zstd).txt \ 2> $(benchmark.github.com.protobuf.v1.zstd).log $(benchmark.vmihailenco.msgpack.zstd).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/vmihailenco/msgpack -compression zstd \ 1> $(benchmark.vmihailenco.msgpack.zstd).txt \ 2> $(benchmark.vmihailenco.msgpack.zstd).log $(benchmark.tinylib.msgp.zstd).txt: $(benchmark.msgs) $(benchmark.bin) cat $(benchmark.msgs) | $(benchmark.bin) -count $(benchmark.count) -batch $(benchmark.batch) -package github.com/tinylib/msgp -compression zstd \ 1> $(benchmark.tinylib.msgp.zstd).txt \ 2> $(benchmark.tinylib.msgp.zstd).log golang-github-segmentio-encoding-0.5.3/benchmarks/go.mod000066400000000000000000000015251504206176600232570ustar00rootroot00000000000000module github.com/segmentio/encoding/benchmarks go 1.13 require ( github.com/DataDog/zstd v1.4.1 github.com/gogo/protobuf v1.3.1 github.com/golang/snappy v0.0.1 github.com/google/uuid v1.0.0 github.com/json-iterator/go v1.1.7 github.com/kr/pretty v0.1.0 // indirect github.com/mailru/easyjson v0.7.0 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.1 // indirect github.com/philhofer/fwd v1.0.0 // indirect github.com/segmentio/encoding v0.1.1 github.com/tinylib/msgp v1.1.0 github.com/vmihailenco/msgpack v4.0.4+incompatible golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect golang.org/x/sync v0.0.0-20190423024810-112230192c58 // indirect google.golang.org/appengine v1.2.0 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect ) golang-github-segmentio-encoding-0.5.3/benchmarks/go.sum000066400000000000000000000124171504206176600233060ustar00rootroot00000000000000github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/segmentio/encoding v0.1.0 h1:V/FrZFA2Fm4Hpk3JdA+3JWN6fJnp15dZOnB+CI3Wcbw= github.com/segmentio/encoding v0.1.0/go.mod h1:RWhr02uzMB9gQC1x+MfYxedtmBibb9cZ6Vv9VxRSSbw= github.com/segmentio/encoding v0.1.1 h1:L2CR2XRdOOBhwvyAilVG+jDGQFdfcqCKPTGdE46bC74= github.com/segmentio/encoding v0.1.1/go.mod h1:RWhr02uzMB9gQC1x+MfYxedtmBibb9cZ6Vv9VxRSSbw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= google.golang.org/appengine v1.2.0 h1:S0iUepdCWODXRvtE+gcRDd15L+k+k1AiHlMiMjefH24= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= golang-github-segmentio-encoding-0.5.3/benchmarks/results/000077500000000000000000000000001504206176600236475ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/benchmarks/results/easyjson+gzip.log000066400000000000000000000002141504206176600271470ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/mailru/easyjson compression: gzip avg size: 1083.83 KB min size: 1050.79 KB max size: 1109.25 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/easyjson+gzip.txt000066400000000000000000000001441504206176600272070ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 78793 ns/op 14.09 MB/s 17599 B/op 297 allocs/op 1.08 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/easyjson+snappy.log000066400000000000000000000002161504206176600275120ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/mailru/easyjson compression: snappy avg size: 1415.50 KB min size: 1369.04 KB max size: 1468.66 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/easyjson+snappy.txt000066400000000000000000000001441504206176600275500ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 46097 ns/op 31.44 MB/s 17568 B/op 297 allocs/op 1.42 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/easyjson+zstd.log000066400000000000000000000002121504206176600271600ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/mailru/easyjson compression: zstd avg size: 974.70 KB min size: 943.27 KB max size: 1000.17 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/easyjson+zstd.txt000066400000000000000000000001441504206176600272220ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 49942 ns/op 19.98 MB/s 17591 B/op 297 allocs/op 0.97 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/easyjson.log000066400000000000000000000001721504206176600262050ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/mailru/easyjson avg size: 2026.88 KB min size: 1959.94 KB max size: 2076.68 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/encoding-json+gzip.log000066400000000000000000000003461504206176600300570ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: encoding/json compression: gzip #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1075.97 KB min size: 1044.33 KB max size: 1100.51 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/encoding-json+gzip.txt000066400000000000000000000001451504206176600301120ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 101048 ns/op 10.90 MB/s 15780 B/op 423 allocs/op 1.08 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/encoding-json+snappy.log000066400000000000000000000003501504206176600304130ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: encoding/json compression: snappy #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1408.08 KB min size: 1363.64 KB max size: 1451.60 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/encoding-json+snappy.txt000066400000000000000000000001441504206176600304520ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 69750 ns/op 20.67 MB/s 15743 B/op 423 allocs/op 1.41 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/encoding-json+zstd.log000066400000000000000000000003431504206176600300670ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: encoding/json compression: zstd #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 952.03 KB min size: 922.46 KB max size: 978.53 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/encoding-json+zstd.txt000066400000000000000000000001441504206176600301240ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 72932 ns/op 13.37 MB/s 15767 B/op 423 allocs/op 0.95 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/encoding-json.log000066400000000000000000000003241504206176600271060ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: encoding/json #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 2027.14 KB min size: 1960.16 KB max size: 2076.95 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/json-iterator+gzip.log000066400000000000000000000003641504206176600301220ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/json-iterator/go compression: gzip #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1089.84 KB min size: 1056.57 KB max size: 1114.99 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/json-iterator+gzip.txt000066400000000000000000000001441504206176600301540ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 76778 ns/op 14.54 MB/s 13357 B/op 388 allocs/op 1.09 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/json-iterator+snappy.log000066400000000000000000000003661504206176600304650ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/json-iterator/go compression: snappy #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1423.65 KB min size: 1375.36 KB max size: 1479.84 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/json-iterator+snappy.txt000066400000000000000000000001441504206176600305150ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 44201 ns/op 32.98 MB/s 13321 B/op 388 allocs/op 1.42 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/json-iterator+zstd.log000066400000000000000000000003621504206176600301330ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/json-iterator/go compression: zstd #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 988.18 KB min size: 956.31 KB max size: 1014.69 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/json-iterator+zstd.txt000066400000000000000000000001441504206176600301670ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 47690 ns/op 21.22 MB/s 13344 B/op 388 allocs/op 0.99 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/json-iterator.log000066400000000000000000000003421504206176600271510ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/json-iterator/go #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 2027.15 KB min size: 1960.16 KB max size: 2076.95 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/json-iterator.txt000066400000000000000000000001441504206176600272070ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 37497 ns/op 55.36 MB/s 13277 B/op 388 allocs/op 2.03 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-encoding-json+gzip.log000066400000000000000000000003731504206176600315170ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/segmentio/encoding/json compression: gzip #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1089.58 KB min size: 1056.63 KB max size: 1114.71 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-encoding-json+gzip.txt000066400000000000000000000001431504206176600315500ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 66910 ns/op 16.67 MB/s 6105 B/op 165 allocs/op 1.09 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-encoding-json+snappy.log000066400000000000000000000003751504206176600320620ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/segmentio/encoding/json compression: snappy #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1423.02 KB min size: 1375.34 KB max size: 1481.57 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-encoding-json+snappy.txt000066400000000000000000000001431504206176600321110ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 33337 ns/op 43.71 MB/s 6070 B/op 165 allocs/op 1.42 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-encoding-json+zstd.log000066400000000000000000000003711504206176600315300ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/segmentio/encoding/json compression: zstd #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 988.11 KB min size: 956.38 KB max size: 1014.44 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-encoding-json+zstd.txt000066400000000000000000000001431504206176600315630ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 37417 ns/op 27.04 MB/s 6094 B/op 165 allocs/op 0.99 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-encoding-json.log000066400000000000000000000003511504206176600305460ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/segmentio/encoding/json #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 2026.17 KB min size: 1959.18 KB max size: 2075.97 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-protobuf-v1+gzip.log000066400000000000000000000003711504206176600311440ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/segmentio/protobuf/v1 compression: gzip #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1130.42 KB min size: 1093.34 KB max size: 1170.82 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-protobuf-v1+gzip.txt000066400000000000000000000001441504206176600312000ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 69366 ns/op 16.69 MB/s 16287 B/op 256 allocs/op 1.13 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-protobuf-v1+snappy.log000066400000000000000000000003731504206176600315070ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/segmentio/protobuf/v1 compression: snappy #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1412.94 KB min size: 1356.50 KB max size: 1480.25 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-protobuf-v1+snappy.txt000066400000000000000000000001441504206176600315410ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 34140 ns/op 42.38 MB/s 16067 B/op 255 allocs/op 1.41 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-protobuf-v1+zstd.log000066400000000000000000000003711504206176600311570ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/segmentio/protobuf/v1 compression: zstd #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1055.01 KB min size: 1019.95 KB max size: 1086.27 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-protobuf-v1+zstd.txt000066400000000000000000000001441504206176600312130ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 39298 ns/op 27.49 MB/s 16061 B/op 255 allocs/op 1.06 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-protobuf-v1.log000066400000000000000000000003471504206176600302020ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/segmentio/protobuf/v1 #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1866.52 KB min size: 1798.21 KB max size: 1917.75 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/segment-protobuf-v1.txt000066400000000000000000000001441504206176600302330ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 30998 ns/op 61.66 MB/s 16003 B/op 255 allocs/op 1.87 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/tinylib-msgp+gzip.log000066400000000000000000000003601504206176600277340ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/tinylib/msgp compression: gzip #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1052.68 KB min size: 1018.90 KB max size: 1078.90 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/tinylib-msgp+gzip.txt000066400000000000000000000001431504206176600277710ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 53809 ns/op 20.03 MB/s 5592 B/op 164 allocs/op 1.05 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/tinylib-msgp+snappy.log000066400000000000000000000003621504206176600302770ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/tinylib/msgp compression: snappy #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1337.42 KB min size: 1283.11 KB max size: 1391.90 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/tinylib-msgp+snappy.txt000066400000000000000000000001431504206176600303320ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 20895 ns/op 65.54 MB/s 5398 B/op 163 allocs/op 1.34 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/tinylib-msgp+zstd.log000066400000000000000000000003571504206176600277550ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/tinylib/msgp compression: zstd #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1001.53 KB min size: 968.40 KB max size: 1029.62 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/tinylib-msgp+zstd.txt000066400000000000000000000001431504206176600300040ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 27037 ns/op 37.93 MB/s 5403 B/op 163 allocs/op 1.00 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/tinylib-msgp.log000066400000000000000000000003361504206176600267720ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/tinylib/msgp #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1807.43 KB min size: 1747.94 KB max size: 1852.62 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/tinylib-msgp.txt000066400000000000000000000001441504206176600270250ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 16889 ns/op 109.59 MB/s 5356 B/op 163 allocs/op 1.81 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/vmihailenco-msgpack+gzip.log000066400000000000000000000003671504206176600312460ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/vmihailenco/msgpack compression: gzip #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1042.87 KB min size: 1008.43 KB max size: 1077.14 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/vmihailenco-msgpack+gzip.txt000066400000000000000000000001431504206176600312740ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 61153 ns/op 17.46 MB/s 6720 B/op 197 allocs/op 1.04 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/vmihailenco-msgpack+snappy.log000066400000000000000000000003711504206176600316020ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/vmihailenco/msgpack compression: snappy #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1324.88 KB min size: 1266.77 KB max size: 1384.42 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/vmihailenco-msgpack+snappy.txt000066400000000000000000000001431504206176600316350ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 28369 ns/op 47.82 MB/s 6541 B/op 196 allocs/op 1.32 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/vmihailenco-msgpack+zstd.log000066400000000000000000000003651504206176600312570ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/vmihailenco/msgpack compression: zstd #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 995.18 KB min size: 961.61 KB max size: 1023.46 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/vmihailenco-msgpack+zstd.txt000066400000000000000000000001431504206176600313070ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 33937 ns/op 30.03 MB/s 6547 B/op 196 allocs/op 1.00 KB/msg golang-github-segmentio-encoding-0.5.3/benchmarks/results/vmihailenco-msgpack.log000066400000000000000000000003451504206176600302750ustar00rootroot00000000000000goos: darwin goarch: amd64 pkg: github.com/vmihailenco/msgpack #187: json: cannot unmarshal number into Go struct field Message.userId of type string errors: 2/10000 avg size: 1717.19 KB min size: 1657.45 KB max size: 1762.65 KB golang-github-segmentio-encoding-0.5.3/benchmarks/results/vmihailenco-msgpack.txt000066400000000000000000000001431504206176600303270ustar00rootroot00000000000000BenchmarkEncoding/count=20 200000 24901 ns/op 70.61 MB/s 6503 B/op 196 allocs/op 1.72 KB/msg golang-github-segmentio-encoding-0.5.3/go.mod000066400000000000000000000002401504206176600211330ustar00rootroot00000000000000module github.com/segmentio/encoding go 1.23 require github.com/segmentio/asm v1.1.3 require golang.org/x/sys v0.0.0-20211110154304-99a53858aa08 // indirect golang-github-segmentio-encoding-0.5.3/go.sum000066400000000000000000000005661504206176600211730ustar00rootroot00000000000000github.com/segmentio/asm v1.1.3 h1:WM03sfUOENvvKexOLp+pCqgb/WDjsi7EK8gIsICtzhc= github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= golang.org/x/sys v0.0.0-20211110154304-99a53858aa08 h1:WecRHqgE09JBkh/584XIE6PMz5KKE/vER4izNUi30AQ= golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang-github-segmentio-encoding-0.5.3/internal/000077500000000000000000000000001504206176600216455ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/internal/runtime_reflect/000077500000000000000000000000001504206176600250345ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/internal/runtime_reflect/map.go000066400000000000000000000060631504206176600261450ustar00rootroot00000000000000// Package runtime_reflect exposes internal APIs of the Go runtime. // // This package is internal so it doesn't become part of the exported APIs that // users of this package can take dependencies on. There is a risk that these // APIs will be implicitly changed by Go, in which case packages that depend on // it will break. We use these APIs to have access to optimziations that aren't // possible today via the reflect package. Ideally, the reflect package evolves // to expose APIs that are efficient enough that we can drop the need for this // package, but until then we will be maintaining bridges to these Go runtime // functions and types. package runtime_reflect import "unsafe" func Assign(typ, dst, src unsafe.Pointer) { typedmemmove(typ, dst, src) } func MapAssign(t, m, k unsafe.Pointer) unsafe.Pointer { return mapassign(t, m, k) } func MakeMap(t unsafe.Pointer, cap int) unsafe.Pointer { return makemap(t, cap) } type MapIter struct{ hiter } func (it *MapIter) Init(t unsafe.Pointer, m unsafe.Pointer) { mapiterinit(t, m, &it.hiter) } func (it *MapIter) Done() { if it.h != nil { it.key = nil mapiternext(&it.hiter) } } func (it *MapIter) Next() { mapiternext(&it.hiter) } func (it *MapIter) HasNext() bool { return it.key != nil } func (it *MapIter) Key() unsafe.Pointer { return it.key } func (it *MapIter) Value() unsafe.Pointer { return it.value } // copied from src/runtime/map.go, all pointer types replaced with // unsafe.Pointer. // // Alternatively we could get away with a heap allocation and only // defining key and val if we were using reflect.mapiterinit instead, // which returns a heap-allocated *hiter. type hiter struct { key unsafe.Pointer // nil when iteration is done value unsafe.Pointer t unsafe.Pointer h unsafe.Pointer buckets unsafe.Pointer // bucket ptr at hash_iter initialization time bptr unsafe.Pointer // current bucket overflow unsafe.Pointer // keeps overflow buckets of hmap.buckets alive oldoverflow unsafe.Pointer // keeps overflow buckets of hmap.oldbuckets alive startBucket uintptr // bucket iteration started at offset uint8 // intra-bucket offset to start from during iteration (should be big enough to hold bucketCnt-1) wrapped bool // already wrapped around from end of bucket array to beginning B uint8 i uint8 bucket uintptr checkBucket uintptr } //go:noescape //go:linkname makemap reflect.makemap func makemap(t unsafe.Pointer, cap int) unsafe.Pointer // m escapes into the return value, but the caller of mapiterinit // doesn't let the return value escape. // //go:noescape //go:linkname mapiterinit runtime.mapiterinit func mapiterinit(t unsafe.Pointer, m unsafe.Pointer, it *hiter) //go:noescape //go:linkname mapiternext runtime.mapiternext func mapiternext(it *hiter) //go:noescape //go:linkname mapassign runtime.mapassign func mapassign(t, m, k unsafe.Pointer) unsafe.Pointer //go:nosplit //go:noescape //go:linkname typedmemmove runtime.typedmemmove func typedmemmove(typ, dst, src unsafe.Pointer) golang-github-segmentio-encoding-0.5.3/internal/runtime_reflect/slice.go000066400000000000000000000015141504206176600264630ustar00rootroot00000000000000package runtime_reflect import "unsafe" type Slice struct { data unsafe.Pointer len int cap int } func (s *Slice) Cap() int { return s.cap } func (s *Slice) Len() int { return s.len } func (s *Slice) SetLen(n int) { s.len = n } func (s *Slice) Index(i int, elemSize uintptr) unsafe.Pointer { return unsafe.Pointer(uintptr(s.data) + (uintptr(i) * elemSize)) } func MakeSlice(elemType unsafe.Pointer, len, cap int) Slice { return Slice{ data: newarray(elemType, cap), len: len, cap: cap, } } func CopySlice(elemType unsafe.Pointer, dst, src Slice) int { return typedslicecopy(elemType, dst, src) } //go:linkname newarray runtime.newarray func newarray(t unsafe.Pointer, n int) unsafe.Pointer //go:linkname typedslicecopy runtime.typedslicecopy //go:noescape func typedslicecopy(t unsafe.Pointer, dst, src Slice) int golang-github-segmentio-encoding-0.5.3/iso8601/000077500000000000000000000000001504206176600211425ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/iso8601/parse.go000066400000000000000000000124731504206176600226120ustar00rootroot00000000000000package iso8601 import ( "encoding/binary" "errors" "time" "unsafe" ) var ( errInvalidTimestamp = errors.New("invalid ISO8601 timestamp") errMonthOutOfRange = errors.New("month out of range") errDayOutOfRange = errors.New("day out of range") errHourOutOfRange = errors.New("hour out of range") errMinuteOutOfRange = errors.New("minute out of range") errSecondOutOfRange = errors.New("second out of range") ) // Parse parses an ISO8601 timestamp, e.g. "2021-03-25T21:36:12Z". func Parse(input string) (time.Time, error) { b := unsafeStringToBytes(input) if len(b) >= 20 && len(b) <= 30 && b[len(b)-1] == 'Z' { if len(b) == 21 || (len(b) > 21 && b[19] != '.') { return time.Time{}, errInvalidTimestamp } t1 := binary.LittleEndian.Uint64(b) t2 := binary.LittleEndian.Uint64(b[8:16]) t3 := uint64(b[16]) | uint64(b[17])<<8 | uint64(b[18])<<16 | uint64('Z')<<24 // Check for valid separators by masking input with " - - T : : Z". // If separators are all valid, replace them with a '0' (0x30) byte and // check all bytes are now numeric. if !match(t1, mask1) || !match(t2, mask2) || !match(t3, mask3) { return time.Time{}, errInvalidTimestamp } t1 ^= replace1 t2 ^= replace2 t3 ^= replace3 if (nonNumeric(t1) | nonNumeric(t2) | nonNumeric(t3)) != 0 { return time.Time{}, errInvalidTimestamp } t1 -= zero t2 -= zero t3 -= zero year := (t1&0xF)*1000 + (t1>>8&0xF)*100 + (t1>>16&0xF)*10 + (t1 >> 24 & 0xF) month := (t1>>40&0xF)*10 + (t1 >> 48 & 0xF) day := (t2&0xF)*10 + (t2 >> 8 & 0xF) hour := (t2>>24&0xF)*10 + (t2 >> 32 & 0xF) minute := (t2>>48&0xF)*10 + (t2 >> 56) second := (t3>>8&0xF)*10 + (t3 >> 16) nanos := int64(0) if len(b) > 20 { for _, c := range b[20 : len(b)-1] { if c < '0' || c > '9' { return time.Time{}, errInvalidTimestamp } nanos = (nanos * 10) + int64(c-'0') } nanos *= pow10[30-len(b)] } if err := validate(year, month, day, hour, minute, second); err != nil { return time.Time{}, err } unixSeconds := int64(daysSinceEpoch(year, month, day))*86400 + int64(hour*3600+minute*60+second) return time.Unix(unixSeconds, nanos).UTC(), nil } // Fallback to using time.Parse(). t, err := time.Parse(time.RFC3339Nano, input) if err != nil { // Override (and don't wrap) the error here. The error returned by // time.Parse() is dynamic, and includes a reference to the input // string. By overriding the error, we guarantee that the input string // doesn't escape. return time.Time{}, errInvalidTimestamp } return t, nil } var pow10 = []int64{1, 10, 100, 1000, 1e4, 1e5, 1e6, 1e7, 1e8} const ( mask1 = 0x2d00002d00000000 // YYYY-MM- mask2 = 0x00003a0000540000 // DDTHH:MM mask3 = 0x000000005a00003a // :SSZ____ // Generate masks that replace the separators with a numeric byte. // The input must have valid separators. XOR with the separator bytes // to zero them out and then XOR with 0x30 to replace them with '0'. replace1 = mask1 ^ 0x3000003000000000 replace2 = mask2 ^ 0x0000300000300000 replace3 = mask3 ^ 0x3030303030000030 lsb = ^uint64(0) / 255 msb = lsb * 0x80 zero = lsb * '0' nine = lsb * '9' ) func validate(year, month, day, hour, minute, second uint64) error { if day == 0 || day > 31 { return errDayOutOfRange } if month == 0 || month > 12 { return errMonthOutOfRange } if hour >= 24 { return errHourOutOfRange } if minute >= 60 { return errMinuteOutOfRange } if second >= 60 { return errSecondOutOfRange } if month == 2 && (day > 29 || (day == 29 && !isLeapYear(year))) { return errDayOutOfRange } if day == 31 { switch month { case 4, 6, 9, 11: return errDayOutOfRange } } return nil } func match(u, mask uint64) bool { return (u & mask) == mask } func nonNumeric(u uint64) uint64 { // Derived from https://graphics.stanford.edu/~seander/bithacks.html#HasLessInWord. // Subtract '0' (0x30) from each byte so that the MSB is set in each byte // if there's a byte less than '0' (0x30). Add 0x46 (0x7F-'9') so that the // MSB is set if there's a byte greater than '9' (0x39). To handle overflow // when adding 0x46, include the MSB from the input bytes in the final mask. // Remove all but the MSBs and then you're left with a mask where each // non-numeric byte from the input has its MSB set in the output. return ((u - zero) | (u + (^msb - nine)) | u) & msb } func daysSinceEpoch(year, month, day uint64) uint64 { // Derived from https://blog.reverberate.org/2020/05/12/optimizing-date-algorithms.html. monthAdjusted := month - 3 var carry uint64 if monthAdjusted > month { carry = 1 } var adjust uint64 if carry == 1 { adjust = 12 } yearAdjusted := year + 4800 - carry monthDays := ((monthAdjusted+adjust)*62719 + 769) / 2048 leapDays := yearAdjusted/4 - yearAdjusted/100 + yearAdjusted/400 return yearAdjusted*365 + leapDays + monthDays + (day - 1) - 2472632 } func isLeapYear(y uint64) bool { return (y%4) == 0 && ((y%100) != 0 || (y%400) == 0) } func unsafeStringToBytes(s string) []byte { return *(*[]byte)(unsafe.Pointer(&sliceHeader{ Data: *(*unsafe.Pointer)(unsafe.Pointer(&s)), Len: len(s), Cap: len(s), })) } // sliceHeader is like reflect.SliceHeader but the Data field is a // unsafe.Pointer instead of being a uintptr to avoid invalid // conversions from uintptr to unsafe.Pointer. type sliceHeader struct { Data unsafe.Pointer Len int Cap int } golang-github-segmentio-encoding-0.5.3/iso8601/parse_test.go000066400000000000000000000365331504206176600236540ustar00rootroot00000000000000package iso8601 import ( "fmt" "testing" "time" ) func TestParse(t *testing.T) { for _, input := range []string{ // Fast path (20 bytes) "1987-12-16T23:45:12Z", "2006-01-02T15:04:05Z", "2000-02-29T23:59:59Z", // leap year "2020-02-29T23:59:59Z", // leap year "0000-01-01T00:00:00Z", "9999-12-31T23:59:59Z", // Fast path (24 bytes) "1987-12-16T23:45:12.123Z", "2006-01-02T15:04:05.123Z", "2000-02-29T23:59:59.123Z", "2020-02-29T23:59:59.123Z", "0000-01-01T00:00:00.000Z", "9999-12-31T23:59:59.999Z", // Fast path (30 bytes) "1987-12-16T23:45:12.123456789Z", "2006-01-02T15:04:05.123456789Z", "2000-02-29T23:59:59.123456789Z", "2020-02-29T23:59:59.123456789Z", "0000-01-01T00:00:00.000000000Z", "9999-12-31T23:59:59.999999999Z", // Slow path "2006-01-02T15:04:05.1Z", "2006-01-02T15:04:05.12Z", "2006-01-02T15:04:05.1234Z", "2006-01-02T15:04:05.12345Z", "2006-01-02T15:04:05.123456Z", "2006-01-02T15:04:05.1234567Z", "2006-01-02T15:04:05.12345678Z", "2021-10-16T07:55:07+10:00", "2021-10-16T07:55:07.1+10:00", "2021-10-16T07:55:07.12+10:00", "2021-10-16T07:55:07.123+10:00", "2021-10-16T07:55:07.1234+10:00", "2021-10-16T07:55:07.12345+10:00", "2021-10-16T07:55:07.123456+10:00", "2021-10-16T07:55:07.1234567+10:00", "2021-10-16T07:55:07.12345678+10:00", "2021-10-16T07:55:07.123456789+10:00", "2021-10-16T07:55:07-10:00", "2021-10-16T07:55:07.1-10:00", "2021-10-16T07:55:07.12-10:00", "2021-10-16T07:55:07.123-10:00", "2021-10-16T07:55:07.1234-10:00", "2021-10-16T07:55:07.12345-10:00", "2021-10-16T07:55:07.123456-10:00", "2021-10-16T07:55:07.1234567-10:00", "2021-10-16T07:55:07.12345678-10:00", "2021-10-16T07:55:07.123456789-10:00", } { t.Run(input, func(t *testing.T) { expect, err := time.Parse(time.RFC3339Nano, input) if err != nil { t.Fatal(err) } actual, err := Parse(input) if err != nil { t.Error(err) } else if !actual.Equal(expect) { t.Errorf("unexpected time: %v vs expected %v", actual, expect) } else if actual.Location().String() != expect.Location().String() { t.Errorf("unexpected timezone: %v vs expected %v", actual.Location().String(), expect.Location().String()) } }) } // Check ~4M YYYY-MM-DD dates in 20 byte form. for year := range 10000 { for month := range 14 { for day := range 33 { input := fmt.Sprintf("%04d-%02d-%02dT12:34:56Z", year, month, day) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } } } // Check ~4M YYYY-MM-DD dates in 24 byte form. for year := range 10000 { for month := range 14 { for day := range 33 { input := fmt.Sprintf("%04d-%02d-%02dT12:34:56.789Z", year, month, day) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } } } // Check ~4M YYYY-MM-DD dates in 30 byte form. for year := range 10000 { for month := range 14 { for day := range 33 { input := fmt.Sprintf("%04d-%02d-%02dT12:34:56.123456789Z", year, month, day) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } } } // Check all ~1M HH:MM:SS times in 20 byte form. for hour := range 100 { for minute := range 100 { for second := range 100 { input := fmt.Sprintf("2000-01-01T%02d:%02d:%02dZ", hour, minute, second) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } } } // Check ~1M HH:MM:SS.MMM times in 24 byte form. for hour := range 100 { for minute := range 100 { for second := range 100 { input := fmt.Sprintf("2000-01-01T%02d:%02d:%02d.123Z", hour, minute, second) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } } } // Check ~1M HH:MM:SS.MMM times in 30 byte form. for hour := range 100 { for minute := range 100 { for second := range 100 { input := fmt.Sprintf("2000-01-01T%02d:%02d:%02d.123456789Z", hour, minute, second) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } } } // Check milliseconds. for millis := 1; millis < 1000; millis <<= 1 { input := fmt.Sprintf("2000-01-01T00:00:00.%03dZ", millis) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } // Check nanoseconds. for nanos := 1; nanos < 1e9; nanos <<= 1 { input := fmt.Sprintf("2000-01-01T00:00:00.%09dZ", nanos) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } // Check with trailing zeroes omitted. for n := 1; n < 1e9; n <<= 1 { input := fmt.Sprintf("2000-01-01T00:00:00.%dZ", n) expect, expectErr := time.Parse(time.RFC3339Nano, input) actual, actualErr := Parse(input) if (expectErr != nil) != (actualErr != nil) { t.Errorf("unexpected error for %v: %v vs. %v expected", input, actualErr, expectErr) } else if !actual.Equal(expect) { t.Errorf("unexpected time for %v: %v vs. %v expected", input, actual, expect) } } } func TestParseInvalid(t *testing.T) { for _, input := range []string{ // 20 bytes "XXXXXXXXXXXXXXXXXXXX", "00000000000000000000", "1900-02-29T00:00:00Z", // 28 days in month (not a leap year) "2021-02-29T00:00:00Z", // 28 days in month (not a leap year) "2021-02-30T00:00:00Z", // 28 days in month "2021-02-31T00:00:00Z", // 28 days in month "2021-04-31T00:00:00Z", // 30 days in month "2021-06-31T00:00:00Z", // 30 days in month "2021-09-31T00:00:00Z", // 30 days in month "2021-11-31T00:00:00Z", // 30 days in month "XXXX-13-01T00:00:00Z", // invalid year "2000-13-01T00:00:00Z", // invalid month (1) "2000-00-01T00:00:00Z", // invalid month (2) "2000-XX-01T00:00:00Z", // invalid month (3) "2000-12-32T00:00:00Z", // invalid day (1) "2000-12-00T00:00:00Z", // invalid day (2) "2000-12-XXT00:00:00Z", // invalid day (3) "2000-12-31T24:00:00Z", // invalid hour (1) "2000-12-31TXX:00:00Z", // invalid hour (2) "2000-12-31T23:60:00Z", // invalid minute (1) "2000-12-31T23:XX:00Z", // invalid minute (2) "2000-12-31T23:59:60Z", // invalid second (1) "2000-12-31T23:59:XXZ", // invalid second (2) "1999-01-01 23:45:00Z", // missing T separator "1999 01-01T23:45:00Z", // missing date separator (1) "1999-01 01T23:45:00Z", // missing date separator (2) "1999-01-01T23 45:00Z", // missing time separator (1) "1999-01-01T23:45 00Z", // missing time separator (2) "1999-01-01T23:45:00 ", // missing timezone "1999-01-01t23:45:00Z", // lowercase T "1999-01-01T23:45:00z", // lowercase Z "X999-01-01T23:45:00Z", // X in various positions "1X99-01-01T23:45:00Z", "19X9-01-01T23:45:00Z", "199X-01-01T23:45:00Z", "1999X01-01T23:45:00Z", "1999-X1-01T23:45:00Z", "1999-0X-01T23:45:00Z", "1999-01X01T23:45:00Z", "1999-01-X1T23:45:00Z", "1999-01-0XT23:45:00Z", "1999-01-01X23:45:00Z", "1999-01-01TX3:45:00Z", "1999-01-01T2X:45:00Z", "1999-01-01T23X45:00Z", "1999-01-01T23:X5:00Z", "1999-01-01T23:4X:00Z", "1999-01-01T23:45X00Z", "1999-01-01T23:45:X0Z", "1999-01-01T23:45:0XZ", "1999-01-01T23:45:00X", // 24 bytes "XXXXXXXXXXXXXXXXXXXXXXXX", "000000000000000000000000", "1900-02-29T00:00:00.123Z", // 28 days in month (not a leap year) "2021-02-29T00:00:00.123Z", // 28 days in month (not a leap year) "2021-02-30T00:00:00.123Z", // 28 days in month "2021-02-31T00:00:00.123Z", // 28 days in month "2021-04-31T00:00:00.123Z", // 30 days in month "2021-06-31T00:00:00.123Z", // 30 days in month "2021-09-31T00:00:00.123Z", // 30 days in month "2021-11-31T00:00:00.123Z", // 30 days in month "XXXX-13-01T00:00:00.123Z", // invalid year "2000-13-01T00:00:00.123Z", // invalid month (1) "2000-00-01T00:00:00.123Z", // invalid month (2) "2000-XX-01T00:00:00.123Z", // invalid month (3) "2000-12-32T00:00:00.123Z", // invalid day (1) "2000-12-00T00:00:00.123Z", // invalid day (2) "2000-12-XXT00:00:00.123Z", // invalid day (3) "2000-12-31T24:00:00.123Z", // invalid hour (1) "2000-12-31TXX:00:00.123Z", // invalid hour (2) "2000-12-31T23:60:00.123Z", // invalid minute (1) "2000-12-31T23:XX:00.123Z", // invalid minute (2) "2000-12-31T23:59:60.123Z", // invalid second (1) "2000-12-31T23:59:XX.123Z", // invalid second (2) "2000-12-31T23:59:59.XXXZ", // invalid millis "1999-01-01 23:45:00.123Z", // missing T separator "1999 01-01T23:45:00.123Z", // missing date separator (1) "1999-01 01T23:45:00.123Z", // missing date separator (2) "1999-01-01T23 45:00.123Z", // missing time separator (1) "1999-01-01T23:45 00.123Z", // missing time separator (2) "1999-01-01T23:45:00 123Z", // missing time separator (3) "1999-01-01T23:45:00.123 ", // missing timezone "1999-01-01t23:45:00.123Z", // lowercase T "1999-01-01T23:45:00.123z", // lowercase Z "X999-01-01T23:45:00.123Z", // X in various positions "1X99-01-01T23:45:00.123Z", "19X9-01-01T23:45:00.123Z", "199X-01-01T23:45:00.123Z", "1999X01-01T23:45:00.123Z", "1999-X1-01T23:45:00.123Z", "1999-0X-01T23:45:00.123Z", "1999-01X01T23:45:00.123Z", "1999-01-X1T23:45:00.123Z", "1999-01-0XT23:45:00.123Z", "1999-01-01X23:45:00.123Z", "1999-01-01TX3:45:00.123Z", "1999-01-01T2X:45:00.123Z", "1999-01-01T23X45:00.123Z", "1999-01-01T23:X5:00.123Z", "1999-01-01T23:4X:00.123Z", "1999-01-01T23:45X00.123Z", "1999-01-01T23:45:X0.123Z", "1999-01-01T23:45:0X.123Z", "1999-01-01T23:45:00X123Z", "1999-01-01T23:45:00.X23Z", "1999-01-01T23:45:00.1X3Z", "1999-01-01T23:45:00.12XZ", "1999-01-01T23:45:00.123X", // 30 bytes "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "000000000000000000000000000000", "1900-02-29T00:00:00.123456789Z", // 28 days in month (not a leap year) "2021-02-29T00:00:00.123456789Z", // 28 days in month (not a leap year) "2021-02-30T00:00:00.123456789Z", // 28 days in month "2021-02-31T00:00:00.123456789Z", // 28 days in month "2021-04-31T00:00:00.123456789Z", // 30 days in month "2021-06-31T00:00:00.123456789Z", // 30 days in month "2021-09-31T00:00:00.123456789Z", // 30 days in month "2021-11-31T00:00:00.123456789Z", // 30 days in month "XXXX-13-01T00:00:00.123456789Z", // invalid year "2000-13-01T00:00:00.123456789Z", // invalid month (1) "2000-00-01T00:00:00.123456789Z", // invalid month (2) "2000-XX-01T00:00:00.123456789Z", // invalid month (3) "2000-12-32T00:00:00.123456789Z", // invalid day (1) "2000-12-00T00:00:00.123456789Z", // invalid day (2) "2000-12-XXT00:00:00.123456789Z", // invalid day (3) "2000-12-31T24:00:00.123456789Z", // invalid hour (1) "2000-12-31TXX:00:00.123456789Z", // invalid hour (2) "2000-12-31T23:60:00.123456789Z", // invalid minute (1) "2000-12-31T23:XX:00.123456789Z", // invalid minute (2) "2000-12-31T23:59:60.123456789Z", // invalid second (1) "2000-12-31T23:59:XX.123456789Z", // invalid second (2) "2000-12-31T23:59:59.XXXXXXXXXZ", // invalid nanos "1999-01-01 23:45:00.123456789Z", // missing T separator "1999 01-01T23:45:00.123456789Z", // missing date separator (1) "1999-01 01T23:45:00.123456789Z", // missing date separator (2) "1999-01-01T23 45:00.123456789Z", // missing time separator (1) "1999-01-01T23:45 00.123456789Z", // missing time separator (2) "1999-01-01T23:45:00 123456789Z", // missing time separator (3) "1999-01-01T23:45:00.123456789 ", // missing timezone "1999-01-01t23:45:00.123456789Z", // lowercase T "1999-01-01T23:45:00.123456789z", // lowercase Z "X999-01-01T23:45:00.123456789Z", // X in various positions "1X99-01-01T23:45:00.123456789Z", "19X9-01-01T23:45:00.123456789Z", "199X-01-01T23:45:00.123456789Z", "1999X01-01T23:45:00.123456789Z", "1999-X1-01T23:45:00.123456789Z", "1999-0X-01T23:45:00.123456789Z", "1999-01X01T23:45:00.123456789Z", "1999-01-X1T23:45:00.123456789Z", "1999-01-0XT23:45:00.123456789Z", "1999-01-01X23:45:00.123456789Z", "1999-01-01TX3:45:00.123456789Z", "1999-01-01T2X:45:00.123456789Z", "1999-01-01T23X45:00.123456789Z", "1999-01-01T23:X5:00.123456789Z", "1999-01-01T23:4X:00.123456789Z", "1999-01-01T23:45X00.123456789Z", "1999-01-01T23:45:X0.123456789Z", "1999-01-01T23:45:0X.123456789Z", "1999-01-01T23:45:00X123456789Z", "1999-01-01T23:45:00.X23456789Z", "1999-01-01T23:45:00.1X3456789Z", "1999-01-01T23:45:00.12X456789Z", "1999-01-01T23:45:00.123X56789Z", "1999-01-01T23:45:00.1234X6789Z", "1999-01-01T23:45:00.12345X789Z", "1999-01-01T23:45:00.123456X89Z", "1999-01-01T23:45:00.1234567X9Z", "1999-01-01T23:45:00.12345678XZ", "1999-01-01T23:45:00.123456789X", "2000-01-01T00:00:00.Z", // missing number after decimal point } { t.Run(input, func(t *testing.T) { ts, err := time.Parse(time.RFC3339Nano, input) if err == nil { t.Fatalf("expected time.Parse('%s') error, got %v", input, ts) } ts, actualErr := Parse(input) if (err != nil) != (actualErr != nil) { t.Fatalf("expected Parse('%s') error %v, got %v", input, err, actualErr) } }) } } func BenchmarkParse(b *testing.B) { for range b.N { Parse("2006-01-02T15:04:05Z") } } func BenchmarkParseMilliseconds(b *testing.B) { for range b.N { Parse("2006-01-02T15:04:05.123Z") } } func BenchmarkParseMicroseconds(b *testing.B) { for range b.N { Parse("2006-01-02T15:04:05.123456Z") } } func BenchmarkParseNanoseconds(b *testing.B) { for range b.N { Parse("2006-01-02T15:04:05.123456789Z") } } func BenchmarkParseInvalid(b *testing.B) { for range b.N { Parse("2006-01-02T15:04:05.XZ") } } golang-github-segmentio-encoding-0.5.3/iso8601/valid.go000066400000000000000000000067731504206176600226050ustar00rootroot00000000000000package iso8601 // ValidFlags is a bitset type used to configure the behavior of the Valid // function. type ValidFlags int const ( // Strict is a validation flag used to represent a string iso8601 validation // (this is the default). Strict ValidFlags = 0 // AllowSpaceSeparator allows the presence of a space instead of a 'T' as // separator between the date and time. AllowSpaceSeparator ValidFlags = 1 << iota // AllowMissingTime allows the value to contain only a date. AllowMissingTime // AllowMissingSubsecond allows the value to contain only a date and time. AllowMissingSubsecond // AllowMissingTimezone allows the value to be missing the timezone // information. AllowMissingTimezone // AllowNumericTimezone allows the value to represent timezones in their // numeric form. AllowNumericTimezone // Flexible is a combination of all validation flag that allow for // non-strict checking of the input value. Flexible = AllowSpaceSeparator | AllowMissingTime | AllowMissingSubsecond | AllowMissingTimezone | AllowNumericTimezone ) // Valid check value to verify whether or not it is a valid iso8601 time // representation. func Valid(value string, flags ValidFlags) bool { var ok bool // year if value, ok = readDigits(value, 4, 4); !ok { return false } if value, ok = readByte(value, '-'); !ok { return false } // month if value, ok = readDigits(value, 2, 2); !ok { return false } if value, ok = readByte(value, '-'); !ok { return false } // day if value, ok = readDigits(value, 2, 2); !ok { return false } if len(value) == 0 && (flags&AllowMissingTime) != 0 { return true // date only } // separator if value, ok = readByte(value, 'T'); !ok { if (flags & AllowSpaceSeparator) == 0 { return false } if value, ok = readByte(value, ' '); !ok { return false } } // hour if value, ok = readDigits(value, 2, 2); !ok { return false } if value, ok = readByte(value, ':'); !ok { return false } // minute if value, ok = readDigits(value, 2, 2); !ok { return false } if value, ok = readByte(value, ':'); !ok { return false } // second if value, ok = readDigits(value, 2, 2); !ok { return false } // microsecond if value, ok = readByte(value, '.'); !ok { if (flags & AllowMissingSubsecond) == 0 { return false } } else { if value, ok = readDigits(value, 1, 9); !ok { return false } } if len(value) == 0 && (flags&AllowMissingTimezone) != 0 { return true // date and time } // timezone if value, ok = readByte(value, 'Z'); ok { return len(value) == 0 } if (flags & AllowSpaceSeparator) != 0 { value, _ = readByte(value, ' ') } if value, ok = readByte(value, '+'); !ok { if value, ok = readByte(value, '-'); !ok { return false } } // timezone hour if value, ok = readDigits(value, 2, 2); !ok { return false } if value, ok = readByte(value, ':'); !ok { if (flags & AllowNumericTimezone) == 0 { return false } } // timezone minute if value, ok = readDigits(value, 2, 2); !ok { return false } return len(value) == 0 } func readDigits(value string, min, max int) (string, bool) { if len(value) < min { return value, false } i := 0 for i < max && i < len(value) && isDigit(value[i]) { i++ } if i < max && i < min { return value, false } return value[i:], true } func readByte(value string, c byte) (string, bool) { if len(value) == 0 { return value, false } if value[0] != c { return value, false } return value[1:], true } func isDigit(c byte) bool { return '0' <= c && c <= '9' } golang-github-segmentio-encoding-0.5.3/iso8601/valid_test.go000066400000000000000000000107301504206176600236300ustar00rootroot00000000000000package iso8601 import ( "testing" "time" ) func TestValidate(t *testing.T) { tests := []struct { value string flags ValidFlags valid bool }{ // valid {"2018-01-01T23:42:59.123456789Z", Strict, true}, {"2018-01-01T23:42:59.123456789+07:00", Strict, true}, {"2018-01-01T23:42:59.123456789-07:00", Strict, true}, {"2018-01-01T23:42:59.000+07:00", Strict, true}, {"2018-01-01", Flexible, true}, {"2018-01-01 23:42:59", Flexible, true}, {"2018-01-01T23:42:59.123-0700", Flexible, true}, // invalid {"", Flexible, false}, // empty string {"whatever", Flexible, false}, // not a time {"2018-01-01", Strict, false}, // missing time {"2018-01-01 23:42:59-0700", Strict, false}, // missing subsecond {"2018-01-01T23:42:59.123456789+0700", Strict, false}, // don't allow numeric time zone {"2018_01-01T23:42:59.123456789Z", Strict, false}, // invalid date separator (first) {"2018-01_01T23:42:59.123456789Z", Strict, false}, // invalid date separator (second) {"2018-01-01 23:42:59.123456789Z", Strict, false}, // invalid date-time separator {"2018-01-01T23-42:59.123456789Z", Strict, false}, // invalid time separator (first) {"2018-01-01T23:42-59.123456789Z", Strict, false}, // invalid time separator (second) {"2018-01-01T23:42:59,123456789Z", Strict, false}, // invalid decimal separator {"2018-01-01T23:42:59.123456789", Strict, false}, // missing timezone {"18-01-01T23:42:59.123456789Z", Strict, false}, // 2-digit year {"2018-1-01T23:42:59.123456789Z", Strict, false}, // 1-digit month {"2018-01-1T23:42:59.123456789Z", Strict, false}, // 1-digit day {"2018-01-01T3:42:59.123456789Z", Strict, false}, // 1-digit hour {"2018-01-01T23:2:59.123456789Z", Strict, false}, // 1-digit minute {"2018-01-01T23:42:9.123456789Z", Strict, false}, // 1-digit second {"2018-01-01T23:42:59.Z", Strict, false}, // not enough subsecond digits {"2018-01-01T23:42:59.1234567890Z", Strict, false}, // too many subsecond digits {"2018-01-01T23:42:59.123456789+7:00", Strict, false}, // 1-digit timezone hour {"2018-01-01T23:42:59.123456789+07:0", Strict, false}, // 1-digit timezone minute {"2018-01-01_23:42:59", Flexible, false}, // invalid date-time separator (not a space) } for _, test := range tests { if test.valid != Valid(test.value, test.flags) { t.Errorf("%q expected Valid to return %t", test.value, test.valid) } else if test.valid { if !isIsoString(test.value) { t.Errorf("behavior mismatch, isIsoString says %q must not be a valid date", test.value) } } else if test.flags != Strict { if isIsoString(test.value) { t.Errorf("behavior mismatch, isIsoString says %q must be a valid date", test.value) } } } } func BenchmarkValidate(b *testing.B) { b.Run("success", benchmarkValidateSuccess) b.Run("failure", benchmarkValidateFailure) } func benchmarkValidateSuccess(b *testing.B) { for range b.N { if !Valid("2018-01-01T23:42:59.123456789Z", Flexible) { b.Fatal("not valid") } } } func benchmarkValidateFailure(b *testing.B) { for range b.N { if Valid("2018-01-01T23:42:59 oops!", Flexible) { b.Fatal("valid but should not") } } } func BenchmarkTimeParse(b *testing.B) { b.Run("success", benchmarkTimeParseSuccess) b.Run("failure", benchmarkTimeParseFailure) } func benchmarkTimeParseSuccess(b *testing.B) { for range b.N { if _, err := time.Parse(time.RFC3339Nano, "2018-01-01T23:42:59.123456789Z"); err != nil { b.Fatal("not valid") } } } func benchmarkTimeParseFailure(b *testing.B) { for range b.N { if _, err := time.Parse(time.RFC3339Nano, "2018-01-01T23:42:59 oops!"); err == nil { b.Fatal("valid but should not") } } } // ============================================================================= // This code is extracted from a library we had that we are replacing with this // package, we use it to verify that the behavior matches. // ============================================================================= var validDates = [...]string{ time.RFC3339Nano, time.RFC3339, "2006-01-02T15:04:05.999-0700", "2006-01-02 15:04:05", "2006-01-02", } func isIsoString(str string) bool { // Per RFC3339Nano Spec a date should never be more than 35 chars. if len(str) > 36 { return false } for _, format := range validDates { if _, err := time.Parse(format, str); err == nil { return true } } return false } golang-github-segmentio-encoding-0.5.3/json/000077500000000000000000000000001504206176600210025ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/json/README.md000066400000000000000000000064651504206176600222740ustar00rootroot00000000000000# encoding/json [![GoDoc](https://godoc.org/github.com/segmentio/encoding/json?status.svg)](https://godoc.org/github.com/segmentio/encoding/json) Go package offering a replacement implementation of the standard library's [`encoding/json`](https://golang.org/pkg/encoding/json/) package, with much better performance. ## Usage The exported API of this package mirrors the standard library's [`encoding/json`](https://golang.org/pkg/encoding/json/) package, the only change needed to take advantage of the performance improvements is the import path of the `json` package, from: ```go import ( "encoding/json" ) ``` to ```go import ( "github.com/segmentio/encoding/json" ) ``` One way to gain higher encoding throughput is to disable HTML escaping. It allows the string encoding to use a much more efficient code path which does not require parsing UTF-8 runes most of the time. ## Performance Improvements The internal implementation uses a fair amount of unsafe operations (untyped code, pointer arithmetic, etc...) to avoid using reflection as much as possible, which is often the reason why serialization code has a large CPU and memory footprint. The package aims for zero unnecessary dynamic memory allocations and hot code paths that are mostly free from calls into the reflect package. ## Compatibility with encoding/json This package aims to be a drop-in replacement, therefore it is tested to behave exactly like the standard library's package. However, there are still a few missing features that have not been ported yet: - Streaming decoder, currently the `Decoder` implementation offered by the package does not support progressively reading values from a JSON array (unlike the standard library). In our experience this is a very rare use-case, if you need it you're better off sticking to the standard library, or spend a bit of time implementing it in here ;) Note that none of those features should result in performance degradations if they were implemented in the package, and we welcome contributions! ## Trade-offs As one would expect, we had to make a couple of trade-offs to achieve greater performance than the standard library, but there were also features that we did not want to give away. Other open-source packages offering a reduced CPU and memory footprint usually do so by designing a different API, or require code generation (therefore adding complexity to the build process). These were not acceptable conditions for us, as we were not willing to trade off developer productivity for better runtime performance. To achieve this, we chose to exactly replicate the standard library interfaces and behavior, which meant the package implementation was the only area that we were able to work with. The internals of this package make heavy use of unsafe pointer arithmetics and other performance optimizations, and therefore are not as approachable as typical Go programs. Basically, we put a bigger burden on maintainers to achieve better runtime cost without sacrificing developer productivity. For these reasons, we also don't believe that this code should be ported upstream to the standard `encoding/json` package. The standard library has to remain readable and approachable to maximize stability and maintainability, and make projects like this one possible because a high quality reference implementation already exists. golang-github-segmentio-encoding-0.5.3/json/bugs/000077500000000000000000000000001504206176600217425ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/json/bugs/issue11/000077500000000000000000000000001504206176600232345ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/json/bugs/issue11/main_test.go000066400000000000000000000004541504206176600255510ustar00rootroot00000000000000package main import ( "fmt" "log" "testing" "github.com/segmentio/encoding/json" ) func TestIssue11(t *testing.T) { m := map[string]map[string]any{ "outerkey": { "innerkey": "innervalue", }, } b, err := json.Marshal(m) if err != nil { log.Fatal(err) } fmt.Println(string(b)) } golang-github-segmentio-encoding-0.5.3/json/bugs/issue136/000077500000000000000000000000001504206176600233245ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/json/bugs/issue136/main_test.go000066400000000000000000000005361504206176600256420ustar00rootroot00000000000000package main import ( "bytes" "testing" "github.com/segmentio/encoding/json" ) func TestIssue136(t *testing.T) { input := json.RawMessage(` null`) got, err := json.Marshal(input) if err != nil { t.Fatal(err) } want := bytes.TrimSpace(input) if !bytes.Equal(got, want) { t.Fatalf("Marshal(%q) = %q, want %q", input, got, want) } } golang-github-segmentio-encoding-0.5.3/json/bugs/issue18/000077500000000000000000000000001504206176600232435ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/json/bugs/issue18/main_test.go000066400000000000000000000004611504206176600255560ustar00rootroot00000000000000package main import ( "bytes" "fmt" "testing" "github.com/segmentio/encoding/json" ) func TestIssue18(t *testing.T) { b := []byte(`{ "userId": "blah", }`) d := json.NewDecoder(bytes.NewReader(b)) var a struct { UserId string `json:"userId"` } fmt.Println(d.Decode(&a)) fmt.Println(a) } golang-github-segmentio-encoding-0.5.3/json/bugs/issue84/000077500000000000000000000000001504206176600232465ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/json/bugs/issue84/main_test.go000066400000000000000000000004051504206176600255570ustar00rootroot00000000000000package main import ( "testing" "github.com/segmentio/encoding/json" ) type Foo struct { Source struct { Table string } } func TestUnmarshal(t *testing.T) { input := []byte(`{"source": {"table": "1234567"}}`) r := &Foo{} json.Unmarshal(input, r) } golang-github-segmentio-encoding-0.5.3/json/codec.go000066400000000000000000001013051504206176600224060ustar00rootroot00000000000000package json import ( "encoding" "encoding/json" "fmt" "maps" "math/big" "reflect" "sort" "strconv" "strings" "sync/atomic" "time" "unicode" "unsafe" "github.com/segmentio/asm/keyset" ) const ( // 1000 is the value used by the standard encoding/json package. // // https://cs.opensource.google/go/go/+/refs/tags/go1.17.3:src/encoding/json/encode.go;drc=refs%2Ftags%2Fgo1.17.3;l=300 startDetectingCyclesAfter = 1000 ) type codec struct { encode encodeFunc decode decodeFunc } type encoder struct { flags AppendFlags // ptrDepth tracks the depth of pointer cycles, when it reaches the value // of startDetectingCyclesAfter, the ptrSeen map is allocated and the // encoder starts tracking pointers it has seen as an attempt to detect // whether it has entered a pointer cycle and needs to error before the // goroutine runs out of stack space. ptrDepth uint32 ptrSeen map[unsafe.Pointer]struct{} } type decoder struct { flags ParseFlags } type ( encodeFunc func(encoder, []byte, unsafe.Pointer) ([]byte, error) decodeFunc func(decoder, []byte, unsafe.Pointer) ([]byte, error) ) type ( emptyFunc func(unsafe.Pointer) bool sortFunc func([]reflect.Value) ) // Eventually consistent cache mapping go types to dynamically generated // codecs. // // Note: using a uintptr as key instead of reflect.Type shaved ~15ns off of // the ~30ns Marhsal/Unmarshal functions which were dominated by the map // lookup time for simple types like bool, int, etc.. var cache atomic.Pointer[map[unsafe.Pointer]codec] func cacheLoad() map[unsafe.Pointer]codec { p := cache.Load() if p == nil { return nil } return *p } func cacheStore(typ reflect.Type, cod codec, oldCodecs map[unsafe.Pointer]codec) { newCodecs := make(map[unsafe.Pointer]codec, len(oldCodecs)+1) maps.Copy(newCodecs, oldCodecs) newCodecs[typeid(typ)] = cod cache.Store(&newCodecs) } func typeid(t reflect.Type) unsafe.Pointer { return (*iface)(unsafe.Pointer(&t)).ptr } func constructCachedCodec(t reflect.Type, cache map[unsafe.Pointer]codec) codec { c := constructCodec(t, map[reflect.Type]*structType{}, t.Kind() == reflect.Ptr) if inlined(t) { c.encode = constructInlineValueEncodeFunc(c.encode) } cacheStore(t, c, cache) return c } func constructCodec(t reflect.Type, seen map[reflect.Type]*structType, canAddr bool) (c codec) { switch t { case nullType, nil: c = codec{encode: encoder.encodeNull, decode: decoder.decodeNull} case numberType: c = codec{encode: encoder.encodeNumber, decode: decoder.decodeNumber} case bytesType: c = codec{encode: encoder.encodeBytes, decode: decoder.decodeBytes} case durationType: c = codec{encode: encoder.encodeDuration, decode: decoder.decodeDuration} case timeType: c = codec{encode: encoder.encodeTime, decode: decoder.decodeTime} case interfaceType: c = codec{encode: encoder.encodeInterface, decode: decoder.decodeInterface} case rawMessageType: c = codec{encode: encoder.encodeRawMessage, decode: decoder.decodeRawMessage} case numberPtrType: c = constructPointerCodec(numberPtrType, nil) case durationPtrType: c = constructPointerCodec(durationPtrType, nil) case timePtrType: c = constructPointerCodec(timePtrType, nil) case rawMessagePtrType: c = constructPointerCodec(rawMessagePtrType, nil) } if c.encode != nil { return } switch t.Kind() { case reflect.Bool: c = codec{encode: encoder.encodeBool, decode: decoder.decodeBool} case reflect.Int: c = codec{encode: encoder.encodeInt, decode: decoder.decodeInt} case reflect.Int8: c = codec{encode: encoder.encodeInt8, decode: decoder.decodeInt8} case reflect.Int16: c = codec{encode: encoder.encodeInt16, decode: decoder.decodeInt16} case reflect.Int32: c = codec{encode: encoder.encodeInt32, decode: decoder.decodeInt32} case reflect.Int64: c = codec{encode: encoder.encodeInt64, decode: decoder.decodeInt64} case reflect.Uint: c = codec{encode: encoder.encodeUint, decode: decoder.decodeUint} case reflect.Uintptr: c = codec{encode: encoder.encodeUintptr, decode: decoder.decodeUintptr} case reflect.Uint8: c = codec{encode: encoder.encodeUint8, decode: decoder.decodeUint8} case reflect.Uint16: c = codec{encode: encoder.encodeUint16, decode: decoder.decodeUint16} case reflect.Uint32: c = codec{encode: encoder.encodeUint32, decode: decoder.decodeUint32} case reflect.Uint64: c = codec{encode: encoder.encodeUint64, decode: decoder.decodeUint64} case reflect.Float32: c = codec{encode: encoder.encodeFloat32, decode: decoder.decodeFloat32} case reflect.Float64: c = codec{encode: encoder.encodeFloat64, decode: decoder.decodeFloat64} case reflect.String: c = codec{encode: encoder.encodeString, decode: decoder.decodeString} case reflect.Interface: c = constructInterfaceCodec(t) case reflect.Array: c = constructArrayCodec(t, seen, canAddr) case reflect.Slice: c = constructSliceCodec(t, seen) case reflect.Map: c = constructMapCodec(t, seen) case reflect.Struct: c = constructStructCodec(t, seen, canAddr) case reflect.Ptr: c = constructPointerCodec(t, seen) default: c = constructUnsupportedTypeCodec(t) } p := reflect.PointerTo(t) if canAddr { switch { case p.Implements(jsonMarshalerType): c.encode = constructJSONMarshalerEncodeFunc(t, true) case p.Implements(textMarshalerType): c.encode = constructTextMarshalerEncodeFunc(t, true) } } switch { case t.Implements(jsonMarshalerType): c.encode = constructJSONMarshalerEncodeFunc(t, false) case t.Implements(textMarshalerType): c.encode = constructTextMarshalerEncodeFunc(t, false) } switch { case p.Implements(jsonUnmarshalerType): c.decode = constructJSONUnmarshalerDecodeFunc(t, true) case p.Implements(textUnmarshalerType): c.decode = constructTextUnmarshalerDecodeFunc(t, true) } return } func constructStringCodec(t reflect.Type, seen map[reflect.Type]*structType, canAddr bool) codec { c := constructCodec(t, seen, canAddr) return codec{ encode: constructStringEncodeFunc(c.encode), decode: constructStringDecodeFunc(c.decode), } } func constructStringEncodeFunc(encode encodeFunc) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeToString(b, p, encode) } } func constructStringDecodeFunc(decode decodeFunc) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeFromString(b, p, decode) } } func constructStringToIntDecodeFunc(t reflect.Type, decode decodeFunc) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeFromStringToInt(b, p, t, decode) } } func constructArrayCodec(t reflect.Type, seen map[reflect.Type]*structType, canAddr bool) codec { e := t.Elem() c := constructCodec(e, seen, canAddr) s := alignedSize(e) return codec{ encode: constructArrayEncodeFunc(s, t, c.encode), decode: constructArrayDecodeFunc(s, t, c.decode), } } func constructArrayEncodeFunc(size uintptr, t reflect.Type, encode encodeFunc) encodeFunc { n := t.Len() return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeArray(b, p, n, size, t, encode) } } func constructArrayDecodeFunc(size uintptr, t reflect.Type, decode decodeFunc) decodeFunc { n := t.Len() return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeArray(b, p, n, size, t, decode) } } func constructSliceCodec(t reflect.Type, seen map[reflect.Type]*structType) codec { e := t.Elem() s := alignedSize(e) if e.Kind() == reflect.Uint8 { // Go 1.7+ behavior: slices of byte types (and aliases) may override the // default encoding and decoding behaviors by implementing marshaler and // unmarshaler interfaces. p := reflect.PointerTo(e) c := codec{} switch { case e.Implements(jsonMarshalerType): c.encode = constructJSONMarshalerEncodeFunc(e, false) case e.Implements(textMarshalerType): c.encode = constructTextMarshalerEncodeFunc(e, false) case p.Implements(jsonMarshalerType): c.encode = constructJSONMarshalerEncodeFunc(e, true) case p.Implements(textMarshalerType): c.encode = constructTextMarshalerEncodeFunc(e, true) } switch { case e.Implements(jsonUnmarshalerType): c.decode = constructJSONUnmarshalerDecodeFunc(e, false) case e.Implements(textUnmarshalerType): c.decode = constructTextUnmarshalerDecodeFunc(e, false) case p.Implements(jsonUnmarshalerType): c.decode = constructJSONUnmarshalerDecodeFunc(e, true) case p.Implements(textUnmarshalerType): c.decode = constructTextUnmarshalerDecodeFunc(e, true) } if c.encode != nil { c.encode = constructSliceEncodeFunc(s, t, c.encode) } else { c.encode = encoder.encodeBytes } if c.decode != nil { c.decode = constructSliceDecodeFunc(s, t, c.decode) } else { c.decode = decoder.decodeBytes } return c } c := constructCodec(e, seen, true) return codec{ encode: constructSliceEncodeFunc(s, t, c.encode), decode: constructSliceDecodeFunc(s, t, c.decode), } } func constructSliceEncodeFunc(size uintptr, t reflect.Type, encode encodeFunc) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeSlice(b, p, size, t, encode) } } func constructSliceDecodeFunc(size uintptr, t reflect.Type, decode decodeFunc) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeSlice(b, p, size, t, decode) } } func constructMapCodec(t reflect.Type, seen map[reflect.Type]*structType) codec { var sortKeys sortFunc k := t.Key() v := t.Elem() // Faster implementations for some common cases. switch { case k == stringType && v == interfaceType: return codec{ encode: encoder.encodeMapStringInterface, decode: decoder.decodeMapStringInterface, } case k == stringType && v == rawMessageType: return codec{ encode: encoder.encodeMapStringRawMessage, decode: decoder.decodeMapStringRawMessage, } case k == stringType && v == stringType: return codec{ encode: encoder.encodeMapStringString, decode: decoder.decodeMapStringString, } case k == stringType && v == stringsType: return codec{ encode: encoder.encodeMapStringStringSlice, decode: decoder.decodeMapStringStringSlice, } case k == stringType && v == boolType: return codec{ encode: encoder.encodeMapStringBool, decode: decoder.decodeMapStringBool, } } kc := codec{} vc := constructCodec(v, seen, false) if k.Implements(textMarshalerType) || reflect.PointerTo(k).Implements(textUnmarshalerType) { kc.encode = constructTextMarshalerEncodeFunc(k, false) kc.decode = constructTextUnmarshalerDecodeFunc(k, true) sortKeys = func(keys []reflect.Value) { sort.Slice(keys, func(i, j int) bool { // This is a performance abomination but the use case is rare // enough that it shouldn't be a problem in practice. k1, _ := keys[i].Interface().(encoding.TextMarshaler).MarshalText() k2, _ := keys[j].Interface().(encoding.TextMarshaler).MarshalText() return string(k1) < string(k2) }) } } else { switch k.Kind() { case reflect.String: kc.encode = encoder.encodeString kc.decode = decoder.decodeString sortKeys = func(keys []reflect.Value) { sort.Slice(keys, func(i, j int) bool { return keys[i].String() < keys[j].String() }) } case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: kc = constructStringCodec(k, seen, false) sortKeys = func(keys []reflect.Value) { sort.Slice(keys, func(i, j int) bool { return intStringsAreSorted(keys[i].Int(), keys[j].Int()) }) } case reflect.Uint, reflect.Uintptr, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: kc = constructStringCodec(k, seen, false) sortKeys = func(keys []reflect.Value) { sort.Slice(keys, func(i, j int) bool { return uintStringsAreSorted(keys[i].Uint(), keys[j].Uint()) }) } default: return constructUnsupportedTypeCodec(t) } } if inlined(v) { vc.encode = constructInlineValueEncodeFunc(vc.encode) } return codec{ encode: constructMapEncodeFunc(t, kc.encode, vc.encode, sortKeys), decode: constructMapDecodeFunc(t, kc.decode, vc.decode), } } func constructMapEncodeFunc(t reflect.Type, encodeKey, encodeValue encodeFunc, sortKeys sortFunc) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeMap(b, p, t, encodeKey, encodeValue, sortKeys) } } func constructMapDecodeFunc(t reflect.Type, decodeKey, decodeValue decodeFunc) decodeFunc { kt := t.Key() vt := t.Elem() kz := reflect.Zero(kt) vz := reflect.Zero(vt) return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeMap(b, p, t, kt, vt, kz, vz, decodeKey, decodeValue) } } func constructStructCodec(t reflect.Type, seen map[reflect.Type]*structType, canAddr bool) codec { st := constructStructType(t, seen, canAddr) return codec{ encode: constructStructEncodeFunc(st), decode: constructStructDecodeFunc(st), } } func constructStructType(t reflect.Type, seen map[reflect.Type]*structType, canAddr bool) *structType { // Used for preventing infinite recursion on types that have pointers to // themselves. st := seen[t] if st == nil { st = &structType{ fields: make([]structField, 0, t.NumField()), fieldsIndex: make(map[string]*structField), ficaseIndex: make(map[string]*structField), typ: t, } seen[t] = st st.fields = appendStructFields(st.fields, t, 0, seen, canAddr) for i := range st.fields { f := &st.fields[i] s := strings.ToLower(f.name) st.fieldsIndex[f.name] = f // When there is ambiguity because multiple fields have the same // case-insensitive representation, the first field must win. if _, exists := st.ficaseIndex[s]; !exists { st.ficaseIndex[s] = f } } // At a certain point the linear scan provided by keyset is less // efficient than a map. The 32 was chosen based on benchmarks in the // segmentio/asm repo run with an Intel Kaby Lake processor and go1.17. if len(st.fields) <= 32 { keys := make([][]byte, len(st.fields)) for i, f := range st.fields { keys[i] = []byte(f.name) } st.keyset = keyset.New(keys) } } return st } func constructStructEncodeFunc(st *structType) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeStruct(b, p, st) } } func constructStructDecodeFunc(st *structType) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeStruct(b, p, st) } } func constructEmbeddedStructPointerCodec(t reflect.Type, unexported bool, offset uintptr, field codec) codec { return codec{ encode: constructEmbeddedStructPointerEncodeFunc(t, unexported, offset, field.encode), decode: constructEmbeddedStructPointerDecodeFunc(t, unexported, offset, field.decode), } } func constructEmbeddedStructPointerEncodeFunc(t reflect.Type, unexported bool, offset uintptr, encode encodeFunc) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeEmbeddedStructPointer(b, p, t, unexported, offset, encode) } } func constructEmbeddedStructPointerDecodeFunc(t reflect.Type, unexported bool, offset uintptr, decode decodeFunc) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeEmbeddedStructPointer(b, p, t, unexported, offset, decode) } } func appendStructFields(fields []structField, t reflect.Type, offset uintptr, seen map[reflect.Type]*structType, canAddr bool) []structField { type embeddedField struct { index int offset uintptr pointer bool unexported bool subtype *structType subfield *structField } names := make(map[string]struct{}) embedded := make([]embeddedField, 0, 10) for i := range t.NumField() { f := t.Field(i) var ( name = f.Name anonymous = f.Anonymous tag = false omitempty = false stringify = false unexported = len(f.PkgPath) != 0 ) if unexported && !anonymous { // unexported continue } if parts := strings.Split(f.Tag.Get("json"), ","); len(parts) != 0 { if len(parts[0]) != 0 { name, tag = parts[0], true } if name == "-" && len(parts) == 1 { // ignored continue } if !isValidTag(name) { name = f.Name } for _, tag := range parts[1:] { switch tag { case "omitempty": omitempty = true case "string": stringify = true } } } if anonymous && !tag { // embedded typ := f.Type ptr := f.Type.Kind() == reflect.Ptr if ptr { typ = f.Type.Elem() } if typ.Kind() == reflect.Struct { // When the embedded fields is inlined the fields can be looked // up by offset from the address of the wrapping object, so we // simply add the embedded struct fields to the list of fields // of the current struct type. subtype := constructStructType(typ, seen, canAddr) for j := range subtype.fields { embedded = append(embedded, embeddedField{ index: i<<32 | j, offset: offset + f.Offset, pointer: ptr, unexported: unexported, subtype: subtype, subfield: &subtype.fields[j], }) } continue } if unexported { // ignore unexported non-struct types continue } } codec := constructCodec(f.Type, seen, canAddr) if stringify { // https://golang.org/pkg/encoding/json/#Marshal // // The "string" option signals that a field is stored as JSON inside // a JSON-encoded string. It applies only to fields of string, // floating point, integer, or boolean types. This extra level of // encoding is sometimes used when communicating with JavaScript // programs: typ := f.Type if typ.Kind() == reflect.Ptr { typ = typ.Elem() } switch typ.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uintptr, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: codec.encode = constructStringEncodeFunc(codec.encode) codec.decode = constructStringToIntDecodeFunc(typ, codec.decode) case reflect.Bool, reflect.Float32, reflect.Float64, reflect.String: codec.encode = constructStringEncodeFunc(codec.encode) codec.decode = constructStringDecodeFunc(codec.decode) } } fields = append(fields, structField{ codec: codec, offset: offset + f.Offset, empty: emptyFuncOf(f.Type), tag: tag, omitempty: omitempty, name: name, index: i << 32, typ: f.Type, zero: reflect.Zero(f.Type), }) names[name] = struct{}{} } // Only unambiguous embedded fields must be serialized. ambiguousNames := make(map[string]int) ambiguousTags := make(map[string]int) // Embedded types can never override a field that was already present at // the top-level. for name := range names { ambiguousNames[name]++ ambiguousTags[name]++ } for _, embfield := range embedded { ambiguousNames[embfield.subfield.name]++ if embfield.subfield.tag { ambiguousTags[embfield.subfield.name]++ } } for _, embfield := range embedded { subfield := *embfield.subfield if ambiguousNames[subfield.name] > 1 && (!subfield.tag || ambiguousTags[subfield.name] != 1) { continue // ambiguous embedded field } if embfield.pointer { subfield.codec = constructEmbeddedStructPointerCodec(embfield.subtype.typ, embfield.unexported, subfield.offset, subfield.codec) subfield.offset = embfield.offset } else { subfield.offset += embfield.offset } // To prevent dominant flags more than one level below the embedded one. subfield.tag = false // To ensure the order of the fields in the output is the same is in the // struct type. subfield.index = embfield.index fields = append(fields, subfield) } for i := range fields { name := fields[i].name fields[i].json = encodeKeyFragment(name, 0) fields[i].html = encodeKeyFragment(name, EscapeHTML) } sort.Slice(fields, func(i, j int) bool { return fields[i].index < fields[j].index }) return fields } func encodeKeyFragment(s string, flags AppendFlags) string { b := make([]byte, 1, len(s)+4) b[0] = ',' e := encoder{flags: flags} b, _ = e.encodeString(b, unsafe.Pointer(&s)) b = append(b, ':') return *(*string)(unsafe.Pointer(&b)) } func constructPointerCodec(t reflect.Type, seen map[reflect.Type]*structType) codec { e := t.Elem() c := constructCodec(e, seen, true) return codec{ encode: constructPointerEncodeFunc(e, c.encode), decode: constructPointerDecodeFunc(e, c.decode), } } func constructPointerEncodeFunc(t reflect.Type, encode encodeFunc) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodePointer(b, p, t, encode) } } func constructPointerDecodeFunc(t reflect.Type, decode decodeFunc) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodePointer(b, p, t, decode) } } func constructInterfaceCodec(t reflect.Type) codec { return codec{ encode: constructMaybeEmptyInterfaceEncoderFunc(t), decode: constructMaybeEmptyInterfaceDecoderFunc(t), } } func constructMaybeEmptyInterfaceEncoderFunc(t reflect.Type) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeMaybeEmptyInterface(b, p, t) } } func constructMaybeEmptyInterfaceDecoderFunc(t reflect.Type) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeMaybeEmptyInterface(b, p, t) } } func constructUnsupportedTypeCodec(t reflect.Type) codec { return codec{ encode: constructUnsupportedTypeEncodeFunc(t), decode: constructUnsupportedTypeDecodeFunc(t), } } func constructUnsupportedTypeEncodeFunc(t reflect.Type) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeUnsupportedTypeError(b, p, t) } } func constructUnsupportedTypeDecodeFunc(t reflect.Type) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeUnmarshalTypeError(b, p, t) } } func constructJSONMarshalerEncodeFunc(t reflect.Type, pointer bool) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeJSONMarshaler(b, p, t, pointer) } } func constructJSONUnmarshalerDecodeFunc(t reflect.Type, pointer bool) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeJSONUnmarshaler(b, p, t, pointer) } } func constructTextMarshalerEncodeFunc(t reflect.Type, pointer bool) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeTextMarshaler(b, p, t, pointer) } } func constructTextUnmarshalerDecodeFunc(t reflect.Type, pointer bool) decodeFunc { return func(d decoder, b []byte, p unsafe.Pointer) ([]byte, error) { return d.decodeTextUnmarshaler(b, p, t, pointer) } } func constructInlineValueEncodeFunc(encode encodeFunc) encodeFunc { return func(e encoder, b []byte, p unsafe.Pointer) ([]byte, error) { return encode(e, b, noescape(unsafe.Pointer(&p))) } } // noescape hides a pointer from escape analysis. noescape is // the identity function but escape analysis doesn't think the // output depends on the input. noescape is inlined and currently // compiles down to zero instructions. // USE CAREFULLY! // This was copied from the runtime; see issues 23382 and 7921. // //go:nosplit func noescape(p unsafe.Pointer) unsafe.Pointer { x := uintptr(p) return unsafe.Pointer(x ^ 0) } func alignedSize(t reflect.Type) uintptr { a := t.Align() s := t.Size() return align(uintptr(a), uintptr(s)) } func align(align, size uintptr) uintptr { if align != 0 && (size%align) != 0 { size = ((size / align) + 1) * align } return size } func inlined(t reflect.Type) bool { switch t.Kind() { case reflect.Ptr: return true case reflect.Map: return true case reflect.Struct: return t.NumField() == 1 && inlined(t.Field(0).Type) default: return false } } func isValidTag(s string) bool { if s == "" { return false } for _, c := range s { switch { case strings.ContainsRune("!#$%&()*+-./:;<=>?@[]^_{|}~ ", c): // Backslash and quote chars are reserved, but // otherwise any punctuation chars are allowed // in a tag name. default: if !unicode.IsLetter(c) && !unicode.IsDigit(c) { return false } } } return true } func emptyFuncOf(t reflect.Type) emptyFunc { switch t { case bytesType, rawMessageType: return func(p unsafe.Pointer) bool { return (*slice)(p).len == 0 } } switch t.Kind() { case reflect.Array: if t.Len() == 0 { return func(unsafe.Pointer) bool { return true } } case reflect.Map: return func(p unsafe.Pointer) bool { return reflect.NewAt(t, p).Elem().Len() == 0 } case reflect.Slice: return func(p unsafe.Pointer) bool { return (*slice)(p).len == 0 } case reflect.String: return func(p unsafe.Pointer) bool { return len(*(*string)(p)) == 0 } case reflect.Bool: return func(p unsafe.Pointer) bool { return !*(*bool)(p) } case reflect.Int, reflect.Uint: return func(p unsafe.Pointer) bool { return *(*uint)(p) == 0 } case reflect.Uintptr: return func(p unsafe.Pointer) bool { return *(*uintptr)(p) == 0 } case reflect.Int8, reflect.Uint8: return func(p unsafe.Pointer) bool { return *(*uint8)(p) == 0 } case reflect.Int16, reflect.Uint16: return func(p unsafe.Pointer) bool { return *(*uint16)(p) == 0 } case reflect.Int32, reflect.Uint32: return func(p unsafe.Pointer) bool { return *(*uint32)(p) == 0 } case reflect.Int64, reflect.Uint64: return func(p unsafe.Pointer) bool { return *(*uint64)(p) == 0 } case reflect.Float32: return func(p unsafe.Pointer) bool { return *(*float32)(p) == 0 } case reflect.Float64: return func(p unsafe.Pointer) bool { return *(*float64)(p) == 0 } case reflect.Ptr: return func(p unsafe.Pointer) bool { return *(*unsafe.Pointer)(p) == nil } case reflect.Interface: return func(p unsafe.Pointer) bool { return (*iface)(p).ptr == nil } } return func(unsafe.Pointer) bool { return false } } type iface struct { typ unsafe.Pointer ptr unsafe.Pointer } type slice struct { data unsafe.Pointer len int cap int } type structType struct { fields []structField fieldsIndex map[string]*structField ficaseIndex map[string]*structField keyset []byte typ reflect.Type } type structField struct { codec codec offset uintptr empty emptyFunc tag bool omitempty bool json string html string name string typ reflect.Type zero reflect.Value index int } func unmarshalTypeError(b []byte, t reflect.Type) error { return &UnmarshalTypeError{Value: strconv.Quote(prefix(b)), Type: t} } func unmarshalOverflow(b []byte, t reflect.Type) error { return &UnmarshalTypeError{Value: "number " + prefix(b) + " overflows", Type: t} } func unexpectedEOF(b []byte) error { return syntaxError(b, "unexpected end of JSON input") } var syntaxErrorMsgOffset = ^uintptr(0) func init() { t := reflect.TypeOf(SyntaxError{}) for i := range t.NumField() { if f := t.Field(i); f.Type.Kind() == reflect.String { syntaxErrorMsgOffset = f.Offset } } } func syntaxError(b []byte, msg string, args ...any) error { e := new(SyntaxError) i := syntaxErrorMsgOffset if i != ^uintptr(0) { s := "json: " + fmt.Sprintf(msg, args...) + ": " + prefix(b) p := unsafe.Pointer(e) // Hack to set the unexported `msg` field. *(*string)(unsafe.Pointer(uintptr(p) + i)) = s } return e } func objectKeyError(b []byte, err error) ([]byte, error) { if len(b) == 0 { return nil, unexpectedEOF(b) } switch err.(type) { case *UnmarshalTypeError: err = syntaxError(b, "invalid character '%c' looking for beginning of object key", b[0]) } return b, err } func prefix(b []byte) string { if len(b) < 32 { return string(b) } return string(b[:32]) + "..." } func intStringsAreSorted(i0, i1 int64) bool { var b0, b1 [32]byte return string(strconv.AppendInt(b0[:0], i0, 10)) < string(strconv.AppendInt(b1[:0], i1, 10)) } func uintStringsAreSorted(u0, u1 uint64) bool { var b0, b1 [32]byte return string(strconv.AppendUint(b0[:0], u0, 10)) < string(strconv.AppendUint(b1[:0], u1, 10)) } func stringToBytes(s string) []byte { return *(*[]byte)(unsafe.Pointer(&sliceHeader{ Data: *(*unsafe.Pointer)(unsafe.Pointer(&s)), Len: len(s), Cap: len(s), })) } type sliceHeader struct { Data unsafe.Pointer Len int Cap int } var ( nullType = reflect.TypeOf(nil) boolType = reflect.TypeOf(false) intType = reflect.TypeOf(int(0)) int8Type = reflect.TypeOf(int8(0)) int16Type = reflect.TypeOf(int16(0)) int32Type = reflect.TypeOf(int32(0)) int64Type = reflect.TypeOf(int64(0)) uintType = reflect.TypeOf(uint(0)) uint8Type = reflect.TypeOf(uint8(0)) uint16Type = reflect.TypeOf(uint16(0)) uint32Type = reflect.TypeOf(uint32(0)) uint64Type = reflect.TypeOf(uint64(0)) uintptrType = reflect.TypeOf(uintptr(0)) float32Type = reflect.TypeOf(float32(0)) float64Type = reflect.TypeOf(float64(0)) bigIntType = reflect.TypeOf(new(big.Int)) numberType = reflect.TypeOf(json.Number("")) stringType = reflect.TypeOf("") stringsType = reflect.TypeOf([]string(nil)) bytesType = reflect.TypeOf(([]byte)(nil)) durationType = reflect.TypeOf(time.Duration(0)) timeType = reflect.TypeOf(time.Time{}) rawMessageType = reflect.TypeOf(RawMessage(nil)) numberPtrType = reflect.PointerTo(numberType) durationPtrType = reflect.PointerTo(durationType) timePtrType = reflect.PointerTo(timeType) rawMessagePtrType = reflect.PointerTo(rawMessageType) sliceInterfaceType = reflect.TypeOf(([]any)(nil)) sliceStringType = reflect.TypeOf(([]any)(nil)) mapStringInterfaceType = reflect.TypeOf((map[string]any)(nil)) mapStringRawMessageType = reflect.TypeOf((map[string]RawMessage)(nil)) mapStringStringType = reflect.TypeOf((map[string]string)(nil)) mapStringStringSliceType = reflect.TypeOf((map[string][]string)(nil)) mapStringBoolType = reflect.TypeOf((map[string]bool)(nil)) interfaceType = reflect.TypeOf((*any)(nil)).Elem() jsonMarshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() jsonUnmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem() textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() bigIntDecoder = constructJSONUnmarshalerDecodeFunc(bigIntType, false) ) // ============================================================================= // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // appendDuration appends a human-readable representation of d to b. // // The function copies the implementation of time.Duration.String but prevents // Go from making a dynamic memory allocation on the returned value. func appendDuration(b []byte, d time.Duration) []byte { // Largest time is 2540400h10m10.000000000s var buf [32]byte w := len(buf) u := uint64(d) neg := d < 0 if neg { u = -u } if u < uint64(time.Second) { // Special case: if duration is smaller than a second, // use smaller units, like 1.2ms var prec int w-- buf[w] = 's' w-- switch { case u == 0: return append(b, '0', 's') case u < uint64(time.Microsecond): // print nanoseconds prec = 0 buf[w] = 'n' case u < uint64(time.Millisecond): // print microseconds prec = 3 // U+00B5 'µ' micro sign == 0xC2 0xB5 w-- // Need room for two bytes. copy(buf[w:], "µ") default: // print milliseconds prec = 6 buf[w] = 'm' } w, u = fmtFrac(buf[:w], u, prec) w = fmtInt(buf[:w], u) } else { w-- buf[w] = 's' w, u = fmtFrac(buf[:w], u, 9) // u is now integer seconds w = fmtInt(buf[:w], u%60) u /= 60 // u is now integer minutes if u > 0 { w-- buf[w] = 'm' w = fmtInt(buf[:w], u%60) u /= 60 // u is now integer hours // Stop at hours because days can be different lengths. if u > 0 { w-- buf[w] = 'h' w = fmtInt(buf[:w], u) } } } if neg { w-- buf[w] = '-' } return append(b, buf[w:]...) } // fmtFrac formats the fraction of v/10**prec (e.g., ".12345") into the // tail of buf, omitting trailing zeros. it omits the decimal // point too when the fraction is 0. It returns the index where the // output bytes begin and the value v/10**prec. func fmtFrac(buf []byte, v uint64, prec int) (nw int, nv uint64) { // Omit trailing zeros up to and including decimal point. w := len(buf) print := false for range prec { digit := v % 10 print = print || digit != 0 if print { w-- buf[w] = byte(digit) + '0' } v /= 10 } if print { w-- buf[w] = '.' } return w, v } // fmtInt formats v into the tail of buf. // It returns the index where the output begins. func fmtInt(buf []byte, v uint64) int { w := len(buf) if v == 0 { w-- buf[w] = '0' } else { for v > 0 { w-- buf[w] = byte(v%10) + '0' v /= 10 } } return w } // ============================================================================= golang-github-segmentio-encoding-0.5.3/json/decode.go000066400000000000000000001014431504206176600225570ustar00rootroot00000000000000package json import ( "bytes" "encoding" "encoding/json" "fmt" "math" "math/big" "reflect" "strconv" "time" "unsafe" "github.com/segmentio/asm/base64" "github.com/segmentio/asm/keyset" "github.com/segmentio/encoding/iso8601" ) func (d decoder) anyFlagsSet(flags ParseFlags) bool { return d.flags&flags != 0 } func (d decoder) decodeNull(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } return d.inputError(b, nullType) } func (d decoder) decodeBool(b []byte, p unsafe.Pointer) ([]byte, error) { switch { case hasTruePrefix(b): *(*bool)(p) = true return b[4:], nil case hasFalsePrefix(b): *(*bool)(p) = false return b[5:], nil case hasNullPrefix(b): return b[4:], nil default: return d.inputError(b, boolType) } } func (d decoder) decodeInt(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseInt(b, intType) if err != nil { return r, err } *(*int)(p) = int(v) return r, nil } func (d decoder) decodeInt8(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseInt(b, int8Type) if err != nil { return r, err } if v < math.MinInt8 || v > math.MaxInt8 { return r, unmarshalOverflow(b[:len(b)-len(r)], int8Type) } *(*int8)(p) = int8(v) return r, nil } func (d decoder) decodeInt16(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseInt(b, int16Type) if err != nil { return r, err } if v < math.MinInt16 || v > math.MaxInt16 { return r, unmarshalOverflow(b[:len(b)-len(r)], int16Type) } *(*int16)(p) = int16(v) return r, nil } func (d decoder) decodeInt32(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseInt(b, int32Type) if err != nil { return r, err } if v < math.MinInt32 || v > math.MaxInt32 { return r, unmarshalOverflow(b[:len(b)-len(r)], int32Type) } *(*int32)(p) = int32(v) return r, nil } func (d decoder) decodeInt64(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseInt(b, int64Type) if err != nil { return r, err } *(*int64)(p) = v return r, nil } func (d decoder) decodeUint(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseUint(b, uintType) if err != nil { return r, err } *(*uint)(p) = uint(v) return r, nil } func (d decoder) decodeUintptr(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseUint(b, uintptrType) if err != nil { return r, err } *(*uintptr)(p) = uintptr(v) return r, nil } func (d decoder) decodeUint8(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseUint(b, uint8Type) if err != nil { return r, err } if v > math.MaxUint8 { return r, unmarshalOverflow(b[:len(b)-len(r)], uint8Type) } *(*uint8)(p) = uint8(v) return r, nil } func (d decoder) decodeUint16(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseUint(b, uint16Type) if err != nil { return r, err } if v > math.MaxUint16 { return r, unmarshalOverflow(b[:len(b)-len(r)], uint16Type) } *(*uint16)(p) = uint16(v) return r, nil } func (d decoder) decodeUint32(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseUint(b, uint32Type) if err != nil { return r, err } if v > math.MaxUint32 { return r, unmarshalOverflow(b[:len(b)-len(r)], uint32Type) } *(*uint32)(p) = uint32(v) return r, nil } func (d decoder) decodeUint64(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, err := d.parseUint(b, uint64Type) if err != nil { return r, err } *(*uint64)(p) = v return r, nil } func (d decoder) decodeFloat32(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, _, err := d.parseNumber(b) if err != nil { return d.inputError(b, float32Type) } f, err := strconv.ParseFloat(*(*string)(unsafe.Pointer(&v)), 32) if err != nil { return d.inputError(b, float32Type) } *(*float32)(p) = float32(f) return r, nil } func (d decoder) decodeFloat64(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, _, err := d.parseNumber(b) if err != nil { return d.inputError(b, float64Type) } f, err := strconv.ParseFloat(*(*string)(unsafe.Pointer(&v)), 64) if err != nil { return d.inputError(b, float64Type) } *(*float64)(p) = f return r, nil } func (d decoder) decodeNumber(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } v, r, _, err := d.parseNumber(b) if err != nil { return d.inputError(b, numberType) } if (d.flags & DontCopyNumber) != 0 { *(*Number)(p) = *(*Number)(unsafe.Pointer(&v)) } else { *(*Number)(p) = Number(v) } return r, nil } func (d decoder) decodeString(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } s, r, new, err := d.parseStringUnquote(b, nil) if err != nil { if len(b) == 0 || b[0] != '"' { return d.inputError(b, stringType) } return r, err } if new || (d.flags&DontCopyString) != 0 { *(*string)(p) = *(*string)(unsafe.Pointer(&s)) } else { *(*string)(p) = string(s) } return r, nil } func (d decoder) decodeFromString(b []byte, p unsafe.Pointer, decode decodeFunc) ([]byte, error) { if hasNullPrefix(b) { return decode(d, b, p) } v, b, _, err := d.parseStringUnquote(b, nil) if err != nil { return d.inputError(v, stringType) } if v, err = decode(d, v, p); err != nil { return b, err } if v = skipSpaces(v); len(v) != 0 { return b, syntaxError(v, "unexpected trailing tokens after string value") } return b, nil } func (d decoder) decodeFromStringToInt(b []byte, p unsafe.Pointer, t reflect.Type, decode decodeFunc) ([]byte, error) { if hasNullPrefix(b) { return decode(d, b, p) } if len(b) > 0 && b[0] != '"' { v, r, k, err := d.parseNumber(b) if err == nil { // The encoding/json package will return a *json.UnmarshalTypeError if // the input was a floating point number representation, even tho a // string is expected here. if k == Float { _, err := strconv.ParseFloat(*(*string)(unsafe.Pointer(&v)), 64) if err != nil { return r, unmarshalTypeError(v, t) } } } return r, fmt.Errorf("json: invalid use of ,string struct tag, trying to unmarshal unquoted value into int") } if len(b) > 1 && b[0] == '"' && b[1] == '"' { return b, fmt.Errorf("json: invalid use of ,string struct tag, trying to unmarshal \"\" into int") } v, b, _, err := d.parseStringUnquote(b, nil) if err != nil { return d.inputError(v, t) } if hasLeadingZeroes(v) { // In this context the encoding/json package accepts leading zeroes because // it is not constrained by the JSON syntax, remove them so the parsing // functions don't return syntax errors. u := make([]byte, 0, len(v)) i := 0 if i < len(v) && v[i] == '-' || v[i] == '+' { u = append(u, v[i]) i++ } for (i+1) < len(v) && v[i] == '0' && '0' <= v[i+1] && v[i+1] <= '9' { i++ } v = append(u, v[i:]...) } if r, err := decode(d, v, p); err != nil { if _, isSyntaxError := err.(*SyntaxError); isSyntaxError { if hasPrefix(v, "-") { // The standard library interprets sequences of '-' characters // as numbers but still returns type errors in this case... return b, unmarshalTypeError(v, t) } return b, fmt.Errorf("json: invalid use of ,string struct tag, trying to unmarshal %q into int", prefix(v)) } // When the input value was a valid number representation we retain the // error returned by the decoder. if _, _, _, err := d.parseNumber(v); err != nil { // When the input value valid JSON we mirror the behavior of the // encoding/json package and return a generic error. if _, _, _, err := d.parseValue(v); err == nil { return b, fmt.Errorf("json: invalid use of ,string struct tag, trying to unmarshal %q into int", prefix(v)) } } return b, err } else if len(r) != 0 { return r, unmarshalTypeError(v, t) } return b, nil } func (d decoder) decodeBytes(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { *(*[]byte)(p) = nil return b[4:], nil } if len(b) < 2 { return d.inputError(b, bytesType) } if b[0] != '"' { // Go 1.7- behavior: bytes slices may be decoded from array of integers. if len(b) > 0 && b[0] == '[' { return d.decodeSlice(b, p, 1, bytesType, decoder.decodeUint8) } return d.inputError(b, bytesType) } // The input string contains escaped sequences, we need to parse it before // decoding it to match the encoding/json package behvaior. src, r, _, err := d.parseStringUnquote(b, nil) if err != nil { return d.inputError(b, bytesType) } dst := make([]byte, base64.StdEncoding.DecodedLen(len(src))) n, err := base64.StdEncoding.Decode(dst, src) if err != nil { return r, err } *(*[]byte)(p) = dst[:n] return r, nil } func (d decoder) decodeDuration(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } // in order to inter-operate with the stdlib, we must be able to interpret // durations passed as integer values. there's some discussion about being // flexible on how durations are formatted, but for the time being, it's // been punted to go2 at the earliest: https://github.com/golang/go/issues/4712 if len(b) > 0 && b[0] != '"' { v, r, err := d.parseInt(b, durationType) if err != nil { return d.inputError(b, int32Type) } if v < math.MinInt64 || v > math.MaxInt64 { return r, unmarshalOverflow(b[:len(b)-len(r)], int32Type) } *(*time.Duration)(p) = time.Duration(v) return r, nil } if len(b) < 2 || b[0] != '"' { return d.inputError(b, durationType) } i := bytes.IndexByte(b[1:], '"') + 1 if i <= 0 { return d.inputError(b, durationType) } s := b[1:i] // trim quotes v, err := time.ParseDuration(*(*string)(unsafe.Pointer(&s))) if err != nil { return d.inputError(b, durationType) } *(*time.Duration)(p) = v return b[i+1:], nil } func (d decoder) decodeTime(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } if len(b) < 2 || b[0] != '"' { return d.inputError(b, timeType) } i := bytes.IndexByte(b[1:], '"') + 1 if i <= 0 { return d.inputError(b, timeType) } s := b[1:i] // trim quotes v, err := iso8601.Parse(*(*string)(unsafe.Pointer(&s))) if err != nil { return d.inputError(b, timeType) } *(*time.Time)(p) = v return b[i+1:], nil } func (d decoder) decodeArray(b []byte, p unsafe.Pointer, n int, size uintptr, t reflect.Type, decode decodeFunc) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } if len(b) < 2 || b[0] != '[' { return d.inputError(b, t) } b = b[1:] var err error for i := range n { b = skipSpaces(b) if i != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected EOF after array element") } switch b[0] { case ',': b = skipSpaces(b[1:]) case ']': return b[1:], nil default: return b, syntaxError(b, "expected ',' after array element but found '%c'", b[0]) } } b, err = decode(d, b, unsafe.Pointer(uintptr(p)+(uintptr(i)*size))) if err != nil { if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = t.String() + e.Struct e.Field = d.prependField(strconv.Itoa(i), e.Field) } return b, err } } // The encoding/json package ignores extra elements found when decoding into // array types (which have a fixed size). for { b = skipSpaces(b) if len(b) == 0 { return b, syntaxError(b, "missing closing ']' in array value") } switch b[0] { case ',': b = skipSpaces(b[1:]) case ']': return b[1:], nil } _, b, _, err = d.parseValue(b) if err != nil { return b, err } } } // This is a placeholder used to consturct non-nil empty slices. var empty struct{} func (d decoder) decodeSlice(b []byte, p unsafe.Pointer, size uintptr, t reflect.Type, decode decodeFunc) ([]byte, error) { if hasNullPrefix(b) { *(*slice)(p) = slice{} return b[4:], nil } if len(b) < 2 { return d.inputError(b, t) } if b[0] != '[' { // Go 1.7- behavior: fallback to decoding as a []byte if the element // type is byte; allow conversions from JSON strings even tho the // underlying type implemented unmarshaler interfaces. if t.Elem().Kind() == reflect.Uint8 { return d.decodeBytes(b, p) } return d.inputError(b, t) } input := b b = b[1:] s := (*slice)(p) s.len = 0 var err error for { b = skipSpaces(b) if len(b) != 0 && b[0] == ']' { if s.data == nil { s.data = unsafe.Pointer(&empty) } return b[1:], nil } if s.len != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected EOF after array element") } if b[0] != ',' { return b, syntaxError(b, "expected ',' after array element but found '%c'", b[0]) } b = skipSpaces(b[1:]) } if s.len == s.cap { c := s.cap if c == 0 { c = 10 } else { c *= 2 } *s = extendSlice(t, s, c) } b, err = decode(d, b, unsafe.Pointer(uintptr(s.data)+(uintptr(s.len)*size))) if err != nil { if _, r, _, err := d.parseValue(input); err != nil { return r, err } else { b = r } if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = t.String() + e.Struct e.Field = d.prependField(strconv.Itoa(s.len), e.Field) } return b, err } s.len++ } } func (d decoder) decodeMap(b []byte, p unsafe.Pointer, t, kt, vt reflect.Type, kz, vz reflect.Value, decodeKey, decodeValue decodeFunc) ([]byte, error) { if hasNullPrefix(b) { *(*unsafe.Pointer)(p) = nil return b[4:], nil } if len(b) < 2 || b[0] != '{' { return d.inputError(b, t) } i := 0 m := reflect.NewAt(t, p).Elem() k := reflect.New(kt).Elem() v := reflect.New(vt).Elem() kptr := (*iface)(unsafe.Pointer(&k)).ptr vptr := (*iface)(unsafe.Pointer(&v)).ptr input := b if m.IsNil() { m = reflect.MakeMap(t) } var err error b = b[1:] for { k.Set(kz) v.Set(vz) b = skipSpaces(b) if len(b) != 0 && b[0] == '}' { *(*unsafe.Pointer)(p) = unsafe.Pointer(m.Pointer()) return b[1:], nil } if i != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field value") } if b[0] != ',' { return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) } b = skipSpaces(b[1:]) } if hasNullPrefix(b) { return b, syntaxError(b, "cannot decode object key string from 'null' value") } if b, err = decodeKey(d, b, kptr); err != nil { return objectKeyError(b, err) } b = skipSpaces(b) if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field key") } if b[0] != ':' { return b, syntaxError(b, "expected ':' after object field key but found '%c'", b[0]) } b = skipSpaces(b[1:]) if b, err = decodeValue(d, b, vptr); err != nil { if _, r, _, err := d.parseValue(input); err != nil { return r, err } else { b = r } if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = "map[" + kt.String() + "]" + vt.String() + "{" + e.Struct + "}" e.Field = d.prependField(fmt.Sprint(k.Interface()), e.Field) } return b, err } m.SetMapIndex(k, v) i++ } } func (d decoder) decodeMapStringInterface(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { *(*unsafe.Pointer)(p) = nil return b[4:], nil } if len(b) < 2 || b[0] != '{' { return d.inputError(b, mapStringInterfaceType) } i := 0 m := *(*map[string]any)(p) if m == nil { m = make(map[string]any, 64) } var ( input = b key string val any err error ) b = b[1:] for { key = "" val = nil b = skipSpaces(b) if len(b) != 0 && b[0] == '}' { *(*unsafe.Pointer)(p) = *(*unsafe.Pointer)(unsafe.Pointer(&m)) return b[1:], nil } if i != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field value") } if b[0] != ',' { return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) } b = skipSpaces(b[1:]) } if hasNullPrefix(b) { return b, syntaxError(b, "cannot decode object key string from 'null' value") } b, err = d.decodeString(b, unsafe.Pointer(&key)) if err != nil { return objectKeyError(b, err) } b = skipSpaces(b) if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field key") } if b[0] != ':' { return b, syntaxError(b, "expected ':' after object field key but found '%c'", b[0]) } b = skipSpaces(b[1:]) b, err = d.decodeInterface(b, unsafe.Pointer(&val)) if err != nil { if _, r, _, err := d.parseValue(input); err != nil { return r, err } else { b = r } if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = mapStringInterfaceType.String() + e.Struct e.Field = d.prependField(key, e.Field) } return b, err } m[key] = val i++ } } func (d decoder) decodeMapStringRawMessage(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { *(*unsafe.Pointer)(p) = nil return b[4:], nil } if len(b) < 2 || b[0] != '{' { return d.inputError(b, mapStringRawMessageType) } i := 0 m := *(*map[string]RawMessage)(p) if m == nil { m = make(map[string]RawMessage, 64) } var err error var key string var val RawMessage input := b b = b[1:] for { key = "" val = nil b = skipSpaces(b) if len(b) != 0 && b[0] == '}' { *(*unsafe.Pointer)(p) = *(*unsafe.Pointer)(unsafe.Pointer(&m)) return b[1:], nil } if i != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field value") } if b[0] != ',' { return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) } b = skipSpaces(b[1:]) } if hasNullPrefix(b) { return b, syntaxError(b, "cannot decode object key string from 'null' value") } b, err = d.decodeString(b, unsafe.Pointer(&key)) if err != nil { return objectKeyError(b, err) } b = skipSpaces(b) if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field key") } if b[0] != ':' { return b, syntaxError(b, "expected ':' after object field key but found '%c'", b[0]) } b = skipSpaces(b[1:]) b, err = d.decodeRawMessage(b, unsafe.Pointer(&val)) if err != nil { if _, r, _, err := d.parseValue(input); err != nil { return r, err } else { b = r } if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = mapStringRawMessageType.String() + e.Struct e.Field = d.prependField(key, e.Field) } return b, err } m[key] = val i++ } } func (d decoder) decodeMapStringString(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { *(*unsafe.Pointer)(p) = nil return b[4:], nil } if len(b) < 2 || b[0] != '{' { return d.inputError(b, mapStringStringType) } i := 0 m := *(*map[string]string)(p) if m == nil { m = make(map[string]string, 64) } var err error var key string var val string input := b b = b[1:] for { key = "" val = "" b = skipSpaces(b) if len(b) != 0 && b[0] == '}' { *(*unsafe.Pointer)(p) = *(*unsafe.Pointer)(unsafe.Pointer(&m)) return b[1:], nil } if i != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field value") } if b[0] != ',' { return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) } b = skipSpaces(b[1:]) } if hasNullPrefix(b) { return b, syntaxError(b, "cannot decode object key string from 'null' value") } b, err = d.decodeString(b, unsafe.Pointer(&key)) if err != nil { return objectKeyError(b, err) } b = skipSpaces(b) if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field key") } if b[0] != ':' { return b, syntaxError(b, "expected ':' after object field key but found '%c'", b[0]) } b = skipSpaces(b[1:]) b, err = d.decodeString(b, unsafe.Pointer(&val)) if err != nil { if _, r, _, err := d.parseValue(input); err != nil { return r, err } else { b = r } if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = mapStringStringType.String() + e.Struct e.Field = d.prependField(key, e.Field) } return b, err } m[key] = val i++ } } func (d decoder) decodeMapStringStringSlice(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { *(*unsafe.Pointer)(p) = nil return b[4:], nil } if len(b) < 2 || b[0] != '{' { return d.inputError(b, mapStringStringSliceType) } i := 0 m := *(*map[string][]string)(p) if m == nil { m = make(map[string][]string, 64) } var err error var key string var buf []string input := b stringSize := unsafe.Sizeof("") b = b[1:] for { key = "" buf = buf[:0] b = skipSpaces(b) if len(b) != 0 && b[0] == '}' { *(*unsafe.Pointer)(p) = *(*unsafe.Pointer)(unsafe.Pointer(&m)) return b[1:], nil } if i != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field value") } if b[0] != ',' { return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) } b = skipSpaces(b[1:]) } if hasNullPrefix(b) { return b, syntaxError(b, "cannot decode object key string from 'null' value") } b, err = d.decodeString(b, unsafe.Pointer(&key)) if err != nil { return objectKeyError(b, err) } b = skipSpaces(b) if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field key") } if b[0] != ':' { return b, syntaxError(b, "expected ':' after object field key but found '%c'", b[0]) } b = skipSpaces(b[1:]) b, err = d.decodeSlice(b, unsafe.Pointer(&buf), stringSize, sliceStringType, decoder.decodeString) if err != nil { if _, r, _, err := d.parseValue(input); err != nil { return r, err } else { b = r } if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = mapStringStringType.String() + e.Struct e.Field = d.prependField(key, e.Field) } return b, err } val := make([]string, len(buf)) copy(val, buf) m[key] = val i++ } } func (d decoder) decodeMapStringBool(b []byte, p unsafe.Pointer) ([]byte, error) { if hasNullPrefix(b) { *(*unsafe.Pointer)(p) = nil return b[4:], nil } if len(b) < 2 || b[0] != '{' { return d.inputError(b, mapStringBoolType) } i := 0 m := *(*map[string]bool)(p) if m == nil { m = make(map[string]bool, 64) } var err error var key string var val bool input := b b = b[1:] for { key = "" val = false b = skipSpaces(b) if len(b) != 0 && b[0] == '}' { *(*unsafe.Pointer)(p) = *(*unsafe.Pointer)(unsafe.Pointer(&m)) return b[1:], nil } if i != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field value") } if b[0] != ',' { return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) } b = skipSpaces(b[1:]) } if hasNullPrefix(b) { return b, syntaxError(b, "cannot decode object key string from 'null' value") } b, err = d.decodeString(b, unsafe.Pointer(&key)) if err != nil { return objectKeyError(b, err) } b = skipSpaces(b) if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field key") } if b[0] != ':' { return b, syntaxError(b, "expected ':' after object field key but found '%c'", b[0]) } b = skipSpaces(b[1:]) b, err = d.decodeBool(b, unsafe.Pointer(&val)) if err != nil { if _, r, _, err := d.parseValue(input); err != nil { return r, err } else { b = r } if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = mapStringStringType.String() + e.Struct e.Field = d.prependField(key, e.Field) } return b, err } m[key] = val i++ } } func (d decoder) decodeStruct(b []byte, p unsafe.Pointer, st *structType) ([]byte, error) { if hasNullPrefix(b) { return b[4:], nil } if len(b) < 2 || b[0] != '{' { return d.inputError(b, st.typ) } var err error var k []byte var i int // memory buffer used to convert short field names to lowercase var buf [64]byte var key []byte input := b b = b[1:] for { b = skipSpaces(b) if len(b) != 0 && b[0] == '}' { return b[1:], nil } if i != 0 { if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field value") } if b[0] != ',' { return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) } b = skipSpaces(b[1:]) } i++ if hasNullPrefix(b) { return b, syntaxError(b, "cannot decode object key string from 'null' value") } k, b, _, err = d.parseStringUnquote(b, nil) if err != nil { return objectKeyError(b, err) } b = skipSpaces(b) if len(b) == 0 { return b, syntaxError(b, "unexpected end of JSON input after object field key") } if b[0] != ':' { return b, syntaxError(b, "expected ':' after object field key but found '%c'", b[0]) } b = skipSpaces(b[1:]) var f *structField if len(st.keyset) != 0 { if n := keyset.Lookup(st.keyset, k); n < len(st.fields) { f = &st.fields[n] } } else { f = st.fieldsIndex[string(k)] } if f == nil && (d.flags&DontMatchCaseInsensitiveStructFields) == 0 { key = appendToLower(buf[:0], k) f = st.ficaseIndex[string(key)] } if f == nil { if (d.flags & DisallowUnknownFields) != 0 { return b, fmt.Errorf("json: unknown field %q", k) } if _, b, _, err = d.parseValue(b); err != nil { return b, err } continue } if b, err = f.codec.decode(d, b, unsafe.Pointer(uintptr(p)+f.offset)); err != nil { if _, r, _, err := d.parseValue(input); err != nil { return r, err } else { b = r } if e, ok := err.(*UnmarshalTypeError); ok { e.Struct = st.typ.String() + e.Struct e.Field = d.prependField(string(k), e.Field) } return b, err } } } func (d decoder) decodeEmbeddedStructPointer(b []byte, p unsafe.Pointer, t reflect.Type, unexported bool, offset uintptr, decode decodeFunc) ([]byte, error) { v := *(*unsafe.Pointer)(p) if v == nil { if unexported { return nil, fmt.Errorf("json: cannot set embedded pointer to unexported struct: %s", t) } v = unsafe.Pointer(reflect.New(t).Pointer()) *(*unsafe.Pointer)(p) = v } return decode(d, b, unsafe.Pointer(uintptr(v)+offset)) } func (d decoder) decodePointer(b []byte, p unsafe.Pointer, t reflect.Type, decode decodeFunc) ([]byte, error) { if hasNullPrefix(b) { pp := *(*unsafe.Pointer)(p) if pp != nil && t.Kind() == reflect.Ptr { return decode(d, b, pp) } *(*unsafe.Pointer)(p) = nil return b[4:], nil } v := *(*unsafe.Pointer)(p) if v == nil { v = unsafe.Pointer(reflect.New(t).Pointer()) *(*unsafe.Pointer)(p) = v } return decode(d, b, v) } func (d decoder) decodeInterface(b []byte, p unsafe.Pointer) ([]byte, error) { val := *(*any)(p) *(*any)(p) = nil if t := reflect.TypeOf(val); t != nil && t.Kind() == reflect.Ptr { if v := reflect.ValueOf(val); v.IsNil() || t.Elem().Kind() != reflect.Ptr { // If the destination is nil the only value that is OK to decode is // `null`, and the encoding/json package always nils the destination // interface value in this case. if hasNullPrefix(b) { *(*any)(p) = nil return b[4:], nil } } b, err := Parse(b, val, d.flags) if err == nil { *(*any)(p) = val } return b, err } v, b, k, err := d.parseValue(b) if err != nil { return b, err } switch k.Class() { case Object: m := make(map[string]interface{}) v, err = d.decodeMapStringInterface(v, unsafe.Pointer(&m)) val = m case Array: a := make([]interface{}, 0, 10) v, err = d.decodeSlice(v, unsafe.Pointer(&a), unsafe.Sizeof(a[0]), sliceInterfaceType, decoder.decodeInterface) val = a case String: s := "" v, err = d.decodeString(v, unsafe.Pointer(&s)) val = s case Null: v, val = nil, nil case Bool: v, val = nil, k == True case Num: v, err = d.decodeDynamicNumber(v, unsafe.Pointer(&val)) default: return b, syntaxError(v, "expected token but found '%c'", v[0]) } if err != nil { return b, err } if v = skipSpaces(v); len(v) != 0 { return b, syntaxError(v, "unexpected trailing trailing tokens after json value") } *(*any)(p) = val return b, nil } func (d decoder) decodeDynamicNumber(b []byte, p unsafe.Pointer) ([]byte, error) { kind := Float var err error // Only pre-parse for numeric kind if a conditional decode // has been requested. if d.anyFlagsSet(UseBigInt | UseInt64 | UseUint64) { _, _, kind, err = d.parseNumber(b) if err != nil { return b, err } } var rem []byte anyPtr := (*any)(p) // Mutually exclusive integer handling cases. switch { // If requested, attempt decode of positive integers as uint64. case kind == Uint && d.anyFlagsSet(UseUint64): rem, err = decodeInto[uint64](anyPtr, b, d, decoder.decodeUint64) if err == nil { return rem, err } // If uint64 decode was not requested but int64 decode was requested, // then attempt decode of positive integers as int64. case kind == Uint && d.anyFlagsSet(UseInt64): fallthrough // If int64 decode was requested, // attempt decode of negative integers as int64. case kind == Int && d.anyFlagsSet(UseInt64): rem, err = decodeInto[int64](anyPtr, b, d, decoder.decodeInt64) if err == nil { return rem, err } } // Fallback numeric handling cases: // these cannot be combined into the above switch, // since these cases also handle overflow // from the above cases, if decode was already attempted. switch { // If *big.Int decode was requested, handle that case for any integer. case kind == Uint && d.anyFlagsSet(UseBigInt): fallthrough case kind == Int && d.anyFlagsSet(UseBigInt): rem, err = decodeInto[*big.Int](anyPtr, b, d, bigIntDecoder) // If json.Number decode was requested, handle that for any number. case d.anyFlagsSet(UseNumber): rem, err = decodeInto[Number](anyPtr, b, d, decoder.decodeNumber) // Fall back to float64 decode when no special decoding has been requested. default: rem, err = decodeInto[float64](anyPtr, b, d, decoder.decodeFloat64) } return rem, err } func (d decoder) decodeMaybeEmptyInterface(b []byte, p unsafe.Pointer, t reflect.Type) ([]byte, error) { if hasNullPrefix(b) { *(*any)(p) = nil return b[4:], nil } if x := reflect.NewAt(t, p).Elem(); !x.IsNil() { if e := x.Elem(); e.Kind() == reflect.Ptr { return Parse(b, e.Interface(), d.flags) } } else if t.NumMethod() == 0 { // empty interface return Parse(b, (*any)(p), d.flags) } return d.decodeUnmarshalTypeError(b, p, t) } func (d decoder) decodeUnmarshalTypeError(b []byte, _ unsafe.Pointer, t reflect.Type) ([]byte, error) { v, b, _, err := d.parseValue(b) if err != nil { return b, err } return b, &UnmarshalTypeError{ Value: string(v), Type: t, } } func (d decoder) decodeRawMessage(b []byte, p unsafe.Pointer) ([]byte, error) { v, r, _, err := d.parseValue(b) if err != nil { return d.inputError(b, rawMessageType) } if (d.flags & DontCopyRawMessage) == 0 { v = append(make([]byte, 0, len(v)), v...) } *(*RawMessage)(p) = json.RawMessage(v) return r, err } func (d decoder) decodeJSONUnmarshaler(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool) ([]byte, error) { v, b, _, err := d.parseValue(b) if err != nil { return b, err } u := reflect.NewAt(t, p) if !pointer { u = u.Elem() t = t.Elem() } if u.IsNil() { u.Set(reflect.New(t)) } return b, u.Interface().(Unmarshaler).UnmarshalJSON(v) } func (d decoder) decodeTextUnmarshaler(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool) ([]byte, error) { var value string v, b, k, err := d.parseValue(b) if err != nil { return b, err } if len(v) == 0 { return d.inputError(v, t) } switch k.Class() { case Null: return b, err case String: s, _, _, err := d.parseStringUnquote(v, nil) if err != nil { return b, err } u := reflect.NewAt(t, p) if !pointer { u = u.Elem() t = t.Elem() } if u.IsNil() { u.Set(reflect.New(t)) } return b, u.Interface().(encoding.TextUnmarshaler).UnmarshalText(s) case Bool: if k == True { value = "true" } else { value = "false" } case Num: value = "number" case Object: value = "object" case Array: value = "array" } return b, &UnmarshalTypeError{Value: value, Type: reflect.PointerTo(t)} } func (d decoder) prependField(key, field string) string { if field != "" { return key + "." + field } return key } func (d decoder) inputError(b []byte, t reflect.Type) ([]byte, error) { if len(b) == 0 { return nil, unexpectedEOF(b) } _, r, _, err := d.parseValue(b) if err != nil { return r, err } return skipSpaces(r), unmarshalTypeError(b, t) } func decodeInto[T any](dest *any, b []byte, d decoder, fn decodeFunc) ([]byte, error) { var v T rem, err := fn(d, b, unsafe.Pointer(&v)) if err == nil { *dest = v } return rem, err } golang-github-segmentio-encoding-0.5.3/json/encode.go000066400000000000000000000501031504206176600225650ustar00rootroot00000000000000package json import ( "encoding" "fmt" "math" "reflect" "sort" "strconv" "sync" "time" "unicode/utf8" "unsafe" "github.com/segmentio/asm/base64" ) const hex = "0123456789abcdef" func (e encoder) encodeNull(b []byte, p unsafe.Pointer) ([]byte, error) { return append(b, "null"...), nil } func (e encoder) encodeBool(b []byte, p unsafe.Pointer) ([]byte, error) { if *(*bool)(p) { return append(b, "true"...), nil } return append(b, "false"...), nil } func (e encoder) encodeInt(b []byte, p unsafe.Pointer) ([]byte, error) { return appendInt(b, int64(*(*int)(p))), nil } func (e encoder) encodeInt8(b []byte, p unsafe.Pointer) ([]byte, error) { return appendInt(b, int64(*(*int8)(p))), nil } func (e encoder) encodeInt16(b []byte, p unsafe.Pointer) ([]byte, error) { return appendInt(b, int64(*(*int16)(p))), nil } func (e encoder) encodeInt32(b []byte, p unsafe.Pointer) ([]byte, error) { return appendInt(b, int64(*(*int32)(p))), nil } func (e encoder) encodeInt64(b []byte, p unsafe.Pointer) ([]byte, error) { return appendInt(b, *(*int64)(p)), nil } func (e encoder) encodeUint(b []byte, p unsafe.Pointer) ([]byte, error) { return appendUint(b, uint64(*(*uint)(p))), nil } func (e encoder) encodeUintptr(b []byte, p unsafe.Pointer) ([]byte, error) { return appendUint(b, uint64(*(*uintptr)(p))), nil } func (e encoder) encodeUint8(b []byte, p unsafe.Pointer) ([]byte, error) { return appendUint(b, uint64(*(*uint8)(p))), nil } func (e encoder) encodeUint16(b []byte, p unsafe.Pointer) ([]byte, error) { return appendUint(b, uint64(*(*uint16)(p))), nil } func (e encoder) encodeUint32(b []byte, p unsafe.Pointer) ([]byte, error) { return appendUint(b, uint64(*(*uint32)(p))), nil } func (e encoder) encodeUint64(b []byte, p unsafe.Pointer) ([]byte, error) { return appendUint(b, *(*uint64)(p)), nil } func (e encoder) encodeFloat32(b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeFloat(b, float64(*(*float32)(p)), 32) } func (e encoder) encodeFloat64(b []byte, p unsafe.Pointer) ([]byte, error) { return e.encodeFloat(b, *(*float64)(p), 64) } func (e encoder) encodeFloat(b []byte, f float64, bits int) ([]byte, error) { switch { case math.IsNaN(f): return b, &UnsupportedValueError{Value: reflect.ValueOf(f), Str: "NaN"} case math.IsInf(f, 0): return b, &UnsupportedValueError{Value: reflect.ValueOf(f), Str: "inf"} } // Convert as if by ES6 number to string conversion. // This matches most other JSON generators. // See golang.org/issue/6384 and golang.org/issue/14135. // Like fmt %g, but the exponent cutoffs are different // and exponents themselves are not padded to two digits. abs := math.Abs(f) fmt := byte('f') // Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right. if abs != 0 { if bits == 64 && (abs < 1e-6 || abs >= 1e21) || bits == 32 && (float32(abs) < 1e-6 || float32(abs) >= 1e21) { fmt = 'e' } } b = strconv.AppendFloat(b, f, fmt, -1, int(bits)) if fmt == 'e' { // clean up e-09 to e-9 n := len(b) if n >= 4 && b[n-4] == 'e' && b[n-3] == '-' && b[n-2] == '0' { b[n-2] = b[n-1] b = b[:n-1] } } return b, nil } func (e encoder) encodeNumber(b []byte, p unsafe.Pointer) ([]byte, error) { n := *(*Number)(p) if n == "" { n = "0" } d := decoder{} _, _, _, err := d.parseNumber(stringToBytes(string(n))) if err != nil { return b, err } return append(b, n...), nil } func (e encoder) encodeString(b []byte, p unsafe.Pointer) ([]byte, error) { s := *(*string)(p) if len(s) == 0 { return append(b, `""`...), nil } i := 0 j := 0 escapeHTML := (e.flags & EscapeHTML) != 0 b = append(b, '"') if len(s) >= 8 { if j = escapeIndex(s, escapeHTML); j < 0 { return append(append(b, s...), '"'), nil } } for j < len(s) { c := s[j] if c >= 0x20 && c <= 0x7f && c != '\\' && c != '"' && (!escapeHTML || (c != '<' && c != '>' && c != '&')) { // fast path: most of the time, printable ascii characters are used j++ continue } switch c { case '\\', '"', '\b', '\f', '\n', '\r', '\t': b = append(b, s[i:j]...) b = append(b, '\\', escapeByteRepr(c)) i = j + 1 j = j + 1 continue case '<', '>', '&': b = append(b, s[i:j]...) b = append(b, `\u00`...) b = append(b, hex[c>>4], hex[c&0xF]) i = j + 1 j = j + 1 continue } // This encodes bytes < 0x20 except for \t, \n and \r. if c < 0x20 { b = append(b, s[i:j]...) b = append(b, `\u00`...) b = append(b, hex[c>>4], hex[c&0xF]) i = j + 1 j = j + 1 continue } r, size := utf8.DecodeRuneInString(s[j:]) if r == utf8.RuneError && size == 1 { b = append(b, s[i:j]...) b = append(b, `\ufffd`...) i = j + size j = j + size continue } switch r { case '\u2028', '\u2029': // U+2028 is LINE SEPARATOR. // U+2029 is PARAGRAPH SEPARATOR. // They are both technically valid characters in JSON strings, // but don't work in JSONP, which has to be evaluated as JavaScript, // and can lead to security holes there. It is valid JSON to // escape them, so we do so unconditionally. // See http://timelessrepo.com/json-isnt-a-javascript-subset for discussion. b = append(b, s[i:j]...) b = append(b, `\u202`...) b = append(b, hex[r&0xF]) i = j + size j = j + size continue } j += size } b = append(b, s[i:]...) b = append(b, '"') return b, nil } func (e encoder) encodeToString(b []byte, p unsafe.Pointer, encode encodeFunc) ([]byte, error) { i := len(b) b, err := encode(e, b, p) if err != nil { return b, err } j := len(b) s := b[i:] if b, err = e.encodeString(b, unsafe.Pointer(&s)); err != nil { return b, err } n := copy(b[i:], b[j:]) return b[:i+n], nil } func (e encoder) encodeBytes(b []byte, p unsafe.Pointer) ([]byte, error) { v := *(*[]byte)(p) if v == nil { return append(b, "null"...), nil } n := base64.StdEncoding.EncodedLen(len(v)) + 2 if avail := cap(b) - len(b); avail < n { newB := make([]byte, cap(b)+(n-avail)) copy(newB, b) b = newB[:len(b)] } i := len(b) j := len(b) + n b = b[:j] b[i] = '"' base64.StdEncoding.Encode(b[i+1:j-1], v) b[j-1] = '"' return b, nil } func (e encoder) encodeDuration(b []byte, p unsafe.Pointer) ([]byte, error) { b = append(b, '"') b = appendDuration(b, *(*time.Duration)(p)) b = append(b, '"') return b, nil } func (e encoder) encodeTime(b []byte, p unsafe.Pointer) ([]byte, error) { t := *(*time.Time)(p) b = append(b, '"') b = t.AppendFormat(b, time.RFC3339Nano) b = append(b, '"') return b, nil } func (e encoder) encodeArray(b []byte, p unsafe.Pointer, n int, size uintptr, t reflect.Type, encode encodeFunc) ([]byte, error) { start := len(b) var err error b = append(b, '[') for i := range n { if i != 0 { b = append(b, ',') } if b, err = encode(e, b, unsafe.Pointer(uintptr(p)+(uintptr(i)*size))); err != nil { return b[:start], err } } b = append(b, ']') return b, nil } func (e encoder) encodeSlice(b []byte, p unsafe.Pointer, size uintptr, t reflect.Type, encode encodeFunc) ([]byte, error) { s := (*slice)(p) if s.data == nil && s.len == 0 && s.cap == 0 { return append(b, "null"...), nil } return e.encodeArray(b, s.data, s.len, size, t, encode) } func (e encoder) encodeMap(b []byte, p unsafe.Pointer, t reflect.Type, encodeKey, encodeValue encodeFunc, sortKeys sortFunc) ([]byte, error) { m := reflect.NewAt(t, p).Elem() if m.IsNil() { return append(b, "null"...), nil } keys := m.MapKeys() if sortKeys != nil && (e.flags&SortMapKeys) != 0 { sortKeys(keys) } start := len(b) var err error b = append(b, '{') for i, k := range keys { v := m.MapIndex(k) if i != 0 { b = append(b, ',') } if b, err = encodeKey(e, b, (*iface)(unsafe.Pointer(&k)).ptr); err != nil { return b[:start], err } b = append(b, ':') if b, err = encodeValue(e, b, (*iface)(unsafe.Pointer(&v)).ptr); err != nil { return b[:start], err } } b = append(b, '}') return b, nil } type element struct { key string val any raw RawMessage } type mapslice struct { elements []element } func (m *mapslice) Len() int { return len(m.elements) } func (m *mapslice) Less(i, j int) bool { return m.elements[i].key < m.elements[j].key } func (m *mapslice) Swap(i, j int) { m.elements[i], m.elements[j] = m.elements[j], m.elements[i] } var mapslicePool = sync.Pool{ New: func() any { return new(mapslice) }, } func (e encoder) encodeMapStringInterface(b []byte, p unsafe.Pointer) ([]byte, error) { m := *(*map[string]any)(p) if m == nil { return append(b, "null"...), nil } if (e.flags & SortMapKeys) == 0 { // Optimized code path when the program does not need the map keys to be // sorted. b = append(b, '{') if len(m) != 0 { var err error i := 0 for k, v := range m { if i != 0 { b = append(b, ',') } b, _ = e.encodeString(b, unsafe.Pointer(&k)) b = append(b, ':') b, err = Append(b, v, e.flags) if err != nil { return b, err } i++ } } b = append(b, '}') return b, nil } s := mapslicePool.Get().(*mapslice) if cap(s.elements) < len(m) { s.elements = make([]element, 0, align(10, uintptr(len(m)))) } for key, val := range m { s.elements = append(s.elements, element{key: key, val: val}) } sort.Sort(s) start := len(b) var err error b = append(b, '{') for i, elem := range s.elements { if i != 0 { b = append(b, ',') } b, _ = e.encodeString(b, unsafe.Pointer(&elem.key)) b = append(b, ':') b, err = Append(b, elem.val, e.flags) if err != nil { break } } for i := range s.elements { s.elements[i] = element{} } s.elements = s.elements[:0] mapslicePool.Put(s) if err != nil { return b[:start], err } b = append(b, '}') return b, nil } func (e encoder) encodeMapStringRawMessage(b []byte, p unsafe.Pointer) ([]byte, error) { m := *(*map[string]RawMessage)(p) if m == nil { return append(b, "null"...), nil } if (e.flags & SortMapKeys) == 0 { // Optimized code path when the program does not need the map keys to be // sorted. b = append(b, '{') if len(m) != 0 { var err error i := 0 for k, v := range m { if i != 0 { b = append(b, ',') } // encodeString doesn't return errors so we ignore it here b, _ = e.encodeString(b, unsafe.Pointer(&k)) b = append(b, ':') b, err = e.encodeRawMessage(b, unsafe.Pointer(&v)) if err != nil { break } i++ } } b = append(b, '}') return b, nil } s := mapslicePool.Get().(*mapslice) if cap(s.elements) < len(m) { s.elements = make([]element, 0, align(10, uintptr(len(m)))) } for key, raw := range m { s.elements = append(s.elements, element{key: key, raw: raw}) } sort.Sort(s) start := len(b) var err error b = append(b, '{') for i, elem := range s.elements { if i != 0 { b = append(b, ',') } b, _ = e.encodeString(b, unsafe.Pointer(&elem.key)) b = append(b, ':') b, err = e.encodeRawMessage(b, unsafe.Pointer(&elem.raw)) if err != nil { break } } for i := range s.elements { s.elements[i] = element{} } s.elements = s.elements[:0] mapslicePool.Put(s) if err != nil { return b[:start], err } b = append(b, '}') return b, nil } func (e encoder) encodeMapStringString(b []byte, p unsafe.Pointer) ([]byte, error) { m := *(*map[string]string)(p) if m == nil { return append(b, "null"...), nil } if (e.flags & SortMapKeys) == 0 { // Optimized code path when the program does not need the map keys to be // sorted. b = append(b, '{') if len(m) != 0 { i := 0 for k, v := range m { if i != 0 { b = append(b, ',') } // encodeString never returns an error so we ignore it here b, _ = e.encodeString(b, unsafe.Pointer(&k)) b = append(b, ':') b, _ = e.encodeString(b, unsafe.Pointer(&v)) i++ } } b = append(b, '}') return b, nil } s := mapslicePool.Get().(*mapslice) if cap(s.elements) < len(m) { s.elements = make([]element, 0, align(10, uintptr(len(m)))) } for key, val := range m { v := val s.elements = append(s.elements, element{key: key, val: &v}) } sort.Sort(s) b = append(b, '{') for i, elem := range s.elements { if i != 0 { b = append(b, ',') } // encodeString never returns an error so we ignore it here b, _ = e.encodeString(b, unsafe.Pointer(&elem.key)) b = append(b, ':') b, _ = e.encodeString(b, unsafe.Pointer(elem.val.(*string))) } for i := range s.elements { s.elements[i] = element{} } s.elements = s.elements[:0] mapslicePool.Put(s) b = append(b, '}') return b, nil } func (e encoder) encodeMapStringStringSlice(b []byte, p unsafe.Pointer) ([]byte, error) { m := *(*map[string][]string)(p) if m == nil { return append(b, "null"...), nil } stringSize := unsafe.Sizeof("") if (e.flags & SortMapKeys) == 0 { // Optimized code path when the program does not need the map keys to be // sorted. b = append(b, '{') if len(m) != 0 { var err error i := 0 for k, v := range m { if i != 0 { b = append(b, ',') } b, _ = e.encodeString(b, unsafe.Pointer(&k)) b = append(b, ':') b, err = e.encodeSlice(b, unsafe.Pointer(&v), stringSize, sliceStringType, encoder.encodeString) if err != nil { return b, err } i++ } } b = append(b, '}') return b, nil } s := mapslicePool.Get().(*mapslice) if cap(s.elements) < len(m) { s.elements = make([]element, 0, align(10, uintptr(len(m)))) } for key, val := range m { v := val s.elements = append(s.elements, element{key: key, val: &v}) } sort.Sort(s) start := len(b) var err error b = append(b, '{') for i, elem := range s.elements { if i != 0 { b = append(b, ',') } b, _ = e.encodeString(b, unsafe.Pointer(&elem.key)) b = append(b, ':') b, err = e.encodeSlice(b, unsafe.Pointer(elem.val.(*[]string)), stringSize, sliceStringType, encoder.encodeString) if err != nil { break } } for i := range s.elements { s.elements[i] = element{} } s.elements = s.elements[:0] mapslicePool.Put(s) if err != nil { return b[:start], err } b = append(b, '}') return b, nil } func (e encoder) encodeMapStringBool(b []byte, p unsafe.Pointer) ([]byte, error) { m := *(*map[string]bool)(p) if m == nil { return append(b, "null"...), nil } if (e.flags & SortMapKeys) == 0 { // Optimized code path when the program does not need the map keys to be // sorted. b = append(b, '{') if len(m) != 0 { i := 0 for k, v := range m { if i != 0 { b = append(b, ',') } // encodeString never returns an error so we ignore it here b, _ = e.encodeString(b, unsafe.Pointer(&k)) if v { b = append(b, ":true"...) } else { b = append(b, ":false"...) } i++ } } b = append(b, '}') return b, nil } s := mapslicePool.Get().(*mapslice) if cap(s.elements) < len(m) { s.elements = make([]element, 0, align(10, uintptr(len(m)))) } for key, val := range m { s.elements = append(s.elements, element{key: key, val: val}) } sort.Sort(s) b = append(b, '{') for i, elem := range s.elements { if i != 0 { b = append(b, ',') } // encodeString never returns an error so we ignore it here b, _ = e.encodeString(b, unsafe.Pointer(&elem.key)) if elem.val.(bool) { b = append(b, ":true"...) } else { b = append(b, ":false"...) } } for i := range s.elements { s.elements[i] = element{} } s.elements = s.elements[:0] mapslicePool.Put(s) b = append(b, '}') return b, nil } func (e encoder) encodeStruct(b []byte, p unsafe.Pointer, st *structType) ([]byte, error) { start := len(b) var err error var k string var n int b = append(b, '{') escapeHTML := (e.flags & EscapeHTML) != 0 for i := range st.fields { f := &st.fields[i] v := unsafe.Pointer(uintptr(p) + f.offset) if f.omitempty && f.empty(v) { continue } if escapeHTML { k = f.html } else { k = f.json } lengthBeforeKey := len(b) if n != 0 { b = append(b, k...) } else { b = append(b, k[1:]...) } if b, err = f.codec.encode(e, b, v); err != nil { if err == (rollback{}) { b = b[:lengthBeforeKey] continue } return b[:start], err } n++ } b = append(b, '}') return b, nil } type rollback struct{} func (rollback) Error() string { return "rollback" } func (e encoder) encodeEmbeddedStructPointer(b []byte, p unsafe.Pointer, t reflect.Type, unexported bool, offset uintptr, encode encodeFunc) ([]byte, error) { p = *(*unsafe.Pointer)(p) if p == nil { return b, rollback{} } return encode(e, b, unsafe.Pointer(uintptr(p)+offset)) } func (e encoder) encodePointer(b []byte, p unsafe.Pointer, t reflect.Type, encode encodeFunc) ([]byte, error) { if p = *(*unsafe.Pointer)(p); p != nil { if e.ptrDepth++; e.ptrDepth >= startDetectingCyclesAfter { if _, seen := e.ptrSeen[p]; seen { // TODO: reconstruct the reflect.Value from p + t so we can set // the erorr's Value field? return b, &UnsupportedValueError{Str: fmt.Sprintf("encountered a cycle via %s", t)} } if e.ptrSeen == nil { e.ptrSeen = make(map[unsafe.Pointer]struct{}) } e.ptrSeen[p] = struct{}{} defer delete(e.ptrSeen, p) } return encode(e, b, p) } return e.encodeNull(b, nil) } func (e encoder) encodeInterface(b []byte, p unsafe.Pointer) ([]byte, error) { return Append(b, *(*any)(p), e.flags) } func (e encoder) encodeMaybeEmptyInterface(b []byte, p unsafe.Pointer, t reflect.Type) ([]byte, error) { return Append(b, reflect.NewAt(t, p).Elem().Interface(), e.flags) } func (e encoder) encodeUnsupportedTypeError(b []byte, p unsafe.Pointer, t reflect.Type) ([]byte, error) { return b, &UnsupportedTypeError{Type: t} } func (e encoder) encodeRawMessage(b []byte, p unsafe.Pointer) ([]byte, error) { v := *(*RawMessage)(p) if v == nil { return append(b, "null"...), nil } var s []byte if (e.flags & TrustRawMessage) != 0 { s = v } else { var err error v = skipSpaces(v) // don't assume that a RawMessage starts with a token. d := decoder{} s, _, _, err = d.parseValue(v) if err != nil { return b, &UnsupportedValueError{Value: reflect.ValueOf(v), Str: err.Error()} } } if (e.flags & EscapeHTML) != 0 { return appendCompactEscapeHTML(b, s), nil } return append(b, s...), nil } func (e encoder) encodeJSONMarshaler(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool) ([]byte, error) { v := reflect.NewAt(t, p) if !pointer { v = v.Elem() } switch v.Kind() { case reflect.Ptr, reflect.Interface: if v.IsNil() { return append(b, "null"...), nil } } j, err := v.Interface().(Marshaler).MarshalJSON() if err != nil { return b, err } d := decoder{} s, _, _, err := d.parseValue(j) if err != nil { return b, &MarshalerError{Type: t, Err: err} } if (e.flags & EscapeHTML) != 0 { return appendCompactEscapeHTML(b, s), nil } return append(b, s...), nil } func (e encoder) encodeTextMarshaler(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool) ([]byte, error) { v := reflect.NewAt(t, p) if !pointer { v = v.Elem() } switch v.Kind() { case reflect.Ptr, reflect.Interface: if v.IsNil() { return append(b, `null`...), nil } } s, err := v.Interface().(encoding.TextMarshaler).MarshalText() if err != nil { return b, err } return e.encodeString(b, unsafe.Pointer(&s)) } func appendCompactEscapeHTML(dst []byte, src []byte) []byte { start := 0 escape := false inString := false for i, c := range src { if !inString { switch c { case '"': // enter string inString = true case ' ', '\n', '\r', '\t': // skip space if start < i { dst = append(dst, src[start:i]...) } start = i + 1 } continue } if escape { escape = false continue } if c == '\\' { escape = true continue } if c == '"' { inString = false continue } if c == '<' || c == '>' || c == '&' { if start < i { dst = append(dst, src[start:i]...) } dst = append(dst, `\u00`...) dst = append(dst, hex[c>>4], hex[c&0xF]) start = i + 1 continue } // Convert U+2028 and U+2029 (E2 80 A8 and E2 80 A9). if c == 0xE2 && i+2 < len(src) && src[i+1] == 0x80 && src[i+2]&^1 == 0xA8 { if start < i { dst = append(dst, src[start:i]...) } dst = append(dst, `\u202`...) dst = append(dst, hex[src[i+2]&0xF]) start = i + 3 continue } } if start < len(src) { dst = append(dst, src[start:]...) } return dst } golang-github-segmentio-encoding-0.5.3/json/fuzz/000077500000000000000000000000001504206176600220005ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/json/fuzz/LICENSE000066400000000000000000000261351504206176600230140ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} 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. golang-github-segmentio-encoding-0.5.3/json/fuzz/fuzz.go000066400000000000000000000057751504206176600233430ustar00rootroot00000000000000//go:build ignore // +build ignore // Copyright 2015 go-fuzz project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. package fuzz import ( "bytes" encodingJSON "encoding/json" "fmt" "reflect" "github.com/dvyukov/go-fuzz-corpus/fuzz" "github.com/segmentio/encoding/json" ) func fixS(v any) { if s, ok := v.(*S); ok { if len(s.P) == 0 { s.P = []byte(`""`) } } } func Fuzz(data []byte) int { score := 0 for _, ctor := range []func() any{ func() any { return nil }, func() any { return new([]any) }, func() any { m := map[string]string{}; return &m }, func() any { m := map[string]any{}; return &m }, func() any { return new(S) }, } { // Note: we modified the test to verify that we behavior like the // standard encoding/json package, whether it's right or wrong. v1 := ctor() v2 := ctor() err1 := encodingJSON.Unmarshal(data, v1) err2 := json.Unmarshal(data, v2) if err1 != nil { if err2 != nil { // both implementations report an error if reflect.TypeOf(err1) != reflect.TypeOf(err2) { fmt.Printf("input: %s\n", string(data)) fmt.Printf("encoding/json.Unmarshal(%T): %T: %s\n", v1, err1, err1) fmt.Printf("segmentio/encoding/json.Unmarshal(%T): %T: %s\n", v2, err2, err2) panic("error types mismatch") } continue } else { fmt.Printf("input: %s\n", string(data)) fmt.Printf("encoding/json.Unmarshal(%T): %T: %s\n", v1, err1, err1) fmt.Printf("segmentio/encoding/json.Unmarshal(%T): \n") panic("error values mismatch") } } else { if err2 != nil { fmt.Printf("input: %s\n", string(data)) fmt.Printf("encoding/json.Unmarshal(%T): \n") fmt.Printf("segmentio/encoding/json.Unmarshal(%T): %T: %s\n", v2, err2, err2) panic("error values mismatch") } else { // both implementations pass } } score = 1 fixS(v1) fixS(v2) if !fuzz.DeepEqual(v1, v2) { fmt.Printf("input: %s\n", string(data)) fmt.Printf("encoding/json: %#v\n", v1) fmt.Printf("segmentio/encoding: %#v\n", v2) panic("not equal") } data1, err := encodingJSON.Marshal(v1) if err != nil { panic(err) } data2, err := json.Marshal(v2) if err != nil { panic(err) } if !bytes.Equal(data1, data2) { fmt.Printf("input: %s\n", string(data)) fmt.Printf("encoding/json: %s\n", string(data1)) fmt.Printf("segmentio/encoding: %s\n", string(data2)) panic("not equal") } } return score } type S struct { A int `json:",omitempty"` B string `json:"B1,omitempty"` C float64 D bool E uint8 F []byte G any H map[string]any I map[string]string J []any K []string L S1 M *S1 N *int O **int P json.RawMessage Q Marshaller R int `json:"-"` S int `json:",string"` } type S1 struct { A int B string } type Marshaller struct { v string } func (m *Marshaller) MarshalJSON() ([]byte, error) { return json.Marshal(m.v) } func (m *Marshaller) UnmarshalJSON(data []byte) error { return json.Unmarshal(data, &m.v) } golang-github-segmentio-encoding-0.5.3/json/golang_bench_test.go000066400000000000000000000214341504206176600250020ustar00rootroot00000000000000// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Large data benchmark. // The JSON data is a summary of agl's changes in the // go, webkit, and chromium open source projects. // We benchmark converting between the JSON form // and in-memory data structures. package json import ( "bytes" "compress/gzip" "fmt" "io" "os" "reflect" "runtime" "strings" "sync" "testing" ) type codeResponse struct { Tree *codeNode `json:"tree"` Username string `json:"username"` } type codeNode struct { Name string `json:"name"` Kids []*codeNode `json:"kids"` CLWeight float64 `json:"cl_weight"` Touches int `json:"touches"` MinT int64 `json:"min_t"` MaxT int64 `json:"max_t"` MeanT int64 `json:"mean_t"` } var ( codeJSON []byte codeStruct codeResponse ) func codeInit() { f, err := os.Open("testdata/code.json.gz") if err != nil { panic(err) } defer f.Close() gz, err := gzip.NewReader(f) if err != nil { panic(err) } data, err := io.ReadAll(gz) if err != nil { panic(err) } codeJSON = data if err := Unmarshal(codeJSON, &codeStruct); err != nil { panic("unmarshal code.json: " + err.Error()) } if data, err = Marshal(&codeStruct); err != nil { panic("marshal code.json: " + err.Error()) } if !bytes.Equal(data, codeJSON) { println("different lengths", len(data), len(codeJSON)) for i := range min(len(data), len(codeJSON)) { if data[i] != codeJSON[i] { println("re-marshal: changed at byte", i) println("orig: ", string(codeJSON[i-10:i+10])) println("new: ", string(data[i-10:i+10])) break } } panic("re-marshal code.json: different result") } } func BenchmarkCodeEncoder(b *testing.B) { b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() b.StartTimer() } b.RunParallel(func(pb *testing.PB) { enc := NewEncoder(io.Discard) for pb.Next() { if err := enc.Encode(&codeStruct); err != nil { b.Fatal("Encode:", err) } } }) b.SetBytes(int64(len(codeJSON))) } func BenchmarkCodeMarshal(b *testing.B) { b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() b.StartTimer() } b.RunParallel(func(pb *testing.PB) { for pb.Next() { if _, err := Marshal(&codeStruct); err != nil { b.Fatal("Marshal:", err) } } }) b.SetBytes(int64(len(codeJSON))) } func benchMarshalBytes(n int) func(*testing.B) { sample := []byte("hello world") // Use a struct pointer, to avoid an allocation when passing it as an // interface parameter to Marshal. v := &struct { Bytes []byte }{ bytes.Repeat(sample, (n/len(sample))+1)[:n], } return func(b *testing.B) { for range b.N { if _, err := Marshal(v); err != nil { b.Fatal("Marshal:", err) } } } } func BenchmarkMarshalBytes(b *testing.B) { b.ReportAllocs() // 32 fits within encodeState.scratch. b.Run("32", benchMarshalBytes(32)) // 256 doesn't fit in encodeState.scratch, but is small enough to // allocate and avoid the slower base64.NewEncoder. b.Run("256", benchMarshalBytes(256)) // 4096 is large enough that we want to avoid allocating for it. b.Run("4096", benchMarshalBytes(4096)) } func BenchmarkCodeDecoder(b *testing.B) { b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() b.StartTimer() } b.RunParallel(func(pb *testing.PB) { var buf bytes.Buffer dec := NewDecoder(&buf) var r codeResponse for pb.Next() { buf.Write(codeJSON) // hide EOF buf.WriteByte('\n') buf.WriteByte('\n') buf.WriteByte('\n') if err := dec.Decode(&r); err != nil { b.Fatal("Decode:", err) } } }) b.SetBytes(int64(len(codeJSON))) } func BenchmarkUnicodeDecoder(b *testing.B) { b.ReportAllocs() j := []byte(`"\uD83D\uDE01"`) b.SetBytes(int64(len(j))) r := bytes.NewReader(j) dec := NewDecoder(r) var out string b.ResetTimer() for range b.N { if err := dec.Decode(&out); err != nil { b.Fatal("Decode:", err) } r.Seek(0, 0) } } func BenchmarkDecoderStream(b *testing.B) { b.ReportAllocs() b.StopTimer() var buf bytes.Buffer dec := NewDecoder(&buf) buf.WriteString(`"` + strings.Repeat("x", 1000000) + `"` + "\n\n\n") var x any if err := dec.Decode(&x); err != nil { b.Fatal("Decode:", err) } ones := strings.Repeat(" 1\n", 300000) + "\n\n\n" b.StartTimer() for i := range b.N { // XXX: making use of the index variable // is probably a misuse of b.N loops. if i%300000 == 0 { buf.WriteString(ones) } x = nil if err := dec.Decode(&x); err != nil || x != 1.0 { b.Fatalf("Decode: %v after %d", err, i) } } } func BenchmarkCodeUnmarshal(b *testing.B) { b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() b.StartTimer() } b.RunParallel(func(pb *testing.PB) { for pb.Next() { var r codeResponse if err := Unmarshal(codeJSON, &r); err != nil { b.Fatal("Unmarshal:", err) } } }) b.SetBytes(int64(len(codeJSON))) } func BenchmarkCodeUnmarshalReuse(b *testing.B) { b.ReportAllocs() if codeJSON == nil { b.StopTimer() codeInit() b.StartTimer() } b.RunParallel(func(pb *testing.PB) { var r codeResponse for pb.Next() { if err := Unmarshal(codeJSON, &r); err != nil { b.Fatal("Unmarshal:", err) } } }) b.SetBytes(int64(len(codeJSON))) } func BenchmarkUnmarshalString(b *testing.B) { b.ReportAllocs() data := []byte(`"hello, world"`) b.RunParallel(func(pb *testing.PB) { var s string for pb.Next() { if err := Unmarshal(data, &s); err != nil { b.Fatal("Unmarshal:", err) } } }) } func BenchmarkUnmarshalObjectMixed(b *testing.B) { b.ReportAllocs() data := []byte(`{"string":"hello world","time":"2025-07-17T18:40:04.338Z","bool":true,"integer":42,"decimal":3.14,"null":null,"object":{"hello":"world"},"array":[1,2,3]}`) b.RunParallel(func(pb *testing.PB) { var m map[string]any for pb.Next() { if err := Unmarshal(data, &m); err != nil { b.Fatal("Unmarshal:", err) } } }) } func BenchmarkUnmarshalArrayMixed(b *testing.B) { b.ReportAllocs() data := []byte(`["hello world","2025-07-17T18:40:04.338Z",true,42,3.14,null,{"hello":"world"},[1,2,3]]`) b.RunParallel(func(pb *testing.PB) { var a []any for pb.Next() { if err := Unmarshal(data, &a); err != nil { b.Fatal("Unmarshal:", err) } } }) } func BenchmarkUnmarshalFloat64(b *testing.B) { b.ReportAllocs() data := []byte(`3.14`) b.RunParallel(func(pb *testing.PB) { var f float64 for pb.Next() { if err := Unmarshal(data, &f); err != nil { b.Fatal("Unmarshal:", err) } } }) } func BenchmarkUnmarshalInt64(b *testing.B) { b.ReportAllocs() data := []byte(`3`) b.RunParallel(func(pb *testing.PB) { var x int64 for pb.Next() { if err := Unmarshal(data, &x); err != nil { b.Fatal("Unmarshal:", err) } } }) } func BenchmarkIssue10335(b *testing.B) { b.ReportAllocs() j := []byte(`{"a":{ }}`) b.RunParallel(func(pb *testing.PB) { var s struct{} for pb.Next() { if err := Unmarshal(j, &s); err != nil { b.Fatal(err) } } }) } func BenchmarkUnmapped(b *testing.B) { b.ReportAllocs() j := []byte(`{"s": "hello", "y": 2, "o": {"x": 0}, "a": [1, 99, {"x": 1}]}`) b.RunParallel(func(pb *testing.PB) { var s struct{} for pb.Next() { if err := Unmarshal(j, &s); err != nil { b.Fatal(err) } } }) } func BenchmarkTypeFieldsCache(b *testing.B) { b.ReportAllocs() var maxTypes int = 1e6 if testenv.Builder() != "" { maxTypes = 1e3 // restrict cache sizes on builders } // Dynamically generate many new types. types := make([]reflect.Type, maxTypes) fs := []reflect.StructField{{ Type: reflect.TypeOf(""), Index: []int{0}, }} for i := range types { fs[0].Name = fmt.Sprintf("TypeFieldsCache%d", i) types[i] = reflect.StructOf(fs) } // clearClear clears the cache. Other JSON operations, must not be running. clearCache := func() { fieldCache = sync.Map{} } // MissTypes tests the performance of repeated cache misses. // This measures the time to rebuild a cache of size nt. for nt := 1; nt <= maxTypes; nt *= 10 { ts := types[:nt] b.Run(fmt.Sprintf("MissTypes%d", nt), func(b *testing.B) { nc := runtime.GOMAXPROCS(0) for range b.N { clearCache() var wg sync.WaitGroup for j := range nc { wg.Add(1) go func(j int) { for _, t := range ts[(j*len(ts))/nc : ((j+1)*len(ts))/nc] { cachedTypeFields(t) } wg.Done() }(j) } wg.Wait() } }) } // HitTypes tests the performance of repeated cache hits. // This measures the average time of each cache lookup. for nt := 1; nt <= maxTypes; nt *= 10 { // Pre-warm a cache of size nt. clearCache() for _, t := range types[:nt] { cachedTypeFields(t) } b.Run(fmt.Sprintf("HitTypes%d", nt), func(b *testing.B) { b.RunParallel(func(pb *testing.PB) { for pb.Next() { cachedTypeFields(types[0]) } }) }) } } golang-github-segmentio-encoding-0.5.3/json/golang_decode_test.go000066400000000000000000001612751504206176600251560ustar00rootroot00000000000000// Copyright 2010 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package json import ( "bytes" "encoding" "errors" "fmt" "image" "math" "math/big" "net" "reflect" "strconv" "strings" "testing" "time" ) type T struct { X string Y int Z int `json:"-"` } type U struct { Alphabet string `json:"alpha"` } type V struct { F1 any F2 int32 F3 Number F4 *VOuter } type VOuter struct { V V } type W struct { S SS } type P struct { PP PP } type PP struct { T T Ts []T } type SS string func (*SS) UnmarshalJSON(data []byte) error { return &UnmarshalTypeError{Value: "number", Type: reflect.TypeOf(SS(""))} } // ifaceNumAsFloat64/ifaceNumAsNumber are used to test unmarshaling with and // without UseNumber var ifaceNumAsFloat64 = map[string]any{ "k1": float64(1), "k2": "s", "k3": []any{float64(1), float64(2.0), float64(3e-3)}, "k4": map[string]any{"kk1": "s", "kk2": float64(2)}, } var ifaceNumAsNumber = map[string]any{ "k1": Number("1"), "k2": "s", "k3": []any{Number("1"), Number("2.0"), Number("3e-3")}, "k4": map[string]any{"kk1": "s", "kk2": Number("2")}, } type tx struct { x int } type u8 uint8 // A type that can unmarshal itself. type unmarshaler struct { T bool } func (u *unmarshaler) UnmarshalJSON(b []byte) error { *u = unmarshaler{true} // All we need to see that UnmarshalJSON is called. return nil } type ustruct struct { M unmarshaler } type unmarshalerText struct { A, B string } // needed for re-marshaling tests func (u unmarshalerText) MarshalText() ([]byte, error) { return []byte(u.A + ":" + u.B), nil } func (u *unmarshalerText) UnmarshalText(b []byte) error { pos := bytes.IndexByte(b, ':') if pos == -1 { return errors.New("missing separator") } u.A, u.B = string(b[:pos]), string(b[pos+1:]) return nil } var _ encoding.TextUnmarshaler = (*unmarshalerText)(nil) type ustructText struct { M unmarshalerText } // u8marshal is an integer type that can marshal/unmarshal itself. type u8marshal uint8 func (u8 u8marshal) MarshalText() ([]byte, error) { return []byte(fmt.Sprintf("u%d", u8)), nil } var errMissingU8Prefix = errors.New("missing 'u' prefix") func (u8 *u8marshal) UnmarshalText(b []byte) error { if !bytes.HasPrefix(b, []byte{'u'}) { return errMissingU8Prefix } n, err := strconv.Atoi(string(b[1:])) if err != nil { return err } *u8 = u8marshal(n) return nil } var _ encoding.TextUnmarshaler = (*u8marshal)(nil) var ( um0, um1 unmarshaler // target2 of unmarshaling ump = &um1 umtrue = unmarshaler{true} umslice = []unmarshaler{{true}} umslicep = new([]unmarshaler) umstruct = ustruct{unmarshaler{true}} um0T, um1T unmarshalerText // target2 of unmarshaling umpType = &um1T umtrueXY = unmarshalerText{"x", "y"} umsliceXY = []unmarshalerText{{"x", "y"}} umslicepType = new([]unmarshalerText) umstructType = new(ustructText) umstructXY = ustructText{unmarshalerText{"x", "y"}} ummapType = map[unmarshalerText]bool{} ummapXY = map[unmarshalerText]bool{{"x", "y"}: true} ) // Test data structures for anonymous fields. type Point struct { Z int } type Top struct { Level0 int Embed0 *Embed0a *Embed0b `json:"e,omitempty"` // treated as named Embed0c `json:"-"` // ignored Loop Embed0p // has Point with X, Y, used Embed0q // has Point with Z, used embed // contains exported field } type Embed0 struct { Level1a int // overridden by Embed0a's Level1a with json tag Level1b int // used because Embed0a's Level1b is renamed Level1c int // used because Embed0a's Level1c is ignored Level1d int // annihilated by Embed0a's Level1d Level1e int `json:"x"` // annihilated by Embed0a.Level1e } type Embed0a struct { Level1a int `json:"Level1a,omitempty"` Level1b int `json:"LEVEL1B,omitempty"` Level1c int `json:"-"` Level1d int // annihilated by Embed0's Level1d Level1f int `json:"x"` // annihilated by Embed0's Level1e } type Embed0b Embed0 type Embed0c Embed0 type Embed0p struct { image.Point } type Embed0q struct { Point } type embed struct { Q int } type Loop struct { Loop1 int `json:",omitempty"` Loop2 int `json:",omitempty"` *Loop } // From reflect test: // The X in S6 and S7 annihilate, but they also block the X in S8.S9. type S5 struct { S6 S7 S8 } type S6 struct { X int } type S7 S6 type S8 struct { S9 } type S9 struct { X int Y int } // From reflect test: // The X in S11.S6 and S12.S6 annihilate, but they also block the X in S13.S8.S9. type S10 struct { S11 S12 S13 } type S11 struct { S6 } type S12 struct { S6 } type S13 struct { S8 } type Ambig struct { // Given "hello", the first match should win. First int `json:"HELLO"` Second int `json:"Hello"` } type XYZ struct { X any Y any Z any } type unexportedWithMethods struct{} func (unexportedWithMethods) F() {} func sliceAddr(x []int) *[]int { return &x } func mapAddr(x map[string]int) *map[string]int { return &x } type byteWithMarshalJSON byte func (b byteWithMarshalJSON) MarshalJSON() ([]byte, error) { return []byte(fmt.Sprintf(`"Z%.2x"`, byte(b))), nil } func (b *byteWithMarshalJSON) UnmarshalJSON(data []byte) error { if len(data) != 5 || data[0] != '"' || data[1] != 'Z' || data[4] != '"' { return fmt.Errorf("bad quoted string") } i, err := strconv.ParseInt(string(data[2:4]), 16, 8) if err != nil { return fmt.Errorf("bad hex") } *b = byteWithMarshalJSON(i) return nil } type byteWithPtrMarshalJSON byte func (b *byteWithPtrMarshalJSON) MarshalJSON() ([]byte, error) { return byteWithMarshalJSON(*b).MarshalJSON() } func (b *byteWithPtrMarshalJSON) UnmarshalJSON(data []byte) error { return (*byteWithMarshalJSON)(b).UnmarshalJSON(data) } type byteWithMarshalText byte func (b byteWithMarshalText) MarshalText() ([]byte, error) { return []byte(fmt.Sprintf(`Z%.2x`, byte(b))), nil } func (b *byteWithMarshalText) UnmarshalText(data []byte) error { if len(data) != 3 || data[0] != 'Z' { return fmt.Errorf("bad quoted string") } i, err := strconv.ParseInt(string(data[1:3]), 16, 8) if err != nil { return fmt.Errorf("bad hex") } *b = byteWithMarshalText(i) return nil } type byteWithPtrMarshalText byte func (b *byteWithPtrMarshalText) MarshalText() ([]byte, error) { return byteWithMarshalText(*b).MarshalText() } func (b *byteWithPtrMarshalText) UnmarshalText(data []byte) error { return (*byteWithMarshalText)(b).UnmarshalText(data) } type intWithMarshalJSON int func (b intWithMarshalJSON) MarshalJSON() ([]byte, error) { return []byte(fmt.Sprintf(`"Z%.2x"`, int(b))), nil } func (b *intWithMarshalJSON) UnmarshalJSON(data []byte) error { if len(data) != 5 || data[0] != '"' || data[1] != 'Z' || data[4] != '"' { return fmt.Errorf("bad quoted string") } i, err := strconv.ParseInt(string(data[2:4]), 16, 8) if err != nil { return fmt.Errorf("bad hex") } *b = intWithMarshalJSON(i) return nil } type intWithPtrMarshalJSON int func (b *intWithPtrMarshalJSON) MarshalJSON() ([]byte, error) { return intWithMarshalJSON(*b).MarshalJSON() } func (b *intWithPtrMarshalJSON) UnmarshalJSON(data []byte) error { return (*intWithMarshalJSON)(b).UnmarshalJSON(data) } type intWithMarshalText int func (b intWithMarshalText) MarshalText() ([]byte, error) { return []byte(fmt.Sprintf(`Z%.2x`, int(b))), nil } func (b *intWithMarshalText) UnmarshalText(data []byte) error { if len(data) != 3 || data[0] != 'Z' { return fmt.Errorf("bad quoted string") } i, err := strconv.ParseInt(string(data[1:3]), 16, 8) if err != nil { return fmt.Errorf("bad hex") } *b = intWithMarshalText(i) return nil } type intWithPtrMarshalText int func (b *intWithPtrMarshalText) MarshalText() ([]byte, error) { return intWithMarshalText(*b).MarshalText() } func (b *intWithPtrMarshalText) UnmarshalText(data []byte) error { return (*intWithMarshalText)(b).UnmarshalText(data) } type mapStringToStringData struct { Data map[string]string `json:"data"` } type unmarshalTest struct { in string ptr any out any err error useNumber bool golden bool disallowUnknownFields bool } type B struct { B bool `json:",string"` } var unmarshalTests = []unmarshalTest{ // basic types {in: `true`, ptr: new(bool), out: true}, {in: `1`, ptr: new(int), out: 1}, {in: `1.2`, ptr: new(float64), out: 1.2}, {in: `-5`, ptr: new(int16), out: int16(-5)}, {in: `2`, ptr: new(Number), out: Number("2"), useNumber: true}, {in: `2`, ptr: new(Number), out: Number("2")}, {in: `2`, ptr: new(any), out: float64(2.0)}, {in: `2`, ptr: new(any), out: Number("2"), useNumber: true}, {in: `"a\u1234"`, ptr: new(string), out: "a\u1234"}, {in: `"http:\/\/"`, ptr: new(string), out: "http://"}, {in: `"g-clef: \uD834\uDD1E"`, ptr: new(string), out: "g-clef: \U0001D11E"}, //TODO //{in: `"invalid: \uD834x\uDD1E"`, ptr: new(string), out: "invalid: \uFFFDx\uFFFD"}, {in: "null", ptr: new(any), out: nil}, {in: `{"X": [1,2,3], "Y": 4}`, ptr: new(T), out: T{Y: 4}, err: &UnmarshalTypeError{Value: "array", Type: reflect.TypeOf(""), Offset: 7, Struct: "T", Field: "X"}}, {in: `{"X": 23}`, ptr: new(T), out: T{}, err: &UnmarshalTypeError{Value: "number", Type: reflect.TypeOf(""), Offset: 8, Struct: "T", Field: "X"}}, {in: `{"x": 1}`, ptr: new(tx), out: tx{}}, {in: `{"x": 1}`, ptr: new(tx), out: tx{}}, {in: `{"x": 1}`, ptr: new(tx), err: fmt.Errorf("json: unknown field \"x\""), disallowUnknownFields: true}, {in: `{"S": 23}`, ptr: new(W), out: W{}, err: &UnmarshalTypeError{Value: "number", Type: reflect.TypeOf(SS("")), Offset: 0, Struct: "W", Field: "S"}}, {in: `{"F1":1,"F2":2,"F3":3}`, ptr: new(V), out: V{F1: float64(1), F2: int32(2), F3: Number("3")}}, {in: `{"F1":1,"F2":2,"F3":3}`, ptr: new(V), out: V{F1: Number("1"), F2: int32(2), F3: Number("3")}, useNumber: true}, {in: `{"k1":1,"k2":"s","k3":[1,2.0,3e-3],"k4":{"kk1":"s","kk2":2}}`, ptr: new(any), out: ifaceNumAsFloat64}, {in: `{"k1":1,"k2":"s","k3":[1,2.0,3e-3],"k4":{"kk1":"s","kk2":2}}`, ptr: new(any), out: ifaceNumAsNumber, useNumber: true}, // raw values with whitespace {in: "\n true ", ptr: new(bool), out: true}, {in: "\t 1 ", ptr: new(int), out: 1}, {in: "\r 1.2 ", ptr: new(float64), out: 1.2}, {in: "\t -5 \n", ptr: new(int16), out: int16(-5)}, {in: "\t \"a\\u1234\" \n", ptr: new(string), out: "a\u1234"}, // Z has a "-" tag. {in: `{"Y": 1, "Z": 2}`, ptr: new(T), out: T{Y: 1}}, {in: `{"Y": 1, "Z": 2}`, ptr: new(T), err: fmt.Errorf("json: unknown field \"Z\""), disallowUnknownFields: true}, {in: `{"alpha": "abc", "alphabet": "xyz"}`, ptr: new(U), out: U{Alphabet: "abc"}}, {in: `{"alpha": "abc", "alphabet": "xyz"}`, ptr: new(U), err: fmt.Errorf("json: unknown field \"alphabet\""), disallowUnknownFields: true}, {in: `{"alpha": "abc"}`, ptr: new(U), out: U{Alphabet: "abc"}}, {in: `{"alphabet": "xyz"}`, ptr: new(U), out: U{}}, {in: `{"alphabet": "xyz"}`, ptr: new(U), err: fmt.Errorf("json: unknown field \"alphabet\""), disallowUnknownFields: true}, // syntax errors {in: `{"X": "foo", "Y"}`, err: &testSyntaxError{"invalid character '}' after object key", 17}}, {in: `[1, 2, 3+]`, err: &testSyntaxError{"invalid character '+' after array element", 9}}, {in: `{"X":12x}`, err: &testSyntaxError{"invalid character 'x' after object key:value pair", 8}, useNumber: true}, {in: `[2, 3`, err: &testSyntaxError{msg: "unexpected end of JSON input", Offset: 5}}, // raw value errors {in: "\x01 42", err: &testSyntaxError{"invalid character '\\x01' looking for beginning of value", 1}}, {in: " 42 \x01", err: &testSyntaxError{"invalid character '\\x01' after top-level value", 5}}, {in: "\x01 true", err: &testSyntaxError{"invalid character '\\x01' looking for beginning of value", 1}}, {in: " false \x01", err: &testSyntaxError{"invalid character '\\x01' after top-level value", 8}}, {in: "\x01 1.2", err: &testSyntaxError{"invalid character '\\x01' looking for beginning of value", 1}}, {in: " 3.4 \x01", err: &testSyntaxError{"invalid character '\\x01' after top-level value", 6}}, {in: "\x01 \"string\"", err: &testSyntaxError{"invalid character '\\x01' looking for beginning of value", 1}}, {in: " \"string\" \x01", err: &testSyntaxError{"invalid character '\\x01' after top-level value", 11}}, // array tests {in: `[1, 2, 3]`, ptr: new([3]int), out: [3]int{1, 2, 3}}, {in: `[1, 2, 3]`, ptr: new([1]int), out: [1]int{1}}, {in: `[1, 2, 3]`, ptr: new([5]int), out: [5]int{1, 2, 3, 0, 0}}, {in: `[1, 2, 3]`, ptr: new(MustNotUnmarshalJSON), err: errors.New("MustNotUnmarshalJSON was used")}, // empty array to interface test {in: `[]`, ptr: new([]any), out: []any{}}, {in: `null`, ptr: new([]any), out: []any(nil)}, {in: `{"T":[]}`, ptr: new(map[string]any), out: map[string]any{"T": []any{}}}, {in: `{"T":null}`, ptr: new(map[string]any), out: map[string]any{"T": any(nil)}}, // composite tests {in: allValueIndent, ptr: new(All), out: allValue}, {in: allValueCompact, ptr: new(All), out: allValue}, {in: allValueIndent, ptr: new(*All), out: &allValue}, {in: allValueCompact, ptr: new(*All), out: &allValue}, {in: pallValueIndent, ptr: new(All), out: pallValue}, {in: pallValueCompact, ptr: new(All), out: pallValue}, {in: pallValueIndent, ptr: new(*All), out: &pallValue}, {in: pallValueCompact, ptr: new(*All), out: &pallValue}, // unmarshal interface test {in: `{"T":false}`, ptr: &um0, out: umtrue}, // use "false" so test will fail if custom unmarshaler is not called {in: `{"T":false}`, ptr: &ump, out: &umtrue}, {in: `[{"T":false}]`, ptr: &umslice, out: umslice}, {in: `[{"T":false}]`, ptr: &umslicep, out: &umslice}, {in: `{"M":{"T":"x:y"}}`, ptr: &umstruct, out: umstruct}, // UnmarshalText interface test {in: `"x:y"`, ptr: &um0T, out: umtrueXY}, {in: `"x:y"`, ptr: &umpType, out: &umtrueXY}, {in: `["x:y"]`, ptr: &umsliceXY, out: umsliceXY}, {in: `["x:y"]`, ptr: &umslicepType, out: &umsliceXY}, {in: `{"M":"x:y"}`, ptr: umstructType, out: umstructXY}, // integer-keyed map test { in: `{"-1":"a","0":"b","1":"c"}`, ptr: new(map[int]string), out: map[int]string{-1: "a", 0: "b", 1: "c"}, }, { in: `{"0":"a","10":"c","9":"b"}`, ptr: new(map[u8]string), out: map[u8]string{0: "a", 9: "b", 10: "c"}, }, { in: `{"-9223372036854775808":"min","9223372036854775807":"max"}`, ptr: new(map[int64]string), out: map[int64]string{math.MinInt64: "min", math.MaxInt64: "max"}, }, { in: `{"18446744073709551615":"max"}`, ptr: new(map[uint64]string), out: map[uint64]string{math.MaxUint64: "max"}, }, { in: `{"0":false,"10":true}`, ptr: new(map[uintptr]bool), out: map[uintptr]bool{0: false, 10: true}, }, // Check that MarshalText and UnmarshalText take precedence // over default integer handling in map keys. { in: `{"u2":4}`, ptr: new(map[u8marshal]int), out: map[u8marshal]int{2: 4}, }, { in: `{"2":4}`, ptr: new(map[u8marshal]int), err: errMissingU8Prefix, }, // integer-keyed map errors { in: `{"abc":"abc"}`, ptr: new(map[int]string), err: &UnmarshalTypeError{Value: "number abc", Type: reflect.TypeOf(0), Offset: 2}, }, { in: `{"256":"abc"}`, ptr: new(map[uint8]string), err: &UnmarshalTypeError{Value: "number 256", Type: reflect.TypeOf(uint8(0)), Offset: 2}, }, { in: `{"128":"abc"}`, ptr: new(map[int8]string), err: &UnmarshalTypeError{Value: "number 128", Type: reflect.TypeOf(int8(0)), Offset: 2}, }, { in: `{"-1":"abc"}`, ptr: new(map[uint8]string), err: &UnmarshalTypeError{Value: "number -1", Type: reflect.TypeOf(uint8(0)), Offset: 2}, }, { in: `{"F":{"a":2,"3":4}}`, ptr: new(map[string]map[int]int), err: &UnmarshalTypeError{Value: "number a", Type: reflect.TypeOf(int(0)), Offset: 7}, }, { in: `{"F":{"a":2,"3":4}}`, ptr: new(map[string]map[uint]int), err: &UnmarshalTypeError{Value: "number a", Type: reflect.TypeOf(uint(0)), Offset: 7}, }, // Map keys can be encoding.TextUnmarshalers. {in: `{"x:y":true}`, ptr: &ummapType, out: ummapXY}, // If multiple values for the same key exists, only the most recent value is used. {in: `{"x:y":false,"x:y":true}`, ptr: &ummapType, out: ummapXY}, // Overwriting of data. // This is different from package xml, but it's what we've always done. // Now documented and tested. {in: `[2]`, ptr: sliceAddr([]int{1}), out: []int{2}}, {in: `{"key": 2}`, ptr: mapAddr(map[string]int{"old": 0, "key": 1}), out: map[string]int{"key": 2}}, { in: `{ "Level0": 1, "Level1b": 2, "Level1c": 3, "x": 4, "Level1a": 5, "LEVEL1B": 6, "e": { "Level1a": 8, "Level1b": 9, "Level1c": 10, "Level1d": 11, "x": 12 }, "Loop1": 13, "Loop2": 14, "X": 15, "Y": 16, "Z": 17, "Q": 18 }`, ptr: new(Top), out: Top{ Level0: 1, Embed0: Embed0{ Level1b: 2, Level1c: 3, }, Embed0a: &Embed0a{ Level1a: 5, Level1b: 6, }, Embed0b: &Embed0b{ Level1a: 8, Level1b: 9, Level1c: 10, Level1d: 11, Level1e: 12, }, Loop: Loop{ Loop1: 13, Loop2: 14, }, Embed0p: Embed0p{ Point: image.Point{X: 15, Y: 16}, }, Embed0q: Embed0q{ Point: Point{Z: 17}, }, embed: embed{ Q: 18, }, }, }, { in: `{"hello": 1}`, ptr: new(Ambig), out: Ambig{First: 1}, }, { in: `{"X": 1,"Y":2}`, ptr: new(S5), out: S5{S8: S8{S9: S9{Y: 2}}}, }, { in: `{"X": 1,"Y":2}`, ptr: new(S5), err: fmt.Errorf("json: unknown field \"X\""), disallowUnknownFields: true, }, { in: `{"X": 1,"Y":2}`, ptr: new(S10), out: S10{S13: S13{S8: S8{S9: S9{Y: 2}}}}, }, { in: `{"X": 1,"Y":2}`, ptr: new(S10), err: fmt.Errorf("json: unknown field \"X\""), disallowUnknownFields: true, }, // invalid UTF-8 is coerced to valid UTF-8. { in: "\"hello\xffworld\"", ptr: new(string), out: "hello\ufffdworld", }, { in: "\"hello\xc2\xc2world\"", ptr: new(string), out: "hello\ufffd\ufffdworld", }, { in: "\"hello\xc2\xffworld\"", ptr: new(string), out: "hello\ufffd\ufffdworld", }, { in: "\"hello\\ud800world\"", ptr: new(string), out: "hello\ufffdworld", }, { in: "\"hello\\ud800\\ud800world\"", ptr: new(string), out: "hello\ufffd\ufffdworld", }, { in: "\"hello\\ud800\\ud800world\"", ptr: new(string), out: "hello\ufffd\ufffdworld", }, { in: "\"hello\xed\xa0\x80\xed\xb0\x80world\"", ptr: new(string), out: "hello\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdworld", }, // Used to be issue 8305, but time.Time implements encoding.TextUnmarshaler so this works now. { in: `{"2009-11-10T23:00:00Z": "hello world"}`, ptr: &map[time.Time]string{}, out: map[time.Time]string{time.Date(2009, 11, 10, 23, 0, 0, 0, time.UTC): "hello world"}, }, // issue 8305 { in: `{"2009-11-10T23:00:00Z": "hello world"}`, ptr: &map[Point]string{}, err: &UnmarshalTypeError{Value: "object", Type: reflect.TypeOf(map[Point]string{}), Offset: 1}, }, { in: `{"asdf": "hello world"}`, ptr: &map[unmarshaler]string{}, err: &UnmarshalTypeError{Value: "object", Type: reflect.TypeOf(map[unmarshaler]string{}), Offset: 1}, }, // related to issue 13783. // Go 1.7 changed marshaling a slice of typed byte to use the methods on the byte type, // similar to marshaling a slice of typed int. // These tests check that, assuming the byte type also has valid decoding methods, // either the old base64 string encoding or the new per-element encoding can be // successfully unmarshaled. The custom unmarshalers were accessible in earlier // versions of Go, even though the custom marshaler was not. { in: `"AQID"`, ptr: new([]byteWithMarshalJSON), out: []byteWithMarshalJSON{1, 2, 3}, }, { in: `["Z01","Z02","Z03"]`, ptr: new([]byteWithMarshalJSON), out: []byteWithMarshalJSON{1, 2, 3}, golden: true, }, { in: `"AQID"`, ptr: new([]byteWithMarshalText), out: []byteWithMarshalText{1, 2, 3}, }, { in: `["Z01","Z02","Z03"]`, ptr: new([]byteWithMarshalText), out: []byteWithMarshalText{1, 2, 3}, golden: true, }, { in: `"AQID"`, ptr: new([]byteWithPtrMarshalJSON), out: []byteWithPtrMarshalJSON{1, 2, 3}, }, { in: `["Z01","Z02","Z03"]`, ptr: new([]byteWithPtrMarshalJSON), out: []byteWithPtrMarshalJSON{1, 2, 3}, golden: true, }, { in: `"AQID"`, ptr: new([]byteWithPtrMarshalText), out: []byteWithPtrMarshalText{1, 2, 3}, }, { in: `["Z01","Z02","Z03"]`, ptr: new([]byteWithPtrMarshalText), out: []byteWithPtrMarshalText{1, 2, 3}, golden: true, }, // ints work with the marshaler but not the base64 []byte case { in: `["Z01","Z02","Z03"]`, ptr: new([]intWithMarshalJSON), out: []intWithMarshalJSON{1, 2, 3}, golden: true, }, { in: `["Z01","Z02","Z03"]`, ptr: new([]intWithMarshalText), out: []intWithMarshalText{1, 2, 3}, golden: true, }, { in: `["Z01","Z02","Z03"]`, ptr: new([]intWithPtrMarshalJSON), out: []intWithPtrMarshalJSON{1, 2, 3}, golden: true, }, { in: `["Z01","Z02","Z03"]`, ptr: new([]intWithPtrMarshalText), out: []intWithPtrMarshalText{1, 2, 3}, golden: true, }, {in: `0.000001`, ptr: new(float64), out: 0.000001, golden: true}, {in: `1e-7`, ptr: new(float64), out: 1e-7, golden: true}, {in: `100000000000000000000`, ptr: new(float64), out: 100000000000000000000.0, golden: true}, {in: `1e+21`, ptr: new(float64), out: 1e21, golden: true}, {in: `-0.000001`, ptr: new(float64), out: -0.000001, golden: true}, {in: `-1e-7`, ptr: new(float64), out: -1e-7, golden: true}, {in: `-100000000000000000000`, ptr: new(float64), out: -100000000000000000000.0, golden: true}, {in: `-1e+21`, ptr: new(float64), out: -1e21, golden: true}, {in: `999999999999999900000`, ptr: new(float64), out: 999999999999999900000.0, golden: true}, {in: `9007199254740992`, ptr: new(float64), out: 9007199254740992.0, golden: true}, {in: `9007199254740993`, ptr: new(float64), out: 9007199254740992.0, golden: false}, { in: `{"V": {"F2": "hello"}}`, ptr: new(VOuter), err: &UnmarshalTypeError{ Value: "string", Struct: "V", Field: "V.F2", Type: reflect.TypeOf(int32(0)), Offset: 20, }, }, { in: `{"V": {"F4": {}, "F2": "hello"}}`, ptr: new(VOuter), err: &UnmarshalTypeError{ Value: "string", Struct: "V", Field: "V.F2", Type: reflect.TypeOf(int32(0)), Offset: 30, }, }, // issue 15146. // invalid inputs in wrongStringTests below. {in: `{"B":"true"}`, ptr: new(B), out: B{true}, golden: true}, {in: `{"B":"false"}`, ptr: new(B), out: B{false}, golden: true}, {in: `{"B": "maybe"}`, ptr: new(B), err: errors.New(`json: invalid use of ,string struct tag, trying to unmarshal "maybe" into bool`)}, {in: `{"B": "tru"}`, ptr: new(B), err: errors.New(`json: invalid use of ,string struct tag, trying to unmarshal "tru" into bool`)}, {in: `{"B": "False"}`, ptr: new(B), err: errors.New(`json: invalid use of ,string struct tag, trying to unmarshal "False" into bool`)}, {in: `{"B": "null"}`, ptr: new(B), out: B{false}}, {in: `{"B": "nul"}`, ptr: new(B), err: errors.New(`json: invalid use of ,string struct tag, trying to unmarshal "nul" into bool`)}, {in: `{"B": [2, 3]}`, ptr: new(B), err: errors.New(`json: invalid use of ,string struct tag, trying to unmarshal unquoted value into bool`)}, // additional tests for disallowUnknownFields { in: `{ "Level0": 1, "Level1b": 2, "Level1c": 3, "x": 4, "Level1a": 5, "LEVEL1B": 6, "e": { "Level1a": 8, "Level1b": 9, "Level1c": 10, "Level1d": 11, "x": 12 }, "Loop1": 13, "Loop2": 14, "X": 15, "Y": 16, "Z": 17, "Q": 18, "extra": true }`, ptr: new(Top), err: fmt.Errorf("json: unknown field \"extra\""), disallowUnknownFields: true, }, { in: `{ "Level0": 1, "Level1b": 2, "Level1c": 3, "x": 4, "Level1a": 5, "LEVEL1B": 6, "e": { "Level1a": 8, "Level1b": 9, "Level1c": 10, "Level1d": 11, "x": 12, "extra": null }, "Loop1": 13, "Loop2": 14, "X": 15, "Y": 16, "Z": 17, "Q": 18 }`, ptr: new(Top), err: fmt.Errorf("json: unknown field \"extra\""), disallowUnknownFields: true, }, // issue 26444 // UnmarshalTypeError without field & struct values { in: `{"data":{"test1": "bob", "test2": 123}}`, ptr: new(mapStringToStringData), err: &UnmarshalTypeError{Value: "number", Type: reflect.TypeOf(""), Offset: 37, Struct: "mapStringToStringData", Field: "data"}, }, { in: `{"data":{"test1": 123, "test2": "bob"}}`, ptr: new(mapStringToStringData), err: &UnmarshalTypeError{Value: "number", Type: reflect.TypeOf(""), Offset: 21, Struct: "mapStringToStringData", Field: "data"}, }, // trying to decode JSON arrays or objects via TextUnmarshaler { in: `[1, 2, 3]`, ptr: new(MustNotUnmarshalText), err: &UnmarshalTypeError{Value: "array", Type: reflect.TypeOf(&MustNotUnmarshalText{}), Offset: 1}, }, { in: `{"foo": "bar"}`, ptr: new(MustNotUnmarshalText), err: &UnmarshalTypeError{Value: "object", Type: reflect.TypeOf(&MustNotUnmarshalText{}), Offset: 1}, }, // #22369 { in: `{"PP": {"T": {"Y": "bad-type"}}}`, ptr: new(P), err: &UnmarshalTypeError{ Value: "string", Struct: "T", Field: "PP.T.Y", Type: reflect.TypeOf(int(0)), Offset: 29, }, }, { in: `{"Ts": [{"Y": 1}, {"Y": 2}, {"Y": "bad-type"}]}`, ptr: new(PP), err: &UnmarshalTypeError{ Value: "string", Struct: "T", Field: "Ts.Y", Type: reflect.TypeOf(int(0)), Offset: 29, }, }, } func TestMarshal(t *testing.T) { b, err := Marshal(allValue) if err != nil { t.Fatalf("Marshal allValue: %v", err) } if string(b) != allValueCompact { t.Errorf("Marshal allValueCompact") diff(t, b, []byte(allValueCompact)) return } b, err = Marshal(pallValue) if err != nil { t.Fatalf("Marshal pallValue: %v", err) } if string(b) != pallValueCompact { t.Errorf("Marshal pallValueCompact") diff(t, b, []byte(pallValueCompact)) return } } var badUTF8 = []struct { in, out string }{ {"hello\xffworld", `"hello\ufffdworld"`}, {"", `""`}, {"\xff", `"\ufffd"`}, {"\xff\xff", `"\ufffd\ufffd"`}, {"a\xffb", `"a\ufffdb"`}, {"\xe6\x97\xa5\xe6\x9c\xac\xff\xaa\x9e", `"日本\ufffd\ufffd\ufffd"`}, } func TestMarshalBadUTF8(t *testing.T) { for _, tt := range badUTF8 { b, err := Marshal(tt.in) if string(b) != tt.out || err != nil { t.Errorf("Marshal(%q) = %#q, %v, want %#q, nil", tt.in, b, err, tt.out) } } } func TestMarshalNumberZeroVal(t *testing.T) { var n Number out, err := Marshal(n) if err != nil { t.Fatal(err) } outStr := string(out) if outStr != "0" { t.Fatalf("Invalid zero val for Number: %q", outStr) } } func TestMarshalEmbeds(t *testing.T) { top := &Top{ Level0: 1, Embed0: Embed0{ Level1b: 2, Level1c: 3, }, Embed0a: &Embed0a{ Level1a: 5, Level1b: 6, }, Embed0b: &Embed0b{ Level1a: 8, Level1b: 9, Level1c: 10, Level1d: 11, Level1e: 12, }, Loop: Loop{ Loop1: 13, Loop2: 14, }, Embed0p: Embed0p{ Point: image.Point{X: 15, Y: 16}, }, Embed0q: Embed0q{ Point: Point{Z: 17}, }, embed: embed{ Q: 18, }, } b, err := Marshal(top) if err != nil { t.Fatal(err) } want := "{\"Level0\":1,\"Level1b\":2,\"Level1c\":3,\"Level1a\":5,\"LEVEL1B\":6,\"e\":{\"Level1a\":8,\"Level1b\":9,\"Level1c\":10,\"Level1d\":11,\"x\":12},\"Loop1\":13,\"Loop2\":14,\"X\":15,\"Y\":16,\"Z\":17,\"Q\":18}" if string(b) != want { t.Errorf("Wrong marshal result.\n got: %q\nwant: %q", b, want) } } func equalError(a, b error) bool { if a == nil { return b == nil } if b == nil { return a == nil } return a.Error() == b.Error() } func TestUnmarshal(t *testing.T) { for i, tt := range unmarshalTests { var scan scanner in := []byte(tt.in) if err := checkValid(in, &scan); err != nil { if !equalError(err, tt.err) { t.Errorf("#%d: checkValid: %#v", i, err) continue } } if tt.ptr == nil { continue } // v = new(right-type) v := reflect.New(reflect.TypeOf(tt.ptr).Elem()) dec := NewDecoder(bytes.NewReader(in)) if tt.useNumber { dec.UseNumber() } if tt.disallowUnknownFields { dec.DisallowUnknownFields() } err := dec.Decode(v.Interface()) assertErrorPresence(t, tt.err, err, "testUnmarshal", i, tt.in) if err != nil { continue } if !reflect.DeepEqual(v.Elem().Interface(), tt.out) { t.Errorf("#%d: mismatch\n%v\nhave: %#+v\nwant: %#+v", i, tt.in, v.Elem().Interface(), tt.out) data, _ := Marshal(v.Elem().Interface()) println(string(data)) data, _ = Marshal(tt.out) println(string(data)) continue } // Check round trip also decodes correctly. if tt.err == nil { enc, err := Marshal(v.Interface()) if err != nil { t.Errorf("#%d: error re-marshaling: %v", i, err) continue } if tt.golden && !bytes.Equal(enc, in) { t.Errorf("#%d: remarshal mismatch:\nhave: %s\nwant: %s", i, enc, in) } vv := reflect.New(reflect.TypeOf(tt.ptr).Elem()) dec = NewDecoder(bytes.NewReader(enc)) if tt.useNumber { dec.UseNumber() } if err := dec.Decode(vv.Interface()); err != nil { t.Errorf("#%d: error re-unmarshaling %#q: %v", i, enc, err) continue } if !reflect.DeepEqual(v.Elem().Interface(), vv.Elem().Interface()) { t.Errorf("#%d: mismatch\nhave: %#+v\nwant: %#+v", i, v.Elem().Interface(), vv.Elem().Interface()) t.Errorf(" In: %q", strings.Map(noSpace, string(in))) t.Errorf("Marshal: %q", strings.Map(noSpace, string(enc))) continue } } } } func TestUnmarshalMarshal(t *testing.T) { initBig() var v any if err := Unmarshal(jsonBig, &v); err != nil { t.Fatalf("Unmarshal: %v", err) } b, err := Marshal(v) if err != nil { t.Fatalf("Marshal: %v", err) } if !bytes.Equal(jsonBig, b) { t.Errorf("Marshal jsonBig") diff(t, b, jsonBig) return } } var numberTests = []struct { in string i int64 intErr string f float64 floatErr string }{ {in: "-1.23e1", intErr: "strconv.ParseInt: parsing \"-1.23e1\": invalid syntax", f: -1.23e1}, {in: "-12", i: -12, f: -12.0}, {in: "1e1000", intErr: "strconv.ParseInt: parsing \"1e1000\": invalid syntax", floatErr: "strconv.ParseFloat: parsing \"1e1000\": value out of range"}, } // Independent of Decode, basic coverage of the accessors in Number func TestNumberAccessors(t *testing.T) { for _, tt := range numberTests { n := Number(tt.in) if s := n.String(); s != tt.in { t.Errorf("Number(%q).String() is %q", tt.in, s) } if i, err := n.Int64(); err == nil && tt.intErr == "" && i != tt.i { t.Errorf("Number(%q).Int64() is %d", tt.in, i) } else if (err == nil && tt.intErr != "") || (err != nil && err.Error() != tt.intErr) { t.Errorf("Number(%q).Int64() wanted error %q but got: %v", tt.in, tt.intErr, err) } if f, err := n.Float64(); err == nil && tt.floatErr == "" && f != tt.f { t.Errorf("Number(%q).Float64() is %g", tt.in, f) } else if (err == nil && tt.floatErr != "") || (err != nil && err.Error() != tt.floatErr) { t.Errorf("Number(%q).Float64() wanted error %q but got: %v", tt.in, tt.floatErr, err) } } } func TestLargeByteSlice(t *testing.T) { s0 := make([]byte, 2000) for i := range s0 { s0[i] = byte(i) } b, err := Marshal(s0) if err != nil { t.Fatalf("Marshal: %v", err) } var s1 []byte if err := Unmarshal(b, &s1); err != nil { t.Fatalf("Unmarshal: %v", err) } if !bytes.Equal(s0, s1) { t.Errorf("Marshal large byte slice") diff(t, s0, s1) } } type Xint struct { X int } func TestUnmarshalInterface(t *testing.T) { var xint Xint var i any = &xint if err := Unmarshal([]byte(`{"X":1}`), &i); err != nil { t.Fatalf("Unmarshal: %v", err) } if xint.X != 1 { t.Fatalf("Did not write to xint") } } func TestUnmarshalPtrPtr(t *testing.T) { var xint Xint pxint := &xint if err := Unmarshal([]byte(`{"X":1}`), &pxint); err != nil { t.Fatalf("Unmarshal: %v", err) } if xint.X != 1 { t.Fatalf("Did not write to xint") } } func TestEscape(t *testing.T) { const input = `"foobar"` + " [\u2028 \u2029]" const expected = `"\"foobar\"\u003chtml\u003e [\u2028 \u2029]"` b, err := Marshal(input) if err != nil { t.Fatalf("Marshal error: %v", err) } if s := string(b); s != expected { t.Errorf("Encoding of [%s]:\n got [%s]\nwant [%s]", input, s, expected) } } // WrongString is a struct that's misusing the ,string modifier. type WrongString struct { Message string `json:"result,string"` } type wrongStringTest struct { in, err string } var wrongStringTests = []wrongStringTest{ {`{"result":"x"}`, `json: invalid use of ,string struct tag, trying to unmarshal "x" into string`}, {`{"result":"foo"}`, `json: invalid use of ,string struct tag, trying to unmarshal "foo" into string`}, {`{"result":"123"}`, `json: invalid use of ,string struct tag, trying to unmarshal "123" into string`}, {`{"result":123}`, `json: invalid use of ,string struct tag, trying to unmarshal unquoted value into string`}, {`{"result":"\""}`, `json: invalid use of ,string struct tag, trying to unmarshal "\"" into string`}, {`{"result":"\"foo"}`, `json: invalid use of ,string struct tag, trying to unmarshal "\"foo" into string`}, } // If people misuse the ,string modifier, the error message should be // helpful, telling the user that they're doing it wrong. func TestErrorMessageFromMisusedString(t *testing.T) { for n, tt := range wrongStringTests { r := strings.NewReader(tt.in) var s WrongString err := NewDecoder(r).Decode(&s) assertErrorPresence(t, errors.New(tt.err), err, n) } } func noSpace(c rune) rune { if isSpace(byte(c)) { // only used for ascii return -1 } return c } type All struct { Bool bool Int int Int8 int8 Int16 int16 Int32 int32 Int64 int64 Uint uint Uint8 uint8 Uint16 uint16 Uint32 uint32 Uint64 uint64 Uintptr uintptr Float32 float32 Float64 float64 Foo string `json:"bar"` Foo2 string `json:"bar2,dummyopt"` IntStr int64 `json:",string"` UintptrStr uintptr `json:",string"` PBool *bool PInt *int PInt8 *int8 PInt16 *int16 PInt32 *int32 PInt64 *int64 PUint *uint PUint8 *uint8 PUint16 *uint16 PUint32 *uint32 PUint64 *uint64 PUintptr *uintptr PFloat32 *float32 PFloat64 *float64 String string PString *string Map map[string]Small MapP map[string]*Small PMap *map[string]Small PMapP *map[string]*Small EmptyMap map[string]Small NilMap map[string]Small Slice []Small SliceP []*Small PSlice *[]Small PSliceP *[]*Small EmptySlice []Small NilSlice []Small StringSlice []string ByteSlice []byte Small Small PSmall *Small PPSmall **Small Interface any PInterface *any unexported int } type Small struct { Tag string } var allValue = All{ Bool: true, Int: 2, Int8: 3, Int16: 4, Int32: 5, Int64: 6, Uint: 7, Uint8: 8, Uint16: 9, Uint32: 10, Uint64: 11, Uintptr: 12, Float32: 14.1, Float64: 15.1, Foo: "foo", Foo2: "foo2", IntStr: 42, UintptrStr: 44, String: "16", Map: map[string]Small{ "17": {Tag: "tag17"}, "18": {Tag: "tag18"}, }, MapP: map[string]*Small{ "19": {Tag: "tag19"}, "20": nil, }, EmptyMap: map[string]Small{}, Slice: []Small{{Tag: "tag20"}, {Tag: "tag21"}}, SliceP: []*Small{{Tag: "tag22"}, nil, {Tag: "tag23"}}, EmptySlice: []Small{}, StringSlice: []string{"str24", "str25", "str26"}, ByteSlice: []byte{27, 28, 29}, Small: Small{Tag: "tag30"}, PSmall: &Small{Tag: "tag31"}, Interface: 5.2, } var pallValue = All{ PBool: &allValue.Bool, PInt: &allValue.Int, PInt8: &allValue.Int8, PInt16: &allValue.Int16, PInt32: &allValue.Int32, PInt64: &allValue.Int64, PUint: &allValue.Uint, PUint8: &allValue.Uint8, PUint16: &allValue.Uint16, PUint32: &allValue.Uint32, PUint64: &allValue.Uint64, PUintptr: &allValue.Uintptr, PFloat32: &allValue.Float32, PFloat64: &allValue.Float64, PString: &allValue.String, PMap: &allValue.Map, PMapP: &allValue.MapP, PSlice: &allValue.Slice, PSliceP: &allValue.SliceP, PPSmall: &allValue.PSmall, PInterface: &allValue.Interface, } var allValueIndent = `{ "Bool": true, "Int": 2, "Int8": 3, "Int16": 4, "Int32": 5, "Int64": 6, "Uint": 7, "Uint8": 8, "Uint16": 9, "Uint32": 10, "Uint64": 11, "Uintptr": 12, "Float32": 14.1, "Float64": 15.1, "bar": "foo", "bar2": "foo2", "IntStr": "42", "UintptrStr": "44", "PBool": null, "PInt": null, "PInt8": null, "PInt16": null, "PInt32": null, "PInt64": null, "PUint": null, "PUint8": null, "PUint16": null, "PUint32": null, "PUint64": null, "PUintptr": null, "PFloat32": null, "PFloat64": null, "String": "16", "PString": null, "Map": { "17": { "Tag": "tag17" }, "18": { "Tag": "tag18" } }, "MapP": { "19": { "Tag": "tag19" }, "20": null }, "PMap": null, "PMapP": null, "EmptyMap": {}, "NilMap": null, "Slice": [ { "Tag": "tag20" }, { "Tag": "tag21" } ], "SliceP": [ { "Tag": "tag22" }, null, { "Tag": "tag23" } ], "PSlice": null, "PSliceP": null, "EmptySlice": [], "NilSlice": null, "StringSlice": [ "str24", "str25", "str26" ], "ByteSlice": "Gxwd", "Small": { "Tag": "tag30" }, "PSmall": { "Tag": "tag31" }, "PPSmall": null, "Interface": 5.2, "PInterface": null }` var allValueCompact = strings.Map(noSpace, allValueIndent) var pallValueIndent = `{ "Bool": false, "Int": 0, "Int8": 0, "Int16": 0, "Int32": 0, "Int64": 0, "Uint": 0, "Uint8": 0, "Uint16": 0, "Uint32": 0, "Uint64": 0, "Uintptr": 0, "Float32": 0, "Float64": 0, "bar": "", "bar2": "", "IntStr": "0", "UintptrStr": "0", "PBool": true, "PInt": 2, "PInt8": 3, "PInt16": 4, "PInt32": 5, "PInt64": 6, "PUint": 7, "PUint8": 8, "PUint16": 9, "PUint32": 10, "PUint64": 11, "PUintptr": 12, "PFloat32": 14.1, "PFloat64": 15.1, "String": "", "PString": "16", "Map": null, "MapP": null, "PMap": { "17": { "Tag": "tag17" }, "18": { "Tag": "tag18" } }, "PMapP": { "19": { "Tag": "tag19" }, "20": null }, "EmptyMap": null, "NilMap": null, "Slice": null, "SliceP": null, "PSlice": [ { "Tag": "tag20" }, { "Tag": "tag21" } ], "PSliceP": [ { "Tag": "tag22" }, null, { "Tag": "tag23" } ], "EmptySlice": null, "NilSlice": null, "StringSlice": null, "ByteSlice": null, "Small": { "Tag": "" }, "PSmall": null, "PPSmall": { "Tag": "tag31" }, "Interface": null, "PInterface": 5.2 }` var pallValueCompact = strings.Map(noSpace, pallValueIndent) func TestRefUnmarshal(t *testing.T) { type S struct { // Ref is defined in encode_test.go. R0 Ref R1 *Ref R2 RefText R3 *RefText } want := S{ R0: 12, R1: new(Ref), R2: 13, R3: new(RefText), } *want.R1 = 12 *want.R3 = 13 var got S if err := Unmarshal([]byte(`{"R0":"ref","R1":"ref","R2":"ref","R3":"ref"}`), &got); err != nil { t.Fatalf("Unmarshal: %v", err) } if !reflect.DeepEqual(got, want) { t.Errorf("got %+v, want %+v", got, want) } } // Test that the empty string doesn't panic decoding when ,string is specified // Issue 3450 func TestEmptyString(t *testing.T) { type T2 struct { Number1 int `json:",string"` Number2 int `json:",string"` } data := `{"Number1":"1", "Number2":""}` dec := NewDecoder(strings.NewReader(data)) var t2 T2 err := dec.Decode(&t2) if err == nil { t.Fatal("Decode: did not return error") } if t2.Number1 != 1 { t.Fatal("Decode: did not set Number1") } } // Test that a null for ,string is not replaced with the previous quoted string (issue 7046). // It should also not be an error (issue 2540, issue 8587). func TestNullString(t *testing.T) { type T struct { A int `json:",string"` B int `json:",string"` C *int `json:",string"` } data := []byte(`{"A": "1", "B": null, "C": null}`) var s T s.B = 1 s.C = new(int) *s.C = 2 err := Unmarshal(data, &s) if err != nil { t.Fatalf("Unmarshal: %v", err) } if s.B != 1 || s.C != nil { t.Fatalf("after Unmarshal, s.B=%d, s.C=%p, want 1, nil", s.B, s.C) } } func intp(x int) *int { p := new(int) *p = x return p } func intpp(x *int) **int { pp := new(*int) *pp = x return pp } var interfaceSetTests = []struct { pre any json string post any }{ {"foo", `"bar"`, "bar"}, {"foo", `2`, 2.0}, {"foo", `true`, true}, {"foo", `null`, nil}, {nil, `null`, nil}, {new(int), `null`, nil}, {(*int)(nil), `null`, nil}, {new(*int), `null`, new(*int)}, {(**int)(nil), `null`, nil}, {intp(1), `null`, nil}, {intpp(nil), `null`, intpp(nil)}, {intpp(intp(1)), `null`, intpp(nil)}, } func TestInterfaceSet(t *testing.T) { for _, tt := range interfaceSetTests { b := struct{ X any }{tt.pre} blob := `{"X":` + tt.json + `}` if err := Unmarshal([]byte(blob), &b); err != nil { t.Errorf("Unmarshal %#q: %v", blob, err) continue } if !reflect.DeepEqual(b.X, tt.post) { t.Errorf("Unmarshal %#q into %#v: X=%#v, want %#v", blob, tt.pre, b.X, tt.post) } } } type NullTest struct { Bool bool Int int Int8 int8 Int16 int16 Int32 int32 Int64 int64 Uint uint Uint8 uint8 Uint16 uint16 Uint32 uint32 Uint64 uint64 Float32 float32 Float64 float64 String string PBool *bool Map map[string]string Slice []string Interface any PRaw *RawMessage PTime *time.Time PBigInt *big.Int PText *MustNotUnmarshalText PBuffer *bytes.Buffer // has methods, just not relevant ones PStruct *struct{} Raw RawMessage Time time.Time BigInt big.Int Text MustNotUnmarshalText Buffer bytes.Buffer Struct struct{} } type NullTestStrings struct { Bool bool `json:",string"` Int int `json:",string"` Int8 int8 `json:",string"` Int16 int16 `json:",string"` Int32 int32 `json:",string"` Int64 int64 `json:",string"` Uint uint `json:",string"` Uint8 uint8 `json:",string"` Uint16 uint16 `json:",string"` Uint32 uint32 `json:",string"` Uint64 uint64 `json:",string"` Float32 float32 `json:",string"` Float64 float64 `json:",string"` String string `json:",string"` PBool *bool `json:",string"` Map map[string]string `json:",string"` Slice []string `json:",string"` Interface any `json:",string"` PRaw *RawMessage `json:",string"` PTime *time.Time `json:",string"` PBigInt *big.Int `json:",string"` PText *MustNotUnmarshalText `json:",string"` PBuffer *bytes.Buffer `json:",string"` PStruct *struct{} `json:",string"` Raw RawMessage `json:",string"` Time time.Time `json:",string"` BigInt big.Int `json:",string"` Text MustNotUnmarshalText `json:",string"` Buffer bytes.Buffer `json:",string"` Struct struct{} `json:",string"` } // JSON null values should be ignored for primitives and string values instead of resulting in an error. // Issue 2540 func TestUnmarshalNulls(t *testing.T) { // Unmarshal docs: // The JSON null value unmarshals into an interface, map, pointer, or slice // by setting that Go value to nil. Because null is often used in JSON to mean // ``not present,'' unmarshaling a JSON null into any other Go type has no effect // on the value and produces no error. jsonData := []byte(`{ "Bool" : null, "Int" : null, "Int8" : null, "Int16" : null, "Int32" : null, "Int64" : null, "Uint" : null, "Uint8" : null, "Uint16" : null, "Uint32" : null, "Uint64" : null, "Float32" : null, "Float64" : null, "String" : null, "PBool": null, "Map": null, "Slice": null, "Interface": null, "PRaw": null, "PTime": null, "PBigInt": null, "PText": null, "PBuffer": null, "PStruct": null, "Raw": null, "Time": null, "BigInt": null, "Text": null, "Buffer": null, "Struct": null }`) nulls := NullTest{ Bool: true, Int: 2, Int8: 3, Int16: 4, Int32: 5, Int64: 6, Uint: 7, Uint8: 8, Uint16: 9, Uint32: 10, Uint64: 11, Float32: 12.1, Float64: 13.1, String: "14", PBool: new(bool), Map: map[string]string{}, Slice: []string{}, Interface: new(MustNotUnmarshalJSON), PRaw: new(RawMessage), PTime: new(time.Time), PBigInt: new(big.Int), PText: new(MustNotUnmarshalText), PStruct: new(struct{}), PBuffer: new(bytes.Buffer), Raw: RawMessage("123"), Time: time.Unix(123456789, 0), BigInt: *big.NewInt(123), } before := nulls.Time.String() err := Unmarshal(jsonData, &nulls) if err != nil { t.Errorf("Unmarshal of null values failed: %v", err) } if !nulls.Bool || nulls.Int != 2 || nulls.Int8 != 3 || nulls.Int16 != 4 || nulls.Int32 != 5 || nulls.Int64 != 6 || nulls.Uint != 7 || nulls.Uint8 != 8 || nulls.Uint16 != 9 || nulls.Uint32 != 10 || nulls.Uint64 != 11 || nulls.Float32 != 12.1 || nulls.Float64 != 13.1 || nulls.String != "14" { t.Errorf("Unmarshal of null values affected primitives") } if nulls.PBool != nil { t.Errorf("Unmarshal of null did not clear nulls.PBool") } if nulls.Map != nil { t.Errorf("Unmarshal of null did not clear nulls.Map") } if nulls.Slice != nil { t.Errorf("Unmarshal of null did not clear nulls.Slice") } if nulls.Interface != nil { t.Errorf("Unmarshal of null did not clear nulls.Interface") } if nulls.PRaw != nil { t.Errorf("Unmarshal of null did not clear nulls.PRaw") } if nulls.PTime != nil { t.Errorf("Unmarshal of null did not clear nulls.PTime") } if nulls.PBigInt != nil { t.Errorf("Unmarshal of null did not clear nulls.PBigInt") } if nulls.PText != nil { t.Errorf("Unmarshal of null did not clear nulls.PText") } if nulls.PBuffer != nil { t.Errorf("Unmarshal of null did not clear nulls.PBuffer") } if nulls.PStruct != nil { t.Errorf("Unmarshal of null did not clear nulls.PStruct") } if string(nulls.Raw) != "null" { t.Errorf("Unmarshal of RawMessage null did not record null: %v", string(nulls.Raw)) } if nulls.Time.String() != before { t.Errorf("Unmarshal of time.Time null set time to %v", nulls.Time.String()) } if nulls.BigInt.String() != "123" { t.Errorf("Unmarshal of big.Int null set int to %v", nulls.BigInt.String()) } } type MustNotUnmarshalJSON struct{} func (x MustNotUnmarshalJSON) UnmarshalJSON(data []byte) error { return errors.New("MustNotUnmarshalJSON was used") } type MustNotUnmarshalText struct{} func (x MustNotUnmarshalText) UnmarshalText(text []byte) error { return errors.New("MustNotUnmarshalText was used") } func TestStringKind(t *testing.T) { type stringKind string var m1, m2 map[stringKind]int m1 = map[stringKind]int{ "foo": 42, } data, err := Marshal(m1) if err != nil { t.Errorf("Unexpected error marshaling: %v", err) } err = Unmarshal(data, &m2) if err != nil { t.Errorf("Unexpected error unmarshaling: %v", err) } if !reflect.DeepEqual(m1, m2) { t.Error("Items should be equal after encoding and then decoding") } } // Custom types with []byte as underlying type could not be marshaled // and then unmarshaled. // Issue 8962. func TestByteKind(t *testing.T) { type byteKind []byte a := byteKind("hello") data, err := Marshal(a) if err != nil { t.Error(err) } var b byteKind err = Unmarshal(data, &b) if err != nil { t.Fatal(err) } if !reflect.DeepEqual(a, b) { t.Errorf("expected %v == %v", a, b) } } // The fix for issue 8962 introduced a regression. // Issue 12921. func TestSliceOfCustomByte(t *testing.T) { type Uint8 uint8 a := []Uint8("hello") data, err := Marshal(a) if err != nil { t.Fatal(err) } var b []Uint8 err = Unmarshal(data, &b) if err != nil { t.Fatal(err) } if !reflect.DeepEqual(a, b) { t.Fatalf("expected %v == %v", a, b) } } var decodeTypeErrorTests = []struct { dest any src string }{ {new(string), `{"user": "name"}`}, // issue 4628. {new(error), `{}`}, // issue 4222 {new(error), `[]`}, {new(error), `""`}, {new(error), `123`}, {new(error), `true`}, } func TestUnmarshalTypeError(t *testing.T) { for _, item := range decodeTypeErrorTests { err := Unmarshal([]byte(item.src), item.dest) if _, ok := err.(*UnmarshalTypeError); !ok { t.Errorf("expected type error for Unmarshal(%q, type %T): got %T", item.src, item.dest, err) } } } var unmarshalSyntaxTests = []string{ "tru", "fals", "nul", "123e", `"hello`, `[1,2,3`, `{"key":1`, `{"key":1,`, } func TestUnmarshalSyntax(t *testing.T) { var x any for _, src := range unmarshalSyntaxTests { err := Unmarshal([]byte(src), &x) if _, ok := err.(*SyntaxError); !ok { t.Errorf("expected syntax error for Unmarshal(%q): got %T", src, err) } } } // Test handling of unexported fields that should be ignored. // Issue 4660 type unexportedFields struct { Name string m map[string]any `json:"-"` m2 map[string]any `json:"abcd"` s []int `json:"-"` } func TestUnmarshalUnexported(t *testing.T) { input := `{"Name": "Bob", "m": {"x": 123}, "m2": {"y": 456}, "abcd": {"z": 789}, "s": [2, 3]}` want := &unexportedFields{Name: "Bob"} out := &unexportedFields{} err := Unmarshal([]byte(input), out) if err != nil { t.Errorf("got error %v, expected nil", err) } if !reflect.DeepEqual(out, want) { t.Errorf("got %q, want %q", out, want) } } // Time3339 is a time.Time which encodes to and from JSON // as an RFC 3339 time in UTC. type Time3339 time.Time func (t *Time3339) UnmarshalJSON(b []byte) error { if len(b) < 2 || b[0] != '"' || b[len(b)-1] != '"' { return fmt.Errorf("types: failed to unmarshal non-string value %q as an RFC 3339 time", b) } tm, err := time.Parse(time.RFC3339, string(b[1:len(b)-1])) if err != nil { return err } *t = Time3339(tm) return nil } func TestUnmarshalJSONLiteralError(t *testing.T) { var t3 Time3339 err := Unmarshal([]byte(`"0000-00-00T00:00:00Z"`), &t3) if err == nil { t.Fatalf("expected error; got time %v", time.Time(t3)) } if !strings.Contains(err.Error(), "range") { t.Errorf("got err = %v; want out of range error", err) } } // Test that extra object elements in an array do not result in a // "data changing underfoot" error. // Issue 3717 func TestSkipArrayObjects(t *testing.T) { json := `[{}]` var dest [0]any err := Unmarshal([]byte(json), &dest) if err != nil { t.Errorf("got error %q, want nil", err) } } // Test semantics of pre-filled struct fields and pre-filled map fields. // Issue 4900. func TestPrefilled(t *testing.T) { ptrToMap := func(m map[string]any) *map[string]any { return &m } // Values here change, cannot reuse table across runs. prefillTests := []struct { in string ptr any out any }{ { in: `{"X": 1, "Y": 2}`, ptr: &XYZ{X: float32(3), Y: int16(4), Z: 1.5}, out: &XYZ{X: float64(1), Y: float64(2), Z: 1.5}, }, { in: `{"X": 1, "Y": 2}`, ptr: ptrToMap(map[string]any{"X": float32(3), "Y": int16(4), "Z": 1.5}), out: ptrToMap(map[string]any{"X": float64(1), "Y": float64(2), "Z": 1.5}), }, } for _, tt := range prefillTests { ptrstr := fmt.Sprintf("%v", tt.ptr) err := Unmarshal([]byte(tt.in), tt.ptr) // tt.ptr edited here if err != nil { t.Errorf("Unmarshal: %v", err) } if !reflect.DeepEqual(tt.ptr, tt.out) { t.Errorf("Unmarshal(%#q, %s): have %v, want %v", tt.in, ptrstr, tt.ptr, tt.out) } } } var invalidUnmarshalTests = []struct { v any want string }{ {nil, "json: Unmarshal(nil)"}, {struct{}{}, "json: Unmarshal(non-pointer struct {})"}, {(*int)(nil), "json: Unmarshal(nil *int)"}, } func TestInvalidUnmarshal(t *testing.T) { buf := []byte(`{"a":"1"}`) for _, tt := range invalidUnmarshalTests { err := Unmarshal(buf, tt.v) if err == nil { t.Errorf("Unmarshal expecting error, got nil") continue } if got := err.Error(); got != tt.want { t.Errorf("Unmarshal = %q; want %q", got, tt.want) } } } var invalidUnmarshalTextTests = []struct { v any want string }{ {nil, "json: Unmarshal(nil)"}, {struct{}{}, "json: Unmarshal(non-pointer struct {})"}, {(*int)(nil), "json: Unmarshal(nil *int)"}, {new(net.IP), "json: cannot unmarshal number into Go value of type *net.IP"}, } func TestInvalidUnmarshalText(t *testing.T) { buf := []byte(`123`) for _, tt := range invalidUnmarshalTextTests { err := Unmarshal(buf, tt.v) if err == nil { t.Errorf("Unmarshal expecting error, got nil") continue } if got := err.Error(); got != tt.want { t.Errorf("Unmarshal = %q; want %q", got, tt.want) } } } // Test that string option is ignored for invalid types. // Issue 9812. func TestInvalidStringOption(t *testing.T) { num := 0 item := struct { T time.Time `json:",string"` M map[string]string `json:",string"` S []string `json:",string"` A [1]string `json:",string"` I any `json:",string"` P *int `json:",string"` }{M: make(map[string]string), S: make([]string, 0), I: num, P: &num} data, err := Marshal(item) if err != nil { t.Fatalf("Marshal: %v", err) } err = Unmarshal(data, &item) if err != nil { t.Fatalf("Unmarshal: %v", err) } } // Test unmarshal behavior with regards to embedded unexported structs. // // (Issue 21357) If the embedded struct is a pointer and is unallocated, // this returns an error because unmarshal cannot set the field. // // (Issue 24152) If the embedded struct is given an explicit name, // ensure that the normal unmarshal logic does not panic in reflect. // // (Issue 28145) If the embedded struct is given an explicit name and has // exported methods, don't cause a panic trying to get its value. func TestUnmarshalEmbeddedUnexported(t *testing.T) { type ( embed1 struct{ Q int } embed2 struct{ Q int } embed3 struct { Q int64 `json:",string"` } S1 struct { *embed1 R int } S2 struct { *embed1 Q int } S3 struct { embed1 R int } S4 struct { *embed1 embed2 } S5 struct { *embed3 R int } S6 struct { embed1 `json:"embed1"` } S7 struct { embed1 `json:"embed1"` embed2 } S8 struct { embed1 `json:"embed1"` embed2 `json:"embed2"` Q int } S9 struct { unexportedWithMethods `json:"embed"` } ) tests := []struct { in string ptr any out any err error }{{ // Error since we cannot set S1.embed1, but still able to set S1.R. in: `{"R":2,"Q":1}`, ptr: new(S1), out: &S1{R: 2}, err: fmt.Errorf("json: cannot set embedded pointer to unexported struct: json.embed1"), }, { // The top level Q field takes precedence. in: `{"Q":1}`, ptr: new(S2), out: &S2{Q: 1}, }, { // No issue with non-pointer variant. in: `{"R":2,"Q":1}`, ptr: new(S3), out: &S3{embed1: embed1{Q: 1}, R: 2}, }, { // No error since both embedded structs have field R, which annihilate each other. // Thus, no attempt is made at setting S4.embed1. in: `{"R":2}`, ptr: new(S4), out: new(S4), }, { // Error since we cannot set S5.embed1, but still able to set S5.R. in: `{"R":2,"Q":1}`, ptr: new(S5), out: &S5{R: 2}, err: fmt.Errorf("json: cannot set embedded pointer to unexported struct: json.embed3"), }, { // Issue 24152, ensure decodeState.indirect does not panic. in: `{"embed1": {"Q": 1}}`, ptr: new(S6), out: &S6{embed1{1}}, }, { // Issue 24153, check that we can still set forwarded fields even in // the presence of a name conflict. // // This relies on obscure behavior of reflect where it is possible // to set a forwarded exported field on an unexported embedded struct // even though there is a name conflict, even when it would have been // impossible to do so according to Go visibility rules. // Go forbids this because it is ambiguous whether S7.Q refers to // S7.embed1.Q or S7.embed2.Q. Since embed1 and embed2 are unexported, // it should be impossible for an external package to set either Q. // // It is probably okay for a future reflect change to break this. in: `{"embed1": {"Q": 1}, "Q": 2}`, ptr: new(S7), out: &S7{embed1{1}, embed2{2}}, }, { // Issue 24153, similar to the S7 case. in: `{"embed1": {"Q": 1}, "embed2": {"Q": 2}, "Q": 3}`, ptr: new(S8), out: &S8{embed1{1}, embed2{2}, 3}, }, { // Issue 228145, similar to the cases above. in: `{"embed": {}}`, ptr: new(S9), out: &S9{}, }} for i, tt := range tests { err := Unmarshal([]byte(tt.in), tt.ptr) if !equalError(err, tt.err) { t.Errorf("#%d: %v, want %v", i, err, tt.err) } if !reflect.DeepEqual(tt.ptr, tt.out) { t.Errorf("#%d: mismatch\ngot: %#+v\nwant: %#+v", i, tt.ptr, tt.out) } } } type unmarshalPanic struct{} func (unmarshalPanic) UnmarshalJSON([]byte) error { panic(0xdead) } func TestUnmarshalPanic(t *testing.T) { defer func() { if got := recover(); !reflect.DeepEqual(got, 0xdead) { t.Errorf("panic() = (%T)(%v), want 0xdead", got, got) } }() Unmarshal([]byte("{}"), &unmarshalPanic{}) t.Fatalf("Unmarshal should have panicked") } // The decoder used to hang if decoding into an interface pointing to its own address. // See golang.org/issues/31740. func TestUnmarshalRecursivePointer(t *testing.T) { var v any v = &v data := []byte(`{"a": "b"}`) if err := Unmarshal(data, v); err != nil { t.Fatal(err) } } golang-github-segmentio-encoding-0.5.3/json/golang_encode_test.go000066400000000000000000000574701504206176600251710ustar00rootroot00000000000000// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package json import ( "bytes" "fmt" "log" "math" "reflect" "regexp" "strconv" "testing" "unicode" ) type Optionals struct { Sr string `json:"sr"` So string `json:"so,omitempty"` Sw string `json:"-"` Ir int `json:"omitempty"` // actually named omitempty, not an option Io int `json:"io,omitempty"` Slr []string `json:"slr,random"` Slo []string `json:"slo,omitempty"` Mr map[string]any `json:"mr"` Mo map[string]any `json:",omitempty"` Fr float64 `json:"fr"` Fo float64 `json:"fo,omitempty"` Br bool `json:"br"` Bo bool `json:"bo,omitempty"` Ur uint `json:"ur"` Uo uint `json:"uo,omitempty"` Str struct{} `json:"str"` Sto struct{} `json:"sto,omitempty"` } var optionalsExpected = `{ "sr": "", "omitempty": 0, "slr": null, "mr": {}, "fr": 0, "br": false, "ur": 0, "str": {}, "sto": {} }` func TestOmitEmpty(t *testing.T) { var o Optionals o.Sw = "something" o.Mr = map[string]any{} o.Mo = map[string]any{} got, err := MarshalIndent(&o, "", " ") if err != nil { t.Fatal(err) } if got := string(got); got != optionalsExpected { t.Errorf(" got: %s\nwant: %s\n", got, optionalsExpected) } } type StringTag struct { BoolStr bool `json:",string"` IntStr int64 `json:",string"` UintptrStr uintptr `json:",string"` StrStr string `json:",string"` } var stringTagExpected = `{ "BoolStr": "true", "IntStr": "42", "UintptrStr": "44", "StrStr": "\"xzbit\"" }` func TestStringTag(t *testing.T) { var s StringTag s.BoolStr = true s.IntStr = 42 s.UintptrStr = 44 s.StrStr = "xzbit" got, err := MarshalIndent(&s, "", " ") if err != nil { t.Fatal(err) } if got := string(got); got != stringTagExpected { t.Fatalf(" got: %s\nwant: %s\n", got, stringTagExpected) } // Verify that it round-trips. var s2 StringTag err = NewDecoder(bytes.NewReader(got)).Decode(&s2) if err != nil { t.Fatalf("Decode: %v", err) } if !reflect.DeepEqual(s, s2) { t.Fatalf("decode didn't match.\nsource: %#v\nEncoded as:\n%s\ndecode: %#v", s, string(got), s2) } } // byte slices are special even if they're renamed types. type ( renamedByte byte renamedByteSlice []byte renamedRenamedByteSlice []renamedByte ) func TestEncodeRenamedByteSlice(t *testing.T) { s := renamedByteSlice("abc") result, err := Marshal(s) if err != nil { t.Fatal(err) } expect := `"YWJj"` if string(result) != expect { t.Errorf(" got %s want %s", result, expect) } r := renamedRenamedByteSlice("abc") result, err = Marshal(r) if err != nil { t.Fatal(err) } if string(result) != expect { t.Errorf(" got %s want %s", result, expect) } } var unsupportedValues = []any{ math.NaN(), math.Inf(-1), math.Inf(1), } func TestUnsupportedValues(t *testing.T) { for _, v := range unsupportedValues { if _, err := Marshal(v); err != nil { if _, ok := err.(*UnsupportedValueError); !ok { t.Errorf("for %v, got %T want UnsupportedValueError", v, err) } } else { t.Errorf("for %v, expected error", v) } } } // Ref has Marshaler and Unmarshaler methods with pointer receiver. type Ref int func (*Ref) MarshalJSON() ([]byte, error) { return []byte(`"ref"`), nil } func (r *Ref) UnmarshalJSON([]byte) error { *r = 12 return nil } // Val has Marshaler methods with value receiver. type Val int func (Val) MarshalJSON() ([]byte, error) { return []byte(`"val"`), nil } // RefText has Marshaler and Unmarshaler methods with pointer receiver. type RefText int func (*RefText) MarshalText() ([]byte, error) { return []byte(`"ref"`), nil } func (r *RefText) UnmarshalText([]byte) error { *r = 13 return nil } // ValText has Marshaler methods with value receiver. type ValText int func (ValText) MarshalText() ([]byte, error) { return []byte(`"val"`), nil } func TestRefValMarshal(t *testing.T) { s := struct { R0 Ref R1 *Ref R2 RefText R3 *RefText V0 Val V1 *Val V2 ValText V3 *ValText }{ R0: 12, R1: new(Ref), R2: 14, R3: new(RefText), V0: 13, V1: new(Val), V2: 15, V3: new(ValText), } const want = `{"R0":"ref","R1":"ref","R2":"\"ref\"","R3":"\"ref\"","V0":"val","V1":"val","V2":"\"val\"","V3":"\"val\""}` b, err := Marshal(&s) if err != nil { t.Fatalf("Marshal: %v", err) } if got := string(b); got != want { t.Errorf("got %q, want %q", got, want) } } // C implements Marshaler and returns unescaped JSON. type C int func (C) MarshalJSON() ([]byte, error) { return []byte(`"<&>"`), nil } // CText implements Marshaler and returns unescaped text. type CText int func (CText) MarshalText() ([]byte, error) { return []byte(`"<&>"`), nil } func TestMarshalerEscaping(t *testing.T) { var c C want := `"\u003c\u0026\u003e"` b, err := Marshal(c) if err != nil { t.Fatalf("Marshal(c): %v", err) } if got := string(b); got != want { t.Errorf("Marshal(c) = %#q, want %#q", got, want) } var ct CText want = `"\"\u003c\u0026\u003e\""` b, err = Marshal(ct) if err != nil { t.Fatalf("Marshal(ct): %v", err) } if got := string(b); got != want { t.Errorf("Marshal(ct) = %#q, want %#q", got, want) } } func TestAnonymousFields(t *testing.T) { tests := []struct { label string // Test name makeInput func() any // Function to create input value want string // Expected JSON output }{ { // Both S1 and S2 have a field named X. From the perspective of S, // it is ambiguous which one X refers to. // This should not serialize either field. label: "AmbiguousField", makeInput: func() any { type ( S1 struct{ x, X int } S2 struct{ x, X int } S struct { S1 S2 } ) return S{S1{1, 2}, S2{3, 4}} }, want: `{}`, }, { label: "DominantField", // Both S1 and S2 have a field named X, but since S has an X field as // well, it takes precedence over S1.X and S2.X. makeInput: func() any { type ( S1 struct{ x, X int } S2 struct{ x, X int } S struct { S1 S2 x, X int } ) return S{S1{1, 2}, S2{3, 4}, 5, 6} }, want: `{"X":6}`, }, { // Unexported embedded field of non-struct type should not be serialized. label: "UnexportedEmbeddedInt", makeInput: func() any { type ( myInt int S struct{ myInt } ) return S{5} }, want: `{}`, }, { // Exported embedded field of non-struct type should be serialized. label: "ExportedEmbeddedInt", makeInput: func() any { type ( MyInt int S struct{ MyInt } ) return S{5} }, want: `{"MyInt":5}`, }, { // Unexported embedded field of pointer to non-struct type // should not be serialized. label: "UnexportedEmbeddedIntPointer", makeInput: func() any { type ( myInt int S struct{ *myInt } ) s := S{new(myInt)} *s.myInt = 5 return s }, want: `{}`, }, { // Exported embedded field of pointer to non-struct type // should be serialized. label: "ExportedEmbeddedIntPointer", makeInput: func() any { type ( MyInt int S struct{ *MyInt } ) s := S{new(MyInt)} *s.MyInt = 5 return s }, want: `{"MyInt":5}`, }, { // Exported fields of embedded structs should have their // exported fields be serialized regardless of whether the struct types // themselves are exported. label: "EmbeddedStruct", makeInput: func() any { type ( s1 struct{ x, X int } S2 struct{ y, Y int } S struct { s1 S2 } ) return S{s1{1, 2}, S2{3, 4}} }, want: `{"X":2,"Y":4}`, }, { // Exported fields of pointers to embedded structs should have their // exported fields be serialized regardless of whether the struct types // themselves are exported. label: "EmbeddedStructPointer", makeInput: func() any { type ( s1 struct{ x, X int } S2 struct{ y, Y int } S struct { *s1 *S2 } ) return S{&s1{1, 2}, &S2{3, 4}} }, want: `{"X":2,"Y":4}`, }, { // Exported fields on embedded unexported structs at multiple levels // of nesting should still be serialized. label: "NestedStructAndInts", makeInput: func() any { type ( MyInt1 int MyInt2 int myInt int s2 struct { MyInt2 myInt } s1 struct { MyInt1 myInt s2 } S struct { s1 myInt } ) return S{s1{1, 2, s2{3, 4}}, 6} }, want: `{"MyInt1":1,"MyInt2":3}`, }, { // If an anonymous struct pointer field is nil, we should ignore // the embedded fields behind it. Not properly doing so may // result in the wrong output or reflect panics. label: "EmbeddedFieldBehindNilPointer", makeInput: func() any { type ( S2 struct{ Field string } S struct{ *S2 } ) return S{} }, want: `{}`, }, } for _, tt := range tests { t.Run(tt.label, func(t *testing.T) { b, err := Marshal(tt.makeInput()) if err != nil { t.Fatalf("Marshal() = %v, want nil error", err) } if string(b) != tt.want { t.Fatalf("Marshal() = %q, want %q", b, tt.want) } }) } } type BugA struct { S string } type BugB struct { BugA S string } type BugC struct { S string } // Legal Go: We never use the repeated embedded field (S). type BugX struct { A int BugA BugB } // Issue 16042. Even if a nil interface value is passed in // as long as it implements MarshalJSON, it should be marshaled. type nilMarshaler string func (nm *nilMarshaler) MarshalJSON() ([]byte, error) { if nm == nil { return Marshal("0zenil0") } return Marshal("zenil:" + string(*nm)) } // Issue 16042. func TestNilMarshal(t *testing.T) { testCases := []struct { v any want string }{ {v: nil, want: `null`}, {v: new(float64), want: `0`}, {v: []any(nil), want: `null`}, {v: []string(nil), want: `null`}, {v: map[string]string(nil), want: `null`}, {v: []byte(nil), want: `null`}, {v: struct{ M string }{"gopher"}, want: `{"M":"gopher"}`}, {v: struct{ M Marshaler }{}, want: `{"M":null}`}, {v: struct{ M Marshaler }{(*nilMarshaler)(nil)}, want: `{"M":"0zenil0"}`}, {v: struct{ M any }{(*nilMarshaler)(nil)}, want: `{"M":null}`}, } for _, tt := range testCases { out, err := Marshal(tt.v) if err != nil || string(out) != tt.want { t.Errorf("Marshal(%#v) = %#q, %#v, want %#q, nil", tt.v, out, err, tt.want) continue } } } // Issue 5245. func TestEmbeddedBug(t *testing.T) { v := BugB{ BugA{"A"}, "B", } b, err := Marshal(v) if err != nil { t.Fatal("Marshal:", err) } want := `{"S":"B"}` got := string(b) if got != want { t.Fatalf("Marshal: got %s want %s", got, want) } // Now check that the duplicate field, S, does not appear. x := BugX{ A: 23, } b, err = Marshal(x) if err != nil { t.Fatal("Marshal:", err) } want = `{"A":23}` got = string(b) if got != want { t.Fatalf("Marshal: got %s want %s", got, want) } } type BugD struct { // Same as BugA after tagging. XXX string `json:"S"` } // BugD's tagged S field should dominate BugA's. type BugY struct { BugA BugD } // Test that a field with a tag dominates untagged fields. func TestTaggedFieldDominates(t *testing.T) { v := BugY{ BugA{"BugA"}, BugD{"BugD"}, } b, err := Marshal(v) if err != nil { t.Fatal("Marshal:", err) } want := `{"S":"BugD"}` got := string(b) if got != want { t.Fatalf("Marshal: got %s want %s", got, want) } } // There are no tags here, so S should not appear. type BugZ struct { BugA BugC BugY // Contains a tagged S field through BugD; should not dominate. } func TestDuplicatedFieldDisappears(t *testing.T) { v := BugZ{ BugA{"BugA"}, BugC{"BugC"}, BugY{ BugA{"nested BugA"}, BugD{"nested BugD"}, }, } b, err := Marshal(v) if err != nil { t.Fatal("Marshal:", err) } want := `{}` got := string(b) if got != want { t.Fatalf("Marshal: got %s want %s", got, want) } } func TestStringBytes(t *testing.T) { t.Parallel() // Test that encodeState.stringBytes and encodeState.string use the same encoding. var r []rune for i := '\u0000'; i <= unicode.MaxRune; i++ { if testing.Short() && i > 1000 { i = unicode.MaxRune } r = append(r, i) } s := string(r) + "\xff\xff\xffhello" // some invalid UTF-8 too for _, escapeHTML := range []bool{true, false} { es := &encodeState{} es.string(s, escapeHTML) esBytes := &encodeState{} esBytes.stringBytes([]byte(s), escapeHTML) enc := es.Buffer.String() encBytes := esBytes.Buffer.String() if enc != encBytes { i := 0 for i < len(enc) && i < len(encBytes) && enc[i] == encBytes[i] { i++ } enc = enc[i:] encBytes = encBytes[i:] i = 0 for i < len(enc) && i < len(encBytes) && enc[len(enc)-i-1] == encBytes[len(encBytes)-i-1] { i++ } enc = enc[:len(enc)-i] encBytes = encBytes[:len(encBytes)-i] if len(enc) > 20 { enc = enc[:20] + "..." } if len(encBytes) > 20 { encBytes = encBytes[:20] + "..." } t.Errorf("with escapeHTML=%t, encodings differ at %#q vs %#q", escapeHTML, enc, encBytes) } } } func TestIssue10281(t *testing.T) { type Foo struct { N Number } x := Foo{Number(`invalid`)} b, err := Marshal(&x) if err == nil { t.Errorf("Marshal(&x) = %#q; want error", b) } } func TestHTMLEscape(t *testing.T) { var b, want bytes.Buffer m := `{"M":"foo &` + "\xe2\x80\xa8 \xe2\x80\xa9" + `"}` want.Write([]byte(`{"M":"\u003chtml\u003efoo \u0026\u2028 \u2029\u003c/html\u003e"}`)) HTMLEscape(&b, []byte(m)) if !bytes.Equal(b.Bytes(), want.Bytes()) { t.Errorf("HTMLEscape(&b, []byte(m)) = %s; want %s", b.Bytes(), want.Bytes()) } } // golang.org/issue/8582 func TestEncodePointerString(t *testing.T) { type stringPointer struct { N *int64 `json:"n,string"` } var n int64 = 42 b, err := Marshal(stringPointer{N: &n}) if err != nil { t.Fatalf("Marshal: %v", err) } if got, want := string(b), `{"n":"42"}`; got != want { t.Errorf("Marshal = %s, want %s", got, want) } var back stringPointer err = Unmarshal(b, &back) if err != nil { t.Fatalf("Unmarshal: %v", err) } if back.N == nil { t.Fatalf("Unmarshaled nil N field") } if *back.N != 42 { t.Fatalf("*N = %d; want 42", *back.N) } } var encodeStringTests = []struct { in string out string }{ {"\x00", `"\u0000"`}, {"\x01", `"\u0001"`}, {"\x02", `"\u0002"`}, {"\x03", `"\u0003"`}, {"\x04", `"\u0004"`}, {"\x05", `"\u0005"`}, {"\x06", `"\u0006"`}, {"\x07", `"\u0007"`}, {"\x08", `"\b"`}, {"\x09", `"\t"`}, {"\x0a", `"\n"`}, {"\x0b", `"\u000b"`}, {"\x0c", `"\f"`}, {"\x0d", `"\r"`}, {"\x0e", `"\u000e"`}, {"\x0f", `"\u000f"`}, {"\x10", `"\u0010"`}, {"\x11", `"\u0011"`}, {"\x12", `"\u0012"`}, {"\x13", `"\u0013"`}, {"\x14", `"\u0014"`}, {"\x15", `"\u0015"`}, {"\x16", `"\u0016"`}, {"\x17", `"\u0017"`}, {"\x18", `"\u0018"`}, {"\x19", `"\u0019"`}, {"\x1a", `"\u001a"`}, {"\x1b", `"\u001b"`}, {"\x1c", `"\u001c"`}, {"\x1d", `"\u001d"`}, {"\x1e", `"\u001e"`}, {"\x1f", `"\u001f"`}, } func TestEncodeString(t *testing.T) { for _, tt := range encodeStringTests { b, err := Marshal(tt.in) if err != nil { t.Errorf("Marshal(%q): %v", tt.in, err) continue } out := string(b) if out != tt.out { t.Errorf("Marshal(%q) = %#q, want %#q", tt.in, out, tt.out) } } } type jsonbyte byte func (b jsonbyte) MarshalJSON() ([]byte, error) { return tenc(`{"JB":%d}`, b) } type textbyte byte func (b textbyte) MarshalText() ([]byte, error) { return tenc(`TB:%d`, b) } type jsonint int func (i jsonint) MarshalJSON() ([]byte, error) { return tenc(`{"JI":%d}`, i) } type textint int func (i textint) MarshalText() ([]byte, error) { return tenc(`TI:%d`, i) } func tenc(format string, a ...any) ([]byte, error) { var buf bytes.Buffer fmt.Fprintf(&buf, format, a...) return buf.Bytes(), nil } // Issue 13783 func TestEncodeBytekind(t *testing.T) { testdata := []struct { data any want string }{ {byte(7), "7"}, {jsonbyte(7), `{"JB":7}`}, {textbyte(4), `"TB:4"`}, {jsonint(5), `{"JI":5}`}, {textint(1), `"TI:1"`}, {[]byte{0, 1}, `"AAE="`}, {[]jsonbyte{0, 1}, `[{"JB":0},{"JB":1}]`}, {[][]jsonbyte{{0, 1}, {3}}, `[[{"JB":0},{"JB":1}],[{"JB":3}]]`}, {[]textbyte{2, 3}, `["TB:2","TB:3"]`}, {[]jsonint{5, 4}, `[{"JI":5},{"JI":4}]`}, {[]textint{9, 3}, `["TI:9","TI:3"]`}, {[]int{9, 3}, `[9,3]`}, } for _, d := range testdata { js, err := Marshal(d.data) if err != nil { t.Error(err) continue } got, want := string(js), d.want if got != want { t.Errorf("got %s, want %s", got, want) } } } func TestTextMarshalerMapKeysAreSorted(t *testing.T) { b, err := Marshal(map[unmarshalerText]int{ {"x", "y"}: 1, {"y", "x"}: 2, {"a", "z"}: 3, {"z", "a"}: 4, }) if err != nil { t.Fatalf("Failed to Marshal text.Marshaler: %v", err) } const want = `{"a:z":3,"x:y":1,"y:x":2,"z:a":4}` if string(b) != want { t.Errorf("Marshal map with text.Marshaler keys: got %#q, want %#q", b, want) } } var re = regexp.MustCompile // syntactic checks on form of marshaled floating point numbers. var badFloatREs = []*regexp.Regexp{ re(`p`), // no binary exponential notation re(`^\+`), // no leading + sign re(`^-?0[^.]`), // no unnecessary leading zeros re(`^-?\.`), // leading zero required before decimal point re(`\.(e|$)`), // no trailing decimal re(`\.[0-9]+0(e|$)`), // no trailing zero in fraction re(`^-?(0|[0-9]{2,})\..*e`), // exponential notation must have normalized mantissa re(`e[0-9]`), // positive exponent must be signed re(`e[+-]0`), // exponent must not have leading zeros re(`e-[1-6]$`), // not tiny enough for exponential notation re(`e+(.|1.|20)$`), // not big enough for exponential notation re(`^-?0\.0000000`), // too tiny, should use exponential notation re(`^-?[0-9]{22}`), // too big, should use exponential notation re(`[1-9][0-9]{16}[1-9]`), // too many significant digits in integer re(`[1-9][0-9.]{17}[1-9]`), // too many significant digits in decimal // below here for float32 only re(`[1-9][0-9]{8}[1-9]`), // too many significant digits in integer re(`[1-9][0-9.]{9}[1-9]`), // too many significant digits in decimal } func TestMarshalFloat(t *testing.T) { t.Parallel() nfail := 0 test := func(f float64, bits int) { vf := any(f) if bits == 32 { f = float64(float32(f)) // round vf = float32(f) } bout, err := Marshal(vf) if err != nil { t.Errorf("Marshal(%T(%g)): %v", vf, vf, err) nfail++ return } out := string(bout) // result must convert back to the same float g, err := strconv.ParseFloat(out, bits) if err != nil { t.Errorf("Marshal(%T(%g)) = %q, cannot parse back: %v", vf, vf, out, err) nfail++ return } if f != g || fmt.Sprint(f) != fmt.Sprint(g) { // fmt.Sprint handles ±0 t.Errorf("Marshal(%T(%g)) = %q (is %g, not %g)", vf, vf, out, float32(g), vf) nfail++ return } bad := badFloatREs if bits == 64 { bad = bad[:len(bad)-2] } for _, re := range bad { if re.MatchString(out) { t.Errorf("Marshal(%T(%g)) = %q, must not match /%s/", vf, vf, out, re) nfail++ return } } } var ( bigger = math.Inf(+1) smaller = math.Inf(-1) ) digits := "1.2345678901234567890123" for i := len(digits); i >= 2; i-- { if testing.Short() && i < len(digits)-4 { break } for exp := -30; exp <= 30; exp++ { for _, sign := range "+-" { for bits := 32; bits <= 64; bits += 32 { s := fmt.Sprintf("%c%se%d", sign, digits[:i], exp) f, err := strconv.ParseFloat(s, bits) if err != nil { log.Fatal(err) } next := math.Nextafter if bits == 32 { next = func(g, h float64) float64 { return float64(math.Nextafter32(float32(g), float32(h))) } } test(f, bits) test(next(f, bigger), bits) test(next(f, smaller), bits) if nfail > 50 { t.Fatalf("stopping test early") } } } } } test(0, 64) test(math.Copysign(0, -1), 64) test(0, 32) test(math.Copysign(0, -1), 32) } func TestMarshalRawMessageValue(t *testing.T) { type ( T1 struct { M RawMessage `json:",omitempty"` } T2 struct { M *RawMessage `json:",omitempty"` } ) var ( rawNil = RawMessage(nil) rawEmpty = RawMessage([]byte{}) rawText = RawMessage([]byte(`"foo"`)) ) tests := []struct { in any want string ok bool }{ // Test with nil RawMessage. {rawNil, "null", true}, {&rawNil, "null", true}, {[]any{rawNil}, "[null]", true}, {&[]any{rawNil}, "[null]", true}, {[]any{&rawNil}, "[null]", true}, {&[]any{&rawNil}, "[null]", true}, {struct{ M RawMessage }{rawNil}, `{"M":null}`, true}, {&struct{ M RawMessage }{rawNil}, `{"M":null}`, true}, {struct{ M *RawMessage }{&rawNil}, `{"M":null}`, true}, {&struct{ M *RawMessage }{&rawNil}, `{"M":null}`, true}, {map[string]any{"M": rawNil}, `{"M":null}`, true}, {&map[string]any{"M": rawNil}, `{"M":null}`, true}, {map[string]any{"M": &rawNil}, `{"M":null}`, true}, {&map[string]any{"M": &rawNil}, `{"M":null}`, true}, {T1{rawNil}, "{}", true}, {T2{&rawNil}, `{"M":null}`, true}, {&T1{rawNil}, "{}", true}, {&T2{&rawNil}, `{"M":null}`, true}, // Test with empty, but non-nil, RawMessage. {rawEmpty, "", false}, {&rawEmpty, "", false}, {[]any{rawEmpty}, "", false}, {&[]any{rawEmpty}, "", false}, {[]any{&rawEmpty}, "", false}, {&[]any{&rawEmpty}, "", false}, {struct{ X RawMessage }{rawEmpty}, "", false}, {&struct{ X RawMessage }{rawEmpty}, "", false}, {struct{ X *RawMessage }{&rawEmpty}, "", false}, {&struct{ X *RawMessage }{&rawEmpty}, "", false}, {map[string]any{"nil": rawEmpty}, "", false}, {&map[string]any{"nil": rawEmpty}, "", false}, {map[string]any{"nil": &rawEmpty}, "", false}, {&map[string]any{"nil": &rawEmpty}, "", false}, {T1{rawEmpty}, "{}", true}, {T2{&rawEmpty}, "", false}, {&T1{rawEmpty}, "{}", true}, {&T2{&rawEmpty}, "", false}, // Test with RawMessage with some text. // // The tests below marked with Issue6458 used to generate "ImZvbyI=" instead "foo". // This behavior was intentionally changed in Go 1.8. // See https://golang.org/issues/14493#issuecomment-255857318 {rawText, `"foo"`, true}, // Issue6458 {&rawText, `"foo"`, true}, {[]any{rawText}, `["foo"]`, true}, // Issue6458 {&[]any{rawText}, `["foo"]`, true}, // Issue6458 {[]any{&rawText}, `["foo"]`, true}, {&[]any{&rawText}, `["foo"]`, true}, {struct{ M RawMessage }{rawText}, `{"M":"foo"}`, true}, // Issue6458 {&struct{ M RawMessage }{rawText}, `{"M":"foo"}`, true}, {struct{ M *RawMessage }{&rawText}, `{"M":"foo"}`, true}, {&struct{ M *RawMessage }{&rawText}, `{"M":"foo"}`, true}, {map[string]any{"M": rawText}, `{"M":"foo"}`, true}, // Issue6458 {&map[string]any{"M": rawText}, `{"M":"foo"}`, true}, // Issue6458 {map[string]any{"M": &rawText}, `{"M":"foo"}`, true}, {&map[string]any{"M": &rawText}, `{"M":"foo"}`, true}, {T1{rawText}, `{"M":"foo"}`, true}, // Issue6458 {T2{&rawText}, `{"M":"foo"}`, true}, {&T1{rawText}, `{"M":"foo"}`, true}, {&T2{&rawText}, `{"M":"foo"}`, true}, } for i, tt := range tests { b, err := Marshal(tt.in) if ok := (err == nil); ok != tt.ok { if err != nil { t.Errorf("test %d, unexpected failure: %v", i, err) } else { t.Errorf("test %d, unexpected success", i) } } if got := string(b); got != tt.want { t.Errorf("test %d, Marshal(%#v) = %q, want %q", i, tt.in, got, tt.want) } } } type marshalPanic struct{} func (marshalPanic) MarshalJSON() ([]byte, error) { panic(0xdead) } func TestMarshalPanic(t *testing.T) { defer func() { if got := recover(); !reflect.DeepEqual(got, 0xdead) { t.Errorf("panic() = (%T)(%v), want 0xdead", got, got) } }() Marshal(&marshalPanic{}) t.Error("Marshal should have panicked") } func TestMarshalUncommonFieldNames(t *testing.T) { v := struct { A0, À, Aβ int }{} b, err := Marshal(v) if err != nil { t.Fatal("Marshal:", err) } want := `{"A0":0,"À":0,"Aβ":0}` got := string(b) if got != want { t.Fatalf("Marshal: got %s want %s", got, want) } } golang-github-segmentio-encoding-0.5.3/json/golang_example_marshaling_test.go000066400000000000000000000023471504206176600275650ustar00rootroot00000000000000// Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package json_test import ( "encoding/json" "fmt" "log" "strings" ) type Animal int const ( Unknown Animal = iota Gopher Zebra ) func (a *Animal) UnmarshalJSON(b []byte) error { var s string if err := json.Unmarshal(b, &s); err != nil { return err } switch strings.ToLower(s) { default: *a = Unknown case "gopher": *a = Gopher case "zebra": *a = Zebra } return nil } func (a Animal) MarshalJSON() ([]byte, error) { var s string switch a { default: s = "unknown" case Gopher: s = "gopher" case Zebra: s = "zebra" } return json.Marshal(s) } func Example_customMarshalJSON() { blob := `["gopher","armadillo","zebra","unknown","gopher","bee","gopher","zebra"]` var zoo []Animal if err := json.Unmarshal([]byte(blob), &zoo); err != nil { log.Fatal(err) } census := make(map[Animal]int) for _, animal := range zoo { census[animal] += 1 } fmt.Printf("Zoo Census:\n* Gophers: %d\n* Zebras: %d\n* Unknown: %d\n", census[Gopher], census[Zebra], census[Unknown]) // Output: // Zoo Census: // * Gophers: 3 // * Zebras: 2 // * Unknown: 3 } golang-github-segmentio-encoding-0.5.3/json/golang_example_test.go000066400000000000000000000140661504206176600253610ustar00rootroot00000000000000// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package json_test import ( "bytes" "encoding/json" "fmt" "io" "log" "os" "strings" ) func ExampleMarshal() { type ColorGroup struct { ID int Name string Colors []string } group := ColorGroup{ ID: 1, Name: "Reds", Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, } b, err := json.Marshal(group) if err != nil { fmt.Println("error:", err) } os.Stdout.Write(b) // Output: // {"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]} } func ExampleUnmarshal() { jsonBlob := []byte(`[ {"Name": "Platypus", "Order": "Monotremata"}, {"Name": "Quoll", "Order": "Dasyuromorphia"} ]`) type Animal struct { Name string Order string } var animals []Animal err := json.Unmarshal(jsonBlob, &animals) if err != nil { fmt.Println("error:", err) } fmt.Printf("%+v", animals) // Output: // [{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}] } // This example uses a Decoder to decode a stream of distinct JSON values. func ExampleDecoder() { const jsonStream = ` {"Name": "Ed", "Text": "Knock knock."} {"Name": "Sam", "Text": "Who's there?"} {"Name": "Ed", "Text": "Go fmt."} {"Name": "Sam", "Text": "Go fmt who?"} {"Name": "Ed", "Text": "Go fmt yourself!"} ` type Message struct { Name, Text string } dec := json.NewDecoder(strings.NewReader(jsonStream)) for { var m Message if err := dec.Decode(&m); err == io.EOF { break } else if err != nil { log.Fatal(err) } fmt.Printf("%s: %s\n", m.Name, m.Text) } // Output: // Ed: Knock knock. // Sam: Who's there? // Ed: Go fmt. // Sam: Go fmt who? // Ed: Go fmt yourself! } // This example uses a Decoder to decode a stream of distinct JSON values. func ExampleDecoder_Token() { const jsonStream = ` {"Message": "Hello", "Array": [1, 2, 3], "Null": null, "Number": 1.234} ` dec := json.NewDecoder(strings.NewReader(jsonStream)) for { t, err := dec.Token() if err == io.EOF { break } if err != nil { log.Fatal(err) } fmt.Printf("%T: %v", t, t) if dec.More() { fmt.Printf(" (more)") } fmt.Printf("\n") } // Output: // json.Delim: { (more) // string: Message (more) // string: Hello (more) // string: Array (more) // json.Delim: [ (more) // float64: 1 (more) // float64: 2 (more) // float64: 3 // json.Delim: ] (more) // string: Null (more) // : (more) // string: Number (more) // float64: 1.234 // json.Delim: } } // This example uses a Decoder to decode a streaming array of JSON objects. func ExampleDecoder_Decode_stream() { const jsonStream = ` [ {"Name": "Ed", "Text": "Knock knock."}, {"Name": "Sam", "Text": "Who's there?"}, {"Name": "Ed", "Text": "Go fmt."}, {"Name": "Sam", "Text": "Go fmt who?"}, {"Name": "Ed", "Text": "Go fmt yourself!"} ] ` type Message struct { Name, Text string } dec := json.NewDecoder(strings.NewReader(jsonStream)) // read open bracket t, err := dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) // while the array contains values for dec.More() { var m Message // decode an array value (Message) err := dec.Decode(&m) if err != nil { log.Fatal(err) } fmt.Printf("%v: %v\n", m.Name, m.Text) } // read closing bracket t, err = dec.Token() if err != nil { log.Fatal(err) } fmt.Printf("%T: %v\n", t, t) // Output: // json.Delim: [ // Ed: Knock knock. // Sam: Who's there? // Ed: Go fmt. // Sam: Go fmt who? // Ed: Go fmt yourself! // json.Delim: ] } // This example uses RawMessage to delay parsing part of a JSON message. func ExampleRawMessage_unmarshal() { type Color struct { Space string Point json.RawMessage // delay parsing until we know the color space } type RGB struct { R uint8 G uint8 B uint8 } type YCbCr struct { Y uint8 Cb int8 Cr int8 } j := []byte(`[ {"Space": "YCbCr", "Point": {"Y": 255, "Cb": 0, "Cr": -10}}, {"Space": "RGB", "Point": {"R": 98, "G": 218, "B": 255}} ]`) var colors []Color err := json.Unmarshal(j, &colors) if err != nil { log.Fatalln("error:", err) } for _, c := range colors { var dst any switch c.Space { case "RGB": dst = new(RGB) case "YCbCr": dst = new(YCbCr) } err := json.Unmarshal(c.Point, dst) if err != nil { log.Fatalln("error:", err) } fmt.Println(c.Space, dst) } // Output: // YCbCr &{255 0 -10} // RGB &{98 218 255} } // This example uses RawMessage to use a precomputed JSON during marshal. func ExampleRawMessage_marshal() { h := json.RawMessage(`{"precomputed": true}`) c := struct { Header *json.RawMessage `json:"header"` Body string `json:"body"` }{Header: &h, Body: "Hello Gophers!"} b, err := json.MarshalIndent(&c, "", "\t") if err != nil { fmt.Println("error:", err) } os.Stdout.Write(b) // Output: // { // "header": { // "precomputed": true // }, // "body": "Hello Gophers!" // } } func ExampleIndent() { type Road struct { Name string Number int } roads := []Road{ {"Diamond Fork", 29}, {"Sheep Creek", 51}, } b, err := json.Marshal(roads) if err != nil { log.Fatal(err) } var out bytes.Buffer json.Indent(&out, b, "=", "\t") out.WriteTo(os.Stdout) // Output: // [ // = { // = "Name": "Diamond Fork", // = "Number": 29 // = }, // = { // = "Name": "Sheep Creek", // = "Number": 51 // = } // =] } func ExampleMarshalIndent() { data := map[string]int{ "a": 1, "b": 2, } json, err := json.MarshalIndent(data, "", "") if err != nil { log.Fatal(err) } fmt.Println(string(json)) // Output: // { // "a": 1, // "b": 2 // } } func ExampleValid() { goodJSON := `{"example": 1}` badJSON := `{"example":2:]}}` fmt.Println(json.Valid([]byte(goodJSON)), json.Valid([]byte(badJSON))) // Output: // true false } func ExampleHTMLEscape() { var out bytes.Buffer json.HTMLEscape(&out, []byte(`{"Name":"HTML content"}`)) out.WriteTo(os.Stdout) // Output: //{"Name":"\u003cb\u003eHTML content\u003c/b\u003e"} } golang-github-segmentio-encoding-0.5.3/json/golang_number_test.go000066400000000000000000000041461504206176600252140ustar00rootroot00000000000000// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package json import ( "regexp" "testing" ) func TestNumberIsValid(t *testing.T) { // From: https://stackoverflow.com/a/13340826 jsonNumberRegexp := regexp.MustCompile(`^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$`) validTests := []string{ "0", "-0", "1", "-1", "0.1", "-0.1", "1234", "-1234", "12.34", "-12.34", "12E0", "12E1", "12e34", "12E-0", "12e+1", "12e-34", "-12E0", "-12E1", "-12e34", "-12E-0", "-12e+1", "-12e-34", "1.2E0", "1.2E1", "1.2e34", "1.2E-0", "1.2e+1", "1.2e-34", "-1.2E0", "-1.2E1", "-1.2e34", "-1.2E-0", "-1.2e+1", "-1.2e-34", "0E0", "0E1", "0e34", "0E-0", "0e+1", "0e-34", "-0E0", "-0E1", "-0e34", "-0E-0", "-0e+1", "-0e-34", } for _, test := range validTests { if !isValidNumber(test) { t.Errorf("%s should be valid", test) } var f float64 if err := Unmarshal([]byte(test), &f); err != nil { t.Errorf("%s should be valid but Unmarshal failed: %v", test, err) } if !jsonNumberRegexp.MatchString(test) { t.Errorf("%s should be valid but regexp does not match", test) } } invalidTests := []string{ "", "invalid", "1.0.1", "1..1", "-1-2", "012a42", "01.2", "012", "12E12.12", "1e2e3", "1e+-2", "1e--23", "1e", "e1", "1e+", "1ea", "1a", "1.a", "1.", "01", "1.e1", } for _, test := range invalidTests { var f float64 if err := Unmarshal([]byte(test), &f); err == nil { t.Errorf("%s should be invalid but unmarshal wrote %v", test, f) } if jsonNumberRegexp.MatchString(test) { t.Errorf("%s should be invalid but matches regexp", test) } } } func BenchmarkNumberIsValid(b *testing.B) { s := "-61657.61667E+61673" for range b.N { isValidNumber(s) } } func BenchmarkNumberIsValidRegexp(b *testing.B) { jsonNumberRegexp := regexp.MustCompile(`^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$`) s := "-61657.61667E+61673" for range b.N { jsonNumberRegexp.MatchString(s) } } golang-github-segmentio-encoding-0.5.3/json/golang_scanner_test.go000066400000000000000000000140111504206176600253450ustar00rootroot00000000000000// Copyright 2010 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package json import ( "bytes" "math" "math/rand" "testing" ) var validTests = []struct { data string ok bool }{ {`foo`, false}, {`}{`, false}, {`{]`, false}, {`{}`, true}, {`{"foo":"bar"}`, true}, {`{"foo":"bar","bar":{"baz":["qux"]}}`, true}, } func TestValid(t *testing.T) { for _, tt := range validTests { if ok := Valid([]byte(tt.data)); ok != tt.ok { t.Errorf("Valid(%#q) = %v, want %v", tt.data, ok, tt.ok) } } } // Tests of simple examples. type example struct { compact string indent string } var examples = []example{ {`1`, `1`}, {`{}`, `{}`}, {`[]`, `[]`}, {`{"":2}`, "{\n\t\"\": 2\n}"}, {`[3]`, "[\n\t3\n]"}, {`[1,2,3]`, "[\n\t1,\n\t2,\n\t3\n]"}, {`{"x":1}`, "{\n\t\"x\": 1\n}"}, {ex1, ex1i}, {"{\"\":\"<>&\u2028\u2029\"}", "{\n\t\"\": \"<>&\u2028\u2029\"\n}"}, // See golang.org/issue/34070 } var ex1 = `[true,false,null,"x",1,1.5,0,-5e+2]` var ex1i = `[ true, false, null, "x", 1, 1.5, 0, -5e+2 ]` func TestCompact(t *testing.T) { var buf bytes.Buffer for _, tt := range examples { buf.Reset() if err := Compact(&buf, []byte(tt.compact)); err != nil { t.Errorf("Compact(%#q): %v", tt.compact, err) } else if s := buf.String(); s != tt.compact { t.Errorf("Compact(%#q) = %#q, want original", tt.compact, s) } buf.Reset() if err := Compact(&buf, []byte(tt.indent)); err != nil { t.Errorf("Compact(%#q): %v", tt.indent, err) continue } else if s := buf.String(); s != tt.compact { t.Errorf("Compact(%#q) = %#q, want %#q", tt.indent, s, tt.compact) } } } func TestCompactSeparators(t *testing.T) { // U+2028 and U+2029 should be escaped inside strings. // They should not appear outside strings. tests := []struct { in, compact string }{ {"{\"\u2028\": 1}", "{\"\u2028\":1}"}, {"{\"\u2029\" :2}", "{\"\u2029\":2}"}, } for _, tt := range tests { var buf bytes.Buffer if err := Compact(&buf, []byte(tt.in)); err != nil { t.Errorf("Compact(%q): %v", tt.in, err) } else if s := buf.String(); s != tt.compact { t.Errorf("Compact(%q) = %q, want %q", tt.in, s, tt.compact) } } } func TestIndent(t *testing.T) { var buf bytes.Buffer for _, tt := range examples { buf.Reset() if err := Indent(&buf, []byte(tt.indent), "", "\t"); err != nil { t.Errorf("Indent(%#q): %v", tt.indent, err) } else if s := buf.String(); s != tt.indent { t.Errorf("Indent(%#q) = %#q, want original", tt.indent, s) } buf.Reset() if err := Indent(&buf, []byte(tt.compact), "", "\t"); err != nil { t.Errorf("Indent(%#q): %v", tt.compact, err) continue } else if s := buf.String(); s != tt.indent { t.Errorf("Indent(%#q) = %#q, want %#q", tt.compact, s, tt.indent) } } } // Tests of a large random structure. func TestCompactBig(t *testing.T) { initBig() var buf bytes.Buffer if err := Compact(&buf, jsonBig); err != nil { t.Fatalf("Compact: %v", err) } b := buf.Bytes() if !bytes.Equal(b, jsonBig) { t.Error("Compact(jsonBig) != jsonBig") diff(t, b, jsonBig) return } } func TestIndentBig(t *testing.T) { t.Parallel() initBig() var buf bytes.Buffer if err := Indent(&buf, jsonBig, "", "\t"); err != nil { t.Fatalf("Indent1: %v", err) } b := buf.Bytes() if len(b) == len(jsonBig) { // jsonBig is compact (no unnecessary spaces); // indenting should make it bigger t.Fatalf("Indent(jsonBig) did not get bigger") } // should be idempotent var buf1 bytes.Buffer if err := Indent(&buf1, b, "", "\t"); err != nil { t.Fatalf("Indent2: %v", err) } b1 := buf1.Bytes() if !bytes.Equal(b1, b) { t.Error("Indent(Indent(jsonBig)) != Indent(jsonBig)") diff(t, b1, b) return } // should get back to original buf1.Reset() if err := Compact(&buf1, b); err != nil { t.Fatalf("Compact: %v", err) } b1 = buf1.Bytes() if !bytes.Equal(b1, jsonBig) { t.Error("Compact(Indent(jsonBig)) != jsonBig") diff(t, b1, jsonBig) return } } type indentErrorTest struct { in string err error } var indentErrorTests = []indentErrorTest{ {`{"X": "foo", "Y"}`, &testSyntaxError{"invalid character '}' after object key", 17}}, {`{"X": "foo" "Y": "bar"}`, &testSyntaxError{"invalid character '\"' after object key:value pair", 13}}, } func TestIndentErrors(t *testing.T) { for i, tt := range indentErrorTests { slice := make([]uint8, 0) buf := bytes.NewBuffer(slice) err := Indent(buf, []uint8(tt.in), "", "") assertErrorPresence(t, tt.err, err, i) } } func diff(t *testing.T, a, b []byte) { for i := 0; ; i++ { if i >= len(a) || i >= len(b) || a[i] != b[i] { j := max(0, i-10) t.Errorf("diverge at %d: «%s» vs «%s»", i, trim(a[j:]), trim(b[j:])) return } } } func trim(b []byte) []byte { if len(b) > 20 { return b[0:20] } return b } // Generate a random JSON object. var jsonBig []byte func initBig() { n := 10000 if testing.Short() { n = 100 } b, err := Marshal(genValue(n)) if err != nil { panic(err) } jsonBig = b } func genValue(n int) any { if n > 1 { switch rand.Intn(2) { case 0: return genArray(n) case 1: return genMap(n) } } switch rand.Intn(3) { case 0: return rand.Intn(2) == 0 case 1: return rand.NormFloat64() case 2: return genString(30) } panic("unreachable") } func genString(stddev float64) string { n := int(math.Abs(rand.NormFloat64()*stddev + stddev/2)) c := make([]rune, n) for i := range c { f := math.Abs(rand.NormFloat64()*64 + 32) if f > 0x10ffff { f = 0x10ffff } c[i] = rune(f) } return string(c) } func genArray(n int) []any { f := int(math.Abs(rand.NormFloat64()) * math.Min(10, float64(n/2))) if f > n { f = n } if f < 1 { f = 1 } x := make([]any, f) for i := range x { x[i] = genValue(((i+1)*n)/f - (i*n)/f) } return x } func genMap(n int) map[string]any { f := int(math.Abs(rand.NormFloat64()) * math.Min(10, float64(n/2))) f = min(f, n) if n > 0 && f == 0 { f = 1 } x := make(map[string]any) for i := range f { x[genString(10)] = genValue(((i+1)*n)/f - (i*n)/f) } return x } golang-github-segmentio-encoding-0.5.3/json/golang_shim_test.go000066400000000000000000000031401504206176600246550ustar00rootroot00000000000000// This file is a shim for dependencies of golang_*_test.go files that are normally provided by the standard library. // It helps importing those files with minimal changes. package json import ( "bytes" "reflect" "sync" "testing" ) // Field cache used in golang_bench_test.go var fieldCache = sync.Map{} func cachedTypeFields(reflect.Type) {} // Fake test env for golang_bench_test.go type testenvShim struct{} func (ts testenvShim) Builder() string { return "" } var testenv testenvShim // Fake scanner for golang_decode_test.go type scanner struct{} func checkValid(in []byte, scan *scanner) error { return nil } // Actual isSpace implementation func isSpace(c byte) bool { return c == ' ' || c == '\t' || c == '\r' || c == '\n' } // Fake encoder for golang_encode_test.go type encodeState struct { Buffer bytes.Buffer } func (es *encodeState) string(s string, escapeHTML bool) { } func (es *encodeState) stringBytes(b []byte, escapeHTML bool) { } // Fake number test func isValidNumber(n string) bool { return true } func assertErrorPresence(t *testing.T, expected error, actual error, prefixes ...any) { if expected != nil && actual == nil { errorWithPrefixes(t, prefixes, "expected error, but did not get an error") } else if expected == nil && actual != nil { errorWithPrefixes(t, prefixes, "did not expect error but got %v", actual) } } func errorWithPrefixes(t *testing.T, prefixes []any, format string, elements ...any) { fullFormat := format allElements := append(prefixes, elements...) for range prefixes { fullFormat = "%v: " + fullFormat } t.Errorf(fullFormat, allElements...) } golang-github-segmentio-encoding-0.5.3/json/golang_tagkey_test.go000066400000000000000000000052271504206176600252110ustar00rootroot00000000000000// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package json import ( "testing" ) type basicLatin2xTag struct { V string `json:"$%-/"` } type basicLatin3xTag struct { V string `json:"0123456789"` } type basicLatin4xTag struct { V string `json:"ABCDEFGHIJKLMO"` } type basicLatin5xTag struct { V string `json:"PQRSTUVWXYZ_"` } type basicLatin6xTag struct { V string `json:"abcdefghijklmno"` } type basicLatin7xTag struct { V string `json:"pqrstuvwxyz"` } type miscPlaneTag struct { V string `json:"色は匂へど"` } type percentSlashTag struct { V string `json:"text/html%"` // https://golang.org/issue/2718 } type punctuationTag struct { V string `json:"!#$%&()*+-./:;<=>?@[]^_{|}~"` // https://golang.org/issue/3546 } type dashTag struct { V string `json:"-,"` } type emptyTag struct { W string } type misnamedTag struct { X string `jsom:"Misnamed"` } type badFormatTag struct { Y string `:"BadFormat"` } type badCodeTag struct { Z string `json:" !\"#&'()*+,."` } type spaceTag struct { Q string `json:"With space"` } type unicodeTag struct { W string `json:"Ελλάδα"` } var structTagObjectKeyTests = []struct { raw any value string key string }{ {basicLatin2xTag{"2x"}, "2x", "$%-/"}, {basicLatin3xTag{"3x"}, "3x", "0123456789"}, {basicLatin4xTag{"4x"}, "4x", "ABCDEFGHIJKLMO"}, {basicLatin5xTag{"5x"}, "5x", "PQRSTUVWXYZ_"}, {basicLatin6xTag{"6x"}, "6x", "abcdefghijklmno"}, {basicLatin7xTag{"7x"}, "7x", "pqrstuvwxyz"}, {miscPlaneTag{"いろはにほへと"}, "いろはにほへと", "色は匂へど"}, {dashTag{"foo"}, "foo", "-"}, {emptyTag{"Pour Moi"}, "Pour Moi", "W"}, {misnamedTag{"Animal Kingdom"}, "Animal Kingdom", "X"}, {badFormatTag{"Orfevre"}, "Orfevre", "Y"}, {badCodeTag{"Reliable Man"}, "Reliable Man", "Z"}, {percentSlashTag{"brut"}, "brut", "text/html%"}, {punctuationTag{"Union Rags"}, "Union Rags", "!#$%&()*+-./:;<=>?@[]^_{|}~"}, {spaceTag{"Perreddu"}, "Perreddu", "With space"}, {unicodeTag{"Loukanikos"}, "Loukanikos", "Ελλάδα"}, } func TestStructTagObjectKey(t *testing.T) { for _, tt := range structTagObjectKeyTests { b, err := Marshal(tt.raw) if err != nil { t.Fatalf("Marshal(%#q) failed: %v", tt.raw, err) } var f any err = Unmarshal(b, &f) if err != nil { t.Fatalf("Unmarshal(%#q) failed: %v", b, err) } for i, v := range f.(map[string]any) { switch i { case tt.key: if s, ok := v.(string); !ok || s != tt.value { t.Fatalf("Unexpected value: %#q, want %v", s, tt.value) } default: t.Fatalf("Unexpected key: %#q, from %#q", i, b) } } } } golang-github-segmentio-encoding-0.5.3/json/int.go000066400000000000000000000054151504206176600221300ustar00rootroot00000000000000package json import ( "unsafe" ) var endianness int func init() { var b [2]byte *(*uint16)(unsafe.Pointer(&b)) = uint16(0xABCD) switch b[0] { case 0xCD: endianness = 0 // LE case 0xAB: endianness = 1 // BE default: panic("could not determine endianness") } } // "00010203...96979899" cast to []uint16 var intLELookup = [100]uint16{ 0x3030, 0x3130, 0x3230, 0x3330, 0x3430, 0x3530, 0x3630, 0x3730, 0x3830, 0x3930, 0x3031, 0x3131, 0x3231, 0x3331, 0x3431, 0x3531, 0x3631, 0x3731, 0x3831, 0x3931, 0x3032, 0x3132, 0x3232, 0x3332, 0x3432, 0x3532, 0x3632, 0x3732, 0x3832, 0x3932, 0x3033, 0x3133, 0x3233, 0x3333, 0x3433, 0x3533, 0x3633, 0x3733, 0x3833, 0x3933, 0x3034, 0x3134, 0x3234, 0x3334, 0x3434, 0x3534, 0x3634, 0x3734, 0x3834, 0x3934, 0x3035, 0x3135, 0x3235, 0x3335, 0x3435, 0x3535, 0x3635, 0x3735, 0x3835, 0x3935, 0x3036, 0x3136, 0x3236, 0x3336, 0x3436, 0x3536, 0x3636, 0x3736, 0x3836, 0x3936, 0x3037, 0x3137, 0x3237, 0x3337, 0x3437, 0x3537, 0x3637, 0x3737, 0x3837, 0x3937, 0x3038, 0x3138, 0x3238, 0x3338, 0x3438, 0x3538, 0x3638, 0x3738, 0x3838, 0x3938, 0x3039, 0x3139, 0x3239, 0x3339, 0x3439, 0x3539, 0x3639, 0x3739, 0x3839, 0x3939, } var intBELookup = [100]uint16{ 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036, 0x3037, 0x3038, 0x3039, 0x3130, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, 0x3230, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239, 0x3330, 0x3331, 0x3332, 0x3333, 0x3334, 0x3335, 0x3336, 0x3337, 0x3338, 0x3339, 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436, 0x3437, 0x3438, 0x3439, 0x3530, 0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538, 0x3539, 0x3630, 0x3631, 0x3632, 0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734, 0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836, 0x3837, 0x3838, 0x3839, 0x3930, 0x3931, 0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938, 0x3939, } var intLookup = [2]*[100]uint16{&intLELookup, &intBELookup} func appendInt(b []byte, n int64) []byte { return formatInteger(b, uint64(n), n < 0) } func appendUint(b []byte, n uint64) []byte { return formatInteger(b, n, false) } func formatInteger(out []byte, n uint64, negative bool) []byte { if !negative { if n < 10 { return append(out, byte(n+'0')) } else if n < 100 { u := intLELookup[n] return append(out, byte(u), byte(u>>8)) } } else { n = -n } lookup := intLookup[endianness] var b [22]byte u := (*[11]uint16)(unsafe.Pointer(&b)) i := 11 for n >= 100 { j := n % 100 n /= 100 i-- u[i] = lookup[j] } i-- u[i] = lookup[n] i *= 2 // convert to byte index if n < 10 { i++ // remove leading zero } if negative { i-- b[i] = '-' } return append(out, b[i:]...) } golang-github-segmentio-encoding-0.5.3/json/int_test.go000066400000000000000000000017761504206176600231750ustar00rootroot00000000000000package json import ( "math" "strconv" "testing" ) func TestAppendInt(t *testing.T) { var ints []int64 for i := range 64 { u := uint64(1) << i ints = append(ints, int64(u-1), int64(u), int64(u+1), -int64(u)) } var std, our [20]byte for _, i := range ints { expected := strconv.AppendInt(std[:], i, 10) actual := appendInt(our[:], i) if string(expected) != string(actual) { t.Fatalf("appendInt(%d) = %v, expected = %v", i, string(actual), string(expected)) } } } func benchStd(b *testing.B, n int64) { var buf [20]byte b.ResetTimer() for range b.N { strconv.AppendInt(buf[:0], n, 10) } } func benchNew(b *testing.B, n int64) { var buf [20]byte b.ResetTimer() for range b.N { appendInt(buf[:0], n) } } func BenchmarkAppendIntStd1(b *testing.B) { benchStd(b, 1) } func BenchmarkAppendInt1(b *testing.B) { benchNew(b, 1) } func BenchmarkAppendIntStdMinI64(b *testing.B) { benchStd(b, math.MinInt64) } func BenchmarkAppendIntMinI64(b *testing.B) { benchNew(b, math.MinInt64) } golang-github-segmentio-encoding-0.5.3/json/json.go000066400000000000000000000443141504206176600223100ustar00rootroot00000000000000package json import ( "bytes" "encoding/json" "io" "math/bits" "reflect" "runtime" "sync" "unsafe" ) // Delim is documented at https://golang.org/pkg/encoding/json/#Delim type Delim = json.Delim // InvalidUTF8Error is documented at https://golang.org/pkg/encoding/json/#InvalidUTF8Error type InvalidUTF8Error = json.InvalidUTF8Error //nolint:staticcheck // compat. // InvalidUnmarshalError is documented at https://golang.org/pkg/encoding/json/#InvalidUnmarshalError type InvalidUnmarshalError = json.InvalidUnmarshalError // Marshaler is documented at https://golang.org/pkg/encoding/json/#Marshaler type Marshaler = json.Marshaler // MarshalerError is documented at https://golang.org/pkg/encoding/json/#MarshalerError type MarshalerError = json.MarshalerError // Number is documented at https://golang.org/pkg/encoding/json/#Number type Number = json.Number // RawMessage is documented at https://golang.org/pkg/encoding/json/#RawMessage type RawMessage = json.RawMessage // A SyntaxError is a description of a JSON syntax error. type SyntaxError = json.SyntaxError // Token is documented at https://golang.org/pkg/encoding/json/#Token type Token = json.Token // UnmarshalFieldError is documented at https://golang.org/pkg/encoding/json/#UnmarshalFieldError type UnmarshalFieldError = json.UnmarshalFieldError //nolint:staticcheck // compat. // UnmarshalTypeError is documented at https://golang.org/pkg/encoding/json/#UnmarshalTypeError type UnmarshalTypeError = json.UnmarshalTypeError // Unmarshaler is documented at https://golang.org/pkg/encoding/json/#Unmarshaler type Unmarshaler = json.Unmarshaler // UnsupportedTypeError is documented at https://golang.org/pkg/encoding/json/#UnsupportedTypeError type UnsupportedTypeError = json.UnsupportedTypeError // UnsupportedValueError is documented at https://golang.org/pkg/encoding/json/#UnsupportedValueError type UnsupportedValueError = json.UnsupportedValueError // AppendFlags is a type used to represent configuration options that can be // applied when formatting json output. type AppendFlags uint32 const ( // EscapeHTML is a formatting flag used to to escape HTML in json strings. EscapeHTML AppendFlags = 1 << iota // SortMapKeys is formatting flag used to enable sorting of map keys when // encoding JSON (this matches the behavior of the standard encoding/json // package). SortMapKeys // TrustRawMessage is a performance optimization flag to skip value // checking of raw messages. It should only be used if the values are // known to be valid json (e.g., they were created by json.Unmarshal). TrustRawMessage // appendNewline is a formatting flag to enable the addition of a newline // in Encode (this matches the behavior of the standard encoding/json // package). appendNewline ) // ParseFlags is a type used to represent configuration options that can be // applied when parsing json input. type ParseFlags uint32 func (flags ParseFlags) has(f ParseFlags) bool { return (flags & f) != 0 } func (f ParseFlags) kind() Kind { return Kind((f >> kindOffset) & 0xFF) } func (f ParseFlags) withKind(kind Kind) ParseFlags { return (f & ^(ParseFlags(0xFF) << kindOffset)) | (ParseFlags(kind) << kindOffset) } const ( // DisallowUnknownFields is a parsing flag used to prevent decoding of // objects to Go struct values when a field of the input does not match // with any of the struct fields. DisallowUnknownFields ParseFlags = 1 << iota // UseNumber is a parsing flag used to load numeric values as Number // instead of float64. UseNumber // DontCopyString is a parsing flag used to provide zero-copy support when // loading string values from a json payload. It is not always possible to // avoid dynamic memory allocations, for example when a string is escaped in // the json data a new buffer has to be allocated, but when the `wire` value // can be used as content of a Go value the decoder will simply point into // the input buffer. DontCopyString // DontCopyNumber is a parsing flag used to provide zero-copy support when // loading Number values (see DontCopyString and DontCopyRawMessage). DontCopyNumber // DontCopyRawMessage is a parsing flag used to provide zero-copy support // when loading RawMessage values from a json payload. When used, the // RawMessage values will not be allocated into new memory buffers and // will instead point directly to the area of the input buffer where the // value was found. DontCopyRawMessage // DontMatchCaseInsensitiveStructFields is a parsing flag used to prevent // matching fields in a case-insensitive way. This can prevent degrading // performance on case conversions, and can also act as a stricter decoding // mode. DontMatchCaseInsensitiveStructFields // Decode integers into *big.Int. // Takes precedence over UseNumber for integers. UseBigInt // Decode in-range integers to int64. // Takes precedence over UseNumber and UseBigInt for in-range integers. UseInt64 // Decode in-range positive integers to uint64. // Takes precedence over UseNumber, UseBigInt, and UseInt64 // for positive, in-range integers. UseUint64 // ZeroCopy is a parsing flag that combines all the copy optimizations // available in the package. // // The zero-copy optimizations are better used in request-handler style // code where none of the values are retained after the handler returns. ZeroCopy = DontCopyString | DontCopyNumber | DontCopyRawMessage // validAsciiPrint is an internal flag indicating that the input contains // only valid ASCII print chars (0x20 <= c <= 0x7E). If the flag is unset, // it's unknown whether the input is valid ASCII print. validAsciiPrint ParseFlags = 1 << 28 // noBackslach is an internal flag indicating that the input does not // contain a backslash. If the flag is unset, it's unknown whether the // input contains a backslash. noBackslash ParseFlags = 1 << 29 // Bit offset where the kind of the json value is stored. // // See Kind in token.go for the enum. kindOffset ParseFlags = 16 ) // Kind represents the different kinds of value that exist in JSON. type Kind uint const ( Undefined Kind = 0 Null Kind = 1 // Null is not zero, so we keep zero for "undefined". Bool Kind = 2 // Bit two is set to 1, means it's a boolean. False Kind = 2 // Bool + 0 True Kind = 3 // Bool + 1 Num Kind = 4 // Bit three is set to 1, means it's a number. Uint Kind = 5 // Num + 1 Int Kind = 6 // Num + 2 Float Kind = 7 // Num + 3 String Kind = 8 // Bit four is set to 1, means it's a string. Unescaped Kind = 9 // String + 1 Array Kind = 16 // Equivalent to Delim == '[' Object Kind = 32 // Equivalent to Delim == '{' ) // Class returns the class of k. func (k Kind) Class() Kind { return Kind(1 << uint(bits.Len(uint(k))-1)) } // Append acts like Marshal but appends the json representation to b instead of // always reallocating a new slice. func Append(b []byte, x any, flags AppendFlags) ([]byte, error) { if x == nil { // Special case for nil values because it makes the rest of the code // simpler to assume that it won't be seeing nil pointers. return append(b, "null"...), nil } t := reflect.TypeOf(x) p := (*iface)(unsafe.Pointer(&x)).ptr cache := cacheLoad() c, found := cache[typeid(t)] if !found { c = constructCachedCodec(t, cache) } b, err := c.encode(encoder{flags: flags}, b, p) runtime.KeepAlive(x) return b, err } // Escape is a convenience helper to construct an escaped JSON string from s. // The function escales HTML characters, for more control over the escape // behavior and to write to a pre-allocated buffer, use AppendEscape. func Escape(s string) []byte { // +10 for extra escape characters, maybe not enough and the buffer will // be reallocated. b := make([]byte, 0, len(s)+10) return AppendEscape(b, s, EscapeHTML) } // AppendEscape appends s to b with the string escaped as a JSON value. // This will include the starting and ending quote characters, and the // appropriate characters will be escaped correctly for JSON encoding. func AppendEscape(b []byte, s string, flags AppendFlags) []byte { e := encoder{flags: flags} b, _ = e.encodeString(b, unsafe.Pointer(&s)) return b } // Unescape is a convenience helper to unescape a JSON value. // For more control over the unescape behavior and // to write to a pre-allocated buffer, use AppendUnescape. func Unescape(s []byte) []byte { b := make([]byte, 0, len(s)) return AppendUnescape(b, s, ParseFlags(0)) } // AppendUnescape appends s to b with the string unescaped as a JSON value. // This will remove starting and ending quote characters, and the // appropriate characters will be escaped correctly as if JSON decoded. // New space will be reallocated if more space is needed. func AppendUnescape(b []byte, s []byte, flags ParseFlags) []byte { d := decoder{flags: flags} buf := new(string) d.decodeString(s, unsafe.Pointer(buf)) return append(b, *buf...) } // Compact is documented at https://golang.org/pkg/encoding/json/#Compact func Compact(dst *bytes.Buffer, src []byte) error { return json.Compact(dst, src) } // HTMLEscape is documented at https://golang.org/pkg/encoding/json/#HTMLEscape func HTMLEscape(dst *bytes.Buffer, src []byte) { json.HTMLEscape(dst, src) } // Indent is documented at https://golang.org/pkg/encoding/json/#Indent func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error { return json.Indent(dst, src, prefix, indent) } // Marshal is documented at https://golang.org/pkg/encoding/json/#Marshal func Marshal(x any) ([]byte, error) { var err error buf := encoderBufferPool.Get().(*encoderBuffer) if buf.data, err = Append(buf.data[:0], x, EscapeHTML|SortMapKeys); err != nil { return nil, err } b := make([]byte, len(buf.data)) copy(b, buf.data) encoderBufferPool.Put(buf) return b, nil } // MarshalIndent is documented at https://golang.org/pkg/encoding/json/#MarshalIndent func MarshalIndent(x any, prefix, indent string) ([]byte, error) { b, err := Marshal(x) if err == nil { tmp := &bytes.Buffer{} tmp.Grow(2 * len(b)) Indent(tmp, b, prefix, indent) b = tmp.Bytes() } return b, err } // Unmarshal is documented at https://golang.org/pkg/encoding/json/#Unmarshal func Unmarshal(b []byte, x any) error { r, err := Parse(b, x, 0) if len(r) != 0 { if _, ok := err.(*SyntaxError); !ok { // The encoding/json package prioritizes reporting errors caused by // unexpected trailing bytes over other issues; here we emulate this // behavior by overriding the error. err = syntaxError(r, "invalid character '%c' after top-level value", r[0]) } } return err } // Parse behaves like Unmarshal but the caller can pass a set of flags to // configure the parsing behavior. func Parse(b []byte, x any, flags ParseFlags) ([]byte, error) { t := reflect.TypeOf(x) p := (*iface)(unsafe.Pointer(&x)).ptr d := decoder{flags: flags | internalParseFlags(b)} b = skipSpaces(b) if t == nil || p == nil || t.Kind() != reflect.Ptr { _, r, _, err := d.parseValue(b) r = skipSpaces(r) if err != nil { return r, err } return r, &InvalidUnmarshalError{Type: t} } t = t.Elem() cache := cacheLoad() c, found := cache[typeid(t)] if !found { c = constructCachedCodec(t, cache) } r, err := c.decode(d, b, p) return skipSpaces(r), err } // Valid is documented at https://golang.org/pkg/encoding/json/#Valid func Valid(data []byte) bool { data = skipSpaces(data) d := decoder{flags: internalParseFlags(data)} _, data, _, err := d.parseValue(data) if err != nil { return false } return len(skipSpaces(data)) == 0 } // Decoder is documented at https://golang.org/pkg/encoding/json/#Decoder type Decoder struct { reader io.Reader buffer []byte remain []byte inputOffset int64 err error flags ParseFlags } // NewDecoder is documented at https://golang.org/pkg/encoding/json/#NewDecoder func NewDecoder(r io.Reader) *Decoder { return &Decoder{reader: r} } // Buffered is documented at https://golang.org/pkg/encoding/json/#Decoder.Buffered func (dec *Decoder) Buffered() io.Reader { return bytes.NewReader(dec.remain) } // Decode is documented at https://golang.org/pkg/encoding/json/#Decoder.Decode func (dec *Decoder) Decode(v any) error { raw, err := dec.readValue() if err != nil { return err } _, err = Parse(raw, v, dec.flags) return err } const ( minBufferSize = 32768 minReadSize = 4096 ) // readValue reads one JSON value from the buffer and returns its raw bytes. It // is optimized for the "one JSON value per line" case. func (dec *Decoder) readValue() (v []byte, err error) { var n int var r []byte d := decoder{flags: dec.flags} for { if len(dec.remain) != 0 { v, r, _, err = d.parseValue(dec.remain) if err == nil { dec.remain, n = skipSpacesN(r) dec.inputOffset += int64(len(v) + n) return } if len(r) != 0 { // Parsing of the next JSON value stopped at a position other // than the end of the input buffer, which indicaates that a // syntax error was encountered. return } } if err = dec.err; err != nil { if len(dec.remain) != 0 && err == io.EOF { err = io.ErrUnexpectedEOF } return } if dec.buffer == nil { dec.buffer = make([]byte, 0, minBufferSize) } else { dec.buffer = dec.buffer[:copy(dec.buffer[:cap(dec.buffer)], dec.remain)] dec.remain = nil } if (cap(dec.buffer) - len(dec.buffer)) < minReadSize { buf := make([]byte, len(dec.buffer), 2*cap(dec.buffer)) copy(buf, dec.buffer) dec.buffer = buf } n, err = io.ReadFull(dec.reader, dec.buffer[len(dec.buffer):cap(dec.buffer)]) if n > 0 { dec.buffer = dec.buffer[:len(dec.buffer)+n] if err != nil { err = nil } } else if err == io.ErrUnexpectedEOF { err = io.EOF } dec.remain, n = skipSpacesN(dec.buffer) d.flags = dec.flags | internalParseFlags(dec.remain) dec.inputOffset += int64(n) dec.err = err } } // DisallowUnknownFields is documented at https://golang.org/pkg/encoding/json/#Decoder.DisallowUnknownFields func (dec *Decoder) DisallowUnknownFields() { dec.flags |= DisallowUnknownFields } // UseNumber is documented at https://golang.org/pkg/encoding/json/#Decoder.UseNumber func (dec *Decoder) UseNumber() { dec.flags |= UseNumber } // DontCopyString is an extension to the standard encoding/json package // which instructs the decoder to not copy strings loaded from the json // payloads when possible. func (dec *Decoder) DontCopyString() { dec.flags |= DontCopyString } // DontCopyNumber is an extension to the standard encoding/json package // which instructs the decoder to not copy numbers loaded from the json // payloads. func (dec *Decoder) DontCopyNumber() { dec.flags |= DontCopyNumber } // DontCopyRawMessage is an extension to the standard encoding/json package // which instructs the decoder to not allocate RawMessage values in separate // memory buffers (see the documentation of the DontcopyRawMessage flag for // more detais). func (dec *Decoder) DontCopyRawMessage() { dec.flags |= DontCopyRawMessage } // DontMatchCaseInsensitiveStructFields is an extension to the standard // encoding/json package which instructs the decoder to not match object fields // against struct fields in a case-insensitive way, the field names have to // match exactly to be decoded into the struct field values. func (dec *Decoder) DontMatchCaseInsensitiveStructFields() { dec.flags |= DontMatchCaseInsensitiveStructFields } // ZeroCopy is an extension to the standard encoding/json package which enables // all the copy optimizations of the decoder. func (dec *Decoder) ZeroCopy() { dec.flags |= ZeroCopy } // InputOffset returns the input stream byte offset of the current decoder position. // The offset gives the location of the end of the most recently returned token // and the beginning of the next token. func (dec *Decoder) InputOffset() int64 { return dec.inputOffset } // Encoder is documented at https://golang.org/pkg/encoding/json/#Encoder type Encoder struct { writer io.Writer prefix string indent string buffer *bytes.Buffer err error flags AppendFlags } // NewEncoder is documented at https://golang.org/pkg/encoding/json/#NewEncoder func NewEncoder(w io.Writer) *Encoder { return &Encoder{writer: w, flags: EscapeHTML | SortMapKeys | appendNewline} } // Encode is documented at https://golang.org/pkg/encoding/json/#Encoder.Encode func (enc *Encoder) Encode(v any) error { if enc.err != nil { return enc.err } var err error buf := encoderBufferPool.Get().(*encoderBuffer) buf.data, err = Append(buf.data[:0], v, enc.flags) if err != nil { encoderBufferPool.Put(buf) return err } if (enc.flags & appendNewline) != 0 { buf.data = append(buf.data, '\n') } b := buf.data if enc.prefix != "" || enc.indent != "" { if enc.buffer == nil { enc.buffer = new(bytes.Buffer) enc.buffer.Grow(2 * len(buf.data)) } else { enc.buffer.Reset() } Indent(enc.buffer, buf.data, enc.prefix, enc.indent) b = enc.buffer.Bytes() } if _, err := enc.writer.Write(b); err != nil { enc.err = err } encoderBufferPool.Put(buf) return err } // SetEscapeHTML is documented at https://golang.org/pkg/encoding/json/#Encoder.SetEscapeHTML func (enc *Encoder) SetEscapeHTML(on bool) { if on { enc.flags |= EscapeHTML } else { enc.flags &= ^EscapeHTML } } // SetIndent is documented at https://golang.org/pkg/encoding/json/#Encoder.SetIndent func (enc *Encoder) SetIndent(prefix, indent string) { enc.prefix = prefix enc.indent = indent } // SetSortMapKeys is an extension to the standard encoding/json package which // allows the program to toggle sorting of map keys on and off. func (enc *Encoder) SetSortMapKeys(on bool) { if on { enc.flags |= SortMapKeys } else { enc.flags &= ^SortMapKeys } } // SetTrustRawMessage skips value checking when encoding a raw json message. It should only // be used if the values are known to be valid json, e.g. because they were originally created // by json.Unmarshal. func (enc *Encoder) SetTrustRawMessage(on bool) { if on { enc.flags |= TrustRawMessage } else { enc.flags &= ^TrustRawMessage } } // SetAppendNewline is an extension to the standard encoding/json package which // allows the program to toggle the addition of a newline in Encode on or off. func (enc *Encoder) SetAppendNewline(on bool) { if on { enc.flags |= appendNewline } else { enc.flags &= ^appendNewline } } var encoderBufferPool = sync.Pool{ New: func() any { return &encoderBuffer{data: make([]byte, 0, 4096)} }, } type encoderBuffer struct{ data []byte } golang-github-segmentio-encoding-0.5.3/json/json_test.go000066400000000000000000001272001504206176600233430ustar00rootroot00000000000000package json import ( "bytes" "compress/gzip" "encoding" "encoding/json" "errors" "flag" "fmt" "io" "math" "math/big" "os" "path/filepath" "reflect" "runtime" "strconv" "strings" "testing" "time" ) // The encoding/json package does not export the msg field of json.SyntaxError, // so we use this replacement type in tests. type testSyntaxError struct { msg string Offset int64 } func (e *testSyntaxError) Error() string { return e.msg } var ( marshal func([]byte, any) ([]byte, error) unmarshal func([]byte, any) error escapeHTML bool ) func TestMain(m *testing.M) { var pkg string flag.StringVar(&pkg, "package", ".", "The name of the package to test (encoding/json, or default to this package)") flag.BoolVar(&escapeHTML, "escapehtml", false, "Whether to enable HTML escaping or not") flag.Parse() switch pkg { case "encoding/json": buf := &buffer{} enc := json.NewEncoder(buf) enc.SetEscapeHTML(escapeHTML) marshal = func(b []byte, v any) ([]byte, error) { buf.data = b err := enc.Encode(v) return buf.data, err } unmarshal = json.Unmarshal default: flags := AppendFlags(0) if escapeHTML { flags |= EscapeHTML } marshal = func(b []byte, v any) ([]byte, error) { return Append(b, v, flags) } unmarshal = func(b []byte, v any) error { _, err := Parse(b, v, ZeroCopy) return err } } os.Exit(m.Run()) } type point struct { X int `json:"x"` Y int `json:"y"` } type tree struct { Value string Left *tree Right *tree } var ( // bigPos128 and bigNeg128 are 1<<128 and -1<<128 // certainly neither is representable using a uint64/int64. bigPos128 = new(big.Int).Lsh(big.NewInt(1), 128) bigNeg128 = new(big.Int).Neg(bigPos128) ) var testValues = [...]any{ // constants nil, false, true, // int int(0), int(1), int(42), int(-1), int(-42), int8(math.MaxInt8), int8(math.MinInt8), int16(math.MaxInt16), int16(math.MinInt16), int32(math.MaxInt32), int32(math.MinInt32), int64(math.MaxInt64), int64(math.MinInt64), // uint uint(0), uint(1), uintptr(0), uintptr(1), uint8(math.MaxUint8), uint16(math.MaxUint16), uint32(math.MaxUint32), uint64(math.MaxUint64), // float float32(0), float32(0.5), float32(math.SmallestNonzeroFloat32), float32(math.MaxFloat32), float64(0), float64(0.5), float64(math.SmallestNonzeroFloat64), float64(math.MaxFloat64), bigPos128, bigNeg128, // number Number("0"), Number("1234567890"), Number("-0.5"), Number("-1e+2"), // string "", "Hello World!", "Hello\"World!", "Hello\\World!", "Hello\nWorld!", "Hello\rWorld!", "Hello\tWorld!", "Hello\bWorld!", "Hello\fWorld!", "你好", "<", ">", "&", "\u001944", "\u00c2e>", "\u00c2V?", "\u000e=8", "\u001944\u00c2e>\u00c2V?\u000e=8", "ir\u001bQJ\u007f\u0007y\u0015)", strings.Repeat("A", 32), strings.Repeat("A", 250), strings.Repeat("A", 1020), // bytes []byte(""), []byte("Hello World!"), bytes.Repeat([]byte("A"), 250), bytes.Repeat([]byte("A"), 1020), // time time.Unix(0, 0).In(time.UTC), time.Unix(1, 42).In(time.UTC), time.Unix(17179869184, 999999999).In(time.UTC), time.Date(2016, 12, 20, 0, 20, 1, 0, time.UTC), // array [...]int{}, [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, // slice []int{}, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, makeSlice(250), makeSlice(1020), []string{"A", "B", "C"}, []any{nil, true, false, 0.5, "Hello World!"}, // map makeMapStringBool(0), makeMapStringBool(15), makeMapStringBool(1020), makeMapStringString(0), makeMapStringString(15), makeMapStringString(1020), makeMapStringStringSlice(0), makeMapStringStringSlice(15), makeMapStringStringSlice(1020), makeMapStringInterface(0), makeMapStringInterface(15), makeMapStringInterface(1020), map[int]bool{1: false, 42: true}, map[textValue]bool{{1, 2}: true, {3, 4}: false}, map[string]*point{ "A": {1, 2}, "B": {3, 4}, "C": {5, 6}, }, map[string]RawMessage{ "A": RawMessage(`{}`), "B": RawMessage(`null`), "C": RawMessage(`42`), }, // struct struct{}{}, struct{ A int }{42}, struct{ A, B, C int }{1, 2, 3}, struct { A int T time.Time S string }{42, time.Date(2016, 12, 20, 0, 20, 1, 0, time.UTC), "Hello World!"}, // These types are interesting because they fit in a pointer so the compiler // puts their value directly into the pointer field of the any that // is passed to Marshal. struct{ X *int }{}, struct{ X *int }{new(int)}, struct{ X **int }{}, // Struct types with more than one pointer, those exercise the regular // pointer handling with code that dereferences the fields. struct{ X, Y *int }{}, struct{ X, Y *int }{new(int), new(int)}, struct { A string `json:"name"` B string `json:"-"` C string `json:",omitempty"` D map[string]any `json:",string"` //nolint:staticcheck // intentional e string }{A: "Luke", D: map[string]any{"answer": float64(42)}}, struct{ point }{point{1, 2}}, tree{ Value: "T", Left: &tree{Value: "L"}, Right: &tree{Value: "R", Left: &tree{Value: "R-L"}}, }, // pointer (*string)(nil), new(int), // Marshaler/Unmarshaler jsonValue{}, jsonValue{1, 2}, // encoding.TextMarshaler/encoding.TextUnmarshaler textValue{}, textValue{1, 2}, // RawMessage RawMessage(`{ "answer": 42, "hello": "world" }`), // fixtures loadTestdata(filepath.Join(runtime.GOROOT(), "src/encoding/json/testdata/code.json.gz")), } var durationTestValues = []any{ // duration time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute, time.Hour, // struct with duration struct{ D1, D2 time.Duration }{time.Millisecond, time.Hour}, } func makeSlice(n int) []int { s := make([]int, n) for i := range s { s[i] = i } return s } func makeMapStringBool(n int) map[string]bool { m := make(map[string]bool, n) for i := range n { m[strconv.Itoa(i)] = true } return m } func makeMapStringString(n int) map[string]string { m := make(map[string]string, n) for i := range n { m[strconv.Itoa(i)] = fmt.Sprintf("%d Hello, world!", i) } return m } func makeMapStringStringSlice(n int) map[string][]string { m := make(map[string][]string, n) for i := range n { m[strconv.Itoa(i)] = []string{strconv.Itoa(i), "Hello,", "world!"} } return m } func makeMapStringInterface(n int) map[string]any { m := make(map[string]any, n) for i := range n { m[strconv.Itoa(i)] = nil } return m } func testName(v any) string { return fmt.Sprintf("%T", v) } type codeResponse2 struct { Tree *codeNode2 `json:"tree"` Username string `json:"username"` } type codeNode2 struct { Name string `json:"name"` Kids []*codeNode `json:"kids"` CLWeight float64 `json:"cl_weight"` Touches int `json:"touches"` MinT int64 `json:"min_t"` MaxT int64 `json:"max_t"` MeanT int64 `json:"mean_t"` } func loadTestdata(path string) any { f, err := os.Open(path) if err != nil { return err.Error() } defer f.Close() r, err := gzip.NewReader(f) if err != nil { return err.Error() } defer r.Close() testdata := new(codeResponse2) if err := json.NewDecoder(r).Decode(testdata); err != nil { return err.Error() } return testdata } func TestCodec(t *testing.T) { for _, v1 := range testValues { t.Run(testName(v1), func(t *testing.T) { v2 := newValue(v1) a, err := json.MarshalIndent(v1, "", "\t") if err != nil { t.Error(err) return } a = append(a, '\n') buf := &bytes.Buffer{} enc := NewEncoder(buf) enc.SetIndent("", "\t") if err := enc.Encode(v1); err != nil { t.Error(err) return } b := buf.Bytes() if !Valid(b) { t.Error("invalid JSON representation") } if !bytes.Equal(a, b) { t.Error("JSON representations mismatch") t.Log("expected:", string(a)) t.Log("found: ", string(b)) } dec := NewDecoder(bytes.NewBuffer(b)) if err := dec.Decode(v2.Interface()); err != nil { t.Errorf("%T: %v", err, err) return } x1 := v1 x2 := v2.Elem().Interface() if !reflect.DeepEqual(x1, x2) { t.Error("values mismatch") t.Logf("expected: %#v", x1) t.Logf("found: %#v", x2) } if b, err := io.ReadAll(dec.Buffered()); err != nil { t.Error(err) } else if len(b) != 0 { t.Errorf("leftover trailing bytes in the decoder: %q", b) } }) } } // TestCodecDuration isolates testing of time.Duration. The stdlib un/marshals // this type as integers whereas this library un/marshals formatted string // values. Therefore, plugging durations into TestCodec would cause fail since // it checks equality on the marshaled strings from the two libraries. func TestCodecDuration(t *testing.T) { for _, v1 := range durationTestValues { t.Run(testName(v1), func(t *testing.T) { v2 := newValue(v1) // encode using stdlib. (will be an int) std, err := json.MarshalIndent(v1, "", "\t") if err != nil { t.Error(err) return } std = append(std, '\n') // decode using our decoder. (reads int to duration) dec := NewDecoder(bytes.NewBuffer([]byte(std))) if err := dec.Decode(v2.Interface()); err != nil { t.Errorf("%T: %v", err, err) return } x1 := v1 x2 := v2.Elem().Interface() if !reflect.DeepEqual(x1, x2) { t.Error("values mismatch") t.Logf("expected: %#v", x1) t.Logf("found: %#v", x2) } // encoding using our encoder. (writes duration as string) buf := &bytes.Buffer{} enc := NewEncoder(buf) enc.SetIndent("", "\t") if err := enc.Encode(v1); err != nil { t.Error(err) return } b := buf.Bytes() if !Valid(b) { t.Error("invalid JSON representation") } if reflect.DeepEqual(std, b) { t.Error("encoded durations should not match stdlib") t.Logf("got: %s", b) } // decode using our decoder. (reads string to duration) dec = NewDecoder(bytes.NewBuffer([]byte(std))) if err := dec.Decode(v2.Interface()); err != nil { t.Errorf("%T: %v", err, err) return } x1 = v1 x2 = v2.Elem().Interface() if !reflect.DeepEqual(x1, x2) { t.Error("values mismatch") t.Logf("expected: %#v", x1) t.Logf("found: %#v", x2) } }) } } var numericParseTests = [...]struct { name string input string flags ParseFlags want any }{ { name: "zero_flags_default", input: `0`, flags: 0, want: float64(0), }, { name: "zero_flags_int_uint_bigint_number", input: `0`, flags: UseInt64 | UseUint64 | UseBigInt | UseNumber, want: uint64(0), }, { name: "zero_flags_int_bigint_number", input: `0`, flags: UseInt64 | UseBigInt | UseNumber, want: int64(0), }, { name: "zero_flags_bigint_number", input: `0`, flags: UseBigInt | UseNumber, want: big.NewInt(0), }, { name: "zero_flags_number", input: `0`, flags: UseNumber, want: json.Number(`0`), }, { name: "max_uint64_flags_default", input: fmt.Sprint(uint64(math.MaxUint64)), flags: 0, want: float64(math.MaxUint64), }, { name: "max_uint64_flags_int_uint_bigint_number", input: fmt.Sprint(uint64(math.MaxUint64)), flags: UseInt64 | UseUint64 | UseBigInt | UseNumber, want: uint64(math.MaxUint64), }, { name: "min_int64_flags_uint_int_bigint_number", input: fmt.Sprint(int64(math.MinInt64)), flags: UseInt64 | UseBigInt | UseNumber, want: int64(math.MinInt64), }, { name: "max_uint64_flags_int_bigint_number", input: fmt.Sprint(uint64(math.MaxUint64)), flags: UseInt64 | UseBigInt | UseNumber, want: new(big.Int).SetUint64(math.MaxUint64), }, { name: "overflow_uint64_flags_uint_int_bigint_number", input: bigPos128.String(), flags: UseUint64 | UseInt64 | UseBigInt | UseNumber, want: bigPos128, }, { name: "underflow_uint64_flags_uint_int_bigint_number", input: bigNeg128.String(), flags: UseUint64 | UseInt64 | UseBigInt | UseNumber, want: bigNeg128, }, { name: "overflow_uint64_flags_uint_int_number", input: bigPos128.String(), flags: UseUint64 | UseInt64 | UseNumber, want: json.Number(bigPos128.String()), }, { name: "underflow_uint64_flags_uint_int_number", input: bigNeg128.String(), flags: UseUint64 | UseInt64 | UseNumber, want: json.Number(bigNeg128.String()), }, { name: "overflow_uint64_flags_uint_int", input: bigPos128.String(), flags: UseUint64 | UseInt64, want: float64(1 << 128), }, { name: "underflow_uint64_flags_uint_int", input: bigNeg128.String(), flags: UseUint64 | UseInt64, want: float64(-1 << 128), }, } func TestParse_numeric(t *testing.T) { t.Parallel() for _, test := range numericParseTests { test := test t.Run(test.name, func(t *testing.T) { t.Parallel() var got any rem, err := Parse([]byte(test.input), &got, test.flags) if err != nil { format := "Parse(%#q, ..., %#b) = %q [error], want nil" t.Errorf(format, test.input, test.flags, err) } if len(rem) != 0 { format := "Parse(%#q, ..., %#b) = %#q, want zero length" t.Errorf(format, test.input, test.flags, rem) } if !reflect.DeepEqual(got, test.want) { format := "Parse(%#q, %#b) -> %T(%#[3]v), want %T(%#[4]v)" t.Errorf(format, test.input, test.flags, got, test.want) } }) } } func newValue(model any) reflect.Value { if model == nil { return reflect.New(reflect.TypeOf(&model).Elem()) } return reflect.New(reflect.TypeOf(model)) } func BenchmarkMarshal(b *testing.B) { j := make([]byte, 0, 128*1024) for _, v := range testValues { b.Run(testName(v), func(b *testing.B) { if marshal == nil { return } for range b.N { j, _ = marshal(j[:0], v) } b.SetBytes(int64(len(j))) }) } } func BenchmarkUnmarshal(b *testing.B) { for _, v := range testValues { b.Run(testName(v), func(b *testing.B) { if unmarshal == nil { return } x := v if d, ok := x.(time.Duration); ok { x = duration(d) } j, _ := json.Marshal(x) x = newValue(v).Interface() for range b.N { unmarshal(j, x) } b.SetBytes(int64(len(j))) }) } } type buffer struct{ data []byte } func (buf *buffer) Write(b []byte) (int, error) { buf.data = append(buf.data, b...) return len(b), nil } func (buf *buffer) WriteString(s string) (int, error) { buf.data = append(buf.data, s...) return len(s), nil } type jsonValue struct { x int32 y int32 } func (v jsonValue) MarshalJSON() ([]byte, error) { return Marshal([2]int32{v.x, v.y}) } func (v *jsonValue) UnmarshalJSON(b []byte) error { var a [2]int32 err := Unmarshal(b, &a) v.x = a[0] v.y = a[1] return err } type textValue struct { x int32 y int32 } func (v textValue) MarshalText() ([]byte, error) { return []byte(fmt.Sprintf("(%d,%d)", v.x, v.y)), nil } func (v *textValue) UnmarshalText(b []byte) error { _, err := fmt.Sscanf(string(b), "(%d,%d)", &v.x, &v.y) return err } type duration time.Duration func (d duration) MarshalJSON() ([]byte, error) { return []byte(`"` + time.Duration(d).String() + `"`), nil } func (d *duration) UnmarshalJSON(b []byte) error { var s string if err := json.Unmarshal(b, &s); err != nil { return err } x, err := time.ParseDuration(s) *d = duration(x) return err } var ( _ Marshaler = jsonValue{} _ Marshaler = duration(0) _ encoding.TextMarshaler = textValue{} _ Unmarshaler = (*jsonValue)(nil) _ Unmarshaler = (*duration)(nil) _ encoding.TextUnmarshaler = (*textValue)(nil) ) func TestDecodeStructFieldCaseInsensitive(t *testing.T) { b := []byte(`{ "type": "changed" }`) s := struct { Type string }{"unchanged"} if err := Unmarshal(b, &s); err != nil { t.Error(err) } if s.Type != "changed" { t.Error("s.Type: expected to be changed but found", s.Type) } } func TestDecodeLines(t *testing.T) { tests := []struct { desc string reader io.Reader expectCount int }{ // simple { desc: "bare object", reader: strings.NewReader("{\"Good\":true}"), expectCount: 1, }, { desc: "multiple objects on one line", reader: strings.NewReader("{\"Good\":true}{\"Good\":true}\n"), expectCount: 2, }, { desc: "object spanning multiple lines", reader: strings.NewReader("{\n\"Good\":true\n}\n"), expectCount: 1, }, // whitespace handling { desc: "trailing newline", reader: strings.NewReader("{\"Good\":true}\n{\"Good\":true}\n"), expectCount: 2, }, { desc: "multiple trailing newlines", reader: strings.NewReader("{\"Good\":true}\n{\"Good\":true}\n\n"), expectCount: 2, }, { desc: "blank lines", reader: strings.NewReader("{\"Good\":true}\n\n{\"Good\":true}"), expectCount: 2, }, { desc: "no trailing newline", reader: strings.NewReader("{\"Good\":true}\n{\"Good\":true}"), expectCount: 2, }, { desc: "leading whitespace", reader: strings.NewReader(" {\"Good\":true}\n\t{\"Good\":true}"), expectCount: 2, }, // multiple reads { desc: "one object, multiple reads", reader: io.MultiReader( strings.NewReader("{"), strings.NewReader("\"Good\": true"), strings.NewReader("}\n"), ), expectCount: 1, }, // EOF reads { desc: "one object + EOF", reader: &eofReader{"{\"Good\":true}\n"}, expectCount: 1, }, { desc: "leading whitespace + EOF", reader: &eofReader{"\n{\"Good\":true}\n"}, expectCount: 1, }, { desc: "multiple objects + EOF", reader: &eofReader{"{\"Good\":true}\n{\"Good\":true}\n"}, expectCount: 2, }, { desc: "one object + multiple reads + EOF", reader: io.MultiReader( strings.NewReader("{"), strings.NewReader(" \"Good\": true"), &eofReader{"}\n"}, ), expectCount: 1, }, { desc: "multiple objects + multiple reads + EOF", reader: io.MultiReader( strings.NewReader("{"), strings.NewReader(" \"Good\": true}{\"Good\": true}"), &eofReader{"\n"}, ), expectCount: 2, }, { // the 2nd object should be discarded, as 42 cannot be cast to bool desc: "unmarshal error while decoding", reader: strings.NewReader("{\"Good\":true}\n{\"Good\":42}\n{\"Good\":true}\n"), expectCount: 2, }, { // the 2nd object should be discarded, as 42 cannot be cast to bool desc: "unmarshal error while decoding last object", reader: strings.NewReader("{\"Good\":true}\n{\"Good\":42}\n"), expectCount: 1, }, } type obj struct { Good bool } for _, test := range tests { t.Run(test.desc, func(t *testing.T) { d := NewDecoder(test.reader) var count int for { var o obj err := d.Decode(&o) if err != nil { if errors.Is(err, io.EOF) { break } switch err.(type) { case *SyntaxError, *UnmarshalTypeError, *UnmarshalFieldError: t.Log("unmarshal error", err) continue } t.Error("decode error", err) break } if !o.Good { t.Errorf("object was not unmarshaled correctly: %#v", o) } count++ } if count != test.expectCount { t.Errorf("expected %d objects, got %d", test.expectCount, count) } }) } } // eofReader is a simple io.Reader that reads its full contents _and_ returns // and EOF in the first call. Subsequent Read calls only return EOF. type eofReader struct { s string } func (r *eofReader) Read(p []byte) (n int, err error) { n = copy(p, r.s) r.s = r.s[n:] if r.s == "" { err = io.EOF } return } func TestDontMatchCaseIncensitiveStructFields(t *testing.T) { b := []byte(`{ "type": "changed" }`) s := struct { Type string }{"unchanged"} if _, err := Parse(b, &s, DontMatchCaseInsensitiveStructFields); err != nil { t.Error(err) } if s.Type != "unchanged" { t.Error("s.Type: expected to be unchanged but found", s.Type) } } func TestMarshalFuzzBugs(t *testing.T) { tests := []struct { value any output string }{ { // html sequences are escaped even in RawMessage value: struct { P RawMessage }{P: RawMessage(`"<"`)}, output: "{\"P\":\"\\u003c\"}", }, { // raw message output is compacted value: struct { P RawMessage }{P: RawMessage(`{"" :{}}`)}, output: "{\"P\":{\"\":{}}}", }, } for _, test := range tests { t.Run("", func(t *testing.T) { b, err := Marshal(test.value) if err != nil { t.Fatal(err) } if string(b) != test.output { t.Error("values mismatch") t.Logf("expected: %#v", test.output) t.Logf("found: %#v", string(b)) } }) } } func TestUnmarshalFuzzBugs(t *testing.T) { tests := []struct { input string value any }{ { // non-UTF8 sequences must be converted to the utf8.RuneError character. input: "[\"00000\xef\"]", value: []any{"00000�"}, }, { // UTF16 surrogate followed by null character input: "[\"\\ud800\\u0000\"]", value: []any{"�\x00"}, }, { // UTF16 surrogate followed by ascii character input: "[\"\\uDF00\\u000e\"]", value: []any{"�\x0e"}, }, { // UTF16 surrogate followed by unicode character input: "[[\"\\uDF00\\u0800\"]]", value: []any{[]any{"�ࠀ"}}, }, { // invalid UTF16 surrogate sequenced followed by a valid UTF16 surrogate sequence input: "[\"\\udf00\\udb00\\udf00\"]", value: []any{"�\U000d0300"}, }, { // decode single-element slice into []byte field input: "{\"f\":[0],\"0\":[0]}", value: struct{ F []byte }{F: []byte{0}}, }, { // decode multi-element slice into []byte field input: "{\"F\":[3,1,1,1,9,9]}", value: struct{ F []byte }{F: []byte{3, 1, 1, 1, 9, 9}}, }, { // decode string with escape sequence into []byte field input: "{\"F\":\"0p00\\r\"}", value: struct{ F []byte }{F: []byte("ҝ4")}, }, { // decode unicode code points which fold into ascii characters input: "{\"ſ\":\"8\"}", value: struct { S int `json:",string"` }{S: 8}, }, { // decode unicode code points which don't fold into ascii characters input: "{\"İ\":\"\"}", value: struct{ I map[string]string }{I: nil}, }, { // override pointer-to-pointer field clears the inner pointer only input: "{\"o\":0,\"o\":null}", value: struct{ O **int }{O: new(*int)}, }, { // subsequent occurrences of a map field retain keys previously loaded input: "{\"i\":{\"\":null},\"i\":{}}", value: struct{ I map[string]string }{I: map[string]string{"": ""}}, }, { // an empty string is an invalid JSON input input: "", }, { // ASCII character below 0x20 are invalid JSON input input: "[\"\b\"]", }, { // random byte before any value input: "\xad", }, { // cloud be the beginning of a false value but not input: "f", value: false, }, { // random ASCII character input: "}", value: []any{}, }, { // random byte after valid JSON, decoded to a nil type input: "0\x93", }, { // random byte after valid JSON, decoded to a int type input: "0\x93", value: 0, }, { // random byte after valid JSON, decoded to a slice type input: "0\x93", value: []any{}, }, { // decode integer into slice input: "0", value: []any{}, }, { // decode integer with trailing space into slice input: "0\t", value: []any{}, }, { // decode integer with leading random bytes into slice input: "\b0", value: []any{}, }, { // decode string into slice followed by number input: "\"\"0", value: []any{}, }, { // decode what looks like an object followed by a number into a string input: "{0", value: "", }, { // decode what looks like an object followed by a number into a map input: "{0", value: map[string]string{}, }, { // decode string into string with trailing random byte input: "\"\"\f", value: "", }, { // decode weird number value into nil input: "-00", }, { // decode an invalid escaped sequence input: "\"\\0\"", value: "", }, { // decode what looks like an array followed by a number into a slice input: "[9E600", value: []any{}, }, { // decode a number which is too large to fit in a float64 input: "[1e900]", value: []any{}, }, { // many nested arrays openings input: "[[[[[[", value: []any{}, }, { // decode a map with value type mismatch and missing closing character input: "{\"\":0", value: map[string]string{}, }, { // decode a struct with value type mismatch and missing closing character input: "{\"E\":\"\"", value: struct{ E uint8 }{}, }, { // decode a map with value type mismatch input: "{\"\":0}", value: map[string]string{}, }, { // decode number with exponent into integer field input: "{\"e\":0e0}", value: struct{ E uint8 }{}, }, { // decode invalid integer representation into integer field input: "{\"e\":00}", value: struct{ E uint8 }{}, }, { // decode unterminated array into byte slice input: "{\"F\":[", value: struct{ F []byte }{}, }, { // attempt to decode string into in input: "{\"S\":\"\"}", value: struct { S int `json:",string"` }{}, }, { // decode object with null key into map input: "{null:0}", value: map[string]any{}, }, { // decode unquoted integer into struct field with string tag input: "{\"S\":0}", value: struct { S int `json:",string"` }{}, }, { // invalid base64 content when decoding string into byte slice input: "{\"F\":\"0\"}", value: struct{ F []byte }{}, }, { // decode an object with a "null" string as key input: "{\"null\":null}", value: struct { S int `json:",string"` }{}, }, { // decode an invalid floating point number representation into an integer field with string tag input: "{\"s\":8e800}", value: struct { S int `json:",string"` }{}, }, { // decode a string with leading zeroes into an integer field with string tag input: "{\"S\":\"00\"}", value: struct { S int `json:",string"` }{}, }, { // decode a string with invalid leading sign and zeroes into an integer field with string tag input: "{\"S\":\"+00\"}", value: struct { S int `json:",string"` }{}, }, { // decode a string with valid leading sign and zeroes into an integer field with string tag input: "{\"S\":\"-00\"}", value: struct { S int `json:",string"` }{}, }, { // decode non-ascii string into integer field with string tag input: "{\"ſ\":\"\xbf\"}", value: struct { S int `json:",string"` }{}, }, { // decode a valid floating point number representation into an integer field with string tag input: "{\"S\":0.0}", value: struct { S int `json:",string"` }{}, }, { // decode string with invalid leading sign to integer field with string tag input: "{\"S\":\"+0\"}", value: struct { S int `json:",string"` }{}, }, { // decode string with valid leading sign to integer field with string tag input: "{\"S\":\"-0\"}", value: struct { S int `json:",string"` }{}, }, { // decode string with object representation to integer field with string tag input: "{\"s\":{}}", value: struct { S int `json:",string"` }{}, }, { // decoding integer with leading zeroes input: "{\"o\":00}", value: struct{ O **int }{}, }, { // codeding string with invalid float representation into integer field with string tag input: "{\"s\":\"0.\"}", value: struct { S int `json:",string"` }{}, }, { // malformed negative integer in object value input: "{\"N\":-00}", value: struct{ N *int }{}, }, { // integer overflow input: "{\"a\":9223372036854775808}", value: struct { A int `json:",omitempty"` }{}, }, { // decode string with number followed by random byte into integer field with string tag input: "{\"s\":\"0]\"}", value: struct { S int `json:",string"` }{}, }, { // decode object into integer field input: "{\"n\":{}}", value: struct{ N *int }{}, }, { // decode negative integer into unsigned type input: "{\"E\":-0}", value: struct{ E uint8 }{}, }, { // decode string with number followed by random byte into integer field with string tag input: "{\"s\":\"03�\"}", value: struct { S int `json:",string"` }{}, }, { // decode string with leading zeroes into integer field with string tag input: "{\"s\":\"03\"}", value: struct { S int `json:",string"` }{S: 3}, }, { // decode string containing what looks like an object into integer field with string tag input: "{\"S\":\"{}\"}", value: struct { S int `json:",string"` }{}, }, { // decode an empty string followed by the same field with a null value into a byte slice input: "{\"F\":\"\",\"F\":null}", value: struct{ F []byte }{}, }, { // decode string containing a float into an integer field with string tag input: "{\"S\":\"0e0\"}", value: struct { S int `json:",string"` }{}, }, { // decode string with negative sign into a an integer field with string tag input: "{\"s\":\"-\"}", value: struct { S int `json:",string"` }{}, }, { // decode string with positive sign into a an integer field with string tag input: "{\"s\":\"+\"}", value: struct { S int `json:",string"` }{}, }, { // decode an integer into a json unmarshaler input: "{\"q\":0}", value: struct { Q testMarshaller }{}, }, // This test fails because it appears that the encoding/json package // will decode "q" before "s", so it returns an error about "q" being of // the wrong type while this package will prase object keys in the order // that they appear in the JSON input, so it detects the error from "s" // first. // //{ // input: "{\"s\":0,\"q\":0}", // value: struct { // Q testMarshaller // S int `json:",string"` // }{}, //}, } for _, test := range tests { t.Run("", func(t *testing.T) { var ptr1 any var ptr2 any if test.value != nil { ptr1 = reflect.New(reflect.TypeOf(test.value)).Interface() ptr2 = reflect.New(reflect.TypeOf(test.value)).Interface() } err1 := json.Unmarshal([]byte(test.input), ptr1) err2 := Unmarshal([]byte(test.input), ptr2) if reflect.TypeOf(err1) != reflect.TypeOf(err2) { t.Error("errors mismatch") t.Logf("expected: %T: %v", err1, err1) t.Logf("found: %T: %v", err2, err2) } else if err1 == nil && test.value != nil { if value := reflect.ValueOf(ptr2).Elem().Interface(); !reflect.DeepEqual(test.value, value) { t.Error("values mismatch") t.Logf("expected: %#v", test.value) t.Logf("found: %#v", value) } } }) } } func BenchmarkEasyjsonUnmarshalSmallStruct(b *testing.B) { type Hashtag struct { Indices []int `json:"indices"` Text string `json:"text"` } //easyjson:json type Entities struct { Hashtags []Hashtag `json:"hashtags"` Urls []*string `json:"urls"` UserMentions []*string `json:"user_mentions"` } json := []byte(`{"hashtags":[{"indices":[5, 10],"text":"some-text"}],"urls":[],"user_mentions":[]}`) for range b.N { var value Entities if err := Unmarshal(json, &value); err != nil { b.Fatal(err) } } } type testMarshaller struct { v string } func (m *testMarshaller) MarshalJSON() ([]byte, error) { return Marshal(m.v) } func (m *testMarshaller) UnmarshalJSON(data []byte) error { return Unmarshal(data, &m.v) } func TestGithubIssue11(t *testing.T) { // https://github.com/segmentio/encoding/issues/11 v := struct{ F float64 }{ F: math.NaN(), } _, err := Marshal(v) if err == nil { t.Error("no error returned when marshalling NaN value") } else if s := err.Error(); !strings.Contains(s, "NaN") { t.Error("error returned when marshalling NaN value does not mention 'NaN':", s) } else { t.Log(s) } } type Issue13 struct { Stringer fmt.Stringer Field int `json:"MyInt"` } type S string func (s S) String() string { return string(s) } func TestGithubIssue13(t *testing.T) { // https://github.com/segmentio/encoding/issues/13 v := Issue13{} b, err := Marshal(v) if err != nil { t.Error("unexpected errror:", err) } else { t.Log(string(b)) } v = Issue13{Stringer: S("")} if err := Unmarshal([]byte(`{"Stringer":null}`), &v); err != nil { t.Error("unexpected error:", err) } if v.Stringer != nil { t.Error("Stringer field was not overwritten") } v = Issue13{} if err := Unmarshal([]byte(`{"Stringer":"whatever"}`), &v); err == nil { t.Error("expected error but decoding string value into nil fmt.Stringer but got ") } v = Issue13{Stringer: S("")} if err := Unmarshal([]byte(`{"Stringer":"whatever"}`), &v); err == nil { t.Error("expected error but decoding string value into non-pointer fmt.Stringer but got ") } s := S("") v = Issue13{Stringer: &s} if err := Unmarshal([]byte(`{"Stringer":"whatever"}`), &v); err != nil { t.Error("unexpected error decoding string value into pointer fmt.Stringer:", err) } } func TestGithubIssue15(t *testing.T) { // https://github.com/segmentio/encoding/issues/15 tests := []struct { m any s string }{ { m: map[uint]bool{1: true, 123: true, 333: true, 42: true}, s: `{"1":true,"123":true,"333":true,"42":true}`, }, { m: map[int]bool{-1: true, -123: true, 333: true, 42: true}, s: `{"-1":true,"-123":true,"333":true,"42":true}`, }, } for _, test := range tests { b, _ := Marshal(test.m) if string(b) != test.s { t.Error("map with integer keys must be ordered by their string representation, got", string(b)) } } } type sliceA []byte func (sliceA) MarshalJSON() ([]byte, error) { return []byte(`"A"`), nil } type sliceB []byte func (sliceB) MarshalText() ([]byte, error) { return []byte("B"), nil } type mapA map[string]string func (mapA) MarshalJSON() ([]byte, error) { return []byte(`"A"`), nil } type mapB map[string]string func (mapB) MarshalText() ([]byte, error) { return []byte("B"), nil } type intPtrA int func (*intPtrA) MarshalJSON() ([]byte, error) { return []byte(`"A"`), nil } type intPtrB int func (*intPtrB) MarshalText() ([]byte, error) { return []byte("B"), nil } type ( structA struct{ I intPtrA } structB struct{ I intPtrB } structC struct{ M Marshaler } structD struct{ M encoding.TextMarshaler } ) func TestGithubIssue16(t *testing.T) { // https://github.com/segmentio/encoding/issues/16 tests := []struct { value any output string }{ {value: sliceA(nil), output: `"A"`}, {value: sliceB(nil), output: `"B"`}, {value: mapA(nil), output: `"A"`}, {value: mapB(nil), output: `"B"`}, {value: intPtrA(1), output: `1`}, {value: intPtrB(2), output: `2`}, {value: new(intPtrA), output: `"A"`}, {value: new(intPtrB), output: `"B"`}, {value: (*intPtrA)(nil), output: `null`}, {value: (*intPtrB)(nil), output: `null`}, {value: structA{I: 1}, output: `{"I":1}`}, {value: structB{I: 2}, output: `{"I":2}`}, {value: structC{}, output: `{"M":null}`}, {value: structD{}, output: `{"M":null}`}, {value: &structA{I: 1}, output: `{"I":"A"}`}, {value: &structB{I: 2}, output: `{"I":"B"}`}, {value: &structC{}, output: `{"M":null}`}, {value: &structD{}, output: `{"M":null}`}, } for _, test := range tests { t.Run(fmt.Sprintf("%T", test.value), func(t *testing.T) { if b, _ := Marshal(test.value); string(b) != test.output { t.Errorf(`%s != %s`, string(b), test.output) } }) } } func TestDecoderInputOffset(t *testing.T) { checkOffset := func(o, expected int64) { if o != expected { t.Error("unexpected input offset", o, expected) } } b := []byte(`{"userId": "blah"}{"userId": "blah"} {"userId": "blah"}{"num": 0}`) d := NewDecoder(bytes.NewReader(b)) var expected int64 checkOffset(d.InputOffset(), expected) var a struct { UserId string `json:"userId"` } if err := d.Decode(&a); err != nil { t.Error("unexpected decode error", err) } expected = int64(18) checkOffset(d.InputOffset(), expected) if err := d.Decode(&a); err != nil { t.Error("unexpected decode error", err) } expected = int64(38) checkOffset(d.InputOffset(), expected) if err := d.Decode(&a); err != nil { t.Error("unexpected decode error", err) } expected = int64(56) checkOffset(d.InputOffset(), expected) var z struct { Num int64 `json:"num"` } if err := d.Decode(&z); err != nil { t.Error("unexpected decode error", err) } expected = int64(66) checkOffset(d.InputOffset(), expected) } func TestGithubIssue18(t *testing.T) { // https://github.com/segmentio/encoding/issues/18 b := []byte(`{ "userId": "blah", }`) d := NewDecoder(bytes.NewReader(b)) var a struct { UserId string `json:"userId"` } switch err := d.Decode(&a).(type) { case *SyntaxError: default: t.Error("expected syntax error but found:", err) } for i := 1; i <= 18; i++ { // up to the invalid ',' character d := NewDecoder(bytes.NewReader(b[:i])) // cut somewhere in the middle switch err := d.Decode(&a); err { case io.ErrUnexpectedEOF: default: t.Error("expected 'unexpected EOF' error but found:", err) } } } func TestGithubIssue23(t *testing.T) { t.Run("marshal-1", func(t *testing.T) { type d struct{ S map[string]string } b, _ := Marshal(map[string]d{"1": {S: map[string]string{"2": "3"}}}) if string(b) != `{"1":{"S":{"2":"3"}}}` { t.Error(string(b)) } }) t.Run("marshal-2", func(t *testing.T) { type testInner struct { InnerMap map[string]string `json:"inner_map"` } type testOuter struct { OuterMap map[string]testInner `json:"outer_map"` } b, _ := Marshal(testOuter{ OuterMap: map[string]testInner{ "outer": { InnerMap: map[string]string{"inner": "value"}, }, }, }) if string(b) != `{"outer_map":{"outer":{"inner_map":{"inner":"value"}}}}` { t.Error(string(b)) } }) t.Run("marshal-3", func(t *testing.T) { type A struct{ A map[string]string } type B struct{ B map[string]A } type C struct{ C map[string]B } b, _ := Marshal(C{ C: map[string]B{ "1": { B: map[string]A{ "2": { A: map[string]string{"3": "!"}, }, }, }, }, }) if string(b) != `{"C":{"1":{"B":{"2":{"A":{"3":"!"}}}}}}` { t.Error(string(b)) } }) t.Run("unmarshal-1", func(t *testing.T) { var d struct{ S map[string]string } if err := Unmarshal([]byte(`{"1":{"S":{"2":"3"}}}`), &d); err != nil { t.Error(err) } }) } func TestGithubIssue26(t *testing.T) { type interfaceType any var value interfaceType data := []byte(`{}`) if err := Unmarshal(data, &value); err != nil { t.Error(err) } } func TestGithubIssue28(t *testing.T) { type A struct { Err error `json:"err"` } if b, err := Marshal(&A{Err: errors.New("ABC")}); err != nil { t.Error(err) } else if string(b) != `{"err":{}}` { t.Error(string(b)) } } func TestGithubIssue41(t *testing.T) { expectedString := `{"Zero":0,"Three":3}` type M struct { One int Two int } type N struct { Zero int *M Three int } if b, err := Marshal(N{Three: 3}); err != nil { t.Error(err) } else if string(b) != expectedString { t.Error( "got: ", string(b), "expected: ", expectedString, ) } } func TestGithubIssue44(t *testing.T) { var out rawJsonString if err := Unmarshal([]byte("null"), &out); err != nil { t.Fatal(err) } if out != "null" { t.Errorf("wanted \"null\" but got %q", out) } } type issue107Foo struct { Bar *issue107Bar } type issue107Bar struct { Foo *issue107Foo } func TestGithubIssue107(t *testing.T) { f := &issue107Foo{} b := &issue107Bar{} f.Bar = b b.Foo = f _, err := Marshal(f) // must not crash switch err.(type) { case *UnsupportedValueError: default: t.Errorf("marshaling a cycling data structure was expected to return an unsupported value error but got %T", err) } } type rawJsonString string func (r *rawJsonString) UnmarshalJSON(b []byte) error { if len(b) == 0 { *r = "null" } else { *r = rawJsonString(b) } return nil } func TestSetTrustRawMessage(t *testing.T) { buf := &bytes.Buffer{} enc := NewEncoder(buf) enc.SetTrustRawMessage(true) // "Good" values are encoded in the regular way m := map[string]json.RawMessage{ "k": json.RawMessage(`"value"`), } if err := enc.Encode(m); err != nil { t.Error(err) } b := buf.Bytes() exp := []byte(`{"k":"value"}`) exp = append(exp, '\n') if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", exp, "got", b, ) } // "Bad" values are encoded without checking and throwing an error buf.Reset() m = map[string]json.RawMessage{ "k": json.RawMessage(`bad"value`), } if err := enc.Encode(m); err != nil { t.Error(err) } b = buf.Bytes() exp = []byte(`{"k":bad"value}`) exp = append(exp, '\n') if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", exp, "got", b, ) } } func TestSetAppendNewline(t *testing.T) { buf := &bytes.Buffer{} enc := NewEncoder(buf) m := "value" // Default encoding adds an extra newline if err := enc.Encode(m); err != nil { t.Error(err) } b := buf.Bytes() exp := []byte(`"value"`) exp = append(exp, '\n') if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", exp, "got", b, ) } // With SetAppendNewline(false), there shouldn't be a newline in the output buf.Reset() enc.SetAppendNewline(false) if err := enc.Encode(m); err != nil { t.Error(err) } b = buf.Bytes() exp = []byte(`"value"`) if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", exp, "got", b, ) } } func TestEscapeString(t *testing.T) { b := Escape(`value`) x := []byte(`"value"`) if !bytes.Equal(x, b) { t.Error( "unexpected encoding:", "expected", string(x), "got", string(b), ) } } func TestAppendEscape(t *testing.T) { t.Run("basic", func(t *testing.T) { b := AppendEscape([]byte{}, `value`, AppendFlags(0)) exp := []byte(`"value"`) if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", exp, "got", b, ) } }) t.Run("escaped", func(t *testing.T) { b := AppendEscape([]byte{}, `"escaped" `, EscapeHTML) exp := []byte(`"\"escaped\"\t\u003cvalue\u003e"`) if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", exp, "got", b, ) } }) t.Run("build", func(t *testing.T) { b := []byte{} b = append(b, '{') b = AppendEscape(b, `key`, EscapeHTML) b = append(b, ':') b = AppendEscape(b, `"escaped" `, EscapeHTML) b = append(b, '}') exp := []byte(`{"key":"\"escaped\"\t\u003cvalue\u003e"}`) if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", exp, "got", b, ) } }) } func TestUnescapeString(t *testing.T) { b := Unescape([]byte(`"value"`)) x := []byte(`value`) if !bytes.Equal(x, b) { t.Error( "unexpected decoding:", "expected", string(x), "got", string(b), ) } } func TestAppendUnescape(t *testing.T) { t.Run("basic", func(t *testing.T) { out := AppendUnescape([]byte{}, []byte(`"value"`), ParseFlags(0)) exp := []byte("value") if !bytes.Equal(exp, out) { t.Error( "unexpected decoding:", "expected", exp, "got", out, ) } }) t.Run("escaped", func(t *testing.T) { b := AppendUnescape([]byte{}, []byte(`"\"escaped\"\t\u003cvalue\u003e"`), ParseFlags(0)) exp := []byte(`"escaped" `) if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", exp, "got", b, ) } }) t.Run("build", func(t *testing.T) { b := []byte{} b = append(b, []byte(`{"key":`)...) b = AppendUnescape(b, []byte(`"\"escaped\"\t\u003cvalue\u003e"`), ParseFlags(0)) b = append(b, '}') exp := []byte(`{"key":"escaped" }`) if !bytes.Equal(exp, b) { t.Error( "unexpected encoding:", "expected", string(exp), "got", string(b), ) } }) } func BenchmarkUnescape(b *testing.B) { s := []byte(`"\"escaped\"\t\u003cvalue\u003e"`) out := []byte{} for range b.N { out = Unescape(s) } b.Log(string(out)) } func BenchmarkUnmarshalField(b *testing.B) { s := []byte(`"\"escaped\"\t\u003cvalue\u003e"`) var v string for range b.N { json.Unmarshal(s, &v) } b.Log(v) } func TestKind(t *testing.T) { for _, test := range []struct { kind Kind class Kind }{ {kind: 0, class: 0}, {kind: Null, class: Null}, {kind: False, class: Bool}, {kind: True, class: Bool}, {kind: Num, class: Num}, {kind: Uint, class: Num}, {kind: Int, class: Num}, {kind: Float, class: Num}, {kind: String, class: String}, {kind: Unescaped, class: String}, {kind: Array, class: Array}, {kind: Object, class: Object}, } { if class := test.kind.Class(); class != test.class { t.Errorf("class of kind(%d) mismatch: want=%d got=%d", test.kind, test.class, class) } } } golang-github-segmentio-encoding-0.5.3/json/parse.go000066400000000000000000000403721504206176600224510ustar00rootroot00000000000000package json import ( "bytes" "encoding/binary" "math" "math/bits" "reflect" "unicode" "unicode/utf16" "unicode/utf8" "github.com/segmentio/encoding/ascii" ) // All spaces characters defined in the json specification. const ( sp = ' ' ht = '\t' nl = '\n' cr = '\r' ) func internalParseFlags(b []byte) (flags ParseFlags) { // Don't consider surrounding whitespace b = skipSpaces(b) b = trimTrailingSpaces(b) if ascii.ValidPrint(b) { flags |= validAsciiPrint } if bytes.IndexByte(b, '\\') == -1 { flags |= noBackslash } return } func skipSpaces(b []byte) []byte { if len(b) > 0 && b[0] <= 0x20 { b, _ = skipSpacesN(b) } return b } func skipSpacesN(b []byte) ([]byte, int) { for i := range b { switch b[i] { case sp, ht, nl, cr: default: return b[i:], i } } return nil, 0 } func trimTrailingSpaces(b []byte) []byte { if len(b) > 0 && b[len(b)-1] <= 0x20 { b = trimTrailingSpacesN(b) } return b } func trimTrailingSpacesN(b []byte) []byte { i := len(b) - 1 loop: for ; i >= 0; i-- { switch b[i] { case sp, ht, nl, cr: default: break loop } } return b[:i+1] } // parseInt parses a decimal representation of an int64 from b. // // The function is equivalent to calling strconv.ParseInt(string(b), 10, 64) but // it prevents Go from making a memory allocation for converting a byte slice to // a string (escape analysis fails due to the error returned by strconv.ParseInt). // // Because it only works with base 10 the function is also significantly faster // than strconv.ParseInt. func (d decoder) parseInt(b []byte, t reflect.Type) (int64, []byte, error) { var value int64 var count int if len(b) == 0 { return 0, b, syntaxError(b, "cannot decode integer from an empty input") } if b[0] == '-' { const max = math.MinInt64 const lim = max / 10 if len(b) == 1 { return 0, b, syntaxError(b, "cannot decode integer from '-'") } if len(b) > 2 && b[1] == '0' && '0' <= b[2] && b[2] <= '9' { return 0, b, syntaxError(b, "invalid leading character '0' in integer") } for _, c := range b[1:] { if c < '0' || c > '9' { if count == 0 { b, err := d.inputError(b, t) return 0, b, err } break } if value < lim { return 0, b, unmarshalOverflow(b, t) } value *= 10 x := int64(c - '0') if value < (max + x) { return 0, b, unmarshalOverflow(b, t) } value -= x count++ } count++ } else { if len(b) > 1 && b[0] == '0' && '0' <= b[1] && b[1] <= '9' { return 0, b, syntaxError(b, "invalid leading character '0' in integer") } for ; count < len(b) && b[count] >= '0' && b[count] <= '9'; count++ { x := int64(b[count] - '0') next := value*10 + x if next < value { return 0, b, unmarshalOverflow(b, t) } value = next } if count == 0 { b, err := d.inputError(b, t) return 0, b, err } } if count < len(b) { switch b[count] { case '.', 'e', 'E': // was this actually a float? v, r, _, err := d.parseNumber(b) if err != nil { v, r = b[:count+1], b[count+1:] } return 0, r, unmarshalTypeError(v, t) } } return value, b[count:], nil } // parseUint is like parseInt but for unsigned integers. func (d decoder) parseUint(b []byte, t reflect.Type) (uint64, []byte, error) { var value uint64 var count int if len(b) == 0 { return 0, b, syntaxError(b, "cannot decode integer value from an empty input") } if len(b) > 1 && b[0] == '0' && '0' <= b[1] && b[1] <= '9' { return 0, b, syntaxError(b, "invalid leading character '0' in integer") } for ; count < len(b) && b[count] >= '0' && b[count] <= '9'; count++ { x := uint64(b[count] - '0') next := value*10 + x if next < value { return 0, b, unmarshalOverflow(b, t) } value = next } if count == 0 { b, err := d.inputError(b, t) return 0, b, err } if count < len(b) { switch b[count] { case '.', 'e', 'E': // was this actually a float? v, r, _, err := d.parseNumber(b) if err != nil { v, r = b[:count+1], b[count+1:] } return 0, r, unmarshalTypeError(v, t) } } return value, b[count:], nil } // parseUintHex parses a hexadecimanl representation of a uint64 from b. // // The function is equivalent to calling strconv.ParseUint(string(b), 16, 64) but // it prevents Go from making a memory allocation for converting a byte slice to // a string (escape analysis fails due to the error returned by strconv.ParseUint). // // Because it only works with base 16 the function is also significantly faster // than strconv.ParseUint. func (d decoder) parseUintHex(b []byte) (uint64, []byte, error) { const max = math.MaxUint64 const lim = max / 0x10 var value uint64 var count int if len(b) == 0 { return 0, b, syntaxError(b, "cannot decode hexadecimal value from an empty input") } parseLoop: for i, c := range b { var x uint64 switch { case c >= '0' && c <= '9': x = uint64(c - '0') case c >= 'A' && c <= 'F': x = uint64(c-'A') + 0xA case c >= 'a' && c <= 'f': x = uint64(c-'a') + 0xA default: if i == 0 { return 0, b, syntaxError(b, "expected hexadecimal digit but found '%c'", c) } break parseLoop } if value > lim { return 0, b, syntaxError(b, "hexadecimal value out of range") } if value *= 0x10; value > (max - x) { return 0, b, syntaxError(b, "hexadecimal value out of range") } value += x count++ } return value, b[count:], nil } func (d decoder) parseNull(b []byte) ([]byte, []byte, Kind, error) { if hasNullPrefix(b) { return b[:4], b[4:], Null, nil } if len(b) < 4 { return nil, b[len(b):], Undefined, unexpectedEOF(b) } return nil, b, Undefined, syntaxError(b, "expected 'null' but found invalid token") } func (d decoder) parseTrue(b []byte) ([]byte, []byte, Kind, error) { if hasTruePrefix(b) { return b[:4], b[4:], True, nil } if len(b) < 4 { return nil, b[len(b):], Undefined, unexpectedEOF(b) } return nil, b, Undefined, syntaxError(b, "expected 'true' but found invalid token") } func (d decoder) parseFalse(b []byte) ([]byte, []byte, Kind, error) { if hasFalsePrefix(b) { return b[:5], b[5:], False, nil } if len(b) < 5 { return nil, b[len(b):], Undefined, unexpectedEOF(b) } return nil, b, Undefined, syntaxError(b, "expected 'false' but found invalid token") } func (d decoder) parseNumber(b []byte) (v, r []byte, kind Kind, err error) { if len(b) == 0 { r, err = b, unexpectedEOF(b) return } // Assume it's an unsigned integer at first. kind = Uint i := 0 // sign if b[i] == '-' { kind = Int i++ } if i == len(b) { r, err = b[i:], syntaxError(b, "missing number value after sign") return } if b[i] < '0' || b[i] > '9' { r, err = b[i:], syntaxError(b, "expected digit but got '%c'", b[i]) return } // integer part if b[i] == '0' { i++ if i == len(b) || (b[i] != '.' && b[i] != 'e' && b[i] != 'E') { v, r = b[:i], b[i:] return } if '0' <= b[i] && b[i] <= '9' { r, err = b[i:], syntaxError(b, "cannot decode number with leading '0' character") return } } for i < len(b) && '0' <= b[i] && b[i] <= '9' { i++ } // decimal part if i < len(b) && b[i] == '.' { kind = Float i++ decimalStart := i for i < len(b) { if c := b[i]; '0' > c || c > '9' { if i == decimalStart { r, err = b[i:], syntaxError(b, "expected digit but found '%c'", c) return } break } i++ } if i == decimalStart { r, err = b[i:], syntaxError(b, "expected decimal part after '.'") return } } // exponent part if i < len(b) && (b[i] == 'e' || b[i] == 'E') { kind = Float i++ if i < len(b) { if c := b[i]; c == '+' || c == '-' { i++ } } if i == len(b) { r, err = b[i:], syntaxError(b, "missing exponent in number") return } exponentStart := i for i < len(b) { if c := b[i]; '0' > c || c > '9' { if i == exponentStart { err = syntaxError(b, "expected digit but found '%c'", c) return } break } i++ } } v, r = b[:i], b[i:] return } func (d decoder) parseUnicode(b []byte) (rune, int, error) { if len(b) < 4 { return 0, len(b), syntaxError(b, "unicode code point must have at least 4 characters") } u, r, err := d.parseUintHex(b[:4]) if err != nil { return 0, 4, syntaxError(b, "parsing unicode code point: %s", err) } if len(r) != 0 { return 0, 4, syntaxError(b, "invalid unicode code point") } return rune(u), 4, nil } func (d decoder) parseString(b []byte) ([]byte, []byte, Kind, error) { if len(b) < 2 { return nil, b[len(b):], Undefined, unexpectedEOF(b) } if b[0] != '"' { return nil, b, Undefined, syntaxError(b, "expected '\"' at the beginning of a string value") } var n int if len(b) >= 9 { // This is an optimization for short strings. We read 8/16 bytes, // and XOR each with 0x22 (") so that these bytes (and only // these bytes) are now zero. We use the hasless(u,1) trick // from https://graphics.stanford.edu/~seander/bithacks.html#ZeroInWord // to determine whether any bytes are zero. Finally, we CTZ // to find the index of that byte. const mask1 = 0x2222222222222222 const mask2 = 0x0101010101010101 const mask3 = 0x8080808080808080 u := binary.LittleEndian.Uint64(b[1:]) ^ mask1 if mask := (u - mask2) & ^u & mask3; mask != 0 { n = bits.TrailingZeros64(mask)/8 + 2 goto found } if len(b) >= 17 { u = binary.LittleEndian.Uint64(b[9:]) ^ mask1 if mask := (u - mask2) & ^u & mask3; mask != 0 { n = bits.TrailingZeros64(mask)/8 + 10 goto found } } } n = bytes.IndexByte(b[1:], '"') + 2 if n <= 1 { return nil, b[len(b):], Undefined, syntaxError(b, "missing '\"' at the end of a string value") } found: if (d.flags.has(noBackslash) || bytes.IndexByte(b[1:n], '\\') < 0) && (d.flags.has(validAsciiPrint) || ascii.ValidPrint(b[1:n])) { return b[:n], b[n:], Unescaped, nil } for i := 1; i < len(b); i++ { switch b[i] { case '\\': if i++; i < len(b) { switch b[i] { case '"', '\\', '/', 'n', 'r', 't', 'f', 'b': case 'u': _, n, err := d.parseUnicode(b[i+1:]) if err != nil { return nil, b[i+1+n:], Undefined, err } i += n default: return nil, b, Undefined, syntaxError(b, "invalid character '%c' in string escape code", b[i]) } } case '"': return b[:i+1], b[i+1:], String, nil default: if b[i] < 0x20 { return nil, b, Undefined, syntaxError(b, "invalid character '%c' in string escape code", b[i]) } } } return nil, b[len(b):], Undefined, syntaxError(b, "missing '\"' at the end of a string value") } func (d decoder) parseStringUnquote(b []byte, r []byte) ([]byte, []byte, bool, error) { s, b, k, err := d.parseString(b) if err != nil { return s, b, false, err } s = s[1 : len(s)-1] // trim the quotes if k == Unescaped { return s, b, false, nil } if r == nil { r = make([]byte, 0, len(s)) } for len(s) != 0 { i := bytes.IndexByte(s, '\\') if i < 0 { r = appendCoerceInvalidUTF8(r, s) break } r = appendCoerceInvalidUTF8(r, s[:i]) s = s[i+1:] c := s[0] switch c { case '"', '\\', '/': // simple escaped character case 'n': c = '\n' case 'r': c = '\r' case 't': c = '\t' case 'b': c = '\b' case 'f': c = '\f' case 'u': s = s[1:] r1, n1, err := d.parseUnicode(s) if err != nil { return r, b, true, err } s = s[n1:] if utf16.IsSurrogate(r1) { if !hasPrefix(s, `\u`) { r1 = unicode.ReplacementChar } else { r2, n2, err := d.parseUnicode(s[2:]) if err != nil { return r, b, true, err } if r1 = utf16.DecodeRune(r1, r2); r1 != unicode.ReplacementChar { s = s[2+n2:] } } } r = appendRune(r, r1) continue default: // not sure what this escape sequence is return r, b, false, syntaxError(s, "invalid character '%c' in string escape code", c) } r = append(r, c) s = s[1:] } return r, b, true, nil } func appendRune(b []byte, r rune) []byte { n := len(b) b = append(b, 0, 0, 0, 0) return b[:n+utf8.EncodeRune(b[n:], r)] } func appendCoerceInvalidUTF8(b []byte, s []byte) []byte { c := [4]byte{} for _, r := range string(s) { b = append(b, c[:utf8.EncodeRune(c[:], r)]...) } return b } func (d decoder) parseObject(b []byte) ([]byte, []byte, Kind, error) { if len(b) < 2 { return nil, b[len(b):], Undefined, unexpectedEOF(b) } if b[0] != '{' { return nil, b, Undefined, syntaxError(b, "expected '{' at the beginning of an object value") } var err error a := b n := len(b) i := 0 b = b[1:] for { b = skipSpaces(b) if len(b) == 0 { return nil, b, Undefined, syntaxError(b, "cannot decode object from empty input") } if b[0] == '}' { j := (n - len(b)) + 1 return a[:j], a[j:], Object, nil } if i != 0 { if len(b) == 0 { return nil, b, Undefined, syntaxError(b, "unexpected EOF after object field value") } if b[0] != ',' { return nil, b, Undefined, syntaxError(b, "expected ',' after object field value but found '%c'", b[0]) } b = skipSpaces(b[1:]) if len(b) == 0 { return nil, b, Undefined, unexpectedEOF(b) } if b[0] == '}' { return nil, b, Undefined, syntaxError(b, "unexpected trailing comma after object field") } } _, b, _, err = d.parseString(b) if err != nil { return nil, b, Undefined, err } b = skipSpaces(b) if len(b) == 0 { return nil, b, Undefined, syntaxError(b, "unexpected EOF after object field key") } if b[0] != ':' { return nil, b, Undefined, syntaxError(b, "expected ':' after object field key but found '%c'", b[0]) } b = skipSpaces(b[1:]) _, b, _, err = d.parseValue(b) if err != nil { return nil, b, Undefined, err } i++ } } func (d decoder) parseArray(b []byte) ([]byte, []byte, Kind, error) { if len(b) < 2 { return nil, b[len(b):], Undefined, unexpectedEOF(b) } if b[0] != '[' { return nil, b, Undefined, syntaxError(b, "expected '[' at the beginning of array value") } var err error a := b n := len(b) i := 0 b = b[1:] for { b = skipSpaces(b) if len(b) == 0 { return nil, b, Undefined, syntaxError(b, "missing closing ']' after array value") } if b[0] == ']' { j := (n - len(b)) + 1 return a[:j], a[j:], Array, nil } if i != 0 { if len(b) == 0 { return nil, b, Undefined, syntaxError(b, "unexpected EOF after array element") } if b[0] != ',' { return nil, b, Undefined, syntaxError(b, "expected ',' after array element but found '%c'", b[0]) } b = skipSpaces(b[1:]) if len(b) == 0 { return nil, b, Undefined, unexpectedEOF(b) } if b[0] == ']' { return nil, b, Undefined, syntaxError(b, "unexpected trailing comma after object field") } } _, b, _, err = d.parseValue(b) if err != nil { return nil, b, Undefined, err } i++ } } func (d decoder) parseValue(b []byte) ([]byte, []byte, Kind, error) { if len(b) == 0 { return nil, b, Undefined, syntaxError(b, "unexpected end of JSON input") } var v []byte var k Kind var err error switch b[0] { case '{': v, b, k, err = d.parseObject(b) case '[': v, b, k, err = d.parseArray(b) case '"': v, b, k, err = d.parseString(b) case 'n': v, b, k, err = d.parseNull(b) case 't': v, b, k, err = d.parseTrue(b) case 'f': v, b, k, err = d.parseFalse(b) case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': v, b, k, err = d.parseNumber(b) default: err = syntaxError(b, "invalid character '%c' looking for beginning of value", b[0]) } return v, b, k, err } func hasNullPrefix(b []byte) bool { return len(b) >= 4 && string(b[:4]) == "null" } func hasTruePrefix(b []byte) bool { return len(b) >= 4 && string(b[:4]) == "true" } func hasFalsePrefix(b []byte) bool { return len(b) >= 5 && string(b[:5]) == "false" } func hasPrefix(b []byte, s string) bool { return len(b) >= len(s) && s == string(b[:len(s)]) } func hasLeadingSign(b []byte) bool { return len(b) > 0 && (b[0] == '+' || b[0] == '-') } func hasLeadingZeroes(b []byte) bool { if hasLeadingSign(b) { b = b[1:] } return len(b) > 1 && b[0] == '0' && '0' <= b[1] && b[1] <= '9' } func appendToLower(b, s []byte) []byte { if ascii.Valid(s) { // fast path for ascii strings i := 0 for j := range s { c := s[j] if 'A' <= c && c <= 'Z' { b = append(b, s[i:j]...) b = append(b, c+('a'-'A')) i = j + 1 } } return append(b, s[i:]...) } for _, r := range string(s) { b = appendRune(b, foldRune(r)) } return b } func foldRune(r rune) rune { if r = unicode.SimpleFold(r); 'A' <= r && r <= 'Z' { r = r + ('a' - 'A') } return r } golang-github-segmentio-encoding-0.5.3/json/parse_test.go000066400000000000000000000106441504206176600235070ustar00rootroot00000000000000package json import ( "bytes" "strings" "testing" ) func TestParseString(t *testing.T) { tests := []struct { in string out string ext string err string }{ {`""`, `""`, ``, ``}, {`"1234567890"`, `"1234567890"`, ``, ``}, {`"Hello World!"`, `"Hello World!"`, ``, ``}, {`"Hello\"World!"`, `"Hello\"World!"`, ``, ``}, {`"\\"`, `"\\"`, ``, ``}, {`"\u0061\u0062\u0063"`, `"\u0061\u0062\u0063"`, ``, ``}, {`"\u0"`, ``, ``, `json: unicode code point must have at least 4 characters: 0"`}, } d := decoder{} for _, test := range tests { t.Run(test.in, func(t *testing.T) { out, ext, _, err := d.parseString([]byte(test.in)) if test.err == "" { if err != nil { t.Errorf("%s => %s", test.in, err) return } } else { if s := err.Error(); s != test.err { t.Error("invalid error") t.Logf("expected: %s", test.err) t.Logf("found: %s", s) } } if s := string(out); s != test.out { t.Error("invalid output") t.Logf("expected: %s", test.out) t.Logf("found: %s", s) } if s := string(ext); s != test.ext { t.Error("invalid extra bytes") t.Logf("expected: %s", test.ext) t.Logf("found: %s", s) } }) } } func TestParseStringUnquote(t *testing.T) { tests := []struct { in string out string ext string }{ {`""`, ``, ``}, {`"1234567890"`, `1234567890`, ``}, {`"Hello World!"`, `Hello World!`, ``}, {`"Hello\"World!"`, `Hello"World!`, ``}, {`"\\"`, `\`, ``}, {`"\u0061\u0062\u0063"`, `abc`, ``}, } d := decoder{} for _, test := range tests { t.Run(test.in, func(t *testing.T) { out, ext, _, err := d.parseStringUnquote([]byte(test.in), nil) if err != nil { t.Errorf("%s => %s", test.in, err) return } if s := string(out); s != test.out { t.Error("invalid output") t.Logf("expected: %s", test.out) t.Logf("found: %s", s) } if s := string(ext); s != test.ext { t.Error("invalid extra bytes") t.Logf("expected: %s", test.ext) t.Logf("found: %s", s) } }) } } func TestAppendToLower(t *testing.T) { tests := []string{ "", "A", "a", "__segment_internal", "someFieldWithALongBName", "Hello World!", "Hello\"World!", "Hello\\World!", "Hello\nWorld!", "Hello\rWorld!", "Hello\tWorld!", "Hello\bWorld!", "Hello\fWorld!", "你好", "<", ">", "&", "\u001944", "\u00c2e>", "\u00c2V?", "\u000e=8", "\u001944\u00c2e>\u00c2V?\u000e=8", "ir\u001bQJ\u007f\u0007y\u0015)", } for _, test := range tests { s1 := strings.ToLower(test) s2 := string(appendToLower(nil, []byte(test))) if s1 != s2 { t.Error("lowercase values mismatch") t.Log("expected:", s1) t.Log("found: ", s2) } } } func BenchmarkParseString(b *testing.B) { s := []byte(`"__segment_internal"`) d := decoder{} for range b.N { d.parseString(s) } } func BenchmarkToLower(b *testing.B) { s := []byte("someFieldWithALongName") for range b.N { bytes.ToLower(s) } } func BenchmarkAppendToLower(b *testing.B) { a := []byte(nil) s := []byte("someFieldWithALongName") for range b.N { a = appendToLower(a[:0], s) } } var ( benchmarkHasPrefixString = []byte("some random string") benchmarkHasPrefixResult = false ) func BenchmarkHasPrefix(b *testing.B) { for range b.N { benchmarkHasPrefixResult = hasPrefix(benchmarkHasPrefixString, "null") } } func BenchmarkHasNullPrefix(b *testing.B) { for range b.N { benchmarkHasPrefixResult = hasNullPrefix(benchmarkHasPrefixString) } } func BenchmarkHasTruePrefix(b *testing.B) { for range b.N { benchmarkHasPrefixResult = hasTruePrefix(benchmarkHasPrefixString) } } func BenchmarkHasFalsePrefix(b *testing.B) { for range b.N { benchmarkHasPrefixResult = hasFalsePrefix(benchmarkHasPrefixString) } } func BenchmarkParseStringEscapeNone(b *testing.B) { j := []byte(`"` + strings.Repeat(`a`, 1000) + `"`) var s string b.SetBytes(int64(len(j))) for range b.N { if err := Unmarshal(j, &s); err != nil { b.Fatal(err) } s = "" } } func BenchmarkParseStringEscapeOne(b *testing.B) { j := []byte(`"` + strings.Repeat(`a`, 998) + `\n"`) var s string b.SetBytes(int64(len(j))) for range b.N { if err := Unmarshal(j, &s); err != nil { b.Fatal(err) } s = "" } } func BenchmarkParseStringEscapeAll(b *testing.B) { j := []byte(`"` + strings.Repeat(`\`, 1000) + `"`) var s string b.SetBytes(int64(len(j))) for range b.N { if err := Unmarshal(j, &s); err != nil { b.Fatal(err) } s = "" } } golang-github-segmentio-encoding-0.5.3/json/reflect.go000066400000000000000000000006041504206176600227550ustar00rootroot00000000000000//go:build go1.20 // +build go1.20 package json import ( "reflect" "unsafe" ) func extendSlice(t reflect.Type, s *slice, n int) slice { arrayType := reflect.ArrayOf(n, t.Elem()) arrayData := reflect.New(arrayType) reflect.Copy(arrayData.Elem(), reflect.NewAt(t, unsafe.Pointer(s)).Elem()) return slice{ data: unsafe.Pointer(arrayData.Pointer()), len: s.len, cap: n, } } golang-github-segmentio-encoding-0.5.3/json/reflect_optimize.go000066400000000000000000000011531504206176600246750ustar00rootroot00000000000000//go:build !go1.20 // +build !go1.20 package json import ( "reflect" "unsafe" ) //go:linkname unsafe_NewArray reflect.unsafe_NewArray func unsafe_NewArray(rtype unsafe.Pointer, length int) unsafe.Pointer //go:linkname typedslicecopy reflect.typedslicecopy //go:noescape func typedslicecopy(elemType unsafe.Pointer, dst, src slice) int func extendSlice(t reflect.Type, s *slice, n int) slice { elemTypeRef := t.Elem() elemTypePtr := ((*iface)(unsafe.Pointer(&elemTypeRef))).ptr d := slice{ data: unsafe_NewArray(elemTypePtr, n), len: s.len, cap: n, } typedslicecopy(elemTypePtr, d, *s) return d } golang-github-segmentio-encoding-0.5.3/json/string.go000066400000000000000000000044611504206176600226440ustar00rootroot00000000000000package json import ( "math/bits" "unsafe" ) const ( lsb = 0x0101010101010101 msb = 0x8080808080808080 ) // escapeIndex finds the index of the first char in `s` that requires escaping. // A char requires escaping if it's outside of the range of [0x20, 0x7F] or if // it includes a double quote or backslash. If the escapeHTML mode is enabled, // the chars <, > and & also require escaping. If no chars in `s` require // escaping, the return value is -1. func escapeIndex(s string, escapeHTML bool) int { chunks := stringToUint64(s) for _, n := range chunks { // combine masks before checking for the MSB of each byte. We include // `n` in the mask to check whether any of the *input* byte MSBs were // set (i.e. the byte was outside the ASCII range). mask := n | below(n, 0x20) | contains(n, '"') | contains(n, '\\') if escapeHTML { mask |= contains(n, '<') | contains(n, '>') | contains(n, '&') } if (mask & msb) != 0 { return bits.TrailingZeros64(mask&msb) / 8 } } for i := len(chunks) * 8; i < len(s); i++ { c := s[i] if c < 0x20 || c > 0x7f || c == '"' || c == '\\' || (escapeHTML && (c == '<' || c == '>' || c == '&')) { return i } } return -1 } func escapeByteRepr(b byte) byte { switch b { case '\\', '"': return b case '\b': return 'b' case '\f': return 'f' case '\n': return 'n' case '\r': return 'r' case '\t': return 't' } return 0 } // below return a mask that can be used to determine if any of the bytes // in `n` are below `b`. If a byte's MSB is set in the mask then that byte was // below `b`. The result is only valid if `b`, and each byte in `n`, is below // 0x80. func below(n uint64, b byte) uint64 { return n - expand(b) } // contains returns a mask that can be used to determine if any of the // bytes in `n` are equal to `b`. If a byte's MSB is set in the mask then // that byte is equal to `b`. The result is only valid if `b`, and each // byte in `n`, is below 0x80. func contains(n uint64, b byte) uint64 { return (n ^ expand(b)) - lsb } // expand puts the specified byte into each of the 8 bytes of a uint64. func expand(b byte) uint64 { return lsb * uint64(b) } func stringToUint64(s string) []uint64 { return *(*[]uint64)(unsafe.Pointer(&sliceHeader{ Data: *(*unsafe.Pointer)(unsafe.Pointer(&s)), Len: len(s) / 8, Cap: len(s) / 8, })) } golang-github-segmentio-encoding-0.5.3/json/string_test.go000066400000000000000000000014501504206176600236760ustar00rootroot00000000000000package json import ( "strings" "testing" ) func BenchmarkEscapeIndex4KB(b *testing.B) { benchmarkEscapeIndex(b, strings.Repeat("!foobar!", 512), false) } func BenchmarkEscapeIndex4KBEscapeHTML(b *testing.B) { benchmarkEscapeIndex(b, strings.Repeat("!foobar!", 512), true) } func BenchmarkEscapeIndex1(b *testing.B) { benchmarkEscapeIndex(b, "1", false) } func BenchmarkEscapeIndex1EscapeHTML(b *testing.B) { benchmarkEscapeIndex(b, "1", true) } func BenchmarkEscapeIndex7(b *testing.B) { benchmarkEscapeIndex(b, "1234567", false) } func BenchmarkEscapeIndex7EscapeHTML(b *testing.B) { benchmarkEscapeIndex(b, "1234567", true) } func benchmarkEscapeIndex(b *testing.B, s string, escapeHTML bool) { b.ResetTimer() for range b.N { escapeIndex(s, escapeHTML) } b.SetBytes(int64(len(s))) } golang-github-segmentio-encoding-0.5.3/json/testdata/000077500000000000000000000000001504206176600226135ustar00rootroot00000000000000golang-github-segmentio-encoding-0.5.3/json/testdata/code.json.gz000066400000000000000000003346361504206176600250560ustar00rootroot00000000000000>]code.jsoniȑ6_YɍoV}%[[[!I$*V}=+ YI2b7^h2@E P/7ԯ_Kίb=oo/>9)+RCʳ֯}ekl]:[Hyu^}ʫQׯz=cʶ3n{ml}SFޗIC\3 #yʒ4f4Պsn:@]WžUiI>r!LpD Gn { š_ϞfTu1m6 cئQiIRjNzN^֯uoSg[̤[B TއbAL6Lr-d"q"Ċ w,1ũǃc𞱰h}Sd?IcNR׭Rc,cH'mjK}sG&q)4!4eIkgcu@ ؤ1О߰R流$A CR*Un':SGFh8PAl`( W:z/$;=3CZ0b}V"ÒC<2 mpR+?=c`ߗYUO e|X=l5JF58[̈́O^'ZK2?!D+'hKI>qy8|QV*p$XODbPp6-`<v8HLOLJKPg4:H1Hj#]?Ѻ@:Gں6|?hCkRcFcc] !$6D@S|MEו/0A !@Mğ#vw ŗy}&n =!tt$ɍPק|W]Tf@Y#,0PFP|+R@o`HRK3|M 9gHX|!Wy],0 f08>=|j݇SH6<*m||4icd0CC0XbϵFf˞ 3ݲLČ(Fh9NY FMZ@UY=>EBau*;)F'g[(hHy.ْHM [dڰڰ0C%l;m.xvV5lsW ҶW(Xdu+LŪâ D#Xź`IaE/0dShkPЫG43R1,(6H7~BA:{c.pfBX@jrANrX({@1UxuS sN&s= ȸwV9߸z%]'e˞}$o# wU^='j6^T>:G{oq Թ`HeZ4gQ#A4|6YN.}/wJG2ʽ *g9]C;3Aū/=7nk>#ԷqqƑ@YBϷ@Iܸ$]qeDJHZgA: 9?PsX'oD>:'Z kh}³jSVo8H D А4VT6:Rz HQ.: b{.Jb8:{/쀋?(.I# El˭Sa}t fpwDyUBCN1g'x2,1j˂)f~1<j{9ErO8rZV :Xp/t7@㞋']5'Zk2v$uumbJ S,WY`x]5ByQQ +ǩT CEM?Qo~3uFqJ$r Q S=OP 1 z&;uQ< \aԊ*0{'Ņ]5I # ^]ou]cG<'wh3Fځ!A\P^X>0vje\DJi(_/lqzuaqа~bDΚ6u!yozogyѨU50Wro} odTjAkBg'5n y!1 9c=~&EmWWwQ>hȶE38]桬ux ͟p&$xmKar{1C6{ 1b4{6l$CZN$t/,gf2F;}/(a|wik>b&L(mFa2+F<2,Gx&cw ڧ"p/=F ktS(䢹WXrzh5T@h$.HD' U a0R,fJ%6 oif*^d]'δ { =rK` qMLsOT/S@e f(#}(Mԑ^y[a=*/VEhv5?}>Q}nGJTlk4.E_d=oW}(05c цSp ˼h*)8^M;IpXE Q1wI=:!e3.!ۑo'$!R#o.4r<ݘS恿AJn~] U77^#3S3U$Wրq(˂REHO9'w^AޑMÙi9PG⹹]曇~K˓^9s ?x970<0j۬ڸO+Mgo*nhG42`h;@Ӆ$@ts]<M=W]yd㸐" ]9#yg zRQ.)hjx!TN,#Y E1 -b!85Q*cc da gh-*AemGA@ ʼqWF(av@ χ"Sp5HewQZ_YmO^BI.Y>mY㺽MZE*ITS bQf6{15 JoL&2 -=4jiR[>ҊPpQ"mnq}ch{&ޯrHYhVa'<`Pn[nO=B:q3M#LwlЪb _PK^d2m`yoca%cDLP)7_ tuG,Cグ*d{\PSi5pPW@GZClZvP|gQBIp'U%?~ 9ᰥ*t>ab#9a*L`T}]ls`%^jZ\JF@/$=uϿg܁7 N3ZTw!yIuGڷ}z ! Oj.^lV Jk+vLQWݭt5K$P.5*ImPd 7u*;Hdо{= ^0}&nb6wo^'f.EEGZU ~YZᾳKG^Hvom8˅a9Ҿ[gwu"ۨX0K6Y 3u?aA;08UFZ&ٻ}'rUߖXL01 B4`n*4#w<.$(q(nTku ~#Xn;ߺ5 Ń%7 l( %| դ]fP|r|}Qn/> o>tNlZa %& C)h 0e/BIaWٍu+6DBَC(_߷j6{홱$ʩ$.e`TX_RZRBE`Շ}:u\q/wyI]q{+W. Yanڰj䫝 }O; ET \ [?=qRaB{NfqPqέ!(kJ"4d 1Q YF_b =Dr6(e;T+kai}e4Zn:T} \fU&*~bњYj+4)!]"Y4*EWz:6կ#XZ q.AM1:,7U"bJBs%yG0zV6Yᨷa:Ca~ :60j߿؉_[y ~kpu(!#q:sg|Ly-ϴowbjq_gY;⼼LrǒPq٣ X64tlmTĐlz&a]X,pXrܟ!DžnbW9ᗲk_ԯgkM_I XKxbe/2ٟ]Vbnfm0cX$)iA4F;f /Oǀ_5㟏{qAvݿky-uCV$G4 uՍ7ѾO.[KXvCy]F)]5J5ZiԍX6S”W|/8CK]NRnO/0[$6-94WRpOBEB)cؒ S 1{`4oC  6|lڗ:߿ek~͈/rik!dE@mG 䗒kcJr],庬>קl{^߾[zCgʠ)$&vyFMnQK.O{/Kl̫&`fd74l H[JZdmtŝv:30Hd3:~ZHIӦZmyzw:H?IDh`ڧ]>ӿ ΉHrzec*212Ö,,_hn;Dq>59LUkf15bJ`z+'8j-tTrLar{}"M >xS@7VmB=CD:΀qX&Oi(h'Q h sq35p70,f:ƙl?q鶮nش9" مyב6C|.t`_%rCnZHn:qۑzl) rWe}^m X7AHu!y"ՑցF8`fO\z7WoxׅD?1-0J`+/0=4]:~u4,S|hq%4Co' Ш^dZջ+Fa 퇏n+ڃ PAHvmOa܇$_!=3;,i[>Z˧|*S@C0ThB9t~}k -"\"x_eўAj4zc˕!FwY~UVcS$a3#]hfhJȻ*sd_7yt7k:4ateA'ڷ}q$|CS($Ӿw@ofρVPŧiO2O*v{XOw୮U+ W,CLSԓJ&HxB|Ux=A/-t֚H+S*ߥjӌUn1mHj%fO h` Ca#ψ00Vak*ߖ!??؅}$.?B~с  Key97-n\")ڪauVU{-S Sͨ }bf7O}`@n!YS&,n!ԂtD[b]Wuע=??:htۭV.}R09ʴG?rQgV<,4'ɓꏴ=z5Ą H!HcV<,52Kӭ=-6rr!/,}vZήN>5s<*1t7aE(BvH_w!nٶ؃w_Ɔ'dA|pR}v[k0'8HA%=JE%0 ay@p""mDTGADbaWF34I6)uw_`ӈxdg^M~Fjq]XڪDYj-" @m@58bZS59jP9qJt(18R%TΤ™R'wÇP"P-;[XGG#!;Nͥp$rN6d9~.o;Aon-@,-ƭa\ 4 N$8ZzF PP< SU\H8҆,اHٔQ,sg_惿OIfy[o8AV_w6ӡErˈ>Hw}_xl\lC M{Y}+|'YX tiKb W'3i6uϗgLqPDB;Z[Ao R[T![?Q*Sl|¯}m=hNgBћxc߷)`^P vVFiB#]A`Ӈ-SiC^๶åx>)z.3# @}y/^53I8(Pտ*+K"8<},o6m>,T(FMaIh. !=?#>+Wi^~|-DEjH-襡RxRBq)lF*?9j=)pI 9 0^Dg@7|J 8xlb0ڱבa~PMD;;L™1A;ϫ"qKg+!1gij0°8OAX6ksw#Xb& Yp _O\Z? U޹u>\E#1X!%C }Q 7UE&0DŽu6N_ 8"m`/h̲3ҫGŕiPb5"=͑/iS|R1AP[ fn}=TEZ!Ν.Of|Ak TIV aAx^:BUpNñ=['J˷rVu8ڢ/$R<ҼѳzK}Nnv+a (ޒh(Nfw}+=Kg WT=k-fºTIҋuT@KSm)"tb<(~EY$ 1&V42%4ھwqmΫ>ӀeQ7XY@C҂#hWI,RB$ǀ܃0k@鳔Ė.41? ֫7zCI=-[#21E- HuDjy)Dm#Q|=WR$P]I9҆qsP4ˋ)˹#ֳ.^;5H:z0nMC.i dtDD{b,Oӽ1pE1DLQTSRP3i[ƙ}pg]5##X@JP {uIPJñ-&"idsw}U?1oj@[?;х;GZ/*y*f:jtTI3s)l&('eԭ ؝D*[ ( A{ru~j뀑-S Ez$O~=ZsZ* /pfWL:iv1c ;;"Q,)k1"cXd1{‚͉v^ۺhn@x5FWOox,$_!JHA2ͬMSVb(LQ`Eg8ݡ>/vLQGoA oMqUhO/'Zpׇxi-7;V ؖ-DSœa* pQ<`GZX 30 gIL³w:mՄG_z_}T-W)Fi+Ƀr n~w)Cul>+ DCA>[\|Yu77FD2TQ -@cA/(7\QL0A8V+Xl\FA}s&Z6*o1b7#cM8ڠJ?R>tF* 8/`Xl0zNEfX b R yw=Ed ;zM0́䕋e[c;욓"`WyI Y"0(-[\niT2=^R^ GR )^p /I<3]!3V}{pqM3;)D; ךSMx^r fh~WkG!B? H 3mHy&fP+*%9G1 ]4߾$3#\/nqRH8W>*Q)i\>DF6p9sa,EI 85l͖,h쥃owҗU/S䓮*'ZrveNWh-#1`H=ϕD ]e3*/k)7waSkc(&Zjӹs^>'Kertlwk&X2  \":nʅv_He9iti%H $E։[D"c&}RS"@CX2I\x>_D{\ #eQ}sop=> uD!8cGL)M_']}'ZΜ{D:=sev|Y0A&[a82Ūai poTG/,-pEMN*^ / .U-Y5},Oyv& ZgV$WcBX|{ad ނ 6U)xLa[ 17[+P))$\IGZxE(C3^&냞h~$MYol<D->6>Oo^%DOT̉8Z BjTLGlhb ez!$M.a)[b Ҿal8ڜO2i;(BroV\&\œ]r˪t rg +"Z%Cr1MvITEFN"M(VZ F0ThV( O9`10m˟ZlvɉtQ00}Ee^ڱUp>oB)rtLD(lɵ"&";_S!kaFH@v\)*AjxEp(&Vu~ Ieoeff5U"iA3QWTvQ]G&ԩτӑlP E$A> a C`'Q"ҶD ߐᙠ QMca̠mZJ h_hD CJ z%ydSry4dP rXiȔ⼕RX/W4an!5COYĕUr5z0(.]NrFtsu}| Ƽ/@PEmFpk(xX>U)֣HJ\.WyXm:K8:F瑼Gnq!K}MA4n͒hePZE]q`WPv'q.DZ"h<'fΫ;wy^yia|zQۃ$ZmYKC#ə#NnȌk O %DkWβ9BĵB1ka/3^JpqiI'%c48D1ߺ b Ƕ>b$+̶ q1j" 0N MHQ;K4PXYn(4V(~?cԬ)gתVVRCW%7ͱViϱ殠!U}p99E&V2=TpEsS $ w5̅(i0TtK.V8pBIT*Đ=ZK$JZx0kg`KISᲨ? )g,I8 t{Yane`q x8d.GpjL81 % s\LgA{u%1BaX W؃fb@:VR0Éuu*ȷu ȞzLh87LP XiEVy._ TxLz!jxy2]rM`j"{̉DSc !Yc(ڢPe`P Qe .rwi!bp3x'$?!׮IϞi.ZiX]ݡѽHђ֣F=W;rw\I~?=-$e*0.-UK 9ˍkRʺG9 :%5i@?ʭ*vK\Qk֐"P .T-u9c:&\h}@ŵ\Gv( ΂Y#Dj|7,•Omy¡sQcdMh  #}K5-n9F?zK t`>v_"&tI ȷ{}oOoik/!0gzWՏooK/|q~Ӕ? ZǸ_ts}{ȷQ"'x`@c[6#!b(8 ]o󉘍S) .ņ<+Aq9qn)֦kAju6~! )e\n}/2 j"P)/o5^!*k,=\ +G^H^#hΈtbJ2 oE\ʕ8 )+Cg2> Ozai,mu?}xz# GZs:l_sm{yS:J 8ځ " Cq:aB/I'A#RGhF7 7~uXvܹP6qрN=ʦń/ )A.z;]ptݛ޽갌[ՔfIjhGUc|QBF~:v:bvթbRuUCHuPHUppFS~%]qh!?<]U.`ΒYAV"IWaҹ)3:zקNt Lrt$\!\CRq4r'Qdc :vƸ201sf $ "}wdJJG$͏)Q^ VyBzA4iYa ;r1Մ!Iv^Ҹu34=ULࡊ[W-qN*Ln:!s {Amф Ɉ} I D*Vk0T:ǞR-Grsښ;ICR^ {\iBl/i"|Äg*:;,diqmEbkk, ֢,A#cM'ͤBM'FKܵt ݭ] cc CqdmEL*"7 b4Em2ZcN>M 7tSN Zn1JGXlQۗbunpnS ]$;)'ȦnP/⊎Z¨橫uߣ ;ZV%Wg_JWFI'f"M)Z\ڱۗ⋋c>g-\7u˙eV­@")H% ]x.K5H z zD=j5ԭ"&ȴFAy[7)F5, GN^$OB:Һ.ÿ>`jYnAM삞mҥ|*b//a737w:|9u07e; gGn\`xsU.Wd-.[1r !IVG_4v8ɴ)57os$E&PnOCvhe: &ܕ#/}V+r"6L@٧b5R>C >cK'`<`IXܫ[t7`}݁mǷrNJvÅPO[H^]YishS0#Aq4(T);se#I6c;%h:(9=m8J)trCouV b\-Z;ĹQXӠNA`L\?1Cy@T $/luB <0U]&  $%W<}E:ηk րEgEIh_QUr޷UgNE8wC]"Qyt͗uz.Ci%V:- &vXn^ƕvF"mil)F<єw#틽XԯEþ\P,Q(LT6ZkM,Eɭ"o]S3pApu}7gWX#ؿsY~dZu/1Q_K [/ޕjwEnqbn=Ƒt2nϰ,r4Ū&S>AOj8ЦຒA_f{^zblQn6H?u|֩y瑸Ӵ!1j[{hC,|S.AY< HI9ε36H|WmpؐC2 n/K{*^%KgMRU>?R=Z:JX66)W hG* 76x1]%5{ |L}J2ɫ{!a͊HHqa{첪o6"([SZ#!LqNь:5͛:Pna  Cmq?Xj@`е"zN?}ޔx3V -u&pބ+g%na9hޥ6+ײsQQQHa)x 4rxܿ2±ص>F*~NIJPE\~L< M80;#*aq$sט+0Nh ruЧRyUU_ơ-dIN\,uJ<ibCױ]tvc[I 7O??;TEt798it[ 7`䑮lDq6>,Y -+`GqKחr>mOH@>,#%G:Ni4w+ub QQBGXC}ʦvhY`]8gw=@]HyZ̀ţa-躦U0BrmdNjԗq2ڵ:+'o[Yu<.,ɟeU/T6T1W%x0ao:&zmYl*6ԷHO@ e79##\!E?E;F^nՌU$ݺqE]I#U zч6z.eYjjHcGi+.zuHf`30WXJ_E3bZeQݢ(My[\.Փ<(a\͔vQuJ"uޤoTAi$Rlk- 0-u[ 3֓ hbm ۈRъS4k~8iu*ɭS-9L bw?մ4m x?˱)6c]q͢\}6af1$4bp@~~sc!_GEx9!?_- |ƴvd͆\\N Wv}=s3U)?+'2٨#[DUv*M 3I;uVp+Q7*vYv%6Q20 -Mb @X2'WHö?{m+mHW;pL.&*wt1ɗžSN/c Yv  hhtf15hb4ipA#p Η3!h`"v9O}ׇկvik ,XPF(5*o 5{Ʀi8CD .4w6q)G'J+MqG$Z\*iqD}0M `gnMʔJWɦ* _a qZ&wVqbŷ#zeh?} a4 L=F,q[vVY$V"8[@^1e>'D-`xCh ̀,u>\ jurKUmCC)4jpex^M7}T̹twu q?}8Q)%-t|ٯOy->`޺kQc6 K$>%kχ*¥Qn\ Gη\|R芩i7*btyz$?{H\WOat;+}GwMAU/$:w%nݛ!GRvH7uoaV\ I驢馝2XфGX][/gӭ2z.*zSӊXT,PhI'Zo|Mzb7Gg̅%X1648 0B/niS9.sԍH 7-}X&U]DkR M[o܈)#QAYeD]er;CiCNo۫߫:GvIdrw<'~@,ĀsA܍ k@[JkC3!8^Dž1Lvc/ǃ_[*PN2-¥%$zih~})mXػָ5v?'  u 7$Oژ T~LktEx3֭Lf'Za:g]/7!muȖGhrz=S9` ~ht#W^IeMj\ __!;ڿtC<<ƚ L_NCyW6[5(;?TR/֯Skr*JPCpS.9%K@ºrrd#%UR3]5[M 5<$ U,'+Wp{{N>Ծ_1_Ų` + *Fi-.!] 4VbKTpq c|b]BB+8g }2ʼn)supfecݺѮ E's"jyu3TdU&`jjq: ᥬ6euhbB͍iDȖ"4 ZE=ߟЉWRNjL+NU{- $cr5NPF1!V2؝1ўYok8~_8RBJ7i/⹎syMzj 1e@aeFa}1'0n,=,Mǫ5wUi<e]ㆅ,DxͶ|=xd#դqV\Zq739m~D Ou0_t>djJO-kYjPH(lC16: "' l{2:UU7, \Ô@@;45(&]c0Ppױ$亨z5 fG5Q91UuBC Q*VQJ i+RM 9z&‹$/=όG'2;4oP5FCA[nXhQS^Iq;Һs30T#y\GZ'51 &Ғ b!] ߼VD;$Wk\Y4Y.}0ȞRҴJkhܲYA&2-V*V@gm_KIL:NgR]Bf2tP92\,` y9׳Uo[x$4O;8 }B)K=B`au xGDY}`䌁*cY]y:?q-{86s-#(WVjD:^p Sv* @WZ\Qî^~(މ}}#Ԓ!)N&j O5gQKpeJe 4)W&דL6,6%*r鑼HP@pqJ+5O>Ir ?U\)WJ~;p<\莛}'l񟈬ȉ͇O. g1 Sυ+:>J,B1' QD NyِpjtbK&\&%8~80x&E Ng'Q*!BuyV<#\r* NS83gz94PQ.[+k]VTѰq, L$E2wf9F nIVu=#pzkhnǞa*J-ΝȈQbm_=0 G x7{q X.uW1^[C+^H{ņNqxUB lM;eNc"jFW:8K5H.$ɑ ,va^?mV!!pZ%m^jw%ҧ kV*[ڏlt*MWkY4/zQ;WI [".\4FT6QSQK,,6tzFͨz޹4OQt9!u* ?̫?ԃA4~GbXŠL4~;)T:m!uG8YOU7MP9gnj/*y5:i\(hv}t\`cWn/Ǹq۲cQVi;x98.zO{; ب7B1 J&[Te߰6t``!\Zzb` O;Ł:c?Yd%_U:&$iFiyJNx)#+ɧhnh+6z4Yvʞz*4a\iRrFx|W! R$,*a1¦nq&$|&f"+T,uc3ksB0ƳQ#B*_*5)A6M1J)jfQ/>n*<7T$#4 mhNu+ߖVipo]xOLT`8XR`hyg"ε5Aoe=Q97XC1,-d|SC*H!}gE)/#nNsyg81cQ9f HiU"Z,c0 ]PƼ.u:jkK[:sx!õSPmũM9eD Fqm>L5\^>g1*3ڂN@/ ' {&\QaNϨ~qE!^Ѡ[B@DC"0p^\'MUȒdF?pKGLR(oDYy2.4屽֔l{Kj*o .qpA{Ny&_K4~pr4B&c!-'F2LzW0 @1Jс3rr\MܝҼ{ITL{orus:,Da"~K=qiݫ=*i#hNP/J?LvVQ& p`#-B"ٍ3 3lU =4KUYZ~3n&œJjϪ!TɻQK9ߣ~{0euu].k$aiɫ|y-e@X/㡃(Ŷ}4qZR5WQ/e}UE]lnJa_ƦQ28LWWHÂP?g=2WUy.';g|0]Mс4}QVya0*NuS^?z=Lgn:+gH/Wҡj8tV[=Y'pL ,Ϋ?mwOU(ᛗy]3;"fZ6;׎fZm?4HzR?~˶˶Qxä+k>i._C z 9e|2NS_@>xWųٟ4M[t,SQ[l8gc')O_+U{Ȟ&rE`NHKMD :QČAn]?߻9 SuU?ϩUbK,i'rCLQe>,sJĕ=EH?:P=}>f7qCsw@T~t(.\ⱑ$ʥyk޴҇$@ۿ::I02Ϊ@ 0Kw頺xD5m*<ƪOGob9:GRz#cx<[Ma -l㋜#Adl$n}uɨ&uȫf*/1g'zzNxʳ'% :OTq3?6NjgtXj"`NSs6l!竲:kGFԉ6rdw4:XL~890xᄌHɰсcy;$TlObpmDKy|܄m2\).A>[|0\Dӳ\'Q_upq<ӰMƁ7`7\l7:X(GU :;a}0؁'gM7mW9p@"O}8pxއ{>}8pxcf{>}8p8>}L1}c{>}LƘ>a^`_X)^R]1(GmoQPbPb.' B*? >d`j(c)9mPА(^OpΧRyy% ܙ C b2{mZV ! C6 Xе8` -@ _!ua/YR  P\q*~R uCu_(A0Sk1 E@4Q㡦<1fʴ)2 81BK}z]c'O>}"D'~>l #G`[nad D jY|Q52Ϟf.|vnꀄ 2@!!H~K{-ƈ&VC* ~Q/TEܪ*;rJeyH.n5؈jn$Y!|tMA/LQ A2 B,j JЧC`+9NT16aPtX.,H4~^/S ,(bs @&iG*h-O`.)׼y>k{IG9ICJY| xoIIqN"M3eS`YI5A"؈TD8OI|㗡znk;.1\>&4jnk,W)~NN< WF>Nl})ChNCݥy ʫ..»OռRUQ';N2D$T8[ᔕFCh1뜯 ҷnOHVi9}~pږ01錰0y: 'iPaUKHTb8ߥqXb-""/c?o?(I(Lۧ%""V yexu^s&q }(u%O66-:iiީ^YD|ЫUs @|gqIIP[+0j,y>Mw,v"ؿQTlY!sVDFI߷K[ 6䑩X=L&.\Bl[t=7& ]P{Hp6fv VWx({.ߗ֒*"rHQrq]=өd}Ml;;D*@(#Qlp6&M!zD3 X(jN JG|5},V5AtcJDj!tPLKG9(r5J:$ *m*PTC^ *y5R>[x>YeC=G  :՛u_3(..(:6Y!|uwbpUa^oNA8m~M_!]'̈@1plKl͟O0g\Z_|>aFI4βx,[ ,W8i*t4vAnt+pzrdʉ-gى0A cUZ$Dt$ι1 Kc7 E@8f䩒S@>C# Ex LT%iUa"5puSCE;*Q?r$@ʰ=Y*GoVMw'Ֆ?6s miж=/eJN2KiO׾AsKT: x&:"]~'6jSڴpqn!# %GO;A/-O۽(H2}]Uօ' "<ԁ X|U\ YmAl8SCy|TQjޗzojt;?"ܺsT7)}KTQ0l|^~|R#;lXA82Oİ3]`FV.1ÊY^H}J'BI?h_Ԩ4!f*[Qq@IGØxǸwP9D̶!݂#9Lta¹3$* 'Bۆnf9|&)OvX : 9?iU e/UX#D|M =UH~ HK`bž**=Eu:"tm'Hɞ$U3=U^mя`I=՛m?aUjk r:*@}lTO=r)aDL?:-pDc'0crP?MCCU/j )'02R4@kdV"Cҏ!l3 |c a@keAbU~$aJ˶lĒ:dl׫e.5XR eaQJaRCO?zS _yj>{ȰB=Se0¬5O\,qFmuau0a QzR.:y-ԉxFj^S! GZc3פ"51ۑ5IJMxQk?.u:3EgmQ ?|eE_LYwz=F'/M^enQ->%m;VAC*QȻΊ;Xq\ʯTIxY *Ct;ğ,"*v& ٮIv|A0 b5DͦDYð5֎\3Gd\EvA.Kɾ_;]o+[Le*K߂d(h}I$i~HkTc?OV{*B3 \e{slRqiɄQ˒&:kz(p/M9GcK]r%FHQjiXóLYŠ&l 5bD-e6!g2&sF>UP Pb33i{Rj#~۞ٮcXn&=vכ8ن6*tLx_sO=wZfiGv=j[&#'$9#wQ/ʆь}~k]pl?-MY !Oy>~w~C!B^(i~mt3s saj+t t]q-O 5Tn*\4!ؤHDYV.@~CIL?5oyHFC6ōb@\Eiŋ#Ί4S Z-j=0-]"N5QpV0MU<(oGZ䡳1-6#vg<ڶ*q7D(H:˟o+OLⰇiR1=(kIY+g$Ϙ&dKZ|֘'}c-}s? VZQ.҈s/4]Mh$iǫC[i~mq E{' E/xHؘ)U}YSR^uxʖRi@f8L>WK?N^Y.~ydUuov(y("DS3$-9 nɑgf, sP+ȕ I U\~Tf}^F?:[ճ\,si S;4djSM&? z90; zFjഌBqG$<̀ʻ4@*+M{a\?АVIR!{Ph)MowM4;#R#'q m2F䐏,!7LK<t ObQ:lrG{K 01 qC܎*ƘA}G;Boyz]*ûBn0a4-xs?迉=nCeJщ)rM(}kQ\qB@jL^ddz#Ey<;Lrn=Y0|Y>0].A8^}z}D()$5}H`cwWC? v\˜c[Q=$#kfj&"8&pPLGMV{)cٖE s,:FtGlB%sʯ49DQUcXe iD4r'Ӌ^U5T2s'8阢Q( h]b=D_Db 0@8D wV݂5t1ƵZӮ__gw@+SYDr ;t* ~X,PW6϶Ks -A`ZD@ʦL6QRfa"tdW]l覻$hHj&΅ b0j2u %ܝƐ{uf<Ii](#j%m^,Ga,˚l m;֒h Fco^Iui%Χ6(cP:L2y[b_(B|W~Z!3E,v6ofcP+y;NZɎm˲bEsJ *fE""j'Hmo?c“$B2MahQM"PT@Xy- .9 ,W@3M7̻S'pι;>J: 8z^$e R3%KAV$tqs fR7$,2|7}]BC )/Wv-1u65ܹߥ>8tf Ձg.um}I Ofb 0 O~???rLRO6VoUE)syr~xÊk%ɓHs]?|z5~u_7ƇǏk!RLVf>ɕk_Nc˧n{̎c5v (̠aLs|K_o3U?g܍WxQF}MH>iATs, k05uC#jBϏjgIIZ3҉:(3UߢFݳ $iҜ1/>JL׿5Mx^9A<2y/~T&fc_qSJDN]*wk~u75h Ø:f@Lp-?-! _6[KDn ԍ<5nkU^IV#ku)&z *uO[DlQ[d^|uH>fTn,̫!f-Jp>3{&7'gz4e`u0_9]~H.bΛl>"4ĵ=Z7-æp <ĶnkQEON]XuNMYq9@&v'vrLmmwJ6>l+3՘||?aag݇fuMH^vY[yBE6ȃmB+q@nwD(ў(pM0a(.S1y[ bvZy9Qf#%* }A#20񔯔ScI`lBÂ9'5/ I`)rFHt;(e/j,c T-p[ >H8 " <diZj)Y :IjӬ NH A?UIBebߞCeAC94X??_r8}yWnhyoǔ';J[F/ڙ?-c+2SVXc!ҧH>gV2YUjǢ~4PI%+._:jL{6- eOY2}MLIP.Q\w:vG4:ҭrNW.<>x'ͻլF0 ͵ hEW/;s(/˜XW ۊo>~Ҋc]v+Tr^x+ Qu I@2Ʀlˆgfwgpk{Qcpz\?APOY̊FHSdJ5UԳQiMÃA mc>;l L/Cka vbp@\;f ן˾9W{N1ưivY {=?},O~>}hU[o-]E:-FbT ̓qQo13mS.S1%F~Ů/L1Sc.xaSoV%6Yf/ _2z'FvxƌA'kXT#?UDL8n&_c yt|dx_spyM^ۉՠϮgwN |Xp"w䆄bYz 쎱L%-qT渶D4k|փѰ6@`JM!iol eQib߯+<8C f:Nw&ȠFcQt6րjK[f6 ZuWY3&{Ncl|$uC[gmGyR\!a3,ӱ(,;?:eճ`AZǑVj)n Q4[O"Mem6FH AQL)ca80@z5=i{q;KS .q4Ck̤ )Q, X$ H꿜NQ^Eju@&"ϐ4~ - 1UR pA:fQ?jMU_%Z$'*HkZE\F]y:'n j{/ٶCR-4rǃk.WL4y۱5u(=\slҘnŐL֥G]6jO-Җ`=*Z(342ƊZ~6Nb)c{&=N;uMi6tQM{ކɬYbQZ|͓\ 쪷;H&8:yi\9ues皃,liriL\eS^CSaubݹs=mє+eW=$mcNӥQ$egkh>(!IU!]B:-Ԡd"T Ȩˤ|eP'7TY3I˘ͬ"6 JbHYF#1c}AjMh/~H ].klɕ8*٦U42k9aczemH[$Na7| ijtBUs{ E]ów#fzFBe>j{iX3L1z*Ib۱lKu9U$2>RKV cxGTj=m,FB~i,>~mP 8t.~T1ь~7^-ϓe=Bl_N]yhꕡ|]eMM {^npUT-f;l>qC-1YG3i\5ŀ6Pj;\-9NEdmgǨAvzT+ !y⋯.03UhLKF6tj$) ]1Djh)[/wϴ2R׿*Zh+ țX*\Y.''E}~T:M_R>Utm@հwRg0.jpYW+ibXgi--"Yp9@'nR$E}#ܳIS%u=ԝ[׽!eraqTw\좦uyĻ%!,aa9榗3f~M|.-[mvyb]Hl˶<֨X\ʺeyTEș]]pSn%Z" jT =clW;ﴣ%di4.[/Enw-oiej]:IDyfUYb uϟ×ϺqZyYZ .K; 882C{Kj7zk 0mi{f4A# Aے/1~h0I駙*3 #$y>ԉTLCKugxFFuoqM״s<0Ul{UxWwu$g֜7Ay>J%x8\UkITV\ BxI~%!A?"$|MEF"lxVFH/RЫKTIy8O_{Ts guhuψ2}y=%08Nt<JYԭeWYu\[e5 өq viGۮ9.S[?QB-Ŕ t_ 'm &3i'Iö>6bu:nFqm16|x΃CԴe|_b,@Sbϋ ߩ?<[I( P5oHXmJ3-PΥ) Sͼ|lJkI6=!8j5@YI=7h:2)VU:=ӊʿJ.'Ƶt҅\d9e:UN&j!>} ͔ʙڎu,_J:/eZNcL`1X0$o1[lsߑvYp7J-c7=]diL }ŷ 4JxI2"]HYx,J1tڦ) kjѓDC储d{roqOh(ɃkE-2$c1mj^KwjsԠFq**SutD.2Tot2v1xb@Dbf's1-6lMZ=)*;B~#NVp1PbqE:>n5oAr`s CcHu =Z8"юk8d?iR21TD^VvO(f'q>!8 ˠ,F ۨwo|QJDD=Ut+Zt4\d<' S{բa6^۴sߕR{TQ>kWYVHq&j:)rLv@CneTb A4O_S8A;^?%gvG]WUs( qG#!ϥFΒCĥww{E8qD30VUg8| OW;{(Am*Egu/JGE\ų|}AI͠'/-E:Iz&5<(5I2״-ҢZWȏ%eUC⟟ϑ5{b˶71F G_ųFB+Kl ՘ئ9>oR[7 "Rk@&OqG"S+#D-vm(ntŗN;,\HqW'PfA*@xEU/67أ U1"N3D-x@q/{^ѫR- -A> p4tʗor r kAJwQ3,iol[w[7 I5eW,4\Ǭk4n!5Ɩ}hk_aאa[{4{Bɝvpk|,O4,SNu-bp$8♍5Gk]>f6#fJZgJS<*Ő,$(ͯz:;ᾊ44~MB]v/[T(>? 0 8t]Rbtk6r|W1O*i8SNktuevH\%t:lф|*VGb[ěઊq">S:nN: ! pϳś`= 3 \V, }SUa! GRQ 5 gc!p&tWo"ҧL2y h׈#Uv'{.xV7%KKT5!jlqmы3ԯ2`Mn\OykU"[5ͤ"T Qsl. dPi \b/, M:G1y*/sJ-}3LO(^'uJ2Q1ȍ(ƅ-qA^ ep!~ PkK*ΐx_i!N^cF ˺m2ҔrMby>bVʋ;,Kv0i.x(G /.l8ƯM6G*Q=xT<+4o-%MAd^a$ d m^iB|y0]'s6E [Լd.ҸX&@nQcJܥZsGjjtCvMP~,V*MpMcVM1Ֆu v:}R@ 1b=&!d& ?/P0hR*j{}&P<eJZn {{>| IlZOD9)Y[0M ݞ[/(3s2&;hiMVoBy|Sf2CڈC'o-$83yF}OІ*穀V[Z%> 5jv=И~s/C1lEzf_SQ.%ϗ$ |5dk] tXZM"1N8Fqʭb5'ZU_ Z4j1EA_IX+]tE Za1ҲƒjL"mʓ"yi(N"ȯ/&Nh=X5-u ZL #%dsC\fe+.,RaUφa S3 HD9!qՂCLf qf?ѴW\=۰3P9`N---9eaIIN6=&-lŒS@7"xn N5O7CĶfӢf%?w?kJz?o񬎈8sS0`&wߖ23umiCN0 .yL =C.(e."PW"KgzS]r Ƒ_sT2&ΛZ 4WyH ZUs~Egh)I<2 ) L66a-žȐO)peLaVINq~iBZT2r> F~^ebE}]p_G0 Rjcֲb'W,_b&h! v:LR'GmskxڿcV{#H$yx0>` V,WS AB^Xa8/ 7y-P8%!*JGQ )wDCG\mZnѢQR. TƆNR(xh̳H |Q>N OeX)ճ8B3,q ϰj#"|JR፥<|O(\-иPrz/{aI'DrMN!Zc۴;^DA<>2xm-r &uZ3*ضkz|.y{Y l""Z(.S:-|.:AѧI!-2W*QQOćCE'A૨`ve"3'-k@L!5eeg + yo OE:f {eeqkr-JJh2ȒtAYn}(F x&Kҩ"nZBR $,6R̯+771Ja2.Ԅi-ƛE u l=[=KeWHVEkVhWԚ*xS肊\ %w-σ'x̣+Há伟s3?cɑ)Qrt1| {? [Kak >k@R0&Sp=ͽvssJ=prcG R@ʥ2Ul1Jo$QM3!#sYڳbp*'%& 6 &=>j+l.G'tgcэ"L/76kYcI_2mU6m6tZJ|iq Y k%| B`C-Xʼxdf%txvEt,WvusIC/ GR(a00tfH;l5ݤTzi˴]6LQv ,zL"?E,(`J)2u[)GI<2I8y?aG6)@_16HrWL$uqV!bp')| Frc NT^bvd?r̗:&gLYԒΑMͦkĖKsS!O.K5]QF ?M׆kW2$cFÍ^3.(s!MT]20bZq%,:O0ˤn[M(jbMpt\ZP7*wQSe_w[u?3/n DV)|[$\ro -aV ڦ!t+>`l!qP9Z9Yu¬bJ{rHgv&G>%^3 ?u)sֿ,uT ";;z8l6T V8;*CLnn|#B(<-'u/ǽ(v`gUĪP۔Iږi؄JYJwV3Gm-1ѽsVt _rNg%vr%!.ת0My)ĿTG"iFNFdߢ嘹S8+꘰Vխʇ+$^mG,:Ja$˔I^D cq>,XxIxUND&0P:&5LEStkl*]\ 0J;B< uߖ괥$]Yݺ!n˜J¨RK|9G9_a@M:eloTd? L4"5 #K!Cy!ƔxY@E>|0`XqЪK`[4yU:WA8i]yŒjqeÅt< PDm[S29raLA 1T *}0yXJ(J ,0Ճ;rCVR!:5CV6sI`cA&lQRQ>%:wT:.ذ0`_BuiPпv'`5JqewS,AMc#r9HvFdV~HfC ST3a-*搬y.и@Rns.ѥ(|v~)bPlryi&Tֺ<'œ龼>p; 5HhZs5CBz(i*jlX OzԻ1TBKH:QjHMbibEońC{0"a)8h~YD|eHj8|2jDY8OTiE Af0Rj/a\FVbbq 4HSoϞH1onQtO:U?6f=duMI@ ҫzO/!\IJ~+£CQJ8븋ACf`| W ɫT<|YZ9h&FO0 f Yoh!^{ϲnU!\;q NW=051rh3h!Qj%ksIP tv^koc4$gh)?;!+S+;cJ-smy 7Nj0 ZGeܸuYL*onNB̘:n~rUF ᢒwP2.e Cԅ;Lw#Nbcb4h/WVrKʲI^,~֘@XU +2&L|%0~d4~~]qj3ؽPhZuLv2fHdQ< QX+uFHˁpl`0DyIUۇ塚"yT%hA_F+?l6r_TV3p~xp=l\豴3ۘw^bu؂)! 6}5c.+_tHY7&v #G:}n.a@vOC6xv Sx_Qs+{E$8vYح=h*ʥ{Z eW"s;Tc/Rix,V<@!_;V2k̑(K]%c;}m؀{MsjbuzVyGmj UMi)Jtݵ `󡵟^ĢPrb\N!f N!PiPEAZݜ燔OChHIm0ó,vu-ڰ:2 U4e`OT?g!WfW \ie<Q;˱Leu^ =@Q Š΄t K``;.XC o@*,J"y>)RTl״VE;B0M][A.Ul~M{ XHǣ sH̟h;yRH) ]%Byq=v,hSigrY8;0W@ot=k&L%vB#/){P;^'v?iMd6d>0\E<"DN=YTc̱lj`QOϟ )uv\j;ǥ@ЕTlJ'")%h8zLJZf0z CT81"VW%Peskc:J <ɂ:b!İ-v42Mc9_IIi+B|1lw6rLjP҄:K@rop [LIE(K 86;-C~* + Mަ(K|86Y@A^It~Sd%cQ"-K1t[ g w[wHC 0HTدOBrbwN&" Q iJ'ݨoniIi%E; 9o+ݵ=G<Ԭ A] L?-,Z*:Lw|aɟó:ǡ!̠ԭ'CR^_^ɞS!W-x`@*>XG=4GnAክԮr(_qnQMLRZq=r ua{]ϱUΝ8Z=՝ܩw oSV-~CT;D#pjRj3v[5i:RN1^KRi['u&qXr%,|L712&e4Ufȫd^nh9ɐN& "lKwKMT#Mгv{2L'(Ȩ| uSzhArPAE4R;vNDZm:q2)^KSe^}t8 ;T Zzke٢>%Wİ-v4{6^ulu,i 1!%~>Jტ/O0(=5+'_NM7;F@8ӵ)܌:e'ͿtXsR]aNS =-wCu!eguvH2(bZ ',U_UXebqvlC@9eѱV\2B{PX"˹8$!ıcXkRKe:3^hճ+6<.ݐT]I4Q!,ꪠiMU@Ǯl,hה"8K\; B"C 2m9 kff H{ I.9JE1y)*[SX@Zb [Df hPL4(%rmap(`yXIP޾ $|'8w <%7sg19 UHשּA1u:9^}L$ bPA}j6ڍ1z 2xH%V0<{ӽf4ἚZa;԰=L2iԊڧoQq=ZI}~圽ɏR9"S{o.0<e5K1pX6nF] eu}#n(} ˺3EgܠAM U45vc@ ;:%c ܾI7JϰcY&sלS@`&/b/?~*N":A?)ilŐwQrѭH;y<,T>+ U^R P(PEN 0O>:~>|U&꺷eB%1\Qw"_13*Gk<Ѳ)Z i:P[!՟< |V *g!URAD9`PZCe8'qb(&D - Ph%ꞧ[IFy?!nފBL}XJ AϾ6`Rf,`ò>NS;~ sqtmxW+~IXC_,ŋASKo|.=bჴI \"J=o.8fpetADzZXi e [mXU{xֵd  IfQYp`mK4tw,}m]>i0}ldS !>Dp^yG/cPbހzK`7%WuVMEC*j_Q{ &!-"HG'gCg$&4WL)om R@xK2<~dʟasAHP $/IfB)*HPAE'V/5~ftG2 jΰ!^d8xW@v;f hn%YfDž)^}ӽܲ)T-%{㽭".mMlW(]Otz,G<tksU mtڞuY෭qp\W؊h{v'gKcE7lK^7SG>%@Ĩ,J^'p[0 JS2 r ?^0ճz[~-jc9I||%lF](V{s]8k0 xl8a.aZ/wsHDjn]f@LwD5j؄XC Ǜ6E2F}4-~_D 7Ƅ'S㼂/hN廪-:Јd'+@J}@zUCKfkWZ-$쳓/OymtƙThx.2?x8Ž@J#} j" #%ecxzsR6)\տACS]E]91,ReyY;,5|(͎ 8Tȁ(b7+?nSy/5n<tit"MT9!EM*#fup!/ lTf MBj^DR6B*SDl'Eq)ʻ4YGaOɌJGrwxQZ6!zlWIQbx_߹C'T!mi$aMVUAVJ1WD,}!{4XPʀ_\z@2ԵI 5H`a3}0s&6Bʻ|sJPa:rEWJGTR<1ޟv˂om/!J)D*C.8(iMx*"* k`gb: `*h rt-P]isڕP=o|{r>SDBA`nDI(r̓\Z{û^j5R9{OP PVQ)$cu" P#fu4Pk-jDB+Tz(k[ж2Ͷ3滱2{*jK!Lh}nv1j^b!_D! [5ݖc:_9ubE>L$m@.9]ޮ╛/wkayݥJȮ5(˔"]-}cOn:[[XL{w?6~13LFi?0ru'5c]M#Rk\bouso1H_9V~$/V :{mxkkAS&*?G*0{(:(LOjMi=; +(7Pݎi/ijߓ_{+5i]Cci捰9 ]?w:ye^3km-kO{Ȑ&Bʌ}0KurR!Xa:n216תh sqs_c պ,Vl;\j ,WDRx,_/]4 jwCۛ[somv݊].rS˚9Vn:d)|~KYMHE{_7Ӽxn6iYMVw7dbReQU*z)#)ikょb tzsF:a[炽̡ E\˖Ɉ'y\߇-WJ9߼wO_3I{@$c xrk "j$r{u9R\$ S86sb"#3v֒V#;R4;}|X+${  cdQ CFѝPH~(#bc`:N9X"&GL8ʁ\Ҙ~Ԗ ;t19yfEw EWU*Pr`"=] zZ(.yLY̪Eo]yvw@BXlj1V D* !ZiVL-ػ3ZQ[@ %I{r?Q,U%{Ug8;N<+#o=)s:2xXYo4cŃމAb/cu(wC>DD >DߋS7[B\lc~C>VYDi0DF(q(|xdC8%n2v#FI ^ݐULu}.~D5_ǩ1%U L8ubMĶ^|nP]<ǷluYsF5uuvGQщfvUUׄY@5/zpXioK_#eQK+?6+y[.†:N{Ï _C+gb }.ݒe^i Tltk2V`'B8]lv?y$&yNoHSd1ZN\C`C8ia|ָ@\uP 0" ѸPC 2D/a6iL'VEu^Y'lb3O΅uX=0UUW'j߯=;[+ b ;34ҊtƹKlֽ9+9n]]&WI>*a1d/^8uǽ~tw}[b.KnI*'HOEmor!sV/ he_XcH꯯8{NNLW8e/CȖh.bW'鴔11;$7ZjoϿMOGr6z׻F31X7k3뢎uKT.6S*EQ![E,mn9E=ZŐ “W?}ʷz[qJ#vhf>H;LDO)'9;aoY vQxuꎾ' 4ዴkɱKXbh\oB3:plV9?b~jt9{O73p) ̜nT\m]|MW*eHyP+9s.RJN(]}R4WevҦWnqb]\V3%ϾoQ[?f. #]ͅ @ν y#%>6bP(2لĹ2WY40 CAg= .ƌq1}ѲXp_~}1W:_ucwHyuux 6 ćז/0ݿ;v66f.m3!]b ׺.sAl^}oRl}vy)HH7YgϻsR5@$zHp)S_{UYYNg7ͬjtRH(NK;䃲L.e|QmtMPDbZՏ]B.(}uBjmx@X ܖNDSu/>** 11]B/Am>`l:fg{í,g˼]6E7E[Q| 6hpj 0LO^ʋ)W~;AIi?M Y*F&9wwj n_UT=eMWM̸:$"@7[:r@nV}lidĈix Du^ectQ/+}e/EL׋ 4wa54kخkP2FQG8e̛R 6D7$B{)1Sgo'2}Ci]ö&U.Q9 - DzJqFCֻǤWV*z/bKbhs[;gߞTZ|*t-&J-Ղ z_򧔸C# EUψ1Ł2킽:!/`?+_/?H?b ݫ-bJ+pnr;PxZf>C$p$DW΄ɌWnָb[6c-[ ac'!CC0Y]6xm+MuqKɻ\7#FK/6Cʷfw[m]DU0ыgNjO[s: }ɫwsDyoQ~ʼm>Qi !#.(bNKf{&y#^=b.ҊmMwW1{C)t]=KE OQx|䕸qݨS;HȦمܤl8TD(#OϝZdb0}¶:{ *ׄ1 ich)iJ8rԧ(Fhq^ɌC=%L r4cQՐ|o/hߞbѣ\Ŷ¢}ljU,73L±36@>bH`bD)L5^( ep(g>xb˓,+Ԇ4/ /q,`Ykd^חo2 gyc 2% mߦ1ϖs3U _$ۑy5J)Xy^Ki~;QGIyW ߀ʽ=?IbwE2ʟzY&NJĉ moŷSpZ%22j3z18~P=:6'to?]`r*x$9GtW^?zhEDC Kտ>f4Ͽ6pm^kڴ `EwJAHBHeXt=όPZso6 >5jc1}T\:Pf/UV75yA@JsRN+/gLFwچ2 M1J}qZ&ȉ{:St_^lB(uަu^\fNv^*~N;'vD]_9zȗy,r24/Eb*dAܿ.aC˦U+_9Q)l13ݱ ŶU}y:ξ-FyeK2[eQq Lʖ8jZ |JK 3+ &{;Is-WO}/λs&+'KMgƫM ct&7ror)^):2|OrJ34?z/h?s:q˼y?es{MZ9'To ?^H_j^BNuRcZOOẽR^L':dOND$KY72.y[UuY|so2:Q!q\4#*y!xtώEnQ-GVQ#v mW5J:+{6YZ8ihs:?8'6]6eoK{A9]__9sX;ܒn=-x^DZǺ K}a|>V SE&MbWxHlzw 2VF?孕2(@6KQ6`O^݋ZǢ|ld[0M3yBFoDoFkbScËYvc eQ^*39gnG M_Y0ṫ QeeWulqأ1e44khbݹ8-B2ZތjDf2sCesX'&>g_%zBT:-FP^4P /!ꢦۺeg!Qi~ccy-* isŶ ^!]D( U/t qWWE N? bY~lX{G;Uz"H\);WyUg@dnCmMb7^K]UZc/Ͻ+d]H9 23eBR31xʼ0(}9zje%MH%uHƌnMTV淟&l~sm:]/U΢짨2iN$*d'ieg:& w;eGߤAUmN~pUEOOÏck\q8GNp pӷ%Ɲ}7 SXԕdŪ߷EM9/09"/cY|bccX,^1/:Ze#|ɫTj +$KN,J#Ö.z:BfO[e׋v(s Kl/xŀȄn*v6Σ$_ nd“>^MVUVeGGUZe lZNohxCX2z΂YiL=xS(lWU=oP`L'q9O o]גUf.~d+9[/C\U]خV,߳o˩R~}H(^'\jkJd;e?aH /'^s|oY*{7lEn~h`(i$ 15H ](]sh[FjKkeU+0ܐ%RzZ}׎I.¹FI) #ѽ_C8<6mUߴ>#_R{远{{)cpE"/ڇ|)*]d=%, Z/D뢎{m٧ {#ςuI߽_"1xֻKT zβ:Z[`M, Hi]X9)K30tz_VoU| { o@o]h?ZEb&3JZ9aݘMQʖ(XW@9ZW덏 !qޮVoA/ViHxҺ.f,s^g&2l 8f-iuFn`ꯛM);zFQzE=o~y&)y:w=M,cHksF+0A㰠+h2,hC?Qv~Qw_/"[KS9VU=n 쑼5~AaE9 )|̾ES^ _뀵oVyUKhVs $6F>3? ,ɀNdqWv./2OwlדfQ6 [8-}mX նlJkxiUǬUsuSݙqc<Kh}yĜ%Ա1ٙgژBC4ø1GYl#_@#,.Ps1{>ߢe Fz D6,Bww~9_tH̛bᘮ6)~;X|ۗ#/ſm2K?0i V9C,fhu0LRqv-.uX/0DCc\HB^>Fb{9٢@ k{Ꭺjjʼ$q~\&v2 4qˣeڞ:JKYƵ ?| Vy̳ Wt1ߪ$Qo_,? ~VACl?_),Aˬiy7w:=МH`i@ ]%!>8éoAH`JTY=|qIZRN+/'ÄM2 o~pQýGl]@g-VY.Z1!,55 IL PIQz?P$tT]!_m"v}MVUTaQvlKT0&r;kq"wJX`&c%e]ļ+8p=W ld>6#?ecN En*zA@aЍC\vuAꉪEo ]_ 숪/OG9咆Ef/NbZ';@ M⎤t-*m)lG8q:/"Xhuѩ7"X`IW؀mZeH7uw{θ}"nF-6ʋ P‡(.S3IbSw,J%:1"U87D0DV6J L߹(ڤ5Uk^"Nt1O_tszDd%nT1z$coqoESӛ+lh4V9~Gu\!.o[c B t-=+DuKDWICw;T?%`Sn@ kKnDvX;InXTұt]_U482[ {w r"ņ$ņ$8VҺu i]Yɪ:O8u2bo!yKj6o^*UZ_11ѻRYoSb:ԽD[):Zf1']x?<0w SW(.N4M*V(7lܔ;Mσ;M4/I D`5, m-S &!KzǺGHsvc!~Ҏ?=>Dd<֍*%.q?_hS)mbҡv{AӠtqT^A6QEQιٓ$` Hc/{ZfUZI\>-|i6y EZ.#IjLPDn%2@ SDCN5Qe,LЁzM5 C. RVB?t6( @!; 7]UX H[|~*z-UQ`"R@ |8 Am-3l{8֤zvε6sjb91O-p$yHi9@a7(jU$2NKMCw3O7T倆&w)+Q>Xo'{'^wݼ5bδMҧ9S[8¹'>گ..$` fm 5-N_U HP?w,AZ_S ?UFcm'f[WZ2xyM aHZu3;8?$#w[ A蛌94 z+}NZ؛Iط'2 W\߄?o'`᫖6d tGߚ(-;Fڟr0q:4HfTuZQC4?M+)XĚ ],M~iUN޹(vV#sڛW|t9xw(De̷U?*'{!Ş; ϲNK;}wLA.č>t]W"Lo|\"?-t@o WAlP;vl}i|mE2uMᄎ*ѡk*Vې#MnޏA8 S'OF"gI,t.\yٟ8YCDlDRρ̈ĚJ=/c<&[QFu~cxiUNČU (}g]ڗ3olSO17Nr$"mo*jP -ycQ~M+_UF{(X, ʁw1G*ӾJ>e.Iޞ{48 1{qISTP4;{-Ȁ'0s:9@#d8&'Ő4tF y{L;U̦-4cb>1C(1#7V3HA@/%0 ܣ =dո`zN"4,|δn- Rsg1.wiB]x7stn Gz^a sϣNlW3nUlbܝ9w΂٭KKf6!lX <yE5c`l"gɏB7}imZ70%Lbέ >|b/>ghw /yL|NObu'!zǕs~d{+QxMJmHE#@*$Կ$B aDPlZX<-]ם*f򳪇nOUb[m\1f9],:zYB fzYWNs^nOIin~ɟѼnwq=D+č-&*Q6>[ .J[a: §,)| 4E O>Kmz; w:%;;cĨg>~$R75KV1e+q*y=\{ժz@YQXI߽ {eI׋D ށV1h4Y>)z {\d:ӂH4ek$q#">s]Hm腨H|iqv2.Esp̔FFZ@tN%n8l00Blyd$haEغ+gGy!R8᫹`H!  ۩n.]h| jll_[Y=.BN0ޝZ͠Di zҧ4g&O.!OK]"tc m|%E_w 倢K%>7nioaE/2+}o$lw.ɍ3GYe>4Ξ1꘺}p苜*LR*#%DcLN[oS'[E%|F؆^Րy>UKH_c-lz -(*p{mא$nԓwFiWlᷴSx@X,B4.L]LU\,! ܂U}"$D(Y04Ams,;t`cUjGI/[u,V LX$%e)@5V¥JB"i+cbiauJULe$Q$w (P&Xi3AnMZ*!>`HDažh dJ: 2$Ad mcQh n~!0QEaz&=Ѫ1SkBcbJ#/L Ie edOǗ|7&/‚M" EQG9 p{ è^Lz+Kl(uƌ[H) vCKN$K` Vq0T&Jc~ 8n-BUK=pA v\.u#cNT u:3>ԛDGDzӡ١&gsZx_lqh ӛ7z؛lLtD"nV ;M8F!4v\,/Zk}BL/&H ԊDv>MיGIZz &r9%hF 텇٠RE׏މ(NM( ,#cOPyeYb̂lw7; Umpz38q |M_eƭD§1GJ8E1 (d̊Dnx&ėKй~hHkI1$"8(xdh< 9L|;XbbQԮg7 oD3N Yz&[*& G'4`y׬0fԳivkq-&Ƴ ;z'4>ǐ{x2h P;&<]׻ZM$HS4Qԫ!CNBҭԊƠ\e;Xa&Z/2rOL7Zc5kF*u<&&X b "Y$L|<(ݲaDc5O9"]jBX-]l^NX<րfhTJyi"+BIh"˒ e l*;e6rf䵀1)NtN&JZ} (ȫZd( t`t]"tU[ Nė|T"3 xXl&OS 㔳&MMs.Uة#$!20rn1$>N@A- 3=EQmNHfz̼p^̂2о(h}.&*3X.PJ{@Bګ$֊vVM` tǴ31'_C09O$T[U΢ᘰC'֔4icK$L9=2/ͬNÈR!H =jڭ%XY9IfHr` \^+ZO{d^Nq'QD2r' zt:iD`3̬{{c\YVaƀՎ֤3NĚ|,,i21BuM`͂^ T`IoʹkHMlJdT:^Ϝ2\nB~9~m g{o`$bm[A^z*mXhA\(jLaT&F.4iZk̉!)7V 5Z35-R9$#z '߳vd萙yE۫Q` A0{1r^98f[f+o Bۥf$~~C&$:Hjo hr!aӝ؊nIO&n\l'@.M!¢*1mڪ.@$OrGY X$n3 1Z9R j%6fqc`"Q!H 46DSiWip[2tİE/bzhꕥ< 0?59ec8J3S4 HO[1'|B8!5+ =؟f|b ,]qXc?`@5 h<9 .BcfFg\I$ALhL=0]@!iI\=&By:D3Ѹ݆%l'|ٯV`hT9QQ@.]E~KD\@''|TuW[ Pv#`uc&\ hz[0#@~#Cj,eh/g\gا #x87:-#yF}L{>k`Ï\a [ݘq̛UQyrG?WIMB$ ״`ݑ;Ѣ.@#ew0T*Ei$U(82 miEK۽UZ8Y5'ca9g"q.\iR<wx7ʘ-Զj 3"gkqJhsȘU1!AY &ܽu BNLhO`,6ii$13䔧Tma9A՚2})-4L`k qy!c[G̵s;&gj9+Y $PCslxAC Y))DZ @-h:A-rbWN{-3;@"GB-) #K Fњ,ZZSb6; Q @=RH R5 SxTÈ䁜`.ICZ2=FPxX^(,P&+;oǷRQ9!򯯂A9V2Eq2ѺÐU[)\0^ЛV(h9FfII;5h@YS.My P-D2ޅ)D.SIh2NHldCF]٦5T{ ܍y.GwOpW&((;˃ m6Spf4[EyW1N#q&ȁX O἟%MwW j i7`=ciMM=wA)C]L$$aSM>R. 3btQ  ޱUE8E;ծpxN/QFuAwz͌{1n pwѽ} sq7rk",ԁftT"#qc$VZ6 @Zr߀?ځ ~f1J"$cLhbkD aGIep<`bI<@UD:&bXzK^$t--"Gj%<@HCjHDΥ5T;g6!Rˉ Ik}xߋrou!89 ?u9$w"ISqR\C*C8S~ԥ |vz(HN |%!|vԂqF !ѱ8UG*!Uώ.)Ezr} ӫ8R7TNi=ċg0Rۈ }3yG*bx!d$Jž,U a2M 2k[Y4 dbX8El2~t>OH3mR 4jQ?jxhQLY2 "wbWԿX;kh6}͙EQf?ǁ|Y?Wm]|z̿M{X*eR>ӭ.BYQ.ŮN:C"y@@5Y!Xg+@̧jY/إa ^AՑE@Puld8<;Ejy$ {1 c/4_85Lu oi7JL%;TsP,g*ۓ۔xD~Ĩܔ5x8, εUUĊws7ofl~Ly(C8tKyHO{ӗ)6"_jO^Ml#>Kvb4d/#z@3qTSEi=9 xL^eʢ$[07ķ!e`0 n_$<i]|-͜3Q m{㧲n6Cyך2;[8xCUmm.{;!>bYUs1M&dubH'!K^ybNfcRț0/_/ /*uh:VUb/T(z庽ho }q8O_UPu{(?.Ss+o+ȏsm-Vu6_T_O47pz|~0iu~\u%8%,[e5{ߖkX.|頻E.kE]lX5e}W+ ngXڥObQyI 7m!/rIr,[ݍ~,x>@mq}0]U &;HsUZKrx`g'ud`0"Rw4û1nx2Z+*g&].S7 6PTH{X~Ļ1?`杈YW@#UN q|p̲A ˸$Bc[[yoAz܊ЎPʿU01U3ҳn^;CIp:ai.5d=nL93`=Uc쟓[<(oȮn)oZEtvaָ0>T˰ Z['spl~{Qp Z+j ;PYMZ-#3YrTg^YH,C97龡bb2r߳j5z@Z-!XiIh˝{ 8=<ԋdI^ YВ{IzQ\9kKZ1|fnOV| 1 }H#(w,"71 /(t 7" mYenUwp@r8֝糁V>it&M#W_hVc^ˈw.¹"*-_Y/iM-b2}K6mA5|y~Ǜl# sx.t&`0. -!iH`S<=b~4 M͟qS;cIH?O|&đ, Z %]Z C-CG$|,xkJ Q ]9rmHa~-N˿%>^lR{BЌb0q{GȨGmKwAoELl>sCX -/'H]zr͇& kr0(Z68{iP@H*\[rrTSdخՠJ6}m8J 7SEIZvw_̸ m˶m;VhDxbGYð0 I;%z p1roy%SgȘИ KjCvL4Sӆ.23Ƨ ,/ttoH uI].܁$@pŊnS1O/ԖgpQ.vi\FybK۲Fڿ ډ_M2Ev`Xs t0#\@Oe}2,v`CظI"wdey1 }8+4F;[4%j0|Yϴ%PxnyHc|H*1+`i3e'iA@sl^C:\1KSN12Xs0%rVx \+k, |*dcS($ {9_ݡA3#@5Iy'_F)y)f1Oc1(<!LZ`Ĩ3$r7| < ?҆8px64bI%B~kkIDz旙 9Nr//hgN@JYː9'bûIK9,(KSZl8wnSJɎ3Ehu]h:*Զ N=,% f]WЧ_iMQQ輸YS( uh_4mF<6uݦcoM\vaN x_l&s%c̡~bINpx!P d+f0ƽ_ =uZQwyv<+H|5蝳8&hT]T˗PP bIj3 Rѓ{7P(R}9SB4ms-ih3lt KL dhs(z9ll7APx|ϧ 8%ZO]?ݴM{І7%26F3_c)Q"vVMĸ-'}~2Rt&?N2|M-Ś4,"(HF!6NAO"%39DS{W׽uV2~YvYiF0 @)DNyic4XG(KS?Gv]3ooBZ9'8xɗ(a16 A@A!Dzݍ^?z'hA[y)>#Hm0%ȯ5$Vp '<*MP҅IbgZ)e|/$y:>3rK_B\Σ-_WYY7[&-~oJaߊUlO7l;4NaU\~%E$;aiA Ӳ_ /9x\祈΋GpG`ν~rLn'1cvDzڍ/\2h|)D!(LJ /9pŋcL=Jޣ_9$WA#ʃ8Us@=`Q{s UFWɱ2Vq|Fx lh6Rj}8&-D}DYK ɥǢ\d򗧼' H ߔ8_̿J c r-BM}uf^Uş|-%%-t)v2jf:wLIbzb/ҘA:jz.\!ѧ2K|?_edT #Hb̀ablBt~*>.NR''4"Mo aO=D46/{f~3OC'NoZ/36M }(yJ"Xdf-砉.Ge j|rPD:aL7 4.bT&Hb;q'661l h#e\.gH*0[8Ҍg`B2r}{|0>%B%L;[rb *3,yWcjدIJ# 7OûG29 VY]v1N 3,B/?Dndӷ'ȫ^hE`U7d'HK=R!mӵW7hImri :$$Qm̈E,f i%" ֋ũ6FYHo'0H*[, QD`E%-"ц104/`Ac Y03uka^'&A&;$ϴ'B$ (^BHC,1j+온дgNQ} 6V)Rym؍5ML5Il ٜ?l5P&:-c޻ӛDfhvK oe@ 2ۉE<4:ZZ%UqlN/aǧw'JBb'sP;aaxkYk؆0n"x G3HAEn 1Ry` 3/V+'Akz'?O<-n 7T`Ȭ^rѴ?GK@a{o=ìw{ɜ!!pku,iD Pd_D^ Gb0ESxDMGS 6uS{&nynM;sNibDJ9= Sba\X>Q:mMMrF]nAyt2pUsP O!ij^lr+a ĹN˴\V4^<㻁\U+($U%7v=xrY&jQ>Ut-Q$m_l!d|b V٣瞥oR;'NJJiQY9YUk(ArW9$:"!:DZY Hsdo Wp|]ee{s߂g[(sXL.v/6_as,*N>.$82*X:ý;Vz+vF)u@}nCQ.r䶭G [,21-Cr2@Ӡ Qkr ߮E_*vq{ȟtO5_0I̝.qיJ&+XmC-:?|&[e~):+B}8*^d4?K5RlazO*_gQe- 7YQ8&yBi eKC<4eOr` p&L?(e[N@1alcfg0αW:z̿@ ˖QJ,Z:[|=1N!d]"veqrl#\)g):*΄5n6%N&VË:V.xep&5n0RQ<ɉض*|zSj߽>#P;UWo# JkQ.'{"R)a(&-ӧ2RmEm,x^O=e.j^i>s#+rmHf& T~Pk7?4{.Kj! P ϡ`sYնL9]~('Wx?Tbm5sm("[4CGbع0<0v?#6bvO>3u >J)T'y9\Ũk(5Fι.Oj!(SFs濘գS5R8YGxx !c3,zkBI΋Kp+| bSk>|Jw8|3Cú @G ss203D5KfWxvT I ix6調dϡH:pM|L7E%7uPǟprJy򉈥Ur'FYiB[yH % -C}bUiXNS6HNXMQƻ>m4܁6h6Ɯ),ȗVP.9s'JߤUSPPBKw=Lc)_l)w4=U?ۯe"Jbc I&9UVac˰mHtu KHm{f/MI7 [ EV J!K b[}ʖPsN/0 =)p e CT6\[n2_ݲ28 w:\t!=RPy@I*c9ejwJci M%W-VsSΗ8`|#AM4."m>#C%q7N$ݺ/ըM6QMWS/^m?~)q_lv;nX]-4 DVoZ[Z WM('H*rD mɥeVG8M'p'_C Oy-&^?j4D4-:Dk躈iG_HXŰ+{} {d6f*'T)0B/ R=;LQ`J)' 2|8IY%υž&nI `Б~ǡIxWΪ<2mVd;ql]p/MmV3 (7)aGYB'Nof#LX[5`<ꙇNűZi 5+c6utyيeǑIVK.hkdnVuTiMJ;{g7=svy4ύլ8GnN͔/@OHx =d!WQƚ5PK-4|dl@CN QI<=)t9nƬ쀳GO` ôs;N'R@V >( ez("o[k* ݐW<-IrywFy:zΡ HJЁQ9jRO4"us,˨~SP hwd^ǐ; CQ%=]#}_̫Mv&t]ThZ1|HRRi|2wT4F{ofb^1{סO`!KPWt,- 2yꤝ~~{VMW[ʖ{e97[Հ Ai1s"$@X#d]{60v4nԽq} N8 pDW^KUB?{5+gP Iu,338LQr jDkUIFnm`K(U'"V37d"cg>m}.hi:NLFZ洇Ik?;Gڹ,T H%/ޖ<ˮgeC״Uo\J6IRk:l&OoOQ;l|=n1v6ܟY?_ؗ9 ;)BtMcyIv)Ǖ6*;&Ny#7o5qOA[0q"uͬF}j@h;1vJ2q҆PԂwQ(i24T<|Z Piȏ)y9wԒPis6Ys3W%jI2j¯rFC-=^}k!ąPee~#Jb3lYl8q^) ؈&K~8At2 > ZGxh0܍Uƥؔx(%& MjctXGD]+"-`e DH3!6 HNq mRi0I-Z7ޣRwRL޷xSG8TT2ԂJ;WQjnrMJwGvL.R5%\KW J^<$=F$,,Zj&¹oR Cq.euĤR!Joσ^Q +;Zݴ#8{1YCPt\Qɗ|ɳ/'ϳ|ʳ}GP T< ,ւCh-uQl?x8y)NC4@P1i0#x٫k - 8TpD_ 6i DiXG`bql# 1j:2䆺"@ua$ҒX^>,:Pqq̃rCDre$bkUK0`mt V3<-;XNiWLWe/esun2g(R!yW[ߐv "e3;S!Q 2yf?JHʘP\~7,C!T `%+{\b$ڿfo[9r/jګ"_U&'ě=(**f%I,G s ż. kRn_j1F/3+6FL[}*ɣ-r_jǿ_S;Nr.āwaKb\^lnq'iz*CЋA(Nh,[PWy"9ubo( fj5v-P?<oD) ԵPz4d$Ji˜f^ĆT21ljz/됂wGjխ[PQba-݂Hn@<@lMx.No"F0Fngȭ׈p S cM>fnQjz F$wi${bLm|&uiZ@UDD1-Pr#p{bР3]LGi&XՕ rk91zC Rvq+P91.xc:$\~&Ahq^xEA?\q֬F2*a88ϏvA8݁US9\+5ʬg[`EV):{rtqV!mٶ#A7f NB1}t<C[Lp[8K&Sx\n-E*/ 7R.ESt:FV%mȐ t*IBb3xM@Hj.xql/YC.|R**Ԅd ~Mt5z!Еq5¾B*41o&9?9vY9|ʣ 091Bsh4Y:Ih]Ûmf__Eӄ kb}z(g=[&,P  8Qrkȍ A#:W&!K.S['vbzM>YJג:ShM1o~&!l8C'IJϓ!uCuz=@W]!ՄʹJc)lPafl2zjG|;׀to }ɈQp1mv|k&%H IϐSp=%ulKF^wSA|kc5e0=Ŭ!75 (ͬC{;ǘ/ڵ!l \,7,JR/kPy^Y;zdalō@[uZ!Hf,Q(A6B9JSx.v(m"K/`E hi)Hߖ{Eb#zb;#"`p{xiz@DEb~8UVBiWEVs2.mTā&,%o.i)\JaSF@%7jev؃LB#o"Em:dqPG ![ n4-Gj6\b[SW_.ZArY$-g o \@'ѣZAX6Py1[=Wwm%W=i<x-9״| >a?gVg;G2 -gvH3e+Vt*^H._4E_c-p -&gb\冡L:m> ]nЀ~ %݀SЬInZ׿7903: R(/!a^C ] }wUd3^ڱ[܉}sf}U1Cf́Aj5m bo<"(LdNckƐxg5Vz h[*<`Bdރ?uaMK7,^g9fi@ FNCwX=) }Fm__ +!z D x@ 3Ǡ#xc슚Cb> o34iCB*ĝ>1MM-US 'Û$;a쿉PٿrMoFܼ(eδl]mEO);SOҷ:|^pH.4Jh&--g-ܷMYAEoGW]x4*qPɰH~&6{6jAJ53<$BxL;~6%׺+A@eԢd.v]]\ ɍIcO0G$8U7q\ـb| MwHH 25\miρ[ϲ2h}y뭇XWZu0DS5攆|;p#z1RlPp,V&Kwn\_R8Mb_Ik4#ekC<..n )}3jTË5(rq /2=j. A&5VQ5 ͕ 0]r [KFpk׷hJm f_aCإ;Z1 @5OOO9"y>]x&]MÓf/3"i'+q);yfĸܤ:[纍;l :ձ<+ Ȁ` OAи&oً5./Կ2!3lU 7%] А^퇧<7%KP6`Ơ Y󦥸$Qqŷ`76r.t!ylX,LIand$ DjˀY0 ~ٹ`)zŒ/(WנgH\w{X "9 p!r\ܾ (3AnzF)(ߝ C ,q+& X]f]n Ĉ;&:xmH @AVe_FQ5W@cTm3x<0퓢8iZ Us{ѻ0 aHqy5n a;1ݸmv(CEsQ, & |+Kx|1=BA*: ajd8pigL1a4 ՏO5"? )!xi}t&FoMKO>5p/!5kͬ%M1! VJi'bՍCJc/풖 ɾ}>1ľ3H/͢>ʟLpZ R:G"L t ,٦q6SR.%Fsv|矛sy ̎`;*c%4_]o`%W(beh|mtoߠ(W I靽P\y2_A03oW8h4~S|jC;|0Z:[o!AC>]O^bGHcƷ@}+/ҜJ, + y(bdTld5 ݴһ¿×].R:T-I*X/ ɻ0m8YZ~$ 67qoEdKRp 7؟NFQftW0p1 geF$҂z(8[jy{k04naMˢZs8V;{%Yp.AP̵m_ۙ`Խײ"B]AN\Z) ᮐ*z.|+@]5| xɱj`B5A;腭:Z+Ҿ %l)HU<\9ՅO}@0Z* |gA'`\qpRe[J6EUn?ʴj8F[ejg-B n mP%Zѡxr4.Kb+8."N^$ޯ%]| ԝxѬql0l᠋-m}uf6J?"0!TFp7TO(KE$ ;TCnY1oQc/#J.4|$sY]@5Ϯ'7b7 evvLTDvl^QY:wMN=kmΣ6:x9{d^L1rd8y6BI'e܎hc1.i%רqo^d܌2m4#\c mӨ(>Gz^<[>W7%JN|_Ýop( }|C[D,c}np%)8`Draw{? ],N^nX`K3QD"NqY +`v~m sfF?B? !Oa+., E'&~q174X0sET(usIфH #/̿WhOy=_T)O»>\: "G^O\)*% =Ɔ6&`(w]-Q^Lz) "M!6cM^쇅Q ?fyP%Xh J_q6b['ō8hN4H.i~Kg:e|#J8}|#:jkÆS L(wV){IQoև$:i/ѩHg[ؽĨ֕T0X5 &{>DPcJp`}16E.5) T+=PHͳ4myY$dI~y2I*1g#b_AF81r]8SH阥χotYC uW |:ipy3 eBxдt47VQqjwӴtB[7> _C>_ܾk16oM\[e*;ArbNsYy5Zܜ 2Lλ7kpS>ʿ;"bklbrdo;` alXg$KO#D*Ŕ!DXWv[y&QͳnT "ׇVjSP]MbLNn;24xU}[pYV3{D-2Gh}s^7-=#|]KtإVXúxp htIJ*kV!}Iʠ>iV89FK*mR a+@zѰ&sb/1s.yz __Fs g2C\ &**qMkVPUsj 2-vTԋӊq[VĠ<_ۯUy%^SG-/>WUDRHQ6r7zZ !΋aeX|69 ]-G'#i[Qv=9"g_M׀~ӟ/./TXqt.SwuƼ@[..&o>T%hu怶֣=7/IC?2OYg9 []llgg+ )"HV? 1.Zǽ>؜ vF.ζMrrK$>OcVsw}SH>OIaewKGp\:RULU& y.݋e?v?GƋ)I%iU#x VȻ|$C K8ۄ] ]8R `Zh-jQQC S^Ph/R~q*?s<1jY̳Q ">IYZ`xs\3ISy|\ZgtΘջcwТ*Ǵpu/U@ @UU$S:3{rV>FGSi﨟+P:*r!.,$*؝Ϝ^Lu@}c+Xzf ڥR4U+C㫷al]`Cn=8ch?ha+>rv^|2V3D55.e1̅}hD*n~=X|^}_f%oeRs88{z߽$QU7\7RZb 7 ȁ͈ 0ԡHBM((0Q<+I<+]Y {VfTc^;qw.]դV`>"?1.\[_jHjEqo SCdhxⴄ >eb?0Zˇ|B`M9jol-i|j4,EEV~+G: +*֣?!ךPQQڞbn0}i`L-$P{~K0y{df B(bX#Tޏ@Nhh !ÌԾwΏڌճ!0`l#"!^ Ʒ($4jAô$t讀P;@ \#18b!x;ACZhͮĨ\0.VgO):#.|6vt ݂݂o> zjVQ9&> d/~wKH*mLz7B, I*+<9&\4udyPNQ IԐYBH՛Jحj_8o׵\UNq1.n9Y(ǜBs$eh$ĝe61sWvq5뷾fR+$Pw`B ^ՂJi`BC2;aܿ!R:r(ֺ+ǯ )"z )gc~wg۸(Vj.6{$/F3H?1Ο;w'$ `ѸqHJ@ O@p5=}j5TqAfB1?J%]-z]$Qj!vݼ7qp/ 7d|$8p/6C1ru VSeOph= uGiY/'Ϩ~??;0O+BxW?wzf j ˶y"?R -W;)Oij!L07*fL(5xNa9ۤtyQO% ozh2Ew8..8g]Ӷl3H8WPJ…7vrRN%vcF aUDE`rr0.3dhEw1 yYPB5]pli`I- BD(@oO8)I8/A5j))`ZN}'Tiپ%UQ f;2-@xV'Q<{ )B9YS{GLr@n#aa5#]ϱ:eսS5U#׽2[?7VK'K{#?ڑ׀Nw(3r.Уb@q',ož޻m.b&dU-C˖ g;DHV AΎs`a㟯J9Iq %U!!zJ*<(CRNh[E|ȿ?ѝO<`ukU)v6w*`txK[WV3Js۵RF8cVj 9oS@Վd%ݵ?Hiv 7 o(oJvӺ3IX(<lN92aW9u\pt}gx;/6i|<;{P7,O cQgh Ws#+z<0s,g+1@Te?Pl`@Qn͂7g(k³wE52c^  bln aσE?hCm̡6_[p3c13V*ޥZRKv磛==q yp nU12bwrF!o]RSDTyӖXƞ.zȪ`YY)>VOS.# ^*uP 4ZG{ DVagU(:íGOHt ܝ/Q,sL_0YsjgԮ 1LKߏ- Qb70 _p} Tw `u{ʋ,Gyonmo{] ܪ*=wP6z*);3,œ4 yx1CLůYVr+EkbPGE:veQEib2Ȫ|4.yz,<& |[ꉂD߫=J!sMdm(x &ZkJٝdCqi f52ZekpF rt !o*i./)ؙQ|UX[E>ao޻{Qx^2Y[=n jA,g' @B;8>Ib;ȭvm}2XHZݿU!jٙ/qSEYI+A~ì.-b* LCndWLv3GlV&!z0󸀟XIb<*9o7عQw^<n쇡y X#y(uWJp Vb@M7Z 6p]B6l鐓8;f.7Em 7T +25H\k: `;ܫ\9 )zI<1 u;(5\0t1<=;rQP\O}8m#ӂ +,X>|*зpEj\'{z*ۺqO, U<\u02d tn,˯!DiAwrN9 Qqu#:H`f".pNÑ-6o̊ѺZfs3cՌdUE`N$J$2`o<~FW4u1'`KB9 k`j*Q(z2d^7qA%v-p/NCp88՟D@ga ZDo>t] 6ŵx6rTY0OhfU[;3]'V5d.cōAXaevIqLlS\OWcCfks?;Ϻ.u/d깍 }Ķ9R `Zh-33ZޱQC S&:~Kj JtMH6^AZwW+'uE[ !\\|ݠ,2INȐF[c 3ic b}. n# `xoXʅhmrwJdߢqvrFx}fH91Ī~yBl}"* vByD'Sp瑅P^X7ƨ(Y =եΆ#sb̳qx؍ay g1"a-PuI ٠c8aCQ:$6ˣ 晏+,qwgmqGD .{06q1ں #ZMo:pdu%6vA`*AϬXHr7ODIjm}fuZ ;5Nil_ hhMFcAGPI4vd_?0"%tk pau=31;rH!+9v* euXIpYs\S1|9 cL:盆[թ%ƈoFQXBO Jl70 zccŜ!C=jQ ZOy kIr V aR !16=U* YIq#95!+xz[k@!ck 4!@rV}Ǡ RlC!6z‰MiM2ȸຏHEXceWT:W݉%BqGrJyKLx [\[R)8cgaZ ڗެ g!VG'2ր g!_\voyJ{7{F)bK3H_T" mC/γcI\PßbFbZ]w{`w+~)0W][Y~'&\ )[6bMI @y5b/&T{Jk˅(C% ?·?DM-/^0mIfN5*4 ԅ~(>b_}T/һl}A-ZFkv+ZIZ%|6thwn׽FbL\mRXJ\ DGFRíl]mZ&tXT}LJ~2k~)CD;Cf:opnr bo=5'+$%肭`"ظvA`UH#-~ jz;"l/HUU>P͢~Є OP *b1Un-iV')w~ | 9-+;ᜐkfm y>.YaAQ #JOP2 t.CLb IrZD sx{qFoN{dkA3yi9DXj c%G44Bf(zA3 y6$z߻gQ F$nC0vn:ݤne!..@@f 1)\~[rg)h؜ZsܔW͈R,%ڒ1ޱ9 9q&yȕRjQ^jQQj9.6 nM,"_?Hږ2H4D]P Ю7>o|"5XMDIp,Sj;AޚLAH#h[&_+N }wAcy zC5!! mQOYldƟ!AT49:AUq·;9 )e#νݏb9*Kb&c׸ƊRy`r8cc@Y`x-G6#Ԧ4$Et "7܇ԭ09_gEWܤkd*eP`e:7 8g&C2Mxs7g9=a?"kKfUiIX?c0djyu֗RsA P֚T#ʓz+?אprd(h>"oG!ռo2֛ӉS@hSǬ7|k7 Ό([\|RR@mR\ ݊T3HOR`k.xĹ3; Z!" MqmCĊ!X;bS[NyYgdu\!Bc8&gk֓]Lg/B0cTƷ[m{tvGܓpWy)+쇐e֠LU9?9e8Ƈ&^l}s_-qNY3V [  ܯ7 nqJ0&5r{ou|qKuNF)jԉD΂[=Q'ͭU%8vq&07v"E%M{ҡhoj|XvQhA5]ͤL ĬyW>D*EIJ4\^iQKuG[ b@Z5_~ड़m?TK_`z+ߎLn們q î}49:n[MZ-1YasKLRt*ȝ]jJ~'r"ä hll :j,֣@3-@4" #&H\OY֚LC W,pJ"8Bg)!4j ڥP uѓK?d-6C_}ʪcy}ƛ=@FfpCW)hC | VW3kZt @Y}~]:fi= nRM%t9bCw0ά6+mE]XzS[46nOޕ{!if(!˸Uh&(|#+cɀ e@U˪Q#JV~lPr.Zkd DcQ[`|u5hy Ðu7'x4-mbpZKXC jB8BЄYquS#t}Bku N.R`P{a 2{k@:8zPB/8M1-r8O谍{AU葢heCɓr-M8fD[`{YfѬ7LԠ $WHүF:#.-MJ*`d $e' .4>Iwjlq]F1-Gd\?ek>o1*M>{hQsUD~rscaueEowC2M.-apc'G+@]W̙"C&E~ݴ#q0)4SCBsaX5boq7nBa&uqʽYm7 9}ԬO*|+܁J!ij!^7vVC &:x3&te"Vs@j1N5j^2F:v}M_$\ c?j#~ a CqLvIqL`(wbzwT gȩK?Ac97ӛp7l ~#j1wV04Si5Ld-6xl5 2ڔ]ӹW@ml:pc?w9jaֻ!$\,k= mN9+8A.캶5.ne;dzt@(dϱQ^u*\УX@3Xm];pk(c~C{3<=DulSxk= t(A?{:;=>tw븹;QS:)GEq@AW-z kAO''gyys=JFme#l_z@kFga{ZmAzek mʤ<%buW\Q/Њִ%(? MK 0"8:lmi7'TؽFEk/VeQԷ!Iº7e YEr+ƻ NK xXtV:!^]b4bl9%8vq=1谢sk٤p@Yn}mOESl8|%r7ȧQaU#<ѶL_0'b]eC9Ηb{9/͞6".f2^%6.b["ƮBVznA&Ę_;Nlk`v1÷%aU[~X jjeb ka["H ::JTwpX!% <]%cĻSg{Rs$ uNM217vJ"ꦏmS+AB1tlͅvHΉDp eDggvz{8MOBͦ!q7i!GspKk\v$ qX`ٝvg%A N~lDM6JZa8͂ qokAAdVq +T6pSIHC@J%A :8ܬ]ڐ34`[iԄɥa^u'qP83(9 !y rCRib7fQu"2مȗtgCˣ7(irPBK"K _dBx5=

lNh ƽPaQ2).Ԧ[t.V gV<mNIa}!#Ʊ/ē)x4L"֣b̰kS]?o4hZM +Yq6eBz[+'_uM$EًU s(Olv?)q=ĭX[E 窩U9^]JtZÍ6`4HA  lZi1Ҕ6j0t,?XnF֠zPA5Ԕ$E8|f!T1\nJG@rֿ~DڴA9{`4s^䵊W ''+& MQ^j NF-9y?g]Pĩp7&[Q 4WccXr v'‡׫`F!-v&wq ԣIvް@fM쪬knep6}^ܹ)v9*#N 5G_,l=3@CUu*p=UBaZ4J?g ] ފȨ\\V!&(`IW:*x`V:Y6 > q2V]":Wb^kCƌS .) kP;PZCvjF>62 3uDCNNȭ8EenE f45* !`JƠ=ēk( ׬$tD7w"L.jZfP",@K&LqY~p{ 9MmMnfzjX䨞1ѥIjaVK~Zq| ^ Yf!G䅜2v9qo ¼5xy Q@V 9&( 6ߝJ6ĥrz֥ ق-w܂c!E S :l/1g۴s6ej;s)_踎&/zlA.MzT; 0[jJ</$l894y;CNPzx]O ypʓzWOdZ6*@=Vc+K ոTZi'az EJ7ͺc=B˦)V`AHzɾR[K+4GÌxTz&EBz Qbt{p y$x9 C.%gbZ#16C5e"r֊Ô<šGOpPRQt"θ{zñL Gu]LqgkUW Kh0 :*kvct^?mnK)۞ _9&t,9ʨ E֦$t*;i |@$]Ymco&I 4cjj#XBYwe8CXNz}\e&AW]I,f70HmTl*m Kdvi fCX)ނKtx>fpGG;!$D QͳN!um5k[VAN*[~+PQm= cP>Q1}\GfdMh z#ߧx8c}@x33ǻG%J  FwjqA.8-6Jq7ܲIOD~ ⠝֣4l" ٿEjG@kt @JjZ_G2mG@7Vay=ټ,CM@ugu4 C]8 ĔCu!ģ@G1u1P>ѣΏg=9E`yt(G_!<Xs!yT6ᄣ2JAEndeѻ>6 ҡ|y$yfh3#!D=CMŁ%yHmh(N??|*SZY̒ŇR!;a$y7Q}IƗwK\tLmTne|ӵbDs"RrᡬC[}`'m|q*?*\a8JJ- @ճ>jK?׍{v1q⚲ZKl |A#tREY^5dk R\YY.ۖoG{k!A]ZsG EB4c\/Y>LPыm2 `s*0ݴ LX`ƨ&ۀ( Mq.)M R0`Yć2*^|˼7Qlq7 w&OAOҝ? w*CJ67$ʅwM!eͬ9|:> ïcN[f}|8U8K>C؇Cs,ߤ ®  NY(^"j$}e.o;7G*%~#;hgfk0Ɉ0Lp}ndh/}d!=wݢeǞWmJjW.mQ0>۹eL*$=FdBNBzg.wlljcaI`)L)`IL1`E+Ұ̧?'xwATy9d(ʷ)} >'5Ƨ00aQo!\-DjomfhWJ#C7/l_l+x[I/qQL4BkkշK[?YxALRJ_ø5zv x} _#4Vme7s3%!Dh1}vuv 1ݳ QVW\X?#y p<#Dž؝i 9e{O_sr -ҺW?&ZT{'>2ex(dv؉PPrQR8d"[#D)]%CwGNy@6Esv1>.Ѝ%Neу CXWGRh+$p-s{[w k!\זZ*aĝ# g)j\;ƏLB1JlNϿ%i+)Z_')8aĽA >$\5KN`m=[v*.]#S`gosS}65>gdq~֒ tf1U%ـM_4߯=j,nE}~F]=kCXj꿇|$&oc8"@<&0&a9X?JX9JM}krX:[?+qSvUດkG{[ szSG,mʝûI"O\PN/k\mKcܤW` ,iT}tNG(3?tW=7y*&EZ,hA]L *MQԴzh փ)8 4vtSàuXV= q_-:uaufk,XbrٮRX먢]N]Ͱ&@2]ΎeӛT(M "3zK܌  [.Ft_tzd`BJөj//W?G/`;S5]ucGjKc+1{kٕ.--]8*Oy\ RAFװa]1hc AWIݎP= '2`L՗j)ԩ"!wiE, i3Mv>*[OR Zf?L,"ҧB?w}#C|IuO#>z]Tz3=[!Us]U^{n-(}H}sG?HuO$ÄyGOv56!m5#oB_˻@B8 }xg$%dM5y5^c-~O')x[©w5mǭXL~Hr-u B$eVDQaM!P>6w=^}:GvqQgg׽Uz#?caH1}%7?W?~p";`!z]қgSӗ<=`6[ё_(8 s [`/~:?#_O/aɾr:ychž.dzԺgC0#؊؃ w hN[axq$M'Gc攤}~ɱ)c/slըt]I-EPC!Fdvm>//*ԃ?a*$vyԚ V?pCׯ}4NXHCg?&a ,*"dZLGbr>=;O!8Eo$mgϻɺŧ1ώwߥj=jѡϺw逞ҨGӢ^1xvݰWwL[RY_vX d<{z1E"֨lG {bCs=oRCJȵMP~NvSs 'ec{kp~ann] ]n/c7,*TwgǼ۫X?o8 Gga  _>q1j{ 5f [K6tLȫJiݝ4~Nxjs}k{u 5q1@ҁr&*h70a(}Y_4+SzԞ0[=4~,<)M&h-9?jé W{M{CBi=j gm ׷Nͳ?zvV}{2ԝpIl^eWMkK`RuApCu|↻׌HӞ,i'm#_/_ܕoOe~γooYӃLq7bڅnUĹ?$1,?~\;&ε]xv!5=EkSݣMRflחx+Zӱ>1X^&]%p~n>+wԦUKuݔp\GY?ڳ(wa[PPp}x@ 9upRiF!õ6F]0Me]dݗKDG'{:\R!# ?eA,K,B.\u߳FG-~ւxo(hR6҈~2dQ 1zd'z~}?2[߯*۾G?;N dư.6Y 4ͮHn]J_?kkt=ehe%=mxϮPtt_m14R]۞7φdw3zW#bV)]oFsXn XHU]e=/9՚o(ʡ篃՘fi/n :<3N8?E'N%!Fs')dC-p [Gw`MHcAo#iP!U qٯa'{A?rlˆCU mSt7٤~,L4rI4m<.zւǤGMq.QG c3 ƿ8G]@UtF7{ ݗ_6 ѻ>n< FwBї8g{8sU$agÅigR)Cxoƭ{"KQpnxy4?\rG-y2矌Vyc ?rS!ĕ@+kIkm$`.<оgyCݡYL#~8WzFگtƾDUBY֎a`Lu1*n4ȪTLIn,UM2Dhx un^@|&Ga0=G,M* S9E֥CΏu"(z/d!v̈́`/cŸk@Ԝk̭igsET&=}Í5퀻Y+{AjGHeҌ9qvN>.,\n$R(:\Ԇ ʞrY0Ȑt\ףښTz_/NX\؛_6O8n=I$)RAޥ7땽JI-p3ls$r(rl=_3ÙgR.qqqEiE (d5["0WczV#\ToT)ry?[g=Ⱦ'FLVwu\uc%#H8dJ 5е E|.8q8jȐ&^J+8>W L| &7 BkO 㡽+н4`2Z6Q^f^r_=dt"'h9̷u8+.Fr }ZOBsAp`ƈahevu>sѶ(E0E`uW$&tHp$s[F#Q  @kƋNzHB7SIԒc@C&8ؑncgi=.qs{Tu -xDk(8Y @+d&4'*/%{]Bq8fC<e){>ѯ/58F {gx#R+Fb[٧rߏa՝KwޑB)xΟix>IBK/S7M[i'S8#rx`*[_+ޠFu*,Ӿ$)z"1,Ge^dh`5WέH"I##ԫ:E/+Ha0I2D҄B%ܒ yQc r8q,@0e'@@QE) &kX)hE.M&poHĪ7*c!̘ 0H } e$n7T颸"9T0ݨf𙢽SxASt6aL\*BSX!] L9&.˼GnopZƳ5A6MLs5 gyp C^(VXrJf,R="w^)ZlCسmˆL)1uP]oj @:d|?vm˷8[z^WY=Jss$˃Ifa61 i{ͯY&b IUD7(/2XPщ(X1MBg.\/w0fϱ^URڮȽjd_n4 TݶLZLy"qy̗)8i\~s"xMhլF'&\5OkǎK Ot5h#rj[٠~LIwѮ@zHU(&En[r6]u^\Fo,'DejiO~/e˶'Qn/HkdDt{pd(Cnf?[2oD,k?x)H*.H0mݹ{pc]1=J/6wP64_LZ~<[Cq`"TnN,LBpMz;sZe+@TbFA1h3:loT0Ѥ+nNݴ,j$#޺XIB zֲYʤĈ22C$x_JK*fu`vA7#ﳮTW7we {+[# -Qltv-ƌzy nͫ5)Vi`b6 F߉.Z! l \ ;.B+c8[uڒְC~ ]-1e}qHM&c.SW>h<*F}(NZh j* IF1h4\܌iJ!pɆCي̂6V4hQqr`ksB?dcQT_en43H$5ҽF6ӚaJ~OBcZ-*>M82Ry9#M r#"Q6l*>&|s؁NfY|'-`+0 zl %wOZ4WM9hƀ}<Fg! {1?'`z*r~Yi)ߝb¦RRg//r>6vYbEi* "Kk~PƜcH:E"atMWp Nx纈ƥ`2bFAT<}k! G_!sH@ނ_<?n&1@bhBYVi4qFLw5w.&}9e300z0 s|c/T 2QcM.#>%a^`PC n,k^5=^e .ob./f&U`{sѥf>8%yRl #,V1l9rmH8J@JVm9j Eh@b݁SPIzs*ew(PtRA~҉1>-7"Bb$1F&BDmDF9{WOJhW} ]t1eLS "9Gr`lx Y<(r]W& f:\oIz#_a#=WCܘxX.fcu>HlC]ƛ{C'3.+Ln\"zUZ)<4a԰? 2th;7`Ur',4s\Tl̜ƺ#ƽg&,NZt_?򟑎S5 #Hi2lZ7ymgFjbm,%AՋ! 鋰 v2Whoڻ:>+tJY4" KHCWKӴiovO :/# r*T@!$e ^n|_x#xOן92lxyw5Ixb}x#"Lǁ) es&+OT^ĚbT#Uכ&* AgRk`I+V5#%9E*L9i˝>jZB<έLaMLi%#8xĹ/"`pXvYAY 8$1u/TA. O!quǸ!-2QQPJbS\G.(V!Q{p$ e5ُ0QPΦ`Ӽ:h0CaKޡ$C|_z\ dUFykhKR89#h Doq܉V#=Bޗ2zM|lG6)SBW~xp|Eg6#ߴK#48.SYԷ?%Fix E5h+sAy^p s]i:q@֮ӽ[S˹LuzVcEV 4#zd_g%4wةQ]?j}/ J9?!sx<)f{yJaCݲ~^BE^6d;M'+c_.TkՉV6lӃt*bWxau7loC ?ϑq򦙵?ʚ6 #&»$#睶 ?vՇw'|*#+e9+U/Y;h]5quB㈜V] 7Fq*N?4?UKEb9[`SHE:ҟ ' z~֌ZToft~{=h%SbIxX>c}_w*/쒫w_ഇgolang-github-segmentio-encoding-0.5.3/json/testdata/msgs.json.gz000066400000000000000000635211771504206176600251240ustar00rootroot00000000000000>]msgs.jsonIH%~'C4A ,FvSTfdVeu"+"4dv53~Pg>l||GY]_%#"1G1|$gv1&SIKyJDs" $|?UX4:'Q7y5~^jskv5]F.¥@ %k~1<ؿAHDcr-دqzM3 ;<_e͞t7xvJw>)kg烷P]YwEy5xLj;&]qXgy9m]N)|p "\!c)A8尘lD.eKNʚS&ͭG%FN$sD,|96-# ٽVpϧ>sR[߼-#p{Ttk][ţ8BųU9t=F:{1vפ۟H7Sϕu4$2Yj- hu^)r̔c*qJn)  +<;fwcҸ{.ic$b;!9JHxPd]q豥 틡UK%[8poVۄv,f f%F8 ,Qv}V73{b}p^7[ntesߟv5z%O;Dܭ}z#f'쪎~;l~.Q`/XlrKAxiĥPiƏ9ӱ, Jf;OxXC Eq~NnUg`myO%&ϑ# ?:&k«}OhwSO&1˔dZ1ӱ (!% 6h}6& 0WIy0' s8<IV$fl eϷgz`+gvB}\rSE.~ ya߱ ˼Zcȹu%Q-0ZH*m0۳0}9+QRw.r9wot%)L%TdwEj_ }d0 ͸.N/Cm [{|ރ_e[۞fvt˅1/­+OҤ_Iot0 YBDf= &7 _V&1"}D$9WvVE9Rp=+w;i{8%oNς\/*G-/>n(Lz +>?j%%_6iQNә33Rq;֫ ,Ү{/p k2ᙻqׯPPGi٩\)y- yk5e띹| CBc#FXb1CS\G?ZF/}n漏sޫŪk[ :_srY~WROdsVQH+"<)W (k7,<d1=LmPPB3#x쩏RgƹjҖ3rΝ1Rc$TJq%'zU=W'2*rb8d@~44W7_?"K^U?-p9.WUg\{ H$QF325fڳ?u#"? Vt}~Ԟ/P"`\OWR -s,ؽL{/*xh'}d="͢];! Up$R85m磟/-p3.4+•8d/֝IZy83ϭPNHȊ'ݰ&81.)C&nGSc»}Gole͝s uA1\`\Dw^1͋14:rpܯ}۰;AX&ۊqГF5w|QwMv[k m:ڇnb \.'F)&ni6~z /ebs# D jA HR mwEnĕ[?r0E3>R'H=4Tnxݍˋl]#^i+P5 s`ZV5C|;/-gy,ԼP{b>&Vw=vz/xo-_/g`SqD%d} 1֘-bOfTB+{&0Be>-N:v! Qnʯn|dZ}Xj5ǯ,HY+k9d{Z ,/E#Q{KN-_>涰XB:1 oEqO' XfVɤx3"|a*8(ЖNji~(^8 /Ъ+  1Wj"RT S5ž @ȘbּP2\HLj5= ;G1/#qp)U?񿙼Ftȏf=-8԰-.ts4/ӔCe9.xaĕ9@d1NZ ^U1-h? "E"$C._] 4m'J^44Nhid~h8ݜ(Fxzݴ}&O&]`4O3 aybq`<yb/7_q=>55߰$>eIDļ:ö.E*Q^\?8RrH^-[m4Z<+U˜&l6jx? ߼ߘrT 1ehь JT|I%ab`L8r$2$ w3a]ݯ;%~-e̴}C@-MWAA WsThD-x[ae5⨱ wͭ><˺o.u67JW @%SK8U]m Kt+G3@^4= rg%"Me'BY0y11%~%c.%gpsqۃdi| {=6gǵ}ܨݔʅ~֭}9)O=Fא8Qxflف‘EC94[SoCݻͶwk" B7iի;Xbث7X8LƳϰ1R)KT"<'#vc<.xɳl4<ײDR: /M 8X3b{1Mx;׃{R=7}$7)k ,W*H2D?fcIŘpeZy)%t aWf STMڃt>n5>P}J|;Z+g>|dahN)VuyaQ8a !<>I %,PNem}my(Z| عDNj-C3#1]}7Kaal a&a=j>d2qfm͈S"Yb)Mr+IyvWa#d; B*).1lr4.1\Lϟ F'"爖~lsT ųWܿ8nE'k;Rk6IIRD_捿)i:Rz#̬R87c:N4О'M7=@ݕJY`*[һk|K@uyiMtSY k0>wT[Tm}U(( ޾ZYwK|HJ!/sك uyFzU^^}3n dnjeV= D9Sh[',Emzl.7%М_QZxtw~1SXpMd>K`JZžgO1 SXNH&R--Li q;ϤD7Bs$iwS3 L7XbZj+Z_%$ccQJL c̍d% rHj-fN%bq52;NI RQ埡/.B(5ws jǕZwkIL]Pͭ^ި IԜ,=Fy4 I,h2刄đPѺKa 3$oL "-f̏-d 1GJl=U-%~ eqʨ|̦'\2)pN嘭ia&@9WۙxK0dk1l˂D9DӜ/\U|vL`n5wBLiP޶@a3*0v4IC+m՝Iz;ђ+bU^\om >nF7 Gifͨ=l|6n.;S8lhnV0R/5s%*5dojfvP9Zճ5=\sX8 ϟbՇ^ͣol3j87ȭqS[.b-':l]mi*Ex5 MXN2l{=b1:FGk~YL7̓LFtDKކuLx4! YꡌyϽ$˯Й>-IsQ Lu,RY^6%귘HfTM&aE[lS4fl2QuJlon$nqD~Ӣ9onZ}Lz}dq(8Z7 }G潻Ҭ(!ow טeUYI<eM{sh'[@x)>XU*xi0O'h O% N<ա'u/2`k=h3:0$֡ (PA!{P\UQ_m,xGo]Qh@}KLCuX?]Wn_2kiN P5Ջ1Yҧ\c{F Y{n4h52 |D\ !&ma1~SK)d!xkRkٌ.h:ʉG~%v<<=rԫIyL^ީ[׷鮺UUvz'`6kWclx!EIJ:NYg\b2P.Tsn۰vGr2!l,gI. n|ċ q{(or č8'A2gu(|JL-ɿJO!z0z D0Jl&.ޭe(% Te*!<8̞W )<"e2#gQi\ r*&Vݱ.%n:[~-\ wq 2Q߿ Կ:ZY<C9i3cZ)'1Uqq('%4ՃPRv`I}WaUצy_VLi,7uJ{WQTH0^U̳MSF`?zRD)8E\ymƞJnʒiX}uԷlTӘ\鼩JYP69c4 wϢ pPA1<<ɠ LJ?n(ؤ`Ƅ8D%0CE @/~C<]퟿!i\7 (Z/dnp;pCUS="S!YV:bgVlzu^]򷊭`;uZnӘ,?yrͽP?}VA9=$5PkHPZ'Jl"|vӺi$~XXnjIQS!Gglyhv/1SS>Q揗 wLz+z(_y %n=2҉G.@ &u{REZq2#M_Epijz{  6F3(~q9jɻNEJ|U͊X0ꝡh_ō$5wE_]4!ߣ$#va("?hv75 ;ڻ w ~[}i}7vw0 Oj)i@x^:+w4Hq4q}FejOQϧSDY<c L5cxBԵt{?@9|3y!Es@cpSg$Fx񝓿FLq)vx<F,"1K("x#,Cag9Ny~7CN6ƶڽgUhgdJ+Wd)ab,*Yn,C6U @ggf(G}rov7`%fS5e7C:v3Y$hCOLAFrKKƚqLJ?JsmkN%m;/&jJ,700;qoalnWţ7Z}y| OYwMF^b dc n'7j!i$ YyJ9 =|b^(5k."|m".*P55D4$\2/L %CbsOM`6FtC'aqrԓ1 ]ER)AT3L0NbLc\c 帠\Tæ<~4f/d2)%NuKcy\0P$PeXWDd5Y=X%bBAw()7 ;yR)S~C͛mŭ՗F5P;"g~ޒc-"++=p55:9!%oEo-jcd~?1TR3Rq6 _oYrd"bkmCfKa\vC& $H7$8sSX\c1o]qdAD _YMk=VίZMI{*DVZםcMxUW`4\Z'FwC-d>Ej TEwCܦymaJ:^U (pbgB~)Nԙ*dބ\y s^}JTm 3Q7;r *%̏M0#ݗ{]ZN~JCFÅ>OO`  ('s z %1ū}9 Ơie3;2k9k9a'7AgBM`\HD__/q6v$?Fm\ق1*Ѱ=|8E( Ґ o0 X!:$&#d}̘M_Z!ex(U.9rg"eINRq2ƖEMܥ=9^5L]~=q`'YPR#Yk=2 T=~<DbJ4Ϥ1‚̋kʞ羅18z)GOkFR^Q;}P%|0zq WM?˦vx9\vC=fnJ0X{˂\1yX_伯ƼyhnR=7Zu1HG%KVm\ Jd !1j\q ;"v6 -RJ ;Ƹ6Z0!1r搧?iɍ2/K~l8:2g @f*A:}X T@^Iث鿔!=A'ED"2Qe\Ac@Ec,6cr-h> 3cw@:4P)H'xWO98e3sAw ֽZdkRyzH%߫?ILUwyH`bBd)@1Tx 4"bo˛Zs5xp.p,LdI`pl&L D6 A uiKk*,m)kw.Mq+> &5Xߏ{Ro9U{Nb4k&_'!CO'նPwۮtkly2V&[r>)񛫮zҥNW7)U8pMR8;ím%Q_ǚ@qj_t[ 4 Ǖ" HXeִT],Dm}z{Bg ( i&qF!08r&a6ҩ4#{[;C`/屣ϲMeq*hȨ>G(~2g'[U6teKĦ6ɅޭaSG)Lɲ .R)IDFeAJ0()ʝ><2KYpD`8ՔR>p6oNUS8#r6p^߉F45MpkVNN7^Ɯ$H~eυSDq¿ l/C@Z 75sP+Lo{|ȜŕSJDF ~E5Gi;`nUWi>i'V7R!K[hI1#.+q^bc$Xr燐){*9ɞs*b~Bo*>CrUOrV(3y`,ۏ?TdWܳģ^>!_pFhs/uMcއQ^~V[rP]l&2sZ%BpSY Z2IY_mܩ%> -ѵڜ}3[я&28$fBL&xQ-V9\T'7ͻS!5ӑx 3trGs^ڌ7fZqos"\ [o[Lg۵?L Z9ZW^ԧ"(Nb~yN "9Li{VE >׫L 5,vb> >X{){Q̶Zbr6..Ԣi;'6Ӵ7z< 券ݕΓjrm\]8;L1IPVM|lm!Va/3^\*.ào2s+dPctlZ:Iy GnsC`=OM90m럱x {8Pmf+^9a%o7~_;PA{(&Q ˽Hv,kį2~e# Էɖn%zKDݗGfu {xM췫@+b9VWQ]L()wgOahM!aNqq h/yP:/~70wG i2NFe<ߓӵh/1Dg1H=ž'(a ?/ B|̥-d'i.0*]&9z id,7>\cyrS'Gu*f֐Q/P W Jmzs賀V]:AsvuuQn4)h>0gqN9mtϵ9[O9f?oTd("lV!Ṷ;d&>WP1Q= i|̴^?'(x ա Z8稄Ұ)rC?)x(a-RIļn<dfv}i/U=~ZkB[N,w#'=>GȎD:n^JAvidNvOF4lg&qh&fi+8f]*gT@}0\G^.:ibyמ/PΈ6 &.LPZi@%),SN~u_Ni=Mx7be ˤѡK1#^p'pye Y9|`M( |uPy ަu?dࠖ{/PƣOoipֆ,IKKsKL|7P L ͟0hl0_QsXdSyZI)hev48˫?}mz8eqPw:O޼rE2bqynxF5ȳK #GY=M@/q_f[j^?OLJTG^f >xZ>aO I~Ap?Nt醝R3;i/4 K1;?6b[ODϥ{␋!7ӌ ( = Ʀ>PmC3ui?şL5]oe8xH,8bĴ33CR7A<1cIbΌR R2QzS;iW T$$8N@p(Ԡ1*Ll}25py+ 1=8<-nJN= eVrrUZ-lY 3윮6NR crd2W44WϚȓM6rw=KVFwIBФ)tϥE~^νB@8j]e}8]1@NK!5~"k|9zkEmTj׌|VNLH %=>U!(jp!X i{N?_| %R3>\F (d7$BkkU^Y\HjEoig8=b&+ q5P-/m'3Ts5C[{ߋi^'tGA Z\wk`y*[2g%S0}k^uLĔRr2^e5@]$K"aߵ(l+Z|̛NH>aIߌj3tP-><߈.)3`heBGp)ﺡqKO-p4n{̥g{ڪN {7cIv2hGne잏e{eZSxwXױpqvרc+q gXğCq4`Q0q|!хXRe!$c!h _}%O7w22߈.xw02Q>*d??rZxAȨ5$].SIm⊭d(UL5]/xmy/(r'+9ߢ RJ2g+L˓]& d:OMJO~&0y`@hLx "0t $"S1 Hg&1)I87AjtѬ9ytL肶(͢*tfqHIO =FQ*^*,UD`>1}Gb~ Gs %99BJr#ur/u4R`OMr :se2n: 4/8ȎRm$%"6A"Y SYMU)> _r}S2 ~4˝4עܦ|~Y Dk؅s[I,6!xV֗Rx_{$޴|>9Ep9/J9S(i\@91zF}ͫ(5_)R*+WR0b$%D\ 6 F:d7)pȓPӜ%}2[I9|zN}/XQ9-%U J{(Q׍ZjVc*HojKݿg(鐪@9y?su9*bF0;^ӿ~^=`6`))}9f'+K{ʙys?ᩀc6aJsk|<]_)=q)Nj%t[ezgU/lr#ݻ2;D8v膸?\ SV+|d,p4Ң?76XS5U_jXfY8rw9wvs`x[_m'Wd/eJ Fь"t޿]>g(X o(-?gう18E , 0`LD V T荓SzR_H{ZV TRUP#s)7f .⃆4 ,)0<>}eGt>9Þs߁[Pf|Y#ݨY;VkUB7YR蟋buFu]41I[W7J. W('Z3Oa K濎xrxӈp ӄsUc2i G "JpRO(+šYZDY!w$?UD+"`Ʃ"SCͰ J]M:3܁f 1݊"9ݥLg_17RIa*<;^wjI\$lhW.z?㋻lTT)~x45#5G'`wHhќg闽KK/ϐ8q ߠ { 0a5/s]d.s F΄j҄MF6"vgCYg]}׹݉Y,*Vۭn Hx=[qvT x$ZB 4]W[0G:M]Y3RgE/Jen7 & ɛ#ڊ˼Yr^&j6xJtπ*m!gXŒօ &y«-o-G+SeI~U$_Ђ~azX,' wmIvΓslJcÝ{ ,?֔aDAHM s"$s|MGP>)oj?2#@8 _+x/*D S:T‘\0$BveN:d2W9ˋ(lquE~0$ L~: ڢP>2`J،! =>>mt= c cۥ ᲼paYR 8 ~'}T@9CpcyÏIY0qP缜˸N`h>BJr"#iA 3A?Vc^$"w=4} ߝ՚O_|x`9 o^B5R,BͺÆ*XrO8uqJ;wZ6ˑԉ"s+YK+[ }, Pzͽr7Ȃo3ؚ-{ݷɉuDY ^ Hd!4)@jd EU@NW /ཏ $7. xFѧn|Ўbn*!7?8biyցB6bδƺeeb5Wum]T}F=^O(r^5r?m }%f"P,l]^Vvd"Qn oᓁe%ꛈп':ŅF8brp DaL+bIO[O@H,2d}QJBOJ#%C4AqpY#ZR5͈(<V /oY"s⺸g#2Kp'?s;p]T5( qS,kP4Y!Z5V Sڹ| u̵. H6X%P_kk3~ [ۗgEs29\t1Σx-9"wI* %M}ywB "uϹ"siojOKD3{ u=1bCH_fa~[]fkq.p,pA [&?ɤkdٮyܕH˲} j9A! \|Ie X,na)::#xntVi:Hހڭm$ |E "‚p^Sz\ѭ$DGGS pn pC EqEߠj$d ~'}:ѹZE&Ld:p/;_Y{oUEno7fܣUwQgak.J'>r @"LI`n/m\נL+wF ̀&Ȁ)&`xb)&p06N ^eYeh@Ix0IJ#~>lMS$[`̓Z r `M@+ Z KչrpOprrǻ)~P.&>bk_|aapn?)Ҵ(rLsL.lf7Jۢ)j(\=FĽ/+Dئri3QnAwZWg$aԝ~eezJ؏h(VlQߺs xX`x]2& @cq}.$ 4Aq'jn`Պe;PCs_nlD5U ִ6TlIqCˆqh f?ez J={nhj_;gVI(F;TBM(~#a?Edn_!PzA,05g[F(!*aj7oyNϯ2Ix:?~ TiYQ8:8Zegǵ aX]E%w9a4O.凒=o\}K<8hn^PFbEP&Cvu]nI޻sud=٪Yx#/Hl6}P!BS_\H㞷ߧ2@VXr(f̢Ngm-h̢| ^9%) LBp*#PCG@@ǖSUJƮb#3g: ?$sk~>"{GP!M[;ɲ}{thZڑ5ϒN1-ƴݮᬌ^i߬SںM^.^J\Xḻvwqy;b߁*RWҨsr2aaٞ; HV%MoǔY,k ־>P`}j;uBvG4o.iZ~J¿aO)]~6ZEƧc#x ӧq ?,MTk~ZP7RsE},O5~g. 3ye)W:5Yh7Qo;BpV>&A۪p2J{Nnaepv|XM),2}WEM'q}l 2 hpZ\ Inkt潵p0emn0kxv|*WiGn+ ﯷ4-J=J"¥V׺$R8v[m$K4l.d\$Lt7L9-R5tɴi3Fҥ1{gz'SS|1LY2HzTXz5Hymm2(r{Lw=CRzž3rp)2* 4XQ$ 6wxq`|Ak\ 'cnAv}κ$z4Ks4PnP8 },(|@+-٤pWxi[Il,{Trr:ljÙ^1߲0Y^>b *O/\AI$ Sz >=-t0SaSa-Xu9zfo(y~[&xrm|Nj[NͫߕH }o2 a|];O0ϮloY*~ݽ6fY#|x!X0Ioj!q>`g%Y۝@0͠XP+] fѠKHaVLE,UUXתqli}T"SvB*U2t-r6 -%!lO1KYN ̇".4*#(cЫiLfbƯpo<0F$هL_w;wxEDy !PY)]/@-SOn eb/22sM:5Lt;@Mۧր'm"J:Z'ȟc1H"y+DwRq8yCBE኷u$Z1IHv jjwUbmW]˪Qkz k,uʧb3H;;{my"?Օ]hiSč8S[u3^= KH0\ͥMl}퍴Y.M;Wq]ɾ?T}+F ;W^?'&E:SKbrx! (SDЏ SP?y%膓jj<7YI &oU# WėuCAx2p B㎇SC!>,kH=ۥв Lv_냇WsJtYꃅY{]3\F!lC&ܰVT67<Ս3!i#/e"ljLƖC&9)Eeގɫ33m$w)-LK;x'[cL 9QHR൙-dS+HNBᩚ`B=C;IF@Kie2'@jeoXq7X vs%A}|7Chk?ilD"IT';-qA&FTR;0Kd_V|e4Ǫ0f' r\RϫMiXd=k㴹]v:W)$! kQrΨboETmbf&BѳFTlWɥ ur""\{I"& {}\\s:̏jTcг=ZwoὝBH.IB\PJļ|P^Or@'3@y}y_:H^C)o;q(Y!QY6W{aEuS3x9[W)dAZBz%;qѤO_N&A^D {|!1wvٕG&T@5~N32=U}y'LjCE-qIڔE`d,W3f9Lud}-5Gе͙p%흁7֡0ës~8=˞QE>ʬXvo^xƻDkJ^fE3Bck&]GP)4*uWʌDFYd3/4Z9Spͧ4kjhQ>}r5g[>/zr!;gle^ԊnV޴Ȫw1pb:Ugbë@\UL")1Sgo3ukv7ǀazHu̮CϞ-Ȋpa̖P\JYA1uED&pY]r^;cRLDds4wh#1ߦ}ܑ74O׹K0i_oWn6O2}]Q^LEE}tlW]1Q޾ʰQ_SkH+oa`zj`OLտRr0}{:&ݾg̚WgGOm$ (,uqER:`?DMY)eZjUhkW+)[$#]٬3ZUfQcTDz:e5#L_DMj߻L0eJߦ )Cv[2ݓJN͆*(.Z,fkߜz aȷQvDvW]@Me,>y6{0D\eb;V\.ڃ{*6U6)]X[̺iw'Dc!T_v-+&[\5^zܒco8Λwj & &#vς52 y"knOd׎.pY{/`J x)t\˗-S) lJJ`ozWeb}mkyқs+ykx{z-jT55ҡˤ3W4g ćb>*zγ*5b("z%&e>be ja7nTB)3J{&#6n&z }QeB渘~gR([M*5P.:,M(L\*|JuxT hĎineZ1Z1/ Ur¶Y#ϣ:@oCU6 _|'#*m/nWF#UWI(G.R&Xg&DQ~},n=|hU9 K|mkFa\Mjwq]8cNF{n+KFjuRGppF#t"|V/)֔- U ގK (&!AN:pYCn[/QwIzMy.H!"Ul*ג(x]n.cK Ɍ))CJ0CF 1͉ku彠8_֌YE稵>nykJN@vsB %e.Q `7`;;pΠ0߿|¢ss3-|d:Bؖ뉱]M^ɷGyxwM7v3nNw WLۤ]`> V'}a[.MVNV+|xA D.C4OHgN6RvgNFA  g/, .fse0q>I˜lbw[#ju~[6nG0w΍\z8G"Bjpcކwg&,=;1K.wdYLAZ;[͐Vѡ1$-҃_0JW7:E=~p!e8q mb1>Gױw#}>X0jxmJb `&ոj5B.bܒ!YYg67U&kv[6uܝOP55}d\K~t;w=㎏1!N~߭W 9̳juWtuik}|77 8"Os1?˹P^Hwgԅ{-455ovf䦵G~+f26[ XsXEs^Yg_fI OhϿ}!q+u='|=8?UtoT)av:`X]ິu>F{K{FPGNjSN' w{ɐbG[osF=_^G(%3qxKe! CJþ~Yq 5?s$CAZf` l]z)Opb)1yPbn6{C%Oưw>N=Fdqp]G T03@Ȫ1*seT%w"ܓ|Лyn(rEN|QRR?h\qaڟ|ݷ9K$uNo`ha\DW>ŌGC,;ƧBY\;ENXpxo^#fK~}WŦ]0zq['߃AXs*1'DJd$cIN̑FFL7OOj2SPK l"D_ 6 G^G( XZ 2%Ꙑ`ˡP.:$H! $0k"J\.92 *57ɆN>11i Goga9wsg+ c}3306\X Gnðų@,Cp:2Cw6c!us "D+_ fDH4Gs MQ[I䧔P|iJ`A*XOI2IZ+_[ ͋"-4#r/6ugjF_S.ţ8f\ϺdRFAu`UTh k<:գr{S+6|7^5 "$!# 9GuT7i,<u0`8owdw.}frE/o켘#fe]EdeZ`eNR0lcq9Od 3b^^B5HY<&%6n&&,I{c:ss0A㳮JtC& F:#QI7K/mLau6LbA1"LUYeAҧdM9aɬwo4윤DB"4aM%^{'!=P%,!k=coe91 rW#0Id{ayI5dganvv(VDŽ~D-jߢJ Z&b4!i|\'_hg⃻Me c;0VO p:Md!rbX}ޘS|%3WpuYM9n'<oz;pA' K$ 7$Y3r ^R6fnz e4"3|XJ% ʏߋθ8dwnR4_әL<%``xa)Vꌳ81mZy091=0 ~~iM).[w3ڟ$É]]Q@d!,kc$>Ӆi7~%ʗ7C/ o ; VkEt%V(g<ا:uy̧ٙ/9$nn~Sرg":cRUR$ `d>HQ7&eQ&(yA5T7 %@$pF߆L?[(jWy.I]ʫ:wt%&d1WCfKx[댖0#ʍWGɇI^G$YhXYff49#+ݗ NrE`I'waNcDE9h;f սޕihD)06L3D3QLT(k&&H7Euڈo&аq;gn蹛ӰJ 0RP(sys%*$!3S8w~FntKwhx >n0GP/>uq`L](6eВ ֽy(!2 R(ד);ׅP,YT@.F^td_ExKL?̣y &9YVX q ;ym;t!\_X2!B3^n#My nOh`ޜ8zOWiIZߞh̹~';096rq%0ړ6U+@j數@[]!_MY\_/ØaiMkîy&bg듕q%NGyK%zT"mugvcb b5ZۗQƙ7Wk25l;w60#Okv-'y8n4zI+,PY78ZnɟB>]D{*T<SwQ~̃j|(ڟNVIG3Z0Gh0o8 B܂rFC$QaxLX;&E Sx \33i[\UzX ᶼW:?I* 8rބ?!NPv7Z+>+"BVE'kl{K='מSo,Z0M~%e`ƶvBZH\M.Tkbފ!ҘhܒYƇ׫m\";clc1;}PXsnyt/6mga5=jZ뽵U, WKOAF^ 3hNS풃 c2v:uWz dqdΐ(2'y_%!, G̖E ~ɗb%x h4Hp"U/-ϐ(P9g*hw,RE+}qUcI*ڎ@ rRZU9wϐwjpY?u|+{c#;KDTR+p0I3 qY_~c5"W),fs֙ON.?/&W͒}:nJW+IXx;~¼IY1Qr[™!WKze0_S.ulK.뜳M 0\r;ã*YBO|K{@iPBpȋ"Vd8[}; laOQNi*$@L1vF.%9ɽx6ǫY_:a3~ npF!-Ϸ*^ 4BoGlWڕ:8m K8fQ d(YQ' f(5YEFVٲݻHh?}̽N!sƑ2ey,u_s!)z{3Jt$|XW(0J8wjk)Y>İ"Srٻrz._Ã':Hm);/W(8hVZquoB"#,EV(,StYR,6K>vo;^oK>$> H(QhIHC (?b\ ITR)ENb\퓝:M?HIsQ5cW7<}&&v;1zPG+xŰAȨT3(F5_s.+guϧX]ÂIJPoV}_ߙX SA̶u)6AK/K}?CхL~k{޼?8` RJ 9-]\)BngNUJX^ =ӓ#JXl R&>U%%I\"&Gz.wO+N ", FzkO`O 8UjXJFt^Fb!rUYQ+?pZp7Ou;`<^nˁVo]aڦQcX*pV' މߕ$ lxm $ GLwxoãkYײSM38(!0 ܒ@A %#0{g%mWB$*lFQQۨuavІ`AU%A®LQR_짛G,;R<{V}|<4mx‰#*K#" grGXfN"' "\iphisӴw1j)cgt2IXTNZ YY!THWnW5. ~:%Q,Cs"` M!Z4*l/Nƽmyh&qMSDx?< <6sYJMT;4p;zY"b},T$Ti@Q igeR= O_snǘf'O}gsvᐿة1,) xM nʟ 4 )QQRw1 ;鳽,&=5 ,f2P:Ă<[@2RdY ֫`9A(]^sSixF:Ed(6!?_1O8 Z$?r_Xư/qg^$&UZqi`w9AkJhY4s'hzVn_TǰH@<s @*˞MK3NPŮ2,Z /Θ@p$z4m!%BPy7R7QaGy]x(,J0*j>b%r!ag(ܚn-uGۑ|HpCT[w `{lhnq\ٕ͕1^gvJHoL:ES\4O5WEu]AƋ{YSDuG,\OwcEލo_+Lc$u& v<~v4 n?2ĉ ~^^?X%dLSrӨV_̮z̶S3.ŗgn~hlv*r Zk?|ǐYi;7# =89n0%ܑ۟xϊNl툻E4r*:gb)#^NЃ'qTOSğ n6){IGOD5m5bV 7W}!-gEX  $i%bM*gG< cDa` [uN`23Nmծ6e2`@vNO֒ny3tl;~%]Ch)qe]R5My*uMPԒp w;Xn2g"(MI%Lu&p|k()JՂ i}.{ QZ*0UaAJv/dܟ4ˠ܂鮙PNfcYķ@ՌGgJx?[fqʕU'Ν_V#pMaɧ;L@s{6L>]US<s5n ,S`!1E!hlޜ䇆XǾFzOwזh> ۸|+W7 r>È|& 훽Ašh"zCgD|22PtU2}V0-أ}0ݢt@sfWn;my|(a+e2xH?tTqĹd*,BNZ{adcwWV>O\6B^oMMSy:$LA } j<;*ttm˰"+A'!ʉNsH*^F}"bIF_]|^.J((Ĝb(~ æ3D~9OWy*qA\4 N ޼9;T8='e@R%̨(t1xԜbx=Y0XabAsaiTVkAnWx~])՝ gyךɬYU qيY05#$R fgƫU6s6g=[TKS1pFa#p,x!r16K(.[X ;eB5JT łSB4RSCR`pOVl 7pE9 >ZᲓ7)ʄIeM¤~l\GP<CX:0JHVg'_k5zy3;z8 "2x0 ` Ozg_esl2IL3We,ᣢF#kP,3iw6HjܑmEN/` 1I% xI?%r)Wn˨q0y{~wzRG0h.N?4n4#MIɇvo",>̯Uj[1+ r/Kr f2pi=]HNYs׽kl.PP R [? #bvZߵV^Iv 漓Kg8˸?ΐ򨟾V;/}@y$܀A:cOa'v񵬴u fy*J[e#-,wʅgq@_Ko7-c`V\׮bop1 rk_+uy`|'GOW\8?+ѹB%X`#q?Y<#ݮPؘ{_d/Bȼ{KL-n,X+3m!沣E wz΅ L6MDB/ 6Q߉q<oBTH[i~8ӳ}ϫӭ;y~AA+^M~.V9,&~aZCX0x(Ca q.Cb 55,|$Eo4JM&JT"q'K}%ޯD>zCXp0FAHrYEtHI$) b$F9 9.lxxg ,@B]=%9dE_躒wXz6~W+`ĎEuhso(KBPm\N2FI@N?,vi(^榭孶B}?@J` JuA@%-P~ܸ5]BǤPNaD tӥ jf2|RyNU\ %0Eab̳{9ob*YPI }aclB*&ja =# ?߯vŭfo5 ]Wf8C1|,R%^ bcxI<+)Ck(6to;CbS&Bָ5KבAzbHH+#gM}9@ma HyնD)NqϵW#S: gZ4*[}^Eצ&:uo`M/\ ' |փxKZ䕑e=u?avI:ӁW%C<n? Zi~N2Q{zA @mۊW;u6bWM5ƕn/^:xˆ&YX.Y#ZvMsPu{GG8xAtrH>#:I <}(ar,|pMnNʩ5z}>/30i7l.֬fN0D8ƭC~T cla_qB@ɷ#HöCcϏIϻN1oAs #Z+k2b7OՐǺX$Vq3VJsw炙` (@0,79p0U {Q?jxj_ʨrNe?Bɻ=%8xI3WQLCwЪWD8BdAx@~]`JXq xRBg,at(/ዯXluͶKM>l x!~80g֎'O̫6sX;Ccҧ9̒ιU5!F;k1>.yU2i"RlZA_ͷKW.p BrUu\!%Wp\nX~z\gZK&)dwNsG0=(v/`B`1wF[&KxۧXMNlТnaӵn~|C'c֦[iԪmmsǯF&0>d0>(}/>|?hmlS@'IB)Y7’afcGТ Ñ3Sv?\L9I Y|N!ZC3QƢ\5j<ϧeJz~Eh_=rHCj:hMK;i=$ܕx#.O~P\remvBIl?qȔ>[g8xxZ#D7Ӽ[] ʕ <=i&RSҫpf?:w'ڙH־y.ZRaZj(Ġ,4X ɰ͓sf?aIEkɲz3eMb B(yZT@x$ L[I,BUi]}u{nm ~[qq(^PdxVɢ,i/=\cń޾+#?#_[;2BMXmAeZޖY nx0? D(7?8_9 ~9FXHXC/#􏾑H/ʎX`HDCsQ$ŵb;HI S/ ac.u )H%s-gn 5o-[epf_{8r\m.PYh0x xCrudb @(GlGĞ6#J`z{r<)MGX}S+.iFFČ_ -sFȜeZy2h|Ipig^⿆կ]2`svхwv\qTn-Ixyχ\L6-}ɲuLi3jϋ崺W>xvPSߏy[%"m6ds@@'@bR~"\"@/f+VP-0gRwK `n~f{(%*v.6/z1O^آ5Hf7Hz޻p#y"%K,:CL}fuYٲ`RV .$>iP;r-hBkϿUQSw>Q`Yt HC̺4P~w4{NwFőҍMܗk^Os6ԨtO#]7~~c%YoFX" E!HROexR' UpCF\:ieB]|`@*FWh,_LKn*w9Iq\v77Q`wq_oS0M hČG=햂H+0SR<ԓqev\;RqɲH0BR{rܲGLǰV~:R/-(UEyTzT$b>m_S]$nM}.:ΡpО=l/^_@\sZs|5e_K(J@ktԤI%bMU.B҉]LiƢ'|~K+*z?mr}Í6+]+~% X󣭳k `%%t@i&HcoO,B땵uU!l+NFSmu>+ʆXcDAz5ۈ>M'5zAZRhG sGe^ӸR{=٧5ɱE6_!=:0]58G|ض˺?X۱$]1Pd~q&̹0خ:@R/ebq)hyV3eE.ceFF}ʣÓR GAoCKDpQ0;DBЇgz žhLj!q{/zIXitr˅BF s!++t4iZ $eHt yARQ_xvo,MnyL+)r]D'ƖOz4J8?ƝH-ư"H넻4݅ذ'bcɤf,S2""6VI@ ({pG#|hE(zo猘!Y7ECyG/-9 dEP˥~4뜶eVn_y7uf<>auܐEq9|!(X^ +}PeDZf סçYsRה$iic5(:\ȮԧŠZsK~>Fn<>9!"WimcT]C t]Z~:[(ss.IB-$(%q],WqMټ(EF3VϫFy~X g\=?^L2I0'QY !\dT-`2V&[g\$Hp7[_mo쮋-8}dn8knaTB@[ݓ_\(S\;berK|λs*;f% qJ +q^G_K=;VK;Ǽ,OIeC? %>/\"ÕY-b8f ltʍL\W_kB% ]ӑyzv/Fjzu^Kf_B] t](l ].*|xGɽX$vd\[Xpc; !rѻ PQ֤<#8O-sC* ͠nDBJP% ݂~;_ KUY"ʊGS`-i`Ʀcx=g)ZeYgok&1Pո*%90mfǹ[=$ ]ja?_n䊓!G 6s?^ǕQX,=o7]Rx]q7BF σ3CKc#%7h)} )]ջ\it`dW<5w8ͫM,hu;lcٽ7w8# ͥ+1#^ᰝQRT\27&=a5cVJ>O2<ÇP<~7=6뱺 pPk*U )K5$QD>B㊭GW~`qOGA9MNP;'n0IG- ˰VqMz1MٴD[t?v_j⌵5cI>5+^=a2CnYh2tb_mL1dM2 "2p%GЎ<[MRp.h? s5Ahc(6/ʶZ ?nD o*WekSJZӳRW .W̧hK3@XcԊ*( [-*f!9g =La# 76y LQ^4/nƚB.z6Sby/@ux[g8Ճ ? DӍF'ЦZ}A;<Զ7=[3xȥ6T[{;?豶cSOȶ4YxD%I$v?U9/K҈%ݷXtXʊmJ\Y": hm"T&+h=pDV=!0PZg/-t_{Sq~"ן:{JEȂ*p۝A\"KH1ua(yC#'Kt`*Q?Wą8"ˑ%3 +4!NĞE..)dy>=u×<䏏XTGg=[>Nܠqɔo[B>]J/L)W/2ۘY\p"VtܶjjܔuH XB鲷':ZH?dARU>]vnRyJ~2kl൥._t/$D[K0W|!à v;UIg>W1 Z}^ kSW$ bU4 SY6@'+J&τ*+ iwt#H{o`)(&Fn5%K \"`ƾt@jYAj1S g{xz׷+drc1Äaw7+gFO~Zh\"C/2wਕ -jʋw1ɏVqP>K[ \>(ߞ(rg8M*INE^@WYS=\!WP)Dy:ѸZx<4sd?E~wCaHK"sQb|Ֆ -Ǽ!mJQGY[q=&7mbL,jH^=KB۔u0vvy7/,Ef#ie6Y9_v]MIs_Q9 R.|ܫ(! #/+S1vbAAbֱ5+2W#{]HSr)Rܽf!S~f0ۍndcUQ=RƋ<>?h$I@׭5q{>Wx\iD]{Y"q|{vD}nks=}q :$AHh@ ]RA'fq/ XLȊ,+1#D)!U)Qi4"C?Nq3|WPvdtDmO>Jz}rDŽ~ k_AMIJq;nt'k[˅،$f*,7I1EKk:47m^A4qx߿ݱj&Iubg0'3hy]JO<&k%ő%_yL] $/v2ʬjk+RqϫO֨_=$r7ΆR%nO+Q4o4@r)!t6f`}wELUL{4gcR&h _^C2"JC`V;z+K[x D(Wݮ~~6@h| VG GL";,3F#&jɇWmWu>/#g%x?/MܻP Y;|ٻL;0'zQA=5<K"d, dc49DMK~F#L+pv3Rg._3ε%`#>Rl|u)0Jٚd@!* Qn6⃻(& ^];[X߹#e<x? h:&٘o3gXR'z!iVXчL%Iu#T: :7,"PTҡb\+u h*o:BxYe!`{#8@8KT.xcャVZOZ4_YȚ_NƐVpF6dHԑ:Iıyw\?_! ͳ5A4!}A?p LI"m׌.Q9p4~oQcY୰`ZoكٕiTQ_8!o+.1fV Q)DJW(1G`- Wor99Tf?ڟ>jrpl8pvGv=_NK8F:=dfpӞ\E1IƮ~xaǀGuZա ':^ފ#^h]m_,m~8/p*]\9xDe$__ʒG\xGਨz GSDӴ^ƕnK$-2 iPGu ` f= '~\7bs_ {^ýq?hZ/ڋci4"q>*+ KLeҩ;{|Nad$.QĄHi@ٿ18IyK#/.Q_sIv^hFHx*E?ʸAlE3M Lg /Jj9(|b|4|*(mxќ ̥>GӾDdy]<x *¡<ɯ.ܣie.H]d;W#t؛4D8 [rV9l `B8;tAKjKeDj;0jD0]֠RD@j!N8J)2Cӏ`HDƼKҕT ˍ8:ܿ{~ZK ) @Ưh'(xę$V`ρ ?VR8YOɬO- KGA3׬׻oPEUa<"tP>\2ڮx17zaw..=?MFw CR9 (TAiфM5{aG8Eذp Xd^Hi}ԟO+zQ@hyFq(Z v!O)/fF$ V˱!4zn7Dzhj*ƷVO4Uk)i3H23zp" : /rt2)2ƪ|>Vn|K6Quuzhƥo]lFPq|?C)oطRn+zLo7")z0ӼyC×=f#P蜪'[N:h_ݙio7Ptc@. *:v1f ȍ'wss=Fv*.ˈS$\)&F_)s: 1jXΤTTsb+͝* a1Ns ]>D_ 0$iFJ5]D}iLgk0:x㸳!_Q)BQX>pfA~;* )a(6Ne [8MwL7ݷp\8vgQ}t_ۯӽ`wI?v]P/j ! x6,P>TqW_8DtKED4useX))řZy<݃ 9=E$ xqNNؽ1p|e ap+3*""5t&& Soן4Qs:~k,wN-oƪm:,*7qƮ(/>D8B|HR}WZi7 ! <\%6=j(;@oO>QbkE%3WGqj)ݼ|snz`2-v,YY5a9V-x yN58Vfsaw{+@# D6ӆq5ʖn&W˻~Ko תC,d%ʒ)sLPԆmhQ (Mh(!% _%״8>x\QGece6<c2îW{+y_$KnL  NQ[1.f6rz&JWpCF"KN5pӤڎ~Vo#_W &-'` pM:9P H=–9H&u̳`t)e $,]+lۜ,l'<`Mv=%imϩP7׬ns|> }JQ>(2̜KVkχ`<^n5=^ݮ]\f!zuts* mqM/Ѵ^5K"~gʨ{zZ!wUO}oci(!ǁK; " ߅G :2 0x2<WM@kFI Ow%R31̊*ڼѭ @i~blm5*8$]K\q놔,x٢T?a xtz'#f_Hpkkcf~dsKv+=cO3>-CBCw4{y\xP k d}5! HK7b5'THeCb9C<~+>0&:8UST-~s7ۿ`TbE7u!Eq`|9 h,0%V9 ((*h3̒M?~_w·t$~*$\Hw kv3neA`7Aו.VO–l.朗Z!fnlB=eyY<{=*{wRn~zI5JXU1N]L /^oHܝeGn*aG v*5 jМG55|?{'6Tф`}@50 FW|8uilQ%OO K"N(>3vBYRc{DTU/_˥q`EFOs+gy}fR QgFڽJ'I!qO1xK2 PL2lQ޳b7rFuk.iF)r78?JQ4f,^\ 2BQ|xIU 3~BʌT8Ts_'D]LRD FTlGCw_[u Xt _&ghn_ǭ]wk.E !G’N: :rr?6u1=k.ֽ*?@@ᙆAf~ 2إ"y[iʥR?Qa#h#?y 81'S_*UR߁0$6Bpy5#}l~WL0]5D7:6׵.ҌkO*SaK֓,Ȥ7ΛD"*5"|28GQ~)rGQ0& ((}t.Ho{w[wTe8wMD*S/.D('=XcH.@U׾:?ѿ9"X/HV p[QySe%6/NΗ^!LB.{'~;23礽lDK|zbҨT̅VdvZxj.l-x(]d-{k~5,bugkEY":no߳- Eih(JQhK*[mp Axf_\QyC-ߘ[Vyz{)oQB爩1gkA !u Tu_;H+EeVX;s=Y?ڮ^^_{G1?O94c̃E~:&$3ڬнMumG7޿j5#o2ip7"EvXC<94혭ePUR))TǴmC3 ٫" m}ϿܖKxl h9 ""K2'YNcVTɓipHPS"i~N2 ţf-*&'m Fp!xKJ0.2 9$*4.Cto i%I&cqaX EQ‡RݷWd;3JTGKG!5 Otm,bKqGe^53 Jʕ!)k G}U\v8o|u:"b'w5zijQߴW_:ATNJIK#}M9S~b19q'l84y}w5hX򩟣@EⰇX2NB2p%K MTUɉE/R>SXJ9(hthC. xMܲ ΞeWuK 3pP54@l],Ȳ}yR2KXi҅S*5qid.W+:EO 1a߿:IY 0Fr`}|Ԏ'!0ex k,DrEAbG"JϽt;p*FDUГ=2aPtG}Zf`2WTl{'ov߱ݲNٝ^DY+{)ʭT/΂}^Rh컌kVF]`7zkrt'2 ?YSv Jr8w^% pFoE`~\itF*8%Uxn#}Gڞ za{NJIϩN2w< h_eVäcܾ]{Ush)]ʟm+g1B5qEYxݾ"ãxRCE~ldsN=9 GS^rJsB+ 5]ZJΦ-j |T{vѶU`kyk+nUlk`oM}J}=wCBMɲ`#g2˗dբ9t8x9kWسGIF{[;t7i_v^%Q܇%%9q\=AJս9[ᙶT%ɦJ&m{:FGz48L2~1`*~͍]/YYRQ) oxT4~W[m_:%utf3ccfUZ8Ⱦ[E}ΔlNU76 CcMNlySu=@[EKzkHܸEd4 (K:P_Se?a ^KFֽ䳽+V' ydtNwvU|J%Ҝpz%A\'HT:B4׶1ٌwC τuMٍ"yU+=G!].c*<٣wRtDE8诱>9nDۅGE'ѳ8 WGa0YuTQƌr ַv@~dWj EQk up|;s}hk}4&H$Cنqvso_>WRn̓KrTZmW.VvCSqqtKe:(k5i\W|K,7ډ!7l?Pt]6fW*SݱtJiVcTWoX}ysF796ǜRh\>v+O2+Ȋ<~J-PHzz ىtE}f{%=Snٲb+*ekMȉґchQmΙ;iaߛNn7)mk5JK%>XJTm{(b^u`5d,>¨߰Q:LGzP:Wu@hwp|Ti&#9W0T32lVM+/7U弤1ӷ=fZ ;fp4OYh!UmCu;kex2ӁCy?3MkV %mB5ҹ?wX hea ]mgv82@N.]2tQ?aiΩщ kQl͢3ԥ;> <1Ewa:Zm%Z&|/V9Kb᫚<{|V}b$nX1ϙCzXJQ`"%$r9J JIcX*c5{:Wt 5u{.+/08گh:Vx:yzM1^`ťlK0[/_嘵vNY}ԡ N-)=/Yq^@IwR,h *KKi:7ߌ$BUmU;K-ncr90> . ^9Tވݟ!ͭ]n7-9=+Y=QȔuԨ<_).Dr{y!!foVP=|g~o.Kf\o^}š$,4VQu[ N)rM6iTinyM%k<#p 嫼HF_Nϑ˒}/Q0,r֕?o}N|Pe˖{R;jO2.7Oy;]ۗI L2I,Ȍ.dș: 0p-^CuLzMHPYG~nJE`[ëG9Sm,v[|NM(W,r<늧r+x讱!eQXPMAwm F7\7>fO:}-6ѻ%9L֊^$iL>ɫpލ6r k̽8p]2C]%̼t뛥|4:yVW*>aj5́ہ:zO K8ZOoT*&W\yYFQ(b!h0*F}z۵e\\u\9.9 r.޳0cO§ɮ2 oСr}DmWHS/ҹEįKكqkF92c<YSMĝ|7`D7\*#ɑ5SC;BMO4Z4u u.>$b /vWRIO0!NKZd+:o_ +<36 Cu~T@z_+S=xZ 6%qGd(tQe! X5gjˇe4{ADZۅ6OR@cidDa\Zf.ctvf3cMi)ޫ.0 )_ '6> `rXBcD'sD<Ԥi x%IL{ Kc~ 4+Icb[ Oi Rl5 KשS4x~Qڧou;n"LRKU۔>|J ՌTW>-fmp1 ہIwq,^@tKiƐ&R}<-dhnQmDH4WwOڠ:m{{}D|Ґl :{܉SM}tEp4 UT@"=1ezuj\u̅56NB7z^aTq~%j!}z_%yԍu]! Aݑ[tӓdGdCo>t=f;ln"6.q2ņm2i}}yeeXak <}.4kK+î{l3x֕o܄_[%~LY$?Hya&|l W]/֩D!}흝 =e 8+20%hEܛK!N6 4,ʇ)R|Zoa:Hx.5w2b]7`J&7s0K)a/9ʬ %ދ(ګӸɗ1. Y?$a9mz%6V9p.<ձJC62=m=ە&CƢD*B5c(yE ( %U4U5 JԔXQXuA39a'd3yMU%#>MʗFQ..Z~@ ?)&JK?dZKþ^|{?_ ճѸ Ѷ^|Y, gRB-"'I ̂qOq[6"%r-N@V|39 w>r m(W^jrjDHa-P[ʨˆ4&{8t$Z_Su[֑go^+ݥ$N u>~v:5 {> #s `$˛ZSd0U8I7&3p$e4l SY6~=fKtV3Q" S < oHb W qO&GCx\bEh<4Ot<7G7 /] 8{I4tQ( |^Coho=YT͞ZܨԊ8!gd_*]u)Qw(8||eñ4;"i/R6A`,(EEf"Mv}>C oDm]0σAeZEC'\'Z5;L-l>?P[BO3آbfE"Ό}ZnnӴ:X%޸<) n*!g[w4;/Y0E庙40ˋV!C aäς/}>.^]'/g( 2A| |Cl.ڞ$|"uM4z7Σ_ºI@uK6~6^cU%OF}.xB ۭĞ6HIZN<ʩ08D$DsIZKxR-H"|4UCb@A9&"K_^@>]PpϨ$Fqnq1N\ j@qw$Cr7jGoN,Q`2"?k4\Wӆw!e 8E"O"!;j~iy|\aD\)p]#++O╈rJ`ُqÇ=MTT/]9 MӷOO9qh12"ὔq]TR_&tf`b\@i'Cy9@dJ.%]Z͜Y贓#.ly) 3} Һ4?osŒf{[^S  uxo4Od,s ðp8yXA0TgFTS@2/J|"'吹A^xY)Yw-=M)h` G= d+vÖq+WPÈ-Rz~?МʜqivLk|MtRcRo7n[Eٽ7(/[|AeqXWrnui YA7x%ݘm[[8*n|b9B(*PmL!G1ن Ph:7*v8oQyVXK-۝%[Y&^{#q>Lⵊ{27P*v-+zo =(:?-[s=뺽z販)a QT~"% Y5ίh]|Ŀ@)|S{"C}w]j~b+Zn?AG-^yXas8Ùѥ 5s dq)=@~zTȾ %YN^8eo Em6#bLN,K`:5tG{찊cx g`;5&H%oxb8OBV (QOD`R3-z{. y/iT~s[tO1-V iЖ6l'KR8k4{Ӯq#D .8SfyՀ)Bn"xڷ4۾0-a^?Ukכs ~yWhnGz]nԥCǞtM)WkҼל֙bmO#v;f0 A9kqw[63G[]Qub啺 5TmpU0&(<m>^#mvU26ᕥ$sȁSY6b.ҷǫuwv!l?dB'X8S$'x_4O 4l*u 5X+$4B02 6őrWTZ1K{~\?E ^sfw<9uP.|앫*@NV݉8 "49 RYY!i%ntpNU5e#;-T4N5+kQkm8XQ,{\#48KJY/fC{Z8QŔ&U9B9pk]R'g 5ND-}uĀ6W󚗅wZ?yNq.<&6~96DcI VdeM\O/! ,9Îz= 2:v/cc,BBz_ɘAd >#!|p&DՋm{1!ԞB OPG?i(:_+of@By:HwN?~W&22{6{Qw6Ls/X嫎MTeTcjš&neE2c|9C=;WSvt<ϾJQ~}}sGf؟l yGa]"m& ȂFn7Le/cѻdBwp 'KX0;ɟ2g;=:nBuΠGrNsl}eJm{=ty˨FK`RރLrD\Ƚty>iTL8/1Up-zzF9A:me=»M)=?Fxޤ euL6xO&mQaj46jOv]!!IǻR̒OawRx&V<dfKN*ZPYحL(tOؗ5j4?bv} $37F!1IH n~+ݽ8ఽ%̵2z~lSҝϯ?WΟT_SGcMx:DHx14"M,립Q'mX Hżry2ʃ;0,G~k} $M*(BW(LhK 1DJc84F6Jeg^)U}ξ[4'J䱷p\"v ."0b0#ZvnҸypvjLS.x1kx?͘T~]M}@¡ @ ߦzT P_[^'I>ElQ)rie)%ɥN 9k;qӲ{ӻ]ʍL_[֛Ku*hpԓfϯ^VS]I_X<ݺ[ ]g~s{]87hm_g$mcpA7ezJNj*q"6Q>1(jC6kd\`g>rkBJezE}%X^CéE(R72.ŕhֳ󞳹Hu{걍߂ k$}1cj󇆑nFnf%I@ok5 U-h2KSrr{W3K4"I+`-OOh-aw. R9bQb'|۶?ljN$lpfUlr| 8'ֲ:iɞp H9S &JgӥSlP^3D4E|Iwg*c+Ve; Y_)>4Y~܇փR](ØԲ?D*%~'DuOɪkV^1@ypH6{|FmK|Dspv?̑"2?-5S:t0%NiaYWpl򒠣aB\`,2ag)⾵w40B*o> ?x_:N/:|u'v>y̵I<7%<73ę _f1eE!\[C5 P~ߛ]I=}NBHR@޸|v.@KMr k{1U~*? ݔ81[YhdH Hrpxa/97'ol^٘ΊҸ^럹ө'~smhW> D#1ۛ+T2)W$@.xuVg_6>.Uy o)_+g ?O[JSכ#g%T% !4i!LeDɭ<+\gG%ڻ U n$!" D_+&]:!~KBY`g3%` 'E`)f1QibF :-\ @^dc̓ͪ"Q)sʝ 3"қWm*,9l 9 ò?J[ۜ .9,ׯ>mx\|RF9]d.L T=_|>w]qs Q]" /sÕx1=_g!΁Qcʬ&:|~}H庼c'd?1˃d19#'/Kq͝TH ?iɌ/*"3]2m7W@#O?&Y?p =C|5$CbDa6x kN^P̰O37A@aMw3]=rj>Es æ8mUv%, 0ߵa>[Hf*D :y2Q@.p(]3@לd@2*oyR;3ihz.0¡el4,uq}_bZh F\m^,@s!Z9+K0≠[ 7 P<Vº%p=AÝet.ivǺWidF +|^Ύ{~~_⠷̦is5I. b`CZRlP W7Gz{MO% [^PO"ˇN:]!1L,èyKOQbw'Z 4]Lڄ?k%қT "Ju%߇F62rP,w ,X~>cOAS]/] µ)k7_*k\ܼGu$N7gWD6?r#hˡޗ~ܢ_ANs@TGt&id:h+.jͷh^ ZpO>[ zY%+ K##ao5q7RЇB['4İXe ;B$sá1VnՍ!БH'qٓflmܯ;/rf Հ%(,O?FsO!M=s ,̃LVR:WWNMD7x.EcY&"00Htaxf^g( 5DVySސ1HIz59aLL?}@<3S%*1&fQ^_HNGj26覐l"_?Y_!x(SRT/xuKhSeTՑU:^zƋqatyYglՋQnp*E$&sx2O=[y=m Mg7NOVeʓ=k &4 N)@p$AuVLzzo7B^ѷo&3u{E_Oy$N6+~Uhæ%Qi-eH Қ5R$_8# O9qSƈsN\ G~I!Rl08^%vl^ 8VKwO)ֽ"&0jBC@"vzW6VF`$K" 3Q W/%0Igo.ϼf^ݙ .P,iLH0p\L!('e"NPE1+@DATBM@/ٔ+p$Y%Xq>)#W È=~7aef^K|/ra.]4SB#"Zk8f~pxmKxUбF;ҟFun`5bB7bZ@&KaA')`Q)̧ L3k)RT^XSRb :Zgy/kiDuۮ#TpX=4s/Q b0U%1f3`s $Ds\Ӌ*o?H|j;'}Gϝe n2"V )E1 om_aW< H# BNx+0a =zj/K<:XAwT jh7+KuqmڏʞL^ɸJ' 0^Tra0mkH?)vs/wO㍔N1@@-@6Ɛ"HĘ7OCtH'aز o5J^09ϔiRtHUq)7{i` =}* ]}k S[t2u\0j(J$x/^L3B"RKg{TٜpLK̚Oo(:i/ H"1x۴&yc.IZ4zԴmd%\YY$\ a~?QD\8V&o%[>B@^yuYg# %#7-bVf<$p&^ڙȡ:^ |oIaD #6)ʲ rX3@9؀eFl_=_2s- $$(͆˱q6y +&rZJK8u^[{i }I BP0i (1^4[2y$Hru:Ҽ&dEW ZѪc}Ϳba\7ju\H=n?kkK!Ø_ & b\gC!ѮJ'D9seSޓ~A}84yS(ay2ѓ:9 :g~14OpdUΑ^Gd4'/4bI3(_aC%" % YϞ>曄8b?_9FH!РIyICwY#: LEw2Q@qW/N&(k|b}[DҭVFa Z, *cXJ f */2M2紝UoOIo:CSea!Q; r̂@("AogROD Orwߘn ɔ"m""e3746!6;v +.2!q, i^&75O"Kjw;09.o+*^w ́ŵ|gUjah۞6@OQ@EwQ3N)VN7Wh0-N#/ |#y;˥{:PZ)!mR a0!ĠD\1ߙCf=~;ktw(M/@\cNM]2ۯt.2_iz;MJ/wnsvr6rdW;ݼӕjWR3<@\r[Ę {]^gByʎɻPZCi82SiղZ =tx&ANŷս)N4n@ fmLhu?:Y=U*n{Q9Lm >ی^9ƍÞ-:?eo*;ؔ'; ٬u'ޠXrj[_'yk2EMqnlF1T&G8nǼSΐܭ#zny_(wxQ}4!SgvEz\}ᶾ7[|yܛ~|iBqiEļFl3Y_媍HvL m1*?V u1a =Ui4M5w+rz7J)Y.Nd2íF: whN`P29Bc{\2MK.pj;@MDl]6R?|[FN{DO:t˳HMЗs9qOq-J~k|L?!/u+,Tgqi)/i`kC:wAPPth / Niֺ՟ 7b:iÚs^e@GGT:Ft) dY$~_bf /𛧛rVio0 d-Iy)ws3"tZDNxWq/vkfNܜwm2ͼ<1մf<w6HP9 TFѣ8],7vSs#dC겔ź לu/Wgcz/ow P~3y'\yoՌzEtEc;]2A45vNL,(C)m]tluD)ɘȧxN{jnhl8Ԧ3EUnv]+If]5^BZd%\3SDcBm'^nԙ 1ˉ&w sARl-UZISY*,lR)|^bc,oEr+7I)ʺn>SstϛE|S@TTn– ~rvd,eX3Pgo^ ӹ|TLU:v`ڭ,C U=?ẇb{z˱dfk4`:;VOn1x /`$!:ؿ<JyHiJwMSޞJv<+pB.ǶԛɷF?ҜϞ𾊶(+lqW]K5طs1(m߅j&/!m߲K;RW:w' ]zu+qsFHd 9G"J5Ě6IVbnCsOi냱eT7hüKym5gg9+08W?YohuE|jpn }xvz(BCCU2qYw]i8Χ]~h G^EǓrgMN^b~֤!H~;Z?4N6~kqR*eUJMmH[^xJ-6+nGŭ9@.ˮ ޲UG8xL>,Mt 1fNl1$%W\sQigNFSI~T3T.I[嚨=seEAc aL/nB߽e3yAIvbdB,+uBd^J툃u8){MYNĘ a^.+a2,/:Vǽ(&B4e1a;M,0̞rMc\lsΘ L Iac[Ⱦ[G#=|` *zmh{.4,3;΁ /hϰJH}HSQhSGʾfBsu%0F,C$!Z* 8<˃"δp)Tα\cIj:gWtaYBOY/(Y;pXXy΁ZxIh2˅Ħ3Yf\d%n_ M{J+L%[n(oIAJsNĵmK59JpI^zzhouЫxݪV7XƗWޫ4%d ~{`<˔;bT(F՘fDud}4#?ZviޘIt U_qh(sI5KPp0nxY rNG {/-vi_6.y0aub/|-C!CI5_7y&.VWr7o_ +2:;5zMdϫ/5&9'Xz5!@7bѮ:u,}‹>!nRe.Uժ7SELtW"#2=\2<-)xrz\T6y3&XTXK7c{Z&YljRFrMxS9e5z(a62UP':>x z֘Nj򲃂p=ǘyE %v朡,LZ̸[O>_[d3=~> ~xml#磇oLOٴ{ e)1=Y_K.[UoPo\F=sѹR|o|sr,^N4׈Jfmy Ph-=o/_o_}Vv)`5zAb0\2_ke/N :2v}ђ ׼kBdBm~֦W$SD%MvTx[;R6trsD-'ʮr7[A%^?^'Ҿ5ЪRa 쀓gZf[W] ޔrT<{:}N7hr;~w0S+˄\ݲfs;_v(er:(yXI}q7߱vz^suU"MQ\Xh:tfh䭎12D74֙ .:FG%+6X N3%3ݲj fAQrYe3&jfVpb^E|k3`qu+tyoO8{.u)k+xW;/jd{ǧ2g@5m쨽?iv80.sxPk-b [E*[[n'@g'tu6t6FB% ]חbs y` hS3I[]$?݁E[䅎.%m?jSӼ8uiNPٶO^0GHn;RݜFmUY hɉ/Tr<1t8hV<3"b߆g 0̀G,A-P`oI  VPNB5ѤyPקX08،7`bNX# k=5⌺ѩMte\+ESgr*?.e 1+)1Ņ|N"WRQR5o ӿ k#x_^wQ}Q ܾS:ϩ_$(L*ŭbݔV4V,}Zf'ʸ7m:׉Jw~^d2" dϪ-TĖe>=%S8)T(vKg'Dۖ* ^`6M: n2.G?Co5+l1$aE /= 6}Qժ#u,݌TuE:dd#Sa vaW ܼÚl-L c"}QLwցI1oB,S4K^kOni'R%M =&J}ҖVd'?C4_ J_r sP_$cTjzF>'& UB(N{F$׽$fZnWA7kh336VG5UQ\S ^o&=Tfu.|9z UߵGs{XqyZfV;gGlh)/~SKåmt s<ǰЄo<'3xGaNxaͱ) A[:2wm ɞG>ͷ=6Z=9w` K.c2{@T5ؗmKH{C7N>K^.k{9R< `v旉umMzuu|KyzNxF\L3**]wMܔԼuJ ?2d<iR, Y`"Cv^_ '̓>v2! l<,33W(8EK(, fbA$a)EƀGYn].'kz괅@&wV>^յ~鿑%M2Dh$$"GK@[a_n. 4Bÿ3R*cSX"m$C_BTվ'ٴ6v £?Ǹ}5g6PܒsE?@T(Ue#ۋ1jj6Ë{;4E>cw'B>H(Ђ(a4 ˱%Vwc9Rx"b*a> R'|֪vgC&r]Jg $:PZ4PIƈ3JÙXa4Auy [P@ԗ蜡C!>bm Af{:('QR`Na)m$0&QP2Mk̗c#?Iӌ+Xӧo[~_[ϣAKrvZ 7l7ͫUkh}(V1T {&.Z 9 A[ A0y%Gi[/|*I&_eNL9(;Sj׵O^Q6:=YrkPF 뱋J,#q^ bk PSN}$|pR Md%̬BSڵѣ‰Q:Z{װ)IǐEu^&PVB.#g!#P5 hC*6MؑFI$Ń2!2qPI ewAGg[+JѺX-g;JTN}+<'e(z2@S2T)@E"vGGVeRCu]x8&-Rsʌxh2Ȅ}]lΠ%**+2*yqT{s~`p\d DࣥhO#LGO ©K}&i &_uk.jHrQ,/)`T*(}i+.`ө1:CVI,[m8+ΈQw݂D-TA.R.nwjp4Q*O93aY=ho3QZ(,W /60]')W2W'8~p5uN|{'%~PIr[N+C O~;qXfT==C'3M$k\Ơ9"0`rj9=.OzS뱐R;>NKsnYz~`Ϲd(^01>xx?o4<$I@mzZ&I?cNU*[${:'Qp^z9R!0)6(Dr]\6<4pblMg8蜕xFU40":`\tj豈@Dq18qEtfOF(8Ť B5ߪv+1lE܂?^ߜ5Z~==}z^#3xV5Vϊa EF]%0YD&KiBI6FYu j)2t:⠬>DAZ# 3v߹s\욡H/<XWs_Im,i05.Zx?؂!!|0%(.MC'? XH)G#Ul1\$P 3_ q_g Rgr F ѧRQBoUʷOb!K>3Q RB_/9fUNZV.vSI=fgqJZŕ9sx:Js^=u1{!soݍNWeYL͒K!If%_\;]>1c$GHCYĮ/̹i)7ˊ'rV>xvB&i\giZ`)ΚF3fx:xuQ|b,E؄N\rf5dw:eǑԗ>s[7I8IWYvs;q}/Lt-dt*e2H$,v2_h I4 )8!ILbG{dٿ(< p B FL>WC CGeVX"˱e4Ƨ0s94vT8ikhmE.!p /~T"_5K~d(ؚaP$IJ5UZY$J|qZdUa6u>,9=IpOr-yz>sN[4*GDl;K/& LF0~fe1U$ٕC us9%ҷ[Azg5_?exrF_}sAËٟŖDW +EEqǢ UX.VbTb#|g9Gѿ %i5? yb8 :EC^v,d*@<9ñA@aQ ;(ՠf;tƋEΠ>>Ceޔg2PJ4URe:lBl.GPQ,Nt͗~ᱳԛ<>!g:&5弃u$0`rFw~+x)yfdX5V9CG空yG8:[4̸j(_OӋSP"9z4yŋ2>v*gfՋdp[O00+D~ tf\!5< 3ZuVzjI[c+kSo8ywPuDV32byz56Qisq`Q¯^a5hP}Η> ; 3䝚QݱGi˚ o$q7yD'+s4$f(rcPb> $̯$Vu->gcJۯ]0.^|ˠ&^ɽdm7|(p-3Y?Gk A2 mg&>g%qM0;գ6X梸ԕoj96 G2uzȘLCyJ/QP>L_ NٽiNڬ>piA|jpDŽ+e{:>ץUQXJ. ڼ^׭r]>OIn%\0!r}PmUiܿ4#O;(.r߰-wPɗ٩+d_N齻K2><0aC'冔rEc$xX]Vv̰,l,Aq{`n)kᨀ+!>u;%XT,M9iĭ \*yVhamݘu}̯܌9S I n%Jck+%V6,y:/tI(H> &l=ݠBD *ueb7FgfCDf~Fgb JsR @7irnUfqϯ?3H8q]Ǒ:28hm&/-$GSwӴ G{^-^wqG59"L8vCwr~Zq}bg~i^/JʦHU RR#^p`cxi܈t?Y^"0S_:˘;J[0k1 pś$E_r rM86;@ _l@O i0S0Q" _JFGQT39T*E@K$[<\oshDXUN%[pE]ohT jb)"t rsmީ58&V 6w p WuU> rm,JT zQ bz7ƭEk 3dq4oEpNd +G]z3̼!ٔmf{.'.0)!vu6lp@7\Gj 4t^߸ߺmzWZ:>:U]x"m0rҷ>%a(g,ەEpKxz:˔LGG2'p4WɫFur+wS5 ,Sz$*{)29(cJzjqXWhQok=F=0%A5>=9$6]H4it$lx'9QWz<'f2ڌ!2M:JINno05k~98I'"Y,,/a4kd^A= #ƣMS #K$C^PS6;#,IPg :rO,X/5 r(+\̀@; L4?ZojTq^|2S+PNr].*v=dĨF/Ӎqu Qo4U[)bZ {zBwg{Aܸg3h\^BJ7;y!6w8Sy0cfWFrN״v1*,Mh"谮B_Io¿N|63xExF$iQK\rO?H]Ja7I`C˘7<e3!ޟ#!+lw~ cexR3Qgc5)4r;E_xze# okJW]풟:kI\){Â9myk)fHN O,FJN'q3jBG]R#6ϵrKMIՍeZs6c]xMnJeY^a!uo5UX/22ҨQ\Ҷd]l֞؜<{܉(%d@(JZxDt  xYƾ#;W哈4 ]}V3$[$."GGBXKP Zs m + $EJȬFCY/G\!E8K#$`=B63uqoC}쭡3^0fpGဈ $1C (MĸlRA:1WVDVg'a vNٌ`={[ |"ɝ܈&453cW{1;(:FEMU uc`ۆM=*2L(11}|G͛st^.r.;F~I';?ro/I2zI6AtEq/]jLS޳]vt=Kg $~-,P2ątzI[lg޼"U|]3wvR]a/w~g"\9ϔg@26wڍzëH? I )Zd2"+LJ,X2꓿vsdbEmCLEb^<ڱH`fZ42v,=<3pEblؽ91h? CVS Ϡj09 rXsiVHI,r_U6)n"[ ?D.Y>_ ?d2~ Z*y:؂pbMA+:B:#A:i҅#V^&ÐjPg)= CIxM9o]ٛM$,ضWOFbBYЯPN)e m.8鲧OolTCq}B*<,CJd:q޻`y/Yfq{1#\R% UL+]|V|w GXL{oe9?*s!~l耜PN; (>DzD֛e5^ "Ȱ!%΢ωh Dd=N90JDK-l??E/a.k|֞t8u)XUtaw(έ0MSX&_k fdC( hJ䫏\:_!0YL4 1?ۅ`[ą%H7#RrXXZMq~HFn5c*??[ X^VlGfT rT?]8H'9(bIxkxxWBgA%:(Ty)1xߊDG ̲<)rޜ+&'=+!ͧV#ҁ֐v"g[ٯy#@aty\ţ6I'd%V; TL^sr. ;}!t ھB)u:FבDxB2\f}2hF " E# pQַ2Iǩ< 4_5,wqn,#bq-D'(KdR0~))󔍲ќΌSxA| 2E1z[ǞӡEe$t]BfOm&(6gP*}xO%kn[P{\Rv!2Ӟ2xYi7>rwζOZ` |©Yտg[yq)e^/LV-,\EXps ~txHhoiwmZWW9#C0kBmX]% H*G7N81 Z}5WQYte0Pli"l]9ϲö)<j/ncIOBy9dUq0T?8oEjIj˟g2bCFߙYNE#>ۦz4ne8A;@<^=/6+uG!DcLc>,6ɧ%h. ð$/]>cϨ+Ff$cCubo6ffr5|ڤ_g(ئiQ@dLtu\ 3{RY5b~rs@AJ< )2*b FSaJE/^w b " "E r b1^ NaP޲dy>ԽqwujGhX0+[kZ+j?귂e\Z1=sˉ|-n)a_NGJ S(;9\HX{&z͗gt-Ilc~Zx=)07[y BɘNE'&1aULDī%$7@7f P\S=['MWӵ(bu3lψϔp6sW˜^d_ )P[ݽg :b <ś{ɮ_XBlhOAE"5ס#Ƹ$Ԥ(  t(`JFAQheU)S 2ퟄdl5h,T7\֘M5qABl d:<1%_QV{dp1S 6blG0hjΘ!K"4,<<_;3¥SyH ,SL1o ީ\~nWS-;V>|;;p}y•+V^pUX $6s{\+ʇJb]UI%sK:m[4Z$aF N qK]~J^6u7|ϗh$VMV 'g} #k:h"i<6:'_`HS#A8@7ˇƏu'o\F:Tq&P6$AVMxxYY ţa@єu(@Pp-0Q_MY9 +hm'IښZ]HiGd)0pP_I5Rh%L!82=ѮS9$(lgOpLK}F|N{cN^m1;DŞS#mfXyM,&V ^+l]aeTV&LV`HJh;|޴z'n%a|Z*=,u їgTDZb#-n5[7/}2[Eݣ^BZ;K>WvL֦VVV4A\"NH.|vd+-2Xwb7QK:D.-q+WƉLqqޓчX !9h9  GsYk pK?)()gkX0:AISfsV~R6-Y)I$f$]4t8'jA MTjLj],nX $+ Px?.b ÖLG8B!_]h46w0>$-"?c@= S02/ G|עX 2Tl}ɸ/?LCSO+ (>Q7dulWeA{eTp ߁a1o.z.Qv5;9 hht(Q`6P뒿Az=0afbFOz`f| g7W(ȓPpEo W{+yZIE? +Z'h ^-hLjFN# aݎ[y1aPk^3_[6Gx-\խ] %os&@˥)aIof7;"LV3znrB Uu֟ى?&qF4.qlbզTѝ_)NlnWC|jkVz =D,ga[?v>p\ ~׃:\ o1a#X\?,c&y8Bq1P鳀,q012P0R\Qȏzs) m9cL@K$yĔ;] Ge$,Y"4(}cm?q%g|=eȳ- cnY"Wm-9 hrR~/HCbi<|M N_y xgDZUBoyxzm~lYx*U SLJl. Lȳ*eK>9oò\nj~"+ 9 [ڻzȊF= cO,gy]F.rCJ 1|R/yt3px)$Lé`a k Zfc "!![A!ðRQgh+)rh¡ML"x**BsY8>ت$?2?.ˑ뒂\? 4LrRwd;IeHLeac?x(FĴP,hzP, ~`LP9 ]Qu%MK$%`Sin -r@#S Ύoj ),ִ=l&Av#pakPBCBVC R@7Wpl>Ɯ_`L;Ѕ&\>El=yHHca_?*# Ģ6m/3M'ɻsX/lBQɱnnWP8#GiLT&u<]wHx3;YŜf5RauC%emNڛi|R1PB$ <L=^|O|\Օx5:'~Mv'#xjM6w=c,mD$N:T'ڃ+16%|'h`ɳ֤eW˃Շִ7`az"/fswBǞm TjT 4V\6l z=gBmhb9 ݪH5ĩc P͑H#azտ@*ᆉ Zyuy(0*|nwj;x٧zk选10]x6鰱C,0%(ғw_=|ey{IIscg1&6(Qkʘ*e*ĉɳe9=߶XL!+~Ǚ;Jat_aƦpo3nߵ yXʚ| UKV*Cy>14M/f\3܂C$dRHgLXal4$ ٢%fJOMyAfw@1i`*F`QHE %!%9KU>*l% .g+jwee%xsC# KRܴ~cֽBڷ9(@RzkrFDyxjp4ȌWBȤbۃ{&%n!ѣ=WXɸRS~qF@L)54V_~Pg_!))6M\^GiOFJ in o:n+Os|Ep@r4#U$EҴYǝz+&ۋ({ bSo$ʗʯL4zHs-됟Xsp& W]=<ĬksEarXGyQD ؋v`%{7BB'l:ZxHdXt\X]で h&ꃙf1ߛ{AEb>H`/=#l#X&{ݖM7]/8hRq==zWOA녬T=o]?Ms?![Ix/ڏi9ڬ9'v-rݏ.&ʘWJXXZ GnkkF-kwdPGixԴYSnX/Zſy lHTs^f\lNKB, aH2@Ä;] 7gҴ^7Xr],q|ݑ揗KKߚu1("I/ ;!dlzez4~l5TiFN:gPhpj0.L qvdU|z6P!QT}PWz``mlYoܯsp݌njv+;#5foހv?olNZB[; *<@p B3rƒQ2G,8bU!4v[=O 6,jև㠣.8>?>XoϓФLS Z%SNX; %K`X|/"&,Ǎ$&Wu,#{E;)m5& \ Z@==?M>C5L:[8~|;|FM-\ٖ a3t{=란a⬗|ȇ 7[p& q>ӡz2ڭH)"~-~Wj'GL|&+ 6LHAKy;80GMD[ 8g:?}&X2@Rfo҅}V| "KU\dk޲D^E{lUE. eU)rY:{R+]]m!-RӃT0,:Ȯ(G6A/K)<˄ . WTW*KjG?qLzRt@Zn %i5'I+F[ DEH*PCl2 qP/7tOy[.d "hع縓7왞O~ܷ - z.ÕO6<~?'n02Z3ڞG WJu; Mq{(g50ri}FU6 Fn65 5%BzW7I*W^u_ZǑl^uoZJ 'MBF3X Rݧ_ Gqyg)ۻ n߇ᝦ6<ηbšMiI!BNd(`*%EH6 5~gn=E_ޟX.)U:RHs5NPliY\yjgcFTq_EnIߡ1iOPn"(E.9H } TnEJ“BMWxC' SPQv/jR˺7^2 EȀ@>Y]U]=31]$:fZSѓC8Rţ%Ó}ߚcV6>.R#a+lԊyt`Pa-R̈́ hZ$qt/RX!W!xuTIFsJqx򋉜+ȞXFkWT4~fTBp/.P02%_w3%*I_v^# '-FF8&^1>!QKO>u`:42IE: z])m`Y-l]fs<7Y8px͕ Z☘WҖ}uu񑘸&H;b*m)!yu`p+Oky/ݰ.'R@A>Bh8=\W)FЄޢs[,ۅ!dO62IHX{iu)}{znt{n$Aj:y W\(&3spy[vW?1:Y5ѢPp#f(f)%>j|%42)†W{n5s(KX}tuY1uS)_# INN.7ˡO1CgIb%^nr}q)WKP 5[PQ“J5"Sd09r?oOZs,M2ZnPjQлU^( 2]n]Eݺ] շ8Er{Y)($P€s]^n,n.Bb@(C_ j`S}:W&+ZeF32c:@ TsYg&*S>u<Οt1K!OE8Z ϗUAzۚ7;+ofR@qVޤBԇL}Bg.!;!Ȯ19): j-HeYsk~V>&X;HКFwZ>W_ѿ gn@(-% wMTgl^K6tbgSGK="@ I"o*dVg:?U \߂k+3b{.M#O3Tie>{ypfZ}Qs:1I*h/E ˨XD-ۦG">+۰. )ݭؓNjvq t;HhUu/ }x~q0MdQ%N*N\.n+ARL2&TLDhJP{et$@<02Y #i)t(^͒/™_~Q-,ٲjkVVJ`j <(J04k2aUu .\Ԫ=Q5ǧ<؜CQINs\n!-M" , Ix?!}=x+zXPG>-\(NYQBJF tWWiFO+pAG /=mNה !髿D = +* },zhZkd&u6IBXN^7B&s3٭]>cŀCET}6JڿBLQ?؝c顽G 5vfn9ĝrPՍb(!>ڞ"ׇO-Or/_Tk :s>ĉ gW1|pFMr N7xrYbDF? \[`Uiv^I% CngOHhgo40? )%tR’/痖$: }mX?wZT.Bf=w nC1 "oFlj5>HBe!45SAm *ξ)k5Yߠ*NE0\d*u0 ">)C @6S<ʥX$+dTg6Ҕ'.|Wټ8mffPz^KdSJ:ԙct\PXzr(X6Dof.d-ɬКHG⮏*b`MhO:­;FijvTnU< gt4H߽ko+7\>[\Y])nA#瀮ZY 3(;\B|ʗSӗ- ت/fyCI..68@a!@Nrx1@:ԋ_ Ek4-[ٛdudM; 48xGըUm1lj 27=1'0t֛UtA*J -y5IyyQe~$<2"Rc[0ayBz;Y M_%#17ˆT&\1AOoei1(O]G>@Pd#Vפ퓯jbT~fLƷT}T/fuHq"Y03$#2L귤y3-ZkIqS:L(Da Vcf1HlXo٢3D\?r <)颀^<`ٖWs`@!jLzFvϓ'"4:k\c$Qi';;N"Xn)C̜&# nAóVؙCvϥ"|&٫_;¼iV)qoon]AiNa:ƱwQ7 g<ޮӢjf9NtЗvFB&op:o: J1W\t<Z߫Ԣ끅>e=tL4&MmB~3^Bax.5m ,)N8@x BfT!G L{!'P?(&ϹZ3ݕR#ҌQn&:3H /5s?]6uMb,G%I*Zan$%I[wא•GH&<[219|W Jmy%{ >l V p@ݧ M* et¢,q6e!g޼su\ꐳgDw_n jҭ0V䚯$ChݽOH8w#!wmE&'3"+e!LióXܪ*\Dڅj8XA=^%(*79p(qzV]FS`NG`LTgR!g={]5gQ9: N]W-|N 3!Tߐx"D/:xzcؾJĚ1e">2ctJ &eE\8T[NpC( EW?1+g.q4Ͼ]Xn-9.X~M&=$q8Zj =Z DAcAGQGKɯb/Kp҅qhLP#$AT˱C(Cܕǰˢxcoy/\:Ų.P},!fyŠSRmquJnZR{ڊ&Cw,[8K™iS mt%UA1El"f>?}\ۧGs=Rx~3-/3%M{pJ @=?$kV1?\ė e.gdgZ+E<eN!֦֬TCx6E9`CE*=c ZMhPɍ(^l) OGbua׹8(:Ϗ Hӻ:T.j'\~B00n^a=<Ӆk=q:D kst,q[ӗis}LD'D#ck(%6$*ц;2P'"L^eYކV鏼:Ī(sWz/<`+ف~7vbq9DK d ҍ4-2&{:)xlesclts{ >GfW넙\_p p_/_\&'{o԰k:zb{HMa|d xm8w}-cnսY*ά@=;73r3nt?/}Z>٘9͑BR3h.W.^s7!Up5AL@kN~d^Ě)@nu>XIXͪE"cנs4g]T4S$Ӷ{9rPxslgI6Nr7ju v+szZ} 3*PLpczM NG8[0B) ݆\j%"`MBmP3@E_<2*]8zuWHaQP͡XXZPB,ddZ-(|'}֢J;Hu g6j%W)C,w:xjߩמ'kx;bWX4,^~#7X I=s ! rCl G%Tf7t>1I}S,jF@#JhxNZjLv1<W sI)ƽnlx.ܞmi }>'gtFmiȉoxCe\,y/I0f=˧lKvT{rn411EIug;~:l)H-*\d&pޏmGϽ=.iWvzW_^Nh'YܲXoM `+]ُBmE#kp7H-ՎܭL 'rUԷxuwCAZfoMSev-sWf[i않)#U6EVRP!Ip6, qcTr4V'b\ޑsU.e2aٮS({S8j qWJ bON꛺L]ueϟ$:Ѭ{dZ>I/tc 1$!'$쑚Q6}Ix''¡3ˊ{ Snd^ߞ)oƢ݋]}]w̛W]z򜮑fi¯ pΌ?H B]?`fD ?R"ðԟO¡=H&oV xEdoW?qtwڮv^?_|NU3O?.7 `xUwpڂ$@/(頽i7_Ys u=a:Mv8]gnv8]oi)Кʥ,Euy8ruշ)ߚfl] x\(ѶFS <v 9lj^ge]ilɬm"tu]hr!@^ۄdf]MViYʈ=g=M~EoyS؍Gra*Gw\[&ڭ?_m䛸30Oj OQWawLsF\N;m܌,3\iBA?!S(ŝzG-}qgwU\㍶_t2J )vvΡj3]^њ\Eў[MtG椃ٚHӍs_X4 |Љ޶"QoLtJ#OIIb!o׫TNPm>ԋ^tB}oqrM*>xqu'.m$""oԝ}9ǎ_Fgb {ma\}#;^rRlhBy8LQLiZ3+X ,嘵LW)]s ;@"h T,oK*zs˱V#p> J.6=LxJ#?N΍fғVT"IC`~8GGJЌ@b>Mzh|߄.@VE:; $ñK;Yл+D~MFYP$Y u{Lو; 60DIS7TnHG&T] j<=jȐ?ljOsq5q?N+Y%wmyd3 gHbAKtu3`Ov׫/vNKOЉqʵd1Vu qݸ>%ٌ᭤1<xTWo`JkCz{O5% 6o &s )mb)Y~:=4)PuӣlR]ʠ[CM;.A I'QJ/ܺim5k%8,Z`a+p?[UqWS"K  0fT;{3'e`1-_5u8zӍwVʶvE=1d-ۍs? @ue+oNAQW+b @#*%c_S8C4̿xLiP_א>s%xV o}FL>JKS6)IrNfa}=54\,rN"n{76vdS.lȷ`1sH!$S||l!~\-~d"iWϔ$֪wq[By^%Wʥ&)f) ] Yvoa{`Fi2e1jߥ奸ud!aRZch>> {] Gxb<0Cew4F,ˆ[mJ岭/w4-5l߄19BŞRB`4zkzeHupk>̩=эxo?x|Rs/pTP䑝7xjenf TT~(>$?:+R$dߨOpܟܭޕ};3.Gx PF!pdkda2C{վ:sDXm>Eh}OME$ʕy*=8{-$])y G*߂egm gGʏ_.sV+exǝ4{ma=5 vMQf ύ0oV)ikA9&.vKúÅ:ɊG)|J2Ec#機#(;5@zD2U37*7)-/FGEq/pZ @2Z9 ihQl.HN`` ](8~)vfKY{mZYH%g+A>K2==d-89WpjR܉d"wu"*H9TcFB-X Lb綨V:Ul4Qƻ{Ccoj#D8}VW);M}c,vPh>iVݑlѱĖ.:%8y|@C<[v ʫ rQQq%&l5^{{`J:-rVNT "1PŞ} o5HcVudengt)DhR"+9>(?5`H -nI 5zD]xdƆG Ouڄȗw}HO/t;rxxhڅIqE-̀K^,":$ )HO`.VI;8Gd˛NI%S{Zgn1zxO*c{UB t{_8M<Ϲݑ:^\^m`YOyxUiG]Dc! I$7X1 &ᦔ! [N1 TjqB*aڎHZnjubݹ9\c'L3hmlHΤRyäKՙ;A yf!acUEl„4SgS!R"F; xT"0ah0LGn9 UYK_Φs}ϪĵhHE[pTby9N#ܔ~OנAMNW0ARK!4px*AZ("c.jA$ <)AA`~9Q7oa8/˚w{G'N u7Rmaï~H}}$ 0O^d9Ygb $%Mdďhf,i,/ܑIkBf.[n}78OJBȌ.J,7dhf|pTȮ\9~0%xo oE6}" VAzז Sx<}w2+I,̳D($kR,9HX{ bΚJL Cf,o#K`K\FS,_R Bn)8yZ*0N>`IHt>JvJ]DDWDE&'!+s- >u@WWwO;}6~,0p 7^|PNx;2l)gk^OnH"ɔ#qmzP¤WlhG(Ûܩ0 u9ԋ!A,|Fl%=Q%=Py%g8Sεc{VVuIGV 21t|I-R%]'?Pt/46*^RJ ~3@ݿ<:SYe n ~jY..o_-ٹ[ʘ9xC:g0c܎7-3$ Zs=5Xܭa[~2׊em˵q o-]Svp5"R&<SgOɬзP e7.ؠe*f_sD3} z%}k;mU.U-SU2 ww WYj<)vE (X_[W@7gklk5. C%]ϓMvTHS[ݑyntz}#5BiWP2n:*=]ڙ چ 7iTCAh&3dWMȆ"mMR ' &G{mb.M!^ţR7c.i E(xB/04\r<g&=g3;7nչ{#.O c!շ6UkZY i~'Vrs #3huͺM^K̆ypqc7J;gN: ! ^n GϐSZ6R RmlPE6ܫs|AZ#˜2Nz_1 v^By*!4cfzAkt?HC}!6]4jLkd]xqh[ˋZ, kev\E$T^9HTҢ3ZBO/y/jҽB}Od.WǴ(<7&^F>-äZֶ*'0ͪcU4@v/̐-I}gGy(ALޏ),XTYMT2Vt*6&i_K|`nB;!̗xpJ#{?D|k֙cމOV%?]4IYtaq]7}&F}oq^E]_R@UO8Xh 2tLCmDG-\{e*v1p 2l]?>HQB,~@ BoʧyG~Ǵ7>1".YsG)Фҥ)e}@" GƓz挹9$9Cpwek|Cis$Wl_ͯGF/ 2)[\Y@zL[uvv`wv F5Zf^ͱ"tHWm/ 6q1( svYY~K'م񝙵t Åy/Զ|<{L/6B<1U /,g?]F1W-#IJig+L@FU8)cjӊc#m!eR煀iF)@X*s|$%ey'uho IqcOmRV)3^bz3PV]g l5ׅQ츇t'SŒUQ8^mZ1 H deЂFajҌ"_[ccYGXG-rdnG=8A1G{Nzo6{`T-cfYm?leڙ;xsrq 0(r~C!z*AEI0Z X؝k epRrnFPzFQ8_ADCUe$gLvm'TyER2,c\S,2brMn=7lצORex.'ɡx""nѦZƘFa!9Dsv*Px;l2ݞӵg^w#1/+f:8x3A?:gQam4*glE}Q%CEQ^k]T.k@FhaO^K1<蜐ܣx=mo.#6/aM%}԰GeAP#浍Q 2mT>u6;@ZRgYyҷ!FubSc+V.ѓ4eswRV!*@>[(2;鏙i#wqa]*FMa7;m;o&jLCDӀir$%~I┱ٯ=wd篬N3t R'= `YSڤj=xclg;kJZ:P e,}ő Mr?}S)y@In0v@έ?ļɭPlJcjNӅzDޝB"fS0&q݋$^WqYo J]r-͸ἯaMel)B=2\\_FЗ8U^S~ 2%T;ᘅHx$d^+g؇JnFƊwIRM(I94}G qWdb\< lvIv8E"%hD=hFP'Yr2F}9ȇvrI9"/W_^/"WQT'6ݓ?P$l%[}Vh5Pa_z`h(1Au;5>"&$4FlTjmCJ2lَ^<]:q/fEDN NC-<4AFȀ9RD ).&#oю ؉}GXū(dq ׯil!R opPO{g VV0 fxsԃG'ZUD+!:4Tk&3?:` \2)𲖪%'~yUQS~E!Tee1Ė "P8 XN%rG] ury7?*f wksg!UBztB/ᑢӌUJN?^=PSCWr׽Tdq^*)ܬ/j<$j.q8)~dUpn mƲٖ-麢AuSVpuM@BX@\᧤v; 8(H_Orۘaו :(ָ;Q,]:';#diosg;Υ媐D2u7e't1mj5?DyCm$Yw=ola, QW1lw& 2apи?]T'Ti;[lwS⹈3Wki/GV#3B>~O?s\VZO_=_ԣ1R0edGuXDk(K&W,iz ϓ9(KbT:g@ |2Hc*<'(;K %ZֈX>+lf鋋)Uď=*t jh0٫.EVQq[$IT -OðB, XĴ5sCIÐmܮǿ(03\6.l `xlA7idB_lfh H<@(%2gK "PЌli!CkD3X'aj` RL TO<1z*ƞ'W;c<~ 5pZ. sB'؂錅<ǐLZ |S-;t@j[tڈt[R]%Y |Mz_q)>\ʳTMZЛ0F\O PQ6j1IUІ˪'&s?sD'iq8 mj"ߖ%Aʒ߲,P9A7'r4Ks`P uۮ;X_lXkUy;zkPKx:g/A͙ 8}[68in1<2weo^9OzlΓƚZB#ZXCK+f"K*ތqت9{^E~ eŶ.@~;jrU,*>"r<[<Au${xΚP6~FjyEkѷ:>_r'˃IH왔*KP+^Z\ vd;Zڧu#>7vS[f3\(L)rzsKq$7ڶk2%ߌ{}]gQ:5Ξ_\#U|(ܣ̎[} br{ {m͕/pU))@azwqoj7T?oMuŋoI2j|s_(JM30wu8' ˞&-/#m@8}[itP9G: >0-rc_.I'{r:S4$xaG#NB=Eyit'S`(c_}~Lz} e'(Z7t@x/ܥ_uؤ}\v{\E$Zy ks6E,Y iwf^ow͆ E8Y;KsknJ,|+!}#Qchkp 'v>+&Le`4P yqS`붱K:yfpW6צKt6˅nQݼzyPf6/s?nIu~3vw]p)h'H!P.Qky.x\|EVGT 2à ,K/Ej@iR4\|u'74d;{L/agWe3 \^IE_p;M,Hʟ:`DDEQ}_hNlr'[g*WN7޷rYR ,sm!hq<WklhǑWo 'p+- I,՟N4NׁvC4d$88bϯB6p/E,*TH2SwhHh*- nx́f,xH?U.G#E/uVa S{q%B~|cMͨjɏW7^|lcQ2-Qg<]%bOH!x~/=:vjd!%1(8킹 ޷+(NaC%"=p8KpP[ƻ ;$G*࡞ҙ`0AN?km#ӕnSv( [$iu.X!ր,̦xI_AM!lXc c(@C cBC 𐩎V XYĊ! Ri$GoR+^IHz>=ky&^Dbҕbe@k![bdj[򚆌 :p~;8޿e^bew1 {tũ#2 HQ`@3fxcх8ymFyEl^ &O<ǵ͙\Y;,mgQ<7&AwTLP_@+oXGg"' ^HP%ESXVP,:/+BD pp$S?ww?_k}Ȍ/Y8k,,lsh S̖#p 2j:V"Dtikqu/qW j h9cE,x5;:"aby?v6+$0fbsÀp vۙ<G3UR6rp3Yw^!Pcdm@  ̪-AR*l%kq3[TO 2@ ov6oߜӮ\ǑTsl"dL(46y8~اn3*x̟'d9ۯ]2zs _8d`rv {[7Æ,ϡCT%7LO"y[6g0J.c+{pl>Fa:";=zU֧|\˸<^iw2sHAuJ,n.oB 6%yġtj$ GKmAO#*x#y_Y[_h $kLN%y}Rv=$:8uN'YusL(gsX{a;5S;ab'?(+i"A4ke`bRY<& `ϬŸGet;ˆr+]n2D`Ǵ~Wׇn@c7:VK(*C8VRnQ A_<~?܉=ӸoA}^ʬ+cqƫeYTk8gZt\ؘ;bR G2V=kJyh;FUzP۫{ܝ*Uf5&CTep$n W: CBsw sMO$.cD@ tF=.F*ž;gN6V75Q/>޾$F5@ͬwۅ!g6śuDcpTJ  'gʰ:mDUDR ,$qaVjboLצcɣ.ݮIJ>CiߙȺ8e}_I[Ĩl*[גNtq 麬 :Raed{SJJQ鈤 N#\v9ݑ twpꎞ O,BIM*ۊ+HB##*ϗ4b_c<ԙHDBi@Iz;S#/+~M{ٱZYzʹ+<2JEO0Hj\:#ꖾrUG{S(^$"2QNɨ,ϳ_`0f%+N3uyA\7Owr߿rg>;1{s{ 7.Q&pŏ4O#U~\Bv-ZO'vFP{*BS8TL쫌uxo>3Ip2┏aYHFP#w  }8)殐:3ZʽvEC5n<_ >G7lpWKb-j{w@h]W>5VO~Nh5 +[pX/FbM^h8] 7!(/}oo/xOKbCEϑa=`W4IʯV*Fϔ4Ֆf88@[BTQ/ kD C`/GDSs wD@]TR$ _7UT2ctff_c,[,89(B@,FX0&-@ĩaO]gQ92@N J2_%MMˇb#w %! . ɼ鮔hKaSny<PF8jYhU1;K9pYu#W!ѻ@lƾnFw)y%S1kZo{[ '-LS`\;ZhWߠJ5wX;m}}oMiD`4c_9.h-:|?lL?zHlʂ8jZGѱ 鲵y<1Y'}4| ~"ZWt^:ū[qsjp5G0ŧ+Ij'o?|Jr!& . b,Ǹ}R'x<"Ź ^M/H8ʶ p&l) 7 %ryizvM(-~ɟ Q`+ Г? 4 Ֆ-@4NJҠdpq)j*`ɩ=z;[|3+٭Qͣ 6*6~7C:>W~63]PdAf,E4!K$0_ xbȂXZw4CToƫå'ӓb*"%?8ADHFF/{0ivfn-zh49]eT/CCDV32$Vb,/mNWY=1uS8ꃪ [c~#)KedHH]C?E/F'qO76}G{?^ һNwl8c(}B)Rx -/48XP9qPqjYC?k£P*aٷmg8;pji%dş~N.EZۼ 9|n9;M:,n pRJ2%5]2}X{tQ2Gn+Z J9f #Ŗ* =}8c|:շDM-h(H<[CrE-q:"|mp%wHǡHtUFPBQ^yiC1 u7o9}z#;b/Hu &Mc~ƒEp#`qa NaKxBư\ios&&0O'EyKf,;N<G~id٬Az cmQ$|ylp%j`gqv_$XAOl3m·.AB=PͫO.`OO2W%#@졸!$ULFC6Zj/=P'}1_ӿuy?vng}t.Xu'kCg$"0q$9⨔S IWq{Y6崿d#8lt}`<[EۛvET<u\Yэ{]̲& S_ \HEYC"7f 桞8v#9-R KN l-9406Px;yc+tW[%iWIPd.&ǑԦt2T :/z`opJzHG3!*'$YW̠OXB6qxGf=cڬpo/Mf<{=H ^^>{+g T`$,#yz+ηLW ~oEΦ{"\JDe] vd}iKn)r*ۭ 3=Fv-2_/!JA@ӆ'Wkbf=bS +Rf^oS@ɩ6Lo/A_jDK R˽$Ȱʉ?Y8ZH!8!8(G1;{Ϲp=-/!IFsi9)?6\,ޤaw,LIhs+<] 8Rn5Y K4@e\1hڏ;GGY dŁ/lz+ Ys$T#< ,wQI`˵ɽ/,+rO6і,棅8Rբn#NP#^%|B¹u ZN8i' Y}A-D5RDjgCBg # ~ _n$nŨˮN$VQ- X*%lteŁrj$1J7c Շ"q Y'x)1 h솤|Z2pkeX uUMCB MRAa+ $}zK)v9/n?O ] Xl4 }EK FwK[HP ă Fpl  }1ޜvAR9h4g߱I '{ ^~6#񱡕|KN] iTxSƵ^o\ؑ=z{AT8x(Ɠ\=" <"և ǫe:_iH*}W=wP25kIQB=O]b CSǫ vFe䓴!Pn2;~JnV6,"MfY}gn4^sVpJ{?켉7ZFp3xʾ@D[Āv;9 WfQPcV%Y53`@_9Pb4G0|w˰ H}iq?HnrP$(M^%GvW+$2P~=?'("'DL(BJBwA'NVH.,I^Ts3V9}C&O:O)9.3FZ8[lÐ˷oScHi C;I Pղ{$(8\!/->7f^yIFRoUNAT)$~tӧ㫿&X,*&-_%ȕP\;mU$^% ƿʬOW:_дi$HR) :Ҙ=w~W+X}\Ԕ\YfWLX"nhEƢy{3[j谎g.7 O Ml MkO᠆{.Wps5k{x7.lV(hi>tNhRa}?_"m)!{bu/&P-~p$ȁ\g$:c1MQ 3$wOP`4)-ugɃʐ"?|Uʼs:Bȯ4h>Pk!)fxiZa4yXcPΏ[ I4I㷈 m/GK>|?*TE%UzˁRz&؜N=]ݽZ6n|IHLyD msuTQP/-OUNptӰ`TGSP"q>gF|D%C&TH,Askw,5wnLݍ|6Dq;{3-n ][W_+2޴tcS7Kl{|ro}o3\SK{$C;S4Xn ޱc3i^_8PQ1|>[VN괅J3J NZ4y6K>6x2dL2.^7g-@tC_"GߓOO Ͱ,uq)VM |u1@zTQxfFdJ#`3jcr$a- EE=*?%}FK`Dj Ŏ5=\IߺʆtڴKIH£s9;)F@JMnYH(赢4fΚ<\@N6kddeTC7k,%'ՁK1`-Cs9eP89-Xo+86mYdNs%N =m=B!p_~앋G ^5ex2-q"|=8͎q73Yi>!S ?4Css TY;po8=v-*p(rߜId WBP(.]%PT!#K2HD =n@RTf"f% %L /NhQn/1D+3csߓ!9Ծ@~'J2dvS _jvy Fգ*qM\Cu=:=+bGN6ao {̦0y8N?>v]~[G}VLƧ[YCR*X™d=0$Aڰ ?yWe4!ʀeR[LyKWKH]98~;K8?VHc;Pyhswyć] )$ds8"R?ix_cn,sNaXcxp }]; 5.r+7P;( 񰌊DYI;%*;ެէ*ҏ|/ ryv:Ip|WQGb: 8<7VR,EW>5ыdQt;X *#K~LanNCT#I%~3:I [g c c1 #iQb mA9,l*l1jKSH~6Nⳙ-[yn?K°+P7W@N?$? ؗ}ͻ]PVb4?xb?Md:c|B/aOIc.Io"$O bJΟbܢmixV*G9?mᡅD!A6Y _ J^Hdx"@YEc< "u14:u|T{mW/~ʶd=aO𥺦;bd$:6!`{'*pL]{@gH|l ;kNs.mOZf&LF'kxmb^mӆ& .%0tۺ¹w,9يh%} dTw=f^,Q="0%19m(Hk2'Y,]#w,V࿃RVEY Ǜ|c=XۗwzЄ`Փ{|W!@~A),?*EuVje@@T0"EN+#ofv#dEQh:l9IT"0X\Ӈ;"FPXG m9'_,LK@:=o'/ DŽfx4o~N@N;'&};C!RSVlǠK!0 .]|v3ߟ&J(d$߸Ss_0ِhC7 rEOUg<#`-Ms \UGĂTUMVʑ_yV&Erp肅# !]~LHO\j0ضVU}){pܼ}Myz j1]Wp Sgnnc2.z 萴ɱ*E0>T35@m [6LC :2vЏIFEV\Qr3#sP_6#2~WE?aﵬ8u Qf y, @Љ'gev@&sӌBA]'J󸿭JG~nwl4#CXݙA7?c6J>ZݜbμIIbn,taW]=qԃK=8==pJ͸YJHۗ|MG.}+5@wkI3T;(v^hDxb(nX=:-&`fs&7<|1ncX͘y8'n%wzS y3xqmspIG @͡S}(|ޜIx6l4PZ/\8>;x?5 z .OG` `:9O1%d_:ѥabcϵ߭ d=7 {䮘1!C5Q/dkpsI4*ڜOULέiLAOYQU|$;B)ʬ"#ІKbZٿ7@BkCLKpcH >.ooiwk{)J}"aNb@<4w_@eq#G6"LAD#dY&Z=u.R[L9~j8?7l1(ؘ,;b.+JtzZl˖?]urb'SW.:񕪢5" %*9ekx䛙~6(.=} 1({N*\һ^%?]񴝂I*XDv7ζKukmӥ]?bU6yl NN `d"*(JU %ONp#Z ġRp"m DovF-VݘpO7r7 1E(D^e`}\-D6mDY aNԗ)NS>;h DD TQ?Rd2 7Qȱ9bZF"q0Ơc -ힶ(6ݗ5WE*a*k֭ Vh냮=%M_]ޤs9qyY!iSP>cǤWU襸'WоVĶΠj(2Y0ymxaNq;c^pO=^nIJ{V>(~׉{:ۜї>#{JE@*ᶯS deS1v8,=?HwoL.W_~:ħ)[Q赋%ckxj.5#]POҘ1S-iWn#ĩS"+zy"#W2[x4Ge@7S8G!;Gؚf17,=Njz@YxEhةгgmkÛ7Յ#R2_V{8ϼG'FWcly,eӈʼnYfAQ8Ā᰺=R8evZ8׀?ǺdBK ´k8΍R'y_;2e@ޛ D:R;2i;wb8+Ds" 7~nFib(9dj$ᘄɒj-̩.58^?njܷ7[[NjkE3"DiH݆ߗ" gW'p;d o+z'ejA&.$hl'CY~-Ha]t2⍘w 漒CDCu?_Q(clDNU{^KM4`@ qq߅y ͹VISvz-9@_}qDU5ǎxSs[@ҍi\VJxb51+RjovC=7ceWJ#ڭ&j$$&yD![5ש~؞Ѥ8w\HG¶򠋜ӵ(05Qc5Gre ! FKi\y2Քuڱ:,^@w!HBQ,3J*7܆!vcf~iWX6U1(Hi !7K\WUоrkFZP2hK Pv~ױIKEx:tmDr.΁)l>W*ghl`z?}ܫ+:3#]i:4]Pi{tZmKї qR+sXy7PC'7LHXb`p-6ny<î{G$*4Z`8/jfp,Q&oKt ωgJ*<ؔ&JD)+l2B;$8,jR7MT>.o38 e%?4b, M ;P K4qXhɃ?zﶜ; .@6t6fT.!A;;T%D}W-W gMiKS:é_ Q M)`dȂ(Rwmy^O{b]S&i;Oh\1vL6".ǴG[@@`1 5d)s}(z.VJat^tZf؏\>`9RV/Q#2JrY"C2iK'4Ӵ0O4em}˜:ڐa/wcHh)/p,Эll\~|1f2"pSt| ,;$Y*TOVKcѠ+#j%fvJ' WѰ:! f/i_5xZOz5!Fᴼo湽1ۋ[;IEb4JR1@3 ;J`7z]ÓW4M3@_iB{U̳mO WeŢhsy`wWPgQ yyN`qL5|ylp/3ݖ1A4~%̵paZ3y>(hG(R={%xi`gPb&iE(~n002q(BDkx}qEKKbe[ "O=$<ߞlItp@jȬ\W|N)$?IS?2}\SuloE.˅]lCۋV#$apCm"Nf,G4BBUt3^.1tw76`D){O萝_͵=N/xLz4PqI7I:SMv$%>sQ*& BZfels9)hR\.*n;_&{K8u9czPZ^\[z"5|bLiJG\FL-G+Wݻu!$Eħ54wv6YiU20Q(Rd%>}x&,E 1tKv(mq͢H5u [ody8W ?U H2;q DKy ;mK]P$9dNKѕ[ui{ AG,("-7c|yد. ֿ~Qt4s?+ǍkRPNdr <6-mޥtTOW#7!ض*|yswabTP> T ƹԊ.%}aFr+n42 ӋXD=ay]=}ƀ_sZZ\<=Tn._E:Fx9@:Q'!5kI`lmrA_s|Ma4jj?[A[p\C5k )t4k!-ҊKD=$%2j߿XaAc8AxR=0 glH?]@d8"R)mr HNsaU*@ŝs$Xw)G;kc ,D(37"p~HMe..aԇhKb$K5 vf8}h~Qûdsl?Š@S r#!hq"0Ts(p3pgUzH𬗯M~IC-s7^-#CD_BȡL5k;nA_pT~LAѬ`gt:!v'w)YxEJ ]{0e<8O.J$Yߺ!>T}pS1+Y!;?1"l?_5]k@B\:zWrHcW/ "PޥIE@h2|H4pΣ7)Hy\zˤ'Ȗ9<6lfRx%DMם<8Xe>x{cw xZ8⤹G7yn,5;K=ӑݵfXcA߭7#ץ'ۄBGױA/5C)6$"<㿚7&t/7I_H$ `FqT B cpDIX:'rழiRzS}k/8|\>\E%RɉVgsmopq".D8x킻_0q;4ڭBv*;hw*wZ}tYX&UiU%?$}?cT\>1Cie$ *mL5u%OC'sJ| AB,`D8ixcji^UbA1LaAE56,6'R.O̖FsU{{fS !6#pκ9mх5 'i _*ĥ E NqE=Se(559-keԖ87ZEl# )p?/qģBF>( ^j-9x=%\*XU[Άt #?(~a <)(LW`Av+˙ %&Aڻoݕ!0W8pfF&rAe);Ӳjb bZ2X&D,L59#YhShSelOgX|0㳃O>-y8h|7~Y6qE~(~v÷}2 !5ۃUVFsGfv4.%$Ww~ʽ+vdt.G'0EvU ҍ%GxU3gQLt)Tb09El*,R!ef"z)u:<m~ pra#p,PPb" (ddKfN7f_  jH}gDh DETtHϣBN8/*=w0YbxH݋__ w@JӫvPxV@L^gWAYCe9gӪH 'GO}'tk4ZBA|#k3nB- +[ǣbi0p꼽m?hGש}%]Uk4(*bYlm@@ dA2ժz}ה0|ٽNaEA 9h"NV4J̸W Ք0"XY34W.fluZ6yƥ,εұ1jofF3}"b24'&$$)WCրdNTX?TR:x t}x(^QfovH\>hPF*g.U ]<ϽS;އtXNObl=GS!"؎|-< 9竳ڨbL>&8cOsHm{bsN;3 C0j̔}\ÑdrS9P!2o>FܥFdxt\dbhN˖`NxilO pN\#Aт( +|5AfiX?$ipDQS<uzUoHlWp̹KLdȡzHbːڭ5;B8k9XОVC(/ѱsݜ.]`F3F|џJq$ƲִЗcxaD _hVOP\^%7-З[hnlΊgͮ{ ;/|<_048:x}9FBM5#< ϳ*"ӜMC X;HͲp3 NS,nݑBDqbs_o⅑h-%ƹǛ͚=ue>9GqkEYN f%/`5Ke0 6} hx4TZb »^ɌR8+۪Xx r/#0FtK[a_Dv@e7tgTI8`ś3@i 0>iYG6~aX@ Cؠ ᥀lWUmam?ygu`}W|n%DZIs 3n U8nny\ǕcΧl/.^*7greW !YV趧 qe} C (÷a4Q˸0N"a49xY{zXX`.\j)X=ib&X;%(dIqaw^dVENwePx忨eqʫBzx)^ 9NȯLW4/w=$F  -pa1^>#`KBsFkR/HZ ]9f);}^d%ȀG7^}act{|6*.R4X$;RN*.3M ة64N@ Ec1tOW9 =꺻K^y4]XlFMF?Q!v@j@!?7>Rxt>aqvBQ|(V3GqE5l@թL-Z;'}YJ7:ښ")6.xݓgXx{C{5_.ZqP4oR96||\VE leˋz>|fHfӪ>oJ)_./AY})?׾YR>*ٮNT¸.^vF,:];쇝v H"xX_ey8HVz?-dhwp"i JN,[$/RP 1!<)!GTb.`Le&ox8ytȴWzH#[ɬx?nQ6+9"$Lԯni֔Um *ϳDmE-1w˖ }DK:tZrȭ'B& h!+]AF°ߋ,pk;QЋ% n{nJ|gƮQtrgOu(8/_pwΜ6PŪB lj  Io/6ߌv䠀U;VmLJSmi:5A>ר>G|%^["m$wS&rßDR,ֈ-k3F0kOe&SX\[pC@X&l\'P.iiFT+K@Jϧ2&maU&5Oh(PȫJ5UJV<.KK*<(>)Jՠhڋ9"hb@ʒu8jS`/#~ C`m^µu9vJ_N確E7 E=oE#vI[1ߔ VkŚcYZȰ&(\x5e/g<\sO?vwS]G^ +e+ؼ`5efkhšY$;ޣJ;8UЦJ(9Zti{U$Oxܻ.Џ/,I1"hC" /t2ֵ{K~qv:Xgj,!;u4v.$3(,,ؐA9 uiB~:#>&x_"*bw $|[GFvoS\G(Y9ohP.btDŽj2x]✢0aRyh$/hkQ*y\d5bH"WVi ̏^\?A1T X'Rq1x ;|Qt. DRZ\NE t勧aSj0{< xl蒥< 6~B.U]??'W[/WfW[|^_tvSO;Wc߫l%bgOv9g콱!$Ҽ*hIa{0WH  mx !Ř}ZbNZ=a9 )p;7w1Kq}oo ˱KY,ܺMO&kGS? VG8byfopTnM|9]}swIcH` DW1ynf󮱊E@6]|Sw.KaL:hJ0NfMiMh(,?nfxGJ#sOn4l$d<nP"G<O8CD_Ug%Ge3/M+:T>Hh Յ0v<(}ny/ 7ʣ:.ΖaY*^z[ֺbU~M83ۈ>&dtNZا'XAVMڋ'=/a'mǽ,x;*;iKyeu#9=f47t5|cʝ*WDԏ N!v@*LY&WyDH!PF1@PE{b2j͐>˰ 5ˈ{ 9bzӮ4rod7lrB|QInb!ϥ\L);һ˄jMgKl)EXYݾ\Dh "|X{QfxKV>J``tU*\Wc'lMo},HJH.=Ϯ\ u6=]D6 D@A_q%nM%Au>Ulq9ړzI)wslEYqn5ǪA!qsX9>jAc?"@V^nM饢6w,&!j%'a8lK-y0:<4% DR :S?RaG5bۉ'g<%ÉfJQqZ~o[ X"L^f_3@"+Vy0vNh%X<دy M 7؇ωG#Z<3[00_n!(9ahC2?MN8%1h!"e蜂L=c~hSK*(wJZ](a}Ogo暐oP,Hn^Y0WaRDAw]R xF{@k|mF wE0iVBk= ODyl-V~zۧs+?m}_$NEƟ0hK dDVRhm)AV&&8pTY{Og!"[3^'HWd[pI U/"Ŝk-5Ez}_7@{ߖnHyBs\ZJ6Xbػ+Sp7A) Sv3\zyrΚP7КrIs}*kGo oY}M> 6gbejZ| OGLU8ĭ xQcό J%m[6dl͜$C ,+So_}D0VjAهbuz 7֍qmD5$W|d4xRG|’ "4^}Rv9:i?aOC@e>4 =P3mn-г[gn>Oc{e=g.B~}yJ̞;'<<|>ǥ=2 6⡇'yxpaiz$C2\˼N6},"+"ΏLx$}8$E?WU>}s7 _BSdE@]qQ@J_:1)? ;?gBz;HuCt~a9h9a֊{}Eo8?!NF$NBVIjdk5$\5tm럜H `Vge#,$D뗱|/te~_F?٠$9ۑ3cOzI^5bu:M)GHP}SOm$OVD~IP4.OMܶya6,UJ;Nav$6%9,V)X.4RǧovླĆ6uawIYئzj;DX([zP X\/pG/hzăl & Rwt@w.~ :_Hx@>cG1N@lΪX\M$ms)nS7 w_G d V7=D4ÇHEHH>lnG=Vch͹$fp} F;uN욡Dj-YLI+Sm\6,^i @,J 蚫lͰE钀f=(d˔u S;X=x{Hr\g<;؄P>/v~gZrkD_37}G X0$A?λUZ='>E*U 3sY+A=%w^3¬I'G+mKE"R$OP$5IH{5Qs5,WJG72?v6c. w88GJt璽Vvk? ^r_y_}[xṾޗukOsEMixuY]aA yQPXj8op_~āv)T1<5nI:^ЋO7Oʊ<'k;TB9DP2h5|DPGEEƍ(?V7,qo#iP7+(n[÷ ܯP)8H:Pm;0줛{wRkN(t,ߴoB@%|kS2;Mg1&r&*Q;(@dh=UP5\3`|&1!Qm1UXe\E .*f@.Z`E1F#J.k>Tf1-c:i+>u{bׅ\yt3o|ʱ:?ĢIIya*({%JJ Dj:| 8!BVkf ΍܎9NBD _1z+]ȼ|dX 2Bi_n~tQ.གྷa闺8d]&IC5ƞw"|k PFOMc.dع[u#;̜Eg8e#_5ꋷ>zuu5V]׬7 f\GB2^ԌObt2uq[R҉yWVw[1ubGLFDV(?6gLLtf$['*a^쑠_ۻ$K憯5wƚ+̓U@-ᕄ̙0FFiBt +9aFM$cs!zh)xWimCz:+,@ŁZ"* %Wo:jUSũ^/a,x^D1j}z\޷}n:B\iz1t0.zÄ۲ֽ7=fPBM%x?%pvI<#k%SU(Hזl"xYLTN@Q @QTiWiIR;ĉBjְ["-y-s*ҏA0L*0e߮1{aޜyyd?K:^<$@qF`ހw²?(ILv,BMI8SƋ8[VjYfr5a -Kae]IėԦfNaYXt?4k3?*5;F%6/~$D?7~tO\)d;ܒ_ѹYgG=m;Q3jLNjE(oH< zRU RؿE4/S!CQH)xN`<l7B/w@? %ر%Xs\8whg-i‰_02ߡ%P0=1 ~`p&") ڐ$EiP"/>}G}JjHHW8\UGmJe, <5wd/$uggW7qſFns1=EEl m7`d/GC+֯{4:{fu:MEH)}b7(61S׎BuԸirڶ"LK6~Gy\.{\rb|{LOY޹6'vXj2+ T2"Ǚݛ)Mi,:nZ&fqr&,AOB_/'YEٴ_&y~ދjjMKGtnw82Br{#KB.qBAELxNt|}/Yzz+oG[;Q=fyáU9[@{W֟JZ}2wvwKt,d,ÔjyG ('Ü9_CW,d 2ƛ%6bjimjk$Mz8;mYҦ,LƗ1P6k|cC˱z_[k+?^/^XSVMȠ/Zj:̵ў {U 637)jUzzw z37!lvM85i߳,JBޒƪܟW8|[-ɏ0 4=~4?W+Mwj,MNR7AP_. '~޿ڜxaӳ!T<(1UCo1u1vHz;+cd sM.a;~?[=-/Lɗ9%^} iaF0pYZ|E k4dt 4"sq)q<nO(a!熭9iAg(JH:y+u߀fȷ2 .4:}ܝgdޏ2*.? uW]4'guuz6JiAjIh6LƻN~(4@zxyV/u׋vjND|BDZz b_֎͘@ߙ_8EE&%7 }&$ 4Ƨ:ՂTp\vHE 8(I@7Op1/^ ])HfBNa<T*崯u:DI?l9.A}2hR}7I:|.)Dsߡaq\Ꜿ~fs? _Q?Jn\&b d?R}X:Ńs5c8&=^8J䴽c$BJ,RUHh^O*l52A9ahzKb&~ıg,7ʿBo6#9 $, FOVV|L^iCQ  .خ;>Bx~mP#;φ&09 H?dPJLr% 8.PčxQ97UT_ Mw?͏VilV-3JK%Oy2vMh|YT(@4YZ);z"=>y ؽDP"Ȳ:@0R\ifo5f1ޥ<9 yK='2?E5!"x9 5S k^CL|Q1rT\4K@A \FXE|@:MfM-wu|XlsHzaa7Ƞ(;eH?[0x5p/.RPЫ Cdơ~WTs)Ι]El.j]zQK}.;Y̾_ ^! MgEް’!I"KJ.>E~ts,\ ǽ)n h@:s4Ԃ'[z)۞,1ܾ5ض%Y'2ۘlaEu,4ͣc_3c=<7e4J8 Q$&!).NSE%Nz} +Vvނ4 A@7_7(9j}*Yut&ۨ :m/g ~-Uz0:~74CfۯvJ}]{Αk: ;B'^QKM كp+LhP1VS9?OLGPN1/Ϝ @=l(&.ɱuA? Lyƭ}f3X+1 )y Ʒ{ɓl7i:׫")ѯ &o69n{/+`΄v@Wv`t?LҊdIq#SWc?w+y{֎aʯX{t3MBNT 3}jkLXwT.fɳ WWfX%&1ᢱon͔=JPc@isM}Ms >0Z`wS{'po}w Dr{m.<0ș<$[r%4 Q% v{~YBO|> o' F-++vs S'%*XkwV^nfjIM&]L65(މKw+;vE;5wy*o7̤j;½cIV|H#aM"EWȍuz)bFWoprHCݭ3ҁS!vt{moE-ʁTR !lջ)F~DolTbN" "n,D"$ʶ9p[*oC Y= 2uXKφH3V (C (bHQbQH0^£K GЀN!0 2<>n;j`UEFYx^P |p޹ aW7 q>URAߑRU'yXCB1$N `\_ct]\ f>5vyc0e^[9/~m!{O ,%WG˳o$|e0,j 1dq4#°&u" ưwIXh@HAFI`$K"/pǰݟQ7f٦nC/}a׋%Fvr0P>l<\tnF bN~w:PJšvlH(^m7YFdAyr0~?Ep#>qg>_@ߌ;1 z?%d\S~L )g`i˩hc|wԔ5&wmbEꕥ2 ΐ(6cy/GOp@KU:-KN:irVCgFvD]pctw`jQ%H*z=F4zCm7m6|(w.4̞ڲywzs]:g]Wc-h&u*aO#^qE\Qy5yxyjҕMa/ <0dnv'`Ɓ]RF_VpR7>hYg c7OI[okVҶ]?gJ؋~P%M<JJo24R*kkxuLHwb*%1Zk*xcDk2&^\vuL 9m6$'5a}S@U]:i!I'{LPbiPYW^21g_'Gޢ1]= N$!X:P|hU?ၦO1oa bDurʉͬޟ`Q9Ys+Cr1y 1Moܮzx.!Jɹ=͊?~mka0:w][QF?/7n|TLj AxDqH0+,JAhHX-[P |b]D(h`vKA19n)d^8J}([I6. {ncICy7Z2Az n3 $M1K8}^F#Oats_r\ ZB7D= Zʩ"KF J뿭pxi,TQG+MM91MrPӤ %IE2US+Wg}-Y@UӲ}+Xxqus6Q e.Tؚ<^D2KH78Iڈwo )OUkiw@`Ю:ou_'ba̯L>6@͝_7DAILw V#d\lx 3DȕBN ^)'hyQg)ڵkn>}d=.`k^WՋ"NZEr5)r &T!TT\u"z+ ᙇZ,22fJZV~0Yq"YMףOr|xnݻH:/)o /W{Q6lE0EOr(`c{fw J71W !D&H L"eB*|wtr)d eq0|YR%o$jZ]-*7j<YX%)y9oԫpEǪ(9Jc1G $gqEIrLP>uH]NA|/ɹUOqH)t &b*W(!xN %P%*>н.h&OB]30{KH ..}u 3. LLa#"x ٫@[V̇z-"]Vt^HO?m/0e4!h}ErJ= aRWy45R;%h?(\IH}%Vdy=o.ljYQ|Lz)GI eLo4Ѯ^6%}\p@^8%*>~=6eQa Ej!EQJE]py>hekrep;ݎc9D ff*φ-4 hT"9CgtYbZo{Őe;S.$.4CuzX3),0~GƲYJ5o\3B%]b<`Ž 9N>)?m5W7K Knuߗm2Eyf3?8 !#\)* ir%=;_xܵ"\SXaV@ ז%:b Vr)3b%%q@ȳHiQH Kc-]w:v:FWqq~˯rm{?p8N@Ȃx=b .ޙ fw(2_]BvwcEJǼ’6Yq^V5!r|헍QS!>S/PȇP|!M}@ |rݸ m|u%t&H++sp9z( TEw:23u_W=M KGf H#j1s? 0̘!b9)PdDP?m|6u3'I_3ZcO nwۋ_61gX:΍kTצ~*ըd25$^p![烮g ⡲xs{+15:8^sfet& 3I8NzhW:_33m"O9"A#6+E3/I2mkݗX׈(oB{> xn-L ͓2P-EN;`8p1Ws+@ 紅-[Bd9hI )HWuxnd+=QT|P&?,2+зynt͍i}\F0ss:iDhDzeocn|{N:DG0WY!2qB bRp'fOwqp4I,'U88)hMFOO;D-A_\r%8nИ18?Fپ(`E%d>.dv㿥Bo[W;SX2/Lt |_i[_PfCnV(NEU@& ~d(@W%${UR4(E#/CrjBLŠEݚH]fBNoD(Wͦ/SME e3c-:&l{w#ͪ0-+=OWu:^ 닅e1.+=6,v؈Iݍ7xW &c9u=+ Cdq{uԨ^U9gnjlniلSnjK9$*IqtzQb 54uLI1nl "b,z $V܊DS-E+_2m"MmRp`sT1-9%4oζJ֦~mYiE-/OF" LcqkR:t1?)Q$F4y`6wI_$&+@ Q_9.;@]EbEƍ7B[7rfQgJ%vN"q-gXѼ0Sbwy8* Mp]f飣w p\ k :=cJNAN).w|HV5 K #Qm5E` 1z (1Pٱ˪^1V-^PuΙ9#xOKޠW˞X9F"ߝij;ea4*̺ncC1FD$I&,ˤjīH,Ѵ%cj#ۉ}26U_XV|xV7lb|㫪*ޭx"yvx6a⃯|vjߎ J-lׅ']x}zbӧ kىh~g")\n=Ƈft(%hǩ/c7S OQAxL/ C}h#wG3ϿmRCvn˥7eȭ'YPz[̡Ag;B5| v|۠;*Vƚ\̋ȴתQw,3,z'J^M3{kwѥz6 lmep91ʃsNƽӖ3 Z9!o>pH.2Q٣D%Rcْ&H-plipA%oH")΄5kb{a9ɡ8 k?gV<2KQFPDBNXgv6'1~+1r F֖v|}BP .L=3ymo̯{.'$hE$#<v7/(|$Z y] 1اnvtnsp!(erL T+v{<|Nj^.MN&i4^s0oBT:PG^Y=-QNL%d^B2܅AqAZTqSD 2(T @]>A)qL|֧pqW00:mCq#۠~m5T宂yU "PhwErnHnvffu9k;۽)19{i0P.)ҏ /JXdIE CfVGa Z(͠Rڢz=\O(Cޏ"2yC.vk yn\ikǾ?y>jx>Գ+ P.W `D:rkZ*ѺrQVsۣ?#i'š? {E0gE#p8PKp޶Ɉ]/{̈8’8ȷaZ1Z`ln'O+)M*`mnL6^1E0So>[oŞ;nޑltDt$(G0֛뻾'3E#_"4v ѕtnC!63 à I3WWTI0)!{r]0]_ Xjȅ]yٝw6͐ҁpUus\hKKt'xwӚw["mȽKzEL{X%:Os5%j9?zW4+9I :yג8EgtEY?\v; i7#]$wpCn`x?1+H<,[,Ok55@N/'O'8m=dW0yqo8@;/-)[g#-,՛-s/8$*~zff?E -0/Ñ_(Qm /t{v4SRf/J PHr$!Q&)7~Cx*Z`lVn+!>Ko)||6 G%EJ, QDҷʮ #|'m E sv2so' LJ/C}'tiIJf~Os;4a:ͺOs>7@ÆVSJ9f?.`c@X;-2"_>5ڧ"pX=K$$L-N2F[pG#bQt!C.3I(_sMJ}dnNOa8'$+ 71;1I.? 7ขE!+)=1~ƒ)ϓ8AȧǷYUP'߄ω¢B.}EpgF?pbf>^?ʊx?.L%yato` @/iJ$[@`X שּׂ檝 @S6`"JH=͊{ͭc;EGJ 5ˣȭJk̉ٵd5|w3LfsP'tϿ5v'$K%?iب/a>n…_..65= wp(/+4n'EOlj2#˗T>ٸ %TVlg?#E<":5DkeTay(<&[Ё(ۘP8wi^3n;*d'mgx)lj*kv[dv{"Lw^2 rhۂ`]1=[2v%58f_BvWXsr-1naX?N$i_ BDž⼟?i6i~vǵQ3 D-h%zO28w`;XSjƩmr`\Sv}/UC,qY7j4S:p綍o0~5[U丢n_Ȁ}'HiT=Ĉ@y4Ѡ70&xCF3< ߑ2S&C>cPz7}g8*d[ ~܂!i *auº4ERTs8ΙxlfVRC< h@8DLSG$Siy&2{MΖL1Gͱ%냇\(!GrmTـXyCOYM{J!r~i: qU`$@?Jg ͼXFo_UwnF`Yȿ9vA`'7bJ 6noHpL<fNXs ?~Z|B @Q>P;߈? nR &ϙ!bg6B'?H+`Sq=7d\fؙ/ّá^Kel6p7Бcc .P?"q2IJi0z:?Su:&|DW01v !]qJDN}<0d'1I%QpuɆug,p_QDo1cHR23#~}L֮R*nc-lU| 4Gs jADAz&>|F 3@5ʂHopM*Rh'aCh![FoYrB[%`;mݙ[E;ٺu쵼Ba?C>fMmJ'|翼~܈0wa==Wy'5qo .qf \2>3I2&/5{O*? 2.P5rb5.6!~ +LN(ؓ.ewb }dXv;+/^-&ލ]xU:FP~gY x8^V -Zϊt"̔ux<ŻR06t斢Hq$^m8 s֓(&E)wʎ4z Ԩpf+~YXXo(*LHt3z|, uԧ @8IPgIISBيo|VI93GuNWԥ1U9ng /oJB¬؏Hhju pCJpc :F1#CryS8  SI{iյ(esj.D漄 Tz|%#xi 1ߛ!Nӽg}-I ˽ޯ##eMk)v˚D(6 yDՠ&aTďY22ig`+3jd 4jQޯ0$XzE;ɔcaAz""oE5'qfgG͐nj5r sw[H @T&:K+" @J%'f.{}~w+ nE+y`* n-}h>Q & 4I2ݑ,|tSz4-oh) qtAUp\## zq R44Z" 2AC$ű*jp<+) b! 3c+`L\褄jzWd틍;g!Sm1E.{:5~=r3Dv&jsEڸX4 mR}&}#s~!qX#qX=]}a}"b*)A&Je]`9h^ːq7|d6'? EQ.&GH%9[b#"ٔTљ>ocd<_mU[8_iҩiohVu\SR5$-PJK4ߎ^Fȗ!7"/0 vMWAWWa ghߥM=&p=KhnxkHo7NzO5Q4N? kW@Zb63C, X%H&Yy,vv잛|qztt5rhH bu]W!FXu/gIDKQ2T, *rx;dԃK-I|^BɼYDjy QY:X((Ma>/9q5V3ckis ַnBz7=ch)' 3B4 :gv գ~p?)2T_;\$SLT3!dAҺٖxu !C KQޏ([qAI, 5mJˤ=m+o濆{tP/.!!l"Ҕmg+/x CL{Vg&,$bH3=zi2`OE&V`h6t@0~Bw`a4* &%gpOW#J\4 ڢ\YLqdY r͋(8=IC/DLWOҮ"-\JSi4}7˖;$ v0ӧQeD?Hx3бKK I!F7DuC^tMQ`u*yymi<jmrpOxg\6tza9ΑUa$5b)ٿMr"P_fa-b |=rOƏeKh{$}bRJ2u;&&&^{zQ;13HBٵ=wc>-Ċ>޾g<Bx(_&.%1#*OM+Qu7jcޛ8@fv`5CM%W1'MAֹI+I^9p`qPԾ\2qg-xk^]dJ'>fcWmm'QN؄5w:g5͛ڊ\Vq#Cή.y)<ˊH<૽Ӊ>-g?dԳ+|YMs>y *U6tGYO0{]yg<ܮ`ݗZo ^ /6t%hq)Tc yʖb0-M;8hO<,Aw6K ,ƃ SR] (Fݗl_pD!s|H% :9 cO&h_ ,uQ]xuJ͊Oώ|ϕ LS%DS+ zJq4ߢ]_+]߉dԐcP'Ӟ79KDld/~8h\ecqmT: Y.u~S}c"c O5["3ГGe)EOL5\nBꆒȇ}oX4yx/B 6ok'lb}<ڙc'S/bqz5M!D6)% װ:l*WϕbkJ r+dUZo].'-@rg1C ..[p{]ʉq}һ3٬`"ުJP |eh2.Ky\X,#{{E> DmQTK>lsy 4%_^ţ4S)Ӿk_u?zޤ{OOPeIKW yv惀'lh)goXu8G7/xsГOo6+6lrT ӧ\Xgy9K=GSZia%`pdLH=1hlV̔Ri+f޷ܞ7y!l~JVˢ0 jf2y2G*_UwdR{ {V¶w;pSGjSO^6դGu 爫/bҠv/\W:4)aѷܯ%S3)m~z%>C-3Va&y%&m<r»@.bsE5u!R]Ԉy#y#S\Jp|͎ލ:ɑ_%2ا4MVM{J]SX(^ ލHobם1%ǃ;mu8'?5|KP+U- y51 KpyǮvXb ה$S7) c"55S?QՒf4 ?xG9\t6gD#gSOD֫ppo46zʼ2FF_ 5c! ƺU'P0ǝ>*{D,R]98K#f.Cxp+~m;ali3[chG`yV#uxUWi|$`ix#Vy<;L9i&E"Ckx>Fa!{)&>)Fљ: rlhLQZyϿV C% ˙}   XԺq;(bp5BʨO3Hgf*O)w_2<=ɵ^UE+٥&GU;rɰfg, H/ S y77b)\:h}:=Rőکa4Pqnnl}V~(VX1sq(ٲ_2yAb,FtI~4@z-Q>MEʞo=ܒu[x;DeV.$U6UGW_3k/$d QP77|U}: d%cDyĕFl4>=BR8y #W^WU\Htm٬k% 슪q,*BO#)Ւ% FBJks{GLXr A 7]QH$PGv0e&ɬQ}e]})xeӣjSoTY6^~p6kX vE]s|~\uՍ0!O}ѧ_$"2DwgnH wO%g;fx'<Y0H=0C6_Pq~~H==01 hcpp_$(Z.T@6\Y͛8JjKf8Lͭ GGE(_]0H* .(!`Ɉ&!g"5H}/^ۧ>ui}B^fDYēš0ԸO70-)<{q;L.H! wZgx2* ز!pH&),oSW~? '҆8EUuBqbþUpEIctw:)Ib #(KٴVs8%ey"=5'L]y Ջ`*K?@$Z:ɻv؍A{'|OPΧaQ~TkF$YܰgZ;vIBGMg'Ė%@. f k9may-+kQsn&Vvj=p ]$IPP* Fz$:phRb` 4‚p腂2p̕ nOៃ,0& ț$ ԯܘITCx޹NcӪgh<+"{XO[IɍTБ-fDw׀gОvڭHeJ>cy9[\<Û @31Y0'` G (V?(_FVuMv9]'WFϪgƱ6a5 e1?N d=R%sp4O~EYӏ5N!Ayȧ8׃1"R-+㷶Jujc'dG/x?R%z'o5RGd/`GC0 4$aiF4G &o zID)@S$óhyjw_C/ iKG  b.!'= t9n3"h;Ǒ4p$, GX4"Y$0θA\%Ws+,yxӛ<)UVْb DzȋHK\@%P[byY(rSN.r0y3#}ƚbO ! O`J4 jw!ĝacs= u Y$Ɍ *ir)9-|@9PEA$W[x13Jk/‘ 7h~1'S|`t=N& z>'«q/q6"L_WnCS?89U`sg D7,86h/fV QpW]wOow1S:S;Ė`ycvw}#Y._ԑ^vwQ/xͻFSkT5 RCK2kѿ gEs`xAK}J-I#򚭱Gs? l*w<=ݎv΃}?Bi.zɈf0~J6qpxl{A v`Zճ炏fAm*P^ feH' AJ5n1[_ ygR#Xd*ɖLFdq@߇sHޑ o3oJjc@DHM# 2_"܂)X'rD>J}H9hu,NTW^_W8kQɲ],L/4?.䒪;'p_o>GxG1]|l&iŹ^+׳ C$1׹Tя*IHF2KW ^x:>4ĜN,ѣ3sʩ2Ͱ T.w@| tK \d}>kIJ CX+.g9a;0ljKNyF/?=t_qvhKÉQ=ѪnpI1T w4 K!u- xƹu?%REe:sS Q`qv@CUYƝOJ(:T#` meC?|j9Asnk c,j͒X,\Fsr |919b.c-]£&tۑ&EC~MRD+CEh@|WL(΁jLi؇ٱ Èc[P&ჯaӌ?|:U!zWz #Jl!N(a C~s# shVl >*8I_ ΂}GKMt'"\_iwa xx✛DRjzd}긊fҳsz@r|԰g>mq"u-?ɣ %oᎃ,Gcߓ'mwFd&wy/hpJ֕T4zr$z 05"yٯ4&u WP2$ m(v)8 M09 xa =Fg7g0TUJCۺ[S1s^fGy*{GU s{{9i djCm6A]7GS4ͮЏ!~8~qa:)8Z숥c;i58 )Ox$ AaTEJjΕ?Tr0`=e2)#7Bw-_G(wpcr{X5/kE*RKt pd7#dV7衁@lMا(2πy;`@{tv,#$U܁V8YJ(pVo#* "!Z3!Ks$f_;$F5 ^/>S)fvʣI1"6ի" R?qu1l`U6tkUOe`;cq,gdu܋A(*q4ojJE^Br SK%s5[pQE@V6"K.$ g6~6a92Y[c^Q;LC]>רNG|m;]w|Nv$qARB_Krs5y9vţr}4R7i p84\c`["T&q ۉ`m>Ȼ98p'Ӕӛ? avONF*{xdxxX-ш_A! s9|?vM(e8xg8*۸]lȘ+G땓cTֽ܃ƷV|kvu HuvI~;pNYVf[: 4B.k9 3 y+F kόBQ<4X ;HU`3P˝?mf_-?Ҝ>ɄedjAE%k{i{MOOYp0NJ8,{y uXwIFyxO=(HNwJ|l=y+_>M@Dnu,y?ÉóJ@*W;ωІUԍ~vU ۽N2JR +B R*!Qm-s P_Ps%0QQ.pGꡪSˀ/sjXD7Iץʵ8\E _WzٸJ }YuTRK-u >LWoRo"SK19)~SCs'O.C4A ( kxIH#XxEc8gq1 V7o ,Oɀ@JsnZ %\r4ef bk]M.ؿW 7MNlaQÊ9eGMrxF@̊ ~טwlH!jo6+(6E_1sҵN%5ҧz}*8%;d뤧>EL=TB-_q awݩ'n6᲻距i=*'wF9Iv0.g,rBe0;\ 9Er[MIˑCݩtq۸^n] ;t֝!ɝyD X 4OC9='i|bӸݱ"˄.wxqB˽A˝C)oݼ ScTYVLNQ0m[UEdyM(jb:#=_vկ'2k\_^q6ᔟvqi0+Ti?D.#wK]!4ҡ߇tB #!.᪾i 'x刪H\B%(p Ir<ً>TDmA2;-l,,(16EJ DwwWv^AؐB~&/ږ;b$¸U5D31N}( :&:@@9M,0 a3 '!-~w3GcSjx  ǰ87qv-<W&!/pM$IbmK_IfP^l.?nn{ߺ(758W%N8yP >Yp;@YyЗ%Ea6D#pis5r! ,T #Ӝ~\ mpQަE᳊PUeLeT9qtI59~`W HK2YH0Z;z_}>jlK/$!; Ybd %K<9jj܌$)AL<[@ g%"an lk3&_e!ِA~ݗEyל(:/W|$X{|U 7yGd~z:BZv&^ڗ(0Z|ֲ3T 'h=qSF8v)KI;[CuSFe`3k\$4 |WͶ)~S8F |Yx$30X|yf0>Zj#<-7sMͮU?cy¨4ǝGpw)SxP8]WV{%ŵKUuY!oI Au􅼐Cp_se̪콣N% b9tcn8n₪i9ɍu%62"Zp峢tP³]E$n/a+nr^2I5^#T+0)kL{E)}7&w_ 6kUqEEyg/FoMZI<lZ&޳"C ϋ %'QkҖ- EUۓ١P F{d3eWEyиRjNiWgZL U"l3@Js["[DO`a e]T Mq8f$(= K:k?ݭOȕJګl}@=4>%O} p BōMg+hI@ߦ: <ٓay!>L*-ZlYMGoX |$[7%9dIY  b8 }3KE~bݵF_Άn_CzbkXz@$bUX73+~DՋEݯVƒo*-; i8HXTSj͐>}InRo~b!Gr + w循hZ!a]yѿ;c>eʸT{+] h 3؝bdXh;a'C$AJ8$׷E?*8x֫[al礝OHyϹjw.4 }Z.pQ /C,X6Cn둶uHQ.LpaW$>T?!&ppw ġ-嫴gG-`C^B ؒhy9]39_|K40" 䚜9L5+U%k_'W19p Oo-&Χ[Ciӷ Fk'[=|]:Ν[;'qNƃ~$n[GmPtV 6ŌԱAֿ深N,KTfUǒVy gȀXң=ϥ۞+r(0,<0C cjOa LnD\*uP4Wo,KoIo B)E?CK Lipz1T3:}:z2ӰGB.p}JQ"3STpn8>[A@_ uwvZlgma/ (fnπy" ˜E1Fb#oܑ:D]>ԘѮͮ%@Btitoյ2&4wջ(_7nNNq{{6nm,'yB)P) ,E)|")EyZLNH\-&dO8|#A,6S}hmO>U ޱ@݆Vi7CC8WhD =}U}Ɋѫ)'uf Kx4w2_W+gASwW]1uZL1|H1NU|c-=N<0*4}/F sTGpU2Aۢ` ܡ>?D9 I`hd.>8EL+et3֫_$KKQP' L$< k{b*f [Vc_I NBWHC9ɑuj,LZ+iP3bm+yOY4TdyS2|Tm}5?m8 dV1)5ڼEHκ]?pQA tEpmPxK΃HBNTSt/s}6t7 H;} #-@czB*J?Rq2:`nOO$w ۑRUF/ ֫hĕLq<=(h'f1}i8 Rܓ)Tsi4- !9{I#Tb>8Od_<=SO7x _W:hghkTf1,ᲤZ29XEnA>Jw &m۲C$&Jr$& V _!`-9JO>m/ʼnm1|Ġό|9'1S*;/>K,ճ ,8fI;.{b.҄K_|'ѫyd{!IA<>}KHdsFL-͘+f8ō*PFB?yơ9eE2f" ²{w(Tx} @`uq<:-xxtGSR)%}tݯ Wmm)?sW(Np)bu92{j %s#ڹͯtcЋE(5*HViQNhL~?_)44d7Β%@Q"SvgInii8.[Y9SUPa`< nEA|g6ФutO;n sEc$+fUa\Y/g4r;iJ<)e,Rh&xQy U g6)4{*NP T&})dߌB~MɜohY?APc2b 哠\Ʉ+Ǿ=n\dcdةHґgFt04P|5uV׮2yH!mzXWR4'i ݈EQ-;K "Η) b 4 _*+@Fc`I02NҊ̕ւLL LȺPb_V'D͓_97C@^ZšQژ`p.Z\Dql.fWLr4-$EI 'jenbXđZR‘% L%Pѱ BȄ2o0玈*yV(񷣼_j!88貽m-h`zDx׮]*B%,LpD^KE;$ɺ/ӃJ<-&//Pzuh:6 %>i@cm [LucT  Q[~"^L'yЂ;,斛j\Iy ؋G}i;LO\y޾@9]Xv:Uhf]6Nog(vhŚ⑪0٥եKt}J孱rZk_7.@E4 !/;7p/6`T_e<{U]L$LMnӥ1#tt|vTs< f!&c Ixq*VXT׍M?.yv;0G-([ye7EIj ޤGp>lp/R`?cz+{=bS?="1$tY _'񘝖I41@R^1}|K%EC't2UֲxggBXc6Wnjh%rw7V@ӟv*c82$ Bm[xMvb[Sq\ay j4 e,]V\gtO3ܦ6w9t} Td{4.WNrK!Mi,F '#AgjaZKb(h)zMrwl#zZx綯rwT{+t%5Qe=vg<嘇^;T~0q&5v o*&D-UҺ 98 :Sݎ{k@_KKn>szDmmBooJ1M^ʋ]o|{EJveTNAz ]V-cȒi v_' ܓDl>۪q0ZبSÍORϳ^GzhQMI=k䏖( sts}銥lqYb~ 9c!It Ť`:egFvڵDy̹p7gȤW϶` II^iwU?VNB3uON>Xۘry4^Bf:jm_CWn{]{p4L}2v{1gOs<^L: hjjޝI.inNqd1 RUoɓqBb/`` h"x8Spev"~W^\;<Қ;Zd,Hg"1hɥ.Ч }8rf[7JWA& rR.M9Q_x 7?RZ0[<ɡyz!s_`k=(-mT7G8np}5œ:3 [LZjc3m%\-<:[\n녷( TlDdbɥ7a<+x MGNLn0r^o番*J\VLTr.w.{=g65Nte}q,{˞ @C W`n7M_gJ$K,!;vtm"-;/+^mCkRݬ 撖z?&}g+I? 80?ukW~s Os@*SJ55FGj.O-ń.Sa4b6+oT6gE.=ۑ9t! j?C~N䗣k,Tⶽj8-vϘO?ȌSjRw)X"I܍ Ubg1kwC.^ Y GW|gRvW>xNcbtIIQ3po$"fe!IP$*b<2,}(0v`$ I ftְF%a'Np k<2-/ EOśH ɛ$ '\ yK_g\$ΐ`I(dOT1qUvL>k+ejD}UO:` ]tF=fO眨!KXy4ַuw}}.R3nW%+U〇&LaT;F,h=DB²Dj;"VW~ձZɨc<{рd!$@5a)jLCq$ng#D@LBNpG#"(^4~/{62Wi/|π-|ڍԇi":}ރj;IGIIPP`ȱг'ozH XP^Wbt3>Ut(|^ +kKt,c{g /^Y&E!s`fS:%?; @^Ge6R#MAY+DgYB{ސFi7sg `˜-)EһDؑeuWYJ?LvdRdcBMɟ֚CFGJcG,u+VLHND]WmXM^b,FITDC6QIK~ E ì2ЧkdfF i &vh&u:J3 |`6~%YC<0c/_N@kS$-/(PO:{S W9}Y" *8d~s[0H )UQGceF~ or$ϋZv\vvR4]/VJ=~n<AC+f%^ϔSɗF#,el7yfy_.4L9FYEK &9.Mp~\'X.Ms9秪H& 8KYϘ+\]{-´Jz>FR{s0@O2@2wXS>g~s 5g;Cq<0S(P C3*;<┆'=623Gc9|\=kBuH3c ק03xAԊ5ȭ Z\YSό_Tp_qϥycZ)E3_3Bcx#Q /vM8p 4esWP\fЋgC8-?~WUxT%jJ-&qL-14{(0yR"dX)#H9V^ӥnj#Px]WL 'aho<gυl|H.s~l3Hrj`oMw@1gj9Q[k3@Fbx[n1zE C'gvDso-qX%өtX͢R[R<^' @8 2]7!X'Nۨ-j"V_9FGe93c(aįH$>7!)~(~yy('U Ê/ɇ"^$ov;zԻ~mr1`}5)e.Y8,D )׭|>]F$G@:+=dWnX|fuL?K~`a&lxoH4o6Z9[#yU'F&F'X*3IwYh z a_kt"m c H=n$FB Nw9ZӺKyP=b ܲ\Xg/JzIW& e{R$d6_mdLxV7jNW `$$W|k.[N]y>{o<zcYȜ[jؐX`}gpgo\L\Sey.&.yy{B=vC:^9c5Rr"Bv.A'4ӽoIÝffOdŔRk&M{ZU0}zkz<v(9ۂxE)WL0</S nj]6y3v=QAkc` YDbխQK~q#w2e/dtN|Y1Υ89ˣ=O  lJgo oeNln y 댁9^Ixp/V^̓x=cg8gn3pv!+n5") 6Tt7HeXH!4# +Y=Ŋ|Lwe%N ) AW /|fk}9D#k)Xk$ nP tkL}~kƫwB rK$m\5qɇs);9NZ*td'[3[ e>fHmYYj·DphWݭSί+umMC-NҵjJӧHX4j^_G/Az6c[KDo[~Y&|Bj͓0B^t2]z!UɇVcnR(Spo*s=”Y؟/ 'ZM > I1(bh~F-|%OJwG^WbL{h_(Lȱx&%}+Dm $22ݪ ^# F>$w)޷l@tnKbt8;%uHQ cF3amB1/E"8կ$F&w&n˼x6ϕn5XWØ7Fxo?jrmj؏E?:~S3ìJ7cɎ*&*%DbY~Q‚\Ҋ#b= 3pYX>] 2:f]ީAY`{ssgI[oЩЖPiGSjw !mu>G9x!۱G^4]6I.=4Am ,BB2WR.p7oA'[ź9 p(]s's>h5AiXY{⎂c37!BGFYABA)t:BKБ ~a0|;*\y s}aTr= hkƁM]z^ZZ5g =u2"d\GDz} .1 gQYEA')n9I\^ f O4O&ιpw|BH\\VKѣ\\λ.NBk#~j#i64HhgQğ%{hC92y)ZQI" u e/#&4Xר( .?Q3i ˝Śǽ/A~#rl 4rD+a^eJ4{cumvk'ԓsځ.N-2o,'H 墋@a!nխPa>u}?AK?du2N ʷ44AOi7Ņ%]p Mҵ̽gj'Ng;^eB܋PBNScO eyH wd?Mo6:P'wȀcExQJ7\~߱ef' Td^`oV:RNmlx-,L-qv'M^7Eu|&ĉU`/K!vA2LdXI&fD3*^+愺\1o΀a+q)v,v%v@^oPm`>>@xw6\Ŕa PU[xtiit h|}:[.o=t\ί,p/P@ n:~I9_Ӝӄ̮5QtouT(IΤ:\@400Ë_ʭ_v=2drG- rG$鐡b6yS{f|!OM ˁp&EGH,(]?(IOOz98>)A7֨},vk<LKsdyD'w' )>) ⁾3Y9+boJ ?CM˱,yw0.;Zbq|'ts3gc*c%G5b@?uu岋+ N[+]ܮ ydidolQoIob%:%.nJo[] V"INyCT{>Ecj6߼$yp01ko_f y()S `bѻZd76Mŷͅ7>Gȼ !NyV}rOf&-$$C-MMbR$N0Qn.dosҞKax_|` UZqΨ1d%sgLg#|GO$i;e\Tl^b/;5}0pyɖʲ-+9p>=I G)$@u+#"3W#MWiDat" UV؜IPJYn_F77O` F Ikx2~ңfNh(ciRL7=PLFn1M@,0Y Byǽ=km < yf OΫM3hӦg佺vTH]? LIj 5O U~W oŋ .GVK.Rp2 6̓x27&))&eيphS Xti6b/|NG= BVj"841onb!lֈP̅\BԫdF(#sd_qF5K/lPi:3{nP^MO)?]2o$c YUPCڄ-809iܕKaǣ#=G:辰6*-wZr=>0*⺭->W[o&L6/MrH#ӟ2LaZfvuÜ(%5(eTp/Xe&ѵQ͡xS̛5m?~ޤUtӈZݻ":@Ç])%.γsv\H4TgE: a6OogUH&<,{ϐ1|i|Vћb AM 7C[VZ.rh\;n-g3GKb_f(`$q,JRtU6vvU-]>FFe&+m%eL3(nKf%~o){Y=x2#bc3sUQ;i3HO;?@ACⴰe7iwe 7l|P¢Ǿ1{tën棏8\9F3.0Sf`D+]Zo[嘐H?'xTvqy"i6˿FׯЖ?Le3;&+Z09 wB/=YuNT1Ro鍙-3L;%xLܟn}xXiWID\6 2Ůb ޚJ =/q. K̫]2f\Ӷc尿BZ%y9&ٵ56Y m=OXeA7(#Ja:?aE(wi3G˜*s(S%/"O{^|g{EW-;`/EE\SdorΣ7UuW2=O՝OUն-t*] 4&7R0&DD^=%C+$Y G0X ieJGҊH"3c?&a_V4Azaf9sS@%nωHz5xDӍiMl Nr߬&iߺ5_!1aG饌,Ե͘gc؝mwKI9FqFv3bҵt̾.e'da sWxWf uM5s=&~[y"k`'OR[='X jNP*  JJ]oTe%5LI or{pS;ng*A\ETM7Exz%(*{(oRYҘTCriϺ۵i0o+o2(׵3[6K&S;EAE\QJLS '$ 嫕cP_8H~RMhN- DmRNI<ṿ&/] z8-Tnܮ:Ǟ- Xp-4}늭?ƧDt `WXre_no?tvW5F\*NfnIW8}@=J>w==@G׿v1OP"7{_2ǾY݂};xD{O8ty^Eu"ƩP2%k%'Y[|:UF误vuݴhu\6ut{ͨ҈_TO7O55R@+  kYbAJE*ޅtJ% uHobM;:-<'H5*OEH\uT_ Ζ6,KG+9}%p^uisy|(0Cis<ˡ$oJ'O9cKce[Fj|2!27 o2j*KNnB׻|9 g !m^3 \1,//gY>N% |tʌ!J΋/(7-9b'F/< ϒeR.Q&x%z".TZf 6y1GoDg`Yr8*s\*3L0lz =o-TH]H Dh"'1Ge?r.ATqnvܥ.8^4눷7kuoEoUh규%zQ",uYR W6C̕2C @҄wvѥz+'@/a>wtypҏӫ Ob-tP܍K?\cԍY?ѐs+;j㒂Rr9]]s^QA_Lr0y/Y+S~Iaj,?Y}(eܿX*/ĩWꋲGY}:[_d 1 =6)OrnQH~WylA:'ɡ~+¹巊䂨PBrz誺ΫBzy7g[.+'!2KiKv5|bW?N_W߫lu'fl<7&~Qe_pJ'pkġ[g=*#Xevcid3p6e]vuM:0\z}($sJ<ɶyoFԽngekXwL "Ɍ{;8QޒJ[kV|<K35ZN&jȵ$2/rr CJ[m}ydH(_QgY=v̵l8dKMm^KTm؍sK ɫeiB< b`k 1~?ib|gۍbTzUqnnOjLL*rtDA) N,.h2б5̂ϸ0mcΨL288hطTE-nJ{]RH>Ē?mԱBݢo] hgjX4rs]m:vNv'!h*ˍeemK5L}ޢZ0,[L"L^{-떌mbz U9+* vU ;ǵfml^x?hYn?ɇ%`xLQ/-gTZabgYec#5-0Ψ|m7ە˛o;˅(Aq[yC0"EټHSZ<=q>GAg(ڼsJoed8 LӓEv/٧Y ЗF?E,IʿvE:z9c(ąg? k}OemVZeLGoB?+4;Z~];bOu(qilzGEh~2^hMz9:Ix5#(;uXV|yMaTkf,直쟩5><W<0քN]P!ʆ#vtðwwckmG{.Q^GN*vF uo> JpC, l˂ WGgH4tOa2i*e%n}j[t#('jySh9T䁷2F w X3O+ю~Nг0XޛH|ьZXEbG $bTjϷ$:_tPh)yOB(_SЬѰx;.=5[vQශQȡc"}74E {2xӭa,ysD7 W$}^ͥjʭh[`}KQvTr6U h2eA|#ٕHE(K]hU ِhjWWlEr">qY)m"$iYU-edV7tLΫ]& ٷj==# >v}D:Bv.:zHKJ]NNzr+{_aXpUMR`qՆ}Qv j"+=].?ϝ`,~t*7bwo<|Οv~uw6stͭwauiiVN]%wt-'xﬗgѰKAko\ ZR5F%Lo&sC]Q(H͂* tgJi$i{(,=++Qyxpy/L"|;Y75 f1 jQ{: $$?TiEO'1.ƗԝgoL[,oF|F1"=X&,=!eБ᭪qrYn:@2Gg&'B۽T\ލC"+"`Uy4 vm&mN*x4LI(#J0&Lˇ z8 ooPV( ҭe5fM΢E I iSiɩ|7 Uh8i*x^65 q<@M0d}钛W'@)=H v:L4!u7x Kv|Ky[rQ?( Ez=L/qwq6<_4Ñzfi+L6ٽX2f9SM.޳xϴ4Qbs faLԧ̣qgxfe% 3yp9aVbRl|d0koJ7GjL~Z=ub i}}QcEz=J#VOUۗmɮV~]'jJ6m9/ݫnǡn^dCs 3ӭF|$ba}y)YTZ  I(k'u嫞gI6vm+?!Ki1Xʺy׿vH)¤^_s'zƞy(Ecgˬ{\UtyS~7b#.$7R3%`M$=$g_NZ:2b~BV7 6:sy BB(P/+,q{4>Oi^h$U"SL_6g0ba02AY{e#k򪯆ó={[}nC|B VmҦSb|q- W̝_jǤxI(J``3~s4-\gm^`̬;#:N0:OKLlYcen&q.֫Nm;jdcCѩ*bѭGe봙B]\|* bLO-℔].st61+u\./<ON>xr{{.N/ 6 ^f]+1eu1z>%؇ZHEl~w4Kֻ啎:krfo#U^=+6;ۇzpv<ۉZ Yl.ĭ^ZͫEO/4 =\-=DVBjxb'ۼ3* wݞgߗ8TY ^Ey.UPXUI^fvd#a)F/=Mfrd~w93AdݚCM|̎_1ʽfxw<m,dԞ;X4wib/0IѼw5h˸m0nT1rȬu\ qHr8nVV5T/nvȗ1aGd$xSԔN^ 3YG +ѵ h,j(oU ,Xwuie:4k${1P_r;g3b4+c'g@k&0Ӷ>1u+S̸OINhK=μ&yLўTaa9{Ɵ+Vd*aK{'K/u%`Qtp+rpwsk/Z'vjYtJ]@䉡.pᳮvoދiC 4X/j(SL+6W2b.XӨJ^bÙD.wsnWI+_Ep'V>r!^ekvT?u_/l ݸ([xd6U*;Vs09I T /bWÔ93s̠qqt"&Y!FQgN̔ 7?2Ƀjc],|u(bZ_eqh$G9u'F :+AWdpNrScM'f|حmRkÊ:P[] E Nf[3]w r䗨|~jrT,H40D,DY֬ӭ$'NlģB˵lQ7Y7-BP7Ip:O qoWqo,*orEKT+BU֟KVT;5lq 54p@5HB# Se#q)DGɣtA~m0j~z`پd-\V,O:ܰG]zSuz7k*6w`5J 1s]9B#HB|ADJ<=vv%1\<|BJ'ͣ%ⶒҙzQ(\țB$P0یJ_4յ͕͡~kqǬeR[ΩM6 Ir3r+YqssJS)-Wȃg$d$7D*x W%u..T‰e\Q7OW1,D[꯫3ě̸)):4#j~/H SF?Ye)[~8ybC ;ev:҅MelEфKE   #VS`KTu GOTVO#=XjD4tr'ϑRY)"^x!'1H-bru)#ަ/}\kǡ~KrRA!_ MG kywPOa H~?xH_tmM?̦ZβYMֈeEЦ`OMK)I.1Gp<"r7>XF"_/[شzGWUBǭy.4,HASau9.EЯAE:mTQNVLX˱:g6ڔ-r}9]8PZ_3D!M>9բrr"$xbu*Oq+xպLV-SDX!W2Ŕcr '.3tנq.cxe0%fdSىW6ż }QR$Mޔ٭m7'Mm\sA>5~dVX{0O=ߗcZݪOc/)U^4mɊZ)ފoMI@-E)(~4T?OK̷fjI/ :Ny!Y P8M/ɯU4m uo?Ak^N2]T%`b´]"fg m{8ܵ.K޷>sQ$$#XC訧맣PeqM7\`S]"|(Z,:ꢋP^7jļ<߉ULVUqlW7ʳ͏pz-NBXQ 92g"(1K2DY`E69Rp/Ks6{؏\QeNxN.niBժt1‰aCW,)͹'Uqxhou8;Ԟ s)EŠ'SȹTq;T $TXythm3GbNc{ |a0nC@jO܅3UWeeú wY=_WZc:H9W(Ke]3@gɭ&f&>} kC܊WEw%DzyƟs@.3|g &SeI9&d,rͰ &4BX #h,uExb%?@)`<7P/.jJ|YhaK];%DFo$ !s&&z0y Qm`)J:k X1JZK!z.-ζuv"-3H. cK5)y| g/yLB:IoJgI~v=%6%{f&] >}a ^Q>E( Uǝ'7Ettxmֹ_Zܢy,|X @0+"=|o%ϐ % `?Yga* fĕa Z7I?)N P?~JdTNrĕ2]"6ԢW𚤲[uu4/* 9YWIIj_b*. X1P\ `%Vfٙv;~[ҩk)fHX&AmP*o%#TeU||h%媴k o\Q(ͽ<ɗ I~~>s㴩)Aiqh}^,߀W"PW;D7b<5H@|Uop3Pqƕwg{Q[*dn%=D$$!w.=_6JYuFH̸4aԻ)0YA g5WlV d⪼RTmIo$"ǜ P<~0.70χ0e%D ꜼP\!{tÜ%<{}3XEOk:9-[#~&d,P?C<AO6£f1>wv4˝=d;{]mǥ;X2uX_㎱YON'l9n _fx|♺vCV.O^ d/M_k×Q1O;;#oQ\jϵqK?96kse{I#nVjdsԟ^>PpݙGgvK?)mssJWo#W8 +tRJiLMz)Ls}0ұ b}x-"l.T\\`7xf.Ь0ۃ3<°1?(֘ۏ٢Diw>}^ 1.!$?!RⓢuqHhTƢ~_4Q |Η~*f˓QgiW2.[`;wgx4~%kՔRS%+uU-[T펕MHCG1( ע˖er^<⬎e(sk{:%pC` B(46QB ĀTrI^$}oq?E(*()͔+r&Ă {H,a/dsL|8V/{B:^iN^>)ѫ  JM h"x[]E}]:V{M\Q jcSnyk/ 6H+JB,*<YVA#bM^,Cn;'VbHVjXqTCk1td6=宽&pT%a@6`X׀n10Np=i(ErՐVitljzٺs' s7Of9U}*# ̽f&,`Dj` "pA` iǢh}op#Ծީj*l?nESw^5'hȓģd1G|&/)49^CiN? Kʛ XI4pUs+R}>Yn3oԅCN o^]42^ / T,ZAzBS C)i`?$pjWcD?;L7"`scnS[oNel0:dA!)ݼw.pgzUT';S6C]?Dpa3'0<%(AEp b~Ldˁ Sx.SeXOpEU$׳__3UXRL$K}Iɣ,#Mua Mzg ܻG^mKc,n񣹲H#Z^ 98!~2%,TSC52rFRCmX!plyTڢ`J>ftbd6fCgq JiŒsxa)h۽Z9l˘˧"UhĦh6(䯇(gkNɗOȏM"i1mo[)X32"Ȇ 6|p;X@Dz 'YpIE1@w4_3@ڠi e ;iT 6"1}r4A sb(LZf CUUEnK3N[N:f5PfЂMs1$ h&b GtϜnnfjq28`՝1$e\E_f 9Vb$TWZW?ԣF vd4w9j:d:Tq,= NFE Ν¤ ־ *Ճ Hqț[s*7LowɾnouztYW(aFoDr7 s9;? ,vaI$ US&44e*<}/\UN`_ wsppsp)Xȅð!HH/fZ0CD~L-!R+S싢2+*+Oˌ"J54삃=,LQǢn{yy{wɏaJw|j0H7,3fyX#`jw(&JR`ηMV vy4Op5+@JJ ^լg%D'իqcb3 ¯Ts{5 AUO{ qMYCqӗuGю夢Y4KX&8.Hȭy两]ԋ7nNի2.7K`,42lpzb=|<ov'LY-?RA66A\jO.S_4sB0HZH4m(!J!ށKҽ.׷(0B5oy,E9?Jde.يUCT7L |˿`K0]z}CCwN8RM䊂k2 Obot:Wm{zcb8+8o7Eę x!6)Ki:9^&Rzè2بG=BS$'y PzwZg]8۾Hy/twXQ4Ww+?,ӸE@a<NN0%  ?u%n˪ <1 K3< HG(DyX@,o)id,gS ;p45cK`©QwFGq t;/a T_RrFJ0})BwL-1Gd-f'&)fCMj_Oq$oiRĊ-mV!~&2jmL|ˀ81q زݓ'it.d%_BYRBi)Z$o*RD^7Wb]lZ '*Q8  bwbhfov2ޙÀ IFa+-jځs(2ip8]WOg3׻pg.CGJ~ |+7$ G3)CM2|#9t6sGA0@B؊F+nL7faRWv' )'9[, %__Xa)HPWD1,FgXQf9Yp{o40Vڞ]o m:XgHM`{ԋ[؇{!h/Èy OzZ]$+po ]=<̌q'P3_=h'ƽp' (+ IF%G4yH Kc9 sV_Y_9NP)Z/u&'M"^ѰdR<+mokOY{6kQ:p-08Ic5@>#偉ip$y \"gSna{q5~#&Xu JؖI SXypè>r -n 2d1i!AX1DsNoQ[P,0hFkB ZKS9Eg2BAm{J;bN$FYs8$x(_McU2Pe GM *SF Jg__xq8$ ,#RLaGZ91P(``7iR !Jq8K(ϒ%PԷZ'4S ٠FU^&+W-F*g@~2f] t[5"Q2V&hp9lS^eiX=RL g-*M9ՂaF+P7\;q}I;h-lx1c/ټХg%OySfx.K|4 ;j0Y}"Z7Qrڟ U< ZDQ) K+3,Z2^fݝQeZTU޳6S TX^>'`ڡ&MmFϞ{4ոHYq,74igfDx/>T,b<ⰴjZ; k .`p( 8 );@ AsXD? 'tglZ&&?m}Rj{Ow|dtk-VJ>䝷ȩ_I q]Zpzď}L6#s]pWڂm HޝvQxϝ>g%{qDʏ0 >NuMZ ,fcn>Jyؑ6[Y_Tj*sg0+0D=շ>p</U`e~ jjS^&!S1|n8, v"F M0hZ\ vAlvy`PQ ÑU* y&H޽FY0X<( +b"$ sPď@_$ .Ss-Fa;8z%ᜤ$*i81'ep5$$z}?Ex f 9 [6SRt< ˏY"̱-J"b܉!:VGm4_xx"{ htifUI|;(g_|ʤ_`2#SbZY GQ"=2GwRZ_eX ğC (C`F?zHNxb%f1'H.9#kq%^:Gw!*SZxiop{(>ཎ9,邷Us.KTLgg qXinၺ.[q޶Ϛu\W\GXћu'l & S :Gǐ+isL!DY4l;tqPK\`^DbOX;@gp,&^faГlYUPkXdc8R?HFNUr$yޫ4LEq} :["UiLkI^_|$rs]U2돣v׬?}g' uO)S~8ܱh$6m9?7á|z?S?9:U#>=_7xU?pS' 'aP~^M5Nq0a"s ${(4"I;NZ nYYU]$Rz5k/\}NP4pm9;^T(Fyye R{hE-z! 'm %(?|8%RL {4E .ϫ^2O4G7pQp jpT cPd385ȾH2丢(k!ƶuכFR Ôb8R_Sp'aUxe 9cC^𠴇|NI#1G,㇡۵=נoU9_ՆSo!ħ~12*?w^9b'(KZՔ6]%ʏ(yKS'!C2p&: /@pCӰ E-{CHn; ~SILr.Y> 5XErcODt9 R 7<%}7s5e~W䧳F Y 30S_`$LEr(Hэ,e<KJrkzF9Ňp >`^(]n'{b~˺tx/twT.9>p a!-8-|}iP?E0I &fur]\ۗRG@$V0ڇx<ۼB >+ +2v 4) ʈ(6 o1ݠs$wJ4Gf [ _ =?DWa},"so>HBDKbYaH(%0wFU1 \U7>oAZ/'d %4N@>N2P Akڽ\"WlnjP`}YBE$1hhN|9P6'ÿ*a] "QKNB!JGG.up/K*Qӯz@WBuL78" Tca(QNI#Tc0r'vDVE[9~â!\ڏ}Ia}0 ׺|+9m,;׎̳D 6{aRg5&%|{4#1Saڕ|+a.-{j`J5nG! k/(5]Pks9uxg"3dTLRZG{&DmrUk2?Q!7: /| c%bO:0W,(+AT{ bH|!vSgǠ_' o`}w 6IY9KC-=nC1Xpwe iYb5Ysʴ,wz/6> <p 8ы: %[dy>XʆMg3bLŧCD +!)8v_%3zju 4 Yrt]* O<ыQ}ZSzȂ򞑉a ;A\MWtCZ7}M>S * .Nb2n&RCV"}>gDp*߁)Iتo@D?MoS!{('t?# /nc3oAsT'$> nS{ݠTQd Iy72P;# 4 +S`T{_@xbJZ)nHqx1r I8FdC)%|w둲DW?)OQ)טBѼrҼ>`C;0\.`GGΓbꍹH)b YQ#Ap>,(o>ϩ4ʋbut>W$Lu'N ľI[ hx\|H9evtwx@0wlt5GKL:|G}hzƯ[9}9ay!XBTX)'r2~}iڎ"]%{_CGVQACc^*Q xfoήgPWAz ŏB9>%+ἄbbc6L" ~xdL=p V5J iN@JЯt4IǑ񺻞8fAI8% ҵp0#Ho#D\͔X0q;C49+6MPXıe>Qtm9-ɆOLRtQsAFDu"Yx`+%wX ƺR+&v3E #3jJ*|]ϯH7jA3tu VHe|_] 8dbX½Kk]%0 {ǏL//wjk`8٫j̨ Y|5SO~ _gE nDNJ5auf-`0&eZ]tTj;2Byj$TM['<! !G/7ZU=hD"6'W&27$-E/ P#&p¤wp+nn$Qn{22(:aKR5eP_KK?/Țu5t+ßc֘ 9푌b0= jH0cwdBhxi N 97)/+(' gEE:jOU~i24% &4z?:hlC{PV[nՁVp~_z%75!rIJc`ݩ~PXYuf=q5w`m?H&;+ZԺ# ;5ϫLHچ4h;ۄK?p9q'wWkD,WԪeٞk3߾$z=naW o?K)є'B hln!!w^U|'d7[myԗH eb Iw! 7q@Ӯ>ƫx(;xYl02X?r΢:%, D˘{fo=>D| 1վ#וeXTSo-i `߶r]]-0 Bwt]4}/wrHzʋTlJBrnXO,80}1|DS)&w)i1P7[*ӟc EN\ GJy<hIMO~ xwFpڪ675n QNG(ToG/3ezlUmR.ZqBF+s$2znTp9\WVpONC^LDz *XFx"Ѫ枾˜{I*` ? 9'Q9d#t^=sc#): v',d:&5z'q+ WuF+p)h['+Hc& qZh=Nf#G,6NC9MEl}TyiĹ$',kD csu#grU^} ]6pWzyg$^DƪԮPAW{V}yP~;Ll͠@$ YD>My"{W-:zW|Q]R:KJRA'PnjTcf,G.oyc%aO/5)GIm7(`4=/ _oKs2/DӚg:D;Xi'rR/[}~] beP%B?-&FTзu`r &/e3Re ќ<–sa/VDM{BοLgNE'+O4ur(Wnn}YSϝϓ2VFoe /Cxin pی@;=#&:d^CMx g?¾IQe "Q@Q@{y*" **3wbU9Ǽ1]!<9v6{H-R =):{fd3̴-q{뽁O]a(H#[DԩwRQG2UKQ~WD^Vvn\/D'D{G§; Gu%~ND[8@n\./&+?'=Ɓ%uYI3j&A*3{E߿)AoKQe,8*%"6qayRϲVlS"ŷDZܴ}ϑͯb/$W|)L(/y9;Kī2F`L"3W9 (wXVO>5Z}:wÀ}8;7ޯkߟwc#/+dI=7=֕+p,\f'lXTZ*8s|`@7Jg1<}kg9i .tqW`1qlp}|} nUEp%\Rd!iq-(*~ēr'1 D_**&'}ks>+eQkN·bf˷uCD+3a(aDɛbjǼ82l:0JIxQ8H4h6@DyVz>PvHaNgpNcf~?VD'VMw\¾z>>DgþɤGJExr=J@@;ګꋄ- :{yWy;pUUpj-p'鷆/"caag?/ 2< $?3) 5wӖK2*Ů~ .mC}9x,FUzK~xs8T &~UL,M3$S6X4@ڞMDDi[q&g<1[f@gv`er^A3Z_]ph=GOveLy !+?{d>G;sl֛5.$x}=R&S&zV_{64,֯zT3^r&67EdM6)WJ(9Hu/0ECø}k:9.ॴ/|w DhO=yدp|8pv7Z{Ȟ 5o o_@B9lv?ihD2)Q{DJpyc_4[ϗLf|.~ȐXN c|X%i-[֩x؁.+<}@d #mS@#kA|G[̫oRGvb^3h*`/ |%16D fS6/$4oEsCt_n,[}l".{,u*C~F娦{ BrF rR/E+z[!\|`kd:0gޑ#,F/<|![gY9mÊ* ʛ.Y٭ID$1錄)Ux#YYP7H'm? <`lE^aл# |*Ww9ڕj+1;l=7sh'3ԭkfzd4ahcd@Ηf۽IyM]|G"<&K]XZ|uΣf.*4xuմdW~Cept\|/cȹo6 _cN\91\*Qn':v} 6yv8T}Y܁gSnxI'wzfC걶iWNLJ$K$8Ȥ8B8.h9;Z|=;8KY|*iͼ/➅+'XJV3w#_(">Fp=irP&/(Lj+VSZ3 @>@)4EZ PoCqBUBG oHeq0{] ^ݒ}ζ7`Veޓ[kꝴЩt W.^0u>/ZNB&ګjvzB᫶IK 45 kґs25swb(Nu2-8A9wEn<&mnj^MavwuD9".)CHYQ5 |"S[6צP{Zgab.طId;Y!:ZUˤäl̞Ƥ 0+8A9l <3fu7^ mc2@@(?$D VMt!x„],dlmMqvWM֓ zRjP9!8IP(xWZy i '@xK7_~2`18 "PҊ!ľ./@"p qZ1hƋݽ~C 3`ȉéw]wzZBc$ބ)LXO/O?QBAX7݊=ˮUߜnBuS=># PZ/4oyyqd^ٸ#K]z|kf~0jlyw >V pss$So ,DDWd#xe»vq6u\S 4X|}SD8EQ~Ǐ(\!#~S+FgSq?"l. żId謪fݨ3!I|} gQ_>i0Md)h`4k7zф- cq2l˷d ,\.Gb܃KrtSG߄y-mMdwDKEFa O!B/"[M̀?F Y+wrٹCiݗl1x1 ENƠF c{ArOd9˄8 ,"9}Oݡh*U!S9R 7ӵY' &6r\Gƣ3bNijμbQ1t| 鄆]#긎CYŚ7\3@3uDzHMyAD)&Rҩ)4$I@] ԡ0Ks]gR;?z+eVNQHWu@ձqf܎=t ) i,N9.8qA:6'KϝOYPTe x2dUFVfu40&Ϩpp5SkH)ǭ}=۰N2}Ԏ$2.BRw$֌֋h5N K{rSSg_^ "MU٨M40(h `k}AZaAAK=ŏ/(f^uV> kkvk~bIYL񦂄40 ;6Q0!Fz .OQ_>Mn5MHhjȢKȘG,o$.3e(HXpݙ$$ٗ 8gElnoIqle1CUؕqg4#_9?pYד޵w31Ɏ[fr(T}188KGPmJ uO) u`J9$'L\$edә6tZ!7H.G)iiwD;kh'dQ-M0t'l' wKqvTnMYc~ $]U.;9nY((l b>FK<+ 열nsMjC^3#G31xs¥ͨ! t;O1}yx=fwx #m$uךz18Gx)|lꥬUԚ}'&OFd;DŽRF쟸|?f+br=~RL %?+x<5p$ 3isetLGq[!]"Y|hkn>h_kvx 4OK)FG-bŐ DA`p()kXFn2Oe;%Pj*#tSq.>Nb$q}<W/ݻH%o#(g+" EygYZ!&;=Ɠ [ `YF/ṽdJ'1 !ϗ/~r&!296gsNL$T8(_x1 =1Q\!~Y?~#[@PݞcW%Ӯ|>]LRΖs?,/ ;H-#\ꩥBƄ^F`0(I"&$f? ͰFՏ][{7Gx%d }0#F?"!z f#MY汪a;ÁV{cID0r#]}]7_.x>^+[FJxk/~C IX ҡ(u6&"|\MƂəilb||KU(]w{_XlCQ'hFC` O&DifXB _k]@CҘ$l!$l``hI&γ _g+Pb:X?v遷†F t I^-fչ%nX>OK 0xƫ j>a+s0؟|/Q[WfcnG%Y!=v>j8PFFU‹Sd ggsK\cY$G 8 BCrsǹ~vk5Ԅqd |[wcE`UwG1qXb_,Iv]v"is_O\ 2Tؒ cvd:9:'nD 0"\*)8Ui1҆<ץ)Vhc:dtklu8+!zɣ9פٗ W3O}'Smyכ2bp]E䔳]GŶ\-7cp—,3N/zMs@VrnIkTxxD|KA;Q,Nku:Џq WCw~u|"pۗ 'CTOfa x!$x2p$͓I_-|womMGO>bÃa@ ';+yQtcS4"'">f|&$Ƽ5 Y`lơ'䉆0O:QH'zqg~8k#8e*~Oo6]1oKa&1AQ&XS.,^чa>;p Rxf 8P3ߦ۳M7 rZyt hex-iqD5 E~*9u{<B Q⁞G6+\u2e Xsݲ1tYН"•@Rh̿ҏI;﷯TGi@df Uz˽ˮ,.;d~x 4Ԗybz:чXyWoH%oεYH8f9B|X[nݜti 'dn5"LH#j;q {6jxۿϛ]]X椿6Ql 2tDT#.FaV b8f-O#\/O1mf݀lVto>c^lU1I9+D=١>:O hWl,3AmTV(fK4u3๱GI<@UI`)RӺh"m DbkW>$UD'Tu"8-|V/έZWmӸB>F+}4}vC8%( ,ؤQN(c#BruV"裛m=]7]6K/{N|2EpⴻXw5,.~=×y`\>P<q=L+D' 7( ѷP~ $I:;:H$d0KEE>H& b4h!\>q2+=Ȩ;3s TY>xtrV};NsD U/l<%NV_ROg$Mv"׻~ܠ)~^YKo.~m9>K$ab,=Elű} ̍K^#4M&;Ō'ocP qDұ̀x$Cځ)_!ř^3Frc^<=ԭy6sxɐbӐUSvPmէ9,91>?.oB&j Qf?[|:zQ.;˼'LRyyQ=Ӿ`]!7NPx]PlmŌXn7,*-$V%%S1G:U[|5o_mi2lA]5$Ȃ3Ysi<u}Ee}xrSt R~ ~,Ly Cc7VYygf"*C6#uǦC62 { s }Z_s7*&YAd|ގ#UIP˪D#@VJ̟}Ac,%7P60 y )Cɏ!!i"']Wg5(}Fp'Cǿ 4A|=MSvNyVO>^7%V- xS2Gm" z)·}Y0~_<ǃ7% )ŀcV$YjsmI Z]Zwj Yf銲g7_!ƶ90# }] e˛"G)%^da2Hv \}j 40V\03B2c!7{-3 -84DR*k3,={I6׶A'n3?)q3!]~HcVG:JsΝZSƱ.IؔcX(ns}J1ƚP") 8'EId#{19ZQKc깘UvVcxI1iI&f<0nP[bEa2Pb0ߑϝ&p=C>7a94,?JngQ 9ӄ2!2 t"dgy*LRu)íR7rnS*O]Bk Ln#K47rloP,عE{s2i-yjn(heX5kU]>\%'  9Z')SMvE:nhb\Pʾ/\)&؅G.y$r4%m?6My}hWbfTp8.ȔѓF[ Ce縲FN4(VCNj)k2jIЖf~9weԱE' u.rGk!=l-6UEcB|LJopSBCGB96ԇuʌ¼i-;S9yhfkup%XhanԴHn%U+!w%(!\c/yP1yռ9R4ݨ/=G&>}Hd\gu[lAn;γ ͜LluG"cׇׂFx%"0yW3(0LKN%!.I@T(tP\*|mQk8d~aSJ6u*FAUA(Jeh c3)|8lF*vusaRYvb {zӍԕmJ i ,d㱄F"6syfFT)|m~D[?=e@b_=ئ]]խ]@%.JW{$+mDcf[1^&[H;Be7: QVmӟ79 :D&^0 <^,qK)9d8tKyL/8X+GNuM.8vFQ<:II&kLn.׭:Dq3ƭLva,,,6KςNIKKAB}s\zKȥtz!؈BTq"Ev L$@6؏2GvJrh X|XB(  =A:MXNv]|165CWgn H[g`U_Z# a*(y9ܫ,4iO/#s| | r }p;9ѣwCv<`F6ⰿ֝FƏWŀ]#U.F)EA:i\3|#K$ [s Ѭa;P_Cj \X2.x{߬#hȁFTN5]jUb#BC0f230;Ԝcq@_DfM%Cwy_scf.kHNq7/Re[sV.a@TW^k OF_4rlQO%8-(D$:&ה '"xw(/Ϋ-mxgȌ`/kA;=)Ē\h]QMW^X)Jc8q d-ޟOyXCwÓ1"Dgc&E^\Z .\dN^GUI yJtT4yn^wo2[Xcd]K m'$Oel~vP)&t>ձEhG әo?2\2ĩȉ1>T|*й@Bٛ)!2& t}6r`^nn*fr{.dS ji97D~H IYgLmXŃ,>.*H_&LaX AY B#v8M0TſVAϿMqPR4F"W[YW][[J@<۹t%+~HM2k"-lc/t[5וY5D|:Y-W]ޤ}baK4{i!z@fY_ȐIne>ue/tVد)_JAz㫱R?';QS.QJ\f Ys5aSw ˵üj'kϼf[zȚ a}9ji_.vd@_.lpau'箦-LсϽ}hc҂1P2.lid4Hl*<[ Zh;*c Ikur[vVO>o?3QV>~iIH>1 5-xÝU*ꊡ_4jlRn)0&uz%8'[o"gnۭjɯ:gz=;W{d!L&}{~ A80|`y f԰lb]:Mq<ʣT )@G,} YXBCΓSO| I*ݻ"_» paK*;l'v 옧27ѫb$l8lDiLOYI X)$bpJ,C<m6~mWKwZ]`#]HSFxc P [~OמF)e$qP ڕ%|r9C'<UlVvmkF}s^!\-.2UŒ0 ^$ҽo85N{1-Iw\B?6gNѷaU+ YMYyjfoVaE%2ra (?e`YQ\FRLF'Λђ[:*p[8/, y ȭ iyY (k)-QV x{(}[~GwAДfBQI&=U"Լ;|2="/W \aUZV`b).ID^%Xp~|VK5M]Q3{lEY<ռ} ߱k8؇D5 z:0b%pYG7K|i Z?h=HFm+$LIVBQ{ĝ.5&<ᵞے?P],SNiS "bI}(i7V' k٫,m}po|?0, (po/@0 ̶#M" //r!6ؿdrky_KjEԆ #r3>6,QH2!x3㄄(G4SsDZ+JĤbpӖ4Wp1(t4504Pkc0kI 8(!l2SILyln?%AzYAAҕG[t^;s|n'|f= \%TR3/'VZ0r26 MV0. o<Bf_J8jt=e52Rfk2/yJ5=CE&$s 91=5+v=O)<>@[1!L%Sj J8*}" I8EpX 01iΊp(jA+Jk 7GznO/wX Lsv`.n5*ii4C sFB80bw/2:HM #ʻ:4 e􎼵w*!t69#X^SL_d)ݩvhhH+[1w8dy}SPln=ds e/8tLѠ$OX!OKƮpX8Bq|䆌Ӛykw'@c0~\Cx:8B v8fgj)Y|: ļ?UvqW;,OD8ߒ&Ѽ "\ZX~k e"w;o9qp$ϱgz6D. Z!#]X㝆}A;4+WfG݄_-AsAc̟vQ:cˮ[1'B34/N:O"㳼H%bk`f(j?ʌV.b"B%DK֮T\)՗ɹL-f?gu&>2`5=n+=P;\Y~% 㻃 dPg#' .ͭtN4F䡳TֲA?LJe^8 5秨n,5sevג=̮ᘕa7bd[wu߄rxƮAp&~w63ij^<\bI9B|8a+݅qR[I_OعQū"3UVWtz/p>Y+:/@5@p?~B/},Nmn ,dJ|;Kg٫u5Ty(ye*غVUzqTz2^1r(t×18ɵ\Yxv MDod% 1ٚ_:)]b5[< $hI2[BZ^6mDWն۱ TLAYy1-1q_w^iNtUucUl} +מj3%r"bvJ0{f}a܁>x)w1$hz&1iB;\ٵO1k ڙw\#0vS&c| YG"Hբ`gI)x ُ|%[[sT!D;09C'"qL t0T>(1S9о` ]o7j+P Nq)RLߖL#O9Ƈݼ\ i|Zֻ(7.ah _ivfdPPaJBr15Dom,QV/fwt\Nv@ߞz04:}a31^4{TNhа^OW˻i]}{-L.G>͌ q8if.xqh$J:4̺}OEڋW.:VGkSN]({G"9$Npdy[łe@doX9SӫLJ UѢd{o؛2'2 ǾyqB-0|H vdQki 7Lv/e7rr)^2L[~1ޓJot("J,o!=ho%jAc/=Bp  ΜĵϫtuwZOmtRx'Ӝ$d7z5?yvamA?J!S>J݈BGD7;[h{jTxVcsF%$>,#%XhQd"-˓xNW ( f7m0ygbRaQqoP^+ >%9*K D/^`NiReŧO,tMYu|vUԻ9ȁ_QnYvop,!)ke'TU^Rh8uyɔ;~%{Ȱ BOL5=)ó޸ ꭅ~.Q om-:lw%NJ5ukd |z2dmB,J]L(.ŕXc . 0=|uy[V,g$ "ʕeAxRѨiw /E,[ShC&QYߵyZFŽ8NDBtp܆YQ*I;Ö\ G9z'[S݄o&!?\3whaQCâ#{u;w{Ew U^BXS87ݥ Sa~dӛ.Kr _r9`&@Mb>*KN#!jMrQwbqTQQr0[Ɩqq# Un2cv)_%Y2 ߼4G,v˦I%@ę|N~*#.}C˯q |)pCVns4Ē[9hpp(S<q fd~}0tls 9x/H1 +Ի#Y̛hwc72]c:'~ƊI'WA7w^G"ٓ?bA aVH9k$)I_c E\<Q.5+Yӯm?50vH4r m=O$ざyb H+X9i3LI6x>>t &"I<À -K@D vX%kͼQ{-/48L<T1&r|Dddj1)߬(\àmXi쩯9a ~'V#^mtWL Gʣ2,pp{2{6\%V;bFݽ8L;Ƿ䷂h\k ݡ Jˡ{j Ca,By_$yX`OD3‚tr)|t"e J'DPFEQC7YZ55#F}Oݯ=IJU!" WwVe/[klo+[qrߡ[F1ǟG}4 _97&f̉:1A< iQ8XrXsyJr4]{J\#BU92e9A PxvJ5ѽIUُOl-;)&j7BICc9y;M1sB qBNo"̝>U#3-XRAb@τ(.z ()|[^|8ow]4PtjZ d <,Z]_<%1"YCi w`483<0 OU5K.P>yY@đPfZlY| QqP8QZ9ƫӁŷ]hhc˜@7jGysZ>^<z8Z }{i ps<KEp:a/_%QMx~ զq6=(~NR*.``}2'▆X%8;?SK}!f]<u( &C. iicBc^dH g <,xG 'LQ7wgVK)hęʆU#(ɀQb1z\JAx(mf"fZ=b WبZ^ywH#XCKPN ł6sv#>-e0A=s E^~~jh&_}'룇ujdN%fB3{ w=V#6LD+aQe B),CX;ڗTf]f/C$yp0@A.c(K[oְn[%_8)=Uk7/xb1:vMI@ZOַ~*P*0Y"^`c d2s,_3 ]Cs~]eKdt\ܝ"i+Xxr/MA{oG~jQ6 J=g$ )JMz8NYi^lKߏ/-,Ad Oiϑ0G)P BTz $ʄPKiߧjrӪT@pKASF-x9 SѨ',;'_/9B~T"5AXKz8!4m!eg;4Fw?|Ll`F ݘ[IlGk9^ \Vdd.j/6)y};mRۘ*\9 Ậy1:R jq>*hooxPC cAb4;M'&%%c^79vz$71Bk`pp*Q`t // #!  Q49c0?4-;O,Igk2)/?Y#L/0es@Gs&>Y6?d/Ԣ@,戁yz>7Y\ԕ|@iy;6ˋ֏r,@ɔB/wu`h,5ƦyXZ!y~MMN̉鴏@"1Oto|Nm1:I$h)#a>t d*$a"]=̏>hA0gV +Yq ,ƒ_͸|)\7 ҃cŽ${ PMX!۰jf 8$ 7QQD,Ko\pC2ӁzdA UGOnkaq})d‰ K{_p۶`W9ӓKgO\y;҇K]l(0-'H qjɝhTO=U] G>2|9p nDn~-5^a]pEkif,˰XxV`m,¨CBt8,jA<{q?1kNRNptlA-afK]fZu1wWZJA+y_r3Ng_Z:ύTf-7=g!AT<`׮?[EX836*0'/`9&8Q$ aM?Z2"6'K?h6``1"p}xFe,ctPl s@t(,FIB oC$"JLψI5ҮlAn?N q6T~F_baAhY*O0{`*zSf vsfWB6hWK`TvzdgM'tb<[&]dX##0n [PTVzh%4C'Ne)\nU=P%HMZ2ؕpv|Q5øJjG ʘfwcV`fʷM3^ĚAv+&F;HW;E fg2ZvTP-Ьp3<,^v{q.Mw. H;F6r3f6*֣P;q-:!zNjv W9c~1c1b:O:Z@ofUuH@֍vk̳fBK=t;sCT3hǧOA$(#@; Nix(qS,j`ߠ3\3=gJQB#YT&QYZ,qCgIIc@)0[UX>K'\tNuּO"ጷD}Rvq 'aءx(R40w4/'N"e);Lp D٥oZlrcRC UgWsIVU\VeE=PG!^FqphlHcA6j^1)iit 6 !r Fd(4"$/ژ>"}U9PёNx@7[#AGtNXb- ƀ⣤"]Pw^0iF qcnB^m*bo$+W& ɭZ4sNnທ7_ k0l_λvN8UE| t2'qG-pN-J| T6KTͱԡ Fs4IgmH`1nK#.\H1 JۖnznoRI.X$0tR>>z[pm׀<>GkF[MJ$8K@xS ~kqJ>`1܅Z'0+ꃬj㰍˙ߴA!%T's8w=K,.e'iC}CΤ.7ndJf<ߤpr<_uHu'8<%}x.8XB(r>m1+5@qe-(sa35LॻE`<bFGITSi>{U+LW5=;^쇥8B[y4T_ ݃;PX',՘/X: 疇oRaLp  e޾tf'0bUVZ}eT E(̨ YbSԜ7m:?mxFR 6qϬ=dTLg +Qw:i7LJϔtX{F"PuA2/gQt"1S7dXipB@58P8?8o!;ŃOnf:6g[C qÉhPx=)>z2wW"H tם8X:  >%Ѡbؼ ]tωKuBo3CzYfmyZV1$ CA7<Ɏ,ϡ}1<&??قt.g?Y0 _Ɩ+/2K-$[/I5(nhTtK@̏Ϻ܃}')Nd` a5v>%Q0;HP&odWE&:~Tw4!Oay_֍8+-6 F*CB>'9!eťmtm˸!*u9w[vJ==<NMeoD`b`/̍u-J1E RJ4YTļǞh cK7d؅@),/=p~r)3g'>/NU*OŦjʡުyK0μ^Nnw/Ե=)؟n/9C$05SzKj #ҍHqz+Ga>xXO5IT|?Kn('qeLEEmh#caK@Akdr\a!xv]ws;nZ)fZ-4O4<;H ie4s ,[Wf ƖG#Z=7Svg]GWxjp`TywR]y{m|DQ[VG[_OmmT LY) P,?&Yƥ1PYT^`??_|K(ךY@CF}}g[|Jx'QlJvs{ S~}YNWu4h8Kآ n<. (v.5xFH0ԣcXE.MIDj_kݕĺRs:;0dn(7Uq=j쎬}uҋi9I|{^-8%W}0UsW BVTͥ*T\>J0b+M{kUa# W6ݔls]𲺜Y+#(+LSqJjny4Se* qE[15("(C9auVwDTt]0xCu[cK6@ ɖb>+X`,e3.Q:c`~o(^g4,|t@(Cc\>e/p7"ÞJѪ.!Xby~uuZ{V{"XˇtwYyW8> $L476B]x"螐[s;'&n$AO=s,lۓʀfef WEϜ\ӟкoQ)|' 4Sva0;KRaؿ9,{3 QyNLֈA\C*Z]YuHWY%vypgDZo.fS*4{4Yjhub9(ᶭ0 i%SrI~0pdExA `_fM0d)4i8쥾Bw ^bOjs–WFq a'k>}uNq?TՁZS׼rɰo>ؙn?mW"'mWArfq6VmF+UV{h{u}kj?G^_\JeiyitI\W؝+iMڸ+}p.׮#P2d&ҫstSnj`_Gc&[DC'+ PEo4;zDorHtvkP [(J#aI,2%\CYY6P1q IiZ EȿS_ZvBOBſY7oB%_6S/g'B h4ȭ,e䯰JsSP=h$5%> "|!Ǻm{=}k|lu>)/^Y8}xPt}aƲ^-X"%x^~%mqyNrZm<HGyr?MQjc RJ41hÍִ&Pvhɤ5u_Vjls4EZ9-1 ɒ A՜]? <%.G|ZѲum- Rҡ<$K!Ab{=$td8g.97G٠m9Df/[]&Y{R8{-3n:ɔw_IC/FtĄcկOH/j 2dT԰:>Eim>{Ɯt2߸EOM͛٘F+|`8x@As?GXVNh'ĵ4zQHDɄȞzb4}Msh&!qb9X}G8<>yu μ]M= Dn8qf@ꀔoY|AgC3j?Ӭ09'ŕv>Ve~ wx;Htt&5y|*d8XeqN #hQaJ}zd3-AGy~z-H#,q4xU0w |Œi/Gs"u^'-)>4z@ʺfg{ MWI}=Bs]g(Aj>_؟ܭD[.b J͚ZB3a7[{/X,ʇy`XRcmL'8]k:w&_iRn[ۈhE}p,4 XmlѲl- gwQG /,IlbtlguWC HU?RVՀi8zƨ|?/y bܑ S?{|\=IU!ŭXSܛuۢq.494{YpV}bn#!?k?OZ 𧙞h+~5&ehOy󹱧:hqVJgZ2U#h4|wV،P24 bA:#:cU? h-䷤Wed{3l]?Ny>c{3@o^zmy5Nm H4je< 1ԹDHαᖿK: I c-g>Smv+X24ѽs9o&޶犀# {ZOs޶B#>>Fn7D6W>F]+73W[ch$`wG 4]TECN|E eJi|PxQ19}ʾbiKVd4p(ǩȮ_x2%4>CJ+GLN0B*gQPZLb$st9f_,h_ԛN׊PBWg(>}%ݭa{5ŅAD+?Ø[ oʕm#q+$Pn;ANث :6w!KTk2y,Xl-72ct< msHmR,sH :ZLo06nWԮd !dg~zVcT5I*t"患 ^IA)nm̼JcUQicnEB mol/L~qb9ߕ2V~70A3<;z>=}o9WyQU<4tk~'f5!Z:FP~dp a+ % >Gn=3q٭G P);uy3 agȥ \w65DFM{羫ˇkt7~vH 6ڕZOy`B-gGOkOd,n^Q bVx`w2[+I> ,`] b1DbXŃs?% fT5Mmԟ)=뗆)VE>>yAbz -6s Ä8b5߳wNNfn\נ ? rՍG- 0ύsO>)zEcl=<nUy/@ &vy AKDJ f`N/JdaNT|$?ͧχ RlI%~p%]- khYNUFP|UQQ(3IUD(гʖf3TݞFtCc К-.ܛsu꯿v>Z?&0)å p:9 9TL9z£>S۴>uw~ n8'ї[_>hGZQr^aR;6/(69\60|,քAg +ꁻى2j=JN8}@ءNa/9116lTj'Q8!L#B0#ek['Ho)e.evm/K(?*Ί>beG$lΑ9Y#yGɗUFYm#1 $EZRCm2Ь+=f+ 'yŅn)YF#vdB! Mr<ϐ8GIx4/`]Lڭ/]L %Ќ3aH-Kbb3 IQ@xsesq~tCY-[0ڎE[aidZVh-Gp]Qrq27#9x hP%cx0)Q`m~g-[y[tSl!b.UX2Ϡl#M*ԽV2<$^?DRtXz qQ ܅BF1PqS ٲ~) FYECsaF5&cC|00vфt(-m ǮŲ'6s䨽vE$vLFل֣%Ui* %wo>I^'^p+)q yp4q{O2Xռ5ҭZN1{n&cmI o8rؙ{m0Ϧ~&lو $^ nY nL=%C?n3\*'K֖mn/Ee#+gkrEHR[DVQڂ:7la!F _LuwƵbg\a5AUR=ZR߾H:?UjύT{BqypFF.>!+*'*F`f2fYN7x7d.QuxM[0}~Ĝ=ljoc7GG*De?7 ˧H1}g{pS뿂h2o3<$FD@\`-9WԢJm"w¸+KC3!Cl>`]xԧ(#$bi>aPSK|U9?-;?B uAy^)n]yɻkvZKi0<ΐKAq#T,⊻{wF289,(^,h3^D|;U彵G$L 8&rf~P=i^S yZ[UwBA=F (z8 'B1J\_,K+|uc \f_ݝCgU/ܤBREIVx;0 tƲc5 j)@K c)73We'NI)\Ncp]l[ENaݚJ-^d:o߳$wuuNHd sxÞp B*0g,;"bq DD"#!Dpg5Z&}hks;lNofC컊v H'y$+ yWx'Pŀ7w8TAş{5l[3RsgdՁSL4ӛn_Kf:Y,_8 39EpY XI'jW1(%0.Av8㡌O: R?^Ę昆|F:{!VJ( jU *OףON]fݼ'n_㶭ILHw, bׅeTw>1bÊpsK .V/>U_q(p]$o Obw@X939RXf/ovkݭ J8z!^y;a3$=.6҈Yz\O^|<58#$j H'2 ǀPI ᴁ ˲*733D?[}8tv;[q+$n_G%vpKhָ#m EmXXn}JARoD z£lV4dW|̏DKG j;c8 !Q)"qO";<$c8OG>˸_ x)1oB 9LD0# -iClzN&YGhe5 |T\ ´Y @ʟBww,{Gp6|r'bGº#|9y (63*FMشӛY l;a>摳R Af[^&5:|"K^!NXɃHPd. pࠞ,"Xr?5Y`=w$6Pr?"9(A_3RF E3(qQ'>#{f۹5*] PO qϩzbY,xJމ,hW? KE nuꨇz\@.W+}iپujlܭ&U$RQf3=(saVVu66>}*1EIs ,'Jf}_#_ފցد3[La<`=xNG0މNJ+lՎeBFbJiv[Ά3]ezۀΔrp ;-N$/ZhQF7%bW#K|y-~TH7-c5bQkdq @-G עt_<(ln MT<8>5rͰs;!efCɝ8 O*g%fwd,2.=fkᒪ@\%Z7pYA ^:zb^U6uGj5 G;d%qx ˆ@VoIEx.SHqE) v1%1 28)=ߩV09%@3$KCg6"hRʒ'RjS5VX>RQ&sl`NsER oW %ki$kU5ɰ tj Q#(xt[6{VecfYgy q_:i8NepB$ vo_?ghCa}Bm$ XE/]ݯ_lW%/H?>N,>+Y,ƹt̶)«T nFk#&mk,_b &%Kaj@; M0<+@<h.Q 1<{ڮ "x|/P̑v.[W=˜Mr 3;syyͰ3}if%S{rs,@u1Fc)sEX$?XKq;\r׫/b8`@Rcާfb"(%>-Hs2w2.K)7 މBFBu+uϑF\pJr,MYm|OMn㖳GfF}%uj˴* ;-$8K,F`FUבvAMt' (X}/[ҹ,P<]y=uXm/tBmarW+ިdbVƜ5tEȒ~a/f0%8;Bd~"5Fl뷈AK8io0"v&fs~"'[]ŽwF6+ȉX*(/1z-Vnf~`0HeN5Ǘ9/ȫtؗHvB.}NaL`9Cm&se4!.\n> ʳ, WJ'mR76H@eX/u+iqd'A&%sF xtPy'tJnx<{fl7y*Q!Y$lu:=)uC',P0+E Aa,1ͯ`DvzxzWd]H+},@ U`2S-}oj ? YQJ uN%DvPE 3δQ}`@x'Tk|oHX 8P@sPQ$U8K v{m&gH&/R.JwX:-0S(M׈֊6Cp)g]au{"O3 q XÜmn[FΎ*ʬQ[ݔf))Ža 0%u}O8w_o919p Q&eC܍(Bwk\>ިpֲ {~> d8KL+' wf>,>}E0 B쿯P]L*",(9$)5;}6!>|_H֗Y~+No(hYjNwI܈O:aט Y{lW]xN,#9]noۭ._iESioLoEn2rh] g&%9Օ.]oj@{'8X=eJ_)b"6TBTa` -ᗣyNx%apE05Cy2{M$J&QD W<\D3M>4v GyZWMb}Sx?Wyqf({STI.2J\!.zmzR0>!H3j (!AXbړeI7N瀑{l6Io 2P, Ï\,Np&ipJoqsCP>~zǨ5L)egI@]E< ]>t-.xv@lռCdkSE}H4= 4A- IpxW}~'\5, =\~@U$)®7\_꽯dcN( PTӮy4geO՗7Fxn#0ooiL96/Q% Q uFE4E*,$&ŧ#q.#df'^;.ː~L1nxƶmxְTlD,K>&OW44@)E!CdЂ7xJj $" ݇cIgߐᰜ%w %V0:⼔\tCYG9wWN]d<TȠH M7$g磮4'=KeA @jW;!36CEм2SJ_ J`GB:Ң`K:)'=%lIKQǛk9OGΞc/h asDa:%瀪zsi)rIs-2aXer3ܳqtw 6Ica>Hlmjz 1NUC (ǿ X`.Ub <@0k {?Je83~JWd]F C( r #" ɽv! G1`qXIn{W䡼 27x{xh([T#vsEx e^<%_D;+o2Zm*Gpro,1ל'qԭ=LM2$Os9s[Ywxu S\ '[2L,FD9w~X)5zaya疇 ŷIRL3? +)L 8c9]W ץ/l p8r@.߂'1a;eqj_D$6[{SA*$@ A@E>']ަmW'h12FA]ԭ>Sc+xu@jPڍSń#zQx9OYPg#_C <Ĥ0zb zG8S$9 D n q!ꮿzeLi|)<# SHP@뺋yL{sА::nOa^PkƇ%WEVM1NjX4,K Aw/` y=k%~M.@D$! $4 $A|C;\ೡ/lJЈmK=c'~a6X DOܘ[iE]EŃKjW|ŌW:*Q;,&Qc ȋ9 be벹S0%Ļaީ 6\pwrA'p7,aUUI|͖h/s tG8+w^.I 6f'?(2{PWF<!EvϬ|i`2Be0p!=mTOV Dn[K"k?CS^ =U ۚ *h31~0l {O lL1 :0jp \7G1fmLR"C[{ǝ5,ܵFdEtgՊgbPxql1f%|Ej5>nDjfJּ#0 }q_e ]:Xg<$V-߈!s(@3Н+@Yi7<+^W n=Wohݙ|Ne]HX /!#卧{돸s[4nCo`HJ?iAgm% t=,ۣ.ֈ<%yK&Í66|Ԟ|jQ_/8d*|Kt*gon?AG K俚:1usPlvOѤItԒ˻G $ *AY!f/%*/ط'!S!+ވ&p!˫?rep1iv߭=lbb8s8qAlaC5y6-)֫5wmwSފd2U3=:> _W"zw2{ y_sŒm7/}~&P8Vn =A T C4_ПIB>,T0-LI=JJ S:EBD7Y $d9j2f h7t 3&$Yh;:F K'Մ }1ja$2y"!42 .118{'D':q$X&S4_roEƀȒ !Hu2 Dme/^tsoT$[s)JpWr˾lPuqC =|:bziAWoNwi1m>''[>B.uT{J@e41!8?\7P\7>˘9!aY|԰!{ݎ9´h) KϣC"G k+D5zQ27MѼG$ ?vƃ†ũλԷ\#䦋[k UT^dφ=O{b:/lHW/Ụ/vORM"(aտ<;%ߨˀ 8` 3.婜_& ^*{1(U)س򍁼AHsT,Mgr狽K. lD.,u9uS~?:isWG+=M6Զ}M^.$ū)p{meOm=;NZ>x7V0>r425§,t`w"Hf,S^'B;P &8%V֞1)e &xE@smT{/>|1gTMͣvO"iRE8O +~5v[> Heg?-fd2UMbz('i"xl{mWFGFRaax Ꮭh+X@uzf Ik5j o-Y+x3BNPF6T"iϝz'P^{ۄ~uLM,B#~e :R_2] } kLU8DU|rq,Zˠ.0QV6` 9KW,& uμ*wbrੂ\DH87 V""$ljFG[V:2d34eA m@J2Y&ܝ mw䤜r,vK(N-kF v}j Y!˒w$T52TFణXFw&|.{ּ-t1z#']hӴTSt@. {I=oPDxF6/U.ȫk蕛 >6+wWn9,@PXj}P6c_8hRv9JCJҝ cT%-[s[;p a}hw>ΡM=9x PvO)d!COcrˬ!*Ɍ7AM{W20MPD& DFldT wW'8{j^sdzt݂8J,? bʣ/fo )2~?Im0#^2zy[0Yt3%k@)|.3YJ9/'_-گH`?0y2aEx#iX<'m7[u+aEr뒠3M|v%H%oݙOx0)C,B x p:@HX[o *sDbW]tO vtV% Wi=8V)Dg&~nf8V`Tř?6oJʎRU5$5K7LP9j'KPϳ]hN >|MLt7L"υH" Ț-/2T BɀZȹi'kwliB"|QP{(ADBC:)<LcwwAaDPh=~zX #{Yۦ0cK ڗ<Ɨp$PBST i9mu*|׶H䏯t .cjS]lf$cVh 0'+6ixG9P6fsXz <5SwMbLr QL15]gLI\weX$Ӱ0 G? XǓiu0dBTh]9w+xn&viG⋛ kP}`uD'j MH7cQtȇSql;9~}ZT7^A,^܉2۳3l.NfyI.5lE8HgQ*Xy.7epb2* %=ʽul0so+CwcpwbV(4c8 1)xMa:j[Lɒa/j}WeRIG\9L!(4'ܿ/#% PpZ/s-}U 0 j[uI/;9Mˇ83? vtP.Uʟ mwa]J.B`VRrԄHh@P 2$oЗt{۲$(d+8!!ϡ]So$AO D,C4 '9Ħ YYASyŽ=Ώ+ tl1œl=7t#\mbj?IMBr8ݎ㔶#^UJ'xJ.zr ԾQ,ypW7IV\l4\UjSpf0Ė, 7!LE=<2 l{^>=/wMjN)T`a  &aTGU%I x>jԤzC1_! P8Nٰc}1VwbiM% rp_|ל&dx[0) 83%KJ#SQt to{`I@O 8 گ؋5=2I'k N}ዑ (!}9|ͥԄ(6[T,f^Bޫ-s 8"+..*"7"I((dP`۠)06]pˋ2װhc Q(qX ?evIE M"]' sTO[\+΁:E%19%ZXNԛa.alG4f$hNU4ܸ9b|8v!iIPUlq&Kq#c>Ja=/KR;$EҎ=OWZOۙoEhpHYYPGfhÞy 'ۣbƑJJ,Curm" fq[ap 4کx.Qz Wsm%9Ac?#7R3@$ujht<cӪkHl3^7~cyiAX["_$/:m# /G= Dϡk=?t'Y9$*4ywq2OV9BGUbq\F,)eVgJI8gR 3paѹD| mI|0Ke/A? dD1f!h|Fe>[_Y%i!2VƀcIYΕ|QKR `XE:YWԜsSv% U^rwy^6wbw c~:&X4D $ZB}\WU]vrwƭvs1w fH$lchFsy-S;]4NcgJ#Mʹ |'=@ޝ€>dV ^/ὸ_Ch kEiwwi\݉;B]"ӄ_s6h74t.4S/h0BTkΨHӓmW WO:D.qpM k3fEi30[Rb֌.PZ!rXMoАkw{(69WhMU8Ad?A^)' O^h=\Ѱ@>QoVd$:cHhe&Z{~'JdJdV% tjRh[U\\LJWKZ_ >'.&ʹ_½ ۩fQ|WG"Ł-~IN H]q*K- iYyPc~KdY2'}߽5E!W MdN< ] J4{JiR~2$,ϓ]/pd/.&ԴpnTJME`!>;]1rA1M5W'~,9vG "ˉO(k.JEUs1EHbPsN~O]$6MFj9KB*MU; Fd,p'M7(kLݑTfIR"OPםP6 p_ :QV(tU 4!GCرB)z[@-z ^arWe {3(|xcQ?L8bwJcjЗhC٫b䋺]/BF1K%D*X4hK}+22+/\EXBЌ#IX=;egV/W PM,>uN%ɘ4 tj& 9~VKZS#H*a"i2UñLd\ # 0-_#M2,Sk/.-q]j_慹ٷCS0xul!(/ʕ؟C޺=eWkWG%(:\ ^4ī!#d5-@"%y 1{x6*U?ɷs~cibЯvoy.M`2 !&U<78~IJ4pdgx#7ע"m\˫ PoEPQ- bTw'V }5.w0ZV.Y/,/ش8U,9;+R8ƈy;UՉx">PkX;َvysX;*. < f OL0L $]uװVS o9 .<M#7q1.)4rMmPvo*DXRp`:6!Th/ok#¯Țp!Pa>?$}W&ۃ^ (A_4Wu{&I5/sI ڃ:q#V8M7]޵12_,]~͞q=Ϗs-,&%Gc%9l4N̰uI$3 X>g :BM`YLr(-()e:f4}H!:c"(fƥ)3鲜 >᳏:}sΏ89tty^fc8R؟Q;[=cmyZ3qAh%~0ϓ}J_ n<~AL{>'ݹ.I׮ՒNUkN_㩌%N(Y)N'\_$BoCI[/<^"Y([ڕNFE/t84wKi.;%ZT*^|S#b/vLb6 ٦W{&\%I${Y4 C V&8Am;aUu{i\12_knO{U FK;<lW=PCq)X+Jrr@O1nWؿo!]Ks.Q q\˓V{ Etn: S_j-0 y%rR -G4J(V}D`ӧw(+P/h!\1Y[,@z&2igK'̫G^9e:4k5=.!>2 'q 2]wGdRgْ+8)ѕWE he",2"Jr|/˯ۨLf?˯n3'. O.r: F$,:Eus`W#V~2i{ BED+ߨϋ?DKs޾΍ VWMMMDovvz4&/zppw;]yu~&EQΑ{iMgVBm]~tyfLjn ^ @u#X;uͼHUY_"k7R%yzQQzKyDS RQ&uݍ[GÞreۜa%S"ReMMy}D %/6 Gͯ;id(*h zoSVh[wLS޽!ݼe*WxK}WnjE6뿻`{/ƶo)9y&0IpC҃ X.gӶ{gu"m'p+VUhNMmu|w?Av/c,Ŋ,ۼhzX\?4GMKhVXt|5=ȧ!؇AXx{֬DNҫvMn Gw'FPV;; ֶ1l=7-/$'S0=jIaw_ 0;˂}3[r/3>{3զzgf9vTGl"p'Z|Zqk]XJC8u!P<)phtʛex[}<Ž xEJ8кD5Eй8ú5Q釀tP{ʙ ;I%GF+X?z,\2!M!byڶ@dR$ NJ/>ԉH/!YFq9gؒ>d-o@uM&}r1_E/ Dq\i3Xe388)LYF)z-4LKtL>OgD)&ƌ2^-%#`wjOiPRQ089X=Map,-͋N,c?z2ijҿ4&8sj~~/79+c>h0ñݯDI HNc:of(6]~{zVǽR^ci--c"_OL3\ %t˙\+BL6U4!ra?v-=B%ˣGt*J /ѓp1Z7AlZ\@4{%$D#8DžmNx9 4tVTƷ%Ei"Vȕya)oX1$ y81/2uN#.wQ J(2ݛNHZ}_9r!t\{ro*yAT`g&O E4PH~YTxtdz{2${ㇾ%;0i wӧZ'F3 R9 4]Swh\ AfΤS6eM*:z[nxK/紎=/ =c?|dC[[OI:id]_Xsf0K;aЦt|o豵\v%e>mݔ),w $c/BC4.pK0/{B0փe98Z"*ˆĭos HG(`ocދ27H~M㫷t~ȩ fۃlpYJ0љv`B^@s"SǬlXL͍#ͩdʴb:q UO$V`K;}dָXAwLmC& ǵq}<-'sy_h? bU ^wA~4>prw/e.ϻEXBΧoV4V}?5L3LQm~,Bэ0 ah'Ւ Rcʓ\7/pI|k'$-9Z\s,-]=v3\!̌X""1EgR!'R PbkՏ~^hIj{qX@KsOAg $3:IĜ1t6Zqq@8hޡj59%M~_W7%_}\|g%3T婐j-W .&QAR2SLMy.:+|%oFFFR}\R3:>e~X MubƁ{R|W2P4J} ݳp W~a2P|Q5Yh3_4#6 @7]'U> VrHKѦG56?t_,\)- @XBĦ$i۬Yu.)wic.頕;. 2Dr~WN~ nG"M%`,ʌ=$Z%6fsVpF/ }dbJI'|#w#]/>x{NYE<>[s9ˑu!.蔖q:aa ͌^~.]xyZKaB>mj)1S|3]zW{tSĂI;"'UX9O9`ҙ.reKhP-})yIszw[} 61u)zNyge5M٫Cp0}S;R}|Ԋrfݨ{cz)_k#Ѝ=23qqY)1H31/1*n$܏g ?,if $diEOqIQL`M[9k-_5TCiD|TMYNnI ebh˫y^ҵֆwyyW/FĪeԖ#~i+ z. Y.k-@:\ 9Z,A4=1eDP5=| < :)"(iXgz!~Y^Ŏ==W|C~d$^g̒Gh;Tm2vg,Xۀ3mc\v@Cv' &rgt Ds`||V2Qm3u87Oɥ,Ԃ@ƈ,4σXf)-3\!ċ|_qI/vA\wnS6柃yHKZ,n-՝y$Klk5B1 `~ *Bd$7)Ѧ8^.N`XQ 'uRa*(M%~5YV>7nA7=_^'E`@Z&ߠ+ -&vX_@4vG'O/)(U|-'0bz%jIK> t{=+|MndB/ 4e:&Z}ޜSgu6=*m;2[T%?*Z7yzn;g~n8^"Ϣ#N!߽pfUa>p\]<ޠ& ×Z8n#u}[[E^7spn("-u]DSɰyFx`%0)ɟg֢cg¿<171 bE i"0<%e\گ_28FYͅH)&NHcyxAurU-t\4x ͦgBJl =\ W&9XE%a9/jL/)1+N!O˼̃&07Mpy%M~}]qeNODzwc"_Х)IWr7h js`,<0N+qMQ{[޺*>NA8$Ubqbb3Ynzۛ4(1E1G ܪk4S,[ts%Ƿy0WԓGYa{5o -"W3(DjC?֝r;Tse2iԂ932y_H]٥=%q/ˆ^'coY9-ljp{ 7+2 b8?P~usR8?6uj`gj%5=8)uNճb8:LȇCj#0hե$2;[4V( :Lκ,\5Nkpצj0~zy6o2ȡۧM>n ps X`iE!cV֬UvXs1O'lflI[où[{8Ou]I>۰Rg^~s4mXޛ׹xh!Ў.`}m.UٯKힳO ʏplӍy;`+E8dijZƅYiW]:p}>p>\4,KNY\Jv*jUKa3WݵOö##ms˃J滒7`[.Çq(aq%H!x9 ꎵa 5Q/d~=Yf*͸,"g7-q A"c@\$]81߳-o ˞[+]Q8!δ>o7/҅N@6MY5P^B78 !>sSr!͒DQZΤ$gBʣq(+g.,eaxkpPc*{S^#h{j/4Lm>m]h*Na]HυRynyzgwW3|#[g?鷶x}YA#$i@p&ߦ,a앱 kw5lyHR%bYB*fN%CvURjNEO_~tۭMu*hM|OewJZP)0u% tH" Z`g7nG C#CIڛ 5Uan倂be/Tٵ9PXQ`xZeb 3dR|3}4p1rh 3 Q*jTט %N}7k@~&buB@B7_P&ae'U!4VkJ_cQ&%%xDQYjG>{U 2/!籐& 'KQMS4& n$%4.J jfBDɅzŢoR-a@gQ c'G"T50rBPp_ac U$Y^I%~ω(}h92љg0aI8l hADXo]7$IM]nqD r>z4Y~_eӟsgײ$@? t^J| 6f L"%c}H| ,`sJߐ[JK_#fF>}i 31:Z[C=wvJy7 *C{YʪYnkǸMa_/,pvϛ=i/Sޤɖ|/<>$e+}Oޟ{wwQ/cdN S;_խض+70b85p]i$(ۛ>- |8Fan|T(c<_ s\"lxm4vG9ye6KM'z8 ʾSh4u9%\t "2}KC@{oN}siҹIR,fSpp*1u1x~:Pa<|M΃ ^•x8XcUbͳ#Imk'9P8NUAihJ2gRQ8# G)pї`8b5) Xd۾5D }wy5L_괛=KZx%jH6" ,Zgr8"4>?xL+UZ{aݑo{ęV•N4!% ^dRh28 <{V6ߑ|Vm@)=): Lbqzzg37$+,Og2(~ڄBާE(0Ů'n<0 !2OwA o5\\XtK۠ϔSй8ӑMwzAy'lY8l(ǤAx"z㷖T+s÷i_tqgdk''Z@f1"'p۔>YE'/ST e=Q|dϳ`PܾEXhcbp9M̎A.q=|@#𩍓 UHyR۟Wvӧ%ٴ0ƹy qƯ6LFCBbm@}yv͊^[_[!|x.OLq+Wz9p?s e]=DŽ6@݇e>ETbWrnF'2G!鿨0ZLAdz93ceIrzX L* a0hq$ "MmZ%ë•|oیP_N @ j=6Tb &4/*"cxWcI3rWW1w>9q4k+&Bc_!0Xo2S q$J,_{X7d\g\*+ExC0XWd- 6rPA?LA v?8ǒ)̫aRcJnh5O';\Qz;$ DzFڮ8J 8DxDOy[$:))RwhXESz3t=RӋ[OcJ{ϼRk VVugF珸d) ?_!UNK~)w~]w NcNtIVW2AY]]e՝c,۬w}X*!u@rVLh7\ ^S9Wmik3\Yr)v>:A2q(quJԛr"awbdJoQמ:;WTZ*E5}o[gJOyE0k q*yj?Rd&$R 4#_0DVΜk:WŦ.,n_˗ :崇+`wp#Oh-tMLXryGXs̑Ԝ2Wՠ(j7g?;',ط#Ζ ]y-5p=SƤPzw%h Uݐ~vny,Ǥ"+*7_bRn7j WȰJBGp:/9^veOżCc.گVE2ٍu$S<,w}Ԍ)-ͷC=ޕM/'$pP6jS` :_ՖJ%Kb 3@+LΫh)<FFbYAa=C(Ͼ5PSZ>yFs0Kު`zqE~_W鞡'#җj g56=91(hf:eiP¤Cg#rcqfTjG)}x!pVuegmm'\_x|ژ|[|ΒXe{(jw[+.L2("D"(!$g֔}޻{w^k!T5֫baY ǑeeZ̀@7,kϗ.=fʂ 2HS GERڞaB(S:Sj:ut*j\&Yy6X Ū#mt(ЭHxz݄Ht8ar #f9$໴טQwt1k )V8 b})%AHYzj]msfrv%_יؕk;='Y .2FN]eI`/\ >~C=<;!|qYp@_Xzj#R~~}lgG~Sɹ'č|J-JvU{ pŋӢdpPiJsl s+YFhFimx?&ȼ7 fSr2.ǚ98j:>McK=|Yb=uGX*) `,v8+(\t&?ghj;eզԛH 2P)f_#ƀ׷*аWsV0182V,-6Ĭh*x޻'sBLq߉ْ%aXWdczkroF([,>qz=ۑ}*ĺ$(C|v]gڶfw4(+3w!+/2N~I셫V3Z=%b+ *"eJIE83ϧFVxk9L,RVdSM(R(.0\̂wM|m!&GgF9_̣7%#yBs"KꁈS?啚#hjDʱ)*+X7{o;j/8P[;SE#/8BCzT<JLYHS1贐bRS+E жc8MdE_v.WLTPX1iBH : vA0=|yL3cM>g/km4+⽄{ >]? n\lW6)&8j t]EK9zc鼼qP| /ձ u EYrv晶J& +)Lsa_J9O88l!y=f%u a0Np\UPSe)ȺgX() .ch>2;Qγ 8_tVp@2dook? _M>3!Zҽ[*)Jƺ~>BkI4owJdKklc:6|:,Q <+p4  K<3s6 4ETP\3b|E!Bb"O4}ol; [9O5p%F}]O`&z+CZw_sw V')C-l T@) o"ߒ|x /)3ӴyA>`"s4G(ΦE :W s 2 "bJpEEf?j.5%ayB :? p>?Ѫ_?#axh8je "&"dK!D ZO3wE7+ gE*, Wu"O8R onIAY)HD%L. ,ns st GD'GDHyghzpTJ)~]DE1̦sw^ w@.VԬ?knlE:<%%[cNDH"nD-R)ÀRtJ|"Ϥ*#{OI?i090ѡ|߼71~;V͌tHٔazq с 'Is(T= M3NԀN;x,IFHIw0EЋVM\@ja%<΁@Ul1IJ@S`01%;ho[;.Mt}uK_Dylw]Vz6$z @D栁 Wa)v}-WH.U2۬wC8)e 7?,dƑ)kW&LBl1ԨvcVU-𿄂}yX\Z޿AIp q".T1,'Ѵ_;,-y`UVcb&}t{ߨzv/- cO>PfY[ TܯZE$.#ZxxIXϒoFI hɁg~_W&jҽS&'%24 nNQ|Ci@; h H)1XW I&5q?H!tc%šJqHdjz=K[iNxxXB= 0Ӭ6(O#zh LiyOTLītS:rF8 lAesqr"9ڬǏ ,xy7OtT~pj@P6&sGj(i7(4ضEhBYJ 5~i3wϏ*%bwh53ͣKsSxk7zZ~HNd(:g:C0u | Ox6X6[ɧ7'E: ÈP 7eՏ毣L旲2mP?f Nz:.ifdA8d$>R i&?-P36OYp]I^v>nYonsHSs|*T9p  d2t~,ןQk硗j,x- pd˜˗F7Uz/ݫU<&8niKj \pR\7 4eE|*0RgU#Ò ^_g~>?a'#jh"UU3G XE'١(;k=-$9MݽV*lyת+K`vć8$0iD71ҏ!f((?Qʂ{/q+)₅#$!7q I+clAS?O2|B;NY}!4 :U\^ߏ̖+ 2( >S֜kNN]K+"FqȠX*H|X{hiRM,I5Ժ|Nb"9"oM"I9%jbݒJ\f*oz RiZt1e3\]K(I(2UG+)A0fLLx*8q&xX%)LOޞi xqGJDK:6zG\~t鈃F .WpWD`P迸%"qf@ 9Nj/yg䛎4RD&+rH}ۮė-"c[]>Cun'M !%sYָ:,<%(Km$qj-||qgj戈g,4%WBcL%SI3 Adazɹ%.<#QBℇm76R'j:y(|NxIT D"YٞZ7AG2IM٤IrK(8H|FtoӮZ굺) kgz٪/+`"<N3(g^l{{Ie_Ÿ(L)>8x/J) I*djĵ ~ɨL ycŞN!u^;lK=Ҽf6Mx.GQOsZ]XOKr-]kOFkQz_c޾$ŲkչM#|" V6K-:j][ ~\D<[&_32v!q.<*./ d.r ~fYѭ}}&0lKk ;No}̝Z=1w' 24q̃KW`_UK;,.l 0f7m*gY=Рu9ީ`Y}.gM Og:e34͏~H O -J85a$d}"C1%6iA^c"0?j7}R>%i O{D+X-/'z<*(299S16n~Tw''Ss91ZvWξTQV 6ł̹A%H_kjǿ\jZ0 iJ%q_"-]$Eh|+}yiE~GG ^C (L@! :ۏpu_JA@%=D#_ y4P7U:POS?[AF7Dj>0Vd|IH,"8t}Bq3,Q@81@_}09?b}^{B݉b&,90ڢ`A9.2Or%zXj:]}[ր.~EJĸ  UuV޴,bB*80ڸvΉ/K_Lg9 t:`.Xv=ܙk/҇!fspGYs8q, 9fe_._!aMYZb/laGQ,/hR,Ҝ-Qpi@E'$Qt=V 95{dLQ C@7KEZITsy(O.E~Wb$A2e[PY7iN wG]*̅Gqv w"ּD7"O\ UO58`/B{ŘNIP8\44YW&mɤہ:2_z0uyqHH2&DxpO*x$@Y`A;ipRc)X.+u?hՆ"}b _o،>)Ak/g|Oli2q}We9t4v~l6NH5^ *$p\^Qp=fG^'cus#b(UB'0<5 }l䖥2ù扇f5kec9Mc0SG p,ވ|/~-m}ȿG$9Gd!Gp,3hK%k 30Xa}fQY+5u(W,^w8X8,xf B\4SY̒!ټOW(8̌I |UؚJY\ŌQd".R ]B?8eB" 4%c%DUIrEfqd/hI4[w/}ZY"q5>f1k\`b!IkBgzz[YqpEƽiv!3irL^`ǫb[Ѹa1B13tF&p$g>`+B0w]ؖ3PJYn*Йx*eIS9!q\kvG6o|9kehnU)"R" 4b|g h"aQN-zW]./X^,1,5|}P" z7>{mߠu2z瓛Qgٔ(^mgG8U}dg.1(wWl_ 3&TO<\dS 4 gLkx[:F?);3kEqx9[qWؽ˰nACY_ë,Itbe7ũDuE/H \V *E8>W ms^RLqVadG$xCC,}#~KA.g[!|v6۷WzmG; |݇ ɉ-o& 4A?̞n3whDfvG5Z\ͅ-ͥ@N&lr {'+w[+XqP~\.>6A厎p3qs3 [#I1PxR\t'#ml縋~.F Չw8mu"1{: jA!,gdsdP]Õy^FoV=N]V p\(S%2^:x'VmP/X\KϐuKZ| zWzlexCv=ɸJʎl:xRgw L@:̪~밙>@-@<6) :9!D  ao?OeB(/A4bhLY guAN5H&[rܓ:ÇOM.t0ۛt A D_0~x1w2l}I4}y~kuߞq3,5U;V) i2;w7#'.s<,F'45j,eXN2x)ثrA5>n[b멻aP$>C8K@[UI#(K ߪO.yW4$[U_-JƠLY\r@)g UBpa-Rjt>!ck7UyΜߥeXՠUy}Ho7 D^9${8z5{v jTbKa}4IFxkl!\|d}YZh )$+a{F8kaYsX)*-8jJ4b 6 D3*-_,:x4K -ko}vn83 dx?m|bdZ9.8lZd#Z^\®"W&0fOp(i.1qEfj 1:10" ]Z7x[{r'cršS\!f?L2eד:a˛hJ)G&m Fܱ&\^3?؅fxm?ÃW~]s7 jR:%D;^B {N ?N{_g}-M\k]I5qpY !k>9/wv_$}9>܅! *}(7e۬wTzdx# gU!_J_:2 <$EV>C^%b˿5Yp67: d9򿔕 mqó'86?VWr+ڦ,=g)"WTǹ|bj2/_-8oG|i8;QIz;)jM'rķuU/==UוֹM Yy8xg{~ y=D-7iS󾘋¦L~"y$"FGMN 䬷=MP|Rz13|07zå;N$]aaսfcq%k0Mw){ѷ/kUvMzf |: @*%C3,@6H^n'e9$H#sDkd'x" 42ͳ^,pA~3(Q}2b\,;/f˞#N3Ѩ"qkkjN|ױQu"h`Tjը4*1.z&mWKyNGE\+={UqR(mϭPv)|V߬wGP^ c+K'iS{^- e&^ym=grzY;f!|[C&!uOfA3@P*N?P.{صﱶqٸY˦IW^Zm)lAߩ%^(!ot51zK󮇯{6WqܜJ1쌐𸵻|{;/ h,XqB\bAHdD$~})N"I֟1g?(QV|BITU!ʷ>tΠ̮n$]s] #DA9F)/TnPdxgr֎;$˅ecΠFrI.wQ&.) db(4!1,qf_6C3v \=mHl2市eijz*!?aP,C _Kg<-s@7Ш-b9R+?nWVU6Y|;A)!=|=;`Z) p&M`kU5.Qygy5аװsTh:١W2 *].3Iq3}>QwRdh9aq mGk AssAc=:qBg ̬`ES6,,|cP 0 L艃*Pv7}Ց˒ WsPc֣j̿bEYxc 1@l.0Ň%M*7F̄$y;fY"W S; 3` J#t&ri*RE'qߘ|q͝ZIk ea~$0#ƿy $(a4Ów4ʀrunzK͕lB E0ة2(~epķwQf;Lճk!$[ \w!q,a)+fS94 |o|cQMXaJ P'L>;2cbcAnP{}ux}0TgmIkDy-Ӂ7*E;܄W%QGZ;[0ޖ"" mCHFPÝ*FVG)oIM&WwkuNxe9qtn >;jŗ7ɸl^/ɹXM!{˳y,_}?4jQ\L+uAveT)Ţb, %(`qNR_oh=,WY;!3? p[ Wā HzH#8bp 2Rz{v#3m&Cs)U|8jJ8dN NxH"<$a4摶,zx^~SOdo|JS+ڻE%HiRЛSw:يL+04Pq`;[^ޮOɣ'IF~0f]ŦnLvf%^]QrumWkb"j.A [TKZ)l(Fؗ|:@N (.GK &gF ]qť =WBPQuzТx2oHsh - z@kT58Q6 {W4dV7_vQ9xjۛJS'okuRqaΎ0`.fF\+fuL` )Ivztf3PǷݾ.O[Q35ʡyTt~+yR"fG '[_ˈ\x&>ʖV..-25M"4;X)aBdw^ua|N>ENWsƊG輘y~EkuV!Rm *} 3?ݰA#. Ǝq@6/ hYYwSK! KA!ZgPlӓ˳dV7Mҽ#TiC0gF>@֊Zy+(i;1 ^NSq~ jп$ g_vy[;MŰ3L ,鮰Sy/ݕuE9p"twi7,c,2$b'r  տ9 V#qT8 1J)/LC#X|,wqlBEJkѸX)γ>Hn_kFY"S&#'ɉl')>cKDr6e*^sMNL5w`S"XSKg؜{7d|c<ξI>c3+o릇(e5tYY$+3_ j^|$␂@XِVA3K3"aq g#}.wf|z:YrbP6?SnP;{3OJS,/4#aq7Mt4Lʅ"B|'Eұ[ĚJfY/ClI5Ѵ0E!e+r{ j|4Ԛm^o}P-مpxXC{a›9HYYOf_)9e %[m|Ǖn~½+LdoᛘsϟMd#({8="]GϨZC%݄6'ty.LXL1[CrJ"L'Y*c,yVQQPLܟω|f"0|b Z5kr)H{WNU qߘ, cWeAFSC%^lv7Sҍ/./xM^ ղswy_< ^*~8CgLJ7 <'Z,d+KMTTys ,`w/0_ja;cͬ(zq'cC0r1]Zkkr$3)_K ard9V~i}W*Ά UIV$)!M)nT &\2R^UȳY$Oiݖ̱]b{h5*fšSjPDBggy2MnN3>ړ.;%ĂW Cs}B q:nAYn*I<-DW iJ織NL?(TR (NٿŪY xp69K}Mh+-#^M+U.{bov/#;#V3xn[UIOtt;vSU͈˄p BMҺ5nA|=,b{YR\f{VZTK~7гJ==biFZGDcpu>/%gAwCn2. L2}:p3ud?D9~j2|0ۿ@;Sl6sWSwUM)_-QQh FjYf˝]_Y9v 6δF(4w|Kܡa嘯أˁP_!*ҋy>i2J*Y; Qg RJ?YVwj+8[҆ce=QU\ 耒тރ6]8z\_jiBL7SYPQV0{8n@ZJ.GXPL2lIE 1(bp?@G}~܏'2p[Cd 1VqHҩ$jS1[H Qq2 ^,͊4CNP`(S< )/gkGŞi(&vDZD (dsԣdh9<M_ެ[Qm+|.s7MWj=(ZV'ή{9AXD̈1'&@`)0.x%Y32y<(U|#)f(B!= ׌a'6Vd@ݪuБ5_c}>>)Sb&}XXnyGQS'/|b7_~kĬT[ <>\q )" $b,?Fu w8Deߏ̝+h![蹰+v3&6"ǣE-< UT0UtV'DE(nTa`oyᰈ`+{Jv>4-X' c t>'ID3ʈSp(䑗Ս~wq<{!ew@ƱgîvE4*ayNUN@O-RQ&sT$p'{[j`}^=ۮtwE4Wвރ'E4ѻ3cI?p!K$pi< Ti;"^}xQƌ o,!kO(w  ZH}q=öMj׉%[tmnj"GlIOcU+(w($f0 ZfAdST$s "zBX/4,8؅+Q?zt^ 7 AYӜ|`I:t|,.r6Ò!*^z/ەw*^f&.OA@9apvq~WpgQ۪kA4ܛT^hAˁdw@(t"gRdrXR_qբ W?t_9[k _t Lܢg(lRP8 _˩v | +rR.Lʙ0=2}tm-lAu}f cVZ׫ޒL[5+/ >vwFy|'$*QGY6cI˜2VD^BŪDXriY )TFgJ"Ng`Ӻ oB9O+HtT\)B;C&z-f=  FP8a Y)13g[=+VA0@)[J2,6_P )_R׶˜k6N uQD*{Q|OR_ Š$KV% uQH5clu4կ+S4KI7ё%Y`xG#<(ze" .MqB01t  &9lu&OJT)2-VZxG 0p"zY`P($؆}FyLjJD`ݭrK#"Tuq`̕ d sNVT6de{c{gGTߗiYaBkyR4nj>X6h:XFf; T$c]EI"٥rْchHi8 ^j\'ki[Edpq ^Q, |\1T+:욷EbYQ3V"G};'GA8Q((BI2 '8Q[gɮe_SmU[<ߺ=_TC5^J*[8?>~Nx]?Mڹu 'pזz;rb}t4,/楈m/(dFXvǦ9@W+=ݼǔi{Żj9⥅Pb*wX?հTǰbû?l* ׍(`u~[Evϭ#Jx.DS)Odl;k 676ŋtjFmlP{Xȡ}ke N?wEaW F ({> s#ڴwׄ< \$OcSjeC] Pvp9]mKvc3ۚ#&c J?U$ZxgީAUQ>cFMT=w_Uy^#g;1ײY;$˵1[ǕDŽskMfU3y?jA+eܟYP EU/w)A vq'dB g (0$L;s XKeMXGe5(^8[|gbHU"K 1^) `"+P68ASID*r1!(1AeZ;kHlm ..vE\OsdI ݄[%M>޽ G!8֙ӍXE'xЖe8F@a'_q;~+UiȃW\tlLa΋ᩜx.h V:x=r ,%ȜYhZ|m-[t.1*H+Q1'\Q9QI1*<%'j6VJ\TY@}Sڨre@P`$Ӈ[w?D{PEG?u1`)E3vW#DȀD_ۑz}MXlqvc2N*Kv|hLQx{^BkUb#bVm-.!:o}) ڎ$j#/ͱ/(١A_LJ5[ 7w'=An x!Ia>{k^u%d<{0bh^Aod$aJMUT+>цPLef}Y{8՚_3cI~Y3.[=)_wS3=P ْwfzKշ]6N>|;$)35 ɩ4AJ~{wW)\˴\5'm{7(j,3}DϨpYTݸls)}XڙةS2Uˆ[aS:y-1@߬8%t)$ ,8)i$ iiU`k3oc2뽼hHp%+]I$-}Ф)aoۺ}fboKv8]_8\"I~_[gǣ9 ,]i4)ɔg#Lȧ[ K_ Q˄&4 P+_pq7{ءRH5>udĥr*IP̋#Rt҉XNk o7B-ύcS|g=GH]X[k 5?C4TןL)XPOvE?R;7UZtt[r%/r1|/bo2`8tDL:ƩPb#N&iԞ1nZ~[wC_ZlAFfMCF{zxl8 `5C?y|NxI373I;{_}S0-bs1 t)nS#+ҧ"qEpnK7,݃`m MnB-M,=Ĭ}9<=[}VJ觏;C1q-ē\&Y/(l!pxJ$(NPoqV|}!*4gŕKs! ]vGR+=v;b2De ,%$}ʂwx^,V 3(Tlix']dI;k x_v^{8 Zx[}5܈6b%KEgk\$M,՘wo:,OyٙW?y/kx7'Dwi(r<'ɛ34B"w Xg~ι4x PfY2' jsPwi={e.C )Kr)K1ϗl)R, :no5=m=;n9lauS^BOK- sOjݧOjSE8Kr;[G_]=^&9nKN3`,`B&wtIkԇ!6#FЄWOO햞X |n2ͳqYD/4W< ,0)oyKJ̼Ԯahj0p۹1m66:lIx+r<ßهn`;. …$+sZ CQŽ1Z,Lj]j}>p7Dt sӁck;!rDBGy*]v[~:iD:AL Ś<,trEh%\^o5RQN/M2rwBXaeHBDu6Kg ]`\,SAeOZ?ޔ_ }^ `*@ IJD&_~G:6FxI!Jw^&I5xg#N|z{gG}coJdYaf"_0Wd/]aս>pӳ+.qN_foTa;xYaQN)nSP$r)Ɍ]Ɖ(&Dgd~:뤊`,Y-RI+96oF}Ե:qA] Yx-FEؼHkf:[P =˫z3RjC[XvdZ+i o\4b+sq0M8OeZKz%NjlZ ճ vp N9ޯ`zԯZ/ Ğfp見7q3ēcձvo>i 婻#g"uHi]DÀ=g= $%""6 jcϿWOz;*ihT͕/g x aP ʃl:*K=_+ 2B( 6nCJ5vfz)r%Pq@^ yc,CTp2cUT\&tZ*M3 r6|ƿ#7:%1YD]`aH"z">)plG߱vUQć݋=x`BJ5Y,0ˀ_.` .e{fu9~uT#O6]CkNjfçdՏMN0PWL'z0sɒ3T dP"[t",E(k6^7=s ^~ǎ=&3ɍ<5OhpyQ9qȏtR\oG2Gi  vI ˊF8<ӛLVC$mx|:-f1½)v5%6'$7o jPE099Git9Ki',5V;wx"{a"iDpB'"JQlIODbԞlEpkaVKE*9ĜՊϝPnS.#TY[ S3f\Db_p/'伛(Q\vpx[ |nq$ih ڤ BEːr=7}+[L=+m%,pFM偺 C3ZEkhMHُ f]abo F ,[NŔsCf^ef-N`XG߫pBX@@(v{߆F"T%.n6aS9Q x2i/#}3PM\5eJsEaGsjE]Z |Ȳ׹Mh|> 값N[:2c;Wa;\x>Վ`e\\3%`i Zu1 a1ijAgR?6Oz/eoz1c)nr5`c9cUPQVi>ƨ1U!p9c)"&2 V5cOD$s$bf'SV`:AK$PtN)~ɲIy_p2;9o)Jû'TDzr_[OE럶´EeyHꡘ, ߖP"٘>p"P.MIi]mv q^:m~1D0?g"CӭU\Nvn70:.[H1uy|_l|HcEڪdq{lݟ8o\\{3GX Bb"^Ǥ6D;) ^oGPV+WCqj6{m1k^J0#E%egrƪl3luC]SO2]6o/>kV%φwdSmx/&,8 ⤿i=wל\s6!Es+5 TQSaZsGފ-l/vr},qǭpxY@3;*˰R#|tqLHSS$ŋQkhm~C.Ed3:].ENy?Bi7nV1Zt.^c_j*);۟L4LSS0OQ dIJI^ ?.cCR;,R@z+/+ xZ9$8)bᝧgtu}lS ev1kȰ4˱藑<[Yr3X#5Or0 ^ʠpg[sɠ t_}-4 `x\PRسB$%(tE\S M {KTVog8>ʥ mKIAhRd[mjU UM3{7ģ9{ ģ6X뗩ru }1#VXnXUC͒W}~m~RD?+]3VJ 7s76'G̓S'`$PEz"1 ʂ}ÙR9}vlI| YƇTݼrLBQ-w2Ƌ4F'$FFX>;ەϛ^;v;po~k0ƈ?$1y眇).<#%clXˠZazN4}DsKЅmTqEIN$AprR>5N;N\m ӗE5[.c 0|tjr슮kĸlU2<\=[Xʌ7! .`撾ܷ4m_4 -S$WecT67+ M M:NF}Eü%[MZJ79Ga0D U(M_USxPj+eR5#ֵKSʊunJ87:*#+6ƃ6Nň2LI]?h{TBbU)V/ϺG-r[ߪ鶚ۺ\>7f#,<\AO46\}(RX #@\ěyT}Dh*zoG8u5KtؘTݬ[2gW=tJ68`}~O= k%s6'CPW}8;w͞6Ӹ:B>L(^R֌j㾳S(7) N!}{6YtTI_#זoNgJ;/?Gx9rn ) WF"1"~HBӁ I ]N~Y (\EYIGߖ>9l,"pOKZ@ԝ)xnapyt@lۻ;"Q(2s /,87\S MfJtb 4Jar)+ +d*ے4׈oեK&8Htas6^Ecs.>ɚ`뵭\N(P0ep]zLQSwz!|K)pby]VcnhRyqhd^iۮj"Z Tڛa OîNM^օj{KVrh$j΍[ݯ|_&-!A@Igb<3}Z Kt q#i(4FDb~o{<0NU^?#Vrn| CSXT5V:}䡻^1r e2^p@IqKEuiʚӜhW^[t}ChI eQAӃHeRɒ$ϳX 7Oo-Ûy|Ino8f"﮻*@K9,y!6~jT]DA`y"T'i@f T"j?J}Ai#?|Ma81 гЩ0x)j-]$)!""~לe:Q $%He.EF/e1btu3kz~"je}lTrՊZ4ҿkLjn2Fw .Ѥz+)؝*"!90BpsAP@}CB .4n~fiUmfzE_zT-51V'3/ l *$\˫]D 궅oa}(#{lYK*%?%xK?F1OZ[>i؉xL =A8hA">|i0XʋFQގ/pKN1[y|{SW9ofa~|Pbf܁ 5l#u IXfDhtIP6ήJTɔ xi,1{>;Y~ _3IDF*"כO/8OD+^HOeUH{3/o[U섗)VvtϟxGdt7XʊSMb/l͌"5H7+FrGP7t$P`E.E<9Q H )0 Txwv !;gj˓nO %>􇜹5Dq0Aòuru{@1573bO=X$׈%Jt+ unwH5ҏ/b{pd#J#r1_+Z=#L`}XsGTqZ[tM<QCo*F.ʀ\ 76cq~o?wTrbl.#X֢:\n[ٺa|6;Vf_]Iy kaC=oddO:apUvmOn_-I[(+|DCTɏz\,}ƇC"\Le+,‹=@A;b#+Shlb_yI^E8Ilĺà,8'%P4za!ªSs=Wa(V"LA@NXJ/t y$3= 4M.c ;"h*PKU^v_Ϝa;Uo ~`]=jٙu4U©b5>߉aZTv/t7&v YKCpsOwe8Ϝ{d]RS 3W!E PC𗫸lcSg<D[>\9͉/c\_;-[H˾T9L<Ɗ,ORfyZd?m% S8іWq;hKLѺ}33!n $xQ0 Q^as4> zJHL  ={EX{5:"XDH3w[4C`b:JMةYݵMlacTÉBcݤk K0?#{k>еBN?n[*f 1}Aۉn $+}LX\*|Ȼ v"j_Т v+Fm=߃0{cJ'j!f`}IE)K@9 诮&#H͢QgAz](\<x @(/vA: oTQp`]E5ڢtNޒ PV.Y!2Ovh-+uTS" &b o}pnSi3cOA? ^XϝZXPN$Hsw<Bаgd1w}dy eUdwCbĐQEuBtxz)f"$X`hH\gÉPɟvu4;x걩8K/BX/K2MStyXvxcEO4 T)-.des1: ;qRː<ǂ1@Q-q62: q<6SU)ԈvlnE ح rW3=E։"Rlu$k wA㢲Hlb8G'_ KG&X9Ggq[Hݟ !b,q Fi!յi^3ܩyG 6E7~O(fق G9ŅXp) GZ48gz9a9Yzy=5rERhcjWaՊ!9H0S@ h"Թ,\S<01Ri]Կ`K]25E")F!JOor&ؾZvɦ -bjAepRA} kLwNyl{'I0>22uCs7ORx1A ǣ @qi.I Ը7Bz/ݱ{>o@1Xmll)iVL s`sKa( ]pJ#I#9%,+WFMsfզe~[z`20N8r"`i$X)Gx$Es>Ї2m;nD9h~XXu[w8ÛI,#2Ln]DU7 ;9RdR헙/\ejZ\M&s`f\PcFe?ǮSu ɕ.ҶfƑb0.b(]q_3rkBn $s{|o#}I~C0Y, =p 'J #.FB^↙ckյ$ocp掶40 sd@6Y=SuwTV/@$=DGL`ɒlE$/q|(1h5U{adZ:hl2EG2鍪,\8j2u6{T o~3F)Q_˫.w%fƉGN*& hw=bQ1t#(T 4*MlX~ZB'\8&!S,~w"3 󵨋)U(t&2N禫 ώ3$B%_Ml ݕIJT=ٺ<}Y쏷jry)$g|ʘROs<6yEh  hpfKl7!%Q vX a-hTf$W9s1Rl{:w|ॽe=3@Nm8Mb(lĞ|dkcFV/\ ;np1C8Re5G Ru mt̚ 5+ɒ+INŐ9ŊwQ׾N^P!_KT>iЊg0g 5#mn|SP P;inJl`|Tژ j u5*]QZ R4e!֥ǣK%y)n![.%WwWU0"Uj܊8v>j>Zm{mu2O, _{QU Z/$T;V /NXV:kd08D%FL4.nIg% aaFs{X8PDbK'tnu}j۠=I`aW[mk?]{x{d%\"ܒͳ乒+b3PML")u.6:C^b9hspCRf_)'|p-޷ ?HÁ/wCOb֏j F#">֋_ h, D0og8%abI+D?:z7Vvхrq;}g|tFhARS&; 7MpE'bNJ):svY.o8' hVrO}# k@[s8=#l'A4^9Hᡄi[lN%Ҋ 0>KfۘWlac ޲*:H8:]i3PpՃ7Q]C|O/.>4b mZPۇucif`VC\cQy';'Ӿ}[jpp Si}B91aLR;MkHAAWsWEa9َw~T/o}0G(B`>P>$*C3]{`bGNdg:n IjA\W'Y$82rf1s5dukWs~ yE.9HÊMitvAo*cK,Vot8L}ǎ*n2isꘄF?.o2 WeCuIHesOSoaNrn| F9M%j-ђ нM DXt@H/QB (0JI.4^KKJp؝p1YT•dA$9 זt{PE-E m_zj% zB(?րmU3{6W\E}p zQ6"u~LSܦ6Elb1 ĨvVwwTLfp+z)xݛ| O08B#Wqc5J.߱oNsͨQ7)[هX]y!|.-TE;J@jsgjv!~0'v4{{̯,ޫf>̨<nۧ^m^!ƅlϰ(8Z\[`;K~]W-}8[6U}oe͹%O^:cƧLuҴ*ȷ-]u΅y]7wQv8rmƤƱR|`vQÞoG [iv0H-r{E"a4)BOz~xX8pإߐfZ 5Q$Hzz$S<1wi_p ap  8DD}5 d~HljZuzA|g8?:v\4>Z?&z|`.}U ;p"=OЋ,į|ӿM﷽w̱z^J*wV9~?,[lSЮHa4,9XOl4Zh!;B^Cr\:i9 r7xWprPBya?oϳ6Q[Šʷ G>I_7Oa )/z7ovKذة>YzlML۶C%TDN]dpҺ/)ʊy.J0Ah&L=VAXho;GL{"G<ڼd.3#[vK+CJCsD~={鼷ѷQFA @f2eńPH}}"_[%sIX#u6zY̞BU]<D"n\xb8}>D0\7f%ĜlZur ꥜8{m+/D'iG}G b=ֺU+.0jc CDy,{K'q}c)85}]q {CLM !2#^Yx:a'ܽ, kus{t :#mg"6[ %f$j:ۀhrpmq.꼂rx \PBTbͩ83+$dַ.oeQHP*=ģ~ksP17lY%8 .[\S Mp2\ ,s3~\ߧ-f& =R qiTAt,10-WZKu&3@yz9<rIA; h:)~vru{J8iAmzNj5>XoJWdDCb C ~].^dJ"}?'"-abqh?u-|\aM#5{_.OY㽎3*#3';Φ{kvoj{ے}FO1 v4+sNfX{q%;wuEpΩ9b|KK2_xh"ʅaN2)6VT%[آKm8f?M5V~+|Ǟqi,,-C7no?6OBwjsl<}'e<Re.}T/m)E׬xYE:*Iδ}jk7Kn3r-:K!~]:u13NUXxˮB!L`9mhl|x*Na+]wt=}wH2]2ȓ[dOhF#eJ8CpG_ >t__,2!|$C*QYT.^$#K6~RCa1`]tvwލ\{_<kTaRKM/\K*=/OUIje 6ZxWZl, +HV]]\$As Jϖ4dRƕ_",1y%gDsP{mTm)jW7v|&嫠΃F#7pzI,uZҭڌFŤ3 9Wa*Pp5bhԯ xr:<8{)g__ҡc2 O3AڬZaA@]D]qx!͡^AuWc@ʽLVPr~i\|Xe]dž_ KɸK}Ңc:̧h)k@ywkRm|eGfC~[ Xesu tSITwZH.|oFN&ӘJU'f =>k=p1ZjnoEQ UW$(E , o?le>WQ =}`Ǫ~;+;ω< X~n&yO$/8``L$A(T8f+ep;r>j ïDuc"I^2BEFj$+=G?4 L)G*\Nx+*-LB}*E </i@O@SxK^ө[SoY-'ӱ.Ƨnbu\S? [>^p=@MQMM97 RGqP*~U֎_Ӳ-LY0wX+QH=y%dؕZ.ĕ#||.WK ^wݟUO0'p50nRlt%m .\s[Fc]m{*Y{5:Pu6hF҅{ݾDN$$wTZJN >fM]5؉ Nհ:MC"]|TʇjoFdPK1ݟu8ٸ2HDg(ҒτNNl|N*{اnزIqE+x,-3bNZc4A!V9'QbXR0X✇CJHTH l@aj KYAZ bA :PeD׽bb|d|$B+C,)VM^n6]jaL׵A_^-^-Ym )E/sǣ$Bߺn%'D,5}0pf-4OG^y]c訶 :T4à;eӝ>lKU.I\2i[_5:ۗ3yEb}-r>c(p&5 rhy,N}n|!xi"<dT70KNrИ*ŏ42tN,P $IpgGv“U:Ku0͟5|$I(ŇT0qRfH(fjF!#|,e /OtQ4W8?ւ28eŠU&p cO)% 9k5RlWwV mm)h#qu ^vO;5DR'+WjqsK`ɕdAI~#.i"?"ApMiuUosTo"ŹOb2Ӭ0ҭw9msxqXL(zڹmR0z8Y8X86xݸHR-ԹIXS l{{|,<틃c;&MxUoJb>'l3AkW;O7u]v#MV[z]hBQՇ~YAvV? :E$pw[֖S!gAm#-I4՞m0lđ\!dLTd-IB7@TkCzӍ8Ts8;ݎ3"/5PJ&PF Mo"0N>1U"7XUfx&zO[Hܑ8M$3\uI4 WA ahyW˪xDlE ՘Y Xe_D@~(pFg0ńy^Fшh O}҆^G(KTJ^^_ ݋ |>zw.u"xq^7tAa< ֬ zJ% ,^vmֿm7:*;5ճ;lDW1{*7Q!&( 3v1nD^8qěLΛkQ>^/K'Mx$KД@ 8S=K}GkN֢OT9I8>Qhvnn/Mթ4;\^xgCķw 0S ]3~=> \~_}7.㱌5'ߘew:̗yVvK׋9*mD=bl7Qg^rs7j R S}&,y]NQf2Y'>J/E==|n4IMsUemE2%VPj|q楃Jt8kL.hs.cò6,ur.b"U@~jojY 'x98~%ZNW :E6Rc# Lw}ϛc4>[=>KeT7L<_B f{qݫ^vcׯ4UՌiXOn?ju蕛.ub\mykeRᾕkpȷw@֣CY{7hhߴxN.W8u qnpWΎcmt(0u2):KYXSL@ƙviŖogb@A$s{o2॒t}m|CGLMRV~Jejϓwʫђ3, `0 fxS3#/Z]XJEnz7]W\R >=P*sFn2ƾ],/IUZ(=+*N;RBK 'P zf۰UO G`&4;v,k1j3Y+oChĤ'DBOѵrVmzz2ӦJ`9qOP/@F)ʕYST XBֲ:~NORNaSς޿I Aa5͆A 5*ꉡ@T-X{znS;]#o1"}')]ѷ0)q {c.7Qw᲼.9G).0 Lh;Ki7@KC9R1/-:sVA+~'l^wãT'-NT-QxKk .ktmyx74? K$RG" VBKsYYTP5'U 0Hk1Z(-R=/=1Hr`1*i}QyzR ,?tGdme"W$+h6 bu>CC`>~ᔻE,4B1}9hWL͘TͿFhR qSIYEI^ 5ߡzE {) ofc.' 9xK M2ؿ(ɱ"0iF'ds92pv%43"_DN(ّ+Y>}F8xXX)X%XfCx<>Y,?EWjh nRΐM khF%?6o sҹ^}g{LC>vgL-WbDh!;rd,ci`Bc ]qܠmfc;;XEeK΋Sك%{ƫOw?7/y:ѫ͕vNl]܋fd5a!/ڜӭ7KВQ=aʝ=Yunxo/w;Em$9Zt<̃qW ku:vVV̝M۾S˰d"sכYQ.)RQ]~ageyOHd_0*+̋?oU-ԴP7^go=ml%X`s KOFJ8:HlUE7PYf֍Aa6 XM)wMv Pk8.W Ơ5f6]PXe` FgbeLpQF[p,;{\`V8L6?,N|'z, ^ ;$$o04z IHanZ5 9a\ON|'- ?H*CRXAT#4 yNv!yi!$`DHH@Č+h?֭N%,ܲiDDﮜ;k]eD`#N&J3!l'6R*;^0)7%s{3No#<"UKIlnCx=!F%*83vϝ[bЙ jdF@l%xvj)J2lc4.hEQ7ȭhU~#qkivMP7;u+23ވȼE[= VsajL|Tt. }]O}zP~L9wv|05v.:[n9p5s2$<1$HΜkSt%%޺ɷ" *7fA˪w>ttKQ2ƍtbBH(J,-ꅋ%5i꽬&8T.dyOǛhKs'vfKh-$z P [m]Y0 /%$/ҵBא}pgP1y*,}YH_ag-~eeV((NpY]U]uի31}T6 ^E/6~!ɣj0 i1]$֖}y=8h)4nn݉L5'wO5-]L9^U)zbVbG7Hһ^z;-YY34,z:ɰv“wi='qtb|u竰_swǶk(–xx۰~Ϭ>jE*ųvQFgt7ϛ:ۡ~j?(Y>ܙ|*~``?iGfl{x?fV8~V$\}9JwE {BS/]1t.˺a)e  OTN+E (ϑѩC94ܳ>(N{MyY碸gJ\FS'dJ;ˣ?vc%Z=y]:N5kj5ݛ5Z_}0#@9dPELIΟ;:3U#ܦxFZc0獽(ҫe̶hk(_T;[ ަz2 W;QArv{W=v Fy}2do@>]DE۴ QZ7+wǾ~έ"$ltc%ܳWAo. ,'0<"DhN_NH~Y wN.~29s*umAhAs??y'&=\GPGZ]y*"=;38>ɛ|ܭ{-W|^| R%vP$=}Gy4 ׬vKι`؁%]>̽(衬^=pؤ2~yR):`_xĉ+l'wSI!aSnoXnGb?G蓬v{nxWv ϷUQ1>mZH'}4Ja;% @!DCcWN?A#G#<8K:MODzq(+$%Ep0E،N jxgTWfv{ˑkd(cs4#")Ay13xh5ЅVm \X̦ye!W? p^]Xn"w4ɂy u3x.hynP7#ya(xƶQo9I˺erjxqsOӓ?8nܙDM>7xU '}/&GP5] qk*O^(ٚ=uK\R_.qx^6Gwz=-yx-gM-O~W#m*C pgp&ġtR Xm 8 EKw).F[hYM̦AްPx_!8kNqqjR=z.)Ut]lHOXIxĤtW!(I֔pѩ|w~v_^Fջak(qǵاTsJޅ̃8eɯ?@vRf`we%B UǔLrƥ4eI D\|,At15/9Z%s&d\/@Adi?r/grCFXm -B*a$Da9K_@ԗ<=%iςkjjz0"Ie?/bvEp17J=#IG>b;~ y+va F<ƌ#7lCMl/3M?i-jgui6҆N6ۼ}n՞cwI|6u7{6YeS:V3-lI&o^ ~XO L&"'6bȾ|"R( ݺqTP2HǮ_ )^}28Zo8̲Tfhi*f2L޲2)B -׾wFh0x~5C^ڠ\d{8(H*u-$Qgҗ52>cl{V#-Vs;S- u¼^C?wd+%:2Ajj̶cbSU"Qs?VI/ʨۚջth鷥>N elKJ2ee3Su7g1|7Ev2X82cPھ:T;K3Zеo^W%Q vk4@. vaXvdoN1X23Ueغͦo[7/Rofxz\oՊ}룴?Y$]ڤu2 R|XjlPYƖ:7shE ԵbEf Kpi Hp۠2c&+bo>t)}|-Ue4R7{zx>UDޅ|8[^l*Ri}0Y~)n!UB+jۗ.},I\5NoNR;^N [(dē}uVo[dnnq콶n<.gALC!`RzfhCZK*>pckn^n M{w:e.~6^/UJxlMK }zL:%jyoTn4=ʸ8܅S5t75_;ˤLi pl.aD0Ki}w…r΁K~.2:6v3m5x4"RwjGv @BΊPGQS}M9%asI@لtr!cdYUS2?.PbKq Osئ1уU~khy:y)+-'ePx1Jyj,{"x@19JAyI).#Q(8/VK c7+$D'ëﲄF6 $`]W_Yfc $^56?.`<3bVQP_T"F6Yc#s9ܨg郘v}P$a_;NS6:ò ٻ{lɛUm}jӠ]і m[S%ZK"zx Yį eG=7vG#^Em e`H DmեY9sm )ϴI&‚<eHdQxC:\2{ ”.R`Rq,N@P@/uWѻ֕n~&B[iON>rD%%12fr^6sa9J])^P`~PQ'>i~f$wB IP`뤮۸EJ{>ELPJx<(>'GE0Cd@Qy`'^=6D6)^&G1/#gEhpa؟#|nxD\:4' ;@-00$H]ο ˲МrP?Y6I&a[% jU,޲`|[kATw<"dž^3ɛ/?0;vN) p;_^v)ܶu/:UbWQ. fy8/V c>!N,e3: LtDp%YΫ=3%Xk~S#H@.aoC*Es|&dW% s~ wj64h;[ ?3oaeo!ӑ،Ōlua> 7X1^ H&Z22i&p 1JL.E 44kY&Ԗ{xՓ{4L!_{ X *q/L.d& /lJ%x?ݸ$(r`S:R0REl')dV喼G|{E[}>!yo.` )|ƈvte3($͟\Dƾ`$Vڭ|Xoakktܫy{o1#B 4t(Q$C>h;mM:FMpЦM/-}'`FV$E2C 8hMvIl)$lЈE rVPUT*q ج,b=҈ ȃY_l"wgi cWԮ%eQ@H}Ԉ|7L 5)HZwLey&CmfRteZľw Z7Q:(-g6/nϲSԠ7iM7 R|Ȍo[# V*.ᯊLJ=)^C04c˶9{ ]!A1`9UDG/H+{2pvI&k*1&vTyqt7#_HͦK]de# 'mPi^ozc"$ {9#^%"Y7$췯q~>9D%ׁG _ ܠ)a^R{6rEk9}߬[tpPԸ]^ďܸTh5zz@))˒&wB&N25vP,X'/}V֋e3b$死xUiqk21 .G|<"1?P4b]NCa}#FDA]G&ZQ>l_^Ƽl@7k;s~0~Djkg$南O++nk5S!SO\Ö<4Rڃf]o~Qp]m+SDNfTJm4 h4+ %,Xp Rh=WӋ۽Β!Ps# %H5f8_نjxiʹ n@RsW74Hi)]{$B" 66OdzC=EJ/(ɞzSe_I-h-Cmym=ڕ3+C9u:h/Ev < 8꽕c, p0 pLs)c% _H@ci*6Du}K9w `|*ff2È-K=63 qLQ=yvd {tO5ZvegC?R~rØXȾ۪ /eS w:&7ՠ%_($PyC@&N ?\S \s"v`y{󕉈oAZ*btRRK{6_MY%*TdUETWw_Ty~+l6D0H"^D ݗϛOw㰙[!1%1$$Jm׾gNC%Mw۰(F\rdN9hE@fiG?rNPP$5 `5S*okȮ"pmk@B+6ОrxRQp}j=cӠ (H޽Anc =yn:;{rtx[y!ޜŮ՛]O&0 p&R ψ") $|ZgzNns!4DZ ?XщZcCp K^E41fkd26]n 5nr|^(@6 ݮ7.V[ : O-, MR<$4DhHBi=_b~oDlmH (ТLZ4eA%IX3|^H؁ 2Zu| }Tr?{bC"jq*|g|!x 4 pЀ@tB"#S', et$q#ٙ xA;F{]/^ٍ&k{]<53h_ )Y^lb*kh~?ǚ`Y{c.R 9h Γ~@,0+eOzf`K lVⅫn'^-rBAJ, ælɲlD5؆M]LNj!G;e7.: 3فYDΛb_Xt +m(.9FK*N"Gf Pi{дÞHe).vdgBnNRoHR^Y%IY&K#I7_'+%ke!|!LCqE%?7Vhh޼.}sYhnq;=EG5leGpQc[L^=66m㠙$dWҿm^êz8ZY끱@rvf^SflQd8h䔧\Lۯ0jg:wMr0D ,$7#n7 sP] x׉.!q"}+7J\͸DUgRb.$Io,K3IA4, ^h鏴`V\6,s94#s>a1t串J?O&iHPv&wf{+ tVZ8t;r>$zށB/sί+{\8UsK~A=9ߟӄ1Μpg "(!,amųM*KZݏ!~Nybt}٤7cwq櫨C+G87CŜOF;\3gFb-LҶirV:>ڶFzC"rβm0$(l.Ϧ_؛]p`'D A`w 0ܺU6O0vts}-ہg^+yb& 8 Pl]鮄.`~5 Y;4@aQ r7 OOY(yYnfu|C-5OABtCf 40^u }3i[_0ŐՂO3a}al.m;FyAbW>% DD5~ךB Jp|1cb!r<+sYB3bUf(7F6vOAav.O 2^*.+6CRԚwPBS:_aD^oX:{KhO~Q=o)K@f_ܞ%k.%L^Al,$f5c$I%t"z9,zlpKez}cw!!v2)!ikT$;qs|MZvzE2&}&vmLC*/Ż6,ƣ8f\f9NvU zq,VA zAZl1X{!1daT ɀa(E~Yvt WeǪ\MIK yv S =!6g0u]}~yz|/1x:8zfehCH{GG1xC=އ:~I 6>4ޣА+#P{: ǔ $š$ m|ԦIY(w"uN'tNú>:{ ͽ26ar8yG{ *:mÆ`* &lUSRNlpXy^D%UxgXg6ύ&%(b`iaE^h Q4~Qi@㹀5߲li"M{]JkzQkBuVhl;q#piSbm܎õ^hs!a8Z$Q%ҸxNs'{{s/)ӢR9tPDN'G_=n@ܙK+ly^ !AtƖ$`=\ݷX0$1DtͲ8~:3;! xUMvJ#n/6UHiĠ鍅>]dG^fQ;yZ/&=~}py|~h,PI)7wO 'YwLw` K$?t}"gCwdSsDUKlv{J,Ey:3lRf@+l.ZÒ w9$Ӭ- 4-ZьNZhwt^݋k-vӲ9=—#[1}*&఻Z]`3oXYh"m!2.bgNz:VU/*k[i?=_rqﱻoÃ^C,[M6ŖdV?5960D#itegyz@:^}|דgGI!3Z`ǡL{e|1$)װ,x.E'pGuuguwXkcȒZT*D־롧/0M J(׍h- +BrqI] crv"0wNhЦG {|lEqD ]7 erGYgvׄx}ͅB^E)' >~l7{>)ؗ4H&m]ٔ{Ξ!c"eFs8Cc4]x-¿l3 9{$ ^Idvw{*7 m!OpHKCPA~ RR#[j렩21jVo ۑ@RDftZN.g_(`Sĩp^Uv5i|aMK"Xc:\.6$Muw [w՝+ܫH:Ws|]+/I~zn/nfd4#Oo %1qq;r0Ǵɕw9IXr 3Ăɉf<eFf+3fwF;2Z'ft" 3Fm. 2/C*D.ݑ0)(_~"AB ~N)*' _n;G"g"S& q C:UKS|OHd>ua~o*$hTF5YHwK"jQiv" ~goڵgtD?\ %+疽Bj+L3ۛmFr{kf. ȯ?#Y2+Hj8r>ɾN,E 5F@"dBu6^&·T$(ǁ(9Z&_ZE.1w $#' uv!4lu!.^> \j(U]deqH,Tφ͒:P^:7a`Gu9|BV(9 )H`Uw0?,?ݔڲ7E_DFܴ?6M/ω}ތ& ;Q YY.rypt G)"Kח2=Y_0D:G|/爆( ky2N ӰIWSx!>[mu~,}zѽ͓x>w8!fTc#4F^&. fϷ>Ɖ/${yt!x4`!D QܻCȅ2 '5Xyki`&Wv @F-4jaTl,ڧ3c"$odq'_)&-KrSi%7Xހ}ZP?wxs(J<)3yaڭ!}rޯz׮\^ۿEZdo^H(OhUБt-vf<&iXq J40לTmu7ub*7]5`shc=_Wg,*E)| ȥ ;`$A LF5sF␌{Βe5׻TL T[rҲ(gx͋TI#8lj^vˤ9aPb%ꠀeAЌ`w;˅"OLSN:0`y TR6i-8)&]SGu;aȥQpxW+3mMNOeIƻq܆o,#2!1kh0/܀,\={Aؗ. ]>ctI~I ~Bl_D_䀆+w4J|gڨmy=\N`ox+8Nt~T.cDTϋxuaRRF۵ H%{SUziJ'z@/ EGj,=Ѿn^~W;o-w*OHC-vTqכw߯\9_%ܓZ]]^օ?io-T[yzUȼ'$I31K/\"nqtM_#pTpCr[eorT$C晸jq=wE#&| N,|F2Sxdw{. ثhmn6ϟ2~y|v(ߧRwlX{HZ-pZ|4yc!I<~<']}_PSۆ#~DQBpf;h{ƨ\&]hPx(/=:MFBK(ȩn؃6n:{ƇE&%fdG*Q':a 7S6,d>`9s.s dӅwMO:O:jU&a* 08h' ,wPd_V-7ndIFQ9h{c%*r5[}n1߫ }ͫ4 z`y;.A:;0ޮlAԧIu68Rj탐p׌40쒐t_V@#_fHKb(I񭮻Ž*}0TOz>Z^nqVIXV!_.-_ 奤x=2%ǰݕ4 ˓"Ojm6GۿY>̈ߡE#)rSX7)(}@ K#2$ wLBr^`P[^1@o-5t~[tky 2(?!~hKs$f=C;iu xp#p-<#ȝJ F4K8KfRJnHle,Zu#EK+ C{x]d$9HM%I%{Md~G{WFaki&.⺩G_^Qٗ?l44aC`}3KS8pt`фAČ.l_Z;I,l$/6_gL_T23Bُ3b*岙THPe@גl&JEBJƺii=w-IzaK00tu"qQ[BD݃9N*gpAb2$Ǒ@J!Nk5Cʷ"tJc ?Y=i=o܏hBTV}HjRFN⚒a܎yluU[^:=Q$]f_Oƺ'o^6u^UOkNTc=6vif]^3%DLnc&8R`%d:vy"~3_Zp֖Ұw8{d!8ԤʟO &E9lKF߈7!?b| ";+*:e"N>KZ>v;5ٺO'~Y.:c, D^QE:'_7M{'H#8 xX EX`<;D* 0tJL .poj[$ůxXk.{lv? >H+-f):K9 x<&'/"3<M d,Hki 78v'}76~\4 L2Q>PN5nPe%l"ǘR(BF賓:zұ'Z˹HgGViYVo{us i%i l:cXRA,ef ],s眮 [4|)7jX DZu7\[\'EI@fѹESE&CCnGʝ(d|S#iR?"xlbNj?Ez ٕ1C`) ; JRnVJn.G0"X{A?/i%ϥ3 \14Ьޙ[ ¥:6"qod"VglaMvQo* N|pǁf~D( 2yuFܟ B6KDNIg_3UizD#j9QgOkwe"w@v,WDZY;8"DmAPGf1.yH{24MrE(;Y|d#9w8x)FJާ+i^#Pe+3I{xWSnse&Q oݐ,~|ַ._4k3 %*jY0_'ҫnVY-^|8kUf@!_׆6Ŷc-5̷'#V,`eYY&q"$پާTpўsHwRd߫޴1tFO[$QkoS{GY;.u&3oNCRuy]!'Csf#͖Ւ.W;ҘbF  ~SϬ*+#2}d:mc͓Pl$r}yf .B):v"pXx)ss{>^Hf_"ҡPBZ~c7j8 @a)0;z[<(H"H\[kmU8G|>F~#|F%U Z M~pP@GnI42<FO[P$&ۏy+11[7w<xZ&z>1b#FVDܟt!TB4B["Qy,PACVo%ep'8jJd?ӵi&ooLIzapkp'h…Ie|aSZ;~2 o8'7D=Ko%yviKÑI*pWzaDc %p7jfw/tr~9GIa(`1D@QK`=mp~˵e\y 1I)R}KW&I!y̱GڙRީǜ_E]f_CtkV} r,ShnqS&I&։iCKh+8LK ͐Ҷpqs풹l='xkG 'n{"e0Kq/GoJRHK/BG]ٟn=`}giT\ݭ !zۄ47.:ཋsEOVZ >;ZvM*%f~wZ au]8ӥe)`I<>"n ju|=#!.{n٨[kDMj T~V_uCV]j(Kl @֎"`IH 0ٓߛ#yd⹶L02x%[-LC{lfem=G/b`4%<9=z7Wgn&̃ھ2z (6`,v6*:!X63i5~ݺS`ŰK5&䕄bt5Ŝ?7|׉+eJ^uθCw+_c/P,&Hv} ?}l1ga??7Aw}gul~:s\UzG C6sv"o^>cN_{oa `> LmSA2  4ԅm~k s7Cv3Dc%B~:2~_A*a@%4%][#RWQkd;Er犣ly罋* EFULI@TY ||LS`6ѩۆ'?xAtN7ur,ҝR Xگi>q ̅C+BPsyx=5*DAhI>m@\VƥyFbaLD:[dqXa|2(b8mi.AԪzm+EV.C 8h28p\3^ 5'FmIs |ʬCn*d yۇO{c6II~hO E ++S SCUb jH/Pm+ _t xux#_ؐy/{ھOM*a"\{exԉT|Lh]*5MI iA j=ȁUK\YԨhأ)hO _Zڸ;OgxGm[lw xVMn(qw፺ٹՉ^&"X#lv_S?GQ*yT9n8Oyȁ9"҆210O̘nr~|C|ML 1ԒvNk3RH̿vvFZOcL[ywȲ@y"aoybޡWե.><4nvr*_χ+Of8 < J (|{m1{x7OkEZ#I3$umBV8XCw5@aP gq_ 9AYzUQb $yaesőʨGUj,);$99nKA$X ʑ VAz&5ǟؑ! Fb|}; h(|3Lܿpb8/ `H!2 ȯ녈a.iقt!#Ξ$\̓|-B["7d\B"YK`-ˏJ ,~GM__; Gk\D]K:3thiPaS(70$Fyq"ـ1+h@ݔ^bŊl ›_@ S[/]6M ב=mJ^n RBM%N8٘u͉4W;N<6W:k2WND{z{&Z@:jk)T^4:^Y"4bRh["3cI,NWU=}[Ud=y5WHo|X|x-3is/6=K3TZxP̔|Tʥ׉C] CPf0t,3vѻ͕6t$X s0^ԗAe~{;(0`Oc<:x*kBE=uxY 4JgHzzGDJ B6jL#Z=̩j٤|p& )]9ٝ45 t㖠jv@x4c?#8)h &VnSiE1mEt)p@xVSWվfh W࿚]kjt&VXֻQzk,y#yq# Dp4BM8бUuARMk d CF“˦gܬG~Rpv:I2):yТi+ӗPǝ=}Wx=~֝NzN>uyQ,.gX7V%$<#u,: dDxGeZ>3iњ*FwaA//fs:NZk=XA3_Ƶ/dj^vyvQB"NcyVhJӫC`m,}/MreU ұM|hn(@ a]6j4 gE z\/gwOaS/17>tԟGjgleid<׭ )$IVdtܻ@fx ƢD*6}sq`?|; yX[ֻB߽{47@&~tpfճ芷ϯ._}7g6}kH1^L#S^| P`-@Wre2F a)$*L#, F Q7IG'X,ӻX&!b~/vWƐǡaZꐝK(߰9K/|=Bp䅆F?J(*UE6A+Ff{<7뙃=q^?.LC kS 4X$y9f ]Ģ-[Wߙ.WgKɢ(+7C5,Ju8xAMV?:uPO{s{6g;g7$Buk>̼B$Ζs[2hxל|*NxBVFh!|0K0TgjL}N2"-"nx̱惿RUw%;"_{n^ T@U.^סr*=%;l턵.wZQ#2-Q|(eT_Ӱ޴듅j{ҽͲ[~y/aۗyΜHB`[ZB 9 }4Ka:tkP,wu~AZs`<8W"Xݖ/L3)>8 돢i菖 ^) "a=?fog;m9WY6VimT0Ea]yoɛu-LxW`#&KzuFͫiI ViEoBX[$;|5XD$.\ɤ|}nJno/rH4luEF.p`q73T`rl^i pU KGT!. <- -.4,MքnX 4_I!b)hܤĖCiDz6ew )Q~Jl(,7p[q @,k3 :< ˯<>ia&{i7]c6gp\fm|~0>=*J~cY}Id4]m9uR?D-D#µNJuU4ٶLqĖ "4rC2Oj:m㳓 vAT2^*ܲ~v®b{tfml*taviiz%YGPvSt[3;T[!T.3lʘm xv߷1Z4Ӗ!ހdp+~0+V!/Fr~zj=k{P >҆b!*7 zmUGxy37"ת[%ڠ2@H-3$pّ>o=sS^p3Af76pgE]B5/1"'"DJ=q 땵S4DCE .^V!&^{Gv_N{Nqy. f_N&``Kj R[BdDZ>Š航]b]5g'mD ?"U7Y2kzύ^_qAFJX [dy+ow:?f8-Bf3 ݛx [$ִۙI,>$f,S(+|5χw/MsŢH6fXQǜQRX pewVN|Q X.(E:% xfrd&6w ?p(b(I-"?p` $=ESTW쟡9BIFK K<.mwW:r?0E;WЅ{")01Ӳ8ͪq ?"gJ73Q  hUyR(TM(f9+ӫJٿyC|e9 wW 5~D*:AJô%״5MxvN5fM4U5qmOɕ{<:s4J"S_O>{C~Bk^LF1⊝a ݳ-8WŪ:lp}XPP-w lːgpuxFHN][8.RbY[YLdW3a:,Mny:oK{o^Y!E X#|19B˽ {]|0^FnSn xڪL~UTó!Ty .qjܛJّ]}c.HqlSC!2BBCI47[[m*VfhŠ8v޸zug-/@QT۲EnDE1ĝ~i p~Ύv %)Pl DHQհ{~P Pjv~T?}j4bszxw]zD7,Y) ƛT%I\!cޟ{"( "B+cX)ALeOvաч ;ώT xtk;}AZҲ>ޞ8#no^Ŏ*Fy9>v13M*d:Kf?Jnm+P~f E p./UR?9@*(h`R~~e0\<tE7,dea׻x9 f5Z|ʁD5S`ؚK+y%Q3i*c?t*( 6>JHs*ݑ /P0d7mxC%1  X7_M:=' AS[7Kꘔ2tn"]lGQY Ș}73Ht ̝ [:ߦTؼOq7:5H+/RWΰ,6!ehn[24"!2axQbVpƲ?vV)Ֆ Љ@(2OXp֥,Pj_%X]KObɺ qkE/\C% -qɐ ǙʳZ3d~NoXLv+fz=IwTShFsD+oS+ׯg5vHѫpfC6}.'qSFu@]s϶`NaxKUa>/uH^J0f5vV`c-I"?c,WSb}#*4 P߆ܹe {ST m47>] uֹzWP m8r @/ |9LZ6{tR diJ%)c Z@\AB(EXv%E'" ~:D"bA1e,&A@m ECPlZ AObzm#1o\J@y=o^7/CIzv4Ҹq(JV7gB nTD[U2*[MM?-Zn8u(H $ɮy^nb9,RDؽRyV>ۺ[&L1/*HSlNu "@tf8銊e܊z/İ6a%UCSyȘM>3D@u_²F,V"NIOjyVsh}?uy;퉐j{̎{}7+_wa^5iuL/;f[2q WwmP/^MYj$:cKi lm/˃Ѓ=o<]"Jrabݧ?-գ1Fsƾ-nFr{}:bŽۉY_J}DAVb;g2煌i~~v5wtPnpB-k͒46zJovBΠ^X?>x:rGSt~lU%3 &d_|Ǟ HЈQe3X}jz~+nI<\jMߝ?`5z<޾SXTX3`2P:D7} lF\N&anah zx5chxV>P\D6 ]hB-5!qS]x4O+>K#ɋj%&moM_")eN_W-< ocDڭq!+2m A LG@Yc ·qPtVJS*=7'n>ۂ^& =HU,9T[s- d 문9~mP* O~P[Ɵٹ$)3-KΦsGt :PT_GʞsQ1jΚi ^aH&Y0gE,g"*11phM*MyoCyuw޽_ˡa6'FaAOcJ ºbޚVWg 6Pn`K2̏,fFXz [;l ^~m~fz@!xCY3v꾏<[ ǫ |;#>)btl㣟~}p͗0YhFu6|#pz#-E6!a $9!Ë(e+$!<)"9339oG{lA \aRDrCƗAg\i>8`H ]>ԏnNJ]( Ę'4 &e-{mIMRLDGw7- 6-L$G#LbOWKvts'H?I٠ۤ>b98hi =NϽIeQ-˗%-&VB4|l{w|e kMty!lw9W(M,2hʕL$DԭEf6mn4hyJ%9hpXvWez?B l̄Y˄( p(:[ϳ\>/dzx:u!ۊmٶ-B;ǴPK %U,~UF!%RE(= B*]W˧7@< 7Fa ~?9W,9x]%?vNg &]?: 4u9?$xPH)N‚g$Yv-S 2E6|+KC&2 KjQm̲XL\ΛNFgI0Dx{Vld+}rRW]E#^oВ0RRH,F4- }gWxz >$_J %ӿd1T<>+%*.r<5V)ޢaQ dMP*R'`m}c7\UbSI2:)'9Tݺ*%_I#0Ht<Nl'/G.-dSF--8ĴEU2;XGM(%*%Q:K\ʣ's;J6~oWK*DFX7UIsiks~$k%F+Cx}hivpEL!*0el3f!ћkux1| &\Tl{46 ^u+b^)as?PيGT!++E+ohjp%ΘĔa͎ 4~ e׻'e ^@U7D F" `mKX>{>bdWW>bO,ߨE]ʟMyidE  ǧnn2v꽪hvUJ >R(_gb(bB\n4%Y?qux!ā(OfiAk*$A)Rǟ0 ='ыջ穮~0Kh STڕu6 'B4?j/ђk~-En8Q},O"ތ* FN jџ*DajpH7]uG@\ώuCYo"؎7ܲj qW5x5gUUwq=1{+8^G2P:Bvy;Ir2,y]vhv9d:rqpJ<Xd]k{fBO[m|iu/32T.kL ؅)N+fD~S:\ Oñ [;œrj g"6UZ<X5ՉSyk#Uز~p-DgOlqZwatWDŽs/i=5uK$ޏ$#&?l\eD!T9{Xbe-({tx&C(= 6!U_؍1w`t/p,˰<v`ֻ+_y{]eA`zM>ML 6)aaLq$vsXQsd" Uw%.Fr붕sG TqQMGG@9y9 s\Lߥ.#tS(O^֎q468 Gy^Վ<+8I3}{'9'SqWF]?ddEz@eɷ~%iG^l 4KUGqٶE*uG1>2?OI0:PsCyp}5UH^ynN,s_yA 65q%@  =q7ҽp27#J"|%:DG&[7f$aO)$.[o$4/F-Il{+ ={l6J# 5bH M9;f~W?H"#=3\oGur4ՠK5ʟ5xGǏ/F!޶'?J;Ksz@r4oMqI_0ağ@;G f>=eH?ǿ2n@{}07}R(|#hr`UQ>'jS,H@E(I"`|Sio.9 :Gr^L*O)KӨ3Wica+ӽAٱR\{8Szfxig2j_VpX :R1ppGWli&A@qd W3d+D~"68㋏adPE#$x̙ +nv回 _v= {]{n;ݣy7dT ٕPߵ=fuIlE29}f߮-n|M5(BMf;B  h.Y0 nmh7վ.5@^:B8|pX 3 J$``Rb9 DDZ\GuM:eB/2 Z ̀C>QH:Qb=YmuE^(*+>1<|r0ڦ(%։bʂͧ" pX3N ~4BQ ݐ{B[^hZr0זu@]X8VӂHIA(Q)| QXR{:Iv8k|̍y $_`+KY4vd% 0w6BܘeMnw;tYn1yZe:>jco7f赭)G)&̜~ϞҒwY?ħ6-lӰ΀O,LʆSX^.WMX9Cύ$F 6쨕~Wyk;7p?yJUo[zŻm[מ,u[6rOsYٟѠ}" ;4)` @6U/JQ`ΐДGՆ*cxk}6Ҥ^Zi0޺fġ6j=J}m+kƉƝ7o{HDQ:=jU %6PV>VCmͣCޙdzNdфM' [A՝4̊qm45j})]SYPפ66tk敮IcǴLOZ6$#jH3@p%&\]yc kFtz"aygI !s+bCA:ՊbR| }g=Ik#o2O" ,=֗:8I3N4x/_L)EqD=\^H pȧ$ ..mu7|:bbh@} CYR|`4؟{RYW}\}}uf"n:xfӺ.S8Ӽ>q_b\,ɔ 4cxE!G GHm"YHyؑNC0;ܕW{p'ۮ !R d7(5[~Pݹ{HRv– ,9'!l[3 uؙ(j&w ltDRl;F><^+O΋"~(tAIKDLnde˽+x0@Bnlߕ=uL%~I5Wo8ajԜ_KzǢ/ +|+|H,:eջ߫䴇LcP%Q%\󿰏ٟU)jXA0MKIcA 9 ?~ֈQqu%Awt %9W=)~MΞ+*=Pl0uZՠ_ x>Ka~eE7|{O{Dۢ"ypDAH9Fb%Qojn c-m"Usx_u)oZk'Z"Ӝh ڟxUL@< RU{uݼtkVN Fwy#+ v\ەi?t I8Yh_^u②$Ob8QŽ[&X\B, ?!pGtL)_ɐ8`6,IZu1R5, sb0 /դe*_ gz;t٣0pV[!?>U޵ j&SMysӃ>:&~>Mܽ43ߎ(bd]dFbN@˙,8zMˉt9 `WH+ ÿARRQ*BSK'm cqˮ(yCM{Nyr)4;EѠxsq.Kh.y;~ɾczYH35y1'4Ȯ", /y]#+뜔|PNg{mҝA޹$vAP(<-0I8[4f9/3s{k~1+bED^;ǩ29|]ATH)o6x`FF\,?վU&F߾3SqY UwSanl[k~qvO 2Vvsk<3Z3v.@v. u yCxL*4G0IC#O|ϢN8f\tsvܨt3ID/luk!b:rd]\'v,ħY,K2a <~.v} v*V`sd -M*e9> rs'땥WStp3^+ZU]0=IO^oC^Z^ۮ$A(N43Ha}gs>,`V"ȘChBBCѪ+B31}- @/AƂFT"-1͵1Ws'|{;{'֨\pPսOvJ1aQ3gEȏ[ v 4mM%K8Uj3ZB{ MdM`JBĔs\ODI ^]/ÒLgU^,19b˵j 3I֛M&Xn8&}lKb_rr8v>0NdoD)3qd0+) tV rԋOƳ.)s@2-8N[ Dz%)6amT+rWRdLc^:7bS\u&:"vsV/R\ٛcn'W޸%J5'yiZgZg"VY#(,2(|ZoT| $) GD >LFoht.Z4$E g-V(\%F4 =Ú$wB γ#8ms3$6CKe "mG>H h1/@ gop:e9tk\I^) P *ehG kҝNe׌ht*C܊;sz?73@"+7Njl1q~e -(C^s?H; ; 'ͱ_~1u0X? ? l4 @ s .)2͊46v!Q8%+,U[.ֱFq_wr8)E/PI&ש1ij *ob[346tv(鮪|n=ݢ5YGd^Q@ρ#oB c_f$vO @@ .n;YgI:cwrrgUf 44]D^E/ BiS$^A3V7׆=?YU\QQwS1ķ |ʼPyʊ|U֤H xP]\ه"wB.XY+6c}V>K _3[1S iM^ fI G>2sisnP}j5n77y>2q4p8kV nዌ(XuIdZQ*OFP5Ow [i;cG\AQu9{"ao0ɱl!AA^Uk3r&(dd<:B1O;HgD$ IGQ06?4r彿ˬ~6q<\jTm "s.箌F9e6FZ? 1sךctp0N(8Y~iS"+Jȡ(Uo :YIDfC9"^>\ X +ΰ#I@mBaD)V[A%ʒ|˘|$Nd|^br]u;[ qbs L5MWr,lh eK쮺K|v֧EvRQ6JrExZr;O(O膟>m/0ݻ<ǽ)eg z'E{i=J6Q#:L'E+6`-Ɏ ,]K\JJQ )`o_ Py:g1)ŇroNLG{en;E31TNۻ-,'1^sAiK=JwY2]qx^4ρI2`9XEO̰8Dn|aN2"^<#Or(۾&Ǵ /4ϓO#*`%Yܫ:hƌ-|q"+ПdLsާe!,]]*2 ,+?KAnP m28ɹwU_l|kcɂ7*osI#X"7yR%Ҝf_c~?ڦ|fmq1̨u*G2uEʘW1M|ǫ5Z5?VЃ 33iFvw[wZ +,z!veQ1N$["e0r']paI6H f7h]9WbwTj jh2{c8$ "y\\rEz'? I_GKTVH&O&Eܲ,y`dDtD |թ+TMe}h@I(`!G Ancg@*ym0eexCMƹ V+Š kX,ʮXHd*plhcсג C}7qTV))XXdyP9%&EАOt zerQT*mipZrkskKlTO':4u:x=xb"CD* 2-po֒PD.jzTb`3]a_%6Z ,( .Yؑ[Z"-P>(B^{ T٢/ ig `ddn;v߷-d%SDriq[ӮdZQx*;>{x,l9/9őW֍x+ CAZm1m>=e>YY+s;csX̧Vcd"> ԀM2ڍooZC!/*ʌ~\IІ@2+ߪLNt?gE\եq30,*S1RW7D;ZsEN|?_<:NjS͖ꑴhѶb:.Z}7 G S Ni-8%dD96kR Z A5sҎO)H5zl. b2/^CO$H@N vYRTSp_FqC‘gwZruhk1S;r~ Ζ=CLxV D)/OSTxLW\ #]"`n~쩟ΐšPC~>/Y g+ܽj$v*GPbQz@!dbދ>&s_v*r 5~ ؖ0BGiwMJn[j9S\=2.V/#9y kRc#Qm MNrT,fvmZt(B!o ,?O -U(9֮$FgΡ1+صjRtbFtQ1(ͻfi- ~Њ3Q!vW]m_.yq؅3!/"~gWjGGX}9E97ObA!= }IgN`e<,IK\=u_yܞ ++1MmM~8y/}Qܒ.3bn; ʡ7jrשycqoO/^ZXqnqr/jk-"y3c$cr:|Y1400RYI'V, -ȡX^ &;%DG0[~ԝ 8Ep?|HT-[X :v {^l"`yˎ Y\M:&NђNew "Z7l[ -CϜ0faw1hZt$'9P)Ax5|U.Gw嵗XQNS2(v=7DN)?I.W}p?*!zd3G<a!sOl Zӭ gEpQ^٬*ϸ4SFF?覌43:{A@'Qx}:X;[Z@y;>pWu c.DZ'i"NL;,j)@mV7IEQs!]Hօ2/4|:;rk\$H +捯(xk"*p&(ޔgwpzgrhc0E 4}:aL系9/._y_]Hm5P$EsXn03Œ(aRp*ĺ:Jߪ4CXD=*- &%T5ﻼ|&獑?'5h,)`~+اQ~qK'GKcx {I:{b3p|[Sa pp6*6? {da;z\L2oqe/ُnD@q̴&"|#lLVV&wXr s '"QcN1x7߰z= WŻnsa>E&vg}ךa2 ^abbb*b *K*Rb1V+}`((ua{@]W -O&8 մ$>?\0cD I1V_2ߙ zѲ5ScR;MgPUVwbH\=H\:J) 6YzL HPɛ G[n1^oIf JmKAtri<K!:,K1jOR;@sόʻtWT KW[/ԫ,v63&n"a)w:YǤ|2L\ )x\.5b6atbٖCc>@7VP4{}'ycxf 8k[\+ 3gF:(~ Rd#>Sz>K$UAuC,xh h> tV>="jwegg+s:/qO0q+R|Z|)6 bB_Y1y% 4fKq", W"|HZ%ݿkc̓MM輒OROy~NBhJJڼbankOK%.٧Rnh5k6vIR@RuoDtK$ \[L.~Aמ&OQ4yANjvzGJ|l5͂,-ܻqB$QYɫYDrY-:}d:# :*yc})v:8&6"w,*PɨBty';d0:qPs' K-GEN[N@Iʷ7T(K*!2C Zc6n#/sqGX_/PFݘV*tfj =C`Qd4dW!#T9X%ónyYo>d2tl&לD>Ӌ|&la9yGT4C;MuG/!G ;1s*$&FG^R!̱RmmKrbкMZ^yM@E})v[۰[Vu %ŕ9CoG$#)bR:S8ֹ.t!P8>3`G05Tǜ6  ^iƹ)oDY!V_b`z?Ȝ%ٌ"Nz |(,sfj0צgNE8-62Q x5Sv$bS<0N0Cc*T 7*IkG50@dq/UgQ_Gf8喟,틒 ~m[BOfnus!q; e|Ơ@pT?%\I@& 3_ݐFxTWLF F:ks$$ sm׬bM/@@pGr xYLliPm> Ȩ83)ŅjZaT7&'9פ_: ɐԅ.㳟ٷ:bBk NC(B ob!#W0ÔhyiS,_xIZ4W8q{Eʅ5CAiߊkqϳ 4)U7]֕Y|(9: 2]SK*MSc竲]|*x+f5>%gv2Ǫ뻗*6LܷY&].톐|sT I,J)yy094Aa߈?$&v'%rtƣ}SJ9+Æ-4f,~;r<_ږȭx3(:@rJJ6fyh| / ?&{.Mݒ-Yη!cH^{V|M[UGe2xo6/eX&ì #7,]pGs%,h&45tl9'^ iڸ9wm00 ˣ F3,sOCBAf(/Z+\'F@;/ GP0FF6%:%՜$F_c[ܶ+bmig[/F ^+l`~k qRUL(V>>We pcLEOHIb{7VCK؟Ûw4zwE9]{VgEl0.]>=$Vp,u:riP#uN=.l~]Q>rϋ[cȊ7y L#}i+*@ncY8Ƣ]nvחXhuGn6܎S:vEßuZ3ftF$;-plnKowBfՈk)Tzт!= n-i]f-|t@빘_~Vj{b %>76Ʈ*}vh\r{Zt]+!KMyŔro9 م7$;7*%Z4§XWru>@ʍ@-0U[S,?w-N2둻i|]l- tH"O!# RmUC;P[Lʴ$)z>8qOo'K4$bWDUb6=E6 !n* qi7}R_x:l+ zyQ \҉~m9giv%u)i`D25mFX; M_sr 5jב'%L Xaʉbv ʁ)1(RA]]iRyKhGtϾmr/tĽ:0Ryn=Da> z&jgɪQ3raVi7ԊWBmOR@,i[۟K߹]HMs˃vy $4t;Sn{*+{kfUw-w(~O{ !(XEy^WOl~9}l̽ `'/jQIS# 2YsۅqLT}Ue`" gˋG@C?0=#4`B<A\;_m)kqu׾\Iz5$4iw<mNKa2 a/1WuC<~r*`JwWep|ыĥwJLi6n?,WimLK!$ʪ"ߘ,ބG*M9&vXsL {..uBNBr&}܊鹒&ROqblV4#)vCg͞o |ut t|3}Cz~^_{{Eأ8@_]1ޡXU~,7 3¡E/׃8ttR, +~_bvj&{{{NGz<+"Vl\Rihmj+gr\49Rsz 'i? \hPネ xLLg"d $ 2l,vd9(w;6H?qqy? ci^H\b tS@S1I'+AlᾣFB ʪ>3dg4F1^ !XiW%r"[Pȉ,%7B 73<1+d㒶Fi)YiAJZ`L_?,ψɉDO53 ^8/TĒhxfbJdB$9 LmH/V/#nw‰mI [0nȳE)Ca ( 9ݒ"LU}ck8B3Jis-<$. ܁- q*ei"V ?ĖăQ9AS0 0#[JT[EVmTE.IIх+1uX:w\cN2 z7dыӜr8ü.ݶ7-0ۭލ̀]Xo1|lH oؑ3&m?>-MH\#6:M㞍?3nU,x}dFrBʖo,&t[)T@諸GK%^ӫWX^/#.˪ޤw!{u|Ge8,*SBUVLV9nD)<^14/RV_:/:34i)ъUݑEK(PFa:sZ'I(?Yث@*4XF8td 2D'w7J<)uC}'Gw7Ets`G @k<* GW fӤu+= ˵hOK*'ix(q8-NχyO RHL?t^s-eF̈jUǥxIޱ\y)`E-W.W r  e/Zwk4xC@_#_* |;pkYjىETp f͋ $uoYSIT9!G3_=Ol%|$PZ켈߆vTpġʯN㐷ٱJ#Lf f Q_IDjK5nE΢YmYrP% d'ʀ:08:P{Ocp?pH.}9(oY̷EWN- +r)ݩx",ʙSÑz] kYwP)'-@f"{>M#Qf2<90$LjpSP/ ةNYK#+"Y/X$຃}Q5 !pؚCp,s,ёTvh>8O8+}Iq(e2{7'[8J  ~!$ a=`R \yrE05+` &jC͐8tAZk W}NUϺf_Wݟ&j4  ?x(9E 9 XI4gMQPlP8ߜE)J*kF*V<=os=|E}wY1r|^݀](wmzBv.aQ8<?ہZk'"Ro(]U [9z-rą?26ީfA.O4S6jҥTj#5Yڨ瞝pOp}C3_7qMԥp^ R<сsh@cKҮB sT@)o ^<ʠK xJ ,J zZH\tv\GagҜT~7@-mz Üe3%c[54_~wyK[`x#a"rN/!EF*늵[H?&i6n|] C~{OO.0g8-hG 0$;Aq HhԛIQA_G+M"\9N5c C V8Ccj*W]J"dƌ){H׻d?f0Wz3 -% oBne\[$ F[*N:PϻԴ>ŵGvPQKDTx0ūf]⻗"휬o!ËHSҘB*/mg*c4tvkSΪmLek|c`{u{GixeX瓘`=ucKx-9 ߿]K,A6_KKWgk gntQbBSGR5O=qрEqZ]NkZ7|O~}cF[‡RoxE'/GiuGcWR[츪'܈p%?蒬?m>ʆ)Hp\^l|~&stSA'U Xs*tY|tb{Iv?!HʚJV9UT)u>/98$? eUP+Xk+cF-k^JNX}{>^~BV[D(UFF_$";}^tA65EBÕFœE.9P?'-X&lAW 84V.7񳜾H"5W@_$2_EM,=<,q\?JIi Zi 8x̀h`Z->z: :D=}@iDhF r ^dp 66dv{H1*QuJ_tv!Z$޸܃;)cP0JV.6~7Vac2& %Jd, |pЊDIH7óau !aa7a%HaƗ F,PP'!ɞA6̶o-'N;r^sY.n\y3owQ#'C.+ O*"ngUB/ Ξh|Tj}0ջs`, oZ+0)p@BZ G@T7$%>< 9 iq&~cI3o[tV?I6{rokFc/N]Sl)Z!mvSXbNix8 $kRΐ,Gc%fLsڂ\h (8c2_$QzpNYyyC!Iϑ*hi&q SX~g+IA𛻚Zʻ=m9HR,%+Jt =RD "@ #!Ag[x t `# STb^/Fݔk´0MmoMd[)ɼeMj^( q˪5h^Y ^~)J KXڬyE 6NOBTz[y؊W,! ;g:UF cu(bb/:`?XfiO| ʈ,y'aض6e]d̥Qy/fv;`ZcΎ12gw>`C؋\ءeͣwcyVXcw.=}֭o̜b'{{T](1jʓ5c:+p*xړuNMƨmS!_EnsUSK< U[W/BJX#eZ_tiPŎ@$$2i؏H GO`CO>;dS/2#: @ڒ47n ő J-pPlc4#*lg\a__q@ s;*]zE Pl'ѿ+9L:R޸I͐414YbۅcBuZԍȺds P>rC%ZN-Pը ˧jlO@.=B:$g6. X9+aomO!05}` CrxC@Qi(Ȃ`sߨMe "qpbBCy"qP?ۇBZqc +w dJ3{M/`rw+fKb^8:^^& E>EkoAd |Q JN?6eHAK (w1xwPhiX]ſﯠxEu~)mḦx4 cFnLT p"Dg½Ja;vw;OW!3~dY5o/jBJ@epkpF,+meŐ@e\(eM2P%@7[WoD5CVwq7O]4(^8AE#MSw(Z7y$ƿ4Qf+~&s5|˴ ߶# 3˴gvR4$}gjH-jT\%RJ&;TH~D֐}]J1W]H-60%Nࢠ9ʰ›~kKa8"gd&`8:,d%.[ş޿Eᦿ 8<:F8SsH!oB!(wϽ6Og]_<@HA +9H/3Omg<+8F_:1 )mR\K%!~oip[n%bqbQp49}R2jKN */Z9<1`.XR8"kP5QsVgK Sz~[Ez\X^~n#}vܩ1 4ʯ`齩]R,ҋ5 ,Ñr},Rηv6⳺?PfOBG4^x+$=2U^R,=ND5b{8{k͝^8v=tG<ID-9Y:qp>t#ARuC0y"v"a?#4? C.ɷ/0zгG اPO$q  -ޡY_{+$q&a_CE"XݝxME.4ɫG^ķ&jT+<\;b§? AP=<+o+o,UiPeq?%{}=iJ?<+,S8+őX=$BM îIlDZl$NPue#x4UL (SyExfe^eyu'*1 f!#g/OxQGts:xe+@|Aϻnt-d/$ȓ;wGO`/Cۯ”Cv9 ^E4`ЦhaOHq)X^Q_]G {~㕸fHi>8F%7Gu `)Im0nzE::* T[@Ew\Ql^}s_ÈSYZtȠZGSV݅T*YDO Rn/1IɱS}s; Soqxt\Leg  0pQq&褦~ Q1";#Pv,]$O9V`w pVlsIxy#Js_5=;Gd!Ck2%ve*21~I"'漟#%^!JygL!ӠsaȂaklH~V<.6d<7σ?.˞<}aw:ؠ5q`JIv@;Q)φ:أN,x.㹝Ypr7NP :uƔY;z*mN*α`caze> .,Y]j^44kaW6L/b0竘О*e {l>_;;yt LtdA՟Y&Tx˶nbEud:p¦_A.7IcOq~~sOi'X:.]Χj>E?}#4S6`GMo (E}"K@ɈhߕpYpϫٵ I/ϯ0*$vVU0!+fvCEoE CI*8p4EpT!8O8b =%K@aEʠP<XoTa6ܢq/*+T.&a%>3q>MVDQ(8]Rp5KVGBg[;y9$Q‹kPVi>آnJhloiIyBg: )j\)T< 1nnf`H!T%G)̩_tF;N{k0.}Ex!CXWtyOSV7xT&!{N^DRgvnGίtaBeJh6}c Ck| ĖH]p;S=˜gC`$:+Cwʈ#|oA瑿 U)o `;nƀG2}Yyp\}8UowB?.y0>)9үnNr_I uˢo !C5b =lժ/&Z+%rב+xDkQd{a̟'P} {'/hɭlKJXE RDZ]B n7{X#6̴)mvYVU_!=R o+lpo㊪aJ{wl" ްLNEѐ2GI!p"ڱT n(_5c  գ,?QȪC. 4nٶ@HJJ-׾4g u`)ѳhU Sѹ Ch7GP?Ɇ 8(0۞V]wLCUJ K<Inoas/I4dc,V:x*'PGYX'P@Эg:~vUк4L|-3%~Kvq:` Soi;i!O 6{LM6 зeuszuքa5^ljOMȠG@T g:jyCI4z'ƨcIn01;L_&}(;”Yj(|p֎WWqrnƮ\eLZ=Y$-O9T,GNa{y;7)2s/L&6Ð5%4 I%.S@2@%G ďՂyB>NhyK88G~]%I qcX|L$r#,ԓZ8 N^bhF"]+9>jq;Yr ! & - >hBkh"Ӭ E*0; @"E߂M$% 'H3`_:#ҲTy]SR7-rۦqpkQM wuGuwFv<9K{ud\1N"`]͗`YXwH`}o1۷(O9ov6Sy. xwpw @v fį$m@7Cc8)վ1Å2o!/Aq= ) ˱ЌLJa:D|ٽ|QYEyੜq~څg8#*5MsXi<0E~w~48+̬5 ƁLew0 !-m5ȍڗWPj3*uGɝD>r(%1"'tjU>2vr\fP1zy'o}ZԞP Di!,Q`Vo0 bDѩo]۾1Cy﷔ц'b5hhDe|.M9$_4)Ȓ˲dۀm@g$/q⣂|H +lO*DG)z֙:Lyi?Q$)iF63 ~<i*C$]5X< CuWf}^xbLP'Nz7C9[0P23Dg)gY NNZw GofKʶ|ΐ7xA4,n dF<\>D–#?#0uA%~?p,VȋH?aq7`r/4l-ATY!k,ZVtxOF|"Egx_[[KD*G>=4cP.H]9{D3kQx6a4X4 :wzxϔRϾe& XN@Puۏ 5QYZ̈T ɨ:GuL8hV^_5泅ƍʝ1?(F 17aQo;z)X>;ZQ8=k S#IN=pOϯߧ Du_< :l{.cAup{~y=cylpQ#1݈ D]/~wK! 0Q]ڿ({Fx`Ih !"%>.ƞmCT,8S1,l Adf~㡇/C?O'y5͘B }BI?#C12NM_V!;1c+1yywxSl /^T;}],#&"Oy>K$(Qj ;^Xz ,Wx !soQa,ٽ -o^[xH㵆B`C}T9 M5J_ -Ɯ`9j=+XQ]u4[(i3^Br$kc<ثkc:7`FG6:&[PY85yIG΂K+pY})*K}뵛U 3؇M\A%PO7$Y "+O} hmH}b?H,O'\=s p+R}9+= {e`йap߳dxq|w+V?vSA85{K3ITH+9*Μn+ tfl-.'ü/χ!]nK?ړ4!k.B֥1^mϻcr.ld%x<23Pe3obr}_<{ }͜^]`*1=^(/O&*<~h0R쵓D2)"sPQLףFeeLƜ&bncqȜ8 RvώG>'=ɦu:77P+LΟ(ǘfon`f-T_tn_qUO(-,TT#ąowDŽ: uct%a{;wsG` <̫Ng#ݔR K"gze(.̴:5 Crp86mwe71*qUKb}+#9obf]rk!K/S':8Tࡍ9,H\Z8FvSd=>(F ?[&΁]sGxWpƃ=a'Z98݆*(9Y]2seq K Aj/2R.E ^x?,Ǥݿ;s0g'ֈ)}|po^;:N ("{N[Z.kZu|:" XQuQ<ɒ*\pd1 IdCio,uwfoę~yÏ;o0' X]@KK\L3D㬍l 9ehpLs9OT{w' ƒY\s*\Oi,mqjvYWGCB4$txKHZƾ( G̎/EgY&[ S1.LTl04\uٍr5w0`B UdIzb}#y膟eD\\ԍyGK|~|$P,+ P_Juӧn*;R ]6=貆0Pv8tk1Ԕ۩׻Jr׿Ţ燡S42*qj]YM VI8de8kfЧI],KzЀj߼V͝73@}|pmM_-t8vAM#a'kxssUSHO*`Mxw: _t |ċ>7^Y4-ևajǚ{1?#)ZK=IW&j'oz',n!=}p^ R!QS6GI1=ߌ l+ &u9iV|Ƀ H Kml䙉Ƃ 56TE/$D3JGE"> ILanƥ93\GIH1|=( VD߮p`.8LCbGB[U? _{VMrǾ=\:bjQ8[HQђc) ų,C-5OVdyu8q\6L\dTp`dbPx >=!ce_0K[ YpuWǰ5؇ :`WT4y^LdsAgjM̉83qn.P'jOWqs񹓔ùGy͒G% =.u(P3KG5fV4~1涴qU\9pBwXk ~[~*͍kzZ1]⒤4 sy7< iu]8ˢSxG럠<#.EhIK]~|j}ODQǕ3˾CRwi$20&-i}zbkW #aD9 \+;[;gP'ϋ dΰ„K9_SB\3X"owG9$ۼzfϷVy%r0v9^]YC43TmWɪͰ[rotw0cOO8"ǁ7+#kDBiFQTh(m׌OJBY$R2cE*1/Y O><*j; .(aƘ^ɻnbuW&Mf'TR7^!7ȩyKCůbə^ ? ̔IU_h@R!P$Ǡ(o a9D), $T lRYYw`rsk~B;%Y~21 >k zbO܉&vxĩAH?[㸤̑:[mt{SɯLėW7k rA8 [gU*Qճ5;rJ;ogkf-oI`)it$Xp'雔IK .K|0tT֔#b3E, wCQo4_dor21% [lPP%M&lI%#Bi,l9_o&%w|-> ֋mUk- l7(.}:#UM<J)?a~.Q(\h/" ΌAs<X*;%́}dc'wTs]Yٶ;p,+I*IS`X2Y;i)a%ק /}=0,UP!rU#i%?R=Oԙƅ;Kڔr3NOoKݽv _2/?ؓ7 7n#=&Sa1 ,IADy=~|Buf`qF, p@ԗ\Y_΢x#\|==ktS)T–KQ66[l}0*e$qݲoJ&4.VL`Hr>`6kPl/!:t~-CsQU&͵dQz~ֱ6jPXs/Pntf]ԇe|OKז[nVB񾩽2x?O)DBgh:k5]6gwqQWSj _qѶQJ3އ ؛ R@ꝔCXU$L`҂z1H7= -¹c#Ef|c1 l>VkƝ?@2ۢH %8Pcox,s{WkّfHuKV ,fh`ŕCQdou*ژC^7@>Gx2gY?йd$ޒOE{?h8M2P蛡!5c4+(ե? '8 `P:Kb?R\6/p()h%NgmqnGY[˘BuLBQHSQvd7ELJ 4Dٵ [u*ֺީ %M mo lmpRJ%t 3v%׻\x=x͆}ل98 ]^:L"U^_[^`{z2󟕞>6\H(iAk§NbU. K3\ A\P}`2 v(e{|byJXj8Q%oғWFN\8Y;;)ֻ\V<݆i[PamuنK;˧׬Ah. opr֤0&%!Yodݟ;">xyrPsN63Q1 I/Aٸ,n.Ҋ<\pl@^!sfnqt#Bi1%|~ٷmicRPdDxJ%;M c{mnwd}MVx&g4jmrn ^B-K$LPs,.R"ĮH ]O˃ߋ \08bu]ʰjm+whfyɹI<.r9R KFalh7R T}-ju[]+Zy0M~^s~f̡ >r|97 ( H`<[Q^KΛeUAa_<^V; '{|v5[[36rq4QFi YA7U:OxY{yJ_pG5 X+5C?)Bz|M?l]Ce:g]/UpX-o.zFTc(yo>8de8Ϧrڼӝ@!R/Q6(@<ŝһTo78vZOȪs㢇WBuKAU\M !hOK ["*X)e(E Cq ~ڠ rh~ʄ sG#Hn1<:aAZKHk(iy~eb=ScB4_[PcQ(4{Cҙ4T2U<^sxl(O$?G}ξmR_0XY$~sEÈ4ϹK.U-}fIj3Ofx[5C఼(J1#(tۖictyX ( 93Ӡ7Bz1k4`ZZ SZD/$lCZ ޙw [gߙ8 NB9ǑyiyKGrfl媝|O__"u]..Rʼ6)g>Q +eKKpB^N*}Lt[u2ZUŔ 'D$3 nHؙU%AO`S6^s&yxuyI{Mȡs4x{|vO;CjI{ q+r(B@(|ZsQzSTQ;stW%(a-ZMɳkAAݑ-Aݛ$g7@!O NN g~H x'H *ϡE6lT4lɨ#Q*6CU\ȣP,oьX(юS|-捭 0ٌ Ka8bYi0CjJcB5g;1X!=#QPd{,3OI!JmA+s&$:n.(&MM୼U|s2$ ,Qn~bȲNgzo^Ò8WpjOP\0[ #q(yH)M8$.i'xWyyQdQo% ),ɓ`Y-?V0 1V:c{cM#1[;8#xU|p!.`N}UV w@9 b#å+9`E4ն'okuWuW̽"׸zWkfOQfnG6 cU  s(*1)Cz&QĖLI&Y ~)&ݽ܇f .X1oC 3.Iˌ2>HpDx(Ac'i xc{P=FdL(z)T=P$6TY,h:RL[C('0Nk^2VmxV(j<꘶~ڈk-=i|zW8*'6(9+!Jn97$뚸1< @PNJx^jdua!|YZ׈>HK#*GB:e:Ez+bopE.T|%fDc(oI"y2`)R6Dr]i>/ZjIJRǜ cZ/ȷ/ 3=sH),6;uC]z| 4#'{cRcr [/މAkO/BvE7=ov~lUHQsN7 O7}l3 IP).f 6ϫX+Y*wTpS&$:A zՁ`Vm`:N{BgL򲀒+CeI˕>,[6tq^)ŭ9cQA52[rmTR1%!?z띗p@/7e#ɸ&}wrnt$֮_ zk&z-9Uw o7qEZmHz;c aꑝKz@_J)^M$:)~Vk:FPB,ІMOE})ct6$SvsGe.4PpxEu{EXWKŽuw;d@FY oyYa@-ހP{:0'I|U ꣞OZ~o/;mDK#n0#c< o$|ٍZ[ܞ>j㬥]'w%;0lH뉢*6Q3]P6Cc:-Eb/0}Xhhh,DdPp`o|gVvrt %9YdX=LHǫt'R]>[Tv5mdsSOTX 2OUN*\FvLR$^>fw` Z!y kw :73+73 j3zDaw1sau2؜WQISϺ #ijeVD>f/~mtzn_;; xf4qu)YJZOlIC~ґW/g팹_bZӦ Ɖ"\%2IL75'If +.G:[eҲ>zmDfb|f!8uZZsf̈ŗE'㘱NWJD}!^y+H˅Ǽ)Eta8k%cl~)_ݽh/Q!]}6O>{GSvc[Wk9@jHYswCXGT`xO9+T {6jUK][6PP:V䝴JKЋy'8Ro } "Cxw5q{fjWC!cD3_jT"-JP9RX#pk^ 6OB;PE=`A<.ˍ'>u fk#qSJJ~?79o,dO\H;cW 8׊,1@`#6*{4OلBw-/DTb&Y HHf{,M14Rg50hpаs~5v [`/WcDT}QElqg<獋c5L&} OCxZ|iM i>guĄq,4|_~[,dvpQf2[J{DnnC RB;|w7˄IJjh1ޮsi>h#d G;ܮ& ۪,{9r%L 0c?$ӗwz7dYߥT l({OŔ})Zq[h%@1T92!+>~(ĝ ]i*~]F+Sw #!/ o|F:sO^Qܾ6{EM$9aN*_:pʓ ?܈|dYSsC1ErD3Sɐte'-zb?q xPQ,c5hyyN,]!_Jt%FȊxMHa YU<^aPyfYFX獈r3-y&<}%%e`1D;z=)FDдGf!m5.8>=6SMw):0.xmv\\& IăJL}u_)!D[|5q16iC,c>* AE#O٢Gq0&Q%_/5OIօ߶0k~< _hOXQxE_0qo}sEnYCn0,lI ~`ε̪*dʄ~+ SMMrcܬnԿa S"VJB+3APC>ÊrgWX:L0_n|sNd(+jR%ͫVWp ( (8xc(ٿH$2gds>y9~cJ|!oo#|%" "D/PAܷMƐDહRbO?.:S=Є$:!U\BFqZǁi; %,']78VthL@,m⯨^Y 1DPd(g`t~HFl8jUƗҔHvcF9֔q#㬌6nrmPKp_>08~lEUxm?l!~% &q}@/p;;|`)E!&fy!M,o~=&XҴN`lzK?~(3X[?8XM{` w]e٫ͱ~3Or;jakT?ձ]ؒ.ܘa޹^Alf$ŠD )$:Biݭ/+3}{D-Q Jciج@Qus\tOp뷓qՔ/c,G 2(nF -n^n=ԡb0 $E ,T=XG'kp9s?| 1ܼ|- Ȅؐfu<.m'ׯe_qꥺ.`dBmJCZ7B.TdrUGfߕ6Ǻntddִ_1qsU?'[םtP?DfJU-ɏݡ\T{'hꎙƛ.t.vP9 gǂmgi\~`G RM'ªtcJn-,]xiZLVU]0́2u}V[s˾Oe.o_Lm}'bA, %`2HaeD,PcXI #0֫VdHKEum\Z'宐WM9%hZ~ >Vqq=4<$~/kMoثrXqYmqspտxFv*r"H<*0$da&Wx@&R QDK˔fX|Ls.S)elh>1RAo`1΁ȑRFxEzG>)XR i'ӀMo8,98ʄh*+g_sڣ; +1zE/ޜH$Ÿ Z)}uYGg31wsyK!.B@HkGgc,F?IjO3M{hgH$w+>JqKٹKjAsٷKN7L&0n3BIcET3[>j#/wxJ'<ȷ *M6ah + I:tZnw6Ňc%|Ȃ盩7Ra/N5Êbĉ(^Tԫ6M7;C]Lz$/f쮏Fwޱ}ZSK`j̆gw^1O ?r7PGAZ9::#e:IN t_Z+K/IP؇:^D`)AJfMzmB FԥLL΍z8|z-;yh1Q v K̦EUɀh^5V|o ,G4)WhL3]$@ȠFUO3O3c&sXd!2|K^ (*4S%Y$4DsPEB hc_4QR$tKiaX8!hSTwp! g1 S~lCJ=- LoeГwqgޣo ,1ΧMdSF&SWCL!BAޖ$H㼹n09X)$&%F Q|‰tb]5F`+&z z_GG=.!tC͏RHh4+|I꣝,Yw [P]nZ6 6ѓΥBLb s-t8nM=; ВDP$[,R &ѕ(!! U{Wjczs>qOs<.~HO= W[bv ##bkV$7XR7z@c t@b/feDN~=ΝCvuC2,tlvHR{?y !/`Bw]>qj-l{ StsOȅ2!.9W=.m%`5Vk=F/,F9x^ nf{[j+np^FkB{jE$Z=˕UN/Xq[%H|{\=gTJѹëz.\r wpA7:rZ$&>f}}I/KE7Z'.90|`{"\H0~)}3a8o-J,X/Cc]`ؑOڶ^{6Қo>;E#iUfo y 7K0Dwdy{1x9.Oa}r:ɳ@%r)ĜyK  W|.€= #UP l'(;gK% uYǥbD: ÙZK|(WG!b &ϯj8W_]PRqoy) EWI#qRⱪPDG"s1E^,B>qp~%,Y @/8$R]@f =9 )ҿ&l,~>C;>콹vݲގ9=IoMYh%_;ID!XȔOIDuZGC[HL ̤|d-M uq#֤%W-'u0=ڛ9آ~a;CG'}36=$Z-n|GŒqMnp| /̓*m`whd#nA>dmҌס(BŊ"/Aoa'R徾ݐ4i;dŌ17.gSpUV4hDkdYjAGGD,OKM=L 7s?TKA2I@f :@Mm<je!8r8 kE40d4ٮ {jt KE@ڠ-p4 X߷50꧔)w|[c.o70 51Gl3ב0Hf5MDɘigw04]xG'ܥ$L';`]Ѓk?*p)S7&{\}HD;Q&4[ӍqL"=U2Go/l3k6ibC//vaҞrgjl 苿[ڛgx>jkUn6HVӥejpKjĜ!2$ &U7&a{[Oԫtսg\d]|=U="V~[+F8e6Ub9IV`;Ř7DAl`գN_s2%ڗ8YbzݤK)<]B0ZqW ӵz;Jsooe[!Nf=ݎ]FX`N̆iv h ޡU:ѿ+ȟw(,IޗQ~T߻XCH?4t]ǍTδ$%7(Dsy=}_j;!~GI;cIiLBxSw$ϲtҧ uXzkH}2ɡPxO4MXlVi;"4EGt}Kx]<>\s ^* 9qi:]~wNac#यz ETa柃F\v=_sR>|Vя dDGw/BG94j{w$]a:1yOFY^k8CNw.!.Ypvn9=D9ƫŽ8W9eZ[MmE/NxRՖȽ#$SV?Vb'nǚq7h<蜩6TC<0U|tT.)=FLqPūB ڄ w2ߜtx)]<\F.߳xnj?oʫ[rlݭdiQ[R~qv'rvWlLūoZ/+ {f/==yAKK%XN3? a.L"! ZsI7LGR:_ 0zuwFcy}=W;ڮ +>Jnܝ O)Ɓ/.$WH6֖tɜC QҦ &9=1Y 1,N|Z O9 KڧKjAZɮ2L WP_G7KE<&>좼wOۧz* bʘPՐS B3GY}j`f >u*?ao(m }"y7I 桭b2;~UY}"2"8{={UJ},d)A1k%L2PK],& µ?nO fP!`U2<.*2DŘLzۧJ(CT/:PPǢG2e;{B?#Ay?[ o#[pYo6fb翘/MZ7 :w\ k⎿;S$RZwhos-e.H3/˒H++Y.'A8ml*9o[9E^PUu1Qdt#b1qg?%?jާ$z-%wHhJH(}1ҪZ24CTi܊wbg & :wX¿<Q#ϒsXx$X} G<3PL!ۅdB$wq0`E7bf0^pi~did!c9~]L/Ω׀0eDw ϊ8HCIp^nde[2Y\@:c_F?؁yC /KbvC9|MEylq"#;[e A|7Ϟ:[5GNRuAbqxJ))8ْ4'= >X-WG=>:O+"QUE(/956NEe">J*G,LBGK  Y+֢rP|LtAx$%q/Vӻ)v"*Mzx\Xat݈9f"&=2>G$nσ =ba;%5pܧ6s>&_zqIߟgĬ7*zҾ=J|߶Ͻq`1e=aUæ(:F!fU7{6泮N064y-JyC|CFd<DŽEC@Ru*w;bldu3쁻pj&j:!v1tPD\b3 ﭻXa Yd"zCqZR87UtӦ˴i.ˢo1?3%;gxχW uLݛ0[ rv~ڝ^dQ?ʛ,;Sbз8o?T_ZG-|{aNn^XVX}ͷbZӈяKe%mk\ovmf]SClv -Qb˺3/sf bp-%9&CҎ4L=GP?p#۳Ӧ"U!me CQW6Q(KYa]I;$ei$ݫa/׍w:4Jqw\!k![E4t-zF{mR fB<*xv. O! +$H+0 z#c 1q.AK^}.ފN_LsP@ǵWfN,̱pؑqOJ}d{^D39.W$pL)<٦m&]ߤ~v[P;@eD ~ޥd,+! !G]a8z-ZC\~BiPwg{x'a馧C<:7΍6GQWOTm~~w .5d98*ܽz7y.rlnN.9t|n|{O^<,%D-s1&')Y_D2$Ke *TO&{ A+&9cظ] %p<)<ºtMJ_'2ĺ zS&1;'mY@b{#OO!,ΞwNJTlg\^ 1Je]##4;CU* D ϼ:L"$l^8;5[Lbh{+:,cX݉%;fʝm3_M'56֤5a}ӦCY[=:Ԥj潳d{3 ߽=aptV.n'OX ^ݛ󺆦<.@ǎmwkVhSk{#j1Y@^v5zQZ㘥gW~tnRsd-L~jR/^]amek=2T^=U$ [Ę3,Umg]xUőξ\_pD6|Ř{hXuW]g5Sϡ},Qz4xJ˴KaG=/QW8[}=PS"?&|%Rwk,H "-Ih$c‘5eAή)(6 \'¹b\ezwa_#Z:0oF?y9)Ӧ=Q? T<$i>?H\Y^T8;]$iR@m@W1pox;Կ=DC!Χm+7%X uGE*HPemI;`< * hv5LIhkdJS U""Ey)im?HtK frr:>lG%_wOCS; ,jFe׃|Q(RS34>g>}[NxM!>3%%{ W]fd[Ii(}46٨'>;LW(WolzKu vyS _lr2,f\u1Jo\~Tg~B16}&c>Ə%?װW?)=s&TuȳSn!+!YXm~gI;VʢlDW"4Fw|t[R%2Khx*ٙf9T\>tfy:|+ $#U6FsgH&q#j{tj\{KoV^D,Yz hiܶ~ۻ:mjtK$'gtr#Z';CU_&5X*Q O'j/R[ԛJ ;5UTMm-;IXV)9 L"GJGFeETF cI'5ghF0 GKNAwMF)&OB=e;e]+)'XSa3Vڻ "nﰔ,kU@i8^]>G:ۓs 3#xY!dHgTF{[+,uS2e"ae䊖H̐~۩ E}>]*+(d$ ]cDLvO(t\tERg7^Z`T6GY"8\N@ȸt {n)9=M .[rwP(f1D\hZk/AC{٦}$d˔J<`|u,Gb? /ia [fzQW'Ē-*涆#[V5Zh6{AZ܅8F4hu*BivMO:4\翻[VOr X TXbH& wB9C/ ij?gSzU.p[b"YdkIe! EA 8FJԍÔgRK—R//WI#tPà 7 ;id˓d1Pb}ւ~FH{Ckg C1˯G^K9=<:Pm~ج68/&WbRF2֛t"TDӧ[95rD5e^`wv=q>=apݗ$n^= 3.1ZK-_Neߖ^zq&1e/IN*M P䒃B{~&?3bJ{Ah_MRjQ^ۊ^9릺3$du܉$qk)s(Z7֦N'ӈj::[F[!Ex]fv׭ vm.?.F,.E拔EV_o8蝬i3RhoyudK2xY;/Tv^`R2ҡ8ggĻwuT^D$Db.khOk8bt P4 Z§ +$FelCf}l~ٿWl:_({{$HMD:ѱF-)P,[Qy؇HO(QJ|*bxcB F5?^zE_m(DGe4# sw9g9$HJ>@txsg.?~a ?;n~,Q|8 E:cysu r , xJyq )F{aɊĢCzޝ81'TAJe$n{b*m~| Lx^7|"CipO5E*!׮',K[0ߠ)Eʦ|yܤha79XB^`GhF`L_ S&?K$w,ߓؾj +_e9bA0>?a'NSi[QzxcJ܃a!^wTJڷzD3ĝhVE=,k8+i sX%Hj7 UXZ:[=,r{TiPԝ!d_(AYCAy 4.+hg{rOx{,zr ,,]Ӌ}(_"D<5a(P!ni|F6uokr@$/Ve:ST7JAoOLj7|8ed`36>j[[/p/n+&~ؼ_o2*$ r>G qHl`q-qlQzA4OBac۵ҞFk`}"?v=eTT]c7c.=)pagI(.`km{${ {9t6״*uV,֏qM>bwdy6RXm^m^vnO|;H bN0(&)۽lv wï \5vc'YhhBJyuX]7 Nk6_=TᓁԸmFKoǟd0t]n)4mg=5+rpB<ŚݜQkoFa,ǧըyM.}AghqC}m1c9#aKY4@)vYm6Psޯ/ PXiEd{E_gFmڨ!Pɇ Oّ>%z(ظI$eOppt2bH41F7/vQWFff})H9Le~\eD\R [qz15 u'CCqz$8*_%a-[}d^Ȇ8q&IoӓhӇȴ۹v2NYH$ 2x=(VU&9 msH# d)&%j h ov84 E$8h`GfX"4cSK"_ȹS /|*_2fD]DKÈ#cן<>jxQ%3h9ӫOQnP*ՈJq;cfHr+hŅ?7ꇈ#b ;Xg?7B@0 @U@!<8<-WOY\.Hh9zs}ztǡ[A@+I7@:hk8Hu5|E<852%C﫡< P>bb{#FYvxܴ#!?GQL潕A,D.q-@zCgdZuE{pY|E$3,02b5V]^zA yAST+8,-y jdwkjΒϭ*v;wqkmY_ uo}{?r9c豄 >ד^-.E!C!!A#Yqz l8!+>pvysn*1%2/fTM[پP-x9$"yȤBbf0h%PIpumvM7L[jwawʛ/T!JW_kKv$#`E`?%#X e%/27>.00@S}~ V 55XF3?0E8ClĠ4)F^a[s2;d[FNL~`vy߭0_|sƷ)o+譧 EZpn IY&9%~S-| 7|'I+Xtxݧ.oeG*j'נ dÞ#v9_ foΉC`W'ILљ@YOj_ _SJ u6 b,!]п.9jhI*E+tm3.@fΧUCڪtԎ_d8F_D$Ҩqʑy#4EW)> Xf|49,vPH1eOwK]+2k krVȜ^g`1Kr/65ʇ]&#-ꨊ# GEfS j~(3? \'a|XCrWhT?E6u˧oe3Qa[;aun#$I!aQ W[Cr8fNOOD3(nsT# o;Eׯc|9N1-].1GB66=ݞIa>Þc ڼƆ4:t8[;,mctoqk`&XQ "«r υlu$l3X&Or ;rPaylcahJAY7iR09\m_<&HqfS.3_tJ=l pLAtTMf2~4GhF]6M@ia[\ϋG)A~S΀ ҵF\<ʥN"x&hJd:lt8M7 y@pT}*+*Qi>;s;t}++tw"ʰUȗ0w\RGַHlR667V=^{6`Sqb疝b0d&c z=#nԜFR緼3I%;7rt ]z(_#SͣFW2k\HyQ]e7uO)gN]h;5ik5vcDVC|h? q@uMOVFl6V Ӣ҂YL%9-%8g"B eHajR8EJT9/P@Ѯc_YqN"y I#n]iog={ĥ5()|A]5$AWLg Il"M˲{t,Fz2kQD se&~#9yHB=1NN&W퐉^Muӳ.?[[= GX /|鮿'q8 ɝxzMb Y, Clxcե_t(!YښĭgwBxl;F{jeSD߇AO4N}!E֘[<b3í7#rYTt t0缾 4FX،w'ӺWvT4,{~NC̏&q¤{HsY<9lLij<. }]?xj7b}n瘰CTZܰ8Zl{ чAqw tȊy5bhXF2fvbWABgaJ}{sj0؟wqlv{vDSkn7fF $I;0+WuRhtHw9T$GDLEU4iFZ%ǧ=&fR+v 'pD/k _aMsQd͝ಋ)+m;Dn BlӒ`g\w,޸WtrQ޼)aCDz?sퟚ- (֫#"DyrŶG ƣ $n v!ZNoWL?ᭉzj,Cr',ĤE}Br"+ڹ_X öF`m; 5*TGN6B_9MCЖSNgRں[G- td>ߝWP* 2$AhiwLS"h'haa_qd.rgʍ7ܳYMW\rX3{Æm 1۞m=0W.яB7^BޞjԨj<?vB$iPf0PGp@ZAj&(Olu1Nڥ/*UGeʰ ߅x 'a f5 Hm+z 4Xc 1CV)cSֺ5Nݞh1r8YS9yZ+ZfZ,oD+ʏeo-eoesM$&^[ؗFμ*÷" %C MAP'TkSDTҠ+t8@/$n*֟Jon!Yn&qRȶת"}ݯ} WXҬFKm[r)ӌCGW'TSˤܩ&o 졋b &c2PC Zo8evrU }{}2+R4hσPIs>)Lu?0].cTN627ޜ6P,$AeeclϑLȴ|3 +"s&I(ST^GR2~4^6&w!9nuEr{-q_Cn^eBOV 6=LX(+b KOg&8!2"*%K##샩h!*(HZ` 2Cbyڐk[=pf4$%:c!3 q(5'8F ٓPKT;d/+qJ#\~C2 S᪈.̯v㬋>9֟m#vvK/0oosW N_P7y+ RĺECrOʹ8K4ءqF`l*k~Vxsr &َ@1ݑ 2M!JR>x ?VC( +:L%8JO;Xatv}|nɓkw PyQ9UYABUUQnk{dewO]fGJL:%/USlU0`N3%4Ҝv6 ѹ/5:^W ɛ>U4݂MB?* >ۨχypvb=<1 UkJxӨR? +Q.f/3D K2gƃc_)) _)V5b88pY2$["0m~Qj7<NJI܆P'v m9ɲAɂ!O0_} 8ddo:0j>q&W L N5O{}jc$ӈW8j|)]q{ Em ]{2If"ҶU,ɔ"j52K?7U)ՎzyJQ%[BM8o(u43ٖ#ԸELQ\ݴjǺ=Qr&gN/^ F3,._{]/l?x؄¥(q„Q.R>veg92mQ]Dga.zQWmukuYLG8W`ZA@o=v ]܄ӓhr:& *UkpRH zo\ps3fGH2 F`9QDŽ{MHQ*!k _V\rqն-e%|`ְ)WHjK2Gl1=\, &+[/pҏ挋OЙZYlJۇ,0Im/Lw@QwAE'  , ~e8e,z)C @G&Xe!@jN[FbN+YM4N<) -_ܡfpMJ*=Bo(۷ho\f(`Ta6ΐ`Tݷ-'$Ȉ捯9f_:H(f38zC2_0#>&9&i$kEXVEC}XT%'7b'?$d^!7LDCzv>bJ|@ֶi6ANkv?k7}v晎1/u@7<2z_ד8tbaq"]Ok89TOG#_'Y}Ħ_MN*Œ&+v:m8Q:Q uz*,~)i_F[v l=64 *"&bJlDf|͓*3ڥhPɸ6"q &jxNܩpnz07;Ľ@&#/o7 o0`fCMm:Kd_u Ob2ajYņ-_7Ϥy < U)|p|3VgV| y/#cvE#{nAOBHK5aaߵ丱m+~VuEp <#hA`~~rgIR+"dk(#54SiR+ă~t-00cQ"DvS2`߾sgEӌNjWxPynY9RYkBV&.n0hq8K‚H8NKbXV,* Dn@O- UP,믦Ӽ}>C 񞦯*3" , ,4߰Y!d^QYd)"$cėqO#GD= fHd;/KA` !#IEn~-sZ۠'P eAPɭ0Ęl+W9As"@Kc̬?xqS/ә>O>iS+\HgIjHv[I^c",DE Sc'o%3GkͭBEFɍ(o3 e`D`QWpzP=e%U:]7mԸNd^ԙBQm~.eC ڋR/Bdp@sK(WA1Öp /ˑeTq_z$ٽE+r'DBR_ۇvw>Ni+ekMZ=1QXG/o|/g^'e{ӄl_LJ ya#4S)RyP\Oaꬸ@*:jͶjxFGqR_, Q"(d$ڳ?oNӠ=)qHHc`M-aJ$M RL$'IOw/OS!jgA$(d=it| $@@C(#(T%GuL`5Z\qwBBS}Je_I80 YD:lvA96X=5#x>>4# "3*ꃃL$ wMLP5'U[8/,IuUEmU=]VMPvzaV:my9utb8ubS0nNnp]FqZR ;8ʖވTpPƴx:o/LeF Bs סS]ͱ6+)jzxVMѼxW2|C.AUTJ>3paΈztW]Hk:]6OCսݕgdoqeEl,AT1DFrdMdKx CO#$ ')Wcs3?}܎qK']ncg䂨ZD㹾=w]偕לH@NLV?l!CΓwype1&tkvQ g5ohz05m^ (Dij`׫^a۪l>+D6Z.F^K|YρɔfQq\/s)?qs<8ia9#dl0t` .ev. #Kbbo93:ܦ}a'Ijgã+/.s"wlW?Y" aLVq:F޼yJ37"^^&K<*cJ+Tj Laڔ'p_9qk .? ~Z9V̳ւe1p3ғ86QRхT"'uHRF$SIuT(A#y}{9xPd1(ev;kƱ*3N (*b|P,R*rT| sȆ<2-BLxowȽ$=Y-(_o;J4n93Cc{lc_*fFdZ+C3 3II{b$ Q 0Ӡk+B0r_A 1^y _sd<1be-zӹdv{V{QQu Q`N@X}GSx܃mfO,v:Qjƫm^ ;{v9c~]M 1x~JAֶd Ec""jsϵYUzV+¬2Iw{-冂Ve&w f>ǐuEsw$Q"!Y vK;0& <}jn`DƔ %T9B}=0wG>)-~<7}*Q%ALd\$*JdB(d+ sV<'e 7$s 6RLAs"2u' gstI@jdסʾm{k&B#x"A'=Ub&w ݿNI(9z X%0?&b}yrٺ05G %Ps#z`װs,ţEygP%__R4M,gVGpfMٯQتz υo/> }CK V:E(.]-1^ MbJ=PZ؆1\p]RcLylzɪF@~c\q1~-#;X䎷[!8<fz~ɺ̼KSyPl5'wN'W |,DlV@a(33(d?U̅e$пKJvo-߯:ۺn4sDs4, @Z!KClͳ<#R81cӋ4ӂ3A~]>7t&џ`/~f{d{yh;Brkr}b_@!iwgNaDOe< Nģt9}0Bqk^U̿{o67K4_L$'KIElO\B?uC{ R$'KSРerR z4d 2v΃I G7}ǃ2ryH)UoVFmbd}9&z iW3ŌNf P?/RfȚx+TĈq¸nkq8tN`?A",hJR§5[. g?2*&(,+4y'U ˣr7hۅ= ʕc\]$mGH5kK17}lžuc7*o\۬0VTB%Eخn^,Tt@ډ0Acl!"l$=*ݙY8 /YY kYg4D۳ mD; $0 `Q#4k*?9]E33s/pk- Ê9L3g$ʪW:,u[8@ЋaHs:K0>!6)4WAMKJN&Ƨ-:b?(,hV"A38ܟɕ"  zgybrށm֚B%My_4ASA &iѶxA=J(`"G(_bAYzq矌+B"!:߯%du*.ύ&3/!Ĵ~b)&ZÀ˕6/[DSsE̝٧~Vc*.3)RBw!́om(. ¡ Ph]X(Tjd+R]`ʉAR薔(grxy`"b6Ƚ㠷ޢ@ Cw`zueSeBZSG7nT)!~0W P6| ųD%-fr zLN:#'Tg g ',? MZۤw; ⯕>8,Um.]!ye dKl{*Cnˢ6.c=fFHWmiŽ&iA& sQ[:<;zvHԾĹfp{&d}]g2 rc>q\n1̙ۛ1[?l"@qKK9p/P '|M {7{+%=ň琩\ ğ '#|hdY r@ۊ  '(_Gs b" p]ܯ-W߅!j# j c64[l2!7o;NbIc ~OvPfM.V +RGrt!@"l/Mv}Ϻ8r,@K,1Ts;1)Ud,k2 YwT际,ڌys5d';rY9lmDʧr'1Okl 㻶q{­Y[Pꞕ|=b- G Φm>.8O )H>CXxu(NK"5.Os<7% 4'}mP`pO*H[{za=Ku c+"B& ʟq5VfT$Ds;98z$ZIȜͲCFyQvqe8i"4a2h}QVi]_l苡^GqR5`xs?ЗS >`ʸ+(,QOW&z-C"1n¶^RV/9텯]?)@xd1z͉Lhz+qi{?sz:uil-D+#*~R| &` jpkff/uLp*̮̫,_De)v/EE%:jP ѧ-]@A7HDK`kvuM)ezT"fDw]3sP=C< ;[jw:3Ȏi23{x?J>F`iM>+J48RI]Ers튽]߼JJYMǼfd{~;9Q{խׇ!PZxңz.$կ i@dR! %MrG{Bj?8h[md *)30jyu^ I}cj5Xu/ܨLJ_n~߰p^߲bXO~{t))Z6W|_]yDVc)lg`=Do|ɍ)TIo6R94pvrN:5+qֶ%H {+ݻ5?|/ xeM !#Mv6;mtoY7hƥ1Fwbġ*OT K}&~uq)~S wwIf8`ywÝ {d|Y}0?VtW/_W]wE*sqnN[߭ݽx5Qu}}Cd*<ˈG!ȟ" `X(','Jjx(jGk't7SOrO J Kcv%\$./{NYbP̗&K=RtW(Id]}sFV ş\q|Kt`OOڟmnrŀ݇'`kQ\.6;jj*n˄h8\cd L/pIP,M ,M0I1;7p~9 8K9T?UiN'ZD!NlN導['&a).C[Z) \:{{lwK\#*ސ/p If$Yd3[w٭wBΟ`mGn׃ym~x>aYdQD%9$hg )bqƃ~y@(W8QP@eFf'ayHC zQ)("l%"F/H(0! $ρ=OEAǰ$qIAєB]! QQ?}8Lg4EF!x$!D/EJz  1|8$եXuwGnz'v7Fb[6d$S>z IS̮_CD{j( qB5mnf-oIsXCBef/ܛ=5R3ږ=˧Vԯ)3CmjȜaݯ${nN $2>hh,nԵA~Ӗ_Wp2I$)%? 5$;}exLyȜϨAML-`Z{nW<5n}V"0.EjEVB6Py`'9>L(N>K( *qҶ6[ik}r=jp9 o LgHV"$xQ}de\BIb`|i:|Dofl,$gq}Bv;pvȡu@"氭qSw;*4^g#_W{{'Vx\A=$)jsypΫ9{tLާ^o&*4D)vo㛻@Kky^q9 urϞgmbhq[Mqp|3gz,D|03(}n8'{jͬ3b>izs&&}B\Dž<9-@rG=ܗl]c {oL&F,M6߷d?j_&M={}\ 1`s0,MA \ U¬p2 b823M 4# LrANت `CD2yQ< / cPD.Q̇(0)n!+.><`琠N!$ qbUA) Ai (LE< "#S_!En RZ!-2!+5CQJGDƉD%~PL M B"KaPt ޾so,H^z7ϽNP4N %Rv׭TM F|kndXn5ȩ,gNl}yR\ccW.%|rpQO]KqCms&E!5LɠV15wDm   y'&)n@[=_|ͼ>vlPFh=g/"W@FT޾+M↘Z.:IKh*;1/t#d 8*Pa{%GGB%X%ZGu1 m4 ŏM3!JdSxsyO9b^>Iy*n?M񼭓+mIXz(v^=Zc"Sm݅HlBy/[7hߌ 瞀_ʑ,f6YNdvoYɈS]V =ijI07>d5яXVeVOe[M@Ӈ{'J[/{\U5}yvVVI;PY.ꭒ}O;S‹.>fYoޓ} Ctp/sBDXZ-هۯԾ=eR=)SzX >f2Md1agzΔ @Sr錍o+8>,< ^^My \dWZ] _۷ߊGc%]pGS/6Qi=WŢ0?՘R0YK3)}"!a??r 0MtCg!Bfn n He' 7)Nr75Kx ?~mTjNi[0=SN|URzEʻє%7KHzYf*ਣS^[woIZn?%܉GA﬈"EqS'Q4~  B}"EPO Z=\*?>|9^r~ FoG[Bʴx2cpb]Q 7(KB #I-د7L˥^.X #sƣrװӞ4E1X2q7$fY <n|W%(ǖ[N0$OJ^7xѧn. m̉:@sz8~mqH<"E{LE"W )_;œ3 :@ X)iq_Ne4aĉYfObN΁8}zGV1@!WL"SRՏ=1qqQopܮ._,h0֤,mrtRM'w|SrLl :w&_fD((kE{/~DJa,O+޶'«,zzkB:-6>y ܃jO~7 F tmN9mk*gAmjܼ &17爜(xAN$,#yR AiTl JU! L|>t!XHc tdN4y)WԒ\kVk˭V2Fy@ f))d*LNhe"K6U<%;S@VӆO,C>ʲ(Ғ*x?j~F^UA4yI C\/s.YxqA}ϥUtnWњN1=DIss)GЬ8twRo6kڧG$(SoK7gy//{!xVTCBB@=Xؑf2vT h.׬<[rlgc5֘m灸m3ɞknhyK9(0ׅ J#ɀ:VV.rIl~SX$b7o ]x&4vp\t&s52^[[[. ~Y[=Sp~GN4zƊPU1'e VPD]M cܶPhƓ܋EIg7er+d e|ڜ{h' =v'\:7oKy!xK*"/"YU7 ӻ!dB6^ POtFJjHO&K%)=XX^8o R0"r]rdYH\J5}QN ^-ObKqA10 YOk\2)_ ÑtmŸYQ%Sh1m[Fȅ,zz9 ??'#zޕPhd9%;.w'R!TCJYl>BS=X:3k<%8eaJyݗ qxQXȤzՂ9&cl|Das::="cQHGSsvd}-\ઌJ?%_I"nx"2:EdISN#pɌ#-l_#pw:1T GEgX-}OtH n9Qe$%eOc tfs[>!x:7w%j=ta~BGaV;Z46\DO"]E8pҀމ`8j2рwJ"ktۜ}hܥ%9ryIKg{M!k#< @q!0 h+BPRL$pMB{l j=>jSUbE3e%d#v+P_!] #pؾYgm\:fˢU`5~"G U,GfwWV; \uv+K^a[Z6-e ;// HmɃ3^CmٟD1޴W,`y3%|pfz a'jJ$QXR{/ju)XJmLaD4vn-oo{>l^?@CWJ("nOn[x.qliau ڗy&z'/_ /yPHkly<]4Đ:cE6ױZWCӝ6I aȩԽ'D߼ݑǛ,o ,Q9 R-J(K;XTn䆟 N9zc,3T3g\* uUbņOs˹Wf>͸Ҕq9=6,^G<vQ5SCu&/e_iDiXCJ?;9wt9 ^z%5ڱ_g˵?ˠ~lf{wu߉F BPX v$weۉ#q7n2=G$ǡ\'!ʱ>0.p7DWXJ{vc|&2td (1$urM$G9"_2Oe RsDEs3L%B-(#MhRց_S*]c7GY+I9ܦ" .n@ Unb6_{=F4PicXbAT+mR^!Zm@'<@ `njM;X1V==G[ˌʁ5N T;ך/m"k7HaХkn?/ШXU=au-J`/ꫪ 륺v`A6+ShjIgxކ}zL7 WUC>Q=d=+q{ܝX#_ed,n NRpIuCTh+?ۖ-4RVNe< ;74|p^2ڇV?.f>[ |Ҋ^QRW `sһ(I'Fʈs&KsR@r?I1)w^΃-á|/J)6n}e^M1)qe"0xk1akڣ%:1?hxIr*Waf?'3{j<|Gnбfj"'R|Vv*2z?*Act2HW^U6znM xB -3)Ʀp`}_n ߓh+r?^"!wuYe^zW+h N>8aV#c yrnϜcua&a͋j ZsoG?i 吵79?b9* |EĞ?"8(ܯe=P\Z6/Qͣ2UZ=r3:r/1VQ Z.PEZu$G+)pia}6(1`݉96N2 d`ݮgV6yuT.dž'"2][67j<Y(o[e>9t+~ݱfK׶lf,`9- !xi,Ҋ+LU1TYjw%R =Ā! iZ{(H1˳$5KviK=c~6-e:7,i V!9Dw8ˡekxT,UloEiI<ک$ p֋D>KFA]zJ\%w KB_VyI.hfRƵm+ хx.#e!ocFC~ qgx[ }c9S7ιs& 1]#޿ZAj/f3$K]xvu|'4CT^κ>JIS\xUBMxO1"^84XfCӶZ{`-.}yGލ9Wr7(9(-+!B, OS<F}a ^@lŢAF(IϘ y!x9-$2Ne_ZV#j`w"t655N-^yYĮ3UtDwWDtBH^ȟoܸmSckCNdȈK*Rc]tB^iYRBItRcH9^pC:b[VVs52]v/ޔ<i[U^k3DH^s'Opwl9]'K;JRzv]1lt'õIOAn'{VLwxd]irYڇNᶶ*{`Q 6zDVެ( !qG$$|4#S_֙ove]zSH(c7L[ZF&^o[#KgN<9#׹dRV8IņsZ%?@mϽv}*\ZP ^Ku5aP\xrKGJ{k^ ǵ\t![-3.U[+.z1Vkn}T[Q|Xσyg! G: |d1@Q.cH&?OHw304j,. 5i[t1MW;TWVv`祔|aG~l}ۯVSGu`BJxR0)'5$*}U߄-:]& qҭ>ZDw/òB\bs1~=ߑ2>Q'vGB͌~\= ;r!_|CG !¾ⷠ`J a6£D;{#"&Xf\Y1mZk$',5UD1}¥[JS5XɃOa t8Fچ$LNHѦKl"BJIDP[a0$)K,3.r >zZn+~3ze&(ܔY'緼k]|g9 o }zw X #O!LB?}Ţ ' :(EP`~M2] PezE~ŃȔ#ă'9. (@9C |Jj1|Yq'DDul?8~ l.ԧAukQ/^[rC:T%ЋBn`xx26  ,t#pF3=d䝜h B29]!@Aolj7^6԰&cEq>tUM p.tԯ>)%CJw~yNz1;T 6 h a';PZ۔ IIc8U7b؇8N/WYJ1]]U2<2|t"{S;yĸW [9xLɅ`o'PŒk^^[q{gK)l&ł,[xN=bxǯeȵ,m[ND錄]S-54: x1 K9kqEbRF')cY~w-d`7q>e+LqzsNI~stU40Iawd$R$簰Br顨'=\}_<;z, wf9s5 eYI-XRb`D( _aw>פټ|G:] .\Ëz6=>wiA9D_~7"zpğ Jl-<^(,<]wVkxUz~lWgA{,r~}-7 cND<e{ 39J F 76Ԫ/E(]&eXm5O=Z#EA;&R0KoCRؔRaa~[sʏR΢ãuCROi)&oj:q;/;~P~pߋBA ¤RG¦nZIs] 恳P_=9+fmڍY%{'jl*ىQo鞫ң$58 9cByQo!E+t080?+ 0BoXLx bG=P "aZd{[3 ."J"406d3!sXFuGa+OtIzOWܬ27l3N{*7ґwwT[ ͵?.ZwsĽd=Edi܆)>_{Sǁ sck.($~M|Scv&awaY&_}̼vr:Y5$(s9'um|</"0 $PViF>snNd&oqfuDqNASXIӥ %1/1-h؅D%#²@཈KCQ7S_`dmi3kOE )#4gzMaFUS}-1ky%_p( n'ժMݦ:e0NÞ-U1C`TUq]?fuUF`ɄL5uȤ#u"MGQ?P1) Q?'Θ󥩧 =dvڷ4ƨwbYsI!seX@# +k^ 3_pl҅)‰dJC:-+{4 v8E/9T\2zY#;I$bل^l8)KtiuۜpޤkQGJǠMk-UΓl%0B({-J-\*i^(+ pu,c+~D |~M°EFL 9__clҗ`Q؊?/U_ϼru:X׹)ʄ5;ہ/+УpkYl"oO6͊Vm p:i[]iW)I:g?b*< \ ›CπDCp9w>cl&ӈ7WLQjA()f_<7?Qoq9jXMn3^=Le2rjtO{iGL[.Chq۝7-gCtk|0OJO DE*Bd1+n'6ӹz{uR?hY?/yK8 w;D( JKM v}^crӱn7 j}lHl #%PZ#2_{jtX 8c TBVVepotcȰY<YfY%,CW<_prK ɣJ`W"j!R4mP(fz3vGBIY)PI =ZT,Ecۓn7iqq*Gz p3~Y 2c⨽0QU&Z SdwP}Wp.S}!^1y$;ja%PfM[ JҼ˭? g_jR&- /]eZ 9_W_Yl,٪-e-OːnƸ4d@TGB5)' R!80B]Ew>f ݀RBb3tqQХȔf]mw\EJ%R"8yD-_' /`3|Yj.,W? :["[zC:$O-gm>_IDyL械zS+?cCUP⦮匂?-$R^wƷH"BbX">AJ0720#Bp`"7'+m +ɞqR=4#zU+Mq西J*##afk#gV;z<P[ D1l:Ep(QM/GһyTˏ_1cV\+=FusJ>/ st⨜GxJTY,$J"Q,C#XARׅ>z` riP+u! B3jAJP Y& —\)Vw#/OPrrӺXP*(9߯I7f/@ӟ Y_8;&ΊTL)IJiR3JU)JdS4 -{jl֎w}7ũ~y)hCD]hV%? @fa %H nvqeH;Vi?W,]74zCqg. \(̉9`a,+x)TNJ@/Dfa6$ɂGy&PJ+hf!UJؒBgEz qrSʪy[On/O .DxL#pq|砱 ь8"SRBֈ ,o_+1gKʛ G]J˘K4W9xq%]j]ok08+wlI@DYi(} ڑØm`T.aW^_QŢ,w;r r}ݶ1uu豅<߶z c٭ts|KPPߝ񙞟'(S ߹QBBN7l~A7%IאI۟4ON2Ro~Blߍ`O\l S#w f"<_u5lmQ^_On _I IoaTCf*5nNZ# ,UuWUE#To^StNچ_ś.r"D klE&],gHӈx: G=C2,(ꇏRUI"_5cbq'jBgkHf&m^ŕdiu4m.@/y3T1PjJu5Ƣ/f^rUF$'S.4&%NjtԪ>"Ya3ya%x-.܊0?ѻD0'A&;t^ 5YA׷#6sʓ`Y9RX~N"$ >Hx(Jbݹ(s()B^^0{""ve9{<ӸxP!ж%|=nŽK  }v otq >QY8o*] w^vT-o7? G5 .Hh:$ t"EF#昢[BIF$dh[x0à J[9 h }ޔvm6Z6PFf$F\gEd;c_w8Cj\w$Ɲ9TiJ4qGP+Y7$L_w3im-u2H_?3a;k~9-g}LecDl"gsxW~{:Ya>`gǺW!q; 5zӖgZaD6RM$x+12n~ǻ_ pIVIL;9a<"; }s,:CiΡoς5]D4sϿ~T~W5R[vv~ $hnp"jnΕU^X术BbD=ojcHQqq¡Mv ywD\yh:xA15{>\3#fyx]3SA-N.,q,캿mi,[mI4@T8lɑLJQ$,`2N0$ #Vl*FJXT‚,E<3V7x+hn*yZ|epK<99|v{VA8vPhRa?vpf}EFt+ s'v[Wtn8&H{~O~_o0 wwnd?0"")h耾B4kŋɸϻ(7c EmwU0R$tX!$n`{/j5> OG}y=qe4qf:Ӊ&NЖٱNwE6b/^l(ƵaXn|^w gқLc"zUEބ\ina6kVIPx=#ԈKv~7v0GQ S|$bnItnˇwI^]D !# ޠ/m3 @ovDͭ' 6̼Ñz2eޓkww{V^#.$^BBI+)ǻUVZO}ly!}FlR~%{e ]wCsxPO V1TGA ;G=G߮M|ed˦EPK <(/ܿZ+/4)U+2+񲒀NjXXVb8A"yP`WxMu/ECbn:8IUJ3ıEy&OŰ' FPG?lC͸-a3lY->N ~1Y6eNW%RxpJG6c8vQF ]xB)[== iwIA3 ^ѹ,kU'9+#1۞g_ eXvq"0A3Ahoٰg m:I$3g{d%P!n78&3<ײRj<+`%!<ƳARY~ŞvMxB@9F0ۚX+j;]U1ܧSrz6x7tMS&|YcDuH)SYx2n=QT8c |W]Zڲ{܎ͩ7lFSU2|°ZRvX.kh ¦N +=-nY|4zںjWwlylb)x-Yo7_jY6|O2{G Na\kKWNgX8ry$ג)$ gNxT6-kWxM+S͢p0HQ# {oym_,|> ~O|ܛX艖P`֕C8qai`EstxRR+S4n0 af{+s$l((-dc͋2_QK9NdA#>DDzs K*HVJq1$J "+%^*x>_?6nWyMeK|uURd/fbLJF9>C݋,=3^LE4ذU}pp@mX 5W+ݑm~'u'xh[_č[=Y 0; rwxM1XZ OĽx#ۀ-Hbp]y Gy8zx`d76HX{s)Y!2OyY:NFk ,Zȼ1ru'ԕH)byvN:ʵ#׈\uŒެ'gr]ErlAHZb ma@~n8w"=`TI'ҳO dZUk {#BLJ,Tx=]s-PY5V3[,q4ED,/S}5dcω9f;sIA,99q7bMYOKcu:E\HUZ.X *R;wWTd'(qʠ,2}MP|-̰e e}XyA@ ıЇLLvrC!ó^[2YDM8KyEwNnc/}4BYd˅A&9O"YEEF3)KLs$/ >ZV[%t^Ws"\9@a abm WdkJ; (EPI=ɐziODG_{x2Ra]~YTwp}u*1?Llܙ$_AxFRI,s]"?Dk{gr4(F/ˀkL#73Kے4Iч!z?U-k~b'eR} ?enp1mnY"4eD",v>ɻ:5]]yJ>%,0"#nb&qTNh?́Q a`EX5 gDg`})Lv!JV>Zf@cئuVu79AQ^)vE6r䲁v,ygzƞ`YC΁@~Y,1P*vK) id%O&TK+1yoE36Z}N"SjX{Xu8N:;$.gFv޿fBlh__=7xoRq<WhK.t2Zu5ܚVwKU:*4|BMK!/tkgnsmGxN02c{*p"GR*H(PPwМ‡yJ;J Lj";+\}GD6t|[+oR+6.ܫV+i&:/ .MRskEJUs"ĂeRR_^,^iUί8m64obltEJBXX U({Jrcqs9ő,>2^WJ`3x*y..#e!ĦD4G&o7(MAn⒚0χ~L}CV|~:޵tǘrbC·|zGT:sWW#+hZOíD늞^[dv *Xx [%O*w3 8{ 8ދ^IN+"_%ϴWkߨkq$W`| 1 E>AGVWeuW͝)H0,RhOJ.j5c- p|$k3uřErAWaWc=gdא&ϫͶڂ ,aY8,k0zԽTlI^/UZK9aN ١P7Gāײu4Zv h9eAWk2d%%\JF[0<˥9LY&E}+z4ޕ=s`m7aU ʃq㕇C˪"/UsЭ_yͩ6i%?}^aЇfxFXN{_!čųg=DtYaA$jJ?$y`sS V?w٥ Q? Ć̀,MMY Hd%z ӫT+` KE(2{f̾/m=!%1?;X9tJ~/BA^!a.ca@]Yg,Igm,Md&=z\2,VGP&㤏'KKxPd<br@| zD'@L x$0 ҃*'ӟUopk*wBZ+iiJ2/W5o6&Xufgݠ=ƽU+mlsԚD&7ŧH N,#r}a|/r- _y4/vX&e#wi d13|z[L,t{=`*5-Qz&7^&)Xܟ"/صO'̄G 8cb&eW޴_NZx+D"ѬGӾ843 aۋT;2Uyu&JcnN[nK_x?5h1Xm5ȘlBkwYw_6Nx]qf zr_UUDNS/L3iX&'Nᓨbaq4pl[66]J~2W+!Df˰iKt^_}}ۧժ:8IfԚ engev0q_P'ܯ|7iݮUO^R.jnQ5a~w|x/h'|vBDKmmzre0<߇KsQrh:yrJlo+Rk}<ܩbm멺lmCEWW*J)!nf!CUSd\Ƿ闷M"r~]Wt/gu>UnV跍>-OEb)=Y}23nRZ.,]uNxKF*J♩a" #nі._,ʂadg*Oρ8TIVe?Бbn'*0ۑm;O܈f]OsWu" hGB9x4j>r<|sp6$/*aJ8%hWMkT ~;b`9qG9JP0я!1RH-1M=Of΅jO=r#;a|vSh:K4S'" Pf3d^#,MmMƚNs`ébDO#TP*MAת6VZK{oUh+;T8}g̼ v.hD!'LWyܺ.)뢼SEi; 5|<>_j6Z_8TPY\~.w1ƝR~+dKhC׬?-.Cvȳ8C9j2H} R47Rip.c ȥRS "RQCWQ?ԕ7 ʤUF5 [l=|Z4%yJogiQW%4}sK<^]+W/<zoIEy`JqEߤ]mKɗ;+A2SɁd["Nw pEXm+A?؁3ԩ8nN`]!.Ֆj Sx$^HG &\۞12d8뷍Q}>zlۅqcO 4fZ(_dQ HtJ5*uT*5j.=2ԓf v,QJ\DyA ?vח%bIåawg n6QD-_:_Dv[J`o(3v(Ω6~S"U<(AZ:'&H!$Rֵu8Tm= 44 *G.خ)#JݱC5-zZjÐvlW' ɞ9^eGAa8Gf0~F#>eAϗ㠗tUcܧH9;n#я$ZVv˔9Kt¼T%~yUt4GV;;FZ'v2݊]*ar8ap :ҡ2:g* =U4<@`PRJuwTRCgRph*9LOE≻^GMh*%ltxпߐ%5,r XcŃ8 ]'P/+`f9iI3h J?8I͵.Svm-}v;7;"K"~ ĐC1o "霥K$%2SfobNVsUڍQͩdaJ>۔z@/$J?koCy=VӓOouMw_w%Ͼ=Ti U@J$ͣԄDem$ӒJ5{GNU4$ފj"#0cJO6JC&tށ41YY[D`<"߽nc q?",o2tGV+61# _Y;iMO}^d4iC^ N =GB\exd4O9`$&p<>Bl"6ٸG≕W +M|-U*c'Jc89̝~=[}~W4s7iVU' Pa *YeY$&ɧ/C(c/n/ƕڞGY썜M^D8(ӱ<[wNE~W٭鏯(Xp7j~Ad<0L'eefY9ͩz||ECM ~H]UY#Y*flomQ0-oD1:u8g'G( gu KfPoDe_TqZSJ}R[*̭8>G3{ifGAqP'&u8y¾0/h\   HbB8g"ves|,ĿF=}d*{İak%f(SJsQSֱewN% / -uhuMˡd0Jyy7clUyM)%WN)=jނyg]^8rȷ?ԗK=Rvh ylHumRE{C%{l+wd3p"f"ɍSg"BVgO!׼m7; bщ{% TSax`̕;F#ILbt@X{=:DC0RN .gpT< h\WVH9S~ڥɬRcJʈ@U~Fuן {ĦbG6s(Y[3d0e𶽨goYba-ds0 F1=,4L~8Ts (}?J3|iszjq)˧*WbߖM#bĶ^ƨ|ئoSi@AZbs/=>yW_%s,JK啌 Xn>d|4蜮oFQ zHY㲇ro{ G|=ž?P?:hr4~NpX1 E5Kyqy[\ufnQl[ao*ϣ c<G`+ i(D+ k\0iuehxZji=}|\p K5!6rp"H9S$).qWU\ ښ1cYL:^jx}zY)`X% (_Z"j QFQT8'v#\GѪxwu}y$YB! r1l!rQCH UxjdU Uy[5ͮ}2Y}=.%(v\<ʯ=Ns3DK:yМZgb5=yi2 ˢ54"TUWyiQ>Ā#iR~Sdsj`.Yfy1c\`(.dyydC,8 9W\ 5nvߤ;%.Y 2a4c}~溻䵖> G+"GK&ǧCUKy'Y/xE|E~\M4ݓYKҳ:`a̐IiXIi (vD$h;T "l4أa8>j;\bd%4MǶ[^%]FAϤ{K:-g2$:1 3 PiX%eYBXJgnjrclNrvUR^^"I,8sEKUãDX.[پ$ƳC)_#Q}7fz#wƩԜmn"3;1aQ˹ШwOr(Z$]JrEX,7ݠіhe=xP4CAsЕl[ >zaH'zviT.(s5" n{=Z@݂Wiѿ07`7>Ox2`ozӃ~E˘qa(@~[{.Zʲv~gOhsi/wc>fcCsuCA0>l2p+@H-; & ZT&_{r5m*q9xi$UI^vXAv=5h9$K9>ES75W\% _ t /-CEf"+w)0|InuZk?`5Yf}P):(mN7w=RVVy)9zO{ bm,"#2 Ire,3o5KudSu ~@90ȡ;=]`WkeQD µL>'}+GQ+@J+X~dni!bT<Ύ7(+9džwC= ,3 \, q6w ? tr9?͸tO2=&.M&&!zaKjVwQvw=|c_BV.}4`F,fdaFyo79`a^$ sw pb?m{3Eǂ;Gse(^bP" ,l?m+4)/Es6*cO˧=[Iޟu?op <#eߜvZ\$qDx ׬ʵ`6wyw_*n֧H #{ʏ.q+!R)3]Hʐ*AAv 㭲 a4Mj$̯8'txZAkw-㶶:ښGhoMM\g h咡nCL񥎔$C*Lj?VS +Y"U;6ے)ڧ%{E5#M5|JsѸHŒZSF^p-}xHA5C2qYᯔUwkƞ/Pݪ]e]ckc[0/>PӲnC5Imn+ B 0:@7J{K%KG!ZAH >^e? ]+m~#bPY\#O]@8Fmʾ Eɷ1\bc$A&̘ih5fc V#;qRad)o*KF?bb%DxRPaElSe@&pOg/ؽ8#<)x^۞o ׍ +# k׸f>{o)fiB 0ΔbB!`0V'&4O,/}d@+?p;U]4ר&H eQi2>\ EB鑫ǫDЄ =w.w4Vp.J! 8Eq,|r(SlPbW(T0-EdлU78W$GC<);zbBIbxqTC!B ҹ r=~L?<.%ڮ;Uy8v8f#Zd!Bh\ .]NdZYa"9'v8H˵{88O.ɋr`+r9sgYkc YOOv"B;q];ʝ4TN7Re1GWk-\)@0s=~Q8KJ /Ǫw>nʕlɆzX/+*#Q+W񑈗1P;̀}sq@vڰLMȶDI_ΛS50XXx$ࣅ(y/>N~D-oz}}k\%\">DK5m`}ǧEV}iw- "GV }_78/H67*PU6Qi,oXjU19-E,l@Hi fS"9&?=w{i*dQj7ǞMHWHڃ+e&m"K%Es7y.8ׇZ'2-pDz;;-C'3fgފ^k.^.r_d*V).l~R*WmӣSν֮|dR:;v2e^WkU}0FgPeaQg`7?^ =Gb-w  ɢ/+{>% gBЧdFi"›E Qf@=4D}BBlPmxml>m뺯ORny~2Q47<11 [n)YOo- #)m hV$^aOjхchWW[)kf5U2*RQ#77:lIyerj α\*S1a$O<#i&v,( <2Ј+a<)ё(Tɍ.zNmy=?ڻB}R9q_3Ƨu`@w7'neN_뻨\ҝJҜ]噴塩 [QNx0q_~k8!F( xĆY(b6^0'K¾|F3qPTAfŮk{YŧZ#r^"۔`pxMq$Յ-̧ feGW6䘅}T(/J2.WDUϪ"璵k:fa"OQ@cF xqȐI;Mk .v]LJ~MoZe!<4kؚV`W&aioo%_&3Y2R+aʦd/*|MH| seju##=j0 SVdyp^:(|DS`O 5R 317S 8 Zoa0`j(*+bN|P@#!yaP|XQb|ΰr UIápxeQJFסJDcw[T‹QA2Ib3/|d!U͝CړX*~9mDŨ9H.+1[R|1 N~jN.}@3\?hħ.P{'ssh0!S/!( ,I˂FYUvj\ ? ؒS*S;H&FZ_o7ie4z*4Kn*J~P# 86B18|aYɪe:u]=;c~{R񾶩FufXRGus(_k:w-9- дVil70VX9<ǣ~ihΕv$_5QqDD(2<8[I:Z"۫y9"!sZ^\) q?lznf"PdbadLm*\^.˻2O )1U zd*͗c20MrY@T #/h!VrʧZ' `?m8@r tC+Kŗ݆_e1cPH=]}rbdgK_jPf`2"z.ȂəMvgu<6(LQ|EXJYdKq$6X|3X]%^tkgeVbmO4&_qdM׼}q.Qs|HX཮P7ژx0cpGWc|!W(q y7HeU̦RLX<5'7b `(/p<~d *7+NI !TaⰂH4@)A@Z2!'eyd?:1sM[EuRlM]Yma탠}fuKq0$zp6d֞ U,n-w԰ka+5Am/jOJ4+"VToTdHel5M|#8Gp JMļ,UUcvL!M!1rV ,['i=K!fwÛ@u!0,C*X@4_ךl~?s*yD+=縩ʶu=-&?q &&U(ٌ>?6X>X~UvUy22K,5|3sNN1A?NYG@4'X2^yB~SjуLWG6 \ _Z=y]p %#*~E/h}(;۽EWgѤgԊRbqZb&Ɗ[0m4eO f|GEuL ߢrBn#J8 8I&^fIBd1>B9=pA$ 3<]Hi-{KVR(L G+1x}ʧƙR{%j!N͕ztr6\ D-\~lA0@M00ZB-Mei//a8&03'SJuT$, o!mx"q" YH!XrŅ] R1s1oaT8[7EY t璳7#3'4Rζ?I҈͎Հi>#z=?#DwDhl4[)6Zp81x9 pDy H{ԷdűYA޺:w0 nA(//"!{j:Ħ=$fd؃ꨃ1DԨ,`O Aj9q&1a8a:zJ]7uvU?ꘊy&=o7qtڸxGҏ_Du,X 2fX uzw29,5D,Ǒ2٣|.l#%: ̮aǁ ϴgo{-9{qV\@sQN2py"{'E0<˱3y4 V4xҮMT|?(s/LxhĖ,= ,7{:'^~JK,1;jo @bEc32FZ )pe4>~bQd#e5L!Lɔ,` O=x& GkSj9ooJs=LOpaC2N Wf ٰ8;l#:&Hg@> O5ǽ>Qils{vɦB%}'|XTQ"7‡GQ2ˣkPށ$~|Dr RÿupY}OdSx'IJǪ ,`ʱ2)^˃`_gh +D6rp7[i('0"LT,#<˿1C8Qn>H!TΗ>a@u8%)sP1f1<Rsg=! (Q"-`J+ȋ䡪C8\yg.UW[d" _4Ѵϔ̈ UwID ,FG3kه;TMwXB;zN?"$?y/[V^2O/c#M _<*f(~Gu<%N9ì4eRqA~VNJɄu eSy͍O, r`C{*76r/$ed _mӗȏV T):9([{ر#Vg|ɘNKg¥L99{S`d W^4;zy.Lf6MbBT.癠׮>s24䌴-&WRr`|)񅮴ŀ!H(2 #48|KJ~D"64`-5r/Y"xJBOӸ ͟ HJ%ƞ?'ZyM3斒9.'ꖨ s~z&,A,Wi|xQB B_q#UU})=,;K3{g:s Ǟ!:Z$f㱸Ii ҁCBbI^[{O0?5.HS"!B0)eJA~)/07aѰx\GVCJlưLg`/t Me9/Eň4aPO4~p˝“'q4Nh`w,,<$Y9=Q*:Cژ)y6}6 CM3`+6ϩ}zF-n,џg,&_ް醧}ϊ܉ܾ󈧵SwB X򭇗m_E;` H.}eqen蓮h܉MCz.oRd.h6d$YXUi [$}.6tU]bU#Kʙ}He%'HԿiae8Cm/enjfjgcÝ #ft h2(I.YOn1bu(0 N4EFjz[V!VȾ_NEΤ"7(JY>o XIHW8CAY7 L4\i#kul(fKu۾K3h ~ !=`ޖa#NC*z౨7o_0sfqncY%ML,ion~b`e椓 S}U&k%2bMԝ#wX?9rR*CXQF^AJ˩i)!߸$=H&ymR"6y%Tԣ!}A&E|-g"XC6h8."LѴkiznI9n|̀ [Mn L"B(X5ȑ" !C! l5IzwXxڕD%?7yHZ-I~N5Q, eqЙ>$z&nͻ`b. do`uO-0#ȹ8mTɋq.CQ`3`J|[Iq !kXT]3,Bm2ysMP Ue{:b gvDaP&IXd&vng2'.PJO ‚(f1';S WM6lyFU^XX23vւJ&uiEIم &3f~rn˟*ԖNd$\hz[o?f{І eq}ZX %&Z}]NYUǯ_Bx {iQÝjj򄥾#\&?60aQCaܟY6>G[a44 ?nc[˃ʹ(}OBhm]l!@i!3}Jr_vǙj3 [2&$`%#tDY4<0v tʡ)iNb.eVb(nօM7>^yҶ~=$Ԋ~ÀM}M~6"%Z Fs=31Nx't_$!c>v !5Ӡy.~W*.G~ð. +6(F\BTAD^~uVV#N4Iv%h@ "鷌*@r_U<<.%0JwQQ߭hhGQ)LH4 ! +}(e$YU\&O^YB?4|XE (X+70Q,̡qf4f#q7cQ:\߫wɓu!+Mu fJg o+ٝwo4#Q %r+}ښ-XwS˚󽿘 AˆX[WaD(4c~poJϙq ?=&$v+rt(rCYkB 3MO}NeO2C(觔F j)Gl!b0qR{oky @?%"r, Uqla;λ5ub_.S{\PO'weړ0u~71Rsg3x,T@IC}o'S? /"OPb yvY(a1$,36$. m/׭,Rl0) p&؝J?Q}CUԟ_X|S7<E~ g{~^Ʀ³Mo˔9s?+tb}9-fR&"f@qn)p~Ѥ:DMpTƫ5a\#&lyڙ@큤 X8vv(fhGvO^9OHF6̎-T׭+@KGum</ UBn\`X+&Ck0)s_ր~+ۊ漞hIxJ@a.ru$O|+-?Ƕ%W8bl 7U9C$YFj t@W0EF53SPWX0݈u_z8/9nytADNkQw=TX-=̧XSFeNk@7B.Y%aij+?pK&-dyFCMPGd,kI]X SA*A=#o߁dUX Vűһi8S)bexxV.'N-[:dQ*yV` /*9b.%ᨬd8{\`INdiF y< ;sQrrʖy}(HEkGǛZiEJ:kX 7QJD N3&-ICY1W?vm^!RuJ8=T)(bgplnG/"pKLR X(JbJj\6\o>(gID R¼h,̇ACF qG<0\չt׫L_-juUFxy)6GyJjxnC:> 4:]tl/[S_ Lߩw?ϰ{s13{a*(Q"hdb]Ȋ>@iNAvA IՅyMg^bCyԧ@[]9N.}!*twm^,i|1ɼ y w5҃>kBh:ۗԆYEᤖμ:ݧ⃏bd(1|]9`aﴲE.n]N13$m-= KoT7RX]9/X+4!BtB6Q XXppx8x+I7S!W_XHo=scV[WI\= O?]Ľs=ѮqKB灵 I\̱#^Jp}d=3MA|hoGpNܘ!jĤDJ2yDt#)E0K3,R*tx*I %,FcZ 9x)kIٹ!\_4Cv,} NdYU9V ՉY/'vn?n۵i3EGμ3yʊ-ɏ3`?Ī>rd茭 7o*ݣd6]Y>l "h#`)1f5!/@({D")Er$>3MVR&`b A Loɯݖ\$|~%Rջ뗣HϪ<鐞looau,k)5P\#A`(!&I5H 8 ZxG]~!Y"]Ζn8}m,X$9WꍡW M]x&W%U@ k 19'uHg7^ͬx\5՛`.vlŸ &E]I|*l 3opmyɁAMdU+Ջ@VS,Xsd@Y^j2$j.I#Sfwg?_1ASǐAP'1Eo^6+tq&㘪bk64=1I9Eg߂:d ЕE̡̯ȼ$5̤V.`s`8De<6z9a什nN_|O,7}2+ʆ(:kB{G [_7N*(`W`I2^(OZxz,@:8 s\Q 7@1j+5݄XS~c9Fx^Zϣ[܈ %p^2'gp[cѮx5YmdnS) @x(M|fvyp(ne j*J?DhK☼7A`DV$BvK !tAe 8n%ȏ%~¤~NanRnJs1npFfh?.0?KFB)Pl#QAbz@ސ_+̝mVT{7mtK.e,?Ye?Xf|M" ̋9w"SI_=c\ΌqʨVGHW--a6jpicbI/1"HN0ۋ.xUF3@5ÑM֮ϟP8Qk^*(\SuLF=#.q~ iwků{%n?4ڼ!) R@D)>,/ ,68 VAX& @)ESA?=f B+ =w{W ~\>=8Qڤ #͕7 \c!DaČH{ǀg;kf/#/-,9!$\6/JW_Ufdž&ʳ٢7_.{Y[A/ffi7~Y{?*6W2x b Uwn)b e l~IMN[[^V[I zzk,?ZtAr;pT sJ&|{ruP[ +T f$R6*CSyt>~O!OnpM:M{ۼ7뺊PbnG~+o ; cz&ޑ~)i gsz'J}S G1l{^ l֛CEˆOmwHzC|חn ipҼnJ=o9Q襗b`&PYkqN1wPJmժKn0>=_k`I=pNpe 7]"Db]O,7 c;-Db]Нs5Mqw%&نc@5tTFsܡ)gsIKyxpXC4VlTtt(B?G] 4m L$Ĝ%)##XVB>Lw]U+|:cXĠ;B#c Rs&KxF7:Txm%5|u!< nOEmܵ] v@\O-鵡r!6qC֘'7OCkg{]O.9gdz9\>o!T* _U;ah2KŽꙵpJ[¥ ڇ^5 Yc(^M sr9;>P!̗d͜=PϵtӌIקᕅiR 1-6j!i.+ŗH0*$@qR71}axT."ӥ; $3YLTB#w%YmfLq}@ yy+uzvk^ 9gJ~H[Ҫ߱N6iux"%$@? t֩= |)JYQDV@D!}4 - QN]Do G_s)NG ꇁ, ͊2B{(U9%@P]j K*H[ttljVT"zURFVƕ U(QB"pS~rvk*aԑkR9vm_GABA#_ NX޵SCH>B&R9ѫxGqSX!?rN-?"4Iq\_QbL[y4'T LM"Ƿ5I_n-@\+܂霵)0XߵEHy0^roaV$F'lSXG;{&*3;ob}a!w;nkMm B4i<hJP5}%uŚg+)#QVt%ا56k*T@ZlP^tBSI=h*{TuOԙ n[LfI2FgJj0\aU7 LMl%l\ж, (dBBjGR<6^4Y/^ nV@՛b#Tܟ~ra|s%]*LH }gBՏ2G'q3yq  R0[' 镛tI-tjrȮ G"\2)Q;`wwJwc취@fRxEL o}wMrC&sϻY .JL'U26M{zY!ʫ2>hW:9CYv~rUpuxk{ Y➱OH:I.&"XqY3?Y#y:^I6;tТ#\$e4ŊsNƛlʂ"\TŘJ`˗1'4ZC+N5PvwZwȻ uH+0w\>7FxkmuP((n\ fkh9$^cz| b;N5Iudֻ'?L{-WOr6ĺa)aQrM)sqhYbD/񊾔!}k$a#b|$V]2ğd迺e|zLUr"I*$O5CJ}8.bDlٯlH_,99xqF`jM٩l>Lא?{`WPUjKL<5W28_Ih*Hr~UiK{SQG :l^TcJ㧱(ߋ\1vGԤk5j廻ߩNnvD2e>ykr(CMz>z'۩G=o~z?"DmFj"3;6wB~j ) ^jN^myx$gv'qو\}eD8ίUKa#u1tNISUs0I>Vfڪ >K(4_8O6NZе2po~6yfsB(%dKj;Mp}6Ñ~˩Z+BL3xV F+l(,z;Ҋ'ݦ`{Zu$"瓈Ҷ젤vr~r4b}FnЈ+R'g*d![W? =Q_薜REU[ou3T{ZLtYI9{):A<^Sal{Bsu"wu>$H\vh"//(K ([Vߦ^}Y}L$tpo.Zu}o**oؽl 2|{d)ydQxR rdaHWѦ@$C6w.:H'Ax'dmOPA/>0oƱx4R1غ.هMc5|w3x,+Q+ߔ^8=&p0L%~ \B~H<\cP ! 泫@}MY/o.jHԘ +o1w63+•Ui6^Ƴ3_Eŀ7VD&MdֱInf h[_qmZSG-uhg8~gʏi ȩY&[xraB\3 0O:\sbO3F1+J5 szJm2-w2)0M48geSB͗6 NLȓzqI"JWgclΎ:@A7`Y9uhmJv}uz恿JO~,oSGaF 3@#te?A5pMQ?6ݲ'!?|dPލMWȄveޮ*s̷ݙ(zSD- q[jº[s5].ê옇hXLotkĤn{P ,Ϋ g ?$[1 8ܞeB5e_V]. td{w KDHWSp)ܣsIJ egN򠝔x&u}%9U\1~>\wln^68ꣀ@ϚG4>&>u[.}͍*~F"O#DON8иTh~<"<4?)~v=2c;brH:=ʏ rq{t@ Ih5<+STEn>LV)(F@JL?[.i?oze?FcUgQ@((⃣kr?MtAdj\ZzE̿Ɍ#~;)SrytYEJ; @F%&@AQLxvpNN@ fνNh9[/8<'c.D4U)߈K3[[s.)y8N p?;&Q+xB^HYGu,vB16$~Ku;Wl&7['olb6NoKy .dj; <9EPہ5F=RW'E K`SgP308ZtuWN(ms~W T>^7h(/d ɱ :4>YW⼝f n'"y #,{G&zU;˒$J`~xt•-;kNs6jp5FBѶm`wX]!xt>X2>2g?rB`rwDT\1G(Ʊ+uFZn-v0Ii"*ӝ_u*}̛{[cgӢxiY4 O&n%YˮŔ#MIqRW{]RL2x7tc=px18ˤYnJ9Q?+uR!ou-wYcq [EѺ=r2vx4G{{(;YBmuv`bDܘѾҀӵh%VfIrfjҝ I0sHJ.?2k@LBQ"HtM+-Dd%lyHXz5G ̴opsiH3LUlҧJx8NpUp ]kؼ\: ypu֕lvX4ZN(.!@ :g2Mqy^Z1\?U$v LrqO﾿Gg4Ce:8_NlbNb3 3Oa le-\ܘSMj|:(!+J$5Mw0+?^x2;E$qvnZs hp<Ͷ]ޏip˳#B>5ke|<+{rSUJNya1T/Uh=p=7x|ĭdo`W$Ja$<?9zficdsaXDe`Z!޼yjL ɲ, JZQknY’oo2-EWiOQ_1YYA&r麵gɤÁ3$r~M:cpCF,>ux*!)Hcq2] P}a`NLYź-Ldd^\F -4>vz~C\mis8>Dlv1\Ȋ؋嫋<E?=a/>:]9emJ20mT&W95XamEZ1uJLL|_6Ǽo.(EBBA#7X٪<^Km߹flpH%9,JW֦ -s$UHD~|N~T]~9hِ ԍ6'+aF!_m/t.H&[`OTf O=cY7/XbK.\C̟J DV")Aq)ɂ}Ӷꚻr˺}Z,q1vcA^%]ȵX2Rvr׊2lQL~)IId滉MWߩ6p$1Sn6 E:F=<#宅ammQh1=q؝L.oG?  3:PN j?Wnz(F^G >o9bRiv(s:~=w`H~$6ԬX3fWb/GYo"q|hB{A-yN!UnJ OSmT.ȟYJJ+o1a!},k aIˆ^ArRY'e4RShv|iݞ`&`yi !.ÃxdcYJ{I*£:̛ew7 IpƳ0Xe>" svReu%0mrz!|=߯`+S8ε q6՞;!]!A;oꛝ'JL b߾jr9)c&oNͣPPԥ37XFˠ!n_ p #H޴ոOA,^4Ë_}g̠ݏz5#dqJ{T]kQDEvTv>sj'3mfq0}j]#o^ 3i#gCb8 Sn7np>"'[w4Y \ǹD&32+F`uZGcO-MŚqkET5#YF.8W~6)^#eE 9_\q^Zݹs"/R5qVժV[o,jng""Ko] @[JY|M:NA-?~ Mmdve~к̓*I"n:]|g^9-(x19HMHAZ(J8&Nujˢ;U>n\WWJnv1#lVvyw7Iu|-Znek<׎%}=Xۆx<M%)x{vnp۫U!K{sieIVLXZQs,nzm}$J,}4n"I|m2sO=X<[:IH܊r;^8xYY3g:JZsAO?Drɝ2r=j.PL)SǾV2%"naڷ]z"ލIݎdÓP C9}f:(IZ*qq奥W ^-5cdE$O3 ZQ3Kxco总KY-&ъF{1Njf]lm޽ߧ+uB M>vKIiπe?{tb8%,rFdigdi"\  tD-$g_B΁:IiEI8IK #TNi8ѷUpH%,&d# DZ$B"CL69bezD $wdlp/-%WI(쬙X}05YBJ#fS(O~:X)*I JDy?؉5MIU _LQȉHAapvt4l-c!G,Yvy“4^Rk"cRƆ9i^ltRZIU=tFA4vn?‹]./F߶O,JRn'('n-[]jt&KalEVv嵽۝,ƻ َdx! s y*#2ϥsu2`ihctZ.Ůg+D tѺ٬J@"2$. AЯF΅gٯ_D9Cï3&JxOFb/Aiqogi6G/SzIs@Ϲ*D ®0[(cᲚ!y50*d4?`#љjG9% 4Ѐ(9 l?r$g8L.cNxw7t2[mY, H+ ]C')J?`P;K]A.}~ҭba,d{i@VuB qCPߡMEKC 84X(vi뵛B[NS-JIxe104IV@E^yd]C(RX 摛 W&9n!h Q )d?/|K{W$wI˒IYS [N|AM4>][26uxA%ab$'宷v:HYskx9]r@`+/p6Lϧ (91-ܟ{P6ΥoFdЇJ44H^b>fyMA\)N; F1&<ݔQLjXgG˜H0nܾ+N^E~qȒ,VoARYs>>(ތc6_%8[r}i@jbb5]v}:)A!;C([zՂMUʐlQ\Z%PsI\dUCn*h>w.iK (eݕ-x-7Fۗfua6]qHanF[2'ܧKT@hCTN$2hc9՚^ysxUR/U:Cs:E=4f]ߨV %;;Zo]3-ޡ#sy7i$̴P*)؋tWv[/Z#mFcOeH-Aۦz/;8汰`Oo|b^wby8ϒK6aEg[!Csc>?RpKNʫ0k&.&C1^m.fLiMoz•5e:Iz2v g)E51V2ޒPagm}u>&kJ:}ߌ~6X3S8i+(t|s^)^ך\W3):&^.lgz9g"ajme&Q:|&5F6;BVl7Te02wcS(;6ѹҎ s !i;pd<͵}՘\5jɡ .$4,'ׂ4,=.V|CΧ)}Yٻp{ ̾$#Y1҈y3r([ M{NC|0̥V[s }Hٝ HжqQ׌2 N^~;S >Z J7_a\rpnQ^نD͡Vp[yQ Il蹢'Ykv[Ey[uũ2z4L%Z7,79DPKye?EgS:zay|4)40DX*Lm|ݟ*lnSxJlؽ~_ļ2Sq8gk>fCLXEu0kX,%4ywmԃ+I\a1 9$9-/׃DZ3݃>|[n,L%Sy$Q- I BryO0"5*3ZxwP z'`rg+~|{\vʼ[CaTop+kMK5R|H f8{PK$\znRRw+$QX-(PZ2!7Lλ0v oq&g܉랍;zĢr'ssB^nHmHT|M;'Z:vGsWn kŌ-58}(r u ͂&lP'y){b׷9e/nӕX+&O8bL5L y e?.02<_?0zaBxgXS4;+71}T ֒b~:Bk^dnh?y%eyǼ)D-Ѧ2C1! x/h7" 򌗊g&< nSɻ\mKGVۚJGv I%K{Χ 8\2v,Z?Fa1~>1ٸ_slFS)MbDZI}Vkb&YBs?Z%7Ead;r8{qyߌ՘ -e4ӭET5c"4ZfǺ6 FMJ?Թ}i|N-R.8rxrFqKҖgk/RgVvmW3|x.U#m>{]r e߽tg\U;w#j ȓidP}Otֿ1~k>7`ݒn`奺_6h߳6݆"UR ˢ<Rb];nO}̈+ň|>w!SRcJ3U'AIK>wRUPf_IXbAZJ\}&E8x;s"\vӠ`yøK%>҆P1%%"u)VfR>p >wZCs^߻9qk|VWZa}zi6OӤb}J)sid>UV}Zĺ}Gz&&|"ѽ2|*=*:_YJ8M㔌h nI5'GZgĺ'AICxC Րi)8U]6r`^u_ov"qUVi"2YvPfܷM>l edb<{[ [s I1蘠ӂU3 =RO )kC4m,}v3xFX104]ʝ(1g4HF:s,VGJs?g/XЅ{FAvJ^fWU' nz*]dR2U9HӉ빗u/vjoa2@7r &ݘeqZkC//4f<5|xXr* BoEow˥eL 6xB?ub4]SnL9u-:'T=RQH1]-{Q쁊yk6v݋1Q^k-k=K*b˽sTtseI1Q.^ށQL0d)/+u{O[rˮEd?z%gQޖDa5V]yLtwSBSJqrڻ(zJmDpZe'μ-RxHY:yGq i&"78Z DwW(~jk0M2p'ۺoy>b˿;p q;FA3YmᗗْӰ9Po4KU:ywGE򺟲59T3B|a^vwqO=_j5'kuVbKS欌q^ڦBˬM~_VxI%x^z6O1ZF"E܈ \vȘil5O㋒nizS6}QӣPx>ߚ%ǫ2O/X!!cj$TxV* w x^R >ZA!n(5.yھA syg <[5QT ݐ8pr&n>oHs|IW7_ >9IgaF"OmHނhk̼)f"Arvܑit-βy~F3VZawXu>'CeWSc([vo: |IkgڬBbl(!^l 4͊$|@(*A*_[>P$gvC^D L%^sVR%!W ؽXTb(-it._xv0˾㤵NCir (6f"[\{iloc"KURfw7uHQ%Cȉ|,Bj8<`8BwCȆ& e/0ck^9`QꈼM34bbojU*K< RuA ͐C=xG"88BS4 R0}2}~\ڡַ#NoY*aS8 Eq'\9N:һ }5]wHesY잦C?)%``e$q.XL2Y-X'eCl!0x uee"4͊? ]}c XA3(F&oXy)I4'z(M1};}ZcۇIQJ(Rī)_aGB6TH;ȍ?iLzs , $^xsS6(9ϘVLwzinP"cRp|"GSnPr$ O/(74Yǰv'ނQo.dPĞw\ *K{ce=H4&}Z6oaJWs_^*G㽢\=UՅ%DՠrrRǮ^\:є R\+- ۪Ů`t(B(_2pNvނfnGruiRt ^wYGq )Gς{x[}׽nK5gomŵL}X˱_l9鮦9;@hiW7[jۃ+]WߢG{V D,6[)Ld Tg; ]CM;Tmš#$I2?)$YG;z^ a'B'dhtp ;G?`l0%Z5tYr4e 2jg AYHRLtܕ=7EOwykedfƅv|oѪ3 pW7@oywGt w./ЯxXُc _^SdINяr[פs üsYndTX1%Q{#У#TL_n ^x:n5=:-_7WWrAtG7M1v`*x>_F~*{@՟`2&b~0/+:ևo(Bp u/#K";;SL\됲= 5qelcGHG,{sW뜿o10U5F8n*cꣂ_fύvnGS;ퟄdm< 2tFX慜x돀?^@f(G烺̧phL,kr\-XXѣ}%ъ}r<2%Z",-Gு]Zzz˂&ڣS7^PB$T5+v'!^%W_CqۛZY&ɼrKP9esV¤&qTezϔ{#+{Kz/!aEOaw)w?Omt ;,Z{N'uc%TïYmϦCbc: J5PYmjւˎ]sCݺQ/c%#oᮍ9Qb/0[ngq0A%d2m3x] 2dJvr8iN&oY4(@G %Ή=LX9ݻaAZdjUt|N Ira&>H_!QO}9=Li3˨zP#GbB "0:Ee'~Q|?D&PoLP,:,=`fa{5l7{>20" =_4eE"􃔳u0,# ; پ`=yiDUp{`2[_2ցh WMXBMhV,zW6{ZͼpJ_ŪaVRQ+t^Z^5]:[3H(@aJ&:>R~(BWZ|S3 v_Sqk۞9\r3{]ikxVChqeëCҠ:w~5&I׎̲.5ƜA~x1Zq ۾0ݛp Ռ )ÓB %ZTWv,°' ̫'\yEqIUo壤; 5=\ZX…=oUKpuB. _O} R,ʜHm8WmذDKYы5kn/e)VMmnϼ/[ɳ..$HxsH8O`rlNuKRz1cEĒ5oz(9Jɳ-`IDt'sĺёz?29{zr5F`R U]קW:uOW hDHS5ur\55 g t丰{]P2ʃsr#k+{BUQ& w:Bcy >d2ѠNc8. g@i N`NQP0wv"TNa w3OߜxLNKm RT70 _)1cb",1%6>ݭCg<:àc5QݤMS3XW76z']j )2Fl_ޜ{hW9-sۆvΣ!6X <@Y NdU-bN?$㊓=^h?'䥊zg!Mե9)Lv @ゃ6ƪ ayZjXpt!]f /W_CF^bG7m+WA$Bᛤ!W`EFic.aZýx+wYn}Dͽ퓂> HeT* s䓀F_Ȁ:Q*JcvHk;O1AEX)2I۟K]#6SzGD!"?O9\j=܂Πjs]s8;M#d )AQIE|jHQ+{gK\D8YQ^sgZN<^aŠP,|,M/} >_s PCAV`m-`M@@\`\M /G[1{Бvbf؞L8pM^^0)E L1N(D^~w"aV5[ ˋeQUpc\6o(@bcb3.CpF(3+@S.@H)k|ݚ ^Bqǃ}ڬf/dE#Ef1 $E~Q |\[&e@2_!ѱɊaɫQX: 5LvxtP^. !B7ʥ+T PH#%r< #_H)[̍Me{)x U ;+Xoy].P xFB3>ȱ@Tǣ-ZĻnk-l5 G.e^@q2~r.ƙ2K1f-Œ&N0nXhYp M뒑%TSwM}"9dU(CPB-2PhsPH_RaZ:R1HBiGd\J?2'?8Ȝ*F|rL,C!'j~@-`䬞0rFUs.l+Ńwk]J?82%bU2St7ܤ4e E vq>0I׸eֿVA7܄,`>kj|iz {C5RݞOڽOYˤ5D-h>84(mH/ B%7wMݨGhuX :K2n=\mڭ* Ex6n"x[#pN둹/rӼZ4`cI(AyB&x"LS$}¤ rcAEZָ~<rca,de~ԏ],xnXH~ MxQ›\R3 0(K{K4¿)Ƒ$B4J6QꍥE|ީǜ4.q"xD0S6S{kgf>Æ< ]2IΣ@<CC&LsJO WKbĜfhNOJܴS$].+)\^$z`O*FCAA-yvl]c  $&ՃyoKm,-Qh~ v~΋yc%RxTStrl[Ee 3 -nbU0%(qtLR+J{4}z(4#ߞz}n^0۵ 6 䰳v= ]4 ϟ_jwϏnze+P[ug[<9'pz_7qk΄Z#$U<иf%pB!y>ӋF%^UVTMll!U-웣a6 P_fX#!dCCd#/&渊婵\ݧ _giJrOXI᠑EQpUlA/kkE쳹dvqѵ(K"͍^BS'nˍ`nWwy&sȻ>0.tE@ (\<ň[ە ~K9Q 5 gwHr{{(ˆ:TYwM1U~7Cp 6'GkE.~rH^-ZQ2TSÛb҈Z9|;x~OLts{uVX))Fd!RNTqޭ,ͶŚ.Wamb;1 <ժ !! DzHL6۶M{h](W~li 3uRfG<]$JT!$l_1&A+F*?ynV b toBil/36J6FZ\BDj"lIz)r  ]'hR\!yU=d>m (':)]4)f>-)r@y-~-Hm}RC<33bAh? q2U~'\#C9걼GŪ4tE7xGL+jZSA /^   hͧ{Vlv٧<;6$S]; 0qUp^H),a#tcw;|gz!hĕ5{EB z]\1j x/⌈GO bx3n J(Q9 6$h\?Ĉƫ[yĉn_t0K%XՆ#2p0=W}r%dA;\lOܟ(pP*ρQ0l}s!{݊=D x<7 vDD6'M*'xGnx_ >ה<:S1ಏb`9o` xDۭ[^^IEzڨ $dOp],'%,, e˃#>M7vJń|rrR,C %Wd"8 ^\PJDy;H1ʪC *7GI0}@<>od!yH-ـyy 17?i }NԱؼI/Ϩ vψy U/G]=s;>O ^˷޻p¬C A,;BGv(bm{@{W#AD| HXW԰Co. ȇê(3I:1 CѰ} Shn2@@0)xAfL$AqW`XZ09kmn%Q|p1O,o%~r jJ1kWyjyOAGp@N߰P:'H~X;#V(P%f_LŅp_\9_;2, *J㗎 Z!zAyJ{'O?''UՑd?lq )# 0|9+ϖ]=czw(_Zw)C,b쩃M+Iv؜+FImDI&X^[ %H jcsiESyw@QCCRjUN顎sL'K ù24a Y8cД\Guk|}P!gs=NHH; b_~k߆wGrz;()W%YBUa ^QpFP'w,&~ßn ʒI8@S`s}gB=?Yǡ/Ai?zx_ A$N1mEgsHfV@reߗNzӑo:B-M1 J5`GhFxºBUs p >G4.<1('e[79X?So]tr2w-otb5!PR35~2MSv2M,cbgFxߑ+ՁJщ

++>{Npx@w ,IjE.$P_6]0pnPg SH:2OϬeԶZe_ >/4ė}9LuG{`4ŨcIWMX M ݎ߀3_Ή#,KA8+N}m [nzc/D^eȋ0>#~7/J KG_rɝnBk-h9{ZP&&Ae@TwR4;7k?]ՇO6 W1]D8p4`NӀ4 ɡVS/GŐ`8HnAZ9 %i{S0lryn_m .0"ufFdYJ i>K TXtyʥ٠6e=28KS`ODԸU)ֈ' ZCRauskPrCEpdzQ‘qQU)pN=о6^>=ηu&o(E$MkCK֒yl\bH,Ƨz*ɗiaSGhYr=BP^ <,!ةBގSCnHxT#Gq50DT6B-H|LpRE+Mp"^p{m!E`VXT"9 p"˂'6C0 !4#"3YB#j/$-,p ٮ7OD #K3rz^LW㪇PbLHhB:BX-|F\qOn8r|N="D]#D ռ!SY_] YfVZ{A!uf#3!0D4j"0cn]W튄 L#z)g{5"Z68s0TƐF 3BEtC&+ۊd1Ĵ"42skK6P/d w>B0MԶcbr#yؔ_v/\ Ўqwn7ҏjcqhӪZgrgUeCK?)6wj7Qa^;F*5Zh~%HvNdYrQ߱*p'h_tƾ(K)8ЌF P_=MBq24GܬC.}%x/r6Ɉ9mq< ;m\@2A%`=h"(nNԀ=<ȝBec>΋W0œ0䐹/BL@2hX('S T s)cvZk%3fdm9It֤: .Pu3Z W 7׼!LxiXjNy ͇vCN $"‹"  X_@^s|Egc+P|?!.^ÃUg0U=/T)C*ķ4, 5cN`#Ah%ݑt"X"MPcPǕCy3.Z YTAGåooas@me' !(0 l0I_p9ObgU D捬pBF~]mΉ?HYpN҆Z":!(_%b6"~eL丈 T<'tplG;)Iw߬@KܽԄGS1w+, KI0p%_ |:]ԗK\+l\CFnT@DCdz^ Eڃ:5ʨkp5<,z?v+ש:[O0s_6ߞN 2xE8V!A8/Ęrb%=_X\tYv1+ vtu'wdmԓ{0bi[Wwp$T s!Ѡ:N!, u"oPfzw>.þ_\34_\>;bŮ9z3Z0w<ą Lɀxpb*u-d2T#x!B櫫jW7fq{*O; e8rm^~pm|  n5EUL0V_|ʿ^ g14p &W{xFSh]=x,4ƪ7mV>8aL)vD  X!&W2&0N,}QLVЙIı< aGK#R il?  hsTٕ/ҩ@=KR=eQE$8g4Aَ%eS*-3(C  FYu>maQ2Sp`%>h^2v蘊;Ec |E(kz]lܨV fcXltgpz pO̷WN2tHr Oi'TraQhFjzb ;O`;6Mޙ 8&w`μ"Q;JlUlrkA43p܃8"ұUUC}f_,(E`۰D?hbּN(Lv5^ҙFaai[ڸ?hbxWwqx ^؄+@ɋFC Ȕ ⿆-> ; s[YF<~DPcx \uJІg̔~:r`wGf:yg2M%~E;$@:O:jxrY|t(̝쥡#֍b+CPy #!lBeΊ{߼!Lb +hzvnkyHvg0Uqg(ԗ3G`.:% L>WpD%pkr"QQ"ǤڎF󬣙T\Axve@YJ/`C+vk W q(hy6M5Q[Iˢ 4.`DqTrxOс%Ti!-‡26Qt)nzdtT *ip>7J=`Pi]r"?z-R&`KΠ鵈?V[SпXǛU~;9c A'o(w:MɓCȵO1okכ>Or ;:ouh^.ʏOG.?yAHdhn- :oroBhgCqvYP[Nr5'}lOt_.Q%ٱY9h4*PdmocU{>5\Ff͜ > Dd8@!եG)P)[S0&N-QmmIg_ $*94&; nT?7ڬ5Ą<ϐV E,@Z\~Ǹ87/k0n(},?Farք0yY7();XʙGM /9^0?E;J1!&C3Z8so\yZjw8I1Còt&{92gZsoWv?(U\I@rMVn:6 |G|PΎ*0'uӲV{~ltIWPUUq*Ctۉ2^m{X ZhFqDZ{C_SJl(ymBwc% Ԁz}icK{=f 9eJ\ٮ-Ge,cO8?hȼd?8(>;D'M,񟴃Go7@V|o}Uv.xWֿjٛٞO+41Ղ/'\6g:G4̪j3F, fԍ) ėAfi 1H~~∼ x;b鿫4G,3?wSwAC;8˜a4f8.˷W@ HKlvkO:`\-iW>7f]?}=oYG]D;Y,TĈtqwT= nYwxCS㊄ł[f:MQbK16<(A&i3qtu qZWHB+0{(,0+}pO%[rw tp'#6% O`R^L]>ޙȠNk`͏ P˻v`*ɲ@rGdڔH(IN0$8 zeR߀i(e`ns #ThJ}e.]=Cbpsqs'4^b?"L82*EN6P)NQ4<)r2{AE:Jr,O1*/oCV~_-x0xs4}5֎{b?jrT\ 6jn4a?(?H|7,I[)T=Lm|iRwxs$~˚1&ac.`c`K[7$3guC3ɛLc I 8MXO?r!4Ubs3Q$^;l#L z;پso+bI= 6@t( mJ(d !=Ӿ Oi:g i Lq )RaLO쑧wLWլ۴`szϔAeXJB #&{v.b3; `b΀Hj ^5B{Fwf CM.&-&z=*xT-j#55I( %c0%.+{^ɤC|Zxt9P﵇5O#1}5#A~^xq🐓.47CQUUa^.K[#5]0qy?XyBrzmB/H0%qs샖p &p] \3ym8">& KJ&$~Џ2N84K `>Lb yu>ss,0=;~}HZYddHdwV?v5U \koTF\ F~~g S-/Ze&39"IzPyEt`=i3Ղm`44࡚:9 ].mz@PEwHRWOm {dwZNZ[H6#"wD=/f-~J4 =@4skQ\DnVX5y>x[h vs㧉DWPK4 w[ KE1EHl֒^x+Bm\nFX]Sΰ &qGcy/n6>p[DǪ~(O7sr6c>oʛSES\AtOC H'i2TS=%* ='">h``ʡu%6f\c .UMσ#mN9Y#N@Rt[9r8q#y2O~=h:?#oL2n͹s*JoH_=KnoE.-uK'8 u>g?1~T㲡Ւ"MҪ;=B/Iʻph .V(r'B>K\8q'cgU.\HymQ'[+2Yǎ,KS򼣧&(&/Ԯ¦}Ia|7/, {`3d>Uݝ2KכyE/:6Jh0}x7~2kn[{~bL~ϊEmASSh`Y` zƭ,܉QdFsُKlhbN8]TD(Q_Nr#`tS'`K8(ӈx 5Zݱ0-cT|1dW_zo*,.69wv_`+˭;xɡ)PpH y4 Ɓ8/ULL\{ui(lAzؽ4ces (o hC8J$E e.Q uPbpnNV ks//L5v\@=!rC]QI:)ك:7VAyD̳Ks"èg?$S:In*Ѐm m\v7krEG~b@b!4"q;vuDGtW${=~;ֻ-)UvXء'H׸`0GwO@ >%AƝ8q_˭.WOY5ZxT%C\&_`/"~n⃴ֶfX-y0S+~q4 }ִm&,Nj0E'),_*_ `E9'eZp{'._^hA+2oRxV2INr);EZka7S󑞙_H >G*w;ZY8&-51F`~d8Q8GH[]Hw$AexPzƧͻuS# _j @@|\2,6f CA*gibDPf(;# <ٳLMJhO) GKEA@:O>iy 50RHydٜt.9CtS"+F/qi*i$_gim%L Y zTAf.(.liw3je"l[g*i-fgl^=[{o՟v !6ۿ&vӥJe vU8CㄯWr6kmd hؚn]%4R;&Q_[^wə etPVk{~"y/ӾS~+{Ȩz=a(wwOl~[j񀾓טfn1{իvq0n 8d~(*z-NвQ.a?Y"]fsIdy}q1fp{-xq_76 9morJ,LI {qqJ R U%CI(%?vY%pXUx-j_:~쁓/ھ' <Lj!=b y"[V}7C2ӎ:nxƓ,Usqg 򌔧,!|4NQ;%҅,Q+AGIE;6=C#/y]ͲЍR5qm >&l5'iJC<`H}mY.qq T\-b&>̋,u`OSA;8w=|m`8%ϚV=*FmK$%7 +H1~|p DYI;L7Y.%Amoz,c S^ۿGxwDDeME?,%Ckמ ldB4qM0bU%f=|"+r^?1XO"ƉVb|Z:DŞ?q5H>$%^ୱԩNmDQ`@:&lu?soC"m`l],q[/El.H@QLnj7!$`N٣2z3ݙa3_yL&ss)aK^UĊ|/ }S< #I0O)@u;rnߝVy}'#RsN?KƑ"QeX˹)|1O96[ x @|-UU (c"LB5y0R |l>.J2`VoZ^To*7{` ٔ۝e c^\o_:(e1c <=d~%9ӾQY8L+NHC隊#={Gő:jqZ}"| x y CKx bN(E"m ywld8 x~=7P$BJ7J{o>Kr.'M 0n8Tкuxl֊cQRW6),r7c"-h)q OE|ϯ^H R3Wd̹YǶeV㞚,;=ޚǞBn}@I`iE<x[騦<=a u%~j%U<إ_gaZя"" 337zٷPg );ʊ(t o Z4*oh5bL H*Y0Ib%!/RQǪms =;*=+leGUrvz,2=̦]Bg=h'8\—鮯>juj)-_Qt;]-h(hj{?( !JMf o|H4i݈,YX: Ex7{x C2 G6:򇙘$ׇnN z:O/x,53bwNuEl/ x5@fą۪|, h\Pܚٴ̇{gAޱj՗yc]v'q%DHǭ8܂u4FYlx$9x#=bd |cp$cNK-Ҫbh.yA=KضA}ÇsK,7g3.gyMìjN KXT9âD Fa˱g檋m/ ?6՗IE?O[Bم1 S:8 ܣp5[w/`0`V^pN끧0^Jd?Is3ԕwyk!C?Qp!!3y6^Q3,wd($nr5{a(n,;,7]y/:~Ca^6J縣sŹZǰ|KABʘZCw2 CAT!**+DQ, )D"ݸk\7xWq68B5`@R%y+[itUn *XP>FwlP@[csMG?,׫OvQ ҈aEHc+%6#[֍ :ߊѳÓ: k~$8Z kfmsC®W>[-t#I#vEgS0 5S($e SZ$ԗp(e<-T, K(^t /I|=B(tGG+82 &mTXE3fMg^)iNI;ثJ7 c TB.-FO?={QɅyǜ UFJAK)?]:z簵G<3gE:爩ʴMU5,~Ȕ# uZ޻H6Q}QSt YQ0FSi {'H2Gj5h 7:3PP|cڵKjvp;հ'hmOZ,;)΃jZ/~8E0mDƛ !+0Oy$zx xpjUgqY#Sv$}?vwZ 9lMċ!AF+'(쾲|C9mUW=dfnFdv0ZY?,a0os{? Q34`7#Y=[m3{^re=Wv$kn< W#eֆ;6'G82]BZ--.|h{ࠄ:63EQmh Ac{›LzDƢ63 -؆1gS(ḹ9z(fG,䭜zύ=[3{D3z) "mq3nz:@'9;Y[2ܵzy٦VKo՝k@/)~!KFvVlh%;2.?t9XϿXSōDqtT;Ia)&X-Fhb"v7BͶ5(P Ǜ-ҸzG*MeM\l"]$h>'FO2Bwcto yˆE2m}Z3{l I`Oœz?;GZJHӉf씬!I*X$  bEΝ/Fۻd&sSD;7\DHM}$S8:8ͫ|z{"\c1*YB)b \%T/| I9q8@pXKarRHr%~RnVTzOI:q{kυ^^D|B 6YO19bM@:w V(a )yYVYJ>)YlnL`c$^[R'K 5as=DċOj_澌 { h{>XnMu>}!Z_(^cΕAˏKԞǷ7C0Sujj>h&R>ϞֳTFW]Z=׍0E7&`]峔1}R~}r*Nib4 N a%OcYT윧E~IXӊ) 6"%E=8~Z׵ÊJrr >P.[PVYJ@|/2#5^d$>þ'rFٌC-%̩5W~Stp?u4K#e싫.3|O;cJ/Zba\As0s6-yZ6@)ԑSwA24Or4QeF2c('!cQSDZ+`o@x~km5YFս Қ k)+mxkA턝hQXF͞ުR~b1U SiW瞏|F4SZyi`tkF/-7lt]K_({/s0j+PO#MHval E`bE.2v_OɄo\&1X(*I$" @&U2?ݥķ2fW5>CRyU{H# g@ADtcLyHūѕǸuH}|(HQ%7xbcADbx7AN )P6pɑ`={}" 1,e*ЀYlqC9,oqumj`z`Y"9rA)FkЂ=>^ |9YO:sQlMO OJE GEu=ꥡ%|fZR*Ka`%.1 ;Txt< /D7#w^rD){" X\d~1Pߦ3*$H,J x$Y#cπz?t Yp< $ |fx+!?Ӵ [TlJ;(Թu͵]䞄*R?:a-`n[,vd̴km6֟uۙ]› .I!?Fe<]r+SFRWχl5Ar!kJS==`ed} VE#-Bh\"5wjdD|Q _-b}GCLs3x|fT6s?H z-#/ aubg_U,!ۻttNnM(ǧizy+=_ag,T:RD%! ,(Q?&ݍfrdn9s7٣bP<뗱tI-^/NͶ 3iY7׬2!-ZE" [0h-CT '6 Do{lf3ؗxK=iKÈ$qs~._Jpz; 更X|LuBi|q֨ﺍQ ňZ圧k߳ar' Zm?39^}̡08r9U1Ox˧ o"`KeAvZ٫|]ۃd/Ar($1<ӯ}<*GKp "<84[Lq"ow{Gwm K:~%k♟rxϞ1,fW3[>#iV0Lՙ03b.BD? =@`o9/>z=6.!]aM}'L%e%h7 %nHܻ&Cw{٬U /(j|dMhj[׊m={>E]LFze1B,K:+@sqO⪪BeJs_̑y™V]yxd-:!U`c  ͂l:kz)Ubv+nnK6A4*l˽|dNŀYqf7H=>xō$30P(@^;+~Aj2I&Q+ vV5g|tQG[Q7+%P۞;΃"N$_ G8lsEsʥ% ƻdm'3՘6aF{gc[(ȓ߁y5 2{M"qo`H_sjigA#8 ӿaSv\>ظJL}{J*3F6 8"hlbc>xlA]d"Q A$?jA,!?_q\>}n]>w¸XY Aw؋̈a4P\[& /JVxGSīD&zR#zERJEoѶS]Η[uTObV"Q''7)#z Ԁ1^0C IA"P() jRq` )E-13nk S0G8™x6RK}:iYjٵrQۚd&|cc*2ԣ^߭^ߟYA@'Qk꽭⑰l6n1$Qb3SIy^i)朐lYVlV1 `,NL'%YOH=wҰD_y/tC|aMw vWv.96&8)MzR`!$vL?:zP_p4bX[j7u!/>WoD=#e@p^ +rRe6BH1 #MߨƱ4Xҗ]29z,%,c9O(Vr"d(U GU۬Pepp XYy's>a$0`.NScb^s.S%⽒~3>7VI鯛hat,^t\\#!6/تӲ| .mHE !?yv3Hyy܎"ssEavCX3rbtrRL>!`Xǖh'P'P~A ?O,=|i GMwPY6kJBO<k[m3# R4KPN7!h3^T[5@q`% cۉy<\㼯[(舾jhGJAR\F<O!p]P}9CƝQMYH,!7]7`w_ o 7>wPh5}-_i-m]9,Letn:c{S6OlC(*1 j=۴!]P]MG8{kbkL&fz6SD2!ޮe9L,-@<6,-[IؔT|Q|E`Pwd0,`eMIX@Ho C]^ػQ,fsA(&>6b{I887t# l0%+< ר7#wEM Z:#Iva] hL{elݮW˷6qv;8W;}t;ifX$bNK`T=YS]]9lÎ$O%]H;~ )ch/h?Z%RXaC |\_"F Z"l7uL5_V@+#Sn9_3CI뭰hT`ˎ"-EL%d!労M|Lӌ{\,%#96"a0O#@2(LhJv3-*EE\H4C!MI (HGiNѤKfBWߞ0KP׸a|!4<٣tMYKߣ22x|v., H oTSbς5t.#X AC:Q" {}Fri_\D!75LO (>>Nl0s*!CVy(U{%llZ9r e)9}[^3e77gOtV8v$邸D\S)C Ji ^qDpc!Wc Nq.D޽~LS zg @BR0]to,c~)JdWSUi :a0SFbSB,V)þ&w/ye}bUe/fZDϝ6s_zԤI~;uoWW*ZRw[_ϚsH6v(bvJ. mgj[;ek#nA`)<C<>XpPaR4=PDs6m2W8iuȕy[' H=j@ ]`a/'Q FXNC`HW?Fͼt''qh2^lW:cZ R?D `D"={0I\eJIvnúmQtϵ$ݵݛ]Nrv2+xlEn"W @37qy/u[?n]Oo,81VXg D 53&u;|N0d<eB$4"9 xi.>hOnƷ =Gtly* WOőTɄNx(vHon/^fQ摒cSOZ}@A*s/:N[njdOiUfE!搕KLLKhNa`cmn {mM92:1,պoh$fty`뙈֚{5y3hdߦt4GW&wowow1^VT>/CQko؄t>rJ{iJw{|c }uW:'5 Pܥ㰲V<ۅo34'\ɰWɭ8톰|⯓PA~Pi@p h #u&%CϑtZЉ RTwt )a]Xz5[k % ^p{/jp?F؝qǽTKM!^)˅ Iq[6Q9ѩ|]B_7I#UIes<;)\D\ONZpSg@vi. mb&?~Ӟf~_5í2} uST,$ - >f&S%N lX[PW RG/vDRCqo.dCژ X Ec?JpT"_0gXAݓT=JĖ=OlBjT z.7# q,eA0j4 :~˔qYsrHe SavT2ŇE"eWBvw|!ͼ b9YV`R³,ÊgUb:6WFd6XD8"Z+TWjL˰`OɀɍL< CX@5Q꣧6 CMU7]G6 \kv˽oHzNhI#ľ Wf?wKRIKM32,*E:ϰs <D b2"VNjFu2qw<[HnMd*J+Bˉy 8" 7sa+ZDdnݜXl2de+8BӹS8o?/C72 4L䞒S>7YC`\=?1SAةN= J2ς\nA4yKWX`uSʮ#e J !xV`(Ο|4>qF)QpXPq{Mt`{za7'E|cJ#Ϧ'_ 4>.wYi|5׿,sv0:t cx;{C!IWk,r%.9C$u\\Dvݲps55'78Kw䇣4c$bmƗ9`+eeU{ح}?+ SQ=Mi;{:tݐFLV%2>#anm7uwkP ۸Cyax&8<3"Ǧ w-'7K[yiIǮV݉Hv"X?vj_>9vKn ~{FA ޣjȠpюܕ>L (4$e =RS]͖dm-@K>&a^\D`V.T2:ڊH\ixv:,mzݫ™h䁻u[c&nA{Lڷ܈PjGb$R2UlF;jvm/kzZOai˚j!eUYlA~cEn6M~X'nWpwn\. Q:$ hdڜɎOlbON$nqU%!V/&P.D'l:؜gGຼ(7 :ˈ\CO%J|4<9+ 1]*ԏjM'=F CMZGp#m lkAdV`йo4#>@:;m oJ`Y߉d_@-V"DkҐ!Y^s W_V7dZ-P{]pZ\lc&RaSkq? 4+ / P6LE.Y0Yen<壝kM,.c  yKZ$/? Ϗ.v""Y΂9?d+f rY(H1 -$q Y2~h,cZɺ~9ˏNpLvDrQP%~eu-|%4[ 5Uۣ,[ӅD:W]mc3pQR|*th+1ƍ0B6q,JCRh3}R$7)ف滚:L0z禪xzN+K"'h}&;ir.-P|y*⠕~uY_,A$$^i<[ 8B6:2ƄItrf;D_;h3B35N{K+Teʃr{ AzuD]STЭ(Ĉ Mj;.jKp$ݽAc;CKAA '0sJvmMġzu+ :.GZSES}xEN)o;:A;:mqɶ^i`DV"E@+^%R??@7:K n(8<6[Ω7{ 67qJ62t+U3ow g(G2Wulqt.XgF6Q/4r f_ScQ+ "ȵ .EsgaG>~c9(M_vߙ@J2$ g*ʀ `o7 y eXNT޴x";Rj ;~*pSg BOf%>&yHNpGrTW]~}:;ȜS_&}9I 93oGDQhwuI`Y/X{‚:1d[?k|) j3qUsElđ32-e ikfwB`? ii&=^4?g+y.*:\GrO~P3d!;H/%:>2M:mE;^p|=Vi Xt%N؂ ?Q7]#O'n i:9E- gWJY^~d"ⷐT* uP3ڈ(.GM N @90UW_DO|ٳflIRԲJF~d|I}ISA@o "xg8^ apq-GԼÁ47$[k%?i4T~5~hcd?x‘2'eįu$b80R쁢3՘Je,vpIC"BY1rGF>9c};[aKrKy4Lo 8Cs 1pDNJ+r<?FJ6Әٻ+kD:}r04(&lj+{KR_Y}ܤ7Okzfũm쾌m u ˣ~m# |`4&i0ruc~kո0e9OgNn+9~rѐ\ bD9 ~{oO_e ~{2! |rvxV+ӄeOkz{h|2/;K%o8 }`z}M%s&==c/H{KBW'{magg2Xژ\mCpR*?ygÊ d|x=<̌v߽19trƮ==Gy] W&<0L WQpLe;Ikys썋=ٹ%c:reV`ZJF62S2Rk~fxG}2'kie9ڥ>}ˈ1Jͳu;n:ny y#C+Mn23:J\Ř8ngcIbcRCo>+ :مR/;Q$e?C$+ Zp xϘTC%J4c:USd& ǎVo]Y1} #LZ?(-ZX߭iҕmGKұmI\hx`uz-Nr}w5.U2 Ʀo\]E bLFcn>v&ְX.7@<ƫ)ݞuW CyY%, m@NJsϝ(I ]Wl˃[ֱ+ܮ/ENR,x|. w.5{KmU\HŭonMz'bG9{7\ݑެ"pz{׎qV q X,剝lP5#odWN|w 7Z-&bӞx]Vd-4ޡvn`]j)u(D_҇JVy=I/m.WT [G:㝴&<^owNAM)*|NvL 3*\m1W+_XoagubY&3^1W1i9\s/XA%-o-V;ϩgVo;IDv2moш=90[nv|:o6aKRc <۰Xy<DLJ.XR`'ly/ |T}(cX-a7&m#P5/ QUhnH,+627xJ )63_R}'bd"!`lHH< 5VN^i[6+ 7 E/%z}W-eϲm/R='h8,q U3gYQ,f#` }?HԌN/٦pS^"r|Cy ho1sqZ\z{_CE(N.(s4FGT.;pwmqح޵Y"?*/F˵1DGO\/1|2y@6s'#(nm= P,V˨b9qEʦa{ʛQi,&<*ilxE^Ԥ=0[{~H? ceaw~[^l4C;j?aՙc yU%$b<|:hfH^v~aGoy8{NԷZ&$?m gXH PyS DxWC;&3h{|v38v_Z1A| qD se*ԝqY<tukV街PBYB&,t2Q. p%RveؚFj⇇憝H&.7W+o'!}M"*<5q>᳙ۜظ^ J]hz|5b< o%qvD͚չjA@Ǵ*׳YyeӎQbluD[cMzZpHB1g6)J`C0G&Xw}ۢE`=>=Y63?uݕZz_{6Wbt͋t-BpPlue0/cH?JK4M)2R@<ѧ6Ci͒iKb⡅ H#h,zQMVBtr HA;'[M2JH-ۧ .Ɠ 1-H@8Џr s&$ 9叢~X<;lf{ }~+Q[Ã1VigU7A}L=.baR);Tf}HS9v~ļ[#Sr3<}hH:Kn/$3҄@X~\94VTepﯫ;\J\7TUG9NM%WLIX-0[&ɩ yedp_M$+MY >oYί.i,AM x\HZ_$Swqwڊt k/* i0VLq8 |(`Q-mpjO!ao_0JcAL2 B)MBr<' "QtpOil:hԷ5r. pJL@ܨOSt7P)O~q@–oEVLʽ~"k!;oDE[dA׉?D !C.ܹ<hzZr9rIEWGFeG9I'-ЇDx ʥPd(ׁ͈"|> 4hٍ"!'l3>&XP~,n,9C`0RD? 6D4_PnxR`,/&S0&NB k<7u!Ŕ>T E<:<Ĕ~*;0qu"H-}B"^CટѢ2ѸSyox}=-fe)59\DhH3W!%&K3CM@:I9!9K(ǟW1U~7ig/_f Ɩf(١x~9a6II,1+';qvf.2p'\Y%)bRաN7\k|Cr"{;9 &9ڎk<kكG25Z :q0e8a7rTduhkRS._pFPe%M7xZŽlo\AWdΤaCx2~x$<oaAdJz=:ܗx;<k(f*Kt9 ozUDT$:W hħt3U#nW35gWo)EXo9>Ϯqʃ8uV l8kSX`G{#kDtM9ZvW餍ߙ`Ӄy[`M|] 'N 8vdBf.r"#s#0–}៘puc^!8&3pc +6Ωrxax{N"V#⒩R)kz_3odN 8$a[&v"ՁqdNv7]"SG W8j L2D95P`v-AE^|iNj&+*&*.X{kWÇ@揍^9΍F@NP 7+2(3 iRis|I!56Q&4!&8[Q(ti)G\UPQL>`Z%xaǞlJsֻ.͎_WkS{G⨿Xd:_zN=u; A<:@ "SbiiOHAfޤ8_wv_#4,OtYy*c?RB` f2E \NcX )i>tyŢaB4 AIHq`A]YNeH , gx!/"![&* as,o>zQ ? QP*9v9Tx.Bj ᚚDWyލ~@L)GGJUU0Y|ɧnVX4)Jp )Y#tN¼R F |U 9u0C'EhrZd)(M > Y*duo0#1$0#]s-WHq=y5z\j! ZɯjBF͗n!7ߗ'ݩ S22O3;ɘ#^*EyVxA[ d]4DZ +gk|ڏ/`qN̸W%IT$2XMf٣2_VSުFmI/<,24Uv{&u^^Q|}KdfS:pL>hTG#[XVK"ih%졬/v_^X\5g3e~~f~\kG$`L[@T \Vr߆eG<[\ B̀m8 Ѕ:I&Uf $ %ָTLJ8磪_0Tȸ0lO"v{CsJ-|A,B23 lyaC}@ A# C&Li08jpWOzTҝj EnLIDحF܅Jy{'KU.B͚tYU7M*{Ѭ_wNw}jr"qdT͝~c&-u+'=7JZK-V>42x#` -FzΖ \ \J#-a|8ؓ&Բ^ w!l?T-vI5]1QVhE&=#$\eq;V.p!W4T?n|K4[繽guQDrylixed4cфpvd:z_OZ18hkG&8KWRrRoYanb^$&g7}-Pe*r4Fs .h}mHNJ[P7p(iO|D:tpZ޽>M^$߾U~է?D@ҐUC x3DJG?.TxXffN.k?{# 9dw;9>_f@0hFI>w҈z7QU&Fѕ}@\Id3KHiyi{K#G%!ļ$0^)1Mz G_Y¹Z40CMV8 6iaXY^OF{ΡC! (Iz˃X8:Gf3>(EF[UqītnEi| Jn9nHT^`RfuaCA-y\񉈣Q :n+{x́3[>ҬyJ@Gx!x(Mكyk\p-Jԛ^:Ѯ)IVqռW,/ӡ!CY_t4HΜ+׋2evvkN;HCVo40TJ U+(?4/o>"PM<b 8#Mē :Sܞ'A]ɧ j1ܓ tmp}HQHSr gPQ=RC`(Hדjm ݋gm;cX#,8S^{E˔ma"^KR %4|&Mo ~" JGfХv,_fQ$YɪmvEpo;čQOxpbt!Ɖ1J)ܶ]6=^KT Ǩ˼[Y'9d;AJ+eV~xQ#ca&9?ypŪkR9}YU=.aI3bV/)P{Ͱ!3U"[{Co}Et}uۓ5[ZwYtzf k;Ai}R$2~"3^|٘A_htEz0k'׍ ** m^]"Y19^#t r0wI>ɾyE_fkF /dum$y#H"#to,O<2!a(ΛgWpaba-wx޶D#bcsD݇Mƨk󳇈ET$&)4@ YɬshwN"qJ Wnòr]JuAJ ~>ҀEYϝ4,,,p"j%ﯔluS).y')/O W\Qh uGTT# VuL.:YƦڤrtm E!$NzU`Kcg1yA|y|;^*V1˾YO8i83G@}ZN\{E'9j0%[?$blSF@`(>XHxo⣡}P|,h^b}P+5틻]W.l톴=.td\]k(;mSr$V.!1ǥ;~T i_i=XXx1bƾ/b^M<ԣ>v2͖ !e#T]1.SWDM 6{uBEcS)hC剗OOs9B;nIZq`[H wDʎM`$}a3}#s u O^q'DrY92!9Ue 8r#0K^7)P.ƎٙmI!y8ljW}B,Z,~|18T=nXy:h+p%zHcϤ.9n5rtvDx4*<79am2l̫@2O in$ uͮo9Ņ͵EsUvxGuBO*io2ΙdQJ[gɃ e互mqת~3+z^(䐛W }9Oq!*TVk:$;$؝t1ɑKЂi<&֝coثמ2lnuC8Y<0Pn|߈;C}S}{{r<^Y,l./ {"4^X^=gsQ'FYcc@fpؔڍ1&=v_a8$P/0q2,.H(S 543O8T> bsse{slʰKVpF0p5ៗ%\h>۔iߝn?ȻQthԂ+>?h!h |-ENy~r,Pe(og ;Xx5.OOh͠,S9Ohŗfɔd7Btvq 0U׳V].!s*UJJb b?(nwJz)o8Y a>fd_R`"6La^^4ڞgn-s x~eϪ CHK*9ƉFə(3G$ ʊ LZ&+8 A'LD{Z5Qyx˶a"3 8Hx}C,G58߄O\fD.yFd;Crtna%~8a k,/=;;I! cy:GPXބ9OUMDQ \1FhXgʞbKCiMqp'i)ɹXVzCXOs΄l\?xsӚIdd CEWվp[^C]vaɊ4V;/^ˮ~˱Jp.-UurH G^Uӓh $I*.ȉ/-'SQXwlA hg*ANkџFc콖֢$_au lx@C o` 4DkT;ЪSEZd~vn(j'/Ϋh"&w_Ud"sVZoN2909Ne)wC-k!ZP{î"j A7,h"Rsb= foE{X0>>44"0Sϊ`%(II;d+L BDFAn$xO3tB#[BӪ6oA) w Z%a? 8- Ռ Yؠͥt:nYOgPt$4PȥXC!>ANjd;T&!pCZn "n K'$I{uvoBBRRQ9-iNLJ!D*/?9Wuבm/qʜG6 [w<³v$D Bt7-n=7Op OB8!D1ͩZ۾EfTiБil`<ɡr\$jIy __Tu|?{;)(1wmwӾKq w/ Ӕ ]!5h$Dֺh L>oap[t{:|Fϯ-kZH=+S^׊/ hB.(XvYNLu6SZjvj~mz z6)#Bg2*֧.+)\[3"J$PJ$agIBs88 pV_ {6v,e*vҦZ#6̫鵫ytlyOվU94lްрӊS8p'Vrˏ]7,Oi.gF 5+vC2p (Y7|.h 1˼츔̴!€B̍eM€XL֥Rx|JDq4(@?p H O8]}J Ҽ d%Sj`lXG"RZc<ĘS-뷥y;H(XElbVxT9#^͡,Ř#FZxWlAFM+-;_斱hȴXRJzD3hZns`,sOgwI =DԽgj1vɯfSfYZzf]ڏmήŬb0[HטuЎ?cRg60~̍i{ 8jn`oD69ѹ-}R 99E1}Nj .ip=3"ȯ%:hK27ЪV^6[oo 6Ś T_ǩ\zfD^;ֿf3[}ꨵBnݾ}kЃ52I6 ,_Y]͓fcDTgpf1ӡD/Y" BhM`XJ{YL^4'`VƈE?I8*J uQ\aPD&^ 4UP[،VȮm*Dff$5R>N <\t)jZn$v:e9kL;[^xL\:C#+Jq^H<35s\@uߺ#_ &DSD(S6tSN]{cJF?oé(B1f ^HKF/oB# 7ꖶ:Ĉ3O֠FbPS2 =iݏgŚrwq- n#oťxC:*˵|pA]_ Mؓr-hQ0DS!+,h"I?o+Glr AxՅ|Ϥhi*PpZŻ#+$]wze5مYL1H#n}+~9~#?7SwC2dx$J?!b im2R>YT7a D*7BϷ" rYj21eʫ1Cص/z[srmM?c]ϤN)AV*>+lqSͼ$ۍ9AƚEmJjX\\8ůDy2i*eM3L+jvyG7cn/y;>_q>w3]t\}؃!-ҥ$^񖗳j6L([ugq t6Z|-jg7%q:Z\~zK$iYbv1NZpԬ4ZgjI`֖oDi{&'Fw$^nݯ0 TWkqR: G:Tg?Bɟ)c}%pdEIC, kQ=wH+>t`9{PO ,dm(_P$%;2YKs:ު^cy8Q1L6O:v}rUvQKь렟oϓuʦ_GIvy1?DER-9 i^@~N("mIjD[ȿn%p|=p?GB5TR"LQ8֗xzD|kۙ1Q0+5Ke9$ZxG*cǏ%{lyV~+lB7uW#dц앥?V^PxT{|]O0*u }=<"?޽ޕtzڶ~na5z>%Nrow=ۈsktE#b}[ۻ~((+W8CZYv+aDs-Jt0bJyOO=eJćմݎA~* s%e0Z~ `rخ1~1 ,bjūԬz/,6u""{_' :hM׎_$/xSue&qgk}N ]7b b ^$Jjx{<[#y< r2] g1pVr{\3QGB.0Hd S~5sٜ-"sL$+l/^aP۳5nnubXO|ej3gv;s9\+֍PN"?}ج_N|dUN%oJ,[hjQ p)knv{]]GՆ8>qV/3`/jSj9ݫp<Ό \3v˝IV)Ϣ6O_ 6 d%z&_S 48X4L/ߊnIˬ gw8d|Z y񂀡+TV ?vyYCd߬}NoJAI/7z}E^rA_eBO| _=03fL`'y<(ńi&x!Tr1=,,8I^"@L^/S zRޅ0RfQI׺f |o}q֏T+l'nGQDcb_L.n!zO #C%QZ.l.irbk?[~2$W}5e@uwpKϳKNx"T4&8د|E +#Zشss0($ŚߜF{,GsVM,8oitT292aji4øVt3^&#WgyH5/̊|%?3@El2O66CTCJ/Las}2R Y?d)Z/}1X} ~]~ng)T(_ __zxD+B?t((}0NX̃(-YaXC* JN9R)|GrֹnM?j.װ/3LEsS #i A#n|%9~`_ dx(= 0"ɦ)KJˋa.-p0Dq~:mĸbXwFA Kd܈!Z3g1U \OI~wޖFy8?\A; `-)zV>?k::"2n~;'46aķՒLe1ĻSS3 }ſ˒7NؔeKVyk_V%jÝqMݟ J|NٗKzL/PD 9SH%1j^p%ҧ~b!#s'k]bζ jKTsFe7o"nI=1nfVl]Ey|s[ ⢔;;dBbYIafƃ #e\ĤkAE!ߩz l_Oy7 dx# 1{_zxP˛w'y/o]xv2.GX$sT]fs)R8gS9[6)i&<¥X, "-yw^ 5oDEX JPkObOsC;;_6Dń"sH$#3{BU4x֒l՗J&Z0&G&s${ġ'!_/cEx{K's-(p(]uuۇ=m:gzYXY]f=zz阞jui\yrtјmhC0bJιOtgcorJvE.*[Z`#K]!| F>y^-9>SxAKcj"/r|0=ϵ1,?uyݚ8 hQYg +xv.V6ņÏ X)1.)y ( xa?֛MXr]j\ =隸싋̄0Us(V֝\hLXPi{ņU OgÌDvO(Q `<щՓ(|xXT3 (Q\JS1yU&? I|A/;S=bކDh.fl](^ lFxm:լ.H8|{X28`+xhb|el L_Cۗ\\86w0  :|fUdYTu #FΝZn'_ha&U|yf̨:풎MR%pYr̜Cž4PrWݯ6Zpϵ9۞%g;_ I`,I8sDJgD"t45x#2sC9'H@_ 9{é[@mpY{CiݱܞY*$7}\kt}6;!P" a,ʼL"gt@+/2PwG2~]_rWg ŸPrW\Gd(*Alizie]d 8Xt/2Z  TI8&ßy)HŜR0?W,VD@i8ϱE^$Z){N)` (w1")d3'O$LSb28s6cy" ?OKz7^3 /Zqٯ_Q._$Oe RFA(8k9;fsKR&M?Dv`aiG IJ`G0%^&;-Rxo- l/3;Lp`2mɺ 2 %cLc62'| J C2)"#H 6[/R<)r2WX5begtC/yf ГAN۰㝬ݛ;d͕eF5^ƿV)\} *&LC("S'CQ-[x, -kŴdA>ح^8{F` 4 ȓ֨/o OٻdȳS 6mN|'n1g7 k˯MUSmdbϡ@b9k8C0ŕS=dl,Pj Ɲ*X?Q1\ .n>tɵ;aUpmϝpmJ{PI~K5WfrDki$$=NB NEA{/j>/@O2^#<dXU-o-ʦ5+76<$#Is͘\I%36QQN 6u-f ~״$:W q氻_*ÏaPa` aؓtJQ(0 ,ŋr% E1*?Dշ'|~&OD_2H:dBauq UMKzSDZ}Kj U` P`h Dxc>^|*~x a#c #_6H1GܾA'i}o'bAݵڤ~kwQb@YQo2W7=oakcW SGDgc2T}Sc_f\\ *ͯ͞Ki't"Czܾ 4new9]X-a 1,}V+mn:2NDΆR(*aK&}8[)%R91}۴Dru6cnD:]("!Ť|B<)h\ jeirNiA"˦nĔ|kbڍ[G_[m"yB\L0Nfٌ"1)< Isɾ'(048&-2|]W* M7}*L#sM_z~aɹ^Yq_оPjI 8dyn)?O3̰qG,9HYDX/-R(JLŹd ń1ə"kB>U}/ Z*^_6oaH"o~PkJd囘B.1^ay&<@ DqSۇ׶&N%,9PERԗvңM\PƠ-+\i3-.~)Fn)o<&D YJ|s Alћ݈OvV*i#|-g*y T/3AjUVՋ[F1&7?05;1= 7bU+5o^C)+<ٺ&g*{6cJ<=y.# _9`!4 "*8q$0NEfZ1Dԁ`a%wpm-oyf|#i[.9Kƥ-3g;+J3prVM*K4߳lk2)TR9Yh]v<+7an\Hmūcȩ'ñKNJ,C #<\?Í(h^5o0^u.ѥt6pۦX[qm'KSl.)aVvY\ il! !^ԚԆ'usNj?".g"$7 jkK |Z_V $c-ᷴ>?@/(af \Nw6;כ7"BQ}{ycm Ovof &i$Juܴy !| c2Wd jp)S_O1+VA,~LAK|N)<@4aX&!A8b$%'IeHaXe-=;O<J _v[M,2|UJJ,/qFAߟܞyCLpcN9Jݙ=vQw7DEe* g?C\̮^30DRq~_3VW\!lXǏ4G.d|dP]vSdw[Fg~da  N52&i;;۴۪)7G)3v}plϘՏ? }ߺ.`>tһn)tXJHy;_E/n5Ц(a;O1"+ ߦy);o7:/XsU m}`eLiv7AYc2'M.BGփ">@f_L >ِby?UYnlú;Z|ZLFl|%6IƊ)%'i{];w_wu~,nH)ITQN լW3EA*#z7rw!wg!i)pE@\+_B ‡yv&u W$nI"Pa7ϨDۻ4_Rdd|eZ]Z}lYAl*{C«d#s{c*򋀏.*5e|X⃆-]wݜ*9S8hHp"+"y0Q(`]`J?qI;71ffX1$my|~5w=ʣ)O>pD֥Zc}jj;( 5 mkw]*R\m6Dfwᖬ4a&#,-|NMu?ܧ1F<# "zᴏ qxiXwqϝUd}ʞ?@'&F.a%20ӆr"JYjoRKh+xj=8b8zn[k$2 s,}AO@ 㵢:2Fa* PC6{zC` \DvS YdK8NHwqy2J^LX:2e7T-iIŔ@a, k0NE*ô1\BDpI)?B%!I;q\&|`=OBN39W.Lzq]+YeӌÈP&GJ8O"Sg4- ;U&XZN$hIJ,>Aŀi2dO>ӓ-|Tr}}^oůi6z"X Wa^ow$_jI 8i9/#fDü!-, *C_ HwA@ra"d?h6XY'm21"B}O-#aܷWnfk&:nC%*!LM3Gǣg xQX(s"? ,,"R7#~݃*JDBaG~hvRrF"/!͙V~qmB@\~{*av͊er.)Xq6M,gW lv΋]p]{ 4՝nH:z/,3%v lc(Z;+M(ȤYZ,"rY޷iaIժWi)LAUl b>O81Ngxe71S2zNF¯Ɋ dr f3q+mh~/E32{!:)RH*r|8OoC |)7 MZ".2[d֭&΀ *,CR]$B^;~ijty#9Zu}z]B2PNwU^lc|-y |_XA)*#4eH<{).>16,qOi M5uKb~}!/2+H14@vL9SEs>51{tgyS:i!ckWD)I -c r%)[qli#O$hšbѕ66|841%yq\ In4>{g^7_&[аfy!+JRIqz"a_)K­_grT%}(t @*0n$.1hNC.&Fvް~ǜ]r0@L/)ow}@N'yXd]Jxk'B%0nq UL 4 'IK7H_^9m4Kd|r ^uB"j U*2c9Ԝm{qPj$ >gcT!NqZyklqCdldptɒЃ/P5 BJ0RP"'4$d4>'ap?QWo22ޒy}Wp`.,Q%N))fovF_sھt*s|S¡A4;f w;3P+4Z bjp%y[3xoA'96E}`(ɦj*U%+rJ'`J͗KsĠ$GLÛEipW9B_nޖdrUАǙAe|sKnNPX7*5=\2R+Q(|aNU,D$"E6S⬠09̫zoWm}|n78/  &KצzȲ n yص ?1S@2.M @C}"Gwւ E`{wK2YyIw:p~bkHBT MS¾aH w*)c++_ެMe+ ?`Λ1 "ﷲm{{Gn$UY+3WurGq $` dP%SG|*=Ĺ0qͤMzz'n ia@5;9&6vZibJqz%iOS3Z^ήNǫ!WϬs{V_ = ~׍Mh|;M*h*s,B{&Oa&XHߨ0kX,T4Ig)?K.IZ LN&_S;X o ̥^EWiIJ3mp$]4~Q/Zi|BsP9k͹)Ã2$/}.,[9))ן(2c jm"p⽵^+n\Q|Uߞ= r'19Z aZmsy>{߃2˻JP\(څJGѷG*]iCP(GeU)\8Ϧ"WE" vXU&CQuH!,qgR>x~5g 7גL7uf@+&-nD: &4nAnQr)؛p"4:ܠ}rw肦ٙ1fUw[%p2BP4Gȕ!w_YY9cwkX;!}#^O=n[2#ҿQloi7c'2)оKYT y%vk4@ w.}ҩ)fܞ{X&@!>k;/ .ncև*rRjx HOJmL-樓?;c 3.5a}'L[O 4]Ϝ݅81Gֱ[SfqzϧOHk`>zYt'-AJGH+u1Xp ~o) TIX#nʌ!Zqwv0tpG?9g u*֘5 ~M*(2 tbP^(Oq>JܗF=q?vm9/\lJ斾 )G O$@RHa;_?lII)P&0A0 nTS(~ "Z~,EߕR56)~>cLD0 YC Eugچ M5@2vc@c9NK i̗7tQD$@vu%VvmMWdhm8?.@GxXϞqϪ&MӶwڮCO(2d@- 7,B(L\ Ibb '&+7ĦO}k^?[(~a E0Q 땱o\t.\ "Q@"$J ` 0˨\524Ό?1f^r"dBʗ%K8 'Lp(ʰVIOߤ!]krZ-9X]2V`yџR!Cxerrdu! hE[$E۵o{j* qC[~W3;[M4h1jw&ny,ЕiZ k'Jp3̀-mI>~ ݐ;2-AyvxNX|Fm W^l&m iQiȔH{>PA(;Y BHX2 wHF8ދ˕|hBqZ8;^yg+YVB B^'_ϏuS(.;UI$A%gŸĤz,{-tM1Ҡq]<}C<6Mbkê6 zbz2.{jHx{tK}i } jzmSLa Ŝ&d0ek0}C`Kyv1X[~#us{m /EtZiF`AsXCG;&YiPP$6 ko$ [-(,D=c+%ϙ-Z~_'C'?Kq烇7ȍ^D ߡ'04oxAcs <[2Rvշlt&Q=l,١3 $yrNlY4D>xsy)ty6E2dۛةR3{`,x$;)IR,Uvɷ+k8/t8h#ơ?US '2:VTytd%1Z %rU}b ( p;*,t\,K<Q2#Ajl ɳįM$ 4ء?U@t+h s[CJ|e1gO#?!V &?C2ٺqLXz8/#벶k]CCb~S#|x(" d~ӷ^no9&tP^q O}M+zUtD{> T">Xs'([R ]kyxRBHi?ّH\f*A2\Mu4[\=3~&!Uevm.hio&(yܨ Г+-i#fuXg-O >诫Sw J,MA ӯByjյLN3SQf[ʸZyY(|Y@-G\[lGɑ 4H7ߩr7+>]IAc4_;"s\q*J&:U[KROݖޗCۆm9 _|#YUdYFW8K(;"ۆ :ѺX__ zC#@ےQ;@B?KKNMY~i1 )"JHd§٩ǚOgY>\8"<qb֠ 8Sv%SJ]`)\۪ /qE6&_B/Xb@I* T~Y*YZ!nZ=9O,Q!xFкRáNR|ޛ\K[Έ#˟ U!,ԀΝWVs?B~>6K.1ta i5 PJ~頲1']EPuC] IŚpdo[\\wgެ\3y<ΛqYH=uǃz* /y90+JU\4phd GjzJi 3<cv(S[z(+"TM|T]Z!TA&qy WguV0&t5+ v./dx _OcuNi?%4$( E]l*[˫^{^9PbW9a 2mPQTI{ˎfL%Y)y>c3˶jb䕻7VFR\[$<l'Pdn#EI${Ѿt'<zMtB=/{9mLWLy@"fN=<Yϱ,ҸkWhȔRJ䨜Mz[Ǭo·k弣ʌcPr^LؕSjPX)%~k̑5tW7cwmHY(`]d=Tiv\jLoLw$XԊDNLn"@ޱȼ?o;&9s%kzgM}xl#>1ubX3`x"AIH%`<(sWׁ`Mkg K+\qovp[ه  ƶ|˞(̽RKaPxH|<3ꃗ0Oa%g,%IFe?GQ)o7ڪ7v lJVn_t9Gծ[s=2XыCMS:;Q 7*\ ,&gzAmw>s|Q͉ܡfvQ*JlgF#Feӭ&srXq΄։kAU l7b[e<*)<5<.ouu7Ԏt fΉk[q˞Թ̺^_mz6Z9Ŏq@zlA ȳD^CMHP/9oI_ hrֲE] M%?%qYqJ,Tt6? \K 4㞂zn5zK99ak%NK/.+W;wFBq(s Nc6.  q(eP} AaN E/;H#G'$c$ !.]uՒ8j7o g[t&,tQ1D#ͅ#2Nr:c*Rgku_ S'´OJmE'tY$CV KH,S^[}DirX,+6-Ѝ(AU'"ߚEmO-)k=.=&8#d"sfNm`( o״ڠCpr49Cp?8.3HqձD\?.F%禲J]o,ͳI^qv8cnAT)'THQbhx.g s'5n)inxa-U ѻw_buؙ{u5xRmz:肩SC 5,G,059KL/@ )/btՐ8"E Yn] >߂*jlJQWtyMx u}p8VQ{_S#`ry[qYb<[W Ao;ݿ6]l <_PbxGFJUVF =7ax~ct~{nբZg&itZC`؏ź3k:M2:+@$c%*JfGulq#ڟ 0o{)d'gёon2944N)O2+ mcGb$ܯ?(,Rƕם;mqHXZk H}S˽o*N YgNL"<Hۘ $T,ЌkX術 ϢxXYN 'ryt -1f(Ps(lj[\^ĬC-0=Vg\FPûZʓ\UZ5I"Ő>f3QxjLn lEJqzP Dщ7>AԽ./4N(hliPRoNu ho5 94|Dvz! TDg3l {nQP9|,%>:sTDYNӼx_>*:[nԑ"Kg꿜eՀ ^CQ9G/OɂAW8',E2,e0`}Q?/]WN mO$@'"gי9srȖw|[zT1dp*_­ϦeeV|7'~\Zm)mUynu{D!VRx :G\ dzB1d9Y7~H1cLxaˍQ 'fmc,?4vJJJ6̚G?G^6LWz!PD|IxKVoPC嶗h = !npo KQ:"L@fe>>QKP܅v#_)ήҽKs`%.{{蹦MSyL%1SuA$8ʑSu)wXP^aG!M܍M"JSw :ˆMZn2Q[%hBjAYw(z1.n珩1S_wai&byc2\ܯle8d2K^d*1i)Q (q3ĦwrEQx=}p+ӡy]\Ë԰~`5=g_E WGb[Kq2Vqߪ$ f0Lbabg1k epȧeF6Izv~dʡ,&#?`7u k(@I-Fn@JB$9d,t5%h$&uXs&{\}O,C #B g3L؝*S`bA/-> + !M~fT e~ˤ`OQmxx7 X1+'f^]4%26/DJ`N)qG0@F1 .;(' 9U^t:C;!7pPPGkXuk`$e=ON$kکHwnNosXkks׵2-O3gYaYn}j q*5QZE#k"@mrRwLzs0Qh :Ӯa4-u Ҧ`9y>vo4./Z`'J))ň3u8~{ XŒ@aH E((0vSXnWA_VφG{O!ʹI7AaesSnp&?"6)v$w6F X_;Kł:3HOf;a0aB%f*cGK{5z؊'qR,TT 2(Fn:bD@%5|A||I|0)JJ?M jvv[?#k4;e P(o q]m˞ sncÞY.Ojie0WqLxO ϨHЀuZxYpb>m; <9$bŏk.T!akrr qNQGMGzN^USrJ DA0(tHj|to!Uۦ4ټZ)X\(m}z) 9B'y"{DYX꒸Qh՟ s:d#70fH=~(`]C4*0k8=aWy~^xg$fu^nZ?%a!Yj#2QqP1)M (+?A)8I1 2o.㶈{<O;!Ŀ*J͢B))ב%/>п̓fKXm!/Ms#Pv:赮o~?l!PMD/Nm=bX" 2 >P{V$u2w~Y]*>)s 2vib'cytʲDOxG$M1K Eb!3ρF(5Zr |<G< ĵVBPXcI0:>* G̘aEC #|u}iU5v 1Vt񓗩ާCEZPZ_ 9̭Q2l`rGnn;~80XOv)m Wʩ*줌%P&|e/:ka֔.[u`Ϛ{)ճU2MEau.{2A8,vVo)z/0] 8ق*2$\'LAAtyT)10&vWya3t8ރ =Q :)Wd jpi c{ynς^㹌ܟI~H :w,_X[B\wG#/dxaJIJ#>U9 ]ٳysps8 mPnJ1nr?n&Uvf_ڪW^n/G0V EaQ$r/-]2IAﯺQԮ(VC16V"V`lRi%1|+eK+#Nm[ϗjN\-(g0 8řT!}`MA8㉢#"HE);:Zh8I'&k:L'suP&[a6r ҈݈7D3_*QDd *K4)KVMp]2!ǔ&uzpsNóVǧZ:N-$4r ML );=sybrj,u,'wMq+t'=JxtS9ȆIlb8֚532/mUr+:Gs.b腟\NVЬOX^pȁ C<P1pl} а8mק&qG!.)c[1Sw/Lfׁ/hcY%ǔmO8PR~z=ܘ %_%)#|ղ]Bԟ^Sa>sx|C Ⱦ QhɑQpĀm\FYjMWexѥ%L 7Pq}B}kCeiP9 /&olPdUVb@,}gztr/IPf  \r?_oփW'rE[T |+0q6{7iŬ]J=a|f׼v$M%/q>37h-Y]в H*lJmljCu:_8@VGjc5äKƜÙHˍKEGt̴# gߑҜק]wf.'+!qY ]gdvAI[Ú&TL`K(*)c&;s& Rd*Yj9@S53"oӇ[F'{eb64v%ԑ!ޠlsL~K%NhV :2wl&X {K0ZN3+upR&K{>^5TۍMJ pΖ%d,sF\Z<#r6M>h'zJ!mvdWDndy:SkvhykNaU)B阐!}mB|9/^~Ŧ510ӷTp4]~4xbNE턧~O7O[ ? vm✏/I} %Enc!<{&lJ7)<όC~G+OX /fq>d<wSQ!Dr3gzF9P`CB.gxQ(u('eo';me\RHޱ"^6i`bo-HJcz:bIF2W^N(5T7y_nf%ROC^} mk/<{54-ffءau?>UzQIPц,1`i-}hX c2o268kAJXŘG'@#"_new!+zFPSo~ԽN _l]s<_\Ap:wɎcT{Ҥ}sC? 4z. 96*?NoSa5.fa1J$8e WEi/IRՋ#EaP. Zi;~R'a~-JfuİN Z;kƉ Ur%<)g`ϢÃ"1! |Z:{o}t#܍"Ls+NAW{._2 dr[^0/J˯ylLx`JrU;q dH;-<ͱȷ2U_;B1M8bIVtQ(\]>#L(d9Y:a=̠ ҽћ_C%SýW( I"sGl,ddЛx 8>LUtQhQ#pC6evb(' Oη!_FBy=ZY3r߿Iڭ5%_rcthWI|gTcy;zPѤDBЍ#xZg-*f0olj<Ľ ߕƪG;]U #ۋj_ ;f#]u|(iw2i<Ȳ3Ua'F@Dwn- 9C#<ՂacJNp/k<~r43D"p𥠨Z(5$0z0$BRiXE`ݰföRj$P|-ݖv 72ֽ_Bwhf_l_ PrD.R U(0Nڧbf3/=KByجj&p}ɣ%_XFKT6(C4t2M;ouFf۳("&wjc_\k DhT!ˌ?x ?t}dXѹ@ (tcx1UKĎcx*I<'//{7دDCZxpْ']vp9Z<f廅y/P^}` ^xm$ P~ʲ*P@W9ߥb"^+kJq³n( qsJYCX@þ^dN0j~J7R Z!VROTU!Q\YTbL ,ޭ!a +,VMq*, E3HGȼ>ſvR A קD!}O 'J`~1 X .߸+$arF 3fnk@#cX\h+<$,{86/brO{-7-тQyA$Xp H_?ȭ]{QTElҭ0NADAlD7 Dyi?6\ ֩P$&P茭r;g0PHRgb'Yn7x/:Ѥ_"o$k0xz'QK露S%B?7Dy2'QR'U2gvP|3SOs5 ` _ ۉ2h@3 wrڠMʾ~ XB"va7Tzrb!qJ/Rl@P5p4Wu<~Q4vK!r`qBmcTJ m0D^_sՆZOoL숆T V4gޓP<2 V|el}*4|gy3~r ld(]8pq %J@F쏋 |ߑ@"fڶn9p&[i-?wnq㨚FY%픅2p e4^;0wXb,UT*QK'A'Uu-:\O`ti{ש߫f)VڈwG14qs_7V-@qZr|_fGE⋛0Ǎ}>VZmxRveDS'fG8vA8h"RC,,Fp&(0HK/g.tb l[W?/9nA`3%gs&;9}ה qj V #]e( Pގyl*B#f3x5ĒZ-S0&Kf"V|nGpn~ea0h l^=)7UCKs\+[H!}c 3A 4D4m_ >o.}n1K9Q Z\e|!Blu֖C&ڜ(B:+dSGў A|J%ӷ)q#hs(#.lGêW4I4IȜMKL 0;_>TDO0;>dtNŲ>I Vy0)Qpj 7R2CVt׉I9/$] lYrA! 9aY#a VItOKխˊX}]&j~kp|W*ݪ15!0tFᎄ'>!胣( e/ y5۶ K0^ɱΎegqTmBX!&us_W'+<x3%-}-ƳYvӢ'Hd+O81e6O ?Ul� '1e]>+:eSRĝ;7Igُ3\ڟ]\{.#3v J&tWn9Ēhq?bum]ڨKZ,x3GPPmrJԱIzMcf?'THp呚GK~TeZln(KobU,r{t, Ge{\hw1ȯMtZJkg= d .q0]9b;)Zʑ|T 9;\ kj+(.+=9l@lŢ51ET1+P%aAq_ff8cF An#$toD酲̇f"ǁFҌ=H %!! ˣo;eF:r[zQx lM>p4^)ZM÷kʼTj)0-#h<z?byYd&ϟ'[!9Mڠ_6p8 $;ÜW&!di-80?1Rv ('|q#1fK`Aq&o _  \gH:SgZq,+Ti5=ɫ|&7..N/8-tN,/ݨ'ݨf!YYדN?RDGx R"#3yh7E%}lVKpu/H FAnwEVBP@Csv1ʕW$xEkўUB¤w+eәyk%>]ݿp:.[.W|Z; 8W{ZZq$ʸ6Ғbvk'=ؠ* H~jKU`vTMB h<\h+Bɴ↵h7g !eވ|46g\部5*9$Sj'Sۛm+m"pMsF<㧛DB׹TĻZ+\ MUn]`ʖNunKS6~; שJO3{=Lgvf{-Y`ck%T!28"jV;ic/xgDB[K8yU}IwT޽S3I#-4tYs/H!he!.ȑp'Y!9`NE%&Z(p1,PQ:3-Y!*k%\[dCND! KE6{p *{$sOZv$DRH ك/ NE is5)- C6I) I9}{cݓ[XYՆ"Ոn2ܢNј@`2czzH5v-66 z53l׿Όqo._$ V|*k{;wz 41BY e@HuLOv_C0EGx8Q.AoѲ{-JKB}o?כ{^}~Ȟdp2n? FPQ_]K .ƪLsܓSb>*%?Ol|jLϕ=%CtK=jf:w>GnXyyX%}G4\uHUcO&=;V=eSn먤tX8w .ga4Vΰf7`8X3qWzjs]OWr1VE2dsr)d OKY谎׌){HBsaG&Ʋ{vX|$%p)<F K9x[\bbR~x|5(}mMYwWj=L!;CM?yD Ѿ>'A`YJT_͗U?`LYE0,YHjb [QDx;`ܨRUXZg遏3F158,j>4_Anc8[(2| Qs9'čvo(S Ͷu*чMv'3?gH #xdC`oCSŠl9Q%!n>T7+o }cu ^P*r5N'y^$Jz Ruчl^{x^3e/'7:L+ Ԛ+q"oʗQ,!5tWTP^,aCanNQC᥎{\f$ pEfdw*ir3}}ݡ ۩m9E`.{V܋d} 6, JNiơg˧#6D @/!QMlM ;KC,u OFA/*;ˬ;=J{ˠc-܎Kr U= XX_NM.?՜T#ƻ9o{;I9]k'[h2:8Xa6+fIˀ7!^SRQW4 0fyPv0N`4&Hoa!V|wW|!CfU+MtY H;U}G\,6 &imNoOG6 . 찓m+MBANd 5=J&ʶK&CF Q M^uRfR)&QĨɝb:cevEI7gp7T}Y3^k2Iy>fz7v}=͛E=BԵ 9s|}xoBoSe9ljG ɼ,ްC&YCs!xLCHzO'6U/Y2hWdקl+%[PؿfEs{yNZ3wls6&a ;SEgp[gu)m~myi <pKXsλ0JX7) '[emϵ51}'jqPkAi>sI$ɽ]eՔbg,i; e;"9 {G?OSq-ʂNCUA$WT5&ƋlCYLҘzO76E]^Rw.'K?U>i/2һ[xث7* ĤΚ}odrǰ /c?~YƦOٓ I<M;ؗ9e(1 ,[$5 lB/^+b)eL笌@VK-*zәJX$q" 7?qEa4Ns8y =''Ģ=y5rQcHDD H x%0pgP;=56;&@gЎreYa0%G0KՓx0 #e0 sh=K#Ƅ`eH>n)6%>AR,˜m*^°zwl0ڮ͓"8gC,kE"UFK9a 瀹W3X;/JPUܿg3K^Cմ,BGx!ذIxt mpZ nzN7q|:h@|{* bdW HnSt8_׽0hMmAʂZ^ZpLۉ߈[G%@inT5L9lTn /`"?^v3I|Na;:X->L{cʢKsDxUz R rwCIfQ :KD  gy"͑ײHʭqeO^SNVSO)2Qa"ǩtzU;ĔW^d }fdF|VEU0Y/H̐a9 Gay^A;b'O$eP>qg_-aI:ǁ t/?m˜I݂ߟ̲k@\$Kg'0}r@d<ɤ($'hm9٬,+%FuJ^Vw! IϋmB/g`R85{K- H^2=f:F,`KW]R+Y:J:0()˓i˃k{X`ۢ N:%M"Ƿȳ)cC^;UQLelU98S"2ދy 轜,؋4"ϴyah?_+D#Nt|뺣hݓ{bZ{D#|}tSYtƓI`b *{1[sO O_:#Y%Hl{ 7LR< 1!-Ѹ6M\)~E㰲I[6Cˤy/UY-%ɯ͛Bl;憨Jw@# -?3rEk ȦK-t WC йEQmK=ez=Ћ; ('d<wB|V~d>~B #ߔ'++FYF-B!9Pp/ ^h7u|n0cTdC .Xێ,S"F0ze>EFgrY8 SUms8;f, xn}I!bld[<@Qہ qPe&y&%( %s†Ā^r\Is|k c`>Ug?/0Sh=KX[cd ˜p~+0hRe&\Di} 'r>|u1"sKZ+r1~ eKLW\0,a$-nTНo!@K2[ќ3ǀw;/ 8>Nm^OjӨΗ S:z ̏;5\؎Nǵ|s]f$;Рf~}u˱-$1nSDslf 0Qo#|7`#H-D@ۼ j7&f Vs9g+?p oǝuyB=Af m?Ѥ=[" u#XҰ~$2r~HgVsu9O2c!q2^#θG, (' ;Tlכ{* $8O0/mތLxSyh ̎c9d"Rye<}^K 2 WV&kK2[ ~7L~!fdE>Ԉ4X4!!mP+'+IDuUcrqa {1,S<Jnwoޅ_5ԕ+k iwELjAbXzOA j8)4%[Z "a_/y(6{O2f) J qAs$hR --XM2AzjAJ=D͏lH#9xlyu?HD$Y#< %oH\ڲ a>գzXx=+w'tre|bl|X[qD{6Lhe,o{ YQSY^'IF t#"7uQ"#"+[D8D 2+$[v陋̹ĮeueG\yupe 贴z'}ĸ%rfO/ 4|(Ē>bS_=H<#$2]HER\45ȮNm@m=sG//['!#ԛ]bYZ"ݒRB^7McR$ȗz\3x$,,o؂oݛfwS_&(Msӟ< ϔdOi"ELsg)Qa7 ĐAldF$)=`Yv4 Gd+6 H?e?wT^UB6*PK%}ʨcx|,S)RQX_E@~m09NW)""I#QQFbSU TfL+@yлF:"#QF6O#}GOn0ss~QGyY:խgGWمk (bf{F//Rue'jy)^69:E/da8TߠpXp( ]6_37Q5g48\{^dz& =FӮ,k $H Jɐ@r=j0 vC<3ͺϑ. nX~-4X?{$Ǽoǩ4Ŵ_oZkG ˊc>  ೔u-ȲUE?iAqH8CxLd4p5X՗k2E P3_&`gԂt\AYy-nu*5tYc{8Zfa" 10>; qMANve]1իzKD boCSkH7 /KVw= +w<^w"3I]%45nLmV nʍ!W1 _ZШBI y@'E @5VN\/x'־V!sرpyp`g8'IA.p?[ ~AQ Fl>Dx4hl3tR PwM$d0*c@{슋r:iRtLM 0,Rm _|ܿKX'hp-цey€ax 49T܉&VL|gڙD ,49bX3c| +"% *(tεNW(^%_# 뙙DRI3>~^RFZc|x,˯_L=S hvѹq;ȉxĘZX G) $,0@mm@AzIiH6Aizjn =Ɠt\idI(le<m|i[_`gI> q :4)O|s'TC|1^'bSDIn&'fgxNXRQl4XV~he+D 1քx[>oO#>TPLt͢VYkεݍ{ZCAs?NƔeJcn٣FVRw.&#X:HSEU$]145Elo.k2mhW _q835mHvOnL ͚4U$bˡJ㱐#G(=Hv'컖GeϧƠž Z\ 4HB/2{f{tu "3=2aa;@8mKNc8 z 4xVeȺ`v#bVchKb*g[0&&}Og%N.j|n_C[ *K~6YB`~3ZX\s-G/Ť֙ ;Pt5=*kܓ9y2(OiG`暇|,PT=k$l}Ўn̉)HUs}9SOiR) )l輍Vס:A Ϝ;-%Õ!e+^TT|i%գR8N֕?N UnK`uMKD|÷pЭBPvݦ*#Tg-3%FZfȻ+):!mDyco0_0RG v" =7q./f nmfޞI̮5 EfmXo`:0X824ʰ`GZ;MwnuU%mG< 04u=%`F{~w`ܕz &JVG2 cpxCHʞx>j1vۜOp+Iߍ 0ǚu+WHWS1pRj*#5%բ* =tA5M =T]?eb ?]utɚqN#azBAEt锩F>+OV7Njط.uqp;&[j6Qa"֧`sVOX!4)% uOpP)w8߄.Z"E:ײzB=LEsF^ov7<ӧ%$T:tQlSߺ4M %0 \XAq_HPRAI s S~;VY6 fCbIFqߺֱ`UL}R}e5ƌ̑fdɚdȰ#J|g$?eѱ]~1]>@F-Rg^ kzFL=cq\J/GjTe8?Bpb),cX=E~x"F"?ğ} ^Kv[Hы.b*Bs'P_)w77׳mg6} 9 C *\|P i|d/p٧1GMBj)x 9>V%+> Φyє" <wJƿsMd8=zB'I|eh*{Ա!x^DYgQd3Ա m6׋L@1#! IkWbA?6~[ƀ {P$~rH s tq0{Or4|g a0%TɈKH]]sc9jXw^q??-GYXiXF׿~_nZ.F@]Nj'bpʿC[{/]+pT:El.a w؃5 \B^9|oe?~_~SeWK>IZx-cC k=Lg7Oy8NG.YTC#n[P{BOFc!"~1Em#(F%qD#9:O#op6?-בaO a`$G2A|b+f(qbig9E| 85K_,&h\`)K"`rLZa?ÏP:5Zf VoaTЃ1羷 cr2>'?/o{Ź^{C0K8x M A{҂ht?d]~UAQ?_XoC=չ=ԁG_1Mi  k=A7gQu!)hO*?J?5*ThǛ8>\axЊ?&y3DDf#;P0[cwP'x8IP@ț^N79 Ddh^Y ?^e8Ȧ4d'!WS"$d('sQ? QeaNJLl^& 9ֹw.B:D+$4Nb/T?^',1;9Q;i| =}V[QUc5,Dzt1tTSB^K*ԱA-MbpNFa,R]hHA ~_\3OuGk%WĢ$ze䭉ƶ{ RT;C&a;N eL 9?`ˉ_t߃߲gũ1)%1U 81lQ=dq9E3msjMXwc|ԋ<>:5Gl-'KJhr K^a+ZvY˘ 45d!< 9y׵+)>k@XŬdF;šA+öAʹM֏h5JvѠjG8~P ¬VPJ`IMu4z⒜Ȅ@3~'Y(W9G*L4q't'we4:S]-Gc<܈S4 8xvyq (Fw߀E fn21:t%3E=댇_2sUNu a aZ]ͨcʝ6@`Q~Y3EɍEb l_ b_$NhVG6_d6Xdp P=ׯiC1?[%{wPZIJkœȝHdu4 R#:!s Q`w(A@#rڃ`O`-רy8βk@TT|Gx\$xxHۮQ' >37%iڍ"J>HoUyƤqȞEi< ~34"a\7 :BN=e|sxA9زc,}Xet<<8!?^l^u-(Щ Ǭ=8bhmw8٣O'meNԪ"'=|[_65k0$qbF (oW/=Өuz|pN% -PC{xma@b@nR &v0zc:.^W4OCJqawQ 4EUL~[\hxE.\nX]Yw˷HAea/R\N ƜEmaFq2!^$5 P3ѪJ VdHna'<<+HB}yUn?Χ~K@bO5ʻ"RCfĻB)],!$:Avr?>_o|1J}֪ F==Y#@b;uLHi܂. q= FܴVWv⧸Dq?ʄB` pŢ{&r6l'ӛxZhK^lv¾l=x{rwLޚ/\nr7M_(Vp1E*zkp 72 OB"- .m[Px)DºޑհX-y8OyB2=/ 3;u]o\B61NPURgnZ_?3p)gfֱo\/F,T,?eqG*MW2GCbosw|37gV!D <|zZ4Tϵ0oqZH قB|KiZǻbL4[W^^8 O JO{J]GXsH]򱕔odx$+s#JLNExu.I37OsňY $9JC[[lZQF*ro쑭],L[ͦ\Է\[ ]b_@Й-P^4`WL]RPÃ8#ۻf X 3^3ni^P]~0r/bbH?'}e 7hFm^=)L?c >^u|0۫)袋,^ܩxV'W̛̘l.X-Xz5R=1Dy ?S\Wn@]cQR&8}kF": 5r-BVi!Ҝz+4JDC3(Ot_ 7Ly:9ӤJ !y&C=R-UJwzV+xd]#5fMZl\>%# z9 p89\.w[^/I]l5n'5r@hw 3렵α A*qJQ #Lܷ9Yٳh@ VШ:Tꑼ3aGNNj7}>4 he1kT0UܩN4%UIuД4^ cynoXJ3(kEȘbG)eootk=;3ozY} 0AYkc#D^2@5Lý=tb b_?*ڌCImT\'~@t`ۣAjl8nպ'uhz>Tjcgi>l I^݈}\S2%u|O-9O3m@o VaPo,zh,r) w z5Nʱ3v &x\-$3Bb™}ZYdν>9HWVa4W1qes!t% d6;V>s#w,'f!j@"kWrޱg7n?3n *,dTC>k_E_%ejd@ V5<;pJKѦFp*i88VQGrJPdHFv?{ff-y%^A܊ܟ_ݔڮEӥyj#"1fЋP=C¶>H>~{+O]{I/]n 33vo*J3U2M3]+,=Uk$ (/cOa)G"2p.av_up%z3c#(K1Ǟr{|I_ pEi&̷ņNYZ>jeݸ)QU^Tmf+hND2/kKp\xZzln2~n!HV'K7V1Hb_. \ήDG* *i;88TWх Uɑ'AeW"Yنjoiլ!eҋFW>9یThn|H=r=. AȚ[岇қ`xBH"H`XrVQ'㧉h8v70~X_ܫ><)?D-P@@ mNﳒ +(~;j vphܬW(߄U(SZFfiGW#%aYia,Bb'c /q!KD>7NBJ3Oc\3>5EQx)90үwy>Ey%E`"jWd<{N`5X:tڵKfwTմAW~cdb}ǽA}ozonpbԒ/͵$1:yn$ ̯&p+q|u?pCo vjUL6+S2,bu DWA]<ҾBzTq_;'H6Dj (%e'@LMU,sMR}~/3+b(&iqz HX>7n7OSzyVL)˩UI6./΋/S;X558x"y`H} )Rib],=`1D ]"<>X2f0z #ckcӨrE)q[2w8P16tAhTZ( dH@M?̀5AQEH0$ys~_^tΠf8Q1 US&o }aWn:NQeUfD:zgq8˗- ]#5h 47;^ 5t' 6GzIe21#aGAw4Hcw-:Dϕ$}(y}U\rFd y" Z2ˡc%[AÑO&'CHC b'"A?HnnJ0iB%io1(n@ J(G-q`H 8J@lylH\7OGe M(:wϼHSS$)ýj$3wIrHWgw,p+'M#A<4cՌqc$K!w? ~FLcA?3oNgPZ)#I?A{G̵_/KJ׃MINc:<Z,ShBɿkepd`Њؽ$KjæâxYY$ʷI Ȩ()YiMe%DahfKso<@Rp (:#X$NC_TݮbQ:b/*f`ƃ4E*:ןw M' $N/Vb$BJqԊDr0o'qB' vy_^# AZ0!qOhyxOG$)2V?x-=UIڒqz[# \80|(h=V9?JrO,ì/r{NɏYݝfxd@, nO5my; d4i"Z2jn@qz (Y``y<:7O7FMҍFҭd&ŴpsEI.ˡ{.}D`:\{y:19[U;ڙoyh_!hU_$a#֏O<)'d.84HQI4+1bB8iP.% \w7_/\аc;t.^H=,Jhb2RZ.`8# 0}dB1H~@Ȝd,f![..T6`y8lpD~@grG<` #YY P@cA β&)6C$ͧ@H_A/UdLJv`|TD}Uf]S|dbJylO(X . ]4c@RH ,@ŭusDI,Х CMA1 - 1PFH`mn!H%sk&7b g$nD6y*#$=1K.b|jtp?lqQpJy`mD~~ ]ַCY&Nk;C/~; PdRxE_,ä_*ri_M:v`p"I'z:m̑fnå}rhN5|6{@]Mwя~bd(qӈSy/1C Ď[cq&ncU5 L7>G_bBX󛐊ݫ^EpmIPP2_ L{"<,Ɓ׸ zц*c"KMQH fqd0+OlnWEpWD) 6M0,p0u0pINi ,v܉G)gA9ZV$yPFsUuS~q@A1]8v-lh JD66>W; y: N<2[n|c0@kXTc?aSR|- sc^Dh%Qh1Ҟ6Xq=6k@jMW\]S~AoiJwr~P؞'p_#hstpע (啕ȿ R^<8eK["-^nH.ſA5z~? (糕xGjnl0E4l"raa8؟\ Q!}16!2cG^eXdPtWoF(0 @D?X4Vx{x9,/,  6 ,"?XK9.Z|a1/-W '#974зD-KTo1XCCJ!!1cNXOq,Mc 2/,6Ư|i= 8z#׸=lZeZnza"xe!!Ԁh4T)  _lѕ3?J'226=k춘q{=m).<O%qw1Vh׃Cb$3?K}Q`_OCCۑ@<팸7p$} X5ìF=OK{ %Y"`\Šn NHiwB0 S0HhW<n穟: Ib /zW  ^G?Tj4TvP ";R9m5<(JxYԺ{e]ioeċ`+F+r&F V](V0 *aa"oP, L#e^/s%zE$25֖tڽ!Zדw)@(5sSV,q=U"Ey` $ʮ?H@mű57M=CYdScx >b^]P?p9BEB>Qk"ϝ)y#g (n) mIkN{//Ia&B/zSQz0Rv׬a3rBRA-OW+?W:Z^ed^Lmu[kjxʥx\WW<ʻy_Gp nMdGtUE W0s/ڧYY![xaq/c$ Fz F٫.;hwz[W1}zljAzvܟ9lQEF}^SuhA㭣%ɻ&Ȼco9*)S (Xء;8z=`)we=\#y`J{{7Yҧp$I Yቩp=uf@N' ۲S|T<6޳Rŕ?uI~'9F?M=l}h5Ev,[f?ټFυEE؞mOۇb0A5 y4;6Ymj,3 ,V;(o;q~{cL 9O ,ǷBw\<|BCԪ/쁵6Jgxuig!a׼*.6kN0Y]<e.` U,}r?FJNyZ@Ro$~UIaw: b)n}+֜XA{^,K"I]Ry:KIO'R'%9@C_".Oc?-V;Z_HN^[S*hkB>J(hvELDg3I{od[.l6cלZAreE`3Piiq/:а.:Yu/ٰ2Os;rhJ[4]_Oyv]`h-`W44wjGs,Ob3< IK`6|:G;ga6ZzG|2;LAMqCCCo\މG%FѲKMˆxg42/fT3/,t#x uT}MqN16nnǀWZ;"NE5CʾA}7FK5@+6cq?`0.U S|H OHz5"Hݬ5jsDIy8't׆^ vex!C$lYY'mاۼ/8x^\:+>CAO(YM,yV1yIؾCY)è{Ћ|90M}(.+V|JJ{9&rnp!nEC&Lu2B|v Y,=[5_uk-O;($`|wi!roK :[݄# ?cYN$+1@.z U!vqXQfR2ZHmܽCo*mwݏNfRn>;m/җtb_F~^Z+%*控/3@ ;cI`[ēbKPgFS_˒Y;J; p=$$ cE0K/t388D$n9#?J#9)qfT %$h20>rhKO!moO1~N)"̔F2?D;* FDA[d%VL&:n 6̇ɕF fz*Fm&4L ퟥT(Y%\rTNU1N1 ~.ѡoo 0(Q^46'6`=H`D/۬'_/i+@_m<) Շ\}%֮^)?ɻx=2| E<:؝+#$ e +c_b+JxWEF2xհ^m u62+)y bak.zX_y<3(BΕw6 26WWJ/yh~gNYka?͓AbԤMyfmoa&Ӛ%Evpv:V\\՝: +NL+bH,PgkcY˹9ݣg8+v5u!0Y/uG,MHۅ@cK7Fx#$ Ш]xDs2 ,_03o_«&YuI;cPTbδio#Z;TSyTǣwWI?񏎍l7NZfvK$`WMocY4cK#1i2Ym6cW|A-<d|!Q̯jl&S7PZTt3.b(ѤƦ0 $@7aYFXQ+"e(W؟j'GGiejY6˟vgbP]a>oYbKmGPE3~dm8ԃŝ= ܏'H[ܗqs\UTŭrBYa 'S$|EA`XADYUivZsN^K,YOt_xדx`8s-o^6<p\tYL,\01:ކ;zDb[:d_$ |JnI*IR,X yڳBOl@4Nd78>KF3$%s2|܀dhԇ1#V;HHKB#1=a}GV|!>&`YeA-r`l!-UՊ:h #lˍ)wqJYʺbz@5IFZ$g'C%,Zpve# 4ۊ NL/1Ix FXŊ,E$Ct,IS~NV5{4v<.".%pQ@C䅲|{;5oRZQ԰OR񕾸}v{,G7W."K6u1ϩN BMeR~uU$6Y D˶2VҬ46Ԭ]o.l fRǐ IzRnǚm2~_ۍpkrP5j/s]T (ͩC[([=[ei1RB80R]}}O"I1tcz{h:y"uw$UyaO:1DK U  qt^} ]漻rD^#n_9}`hΥIJx/Lh_ n1Ō#E$7ߞug?L!}qujEUnSEG8rG,\\r4YcT,Gb{u r'2<>xu9?4~Tr;KYtBr`K:m9s#RيE&N5Ndf;:CFW{?l@I4Z"?qp M$ٮyKTMLF/`&XqØbh&.4Jסo"2_'t,+;B[Q Dҟ;;S \1d2[CkgLdB:(jw?yErN9(p؋5Ӓoቒߕm6⬳uYfRæ?#u;YEY1pSOŲZYRDz=א% \G{{0E` 0IVJUa7@:|/"^|6O&ҚNE@um? q;)5A5DoWb_ӿ.tQ_AΐAP56_!ю"Y I}~ ϧ bzKh4nYC&<9gݐ/0Ngxg8w*.n_*b1"/,h"7e2R4"I8 ^ݧe%4W-KJ0)?EI2YT>pp}ME>,|`f>Q06f!zgHaWtUˎ+ dhumӵH^ꆠǒa{ziwA [ZId+p8ؑ"JlAPt$<- UF.{8k86"4V'cĴ ZKz a }# gIƏl1KQ!1p %k BAKM$_x1DG~t~~P:Y_Pڝ^S[–y#T{ouM}{qTKy?"A{)f)r4gEoKʢ+J^Jn@w~ p;TemgN.ٓGGE$xZJ2#ӼrZB0Y{^2n/dbKF m6qWoQn/@G.1C]U\b[&6\Z [YZV#XwG4 }ώ8ּnYqd;lLK}<INyHɸ]&'VTŰ7ἐLBsV>Ubܝb_vz, \[Tއ3K&|f<; Uh<cѯ_>E͆bk2<\AR47["ߡۉ?s4Ur}]HF1cHmy;b$W)毝tɸ ZzLZ2W#fk7OT_*mL/ tFoǺͳwЇW龄_׶έu]*]ޫۚ7Dķa^`LN̄$zaLrcS6FΊ}.&9펞{JI' UkϏf{|8ݻ>n f&1b~|NlDy=Vln$BDk1.ָ_֗lD?U}Q{>"{^zʜL Z1"rK'9dA\^Zxo4t2bd\| Sh^GI&&1a6 9RTP`n,B{7)a8~9MD460(z!GJXkE9.ΎC-%l:4wZfǸ$>֛St͖)I 0Hg0^xN M:> tK 3'ɩa }^׌ݮ_2v0y?nŽFv`^螏{l7vZq8Aqq)_jD^ߌNc3=`B˵ry,;Ĕʦ0 #/1 Q}LKDS)Z\K?]opTl.(WMf)]Ry}h^G{l9Vs W|^(oa"qyKÌ356xp~8dޤ~ '΅Ethk]_~~:9(9̚1W>w4p:8:ﴥLUQ BcKvϢ7 ^#WsYoS6Dv魝SnZ'oC6rc,=A q=/oD[f,so>?ds͏7sGM@ ERa|V".ARPx]!MNM9o l:ZFho41XVX$(DЧ㽟WPU{أGMG}i v,r_BHjv8.l mv傣mF ? Mh7I;D=Q_%zR{f-AW)})=2zX/yoQprg6"ܑx;If`0k.;կM0 " HA? FLhKIHǵ(W '^>u9J._o2ly&M5 IsLJvVTe3 His s<@e*/i"+ʒaVals}?@~_]Q`>A,7"jvu[-Zo3b3{ŋٙqLwѠ`ҶʿCEĴ æ. p\+ ZL_KǓ?RMZ ol< awqN 0e|_g)n˰ #<& `ҭK@"b 9L>sF&U:dW])4ʸrV:b&ѡt. E8bBpm1q#^aD@n6jz\URuS1r %gZ9o?ˎg`b $^V3DѢ bZog0%G>ٴ`k[] Yx˽RboyN 򢜉QiDuB; HmzۆM@I}bS(9s`skAzأ9%w.Tv7F=5UV^7FwW%ʻSxԶP"dk6Mpdy/A^ ޜ3El_=O oxZ'MiLZCc;$T2ђ('FW脼 ZCOz ǟrT"3sB)f}#% S y\6o(qÀy#Z'ȌvAWXꊯ҂C|^q ӵ~|pE,;Z;# =Ϟ]pLJV\$+ U)`T18{f\ȳ,ir$^wQ|&B,XȆJ W|i9ydJdQET*|kS~.bka Vr }("~=]`oeJR=Zf8I_:EA~`nʷI,if\13*Dk4Tqxهq9 5(|֣ev1D|p ()wJ+Wv! 9itV}W9I&HH6LY\J{ U Ux"CH[Or6ԏmycL\%>L;.+5xk9-I>k~&+\tkK%tT:I3,k^7zQ|2A]FL'm9,/0?0dNfBq. T878}\[>@ &!(,x$!݇dT d2GPmegyd~keK`Lњ35+=6S7Ewpˎ~M mbHhQ5_ w ږj;0)_kod_zBYuw#N챎\TK$F^'+h01982V?T>gvb33wv? WF\fX4"C9(NOCܶ($r~l`y_N؂J"h=a uQ ̟z" Vinz904!=א#A^[`[gKiwq{Ʈ/d)`Zq(lٜ䊌frȟ釷oNԗôO~7ə Ct8ReRS-'$3SZgC3Ռ+|@ͤ\,OQEe ,=UiXo![98_w> TX[ Ru^F5Nu~) p FDW;^2ww:8EА;.T i-n(J3s(?q+Q ˉvS[0(8B| ML0-f ^NGgX$r*Ѥ¦X%kwߗ*fV2}3U}ڻ4F0~G RCf3ƭ`W7JݽН778*H-0hpZIٟ`zqۋ ||a/Ž Xl8e"CA įi+7<3|4F3B&$t$|p+WSقD_%*"~痠=΀OVR~77V>n>1jὬ*q$~^Sc_(Q `Ǻv Cؿ$I w<yd>{Ie#!~T%؟ 2+?` E 4:M=FI$98b%$/ON[ͳ?y\: Zsa E2XegQ/'c HWWEȃB<G{,Qk8xOƓ=|`0xol%^@o{㺷U6FZa4իTqFOPpX⬅I+NZ5N>.8Uo E8vBq=9+ʌ- 6 C#MX|M ǃtԋaRuhɕm7#8s8Fm{wDL>}`1ΘݹS}bԎ`{>)jg2-d׭noPypyIﺺa<Gh"FT?8|hY|IꛁqMI}7Mr/KDJ8D,ʫfsf!/( 4%G_,81{ITJ?l$ITpb$QqDq}aOӕ<+8 j9aLf2ܓZiwi.W" X?l^$k+{wD= 8S'1ddD1z&)QyKfA)̓^1gW\K&J@jLܯygS醗$<>~pVT^7rrk(#Bka@uTC3I;r)7KŶs $ǀ\uTS Os~W.D0(^7 W4+_} 봽^ ɬSN,\W. x*b 8+sjIK`ٵvw֏q'29QW$-/g`\皰_Xj:bg91T)Au5j<*ش8(yI\Cdd8rN F0Xx/=oH C,! ( HOá?]HZ1Bi!XZn 4 4,tVg84|;x觗t܌yS?SZia4?AX+ XQ,[=14hMdy*"=\DN -%s@E :O#}NO] 8_T* x0KYg dSגq.Cb&)鶺G\ A^C9|Lix[0Ԓ 9$ht+t/| L";Zge^Q:lxUs%{k2_K~ "P}AؚEhticئ}bWk= [@"iΕ ra{"+gWLn2+<,$i9ihpsmv]'vZB-\QSIs7era}&(mjI+* 7FCq5{ k]sc3Ra:660cEi6? D;LDI*Rh7Z\1l}_6 z` c]tDk*K7?bSWi!9ts_P7G@_`oaH*{d@;,0p#KзxH_MtV>lӨ=9})SW~.*6}* HdKX7%A[p0*`Fs ~=pG{7Œ$ɋ:tq/4!rˮ uRk'24t{;ڸTh#{鴏8Q(iQ;Iv*YPkYZS,g;l`$zA \0}㔮hQ(udn9l0‹p†ue`ß~s˧gmo4嚶*p\ヴZsBͼ> \Vg= q/G+#͚ĚnBk܉YH b1 N|cS9JBw+ʬ0EtBm(O*Qʨ>EsERl]sZMp|͏W(|bG0KBq-sLyxiB$b-s`f.峆cτnpZFF{T{deTFMŴS_pה/+P4,ngsj,f$Oz =ē~mˋd2dNH[ gS8GhtƍtPc8;䠩@'3ib*1i&\p#G$I:Eײ^ՇAic}Qy^|`<ƴAmY XGOJ%YAQ8KR9"M&7,CQb'T릊'»KTyO…u}_F+Oց'uSvO~RļZKl.݄))m0&gb#}"X&u\tNÕrT(l d88"G !{-^eF6mn !fYX$$ }Q!oXJdx#i17W zV>0fds(d+ϥoٮD28s 4ԂvNۦ՗ȶR_ޠ4B +?6`~*>)*r!{ԗ<8cd۾|k`/r>i#5P3_RMOs3_ 18FOH;ВA_˼Y9㄁}Zmٕ8HA^{0ңȡţ><H'qW׽Y.{Mv{cY8_޶U?L|nQYUծYV$8 9 \,7LH\w[ϒñKLCdm,Ju͙]AAх_\F0J4$r1 VрA"h+-CUӤeȁh!_0Yi?+ɳM5 çm-!_x&v5<)( OC*!%rQ M:)ʑNSA=+K~񜋳dDc@7`@)YN2Uf)z ޕёY)kH_/tftP稆iX(πxT:n{_ΰJ[tcv4#45?%\EIl /j(핰wM`Hx`|<%F!Xvs?f V6i _ 0<*1~RX8w?ϴ^oOod*ke QkQΞ7uP0ʸLmzYmWK80jv#{RN2ne;:gP<}A8Y@Z<nFm~ԗ2P 3Ck^W( ]ܫ6n6T19XK)}erXG;6A#/i|[BzyjSŎi25Zup8zmN?Hl,h Clkwuc5L1P)+@lv]-}@ubjrbE PE6|G{!| da}~;=ӎ%_"KV=;c^z,6@s+21 1!ߗAȴ̢=Û^ycKH/1ͩ#LQ+6)v2^d~TR.9qq#8 nl֠ )0P{O vFHTqx2 Q#},SnU2 m; wlhmfCYrqXOs_1+}ꧠwY %*ٰu˭gVjGtzaz;VϢ|N޶:qzm鞽QUK:]?=ޔ_N@kg@m2{[R0pMn G=ӓ`:kԗ.B/h)Kzڐ${e~%`"4@SuۊGBџ(X%qF'Qd3^Y*$$Q ѓ1َ3n`nj50qn-`> Ц>OsK>^+]3JU4~) m`B؄UeFR$s c,7qj7hjis藖[QVIs@ `14 bI>b3jc^Q.|@wE'.İÊjOP[d% SXGxD>-&݅ґ>qp{H:ZM16Tu=~zu#O`G) purru? gjL`"̔WSw 3r'8j|,$+QQodRNUb~>IEk_7O QݺuoU5YGk$T&<7|29) PGœ<'&?:iZ;epcֻ&eE{x"A2fzevL7r> ooAW[<$n*xȫ1[Tw .Q1,:uo|Dx *VyiciM'>%EEwb{MV|/G$&Ǽ.M)UEP1u%ҋ6->tOSɉl!60'#^BgʹӚ:f>ZyY:ɸAeZ½^O@[ijA7m& r#DS~dŏ]R[u{jEϱ\}Ѡd {EG1ӥ0(Giw|Vѫ?sr } ȓQMLJPZMEz#h pQsbg򭯚[ĊHZg@~ C,TըqCD-k=vQ '⏭mX!_DIz $mH8*W!H #9yȊei4Hkնe> (}ݱ+zd(T@ FQZ>y#>d;PP2TJ9j_5'~X$:-ot"&21 <碐hY1Msȏ haN9 zI?]9e3s| JxJgr  w)ip/)ż84 At_׳%x-'ٙ΢F%23$%h)` ۣG)÷fm`J/\c5B Mޝ;-}ْRv%*6T-; <4s:ʫd8,?^ QIy:-DoڎD>FrHc I.5/`k#Ə%Z9È>2nw@ },{֋gQ/+~B-pnVμYkk PjJP\U5r{z~.\p=e9ְ5ȅiWkb(by>גӭ4Bvj RMֆE~*?+ܨ*+&ZQGɫP!ҟF.x|(2QKN ;"Iz=` ;hFѿ=AґǏcFP(t1(.IhIalз"R:] M1{u~_~z? uR0rG!d"7?(+÷kKʥ#< 2MPCSjC)̍KwMiW ]!IgF]LÔV=%pwĀO- iD=:ūzYos;hH~Ak>M^=gzn2=3;:Y3ZLhpΗp%;I'uCHآ; <_ TAJ 鞷9y=3 hl[^=?܍ KAwx+ݠ_*Rk, imw7%^=ՋK?r F_E=a#oi*oav,. Ϟ/3:jCJkf)Eu*%z(ޞ34$kay2hgcOBDMO5 iyz{84$h+!Rdyoər*u;W;V"SLu|~s<^o:E}]vjZ)\puBdKOՖ̚^rq6\gwGpv貘1s`rt# 8i$[SW; oykQ\Zړ8XxCc/.o 2sX`hlk:Mt(nSA +ʃ>1!S\l-hfqmnq:XR&]aXOq`ʕ\2PO7N<|CzyYhi -G:foLv$)~YdMs{trEAL1ȭ Aіw!"9`(o>Gc$G{#n =εBlAgY0LRf~ TgNeQcBnnw<)< ze 0 { cͫx-f0麦@x?i_(>4uz?꧙a/-wڐt^jBV NP7K 5  DK=51c7@k! @\3#k@d4'}}4 &6Z}3BB0u3&a" )=pt#h8L)^?tJw ahu"Rϙ 5,SQ̬69<sQ7j?iY~<7; >FSoѨ9 i(pɣ( tAnw 8S\9d#GMx"_M>]~Ɍ9qigLT>v$Hbq [[pHyhfx{wV./ H+Tн !:*v ieNiwЊh/#8RU IDhoF' H]/wco6+NX #D bG2Cޣ/"L!cU`AQmH˥| }/6!B(*ǠʧU_D> ";4!NDe+1Q>EdIޙ딀0)Q-423۬E >TSc:Ď}^)+"bFw6y %3J ZTЃ w|и!-̀^4}Rrzh  WPUL.~Y$%y!ϠEmrkI.D>!A7a\ӹdGԞ^ƗyS"Ny3J?Ң}YC9@FgD_|'Y-FD,G\A9y K DS'>%# 1 hW,YB5Ga: _0`QBH@ ; 9ҏeY0p}"G|F# "GAr _:\w'J K>P0?s)~?Q)9'ɾɏK;EOXjN*{ }D<'eR$ԯOn3%\hY~C25 Zȣ.CO?/"${tQZBʾpǛ_j3a5RUA `孀O3_$BrL2!uTP(dSX4$W>> @1T[GH,2l MyK_ Hj,zItDMl}ra`~_xmvɟF-!~ 9>ˤ\7[x$C`Ǜ9ucYt4Y)Mؔ_U-pM9+cy&4rsR'}'t_i68z?dX<ymaա`šINAY`exʃ`Q_WtV)eL٣`VȈaG7LhN|rqƠyz+6?]K5x@vSsBIC*d H@wU M?J[~#yĵ:215]yDvX`X i5ynn~nƷk[|EzBgw)}ltߠ>f T}Q/JS\;^f^4Dϰ7K4+S?:;yʙP ^<=5~|H}~~k msf5b ~ਞ" G x R4NQ i]~E3~'~#f=Q3kJLdAG0*l=,7}28#gU*NO{WlۑHa EY^_C[P7ZtfGno/ƙR,pķNB7!$ѩd\?4!t3!$#zI${rj ezթJxlZ L4 QܞR^>C DLL-<_?'44h,xU>h\oR ߀W[SF4̠ kuv ːgu( gIt6@swV7*&z+ȥ!: AY걑99-@wa[~ WR#Á(qԿ̮c7'>T8:.̬ͪ&4=m6JLzswi,,.x%¿ah~D-0AQ8 8*cR<.ke?oPh&TL~ 01N_yU+=nBcuȲPR9xyMt%oeyr_7JZ5~ٽR}ARs͔_ΐ5 J0$qn6a?j!D$U_^K$(]Q)tFEkygK .D^5_j>O|{α $nXsW,0Y rP;I;7džDB;p0, ~WW +5&X=y]#DZ@C绝SEͽCWYyqU[-Qx4uEA]=t&nm 6e?xiY5)eH~z4GF-fޝ4Q|)_w)/&7$Ńyill_ߧ`;=sܝHp<B&A;*Y^ek2:@FJmj@CWR3 CJtڮEb2#sq,}֪CDl{F¯k vez=#]XKpˍdSdndSoo/p6w! qm B*C簓&2ԕߢԾyc.y*,G5]umtR=ܕx$R˖KXQyc|Tnz!aFA=ڂ kNxp1 !91ޭـDftVV-9_- Yx[ڋo2 ՕfNN@΃%lSX(S:F񳕄B vQcɣa# ֬XG$j#6FUiQ"d6.4OVg]t; &#g6$Lf܁ ((<'JWyQMр5%'+}EV;n7xi~NYuR5@41 ;^r $uOs #lj. ̨?/_VAokR؋?*mc Nz$yAx'ϒ?KS _+=5KT'_`oX͍j$o2;Tv ,!)f 29=Pl<;-j2YȊ2S[KSYB”ZlM#qxU}W>=^Xwe7v%?J./{uCZksY<*(P@_b&rz=f8i-<17!.`8n*3 w_1 ׸!8߰@aЖwE1P#CfvQV6Ar<5l4@4o ]daS⒩v[ZўY=4]A9ڞdni-SǶx=2Az;~#=&4]Ѹ-5[(iQ$%*-6'>!!,.ǰt у_iжWya@1#S7)%.~v[L ZEM)Xߌ!X ̋͝.[q˛Kf[U ں2ϥ&n7)b SG%qdOѠK;&?1[BhfZAQ:]zv.8V3fe^zxFc/)yi6BHB[Ɛ/'tyGm [7'̲ )ke5.\ |aaB'dnVwe39ǚyiJǃ!6? w4Bg#}NpKY\b$E$:l}Q/^x|e6_U0zS:> (Z8EDeq!^y.6wYq\&_ ~5L4İ)InO?8KyTtJRP'@@KQ&@$\!UIz,x8ix.8|iOXXj_au+f;#1# ~$rlVB&Xcg]Dcl5g7Z yLLI)wf5C{ ORx>GfkWO7/D{.{x@a0PyԴGmwĻI4F1@8|.ݦa ;27(VIW ZM [0N*ve`SiRE $rh+L#Wa.2 \q m9?}wɾR*U, K>T-|n^PPX'}U&< ;=7_w~S_J2/O,_xp?GMu7޿"J. rʺ5J|EʹR=㯕_kn\qzH_yp g/\H4~>& qҴt=$ca8@% S RGrl_wȯee)9ohnHPμ}k{Xۄ81k[4`~Gmt=!uG 2g_O7){޵u|[d"MlHumigDPa*rK"Qݖd"!',e⌑6*|^QUOvU~0[X iFEd 'Ѽï{&HDiXF--ONzݕx yd{AvAIxiYÔIB<կD^4,\ ݆N;H[P*o-{+27Rv> ':'jz*CD&ſZipZz^x`:xXc\ v Zڿd__b5_K+ihZBɞSI aH foR!'7SZ]8x2~WBof$p.u Ftj`3z'~.NRR_}y*ķPf"-0 n"B4W`e`ȣP^̕ OƓr㙐|:2h)E1y:S۪G sb#6 =|*keZ+'_5խt}(=z#J,^#K_uq{qDʒ}63=X\Ew#C*3"+3vYx^4!TaBx@7s<])F;¿ޅ&gUwǞ;b-V@$v> "@ b_p {Yŗt31OXR|uA>0VT) c_u:;X?^/T#g(NRCCz;kK8eHKdJ>t5HS q"{zBr`W TxŘcܨX;V fVW&SpȬzy\gv<߶LOLm$|(oRjwXtQ6F^#;o5g6$5D\a '~l шKlN]4lV(MXhQ`]9L*DR»Ue(??}RIuP=Xu"T0㩽y#ƈI | `&>r& NjX +Y.,9 ~HM&Haiȏeʽgf :=5{RZʧ6n&qzPA6Lf>>Fw*@Rms9n]E4CO`$%7콪'ɰ2mN(u-J/6 747Rq/u5|Tv29dXo6w }"Yձ2r7>NIx_Pm ,h7fZ/rՑ22taM}9$]\ huU0o6.(μG030YK^9 raFd㴺Ppڽ^S͒)Oދ?(< OPjuq=:n/!XNz-Ti/,ohiC݅|KI;؃}iAbP})1P}qٵs}ny>]Y1w- K.=!һIQiuh<3{ʟ* >kNX/GKn^X#\cb8=Qŗaz= Ǟi:.3)=%I@ezNS{z5pml7uH#4Q$H(2ͺc'LY"XzsP5XAzo!AsY,L6C#g{>nu͝KQ2lk1tLѷ/mg~>?W! p.d+{ӻ|f6>]5ڇtg ^n`'FW0E0*˺ϐ J {g>B>v>7E=Z#BU&ΆU])i}t;lYVE92ͷgWl(%aZg"" ư}d mxaWr眞2,xgRD=zRsvp1; ?3)v{ vekXE/NA(f6ZBmsJ$r0D1c^>jH ;42\V\r0:1&B0 `W xs9=o/iܽ{[:x:B` N@ 6:O6(o+Vح(aʹ޻̏maz&2ԂE\5+e*K]\Q ag:E" |4 .ӡ=k<@l:Y' 2y73r=%ʟթ@;fe28VdeW-Kxu;U%m)R]V"2YݺmXVKAsFWfĽ( :RT 9/pR(8QP9L$@\t"t[ؒw"T/m<S;khIsq-uMgױY~;]ĒvA%=D?Etx yp r˔7 " T]fto8@ *dBwn)QD:I)ҙHNDLqЩ F]%nQ Pje_46Da?z7N>f+1ϰEm9|z%a2\L,:h؛)h\6/>,¢X/zLJׅ2jrkT +觠Mrk07S+]3.9FUn$6rdBVj0Zݭ G(]hJXgk 0$m#P9rͳ@K K:fx(+ٖB(w"QCydQ&eؑ= O qp cq Y?TgA, 9 o~F+nt( 4 WtAFĨm lxfQrF]LsdMA.fV}/Vg|>\ I,?4NE}0N(HG0S&`x28$$MlC.anqud})14^Dވh YM2nb}ٳXBZW۫L"ԗŶ07 _Ұ佻yPq݌VusA.^hJ-ͼc^#_qn/%,h :F?WO+ϲdE!*T<~+Ў8ODO{#Pâƀdn3ռ6wpf5һlw}Y,_ܹh\D.~JuƊQȶnfT zHy)v[ l76Nfh2sa_ofxvtN{x)ۅTFk?'Tnf奱 22j5DG!ķ`#er ם΢B4?8e=Q6|&K=LSoD+X %XN8>--2In3X1^0Q#k֣YRpCRHF(i+]Ǔf󆖋wӔoڢ9lg,-/9;{a5 ̜/';dLĔ#bK.g:Ec6"HL=ԗV['=y.4Hط)6|/fpE^;kK/,_q^K D+BpV'Sj5>Qc=nmfUIMѨgz%^ܭNFiϊNy{I丼]`Q[GdS j0Hl&_T4DLGSH&v%v!-iſp|B&JD$RW=ڴa48O!lunn/F*zW'/nDn ~aoSǯGTEJl򼔝Z$r-*T)= ۩:! RF9Q0X:" t֟abѝAux0]+Lڱ10ߝFެm3QYFadܖN8)}0y{fd `'?Nosæۭ3ke|pZ]xF󣿱ףU+y%ӄo&QCꎃnO+gebG%^ચ(h9YԒěa!!JE };R/;5@F\W:IR~M~+]ۚOZQsX6759 )I[k+*tWJu 7#_/ń<ɳUĚdS4q)\չjвV|4Tu\L?6|32!PMOfUۛsƀ&?@~n<$0yw1o^9 r/Y:Mr|)ߩ}_dvg=HYLI^4zV4bSb8Fga3VtlDxj˪5/~}wOZ{ŅsbrJt,ݠ (~dzErY&^/E@k.gO@}LɳaTt}4U9id%v1.)2列kpdeJ?g;%u'5U Ҹc)1~"v,!*p>߇s D4~,q  zY!0BZW4x^]9M(A$?'hiAq( k{˃Fۨr}{x'S>a 6鄩k4~Q 1M)h$K/N_cptG$hPg84F {1Pg$oU`y/KB(ر@e6RϼhԒZ[$7a @++j9LR^st& SRTO\xaQTۻVĪ+>=Z8h"ʖPX1u x%M* ^ZRVJpfhDmo 3_K@׻2l_Tt~~^XBC%&ńk*/X*̱ K W]DV>~F?-5KA}0vUA^xHA7sN>ufWt_ (޷.yyٽ [ {١F)x3#o8ͲPy P*{[_FW#ӢX"}4[piB{p(:xtŖ\' O]eՄ+: bl=> 5<( :i-xr0/8 fI53IRk]16[Sᒒ @#Hqk? "D} .,owytfGq" -"XZ&P Ӛ0"AgB@8&pG#.FcnHMFH 靛ѻSm ?0sCvK"k8E 3uYg TdX/&&<~ AؒxX <\B.ݐ J}#Hp @K4xL<&xenCumXy$P8̆s',B>`j"'4Fq2&>&7ؾ~m*H(c€`Y#Cvw $; Nr1?׼nsVS%^{]|[^xs P 1/ /R C0.)fj?/I |I$CZ]n'fG'1/8sS< ":ry?C:< I("}[`}fýR+Coe،[wnuBm ҂>/ojfMwF֫sz>boFˡV|@ԅ:=}ϩ=Iq?k73MDQzTYYDn^>m >j8)@Yn׋aY4;q.S#@{_d󔚇~&;7x8>l;`'}hX`\6L!bl -ì{֥H)e[転B? ? 99@)QɋOC M T E`kD} YVcYVA1X9|9mVϫlYI`ƯX{pD\/pUlb:$ "C}h >/Ċ +2E`j']HV+>YC+ޟ7WԟJ:&P4skЄ+d5m ?]U}lb)%}6hM$Egb+j7r[+ Ó.~< +`^FaAn=/mcږX 6tjy߷'(ދ?dFѫȹe&RcjЪY Q Fb1aF}uDz[Or6wIBye/0oCuZ;6fvZ%F04ԅZbP(bilѩ,?5kIR@hFc4B?/PG 8?ƥ:}gi&]Q0$%r8ERr:smjq)' _bZr|qӖxS:,XG>pιt'w$=)B ʠz%T<(ƅyR]D7dke~qEՀ0v`ڣihPB0a)󌴚t!q+!J pF>dh" ʓ'x>( d?oXaPvIy}j6XE~hF T^2eA5T3;D)ȳ,\WvF1g,F߅F (z+BuQV`eWDb~1IttQl߫(A?,Ĉ. q5H 沏㝗| gKT>eMԴt'WQYY?I ҷ^*7B__Kݦ J12OXkVf':zb'a@mfJV䌆\ȷunNUi0]`@ۊ`+da>܆h\Ws9m ݅4ǫCZ^<<`ta,9>JպPМFB& X !f (۶p$O^C39YxA/P$%w9\"Bb9P\A &0e۱XAb~~D~Fc{|\v,64b2a8`Gj%Ù {#-<~ ͊|Ӛ&rګ,ň<kf`$Dmi>[3% fҳ2*ipq$|Q ̕5QviN#Y(R]GOWy 'VӠUHӐN\G/&.OMfxˎva9oϣ ۲Az7bHg <4G)%[q$Ϸʠgzԑ|70噭0/wǮ8ޜ Gj6e}F̛xHM720Կ4a\8ނҰ4:#yYHrs83u+"սnV{/ coF)%z*ת궓 .\V!'@ZA"e(E漐`_ev.&ԣ\>şŁ0Ghy5;W !B^{Z b]uC(VƄJ%=4J3Pe"fX5+,u>fXs")=QKV[P +}H YLk8o Z B|+{d)!%AD] i1c0~BTGP IB gp|Hfe/3 4@X7S: [ՄFrfuWD-ȗ;XY{P}JpYD`Bݤ{ "GnGx7 a2񃈮cp p2.@-A0 &WbeC PEry.d^+ECdZ4DUUEM1w ^B $eOe\4\KY?L1=ByyOw,ڝaW%t*MON|֤=hV m,D`;aH mU^lZxG>.%P mJĿm=U{wv|dgοs,y}ڡ.4O`8\N a#AkpV=Nydܸggɉnsn6Ĕzn$S)ka@ ^`كA'qxX\[0UÌʇω䱾|QaNJACukTrƓs8ZՆs7Wk-|`'oJ&82Gs{]WK)#RSV/>D 5v *0 .nTX6,AI yD3#o$,ьу 7kQx¤ҿɬ"~LF 11 (W/(>Eh >~o6,<9 R9D#yp"kNtzbxßBZcG hmo0  ϒQ ?oPZ2. &BFdl#o2 'LQ2B=W(1w5%1j3kC Hx%t 2b c Fѝ_"y;QnX-hV,_n<7+w,vk_)ʅiOA#*^-U7e37@~~-me11xSʷ~Ō&#DvK_u`? 5x6 u` E~*+%% Ԓ&qȦ;o&[MQg/ "ʢǀtF\):ׁTU7%L .(? ҃bbͩpU=U/Mpo^~@e2$Hj{`zBУK5rlO"LJ=m r/xdlSR-N2 l{S`T:M+.y0͎aЋLv#Ԇ;My8=]1<|p!VeYPֻA@WN]Cf|Juނ$]to#;)"rwUI(!̓5+b[#+ls.蚆" vniʇꖩЮv8)=q;.n>?W#@؆8lAf,-'֞jgp,*`x$ꬠ}'~q;"a5 ګ ߒ  14 3% $g 4Y0b G@oFaϮr笤Ⱦ*)/ѯh`ak˲j%G 8N vd{ ޞ=_}Z >Gc-jb #CM{_nY@Ji|>?'Q<]6v:6b3b8XLXnv@ Ɯ|o5cNX3@%Ҏuk*1L)_\$U&T,T7K=e C%"zMMC(+2ƿr CC{g -hf '+H9}SŽ4KԃY8 OLB+PK+'ERB{8p8gЂJΠfY1{eckw~Rr{ ?Y["uL"$Qχz VOb-1 k*@vC_iQS9.rmŐUhE9@(|Ll {#],,9Db !K@|ev怳8C n%ަ;™|ϵWl Q5.&ptW9U43I2"@)Ǣcș9Օ]mv6j(LW`F){| bxUsiL.8Tƴ%II{]0 \bolX{XݮOP@iEqsU !iW~^'4><$!>&"Kd)U f5W4SvP+|4Yp.ep_`_ ^R9NW(7*C<Ҷjq<@dv}GZȯG~eyE iyw#Em4P&10Ù Dd5c/p@1]4Et&'<Wl mצv{w7Rq?(X=#xm2 ,v,JB,b??wbv"JL0qu!ogx.O˺=T $i#?@%5:]}m{04a`{- 5z즟V!hX60W>jhQ2磂׻ ]ncc`UV%7va3vK='ZHpF o/& û,dk VCWycOFwwNk^JROMH J?YJȲJpZPuD 豠 B6Nv ""9)fN鮉\M=Α5b#1d|Qw{D10N{) u7Vc}pK/޸E~-XߨZ+EҍD(~byE.f"~ϏAÃн}쀠2)vgGL;!?$A=H!#~ y<[.Zɦ<~c+x $t߶ ӱc.(- .>Ư\Kэ(_~ԊT?eVa l0&ޱJ?Ӽmp ÷q ]t*e Y4'` ;W$8,P"p/GMq{[5T VZ{b~['A_l39%nBΔ#0bRdg.Gɧa& M }\%0mj"afR!%HUV m[H\K'/6Kp`M]O9N08)^s/gOX R.n VL4r=bD>0e«߲v }UtgΔwCS[pFK!@_ ȳK{xY\R &FONJruoF:˘+' ,Odsxq6Z@@8w)[\eMYr~הoz-y!o:D>:e*ڻJ:ae`zcw{_Cr[e^ \Sis]M(Q h \t~sң3e\nݲ54įU( zb>$ YJیc'/?lk * GIY ds2Q;IP F{py|{[/\䷴ 84OU#ab3 lw}w? F6lca:FHa"ԗƷu]hA|Fr$fގM,B(M\es( ,Hg ffKHr"iHA[[~8zPﺀ%1FHLagSZx-. h,ԧ3ytCY~Vٯ*׃wOXJCLi)Vka԰8^@v/U.~0 {"r=A2S}eU[d7}1Q8d^؟Jd$21|T ċ'&Q7޸NR_`/.m#s43 + =~kܢ47̧r ?Mf*5\sUK2 N.,}SgAYxvF<@ΐRv_lv ׅ߿|*] æ *u+a!1F(w _'2 aLgP"+ u;(M0jt>E?:*zJ7`EHve_RΜIƘYvHڒ|r; Jx3HS)@]B=l0Խ+ e9Pthkiҳ9W|d >C#؛t<'h{fw*/kh-ϔ<ҵi4aL霎[vTn5B%ǁ-1l in#z"wLr2.Gep.fdjz&1鲺(ך3s t\r2='NAbIAE삃9g抜Yr/-X'?)ꩅjXØ܏yϊg|­lk\l񹶸߼b&ob-Gyi`vloM&'s Sȼ@ Pm^ 8wm'HpdmXO) }A$Ue<9 *>j} 4vk׏KRz˶ڐ|u˒Q9K w^>\ !H?-jM#A ;ܷ7ŵs|͐BpU"k1@㾙XL_j.noĸ-g Ӥ{Hn'~X FW;_S|8j0]ҾЋ(+T=J*'0PUd w0c\5CB#/\*eM+M&sRV65#ySMAI7j$B)k= 6CLܩR+׾ve^BS,"W7[/fj>P>`υ7CKƙGY.B9XB.byͭBNDQu:s&fvW>z0VύBhk]IdB&%6a_G"_zEh?}bI%I 򊃭U^"j"O[~ڙ m8,ۡEĒH,c|*"M8=:3rڽ,?yk}{,/!g=#mS|M@":6c>nAO}O+bsև* @NBWo4o_lŔu$-MwحL|54xN?zȿyX6U*)22 pħeK\㉤W\UU>qZ)59WUY}eYg ȑ*+P?RBX~u]{ #޲k[Ĵ̝"Puf+zem _WnJ(2xCK8lfu *ԵTޜNd0]M2u}Lvu$$Qp_|=k.@+@a uI -9KE4ke=^w<3AwڂiZnWP>^qerƗ>M[1H[SN?yU,\P]X)~L#Q3>B%6OX %P{@`?LTp)ɡ[YkMwߵ1~C3k4^uMm(c_́6CW)3-<5mtxYMp=aB"! i^0vbf;/yPMq5Uj/z#mgwc^LK~Bv!47UZAn!b8#bj'9SEnEH8xT*| [f0'`솃hrM|MMTa y'L/epւ*B9*B-a!8grWYMM" efs^ÝFlPI㽹A ƫNxcw_`ϲ;p4 oi"8?z';O=!52Y(){.tR5̀Nd w?6mx2QYw#(S;vi׫ mF^v@t0*95qܸY!6TVײF=M4VM2>?5]SQgE!䭉Ri ]'QcQskSd"S~,6]Vxui ǝ5cyzq1 հ>|9Oz}Hw ~j:nfvP^ƸF(G8Ǚd )]| _k5?ٽ.럖=̓x6KhhplXy2n*eFS ˞* (4~A/'T )ZwRlwKg2"Å4K8' e ߇1M[| L-7/׼j*kK7K.Ug}g2o8NJd;b8vD, (t~o-݄glO/4ZgD{mg_>a^SO1OtNwGB*'R a`=(` I|Uj]$Sd%"f@˳kd@mP/.яN2\?wNDӻG,10ʍɆ5\y挘 ~kgi~( sGYLHR 5JRfԘ#RKe{)#;1hn%ך '!Uqח\R~e\b ,Z~ƚ{@^!`/|$;7S> ɚvR [:穩nq8@2rZ+|\o*ZBy̳[T%C,ׄ{2sYPbwrM^oH[ks'`-G%yܓb%WLZ03o S~rEUK9_:a|"+^~V~7xmQyEG\PW,S׼ƊXU~ؔrH\r$/2$4 -B7'Am= t, @+ˁ=7!K, 2!Ȓ  V_ bZ2=w%S9ZJQ 5 arEa{os9So,t9 :,츲l$؍g|a\ 8VO.HQ[|Z׸OzQ@7>&1wte[6SƅL뎫 ?e¹DbM|"q6RdgR'3&Ib4?We 5_ hB)ڧR{f5TkS*|d.%4ՅW%W t@A nfw7< 8ȷ!lm_Qǥt%; 4QW> !X 8fKTR@%!E!U\"b4wfvJEJ{M^mL~k^You-ל-N2epzpۂjX1'8{%&ꍃ"1SV} (Lټf]"5~wudAJh yECEgpT_i~  f{\ ,/F ͉7ꈌvzvq`du s8-7GeNIn G͛8 4xv4b!r^UvԾ1 ˽/v^Y1J>p #X7OMɂ}rN|*,ʙ)|#miFnyInV}.̜7\}/+z.Ő[a6LqV2˶}XD<"m6-0cÈ ڋ#&oD,]K1/q$릠H~Ng|lhf2цQX5oQ*f/ʅC w55xOuutlvQtQ@F'W6%4PߋWHO" Y-Q^N1T7NӿE%-4K@՛\g_&ǨWx$;SIO"{qY29$|ELNhl"!ZRa"c7=tFT۞Ešpv7;3Z׌dϋlֽEF¸7K\ 0أWt ؝Oײ&(~EiOR( >תa&¸˥UH x _ wٻ^-rYι8kW#E~.1=S%!$ .!RRZ x@YcL=g5peh~dHlLdW"ɓNzCL•Z.Cznpޮ@JiZNXH䥒G͆:˓2 x4l#q_9b<\B?p}ykz7/L3e;diw^cmk kG=ddTdOlQۊuIHq|Y5lE+ 2Aenޠ=Q>C5 0?ў6DjTNc^W'MQIXKb1'<厀K6D#M>ziqG$U0!K-(Hz~?8B?+J,2w.R6V HvA|A4 vR[zΓq5?6@˻7A T^n}|8b4a`o,֏Mm=E=LΩFMwh غRk_y!g59Wr:͗hj͎fOS45jeAP ~lhgdu͚IߏC%lј%Tt7)g$7 go<冴.-u9[vF햪hz$E=O]SɑcUT- ߲v-yI-:uO^d5g!6a2T'~ZF5u?$\'-'3_/t|Pw;E}ŎKR5U]"VBJ6pe)(Z̾Iǟ%W;kuI02o3Aʹخ.&f,M!%Dl+7+=2L>iz!( fSC W5.N9J?Nws(;9ᨫzK'>X0wL3)Js}{}qT'y䗩rX=:}3MUǂz4P̗.PX멆٦?5nx}Ư!~#vRs#+臅.A'0vɮz+6+Hp7#K7 X!lJ<\olelS$F58ʺזNO >}alMQS˒jW)DXD2,)FQ\IWdQXSw'JX35W9ITWڑNvƍ*1T%L]ah~p|ϸXzAT^{=bVG[UhV*z >̣k]j$> a#͊U4p1Э"g.10(`>-~aƳ'*,Y7^Ddg># !xK\\:"3O i2/#5U9l2pXa ɵԧ -lk|k<ևpXc@ j l2W.Ku0q5N,2Mu;ijoPyCt n .y𯄔C|iD0uHTI4,;5aهjW:+Ge8ؽM8<*}C2qP&~!Nܺ%J4haaj-W 9Nۼ迵gǵƎ| DL}7F} 9[7~A>Ogc0纵:0ϑ!Nqp-hd>ȰlT1<]a;|,ˣO7ېW&W"C=ٹZ-Әv"H*XPah w""6pNKtK;-g{\{3Zƿy]ܢ?<߭bOk$y7h\p-_G_-k LpNUmwVÄwf9fp^$l'6߀/²1f [k8``s5 Swȸ#`aڡ9PuClA-E% D $֕;λ+  C~{!)W!Ĺ\sBVoΕNc{Q<&gC\7Ϻ'_fvIԑl.'ТOIYjr,'ŚH~L0o3y8WSЩή-d"^7ƥ(WT]Eɹd I"M,#da`'^S~Na#Zߧٻh6H]OmC;ȿ[Q4е+v?F6 >̞(5\ZƫBʼYumwV%w'ʌmU叕sB,5$|Ɔ9$o/C>g"b-L: m0"U݋F :Фp+r-wQ\zp%/umFR>d8VS^_ɏQ=ToEM,ۦXڗF6Vz@ڧE?E (Bx%ZJvp|zGhd8 Z\[ݡKW'cWZ xeܛЏVpƂ瑭css- 51b\Nӣ<[>͛¬} Yv4U襦Č"Ue`Z|gc]in Sqfwߙğqs.@s,.F`!\sO3|^OZAD !a Ȥ gԵJrLEn~ڝW Z0iA4(Me$YЇ5.μ{X]DMP?nkP\F EMW\qOYpMN;A?`S 1`B-o^2](hfdžj3ml_ zq66Zȝ-ZVKc] nlUꦋ45}*OCUs"e-+*\MUpwGOOK|$ o~ "HՈ~kr\sdG%W1W`jV?yw5[3҈`#ělqDqaD؄YXH ~6s>Ip!ښ{sOo s'Բ) wmWfvc&55>8. TOh:C8_&(Y;qA=k-_iMkڞ&ؒkWM pg1M.鮋DeS4`@Wy@.BTX\ ׬BŰ'^p)`D{^9yCO|D(I HqgC =t:VqfJm-S>C?LoAt`|55' =UE*:O"^bB_ͶOY+SG˹.ulds[S7BKh^LI:uz :XQi.|՚!J4Oƹu,l:(낫+|C, . z+KT8 FAwL͊9>nIyxz!Yᶰ NJZ;QZ(QKtߔfHch#7-uvC"ƒg¼/1Z)9Q uK$=ߣ7CU5>\ɊH`PWj&ēY1PZԲNuxa:|s  ,8"+yuHy`fY݂\~qqhomrQ1v~`b-z%Gj*}|݆~v"`* >C @FO %4">Wi wo]:xCNyύ񅮽:piC?ϰhIu?սh|zxY.1#-nI%9SUv+uj@WicGѷtc(0k9eBnb|HDFk[7)K%#Z?vTT>ݲhZ U{vz`r/NЛm+&a}drĽ} *9Fʖ =wpJX>g _ T$d/d΅9ӯoJsi*k\ o(gz}O5A0_ldae p]=ҧ )Zx.>h50_ԑ< mYo|Ś(\/T.DctrgQ;L7id\YFz o{aήDG8Q#nZb ܅P ʩlFeZCr?eW)~X$3՜5W8h/S/GΌ/%d4,0b>-.4b_bx 0JU1 X7lj>,1߈6IaJvqr*SuTìBVY˱ˇˬޠGf72+4(c;%8JZǏ xDu0b_=~F"塭"هpJ䇹=gFK@ah_.zp18%1ce۸N$d lP(cq#V2JOO_V >kMzE QZ֙a҆d?+g T4VR\1\͔͗Caۂ$:<]Ih$Gv)C4 o$ٌޫk <3R<`0?h(;gK'@Iu|*qZQEr/,Cmv$jQx?̈́Vh.y0D9ʞTc(r3_m/ [I8k>e!t#џzF'~<Rpg4񗷊))Ӫjmn|lٓ.PG6KȬNL/2ʸ4zJ픊4}3v}z1`L/䦒ꌻ( C3O_uW"30Ff",t&Ո.T*juY=wsxD{Z3m +'j9j4QϞ#M݌j]lTjԪwvLUW=zk~ujL5Fr]ѯ!M/݋G̊4~F %bp!#b 7.߅fyF0o\-5 VwF̮{XlY>yV [HZp1X2 gHk{²Se"0պrvdDׂY0hA$MJ^jޘ<ϡ_7˪lopS#w0OVķ$eJ녰K[C,j|tPNNv56st.> {@9]|7Qq[p5s[pv%ԇ$0!@eRdxǯґe\z93W9"u}d5{ɠzp^C"3fs7B歨'_$V`r4d,|kd|Ed2F$'G/v"mbݼb׌ U䍈0R5 ?F-HCzK|3"sJ} tG]iYSfEN+viA3"_K*[ܻIOR9G-1~ݡx#/\hz3:wnFOB?0\Ia6z3!m]( /+1ȐN'#|d]8i0NE$`ҊxSı7SٯDqhpV qͫ>cHfv%%By+1%a<[4,4ు8-kF*\y/>JE))!QzAE>ô+f^a+lV\[+]q" \.1z7Gzg]),#ۼ<԰C '߂U?ryνUG*\_Wgܩ2M_\{\E랒1;4W^U;8u`B.OO&$:B'x}Mv!H@J4[29 8 QZJͺPĊ?8lE(P YFL칲хY@o_z{'}/_ =tfbi;r[~҈ceHWş ίW48bLv]l>[>3Wn)MQ(O;qV)qRDC]qG',EAvajZ[u:ؑJӿʩ8 q+8PQ m^']+]<^摄C>,SB2k}ӥc}ֶv8X 3fblsj/*J5;rpz62GSƸI??MXijKG: F7c]ʶORmVxߩs>e>+ra)۴<)6<+!m`YݧM.3ȧ5o/²Iy^rslKz(M yq @i|0ϚuLw׼:K"l얁..7SN=&[{W\m^$<Тo~tl,,˅iy1Ypɉ2bV>jc}VuU\wb%F6̈J u:;Eả &{>':jee9*%&vwkq:{Ǐa=r;MMjG 7.P@/Bg#' 0{]Zn/ād{SMLwvdpr{Y-<ۇHX%UלÞ0 KNUQ HuI9m3NUKpkB։]=DÍ^ ǐ$07K_@wE<+|,w2v?/ad?$O΋S&:pʗWv{x@zx8wqn Nzdi-,2i1 \"`L+*m|…;%-^fgG},2a+{C;=;8&%L5W53+p̮dCpb 'j2ߴ%Qt/{/ >2:&>/=ɲ<\~RW7<;3 +xr{ gw+L,_נbߘZzTۺ_QH7}HwoR4ޱ] Zshւ4EUThd9G$LЏ$h~1 vx͌+`w*)(|oe4q5 乻~؈D,)q; F IVBMDh\ly`J#j[P0QWB'eHY{|#վPn$]AuFK-(I<{CeQPwc #Yns9V㍨I~{#*نӆF\. b_BޟUt~PldH6:B׼F[yu8'x"D|f7&CUavR1B,WI;H1rsE[=8v  -. m7KNg*ȜQ8;U$@( alʥYṇ\`ͬvQlx Tn錈b*|ųA#KϑFᘇV#1qF(Vb6f9Wb0tJ{[ѩU~vs[=(_!2#!LhX-kaӨ tγD á@P iJ!q:#am(9!ghคl|f~?W@١{A@xw,DGuZvsx_T&u_ Wԓ _9i9Jpeo:O.F:\^=+WJ*)/YM@x%1'v7m(|jRC [*sc֪wpuFQ9}b=>Jj9ic"Y&ލkIbжJkڞz]<)וּ RUz/YC?{=f\ 5J ׅ)U;hC 狊5,:-9(PreGWz]vKSVѤUGO4D]O$;Y43{4_`ʛ[xkOR("tWGtZ}]L Q8GHmJzr!,Ja0b4P/<X3,;0Rቪv- !qB&híw&vgS4Cr+#bCǠ(AAjPv[\JdaCb4zAp$鄡Ko֕93?x|\"Uo ݟ,9 # @M`f*%D4 ERR7c6=v\KHh _mқO|]ȔkrDo."'- w@)S1@ACd\g+XYO$"8Ų(ñ wx gUw?{8 ڌ(j19Ƥ)g5 g?Źgև B?v$G230q (86<^c Zofţ܆_7sC,)e^12Qp-鄻pXF`)m@ 'BD<:^{39Wo~O&YMm|XY؝P#X9pwJYU x-[$/ywk̀ sܙ+HeȚsRF:/~: ee' "*Dr!QbDKHX26fuF0-ك?sĉZi\yU7@~J ٳI7lD{rZ3˶x;*6sy(i{4qTwO9+73k ĝ4y풔o*NvHs4j022yUW}VI$`\v%o@ q fAX {X|n"~(AXtIq óݳg kYjI!l~{ܬEځGxv2۠?8F(9O 6bER$+LۂGNꝨNjx Gb? 6tLpxXruqxj@7ۢ8ej̈='P 8 CdB6%T{ n@{r0DM4SKG ^V 2 @NH̯"8-KlKx&}Αy@f,#Nai:$Ռ)^ӆcx -HB Ng;v k2umϧ ܈SӀŵ3 MN8A `Pt5 K`Q׹%䄧~A?ׅ UgPfO8)NS): h#D/(ΎnMp'uoi{=gO&mջdͬ9B(v;h[nɢ9k0nqy![N`LnˮpQ9/}lvŒ+`OWFOJMP36b獺PjbhI,IΥqXٹVk2,) Ė/Q$.缢9H]̒S`Cj$3f|M#L aIaI Yط& #MV`7uIM) {D~'1 0r;߯"4\_HO= { wz#]+҂@.;fHWkU"e)r1;FnDE"KtwxQMx?@ұr)[ѭ.|#|w$m!ӜC"Yd g}'Mk¼ HX@MR"E~ݟ8{)qbmSVcAďzzPh[/ijzj܂ٔr4Ťg.k7cc;,RPYะl\KޮrH'[h%~;R M$x1l6LE#PF}5ps3n*\!˴bhx??f2l+-D{X7-K0x*O@$mzAhm5Bq;߰1RSR'Z3 QOXLCi2lD÷*<_IyI- Ori;y<8OE7U옜+o-yLq&C\s8. 7UaߧJ$=xo a^rM24Iwǰ Srȼojɔz`!iv۴SmǙv=E}߆1n}a8*ufVr j9>[I>bz22L5%ҷӖ3pw6`6޶6?tIڜ},e"0vE;R>)T4|‚쟦T=G}j:Iotx,[ܨ(9 צ f\ަ[$&+BS+J@@tU8>.` +: 4.( owdҞ7]7A?J2IAz-);t@5' ,^pSޔL ;so}Ξ&Oɫm Ξ=a0Ak}E<٫v'Q??x̉MS>Uw2BJ"[j"PK;hy3bhp?ͻa^,R I!GWej6wҙ!n-=/>kI@׋yYOnGzs{ܛˇӦH<ϊ:Y-Mr0_wt?#~CWEw;Lk?u0UFG[Ih S'1nL97g)u6ymIwZ,8p[}RaϏp8foccK)}PBONe$f7po}m]LccTc{UWPc>6խ27Yib$ͦۃo|pϡQO~8'rW)7," ]/ҵ:ݔ)Š eytD⵺^R ќw>(Y4~:3Q;R@7+-N w! ;^'m}4j3ua ڴh)U0 .cwG]D;AY.׾|>*lyjl?՗=_s‘>bhJ=Pa4?Gݟ۾M Kc=~ Rw= ᨸ4ӾN_%ܧz L3fSs?ubm&G \ݮO7 zwCbt-t JaHܠ)Ž؎v#^b(Yq]s'M4uc=um_NTxغE'4ݾ@-jaᵑ%{şnsfJi[͜<:>p`93GGEL,Γ>R!kvf!ϫ6:>.x%pޠAǚT5|˱/b5rlp%`;uXcN gFd-? {2$LONg/I=c"d5~h1EoiR $AըTx}W3߷N Λc@~xgƎUasG9\}yz/'u;x54^Hhc5\t_[,j?{gLW||ݭj. (A~4ߛ/u{rzD,zb5:Y~q OCn _8A ӎ?c=@VqZ) &Pl `MD|E w3c,K@׀ZG'Vk5A8^Zxqǭfr`3q8d@WL/\(Y'VK]?e՚p> şo[Y_~Z(twjO2TbeA? iO0}G5ijMx_MՃZ[]!g,^uWs(To>hlPm*^Ɩc`&+;R! HG& ofѥ&"UkwtCٶA찜a5{eÄBrScH5_f6ȅqqdթIo.Nnew7}M]yd8w6~7ej}ORTjp6'ۻ~jt= Q$4-XUb|p0i;k-vCRc W V q-Ǩ k:19 TI:ס<^ncytiS\6xf.JUzw|&d:#3&ɩ AuUOա\'}{g00QzٸC8DȓS_k01׷o`pd[ k6y4||<;McTL[ @$ɱi0p\H0J}`Kc;Dlyh(0#c@XI4'_=,:?fwZK6g9rٴK5F^ V́EN>n38L7a!,SJ r=<m̳BAqRx QͲ%?K Tbj \vP{qΑw~HRpi{Q"ADvd-:$x0+O.1b:ʓe*P8*rxG%͂6o:HȄw灗Ii $֟/񀼍8VR,![bwCRi_pLONָ/H;L?o> "{6Q1^K%&<,zpܾ)PlS5{i;^'rJ&3 ,}䓓R:LBr >{_7݀wG,CHhȟH4uXb DWo`T'T0Ri@twwR4)1v?q|5 }л|+#@~qQ`)r{N6 rAh1(qc"w P~_gpԶ0o7CX/N *?V-P I\_g#F$-N.]F<\ŹYQvKQ(TpB.WfZȌ&XNqWhH2z( M3r_?kԾTtnwkMpL xtkqDE}> d%gOϊgͯ ʞܚ&Om9 H۷Nb;f@x"Pu}X;SG[7bf _iEٗbد ŋ$7Jw{ iy Þ8~żTr3 1ϧ)D}<P{Ò% `;NSr H39"tu"uO${'q):He1! *qtH}m~hQu ~aBK)JWT&5fF/8|fí1}\Jp S}t~iNI.?dL*$) DлGx0!+S.yc$e焋p{hU?/ۆP9@vy6U#Ge )Y.}Y,F۫I>rg9!PݻC?gkDW}Ї1|Q؃c`ށ~jѰ7yi< o(N<W_Ң@9`tsa$fp$8z ȎHG]$FӀ, u5.Cr5X{DꙻF['Nx-N=H5[+N\0lV<Ԝ߷~ep}VPhr`]k^PPK7UA2JrxXV= Yx%px SKrx0@[=-ǀ5g)ʂ,Ђ!~&&1I{2kNP d%،  %*yuƢtsI^͞4)^-q&#kjPawcG g,9xL)$ʯ SB iUp$^9U9̐ksbEpvi sLLyq`/r'9`pk_w,V_qt힃mDN˜+0bnX_{eZQIg2eqv>/JwГD\g'/)lA2^|`Z3 %!`iWGW Ѯ]kؾVn&`5}!B,c~]&.:_' 81]=sqAzi)]r unoYXt0:ߘy ʀ#:c}yaɏ2n`߼F˯wRel!xv%45ȃ A-:^߮EZ/ח.sp'e? 'aw(79t~0a~Ipz uC!ď`:rGm ٙMbY~"/<%WKSH? 6{F%soub;{S,i>roȲzkS23+FD)yXc vHv5P|JA ^1FǦ{@kIy{N o#n=l7wVyGW3 @6lyׄi)1RAf.b =j@b%Fs-(8Β\L{^zXGe{YQVʸ (YP-"p ϱ_6= C/$)?LEraM)|X >gm9N*v%M2IJ) %9Ӂ@N {)AJdLEAAQ{NlלPJ{x%qY WY  1 ߴz+3B*۪|URABW0!uc?:)r0sϱcgDkI ;W2Ot?%6DXao: v0v0H[Vk,*:PZB!m#CaƅMŏ,,jGG8HKTޖ_?E*#zcE霮pt4N{ݷ S b*.,~@nK 1c)9Zpr2[Mp?'o_ Л8h+J,JzU;C«c# 5˰I_\Ke+X*>ZAG&a0~=-S Gn&8'd*#mp@&#lLtbJrWH鎰PwYMJ %0 U5䂞Wvn+OqŁ M&٩"1ɛ2t69,p`'WI<<Г ~/69("p?u&=*aawQscN`!Wul|T|Z$/sƶ7Oxh@vw-Xק0L~ "Ey=`iULA~(^\Ŕ87fnV!)J}!+ Xn{o'NGkN/r A(p)Z:4W<"G|ߩ :{ v(bVM|/{ȵ3鈳6MwC2F2q* 4{A<aOŦBA #_F ܸaMkp >,:?gP~*lC?'vM0t@׫Q:5!6Gzw3/dPsk_}M(һ^,acӃL:/y_пİ)ћ瀨 :`M}ҷb;`ҠWpv$ nl"3۫Q3O {k>c⨚8HĐHԔ9SOhjΐ!HXTQ: %cƤ.w$JaCPk}}`}&K@JrWp+鹘K'OiDK]_`~'Ob~jQU.uԮz? ϴ/Í ͑CuRnϫx2%ƻV!'6mѩ#@[J 4N=nu|[r9s,\v03Yɳs"@fFD"K u+vc8¾(i$ZRKgaRZ}+?ΖcR?3-4X:B֊CYp눁iY -j0j # lj/5~(=p&(뉤H?0%"`F8>72~$)66 ;z"faM]I ۯ@ܷ4ⶉ $Q\_ٽqĎ[L ߞm_+in0'ݐP*"ʧ eCFft$;P񞷍}K~a[Ecp(;M\ ̸΍7|3`]D |,C!7cA@$Ti5U5(.|˭jh>u0Op}5'bZ iJpq\p"2˭i{68qPSGDJd sN6FZ;۲y>BDRaCېN L/_Nzrˡ @#GG-k9^Hq\47N^X+)eA.>>9䛚mKx3-]/,% IaM[;QZG\P@9{lE bxţ8V3']4TDk4Ɖ#y'<5z!Mck5Cs9N>NQ?ֽ rТx6 D+_:IgZۿ$9R2+-q hFЯtw "6!PIeU~$~@r2t!P.dx,1$A@\sFYnoJ Q [މ9Oz+-K)^BqJ6{o~4+3ZzsQVR9U%,76-,}TEKl(m| q:3wcZKu'J*~fUK}iz\/vvPG ,aǟ뫉Xp{U^1sto9fG\ G;דd( nB Q_`{5EēvSr,~McѬ8jx%xis=hTjB<\ҪWQ0%#IȋCjo1[jPW0,jq7I{P4`s(R<%I_p߱ǥ? ?IVSRy2tENQjKI؃x.N54XցȆ:y `ٷK02C3 :v X às+54dMZP_$jj:10iym ү/ r[s|\=Y%#iXFUDQ!F 12Ө:6h}ȻYjz %8` vo&ʔg@Z/@~ʻahH;U66?-/ƳiuX~F0w?C~XTEN `;?{aF2ܠ?D#ax(iz)| ;3(XԀM87.I Ji}ثǞġ00nHoP%<*e =P 0bf*ۓpS\KD|v (T~ϧ\e4[ gQbxԨJa 6UD xL?* __Ho6xBo>7uA*}zV.9@hUoja/OWDH/8yA>% PK4@~UeʕYV.==WKN渼"7(MH5C,?'ڈ!n./ xB}91N]&qdt w &j潡cDƵ+5r.ШS^uhNlҁ/Mʩ+;~4{+ȷhZ5IVPy3u[sT)c'dL\c?F$]E[l$O(gM3Fj+Ǵ{7 _Zd勇{NEČsSqFyϱD ~wD|$e^qRxSxf2k~H4ܖ]iYj0-õ\3R&lHgGD13~~wC5O]`ܺОܜyua,YYU@[8rȢU⬨t#JwPB;rbr%XI d*_,2 'ʊ#5 ܽ KNTtU͂q2<9HXFAZ% f@WC#\F7$dŋq_ly$[muS\ovY2.,/umƄzdbr\HfSӠ^ \őf=ģ'" VA?0L@#*w_D-X{DXI&rh>_;v#;^oEۗx D < x/E[MBRiȦ\s`ޠR^|d]xGSnRr:̔dŊZSD{ W"uo2&&Cd3B͙ v:m-}Ԍ zkΒ'g.|jm(r-cG_}F>|gjڜ'P~~ ^:/W-Ѿ9(ZF "`ũW2a M\wDPGe@Y7H 3vl{Y pǝ:*H4AAfe$v0`=<L'B%nK ::8lHL22@;{ B7G6#Տ~/Tñ!хOӋ/54S5l=/6=[J޼n4VG6g^_c;Ͽo3YGkuT&OUrh+z RrWH}p|VH_"$02RNd"(eKu4#LhdZXfĸ/:\y&WT5[V$B+$yn_2GS~g ^H\I08cZRnEdw3}$kx/b+{=i> > v]Aם'JN鬔&>*z2󍶏w>gk?!86P5N `H#?\zr+UFsueV/Sm葀 d?[12{#S' Z^UA췵ᱣ{'Z/ve?1WdnB4s|Q KL墮\/?8`R$DHd[ #$>@!֭Ġk} Var~Pdn&;}*uHWnjDőmNH{??lObV@jxe#˘a 5!SgmZDLRB$;eAb,b85gyL 袼K+fz ^`qHd :Ӭ 1t872yA;-Y핪>}4l!LP%oN\l }ӷ&ZC1%pe +|$`GFsuNJ,z!կ,ˍ+ {'|*qx 7דnDh hMҴRc@,Npآjߺl|7j9a9.*\H4NH2(GR^r%yCN-y<mLƝW9~xZoc5tݢ8\qiu (T}iٕB=t؈5~aĻ8I1mgb$48X/iZUPLd1sR Ry3D̛|\3< ?xk8T#JVjAߖ+$A#VG.ɰ°<~LD lׄo'H%f%NǦHoqz]Ֆzk>G,(̴koHa[ʼn42@O~t,'6P =(گgj&rL|"V ߎit|c>yC^U.' ,/?T?r5q@0^D 7["4-QDgX5R_PR^. X]b.Nj陪6ZS; e~b&z)Fy@$m>7o DXaF?XYNqt$S} @3D#M)%\~gza  "GSO.?"۠]Y|X{7Vw'"I ҁhh-V`2- ۠굇zui cKK@Oͱn ͂mm~e=૪ AL^ z=F;e0{)zw=LlԏN o\6\H,1egς[@)l10ccDJzg"?"Ǐɓ4݂LM(/=}OVnr.߿`DNhe3< TmmBVv ]J6UmfFUV[BMhMfHqLwS]~KBtL t \4_-;:lzxqqƠaPE8uBzѬrdڢk:2Ũ*0Te.ů)G_Esl|(~z 9ä७4 G.VֶD ml'vO Wq5k-vۊ񧛤~8 .hvf^KsQ~§ʨ5+#e~Z?~mT?c݀h[-\򮗋x\Ȃ7?Riݔ?\"FtԞKC,>Ŭ)rOӱ.rӛpO1zAR?uJHv6y#>WwDM2aMӨ%ݰæ?Y5]伒kcxf=@bp6h̋XėkVI5>99Y\kwRs1ݧ#cT|De}['W[\6"0jM,eEDEbX$6۾{|+ ܴT2"1-~G2)(6 bQ\^f|ޤ~t\ʸ|_pͥ2葈tG Z&w4=!k'K$itx;pREwzeؐK0#UOf$v5'NJ+VQKAvz/aLTRo+$M8ŋsu}.}.+y\!~bjC(8d[?|iE}rgd0+\QW5@^k}l/ zm"bdCkZŔ]r)0[/Cv,|&*1~>=_뚈Vd__漴ޝd1oO\-Ȅ"#-Uk!R` ߛ*'!̂QR(Y=?-"-u bיe<.7hუ J_ea*r]Kl|TYUy^E)կ#i,uIz)S@Ӕp#cF|N^;cХvuSpٺAzJ,pׅ gPp|#OgeJP4}`:@2pжn>On!{_yp &ep_ηb8G+!J;(}m/k{L̟q"erZ/YR@^a+dʏ$`x4yz3S$ 2ˬ$Kc؉#Cl9˕MO/d|4`6"I)Rl^Y"&pL L;H +'?7\&~gv.,&<980uǑIRmǽ@ $umDԦ{e'snرND3%]^^ܮ2@;,ա^<Y= oȺ%옻޷V G&gĞmyo2B3YoGwPcG AwϹ63p#9|YrIxnyeֵ)O#(869dY?D.yU2 )p?n#.Dͷ ZosD"qGc竭dn/< FɧUr=N_|h7WN <`f@׿}- э~K@#Y~Ѡ˯n~:$'\P덫YA֔`PAyCw,Pg&}lXYƅٷeF.twkjLyMu#6qDg7uys/a_K+xwjlI9lGDsg bb f ?b>::$(C!Zskx: >a)N!H#!g2H%YLM7p*$TeA׷7qta<'v՜$qurݿ%pnؔ<љx}r@TeID6D,Y~zS/pA;ߖ[@2;e ^Bmvϥauڲd{TYCP.I/OVC2xDN t$RI!_+8HWLi&9MIj2 "2Tf4 ޳'C0d=&3,(H'b|Ɋ.6ν3a5ez]ſozVEnyHcE%y@z?ƻa# y{9vEVz+CA:ϤKXgK8[}u6{eE?h"w]m5SGz>Yk{a l=6G (0nP@V\]T_y-YYt^cxywGkf^-/-k9 SޮӺj EDғU/#zOjŶ\3~*#sӈ},77@ZWmM:,iu9L֙}SRt=?qN&T*^x(~U/1] l-9Qgb*+ޗ>wKDj^d}[rUQ wy#0pθ/j'Dxy7ܤhWֻ<|b}RD/]mGWɖY,33[[,ᬟ(0oquͱy.dyp Fyl 2ź*?xhs4.+?ʒŹrڮRftڱ+ejboV_04KߜJ&~{6_&\ο, /Bҝ^Sli`>kR~0)I.?s̲x@&KW aJD]zU 7+El4L̤W(i*`W`ʪdRjL\wdH#4i^dqu$D\%="?t̼ŅA^h;n+,w"SU-GiTHyЦ\a1dx+a U/?n f2De,lQ!.1~OH520D2@X@f n_s.Z/Hk/VEy|g?/dfO68^]Eɶ'['?!+vL<PAw;Lu*>+;"+܉:rf29iU';Q/.;@^i]m"So0xwRydvP I#/=D;&s#['XcXmN*MPg."9F -p0|;]$rڽ%Wj-r?L|ZC:rFYw=O .BghϸVtͽ2o|yҴ݃7\"E(XՓQyEn rGNJ(ы\ҏY'B0Z8liǺ^#@׮) *,^ZaȺUƦ vc`g Jһ)^֨=Xj0}@tvsQ尭\@}yY~0bKL%ª })mvO}XeZؔQw _\O}Ǖ! 1S-x :AU?ҡw:$Ό GK/xxff HD1w7#}1XU%g ]stgd;~<7|_<(E˴ /⚞i ѣ޼nkZl Bv[Ȧ}A ؉g?{5`?v 4m41ٺsWoTI)KU(LșR=lC\q1 ߼YVpPEt$KyDI4Й%=d~C+P|yq5噜NJ7 > MR5IjeݽI_1)}.5&^VMo82ذbɷ#4FΑN\IŎE&QV_&(_%1)NQw ͺ#$x]aZ1ZYфY^A"[Za0韤%ao*3^@ ˄Rz^pV*$7^`ۍXQLl=^pN^Pe6{sw\҂}$lsZ7Y$MEOݦPn.=_}禁(ٴ#C(jB.KOWL:'D摞u+,1ہ>|֌-<֤c^Ypkڦ>Ђc}/dy Hj [x5k-_48-6Y1$VUџkeO-Y`ح4#DVBđH"Y o /bA*Vx2q'TjqJ=G$GG^prT8Ud.JTKZÏ]P|n~!9^sIҡ!",ɥuE:!ž,YC^@+Bwuܱ k peFiyggH^O2$NjfC56T$z.D:/76pURQ䴄 9g$ۤnJ$:g{-ھ\"9̈9wNzQ;2(Qं8`pǔUWg}$^ώ n[|zs}i1n1u PCS"Űp[d~+DMbnn[-/1ўo_N^(sk% D((&7nK+e<͎Z KXj&ʪ'`Uoއ ({;w Bt$#%#CS]*=6):B;[8 vz!=BdBUa^2+dCK\֡AN'@ ݏH+[yoBp5\UקhR4:q>Cv1ʣ?߈{(X,S :d# nn*?8bÏ@Me6ѤeBӐ@D_.#_q|,c4rLtzoD||kVs/pS8)B]3XU E_0%}۹Z8u7-$\.X#!GMaf;/#9AQWAa>9TswM!9# +CqpCB R|ʴ#N|]ݿV ᦪ:L+jČ)#g+V3`d< ĺ/sݼje8t9@)<"L*8Ci,\`R^xS)evrh:3 1G'?k}LĉJS%{- *R_ uu^V_o.29Y81>?D'WdX܇{!Yvշ?{QnkTrREG.JhB ~Y\8e`}w= WKҖ,Ds >'tMaeA].zf\cjp@f(|TP*J s"+c']8eq{k]ܫ:PoؑdY>.K kk1+= K}9$oA⶜^;CH¹\rʀh ?bN p Kɷdx6lMU_}R&~_=W@#t CӃa< K/iX. tu׫>_+,+R^iHdW 0õW%+Jp1 fB%QYo-RM>k.C"8W0\IG}M*V!R2qF}W..~}yſW\ضgWm="0,P"rR9ZbMzjwSY2䲔> b@0h ۷tiNaXb&aWOWxWw289zfQYT/sȩ X˧&)ahჄ ͩ?KsX;#HdpP`)h ӿX;DZ qd3֛Wlr-AM0Oeås7? f e^u[3}/VN$5GaᛌҼae\"T5]&R:/'Yb|K3 A%-Eelۯay|6!mA\H|Օi=䙺($M;NROV ĉl GNVͷEr:!nŠK:Pdv zƏu_U~ܝ'<ƪiC D)G^slܞ%oœB!/r!,\oçq@X#'(B2癐V1L(i+D{ōk5|S7>64UתhڭߎȞ(qKﳰ;+[tN$ݘz_o>dˡyoSiގɠdx(C|иsd3 S|:IX;hi"J}!Uq}$L{\a9ѩQU\9|cySwq- Nh7T ULsj>U=lqB*iYDøܻQ.ߋm&0Вnrߗj8m[-_qmyكj9/[R .7poἡ…rh(*KS7U6כ tc.`xYxwQn|)En-3m=FΦ\n| sviܩņn ESڋRb&=9J隡i=6YW7]݂Ocoa EA'È7dI=(%Yh`Za"˒y|skIi2r!tTP҄ #ΟW!z ꜳ9ՒACO?TN gSt:7i?LƲLk"5W|TR!B_joH!"P8w~v$ӷqQw\n/Q=q>KSߝrc\xҶny3_Wy~;>sr犱4a: ̕b!q*cr3W}\O-]X.8poLG.EtD=jHW3R#5Lv(.EK7F+I]{kXT}v.NhF.pgpizwZv&|}Яk鳽ס)4*V3c j{{q.)%SM\@ǧZV4tٞ Bcs)]QA?=EKm >С`i3PSr=2/d)o~OӠsC{bVz?-d7n-".Wpckw-&i73)d߲AtQRXVG9UvxE^w%{uY촘{h'|!~~= ÍcxVz=}3dYBe&} NXd*?'>dz`0]P5$=ݭbn{t0]u+wl*_MiPt{ 6NHNS?=cQYdRʷ|dWټ,bI(dgp ߒ s>V8"ޢGia'lSL灉}4A}<b"1,D+ ?#tֵmFx"ia.s`kq<-$ Kp8Q8B?yRǾ PuOGC% c[~(0c6>Kg*ÓdMm%չ´[13+sro¥,^%e@ޔC}'5\oCeyxH\T“R30Qӊ aLÒ$nao䨲l Vwg}3΃@7Z! $߈Ț{̖U+3I>}'d Lrx4v KM&!C"y# ͛G,^tz4c]³3qmΡf헻P:bKY#INlȇb\+vrkw緍9ސu)c*Xx dWc O !Nx"+.C'zG @GCD?r%*Uh8°,@YXSg^w4HnF$W$`E(n#<{(-{V@TZL25)J@3pf0W{JuwGE=O8d;qV&]9}#}}LZ)?_KsG?$Y%pR1>2?2q8g/&ϕ[=({Gkd LC7FT똴FFd"zܰ:\5v' vs^\Nc70Aw=vIW/p4Zy-X*i*+g K* G5 {'R[J֣'/,E_ @ o!y`y#읛߼;Ee5-~ӍVYKwF.7=u 9<қ02M0iqӔ p{ArcI,VvvfَJf&Fw ӶuY4n B&] $XiU^0TuKaYd,`̠|LIWޔwzf|9ީD1#e h4AḂ?2 ]5&A<-!h)VI0%&҂ﲧų@IS* w3@ 4RSK9y< n$HO%.lKk٘`K9| Y&AlwvЭڦvC4vZrnm:17'7:mcN5Sg.ǁH__\!c nLYPcыV0DcCIe_g>gxLg|41'T/щ J}bb/ջHF'x5V"aoިD/n= $')7i$\o348S"oG2ddBc}2<(a[M$=-XBf!|@ ')%037lwEF@GZr˼~^+TM J05繏|Cσ@q M2(gHW@Ѹ~ o B\4;ݷ+rH({ >CE5<~K-ɳPb!,'[KȜLOx嫺LmuE?_,u@墲;>GE=4-dYT߆ E4xJywi.'*)8|g\%iwe|)^ŵ(Y!Xgw̫uWQߵ2^V}\a;/sd6aqKd݇u/ԃX VNA#1Kk^HEфtŎC)g$ 'G)s+؃6̣UʄHCQX6Ouٻ03kKo7MvazjR0T,;3.Lɠg0>jEyDR`sHxGX}c=o3˼vS%fwjvrЯ T 5k1_moQl/#.m&! ;|lmi"E”Tvܐ^BfR@]N ABg;Gx[SOU4 M!/8f_r53Ρ_Ų<M`(E` (xEH+=jzU[o) 'Krg7E8G2 __әޙbHIyF y|*`R2>=#Lbhִof@c gcI3oS2S5Cbp3~S ݬ)>nO&raw*@1s ^4v; " ^Tyt^G8;*F\JIn:lpplֿ \ cPdu9jآ]r5!F}X"Bs~}z#)l$TƍKoΘ)c2ŧhUIS̥ci6'0zir8!+P;-y_&Q>${]c ?Bgcj  G*&bDY+ Ӊy^GO:EK(g%-$m.l4Gu%3j, N(.3p 5仲+TE "fW*3 C Sut$w+F@| :QYҍێ8"'᭄ ,U\ATrg6p l7EH29[\2Hk~;k.#J@0gq)WP;pb0f)[[VYݴ1#.$cI:. ehK(+s2#b]sGUU%Q~]cxI/9*{0~?%qw+_]>]'xXw=3Uq`EC{=䟼ױIwU1q=^9':T;ɋ֬_nܰ߿P\qC`3#GVP(/o9&E}@@F׌2X&' :ل>{^Y+GO) zF4{A ΑWxk"_2L f2gRzDf @qh+C`BY]`mq[Bl81RUmr`R\CV]>ė]&ezhl,Q)je%w|k )nXI+H ɺ=c MR!TB8?ѕ0%1h+C!r`R+_̰S~'d Bt Nv:&cR`Дwv#Ώn=q=zlr-"#V֯3C m0K-6Ou+bQJܧxX1.X8_9>XM!{Q_pC\+751\8KRҾ9a8wrט;pca ^cOolɎץgPM*t2ʑ^{+,d= 0\]ij'Z ߊ* apmW/^}RT^ayF A!dk,I .4gGBY.mm{߆! -SXZ H8DK> -c !7umhZj$c9ݙ's/]\@,v8E$?؛$$X6IV)p_QMGZ%7JX_ ;$v~J $W`PoD]V~7֠\sv&NfDYwsUR(C(뺬 <ONw: BG&(0*Dz C"}d~wYۯ?n􌕨 dy`SYPGZb l&3jV,[W gUPAopU3_gpu"He2e_ny;Lrt{J'07rcw҄w[SD7@ŚFhcx(7?b?H>ODg]kPNmQ5 pxd9^޻ԼJφ7f 'gǛhl+(Q^ʞP֐tbyXӨ0H1/FYAćTnX,F\ͧT6ͱ+Oު YrąO$Xd3w'F 8C탈o%#\M˫bwN^i|Y7wVȝ+#21ɠ=Mb LVcŐEOŒ]?q>a ȅv9) FJEװ BmJd@ZU\Q|1LA#e/gYc}[O8}*{XQ*;/o"%)ņs a؋#\=эUi ou͉c">?؊/ 8OQ~e a=4dZ_YH}z7+} ޽!NO5 >i$t&)O&ϛvBno+9_޲Zx5^s׽r詋P9|TE.aqEC-f;mܼn(޴TY{i9ϽDW:DitIv٥é%)*< &N? ]="af6o+3c NA k^#  prZ}uTc[EXi0`y9~J,]ى&sx$"ԥĭ 3q~^tmzתn%KǦnlDSF_h!KJqI3Ç3H0Еl)p '"6cur~'rvBF-##4q _᩼v.ZiT#M3|ev>.=߯Xr'A`(2X;y`K q'_~wf  78&pX:ECs+[n}͐)#/q؁gT']CGwpE? `R4݊a-,h|jQUAozqzW w)8rs> Idiph\QQ%Y"rxkq46c~5! dB-rd8#C{ygTHH4qew>+OXVϗ$RymJ$!Xr]?+y샫`.#cBeL1*6OKNO+RWR.uDϣ)oCKBf3jI;,Mwb9 $SHWm|@;xoుdf)gWdFiY~9Cq*N 2U9&^XO"bPҊ>ṫ4H{~oTo 8*sLCgG}09vR4s1IpHz<`ʣ"ZN =u.Y l#b*53!cQi`WfjS22 ~ϙeYq J cBuU *%En<̎'\"sCrXtѨ鎥ԾBԍ||hrNÊ9CzXf "k AqmT+MjmxkXd #T4Eu'nKLz=}(e>})p Eӹ|qKIKM6S+wl]1ucQljCI;n孎ڹZGGvGCWWuq# |J=DvNCoY?ro.ŎjOci> l]Ngw~&f9[ɝagn;򴹓mǟ;11X bR 3iC|z1YO)H rٟ7{&7_Ƚljj4hnOvo_">\Ow" Tq8$<Њp8a7גqdb TP^Sy_Fv{JOOs4'u$)V|p]+ a5>|y1ʦ߿t{L%+E톑;*;r^Cm0 #NO*MP5}k鸫3Qi4$qJa.qg{Y㎘Bnj@s#)/"q;I|Yߢj6QUE)a*:L\Cϓh\\Tbie]L֧4Ӭ>B!dc$N}[c0Es_ 5&'R9zn6vdfyqN)jw íkaq1ۙp{%-&󣵃l{u24~29B6%:27~yH=Rп {σgli7.v^Lj'ԓs%J-iHPȣJտbs kb_[s Up@ܰ]nc^*aQi%B{#N3Ȋz׻.3Q 7KI|D`V<&Mrܑ0~`o=7j^s5|x^OAH=^zwج_$&ovip+.t(V^  L;&n#[H=t!6,X 0H$f!.x{A"y_h  MA*hM ؆p|܌< X\xZ݇}t)+q!4z;]AtTw UtGkٓ42x1gA=wxNjBG 7E4ژ<^5/q\?qZ)$U0~1^Vk*fƺBuLsG}[:T'M&ՊO*&JO[:S'1 }{;[WٞvaI[5v˖EMN,Nۿc4%&!E_]ո͓: m4ѝz6FaD~5T}%7ձBn8 Kly6#&ˎ ߋ40UgڬYqegU0bb{Eir8dnf>,/n2 R%FW%5wiӀ-:XYt$s4w\!geU>Ϯ`7C7. nBƄȱz]&6qZ: Mezȗq%Yv0,Q0 3*FQ7abbP78BS v_Q`$)$AP&ؚ׳d&Փ&nsZ>,X19uDu#[;JmÎg?M,];)WbWѼy g f|t$0nk&"df"cm 2c5'ׅEwNeXU?MS"xLKx<vݦk *X̧Uxazsz7tX=Xg0e箽Q[4 6Ug`)}I;3/+5 "5 -οȢ@EZuCގOX>KAR݋ VwL̙-W.4.4  e,*FcԻ/XSsW<$QpOviP UXqO-Oý lUDnԖc⺇18ms,ݩə\DE[ d`! \lxߨbDzȸ`D: / U;?F'p9/\}@} I+ꤞ T7$6.|(L6j #TZtDҿ%SV͇ey00O34G" ͅ`=D ?_|ܼl+4XK.T,c!k+gxZ~Ukg*kwHl+3&+>2?`>?zM%}e8(3+]tWn(K2:De5 SḛQD'|It`O[_0h֤>]3ߦn  v3IʖQㆰae?KW8,Ws;)JHǟ@K[ ,MG,cqsp)z!JބlEl~O]H7OMAhּc>S*iCb f\'1z)ACM}"H$T[<Fyy,8+BxiEO0W Bl_MG8lC@YP2g*ɓ-gt&'R;S50Bv$R6.S}6[p*{ |E"2T]uwZQ2XӉxJZctKcñoFW _;z8r}kvj bU!3Jh48sT1I+v,;ሥ)mϕ2wF rpQDΤ@zvN )Jp#F5Xw8:<[Ks\SQD$ߴñSvƳeϜ)>vwtz#A*ԹW oVlh-5&!%{q朸{`d\F*1frC^TIGtCv^Qn#Iw8VѾq%n/:cI^c'oAk9z,/ai,N5A (GCo/[‹' jTVi5=^>O%6+ zF HSov?&r@8& @W$PGo iaȯ8֨fpTЌC ;s|L)N?O1Vշ 1  )@#SHXda9p\`O;pœP]i+@G 2(ZP'Y-^_&f2?pՒm(PN? e3w[4;P>J q]q8ԿYQ‡@BE!pAU5YLYG:$MY^MCg88T3Y^rB C/FvSs\UdM ^>:x=u UU%K{/#~8V%HtՊ- 1#~ X0= :0gv*+ qݸ2he}v/R0R׳CTŝtġA0oS&hAǣ[ꋧ!9W ߸mfOAߢE4䫀Ԓ&KJ.׷lm+rIƿ"`@UdSxByz\vtUx׬ҪZ1zc~qQ5C=Q ^M4S,CX'qП( ggAJ8ꃆVt*,؏e$3 M>|x"(p+0E"9$,I8 4`jS }'+/m*6iw^C~ٱ>6!CJ:fwrGdP$l3, AN6vhgD7l5bd.$Y]q^t/C8/]ޕ7tum^U*Y2z) vp u>g)1 ]M3:Cwaf[M4e*-+HԲ?8 !~rΧ%ogEJȿfG]٧օ0*񼷵WN}WpE2'?H+ D%jfrج"eJDjxބ [oă:$eq/>~dN=~Uj#;n[.~+t<ަwghV)ӛȥ&td|y+do~@W1IoTkLF̢QvPQcy(,O(ds)d+J."@2 7Sb&ZeEtRiG-l>3u.mL(5wC"`S_Ml-㑻Swus|tkR-'Tζ0tOQ-;w[x&a“*)ii%S+Tofޒea o{̙1 +l<.\m֣.Y: )jd[Pǫ;\1S&5f\jΗF< Q1R@ku'HBM+'N &K$ B f )Hd(0`_\Hs39Q 94 ߬{Y!P%ZB" Fb `OPЛ`,k#d5@?79α$O~}Ţ-[L~"AdK"a JYP'Ų}=T ېtO qjiQm͋NuP/rvM 6? }E-6US`Aj4kF,k ~^ܸInw1k,3hʚs<)}ؠ*'EU0.r1XCW{`K8^>`^\M}V\-J ՃO{16LJ&VhH_j0<3>})uT R >tVHTEmNq avo / ptNPk8CG R 60!~0;`Jsб%rt!2ZH1`JP&g!%V1n+moO OK)^oh0h$c콖זh_Q;fa$@}E 3sҫ:΍cZm(sf9FhB5|ը&eb ;,U4/7@\2yx5gTlj GYM8yƦso*;h?hC?BʊzeeѼiT6wL;*˵]ծtR;o"qP֙n=)Uu4 XwaK9#aiD:ɴVEâIδ(~Jkl`g?hw_ C,t%/1n.(/\r\W= ^,f,X_UU ] !Ǣg| ۂ{,S^JE=Nܚ㭗@B9I(Gh7YBPStj|H;7iZ[ _#<[-٠8p<:W:DV3V^y$C -$sԀcwxؘ4/ _/.#'Ca)m/`m%mKbo o"+.{# /1_0aTOEņ/X*ErXF+JK~& *2H((Iֳʙ˦l#f3^x.8&MFGY-slw6U:^<ٛ9-_4-.,|a\EiJ@pZ#Ze<\Uz4Ȟ+_hm$諧5,w`,K(>aH,$\Q?I]d/nk1uI,Dngmj 3oZ@A.Np^Ge> \cGKC.ćVf-l#dYluDix]bpY'CY]s+Xnn,6u9ZXd{zC Ps'zFV 7u{d QX]w;'@CQnx+?8}AƟ7ՂrvJwhCmɟ`%ȹ@2^8VØa_"-!;JQ%+8O [DAv!ځYc=>a.I$,'8Q C2^R+ ĝWZ7@ZO `=ыFBV7+6't𿠼8 ꘔ,WHf*˔%YN(H2!Ջvho-߀{$'dݡ!!̕^ܗ\c`kyw[ =%0n%* >~BRnst5Hh ygaMEQ.f!i3}[ԙw5W& %:TԬ@OkpblaX!/yO Y):$Gf`^̈́;=@ܐ;){/Łe$gR6c%B2DAFh ,,iVp%boƽjY-JG 7Ʈgk4Rg)ֿdbJ^WH8ZN,TB,.N=h o>dO1uCQLE7=xs_Z{ZPgrDf̤4Cf)RjCߟʢr}FA'M$ Kzom76gvAMI WBSR*,lIb_>sŌ2>!)KIAtd$iF%LNJT̒W,AgWgTNcMr~Gyfyv?FI I1`F"O&tnMzk|ؗHQF2>>+9+Mw% _ە[K3&Y,H~M:ȑQy)llG\M9]݀_/~ Y-K?B]l#ӹQx-slia>~I[#q(]zT݉6Jm\Oޕ Z"#[k 4&_f_& y}.Pخ9gɘ3{t,XqQھl8+ |FC놭7*$ǠTQ~;LCF<)$^)㸂iE@7X_Sͤ{S6Mq,X [rH*/K1ϰ-ٝS- ;-q ]BIp4f78:sEM k#.)d@LJ1A@ D  qKDԗ電ngOVhԅ|CgH$,g~8]ye徂pT.~tSpエ_r/Y,Q.f4 b)%ʪ0 Qުv߳f ("H RO#YoI36̬4ne}In/r3}5(C8l0.reUn㖂|9ՒϷiryiiQl82L.i:p[`Y> ]]ݫxmshjDN> *'6i3iԆzplKjAs&_ʹ θWڿ絥|NQy9 >3NfޓALNiz0kT~8ZHNv9v7E))ky<~ISjx7% tڕҝ+ΑqlmKS!BJw?[|"' )Phs|$e`[JX:RPkfpql[f!o$U6kcņ8^ֵLxQK$/}13;fnL#ǖ1өJ'5݃w8CL@_GGB 47y*Xrf=\s||qWwW!hQj¼tJX!\@\یxI"XxZ3&t]2 qwBxbMQaGţ"l#!"Gcb[Ip,} !lۓS ⼉Qm b|&-XDH(ү~+AY hL!LO5l) ^AC@1aPaD{@ nC"bp/C$EVʎa›Ohc`$I<^k==/N/Nz@=L 8"rd!` l <.+`3&6X6iuk!2IpJbqdrSG*.TȒb%,T43s*N=<-(Vz/SlǓ$M}oKr -Y sP0%Ƨ2(?E/q__䰮B1Ot&ROC]]zQOq;o,l:,.60 dw~,]2|)ȴ\ \#3g[,! Q"Pł@ɩǃC1e/rLšGgݑ˶ydBC̍3;jT'Ya;xٌD>Z Ѥt\~E R(o{tgB&uv]!;$+Ž%_WkJ)zہBG@d+2iɭia|Tld5Jt!'8*ǔuk T3Xre%n}czJh0w8g@3,y+>u}~x?ѳo;ʐ`>qqXBEj^2dNL`$AQ$P-2%Vb [3SE<pxOskllls}Q>[^0msZ#Z^t|nqg*MZakFdjik/8B~%̹32$[s}EX5 yFfp~c2oo9$D3)w,^2se'_-y{wgm$<#utz4˫ǺŽB9Mڄۦ?"*νxxzK0/$z<)xcl T?>+sƐsn6/,5N 2E#rѮNny՘t% }U;T Gc&1ȏ IѴI3S)g>_MU9 唻x#?^'k MjWQUO|xk(:o e 8ıf`,mcm.M :"}DnEԁxdՕDoP 2K#˳1Pˀ 9ٟ tB_,f^\1Chf_/kPfAub@{g Í-ty˔#R4%P ,|Wz0R_5o{TK5^.Y`>썏 {2|xDbeφNX 9Eeet&"T3ENaM`zM`2I#oyqb>щΕ4ֿfu3nŰ%,<_ slDҗXz9 3ک@,=V)/\F";-.xM6}f *$pc韨)Th~sFUwDb x d7FT0/WTRPiI tBhjX@r$h`x/0◥XZx( %x޽;{O5KSz&]YL$-d'9dP,e\*& o$<g-mk },LqL) Nfyt5ḧ́-Sd1|ȏnNG{x #ku״_uc 5^2T]{n?"=-6.$PZܧ0a9 >9cJS Siho#'K8[>U^LOpƲ^eW.Zk~v'qmb?=Qv:^xlW1_Hӄ+8:IgLfttΣ?Gxe8mv,*Č*Nf.\Ƞ.u\y2]`M4;kt]b4,J]No=K*<2H0zX>8?:^<{r+\5A G5lK Mx#*IbR2G3)%0,Ybg-b9'4@.O~PyJ`K M+tʤ1[t{M-ߛ;7W.:%|[Rm Jl~)3a5}Lo3L e\X *sAHO~Wp/"=5?zx ?]>8̟9_)HSA*I3]OouNwtQ~쨽=I"T'}_7+& uxޅ@hp6^ˏ_Nr~*O3"u")'OY]^:UHc&a*[k񈳀d8a aQM) %%Gx͙F1Q /Htk83 ʟ$1oVa}e-O%(u3~2Oo7zzv=Sne)[TЕBI4#gU<<]`]Pd(ga(GFQg9e"[eYX9@5 LCbvr$E~;>٢s-%i? TS2'ޔ[e!7f ao`vhU5b@ZtX|J<1њbx=,E]?iw$KU)%Am-?$L31)lEGKqx1Uu:(h#kIQ,-?]dMDrob' %zykLľeB% n 6 op0Mb^ _{ԋ'AWK O E](D9A9M%=NS=3(q4p'α=<.hxb5IT9FmɱjDcK&K|-\XEQٯq;mwP:ͅ﷣pb^䭭اz6i0<4Njê;IPծ;VUB3+q7v6N~z{%3ldcUٌej{HUQbDo@ w ȥ%İdՕ16xP6A aw+b\rMh4kiS9ǶVb׆-H4# cePHP0E-z7]tFwmt֚E:ifJWvkBd^㞾*PJ &| `etx׸R3|W~jz $1 ۯQ빻n mۚH8܌g`Py]v;OjEM[q Ho/&˴#sW3!7PCs 79X;źi&+j%v +䇊5̃gG<:jd״+ ˋ9c p-!h?H)gwQM{^aiӹIXǍMC[y)h DRpEtR~_f}0WQn3y`HDA %X%@ƑC+gp~սz+#I(L{i>c43i&(\!R('像Xlv^'=腒pl c!{M& \P+*8T?A@$qw6 (hp[v(UJT 4R&i%O3^rCrx#gΥ z>XBSعu'/~)}՜ ,4ZO[eꌁR!$qj=#֓6;A@TNP\]Z]-˕ޞ<<9a =Y$yZH/zyiHI$K׷y9Y: a&TsQ[35ƻ䷫&ۃ ʻs Bl{BwwWT9=\$9ύVHZN5N$ on|L6wҒCUp2QZE"AA#9%KR*bmM Dz\DW75CWazaf,B3rQy4;<*/8hV=6u[eΈg?^XIgJ֔35?1^M#2þ=;a;q\wy |aK2~<ﰤ<57SxU/(,[ S>hU>3 aR"-VB!#Ev46Fa !ig(O5g'eL4(E }|Cnͧ\[dw}d1.>R啼?R wee$[K?H[6\^oyXCZ˜`dT DD~"[=GX|˦KvÛqD|8 E`~oJvqIzCYlkc@l= v};k6ddğz5v.]i۩mH1.I_?8ꈿ ċJ?K|&2t9$&E0L7f&V=W4>qy_CI3<*ЍgD9E S aƢvknܫ?jpkm5W?e3LOFⶭOmbvg?)xR%<Qzcէ1FK;6:ku8'CSh}=Ooưvr% {GPNW]&k]E.:X1&Q:Vyֿ;Oض6t"5i=Znk{ns6i}oWWSNH2ض wa"~Ew]'M!Ҥ8˞5mLBTܔAPl^Q9r_X`ISb!IS(EHJݒz>Bt)k0Lx`v )aGQ [=8ܞP9q=t{8]D5?F6cκR\&~3:fJ5nd<d sW픿ppwC'=f~+R"7+5OlYxJVO|ǖϧ.TYcA_Z2NdAˀJg,%p3YVd\kL|hTp uPpZao) cԊ 9bSަ*{>nps&#B}zj.~ =a܅2OGuak‘UHr'뽋^?:K&Sc.1nky.}a'(~~vж`tTN[^lr,NzNi{ psG/l@hs>4%]\x*lH*t01"L7ղ7Ͼ(Xj\1$K|R_J??)D/*?j=SeXD$`gd8_}rO.uXQvI&X5YWim1ő,r%yN¶+#~"^^2~˃K/fr/i'oQr3&f{QK%a?:!Ԛ9]RL@ș(&;]-"3sO{zM_5qLO "Th+き+ӊ:U6*\@z)v `GQBs|:#W>hUySg@ZWCO_qTVdd~['+&[1Us6eL)VŪƮ JvFPR2(]PFKT)GxLa鶠)J_pJ^`>g\=_]^|O* :pk&r՛+HW~ ,`L0l̰qݠ9M-M۪z/U(›QbmZYha jd}һ1׏ >jlg *(s91/&m;/KD[!(RgfKx$|v&j{!rS;}mޥY-ng43Gas*N7i&[L2 wpA,Fv2)h妨قT!h!>iq@>植%}0I% &%*?򷟸OJx8,˳<-.oS!y૶dCiT+rNk>%߶Ǐը~ws;V>-u垿,3y6ܥ[ϕ"hAlA}ATMRwWk'FOc/?R hSZ{@yݘ|cM5=JsM^ pJElXR㼩tBzΜ82]ū6W*Ҙ qwݢ8jqֆ=|Hf!U@!G:cF:R( a!Qc\3AB{GZb,[B6C(#ܵXOKEUryl(*+oSCSwQYݞMyO4H:XVf,*;^wkxmѽϱ:^h^W钙Jet!jM,TJG?y$8Q$l#'rW)™- * @S^p 2t]Bd?:zNr*k!l>%E DtA[P$j'inX퓘k8ľ9GDG'&X܆XVGͻCV2 q%;H2躐X<>=nkq0=-|BYHy^~Wo)Sߟa*~`A|ȫ]hhYY^gXAUF xf|v\KU_n|^4M1T+<24׊b|8#Qsi 'g9 _xkčEš]T4ExUj^?7|x{|ܔ#u&c$`9fsHP_x-ӡ+vHH_j.-4t!cϹj./*6!vH~|josD(@K7 KBܝvlIy$)J3: D 3!eo$"D_jK{ηP)rVdphdƔT&Y*m-ʀbNKi_Ubnfw9W5yM=5_>2MEY{Mlk1ߗ\.L1BB|&%7*-wVV#U:,%y m5=F%Hf_Mqoo Ԫzڮc*bc: 2Jir6ٲ% >ekkݝitxH$so{PWi{eű[U잳3ME @ӐE  )]s̝YY?i9tcS\ a=k.5U'ʔSv1I,1ʥ09Zr9Y$ >0m8 I?V;?n)+rHC{)Ci_ɻK\w Fh񉑋Q ⡉5? i%0/fLurYlSxe뫘W:"G 2bsD~Rq н#*+R(!IQe ׎|8KKU9tA~L 5QD"?2!\Yd?w<_6]օ6~3F,^qDsr$q^ 2Y0wٶ[W EIc$ݾ3>ڵd V(9䧹Rd8 ?RKZzO{՚Mf{4{.wvMX"vcc=g)12~ىhbZSĒΓȽ)sҢx^o$eן9p~]#k"۝ۊ>Oܾeho U^aޱ]Ϧ'YJ`֍L(3wEq8I !I|~|]dL4@Zis%^ԍs4,ƥJr4* хFm.êD'`*Ngk ˲iC9Mt v}}L |>fNmz6i:x$ul76s1| ܁#oPHpіfլwMou@QqھBh?AF Ooé571lqb4X%=l^qD chU6r?yeg`_?->x 2z ,COjk?oi+qq!UP٧byZ OR-0|pE6FTI[87?)]9U{s$]򶑧"=gٔL @(!ωҊSՕtӣk7MxWw.}i^>~ŝ}0oi~8b>NΥ3V1c#QAd;ZWZ$N"H`yߪ'CBqnwx&)qf8tHK e [ R?"5̈dVqڟM%C!q9w>Z_+:]lqCoa[=JY崭oVuNVS[ibyV>:q< -'W&4Bw:j %K3_+?Ti_|k`tEQm2;ڦiӨj .oίa *sPAEQ~3%Q~ KC \"#{'y{}@&:ijn(}n˔x\xu)L0EVŤfM޿Պp38O +`%C'4nӹz/xr\ !-5dj2Z %E*uu֏PI;b ?!s-XE^:(@a s~!59&? (J)KB:̗f>#m{{/.K:+lw@Ҽ(j6R>%Y*Y Aw#G7*8+H֐1O]K?IUw_ Kqy;F+nRd <\/bݞ%!Wm¥&x֗hZEU`Ȓ@LI?lDɉQȀ!0 I +9?|)/˯Ͼϥ bbŽQo(<6R/Ev=)8r)Y[pdL5I*'YQ' nōVNZezq ߞ4axߝR8s}D%&J)]Yt&T>FV8C>PnRΤn?scR@I9墘}>+5K" }p(|0UdYQG|/sK0|@$d {[>>Ǵp T1 V)eXߜ\ȴ_8KPqxe͉2Df<@9"Iz`FQʳ p)sL{}_}r^EE%hR"BlLQ(\(r7ͣT9&k(TmUɡ < h-gLnϝu ZѽgPc[4_'Q+5QZy$ťh2{^#oOCS>MIy\YDۘ)SVے7H3зau?pⱅ(j] VRst${5cFw#sŒ%|[w4c_>_&}$@O"A ZLa:Hq`X8#mG:<u{C>?r|]Q'Q LJ'ymϽ('][eXKEZD! 2~i:Qn5mqP< N&xNdފȨ5D#MCr{9Ƴ8}^|۽1-!M]`6 daK!sCaJ'zbx6QS6o H􌝤MyxOv77WsN^{lRug~ީ$}:NtM+ǡ}1Q\Zq\ϵ\&'`䩬(ȼ*OYUQI- ܚ:G%㬯"x/[J\.`nv0v:npii$+]Ϩx2.Q d<$͔R4,O.܎d-ƹ ់p%':yXz/A`84qDUե<|Y#ݛ$bh',%20LEGp51w^椾((B@j] Uf\K6$8Z$9J2-_YIl\C]"Wt6Su!ʵtw;mH/eT@)/DÑ;Y OvM9^r?f^]*.UW!}M&? DD?x6LF]beYJg9-iP3$(#Kqgv)yB߃ӻ񥣙/vu'mrE> rT7  ^]_gDWԈOlxXOOLx5vp k),sxN|Dۺ99IuRt$vå%gyַt9N;XIzMY &y%m]jGZy( _HR70we ±zds?4+a\m]{.~ӊȊn=@u͔Yhiȍ*RRtw  .uz( d^`ѿK8z!u0< clr$ R:P끪[~"lCf>UYtUsݩiEpwReI M<2@p H MGfW&ޔٰ9{YZ gP[<^~d%keb{Qjks62eTs7*Z=dj۝+ w$2f ­ c-,ň.t|AV+#iD?SP,|@ǑpVZ %;<hM뿁s\2~nW=g$G!|t2.7SgMr*X,$n٣#rϏq{D^A/>QVJasɴA)l'ug;|QD?cr:y(uz˝M}},phGML~h{Svb77>g'Z-<0B=%-gkd@{(-mxOћCg<B@o&Dw d,{ra&X&'(`@oAf;M wV}dzؼP(|JIN9N-/gu ^88'?\F}2489*K^~AL!v_ r|,مYϬE -9tB.y xĺn wb]qlAYT"yȽHAhY.e/ȹj:7ٿQ2.+c„3(mM[:&Qi!4˸˦cy GF&>}_Nϳywyau}5\8"(2P簊ce.=|gK{mjy;p]\I .nAgef?,vT!\ d1FIPWUI}{ {7wOș> 0R6t̝V.a "迫 ir"ǣz V" dU}퓤U(;BжɱI_XU!{@:7fgg ]E)-m_h,&)pNQ/CIj^oai؈Ȣ@`JMEuӧ?& ]i,O䭞>XjJ× _%kJA}Tq-hcV{_ 4_%fPѢ0+I%12;yMl+ţ 'A|Yީo붌[TgR9d.m`(>Px"Ԙ⠍3#Q1cDE|=zLa͠y<| Dfk E0?Js5PXXLl^Nl>qwkXDāyr}Ǩp]W;d\akIV&f|gA2 &B-AIpٲ:a\Y~H!sF?0|-+K$Rn!I"sm跦 DZ<Iaٗ(^.y]!XiZz7  +urþ<'%P'~3,&DQ0A0(kZP3ζL]gGU@ </4 {& P$_~#`9H)˙dj?Lz;gtwD3H"":LDz9#H#gVa&Ȅ4r:r* YqzK9,Y}f 2@q@ ۟KjW㭽 F N{NuH9$R"శbD q08B"yF`E8>Jf:H&} ڶN0c#v ۃEnXXſ8BAxhg l;[@'PxZpxk/[gd$6oOmE?326,zιy:cEc?T_:aR ~e<0BaMfT--Ϫ`cxr)A%2DXdHqyy`a"g,$b! b {!g˙rw.`›zNOJ#>i`>9Y<*:{^5ӞOPe_̲%z{Մc;dz:q_9yiv"OM~,G05є qݞ?CR},(ZP<xV>mӸhd1еEZ}Y,Ȗ'O2ޡrn)JU'd_g_M13VBwnVܛm}넫mי\{4uU]SI|< ۗܬ)+3;یN4IeQnmJ!O޼z_=^[K$q~Yo+oٹ)ݕY?9SbKe算.ȱS=gNdǥqy;^@7o걾g͂WplpǃT;C^#sh3.=‡8+/ge䊽RˣTXc֮X^.<;neۄwCY~l"j+RkUy't=YeSK6r [.mTN5jL'ȋxT|Zc܀f5SFzyj1%(WbݪSʭ1 ҊUW̸gnju$b}k이Wͷj yGI.PF\&+ŭnWx^GV,v{Z0}*v6~HT6RѩHc+Oa^ RRVK^Ϋh?;EO3(xs >+ 20^btcnD&Eg7_#Ź!^Yb'C|t2@%|yU"`ᆪ8p±8z@;0MzɚΊvފnD1Opyk6d.gAˠ)=!mϹl fĒ 'tEaf~/M<-T5eEwo}1 Px\sx_diݭ_DЫa1"*wfW^FsD-PXITGNd߉.hwFf4CVDy_|u^RX^P`Ӆ"At^HE/͓"&+:w!FvguR4-7ɜذ>/+ڍ+&s=7wɿgb g"EAN0|/S*Vf =6V~]6Ѯ%<;v|,]o.rՍE-p:`9&(ihol V^rFW^2eZg嬪i8,2esCae~87j8puz&DJ=θ_3Fa7x3l7<0vDEɠT'ʍb9d+&Ϝ hLd'#(TOOk&̽u[;DF7wc.I"{YƏ z,!Dz1J%{79-ҁGe%TSBrB⪤ ˝3<Đ 00"<r% Wh1N ̐#!r՞.o#r:1FK!yx 7u%oFؘ;̐'ۑY{aKnW{rI<&UPqֲwxx"f50 [f)%r E+Z# S9;.g{m*g27b%-"8WﯣOm/6a7+V ܸ`B'´q |="gP@"S<^ rt b5q)I?)UhY)ۍCvMhJ .#חa+!_|Uٚ92[=}l,Ky ҏ[ht/0k$Rko9EBE0*[@$`2T>Щ&9" Abiuf //1HkpYSㆁ}oR%/F'$2Hp ZHB#<@ˀU``b(p,JrO4p&əɗ8{AE-LN_o!\:26Gwvuj((K+qv^/'nrr3x!E{=Y*#;}\ 4ug>K*X^)(߅ ֵͿMOaLmn ƚN|$xH oJU˳UٳN쩸 |u7gKL\A(Id)7h {vBwR3m f~wQ#yW?/hd9( <:;Lor`# ,uOWG2Vqm/6OjػWY d,OQwH %c v:_\1oŁ'{:@qeZE!Xgncŏܹ$-@]ߛQGV-0jVz@s2^ MCBwز9 kVtqKaEPAw4<DwKw/w| s襋J,Sۥه qe'{b*G1tȿvQ8C {3hLxV7uu^tcZI,&dr[G,tJsSŗؘDH B2-2X;\liS"l:s:%tsp %0BO ǍUXX?`8t-N~kAM;OINGܪ{ofeE?5D=73Z{X+%B+ѧk6rz?,&&+߭AR/M"$$Pb,|Hdy^q9xO\YwDs I\j&?yVĠ MXP@ =2 (Wd,MUpG`tU2{1ەWg[8t%ތ9Q:{q$vIo zQ|J;޼CE?GWB-sy ZI Υb]^Ɓꢺ.ܡ|oZfQRw Svm01΂D*nkvʽ]EwwGlJsJ$pL㷏ف{u];}U#hjgdx2i!$jLuJ#8<4ayw ,Mtj8c9fچmݚ Exڋsl'ϊ9[00?MWy01՝~zчVt,|_DӾثt˵ sxrJ?Ֆw%>![hᓁp|HXc&ϊ'fv,ipw\26`܆Yw|dY5pY__A] %fcp߷^>U3Ej)sS(ҷpgvlgXm9zF {g nXVEÒCH0qu_Uu7z$V9 G#j/MxckCt_J|SxK $?x|$E4` !QАŦF#q>~eZ)85PEDZ˽v$>-&JA!<Ɛ R% RFq5[2eNJ»~I*yDs$g8J@<R4Du`3W3fCAJD.cJlɔVpԮ ^6eAnS!F e"4!dH@s$ONU-朔Rqa1-f30guW0OexX/2E;]g"/TDO3`d Ds@-s_#,=W߼g$%.(wsUs_S̻0!%ÅLiQ;sd 'M㉸81<0LǨyWs@ N]ɾ>L|0jMmg 68|tpZ+e. 7! +qyЗTy@:[E`-؆Y >Nb["ȸ|&f1өNZfznUn|z̰bGɿ"jUٜi|r|2XГ(eg\]?0`%H sJ L'uj l~^c P)e@m27 '/):w鞔CŨ䳋T 4jOgNc*͈AѶ%g$()RX& CL9O )R0<ϗQĮNWNqVWr x}'`m;~K=>oV*Av/K /9 K7F|j}uPIOGF&˨:a@Pﶓsrs°Iٚms&N, [kGkc0/n>RNm*}MƉ} ^% :q ncj=F0M6YL9IdNF{1ҫbeٶg~,ȧp&T8O+K'3$x0  OwD36GPdcƉ6QXa`Ŀ(xRgLQ8–B,9ȯ5X߾+3I?>%JE $0YC%´NR^EtBڣ3~"C\U&CJ?r|x@M(q Z@og81S b>(qY-XAnA zk܍&3ΖrgxV߯zad.]9d1lN1{TYEfRSPAC`,'d&m"4G`XGI}>av$H03iGƮ=#[d+]%¼A@m2mfU_2wĘ%:ǚ[/O5e#3m{0 w/$"Vx]]㲔BX=ܐu!RlTŢ%oW@?{hr[I}Ш]BsYsW[Z )LYے"](:ϫ;\iyD$:)EA@@I+o>zBB,p@u~-]XicHdt]0 g.>ufߘ|37T*wL]?1+Υ*D"*OH M3ʖ9/PT z^gY&O#YMd@y%0^+!_:C$p ?p(ēhxQ"z aH1shaG1h𬻬"MrxH^RQSb.򨾡F|@Θ0z?%d0B5a8\5GCJ(Z@Mtz<׼\.3xDX^-o-?+Is3 iQhH"sR>g9g N(Y3WAj! [\rTbmTKHa !4W5_'K/n0ʧǔHKE~^lv;w#ġ:`ɺ(qܜ)bEe y(SPK<9(aw:Lj)uK'CDF)T O K ^6"Mpn%0h UK 9PKٿ/&iMj5&()Xk}xxD4FR  .*?Cp5 Z @BFQSqf 8"{5P'h=b5asijUFtp\.Y_rem^I%>!t7oacw?dܕWxo2&.QY 2s.ʲMK!f L ۙeAL_ 3?SW57爧qt]3eTJRFۺWyvphAm"nyKSsdG,'ӻ皲Tn{^s3 u^]xM_xP]C sQ¨MoܸNjiͯ[o޳VR$tQݙZ;<@ҥm%$dw2!1HL!Hٴ=}GWYy^7{Ad'vx~{^#IM.x7o u|&ޕ,pa,C.&S3> gRˢcw,T4+;GZvr8K9َOU| n%l.5 B x4x^QwÐԝ;O –SI%X]3yW2mI2VIVߩ"gz>Q-(x..N3y,'24${? )G.GT*, P,96e~!FwAIQ0hPJvLbܬ˘f#nQ1{ I, tOг–mlّC4svzf5^-,*oZ>s! s90Euvrh^ Rgޣbk6TX7Y Q|o.p1@VmML> @~rHy'G9 U+x1-4Jr%- DFSP 8'Â?80Z=EU ~%N09(!^cVKrX$j"8VYx0%DT0RޑƄ%iu/3"7I͸ } 7ob8Ywӌj_ϳX`67P1:zUuh=y=<Ŏ=tv,&~w;;y/ʝx*r:yeSqцBVl9GcDj{׃v:+͢,NG 4Ca0zHR.8ٚ]kfg`/D Yϡ(#i8-7V#%eBz~ fMWџ'\|/UZgjaB\Pp+pLO#5@K0QuYr"+q n|SQ~uӝ(dJ` KM? QcgV@hí k&!4\fI?VĤ{:=¿\d#$ $q)tw 0W'vcٴIJV4k jkSPQWxUzMLW龻ί{elg/Z;@c415iK9NB:#&Eh]2[G"N,qw [Yf CumA6DlV~3!G]uo>(b%FhQ%FaT+R/,@UzI맄?q.O#{WE'˂hletCa T|EFy}銣օd1璄9g\L*9AAKPtRM`C*}TfzUeZ0^YIpS2@TIrNDVfѬ 7яM@OFĜY$ CL_ _y3g%ӰZbqׂ7xqxfXdAtA[n8宼JdYza\T%ϳ@ɻ=brr,;3,nӎnW8-N;NRb4yyahUvw'1&W` NK$0[v1*4aW]fv%5(iTeK=Lx(6tC|8jBּzo+"B}AnoԔ^IvZNVzEʂL?:p{*.Ja\G}lϧMܪ&r%C `SB2}Al1誘|HcP]VKCjw]tfS\).6@TT>,znCΤ$ +FBy]t2@vD,ϛȟ?zgٿ~ ')BޕI:ј i::']i.A! v'><2l;e;yY6l%'e#@T! C\:%e2tY/eH"RpIr$S2:GRF|9 Ͷfa_j97Klvf*2.SӜ &rn\"j'%'x@\Ě'Y͖“cZivk,O˗A~HAL%8Ct;EL=%J;qLc28W,0a5U<)趬R`cjk9Zidm⺹JhAD~[Ǩs;^oHeSv^.lZ@@/u3dTH$<"FA2P"#L49H!`hzO3J!sUMcec̕-&lP-TxzicUg!72X[d;sJ.UKqѸ"eUY+z)Z YΗsqXXd: P<ޔ@=O1S6E[]]iOFƬ;S< 뱘 요l*ܕܛ,];\]34iը*n=aV7:#&{Tg9+e.Z'*o{ؿz+8 ~׍g n!gykB%[>A${DŽtN۝^+#cӁ%qlqeP4])Ml޼ʴRj gy|p?&:Q>zMwo8B2:`|q_bk(˰/Tta0)%`6i7pQ..i͟Tq5 [ey3),u9\|05rqU?~|HМa6'vRg3nu^+F#bZfyE⹒j(cB^t|)35_G58)`"cDmu!:}pX?Ĕs=qMXVۯәHFR=~*7lʜw+fwf-gw=eXNE]"ʟox'wXyK'/Pe=MӰC#om_65eCq Z r ,ph[+,UY>9-gH(L-$Ŗ*Ew?\``ۢb.1oA뽪v`v;"r]1&i{kGo40UY칿E:G]ܔsd Ot%2O3*&n(I!QwXE@VR) ďyTo -S37=0l .RnyI:uS MH}o n Of j"6*`!G_w_G.[$r(ՊL{OkX! \6JYsk FE9`FSYK{Q*?kcnQA]TD1Neo1dksgW0D9u'#Kk޶7Jmi g^ň"c ">(q̂e(3 o%9sՉ4 %ǃf+b~trJ=b'&ۤZDW^(3iF=S=vs(GO+omLBD7;[ԁ$&]S9]~X ߫Ktj4&E,oU 8ПJ!"*%X| w=\\^녑##\MviEj-ѿ9vLˀ5r5a XC ")#̚ 8PJNX~jh19]*̻;99̮mppBܲ"nVy/b+;3<s-net~N7-&ߍ{{{TA/йE@aeg=M~~V*KalfȎ &_Kl*Od{~,jJ9IAH+Mc\5RiPIaՇS~zMYě_$:+ W:+9l pۙ/\K,$D]hs;|_/KNW`0⍹t.סA~{azR G&y-]N*\0ieB՚ݪ؜|H_V&[cO 1ͲRXЊ+j"OFwd1(ߊ,Mċ%QRqdk~Oַh`<8i抌4>f{ɥS o_Jr)u/*ȟQHl:AGt9?/ZJr:} Ǵ#YYH<׻ qͧ.\yjQ^WJ7g[FJ#mna`JdӞ̹M&f*AaH:(9~rg6mITDC4(Bt'bk(O3ԥmh_%ǿlwijΔ̦q'ɗTU"sI Te3cmΌww̍?)q G`"9aLAr^5L2fSs3*X%렼cvt6xc"XKPNEMscjv,'jTc+Rsb>JeVdsZ=R/`^18e8Ob@'k(8 ;rM"H2̠ #I6I , B-a.0x! hb8 .0ӵ?Q5;"n68 oBb_ 1QƿM)3b5~%JroU`9%ݥ=@ D)`K0HXL!UE, {U$Sxex+1UĉKC?40rX4 M<>g xR -\O>%̤ٜpF"\pչܴ<+p^nR {qOaDTh[@eU4/}'guAr>"AQC$GD(ʵJ]RJYʼnM/8=0`R],aut2L5pesV f{ju,Aѐ$޹*AJ{_a UYQCd9JۭGITEJ2CŒaHD$أ/E,XP OuB-kv0 ,~@5u0,J#jݳW2GjF ?7GV0tHS~8 bi*olW}McMds7޵޿{!a:$:mwIMzs3;y;SBES? z  jFf̏BX&3a߲:(S%Dv`𳸲{h="/GR& rC^a,Y]_6YtevN73Y0xO4@`}^n%cUe[ϘV_ MYxI5JqXU#R]4_keJ4 !*2V"sk=cްѿhK#M>/o»m[_$JlH݀3ESkU\FK1+Hw]9ySٖ}B}l}"XЭ}HKWA>=_opVqo@%Cȧhbyy oOëޯ*֊!Vhl<&4fE9Ң(R">ȹ,eY P+D"o8a( S#9K*D1bAvpv[Nh~pBsuR+@㟚ˢB8Y7G߭M?yaDO_FWhr{v.GP)o'bEq2)A7Gy^r}.=Clyv[=TB bh^ڣ88-ӯ]-H;8_Me}RrՊtM~xruΆ~OG@lU |^<_% %1V) >;nmRZms{}S՗;qIdXp଎+˹!1!ߢU(t|gj矍;IT9OsI&5E[#[w-,:Ff8 Vlߐѕݬ08Mp9yi a 3{F j j ৎ?'?J ȗ)];|<=#@CdD ;mmOB&<˕8W $Ul[ܒb@ s={g>$ü+,_b(5qǧC?'-P橬Q!*-?/љiZti[ȌUcf!&fPIt s%-6dErb(a0ށKʲ@lJx^·N ^$("'/&|MHJ˝{@~;r/Ó1¸3Xϩ)cKgDZ?1E` XU:C|^']}^Ba*e )yIKD<5{y+9=K~!-+%3y)>ݟB& rFpP 1?_Ndv5hE FBHFț"xkC>y;Dzx:h?C?j/ť+zOS ݩ(n5mǡ]xqf=vwG V7ޔG;q)NLP߫@Xo> g_%6aTû`Fp\vZ7+ޛ0 ee+UegcniA 40r~Auu0Էh6$;BJs 9-TTtoo 3ٹXo%Z.~s<0' p#),͖^` dxܐEK J} eߪBv{ ־(Z^!DwlvINLP5|AYАdvN.A Q&Qbs"ڜei4XF)J'63D尦J#- >ժdž8P`R00zt~E_xM?lQd~ȅ3SwBbĤ^}4#Ǒny^JZ}aߙHv3=[iu_M 7j}<|vPDZWK%a0 itO2MU65Ţ ^.X-xwђ+ajhY1ژ7'w}^tw̩~ZwJǛbSTzrVVJO„䒈m_Đ#).D r=XEzU wɔӷ,IOafQ-ڷGk7חNqe̴QS23{Wg9]uGn,\u縸M?gt`Y7{َ2g@+=*^i_"|tYT9,#.Z&y ~W`BV<)bek&D NC_f~B\?\"t:!,d5;!9Y%fS,UP^d@FnsQ=gozs80&@Qǯ^ڶȜ-!~Z4kvtz8/35w]Ia:l[79,[OWdhQ\\ H^0#V=&W9('뢢`+qUOӰuΩ'>}#3cn h>P/FRLƄg9\.2[H@OQfM'X:эe4w݆ ^Xǖ(%,HyVYE8EG&@)2)f.iQ*#-90oaBt8Sj>m\ʪ3t-d/`2'?s}b+y/0{D!}x)<49Kh1}Ǝ]QHt/9Vi?8 oy:!ޤDrl:,DY`w^UdȦVڢ(a05S8?w" n3+3nn Sg`B>ɞǐAwN Mafh6yFa~"F0rwX#c늏# KQ{Kh0b9M`P*I8$JD*䇳(EO~@"Im ,QƋll|9)0D-xgAU$y#b*HoN'tGQ}!Fλ'9ݟ~ȚGd0>zC4@1 %&=%D XTcu6_twZ+V\ Ҝpj9 x"7I 3X^ܗ2E, 4LQD#FEq4 " 8Ga T"%@zEήM.|K'ZCǥlF|Wz71R)|"_2Yq0ӦقK}%7JD3$"+7 LxN uuXz|' j7#^cG213 )MZ*:c48pl3ϒr( lzL!c d%)5N^wUh/'=V8O1K !E$}sʩ<~ZIdMqa?&>f3J$7*7|;x\.q2(z_r=Ŵn(P:u'X9g yhޚmEûwyъؿIN5V6n]q?,Nm'Guzf<3_%p讛"-IL#Y _t88q8AN{inr 9XIlCLwKgn@ZX:kg$x:@y AٿQ{,i-`mOX `(gB9Ie/>#Lm8;D'pN[ȴ94FO3:p.pi:ilA"] ,N*q2=*D)8L i᫋[FԮ=Rk"IXPgM|7Ɛ$fPZx<KV=лj l-ZKӚ\ ȝp uN}{4F"BO= dޥ/:ѐNB8-0\$x"18A PXӠ@vXw%I@w[x,x, pqL%shnd?8eʆʏ޳G(BDsqP iTFcZG?l#߁p..UGdB $GCֹB@ğbgǘVz abeOEK|8sùe5^h$d|BJ|vWЛ0y2xGILi=-+8A#KMMm\'1aveCSuާSٺfqNΘns3v>x3rGl7{ RY}{6ìksqs}.e(\ɾ@ʼxcJa,_e@J"1̀,gCh~`j5ՌE ԭ|Ȯ?mW?޸JALg4ʐtW;򻩜åR`9۳䠕]׭sW;a݋DKg =59US|Q(^&K0:75lEqs;gsT]t.78!]RfR9no>AxXlyN`?Oh63r0f힛ijڼ|~36^I/gK1nԟ_Z6z+P$PW֝$\~++ҜKY[:)qrWXuϚdrթ`F0/s.#N'ϡ7T}/^O{-ǻ,#.c+/Nn_ LřGr=T~e/Ϸf!3viu#ƊZBUϣIHT}[(~:Aou_DQ,U3-iҭlʢlTGVvm]J e6k=6,;:8H:5\h $Q0Ďin1-[ƆUE6dُ`k?~+Hm'N'S\j8 JsUApJ\ nЧWd]NE i?S ipE%S76^JT$XW'sW _+4ޫI"cU8F]>=?&w<6{QB5wjx*:@Xeߵ)I@u#u2Akڨ⿭bZ}Esxv# iزϱ 5GڧtȥT QBi\{cQZߒciBC+sX'k׸ L}.X YT^}ވ$p1q=<6q}/]wV\'S͊ M0kX~H8\gX#|i !+vC& DP#^tdz' 8Q(`y\loGc4:Y}jZr~y #,6H硋LD,%CK1\&'OooZC 7ǁV74pI2O7I-PThrNH@DKq2{;Fa3MX՚7$[M =NlCG7Co 'oċ.gv0(Y!{pɁLcXk&ʺTa]KMve> jY/'ݒ[3cCpD:=~D&08?U%> 81F A8'}ѩ4̃`;Hgr/3gz0߲g^.8!Ʊ(dI3H11b8]/X[27Dn5`fs2 9Js8;ySJᬾiztU/{ϝsvѢlle]2]ٙPG_a0<;/{'m Q8>AffTgƱj&ly& iu֏6OoCIw:*ڎ1YA<ړqmS_fe+E +dpR/R>JSwމ5́1+# O"l\)2;PHi@$6|yOEjZzǣFf$3"D Q{~"tZŲ=pC 8Dbh#8 怒!mA|bXdJ~@K gȲeKXWE2wIȒpD։P>~m8n)0-}/{GC7WN._*~-X$H'LJRZK`qYȤ=7 Hɏȝ$O|nK J+#!w[Yu1[Q0&Dz OtZجվ1Qh.˾/Ӟyw{*h!gre+~;o5׮O9/rޛkN|_3mh,1 & <,1]ϑ/m;agaSsvܙ3fnq57Ǫi=Lګ WT?aTU.#a5@4:&9xk6T$kꅣV^3q+_cey= ϵe]hɍ1dqڴ"@DJ=ypoSf6zG`U|q`ڞ`vPfzP;[##4Xshuw9ӝ-yZ`AFSU6EL>hF2gE!B~mV@bWa#M3 ױlG-ܐc33 VVL->xKy/UNiu!z̔JGuei ڈ~Ė~cC<"81Apщ 08uÙ[+#6d;asڜ$ucI7 -SPew@_Ja-tvo[x/(BENe{7iGyoܽ# [G@Y+|Kx8sXL \*i\ qt|(%eDB: D3r|)0޼1?.ON/JH2 [ ? mP/ }4Œ>Yq Z?y29F621Ɔ ,ڔ+s}iV٫x;ݭ%I&ռKPoXie3 LqUN)aR󩽑G%O {Jݪ?W恟tx-. ^gB8=lӣR0$x̷F;-v܈:?M ^>g5eqnFڼwSގOhz̘e6zMl+&$>8e?j]CkOJ#QKq@D3Q{(H>JIONYh=&ٌ~}p"M C_ʇpv攫 V8R_idC|/_qivħm>;pv}v:Ow$u{Yzѷgn{_l9:{g{K-v|d냠jk6̺h+uDiWu>|RI?b %=fʺd\D[ԽWYu]bPmVyBV>ȩ1gH5\(MD_Ž ĝh5 TMe{ɩ=^m049~0_e$/o~^RB_yۡI˹*b5} g(g鍛y=33QU@V,Cσ~Xf;:6{$ID"#tPHsûw"&Y,f'2D`O#c)tQr}F= רC~M{>fPUp|S'˼Y˳_~V2S''EXװ"rIyъă{~_cO26g0|pCoz{+[doRcvi,)K!CplJGV -KDX`~%leU[-_R&xFm9LtرL"|uڿfup u_hor>fSO[$ij%3$@q0d52;ʌ4å)QO{Eg8"Gx8tS &c\D I(@֨{y6z]V̖2si8! |S4DiHT4(|L5 Gܕ=p|@}F&?eSz$"](tbST|mHVdd]{Ƨg8'Cm*lO_RDWiY 9qxJ8j.!˞#4P{Ol(~띿8϶Fe@YzpRUTmvoask^^]?jN%yw3Xu?O)k܍^8t\ k(A/#'}dU|$>ʝЬK%ΜqVJh6҂/m'6-to8ȇ:rRjY6?؋7<7&7"6=o7Yܻm&UNSp >e9s)/T@X62}p-O@Ε~$_jA-7`OESx<,QoĄ MP_B;W']'3p*SWYX-A`ީ7}[evd}GBV\zx^o vL$uf2{B[ )ʤ F7(,A8ϔňKďo5/&z9QZtI\XT} A}Ꭻ|u:0arVˡ#Vj}~#pѪ?x`@H\XpteXrY'6n:M!W0YD΂6:+c?w6Ujp>~L7E%NAuÙ=+ԝym)t΂թE#FY'1%NL &pb7(/eU/@wZ[ԉ|a_Ҽ8)KW68,kxiW!|גɆ oŎ9s:RpJlg2nJ 4r3aQ>IMq 2p o,x+bb`'ˉ2G\FJ>])ZshA\dR_l˦ϊ8dhmJdk1 vӄ8#ܫ<iD:獏&w!{+A:]Kk3fg\sY,9B(GsfH|sG&GRj/4^=9~|WDP'\e]OPUJHhؽ~h][2^N:ߠåT(Jz-PǼ^uھ<#3/ +k x}lԱ2-3D'Jgz@g<}aˬ#Sy朘T\ =v+uД8[F7U,e$"G|yF uŤ7VPbĘoLdol*oDg 1j.Hl0kcZ_ K[V&>PRCޑ$ɸdQ{3m-v[4(/"]|u_ָ͖cK="<;SS7ʜY SO\̣gz!z~ocʸ*-J\BdzMAz{,W2VUfXa (/nHf7r6X]/ZOR>H-%5OMr4 n 8ӝI x 7.q!@H Z17p> 0(Mǒ4q@gpY1w9l:"@-yjxzq*ƜdBr姷w ? j@s GV&2 @Iڡm XZ>/?^@}>zsR%ww/̭u$X֙6Ѫr*NfoHgkp))jDB׭/W>fC#/Asmc?O.&R?YǷF8I)ߥm7]{ހM˷hN$8@ U0˚U?Si>vpPX4 oUʑ^g$~`dbF\r.Mw8EvҒEK?>GA'/'n_4D! x47)ǸC`ϊz͢ni2~fTU̚UR&hDK!TGpb0x ji6,v~!i V$a b.tag Avs;GDy.Cxz :ZP[FQ́Qt/+o)U y c8lPajlƻh8!ǫXK'wK.?׻RJD^©;Bu9"YFpX(hG82_oT#k˼/blc:zIQW\Sf%C>CD"`"Eg]3rש[Ҫ=zF=ljTSHAk(ҥ(qoLEýq@)eYmZ)Vy81(y_aP-O?ğ8H+k \16S@4S(KP H:bu1\;d`lvvh\9K;s*A2f]*.磪|BL'1x6y7Orx la?7UK+KtBqNX  F4w uvz:|nŷۥϚ5{gWU:R `g[I1 W, T24~s qKZH -$2"g㨬Z8+wVZ pihD?ۉB,z|~J8g 8e9ij&.4,\2d+I\Ji>G.{;V9^ݘMq:|d jlsAWE87Pp< p~B 6Xf @X`j) `YOS?·1U_̶!lM4QDxHdX7Z:F[,vF?Ú$b0\ O@vnR7/ 1k8y@cek;zK7pE'?|q{t}kh` JI77">o"NTFV)F$'-8HA8HC DUI?]w}9P/q˕FD0zKxIO !m(O[ SɌ:TLw3〴(a85C$ż^6Tg*9V!@wak (kt?˿(s'? 8*s ?y+hsx_xl[y`Qk~1b@5Ky1/,>pe=U|vBdmcxj9|y,+q"uhj(mlC%d԰NףZvH*9=+V$SΤY܀e+-Ri%g泵ҭìJyr4Kb5߶w~n.cOz =]XQqӆ)R,׏[R_lA~5{>m).\nb%HIɋ.٬19PڦGdDz\B]EZD; M' gc8?\|jS%+X ]̿O˒paK@dD 1O3Z-WA⃐V7w&DZxbVMԣ3gOhɞv nYOAOkp Xn }7=0G gŞ'C-'% "C" 'NׁءVBD 8w<4(0ȷ$3>B#McAc?>' #qkGTAwI'.gz8ũ> Asm :eK̼73i>h:-$8;ud)ٜ|%0/?3΀|Vl, 2y|3^MIO$_*n_ht튔[n>65<36-JY;bՈP|!Ks[T}(tSSQ3P^#:Y )A`Ċ h _%,4  Zh:)'8[sMqYnM5cᵱƧ=j8=̐'̥>nqV)W?qXctel^p}gǗԟCAڮߘRQHkGMTrobL4Ŀ;e0 dhX% 83c2]iO*yNdž KwV$^ZAq}ݯ:nϳ87h|l֍F̉9ā~'H8`s4-XX(?yv'L?y4 "դq5ťQX(>.嬋]^nBb?^`"k9B~V'BScjsQ#:q"/FoKiAlOHpl(W9yz gh w6=Q\^gQ: Jp}Ani9(G5)#`jhve6yt#g\Q#iw/.aS[chr8" F.Mﶋ Sr},U nmI+蛒2gB6;ޔ鷌.r~`J|q埖jjݖE&[7~kqM#uSدkz|2 J1DjҊfzc<5a `#@ȊpOЊ8 4Q2co(l?1~1F$!ΟݝYUY6붮 ݗk1i?+̍ mbĵ MB|ۭl m7V妫- mfǒ`m؊Nk+ӏBލ('f]>OW7^ޤnEy[v{|3.29A[!2$Dz(S"-IS `]aXJPd#S E 5#%Nr䳺-(k #tU Pݕ32_)ף U9En)q~= ׅK!%(/]E$U=wgX}Bٸ`MQL{/ dOv.c1ja0-z|ܒ/fIBx8\I1࠸;O}Ll5@ kI<MLke\BMHFkqg0q7k&S]0=_,ZvHPXzoq:gh,璳50`]Y,_R*1]r E@eRUPϐ?Ӷ33lGu z;Q1LK(kAB~.Xz(M{S)nAbA8,uX[n% ˨#8uDh".>όj/XиIou{{X/D5iF,D.}3r0#LǻJBEa`2®T2|ClCEVRxz~  "[ƣwr=FwM}hU$_ͭڥ1c+7&2T^$VNjRzz]a-N/fҫs>A|[ܡhcPh/*6L@O'S5 Is=qseh+)@>a=%=@~ĖU7zN`nq45ʨF>vyb \ƇS|,j*^IvQ17&, TXQhykW0;F3_usͣӁ>{]poQ2|Hfٚ`6z#/lBi04ẛctōVT8jU452o^9L!M~0"&c : it_g L*ziJQpH_sXWٱ4Z5r>[%r"Ð >9)CnZ!&U׮֦2rAm =:K;|b9zV,\5ȣLVB tP2@8H":q ٴx9`@yD9pZ my~XՃrn/??V_hh8؄N^Nyٻ>u(Ox#ۇRjS<.WF{`0r/"45XԏT-WĒUa-q8 w`fޟVI>3Ph^>Xܻ? uBBgR )gLdC޽f[ks0t{cc[t q#Gy]-FHOʘE/qՌ&i:t 2dl*cpȽ~6Dfzx " Uû;~\JےJɠ?P׮I,R޽Eq(] ɣ`: ѧ=1qJ|]$͊eT|HhyMpxD3Hלsi~^ahQHF\Ci /[%lq`)VBpwa6'iWd2`%(_GmVh#+nn9C R1хryO0Fx4zSAEUh bD,t>l'RKv?=9d1 ./o @,Lț@ CLငGWyMy3 )%Gzf\q }(H/EpdAW28⨻xI3EǵI=#4<9Ȩ9n'GRŵMDޘx9R@E^"wsKH?\t CխEO&4C22xzo,'awFH\Xh2h4g}矉$f^AN\.K%;sfӁLzXzӍ{8OC]pX6J\uَ xr[NÊ7bx@AEaԝBn(&!Ѓh&*s4p&`L@lcD&7D#_S@M/&(bp:a5nt&g$ӕCkO Hw}6y-R:nrtYaYkay$B9s~TĻV۽_g é*&\OS C%hU˥ƛģ#F ق9f数P0Ś EN_&es0,,=Ƚn1w֯ҥ+FV/O1ioW @g .|cD %N?/42="Ggܗ(9+'@úۥ=]6sz7)sr9+;@jܟqFȔd&;n6sfiId 3u?.1:#Yx&ᖊΦp}zyt}G8q;+i!kGcmq%/ëaOPSKJx}…(uO ^އqB@gN>l#{A& AXT/.زHe:g+24oKu#=`~ UגS3('=7~j 8m m]s+ǔYrN6z+:q37!ͩ 9> Q$Τ<5L8Xt۩&e+|/u$$)ֲBpS<-e(B{y?Y..%eEH:r}r (Ul%tIṔf@Ctɞ"ʜo+:N:rV>>.Jq\GAB=m3CWؖe(^Q/oCSԋu5üaY)p@V / kӄF93r`ڏuX؁U "(ol!R%r:[5 |% ^3qVƯADDK~/蛿(VD11p6a}y_QsÑxeVȬ^iR:`@ g}!vs1"50ӯy^̸Lqm5;?8_DJRf4? WJ>wGwNUt A'%"M(A*!Gم| ]/WCC)Jc0yMXW*Xk9^4[/s|NfYwS󿲣ԏyLm<|ScJ)JUc ]4MT /`$,(Y| F@E|o!8ۨpO K%qPD*_.]'3)Lij0!7ǰ]mfXdl\Oo" G4%2@kc9_ a} Ւoɓ|!l3lV[G[zS;e.IQ|@&z<+z~7STw.7`w}I;J;1=BWM!ua6/ŭDRڸ^j\e;/.iRXkO{e*kX!D a8=&\m_w(lܔp뛈hXJ$\E1эObvݠ9^vU ݵJtE{1VkA$8q-pzQ#ɢG; 4H)>Rv=+> tm3kͱKrmҫ8/m—cXꇇh|r77~)Az9Rw$$ 過CG5PCwG5SPb: $+:IqSKIy ^ˣ`.@WE6h tvΛSRM{ Jm=5DnB.dѩam#^ZR;ǻaΊLgu@D' O걞[}+ #yOʹ'5Vr>o eoT{Ms#؈K$'hc LrN)v@_ \pG8-]RmoRz*6K vo*VWǥb:\"by:D o'k`j]IvXeQEPtO[Ds|fʛvl9WYQ|vU濏/@X/_;Мr=Bn+7$x>׫^Na$~>_GC06G뽽!U}0/8]L|/h2OFNy=mCi}OZEZѰp;[AizQ.[P=aT՛/hNi|Ilezmqѳ/Ќc-hsPpYa!evf(/;!w$D0S!lqh0S&>cE18gm; ǐP|'*:bP:KX$ c"u ri8ה g^;F~XʒӔl]10&P++P8'ir/,jx_~")Xn(L5F*4 };LsэXOP'Y_b|j1b<{s. (h;09B/涏03KRv$Fg}Sg8a8\r3Y뫻%)=1/,]r9i-xOMCPvܙ95XJNpߟ!Ga*&tzSލfTdY3(.BENScY"W<y$T4hwLzYpf6/R/CtsZ='cIRyW6v`crDS#ߌȦRg 4A{?=/o-KZA ^œmT8VnٲjƜ0t?9N3yFL>'^qx%DvFRvܛJR0y2Q o wXɞKԮOxH~ގ7,n8Hd1ʋ cgE.WI6}ydQzI4MڸZ _(F%-=Yƽ)>q0v)/v7Ծ#xVDc"s%Z\l#˅i [eBDvkPY X`ts"b,to/d ϑEׂu^.s8 l7> P'_  鋝R鑒)znN/Og|ޫKegM,/%IZCQBIi Y/&Tmf֯jplN9~f}[xyВ-ȣ? t? P!dC6Bsa I4"5;#﬙j*.V ! VȜgEvNC^)m^9-OOP:ͧDȢPQ cxtTA>%}{d $ɏXO5R`M;SvpCsNM6TZ׌Š-}Fmd: bz`J6V7ԆN-lCX:6~xܐ|BzA• Pst\;u9Yrs,QiԤK0SL); W?j.j?8H#SAX#yNXWqB9Zv~/j,"&11K{?>~/%xU ]6U(gk C/F/)?>EDVrÀyȎZL4NP56SΗB(}u&`! KkR.9$W da6}{Vx>•5 ]yRm-jws,L*.VKj?ij$( 26M.D0/r#XR.䞙3(Er4 eX :%B%(?Uy^>d4>YOlG2?taaH Y- yVT0@C9*$Znl uT2>-/}IhgxJl=G͵Z}~\ oy 7]⎸gj6ނ =DzZn \mz-󓄊YL0bhb_w%;Wks%U[H՟ZJ{$om;+?4RIs-@(WaMR6,] K+ O-AEy)۾keYHȒS"F Y"oVY"4_2:ş%xg,1'Rb3u0=uc"A݉͊1 Z=b&^6j$sIʔY"! PFv {D,lHZݏJWr#|ٷw;q_Ds4Ȟ8@TضWX{u:|[[/*) 6K`4O]LתMfgYI p6]q-%ҤOMn.'mzIHE6eC=(b-cܿ,UnP=T8kXQ7H733 :~4D /4etlU@g-MYp$-,fI@t ĉ߷ryǧᇿ)?[ۧz Z)~pUwnXq@~yWI 64tPȀBمco,4a'(,b9I8І Z\B0$[ .wT\9/7goA*'I8~Z`J/ $a_OZURS*d)X_W+.q-iԜ>;Nw@dzJg4мHŁ^Q GH}lue !'Qdh6qKnWG,Si\|XFS*ZRVNnd5Pq\Q"/(trD BfCoǀU"/FlT2G1IŔ, ЏG ̣+`oX]žBH}@{k\ÓS*u|6 ׸i7]0bmYls.3M5Ҧ3U[)/w8:,?|Hx/ź~Oc>Wӑ xʒ,?,Mn-nZT&Y\0ؾgn-fC @f0 MﳘF1o%dm_(voYE2 IjdlQu@3/y<+;t){9ףƇk%"&AR< }N,Y`R혿$&1jqo&qUXߝ:hvtO =8'>MH/0"a&"2_T6n /@h.ŅtSYӲM2#[K,^~XG<0ݸ˖O5_QfsYuk>®]0U:Myc)弘PHм{*/fjpSh fq tYvϑ{79*Iq"T1 m/;jǥ?ɗ_/?yCLɅ&={%4YߚIڑZ9_.m s<2UdDRDv=8J>H쾺.j-B E)Ȳ$B60$j6?t˫R\-Ibz7R%LK&֛SN"%Ԣ'HHD|ӯr|_Tim 1 h~u[`yr[8c1> $dO y};̛ȩH4dZT?V}d}H}[Kqݏ3&FN62Fd\g BYaޒk|UaqJ@_ÈhѢk!D`|x}/zϿKk ~LLn'8:sPi.j{ ~R8h#†昘BUj~ 4[W]9 sШ I"a4VGWI\qJ~gdɕC*yRpH+4|zpv#P)~ݰ:Uzo_{=֐7GZA@o7MDɒ ?Pndd-S=\7_?00H8bZ~=Na4j.y<.g"]hNNvQH. y*S$/Է"K:s7i[F$d6n 0IErPo+6Uӭ;;Qjy]K 0f㮄%n_Ýarҡ^u),}:;vqt7 ǕOaSt9 | :&9n@&d@RZr ^^wMځFC'Tq~B+LFiI1 @qYp}mQ](ڜh99Rko@ԲKPoՑȼbA5n/bi}BBZszȶ0<ʽ.rM G%*n{ԻnP-)Kw5|FGͶ+>.>$-*{ãZo,7w}ҪQsl;-"3Vk\Gѽ8ltihO8t^IS4{Ro?+(RbVj}W0Jd^2aN=$$Da61oEYՔVr_8B6)9r{>A&n\{ufbQwr/čx_p^(r'Y /_j?NKd/+M{ pr1hn0"D$J !2M1Vz]4r S :%A < 0"_,G z?)ZeǖwFwJJ=) kվK7EBj: UⶩZ͖H,TZwge#{7!.P)YR>kK7M2av JHb.>b24b["8rYv-qsn5Hx!c27PEAt@UCM.I:[:*h$V/{5v [yMFʴ< ˘YAwJ7Q"kw޹`Ŷ;ctr{KpI'YwTC dNVʡl0 S^Ƿw󆻤܃s6ȺVU~NZOS(~$ZͲ&"|W7FTID,D>鳴#ܓLoxDz!α[jMju?1|aobPC)#`q! MO'9T|i.<=Jd `BNz4$ 5#0~ꦟy B:~j3k,:N "./3(\Rf9ٺJp۔:jd`ERrM)(ϣ1sg_?gf)W7Un 7-1xx%G!_w嚌,?4y*^^Bj1  G8rs@@}0;_XIEx.&2+ЌNR4Tpgsd΂du\׵8AH19]5J gBQ3[8"I\E4WWlU:sw0 b3_F ޗIuVsHoNLά2[<7J*pѡÂ{٦;iQ<,37?8 w|ŕ~[>[]Mmrִ4俫m+Zcn5+Ks/ G CYI/ \ZHRF-$ c4g& 82.n7~H)?+0R7E`I/#=YMs9z|?D1}?H#M$ݠxa Ak5Jdg%הȮ G>TIlc_H]i>*tzU7#EbuDQE^jպB?5E-˥wu#"sCo,FI.Eae&vU 27=۔ R K-xw h<̴ Nj<=X΄BŠߴGS 9ߡ6艣0ˡ_ Ԇ2]*w$8 dyR`5L,d^KxkZ2MT&vޑ/ݾ p[*KZW8l.JE% d6V"4c3F,C1b9ĊGKhRWq8Pw>?{&n q!ǽ}Έp"<Kb!TSqgDh5 9Ojuƭ.A h4' g w[t>5pfU'xxb1plTEW"4]1LAT{paեx܂RFl>IsSpE x^,@]H̷!Gץ(xFXvxnlGɎ~ Cq_Hx;3tpL{?+f:ʯԫWRXz< nQi|nP&fh)QdtXGÝ>)f ï·+}=\1Q($i3 ^SMCt9wbޤ~>)^> l ..JQ>UUqhgNRB(bJ"hcFQM2!80fi_Q ?V2)CFE uLi{Js`Yίѿ9ImRӼ Nq&,fϋׇ *lL.]ZnkMFXf{ٟ낯ka!T3[(@EE2lɔ4UgaL|!s; 沼%~^|C:J[p*/g;%nm:};iW,_rrְ峇twHc:7<_.k$ഠD̮&yfpoIahgy%scQ 9P2R2MKY*yI>awrb+MyTze7-ZW~>A7!:7V of.rE$3("pv?K&쵏TF9$SuiS yU:\" l*&t\Gs2nbWѼ8 <^,jUϺUst}; ~lIù#-}-0 OUeQ~,I3p ȉOP);EׂN[moPAn waW-j4([jwU!] G9e_`kHt*d.r#~V2mCB&a/ k9:@ OF`XSD[mW@Ct<CGs5+cK\]75NH׹hCGLՍ#6Φ׵T/Q 0 ã9!;RzM>$`;f7)$ZA@R3`^B~{Y͇-峲!9F isW`h!F9 +k6@\HLEu=6a>QҐ` pDxGpXf.1 wSJtfDDlFTABDE)ĀU RtwgG ASZ8Gfͥpwx^{8EغgVjye m9Oi& m-h#֤ih&yh-d>XNSQQk 5 lW QנYrP 3v4V[J8w#lugThr96DW ƓٸC kP*#6I|-ty3voOT3 ܿjh7g$K9+^ƾs4UOBj`U;ӥdnzxJ* <sO?ɓe]lHrE җ];NwsB ?wKdM]luo*C5m %Bp^^Z*!R`Y9 YQy,bb{B q'O1$ .0/]_h~+Rp%Q_8' tsآxf$ lҾ 9DՔk"!!sFo+Q$&>a5(eوOP: 2 <ꀱX Dg>Y g+QCAWĜ GďOg4qre XzL찁NMaw|Xfqv$0 &^&.>玄O gI4 ߷8μxe\O-3߆W@gfK_FlII0@ܙ Hꜛ[&wX4D>ƉQ';PM`ۑ*{Nm/3 2L7 XZ+ƔD+ǰW|A !X ʕYIGEQ ^#IqL}zprKkHSNP[,I@w˙,>2e7LH|c/`$Z6x5*ӷ ²$Ε1~S?Gg<)w<+Rd\U-]PpGOvaO&e+Zn; P#O7nfe\?lc|A0DӻBD"J3k"w6a1ocr~v1m|cV:oj}/!\S~QjUAdOFLa /*0IH|ym#ޜBU I%@i~H]Wq0uÆb!Ɠ4qA3-j퉂- U@Pe"¯%$׭ԧ~}nzu:ny &j{AknG(stF(I7keQ.\VǓq-9֒<ӴqOsޔڣ-OȷGcċ{5nGN-ik(Zűjzh'䍺 ՝.o2lEiNƺ^4aJfEru_qy['\V+8M6uu.pAJP=5h&U5 sJ4Bϑf^}Lx-cTX!AT`7/\OBe #1<8K6^4"7LIrX)Ŋ@GiEG ֞)UyI6-ÊJz<ڕU$YɖpN=+˙}3nn#+稿Mڍj b,/,wn1G c sg ݲG/$`m"QHp'_f-'Bt& AXLPžԩRBo+whwYNP 892vmw'5bwrlF]"yG]kZ^b=w<6󎣱Q4)=)Nrnw2ӝ)qXRH6VzE+,ǹTs#eZUc Z 6>FO BA^Xr<~rFHQTwn}8ջ6,'qYM9ˢ杍 Z>hRbL) :zV>f%xpn1Zh*z)%j=:Qz8[:F'C<*}lYtwVP잵2^g]9eګ =<~QzOЩTǒ cw|ܭz[] jBV\mr=zӻa{Su*6]oz*FoB[8NM&F,^̝/MqDx˺VJoڂUp;e8ő6뙓@"v|W_3T' Xk^v1"{3v9QGc~!"l(摀1x/&}y(\J$<,FeoqhŘZj`,qSК,qA 7Iiyzίw%&H4K ߳Dg&O僼f/eHVڴ5"x(W8 t$~Z=mr@yULW'q@I?r6#(i;E[edK:((68GͲv"wbEY}49ޚȘSwG4M(|c5[l\_b@'b:05Ko TCDS<~J$&G :0d2 aq 뭞5NfҪ) .g(+~QlQT%|23Kq>v,5 ".[+Ǩώ{+z0V, MSV_K}~9;|8sgdHT(q~ft7 `W8oB^}R8nn^E.ȇӕ)^ե.Mթd> ]|yy hQ1۱f=GXj_wPǠ29 @,h,(C>%ʆ|r|}p,+ GFG0DQ VTH,P R}k8Q`I tVj ؝)̬]a? TaUhtaܙHIŅp6r纣Ҷ$Q .>nKgm@pd\kKF_LAʏ)S{ qvLzܭfۄ#&,h&,m1@ 6CpͷFʽ5|!9`|d djTjg ̮N]ܯN6žg];ԝw<ϧ_" 9_')[`+]|x7'nlɈ\?=zs ,0V'n9#mr/n;()eR~sVG_ R:tk>\??Ĺ @ŐA@v(\Nr]p C@>Sg(h ̓Eac7ٴNDZa3R u⮬j!C-\V!0+Cf HTcFd4`Lhrȉaԭ#SIZswJoP97@_br$0fihL=< *+!#: ե#e!ZElΦtA3 ܃>]8^"(]1c7}x=;IfP* GFh@}jsñ UEB!(>@T<Ԓ[XΉ`G2P$/MB/Xgj_ |82$xL0+h:*m9E:: F 1 j=dx *IeGiS'`U(]+FZ+,0X ކiTeJ17/9 j/rP BTj bs& ȟQ`p4M@<#"-2 JM|Wqn8X~5)~]9F Đjw^伣.zf;e{n=$ٌ tVծ|NqOxB ) "AF@  ȡArJ}#?YCJ27+5-k hʳ&&d<̤D>nVOo^ju`ђ.A㿑T?הO i3q?V ~-9vZE7ԥ OV3ŔȷR.0^D&~$ .>&}qs$sEBAD = [jI9VVpק:ADG{nnoM.b1puT>_샜^?Fr:iE'7LÜx+[ߋf/‹} 5(m(jnr+tOg_ Tj-T)jIx(Ѥ'W>I.<`GfpkSQ IdD'&v3a%.!O'3BX棹W=mD/-) 5UAb4=<y7_9:xq[$cJR m-qˏUsM[g ljLwD z|z,Oh]ghu&贛IvS/aZLk:=?pxGu)!ń$ SLA X#KAMe8fgsr#8(Q R3 >#4Gư./Uoq{zL|#0 }&e=Q<с&v g/ga9ܰ`PGph*z]Cyhƛ Y ߚNwtZn⩊eA K}~6 f+kBɺ3ȡHGx ߯d0Hʐ JJj|L3}9Q79x2RM;qعgRqi )r?_0 pTe`-lzffxn`Bu:Inʎ?T^uO=p`q\/LVxm3~Ƒ%A+gi8|Q4)2q/yA*Qwb83*ɑ_GC|H h/OQEd*p|0%zK̢.D1vfbfoz ^門H^ܮֱ-w|?xُg/,!g"p8X  _j A}Np$g?>ǵC{[W*MPBhϫ*L!e^,_]b;La^kA+G~goFQ+8;bF!f"W ET|+sW~dYL&p -"CzZACztOY3lpFBcdbg}HjJ,h.VigR*/ aCQE=_0Lc+Tt˫DWI3ƪJq%c0GKk|{k,MhP#{W l6ͩ&A >9G!1 E5pI+invi^XJ܎!zoN鮈py5|>q$[3%dn>@ɲI*#G17?Nc7Z͐qI`!Ts!hOKv{4"v;]w4V&|*M y Jw3c/n ,ØށhaZE@B@D|'81_l8-WqW2MKE^ F53\rc5}ZU+^1|_ wgHaԛ{nSHui%[688y&sPf6C8ۥWmLW'9&m:4sIX4VN1 2qesi%d“6UpCwɃ0C9҇!o%Pgttxfm0z-حQc{vz.og,N;8RwߍBݞ%^KJ=qy XԚAbABM4JlU?U qP03ɨIhiqN*((z] P>:ʤl9s UdRh)`p(ſA}PEcW`:~IpKITBsy] Oז_A u}X!1s hO%G@}0)ų)R?8󗩢a":nYSҖ}*cc C=G0*QxVYЉxi2z<OQ< wlwv\F}o>5h%,s%-[pMg~Ywo\L{sAp*Ed4ӇzP{d7DY_|#TĶχdu`J$BnQd.$`)ligf~{ԓ V<_ƾߔkc'SBt2O? "ϳ"AB5q+CG5 _,©(aGc8XԪIكga$?O [nuɡ7r:&>IK@$q'P w :)ɿ5eqEq,ђTšy8.FHPB2:irew4F_^◗q'XAd;M2C  2 뢡!2SxWXpypSg8 )}L[G-KrNբ` x?,Hs3d0p%fr НB@;A=VmC\HB=p rzW̸;|gRjV̮yp}I@@BqĢި}G!P7)Oe{wqŠԚbLoqiXĝ@NQ1t*~O;Y=-ILAeE@ʯ} P gSCrIqM3èmpt+Thէ1q _=CS^]g 3ˆ i i 5W"F;c#[hyy;A-ن}v=]x0̒hw swo"rVzHcOޞ]ȈY1AF30UC}Lw\vpnoŨ: A,s\pǘ #smΜ#K]ڄӸENN|W^צ%%a3p&"׾:v++;b&#Ct,@< <{l,`1 ::X5'z<zy0ǝ "Dy7_/e5U= {R9Z)ퟨ+jPc>%8=(}m͢Tx"xXFk^:"=j/#:1g}`Ų\}2I7`Lp³veCvw ɰ#nmguL3*k.Ip0W*2NnO%%eCgKwK5{6#@G$5 A3RVɃȄ18_o4ݣۋv7p%My ςcE,VBHNytYDE28?JDaY)v+8 vӝ{b~U+5\wBvogoA(^ْP'Ղ +w&?fu򓲉xlF1;ZXo#<7r\ ߿Qbe~{TPSɬBy?E)4B$Jj[^9ы8Gt4HhX )7 )9Ÿ}KC3,V3wst `OZ-p=éJgz\/RGȏ+p6[l8UVj7nf-{K#%+ȰBk&knuhQpTez>KhY\ʽzG~ӕSLd/:j}$Y-e8ZŞ1UuZ{ @˽f J(K*D49SfqV @Pԉolc*FnwY|OmaHJ9>$[rp Wg74 Dj+ܸ&Cu"q~b%aaL#&9[yRtr}uik'2ШoZ_M<4$'QWɄ^[L$~"]*BN b#oΖE%STԘ옙0 `;eʈ4`#䓎抚eaR9ܐ'fG%7.]YOHZE~c<>Gu>ɭ}ooX[$b]'N@0}IAW\O/y=PnV(8һ OlH':XkE&㦇Bo6ZO}طo3.4HN.RZ,\Vz{pC_ʜZok!pp!Vg=Ca i5!%2^7mU nоIdQܫxYxu-8 Y!YNBAi#顜LIDSW%yq3&рy}HluҢ\|7O\Ek26>N`zqY +50 }6!N#-&ְoenrNaj@#l(?ɝ~J% FyVγRruC:lVtf9?1ЋZֱazy=l~v0e8DZ;iscERa1:=mJ|,Ŵg5{jݜ$_ę^Iq. //2Sڎ/څ8c-)W{P0i{=>"@̳ZV5^r{l3ALVߞJ~ۑMx188C#Bmpp,->z5.rl%s3\,{>Ns5p~;q5iAo$nZIzOBXJsbf]ȧb.._9 A%z2cFjmVp1XEۓ4iisxsdOZ!s+|V!q[sΐ7WN9 3[+g>(F$ r< 0i3<+1]uxMG*C[[YZb>\h_ =i/NC0_cib<)3V_dP=BF {-zfV4n/܊uZ\}!W;IJq< 2m{}a{oNv$1+6S|A {2ETfʌ̕7rOƮWUwЭp=y=?5$6jm2oLݰ2NWŘW=NzUpdn{?oK;8 /M|rd&уqIi5C,39Fő3#叶qq¤=h[ '{P E56S q=nH\怒&uՒ>?MC=vBQu^Řrg.6C"w8eO>Sz ۓb풖Zz^3fE`IW>#K DN*hR'qW?&e+>>s>>?O--p2Cp!wDܻ5.Tp4 |*{Ɏr; m;ͣ/?N\qd9ގ<2o~pT ߦЄ5Ͳ=$VH>>pnbDCA98!O'-!g%kb`^$8Y̐8gA%73c'Nfo>V a{!Qў"hCoNv&oMMj!v7c=C@.pYV3> J% )"W:*Oo&}K#: Ai:W(`'6+i qW6L-}e ,O8LR3ZvVlkp~dҤ2!E@?F1‹ZB {^p8K}W"Єmŧ~T8S}Px~ddA}P;yrؕɝۛ_u<e˼V:Cź/yxR8kt(x 4M$(|r ڀsX ʈ>+!g?1ـ}9(4p'w>lF1awؑ:\f}?|o>S%lg5G<9Ґ Kג+'E}:W+/ڽ|XY y'>;CuB8£?NH kTP '"p~q`!'d3n4r,ӐVrz 9$s .vdhԘ D2s*9Md9) M_ݻC4'1I0sfL] (N31|L؜M- y7ikEe-I)wv7;jvRܞ8hT$J$nX!}~Y1^-m:AAIV I&%FLKOB (H_V祵C XH֤@@CvZ!S%sr@),>,>H eJHز.rꜬS.kl*r-dp}, ӝh <[ut= ̬ =F2 jM%L_('頥u³MOKvOS2aVP$~#"Ud  p@~$c$0$I1r;G8\91ŀm๟/gj#xbh}i.8=aFa{G@>!afޱ4H 6=v @+c Ntۇσ@6F ! Bb![M4ǘ⪪JQ|q _ZsK}`[[-[.YKe-kN70v:H(9]YA/叅Z/2/c>n;v{wT0PV;.ƚQ,AĔ=D$Ɋ'(HSaFpPL E.DžVڣq ,? H-l R0XH3OP.Ao`Fl=~Ȅd,#c0Tܽ R$Vb)P+\͟TسF[₿(2Y߰f#j2Zd[*+$ VS&̕:=:lq(nx2@@?u$mT -ȣrMz_DS;F"GE1+Hze pJx~}iKmP8 L=˖wa{X _Pئ;a6B?plw;eH?RghNP!_蘛 nk6eqX %//YJPoxvKw⅁cS?;swcnWG#1um<92{ن8zO\l.-"{Sez*̙kk$!y&6dr/$ XWBwb7jX|Pj n7AZbfBo_F|AzATTGʬF q0@,u޿scst8[x|Ey3^N)`9/îp2,ٚ&d1*3g^ _㩭 *3x) cM|yi>VAI Q,ӹU㎈^/P_X|7w؁Zx18ZGHڣ)ТlN NA &!vs|Bڊ4@+wCORZ6&>$?JwOm5Fsa%IrY}2i^H^wGQ|j_3b.V<՝). +#sn' ddP{xmsj5hh/A co/ҜwZFm~6RCai$'P-^L0H4Yti^!Ӵ);Oa  4:Ty;cPow k@ia4u;-cp IdGi((ѳsCbN\!_-ut F+_{<"GjnR @6ߪW܋r#t`&D/b&hrr"Yii49o+}h ˆboCMIt=@UxGhȺoC^lf\lN6*))Rf2{ TrM-r< =u\@*[# 3,B^p*@. ^s ¦Ӯ(;]3khq[39b{ec)g7/ JxSf:0ۏ D3=>@ٓlûԇۗ1ů(@P EA {L$9OGٱ_$_Xy_D_dRh^8dDTJ|%f%J+%5mQse@|=LpƋH#E <ζr/uW[Q7Mq g $:~dzm&VK)f>-$^iQS3 \!ky9dq@FPݦwOvk"2ol"D%IRsQ}^:2]56B*!/ *fc;$y ]|?:c(;#!1ŽAҋs)=7^,8Z :kNug<0K$I@&(y32)[09H`E$}@Y$;vb5149foXP>vN&|>v& =sSB3ĸDD yP`? F^[Dj.Hi? /uO*:±:uiZvyX4wCn d=X%MX_ut2b=$E훺_l4[ @iE㈾8squ~$QA+T [2#hu%F^ ^;:( \|6^mDY`(7%yŧ=mb"Qا ΂!?@|(ELdGA[F;4HňP GΙ ,~Gd= <ֆ 6"g#zWJa1ryLC|e1E *.VmC[{jMBIG|M7 j[&vT=@NE ẑv5<`roP h|嫣RJ ϴŜ6ۙapT:/۴܍/mT!;$^OHA︫2k@0 ZL=$lY[bq"(tǻ; ᲂ j+=e`78(??6+{LԹxn?À[QThQXV˛ۉK X: ;qT4s2uRv;J-.=[6$R#m_KIhu:ՉOϨb}c}F oHo4%z Qr1`FR,[Ri pr ͦU`@ 8űt$3"?ޥdv6qE:*;0ߋٓʤד-u8/ZK·!+C`*E8AaBi$jKAdH2dScTy%"jbԈJsGfOXNߎ`$f6cA+$I(g)O `MDYH~3 WA,ЬQwoyW})l`(F[|3δ7_I;b1Vjc[/C*(߽|#W!قiqsձKX#,.V #O6>c8I3D̘}!K=c+q {G, XgkEɾsXՈ喝Qӌu?=룪8\f ΗR:UKb5| =AGG["8|)GFFB7x]}b[vQĨ^MzL5xoײݽ?.J,e -hi>p6}. Lz;յH\fhҞkSo֥E X`=PN~>^o쀶7k9އB L91="G8Ȼ?r|MG7raT͒x1[9gQۈ"4~tIzosU5;—:2m*hAchx7,~2y1MwOGaGpkvP Ywvi|ox32b6lw.7`k/>0!?( $ԿR }A&o@w x?\o61(Y^V3lB")t7zEI i!wSLR j_sgj1[2V!(՚֬n憎}8.`'K=a"ԋ@ >,=B8XyOr FQo!@gW޺7?Nw9Et xc txB;0Ôr _{J:qH𛯧:@ k- x}׳sݺ]"+5Z~r"ԍK- 1c10q4胊g5 toZIiCmU`󫑋+wgcN$%md4n쨳 S&,YAVJPhRi,a tՠz%i(X2ba HKrlIi 7|>Ty5<+QP'cb ι"#DeZ|S~[͡,~F\QBݬ~Ȃ>R ?Ȅs.3&)Ep0aԩ &Y.eGk1E'hގV~O6tfM!kW~ Z@JnbR~_#/`k*nbyQWhJwP 1P7ű?h eǨ0[/Oւiz=O$p ǃ);Hx.]}Pk9LTaI;"ucԆp},/ !X-M U=}@F9uy]AӢ;I -X`4!GXA~sKPs;"SAU'^k$[T,Z&|WqQ^|oa$jQYɹ4ϡaVGcp?168&PrBrkFĔ9Roaz(WRLursdGA\6p!v݇{^Զǯ=,?E8 &,ܪA8N`=t"262r[Qg(;iϭck̹|j3U8L)cǔVJ၄9Y;S*{ /OG\lA}M+$=O&r $N$H v' ^qbP(UG #枀܌NcU*8 V擱7$%ɯ8-TRsNݺsp)?_x'``e8 %o \` ΁ 5eJz^6_szk,5xu_NןK-5E(_5~<_pP03t |L^ #G94KQP(9&:ϋ̿*q!ekDpD 9K=fk~72PgC7]xAkkP39wY;'#DIx#47J0wpH9ǞjJCj򰃕{ޭ`SEAr]X&!sBmĮQ';jA)^3t`EVfݖR1S9H+̇7";>A/.$C0 IٶJg_P f) TDrm#۱>Ʉ Hّ)&oq\J94х 34 7:[y)JV\\߮:kHrA[yVvE\aDŭn( oXOs$8%kIoa({?s[5$S]k3 9@8) rj}SsasgOa9{mˣ=6 &Y M U9*8 P>0# 4m1tSb%Lc h*`o`:'F}6Qn9Z<$,7{-lQTDg#؇7 ٓ 0Q(S#RbGT`<簜f |-GBoA*"o.wHKmvHbT?(R ^uH8Xq۩xr~^7չ{wi& tu3~:$k<=(An/9ҖHD.A"M'XH\kflU 80lS$hh-cVs"r${ҼA7Gb5Š`w?H/dU(t#eY lFo#hsz II_}B(l `eTc[1,ǹ.=AMI.^`۪`̈́ѹQd~A$Ih v*Qc0˓oCU;vw81n8s T50R% \Af\}a#e@)L#IxT&C ,k1#P e<ݎ:$]T?д{-X'?ڭ \RTN Cqq(#Ƈ/uQIk bDlIJgvqVKHd޷ efʼn&i[4M!rh饫 YH yI,7_v' KAXɚ2T"PaC'a{PBB6M 1~o7TA'ˏ[ɤ%e>?Ǿ s/*F  pk(;0Ê[G'~w-+>,+OI}=Z?{-$O^[a7$Nr5w/VƓ룹SH:˒V~P|p }쇶 `gK!iJJh,v!1v>]QחgT9h^24"Dr)E17$On[>~_JNn>H}[weSVғ_ 5yŢ9(X} )K$W_5}! 2(uXkupZe0QF%d$و&>.?GU_Tt;)MlaydkU7jzRޯŀTU.l)ZwRXUP?Ǝ\)lͶ)4߷N8^wtP't6Sa (¡48ʐ- \6).ԩ_U]dXx}^ I# EL7Gn).blA@BB_~(͢\}̶brz݁&"9" !!(cmS5xZMS4br~6/7 (]Zt;2mim6TCDYe N < T2͗" Оd.%7xwn+yi/vVa)QA زpii0v??A:Lz0W!waD[x}>D'>~l$ciܣ1|z`š)Y@GM+M h堜 SNC Bh^fc,;G`d7 u(CHw榰k 5MΎ=M׋~wt8%xӛY"˺/L' 9̴5w ~RՍ5 Mx#+U8vÕ!#E@0׋Ij8qCQ )#Hv@A۳_bܓЃLePNPC:.B/gW.As(W, o`>{o r /%NgagxyNNuYw+_qOW"$- GrZlbzIxvu\T= +9KڬU%m We#u&Q[q#hy)J06* F܍ ƱJ*)JI1lZ§phX)(>6s݇Jb(Lh:]ה8.w<cf}X5z3=-tG\fR`F{CwĿ|[6JD9f=ӹٱ{?hfU;uT(Z.*UXъ0b粟B cq뼡6G橧Ȗ㷉 {~#QzJfe)W]9NDֳgbfIvѫZEJ-~KfonmSi^#:{~̔܊=X1NQw\%ܺg'ɧ7DX4XʹDCǗ) 4VnvEsXSS[n -oL& /=8;x#fmuا踝6'\-^S{٭-[v8ablh6<ݦs  8݈nZJq >E!e|@\;a>Z@^@&x[cV)sD&jctż~P<=Ե`wD-XYܙ{K%]0{KK-^ɶ sV)#tgc}$+2>ORk%) TMӳs]l.yHzʇ4J SЃ4dh*ly'О{yM47 b,L{tKӡVѵ<1Y8\ge]'vZ%PeC[7:GsU"(Cd:&/pa~+1T>Os=ra=/!cȐDStzd!1]}}ޒu@tz2rYJ BVɃ)km:8w9:js$ #[5,:9&qZo]l|t(0)( rGm/C}C1D6On?PZ<נF<̿xwD4dN4C;KhMDF=7ìϥZ^ߡ6f_ή9a<{{nr,kOE_=VϊwwU4ali5lb?bwөQ&[FkQ0/V@Y+QFwAb_j5j(&e*+ԓ/)ǃ2ҹn}LP 3\5gjK3&J&e%3P;*sU ׫u[̇hX5OY?֡Gscb?(C` =4Gˮm4wUE9X=*WFnA&<3eR*drex؎ӕRfhss"eQL)=<.rbtnA/Ap53Í{+سQ:s. wM ЯGguoɿHP@e۟2 4 /848 i7)8 :9``8H\O)Lo[EeYGQR~˨KK6da-My c㐟 cV%7BzI@" $)>(>hGe8,_ p+BU#VOm7KP;寓i¿-aK+Q?&#j%!y`})2 J]sHv`sǐ}9X(/0ᅭ9vボrL G!E#[ &I{3̷6u -zv۪$҃D]qG% H//PҀ' 5ڐ2Vk=#VKWfdÛʣx"lOh=lɗB3;ﱁzhz8gq#CІ0v73pϑ v!YNm9 2^LK)If}=o'ԇwWV"8 I%5K^ `ɢ?J?,>8o¢TYpD  Z-l0;zw2Tx@QE j) y0t3a-XUGFPӰ-X^R0 LxB1d}\A0j(`m5\Hb\ӻr1̞0mU/^ SDQ$ f1@~ QdLvrz!`= %㞐*$c %!r4J:&H@( 59af1˭"ugDkO;/ ~0+o%ѨTNecWu]ab>jrj]^Tm]x;W{zMd5b xL~(lL8~F IB[xWVGB&9;16FSFz44:OJOȭ8,Eا\<~eͼSQWJ`Gc3Z啧%ҙ*vyIgHF޿_RʹxrP@k^D,Έ08 D2IO;1\+Upp  ve]GY$ٽ`-w?Y n+{YP7V8 =Tv{syXpV%]`$cZ ~p5Uiq\JVCU*,ȃcm`5w.X`޵< XMrxJ dijEլ~2 np8`x^&^F~N0Q C`$1,K 8k@ ąe8;Ut8W:֕ _~}N<)ؘ~"#P^Ĺ?P睇z %hio!Ȧb J|K缶(tAɳ;(T"L#AD kDVG:68rnd9gW1>/cCh,ȫn7a/J&ڄ0g[Vua׮|1Cz.iOR%.w/\A`gGԛ4o[Mg2 'rݕ6)&-0(lIy|VǃL{`&/$ʢ<y8de$ğ8lp;V-)"8&XJy|=~B ^ߎՆ~IzaY m69rDՉ׿ep|O1ktn~a:__"9ruYyi($ Ә` z!tp|gwl7 |5 7 *8z] )(H@GJD&g#ķci)Hx&!.;eZ?$3/._qsr]WVDyugݫWt 6MiU:H 2Þ]kJWڮBwi5h:R!C¦O"C{Ls @]vj-aTsﺲwpڊΛj#gqj2Yު8RT>OTKWm01nΑ,3$s~Ki0hs@P*"`,qA DB'A $_Ud.V=R\gZ\%#at+Ԗ|[ ryLʮ3^䅢WGg@xp,Ӣ Xz(g;yT%wt71HC:׫P ":G`Q8TiO9 Ί("XJ2-gPDR-O(PXi0W<ǰؓb+Isszz t65Nmvjdsxiv5nx}}Dv9CI!Pȩ E^Kq(f)!ggVG "I J8LrwB!'KwM6tO[Ӣܤ/WL'֯m=Hn*֌_̞Ln-$LkkȾQz_qƦA#=ձN}dDyat43I Ԁ!cXj](v¿@$s-jtDX} DȂzpxXCnV} (//4`(GBp ^BFBp߁y@o0NU۷yӈ҃H7 4Cpo2I;uwlW +V2f>+┿OUo}<܄N}z' ][ҊeAiEB%qe=}Э9-h3II"k 4pʦgDȘ@dFdPp:||_"8d Yחw%gaDu0EF$A$WYnِ5n^O7@} FuXuȆGg+o=fݲ!D́ﮯvb[ѕ­7EjItJ{ atN-2>f7J\fy^ڞ1K#<5ɉ'Q kC .roUlGWDH%.qN%oL֕p%TcĐLK<ճ=H+g}1-AO}8iw9J~ Bqw2Lr#f㲒s,\pm^5}L:jHIF/?y DѵU+r"oɛ//J NIpNE&/oe[ ;au?y}d'i&P ,pvŖ*mYe3#m|=?Nz0/Cjr_2<<s َdDPСӮAo\YVʊ{@lt95BRt:0x;]( c3Z+jS-.,- P{ x#VKtpj -L|$Tlt9ذl%UG醌8M}Nl0% k  aȢM>JvQ.r' eh+Oy?- 6}SfKcd3ʢ p~'@4/"TOpO2P_h {sÔZCsNTj.f]4jN0 "6;C#fh9q*7'!&I:U֍$qƋZїGw.doSx|V `Z`X OW,s&*qθ:X>-=ڕ^bc*Eg瞕4'ꄫD9{izm5Kwq#䊋\!v"$gO ծkU\_NBPxvWfSY'$/. +G Y^7K%g=j\LJ=i~pD,/"43 }/F7VOԃq7". ñxƓ,quYS) jQ.,OӬH"?/B.-iFJzZA~7wSP> K:T.TQw<ԂN%/XI"!h풿vDx.ŢM{3pu>4mPyBٌ@AgI^c ^o2D@@(,z<@_aܨY1ҥz܂> V< fY[EE|yV I`t}#&e[Y4;k=F;(Խ^k@#F3;1}R:oW?q,ҠU B-"pd>ϵ W€[&rYs)9#}/]19 j*+1ǭ3Lx*4@pO$OVcBNI͵<$pi$ X B ,nZV=.f`ɇ8H PQ }ZtHS68F/``,KPd B0{]u5<;A??k,@8$_sh+OΪhTd{p ӗ3fYb=dnN 5󚎫@]z#G,+~^WhےP4 xLn ~4Ic+vfԅnpq7ovgx M]Z}<2\{'f k3Si0uW'[:ZJǔ01m"-A~p7o~2 cςqRZ$4,f9R kwwb49~vr\ e@H4xO/  d˜z+8Ǝ9bs4HilRJ8NceڏG ;%D&"L08]ˬ\3N.~<_x?+kTSkǁ.*^s*elx[s4[s{ҎnT*8cJqWwKUNC͜ EXGn D"HwJ%k= ZjKN0a!kPYɏΖ{c",י f- 5̞9?k/=imK}V CK\\2W6pg@bnaR`u!9?!0>+#S+kH(dY-_%x0fL>:buJŘ`anCAiIV~H1Fr  ⪘?@-ZD=`z7` 8&@O4d{'_K~S$f%I%ْskg#oٛVoUO!h1ׇvTO.E$CMϟmm`Oy<+{4qLN2thah1) b&GYV,,Uk ,ۗ|{j~ w֬W-d dP&v]*Mzƀ;=) 668OÞPCt"<:Ӳ{g)XG8_pUۻ$/TF{^S~W畒7m>,v7<5}oɳyKև%%N/7fz>v} m 5=b$븀m/K8O^]5 nF r\há{Pjr[nr[RLQ4kTly(xhE<1p&[%GK[Eza+PQwYN\sȿS?ji-{":{n b ZQ+9*XN.γi3~Js0YVkf.5/Q@hJDR fFzad BA1CLH惌c6#c$ME}TFqo\?]-նU?9X@%B9UJjp*.đTzv)jZ@zMTUζ/Q_- I2KrDB ~G Jh?'ϩ]䃩OX;GAaiM}ez"91|w֣Ҷ!Q2N21 Y<p-:kUC|d f[t *ۉvIu\Q롤f y !p Κ"<1Q=m F}Q#gjY0s"ă2Fҗdy!t9+1_0`$};„"!uv|ʰKyQp9)H(PPAq+ dzpwSh37ʜL$`eT#oy]JBMIfgR'O&Ӿm{$xqBUǴ,K(:GK;_."SV-=,k *\`bd"Q",9))j{l's&M/f_z9%dI|0\'|p93*`P6_Ӆ%KnǍ$eK>aE G"nu#ѳ$>s8? qgzzK{S <[ZQ#vh9 (%EPzuF[)6ƀt p.&͢0lu_m4Ox7]ߢ7w{8YxP[VhXtjOyhԹSQ_1y1{a޻^fMEv`U „Tr@N,A2:ml;І@5>Gxf5k?Wv3?r`ҏΘXI)*[id7b6k7BH  !txh|N LUŏ8鏄 7LidfhbkjȮ}L;)gDQR@:N y?0n䓴?xVj/ME^pvʋTNљ8nafWן+3yFtBLQh㩏r?MyRLN+|Ve<~{ms~S` UތG =cVȟӅy1ܙ}8Kc̈ze^<ϐ#c?k *>'#ΏLyϝty0}x+ )F Y ?,}x #E.i;"qWKo:+2+YIUL/꤉|0J)кW-edӀ'iYU:) BHuįXlOԕ?R U9R^_by2BQE#s SV*TYG,W V-`å(h %`Q݇Q#F@ #J"7{Fv pV:q}Gu-2O_!/ySpos 7 y9s8fx}$<^Zr7Q {! ǠX!nUou1w[qr:/} Q?-+n,y]ݨ ^<4 K)ʠP4 M" )I%|dzmP9yP:6x5nu1zk$A&tRCL*V]]%z#Pf/'| Uާv=84 R#a%dD¸*H[J4 4ᄆLe)gG౶(̮yJl존S<[yn!DFvUA[I?0v&;%PRr'Y*C5Vwi~cUЂAa~xqoث>i+̠}EBmu#H|:'\j;v_IxVoIBF2K4oFK`a8 C`XrHSm(B>$!GUumWM^&RmT&iMl <f˜vX)BL2ldȇ<g$|2'z\DƅnN7i )ADXSIN?-GsnMCBAV3#r]TtNGˑ:iwtK6W8nJIĘB'dh I61ϳA".<;Y#DvsI< rRܼ{;/}ұܵ~^z%x@i=w·y K'}^ui.VuͲmV } t2?85R??iӈ6-bp1G99DyR̒4ORǐo +,0%r"̗"#0"|c7Ͳ(*fl .1@.80OeTiKr;Brޯbn֛n\Rڭ|x%́e˓'|' (7ci-/%/ sҦWhZ Q8dyn:&k_?g!YJPx`z{ӄp+a"B/8D?ꊜZs}\9nwQw/"6|"1~hm75\G`x f7fiy,mע˯~tQ.oj^61YuT~uj?nP[.h۫H xlzM@9 {rt̥XO,H ,E"Bx4. 9&${+w"xK\ۓ9A6ð &ZL0ӭX࣢mmes]z ! z~cLy#ب1ytf}/Գ|gA !c"OzֱIC']Ga Ս0xE FC3Gsxݿ3!F4n4B{.qO7((0'Aca[b }o׋#Ǣ`k.&.hURS<պ + JH>Jl<9K tn9}CucPA0!,D"Od@Z TО /Ã֢+4Έбyo# ]A͍[^JMZnmoA`mN`c&0zrf'Q"ízdnMe )Z<88)2r^"p\ }sեw#JULi9.y5jlMz6vi#i{}:1LkPϬPX}cs2q>]Yu*kWlR-뻕kQX=+/b|T+ gLsV7 G ?B£YZGͻ'dx ()>kP'`W7B8Z%WӰW54bZ(/J{RcNmhs-fU6n@U0Ti $qC[ө)TFDD{6Dei{k!<.n(A}g}Zd! 4E<׉Sva.>1Gyk'B90x3k}cEvPm8=M]?^53)'6;z:C\ҁ oM"?wDT Tf ͽ6R@n3ELHH", ,"" ەWvNzf7nͳG !0^[߫!8${Ny`6V)F(ĪƯʷy+% ~gܣ +j3T¦;Vm EX^S0<=dI' p Ϣ#π^-tGgĎ{ʅ%P1ОK)X}F C~T {5>_ e}z0̍iwZ~(جOk{ݸ?&\6ZvqlFcbTU|m [VG=C?ކsʇ<KG׈ H9)|wV>嘁m B[L$(kItP,G@>:^5= \OwM:Ӹ$E I ql*߰|EܪN< rmwzc1O,eP3C,HXK+҄1RM"Wicվ9by#wW 8Wqa$"e9Q,ddX7؜ G J,cӖcsBB gCA9{V]=UEUwFaoMɋT,lGbvե >TmqL%9)ܔf(sZ*@+Lֺ UyxI1_X8uCF]h;@$GP!Bj;¶,/ E@/pɫ/ ƽ_7bEb$CO\\:2®Qnɢ{QD (D2`>y9^Aȸ %Ȫ [0凘Rxץj?Y"`"ʼ+zKA3X[뉁)e.ASr3Lxn[p_Xt/"K·T*I9ב1z y=($Hv_L!rsw0ǻb'U}~&4%؛Z`MTH2ə8g;-+h)YV,b& ! 8☘?>)|mZz}:љ3;Ӹ#cfZ AgIo Ⱥ!^gj nd vQ0@ɲM|ٹmKjJЙE{t4"f8z,b.ZMqw6gmcLK(!y/Rg2 H6 AF(Ny9 1rZeX:XLh'J1W\+9)=9) <0MQqbv NABa-~?c.zL_2OJ>l|DM~Ԩg(6L%bҿF++]Edw:]dP i" bSqL@[D r.EY5{ic.`VR*!Hm:q!|rWDh?MZM>qOTюgy`%D⃎@}$,bjH2L$~Vx@N@w2=vǓͼS'PlRf%IU/+/ tw߉z7#qoQn<qA3Oc_N<-*$[Zud@$ek_HSƑ RlJ﵈́! a@', J.`59V!YVI aeX7@Qm})8jP;( &!tn1 R{$'Yw!l9Ai ~I7<dzxkff4}Yo3T-񹅋1,xrB,udxZ$E4 z;|kqkGE&kc̞[lt͇쓾cUW~tx~Z#jc>խn+ZfZָL=f 0S;x2ݡe0[KGziֵ^udͻp_gk ƃϗ39iݝh>n愵_lyO)b`Pr6ƣ4fD*!z+~7k3 U; 1)fq$i;uZSa+`4NR⢼'\vv8zy6BU"Hn0(ڟz-Ns  n>T3_-XX29cP@#FM󈛂G췪 !\8@i<'M5;ECy'чaύE!ʑ -{ߌbZn ҩkbb#ަv1t{ݭfӢ^CYJB++`}qm*ҡ0E=:#(rxdѶשA8@ZQxN5 z gys  ~r4,ɠWD!ABǃ VG)(  vb-2ǐP1,tp`}9տ붒?|ƜsZ|MMQgYul{vOc$-^exhЂ'U)/l+6e&l(CwEyvԆ5 -*;\p/{J!&9R@zWiWN&D?lƟ ÖIH"4T/玉[Kh4kCRfabzT69ݯñtvP$X"AKE]0~˵>#a#aJ`t=JxHym5l+a.cB#&[DD3̈́R˺$&Qd^du-JMI|AhUv$D0cf=kŷhxRЉ>u"a*J.\H3{R_qA?A,K/!RYɥ1>29W&*и2CiGU ;>/yl)~x$opQrS5R*A-Hs%}WA7Iu鍑tU0mgNxa D;wLk*D`9 4~t+yKs Mzܙ5~/Оca^k |[&mf/dO.)U/=gDUA/I'uwI۴Z^-]rd k膱v/GX{C39m 10扛{~hFfrXq6{|O,dY'YOِrt7oIl1H'ݜ=|^o$!b(zo"m7&qnq!:MliXjtu i͜-om|<Å+>q+2Vq'EiGK kW84vp~^FGiꊗs9)˅E5v!(cUWtAUtsP e;*NTI|R N@m]Z4[~dَ LQ"BID>.ЉxǢxǦ *aQkw'i+6}zW]\'3a]~zzc(;q2mR+ nnN^iz}S?%\0@kArV@L ȑy87 T'K#q0GJ76eB*-kr~hMt&HL\=E2F}wi4c$ 3$I[ Nw):F#_S'~L8],ƑylhK@aAdoa8E0/!Rx٬.2=Hc]Ȁ@GWc2RO1$ӵ-l $xCϛa++T CKN|LZ> szQvT^ԟkv ׀kw~пt,/vpk=dO* J+,op <\0ԣy51ѐN&DZ3I/2"X J=mO[bucjwbUz|Lc* <{;يHh7!6KBJۃm2[WgpU(MV)>|zU!Q&!|.Xkkz-,6K j%+!<\8Zqj /4 ,n>Y!ԑ?h"4Y +$8g?f!qy/R ^LJE3 1rP5Q|0|IP)O֙%M@Cu+GM-(%LwMB9jumVaJجE3Nww4GiQֳ H˪&G@ls^ §W8דw3ؚ$N/B5ic7F3yJxELX ?g n킈컅;ŋAힿS~4#(bU̥#zey|2xeB=C[V^RfKaƵ6HRl?tYz:83[7t}Y+c7M"vW;Oxo~ڭe4]DBǎYzI m^H=UzF$}gw1ͥ7FbgvܔG(o6k$|>2fp]`66 mJ4L2v zSl. eNP(et& iEnZgvajuV 3|nwlslK<|,MFP=lO cI8LQisR>fС[ Ә! 0sk0sIdt;_o,o_%]Rױa6Ɛi!m;!>3.ʯnWw3GkSNTߜCc|4|}p[7( Yv9ޣAkk=b1I7E]>^>uKPLmW@$P:l~Nu4ˮIBaI`9h='^&%sr+ |ōvCƔ-#i. N/"i0yX&Ģ>±8ŨGr$˷ۯAeұ3RR<*iyN;l' WW8LB\QHChaʢIŪj2OH ar>8.ǽ1/ؽ]g+X_zH 06h$-U=7v|&l$$2JIR .՘~̕umoc R&PvȊX§[ap@tZ]7/2%p墖 %Cd 1N}{D67k4J6tloNIv/}7xknSDbXXd%NgdF(+D;fa=ZknLI)]M-ÅTʨU/*(á;z[Mw g^9vQ3nJ~iK9)hVv> ?.wj%7\KLǭF=?sD)NIM,H(vD+!{}$6W0MՖd_!1ٯK_C >7ă,h#τnjW .a鹳g_rbkF0R@ =(HT%Lea["%IMhd@!ni1 E`/i1ҏtwD qc^? 2,] cn7#c q Mcv?vY-8twCMX C 7,sa>4XWU@le?1z FV(>C-\XK&u.w\ݯc1hP זC R,6 "*56`%J,FlsfjoX(H&ItnD]"cA|L5|VAbz_g䂯XXsk~)/$ZCQx>pHQ=i]w+G3_wb5~(0 q?(P>#4IS c[`?Ma%az)NBS v pP8BX_Y@hViԧyۻKb7Σ a9?A-V' sE/.8PO%Jwv2]BQSU6Y|"}8aNKRMF>< _,\wXG^:,9+!J|ޖk[>B,dj^mjg=@8BowS?>֗ Iu VGZi Mi\D0-K aCqz &,u?yP?$EnO+$F5+5rz精OOF>9fl*-}ĬJDБ**+?̉~&ׯ{FfOPAI,dWɊ]d/ %KR@L>nvN))~v#|kk>.n[11U2U1uuaW󸅞+3[Hm߷jZ"tq{,GXTt\S.8*+ŴͦT[k0H;-0#`>-*JnƓqV Xp1~( _2xfCcF`E`~d_ E.%}X~$7k뭝aRe3\-rHRqZ|.!9Xd *)|N‚B;?>ܨu͞HM'JhwCB?GY7~dW=֪vIOb2Se(2A>jX@Bm ^esz#7,]XM)kزES* f ^PlLJ ++ 2i#;+  '~QE'MW ËqfY.x(t:=%9%5ތ6+NAGlgwZ)SbmGq>x6hM ⽻wڻoq̵ % 5ƿ9 dj,Ve(/8Rj-0A# K& Vl78GYhWl+@Nʐ[bŃ,Q5ȬEy9'GO0ztI;[r`&|qCCX5LwHyVBEԱ5h z9}[†%CeTVU`W5)T0kT*iEB,Do #^l!S@?W)J&<г=hx)$ÿOiw,q=lcv+,q 2{ɗDQxS9qf#z3aTmy5:Z$[O(`E_bNTehQ吿_:srYIX$ T XhPg!4K|=fI4YD^^Scf==beG겁qϬzImpzW5{jjW-:>]e?6Bc6+Pr0gn.cvϏoIϰ|övVV ~CÒqnpު]jܰ:0MB+,,pɐ>Vdcmo9 }yB5K E_.^H^cφͷ +I#E@g%,C;Hr`r8v5~sjPk߰N%~GDQgy%f&XfYO5N@}&T TMi!؁UǡEmgsTۧ'T|^"G.Y EĪZ$z[ycC'b2Es5U-E< ,a T8g'7p4gCL֗B|ɤ+!}o ]g Sra+@a!ΔbłqUp y a/_5`^~WmD-ԞMUW,i4*?\e]ћɔ \Ă(B26E&NJt`r ]&e^mpB<`fWi {3̜}ZtO H=,A}Lm{ JSPu dQ2XgqJ[PT;!$=w_xEhj"֢R#y?}e(J(+T,<`S,У+ he!iԤՓ[ٛ~Ov;oEX 2)cf +1|] >KJ{NϵEn]Rucz:-gFޖzZJ6nCLE A }Cw ^S~.ұTnVeSuu1UiZ]|zeju{7;lO]›X5+f9]|=wUSKR1&=[·IвB ZVM_`'S7i; g80$澊?Y#=Ǐ;C&CVB%~!.$ J-412WB7[3W͐vQw3Z: X-xR"gޭ}V -g4摪grEuOO`T?PccMOij oȻ]>5T 6{vZov)+U^~HrB9ģT*WVDq[ۦ@ߜ}e()0>mm29xv1In.ǰ'_mb$Bk<Вw9^vquAHޮo:n^î&M%/,1Y \7)ҹHa%붩͑CsCNj@g@z/OCNRҮ} Ck6]e/|O]Od1 p hWd*_a9V*twv)?wB<_] $-=w<uuQ-8VD)’G&eR W2Cl/8A-Vd-P^$ >Sr$K3aWfVI${. X'_|\Fb!C~ݴpr?~?S $3,K+FG!tHLӗhti]m3G}Q3.>N[r}nPeQ>% >:Z9%.̓2 iWF9]6׏1Ȟ POgqh>ʎD^1~O Gi֝`R9eZqt"_d,h7Tt9GA;s`'`gdNZxa߽0+7 4"J(qVI_ 2XBK*B?(xM( l[7\j_{qi7YГf^۽rc%v)HDDo؉Fyz\h_N)!dId0v,@UDTQL1W+o;έ"]t;vR2ݘpHnv+!gya!g ;giw+SWoPs4f[qx4HbtkAnf<8]3katss\sNIr:.5$M҂NwaeT<{[߶<`_m?:y loQ%>{igG}=Kfϭ`O$>~\Urwau!s^-EH x*'吏aқ& 5qHrW<}V2iF0%g,6dsX0XS>;`%}k*zD]J/ >zi, CY kz_;( oxřâA2#*h:V9epRmӗ~]^{vfr唿 *a|K`;sz_枯K2jEz:#Y%{P}Qj1wo͎Yy*݉?ox[Zys,f[{Q b ow0Rb,/^"wHߍ/7Gй:/Vo,OK=TߖRLwR ^g326(נ4 'S#%Ñ5 v%荤l?0/SG?TU3Zt}$s{9ԧb,o>VrYB'1qwvؗ#7z=.?/V')9EH-J򍄀?%A}X4JWV1uBz}J ͨC3n5]#ް`{n/H,U6͌utS0%@.*+mD1˄aTώS֍ '2Ir$#Ipz'ޤM2Dp[]'D٭6tFB镵P*9zUI+)b7IЋ5R3V WHǥU>k}h:em:ZyXa,(-%p]|^cD_iZhi+-{Z"1s,_=h碐U< !6Vr j! Pm5ĸ\ٌU{cMgw J~Yk gIPqY@?(/J:˩:cM r.Mv%hkԢ[}rUBnhR\]nL畁zIVlIL&[HJ#"ny6_G6ţЍEB?O ۾?#.Ȍ4\~(?U.[upoGEmڙ=/l\meKQvJxWG'aV_nDx-ޗSٝ=ILpD\n_"Tz:׮fD4il߭~2}TeHKfCO2 ՕuU3 UZJZ*n FD%Kq #KY.I5ٿ21X>MXPpx}^&co ݤ2+926s#oS0C]j7 ϓI6œ$Ɉ <] {==_WZ HѶ䙚9*K¡m~ Yj]:M}wWHu6!FoŕN9K;NǐgOC_ez9šLd{Q5 :ޑ\u?hCK7:يP~9G EHfP!ޝmlo\#颣V΍sT?>{r ( -iG7g@I8Eu7A\0Pտn xWhX (,dW{a_DC}3*yja 4ʋn"؄lHcǜ 2ol6! }ߨS; > Zߛyeyʱ Ȱ^g2p-MSVQ +,D 7JŢPPUa=='7K;7Gj G|-R"vf6,'qyY>zZ&(^# "I x?2wE.ZjhZ3uUu&A020 ySTAgX'{O+OD L5SHP!p#= UBTUxb1Ϟt{{ / G=ޅc.Ų<wdFXX~޻l4l؀6_d@Ku,Oi;KM7_1[B?H3 G mOA?pr [j^[s5c͸B(."1ٷ nPv%$L/Y W809JV0J&_{;vmp6)3껇9~fZ g6{(^.R%բ Eα9K\UP+$J0 jw X8mۗ|spxA8w*5%TRPrl7,jJ@R~ew_a/nlv;#nS͒[ot0.@c%<ih)]M'ogT|U5| cC 9 U ]VMBL7xb˕76UiLơؽËr$-X@ۗ)ae{37+3]RDRFZc8s.SP}#͢w;_|{O\ux/]oev|KU\o W|?sکr'M2-T)<TۘZ]Ւ'㶋ID^ScR'62)J8͍8~9q#Q$9%6KK\sڼ/.ހ-C^ ѵz"ӎچ͎Sקޜܸd+AAqP2b[YӀ6By?uS=mEaS:T[(tt/q;e",hlea$+,q$Zih>y??:;b/NE_QdCg".vfw2UUboˢ 4x>K"k8Lዷs|jYGyx6f(Psrj{0lne/oZ."v`}/VU֝;;[Qxْ|aɱgf`GXW +al\K=4dѶy4% As85_x< ly+N4e}]fe~u {1+cP加eaWM_1·:Skxd2уQmN˓$,#E>EUL{O$7wWxs[W+FT»sU0 |lQv2{ke_Lٝο#),ՌƐuceqY,2\3^{5!|mGE'gr5꼕3.J}Z\VafŒ< 6%8( I4͑2dXm(=Ԡ TICZA`J5WfLG~bC(<S80 \=h]c7vLxwŎYy-  />IAYO7Pa bMq5Ͱ) 㛮3m1jj%më\΀r4*Iwmѧi-=}]? W6(X&k$?}}+dD[jn;@Jw\U(+3#J<]tHٍ'<\Ab$rXԡJzKݞ;4WHާ"(9zX_pNEa3W95=xĉ,: ^w@$ }Yؒ_!֬ 4743 u>/ު2V̕k F|{qGI>p D`%賛5+mwZvh4dgfYChn5=+> ˾$N 6jǐeZĄFSA)EHxND.2"y 5˲?H]z#d:oK#}dGF4S9%=ֽٝ7G2a8=Ӊ*rS w̉g~Mx6SJtl|׻ֆ!y͌5ãLd^u [3Q:0!6쮦a/Iu~P/P7[=MO]H|ƤzF L?TIUycm~eڌ;%} ϣSVT7NJR&6y)24iP`8#' dwB :㴱kUp1'`rx"W8_=J|ҘW8+ùݓY5KQPzT3hZd)4` t?t,!uM0FѯsԃwO+v%} -a{ e:P鋡Jť=(_C^UD42Ͼ0Ɍ7[MJDLL̔AGJi1r=A? p8kWpnؠRſЧDBңbd88z) dO拆&Qr>]ckC]`Ic؅0ۜ~^x[\to<}k&̎҃tV{wGTaK308-Aڭ~rK]u_ 왰o$_N>]cŕ8~ᒳ--6!Wn'&,&Y^l_,1oǢnWQg+gCgøP:lCG֮~8>h{Cy´"gؽܭ]0eyn?PKpgpa&hr` q셁P䄎 ,G\r}/XjAaE\{g.7Cwp腎FUl5|JgLHٔ7h(Hiɱ\rKAq?A(rYL!O \H  s`Sv&3V·ELL͐#~WdOFܛMfDzbq;V(pԎ`r^(^%,/jB7Urnn8ˬ$ࠫ0EWk;.N P`I#r`\f~izh^aOdp@` rvҬ'=eaIt_%/`Es:K"WgÈȒ|/^r9ܷ^;F :?Jy-!pȭ%^Wj rBͳь@+ Gϳdb?/ZecKJ#;,L>/Yz祒*!% \;F9흻H/yŕ%93x#6Nr ʳ<4 ao'u4Tbm.><,לw_akXâ_ Ƨ}h4 vc}eh0F,l1Ux0Lmc 8T3Ry<("eV4+iHr0źB\-J{ep3 񸍪h(]^Lv2?^*ìiqɤVkv=]"GSKH i\>sׅ(_YzwE e)$ 4~qil%[D~^d?:f'78dT۾ᴙ1z3?_yΏFpmBQDM9k}=WM8VZ^cF \65'+:4D8~*btJ:4A;0_|XZplۘ"p#٩d.s8o 8;ي - ԇTȭVS8ˁyЭ8\ c` Vhk 3XoA^cd%^(^{sԦD팓Ü0c}ƓK&ㄓNߝ¼Ovg\sql4IЛӧT]| |%zP>ܲCs}\%t~j?#QU -NvBK =Bv[X@N(alJ]mt`/m'ʻ\G>ƗX ɔʲ$8OuUP1ҾSeAJcFRS3f^qsf|-W4wVq1Q@<"S!Q(/eÐ@#0t$4_McEa("0_je;kw37s,±NGD9!aɮoԞRkO7x]~ e˩KwGlp"!Ls*Wgao얓@[nO{ȰǬ]%ehƲ-Qz& &Li)X`()CXG0a9O[o1 ) t24D:I@RS>Ż]>H116hڮMZQtYE#D".^Chf0 Nn@8q $h]~2hMc&$6ɼ\ݛ9&t10%t ]"#ܡ<~0eJU4HoL*/H!QWEOaT^' q /мHIDis[Hb@=IY9b|&ws,P?"<=Wߒ HHJlrOO"*dF| /l9+kWa ,o> 9P7=qAd[*!o0D$D04B@2tv4T^.${P^]MJ6!uyZ/K%nynH)CCO?qz.'Q o[v09Дʕb%Of*p5b xx#A#>WUIl({u;{猃# Y fCZN_b jB09\ոQkV}4-ʃf@ 5k/]p}li{JZ]cbA^ u՟Tf - e}ŷp*yx2X${:E^is-OoO(Ɂ+sd"QS 30%1%xFS?9y5;E YXQ 14{4Ϯ-UFV{ 0f1`4A(x^ǿ&`{[[ + ($3ػF a1ڒpC`m#7+Qp)mDɶ*b {)X1Ya̳dg}F1ۉ r'!gpym(}g{'Qc̗FE/O\ .->FTk"׳݊sU=>S9쪒6%(=/ZcYI /7<$Lr=N/>ZyYWQ%D?J,ʜ/!Q*^ ΟE,G֐ 1HUҖ8DQHv6OX;m95oͮ3#kl AĈU-;8&'DP*qz<녝_9$XpLE }tNi=0r[f+'2GMGme\/v䠷w ~4vG}7k˪+$`[64\z-:opnp>>ٰa:|a+I[8M̴?bk'{M80f  3hw8s*Pߺ Kt HɶwgPciI· "4E)E*ŅoU&,3I؊),vJ^Mx4EVN3 ;sn#bZ z$ȺԗlmsO[+BTg;"V.iסqK})o.%fiRy:Ivo&յ٦ oMa;R͟KWx=..%=+fdҎqɭJB*ё/E}'f ycU:Tr*{m;߽A|2ق7*4 )*ޮ_2ߘKYwUzn oӉx̪CЖ6M}ߪs299⛥W ~M?IuzWy:"Ѯpk+а1a`gcDOwD'4]F(&Ȇ%]0Ǚ/ɁYs[ΌŘ vݯ־}u|.MϣmXkn$em۽#"<ȿGfX󫄰!2l~c'֦i] [DK:RnH#VS]q Ә fs46BD ;G ;xkpwu00Ͳiu/j'Ϝw+"qvR7?uj~tŰ=鳪?ڻV|3ګeK6܍ZoS#@3kln{[+l GWQjMxvӔvRYⅽ{( }JiLAz w @|\<=15b6WU;. ڧ_nn qxi.}h9T}؜'O'Pemu]1R*60dxHRoN3řuMw)lF̭N:-'_U?kr{R kP=/%yN~h =ចNaӇmyKUQ\ӦYďLT~ˮBYflE1=Vb 󾹫b<ץp="ͫ$cWukT S>hLu' 5?n| )*iUѨ֠"Uf..ez9RD$%^(82x vnc$`΀DWk?DPH5ySw6u}K+S m޸DƏM#K+$ "J]Ō!='CM6Y#y `8xԔet*\<$R!R"j?"e|oǍ3Bddv}4aC,2J^PO.'&R~Nt}Xߋ޺Nt\z2u^|Rx6;ΤW LBI6imKuIz;h"*럞36Uϡ ǤSַq)cnYNՏ=?yEQ`He]Kv2(9 BW"l#o3[5yfkO xx*t~hwg 1,B UknqNu(⢓FӌAzBES)IFip2읰7V(UQzXt;_b[?7iyC*HWȚºsj1Xlo q0aDi ~}o/B8| JN2L0Su2\L22q4"' ^zAm6cu?U/oBKupQՑvQ ኃ@-B[9 EŢ\' F7i;yXFDԄVå9"YɹJH%0PL,$gfuNϧبP9~;,OZ.E  cN$7uC%ˑgɥa)锍|:"*f 2i刈~%Nx#,hv BS foPF-cla<[*0>G<ףltzdx!3PlOz,8"jNC5}tOp573`?Ey'b`8esl %ٌ8,4$Mf}@Ak.'b `ׄf ݕ9!i|PXNT!%RAHjQp1(D h6?KYQf/$PUTV0Hg隌aU-z{hm R?E(s*퓅7㾌V,[3tix5 UT*Vf.&>28ɆOg18[m'HF࿂DG*Ul}Wwr޼Q`UJC>|>umVSx*\gC8֞@ <.Pw% zXDçLDxNQA<ڼy_ONO\/Tybe?K.uv9>K[%U^ uȴ /wu>{- -v 0ZQa} A"+~5)[g pwc %Xyt~rQI?~ca9 ?ǘ? xzg;t4BbԝKXJ[V%o&,00HǕ 0]DZ4\FC[هj ٠p5koT볦wDEyvv즐^BҵF2wyXrS1FXq+ELJKQ92{˙Fc&[oٰfKut T-n>Qi[4x2e[\_ֽs$A ڷ0݅ zY蓱tHGp]npŬ=.aж@w(!gpdPaj6_~LUkK3w57z /8qUa3[-W̛HXE 8vEYs&y>-gph42l VqT=G}vbG4bTU܂C=T{C6`|ud5 Ut$yN!l]X؋FeC­4ԜKBA>'un3apG' )Ƥs>^}9&YvvLj2s!t=C2nOa`pd]T5Whe3wEE^rtJPgQfOʇ>tZ$08&kjYs" }{%a-#iG4tx95Tb#z SEVo$v7QЛYCY\&dt~SyQ2ETW}`CezIXЦ@NucGtgggZÅ:tH #j&o?OS50y^sH_aj{|1PjϞIގ^wWسjR+'-gun9C}DfE&P\Yz%ԗRe'2+}uWg;O*Xd-zoգLZΝ4&Mf7Ggx0@sZtAHD83XGP7(q-A8Ә6#ܰZ-}әx^<3;犳:S k.D5״v4jƣf:oЋ|B:{KSyOua㮲[KS]e.ZF|:# zhr%q˯+n Kp(&G'dWb& ݨ?Y>mLM;≝& F<+DX )q\'i{!!B6(1 l~䋊Hs)j am3I[Y۴e)r.m|4o?z&m-pn>EXGAʘEx90"f_IR"Q,qߡ%DM_F9@X` a2.ϳ)g`3Sy$`Pv9Si{07G2Jg0db'ty&!# OgX/;K* S SGQr+m:3ιPsh@f׍quZ*e_ ^`0Bn#}[%<,-3B6xټ* "J^*Gs{thCS ]ϯq.pDP$J8>^QQ@:,IhA&,b$q4Gӟ,y-Lw4b",Tgi(v+F1,xġ)dkv٫Y jl>Zi%ҰI sr/mLM(R$#!n'REQRlArqNÓ't9IW)) @sBC-IMuSp !$=֮^"GsL}|,nVuA<~CII FiDH8vMp2)1T1GeWN_&QOYg "aaGN=7q@HS^rb̻16W8O[8> UWq/(_y/ˏ7ͅK{jxSYYy/wfmr1}]ER>u4b`!I1⦂$b0,\Fw8|8}!>#)4V≻no_5K DįKCa0 :oYdqayhO#Ezws3q2D/凯:U|iDb9|H6hz^94AgdV7y4GQ%Y~2Ж˧iLGRIP榰5MQbqDUZdN!|ËN궷w{Zw&ͪG]1ȯeƕӧAԁARBL&\ Є%b(Qȉ[n.?)As役lCۺYKVjv'!y_ Y*gQ5'A 1#,%P\sє$tO>DD8 -$NthR$;[w]mݣRWJD;rZv{TIf$c#5Q G%i̥l6s.q݊Tl#prZ`D]t*MBĈ" %)(οA6UwQ 匄 A>]*/MuKU{gH?_OVOl1R&li>Ac|TĚF/#]V6ĤT+7=q=g=~9<x&mBwEBM{5S~IQOqb4F>FП4n80ЬH W#wɨu@yLJ]Z5KJKc¨䂠5 u#{+yO+yvcJDxR7\^EՆ7]\y)N9tc>rІDĐ2L\0V ){ݛvs(mN@I/9p-dȟ<3!x>AXkߑ1yWW_M!~y휼w2bck?lor{ǛXc YfJ$p q/q+v2pͳpam: b2[ùZsZJ A9>:ڜuжZ me5Vmo},.PMj^P%x~m^7 6ģmRY ޿F($փ>>u~Qa'x"Ln z˚C\z(z Nf.ԥȊN;5x]D?1M#5"IKvXSJ:_W`!}:Lגz vſ-/U?ۂz/ |3\y/ bJPS@;,1>qH4.Nġ |范Yj5p7&}zap̀V˄R ҡA;5uTW~^/QIICvp8!oħظLwqb  4Of\'Vjw>C&\ŽY,-\~ƹvl|/UZ|AM*F^Mk1Z.5XP?/ڸGoqf:k6?ЉWN¥`N8`OE*1@KE#CTゃ',yHs0z8]V%9Tc+-\p*SEc'PCg8xNWxIh65hU'&TIy C:w1GS*u~#^B>u~I 8UaP ;‡O:"y<vI=Rbq{9:Kk`Ùv,!Ϗ|2VPnfIznXu {})ԾLB{ZLP1k8":J)9jog>e$b%FA;tŒh%%4q0bZ't}~8r{BÙc9Ӯ5,g}Kg/R g[֧OF/,V [3%Sp b釗/XPՎZ%DY\sRQ,zo(@PtrYfCZ؊:::ں6+{o({UD|"+rbNESZ(Pbl{0++ު-'>5>0{ˇd$]}F~E9J=Kgrk3@\>~bxmD$\E6ufS$0\ g=d&k1OI?ZGI:b2 3"`H_xl،܂JegVm rp~# .X yNWǛZ]$y'v,x,x#l#ydP"CA1k Jj|2ke-Nni`4!ӌ |&yXw6Ѷ@R*1I.lypt$(ѫԊ#ۺTJy+h-Q-"`Yk`<ƃwD e֐LTkL} ٰwcw! {*cwO_s\We󬥭Eǭ'c]6 :}Hi4M}7Ob.Sd˅c)MM S Ӓ-A$f?i]Crqu~B/kgv JS9~i| +ctp8X.wQޅnۂ۽Xl Ի˕|@8tOz/.22b1ˎ6 Z܏ء1CSP_|( _lp`r CqI.Ib͹PIc+`xT鮹}e#&CKW ?v\F,P4C~o@O/`,PЪ-P쥾"M>iVsbb_?blCNKvp ,2PLYd.X$ŸDK5\\Cr [gPzB:9)/N/(S~=@ŻS)soOl])?Nuꤤb3.& K|D {%kUP="$"sH GF*%s8ݻaKt&7>?b͙Lyp Ma Qse.GY__e $ E9+MGCDth"EN!OswWt3 ˃ok|aIfD5ĸ/Z)9CD0\d;>,,$?ZtΦ{%>S9z2HB)=HH f?`*M{={2@o\*нOi/slSH&Kڟ}Y 9V4˱_9Oܽ>L'+^N\ 25i;~!\5A xC"'-"zԒ)oIH`?-Y0-'}A(`ct!gF [8w52cFQvї!{BI9'4v~ =p.Ou{*R8J# <`R!HT;X?oAWC˩mnry#?>2ZS8Q{L&+I+4VBITyJ{@{cȲ/iB0ͧ:z#FdY08_R.5e8LBA!y?W/KkykҺX𵈒ήM> }&|4.wn܄-w+0,>g?>wz_C޼?~xpկX^C;aS Tuh44Xv5PIAoa)Xa4~0ływ).U؍qƒ4)JAL,t_ 1w ScKQj#7M\2AkW:lU{?iYdl''WsW IR`؏P3Hr %T?Dz I@wutouUgx)ѣE{^Sk$qKMbC%p[d/4Z4ޝ-^\݂lzWxЀք狐DW6"$~ґɥ28.ڲd{CQ Sqrfy9CpwWSg/_꬙\Bϩ]UC"|ZאLxA8s(%@Mp'e Jf+Q`OΘQƀDN0 ȁbwqHv7| [΄4lP%M;/gW長ề/'݋Q|ܠX܉T2)x=3o x,ǑxoܦY^`a?^ -ahN5E/dj(Dƿ_;X_8gaO4M H#oZ>#ڛ2 G2:HohfTn"TɁK=hHIXsN~-R*C[ I EcHyaKH?R&%es^HRG` k\$ܸ̼̠- m}3QCJU"fko|'6N)d A4<^ ;&}M!9C]&}z]E.6(t l-䘂RMpypR]˧DF9Kr7`"\D;$ԈF?I oDBDsx4(gla#]USc/+IoѪ;Q$w'+@Md{WVӧҡڜ\B]{,*C-zxj7Uu1Uu$!{t1r$2П1.P eSv(xIЭAsl$y-F;sn*~4"@ y1P7--iA8 (Ej=11o#SEO=EdZ7Z~\HYA HvOaS򳽚D44lZg%pwFvݿN-GPׇ}=HREpߨ/</eٲz֡V~9D蟛>V5­oER3덾 ֜ⶲCдoYp00g yɩs_cMՎ!jꉇ;bul#J yrCzI\6$'(3( wdMPP,Cp܀ B\+~+=d[i{xXK.u^Xø|ߐ1ź{xb9nj`DiUttG"sBԭ%pi[05YyTkiܩ)FZx TwK5ѽW)3k8De>9U%g~3_F/D\Gf-VW^QnD5~(sgl-Q]1pP%?4Qӟˆ˶N%1PtN|0a? С3Tog _$*4YՏ]I{bSiBkN3MT!켰&pY B["dA6?AvC&9XiJ${B\]"O Hay§7ҷF/7 r%ds{d0,&0?K|Ljʤ0}ܡ{ʼnjC2k>}{Vf?D/<?Vgą:PS, m9BD <ڷr3t/688 IeŭVv{lye1a祃fg|c᭧lt#a? 1D߽(PCdb 6}ih0OqS?oqA>!>ǰJOsvB͞S~s)}_8^ϿvgIG?z5S2P0C@\5Tک$޵gnm-| @ۓeY)s}C8=A 6"{ ʜ1 ƥZ2 aXAzS8}YTI:Slc &pWPqzR,ǀȢGé bS4 $>%P09^7a<;hvRe<7і-Tѻk^;߅^ͱrm.I2%f_}œ7 ^!SyN i{5]ZD)*fVLf$u>#dax5݋g hL \=4\3WB=R}z<cǟ iif- c3oș% 7W]xcU.9|2'Kd2O@ ɢ9r;=.Z<.w+%״$Sn=l秣/FDG8*0!MarQZtMQ6}~x ۽icͽ':*o㊱|#rgܐ2lhk=CZU)?Jzx[o_ _ SpSX47W"L2,(|$yh 5 I,rH}7Bͻo|\Z^Aܬe3Oqf1cYcRǎ+O*hN$!Z3Lء|ac?=O7l JIONՀ=c]2}oojdN>wߓ^~x25zok{8߰ ;#d0NrB<_->bƍLxb:ĩTCWxo-M$MNRzǠT - (6qܤ?>ԻYu'[{]ݶ告7عM}zjWGy6,GHxFUġSً;}POO ߔGR0_З|4]pi!g3E=2 >M`q&%#\rQs gpD}f7/h~Y˴G3)@Id!8CZf9(Vg?>Ju|HX(N+T7.h\DxGn {9MoBLO)E.pd^-E,U|҂#h&4éS6!;_`x!5t)az5? @g7*G@/׽LJ^ jSGǔCRyQ!p`r^ggdAQrQO&q+oO cztۛ2aWpENU@V>2V>2gȒFJaJfW+?q]7I8':J'Ys뢳*p@ G 4@{h˭^4(:WL'^${ۃGҞmC϶Ͽ1S8 7x*j/$^ ^#˂ xunh8OrU^"Sg!h۩a}DpP` PDdz]?Z6e}4 ;:\9[xD09mXN”Wzr!<|Bnz<)ET|vIf2>KWYR}4='XwVo#TkLB-TNov [bd޴7dn"UJ(bE03|.YdKLb/T.^UPA KC/BpLJMTd{gMPp{njel%j &I$2`c^5ڋK6I-⊻mm #*(^lJ_&4џspt{۶i_jsU>Fs}WO$Uԧ,H3^'CHvrYOaz?{ uNٮW|DTֱ ?IG}ᄀ"M4OsKHdD"CZ6%E#@`ډ<ƿomC?@ZlU 9QrPφӏi\<]?E`04@ƒ4*s4p "tM7CxTxqgi_źQ{a5a]hYDU e\á?ASuBI{2ex #¾pv2CD")Q\c~m]RG˱[]^nd"V)(.`Ufiɏ<:.c:j=.jtcE,*ع)>DA xpvp&?K}y5tK!BW$4},7j &|(+HIE].<-$ QGcMCTYkw@\$ i +|U4Yeũ bwpW^yw?hLà6氈پlq @‚YYDͪM<GV_!|br.Vw]d)FyA j[yLY}קǠZPR[w+[1* ?۱ KuPlП_m-ǽZ+p25=x5n.+ KJaW ./N73cP#wo#s$c Fg79YQZWS|Mço夞.BAl'w %rvdh>IYLcVܼ$4$tϫ@v.aK=<[WK--Loz&+85~m cPyʧ+%K(6o:468щqKp|(JR)~D^~ fBx@F8t]^o(z{],ˎ]J/="3//D,_r;`ODx5i`f'i q_?J#1)C FqTo(3py4؜~xF|N !/V9YRY M oO `n/do☐˖DP&IGJR <ōx0#K{ާm׏YAJ3O)ZeG sSD1obbRQրD HNr{^46::G#Isf- yҜvaB@ /x%_b$osY\S6O Z1}<J lr``cHq3T'OD4͐)d$A24퇷qmCc<̖=K|4ek̪An(s%O|`I-pyFIygDy#K#+.ϊI?ClC/0Oj-3#I{p"HBԝO;98K嵽x yL~lg3^,a0& #6('p!Q]rq~~,T^Q~$Wh} /a~\^ ,YGYw;0 r\O-_(sf#GB!ݸ 㒡 vO)|;\Eg'GqW,LƔg+:^ AɁCZ.#rtJ <;Zhb=.YfHoRgS3j򢻤` CO; >R`A;qX<\;IU ԁ=X  K4[ZZEHUPȶ0\CQ)zͧ   hA@)X5.t8*`MWD0fq` :p?bf`dݦ7i,\_ L3Pc VPN<>CG#Y{,Ϩ)[5ܿ-# Į|i`eP pipO-ڟG߮eHmens9k?*g;xI @[a&3mp8T&FVOjC 'Q*JAb;`atMVӊ;*3<3 t֭ymmTEFL[]~*]ޯߢzm*DZ EW05KF 9^)o=]ZҏID-f_?v_yDrL 0JJ>Վ\94?F{P'¡K$UA+H_(e7jk]2pРI?%HJ@Ȍ3!g#g8\TpqP(Zd);XNj/km8 93Dd4ԝ #vx$PMw֬r>(Y\%@^4`8 4eW<uz熡 PRQInRu3 |8B!K/чz?wO5} ?՗|"5^" 5AV4*I8@DT2فHAXgP)r%Z̜ԟ'ТҀ//(Q7$sg}qr QLJL)hl)azcԎ`H춳aFwu^jӼ/x\9,mr.0 6J@ ~?E3l'x" ̈́0Dѡ,H 픾٘R}k.qj`s3B0v{TkG¸,EDĺJs|8is {J`[/(5Vi$1 ?xgpK%V18ڢ9+UƖy-xx\p䑂1^q@ϑOpkłJ a(Ey7iN RUz qx[0aȺkc2Tzɓ$I{ЫYSLKMQSy|ߐ8`8R[EW8g $8(4$yuٗ*b>-Ix%!Gmkh_$a-NԮ .# e r74WZ}Q-#^ ^0oO>r ~7Gr<< < :-2Կ-$@-^ FܗO1w6s%{= h/`8p<`Cyƿ2A!m+\ ^< &!/#Ox/DBa12&I(8fd*}=!?2` 4Ls4-8!-YZP¹/GdFld502qO6؂Y]~ypܰK 3ǶvS,NǍWXZpAG\y5\aI:= Pzԣ=ꑒH^,Mbda8F^cnX\,h>=ϛŹN3O1'ew,`x͙ 5kg'߈;@{] xܺhxRQ"܌{wt(bP)kx2I.#)j[9uuhC-n(EdNpq?k#e9X~?1W[WAfi%rnµQ07. _'c7b0ğ {7;X?N\c,ma | “ ~-=Ad0NCXZi=~__MK3NKE(~PО8:n|wI& LR4A;vwGdu# hV">i>WFU- n0>!c'P1)RN(B7dt(+0$FF!+RE)nϓִW)Jk5-l,|0uIxb}Qo)zsD,tP!V)SޡBߐL< 'Q6f-QK=<-NwaWH6S|d~ǻܱhC^&ܰY dKirαTfv mm3 %h &隷%AĢƉ"2SST/&vis*9pSl'RkCa>qǒ=t+u\b:c u^ 12c`4p/]W,Qcp8%i"h‘n>ZO,.8A42v<#vIzqZ!I76 #IFvdz%lERvTtFOk5uJAɄCO^ʯtTP!7XƝ ep_ U0@Sri>s -IT-'q}͂ƬI,g:ɏ.s6+:%D=ύ]d򅜩N<KnL q+# .I|OƴӠSȘYBߊcqr.|吴FuW{EE'FnSSU܂1I\J 价X>3-.}?i}WTiF:7?KN!G` ( +K% C9S'5?/'5ɲ'&;G<;A`TZk|׷D_ 8 E@$85j 4&[R@IG}%kG{4pj75Rs9̼֯0=XXZb/? 5={il:h|?)3b╳['&-%h3VB(jߵʥ_3SB!m 4>AT߄UG}. Xwg#M`^GzrZ ߰G2 `箦Ҿ:ef8VG"Z!h}%h$$;Fqyp0jɍKKF/Su UK:DM zq[JYd@)_U9,оƾl!oo=N;&_c*e9%|]`n6>15EɏQ_tzk@`4*Y,&bwOz u\PxUYe#Jk>muG~%kɋT5jsgB~ $&=y o@I/fPaG,*$u9Yy+ @ݖ+SʿqYh J9)yB>yJ7J$nf`pڣ߾Ll~4bC:hoyOS{ElPuGm8woODAptBGGO$ /SH62au?M%TIs}~6#qU3e!|tzڅkpOb7m;VGoMۛZp޻ mDŽQGLuܠ!c?{j ガ) 1pT֔QBi @D+aQYRQtc=LoB'e27B1s?h-RN6M Eߤ?2//eZ:QE|:́S3ehcU r KeJSfg S^.anHe30PoOsR]L&b;֥d 13>- V)Wӥ{$D(BK@7DA$L1g@:wc:pW1$Vx`*'be26 WPS& t֜rX 5XFC`F9Jќ/qQ%)P0kTGx4((s'@wGj{4Ԟc4@~?<9X`7>Z ?iU3A.2lgޜp .o:ta27c}wLU {t@a=4:n[dQf@'LׇtB̗ncM_UˮĪ›NPk7Dߏ\$qn0~[y[m6V;9\aeNxUnk8Y/ y]R!уE_픇zV2`^rz/yzJW?$:pɫgy+"ԖLJ7-/~> `:R"ŗ3rO\-Qa5e # 2Sm*%",X;`9Iw"We*# F2'KԐϵPyKVt圓RC~'7.aJ&υ|Yκ<Θ4˜e9 ݕՇc4"5h'.; =~=\yw\G_TERpE`O夔INQJ/.f]E=ǒkK px*gR2$R_{FN#}Eʑ8X1S$/I0ˤL)N 3(:G_ꣳ06F"3y} Aqʾ&Ҩ7Vأ|ӌ"o.]i IG} 8R|(ΈrZ|m|}E>d~[>*Q'c';?NpΞ$PG?7/= YQ0>L"Ji^qq$;dmr | GGI Si?W3j]uћxo!h)^O5EA4uSZcZkV̌ #>+2ɲp^+hٱ N[ bd>=P"uQC%o|٫Պꙕ r,ܵ[ց-\(۵q#"]tRՒ$YwN}Q'(Y]bi" ٜX渼ËL07=Wf2Ue/ 2Ia$*f̮g6[YLvCws?ǝpp]7VTMZ/hVh?; ªxd` B̗=/mAAjhj1Ki4,\7N%Xy}yBqI̚8e vshf,\1f{02ձḧ'dsPm]ˮ^I$MDxBh}| &0UR#;'oe٬LXLJHewquEbT[a0j,r8/ܝb@͐Il5D\R܏eLHUUe2☌E Pҏln_@G{k gt%gM bEp^d,WZ<$Y( vS٤LSX}A:훹bh&TI-{5JK P`$ƃ>〟9.]ofr\ U-Ju=vZhBnF g&pϒ-WE ڽz_@1rIFgi)f|A{ݓ[u![콆e9A_wP"W.-!XWvka]\l;M `] o^?6V<:b~94kخ6KY5Ii Q]k(oz r I*P=XŬuuRBw hs1aWTگ2`z9 ŁQwPhrwd䶛rujBG74s7-xب[ yN?zqzV+ 6+itL?y{ix#o/̧ҿ9L~X c&IY82T,`xBh֌MqRvHS++!Rqμ`K%bݢĚ.S4&lk~"IݯB g%e貶ZH2avOU_l'Q"ak^LiO0?cwχR}^ D]GO:H"R kFD$."LQ;:ә9Zuҽu9/|$} z6"]W ɺnؿ$ 8S?D 0gdABHJ_ > _ 9u8_r|WTz^kjH5)tϧD3UnO3i*(ӦÊ~_ Aw8&Ч.ff_\]-AHfڬ5՜)ztxΣ+T K0q)PqP*]ϭy E8U r rA١IJG.ZflʰALRr~dS/)X?5ҝL{onpMoVrzI ^  *y/Du ܱMC6ldf%:e oGڸgnuyX㫧e9]:@_jM. f6˥Ԭ7}cG5LTn{g6:gQaqYۅurAd*&yߘ[.uU`xm]y~蓨I: N];iXQBF9RۖwhZE $gzta8}kWR &NŇnȨ#ZJ6ۂKKdm@8 ǹ@[6N]mESzYC'H@/voO(2QYot$w|r5],.>?_Ԝւ(aAqHg{>#'D4nV6ҶU_nz/ ût+@쑩^X'Bø-6~oݳ{me&fpkɞg/7OT*Zg-eir}Ieu{'i#kxvrwu:\_͇mڜ0(`,Jer_.8US&Dׄ_x=l5ksm  [jVFRb -oѩG=[N0az L`@ ZG6_EqICQOPjW*˰:x]wٮMqIL~O #)!֘Lb;f>83}k`}2~Nan5maD:bu|N {Z3o Y]IFx^f9|&ʠd?OTPf˰헀 p~&祉Wj$u v "FKa !\ӛm ':o)VP/lG/GUYpEo>1 e@w~Qs6ճ}dY֡bBّf ;?r]B埽i/y:W~BFDD}I=Ā4ßɢ]?f0"kuPEA+?,t#@0%wq_EF|R > #WQAcr3θI)WE}٫jl{?TPWqS5U“3zMLI)VySP݁b䀹U4Lo) *zwyÑD"2mWq N3]} 9ǻ4H̒cDSk[[ܝv %w7s/9'Nݓy_}wMkCL#k8qpnlַg"( o׾3Ž)@!9Ճ6bos^^IDp!]g9%gb{GY)c.c)+U%U7!(!|aSݡ0+^u*eoM8m-l Q$`!Vwsxi]3c.s ϶L x:2y䧹(TkuCgَ ?dd"F"zGݰxI^_od( 0\ɧB^ }hpRTAכA(9w}kœ*YPx08YrJ+9S W”=6iJtQi\5*~~&z|6p*\ҝ_,rc GHSFL.ٴ.[yQP VrBӚT Ѽt;dbm6Sqц5,/ k)F'yȤSJթ8*>.;grRj h$ T|%Q:N 9BRŎL_[ RPKZw.tDw}#["xY-͜4m_U)q=Ϸx~AϬW[Z#pș酴6KpĻZ tJRx>Cc'.( eK,فY GP |yhAh}s߳uvDg7q?]]zA} B_u8x[zx(fUIxd&V Vl2V>}/,a~Ntg#2"(sm%(gAєQAbS\xce0hXM'N J2JOtfvN@iNMJgxN.2#^2Qե *̕#B>ns#Qo\u |z-H~7hw>yAp;w6v8cAkxޜ>=BOU/P)ͨNC5S?̙m|w盟͋J/ذ7eueCW7ږK(Vd %Ԧ;fXӲ>@y:I=4}YufHYHN'ș 32^/$ּ[sGuԖ{xcN\=N?<þIm~8 mq7ѰQgu~2h>8|yEl :@?bBES6,˽qtP-h)9;TU94 뛼,HIUNFA߱ZlhJMn@7)KWEײh O1q- DNlv0.B3d ΈD?A&rx܎)GFxn//s֥kt$0ky2ս[KcFa>*}5^Q,奸#LKK2+^feNK %^ffͬ,~vu6قd FfOT ,@9Îzo!$cCr9#GzCF&o8r͝* 0 bbs >y*h2"p܉C2w\ofρZOoG9wq^ZgjH ?$w| >vda&|d:n*O(5+& h"sƉΤ8>}/>O d 4,2iE5pW*;,llF <džɆnrgOl3FY8 hypgaCG;˗:̞Mm}w+g+%a2։fU?3aFmqӗiu"&xuv\*dSZm: p \!I_ 8t,(JRNœzzQ4CL_Gw* puhFkۜXgef܎3!nNuZy6:6;Fbd'ÖGŘhQngo}Q)K N` P' 5?rH˜}fEccӷK!Xާ9¬S))vX3o& "5%6[<^!PXvVtyfr C6R9*H]aqŤGm-}(uC)+<ni/eP @?xsI7R`<~\e3LzMl2p;}OfX+1ֽ}Zjs%#AVlsMׅM.iܦ0y@Lכ%jvm|GDHn=Ʒ,Eotۘia650ϱGY'b:0)#8UjuEBlHa)i=[궢A~P_^ q@VfŢ?e.9,TM}O!.zLM]΍.lZ:R:-&|hJT^r DEb; 3~m0:Ih\`:/(m†j(_pd6Atu_{]wCQj)+H 0VP!%n;;k+P`βk]?p2V \ r%7n,ǖ\(e IBgnƬRQ,gfŧxQ7壶"рˬrKׂP>%kd4ΏsH.u'mss1fe$3>m6Pr(HIv{z) pNpeE~Ltψ.dcəy{2l9a;E9@_ORo,{g}@)N~漗`-4շL3J.-Pe֛;7i{ɽL-5Za-,p0T,099jJM_'*-=9 {R+B&0ME&K +vEڄLUnEGQ/Cq U%b õ2km6Z*ҷo䨰 mE̞6->k^ ﷠? ̓(pÙpO\R>,{7Dڙ:3)){uG PNfgDn^/ze\EݫU=-ryAn2:G4zO'edky2C% 6GETUx/7^󲶪FFx,WV$J% bQɞ,G2xlsB*y,rE=$T}Y87')VY2m)풽 ܖv{)_E&ݞ>wyZhu!j^-"ߒ3T b Fyg/(_g*cs"Mz\sL2##g\(n=(MdγL<&pGRW;foӆ*9-e$>]?xO̒Z,E2=̴_oNT$z=C4u"cVr%V3'jbUAyx= " k/f"&љJ:ZJ:yjlW/n1Bb?ֻ`S91Gy"LW[6rB% V)`̋1_ 9y_QA6QWLE;,NMU3p9UH[jZYkzŋV .}k lJvflH(RnUWV&U,.@8r磔d$y`Y ?XlVR*?Yje/]Zomt&N4 [^c+jwsN^A⏪/Uc%pm~:~]n eoyy[`Y`0f)?&)2,6W\!Y*Ab&  .'fs}=.ٮ`[) Z=HGGz67DCzH .F§c1jRG[ɘus!Z9{jIM OSn|J6$ edSn'lʘQ gx7*6N>H+3LH}y-=S9S|Ϯ7/ #QrJ;xb`sLY}_jF^9beOHSڌZ[`QtR6~9/h)٭&\c)nJQRLf_\:8>$ޡb4y{V]4U<6^FAqC'Z"qr V,%MS##Ic]mzΧN`7u~ F:vQN"y.& yv<rqQ $LAOs.%>680<6y_>#hߖ̼~lOtIX2mn'΂:$EX>WAyH+;?;S"!$,Cl`N=ۙ[u[ 5ױ|  C0WApk*YlJ$a7\:a:yk~bf*PT>Y^xժVxއ;xd rfn6]}:ί{^s|RumwrєI8a'z7^Ésy!y֏?y0 EB#ղҹ#_sFxr[_MOPskWA[J0>qN$<hh H<0B, KwonW'||ḷw5/\Ur]js[U@$sVl &iHv}F]3<g1`{c bVq (7$ɜ(0_d 3a኎o+<3&BǩL~F㔄*O W ]2 II&%+]|ǩV)E-M JK$0.$"^'Ɣ}s|ctJ)ߥʜ_Ph&b\I,e&EV\w;8t)Q'/Y ˊЋ@ym&'7eAm% . CUn3_WG{.U+Ly6_TL(sd^DkjF.͕@wk t*ph!la:F5!'[ m,+q p 1[ 8++fh(j'rbj/<;n' L\ww¹(S|1cdѾi۬ >غP>KaaвM'mˆ}Z͞8fSN4:uɆQ6|)9}:thZ6 L聖,g^=su",fJ1#m9_*98*y ]`s+.u9-V;3MJ\INu$l|G-yntܡKf:=X .x_څOuw/K-gK)fUޓ暊:gZWڕ'l-Hrv/P%,g;MОw>X%Iiz@Q˙* v0jݸfSVn.ac̤$~b 1 #:Ëw3_o4&1+rV%V>Z$μ7>Ⱥx}:GN]D1km3Wwn"$ Pwu]4&75Nj1\R)`|-zu[_wqZM |> J\fG#o #nN1&hހҋ[f2ϨUit bdJަ%?-'2sYXpȾwNy~#d\1Ǜh.oHDoG1 MyG/y*#`,!bRUp%$äX3Db 5v#}XyAu[GiaAbk rKg+I^@a#1a]pIwvȽB"/{ :R,$vQh }&mSZ-|9G]AuSviˏl-֕t{aweѸN{G!,ﰦDz\MGkLdZ3է{zD>bkl}ADqYQ nA*}^~6JmBr>Dr0ZAI$oW0KjcuTY] ۜFYZ9jދ| EIJ-g?*,;&yʪjr\5G) &6Hb>&SrM5Azک͝n1Ws#ۤh?2eܺYʒp~߉\'`Upf[ӧ&%UJ8 1 ڑ5՜MT(O]NĴ&WWj&;dpfy{E^ۋq2x9؞n$ ЊsMƐWFGIgj:9/k? ez e􄨎O{GjeW{.Չ&> Nr֒!gk9=۞ŭ݀pΩ=Z}SťkA)]?dme2m_= j:<9nD[ww;q^#|욇ADkHIO| XMX#f¨zϦ"Fq(}%cMv-?j݁e:=raT1!ǏybiAY9 #o* cV@;(kv[ 4O]L}FGf_*ODKguJ]R! /A1;#SxjxH01r0WR+Uxa{#=octotxZ0V@pҳR>jkl-:f \`IN|С緖{W"B',"Ȃ6~ 0`p# HZ9Qj r0/x|vn&,Y⢵Xtuc`Sn5 8ɲyyzjObWh`ɸH]S%q.m=d$ 7 P_ 0Q`&Tb.|ANşVM}ݮelI6K#kh]dڕx,Q<=OWX(K)cu1ۋGkEŶSod \٢&W}В7IȜba_"7rsNkrdv–N b_Hnȿa-ִŽȶ=Nc)`,#*DH'{n1m/N5`?•j'"&CUĬRgv_ 'Qju;ţT xQwO[.B3TzN]Q&Фn2>sd+ nOIK`Ic{4}7d%ڗ|ܔjQ][|LFa%`(3ː0ޱy3/N9 u־SqT{<Wt[k?ۖ2t<(Q 45z$R[O:Z.J>c(uo< /UF8a}׊N]`| GdOB{d'RgY$goL |"UZUJ(o1Tg9gؔyr/Ċ=92'sd hޭrcҋ~ke!(4ˠtͧw4e՝qN)W90aWqJd(a]3G`U/jgܙ~$pg&6ȝc F *'iԂ#lnˌ`HJ@أ,iκv:op?!H2J? ,1U*u5=eF-x0QLWdSr+)B!Gq9lc&^U9J=(VoL2Qͤ9%8 ^?(6OCqDp߽XGEƊ z:v3ܯ\]iv$*x2oQDcÜ5wǛx~ѯwjSf.nqE%;l: ,S 0A\!/a 3O^ЁO(g&_yܪI`Y~lb2 l^S(ɠjDݒnU\nĮ`sz?HxҮ >0OI7?ޑw)QW]:ZܡD% ;Սɧc|y>0*IvID_ bĕpXyiG ףП`$LPKBXuE#"Q/L7t{yěn=C%vwQ| ۧ<~wfHux09|ޒ B-43V%ߍq(gǿ?Mb輧aMfdAma;f!>[/,fƖL1@"DI_8 B goXFa`w Hq h,M !`$ڣ6%fHv@|!HQ\T]Ov{+Lѷ-)O%,k]0Rg ~~?\7Sga>Dr}3RS|FIJ$˜7:33-,J rtcP;Mm`Eimj0t/~Vm D7A<;Tk,=e(Zɞ'y HjnӾT46>Cƛrew pNJe7BUc:* vidO~ eev".C/! nv3vZa/Hjiqn<ܯM^Ha͢p7j\ӋZUYB}VW t&aM_f.ST^ԡ:݋+ ZBi^jX=/m{瘍! sXܥ3LP>Қ7HZ߉y<_bQ{I( 8T< [ATbetAE|V_w/ F!3FWaqY>21e{s?[NqO&|_&0|>epu^oTݧ[8ZYֳX%\EtuyqY3CP׊ؖ> v|!68G;_Gn7P<θwc [ӨVכw"`wi2@G~}bcyI[/=)1<Ex0"9$׷~q0g=h`^;x:jizO5"Kq׺û#HFsTHGqP!@=n bO}"ֹ74ĊYʼn[^,F%t+&E##|j꫐%?$U◵bbivIɳIG[-Br;܏km^oܣf`ሌ*{ $ (h;xU)0+Mag& ob CdZ,) #RGo7."%ϗ:3FkaggՏ-LQnE[GHޡ Mņ/1,[V1]\v$E7uEy{EZ 7@'9*X2wtVˮ{A)re՘l9OyhB[eg]pEbh,V"{|-6+HO \׸&C 3|l`se;}'!TU8պKM8ȵIVg ݏUr_ .)~5'+QW A٩^[蕧nyy 70bwz\ON= k{}KCO0 @"#p,f83? ."EEklwwP]&T `$[د"]ye~? :8ˆaX6!H@TKF"c J}^*hTrFÎjS C! ETf}.ԍ/X`_7>N'ED5+*,g=Qו6 ќ Jx,`Q+IxsGCܘ4{<"H1Z OhT+p6F|p+MY\K Y Q%+<~$kJkފ\eaC +P{l6=@>a ތ޸9a> %xd>f.nС3}@$*i Q& 95bU"n `ȠO}rZڏE_ә ^ 8 „Xz1$ß; ,YkNk҅H]L&}@%J^'yoXШjCi܆E)&ZR-RK,}3ʊ*aׇycP%&yG39[vIm71i$Ɂ qE3[N:eꮑvz1D<ؤu.C+1э>~^S]}W?̥[X*9,̇˰²t%\/ݸs 'Ÿ)é$AGW놄V7+,E QoB^ro@eYY2i?!K`E(PK~nJ;=%х,\\s@$sg^$?5WXRjgl>!R 9T%S:\fd I9\ LpM+W@kLNdxuw|΁D.ŋ<4>4抵*mL>nsdը6XAF⌯'}P9M9ZmF^0:;¥rt9Fi!'$s5zי}]ɹ._V;V@7z.nFhMÿ4_{wPxwk8^gf$MPCAJI' 3^zȯ/9E~l_ˆCJڋ *`9uXgk֮Qni8jb/Z[cN PZAG $TG2؂.ǣ$_'/Bo$ (BW| nQ > H o"xD%yƑ%Ya8G]uB N>w;W{ߜ)aߺC!]MSl\9HO/N:qS7`vXKDP9M߲@)JsȒ8D˅\<\ӓ?7kؙči ln` PAΰQ&vHQd)W,!'f4)rLy/qXj`.ipY#${pϊ{Jy8~Ҧ+rd_8R`WeRj|X'WKlZ{i ~~: 8,(cq~Y|q:D8`@kQc:՝QA28 Tv5яºf"|iA _đ +Lfؾj̾!04d:{K@@2{c*Gb n\>0C;BpN aZ ЖW J/^t_hYzlm9^M2!pa-g׌Yz䆡~ ȰzYNp9H"<. Pp+ G%>~a/$ЬEla[ExkW{G^uPfݵn`s,xAך{7ևwlڝ{M\qdڥuW™ݸbs6x HpF\q&Q]]%޼⾞Wv8p Z1>_~ՓrPVY[d̜dS&Qs=*wFsUW&ϏNEUlIn k5(:y$qp5i M _ӗ9[PL@a|dϞ3\[1)>f4EZҌV -|)'m>VS̭qˉ<#dvHr,i#?DcO̔ǭ(=INV强A:HqBBtqɝh#~-LyԒi'1~Ç xӴ;~x@BsζM}뱚oá.'(W\j ~,cB\FtwNcE18IKT |4xw*t(0je@С(@;<]F/>a5gVhՎf-t-#yƏlƸt㒐qXC_9 [ NI^I*S{ٔsxcc _ʣ*hEdNigY;%ncw侞#:UmLC4 \6~}yEGZ:AI>) a' θ"ݤ3߰IV;<_I waR n H&9/=\.l@jr❎emC\ C/$Ɖ*H11oun/s%u:+Q O,ȉl= l=>d] G}u-^A&RHW>MeLkZLNU0olPs.v$n\PH+}IHϽyI3c/&&ӿLdr2"7y Hp?a,ϒ_3L1q]H4OTp4+ }_>L|hDGXjvclͥ7KdE 6Q anF?,aE^!it+H@K3 Ge*^n]p^tB)1i!RKaMY Cu,|N^>' ^ˈM)qX?ʺБ6CXX t[BZK05-#f3rXzǟe7*J:Ҝ+L/R'qdof W<޹y^)XY z(( P ˻o&a^ >y}UmFV0̈́:oe9i"G*v.0͇^t~1 -:V3}\J,COûUZ<_PgB&K5_qyft?(8pw7CEwK.+U" yޭwx ?3#,^%#[V] CWPB֝kF֫WpfXA`oŢ $(jkX|Y//ӑ:^w`>9.͍Etf8Z9WNΗQavtxҏ32*O J:P]DުHTcP9 [CPeTR"U![*\1Ra|l cCЗrkh.;}&@`S F".4\OK::9txq|& 4q`iDt 8j:mCu[M%*x p IoiZ+=>BFaN(1UI#d-AX-4)Jo!# :|8^}7I)YPaW ?TnꟅ{Nfrfp)cVVAlPlal1^6ν@\4RW3 .Ś;YTgR,Iø^{ } JVpATm?7u;ES9z7 q!JUC.VQ>MWC˲q2qrK7f@ [p.: y!Jeˇ[vS1V}>옢.+1=CTͤcjD &‰tCJ_ndOUz=wMiVnѵ $i6'x`Ĕ:1^B`5XDɆYY Mk4dyBh鑗Nc$Ֆ VEńy,)7[=ѽPzT>J} ZU N61mjoIK s46̷k}, \b>e=G9y 7``ބȕMsb+zwBL$R5{>gM##HcUaC|?,\x JD_o( ^g}i$@$V<#6Ђ4~NۙU]=fnwWR"<"ᒸŽ9+9yY JCQ0຾TbQUCGf F"ъe$mofiTI e%q,R.b&9>%-"M3[k. 'S@y]*^V'_ץ,QVe]`;%MV\Vo":OVy֓iF]K R5(l2eg\kTu3:L(~GM ޚn78]ݨwGǯ/6_%b"6cl$aZ-^3t4lm3 ^mʥ7tHlEfFDo)`vP5ӂ9d:[TkMO \fSTeTr>>ʂ>!^y=qaؼCBRTQHXA.P'˕%41UO]L8Q #SCⳜ$?J/G j/^Oq9e4[nVAg\;.F)G29*^u&̉Y n-<(&ϵ,]).BBW zf _ [~Ap2v`4yA CK3)ȅi:؛dyW'a+UV)KQؤ5*5qN4l-h [ {]]1?NKt%̢{58Lڦ( HOm 4%a#ci\<}< p>1vޕ'^8B|I^G}PI_$S CI@6nHx|_y,@ 05eU 2Gˎe_6dibPA)$xxmލvV; 9 0?$U?ʀPI}pIʐ' CQB )+fC Q(SB&mOJ{Tѫȼ0z:*Ʉޫ5WO῵0*kZc􅛫og ݢK?3H  ]i_0Ӕ%a~.-7h%$J$;z!i9v/y i ex~ IkSUz^Kc-k*`m I-GoY@iO5:0>B\N50߱bv|ʏ7^2ؒoZaP+Jt+ÒJ9!!2y*2!MȜvQ_ D)2@܎1Ye},y]/̓bRbrߗ6x^'E6)AUE4>8FJ2$c&=ՆqP+ywZ F`K*r}7si *LAt]ȥ5qj2!,}u\pfKVq^[ؿss7N <Nɏ47yNPL>BY8j(^}N_@M^Clh=(ɮ|y%ѳ""1H햄3k6q+ ǿ1}[ݧۢt Z෼wk L%6-.kvK4P4MugG5EݫfE<\/ݯYR(" ePDJSlo0iчa, M+n6M>".zc?k{aD*Rb%!qwmZ $ym/T.Zo"2.S|Ӫ95!O|>̇+TZz}R LVŏ9Fȫ+ Js,Dt,jz'#PXV~CMF䩇7p3!+UdVEC!3eӘύo3%v\Zv̎MSl&W?[]yHMTx$,c .cuSi,:1ΰcZ4{}q0 #M񩏒Q 8-|L EQ)%ES=-.0"1$,-p9 ZWu](݄NloԣH5jXڥ߭ EO $t.6AR.ZS ye^wZK| 0Gdyy{OjMUP?aOP`fv÷42Z(ɌORH'nAzu,AhU˯= jaa0Lު >x?rO.Jz3%XZ 4L) @4'(` QL1蟿ԡBfL),* h\eJEUm@LaZ~ӗ`ާ?V(+ T_|P)!*@T7bpL‰%"1Ɖ̷f⮌$4H dL|^#p 3vPoڵ#Yည[|O`cHW`iJE تM1";V,/o_1Up.oᩔ4ǀt#hUN 8ŎN @`Vi,Ɩ'~< )/8tl>ЕFLh(դĴ,3!gX8GTu"G4E^Fʺ;tDž-wΞ!6ܜ ONE:_wRK凔Os > L#y#wMYU="6=^#т$10N*!Qqvz/R?ol`Q==R ڳ1XX|ǒ'cBWt?)\`#rhXjMyʝwpiϮk4y5yGw KTR< }Sa*8~q&+۾yW֫R1"l͘<}+qZXVD4/Gyi~ *^k{"os#q3.u,~9Ɔ#vQ@z V-n gLI"k,r8a$qޝsU Ţ 8|&\̧`}\@hf,8L/ .[?GlVZ}m\TPy6-<=p 7Gv~|<|';= OC߂/ mGD7{]=mH|p ;ɑc_7yϸ:I*4}~0$͑$  3"pP՛8Vַ'5xP vqh뵚գ>x;|dje113>W#' @ě%8mo";8ye")Ѭ6-:$6vzʱ:׎qCi*>_ܙi6)8Y8)j\D=y{/|a=₥} 93)>4P, ̗~CƶkSs{zm;xIS)PfqVَɤOn|ș@\2C6ٺO8!s[[B<}д{a'|U+U[0sS$=F߭F;d'Pˤyt];[]>ax x{_NŌG?|˼;3)fGr[慛6&0UY6-%ِ R+tTvyM͊RKy bJ_o1`L*ÉmnH4nNSk}]lPY=rq$U,v6M`_VQU͙<luMv͙D,LYCLr\Ƣ+~Cix l:.Φɺg CLݠyU_)SGrnzfDb]D>{:nC+({|ںJַ_67R<ͼ ]vKGx4pzW%qC8]nhѨ -pn=ywi ӏRTM };[IN![ W k{qo?uKW/EY{{9`ű =\~_/q:^FŬ5u^=YnUty{5/騝+;iVvVal>L擉ċWe8mwvs,@J9#u1z*~joo M+c~JH_8_[n}+h).+^S$epUQGa9͞V=m_ 3gz1 a}5{F~7S̩>n4’wI{PS7wmsplIN}u+߁4ƚ,cr5&3<1⸍#qsqqMh2/rs%$qNa-WF$u!J1cl̍| <ȗL J A1ԓ Owiw!n!^n\XyAAyۃ.ڨe/EOѫ1~3&=T޴w}oKD̞ݺ!.v_>Zifz>L%\~zxϔxT!(?v!SyNͭmX.u/ۭ9:'//A_r6<݈dN*77iȃ:'qqo=U}rԺzv$.a$`vI=kUw< t$D!?&2Nz7a>!y~ҕ[4~+[KbւOZDT$)R>ʙi=qbUէX;q芑Pyq(sŽXH!ŝS佈=ɖ >˰6[ě%P9Qڴٽy''xf Jl VS32>-us=1"VXBwopS8D$~cϝ'khn2P:EM> [ΥѼPjc+}uzϑ,4tAqL侓~дB_-HnzSCp/.Yۮ߮ZzHDBĪ21 ;G<}F϶k}ugl[OU=n }^|4UJ跐O#Iv3Gdޕ=߉m&^@\[VM.BF[Ubj{œWcKk#_y7WDtCb?7x髷W8KBGA` N{?bֽy gi=,xZEx^ FF6n@syx&d]޼9HJ8]δi{Q@#$KA-lb)ԋ{d eaBpҎ"&:4VDOqގ$wQZ8U{?:rrL;~_pS'k:S}::P\=ȪKi{ZZ= +jdM9Dv(BTLp[[DX}F8Ii/5/u3Ygx,֓K$|~FaK3y3q em2wȌPQ{-(t~Hg^K.5mCМ|m;&A׈Pde3Wb/rHI9\3.[ tvG9$K7BMS`P^.q[HSv>V+q̦ eP1>*Jjx3+{tyRI۽ⶱƴ&9Umwg"Q>9! ܤ4F~̇ Un<9DF7Eͅ(O݇ !KVy/¸L^ X6Se^\N6!o1/G}3qBг9+52'h-*n8޳;%G߮bwܩAD/3~{yb_>Zd:Ƿ Pe]a؄G֤lnk:ptvٙrw@%5U#xxܲB=fB{~Ef˼Z.S+7p6S!RsEENr|Rx!Q c ('/~#Ar1tnuY/՜ x%W #LxxqGړSKOrĆ'BvlD\$J*խ;ukbr1w?n-q[_:oI,5it'M.c4)9GX: EkZpi \[cs~K x2*Vy>tS}fLk{=^X_͐m,twC==ՂpSG(K[i.(Qz|R ̹Aà%J (A=yX A:bC޳ aC-Ơ^ram.2WryݥTSWrHXT^,A^B-_L9֯kg9w;0IF$t&um $4FࡄM!:;4xJ/1+@zq]R \-yig)Ǡ;aD`uױ r$Q~jIzrڊ+p[ ʛx =6/\rG\rռ.Su__S7;k5G+sy*Ív7Sˬ|J.Gh_*Vա抅&ZOr  Juf/)w39-gSfsxVk#af<4q֦aNZ'vayk{YYFH ?4-]nxW٧ S}wIQ =[KnLb!\&z5opٶ4}<а+~^4$J<,[9"&5֭Ypnn d.Iƍ\1D b7R _b}車9U@w- Đ#!Q~xF` 8^M(C9|B7v:^tl۪Dgd3i2ZҲq!F]c-8}/'.-4cw{6$׵scb2V:?Cj_M`ث;-_mwksŢ|/2iEaHPee8Tꀨh!"O;Cl9O>x()' Oog?[=US}a1~8 QVR g ҅%~lQ⼙5N憒?|uT';=L=,1PWXkK,Cz5","ӏuXWx)]ɍ\]{3"ּ?(- mQ^{k,\̀ƾhyf.MrO{Hl+~'*mή}'|4C土WuWa?b.PɰHP_Ik_bbg})T(JGEIۏ!.;'W[7x!z duۨ ]Yvj8_Ƌ|C!XC.dHʱGtixFKz`=N#i=;l͌t'< qp)/rdNluo e:%n,D U!-H2h⡪@F' 2I$ 4zұ$ПO ;&wu=W/ ؓFҿeJSns挞,^)Wm-e~_ 6:>zqk!2ɷXt[DeҼ(\{>`VEpl $|  q.}ig#1}U%g[9ǒcB>Ip-$NɹIǔErMAZa'ROաyo2k S$Y$µ5;)a#[jkaxfޞ+;mRX #G-aӗq0 ޏhO9-IeiHfKv8 wh&bE0C*Dt*ytK8?V3񠴖>m2+ Lba DI*oz9b7z}DuuدwZk`MHS|=g*Rk/8p2nJ h?-ٽ1SjR$ O9TY'Q!UwE|ɠo#) (2`t5s K$_J?IZd$#yo %Oex +_5 (WJjcOtv\n z:c1iT>F]Tjt-m4\~ Dg|l]-mU`{>AD pbR|EEH}{jGG3 E^޹|0d$)bbᨧ+>T?D)0Dy>JwhbY!Iⱪv49[q}C6> nf08Aqrp Ew9,H $[)+}4g⥹a@ ([~2'׫`nɔEV6 x8Dx&CRC,! %هƓYI%:`J俠Mq!|X3> "U_Y`ę0_(g繜%aTJ)`PG%L'7[kTj 4+]ΗDV/ lILzyLT ߀grmw7JhCK瞵ՙ7=vR">Z+dk+`œ&u[ϐcg`{w 6o'+,'_HgV&ٞΊYɹ!.EB9%fnX/SlhMuުp9v?͑Ū|13b8'e0+~ᅭ[ S+aLI/QWYM,ڞfiJ5/qԛ4h{tj֊毘p39L} R@{!0ܣ5-W9,gMƇN}bDozX9#݈,[z @FzO̕ӂ1:{LJ1Wd3ubskBYϝsX׍_I艦R3PH+{IR} gyݸBPtTL ۢw S:{ֵz1>is.A8eL*/PˮS pyDs:F]2-R+ @ YƼs}]\APx'>u29 %%vl\,~?RP K-ٴȠ`̣01v3ĤG`^,CDj6a"\.Z(-|tr-U6B[4P%IUD!T@Q,c.H|a2 [M:lQuY_^_q ɱ>EK@ILBپ&VCdՋuh,D Pϸj`1y9ot_^/ PALEiQOITS:ܳTsO1|n\5&&J)% DXorzYҒ$[|= 6%Ef?xHD2 ]~ZJ9ӳhW".WO!d Ab2ePF 9@f%b0AȦpK9tl̬08Om:ǘ]ߟGD{:iNqC0ܽH[I sנ&.`$bo^5،:8.t(X;-$2 /76(@?3ANs0NPH[!͓RbӿO.!(rBW7z5 '%)|+%qz>겔\ g^7?b$G@Vb2" tC!8,>4"'DeQijH~[D%T[B $-6ç$ x8VD>ԑ0;K٣6 '^uI:{]%ݷMY_9\/DHFЧKu5Ϡx%*%iqY7s.ygtd( eBeQ\"5v;25/>yɓn9 9q[$-Zzׁ1%2>~.C͈52/GPQNhPcԿzgk&4u(1ͭg$j?iRTc.Ѝ| ?9 2ZTm0GG2AN >P,"EtiQ8>>8X0AAĦG%Bt%&}OAPG:{AK79W4thЬiē8iBE.T!};)2Nɲ`3C+,r7pg$?=nHZeys#%6})#7f3TYe)zT,T_eux/@wޜIr6A>w$Կo>pTQgo }:\bEt50rOk^1t6's\#|ca.^Sҥ@d2T:{j}׎q}6B?J+T\g%gMr+.NuyDoD14>lXnko ebxr2 2Ļ;1?4U .(#?~[Wjf:FyI`BqTKx} &A @l:%}VNEXE% %oxEd>V_͊zOY1w7I&FF?$k4Dq~vҙVZGpn:p~#}_[gڴ! 8e ¡BXDt}\rx*wZdz}侵/]%5P@ , U>K;q Ť{Q5[ XE?%l\6[DSB'fެvO]aX#?Uo<LY[?JvQaΏWL,R;9CϿ[T3PK`uypȿ( y(3"ztP~P" +(!?6 ~˅U@XL JLf@DY;ลM)ϾLb񀬤.- ,Ư,T<644 9mx/0Lr^anrsubpuq%.0uޮwLv͡'$牧^٩6 ZQgY+ -<~^crn&_H|wn7ESJr+&۲>7_CZdP4Tֆr(Ov6vÊ*M[u^q///*?N`NR2c 4hs9 m)%Ǟ8* 3v- ,!uu&}xb\GC*GW4]Jcɿer1(>i2>[{1o4W_F;=3tVre>T}!THBJʼE\}))K/,zgMY "AXT-9ok3?4kH\bbMyt[cao6}$Tk15Ѱ)6B=ұ_uQoZoEJ@(Mo3s:8( D#C/ .1oO =Дxf=! $m]+ǀmSuҍpP^4pX)E30qXI-3qSF5EhAqPWԴM%1g[ 5HSRb)F@G"yJ qPH:}#EF̹(=PZggڒ{r O5V~Ӿ&;37&^;#Ͷ}jЛD'RDoDQeF|{o`AuÜ+ F$ЎOΓ #(@)_4GѴ0 2|}r qC:Bj<;SƐ*~)b Z<,{G,}PBywu{e`{`FMWQb>RS3%tʑJ#"jՂweYT Fה`l37eV 3J fmt8'Q3mC-.WB&Ca6۾:I/ & %8Lr?jos]Y}2 )J$QĴ=ws7iDAQg(S 8Xs+V :>646-i`=xK.qa s,bwHi^DB, )lN}0<-%$Ձ] cZ:M_nj zN xY]U\j3\&U(W3^ {3hY|""%A`@IPO>貐JҒv^6J8sƖ<_)!)}h 1JPX"Pe( =) '8駖<#]qDzIgš;)b0ݪ^/Eȧ(>rUnR_O3Y;7GƳzw]"² %fY(-QGW` ccĸ?Z{CD }twfv5㍊<727)I8 '2O>2żۭ{u0x2v.$ _]OJu0c5S)kpckbQ)X2%rC]2Mrc^ :~Q~ֱ8p[oCmf\Ffqb؞|GDi&AdC?I<ϱLCS$VB?Bc RpDd!2&g_W+ʰu~-L~Ұ.&Э]nl.67 _hw2JۀH"Gڨ皯g궝&]}=V? 6k hD~{mG+L _u>yv;e@l{}1ϵ ͙J|fϳ-.vƎ v#/0V(A+$o׾B҃l`L\k 浢T2/0Yt'̣:x='.۬]^z D ]n`U,jq*ƪ,vK]v\t a!zk$ɂz|j;㉽Ybnt.R\u՛\ɱۛp {dq}Q-?&wQ~{= $C'9\} j 6>J@ 1ďJऔeKۯ"HnPP)ZD#A?{MSP}a H]z=%%_xsQX֝kL<{.S>~$ѧ@EٗD5 ­F]\VV,$󶵪3#RrW]Lqk! bF'2էq D~Cߡy$)3O=j^ j"xl>U$Cn6s7_SeU0vu8(N~O#ȉ/,je>Q(X8´0%7_ZhX3eqX;4 ˞#z+ܭl5[6?@ȻRRWrqy[xҕ*0 N68lŏ}EyRmt?Q-HjK!BR #g~]JhwuZo5 ]6VIffh9)m:g坷6]! wH^puh9LTy&YxOncuㄣAgg?\fq Y][Lw8ZP¡@!8D9MSL֠wEn+Pm]>+<;ߏRjw ?yPfv6P!x% qY及.؅,~Zl)VxtMU49+a#'T#MN[⍤QP-oYΧ ,VYƕwGii^`9hbK.DKxZ]Yrf >kkn o߱z?/~t9إx4DENUwTAYe^P栃Q"I{pn~VV)VYbR Sk.ŦG 8}}!o_gfڝbGA,FHi. cOѱ.#V oMKν84ʵ^$+W,x) ЬD5<΀Z ((D9A,IkŴ֯B{Na7&PnDgi 6c$4* -kPɡNj ى{= 7?jîqk-b'i&dL14RM 18")R:|`d Eu&EXY⹧2NO$ ^'Խ\<TJ,0}iOcwj|V~mbE#B1_:ܬ.p6ItٮZ\Pz>:qgiqӷ?ёԐtwuE 2xXG"2B>N#J)%&( !(^+CY s%V4,-CBQ)QM cUVʦGO.-Zڃ~M ۿm6g:z܏tH[>at7옘k>~(6zM{:{ͺ!Eڭ8Z0!ebs͗ɋèO:>ȦqAK @7=(T,ȼrtr~#6br S{ }9mYQV.'{WW[>ʼnk?>2~AdTX xg<\cVf>93Q)UeAbzJ~HT|0*X1 ,?%abj(-\Qn0XLx.p>8=Rԓ ,(G`1| C^o,*HOX-Y_yմ7@rs =LF="Ww. |ص fw4%Mִ(:iŃ BJ9xfxxHOlT8+JHY1`ERHTHCX)W:VlL!U՚%iiz'35D4׬KKL {ER)Өc?Hm1 kƤfд{eu4|w?/>T2_ja733s F/ӡ$LX_!)j:Xo^ (d#Aibq%V+yF* =3$5GEeQ-?誹o뙅P,!>hq Ecx ,  #`9  r_It-G]N] ,R_/ DA5" F(\m7/Q,zE z`3TmZnjLlS-!P.{J 9:ܺؾ }_wErbi>Pv0vś|}HueY7)EVT'Ap&~Ij$njc?`z+V&}a6O~c<-獛`.>>iY4ҥjUT28C׬^ qpX&4&55e~KBg2 -! .,\NV/Oeƣ>.Og# H,z2j5=TRBbۭv9TBk/wnf^56?Afjjqf.Xo{%h!xM}9Ӿs~QZ ` :D~sJwQb6;\nLZs~Aλ5E*`8q<5!p) 鰟u?[{-j$y,RVxRdD:7?o~[Q}N:5w'c=tOOot]߇ohyS*L=QZj0;aovsd)I$sMƇՏx}3RDmh~isp^tYQ5cu-k;6mj{7_inNMoCyU[ }lyXf23~U=E֑v7as=Ik7M.6h{0 X`~{R(jltM^mqŒB_# g`Ndb#٫@i7~ZP,i($i=5/)11JG -J$`/g0E͈񬟂 HT"-61%,'k598}TGqlv5ƽ֘& VQ 4( "Xƃ(/l[nLe/{[)T&+T-0i*&:$wO* ͥ 9'V}H|tF9ds,[*7>"HyѨ.X0QIJ0h1,>6kي}ux+=c)iF.=o"wg= ?'kgBSs'[lsKQ8LzU$ՄP h|< -Rol/♝awdžf6DxKeÕ퉉Md!w;aS\.ՇP HI+)E-psԉ:ϡ^(ʓ,XG.RPT|QzYtU~d I`쓾oiwQMp40Zgm =(;1U-%6`DKbcN~)0Da@8(^~yxoe/GD9. P} k|gQ$n0gG$~q#Bt:|zKW _{U(Uʳ) k^3(PEbEXqR6وT7EûX_a!DDhC/hSsEDд/_ذ_w =N69)l<ܑ9|+aL}c|fcyjbd!'BoF ƅ֮}δʶ4o NMamB<ղР͡.~mJ4أvK~cBg=^Å)1vZ ;<ŪS{/(oaož%-e蕂*pN"CFǺð'v8hdϒ|*|Tdg֑XE*By%M-}WN蒝qcٔuy/+}"خ%}EV^; A:a=䘩EFP&S.}|Η4,&OE_G9IW(b;eqĺX[fNJs$WFYB 7*'úUh̵m/rϲGty6skMiin=?̽Q5waNel"x=֢ h*g$#7TA^F(OiXm{޾x˫o9T㟕RYH?<#Ke {Q(-ԨCzA y7=Sr?ڹٙ [% 4S50aj&%OWu,-mSN&$˪|hL3fSdټ2cA*A4c!C2+ȿv T"5ypBokT/ԧ̧֩CփX)ӳ)-: 6G*lC3eg45͸LڞDY (θMe<}{ho1q7!IK;Zq[ +2au7t"G0 ?`4Tnkݩ }yNо7ơ6xŹ{u~q#Ypik,?aEKαJ+< nV Vneve|^?yը=6>Ö9N+ܖ:.wA?fgz~rgiqߞ1=&v"{dc3#L6<0Ց{9͓DEx-.\RiU%nZXb#y7pTUܛ >pWJEϮJi\9.|qڅh'cIYV:&;<MNʾw}J89cyq:q^ymYn%'a1Ao@?vb *RP#8+ ͐ȕgr%CPA>m ɆYOB2y^/]Lŧ$]72 ˽x PHJ#AknPvoqCPh]z>л=K%ڛc-nj2Har=mq˙{KfH7,&7Y8Ĵ,/ո(nWv-OR* ^Ghs3"N;is,0̉I֯+y:p9ę :.m`#Th6NG/ 6*ՙL5BI;B.Wwp--xqotj{3x+YT@AQXMQdqOӓ'<9 2;̾/I$pHxX4ĩ6Lܖs'Ŕ8"nᶑ併o:;ũ[&ڣ.3κ7Ǔxx~o, s^_$~%ژ]ds;l)6 JyJ|kDys FwNZ{X&NxMኤC<( ; <2+q6y5Bm佂Yhtxl^>HDX9K.ndR 1N>-u5x{̮1uzޖKE~{u-;g>ZyTu'-ꢕWY[ӽb=_Լ]Úf|5wͤ Nt7m/jvȜ1n]nP,;扉:7Ry ,wמ$A3 >m?P 4dXX,  *2ΣcIǨPY2T_< &l!r'_gB:eځ=3jMUDTm`0xorT0rKȻ/  d/KŌb쫳'/͆LLa?djU%Spþښ"ns!H2SF!|rzWVO~o龩eӀ9gP ӾăBggː4 桷_TN6%2tWN\츚D7E<5J!Siea lOF,4?>;oC8<6j?&`9l6${x?6GWK‡;|JTXl<R a@ݝ>!TBeC.})2noZyCTݎ|>浐2f'VĐxjqT#I3wf]dvO v [s 0>gUkg9੉ĨN6 `lI JT\-@xa7't杛YlGH@\{SjBfz(ALNȞv\se@6" ,œO>~HL~PDhF(٢%CU$_IDrVSa`$FlJ%)F?ҥpXh?K~(dOG; EwZ4yȒa}f}fhj__$⁹=j30{:pm2{Z_ N@g缢4ENj_tEO^18<ɱD aix)`I)SF@yDK~j0fCr᭔FՏ{q/B؜eh&k.\Kd}WAwh91ʓH)tdcL4Aj VYWW3JԋL EJWnXCxyӹ΃F$Qa)ȮovvFBMt[ze{`;`9{U0UJ9㿬띲SO  #K|t &u!OJ}j;vs5!`^x1XJZN]i[5>X5PV۴TB¢KOAwu'@/l([XK55U!nKeloJW AaG|W#3q޽s7o G֫ˑDI[gzӱX) MJs1Y=fГk>$csr:?DUh?`C+ƂIt}xGWCསOvç+%bW")h鏣ޥօ]%?bl~TI ۍ팷OWiP/"tՊi~1)awEQ$K"I'xB?F&K/Ik)Ol YRd%I8x(M\X툕tr9,#JRÑJ&2):;?ěsqML/}YZ BQ'uliS^ecr e"cO/hduCm [kJpq>ivBE)Sv%må)^<095zީYߪ}q%gyGNRn_l:.cR9d7u3G&*yÇ8$eLLDAk1dH=*LJP`T!rR'o ƣ9{8JzY@?x7x?PKAJQS/EגJ*6(,H8o_ ̍YQqZklvX9 08l[$sj(AJàO@=)RxLHjg{: PQ LaxTLMy7 ̯:f8mI^/E@Bz{5؛PM^`ZOݕ&*ؾ)= C )o y#e~({0W'дHR IVuixJ{hc̨Zk727,l2cؕg=1Gl6F[CŊ;tx4tŝ4e ̏i=6„7_EH\3 s+j%^Bu+뺾g=u>ob޴{]81vLA<Aa֫ð/:qGz^oΑz}Ƙm:WNZ.ޚErh}`ă,r7b.1ְp*ΥnjEΩIX3M U4Sj'Oh(Xʉq䧫c_&͑вWDfnڱ9iV#qRm}i R%nmU+R)y}W+q$ ;dkEAEzC YX/L :O%9a{/ʎlb%0SgdM0k"< g~5b {2TeӬվ4bT;p֟1Hb (*0@Do9g!K?##%7C\]1K, I"HܫV:G^uo Ij%-]w3:c@j#Ap4kԃ 6`7P %h^S94MJg/7[`K޷k>a/#} E +'60۔n T^ -W[w̨5{旞sIC:QqW ӖBskF_R2ӸYsEotV$o6 vEv E~҉eaIӃBDP9˦ =X`ҊəT:iYCw^h$#_af&{SLjPie%Xd}}Wx]r:#{ublǰPL3#D-(6Kleٻ3uzM1Kx=?_Ea%)X\-M zdeX;aYi`H4%bکpq~sI7~gL͏[ lŋx /.w@. ϡ%"ePx'+4ڧ#w),emMv=OT_-V鄢1kklo TJ$V)@sm<\{l($Uqg\zզd&C0Cez?72Q+(RF.$\Zƒ$aTș48R>(!O Nݷ-kٕ^ۡ:ɰ(>#g%4:}pI^N_1'd}. iwWhGlLrq dϸğiW6͚>D(IāQʂ+ 6O=:^3Z~|xNaT 6,9oM;SlY`a~*_ VLP3>z^o9dF7﷞(xlnD xL^Fa$E5Sue)e#t5lD닿5 ўE(K&wRֿق|[ nƄP_ٰs DGJKNB(qL梸GƳyOjZ .yJ}8.P>`HQ|Igk euAAS  tXS>ܟs%ܗ᭰m3kYg *7t?77!\p1.ڀ `KqgQ;h~9 bċRE[;;~19 B.$S*}lJBao Z$nEa"'rǀZg{zT'*-*-;*ltS$R4CK !pFTa#!2ҥ_ۮZѶ(+*1 97!@9'I(8˞.jK*NX +L^O]:I&!^9ĝ1p(o@PWQ_a.qvf ak/bvtnCR v0|\,9x,ڮeRZ;.$QBMXb|4^:Ev<9HS5ȴlttK[/TV&K bBg}~3-nkIxY Hpk17|Iɉ<d`$Ƚ!}c~a:_~exAXQ0Z1 Ê hUk i? wѽϕo9!rFo5:XKHt\QJb {zZE V|qk 0o~o g0_T;CWFVwֺ)$0_H"m nrZR,g-lW R_K&,/y$#Wlm$ 4gowbFR9~ltٻg, s=ٳ+KDŽl{N%q<_<s<z uKPd8/ 2 K2%GȮ,y[^}0%k0B"O|I=\61odI!»/&_>،DDI|lߑ@u`{LCrgv7ۻSNb|K+Fdts|*0_@z>-HEeP6tCv}IIgb>@ @#'&:}-ή'OT_˲uF4VF5y3kRқPQx*p׃KߣW9=K ]/hIB0C(.ý:S 򡎰SJ\r@C-CbV*(B ]UocaCdz'g.yuysaϔ1*KKr0/%)yj>^l'Aʥ*A" ձ?:ftZ9i mY@s]ދY,M),v@`,hO]M@d@ t)c: o~ŲIr ܺI" ']6X+bSToهfJ֢=kYT i#\6ޯT\g|޴?0J;ԕYWb0wIAB@/k!dhhСn1[Ǒ-IRPT[jŠi>1i8-]X1?߉+˛?OXbwъBS 93u qWJv ؿY垺`+x80XދLYB, mF#!*CAɊh;Uj7 es1 ^ Brh?s1JIe7g#iuo85iZ{oA1D(QUCWVXfA23A\w \J#u:k_U :82Zi޺\*@EkBK Qj< *:(O>6|Wڐ:=+R쑠?1ȠMVhhQɧUu[FKx/2)lԝx@zR[ӨddyDDbbRl.cq-yT)Sk?1qo1E$mJ?9(@y (IMGL6nK:p89c̲:nu_U FƔMGLBhPV0'zywBJwaBC#HuؒNc`׋(7}0/p[a8Y *3?PxHypxBGP6&alB`iXlL`.d nNEiL# R1}{'r]Q'( Si<1{w4ylUAWN\'7Ǚl";Fw{"o\فKHH!:ɚX5(~iٔ~?+&bk}p2INv37.ݣ +æ qkz衣 >+IrԩuD+gSH`Iy&DMa|7C`+F4 B0,XJ]y^dMO"5M{+fM/,ůD@1\ʅŏ| JD0$Ǽ쬀E#]ڐ#[:}tsr۶ͿIDݔ땞K ` sD0Sפ'q/Avґ+m^ `J5FϘ6%'a`(ثw=PbRRy?sk]tvҍoPN.Vt?eM2l§D7\(XwVB}zv"Bs2 8RP'^HA:L_t '+)g,•x?+@ȁ2p0B}Pnl)kzQE'!Uڧ1ҹGTs$M?Qed)]ҺPG#˱*N ,H3(\K@*V JC?ťɢ6y(DgU(*x>%ft|_v#>zgZlĊj"!NlG8?`9W9o&9jCPy|CD8.jeڡ8Wѽ2CωӢm )fl#0ŮZF<6,?^0Xl'S!N[YwyW6DgcOCtEk}? k&:E5ej(Mx>U5Bǹ01nbqՙ֯>8o#;5Fna ܭHqAz{՛R:-̝ D"hIu OB(_mtq>d'Gi%纟u긞7ym}x/Uڍ3z93@>ɡӇQD;hX \?63Ewܘ;sXtӏC3ժgYdebސoY߭ͺX4qOcHUv[{Rǜ/Ff}cIa]]2zeFCd$ /D&dvАU%c`\9qhQPRfݠO1 $+G8'AB}4Gm/$N@#54Yh#g3XN7'9#P?ߐ][dZ.y |eMN2kjȡMfu-_ÈǵZf VD Rᙦ.YpSҵOiB;@rYao?o_ jcJ[ďHWf ǥ?L ſ>zeX't6Vyx$q41hbH\J:9s=ͮ 6HX2a$zs.>Π)ı^<-~i- b[ulहKYҤsDP'P="{9G|>[+;;L[UyK0 2Uv6Ţmg[\cc|J m;sZɿ58[C8ˡo,|. +K"Ȩq EhhdbajvJL}=CffIA]_:8'YdE+N~G$ch}vl;5;3\;͙a(Z^۴J\i.2mtRH~A_MobvRP]9)}C$v7WhEc>]2aNaUIqg}='|T.[Otᅖo5i6|eOPhy 7sy"JIHOdỵ 9DZޞۿK´7[Ǡ:sZa#sKk_Dg;_y`b!օ>v(21ӟ)XH'7΢e>8/ZZl?>2r\7;lsM|K-_e9W)6t7Fv vρ6t3ՔԹsۤk$_'b%ʭ('=F'[6uQi$'C, ˢD βL˸nSOrn<tBd=yJ>" }ytZ?H>kMbJ5SwLBd 7qbvF{7I?TI6u~| GAVQHE]j:^nzd4(1h=Tb$Ʌ0ΞS&<>t(5@_nlʳcޞ$Xwtڕ7{]'7^4h;Ճ^,$%:wx,OK=tgԔqYd#Nʁ[ Yhn'zT5ilTgsG/(7KtwcH' Ydvʛڿ]"]P (g4Z/lWA+.7eH>ƶy',Gŝ=g c}R ~`W~6O$i.γ|RtDAޔNw=ىB(ޝ9>Zڂca]9.T*[ڹn 7K8œ.lڞr8noupv: hrC?h}dݜxDY. E, OjэГN. ēBZ7ѐO=]kEչ Z>ވ7yRAXݲuaJbtwZ?ǬӨ]LEVQ9Q~ b*!å)qXd)kƄCP{]atMC}T僵c2LLAIX-Oɱƹ ya? ɦ=߮۶wvgPASCHFT*4BDri(pD(6i5R(b=ΐ&Ō;_A JMƖ CRzWT/w hjܡ20;S[ rz89/`f*=LrT>3t@w}ȃ_ԍ.kU$^F+j 5ʦþUw'$3vzSeg*4}Qy}1}dtڅ$.vZ,|3k@,n2Ca -$ /=iެ[WBD5jo*vv`}s,y5E_*DHE;vЦ6'=-1 d:ȐXRzKǝUN{26j׈oYʾIΧ *_*s m7ew A;BVadJ>h7۝~y|N#Kő@YO֠1bjYi"9b+_N4R4Տ;?k1\ lx+JIS}Ӿ<92BPXn8^~^nUpd$l ,9_LAggz,&sOj3j:ET<A=5$!0cy?D/_i,78/:j-⴫O$iPƁa&Z4[aS1w";9޾/3:r -=3 ͥov?gMVCqSԊ;8N9WGw7Q-CʐnOBf 2SV>b`Eb/koBf13D}&nR\W oّ$k9(s$#sTP :*G;GcKXxRGcvc-/@ E_A|xϼyHig$FK*LHʾ*Ȋ!X6-S*+H .bur + E_w׵E'~Ԯ9lge8Hlآչ8 ^Or*|\7lIf#)Iފt O=p?Nsρvуؓ3k^C`don]k):z 2UPT̻omcn`Eu=aYAtXӰ&_ŭ E(Ÿ^ނH}CĝkGH`vmKn*32L޻Nݵ"H]5w?٭*s9E=$`Vku1ڶZ^ _Cщ{KUf87,u8 94vjv<1}nUōq ݋OC`hМ{`n5r@ yQcoXz(yom3WF339d?HG_@z57Z|} G?-J{l (v i nw!A,cEjBv" ܤQ벢LjwODHx]m'M ~P|a&A&0wgކ'TtwEct&%;QX %a*s:_eiIB`,#HRd8D1?)oAsTɐ8QU1A1$)MP Rwp_C؎lߘ"=1۠B}H}3:[{KoԎa &Yc@zEBK@ tXzŏIjpj=;\3i9<%U‚-^IUW>Y/cO1A42qc?QBW/_7vmܓ[:4ȚMaǷ 5ԳY7Kt)T+Tl[_3Q3Ra.+JғG|p-]lJUΦ ⴚDg6+f%1 fCkSoiX-AƴGXq7rKX`-ij+)~0Rb2LΏain۹ KJN"WŅŻ5]Wrޯs)Ly:nΫq3lO̒ \\@՘]m aCWhVͺa/_$սCP!nVFH4ڈ])q:{Ū6f;ҬRJb⩢ rEfJ.+~(ÔqvXE@4 ֿa@rļ^=LYJ BQ"kEZg#NBܶZ[,&F 쯃!gy<zpfa,hFpeqXLOŗͺoMvt!`9*|ua{ia'~`9?˳|".1_쮛-IPWp?@ȥH=2*#䯻W.U=ޥbzW p'8dE.(+) #D@HDb*#$wDvBֳ:^цQu'EJWڡ(yEUUQ( LJ&I㘬h./YJ(l8@] g7nX8 dHpW0S ˌa{} ʙb shCjjEK'o4!o'Ԙ UT_TLcnw>Kz,îrWSM$WQe)@ ߾v3٠VWmI+UUZ=Bš0 Hȧ\n7HLoejJ2p#2i7.+n%b]SيD6nf⫴Iƿ5wYew?s=<+K'ݭ. }Bo6/U3hdJ"r#w9_^{)JBbTD*K4"Y,Qwq<\<ϧ/p!ٿ[+_T {cywÒv$ǫ578,!r sވ=JJڞW~Cܻ{Gb^flv$aZ}zB1{ {ޜ}Da|vuO?*ۨݵc!reaMU"v]3_wz۫ ĿA c< Y`Nh(Jz+Ѓ ,gZEqvAĉE Hy,_Ћ'4o?n7Z q\6.JuF/YԤ(SwWL!ߦ^ E:`dh<9> IAH04wNƢx m0a&IEaٯ,M/d ʴ#;=Rzn42r)|r' Bl7i- gpϽZSi>V204}CC`JQe4N%X.dMǕy73HnyS~q,i1c"!ZX@=wY39ܬ01<,^HP6 XDb aS2K`wB#S t MB,X E5A#B4JA4ShF٧80@6Nr+VY*0 >an g{  ۫eH^6p6cYJ8@ִZM)\}jP7d,އdNz$24#=OYM2H243n.hBNh,'gho-8;!o}_w{ЎH.Guf9ݱ"~&V<{n"B1~oT9NLɯ̟J\L`r*3~+Ga@Q,E0F, 4\CI/ok, g46Iy#rv GxyթEra19G@ΰ$s_)^gsg(lDw"OIXTj'?CZAw?8= S*s=ʖX `L:#Mn[х -/ Ffq#n07+X0Yzg C7TǀPY&2T\P *3bF8:a$^>%v9WG.ا1?kdpkNh<#"HP P4빞hN-K rC. w9ZI<`ԓʮ!TWvzKDGt|ZV)DTJQAy$.FK^oEiueJVjDR43@ٳl4g',xU ptQ{ϻ)߾cHJoi|O=uxdxB]Pv"||Zm#A\喙jҫ-3tYjUu(wz TjI"vRͺ?D~a:cl9;L : ߑMNZr$xo~kVLxepud*XRa58P@2FҠ=%9tsbS(нɜ  d)> NKEO_\etd1~0ӭ]ĝ$LhiڣXFDeϯo5V(HPY˚n_6:#gSzN4 YA9zN45c)-u"&<) `Oq 2cC!>JZg;m|I2{`H=u"b'ё䖝G]i \Wi`eF\,V_>9 5.1`=zk\auJ{^jcA_a)bcҋgTţ}>!f_û]L})* ۘʦ|#3l~qF ;AKZ(q>tӷ'T[W8=7N EXf?绲.s:菫.w$5":@F mG,COj|Wykû>H97xFV -! Y. &Y"1+s8c2T]|VgtfSFH YJ~2xnqO`҆ zIӷEWx,vVP*V(Sa LZ㫲Lm%SnVɏJn=嚑,\5 ]lq[lB.r^f= ǻۉ5UX2Ea0Z ,|5֏zQ%ay\ >àAJSd y_RmV Td uIj5]vIR`~PPJ ' Q)hI*f;!nw 3a̶yNػcRWwKɸV4NTv Rz\~M~WIo<º;-Z\gg$!̢nqCiT}Ra\Y)~joidפ0+?Ps ohcΙ50| ۻWb!K}xhR l8 mO4^ 7G0A*B+NBTcW>8M/oA'eQocqRNyWbREQ(&O8F}?80=bP=;VPlZDc /c,gc:ʤ B#CtKe8Q"(#9&w&Ǒ e>n"LlW+2$# ϼOp#C- D&x?g pyQHA%9lOc/D+X[m& Ɲg -Va>JUKPH%!v%RE9^ƹ)(H/) ގCm pp29} l]w$i)@6+9%Q2uNѬ)or99pڭR@YPT&@s,A?n3'ǟRTVmfp 6Uڋ5IY^׏Yn!jOЀsxHFN Ɍb$Ati =gcCa+'ƣƏ r*,{͝,t苮{'ݝ(uܮ޲j[N f6;ufI*BGʌq\c"ii^g}GrT,B%kω%eHE2"I.u(WfFsӂP +tiA]@Ƃ wv{*˦U,1a:B3-oC,nZIs;8fR6̝.9WI~q;='>]KH4*5|F"rZ\2E!bEM6eTP%[L!$ pu`I&@I(xыԾQ APBڹ6|Sτ&L]b7Vٯ[86ڡI[CQS q +oKv'&q Փe`, 9~#sBތ^x}q9"Fm"|iޞO傤#&1_϶ʝȚ؟/l5/(Z ivqzFqkdJs8jgd(:ZJ X..ޙH!63gYX~EII+ݚOeuhgx(/C23eec})CQ^@CXj+%+m6jty.ϘܽtpޑLDo.6Pa@@"&&%YPFi *5}<'%`s#i8¤!)zٟkX[Ora3˂ɜuF0UJ8BЫ܍;N۶_2҃\es_gKv9},R ttQZ?%f$|MWU^AdI+˼,Yt Q,ɿT& +YJ:y rs=yUҁj"u$cRw_$fa1,DSh ~3'塐LuŃ?MòerϜGʿxn7+2>R %0lh@݋֎vN=q)kA$I^qAGZ gaQhլ ٕ1]UB)Wr";}u N*%QZ%~k^$2zIx濦Xj6?8l`%~0(v _nBP-+AC5Yzj_*wM6~u;cq KxŢ V)>Zta * D:8!D6NE>L`a7aH<s}S*|@tQvBƒ^U+~dE⧂rF?Cؕ8TE% h WpsjB\bL.&Q;v>,U| w]>qkB,+?ˢ[͙|c?A$t}qAfCѳ87 wEeXA?d'6Q-^׮qytzds SUut}Iǂ~X7[X6!S,ab{*|H 70)xAJ@A,SdUU~ u&>rӘHO^X{wK37MMG> _#7Dh"0ǁ8w:O+һpmssy+)Dvrxg6g}xx(w浅0P:$k14 B ޥ`U5~;HxacJҼqn0)%)(Vpk;.&VhMx! /S$ ]fKgv)OV%Y4Kzv-@'߭ɐ/`}9k$C!S\JLL"[ % ^Ζ<|GWI^:BqtgN% ^ ޅЦ8._L&ij:M=U$S`n``*Cq -Bʨ'wwV2I u{0?Q$.%n57HUVĭ1-oWSV:W<3avu ɥlV1鷕ۨ3%<n7n8̈#z,Ѓ`|&,z~LKv6GtAS^0WsE^Ӵ%3 T|ťF7Z (X wrM$Vor;=8ηZ}Zx- +j/s9evz{xW-~0ZkE$ciS.bw5:-NmjCTP}!+6&45'89RɏvDBSZ_ʐF^c~Hw'o]hb{2ۓ"O_A2r,@dxP/qh)$eq훇8r(pŻs' H8bnij B*: (b@Vy mަR#`mV^{yP]]ǜ9%Cn}RwXlD1?1HVN`W 0Ŀah-R#Ҽ89j݆LZFY6P; ЋHLҤ<(_y3 OЬ,KiUn?IѰ-$MmėyL@η@ xcymԫ4DqZ/҈ioyzbXvuók<-{7 zOKul7? o k`ag'W&MK\WRӳ / >S~w -El&h%UtκځXVB9fF"Ņ>͛NJf4d#J2"ǣ,0{nE6Ц)=YrvLrEcѐ *[~@n%Z힯GG ezzdpYćn0"ɡ|uwͥ1!Eğk` ;A\>m0Uf? L?Vi5m\5&YM2#s@#"G%fSK@SYSU[/T y&hrc)!:3 ϸ^ vWe[~Q-jEeE{C& eG:Z=ҫE>n7l.|]kM"<,!G^}-ڳ zdȲ2h ߉UlU9]U syܰ# N\ĉ obUREJ$v=^czd// }޽.عL n I2Z2ۘ+x/`&[ q[¸?k?:Y1rW.'H?m?ebuuRPEbJUCClON~O,ˀLχ33-oU$݌3U23+UI~͹ b&%˙?tL^w c=,u[(#>Ӂ. 0{JCA_~7>[('"02$<8%3EZIKNLSB3A(@PY2--R)2a-#F4e%W,l/"6(5iD% *Ɗq?5oRp}f%qh{ 7+~s=e]?JK!oNm"q.v×W9q3ĵ gseaݩJ16GfmU{ '3ݨmBV{w$gE}X¦??U~j~w)dz?\EzŹGhc]׶.G G4ioqeo]]„xʫm/uZ-Jn[Y c !"H*X|L+-0sq"2}tR^,L0(kJ沕 yy<(4ygֿIܑJ"A"gXyJxA@sߏ\n;t#{&VhX9#`, 7:u+;yK.t2 1`W m)5#W6LaMֺȴ=Wh'Mbmj04*IE}m"3eㅑYpS‚ۂ6 =0 ro}?؍dbA~{779v`$5ԊǍtw 3N&A{AnsX-fw=܅bfHxoo_˭޹g} ]th]GmnVe)s~:^;VOZ pJྍPQwKIsX\|A;T<op$ֱ,bwEa ޽DN( MW_zg~MV~X65 nd]:s8aRxvpˌ{gx)gp^hBU,iD!%ٲJș?&{Uz{Qy+Q$DVgXa,"ˉ;ɣYg?f;x,ϵXA=u99>#a6-iob0x)\sUO !G,_IB8swex}|`Zb~]@ǫ P4K 谋 V4aCogQ)$ h"jky,Eͤt$7VL)kJ's6ހ&kX_9TZ)gx^L5$Mvp1R / $7"M;DKB2aJPakzUm{_4+j5>!wlAff6o"* K" Th'B'O /w!  qfC3St6A2+$Y:!C`efS2x2~-^SEŎcAG$%PDUvJ}1JE,Ҕ(d?K^u}CQ{֣t TI# g=U/ \K_[KKm UE/ Qȥ0ܒL &wMCѰ%PdĊ0oG+ڧ%_5X]MRym_}f 8iQm&,8]&+kf>O{-U(<翮mY*e8-BؖL\%A,?9]տEM!:*}Q4Kaq[TTwa]*]"G8cEp l0'- jƙ+ݒ"Mۜ5ib['!<(Ad2gŎC0 'E#)pqnYr l XFoHl+FbEȦ;93 !i%Z@>)i>}=wݿ9Ky y5] ]{լ1f1>=a,fDM2G$עۯOf~IϠpd7YcEs.m."SE-hr;LoS7(Fz)⒖9? bO<P"ڠJ_6^d hm-5}St&2U q˩4jp>~ 9^,}#<)Ҡ`;P-̹B3( E3$Kˬ@o90{s w[!jKs6hWefجZ2P-64E}'Ev 3^tDfsO;x%pOI9l;%ViNYfZ&$@%K6FxBMvMQmc/W)HB9a|%KTMWK1/PJ!#K,/+wg VܱCUc(J2%2/,˩J\rܞꍓ`#)VVyf)3j/sQ`tƄgTPJ]ypbquwt:㠰€PIXbiPJsjcvOd44 E,Y2'e_)"b?e_xFO]p{WZEKV+`lsB0?3E4㡈J&]1Նwƿˢ)*㐐OD8өz^նG~s+#ã/wx-Oĩx :MӉɂdp,vD0%$ll`;c޺8 Q۾,vqp9[kq?$.R\eWcyHt_yS ~ 5-RNKL04@`p@VWe׏NbN7la)1V&VXY=OK`*@wV@OtaA'(06h@9%hmSvw$;Ø~o>LB wTM{g'tՇp@Lx! 񇢻{^og`#V(3+(tƱ#C9}-LMǷí,<,8A1He3[ 3~7s!j߇q^p 7:pg`]*\+8^Ŝ뫪ƷW!AKÎwgeqυ&o mi޸[cSʰ(( D@ <9̧";t_nx-Fw<]tSɀ Q,{wYO'OSL!ZT3&-z枎V`}@)s! Ts|<+ߦ5ī?7%A3QC^7U#y. xr`*w:5սpAX7X"[TyV 2ɻ\JO?U@dT͖c8ʡzzzfqBkJי-e/xQB^>#Y\?^8N=޲s[zօ Pf¼';mDގ8_pKsʈ!}Õw>r6+lc3! P3w I,{p3B.#5n)M6), NU#xs(=___jAP#I4zB`UHF@Eka=V+3"SW.Dȡ .E*S`<~\< 2%0h$:H˳Et^֧kJU@&&Ag9y?2Knд)X hTLڅ 0QhЅ,D1?Å9;2Jf 8q]|&w( M(W +0fEoh0C;JssWY"RqK@Y[)%9_ ,b/^-`,VsNVy+[sY6ʗ\ʇ~XE#G7-24!<7TsOg7~S<9wݮu̧ٺeLE6߃FLE҂Jn Zr:z=: C=L!}1awaKo7vRVidGջN}+jAcxm׍d,'0cPmlQx}%^S CƧm߳fOS$ٕCj<'fC<]4[|`Ǐ]#bIUMU.p~5md(oWmn2kQ*n}x۟-OfzΤ:F灻Q-;Q%_@! Y)}qx=S{՝fw*& B:+5=/mkʨ8bR+ozh$˧ Ϥ.?>^n,42"ίsoJvӞw5Is)%[3o%Oǭp|@4^ɹMh= zti% qru"z͜C[N9)rbyQzvh?!<9gKt^zǖͮ"7騬J#^k5UwAfpUQ ':}ۦ85 -!B_i}EK;Rv DMռvk]QۤܛfIu4k9Im[pn1JϘ1NfQ*Sr;F^y1#]D d?6k!~8*U>QUb;:q䩚}"ӬEƖ: OE-Rs<*o'yxѮZvW΃SJbHT9[zٵyhkΊ%uJwV%+Wzܑ{vpHk*ZɄh+f~\/fS'I,Έ>t%bd ḎVKMoi|;zҋ^cȫR"&0< ϡV[ξJ9 ZȍYxbsND[oZuN.gib*c!û3N<[mnIdxB5`CFI:4wJI2V:@h_șIN+ f'һߠޕhiEwMȉ ۿf4WSV\bN(P}C*A^6`aDcO&`anXZlI' TK`7ƹ.Н m2z[h-QmKP["ŠK{`$K0E̠ÀbFR0)%Qx cz?M xE /KJ0vSʹĎ|l)9R_]O ?6{_je/='tqO[L9p[X:sB$ZjZdEyb\L8a*^Ak}"`^6#8|EEvɈ8s4D,Ie!'nX{] 5+m":v}}.G;3}+g[i?{h.A?UG XŝK鷓PqRyībXV] @NboȑD YMpc^L$^OLNlU=zm"j7i'O9\ʶ>/zd?wGnA"Da4-p4f^aǏFQ0ۼ%Se2jYU,E@XS)Hɱh1 .R֯aai䅻\ID8_Td%d*ŧL k 3D"PY6EǴbצdl)0BU<,]͸Uӯߊ: 1NJe(DBpBUPDZ;Af`~[ .Ӕ84MkL܆caf]d\$9~1drD cC=&`N)Σ0ZW~4ܲ =} "HN DQX)@ :'f0+R. 4,T8};!̽lIHl }7;E ‚ϯ4{6 afn,bxYK] @;yJ(G$ǒ~m"^Z@3$xq82aWݻo9֔5J u ڧ>u۵GG he/߽n$Dvu|gFS͜OT I2I  ?hJGI!ˬr@݋/s9 S@O"{'чbJ#V2NLY j#j<exIo\SU۫D|ƒ`)60fc*<:EB4âhTRgY]t9 $,&i"bRaPT|*1L/++r?tNS=):/ ViOq@JLxtp(p0awT2805[ޚ!Na wCV;ik= K^a˼N?(|/iTV,E6E1'8,J` ϫV$Cͯ}SE #!CEPNv]MVW'-р:ϜxSnCIvk= h]& PW@߹4l6<#/kA-җCM  Pj*>w۲pY`N‚XON88bY9 p 8#,&duGf.=6踠#C>SrĬˌLv+i:)*lˬBaΓNFUwum)>- E3,P DI*D R "+1@?$N w4Q|C~uz#A+=J4fY`@9Q?+ISo!t&tf-x2[w" =I)Þ&l/nƒK 4i4+';ɰkڡ7xj~%U77u= Jphe/:ws`\ޛwю#Bz=3I>k-K}q{8 W%'je24$~8wsgX(|+ZdL `%n kC`s/#R#{}o*ڜǣ D]LtlR筣ox>r2+Xh3vƙ$Gnǧ,C*svIF,i YƑG^+i3:#v77g<-qJ~^i*)$tdL9f_;2;>Вjz-5 =P JHX̤#G^:_ c, $,V۫.̡"W) @vTU2f%nFO!nR|هni Aʇ'uQ)]X8ijfO?/ˑ?|q6Ly }89pZ5hN.68%]=kҰ#4o3nShǼ.pR,VNAdZWkl{չOJ + 1sG+a"5ͧVl"JSCJدrr&JŊ!-)mӑqqlZM\bC+qpލ2v4'XT#| xQ\@hɊ?=tSx>[- n3K4)ǫۋ: FRsEK5#ib~"t%v{գ,Sʯ $ydSM%h3TkB?DRCM(i5zuB :p<-vx{gVoVᮧ"|.pW#j,qe>f 9+C2IeR(~Bӥb͵@|>OfT}*Y>&y=U U aJީt%i.$)BZZԏD.mF .=[h뙏g=e%h`ltrHeB= ˃jۢKU7r)MgnJLv$f;R3D1?l^sjf%. =;Ƴp@E^ {+·7qr($T>:^E G/NxtP fk+XZ'y'C:n}rÞ*dRzB$r+YXEzx~д$P/hS>w{8N&/e56'/sBkbr_kY&+/OKgqo鸶Os*{pH X 0?lDQNODžL'X.lgbU1O*6yoQ?6ds¼e6Gyro _r *w˻&m<" @ |,s+Oԛ\gq\zjN53ꮬږ#5Nk n D.!C PIYL?c`\]rgd.3fML3 ~aۜ==8j/OwۭtSf/Q6=@\r8,h…cЋ)\.*3>Qs;N s K}ӓCP# 4{G&Щ`g CXQQ9ph0;/K |sR矢ՙ^nL \x|d[<Ö]pb~RP#ywR{-k+4Mf{ ;* ړx(j}94$1[WaN>{ F%j_]\a#1/kjLh3.[.brwwSYc_qA ̞WWz-_qwK/"r3`_8+Q-^"guUj%4$aYܛf+F͂BBVٚ#*#Kv\g~IC'e?iU3%zD)49V7ov6 f?B je<^e% o. ^TSg8NB,g+9KKsnsKsAmYq2YɰC8JޏԘ5pn̹87\jND%|GZN%տ1)ZG&QkF5<8y?{$/A..jm&p0{}Fm\_e^]!<@P\>>/YĴ,3Mp'5\ +cI,z -DV&wI耲{Y@q/_7p*\b.u|K@*|?=n(19V<_j#m׆5~;MaʺkM7e-46h >8}D^>r"#3 У"$NFt>.F"e86gAPNת9JgD':)9봙NxT{qa *\yF]zVowѲnJƲdR.^\2e ʞ<Գ{e+%/PglyzF _lM Λ3rI 3ew5'6)v:~5@;N.Ykl8SyE\~:cF "2'(NF[lK|$;G+1xI~ħE̊Vb F}.jcJ:[7AWQcI[$ O0%ͬczQU|1Ð2YPCJ)pV'pss%C}S_#PK=wJ(aKwُ'/8?ԗ'uOtyiIbo<øn켜MZ(h{Bu0AiSGhdq\˜<4#ǩR+ bqq7.`pyr^FH-GܙNCgbFj5N2Uc$R.L)lJN$E,ÚFw 2wF`ZInϷ|Qouz9hCY8m9rJzFF [ک2|#9% 4IB0H1IDTre`A@ U!3\³AJ 5Abw Nev./$*Sx*%C c1hd?>RF``y H9 J e?8.Vlp<9VubR?q]5ب՝ۡq" \I跋T̓&0VcS_hok!mN鄔"݋&?GPߪV΂:ך":Aɖ*K8K5[sp{Ħ`I{>|ӏPh};e 1WbKiOʛsRD`:s= h2p}Z۞Uז7,WVpAV?t6:s=b<>M)TdVt{1uNoאZނ\S>?k,z;/`87zȎr^.55W$Dm;4&.VYLHud^KۯAF$@aI Ǭ).JAՋ(GNLI*\s)rJMZK 0,.D￑#%B GJ T|d)Q \*UrTݵcSrO`xTNV"W(e=o(ݟ-IaLvR̋ gmJFm]&wueH`5J?,O:.ϾDVӤ(<+ۧF4di )d-zLJT{};cJ)64"QSPXlĬhgg6a} ֞fMi330\t:nyk7< {0cv~w3)$m FF兪1r𯼦-%cka<0:s޼^Gn}'y+|aCwVb1$( AaJ)HD\V+*0LEe5!B2pr3}'vvS˲K럓\е0ⴔJbq-˔* MU c['\n$^0';܎x!R_ ':<&#U̴}Y'zX*U-缸āWvAvWTF394]6j}l'^:ͽ׶N{ߞ'ܛsn D"ln@ ݐ;3  l.%2 HӜyo N^RlgLJ/6U$3$&̋g?M漠@&QC8S Ep rB֎jZ|ےu L˪k^e k F4@ą=eK"H['U=+MYvbލ$n :BIԩC.rc/h3FN-O*L7>-<]A;|!Jϒ}赂YtܽHIw.U ~dl t:ܥ"KaY6tqb1DĀh$,E΃AR͔ٯ-~HH F/Bp)ć59,Fh򙣺>Zۢm`+ z=r[6nl>STGI F}r/Y٩ 9zc%p nu5 `, T?˿)  s]_kjƿ QK/ %_b Ҋ`ዔXcclj9y`ObIyC]z"wX${fU;/fX}>ũYbVt1k7oP>u Gk1x? k VCCF%v..ڲOcM uϜ_s$,>[Һ>A`[}y]ۂm7@iY|iR/Z+SA}Wdpo4E~}s@fjp}l_yg*mQk潇iLul~eh+#y؄^ׯ`uų)4WKF񽓎޺n)?XdGus*ˌDj/SBbCÀJ9rV`-xDbz[&³7Or >h=׎Ӡˣ%mD%/K7ꌚx v-Ѐs*rΑ(y}E=~Q.scbynYV}ںJbn9׋Bԩy|#1CLy~r~uY'Co2_9Kn~))r32Р^䕐g$=1ˤЅKp7B"s~^Sd @@1" ՘S+R\|Ejf,` t)0"IR,5p(pfx$a1)}R*2&\7߭R+Yۋll&Fޚ\?e9<7|s`ET@گ'p3{s>kj9]֎VOf|2:Gi)%duBUOq_NP.<l {v>>#{VvQ]O{%R>8B8VDfsy zЙYȂ\̌1hr>srG F_V)U4/*L򨆵np~aWk- >h&O%mI1AYŦ\OR*zt8>s{oz55Mtz6[+fB'f˝2PoγӮ%gַá2".֡`o!q[wzG-rj۷nfՎnƽJHy XWe\)yeU t RɎ߂ReO+6]8E6 .jqoTcz@X# ^T{^{f3J9cv"W/3S_hN qQ[h'\(}0M1fOFqHdx^6}&! Yy;/t=X=Ж)Lb` e!,^>@IyqB6$W ~+> Ue%9 8%ǝ+A!, df% W۫`9Sx%9n5s8tVG2+%sD"\JH`*d%.%IT{7lYq%H޻ECƥ{ v哉F$~R|vu#u` |/ ![yƀt9wZzqi8iB@26:%E%8%{,] Ne86d2vU]Cy4rܜpˈGh &ݧR^{;M41T<wV)B0^&XLfWyҊ f\3WϞ?ji&b K6R!8ŷ|*sXIfX-U7-q3ܮƇ+~ [{]z}O|M񂪏]@,\+ in2:ŕ+a=EMQ:~qyzez'am;&NJE{1NJ/|>~%D=%Xw@vQY/BeM82fAy5H'H#B}o_ [acfX^d' ڗ\]"C:GJ[9I-AJ&$J<»)Cf O/ȰZ<5Ab [|F#p4Գg6l]DDwd|h/]|4W^śӿZj I|jY.\v`΍dM7 V%˜VHH.ylz[cC}Xӽ-_L4bbY5kaMbw<9`9)pX@Sf"#W̿:#K1"dAzwq.l g-W.tsxb>tJe&7_Fcz\;+8YU'nv~zTE; eϟKcjxw~HWXHEV]t#nN GP4>=brV s[߲wJ,90F YQEү3{e/Wgd) DIz`0C꿾9f"sL*b:}v TlQ.RK51rD<ɹqw3,w)UOkr8e_SER.Gt+/QAtPj$9T͑&$# |?ŽǨD$5T+9#e1X˳ul1Jr>kŵ ^3xȃE0 Ͻ,bX5Ld^yTH L ^.۸? e}giDOsŜT~mumL:V'#5r4u29|mHnoq9 F];P$x\DZRGNgvn:hh7/itfs':xċG#~Q`r69m'0[p EG;WZx}b+z , Pd5>DoU-gi ?Cj/%sXw9)9SV#6z[շ Mڽ|Þc)q.L._ҝ}@r:4ݖ*j4NrQG>=KK;tcB.MHJy[=JAƣkس |t_:WM=5u ӱN}=舚Y13?ÇI$?ᘦ+qYI#w=f>A/93*d˸ ]{ dBy6C0%wlU5.Ŭ(2.C62Lm8j",5C`_[cpRV-%: ߓ’<$B.*@ pege!{HƮ>n#_=r"*uڱ'jΜC_Gjbv|$݈\_Ɂ%AkOڰMn( 4/J.k?}5$^!(~O>}H `FjC7WM~~d ˳fG^з89ӣzPkho2ӵ۲kM=aOoSʪSqinSUwlx| tF*Ul$%o|O-/~' MI?aK*1"xP|`&&ijXRAq;(q4 aWhvͭwm7J%*YvǕ~J7-qSBʷ!=_uqm}>QsÓ'~$KE)FgB⁄F>5=&>@Q݄H#qLg]V4 ˷1%$`K&A堲D<ԉ2u1"WxJ`{>mײ0*xqǪg^Ǜoi/=|餏?r&HnIwfOpuvwlfq|/CX jRQU4Es;?ЃvCS_!a3<檻gߔ 9[r 8f zoU$;pYD>'iWARfYQaa0U@@)o>0)T̊ccNw;E\@{X!b3 )eg[d#5_NTe@ %3ɥ'CRc\@Nq rE!0(d.gPXS0`.̠0H8=R%+5L 7$0Yw.Y_ )]QFp%JKRPcW, *Ke0k"l&nk<,HEM) sHynss R :K_'pݒ{I~%*n*_3f5);'&s`M4:~.@)Gy e5Vկ*3a,%TrB!Q¸LGdk 0&\z_'򭭴[ͯfu0Zpw^Ap!%(l)]oxX/%Bnoj▒ptM78xϾ&td v:|sY~cထ2l,>?`μT,fTX >9/(%'*.7QL<I\-Q ޘx,C.$\ =ۊTՃߟdIN Ģ 2ծyC1M56]y3@ 7͜zJ{F:RkZ{UډGm0`|?$-PLf#Ƚv3dؒ)|,IYHQUtwC: Al³_WJGG4D ľBG\j :й>SN,#.~̉zϋ55M8#L({ P0w7L 9 bm:7$!BQn<ƃQ_b}lZYt s̓9kEA^S??nn{_vGfA-&v+FKKގ!>|mOXЋj" PoQ|GjoWmdR ף)NFj2'5|j{^9Iݙ0O9,n*,N/*foC*W'K.*t 2fS"%$Y Vur2=xSҼ-xϋ j9a*8㮱6?t0%<\5&en6N c@xmKХYʤUb>V 1)10vYNk)3flWpt*t,rFF$'c *2-OΜi0dZA5/M .C9Anbsyjw#~DO78E$2s8/)3D;K;}u<-M]!ЂBtqXf0`˸C b"j,R6*r,].xJ&e+ D D2מK@mG=7gE:`,yl 0dfW*2'zܼ Q (+96 =Oəa2LioUu_\%# DdCЎj-t#ՖϤ_WOokvi5_2v9Q>g7ycz>t)ki>Nr% -O %)X@k+"-(qHU15__/R< VjHtFa0p$kgg^NeQq߾d:<&Gɴj*Gn&yS`H_9]0B QMF$ cb2A΂H=ٚi ->~š!iF3/Ȱ)D%?RIW*Hyvtf>LFW+^lH"IB!uCp4˖ϩ8$$3_֕ʯ$2tSHhpvngfŶe6ސ5Vt8מ5rQUKP/\}a}gW|^G!s;O_2=tJ_4;ZmU;0ȟD#ՙj^p݅= X΋/> 8'PE# n%, VN<Չ9СMr9ML_l0+_+R)rܿ]ח{[]Ҹ]}Ю~uf[ǥr]rqS}̹G}ڒv냉m9ZE9_v#WCJE~q= FM(Abf«#z2|I]7C#!3uB>?ZZ.χwP]Ma#S^vz ;Krzg{<|%:԰ى7;J|nH]JK]F\e` "lޫy?C8yx_m_hWbROxe:/mM6AڣpRbJѿ͜taZrQGKfQHm2ԙ@J1?,|Y}0_jm K U $ eq[g>͇!nq^PR7t'R#4]DBZg 1gTH(CRxAVjZEhZJtGz2$|t˹vG*7;0(i,qق,{gv~8ŸZ6TL3]5]9ZHY {vQ7iL߼-1U& +Ti#~,y5Ƣb-L~]=mH9Ҙnku7h/ىOfֺ2dFt6;#&/b4ZŖLTdB0 s$dy׃2lh+vSQkd'V ft5hӯOy:J‡'Fz 3UfM,c+O7Ewc2"'#͖Ŗm_ّ$H @gTfDdEmVVU"$}10Z|QE1LGbWU?)(cٻF//0j8/T-n zgvDH[(PvК]I/ci7¢`ֳ lT|gQ+wR߫.f}1> m+ORA#7rCߤbP%-d.Yd (e ⢞8~\m8p}ił0`FĢ2%,fjk?k||]$2H54 `Ac[m#F]ۯ7A{9Z׏ʌPQmn3GN]uxb} ƛ%ŴVǴutʥz+3p56N09_vI,*ڈ:}>G܄HMr* bzBwzvYN!N0Mg vT fe/p-Qji+$2E[8N>`i8N`p##.$6-AnCS\i_]\KcXj?;>;_ȳb 7c:GaFjFk[Y!5h Ɠsε'KR2eI9@E2NV1h7.[IZW/g/K/^*,T@gf2s{BKU]LEY*?f&X\Ksyr3c ry٭|{j+_*;>SkWxʺ3ڔ5׭Q(@|xےuStgnwB!%aLTֵJCIw j%?A_S="cQ|1D#3. j~CcעcqpY؉x4r璵A!-oҺ.BwYw7j/iG#% Z1A9jSGjo٤5ż;Ƃ<}[|&ʑԥx vKU?ԥu5ơ)}&KϊmmGoKݍAqYEgxNtY B')fxƘ[zVkog?AAv쫘UlbzRNb gTqo͎^+uʨd5ꃇzqK2^eE?NJxҌ@Ȣ'~.)k :>RPGAu.K^,4ۀZsZYvRXfäKXX+C9Էဟe}O'֘ճl.Mohy$J!+w u'D JWHߔNY6f5$asuV1R%u-`/Ѡ< B{w]kL;`ymb~Â&k7F6vt2/j!6JvXVY(hɯ8C#4 K?ƿ|N/#יhЄ?T zv6, 5S>G l8~x 8,oƬ%v}[N'G`V5't3{\(}+#4-ீ!-wYNA,쭮 v؋q)_H4&-+o!92+p@] ^Xz*l֭y2e=  cK \#b,6ɗC/.E~/\Ѭ*K0*1p`9/Y^_Bt~plOgEJ?ӐV=yN߉//~XӔo\Fšq=.aVvWi1ErxOiSWfdeUs:a{?ݣ%pw:s輓{xuuЎ iZE^Ю\OȠ{DK_t8[Qr{7N7`2iu.*{ @]T8oda$*6Y2w'CuvD x flO0&cEeV܋ EJO4Dn8ET_M̈́7:g`b!-<*ipfWƋUVc6e*Ucfr_/QgAo.ϕrd{N_ɪ &->(Wä 5fYPMsvED@}޿ ,?EsBWܸ )foC9!" AIQhJ~Ͳߝk D$\BdO)Zmՙp7wrlxSV/jptq,yN ݟ^Ӱ z.Íarq |y D ̚S̏u>R*>LS|8*Rծ'bP9rr.PQدUTDO$nNݰcj5J:` +fQvñ6X+{2=Ov,?$dC-7"7g4pS~{"GVdF.dB*Aoo|Gpuq.QAc&#^QנӜIRL%-bwwM4!$IHHKLQVWF3. ep_,\&g{g"NRW3/TNvb '̸yqʦƃ81thDipb$ NZ&O\pϙ~uoT-ڒ6pd.1PfNm&p=@J+ >z\; 0Ɉiˁ!ˀÀfYTd\V~~Ca,>tG][I>."9ߟJQ֎N1@ǂ"7N@ (oprj`@W;%揍ORjH^)`k"Di1Ғ(Z?u~-T0q{N/AM5켤w'E)_*yq6D[Dt@5ٚ{%l:C`& .rْ~(:cXrfn*ۭ:d)q6ISK(.vdD\H[+NobIou!Qmkڶi[읎s H"^pp+•9鎷AipMa^.p9+*(.V qn*|ƃ/YDhS<)ʢUl!c1eD4Snx~R)[CN"tDtFrhn QBY4/ᮞgߎ;'0 u,?%3ԙ'xȧa Fh 0b<_ Cc/7  .k4#ѧݯZb!6 ?Yq0g 2K'(~@Xa :AJaF"}k=#Hd>GQ0ATWHO!1$Z8'ROeƽ!H4}D1*bx"3 / O@SPA&rzE$Qκ$m[V9DpMUU,bll >UhysSQ+h4GAŽc3]FxADb:РWv]<[:52 $Y H˨ @J.9&Fk:4ClH %J)tt0ʼ9[΃V  nAq7á% {\,K JYc3!$V(KLtȖ%sOZ͎O08OqfNkËM8$Pn NЮL&ttw{&4WrKZvr&d,RKl} zٜHqk fuVdsa1us)gr2~}DZ$yL] q0 4˳AݔDV<&OPz4et>.Mj*̘!x@ߡJD _ҟRwlg=-%(aC/Qx4}]LG8jizDJoahx\Y#WC `vn'/B! EF5qpQ/ПMmߍ( Cm7lp[WrOv62F̈́ܮߛ㿠ɇ? S!'lc: daVlo#m # 910C@:O["h5ΐhЮ%..I7]zY.^OQlE*|\-OTڥܱGjCzי{fң$LSCmgk\A-1)R)-(Necxf*?1F#޼pߍ#BP*:y0]X}6⋜@lPDNrlس-$\*ۼ?uo 3wo$6Ư~pχe*DڛucwQP*|w?/(|,)1(O^H^/FwQ=K RZ.Fꊡ*#Љ+ g} }g  eɼaۺ=RԓJd&G1VBHbH`Lu+axB<Z]n}ʫt*txҾzD92Ikr͗Шլ{pE\28ڽsĻb#L I;4 VNZrc+\%_6˷g ts6 ]{c9h^47T5bq7KyNݾl ىzu9fx~l}Pb]VUo ŘH s.OYگa2`GTp/\w^` @,t%d ݵ;`hŃ:ؿ*ĉWiZLVO҈t+vPް05QQѰqŘO[b.|$T0}؆5 .>a.=$Jd'%jB/ Ӵ:T =$&/47sksn~ [d8q9ScqO9X`8uShbZnd `ķN!lvՕhMLv.I Jp_Uo'M܅?4>6\ӣT 8Vy7_pjvB'EUŔkR2DjldEya3\!H[F[.9ϕ/kq$p aH "Qd["É VX"I/@$ cW& C,ʠ']`Jר "g ffL rBs-~p uYb3 [v%$1W 8ԧ 9TdM$7GC@Wȗk%>,I0wOAҽ.IIѭЗo c:Jr>Hχ=MJ7r㋮LOe -{Jh.jA֡TryKF!ʹvNS] U#&~$eÍX B"1ƿ7/{@Z?p "t(Dtץ;iºgpY DX ^[xS.ݔ=Rzt^+yu`¶}INӟUKsaƾ;)8ISr#UNwhMԔjb[J{粴ֿ`$mBą=ҡjTXSrIv$^DKR"3 ;Zdr!튅E37zEV;fxޫ5o;dgT="MLޏ`y';>=ùeIؖ,dؗRabȗ1rpO^C֜ ``Y\zԿcJ*~3lꌔ$}k@0r+!O"x24s`E?k2⯝ `8|?n!`,?J9 JXPsA1S=m0)gÁ5?Rn"eiCyk(:nn]G,W&]{gpCU{[Uޓ;_xX&-ftR)F%H~4> 50>,gp#b$vc̜"S9[&%Shg y恟p #2^Z*s\|"XQ% Exe+k E,.c6,_ 3E|[ȯ#]mG r]T( X&S-.V_T# hc‚ # `ְ<{bTH$rgr;GѤ?q -U^bSf,3z>9hK fx8qD!5_ P[!PNMq9-\.,*KYr,,ԟ7VpBTHeVo+$B!L7#R˻9^8# 5 eF>-TnY>l4͕3,SM:N_JH- 9Pz{+iK}4z;2a>8 P_׭.VvDbBM_T.z.΁K҉5􌄺r2?gҳ>dݬCB#k_Rq0@=YqoY-do% w?hcÙ~-v83ѼUqfrB38;Z7 BݞQw=.]J2pZm>*6n%ZWlN5H(J-sjdwxVTúr11A+;Gt-qx#9 h¤}П#\>3;{e 5d,Ԩ>=_AL;7goCґJ`0q<6?Gf '.*M'͵`0bwĺ]zh[j u |èa5p%k({qh~TK^يJ?~X~"/8y/6ac { =X*4ِe8$ }eO1Llo|jЎDMQ]ϥN/*Ӕ <+MmxE CٙlYuB6jn)"s!z&K]IoL?{ȝms??:]>6ㅜ_iBIDo紇4¡z~psgWX `Ϻ}8]O$w k5|a8w0Q69uOxIf eBSOXJ``Z7W1D3/W~-mn]Q|D;HRtBbBNwQ"x(nU~L Dzq1ACPHCbZ}qlccIq.\W' W?WZ9/p8 2՛0s-o -}~V}1p?0qRhoHIP"H,HX&!% 0!D(F"py1%ؿ=uS)P(OWyND˞Z䞳YQh4~Dс](ޟXNࡃ=qn%c;#b~$}J>T+C'ܑz#Fe؈ CF/g0eT IOBA/07; d ـvƏF֜0if~+{Mۼ/~&ؔZA^R #=֞,b|b.vL{r.aEXъO韔sŁy2*|\ @4Ywx:DsW*դ$*Ua#`˒-)[~*;~>=60ŏu~C|IeV^v)Sv91]4܈]Ukglev'BEE_AJ.p r=BuX;m37֙KwI^m煉pʕd_z9s'L^_JKI8㜸NvRʀPId:DAF-gi8ɔ*⏫ldnVҟ9襉YFSmA^~Ҳ$("ʯHiQ.P̕5HoQ[ ,U-7Z٬̥/]|`;0 `[{Ձڸj!"J JK ӴS7pQ^ C(˜jxD>Xxʁ twW{A9W"aq@2#2$Nѷ<ّzܔ~W"hBM 7y}MN]l'Ќqh?+BsϢYg%|-;4 YgF^=Vƥh6YuIjg]rKsΞ3qi˻"}2ˣL"QG2Ku29Q\t%OmA^梯i- |@L|TTsLOcZ9D.3o07}J#GdiR:H/|?w'JT4\\ 1JyƳ,oj jdc6=iWbIYALUDF6"qѻfM7guW4w?)}^O7ong$h};^M(> )y ֆ`9ݪiz_ȧ n|z%tݷ+wPvwnƳӹTwt-]dp'eePޖs4})x&U{, tJ^;]e^7Z5"^Nkr(|-}dWq-̫X/y3:ܢUv9^K|k($FyZ2`3 ^@<M[*SZ3YV9<Μ.Asi&킳 ɚΫgڣ_]Pw1ʱ\.]I2k=ڍm칓Ѣ}fvMefnY :ve%=i7ڻKy+uTSKrqJ\N{4ɸ*n_mt_27ݔdCd;{r}į^>1hg$k&M`"SzmE^dHxgxsν+1G=AqÃ8VJCx?QV39G$k,Pc7u^c5kpB t#-K/ ^_:"J4Q7`'"}/*ZWaj-/`-Ce)7f!n ,_0A 3)Cf\o߬I KahKX0A ave>k\W,2:Jm&U! G>=-, §=%\zs U+XhFƮ=vˋtlr:l7| mKN$j * WiH%4jf]s,O9A $į}so]>#4{RK0:*jM[CsQ)mKFћ>)%DNv,l3µݣԈ>2T3l ҹY8mY1Azm]Hp{B<,px|_oKb ӊ)Q>)_WFh^' .Ur,@Ymr zS$ *խA4sH/e$}p `gBS hZ#7 wG?Jn"\F;:?0\`r$wpK:^lCydS֢sQs( J,2Ay ҁXe8@:IsRzD3uEYV֘iI_X>v3;ur%Y(\7C/ד, %RwNd "=x@[GS3//[稸W=W`Wx2+]=X8Xg/$T;( DT IR VHo#HbP%ai~F+Y MpRfM@fHh O_;+$鋇fO{\)ɌFYi[I'G?kޤ$nIHE0UH6negl5ݸ#R^k#,O*-ETM㶕Nw~Gp QGVxZBBP{.=T?8U h7P-ÀEn8K_>_8 _!~9>݋~8R 4}ZW՗]9b=ȃn]_\Wq:OV7F%-.  ;Vɛ1<L.//Zm˒Dlg' SKPl6-X2=&aE159L w]8S-n{|-oߔK8 *&%%QUof*m)%׷$tvפ3/oFMFUt0OSUlFk]ϭXX~7N7shNF8/CXJ3;$MS/Is0 ڢ\oELȟ\ w^OC!QUgb(;:A1 (J8E?; P.e >#GSh$ ;?yAC&4}KmVطR}Z}_Yf~{?>hc<%rT eʳg>>'CM# \9*"a~hlG qx\\2=;uT[s E2 JÜ54W0 _s=L;DE+;sx\[ҫlU4=Җ5D=cjs?f͢{: ])FOꝛN1:*@I#s`Nyy5"5uoW)8)_؋ E(  {~0`}x!|dPB)a0|v=wO=9Az~+Q k ^Kי#D`'Q`xr=6^'늫 U!זr8WHEH2!'8c8%C 6/ Ua(.(Ȱl is &2YԻ_vkWʫg!= k'PT9D`\WRy@![;xK| [?t[̷z`=;=SG-޹lB9J3O+;4-K hX8cӂ!y6Q2AW}zJNRH>A.ܪ*,V2s$حKb.¶{I-p-NNk Ňfպ)\_R6~;c+lWctYk&rJ' M~ꮅQqtlQ!!` >ew/chqlX:ω {fRe={,,n $[(,Oژ~pwq~މ Lm$S4QVXpd~EûtdՁ}חQs̸u,:x p#"] -2[||1'єh1QElާziNv8? , `&`\{1gko(?f}=mfz^?JsZjzEH4xSua`w4o.Y{37yAt;6u"кZg6GRpM=0^g$JrХTc? hxU2C6[P˨wK9yxu0*c[B~NWin-58ha0y\\lAn POFB y!liB NRikؖ*Wa=W#NsHDE%fE.shUhƀ'*W!?@y${pDst U<_~Gzލ)?юy @ ChJ<LDFba.%nwhS^.*mڗ:"cb96(8g iɂ$juI6/M~s>*Ǔcp9n{rp@/uw\}S=%VlbPd*ۑג ߉<S|fplt_r*j;O #Rp¬ 5婷;My~ifYUYpdp nc>lRzI2;B(*quьĽuh9Uy]wj{b ԃ iBd\{,dV"ww`s^# JsB1ͫy*PdUߙeѡ0J&$ܯNv;dTAo[m*,kn $vr6 =rčZs<{dviGO^pߩyZDa$~CŗP BRqZN3Sx~=H;I#Y'0y-QHywW\Vx19Fv  o{9EY՞y sp0c?`;-h ~n5hL #F#׮>a~JA(wgk @ pf)#p(*хPBi6 Ϋ_N*_Ip?\F~dlY|!LFGYXlL/Ef Sh3iØ~uIUx艄Y CqzB TFR>&JY8٢S)\Z//Ƣ4`'e 鼄ys{*7qGiL)<ʏ#>%L#* 8گ<0]usJYQQP«pw̹DDubcp l;cэD!Vt#gx]Eo!U緗QL f"-J$2,?58&of#GlUf|U09 l&՝I <_/U{iT"MRjSgP sd} nO! 3ݑ<ꔏulփ9îFv[[_0-q,=_ ĞOsTƨ+ Q&@+Q`GqgsP%\s@j\:= z~#0 Js X#2nxqcOP Mb|b > 9Gt L? &>2*БyId$`( YP # F(rQ%eKGZaK4AYn*CWH}?_ꙵy'h:߲',?ǝ+S#+7Eg: .-1pN^%,'mb&U`b;bxsNFĈ0;_U 8h(Q#0 S8QxɓJ8xV ?PL7#A=Bp +(M_!}ð,+Pn+Ykך!mm=ޚa˩ſ72*f"t+?DaO'OCgYr[CʅM$Jœ@kKpR\؍ #$L>*1K+ё4B7GU"Rc!6Sn{k3F cUDb߱X;=01ye^-]x{ cRk׍W?5sm7r&ڷjnB5FR$`ezn0Nxλc@74]XwY0pׂB֧|V CBUB'4e[A Z ?8bgxH!?y0ҋ Ɂ9*-<^xȗA"׍T$L/D3T A[t@yaj(j{$,G$4ҼYnW!nE<oExK@Xl Μ3Io,G  "6h-F .70?T=Y@1{cS_oeNnSaݛ4=S5ndoʶh}r4 8 0c k <:&vԞ9XPWJt8@UxSYBZp2O(+[H1-aWd1$8ќM$z-V","Cxq Z]TgmF˷#&l1| *W7f4JE:)n8eɸv@+je>o&4v+c7KGp<<)p`B!P>|?7 .Rj68RrwFvU'3F~hlյ.z%s{cE V, ggMn1re5wL̶~9āfO֟g<SQ1…C=v4 WxDc2;flW.+1,G"z}5S6Cg)<,`8@]Ǽ=$n%jZ$/0۪o WHJиhՁNpyo=%<$i/Uh|2e6[#b o^8ff XGdX>K|vw %{)Ciߏ{M("dx8.kl|+n:_D:C >xZgģ|#oC9},XOhxH[t/)T~~\u5-XuՇ ؅ lO6267 `5_[襥nSMvqGC3%E烽\--|;i8һԈhFBW5r`ݏ>dCiG nNr#ƻ8 !0]ĿhS0o;wZpx<#61OT c* ^Mmú%9\~'`ʗ`=ayD2񯟗V{}l5%5C Qamh;ӿi9Oâ :b)>ELmIOJR!qnߖ- 5.ny/`IOh kWz׷zspq{TJ+f&vyWOUrY c;QPuTxzJx-R5.hQw )?9!{F 7_c cSzrwy h 5t.4D2Kwl~+s\Fk1h{05\e.U{6M'`Gnzp _y,v:LtA VIN2fkxYISYU;,y!./j;P&f9״,> =8sFj$#54ʞğ:'%ww#G5~'uGv֋ ne)2/JX 0zZTȔO?Hv*/1H+Yw/XUG3H=4,s-D~3 h4oޮw6Y+UeN]/G8cy"{OQ-pTΕ9Nl&IhK=s>X/biGbkkN6jփވe!mAEsLC?މ_@P½odQ_i$͎C7wr`,)'S[lr]5ї8AU`qóǹNwΉ5HgXc৷=syTxyra$/;kؘ|2ϗ`$K 6KF/~U UN瓏yb (`MSG g :|ŠF;S|@0 nEMWv]{tHE J !p\a8,R- =dJ~G&dKKIZH iqlPh'<zE e zL!{S}DųYtA2ߚ(HCҋQHBWHilTc`a~XcSج~M`lPLܕOq\ Ȋ]RG]GVEPUEKMc;;=|D̞@(zT9f#G$`&وixrXYkm^2j`[2oT3LYve^y$h6mg$: ,D `Q3ҩ8{}ih=AB5(^sYRDQ|*dHX o}@:iLjfahOP$?5L1RbgA8Fx8C>2 fϲg\ `k h&F)F}J Qe̵J0Onޔjgf:,d/tkEK7r*! Q9hq@3*8 ?\l=j$g.jOK[:w"S Ck; uQ~g\ )+TvZ~VT7`&[RJ956t'r[N/0G> 3OxN:'z(e4Hˈ;E0W/X-ӯ.t4e`Z=$O3MξbW}w"#H$"vK\y͡jc'P1kĆf@o^(=%Ton)j^@0njH=t~Ι?U=[U|b|sS:n.ll q̄aԓӣu.ssz;0UQD2Z*ձ';Ҽ)/،$8z Xj$p78IX ~t}!-+ sz/ѬIlO7U+7PU#8Wks'Xu/ei9\  #a]XN:>vOb@MK+|vcyf^K/J +pG3#{XSɖE3lLwgV}uK]61(,..ײoVuW#}PT0Uۺ^%lS߮s4oh7^ߗ' bApUv7Hf55Eq?݊pN5 vZ.m2KI/jf/yΕ;7=l!|aOClEbjs xY. qɪeߕ=y>f;M䞯fF2o <鐖 w|!kL%K+ BJHj(%iO6cwabiz741_ k]umTag~ڶ5>v;Wjk]-1Bm6+, O~j+W7eHJTLˏz'$% t"L9-d#( ʍP A:H_QfM7Te3!pUK\^lN}3Ol۹z,Xh'!A0CE@tw@Uwuji=q>|S-No `.*'nz}p^Se"sHLWLTy?vA'}nw>{<6=yF,[*yItpÈDS, թ9bo~ 됔Ugk#ko`Y\ `Bls TM1֔:g +&MٰmgXHKF_cUxڢc5v~-ee`%3qދNN `ERB/FCe/'"fQ5η< ,ѧ0r ƉI(FjsN{y⵲q =5JI]!tF9ˠe)(6*dy"S .{hg|2S)[ЎQkOO{-l<j25x{^XGRΰ 7 źP`^ ī.;@%Fq<]KW!ó_빇UwQ6Ju+5`.X@C0=әbŖrbMVçm2C,C7}9lr8W].SaFpLDdFfU<}jmS1⨿ t IȷlpMz\/@J H%ID4V>~((m~-0 S>t:7/LalI,0A0ճ FQ֠2 *в"~S݉j[qEvd0X 0KIbB*)q;1rS1Xށcx=QR͒{xl98 L1,KsDw5uj,|xC:Y4מ:ٟP1׍'QWZ7wBvcO͇N5dRy#`tMQ޿+S꺨wIˊ{Z|/sݓ: ڻ-mIrmЧ26׆;a Z# <?5XdLۅ |n|(<./ҽhH0| V=S( .2wJ8,I?zuJNd)"1v1:oI݁@CE_,O< @0G\q%C Slmhlp([_ Vp P%QR9l;] Ba9qiD4%77@Q;;6ge1GfT6p|l] :uLgvEǞΚ)3{65vz /ꙴ(; .xswߟ΍!ЪPHxQ2Vvn,|fJrus?|*]>71JAh&+zu @ %uB/ g6z7 G!|?+7β3 /b BidЏ`^͆h?T,/ yh!=Dfgfd,HQHQ8(m8&_nAŦÝŻFvQJu{:t/Sʙ( KĔgcecPpœ;8}-}%I :f3L~R~D u?H"O20M؇6e8qe8ȤTsڞ{6qP{;V=2;b8 WnӔv"OG']+C@'!*!) qH\]9vٯ$~HNb W~ms.dtQ:ꖫ]%5llN;U0[J?ס9eZ/`2s% ϲ|HLON]r$d\"ϟTq/l R-E -z]aPwi:zdX &J@lf`bYVNܞ,&D}} /6 S[xb\e j)K5cm-tєl?u_.nM$rFf 8le0ádrK5_QNl2gKyQy/×:^?҆<@wn 829IL+P;ek{/X Q -(+ @wVF`8e)pSTGYHK HE1hw|z1 >e5Qɩ:Q:G44 ^i2)8<njhKxy窏,8}pd ϨDo]"KwwXG<uc O3TbQ3Ϳ\iy%a' R)?DnUˏ4W鰥Za7RAQrr boC$]MH olnP E+מxbqKF{E+]<ɠMq="P|#]аR:7X>V%CO_ދWRgwu0N|_`B +  w̏+%ۀo]𐔜4E pO"b1`}Og/@?jHN #rz6榏g'xiLѮX`Y޼\uy9K *;p·m_(c60ɞ-uQ\8#qs2MH߽5S<xtͼZ rOݝr-)^{r%|?O_HX\ @ /TUwLĉ>J"Lf[˙q8gʐ$OijyVZMio2,nTC"VP]y"W9p$1F'<*yLs o <'sdpk%s#E~@s5Eo'ߙgyA䮣✰ޮ|wܶ}U64/;e<?e/q7owx/w讟 $#,8a(G?rܤ]hF`)e~qc]GR鄔:toQµO*̥"WCp񺳅mm}oZI$톺7tE[2++hI=#킺ba1`&tb޻UY=e ygW5۝,RuDm@ɖ~"Bt,R=p2JNvCz̹f^̣pCC'|Ӕ-}:S9&±8kwpҥW= ~,{r+҂gԱv o.v}Kwsճ>Pz\vAQ5q'[iIy^4-uA3{\^ƫ=u.YN q19LbZERoŁ]O#*y ~86A<пNPednRq\xa'r(G1z5pV$Y9H󲓇ģb"an JC:u=(urfv9l|29|RuQ hM,LǴ\nw]м`[m cR>2Vz1}akvSiYqOY74fۤP5s#ΫQTق÷u*rkͰ]Qrrs^'??U~K*ٴ})l/W#GP8)`%-8䘡?q'e?Ix勼BP䓣B/`RViWBxҀK֫7Y)>Y8fa 6c]nHa`/Q ˡP@zAzv< cTa0%y6Ue2x4,i%]'3i:]ͤ6S)V-9QX7+ܻNx魸)r6P'4{)4v'-(6_]L#ۄgL^6)#j8T9t{C.'F. k f{HO9DJ k(e*vHbwMB^a@L>Om3J!v2tmxg x:{N+ǓF:=q]%w|yʋZNWJM// xv';ʴa[cq/"Ԯ?Ib0}6-p@UÝ>\aj۽ֻvNketHNkx|)ݻ+2h 4]ëq|8i7kݭF\rˋjbH es"p:ʧ sݩop:p" \L|`n1w}!Iy]63A^RH[d){.a@CM!  H;Λk֕),9>1]˴KNyⶠޣ+m<ߝ<~iQ=ncG*xD펺!mʏ?`Ap`FH@iTΧ~ fy?Fp4N0P foY_'^_QK?}}K|&tFFpΟq/86@Wc-&!1vX袦x%oAN077'Ϣdk~B`d:q }?N[H8Ws_m70$wƏǂ +lcF]g:HFun:Lɴ)'RQ[0AɆ)LgO,Wq#6XL y"J tIp,JraǛ{46Ƒ~%q {ٳSȼ*| _bD7mdރx+I+ݭ,I~؏-_%M .vEPXUg هW$ l1pSEsPsT3s- c{ @L+J?~Qޯ~g7F8d](Dݖο  &}A&~%+>%8ɐp31_֢^I?J.:]> leL0Ҷ` t(!ĉ%H6U2>8>Y68(l5x1s5l$E^}l ##"iR)#R[ϛ⇲`z}"^:b4|z{mj.\wN'vN{.ϽU2v9`ߕtpP"HSr d8nu7B0`(ƯϽK7?U >vDoH Ǥ.dyP83>^@Dk>Mn|1wjow֘mǾM-\&ʁ OFy&AQ~Br+Q](_ڮhgBdn5G^6 CdXI8{8>B{[yԨ W}{4?w%_xUSFeνb"5_L?T'$N9.S#e^NP~I#!KͬŊDؚ4QA<, HY`YKGo%L3V\?fcc0'닔,FUT)WjG}0恆nisBFK(]!m-ޅ3 b>w,ؿ1x%W2T{Ccf4`XdJP~p'rVk OO0As37$Gſ/mWhF?W$( iY?o=N[*^G׳W__?i?|+GcN&vIl'd\"ӨGA (E4h2Li9-IGzǁS3hE8&cĞRlәYOBq]Nud|sqx8ɣI 'mgmwϳZHN\֪}%n^Zߐ^#W~?ロӯݳiI,O΍_;8[BYAS9R`?؊g GI0z& =>i*W}FL7s!N<+"0/9oY8|ok &J;q# 94p)ڮWc/(s?}V27cyaikSYAxAާ8D,Ó,b`|Wr_Ohv]FSW΢W|A H v?K] xP[X{ΫpFC.7$1w/&wFrQv v+M9n}/t<cp25̉{ˌHaU+uN|*+eC09 "NsJ~[~O [[ĺuP=RX^3.L{ewZ3{xDh\!͝A<OCiW]߰ @,04G9~~?y"87x#4Q|7[G_xk P4Km\M9^nc.OYѴ&ÂX3>r"(Xl ӆyol"czAáz-hXXI?E?dc[&!@7 ɱ)i](HSUfah^He4 QR |Z|>4/ma ‹Z]̺2$aLLk-G;p?ꎵaC`Z9zBZ$eϪ8D0;"8~,|٨g|{c:|Lp .x6("H] h7˧ @ aCx?@k`['ep:xv'$3;z;όc/{t[`^*F޳_,ȓQJă?qt0#.~~ud3FߵѻӬ=>cB͠WM S)(Q%/dUGz%B;wpW /b,#ӛDYCnu *W!F'߽V2hJجgHIOof#bk> 1 DBUnਦǯQQZ. sT ֯yRߝI*3{W|&ΌNܛ.!\⽘SCr]-}\L`}5 CgL;;L:+X8Ɣ^UUy{;b MUڙU/籍/:8#b(+dX'lw_DAd]k{;!"ןfGѿ1BCߍQN.D*~Qug } 3m"2-DN7#(sP ~+KbW74|yǜ%Xqrg LT FpzB .6mp1\z 8 bk4({IV4N_f{;`i s!xdc`;qWƿμ?,D$R}6ķžbd*u?OE&~< gO͗R V.As=)*}Pq9L?~ tocU)H_φ{uZ[p{چuom$!uΖz/lɼWvryYI~!7l~wK~N̊Gם\l]k/{@6x+UI*!;X*L Q0UAhs>UV>~܂!7,ΏĸXhh[zjRI x6.Z]MxH,P/Pws&J3JFhVzש$!M;㈌NH|F7$d&aO:!i l})p&5cAAS+<_9& ]I^XG( eNZPmT${`H@JKR[Fl?? z5xq39J!ijw)΁ǓTq0p 7T+n\?G9=A(o8K_α, \0 T)M70@e7-EOZQ(!~F=WGǴ&$)|鋹,wbSR#虭Wq{s64/ƞXyVvX?Y"C{5X k oɘ=x"[ͧA=eh9J|3m=5,1*y,_-mH[YD|e܃cl&U4c">!z7ۚ^C!L_l|8.a}G8`}^IHh1>w4MM'6>9+U{,=f\,0L ,]l,y%wv α`G%;oxTUib^3vus= "D6l”V#"hCt0W206k U۷|Ubh#'~{ X;LTL1hc`,0$Kom,M݄;Bwߣ-U|N?6T /$o2?.+{,s}}&׷BW^Dl Ao!D `H pX/2 S|x ҡp:`ÑgM{{f/چ1% YW8A|TxQ?eQٜ̹"G ,0KlQM$Gb^$o N~U4]#?h^gplHj>i J3I`Xi̓e8rLLEj+,| ]Qi4[?{.\hX`H%>DRk:`uįD1=}agWy}L%]r>tX(aX6!cӧ"-+QN8&o$g 1!M96q>Ɯq94́1ZM>\C_Z@(rW:%T]ĊF?{ Mi,,w+AH,I)0P2 U4 ΁~IKukVy/.̫r^z Cl }H3r .#LB;C渫:$=x idf DLM,mX~*Ӕo OI|Еx sY%ɵ{j~ŁS{r&k3 т8'6˫V֍A&Vm .zC_KpA Phz & (p̛dcTN.wwm5@@1uD4‘UV]G KDmY0Vk䏕9O.f!)39{Ejw{|ݳ$_Q\%^^ aVKϭzMqE Aw+^ó D )GSbv`Xꂼ؃1ݬ'΢xF 'x`QKl",.EG,c7Ũ>b7,@B6m(JK4%q mf:b9'N; EZB$j^jd)p&p3f)Ǜ:W0;JģZU/%bCd(Kθ0pX.ʍ3{|DupdSV"fuua*I}c%zu4E)PrnaX ~A%̀RGG mwb}H%MX2wpϘ/d>_iP4>Fgn.mSE)mAaDi#~\-@Sc׏&񜡫<3οw/"a@m̗m?  ޤ´؝2]w[sGmytDU0%0xWLk<]RԊ?sON]u@Uؤ)<$8TwӨ6wL?ɔ-\ [)N I %5^lN@WyV?+#+S' p/-HS`\ZxG)Q{xxh{^PC%0CsB9pYTOknopܹT?o.n~ThWkF궾RIa j i#I" xAHEYV+IyJآlG&%tTBQ.Zr|pʿs\BUjewz'ڼ-B 1e<3X/F-6ĵ "*{*k%Byp$s'?&8t6`N(֍\PYΞkU76;KJ4nH^,usˋDm[7E~p~?ݕA(_ʓEGlItcV -ʊơ3K"JDu<~E†R`pq`kmTͦힴ a>0[#uU0} 7ۣm뺁7Q6.ITȩ5/%h98?T%RF99SѨX]bG+o+NF,L8xx6pI3q벆%M+5Bz)( $wSA С!`+y4r^WzċwG!s$G gݩ94uW7 ־8*$>GNn8c ϹّV=\dX'Œa EvV=  ,)lubqHszχE[4Yr3ucj%%@IP8 |1W4՗n+\.eqdJڟ&s-rkCRp\jDubJj\8xʼvu49yҝD"(a˕.G.;'P/Hh6tLXͬ# (ݐEYѓtBR1Y&SL)) ,åEZ,)cɱW7"̘Ly~@'F}MGϧMEQͅyѥ0n=5b/OLmj O i" g@DĹ/OngDY`}kRºcZ2̩~SKFT}.\8%iٌ֤ (+ s2+'_ÒL{\2V!Ͻ2*/{ _)C_FDig\ rF∴CF$ 崝 !gݡlsX!qXJ@Gݥ-pvąfv@'Z7aݗYq'^\`!o5 ~fncty 98sĕg=ÅLy B{yIg A}1n*̆PWK|l*ӈ-"cb"c@@% 웠[RY ;< ]嗈 :cs!QDx0߀Vd(Fg#$  K@#F xHj|napCL'ewO5J[ZR5As29d%88PHD 4 ղ؅%o Ɛ F7Wiƿ٦km|-{ҕsХ.4/60Y_\[*.y_ak V\-L|yPIrl{]M؊lQJYOvg7gZ֍DKoQ|( nw?eC`+!fިz}A8iɹV8yyo[J0 -N.R6}K?𾝹vw4elѮ=_Bv S S#Sě޿*:uW 8O, /`N-uy3+ӫ./1U[rn!f5i\,~e0D[kܼ^eYW]|e%bR+YcTT8_*sud8J+ֳ.',z2cRZbUgܭ>̚`.P؟& 4=ٝSI,>dJd%¢Cwhl(=Vj1u%![kR4]c4^zMCZxTŢ 9g~ݎ/V ]cb*"u//Q;3gܧÿ̶`_'}>CP.KI?94gΘK{Ww9&HK )Y 4ǂH (I)+T,6FnʱsV ^=Mr,DH*9a~U?)Uz}rRF/xյg}tl<7+rsd.QI͵uA&uir~tGx/|t{Xdir V)>v{FS'K F`rwY5;?7+Xat*w4cs[13`B`8UDe9y*-)K~*!}CXei{0PPL&T}@l.8Gq{yr>j|/ #D$ԏxCo*)h T,l&Ʊ֙rw{gryB~֭mYFÌ}tU7vOre],|3yg~g^۽1Q4.dG*pcHi&(+by5N{P/GwHyE|fRELŲ"3r`&pBN~;&lPi qÄ͹!D]w?< ޏ \_ of3a?~RH_g'/Q19pJ^Ռx%Gω&(FwψjGeIԠ̲^0E98JDZY m 9/IZp GtX#}IPg{W_Z,`͊fy\QRAp 0P]oZ8dq#3Q(D|/;y*oDx'lgvYRGx3sTgC5R3z  dQS#M+ ̌@jpbA:Z7揨7|7Z^!hug5*x1]dW:Sm;b%d@+!8`͊΀JS Ҫ(* Z.ؘ͍dS bIءLdb_w6S2:>uz#gol=gC#.J x^|мlCe(|Wsҥޕ#U=J~'չ\iso|z\~ !=Jr6>x?h6>R8wD|)Agl1Eм?%dWcrA=cC`Câ"'/Y(N4!Qf ]|5(Gv1;b.GEfBY"2 v'=_՘HϘ(#Zg# g/cڼj;E|KPm@칊afe2dFesR1Y,$&niw92/3jN?= ?dO0gEFg$W}B`2/?2l PNq%>;.?NjJѽi5.jal71#()!s&T"P²?sq~*AFNߛƁ} /VN Irv:p18/0,]}L΁YUP&-'͚ĚhѿB<|oBLB( qݹ]Uv.Wl2Wf\ 2zQ+K9Xa"uB1E tGIvTƒ],;iSvz#_DL$3#0RfvS/gYSDƟ/䕬K*P)hfVbY AJIb_JsA[K: Wios]J~%HtQQʡ7;zkX(kg-Jdb?eY~QN[݆իerUsisԳ*,I0{] ֐:_AE|O&IhBUx%%nЮ.1,\lRQfc0~ G|yxe\6R-7UL\b= o%Nj[kH! e1="J-@>0;b^c~)>Q6tYEQrbIaʣ$6;H:|$ԻTΔGOt?z S?/&~r `e@uXP(l\`"拲䫒`,0S2\ڡM1<4]"͊"+" iPΈ$qD`Qē$q &X9aJ@`bfQ[g5OPOe1g@9)_Pyc$*$!.ղv}Tb)e48[(v[|`T-%jUܑ*krs,Ip~(ų 䂪_X7TZP0Ã2 $\U57 0`:=z`9#RC[&a-!J`]K3"*ɕSC8ip_#aNj 1Tj]+ CLWQF뤈.Zj&zp$67zQPFUDr =%;ƞ5$Bڴl_4)ݜYP["Eq^,YrgGeP3㿋9_\c|WDok1k:5-/Ms-簴 oMs ^ ^`H$ &(XJ1~Z'9+ }6(X3K<* ]Q{>J®v;LMȂP'W?yj0Gs#zcʁģO$Tf ކ%L@uTt.`]ZdYN/JAX޵s.CO=,9 a:Ь" wdtá iOXGOZ]⺞M 'ͯR.qh!? e!ck E?UW4+c'4_2 pD }6pЫˑ(|LPe ,z:RJa*t;]}s_b)-mnعV7⬯E(U;Tﯲ5ٸ}ʻquwcTWvu_qyTX,pTATbcsD xt6q!&F(cSk}CfQdyl{iX&*n>}nt'f#|\DaNó$4WQg+T>w%ˇT|ljv4,y+ԋ{"=<.SXŏ>6Cn4%B2cZJDwQ͚Iq*80g}z3wƝmX~g|m4xNXf]3`“Wt^Wq2:MMus#Ãūdq^JT@Y`9AKu'Q͢7'pӳH9:o>4Do=c;'(C]&MCLޙ:-/cT98RGx!jan_K>&4  *bТ "$ ht4aCDS}PfڅBCId$)xd3$1=E$"QP ל_4}6~n]Y=;hL" U ~ ]. |X]lQaPV Z$˂̘c1G"#~ӔR4/p:ik8v߯)$L<bVjiIKzG_*+͢V4Gf [[ҩ j M{K]*QYAZ' W'jNjX Ӊ |NWsҝ M>bu#3 $ڭ#"AQ 쿊vI_Vz$ 6" 64®EV87u1^ٕ:hmղf{~o* >7+K0"Ig4vU}sA~-cEn 6όl@k /0CZQ!IHVnw,BB0K9JΰOWyw ~ כ_{[A}k$[;V>j/)O hCR`90Ebim;ܜc>:d?' Ρzo~nȤ/|/^tr2v~) #MxfOoFoz+v~B^ S-J]`saZΓ cA;}7; c6mWk`ݰ_Ylq|m\㥲{v< oCHSۧsi/RguF6w4V*I :4IYEWwiQ pɡ\]eݔkH XIcq C"i|'nq=*Yےp(O/_CHB$?pNDq_C+(gڢ`FѽXoK|2|?&w-d" 녃{DMXq \ 2U RkDe(9~{{4ۗwp]2YC"fHH0*xchn|t0ʼn3yW"a5МS()rwiN`%N#3en)ށu^ Gy%wF-Lr/O?'DVC?=Sv EDX5חsAma'%@42T#Z.<'Xy5]n d$0nI4KEA椐2UVw @x)>8ϥ5uioN/ͺ ?;0_;=eK4<:,<"l6KEI9ˊ)Ke؂2.yRYP/B{! 35*̷N)~P=і͘}ZH4꘺m+10ؖ2&&쿠9k~.7w)}5 f^{x?^zwֺ \-֡n˂,C0De0YѥʩHٟȀԈ+ؒ'A:u^q8s@=:O,+,ˎ-U0\% ě2Tjh֞ LˣX"?:nϼXM];{〞 +r(W|6NP9LkNwG.R$;N%]4;ײ=d v~LYGَD\cwTDp +Q!۽xS)H8~ üNv ɢ+>WM.$ܲI_oLp;-c=to>t[dSÓ&yz2ؐ.a'X_ý`\rj+8nkW.@[YF| 10|Ħduw&Icas$^߸{-2v"?)~Ag v(1&r}<:xJ3;˺:hl Ǘ.+sX)KlF7pw1Aaƥ;mULk_V/\tij.NpᇚujlmhH)Sa!lV"$ڐ)MW,S¢ffJaEkOԐbH?[I}9E8"8x[xig>Tv9$~e.@dZUB>V;ʁ)RҬVP Qa2(:`#.*R6Ыm}6kAxSiƫX-`X`\Ckֶ~kޛ e 1ګ+^nuw>( 8S-;+>m?>8tOۚǷko^KPX"{:.5bs&o-]L,97L^ߢi~F:j5 ,s1YUᡵ^xrQ"Uʑ9ҭ0M]OE<6e-CQ7*6uw;z]>4z[˛f˶)ēz4"_g܍"RAwi%ՀD#7S\$J߉lGĝw3.Nr\.u#f)H fI(!܋"fZ3h0w57z)f/`lҘRp"CKMD(^m[_nOIV.!Lٮ9X;tl^Tv}+<؊ӌZC'pXr!TT^EIߝEPUA)_;٩$Q 9ϑ?yA"YR 4K((Z:4POrґ@ ߅1>-aL7~34̓zTjxZb CVmB]5[=ZZyW G$n=o1ZtX1J Ka<0+uh忸u0&חAvat55KL x1?[;Ɍf4{u1)$iyuq8!ObZ$PX?$:]򎭾IX]TEʣpIzNW%bӋRؐ#d /K,:v`;ݙe\byx&"Gdn`8SQDJÖj/oÎ0rqŜSݍ8mjޠG7@+~~(UL2>> itsCq'-QݩevJ"U3ǽ/LJ UkPhx 1J߁Ъ'+Q4q<]dG(Ն |yFyT5 MդtAյ7WՇ/AJFߖG (ܟdfuw$W>I#sJcY%k<(!29/x4\SD7_X6#[}z6*3v{ IH(:UyY2Y>i HLS/ (ҢتDXHRin[K~=<1@xͨn> Ρ]2j]n4S,% =I6#C[hjR,-~*UYb ]+r[Q]Έ6!{|C~hFEgz%to֟5GuL~?"*&Ϝ>, f߆nm* Icqf<>HQ"2 n^@E]No&s0 Cߺ,62yslI@ln5ZJIs J Fl)x6Ҭꮿtd<MppiRP9+S(9ɷ^I`nͪ:Ҧ.@}(4]lwdl{͈CSƪ#4&4^k0V~kG;' 98/i ڒTw@v;a>h"(ߌHpxe}\9 U$*(O?潕[`s>$o$t((<\> Һ1Jk~~om=Z6~hq;Ȉ,9II8CoeiEXt?ܔM 5@4cdf RZ"Ws%]%}w5߳ 7*Y~: iQvpAT)> B8<5{ZPė:xAȁWy=dL^^>"$8Oہ %v*T=w {v^]L2{ie=)\YwHe1\g !Y׸h ; בŊĊcE5ATQ`I/^B@PHEJ#l2x_ptA>%w~*">_?۾`]A(dŌiq<tژQx ~ DhoA=;WZ Ia@)^2__o R?*b@O(%a!fRDTe)Mt9El S T(LN lAa'% Ag@&_; L<\) ﴤM7uy$ӾIAlɯv]{̱(3:zKfb{Y +)r5k?i#;0.f "(Rh}pPnmFԥqWȧW/2_]/!ʎUDݍ|F-CbIL 8 {:w*s%A=/ƀ RBD7_LFGS鿢22PRi[Yd$[-J Z`.EC.#N^ԖzPYjn{ߝ`XїBP8jyz> 9+(Ap(e[B.nڷ+}|x<b ;]v<`ZvIa R%0;bw#[@GA0))(oK3ö>f^O@E']vwZROfd{w3ksWKˎ,8ngDW^ΜRXa5mw bF}B=Tޅ~E֫te#su]ҰoGSv@{S?mŽ)%WodO@eDQFXP*SxW2EYiYI5&g,}sp| z$N+zzaXw{DLTZ?]imt//܆dȧ,1_eDF8pGܗ>~?r3w9o']Uԉ1V笍{ ݸx3V"ˎ ͨ yF$b:ϳg<οu#6f:A29+ 'PhEE-saJ"T;|}ہWtN<Z;2xZnQtEpDfHUd#6z84Q{=(,|ǽK2or׏/sѾ.BU5 )ps'܏sw)MY3,Ǵ@H45|{}9osƝgL5R"Ӵjj{nNOifGxO/OJT= X{;-3kQB QP"%$Aor)+i* LAB *Y`Y S~Eg}$om:&an2-w%q=rӐu"ܞ>8:_^ϑ`6ޤX#J[{2U p\_N& WE<݆FK }/^#1e p)Mr4*1OT4y:6$POt+${V3:{$+xAb"5@ggIUgk.$V8x;h;FCEͥ6^xmVxc[ݴEBw ,Ey}rJ>pZ`Wv`0U5~glh{gx^W[;QOoMpӚXzXMJ;uuχ v~ ~3~"-[bs'*-t{ֶMB~j|>[ܵ<;b[px͙=t 8#:A~]v7 p8kҍkv˝ȩIxcqT*U|ÊZvsX>` ft ![H19bzTz&G:%j)mk'~>cDMPœI0-CD^eގ8"{1.xHOBj`z:O:_o;|7֏ ^=$M[I:&.IeNpt Pq7ݪ>u;^a0LlY~k]W;6nRooIX[n"I<+"Bc~W!OV ;XYq݉/qh|p4 IJ,;4fIνdt{;y0Ρws*;H͡/}ؑ;Lmi*s 0J(]똼7 iY6sAC7"0~u.*Zz.Oz-.O"Pw;)jjQp]jOl4 p7E}xTBa]ޫu ֞j;Cp\/1YKdDm0=e#{ !+_y>B] ^ju|NfNW nwun,a_$w&bYL+`n>`XTs<.Ya/uG'nn[-XNj:ӝe)JWSܙ~2` r<ϼ7o2V<*]I0ϳWRg"xoE^ƦrQ l3xo [7Eaq 2YAqz Exd#dKWt"T9{@;>ўy1_;NvK?_1o˻1cUiQu~uT]EBPt?K_RiOh e/w*g+t͟b_xbhsQ"8*O)ZEFI,sLl|qh<IQ_s6/2߽fG/z狥OJP7*֚:1xwLVyU-.doW+^Տ:w~XE ot|9A{0dxv9e3kDUcy jmUkn=uV瞝v>>Vrt8;$_1^OD|nX;f:dzld+nm^fFqv# eWYnuGK? )NB/c~ԊUa9/nKecۣc31ϺPD@w}%t{ <9_-8^X|l,QM7#I] ޡ$y z/ i3uijkp#"I,%UH VgIނN?lHEl6om ?џQ$;4Xa;- g(pmk~WLT:QKK,u8䲦eŭ>Yw}H uTPU`S_(,xLKr*a/w; O9tz,QlPj&¼tgt]׎hZ߄<{SucSI9jX1>{e%Su[B7e-ӆiCg~ #V6YQ)&Qp;`|NPPq_[ /u#kOw%Isq!dB`saFfFq'?I.ΥR8rנ_:L0 OBC}` Au<&a ?i]- }6|`YhyѕphAKZ1>}ncluu; so'?_ۺ }$ZuG}gyn8sG xcy\| Lҧ(!hsWTah<ߚ/V%+^L ~fvs,@6uݧÇPu? ڹنL(Q TXDHA*7#l+(+l%bQpsؐUy)N9﫫M?!#1AO;KڹxD BiJ;eJ>~?wO]um̹Cf#nWy2Rη0)+PɬVm=uPj|;|ՓRܗpV,HcȢ-?7)NO@X̮SBONmfdcI)6UZ6/AQ=io:6>.p)8ڵ"U^Wcc/5&v盙Z5XXJcbR]OG{Za+`Q&"w-"q"ec| 7C|Cbf GgBES~P0rkIWeT06#wc/1J/땤C!d7sޣ0&yf˛s+֛5u镋uJe9u$]Չ/YwȦ 1Ѳ:'a6 i>dy"}5n_?qšN:|I/!E VG,z|rZ&/+" vE湘Y Rjx)S,<2jeN"MZI*%ˏO5p%pa+m b7EVΦ%: X^NPavҪ<#q[*BBHc>6yb0L{F8Z[e gEMd,{ƳS&lc.|YP 2o.D)HЉKγ,G؍)/k [1@SYM ԡ6 LAAW*R2)ʑԯz5 B<^@RBכ$($ }RJ0éSBQ@avz4vbX*lGrmzJ4 ֳe7tC<٭&Ks'xn]=X!)4/;a~K'?H_4i< IѰ~?fg d',-$H]'Gp3039l& X@=2XfUBSPk>ba4ݜ <  =``߅Եb+P+og8W=|Lu+ z%}YV6Y$%RG6S[QeFpڬ=зd(g rDR@A{(E^cK쇂:_t,1QiP;vHO:B*s*硗cE^RqRX\R6;b."bpT$cUWP|W鍤5Q=Fpw峑5۔T`k_u[( z#TKsپ+Δ0HeXtH 8~|sH<< 4Sٵ>8Q&' U?G{{xS kbGUϥ#sp.ED篫8G⌏<Gk݊9|B^szB Nm)V,]x1F_[A,e,G*HbOk]zR"/J~p$3 _NXl%%%p:4xLɂLRNJICG4tK1&Np-dP1S\9hցC\* _DNuc&M,AP.zƢΫ4IC<-=#H zD8$Mf._2cMdKiXR ǥD =bVT ?&]G [Xqe>7-*1S1HƼa?1߆U(=NDy3f2AePA" ~qd$mR)M`N: U"!),ObF爢ی ()/lp]'"Dܾ2wytMXցBWj1 C % CaɌ2Na K2Lˈ=<.uOWH)Ȥyzr'51?2EBIttV$ϣMgr4J|v60G!Etap&GʰVf66nG%Y |K9[NJ,JnXSRmdZ%jޯu((eMr}~oFamۉ+9R#B>-DK^Bar.Ex3}+ e*縌a\2-8_=:t8@C!j]M#$gRKwǷ~sjIʢLW; ` .(;?:901$ذ9CMrnVXa3Si8;d !͖NgpBwj%t{H Mw}jP9-wW;b297_4M!iS LIP;n5XvT[B\Л fßWBn]CeFigo#E٬DډݡO˧).{&ְfa( @85%Hfѫ^L[+`P;[pmQMJ{m+mŀpbH}4hj/g#v}^oŢcz5fLߒh+3 ^@48VNJUW`0XP$-WZ"\ 8Vb6ãÝg4Q+:KRm^w]|Nas4Zx\Sq/L a0vE˛Tv%,5f~-0ߗ@ Kx"yE_/Qݽ"F@ҟ {e^,2 J2Q:gYajL)ϗBewEq$e4?nAS+ta~:ޞ>dW'U6TXp{u<5MDP |B>(fdOXJ:>d e?#@;ZwwqJ=k!%rQA~%"=1y$q~~g^C[ ]pf C, =*FsLO @2(鞋³4\x*eG2HKv뮉Eϼfxact)#YL9/g|vvwhCb>7ReI$?H/c)9]: ҿ خG'!ap"k¦H3PmDIښ%X4R -3( @_|yZO ݅ &¶zu2;erf!pcP70mBbh.oM,ÎmxVsCDhASYϔaG Sclmܮk\z#C| ;L:]m:;%r2?rIm*>AŒbqT#Ԅ9Щ3Q;&^?]nɞE*SX}n`V2'O|Y271 AFe9xN;8 V2jovg]b@\Y2!wN7)z=8TzsE5%?0ZrZڝk:# i3a,\趱hFXKOq'| %Ww! $7jy/U'Xy@B'u"GG &T_?A2@V)Rk/mק14 ||ruLj 6t꽊ѩUͦ9r8dYsc5.i`٭h.䞋KzhUUN5}ӊ ]n Ahԗ箸׭֥$B7F {.b q J@"a ,ْ@gM, ux5<LmHo ER8 mM!Z2tygp/g<>D6O4që`E>(5ivJx 1C֩F 1OYaʵ`7=+c<&z~g=c ' 0A!0RRmK4$MI[=3WB,n;Nݑ+y cKM]џC~\ U/Q/>0[7O-ɧb/PSaeɦLL`ZTq%|Y~1+ "eq]z5͉2wua&rQMc1H29tj{% ]ɉ#ƈ[?rˎ?(PI=KnnS5hu1I'{(@Gs?Y^+63i#)b~#(×( x$к_3sCT@HV?ɢ'Փ)2GY~N"WJѡ͗'ڷGr/{>mApBg xJ^*i ڧzT<$*}e28oeȅ% e_fJ^Ea!V~6:[L숆QʜXZV~ǎj~ǃsc`s`T K35hUc>kyrRRh.hQqyf12&PEu݁GOgU(ķD"7ӷ4DPnszS$QU;w$v1r/yydX5ԞrS$q"{n@ZCuU/"{9Uk'VYi)B,ΕvStxG+ /`sG%>QnRƟ9Cב@L6nbhc01ͫH +",r17r%w~X=C8Jrol=[,Wk`1n@SIeގ ckؼ U"u|X)Pr~eq,_b ܊fcjgMd2swl~א>ٛ6v{$>=|I(eDWP˽TsMy1|2a EaVx {Sf4{;6^_5uPIkpt|~fܵfmAƉBΐqt!`X.K~@Ǧ\WEFg9Qd)\>TSP"@y0IauD棳L8OgԮz',.|XvS-HSD3-_ MH֬ֈr#\k9N["<* U"]Z[fK~|hVَRYht!#؄.sSMt< 'bP3Z l%maHsε$O+XƂ9YL1C%Zt'(Ѧo祼D]=YKt"boM2[Q?zm^jZK\:u{?͂kVUp%٘Ss^#p6o4Ӟ<㖹ա0&rhsێ:ڻGHasdZ!.,uy(LbЀ@Jʿ$3FŊCe<` P$\_1'yy6 -pugI1xwpOyR6cXg4¦oob^]aTB9/dE@8"у_?͵wӔ覤/3yڸ9ݏo\ Y"ǎeVp J4霜B1=η̥7^JDJ3G&um>P""R(j+J)Jk-RjiMزBvSI+ d] Oz] cE\lRy qV*p(U5o~yG&vDgLX`<ȭIg[[cJ?a?ܗ4<{z?\^ٔvۅSZ1f> Bz=$'$HI?twF7AdowzS3.W Eg܀fz6Qt5uޜ@,W| nC]e&6*qɋ]2x^X}09,F>Y+4Avqxڴē$9 I6[%|a\N&!1znTJ>C-=(d|YgjunX)#e1]$+i%LƲe Ilћo#'MVЦ0w/$k$BIޕ9r̹QtO!p_"ߊrI1I?tYt7ID|B:e*X~uގcSm.DR>Ke${&iΗ[\yt̙Q6im Xb̙:X{<<ӘqPث+1wc]MZ |x~֖9,,_sA\WgˀfڳyTFK:ᴿ ̥aFbhyBH\ЗsD8axGdrPt PyǍƩQD`UIT(`yJB t5w0Daac=ECp8/Q5Hmm-$(ځ% D[MtF*`R#WsҔ*$#@ AG%gP.B]"4%ssɥBvu/u$\gxfG.DW`9;( pQvFeJ( KIz KPE89ܱ섺YdH^z e/פu>Uif(dC2sΝB\V[? nIk;&`Z_ [<+ <%j9"!%{MBL0FpZ'@+x[$H_J[ǎvhAz%αP60v8z@<2 kiK<º(lZU ®P،*P8>~:!/ŸC`9l]{_]__-9L:0J;Cl :ω*@7@\,a^Bi,>W7k3!-j3jW--&Lrp/Z>eM^X{XB^F\p汾noɴ,'fNl^5y~Gn1mm {BoG?]K_EeCҨXl47 ,R*4_l锘kڟtu+L'7*)]ڏ8sxAq'' _OV'4$OIV%,-p xL9%nCM~|ۢrejGi)]n.G (Z1 (j?{fh\ɉPb1%iS&P-97,ihh{Eq۵zdog7χFZKq*y6\e9,"#PIPp80[MUwkNsTm̙̞Nh f]o{pi \(ٺ*GXr28TDR:D08P3rb=r z݈CFDyf[x×ngGэW7rS}_&.2-HKJ*~'*rg2xOP (Py؊mV8JXkZL}ó2.+fiOeMA#PnP!7ܒ|݃ZDAb!:TzjpjG1:dE Do,YQ F1 !~#Y϶EXDC qdMCN !0"[$FdIaѧaB~R5HwQL:S>p\$1~;׸iI2ýWZpId;gcV t85?AZ}fW&iAꩉC6|E,*r ɀg<9: #\r8箕mǻ|=qwv`=GR9Z+0CGjzHeg5wx9!ɥߜ1y0Rbw P{Wd,EzQpS[~7kC{p9k'uj2¹^b> [;R{cs}bpCmsPqʘ8USRl'[}#*?|5\tϷXe _RDki[RɡuBo=Ŝc?}r]TGRE^z 'NtG ,*xإn.q;R20*y3WN8Xb/} >ݗc~fzV|I\%ohBΣ|`PYHhПcJ%L|z*fiy;;HW瓕☒Tz瘱*m°!!dbM݈d:!IbNRI5 6_bsQѨ]BpHEC JPH,si]oܼ" A3=F. .'aDgnO{#Jg#<qIeOg}Ξzl__Nw8; SGν_q-Q2]A|5e>\IjN/QB(P>% y'V#iK ~Y͒xyves@[#VMnnvMNu2pN0P-\B|$KK{,)s&Y*Ec,I P@o"iR$C )@ < -@D JV3\IWaX<;)MXiٝ7gyEX1g(RmdS5 ߃K\sF\*{ 72BnnϳF?B%35PM V\(Y$= %rTǃ+ Z[y݌ Id(~c-˂A;z+[{Y<^g>ԏԖcM@=~/'z)tk0R%h$ . Q1CjPi֘5~VH`H̟]!@g/K=< `&ᬉ0#~ޘvp|><LpS%0O0Q^~J ^S9DێCt Iيe'9{L*%+U> sstn^{%rL͟ݶ"R|Ȗ^L*Zg5P{%mceR2n%5+SsjcݘgOvaÍ>\:}% 6 `^`i k\!?^2Nv3XC[׳vw–yVR@ٹ:ޭKv>c2 ?HYՎwų=9 DȠq(յy$  %Хv'+J 1CaoRI}#)(#YL|.&Aoo3:U%m.7ü:Μm'|5ʨnHScޝ=F64lH2ł|Zdk E1٢DkĘqwlo(ɔX[ÄqIlHNu׍f>E@_%5}CTu-Ǹ*rÒ<'k횺!vJ!vox]?펧;L lUp~"/9 TPD@VY%HA/$f/}blN%_6 `lj?_?XdbB)HN]aدOcN$턢AŚ044-r΍-ڠ ƯVGepTR7n4: 0k&0Q6e-J#bߡyu)sIt<Ӝ* L@c>ћy=45۱uh^tܬ"R<{M#؊6oڃ%rG >!]5xc+gʅU*FMC]i2bALd\\IJ": g /n/nG<Av1hv}x:ӫBJyt3k\t 1-HyPy*rE0̉n~̞R5֍'Ip'D?HpyƖ?Џ>eR85Pv~@y,8E3Ne9[L<G6C x.a*ݵ#fy:T\bK@ x|EɣoMGEn!g5,ovT+ ?Wr@h"Ѫ>WˋEn6$?7[Mn|G?$Cc%C+n[v9M%62J{L!ȯ5GUY6R^[FN(+O/\Lov 'Si6C}Cѩl?TͤI~v߇ zH-)hϾ1(yc Ї~L 닄ga4ND x^ll*pCMJ`Qj2vs,p^MX@=H~?XLrwJh (`S;ĹM 3I2u~]_vzoqX tM9HB Y5/16"ƀ99v'e,pO K1EAYl ayI$C'[VfNyBbT&L!! 7ښ6aܺ 0;0/d6)ٕE[SyK(Vzh<*6VO#+}Bc~04BKbFz10q _?5Y'؄g/ܒف+[;F(iRJSUDNXz̃>v19 384}n,O$3n婣\ƍiPj@-lf 3nɺ O^pr\8È+muse; ;lܻYDafF48};23c'8~[-}@Hr(%":d(TqZ3νI]8[5A v>^O$7y1:̓Mbï=4s,1M0P6#EEBQ)SwxvnnLOn'E&OTWAݏc,$%\>C B̾7rقf)9?󝴽f9 5%/W!h؜r6UJ0* 9gS|@Mp'RbWr'e.tj1^͎"Q_{*{ 1q' !a&̩]]H$sZx'}Q\+On'-cBlEU]A6hJ! 8TE bH&߇|psK<=\OY/_gF Կkzl'ccs"⣈y1Kh'D,5o`~{@|vÿ+Dedw?1Be#ɇ6I!Ta•lBdk?i q YݿxdӄΐhA" FH'8D~W/AY2Fûr4F1v)n۰?iJDJr~ț!# t8h00#9ě,򕭠'6 ΗL1tl^5ӯK/-H]5zCWUa/ރ-1럃)ln!XmGUkN6F9{yp~ny\ ۘYEuD7Wgl )L# 0DZqGceYVA%V&UI;=Œr^dehlT?CЎDoǛLDp8cd2uZ:# **fquhgC.b%/HᐷL/`98!坷(q數 bLdP!|4֫>X*rUa=@ P$[=e 3[P4P}.ݱkham]iϨ6žm^ X& :Fa;DJtd7M4EiEØF=s0u).0[pD {'r:(>!xlҴӵ|.sR3`tGZ!j p`y{ntC6Yy lX ͒A;R,`Oqf;ɡg Lׂ!U\1,!\R_rA_fxs8Nl!ES ٶ=3&eèN[89ͤ[@wJ#ڿs9J7>ۗq)䜳Etfn=O $wɺ `X?Xd)3Y_JbYqH z-iOïB4Cks}܆%% tE l+E`ﳷQ'jz$nnzj@t ڋxҙ}&y6`  │T[̋!"nCA {w."`)WbUm0Hф2'$Bvא( 3MҖ[ ƻ0 ־ޕSdz$It&'-c`B@k*Ƶ6%iInq!d`.yzW¬Bː{Vb>'Oz! PQ7XWDP,>Z/.R&mDcTV4pdCZ[ 3NY)$hW Wi[VπD%P&Ġjs.YBEn+= az'>^ Ɉ%61>Ha ;C±quoc)Po>'Ȱlܛ2 u^XlDo&e2 q, );5^bW'0zcP ࡇ^gnL^(l蒽%%$rŠIXdhy7p5mgKt[&~+_]TL' l\^ȃi:\Dn&>M4=QZGVE)\ nv8&yN!۫-` }Id `rdJ&EB#q]ZivԖiƒ`olBG L4cD Vϛ|E}nQv9FvprgO$xx,oæ)䶠EX~LN5(f˜0wt&,k]'r:HqNҴRI4l p$&>7\PpK:#^ nf yg`aHEM%!A=3OeoF RD!APS ^|ƶ$(!^nZDdţ̉=j8}(c"I1,D?(eS|u3 s9~l۱w6<$bb 27+P ~LfG@\juq76k7^T.3CnYe#fq>Iac͝%m9B"q]CtbDEВS?740TXdFMnz-#X 'WlAfxsC[<_7"Ѭos@*[8ܽxvGVO}TZ,dHQ,\(n[)`Ż}y*[=&JLh/OVXu6WhY%/H+dC-$?6<~Y:]>#,Q`wOIhFG}043$m0Zx2Ah)77@1(S*)[Ź+xعZJtҳ7k:'c|2&>ez^–$E[m_^K3[ӯOJrz֨NĬiqPH杛Qަǣ kIw%SиWX! 5zIJ !^-[6B?|7l`O$8!6Q&=Vu'0upI}v;ƃ/s$En|yYjh(|ʘu@6]rKo(ZplSS^D^0Cn85yw^lTPq]ܤ=nHbZ\*Uh;!Cj=fpb (tQ(1 o#OB %/08BeYwl-LFRt-l;{?½00'rxN3}2%ovg7 A&Yg$tHDu<{t𛋇d)\v+QnA{v䟒˂:v (&(.4`%T,H@C&bMLG[*e6NӛS] 8} GsFKb\HSϰAٶZωC~X\qx@Ksr>$of䕢b]K4E!3ˡR_:8ʸ];xUx;ᥘvL\h:wD \[Wf3}%Z `m%ZL>[mD9b[9ْb&_ǢJfa2w^})j/dfaרmg׫⨣_iVc4v@sM~yw)/K(] eW88tǷ58h),ѓ(1RbP_A(A~!2 oH &K̑B48QH -X+?(/M AF f F}I쳉OWde~ho\h׊bOv aL;,ē!5$ j:\aw&CDҸ뀧ZnFUK9@JT=k#)qsH߰6t;?bAx)-NK!N$h룕YU;,1q)8" U5E ugϰ`RROpN9~ɬ;4;N$.cDUvLdĞ/T 9 F$b称^Ml\svHbg7)$<$y1A%+\P"#+Uʣ a?="'|$d9c!pV$ZvFtӺ;10$D ?Ϗۑx̃3}4#)Լl6lKLb 7'IbqHj@0mUՋn˔7H>Buj37fpLeN+ _96O!eS/g,]on=c٫ h~Bno#JyC(NHk0OݤmqW4׳cSQ-\`Z,iJukhU땥A-DG~Ӱ odXYR>D{^?4jKHnL)A+G[|3}Jmt[},ڽrz^s5LS]3,y< _2(z盘{ x HEӨͦv6 z:VUeK^i t"6v'3,kS}%[yp#"]6+u2_TY1txN{K9H`:ټߘ <"JUڕ}=EiA AA[U?x;EgeӹyOdĒAgq3G]3kX_0ϕ8gr!K[.yXŬyԸd{UʡF[ "o肂k2V62yuRg &(NI⓪kBe3փ-o[ҰOt/N"*zq%3A u'axJYğEIGoUZfR_VW#20SS?S22\ n ͕/ےeD+S2ϴ#$U{q{zlӡH;{:,#&}I}ʯvb֐S_~_IUEsA%ny\K''+r;BZ2|8kf^ i(-胒Y7P_뺻 b',LbvZ K:5G TB΋qE']ėFO͋'qՙH9Tj"S[Roz^{詧gyd7s7P g>|9s4V6 F#WKsI2t1Ąuwuvg⚊XPidfCAd{x@JU,/EKM8(څGJsODxMHw|]͎G>v[Bc$,@wuCM=nO4{%Ʋ,{/M&"r|dgr lA~DʉN(_*(X鞐_<S o [Y;BퟋeDgvBw=lo+E٘iuUOU/nlp!;Aof>Jv⟩ JZD0/`dˁ́g[~ߚM37  9 ĈH@ql@x#ζZ; &jI̅C\9..<,UЅ6wx<]Nc;Y=>ޡy]ʓF(踬 r'/~N}(ˌG 1*ۧˈb\Qw\+wW 9{Rn!|zN5_g9oL͝,{y>7E Ki=()>Ict *">k}Ȟm4 E+,UqϬ o]5R/$+ӉK}XƹcI }1%;&2/K Ǡ9kޕTC`hB4{7IV`v`sa9Jj-:ǥzϾ&<ީ诱-lMW f}R1z|g^xdo!3i>8h/~IZ&`wl!>׀8+? >.iq 01PNawF68"x(qESOh,ցb- H\^Yf(etżGɨd[)OCfhukD%FdPD^ =x2 1(m2_1(9 rƠ$a UN!-1rfeaհ#c Hl.#c)H q/ {1Cm ygB:c$(. *>8e? x-FC~qwŪ\YxK6nVMlRiKb%MN:"e Fcw "R n;j?b@ 7 6H`y ve ޼>9oq gPAݫb,)T/=󣱯{6*$O ]5W~}0G迫&8ITgsC;ͧwOx ki]%HKVl5JsŘ_' BV+,\AKW֛jhIMKz3b_/e69嚛J:CE05 OSNȲxgB텪J&ӔJ(̧Ia2GA4 LRQ>hs,$tIm!<xa> HmaQ )g _\s_Q^) `f?l1]!N撤YZÊ}oZoMq?\r^{/t*5ӄ  ϑ]׽}0'M~8/O< bs '`juɾ.R6ӴJ׭iB huǃd`AAf!SI,$k lb^>;a%ZQX =3V%ń+Kް}_o^qt><H/^j" X < ֈͻʦ=[ `}R`NہR)ZBud.`J4 HY0{42,9oZv\q'2KP˙K}=Usb`G﯀iH錝5H-w`Cwz!XK:a95Ǧ5 𰞷<;VxZ'"y9>(%.o{[N[{?^=YqSjc`ǒ6K6~3f㡣hD VN^]6O,$`wB9t!ND8=qs{eXTl `k[!Or`ܐ($l OɅT`{p_K9uIsnz즰x͑Psfm~:o%3wxl1-J޿zF> )tƮ1jj.`N4qw]d+G2 + $1깈e0ςy Te**c7xSKtj 8l9ˡ+V^#ۗ;mB.S^1>˕ḲCnOWYbwb}5`SC ^j>x $ynkV򛧚R <Byr2H&!Uj` >M9ᾣV?V+6G,Zk"͞}O d rJtm e85PnlenxEN5 f&a֩@Nc 2lX4xv{\0Z41=%{<73s'ÀRA(-luPppb O`J&.ɏ~bT#qxU_3xkfwAKt>1)23Fض=d7:X 7nq*6"K )\JyuZf9}`h\p /Zz#|$36[]<Kݢ:G^Nt糷qsi擻]*c7F6o{`v#t:r_1NdKJ (Lux܋fSqo6N{;]Œ'3̗וL{2)tW}-GVt׽ڑ+ލn:˓tG{//nf*u4XIN'tE?+| jy.2VٶCr1kQ=QŸ e9g1 ֭kܯ^ÓIq+b-r[5dA0J F@HIVCrd۽Sj-LApJb܋4dOPqBXa;81A#H8ȄA*L1YXo4ȤIWg8ETO}AIL(GG(p8D4E61>]vT7ؔfծ[5[d͔5)Z g:([PK>Ld4CbTQP<\LA=H2Ŝ3;&q_Pc oaF.XGmze'%/?x8H&Kf‚oZI׻sZqF0\;G)Ӆ/1˟Q箞ۙf5(7ja4V'' /wגf䝥]{mEg] #".~d&@{ev(ap 56+ܛk&O koM]%;4e+i+iΚL鵃 %KgG´/#mߩ_+îOt}Ul,E›ei*Gy6[M)$fdBbMF7e]U[8E@Dh[CXBJ8`i,_Aâ63׃sNWzwᢴ7xe|[l2hH"yBč:5iiB8)4A)"N,a>:uwtu]&TP+ 5Qw?/AwuQJ]O^9WՔc d֦esZ /^w܀>ER|mtgo0qy޷,;Q8&=O۽eptٟ8~:%0?d'6'6pcLF') </[l8ʣ%R4ӥUz?t:LXظ k2S-ٰv)W~ rBmCx8t o ixuPS}, 7"&4} .6zi+EqsY3v78XDu;2aӔWkZeDnLǞ#87}rw \0p4\;;ݲ3wmw懘yvMt'?wasbjO=t.LG .0p&؆;Y*Wo[/)3?8:w5'`q-VG %>zĥwLh^ULv =׺q*P~z ݦZ ]NO;S1ˑ߅R (4?&nTlSA wVN,ipKHc+)y_2")jQ&P(N'舋(x1$β,d%qI~ p] \PŐ|#] z5] ODY(@Zal=3AD:dRyES1[f |oRvu]an!FQ~8 Ypf/:8Tyhp$Eoik=EKQ@Y8CRhݺc o_ha4RߪS>a;%zQgqܫdg:](bPUT ՉNY/lZjb}Q1~(ӏ_;-cF\'#nx#lGw t9+xZ}6)(3 X ^9XJz?95ˎ1cQ0{,zᠴ}{>ݶ gQ` .!bmyJ TGfQ0'qÛ92с{ owB/=^#mѠȯz.4`s 4RZw[Oٹ;]r 4ۛXssE- ԍ}}_;0]-{PD`I|O\f}ޟAc\ prp<8Iq P~ai}oh7eˆAs[A &E Tӯy]dA{0aG c9dn s%zLu䎇;O󜁼8 ,6$+1۾]:>y"@R|%콺Dmῢȃo !$2qB"I(ZۡZk4kqx: e!;}jo/WV'6XU~N' ۽7M܇>f̎)R6/F.p{MA@kqzeU->gEwM+m,bn젱'8Llڛ~^-~eђ=uw $8 m/Xtz &!r|"'Œy{fl n~NJ9ŦA"C{k%owvkBQ eNd&;rhn~e5t Nz16/v`e/4WUl&_2^h<0]M}ľKL8 ӡ q\&}`\b5)S>_g<+aqc`e$s.A9eC\(` 2+ [@DV⑈5"gxhbeF&!g LE9v'Uܵ9,0"\$|(Dcrur4I(flVrp[Tc^Y'{%ό+?5J<^Eaq]̙\|ѩ(})}BK~H{)pj1XP>d3ej 5ji>9ɟ9&8;Ϲ &hk2kXDhv;F,9)3,뒟? %:\zC-w_<dbwN(LVdkTD~ZBEl7MEf'5Cg3,*"9 /ZE{ƍ}ij怨dbDA?}~/%[Gw1ƙȍh~*hFމvJO&/RN &9092E) eNg+hM,]e sEPbE;h֒LUe'\oѿF$RI]`VV⓺M)[yz=]}۝z0$SEdgcZ!jvhX[ޣ]lǍs$LNTqXiK3Ƃ8%>T @4*&I's%nsD?RAznq뙯L{)IIn9Y甿zpm-Jtu\#I;U璾"#lK餩k_&ƜVo|1)vloC=+zhko?è K?γOŶ6i:<$DeDVJgRB biYӂ/IJ 4X #5uuͲā )~^B8IKSTfdZ|¦Iz\[*.]ͫbrxD'Lwb yWU_]чWذV./Fb}˞KrLw._\P:h5V7qY0\4nV?|ҧy1=T~vY_ [!L#r^Wt=x%+V]Nn2lC]͡5zbvTP,I;C^3ќhA} s< 7 Au%#uU8v,s|J|./~Lɕ=y;f1 5x1KXQag0̉eDAH^wի՛ ""51ou)͝p0T\$gAȧHa!#Ȋ/R6҂y0jqomCڌz]PUh;nh2CC&J0t DL_R-j(d(;[|3Àsx,"hnepYp>!S\s.%Ahi3F-_qPSCPYw7ǭSoɾģ:ލ |Օ8-LE hV"QuMTCÅ``ab;|r8aB}g{~/Lyxs^Jݘ3l۞pwwiOv&~hM 3і'Vd{3YpN<*f"'h$bلZj"tTOl2#[[}6Ꮖz3hgkMlS)eBn-K *(?5: [rZYCNZi}_aWM^ *p=OҎ̋8fh ۥs>=ci6=r/\ќKAAwjDٲHtTX(7h#DxϓqHpyo65KxϴU}K?63AHV1cF,O  X%ǴO"q<i10b a?uJS9kF3z9:skcMm-Uw}=m+^9\_v:f-* o$t|"Ր- ƍU+} %ے&OsYE%:X.7;!3;i}VIVW7 TLo9ãl_Rݭ vx_>zV+zV+|ˣ9[ i7Ӂ( c$Ζe_(A?8"c/ =- 2$,tE@} KߴdZ%.5{[Aȗcz?5jxks1)F$A$:3sU1ON"FҠE%7%?l:5Dir0;9>]zU~;,`S*OTk=-wnB#jQ@>)*ls^ ugɨ32bޗc`5뾌ޕS{SOWK[jOe:+jP^(K.-> w L]IOS TRdqޭh[b pb6 km>oG-sֲ 6PE!pVdlEњ?, '+ѤWZJ'y^yA jcK[cfjG5ܮ{XRI䱟4`Zo°ʣ'kw_KG__HIФ妬4eH2~G|T{naZybxHRLik‹IP$Vsn~AeJk*HY 7mI݊&޹D`E|BN/JTrBsj(kZsȧ?@2c`d>Ll)9V0Բ| "!IOLD<#5!O0^[>o><=ys9I7%On/K'2OrLs1=H9 OxkKW,ϷSjƙ_ [ȢIN^axrŲ O,1E"$)/݋MN*_2NxN_% %wSP?jS[M-T'(ܩ ,i600䄩B4,/ %ݟUPדf>5?Y {)$X7#xs(1}0׼eϻbx3K a'imphn_39*[bx OXoۊR9~1RDyR:ljVo[ȑ fyZLVWAe@S ,oTzo$ 혽ǻ9P(hYhlbw}BvY|0an4l`{; u9bތm|ILxı:kŀ6`S9IqˋĎbˑo Ӏ}@2ZpӪ3"dcdQux߰ `;389GUyNWSbQO p&3\z<ʤ26?%\2 |d#:]°-_H\M}AM+˻U]4rysRvηIu|~7dmU26֜/)ZZZ< gxv<,]ׇ0{!e^oZ9{N- 1@;>eMB*4ׅO{Ipq_\pꏫ U╷̘>%AE~<%1xW./Xg2F,2zBZf[jy2y*{2j=? 5!p7-*J qmJD3**q;=Y>)wcW19 ;N1$1]8ky*7mKQR1n'OڏRK:fkIЯj'،Qaޘnyv{\&6 7iX_ia|ȰwG 2Ey}HTy={ h %DLo2:_Ġ}N]{o:T'ebxڝ  h-Y#S!1j\yItqdφ5(|Q&SI̋YKH)`>1Xp(f4zE&&+=8/nZfgxE.L{/(?em_t)FV,Z8%,ev@) Дnw\3("SM%KghDbFuy]QHՏ'+Αl}]WFT<+wqYEt`G'禧V 5&/o}Ƈʠr֋y* ?Ckm_-Cط_LiGxZ8Fg4  W~#ioXqJ_Dl= a~X u^fw8M&Aq#JhtbVh/暒wBbI8BkrS b FʤZ'qLi5x;.J !cWP)v'+C>Z'E},^16p˕mhGd"4o/RuZ\8vCS琋& nRا#/zm*4''/Fj߹ٞ2>_Cu3os TA*zfsG Z;|+-o 9D>L47xH.(D8FP@r\3,79֢N':zMnӢǥUµoڏ Av%0tʳ\@qQ;ߘ/ V3n?lQRVYC@ƷTwQe΀f? hX7#UچLJeќ%Z5yk {Rҹ"F"ldC1w56M;sSI+r/bN9'SE ) :|lge'/e>U7+TbrJSa%]A،7Tf,["Ѩ auJIi{s=_-,I(K4 / JBJz$(4 <\]m ]*c DT_Y ". 2`4,0A̯ @jhs(O(i>Bb%3͒|sq8ۋzvqŭL?Hdxܹ1L.C7"@GG3.9$AW2Ggþb؛~-]O*x+`smj}_tE B|9Ŝ7ta?2vAM6xqfPLDfw$Oi4Zuf%9c2! <@2vmo ϼ/4lsTi-J[d7 }9T 7.$]lگm+|p^.LJ_Łd<4P9 -S =F4 $g$K ̗!JW-{ z@ՒqK ɡ! N@ik0YlT_QW.Ad#36Łv|tG3C~wS[lwgs}8sO3LuFnRgw^9aZKr9SZ>Chh!@oB\*<m@jMJc/:qۗE/aPYӱ:ge!RIE~V0Cf b w/ Z~Qpm 3\ޥMq@ю"<<ƶovI"B ]i[_D>(qBu6R{L!nz"gg3Km\vMUd{BCVLkQ cgg8uSY{f̯0LHǴ!O%Purtr@vy..U8;AmtF7n/7p*a8Eyd:@RohN\'youu~V7L_ }}ejךَ~=sg%vo5Ƥ]zְ"W̷SUon<< h0; CLlF< Bxq-amUs5F)W_u}Ϳ8Ըp1s`qoK_%Y /Y9@KfATfL,ODȆIQ;qĀKߙݷ12?"[LL-sۜf0j)W+%!"l0<|'!E%L)Z .AE?J?^:0 wֈK}_WTZoϷX^[ߺ[*iف߆R^J\''C˯d#ƀ-3.^@p=S:m9Ŀ\&Ҩ!:y\ymsqiFg /kU̅<]gfcTm߮W6vUCuxP~۶MU(כZ⪓Pv"!qZQ vL]Q $!J=$j\˹Px˹$f(͕2y}/!%m>X+[7Ga}5tzK/%[J`>\L?R(% gunkY-CEhCklz5|9I"@I2*Ӓ)y>-C9ٶŚ_&%ן3Ɩv)g朚/3(ו<ڦs_`]=o˙p\sck&#$EnheL;Ë}7Dv{ۋe5ekV'=QO56~x.P$}m\7Ξ/ w - ܍![÷W81ػz8 C9UX?1v -xiAmb'ho35 ": Fv¹b69Fe)XfZ^ltNn<{p'G׶a? %ɌUYk>lw;nQI*1$yWU^Yd$r|YS^dbU+-/|KA- c)L:n~I-4C7Kkµ'Q8ﴮ} Rw}ĕ%YhANZd/\B[4I|u"Vm{F79A 9NE*$1;m杔77Ά[4;N3]>3Y5s2j ^kK_kVO@vTR9JN4D:]<,/< )-R9cp $9_}$\z&lGɕͱ9pvzř7nlVAQs%MqZשcT֭ cP\JSiK,IiCdGmz>Hs#ܯ_M߱Y/U# {`u#cìGvw5Gױ[?|? ~ٵXYa?b٬߯d L""y˦RS@Bf(Of`M O=~f$P)p_ >O.iLq<1wMt9M${MkbF'o2'`Sn$ ۾q۔lDy9L]G8T]y~$ , +Bü9;wċ6_hfnho.O5pvC^nU:ZI_tP!ͽUvZҥ\;b|,%[A:eٷy%Hn6&vu1亼yı'=p`~, F:XJa9 s5ֆ+Ni`=A69F`֍o^VŬ1-F oO IgsJl8 w/b Kw[;ʇ!mPXc|ґP[$0CDMd{D T 1 bA|!?_ X&iO!O_墔)9\Pi# DJ  Di7KV\ zwWZlE,!1t|` "[t/WOmI\_fbx}/&Xڼt ^?D2_(`4s%dLX+`|)]zhU!"{sMv&`ח7lao/D2Cz퓈?<\)O mMT^zMoO&w/d[CG)bƫ;O^>{6C,V}˪Mmn"nH3;f2 A9-HF>''%`E$A" хXhY `4l4O}P5y0Vl8 ,ZNBtlpr1BRnjuNFjiaq6A= ILSYd$;ڋktt 8USǷ<)\Qz9A#&, TY@0d^ n_ 'bb"v/F1m%RMl}?ΚStAUh4D"RI<~BL1KR.ϒC2`G$f}E 0^~RGNnhG^5bl/m%;/駭LcWt<0qVibw8JwZu,\L@`n`KKr |#2y]%_@[4;!HcGL@v=vM۲+m;r'l`gmu9]K N"^}sh{ũ"  ,sx[aGYi/ #xh̹Daa-uI L*Q-<1E֨OS \ڝˈrݨb*;#6l.ҹF92U (Y qJ DBvSSr),I!\WFxJ:<|SܴcNJףäVN؉b>8Mn$D߱9s2zO])N%7 eO&Uqq_d˛^/:+ 6[6g*i0xUӴHT njCs{GfȗQh|h-|[n8^_.Rݮ oDjOԫc4K'<\L_[}fq뢌 Ogs [+ӯڕ ^ 3M`Wo<‚$DYz !{Ë3pG`$q:ݲd߮}|L*Y JP@W(?qMr)3'#{O4&=_'.(HZ ,s !~yAĿʖ16!$UwL څ?$1--q͎;"-8n)w) = MOΨۥqX{Jس1c6H;oJ(rJv<eKrn 2HS :8"S*RI[Ã{g'{B9jCaTQJSrϒęӤDٔ ȟ2G"!i=t&lCׅEXM% Ge1R*Ϟn\P>G%CF3鳴AU_MXx͌R0C^'Tq'H')C83Lgy=!jm^(:lT˅EC' gn`_`텼3n[,ܽb.;ˢ K,IЂo[%=gwP ޥ\V caP&cxLx46qmn#Uӥ,SFugR<[ =ʳw\ۙ%޹_U-ojGbf[_ۺ^ly lsg2$SY MHFU,\Oj_4s!wXW8ļݫX^Hi"w~e+}1=v= cB!8QB9'hUoy}_3x΀+u-02\$8~yY^@G亣C5WP8Pn{{8LD-gXsTBhټ nfA2YXZѯϰP/_9*}.j7@7r?l;/9qPF 3fg/~m?]`+$a8vo:jRh^ YD:!@,C",bbB ص\NvoܥjjJJ2$kk =c،EBΧI!򂡄*OHSj Ɖv9bHs@eD3&;ivܕv\~Ϋ;F;-mn|r=]BcLVgFVh~C`Ј /NQ8RP{5T 1yD+r̾5}N)#|4K|J0TN<˴2Q̘nw P\{Tf1`<Яs/ԦдpzMo ȓRNd:[x  /-ԯƫgs<,u.=j}^YAJ> _-O(L>怣j/yˠGO o~-)$d{~Hƹ9L{|4ܝtrN>Ƈɩ~a]Q"کWnފYs&#>P1O"S+0$(<6s̍ڄ` :ga$D8zAmw]N7ڗ~-X׾[yR̸4 f_2M-dR' r\ V>4[Tfw"V羽J!USK"NY`З#R$G :}"mB&[]LiJ6ٴ$нsg¾K;{_C>j4ՒƷĶTqQm?$处b@L)beN"mxB)GBr!.7ɿW>$;b #UоɛeL?i풄2D q4jui2҈c3y>"bLd5l3sᥤ: [\ crO|7xqQ6iVaI P~零.?O3_;k?^FM2ǔ};<4ei-oy{ {id/+ʲj/Zw|-I:ykv]xp=9d!g32;-n[ZΈDӸd0G>-ۥDafr rK/tI`7"A4bd"ReЁ;ؚr6V/\#KaI>9*^o:,gL٦G-$qy?m.9P c)j~-@˕T1 4s=~Em N ͍ ZTysRϯ0=;W{"}xRd]'I!dr/D?^u[boWL;ͿҸ&ˡ%#`[L]؜E:g$zfA@~{W'qPg˚ ,2 W{R?u3}n†T2>D脔<9"'0$|pCgZ D{×O'RefX GdX=AwIB<1~8,e ץFD[B~ϠgLE s:4pab+zwJ$c}v $9_(.xo5g9,Ėz.qʣ'PpPOL8Փܬ4ޯ™k{*]JXm#Nd\JY̖k*XoT5Jdf3ݓĬNVk;φޥ'uY4E6 |: V֑:BYߎ:.yԄoծDO]S\b2؁@NWf"m-؞uAB[λ;Stldɋ}5mzD0mӯgֵN|h 6Qk`&Gf$CŪZ2FTd5c"2GfRğָm FO:acgƬ+m4r4?LK9d0UKi1} )YW=:-]:g\F7#wQZ\k}Mp3.ܬ.gfZ}irI?(!s /E҉>Zkpaien*:!V]M/~ ,1ힼt?iN?Apo{OW4įxn9?pz…k G5fKmJ)ǿE-%#\g4|d{eo gb/XI(2,sk`)QC%V Nqa;C٪bn`.ܽ?șOʉDpx#J*B7]8ʽb#h᮵R`||#e/5)MS";XƔdcmWv _s~M D;ÈqN1fRfa'qz`.خAEVFvPH_Pr3T=8ZB9jƳLrۧB-^-i5M$ %I.ѓb=GόXU0G˸ ܥ9(/t#X!ɒmIC!~oR<HVBvޱ'kd5ה;O_zmhAnp"[Â!e$n?1Zg\}Jf?AN[1yN[=%ל8ˢBaËlPߛ?t|?]S7>e)/aKtLyW," !_sYEJWQUjlȸX8&u6E(uDНYP""a?fl{s#l2 #HKeصQdPlulFttOd)X'+2feZ ,H _` :=͛TX6|ò|N/{Wcqo_oY)2& VVDJW% J9QfS\E;j\y?yܷ& ^) >7)VsPJSz~q,ugԎzI$EK9JքⴃgͶs\&rDKQ>7~mg'ʿR὆ӷo\j\n)$<Ჟﴧ^r2<~= ^\l l->꫎2tfwM}XYOEr=\̃P iʂT ޚ4qu[e-׳$u3$:4QT{@P =þ,z>)D([+'ҧ%D{vp#oWN>ۭD\(/v3NV$Qp*.g=Nfֿ7/.d<ěwpTdk-=HCĄq6ŋ4VvŵK "w60La{1A؁\>$Ac=xfde0E^@TV:iZ5=mg‘=jnGz'+1Jra]"ҭ! qv,x&Ao~ɡRsxTe.h@7Khv+|jv*څGo5Xw(侕-iB%\U8}zy(Yn 2hRE62["X ʴ5ùR'7R p-ya΃!>;oJbL\X4-J_ i4\O#Z*%4DP7yZ$s}S QgyYY9!xʇ2&UX92^1}z ll"ir-ߡYJF2 B%Cb pð4'Ȓ5>?6Y_3frĶpK䢝9=]Mif3-BuCxoY*U0{fi'ڬ'fv&}PE<'qgG R˔Cв 9 !O<$goPxp*QI%])_^i}R 8 J27y5⩊GN޶VK4W ?A%ڀ(3ɟµώUrr0MJ0cL6#KCs0@THʥJy_d Tj@ө JL&ӅJw ݈<+SVIlB9`sNѐ8ᯠKd'h$.4N3W!d2c KMt,cBhdsp8(ޯ ǚoAwXmչ.|w.ypa*>dRêl/؅%<>J+y9iɱwV$h,>Ȣ|8^\8TxĒYdy>.δa,1,@~QJKypC[Qo20bjxN2GŦwd7}򊈔 18{ ^Lʺl=rSSUUuqye Y;W"&E nRB(yJt~ |tcvw8fRv#$k71JHt1, MĸNu}yv&fEUGm.2KP+al("Ґq~}!JzG5W"DVY~+|%E3\HEMH0eYIv/c IeJh( tL 5CI|Spj 37OyIZʃs6~_aml?kk%e?#6brO˶cc}_1Ԟp9Bg,r$Y}J`Dwr$;2/& 8;VI1b0jr=9}'oRe~Pd7#/qxZy_:a3.n.+t}%n2\Ul+ d-\UoUM0i! _3BNu0Чkڷ?'tݶHiᓊ4=ctAJL^31l}!iz̅Uk. -[SpE ߪ@}HF=ӝdU2p8tnjطW 轊$,;vjKjBN;-->K׼R?cN!JF݅E0H?)iR$.c;4(-xU w4 x4*R Neyi`  J)vcvNecESq%ܓeoܘ؝mϻ:r5O=&Cm`=_/I/e{1=J.Idh9Ցr=tXr3,}wJ%-r⭔Jfȧ=CbsY{nկSe"o!20C1F@dsu"y`_=/7i7-u.( b۸Lzu~ 91D 'V' 'M Sp8ͯ9S2iMt 7 ԝwk҉c6G'k~6y/͎WiC/8 eS^5LR7}AnJ\poL) GĔT_|!&{1o#CMD`-U: >Q4ӐamCm›=Q*`:RBE4\=m)r*˜hQ={A[ȓ+''Lz]69Qm`sbo}#̛-[}rCdW1?yL7Tzdm!;a{ &Ռ>4WU#| 6"?БpcyՌX^ѩQzeRW/1:x Cɻ/PvoiWSwjEV ZF+Tݼ^̚Re>5nbj}\ bmO6 {ЬOi~a4T>BCΝC6B24LZ)'_ /S3«kgTc >լtؼ1D ܋d@#C~ e+7UȂz Nݜ;DA| X#INլψ/"LX#4ld.+p YPjA-ޏ[wK/9wZANd%D⧝S#{Ovp5^T*aT Q6y\ 'a^x!whh)  ] ; ّVh[,u뤦xC%~B%25. 2p0"u﨑 C4oBT"Z" <: "2'mN5# #_G"7[4&,f//;%k7]'Lj׊>F~١Vux0D$IY\iϷt,'ڰ7\ŝ#ƝCݯ;}]1@[YY=Q7&uF'?XԘ#U(I< go,Br]}YA&`'Rx+rFx fKm৿zgđl aD[s1)r9w7[p˿|[ˤm.'wbf-##́IX5gBv#8@+_[X6XZm{,h;S O .{vF{Y3gqV<\8128 K6l?5ݎ$ jU7<Ƃ JYZN٦¿yWR!9.([^vH_5جp͎&s0w"h<~-/z_ׯs(fؚRBMtdT[){9+%9#^>&vZ=b|,V3, -ڽ:{877t].m怸"Cެr3ԀLU_SN6lI|lrfp6k":(%i q0G82nֽT=q&JZ獐=Rg﹖] u|YksYf4-@q1,3I6ˇ6P}^2J|8)Z̽% C|]-lk`Ki6,ja.G9 ٱ[֐ĪK$k ,E @/%0nPÂi0хF`%hJ ߱ 4D%+E~Y; {Vu̝[o/B`^pWa%aHֈjdw (|Eı 17˂ik(IOFȦ+op/>k]4tc|s=.`DOptahY{bB[qy0J1 c!\CY6˘t1VM53dK~d=(sf+it%`U&T{Dw֢Qnooguq(ڰ:Y/(>JI DCC3:H+{9vt2tu BE١ߩ}n:~G(+ #J77 Dn؂%&/*&JN]ϨykW`>AK2JzOM>i\u݌)^%NJ y>QXƷ m~5LH*2\ MP]]JH]a5f +ѬWt-"i/״;C\! 0^߮)՛f︨DvWft6| }ԝmE@9=ĐݫDˠVY <;fN +#< k,pW״,t˳}zmљk,#U#S^dž0̾P/{}% >T.歑ߥQ%!Rzc+Vy&䕘K2,+LKx0X#Dz@J>eoaR,Y lL?i7GP(uY:;KB)޹>/=xpM'Zi t^77^X0xn ^"HsY @NfWE~lY8*SW ' >k&YBY!Έ-||⚖$]TtGp [orz蠘YDM9uHq\%Gk/I_ +T6AYCjە7B^Kzzt|^iN΂P&Q7Wӻi|ii"|n{$ޖ4_zPp !ϵܲoҰIԂKa^|Gݵg`d؊ȸrkWz7W0U}W'^n,?1ev5>nb\k45z@=Mdk J5軬1,N)UC?y]fV+)A_0̎NUҫpj+.okKUsP؉z5*rD\`qංҵFsr8l8eXk@$6a0.fg{#K:D(1k-5H ařO |n'R8vOcr*$cruOXQ@H-0|+RVxm"_ = }GA!}zP58BޚieDҭL-/ftG)yDW4 oA9Vh"e<)XE.A ]%osP6L/D0J&O{+i5s>9o[-g /!-f܏>@PQR*!|fPwL%`w6WkgP@l9 [@\%U\ '-.L gU3ۭjhg1&?JR.X˥wεXU{a&濾0PnjMdߛ\Tovg&<_f^-Ɵy\ee3;nw^}LHc)yIJߒD͡GuOLp+VR5W'`*`2Q2"qlM?N=[@{c6hl&X*ήLzזyӽiTv4/5%9 :+<#u>e:I[I\jωz4Sf͐nNuvAoUz :Fԍb~W=ycuS A6Z>~JLG;3He2Mx$ oLA)$!>joLjWp!QE=ḣy".ǒAYWHX'K<7xH 2ݜ@_I9=ԉU,abzzeu< ĶC5NI?|ĺ ./2"[@Ʌ/]0ȁb߲;(V"+Ţ4c :e#Vs*GYgX7/_Dgx;VkIGHvJUB3/|P=w30Н)mP/s={`O8Ov^EobJ4z^NQ{ϊNJHitx]j/O(c[欄݉8-<8ϯ3xyo3#FLIk2Q,w4=Ͱ/"G7gϼUSq?M:M4҇->g>Wqe;qKH{Z ֘<ٷG6ViY YoR'lfFA(o/u,T1aTCi׼\~l.G2,Ԫ_/cLrxer[(݊rTu7+ʘ)* z-km5?9q!;QK(Kbj.'fX훴rcCLэ\ \H(r@,Ш&SHӧp~t~`*f?>,GrU2PF)v~9 Fݧ^4W)o,/UcfGmP!tm:W_%[0,l, icC [o(ooq!urĪ%R'Fº} 4K/{@4z}Æ~-Z}!BJNΛiCKOw8Mi!|-tTcհZN;?zq~d0&0O@FFף>f]*D8Plad+2͞e8d$|yH<,@B9//eSǷ6[ނį"J9˄;p[D[Gć)tO?E`I:8ZutxFϔ D&Vc{0ɦRIg;C˧9 *T_Y`ilugUъ(b2 2-;MȺzbg +hc,Y"L|zooBXZL0~%Txd/O}}Z]*"ܾ)g,8KCw[!̭IUsKp<EHe *%w7G֦}/ <>[rl;q&&e{ѹ߇P >6;j@"چ6Js64ڶ_ Xod|;rw.4AS_) KM"x$g7L[lyq4}3[+KA}k]!ńm3'['.;9ZQ)0V۝wOS}܄.ad][b3?y$<=WZ[ŵwLZ~IRZuH !u(Shrw=LyEztpz@$/q(UZciNj?E>lkȊ[]G4U,/a#]oD+g9cSf(sw݉љ[$=2!?*4]nB O-aU 7g@\衑zvGLW [H[|Mb `"mf RQѷқ]@ެ C^/mҷm˸ѼbmH &n|nfLÙ8[{HbY7, )+֦bAoԣZkl-mGmx!6jԷ[0aSR\tXyӰO/lW <*ѽ >PEyrwjЋHyFWxˮYkR98Yj:jKB|*MjYFnNGLgE{&)Cu{RW}P}Y)x%\ztL6Wx^},HaO66\V(w#$蠨qT ذ<`7g%9\p}wE}]&'GҼiĉ{?)恽ss#0>4XԁFu1#iȬ/y)\ȵfg~in W#R96֜-Mj ȿ 6&`Vqߔ(5 n\5 @*Yo_>} "  -kIo)J egjP(|)oi}}sua"cY'ʕ0Y6+xoKv.quy]_~t|lDZ${LxB0,T} "kʷlXF8"ܫG"2c=_nPFR?_Wh[C^֯ W?%P~\.ҏykx*̖.Rv? h~ 'qW{cI5t R|M!9vχ Nk+"}zCrzq5I kj c{g~ש3a" @o'DlzNίM9/Qd(}y>^?N"mg%X- A U ^k5cr[lD2QTP|+66ݣc!4=_tL /PUPdIBˤ?4| F!`bAQa7Q5$u43"/a-yKJ K`!g D-2iާg&k2IO0haYhukw sqECNIfDZXHOgP 'dlLʡ2)Oi( s TOv-=sΞW YOmn:.ET|YG띀FN}n˞-_I҂(WLAB3ZPZˠg-AbAϪWqGI k~ rpen4o#vޟz`Džr,hO4 yaqq`~0.jjsa$?".L9y!6p+8d{5+.v8l;.aQfHx~eB~e|k)~'O-BH:J M?TXB[opRh5ɿ)C@fſQ{/>u3A'O;yz/@_|G6dQ 4%bbCYv@(7>49Xz bAppYqFwC2/x#94h(2G;SFy17]TB[G"dDVtN\ά$..oYyd^ᗆL֨}!GˡT"=vo mKU|K߽}zb5bg@tpyVkr_FQ YS9a= eGJܞwWO\;$ ]٩(<+¹*!gC@ d9q=;y8s^yڗK8ݦ\Lj(gy&b ^Aeӹ{}䯈ƐtΞM]~)96DNSuL3XŽn1 CJwc:W͜= "d MYB&A:9(/V}uԜQ{pQLJiJ .Z;b3b?Y*~w)?%Jy TJ>Њk0ݦ S0:($ʄ g?:8OEl`.CpꚄG{E#Z`,K/8'hl^L{EBglFk`fV&ܓ- 1R] L)f> zEK?g?`D41+6rz{DO@A-\y|FKkgȼg;ϴS0A:M%d)[دh.\,L ]z4f %`Nybh^I}>B |t#}5n]19>%7]9ት] y׋;mۜ4"#g~+;6<6q.ur}|0i YSSuڅGělF6w=k?k3Ij &~5E3Xcm=+6NUYy6YM"8X CͿ,{nGڢ^;"r4Cn;FK63nI{}:f,*-XMؤھ]i+B"$ $@POm>vs{z} ŸEpF_iM-M7ͯe~O-b!RbUEl|@tUʆ{d: Z+3bňRvJu= _+r}iTG^p9E  .AeIΰ?vQBO70|S˧9JmDb :}Àu-ˡA_pį$k͂jٯsc,h֡FT;n!x0(9FVŒ1˦ x6`'&9% QHX,EOI/y&fk MS}תKC">v~Cm0!wp2eq>'?X_<$gϯLH"rGP/VȸQTi^)'uHǮ7s- 곔Ec_Wgqr Őuic~ e= ^ mV)4:<<)J/} 9v1맲bKs@҃*ln}L5;~g6l\뵄)q(感mċ{@ P7"( tq߆ͭ硝{! `M^֧/d*< ZIYsa$n6pcq] O7=˒4Qՙ}W6ivZE < hCRaYJPAp6Op8 CsM]u_P A"T(#VHPMFzߕ~s\)&[S@zay7BCū; u6_ +I.}l5GMQO>L2X#\"Ʊ_w+ r~Aki]ajy{%'_oBY. ;oES~ =c K[ZkqXE (v-wLEF;>ET|N;>/$o<싎 {?ȱEIT37/tȻT#LJ }Jg<9I +z0ëݮċ0A }®&01) S}_p8r?ƵFVsY=)7ܧ3+Ih"gZ ~႒Cy&]$p'ʟ`J@Mr a_cK.#b/p (P 9e:2 w?oqk_ |}A i< ۛтk "SƫӽVt}[3srqBR8*y)t=ҁ|Ww8q`K@ 8 {4 oUd Os [飄;T@xB1j.-&أX2W|׶E<-P] 1Ý$50П#YP]_xrD ֜Scoys!1xگ;2Bmr7S@P*(<Zo;D,kQAYJ"CsOtiͿbUgg7]s;$,B0XĪA\VCoֺ=Y>L (t9ӭzuk8; CboB;J?!Nܶɶ#7$ `.q\k1$k, *YהEh'$+uM,^AI&0}WK,dʂ,CpIPhj,lK5!(k "YO*Rh2dbzOqP?#5(0p T=OVH?#%$88K!)Z|m^lPt/{Ms&IvId"hB#¯ y{4yGfDL dK8{;g~HX +8Wsz7X퀛kYSݖE%ƻ81cSؒ$22oQF!T/zh[RK\%D. w!S@m[H7-K_>*$Y\,HnԈti#]ƃ,c,z }0VhZx2;vdꬖA/e3&}_?lQEZ7s"( ;"X]܇Wdׅ^P[?A<}k3Gn<)x:킟ǁm=^n2'1L+ZwyS괝JD PS2 D᭭wҁ CJ{5pot.'Em,H!F_A-Kf,Ojr JϢ 'D/[޸~jo aAG(' CZXQJԊilD͹VU {D-o+o9s撺2x$2Acoӛ^%~Tcr5r5Cp}<=θa;{srnOqz34aHz?WP%4*nw)B){3S]1{)O{a6Fw}]!y2~aRXa1 V/֨ѽ+fhy~ RLjǓ K9a'ㆩޯ"^x>Z 347ۯK}2Ȓ~mE67rH*YgpݿFmrc #i;{vV̾qҰi0_''8Q[a'~]8<'l$/;q ٥]A<\goMDo: /S7Ϟ>ռ;U%*zp/yUQu**C[X~RDkvSy<Qk%M/dF?x,"𝑍Nh#%~[S b譊U~On7Vݮ- G]dpz$Z~0rC%;Y 6ɔaVU #ry)قiZRҿZF6 3a)k}!\8hZ78"tKvه-4Du`ӑBN-j yJP1ͮ6(7Q ¡Tƚzb̰ѵJ z cW4zhI D|_A ήE8Kp0s8 $+Ű$90Ж*Dr]St{1Q[L40I\t >o/+ݹ=%O%|Vr_;' ^<1_/3obMnUc tCszrnS7_eM-ISx-;y$x OۊqxT20o%^&hODm}bef;˔T%}ʹw2#B-1{a=(:m"]TLH0fycM)QܛHhdZ1<'uA"F5}6 'e;"އF=Qqar }8lXԔLVjVE,*VI3ak-kG*%g%ٶV슮EۗzKpAWPp-}ߨ Zݥ0{0AY>l\oCЅLmQ[":oݷ-zaza,zЫhM.qڍg6*Hvrl H.drn{ZTd[Q->lX&dN|[w]e *I`Y8H}YVTl Rdϐ<'cu%D;vѯ&>L8v52oޓa*ur!jxmX8@ s.p%,䇀w۝evV89?}RwDu.4F,E<>Rq\5sOCR/U5 =Sa"%zM>dWR[û6a[2l..}+.a@ -Lw&<ݛ|}[8-{I݃IE9;Abz2klwK%ema-i7ʘT f<λ=*lݒkIMN%zy0⳷$5L]c=֊) l]*~ #m0v^׷a7v}bYēMk_ζHqpكw:Ezw =cPYX=# $8IqO҈RX l^$h3`jתwi.d;[潁:v'={duww&lO^y0r\!3tCbQ{r39¶96o}Jʭl)n}Nr5ޣ)xzNTLclyC "ծX1f,TkN8mP(Fr;a-dgn΄jSb>WggdܙзFc SU[ˑĕ+R r[1K,qou8aJ<[~8HU*JDNߨ'=ƹCu Y n\N%)JkyKA3iQk٭6P|e椡I!6׏ji8ZX]9m{SC.;{|2;]J(Ϛ.,k ڰױJ(teA8lܺ-VAOCE$|kaS=2rM+Z;{'ٌE{x^8\<#s'T\#goN;~W*JDh5v;J5_K#{7E˺>K<}[G>aj!r&7Ne-K5v;Mľc^Y׽^w$jZg-4|?;6Eše<54nFlmvi#3g5!qpKnzt+^*/2k>i0v4i)kو^l_,ixFݜ@Wא`9Il|yB=ud,Qw䪋?ScnHz 1fJv1`gx~f-_%{>n SJ ܹƹV- Oeai͚NK ;̐8z;tK5Iʼn^7l]=gSӑ'QbbF^nHW۝N>};du!?*4 Fu]\=v+^7`m=bnwF;TӞY!eMxwѦ./\oC{9^4>rIF-?~?.>p$3ȞQea nϭ{k &KSEC\LcI's9Ot-8>#c'̲/'l _ e'-޺fiFX Kؓ{*L_CcYXwl#Hpe2Cb[aXyXeܩZ2M_Ш&kq Ձ ?= ЛOO j)DF箩+DXjn+Cvd5gN#Ime]N*}~vTT%=a|bX4#4DktڏZͰM?\ `Onۛw_-IW9N䋪LwP#[ P۫v.۔?<`^kތz֫pLr?9ùC`y|-cAw [Y?p_~8b~|MX6+z505b`h~3'L{[̚1{*^׀>g}z Ͱ5ƀ}X@\Ix(\'hg9 $MĊ0&H&o[5/̣DIWy\V\Ϻ*ߢ{Qcz8J1YXqcŶmNfJU'x\!!UǻAZޟ*J!nBziط#8ģMDE`HJ)F88C}c^m Y^ǽ+&驱.3oo}}Zb_ y }cmmOf&tlc< l0?H1Wg X]|̻N~O?{kףoZn5XNV?Mw^2u׸BgH X S׆~#Z/#k;̨UU|kX` M$:Wcih@bt@eb'^z qkm@ACuMm#F*&@w'U*2:;*^\а?j zAӄN򏔣rEYA +OψlIgk/mᨬ`QP? Y\*ohNp ?G:8VPX$#\￿pɃlyg-r7mEmȳ+R_IERmB XUŋ;mk ;+ ZXc46-uJg{{JzޏV.3u#)upzUSe5UOFp-H탷ɒ42Nkǵ>A"F~qo@gy,zNе"x2hj~~N*~1U{VI'6އ9Zckuz.=@ ~s,JqdXY'ݑl" '42HWjʩ-% 4ȌHˎow0*Gez(_NWK gtMW7{!eMYe @ljzz?vH Ly%νD~`|=?cî(^Nbcx3CCp(״$HI^80]TZf( BAA]K0jY@@N7>6:r9x E Ml3¯k|ڠZ~ZJwRw&hbl#}2).X;hhϔDKS:\e+i"r{RbpV.DL!:IVb8hRxe9CL>aoլԌs5$7O-sf%N|,y BRAB2O8(r<w샧iy]aoY ?T~8^X()}ov4A& A't@ L)'Lj}EAtUJ|$`ɚ'IhI %u]nE&b@Hg}KKs?|pls?yݠS@M _+،#לC44,11,bRK2mGոw~lcoyd~owGR@Ҥ0?F}%~a׏J5 ~(S7iEq M><.Y+Kn} T |q?ޔKbkȠͼN;ojct"hՋb=W lU];9Ab?yLDF{j_xBT$/ PuGqԞ7'Hasv5W@mRHʍ@_4dq};3h\:X9ݑ7w}>_`5!NOXkR_=9~` ~] 6^vsA|:DatFj?yxm"J<" uGZ RxWݟc;4)HGcY"n}cj\Hk_h,`0YJLΤiu Ws#[5IE&A^[}pI$%e$ozߧ#']߆siwf,s󵀆`/Ɋ2Dt-g՞|PE7kW5-vO؛5D[< yOBLB8q͝mD;UHBIkOkǥȯCh9U4,w3TE-<ɑlf0`nQ$GM5T#JayJ~ލOI}IxU)7Ub-4(!C !$N*09tE'/E3 R;ٸ)|xZdE^or YUnI9_ ʡWDeG] bƋ5 jh^tɒIuQ*)YѢ"WԶ* A(]di X2k?T>u5rL|*+4d5>d˃pEd9N5vZP Iɦ k?VJ1'͗PTd}T(hP~ QL)0q͂[uV혽:>]F-7=m{)thiq{9* = ^  qv` _O]9a4`=t}G):]Σp ID"uDzdYIdpŌKJ,iuөh{ȈxZ&qߛ3i) r{fkK }<,( '%d&D'2@TsLSI1H[F^&~,oFWA.f'ݼ܁c]THݚ}b_ynKG牕cmKN2Qoktݓ:Zm6>DpuzB3K`FK- ӕ" i7e.tMu a܊^VYn(<%ɐKsN.e؂eonr?za*na^)IxO_-B%VWKLdgQmkbLGKtWq .kN5!o1ߺlߝPɵk=PQP 4blXqt PMf!G: "B9٢zFԥ<9;vjxwo2W]76B$ĩ W/KnB0ڽb蝌ͿTJxbEOgTL>V?gO5'H8o >ԋ9C'jVj2Rۧhսz; 験6R4\EFເ6BA$&U @*C{9SssgIcx릋A0y-ybA܆EuRUTcXl8>Vz68gu"g-KʋdaLKy'2t޲֏(sZn&JA $6{ʊLz,f$Sꥎ>(ُ>Ȣi1+ltsJnrm|'tZ|H~ں{8&]]&Gͼ5x&sh@KxӻWHWSH:C'@9/laQB]RgL6p_f`lWcw 1]W:x$IT]kg %`hBJ}ah&ڄP^qb6?|ol{C_䅖nQ:Sf2bKP~Ԅ}I*z9 h5ȃ SJp*:Nn$Kz6!I:YJʌ&h 6e,fJg<͍JbvI-7) yPux2+=hSٲBθU3q$^r+t/ 'ߡv:[DAx)ʔtf#x]" aI4b@NXb.!$ h`KKҿ5<'*e'LO">Ԥ`Um PPDg6ʗ#2PLzq念kr3$_Sy)}< bYUg 0S|#_J o?ǀE%P(04 "XLJ_='ŖwGprD>_ȦusJƀCa׭T)}I2!X<]yRʕqAj8( 6RLSS8Ԥk~lY,ԑqG QJ9GBz"ϡ` )*2*_>YžL u5 mNOfg9p@|4ât e!TqX蟼$!! vO_/jvxɹ <=1Ew\! )VVi\S'}XzW"kF!C*U JpXg7^|@r%r( CK*lp<԰ 1jJFO*xa$)~,e&!p9^g;C:.n '>Ne^l7k%z1Qy.~ YB&8~eGMhLEQ:)[LM"ob52{c(꟥f]PJ ~$}WOC+A]͍)nk!U%k]N=OQ|0f Jl5w!sSj68ttOcbpq%H0e-*"'ҧRfSXZ@GD'P(QUoטBo^/Dj yͻkXI2 PgKH GY]s|(W4fS`wa3gWE8HXV;ym5?x|3l(4܃]lKPpN{Ӵr)T6z՞DtJӪ(Cw۶Cd|J4ڙv)YXb,5ЄN-mot\JݗmJ]<xt)CΙUFFѐ!?ZUEd]OZOFq O0r`jhR 9zk.׺윈TpmqdJr>X d*Oo"A}2S &Akr0`o~d`JZ>'貏tGˢ3U*S8_f9_h:o"jSu֨#oJRv8C%0jmmwO8Ypꪪ4r$$I`8ʫSi:-;@L-[ uh'pW2LQ]n?~~(lXHفTs^ޙYӾH 8P)f "YslU͐eabxr%@<,[ (LPh]5i58IP=?kNf-HOKFѤy*,7t ktbf+y:#s@T <_ s=_0PcȓN-n1֙1hHr. s sul8 z~f 3Ro ZԹ0&;f߾3 !r‚s6Ld7LtE44h+m%Vo!hBf[ w\ݸtEm.U2ԴE,N.za6PæZb'Eǚg|}fX}XDʻ3ZUD=P(f16~bK'j1]xCKI .FIr9FOa$מ=Kѷk_TdW%S2t D'ڨ $V+ؖS,ۮ́z_ mNBaӱlk`J]de6 HB47%Oct^HC>2~dJk *JDaBL,솕*3dDH6n 5 AUJ3D^ $VleN_87+~ԁJeY,GC+^8VP޲ޠp~fnL(i=!;qÑEPiYray`LlCXA-=*(?K uD"5wspBF\eN<:`,K(-YXtr*/ y˥ˡ 2^߅Zx\[Q]J\/Yrfà7k͌G^OEd0["*\q6!#,ZGh[d `,*ӾI 3tQM\!~w$omɦIg);"Zi *\`N$hTg}3")Y1c'\c@6zar'T(Pi/Y5ZFJ=|8k2?MOpp}JBXrmTIC\#k@V"R̟ @Q fFȿhHy }{5t1ȃKN5&|Dh +A8-bUo<.iyr)]sxcGz~Qu< F*A2f%HХo}UŗGYy0~:"E#LgbօK):84lYf υXb]S/C WLկFT̍f5¸MD ^CGIts!ϐ HC7Qjvvϖ#&lP`_u}*NCo0^ԜhW@,'덗 #O>r(nuBeçگ{,X6pl4WTn#Pp}v 뤮TJYYoX߮$"H#eT:\W%6Pxk5gtF;N!h,J+$F{6䥣ljTNL9T?h 3I|qИ6T%[1h7і^{J- OFf>+'&$N0k>Dx?Яּr;9;,oBA[B&m0KUbdD.Lf(0Qwv''.X:H ,..e>\@^]#,'K"R<#Dx`x120~0phC6:%! \MDd{e;2y?uޙTev#~?E\"9>1N-fe|ᓾ/EЖ_MV]Q[&'Afց,z#)|nfRAPߣ b1*hC!VOpӏ{h,*mK{r~][WMMqUԸK:ﳿB'CWAD{6FH}}wx\83^G&&ic?AwY?Z/5S*,8gPcy2.PJzjv+k9`|%h1Z%3'd9"!Ff&]Ni <)MH`Z`R˂KDRvk71vVO4F}*g}7Ʃ;ߍFі(b\K: DҨ1ϻl$a9+q5{f&]/6 + mU&̫MΫԶ! 73y `Gi}< YfTi:q?da8rF fL63 sQ2(g䯻T8_wW hp\va0vorXaZwϾTQmp 61.2]u%A UnvΧ\{ì>a:PB4W[~_KӤk1rAb8IbIҁ4 |AxP^@[mg*?dh(bʇ'qs?34 ѥ $6VDޛ'ǮiLP.o'*I\ӻop"d㛂纶LPa~͂GWsƹn{ uٮS̹jDߧ4P<_/c0%DN2 !t+PBsV2C2KFP(H, XK@ք)ܿ۫U0ƽR|wga1q?°db\v/Ynb(sB2g*ʐ`rjQ,K(o&XK0Etd8cmIS'"G?HL _gnI 4N) f ˡKgv_?Yi:A.WL᫃&ue dYŲAeɂN|1G6eZ馓i"TT Y$fbRG\ (+l1nUMOIH:pfhU'}ۧeƒTG-wZ. ⽥wO-C5EKB* BQd`"qVXM~> *67 TQ-Y%ճ&0R2 ;J7 &P׀l`9eҕ.^rA?nҲM$qލpiSRVj 3?}J;xMaaY?╬k9pGmy.)kPR6\%_y$"pj+a2C>'Y^0 !iRdneZA>ȯfmxt!~3aP=#6Qx/H\\l 9Ò{0Fm`B^O%kz+[gWc3uyԞ:?ݷ^wt]}3^8l[/hz{/R3O/΋) &jE=$c1.cV<+c#iw^Nق |ZtT5dO:b#Y{vzĞr}CdHDmSm<w=Aq|UNAQr?4֬FF- S`A_aqLbא&.P%Yq韆-Gf~LVènϜ97ш 4 #$OFb pt/ ˳MKB9.bWZ 9{ llP߿YԜ$6S>tQw^9$}[ڴZ#- KM,ƙEJ}tpNc<̳;mDω%`#UJ37w  s3}F ?ψ>}yzB=!m[=5E"A{ز.l)i4Oܮ#v]A:O['UBILO8ķӰy3]+' 1jHFgwDXDŰMS΋!Vs~˲_Ybt|[=nmOf \&i\F;W.b]sg uaRhȃFS]0V~E|kgANЇlRuُg0~VE.9os;=JQxB  9̨:o;S{"aUg=lU,iEF.bMشTuuwL'J~O3BUL2"yLABl1Մ?{4OdLpJ1F?$$vh)_7I_2#ue4 m UdY^;fKAȊ!Py&0TY0$ӆ$՛G+>Eo&<,W oɶ7_!d4Ë!V v~@kinCL^w".Cb,J6[x烤U0tNbSttu~_&8tZ"U{#$u*M{+@XOvx~%"%YKv8'2Š,Ftoe;tԓdX`shq??sΝG6agSo@@bXx,޾vgc%{3&Hi '-Õ[OwLzw;{Y'Wv}_,]X'bzfjYsxO28n(W/N_ۃ`LautW0`] \>k|da:ךBbѕ C;HOޗSi7/ٟ̑6ҿww}Y+/4>im&jF[_Ͷ XigGgJ7pJg m"]~c0PR ˿Bj5~-ZD2Tɮy?fJރRnsuϟ`+<(hO/5q7ray-OL,!)rvHVs_$8af/NZg;(X,#!{ 0<(ggxA_ n=SibDzTMRTwEV. c+VgHp3fgb~7>KxGU[!4?9])>c.*IJZa)$3ݢnRase{*$/@61N?QV*T"VԻCE[ɹ6W?ORk,iиp{6t뮍NRA>z?xrؚF;? ZyL?R$Q\A]ZB)-vsKݒ]a_XB>rr]zDB%ۼ&N!ў]I; W2z`9,sJԜq/L/?f] *+)K݃K*-6#c $rZ;4Rߝ_ܠxzXfح p> cA'G)f=f,gK, ˻%'V%d[d|J7}p<ݧw[=&}P/WEX r Cًx>_oڝnO)sy\]+p ǃ*p  CNԫV`j%i(ݲ?0_"\SE03 Iq[]=ƣ` ͬ歜,׺Jg|WףIJ@zw);H*mot2'5Y~:^_[27i&#<Iluv.:,xiX,t#h]z__N_|Nlq&qߧzXglY&>@B["JRU8>:>$)h2焒c.q~nPb%IUAߤɴX}dI~H]ILVU؃ CEO0o4Y {՝.LӽJ m`6;Lc"kf6>t\5LsY͢WS VmKzvKϽ=_;Z[ 7i܍m$#%흰KXd}%?GSzDOyO\*S40lfBM§o}PN Kcbͣz :\,wSEv ؠ0Z=5fߎy-bѶ~=$FtcLwש92Z׽PD>F%f6σIAS)~u(yWjMi'- 洔3ȐIt!4pY5q zؼ&3*̸*鏲 [ u'H0 ="D 㭻: ^7V􀰀5b8z8=Fgˑ̡tZb⤌ uݰכEips 86Gg ;/-_L ^ szDzh #d/AFBJdhw;\V_L,Hٜ$؂fK%эthNK7lMX!cwt0>rwL4<0fĽ1yE'Չk|́ZK빴Ï!WrnMAD\b"_W=9ť8D&'D=|NciO̼ZyU ,)P" ԯ7fM>cȁ%`uhA陯$w'BN#ZyȤ k[gEC-fMaɞvČ]NU65'IJCeupi`ʮyN)]bRpfϥg߲ϻ^юLtwOFwqWqFc6Ǟ|wH~viS b- Rp۰7T#bmBw ._xjF3h-tVyġ>8p%SHڥ{wd4[o"{ksf955G!09$Y^eWyA^G/J`XU \Q%̶48_x솺_α|z1\Lೆ\AG_Yo蚶à/jxoF3:`Ȳ akDz1r]*%?a64¯K}sAIowAlwOgduK%tH"wuV36<5maȺ׼AoI愞?QpYJqG܃x D! .[Cb?}b$OI hr1S_k"/r fHDw:I69Bf9ϕH% [W2[&+nNi&BoIP  p9j64||@"9O.VSAPD }zGwS^'g>#xuale]֢x5ćb/sV;q|xĂɁ7u>L6x`u8pe.f>P>$dY~d#eE"o13HΦ֬ٙQNh1ML'u9i2Z],PNqO_7ouVyS뮷qo=, rc;D?P]ϛЮ `)`Х|*ށ۵݈@>ۺe͈JȪ6.֍\u=o_Y0F ZXܟ}-3^yB֞lf<CLXJ24Zd'N[]=}=!G"_lcK,&R@q 1EdPhdYD_[V{Q< 4 ^]35'>H,zFsIykWx"NE^6-AuBbKbHAd9x㗄(J}dB2Ɋ2s&ҵZ~MRZ2cHIea=NIdvRnu@͞yrz'3FTLb?-}ao.E )‘yTZ}Z~0e1ld)D U"[|$,d|H #2lm !^7=pCwy>5?|^q (qbY+UY6kh;OC?ikigɃfmꋇl΅n' ~x7]EN0@f!}RVK6nB&@Xq3Ky&=E%/E7|'a[د;P%^' &'%TR0z$փh7v&SgϾDP^{CzMnL 6wGv9j`[:l8{Db$7a'>!+`,roT 5V$GjyWb{@<ՍL?qv21Jv-i4DcG[ $z h" \ihPJgFCoix Ih&Ws謖x7[R>=aCiXD/cP?W~fWuPD~# g ݖj\mCη&֡ 8<'ni>kJ}Q_CF;mlNdPI%ObQ$ 0LW-S9'S"CB5֑iR3gO  |@@U0l%|12!1f{x=U-{OǑWUzL#{q]u'[<%ЊfP?>"^/[85[[fn?9~ Bp9jf-)<+p!fPFR%!TUQmĥ x^Gƀ$*f*T pu%_r1xo2GkpCrϥZѵ/ߺO$Ruɒrӳ?xܚg?$l0P=%my&ݰϪ_)ΑL;P ќA5"v^ 7<̪PAQ|?dy\EZ[`LPIA9]t>Hn˅nMJ;:p.Ms. +znwk/s|;]1NG!{Ա1&.{٬э`!J<ünϐOVV].?šך)d+ZUOZq:h%OkF@}a.wj_gWGmRI{y -]"Yv5=.tݮ(;u류;k*Y>te-5yϤrKջM}^Yt aI ~w\qYоv{K!Po+PĽEȉy}ITҨX &%nf }(ξY#,Nt 3~@{H:3bD{'hAaqa5wֆ1-sswfƧz}+v9[.ƸKk\P,7Uvan8kΖO94{;Xc([-,3]rE=Q"߉î{bP5~5;Y,oCebŠeFsn2u'Tgq;h`픧1dACaiGjk;fdz_m}xrnwrQ1ǨJ ƹu<#~{`؜rhSl ߆w[imCoQ?y}h>Nո,%N6: ß@"YS01 eLpA.`Zj[:aXF8Q]x3&ъʙ U.ҜEzP2}~c {)-s;BY@B/}x$x@J ;P*bfԷ?dV ~WQ2lNf/!\M!fW=+o+?;UE"B8`s,i)y*r{9%S0[|X {ǤnmuXפ_}"t`S<O3̿E>IAOn~<}XBAXtw4v$&h}Z,_gK~4ri7'^hnVCBmѱl]ԭ]bJ)]h尦&?䳧)F6똤Ͼ)tLɥXG%HeY< T@ty0uS|44*k9n^ltPB*I;m@@Jts ˿F9ڑ+P8rU \k)%to/"RS4E綖}k>b|BaZZltUz(bYƂ-E( ts8y kݔM{ZVqp:%A/EP洽!ͣ"۽zmR]Vr ;Ԍa)|ntr,'<sTIHC%ee2LJoҗ~%zdstgOFAN䣲6ztr\խNg~ɚ&* uG8(t,{y1lѦ֓Fa5ϰ0*eP )IbarB `2afH .li+<ID=ZN b- d47p^WR$oVC.lR{$O%)gH2Y,y/_fiְ0Ìuнwl+_*{8\ j}"kX42W:CORb$ 5JԌʜs&X 2CY$r6k.c8-Pil>{G01K'uݾ$2D?~՛#_>}VaX]_( ijK+(]xӲķe{nP({R&-cyq;탢:5QܐpD%db;F$=NuR VNv8}>nj Q~\5?NiűE4T`WdO3U-\O2`ǘl{BT^~r-@TU=;~i!d샶uy3臃NiLοvd\ⰼc[ltX̵*` ~UؠIdp+^ 5сqm$mu/ ׻nbe|=]*@"CQDi=ӊfvz.Qz_{:лD:>r (9,&U,xJKL%''34j=,G&Iomb}EHSxI/;2dGgϨYA?W (@Q5eͮx؈o=DdعC}('&.칩E=Xڎo6<еoCeEx3TC7d> *HGO'[80+<$VzI%4JP?AwGN Q\Hkm|Q*^O}T`x d/0 ߄TfBf b>*ϟJ{a'fvH{JO{{yZ/-Ό޲jA *ȨH9/D]vODα%"C4e½>uKj  5}drT+:7=_P!Ɋ+[P˾/.J,N뫡b?)N4DʄӒ@dUY,e>RaСC8(fӸ,H(0)G4Œ "xUWbB/չx:TڻP,^cNڍX4+-3StOͼϏDGW&h2,km_=s}Mk1dN~qm}B/Y* , lpdS(gLB\xah(xxc!7sT| U!i|.k`U>l:K<5woϾ*_e,5̒+~T4Ȳ\qq؟qaצXLD!WbP@>3<:'d w`DzyEる\&ȢsꄳQlx{CXO*.ib b+"}sOx鬖Y#/J&,[uDgz8"Oc|2<3k" `JK3~b>)J7(;k[6ׂHD[J.VDuas06P{cÏ:lU=ᡪ;` P1Dzsr~1*YYez#Jۖ맰%1CQ(15XNֱhԟv?A}} B)C)1~;Sr25xKd}H$c#Q>˜'K8c-_ iEɯ_=v=_YM7. >i76;׈LF#)=n\XK/*8*\ s4Ϟg`DzbQIN-IY!WL^`h ',#\ptk;qsqqE~0aHtV`7Ldh)P7jm;rw`;nvZ93ՕIgb?`1ӽpnjX#dEZ1~PY9$$qXBa6ʪuxu$B#{%sTPBS-r4y$=Def zO٣|B?ӭ&N. […v} %tEylj<#a\327~ ~ 4Dc5a7?o VAߋ8.0`' ¯镯Ϸ%ǝ3pG-i1f= BAg i;s7zVs[vC|: } Y)cA/|圤v7Yakx?'ᩬAR|tbNs4Wua/XR *)?=)`D5fb"\Qq({qtV9w?/B+~G3: Fq8{w8\lkEzsÜniJ6x/:Ǽtu}oJW+)lz<Zz ]I:}19o*W-SL]$>֑RZSӇc(Vž3&ثte|s@xi>%6l]&`orsqގ.@.I.1mZ}SMWfpI &fYL6JŠ0uf _sn94*eu`t[3'#xoM4qܙZ#dshI&EӾSÓ({-ٽx˦[& q((DDDU&>ɽO]'ؚ%Ѷ,RO@S'8 >(Rf?psj`.2ϓ?3Gr;,I2"GӿℿXlmfwW+}5TKKɦכ4$ѕ$@'~|Vv`,,Va/JI~y}i.~,\ _͛W}̆_2x.yt2g"hxŪ8;iPv}7aSul։p0lb(r8 DZ^%hiJWwZí E@kU\2x7U0r\$5sqII(c950woPb5x B͑;9z(Kv +X%QQvC!^g0ULk/Ĥ/Xajj U2e^$КMP!ʆ)yWS:J2]6 } ɣ (3/6Pݡ$ʟ,Ge]wg?6t'Koi51pV& =Roy,.ѯYtSZƸ^ EoBXwѕ²pٿ*(@e%⹚7縺I˺bQ>񛁰ҀxI2+W& YMc?DPW+Q$I(dr Yp{zCP\y GK1@p팛GI5i|ݘV^oVQ8fjr40 cӥEw} f&vE@NMkT`lxm3=,Y&r?8YSs_KHx4$98*oy>i;CGi똞7 }*e[/1. !XX$еfaz{/]a!\[z(<1Kmm^Qd)I(>4fS&mǶ =FeAP瞼Ho{~- o,F `K?),(!AӔiԟ5$C-e jÆ7m<ǎw`G6J*TaUFas~/a%]<=n2eafaL-dY|rjU/{xGE8#Am7g?Wk8FB.XzgcGJmoWLR%+eRWxkSlfҘu*<*B1]f),D3aPINu`"nH @!,'&p[f8+=?M(L}p6S-ᝢg+#hb|4t;)Yߵ%W˛pU(V/oĭIbFau%yHudދpW+av珋vO1?t 솈O-gCa`Ƒ=DD=ȍ hD5:X\vvo@/z^$q/krTٱ\;S4Yv̏ޙ?k^OIrDk;ϭ/3oз. Nuv.[˻ =P`SC3CD8J2252#]q I b1H&Va ,04C I Iu5S:'8CСnV +HQ@-R*g(7O>-RT{M>T?}N 7$A ex_ԡp<)M `DhRB"2%Aٱ?d&NM b:z}M;|I;7ȤutdU}o$υvRk+e/k6FkqՏd?dD]`@u:hӔkBg[IPe =\JWu3;f_b[-=:& 6>KW+|7t7jvddSX_aD>\}̷&\|2ëͶVCϨ{(+>!t^e$ߌB^zˣN|1t{s5a)VtkhzyvB7%5 NelE -Gg r[BFb7Z"%+%РN}{zXSLj)1!6e1lsxOW0E7Wb9^dxNMK]ʄK1*c*{_RQi!7sWD,aE 91 m’`LmhDhv"QVչcO=o%V6T Ϣ ġ2`q ~=􍖹]NbR%Ll0bg6RwJ(6mh}md論V/<QEK[q|QhLak`l|Rj8Do|o)oBqi} R(5/epRa8b@!ѯУ(XzdbfH-ROQ?KN[Åg̱\7PILOn~MГ V uü=•,\yF'Ǽ]n(C sW׌tv10C;%QؽQّutwUQ5%s+rP  J&ݱϠVsGAkdF,r0}@ whE~'/dЈgN@=X 6QiF$p}LRpZgԖAC5u 6/W|5V%Ӿ3 qIg͋V؜?Pb˸c=;T޷9a5c0޹xx۶7"k8xXm8,,"c%W)vƩjm{(K8Rn`~*L G|NP]t\pJ`%ܪ5'JOj\}Uw&E/?&'>֖7/~fo8˻=n1#s\-7F>Tws19N}<gs){ plPI&,TҩG痁O" & (p+p~szN3Lh Gi񩼗a:)ƚO^;-PPfHaΔLy1aˢ*B% p,S:?xJŪBAb#D:Sc?q>4Ey!P\VQyY|Ru^l(}DWeh0ҟר_c Bă:W+~l3z u=D!n2}roL՟*cT%qt4]Νk 7@ KFx1kWl)2"QP}5c//JzOy/8sz-y~4WJS'YC1\Z/QfҢ(W.,fdh\o0+_OF+y9_ܨUg8n2 K\< t1 oQ$rmjjsBgRW'DwDtJӉV}n(QNI|< <99:f v|:M|d6+MNVpsu~e[.p,t4p)x$S|b۰:CǞgFYMȼ+83:!n a'ؼVs)hMOr1sSޜ-ΑyN0PA(J [c0 3TG5bП`HXn$Ŀ5i KQ@oV]d :3̶: ϧ}: ֧SP 6ӧ{3T&Ls!CI/Ș2`a#K 4un+:5kCW~ m]9_숳lISC( ٰIOJɏLP\ ,EIIJ폝?aڤl ?`rg};|* (*rY]Uj'bݵJ92sᠿ̠[|v"I6е5ޘCyi4_ַr>d@MhBKU]|5 XeL4/rܸkޤu鎒"EmI炱.񵩁j\9‹;e@Al_^״5P:Z(Y>SL-5g^r0->S–Fݚ7=練FA%._S9 Z4vmRxPz i0) g䪎2uOz~ S;woC7&)m1^Xt}{fMq7cM7W9αr;Ge?$ jaxH&t:kvLdyS;3\nxsVxC6{f=۾^;wtmouB:-bdIűD z:< j&%A-aHoN 8Z$]7 smaKxoq[ 땑2&W$XJ##H_J Flrw0Nx`ϏVOlI!xGxIPN7v6A)kŵ7 * Mm(0v%.ӥ`b{=Ѝ )s9cnfXϫZ0|@KmT"5!tz[ꭌ >cdž AfHɾ,r{Ұ]sc]遑ꬊᣐ.OJ|H//Kb=폳z3hI58!AcmFCQcԞl/ӛeCiYA9Z  9YB+{ϻ67a$R_rTsAi p/m­ l3[G=w5V[:>duXܧbqu3&rx˅{3䭞8p)a=ePQy,Gr\jM=DUu+_Zb{V-:,Cʹ XJǹrlW"=WX׌=w c8 $`Rn/b?2OJxYDYb9+TI܎Z!J:6Nǀq|Or X!ZK{B'i;3a)p7. q%F^PvT< g%Xj'J_P><&j^G_X1Am8YeY=u2+eݵ-e=5YX4?d9;;GٝqȜ$a;tnw]]ٮUb1"Oq<'ᛘe/H{y1{t4xX\jV̹qҮv&#AlP@))E ޭ}8R!L>x3*pW:m *hF=Ա!hR<@:x-Okm6@8MjIGX~Jv8YwЉ5O:]^s۟'+_&]H~l} UwfѲvwdu:Gɳ\ޯӜǔ8: sl?+Ⓟ#妆#0I/7./F`c8> qEQUQ9JyO@$* Z +i;gWM+io* 0C$H,VG3c%&rO$86Hl;FNb2ÒX4װGw| +#DWLW YUi*7NDwl p[+n4&|Pjmmv}2j|!s zubZir2_CdQ'>.(bq/[HC3şн_: VH~KT @WJd\{8lQm4Em-`eVY*-/:?L;R @bEH߻߈&℡̢DˆT@va4(bSP=^Tڞ|*p}͉!q3Ã6'8QIA:>+?.H~IOSyXK0H]去ЙcDҍA0;`T}|Qb:iF6Zڻ &iK'3B^ƧMq Bfr0|N VmᖕA|SZ.;\n Z}UϫghDk$Y|(eMD'rc2g/'a^'0ΐ})]uz&X*z/]=AB%?X;'x~>Fɯ/ PsL5q]$جFJ?e@>'Vc?G&>[U:mc.?)SYp3C#)]Co[8 l_s@H>sQ2{;Qsϭpl7hH 1]"d3b [=d/W^,Q?ѱ6A_]^D9|`7Da ~ CL>{pXpkH;2` ؅cψw[VTkܩ+ Kh_h-j$GjZ=uDWZU/ɩ ˙—MZi8$ 5G8խG .;uGRF,LIZ5@I݋N)iW$ǜ$_3Ӧ/?^t^1m뾻#&,܁i4Q"X]8*}QӠ'>$w)Qf/WqP_lԜUfP}Ol8=%>MiE%ؕh\,if6*EߊͰOꆳm?@O,}:Q6`d/a纐~~>YsoᗨFb4ĥIq-|􆓁_ Oјe5t1X-nga?hH 6͢8ao_Қ(siTQ7B4-!ה٥ˊiu"./| u.]\]yuZe*s(*.2!T{*@ɧGq3h͵.*b4-6T0hˮ>_;xqdTAԏC7Pɢ]V:$ꙍG3R)3hm"&ķp@n  d";{v?Yޅ џ<=v,;~!UP._֞ڴP~;*-x~=9/Vn]H*2; _Q J^z$"z iNg&-sHn-F <:0nd/XG|3`M$@/gߊ>A|F~7wT eҸB,-o׃jfqraA$2舖x.. mwhP<*sJ۔;q~OS.W*ݘfsl6[K3]6h1p9}> .D >sUX_cZo"!xòY N;DDNo%!vkŮvE9ٗsUcA7{E bȚ4jDv5ΟG(~s5KUjCtԢ D(Wsz1`:C?Jp W"xQ"NU}8ŚpAuzH{'XڧT = iq`¾|R%K L}qח%V"b|V^4ogm?/~DXs4 !2Z۾0ǫJ\V}_gX|"µ Qk,|5 t,g3dG n=aLTD\דtˀ&⁠q7F?e/QڭNL_D=lAS~yw4nMle5ַ ])WY]PIO]1THr:s^(%OەR,G y;*y+˟.NM$6{YL]f'5+ĞCs& pdVy]\l& Be,JH瞧ð !ȏڸ ;?UPW Gzo2_(g,"/2oYNg(OR"JNVG[ՓEUw$gsޣ{8ajF MnFxh6 5~Iv[M2o% m9Vd@$EAPeba-GX/Xw'|fYylZ 5Yt7KjZLuFʷ 2??烽5krT8j^4MQm,fJ.@]߲BnSjK.J}au=<]9T1\tgԷ"~̉m"Av\qޗ|mBerZxVrjBMG*58\F]zf04JM^$[ <#wr=>?NZq(=7iNӁ!q+-}).ۃIdǨn{WKTkP0wrǑP3ϪspFhL"Җ"C`ᱹ9OiI88q?~]|N NlTD x<}!8ZP~s !Ee^^;n.GABi˸G׾ҮD[)lY%\sv72'%ڮУ]nkn2~2tse ΍nx'7S슯TKEuQ5Sxzgӝ8{ݛ8ԸC5)k?..[*$-Yqng0E;>cAy +<7^Egt΍oW/ZlxjɜKUdx .2$oy*XvJR˶𠄾=8]zC/tlV^bo׸yS^tЯj[mHrpwANƙ:|Ԍ㈜8 8 %ɘx ptlB>S'mp!TeaksٮgRyOE,oQZ^esh!;ԦY(J7dޖr}-LJ0NeUPqxQ%W `-rp^WcYx'uknS#y%^04uBlz٬GkZ"5aߧ:0蠀~a&cP8G٣>bsVVy%@F 8MDcs -w7ͺ]+M Dߜ?ŧ}D2pj |FdP1OowQ!ktۺ:^t]29sj+6F^:zˤ7F2NS\~ؾկcsƳ~\9:'4t96?{]:J…m*|J6.`떚Gv$82,R jlp Bs,1G,be$A|<0Xɲ8VHD {Ӽ?Q4,Zr蛱d?^Wgp!_88{Čs6Olr/r5m/A~ͣ:~Too\ţ4[U (%鹡`F'{KfO2 KPHH5KK~PyW}|{ VӶNRO2 u%>.eC;hl>fؼ3⯣U \Uf%,b+y͈^1RLfG'M^2TJ8 ƘQL}d l,DYAFqs ęJ̥~}DZR~*C~,ҒXY- u%N)f&e<n(^8=QȣɉO8,sρ(nV -S{w j[^$i"{Dq-D$(O@J;?-"fO1?lRaؑJ.fDOb 4S7vCMA| {z$u>8WCX36C(*q^TS$+P3Ñ\K.G{ #ϗGЏT﷉LUo_X'SpZ}97E5w5ydz /5HNgq f36-Tm&@{Mut_Ǧ/nC~`Z܁91 ,0YXَ$/de,B.-Vro>Tǽ LZIɝ/`:[dܰs 9<_ 9xEmz2uF1"ޜR^bkc!"P S{IZ.<7Gay _nI͉m9*50-?dY^o l6J<+Zu3x~Mw]?~gl ?]?oPv'd|ά),d`e[Yil SPXQv?+:. ̎x'~L|X7,۽ T<>8$Q>8L%qJXTf,6G5/Y;$aߋx9Fv/lWPdz )b`NfyzwBߊ6u(٤M7}EB@T:&aȝmz:Tqͫ̾z[>"14+`L)+4'n9 Q~wi$"Ɖ8bKM&Mwsځbm勆}3BI Jy@Ӑ-팬<(X8 MtL=wO1jXֻ:G +JbP/n͵Cod]N^Vs! H8)p'k5VFMaOGG-Q⬳4Q0~BMNK ] ڠy&:,tAj3O/ku-18h/nG,HW' aZuĵZ.ƴ.nAĬ ㎏:IS5/Mܓ?={2).CF ɸQlrq$VBi2_/w@{Du@.mm1;V?CoW~;/~(6۟Zwٻ 2AMYкiugBew[OR>.}_~2a҅yخ[K \Ppozd}]X6YKl%4@-5\Ӵ SNb_s<ܲ%$T[mͨ1F̻+́x.nTsUP8/ֽ+",zQ\EK ɻ9)'Ul߰Yt G/HdF=YMN-ќ˰4n*@aݒn+q)~ g MscrX짽"Z)~r޸p+b`KGt?pguT:B"e8$o\oit*|KHΉLapx*ư2 ,r&ҩ߳, aQO`ȟ/շNꖾv :{ 80q Ǹ_{?hy 7<|-2a;՛pguM!z1 WSeR)_T7x.DI©hŢʨƩ${neHMA2UU>j8Gvqސ9z]7k͓D QV ̶c:z̻1d 8=ze?;0E~̋g] ž??j)Z뫋|**ĊJxJ4XxťtP|T9m㼢DņA=61!2~'"}*摨TOqwO![>>vM]>ۻidEBYmJ)Z|}YGhc;[E;FM s1NkRP"NM~{:7YTN.4#ݝ]#5Kp8|Yi6{h~)K`9"$Oy 輁mمKY5BO@%k.]sN;}릶6Ld$,{HڿFLA?^gF>֣s\_;&kKjZȞ@3k 1 ; 'ҍ~mt)ʜ?9,SoEw΂jW@D[ޗ["EP*P[ X:9^3)W54dt4&h]8#/I"IM'-Q!EQ%/}yfKZXz8K!iL_G`! 'U|6VcFc&i~o"!(%n8z&C/54ri HHVD='V:qsҏ yyb^f/ȵg<Qx񎛟=4>9IT\V$7yl)[iifoI5 7~.v)Qh#h[ƈBe" XGIᨔ H*7N +M`L#RVJXiV$crN90"v`㸛+Q'(Dw=|NY;dy=#,:>&ІkTb.xSt~s̋] Y %P- ̞%]'돑]DpvSul>_U,Rn鎉$BsO˧zqć8?kljW&Т!QXфK r8a =P5o䄟 )uYSZȳGL3TZ}pgKy5a>Uiq*1̗UDD Xb%È??e\OnM- Z?{p.#O_c9\p"+ ~!K_^xÔ-ցa ql|iv",i3/U qW+lF@ѰC%;FS!Θ~Z+ZF\bž9/oY@bƿᄇ/Bʾ ƾ!}Hya$ׂHK9VrT`s--J򌸺gG2FtgHԞ2=ŝ"uUv R==O\r&`ӂϒ-tS)5 vL@f :{쀏0v,b<}V ׈M&/'?ISC{1|$i{eAxW(z7,_e5^+8c93aɹO#d!KEY8ױ=$ FoE2+dԫ*-tc3 ~;xI&3bcCOW۶P3+zC객]@t =ьGW Z0шc.2"Pَ '.,bՀ\Q1B a\iV%g ~At 6KLW>EG2e9FP(^nEVa8Gq>Yg{LSvJ Is%+ XJ+ehh q!*JmWl˼tq"?_61KQVcƇvONcH:v~z뭸{wj8%^dԺUմ d3g1L#D*@9e({h+D4O p1ufl6M< 4mWa2ee8HNtI@LgmAj3L_'ڐn9:y{9=J$mL57vqXu*=oU+nI]iNL@jEto`+~°e-w!a49jxżͥ[Q'3gZe5,KpRQh+xdWa'/TX  Ogmk}sVqt{!NhxϣYJ}8k#Va5.\ k73SP~7!j.8D ;g0FA/UOY'heƀS*%bA ps$<;csc$_Bl>a=YGŶ552%zݾLfII鴱Hޓ+Q&ky#c6;םLnO~ lȼԖ0l,5Q {4]B=W j0x376 ݊7,\c =2u=XHK'"K҆@dT.AOZvN>J>MNZy 1pq5pMLeri?Mg1Ə$ǀ/hy:Kb,L>$(l %2^ڒ/C4#Q{ߪYS]\ۊU ,h3pTهJ(Ɲ1Pѱ݂Ѯ\J{GJeA>NId&1JOuVQ<3mM{XBqgeZ'9;*$\_7W~K+\ҷr\ci5;N+_iv\c`m͙  ~E/.NAן?K 읔;F&Sx$s]s Xbުڦ'd"S- K'KHR%UEg*@ #ݎF3\"A>% LJD%?H"XE?:_gǺ40"˴Rw 981j30ФCNakw֞OG٩(w]Թ=)JS[[YAgӒaW&O%ǏgݞЏz!}w$(p֋\<rŽ2_K~n.c =9ŖzN*+F/q3LeLJ?ޣQl+77o ^r9ʼy9'b8{0y$)w)2AA/gz2}/R7JI0),xJPJo/ ɧ['Ad|پU)&[".P Y٩Q6J:tZ.Go Vw[vw]).yGF?c#|nHļΌ߭o#C>ag=v[} [cCwAvWUSrdvw j*^׽ ]h::\ X1)V_Z[~ŜF9`"F͎O5}LTq.1˽sQa,NpF~2ۿҜwy&UGOSz{FPK-x+%-g'MāeQ~ pz%@{ܱôbj@c}z|bQ@˳/묁 D%&503<:LngG\Pgx)Q)e_\]$ewRWxמρLѼ$`>ZW 9EhFS3Re}eDJӁ ZBsx6$ y''B-` څ ^h%0|᯵:@o_j5cP;65}VCاU} %}uH))Wi(> wkfR oA!|tz2qs:2atOݐ"BMxvA$P9Xe/-o_~eOO _'AH~9gi:Aƿ{|׷L+>:oT޻}L6g"֮Z)??=Lm*שݼQȏ@=pn%$m4h= _A@/G2Rf)x2'ÐkX)^+z^ߒ|'=-.lR_qYi1:_ol+k"Rt_Vk\1_K] ¯ׁL\ޭzgJ៛5#>!`%tTީ@)E1n&M_rGQiV&?ۮMAv:HP0 LIGc]p!T ՐiV׭17$BzxO_3x~;{ ո2+Oy$%0tJ؏.7LߤVRUx?J2V?.teW/ǨsoAA)_C=2_pA1?fxmJh3RKV?VJ 73}gAwP-p<趾`>-?%KbsB3D@,@,ݘU১Sȟ8YC(S/iNՊ ؋!??;ki=u>)#+zK8͸qdKA߲G~ #ϒ0PXJ_c@^|jN~qXFh_į9IC$q˪%MڂV0]ooݞuKk |S ,.q7?@  tʾG5uo!ezIs+i 6 mU慕2 /B7R9?o/HMxJ%|=5GD*~닀Я=SOPzCn=H:OEԩ+Yz ٷǤ *(` pJt@wcG@ր ^#TB:[qT~ 0R洬r#gȷ}> M,F^?l:| <ލ}X&scڴ2XQUISSvWA&>RZͱywDWVE/]C|l)khף$wBLeCA^KRI#ɩ䊁yqŽ+Oe<Ӏ߉j.갈Hoy4e'H[Ot4.HN30ηtM:rydAQVT\||ڨ*:;Ӊ2D_e$%%ze%;I#LRo9u|HGl];E5)^HG(|GwF]:0pb gMC1[)oC܅b-0_joEeAn(-*Yxz:9_A%^3FhGك}d F`ř>4_!}bW Txхx'<\\H|ЉA}yPbALim,8,CP;]Yհ!-킁!6X'>6ar*IMGes ivoiDXֽa f ϘI(DKj3z*!E;;XHe:$ͤ1urkG]g9+f;k5yxY_ƒę+3Ŵ1, Mf=ͳ{| 6Ưw,y:Q! LEi>1^ eD"$Vr^I 5|fND.eЮ5/͇@1Nr ݀IT]v`\wtj vSi>}ؖ$uflC3`rRkdËd*WU>npX߉;S )j`0'yRks4}"EG\^(tƽz~Z.1㓯Fwd ?@u\#F7g= nE5x(1zehOn*s gm<^r|t6BƂ#˵^C_|zC4nv&fTq2kIڼM0èiڔ?P!RꆃhLQG9r 0Nn),ƞM|w:)4MgG:Hgjm4O`abMtu$Pig HKK<{]Y- -CG=Z?t9^Qu)ɶ2Z9=-3bR~#+cgDPӍl6H/.7{\RtB?^$#ID=A%KM.8Dl"+ww4fh4+ХX z&hf9 QY3/"^jhVK49/sgj|IrZ }Fe˔='0QVTXCvn[xOo 1\oÈa dy }?5v{1J<2*c75q'*Sr#t