From bea497ff96f4deae617e54468576d11d105e2125 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Mon, 2 Mar 2020 22:11:45 -0500 Subject: [PATCH] nextcloud oauth (#10562) Fix #7078 --- models/oauth2.go | 14 +- modules/auth/oauth2/oauth2.go | 23 ++ options/locale/locale_en-US.ini | 1 + public/img/auth/nextcloud.png | Bin 0 -> 2918 bytes templates/admin/auth/new.tmpl | 2 + .../goth/providers/nextcloud/README.md | 85 +++++++ .../goth/providers/nextcloud/nextcloud.go | 208 ++++++++++++++++++ .../providers/nextcloud/nextcloud_setup.png | Bin 0 -> 85944 bytes .../goth/providers/nextcloud/session.go | 63 ++++++ vendor/modules.txt | 1 + web_src/js/index.js | 2 + 11 files changed, 396 insertions(+), 3 deletions(-) create mode 100644 public/img/auth/nextcloud.png create mode 100644 vendor/github.com/markbates/goth/providers/nextcloud/README.md create mode 100644 vendor/github.com/markbates/goth/providers/nextcloud/nextcloud.go create mode 100644 vendor/github.com/markbates/goth/providers/nextcloud/nextcloud_setup.png create mode 100644 vendor/github.com/markbates/goth/providers/nextcloud/session.go diff --git a/models/oauth2.go b/models/oauth2.go index ee3ea4b924..8164699d8d 100644 --- a/models/oauth2.go +++ b/models/oauth2.go @@ -51,15 +51,23 @@ var OAuth2Providers = map[string]OAuth2Provider{ ProfileURL: oauth2.GetDefaultProfileURL("gitea"), }, }, + "nextcloud": {Name: "nextcloud", DisplayName: "Nextcloud", Image: "/img/auth/nextcloud.png", + CustomURLMapping: &oauth2.CustomURLMapping{ + TokenURL: oauth2.GetDefaultTokenURL("nextcloud"), + AuthURL: oauth2.GetDefaultAuthURL("nextcloud"), + ProfileURL: oauth2.GetDefaultProfileURL("nextcloud"), + }, + }, } // OAuth2DefaultCustomURLMappings contains the map of default URL's for OAuth2 providers that are allowed to have custom urls // key is used to map the OAuth2Provider // value is the mapping as defined for the OAuth2Provider var OAuth2DefaultCustomURLMappings = map[string]*oauth2.CustomURLMapping{ - "github": OAuth2Providers["github"].CustomURLMapping, - "gitlab": OAuth2Providers["gitlab"].CustomURLMapping, - "gitea": OAuth2Providers["gitea"].CustomURLMapping, + "github": OAuth2Providers["github"].CustomURLMapping, + "gitlab": OAuth2Providers["gitlab"].CustomURLMapping, + "gitea": OAuth2Providers["gitea"].CustomURLMapping, + "nextcloud": OAuth2Providers["nextcloud"].CustomURLMapping, } // GetActiveOAuth2ProviderLoginSources returns all actived LoginOAuth2 sources diff --git a/modules/auth/oauth2/oauth2.go b/modules/auth/oauth2/oauth2.go index 20dfb15e81..193a87c4e8 100644 --- a/modules/auth/oauth2/oauth2.go +++ b/modules/auth/oauth2/oauth2.go @@ -22,6 +22,7 @@ import ( "github.com/markbates/goth/providers/github" "github.com/markbates/goth/providers/gitlab" "github.com/markbates/goth/providers/google" + "github.com/markbates/goth/providers/nextcloud" "github.com/markbates/goth/providers/openidConnect" "github.com/markbates/goth/providers/twitter" "github.com/satori/go.uuid" @@ -192,6 +193,22 @@ func createProvider(providerName, providerType, clientID, clientSecret, openIDCo } } provider = gitea.NewCustomisedURL(clientID, clientSecret, callbackURL, authURL, tokenURL, profileURL) + case "nextcloud": + authURL := nextcloud.AuthURL + tokenURL := nextcloud.TokenURL + profileURL := nextcloud.ProfileURL + if customURLMapping != nil { + if len(customURLMapping.AuthURL) > 0 { + authURL = customURLMapping.AuthURL + } + if len(customURLMapping.TokenURL) > 0 { + tokenURL = customURLMapping.TokenURL + } + if len(customURLMapping.ProfileURL) > 0 { + profileURL = customURLMapping.ProfileURL + } + } + provider = nextcloud.NewCustomisedURL(clientID, clientSecret, callbackURL, authURL, tokenURL, profileURL) } // always set the name if provider is created so we can support multiple setups of 1 provider @@ -211,6 +228,8 @@ func GetDefaultTokenURL(provider string) string { return gitlab.TokenURL case "gitea": return gitea.TokenURL + case "nextcloud": + return nextcloud.TokenURL } return "" } @@ -224,6 +243,8 @@ func GetDefaultAuthURL(provider string) string { return gitlab.AuthURL case "gitea": return gitea.AuthURL + case "nextcloud": + return nextcloud.AuthURL } return "" } @@ -237,6 +258,8 @@ func GetDefaultProfileURL(provider string) string { return gitlab.ProfileURL case "gitea": return gitea.ProfileURL + case "nextcloud": + return nextcloud.ProfileURL } return "" } diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index be478ad44b..90abac6f19 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1927,6 +1927,7 @@ auths.tips.oauth2.general = OAuth2 Authentication auths.tips.oauth2.general.tip = When registering a new OAuth2 authentication, the callback/redirect URL should be: /user/oauth2//callback auths.tip.oauth2_provider = OAuth2 Provider auths.tip.bitbucket = Register a new OAuth consumer on https://bitbucket.org/account/user//oauth-consumers/new and add the permission 'Account' - 'Read' +auths.tip.nextcloud = Register a new OAuth consumer on your instance using the following menu "Settings -> Security -> OAuth 2.0 client" auths.tip.dropbox = Create a new application at https://www.dropbox.com/developers/apps auths.tip.facebook = Register a new application at https://developers.facebook.com/apps and add the product "Facebook Login" auths.tip.github = Register a new OAuth application on https://github.com/settings/applications/new diff --git a/public/img/auth/nextcloud.png b/public/img/auth/nextcloud.png new file mode 100644 index 0000000000000000000000000000000000000000..635806813a61c2eed5e7c91b3e547ce5107aabb3 GIT binary patch literal 2918 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 literal 0 HcmV?d00001 diff --git a/templates/admin/auth/new.tmpl b/templates/admin/auth/new.tmpl index f2fc26cdc8..2260782cc6 100644 --- a/templates/admin/auth/new.tmpl +++ b/templates/admin/auth/new.tmpl @@ -115,6 +115,8 @@ {{.i18n.Tr "admin.auths.tip.discord"}}
  • Gitea
  • {{.i18n.Tr "admin.auths.tip.gitea"}} +
  • Nextcloud
  • + {{.i18n.Tr "admin.auths.tip.nextcloud"}} diff --git a/vendor/github.com/markbates/goth/providers/nextcloud/README.md b/vendor/github.com/markbates/goth/providers/nextcloud/README.md new file mode 100644 index 0000000000..3047934eb6 --- /dev/null +++ b/vendor/github.com/markbates/goth/providers/nextcloud/README.md @@ -0,0 +1,85 @@ +# Nextcloud OAuth2 + +For this backend, you need to have an OAuth2 enabled Nextcloud Instance, e.g. +on your own private server. + +## Setting up Nextcloud Test Environment + +To test, you only need a working Docker image of Nextcloud running on a public +URL, e.g. through [traefik](https://traefik.io/) + +```docker-compose.yml +version: '2' + +networks: + traefik-web: + external: true + +services: + app: + image: nextcloud + restart: always + networks: + - traefik-web + labels: + - traefik.enable=true + - traefik.frontend.rule=Host:${NEXTCLOUD_DNS} + - traefik.docker.network=traefik-web + environment: + SQLITE_DATABASE: "database.sqlite3" + NEXTCLOUD_ADMIN_USER: admin + NEXTCLOUD_ADMIN_PASSWORD: admin + NEXTCLOUD_TRUSTED_DOMAINS: ${NEXTCLOUD_DNS} +``` + +and start it up via + +``` +NEXTCLOUD_DNS=goth.my.server.name docker-compose up -d +``` + +afterwards, you will have a running Nextcloud instance with credentials + +``` +admin / admin +``` + +Then add a new OAuth 2.0 Client by going to + +``` +Settings -> Security -> OAuth 2.0 client +``` + +![Nextcloud Setup](nextcloud_setup.png) + +and add a new client with the name `goth` and redirection uri `http://localhost:3000/auth/nextcloud/callback`. The imporant part here the +two cryptic entries `Client Identifier` and `Secret`, which needs to be +used in your application. + +## Running Login Example + +If you want to run the default example in `/examples`, you have to +retrieve the keys described in the previous section and run the example +as follows: + +``` +NEXTCLOUD_URL=https://goth.my.server.name \ +NEXTCLOUD_KEY= \ +NEXTCLOUD_SECRET= \ +SESSION_SECRET=1 \ +./examples +``` + +Afterwards, you should be able to login via Nextcloud in the examples app. + +## Running the Provider Test + +The test has the same arguments as the login example test, but starts the test itself + +``` +NEXTCLOUD_URL=https://goth.my.server.name \ +NEXTCLOUD_KEY= \ +NEXTCLOUD_SECRET= \ +SESSION_SECRET=1 \ +go test -v +``` diff --git a/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud.go b/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud.go new file mode 100644 index 0000000000..df64de71f9 --- /dev/null +++ b/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud.go @@ -0,0 +1,208 @@ +// Package nextcloud implements the OAuth2 protocol for authenticating users through nextcloud. +// This package can be used as a reference implementation of an OAuth2 provider for Goth. +package nextcloud + +import ( + "bytes" + "encoding/json" + "io" + "io/ioutil" + "net/http" + + "fmt" + + "github.com/markbates/goth" + "golang.org/x/oauth2" +) + +// These vars define the Authentication, Token, and Profile URLS for Nextcloud. +// You have to set these values to something useful, because nextcloud is always +// hosted somewhere. +// +var ( + AuthURL = "https:///apps/oauth2/authorize" + TokenURL = "https:///apps/oauth2/api/v1/token" + ProfileURL = "https:///ocs/v2.php/cloud/user?format=json" +) + +// Provider is the implementation of `goth.Provider` for accessing Nextcloud. +type Provider struct { + ClientKey string + Secret string + CallbackURL string + HTTPClient *http.Client + config *oauth2.Config + providerName string + authURL string + tokenURL string + profileURL string +} + +// New is only here to fulfill the interface requirements and does not work properly without +// setting your own Nextcloud connect parameters, more precisely AuthURL, TokenURL and ProfileURL. +// Please use NewCustomisedDNS with the beginning of your URL or NewCustomiseURL. +func New(clientKey, secret, callbackURL string, scopes ...string) *Provider { + return NewCustomisedURL(clientKey, secret, callbackURL, AuthURL, TokenURL, ProfileURL, scopes...) +} + +// NewCustomisedURL create a working connection to your Nextcloud server given by the values +// authURL, tokenURL and profileURL. +// If you want to use a simpler method, please have a look at NewCustomisedDNS, which gets only +// on parameter instead of three. +func NewCustomisedURL(clientKey, secret, callbackURL, authURL, tokenURL, profileURL string, scopes ...string) *Provider { + p := &Provider{ + ClientKey: clientKey, + Secret: secret, + CallbackURL: callbackURL, + providerName: "nextcloud", + profileURL: profileURL, + } + p.config = newConfig(p, authURL, tokenURL, scopes) + return p +} + +// NewCustomisedDNS is the simplest method to create a provider based only on your key/secret +// and the beginning of the URL to your server, e.g. https://my.server.name/ +func NewCustomisedDNS(clientKey, secret, callbackURL, nextcloudURL string, scopes ...string) *Provider { + return NewCustomisedURL( + clientKey, + secret, + callbackURL, + nextcloudURL+"/apps/oauth2/authorize", + nextcloudURL+"/apps/oauth2/api/v1/token", + nextcloudURL+"/ocs/v2.php/cloud/user?format=json", + scopes..., + ) +} + +// Name is the name used to retrieve this provider later. +func (p *Provider) Name() string { + return p.providerName +} + +// SetName is to update the name of the provider (needed in case of multiple providers of 1 type) +func (p *Provider) SetName(name string) { + p.providerName = name +} + +func (p *Provider) Client() *http.Client { + return goth.HTTPClientWithFallBack(p.HTTPClient) +} + +// Debug is a no-op for the nextcloud package. +func (p *Provider) Debug(debug bool) {} + +// BeginAuth asks Nextcloud for an authentication end-point. +func (p *Provider) BeginAuth(state string) (goth.Session, error) { + return &Session{ + AuthURL: p.config.AuthCodeURL(state), + }, nil +} + +// FetchUser will go to Nextcloud and access basic information about the user. +func (p *Provider) FetchUser(session goth.Session) (goth.User, error) { + sess := session.(*Session) + user := goth.User{ + AccessToken: sess.AccessToken, + Provider: p.Name(), + RefreshToken: sess.RefreshToken, + ExpiresAt: sess.ExpiresAt, + } + + if user.AccessToken == "" { + // data is not yet retrieved since accessToken is still empty + return user, fmt.Errorf("%s cannot get user information without accessToken", p.providerName) + } + + req, err := http.NewRequest("GET", p.profileURL, nil) + if err != nil { + return user, err + } + req.Header.Set("Authorization", "Bearer "+sess.AccessToken) + response, err := p.Client().Do(req) + + if err != nil { + if response != nil { + response.Body.Close() + } + return user, err + } + + defer response.Body.Close() + + if response.StatusCode != http.StatusOK { + return user, fmt.Errorf("%s responded with a %d trying to fetch user information", p.providerName, response.StatusCode) + } + + bits, err := ioutil.ReadAll(response.Body) + if err != nil { + return user, err + } + + err = json.NewDecoder(bytes.NewReader(bits)).Decode(&user.RawData) + if err != nil { + return user, err + } + + err = userFromReader(bytes.NewReader(bits), &user) + + return user, err +} + +func newConfig(provider *Provider, authURL, tokenURL string, scopes []string) *oauth2.Config { + c := &oauth2.Config{ + ClientID: provider.ClientKey, + ClientSecret: provider.Secret, + RedirectURL: provider.CallbackURL, + Endpoint: oauth2.Endpoint{ + AuthURL: authURL, + TokenURL: tokenURL, + }, + Scopes: []string{}, + } + + if len(scopes) > 0 { + for _, scope := range scopes { + c.Scopes = append(c.Scopes, scope) + } + } + return c +} + +func userFromReader(r io.Reader, user *goth.User) error { + u := struct { + Ocs struct { + Data struct { + EMail string `json:"email"` + DisplayName string `json:"display-name"` + ID string `json:"id"` + Address string `json:"address"` + } + } `json:"ocs"` + }{} + err := json.NewDecoder(r).Decode(&u) + if err != nil { + return err + } + user.Email = u.Ocs.Data.EMail + user.Name = u.Ocs.Data.DisplayName + user.UserID = u.Ocs.Data.ID + user.Location = u.Ocs.Data.Address + return nil +} + +//RefreshTokenAvailable refresh token is provided by auth provider or not +func (p *Provider) RefreshTokenAvailable() bool { + return true +} + +//RefreshToken get new access token based on the refresh token +func (p *Provider) RefreshToken(refreshToken string) (*oauth2.Token, error) { + token := &oauth2.Token{RefreshToken: refreshToken} + ts := p.config.TokenSource(goth.ContextForClient(p.Client()), token) + newToken, err := ts.Token() + if err != nil { + return nil, err + } + return newToken, err +} diff --git a/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud_setup.png b/vendor/github.com/markbates/goth/providers/nextcloud/nextcloud_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..8f457dd2a31650fd33e44126db684aaf847c92c4 GIT binary patch literal 85944 zcmcG!1yCDYvp-Cg7BBAB;u_pNxVzJk1cyLyZ%cvVr4%R*rMSCWaVS#UDXzg?|3mG0 z?>Fyz@BQq|FhdS|cK7W5)=mggRhB_VAx1$$LPD35l~PASdQgdkbie$`eIz8LYC0Z! zBqWr4OG!ypDN9Ft8<0B^l5A%|jH@cHJAS9{Y!r^=%NLx>q%_Y#U6SuffzVGxFQ2rs z-+QR0rf2w?JC*v)Gd(Odd#yL0upVRr)$Tp0^&4e_L#UitR4R;;lctHQc2C_ zJlg#q*FV1Dy_$~U)c@hj3B=H8lZJeKro8ZOV)6-v%oT?LCGLY)j1r3%=cX-ayFgvN zcewBN_KB1eR(d%TIeJ^?9X~(!#!5y)QZXxeYl-x}k)PJglYyh9 z7G-k>tU|E~YC%Es0KsQGa_0%kQ%#ncU0izkTtovW2eW&PLXngqT1YqZF-bIW(~=Yp z@LG0uc;;H%X-pgrGuWr+Ycc<-L*tt7nv>kiZ=_{Fks!x!p!3JQV`eO9aZ8%Xq8gdc z&7=oP*y+?W2k_2;eE@|sFq@ninq(zgEW7>(?42yi8Jxos+qi)f)pvRMQ!k&@@vN**wv5i-rU=JC;F(-lF_Q@<(O7)eEgKf)>4^NMV&B- zUw5SO4w@4_iUL7(QF-1JfXqMLLvH=PXUd1(?~l5G?e@SBeY_>`hsznM7drW?j6GC0 z>_@6EaM3eDN~QSIy;MQjQksnN@AQKhCAHEvRavrGHQ6?K?2R-V-uS99j9gqLwFyK|s1(ZIf!EsB1|DKR|D>*nmw9hEpynM> zb0}yIT%t=nM!5ABy^Z!IXK`-{-h|PFwheD3gJL0(;~mB*2^WFeXlEGFT5Md8?+nz8wQ`?R5A7!)!1L3kV@PGJx@y>1Xha^ zK39B(7t|r;YRU!htB%)IvY|45fq^ssLH3342ULbPZO`$da^+-XW96QIQGw8u5={ms zO2xeAeNWOoyX?7Kg^SYuZV@Q=42q2Ec(!=0xMg@uxR{K_YF?Rd zH8|7{G#2Tj=@B{tMO^Ygwc{KSO&({Kie!&Sfy_`X9&Iy5bNW~&3hf<@WK}iw5}hC| zy-f8yxIR!`@_VR-qCURua|FHZ`xE!%F`*8jo%-WL{ngp{Q*kZHQHAI{{miLcfz%7V zu)@`>n4C(z0!c)gfc~tau!OLQchv>(IF`7F*pApHj3X?a_>>!@#Mvj?w-SHJU1Y6n zWoiA$;%T{yMbfxOj?(bSQ2*duuD7(OVPNi3TI=v+uA}xEzmb1`s`>Z44T5!?+W6Yn zwb--XwcfQF9vvP459=fSWAaU$+Z2^G6yhs$Ds8J^_ulQV~W>$H%gp`k*72Ecr0ivp}@1CX_9XO zGC49WRIF8sUTOrMhF*5`e+#$Ov34~Vfi~V=X&nl#HC6IftxfG#Hf@PHKXKMw8(i8O z{obv%KC#HR1NrfByL{NPOK*~YrsnH;DQZXiG&H)GAy%a@ywG$!z0kKtuNGQM=Hyw~ z>~_yp{Q8ZWtFUX#rHE?|^6c|Ta8clh#(30<-rD(u!hFcm=#S%%pq{Rmq^9);mHYS} zRqnof4##>6!-$Xr^gWhC#G%GP$bR0w=W@|n%If^K=(8VK#X_lqSU7~F)%^DFa@rxB z37>GpmBpFfus)3POMheih9dBj{}ahtiG{(`L6)>uRCIy^0++Y1+07JX`Ihu2@@vX^VM|0zE=Xlau{+Ma(*FU1Z)Og(4dPC`7~LvJ#0`G;h0dl za0QW1SN?b%xnQMCb`6(I#bWP?=}9&| zu|gEa=)2C+FFTS$G2=jSVR6HH4tfQXXWPr$I9@b9w6_xBF8!s6KCf$1H7Wa?`(|SV zsnGCw-cf!xRm;*PBJwCyP<$aOCw(AvV09?6+PO+$kXaqtwC(X)ujS%Rmj8`^6RQlH zIomG75R1MMSLvG)(|LIdXirbF)|dH)Q_t(h^zIng!e?povV;rOoZZ9%ApOT|oPeeRXQqq@aSw#p{WTaE@Q zXUTc#&agUO5br)Oy4}f)SE_nRX))YMVLj%g;HUsYx#0$p^wIrw1o}uKh~5vE4Hvp)Ij?F-Z;|l~=clmdw{!C{C#fjNC$nO+NLiQNeeXi+bdvH!;QR2( z*r?0UCS-|WR-+?RB(VllF``5#popz3KOVhw4q>$7bBP z?7QK`mVUYoJ?+gZtTyI%7(KV@w5WSo6J z-F#Z~|7aiS z9rC5W0k1Jd>2%&6Tx?xPUA0YEFKlh_;=xAecpA%m$2o~a&ey$9E^{!U6r&>KXUkVP zr;amgSsLdi_9nSa@ji$P{3}~G0Z$M8X6(|&i2L+y3nQ9Hb6oeuu9R;48I{6=pUZ%d-h724axKwChOx=d0NNawclN;(I?l z3`v$aRM zTSB64_8_n|)QQp*YHn#KOubvzL``W45vJDRR$^DOmxNka%6h<|8Xn4;U=M3BKZIIT zgi^>&z|Gd)7U~3|bhEXwa};nBrvAxSz|K+NZkvso@+XOtwJ^2#oj^)mB~?mE7#vE; z&C0_925_-c^769+c-XnP0nC&f>;PUic5XIy9u{_h06U)m2Y~YTq86bPf7*rVe$4 zIm5wFpbON_>G>bU9G%pm|Cr|A3j43e)uCp858GS7oM4U?u>W9$zkmK~3VQ)bI27ar zgKNTIHh;XV`iBdpq~x7f`6%g?KwwL|JJt+$dj38Il>#|Ig{e8%0sJiN02X#WO?FNJ zc6I@70Mi`+*ng2KL7hMlkQ33}R{K{y&mJzyfA4xGl&@nA*}7WDaGs zw=@4KO-V^W&d$*ZWCw=INeNTC+1j&OT0#W4P1)H&005MQo12e^h06@Y&%zJj<76>2 z;{=2Fx!C!5K|FuXOToa-cNn-k|0^6IFt8=$AKMCW@$&HVfjOZp>=1rl7ItnfJ{Ax= zgp-96%5Dna1M!=Icp-ndslYAGE$u)y|H}1FD~KgT007|tfcUuhSa|rs+$>!D93U2c z2$Y9~1Iz>A<>Kc6K)9gPlz*KjAPKX9!IfYTs4z9>zwXOPN~*$PW|lTkVd~%0?p?V2 zgsp(ArK1xJ?*2OfHJ}c^f3vZq{E1Wn5cn>bgsH)IK!8H1e{Wm<8#Dgz6#m85)dFhw z-(uqznIp{1$rS{Likn02oc?zJWcyDya0I#h_xeNlA^hAN92_iMoc!D@Tu@$47E^w1 zeikkO6vEHW$qNE;@cy~~zt#U=;rjnr|KBIU79cxwC`6c=?LXfL46}2A!vDo9_8>UO z7U~3rI|@^q!C|(PAbWcoOEBopg={W%klz{aFJ>s6V3hwv$bYmP1PZtO7u)@-l)oxa z{(mU%fArM$B7^b4uSi=x09vx6$;!MWZ^@>@EfU zO-ldw(#J3Pu>ZGd=ngu6Q6-=Wb#qb#xkKTOzhhAXWd2W7{zLbZMj2!a6{ZIKYsUJy zf5+r*|6fq~Z%=Yi{)eL+l>g&d&i{0l^Viv*zWk;9Kh^QSUhgN#zqB19l)tvrrKInE z{o6!|Q2x_~LG2*I)NpE1k=F}jq)7J!PUNJ-HQlDRuh(30^^$kPPVx>H&mZj64(Pk~ z>1C}t4J2|pCg&!{B`5Qno9!TyH|%;;GwW&-a^rcl{9SWZzTU z$2fmil)UIm0(QWkr4||Y>CejUQvAC#A+&!NBgfyCgw%_Z>D$B$TpZuM* ztj~nTl*r(aIiZgT&yh`jf$x`kFndmACr#rsqJQCE1G|^?$Bl zT++RSHc+muHka1ODqGA~a{bn(i`f8ls3RVE+rocnGJ7z8%IbZ3iOtO1hQ|NrTEjys zqQW1OwC9;PJJI!c$s)nFR;=%0h*sLBl2ge0-5K!C&37IJ?r@v&o`fl((-4u7bjrt` zb)+OQ{tyG1{#qVJS7-M9t#qx6of%aTeIpSxAjy*D_)f_~)9#S0u3Na!fN0Uu`2-he zyz7=l9 zv9xq2*=i2xsEi4Zl=qLTitKBRuVhyv*48_FK0sL~MT?ebRF`MfoWV<+j}x|o3fBhX zPLFV6nO*Mx5;u&hl46vT2=?+%dKaR?s#8x0yyzVH1 zg^^#UXPdWt>&T2*7a)B*m9wKAiPb zqpv*KA2em+_{de2V?v-cGh)pbGw~(l%I#KSqboa_XgRxw&cuJz$3E>SE3ou-LzWeP z&-}=bE{4D4Jdi-40%}Syq2^d5PSBD#JQ4`UN2K0tYu+=|NSHHeYZ!o{xXZM)(x}Io zB(sbhFO+ZGcGmI#La}ksQJn%FCrZhyGYpriHKWN@x9WD-bq|4DD>viQe*t6tPG;o>bGL2pLteo*-dm;KrTfhzRdAhjN5sLtD@J&dj`IVHOZ?0bnx z5|h4F@RjND&YC&O7h(ma$lKHJLZiT@I!$Gu*`0YjR)$p!OT%e-ENNOe3r71}G4VOi zmlaD0<`Yl+Cwlk4&~~OXGkzA9P9cIc)|4@(=kbj1>xO{KlD@cVM*5)$I1>}=?d$qy zU41Ppt_Rz1UORf&`doUIER9N-g{0udsi!WSPxRzzF-i#3UzM=>z7(g!(@VgZw>FFq z4(+utOp~9DnQSOd`)w*>%h^6F1(h?#{1f2lT2^4$!aDLI@$H6v|Na*<+k%-72?VAQ zyz-$@X`}lDq>;0o$Npr|IXDAOsLo{GH~D*;$(B_fZlXwa)y7vAAiSE*?;o>+7RRz` z(QaL+eJ4&-*3gAX5-j_e*8(c|fMXj61eHRg?PjWxS{}C&Ik_Eao?)K5W7fkV9v%KD zQ(Sn1ag^kfYq_(w{}~e6z<5Y zV)IOHg`BMlEq#OAchDP^D<-E&pW62zVYW!>+cui5zC@#n%f1 z?mr4qP6|A4%D(V&D^XZz6JO$YgCGPk`fX*OGO^C!n}D#V55(%vAwfqNhgzuli58;vIELffC-HYmPww?z?Yc+X<45uKN6z1l|py?nc~L@KN^)itc>oAhDyHQ(sf<3R|1{Rg5<&<^iIn8Eqy5o76unahI`a-7sWFsyYGxi)aLP9XDwZQv1 zXMx_@u(=D$)ykxV(M_3U!4w*c_u~#~6~Q8}Gvg)H`~dC9XbJ`OnEFlqn$G;zs2i3w?!$adFfOBG3hAfP@t8}cn*3+6Lxveg|uqBUv8P9 z#(8ivPncyT33DjR`*VB2P@%up^88tho=D+m*E9Fzur=!W5;v3t^C`5Q;Sr^$etR6= zuO}E>lICaTt%J|T8jiLeg(SN_!qv+(Gja2liY&O;AKLvboj+6K)L?l#z@NaF$W}Lf z)QQqgM5P6Jk(kOxg*bSd&(5|~RA^!>Z}gP)s6tESa+qqqotrhE`gxL^rNdq)VzVyL zcku(1hyipPNTqp^WKsi7e2kLscs72l%yy;fnS-atc&j1kY~+T%63pA#^j9gSzapYYY>HId zI#D07RmxV!?~_nKdufoSi`&Rh?h=WsH&o=^15dbc7R?wRvF7tCQsec$Y;@h|%En6% z5b!jwD8R_M5bZp;8D*hBJ;R~VT_yDqIVrSM))$QPW-iHbw=&bD&C1#JBRIV(jb&m< znos>%UQA6rl-3GPRj%9|9mPK`nQgygN*7yN;t*IplI#`zbQ~kf|NcBuWpb|W_^vdX z>m;ZZBuH9!tTp%KX;sPx7~erSdEG-(GTEtbdA-EozQ&)PyvY4xTb>32gSd%Zo>k^N zzKZ^0)6~bPRCrWD-9vBHhU;JdwP~@PzI5p+u`rJ#KRFr6Ep2Xidf@MNeM3vhrv?F^ zH}*-5Ixvd5RJL%4*_G-!ntc1^CNZ}chvYL>jRG5G6F402vc=ShMpKA8RA8smyLG^K zOQ+wV^>3#iXz*qHl-QTyLJe%(tQ^Nb)?Lyak@W(hV5T+~+Nbs;SUzVf=`xDMr`W=1 zkFE3Y>QEqAg*PP>Efy|#Gf*OgLHv8L$kY+J9$rX{myra6!OtaC6eNr);E4-m46Wvl z7wt;5Z=;DiBD@x>&A zNa?FTcdd}S9P;&`7ff#?cw~Wa#SIWVE%G6hAgVxYY+xozJ;_9Z=4%h#_ zi3m`8gCddhcE#=HaxP=n$K;^M?mT4g1^CYhl$o*GDJwdcaB@1IY0_`$eX>2-)g=ql zu?E(sbU6f{c3jSpL^bfxdcq{+4>(w}+*GPLN~t(`+;6VN{O<=Nk9a>MzP zP%?E3j*A7y2*C&13f&w3r5)ur+l|LcLT#rkS#>Z(sF$_O+udvVUgT7*av>k<&ZH_A zX`(W!!@@HP->8@Ht>vH`3x=7GHe)STfvSIJLStJ|9+i+xCH>Uu4b33j0xwYadPO(P zJ8Ex?_tYo<%1x%tK(N(2ipfTpwz|G%tB3F5c>5hse;7Hy5W()f4EnSY^D{oZbR{E^^I%r%Z7*xj^#nn?rWM?@pgQ*2 z0|T5|o0_eMj+)Y+b8tRZ%=02!60*eoo!5`#11J@i#e#VzPFbEw#Z_#H|TWsYT&VxR($V`8r zLgeZzlystm&%v#8Gd^1dw!Ex!Oynt48R%p%J5+b;%K~1gw0kERxFpk;&IK}8loJ<; zL)^fr-zPv)*Us08rlx!&`1g5Ym?^Uh+cYhri2bqV3}=6WKzp{HfkrKOXn2~o%&;DU zYnqM|NZk6Oa+WLOJ#Urqq1>ku3RD_rTbOOb$?Dh^%&zX94iCN{=vxPw93pPR`Dj z(0Fg?)7mFw{yP#`YLQRVsBt8oxC5_r^$rf#2GAe34h{|uXQ_C4dOFl@tgok1Pa_+> z4VQ3D8_w=}s~Y)~>TSJxFq){($#z`4gwMgUoVmHVf&wbuq{uq86K*YPk~EO^ZLs1K zs^w8NNSp*Y5s{ikmywYX0)bFcQqqK6riKivt+P529 z_aJbc-ibgUELiagUL2N0S6*gUYip}2q((>Oek2nUQ%={3IDs4=$KP9MM2;>oXLtS4 zHMdf9mXb>qE!XG=W5<@5=|s1r4R82RpNM`}_Oo=;&pKH$y|} zel22uIPr)T#ibKRZ*=ZL_4oog+hFZM(;iC%B06eyFV%lG&9r}$iKjOOX6 zO|P%7&wtw6+j|!j#P4;+j(gq~gkx-MjJ2}V8L>1U85x-_6S2CsCdkiUpkKkr&8-#u zb#=VRq?1@jXZ-6|318pa@88w(n|yC?E{?ZccV^;ZVpdZ@Y(St$jTs{I+LhuMquugqmOSHp-cTcqH0KrB)tr|T!EAvq4Gg&Cx5eR`0f$X8jb%gYvY5o#3qqHcRH zy}YiPu6mogzEa$tb-K>EuMK4=l$4ZUK_PtZ2QR#;^76J|w)SK$0mFcxvayA#rgS) z5`qE(0>zZZ?(>*Lv2I~gw<=BbOaBIo!lZ(;s6Q93ow z&tyo`Gh4SrryNRvM-;oii;YqK>XV#q@!s_8E6lI8CyWEIaAjk~@u2-@SQmRMv00U*n-Ixb*;j6(OFv1d@fU*+<&ykxzdn zAcf|y^aocHvlA1SyG^%uP(D9DpPik}ZgrjaM&9?|kg!cFAR;1CUD)2W)U_zPVjcF#&V~BtfEGL#}H$mMz1DB0!aH7>tKrUK&YQuGDJ(P-E+5L zd}QPW+iat^K>;QPMgUHFWdbj(BLzFsYj;jKsHK_KeuhpZc^#K1mv%8^MIn||yfY~& zNiBb-Fg7ac0a@(9DPlS+snDkz_xv3L{$#2NER@l>&f{{lt$ygui{;n%LU@^g;qxVS z>DFT6dP;Ke_YU#=X%6K@NT|gN%U4&^KCHTPu60wNG}61AafpS}y69RDb9v746I(2`YqDXPwv=|K zg$V*08^jK!8-LZ43;_IiRUaf4Qu*ec?J8jqOnEMPt<8CyHV>I41$_YLupeWtW?>7d zd+!UiuH6j@$!^11l?J@F)+R6WI#hVg>z+H=4v*F@j8^Wi!OJJ^~Uq_W;IBvJg+ZcC-d7} z*OPi)-sc?8jTvl7JAUhPFvI}&y$Txb&EG#M5~Hi@GUIp*%(=^ zxhxo$&Nl=*jBepj%lS`B9;Hz)gM(*}5fh_V^TeCVjx8^c{u*{AoQ-kGA~ zT`3ed8=F@~61pw~RDaAs@XBz2TR(56*nHpwJ;iFgjSJ0SzxTb8J`N&rv{3LsS^lZd zBX9Z02RaRclE9r)4!w%Kjh^Ez?S`ToLwCmMO`cgAAI1ThEf?Q(%hF5^&eSegl*?h@ z{(Mi$v|sP)maN_utHhHuYK^;oae&tkv-Kmfk2j-QpDPCU%8tGWfbH@IHX!=lyDNO$ zE=j<8E1Ek2%b&W5dn#_6pYh=0nm6H+j#igqPBe!RW{W+JRl8u+UA(dVR&p(l>@>Zh^?zvglFd14)Orf4f8NhF9!<18 z;qL3~fSvnLV)um>&(XB%@=gB4;1+L2Nz^ocX1nq6{(gfS3u}d}LCIXEp`$BNZhrZc zwrgCT=0`I<8i^-yIn-q#Kan36)lx@G>laJMqZ=uKr&>2zr&y*nT$Nccce5g&4H;^T zV9w&vNcrtX%dJHSt=sAFe$V>eKkDE%ADE=6vKS zSaQAJwJ-MJSe7Mn!iT2f?1^31S$C_nuG|tqJI&roVZ1aZW{CzIx;MHP!m%oC!CvPZ z(=i2=qej(EEz#dtL-@AmZ5z%%!pQF$&bz+X9Y5QB@${y3a?{rKK{U?2x`YAcxwf%L zz_Zr9?nX^;av)VqZH|1vf)ZnCO}Umi>Znk;GLgpgg$)D8p40XQmX*i^AquIcEihH9 zu0HD_N*eS9?#WIFG_ zir}a$ugW=_nM3!TaVZ&wHc>d^k`;pgN@tdP3$)SN|g~zup#=2RWq@v_m zz|j|;^|t$r4h^7*V*4%$UQP9Y5nYbF=;=ocLlFzZZCHp7o zt80z!2~HZ9Z}|-Jow!9LmD;JEP3^W`*4yvJ19~N z?bdV@XwBZ(3WxQJ1C4!e%-UGc$L&^lkNESu#waev3=%vS+UD3|wsx17rUU<^`egLJ zRnOhj5Dj11BGDdFRBJDec!nJ<;k|`2XU~~T_*EM@fU9g-=|(m=-Z6|TP>g;}V<`XG zksc%5;Zu~iD7ojY(I@gu*PcmNXf_!4u-SPtP)6sG7T=4Xz zcZSFLm|VD<&%mMI#!%E<%QjY(MCV*Y8t6Mccg=IfR=hTYh;|$6gc-B4Gc&)lGXclm zHAdoy%%=bx7tc=P&^2}fqZlTpvW+&UerzYTy_IF-ernC1#yS#^qZES>@y#lx@4IYf ze5%2av=fAnxnwl5(?6@oQp6x%y|drGtg%39RRMK9{Ox=|Z4AW$#DX*bPdp4$cWHYK=@7tjj{pRYmb_ zB_rul%x&lxwI=Or_9d3}lXKt65(6~q8LDt*0%GpE-9>PRrmD`{ zflKWh_ik;xfYHg^ZW8!|_X-h4TD+?MlZ%|Blw6{*w*eyVFZ@qLn!ZP(oHuO2V44QA zMP}h+DCE+}WGW|yEExKO8JqJIy9;0XYA&6=IW<*(_Z>KWRhe>Ad{WKu$&DICqGscz z;};0(r^G()Wf>1yOlIDOlZDu6*bDg(G>l69aibvg*5h`EOJ1*B+jfe|n%GJJ)<5Q> zL%YVAUe*5dqDSK!qW_OgPN@^#xgVy8+it_D>cKWoXTZee`a1njSJK|K zKs+Df;%eY4JsF~5N`Jbg;CjN~&;pm;Idq_lqocthPWNGcS58ijva<5|`8jF)pVqD7 zV|29bWNAiSo#)|d-|_KrPXcVFT1`jCbz_Kzjjiaz2W*-gJw3g+xHvlH#3z`TyITov z#byQu24Z5(lV#?d92|qSv67LP6e9JO!kGRZrb#-g2s{;J|Ed|KP$lp=&>mAoH4w}o-`q=`h z(*f^2Mv^6?em9I_k?lcSxg{a1#>>#j3nK1%}dGYzTZHSvWmCJtrrp zl+vBD4U=3*jB28|z;7``%|O4lb^@DC^plm6cPXGLSd5evM1DmbQ;1TsaVIF%a zL%?d-TuIL;B65@Qw0wPMC;8G+gpsjla`OD@{4h&73C^RYrnWB;Kv1YQGc&{fwcJ`Y zB_QCjptkqLk>#>DQ#lFtuUUnIu~ZA3ym7?hf?kA+5T=)7<>(8x}7w zuR?!mX=#B$Rd{%K=9e#td=3)a=BGQexl=xN5v%F2z6jZ2wx08X z2TN=Mg20pPJ}?-ZHp}i77uI=CEGvC-ywFGk*nNzS(Y(?dyR@{_?#F^hS%}rN-HbFng04?AVoAnKr%e7T{k5rMq5|+-J>(!`I2AHtj-#cOIha9 z8P7~_U5+dHMf!XZarcGK@7FXU{Tn<_B_c&tZ;()&keP{)u{#DwM`=2drZ$D5%gec*X;*aC)(W^k)t{M~3g(VwHBtxlsTyNq zMqFHYyko6UHx*;37-kURO&Kb>==~a)!iM5d;{Y9%(XIT5&p58m*v;n zq&uEFm4%&MWg=sM0jnWt`yvC}(vsootZuh4!87U2n>XcETTihg^F0?!we2gCBR_n& zPvPIx(a|y2;HfhP{#ad86GY9luSFw!YyAOAg_ zV=*2mwA3@e6&2BN^>)M(>!|Z|A0Z+|Tz3pDEY_Qw#Y{{nI5agiErju&Q}XcY78!k`cdRWp@|G%zrTBXvZ0_*{*n zO!WDE-v|D`6JJgjn^+|1wd!(%=jr1|k66|@L(Lr?JP&y1XF!!OT1UHfAH{Gzf%R8} zrBUC#qdF|M-CSQ%2)Q+j(EP;buc7@f!@K#I>d%mjLJwCl*U;1R(bMZop93*b+OrF)wTvYq|${h7)S=AGI6*MAsI z=6IT*@eW*hTfqog8!8-`?DMM*)i5LQe$FxOPx0Js>N%Y{Yq_n*s!4^thoCI@Cx+d_ zD{}mmc6X157`l2gN_rvZp=azqt(CF+_3;KIwox^)Ln(HFI`u z#7Xl_`|4KR9XaOMSPor7ldGicuC59}a^YIPJ1}EiV1Hw|PiyQwme$RWdd27>@$Bx} zBnT#5@K@n9@YK-aSbhiq6<>K_UV2(c@Uw12NRSx`VYsVaR_~0yo7uH|3hVHJm}6=G zW1DA9V52wPp`%|>1u?^T)B9OaRZFkKlk(F0=8v2dt^yF>6?7u-caT_=qxE-F#Lep6 zqt!)s-%wLn#5IB6-skmB=8MIzm=is+<+?Kn3N$6LMvaIl96t5Df~h`sY1 z3z~7$G2GeJ@t{^KtCp5`TM128-97h%DaFajD$Oi^sab)6n46-ax8&jW@oK85{FPvO>lOlQCd`<^qYKa^y;9Z*y&Szx!T%5zed*5AI zCPQc1GF=O3$2K6vZ;{@^Gi9FdS5jUdG^9FknGuG*(rvCB;Cd8oG^+S5BFweJuzP)! zR9mz91^@cd#&C-(=Lqiu^hezyG7-u9HF+N2v}LH)9>rFW7(KuSo1&0-Djw%VU!;yc zzUJFjLQ%2u(2T-b_7N^>Ee)irrRF>t`JS$`yUNWIOG7s%OOdPn38j0z?7NGN@dqN1 zjk4QN>l~;%Rah)48sM}_(|(pHf_TP0shH5;{MbcH0S0nNZ9 zUD!AVyn3WI!hij}IK!Jf5Q}26ON5%MBhlvW4#_92 zsV^Fk-d6Lx!;IJ2E{4WRYBS<@uWP}IPu$OOiL#pSzIkpEzs+7XG*e^cC=m)cWz|zBO!^! zP|}y>wkufPj z0LGxS#g#3@%f#Dr2sPw0-+qm+xU|#h{Yb8D=Y%1v%(eya=1+ZN@WY^*b(0MCp_MVv z^IAUTTj^D{0uEkGCNw5`rLCsOsG-5mZAMu}yp4^*AjBKQF4nYM_ipxH5Fr}ji-aa6 zF2x2-M;>pDd%gu0q@~*+BBTk1T59eCLT$T?9^J2pF}iq9Q#-zlR;C|VD2wY&Hc%2A zxogaSd@zy~>C8nsM$fzQ6z~)^Qk`;Us%Cc!wBc0c! z(WyuWw>z8CjT!`Rg+6!D6&1f6ZLFt~WGRG8D#8?x`^m}(VXdVm8dVCnqzV=zWY2S& z)@G0DzY&73NdiAo8wh)83sQ{h6L5_ha~?A>{K{9x#K6icGyE*c3T&Q}(KMkIkd+IO zdD|`*iB-F1pWG5|xW-0XxW1`FA-8TyH&1S}PT)~fV@}A&;@dD5ju4u4T=$U|Sd0?s z97C3eRU6b;ADTFZ2nQ{BsM51njzWcb+nqJ_Ben>`4a;^eXUGpj>qt)hwC^?z%WhZ|Vs3fnbm{#kMtTY+^+8gA~49bgS-AZ*e8q3$o#Ec%;sJAaK;`ufU4I_%nA7Usi2aX;(w9~|SbLHMP z3Y7!~&-JTnJUJc?Y~f%E&~L9RiefM}(tOo5LyRuJ10uBMI!Q--uD$FWSA>3L=Zbna zRj4ukKzrIEr>o0lNHY(8{`|{F7g?Js7uTVuwdhK&u0+;n<QTjAeyS z2N?v(xGR!179q>nK+o%R1XG@{%`xAUDrC!cw=gODHZ2NgpQjd(zh2lUv{EW*8-5Q~ z!ONU6x!LUYGMJF3zu!3SNldXJxPrn-kfr<#ABd}WQP1us9AF1_T%8JPHHX%RB{WqJ z8Y|_1U+ffy)Nr^K9k-faUqEWDaDILtaDYu;%C~r4&Y&T~m)9+~b0`T`^KXl*N+j)B!*j8jj!!uk)i8Ws@&)F5! zZ1Z0Jw4EOkfG1qDA7Y;*zIh=fXkA#_Z$)A|TgW>yZ2(0XlC>r6g_|@TSKbg&;*$`s z(GJkA`tRt{q3Z-{H3HZbUAduI=@3`O+Q%4K$u^V^Ix49RHb8luYMNTdY4MU3Q!Z&) zMGSO1)%?Vu1EdWzcN%j27!9S@6!;CGP_4m}fP&Xl*E5INv8#MhqyJDP`F zPkR-lxI^;iC^tQtH{Ccf(!e+bm_uR+zz1wQ#eyc{&)S$Nqy1I+Jm!%(cmLDS)tl9| zv4K)6$j}ZE=@yiWd)FD3U^P_ds!n;tr*F(4Ykh6jI#Xp+JG) z?hZkU6N*dk2$l2R`@MIJ@6SDwz4qE`XRkHq^ZeG#oVjb%@%P9_POV_>7afu9K4|OK z4&8*>bFXDVgHIfzxu`IWg?HY>wO|SJG&t5AQ5CJ6&fXWz_$XpcF2n1Rkfk<3VWRg^ zSY#fY8b)X2{b-3yt!p|?qB*VpneUm5*RC5uFi}*BaJzOe>2|;;5{?E~e(G@b?n>C2 z#jMv5%rW96p@qK@Cb^eVw)B%}AfL?K>EhAgKbi(6+$0CmsqS1Ur~hcHA`F3L#izlX zf?Gye<$RY`XbKN&v?xh@9@;S+$l#7Ih(>kT)|(Xoth*vCbGgiB<)uW;w+TvJiL{Hr zk%on9FXl*Oe0!%wtIL^x7eqX_r*N?W*urS&iJJP9szt99&&$8Kc`GID}B+35k8`UzH zL!s0Jv*>q4+YRt%`ow#sF#2_1OT)l~dv|Ql#u|81 zzTZ5R`1O?)`@zTQk^H&1wtvu6Ge)33mNz2D<1h#Oq%e72LG-GvR_u(rm>7uIvt^=` zC-!T5GJr-S-qDh_jr$Wl45cL0TyOb?SI;Fs2UYW~sxS0YG|3b03v%uVd%Tyc431oz zT&-VU8QZpgKtV92E~QJ~E4Rq&a?B}lY*JhIsOpE@oN}7-ephJFjoBM6w^=4q;~IjQ ziV)B})32XJJLu*ImNsw;KlwiM-v)G7?BQ~qSUaOj(;At38l5S-gnu!$x9FaDqne?s zL2j)Q5S70IHfb;$D=v5ER?v9UIJTv7Lq|+aoIbK}|LPkB2e%#PqNm*0VVs*eQ986d z_vP!nxtFbBdFk>}?G8NE663Qgm5Ubzvm|(i`}mdcx(_NN{lAi;CJKlgysvXUV@meU zak-Q0;Dy<6r`rj>I}7ud52|16bnSisTQodHqy7K7q5o@Q^*dWcxuJL9)SVl8$JzXH zc77$wU;@(4%d4xOE4Y5=V;Q%I_4T0k{ND*$%#D4gRGRqlJy%{+MCbZ-L7 z!F+vOa&o=Lv6(xEezWV|Y=g^AMP(%&9i8C{KL{YI4^rTF0E59=S|qpqJw4D*XlQ7E z+-^942?>Y8?d9Iy^E*8~Eiq`-zdpzHJC|^Cs||oOnGaDFLgvTE9~{|QTgRQ`9WO7_ z6cMMw$=KOTx3(-0OARj8AW%?|vy;>D$w`7K@aV7o%~}Vjt*tGT(t3*$h*)TgDmE6I zy>JrIa2K0ADo>v{@b9z*WWw_hL72pEd(OE$!QP(F?X}0nF`_392n0qEJgf~Kgc!1P2jS!5;Phsop`qnX z)Y#6ocXTK#J}DVae0y@*5)~B%hfBx9#yu>V9Npab1g$p*(;8j(kVvFX1s}s7mB>{I zDtf*ga7OX==JKSzzJ4sx_4@p1AeD~~2owu1EGSs6o+<%%Tz>fQAtokfaZ$f0~M z3np->)vq-=8aEy<_KD?SU*8xr5)Kay3F!_%$1QsU22*-_F0MOK5s=Qdc%ALblb!A_ z2pzB~{`%o-%Yj;)HU~?I8%FC6FIyRpLw9zQyqLh!vw1JS_$3HJJep(tpfBwi76;Q$1Myrl$I9BWwaG;-!^9dc4xQuaSO@ZEx{1%4)@Zm!%d3}AVFRoN`5#<2i2p_Sw zYCg?B51{5>0RfMp^p_1w*w1)vrk6K2r^d%6LHe&iUCPcbF4ZT8IBI+}G|Q94x-#_d zmbtmP0|El#Vq@R!N=Zqrt*xosJeqGPER-c8BPWM)3ko(gHVVCXQQX=p%F9axLE$sk z+F)>TdKI5tgBTYJOSnD99{~$HISwGf0?W#h42ALJ0pT3sf)5`)tgov>tgpA3Iyg^U ze*E|`03A0mF)`=M7n*>_<+-^G@nkF=?d|jP^H`5MPy#8A3BJ9(J&$5u3;1!JaDhLGu=C>1HGfa~r@6@+XOTTdVlfdCWJ8;z_O zdZV}J>hDa8ATEMKGBYzPD!8VZZR(nv7d)6PEiDBE1c=%6 zh6j1(R7|QrtDE$&I`sUL?cwhJ*2l)iMoWtX9sO=vMnM)yfhakS*_;p$AAfCat+BE3 zd7b!`immMn3e798C7qqlvUg5S))p3J*>JqGqNWGBl)~<1U%otG8KI=0_$#~V<3X_e zTwGlh6cxMu<8$dGbTKh7-hCWO6Cx%f6Xf6+o|;OEk5^Mx_J7zDVT?-{6&lJxg7tKM zeqIkNC_bK`$w~_99}*&^p^@0otjPNW17mbh?l)iq$^o=WgB}5aKn_hpC1_k6T|0)r z>DgIQLQ6{v7i@ld`f*5Nf`^BPma2*hz)!!?6`Pqgnx-vS2Xy-5M?4p`ushAr+r(+C zFmd0`be;c3FG(L7WKLgH;`VNx6+SeS^v)y->+gET-Z^(dM2bbHsW~y?!I4;1=;eOdMYhAO&SQGXK>$xnY%F@LUs z5;y-`gwMoQE|ZCeX_>^hJyP0`x96+tynnt`9py|K0Z!N zynK9aCMKx9-F4c76EZ(BF|oKP5{|8$vC!xy5xOuxKVHRIP;1(k=r>m=9v|hZOV9=;^NjlGbdT<}Tm3Ze&=XTKC98;d$)2L&qk!Y~t z_GPsL+f}Kn73IcbYRC@3%=A6ch85ot<5Mcd}S_rS9xtDLO2y zP29?gc~T;%-1}^Qp{k09b-vySou&L@qEOScqpRz+O{nY2b7e$e;Dfs{)Aq555*4}l zF4QMygIiFOQ4hC|d=a-_!oysVu?D&RE>t)OAv)6}CIk-AB3P%caBIG$Jr#$yGgX9y zNI5wjFE)E+!hL;xxfh!9^DWo9BJ;2kuP!fXs=;8e3{*W~x!db>mz0vy#nqKa6ZIbM zOcs-qkVwnPHM#607D<}c*v|1<8TBQ;z^bANga~^z$Tnrxn5*=)pEh6Zv%B)?4w!I| z$o(uW%Yh?jD?`SZk&?7T5F7jGD5YmcMH6UIB;t>?^*}_o=iQ>>(8`Jmvj*BCvJ}i6 zdER><99&##K6IVDxs%zsIm1zY2D` zwji!MX4fvTeRM!nl=)H zu2~s@&cZhOGfMO>dc0T;)Xp3bPf;Wwmx4N;h5vo?Dq2@;2Au!lrzVrUK6%?QFn}M& zYieq$TWc3|zCTy1I8h0Mb*MnOxwvA`1<=vamG2{!?&!DR%>m_@z5#mmAY=oZm)8ZC zn+qQm!eytT7P>OrDU{z+Tl0dCt@XIig&wpYqPsR!JxClk8mq8({Yn`4RUDeZ*ZIPr zW_QoP$MMumPW%h8jr+yW!c{foy2w3frug}BrcDIYg?#=7!(Hg@j3h~F$geSpTs0$5U0QpzUU0?^CxUMw_w zxp{jxNjm(x*$Dn5T-s9Yjcz63h@Tol_NCCoLTs zN$duRciyar^%hrRx!K9~#Iz&<=}tHVQl?^-atDT*f8Baj;*fH>w^kiJM;=*Ks}?B! zMpVZ~b@hED-==&sw!%V*xrbAFf z@U{@chF9TmA8H-!s=Agoi)Kq(oQFE_=78ClClY?GhV%D8w-XEx?=I&ITCB01BR23> z*3vrfbz5#?;u_qqOJDwVsg68*+ndo445joY@PU<_6|xwdQ-)soQK24uu)7$RtFI+8 zVl+&k7;&Gy^NU$0I3$Vv=h<3~-4yO;VvJ_2fZ0G}thJUyd@Ow+y^tZcVZ@;4uX@ ziJMq7r4T?dGx}K&JutZ0axCXU9RY9tL zT2Ag$pTo(IAA!#|5eU5&Z|%a$JZlS!t$|d&BP#;~0~;Gwf{VpwFH1|yM*(8#WNGQ? zY^|3s;u8}mCnt?eXrgU=50~5GF5-=MHYK`<~QNjwevAvdYrX&>;NsrK#Dh zl>*KmGdu?{qz}c%$A|GqD{(Qhv8B7DeJ&fG6mr`~tgjOi5iQm^tSz?%+}zyoe=R8~ zX&5#cF?zzK0bz}$q^6E;TUl9A*3n_+WrfTyE|xT74s$X5jpC3^H~&=2F%KP$5HTXI zFOG*b!Yrf0!=0R*WMyUJ{#ozsm9aHDGIPKz26TKWr^<=)TX(~(hD0Q6&%8?%__e1F z707SOLrsb58yY+(pZ_>H5fBoRFt29W+1|#X77^y*As{EmgzoL`euD-}z!tf#QWFw@ zM&e9dlNmy8IH2{74H;S)D5qo@)j*QK*yz89tuFmb#-%-_<)X%Zpy-gB~qM@jtEjP?P;YzNCuBVq#)W9=DJFj!1?4#@Unv5qiB)S!roB%>Vb}?YU;Dz;JXA zBcY_sPWjV>Hsk+o?EAk8Q>cOaL-#BF-5~IknJW{3kDO(3baQi)kdOdsI}h(|c?)%C zx3r`;SDk;J+oK?sdhg`y?99WR1QXj546mXC%dX*PjDVPfrI22TMvyy1CJH4Rzz+J0dWMp2NJU zD1W(ML=sSk)9jFDE%FZ9GCczWgP}E~Q8Xq_Tf`?c!SG7@h|{C?;mJu2U0qD&t`_(A zzp@2wEl^2Gi5YIIRuR>Gs-$cWJ(~+>Fqm>MDVmsS_u`9tH@ zce9wx&`;HMb%l6%z8OmHFYPCR-SZsW8adB$O+&ZqIK~Shv1r^+& z1|AXA48(ebrVtlxKv9PAS}!L1GyKVuC&R1N)>EGD?sW|fEkAFs&X30wMP1$;d~m@yOz03;)@syw@3(ReJzP zzX-5X=Y9mZK8Hn%IC22A2|V7t8%}(%rZU{!-QCe4F|l`kw1%`27r#%`-qA7iNg(dy z$H&^JBnp%+qdancvJ;nIlZa{@^9!7gj*gx8n>exEy^)n8fUG1`LR|dcVE_lmaGU&R zIE!XUe}DhCwsJ{XMeiiz^NrL@xW;NdxUQn_NWVQL$GL5L_U7;$qft zMXwJhi*=*ypF^5#=V~a)%5n+{tmX+^KgGxYD^OWkiAyQSBPdv)Zc@!&c#mAoL|k7J z6#PK9w|p|zeEpvBTCus??hnN@$Hf=T>)S+HZ5>BOgaVyELr+;NHis{&w)N57)I9o5 zLR%f~=g@X`Th1jnT%2dud<$RlT_fV$iM481JaBEz1#_Qsj9aF=l-V^oxd2=Q!D{EernOD63pdIaXh)kN>?sWZ4c*p)Cj%PK*{|vDte(jy6F^$y&uV`(Pp|Uy-G>;E!fl*F(+|FuJ_+#haWT(PCiGSAp zbN*nk4d?O*Hu=N8g{xw38K~%woD}Ofli8wF9}pGwQkfxF z@BId0I}DlhMt~^$OOuq^xoXimzb=SyyF|@rh_@1VlBl3vd?!t}NjdWJS`YF06Idu< zbDbk81wvL)03V8!Z&c?LDCgln$tKQ*r=_Ju{p@viJ%pChPm`%yf?X?1_;pngQ7kwt zT-$5QFto>{2A-`Y43HwPt<>1%xmtVs#in`~%=qnF8g6cGVPT2{%~DSf55u{f9D1Am zgM(JnzC@5a9sun;4|EUsA=NYX`dRaYFJr3k(nHImR3uu=7c*2HySb zavyiK`^lDLB>pOrMLq=2lkAfo*}lND>%)O4N-A2y>?u8*OU2zn-skU1zdz4yrqXsn ztDwVrPwt;<5_g>0$*qpq0qKBnbTA(7i~GY8GwB44z9$n?sR~^Tdj1a%jv_KX zflFlG%{3FU)OtIe4-b~c1Cki@pxT=+yQ2)N10WHXpEbN$pu~l6#uv1-_gaL;upRts z9oAki;J+A5f60Ou;kj7nAd$uTw!;dk1xP4gURy&8=_+J=K;QhBQW`{$$W}o(gkKn+ zAKBPXrGETc$Sd4)>_78ulC%mE5d;poc4XP1PJG?=rFk`yI#lU73@ylH>ZSBE1|j@- zjWe1B+io25xI{t{?%hURy|X;pDW7hf;!S0!`4{+-=X240Zc;6&8_J((Mv=yAKK@I4 z&a-RaN#wcV_hL%=0E)e#PKS9f`g1WKpI#s=m+A?ZtCxZHa7nRdFugayYcDp=+%NUT z-)5XoMv--N$BDTR*RLbJ{nR^_3jJKbsAmm7_r_1)}cL2TiVSBE5mP|IMZ?Jl`pb*yUUJlXI)C}Qn zpo3h~OyXDUT>Dr}tvwnlj#F(1EB4N}%zjAvbebmYV3I1wB>@#G%&JLAJj)Pvf>$9v z17IR~giA7rPUedF!m~DXYSzHqsHmu@2(63#?en9xY8=tFFo+y{rvN@xx??}p=dR z^_a9wrDljV&xB94&gC};*lwP7I5tw*oTpL>W%aw2Eu1;eZmP~hH!Gd4-T)ijG12>+ zO-D7e)e%1HbjI}E%@O^$=#fw^M^QZ`cN~t z+<08g5?)hEO21{BXZS`2P~5$b_tkXmro74_da9~xaQ5I=;jK$ga2J#H?ECeIT*!L8 zIB1CbA_aW47Qd6x3)rVQ;(-*7xgR~xz<3c)YEfGp^+@OQ-%$z=55G2o8;KaL2VM75 zpX%TQY4h?bLfKb%gZ!R80`UssCtzG7)DJb|Veq)u7tJ9emXU6z&y4(Od zsf2(g8Ij*Ue1F`qCG)tHgu~akOxN#Al|D;1C9&-7l10E5sghKqoa%Mm6CL9VuN=k- zPF~}=dS0ihXup~xy{oFqaog^wo0gfiHTFnAt(gJzDI%>ga+hZS!>{?fNtiY?joob9 z2s(BhfvL&0K0-w4+n5hWn5rNqCnrCD{#;jA*J*?4Jl{smh>9x7SSk*G#@ z$qqufle6d^p|#FjM20`WPnCm&)?J=ieByqtWY)2%p=9T+0cZ^=)>sqlL zekFX2(NT6=dr$bRj>$-><->3%09PYupTqu^>w%8*18UA-6`MKRjXC>PPHp7HR&SRx z3~(Ueqgm1AxjQ-tpbM}hs-JY)BzmM1lOzo_pw5E_HVH%KM+~tfHQYA71K7+m;Y7F- z%+2do=^W|q`&yfDY1`n|32l>RK^)P?9j(>Q1^_&hmtDQd|ZWj)*iTRZ&2L7NX)!kk4Y;Q6!U- zxq*R~M9I>d=qndA{O9Lnnj);&qGf$B&u?1;{P7+x(NeGJqg`YRh#eQD3#ll)KjFEX zbVu2b&UII<>-wmq3hO_eV6*lR9zLt%*al!6HL2PHfBG2r4<&aI-wg9f*-h;f;e_D& zHLn+)GMxWA?!Mz%I?Lcul0#~?$-Ssgb*0YgXzdUxC!B#iec9~Sr^#IpF3rymvwtoQ z@)aNu;N*0;I^9cU<@Y{6jAKxoZVl`Y0CYt7{h(vvBqZnUcOdexX==0Wj@l9oFpK2e z)uLy;BFB4fWwcomXCA%l4D@N%7gP_QsPGJCqhPyUy?5+(er5N?Vbq!kV)N;VYZ?-b zEuc0^jv{Guf370&>`Y2LXGV>^m2*11GFfmuK1=0dCg^w!=1QH-Iqlq1*P=Z(zW*GcyK1J7io7>yf)Xe=v=XSwAOWf=wl#1ALI7p z(2n&%>MBb`$50=oR~G|#x2tez!&T1D;Pa<~3k`r8B1r;TYqzkyyGsE~`1S${Z?gF@lq;b1+zUGHw^+iQ<1$=cDmxvOts_>9bSbZh$yjZwQVU%p(J znGxXNc>0r%I`R6h@X#-4?MQLy-l=|+tnjm3Kv&~auR7j524OhAcO(p zl3ReUU%$4pwoVEK!04Y+Qn8DJe2WPM{{2@nH~0M0hwoIv?n-BkK{{;U1~mhNQe8_9 zl7IJKFfcHPh%7>zI|@M6W22)v)m9Nr#@$f@ciLIjZo^BYfQX5A4z5qCC@zhf2^Fyr z^{lKRfRw>fffj|od0bzf>?oP+Njm!aicB(sg3ohua`aogNhjx~rWib~Z*F8|WK>jC zK79B<^R42=cx6_WcrM(+*22Q#-Mg~&BJMiR6XyQ9%1Zpk$`r%-AJQIbT*AUl`T1{{ zxL#AGL|7r#*DbB1C_6hl-%JNihxeu}MC@%s6UG698KM~}DUgR- z6)6nCVd8I~+R5cQuWsk(^`18pv+IxRr*s&teBK;PQ-u_*vJo)e8)WX2mzU3i$1E%_ zztx^uSa>16dvJhzmXJUKQ{g;so))-GNQ#kP=rGsj?`mAkMvSU@czA0@iC7l(G&LFg z+S8Rul})tc5)!hlON-m9v)J{TJqfM(T~Xj5GnaN%?IYppni^M5I<_+QU8t`dsxJ<* zrUaewVOmkN%9lQuRo*m4GutHznULp&-*th@ z!Y^M=NHL4Fzb!{YL#wr4N({y6Gdg;c6dMZ|#R3ICkdl=A>=_vuX_edA*;(-J`K1cK z4m2af?*eJ6eow7OBZlXf#9`vUNXC!7QZ#OKh0D%i4DwDc7 zrF=<0Z!w-X%MnVioO?@}*|5dU*DU`>Nop{Q0<8L=uns znJ^psXcQzBV7o z%PTI|X`n92&U!qUCUhuU^sRMaVPP$Ye1T?WHfUr-xvl~uWO(l}PJuZ6{KCSKWzeF4 z_j%bVMKGS-Lc?>9{e{Nd^h(-iUE3O>5wi8`3SP$<-vE8+)D8MFUHZd32r*M7ejVD> z^UF(_p1h{$=%I__&2qegVpUghkn4jcx_8^zk*v^>*1O`4hJ!o1!S46|R+odE9@;!o3 zP*b}be}iZ~+R6s3btL4sMze6qm0v-Q@5BOd0 zZJn*~5sUiuB{{dMRGJ*WsS@}K+%6bQEw8+fCNY^nTh4)J7>n{%xAwUm^#wYBo| zKi@^DDOr)SYao zLWP8cM1Nj8S#T26H#X`LkYXBmA3Y>G#N*=6g6~Wg?;IQ$^eeoYQ{HTA6Z->Jm@E=_ zI6FJy5;>4TPLhSGFFWsKjo>!KYy(5BPi3YceyOs+`UN5%=a5y63 z6YA^hW9(TaLS59`dmG&jadn7+kYd zKj>a#V`Cw(VeUjBO)yAQLR{P|6JB0kPDMpkA>#T3K1yYJGWmd1D~e1+u%l z`za-bxeo{gq9kbV^C}g@3*DNp-;WrGNG!yD{Ya7(K`oB!7+54(MU(TqnYUOtIIn}> zzkjdIh&)>BhQVN_r0NUJUS|R5xK%9AaWx7=K`Dl#+v8zIh8-G&+C((NfBFe;Vscbd zBfvVJuXn29a(8#9k&u&%po0`uPQ=7KeZG{pIa#c0*s-#*qOY%Cfd`x#0Kk;5PWMz# z4z{+Qg6yoUR3NM@nQN1K5Px`Ptv%Ne0lyh6Wv7-JR|2Ja`l%mmtPMkOJ&?J4g&>FYG_O*bDOj2)xCe{%JR$Lk(GpEKMK%*?(FQau&~U4PQ{2bVH;vlxBdD0 zp1`;`{KkYkb0_APfL~_9h+JN#As}T)IXyiM4t}(tD2OlnyJVv6DI_A2&vH3A{nshk zFgO|-nvai@A zSy@?Y>zyK&sgaR#_~`ptqkplnv4KFKb}=qn`xh{Y)hsZuKO8lBw8!E}VN%glF0QUM z)zv^gK8bTG5pOMZb#)yb9VMl&V`cDkwM$3<(KgJO{kLhuGc4I_bWj@_CMZJ3td3AHUrD z_S)k|k}LLWT3&=Z;1g;Bt&lW>cFVUSuCFhgNcw)2(NyQ>`tp#yJjup?P>lEu4VT~^ zdgXLWNy+}{-rSP!RWa}IYJW2K)9&qUtGbOM7ENX46`S_$!2SFF_x^S2D07kpb{BG` zU*Fv9?CexqS5#E2uB{1txtl%Uqsk`r#<&nx-0H2JosRlP>1g%a2M6ZtGxyU1*ka#3 za-RKUH`VB}lX&j%_U&>Lg{GpSqL!nA!r*#eQgzMj=qMf;ndk9_d=vAIm#3$Zv2m$> zGo=4ffY_v@l$3$g{4#+4GS0Q{h!pogXREOM%dv89ejo@`+_KW=!K_NS<+lL|t}Z9f!%{_x?z&F6Np ziQ@!gW8(x@i8o`TqgCi4+}y{jo#9pmBy==%baeduTDQCV`$V*-XJ@#Wm~jatjOTm| z44c#C#F*UMAFz`i z#rmx0<;#~wJ+`*C^78T=r0$0D^788H69MSB%q%P{a`COB(&QsrJf#119CS@`S21?r z4V2xWg%z^<{kuRn-R#7~`tB~)=3rl6!17X^16up+(vqmK@b30@0j7NLRZdQh)znvu zG~nC0wzjs02EhybQ&!xW_xCdR9qwBXW{9%4a>CS2_VzsU0v>oxE1Nv7g@6)0d3ku? z1pLh*cP4YwD^Q{qW|(v^!JE2=1cxIqsdrTFP~n5D#Ru`c?n8yil0N@61Yz21hUfRRB?%v$>;6e(WER5Pt2rlO)EnPQ49 zSzlMDMP-tyZt~<hFors0YuQ7Qe@+r;L&@Ce%?= zlej;(xw*Nx7&~ejnc`0mTd@!kya%Rrj2ILn4x@&R`En$omD$emx|{g=-fj$}ZX)yE zjz4KH*pIqmKyB^VJMntzPS6YN-HH7uq5TjTxI}1x?DO_D$J&%?^s>%E9+kXI2*qcZ# zi(irEMhQGIk@XqzFzvJT{e8QTM5+W4fTVX^CP`eV$(KrJpiiA^c7v4Dxk7#Oi3)Vge+(e3B!{QH>! z7pHr3x3{<9r%L9(dP`Am@;Lh2^FD0v)!wYWW_nM3@-NLw#ovO{uC3AFms3cZ9d^nb?cy@Z)GH9%vJ~(jp?_Ca{t&+$( znCoIXVp@GjmbLT1w5y=e_v^ji{bFJ7O+4<^@VJE-<@RVahW-v8;5&@Hy$Rj=+`F|p zo)LdyitGzur^e4aIuEt_{mmCp3;8cJ`ENjvy6azg%%9-u4nDr)lTjbs@xmy?;;xVX ze@*@2oqvPNsKZ~4{((I14(}TM3n8Npe>M6yAwnJgpZ$xOx~t%}baM2rvM+2+1oyIw zsIu8uk=*{1K)EC{_f$;;4|uxLsiWbgTi@kI`SeI`_2%jBeBF(^<&@Fcqb|AS!J)(# zx~FZMo2dq~;HSTCx`J|yS-;%I({(;izyH)V$$c(A!mVu{JT|PPuckL?p>gOHlWY-k=A_7LS=tm;$CaPzIV(>MD;Y)Jh3ISHflsXN7C zvg+e7Bk!xj;Pysld~f~D8Lc~9E!lyKKld&eDi3$fI}JYa{#+g+#tturKPpu}Ah|h7 zV(G)uQ3w7wJ0sUm`7MfX z-rl9J5sARTLI63L6~qW&w*U#P+g`&@(D^YAkTUR+H~RKsZLxGghK-rebjv=EsnvIx zo9QQfU^fMcglxN3_h|WfiN%(`dYb%kOt{)#z20F9gXf*iwS%F~ZngE4N^gVBgra;< z%T1x;WU=Scb`!AoO;{a~BSZ1n=e@4^>FLl2@wIp-17l-LyF5wCrZcb2d1MMQ3mMhY z!!}E$$9rAHxj}Tfl6cS=+RJ-Ga5X*FHLj(~px2b3%>TUROD)scY^OD87d^>v)lMzI zPG3SXk+h#&BWct7>boSqoq1A167fXMNndbn3AoWFYU9Cp!BJ-u1L|IlRPf{)G9+O&?rtQYCS@F^$OqCGZ+uJayXuH{}o|&2Y z`s7-}rxoLbr0HkHJ;x%~W9p{=!srOOO7nG@#2#j(@z@DnR*8>G^)(*svbijK9rswd zCut8UQ5cbm-|Vy3SYsSSpXn9%{qy8l@HBryDR$TjrcESOuhrtb+$E`*_s@*mqV7dd z3d!UH(JhM>KP6-llGST5t*Jk&Th61U`f=I*nci(wzCa^+2BCH&!Oty4J|SQ^qu@0L zLvb^|+)~zhtI(p&#|pZ`^>MnBwhVR=(u1?hAC!IVOBd@6G64lEr-F^ml&X)>xV8Gi>cR-e&dTLL0uS2Jf3Hjk42lXai%O7r;wON>cm3Cd^a@vU-5*L&Rk8C{?u%yxGeAnnd4CG|s*?t-dZ- z&5DoNtnDcf@h!8hT$lN%p);rDl%6~JuclmLLqA=$;XJ|NXKYp?-7O5vv|AS8=DJkOwRsESdh5cxDX zW?MbmzE-QGE2NOM#G1RvoM=x40^_ambeki?v;9M8XN!T|R@z1#WowPnXV*hLYbQMj z_gG^-5uh*FV7XP%8MR4J8B|hOILDKqO~A#&^W$)(BQ`d+tE&qNeWpD#I?Bbt!7-MF z^+>|YODLKx6ELT2qC`<)x!vol7>Z$HFqGij$n&TR_Y1z`uATdZ;` zo*AKxHyGyANLp#$?t59Q+LxYk?fk>CoB-#i?*~zIM@@^3_t;(L^glMGJd3Xo_)9js zv!B0>tKkQ<5gfi770zxrv8l;dlSnU(n=G$_T;CFR%aYAepPkLwi1!4h-)`)X9Fy6b z<}vF+wb_c9E2dY5HHp)5aM^5$+n(8*kz@OoF@Xyh$P0)_b9Dx2r+OGPtnDIF z)exe44OSRT-=jr2IZ2y(or`EM@%`ITwJU9>$JH;%W)Jqtk8&!7H22(E^Qp9yDOOGP zui4Puj=X8W0_COo)AL_N{Wg3>%=7`p$~MnXUisS@9dcC^q3E&k3>Hq z^w0r4a<~#vi+&FW`mAH`y<2Rw0z}o66#`5k+f2up!}Do5EW%UAbh<;r>AXZ9c`*0Z zi$`@#wD?A9W43l6Xt8CUZ^O7JmDd7eW;usfnd3TxRkob>pcYiLCJUaj3D7Mq-ZPig zbx;kzxBR|UVQenAX@{+^c*0PlaagZj{w2kj>toT^k7?QUQHUz9_CLyYHa4GRp9hD8 zfWhG6g0j|Dzc+8*sHosI3G?x}+4MW>lTyB5VZp@4#>T0>Z+=lGqJ`!!ncTc@{cv(lV@FZ4;N44y~+o5*NR(-~OSWN8$r6m9Unc9@dMl z-l!-Xrh9#d8@;`~H8s3^e0=c%No9Dq*x9d@wMa-wIZ3c`6*FAj+`4)F$>TLU1`Q#m^Pv1oKJn_r`#?ySUUP8#V)R>?%3ycU}SI>`Z(W%D9l_N3O*h zIBLOpG%@I8JMHMuZ)~CwDeh6JPhLveVgBwBc?-O{g|72HT2QW ztyOF7MCa&CQCJ}~=iJ`B3DfDk`>NGN(~x7^OwvOd6}uww7?Djw)Qah3Qc_M%PMKwc z^r$2)p0*`FAK!enzrX+d+TxVm5akZ?r$FLvQ((N zekYPsmYKh`JE&OgPh`ASy*>HWZE1ljK{X!l`$bSciKDl*G zIrU4+q0b5qNqD$ftIL{%8K#YMH=gom!Q;61TeWx6b=CB(n|ADagHOG5!I4d^lg)KG zoT45T{@gR2h-ZF3!`HsAuO~yPtoVJbFI}8bg=3y8As%8>4c|`-Lbk_tMpT!>1q1}L z;4fdkFoY@(c7_utn6n(yBh)oa!r#b8epE<_N%5W# zc`SbR(rbO3I#Jc;n9cb!nQu)2?Z0W)@YzZ>dQ<6y&(VHB`M0na4I%jt<4^L#O!~Ti zY~QCs+;Z$B9c|R>RwpF%HhO=#|DhUbUie}y#quCbYRbpEJbSbv{BmMwJRifp`dO4s zgMm_p!JNGe4|*!y$;jfPn_yQ@-Gy$;o`U4vtWCqb32_mfmq(wz+o21h{sX2A5S?l_ z6%K(^cs4G!1)!UsjnTqju!hDRJbZkRZZUI3Ypb7yMV>GX6CPOf?qap1>uqS4|Y-@|gaVo(_LnKz)A99N9vsr}wqnOEatN}V<)0wXJZz$KOUg;Y z0Y^UJxp^HNE1LQ5pu|9H$vJOMcTvJDIbhwx>fqMME$w0i&zMfWmccBFf$B|@+0{|J z)df>z*kg3t-29yf$ti?_EUPs>TqAJ@&1>^Ewh}_ks1o%9Bup*dL6)D+U+cy7xbNX& z3s!_L=KO$>i%fJmQ8&b#t8trAe19tb*rN?nB&w?8wKXT_CnyOB9vd6;^7KS}hnLwt z5vqZ~htgjb=I1B763wVULqbBzN2jKUg+A=V0;{Tca2_J9SSq9!$3*7X$*`hI)7*<& zTbF(;T~CcWKP-~r)tc-4=rHt1$cs;Fre6z84&-H(mWU{R1!QO}Uz)^E0@{*t{}2W8 zYl#{k8BYqrXQOPYN9ybc4A!`}ZFv+_?*&9YTl>n^zt*!Yi{pk0!>~abS;E~JIR3ky z?(TWhPo~SYS=N zdq4Y;i;EiM8ebgY*nXKcd=LoaMny_WN<|g=19S6I{yCE;fHsH3|KaXxY^zW>z>FM! zjHkIZA}UH%O%15NdA>7Nn3wmR@?YP(tr1I{{&i#i!3j)qet&a5RVc^J%`F_Y75n|6 z&c{0OKkc!1$A%Wo`F{7&C^$JP)oHN9r~jPXk@Gx>rkFnnqBSM;)ezX-oYav zAVft*a#l$I000#gh)}q`w|CogAqZr@KT~#6r;&tk3WY*{nqXmJIc06+Ti~U}#8i4* zLIV@A?}l61x4n3V(ap@vI3jKHD=HXVJWhUhc6N4hCK6#`xn4q54!ef@AQ{Q4o&K_k zr?f-+GiBk=QeZ>F^`S{A2?+@(UE0r|BxM4QrEO+dhRC!%0QtMn`d`9bozXJXOvJ{a z)K%*T^VMr>Yv)?zd_HEk_C!QPKIhvb@HQ4!Ry3o24qfK9wyHzbuQVf~0UCt3xJ=l{ z)m8`9W@Fp*-yMyQS{aWw3&y%|nseg^cmDl01~{85Msi}ZXaIEwG zOlQlfAhK8|4m^qX-ef)u<}$#{#N^kd@b=8f*?EBc1#9e>?NIAyEhi@@8JUqr#~oZ; z-07q5ik;g(HPYwgwQ3nkY3b?9D=NeYr>Uu_saaVu%DO`=o6LiJRw;WQjTE zjWiCi0<+#>(Q6CHrd@BWumARJYild|%Jf^9pPye(vIqziP6mgjM5m0a$jz!#>B$8$pDyFg=H&d;KTD4r zKy4FN+R5gkoTs@ZKfMC2>iT9d^BX3x`$TWAi2FOf5PLo=YwI2hG|p4T$SME$Ag;~L z&8#;y7~CEglzeTiEiK0DN~z~}$L;+uM?*No2F-Z2@hOn!;bDO&v79U{=oIg1vrrQu zQ?U2Az&8EfP&l0LVL}L{oNgyskkk$^0gzf&-I{ zzDN!dj(uR+_Yz?RbsQX=(AHgqye(i6o@LaCLgr$;DfmH>>pGMDy^u6pH2Lm+d z4Q=OHLkA$Q`Fr4JZU_Q&7qvdUtrlOw;e)-gL1Ym^iLqX6tzK;IoAF2vM2?He_vWma zzkOUplcwR+3c)Ypx>MmFiQ`gWR%8$4sn37Y-ms4gdpJ1EOgWoxyN2@d!7PLJ4h{=d zCgDXTCV`9#pm(qkT@hJiz~;9&1^3GWaaq~E{*VZtA@=4vg}uE!a8NdlKO9-^{&+Ar znx8nn;dc#}{xrAj;*)AH$kWAuMj5+z;kHkjipfFJyTvPh6xvs*tTlVMi&Oe7iGQLv8hjZ@}a;<3q)?qn-`jpIO3W&CF%B}Koj9fYQj zyao6Khax``N2X^+pp+_Mr4MsGCvhNlTSUXyTk+A~zx6i-cQ%$lR` zB%g$I=V+Pues2onQ&4+;8Q|2dd69H>9n&izG_N8f6Y1Hv_6a}e#~8ys4aJL1g+h|c zn`4GPYOWn5b*%5qmg=X!TNVi6|y3oeO(L@)k_89=qW<&QUz*# zPM%UiEROv0W+##&-X)jYnMZf59k;ZyLz*fsKZmy`s6XvwE3;7ALCj5gsOD8gd7Jf) z;n^h^J+g~-ijfuo1YtEcHGtp~kV=|Sxy7qg72AJjJX?6Mep~=ze3&Y9HiVJ2m8$c@ z%7GO-B_$=My1iXbR6#@}FdZ(J7qR4tE|^i2APnMBQa1MY>`f@5!|EBSWKg~JTB#9HLtVH5S z4F*MlXtC{qgyWYi5x(^Ak#wKnI4;iUI~1l+`7N@haSowurx$xle`1k5s$aQ9u^1l%r%={VSirIw6+0uZip4H+ie_DOee% z`BEev`*d3#6SInONXpX7aHVEXE#AZ3mrPs8etv%OP)GQ|pB^OX@5CXJ z3782B3H7*^u}wWv)>iM6iba7T=uIDIr4qm#0zLmv@=9dPZ%OYN)CPRR`vi z3|%GE!E!J@F4qJ^M@M_AmeiT^hfLsWgnkOTT^TQ#5irR!TxeAvp=yrVhlA)AyBip+ z)j*UYA&C{O5D5=mmQm;m{0*80RzAB;uzCW|TqxIS7CHE2cY<{2H)0?}&6!o1TLn<# z{JmDC3jg_BHgTO-*tED)Wk+X}%~J!>ZX1imCgc=jQdxAs4T8ZjG~E_rNhO4c0WHv% zbO*D8j{;SOiYTFNP;~gv88HPzlgMYPy<78){yQd@7giWx2T)X>zFgFC5!&AEU? z=o!IKyJ%bt4rsv)E9JEjSO1lA(h=P3a{Ga3_4@TULeHi(+Nfw|EuwfX5m5`YjF9Sr z5FKf0$ND42_L@ zN<3Z~i;Ig3^nT|%IX@RBu$Hitm;V4Gi4!PkRdlot=V_R8yFST=KrQfqgGsxP!9mFb z0FIf?9=8w5&NsABvsyN_^!Uww3B1jAoYf%4N15Ax5J7M}Fg zUEOrmSQ`{#8-$^?A2S++SbOwoVj#tJF=vt@*4gJh^O!)~Q^Y{F^ug3HRiAio9y>R1 zxj#EKIhn!d6_zj;zEp4NDt?Bgf;jXD^z9ONn6$U`?CrbF{bz-Tblg@MT z>R8^m`(uw}sGNP>YC&DF5;nh2|7N&~;7b%>b~xe1^d3BdbkEG%F2&IRjAk9ucj*Ewjwyb|0l2Lj0)Hqogs zUvEVbQBY8@h*7nfa}7>-!&`jC{{AyAF6VW}K>4dzuS5#UwtKv{X!z5Z$8|Y#cP*oo z0-v`z{0yQUj_tqX@MX-nw$>Hig*dt)5s|bI!fTm%pU=xBc^0G87LCwAuQur>>RkSq|0_gi1Tq-zlAFq;0pcu7ZXs9=a8db(+@I+qM&kL3{e7()G$jrA4^_> zs9s3}P<(}pTc6~(pGiiE3-40Gq`|-naP^DKx+aUz`K@|Aa0HAg_f~qSg?|ik3LUAj zgC9Cp+yMz6Jh3bvcsGp3nrfO>^3XFw%W+IH?%tn8rrOP??d?{bf7kA}V$JRAy4eJN z0XAnO)%!yRYieqW@b;!OZ5 z@o{-2rMRuz?QK&n{*l`65m8Yyv$O1MY%b2umoQjcOpunMnwr_pY|D0RP*9NBSVs2Z z*6dG+A0~38$Rq0;AVfXOHrZ%D@6}H08%&!Qf1sBZzcA!_EejGlx{*#9Y8sj~KZZIj zG&D5T3SAqE?$OcFt*x!_QbSo;+1-xH%F5+tS0YXaV{2>cH5ap|{_dJ!Q~Rcumx7CH zAti>1tUavQXS7x2^H9n+&G2dw=JEb&zZ@;np&gC0n}Nu_8p=PPpY<7%jfsg#eq<^M z4@Vm9VW`u}-~}MCg0zqS7#{fdmcFC?Ry>y#3csu)B{fuMvuI6K1slib_x7}J5~5d5 zNlnc+v=lVKCL~;`G8rNnJCb6hWl+P%Cq6wrWw%>#G8UU`YSex)cZ}0-b(VwBAx$Ik z4DwV>V{p>b+n#Tah(+NyI_`|-iba1FMcn zuSIwF_rqn3+e%7G2K)Qp;5^%~v6`Bgtc^MDj9y+{0hh_XeEFRg=`fnc=}!HspX=uKa(|A>lC1p`Hwz0o28Q!`PbeO{Ex6*$(2;g_W+un6 zk|8;>n|>UyKT{^W9TM`^DSjF!J~1&zWR9CnP$hd*(eIW(^FmZiEZC$B3WetJL(o5S zJp&5~g0kq%W@Cg>BBGp4!mqHt$r;9FWo6~%eW?vC_XI8jABVwUN*bCt6Balu<+<2< z4Q=fRo70^#t@@M6ny`pm|8ijpBjL-RCPuZhge8XNsFs12L*Qp<9bKQLhAoODwIdfXV~^2C3g?-n4tW=ifZPAZgBI}@s zYZ`pHxVX^oSS)#V1Qr4#sTyNvrzsg38h+niYz5QZ7Bh zqIDJRkDATzWV>U2CD5p?v;x@a=unV2#B%1Iqqn%Zxi@-{yH%V0ag4mo%_*6LX%yaS z!yWl07$(bQ@HDy{;wElQ)9VQs%@+Bdp{4z@_fXZ#-LQ_d<{;YH+A@f|9n~D{tc#6} z1*%nuvgdG8zQO5HRxTSy-24WbD~^ksdXDfmbLuVEY1St$V%9x8JnY?8et{LlD;zlcxMyT3Xt1`;)FH6)L@I&H@MibL^8_v3+1u_Rknu z+Hf)&kve>0%UNh;*AQdc?|!DfNcVD__b+oZ5OF2?B^Gf?{fFS>gw&?ed>}=v?at?;UVyx-u>CfjK9WQ3oAslJs zy`Q(7!iOIo9;!Yw{jdR*lHY$G2}UJAbB^I;j>WhLJ^Q-(15Ltv9-qQOSzQZNo0yAB zbFjFmXdHq_9n@MB%In`Lucyawl)q5KHp`}M{4p|+jIurcIhqYAg=Bn`sVR+cp?RC>Qd87r5+MOvkV1tl7QOdWaDZK0?Dl0iHA6n;q)MvKF0f_|`Ga;Rn$TIY3@lCq4Esm9u;&@FNrr z|87w-y;Suxv01=G{!L>;S6~sX5ijaKiJ0ieX8=9y;KRakIuHmH@qgVwKDwJIRKWJb ztmEA@6^=^6o?_Y3?&#`ZoPN#+zn~z58zF5MVz%PZ+uq*ZGc?4Wm$K!=#KaDWYNG*z zlubu@gxA{#X+%o1W zu__=i)p-cw0lbcJty}?b%7RI89^|adrJ~&DGmDOn4#!McS(!u9W+WcFaoDV&$P8Oc zYbybP--KZ;lPU(z8)c00lnOdFIyxEh4M-ZVgQeYUoH#~}LQ^mF?L;J8t?LkDK`oaG z3b0!=sHO?r!&+E2n(X2`@6kNs^`hw6?%9Nw{@oX2ahI?wbeDijG+d{(F8Dn&440g; zJcy1tO)knCz5CQRf4PGh$s|MUk6+)Vy@a@fN=uOoZKOmJk9CRhp9Lc`;ZucPBC5<1 zFXlgM@$&L&=5}SO7mwcJ;NYwaGdWY}9du3Bgq5}~e=xI3%TPEJizeJ_<07i}(!!7& z55jy=qiLmPHkKjcSc+J#A|hIUu-dNY#k)K?nUgMpIj^Du!3@uEb#VB}PykuUmz%bx zy#2=McHMpQ*3?%(l@5;cyP+Mjjp`l_7>=qqX9BC}b%bQCUsblTPBd=Sr zbtHPhCGTKtoaeOBus4K{e6Uz=2P}5NVJ>nhqPw2*mze7`Vvpwc>h;}|$ zQOLrAN>W@(s@dnMt%i%37|!ZTCED#)7D+gx_yxt|$k>>knGiaTS3+7^giscNqKXda z!^h1Zxmf_R&v-V7yaDCpyc}w5 zY%I|#jrw2%v|loqo8wNC6BRcxAq(r$dbM9WMyCL&=*A)s6-~qRE@1=1>L%& zCc%BRZDPbSkwizdET>mJWq>m9M(`scBFaautmqmGPvxoGkd+;EwUHRnXa^{(shz*d ze6Am*L}H((k+NzcA|hwYyRoEV$}jQ*cm_S(H($yItV=uCHhbPwwRl|YP87;zLQ56c z!;z_C8G7u6dL^8e?l<9_3;K(%I)1!T{C&AUTN_tg6x1|=s#QGS0Ju7m@J5dc8#wgf zs1W{a+zJF*si`HU2RnvN47&E80X{9Lnwgkr$O-|yyF~&mXqBOPl&2At5EK8ALN#0m(h+C?wY!e*E|WmGX2K_bVGLI>z~$bApxRCH#{;mFJu#WEnd-M0bNix$T(RSOFXh1D{x)-p@X zk%_Y6ii-MkJQ8L)y=9^LYtp68PUd4H(*n|-Qx9mBin220X<+eUXq-k3VXDGAG+pbP zq0g{p+cwlck|gj?`Av9}Q=i)-k!Nq|smx}V!=Gk4bUhuvDprw$_pMi2G_LL$nDoFG zH_y^dzj^4GA%h7M6O*YIqv+oWX9gi5$}<` zy}jbHvOs)>i)aS=aq&bmCbZ{y=>KI(8(==ip*CcBRlNFG7KmBm*kA$Zi~zlpRW1P`O z!DwRy+<1E4jG!e_+e6Y_S1F2@dbK?^Zr^N$geb{v(nvr0E^yTbfBh}#UxIcR4^|MV z&P*Ajef>g{Hs3K5_1Rv4s94y(MTx~xEoo!lI}0r|T5gA)UW`-v{h2a{1T(uRl&hI( z795VYKTGj8n`A5yZVDMB*0GGlJ!AXGrm&y%oK@ys$N>K(5&d;ChI<1?7XwpkP0i<- zor{T~da2<4V5y%ZFJHZ?SfOLJ;nv2-L(epe->dU``*hOMx8T`=yNjo8oU%l~?6iWC zrcQWhCHWTFiGK^vll_(I^0KxI_b#?e&AzfPm2Ou913E-L;{ZTiS!ITdgBIC*CX%4( z5ur3XcNt4yHCw(yh##k{zRY=D#6$VHpm%e1PQlhXW^8ZD8_ty)cdKu0ZRu@$Q46%h z?@PQPZ2&ROf0*lZ{}TM@Ha5zxqJ`y@Mida83-}E(R}a-`9EasML8sfKR^*RMb)wM# z%{NRO6&kM~L0tW*6ou`M^S0Dbf#s8L!+jugbcnk{mRD9mg2E?r!=~yf{FztajE(#XZ$Yi|*_lu$yT*ZalvKAK0sl?_qhi94L zGgq7^a3`9{AWSSbvVDyn;RcfJG*vaB$L>k+84fuiwm*Rcc$pidIald&1N^l2)8KsV zTddvIlC%A%$1+1U(L2N*E0lr{n_>lX$nKZFsB(nEH0uXz&DU4j)>cM!%i7dn5d*q0 zg}pUxmybB}QdWufYaSVl`bISss--%J+U=A5EbctCA93mMBmT2iwZ?jy?-K&35D*X$ ze)-`GDD?lD%S$oFh*J%-p4pYa%TRx0vo~*%0D|{b(WKXWdYr&9mXhm@$WaKx}}0RIqqiBZ9Lp?>4}~ zXuVX)WXnYU<#BHF&;wT_5!q;c=5hR?qF|RBBROnX_VXX*wJIgzN-+u_=6YoIz#wQ84M%#>j)?Q7gpp=)y`onF4g(I#lIA+H6+F(5PUK&01>gU+KjqN!T zS}SJbH^<5o!*bMq`RcK=zAaIV!j8Y1!<#r6R_?7x-~aR{U#H{(C@U1`T&$cgQZY0( zSz|>Lu?OPneP>(&)ZZ*RB_HgWph3v>0{jhb1A{uljeS-Y^W&CfN zj{jRB#(%>D*)&nz+}zwGbrD3cd5lV_@}&mW z#=|?NOKoq8#7P;lN-=G|{4S#*L$q4-M;o#UQ8E^<+`th<*|KXtP4c-}eN;GQw>vDy zt827TI7wt*aoZ5{Ih|OBX1iD1nCsbWE-Q9>BAK6HJ-u>%OfrEj)Q&?cOI1AFe%=R+ z?~22fBr)@_?N2sYF>jocd&3uxKl!Ygt8!_l)Pdw^TIAz8eiFB-{3XI*+%UW%I9~>x zj?&rPpGY4G$$aJq>^^KftuwdV-nQ`L404dd>4aGB_ByrTGih4zy*|F5b*0(K0&lH6 zjg9e0l0RY-9uW{`*cb%^0KqqWWdA^`{V?s!gB>4sUb^)={)gMy=BR*rV`^J z=AI+hMeSD4Bd5sd_iSc{BX)eZ=b^qmZSR6@QNN=MSBx}NZa5|_LgdSrLb4)#9?#XZ z#`1sp9JFSCHoV&A_qi`TRM?AL;H|^>=2?ByO7zex*6%rX7rcY9%;U{lCZ=+BUycVg zTiiE%=$eek*H9G*j(;bzvS&%_=+?qcM*=oHR-!Hj_B9BPC?l(xh^8$!-;5DG%yaWB z>mLo!y!&*AYc30G`^jg1BvE+2GZB{_#6;=vO>}bpkQ;U||A{T%&>PSDVLt(H)Px;% zz}u_sbcAy3Wa*wWMSsv@xcae`=Ro2=s2>E6iQYUeus%fA#_Ck%`-ZX*&^=K_CF@EVw`&>zJESE!wA)8WS|7zL?4=VW6vrP0%D%uo~I*^kVI~h&K+h4stF7h|Ibn@ckP&|o#IwT4Y2IXoxoju*3 z)`jH#5^lfwSfXHUbnL10M`;zKrW&h4%ajML*Xlwc7f}sD+`m2bIo)H1T9h$<>8N2E zy3_NywYdI9{E$3%B6=AUkE!o4KN0&|zvv+9;fXuME+%H)U47rjUX0JyoiBcCo&_J^jw z9$ZefFJz7zXhuQH1X@_4yPh!+w}&H6Q7aQZHsY4qSW0cPH9xmLx08y;Qb3NE$~ z@0D9g&jHVE_CGl?(ZeR?o^FS%BF8jsAI6@p>Y%1Z;*2ioE$4QRhw>R^h{!w<@_|q1 z3(X6I(Wye@s6LMwgC{#k`H2bBs@<`smN?8Tddqi#)OrPJg%`%X@fq=G1&OBCtS&#& z?4-9GmXxRGA@l^E-slT zuv%*yBp~ZPFIPAEE;5!UCd4?~e!5!QiNTd+Rk?U)z!eJK^3^23=V3ljaYzzc!f3->tE_$d0Z($1o=e`; ztd>{f<1IjgYB^(^k&Ulb&BOz**=+@lsuN@3tZX~p>*1I+voYr_Jw@4G*|MThrC4jaWWL8wq%z8Els}5bz*xaELHE7M4rBr~+ z4O-xDIb8*jcW(AXS1%bKP3dEr4y zWWbKCFrX+So%Ml5QDi~_!g;_&(7t28+B}IJr?>(&b9^(DvCYc|BO`FSSvXBQ~5lnZV35R383$CDs5wo$i&-*{=Qmgt-ySHblmHB zDCPMVKe1hSlR`6vXVGLP>vfswyeEti!N{iD{22Lkl)=^*Y64$M$wX~OZ`1LmxKHP) zTa4d*BhpSrVPb}wGaq+~P06uU0kF&7SGm`IZ})V)CiirfS--^UqN&$8d;B1;dbDzf zmw)}%W@%R=*>tc_p=I?&Yb=eA$h1}N5;AUyQ&e32DX)2i`sIR49QZLtjFaSbZ;LaazY z?(XgmSBDcjlT!mD!^-K zf~F=SovpQXJih^GWo6~@@zKc0=)586pMvK(R*3k#7>vXo?zuOaA0Ll?m~wPvEAA*K zC+Feep{ACkT3}^m1seb3;ed;ee}A$j>`ukajrTJ>IT?q5Ku1YQNkJjI4!XMw9vl?1 zu&}VmSymTiQ-7vG&LATr_w@BeMMXhjB!=m~euemOYX9fi<#NI27~wojOzTkS!t`{W z*53BEs-B+DMqgx1%!fnC20IlMjMuob+KP&Pfl#Pr3-w3bXHAME2mPSu<9(yG+a(kd z5)x8Z$7YR697IHFCM}KZkiqALizIJc8q1{*{2Q(iBAxr)M&ZAf*pKGyr+9Z{8DrBgo0keI5)T=pI?Wyg4mwZ}*XvMeRrYR|{|MVYs*Xo@MZP zY4%E)w`vqPGw3v-6A`_yy*xSb{jfo{TTzV=swv7gS4It|OT*j=0)f`sBx6n5G~h%C z@$s$g?E3vW^&4CcHSO(BAMUP<3=Jz+dVBLLDx!@7|4lj1a?sGwUfMub($o|b;0zL) z_dgGgo0!u)65!x`%uoD{h`~!sUZ!Gf9gZd`DOm~06^pJ3^Spx{HoG1}+4?=?y(R#jWwRyC|RV)*eL9fpGW^6gX=8b)Z zm|wNcX6g6U!^Bm#;SH(3%5M#aF#HDS@_W9v>*)n4h=|CD7c)(Hc1uxRwvS?)kMoM= zz=@sRb-k+~Q8dH9E0QT1?_=NI5e!q3;gz<+4h-I+b7oCDV9x7*D{>ek8jIrSvQBX{l2?RYNw$)WH0_*bV_ea40)9zCBNuY$ee@@-)B zc-B$(hK(%^_frWp{I{*=ueyJs4Hvz_qZrfxoejw)HZK*i9UWPeU9G58JuYJ`b|c}H zs=8iCoED>GO4d2wRjeS*UmY>j%_h6Ho@%eR?)OO!9yrU{oUsE}l7@ZM_jN6!_IJVD zH=_)*#ncvBTqj>&GxTov*=jx3O|L$PW;3lPu8-G#+E4OwJTPUZ=zRA__V3<`exq?3 zW-@dy4f-JBo%%V@?g<(v1(F~p*lZFBEd1lF3{tv0E_9 zN^~5~n4amPDb%I9<%So_R4rvS zS@e07wN&gWms?G=jE6h&)~poEyUe7G#(2HgQ`?QeV=sgthPhtsJmMuHFxBb)FwxU=+OD9-BEl zZN|}>A0O+K_}i21mx6uVp46zLZR2{CHno-5%1CxRo&!-A`2%8lzU|C)d0&G%2nWcY?hVaQ}U zZNtk^B!Eh$>kkaS#Edseq%Z$U?>ZI)52^8Ws>(31i+PE6~`@Z54j#Bg!WR z-UwF>Q|@t+ab;8&#+j$<(3?k|>F;!w*Nf+JoC5#ex=Zx=At$kg0js#{>+2<&gQ{F` zj6xZS)nnRvaY4h|4KKSrP7yiU`#Yq#<)EIt1Qs4bg5qV%ruWAekRHDa@y7RKq}iRS zHmlypaSZ&)ZpMAw?b>ECu@pz;-9X|{PO4a48tM9d369#`Gl1R^tjUdL&Z;8*lfI>e zoC&z+70r@eL4I$>!p#pxznl2eH}Vd=NvTKZEy+sppKO|Rj@e}y@iYGwNgiR=AzUY! zL$q@TI+U1JGO_(}+AC9(Rm4XfKHk@bz#Q<8%(mu19(ZoH6+&b0s8k+B87ZmLO9p8M zuWP)Gx?F-@F?MO5EEM{E$NGiDsU5M~qj`|gPR6lqUgDO8VQgeGpB9HRR@|65z_k|^ z03G1k3~Vg&au2*Ux0~%wv5Mu>`_*hXG=Xigw;P9e+={1+^Dz*OI zZ$&uCdsI{*KlXWeoEV#e%iaBbE0(G0X_l#ZbN|lDx1EIH)mZ;dyrDesXG%)(`IFO) zeqm{S!7}8xZ-0sK=H%q0rKgW&^7}xismz`&q@wIH{)SGmu&^+sE2^o@PEC;xQC7FK zcv@RquU!4}n{*dJ=cJ>PQRZM{Q*GuWCl{R|?WTpU9Uo_=q?9}cBoOj>y1BW{b&h26 z0@$Lrp@)YkQi;z-T7R^%W5>GxU_ypglA&`NRD6yX?}J!1O*!1pzUT@CY4B{2P*Uzb zKHNd&LiRfS-}H(R@p=R#(d)J06A@J)*A^6P-(K$5+pT(EpAbJD?Ct$X2?rbE+);SvyxfWhA#9g&cbq-15iPkzJc3dtxc zDk35wL3As9(PEw!YOU&RmlYG4IXFVj6d)}vEl?=5q=Z@{Gcz;#Y-4?W95agZ@3QI= zh^UTLykNIosvP!Bp!WCZ3)~1p#t94*RyRnL|DK#56v4&KEhZ|es;cVY?k>n;Q1o4? zG$6>-#Ka)GxcD7jmz9XFLCx3MpFe+270Ru)0@My)R(N=LtmmJdIr#Ya&>Eq@0@13f zt7D0f=8$?c(K&f}2~xs!as}L&nQH3l26ef(xMJoZklNBx+Am*TBaxDlj@uthEH4w# zOkjXt4D@*)FE>+g8W|eKU;S6jHT7a5Kq-R>F1m+FStY5kwe?{RWR#nm>-G+*Qt=Wk zO{I&NiJ6%}w}oZ${?$h#*Fg%}|q^Cn744?CvBd*1d zk0PB~D{dQ+&;7M4FlpVDV7WH=)SV#8#ai$Lk6hbUP0mI9FXDXf;-J@g%l^piaxq{2 zz56ALab0bS_1=H*W+GnxgUdd>hwJuhY*Upup{J+733blklwskq;YM~-d*iaGzQ9~+ z=DMQpZLMpIKrBl%^)pGY%*L$X1o>D3k>zp<+Y(9|n$)2~4|(Hc$Mgmgd_4aaHWn6f zabYQ`@HuL94PFJ*C@pR62sN@)u$8s7^|x;U=>)t081hz!DlacD2)V4HoXy)bGAgQs zN8UKT6dlKpzPepgMD^-~N+bvon3hQA_bxv#&wO7FyiVzmWz@#aw$iv2Nt7|5)AZ>- zkT(7>e*IrO>+$eu93bkk^H%37{SRJAr!H(7T$hiH@Qi}*kQ6K+zJGtko(NSLBm$}W8lS)blE35tS@eeMM2@eksC%?P8gp3pSHg9h|wo1_oo}JI` z!Es6KH^l*l6*|qZ-3d~0x*4g*o}O=R&)v{jQhfYxxzdQJC{eF3Q9^#%3bdXJZ6vvM z>U;b9;lpRh+}d>dG`k#@A(NkPEiKbxu!_K!1Ky9WQ&S{uPg4~>t^49`Lnqg}xqe6h z_V&|0y!ORy=$2!lm8WMV=O-)g^NCEk*I!^V98QkDR{GvHeSrj-spQ>3j--BUk2hm_ zHoQrST#Sx0@*hBe^GyE7DOk~kC?`(gEkXD&xWSs5nzq8|MB&Fy)EFyHpUl>^&Glu4 znk`4tGRGJ0vztElT%K;nYDTkPjD?J2w^!cR^+dMkygqy$&~NGGCEp*uwzrydFlF)| zry6C*TG51Do1O!n5zDBXjCOQye(NhxT1Mz6Xk75eRUHYn%TT^2FWKPJ{M+Hs?ErGk z^!wDJ1dy~+SzjMuio~w~*3nRxdz8ec$<|W^e3KFo;kPooC`*jabtf}0 z#KH5>ldv1Fndaw_J0K<@-8+C00AL62Qnkir%@B&0SA(Y zeLNTQfuYK=OCLH;_e_^N`Pb%>C%B$BYW>6kou03HHcqINO72~@W#ijsr`>nhpq1N`11+JPmd}5_haFqS1UanhFz#r zWvUDtr`5d6RlKlo!`BZa1^$RZTW^!^s0Dgvh-L&rq?ziKUkuQF{4r!e$Hq=9m zc`am!1&@XX03DNI!j(`9swfCRj+a`JB~(>a6=)TK`R9>@a@39P=PQn5tyghZ8N*!O z_YHOprAC@GTZfbMmdBBam-AMz=Lz;o#vq>kM6~D5wn9KGXwjJgJMtEU=uXnGN+fGj?@;bTs7(V| zGDKlb6sQ}=FL}HZdDnYEy=X6xlR9^|*<^Dkq_>N0Fw&4uL=$rIco7$;z?AP5k`(SO zlv=xJ+>(GkL1NyPU6R)|1D|FtKlU>AhvdV zEOSYs50h~a2t-RutE1Gj=j(3zlS zxbx$kKsW!rV^`$Ddi1jH!>P~8oCixx+$IXe!=&R@V}eo&HOFJ4nXQ)*+DPR19+2EzUECwLT*S%uU4?)$G4{ z$hJrFHNht^Ka-XPEYy3)gjpcz@852gnXQ2$`6Uh%&arAU@iZ+KAY#YZ?6ZokcMKYF zOqWoO`J`YHk-@MxwTnnbiZ@!#ir#${^5rFQ?N^ZjA5&9YaB%=aI2{@K?rr*jY91f% zg{7xh`8-;Kl)DU<`+_$%tG6XQ-xJ1$3TaL1Z$54#l2@6E*?N!yTl$4cxb1KsU;N5T)l#=| z-XjvniUB1CXpIA3Z}_TKrOw@b(HrgdIhT--kx9FYmS9L_o8;3~O!x^+21o&NG@!r0;yQ0WI=X}&_AnH0 zpg=$tj@X|prdzMaw~9TsxugHPvHp=-KeRc_thjvmYV{^?(pW2f3r3lRW9qt+r=zVs z9s87fBc2#$?Lx$f?*Qmrkl@p-G9+?w16cE6o27y- zYn>T@I-XVn7WU0^3m6Qo)EwmUd7sEVEeah4VP?-*K#(qHDJR*jj1v{2>8*sYbhlD#XxXUkwTpegsT$PpCV6Kzhks>3OvJ9`HRzl2Su8oMWdp&ANE~UUha>h|@b6ufzAA3S-)t zmknfF}Tp+lmxxvrjEg zc55S~ni6(;Ne&8xtL{=~a)nM>zl(H|1HDP4htqD#iqepo!diOC>m^hM+6j2O3dc6M zn4%M4BO|zjuszgA_nsqavE^?I6#dMB{|9I9939E`{`D&(N9!^-qVYg$t`em}p zOsmD=?8i0g1xT-A{K-Ux1~ZaqC899=w~Sp7E1m>FPr5}%i8UM(yX!^#TQTOWXmzn1l6s@p z`u^1%;#)dM?^vU0{yY>}Mj_1pE5qC6A1LkOcz0|GJsB`;flGx$$<{*ptNo)6`I8!s zgknJ4&K|C)k<8PxXhjMA6Oeup){@%%y+t)e$!{OJ>zn+gvUf zN_eDjeit6J_CY8(J>V{-#D6IXav{ z-a9#;B5Gsq67+lhW!P>rEqiO0AeTj`4Ayq9pSNRj2ud}g+=0_Fdf;|+6x%bl9H5)E zn?-i7Z1noKWmAe`VFoiTr(~l`{_ykC!q(cY$_Ex`*icxWpwA*dhw;GPpc65}2D!f? zKiIzjqadJ=_@)l`k2t`)f*l<>h)- z7O|c&Iu-hB=ZZD0N}@Qu>egye0n_I9KvU%HJTF!af=&7sz7wcL@`F-F&V&Md!cH5`VlP-SYmO-sWFqyc ztdVyYdm$dvu zj}3Rfv0XQ2o-xRJ_vIC~rpET{i$j}l`;lr={(%= zHcHBW4suv|6)%#;qf6R(-I|S;%+BbPPi@;@o&b@9ze%bGOTl@hD*-%0Mh1M4>b33p z<+c@x9iyI~?G-!|9XVpJC2_zmE@s^+pYx^U?)2wal?lDlL8xTOzqb5o$PH^erKr!F z{u4w}6>Da`Yu!C6UOJrxacg#Ah)F48ga(VO-gxf39b>2YV~oinP1y)CWWbQ{lS#Wt z5Tef@-R`QxX)9!eqVU~6FLhTvTdcxtn*)wk@xh8Nq6wPM?l&S^*rJZ#w zV>y-@KDFf~2nO1iOmho~@Z&qi?Ou&{j2q7{os<(Bt^AnMYe&r}%bsnxa~7w!*ot(Z zepuF0Nveuoa6-U^L7jf8xorX=vUo4B#L!|3gT~Bc?k54(EAZ zVd(smX4N>@VkfKhZmnt!u~<=A%CGKkM+qOFy^^Hf%a1h3O4vo+RUM=VufO&>wSYD5 zQ+O8K?>I}0iv=;6RpNE6*NGAX@)Upr&=k{Ay1x=7^p=K;Y-Qy;ipQx958#}KdT*BT z>||x3ZGW1sSU{U2O|vvNnfs_{_=H(kSM(c}(x1Y)44){nP8f`%YoPNIoy=Xg)H1ta zp0|B__C|w6#tsq^5zA314w!STgVu)ezWb!!a7%T(EN@d5pxE*fo58mxajppWUsr9!|WGx9M2xXD6?_a2(b=%zadhrA|)DZkkH@4e;j_Cdk?iB zp&SL^03{lL`Qz|!_+h`F{d*1=A@=3{_@i*|H+cU#FhVG&9ZZBh7BRK@5PCB2;sE@K ziaA^vy20!$&5hr>r69}vjQ3|XwuxB(?c*=y;m707{Wa-oM()x{f}h`Oqs7h|>hN9b z$Brx~>2B-lO731pHQJ34>qE0r7*1-OZnd!XZnK)l*J1@0mVdG=36wVEew6aiO?12B zhH0E6WMyS#jsK6>%^}ZO=UXN%78jA3>p4Y(Dsj*H6P5Ne*Gj)(Y4cc6Q3SK$EXSjn z+wGgBPEYC5DI`h8ef;WYpEm}h%D3~XpVivx>s~uNXPmDWI(sLaAY!jYGi%_rN)7(c z7E6}vj~ji!3-en4{GB91%3{LIGAyp*=d4x4dcHDTE(`n|o|6hjp2c;vBWKRrOclGI z6v8F(n;33wVl;nSDN|kqL(V%auZmFigl9n}Db>@3M;-#u40pVFRpRPNZ$0y&;}NteAlzxP=VT%idw@(XuKHOvtKs!RXs>Ix zT+&Nr||q-qR_4i39Dz4q`bjMH|Olj>*c32T_1bqg8k2L5&|=7U3BJcYd6&KvU~ zl&n{#eQGN7fS4%3&947YvX zGvEG{wCP^-`Mlu`MPU$2%JrG0FOIcqv*RH@zmUB5g`zew!${Q2^^3q(?cndR>^kcV zvXaw2qUy5um|P~V9^_xN_dr{S4~DOZjK6$acm0uU+uZShdiO|o72wi-B^Ny?gbRj} z|7{LU#Iw&u6U#y8VT>nbLOpI!ax)KY+S72OZ6js^GaG|6DjXZTm?8j@IsC97<3~%? z&*5`9$Tg2P>H}+z211V&-(~aEu?c_WfdGj%F-BU5_o=My8VHZmad0uG3)y+xawBrX zj+(ZwDmSOt%)IWihba}WjCtgIe`W7%EXqidS{oi7&VA|QC>0=iltk5&%hT2R$*rDV z?Z@n(-6ljsg0Vq2{Jk{o=Tk5T0hvKQ4GN|fqu0+(ZA4l}xj_O$R>HOsrk6xuO&8N# z0s-_cWZ;@+YK~X|>aDK7DN|6QSfX3U0Z6zr3|1V(qU$7<=dd2yf4N#`>!S$uit zR3ct7Re>T>``hJYL?rj^RvDSx^uefm$ z+AVv^=ZvrTO*b|qLicI^%tyya?@)qF}9YS*R5HM4_1oX3> zN)GHZ`0hF6p}7n#r(^9!-N1pk!H7BR&aa1?vaxSzagPwHUw3MeKW9Jl0vwEqE=CXT zBrCpQ_|`*A*4O}Kzpy0LL;AQBv~JK|H+aG$3;*{C;9@Wrq4$3^ZZ zW8GkTOq3*9c|$F6_LE_iCI3xFf-jXM@R zN6cxcc~QvG_zj5b$nV{z*3U_%*hXM+5SHxgbfukTQWg_-nSXkJE{Fj&7T0b^AwF{V z@ylh{cM*Js=qo?i?v;CN$JV8ucD*>N1G?u*`Q=JLe4Ni@ z>1v7Vaw7UJgQszrMyBX?haF^WN|{Xa0h97dNQiaP`oJq20*qasvNN#!m)l-k@kABx*9HA3}uFD`_*T{txEbQiCS*Ta>%rW+KdH^$=|ZVxBKF1^?7B!JOKM> zI*hX+P}1n2;SrTW{4NC^lbzbZ{ERLbz;erU)Xh@-%OW`RV0oH6&gS#%wmel~&vduT zI^sExJJ3cf6iNMexg+`mdqY_H7-kiKp)Ly<0w*P~E%eTaLXKyEn~sT`uz6q~`c*p6*j{O-d@wD-;Ewt{#`q z&?Vb>Y@-Lr%PQ$pBGvO_N7uMq9LZPnOMg!X1jfj%TtklerqAQA7(@R}r5}`yiqX>3 zXAgoc;_vG;ahf$2xU88a;~_Hg17LZa$fuu^4~OH6Gz%l6i0X!3MjL!|^YwE@?jMB) z-{;UM^9mJ#RKjcZUZ6^;D|_P3RgqxKPR4ZKjp$GG9QycKQ4yW#Z(i5m!Hmq9Q z(6KF=_`-Irm=A)Ll}~--CV)ulbbbT1DaCBTIPqp`{>AXQk3#-^dQ;AJeZ`s(1MfnD z8JS?i*>gv(I=))ntu}e}95UeRabc)xpM{?Z7H|`F}bv z35MTq(QVlOQykC&mu08d-cUZi>+zPVGhjn`sB#+7yS>&x3Fl>>~#vJkKrRwF;9!=fv~*gER{9M8lsFx#5 zj_Z|x7_V$dbA?@PrU__5f*k3HR=%KMr@(<*LCi7yFODOtz`(c1mN%fzPDUU70?)Wb zKY5J{6czN(rIz^cs5YJ_78`QT7@58Z4eb=PeRTt8pDk@0Xz=6bu7)UtC1PeD7qbaX zY(YXizDx0rT+P|8+ZQisfgkwSiwtYt46Juz>e~Ve&=~I3`P2T*W$K2n$08t(n&e}F zGdn(6{Ia89#)Z0Xz9G(Q3LW|bSndtkVjqdoO*PRaL6>`j?q#A($5;B6#_&PM7?y=c zRg0>Z*OJ?nPrM2ssqC6(B!Ygo@4?nJMr zIl?%?S`ELS^f;RwH-@*Mdum$s_NGGmSSNoZ?T6TsEu7OXgfnjv?&u4(j4ZG|-V*}N zZ^~;ylau0D{C@vG)BEBo1ONvIhbAosD**N;o#b+>KbnGqLR^6%CR;E^{TFnO0_BWD z$beYh#r457I5@bO2-=~Wm=Q=xQ&ZFEsBGI5-Hc z6je|_R-y8I(OpqN7b#Y=Tuzjgn3%|ypg)e8t1!+2ke8DK5Ox$Nz(RJ6C!t)-ps*Mz%9mARU8_X0NB$d82^zD&z<^ z6COA~LPBD;hpD{KNQnk}<4J7qM*VB?Y^YC%*`jdkBM-n;Vu&T3UJ&g)#z804e%i zR{8l|krM4tRD64X-^}}hlbs#o=WI_;&*~~ZrL&&im;0jCAMcw{^gX_B$?*r=D>x)1 zIyzdn-P6s<2_1;>>bNt6{za`x>+{Cb_8_VRRKM?JgY7!hr{Dl+M1oF9q77UQn~~8` zWmQ$-q5AszwY9axM05#|30_W4EOc~Hbx(bLKPAp{dOeP|3B~%=)m6KdnHdrJZsnFp z5W)Ax`rFoE0DBo3`0=i5He@|n&UUAx_gy@1LkAEE`2#ok0RXTKbTc*{9^3(}R~S-Q zA25U6JR%fSR8R}5;VE#bJ|`z9JG;A6ZTI)TS0*HspZ5h#K!=5tHD|>EwKFv_0f}{6 z!qA~iu@({nGd7-hetsqZeEHC%*y&+|gxY+8R#i`TXIDm^x5tZo9Y;_=_z{Gp{@z~D zOfVz{dU_ih8zm7aSM)wTtq$+DoE*OnDTu~rP+!_@u`2%r-WwZh>n^uOB%~C1qSgt1 z&Gk!;pV(uh5kc&YJD;6{xOm8Fo!vO(quAyIc}6 zkbVmWM!XA;3JkD-4${N3GeiUgK9|##L>kqN?6x+1YyU?al1p;IZKa!3OSj~!XRon6 zK5ZOaS`iVkzwNSJl@lSBCzh9zo}QmGML9E15DPsgy7vUzEo_Ls$ixao(%5WjZfSTN z)`55>?{hC-qO;5#W!#^hvxyCJsba#?tAK@JSC{|C;%D^u!B6BGr$-$@r1(w_%1S2@ z@#gU!_EbdDV#TBV69Po-mQK>EmY6t#Er&JwiQG4hRDt*nEg?DkWO@6Yz(knAPqGRF z@nhW&Q?YdvUq=;LV_odNA3;=TFC6>?Wr@UPLW6ojbFP|Pf+YJ{7hv%1dSto&evG@@TmBgaQ^=?L$KFygHgIc5-$LCX4=fS#`!prbGWiO(72N?7<|WNk$3BK^ z*Bh87?S)zD(M$hQRsuEWPQ68UdqhTVN);wnu0^d*2<~BPB)1%vG=;|8?@Hi77n>wG z=ETCNVP`i{hnYxoA=Q!QtgP|fHuy92$xV==+q6D}ZVgc#=R#7m#U@CwP`}rI87-!_ zf2MH2ovq1hThx6_f6}Nh`dhnqNgC+c3B*If!52rz_abYXghx`x`h!`VEjWm~6|_cc zmI@c(HD(%{WeQyhN!!jf+`hn}<~(-xEvn060B%hO+&cz+pHPW5!b<00{FV!!&&D@> zAkAO34W@?PacE-xP`>w<4pd@<0EkZ4y7ZD9tnCzr&@a@ZPb5^<8*20W-=Zhil- zX^M<(A#*X1p4-zT&3$2kP@y+8VE?jbh`z=BSF-8Q7W~ zCrJKGL1Edkts49C@myCiPGYLqJf!q{_-|;Lh4hwZVOz8uo}s!nA^+t9zyZn`>Ck}@ z@%1U25=;!%^dF-Dk<%nNO!&!Ie(Tq@HRQ#}aQBzznYM`i#=_9L(OwhV-R-b0#u*u%WFA}G@MojOh~IeqyR7WW zy2d&;d0j)@LQ^t;oeI+UdS1>SY$LYT@Ii6E@fCb`TN&EiL`)1~)o#*u zvmAU&Ibc-OD?meMHepQPJ?jKB0rN>JpfUaH@WPewjroc=^&g?88~ZOt>k|;|=P3;m zkuu?TmBGJEJ)d*WwlL}b#Z}tUfu2arX)ZFv-y;_fmn6F{++}s6gLf_?bKut2)K8>a zsG>Nxpxub|N2EhOhh5xU5&n&d56+`YAI2O-vlz6$p?7(*-5JsJVth|D%t3h&^yq~0 z-`8=6RVUw&w7HzEG&xk6+P{UjmW2!V)C6M=`uwFue_2$Rkp5Qgzex~UP?)m+4+)Jofw&M;TeT*(;Xwa^_5-#qMg$WXF^Xf<>|;DF zEzNjX1NY`yZp}~lF#DSLicV`>wh?dHks@!S55Jd-w|xWhvau;^YI;N><8=y5rc%ya z1q^5&8D@%qZfa_3^ZFfmIP0?J_r|BrX#WLxz9DZ@B^2Co_qDRcd2owKS$nVhD^$|2 zLtL*~-m(D2^(V1z@7-N}W$QctSh=e~n~;t-%xb5kDs+{4nxmE~&%F%6cw_nhkg&LH z9glAf-QZF;OAY*uOa`7fCzOlM!-!}z@#D%7o;!RlZ)r1wn2-7nT2W%J-_a1 z{R8;0r83|f29DS?6pJwlVzYSNl)ipN#ldl(lCwj3g@BnTr<_rZ8t5*O`+j|sSK!9iBw(>6m)tJDIFHfF^ zb0M$ez>%B=_NJTUa%5!WV7f@28=chG$RhA z<@zHLfa$`0&tFkMg;<{V`|~}a9GRm`&9Sk1R@)C`$LITtm_WcyZj{bt!7%N>*MLrPYR3|?2(w}GA0kQO1KtM_=F*CW~ z7{cbhr30=buawsdz(`4?sP^+RKijZBD&tY9gz48^WZde$vU0}#b&rn#@@FbPX=-M` znv2IygU)7X=)o#npJXEM9(!Az)1e?8+HMW1pYe@R?^2~JxuS83`)Uq^VX|@ol-KJf zbU(w++)>4p3#NJtSwO|X5ASlK?x$&aIkCZn+(=vTl!+mNf3O&LyjNRb3YH0BekQqb zxJq?F#{Yw-VL4dyxr6My^EA9T<3wra2E8Rqb`IXNS2fMjyCTORB_pO?nMCUV6qYr5 zVvb9Bg*8k0$Jeyw5$Im}@lWpaC+Lh+Xium9vA^7)O3GDTuYf<;zPV40zP?&w^ZTG3 zTg7zW7p*JK-upam+VaEf&tZ4T%XvNK45*T60R$H{Xx^@V8Twq)xErypqGS0f9lSj+ zL!8qO4B=NB3=?G}PLyS^=C*k(XlgEixD0WL z{G*8T|D-PMr_1%dy4ksK#yk`?Ak_Byyi(PAG!?H3kOdv%nhlIJkr;Sc{Mw4pT(hL5 z(xVTg&vMGU(y{I{eZ%0_k8>7k%m_XcIgpG{$D(Lj*Cp6|Ig*zvL|fe?ybQsS&i2dJ zX%)^@X!)`of=Kvyf1mCs7z2-TR*Gk6Xqc0evp1flN{MD?ce=tADRwnd4&unq$f);A zZGu>Vfg8Y}W9MDkb2tHPPTB80zLwf?@J!8Scl0g)Zm$xUx=FlyAV6((pK6 zo&7i>V%trns*aBP&5I3UgYdh7q_mKD_$kTO^XfMQi@-xOzW>%=i{|>1n7@=AjLc!2 zi#k39PlrOjg!)CcbBlmVQwPijO;tISs;jU+?#Q%UZJTb;d_CK5FXv?Xz$%-f@}_faNiIw6R(g4`1l|wt zETTf(8rUh@_bYhP*XTfiu_OxK7wqHkc|*-bWhdsg$<#tvl;;(ehW1}r%x|0H4rFJQ zzcjCdS|;M&&c|Wc*b=?P5nnbUSDeyBWkY4^=lZkF*Ph!|m4y-1KwuXOQ0FaitJ!{o zdfyo}2&fw?&=?R6khY!?1c2v<`0F9`R|F`S^n*wPE+9B%49csTW`_7)@0 z^utEnn{G~qr*bIQ%Jfw|i}1nHemZLp7Fk{GxKdO*aXc+XEys#7{25`fzbHIITsLIv zuC2QaGTK=Is}Tuhn1-f{nbp7#&*y&0<&9bEY=-RhRu_yqB@8awr%x@Iob#C@D`93P zzws@wz9qiASQT;KH2pnz&8#chNM}K@MVx16U5w>%J?!zTu9e zT*=;X`25l7F!nwlb6GoJQa2O+;-4^->JJ>hkAlyepjmgLKy8+1=A!asHAuCEZ$-v~ z$HTP{1hgdo@^>d!BdRIZS%PVLg5^OzBi)FcFN<4qc6j>LkI z&h9@bj)hOAlTU+!FLq>(xB)YeMzi)@JVkad@2RBz2M#16!@%*z^*j<41A2FGXHr`^0cg$X>u zjfqxeCu?e5-@Vhg*)d$jDZaotjG?(MEvFmp#jpRNaaaF) z8kh7=QvHqLJQRM$m8Yd=-ASY4GM^c@Ym30J!4|QSkOOx5$+>DQpzx8Q$*c+Qd zdD`aX=jZ3;l|g)be02BlsHv$rIyzESRo%>2DYG^=Pf1Ruq@*k^FV|9A@TU2s)IAs$ z2J3B|wwtX|w)woUpr)?A_;9tCmX_Ai+&n>{z`zc;`id!YEATpwi+W<(eisRWih1_w z>ZrxP1TDtjAnXEU7OAP1QcH9}1( z13%x;-Z(9nG|6SDI}fzJ&9moX;)5oKCKD1#Y+RdY6#@XxZP@(6>R1?g@wd$R3JSma zHh7vaI^K$Q#DLvI`oq~ZhR-z(&U_e>dUZ8>g~HD3uHu?w{jUKK3`eI(Oi}tLjq+s- zrArJ}P-!b?j4f5vf8#&iMO?gLWrj5zPkoX8%ErL^WF|1YPxHop3mY&s zhDGJ+thv2@9uiG~%H3UB4maA%UwsEY$1%yzzvZ(sqv>$4xObh@HR^0Bg%H+7BgMLH zU0sZ_%D<|o@(05#x6vG#g8X?-sZ7Y4)PO5H`wc^e^e}LAuyQ&*$4zw=iM+K-g1$=Q zdbNrQc|*dOSJEp? zKg|Uj3bqnUeQyC1Nqu@-+U1vM((|^!VMWy0pN$F<=CYRo;S!Etq<0=nd$D)O=8*b* zJK*SnO&3=?u5}?^U8G;9H1D;u>a|75$=-66TfSb@)6k6Q-ut7~@rDohY{CLqR8t(M z4NDsl5tkt~B#d%@xfR5zg{lkGlwkTKO^vT*6GMz~j(muH{FW1(xHX_+e$ja`hdzzb5@$(aa(BBe_7)Cg#np`;^Lu9o zbCp<#YO&D^;w+k!k;XQd_f?=Mb$fIyQnr=1nvT$H)VaenE7R11W5px}lHw|-w5qT}T znQ;hC{5=-9ep|ivFTSuJqefE*Wu+@`>DkD{)f!;$on0Cpe3K|*V3!dZ5c zBuua<$>;d?@Xi~3ZDQ`n&K0V6K8kxG2?YcLtdg_E4a@A{GU(j3^C*eY_Mp8_1~!ze z@miKB4UZFd{N^NhBR-my9GSpQ(eH6C5Hug`uDe#h4>5gh1);bF32_A15DwnIX^JD@m z>>eIJ*~+);bjzHoKwqU@n!a0>_ybh&vax4gs&v}Jm zfHQDp9slvTA|e|xir^tnce3J8?+ID&|HV8*(A*121kNf=A|Gl{K{w82(qT%5-}t>! zQz3_BI$lAeFIscFdt#WbT?8W)fCKbq?(XjW(e0pwS2@U)48&Jx(#pEJ^2jQ{0pIS( z$VfDwnwpx$u6YB{<{%z0fX_uQ=FySWUTH-|+xM+tohkvBQ#=F}sGI9+PND7d^YhVB zS;tQ^;lKe8h@(~SK~?4#xu)Yk^yJfmW2#5GC2hB=n9~kw^?cf7-zQHmnNsGmq?6Rv zbxFL9D^GLz5ND46#ZW0Hz%mOz7^>;h{})5mQ4^`R7r;kBLHYA3_HLrV9P1*3$E8+- z?uGmE;cD*yntt2fORmqq>OWO|d zBtIG})j7I3rsjt8yt}o$tYNH~Q_~I?-3~OMkchML^z`&KbTJJLOcB zw93iJ6;kAMUgv*`6{Mr1ivbz({Y!ZjicQH+{>TuH9Nj$;N>=?$!7vfq97lWf$O;fPnY2tG&HF#0?k>4q7U@2hzWt z=pNf!O-)?S$9Hh#|Axwc)xW#k!9mIGEzHEY2VIr_c+p$oA|oQQGjzZG->8xzM){O~ zIpT+MFJkn6@}am2{C~i%KL(jzkb7gMH;q5$6dpyt=-;K%NJ2~ZbU3nU{?!ZLZx0-R zmQvL0YbUZj8_10s98@gLQH)&N;U(M-3LMh<2ZWqv*L=KC@VA+Pos)^>O?Q3p4I-2q2+ zz{G!hflCS+pJZz$%hxqX#8F~y-?$$3yxmLoaMXv8vySbtB#n+=bKyptW-@!p+sHhvVMcv zB=3VQ2X6P@@RaIMtys$W!SO-*+eX4?W-gjk+8(>e>W%5;XGu>PL!cr$`y;`YsM{6s z@d0j3{B~MPZBP%}K@ay(h1Zrp`k$oQux-}d?Gc&b!<6A=<=8QitX`CC0tV8em!BUX z3Lt=fOMa6#JwXtu0Vs!Ow_{^BLgZb)dJS<9MgxiM(?Ag0)31d(Vj|iHB@>xpqG~jD z>E@_5?rRPr<5MTo+;krwc6kN=A*yJwH}(MgFJ_K-%8u8G*J3PJIJ(sx(G5O~z6UAW zVsV#)e4LedztnAih;8d*#4b;Py^JeQ#$y~UKt=@~JMO`~ckKI{mDFVc+%o(D6k_t=QxMI|V$5JVBdQW91rTqfBUvKMz0lLk zkTN01;c9;Lza@Hp36Xll+U%ud`aHtMZ11B>0bjrDC~PD11>>Hs$UuwXy<~i^$2ZkQ5HPd+h&IX zxjQdL)x$|dK1&(os7%{o+f5IY-$3cuY%_aG7{+oC&Ih8a37ui{L8Qc`_UBmFnZP+&j+ zun>Alw-o58P1tF$Ya(=JZ-Wn-z(tBi(R_`cfU_m+h>6&Qe3>$`wO9M8gcQD_YWI0+ zJ!_T^$FjW>0v6oHLL+W->A4R%K);Fq2p%)Ml{Ub0Y!9B{$SFK8G3BDk2{kQz^n4z8 z+=m{ZU(5v;HNM;j5auG*)a_V!aMkgAwUC+%rrj+6yHr~*k^3$#T7lgUF zB)-%!V&{1ccgrfmCxuLyN4))Pzn;X17W@D~=5$;dn41ox`9wJqWn=!D+V(T#zk)_u zTu~F(P|?wxgEN`lX+1@IT|W5HJEcmsFCMe^zk}PGi)x6MXUSu4ETg`qjpj*byAF%Z z>o5qj@4v75zo1k)A|k=DkAHf@DdaQZ5fCymGDL?z-Y~M#dN(#LB6IQbK9f@D8Q0Rj z!=exDRh)zqOF>R9w`75sf))86Q1F`fiW6yKZEfA~ZZaAlA2&S8MT(8h{maqbU&ieG zE+pg+jPB{_aY-9rSWq)Fd;cFvbXZ8d_w83Uu*N9J$-y|z*c+mvJ`aE<UeLOYn1ez>q;u_5R8(wjZH0xw?H<}Z?r1UK(pQ$24$saQXlTAtqCMlV5V4^N z7bpozC9`X2Y7+nYP;>lPAt50P3JQ3mu;7CqA0Lm8t@JKpV`Dcr^&KH+!ovm<;&OZ< zvvr6B0|1113Y0Tf{sa8{{Lpayt=skwO%8h?YWfpJcrwc0zM^b7_CL8gM^fpZ{!{ya81Dk>@}$bU}33G<8~fuP>yw`irKtJ~rEaQW^D zG5Y?UiPX%>N<{TbTjxjgQKB7E0WSTj2(OlwmYQA82#BoyNsmF=>FDTKBc%#T%gO@4 ziG@u~Ou!DN5)cp&u1RAq3Z#=L0pK#z*>JvF4DI&@PEP1UGU_Sgpnpv_??}-i8u*+5 zMi&T{4!I2}RcJ&TA=>V7M=xqrp(3rCRFaySDnbG) zt}^q!_{7Y7NC4&pUS8gGACJ&+(2v#AJ4rV7k|Ok4K9LWZ0B-WQoSM~XJUSU=TjMw% zL&S2hvx|v~yJ(5liyOrcLQqUkPj8C(KE()ITGBLw{R?x>bP+Kl4m~{|Ao;E~HgfVi zgPA4U(@iiUw%?tt7Xe#qYthirAqNc%3_uE7nwv$a{35otwobt5d?P?(D`Ysut*z;v zODZZVa&kby>Hf7Q%=wHJD@aUC{Pb{uREi*0NwK!9U0+`>CMI^Tw*C9}@7-M!N63Fs z*J5xnBVRe9t+p4(0hYPl-QAtxBw=A;(5M57%}ic5|4QG#ey4Y5CGgovB>v#wAOw-n z#@afEF#GS*_xGJg27Z7*=Kcw;E@~zdUGY~8TjVYw> zySh$UqBE>&Y4O<8AwDKcXlKBtJ$S@}N40hk?a3WR^{j3YcgK{bdF--^9w#ZhJ%&2S zY`<8gAN}282cCwqG`gRsT(`Q*hka;nSzJ)*W8>9N%~?~#i&DOQ;Wlxz$wtAxV%mFV z>e1Zdag#1#y;r<}FXmPS*xIr?^T&rjZp0PQ@)xRM8Ph&NmS6 z)+K%9MNZ|<;8_-f-SUc#l&wrPHs}$)T-q8~WG^c(x4eWM5kTH#Sqeqfhfb+`z0Skj zpwUGg0xrC^I&!y1EtQiONh%s5#-`<7AruZfm{@Bm%Bem*ZmfP<#)Jnqa}JgXc`?lJ z0cNG3RmFr}Zo(b3^2JIBV5>AD^7??)1n$WAh=6+V)WHb!@jn&J&vD}JSz}<|kC0Ks zNTnA*M0ACo3aw`sLlw$fZbTr%!XT383mFJ&cY2Z*qs~jl?rAGNBh!|6cbL7WscK18 z%^rc6k<&hMYt6?8xM}utB!QZg8mH1l!|{$fRaUkVkx^0M;WXx{n-rtaiRzdE{$tuQ zE&Wyv>gDk%zfw-x=%|qOyK*MUO0l1w_?0-wMZ_UOMA0~0*69Z`DrDyONPd4Bu8#K7Of45TOvR|RcQMSJ+$)B*J7FA4l zmOlW!!ca-+cw+Ez3S=Tjvy4_k0VrphD*QdwJLtNf1s zJ;BfvbFSW1Jxcj;2xUukM+jGy)Uf4R^d0$^!_E4m!y!~up1u0-LvEYnViYQ6eHEW^ z!i$zKM}B{Cxnr3OH8)T3y5i1$p3zYLZUE2e6)d#ioH)akSby5qTSv0}W%;{PHTYOe z;dq7a_lSX9qY0+)Efk(6(|L3!b)nC1pNxtnr31o*@xM+CCUps;Nz|ZheY9fjcOUXE!0Q`#C;tz<{Fed$&!uW%OMG4{gg{sB0q* z!bH+NsdyOZDOQaoj|oV$Z0MbmY{tgawB#VNyDCSA0N7*QVFrNf#az3z!A2Yd^A_u zH(pvR*+IE$vs#iQtgP?w0X>`2O7RW3fj}**kO93Onp1*7Sr$fL*N3EJ-60s9zfUT5 zK0SAjbv$}pTbMr!yn6!CsZzC$J zj)IqN9Fu_-q50FV#kI+UDLqGzy{-q=c1@;WRl#F`NX`;mBY zwsp$gm;nCe8YV{^8H9q*E3fA2Xs-fw`?51IjShjzIhGL};ijk6 zI4e^eX{(1@f-o*dcU=wVGrG|+m%0nOT&DbJ6{So-z)WGimO3jqhTEl9fe~nCM51EL z>^!;x+_bepj~en77Re-r)5W$-$6WW12_98jw)tLLjG=vqzKdjK$HjpFzT*n%P*BXv_??}dB$uk6bXbbcU)|UidajJF(E`A7 zpOY#`Ht19>OgI^oK5=}(L-(#fpmyp-al@mMUr#j}bQ7r@j29dPXDHY)-US5=2ZYLt z75w;yMvg*~fU1hEzeLZ~aqC!3K=u7B_Zf(Lg7ch>|bxDy~qa39<~ zxVsMS?(XhRaCdhbf(PFs_w(HEzPrDw-T$X*X1cq&uj_NZ=k!O>m8c|kDPB2wmDu3` znU>qgev*h6O4Mc3Bw3S;V3Wlu%ST&NCLY9r-=}jLxcB7XITn-cQ%UWlOXr!K_O5bD zO4ibzWj=YaB%v;nq_*HC7)h>{whcS#gc`&>bRCLXh|>`O`R`|#fnv*M_(++KY2#Zzj*_EOhqo%ksgdK~H)D2ZyB+lS+ z>&f2tt(wkhSJ#xqk0A`)y>LxvM-|H%2!r`|B8fdcN79^+2I%Z*ZAl+1Xs1ItO7ILF zY&huh+WF+NNOMT;`jY(TF%*g3%Eq6!h|?8ipg^mut7gepz3V{SpE=fP(NdX6?997F zgu2|R(iEQRoRou|`|nP#7J7E0O2ub9UBd7l5-l-oajmH28+6$m_$?5Rpwzc{GIAqatEnv;D_pAS3o>>f7p zGgDTNXhU+UebOjxa()$OV>mq^OaRlFrYI8e*WK0DU3@67UApwyrw66Oy&RML=ZGYi z&fgzom!f(Li(q`+m&t2^Y~2ix`K=Gl^WizUqhsG5uy|kX1%X={s;{^n+hrwj zuC83dz>zlIlYH5|&>u756pVTnRy#5|tJag5HTO(UOzgnMOFUTqs87%@emPt19?6yM zkR}d8c^n`^0066-8Q7TQ?fge;pQ0f$DD%`aZk2h>~R!75;9z^w2D>L4WK zv0EU7U^1X?sUYvV=0T*9UQlyTO6*y^bIfsB7EbNHZX)D_GM^?~h1@W4KU>++P=k#> zIGLw4bpX-0b|ZmEmzNDg+T+N89b6nsv-`!6k$c8`= zd)mR2xQ#`@t);>KeolhSiCA+VwtZkW+#u4K8 zB)>`tAv}z<0C-zsgs=7Op%}r{cdU(WVuM=fmRfjNLr^DvqJZQEl^ZQR2x-=yMpveJ zReL6p`~*$54So9Sgc_S-)@e6a$!qu4>)K4xofRwcakzi)S$Pz-Df&Vxx=hVdwtiww z>NX*`<3jn`x>873H!#Eza<((vXqaU8wUVWQ8X^POboYOB-;L_K=oHCe&bJ%G%>j+DPeERl#D)A&>Vz(GxBd)ze*giZ~?z$`@ zHbfS2lC#y>D>pQB>APda`CM~9N{cNr;G*DRmQqUJHt;hE+bi>pxH+o3CFh|1774YPd`*?|hXzI1Yi9=2fBkw9IbjG3;|Qe$6Je#N!6YQ(KF9nV@kJ!BV>;jpVpW-#dHayl49{OoponZR%cMq8bB+xe1Z zA7YQ8t7AWTGaeIh;yQ{D8i8V6W_y5?eSg%D}mdMTeI)y)1D=#xk5`vZfW7xJZ2KmLOC{3e_d5 zW#)7J8p@rfvC)ysUe0tgL+E@MDWl5MA$;|P;-?@a2)<>o4n}=;e3MqDHD1xi8G^N3 zsMVyKqzTvqJX~Qw3uj1)&@JAD65G1;VW2#a{1~^yoCQ@BTV)4L^|`)juRk4Iho)8Q z3OvDEl8*!5~+N@BLg-hU~*$ra3Ff&hX z#6Ztl8wddLoQbrxh4(D_WT;+D*-SK_wq=r0BI^Xw@-!A0C(*|NR%BMqucMzW=99m% zZk0ro|7Zu=oWC0;GZ)z`<%bLUTMh@GX96F;jh>b2^e45R1?dYcYt=b+mPT*u_3zRE z=^u*&LC_g@h)SP7Ywh3JLZ{^b6UReuOqyt+6o-&*_UylZa%W>>O+{3o68fo{jB_if z%X0BYljAeOl|4$ESLqpc#bRj{%q*Kbv|Ee2#C&RtmE+fO0~@?9Av|_8 zChFIN`2()DUEg=4;jy$WGy&$iZ3A@SDlY!6J|R=R|z6!ggLB#w}Lm@s^Z7I7$%p6@1E@ zgr5@fTPkX^LaC7#C)7DOw3F-coHi<*IlU(FQU`Tu9km9r4sg&N&vRdzytF@~+gpsr z%E^4x;Ob~|q`o!uH#zH&q{*SS;MvnjZ%o`X~U9(I6%9p&X=3^)*$!i^58()StARww9N)Bt!I}N ziaB0a>rM~nuJdDq8UCLk$t^8~I* z%O18+lS;(PcdG+;9OY-rH_V3;EB{p14%Kh&rH2(miPg2yD^)IpCRc6ha?XHU-C0bk zIM5-TJ;C-q!+AHVo9)lfM~B_cw{-J8&Wiug9VuBGm-p!)>@YQld+_0X+Wg@2(QmfL zkx^l<*5wjPtylZ+2QBc0X}1x$T{CiF|JEPhCvN?9s{gbZFq4wKZOH=Oh*P2dmAv;d z+WTSqTde*6JIm|pD{y+;rK#yY(jrUx;K#b)q)#47^H-u{Jgt>i=(!e9=AHkOP#BJ; z=Hm!5IB6y`$QZ_r2%mtn%&xPoK&YhMwaGnEprw^%#xU>P*~DwnYEZ~H2$TsbT0h$5 zKUZ4mSe*g^`X073GmBPGi>qXkmgk!vBM`}t-`sI)T)s$?{H^_Rk}==W9-&xMCZGr; zn2jtUrnul!cteemINbmK1~wktH+oPYz?xCdB+>uW2)Asqpi#|F*nWhN1v;(S=NK8K$;{{H(^z zyxn?GtaW?AMM0Mnj#~kwr*qX3kA}*sl^0Xnm~V7h@2{_`#He4IUmY&xB+fca!vC&1 zyh5~ac8>v@FPKGw7FAhox?NDB6L;5eAW)mlSL=_>_EuWrtV(BkcO@8jgX^C^j(I@+ zz+tqUxVst#Wj>E_?vP!l4ynt7N1aVp7a@`Yh9A$Fmy%0!n{AoeblF5Qz-CpVc))xf z3-`vHd;s%j?ZGUm%_0t%*&O(>$?8$QG{-e7`p4uEU10 zcP(8tv=kH+l!Zq`jBz>4@#EOd+cZX*f}k@xl7HG5j~iq#Pe$B3x!iw>kdqm0=WMdB zIa&EtE9rOCfAC7l1IJle0I)<7D@!IIh0r>wPW|gAeR5h$7q0SIzWye2irI#BJZ|vqWItbJe?h)Cr zChWHcCC#h^H9Y&pkg?*Q#iZxdul9UKaZ)byOYrMu<4TkL^2@=zjd;!|1L+$9o7x#b zvUn&j5}sAxL?q9FPT36>iLRe_gen1X0l5D5oXtkRHo3lg zo!wvm+2}q!Up@?9`{=>;VIVu(0cSRwTG+a2HWruJXkL?w-ZCw&{HhT!l(=DQn~-l4 z-rAMt+k4C+{7YS+bHd4YqkhRxOoOoC*+31~F{TjAU4k&vnZ7uFvtNfcjWtG&eg3CE zC?$Uv(H*tk($!r?j=&5w1LmF;wlR;GLY@)PQY@{lkVC%bCr;~vFrtYIgof6Zqsd^i z9Y0SgJ)vm>t|n2+q$R~HvQK3aIdGKx#N|72)>l+hQ#7fOd1czGkM(2yu5(LXRyP?BjKJ|!VqF+AHXfS78W-ux&OiT+*?K5-QS;%-(o zyQd?_HZRY_*e~>5i=H5)5DgDz4IQExaoXqv#!=@{S6qK_trc{+@0KxhO>y;fC|fk- z`{06!g)|`56Qd?K__decmH;(FO=r`_L+x-M>~&&Ls;G_%27>{cNG4lVr0@^7kp;F? zBs$R03Q1x;Bcpg&Ujn7ZzWM8Q7eLbhbm}Dbf;*gOS$kq+6O)p3J0piR(>i>|P7K{f zzKPAKb2ayLS1NM{T8N3+&KxR=TWJf?IJ9_*iPJI1p&$I1iwB`+8vUrf^*nygC0Sb; zT@PpGsMg*dPoo7DZR1i=Wb+tohnF-s6{tS*$+_+!sFG3JfKGJB=_^zZdSvl*L`}2* zmqXnl)gxv6Z-C-8RlvTWNYjfA4dlv7)%~6f16%UVs-@Nx26VmGB0U1hhex01TvkP& zZR|q%Cx>Zc_8JJ8k+9!GROF#(hHLNQ?rtLhue9MYgP@*(q7Fg0Rj6v-k2azyzA$%( zg+m33%+^mCUsqbl2 zBWJbf^Eh`2+wS1{jH=XQqxOB4J&OVtv3Pb%C}BPJUDZa5TUiU!2EZJoQ>q+u((Ho2 za875s{bX-HGH#$wLD0V#F&l;AjN#IB{3vxH1I zYn>mWsw*!ioMV62LGoH*tQ{m}3$@x6AqS7PA1gNHm&t5c+vNS-*0|}Qy0$PAif_<5 zD-#C#mKWO~6~eOpX7%Tt^tMeu-_JSHH2Fco13_3ixHR4MWn^`fcatO}Fk6H!eb0m~ zFD0GZv(WF=!LSt0nzgwm{S0hZlfD|#l?Db2XAcajarhLPP6x=9Df~>utquIHQ=2X< zZ1wGGFZ|=5eR@Hl8*{jdiDoa*9B(_7Y%P_kfMu4BSX71$KHh28vTEbNbn?>KOun(n z1<21Glf}Ism*cV~xEdlajI#zXX7JcR#*b&L5XDG#VnIX5#UC@S^)3y4v~3L=$b9VE$+IvyTF=QpK)aB2YZXHl zaQd(pIv;jRBSw{t-AhQQNb`x=a|J{)s_Tv^s2zm?dx$0RmC2e5TS%;Xmg$3iZKj z0nbIVMs%O_Kwvwhg!*Yq=oxZkuY$%{XBl~i!muW3T#kpkkKyjOAAy^yn+G&hy&m}n z9+`}IAi^)R{k~&@c!xGgHX+hu0ceLl{K@eWlg&B9=`nK(#*S(D7F?-{z~L*@EizK!!y;?WA^S1?}ghX zn&>S{jVjZB^^i8ko2SCYkcMtaK&oi77LnpSSe*mOBLK8-;3zQp#uOxsei{)mpvdc1 zDyv`71$SC4zGOV*%) zYuiONK_$3;(U?n`pGta>Nz|q}SGK@@Q4%cv225Hv6>*E?4@F=!R4O%@C!0W922BzS z)A+tGt}>ZLiAo}__)@CL@G}bj$a5K3GcCaDCM)4&ppmfg!p&qW3RND|))6^kC`tZQ zUE`lwtzYX6-N{BxN$eNmhAtbv%ZS|R;HRR z;8iV^U3|8zvfo-&T;FUV=6O7QDR;n3e$JJY6;N_=J+;etjLqt`PxB_Zf4~ z@)EQ>zDmIVwazuts{=#y7rdgQ1-wrv61?bSxthicE}}pl1-HOM3&$XdJSUdB45gd! z!N+APbOQBkd`{fN3(P@ktb67)sUUXBbz5=Hx$oGntX5%o;`&t0oO#;X-*s=Vvq4sA zh=kKQb}uqJi?@)=TzaZ#%R<~u4ZR-Lv=pSe^LFgN!po7dL9{|+j|#n=c!cpRf&Lt= zRuyNN>KeE{alNP~|1ysO+5d}qzK`IEMiI`W5X*DGNLP@_aKz}5wYz=IF|b!}vQAHe zjr$^eh;&j6?~}4Jm{dis2q^LcV;_83kgI9KA!95FX!_T1lH9jTpPQQ>_0!a+ zxJCl0#0qFcqnY>ADv(;J;x9BPr3ALGsdMwF5lfSm?TBp$&-S1EC;w z*?wgHNxq+-+SH8h=$O;W2>$%{4yfXg^X0ed?+OchOt!2?Ur6JUY#pWNc%48AspzTlW$4-(f;ZjZ{z?qicb@eSL2H| zzrO3{uRcrdawt3(AYveO|LG=GvsMp%UB8h>7^rWQWfXn`Xhg%~IX*5%AHTA8C8 zh*)BZMh_WYO-)I8NP2%$)uZm)srQr3+xgLSo`Zt}GvRu9rG}G`4p32iYS8B=_Y_Er zk6(G^;6IMsKt&z99xi|t!(*LIofK}c6bA~O?j@O^2U$9GN>XRFS6iB5?u`SS&x2Nk zs&&db@nypgv5v$Px*6c0Z07{qWmBVQtT#7jITODsbD1hQ-)hvtH`3!K3kp!M4avPm;Ps-v@UVc;B&>JUv!HRZd!Zw(N` z^AEsB!_@Bis42>>1@{QLv)yX1k(JAXz@DLemrAxLSrzde>jxGTsZHmpmyCy;7u~~( zy5I2$V}V=jyzpm3=8dOb1qNcJewd)V-M%HiKp-DbrmU?eU~|dY`)Moe-0;yW`I>YB z%$1}mwgDcUKBkix*XO-TzQA1h6IA>KTEqbNp2dv462aqVTW$Dcy;#VbQsTbDZ!Ro5 z%4AQ&9#B~umoy2P!+2fuAA#4Qw?E8~p4Vxc0ddS|D-ft%cd55s&p4OfZ_kqpHLMf@ za}IvP48Gt?wz>yFrWK{HPt4TUBGwoT&E+vT(wLqW?v->Iy5sKEHHZzI7gv)9{??q= za?4ZqdzrUYP{}CSiSE~(FRhngbYjWEoq;EQ%mEL<0Y`hvK)ED=(UZg4tmQCjndt$Z^YTxy^y`cCl5k^Sg~DM#4bM@1^jLaeogrc zz`ycwqJ$DSB|R_q9!j@8jB{X~oQ4j+y>z{~=unO=*LMA%Zxjw57k`GNe)i%0U=K?TQ*rw}B6w!CUJ)M5(tNjafd|IPE0l3n0|n#NEz zoZKn%RIhqw9INPd-zPv#>Gyqj$6UUD5pyN^3o}Q0^55tC{z<&{o znrv}#F*qPVfdm;XL;wojSraZ?CCT;XR<-k5F09teQiJ*rDZWy|WLlNysef#0(AC}~ zNsso`ZdhHXb@0ZYgV6u!FJE}x%D8BsHO#H~RtWq%Si%;<6%wiI0!v3*pte+wik28@ zkHWQ2sw+Ut)p|d};_dZ7*ZtD6g6r{7-V=N_9h1bg%)kgG`0w%Qpa>b8ttJ=pA{M#39zgS#{31qXXKzZI-y|5y` z0`=i}GLXG7C1_*m5Kcb7>JBfYWFt$;LNPWj486})5TPh5ec#a*>_YfMb-?3! z@=aFmp8@uN6KNN)AXhx6aF?=JpC7(Ks`DwGt~$|{^P65g#0-CH zUJSTco0po|2L6^$rP{oBHEP~K2GQPXlmqp-q9yjeR`8Q`o!g}mzb2P_jrUfOEw zW8(KNNqMjP7auS*Iv48@%jfx)u&-RR+UFu~?@ds|Z5;aSwy*~CJ z^SC3wfpg-y`5pn@=B!S4*N<4< zr2^fo>{HiMTYtcV58y9wL`2&2Pu zcgNlGm|FXWp!&`yo2U00cHir-mKJT4PmXyz8x@-<;chnzwOi*Gz0kkF1OA2v7sQ5^ z>Lkvu!LSAVi#rgEp&<-0Bfu|GFV&fQ+_OE;AG0(rr|&o8&nrhmy=eMh1)h%p2x#gd zU(z~sz+mpNNgSJF_r4V34#W;ceXo&J_a*^G7|a>1>FOi%I~eLNG=4Rggx5Je(-`7s zfj9cwh|6&!5Yb){ta^*P2N7$3W0(-pC-1Ac=N=AIh2~$XJBLvyiubepp1T80wl5~g zlog)Y;353ylox}wx@R*UDG_+WD?ChbE^D>&(W|f%S56=UzIiZSgkqA$MY_&AO_;5quydbu&vEGE5^1 z#3^hQbaCNkUt#*J?PcaYf_Juc2wuEkQ?XQs5B#L2Eo<`+x6b^RTdPh-olU~^ePo1z zFLyYWvMSSA7hjXsnfbj>9OVJZU=!$%RI8*{f6-QavE0Pw9Lh-m>dPPNG^eiDYgss{ z83o~B512r-C_q{?z!$meO1H8x8Og0LD#|7XZAfj^^FMz>FXZeeALxh6Bkd+ol{gKF z$z`t!gRJXkDqhC2Hm1EkDH+?zso$_By}6iyqnd)6w3LIYp}r8tGG~@~{NbFlK=CLK zAe9SPZHY%6KD$FQz8~P%Q{Z$kZO6vW;SiQrRw$bic7twjTUJ!W#Y)A+K*rydlJyl9 zfXEyem=P&g{v(n%^~6KJ^wjI-|IUmB=Wc!EPKLscANRD@);!xt%EWAkQp=OCRq6Ct z2v2FkBjFH{Bbh2qTE>gbWF^fCbkQ4Q5t{JXcL_9PMd5ug&J)&;k%uYy1=sP?m%J>~U&HvDAy3r?v&2S;1L#D#@ zG<6KptI|SFavrjf&yitS)P?S+22v@z|C0!OjQA%Jm{KA21c}-427l{&*g z{KJa8HcO%y^W);c&qpomg&QMx4{+?qgwrqLh<&0l??#M$-mOc;5 z)eJ{!!qUQCkUVlYMqXUZA(D@1h5q|=M<=T;6S>O75>x3Cf47Z;A-g7z^rjW%wo^)*DXEYf^)PI6@oZ`7_{3PFu`o_z8h*)UvEEvaL3voF20l+h7 zKo4#6Zx3^?Zz*G=>+8Iw*f6KdRJHzDI`(y-S-7*FT5uh&(t03a@3r$ja}wr15Idm`*>yu{<`y&_=ih6 zMHnh<$T7|Taa-fZvA9DzO2ps5@`#m+&Ptyj>f605D%$Nuha(@2ZIVQl(yycn^oQ5a z&p-3nUQ5vfRlWji)DE``Rn3hl7DjNZY^~?f3dKhr8k*>h`lVJ9|8PV~Gv=KCY)Mak zbfc(A&~mNQB7&kW8-)LLgPGyGtCT}=ZOiO388^LqU?rMZpVJyqzq=n1mMR>}eQENc zC2UQ8CNChevpEtIf94yc;ixsoUjLu>yM8AI*{lbop#wbv#<80RoXgmf&@cXoIh&U~ z>3x;LJ~oc;!b1Uf8rwfq)Q2Vv2--ZBS~AQweX)bt`nY0^JO@07N< z0l`4TU1(2T5auTd&g3DDC%2X*-t-6niuYD!5 z5QC4LJ8Idzyhlj&)<_l!b$P9$o?p=pDr(j)8iv*iC84NKswYAzfr9T?(b|*zxT2`t zfp|65(YFoN4b};3h4<{Dl31AqEVP2D1>HIrkMu#NwQL-Y%C55@tq z2sU&|WFxkY5_2v2Yz$=j+Fr|8NOSt#kblb+WkP#_Z6hoJ-)j5|<-{B3@ZkR9s!)x6 z3$u2NG52ytIqizv!?U0imA2Pz8eX1M>XZ71Olm`7o?s{IQgYNhIJo-NWt(qT0mqT# z?q6A3$Qjw=iGMkR(pVCu=Kb`5IF+<5tV*K#hwl>K%zgfiQsxAhV(dLY%%Kd4zQ0MiiQq<;S zGOc^1vA4WtoWE*5A~R16%ZavBM=S+$N`)-#eR@iqR3$PFnUuJG`Qi`~FUm(T^(+MV=nw_3db-Rw?!nh~hK39P+Xbl@-yCKDOs?4K z==l(aFqiYg{mIH5X71+*E=|NFj!va$baEs`5JRxI-h8#h&K6}z+`hY5X7@ExaDJ)KUTeL94 zKQSUAogCw7YG^1ZD3p?%irU5c{-I%er_BAeC#GC~E*#Iym)dPZu z;1UAzAZyJKcnLc;=EQL=4wp_Qn0Wbq!RnAzrl0J7>5DG}sP2IV`k0Ft-UaJ>1mt0mI&uy)cGBx(hH$%`A;l*=*&87S=OR5t8V>6RJcWeO#-Gh(xFP(UC|3JjIu zLerS{_4~4ZZO_3F?dcx$wC4Msnp>_&Tsv}!8U~7yZp=Q7YP9vQ_SibQ$9s3U8AfO) z`);RYaXrL+4z{;$5muAE>~Zfc45wlNU1rp zK6Yxob8cwO#-5aM`&%CpDj)_4OV&)I7TQG-1Y-;>Sqnj7kUT0er8tv2&5#uSBsQu| z+DKgJ1MtP$MaS4xqZEgB@BU;GFAfa;0SyOd!l_26GpwFWGH_fRhQ;nGxD(#b(4T1A zGOm=rg}R)BG`rd_N5&n_dqpE*3WtQIx?$6}zHf^LI*-n14IY@T$u~SL$KYK_xdXR^ zW*Vqh4^zdG`-q5QbLCU`NH2^IY}CMt2E}d7Bz(F#ZPFD^fOK2kAiY_lrg-g9*OU}4 zowb{EF4ih{F!|w{({!b4nzO&H+5k9Uh;k2x68*Z33LwiB#X<^12J$ne)L0ij+UT)I+@Ster%>! z5Fs*u?=DaNAwP-{K=iFKh+Thnu;dqePKoF4C`{dU=W~Q{;Cu4qxfdKhlit10$MPJh&Kf%^CY_Cex$xU}tyR z#}SunS37}tf)!IX%{V!UUV*#R!l&Rfj7ji7sMrXWHML*gakZrn(fF%n9=P#)vtJAf+PG54s46k3D*6lSaBmLh8 zyR$HGolz)yiJgqs1%*0kj$x15S}#uOI=K~#)rCgmtj z<%}tQZL!V>tQnx^^OiRGSzLKNp!VKHk446Yhje?A{-@4M#|yrt!APp;*oS_l3o3V? zb8p6cDIprxi1jAIMO2HXjrf}_9SP4$()#SDysBV%C(J8AhR`QGsO72YP4l*FNjw=w z0rD15M{Z>}5+ctzPNAu3vpL2}&7k}wH|R{~xx{DA4vN1;3$rgXLN=lh;2KYnyW6+a zPl|_OG=H|(Q~{!VNfdd{?W3R5O`GD?ODHXBwy(}{?l=p71(F7}S4z08FmYg*kZ^(LN?BU42cE9e zw#MAS99AoR++<-v|IUGN|wtS_nqsnu*<;W=%-#n zLOQuk3x9ViP8-+;l16KjUTYY)QS5ehYYKSNBY}{cpds6F%t3*EgvVybi|VenZ`siB zd#E@nzqFecqt9Q2Rsx@wx*6S{Le_$eYmErL>AMmCY*r5XkyrR7z0N~e5%+J-_!lZ3 zOv#BH%R$xJ9PDwWT)6Rui1yt&FWTSH8%6%Zc{iZ-(aC5g;~R_n>ut}z zSt#aRW$w1d?skL!qH>~u@SWDLsq2JSN#^%A7C^jb_H@)l3+2xoFrdaHY$Wcw3chf% z)&7~wd}I8v&ZRW-j=}6Z{oMg*>xlo~Z{z$w&NBW#1qAu2Ln5dI|DAID{*jR3iTcv- zC=qqPID)43TyH84TfD;TL}b#6N~ntCLP@W ze)F76*zjLVYD1wY(|(!C=wx2L7A<|vuJdf&GMazS`q|4~-+1}hHbq|jtiN@>PY(~J zWE7ZFToh;m{~_yBy<}f>PdeSW<-2L7&U5Mo?dkl(`FhTCMkdSdGa3D_i zm$jEiZA10GzeZG9j%1_m0y=je`@bWJDO$$ zCc@L6K;=$TzO(Qju5@3#p4t_si>u7%1hl{k>n3`Jj*9?a6r;`KzJovUKOM>}OlQv$ tZZR8blwW_BfB10hYRx<+llw-Tsoag5TK#1b0s;a;N=#0)QdrOL{{m(uxorRd literal 0 HcmV?d00001 diff --git a/vendor/github.com/markbates/goth/providers/nextcloud/session.go b/vendor/github.com/markbates/goth/providers/nextcloud/session.go new file mode 100644 index 0000000000..568f3d6d4d --- /dev/null +++ b/vendor/github.com/markbates/goth/providers/nextcloud/session.go @@ -0,0 +1,63 @@ +package nextcloud + +import ( + "encoding/json" + "errors" + "strings" + "time" + + "github.com/markbates/goth" +) + +// Session stores data during the auth process with Nextcloud. +type Session struct { + AuthURL string + AccessToken string + RefreshToken string + ExpiresAt time.Time +} + +var _ goth.Session = &Session{} + +// GetAuthURL will return the URL set by calling the `BeginAuth` function on the Nextcloud provider. +func (s Session) GetAuthURL() (string, error) { + if s.AuthURL == "" { + return "", errors.New(goth.NoAuthUrlErrorMessage) + } + return s.AuthURL, nil +} + +// Authorize the session with Nextcloud and return the access token to be stored for future use. +func (s *Session) Authorize(provider goth.Provider, params goth.Params) (string, error) { + p := provider.(*Provider) + token, err := p.config.Exchange(goth.ContextForClient(p.Client()), params.Get("code")) + if err != nil { + return "", err + } + + if !token.Valid() { + return "", errors.New("Invalid token received from provider") + } + + s.AccessToken = token.AccessToken + s.RefreshToken = token.RefreshToken + s.ExpiresAt = token.Expiry + return token.AccessToken, err +} + +// Marshal the session into a string +func (s Session) Marshal() string { + b, _ := json.Marshal(s) + return string(b) +} + +func (s Session) String() string { + return s.Marshal() +} + +// UnmarshalSession wil unmarshal a JSON string into a session. +func (p *Provider) UnmarshalSession(data string) (goth.Session, error) { + s := &Session{} + err := json.NewDecoder(strings.NewReader(data)).Decode(s) + return s, err +} diff --git a/vendor/modules.txt b/vendor/modules.txt index e26566e592..80f3b6ac0b 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -311,6 +311,7 @@ github.com/markbates/goth/providers/gitea github.com/markbates/goth/providers/github github.com/markbates/goth/providers/gitlab github.com/markbates/goth/providers/google +github.com/markbates/goth/providers/nextcloud github.com/markbates/goth/providers/openidConnect github.com/markbates/goth/providers/twitter # github.com/mattn/go-isatty v0.0.7 diff --git a/web_src/js/index.js b/web_src/js/index.js index fcf9701c3c..b2eec525d3 100644 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -1892,6 +1892,7 @@ function initAdmin() { case 'github': case 'gitlab': case 'gitea': + case 'nextcloud': $('.oauth2_use_custom_url').show(); break; case 'openidConnect': @@ -1925,6 +1926,7 @@ function initAdmin() { $('.oauth2_token_url input, .oauth2_auth_url input, .oauth2_profile_url input, .oauth2_email_url input').attr('required', 'required'); $('.oauth2_token_url, .oauth2_auth_url, .oauth2_profile_url, .oauth2_email_url').show(); break; + case 'nextcloud': case 'gitea': case 'gitlab': $('.oauth2_token_url input, .oauth2_auth_url input, .oauth2_profile_url input').attr('required', 'required');