From 55aacaf4b07c1921061245cbaa3d307e97cf3c29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Jun 2023 22:20:16 +0100 Subject: [PATCH] [chore]: Bump github.com/gin-gonic/gin from 1.9.0 to 1.9.1 (#1855) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 14 +- go.sum | 27 +- .../bytedance/sonic/INTRODUCTION.md | 48 - vendor/github.com/bytedance/sonic/README.md | 25 +- .../bytedance/sonic/README_ZH_CN.md | 382 + vendor/github.com/bytedance/sonic/api.go | 5 +- .../bytedance/sonic/ast/api_amd64.go | 29 +- .../bytedance/sonic/ast/api_compat.go | 38 +- .../github.com/bytedance/sonic/ast/decode.go | 161 +- vendor/github.com/bytedance/sonic/ast/node.go | 16 +- .../github.com/bytedance/sonic/ast/parser.go | 4 +- .../bytedance/sonic/bench-large.png | Bin 87463 -> 0 bytes .../bytedance/sonic/bench-small.png | Bin 87635 -> 0 bytes .../bytedance/sonic/decoder/decoder_amd64.go | 66 + .../bytedance/sonic/decoder/decoder_compat.go | 196 + .../bytedance/sonic/encoder/encoder_amd64.go | 108 + .../bytedance/sonic/encoder/encoder_compat.go | 234 + .../sonic/{ => internal}/decoder/asm.s | 0 .../decoder/assembler_amd64_go116.go | 82 +- .../decoder/assembler_amd64_go117.go | 84 +- .../sonic/{ => internal}/decoder/compiler.go | 51 +- .../sonic/{ => internal}/decoder/debug.go | 0 .../sonic/{ => internal}/decoder/decoder.go | 12 +- .../sonic/{ => internal}/decoder/errors.go | 0 .../decoder/generic_amd64_go116.go | 0 .../decoder/generic_amd64_go117.go | 0 .../decoder/generic_amd64_go117_test.s | 0 .../decoder/generic_amd64_test.s | 0 .../sonic/{ => internal}/decoder/pools.go | 2 +- .../{ => internal}/decoder/primitives.go | 0 .../sonic/{ => internal}/decoder/stream.go | 12 +- .../{ => internal}/decoder/stubs_go115.go | 0 .../{ => internal}/decoder/stubs_go120.go | 0 .../sonic/{ => internal}/decoder/types.go | 0 .../sonic/{ => internal}/decoder/utils.go | 0 .../sonic/{ => internal}/encoder/asm.s | 0 .../encoder/assembler_amd64_go116.go | 3 +- .../encoder/assembler_amd64_go117.go | 3 +- .../sonic/{ => internal}/encoder/compiler.go | 0 .../{ => internal}/encoder/debug_go116.go | 0 .../{ => internal}/encoder/debug_go117.go | 0 .../sonic/{ => internal}/encoder/encoder.go | 49 +- .../sonic/{ => internal}/encoder/errors.go | 0 .../sonic/{ => internal}/encoder/mapiter.go | 0 .../sonic/{ => internal}/encoder/pools.go | 5 +- .../{ => internal}/encoder/primitives.go | 0 .../sonic/{ => internal}/encoder/sort.go | 0 .../sonic/{ => internal}/encoder/stream.go | 2 +- .../{ => internal}/encoder/stubs_go116.go | 0 .../{ => internal}/encoder/stubs_go117.go | 0 .../{ => internal}/encoder/stubs_go120.go | 0 .../sonic/{ => internal}/encoder/types.go | 0 .../sonic/{ => internal}/encoder/utils.go | 0 .../sonic/internal/jit/assembler_amd64.go | 12 + .../sonic/internal/native/avx/native_amd64.go | 2 +- .../sonic/internal/native/avx/native_amd64.s | 16296 +++++++-------- .../internal/native/avx/native_subr_amd64.go | 62 +- .../internal/native/avx2/native_amd64.go | 2 +- .../sonic/internal/native/avx2/native_amd64.s | 17139 ++++++++-------- .../internal/native/avx2/native_subr_amd64.go | 74 +- .../sonic/internal/native/dispatch_amd64.go | 2 +- .../sonic/internal/native/dispatch_amd64.s | 2 +- .../sonic/internal/native/native_amd64.tmpl | 2 +- .../sonic/internal/native/sse/native_amd64.go | 2 +- .../sonic/internal/native/sse/native_amd64.s | 16227 ++++++++------- .../internal/native/sse/native_subr_amd64.go | 62 +- .../sonic/internal/native/types/types.go | 4 + .../sonic/internal/resolver/resolver.go | 2 +- .../bytedance/sonic/internal/rt/fastmem.go | 1 - .../bytedance/sonic/internal/rt/fastvalue.go | 15 +- .../bytedance/sonic/internal/rt/stackmap.go | 1 + .../bytedance/sonic/introduction-1.png | Bin 57447 -> 0 bytes .../bytedance/sonic/introduction-2.png | Bin 68075 -> 0 bytes .../bytedance/sonic/loader/funcdata_go115.go | 176 +- .../bytedance/sonic/loader/funcdata_go116.go | 549 + .../bytedance/sonic/loader/loader_go115.go | 9 +- .../{loader_go118.go => loader_go116.go} | 4 +- .../bytedance/sonic/loader/stubs.go | 13 +- .../bytedance/sonic/option/option.go | 8 + .../bytedance/sonic/other-langs.png | Bin 96490 -> 0 bytes .../bytedance/sonic/unquote/unquote.go | 5 +- vendor/github.com/gin-gonic/gin/.golangci.yml | 19 + vendor/github.com/gin-gonic/gin/CHANGELOG.md | 21 + vendor/github.com/gin-gonic/gin/README.md | 5 +- vendor/github.com/gin-gonic/gin/any.go | 10 - .../github.com/gin-gonic/gin/binding/any.go | 10 - .../gin-gonic/gin/binding/binding.go | 1 - .../gin/binding/binding_nomsgpack.go | 1 - .../github.com/gin-gonic/gin/binding/json.go | 2 +- .../gin-gonic/gin/binding/msgpack.go | 1 - vendor/github.com/gin-gonic/gin/codecov.yml | 5 - vendor/github.com/gin-gonic/gin/context.go | 29 +- .../gin-gonic/gin/context_appengine.go | 1 - vendor/github.com/gin-gonic/gin/debug.go | 4 +- vendor/github.com/gin-gonic/gin/deprecated.go | 2 +- vendor/github.com/gin-gonic/gin/fs.go | 2 +- vendor/github.com/gin-gonic/gin/gin.go | 6 +- .../{bytesconv.go => bytesconv_1.19.go} | 2 + .../gin/internal/bytesconv/bytesconv_1.20.go | 23 + .../gin-gonic/gin/internal/json/go_json.go | 1 - .../gin-gonic/gin/internal/json/json.go | 3 - .../gin-gonic/gin/internal/json/jsoniter.go | 1 - .../gin-gonic/gin/internal/json/sonic.go | 4 - vendor/github.com/gin-gonic/gin/recovery.go | 4 +- vendor/github.com/gin-gonic/gin/render/any.go | 10 - .../gin-gonic/gin/render/msgpack.go | 1 - vendor/github.com/gin-gonic/gin/utils.go | 2 +- vendor/github.com/gin-gonic/gin/version.go | 2 +- vendor/github.com/goccy/go-json/CHANGELOG.md | 32 + .../goccy/go-json/internal/decoder/array.go | 4 +- .../goccy/go-json/internal/decoder/map.go | 2 +- .../goccy/go-json/internal/decoder/struct.go | 54 +- .../goccy/go-json/internal/encoder/code.go | 20 +- .../go-json/internal/encoder/compiler.go | 9 +- .../goccy/go-json/internal/encoder/opcode.go | 83 + .../goccy/go-json/internal/encoder/option.go | 1 + .../go-json/internal/encoder/vm/debug_vm.go | 6 + .../internal/encoder/vm_color_indent/util.go | 7 +- .../internal/encoder/vm_indent/util.go | 7 +- vendor/github.com/goccy/go-json/option.go | 7 + .../github.com/pelletier/go-toml/v2/README.md | 2 +- vendor/github.com/pelletier/go-toml/v2/ci.sh | 2 +- .../pelletier/go-toml/v2/marshaler.go | 28 +- .../pelletier/go-toml/v2/unmarshaler.go | 75 +- .../pelletier/go-toml/v2/unstable/ast.go | 2 +- .../pelletier/go-toml/v2/unstable/parser.go | 134 +- .../pelletier/go-toml/v2/unstable/scanner.go | 1 - vendor/github.com/ugorji/go/codec/README.md | 2 +- vendor/github.com/ugorji/go/codec/decode.go | 2 +- vendor/github.com/ugorji/go/codec/encode.go | 1 + .../ugorji/go/codec/gen-helper.generated.go | 2 +- vendor/github.com/ugorji/go/codec/gen.go | 10 +- vendor/golang.org/x/arch/AUTHORS | 3 - vendor/golang.org/x/arch/CONTRIBUTORS | 3 - vendor/golang.org/x/arch/x86/x86asm/decode.go | 2 +- vendor/golang.org/x/arch/x86/x86asm/plan9x.go | 4 + vendor/golang.org/x/arch/x86/x86asm/tables.go | 3 +- vendor/modules.txt | 18 +- 138 files changed, 27543 insertions(+), 25484 deletions(-) delete mode 100644 vendor/github.com/bytedance/sonic/INTRODUCTION.md create mode 100644 vendor/github.com/bytedance/sonic/README_ZH_CN.md delete mode 100644 vendor/github.com/bytedance/sonic/bench-large.png delete mode 100644 vendor/github.com/bytedance/sonic/bench-small.png create mode 100644 vendor/github.com/bytedance/sonic/decoder/decoder_amd64.go create mode 100644 vendor/github.com/bytedance/sonic/decoder/decoder_compat.go create mode 100644 vendor/github.com/bytedance/sonic/encoder/encoder_amd64.go create mode 100644 vendor/github.com/bytedance/sonic/encoder/encoder_compat.go rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/asm.s (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/assembler_amd64_go116.go (95%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/assembler_amd64_go117.go (95%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/compiler.go (97%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/debug.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/decoder.go (96%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/errors.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/generic_amd64_go116.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/generic_amd64_go117.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/generic_amd64_go117_test.s (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/generic_amd64_test.s (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/pools.go (99%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/primitives.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/stream.go (94%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/stubs_go115.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/stubs_go120.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/types.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/decoder/utils.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/asm.s (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/assembler_amd64_go116.go (99%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/assembler_amd64_go117.go (99%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/compiler.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/debug_go116.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/debug_go117.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/encoder.go (91%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/errors.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/mapiter.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/pools.go (96%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/primitives.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/sort.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/stream.go (98%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/stubs_go116.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/stubs_go117.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/stubs_go120.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/types.go (100%) rename vendor/github.com/bytedance/sonic/{ => internal}/encoder/utils.go (100%) delete mode 100644 vendor/github.com/bytedance/sonic/introduction-1.png delete mode 100644 vendor/github.com/bytedance/sonic/introduction-2.png create mode 100644 vendor/github.com/bytedance/sonic/loader/funcdata_go116.go rename vendor/github.com/bytedance/sonic/loader/{loader_go118.go => loader_go116.go} (98%) delete mode 100644 vendor/github.com/bytedance/sonic/other-langs.png delete mode 100644 vendor/github.com/gin-gonic/gin/any.go delete mode 100644 vendor/github.com/gin-gonic/gin/binding/any.go delete mode 100644 vendor/github.com/gin-gonic/gin/codecov.yml rename vendor/github.com/gin-gonic/gin/internal/bytesconv/{bytesconv.go => bytesconv_1.19.go} (96%) create mode 100644 vendor/github.com/gin-gonic/gin/internal/bytesconv/bytesconv_1.20.go delete mode 100644 vendor/github.com/gin-gonic/gin/render/any.go delete mode 100644 vendor/golang.org/x/arch/AUTHORS delete mode 100644 vendor/golang.org/x/arch/CONTRIBUTORS diff --git a/go.mod b/go.mod index 6bd979989..949421d95 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/gin-contrib/cors v1.4.0 github.com/gin-contrib/gzip v0.0.6 github.com/gin-contrib/sessions v0.0.5 - github.com/gin-gonic/gin v1.9.0 + github.com/gin-gonic/gin v1.9.1 github.com/go-fed/httpsig v1.1.0 github.com/go-playground/form/v4 v4.2.0 github.com/go-playground/validator/v10 v10.14.0 @@ -82,7 +82,7 @@ require ( codeberg.org/gruf/go-maps v1.0.3 // indirect codeberg.org/gruf/go-pools v1.1.0 // indirect github.com/aymerick/douceur v0.2.0 // indirect - github.com/bytedance/sonic v1.8.0 // indirect + github.com/bytedance/sonic v1.9.1 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect github.com/cilium/ebpf v0.9.1 // indirect @@ -108,7 +108,7 @@ require ( github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850 // indirect - github.com/goccy/go-json v0.10.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect github.com/godbus/dbus/v5 v5.0.4 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 // indirect @@ -132,13 +132,13 @@ require ( github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/leodido/go-urn v1.2.4 // indirect github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/minio/md5-simd v1.1.2 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/opencontainers/runtime-spec v1.0.2 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b // indirect @@ -154,7 +154,7 @@ require ( github.com/tdewolff/parse/v2 v2.6.5 // indirect github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.9 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect github.com/uptrace/opentelemetry-go-extra/otelsql v0.1.21 // indirect github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect @@ -162,7 +162,7 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0 // indirect go.opentelemetry.io/otel/metric v0.37.0 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect - golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect + golang.org/x/arch v0.3.0 // indirect golang.org/x/mod v0.10.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/tools v0.6.0 // indirect diff --git a/go.sum b/go.sum index cd78a43d1..66909040f 100644 --- a/go.sum +++ b/go.sum @@ -102,8 +102,8 @@ github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd3 github.com/buckket/go-blurhash v1.1.0 h1:X5M6r0LIvwdvKiUtiNcRL2YlmOfMzYobI3VCKCZc9Do= github.com/buckket/go-blurhash v1.1.0/go.mod h1:aT2iqo5W9vu9GpyoLErKfTHwgODsZp3bQfXjXJUxNb8= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.8.0 h1:ea0Xadu+sHlu7x5O3gKhRpQ1IKiMrSiHttPF0ybECuA= -github.com/bytedance/sonic v1.8.0/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -201,8 +201,8 @@ github.com/gin-contrib/sessions v0.0.5/go.mod h1:vYAuaUPqie3WUSsft6HUlCjlwwoJQs9 github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/gin-gonic/gin v1.9.0 h1:OjyFBKICoexlu99ctXNR2gg+c5pKrKMuyjgARg9qeY8= -github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH89961k= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= @@ -239,8 +239,8 @@ github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850 h1:PSPmmucxGiFBtbQcttHTUc4LQ3P09AW+ldO2qspyKdY= github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= -github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= @@ -440,8 +440,8 @@ github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/microcosm-cc/bluemonday v1.0.24 h1:NGQoPtwGVcbGkKfvyYk1yRqknzBuoMiUrO6R7uFTPlw= github.com/microcosm-cc/bluemonday v1.0.24/go.mod h1:ArQySAMps0790cHSkdPEJ7bGkF2VePWH773hsJNSHf8= @@ -476,8 +476,8 @@ github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/ github.com/orcaman/writerseeker v0.0.0-20200621085525-1d3f536ff85e h1:s2RNOM/IGdY0Y6qfTeUKhDawdHDpK9RGBdx80qN4Ttw= github.com/orcaman/writerseeker v0.0.0-20200621085525-1d3f536ff85e/go.mod h1:nBdnFKj15wFbf94Rwfq4m30eAcyY9V/IyKAGQFtqkW0= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -588,8 +588,8 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= -github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulule/limiter/v3 v3.11.2 h1:P4yOrxoEMJbOTfRJR2OzjL90oflzYPPmWg+dvwN2tHA= github.com/ulule/limiter/v3 v3.11.2/go.mod h1:QG5GnFOCV+k7lrL5Y8kgEeeflPH3+Cviqlqa8SVSQxI= github.com/uptrace/bun v1.1.13 h1:IrxlIJHzCHFwmIzx66A9vi6qx8rHsHFiiT9LqlafHZw= @@ -671,8 +671,9 @@ go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= diff --git a/vendor/github.com/bytedance/sonic/INTRODUCTION.md b/vendor/github.com/bytedance/sonic/INTRODUCTION.md deleted file mode 100644 index 6b42118a7..000000000 --- a/vendor/github.com/bytedance/sonic/INTRODUCTION.md +++ /dev/null @@ -1,48 +0,0 @@ -# Introduction to Sonic -## Background -According to the overall profiling of production services in Bytedance, we found that the overhead of JSON serialization and deserialization is unexpectedly high: the total is near to 10% CPU, and the extreme one accounts for more than 40% CPU. Therefore, **the performance of JSON lib is a key issue for the promotion of machine utilization**. - -## Research -We conducted a series of surveys and benchmarks on open-sourced JSON libraries for Golang, but the result is disappointing: **no silver bullet**. First of all, no one can perform at least the top three across various business scenarios. Even the most widely used [json-iterator](https://github.com/json-iterator/go) will severely degrade in generic (no-schema) or big-volume JSON serialization and deserialization. Secondly, compared with other JSON libraries writing in other languages, their speed is generally much slower. For example, [Simdjson-go](https://github.com/minio/simdjson-go) has a 50% reduction in decoding performance compared to [simdjson](https://github.com/simdjson/simdjson). What's more, we barely found JSON libraries which provide API to modify the underlying values. - -Therefore, we decided to **develop a brand-new JSON library with high performance as well as wide applicability**. - -## Thinking -Before starting our design, we need to figure out some questions: - -### Why is Json-iterator faster than Standard Library? -First of all, the **schema-based processing mechanism** used by the standard library is commendable, in which the parser can obtain meta information in advance when scanning, thereby shortening the time of branch selection. However, its original implementation did not make good use of this mechanism, instead, **it spent a lot of time reflecting to obtain meta info of schema**. Meanwhile, The approach of json-iterator is: Interprete structure as field-by-field encoding and decoding functions, and then assembled and cached them, minimizing the performance loss cost by reflection. But does it work once and for all? No. In practical tests, we found that **the deeper and larger the input JSON got, the smaller the gap between json-iterator and other libraries gradually became** - eventually event got surpassed: -![Scalability](introduction-1.png) - -The reason is that **this implementation transforms into a large number of interface encapsulations and function calls**, followed by function-call losses: -1. **Calling interface involves dynamic addressing of itab** -2. **Assembly functions cannot be inlined**, while Golang's function-call performance is poor (no parameter-passing-by-register) - -#### Is there a way to avoid the function-call overhead of dynamic assembly? -The first thing we thought about was code generation like [easyjson](https://github.com/mailru/easyjson). But it comes with **schema dependency and convenience losses**. To achieve a real drop-in replacement of the standard library, we turned to another technology - **[JIT](https://en.wikipedia.org/wiki/Jit) (just-in-time compiling)**. Because the compiled codec function is an integrated function, which can greatly reduce function calls while ensuring flexibility. - -### Why is Simdjson-go not fast enough? -[SIMD](https://en.wikipedia.org/wiki/SIMD) (Single-Instruction-Multi-Data) is a special set of CPU instructions for the parallel processing of vectorized data. At present, it is supported by most CPUs and widely used in image processing and big data computing. Undoubtedly, SIMD is useful in JSON processing (itoa, char-search, and so on are all suitable scenarios). We can see that simdjson-go is very competitive in large JSON scenarios (>100KB). However, for some extremely small or irregular character strings, **the extra load operation required by SIMD will lead to performance degradation**. Therefore, we need to dedicate ourselves to branch predicting and decide which scenarios should use SIMD and which should not (for example, the string length is less than 16 bytes). - -The second problem comes from the Go compiler itself. In order to ensure the compilation speed, **Golang does very little optimization work during the compilation phase** and cannot directly use compiler backends such as [LLVM](https://en.wikipedia.org/wiki/LLVM) (Low-Level Virtual Machine) for optimization. - -So, **can some crucial calculation functions be written in another language with higher execution efficiency**? -C/Clang is an ideal compilation tool (internal integration LLVM). But the key is how to embed the optimized assembly into Golang. - -### How to use Gjson well? -We also found that [gjson](https://github.com/tidwall/gjson) has a huge advantage in single-key lookup scenarios. This is because its lookup is implemented by a **lazy-load mechanism**, which subtlely skips passing-by values and effectively reduces a lot of unnecessary parsing. Practical application has proved that making good use of this feature in product can indeed bring benefits. But when it comes to multi-key lookup, Gjson does worse event than std, which is a side effect of its skipping mechanism - **searching for the same path leads to repeated parsing** (skip is also a lightweight parsing). Therefore, the accurate adaptation of practical scenarios is the key. - -## Design -Based on the above questions, our design is easy to implement: - -1. Aiming at the function-call overhead cost by the codec dynamic-assembly, **`JIT` tech is used to assemble opcodes (asm) corresponding to the schema at runtime**, which is finally cached into the off-heap memory in the form of Golang functions. -2. For practical scenarios where big data and small data coexist, we **use pre-conditional judgment** (string size, floating precision, etc.) **to combine `SIMD` with scalar instructions** to achieve the best adaptation. -3. As for insufficiency in compiling optimization of go language, we decided to **use `C/Clang` to write and compile core computational functions**, and **developed a set of [asm2asm](https://github.com/chenzhuoyu/asm2asm) tools to translate the fully optimized x86 assembly into plan9** and finally load it into Golang runtime. -4. Giving the big speed gap between parsing and skipping, the **`lazy-load` mechanism** is certainly used in our AST parser, but in **a more adaptive and efficient way to reduce the overhead of multiple-key queries**. -![design](introduction-2.png) - -In detail, we conducted some further optimization: -1. Since the native-asm functions cannot be inlined in Golang, we found that its cost even exceeded the improvement brought by the optimization of the C compiler. So we reimplemented a set of lightweight function-calls in JIT: - - `Global-function-table + static offset` for calling instruction - - **Pass parameters using registers** -2. `Sync.Map` was used to cache the codecs at first, but for our **quasi-static** (read far more than write), **fewer elements** (usually no more than a few dozen) scenarios, its performance is not optimal, so we reimplement a high-performance and concurrent-safe cache with `open-addressing-hash + RCU` tech. \ No newline at end of file diff --git a/vendor/github.com/bytedance/sonic/README.md b/vendor/github.com/bytedance/sonic/README.md index 9cc42c462..cdb32a57d 100644 --- a/vendor/github.com/bytedance/sonic/README.md +++ b/vendor/github.com/bytedance/sonic/README.md @@ -1,5 +1,7 @@ # Sonic +English | [中文](README_ZH_CN.md) + A blazingly fast JSON serializing & deserializing library, accelerated by JIT (just-in-time compiling) and SIMD (single-instruction-multiple-data). ## Requirement @@ -76,14 +78,14 @@ BenchmarkSetOne_Parallel_Sjson-16 18194 ns/op 715.7 BenchmarkSetOne_Parallel_Jsoniter-16 33560 ns/op 388.05 MB/s 45892 B/op 964 allocs/op ``` - [Small](https://github.com/bytedance/sonic/blob/main/testdata/small.go) (400B, 11 keys, 3 layers) -![small benchmarks](bench-small.png) +![small benchmarks](./docs/imgs/bench-small.png) - [Large](https://github.com/bytedance/sonic/blob/main/testdata/twitter.json) (635KB, 10000+ key, 6 layers) -![large benchmarks](bench-large.png) +![large benchmarks](./docs/imgs/bench-large.png) See [bench.sh](https://github.com/bytedance/sonic/blob/main/bench.sh) for benchmark codes. ## How it works -See [INTRODUCTION.md](INTRODUCTION.md). +See [INTRODUCTION.md](./docs/INTRODUCTION.md). ## Usage @@ -104,28 +106,29 @@ err := sonic.Unmarshal(output, &data) Sonic supports decoding json from `io.Reader` or encoding objects into `io.`Writer`, aims at handling multiple values as well as reducing memory consumption. - encoder ```go -import "github.com/bytedance/sonic/encoder" - var o1 = map[string]interface{}{ "a": "b", } var o2 = 1 var w = bytes.NewBuffer(nil) -var enc = encoder.NewStreamEncoder(w) +var enc = sonic.ConfigDefault.NewEncoder(w) enc.Encode(o1) enc.Encode(o2) -println(w.String()) // "{"a":"b"}\n1" +fmt.Println(w.String()) +// Output: +// {"a":"b"} +// 1 ``` - decoder ```go -import "github.com/bytedance/sonic/decoder" - var o = map[string]interface{}{} var r = strings.NewReader(`{"a":"b"}{"1":"2"}`) -var dec = decoder.NewStreamDecoder(r) +var dec = sonic.ConfigDefault.NewDecoder(r) dec.Decode(&o) dec.Decode(&o) -fmt.Printf("%+v", o) // map[1:2 a:b] +fmt.Printf("%+v", o) +// Output: +// map[1:2 a:b] ``` ### Use Number/Use Int64 diff --git a/vendor/github.com/bytedance/sonic/README_ZH_CN.md b/vendor/github.com/bytedance/sonic/README_ZH_CN.md new file mode 100644 index 000000000..43fd1d677 --- /dev/null +++ b/vendor/github.com/bytedance/sonic/README_ZH_CN.md @@ -0,0 +1,382 @@ +# Sonic + +[English](README.md) | 中文 + +一个速度奇快的 JSON 序列化/反序列化库,由 JIT (即时编译)和 SIMD (单指令流多数据流)加速。 + +## 依赖 + +- Go 1.15~1.20 +- Linux/MacOS/Windows +- Amd64 架构 + +## 特色 + +- 运行时对象绑定,无需代码生成 +- 完备的 JSON 操作 API +- 快,更快,还要更快! + +## 基准测试 + +对于**所有大小**的 json 和**所有使用场景**, **Sonic 表现均为最佳**。 +- [中型](https://github.com/bytedance/sonic/blob/main/decoder/testdata_test.go#L19) (13kB, 300+ 键, 6 层) +```powershell +goversion: 1.17.1 +goos: darwin +goarch: amd64 +cpu: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz +BenchmarkEncoder_Generic_Sonic-16 32393 ns/op 402.40 MB/s 11965 B/op 4 allocs/op +BenchmarkEncoder_Generic_Sonic_Fast-16 21668 ns/op 601.57 MB/s 10940 B/op 4 allocs/op +BenchmarkEncoder_Generic_JsonIter-16 42168 ns/op 309.12 MB/s 14345 B/op 115 allocs/op +BenchmarkEncoder_Generic_GoJson-16 65189 ns/op 199.96 MB/s 23261 B/op 16 allocs/op +BenchmarkEncoder_Generic_StdLib-16 106322 ns/op 122.60 MB/s 49136 B/op 789 allocs/op +BenchmarkEncoder_Binding_Sonic-16 6269 ns/op 2079.26 MB/s 14173 B/op 4 allocs/op +BenchmarkEncoder_Binding_Sonic_Fast-16 5281 ns/op 2468.16 MB/s 12322 B/op 4 allocs/op +BenchmarkEncoder_Binding_JsonIter-16 20056 ns/op 649.93 MB/s 9488 B/op 2 allocs/op +BenchmarkEncoder_Binding_GoJson-16 8311 ns/op 1568.32 MB/s 9481 B/op 1 allocs/op +BenchmarkEncoder_Binding_StdLib-16 16448 ns/op 792.52 MB/s 9479 B/op 1 allocs/op +BenchmarkEncoder_Parallel_Generic_Sonic-16 6681 ns/op 1950.93 MB/s 12738 B/op 4 allocs/op +BenchmarkEncoder_Parallel_Generic_Sonic_Fast-16 4179 ns/op 3118.99 MB/s 10757 B/op 4 allocs/op +BenchmarkEncoder_Parallel_Generic_JsonIter-16 9861 ns/op 1321.84 MB/s 14362 B/op 115 allocs/op +BenchmarkEncoder_Parallel_Generic_GoJson-16 18850 ns/op 691.52 MB/s 23278 B/op 16 allocs/op +BenchmarkEncoder_Parallel_Generic_StdLib-16 45902 ns/op 283.97 MB/s 49174 B/op 789 allocs/op +BenchmarkEncoder_Parallel_Binding_Sonic-16 1480 ns/op 8810.09 MB/s 13049 B/op 4 allocs/op +BenchmarkEncoder_Parallel_Binding_Sonic_Fast-16 1209 ns/op 10785.23 MB/s 11546 B/op 4 allocs/op +BenchmarkEncoder_Parallel_Binding_JsonIter-16 6170 ns/op 2112.58 MB/s 9504 B/op 2 allocs/op +BenchmarkEncoder_Parallel_Binding_GoJson-16 3321 ns/op 3925.52 MB/s 9496 B/op 1 allocs/op +BenchmarkEncoder_Parallel_Binding_StdLib-16 3739 ns/op 3486.49 MB/s 9480 B/op 1 allocs/op + +BenchmarkDecoder_Generic_Sonic-16 66812 ns/op 195.10 MB/s 57602 B/op 723 allocs/op +BenchmarkDecoder_Generic_Sonic_Fast-16 54523 ns/op 239.07 MB/s 49786 B/op 313 allocs/op +BenchmarkDecoder_Generic_StdLib-16 124260 ns/op 104.90 MB/s 50869 B/op 772 allocs/op +BenchmarkDecoder_Generic_JsonIter-16 91274 ns/op 142.81 MB/s 55782 B/op 1068 allocs/op +BenchmarkDecoder_Generic_GoJson-16 88569 ns/op 147.17 MB/s 66367 B/op 973 allocs/op +BenchmarkDecoder_Binding_Sonic-16 32557 ns/op 400.38 MB/s 28302 B/op 137 allocs/op +BenchmarkDecoder_Binding_Sonic_Fast-16 28649 ns/op 455.00 MB/s 24999 B/op 34 allocs/op +BenchmarkDecoder_Binding_StdLib-16 111437 ns/op 116.97 MB/s 10576 B/op 208 allocs/op +BenchmarkDecoder_Binding_JsonIter-16 35090 ns/op 371.48 MB/s 14673 B/op 385 allocs/op +BenchmarkDecoder_Binding_GoJson-16 28738 ns/op 453.59 MB/s 22039 B/op 49 allocs/op +BenchmarkDecoder_Parallel_Generic_Sonic-16 12321 ns/op 1057.91 MB/s 57233 B/op 723 allocs/op +BenchmarkDecoder_Parallel_Generic_Sonic_Fast-16 10644 ns/op 1224.64 MB/s 49362 B/op 313 allocs/op +BenchmarkDecoder_Parallel_Generic_StdLib-16 57587 ns/op 226.35 MB/s 50874 B/op 772 allocs/op +BenchmarkDecoder_Parallel_Generic_JsonIter-16 38666 ns/op 337.12 MB/s 55789 B/op 1068 allocs/op +BenchmarkDecoder_Parallel_Generic_GoJson-16 30259 ns/op 430.79 MB/s 66370 B/op 974 allocs/op +BenchmarkDecoder_Parallel_Binding_Sonic-16 5965 ns/op 2185.28 MB/s 27747 B/op 137 allocs/op +BenchmarkDecoder_Parallel_Binding_Sonic_Fast-16 5170 ns/op 2521.31 MB/s 24715 B/op 34 allocs/op +BenchmarkDecoder_Parallel_Binding_StdLib-16 27582 ns/op 472.58 MB/s 10576 B/op 208 allocs/op +BenchmarkDecoder_Parallel_Binding_JsonIter-16 13571 ns/op 960.51 MB/s 14685 B/op 385 allocs/op +BenchmarkDecoder_Parallel_Binding_GoJson-16 10031 ns/op 1299.51 MB/s 22111 B/op 49 allocs/op + +BenchmarkGetOne_Sonic-16 3276 ns/op 3975.78 MB/s 24 B/op 1 allocs/op +BenchmarkGetOne_Gjson-16 9431 ns/op 1380.81 MB/s 0 B/op 0 allocs/op +BenchmarkGetOne_Jsoniter-16 51178 ns/op 254.46 MB/s 27936 B/op 647 allocs/op +BenchmarkGetOne_Parallel_Sonic-16 216.7 ns/op 60098.95 MB/s 24 B/op 1 allocs/op +BenchmarkGetOne_Parallel_Gjson-16 1076 ns/op 12098.62 MB/s 0 B/op 0 allocs/op +BenchmarkGetOne_Parallel_Jsoniter-16 17741 ns/op 734.06 MB/s 27945 B/op 647 allocs/op +BenchmarkSetOne_Sonic-16 9571 ns/op 1360.61 MB/s 1584 B/op 17 allocs/op +BenchmarkSetOne_Sjson-16 36456 ns/op 357.22 MB/s 52180 B/op 9 allocs/op +BenchmarkSetOne_Jsoniter-16 79475 ns/op 163.86 MB/s 45862 B/op 964 allocs/op +BenchmarkSetOne_Parallel_Sonic-16 850.9 ns/op 15305.31 MB/s 1584 B/op 17 allocs/op +BenchmarkSetOne_Parallel_Sjson-16 18194 ns/op 715.77 MB/s 52247 B/op 9 allocs/op +BenchmarkSetOne_Parallel_Jsoniter-16 33560 ns/op 388.05 MB/s 45892 B/op 964 allocs/op +``` +- [小型](https://github.com/bytedance/sonic/blob/main/testdata/small.go) (400B, 11 个键, 3 层) +![small benchmarks](./docs/imgs/bench-small.png) +- [大型](https://github.com/bytedance/sonic/blob/main/testdata/twitter.json) (635kB, 10000+ 个键, 6 层) +![large benchmarks](./docs/imgs/bench-large.png) + +要查看基准测试代码,请参阅 [bench.sh](https://github.com/bytedance/sonic/blob/main/bench.sh) 。 + +## 工作原理 + +请参阅 [INTRODUCTION_ZH_CN.md](./docs/INTRODUCTION_ZH_CN.md). + +## 使用方式 + +### 序列化/反序列化 + +默认的行为基本上与 `encoding/json` 相一致,除了 HTML 转义形式(参见 [Escape HTML](https://github.com/bytedance/sonic/blob/main/README.md#escape-html)) 和 `SortKeys` 功能(参见 [Sort Keys](https://github.com/bytedance/sonic/blob/main/README.md#sort-keys))**没有**遵循 [RFC8259](https://datatracker.ietf.org/doc/html/rfc8259) 。 + ```go +import "github.com/bytedance/sonic" + +var data YourSchema +// Marshal +output, err := sonic.Marshal(&data) +// Unmarshal +err := sonic.Unmarshal(output, &data) + ``` + +### 流式输入输出 + +Sonic 支持解码 `io.Reader` 中输入的 json,或将对象编码为 json 后输出至 `io.Writer`,以处理多个值并减少内存消耗。 +- 编码器 +```go +var o1 = map[string]interface{}{ + "a": "b", +} +var o2 = 1 +var w = bytes.NewBuffer(nil) +var enc = sonic.ConfigDefault.NewEncoder(w) +enc.Encode(o1) +enc.Encode(o2) +fmt.Println(w.String()) +// Output: +// {"a":"b"} +// 1 +``` +- 解码器 +```go +var o = map[string]interface{}{} +var r = strings.NewReader(`{"a":"b"}{"1":"2"}`) +var dec = sonic.ConfigDefault.NewDecoder(r) +dec.Decode(&o) +dec.Decode(&o) +fmt.Printf("%+v", o) +// Output: +// map[1:2 a:b] +``` + +### 使用 `Number` / `int64` + +```go +import "github.com/bytedance/sonic/decoder" + +var input = `1` +var data interface{} + +// default float64 +dc := decoder.NewDecoder(input) +dc.Decode(&data) // data == float64(1) +// use json.Number +dc = decoder.NewDecoder(input) +dc.UseNumber() +dc.Decode(&data) // data == json.Number("1") +// use int64 +dc = decoder.NewDecoder(input) +dc.UseInt64() +dc.Decode(&data) // data == int64(1) + +root, err := sonic.GetFromString(input) +// Get json.Number +jn := root.Number() +jm := root.InterfaceUseNumber().(json.Number) // jn == jm +// Get float64 +fn := root.Float64() +fm := root.Interface().(float64) // jn == jm + ``` + +### 对键排序 + +考虑到排序带来的性能损失(约 10% ), sonic 默认不会启用这个功能。如果你的组件依赖这个行为(如 [zstd](https://github.com/facebook/zstd)) ,可以仿照下面的例子: +```go +import "github.com/bytedance/sonic" +import "github.com/bytedance/sonic/encoder" + +// Binding map only +m := map[string]interface{}{} +v, err := encoder.Encode(m, encoder.SortMapKeys) + +// Or ast.Node.SortKeys() before marshal +var root := sonic.Get(JSON) +err := root.SortKeys() +``` + +### HTML 转义 + +考虑到性能损失(约15%), sonic 默认不会启用这个功能。你可以使用 `encoder.EscapeHTML` 选项来开启(与 `encoding/json.HTMLEscape` 行为一致)。 +```go +import "github.com/bytedance/sonic" + +v := map[string]string{"&&":"<>"} +ret, err := Encode(v, EscapeHTML) // ret == `{"\u0026\u0026":{"X":"\u003c\u003e"}}` +``` + +### 紧凑格式 +Sonic 默认将基本类型( `struct` , `map` 等)编码为紧凑格式的 JSON ,除非使用 `json.RawMessage` or `json.Marshaler` 进行编码: sonic 确保输出的 JSON 合法,但出于性能考虑,**不会**加工成紧凑格式。我们提供选项 `encoder.CompactMarshaler` 来添加此过程, + +### 打印错误 + +如果输入的 JSON 存在无效的语法,sonic 将返回 `decoder.SyntaxError`,该错误支持错误位置的美化输出。 +```go +import "github.com/bytedance/sonic" +import "github.com/bytedance/sonic/decoder" + +var data interface{} +err := sonic.UnmarshalString("[[[}]]", &data) +if err != nil { + /* One line by default */ + println(e.Error()) // "Syntax error at index 3: invalid char\n\n\t[[[}]]\n\t...^..\n" + /* Pretty print */ + if e, ok := err.(decoder.SyntaxError); ok { + /*Syntax error at index 3: invalid char + + [[[}]] + ...^.. + */ + print(e.Description()) + } else if me, ok := err.(*decoder.MismatchTypeError); ok { + // decoder.MismatchTypeError is new to Sonic v1.6.0 + print(me.Description()) + } +} +``` + +#### 类型不匹配 [Sonic v1.6.0] + +如果给定键中存在**类型不匹配**的值, sonic 会抛出 `decoder.MismatchTypeError` (如果有多个,只会报告最后一个),但仍会跳过错误的值并解码下一个 JSON 。 +```go +import "github.com/bytedance/sonic" +import "github.com/bytedance/sonic/decoder" + +var data = struct{ + A int + B int +}{} +err := UnmarshalString(`{"A":"1","B":1}`, &data) +println(err.Error()) // Mismatch type int with value string "at index 5: mismatched type with value\n\n\t{\"A\":\"1\",\"B\":1}\n\t.....^.........\n" +fmt.Printf("%+v", data) // {A:0 B:1} +``` +### `Ast.Node` + +Sonic/ast.Node 是完全独立的 JSON 抽象语法树库。它实现了序列化和反序列化,并提供了获取和修改通用数据的鲁棒的 API。 + +#### 查找/索引 + +通过给定的路径搜索 JSON 片段,路径必须为非负整数,字符串或 `nil` 。 +```go +import "github.com/bytedance/sonic" + +input := []byte(`{"key1":[{},{"key2":{"key3":[1,2,3]}}]}`) + +// no path, returns entire json +root, err := sonic.Get(input) +raw := root.Raw() // == string(input) + +// multiple paths +root, err := sonic.Get(input, "key1", 1, "key2") +sub := root.Get("key3").Index(2).Int64() // == 3 +``` +**注意**:由于 `Index()` 使用偏移量来定位数据,比使用扫描的 `Get()` 要快的多,建议尽可能的使用 `Index` 。 Sonic 也提供了另一个 API, `IndexOrGet()` ,以偏移量为基础并且也确保键的匹配。 + +#### 修改 + +使用 ` Set()` / `Unset()` 修改 json 的内容 +```go +import "github.com/bytedance/sonic" + +// Set +exist, err := root.Set("key4", NewBool(true)) // exist == false +alias1 := root.Get("key4") +println(alias1.Valid()) // true +alias2 := root.Index(1) +println(alias1 == alias2) // true + +// Unset +exist, err := root.UnsetByIndex(1) // exist == true +println(root.Get("key4").Check()) // "value not exist" +``` + +#### 序列化 +要将 `ast.Node` 编码为 json ,使用 `MarshalJson()` 或者 `json.Marshal()` (必须传递指向节点的指针) +```go +import ( + "encoding/json" + "github.com/bytedance/sonic" +) + +buf, err := root.MarshalJson() +println(string(buf)) // {"key1":[{},{"key2":{"key3":[1,2,3]}}]} +exp, err := json.Marshal(&root) // WARN: use pointer +println(string(buf) == string(exp)) // true +``` + +#### APIs +- 合法性检查: `Check()`, `Error()`, `Valid()`, `Exist()` +- 索引: `Index()`, `Get()`, `IndexPair()`, `IndexOrGet()`, `GetByPath()` +- 转换至 go 内置类型: `Int64()`, `Float64()`, `String()`, `Number()`, `Bool()`, `Map[UseNumber|UseNode]()`, `Array[UseNumber|UseNode]()`, `Interface[UseNumber|UseNode]()` +- go 类型打包: `NewRaw()`, `NewNumber()`, `NewNull()`, `NewBool()`, `NewString()`, `NewObject()`, `NewArray()` +- 迭代: `Values()`, `Properties()`, `ForEach()`, `SortKeys()` +- 修改: `Set()`, `SetByIndex()`, `Add()` + +## 兼容性 +由于开发高性能代码的困难性, Sonic **不**保证对所有环境的支持。对于在不同环境中使用 Sonic 构建应用程序的开发者,我们有以下建议: + +- 在 **Mac M1** 上开发:确保在您的计算机上安装了 Rosetta 2,并在构建时设置 `GOARCH=amd64` 。 Rosetta 2 可以自动将 x86 二进制文件转换为 arm64 二进制文件,并在 Mac M1 上运行 x86 应用程序。 +- 在 **Linux arm64** 上开发:您可以安装 qemu 并使用 `qemu-x86_64 -cpu max` 命令来将 x86 二进制文件转换为 arm64 二进制文件。qemu可以实现与Mac M1上的Rosetta 2类似的转换效果。 + +对于希望在不使用 qemu 下使用 sonic 的开发者,或者希望处理 JSON 时与 `encoding/JSON` 严格保持一致的开发者,我们在 `sonic.API` 中提供了一些兼容性 API +- `ConfigDefault`: 在支持 sonic 的环境下 sonic 的默认配置(`EscapeHTML=false`,`SortKeys=false`等)。行为与具有相应配置的 `encoding/json` 一致,一些选项,如 `SortKeys=false` 将无效。 +- `ConfigStd`: 在支持 sonic 的环境下与标准库兼容的配置(`EscapeHTML=true`,`SortKeys=true`等)。行为与 `encoding/json` 一致。 +- `ConfigFastest`: 在支持 sonic 的环境下运行最快的配置(`NoQuoteTextMarshaler=true`)。行为与具有相应配置的 `encoding/json` 一致,某些选项将无效。 + +## 注意事项 + +### 预热 +由于 Sonic 使用 [golang-asm](https://github.com/twitchyliquid64/golang-asm) 作为 JIT 汇编器,这个库并不适用于运行时编译,第一次运行一个大型模式可能会导致请求超时甚至进程内存溢出。为了更好地稳定性,我们建议在运行大型模式或在内存有限的应用中,在使用 `Marshal()/Unmarshal()` 前运行 `Pretouch()`。 +```go +import ( + "reflect" + "github.com/bytedance/sonic" + "github.com/bytedance/sonic/option" +) + +func init() { + var v HugeStruct + + // For most large types (nesting depth <= option.DefaultMaxInlineDepth) + err := sonic.Pretouch(reflect.TypeOf(v)) + + // with more CompileOption... + err := sonic.Pretouch(reflect.TypeOf(v), + // If the type is too deep nesting (nesting depth > option.DefaultMaxInlineDepth), + // you can set compile recursive loops in Pretouch for better stability in JIT. + option.WithCompileRecursiveDepth(loop), + // For a large nested struct, try to set a smaller depth to reduce compiling time. + option.WithCompileMaxInlineDepth(depth), + ) +} +``` + +### 拷贝字符串 + +当解码 **没有转义字符的字符串**时, sonic 会从原始的 JSON 缓冲区内引用而不是复制到新的一个缓冲区中。这对 CPU 的性能方面很有帮助,但是可能因此在解码后对象仍在使用的时候将整个 JSON 缓冲区保留在内存中。实践中我们发现,通过引用 JSON 缓冲区引入的额外内存通常是解码后对象的 20% 至 80% ,一旦应用长期保留这些对象(如缓存以备重用),服务器所使用的内存可能会增加。我们提供了选项 `decoder.CopyString()` 供用户选择,不引用 JSON 缓冲区。这可能在一定程度上降低 CPU 性能。 + +### 传递字符串还是字节数组? +为了和 `encoding/json` 保持一致,我们提供了传递 `[]byte` 作为参数的 API ,但考虑到安全性,字符串到字节的复制是同时进行的,这在原始 JSON 非常大时可能会导致性能损失。因此,你可以使用 `UnmarshalString()` 和 `GetFromString()` 来传递字符串,只要你的原始数据是字符串,或**零拷贝类型转换**对于你的字节数组是安全的。我们也提供了 `MarshalString()` 的 API ,以便对编码的 JSON 字节数组进行**零拷贝类型转换**,因为 sonic 输出的字节始终是重复并且唯一的,所以这样是安全的。 + +### 加速 `encoding.TextMarshaler` + +为了保证数据安全性, `sonic.Encoder` 默认会对来自 `encoding.TextMarshaler` 接口的字符串进行引用和转义,如果大部分数据都是这种形式那可能会导致很大的性能损失。我们提供了 `encoder.NoQuoteTextMarshaler` 选项来跳过这些操作,但你**必须**保证他们的输出字符串依照 [RFC8259](https://datatracker.ietf.org/doc/html/rfc8259) 进行了转义和引用。 + + +### 泛型的性能优化 + +在 **完全解析**的场景下, `Unmarshal()` 表现得比 `Get()`+`Node.Interface()` 更好。但是如果你只有特定 JSON 的部分模式,你可以将 `Get()` 和 `Unmarshal()` 结合使用: +```go +import "github.com/bytedance/sonic" + +node, err := sonic.GetFromString(_TwitterJson, "statuses", 3, "user") +var user User // your partial schema... +err = sonic.UnmarshalString(node.Raw(), &user) +``` +甚至如果你没有任何模式,可以用 `ast.Node` 代替 `map` 或 `interface` 作为泛型的容器: +```go +import "github.com/bytedance/sonic" + +root, err := sonic.GetFromString(_TwitterJson) +user := root.GetByPath("statuses", 3, "user") // === root.Get("status").Index(3).Get("user") +err = user.Check() + +// err = user.LoadAll() // only call this when you want to use 'user' concurrently... +go someFunc(user) +``` +为什么?因为 `ast.Node` 使用 `array` 来存储其子节点: +- 在插入(反序列化)和扫描(序列化)数据时,`Array` 的性能比 `Map` **好得多**; +- **哈希**(`map[x]`)的效率不如**索引**(`array[x]`)高效,而 `ast.Node` 可以在数组和对象上使用索引; +- 使用 `Interface()` / `Map()` 意味着 sonic 必须解析所有的底层值,而 `ast.Node` 可以**按需解析**它们。 + +**注意**:由于 `ast.Node` 的惰性加载设计,其**不能**直接保证并发安全性,但你可以调用 `Node.Load()` / `Node.LoadAll()` 来实现并发安全。尽管可能会带来性能损失,但仍比转换成 `map` 或 `interface{}` 更为高效。 + +## 社区 + +Sonic 是 [CloudWeGo](https://www.cloudwego.io/) 下的一个子项目。我们致力于构建云原生生态系统。 diff --git a/vendor/github.com/bytedance/sonic/api.go b/vendor/github.com/bytedance/sonic/api.go index a2bc67eaa..a042476f1 100644 --- a/vendor/github.com/bytedance/sonic/api.go +++ b/vendor/github.com/bytedance/sonic/api.go @@ -169,9 +169,10 @@ func UnmarshalString(buf string, val interface{}) error { // and returns its representing ast.Node. // // Each path arg must be integer or string: -// - Integer means searching current node as array -// - String means searching current node as object +// - Integer is target index(>=0), means searching current node as array. +// - String is target key, means searching current node as object. // +// // Note, the api expects the json is well-formed at least, // otherwise it may return unexpected result. func Get(src []byte, path ...interface{}) (ast.Node, error) { diff --git a/vendor/github.com/bytedance/sonic/ast/api_amd64.go b/vendor/github.com/bytedance/sonic/ast/api_amd64.go index 6b3458aee..3047f59c3 100644 --- a/vendor/github.com/bytedance/sonic/ast/api_amd64.go +++ b/vendor/github.com/bytedance/sonic/ast/api_amd64.go @@ -1,5 +1,20 @@ // +build amd64,go1.15,!go1.21 +/* + * Copyright 2022 ByteDance Inc. + * + * 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. + */ package ast @@ -17,10 +32,12 @@ import ( var typeByte = rt.UnpackEface(byte(0)).Type +//go:nocheckptr func quote(buf *[]byte, val string) { *buf = append(*buf, '"') if len(val) == 0 { *buf = append(*buf, '"') + return } sp := rt.IndexChar(val, 0) @@ -99,7 +116,9 @@ func (self *Parser) skipFast() (int, types.ParsingError) { } func (self *Parser) getByPath(path ...interface{}) (int, types.ParsingError) { - start := native.GetByPath(&self.s, &self.p, &path) + fsm := types.NewStateMachine() + start := native.GetByPath(&self.s, &self.p, &path, fsm) + types.FreeStateMachine(fsm) runtime.KeepAlive(path) if start < 0 { return self.p, types.ParsingError(-start) @@ -107,7 +126,6 @@ func (self *Parser) getByPath(path ...interface{}) (int, types.ParsingError) { return start, 0 } - func (self *Searcher) GetByPath(path ...interface{}) (Node, error) { var err types.ParsingError var start int @@ -115,6 +133,13 @@ func (self *Searcher) GetByPath(path ...interface{}) (Node, error) { self.parser.p = 0 start, err = self.parser.getByPath(path...) if err != 0 { + // for compatibility with old version + if err == types.ERR_NOT_FOUND { + return Node{}, ErrNotExist + } + if err == types.ERR_UNSUPPORT_TYPE { + panic("path must be either int(>=0) or string") + } return Node{}, self.parser.syntaxError(err) } diff --git a/vendor/github.com/bytedance/sonic/ast/api_compat.go b/vendor/github.com/bytedance/sonic/ast/api_compat.go index 642330c51..b18b5ae8c 100644 --- a/vendor/github.com/bytedance/sonic/ast/api_compat.go +++ b/vendor/github.com/bytedance/sonic/ast/api_compat.go @@ -1,5 +1,21 @@ // +build !amd64 go1.21 +/* + * Copyright 2022 ByteDance Inc. + * + * 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. + */ + package ast import ( @@ -24,8 +40,6 @@ func unquote(src string) (string, types.ParsingError) { return rt.Mem2Str(out), 0 } - - func decodeBase64(src string) ([]byte, error) { return base64.StdEncoding.DecodeString(src) } @@ -53,7 +67,12 @@ func (self *Parser) skip() (int, types.ParsingError) { } func (self *Parser) skipFast() (int, types.ParsingError) { - return self.skip() + e, s := skipValueFast(self.s, self.p) + if e < 0 { + return self.p, types.ParsingError(-e) + } + self.p = e + return s, 0 } func (self *Node) encodeInterface(buf *[]byte) error { @@ -70,17 +89,16 @@ func (self *Searcher) GetByPath(path ...interface{}) (Node, error) { var err types.ParsingError for _, p := range path { - switch p := p.(type) { - case int: - if err = self.parser.searchIndex(p); err != 0 { + if idx, ok := p.(int); ok && idx >= 0 { + if err = self.parser.searchIndex(idx); err != 0 { return Node{}, self.parser.ExportError(err) } - case string: - if err = self.parser.searchKey(p); err != 0 { + } else if key, ok := p.(string); ok { + if err = self.parser.searchKey(key); err != 0 { return Node{}, self.parser.ExportError(err) } - default: - panic("path must be either int or string") + } else { + panic("path must be either int(>=0) or string") } } diff --git a/vendor/github.com/bytedance/sonic/ast/decode.go b/vendor/github.com/bytedance/sonic/ast/decode.go index d54e98318..6a5f6fea3 100644 --- a/vendor/github.com/bytedance/sonic/ast/decode.go +++ b/vendor/github.com/bytedance/sonic/ast/decode.go @@ -1,3 +1,19 @@ +/* + * Copyright 2022 ByteDance Inc. + * + * 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. + */ + package ast import ( @@ -24,6 +40,7 @@ func isSpace(c byte) bool { return (int(1<= '0' && c <= '9' } +//go:nocheckptr func decodeInt64(src string, pos int) (ret int, v int64, err error) { sp := uintptr(rt.IndexChar(src, pos)) ss := uintptr(sp) @@ -161,6 +180,7 @@ func isNumberChars(c byte) bool { return (c >= '0' && c <= '9') || c == '+' || c == '-' || c == 'e' || c == 'E' || c == '.' } +//go:nocheckptr func decodeFloat64(src string, pos int) (ret int, v float64, err error) { sp := uintptr(rt.IndexChar(src, pos)) ss := uintptr(sp) @@ -255,6 +275,7 @@ func decodeValue(src string, pos int) (ret int, v types.JsonState) { } } +//go:nocheckptr func skipNumber(src string, pos int) (ret int) { sp := uintptr(rt.IndexChar(src, pos)) se := uintptr(rt.IndexChar(src, len(src))) @@ -281,7 +302,7 @@ func skipNumber(src string, pos int) (ret int) { } else if nextNeedDigit { return -int(types.ERR_INVALID_CHAR) } else if c == '.' { - if !lastIsDigit || pointer || sp == ss { + if !lastIsDigit || pointer || exponent || sp == ss { return -int(types.ERR_INVALID_CHAR) } pointer = true @@ -319,6 +340,7 @@ func skipNumber(src string, pos int) (ret int) { return int(uintptr(sp) - uintptr((*rt.GoString)(unsafe.Pointer(&src)).Ptr)) } +//go:nocheckptr func skipString(src string, pos int) (ret int, ep int) { if pos+1 >= len(src) { return -int(types.ERR_EOF), -1 @@ -327,6 +349,7 @@ func skipString(src string, pos int) (ret int, ep int) { sp := uintptr(rt.IndexChar(src, pos)) se := uintptr(rt.IndexChar(src, len(src))) + // not start with quote if *(*byte)(unsafe.Pointer(sp)) != '"' { return -int(types.ERR_INVALID_CHAR), -1 } @@ -344,18 +367,16 @@ func skipString(src string, pos int) (ret int, ep int) { } sp += 1 if c == '"' { - break + return int(uintptr(sp) - uintptr((*rt.GoString)(unsafe.Pointer(&src)).Ptr)), ep } } - if sp > se { - return -int(types.ERR_EOF), -1 - } - runtime.KeepAlive(src) - return int(uintptr(sp) - uintptr((*rt.GoString)(unsafe.Pointer(&src)).Ptr)), ep + // not found the closed quote until EOF + return -int(types.ERR_EOF), -1 } +//go:nocheckptr func skipPair(src string, pos int, lchar byte, rchar byte) (ret int) { if pos+1 >= len(src) { return -int(types.ERR_EOF) @@ -403,7 +424,7 @@ func skipPair(src string, pos int, lchar byte, rchar byte) (ret int) { return int(uintptr(sp) - uintptr((*rt.GoString)(unsafe.Pointer(&src)).Ptr)) } -func skipValue(src string, pos int) (ret int, start int) { +func skipValueFast(src string, pos int) (ret int, start int) { pos = skipBlank(src, pos) if pos < 0 { return pos, -1 @@ -428,3 +449,127 @@ func skipValue(src string, pos int) (ret int, start int) { } return ret, pos } + +func skipValue(src string, pos int) (ret int, start int) { + pos = skipBlank(src, pos) + if pos < 0 { + return pos, -1 + } + switch c := src[pos]; c { + case 'n': + ret = decodeNull(src, pos) + case '"': + ret, _ = skipString(src, pos) + case '{': + ret, _ = skipObject(src, pos) + case '[': + ret, _ = skipArray(src, pos) + case 't': + ret = decodeTrue(src, pos) + case 'f': + ret = decodeFalse(src, pos) + case '-', '+', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + ret = skipNumber(src, pos) + default: + ret = -int(types.ERR_INVALID_CHAR) + } + return ret, pos +} + +func skipObject(src string, pos int) (ret int, start int) { + start = skipBlank(src, pos) + if start < 0 { + return start, -1 + } + + if src[start] != '{' { + return -int(types.ERR_INVALID_CHAR), -1 + } + + pos = start + 1 + pos = skipBlank(src, pos) + if pos < 0 { + return pos, -1 + } + if src[pos] == '}' { + return pos + 1, start + } + + for { + pos, _ = skipString(src, pos) + if pos < 0 { + return pos, -1 + } + + pos = skipBlank(src, pos) + if pos < 0 { + return pos, -1 + } + if src[pos] != ':' { + return -int(types.ERR_INVALID_CHAR), -1 + } + + pos++ + pos, _ = skipValue(src, pos) + if pos < 0 { + return pos, -1 + } + + pos = skipBlank(src, pos) + if pos < 0 { + return pos, -1 + } + if src[pos] == '}' { + return pos + 1, start + } + if src[pos] != ',' { + return -int(types.ERR_INVALID_CHAR), -1 + } + + pos++ + pos = skipBlank(src, pos) + if pos < 0 { + return pos, -1 + } + + } +} + +func skipArray(src string, pos int) (ret int, start int) { + start = skipBlank(src, pos) + if start < 0 { + return start, -1 + } + + if src[start] != '[' { + return -int(types.ERR_INVALID_CHAR), -1 + } + + pos = start + 1 + pos = skipBlank(src, pos) + if pos < 0 { + return pos, -1 + } + if src[pos] == ']' { + return pos + 1, start + } + + for { + pos, _ = skipValue(src, pos) + if pos < 0 { + return pos, -1 + } + + pos = skipBlank(src, pos) + if pos < 0 { + return pos, -1 + } + if src[pos] == ']' { + return pos + 1, start + } + if src[pos] != ',' { + return -int(types.ERR_INVALID_CHAR), -1 + } + pos++ + } +} diff --git a/vendor/github.com/bytedance/sonic/ast/node.go b/vendor/github.com/bytedance/sonic/ast/node.go index 0d37baf12..6b5ad8a3e 100644 --- a/vendor/github.com/bytedance/sonic/ast/node.go +++ b/vendor/github.com/bytedance/sonic/ast/node.go @@ -1541,13 +1541,19 @@ var ( emptyObjectNode = Node{t: types.V_OBJECT} ) -// NewRaw creates a node of raw json, and decides its type by first char. +// NewRaw creates a node of raw json. +// If the input json is invalid, NewRaw returns a error Node. func NewRaw(json string) Node { - if json == "" { - panic("empty json string") + parser := NewParser(json) + start, err := parser.skip() + if err != 0 { + return *newError(err, err.Message()) } - it := switchRawType(json[0]) - return newRawNode(json, it) + it := switchRawType(parser.s[start]) + if it == _V_NONE { + return Node{} + } + return newRawNode(parser.s[start:parser.p], it) } // NewAny creates a node of type V_ANY if any's type isn't Node or *Node, diff --git a/vendor/github.com/bytedance/sonic/ast/parser.go b/vendor/github.com/bytedance/sonic/ast/parser.go index ebb7bb097..0a8e7b068 100644 --- a/vendor/github.com/bytedance/sonic/ast/parser.go +++ b/vendor/github.com/bytedance/sonic/ast/parser.go @@ -350,7 +350,7 @@ func (self *Parser) searchKey(match string) types.ParsingError { /* skip value */ if key != match { - if _, err = self.skip(); err != 0 { + if _, err = self.skipFast(); err != 0 { return err } } else { @@ -398,7 +398,7 @@ func (self *Parser) searchIndex(idx int) types.ParsingError { for i := 0; i < idx; i++ { /* decode the value */ - if _, err = self.skip(); err != 0 { + if _, err = self.skipFast(); err != 0 { return err } diff --git a/vendor/github.com/bytedance/sonic/bench-large.png b/vendor/github.com/bytedance/sonic/bench-large.png deleted file mode 100644 index 8a8785ec9adce4954f5d507c5e7032ea676907d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87463 zcmdSBXEa>@yEjY_2|<)7(V~RtHF`-zjUIxi(fjD5_lQpPGD@NZ5xopXkIv|#jL{jr z8=ZUY-#P#PIp?|8x?er(e%3QKyDCj~A{jLa-b42%~TO0sXYy^ME}zJ}Uot@lUM zL(arcwUaf-cr2nqbeoxfBDQr)W_6UIMvk819>XPCXbyx2x_o|;zjK>`7xQvYBGlhkP zwzANOe}687pEb$-`~I$ql2IAsH<5)xuFmWQKjAJ@Nm*+&*b#<(ot5ztZG@GyQ7|^!>#DNmM|YYI0bVt-tGAv#OLVO z*~zJ>#8|uK>zIgkTn-~HSKj;gZfqZ822D2!zH>glh zVj@W#jp)i>ataECiJz*a{b zlaP?CG+w{d)zee7vSN|GJtg(__O5kW%!#8FA1^l&=Om9t?FZyHiD*N-9)7$YEFad* zKRjJeGfB+OR?U_2r{w({gtAJA{>iDd4gdAAbf&>2-@1l@nfXgcD6ZSIk>~5EB^~O) zR4()0I9iP6%MFOfU$(ZA0L`0smg9!yKM?KVQ>+4jGM@L608T>dw zH#dH(HMP{7)<+Cw^mLqY5UO`X^eo=rd5)+CnO}P@`s21c1)NaFmoYLj z?sJpruB|vC>Iq=T{aHiD@}+2eBk^@?#+4ED!Q#lth_s1$Ze3;NH}8{;D!)tD5mhO+ zSFb+r&o>Tbi>DD#3weRcQ{h&taN$LZ{rScz@`b0`wN9tdGz}C))gwl2Kg$> zL2?HnYR9?SA8x4O9EjZZm#^4;FB6iJyV`@Xst|iwQvR8_0auaP;+|$uL_Zw94opaj zu5sg%Ik#>ewNrBfF_Sz-+-JYzHKmQAjCUXqw-6*&(ictn)~r1Ub0|xcG^oA(&FbrI zgLnSOt9p-}zwDlw{;C+pzI(4%U7(4HBtoG1zPUPkOobI)V`Jm>tUUxYJ|yIU%)576 z(-pZ0A>xF=Zu5A_ud{}?>G*-Pq8@Bs)Vj~vh19dfQU(Uzk65*NqIW-i(9(*Gj~AZ9 z!^ba`APJCKFc#MZwwy^yO3Klg0=?#k4-eji6Vg%&gJ^V3{9m)G=d8gFT2~=Xt(Z$S zBU1Ug6~^w{ll^Bex2Kvsc4lg~?3Wm|wmetF~0;=jYdJ^%GTyqv^1#<9FLo zAt52L^E>Xzos^R}DU@H{MmV+MeBK=WL1!Sl9fyZ>RjRe0j@v1R4VO6{EVK-z^I<{Y z^78Tzccv>)U#UUP2vj(IzzZg((D`{oG4QUUpPz)LrY7iG*3Pd>gwuO92`ty zVwu5MxFp2H%Z(fuR8&+J78c*KvsEoDm}$k_zbnMky(ULYOiWxZhtv0sj1;+{hM8Z! z^xj`#;o%v%26{j&_yq)P z$MSF_ebEJ$gQ>d+D3S9GcXv-u6RnmBA-$A}v2hN9#%dUL$&yquC%&9xW@a|O;Sn7j zy$U;M&9AK`gTUo&ZEaKBmQ*k#M$|Pmi4jmIR&jC2`1l7#Mn*+N#TQaitv!nd#0foi zhf5t4S?9-QX6XXMxgsthR`ATRMmKAp)6L~ZYK-pg?%l<^r-#Y=Qnn*NCyxjx-`cfOCz5c6QCqN2(Y_lzr4PJ2G_Yf7km>SOGZnUTXkE7N^< zhL2xBfG4FXai7V zw+#n7yBT_S)?uM})>1v3+o*rRR0A99}9x2+7FkkD(IigTr6Xk#p&H6>H`jqFsykcS6i_hTTxZz@!t> zifOMW)P5}0Ia-P4881*GZLj(^9YZBB-`X}JbsclG+A9!v=Z7I5PY3_hRwn@7|3WCwoMAxAps|Wmr-=v#TtH!RxdjVIBvv{(+dT z`1I*he+Uk~UY%VEBA~_h{2`4uy-3b0*eEM7`sD;Qeh+(xc&` zW=?YaX+t*x>6^pQogWn16LoGM)Lt;&ISi(9_4MY;$NmBfo-)Ntm_4zvo2@QH2sy2y zr0*})q4Pko@?7*!ySTV`zIt+Zd(FnliA{qqRr_MdWx>sYOJuGpCLla&W>FQ6H~8D2WW(Ncz75J%fj5;aZCzvhnJ{a z>I%;v;w@@aR8$2;MF3Rw@@n7{uqAcHf;zn4Hwk z@AEHVW@SxENC-xPtatvF$^Srj%q6a^SybR52UEEO$~^)CTE|Qs7n((hq;D#B%7d7K ze-#&hSA__LRg5E=jdL6zn3AlW@+8gib{gODL z2TqkFfrEqNa*p)$6*A%dDoU|+efWoHw%(C?$qVn5lvK{-q_#Qp7`0P#N3HDyh60Vx zP8l?YCQm(AO3-%vi=;1FLqnrI1PA{S0l{mriPjD5)(ydh!`J1LU67giruTZKl$6ZEcM*Y;tqc<_f*1?CxIMTY5L} z$rqz{b1yUJ%N7zQY*mvnF!28P`P{1+6|bWP2Hu;uJf5b8 zLWCUoqvk^&5-^I2W@Kg2r1F@knVK>jG@lUOU-U}PgD4{mBk+*p-whAu#OQ^uHXu$h zu;6&9tKuVhy$>HcN!2CZy14KSrtz?fic%%@cQt#T#5BIh_1R`KuN}F&z4ktv(yc=5 z`CacpnP0wiS!&13@5@e4?{gcGw2r~nZ*XSd(E0s>l{GwtLzf@Ct2Zz>_^HYaXX()s zo|e-@K1Oy)$!rP}zp*kmT}@5X7zz97a@xSVlib)hRqk6KQn`)ZgTX?GddE_imuBkH zH;3=)Jhk7+$TaLX?f5V>p)ZW62dgSZ1iyj7I@Ant{z--UDQ z^}e`y?P=Y#@gS+XL~y@Fr&SG~|CM`1)PP5!=#2nfpRNBw_L{w+5WA0Ho&Vf36XH@ZByzjMmRkg^;g8=siy9~xSlsWR{C z>EZW9JFMQi9k2DfA1u%Y30MywcH;9m@6U^pa~mqUy7H4pcNb-0_>I^$FWVcIL<(0m zG8|*JQ&L$ALA;N;DPq|M328*yP412<7&lvGL^ zyU{;wUzGJm_GYR-i8b~-k3}_8n+ks0L+wPVW!aD^;mvPVGh1}weZ2>DTj_edDp})y zjqd5&$rQHd-Z}f?iJX6>S)O?U5;?lX-lP~O2CS`|R_fhv~X!?2g-R*V%;2;w- z^Ow8ZYwA6PI2t}FIzgLnF7FEDqRIX4Z_k6wpTjbLmXMaj{j)~JzYN3NhZWK|$?=Ja ziFX&<7H0r32>_(k-uR@H6ge1pFGh}3%zg7SStF(odbfYAKdB0_C;!65=(FisUjoRf z9f|}~bLf_LfuL>|ho(Jow8~&`{aD8i0$MTl1E=?Vh4ZTzt#rUVWx{-k7V8Hstyo80 zBaf7$qYXHuh0v_3stV+^+Z#`hD#{JWD=7FPeSbL;Loc1fXWr95qgjKA^^h{&KK$#~ z@kTdmb3x630I8)%t>ug7j!>kPdn?>Z0J`8)Iznp@1OYYmdu7u}`cOU&I@xKG+7|S? za5guI?(S3-My`4M@EysKbSSne+%s)#jlP>Va#T;8#Pmgka zeO(@RXS=jQC~AIb^OTTIB7Le>ob;5mjW^4v5)!LPU->BgL zitu|OExp)R*yMSzU(c;zX2$4RU&t$H3fE#Yynki7wiB&DVG z#?gv<9d_WxLKcIAgHI0@7fU;Xc&61vgCi~krbUZNIcyFV+uG*9*8bn6R*E>LZ@xDj z{7KmXPp@WilTB~`k{?Z9$*6dZH+{wu5)u*vo;Ezp_FQ0KV~gBJ!Y1nMby-w1EgVRX z^X}ylDBs7QRF4%h&1=pi}lC68}9BO*fD>jW;`5@n>8bFezq%{xu3pX1%}QP*f4JXB@g8#88=BZ}G3+m;)6 zH|ywPKQi;^quYZ+uA-w<9+!2$=14d}Hjy^PbY5PbAG`a(LJMrbulP-!R@h{h1wWt7 z=!@37D|_<=2UJ#7i|;wQseNg%P78o_ob2pT?d@*{1_#-Ac!YDlc{~?$FD4F!f{^b& zeafgJ*k%oAa)lEc7U>;n>+9Q{B2`&PfmMXqS2Zjxeg4)w%DQ#(RaA6z>`EibaFaG*U?ZXchN!SW$KK`W z*V-)q{p9>G@x;Y{6)csrIzaU~dogsUIDLCR$EWq{&b+1(4D4ahKa+wod)K->RZ797 zU%RwBTSG=ck(7|IjDGY{RRVSMYiqtKhqZKS8%!q=XyxRk)#q&Fx4Ju91LCkXd9?|P zii!D+ZoZylAR;0vQi!M9MZ(fzVxBNX+9B$>_7G6i=2$+Rf>*DDkbwK91|ZP(+I-c_ zm!A@G%FxP{^7lezdx|(OVX(2W6%-UW-(0vj2vGz4l9e@lYof@Pj)l>6_K@XkV_a>M zhVjz#8cFe)CAtF%dKj986=TsgbM6;gxnYEGRU_XTR*ql)iUkqjIh_|9Zr3h{J~4uNY43K+d1z0|@W z!MW^h@qi}sCaBXQpnR2PL*_1xpTu?O=3IM`D*v-1SE(iq^JkhoIM&zKWfc^3OFm)a z;2ceAsk@qss?m6g0#XFDixR^MguC>KE|2wGzWe{Sv~ zoz&kILCl1qFxo#b&YYF68yrAPZq7q?=*Xin8kK^O7GB}z?{!~wF& zBVRpND#(0orPg*r#23x^>C-1btc*X4jxdZgENVQAIWh4&3gbIJ0U%kflz$8jqogE~ zD;(q8i-MY3Sx+zhs8RTz0&Ezwz4G43Cc^K#Tr~NYuU|hH8V>z<7cSy`T#yi7SXh{l zk+J2{b*Y*oFh}@(&&Es(O<+=Zj?W8F-_zaM zB(-d@#=TWTubGMNE_J8BY@0}!u;W}UgSa>(FOP9!DC5r`BI#YQ*6qd7DyKpH(1qVx zUqVlBYca4#v$y~+~i{{?e_xuMkFD=R<7$2Y$?Tz*0?MFWBNtaL}mdT65e5JfW3 z3)wJGBQyA5!I2EFOou}up3cKp_LZpUtlk&v&CwqY3(ZtPJZ(3LhlkE$?wjpLtGxgQ zxx7T>+9I1?3s?>D(zVQ1nqoCJHgf9MM!2l@XzJ?^j29}$YDzzT{5UB8QIkbK$-uyX zUcCbqKs2kWs>sO54v%{2#apQYj80kk`4hiK#Y+ij8f#<$M8a zsfXHW?MFD>1DgEFKb@U1!<9ScXN-)oNL+e9jnzkGGc$T1*q+eH2L5vq=NHOp+=b1} zS(byTV|DhrW@cuJ%F5eXwfQq4{`#!_X7y zk(`o3RaO0inUxjB^(rGdd2J#V$EhOQ^#O4s4eW?b{yPYB4>|8d2X!hZ@+_3{bX*{VK1Vk}A5KBQ`k0oPpOp8L$N zUPTBmc!d@hzv3j1M%*lxPYg$Ty#rQc9Id$3P|f<5aN8w8+x_i9?1=B_X2&;%cQduN zq_~7MOP8ozVR>{AQv}j&L{c7gk>k5>dVhDjwy|-%o@N3FOYH3IF_&V9TH8NPf!7A@ ze7Z9S0q5cyaEJm3#62Q;PP4qcOh!)r9N)yycdriQ`J^|VUR_`R`TF`gr%}_SUS;*~ z-!YYyyi6Ct<`!3>L{fdpY+9B2WzF|@*MO9LaYnpoU*6bLq}hQ>NK?%3I@E7gb-0$K zes$9@9@f>{o0Oc~Rc-_m@z^H2Kfk{-$rN&YZ)*Aj5mDbnMo!*i9xvH*eb5#^WoJ2( zBe^?UgB#u5S*)3_*XUY^VmK>TN@6+Pn&?eu{jF7`2Fkx_SynOpHBn=&4r*K{kBW|- zZFFPRxXs=N%%(zRit+JrJt&Blii)bMtLs}vh7uSow4}%^NxwruY&(=iJF|VdJ6od@ zw!gV)(-TiW5`u%@2ZyiETIYHUGGMT%W!Xr``%N2pRyi$7spU$+qn>f-wfMZo#KcTa zPR58EQ!Hm{271_eRuA<;S4z|P(@P8y^46Q9Ui#U#KxuDpZ+XJeMmOt_kdS8M?@i_2 zo^udt=1rNsHX+v(<5XjBy5YTdhc?@A?RnE`Y%_|m#c z&t|%u7EsTf7F(ZC^0vEC(E0B2t*op7wJ0nsO#Y2MqMpkW>5+yoe{E`N3aov=Ryk<9 zUucN7;m=T1Q`;zq?YlzEUDx^&YHcUJs!Lsd$;zS`&KAcNA0;ql0%9h^FQ}=h2TLnj2Y!F55pm!AM%?@W3yVs^iznB)s>t`HE>cSIlFek3qlAuKVI>6)8^^_Vp{j|CRd&9MYT0We_7*Gh`)zgn6Pm zaOvG)9b5Kl7_IAqb(%(oCCUT|L|?vq;q^YYsCPuj`}l~-$;r9z&u1{a`+E4-zzH*s zQNb~qux_f}(Ll_7^No%Uxv8n?>F(@ACr{Upe`NvOC~~zu0pX`_otd3ID$Up@(sD2r zXdULio;Wv8OJ6L70xed7-hXoa6|TujQMcLhm;$|JM+gom`ngG8UjmboqT=V_EYX{b z)p(HlvAn!Izs=~2fOFWQkvn~Dt37t>uN^NPqu5RmG}p7`v9k(;fbBSQD(5E|9UXFU z@Gft?$JTh5??KBnD%gtg=j5cexJW>x?DPEjdBfo>(Rb10T)$fIHwUb0TvoasvvY9R zBAYx?dL<RQ^`vR+;yfYTIR5oySYQY2r;aTOKu+@}#06|J=y3+e0YJ0Z8=;NTGT zK4xBDU+?PbGUOe;&IG!Ts<~UqF=h~#LA{2aUPQlz*-WKr&m|WR4{GslZ?RIpOjb_r z2#s*^rP;bqCRH>qym_-NV`|Ev5Ks4#kujv+5s@Rz4Lg1rkeZyVp`#;jV^chRL`CD> z9!bjDH#nH@e~ms9!kJvxU^@IdWoLPRcN=8>V*p<@HW30DoUO6u%TNJw1CB0s#7>2U zg+O2;7VsR^C62JcuM&E;q4#v6 z#A&fLhLW$dO!c3zMi_|LR!}~kPBo3&=wbunBm&;06oSOoJ0bv&|0@ACxTAMcR#vv_ zzRqqcszj@(I^fm^e6XMj0&yoKBmjQm#f4Wc1)PMKm^gtW6c5QbUhKZ}Hx`6!@)nAY zi0FI9%*h#}nJ>?0H~DHr^`A`0R8y^T%72TFO!EETPk{V?5IXt)*&|`Zipt7NTwL&) zPtPOD6;|_h#u_$#1nHW{(|C*!a}$lFwAs+;{1aVqF{ipBH&5?|4;8B^7j8S&t^9_O z(gK35xd#8Iyb%7O!?&;IPz3TW?W^XePh03VK~AIiujc$25)j!nk`Km9;@vTGW8N?k zvB0|33RGFsO>vVDF)?xDsrDvF)F$oZ^^Iw2|wZx;-ccYa-YeC&!bFfbrdulR2C ztl=~(ThJN>cMzh!N9=*~-xUpKDc=4+-oy#D=XaT4-(hf>5D}sHNAm}a7?3gKol49R z&hM3#F<-H<9nCNjyq#VhKiX~2P+{RD$G57Xitb)Pw=y%Hse1<>kO|l+p!QZaZ>Hkf zvV@(EnQCSo$eQJ3Web*zN0AYNZT3mlNrJ@!IRxY1-6fxYSmUq8^vO16_n~AS z$A{cx3d1M=ZFt&H@CHavAghS(L`d&JxSD&dW03y}9lT0qcm^ zSj*j+swXreqi(u?E{!KZ&=UZxx~$5p&m);(qoY+qMB!JGl;tM0)wNffvN{UDK!a{M0 z_#Nj2a{}+Y|FO3}$*xsf*XdUw_Ie~TTO~4K=DmceJSO|IDjFJ3d0H>>j=UWoh_@Hz z1`MopM}KN?X6WeX$bpQMHkr3wtl-x>E$&yLDtt~iJF-0&wq`kXp8{F7G*(jZT6-mOaCg&wW; z`qH^}O#AKCP3zTI5xfg0EL6{xvaql?L?fI4ks0{H=54g%;KL&6+eo!+F}~037y*~- z6gm~g@cty$3?awNL5`-<-@n%~taBJ%z6=Y-!sYim{0#8V)2)eFs1rS4z@iw^zThE^ zA3c7|z|9@^?b}nJe(GYQR=b5D1WEm}mX?Kx{AN^*|23G9R;=s$+tB$rEG(?pcze;PAe@la?CNyO!qW0+^c|5XS|FpD zn_tAJ*k-vOanp~um6a_3sb=tp0T?Nf+~A2NWa&D5&SCT<5o5M~uBSQIk97 zQYews=dnDwd6!<=uI_GcnveI|n`jwBLmI6jwKE5D;zlzv3JP=njN;;A-k;n@U~Nx% z`G>dH=hnw-{W*{)t=M4J(y4)3+X=<@?*YRagy3HD>y4w6%pA*CfYr_JfdQ+u3A{I8 z9xu63uUalKfG;b{E$ujPK0Xgl#!}sXF@1b5z7hOXw>}uWE-pfsE}I}4wHbvatDW;% zy{~16M*2%-CGURgHHbw$XK1`oIYY#S@$K8U#uQZTusk`BW_WHhQe9Sd`|namC>8H# z42)9UijA&FQaWD|8WHCpwQMn}gE6%~;Y8N!11Uh_MKfO>bD?G9Z znU2)mg?T*)`FhFZ zgGWa-+K-}ZE&54v0%gf8B zjLqlxJ>FHL_dCSQ7We$=d9d&?YKmfIr>e#ZZZ?u5>36XlE@(U6dv73J2f2EBaf#@DAKfCYY8oYvcGnDXS0+oewO<6~j~ z*tEOrfB}H5oxf#~adB3?akMld&KS|%G6xGSv6LT^mj8qcSoA#|v5KRU#2fuAtZ`dD z+Tw^1y1P4XBc-Pwq4k^x>|APL(At!)$$H(iu>kjq0=<9N)!EM0TpdTgd@Lg?Yq(SE z<=5Nm^ONI29#UfBw{PEK+S=L(XYL`OCv)}{M}G~ROsn)>adWe9amB8z zn5|v|dCQq*Z-L0j$e8D^qhey7{L>NE`iOt3WUSP`ij0V8tI;n@PD|7J^hwFmvXC$D zT1G8bO7-nq%;n|f=DVvM8cCnzzhwq)6RN_E@W)%qpK%p9FVG053`t)hYGIH&0?g1# z2T4fi2*JVkLeE;;{{5YSva)>xhGlO}6uE6rvH?{+Q`kw(&W=4d@J>{xG{yIzg~FNH zK&wctFfT9U$GdP6a`K)yTJeh=lluY5^Z7r02~3#D6cG`I9j*^ZL}{I4tp$FhG-Bw% z<8T`JLqNRsq9^$R*29(FCssb^`;IF1>yH0@E(=UW-0YlOcLv`A75HBF!R^ppQB%Uu zRNYj{%#2>W!)#}Ufc5+e@Jx)w#iHn_s7LttCk_u^aB{}vMpE-tvu;K+#ea%UKz9i|VgeK>&`Powt`j|mAk z;sbB;tA3pUuJy@?^vFVsZ{tx9wUV;3`R&!&6KbIt1v>Ap3(IEooW1w$+4SW~G*81p z>vhcZ(8!4O_GF3tVSHrda?OYolcZ#Jxe@I7wP@kbpVi(cR`PK)w(fbDsoX|@h^nNd z^g}&Yid!Kf;sSbn?CKx{F-Sl_EF_qiu!5iqKG6*gA^_7aH-Z7$4=JnKS}-mhh9Ca! z<>e(X$10hEk%x!Q`AF(IQ8fMi1+L>cG4G9YnKtrtK{!G&dF>`& zSq-Ik04$wSGVsoCU|=9!$T5?T-FGORPbF6>yE~d9DJx6mWCI>M{n7XZqw9JfVAsWByL`UTr6TNz&)kM#y2NeUPVZ=ww7%U0a(BBIIb+pZF3R z7uUC?JXuRlPA+z_Xx2f#N`J3tYRbUVdSMnyaB7=g;X|xnXBReQXSp|5H}AC?tH((WNZh#ees451 zo?=i7IkYn~Y`_T6~kz)BC;>P|xEbndD=fVSkXNx;#?Xy8^>GlJ>QYa}6#` zn3$L`R02I^w|@kKWnbw0}E4Ah7sv|i4)Wa z>T0K=$hW5ft$ogX|Iz)P1E!2Yz@B5yUPV@P zS!zm(w?m`fmNlAw_}tOj1>qnByFK9anm)ZVHfZrZ-&hW(-&l>8-q?p7^q5s?eEQT6 z%;M?Rg#W%eHa7O;#e%W1F^KF3)`JI?vknq>7pw9nB}z#w5+_3fKnmgar<#qBFc1tm ze08?-snt&u4iQFG1m4=m;_DgX1?XP+`uu}S=orpeTnt8wWrUXeY6~gv#4fLM#e_; zt#^rzcTIQs{)as>Ush&2@e{~;OI&T{J1n+l$I*)W(9X17ZF3OPOAYPL)*y{1sOv<* zQ@=i9V`K9=%YwRV@(zyZODS`_1c{|M77URM++8|#|dinzji%=3zL$Q_w3HrWJvjol^H;P zD#X(nQ&4e#gua*8dONnk>P8L*nL)%_)apBMiN0pOZWl&3xJb?CFbedIt7J^ji zan9_4hpcKe56g+p=iP|@d?i?2>Ij{25PJB8@{OY6qn9sVO0}sg$jSm?7IqGf*je6o zzVX(|%2BVT*~>OmNFp&YajhdF6>y--kXlMgj}Ka}xd9wHS*!^R&TA>Sdx@c+drMbd zULK%;bmmC<0(vX(H|P6Ezz!O`q=WZv7Y)+45H& z+3qI(XH)4aEapG(4!JAuZw~^C?5E2)KUH^$42!bPu;%*7sHmu<$mM4FN!I`V9dpon z9T#wW_1dd4H8Yk@GV|{C8i3&+K70U5V5x4!Pp8FJl}y3@i1Vp+oZ#T#bhwrIDKzQ$ z0dWFHQn#_Z=T2H}rDY=RX!OwcMGaHec=}+p8T;dQD?I*Vrs(d@+w;YdpQ@0VI(rI9 zpVPypKIf|D{#?IVb?%l8Psd}2CYh`whlU56)@TK9{O|^3mV0Z_v}MQjP=){*Ir;dH zcev0Z4bT1g$0AoFtu_-s3D(!wEv&6!EyikUggT`u>FJd1e3Ujjf6J0nQ%Rmbx7)>y z^LX`-DZcTmx;hb+8<-Ol^8|>403d0^==qn$XHAYm)a21&K<0%*>i`K$qY|*HbY7PE zsS1&IcNg?U@0KKL2bo)>b({V8SgKP{R0MN8(b3i>1Cm@Rz0ZE@aG3ZV;T#eV0*Y)>J z9y>bbKM>RAP)CHkiwoboaKhJf1uj*HJs@jIO8N&lP$6LT1P2EPz%SY2owkFiIKEa)sZe(pNDLJb1Q=;-3Q z&6d+l0x+9-{?#@}i4%VP)+seGnGs!qahDlD5whe+L2OIoW`luMeaEOI7}QAcZ4#47rNewfLX~;%^J`jB*Dt%f4xonR zX`J-zi7}B}@a^LLtqFP$(W|8{IrUvD#p{>Ym>$!4CqB>NoP9-O-Pt}8!fn(9?3(tf zN1cbZhlAbc=3qC$#XKeK1{oVO40y<(@@hkZDWJKEf@^~F|53pV=XR;|1 z|Fe&)GsnlSOq8Kcy$@)_+#dz)BVn*Q<<%-Tlo|l#p((9QjEpf`uEW{l3IJ-2iZVks zd3>Z}FsZR3&^XhSG-2a;N_-SJ_6*n7O1$UC65ng`M$9O9g6vEjse?2sm3|KiqkzDz z$YQhQu&p&a`fK`@@JHr*{sGZl$c|9l#_N5Ul9JNVJTs&2xAE~00|Nua#l_#NtH)6u zrOkX6eNSa%WW09Dpchv=6{3C@ygfQwq^}Sz5uL?w zmMG_^>Ms`;UOwmh1aF`qB;ck1Kt(x~lR;84+o|m~Rr>BI{!3UGA81~rov(d!1LCxi zY5?ME?fLbw)MmE&Wms6)?o3sv$Ijoz+frNq{HqN_h8=cdVj^%v1D}F>ZO*>p<*Qc_ z@4^Waa&m^3IzlmfdHQ~REKQg66_S&aV`gD--JWCvB7JglIHW8phh85S=iMh%f9uyp zoiF&t`yRBU&CKWlC8oxTz!6aos17;d5fK-!r{l7Ca1N@>d#g?VJk0S&f1>j{e4Ce- z2UL$5D>x$qLx&!jYu`79p&UsFfY=_BvW!-lEBq}t8oWB&@!tFq?nk&g{KkPl0}z2F zgneIfaNtLGuLvD0Jx{y1@RE7=?s79fzTsq891wbNaBw(HT4|!YWuPErr5-21`he}L z0uhQuIJISuj%w6{kOSLOrCW<_($j`+u_)zhS?}P8hUN!K+Q+;?Ja#zX=qgL?`~%s-K zL!pLl5F)7yj6lqjrav-v6cpnT6WBS+hzKvgwoG1-iHFZfELTX}0{hX8~SLnUyrmZY98U`@!96d7=Pbu=U}LKzwe zw-V6$sbbm_Lp1~ujt6{TdFky&R8FajUFpEU`|*WaIS39oLh;gf=`WR2D?fKUP+=hjvOtAt#(+jr z&a+jswDcKBcuCzHzO#a7T5_tTq^I}2Ba*auvPwbRXsE}TsvoRbvIW z881+(yBrIPdeZufTgMk7?G4K<+HTz_OioMd&6A6sfjZI4$;rve%O_@K4edb}_v<50 zwA!NI}CTy&N~5L;wZowZx`<0nsk zCxyvkY%FB=HoBo+adY?B)qT*^42D~ko*@}avIVSZN*_QSX2;E=1+k6dm3uAtO{?@C zJ$m#)L?nH5R3qPpl9Do_+pNPuh?)uJ&qX5Sv~bgmqgd3}r#QlrfFBhR@q&@Dv!*fX zrz+%Xp7<>6IOJ<#x~9086NLh*0(`UHoXsO`_xCpy93sprA~M6Ja7;!+qjHVjlZ5Of z{{vxPv-}?YYQg%iHyE@B}7>2XTZXDIQ>n)ZLyuX@m z6LDR8r1eu}EGdXF?Z-dl+MoqK!sVfS&>5?!r$>o_iHZ4;Y(N;F$sx`vomjSaBz>*YmYVAg8f%KhuLQGdz;NhG}&!)M`6J#}va@7e95k~1?0HsBB{QP%=QGLLc^ zx8>G&VL?HGjS*qO;5WFH03MRvRXBj%U6_%Wm>B!vLlP2_59@IWhGNg2J;SKAn;Q7n zQkYGs(c=XEfQDxGZw5Xd9^;D_?VEj(|C+iQ zSq)J_(FRT}DSds46*-1v#P_Ryc^_~<_upkanMkOpBB$(Li`872+ffcbkTH_<;igak zrX)_LT95Oim|MA9f^CAe}(DpJel%~0u)Qp?f$Ar`$b zELSM`FBXYc%c7d;e0w$xtBdSg|C15OL3B>^p94JwwmJ)Uw|(~P8D?ytdw+@y@S@;h z330c#Z{K3$;*ye)Sx97-nn4wBwf?8y#)E=GZu&%@zPZ%ArIPd!1XS^B^j<+hK_v(& zrc+_8y4dQUA!tidSXdZjF6FL1ymg+H-_j`Mpu zKu|zOR8e^XtjwWwJ~A>gUbhVu@cw*%tN(S(*lbRIJ*HZ=SQy-@ls^QatEs7ZbNGj7 zW)BRtcdXL~6tIZ+_#*3(9Bu`Gbi0j4qI`n|34zgKU|^VvoB3dk9>*gfz$rdf%oKbA zl%^U16iwsW?x=U1_6H4$5|aUZzoP$9X}lrywt}7jFky9SIV0z3IVAzi2O4!r0(z;e zY;jN5{drNJvu!zTZL*!eW#(NG#Msz3`r81C!;thj<(;$3S5D&ww0lWk^eEKHB;SAH zrz)pOYgSQ?&w!;9apSxfI`k}HQKV!P86l#8UCe~2%!U%&6TYvuK4q zmSnlP)^S?3hKm1X&EA0*lIdRqM>_xCfN(&f&TQ(}N1&7eNvN)#p2Wn&&dk^LHi&vI z|Etp@30YZgtUEMaZbnA`&E<)bvN97d@3)2q5r7@cL7fg7cPy2{_T{_k1ULwK8y_iY zXngA>w|&$^M=(e=X>>1&kShpa`=7N7b)sVgT60KiqM)N2Uh7Y~L`mNRM=N8{>FJb! z#Zca~&5n_nlmv*PN$OHS%?etTALvV9%HTB(aWQnn!Nolp;HWrU4yWh0|I2AUHqg~2 zOXsu6u2f1UqQ+fd zC5uq}(I~1n&463ApLZ)21Z?^UW^IRfc{nnDkWQw!P~*!7yDxCZ4V&y;?0A=QQ~WAd z-PTFtHcFTB7sJ89Swo>n>FCr>HsF$;Ol)kC1qIA_`1ovWYye~aSg!8s%HQAL4|2q) zs;UD1#lVFG14GB2n=@z5RVO}=hOzN*iB?fWOw8ni6vi~s=+!uCljo`B;Sq)<|MP`6o0S}8 zWo4fd6EDvi%1!)K-SN0PZ*PBNW@aVii@H4wO64-}`A69U-Keni%KX8^!~|;8)%^_Y;Nn&3>GFMU|B%Hv zDHcN*-8c5`>OHLncwomG3(-Y)m``OM zF-UxJjK{YNNnFxFtCrc3Tt8y?Qv50~F!1}PLtIG615R>$AxN1%XzuTqkdOx$A)%qK zUwfoATaOemR}nnKT3A@PxVl<7IEb&P;9*JXXPDjVkKBJ7`Y<6Oq2vDU;J(^!iXDV( z0^kEr>jh&~Rn^>vMC9p|(3{>AgY=Q;l>413mId#~&I)|D>r zto@uQ%cA8-Ao$NU)t`6@N#x?k^(@D1t5x4BE($5Qtn@y1-I)s3gEFwQ$F#P-v7K$~ zX}PNaeU7~60h2G5kF&#TUg;(i0I8k&l~k;TcMgi$fXBNN!FL znXOnGkvCC{Ma<65Cdtx=kRm$O4?JS$e6J#%)&>9=z|-^ace$yILs79wBQ=!XR8B6WSA&cl_y zD%FV{SCApHi)g6xzTm{i#|QmlM`vfkWnFK52G{-j_q}f~)+k;%Ldf}Sf7dz~f5fGh zKift0jmcxsi0#lj1Te~p8)pLY%IC_}_xeE6nwOk|g9CucsQ2#|+B_%1PUW*RTN_9> zF)_iz#~0a~Z6bZ`U7MnT{?d6JFO}CuSy;{8%ZtlqireN#P+;IaKrcj5yb_g=KvPmu z5(L7>Eo)kFlfX`uWxQBt62)Sifiwopae`+xH*}|oNZ6W zlSqcnh1nS!v6HZqMUp%~3lXXp8d~W~{4u?AetBtCjDd}fGQT-i9J}5emoDs=0YD14 zo>!#TUX!}E?tNyzWE(lfFAs@Zo~d2qhOhwN%JGQ8SQBs6tk0P)@C4tS%_($8QA)|n zo3#br2Pq*;D&H(p=T1GfK-rr1^799HDTn*MLA~?F&mYF!?x0FPoiqm>tAEbdZl^&Z zw`o^V3>qupP;4H_TA!rINge30)WzYptMi3b8>Cg>6$knEVjy(gT-L^4rDqsfg3!MuP{<=qdkx=(B15FmBem% z&$uf>DO1>dfa3OM&(G=h+9QSM1KK0R%-&QL3$*btY--@~)!7~c2gm2=*O#AoZKjaK zrM>|8)euqd5<$*4VCY4}=y_9N2Fr0;8=w$$|D7$5K?C^^Kbhkq)K;>8aDW^}aP5ZW zF<2GCyHG+~E%d6bWdG#EbfU}<0J7kABcq`G&JsZZdn!Z7i-f~StmMi!zMC?2eW1VJ zWM`_1LfAJgEsX-C!Hg9X;|gE1dp2c=hZ7a{3@HfTJo5ANyFIOG!6zUH{Ci>miaVT` zjewN2=Xds7p3H2DZ5QKEM?F0%iCiV0+7YF*T|}xaq8=HDnqTPFf3-vg#!n=_>m_Q+ zUhqyU_r7rSJzqfQ8QSSRNt2S7|K@SDO1JC!kdza`s$Fe=zHbPs86bvEoWi7m>{}BM ze+px?+paJlq;hm}x&YEpc6-nH0QB|g8oSW8_d#e6DPF7Dej`?R!@$6hm;~DilSzCr z^i_(Gr{|$~P-9XO$v~#Cf{2JnsMuLIwV!O?7uL|w(9dEuc%tzt2efDDZ!`^;cXmqt zY(}`ew2^k|{CJmn22eD$4Gu;_n=iwfyw2{4WA1}3;<~LNw^hFpCF?xB;|gfAst@q> zxfWp>8XBN3jwI(Z;!Oo<4Q*|0o6Vm@L_{DENWm4g?|vIPc-tiKXl{x*!lYUxTUz@)N)jQ|Y>cYYTc=R)UFEN|+ z6l7&1+D~7yYF7gtw_GakP=lM@_07!~t9(vwuH|R}J`xxIbuav!6eE7KCVU8!1#_aKS8JoNo)-o~!^S`Esu_+Yo*l2wv&P*2x=0 zW>1OYBEyQ$9OkkR{PjTWGM&t&iVQI zP76QpgM<*E>qi3nV09q9@Al>jET?f-1Puqr=Z+4s#l^+Zwysb@27ox=3LWD`3!Nr; z!fX-s9DcXn`BDn-F|eZOp1TiDbrRy@R5oc0Zf|clH<};g&O3SeZ&Gpez|OLH5*rs6kdw+bG&D2{)z5q; z8C7Q7jRQ0h=Lbt;)uuo}?RC1n@ayw4pbF=kb#KqUU4^CgCv$~J#nBgr$YIhz7^&$z z)W~Bk5=5kG5mKRi9)mgc9v&X}R8*y`&Cg~&hwe7))?+v64F;f~uaB3cUc&rtFV;9x zVJYKLr#sUjZ3a(Xyco!C)UL4=lavH&8{&BOh|=W!v}TD~jX8H+yU~w$GE{dD57l17 zcRrWL3;PT006<|<`G!YC)a7?~rO#_U;ooDTEG(&`Lve6$P-DXY!TaeXrSpWjsPTt_ znHjzLV8+TSEEPCOxUDB*uCKjkeXneIttZ}`?IJdY^RST)4h}%h1{s<3yLT8Tn`29G zeLvIbYMTg(R|M(u-F7WE61ftQK+#h4dT+c$TQ-?97$7pfH6#Zsg z&CSg^we|tIlF`HY3e;7%O=q*Y#@$iZ3%Guar_VtxhCyRBPMN%ZdU9gg@d^LCc1@I2 z96fjyOjUi5TpLKYoNI2Xt_xyOFU2DwT6LCi2q$7?=FX~`sHCe>IUvj}4s0`ETkfa=bC}U8hd@iu<2Mc;CqtSoK~iMhFP#U#a-wh3!qTSUF8rHlo&-?hW# z=}upvN`9GEiSyR@Lw$Yy!^1-gf{D`qJUB|T6Oy5t{Lbt1id2stiM4-xSm%E56bTa( zlO$3Ch)GXAHn$nfcM|I_3*TMfN=8%V>9_cHvMm6|=ejfh@bGY@YSH$#wWE_0<>?|X zS)}0Ab_HOg+Cy+hN_7Q@Shd8q#!Dv441=a#Ffn2Jj}@zf{EEd^`@i44sGTx-y?T0Q z!kRZHCx?XBnxy^X!)Gik;dwHNj_3P^K>L?3pI)he5+>gu>~Tn|R$SGQb#}PYheO@a zXEgR@RDKudaON>7sg$81&Bn&Y<~9RkiYhP>hlMeZ*L!nvaY@O^ET zGdnwrijMBI()$=`yhJ-BIvV$F2#$+IVtRTc!q%<+@D0dhdiw0y1-#{U1uQ2-52`L4 z(qjUOuK4&zRX}?NjEvbf)77!-M4(W?<5`TFd3?LS&>lf4pqB1)Ph6z2e3VN-K${g_ zzt?>A3kCze51bV^RDbRKUuvr>0?8*;db-In(>|gQ$CahwSbS3u(Nb2X zcys^AISU}1rh1ZjKXNBf`hNHDSE{$as-ZsQMy!3-hfi6*a_w-=KY z=28j@`MM3RZD<>+?%epK_1m)^E%t56A%DwGafm4-zqFsv)-8r*m7(U zDaGp0!%kxTf-9~>b=}Eum3%g`?F6^qZUScrH)@;d>XkmWmJSn6U^4}>m5&d}fe?X% zgJUW`zQ?wP%i{MFXMRcnw_VgMiZ@$WO~Pzm9YcWbh&At#awffr~B8631ARg9xYS> z!n1>=ZbCA$-kvxH&1!4X&!0a(pmeVw zC5cw)Y1cH3BIM@o;lW|t^#C00n`6bARaTGr)1zMK)&rkfh)+XbvG2`gO{|;mg=UNJ>hY1T%a3>{&P;OWT<1Pob&3kOIxa zn|%t^lcs{At#Kj(;!lSK5fk0EHE|gk@;8?!eS*KZ`S=n)z)SIoh}4Yq_ZETr1O}sf z`gE~64ym%`taneu-Q7JID*kB5_XhG|c}vZg=b)-MbWjtHDAXSjIPmH7YUY{=-6Iv; z@?oH(LnL$6hXV?Ok@21OHbL&tJ25dxb?uC+srR=Gce_6lDUFhGM@rlGW6u1Po=sFi zZT>wbKL-aD9eoyKzS5L$4=)&U-Prx+OwH zhS=oQhylBzqN0DNQJYzXs)gTRQO<+q2me193e)%pvc3nJmna5JM|vqhZgR4+kQk>V zzL)>OZNN*^JWi|z9o!uY?!~Pw8AC%Fwc;^j^vYfX1t{E@n~Wn_76;|Eot@nSv>^To zLhvhIRw_F4OwWn16`jW=Oyedb!Mj)#V~{@77MFmGENs$R4ZWiG&_qEe=X?MA;jI%o zG;d#DUmUJf6SX)zQH+J=sYk@_SS$4YEZY9HGDg&Yx0hflz&r{QF&eDKd0q1ZF|wDk#oU;!1(D<&ykkDp#mMF-=F#>*2R zsKid^j~_^9Wj}mr6kch+c{b_Yv>c0zVl423wF~bIMA#;h>hQ>7a${j(ar2BxVw%Mx*AUD}FYGf}d}@!Y{y@JXBFL@{ zltI~yy1B=yq8K!`3Iqr$ldIF6si#UoptWZ$QbIv{pcq6MBXA{(p#+!GQS@EeY0rZ` z7R68+iBGMbcUMun(7>P(+b9wm^4T0^GJ~ab#xtp`|IQAouAc&y|5RAl@x}=9FBpuD zl{K;}l6+}zZ*QVD<<|pNC8CPS?R~Drfpni#Sl8vr7Kq79WYeeTUi6;~*>G=qc4N%1>#UM2ts>^ z^lM;XHQj9%`3VC9dRE8a<=pKl-_M^vDS9DzIf7qX+;k6ArFyY)4{h@j5)wMY*_z+o z-QJM$*``&KG4jKWenK!KsDx75g3vz{Bfpc9GK8h@qzQQu1+~4IuC^f+aQ!}&k3j>; zXH5B~9O>=j6B-rO1&6C^tCr;CfIZdrDLRHsSu(f?b$RH1P2Dj}@Qdfl+4QRCZ`ut$Q`n$OKJLt=J1rYU1NlPnF=Y9PO5+4qiqJ@W>yxf36?qI1qnceVS z%k^RS^iJAjgBu%LixNf&TC?B^P^-`rs9VGC9x?UmkHK=WF zuFkl8uiXbSg`qxSc%q{PR+&STl$0=SyQVzWQdb3`llba_F4eCngf9BFwlDZ~hiEi+ zXD09dF&t;1y-5(h0c5=-|Q1+<}kGqEr8L3I;Y&U?^9$X-P5Nz6A8h1 zRi8WV=f%}#T_)5(?}LDB5Wbvwcg?`6Rf%M9eSQEWZ7Y3=#TEI)FLZ#d97zA~-$!Qm zJhlLc#Lr;tWInqL?VU8uG6Q5pz01;0&77M4)ohcO#}SMVV5k6lVP}ugtR>H$`Ii=; z!VI|}^jxh(%VBrs6}?5ZMMYgOUV_A>7aTN~KQzj;N^BAKV^j4mEa1_lr4`fe zZ1%YVSJ~6kv%I=$RUD8*zPs0SMx|JpV{v;&7!u?N!D32m~)j zLe(orfQ~L$wO9=Ra4vXdc5|;m)}imsiF#vG6Yvyue8LCz^@Y0W8awm5+ncZ7z9~cX zgr=%(`hIQ78p3hu zWYw;YFz${z=wZm5Us}p70rLNErhQ*JIy!3O*IiFeu8&6)xb0>eI}W#L-hKq_8fZw~ z;tDM*GC&G^HjQ-lZ?E>8=6udTEHA)ejEtThtqrPg>8@x|s#Egsq@D!j^djk*3 z_Y!($<}i^UG-UguRk<%Obc-yJK{MJFNsa_y?}Z29o+q0_jUG=%CCx8@~B0^sdY zP+%YiCZ-ZDwN{nY<2k=OAtBG>ER}ru>+7RIAZpm&w*H7qjq}Lmfs~XKh~%b|`GQAA zCT(r~d{e+thB;3vVv!5LR`+MgEz zzTDmfmdPfsn(8Sgb^Yiut4<4UBD;H8Xd0!@n}|f+o9ju4uMhj!AR!?jNqKm9*kZH* ze}%?DVPIa#fqyxWlTHQZ^>vOqoYn-IyD`c91AkocHO#ke+A%Bj5`BvnrAQs#H zBo117`q-qTcRD&0ASzWce);P5YL8Udx3N8an&-oKnPEGck+E^1eoM1fv*(GGp63P~ zzuWHjFLmt*9N8JoUN3X~3y&AO0NK2~SmU-D{iIf+Wm&8mPRvHn$*J5ltv>@xr~k)?nHlfRHqA78s7ycbk0j?KprYD6 zUaiIxeb2kGCzF3HGJh+#m+5z#47}b`AE2)&+g0OXX22o=6!;Sp8XH^?JgRPwkHusU zN!a~!C8Nt7SER>Fv?Wt{ZPtHhqX>DOzCS~0_P*dWG&IEVdc+*xtw>37kC!8Co9saik?CWZZ@TL@F*#F#;u6WXDN%MBuIDwC>5}1nN^U+^?dbVR&-7z3cD>}p-f{5 zXkqC$#kJ2tE>E}cty0N|Q zW3PAF`Ur)xd3bolt`p@%0kMX-@x7SZEc*BwsA??5l#nd)3H@$oII-nK8I5A4Y2p`U zA`+5f-_4Fpsr# zHw-K+qk*(n&O1}8(_$Djf}$(OsE-Y*w1&1${>i^V22(3I-F9_=Lc$D|BJS?~vO9{h z-K^pj>b9bDqB;~Vu$`c*33BTO23G6VGDg&t6crU0tKL@{CnRggwu%He`x9i?K{rN{WV#PMnp6krBzD?+a_C&2;ssSWPh$ z6bLi*F5zeo$pEMAvbWnFf{Rj+UxiJx`K6wK_@#g>T$h0Oeaqo#RU|oImjQcBW+t@c zr!_B%c!+0kaBwz!OG-{|tdf~OezLDGe1G2_DRJ7ev%C9fKwuBlOoH7~}sFldURj?WSXZEKeH_6EPOYE$$c9UXzZLt-|)uOL#6 zu0G-Dvsr(V2vn~LXfl{xQi*6F1=f%I`qctK7Jf_&-Z$CgoG+an9RM&qDXRlc7!-6I z;J~~**~+i(>+h$fp$RzMnND0kXMP)kLkU##<^yRC7}s&Ju|Rl7NH5Fy!%kiNS3j!~ zQM$bPD&_U?^_uYA!ui3HJbGiEl&mZ&<4J2#Bsrf|_(ZuWw$s{xDWcv5hl?$qZd@8~ zeRFH_hcP;}&oRE=-PIf=PXF~^P@nmzPW021%wpi2l#b#}?=<}K@)8))0#MKy85vur zr?pF_o4oj5zkV$yDQV1^3|yI4XM1ZkbG|C(_sq=9%H8(#rfTekb)k)f0txZcsb9F-_A0gYNdWb-nWj zNFkVP^xy(Zb-X^rZ8w`%S;-AjtVBgcrPD*T^f;Yl;yX3VmcoEt((`2Vb8>P|6s17r znDgdnVMlDk=;-@n&!+m0`o?WnfgrSpqWL4hN!EG-CnP8D>rG(MtT1~Rg!b^KRaNK(M=_D8n-|si&)LjPGu5z>5VH6%`5e zZQo>*e~uQacpMK&4sAFCqH|_O2ORNwgJZ76>QJ+j%`p(|?Xc7}^i7T&G9+LBxnZd}M z`6=a6xPgi_!ST1~Qdi{0OdS^{CMH;UAoL_60{VOq49KEh`n9YKXz;+9w4NO@iY#OL z8N4|>n`U!HKPtM77I3X!%kG5S?r`KLn_diH~ zTU%QMweajh78{Ki;;BR1-k;-ZbOS(6Imy!Af6Zg-H(q(&kukxBlIw`p1XltH0GI zsl*8oqMtTtZ+tcy8yiP`3j}YJOhLBm*qz->?a)Titk-T`eusuK28~thZhtbDYpdZ0 z|03uAU}F?G+f2`&(>{9!#u-^ySQLiHPgwJo>NQEfd-utc%*mxpt3;>8Hy!OE*?Uj( zT#CiBo3ptOR*-Yu?kGykhY#r(88L)~g}uGK*-0LdJoqSmmwZesB_(BIYC2SA`1a|u zXH{c4DNKIQqT)fkyyBugaaG+KZUW+XS_ctW;rHg#@e=Ljm6cc4_>28x#p=iwzq10q zb$u@0seDd^oyex&H8>dk`?sP^RZ+d)-WJ)#WkR$!q8Ccv?E3g7ZFny6tG68P&7ChW#yB>^=5}9G)3;>uP<|lG&ZyO zJ3Tx+#(qT*HtFpRZxw&~{adlTqM`=|>$K)I{(~m0@IR7@*S8eT9TUkP$%b!nkUU6| zrN6$u#(406mX;PZcc@^urEq2iiX9Ne5*Qdr+ruhGsX8^M6N*jyf-!p7HzTY#s+sr6 zlh!;^zf$^AU7LJUb`p!xg3r|&7&Jw?mVTLeEo@RyxWIRIW(8qd2%cM!m7Fu1ZhbsZ zv==BntC7EKQenIbB7J~{g@sk7@qEIXcQUskAr{5gP_{j1S5o)aN$!lBT@LQiS-T=*6T zStO8lBG=Z`@Sz2XJamWPOsYm&9rBXfVd)f46IFm$5 zczb(~CL{h{>a$Q=+{L}Uy|U+Z=LTwMRbve7?0Ae`euG6>sBF?tRJ<*#+6?ULA#xZr zVhB2ifGb=0KOYIWyMj>LCcWsInwlx<9yxUyi2WaG;4jm`nN*_Z>+AbQsZ|M4iDFMT zp@g;|o%O6O3Qu&@=f4&aFQWqvSC@14@_0=7<-43CHVwo+5-<#oa5c1Yp1$sGbVjU~ zR$;DqrKm4C*NH?w350aq-*w8zO>9;JqFwf6+0DBI-*=PcVwbf4T*JGAw(kY6By#bQ z?Ck91T$Zh=p{%soq;#z3qKj6Go*svQ@7(-1SHGwF`*}I(Sp!E~aH)hsj+-z)Y z^JjaKa*jk3F9AoPboNeXzWMNYVc=5L+!T;7s=rS)r%-E-rT)b=Cb$DBDuOXF&=x?MJaGuPvgS=~ZyAGW8vO+P z2u5~{uP6o$^Pj~Wvr1^QeyIHA6BC0T%N#bQAOufz6!j13Qd^={{O#K%&@PFnCU zPbM}7C_AR-&)=Kd^|V%7S)zaCPseG}i%v`=Rx4JOb7w($558T!l+Jwf^|d$B;o%`S zk819BcTp(ZxMup`@G#c>@1=aQdJ<}@aCq>NVo;lC42GtGCMynw7x!f*w2PSdGehul zw4`+At6h8jP9L$A`0}=%9$P*5IQP~jl;JNyRiNd z@xbFpj|{lU#%_cXNVRs$wMqakJCrNQ<-TuV!xI`B3QqCmWs~cho4U0OFZaV9hJ&Lc z7Igvh|2yx1<-fgcJ?pWSzNp}^Y3FxEZfIyYWkdrh;GuniHwLrj73gnvd7I#Q9%^)s1fX>3=?(u3BrYFC4yTEI4ghC=~H zaBA1sn$9)*fLg`dH|iQU@z#tfE{=V1n_R}RZz zS}=GcKgfy(QXmKJCMzEwaeC?c8)>)2(AwIUi;IgCz1yw=AP%5JyJmGGKU1wQUp`%0 zON*?qun=j+1+HtQ>(JBF1IGQR>v@Q4tA2A@8vwvGy=+oz5{L2VApq0%{O(eZ)&@tu zYjPz{10GcrLn(oob*RZ{O@47{sm^(W0G7g&3ld>S*juw7Mk%4t#ecd9%eG!w4*SetECA@#;5aZ(Fg5&|(b0Tbs+@X@UEkFdu zZGnfxXE$rIF`Sn|WWU-^`kV;+=IYFi(QdQ=pOW9%V6NE*B%G|c4lJ*&9W6x*0~V}E z$`(x5G%_}xEH}mW@bK8&OCKLARtJNlJU})d9GVHN0=9h#weu}^H*6sCZ8%S6V#k$? z*ZNnPVLKRCJhke2Q^U}4A2?(!W*c9Dz^Gzq^HV0K(5$Q{M#jdZyw(#ogsFM4wOML? zeSPf~+(o!6#>L6>uewV9Q9wt1 z`h>)IAh2cybija}7R?h&FIFpAyxMC4kv`6wqoDw0fSNkG(`aGRJhRibhRf^Jx>UD8;_mha6BBcxKbgyVrWU_qvOkH# z*kY!Z1H{fV$fp5FeDg!C{ldKvTd;JaFJ-%i@icilS2`>8OAIC{BC zRc^~+)CR;r0*ktIx^C6~1h&B)G*}x*2ahWes}_Jr9-yH#xb2zUUS9x*pqPY2{ivUp zsE+;ZwFf5`7uXP#0UzFA{yNHGlsRE$rQ&Lg_LmX$Dya3)XR;)f*@4_-P zG{kK+`m5xRD*;dReO@dnHy<4X!_m#z9N;TMlC?gJe>ZIZ_^_j^OS#3@M?Rfj+|!dE zm>}j`1FRZmW^@P$2?KJ1j$Y{0wyqE5UW{bkqP7CAWTwsu1kW3HMPz%O?S9v(i$y`l zdHKMCkbq$S^wgECtie&&AE3#Bf%m}MYM_^j*BUULW{7&19g1dOo|^<&v6N zzCFhL*fUD2dDLyf=f z)ruciOv>u%Q7KkJv-F_AdIOL)fJy!7$lnOZ^@v4N2?2C0I5^lU_7x3Hz(Bfy03xg{ zVav?K#Qtzu>f-~_#j=x6Ll!2>zdi%m_RZBgcm0-(Io~Te zR;Lie<~0(HQWLYWqSlvha;X5>S%sxq4&?-U{#tJII2z?83h!KT9bjA;_|oU);enhd z?A8-Y2MGyD^m@Yzsja9ZBL*e_$j6WT-?fw$kyj#6)GzH6Lb1tst=D5L_>yG-SSN~p zDXpW}z*JnpOrQY#C2vD;I6MxQ9p}7ncWUMUX9Z>}j@bm*BI6ec5z=Rqf!!L}Fq# zJ=Cz%?P7H(6`1ZVB_#!P;!bM=pOcddaYTK5d`LNrP=RB4_^T9{km$NI1=vvlR_WE) z%{6y)cY`r-U|7dWUt*p8!o5FOz_*v`rCt|@rbs!tx#7Z(8KBZBhf#2j(@7XVPJp|CNgaq2obWOh0-gVute`x{Y=#RH2RniM{ zK81(pet?(K($az*>bgDAHeRB=FNdq^@On z$!m*?hy>Kj{j7J{s`b6$2Q}R1&!4SQRr2Kv?`r;^!u8S@*t;Y7xWKk{|NebiTH4b%7z-dt_sE6jWTqpE7f36+)Hz~(ia7hWGh z5_Z~cJCqZwy_1HCjr|r1k4s4@DtXGv`jCwcN+3Mg;JR}!OpQ6-JlcZ>f&^a-WKk~# zh~aL_oiDw7T7j))OmgzZ@7aV~?ZtZwh0J6M;1ryh(E&eTlc4=ya(2eSfq^bSNr)*Z zD0Bnid-b#b2;Xaf#p_SenHG(N02`rHx1lSU%bcP&E;ja02;MHD0lC)w0Ay|8NZA&T z^$rT(efRbLX8@wIa;z57qeov~)btMwsP!2e8*`+>K+GUuUnV9rs^t3;wj{*F0MZym zDIoovYqr{kT=7`1IJTUvQqbx&dt^iU!6cH*5IC$k+Gv-=Su|t8KKabTDXU zR-|?Ix1cTeKsHrKOAUiU#``Nb3vb#|-z&vVLE?{&5dTZN@23%I?= zm5c^%I`Gzj@y+285Qv`bA_8(&dOB=<0YWy zXxMAk_S%p(t>_^zRmgfE%fkPLH8L@g7zORY{1&vuY~g3{@y;}u9{2ik{TYB!{gF{- ztkBCmPpm++IM93Z*-{|oN=BRY#xu#L^Cw7B`#egQ@2+>*0w#vh0;Nr-Y>O{7oLk?& z&(YC9YAMwh@6jz(+f4IrjunR_CK88+hFVXS-%pqC?hGfcbJ_YLb5kR_cyGaynM~p9 zw{JP{ElQlXtkDbYAs}EF#Ad}Qyq40?Ad!rsFq|wmt+boV5WZf(1$w&%1n5M5Z#Zwy z)DZ%?0mzmG0cXv_e84%oW&R%M9CRto}j)VyZ>o-24j1yB&cirFuL!wHlQjj z`B#Lm92%5ydA!knu+-g`R&`(83%|h;q1WVT$e9c#3{{v9qJ`mn_uOwo2O&0>jYUQk zz5e5b?j9ZqUW%JVYZ+cRsjx1%z8@@6-#0Wdk+?*w%4l=65VVc9HBLad_AdlH$0x{Yvpf<3m^+MBcnX%9V&*EQU5K-@WFsnTiJ-mxAz3{Q0>%ka~a#c*=Jr zF|}{p37Yiuv)!Na@FWxz6kzS$&HjI+_dxo9f{p_$mrO?|;t~=dQ5yt?sg-DT7O58d z=V-2ue3MhD*>m{!?w4{~?I#s@Q><1}>0(>)Z(KZ{jN9DAL{URy{rBoBEY;o1YiVn% zxVo>mcX1V#`Zup9=L<10HTB?do{VO#y6m7Z(dlOF?Z0tp@DxF9$_MM3B{?dU?J#m*?l_ z7R9Qi)hsXopi9#RTcNC+<#OIigoefKg{&16?TMS}ow+&$Oj@sYMUn$^Xvo%-HLvYV zty0dNOWxg=+Bfd8@k9CqWMtBcii!!{gr&Xx{j_|1iJv}Uga~cxUNjBDU@KEqA0WZO z37#apwX>x!99Fg%q+_Al7h@gpQu^2Cy7}I636G6-Gq&cxvpJ}(TJCma(s>NJeH1tl z3Nmln`}*~3*x>pLc_@6&wF^v&ss1!SZ(su=vr+Hgw+shI2JoyEs^k-(s5BttB_uwM z+#uPx=>~Hyedq5yOObSS<*lo$OM;m_C&E@M9^1iDn8}dO2PQdo682=-^NWi@DV(>q zFFc#5*w~=VnTVa89XXJy&`DQ2Rmxq((Z&iXxUnTBPLibuYSrGx#zqWmY$wK`>9aWk zVhn$BK3gP3sGg9V+!!NEMu8o-nzrCVQA|t>K?`;1;n9(k)H3tOa zhw=XG7wqgYAfR^6=j>H_-AYejU?4kL^X?R&>2h!yYm5>_V zwvv&@CCti~G!2N-Q<*=P^S+96=%$}*&?5XjaAYooP>&PAv9hzXlVE05xh%7jp}net z?7wm3kB*KGPEXa$4Vi3$@kHI}L$M*Eb(mQQg8ZWR#|r0vVl2M=flj$p?v6fH|FYpi zFLis_IMG+UPJy=J2ElVn(Mnz~Ee;F}Ov5oVeWQI*>DHFeR#;P0!_TN{X3*nk3~Xy6 zi}%h}mY0#n_;RmY55x{g|E_8QvsuL?&Fh$32@Hq)Sg{)PgR?U?jW0Um<#bBE(jidi z+s;Hv7B6e&AXUv%ItX6QHvo9Iw!X>oJY8?r70jODP6SscrrI|+h%QYfUl@-`(~&L; zRQhl@d?SLDv|sJ@&iwoQD<8j#MJ}kxX#$?;rMlf$OV#Vr6yjtyz_X?`;8N;z-@(CQ|Mckg}FkII;q>)t}Zakx$VvbR8{d@ z-`oJLacx6GV(4_O!!sizBLib&6k%cE2y#B0*RNmaynI^jO|j1V>@rz+``0*?CA#Vy z$JpK6=tpFHd?gpdhE``+S63uwVoa;JAE%Io7Hb7O{4pFhHYnP~@72J-dlM5A7{Ur8 zW{j+?;PoC86XTzg^VG6hDV&&1LR9n~78cf5O^MF#?q_s#;^$4ZwIrFomrS;^jiFRR zo>_i(w=ex}1pzb$!aH}SYxvx&G{nSE!GOm~t1&E}t5b19LmC`Pe#kS)sQIhC77*cz z3_!q+tGyOnTwL77^TqIAFjyy;du2IH3ou1sOgP6S{4BooriPSbyI*-H&Q<=QK#7=` zSXJcCy^+a@2_z(I8ymV;Rg!ZbV{q&%gha&NAJNOD(8^iiJ)qWO)!qHhnXi!9HD02P zPfQ$geeG@OT8BgN(tml`q_(#9({OrP8o_J))tZA>lBB6qLS`k!c72MNSURQb2+J&Jw}E z!XhwgzB$!Czr4&b?v9%HVT^8MWHi6M9WmSF^^BXlQhxC4W6;bu9A_^N55wPCB1rz< zzd!%3RV7WJq^7J)@P$>ERll)`QKRFFO8 z(pBxx1rdMtZ`*p`=kSRy+pskl)G4iQnDcEG#YtuCH5wicwr#9K@+2Bc1Ic+GpyV zl(e+MUi)0O4h`WGztCxorIXq3BDXVG|DBEG+-GZIW(FpHtdEzF>-k=oiiwEP zmuGuy+mbda#bXLQspLrBK0XUuTi8hM$LmUYC_q-;v(*-aPQqtPp{%S7V9c2YH{24fD$&f>J`i+Sa$`HY=)2pq7J#-h>gEp3w*{eF zz)RC(#%t{K(_T5DNk&nK+}++}4_TBst;s)n^au=iM1#`jT>7IR%sOV^^W5V@yk8{5 z#Kct1cX#eNeWjkU__S4_7F_3T+clNYHTdA)Iy%H4!NEYtii`w?>xL7vfo>2Iup3Fvms49yaaa_qy6< z`eRHCo}ounK>?#|=4;)ggzLnX>-(Uq9!M8ZUqeBB!?71G0l)tBE2?o<#Ah>7m#uNu zw3iO|Kx(uFk&l@fJrV*1*d`(t7mX$+CuyENL)n5uyRR>f7S`4nI>;Rz9e>KOHPOm- zePPv(Nls?!CFi!lnsdT-xNQ= z(?|E%1Zc#>#K!svrtYsw2rCw=71O$>mj{_mcBuut~C=j=S2GsMhy zKHqn~Vy!1qJXgtJrpzGgTus;Y@$KaSZZ478cn)fuH0^MjU=S$U$;rtfJ^=XM-a)|0 z!C`ZEb z&7LGFJeKX_xiUspIA|O5$ER%7A|n)kI6R;Di+N*fYJ6NA1QHS& zO3SYj-Ea>sOIFBpdisvVMKUKRrz{70divGO!0ws(dBdOiiZeBqB;RCHkSQoA00LZ8 zRP@P{CyE*>mfLJE>2T1GU;v%J3Pj@$RZf@@Qy5{={qy->k3wJ%+Tpi+F zj%)h(R!Iq`RJSRltgMU!Y3=5se7@S8ey|k9$0Xg80Pq@WtQJF1u*l)8BF|#u;`{+< zvd(r58Q3NLxjXVEoFwEl8HU-}ai|unQ<0k7`LUY}CiyzH3?4`NhO zODCC6hCP?EwY9Au(akTG15&t9Qqr)qtr1Yg@_Agp1li?qu@P{Z+keaFD!tV$AZe|s zsK7DyMv_N18Hz9G5qC@zc0QO3SYQ8$hli&>l*}#W=H>MoWE*btsg;dHJpcrWa=tz` zfHXK(pQu8C^X)vKtr` zsj0I9hhyd*8*lk?`F>>29tpRUr5?Apx9AW{z~P1by)s@4pzUG@SSen1+@ovm}fV&$=% z^A~hJY@M4UzQ4bJ#%rbhg%+(pG&ZJ&Mb@;1RlN+t&(A;p5k!dd(W=u+iG~r_g=iwH z4xqSznFbIbiSjyLX+tw{(EH&6)$_c-Hy-)Qa(jEwQ1|8~Tkty%j3CC8qgRRd`Hlr7$tE z&!2uHG{NCd-hJVCjEai7JzvZA`SWM6Uk0_?$;nB@FY?zO44p*gTK$$Sn;RReD{X!Z ztgMo2-Qg0#fdh;xRcwK`?^N{8cP3E2e*Fs0wAbwcuXck2D%fLSk_)M?zFUYO6Krp5 zLts)X?aY-)JU(6(UugCuX}P~)ij$`Ob9a}i!pQD+{wXIXM}O&uE0`(&`t|F0LSA^a z)fedrCZ=Sg(?O2++`h`j2YuOk=OgkeP0Ikn-`$ZEk;TQ#e+#IMfkfNeOUpmY4|f#9 zsr-J?G*VfL*^&^Si@j;X(G1b+oxF4iWV%$R15|~3d!dFs5kM>`D_tg$6=4+PTToyi z_3PKycE%o>QT*F2zaw%;6-t`&vB68!$&Gx0Takkr?n#9Fmh6586Nr)Oumvk=Jt zQbK=81&b&sIeElnks7+Qp9)^B`7|r|GJQ^Jau+VmwY5nh`g2vL8@fqF7JBEm?^M#& zwX_U}Q~3db5hyGzENFvv18793e%G~h@U#@EMLw6J@bm{V7$?8F#2OM434ufPDkeNC z3Oiqgu~@H#{A_CkC4+>LOu*sO7me1lg|m;cGH>2MfPl1g%o$8ypVD|JIiT8n z8u%2BnpNA_+P3AqjeY5~uWnkma(OTh@ktYO{;)Ni7NfnmjDd!R2mvHG8ylO}2r@yN z-JdTY4QnLilV;`S)2!O{c8{-)mV?sMDZ0am{0w^{+Q!BdRf2&D zhRJZMsF)a{wvNu~(NW}BwiJnub03iO5Xl}}IjCJm24;63_NGeUVPP;`UGiie%aEuj z?67C-Vh(>5B0;j8nNeTg*l3%cCiFwbz>$lAfXxx0%(*<=U6nf@>1sE75Jgf52ZDDH zNujsefwLR>@1F46aH;9f{OE0U9@FthH8nLxx;b5rN1r|lV{eh`R;h6WJZd@go%Cnqm2<>FG8zqqx#i>9ZiXW-;uWE;rY z;9FrS!+)SA!aI7fz5PU9Ufwhzqr!7F%&PD^DH+*Gr1u{rpF@Ko9v&Ws7cWGmrO_Ik zk644ffC@G!R4XbgqvPWr)6>(})z!V}z{bP#&&Z%$-`oWAq@iSPCS`9D%mk8~>6Uw1 z*+NI@+zL(P`d30iHs{-lrgi}Ut8Iz{0hst_d^QE5;a zqvHB6ceJ--6A&0gV!#2`V|(gJELkm%^>EaYGP@l54z7iOQTH9-mP<>dur){F;}eE0V){94qTJ3C>| z>F5wg9douu(j$QpmcReX#k5{fZ7r|U;X*LDb-#l+1Nw6i%XAtX+FE^)Kr(06sCWcw z+g}xxl~7z|w8AQGgx2Y4!j2%Up5xUH zV0CKB16d4f{@WLgWe5FNU$pe2zL>8g7dNb$WurOQ?+k>Uot@9^oZ;qTFUWbx zRjLkWHd_h{6m@{o-?zs=OG`_|&JG2&#zwpv1Skvj{OSs|-5ezP@q04`0?2UxYQ=C9 zC;(LW&+oHx%XuDue}8x>#Kg$R;BcY79p8wJjm=`YnXJ6L91K>l)hLLD%h(+ghB8F` zqN1aHM}!|p_ohmK!8quomfVkmztXYs$}zIBVfh?h^1Sd&e*Nu-Wf&3Xw{}ZxsN&?$ zS|?Ez6})fq>8uN{@BX993%b9%^@G1tj<5NqEhi`EvXh&b(+8L@9Gsj1Kl*=(iHiqR zoz5l1SL-1xh8@n#s6T)HJi~r#_>H`LPj@(p?Mf>GvsTU1p=9nN2feTjs73>;PD6&# zK!SRm4VByFKB}6U+MnNB>2-D+Xuwy;+uOUdr^m1_hW3q&Ol(t5K>ZWer&4lqn5SoF ziYhApHH)d z=6lNxd-RQr0@w|^;c|mIjZPB!`jio5f^<23lR0m38RDf=1)b&8D-a>~zel`3w0(XI z@d*oi3RsbMw^xKE<(7tqeq-5E*>!c#OomgT;|Th_QB>`eyctD42rDORJz|=kxvE9! zH>%_Rvw_RYqmPrOy*yfuyuCU~A*Fw>sfi{sjU6?f$n6+QRbef#_SKpY>? zi2)NSP0)F?%2XMU`P&ysrP8jhy^B8}v1e;2#@{3vQ@7TSG3Z zg=eg+tnClsx%`5H9esVM5fKq(wY5Rgxi}b3_8BQ~;zG@ov9#3Gr_RpKGqbb7U{E)j z^A>mY3QX?m>x0Ru^S8FPf=GC+CP zQ!oDzaO~Riuel(*A@Wp-mWfho+ z`0(%$87jcT!y~yzO>)x7waVETK%Ri zh^-;`OgV42r@vEpJ={5iQljoO4ji);%=1lR@Gcz+Hxk_zIOS;eYr-aW{g-2y!Kd~q0M1WgPJ^DQfkA7%K zNQP3uQ@ixhJVFA3_P#z;KNPG4m{4%E+y8Ap%fQV1NdM0T4-ZdSMTMB6Vl;zJfl7#% z^_z1tEM-B;ND5&f)Z5oJeKl@M70+s#{PLJ!zuU;>oGcn1;oIM}v>nm9BG@Y%W z1zhj_rKZM(e@7MHdqhU)`^Y>?^Vi|A^zz`2vT<_iZVy0*l9DoGASk$MyMp9D9a3dJ zjcGFS6~C#b!jp=6V64hic?`*Apm8)WJ-0+9Y8hjn`W<{?V`DQ_7{`h=IKllD&bx%YktkI(DV9Cf zIxv8qnVI?!FPAU8G_cD~} zh`{h&=W4zcuxi%QN;Www!D;pR)5FEanHFzh$*^a>n?os~ zr{}ob=ksxuY_N~~scC89n07KFzBg^=JNmUHB`hk8@t-7l6WOS;0{gF33W-N^WeD-` z@K*L`E3?l1P_RPeRz`%*o`!^k*!;P+^<$vqlvP0L9jhHd0}I9;$19=`k*(o0i5-mD3Dx8ht=d4b%vN6{lpGB> z9PT5Q>GS>j_kBJQXLIwnZ-Z^j6Qy&-L_{FNsr)p=%zcA{odwEy*x1;RcwRv=6Vo+(1z>;KpEF0s#P>4*>$=}Zp zNwrivnBB0ubz%Z{c6JsZf86mrpP-x`xvP+3h#qJ$?2Pa(H+MFo$xfe7=g=lBkvX>)j=K zE#zPt>W_+xO-_ypd4i7K;eCHb0Tf?>Xe(NPn6Kr04VADkg<*GCfsG!R$qpp4h1Q6| zV3S~mQP?|C!!2ujFvq>n;!V-k)+R||vG?oO=ZuUD=`}lh`_-c(Ju8q9swF}RT<(8w zm77k`F~m!s@6Y1a*Vn7Jc)e0mQaWx!p@2lSjKDtf?;jk553lp^WNSTqzn2m&D|tw) ztPjr5EUNakGB-CL{KAQ1K3xiwW};G3LRCvNS39tTJ9j6G0=QqsOVb*Ud<~y0Qd`?f z_wN2Co06fxu(G!1H(O~UJo!|Mo}L~Qalq1qfK8V<$KBNxc#;v4Q{v;`AjV4vfR_0F z&u@rB{P1X|czPj?PWp>@`If_Jkcv=HQ1)lak@Doy5HoI5J32bR9xZk)4B*VZ$)`tb z3?!~i$O}KtU_t>--(q57{(Oe>3I!@a#F0+^D|06ls(A6C(Fe|`1j?CO>t$pJ*dPcx zAI7aC`uh4lK|?F#DwR#)Ilj6=(f?ujBJZwHf#IcL_fxP617B1!w>f0{D;a?L0l7@b z`Vl8o1CxY=L|scOQLvSTmh5;6%fj9#1^z?2*IE-%6EKru`*8?-ap+S>XiCiMM9gQ@)X8DpPbx?fr-x;Z)VR8&-~tgk;JBqUV) znz^u`4K@QBmB!qSkcdn*f z#5v!-fpFK+k-eZbve6w+PfPn4;_r)Y__Q`UEe#_;OmS}+l|$~~Zsp`9mJs=7_O}QL z*}KL5GM!_8+8T6tp_XG6w|Qv!neqF%@430TZ{*}8f#b);`19`9yfJyKuNxa?j6L%n z-rfEA!$`Kk8tJ94CD3YVwe?mUqn!EV74K7wlUGQa7tMwrKA2fcI>TU(KrsSX)xIq) z!WI@5knO2@W(Eckef^Aee4qIE_g{j_dow4^qNAgIc`WDNRIcprKQ%EiF|{KKC*~H* zmJHA7<7TXTNy^X9-#aoQrKkv%mXQh2O4|J_mf48kKQ~9r7>|aDiPcmh*aV2x4MV$r*(SZb(a+_5#a7UGv zmR_HY2-|M-H{qOU zXB8Gy`&tPK3W72xPcE%}D23N{YnZIAzJ68j;fC<5`ys#SwX(gPomh+49Y_(`oV9~r zDl0iHEG+b`ts`S%aPlX21rA1c1u3L+ad>!m6be+bFySR7EX5@y0mCRzXtcHkp~~>W z+~b6dswzAP42vtbe{yoGyM_)5ChK{cB-_XiX>$lj$oj252;;?OYrDH4P#VcMu`FT} z-((e4RGvE+W2FDkCOqdfiIX<^f(iHY^ZWD-!(jUy)I;23|-QBY}Yjz7cnGSrmP3E@+sctY)O=hs6(D%Y%wSb6% zf&vlAmJELmHZ1=vo~Ws_c5~nn5mSgFx0eUGt}3A+p`k-gH3?O?Sw|Lc1j+V2u%Q~w zNlDKj7KA^!?X3v0-}BaR2Mi>SowEJ59_p^#mq}z1={WP@u zf43KnS!6TjVq;=H>v{bKPQVbKsS+(+sM5u=6I(Y_E?EU@#a^4Lm$Ne1eJD-Rg^!&KR){7|$l@o`GLqxqs+{L$ieHm$B+? zRa8w)Utm(a4ol&+{uo>kUX$Sf-+=q;H7rw(;*ye+hx_FRT(3l}rHyV4#%j%Q zu=fDszc=SQG(!nG&4q%)N~HXDk5I74I|=nXsD?gha8a|fLmQnA#5_ENic3m>$bf%f zV3tOuaTZ_wMoz=pVEjTe>VWp0aluAiX@BlQ-L8sa8l|)MF5{u;`}41R6Xl8SFJFQe8=YxrXplrjMaA|{HwI4jzPGebPZNS> zT2vI_@^CTq=TDVKC@3kUQm4#14S2QI%U~QS;C#rOGjQkC8=hSuEiHXKsiwEO-WPj( zc_|r$NoMnK?+J=G@XurEWFfr|VH@3w8k!{p0FezY=k@I^&C8eAfE%|KDIArQ1Sfyx z_N3fyMAU9A?5(^!N~@Eo<(hMT@v`>=nc8<0%+Z=9 z06=29GfoS9+>g)Ba5n~6^d`wnUf|&109ggF#k)RU9k)o32rg3l{>%H}mIAUeYmy#N zRKzr#E*y!3f=S810Qxn^dSdKu1gF}!bJ@Z2!E#T9SIqUK)9>r!NYr!~i*VNu<#oDV zh4(Mnd-7j?OAXqvYGkynsi~c6cyH%$Bb6%&*R+1c6EDvg^%DS3DE%lF@g z`ud>bc6N4EvGnp&UiZJZkfYD5KpSbPuAX#xx-pP-4irc_+S{wH4i_iPsx=P|=4-0~ zNmbA5w*+3TVGkzwQ65Id{v5s-AVxkX|N1vf(Dn4=L3cQbgsWW(h22_yF`1y#C;E3u z8R3zUgyYgOGSz@o>vhsaD3<)sp?ADG)B%6VX=^ww>)dD{!4&+{;NW1*64iVDH&)uN zGpzX}e=y^@oe#ASu9m&oWC^1Gp7rEVLN+s#k*_6bFAYBPFf+d+At3m6w-za!V^A@m z=GgP4kya+*Q=WV}tA~^Fw|CKjpQ<$zB*e|CHE$0akIYPll5<&DSn$UwguRN>_-wPB z`eJCsk{9fh7Hv1Bt(IX$+#?)4m!cPC>vr0N8%kE%j#0|=y^HA$A)N84SH+W4>4t1q zLd?$d@53j|HhQGj-cen7npY=y7lVtfo!y9uhmXHHRiXt>f3{?}|G8v1F%=)*Get#3 z24-e1m&dQd8=a59Fw-c(;K|dck07AJhS&hkN^2-vGehUI`_hp_5~+BZw{P3J!%5hU z`tcazr4_#}90e`#aU6CArxTm*EkxWfZM?Y~LpPt4Tw+#%S zYnBk0nwlP8UM3jFqTZbE_^qr|)bc&2rA2VzfX5{#qX`NM8WbSEA|xc_BiZX3^)VF&A1i&>>)mfPD*1%{7ZC+;e$nwrGquiX5nb=@&`c6Q)lVVxa8SYufd z=!zXFJy}j*0Ypwt4sLjCJiJFJC@493d25})xL^!)wmF2*D~!??PIE?e)i@Q^EKWp3 z1kfVclHp|^y3m9?uCcAGthOhM2pgOZ7(4%o0I~xKECCH%EG!sWwN~-4UN$|ukqx^w z=FA_&rAFkqxPDTR3z&? z)5{(^ZMFZ?;nPl!Xj(WcTd-8)#*Ct13g--1xYE&!;6`cK69KjYt!-_hF=x+NgoX8D z#J}y%lxK6H^7Hf0G`aH%y?O;uMS+2-B|r!5pW zDCh49q>PMAOpr!jJ$2{~BVu4>4NOZTKP}?EB zY)5u$yEOG1GKclrR@$Cz6%3o(+i=|`x3{t7CL`n@O-yK>KYs)nNMpCVrDL|gNL)Ay z;4dt)d%;^;^Y_LqLcQ3T8F+;?u;}F2iEwIYe&acvXgK71D4+nQp}ciex$??IlQE=) zg(z6$z&WaSV4%bOsEK~Tsz9|Upt~|oEE78-V1bWOPg|Q5xXba|Z^mgf~cZO*? z{;0374^XcIu_#zm4cAls*1MyBN8Rd}zp1FKT;16Tu3d7IaZ$JR@&bm5@MW)Cj8|^w zKDD*A`=_kDrLSYOn%BP$Y;;c&GKb<%m{kM#o!9RT!bd15+0I8x5cR`#hVRzx9BSTu zce+X04UCC)Yi6MfcLhat$qMO_o~~O4_4B0>d?H>JvMon9cE$XoIwN z$OwH7nk59FNJwDO0-!!3PU8$f32as>;BsSzES`)~px4`e)K*l4Ca~&+0DEMagzdgN zuWfn%_%20_n~^%ly{RV{82ICY&WB;XNGJdY=W@Ocjg(*kWOU$01B&=R*Cz^$@d`zg zfbYO#y%Yv4!%RlLR)9qNue0KLa}HgUL*F)b2%``t=QJJ^`S|hqkESN0MCW?ji|B<@ z+AD2V-qL1$4Q4%QX*BSLl9HZ1CFXjv)*bFAmPt} z;A50|Ad;D$e&hpe!$wP{H&#~>GEPU5da}%@X=n@#4FP#InDG{%x&GC0ja8b+&;Ap| z*S}spIX*e@70Ybx2*N`6U+RxdRDG_T=QVGtSzJ*O z04tCSxlj(ZcLZS>7#TfQQ&Te~`0}P`^21n`M4kN>CZKx&Nk7S!-owMgf3~P046nGk z@w>XZY@D5WUqpmWm{ph6*7iixNZD+UQmy9Y=RZM3MFkob92^`Uy@l7i6*azo{aRL2 zBdMqu&4u38)dg|DN{P888VILZQ&LtoFgMrQbYdYPA>rfar($8j@cCmOwZO+g@dq=$ z+WAPARKVd)GBelbi;Mb&f8R8Pf`3oR-dwf$^=69oXuZ7&vwB&^ASG|Bok`d~Wv)@* zzslS>YEa{r(*4Z)uiTEb{;$;juSlYAZXW7%Ft<9ME7RNGk279bS!sLnO9Bj+8RPp` z@XxvAz6u2cKw}Dz?76>s0oW6^M$<^ac5arD5D_80ku+<8SQKEIl=$1$*0wD})UV9r zx83#a?ZExt;&p$2f3!fE9_;#QX=$^5oNbMW=PI@J^hjNrF!M%)na@_xo}QlCocxkd zbo=munuCL5Wo->f1k_8UU$DG_`WxJ@SZge1KQAn3E8f)GZ$Tgj^R+0HEk6driz3$( zzVAj9v8fYu{WRmAD%A^SJ&B|+rn<#%Lyfd!Dbsp$&= zhi#wE&Q1uW33X#^MwumN9ea73bf;7lNqGIDis zS-C!0t8?5VKtn?VJCg0~PsQrxh!9|2!pFzg`x>P$oJrozO#o7ZZbs4~{(+U173|MT z^;$61)YR|@3D?edCIHy`&!0a4%n{q)xWFfqke(iScYBqsRcrOP-tYTc@4p2TaH&Xg zgX`nfEQbV%^89>;%v5{=f&^1N6C)#3&hP7g%O^FvTe?ln&6(Hv^3f&%^4&d$!?A)qfk&6$dO1o^8Fu)bH5AtfV&5)cI5 z-`&bk_o-->5a80waW!!HEzzfYP;2w|_x83HzAwTiB6?Ab{(8ws?#1pCWuWzfmNc4Zen8cl!)Vz_wNBc7=G}-s`#y8GK-lq zg!1xoG0piJOTfK1SakS%B2(Gf+1Vj8toi7FFoSiPJ%|80Dke4-0m2xM*5r24o?_jM zDkvyOC1>TDNMcejK0Xfi$p*hVgP*?I{V!*obN(k0`ikdTmgBQGCRRAe4d8{QY5T^M_N7eyjvw6V37T~>xI zo5B-s9Nc^Nw}lJ{2zVneFE#N^cA$xjG|C$@hQtI;Hrvp16s7Lu#Dj*0wsLsL>VOvZ zw{MwLvjg49Bnoq=yu1~E!6BcFiJVcyf#0slznkrUMG6bkL??0oajP|5Jt2M!-3GWnlxI}8kz7_-5I`#Ci=wOQ+VW&NxqB{j7@9xiSN z(SKqmX8nm4war8SPNx1on4$mkkKr0S*r%~jQ&ayU)BOv#fPD<+%TD=^Um!+l2>!39 zy;-&y|KEKvxthy2U*I_%-LI3ip7D?B8X9dA6JU5e&Kw#W6$N-15Ro8EvJ9ny=g>(S zUS2}yqa_Is525qoH&Xw`0)Vu#y6Wq6Fb8PH;|ig;WMtu4S=5kL&JiJ+z7o%IyCS6m z!29-t(;qH1g{G#Gt~yIeNv$Tu#l=xFGD`Py<|r_L{Q@s9FQ0&bbfpCOYY+HhqjN`p zKN>FGJD+N9`B~VR^-k7$a{Cb7-QCZ3C(#WI49aS26OFa}$poEN+5^xbK5Q+2D&_+}4d%csIv?y#f8$Inj$+ld&;k_ZL- zgdE5H87N>(K`5D+(9sE)u}{Mk8RLOT@X4^?5oqp`F(4o>MNkMw0C5yDP3nqIcEh1= z;(<@w>TK6?`i#RZKNkYNM(wf}I^^G2qTqbb?*9FiHa{piIjc01&qSWQ;l=J`RuvJa zF(oBs>-KW=hZG<9Zl!Xb+-hFBmza}N4Hvp>3Qw1obyI*zx~FO~?fhhsT6A38BZ$jt z0Ac_6V!yJ+;_lj-Ux9L7mP9DQICH3e@qNL78#6sU%6zSLkY-6YU|$T;74m2|`0v6* zMG*kA3rqNqLQvF=;|bsZL|y@3XB?WUT_Xf=RPfVQ<~!FhS=- zmEZPiMU!wiycLXqh7dCbgdKPBAb`aZqfJe1#xO(ok^%~aj+#}Ef6TUgtXw850=t+5 z&dwII90pO1wrkx$zzJ-FAVfq&*O&9w05sc?_+@>)FBV9V^H|L2pO@MhuKz3nL?7Uv zxhm%5si1c83<4-LX4S-BzkdBRUsJ-Bl0Ro70GX`I$e;vnk)vkSZ)9Y|Jv@Y1b$>i5 zQ4IwuM%wi__M3ygVwq9RRc!(u*Dp)8>k&nq1xL-lHw9*7Py$$s+IQWqQk}-An3&I1 zRa~Go2J@Te-fbL%X@Z2r;gZP~s>5GjX>Ep77GU_YHD8O>9h78bKzbr6dVoUxHZr}m zw6uTsSKW^vpMy4XWkn&E2ona|{L~-!qO5}B^>VwCiQHsd;3yq9(*W28VNj+>js@_4 z0Rdt%K_|R%JA3s@YoW^wDJ!UMo^$Eb^xTV!nU=cz_xSZ1&&2MZG*+ zWD=;Isyf|ORZ~;z?CM&b*7NR46LeNkQSpCYq)J6enX&MtKOv`dmmLDy-M=E&F{D|$ zUA|U@wo6M(;Ml-S!6*OK6`HA91c2JvQjuBS5BFI~gM;rDez@YIqN3V3IKUd64n|9L z1heU7A@I;pacyl<5I(xYNwO{HYXH@W>nS8EJw4KVx)gxky1Kf+P(r|Q*WY+3`K>qt zq`bVm&hr*5If1mpqsNcmio@P5I*ZrW*I)nMN)K3GcHJU7-l$FB_Kame#VRB9FJyy%B*N5@0nb=gCn~Q6Y2$Vs!YSU@0glKp@+* zm3hYkuaqN9WrIUP#Egxrq^={1M> z`#-8{XaM$)pC$|A*WU|#`$@sQNC#P;?Cbt%l#;x0E7*HshgsfMi&(Kk31&S3-QuFYrUN>1UH@DaKwY4D_7#INSL&)M; zWDaAIo|3XM;BQn_ajkL#__-en7C>v5n3zy4Di}GM*IF%tJ_nq2TU%RDxU;qVp=K^p zjlD3k%nx;AW@m>wA1wulWr_e^pu?1*3NGKMtYen>bm{hFQR1jgi|g69PZ_uCeX;7b zR%EAVX8~LgU@!u<_1)nl=%$Y!|8>=o`zmCLU9h&d7YgDI*BjTJaawS@8Ce}wS62h> z%S(%ym#aC2W1oPz1gVgV0v-uAHs#G?)QelI!D{pAsFW0Rkt-28!`ghO-Jht+d2;yV zfuCjyh6V>aL-3hwE_UB{B#IQM0MnAvz`pdFfs_Q`% z1ezrTP$(2&UJ~a=}58i@)9Pp=^;}#|MEQBlm&6M z9ZBfIX@ADo#|QE*{dH3}xsN1FW&Y`26qqi!U+zO4jpL^I?dvp zP7SJA<*VcC6T>m$#T#EMU*-*gYNu%`{-1OF&;1t`)Zdf zLCB34%M^*FlRX9~-qyKlb0{$}qfifE?U3+Tyz~ebk-M|on_^+sYu1kY?tK{RJxNxCANzZMwmP%Btd=7l+ zEi5d6qc)%t_6`qsmuS^uKYIpmZx;iQR-ePqL8+Mh^N(OZqkzcNvnQ_|ck$%X1OhgP zQfMeCAqWTvPo6%7WlM&`zDH}dxVXC;_C`@jQb_LX?wVcGORP_o=rlS3Mk5z7Mny$M zR7wid+;nm&TamKPlp%4rq|31X>SL`bLltEZ8M@0($JE~C=H|ACQCM4B1NWEqzRN^C zFA!Ni=j1$x!C=4+4jvo~6%Zj4aA*x9;`ARr%uDwI%!h?0cOX0ivdC1a4pTAoa!iUM zQ#nr#;&XoP02EI_klGwdf#TpG<|=_jCDQ2or=a;Xe%969{b8zDBWvF6-Qv~hwh157 zuaPICi^dLru5A^GGe~R>Ci1W%Nclh4)$u`E*ZX1vLUJ-PAj)}i5?)@ffx`~KU^66+uQeds4(Z`RJG&D#) zR`WMn51&7O*0;0_kBPyl)H_OrzmacA$d2>#^BeQEa&~qG*j`pv*4~kkp4+3A$o+kb zk48pR{QN{qOG|Xq6x_3PkmH|@6`2hdxIc~ETW9>5-@W?E&GP*DBdJL8#~HW#NJvOv z|GP?MOhrZ2&T@@!01Eb)X+3YU+1Xh>xAS}jc{+M}8h(DFAS{Z&k`fjG^$a5uB#_P> zU%$zfP2uSs9K`F!4aB0bI@dPK&uW;AQY!Ed4Gpzv_PjpM-2QARJDoULQo36X3Ia|} zT!4_n#6)g&3o|1?X($+e=Je#E_Cm?e#tM^^L^JIO z!Xgw9fgF!`-z(Q??rm?wV`6arq5Ba~c?J=TzPABW3tuD@a7(*i9kvY*%ee?RTpcb3 zV6tRrO^FFVDKyz_PV6~;wLRTG4wiS-=F>1!A1imC!zq0cwHJbdf}tPgYb=?HH4>tt z0Pq0a74p(%MFi5IH3$LVb}@;x`1r>eW=CVw(}do)^UE;P?j*Z+1Hf>aRM6>Nau};l zgNj>9U1n4iHei%#mJn)B>V&aYD}B*zazjlwH!z^e%E|(7b0SY3M5J_&)8I0K zeLoZ||5@k2G))r|lYA9Mu%|p+Yy|!kK*!f%dlUheUapuBONuHhu%n|xJoym>bUbtj zqpyk;T3`Wwen@jQmP~_`{r&x)Yin!YUP#H-qWTn0_PIIE(&b|vAY|OkJxUXB{2Uqz zaQwEb?T>*Q#Iuar@^Vodo3dgA#J|-h*dB42;sByNC~(wDwcGA)uLA!3`t@OdxrL&j zpa9U0id0&9-zzRM8YNj@3p6Dcvth94G*k`ZQ1~3KE^Sn&=;gn1HPF!<=lpv4gV=m#=aB<`kikZDQWAqU{?G5|#=R30 z%GVEfw^tHa-(L<+m@oaP&sR48`xSa_PjgP3ot!|Yuw|sBamW{P^7M|BN>qXPZ^VLC+Cshkv)3McKJ*wMbB{emGB-B| zQl>ym3Pi!UIRC{)XTz(*MFqzACunG5E-rOtn?%rP{@c?5wt=R~o@YD1=gU|}oyBAe zKvstcd8S$PlFmI!SRjWKewWQqU;yeN`^znQ>bzPlm#)*LI!0JrpliZV97tdRF7KR4>`-#6VWPW^H3n zYlvhb+6#G|pN7AG|88HYU)9_$?#ZXK%}CiDoUJqoc-UjY=s@9d*d7%<=h7FyK_Pvn z`+ic5ZiD^Ld{v$c=bKZP)#0V4PoM{NhlEi==a$cXj~VTewJwQf=mr5 z`!q&PB`4p4g%*Ga6h>`w-%HQc#|q9U#9yf|DSyv>$Nz1^bgrsk%#+C)*}ye5H5DuX zw42=UZEbDa^+iGnSO9#~{p#?oE>&cFJU&3pJeAgNbi(Ke!eVp2<7l#4Y*Nl zX^AM}9PR#ae+TiwAmMppUa7`~{++`D7hBQO@%|4GB&L8kY!zpU2O*A@Y%F}&69%+W zP%I|QhJ=LR==|iY_KGe7G4G!A>0iznuJXi1Zsz5|eCSt{EP4})r<2C7khi-%q@|@- zR#&MsFCXi_lH?9TT2$Gq(qzFT7h(|lDW9nT=p>N-;TfV=ZdKb?50OoRk&%TB55o7! zEKI0W&qY4NAI(0etPm%W(9R%u9Pjo1W3-s})YNOd&c{U-pM418YZw@^K0Jmh*ou}> zDj-n#x^=qgNsMV@4T_|*O={EUCgex$) zwj34K#!cjWFo%C0=hzoR+ui*)z||c#?1k;HyI=0NZJj-Kyg`fbH~X2dII1#pFkegZ zfN^jCGBTBM$3!^Y>0mB8DylV8Jc!SJ^Xbu#Gt7=4EUevi3IT^+mmAGdd^K%RNlE0_ z>5=Q}A7f%;!y6{@7Us_;rLU%N`hiT1@EWQYo342i04cSGLEpyN|SsR7=9vfgR2lE>j%vDh-X_ z{=S8wTMPV+tWwOi;*upILrRji#{8rAxvwBb^K_r)s$Tp{oVHu#ysWGY{r6V+C%V}T#lNqAi%f<9vPV@lgP@f`{P;SKvxij z*PBoRmN)O-J!fGFHyTJ-br7)SBh|Ja;#OxS@VcE}2CirvoSeXHc4xUo*r_q?VsDy6 z*({mMRIDQqqg=D3%4#v0Owb7^O8~XfH95_A9Lj-{jMWzqi~= z`ypc_@mMDB#CIvHZn;p=*5~188umo^`};o%zh>IOJu(_dAi|)J?CAjZr7d1fiWGc_ zpZ5~KNIhNO*f`lO`i^KbAs|uymy1kesl1QPKbottn;9D z*^0F}Kc+MC)CyN*wsXCIjxIm=z!wNOpjdWJW{L-8$lZ12%TiKvOH6!|EqGr(lfuIxl;AJltIY8DO9bXf%*uP&?l@Fo5(2p=M=b z0jMkH1wVZC}+ZlTX)tdDW_qQV{+I2}4LOo|Mc3!bq8yFa9 zJ1;r{_3~r-SHxVO^aXa?5iydofGMMHlUsC3%E0DOif_C8kG2*9^RvyNw=y!oASfp< zFE%Nucd5xeT&EipQ3T0LY}86bk8#Q*Oy_G3XlWZ{h=uzrWg$j{u}p?38FV!$h=Zt~ zW4>n3J)%}p_74aEAP=B0uwcb2=zREbYdCGQ1M+a?sy`bO)1CO4GZt}A2#AX0IqpqK z)@#^)V7iW7h!i^QrS(o%h5cYI2!R{g9Qqz`Pix~=@zXLyy!}0H9j?NVG6Zx4>hEv% zfD4rCaT^MHxRUA5e5mrbcc7{+nhY7(Xy33~wc*5y5h%YyL)}M5fgs&l{b;fvIqSqhP%!47}r`ZalO!{KW`5L3~oVQh$ z^E~;ae^SJs5^;1U-Q(4fW03Fw&1#43(ae=qTGfOtm)GEqTjg!}9e%P*OE#nvx4r#I zv+7fuAJ*$$AS*I!VKGw%28p}V-{nIISO(eJK9nE-RF(%Oykg?wzc&)~08b-^?DpTdJZo35;M`tnJi9mKgQ#=T#Cl$SGYGy{=>*02p)Am=VjOMSRjF_+T zu0?RZ&9mREbtC@2lH%wGN_84NR;+)7s_?KTh9aS0>Q`$PsC{3OkUB^ea15c5icrXt zBl}=z82a=Zg6{Xkjv%ZxyL#YMvEpVR(bv~U#mO1VR9g2dt4FL)_%^_$Nf#JY_r=oJ z?-mw)o%?-E=6XQQbZV;s-Zbtr>CcY z9t>ptoet)He%BNJRJoNE_q^Ffh#W{m3>h;ySv-BxIkmrUQTpSw-%g7o`}vk~Jb#*; z*Yzq2q_pXBP7DhNO^GzNA}%4}8>|)%ho@%C6~p0hJPFH3P-wy6`1p90!+$Tz;3}5V z4*$J(dlUc9Fa7JGV*3BT_`k_TaORhmk)dH>8PaB^&Dm3TYX~%wnyxr^z!(TDHJr?L zSLNSnR*`F9i%&e1-N?CBy7;;7uBtquv!zq{^XFOMfcxS9^RLp$-Z$=5`Uv59ZCu#& z9>$H9wA^&r{o3 z3}ZS7LgbMGmATlTVD3WX%Hep4r3SNO)yz#HKLQCtX}9H98r9Rx>QjHR=4&&a3cd}I zzsfyjJZMt1Ab>)nPqSdok8K(kuRUIeuQb3|6VZMC{PFmYzjE3f=o?{|fn-^&>35Im zP&k>HFd%X8xj*+uOYHjicC(6ZqMbEfiUbUnLk-@HHftign+(}}jG+4^GsM-^^&9aE zR-KNDY;z5_4M&Wjv`?X3pNEV)%&I?B&L02vP%lx!NM%2{QcCHLOp>X&c4dpB?7_6|V zm22;_avr)|9=IeSxqtt)QAsy_1O2-spXoiLg*w|!Mkus^&d%PxT>Vdq?&JGU6HM&$ z<%TG+bh01Lx5uhXC%Uy+sHu(etIA!shSPpL+}{E}z_PNJz_r^40V!YY``6zJ5Fv7` zjzEmH=G((;wePx{W(!ul=^m%3TD4ZRuU@73`#-w5I+CxoS{w`_sIcFX`#%_a>!_-? zw*41WKt#X=5|T*am2OFO;)3Re5buBp~)hx?dfvr+}vEgzo(-Be7iA_n5gp^cuxTbgPQXh z^V;m zB3ZW|5*qMhyT9EOG@Yq7rfjS0AMqsA^3>k_acyshP-BG9_CVRhdZJCy~De>|B~0gZijdmAk7~5 z@W@_j641X(%v)OY{p#!}?xd0jy{L2C1t>`r45HT*6kjtkD6TIK2FF!&h#lsFaOgmI z@aom8u|kbl&;GUzvx&37VER5GAm3tW6mO--R%_z+g(mNW3GIaOu8vMP;}je6||Q zUy6ni^=zhi|EXT|>I=lC7MGO#-2MFxo5j=%pGNnK<3GFy?@WeXlMgSST!C*+$Z2J8 zfA<$ECI+}l`wb_uX5)E=9>@^L+jyza0W~$XB!2fFgjO|ga)iC+9VZd*DCHkvVPn^x zO=uu;xgJxL8xL~qJX3G-;C}n|ZKt!K&wvrIE5f^#u6Kg}hC7Xx8xN))(-qbDaahij zSk2d^LY)l^C{R&Rg}Q>C-03{M75s>ewcyKseR6y(%|4#^M`KfKxF6N(|J;c>kM+ji z^q|Mk3^&@YiUQ(o-w%e`oBjHpfdRvT1a|3o7XMtuY=vqoErbP^RdnS-b&+6PhON|<*Fo}4^joZ{K(IH@I8tlc-pO(R>7&Eh#k&a_^N|cxnFKb(rS1rF5vsay zB5qLI#b-154k0{;&w@!M5T}P`iUncCg=s6%m(0Qq3=Nl$TuP=bGP1Mn&&E|wt~OIn zn(zN&hIa|)D;L&WEV!R7ReTGsJutVIM~^gR%z5Lmz%I4Ucd&Q$R_LhDtn$$(Z`7#Y zkSi7m85v48Ho&;)tf|qecLE4okBfQdIfqf1jLghZvvFFt)2-H&yHo1b6=(QN44$@& zFQwEE@b0bhd*2?3iG~u0+?>M^YgWT}K@LAvq9^<-dmr(j`CdRdKL!<>3g0|?-gPsX z@3@;BNcX`xt|Wvc)+0Xtkp%7+MJ>l-y8esk9AS_VJk|{;2xq((lw@h_EtXFg^$|33+#czm85|fe>dsKa`)h`6Vxr$D=L zhUT%!RLQT1HRO9L(n9shmG(evq%a<8I=W!^Y&FQIo>;!Xf8Cu!LqPx~FQtCz3o>_7rLT0$e(P_NJ7eSS!2 zTsBKSr72&gbL7+US&g1EHC>VcW;{uFz(k?OXtTFBKn$<`+S)B{wsNC9-5UPF)O;I> zPRJ3LpMeEtCjQSr#%@|`S#tf^q>%#o9jUfr5NEG@oZEi#*!f`QyE1hJC7K2B`KM{itrFht@gV-gh2V7SkV$jHp5h*jN7W9z0JNa1hWg zj`c^wE3;h{#UK@s{_x=u;OYI)uzJhp=P_BNRiIkxchGc$Q9LPC?*zwZF%XaV+jx@8 zMqanNx(eFcpe(RGRZ4zy4qr`nURWL$BQ?A^hx>S|dYYKzY{z){9=Cix_;{*riif58 z`p)D28_2{qBJ?xix>8qf!<~Ewj9BmLx$NxiLo@1Nu;}o}PNVG6o^LA39tHe?tY(ckH!ml@&JGA zWgC1#@)Wspqk-;$f%VIy)eYL({@-nF5|WZ+d~+!;u^_q9X0G8w6!+#IJdAyorqsI1 zW6e)Cu;JV-s2bRRR98)x7G&)=@j97ZU0pk2`=_T48-po2YXv!TbDAU`heCkOQEoH< z2CHPVqq2Xx1^J`lC17H%oVmSXH+xxbJV^ECjqj{gedzb^FR0{x_Je>iRiD#xrky;T z@Ao-;7NDvnBqZoHszP!Vvyq9NnJN38#HP1U5hwFH1DYZN*kh#=IYO^aHd#$aD0U`` z2PXa*B=ZTBUP5OkBVPFB95!v&ddPyTk!4(lgDA} zg%TbiVesfS1urkJ$=hBuQ224G=ih2I@fqEIa*H~c=E6q;&K?U3dSYIu=QD$*n}3pl zMfXGG(SfI9GpXe~oGSEq760&n6!C6&TcMVMl9JhW1!`Xk>ozp*kdfNlOe$fgnkb)C z+FT*nq$Vn_Hc;6*2sw7!CpF!^4WT)BBddmO!;=i0m{zui(}}oj5PWzXcksJVfK}Mu zVsi@Tf=k=flI!78E4Wjfiyl$Y(a|4D8J0%n1Pym53IS-ONUNS;oz?h{L8~9qoae#Lz;r48$x!B3Z05{O` z0TZBYhccsqgw)lt@^T3onM}vs34fkC%80l)aV4df=95L}1QJU}F2Id@y38;*at@?U zsVo&}05-Wjnmt|TX#VjEuu-~5y)_LKKw6}-+8K)I{k#5k@nm0TC}Ch&7^71p;jP4; z6MUvruMPS5$=^m^d1IWG*B@F&aA#Fpq;?$ybpM!KHj+n z{%Cl|9eA6fBff$WcLSV@-=m{5pcf(r#>TAX6ZCh-vCW`&FB*d1`r983jX}`q_R`j< zKdu!9A;0v#Ke%UhJvOMan8tGGKZnnPJH^e--Jc?u(nac>wA>bOa(gmJ*h6wCm7G0fjJDyZEK|Z=Lrzw);&dH%8 z@aoO{m)`IhjU&f3{iL$%s1e54U=GWfp?no4z<^KTjA-z@aY|q_{Y+8&*zICJbadO` zWMe>R9SJ^D8O-Cj^MtatwV4mUg{k@WQOo_^g`l0iz3Y-MiXSrmyu+vr*uQWY)bS1R z6ir1PoVSL2!v*i+u1+>bE6r6teE2X`YftTdzQ@dwEGZ$Ow>^>xW`mNr?Z2(98H5q@ zcHUl{*w)X_*$?t(IWxQpXcJm&^1K@KzH1Y_zml_RJX5x_w^wU)V^>pC%k=VwKx!Kv z@k*fhWxL9}%jKgLu3!40VfFB9uXpmF6LEbP4J80Bc0ZVOWZS->g9buB69f{0MQdtd zHC;xT%;Wg^>UbSMw{jJ!K??TUAMI*8I|a~>2AFDd-Uxp?oYD_JT8olnF&TPIMn=6jiN68`Sq-j&Kp z?R2a8x;c-N0UvMIC`PS1fD5qTAOvL0)9umzWZu|xvGC(5{cxOHuFoqcS8;rBfUU+uPfL0vQmMl4P?>tFD_oZ{oOY$*igqcZ-{Uc6W<&SkAOdF*UaTy;vNyte!`H zFDr{-YHHg5lRuGMEDZED!$|lg&CF;Ovt`%UV|6->$|DjVj6G{>Ydehr`Bbgi3Isl< z+oJ)erw&cG$5KuQ3j=Y?`jQPEc`$K_4!3ixO<8^WOVYrLjQITA)t;q-Ob%m)%G}jy zDa%1b4_vzG2|8}m`rllCR*%5FG@C4vF)*M2&-$E^zI*iu-<=TWuUcUO0ap2+OKsL;R9LL$YCg!}F^cFm#m9uHqlT@YHC)CsS+|m4>B?ZzRbV@ z@B5p@cy@DK`;C5Jb4-9 zEDPOTPd2Zdxv7;IpaR=_v&xYMSNqP8SNhV3)vENJ#y@$T8Lb=7aF=vA);sWYo~s{2 zpYb|uy|}qJ*lfDlUp=3-MoE=R5dixv=%5AeUo5zTZVHu5f`J9eOtFq2IOkAEJ>G+E z-hfbRvqgV1e+Q0zg*^35LI7rP?y~NwjW?2mcim(DRXC+S=O2&OHS|dGV47 zvuBD5y5ThA)Qq9U{j;X7)H!1YGGmV>jDoF z5lJTlNVyzxd`C~n#lqGOm)oFF=nFzZa{+qszt?AKm1Z%uQ!ijR*>WjVOiaby>v90Y zIP^>SOD_=y3i!x!0ObjNt%6 z)TGJbk4ZhKjzY+&&J{Z{ROwHzfkkbhf@F#8`OCn0vB?u`w16>tx;5P1)pc?*qIOlT<`Sk%7}&wp@zQ-c)I4&f(sk1=u%wqNrUj=ABKaO5PX`{#?J>Ofeo# z6LHuc$(+LUr;|zJZCSR#_uc(apuFpf$IC>AXHFjo6Cc+tpJvP@XNc7?G{xg0!ob4D z9_Sz=vkUAcK$^X@_?6(6P&|R%bmU2Jhk}V@Q>`aN+%0kPF9sNuI66A=_W}dFHAkI< zUwWa?UiHTpm{3>DQtsREjl9gF7i|Ypt#O-!%dqvlSN`$!Uf?nc*{) z`j>~mKoj^X>XuI*x;2K73jXYgqQ={OlQOuunjS8&ayF?$O-1!BR@?2ZiHuGCd|21& z@^Szv2Z{1Ge}87PF&Ykwsg~pQzI-cCj?E~Tw&1YfAXLt;97{HXKp=1VJB;22HhJER zOg1(lO>Y>Anh#ZLwTbsc>0|N|p6-_X45tD@G zAjOGm&1IhID}9Co2m-;TxA0H)Z*AvQHAmiZ$rV2n=N~PVeYKxZ53sRT{#eVs3_rPg z*0FYT(40cT?^dGUg~3OHnat}<#mAS_(9jS}Rd;fHjL+*tpU7#Q1=^37OJAU(qR7P9 zI5!5h$gcWwUh${*Cm7l^+Pd3MBjxHzEwK&C z@07KiK?4f79s;D=#j)+}(Cf2Zv1YHo-90^e=X=ut!*tMmzkr`?Nm7Y^cc#xzBKHe2 zM~Op9Iw&XjSBVC7&4CB(&I}q=^mhE}kchIS4%v(gu84(I(RiHu=h4Xfq+EtFOC^mA z*@Z{#ZX>13zlCA8^giR8WQ*!$hUF}*tlXa0Y@vjl80rLOCq~}C8%;;EMC0QpcR|T! zZ=o@nciIjWS(B9`sDB5U;J)s14VH@zNDd{p;U}Yo>4n)&?otS z^bid7PBsQWSuBK*^UqWbJr7U9LZf@R>xq$UGEYb4q_&iY2OphE(VBDfO>*fz9e53W zf0H9g<++}0fSXsSQ9aV+>7IVOTim>{8ZO9KK^g}WSG%T4JNy=cx=(7dq4}p1hH|u` zMT)e*F?6-ueFh#hz3Ba6E3UCg=?H?(#}Vih<5hPouoWk1|m5AR{AlSqPU0l-2jaX>U*xv*r~0tBhRXWwWfLjph+p-|}I0Ow+f#WV{jWtJOlE;bZ$ zS=FxN0!(CnaZ_)L?_-eB%~o0JUmdTrSxkN3Evo->iv@{z7OOAwden(s;>x^aX*Ht| zqPJj?uu=Tm5_R3DEyad|x@M4?lG49=(JL`l$1C1_zcwJhs4fVHP8p2ud_yNR;!{1n z@|bhmEmWn)HTsi;dKtCsxI00~%bOTOr-JLDfiP2TEtkyWXfmFMGhgp)JW-(L!bdVw zY2F0{OU(Mn5fKrm2aAihBPR-J^^e*+J69ZdLjPFkx|LNb{UI|+CCrL zvH11t6DrxH?$hm2*JXb^g!_V`U%~+_HcRhEhc_=h1V%NHg8aVoh995)l|oDLC^I_$RUmuc@iAyGpjJ)gFIG1VeC2GxHfZ^mzCM@BvVjO z#O3=%Q)yp%2w)KNKs7aq-n?lw57CiUS5FXiQ2E;3-JNRMgT!0DGp4PndojLJ@R&wq zl%1Zp?nkBy$>h5iu*b>Ueu|lJr+P@qc;JuT_n;Zd*A$g;>Yzhgys|*pVe}Srcz75p zCYBhC2Ea$u^5-CN}m1AgE}KU z#l&Q?YyZJh-hn-3TggXAJN{qq+y+Kv#|kMw?v@e?&lDx<8rizgLnpQ=D#HQ%@yI#C z4x@-*cjxyU*|N!GoSb;sqk*$IfA^YdoqVTa~l}f z7ic(wlXMIWC=i_LlW%W5=B%767c+PS1xafz`@ipqZWf*tnfOvv&0A4ZP*9i%Z~5IA zC}q18K%J3jrs88F(JXf4M=D*{i2l>wbwz*NIzv>EFN_eICj~B&tT`&<5?tg6xWf^; z!^6W|L>Rx@+CusH^4!yA;ZBcV;NcnP=Pa3mGW|xuHD+Vs zB~AeN{}P||^=)~QMXZ#xw2&e%Gt~mBX-8al8|c)Rew7V4SqX2wFXIKffl~DqqQj?5 z@HB7Jlmc|(`rZu1VcarMX8*H3MG;(1bk`bSp~Dn1<)7RJcZqm_(3Z~P|- zk?}x$vQOxryS7%zJ^jy0G8uwd!dyCPry&N;fq(VUR7vHv{E=b$~cLMh#TLCv$=FJqwjn{rnVXw-Il(D7X65e}4>u|49uSYYxn|`3UytL~S)VF2n|NFB6Mf zsANBJ_5oe@e|}Ejnuxg3Yi zj-SS2B|)2Bp)yzNBcDh|OIj}!3e96l96%l`a1zpGoo%U|e92>-e6g;qq*0esmM0BD z2vut-Mw!>G@FN##_VMtm9`&V*tUAvl7;MbI4DV&iN*WBN{DaE4f9#Ci=Yb6?^w5|NZ zh&-b|);vzjy4`qqKaOwb(HrWn1GVjWCdrDMZmQ20c90jK3xdw1{#@{hs$%$i=J~{H}DO!2$tBy#NdvVMHjk5F+%G=Pz|p_ zTkyQlQZ7(!7%q4>kA7c;yA-eXkBH(c6jv&1QY<#lupmi9+S-LtWfU+PZb;< z#?w~h=j4n36G*cDV( zo4p0C8;+1cPgM6mrC;jAk4*p30z8y~UjiMbTg*QfTxk}&_2AERJAPw*okCYF(wey*JFjTD>WbsY$Z$|NMR7yI+JTtpVrW&U{DF29xp$rbkb zNaO;=3Ik!{B_ma6V4wvwh3cK)TT`XvC>TUbm6O`!jEqG~g5)@<1uLK3+;{-Z_^69C z8}!Ltot!whxw)YtB1gZ`m`bb{1qj$oS{SP5?1mky_(?D^0@^e~=J&0QNO_(5mB=49 zob_Moly#WIJnev>!4bMQnvFS{C8PiM`V3S=eIKI$VU5%NoWx?2r|E1};nDTg$tE@d zLGM>o>=4;KE$8`;42dW%yET|?lDO-M3t#3=cQ8zRdj?7H_VBSrmBlZ)6oKdX?^;|2 z|0MIC^wJf-jGu}=R#djNohVSFprEkXEv!b4xxd~m_PJjcRZzgPwY3HJB!*6f#pO`< z8wN3fgNINk0sH5_*JlPsMnF=K?lGDr^Pf!xGFUJmXeM%4es1wWoU*7&txHNGDyms|MkSNb4wTULgZy3f2Tf9T zb}XQ++y9jV;s^eR4M5Y z@J}@YSg?U=grXdO$6T%bbh&XjGsBg~BVyf?>mUS~L=JYm!07xDhcyvsdvOKa@AA@x zjGTPnlNp{SvLOU7mQgEc-YQ!xoMeL*tQYW=y26M<%hW5)j;fpgqK9`0o0*yUrhln4 zpA1`W3n2TvA(4fr}7#MiEI~nfv_c|gfs%>w& ze7eDv6+9#W0B(Nn<94=#cz4D(fI%u?!H5NcL`W7@!2K*|tCo*ko>8`qGv>H)Sj~xB zSusxPcsJHQ^8s9++tX3GIomE`p>^Ptwt1rUj{9ePe9!i1w&`3AGddv$TQ8^e!gCYk z2g_n{kz8e|Sdi@seL;@+@xv%uL`)38s9F})xKohP30{zr4(^QSAGz=eInt>VJ-=4V zNK>W9U6orhhCtr_9H~G9U4GD-X!i2_cy+Yeb#-@h@TE6nMbk`kuGXF!VN%mRG`Ew9 zocs&tg3Fhrq@>j2@qCrX-; zWg!8DJ^`DsMwJEN&VlO$GZRx59O{*3NV*}tYV}SGyAy?N+YX=0r)zHZ>w$s|6#juW zXYeQgLuvz`sYJSe6=A1Rg3Uxm7MsNe_lthmxm)(8%hjqZUb$cF8?JVSN++=84n4Jg z>zx@I{OZ*!uwEdONb@eMp%I4{IAKNYGk$ji&~9kpXOoK0v* zCvptX$Vp2BS$XF%MJNF~7-Y@J$|`e$t7plj$a;A2P3m~_;|BX*EPAKBRm?)T%k7gB zxT3(Ol76=!m(hSjRH~d1)(8`qQJ!%E4k&T#=D46o0C!ro;o6!mr^XEyDQ~1zHC_EI zDvBH!7`Q3J!)ZAajfzcmIAdOXG^Qwr_yQNVlc9RW6J*wieZ*ACh) z%SZ@jlSKnVzl2|L*`#ipKp+viNEgX8VQHTgKnTY!KV0~iw!rmd1GGf{$?GJPl$3tS z_!KD9h4Y`QepGueDf#T}+qVXWhI-Yrfnj0D0Qi?hF47x5U{t^MrvU~_QcQ3Xa&TY^ z7rf(Qj12~I@YU7O;khp;m>k3m>$w%SM~xQ?tavzJP^r%OK-S5Lqqeq|&1486pWWp+ zz2mdqc-|)=Ltyr{ne4pqhK>#`dsO1X2fwQq5J&`>E8ox0)U}WMF?}8vH;-|>B~#E+ zs)sticW|hP$Y^>Aax}7tXZq#SCDRtFg%b*ndtlRIgFgyr6Z(RT-ru3%OUuI8+1~!r z4PQaiOfU#0E>SygXg^5NW2sUOQ>7e4%LZ$Mbw2V``7_WHJoJS!jG9?A`a-dh2 zofNYI)Qpz0j_$pK0~rQUA$!wLSFM0mAxj9XG-1~3QzJdZeM;sY*HMZpX zogu$$S3Boy+R%Zh5{FJ1xP3G0cRnww+o4^ZVm1B)EERd2_QX9rZfiLaKL`tl-v1dK z1TFNvsnRb+TJVA;SI5G_ zVxn#*Pbl4eB_bk%IBp)g?ad_uot?tA>V5p^@@mNrtUI zp@2tCZI0xBRLMcJVTW#wK>x^QJ`tj#?b@Nbd2@eva1X#8_8a|rzrUh(9sy)T2tMHeZE%-+lqzF$`iJFc0jsKi5N7-0*o! z<*T2&SDbO6R`=0rS5JSx!QoPCXO4+ao#XCEh6J|P)q1Qw$|~tF@vB!7A3l8eSUY{Z z-X|d;!MxA>AL;F1&A`AwP;Es>;&Y9hE;mjLqq*9|jYtp!nRuL4e%M|nDjM43+d$u) z?zvJ-ho$idJV@@(F~*vA537}$lQXuWf=yo{D3p+sMZfd8dX+^FXmVRwF`7>l==Daw z1;c@Lj=PTlL>^Rm)hkSdQUp9f(+VikK`g%76;92=LvUDJnf$*>Z2=v`2aEukJ4_a7 z&ANCxIIuA@GpiQfNgRL~SN~-{^^=E)S0SX9QzmrW2iu_JoWhW)S;;9+Dzd7*8c9I`F{Dx z1=O1_7Tk-OU&Fg2$ceaYe1yIr+n#R8gGN@hHEAdz=f?GJG3O5o{uC;i1b}C2xz`q< ztdqK~70K9;Ppg0Qa<5;qhnolk;lqay((L1MsgJGqyYoSu4|YF~pkOkxaYZvT+F!qZ z0c(9xyIS+fq7V}PgoCD=utcl6z={esAXW}1;lCVBxij#%`2Q=H{SvXoXtLDeyEj)G zmCWlrQf;lH&)WO1LIR{QY<}(w4X*U+6|m^&mn$nP2!QqrN^z%IrQJc}1+wRTwfSV& z+M0oKu{Lq^meoHZ*r({|nV<5NiTK^dXy^c0R}rwTBu2gdULRd;rj%RF^IV_9(JsZX z?ym;Do9HF14yo&;B9{b6izoZ$YVBP&lbyvSB$$7^Ks|Kf%gD$$T#J&!A|QBnSv-1q zwCW14oCG#@q0oy0wQ`pwUlgDLP|lATNaQ@(D<3=_kzzVJ@V>8Kn*A};Ay5q);{)gV z`;W?-dm~S<=6#z*K!L0h4GPW3s=wMuygHw?cD;dDUoCyX1XBQ@Y@<p-jqw;sttya~unjS(Zm?RW}f+@`UopJdk>V>!0yTzS@ z5)u-4T9N5|NRe}y5>BK%4zSG>@1H;oyqWBL9NT=G`H^t_Y*GjF`c z>xO~Xd4Fxzx*2>bgorzGZOtG_Hk;XPivFY5`JNj2u$GPe?-3iGWG*5MP<<&%6Z(P- zS`wGFvdKJ1W^~%7SaS$qf&~nb^6(@8rMPS|PdsLAs?k8g5vVcUUfPl`TWbpvrhdv- zMgSLV7`ep=-^7jB$+sZ$eJJO^VB*X!d?Xeeg#VvfNq?gY5&;kV!~vs%7_A>zSXf++ zJ1;@hKk#X7a}&k$M~jz2Y@(}D_26dx*4BnhA_s7W1&OYr9RH`aV>egTs_O}er_?uyyWeIa5q39mCu!;0X1VRM0)d2xs?oOV>>$q z%(n^|!e=VeT~9WEhlo#=?g!MvvY{*)LLfdX(yI6C z9UU0~FW@uJpLyM@N5JhRio*?ur8bxat<5kawPVS=f?0*ir0o&RL%<7@q1cBtfBj#~fS`8O8 zy1Tt{fX~Ey|Na7;R6qIMF9)o>9)s*aDwc5_UcI={AJ0lbO${6iHU@!Ud*i43K69ga zkBF$~qY@{$x@~jcJ0_>o*#ZvGz#LRqDE;I*%^TRzWEq22)}%!&3@L`)u@306*Gqy0JPw zKE6EeW4byWl|#JWTDF?6V>al1fndQwxY`*C0v)jZg0ESs3dVPUZc-+J?d|1{SWts? z*c$R38&jGn(&{_i9t{i+H{P2n1=6_cMK8kGJ`p9Qm*6FlOA!z)t74&vn_~=2@w!I! z0oBEDf$MH1w4R@$zk-UIr#d%;naaaN^Y{mB6`x1zW4&C5{)rnrCt8-AC>>iVk$u{GTH7s!-#o- zR}L5jpD7qxw~L60@t@qKcB@A&Twb?aXFKC`wxoNX zA5GeiZVY54tVl_Vzh-0%o2fJh5AOHx-!@!CQ}A<^`vwH7>cqAH%=`QEeSXFr+I!MV zbF1fVhVL1*Unsqk7Cs4j#aI-dsZo`n7UVoOKLanzudO#S+%Zb{YcN^HFxv2OIxWV~ zL_JYGKMRJ}E|pe5LmTAxwAYcbS#X0lW#h!w2lFuA*LU*d=&*E_``}f;@+J3XgW#q; zhM%9G**wSEM4<)^9i6a=NlrzckY!KQ(dNeByaLI~O9F_M(KHV`s0vji?i8;0|AC{#ucfG}Qjaj7a5jc$XLFCWip zR(T!v<;A>E`f&HPN2o~p@Keu3UXx1ouK@v4!O6!bC*}(Ii-9?Yx@oiMd3kxd9EtuC z4AfPQ`hu0U1qIRyqYdKJ8?-Uc2tt7yC_yN)az2h(rFvWrHYCD$rKW{_DjW;KE(4C) zaKSs+;i1h}e}9SmTtqg4(4om%)@2#!m=g0a99iSedXU*Hu6%lWBn@}9I-DQ5@I2PL z=zO$;`}-TRV?H9h8qynivb0X1Cjp{^t;Oc%iXem>gy`sKKuN>F!Fd-i{Tto3WkSW2 zjliT*ee2Ba^767}ago&5*LP^!;X_(tj};jiRb3$82N4l}lT1>ScTgzwxRjKV%#7~~ zGI}I##A6*D9fT@NAzC^*J(hUgQdQkjRfH+4KY8N-AnxMo+N%2wFtw4tAi6bbNADTk zi$WQQvFD*AElr-mo=YoSKFjaF!C*N?>}TmvC^WRkgzZE2XshnKr?ZLNQV!;91X~U~ zTW4F5q5u#e>NdYp}`0OB()n%n7?ukC85L~tN1Cmy&biHP`r zUvuK?dVIM~Rp=>b)n!l}9v*J;iPL%wOJ2%&Hud8hJw3fpubQu?tZQp)y34=)yRBMp zc%wGy=;*NdJ3Alu!E$n0@t?zjg8W)_zbn_`bRj(%YbIr2VCWc?6AYC}XpwTA|eocdZMWHr^^g458E&y zq@>|sYyn|oATa<9k8$bt>IA_@xlkSTKrt$UTQQiG;Gx_ti%2f_3^+H^pWDNB}A^ACvyULgQ4uGt++Kg*NcosKOLkqZ(jQF^}{9a|G~D0Wwu8mJ#5K44#|QM5qcr2AKGz z7DV9b+e4iKb#dVWY!)D%a~beQ!+YnvuSvw?@RZ;Eyj>WR|0{rLzkQ23TV;v8VrOS( zv(^o{ZN9&_fAQjlk6zn1p+aT-(JYy%O7qwko0qR1J$j_eMu0d)g7ORlwo;S|y zuy9k8nE{{2?%v)HrlxNZmRfutyIjmW|C-!AYR8saYDFP!_eaAkG3deiwTR^NDPLJ{ zAc4I^y%3-I^OLl+v=aMGSs<6AVPwQzi6+4-&}k+CBg7wsg~2^GsZ=jeD@RV`w8mWs z{^xm&S#SvFH`;5#8uw-@%|A?+=(PbtZwNl~BM1cY!Bxx9*jT^q8+sg%Bke36L>^6d z(O#o?vTb%&<5K?}zV17GsNp$RvMlvp-@y1B6xv*4zgG0Up@DC0V}tC?8zI$gw$JTP z0m&X1j<*M5BO-u-d0INUQj=jaz&Jp7XEsIyoS6tYt)QBkNhKpYW4VfP{O%mrr`wMa zF5%YR!4H-8W^ci7&tE;t4aBBiS?h@cv&EueM1k%HjVd`em#g7=@9;}pjy~&U_8%^{ zF&qCO0zR3Se-FHw+Nr3i0Vz2RX9K!V!TR5Dl#in+EzPEH(6f6p~2sHlRJ zZLFtC5P@6J%IYcv3yUn;UUSKHXEt0E3I&UWhKA<7jZMi%FTjRgfmSO3*L1*JSq>om z@vtdojGOJw333IXfd?ko=l zD=W6}x95<^IUjh~##E`kyqa2|=gm3lI()VokE$FYb#fOh&bb;}VVbD)oSdg(;Upc0 z%WWdzUyxByfaxZK;#u)U}5r+8e7!%*`&!%9{rURk&CLK5Qjd>H0%l`0 z2vrO!M7ICjjW8l^teBV>)e>FAiPL{UO*R)vW>F8wXodoY;ka59=R4OrQ3|qd#e`nN>58RVjjsHLa32~7B0vM-1 z7(Fk)yvoU;>56@XKt@jfOCc9ZJy2~mKlA3dX!hv1Yoy*H>(Q)rbH`79cc>#E$}%yD z8AOmT{znU-r}yjQM7|1Bz*Dk|{N45>SWfOM9tRo#x^&!~&|B>c-I}SS0|)NSL9p3Mex1qB8DK3eUP*VLpRqvK}GDJW=fa6QTR^f7^w#$GW0$~s7 z!9IuV;`3kwnUC>JABL^&&kPo(VGO1P$fOT zuo%z7QLi+k%rl>@VyJW2CfhN{V1|Z@)DaArRocCWLP_4RvAqPHIpE|9{C~g#^SFGc zprG*1e1hKLV1XD12S>K+Neh#{|M9Wio8iK>n)lhGzbt2~MrbQ6XK{h&dW@~+Qf<;% zdL^jcBV&?;U{lMsSa76!-`~B%e@;V3r^q&}rKT3h?|z=D)9iJ4b{3=j0Q8V&h>m~5 zqgSb}SE~8~7x$Zdx~Se*jyw$`W9QCze#Fn8VId*UD@;d`TbStTiM8sT(2dH~VDbv8 zs`v=HL#aYwtUc$C1xK3!OCZ&Zq)bL245m(7KK(pY^vm7f8}J1XeA30jKZ9`KbX4wP z?=c-k77HWt?f48iKdP#?TYttz5Nc9vkqMYbl$4a9qLcY4r=Xx=wcJK?$PU06CJHsS zrb^RI5*trX9Ud6({$<~IY?crtrKAq<6R|*69Kpvpo6gJ6PaH)h^Fdkp$44VJ0%ng( z8-(`~5~wp(mcc_qAAy|2na`*}zY7E5eK-j}bY1c(I=aa2MB%|y)su&vMy=eaM}1is z#J0dm+`8#1E2luESbJ+E6HQW55&_|2!JUbgmKHFvU@JjELEnG;_!buz#~b-a5_oF? zJIjhS?uv@9({^?W97CnA_6t&zV zg#Fr05()H&^uFiUt;Ny31AGQYKtKSTSAcNP7t8bjDUa3hLJbxDVl`hUls*i`vVn*0 zKd6Vmy*-PEwr-Or?`M5|;7skg%Tp?NU28l@0$`;$I5;2k$3f<8dwXdM7~#PBe|t3h zXjqICSlj}S6{iLcuI>5AZR8Fv?)_&7wdxR1Ux&r-co$~=ki&MA0 ziwoC8p+>;in9|zX+R{?%7u6b@H_}wtongduu9J249E|u}Hm`sG{tXn)zPKHd_(qe$k9282SGcUU7xO8w3-h6jftXl8H@Pk2vDmuX5UvHv7 z?Kh%=t*!0Q?wPo(Z0AZxFya(Ona5g$*vt4KQ79B_U*b|yZ9nPlkq8=ti2%`iB$&L(xbj@SDDdvwr{x#~P^bBhtPoOd9fd%_TuGB zCHQg_ZZOi-)z#DI&%c78a>lUVh_y(kIc%a(qpz-M0;vlrG&{@dv_GB|!OZ%^-`_tc zC+B^=6FlS7+9OG=U~$*mc{Z8-%f_130}~1LPJt+ggpF&g<#&va)E6VarN& zc~#Y|(~l(S!!&e(dz+h+H2GO;9vo?%8N((!jRc{v9OjoVUm_s*efc7?&XX)VAv9`M zNnkl!6@y!!B$^&^cGX=@GaQbLge38g4_OYXJjHNwRMeM@3<_Y^ii(OlVn$~6I#l#= zsOaNL_4%bh9!Nxfp>`vI;N2zp@3uAwE-qCel^rjr96+JaffTYpD{pUaFzU(ge(q40 zR-dVe2%vVRrf+F!X?0oRbvY9CD%CT8twA00A0-mTNCE@-LS?i@ZA?;9QoVZ8WLawI zA#Mrkw5%ejSjL*&qWYm`Z*Nl^-_=JddV-SR&y1D5joiY(!06l>PS5N(_4e@eL_|<8 z#EprGc^5BTqDo()N*^h1msM7V$<9^!}Jw7tk7^RY=|r4e}DN-Xf@&G^>q-5lv7f_oq`6hx3@RK zfP1*r4Rlsu+sWfrJ%9W|_NY+)c+fd6B^lXZyRGjrD8PUp?0GBQclb#~Q!56_B&4LI z2tFw(DH&O=5wat2x{*C>$D54g{2>^OkFX1=sMRYP6uxr|_0wk2_wr#}5rx1#9-*rJ zz0~XEoLTC%q&RE{J0=lc4epIRs6MCt2n@91v`Ok$_`iz#&ZwrkZtDO70xC_4R0&OK z!9uS>0O`F*300++&;+DNkrQ3gccU^SsVHW(#{N?t5eGjRnC55TJlsm`^ku7glP#q%?upg zM@RcFbFDb58DDL+n9DUgS(=|6gH?~m>(1T(kcxWE$H=E(wvUzOkQr3Y5&6B85mW2LMeu~))C+Im?9-bX<@?fPbMjs_{=W6noM znROKkb>w5RHJ2X&cqGKY$Vkm`aiKm2mG5w#fG^CNibL_Ke6F7La(_AiMSvg~uB1c&ah+|B13(ad%9E0ikPyC| zHMXvFD(L<7J;A3`F-le`pO0n1$4)O&QWoS+e^dHwO-1?61~Q~edJ|f$4=wklM$+|Lqx^K!pBN20DuT=xRkT0cXxLgMH~&# zP0hvz2Is{l1nFZ|cmgaImzL&^@w1&^w#U&DESP#EDJ5lL1(*G3@wrMkmly>2%FD{K z6%-U)x10dP3Je!`&}3mG7emX+V4#A`$>Gv?DNK+c{rx=T zDlac7SVK)srR|v}FcBGy1xXckQIMC1JiTzm=CE8d);6)RISNb_Q;MNK!;0+ea;lk( z%McOmHg_T~vE~@Ae9j^&HsUWuG(~HrOL9m_F;i1hk5@gU1U9iR`yPPd?ZBuvGc)t& z5@A?th%v&CSjPV+Rg#$iJum>p;cyV=%%#CxbpW+}|MBB_a`ICO2B9~$o$-vf?WvBA zkCn=JG2bGhw&>xjir2vT-6a7|ju+^Zl*p+mb1p8fuN9qaL_k49*qbZ}W>$wORbT_C<9TpF&t_3tA z+m6`QWBe>ETFUP`m#FI$YGcFs*TDfM0KfH8)P?Es8#gAOkXZ7Ct^cE}SS5p>JY>`t(WT0=umFT_jP6R$kk9g>8jZE8)guowmuybaP+; zNB70?OWGTwCCtFPsq$^duKBZugWt=U1Q2FX=l3lqdoY|2EM9|$7P2gc+%)r@u>JJl z7MNF3pq~fj;UR&P2jE==Ov)iZ#El5tGn}gtsW1@$MZ>|~Ismgl`SBhWwUxwgY_m38 zz$h0aJ?tnlI5Y(2egl76exqXd$NW%7WoKg+N*a249w&J%Up{_*#ryZUHF(hOVksz8 z7uv&IUNebiK?vOqY|cO_qeUwL%>IDKAF$IIYdH})*x!r^JlyBFaYMJ-coplpEbQ{- zHj9k^W&E@+JIMvckl5G@8kw@Jr-!qrL4Jz7eEj^oJ^W=>n_p^n_V>X|1RXuSP^{-N zl%HQ6rLL*j?l~Y6nJVTspB2gWK?Xk+wmDg6d+>Ah+V$%mk5r(ThFgpm0N{*7A_1=P z>D4V#U^5Qvy0q<8kO*KG0&#EnAa?U64PTNPiom^76aGH=aviTnDl{Omv9x>Z`*$P& zU1R74f$lEd^`6bc*;|tnc#tiAO?gQv`wP-?IKBO5Xf^yLfcZ`iw>wXc4qJ(%Ukw?5j$jr|rNRifq9x=gcqe6ZKn^_wLyHBrfMIfP=1K^lwV`~deoll=M015$W z^n;(PVXtmIl(cX$pLE)o)L7l~@8)+QbFMKJY{0ENI*-ZAS3g~_?@bm|NNg!CzTh-g zO1Gw_uKxVhtEd{MF`MynYlT_lk8heB9sLNS$(eB+4)<#{FVp?_V9&7*MsTKS2h+u3 zl{o>3IzDcq+jPABd~4|<1Q;1Z%-=oItq#pZy{1$u9W*L3e3Z63-yVaCj{Z>Zu>iKh zuY&`djqwVF;vh$g1h)zz-9E-IJnP`t?grUr|#%jDm9)~?rnP*>1qt*O(D zR<3?p=C4d;f z=>bmH?U^PJ*1=>h;nY5bVqU#@Dsm_k^TpjM@X&e z0e{)MPy!+nRF5D%g^)!9Fq0#Mlp>nQW7@CxvYi5VI3s%W05T8*1b zalo$zB0ddO?RWYocIVt!0kFG%W0C+&16!=L&xQ$5Olh5-BPO2P?PTvvu?&jJkO@#I z8{_2RApzV+9J5$B{u&?OhYXnjDq32iCIn@=R-|UCsP*~y@y7zUzKQc@D80gSqvnVHe5E9Ag@o9oBf zv!+XWlLz3p+G(|=pYUcpQn)r-ZcU`8ua7Ix=gle>%Dd7#7p?z-U^4yVm}RiV_$@vG zfeWdkE*~bU9(v%XeJMOLI-E;SIWEKDaHPAryxqc@M@mbJ9FX!k+&DSj4$jWcznk9} zcqj@vU-X@2qIctl-ab)NbWF_de--It^YgF4;cy6KaB$FlHV{u%1``x)kD}$Zsxj5o z(fR7-W(I{yH27?iv$L}U>UN?Ad6t$IySF|D>b>!UkIf3Wdx>p9@+n?)+37O4CghTuM!F>3 zLT5sxX^FDGza&T+xVX8k+oS0~s~+gD6f~;^9$a9SDj?>+95yzzgrV+U3JwlF+A9lg z|5D=wTxGMQ1q8skiuC8y+;WM%5#KmxjGeH{q#kEggqIA(`l;PU__aOv; zrvqG;-;Zwu<;Ry0k9UFt#U%J} z+HG-M;8G7=wd*v~%*+f185|s3?KqcB$eh*^=f(;A^W|0eG z0WB*hzdGf}yDuF2K>KO>3=It-X>JmPM|y0mtb)?i1dzXy0l@34rwD<}8!QQs82~Rz zRaI5t)IL;HRO`zdw&gyXU!+c&XsAaFQ-mx4S9zI%0T>qU;PGX9U!ZuAz{7o|+2%lC zuK6M+W571%*&Wc;Ec|JQV{2?~#_GqGB!weE5O{ z`^e~>`}cFpnczJh?lAmq+a?5TMA zX=zRwd^f*bz&F{=8ay#&e4wn+moZ;n3o{$U+hLR-n2vIr=jjToSdA1 z29A>xd`rxw_Puk>&CNS_d?d~uE-w!uBqXF_WW071ED_AI5U0!uJb~BODZ*MIO$eBp z&n=uLyzgF^u@@!N?ek`JuI+0hMY=jVAv-(nK-LO?Y6S&_aB<_b2cPs`tar{-Oh}3O zAmQ+w%kdPbkLDsT_9!15%5}TzMNghl}{ha?CDXHzx72Kdrg4KV5&lh6ap;KNj+L}$xvT^cx zLwCx?+N^}nce}!1F#8%)4xA=@*jz*$S2E&Q;XbDT_?5|8m$nkKy3ZB1Dga$+eJ$by z53u43e0@V(x0HDX%MFDZFVu&0b&M>OW(J>Jft36Gc;Gzq?w%fn*Y=FXT`x*TVMx`( zfsURe{u^#H(vaF<7`Vat`FR#gpUD65B&EV{R1JKvsrXt{*8E{PGx$=CX`GNn18CgC zgxN=-?h5>Y#1#@Jn_W~b>V$L)oF`N6qNinLWif`+rCXUO6q9}!?R3bdZtBC#K>Co) zpFZhYk%fhPi_6OZUci`0G{uxyilkfc_%Tv zC$8~JwFBVQRAZh$d!~~YXwUwS6YcBKoAQqz;aogCYB3SP6#K!jtgNg-sueFu;MxgF z^6x)>0LxN0H#Y}HYHC%+IOROmtplzGLq3l)WgfubF{zU&RJxv{U*Y&CM5H@gjob6N zDF}r+*XcJytB~=1tN=g1B7SR{yR5umpu0|532XfbuY`&^fisPYFc|DiTp5MRXZoWLV?j?L6Q}osI%bx|U2QQVj#)#iZ$=!I0=#Ic zMT{?MdEqxE03`-S>Tk822Av}%T?jrsWC!@fuV0V6)<-oD68(1<^4Fdxn%HI~EN;;)$lLA0tLal@P@6QpA6_T(yH7R>^}3OSx1p)22^9V|0~s>F zo*bCseEzI+^m`y!`Sj#CcW&>2oD%loK!%pFtH}L|CA6-dUg+SUo`HeEd%K%ttgi+) zSYI0zMIg!|6A}`3#%mW;dpEwKP+fH5Liy=Zox}!>p`nD3+OSV+(cpRZot+)G z23<|J09GS1XFs;j3hHdDIR1B)A3HQJaQv=9si zTiNr+^+08n0kaXb#loPo={nnd@l6nagT&UE#@|u$<%$mwsp4$A%mI2|)WlG!U}g&PZ~#vP`&A z``rdwxRehHg*vjF{paJyk0FqtprF4m8V(=!62@(k?9<6?rFE(CBKFDXc};=3wdh6% zv4PAPGsH}_*Y3e^#cyIg*p$ZtgM8%n}6ktlM%W)h7|1pw8~2>-M}jOnOT{MEJrKGJ0WW^Ul{Mcm63o^W9IL)(VJNvN3{fkqALZRR7|IHs!Q$JU+#iaiGKc$)ecmC4U zfk4DOC`cA`7c4F=LLidfYvH(T6;Q>`%M(Iaq!%u5XOMaak zZUY@7IAFckM^SNc?TVB#=aSTxc6yTAoJBz=0cd9c{s|5>8@2WcL^@8+o;9A!TA(Tc z@{#Ijmuh+}77JieBog^%#1V(}d>G3lLe9a#fvIn(?ff$Tnl`2#Oef&r^EGDA6W|0%3UzetvEQ3_1Ky(bP|S4R1At6>-skrc%`wtUd{{-l7*ZjB~>rXmqmJd z0 eLZ7EMTPxjtspo~T_$V6h!1d*H0QJ*?oYabhCQHQLm&_z*uz>wW|{&hJot@E zKY}W~tLyI1wGoQ@_wSE4c=MN9H1e2pnbK5E#J+fO87M=6&IW_Q!1s`o7~846^)aVd zm(u=Bxr7?0F-&ps1y1GIXGT?VqrgTJ4BUf&l0ebjU3hSCusrb42h<$O+0^pKUu-o! z`l8xxTIbtib{7)lFlKeGsHmtry1LZOCkIZK>FF_Uv&{;{QeSL<$UmOq#URb3m;Tpi z*~+)#g|DOzqStH+{2x?Zpw`!~ug*&OZKevDk>;#>OVx1bZAkC7!rF zh4lnXR!>ilFmmy(eN9WTAsQ@t(Z$a57ne5G=><*gj*qv4-2|^+ zr|wZxQ!Cb%JFeaXU2ck86HO-v>!ZH2fySl+z&*o^mWHM{Gx!9Xe-s02F6ZImGSN<# zGg`LR4u$HT*83cf@}MmD8tK!DbrHoPzC6eMjlRDNo7dxhkcYvO>t=+9wt7GmG+tqwI|5m(Q*toZtmxC7Z4TT`ojoGC_283yijYOl2w|=6 zvg=g+6AT7=v}W8As+>*TLqtSG&BhiV!vG`94-P06D#c3pZm|G<*0+lQ%s7NxeVhQ9 z#N;^?{Iys@@s8h0n?KwW7!eQ?W3aZiUYWvH>Ack|01`}~_bV(U4>Wx%f(ecoFi`=bryDN!&nVFWCkWlQ|dj=O_*jG>7M%B;?{bzp#!{qYWg zkY#i1=g&G9Sj4HC{P$?)OD!5n+}zx%9Y=cRMru_P6A~!FF6VRWheDxL)YJs;N5ARm z>2XnipTwx;7K&c7KiM4h7#J-s7BFw}AITbh>Qe1LGcyAOfdCO!^HP!Lv27TDIOgYxhu|s!L zO-*g5m6YA;OSOZqG}h{DC#jV3;w6_?7i%SQ7tEEmOf0sR4J7+nrzTXo;yk&1Ey4(X zS8V;7NXj^SMQEqVZ@$uiI45}Co#_4apepC>eSRS!fB~KC}8idO0NynuJ|q11|nhD76t^`ye%n^`2DPAU{X?2R%IoP ze-oRZpC3rbw;H!)A+_6jS}jnqct?CIDf?9(o{rUp?>@+XJ>?9ovmj_u$o$uS2$MQI zkM$^BEOipTDmTh1*Esk?Gk0MTd7@Wu+%Dh(a5w!R2Yv6;`Jm^; zb>Y;$uC6YK)!|H9U|Gm!;}V{ar%rJ6GHLlVp>sBJX?fYUHI(?*(T{=Moi@sa2nGZd z$%aVHE$n6mcePT{Nc84p-NI6erLv(R9hmurn~8Le$;ivCTYamxwGH<5^4gz=`t%ZO zG#Hr!Yy|)qvDBNgurW~uS;X@r7xEu8`fMur_=vvMcm*w?d43l2$BI@DM$$?x{sbPQ z$^U$?biRoHe6Yq|{9R*X3?Z90NUsOn^G=X?W)gXc^^IPE`|t1fA+_6^`}34Uo&f9L_3bkQ7F4))mjdIy-y@8I!Z%)a|}6Fzz^$v&a4NiaDj zWg+wQi1+5LTc9bEi;K(P@K^HXNt+?=x=nOI_iaU6$I~2<*xTY1=|6sZx?^7%lw7)j&3o;&a4KMy{;^K@~1 z7Kui4-~x|D2GV{caH8i6S5{G6qzw6w46x-D&5=Nk7{8LpWssxVdKGzK&Q zqa|h(_qkdG3k?b#7a+A}AuiRTo$;(~lWr|>vVjL*Up>rt(rWeW>9s+&R8O;N(~?K) zC3Vlx=&+WfB^V}5mZd__pY0!;+Pu}`>_xW#MipR2!nc7;7#|*wk5tZX-CG|c=-LJw zyYJn*chCN`;$#&U7Lr3ie+uaP11-vS!L!JPuDwOXvUK`?83@eV)5okJmA2EnRs0|Y z(GqgCz+8pFU~mLAR`V}Jhif~%+~mW@fh3++#riUghq_1^2r`Hz7! z{Z(o5;idpzNG(MS=V5T?$B(EUGfAwAE|amovwFLzsZ7-b5cSV(HEx4V{q?p7!ElR= z5yRNj5x(WLy+A(?j4p8`?T1WacpVE|8Vb;d0neFLL_Ccx=LC`+N1Fo!fHEN>A_DW> zwllufSu|TePwVe30Jsbx(W86=zVPtyuj3WA;$ACM0`wGKlB_=4GjSzmb2>= z>15_V>%B-$1|tdYY|k`N)6sDkq9^HD7xuSjEp44WlQS~ni;T-`KBA~G$XeW5x}>+7 zeelxK(uZ`n!^~7MH*#Og^&vK=XeX`FGD}KycX%ThYq2dXCI*t?nVA_^rx?%~B`&0+ zrtUnX88H}Wr|DrJF#AHhSu>WVh(H z5lD8^&Al(m2J9FABZg+bc>^gN%F{M`VtMn&usbj+%*zbon9}q7aM!QdOL$n#{bOkAcoc1q9uqG_HKvp zt!AoE=K^=g(chKY-pS!MCnqP-b`w4WRBB9?!N)b9UDH+vb7NL?>;6<{L`5Uf4nuFV zFc<|>?w3-&rS2({tS&eB`6(cs#A=SJE)Cap8xo2Ilh9DYbEKqVF)EEy zSwb!qLKT7+C-ZME*51H+2tMbZgz{FDwuw&P?mlknisQWBb=Zxj`$By5`9W} Y(u&Ya8+JB_Kp+rRB`tWVf>r4M1CL(Mg8%>k diff --git a/vendor/github.com/bytedance/sonic/bench-small.png b/vendor/github.com/bytedance/sonic/bench-small.png deleted file mode 100644 index 7bdab77ca657854f9a29badca8349188cc25b3c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87635 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 z 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, &, U+2028 and U+2029 + // characters inside string literals changed to \u003c, \u003e, \u0026, \u2028, \u2029 + // so that the JSON will be safe to embed inside HTML