From dee3e6b4db47cb6e1b62466fba45a915e2847da1 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 19 Jan 2019 23:33:33 +0200 Subject: [PATCH 01/89] init of v11.2.0: add context#FullRequestURI and NewConditionalHandler As requested at: https://github.com/kataras/iris/issues/1167 and https://github.com/kataras/iris/issues/1170 --- _examples/routing/conditional-chain/main.go | 49 +++++++++++++++++++ context/context.go | 30 ++++++++++-- context/handler.go | 52 +++++++++++++++++++++ go19.go | 6 +++ httptest/httptest.go | 3 +- iris.go | 18 +++++++ 6 files changed, 152 insertions(+), 6 deletions(-) create mode 100644 _examples/routing/conditional-chain/main.go diff --git a/_examples/routing/conditional-chain/main.go b/_examples/routing/conditional-chain/main.go new file mode 100644 index 000000000..ec2765f84 --- /dev/null +++ b/_examples/routing/conditional-chain/main.go @@ -0,0 +1,49 @@ +package main + +import ( + "github.com/kataras/iris" +) + +func main() { + app := iris.New() + v1 := app.Party("/api/v1") + + myFilter := func(ctx iris.Context) bool { + // don't do that on production, use session or/and database calls and etc. + ok, _ := ctx.URLParamBool("admin") + return ok + } + + onlyWhenFilter1 := func(ctx iris.Context) { + ctx.Application().Logger().Infof("admin: %s", ctx.Params()) + ctx.Next() + } + + onlyWhenFilter2 := func(ctx iris.Context) { + // You can always use the per-request storage + // to perform actions like this ofc. + // + // this handler: ctx.Values().Set("is_admin", true) + // next handler: isAdmin := ctx.Values().GetBoolDefault("is_admin", false) + // + // but, let's simplify it: + ctx.HTML("

Hello Admin


") + ctx.Next() + } + + // HERE: + // It can be registered anywhere, as a middleware. + // It will fire the `onlyWhenFilter1` and `onlyWhenFilter2` as middlewares (with ctx.Next()) + // if myFilter pass otherwise it will just continue the handler chain with ctx.Next() by ignoring + // the `onlyWhenFilter1` and `onlyWhenFilter2`. + myMiddleware := iris.NewConditionalHandler(myFilter, onlyWhenFilter1, onlyWhenFilter2) + + v1UsersRouter := v1.Party("/users", myMiddleware) + v1UsersRouter.Get("/", func(ctx iris.Context) { + ctx.HTML("requested: /api/v1/users") + }) + + // http://localhost:8080/api/v1/users + // http://localhost:8080/api/v1/users?admin=true + app.Run(iris.Addr(":8080")) +} diff --git a/context/context.go b/context/context.go index f437e4475..0b37b8d8a 100644 --- a/context/context.go +++ b/context/context.go @@ -292,7 +292,6 @@ type Context interface { // RequestPath returns the full request path, // based on the 'escape'. RequestPath(escape bool) string - // Host returns the host part of the current url. Host() string // Subdomain returns the subdomain of this request, if any. @@ -300,6 +299,9 @@ type Context interface { Subdomain() (subdomain string) // IsWWW returns true if the current subdomain (if any) is www. IsWWW() bool + // FullRqeuestURI returns the full URI, + // including the scheme, the host and the relative requested path/resource. + FullRequestURI() string // RemoteAddr tries to parse and return the real client's request IP. // // Based on allowed headers names that can be modified from Configuration.RemoteAddrHeaders. @@ -1465,11 +1467,11 @@ func (ctx *context) Host() string { // GetHost returns the host part of the current URI. func GetHost(r *http.Request) string { - h := r.URL.Host - if h == "" { - h = r.Host + if host := r.Host; host != "" { + return host } - return h + + return r.URL.Host } // Subdomain returns the subdomain of this request, if any. @@ -1502,6 +1504,24 @@ func (ctx *context) IsWWW() bool { return false } +// FullRqeuestURI returns the full URI, +// including the scheme, the host and the relative requested path/resource. +func (ctx *context) FullRequestURI() string { + scheme := ctx.request.URL.Scheme + if scheme == "" { + if ctx.request.TLS != nil { + scheme = "https:" + } else { + scheme = "http:" + } + } + + host := ctx.Host() + path := ctx.Path() + + return scheme + "//" + host + path +} + const xForwardedForHeaderKey = "X-Forwarded-For" // RemoteAddr tries to parse and return the real client's request IP. diff --git a/context/handler.go b/context/handler.go index 6d980513b..1dcf1a02d 100644 --- a/context/handler.go +++ b/context/handler.go @@ -34,3 +34,55 @@ func HandlerName(h Handler) string { // return fmt.Sprintf("%s:%d", l, n) return runtime.FuncForPC(pc).Name() } + +// Filter is just a type of func(Handler) bool which reports whether an action must be performed +// based on the incoming request. +// +// See `NewConditionalHandler` for more. +type Filter func(Context) bool + +// NewConditionalHandler returns a single Handler which can be registered +// as a middleware. +// Filter is just a type of Handler which returns a boolean. +// Handlers here should act like middleware, they should contain `ctx.Next` to proceed +// to the next handler of the chain. Those "handlers" are registed to the per-request context. +// +// +// It checks the "filter" and if passed then +// it, correctly, executes the "handlers". +// +// If passed, this function makes sure that the Context's information +// about its per-request handler chain based on the new "handlers" is always updated. +// +// If not passed, then simply the Next handler(if any) is executed and "handlers" are ignored. +// +// Example can be found at: _examples/routing/conditional-chain. +func NewConditionalHandler(filter Filter, handlers ...Handler) Handler { + return func(ctx Context) { + if filter(ctx) { + // Note that we don't want just to fire the incoming handlers, we must make sure + // that it won't break any further handler chain + // information that may be required for the next handlers. + // + // The below code makes sure that this conditional handler does not break + // the ability that iris provides to its end-devs + // to check and modify the per-request handlers chain at runtime. + currIdx := ctx.HandlerIndex(-1) + currHandlers := ctx.Handlers() + if currIdx == len(currHandlers)-1 { + // if this is the last handler of the chain + // just add to the last the new handlers and call Next to fire those. + ctx.AddHandler(handlers...) + ctx.Next() + return + } + // otherwise insert the new handlers in the middle of the current executed chain and the next chain. + newHandlers := append(currHandlers[:currIdx], append(handlers, currHandlers[currIdx+1:]...)...) + ctx.SetHandlers(newHandlers) + ctx.Next() + return + } + // if not pass, then just execute the next. + ctx.Next() + } +} diff --git a/go19.go b/go19.go index dd1961963..6d6c979e4 100644 --- a/go19.go +++ b/go19.go @@ -42,6 +42,12 @@ type ( // If Handler panics, the server (the caller of Handler) assumes that the effect of the panic was isolated to the active request. // It recovers the panic, logs a stack trace to the server error log, and hangs up the connection. Handler = context.Handler + // Filter is just a type of func(Handler) bool which reports whether an action must be performed + // based on the incoming request. + // + // See `NewConditionalHandler` for more. + // An alias for the `context/Filter`. + Filter = context.Filter // A Map is a shortcut of the map[string]interface{}. Map = context.Map diff --git a/httptest/httptest.go b/httptest/httptest.go index 50253c539..243f765b4 100644 --- a/httptest/httptest.go +++ b/httptest/httptest.go @@ -5,8 +5,9 @@ import ( "net/http" "testing" - "github.com/iris-contrib/httpexpect" "github.com/kataras/iris" + + "github.com/iris-contrib/httpexpect" ) type ( diff --git a/iris.go b/iris.go index d2e3e0df9..f899fcdfe 100644 --- a/iris.go +++ b/iris.go @@ -341,6 +341,24 @@ var ( // // A shortcut for the `context#LimitRequestBodySize`. LimitRequestBodySize = context.LimitRequestBodySize + // NewConditionalHandler returns a single Handler which can be registered + // as a middleware. + // Filter is just a type of Handler which returns a boolean. + // Handlers here should act like middleware, they should contain `ctx.Next` to proceed + // to the next handler of the chain. Those "handlers" are registed to the per-request context. + // + // + // It checks the "filter" and if passed then + // it, correctly, executes the "handlers". + // + // If passed, this function makes sure that the Context's information + // about its per-request handler chain based on the new "handlers" is always updated. + // + // If not passed, then simply the Next handler(if any) is executed and "handlers" are ignored. + // Example can be found at: _examples/routing/conditional-chain. + // + // A shortcut for the `context#NewConditionalHandler`. + NewConditionalHandler = context.NewConditionalHandler // StaticEmbeddedHandler returns a Handler which can serve // embedded into executable files. // From bd1ada467570206d4127a00e39a58cbf26a01ce1 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 19 Jan 2019 23:34:41 +0200 Subject: [PATCH 02/89] minor misspell fix --- context/handler.go | 2 +- iris.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/context/handler.go b/context/handler.go index 1dcf1a02d..a78423b9f 100644 --- a/context/handler.go +++ b/context/handler.go @@ -45,7 +45,7 @@ type Filter func(Context) bool // as a middleware. // Filter is just a type of Handler which returns a boolean. // Handlers here should act like middleware, they should contain `ctx.Next` to proceed -// to the next handler of the chain. Those "handlers" are registed to the per-request context. +// to the next handler of the chain. Those "handlers" are registered to the per-request context. // // // It checks the "filter" and if passed then diff --git a/iris.go b/iris.go index f899fcdfe..3cc537b74 100644 --- a/iris.go +++ b/iris.go @@ -345,7 +345,7 @@ var ( // as a middleware. // Filter is just a type of Handler which returns a boolean. // Handlers here should act like middleware, they should contain `ctx.Next` to proceed - // to the next handler of the chain. Those "handlers" are registed to the per-request context. + // to the next handler of the chain. Those "handlers" are registered to the per-request context. // // // It checks the "filter" and if passed then From 48cfac94f138a5771c6f371388afce7688c1aee4 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sun, 20 Jan 2019 00:00:54 +0200 Subject: [PATCH 03/89] gofmt --- _examples/view/template_html_5/main.go | 2 +- _examples/websocket/native-messages/main.go | 4 ++-- cache/entry/entry.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/_examples/view/template_html_5/main.go b/_examples/view/template_html_5/main.go index 9fcc7fdb8..0a7a44ab6 100644 --- a/_examples/view/template_html_5/main.go +++ b/_examples/view/template_html_5/main.go @@ -11,7 +11,7 @@ func main() { // TIP: append .Reload(true) to reload the templates on each request. app.Get("/home", func(ctx iris.Context) { - ctx.ViewData("title", "Home page"); + ctx.ViewData("title", "Home page") ctx.View("home.html") // Note that: you can pass "layout" : "otherLayout.html" to bypass the config's Layout property // or view.NoLayout to disable layout on this render action. diff --git a/_examples/websocket/native-messages/main.go b/_examples/websocket/native-messages/main.go index 254cb2a68..33de1d56c 100644 --- a/_examples/websocket/native-messages/main.go +++ b/_examples/websocket/native-messages/main.go @@ -27,8 +27,8 @@ func main() { app.RegisterView(iris.HTML("./templates", ".html")) // select the html engine to serve templates ws := websocket.New(websocket.Config{ - // to enable binary messages (useful for protobuf): - // BinaryMessages: true, + // to enable binary messages (useful for protobuf): + // BinaryMessages: true, }) // register the server on an endpoint. diff --git a/cache/entry/entry.go b/cache/entry/entry.go index 7beab739e..f875323ce 100644 --- a/cache/entry/entry.go +++ b/cache/entry/entry.go @@ -115,7 +115,7 @@ func (e *Entry) Reset(statusCode int, headers map[string][]string, e.response.headers = newHeaders } - e.response.body = make([]byte,len(body)) + e.response.body = make([]byte, len(body)) copy(e.response.body, body) // check if a given life changer provided // and if it does then execute the change life time From 32d735f0f10a7bd4b7228bf03e3a6e2b5346872a Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sun, 20 Jan 2019 14:06:06 +0200 Subject: [PATCH 04/89] add a warning on mvc if someone didn't read the examples or the godocs and .Register dependencies after .Handle a developer sent a direct question message from our facebook page: https://www.facebook.com/iris.framework/ --- mvc/mvc.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/mvc/mvc.go b/mvc/mvc.go index f11e02d44..d80102b85 100644 --- a/mvc/mvc.go +++ b/mvc/mvc.go @@ -1,10 +1,14 @@ package mvc import ( + "strings" + "github.com/kataras/iris/context" "github.com/kataras/iris/core/router" "github.com/kataras/iris/hero" "github.com/kataras/iris/hero/di" + + "github.com/kataras/golog" ) var ( @@ -37,6 +41,7 @@ var ( type Application struct { Dependencies di.Values Router router.Party + Controllers []*ControllerActivator } func newApp(subRouter router.Party, values di.Values) *Application { @@ -105,7 +110,19 @@ func (app *Application) Configure(configurators ...func(*Application)) *Applicat // // Example: `.Register(loggerService{prefix: "dev"}, func(ctx iris.Context) User {...})`. func (app *Application) Register(values ...interface{}) *Application { + if len(values) > 0 && app.Dependencies.Len() == 0 && len(app.Controllers) > 0 { + allControllerNamesSoFar := make([]string, len(app.Controllers)) + for i := range app.Controllers { + allControllerNamesSoFar[i] = app.Controllers[i].Name() + } + + golog.Warnf(`mvc.Application#Register called after mvc.Application#Handle. +The controllers[%s] may miss required dependencies. +Set the Logger's Level to "debug" to view the active dependencies per controller.`, strings.Join(allControllerNamesSoFar, ",")) + } + app.Dependencies.Add(values...) + return app } @@ -173,6 +190,8 @@ func (app *Application) Handle(controller interface{}) *Application { }); okAfter { after.AfterActivation(c) } + + app.Controllers = append(app.Controllers, c) return app } From 9a777f72b6f7eb17f4174a50ec3ceb15414133a2 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Fri, 25 Jan 2019 23:47:31 +0200 Subject: [PATCH 05/89] websocket: replace sync.Map with custom map[string]*connection. Add translate template function example. Fix ctx.HandlerName() does not return the end-dev-defined current route's name, this will give better warnings when using MVC in a wrong way --- _examples/miscellaneous/i18n/main.go | 13 +++ .../miscellaneous/i18n/templates/index.html | 1 + _examples/mvc/basic/main.go | 2 + _examples/websocket/custom-go-client/run.bat | 4 + context/context.go | 9 +- websocket/server.go | 91 +++++++------------ 6 files changed, 59 insertions(+), 61 deletions(-) create mode 100644 _examples/miscellaneous/i18n/templates/index.html create mode 100644 _examples/websocket/custom-go-client/run.bat diff --git a/_examples/miscellaneous/i18n/main.go b/_examples/miscellaneous/i18n/main.go index ab7b53cc3..8b0e93d90 100644 --- a/_examples/miscellaneous/i18n/main.go +++ b/_examples/miscellaneous/i18n/main.go @@ -59,6 +59,19 @@ func newApp() *iris.Application { "key2", fromSecondFileValue) }) + // using in inside your templates: + view := iris.HTML("./templates", ".html") + app.RegisterView(view) + + app.Get("/templates", func(ctx iris.Context) { + ctx.View("index.html", iris.Map{ + "tr": ctx.Translate, + }) + // it will return "hello, iris" + // when {{call .tr "hi" "iris"}} + }) + // + return app } diff --git a/_examples/miscellaneous/i18n/templates/index.html b/_examples/miscellaneous/i18n/templates/index.html new file mode 100644 index 000000000..7fc7cae85 --- /dev/null +++ b/_examples/miscellaneous/i18n/templates/index.html @@ -0,0 +1 @@ +{{call .tr "hi" "iris"}} \ No newline at end of file diff --git a/_examples/mvc/basic/main.go b/_examples/mvc/basic/main.go index b52992217..c28b06afa 100644 --- a/_examples/mvc/basic/main.go +++ b/_examples/mvc/basic/main.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/kataras/iris" + "github.com/kataras/iris/middleware/recover" "github.com/kataras/iris/sessions" "github.com/kataras/iris/mvc" @@ -11,6 +12,7 @@ import ( func main() { app := iris.New() + app.Use(recover.New()) app.Logger().SetLevel("debug") mvc.Configure(app.Party("/basic"), basicMVC) diff --git a/_examples/websocket/custom-go-client/run.bat b/_examples/websocket/custom-go-client/run.bat new file mode 100644 index 000000000..3e483188d --- /dev/null +++ b/_examples/websocket/custom-go-client/run.bat @@ -0,0 +1,4 @@ +@echo off +REM run.bat 30 +start go run main.go server +for /L %%n in (1,1,%1) do start go run main.go client \ No newline at end of file diff --git a/context/context.go b/context/context.go index 0b37b8d8a..7fa1a95e3 100644 --- a/context/context.go +++ b/context/context.go @@ -275,7 +275,8 @@ type Context interface { // that can be used to share information between handlers and middleware. Values() *memstore.Store // Translate is the i18n (localization) middleware's function, - // it calls the Get("translate") to return the translated value. + // it calls the Values().Get(ctx.Application().ConfigurationReadOnly().GetTranslateFunctionContextKey()) + // to execute the translate function and return the localized text value. // // Example: https://github.com/kataras/iris/tree/master/_examples/miscellaneous/i18n Translate(format string, args ...interface{}) string @@ -1180,6 +1181,9 @@ func (ctx *context) Proceed(h Handler) bool { // HandlerName returns the current handler's name, helpful for debugging. func (ctx *context) HandlerName() string { + if name := ctx.currentRouteName; name != "" { + return name + } return HandlerName(ctx.handlers[ctx.currentHandlerIndex]) } @@ -1380,7 +1384,8 @@ func (ctx *context) Values() *memstore.Store { } // Translate is the i18n (localization) middleware's function, -// it calls the Get("translate") to return the translated value. +// it calls the Values().Get(ctx.Application().ConfigurationReadOnly().GetTranslateFunctionContextKey()) +// to execute the translate function and return the localized text value. // // Example: https://github.com/kataras/iris/tree/master/_examples/miscellaneous/i18n func (ctx *context) Translate(format string, args ...interface{}) string { diff --git a/websocket/server.go b/websocket/server.go index 28a259921..9bf323ad1 100644 --- a/websocket/server.go +++ b/websocket/server.go @@ -44,9 +44,9 @@ type ( // app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(mywebsocketServer.ClientSource) }) ClientSource []byte messageSerializer *messageSerializer - connections sync.Map // key = the Connection ID. - rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name - mu sync.RWMutex // for rooms. + connections map[string]*connection // key = the Connection ID. + rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name + mu sync.RWMutex // for rooms and connections. onConnectionListeners []ConnectionFunc //connectionPool sync.Pool // sadly we can't make this because the websocket connection is live until is closed. upgrader websocket.Upgrader @@ -64,7 +64,7 @@ func New(cfg Config) *Server { config: cfg, ClientSource: bytes.Replace(ClientSource, []byte(DefaultEvtMessageKey), cfg.EvtMessagePrefix, -1), messageSerializer: newMessageSerializer(cfg.EvtMessagePrefix), - connections: sync.Map{}, // ready-to-use, this is not necessary. + connections: make(map[string]*connection), rooms: make(map[string][]string), onConnectionListeners: make([]ConnectionFunc, 0), upgrader: websocket.Upgrader{ @@ -133,19 +133,14 @@ func (s *Server) Upgrade(ctx context.Context) Connection { } func (s *Server) addConnection(c *connection) { - s.connections.Store(c.id, c) + s.mu.Lock() + s.connections[c.id] = c + s.mu.Unlock() } func (s *Server) getConnection(connID string) (*connection, bool) { - if cValue, ok := s.connections.Load(connID); ok { - // this cast is not necessary, - // we know that we always save a connection, but for good or worse let it be here. - if conn, ok := cValue.(*connection); ok { - return conn, ok - } - } - - return nil, false + c, ok := s.connections[connID] + return c, ok } // wrapConnection wraps an underline connection to an iris websocket connection. @@ -290,34 +285,24 @@ func (s *Server) leave(roomName string, connID string) (left bool) { // GetTotalConnections returns the number of total connections func (s *Server) GetTotalConnections() (n int) { - s.connections.Range(func(k, v interface{}) bool { - n++ - return true - }) + s.mu.RLock() + n = len(s.connections) + s.mu.RUnlock() - return n + return } // GetConnections returns all connections func (s *Server) GetConnections() []Connection { - // first call of Range to get the total length, we don't want to use append or manually grow the list here for many reasons. - length := s.GetTotalConnections() - conns := make([]Connection, length, length) + s.mu.RLock() + conns := make([]Connection, len(s.connections)) i := 0 - // second call of Range. - s.connections.Range(func(k, v interface{}) bool { - conn, ok := v.(*connection) - if !ok { - // if for some reason (should never happen), the value is not stored as *connection - // then stop the iteration and don't continue insertion of the result connections - // in order to avoid any issues while end-dev will try to iterate a nil entry. - return false - } - conns[i] = conn + for _, c := range s.connections { + conns[i] = c i++ - return true - }) + } + s.mu.RUnlock() return conns } @@ -339,10 +324,8 @@ func (s *Server) GetConnectionsByRoom(roomName string) []Connection { if connIDs, found := s.rooms[roomName]; found { for _, connID := range connIDs { // existence check is not necessary here. - if cValue, ok := s.connections.Load(connID); ok { - if conn, ok := cValue.(*connection); ok { - conns = append(conns, conn) - } + if conn, ok := s.connections[connID]; ok { + conns = append(conns, conn) } } } @@ -382,32 +365,20 @@ func (s *Server) emitMessage(from, to string, data []byte) { } } } else { + s.mu.RLock() // it suppose to send the message to all opened connections or to all except the sender. - s.connections.Range(func(k, v interface{}) bool { - connID, ok := k.(string) - if !ok { - // should never happen. - return true - } - - if to != All && to != connID { // if it's not suppose to send to all connections (including itself) - if to == Broadcast && from == connID { // if broadcast to other connections except this + for _, conn := range s.connections { + if to != All && to != conn.id { // if it's not suppose to send to all connections (including itself) + if to == Broadcast && from == conn.id { // if broadcast to other connections except this // here we do the opossite of previous block, // just skip this connection when it's suppose to send the message to all connections except the sender. - return true + continue } - - } - - // not necessary cast. - conn, ok := v.(*connection) - if ok { - // send to the client(s) when the top validators passed - conn.writeDefault(data) } - return ok - }) + conn.writeDefault(data) + } + s.mu.RUnlock() } } @@ -432,7 +403,9 @@ func (s *Server) Disconnect(connID string) (err error) { // close the underline connection and return its error, if any. err = conn.underline.Close() - s.connections.Delete(connID) + s.mu.Lock() + delete(s.connections, conn.id) + s.mu.Unlock() } return From 4cfdc6418532f49ff0159045a06080db0457eb55 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Mon, 28 Jan 2019 05:36:44 +0200 Subject: [PATCH 06/89] add tutorial for the official mongodb go driver --- HISTORY.md | 4 + README.md | 2 +- VERSION | 2 +- _examples/tutorial/mongodb/.env | 2 + _examples/tutorial/mongodb/0_create_movie.png | Bin 0 -> 93838 bytes _examples/tutorial/mongodb/1_update_movie.png | Bin 0 -> 70592 bytes .../tutorial/mongodb/2_get_all_movies.png | Bin 0 -> 104362 bytes _examples/tutorial/mongodb/3_get_movie.png | Bin 0 -> 85269 bytes _examples/tutorial/mongodb/4_delete_movie.png | Bin 0 -> 49580 bytes _examples/tutorial/mongodb/README.md | 58 ++++++ _examples/tutorial/mongodb/api/store/movie.go | 101 ++++++++++ _examples/tutorial/mongodb/env/env.go | 71 +++++++ _examples/tutorial/mongodb/httputil/error.go | 130 +++++++++++++ _examples/tutorial/mongodb/main.go | 81 ++++++++ _examples/tutorial/mongodb/store/movie.go | 180 ++++++++++++++++++ doc.go | 7 +- iris.go | 2 +- 17 files changed, 635 insertions(+), 5 deletions(-) create mode 100644 _examples/tutorial/mongodb/.env create mode 100644 _examples/tutorial/mongodb/0_create_movie.png create mode 100644 _examples/tutorial/mongodb/1_update_movie.png create mode 100644 _examples/tutorial/mongodb/2_get_all_movies.png create mode 100644 _examples/tutorial/mongodb/3_get_movie.png create mode 100644 _examples/tutorial/mongodb/4_delete_movie.png create mode 100644 _examples/tutorial/mongodb/README.md create mode 100644 _examples/tutorial/mongodb/api/store/movie.go create mode 100644 _examples/tutorial/mongodb/env/env.go create mode 100644 _examples/tutorial/mongodb/httputil/error.go create mode 100644 _examples/tutorial/mongodb/main.go create mode 100644 _examples/tutorial/mongodb/store/movie.go diff --git a/HISTORY.md b/HISTORY.md index 587e15626..340eb0d11 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -17,6 +17,10 @@ Developers are not forced to upgrade if they don't really need it. Upgrade whene **How to upgrade**: Open your command-line and execute this command: `go get -u github.com/kataras/iris` or let the automatic updater do that for you. +# Soon + +Coming soon, stay tuned by reading the [PR](https://github.com/kataras/iris/pull/1175) progress. + # Fr, 11 January 2019 | v11.1.1 Happy new year! This is a minor release, contains mostly bug fixes. diff --git a/README.md b/README.md index c5f97e9ae..dfb02623e 100644 --- a/README.md +++ b/README.md @@ -1020,7 +1020,7 @@ Iris, unlike others, is 100% compatible with the standards and that's why the ma ## Support -- [HISTORY](HISTORY.md#fr-11-january-2019--v1111) file is your best friend, it contains information about the latest features and changes +- [HISTORY](HISTORY.md#soon) file is your best friend, it contains information about the latest features and changes - Did you happen to find a bug? Post it at [github issues](https://github.com/kataras/iris/issues) - Do you have any questions or need to speak with someone experienced to solve a problem at real-time? Join us to the [community chat](https://chat.iris-go.com) - Complete our form-based user experience report by clicking [here](https://docs.google.com/forms/d/e/1FAIpQLSdCxZXPANg_xHWil4kVAdhmh7EBBHQZ_4_xSZVDL-oCC_z5pA/viewform?usp=sf_link) diff --git a/VERSION b/VERSION index 27271c123..ccea1b399 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.1.1:https://github.com/kataras/iris/blob/master/HISTORY.md#fr-11-january-2019--v1111 \ No newline at end of file +11.2.0:https://github.com/kataras/iris/blob/master/HISTORY.md#soon \ No newline at end of file diff --git a/_examples/tutorial/mongodb/.env b/_examples/tutorial/mongodb/.env new file mode 100644 index 000000000..c41f59a0c --- /dev/null +++ b/_examples/tutorial/mongodb/.env @@ -0,0 +1,2 @@ +PORT=8080 +DSN=mongodb://localhost:27017 \ No newline at end of file diff --git a/_examples/tutorial/mongodb/0_create_movie.png b/_examples/tutorial/mongodb/0_create_movie.png new file mode 100644 index 0000000000000000000000000000000000000000..17e8a71e53565a240bdf9f111b1d6449b6b194b7 GIT binary patch literal 93838 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 aGdm`|tF1?T?t$rXAik%opUXO@geCy%3SdJ3 literal 0 HcmV?d00001 diff --git a/_examples/tutorial/mongodb/1_update_movie.png b/_examples/tutorial/mongodb/1_update_movie.png new file mode 100644 index 0000000000000000000000000000000000000000..d0482aa6b2e9d8ab5d749c3459480fbb169d4c25 GIT binary patch literal 70592 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³nU|tXH#H%a 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 J{%!v8e*wU#>-+!! literal 0 HcmV?d00001 diff --git a/_examples/tutorial/mongodb/2_get_all_movies.png b/_examples/tutorial/mongodb/2_get_all_movies.png new file mode 100644 index 0000000000000000000000000000000000000000..1360c0a813a67eac79806f5644521f721aa10f7a GIT binary patch literal 104362 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

+
+
+
\ No newline at end of file
diff --git a/_examples/websocket/basic/browserify/README.md b/_examples/websocket/basic/browserify/README.md
new file mode 100644
index 000000000..6d8d49939
--- /dev/null
+++ b/_examples/websocket/basic/browserify/README.md
@@ -0,0 +1,11 @@
+# Browserify example
+
+```sh
+$ npm install --only=dev # install browserify from the devDependencies.
+$ npm run-script build # browserify and minify the `app.js` into `bundle.js`.
+$ cd ../ && go run server.go # start the neffos server.
+```
+
+> make sure that you have [golang](https://golang.org/dl) installed to run and edit the neffos (server-side).
+
+That's all, now navigate to .
diff --git a/_examples/websocket/basic/browserify/app.js b/_examples/websocket/basic/browserify/app.js
new file mode 100644
index 000000000..967a84809
--- /dev/null
+++ b/_examples/websocket/basic/browserify/app.js
@@ -0,0 +1,61 @@
+const neffos = require('neffos.js');
+
+var scheme = document.location.protocol == "https:" ? "wss" : "ws";
+var port = document.location.port ? ":" + document.location.port : "";
+
+var wsURL = scheme + "://" + document.location.hostname + port + "/echo";
+
+var outputTxt = document.getElementById("output");
+function addMessage(msg) {
+  outputTxt.innerHTML += msg + "\n";
+}
+
+function handleError(reason) {
+  console.log(reason);
+  window.alert(reason);
+}
+
+function handleNamespaceConnectedConn(nsConn) {
+  const inputTxt = document.getElementById("input");
+  const sendBtn = document.getElementById("sendBtn");
+
+  sendBtn.disabled = false;
+  sendBtn.onclick = function () {
+    const input = inputTxt.value;
+    inputTxt.value = "";
+
+    nsConn.emit("chat", input);
+    addMessage("Me: " + input);
+  };
+}
+
+async function runExample() {
+  try {
+    const conn = await neffos.dial(wsURL, {
+      default: { // "default" namespace.
+        _OnNamespaceConnected: function (nsConn, msg) {
+          addMessage("connected to namespace: " + msg.Namespace);
+          handleNamespaceConnectedConn(nsConn);
+        },
+        _OnNamespaceDisconnect: function (nsConn, msg) {
+          addMessage("disconnected from namespace: " + msg.Namespace);
+        },
+        chat: function (nsConn, msg) { // "chat" event.
+          addMessage(msg.Body);
+        }
+      }
+    });
+
+    // You can either wait to conenct or just conn.connect("connect")
+    // and put the `handleNamespaceConnectedConn` inside `_OnNamespaceConnected` callback instead.
+    // const nsConn = await conn.connect("default");
+    // handleNamespaceConnectedConn(nsConn);
+    conn.connect("default");
+
+  } catch (err) {
+    handleError(err);
+  }
+}
+
+runExample();
+
diff --git a/_examples/websocket/basic/browserify/bundle.js b/_examples/websocket/basic/browserify/bundle.js
new file mode 100644
index 000000000..338312805
--- /dev/null
+++ b/_examples/websocket/basic/browserify/bundle.js
@@ -0,0 +1 @@
+(function(){function b(d,e,g){function a(j,i){if(!e[j]){if(!d[j]){var f="function"==typeof require&&require;if(!i&&f)return f(j,!0);if(h)return h(j,!0);var c=new Error("Cannot find module '"+j+"'");throw c.code="MODULE_NOT_FOUND",c}var k=e[j]={exports:{}};d[j][0].call(k.exports,function(b){var c=d[j][1][b];return a(c||b)},k,k.exports,b,d,e,g)}return e[j].exports}for(var h="function"==typeof require&&require,c=0;ci[0]&&c[1]
+
+
+
+
+
+
+

+
+
diff --git a/_examples/websocket/basic/browserify/package.json b/_examples/websocket/basic/browserify/package.json
new file mode 100644
index 000000000..de8513673
--- /dev/null
+++ b/_examples/websocket/basic/browserify/package.json
@@ -0,0 +1,16 @@
+{
+    "name": "neffos.js.example.browserify",
+    "version": "0.0.1",
+    "scripts": {
+        "browserify": "browserify ./app.js -o ./bundle.js",
+        "minifyES6": "minify ./bundle.js --outFile ./bundle.js",
+        "build": "npm run-script browserify && npm run-script minifyES6"
+    },
+    "dependencies": {
+        "neffos.js": "latest"
+    },
+    "devDependencies": {
+        "browserify": "^16.2.3",
+        "babel-minify": "^0.5.0"
+    }
+}
diff --git a/_examples/websocket/basic/go-client/client.go b/_examples/websocket/basic/go-client/client.go
new file mode 100644
index 000000000..5437ae9f6
--- /dev/null
+++ b/_examples/websocket/basic/go-client/client.go
@@ -0,0 +1,85 @@
+package main
+
+import (
+	"bufio"
+	"bytes"
+	"context"
+	"fmt"
+	"log"
+	"os"
+	"time"
+
+	"github.com/kataras/iris/websocket"
+)
+
+const (
+	endpoint              = "ws://localhost:8080/echo"
+	namespace             = "default"
+	dialAndConnectTimeout = 5 * time.Second
+)
+
+// this can be shared with the server.go's.
+// `NSConn.Conn` has the `IsClient() bool` method which can be used to
+// check if that's is a client or a server-side callback.
+var clientEvents = websocket.Namespaces{
+	namespace: websocket.Events{
+		websocket.OnNamespaceConnected: func(c *websocket.NSConn, msg websocket.Message) error {
+			log.Printf("[%s] connected to namespace [%s]", c, msg.Namespace)
+			return nil
+		},
+		websocket.OnNamespaceDisconnect: func(c *websocket.NSConn, msg websocket.Message) error {
+			log.Printf("[%s] disconnected from namespace [%s]", c, msg.Namespace)
+			return nil
+		},
+		"chat": func(c *websocket.NSConn, msg websocket.Message) error {
+			log.Printf("[%s] sent: %s", c.Conn.ID(), string(msg.Body))
+
+			// Write message back to the client message owner with:
+			// c.Emit("chat", msg)
+			// Write message to all except this client with:
+			c.Conn.Server().Broadcast(c, msg)
+			return nil
+		},
+	},
+}
+
+func main() {
+	ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(dialAndConnectTimeout))
+	defer cancel()
+
+	client, err := websocket.Dial(ctx, websocket.GorillaDialer, endpoint, clientEvents)
+	if err != nil {
+		panic(err)
+	}
+	defer client.Close()
+
+	c, err := client.Connect(ctx, namespace)
+	if err != nil {
+		panic(err)
+	}
+
+	fmt.Fprint(os.Stdout, ">> ")
+	scanner := bufio.NewScanner(os.Stdin)
+	for {
+		if !scanner.Scan() {
+			log.Printf("ERROR: %v", scanner.Err())
+			return
+		}
+
+		text := scanner.Bytes()
+
+		if bytes.Equal(text, []byte("exit")) {
+			if err := c.Disconnect(nil); err != nil {
+				log.Printf("reply from server: %v", err)
+			}
+			break
+		}
+
+		ok := c.Emit("chat", text)
+		if !ok {
+			break
+		}
+
+		fmt.Fprint(os.Stdout, ">> ")
+	}
+} // try running this program twice or/and run the server's http://localhost:8080 to check the browser client as well.
diff --git a/_examples/websocket/basic/server.go b/_examples/websocket/basic/server.go
new file mode 100644
index 000000000..9c462dac8
--- /dev/null
+++ b/_examples/websocket/basic/server.go
@@ -0,0 +1,53 @@
+package main
+
+import (
+	"log"
+
+	"github.com/kataras/iris"
+	"github.com/kataras/iris/websocket"
+)
+
+const namespace = "default"
+
+// if namespace is empty then simply websocket.Events{...} can be used instead.
+var serverEvents = websocket.Namespaces{
+	namespace: websocket.Events{
+		websocket.OnNamespaceConnected: func(c *websocket.NSConn, msg websocket.Message) error {
+			log.Printf("[%s] connected to namespace [%s]", c, msg.Namespace)
+			return nil
+		},
+		websocket.OnNamespaceDisconnect: func(c *websocket.NSConn, msg websocket.Message) error {
+			log.Printf("[%s] disconnected from namespace [%s]", c, msg.Namespace)
+			return nil
+		},
+		"chat": func(c *websocket.NSConn, msg websocket.Message) error {
+			log.Printf("[%s] sent: %s", c.Conn.ID(), string(msg.Body))
+
+			// Write message back to the client message owner with:
+			// c.Emit("chat", msg)
+			// Write message to all except this client with:
+			c.Conn.Server().Broadcast(c, msg)
+			return nil
+		},
+	},
+}
+
+func main() {
+	app := iris.New()
+	websocketServer := websocket.New(
+		websocket.DefaultGorillaUpgrader, /*DefaultGobwasUpgrader can be used as well*/
+		serverEvents)
+
+	// serves the endpoint of ws://localhost:8080/echo
+	app.Get("/echo", websocket.Handler(websocketServer))
+
+	// serves the browser-based websocket client.
+	app.Get("/", func(ctx iris.Context) {
+		ctx.ServeFile("./browser/index.html", false)
+	})
+
+	// serves the npm browser websocket client usage example.
+	app.StaticWeb("/browserify", "./browserify")
+
+	app.Run(iris.Addr(":8080"))
+}
diff --git a/_examples/websocket/chat/main.go b/_examples/websocket/chat/main.go
deleted file mode 100644
index 862464180..000000000
--- a/_examples/websocket/chat/main.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package main
-
-import (
-	"fmt"
-
-	"github.com/kataras/iris"
-	"github.com/kataras/iris/websocket"
-)
-
-func main() {
-	app := iris.New()
-
-	app.Get("/", func(ctx iris.Context) {
-		ctx.ServeFile("websockets.html", false) // second parameter: enable gzip?
-	})
-
-	setupWebsocket(app)
-
-	// x2
-	// http://localhost:8080
-	// http://localhost:8080
-	// write something, press submit, see the result.
-	app.Run(iris.Addr(":8080"))
-}
-
-func setupWebsocket(app *iris.Application) {
-	// create our echo websocket server
-	ws := websocket.New(websocket.Config{
-		// These are low-level optionally fields,
-		// user/client can't see those values.
-		ReadBufferSize:  1024,
-		WriteBufferSize: 1024,
-		// only javascript client-side code has the same rule,
-		// which you serve using the ws.ClientSource (see below).
-		EvtMessagePrefix: []byte("my-custom-prefix:"),
-	})
-	ws.OnConnection(handleConnection)
-
-	// register the server on an endpoint.
-	// see the inline javascript code in the websockets.html, this endpoint is used to connect to the server.
-	app.Get("/echo", ws.Handler())
-
-	// serve the javascript builtin client-side library,
-	// see websockets.html script tags, this path is used.
-	app.Any("/iris-ws.js", func(ctx iris.Context) {
-		ctx.Write(ws.ClientSource)
-	})
-}
-
-func handleConnection(c websocket.Connection) {
-	// Read events from browser
-	c.On("chat", func(msg string) {
-		// Print the message to the console, c.Context() is the iris's http context.
-		fmt.Printf("[%s <%s>] %s\n", c.ID(), c.Context().RemoteAddr(), msg)
-		// Write message back to the client message owner with:
-		// c.Emit("chat", msg)
-		// Write message to all except this client with:
-		c.To(websocket.Broadcast).Emit("chat", msg)
-	})
-}
diff --git a/_examples/websocket/chat/websockets.html b/_examples/websocket/chat/websockets.html
deleted file mode 100644
index 3604bfd05..000000000
--- a/_examples/websocket/chat/websockets.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-

-
-
-
-
\ No newline at end of file
diff --git a/_examples/websocket/connectionlist/main.go b/_examples/websocket/connectionlist/main.go
deleted file mode 100644
index ef808f8f6..000000000
--- a/_examples/websocket/connectionlist/main.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"sync"
-	"time"
-
-	"github.com/kataras/iris"
-
-	"github.com/kataras/iris/websocket"
-)
-
-type clientPage struct {
-	Title string
-	Host  string
-}
-
-func main() {
-	app := iris.New()
-	app.RegisterView(iris.HTML("./templates", ".html")) // select the html engine to serve templates
-
-	ws := websocket.New(websocket.Config{})
-
-	// register the server on an endpoint.
-	// see the inline javascript code i the websockets.html, this endpoint is used to connect to the server.
-	app.Get("/my_endpoint", ws.Handler())
-
-	// serve the javascript builtin client-side library,
-	// see websockets.html script tags, this path is used.
-	app.Any("/iris-ws.js", func(ctx iris.Context) {
-		ctx.Write(websocket.ClientSource)
-	})
-
-	app.StaticWeb("/js", "./static/js") // serve our custom javascript code
-
-	app.Get("/", func(ctx iris.Context) {
-		ctx.ViewData("", clientPage{"Client Page", "localhost:8080"})
-		ctx.View("client.html")
-	})
-
-	Conn := make(map[websocket.Connection]bool)
-	var myChatRoom = "room1"
-	var mutex = new(sync.Mutex)
-
-	ws.OnConnection(func(c websocket.Connection) {
-		c.Join(myChatRoom)
-		mutex.Lock()
-		Conn[c] = true
-		mutex.Unlock()
-		c.On("chat", func(message string) {
-			if message == "leave" {
-				c.Leave(myChatRoom)
-				c.To(myChatRoom).Emit("chat", "Client with ID: "+c.ID()+" left from the room and cannot send or receive message to/from this room.")
-				c.Emit("chat", "You have left from the room: "+myChatRoom+" you cannot send or receive any messages from others inside that room.")
-				return
-			}
-		})
-		c.OnDisconnect(func() {
-			mutex.Lock()
-			delete(Conn, c)
-			mutex.Unlock()
-			fmt.Printf("\nConnection with ID: %s has been disconnected!\n", c.ID())
-		})
-	})
-
-	var delay = 1 * time.Second
-	go func() {
-		i := 0
-		for {
-			mutex.Lock()
-			broadcast(Conn, fmt.Sprintf("aaaa %d\n", i))
-			mutex.Unlock()
-			time.Sleep(delay)
-			i++
-		}
-	}()
-
-	go func() {
-		i := 0
-		for range time.Tick(1 * time.Second) { //another way to get clock signal
-			mutex.Lock()
-			broadcast(Conn, fmt.Sprintf("aaaa2 %d\n", i))
-			mutex.Unlock()
-			time.Sleep(delay)
-			i++
-		}
-	}()
-
-	app.Run(iris.Addr(":8080"))
-}
-
-func broadcast(Conn map[websocket.Connection]bool, message string) {
-	for k := range Conn {
-		k.To("room1").Emit("chat", message)
-	}
-}
diff --git a/_examples/websocket/connectionlist/static/js/chat.js b/_examples/websocket/connectionlist/static/js/chat.js
deleted file mode 100644
index f9fb8d223..000000000
--- a/_examples/websocket/connectionlist/static/js/chat.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var messageTxt;
-var messages;
-
-$(function () {
-
-	messageTxt = $("#messageTxt");
-	messages = $("#messages");
-
-
-	w = new Ws("ws://" + HOST + "/my_endpoint");
-	w.OnConnect(function () {
-		console.log("Websocket connection established");
-	});
-
-	w.OnDisconnect(function () {
-		appendMessage($("

Disconnected

")); - }); - - w.On("chat", function (message) { - appendMessage($("
" + message + "
")); - }); - - $("#sendBtn").click(function () { - w.Emit("chat", messageTxt.val().toString()); - messageTxt.val(""); - }); - -}) - - -function appendMessage(messageDiv) { - var theDiv = messages[0]; - var doScroll = theDiv.scrollTop == theDiv.scrollHeight - theDiv.clientHeight; - messageDiv.appendTo(messages); - if (doScroll) { - theDiv.scrollTop = theDiv.scrollHeight - theDiv.clientHeight; - } -} diff --git a/_examples/websocket/connectionlist/static/js/vendor/jquery-2.2.3.min.js b/_examples/websocket/connectionlist/static/js/vendor/jquery-2.2.3.min.js deleted file mode 100644 index 1677970db..000000000 --- a/_examples/websocket/connectionlist/static/js/vendor/jquery-2.2.3.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.2.3 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; -}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("

ll%0$Qd`ubfkO`WKctlz;N{M>R|$cOZ~0TBJZ2BKZvI2|@e^&|dxBKc`6ZLRTa zMm3;n;hZJ{VBymoe&8Np3H&UE8rWfuG8r|m;8_lUE7=RrKj!EVkN;{y5TKnz)`FPF zSy=kxe;q?vxviq(vg*~gnThNsQTW`p`e4b;l1aqLe|83xC!*mNCk|vlb{3xHVwV30 znm=S(^HN&>T67ZVDAI3L>(&^of(YOU`aPX6PwpFWU2d1A-~RF3%AyJ|u+D>zfNAM2 zP=8|NC&wX>&En7RKR5;G8>OvzBJ%`|c32g7PR5Cae~udPLBi6jTYZoqE4P`M+10KO zAL`FxvoTCm6j&ubTxxq6`E~j~J_?NAz3L63O80YHPGDOxEKH^y#0Bi8Ivo;}{%l|P z2uXwlxm(}Q<%5D&;xW0b6tO87~u#Uh9Lb&Ry`VZ0J-9 zq)+~wQBR&yI&wkDQvkfP3o{LB(9cIJ{`U_8mB9=``VOXCB8P=763`AP8vQ%ahgko? zzkdxo&>|{ssRFgZf6RslI6*;#?YWxAIbh}e=ioqZF-#eO%IBT$^l$Lg3NEqcoHZ>z5e%JW3ROwnze1O~*H70Ru~BEFoY@&6 zcA)=brNbgH*=L2jVlI#Q_hsP`fEQGffJY54a2q0b>ZZvSy#&^o72mx$hr?rnc(+R<^eSvG0(?=+~`7Qt~cSnn1GB;(%> z>r1>4uym7DbfI(!DN+3A}LMfZMeq-1=RW%6Z& zlaoeH%X!QV%I($J6RfBYn44h;qPa{Sz16Z_3=M)Nwrlr2nl-Qmktr#;-kl#MRbL;e z)0r6ZtwrPieniOv6`$J{U^z`9+ZuUy!kZ49PtZOL!* zh#td1dh(z$7yT6>O18V_E$ha~Y)3VJ79}rS^H$$9W0>CrSLN1j|4yCS75-g_VC6I| zeUfexXZ~@+TK}Af+D@I%2SP-#gKyVWR(QDEw`=+Rg!WJ^u7iQkX31{u4m)T5&Z)97 z#8*GsItUZCk*hp47r0H9M0?9uOca7A__6mY?dbU#2nzZ6Zj!~~uh3t4p=DFxo)2{f zXQOOgW{WxB8h-reaqWny1O_4D&7Hkr9Nae%jpp4)S<~DDqgPl_ z>j>~wRK!lZvG~hwZ1tS02|dYbmzUetjMqVSmGgKD_X5hFl6@V>+~7K8!fiX{x~1J% zA5W3uBXYZdxMmx?9R_2=hkmhEq?dHD7 z^*tMC*^F?wCsQOeDWrHH#*r16vOn-+i`w?87MF+f`pY&=Mj-di@s-4^j+Z3YSS39~ z2Im36h`FjBhIbDd`4;Vk8C}A2KWmrX7ankw6V_;1VgV#v=OaaF(tO&a0oJh;9B{e> zvppcQvydI9+bUgqog@obe3E2&wqJ ze$@b8?>aI9k@F|DM$dY;z zR_CMMGcU+8D%pVQ-d3r6iw+^)JG}OvGp>1VxyP|NjLw@)w4oBAIz4$-hIko@`O9%KHSk6}2bQSLEeo>`#B%?gRgJ?mtRmqUX z^`#T}zc>`X7wF zcQ~AH*YBM~f&>{NLG+Lyf)PY#M1mAGLi8c(M33GEL3AQ|8@)vDJvyU~PV}gw_cqL! zefd52eLv6M@7~Ap{ypWm=DN-~&$Yhmv%ZVClyE)**_obHm>&?QTEWQhnT~14tTQ&S z)W(Rcslwr)Oe!RyL^b6F{o>~YW0r9TjY+?elHPWoz)Vf^i+ykM#kq0t%JA(qCGR8Y?Cx=mhdo`Z($~uupleu)JMXlmwLnlrNujZ5;5V{`WXKvg&zk^*xu4f zQ)?I|j%XyZ)M80%$D76xwbI>klk#*U`FrS_^A*fKkx5^%a4^v#HXjm@(gFuO(+(kn zKhZ>R{@;I!wx6(7%{o;wO9fENWmLl zU;p=AQy55iVJ^7;@=i7(h)%H2vQn+FvF3Bf9U;I`VfoW3KVU_26(_weZ~1Tru-w5_ zS1st-p3HCmwVu9<{vQFJE`Mp_P(mQUQ+)=CsXGU~U?*UbLfn6drnPHE@fu!Sl$$=V zo=*%e2)7fVb*R^$ofXQN3oC5qwC%2Lq=a-pny=<#md89mGI4z3YB%)nBw8TUM4RoM zJXh*$`)e*r|6w_ee;>NQHR8+?4$0-D|3`>R!vzGCH2<5nLrQgzQjApdf51cmEzv#{4>8T(uB-@zMs=+KMLi-1zFI$jK&2Tl_!!ELknnl^-3?Lr37GF_ki z&pnF^G_3w(#a1uxXtlh?T^*jVG83dwdeMdcY}zEkmd9@!+jtgQCD$?i@7>DRj9d57 zKha5{R%Ore$w?j1q6uITk-$$&;x$Ga<>MX2ylraw-ySus{L8&cUNY< z)oZavvCy(Ge*f>UqoD!vlLnwNJqz5g8DP2tuwlOk;xa~?)`gul3{z+U1&m$@iTcGzFFEP7tUbXvK&+iDe-mYdc;Y{jy)<_k1~)D<14x)=adCzXJzl(i5zzaR{r4mpQ@MkHgbNSy9Z@ZLVA~_gz+VwiN1hymu$Vv@ zeO)uvR9omY+WypkzW99@)!}F{936x3oL$|toxm;4ESoub$uNz(%HOV9Z>o6@iA);& z3{P~YXSjX{?AL`4`ax=3tQ1dD+}JP?H;|uZcV|>oFLvg|T57W(Zx#QeT(qZ-?0;Sa z_SYGpJh=*lcS}V;ENs?u`0WITdGpu3&Tx-u1%#yKp#T~*FO)M( z^xO+ zkSyW%aJ@;>j$&xXIqpdcee_i2qX5q(XabhQdls3^b?8lnC*UfmtwBqoJWgBx(3VrI z4y5e5y1J(S_fs-sWWZmKNs|@QWGic2pg=c)6Jq*~mcd~nC+x&D2|*mM4)hqNQvWdW@d@cvn?n&N~)bpWg@k9;*SEr8C{13-# z=?lE;RZL*|gA%Jn5j!!@Ab$0LtH0irX!85_`OS)duh1cY7<8m5`=5xbkKccN_&>)5 z`R9@!aeoZD`2GiO`+qw_(*cdHBbd5g#BTM-4oLjoggG*8o5a_wQ6A0;-Nj^1?~U5w zs>A|;plg*U$vvq4uqW}tQYdoeeRASBCH}P9V2K3f;aFuS)EDmQL}J|9@f@`<8Qw<)ce9wf`9ZQZw2$iSqLM)|m2fC{aYdPbSlHcL!i={jvUiJguy z8C^uw`HFUIES4aaA-LvBrR)hGIL(#lg;JQw!kw#xhQ)U@r@>GRvj0PdilixD(x~oN zT&e=1vX9@Epmi&bLgjn3fLOy`AL%~-70n3MrE8a0a3sBE&#~43#b#*H%F8bAVY$dY#TFkuk-~8R|&#BJz@$(E~6q4P>d;W2OJ5t}l;sw&2?A$9yQx zd%X9{gis_4#5aVV!QcD*G1<+$mG?=Bjy7c(gxdrw<8ihjcHt8AB$HC^XRVBI(Z#hI z9#+Op*mU;<5n}?6bLLp247}v5pH%{ddPZAtL(2Fdj?ki#lG9fy#s1dAX!}6b@s&86X*NXC`s(ys|_;KiAfVS*)h7> zkbrH&x%sw#eFoZ7piK6t+CzQ*Yl>JkI<9|bN|U;tS_u1Gw9^wl{XCn7e~c!Mr@vy| zrssJRZhchn#pDhJV&KU9WMLTfP{N=cW8PUG6b7Dm5M<_Lh;ig4O!{lEp_?T>I*!Dv!^v$=s#i8iEmIM zOA`AMA`@Z$*0aL%VGF}^x#i$(EhfY%VEI7yah%SDq!{x^U{$kjQWJQE!}*H`c6aNuc@l(V@-dnRX~q_#kSNpZxKPfHw2mrSY#mLxemzv;0f#l*;$4`+qvj!-!NApR zJ`+q_C4c{5*oF0Zid$zb*!@qfXRTSU>9q$<){@qz#YA&Atm<_g31oaCPGk`{(jW`Y z8z@gZMS|BfTz9$pBuRzWACun=8`1o0smp)0c)Yj9=?-yTXRnC-?P>-b=C|jW(ZH(D z%z`+C;jt!7-kz(YqW8R@#lOp&o&-chtIJ?I7CE^?dzLjt8PO?Jpn`3h>8*0bx6$H> zCb|zgSx@(KEFWN6L|>C@?tV4}^;k1wFTSm+azE?T3NE z{}PQ)Z};*baqC+#&;ZI_r}p?1b_$2MbF*U$Ekx_&wbU*UdFKqLpb>y0UG@j`{AP??&PMw#u2V}(GUh(p8(1H z&`a9YM*cNL#NJxJe(CkI>@5uiJU2M*zycE?>IJi-;%Su^G0ZE2ek!ViG{$@lf8R?Y zo4~Z!G{$Y$k(o!YjfzuT8#OqHR9{JD8eCt@q4@%Pc-e>)&IJt3v^|D#h zzJ2{P4RQM^9SF93Y+HaZ*Jfyhp z+1_|4u;Nsj3GpR)J`^pz@Z24qj<#*@8C|4q1&bE#T9_ zEr`whuZxZe?P*!(zAwe3GROW*F%AFxPqJ5HIW@HZPEeebeY2M%M^wnsgN&h)7#q;J zWMh^gMUot}?ck1qd^zpW;d>3o+tfI+%~Lzj2JO_ZynXH|A0RUatP_}#Wmdu_`dmihSRwhlheq$`2t%d{Q2!_Jkea-)-ScF;<=ISaj`Lp zs;y5$ySh-JC!+p#-gvr+LMON15{xom=YWiU*5Yj(n^bG#uEgkX938tH3!7@ZZeghg z-l!7P(U%Q~y9R;NKT|+$|AK~LtaOXgFd3$pc;(HZE&zZOPzGh_@7|lz( z{%fVXY(1G;i3;C1Muo@p!^3<$lPacQKkcTs$?+%MW!57F;QLQ7k`&`UurUg@#f-UT;w92JVuv`rVB*nnS_)Y57WjrHVF!s zyZQQPB_g)bPgA5Jqdnk7RTYW22}G1aFrR}9mH0IH6U>sKB8%oe+cA>T1!2T1*tGA|nG$*lfG z&j(##Vi!$}X#Q_6afpWaMa;=4Kg?&FZ~upk*pcl42PZY`*oYR6lM?Q>GZ6lT<^r=) zsZ{@zr2?zxXzH$N=e*F8Q=xMHrN&0D>G4|@rym6q8ex`rLk%g8WOpHSD2Z4hY84>I z5gjyCW{DF(STfbpaxeGVetz;_QDH0Wk%DJ&|2;1WV;)G}%l^aLegGe<@lw{YW`m3S z8pk$l`v*HOc0{D0WlV=0Mv{QRGN|NPPBzD%K*l{c0+NWpJdb?Sm;WL!q9)eskAK#p zYSX#y5go^hY*x!-vJw;vNtE9{{eM73&i^i7%pEa$6F0^P6E& zH2PB&F*ZSOG`9-f)d@NzsOL+J<&rxiUuvmmm?7(L&E3={it3C(DU7F1Ce^S8p z6I!xYh7I7)SM%}q)1)?vK>HUQ=*IBD4DOGuxR47)$<=#~eN~mEHz*0x*I$YBW?Aq_ zcOA~nvCxv33OR3KYF;E~7@w$3gyDWQ_4ue|;^uErF62lk4bpww(34p7nWG@0I> zBwX*;=cT`Cih1PA`)Jfp8VqZ_CZUuh`{s4XVTa99dv*In!kd@a5&vKBhL}Z*5nKlZ z@T!XT-=DR(7~}P?8!x6sKINpQ_dHp5uIG$`JzM%a;nV(GbLP6`&GaWOgEti^GgF5| zgKT_ZiL(Fff>D-2k^RtV50V$#GYnef88(_ve@~4|`x;EHXfy;Hzms z2@Lm;-?qT65;cDQ!h`A?@s9zCx~h4kj-Jc%^@yxT=8q-e$UJyVNYaGcxR{_)q+o27 zW5ybY?5VXB?oQJ6Zw}ucI-fyrKO?bzgR5?O)DWSRC^%8b5ND!#UrCchE|%iCblGr^ zne0E0f4Q`DEJcEVT5+EHfM8nV@hE?CK>^c2s-cqq=uQirHQ@$<0_*-DM~o>2G1j>q zGfpBn_!*+Ez7R{A#-Sv51IW$9r?JTU>Eymbg!f2efZ5#zKcHuvMV`M!=)|c4&t>3U zob$#{6RDIx#+ts=JIwJ}B361vrGgxoN%?w9-s3yp_FD<#kz%<-6^L(K7CF^BLIOzk z%A-X;*lV%7a50o4&4h1s%S@sv)x-#!#>FxKT$KEN{*rz3m0m!!hQ|50iImn)&|5m_ zwa46DhHQ+{Erdf?8v~+X0u+_D2ULFTMGHBor8KkUV++I0Sk0c9@t2e(!aqVq1v0`| zlF}X+JV;Peih=#}TrW8fS+Z5lGB5Wwc_D~?Kd^YhbxWFKFiYvK&;|*YfXDS8bqRIt z*5ICI5=xp}QI5i`gj+&*oTgp+;Tq?23iH>JVWofuOf} z=u1`yk5*go{LuDZQ1XoKeC?CTrJ3KKz@Y^XEou3Ak6kvmW$XR%<}yc#o21zvK0RtUW!}GM9fx!JKT6FQ@SwS0LKSa)Ji=8YWX;^>=NFn@VMZt(iw3ffB~>;A4ezAGOz>Tk=;|Lb zum>NMko@3*DXHdh_GhmWm<|f^1LWL*$w4l3TiR@6OaA1dDscZO2Sco>Z?a3zr-Wz? zihz$Us*QA|eCCAhFI;#F#j{>E$P?7mhZ-y=oE{trlnl6ud0wOu7gk+5QeVq+T79&3?NvlkfwtySS z$AIm?Ul@514z`_Y4k}?4{tK+<)mLzqrZY>ahftkd=l6ezmUde3NOv%$42kEz7<3CKSt)n%W& z(SkYo;J}C~O5z#hSZeN9b-3zB9%04#ksXE0*UDW!HFqb%pM7hP)80QG=osIECkSPP zmDwzhow^9LfgZuO*^E|*NPIM>2{3e?W2&ds&(wOY)EUOVtl=XD;#=v*L0DPr(ZpzG zh|2gIWZ91a8acoBYG>pS&86@>;K=x@Br%`MQSZ2|C1ltc(pAb$7!Jfg09jpvS$YN- z_Zn9qX8Yp#0d!7|U6btw)Y+uJy?ER1d==Jp^1`&elNBsFSE$$U`S7_Uf)B8bvp{r` zCRO*gxYaN*+NHUT)kEh87JtA7|D~&LG1lx6aLrzemL$o)7#T5hCZ!c8B>6byD6X^H z2JIz^(=#T^g3OX2Q=bZyg1^bKSPp&7SPK;=3o4v2y4<7VFW~fAH`BPqfZzY3t|yRQ z)y%gaK;G?9_PUKLXgGcBeg~z`b5RDt{(xWn4Ve64ed;VV75MX^hmbQS_NR%aBAro? zxgXQdlOWNh@`(QOA{I$5M3-vP#K4^bU#1{^=C{b1@z<}K_fovgn$JBmBN&i;NM?n% z+F=p%G#X!vOCseo(!HI(rtm6Fm>UxU@?GzP^(6J8JtmhytSQQuakF6xUX)Y5iJoi_ z*X#tzC^s?3*)W{GtPw}jbw#R=T071pr7)3GQ&e*OwuNh{IQfnY+fadI;MaPpA-|bE zJyD{{y0tvEB7=EUz$D`MC!*4RTCDcv?Vz6Ql(|)ooW?&L5(gXI>1DTL!i7M_uo_uUfO%u{(?Y>u+uT5!C0M}ZS)Uq{MqD&PQJMZWI?W>pTWIHMulT@O!OMH3z9YGIHd()L5bA(vyL2f!!8 zfOnj*_d5rU7MYM_*jQxl?3oqusuq=lPu0zi}+A%1(UoQ_d3(+7x*iS=KepO6R^=-6{{bJ@inG1diouU*`E{xJt`- z;joYpIIEbW$rhB>_R|ludLkg|?#Hzm+F-_1_oOhcF4FX=*vGZ+&Sw7N-S?NtvvVNF zukoPk_M$Qlwd872gDq3PHlmijv&W8&a@t=Bd3QXE(Ybfe&y0SfBnA8qKAMW^)8=`0 zv)8EL>8sWi-5y}%D!9hwaJ9C&@wm`xWAs4273 zBT4?kz=i+2*zl-b{|d+)1lWN8yzT!-ZDEb=%nS7iWxumP^phd|*Pg+1NiEjbQe6NraQQHM>i=)Sp}YpDGt5?&^EiU7&J4?PJUEu{vdn$Hztt9s6R6bE zyzyIGfA(MSOq)Ok_XYq!6DEOUfS%Br^??cYEfyCuAKDV=e$PV(r;)h`bE&Qho2-;Y zyCgTfLp<4~E$l(6_3)t29F)sxy3R8=lhr-rJh|t^nS!oeiw%4G`sK%g7>0J=iAqDQ zif=7%=GB2f&;9$mTH=eyehyF%8lx-}S>0vma|_lMTZ6RN1oZUdZPr<=c(Y^qfnT^p z{sWBf8QC-h3mLR+9PkEsLg&qmFe^?|7tAAW34cxo@IQt8{$w$ssjG>StWGnw$XdWI zT=t?a^na@vNJL3hylVI_K()nydHC}p4=R*?+mao+oU;J6iM4y55(GJfSO)^or-;*N z!CB3kcwJhlk@DBi+>nDN$~3HUm<_G=aKfYl+OehL^HtN;%7YbL0q_^oxTseV4& z)~Mvj!prI8E(*M8Z?f~Wi`9{DDL~$SD{(r)hRYT`V1ee3d?O^@=bf>VD`4d;l?gzl zGxQW~gs+y^`q+gRJML8avx@>VuDnM=7i1QHe@!inF^n7A-t4je83h}?b zZ9>6@msJL;ZUfsQY+omEh88j#ZBaU62*DTB<`A*4_lay<^8`ryFFuCY&Mb!0(;SJE zB}b6h09KzW5IVP?GP6{TpYm`!uT30Splv&aCg9tg>;A<|Jdqp0{henD8on`Jq`L{A zAX6*loT+72zcb4-=fciazc8vvJ~Ql!;T{4i)w%SB3H0HP-9; z)^a07FScCqj0-M}OvBmCrsAmQ#^PpaQwT|LSaP07|aknCJIdv0^yKt2KYl{Xblg`&p)X;t>#y z>E5CyOx+pA!1d!>k|v4gO_+h3sA5`0p!8NzW5R5WbSa8f=n5vndV6Bs&f$*{HQx_h z`&Up50-~46G1iBFb&8%teBoR-JpWolxL~&CNE>)u2rm!Lm8DOqk!f2)Lurbi%U#A& zoiT}eHMHWWyKONLe}d&L3Lb7PI^AulqUcl|Yq*xiguQrm7E*DN9?*c5qIu<6Ui@W} zw2eY<7x@SUV!s6ZFQ1C-r;Wdg zlL?WO>$uwm;gr?2;^$xCZDy1pVbhgx`fszW`CEd)yoffejMjn@q=1U2SI&4d97ZH| z`lk(r+lereyX~w_6Yk~NDttH{xko#Xhar2LUtCH6PM(Y2?uiq~>-bB9Kf@)5IB|;a zBM`#XPhtqQ%c*1_$b`D@%bfZ{ur0d4n8d^h`3AtWLj{b{92k zudqC~zgu~4-JAJjCc}I-XM7+yjOj|0#%5ePl&AWqR;~5r&j4g^IfgOq4b>chf8451 zKGdfuM1S3^q`#3D`-4hp_Z%fRqb7%#P*Og^Nzpi8>MP|J_1F!xk5FE&q&xRa0}zSz z!@{50>89ME>^&oe6{EjrYk6lhs`@4FrFUf~pGw(tdb*gq&yiK$?E{o)^VeqN?vMtY zFd9{WY2kFHC1`DSSoL?!UeIw>go-D5M%&q$53D@&AE%{EH8ke><@YN$a;43KG0&K6 zC$z0NxM;TQQSXh2xXo5r<$|{P@C{E&q8b2)2VambUM%f8?u zFlJ!445k)CX})g(*S~Xb#H>JPAHP}Iu$<$Aud2@7`XE;lbB}7sQDWifDQCS*)GtWm zar7m;S*`SkS%n3lfl-WS$m}b3f=0*WnEuYZ^zT6HcjymrG-4VApOKnsAxK9k zO}F1_!9OQ@(DP$mhn0f)EY&Ic*C0}QkbDa*qsm0s{%eTWrPmlp#zs#M|7iQ6ft$)} z6?p31gH1hz0{r~zw&!Ho!|w#>34@tP8w$xVzlEDUJjX)&^w~06@DfWgla)w8vCxW| zb`_;XC2X%9ZY9)4ErjgvN#c^Jk){{U)z2>2+GfWPI&+ZJQ1LEb&Kn&8S0~a;{28lM z)?=lKrG^Sm$uhNrvzfK&zgvnKjTxwIh9^7OSxw9)yJb6um&s4DP7(uH@c;&fu4X@L z+lBhV)G8&sWiKv&Od!4aFfDu2eg&5Vc-*;<`(akNaV$wbWco1v4Guqzj?nV1HJ zT|#Qpm0n-8?M~EQu~(QeruM2ad}aE)#PFZf-~M&go=eMXNzcW?9E#Kfi#^M*$hS4{ zbJI)7DOsu4N3Z_?$@<7h6TEdB?=8gU_JskM#J29ZnLGuaX=LjB?T%bK;|EDl;COof z#h+(5$jXKGn3ZaiKFE17M{2Wn#>;@Jxv0Vl8I#IdNIc-wB~-I_&2N@K<-MR4aG#za zY>=qLO8LB7K`|$G&d_$0@XHeU$|75p!Ek`VFP%ohndJ+fciMS<54|fwruWCY=bIb0 zEwDSB)}EH;@9VtmJTg&(LyK@W(W z;f_=O)5kdC0V!#JfmJ zNA)Z#7oKXx8}Z#PXNL)tmnyI2yH8$*96f7FRuXAW@a5B^8gA=(;(JW6T$v9@ier0y zhKd`(a@aQ#+LhY_=H)>Lk6Q;0wDe9!M%W9(5^Vco#vv{a4jCE^aVeYYz}km%BvNT^ zXRjD6cD`|Y9xJDUPs{zy@k#}LEtpmBF>}npH=?E}H@#y{NN^rC|57)HK4iX1CBSd;(gIIBIB(aSt=&U=WLJ2+U+ecE6ymX%|ytGxc!b%Psq# z1*+0S{$Y0wsufGgqKX@`h>mRL&Dx)=o1GOPVffwG*qCf028_#|IXboZYt<8F+T#d*cr{-=6 zlFX^|3op%yXY?J#{!owUFT2`U?Tg3`+{)(?K#mB3u0%M)s%jRzE1iRT>!AzzJSo<) z**oCt-!vRil8iD~MF=S7fm-1dXO^=gp~zR|`g>mtn#UrcWm5%wE5Em< z9nzn~C{|+!zf#byI|^vYu!``uzMJQY0cq+J zFDJzVIYI)yAU%SY6w@<0Uf*m7x&!OcDf1snT5sgjtv~Kyz=*NSvtzddtoE+MnGAEaKTA_ z*G2V@;$S@S{P1EPkG;-|CK_>8%e|k1gWW#%ljZ8V5sI1A(`tn0g`KV4bQ%zZty<0_ zKYfM72TCx4M~k;M1rYtsUQd|>OTI*TbJYvt{H|nbp7;5^0H{K!O{a+*8)fV*dQ(%tb%x;r!B-D> zmCRWLzFg|D(vxHzAx17R<@u&<*YrgK6>LB537^qW!R0F|<4um6q}iPC3dw7`;|qYdq4kp)yRW^8CIRAzknL z0Ham>;MdXzXC4(S9QDgt^OxCzg2iM?rOusSqsz2cB{kP|l-xd8&o{*@6RCjCM`F_~ z5See2D2X!_^L297v}UQS0DOENBcdKm-h zm=#d3s>NTnejBEO6I)L=*aHrK>g3SIjOm33Vrq4A8O%mydJE6O#hE85weRhepcR4Q z!mj*D6tdN3!pZ9GNzK}2L9f|JW1>t3lm0`qAki3Nih_=zf?~e}-up!=p9iJRMzmm9 zO?;lpCVO^WiDTgJCo3ZM_KkYxxf-n5d1}|mD(5GSa7nHODFOIARZvI?!8`Q8DFH*h z>v&KvD|geNNLplTDyOfz50m^LOHzT1s_`9i-Wt=O5$yXiqH~kmf;0@bTGxxA8V?d# z+NZQTPr<#O<T~kiZ@)i`91t zYDkjJIDS<=MM-!$gZ{?<#Us@+|MqpZ4ei-3yFDdDrOuxss*YD2t~QK5`Q%f+t~uGZ zySK%T$pnANjT9`<0tJ;16GMuoSvi4%nwVc)E|%&KX}2N1zL>P3iW29{c|&EQ2&LZh z%3Qqis9sbW2jmBle6FeM##VWL6Z6u;c3myu0=QIW#d)aPQVyqd+zQc6fut-$&7h69 zC8Et-_>JqH55`t}{hrPy$tBRrz;3CBmwmjx_(^@bU94o^F)vUAsC3f=1Fyj|$_6;ChvrsYGUS0@#F2sRS`_2cH9?Kb? z@!qC_L+R~iR$+aY)X{BV5&kFV0pKQZnflGw;^Wdc@r=Z=#!_At#T-jY*&6&~qS%B3 ziFxfZ%%wYx->-?r9^-s(JxV_al zSxUfSiE3(VyZC&z?PU4|+z09lIle2$&Z%P&|FYPF?5AITyeLea@#FGVHO$TAGs>g4 zRh#wZ4L3rRP+GN620eQL(z78!E!?4w3vNT+sFIWM>eU-`&KH8-DM9-_ZqfjvV+~t! zb?ldssyz88`ecvsTC{HSAc5vghGgqtBAxO>5?eX;`4lVt0p|HL)hBz;7!vYSWi4z3 zs>ZjB0?o(0(Mz{s1Vif5!s}aSBiy!{1f}GQKPpq#XeKL%?uSjKPKBF8!YJPGT&h6l zD$8JZo7{5+1NaOwbGNiawQ3hG=g(m7eH=gcb%`dsBTl|}Y1q}ItaF6nJ z9UZ?{fmLvi?w`={IgX!aI@%=aq4}KE@dDnW6hmeF2tq!;tbl(d4p02f6kv{6iB(wS zD@NQLj#{4!cvgRlhQPTPxe)H;lkTkF`F@}p2G7Uvo$DQy%TM944=CT}%TB8S z-Fjr7DtDo;$FNdyCDM<#x#p=?-qP_;!-M_vjO!WJ02`KmHp%wpDWA6QWOmw?(Z%2* zjnY^dkS2 z(Rz1tbIR%&)c!} z$j^UEe^J3yxk!DlWy|u)#NCQ{Q9~&m)sp?v;oykiS);wkvl08zR)tJ5 zu639$L53y4FI$9q&}t;9R6Z*8->tBKHr$g6L%pKE{eQ^B|Kkn5|4(D(A?Y)z&QGXO z|66qrC2Kn5l+VC`$Y(Eh<JjtsBR>HjTlR%!RZy$7Lk{`FY-oM?k;*#R?%hOhjZ-2pyhR3p)+qA49aRff=tb@!_1L&BDt0SZ>c=Cys7hVJHS zdSGgY${x|m0me+yq&HaQM4V7Fe@bTqEegoIn4sG;<{%}+K#Lsc9Jys*1w?I-e) zIdtAL!LB#90xqTGPPyCOWc_lC3>U1ZUyMuAKCJH?abe!fl|464KhE6>QUrXW*35?c z265GCTM$4@MUR=^?Z-5VRN||m4I7@E15EFd+MK%`Bl<%1TdUA}`la|rnA4hngYz}F zFx~KSXO1PJu3&$Y773hb98($x<2C$L#Sb4@F{l2OZtr^ntlT|+{Y&NbN)K^0#3QW` z^_y_eA<6Vs{?`=o0C3OT2J|>u0v~@Oe%Qo>mW?yT)sz`ViQ$t5@o@2DMH{PirJn@1 z;qVr}{TrKzjYD(c!oC3_*aU#r@xks=byn1rUQ9X0FmbtS6l1YD`<`M#4PYOrnEH6Q zB)qXxt^0kF`8sUE-=OrYWC;fIX2J?o3-e(OVaUV3muV>gAnW%cgg}QTHjQaZt8E}s zZIjoq?flYqCC4ES-G&zOX%L57nE6hM_)5F#!U1whmJn;9-GHTz)o1+16IVh}Qog4z1WVdFr z6;KkY<~d%@y@yZx49ShS4d%0@)`A`M*6Fx=dC6UYWG_Zyr!C8gE0;sPm~272-7u6%u9VF(-$vQ!XU z-%K$Mm3UGtZP=~0BO-{>XP7Qky>%S?L!xOzxBMMH+GTjQmU%n7)RS>M0;FsMJtf zD{Mc6!J?@_0?t6wu=uh6Qei^TA2Y2zs;SmbH$!(K!;uE1M~j-vFoY%iuahR^PwD`n zcZrb!<~n#FZNKuaWHJxjKRHb8RP5BrO+-lSHh9Fm(NohsL};%eaNr#)t;0CY;UU-b z)*&61a{it+R>S=q^CTq4M)W4yW8KgLb1T+_!Dd~=;}}UHCw4kZa)H$!;f|Ay@=Jl{ zje_h?Zrjn$SPwJqJ0h6+4kCs1-^Fy?LRAw!VX*#PdMO%G!vjPqXU802SToG6HD<$o z!vW%v8^Edlp2o&$9BaIiJ|tQoUt3xhx`dHqq`R2pB5f7#_H5b`%)fhKu}%AodYL2} zr8Q|WK3Xdt)N_l$jgamP7(X`;_ixJ8nQeFYoiB%*K2>nDKBfmNyZ08@nw^55>KYJ>Y~zy$~2>x4uDEJHE}(pFzKuQcw~Q9 zBq2<}l_H0r1<*PJ1C7tAU0^Nv^h>{a@B)2OCHskcw&8_p8LsL@!{v5m-A3QkaSZz_ z$X}%E24~au$)SWX0f|2JrobbJ(tRbL!?&hQ3^(A^#|Ay4D*espW~2Q2s{6ekJ}UiG z_w_c+eCQEce96qCZM=9LAW|r1(A3q!r@xK&akY|Mi3=LM7T{KK%_j;~#m9a~s}$^B z317EuSAOrK;w`E%1LJd7C%5-A{D*AU`4+9gO-^1V> zK2YyZS@PlncNjdOe@W+SUg?PsKF?gpXZbn)ihnpg;CKLO-Lp26q-NfQ^XBkT6@3(w z1K4OzLJ4~_93=r#+B#HBSd&1HX>o$q?4Z$s1?L^#^87uh9o(v#t$I)|m*jS-iT($6 z?F=zYa@$%si+hRe*MJYe_&l96-UlLSrJP?DIH{z`T6;$vN|_&4 zahH`0`!!bGF?bK>l`*o8jp@P-tSC6TKYSO{wQt34H>H`L8Lg=aRU zwEcTc9rpT>CFN(zJS%lRBm!a4LKob>gMo#CRsLQe$|)Z#0HJDenHliK3t+ts5^M-E zbI6FH>b)aWC_a~a_zTRhFZEMgwA_it8@a9*!c^9wtKC1!wr8axW2s~u?ti6M*dipTOT=5P-@mf*(qenzv(o=0uBk=`7aYsvOdEF%ZA}1Mnh{Nu#kTWj!Y9P#$h2^_F(&R(VWw9XOw{C$E?2TbZTSvx^23 z2W#VGaVfo2-7kc`84nz4yRIJi&%M=--8a-N%!q2&6O(Wu+GIlOhFq>vHdgxMIQwc* zMl<*R3P%5UN$cvKVFj|5YMy{4Asy3TfecFIN1|YMdTWP#Dbp|%rL9%+?>y_}U>f{z zqaxLyH)s7_(v`!`{EGwgF|7W66cGclXfdhO_QS$^o6alMuGc(E)(~C4JW8s7y&;vN3Aly{!J05QnN{3ZQBzyt3GbfPvyVi zcl21d4Xf>-uf_(sAMr^pf+{mKMLkpZnZY&xfX}U=3&;m9J=F)CJ&}c+iL#TfxnsuV z5t54K2g~~U9-0s)>WFA6;|&hPgzEIC6&FdJaG=eVY$T;qCwseyx@lMGVOoK*2?uM` zqn-~E%r(BoRYQ{U`BJ0hfH6uj!U#WGeH{1;D1jzJ1sQ`j{8`rOCvmoF=j~_vlR1%0 z4qi>wvpkKUZwz2_^4_z4I0-d?4i%d4P6_z%DNG6)4D^ufJLnf~TODYHOLAkb&Ys0YT8SpLXM#|h0VKe;5bIq!oJz@m-@sKlA^J{o z!CL=;n#aCT*bz60b@=-7;6mE-6!>VfgISLh#waLvMaT{|9v&(cx87%Kz39f=nEB2> zOyDthFf(IkNGK6hkFTBx3{BUzlC(Dzew&gQgj~ ztLUd2JKn85WR~2=rv<7@|BJV`4vV^b`?XaRP+AluhfpyK@_B=dx)Vs24gx$+iR_BU7zzT^iuO7mt}bz zXI5spN4@V}EG=7$x+3EJ(L)X^p#3a945VH|Bd@Oh>|y8eVEVF|G<>?jx-INsPvNT~ zVaqHzxS;giS4C1!Vk_dG%{IX;-)+g{&NdO(-en1wqF!-&8bUHj$`uG zuPs0;s_oRim~wcEer9**UM@*<=)mld6-!vFkigW9VpZ!`tA&XgXPQweCLBCkG1u*A zT-$s7Q{O^(UJIC{()AUQqb-jezf1Rip&YI+3=#W`plEAvuF{O*vwv|HEUnoy>8-|x zos^dEo+hJ32zMPld}blfqW;u&b7-i`d416*yqf~-^F<6A5!Q0}iX}O}h*+h*c>7aZ zQnmhZ!&(BI&x~=3azTSMzLaJTNkhyh4vPKVs>^R#jbGH3kV%ar2ZOU*^R z2(G)`A{AS~r+D@~e^(ikr+n#@TW`pRl6f3g?REXR1fdGk>!Bn!^s=y;%+q`#2R!DX z*vA*B1e8}RmLA+y3jF-Y^u6DA{x#8c$KmJ!q%UQ-k|WZC@m-GPfQ9yjRzHf%!)+j} zth*nOYRjgWdBuHry-8A5-Y1E=OO({K|Mk~+Ws(RF3%!9Cq1gL}&-3qZU&nMlORP2v z3*RB%Mr=Vg?AD}7TGFn57g21uX2miSf3q*BiSmGyBqZ)@N*i*BTTy?X;clh;{+nbxMi*YEU1&M0dKDv!;HPQ6u8r ztp@8OOVy_?B9r%7%=~1asSNKx?o_hj?fNQ;0a4ZZc|IuJ?OIMt``m-Rf#&b-2$HQQ z<+>N<6Sy})x&G$(5)XpND_=~ou%_TV_E zb-a#XYz>c94u>#pVWaCD7EJEt160DK7~EBk2o`!fp;H`^$j_=jgRZM7TpSoM{T>!1 zkEx}zt!WV1F;Nv4@Z&4ol8SPC;oiWFrjcT83R!W#9q`dJ7I%gN(m}h`9FJk=fF17E z)9cH<WuwjNU!j;BSXo(A-q0S#Z*rhLJcX%7DJ z%#qgw@qfhw04U+}rqIv|S4OXMs;se0suxRBEC-%K=fCg!ULQ3abWZnH)fOZ+=B5i` zpD8n8_i{T7c=N4;_iRY&FAL8lX|$SEUzYD#_Hx;Id4bnTdpdZpL(4(AYbxas^0&pZ z_+fg}kjXAXC55UcZB5H(Pz2K!y|Sb2$BX5Qx)zv(xX#_#8;{O~?92D3ko5@s4qyCi zk@T0=fzaM({P_Ph5!gwh;-?t24MEhpSyG<234Dwkik>jlER>DxH4X2`2L)H+gyoOQ^13b3xrBCQs99=HfF z)IcM5H~alfh?>5scBS&WK7tlSnV2r^m$PW6LUJ}szJHge@X;aMkJKQbVM4rVAx?ir z0`JUZ!Lo@4fomk2!(Tt{Iwb?z@ig+o@tkGc2FUSn6XaA1D5#|9IN5lSf3Tks?9$tm zKr{KRU$!<-7b-t+a4R}T5}C{6x)bfCABbxQKyesLz}A3irG~0fT~+?mmH{~ zc>Lh_nsw;k-&(Y2l*1gy<`SutIxF4)Ylv>M_cMLqd|Yb{)%F_MGE*@raYHspaE5pEP|cLxD(J2r-0T)v?|GiBkYTAh zKvn61Jb&_A0o5!!SkPC!;((&t`m?$Zw|?p{-Me-C;N|hxo* z(fdtYKhjdNk~7j}y@q~&14Q|&zEEQOw1b#k&GR{x%o)R2vf^(KtnS%`;K#hNOS+m9 zKdP=y*6+!q3hMf++E`uIU84})A`Saq$sEBZ$=;^e6Igt65C-1u0}EoosrzXb?;m)> z8t;6^HX6?U+13Z!;)USjlUHJqclu4bBzyruGf5{U%`#KvwIR_$wq<7h=NzpI~cue>O#|)McDF z!ALw>{aIGUOUQbg_uAnM|1?6o3W1E6MR1vZ`oT6tT(-d5Hv*?sPOaNzMuGM(wB{uh z(Bwo6&2JW`a6fF#;tTAceVRzeRFX-@TLfA)ppVVj8J~24kG?Rg8!MgDnrz12HD~5M zZFOz`gT{bC-?aSJM-uLD#Z8+vu2Eu6si_{TA{@JgUGdwMsnwYBN@XrQt;Vx$8yfem z$5(lhq|}ceXW394--o}?3oU_M5_7wlBE17mi9}_dW$^K_V@} zl`Z;zM8)jice%_~9e43^>ALF0(W0C!|2@l#(1nk38EZL&M*3`-KKM``2dQjF|W&QQv0 zQxVBU(U;$@!P!X_*X4huZ1`p}U1z3h2i>;BiUzBbrnp;Pwk{fGXjp}k)G3g7u}Ka$ zRU5B@u8^u150?s5>|tKr@lPo2_Wd4t)$o+6gc>>&X~f3Pvy#dfHANE|LXvE|WHR5} z9Ac7OL`#w?onbn(y>~AjZ~L5YxfeWuF4+4RV_2C-U)%}OR?{w%d@0DfZ>&Mx8plBv z1;5c7%muBheSt?1#T)4_Ku2S)ZqyggQtqW+Q;A71mC&Pz^U*XIiPu*7wE_9*X!J2T zvsv1N&yB}gO_3)TwZ8ZYsfDa+>yFYhls2}92u5R<-c{Padi}m)2v%$_(39$pJOXGk z6193rE`ru7_E7CJX;8k885(lM@Zr^Nft!3xKZf@dMNFs7+d^nD$SanX2PJ^eZ+I+5 zte(=+NE0RjZFr{?#vO`1!M(XLmF!mJJl@`DNLAdEHMo<8wNjJrcn3bnhF@OGg?&8J zMb(mQ{uM9MwG)MRtG%nKb>C6)nxUm{Sk~-7`;!s3YknU^(tRbe+ezp`L2bHyj-Jgx zzCR|$>w(C%o0M#$js^|ZGkK95k-@Ih!jXKKxJMwQq~fWuQsT3+=ftYv^7TD`fOO zVp+BQjMcT#FZ=acGhfDVVhx^wv98c*ox zGXf%wTgE zIBzH8t(_)B0|0An90&{!pBMfe#PO%j&&Yr_mU!&FI3Or$>IjwzxMZX-lC)x@9&@!} zIeP;9F(G(pHOTF{KVn`pIXU^S|KRAvBj{BX_$qL`Jaq*yZaWu1k9Q(SHpXmgY+kCn z@&k?PeOXz}-z*&Iu}%{LsQHfg8USyQm(KX@c+%aSViSU$Ckc4`Kf)B?hWwop>P%lj zAb=KwLgcmsuw&X+OnO-Ds?z<<}dl`{%c%%U%~y({|o)=*xT{({+PJ zJzsksv^w$$z4-a*Uy_2(?3)OL0>oS3sQZF>ZyG=tvxUY3RHc>DZ|ap^Y7p5mjwNXH z2$qAz*_-K50Ax=Vn|mWOJ|Aze4#02l-_0fIqTnBJuo*iOK>p98HjS3~)!rYB*+GSj zn*INEM+TOXsEWv+fm8^SmYFhKTx6sl64{+B#9N|_c=+4n5$pk!)E|m)>~x8mO#A!$ z^0)j8#mBa)98t?ee+$QeE}H!hp;5Hu|2~xW_f3*^qWc#KmgjfGD)2Rf^5#E(_t!J} z+eIeGj#p2ilN^DO13=H^clXSGzq?XxVZTHlI}4qTz)&@^x?Y8X&siM!{U4PR7Po2G zw?L5L1Hta_2L}J24r>iAb7vtHiM@AY0QE;8lmqbWKgU=W2s&GVNoJ~>(QeG9!nq}g zN(J_DC%yrDWx$yuIHX&AM{)aig}`8MuQ3udzjB1t%7xL%sU_3U1In^Gkk85jkMG=E z9#7R`df51tcwOYJy4}A2kd?4Bm?3wU`U#odjL)3_VXP%EpE%{N2)a15tu_hXOCV8M zkxl5D7#qv|@>{S@wgV_RXu=R@$mp!;E*^H0XcayAf#k7se>6uuZNFa=Q^YIWGGd;_ za{RZ372M!hfc>nrov6P5RBW@6hyZ72QnG=KjZM<6`2b{QOlkRPnso|0H$Tr#D}7p# za;1co3q|tdWtM7XokJ=A#QOX#1i>>(Fx4Dqp-Uo-dr35>2^N~m9LVAIr__&Wo+joH z)`NduS=pOQ7PlR;Q(Zz4GE?UW?_cO?`TFG)lDJ?_`S4)fY^^JQlMF$<;}SSZf+opA zdnZOkatS~*X+;JVpBqg6>kz01me5p1hKa(S`__cdk;3{1(t&0d&z{8gT|IisyuB=-mqTAW!WzVliH3<$k|6}FW0-Y z6Ouf)Df3F=&9PIQE~*^sjyS zmt_gSAS`Zgfs}{+%21&z7#<9PF?LKv@-S1U&cnGRyM`c$IIHHOTz+JyF(2%cI;N9ElGkNdTw3sCoN^*My`~vAt+r59397K=WR2*4v z8~cOwt?qV*%_IzWh|0iE5O|1xK4Mf-A`VQz;7d8d1BO}J71osT;(Z$NHKdz$S*#b z)Ayr(XFVf zo=1Lf&>2*^%aUGGDT}oPDl{SVc3EL8h|nYQ>GM)E1=}v)v%$1;-d*F8D|Zo>WD5>b z&f_W176LM~%*nHgXwNYR?*k!f{~u8w628|_`~C1y4B5{{-H9E`TcWOpiFa4oVFl>= zgxmbN;J)A7dKS?YA+}%tkXU?#`Z>~Y*_^wr=I_19+yAEcCBF}nx{cgGwx)ieEy}x? zm-UC}=8QI0OWc3uB1ef9_B?TxIELer@iY)@;O0EC#KE=#PTCL-d4=&lvT}eg<+ol} zgL^yhhJ(OQmb{Mm#d#8Vl;(GS;jX9FSek_n?mlE08n? zx=3-@L9k;tG#Szj-rP@$w1t0PC6NbA9>`A)P@iCV%8^SC2yE5YfoU+-U zWpL21%o*)P{cXCFe-_Uk4AuO6s2=c(ZauB4K0I>?HO-49(Opr2%0C986Z9oR?~oIL z!e;7Dc~QgH#_4a<9IW<#?;>|&MSk?|$q0V@+)rYEo%ijbG>gNlkC$IxlV%?B*&`vS zW(-7cv#>xx@kyAqyPD5??LK&m(m79k49O8Ek&3o#X69t27WaOnkw+hoyIfzd2xHsW z8iT@xltfNL-`q0&cK)9;%C`0*u#xdJp(!gC~*6@!_c9h=kb2tn){1x7O#b5zn^=2`vmFwpsK z$^mN}?aW%)hFDeSMJ2v#!apXDw8>gLbwCAeH0HQI=xa)Pd|&hMTZEll@QIo=7f{A+ z@2Pk`Cwz*NBkkiAt0x?pCmp`?bFWKFL#c@o56HNt)8KG4!-4`b&FOx|HRvWc+|u&d z#W3?^_0Fhasf{OLAYonZ1I2Z{cmV&tCHnO!1XC~cIDweq zGz&hriqymFeM`l(i8i0r_@SCc3)TBMU%4djqLzZTLu1uRjR5yZZ?-dSZ6XQvR{gOw zMQGAsrPS7k+eMrvWFjqDvmBcalxlEb;OY|pA>Cil=6g0vc<`+3<=IR95$>$&e#AKJ zHdgaTspm8|D|%xC#j1hJYk(xe!<|2*%6Qy>wUx??6tSP%J56^(+N1hf2pbmTvM}&Os`i#d*44`s5kgJS>}k&_NZa zj-Y{zZ53aiF-5G1Q%a%@E2dzWDnRj&OaJErW|?;;2_~c2T7kxMyvV3!TwP~=CG4hp zp1oR@;scm7l&~Zz2a`$xChhDoO@)s zS&+7dB_B*L7q9+_7~i&VKlgX5buaD@Zpa`>|GPrbZSjLuyVtyWm#q)B&#rq5!TQ!J z4+_4svLhZhbDyU@1pYrS6r+r~r*&p|h*@IeMCoBXg?;Ht!OYRGS;y}6Bi+>PvRSs`NP`k9!8#q}F zQ8tVBo_r6KcvQkO_P_8OgTc7Fd=u`tDevn^Pk!v0XMyze;f0C?TwD4qaes!0SyvX@ z*j|MJ7N33$v^;J*cZV*GM`1?yT=m@@UtTr?wkv0@Ntpib)YQKFOaT3_X(5;%F1L$m z(!u$Ms-iQF>{>#_QpPr@QTrl%I6dAO0n02k%<#{-yrsTBWGk2{KTpQluVMtIIOXbE z!#^ufBPT40CaCz(hD2y`mgplvHD{Vo%7Oza!d&=zdVl>wtA-xw)o4eod%cKd0XC|#~Zq%Q`-L&d(zK=A-q7V^y>sr zWv(M=Rl>Q?A8ww5JYP~5?YvV=nnz}HPGH>%ld_K6#B3YP!j?4}93OQz*zW9AuHYPO zUzSO14m~bgY60so+o-yj)GJ2XrAjK27G;hE2==EY?*?%w9obsS=A$1F(J_FeNnJ^$ zhM2eWtEK%lQ39coJ}?Qlx)RAMQ9VVXNlmN8Ph(Wfv?SYs;4WgW-7=YSiOE(O6Yo3( z*yYc=z855q`UosV1G_GR8i%5puy3wY3*#HC4_tnpY-W>Y=eXP-<5SgCWumN1c{Snj zcZV#gonCq$CE0tA%T|0pcmFj7@TWEf<&J2oGDYxp;L)oV(B`MHtv@sq@fAc)?laIGj->7=AzXPFXq5K+Lf7|G<@yK(o#tKKVsfMIvbv=#-`u2gF)3Sq`t4# zsD;>dK31dp(XA>(zCH^tUE2_x=E6v~yP^Xw$Oj$tgZG}R=*08HZ%2U&DfoH|?K}N3 z4Z;h;LVKx&F0|Qu-l;XDgT`J{5ozI)+ej5>+ia?$d%~>=_}ulVs6zuS$@RymINW8) z^}^3+xLS&5ZQOj~oqEFBA#uIvFNA_^x*PH5s8Y#QB$s91L;fJb%hE z{8|AB0Z8L()~h?#z6|Mq*Z-@`Ax(be|DsTX6M=AE8LR@8S^3DdHxW!i)db4dAGfYf zbYv{`KgYWD%Y)8oVA05D9(4vFnLM}6 zG}_5F=wNu+C2QN8L)?F866Ny8@A$WF;;VO+x+Hs zl+Tp91TZekV*3Ac`~|h&H9Ma%FzVh0j;68io&NxYxRr4 zT0L#~_$@M`PvX5zqGNmH!P-q5tPbk{{UBDhkSzd?XImXL>5>9osw-kl&&SQ z8-JvzuFJ+)$iZ21^0b%6Z^fjJp+J`oS>-Pw#iN_cXNJ9bQG|RGFm8#>q@`lk14fz^ zv|08)lwt}Dj@~)C4le67bbW+L?xl9E>D|#a5>H^;nVWTx`07|+@uSLMybq7Tmazb{OgYstN$N5`$o67pIg10u(As0W z2e#ySlNCDHc6%RDk$V&BD6_e#V{5 zgRO`(1pe42jbg_YNalfhf$p^2l;f3mO|paX5(=RLWEE6QA^W+~UiZ0*`aP~iuN zgE?I>R_)s_>seYpDqShLZa(uxQhehBCMDTHv4k_A=fyYfmss<_!Sl>5Q41ux1J|F? z836Y3ZVDf3bJ6x#q*iS_J5P9E00kBme>N@E4p$~_a^SR4c660` zW`aSD>#&Qfn@ZkIIkD)-A2z2Sr}4^W`xxZRKDsAN!nDmM+DLb}XDS4CX5e&jcebWY zP#A~kcnCKotp1aauD?4sx%na$P)|e@%tv(qK!ZDs59?^JWz<=sO*z|6C8Ny}7pq)^ zq(o8X0Y=KryM6qRzTHp@qKRx{EjYYF!%g$}Qf)j-Wzg2W6yw8XR58Io1F~b5i~!Li zkr*`ps78`EfBB;#{0EtW8#hlwAnG|F_ODKA+0>|94mU@$hpz}g&E|vdz=}#LwhQV} z_7p>m5m}(i_pRq$vapPFkGE6xkmgx;qaxwTUH;-nVkFqgb5RcX^t(5yx=L62;Hq}w z(^w3%V6KY5K4Dr-&a-fZXD*XIi-<*LarJPhk>Jw#&sYXB?m+l zlTAQ+mVY!-cZ^Vgm8Q+6v>ocU?U@%GX4TAwCYMuRD8#f?^*X0%LwUD5SmLM3w92gM zB|Tq?d-r82cIG<^FIC>YWcGr-zg8a~hlZl27ZJA?=Q{cO5gt>^yhxpBV2%5UEnRaN8NBS25SABM@;)X~kPOH9LvzcpQ;oRU!;D9fe2^#Hy0jbV zd$QAtYD0|mD{Whd!XuKfgF8JV@XANqoUiysm~c1LP?r)ks}oHl<`cymXv`f8LMrU) zdaJB9!UJedQxY=+=K=<_Ios@yu=V=fYWwag3BdA_iWASzWw)BdmMQMcW;ZO1w@pp> zys24+p>PEY@gomXI9R>$CFo12=s0z=ym0S55}nY;mhN{uIEbunVC6jGACUQ(Px~~_ zP<6G>1<_jJ%8&du`2>F=*?*LR6b0|KVMh`8-PodURC4oQxjK=+p|Ay-|0?zGG>fhV zXY^-Z-%%`Rg|egjiQDF;sNm7eq~CH{+~O#jY4jzZ=0-KwK8fRFEqaqlF7QxQn|jCq zuWJAtABPb;pyjf@46v_kZ`?>8pE@1&*p0pJSXgq!ySON#vD41L5F|v5;OAO;mql|( zJ?jU=U>;~2Uf$eK8P`DovJWYmm%FnqqXm7uA1TRJo<6TxDSI!&($|1`W9<@7)5*qw zWq^Bo`N1~p9QZK-O+N30Ci)J?KREsAVBYumRizpO~hW;Aucx;%-Ch~cD(`TV2c?lrBy90nbr zAn<)}zufHBg;aZ5KWgq5Q7^lHik5czD;H6C6$diZc;n5-y>+;+&NrR#qcj_Q$45*r zx6&S4%-DV^y5;l<(Q>D+G|2YGqvz8)vLodzoVu{#=Ca155Z|W~Fp|^Pc6f=%47fix zAE9PX3K7MWzVNHgtL$p7fN|uzB+ZSxh#?v}jh7{|5e+BFcxahyrVntVuf8lhQWWfD z+al?Sl}!83`%FWoUWPlP63#!sZ5#1Dw|t1DHJ?-Kd$(g#C+eS}=c>Z%YUv(lS>nRm z*Gn&&^V-5!SdIaJCf(6{L9H_C@Oh{-Gsd@Qs|Jo@)Lk)1dlsZMd6ow!4b>dUx^=th z6jqen_q5TKl&q8rR?dS8-@Avny22GEStigS-as>1$tv~AvVAYpQ(YX5Zsszbhzb&K z&ukr?YIA@G%}3>20QrhR!lU%TduukqODWY3N%mSvi`t6m`w(zsbe>{w%c={4UCYV+ zpa{E0WNCEDr1$(ub~#|B`Xf`fY`h)D!`{PPvi#uY4y@)IzD)Gf3w#6tT!u$`PK#20?$A^)>0ZlLS#41Af8L3_{sxWjK;Uu%$k>U z7MFOfydE~@QYp))-$q1e3=tR8_Radvc1yB=ru|bX6Of>QCt8~_Dr<~*8F>Vex(LoN zZSTRc<2RI9Kr8IDQwQO__mO-)uhnJ3*6q+2E$}=UWv<1OB~@#j7;f?Qne8$lTDjAa z73Nji1`5B`u=OfJw=j0oo1TQC>0St9buTuDHELw(qEE%EsIr*Z`@maBWJ!H4_92^= zIsBR=PieS8e-u?>S{kcaU-*Qw-y$=Tku-Gq z#WkI~VVh%I+gWxF@t{HY-a8>^7SETS8|fY|Ww;{)ZHjo4?q=v3I^V~R?OAqY&VA9! zM;zVrXUKi*`CVF1&fvB+Jz>H5>vabAX>!XMWzOosG18v~>OP_xOxN-a`pwxvstuqL zG2TDs2{i;Q#u9nttZUw~`S)+`b>?*@I|7!DmR3TcxSrxxQTElcqyW-EDthl5tfWtU zEB4(X>eCcnlNT0q_=HX0XlG@tQIV7TP)li^oS*OE)XMK_L5SSRTtOP4v2gF4B*V>9NPKYXl{O1@FG+4r!8fj z^JsrD;*phTTB^@|i;0GpDL;ewb$WHRHO%6QY2PW;E_{yb=o7NeECUIK+NT2OwfGJB zj#i+G>sDF#@z9=cbGFHCdR?+NhOeYdmSIMdlpWDSQ2F-$-$Cpz1{<$M3kr6MwwPv5 z^Q{G6Pt{7-AAH}u7Cpv1??rb ze%m5CnytW#Z=G{^R?+d!AAV4wX`-8mG3e;M$UezNY=)SnxfA<+yqd~??*yPnT6N+1`~mvCl7 z=8@J8(c!Qm%k4hioA`ifpDf3DishF(*7-l!$#+gN^+oR@N}|1=^`Eysf@Qo;pSSDS zct=I-U#~gW;!s*JTP5BQ`s}f4)$MI=TyTw9UbH+c0rs@Yw{V``z>Pbn#VeS15T45+ zF0C)lr*{$Ry>jz=Wav93GRXD|cqPK2{e@PN>fPj%he@IzC&izYN4~hQo;FmDQhlls z-$@mL{y+{sdNmtiE_3nfI#-YOGQX_lMO&KaN+~tC#hf_9Yp|VKz1ht!#jD+jN4A-QVI7sD%R8dPcI49Xy%eJW{9L zt7@#s$ggI*{pJLrzec^VU@!6oAmy`()?4&)93aDZZE@aUKT)==CPKMH@pS#>kE9S_ zfZgrve*=_T!4V4jPPL#^*ScWhC2k71K*Qn@48nHteh2nY@dfFF9M^{Wv{v^1_fvpb zml0JvEMX7sMfFM1bnb6!DjK`l!#yLWJgmfXF5;^eNoVLNy>cNwp)`@oU-J8((h+ma z1YPtB%?nJBe}RL}C^@*f$85|33DE0x#UcKa!M^7(HlgoYV_S)END48c)BCeUam9ip zEy4?uK`bLvRCaI%JnE9#yGXp7AlW%4ZuV<;s4w4A44=D1M4kLL5XxQqA;FB=MHH8r zAJ9+CcsHQEZ=##mothqT)}h6D!Fu9uhZS8E=?zVx;)1uTb0o;~-F5WYFy~(SuxkL{tnM!O)=e>eE{~x~s(a@;HML?DP;> z@B}^n6EEvG&fqTGu4oFysz~JgdDz?}d5$+(9tZT@b)h%rTWyB1CE)=n8*OE7?WY>p zPID+`8Ce?L3g`Nk+k$m#q%rUx8;mB(Rd`@NRozCfx{dTj1*%=Iiti0CEAr@LhV4Qx zo1Cg=;Y!J4p+C2#C6HlF2Z%+ld_KqL{g}bd%9)maio7u!bjROv0q_uzqJ;&wVj%Bn zpa8F-D2oz}WWROf{8)8NpAPC}bePSoBk|3lJ)j}bX5=N!0uwYv({HEmXEOsUOo%_91$WJk6Ob z#l*MRWmq5;1a5t{x2i|A^>t*E^vFr0XKr8VC6VJn-JP&7rM9$+ecW`-Ida=Y^x#et z4ZE~8+p@}mX`}ypQv)Ykf$nm~(?r~7X|hKLq8jgEt-e&x^vCa0XeU$b5pl@Y^;dNK zG>W)Gy~XCgsFM9NrZaFqJl^~29DS?Ipu_T@hdwD^2I@80Eqf@siE3Qm^UJ3vpzl(Z z@n1EtxGWJ@=2Wx9Yk`!Cu@7`Kx(uo7yh1w47|$EC8TI%Jssuy7sJfTC^UVu(zo=5B zKE<#ar?<@(kuI9YP$tUiPc1_~niuQZI#%YO*>7y4RbF3gxy3#suzM#@ujX!&UZ69F zdMK!SR#W{N0KqO(AYE;17e@0`oa7Yx!3sCb|C99SQ^gcJ?+@Z*;ze}UgCquhY;|Zp zY0kJIIcH6N3uo~%M#MRv9P>rtuOc!m2%F@iD9YcDh7={i)G)gCj)4!hzXG2Sz##;qv4NNMspr zZ=hxD0+kq7tz_+>s}Y<>20hTHj_P;ePjk_nc7uUu3+(k}XiCUm)@ z$(V0c39P0(n)hdi=_1tZj$CxKpSQ}?lxeMLL(5L}z1Le=GNay)Z(rc)x~Vq#vwN9! zRR0$sdVD~`V9jO1dFZ){5240QD9b8CkDXkb&vI3ArFr%7=+_F1jC%jOR`=m_Ity|F zRAnCRlT#8!)BV=@^~eV~o)f#Z|CORkqF!_oSnff^xs~O6l+}ukZStuR8Y)Q`1CCN*uhxx|DlqvkT-PIF-cA#3`bKlru$-no2Wm^VA9 zOVP2{$cKBhS50ak=F`ijc_0jX)8vm&m!8*x}Bw`vw~s7qnS=-C0)`D-`5f{nHHpx5$=Bh?RtRLDG1O3&NX%odH)TNXvIv@cy;B3K$TyMQ?2B>RsDUOJYEH_MqFmDx>j)zpF zqU2RBC9hiEBK1`0##_v3vu}S9ehr&bb3q>&MDs7uT^CAsPUUwt*8qQQ`?%)E6ihCw>!)HVpwFteYu6!bbW%? z=X#%YvGk0=PNjF-S?vw}X|bh@KDTz7H`>0_wp3Oy@S%2@O!CL051yBTaal)N6NJ)c zuwQTh*xOXx5B?wM`uTEHh7Su^RFadzzNE3VeN>{|-|#gN{nB(BHrp48!Suts9cqG7 z&0&0D2;L2}%KFxr&sx32@pvc7K4J#L+le<4*ZXsW@@>WvY;%K3&hn(yP=PbQ*$?|t z^KKX3+Q-LxlR;gPdX*F=Uquf_TV`!!<2-R~Ro(`)c-yP9Twj~to|Tj|t9oM|2Z6`9 ztOxFGF+CPDi=!sJpD+&*9H>ge3*gdRylJd_AYqT)^Ku0j7F2wyNnvNRqo}9QLkC2t z#3_5TkA^6HM>#JD+<_p0#pxJ`br(>jX$5jaPqbAMa*HenX&bZ)f{^tkXvRa)3%+Mo zK_byPa%&9KUk@559L&R-&f;#|JTbhNPfdY!V^fkTmbl52C%&s3%o7$RCV*jHH!50# z2DzcU@FFgCG)GMh1`ONn5%U_`F==)nQ&D6~TKGk{9u&|@clwZG5qw?bu(U0B{kG{| z_ym-jo=#mXGM6#lNE_g-Porp|!Zix&UNcyG9rX5cZ&@W0RuA35zKMmjf2Hl7KXjiz zwJI(a7grzgsR7($UJ@zW|$ZX@9musV1%V9S_dH#8Wd z4jU1-aN?2VRiV6$KH!2Mza%q7vMX+sIc=x;mF|`wyE{MC^zq+9+}-O11yBr_hqFCIn}76dE)0?PKMKvX4z9S(W&0R}EdApN@#*xq<)HS2;stfBkD~@!m zS^#~5@(ul(U{$~V+2Ht==*ADhDJQVm>tA!Q{4x3>=V18i*!-8m;B_NdV_&afvbPbM zod-_Xc&^Ni6faDBzlibW+r&1()mcis^E3E8l8298v_MikM?h6qiFoBQqMiCQV^+|} z(>`j(PhpZ5!$cC+#@taLQ?@p2ZiOkjH_IH^nJ?%s@M`~Rge5b8*JB%&FPvE4S}NRg z-YsR^e$?$iKv`{gBYL~M51NPZ80Je2$9vfxL4&sFy${-h0J*1B4myXr0^x9RMRetUP;=N+$YrX-t<8PyNr_TADi?8H zp1dE!KMk_-$K16}+0xBfwx2s_zHQUrmy9<++heVFh#HPTL)FMjN8@~5?U5_oiZ$oN zX0nSGlt*0&zZ|rf#jk1&WH#)Qr{eiMadS=Ix`7GB}5m`BFYqh`Yyu(-7 z@-PLBWF7LZ;4RqMe$KzF%GpgdjUs8d#hb2JH7)5MQZ!Orv^w7;a`)4@RtS?}z?W6?FU9>FVB zDw;qtFQseVYasyu_~!FjpCUPKbrpVDfgMY^k;WU?s!wc;PYtv$tY8+&up2t-Iob_w0vcmi%qg#KTHNl??VGjv~^26>&;qaRFltiOVCbn z=IRcY@X(ROxi*)?5+49lKs$nH263q=5(BcYKz=C>=vkdUL9Ijl0Yk_S;gFV>8qOhU zd_3R?`(dN7kz~K9vC?4 zA0!Lf&Q|Xg9E4X~0Zp-n=sAg~N+BTN<2r$U3LtcsGaWpwDN~-udka)I%((4H2;7&`Y>$@5v?oD z-Zw`OzZvXdblS|%kmVwiI*CtCV-VIR@ss*sxAqn9BYb<37)f@rkG^ryfB4Ypx$B>G z(wR-y-HlI&z;wa@?YWK{rk~|=kTfFgPYtNWcwTKl|Cf$TIes>Y2Hmim@V4rlnxDvT za4FW0JGMqBD9ikv*MX{8<7m?%{{yqQ3Hf{6r?E1ymUHZ@?_&Z9l&Lta`BNv;AEG9+ zwGMrK8$mFU5_ZK};>#|ZHDIQde%tozZLc10M)GPszLJtjG@l^O5(>RasVaGmOWl@~ zYtK0W=e~8XO2Ef~bv}JHDSw>mQV2WD^MUO zd@RX`XsER2Ujs(eXEko9L#?%T{O4Z}?Lo)0n@1C`Ao;c*sm!+?&$X2SbCc=HHlRw$ z!LBXa#RYh6Ht{3ZJTUYTyAFuPK0#v+0|yv(t1aVtiel8dy6E>iG{v?pqo^1Iof255 zJ1M&Z0Jp3Y_XX-*ed+6SEOA8{n^)FlpQZqFT5H^3yH{}wQBxu zH_mmW$Ezt5*dM#X&O?sA2o-u%#C*SK*_chn{DfQo;40-w3br`9XJYP7;}sJHb~%?R zE@q*hK?8fa7sa)>e)uryod!fLNf=ifg!zOWBaM!|Wq)y~VNde~vKj>mHBrVr85$?A zMT;TK{!g|%O|zcwC6QUa76ETeQm>0TJFVv!`!({VG6s|cTnuSFdCTUZW^VtfOBcr4 z60c>D-w9S>Dl)7xgf-Gs>^=T6E}&ENi9XloKL7G9;z#7C0M05*td#OwC>OCMX?P|- z04nmuZnu9>SW(`L1%-A4k@tgf)I?>!P#w8&1CBI90 z%ivfF`?j~4roOh_ud;q?x!!|O0VngGyX79j@1sOV;ifqA7|grx8sM7V9Zx&bz5>sg zZaAF)n%Z%nJ4&Zh=%zErsxA)Ba5fyc7Hn!W( z3$qrb!EG)kMU;m0U)@V?w(g=oqQ0P_SeW{Dv9*^{&Jk%_|P>SSM==kC4!h9Y|x z@rI6A_93EO8T*NXVn?GM;)<}o*L#lo=OVVG-sstnoRGj!VypMW0$NYK$sRFpXx-!> zJs(VCJ(etgFMK+mRn3@MZ##=NQ>yJ2_N~sqb(V;u58RolhtXxv89if_g90wH-%c5n zsor!Mq(AWh5YCU(K6Jc#wN}_L%)LmuUhF!>^n5BYf$uTsqoB~F#!Ev39rOdzUz#-A zNvLP$HzH5^sJeEF3hMu_=FU1Us_*OfC{ogbG>m`(($Wku0)m31G)Sp*3`*A^B_O5J z-3;9=As{t$cXxNsz;pQN_xF09=k?rs|GBT%z5I1voU`|w*?XNcd#%0J`%`$QsTC87 zr-9;nw^*!&OFt_lqvL(!cfbHZLlDcIHovN@p2fwku{ZiMkX_UhOXN%d{(qbV^KvH- z0Ix^CDc>r4@r4h0D$qkO^y4(-6f}u(sV)z%;O3SlO)ba!ee%8ibfj!GSFw*4+d204 z>nAiZ>e{@3Lg8U@Ba$fe)7KO+<#KRAoJzEvBBO&AyqsBv(Szn$F;JG}48-WFZ%afs zhTu;1->?%u#0q_!EFAERFYRuZLJ}4SCvlG|Ogjml%^7GZPc{=SSjR`7YA5l`IQeUC zt8LJQcz^43^(zuR{QN=5O18QsNu&k~TE{z~N{8F>M_)DVs*E#T;mU?A1ok}J({3!rlU_0DY(Do?U#P-9q}0JT!Zcjp)w};0{UcT)vn=ij3`A|nspleySBk!f~Y7iZE%85>?fTVs+vAgjF zo|b0lk?fSo^BSZ2r)+{6zKR zvHYAhF-2PeEsSN!3&^FTur~QTpOP1v>Q!rK2`sgjzRpx;Rwu3wuw?Je%je$!U;w|w zVkZ`H)v%j;w&4H-tKPX-;9K#JMyamfb>)jOHHwJYA3roxf($+=o0)qel z0LGJ~9F2F7es*)r<9GuRnwb zT_x<_%kgp3)1^=a648{L8~7ekThOG1NupxAs+6#TwJTMN*8b7n!u`%9^10}Kq-ngj zB$&E@LhEWCgk14&BH!xDz%T-0(%?8pLN-AfDeMYl=m^f%Wrm0RW8B#UyAX&p)>^wN zopD!)0TZRK9x}Z_k;ga!CBWZtSQR;wcG=>5)GZ`dK$mm)&R3!j06&gJwa($CG`PFY z{Sv7YRPF6O08~~dcwdUDl{}^l02ryv^hI=;1n)dly134Xg9^Nuir&t9k|ECE5~Hfo zYZ5gF(Vrd}aPL!FS-K{B1z>f&4&ngre7UlP?7mK_bj;l31-8@| ze?h~yoyTuFa?`7m1RkUg6lTtp^V0y@qc^E|=OAoGBcbc15mU_wS=>bto!Q5M&_+U% zO5uc~)V_!+wX*Uw_Vcrx!8!J?{-xF$WEmI7>6P73^+PLS=>wulbl(-AGJs7qxvo47 zy0YdpIl^kK1N=%T&b)V^xl0q3tA6!7WON1KA7cI#dx|LQSzik9%KVd(Pt@|iP09bQ zjA8VEepq~-0ZdNy415RH9xD?A{Im!>XYv$o2fbBvRy5H4D;+xaV zT)QN)1swPW3HRx1(f>>6RwLR2NMG!~rMExpKM!i6UWiCgypsncWR3laYDRcnLxmEB z5*z_cfXi(ODcHQ{1^pyGdlZt(cY*uNREK!=CJ{~b&c4&g)A~Pco(t_f6r@l!@FPkL z`o9ih{}XDJqkpCn@HJm|Yg(2!LAQZ#VgU1>1VYI8ygyKj3S{1Y@Hf*HXqcZiHEj>w zX-Ww{3Tic=Y*aPa&;0F}D_ENSpinXEd+qdLfyW)*V77+Z-g=iWO3r#^N9bpSQ{K57 zfyskN@oyP^>GzGBr#H)4(EG~Qu52EmBxxee(b*en>-9UDH*sI5I|loEttVGXp_Iw; zun^08UTw(LXg7pry~C{GH+3c5ain`pG+D%xARi!ozNs*MKlLY-erHZov#@ z(2#VrY0Vm^<-Y}Y?Yaq90Tiz&@s+nw4uh{v>9m83zh;GQri%w_#u}eo_d!nuNhkN0Cat}sPWB9qP;X;y5pAkMsmRgt68ml56gKWJG=OPddPvj{ zaPs95Sn`9wKe-43`wqAi2m&f^aT94dTImLkwt$TE_w)o2Q=9E^I=nA(fC6*M1cMia zb5ahznZU^4r^%+yP||h0s;TFa0W!){oZt}0^(8eg0psn{&M*SQE1X{IDyhTt&t9*B zn)1`>^j4+;l|2~II~HKF?b%ISMszK^qpp9~0GV#Qfu|grlH7E8#Bbh=FWrc*u}bUjA+ndCC=QY3+#tJ3vi6WhtPA5>upM-@t&ep zWbq;dd3+@8(e44!NzhLCB#Os)4oIi&mMsnrrpnh8ql{=K>u~^F(rdO?ZsNV3GIY`x ztw^U0(|4w8nXS@PQD0sv6!)ZX~-!5Odk-_?wW3- zZLsaZToRz7c!q8q#LP!0{XZxsVjcCEI zpmy~^V)oFY8ir7;LU{eWzLC42WGoV`EBb?f>%Y__l_JZ3WnMHD*DbXBv_|Xoee61t z(Grk?kP!od>SKcUKl%nxqXiZ&yOzLc?W z3?dEBir-)JPji(w;G&fI@mzonT#>%FI_~5pyE)h9tNx6^%r_Tg?b16;=ONr>ieaZ!&|I?if#Egb7H;85%i|yX!!?aOuCzZGN?*U+uQoVC+wcWlK-YX%N_7FQAefAI zOrXrEd#Q(=Dvt;RhBnsm3+%LgxUAhfedx;SKSnp}#Gy*CI(oluPU|XbD>YW^?Be`q z;??okW$4h;Gd3htZywNkwcBM(&cpWw0#?VK4uEig#o8P(i0cqNAE?}Hoa(BX2)sDE zQ{M~ZwJoRk?1#bsbY2vMo;!ER_&?gQeoBiy?@W1g0rhCD3H*8NM`9YK z189afpPuN@Tn=H!p`v)@l@g#vFKT}@0It&DV7%Ae#QV*^4%#(=%3tqgLwvBoa*k&W zO9K{^x6#eWfKkQ=ND}t=cpJGAE+d0PfrR#uLxW4DRyD=u_kKH(F*iKvt#V9CW|n=; z4f#>^(P*M8jioW>X1l>^30dCJGOHY}iQMoJaQU|=l$Xxy%rZI%aT^n!*{WEqYT)ptE>ksdNaGOk|U(}woZNM@Pk-{Y!DABh^N1= z93ZeWWww%hl$(Cg4rrL~Z~5oCJm`R`o&}*yj3Zo8fav2A5Q0dWcb_EBQ~GS_(N&x# zuBbw*9>E-sagrT~@4F!ee~k42af&L#K60Q4O>^#ezr0>;jn;;K9{I7SZL&VenQxZR z_%c3(o5(?p7$nL_H#We9?e~ObbLshjR!M-yn9xN~mFP6r zVU|r(2iylFt=~Skt>jNW@{zl{kOv<%izkv?1u0f~$m`EDBOnAMkud8gf&V9x?3@JE3h;K9`b~lF3}1D^l6sVYp6B zTi$se8!AI(gjLKs@EQK0MTfAC5>OiSuV&JdH6Y<09HjPI1ORVG)a@I{ft2%aGEs0d z(har#JB&6IA9!C?%Ix%09^9x`v|;b+(j|i&!SVR`<*h!+%s9+0VTxfF-?@D+N@j4d zK)z3`zr6u+eAJsTRSLYp0ll2tb-L3MC~FQv2`zuWNAJXLtZtA3OEDZ6oQJ4rOCPbr zI((jON*N7WnQ4&S8v_`ERZts97m#*vA!fqte|n5H*+b@uy7WU<4`m#xb|QX6gMJmY z6 zkN9gSxquAgjf+X%mWhvT#D+mc)1HCysWYW~19MV#RZb&58@c+WddRA5VHLRPvb`Kj znThT+dj!YuBydC+R(;5#`cfkAD*idGvG+YAd6L7gm)F|1y#l{1!z1(ZP=wF9RIp@!hUkFJMU)K<*XELzHri&AZNAoT!!aXt4C5vQx-V+C^nFI! zGdm5~Q{6CubiJK>z?y>oPGpIJ7w>u5SD&xVf?@D?spxn3?($8#^b?&A?b_Cv=SwDm z@W@j5RR}4@FQF`|&6mE_5ifxoE8ZD<=>}U?Y(Kk8tlhS2{{H8ryB3-WEPoYko=wxlSV5SgaNree#sKBx? zf;3TW5wE?{pm#DczdS2=gb{NT_k{Q^O(NOry<82JkT-nTk2!7XYKx{92RB(DNc%_dB#s!1*2xuV9j7oVBS>y?~pxn6t%YSP>F8~;_yUJyaq?4TA4Ob zT3;!rj##^?=zLo%J})BA1G%$3dm9PPR?(SgEY8Umdg0kfS9w~OO-sRo`0W!I#Pp*d zl*xtoT#pA}^?}{fA;3$irakeiOLOE6%dh4`jE-n)&88~qU1b182CLJTYl~|?=o%Wa z;$^n7ONp2>l;T#57(EggCQ}KhS-!S)8@IiZMg`R&2XRi;pWi~*&9f;uFV)@}jmJym zE9ANh-+$Je>}XnO|9vio!$L&bVK6+noWR|MC)2P7xIV}0*iXE} zom9$EsdBWMOdJ$y^eMVYa`8z~V_DB)up6@#+`hdW_yx`wsPxDl0G@&obE6$E=o6Dr zTl{+kn+E+^2j0P-0&xwZR03D4{s|)s3DT`Ns)Gwrb5??RYk^UiHkTTRvdhe!ymNrgiRD$JD zN?pD`=cRJS-G-~mYgKZ5WIMxtdR3qZo;}U_^I_eOIxXZs*8GWBkNE~hX0J!yFSM!& z&n{v%XkUY|)xo7M{dbJ+?Aq>df#Mg#t85e*SJJSX6`5!ENGmKpD_mQA zu(eTFj+JzYnh`*<>MM<7|eA{n=eA7H+SVm-k+F#IT=l)k%P z@Vof*7a|1#R!}!8ma4{qC|?iGW}5=c>`(8F1&cWMFkj{AIfX@Aau)}ugp|0Zv;KbQ zKzE>-6&#(@(oxjF{TU<$h&>f3q?6nLF{9>3u#D~1k`G46Mk~<>>!}<_@wel#UMs=e z^1P6D4sRHJZ=VL=A${{JkFHjplgB5ItXaz%HHa5tCn)&LJ**);|Gtuy2=+3N~YnV#lf=P&;8I_FzVF(?Zj7LpD6dadvO$g3DRjzK03w4?sGYc) zWw6v13nrc0&R8R_4p~wkwb>0@2MpMXVQSbAftj6BMb_b`FEDTpA)hDVz}ps)UZXd2 zv#9otkFyRmH?w-X%RwO@jo}%?61%B1S@7)PN3W`>v^nQ<<CBLXOb~1=T_4{ zguKP=COpBa)QKME_`$Y<9V0^#sgah-a<8VH(hNV+q2POKt9KMta$+sU&H3JVU$1+8 z81qlwzU|)Gox(XTbNioVWo3P$ecilA?t3mKhoQIyFSmw7Bg4e z0g;+yiTVcT5MnV9U*Js{S0$`N1j^|@?ykJQJOj~W3!fBblW*Ll91*-MtW2HYzg@(Y zE7d9%3O*?cWlbx$%89Jld!74ogqI_u4zI|L&u?uv&7EaYf|f9D1DT4nl{Qvsbt%gQ z%Uu+r6dM=3W+-|_lV?od7kxZDmZM!YUf$xe6Mvcpw$LlKq1A+WYIKe&Oh#G7Yj=@W zd`}n)TsV;)xPG7;*0x@Ly^bLj6cqG&X=zD7K){5Nkx@W20c4PnoLtq}*?BxOPfbg! zU~p%h98A34D8ERE{oKL66y;;Ud({&rz?m=B=b(}sq>6^7@%1kL{a#!A&o+y$cEv37 z8HSnQhrcloyc`Qπ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 literal 0 HcmV?d00001 diff --git a/_examples/tutorial/mongodb/3_get_movie.png b/_examples/tutorial/mongodb/3_get_movie.png new file mode 100644 index 0000000000000000000000000000000000000000..71eca41ed0130821a783a6e3707395a9e0f6cded GIT binary patch literal 85269 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 z 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 literal 0 HcmV?d00001 diff --git a/_examples/tutorial/mongodb/4_delete_movie.png b/_examples/tutorial/mongodb/4_delete_movie.png new file mode 100644 index 0000000000000000000000000000000000000000..185b730a711e86cb6fa3f2930c1e5decbeca2ab9 GIT binary patch literal 49580 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 literal 0 HcmV?d00001 diff --git a/_examples/tutorial/mongodb/README.md b/_examples/tutorial/mongodb/README.md new file mode 100644 index 000000000..644a93d06 --- /dev/null +++ b/_examples/tutorial/mongodb/README.md @@ -0,0 +1,58 @@ +# Build RESTful API with the official MongoDB Go Driver and Iris + +Article is coming soon, follow and stay tuned + +- +- + +Read [the fully functional example](main.go). + +```sh +$ go get -u github.com/mongodb/mongo-go-driver +$ go get -u github.com/joho/godotenv +``` + + +```sh +# .env file contents +PORT=8080 +DSN=mongodb://localhost:27017 +``` + +```sh +$ go run main.go +> 2019/01/28 05:17:59 Loading environment variables from file: .env +> 2019/01/28 05:17:59 ◽ PORT=8080 +> 2019/01/28 05:17:59 ◽ DSN=mongodb://localhost:27017 +> Now listening on: http://localhost:8080 +``` + +```sh +GET : http://localhost:8080/api/store/movies +POST : http://localhost:8080/api/store/movies +GET : http://localhost:8080/api/store/movies/{id} +PUT : http://localhost:8080/api/store/movies/{id} +DELETE : http://localhost:8080/api/store/movies/{id} +``` + +## Screens + +### Add a Movie +![](0_create_movie.png) + +### Update a Movie + +![](1_update_movie.png) + +### Get all Movies + +![](2_get_all_movies.png) + +### Get a Movie by its ID + +![](3_get_movie.png) + +### Delete a Movie by its ID + +![](4_delete_movie.png) + diff --git a/_examples/tutorial/mongodb/api/store/movie.go b/_examples/tutorial/mongodb/api/store/movie.go new file mode 100644 index 000000000..2004d06c6 --- /dev/null +++ b/_examples/tutorial/mongodb/api/store/movie.go @@ -0,0 +1,101 @@ +package storeapi + +import ( + "github.com/kataras/iris/_examples/tutorial/mongodb/httputil" + "github.com/kataras/iris/_examples/tutorial/mongodb/store" + + "github.com/kataras/iris" +) + +type MovieHandler struct { + service store.MovieService +} + +func NewMovieHandler(service store.MovieService) *MovieHandler { + return &MovieHandler{service: service} +} + +func (h *MovieHandler) GetAll(ctx iris.Context) { + movies, err := h.service.GetAll(nil) + if err != nil { + httputil.InternalServerErrorJSON(ctx, err, "Server was unable to retrieve all movies") + return + } + + if movies == nil { + // will return "null" if empty, with this "trick" we return "[]" json. + movies = make([]store.Movie, 0) + } + + ctx.JSON(movies) +} + +func (h *MovieHandler) Get(ctx iris.Context) { + id := ctx.Params().Get("id") + + m, err := h.service.GetByID(nil, id) + if err != nil { + if err == store.ErrNotFound { + ctx.NotFound() + } else { + httputil.InternalServerErrorJSON(ctx, err, "Server was unable to retrieve movie [%s]", id) + } + return + } + + ctx.JSON(m) +} + +func (h *MovieHandler) Add(ctx iris.Context) { + m := new(store.Movie) + + err := ctx.ReadJSON(m) + if err != nil { + httputil.FailJSON(ctx, iris.StatusBadRequest, err, "Malformed request payload") + return + } + + err = h.service.Create(nil, m) + if err != nil { + httputil.InternalServerErrorJSON(ctx, err, "Server was unable to create a movie") + return + } + + ctx.StatusCode(iris.StatusCreated) + ctx.JSON(m) +} + +func (h *MovieHandler) Update(ctx iris.Context) { + id := ctx.Params().Get("id") + + var m store.Movie + err := ctx.ReadJSON(&m) + if err != nil { + httputil.FailJSON(ctx, iris.StatusBadRequest, err, "Malformed request payload") + return + } + + err = h.service.Update(nil, id, m) + if err != nil { + if err == store.ErrNotFound { + ctx.NotFound() + return + } + httputil.InternalServerErrorJSON(ctx, err, "Server was unable to update movie [%s]", id) + return + } +} + +func (h *MovieHandler) Delete(ctx iris.Context) { + id := ctx.Params().Get("id") + + err := h.service.Delete(nil, id) + if err != nil { + if err == store.ErrNotFound { + ctx.NotFound() + return + } + httputil.InternalServerErrorJSON(ctx, err, "Server was unable to delete movie [%s]", id) + return + } +} diff --git a/_examples/tutorial/mongodb/env/env.go b/_examples/tutorial/mongodb/env/env.go new file mode 100644 index 000000000..24ead415f --- /dev/null +++ b/_examples/tutorial/mongodb/env/env.go @@ -0,0 +1,71 @@ +package env + +import ( + "fmt" + "log" + "os" + "path/filepath" + "strings" + + "github.com/joho/godotenv" +) + +var ( + // Port is the PORT environment variable or 8080 if missing. + // Used to open the tcp listener for our web server. + Port string + // DSN is the DSN environment variable or mongodb://localhost:27017 if missing. + // Used to connect to the mongodb. + DSN string +) + +func parse() { + Port = getDefault("PORT", "8080") + DSN = getDefault("DSN", "mongodb://localhost:27017") +} + +// Load loads environment variables that are being used across the whole app. +// Loading from file(s), i.e .env or dev.env +// +// Example of a 'dev.env': +// PORT=8080 +// DSN=mongodb://localhost:27017 +// +// After `Load` the callers can get an environment variable via `os.Getenv`. +func Load(envFileName string) { + if args := os.Args; len(args) > 1 && args[1] == "help" { + fmt.Fprintln(os.Stderr, "https://github.com/kataras/iris/blob/master/_examples/tutorials/mongodb/README.md") + os.Exit(-1) + } + + log.Printf("Loading environment variables from file: %s\n", envFileName) + // If more than one filename passed with comma separated then load from all + // of these, a env file can be a partial too. + envFiles := strings.Split(envFileName, ",") + for i := range envFiles { + if filepath.Ext(envFiles[i]) == "" { + envFiles[i] += ".env" + } + } + + if err := godotenv.Load(envFiles...); err != nil { + panic(fmt.Sprintf("error loading environment variables from [%s]: %v", envFileName, err)) + } + + envMap, _ := godotenv.Read(envFiles...) + for k, v := range envMap { + log.Printf("◽ %s=%s\n", k, v) + } + + parse() +} + +func getDefault(key string, def string) string { + value := os.Getenv(key) + if value == "" { + os.Setenv(key, def) + value = def + } + + return value +} diff --git a/_examples/tutorial/mongodb/httputil/error.go b/_examples/tutorial/mongodb/httputil/error.go new file mode 100644 index 000000000..5bf7837bd --- /dev/null +++ b/_examples/tutorial/mongodb/httputil/error.go @@ -0,0 +1,130 @@ +package httputil + +import ( + "errors" + "fmt" + "io" + "net/http" + "os" + "runtime" + "runtime/debug" + "strings" + "time" + + "github.com/kataras/iris" +) + +var validStackFuncs = []func(string) bool{ + func(file string) bool { + return strings.Contains(file, "/mongodb/api/") + }, +} + +// RuntimeCallerStack returns the app's `file:line` stacktrace +// to give more information about an error cause. +func RuntimeCallerStack() (s string) { + var pcs [10]uintptr + n := runtime.Callers(1, pcs[:]) + frames := runtime.CallersFrames(pcs[:n]) + + for { + frame, more := frames.Next() + for _, fn := range validStackFuncs { + if fn(frame.File) { + s += fmt.Sprintf("\n\t\t\t%s:%d", frame.File, frame.Line) + } + } + + if !more { + break + } + } + + return s +} + +// HTTPError describes an HTTP error. +type HTTPError struct { + error + Stack string `json:"-"` // the whole stacktrace. + CallerStack string `json:"-"` // the caller, file:lineNumber + When time.Time `json:"-"` // the time that the error occurred. + // ErrorCode int: maybe a collection of known error codes. + StatusCode int `json:"statusCode"` + // could be named as "reason" as well + // it's the message of the error. + Description string `json:"description"` +} + +func newError(statusCode int, err error, format string, args ...interface{}) HTTPError { + if format == "" { + format = http.StatusText(statusCode) + } + + desc := fmt.Sprintf(format, args...) + if err == nil { + err = errors.New(desc) + } + + return HTTPError{ + err, + string(debug.Stack()), + RuntimeCallerStack(), + time.Now(), + statusCode, + desc, + } +} + +func (err HTTPError) writeHeaders(ctx iris.Context) { + ctx.StatusCode(err.StatusCode) + ctx.Header("X-Content-Type-Options", "nosniff") +} + +// LogFailure will print out the failure to the "logger". +func LogFailure(logger io.Writer, ctx iris.Context, err HTTPError) { + timeFmt := err.When.Format("2006/01/02 15:04:05") + firstLine := fmt.Sprintf("%s %s: %s", timeFmt, http.StatusText(err.StatusCode), err.Error()) + whitespace := strings.Repeat(" ", len(timeFmt)+1) + fmt.Fprintf(logger, "%s\n%sIP: %s\n%sURL: %s\n%sSource: %s\n", + firstLine, whitespace, ctx.RemoteAddr(), whitespace, ctx.FullRequestURI(), whitespace, err.CallerStack) +} + +// Fail will send the status code, write the error's reason +// and return the HTTPError for further use, i.e logging, see `InternalServerError`. +func Fail(ctx iris.Context, statusCode int, err error, format string, args ...interface{}) HTTPError { + httpErr := newError(statusCode, err, format, args...) + httpErr.writeHeaders(ctx) + + ctx.WriteString(httpErr.Description) + return httpErr +} + +// FailJSON will send to the client the error data as JSON. +// Useful for APIs. +func FailJSON(ctx iris.Context, statusCode int, err error, format string, args ...interface{}) HTTPError { + httpErr := newError(statusCode, err, format, args...) + httpErr.writeHeaders(ctx) + + ctx.JSON(httpErr) + + return httpErr +} + +// InternalServerError logs to the server's terminal +// and dispatches to the client the 500 Internal Server Error. +// Internal Server errors are critical, so we log them to the `os.Stderr`. +func InternalServerError(ctx iris.Context, err error, format string, args ...interface{}) { + LogFailure(os.Stderr, ctx, Fail(ctx, iris.StatusInternalServerError, err, format, args...)) +} + +// InternalServerErrorJSON acts exactly like `InternalServerError` but instead it sends the data as JSON. +// Useful for APIs. +func InternalServerErrorJSON(ctx iris.Context, err error, format string, args ...interface{}) { + LogFailure(os.Stderr, ctx, FailJSON(ctx, iris.StatusInternalServerError, err, format, args...)) +} + +// UnauthorizedJSON sends JSON format of StatusUnauthorized(401) HTTPError value. +func UnauthorizedJSON(ctx iris.Context, err error, format string, args ...interface{}) HTTPError { + return FailJSON(ctx, iris.StatusUnauthorized, err, format, args...) +} diff --git a/_examples/tutorial/mongodb/main.go b/_examples/tutorial/mongodb/main.go new file mode 100644 index 000000000..56702ebd0 --- /dev/null +++ b/_examples/tutorial/mongodb/main.go @@ -0,0 +1,81 @@ +package main + +// go get -u github.com/mongodb/mongo-go-driver +// go get -u github.com/joho/godotenv + +import ( + "context" + "flag" + "fmt" + "log" + "os" + + // APIs + storeapi "github.com/kataras/iris/_examples/tutorial/mongodb/api/store" + + // + "github.com/kataras/iris/_examples/tutorial/mongodb/env" + "github.com/kataras/iris/_examples/tutorial/mongodb/store" + + "github.com/kataras/iris" + + "github.com/mongodb/mongo-go-driver/mongo" +) + +const version = "0.0.1" + +func init() { + var envFileName = ".env" + + flagset := flag.CommandLine + flagset.StringVar(&envFileName, "env", envFileName, "the env file which web app will use to extract its environment variables") + flag.CommandLine.Parse(os.Args[1:]) + + env.Load(envFileName) +} + +func main() { + client, err := mongo.Connect(context.Background(), env.DSN) + if err != nil { + log.Fatal(err) + } + + err = client.Ping(context.Background(), nil) + if err != nil { + log.Fatal(err) + } + defer client.Disconnect(context.TODO()) + + db := client.Database("store") + + var ( + // Collections. + moviesCollection = db.Collection("movies") + + // Services. + movieService = store.NewMovieService(moviesCollection) + ) + + app := iris.New() + app.Use(func(ctx iris.Context) { + ctx.Header("Server", "Iris MongoDB/"+version) + ctx.Next() + }) + + storeAPI := app.Party("/api/store") + { + movieHandler := storeapi.NewMovieHandler(movieService) + storeAPI.Get("/movies", movieHandler.GetAll) + storeAPI.Post("/movies", movieHandler.Add) + storeAPI.Get("/movies/{id}", movieHandler.Get) + storeAPI.Put("/movies/{id}", movieHandler.Update) + storeAPI.Delete("/movies/{id}", movieHandler.Delete) + } + + // GET: http://localhost:8080/api/store/movies + // POST: http://localhost:8080/api/store/movies + // GET: http://localhost:8080/api/store/movies/{id} + // PUT: http://localhost:8080/api/store/movies/{id} + // DELETE: http://localhost:8080/api/store/movies/{id} + app.Run(iris.Addr(fmt.Sprintf(":%s", env.Port)), iris.WithOptimizations) +} diff --git a/_examples/tutorial/mongodb/store/movie.go b/_examples/tutorial/mongodb/store/movie.go new file mode 100644 index 000000000..3b995e478 --- /dev/null +++ b/_examples/tutorial/mongodb/store/movie.go @@ -0,0 +1,180 @@ +package store + +import ( + "context" + "errors" + + "github.com/mongodb/mongo-go-driver/bson" + "github.com/mongodb/mongo-go-driver/bson/primitive" + "github.com/mongodb/mongo-go-driver/mongo" + // up to you: + // "github.com/mongodb/mongo-go-driver/mongo/options" +) + +type Movie struct { + ID primitive.ObjectID `json:"_id" bson:"_id"` /* you need the bson:"_id" to be able to retrieve with ID filled */ + Name string `json:"name"` + Cover string `json:"cover"` + Description string `json:"description"` +} + +type MovieService interface { + GetAll(ctx context.Context) ([]Movie, error) + GetByID(ctx context.Context, id string) (Movie, error) + Create(ctx context.Context, m *Movie) error + Update(ctx context.Context, id string, m Movie) error + Delete(ctx context.Context, id string) error +} + +type movieService struct { + C *mongo.Collection +} + +var _ MovieService = (*movieService)(nil) + +func NewMovieService(collection *mongo.Collection) MovieService { + // up to you: + // indexOpts := new(options.IndexOptions) + // indexOpts.SetName("movieIndex"). + // SetUnique(true). + // SetBackground(true). + // SetSparse(true) + + // collection.Indexes().CreateOne(context.Background(), mongo.IndexModel{ + // Keys: []string{"_id", "name"}, + // Options: indexOpts, + // }) + + return &movieService{C: collection} +} + +func (s *movieService) GetAll(ctx context.Context) ([]Movie, error) { + // Note: + // The mongodb's go-driver's docs says that you can pass `nil` to "find all" but this gives NilDocument error, + // probably it's a bug or a documentation's mistake, you have to pass `bson.D{}` instead. + cur, err := s.C.Find(ctx, bson.D{}) + if err != nil { + return nil, err + } + defer cur.Close(ctx) + + var results []Movie + + for cur.Next(ctx) { + if err = cur.Err(); err != nil { + return nil, err + } + + // elem := bson.D{} + var elem Movie + err = cur.Decode(&elem) + if err != nil { + return nil, err + } + + // results = append(results, Movie{ID: elem[0].Value.(primitive.ObjectID)}) + + results = append(results, elem) + } + + return results, nil +} + +func matchID(id string) (bson.D, error) { + objectID, err := primitive.ObjectIDFromHex(id) + if err != nil { + return nil, err + } + + filter := bson.D{{Key: "_id", Value: objectID}} + return filter, nil +} + +var ErrNotFound = errors.New("not found") + +func (s *movieService) GetByID(ctx context.Context, id string) (Movie, error) { + var movie Movie + filter, err := matchID(id) + if err != nil { + return movie, err + } + + err = s.C.FindOne(ctx, filter).Decode(&movie) + if err == mongo.ErrNoDocuments { + return movie, ErrNotFound + } + return movie, err +} + +func (s *movieService) Create(ctx context.Context, m *Movie) error { + if m.ID.IsZero() { + m.ID = primitive.NewObjectID() + } + + _, err := s.C.InsertOne(ctx, m) + if err != nil { + return err + } + + // The following doesn't work if you have the `bson:"_id` on Movie.ID field, + // therefore we manually generate a new ID (look above). + // res, err := ...InsertOne + // objectID := res.InsertedID.(primitive.ObjectID) + // m.ID = objectID + return nil +} + +func (s *movieService) Update(ctx context.Context, id string, m Movie) error { + filter, err := matchID(id) + if err != nil { + return err + } + + // update := bson.D{ + // {Key: "$set", Value: m}, + // } + // ^ this will override all fields, you can do that, depending on your design. but let's check each field: + elem := bson.D{} + + if m.Name != "" { + elem = append(elem, bson.E{Key: "name", Value: m.Name}) + } + + if m.Description != "" { + elem = append(elem, bson.E{Key: "description", Value: m.Description}) + } + + if m.Cover != "" { + elem = append(elem, bson.E{Key: "cover", Value: m.Cover}) + } + + update := bson.D{ + {Key: "$set", Value: elem}, + } + + _, err = s.C.UpdateOne(ctx, filter, update) + if err != nil { + if err == mongo.ErrNoDocuments { + return ErrNotFound + } + return err + } + + return nil +} + +func (s *movieService) Delete(ctx context.Context, id string) error { + filter, err := matchID(id) + if err != nil { + return err + } + _, err = s.C.DeleteOne(ctx, filter) + if err != nil { + if err == mongo.ErrNoDocuments { + return ErrNotFound + } + return err + } + + return nil +} diff --git a/doc.go b/doc.go index 8f4733734..84b0b61fb 100644 --- a/doc.go +++ b/doc.go @@ -27,7 +27,10 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* -Package iris provides a beautifully expressive and easy to use foundation for your next website, API, or distributed app. +Package iris implements the highest realistic performance, easy to learn Go web framework. +Iris provides a beautifully expressive and easy to use foundation for your next website, API, or distributed app. +Low-level handlers compatible with `net/http` and high-level fastest MVC implementation and handlers dependency injection. +Easy to learn for new gophers and advanced features for experienced, it goes as far as you dive into it! Source code and other details for the project are available at GitHub: @@ -35,7 +38,7 @@ Source code and other details for the project are available at GitHub: Current Version -11.1.1 +11.2.0 Installation diff --git a/iris.go b/iris.go index 3cc537b74..496c5eb1a 100644 --- a/iris.go +++ b/iris.go @@ -33,7 +33,7 @@ import ( var ( // Version is the current version number of the Iris Web Framework. - Version = "11.1.1" + Version = "11.2.0" ) // HTTP status codes as registered with IANA. From 0b860fa203bb8e6f389f4205c927164fd301c303 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 2 Feb 2019 04:25:04 +0200 Subject: [PATCH 07/89] minor fmt --- .../bindata_gzip.go | 7118 ++++++++--------- _examples/tutorial/url-shortener/README.md | 3 + _examples/tutorial/url-shortener/factory.go | 2 +- _examples/tutorial/url-shortener/main.go | 2 +- _examples/tutorial/vuejs-todo-mvc/README.md | 2 + .../ryanuber/columnize/columnize.go | 2 +- .../github.com/AndreasBriese/bbloom/bbloom.go | 2 +- .../Shopify/goreferrer/default_rules.go | 8 +- vendor/golang.org/x/net/html/entity.go | 4154 +++++----- .../x/text/encoding/ianaindex/tables.go | 3014 +++---- vendor/golang.org/x/text/language/lookup.go | 2 +- vendor/gopkg.in/yaml.v2/readerc.go | 2 +- vendor/gopkg.in/yaml.v2/resolve.go | 2 +- vendor/gopkg.in/yaml.v2/sorter.go | 2 +- 14 files changed, 7157 insertions(+), 7158 deletions(-) create mode 100644 _examples/tutorial/url-shortener/README.md diff --git a/_examples/file-server/embedding-gziped-files-into-app/bindata_gzip.go b/_examples/file-server/embedding-gziped-files-into-app/bindata_gzip.go index 0e300f6d0..a6699d98f 100644 --- a/_examples/file-server/embedding-gziped-files-into-app/bindata_gzip.go +++ b/_examples/file-server/embedding-gziped-files-into-app/bindata_gzip.go @@ -6,7 +6,6 @@ package main - import ( "fmt" "os" @@ -14,7 +13,6 @@ import ( "time" ) - type gzipAsset struct { bytes []byte info gzipFileInfoEx @@ -57,763 +55,763 @@ func (fi gzipBindataFileInfo) Sys() interface{} { var _gzipBindataAssetsCssBootstrapmincss = []byte( "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xef\x8f\xe3\x38\x92\x20\xfa\xb9\x1a\xe8\xff\x41\x5b\x8d\x41\x57" + - "\x4d\x59\x2e\xf9\x77\xda\x89\xce\xb7\xfb\xe6\x0e\xb7\x03\xdc\xec\x97\x9b\x0f\x07\xf4\xf4\x7b\xa0\x25\xda\xd6\x94" + - "\x2c\x69\x24\x39\x2b\xb3\xfb\xf6\xfe\xf6\x83\xf8\x4b\x41\x32\x48\xd1\x4e\x77\xcf\xdc\x62\xb7\xee\x7a\x9c\x62\x44" + - "\x30\x18\x0c\x06\x83\x41\x32\xf8\xf9\xf7\xff\xf4\xed\x37\xd1\xef\xa3\xff\xb7\xaa\xba\xb6\x6b\x48\x1d\x3d\x2f\xa6" + - "\x8b\xe9\x32\xfa\x70\xea\xba\x7a\xf7\xf9\xf3\x91\x76\x7b\x59\x36\x4d\xab\xf3\x47\x06\xfe\x87\xaa\x7e\x6d\xf2\xe3" + - "\xa9\x8b\xe6\xc9\x6c\x16\xcf\x93\xd9\x2a\xfa\xf3\xd7\xbc\xeb\x68\x33\x89\xfe\x58\xa6\x53\x06\xf5\xdf\xf3\x94\x96" + - "\x2d\xcd\xa2\x4b\x99\xd1\x26\xfa\xd3\x1f\xff\xcc\xc9\xb6\x3d\xdd\xbc\x3b\x5d\xf6\x3d\xc5\xcf\xdd\xd7\x7d\xfb\x59" + - "\x55\xf2\x79\x5f\x54\xfb\xcf\x67\xd2\x76\xb4\xf9\xfc\xdf\xff\xf8\x87\xff\xfa\x6f\xff\xe3\xbf\xb2\x4a\x3f\x47\x9f" + - "\x7f\xff\x4f\x51\x59\x35\x67\x52\xe4\x3f\xd3\x69\xda\xb6\x3d\xb3\xc9\x74\x1e\xfd\x2f\x46\x5b\x54\x17\xfd\xaf\xe8" + - "\x98\x77\xd3\xbc\xfa\xac\x60\xa3\xdf\x7f\xfe\xf6\x9b\x53\x77\x2e\xa2\x5f\xbe\xfd\xe6\xdd\xa1\x2a\xbb\xf8\x40\xce" + - "\x79\xf1\xba\x8b\x5a\x52\xb6\x71\x4b\x9b\xfc\xf0\xf8\xed\x37\xef\xe2\xaf\x74\xff\x25\xef\xe2\x8e\xbe\x74\x71\x9b" + - "\xff\x4c\x63\x92\xfd\xf5\xd2\x76\xbb\x68\x96\x24\xbf\x63\x10\xe7\xd6\x51\xfa\xed\x37\xff\xfe\xed\x37\xdf\x7e\xb3" + - "\xaf\xb2\x57\x56\xcd\x99\x34\xc7\xbc\xdc\x45\x89\x28\x20\x4d\x97\xa7\x05\x9d\x44\xa4\xcd\x33\x3a\x89\x32\xda\x91" + - "\xbc\x68\x27\xd1\x21\x3f\xa6\xa4\xee\xf2\xaa\x64\xbf\x2f\x0d\x9d\x44\x87\xaa\x62\xb2\x3c\x51\x92\xb1\xff\x3d\x36" + - "\xd5\xa5\x9e\x30\xb2\x79\x39\x89\xce\xb4\xbc\x4c\xa2\x92\x3c\x4f\xa2\x96\xa6\x1c\xb7\xbd\x9c\xcf\xa4\xe1\x95\x67" + - "\x79\x5b\x17\xe4\x75\x17\xed\x8b\x2a\xfd\x22\x39\xb8\x64\x79\x35\x89\x52\x52\x3e\x93\x76\x12\xd5\x4d\x75\x6c\x68" + - "\xdb\x4e\xa2\xe7\x3c\xa3\x95\x8e\x97\x97\x45\x5e\xd2\x98\xa1\xf7\xed\x7e\xa6\x3d\xfb\xa4\x88\x49\x91\x1f\xcb\x5d" + - "\xb4\x27\x2d\xed\x21\x20\xe9\x5d\x59\x75\xd1\x87\x1f\xd3\xaa\xec\x9a\xaa\x68\x7f\x8a\x3e\x6a\x24\xcb\xaa\xa4\x3d" + - "\xa9\x13\xed\x35\x67\x10\xcc\x8f\xa7\x3c\xcb\x68\xf9\xd3\x24\xea\xe8\xb9\x2e\x48\x47\x23\x0b\x4f\x56\xc3\x4a\xf6" + - "\x24\xfd\xd2\xcb\xa3\xcc\xe2\xb4\x2a\xaa\x66\x17\x75\x0d\x29\xdb\x9a\x34\xb4\xec\x24\xe4\x8e\xa4\x5d\xfe\xdc\x8b" + - "\x7b\x77\xaa\x9e\x69\xc3\x30\xab\x4b\xd7\x33\x0d\x3a\x65\xbf\x6f\x7e\xec\xf2\xae\xa0\x3f\x71\xd2\x55\x93\xd1\x26" + - "\xde\x57\x5d\x57\x9d\x77\xd1\xac\x7e\x89\xb2\xaa\xeb\x68\x26\x7b\x77\x12\xb5\x5d\x53\x95\xc7\x41\x93\xbe\x8a\xe6" + - "\x6c\x12\x49\x34\x3b\x94\x43\x71\xdb\xbd\x16\x74\x17\xe5\x1d\x29\xf2\x54\x00\x9c\x66\x9a\x86\x4c\xd7\x1b\x7a\x8e" + - "\x92\x47\x85\x92\xff\x4c\x77\xd1\x9c\x9e\x05\xf8\x99\x34\x5f\x18\x82\x68\xed\x77\x49\xc2\x80\x07\x39\xec\xa2\xef" + - "\x0e\x07\x59\x7d\x7b\x26\x05\xd0\x74\x4e\xed\x41\x29\x68\x7b\xe9\x1b\x71\xa9\x19\x44\x5d\xb5\x79\xaf\x3d\xbb\xa8" + - "\xa1\x05\xe9\x05\x66\x70\xb1\x59\x31\xb5\x67\xca\xa0\x3a\x2e\x40\x21\x64\x05\x5d\x55\xef\xa2\x78\xba\x52\x8d\x69" + - "\x2f\x7b\x21\x69\x2e\xe2\x78\x3a\x1f\x0a\xf3\xf3\x11\x74\xc3\xd0\x4d\xed\xf3\x91\x2b\xd7\xae\xa9\xaa\x8e\xeb\x55" + - "\xdf\xa9\x87\xa2\xfa\xba\x8b\xb8\xfe\x08\x50\x3e\x82\x34\xf9\xce\xe8\x39\x5a\x26\xf5\x8b\x94\x3e\xd7\x05\xad\x35" + - "\x72\xe0\xef\xab\x97\xbe\xe1\x79\x79\xdc\x45\xbd\x1e\xd3\x92\x7d\xe3\x23\xbf\xfa\xd9\x57\xee\x28\x12\x95\xd6\x82" + - "\xa7\x81\x6b\x72\xe9\x2a\x51\x98\x56\xbd\x41\xf8\xb2\xcf\xfa\x41\x49\x27\x51\x4b\xce\xb5\x6d\xaa\xce\x55\x59\xb5" + - "\x35\x49\xe9\x64\xf8\x69\xf4\xd6\x4c\x49\x72\x7f\xe9\xba\xde\x28\xe4\x65\x7d\xe9\x26\x51\x55\x77\xdc\x82\x44\x2d" + - "\x2d\x68\xda\xf5\x63\xed\xa5\x23\x0d\x25\xba\xad\x92\xf4\x7a\x03\x70\xa2\x4d\xde\x3d\x0e\x6a\x27\xbe\x68\x15\x18" + - "\x6d\x7a\xce\xdb\x7c\x5f\x50\x83\x07\x5e\x25\x57\x87\xde\x74\xb2\xd1\x7a\xa8\x9a\xb3\x36\xb6\x25\x34\xb3\xd3\x8c" + - "\xed\x1f\xbb\xd7\x9a\xfe\xc0\xbf\xff\x34\x81\xdf\x1a\xda\xd2\x4e\xff\xd4\x5e\xf6\xe7\xbc\xe3\xa3\x58\xf6\x26\xa9" + - "\x6b\x4a\x1a\x52\xa6\x74\x17\x71\x32\xac\x39\x97\xa6\xed\xdb\x53\x57\x79\xd9\xd1\x46\xab\xfe\xc7\x2c\x6f\xc9\xbe" + - "\xa0\xd9\x4f\x1a\x23\xea\x2b\x1f\x86\x82\x40\x46\x0f\xe4\x52\xe8\x02\xd9\xed\x98\x9e\x1c\xaa\xf4\xd2\xc6\x79\x59" + - "\xf6\xc6\x9b\xd1\xb0\x0b\xf8\x00\x24\x59\xc6\x54\x86\x8f\x68\x43\xef\x19\x26\x83\xd3\x06\x20\x9f\xd8\x20\x0c\x97" + - "\x41\x7a\xa2\xe9\x97\x7d\xf5\x62\x08\x8b\x64\x79\xa5\x0b\x06\xea\xaa\x32\x79\xb8\x96\xeb\xc5\xee\x92\xa1\x21\x36" + - "\x5f\xe5\xe5\xbc\xa7\xcd\x4f\xbb\x9d\xac\x9f\xb5\x3f\x6e\xeb\xbc\x8c\x35\x45\x75\x80\x57\x97\x4e\x07\xff\xf6\x9b" + - "\x77\x70\x08\x83\xa1\x04\x35\x82\x92\x26\x3d\xb9\x1b\x7e\x9f\xf1\xfd\xe8\xd0\xb7\x5e\xd3\x0f\x39\x2d\x32\x27\x63" + - "\x43\xfb\xf8\x87\x38\xed\x31\x0b\x4c\x22\x2e\x8c\x8c\xa6\x55\x43\x7a\x03\x2e\x24\x82\x71\x02\xc6\x18\x63\xa8\xa5" + - "\x9d\xae\x7a\xd3\xc5\x8a\x9e\xa3\xe9\x7a\xce\xfe\x67\xb3\xa2\xe7\x47\x68\x13\xa2\x79\xfd\x02\x95\xb3\x9f\x14\xdb" + - "\xaa\xc8\xb3\xa8\xcd\x8b\x67\x35\x80\x0a\x7a\xa4\x65\x16\xa0\xd4\x9a\xe5\x41\xed\xa1\xb4\x56\xbe\x49\xb6\xeb\x07" + - "\x24\x9c\xb3\x7b\x7b\x68\x56\xda\xfb\x07\x05\xa9\x5b\xda\x77\x19\xff\x25\xd1\xb3\x49\xd4\x9d\x0c\x6e\x59\xd9\xbb" + - "\xde\xcd\xfc\x1f\xd5\xa5\xe9\x65\x87\xb8\xab\xa7\xd5\xbe\xfe\xdc\xdb\x86\x55\xbc\xaf\xf2\x82\x36\xcc\x65\xd1\xdc" + - "\xd6\xb6\x49\x3f\xa7\x6d\xfb\xb9\xf7\xd5\x98\x9f\xda\xfb\x9f\xff\x7c\xa6\x59\x4e\xa2\xba\xc9\x4b\x2e\xff\xdf\x4f" + - "\xa2\x1d\x39\x30\x37\x6f\xb7\xa7\x87\x4a\xcc\x10\x70\x96\x8f\xfe\x29\x3f\xd7\x55\xd3\x91\x92\x19\x62\x6e\x3e\xdb" + - "\x13\xc9\x7a\x81\xf5\xfd\x6a\x02\x40\x97\x20\x89\x2c\x7c\x6d\x18\xf8\xc8\xb8\xcb\xbf\xfd\xe6\x5d\x2f\x24\xd2\x3b" + - "\x56\xbd\xb9\xef\x28\xef\x73\xce\xdb\xa0\x90\x3b\xee\xf5\x73\x97\x80\xa3\xfc\x78\x6a\xe8\xe1\x27\xde\x66\xd9\x54" + - "\x36\x8e\x76\xd1\xfb\xe8\xc3\xfb\x88\x74\x5d\xf3\xa1\x87\xf9\x18\xbd\xff\xf8\x5e\x62\x0d\x1e\xda\x08\x26\x03\xd2" + - "\x50\x59\x85\xff\xdf\x0f\xef\xff\x4a\x9e\x49\x9b\x36\x79\xdd\xed\xde\xff\x24\x65\xae\x4a\xbf\x7b\xef\xa0\x2c\xe9" + - "\x30\x27\xf8\x6f\x97\xaa\xa3\x6c\x7e\xe6\x60\xf6\x68\xf8\x6e\xbb\xdd\x32\xe9\xd5\xe4\x48\xe3\x7d\x43\xc9\x97\x38" + - "\x2f\x7b\x67\x7f\x17\x91\xe7\x2a\xcf\x04\xb9\xae\x77\xea\x39\x11\xe5\xe3\x32\x6d\x8e\xb9\xb7\x1f\x33\xdd\x17\xc0" + - "\xf9\xf9\x38\x89\x3a\xc1\xda\x08\x61\xe9\x3d\xbd\x3b\x93\x97\xf8\x6b\x9e\x75\x27\xbe\x32\xb1\x7b\xef\x34\x9f\x44" + - "\xa7\xc5\x24\xe2\x23\xec\x5d\xd5\xd4\x27\x52\xb6\xbb\x68\xc1\xf8\xff\x9a\x67\xd5\xd7\xfe\x2f\x0d\xda\x62\x81\xc9" + - "\x4c\xe7\x00\xcc\xf4\xa6\x77\x7a\xb0\xb9\x98\x96\xe4\x79\x4f\x1a\x43\x14\xdc\x5c\x71\x80\x7d\x57\x3e\x4d\x53\xd2" + - "\xd0\x6e\x12\x4d\xb3\xa6\xaa\x2f\xf5\x13\xf8\x08\x7b\x22\xee\xaa\x3a\xc6\x87\x8e\xa4\x56\x90\x3d\x2d\x9c\xbd\x97" + - "\xf4\xa6\x85\x03\x0e\xb6\xc5\x6d\x47\x10\xfa\x1c\xad\xb7\x2c\xf2\xe7\xc9\x14\x85\xe2\x10\x17\x08\x57\x03\x5e\x27" + - "\xcd\x00\x29\xf0\xed\xe4\x6c\x41\x96\x65\x16\x4d\x66\xec\xfe\x59\xf8\x91\x29\xb5\xbd\xca\xef\xff\x5b\xf1\x5a\x9f" + - "\xf2\xb4\x2a\xdb\xe8\x5f\x49\x71\x28\xf2\xf2\xd8\x7e\xdf\xeb\x41\xdb\xa4\xbb\xe8\xd2\x14\x1f\xa6\xd3\xcf\x3d\x4a" + - "\xfb\xf9\xa8\x40\xe3\x93\x04\x8d\x1b\x7a\xbc\x14\xa4\x99\xd2\xaa\xfb\x78\x1b\xda\xff\xf3\x5d\x4e\x0f\xf9\xcb\xc7" + - "\xbe\x59\xbd\x5b\x48\xba\x0f\xdf\xd3\xf3\x9e\x66\x19\xcd\xe2\xaa\xa6\x65\x3f\x07\x7e\xff\xb1\x5f\xfd\xbe\x0b\x27" + - "\xfc\xb5\x3a\x1c\xe6\x1f\x23\x49\x90\xfd\x79\x13\x11\x9d\xc6\xd5\x24\xba\x0e\x50\xe8\x9a\x0b\xbd\xa9\x35\xed\xf3" + - "\xf1\xbb\x01\xe0\xff\x57\x00\xa2\x5c\x93\x5d\xfb\x7c\xfc\xfe\xa3\xe8\xfa\xa9\x42\xf2\xac\xf7\xd8\x22\x6d\xc6\x67" + - "\x79\x67\x04\x20\x50\x6b\xe0\xa2\x97\xfb\xa9\x8f\xe6\x24\xbe\xe4\xcb\x57\xcd\xa5\x9d\x41\x3f\x8a\xd3\x38\x57\x55" + - "\x77\x62\x13\x33\x29\xbb\x9c\x14\x39\x69\x69\xa6\x3c\xb5\xaa\x7d\xb1\xe0\x8e\x0d\x79\x6d\x53\xa2\x16\x20\x43\xe3" + - "\x63\x36\x31\xe7\xed\x17\x38\xd3\x0e\x96\xfe\x2f\x73\xf2\xde\xc6\xa9\x8b\x4b\xeb\x82\xdf\x23\xf0\xf4\xd2\x08\xf0" + - "\x49\xa4\x7f\xae\x5c\x64\x12\x92\x22\x84\xce\x79\xe9\xae\x79\x3e\x9b\x23\x28\x69\x51\x5d\x32\x17\xca\x3a\x99\x61" + - "\xec\x96\xcf\xb4\xa8\x6a\xea\xc2\xda\x24\x5b\x4c\x28\xb4\x4c\xf3\xc2\x8d\x73\x40\x70\x8e\x05\x69\x5d\xed\xa1\x09" + - "\xca\xdc\xf9\xd2\xe6\xa9\x1b\x05\x13\x01\xf7\x89\xdd\x38\x0b\x04\xe7\x44\x49\xd3\xb9\x51\x56\x58\x35\x1d\x69\xdc" + - "\x18\x6b\x07\x46\x4c\xcf\x75\xf7\xea\xc6\xdb\x20\x78\x97\x96\x7a\x6a\x7a\x40\x30\x0e\x79\x71\x76\x63\x60\xdd\xd9" + - "\x9d\xe2\x82\x34\x47\x97\x12\xd0\x64\x96\xa0\x58\x6e\x78\xac\x37\xfb\x5a\xf2\xd6\x2d\x68\x54\xa5\x2b\xd7\x60\xa5" + - "\xc9\x0c\xeb\xcb\x86\x9e\xab\x67\x4f\x43\x96\x08\xce\xcf\x55\x75\x8e\xf3\xd2\x8d\x84\x69\x00\x43\xaa\x2e\x9e\xe6" + - "\x60\x5a\x50\x1d\x0e\x6e\x04\xac\xfb\xdb\xfc\x58\x12\xd7\x48\xa3\xc9\x0c\x53\x80\xb4\x3a\xba\x11\xd0\xfe\x6f\x48" + - "\xeb\xee\xcc\x39\xd6\xf9\xa7\xea\xec\x96\xf2\x1c\xeb\xfe\x43\x5e\x78\x30\xb0\xbe\xef\x72\x5f\x1d\x68\xef\x57\xc4" + - "\x65\xff\x68\x32\xc7\xfa\x3e\xab\xbe\x96\x45\x45\xb2\x98\x14\xee\xae\x9c\x63\x0a\x20\x31\xdd\x58\x98\x02\x5c\x6a" + - "\x3f\x0e\xa6\x03\x79\xb9\xaf\x5e\xdc\x28\x98\x0a\xf4\xb3\x77\x9c\xe6\x4d\xea\x93\x39\xa6\x0a\x0d\xad\x29\x71\x4b" + - "\x62\x81\xe9\x42\x43\x0f\x0d\xf5\x28\xd0\x02\x53\x87\xde\x14\x78\x85\xbe\xc0\x54\xa2\xf7\x43\xdc\x18\x98\x4a\x1c" + - "\x0a\xe2\x1e\x0d\x0b\x4c\x25\xfa\x05\x58\x7d\xaa\x4a\xea\x9e\xad\x16\x98\x42\x3c\x57\xc5\xe5\x4c\xbd\x43\x7c\x81" + - "\xa9\x84\xc0\xeb\xf5\xc9\x8d\x88\xe9\x85\x40\xbc\xd4\x6e\x34\x4c\x37\xfe\xd6\xa4\x55\xe6\x56\x8b\x05\xa6\x16\x7b" + - "\xe2\x47\x5a\xa2\x13\x84\x47\xf2\x4b\x74\x86\x20\x47\xb7\xcc\x97\x98\x3e\xec\x2b\xcf\x04\xb1\xc4\xf4\xa1\xc7\x38" + - "\x93\xc6\x83\x85\xe9\x04\x0b\xd8\xb8\x51\x30\x75\x48\xc9\x99\x36\xc4\x8d\x83\xa9\x02\x8b\xba\x3b\x31\x30\x1d\xd8" + - "\x57\x85\xdb\x9a\x2c\xb1\xee\xe7\x9b\x50\x6e\x1c\x74\x82\xa0\x2f\x9d\xf4\xd2\x5d\x88\x2b\x54\x05\x7a\x44\x1e\x85" + - "\x70\xe2\x61\x9a\xc0\xf6\x93\xe2\x82\x1e\x3c\xf5\x61\xfa\xc0\xf1\x52\x5a\x76\x1e\xaf\x69\x85\xe9\x05\xc7\x6c\xfc" + - "\x4d\xc4\x54\x83\x23\xfe\xf5\xd2\x76\xf9\xc1\xed\xdb\xad\x30\x15\xf1\xba\x43\x2b\x4c\x41\xf2\x32\xa3\x65\x37\x22" + - "\x18\x7c\x0e\x61\x88\x23\xed\x43\xdd\x49\x92\xd2\x7e\x26\x8e\xd9\x06\xb1\x1b\x17\x5d\x27\xe4\x69\x77\x69\xdc\x66" + - "\x63\x8d\xe9\xcc\x99\xd4\x71\x3f\x42\x3d\x3d\xb8\x46\xfb\x9e\xef\xc3\x3b\x71\xb0\x5e\xef\x7c\xc3\x7a\x8d\x75\x37" + - "\xcd\x72\x0f\x06\xba\x56\x38\x11\x9f\x08\xb0\x6e\x66\x7b\x38\x6e\x14\xac\x83\xbd\x6e\xef\x1a\xeb\xd8\xb6\xa3\x75" + - "\xbc\x27\xe9\x97\xaf\xa4\x71\xdb\x90\x35\xd6\xaf\x07\xd2\x76\xe3\xa8\x1b\xac\x77\xc7\xb1\x30\x7b\xc0\xa2\x11\x4e" + - "\x0c\x4c\x1b\x6a\x72\x69\xdd\x02\xd9\x60\xca\xd0\x76\x95\x7b\x2a\xdd\x60\xca\x70\xa8\x1a\x7f\x5b\x30\x7d\x60\xc2" + - "\x1b\xc5\xc4\xd7\x90\xb4\x1e\xc7\xc4\xb4\x83\xfe\x95\xa6\x6e\xb5\xdd\xa0\xab\x88\x13\x7d\x6e\xaa\x11\x23\xbc\xc1" + - "\xb4\x43\x62\xfa\x8d\xcd\x03\xa6\x1d\x75\x71\x69\xd9\x9a\xc7\x8d\x86\x06\x0a\xf2\x72\x14\x0f\x53\x12\xbe\x5a\x1c" + - "\x41\xc4\x54\xa5\xfa\x32\x82\x84\x69\xcb\xdf\x2e\xb4\xed\x72\xb1\xa8\x73\xa3\x62\x3a\x93\x97\x87\x6a\x04\x0d\x55" + - "\x98\xb4\xa1\xb4\x6c\x4f\x95\xa7\x1b\x30\x75\x11\x72\x19\x59\x40\x3c\x60\x6a\x53\x7d\x19\x45\xc3\x1d\xcc\x72\x0c" + - "\x6f\x8b\x29\x0c\x69\x9a\xea\xab\x5f\x47\xb7\xa8\x83\xc1\xf0\xfc\x1a\xba\x45\x67\x19\x86\xe8\xf1\xb9\xb7\xa8\x77" + - "\xc1\xb0\xbc\x2e\xfe\x16\x53\x19\x36\x77\x78\x97\x49\x5b\x4c\x5d\x1a\xca\x4e\xa6\x1d\x2e\x85\x3b\x74\xb0\xc5\x14" + - "\x46\x20\xb2\xd3\x43\x6e\x4c\xd4\xc2\xbc\xa4\x05\x39\x93\x51\xfd\x9e\xa1\x91\xbe\x63\xee\xee\xc0\x19\x1a\xe8\x2b" + - "\x28\x71\xae\xb3\x66\x68\x98\xef\x90\xbb\xa7\xe1\x59\x82\xce\xf5\xaf\x94\x6d\x3d\xb8\xb1\x30\xe1\xf7\x58\x69\x51" + - "\xb9\x67\x9f\x19\x1a\x20\xfc\x4a\x9a\x32\x2f\x8f\x23\xc2\xc3\x44\x5f\x17\xa4\xf4\x54\x86\x1a\x77\x52\xd0\x32\x73" + - "\xc7\x30\x67\x68\x9c\xb0\x21\x65\x56\x39\x63\x8b\x33\x34\x4a\x98\x56\xe7\x33\x75\x3b\x59\x33\x34\x54\x78\x26\xc7" + - "\x92\x7a\x70\xd0\xe0\xb7\x98\x75\xdc\x43\x73\x86\x46\x0c\x25\x9e\x6f\x70\xce\xd0\xb8\x61\x43\xbb\xaf\xd4\xc7\x26" + - "\xee\x0d\x56\x75\xdd\xf7\x73\xea\x09\x3a\xcf\xd0\xe0\xe1\xa1\x2a\xd8\x36\xa4\x57\xb7\xd0\x28\xa2\xc0\xf4\xea\x32" + - "\x1a\x4a\x14\xf6\x40\x9e\xf3\x73\x23\xe3\xb1\x24\x86\x7c\xaa\x9a\xfc\xe7\xaa\xec\x3c\xe8\x78\x88\x31\x73\x3a\x39" + - "\x33\x34\xc2\xb8\xbf\x14\xc5\xa9\x6a\xdc\x4d\x44\xa3\x8c\x7b\xea\x36\x75\x33\x34\xca\x98\xf6\xd2\x38\xe4\x29\xe9" + - "\xdc\xdd\x80\x06\x1b\xbb\xd3\xe5\xbc\x6f\x7d\x1a\x8a\x46\x1a\x05\x9a\x57\x41\xd1\x60\xe3\x89\x94\x99\x7f\x8e\x9b" + - "\xa1\x01\x47\x86\xe7\x9b\x53\x67\x68\xd0\x91\xa1\xf9\x1a\x87\x29\x09\x43\xf2\x36\x0d\x8d\x39\x72\x5f\x21\x64\x1a" + - "\x9f\xa1\xe1\x47\x0d\xdf\xdb\x54\x34\x0e\xa9\xa1\x7b\x9a\x8c\x86\x24\x35\x64\x7f\xd3\x31\x2d\x3a\x16\xd5\xde\xad" + - "\x78\x68\x68\xf2\x6b\x43\x4b\xf7\xae\xd8\x0c\x0d\x4b\x76\xa4\xfd\xe2\x8c\xc6\xcd\xd0\x80\xe4\x21\x2f\x3c\x71\x97" + - "\x19\x1a\x8d\xdc\x37\x39\x3d\xa4\xc4\x63\xd1\xd0\x80\x64\xef\xda\x70\xef\xd6\x89\x87\xc6\x24\x33\xd2\x9e\xf6\x95" + - "\x67\xfd\x34\x43\x23\x93\x35\xa9\x69\x93\x16\xb9\xbb\xa7\xd1\xf0\x24\xdb\x59\xf4\xef\xfa\xcd\xd0\x28\x65\x91\x97" + - "\xce\xf5\xff\x0c\x8f\x50\x9e\x2a\x8f\x13\x80\x46\x28\xeb\x4b\x7b\xaa\xdd\xfb\x5e\x33\x34\x44\x79\x69\x3d\xa2\xc3" + - "\x3a\xf8\xb8\xf7\x08\x0d\xeb\xda\xb6\xf2\x4c\x8c\x68\x94\xb1\xc7\x88\xf7\xaf\x31\x29\xea\x13\xd9\x7b\x66\x64\x34" + - "\xd6\x68\x62\xfb\xdc\xed\x19\x1a\x75\x94\x14\xf8\x69\x1c\x27\x2a\x1a\x73\x80\xa8\xfe\x9a\xd1\xf5\x81\xe4\xbd\xeb" + - "\x9a\x7c\x7f\xe9\xdc\x7b\x16\x33\x34\x02\x69\xe3\xfb\x79\x40\x35\xa2\x64\xe1\x2a\xea\xd6\x0b\x34\x22\x49\x5f\x6a" + - "\x52\x7a\x70\xf0\x9d\x4d\x7e\xee\xca\x6f\x35\xd1\x50\xa4\x42\xf5\x58\x6b\x34\x1c\x59\x54\x47\xcf\xe6\xf0\x6c\x8d" + - "\xee\x75\x16\x9e\x0d\xd5\x19\x1a\xbd\xec\xab\xf1\x6c\x27\xcf\xd0\xf0\x65\x49\xbf\xc6\x5f\xf3\x32\xab\xbe\xba\xf1" + - "\x70\xcf\x35\xad\x3c\x26\x10\x0f\x63\x12\x77\x80\x71\x86\x46\x31\xbd\xee\x26\x1a\xc4\xec\xeb\xf0\xb0\x85\x6e\x67" + - "\xb0\xa3\x6e\x6e\x1c\x4c\x17\xe8\x8b\x17\x07\x8d\x5b\xb6\xd4\xa3\xac\x68\xcc\xf2\x50\x54\x75\xfd\x1a\x67\xee\x03" + - "\x47\x74\x86\x86\x2e\x05\xa2\x5f\x18\x68\x04\x53\x60\xfa\x0f\x41\xcc\xf0\x50\xe6\x50\xa9\x1b\x11\x0d\x67\x72\x44" + - "\x6f\x67\xa3\xd1\xcc\xb4\xa1\x59\xde\xf5\xeb\x20\x4f\x2b\x31\x2d\xe1\x57\x47\x3c\x96\x16\x8f\x67\x5e\xba\x82\x36" + - "\xee\x79\x18\x0d\x65\xf2\xc3\xb8\x4e\x1c\x34\x86\x99\x56\xe7\xba\xa1\x6d\xeb\xe9\x3c\x34\x88\x49\x49\xe3\x9f\xc4" + - "\xd1\x10\x26\x43\xf1\x1a\x6d\x34\x80\xd9\x55\x5f\x7d\xed\x42\xe7\x9a\x8e\x74\xee\xe9\x05\x0d\x5b\xb6\x99\x7f\xd7" + - "\x68\x86\x46\x2d\x4f\xa3\x58\xa8\xed\xb8\xec\xd9\xe1\x6f\x0f\x8b\xe8\x2e\x08\x3b\x91\xdb\x76\xb4\xf1\x55\x88\xfb" + - "\x29\x17\xb6\x74\x29\xf6\x6e\xa5\x42\x63\x96\x1c\x71\x15\xcf\xdc\x68\xb8\x9f\xd2\xa3\xad\x7d\x68\xb8\x73\xd2\xa3" + - "\x6d\x7c\x68\xe8\x22\x45\xde\xee\x8d\x7d\xbb\xe5\x33\x34\x6a\xd9\xd0\x63\xde\x76\xfc\x0a\xc0\x08\x3a\xba\x73\x5e" + - "\x54\x97\x6c\xf4\x7c\xcd\x0c\x0d\x43\x72\x5c\xff\x29\x9b\xd9\x16\x53\x84\xae\xa1\x34\x4e\xab\x32\xf7\x59\x96\x2d" + - "\x7e\x7c\x8a\xd2\x38\xa3\x69\x9e\x5d\x2a\xe7\x91\x4d\x3a\x4f\x50\x63\xe1\xe4\x72\x8e\x06\x4a\x7b\xfb\xec\x3d\x4a" + - "\x35\x47\xa3\xa5\xbd\x75\x1e\x41\x43\x97\x21\xf4\x99\x16\x1e\x8f\x69\x8e\x86\x4d\x7b\xd5\x71\x63\xa0\x2b\x11\xd2" + - "\xba\x63\x29\x73\x34\x5c\x4a\x0a\xea\x9e\xc2\xe7\x68\xf8\x92\xfe\xed\xc2\x6e\x82\x3b\xbb\x77\x8e\x46\x30\xbf\xe4" + - "\xa5\xf3\x1c\xcb\x1c\x0d\x5f\xfe\xed\xe2\x59\x97\xe2\x47\x77\x6b\xe2\x76\x68\xe7\x68\xdc\x72\x9f\xb7\x27\xf7\x7e" + - "\xe5\x1c\x8d\x58\x7e\x29\x7d\x91\x92\x39\x1a\xb0\xdc\x93\xfd\x6b\x7c\xa8\x9a\xf3\xa5\x70\x9e\x66\x99\xa3\xf1\xca" + - "\xce\x1d\xf7\x9d\xaf\x0f\xd8\x61\xeb\x7d\x41\xd2\x2f\xde\xe5\xf9\x1c\x0d\x53\xee\xdd\x73\xed\x1c\x0d\x4d\x92\xba" + - "\x76\x8e\x85\xc3\xc3\x01\x3b\xbf\x4c\x1b\x4f\x90\x62\x8e\x06\x24\x4f\xd5\xa5\xf1\x1d\x7b\x9e\x2f\x66\xd8\x11\xf2" + - "\x82\x9c\xdd\xfd\x8a\x46\x24\xb3\x4b\x5d\x78\xe3\x91\x73\x34\x1e\x59\xe7\xc7\xe3\x6b\xbc\x27\xee\x58\xc3\x1c\x0d" + - "\x48\xb6\x69\xde\xb6\x55\xe3\x36\x75\x68\x34\x72\x9f\x77\x69\xe5\x5e\x49\xcd\xd1\x50\xe4\xbe\x73\x1e\x55\xc2\x11" + - "\x5e\xf6\x6e\xfd\x46\x11\x5e\x9d\x43\x35\x49\x08\xd6\xfa\xbf\x3a\xad\x9b\x03\xa1\xb9\xec\x9d\xca\x36\x4f\xf6\x19" + - "\x8e\x72\x1d\x02\xbb\xf1\xe0\x6c\x38\x1a\x42\xcd\x53\x1a\x17\x55\x51\xb8\x6d\x35\x1a\x39\x55\x68\x71\xd7\x5b\x6d" + - "\xf7\xc0\x43\x03\xa7\x34\xbb\xa4\xfc\x6a\xa0\x13\x0d\xdd\x6f\x67\xa9\x31\x02\xb6\x12\xe6\x68\xc8\x54\xa0\x8f\x6d" + - "\x63\xcc\xd1\xe0\xe9\x99\x96\x97\xf8\x44\xce\xfb\x4b\x73\xf4\xcc\x1d\x68\x10\xf5\x5c\x65\xa4\x18\x59\xa2\xcf\xd1" + - "\x58\x6a\xe5\xbc\x5f\x41\xe7\x68\x20\xf5\xd8\x10\xcf\xe0\x42\x83\xa8\xed\xa5\x64\xe6\xc9\xed\x33\xcf\xf1\x83\x9d" + - "\x32\xf7\x89\x1b\x0d\x3d\xde\xd9\xa3\xf1\xbb\x6f\x4e\x3c\xf4\x1c\x78\x8f\x07\x6e\x12\x3a\x91\x51\xcd\xd9\xff\x95" + - "\xa6\x9d\x38\xa5\xe7\x39\xe0\x33\x47\xa3\xaa\x1a\xb6\xc8\x56\xe1\x24\x80\x29\x8f\x46\x20\x40\x7d\xd1\x98\xab\x46" + - "\xc4\xb7\x59\x31\x47\xcf\x88\x6a\xe8\xa3\x63\x00\x0d\xe2\x6a\x24\xbc\xdb\x2d\x73\xfc\x00\x69\x93\x93\xf2\x58\xd0" + - "\x11\x5c\xfc\x0c\xa9\xc4\xf5\xb6\x1c\x0d\xed\x2a\xd4\x91\xae\x43\xa3\xba\x0a\xd9\xa7\x35\x68\x50\x37\xad\xca\xb6" + - "\xf2\x98\x63\x3c\x94\x7b\xa9\x69\x23\x2e\x28\x3b\x11\xd1\xd9\xf8\xb2\x1f\x43\x43\x4d\x53\x6f\xd6\xfc\x22\x45\xcf" + - "\x19\xf6\x68\x23\xbd\x88\x69\x10\xc3\xf3\x85\x6d\xe7\x68\xd8\x96\xa1\x79\x16\x20\x43\xc8\xf6\xf7\xac\xf0\x57\x4a" + - "\x6e\x21\xea\xc0\xae\xea\xff\xba\x35\xea\x09\xab\x44\x82\x97\xa4\xd6\x32\x4e\x74\xa4\x8e\x4f\xf9\xf1\x54\xb0\xe5" + - "\xba\xb8\x5c\xdc\x1c\xf7\xe4\x43\x32\x89\xc4\xff\x93\x57\x41\x55\x66\x2a\xed\x26\xe7\xfb\x7f\xa5\xc5\x33\xed\xed" + - "\x42\xf4\x6f\xf4\x42\xdf\x4f\x22\xf5\x61\x12\xfd\x4b\x93\x93\x62\x62\x24\xc9\x82\xec\x2c\x39\x3b\xfa\x55\xce\xe9" + - "\x72\xfe\xb0\xda\xcc\x96\x0b\x90\x3c\xe6\xbb\xc5\x62\xf1\x88\xe6\x6e\xfa\xee\x70\x38\x48\x0e\xf5\xa4\x35\x68\xaa" + - "\x1a\x8d\x79\x90\xa4\x06\x70\x05\xbe\x6a\x8c\xe9\x09\x6c\x88\xd0\x28\xc9\xde\x86\xec\x37\x8f\x32\x45\x0d\xcc\x63" + - "\x00\xf3\x4f\xed\x58\xfe\x16\x3d\xa9\x94\x24\x31\x5f\xac\xe6\x9b\x14\x25\x01\x52\x21\x40\x3a\x0c\x5d\xe5\xa4\xea" + - "\x4e\x79\x29\xb2\x4d\x3d\xc2\xef\xab\xfa\x85\x25\xc7\x88\x86\xeb\xb1\xe9\xa5\x8d\x1b\x76\x92\xa4\xaf\x1b\x40\xc7" + - "\xd5\xe1\xd0\xd2\x6e\x17\xc5\x73\x95\xef\x08\xc9\x88\xa4\x72\xb4\x88\x8c\x01\x66\x32\xa7\x73\x9e\x65\xc3\x2d\xda" + - "\x94\x34\xd5\xa5\xa5\x05\x4f\xdb\xf2\x34\xcd\x3b\x7a\x7e\x22\x4f\x2c\x35\x01\x5e\xc8\x8b\xf2\xf3\x31\x6e\x68\x5b" + - "\x57\x65\x9b\x3f\xd3\x09\xbb\xe0\x7e\xba\x9c\xf7\x25\xc9\x8b\x48\xe2\xab\x2f\x4f\x92\x19\x3d\x77\x19\x4f\x45\xa2" + - "\xe5\x33\x78\xc4\x53\xbf\xf0\xfa\x7a\xd5\x12\x29\x29\xc4\x88\x6a\x48\x96\x5f\xda\x5d\xb4\x56\x12\x61\x90\x03\x2b" + - "\xbf\xf8\xae\x3d\x8f\xd4\xad\xa5\xbe\x19\x1f\x0d\xb8\xfa\xe3\xd9\x55\xbe\xcb\xb2\xec\xd1\x6e\xc6\xd2\xb0\x00\x0d" + - "\x29\xe5\x9d\x6e\x52\x14\xd1\x74\xde\x46\x94\xb4\x34\xce\xcb\xb8\xba\xb0\x41\x10\x57\x21\x50\x23\x20\x50\x74\xfc" + - "\x14\x03\x26\xe3\x95\x4a\x33\x26\xb2\x6c\x71\x8d\x63\xf3\x68\x34\x17\xc6\x4b\x7c\x93\x19\xc0\xe4\x67\x95\x27\x06" + - "\x34\x5a\xde\x4c\x97\x22\xa1\x54\x69\x65\xdb\xc4\x55\x59\x70\x8b\x36\x5c\x6b\x27\xfb\xb6\x2a\x2e\x1d\xbb\xd6\x2e" + - "\xbb\x8d\x93\x57\x1d\x52\x1b\xf9\x8a\x60\xb2\x9b\x58\x94\x9a\xc9\xc5\x98\x25\x2b\xf2\x7a\x17\x35\x34\xed\xa0\x71" + - "\xc5\x32\xdc\x48\xde\xf8\x48\x25\xfd\x12\x50\x66\xa3\x43\x8a\x06\x53\x30\x34\xa3\xed\x48\x97\xa7\xa0\x11\x52\xd7" + - "\x4c\xdd\xd3\x32\x77\x59\x89\xb8\x06\xb6\xc1\x38\xf9\xb1\xa9\x0a\x95\x56\x8b\x5b\x30\x34\x23\xd6\xf4\x34\x9b\x44" + - "\xd3\xd3\xbc\xff\xcf\xa2\xff\xcf\xb2\xff\xcf\xaa\xff\xcf\x7a\x12\xf5\x85\x32\x8d\x48\x5f\xd2\x17\x9c\xd6\xe3\x26" + - "\x5a\x26\x01\x58\x61\x49\x00\xa6\x33\x67\xbe\xb1\xe9\x69\x16\x4d\xd9\xe1\xd4\x9e\x81\x59\xa4\x7e\xce\xc1\xe7\xf9" + - "\xf0\x79\x01\x3e\x2f\x86\xcf\x4b\xf9\xb9\xb7\x46\xa7\xe5\x50\xb0\x02\xf0\xab\xe1\xf3\x1a\x7c\x5e\xcb\xcf\x80\x15" + - "\xc5\x09\xcb\x93\x32\x7c\x56\x9c\x00\x46\x06\x3e\x06\x36\xa2\x81\x87\x81\x85\x9e\x96\xe2\x01\xb0\x20\x39\x18\xa4" + - "\x3c\x9a\x52\x41\x5a\x99\xcd\x66\x83\x77\xeb\xd0\x8f\xa1\xe3\x75\x36\xa4\xd2\xbb\x4b\xa7\x0c\x34\xfa\x76\x2b\x22" + - "\xa1\xd2\x34\x5d\xa4\xf5\xea\x77\x8a\x3b\x5d\x63\x75\x2d\x85\x2d\x9d\x05\xb4\x74\x09\x78\xbf\x55\x6f\xa0\xf6\x61" + - "\x1d\x1f\x05\x76\xbb\xca\xcd\x08\xfb\x54\x64\x95\x04\x00\x0b\x30\xe5\xb1\x3e\x9e\x5b\x10\xb0\x85\x0b\xa5\x05\x30" + - "\x0d\xe5\x12\xca\x80\xb5\xc1\xf4\x49\x1f\x00\xc4\x8a\xb5\xc1\x84\x80\x34\xd6\xba\x9d\x10\x10\x83\xbb\x52\xeb\x9e" + - "\x4a\x94\x68\xdd\x50\xc8\xdc\x49\x8e\x49\x04\xd2\x5c\x83\x4f\x72\xa0\x2c\x50\xb3\xb3\x14\xe4\x45\x8e\xae\x0f\xd1" + - "\x39\x2f\xf9\xac\x1f\xed\x36\xeb\x87\xfa\xe5\x23\xab\x73\xa8\x5d\x93\xd0\xac\x67\x4f\x25\xdb\x91\xbd\x86\xa7\xe1" + - "\x1c\xba\xec\x4c\x9a\x2f\x93\x48\xe5\xf6\x1c\xb2\xb1\xcd\x79\xfe\x35\xcc\x55\x48\x0f\x0f\x74\x21\x09\x30\x2f\xb3" + - "\x5f\xc5\x31\x7c\xf6\x97\x70\xdf\xfa\x8f\x1a\x14\xcf\xd5\x6b\x82\xb1\xaf\x1a\x1c\xbf\x3d\x69\x01\xf2\xcf\x1a\xa4" + - "\xb8\xf4\x68\x81\x8a\xef\x1a\x6c\x59\x7d\x6d\x08\xef\xd6\xaf\xa7\xbc\xa3\x2c\x55\x1b\x4b\x0f\xd3\x7f\xd7\x9b\x53" + - "\x7d\xa5\x4d\x4a\x5a\x3a\x10\x06\xd9\x22\x55\xa9\x86\x73\xa9\x6b\x0f\x8e\x2a\xd5\x1b\x4a\x6a\x76\x19\xf6\x67\x1c" + - "\x69\x28\xd6\xb0\xce\x17\x99\xed\x0c\x31\xab\x0c\xa2\x6e\x72\x95\x83\x57\x5f\x5a\x48\xcf\x5f\x83\xc3\x56\x11\x0f" + - "\xeb\x64\x9b\x68\x44\xdb\x4b\x9a\xd2\xb6\xd5\x89\xa6\x9b\xf5\x22\xd3\x89\x0a\x38\x8c\xe8\x7e\xb5\x9c\xa7\x1a\xd1" + - "\xbc\x3c\x54\x3a\xc5\xd9\x26\x79\x38\xe8\x14\x7b\x20\x8c\xdc\x72\x35\x5f\x6f\x35\x72\xe2\x0a\x83\x06\xf6\x40\xd6" + - "\xd9\x62\xaf\x53\x14\x70\x08\xd1\xf5\x7a\x35\x33\x78\xcc\x48\x79\x34\xa0\xc8\x76\xb9\x5c\xce\x75\x9a\x1c\x0c\x21" + - "\xf9\xb0\x5c\xac\x16\x72\x6c\x4f\xf7\x47\xb4\x7b\xa4\xff\x6d\x0f\x37\xa3\xe3\x06\x7c\x50\x15\x82\xa6\xf7\xe0\xfe" + - "\xa8\xf5\x1f\x02\x9f\x1d\x0e\x49\xf6\x00\xab\xb1\x3b\x12\x41\x4b\x67\x74\xbe\x5f\x80\x6a\x54\x8f\x62\x75\x6c\x69" + - "\x76\xd0\x9a\x62\x74\x2d\x82\x43\x0e\xd9\x76\x70\xb7\xf7\x47\xad\x8f\xc7\xac\x13\x01\x08\xfe\x6a\x0e\x1b\x9a\xee" + - "\x57\xa0\x1a\xd0\xeb\x18\xf8\x3c\xa3\x19\x85\xb5\x58\xdd\x8f\x60\xd1\xe5\x7e\xbb\x57\x1a\xcb\x92\xd8\xf1\xf3\x3d" + - "\xd0\xf6\xaa\xc9\x64\x0b\xbd\x81\x1d\xcb\x1d\x1c\x25\xc6\x3a\x45\xcb\x11\x6d\xad\x4e\xaa\x62\x12\x5d\x0a\xcb\xcf" + - "\x48\xfc\x4e\x46\x55\x44\x3d\x62\x55\x44\x17\x8e\x2f\xc8\xe8\x94\x24\xa2\x52\x31\x96\x4f\xe3\x52\xb2\xa4\x5b\x5a" + - "\x02\x4e\x1e\xe3\x8b\xc4\x8c\xd7\x82\xbc\x5c\x2a\x12\xc1\x91\xf9\xa2\xd7\x85\x2a\xea\xe5\x5f\xe2\x95\x5c\xe4\x8e" + - "\xd2\x7b\x2a\x72\xff\xda\x5a\xd6\xd5\x88\x25\x81\xb6\x32\x13\xf5\xad\x94\x74\xb2\x30\x79\xce\x07\x79\x66\xd9\x24" + - "\xca\x90\xfc\xb9\xc3\x9a\x5c\x02\x76\xb6\x4b\x0d\xf2\x79\x6b\x1e\x87\x10\x4c\xa0\xc7\x90\x15\x20\xf4\x2f\x99\x79" + - "\x77\x28\x2a\xd2\xf1\x79\x5a\x66\x5c\x64\x2b\xd5\xb5\x50\x31\x74\xfd\xf9\x2e\x2d\x28\x69\x00\x96\x35\x97\x0f\x5f" + - "\x07\x7c\x5a\x14\x79\xdd\xe6\x2d\xaf\x07\x9b\x7e\x79\xea\x41\x83\x51\xe1\xe6\x68\x6d\x9e\x3d\x24\x9a\xa7\xc3\x52" + - "\x73\x66\xa4\x23\x71\xd5\xe4\xc7\xbc\x24\x45\xcc\x13\x75\x4e\x22\x33\xaf\xba\x5c\x61\x9e\x68\x51\x3b\xc6\x10\x8f" + - "\x7c\x69\x53\x6a\x5e\xe6\x2c\xf1\x5b\x7b\x36\xfd\xa8\x2d\x8f\xc4\x8c\x4d\xf6\x43\xe6\x4e\xdd\xc7\xea\xc7\x9c\xb1" + - "\xbc\xe1\xae\x26\xe6\x46\x6e\xa6\x2b\x6d\xe0\x2b\xbd\xb4\x87\x3d\xa8\xaf\x2a\x76\x05\x69\xbb\x38\x3d\xe5\x45\x36" + - "\x89\x40\x49\xed\x2a\xb8\x40\x14\x91\xd0\xd7\x31\xe6\x01\x96\xf4\x37\xc1\x27\xf9\x7a\x00\xf8\x34\x78\xa3\x76\x78" + - "\x4d\x4f\x13\x1f\x18\xcf\x1d\xba\xc9\xe2\x45\x84\xc8\x11\x96\xb0\x12\x88\x22\x1a\xad\xc2\xfc\xdf\xff\x65\x9e\xcc" + - "\x96\xd1\x5f\x92\xe4\x5f\x92\xef\xd5\x14\xa1\x70\xe3\x86\x3e\xd3\xa6\xd5\xe8\x4d\xeb\x4b\x51\x00\x87\xd7\xb0\x31" + - "\x33\xd4\xc8\x24\x8f\x98\x6b\x0c\x83\x6f\xca\x42\x81\x4e\xb7\x74\x22\x71\xb3\x68\x8a\x06\x03\xd1\x65\xc4\xf2\x9f" + - "\xda\x40\x2e\x09\xc3\x76\xeb\x75\x69\x19\x6c\x21\x98\xb3\x4f\x20\x90\xb7\x7b\x3c\x7d\x22\x99\x10\xdb\x26\x9e\xf6" + - "\x72\x08\x6f\x73\x05\x11\x6f\x6b\x15\x19\x6f\x63\xbd\x94\x00\xa1\xc8\xd0\xc3\x5e\x03\x23\xa6\x8d\xb2\xcd\x24\xcb" + - "\x1a\xe9\xd5\x79\x17\xa3\x66\x2e\x4c\xff\x54\x14\xf6\x16\xc0\x9f\x68\x59\x54\x93\xe8\x4f\x55\x49\xd2\x6a\x12\xfd" + - "\x81\xed\x3a\x92\x76\x12\xbd\xff\x43\x75\x69\x72\xda\x44\xff\x46\xbf\xbe\x07\x0f\x05\x00\xea\xba\x29\x9c\xd7\x2f" + - "\x32\xa4\x6c\xdb\x57\xe5\x6b\x6e\xe6\xab\x25\x75\xad\x4a\xb7\x87\xf9\x61\x89\x47\xaa\x45\xb5\x5f\xf6\xd9\x0d\xb5" + - "\xfa\x3c\xf3\x05\x52\xdf\x42\x8f\x8c\xc3\x24\xd6\x79\xd9\xd2\x2e\x4a\x58\x7c\x37\x4a\x8c\x1d\xb2\xe9\x7c\xf5\x51" + - "\xed\xc6\x85\x22\x80\x96\x59\xad\x33\x9f\xf2\x90\x1b\x07\xa6\x7f\xe1\xe2\x56\xbe\x94\x62\x7e\x93\x11\x12\xb1\x9b" + - "\x63\x5b\x72\xc5\xc1\x56\xce\x59\x66\x1c\xc5\xe4\x6c\x71\xed\x06\xde\xd7\xaa\xc9\x78\x02\xe8\x5d\x24\xf2\x40\x17" + - "\x85\x2a\xe8\x3d\x0a\xf9\xbd\xff\xe0\x52\x99\x55\xff\xcf\xb1\xed\x91\xa6\xa9\x57\x99\xfa\xe6\xdb\x7a\x6c\xca\xdc" + - "\xf9\x7e\xc5\xa3\x19\x86\xa8\x1b\xca\xf8\xc6\x79\x05\x4f\xcb\x20\x5c\x29\x8b\xdf\x13\x69\xd3\xa6\x2a\x0a\x95\x3b" + - "\xfa\x4c\x5e\x94\x48\x17\xcb\x44\xdf\x58\x88\x5f\x77\x11\x87\x57\xbb\x6c\xbd\xe7\x95\x1b\xef\x42\xf8\xa7\xad\x99" + - "\xd6\xc9\x12\x56\xdf\x1a\x10\xa0\x20\xfe\x3f\xe6\xb2\xea\x8c\x48\xdf\x74\xb3\xd2\x9d\x3f\x8c\xca\x76\x3b\x1f\xa1" + - "\xb2\xdd\x8c\x53\x99\xcd\x93\x64\x84\xcc\x6c\x66\xd0\x19\xe0\xe2\x43\x71\xc9\xb3\x5f\x5b\x86\xd3\xa6\xfa\x0a\x2d" + - "\xbf\x40\x8b\x0d\x6a\x62\xc9\x34\x1b\x16\x31\xd3\xb4\x2a\xe2\xe2\x18\xcf\x26\x91\xfa\x99\x80\xdf\xf0\xfb\x7c\xf8" + - "\x0d\x7e\x2e\x26\x5c\x2e\xec\x8f\xe5\xf0\x7d\x35\xfc\x5c\x0f\x3f\x37\xc3\xcf\x87\xe1\xe7\x56\xd1\x38\x67\x8a\x95" + - "\xfe\x67\x02\x7e\xc3\xef\xf3\xe1\x37\xf8\xb9\x80\x64\x96\xc3\xf7\xd5\xf0\x73\x3d\xfc\xdc\x0c\x3f\x1f\x86\x9f\x03" + - "\x2b\xed\x59\xb1\xd2\xff\x4c\xc0\x6f\xf8\x7d\x3e\xfc\x06\x3f\x17\x90\xcc\x72\xf8\xbe\x1a\x7e\xae\x87\x9f\x9b\xe1" + - "\xe7\xc3\xf0\x73\x60\xe5\xa5\x55\xac\xf4\x3f\x13\xf0\x1b\x7e\x9f\x0f\xbf\xc1\xcf\x05\x24\xb3\x1c\xbe\xaf\x86\x9f" + - "\xeb\xe1\xe7\x66\xf8\xf9\x30\xfc\xdc\x1a\xfb\x81\x30\x5b\x77\x3f\x54\xf0\xcd\xcc\x71\x4d\x87\x5a\xf8\x0f\xd2\x48" + - "\xb0\x16\x36\xb9\xe3\xdb\x15\x60\xf7\xdd\x04\x98\x41\x80\xed\x6c\xba\xe6\xff\xb7\xb1\x00\x13\x08\xf8\xb0\x98\x2e" + - "\xc4\xff\x99\x80\x5b\x08\x07\xf6\x57\x24\xf3\xb0\x78\xbd\x76\xd6\xb7\x81\x70\xab\x07\x67\x75\x6b\x0d\xce\x6a\xdf" + - "\x0a\x16\x2f\xdd\xcd\x5b\x42\xb8\x85\xbb\x75\x0b\x08\x37\xb7\x5a\xa7\x8b\xdb\xdd\x3a\x4d\xea\xee\xc6\x31\xc7\x5a" + - "\xf4\xa1\x54\x4c\xbb\x0f\x39\xd4\x0c\x42\x79\x3a\x92\x43\x27\x10\xda\xd3\x9b\x0c\x7a\x0b\x81\xed\x2e\x65\x30\x0f" + - "\x10\xc6\xd3\xaf\x0c\x78\x03\x81\x3d\x9d\xcb\x80\xd7\x1a\x30\xde\xfa\x15\x84\xf1\x74\x33\x03\x5e\x42\x60\x4f\x5f" + - "\x33\xe0\x05\x04\xb6\x3b\x9c\xc1\xe8\x1d\x34\xd2\x76\xad\x9f\x46\x9a\xae\xf5\x12\x9c\x3b\x15\x50\x7b\x92\xfa\x21" + - "\x2c\x14\xa6\x1e\x3d\xd0\x0c\x00\x79\xb5\xa3\x07\x4e\x00\xb0\x57\x39\xda\x93\x50\x0e\x0e\x8b\xe9\x46\x7b\x12\xba" + - "\xc1\x41\xbc\xaa\xd1\x9e\x84\x6a\x88\x00\x91\x4f\x3c\xed\x49\x68\x86\x80\xc5\xdb\xbd\x02\x20\x5e\xbd\x68\x4f\x42" + - "\x2f\x38\xac\x57\x2d\xda\x93\x50\x0b\x0e\x8b\x69\x45\x7b\x8a\xb5\x6e\x19\x69\x35\xec\x9d\x91\x46\xc3\xbe\x41\x54" + - "\x82\x9f\x5e\x93\x4a\xa1\x07\x1f\x6d\xdd\x90\xd0\x33\x1b\xda\xa3\x24\x12\x2b\xb1\xb1\x3c\xda\x22\xb0\xb6\x36\x92" + - "\xad\x36\x02\xf6\xc1\x86\xf5\xe8\x8f\x40\xda\xd8\x48\x1e\x45\x12\x48\x6b\x04\xc9\x25\xad\x95\x0d\xeb\x51\x2d\x81" + - "\xb4\xb4\x91\x3c\x3a\x26\x90\x16\x36\x92\xad\x6c\x02\x16\xeb\xf0\x51\x59\x21\xfd\x3e\x2a\x2a\xa4\xd7\x43\x43\xf9" + - "\xf7\xf1\x51\xdf\xec\xa4\x5a\x3b\x08\x32\x82\xaf\x2a\xd7\x97\x4a\x6c\xdc\xe8\x10\x33\x7d\x4d\xa6\x75\xbf\x0e\x99" + - "\x68\x90\xfa\xf8\xd0\x20\xb7\xc6\x62\xd1\x2c\x7f\xd0\xca\xf5\x71\xa0\x01\x6e\x34\x40\x5d\xf7\x35\xc0\xb5\x0e\x68" + - "\xb5\x72\xa5\x95\x2f\xdd\x8d\x5c\x6a\x80\x0b\x77\x1b\x17\x1a\xe0\xdc\x6a\xa3\x21\x78\x77\x1b\x75\xf9\xbb\x9b\x08" + - "\x3d\x28\xdd\x85\x42\xc0\x66\x1a\x98\xa7\x53\xa1\x0f\x85\x3b\x51\x36\xf8\x56\x83\xb6\xbb\x17\x78\x51\xb8\x1b\x65" + - "\x43\x6f\x34\x68\x4f\x47\x03\x3f\x4a\x73\xa4\x6c\xa0\x95\x06\xe4\xe9\x72\xe0\x49\xe1\xae\x94\x0d\xbd\xd0\xa0\xed" + - "\xce\x07\xbe\x14\xee\x4c\x21\x7d\xa0\x77\x81\xbf\x7e\xbd\xbf\xf8\xdc\x69\x40\x0d\xee\x94\xe6\x4f\x21\x50\x33\x08" + - "\xe5\x55\x95\xc1\xa1\x42\x3d\x2a\x1b\x7a\x0b\x81\x31\x45\x51\x2e\x15\xea\x53\xd9\xc0\x1b\x08\xec\x55\x13\xe5\x54" + - "\x41\xaf\xca\x86\x59\x41\x18\xaf\x92\x28\xb7\x0a\xf5\xab\x6c\xe0\x05\x04\xc6\x54\x44\x39\x56\xa8\x67\x85\x88\x5e" + - "\x93\xbc\xbf\x72\xad\x97\x10\xfd\xd0\x7d\x2b\xcc\xb9\x42\xc1\x67\x08\xb8\x47\x63\x74\xef\xca\xe7\x5e\x61\x68\x5b" + - "\x04\xcb\xd6\x21\xcd\xbf\xf2\x39\x58\x18\xd6\x06\xc1\xf2\x68\x95\xe6\x61\x21\x2e\x16\x06\xbc\x42\x80\x3d\x7a\xa6" + - "\xf9\x58\x3e\x27\x0b\xc3\x5a\x20\x58\xb6\xe6\x69\x5e\x96\xcf\xcd\x42\xfb\x12\xeb\xca\x31\xbe\xb0\xfe\x4f\xae\x0a" + - "\x1f\xdf\x23\x36\xf9\xe6\xe0\xa4\xd7\xd9\x62\x95\x7b\x9d\x2d\xc6\x6a\x90\xb3\xc5\x1a\x18\xe4\x6c\x0d\x6c\xe1\xce" + - "\x56\xdf\x82\x20\x67\xab\x6f\x75\x90\xb3\xd5\x4b\xca\xe7\x6c\xf5\x42\x0d\x72\xb6\xfa\x8e\x08\x72\xb6\xfa\xfe\xf3" + - "\x39\x5b\x7d\x57\x07\x39\x5b\xbd\x58\x43\x9c\xad\x73\x16\xe4\x6c\x29\xb0\x30\x67\x4b\x81\x87\x39\x5b\x12\xdc\xeb" + - "\x6c\x49\xa0\x30\x67\x4b\x42\x87\x39\x5b\x12\xda\xeb\x6c\x49\xa0\x30\x67\x4b\x42\x87\x39\x5b\x12\xda\xeb\x6c\x49" + - "\xa0\x30\x67\x4b\xf5\x41\x88\xb3\x25\x81\xfd\xce\x16\x83\x1a\x75\xb6\x14\x54\x90\xb3\xa5\xa0\x83\x9c\x2d\x09\xed" + - "\x73\xb6\x24\x4c\x90\xb3\x25\x81\x83\x9c\x2d\x09\xec\x73\xb6\x24\x4c\x90\xb3\x25\x81\x83\x9c\x2d\x09\xec\x73\xb6" + - "\x24\x4c\x90\xb3\xa5\x44\x1f\xe0\x6c\x49\x58\xaf\xb3\x75\xce\xae\x72\xb6\x00\xf8\x35\xce\x16\x40\xbb\xc6\xd9\x1a" + - "\xd0\x02\x9c\xad\x01\xf8\x1a\x67\x6b\xc0\xba\xc6\xd9\x1a\xb0\x02\x9c\xad\x01\xf8\x1a\x67\x6b\xc0\xba\xc6\xd9\x1a" + - "\xb0\x02\x9c\xad\x01\xf8\x1a\x67\x0b\xf4\x65\xb8\xb3\x35\x20\xdd\xe2\x6c\x19\xbb\xec\xf7\xd8\x94\x7e\xf3\xae\xb4" + - "\xd7\xdb\x62\x95\x7b\xbd\x2d\xc6\x6a\x90\xb7\xc5\x1a\x18\xe4\x6d\x0d\x6c\xe1\xde\x56\xdf\x82\x20\x6f\xab\x6f\x75" + - "\x90\xb7\xd5\x4b\xca\xe7\x6d\xf5\x42\x0d\xf2\xb6\xfa\x8e\x08\xf2\xb6\xfa\xfe\xf3\x79\x5b\x7d\x57\x07\x79\x5b\xbd" + - "\x58\x43\xbc\xad\xe2\x18\xe4\x6d\x29\xb0\x30\x6f\x4b\x81\x87\x79\x5b\x12\xdc\xeb\x6d\x49\xa0\x30\x6f\x4b\x42\x87" + - "\x79\x5b\x12\xda\xeb\x6d\x49\xa0\x30\x6f\x4b\x42\x87\x79\x5b\x12\xda\xeb\x6d\x49\xa0\x30\x6f\x4b\xf5\x41\x88\xb7" + - "\x25\x81\xfd\xde\x16\x83\x1a\xf5\xb6\x14\x54\x90\xb7\xa5\xa0\x83\xbc\x2d\x09\xed\xf3\xb6\x24\x4c\x90\xb7\x25\x81" + - "\x83\xbc\x2d\x09\xec\xf3\xb6\x24\x4c\x90\xb7\x25\x81\x83\xbc\x2d\x09\xec\xf3\xb6\x24\x4c\x90\xb7\xa5\x44\x1f\xe0" + - "\x6d\x49\x58\xaf\xb7\x55\x1c\xaf\xf2\xb6\x00\xf8\x35\xde\x16\x40\xbb\xc6\xdb\x1a\xd0\x02\xbc\xad\x01\xf8\x1a\x6f" + - "\x6b\xc0\xba\xc6\xdb\x1a\xb0\x02\xbc\xad\x01\xf8\x1a\x6f\x6b\xc0\xba\xc6\xdb\x1a\xb0\x02\xbc\xad\x01\xf8\x1a\x6f" + - "\x0b\xf4\x65\xb8\xb7\x35\x20\x8d\x79\x5b\x9d\x3a\x01\xea\x3d\x4d\x2a\x4f\x64\x13\x96\xa0\x8e\xc1\xcb\xf3\x5a\xec" + - "\x6e\xd3\x83\x7e\x86\x4b\x9e\x2d\x17\x9f\xc1\x35\x0c\xf3\xee\x02\x38\x49\xd5\x9d\x18\x5d\xe7\xdd\x60\xc5\xa9\x91" + - "\xe1\x04\x49\x7a\xe2\xbe\x65\xc5\xc9\x3c\x75\xfb\x2a\x7b\x7d\xea\x9a\xa7\x2e\x9b\x44\xd6\xb7\xd3\xf0\xed\x50\x55" + - "\x9d\x09\xa7\xbe\x9d\x78\x9a\x18\xfe\xf5\x44\x49\x66\x42\xaa\x6f\x27\x28\x32\x25\x17\xcf\x41\x66\x33\xc9\x4d\x57" + - "\xd5\x9e\x4c\x23\x59\x96\x19\xed\x33\x6a\x36\xc9\x71\xc9\x20\x97\x9b\xe6\x1e\xa2\xa2\xf7\x3f\x49\xe2\xbb\x43\xde" + - "\xc8\x1b\x40\xb0\xd9\x7e\x38\x28\xb4\xb4\x2a\x7a\x95\xab\xc7\x49\xfa\x01\xad\x8e\xd0\x8b\x9d\x64\xc7\x61\x4f\xe2" + - "\x1a\x09\x14\x7c\x82\xe8\xd2\xa7\x4e\x65\xac\x82\xa0\x1e\x71\x46\x53\xdf\xd8\x03\x89\xa6\x38\x5c\x9c\x56\x65\x46" + - "\xcb\x96\x66\x98\xf2\xa2\xa5\x40\x2a\xb0\xdc\x56\x69\xb4\xd4\x81\x6d\xab\x39\x5a\x6a\x28\xfc\xca\x18\x80\x31\x17" + - "\x92\x96\xfb\xc8\xab\xd1\x0a\x01\x6d\x3d\x52\x08\xd9\x1f\x8a\x91\xb6\x23\x85\x38\x2e\xd2\x72\xa4\xf0\x74\x43\x8b" + - "\xae\xa7\x2c\xc6\xab\xb4\x7b\x73\x53\xbc\x6d\xd7\xe4\x35\x90\xc7\xae\xec\x4e\x71\x75\x88\xbb\xd7\x9a\x7e\xa8\xb2" + - "\xec\xa3\x53\xed\xb6\xfd\x3f\x9d\x18\xbb\xac\x3c\x90\xf2\x5f\x90\x66\x97\x25\xb4\xc9\x25\xad\x8a\x1f\xd3\x82\xb4" + - "\xed\xef\x7f\xe8\xe7\x26\x7e\xc7\x12\xcb\x1e\xa4\xae\x88\x48\xb5\x2a\x2e\x67\x76\x99\x54\x2c\xb2\xc1\xad\x12\x4e" + - "\xb9\xcb\x34\xc2\x93\x48\x7c\x3e\xdd\x56\x1f\xe5\x77\x43\xec\xda\x8c\x09\x62\xca\xf3\x23\x61\x73\x87\x2a\x3a\x21" + - "\xd3\x4a\x26\x4a\xa1\xb1\x1a\xf4\x75\xaa\xb2\x2e\xe9\xd3\x0c\x56\x9b\x59\xa4\xd9\xbf\x41\xc7\x5d\x24\xb1\xda\x84" + - "\x9a\x81\xda\xec\xb9\x0d\x6b\xdd\xa0\xbb\x2e\x92\x43\x6d\xd2\x96\x8e\xa8\x0d\xaa\x76\x82\xc4\x4e\x7c\x1d\x46\x8a" + - "\x17\x0c\x8e\x64\x4c\x8d\x9f\x0c\xa6\x0d\xa0\xa1\x55\x1c\xdc\x49\x6d\x68\xe3\xc8\xd5\xfe\x87\xfe\x9f\x43\xad\x44" + - "\x26\x05\x54\xaf\x54\x19\xae\x58\xa2\xd8\xa1\x59\xb2\xd4\xd2\x1f\xac\x46\xab\xcc\xa5\x5c\x2e\xaa\x68\x8d\x52\x83" + - "\x40\x8d\x88\x7e\x61\xad\x04\x0a\xe6\xa2\x0a\x6a\x74\xab\x98\x96\xb9\x02\xd7\x1d\x2d\x95\x85\x47\xc7\x0c\xb8\x71" + - "\x25\x33\x18\x47\xb4\x4c\x23\xe9\x55\xb3\xa0\x7c\x1b\x59\x42\xb7\xe9\xda\xa1\x67\x79\x79\xa8\x50\x25\xe3\x05\xb8" + - "\x86\xf5\x65\x0e\xf5\x62\x45\x96\xfe\x58\xb5\xe8\x05\x2e\xad\x42\x89\xd9\xb5\x48\x8d\x91\xb5\x20\xca\x64\xb5\x06" + - "\x68\x12\x4a\x4c\xd6\xe2\xd1\x21\x98\x99\x04\xd7\x8d\x21\x55\x89\x47\x81\x20\xd0\xb8\xf6\x40\x66\x11\xd5\x19\x88" + - "\x79\xf5\x66\x3c\x87\x4a\xba\xa4\x8b\xc3\xc2\xa1\x34\x22\x3d\x0a\xaa\x37\xaa\x0c\x57\x1d\x51\xec\xd0\x1e\x59\x6a" + - "\xe9\x09\x56\xa3\x55\xe6\x52\x23\x17\x55\xb4\x46\xa9\x31\xa0\x46\x44\x9f\xb0\x56\x02\x95\x72\x51\x05\x35\x7a\xe6" + - "\x3f\x3d\x59\x16\xa6\x33\x5a\x7e\x1a\x8f\x6e\x19\x70\xe3\xea\x65\x30\x8e\x68\x98\x46\xd2\xab\x64\x61\x49\x74\xc8" + - "\x61\x9e\xa6\x0e\x3d\xe3\x09\x72\x50\x35\x93\x45\xb8\x96\xf1\x52\x87\x92\x89\x42\x4b\x8f\x90\xda\xcc\x22\x97\x86" + - "\x39\x48\x62\xb5\x49\x0d\x1a\x6a\x43\xd4\x0b\x69\x1d\xd0\x2e\x07\xc9\xa1\x36\x8f\x6e\xc1\x24\x44\xb8\xce\xc0\xac" + - "\x44\x1e\xd5\xd2\xc1\xc6\x35\x4b\x67\x1a\x51\x2c\x48\xd0\xab\x57\x41\x69\x93\xf6\x69\x6a\xa8\x15\xc8\xe8\xcb\xb0" + - "\xe0\x6d\xc4\x69\x32\xfb\x9d\x76\xc9\xf9\x05\xbb\x78\xcc\xdf\x6e\x8d\x48\x99\x45\x1f\x86\x40\xd3\x66\xbd\x51\xdb" + - "\x91\x68\x45\x66\x8c\xca\xca\xa3\xb4\x32\x72\xe7\xc4\xaf\x5a\xf6\x9c\xf8\xdc\xaa\xb4\x38\x32\x29\x43\xff\xad\x67" + - "\xf0\x94\xb3\x18\x1b\xbf\x90\xbd\x27\x2c\xa3\xb2\x73\xc1\xc9\x63\x82\x26\x8f\x4f\x20\xf6\x80\x64\x6d\xf1\x22\xa1" + - "\x0b\x70\x1f\xd4\x89\x6f\xb7\x3a\x01\x91\x35\xb9\x0f\x6a\x8c\x1c\xb2\x98\xf6\x41\x9d\x7a\x6a\xbc\xcb\xdc\xf9\x86" + - "\x1c\x64\xf4\x28\x06\xcc\xac\x1b\x86\x06\x45\x09\xc3\x4e\xde\x16\xa2\xc1\x8e\x5b\xb0\x07\xb9\xbf\x09\xfb\xa6\xba" + - "\x87\x4e\x7a\x13\xb6\x56\x37\xec\x04\x3d\xd2\x7d\x65\x4f\x80\x8c\x47\xd7\x77\xc4\xf5\xc8\xa0\x1f\xde\x80\x7c\x4b" + - "\xcd\xa0\x17\xde\x80\x0c\x6b\xd6\xfa\x40\xec\x91\x5e\xdf\x09\x80\xa0\x98\x2c\x6f\x45\xf6\x1b\x0b\x5b\x8e\xb7\xd5" + - "\x8c\x21\x9f\x34\x51\x18\xc6\x95\xcd\x30\x87\x9c\x16\x59\x4b\x3b\x35\x33\x89\x39\x23\x71\x67\xfc\x4e\xb0\x04\xde" + - "\x05\x3d\xd2\x92\x4b\xde\x4e\xb2\x62\xcc\x43\x18\x59\x5f\x5a\xda\xf9\x0c\xd9\xa9\xb0\xb3\x95\xe8\x39\x6e\xf4\xac" + - "\xe8\x58\xea\xc1\x55\xff\x4f\xb2\x4f\xf6\xf4\xfa\xb4\xf6\x06\xeb\x2b\x24\x7b\xee\x90\x13\x8f\x3d\xd1\xf0\x63\xf7" + - "\x5a\xd3\x1f\x5a\x4a\x9a\xf4\xc4\x63\x82\xbf\xee\x8b\x18\xa0\x52\xf6\xee\xf4\xbe\x7a\xf9\x49\xbc\x16\xc1\xbf\x36" + - "\x24\xcb\x2b\xce\x89\x4a\xde\xc8\xf2\xf7\xc0\xbe\x51\x3b\x3d\x7f\xd9\x5a\xfd\xc0\xb3\x34\xd9\xd5\x1d\x72\x99\xc9" + - "\x4e\xd7\x07\x1b\xb2\xe9\xdd\x2a\x0c\xf4\x11\x4d\x65\xc0\xdf\xb8\xf8\xf1\x7c\x29\xba\xbc\x66\xa9\xf3\xc4\x97\x5e" + - "\x59\x38\x19\xe4\xa9\x03\x93\x33\xf9\x2c\x05\x26\x20\xa4\x8c\x8b\x89\x17\x08\x27\xf7\x57\x7f\x85\xa2\xba\x74\xf5" + - "\xa5\x73\xc8\x45\xdb\xf8\xdc\xd8\x59\x8a\xc2\x9f\x19\x59\xad\x54\xc8\xf3\x50\x35\xe7\x38\xad\xca\xae\xa9\x5c\x99" + - "\xef\x1c\x0f\x3b\x2c\x96\xc6\x1b\x01\xeb\xfa\x85\xa5\xa8\x7e\x13\x5f\xae\x5c\x48\x56\x96\xab\xfc\x4c\x8e\x14\x66" + - "\x81\x0a\x4f\x91\x34\x96\xff\xaa\xa7\xd1\xff\x7f\x23\x9f\x55\xb2\x71\x67\xc0\x1a\x41\xc1\xde\xa1\x10\x7c\xb1\x16" + - "\xc2\x37\x24\xa2\xe9\x6c\xd5\x4e\x22\x9b\xc1\xde\xac\x9b\x70\x8f\xf6\xcb\x15\x23\x74\x07\x7a\xfa\xc3\x15\xef\xde" + - "\x49\x7a\x6f\x26\xc6\x0a\x31\x05\x03\xaf\x38\x40\xc2\x2c\xaf\x31\x39\xd0\xad\x36\x96\x9c\x89\xbf\x02\x64\x3e\x61" + - "\xa9\xbc\x58\xca\xf5\x77\xef\x58\xf9\x2c\x99\x4f\xa2\xd9\x66\x35\x89\xe6\x8b\xc5\x24\x9a\xae\x6f\xe9\xca\x10\xb2" + - "\x68\xbb\x77\xcc\xa0\xd7\x05\x49\xe9\xa9\x2a\x32\x23\x03\xf3\x76\xcb\x5b\x5e\x93\x34\xef\x5e\x77\xd1\x0c\xa5\xd1" + - "\x2f\xc3\x98\x79\xf2\xd1\x71\xd4\x2e\xa4\x78\x13\xfa\x8f\x59\xce\x9e\xe0\xc8\x7e\x9a\x44\x7a\x41\x43\x49\x56\x95" + - "\xc5\xeb\x4f\x93\x48\xfa\x14\x03\xb0\x0e\xeb\x8e\x12\x88\x14\x91\xfe\xc6\x43\x1e\xc6\xaa\xe2\x6d\x12\xa9\x54\xcb" + - "\xaa\x8b\x49\x51\x54\x5f\xa9\xdc\x04\x95\xef\x24\xd9\x38\xfe\x29\x04\x9b\xc0\x49\x5d\x53\xd2\x90\x32\xd5\xd3\xfb" + - "\x22\x4b\x78\x89\xd1\xbb\x5b\x19\x7d\xce\x53\x1a\xd7\xf9\x0b\x2d\x62\xf6\xf8\xd1\x2e\xe1\x6b\x7a\x50\x5d\x46\x3a" + - "\xaa\x4f\xdb\x5d\x7e\x36\xbe\xf4\x30\xfd\xd7\xb8\xa8\x52\x52\xe8\x65\xe7\xaa\xec\x4e\x3f\xa9\x35\xa6\x66\x7c\x17" + - "\x4b\x99\x16\xec\xdd\x94\xab\x04\x3b\xe3\x10\xb7\x67\x93\x7a\xdf\xe5\x6e\x08\xce\x11\x33\x1d\x7e\x32\x1a\x93\x1e" + - "\x58\xce\x34\xa3\x68\x32\x22\xb0\xda\xb3\x2d\x13\xbc\xc8\xa8\x77\x00\x32\xa8\xf3\x3a\x55\x71\x84\x88\x2b\xc1\xc5" + - "\x55\x1c\xc7\xc4\xa5\x43\x38\xc4\x65\x93\x71\x8b\x4b\x87\x1d\x17\x57\x71\x74\x8a\xcb\x28\xc2\xc5\x55\x1c\xbd\xe2" + - "\x2a\x8e\x88\xb8\x96\x6b\x3d\xe9\x1c\x1b\x67\x8c\x7d\xe0\x72\x6a\x01\x29\x95\x84\x42\x78\x63\x93\x68\xca\x9c\x2f" + - "\x63\x03\x1d\xa6\xf7\xc2\x9e\xbf\xba\xea\xa5\x12\x59\x57\xc4\x96\x01\xaa\xc6\x61\x51\x00\x43\x76\x72\x81\xa2\xa7" + - "\x0a\x73\xbc\xfc\x92\x58\x0b\x02\xf1\xee\x8c\xe3\x01\x21\xc5\x09\xee\xb8\xab\x72\x99\x7f\x1c\x05\xeb\x75\x93\xb7" + - "\xc0\xf2\x60\x65\xdb\x10\x7c\xb0\x12\xc0\x1f\x87\x82\x42\x5d\xaa\xc5\x80\x9e\xb7\x6f\x8e\x48\xf5\x93\xd5\x97\x9f" + - "\x40\x97\x42\xaa\x31\xd2\xff\x82\x53\x93\xf1\x00\x6d\x70\xe5\x4e\xbf\xad\xc3\xf0\x07\xdf\x02\xba\x52\x70\xfc\x69" + - "\xa4\x45\x9f\xec\xf6\xb9\xf2\xb6\xcb\x63\xba\xe0\xbd\x3a\x6b\x16\xc4\xf5\xc7\x0f\x28\x54\x44\x9f\x7b\x14\xf6\x54" + - "\xe2\xe0\x8b\x26\x38\x2b\x5b\x34\x07\x5c\x9d\x38\x2f\x05\xdc\xf8\xa7\x6b\x53\x84\x80\x25\x4d\x7a\xe0\x3b\xe6\x20" + - "\x98\x1d\xd1\xf7\x38\x02\x66\xf5\x47\x00\x63\xaa\x66\xdd\x94\x58\x9f\x7d\x6c\x09\x18\x1f\x57\xc0\x34\x79\x98\x82" + - "\x4e\x4d\xcc\x4f\x1c\x59\xd6\xcc\x58\xb8\x69\xeb\x49\xf3\x20\xed\x06\x1f\x31\x9e\xea\xc0\xf4\xe2\x29\x16\x13\xad" + - "\x91\x92\x31\x41\x92\x8e\xcb\xaa\x34\x3c\x38\x35\x3f\x1a\xe7\xfd\xd0\x0c\xbe\x73\x74\x0d\xba\xc2\xf3\x23\x6b\x51" + - "\x07\x7f\xc5\x88\xa3\x80\x46\x2c\x80\x8f\xa2\x1c\x50\x94\x30\xcc\xf7\x35\xcc\x9c\x3d\x94\xdb\x61\xfd\x2d\xa4\x70" + - "\x2d\x2f\xc1\x82\xf1\x10\x06\xb2\xf2\x40\x89\xa5\xc5\x95\x02\x84\x83\xc3\xe4\x5d\x1b\x2c\xf3\xb7\xc9\x56\x57\x5f" + - "\xe1\x30\x41\x57\xe9\xd1\x7a\x72\x41\x7b\x92\x6b\x78\x3d\x0c\xa1\x2e\x8e\xe0\x23\xfd\xb7\xc6\xb5\xd8\x51\x3f\xe2" + - "\xbf\xf9\xb4\xb8\x1f\xdb\x86\x16\x1b\x84\x1d\x9d\x50\x1c\x3d\x9a\xf3\x1b\x0a\xe3\x5a\x96\x82\xe5\xe3\x21\x8c\x2b" + - "\xb3\x09\x15\xa6\xcc\x26\x16\xa6\xcc\x92\x77\x4d\x99\x1f\xee\x22\x62\xc9\xd1\x89\xb4\xf1\x81\xd2\xac\x5f\xd5\x3b" + - "\xbc\x33\x14\xd4\x16\xb8\x31\x0f\x2c\xe7\x53\xe0\x16\x6a\x2d\x75\xd4\x07\x9d\xd6\xc1\x79\x82\xd3\xca\xcf\x71\x5e" + - "\x66\xf4\x65\x17\xcd\xf1\xf5\x83\xbc\xfe\xb9\xd4\x1f\x42\x5d\x60\xd1\x4b\xf9\xd1\x7e\xfe\x8d\x49\x97\x3b\x85\x31" + - "\x7d\xa6\x65\xd7\xea\x07\x7a\xe5\x68\xf9\xe4\x69\x95\xbc\xb1\xba\xd6\x39\x19\x53\x46\x35\x9f\x04\xd0\x96\x96\x2e" + - "\xd4\x6a\xb3\xfe\x93\x2f\x74\x41\xdf\x1e\xfd\x3e\x78\xbb\x7a\xb1\x60\x48\xf9\x3a\x7a\xf1\x89\x16\x35\xf7\xdc\x4d" + - "\x44\xe6\xff\xa0\x1f\x81\x3b\x07\x4b\xed\xd5\x1d\x56\x28\xfd\x3c\x94\x1f\xe8\x74\x19\xf8\x9a\x93\x08\xbc\x32\xec" + - "\xd1\x39\x9d\x67\x4b\xef\x8d\x28\x28\x47\xfd\x6d\xc3\xd3\xa3\x8c\xba\x83\xb6\xfc\xc1\xbc\x37\x87\x69\xd7\xf5\x4b" + - "\xf4\xdd\x7a\xb3\x9f\xad\x1f\x6e\x8e\xc9\x02\x1a\x68\x83\x60\x10\x85\x64\x99\xb8\x4a\x66\xcb\xdd\x79\x7e\xf7\xd1" + - "\xd5\x5b\xa3\xf2\xd3\x07\xa0\x1b\x59\x3e\x1c\x67\x0e\x2f\xeb\xbb\x3e\xbc\x86\x62\x74\x78\xa9\x62\x6b\x78\xa9\x12" + - "\x38\xbc\xf4\x8f\xe6\xf0\x12\xa5\xf8\xf0\x32\x0b\xf1\xe1\x25\xa1\xec\xe1\xa5\x95\xb8\x87\x97\xf6\x5e\xa2\xce\xf3" + - "\xd8\xf0\xe2\xa8\x7f\xbf\xe1\x85\x32\xea\xdb\x13\x59\xcd\xee\x35\xbc\xd2\x84\xcc\xd6\xfb\xb7\x0d\x2f\x4e\x03\x6d" + - "\x90\x7f\x78\x0d\x72\x77\x9e\x40\x45\x86\x57\x60\x47\xe3\xc3\xcb\x46\xa6\x4d\x53\x35\xd6\xe0\x32\xbe\xea\x43\x4b" + - "\x16\xa2\x03\x4b\x14\x5a\xc3\x4a\x7c\x87\x83\x0a\x7e\x32\x87\x14\x2b\xc3\x07\x94\x5e\xa4\x0f\x27\x08\x01\x87\x92" + - "\x4e\x76\x64\x28\x69\xcf\x84\x42\x4e\xc7\x06\x12\x47\xfc\xfb\x0d\x24\x84\x4d\xf7\x30\xe2\xef\x9b\xde\x69\x18\xd1" + - "\x87\xe5\xc3\xe2\x8d\xc3\x88\xd1\x40\x9a\xe3\x1f\x44\x83\xcc\x9d\x47\x6d\x91\x41\x14\xd4\xc5\xf8\x10\xb2\x51\x15" + - "\x18\x57\xa5\xff\xed\x21\xc2\x2f\xa1\xae\x74\x07\x52\xc7\x97\x8f\xfc\x8f\xd3\x51\x31\xa0\x61\xb0\x39\x8e\x2a\xc0" + - "\xf0\xe9\xca\xb9\x07\x00\x8f\x1c\x6c\x16\xfd\xbf\xc0\xe4\xd6\x8c\x4f\x31\x9c\xcc\x7d\x0d\x77\x10\x1a\x8d\x37\x3b" + - "\x82\xcb\x72\x9f\xc9\xae\x09\x0e\x47\x4f\x5d\xc2\xc1\x97\x4f\xf3\xdc\x5a\x0d\x5c\x51\xe2\xb5\xa1\x24\x80\x0a\xe3" + - "\xa8\xec\x04\xdb\xb5\x8c\x41\xaa\xc6\x9a\xda\x03\x68\x0d\x27\xbe\xf5\x16\x86\xb0\xef\x4a\xed\x3c\x35\xcc\xa7\xe1" + - "\xa2\xf0\x84\x74\x14\x92\x84\x49\x43\xd7\xe6\x16\xfc\x58\xf4\xb5\xd2\x02\x33\x9c\xf6\x7d\xd8\x7f\x19\x57\xd5\x61" + - "\x09\x7d\x37\x76\xd4\xc4\x85\x30\x05\x5a\x6f\x45\x7f\x7d\x24\x1d\x3b\x66\x48\x0d\xd6\x06\x84\xda\x19\xc7\x77\x94" + - "\xd0\xc4\x15\x06\x1b\xee\x98\x86\x6e\xc3\x94\x11\x33\xf6\x44\xc1\x4b\xb2\x56\xa7\x61\x65\xd0\x75\xb0\x80\xa4\xbf" + - "\x81\x17\x60\x6f\x17\xc3\xb0\xff\xd8\x73\xc1\xc9\x4d\x8c\x83\x1d\x3f\xb8\x99\xba\x31\x42\x3b\x10\x05\xdf\x2c\x0e" + - "\x7e\x38\x2c\xc8\x80\x6b\xec\xdb\xe3\x0f\x93\x0f\x3e\x0a\xac\xb7\x50\xbd\x5d\x1c\xaa\x2e\xe0\x79\xaa\x5b\x5b\x65" + - "\x84\x0a\xc7\x1a\x39\x5b\x4e\x17\x8b\xd1\x17\xe7\x42\x6b\x6c\xcf\xe3\x35\x1a\x47\x04\xa4\xb5\x1d\xdb\xc7\xd5\xcf" + - "\x18\x3a\xb7\x71\xf5\x73\x87\xd8\xce\xae\xe7\x2c\x22\x1e\xd3\x43\xee\x68\xf8\x77\x88\xe3\x73\x1b\x77\xd5\x25\x3d" + - "\xc5\x24\xe5\xe6\xe5\x4c\xca\xbc\xbe\xf4\x26\xa6\x2a\x79\x98\xd2\x57\x6a\xec\x30\x43\xf7\xf5\xd2\xd2\x26\xe6\xa1" + - "\xe7\xe1\xfc\x23\x3b\x60\xe6\x28\x69\xf1\x02\xf4\xe3\x35\x27\x2c\xfd\xaf\x3e\x0e\x6f\x51\xf6\xfd\x2b\x6e\xa9\x4f" + - "\xc5\x39\x5b\xf0\x69\x07\x3f\x81\xdf\x3b\x0d\xa3\xd7\xba\xe1\x23\xc4\x01\x9e\xff\xaf\x7e\x3e\xd7\xe2\x11\xfe\x1e" + - "\x2e\x89\x19\xa7\xd3\x99\x4a\x65\x34\xad\xd8\x61\xaf\x52\x8f\x08\x0f\x82\xd0\x9a\x6d\x5e\x36\x33\x3a\x23\xfc\x94" + - "\xe4\xa2\x7e\x61\xcd\x36\x16\x25\x33\xcf\x73\xae\x1e\x14\xc8\x35\xd8\x89\xdf\x77\xe5\xd8\x11\x3d\x39\xc6\xb1\xe8" + - "\xf8\x23\xbe\xa9\xcd\x46\x6f\x5e\x74\xbd\xd6\x91\xa2\x3e\x91\x0f\xe2\x94\x60\xf4\x43\xb4\xd6\x0f\xd6\x86\x3c\x0c" + - "\xab\x1d\x33\x9c\xae\x57\xa0\x2d\x71\x46\x0f\xe4\x52\x74\x58\xef\x79\x4e\x23\xeb\x6b\x2d\x70\x09\x10\x90\xd4\x3a" + - "\x57\x7d\x04\x7a\x23\xbf\xed\x40\x92\x0e\xf8\x19\x03\xe5\x17\x17\xa3\x69\x55\xd3\xf2\x69\x9a\x35\x55\x9d\x55\x5f" + - "\xfb\xf9\xfb\x78\x2c\x28\x84\x54\x8f\x51\x8f\x35\x89\xae\xfb\x7f\xd8\x0a\x32\xeb\xff\x85\x36\x6c\xa7\x3e\x86\xb2" + - "\x86\xeb\x38\x56\x9f\xae\x6f\xd6\x67\x5c\xd0\xaa\x54\x33\x23\x56\xf1\xce\x8b\x8c\xf5\xc1\x50\x38\xdc\x22\x05\xc5" + - "\xda\xa9\x59\xf4\x3b\xca\x2f\x28\x46\x19\x1e\xca\x51\x8e\x41\xf1\x18\xba\x50\x21\xc7\x50\x95\x08\xa3\x00\x20\xb5" + - "\xcc\x18\xa4\x10\xe2\x08\xd8\x2e\x98\xe0\x2e\x90\x20\x6b\xa9\xe7\x9a\xf2\x15\x83\x39\x9a\xee\x49\x76\xa4\x9a\x99" + - "\xf0\x3e\xc0\x0d\x69\xd4\x4d\x7e\x26\xcd\x6b\x30\xf2\x86\xec\x37\x08\x67\x73\xba\xce\xc8\x12\x21\xac\x2b\x94\xfc" + - "\x08\x55\x57\x7c\x33\x2d\x8d\xfc\x8c\x81\x8e\x5b\x1a\x01\x69\x58\x1a\x77\xc3\xe6\x0f\xeb\x64\x9b\x60\x0d\x4b\x96" + - "\xd9\x26\xb8\x61\x21\x96\x46\x67\x6d\xdc\xd2\xc8\xfa\x0c\x4b\x63\x7e\xc6\x05\xed\xb0\x34\x66\xf1\xce\x8b\x8c\xf5" + - "\x81\xcb\xd2\x88\x62\xcb\xd2\x58\xdf\x51\x7e\x9d\x96\xc6\x2a\x47\x39\x76\x5a\x1a\xbb\x7c\xc4\xd2\x08\x84\x51\x80" + - "\x00\x4b\x63\xe8\xfc\x08\x58\x80\xa5\x31\x46\xc6\x18\xd8\x88\xa5\xb9\x7e\x48\x63\xf6\x06\x50\xf1\x66\xef\xeb\xc9" + - "\xc8\x0d\xc9\xb0\x91\xb9\x4a\xf7\x0f\xab\x14\xe1\x6f\x99\x12\xba\x4c\x11\xc2\xba\x66\xc9\x8f\x50\x87\x65\xd6\x20" + - "\xc3\xe4\xc8\xcf\x18\xe8\xb8\xc9\xd1\x73\x2e\x8d\x37\x6c\xb9\xdc\x66\xcb\x25\xb6\x85\xbb\x7d\x58\x2e\xb6\xa1\x0d" + - "\x0b\x31\x39\xce\x74\x50\x0e\x93\x23\xeb\x33\x4c\x8e\xf9\x19\x17\xb4\xc3\xe4\x98\xc5\x3b\x2f\x32\xd6\x07\x2e\x93" + - "\x23\x8a\x2d\x93\x63\x7d\x47\xf9\x75\x9a\x1c\xab\x1c\xe5\xd8\x69\x72\xec\xf2\x11\x93\xa3\xd2\x62\x8d\x00\x04\x98" + - "\x1c\x43\xe7\x47\xc0\x02\x4c\x8e\x31\x32\xc6\xc0\x46\x4c\xce\xf5\x43\x1a\x33\x39\x80\xca\xa8\xc9\xc9\xcb\x43\x15" + - "\x6a\x6f\xf6\x69\x82\xee\x5a\x2d\xd7\xfb\x87\x8c\x98\x54\x75\x9d\x62\x5f\xa0\xea\xb2\x3c\x53\x16\x88\xa1\x2a\x20" + - "\x67\x95\x6f\x14\x5f\xd1\x88\xc5\x6c\x9f\x64\x2b\xcc\xa8\xaf\xb7\x64\x9f\x8e\x37\x22\xc4\xaa\x28\x7e\xc6\x0d\x0a" + - "\xab\xc4\xb0\x26\xda\x37\x44\x8c\x0e\x3b\xa2\x95\xd9\xa2\xc5\x2d\x88\x5e\xa2\x9b\x8f\xbe\xcc\xb2\x1d\xfa\x47\x9b" + - "\x3b\xa7\xd5\xd0\x0b\x6d\xfe\x2c\x7b\x81\x16\x29\x0e\x5d\x23\x8d\x67\x41\xf3\x95\x06\x98\x09\xa8\xad\x3e\x98\x00" + - "\x03\x01\xb4\xda\x4f\x6a\xcc\x34\x5c\x37\xfa\x50\xbb\x30\x90\x18\xb5\x0b\xf2\xf0\x46\xd8\xa8\x3a\x24\x24\x5b\x62" + - "\xcc\x51\x4a\xe6\x8b\x35\x42\x58\x57\x1c\xf9\x11\x76\xbc\xcc\x11\x66\xb8\x22\xf2\x33\x06\x3a\x6e\x29\xf4\x0c\x6b" + - "\xe3\x0d\xa3\xe9\x76\x33\xc3\x16\x9c\xd9\xea\x61\x35\x9b\x87\x36\x2c\xc4\x68\x38\x93\xbf\x39\x2c\x87\xac\xcf\x30" + - "\x1e\xe6\x67\x5c\xd0\x0e\x13\x62\x16\xef\xbc\xc8\x58\x1f\xb8\x6c\x89\x28\xb6\xcc\x89\xf5\x1d\xe5\xd7\x69\x54\xac" + - "\x72\x94\x63\xa7\x2b\x62\x97\x8f\xb8\x22\x2a\x09\xde\x08\x40\x80\x8d\x31\x74\x7e\x04\x2c\xc0\xd2\x18\x23\x63\x0c" + - "\x6c\x2c\xce\x72\xf5\x90\x46\xa3\x2d\x03\x95\x51\x93\xc3\x93\xb7\x05\x5a\x9c\x6c\xbb\x5a\x2c\xd1\x81\xb9\x5c\x1c" + - "\x16\xc4\xa6\x6b\xc4\xef\xf8\x37\x2d\x50\xc8\x73\xc7\x21\x60\x66\x70\x0e\x66\xa3\xf3\x46\x4e\xaf\x69\x50\xba\x5d" + - "\x24\x73\xcc\xf5\x23\xe9\x7c\x3b\x5f\x85\x35\x28\x28\x9e\xeb\xc8\x03\xe8\x0a\xe7\xf2\xca\xcc\x68\xae\xfe\x15\x15" + - "\xae\x2b\x96\xab\x97\x62\x02\x77\x44\x72\x8d\x32\x23\x90\xcb\x4a\xed\x38\xae\xf1\x19\xe3\xd4\x1d\xc5\x35\x8a\x31" + - "\x5e\x1d\x6e\x8b\x55\x38\xea\xb8\xc8\x2c\x88\xfe\xf2\x90\x00\xae\xa6\xdb\x7e\xa8\x90\xf0\x2d\x1c\x03\x63\xe4\x46" + - "\x8c\xca\xd5\xa3\x16\xb3\x29\x80\xc8\xa8\x4d\x29\xf2\x92\x6f\xd3\xa3\x37\xbc\x5d\x81\x1e\xb9\x27\x9a\x98\xa4\x44" + - "\xe7\xf6\x3f\x75\x45\xea\xbf\xec\xac\x2f\x40\x1b\x3d\x02\x56\x3c\x7a\x9f\x56\xb9\x76\xfb\xcc\xc3\xba\xcd\xa8\xa6" + - "\xba\xec\x03\x48\xa1\xa9\xf5\x94\xfd\xd8\x4b\x10\x11\xb5\xca\x5a\xac\xe6\x9b\x14\xdd\x65\xbd\x94\x19\x6d\x8a\xdc" + - "\xda\xd7\x1e\xaf\xd8\x31\x04\x8d\xa2\x91\x99\x1d\xb4\x60\xa4\xaf\x90\x66\xc1\x17\x6b\x3c\x3b\xc7\xea\x90\xc7\x53" + - "\xff\x97\x64\xf3\x08\xcf\xf9\xfc\x2a\xf7\xe8\x40\xdd\xed\x19\xd6\xad\xdf\xeb\xbd\xef\x4d\x54\x50\xe9\x4b\x0b\x2b" + - "\x7d\x69\x8d\x06\xf3\xfd\xeb\xbb\xd5\xe9\x3b\x71\x6a\x27\x2b\x1b\x50\x3e\x19\xd8\xc6\xe9\x54\x3b\xc7\xcc\xfe\xd2" + - "\x75\x55\xf9\xd3\x80\xa6\xdf\xab\xa7\x2d\xed\x5c\x85\xed\x65\x7f\xce\x61\xa9\xb0\x99\x08\x7f\x07\x92\x71\xfb\xa7" + - "\x36\xc3\xb5\x43\x04\x30\xfd\x93\xdc\x6f\x9f\xce\x56\x6d\xd4\x0b\x8e\x67\x7d\x35\x32\x4e\x39\xa0\x46\x40\x20\x3b" + - "\xd3\xbc\xd4\x39\x52\x59\x80\xd2\xaa\x28\x48\xdd\x52\x5d\xfc\x70\x18\x48\x08\x49\x03\xcd\x3d\xd7\x35\x6e\x38\x91" + - "\x67\xb1\xfa\x2a\x61\xf7\x55\xf6\x1a\x00\xce\x75\xd1\x60\x43\x2e\x71\xf1\x63\x85\x52\xed\x98\xc0\x65\x9e\x5d\x98" + - "\x80\xd7\xee\x84\xb8\xcb\xcf\x79\x79\x8c\x0f\x97\x52\x1c\x15\xa2\xa4\xa5\x56\x2f\xb8\xc1\x82\x48\xd9\xd5\x66\x17" + - "\x69\x73\xa6\x0b\x24\xcf\x18\x52\xee\x47\xb6\x6b\xa8\x9b\xaa\xa6\x4d\xdf\xdb\x5c\x2c\x93\xe8\x39\x6f\xf3\x7d\x5e" + - "\xe4\xdd\xab\x5d\xdf\x18\x74\x20\xa8\xea\x2e\xd2\xd0\xce\x7f\xe8\x0c\xa6\xc5\xd4\x3a\x4e\x7f\x6c\x8d\x5b\x15\xf7" + - "\x49\x30\xf8\x2c\xd3\xb2\x7e\x89\x32\xd2\x9e\xf8\xd9\x16\x3d\x5d\xe9\x72\xe4\x5c\x95\x78\x47\x0e\x83\x92\x8d\x92" + - "\xde\xf9\x24\x62\x3f\xc5\x21\x4a\xf7\xad\x5c\xc3\x9b\xc7\x4e\x52\x25\x16\xec\x99\x96\x97\xb1\xdb\xb7\x32\x57\xa0" + - "\x38\x3e\xfb\x08\xef\xdf\xce\x12\xee\x2c\x69\x83\xf9\x71\x78\xff\xa6\xc7\x79\xd4\x33\x93\xce\xd6\x58\x86\x03\x2d" + - "\x43\xe9\x7c\xc8\x60\x89\x9c\x01\x34\xdf\x76\xe3\xf3\x40\xdb\xc9\x14\xd7\xc8\xe9\x37\x63\x81\xa5\x3c\x25\x00\x51" + - "\xe4\xf5\x2e\x1a\x32\x66\xbc\x98\x14\xd0\xf2\x91\x3c\x85\xb0\xc4\x3c\x7f\x25\x4f\x6c\x85\xe6\x33\x4c\xd4\x71\x49" + - "\x8b\x14\x72\x07\xc7\x0f\x8d\xaa\xc1\x94\xbd\x4c\xca\xf4\x17\x1e\x5d\x4d\x86\xae\x87\x17\xd8\x75\x0d\x9a\x66\xf9" + - "\x73\x2e\x53\xd0\xa9\xe9\x18\x9e\xec\xdc\x45\x5b\xd9\xcb\x98\xa9\xc4\x82\x6b\x30\xbf\xab\x5e\xdf\x53\x91\x3f\x11" + - "\x7f\x62\x4d\x36\xef\xab\x24\x41\x69\x41\x49\xc3\x1e\xac\x3b\xdd\x70\x8a\xd4\x38\x70\x85\xa6\xf8\x76\x71\xa9\x7c" + - "\x4e\xa4\x08\x71\x80\xd7\xfd\x3f\xa7\xb3\xe8\xd2\x6a\xed\xdd\x23\xbd\x22\xf9\xda\x12\xb1\x58\x50\x25\x0e\x16\x87" + - "\x72\xb8\x6c\x33\x46\xd2\x35\x6c\x0e\x0b\xa9\x11\x83\xf4\xa4\x56\xf1\x18\xdb\x43\x19\x88\xbc\xb8\x61\x50\x77\x7c" + - "\xb4\x5a\x97\x4c\x50\xc2\x4e\x21\x38\x8e\x41\x8e\xae\xe4\xdc\x47\x45\xe5\x09\xca\xba\xa9\x8e\x79\xb6\xfb\x2f\xff" + - "\xf3\x8f\x7d\xf9\x9f\x7b\xf4\x43\xd5\x9c\xa7\x7f\xca\xd3\xa6\x6a\xab\x43\x37\x3d\xf6\x36\x85\x96\xdd\x07\x5a\x32" + - "\x8e\x7f\x38\x90\xa2\xa5\x6a\xe8\x1b\x11\x20\x35\x0f\xa0\x0e\x17\x87\x26\x21\x93\xc9\x6d\x06\x84\xcd\x87\x10\x49" + - "\x5e\x79\x32\xf2\x06\x29\xa4\x13\x25\xd2\xdc\x04\x9a\x80\xf1\xc5\x03\x36\xe4\xc5\xd2\x2d\x64\xc8\xf7\x9d\xd6\xff" + - "\x61\x4c\xa7\x87\xfc\x85\xf7\x3a\x9e\xc9\x42\x3b\xf0\x8e\xcd\xb0\xdb\xad\x6a\xfd\x60\xa0\xb1\x9e\x1b\x17\xf7\xa5" + - "\x8e\xb8\xab\x34\x89\xa6\x25\x79\xde\x93\x26\x66\xdc\x89\x53\xf7\x83\xb2\x47\xc0\xa3\x4a\xab\xb2\xa3\x65\xb7\x8b" + - "\xde\xbf\x37\x1d\x20\x2c\x41\xb7\x72\x69\xcc\x8a\x35\x86\xc7\x19\xb0\xdb\xc7\xaa\x94\x7a\x31\xdc\x00\xc4\xdf\x6a" + - "\x0d\xbe\x6e\x21\xd8\xe0\x5a\x8b\xd4\xaa\x89\x15\x79\x8f\xd9\x83\x3f\x28\xb5\xa9\xd5\xef\xec\x27\x74\x87\xf5\xb0" + - "\x58\x07\xf3\xb5\xb1\xf4\x44\x6f\xc9\x97\xe7\xba\xd7\x65\xae\xbf\x25\x1c\x5c\x85\x8b\x3b\x70\xc3\x39\x6f\xac\x66" + - "\xe0\xe3\x8d\x50\xd5\xc3\x61\x08\x80\xb9\x8f\x87\x81\xc0\xe8\x0d\x56\xae\x47\x7c\x87\x16\x20\x95\x6b\x75\x5a\xdf" + - "\xf5\x30\x2f\x28\x18\x4c\xfe\x90\x80\xc6\x6a\x39\x23\xf7\xc9\x94\xe5\xf0\xd5\xee\x65\xf0\x93\xe3\x69\x55\x9b\xa5" + - "\xf6\x8d\x2a\x79\x75\x4a\x0f\x74\x74\x55\x55\xec\x49\x83\x00\xae\x70\x40\x8b\x39\x55\x60\xde\x04\x75\x74\xbc\x80" + - "\x87\x7a\x04\x3f\x61\xb4\x9f\x2c\xda\xfa\xab\xdc\x48\xbc\x88\x77\x45\x59\x75\xd1\x07\xed\xe1\x8e\x8f\xe2\x1b\x78" + - "\x47\x42\x7c\x32\x97\x46\xdf\x7e\xf3\xee\xe3\x2f\x23\xf1\x5c\xa8\x0e\xc6\xeb\x20\xe6\x6d\xc2\x31\xa4\x60\xbe\x22" + - "\xc8\x55\x57\xd5\xdc\xaa\x0c\xfc\x59\xe6\xd6\x04\x70\xf0\x32\xd4\x8c\x89\x4d\xd7\x7f\x73\x15\x59\x56\xdd\xb7\xdf" + - "\xbc\x33\x50\x0c\x36\x7b\x49\xf8\xb8\xd4\xcb\x71\x26\xc7\xb5\xcb\x84\x0d\x54\x81\xc1\x88\x85\x75\xb7\x20\xee\xef" + - "\x3f\x53\xae\x88\xb1\x08\xa4\x63\xaa\xc0\xaf\xa2\x01\x82\x17\xbf\x1e\xe0\xca\x7e\xbf\x6e\x8e\x2c\xdd\xb2\xed\x2f" + - "\x73\x34\x2d\x40\x87\xdf\xa9\xb7\xf1\x13\x8a\x65\xe4\x22\x7b\xc0\x52\xff\x3e\xb8\x8c\x0c\x4b\xed\x15\x40\x75\x36" + - "\xc7\xc8\xce\xe6\x08\x5d\x4f\x03\xff\x2e\xf7\xbe\x7c\x5c\xe9\xdb\x4f\x37\xee\x2e\x41\x57\xd2\x6d\x38\xd9\xc5\x56" + - "\x05\x27\xd4\x4a\xc4\x8b\x56\xa2\x21\x88\xc6\xc9\xa0\x9e\xe9\x6b\x8e\x91\x4c\x24\xd1\x2b\x9c\x21\xbd\x44\xcc\x65" + - "\x1e\x77\xc5\x74\xa1\xec\x65\x0a\x78\x22\xfa\xd1\x7e\x99\xc3\x78\xae\x66\x84\x53\xb3\x36\xe4\xf9\x69\x07\xa6\xe5" + - "\xa9\x20\xc5\xa1\xad\x1d\xa1\x65\x39\x31\x22\xa6\xa0\xa5\x90\x9e\x21\xb7\xc2\xed\x21\x6f\xb8\x7e\x61\x53\x41\xd0" + - "\x24\x60\x3a\x9d\x5e\xfb\xed\xb5\xd6\x22\x98\xe7\xb5\xd7\x57\x5b\x51\x83\x3d\xbf\x49\x0f\x35\xe0\x41\x33\x8d\x86" + - "\xbd\x1c\x1d\x3b\xd7\x4f\xd2\xf2\x60\xc0\x75\x3d\x74\x87\xf9\xfa\x26\x82\xb6\x4f\xf9\xcb\xaf\xdc\xd9\xb7\xcd\xe2" + - "\x3a\x63\xd7\xaa\x81\xcd\xd2\x5f\x2f\x6d\x97\x1f\x72\x9a\x21\x1b\x69\x88\x19\xe3\x1b\x6c\x05\x79\xad\x2e\x1d\x08" + - "\x86\x0c\xc7\x06\xd8\xbe\xdc\x2e\x6a\x69\x4d\x1a\xd2\x21\xd6\x4a\x55\x68\x9b\x64\xbd\x08\xb8\x90\xe3\x8f\xf2\x43" + - "\x56\x11\xe3\x8a\x52\x56\xd6\xd5\x6b\x97\x71\x54\x3b\xb2\x60\xc5\x68\x7e\xcc\x48\x47\x84\x3a\x89\xdd\xe3\xf6\x27" + - "\x6e\xd2\xf1\xdc\x28\x61\x08\x43\x56\x78\x37\x3c\x9c\x3e\xae\xad\xcb\x81\xab\x32\xb3\xb8\x77\x97\xf8\x9e\x4a\x43" + - "\xd3\x6e\x70\x50\x12\xe6\xd0\x8c\x67\x5d\x1d\xfa\x7a\x24\x2a\xa2\x14\x73\x54\xe5\x00\xe1\x1f\xd3\x82\xb4\xed\xef" + - "\x7f\x48\xab\x22\xfe\xc9\x9c\x50\x1f\x6f\xc9\x75\x7e\xb4\x13\x1e\x79\xb8\xd7\xf3\xdb\x1a\x7b\x69\xfe\x47\xec\xb0" + - "\x7a\xd9\x99\x12\x23\xd7\x92\x59\x8c\x66\x58\xf2\x42\xed\xbb\x72\x70\x38\xfe\x6e\x59\xb0\x5d\x0d\x74\x00\xa1\xcd" + - "\x0c\x80\xf5\x36\xf6\xca\x94\xdb\x7e\x96\x3d\xe0\x1e\xe6\x03\xb1\x64\x33\xac\x9c\xdf\x0e\x9e\xc4\xee\x06\x0a\x68" + - "\x73\xe3\x26\x8a\xf1\xe0\x49\x8f\xad\xbf\x2a\xe4\xd5\xdd\xbe\x78\x5c\x77\x4d\x28\xb4\x3b\x7f\xbb\x07\x08\x5c\x2d" + - "\x73\x00\x85\x2a\xed\x55\xad\xbc\xf2\xb5\x03\x3f\xcb\x1e\xf0\xeb\x95\xd6\xd5\x0c\x87\x7e\x59\x3c\xb9\x94\x16\xe7" + - "\xc6\x4d\xf4\x76\xa5\xb5\x32\xdb\x21\xd5\xa2\x29\xea\x10\xc7\x65\x94\x7c\xa0\x8f\x6d\x8d\x09\xc6\xc7\xad\xc8\xf7" + - "\x59\x75\x85\x8a\x45\x79\x6a\x8e\xcd\xb8\xf1\xed\x0e\x3c\x1f\x67\xe8\x73\x97\xe3\x07\x06\x1e\xed\x97\x2f\xf1\xe4" + - "\x53\xee\x57\xf3\xae\x79\xf5\xd2\xd9\x2c\xf4\x49\x96\x51\x4b\xe6\x3e\x32\xe9\xaa\xe0\xda\x73\xa9\xee\xd3\xa7\x76" + - "\xcf\x38\x32\x01\x7a\x01\x35\x77\x53\xcb\x80\x37\x3e\x7e\xe0\xe3\xe1\x48\x35\xe6\xe3\xe2\xd6\x38\x00\xe5\x72\x8d" + - "\x32\x06\x02\x9c\xe6\x71\x92\xc6\x52\x13\x21\x0f\xde\x8c\xd6\xd7\xde\x2c\x76\x6f\xad\x84\xc7\x29\x58\xe3\xf8\xdb" + - "\x6f\xde\xfd\xda\xbb\x16\x5e\xc1\x6b\x11\x7c\xf5\x24\xf8\x58\xcf\x82\x15\x3f\xd6\xb1\x46\x40\x20\xac\xd3\x9c\xab" + - "\xee\x20\x1a\x8e\x1d\x98\x91\xee\x40\x49\xa3\x9d\x1e\xd2\xbf\xde\xd0\xc5\xed\x91\x7e\x9f\x7c\x61\xf7\xb9\xd7\x47" + - "\xf1\xc8\x7e\xf3\x60\x56\x92\x91\x53\x19\x4e\x2f\xc8\x7d\x7e\x12\x43\xf9\xa4\xf0\x9c\x5b\xad\x18\xda\xb0\xb3\x81" + - "\x96\x0e\xfb\xcb\x68\xb1\x6f\x97\xf9\x6e\xa6\x47\xb7\x94\x2a\x27\xa7\xb3\x5d\x96\x46\x06\x1a\x21\xbd\x1e\x5b\x7c" + - "\x25\x79\xd6\xb6\x54\xc0\x11\x18\x2c\x25\xa4\x79\xce\x13\x90\x79\x2a\xf2\x90\x78\x80\x76\xae\x89\xa3\x89\x93\x4d" + - "\xa1\x8f\x53\x1a\x73\xde\x4a\x6b\x8c\x7e\xe8\x4f\x7d\x08\x38\x2c\x86\x3b\x06\x3a\x69\x70\xfe\xcc\x75\xa4\xcd\x02" + - "\x34\x98\x19\x3d\x1b\xe7\x3d\xd6\x77\xcb\x89\x36\xd8\xd5\xe2\x24\x19\xe7\x46\xfe\x05\x39\x54\xdf\xc0\x15\xa3\x11" + - "\x8f\xc9\x38\x60\xa8\x55\x57\x92\xe7\xf8\x57\x3f\x9b\x2a\x7b\xf9\x29\x3f\x1f\x85\xb1\x50\x7b\x37\x86\x92\xc6\x1d" + - "\xd9\x6b\x89\xed\xd5\x41\xa6\xc1\xe9\xcb\xb2\xcc\xc4\x90\xba\x6d\x9e\xaa\xd6\x47\x88\x31\xae\x24\xa6\xd0\x15\x7d" + - "\xa8\x8f\x1f\x81\xbb\x21\x45\x28\xfb\xff\xc9\x60\xda\x35\x26\x9c\x97\xc6\xfa\xde\x14\xff\xc1\x9b\x0e\xcf\xb0\x62" + - "\x9f\xa1\xfe\xd8\x85\xd8\xe9\x55\xe1\xa1\x4b\x6d\x16\x09\xe1\x5c\xc7\x6b\x61\x4e\x39\xb3\xa7\xec\xc9\xd1\x3b\x00" + - "\x18\x7b\xec\x87\x1e\x47\x37\x62\x7a\x86\x72\x58\x02\xd5\x29\x18\xda\x81\xa9\x9c\x85\xa0\x2b\x85\xac\x68\xe5\x7a" + - "\x0a\x6b\x84\x5e\xf8\xc1\x3d\x2b\xea\x1d\x70\x40\xcf\xd3\x64\x57\xa4\x1f\xc6\xf6\xd5\x41\x3d\xaf\x24\x90\x38\xea" + - "\x70\x38\x2f\x50\x8c\xfa\xc1\x4e\xd7\x9a\xcd\x25\x43\x44\xcb\x5d\x20\xc0\x85\x18\x05\x35\x87\x9d\xc3\xd6\xdc\xdc" + - "\x0f\x52\x7e\x5e\x83\xf6\x08\x20\x50\x83\xe1\xed\xa4\xdb\x44\x73\x95\x6c\xf0\x41\xcc\x2f\x0c\xeb\x7a\x50\xe7\x45" + - "\x81\x19\x64\x0c\x46\xc8\xc6\xaf\x0b\x12\xf8\x93\xa0\x69\xde\x48\xc2\x60\x4d\x89\x58\xdf\x35\x9b\x68\x97\x7a\x8e" + - "\xf4\x3b\x4f\xee\x43\x3e\xda\x8e\xa4\x5f\x46\x2d\xcf\x00\x65\xb4\x8d\xbf\x28\xe2\xdb\xe9\xf7\x9a\x48\x14\x68\x84" + - "\x97\x3b\x19\xbf\xdf\xcc\xe6\xbd\xd1\xd4\xdd\x6a\xe1\x0c\xa1\x8f\x4d\x44\x77\x33\x86\x23\xa3\x3d\xd0\x08\xfe\x16" + - "\x06\xf0\x57\x37\x7e\x6f\x12\x45\xb0\x2c\xc2\x0c\x5e\x47\xf6\xb1\xb8\x01\xf0\xc4\xfe\xa8\x49\xe9\xb9\xbe\xab\x81" + - "\x83\xdc\xe7\xce\xd5\x17\xf7\x87\x91\x01\x84\x9d\x09\x7a\xe3\x19\x06\x7e\x54\xdf\xb3\xd4\x83\x0f\x5b\xac\xf0\xe7" + - "\xe5\xe5\x6d\x12\xaf\x73\x7c\xd5\xd5\x03\xad\x33\xb4\x01\x12\xfc\x80\x83\xb8\x83\x00\xee\xc4\xe8\xf3\x92\x36\xca" + - "\x7b\x48\xed\x1e\xb6\x79\x98\x71\x85\x1e\x66\x14\x5f\xe5\xfa\x28\x7e\xd9\xf1\x7b\xb8\x85\x76\xe5\x58\x15\xb7\x69" + - "\x53\x15\x05\x5b\x25\xb3\xa7\x11\xcc\xab\x23\xce\x45\xc5\xd8\xb3\x5e\x09\x3f\xd0\x38\x5f\xad\x26\xd1\xf0\x9f\xe9" + - "\xcc\xfb\x0a\x99\x13\xc9\x21\x17\x75\x83\x5d\x36\xe7\xf5\x5a\xf3\x6d\x49\xd9\x7a\xcb\xc9\xba\x48\xe3\x3d\x61\x89" + - "\x1c\xb1\xd4\xee\x9f\x28\xce\xf5\x4a\xf5\x71\x17\xfd\x53\x7e\xae\xab\xa6\x23\x5c\xd4\xda\x26\x96\x59\x66\xbe\x1d" + - "\xcf\x59\x1c\x96\xc7\xa2\xf3\x01\x9a\x8b\x23\x21\x4b\x4d\x98\x02\xdb\x40\xd1\xef\x02\x19\x74\xcc\x2b\x43\x5d\x55" + - "\xdb\x30\xd2\x00\xf6\x1f\xf9\xa3\x57\x28\x1c\x67\x08\x3b\xc3\x81\x3f\x59\xa4\x29\xc9\x9b\xb9\x54\x21\xb1\x17\xf0" + - "\x06\x71\x82\xdc\x58\x22\x2f\x71\x46\x9f\xf3\x94\x4a\x25\x5b\x3e\x24\xf5\xcb\x47\x52\x66\xd1\x87\xaa\xc9\x69\xd9" + - "\xf1\xe8\x4c\x41\xca\xac\x4d\x49\x4d\x75\xfd\xbb\x07\xa3\xef\x84\xe3\x30\xb0\x3a\x4f\x12\xfd\xbd\x97\xde\xde\x93" + - "\xbc\xa4\x4d\x7c\x28\x2e\x79\xf6\x84\xd4\xe4\x02\xe1\x16\x8b\xcd\xe0\x0a\xc4\x8b\xff\x84\xd8\xba\x7b\x3f\x2b\x74" + - "\x97\xf6\xbc\xa5\x41\x98\x03\x85\x3e\x61\xa5\xa9\x25\x50\xf7\x5f\xb0\x1b\xfa\xe6\x09\x68\x66\x19\xaf\x33\x68\x46" + - "\x15\xc8\xae\xae\x77\xb0\x60\x2a\xf7\x0b\x7e\x57\xd2\xbe\xcb\x68\xa6\x1d\x58\x24\xd7\xf1\x1e\xc2\x48\x78\x83\x24" + - "\x86\x75\x0d\x12\x15\x2f\x3a\x20\x7f\x31\x2f\x7f\x62\xe1\x6e\x9d\xea\xcc\x8a\xae\xf5\x54\xf7\x4d\x6f\x10\x90\xe8" + - "\xa0\xe9\xca\x0c\x71\xeb\x95\x88\x5b\x87\x1c\xc9\x9a\x27\x56\x3b\x58\x8d\x70\x81\x39\x7c\x1c\x89\x73\x63\x84\x54" + - "\xd4\x14\x75\x12\xc3\xba\xf7\x69\x18\x51\x3a\x43\x8a\xbf\x27\x73\xd0\xea\x70\xc0\xd4\xd9\x66\xc3\x52\x02\x78\x15" + - "\xc4\x77\x33\x92\xa9\xb1\x26\xfa\x2d\xd8\x87\x87\x2e\xee\x83\xf6\xc9\x70\xc5\x0c\xcd\x90\x3b\xea\xb7\xdf\x22\x7f" + - "\xc3\xeb\x4f\x9a\x04\xbc\x39\x46\x74\x59\x4d\xf3\xb4\x2a\x63\xe9\xef\x3a\x53\x2f\xcd\xe7\xfa\x5b\xf6\xf8\xf9\x04" + - "\x7b\x68\x99\xb5\x7c\xd2\xeb\x83\xa2\x5e\x5e\x6b\xf6\x40\x6f\x9b\xab\x1e\x4b\x33\xe4\x76\x96\xdc\x58\xd8\x4c\xfb" + - "\xb1\x16\x1b\x9b\x44\x02\x12\x6c\x3d\x69\x2f\xb8\xe9\xe3\xd5\x7a\xed\xd4\x35\x3c\x35\xc7\x41\x35\x67\x63\x36\x47" + - "\x6d\xb2\xa0\xd7\x9d\x07\x7d\xe6\xd6\xfe\x11\xac\x26\x94\x33\x6a\xfa\xb2\xf6\x43\x93\xa3\xca\xa9\x74\xf0\xed\xbe" + - "\xaf\xb3\x41\x66\xba\x80\xc1\x58\xb9\x50\x58\x8f\x0c\xaf\x49\x6a\xa7\x67\xe4\x3d\xa4\xb9\xb2\x09\xa3\x1c\x80\x00" + - "\x01\xd2\x69\xe1\x24\x4c\x5b\xeb\x07\x96\xb1\x3d\xde\x08\x57\x0e\xcf\x6b\x57\x97\x52\xb3\xcd\x59\x46\xa9\x7a\x62" + - "\xb7\x48\x85\xae\xac\xe5\xe8\x3b\x74\x18\x18\xe3\x40\x98\x3f\x7b\x20\xe0\x56\xf9\x50\x35\x67\xec\x50\xd2\x2a\xd0" + - "\xdc\x9a\xae\xa3\x61\x6f\xed\x99\x21\x78\x51\xeb\x8c\x0e\xdd\x6b\xf1\x3b\x91\x00\x2c\xd9\xc0\x1d\x17\xc8\x21\x84" + - "\xaf\x74\xc4\xfa\x5e\xfa\x75\xdf\x5b\xb6\x6b\xfa\x55\xde\x5b\x76\x56\x13\xfe\xde\xb2\x46\xe2\x6e\xef\x2d\x3b\xa9" + - "\x9a\xa7\x52\xdd\x80\x8e\xf7\x96\xc3\x10\x7c\xef\x2d\xbb\x28\x04\xbe\xb7\xac\xa1\xdf\xe7\xbd\x65\x9d\xe4\xf0\x02" + - "\xae\xf6\xfd\xb7\x7b\x6f\x19\x65\x47\xbd\xb7\x8c\x30\x35\xfe\xde\x32\x4e\xd2\x71\xca\x12\xa9\xe1\x4e\xef\x2d\x6b" + - "\x94\x6f\x7f\x6f\x39\xd0\xcd\xc1\xed\x8c\xbd\xe5\xe3\x1e\xcd\xe6\x75\xbb\xd1\x4d\x94\x6b\x2c\x20\x1a\x13\xd4\xa6" + - "\xbf\xc4\x13\x87\x1b\x8f\x10\xdc\xc7\xc7\xc2\x3c\xd6\x91\x60\xbd\x19\x8c\xbf\x3d\x52\x8f\x07\xb0\x46\xb9\xc0\x16" + - "\xd0\x16\x23\x4b\x6b\x47\xe1\xd7\xbb\xbb\x2b\xd7\x99\xfa\x49\x42\xc4\x0f\x01\x0e\x87\x8d\x3b\x05\x19\x79\x21\x89" + - "\x19\xbe\x51\x31\x43\x96\xed\x82\x88\xc8\xb0\xab\x11\x59\xe2\x44\x90\x85\x1f\x7d\xe9\x6c\x74\xdc\x71\xba\x22\xe8" + - "\x66\x52\x77\x78\x99\xe6\xca\x58\x57\x7a\xc3\x2f\x0c\xac\x73\xc8\xd2\x04\xea\x74\xc7\xb5\x87\xfc\x66\xda\x2a\xdf" + - "\x8c\x9f\x23\xae\x25\x4a\xe8\x7f\x23\x74\x8d\xd1\x8d\x0c\x45\xf8\xc2\x2d\x76\x62\xe9\xa1\xff\x87\x9c\x90\xa3\x9b" + - "\xfe\x9f\x83\x98\x1d\x50\xc2\x8f\x17\x3a\x71\xcc\x65\x0a\x0e\x84\x9e\xc7\x62\x07\xea\xae\x39\x49\x88\xd1\x57\xda" + - "\x13\xce\xb7\xb6\xfc\xb8\x1e\x6d\xac\xc5\xfa\xf9\xcf\xd0\xf7\x7b\xc3\x5b\xdc\xd3\x37\xf6\x88\x47\xc1\xf4\x6d\xf3" + - "\x71\x70\xfb\x90\xa8\x38\x3d\x87\x9d\x8b\x0c\xd1\x2f\x46\x5e\xcb\xf0\x18\x06\x18\xc8\xb8\xf7\x7c\xab\xbc\x50\xf3" + - "\x16\x2d\xb3\x12\xf5\xa8\xa7\x07\xb4\xd3\x8b\x6e\xdc\x31\xad\x11\x50\x63\xaf\x25\x04\xd6\x66\x84\xde\x10\x4a\x0f" + - "\x0f\x0f\x23\x94\xec\x5d\x23\x13\x42\x39\x35\xb7\x58\x1c\xd6\x6f\xf0\x64\xf0\x08\x50\xa0\x26\x58\x27\x89\xaf\x54" + - "\xe0\x40\x4f\x13\xa9\x7b\x2c\x1a\xa4\x59\x1a\x6d\x56\xb8\x8a\x98\x71\xec\xe3\x7a\x7c\x70\x1c\xc4\xb0\x4a\x63\x43" + - "\xe4\x36\xa6\x07\x5b\x75\x13\xcf\xae\xf3\x2e\x37\x12\x41\x5a\x2f\x34\xc3\xa7\x1a\x37\xb6\x1c\x18\xbc\xdb\xd8\xc6" + - "\x0c\xe1\xdb\xc8\x20\xed\x17\xf6\x31\xa4\xf7\xbd\x23\x5a\xa5\x8d\x0a\x9f\x53\x1d\x8f\x67\x80\x77\xb7\x4d\x44\x2d" + - "\x3f\x55\x40\x45\xd6\x53\x24\x4e\x80\x9b\xd8\x40\x1e\x1a\x09\x00\xf5\xbe\xfc\x33\xd6\x82\xab\x70\x30\x1f\x04\xbc" + - "\x8c\x2e\xf0\xf2\xf2\x99\x36\xe2\x88\x04\xf6\xe0\xf7\x7c\x8e\xf8\x95\xc9\x43\xff\xcf\x41\xc9\xed\x57\x6e\xb3\xfe" + - "\x5f\x08\x9a\x29\x51\x1c\xe8\xaa\x53\xad\xee\x19\xdf\x24\x6e\xf9\x95\x41\x7c\xa3\xae\xe5\x55\x98\x63\x8d\xf6\x7a" + - "\x97\x77\x68\xb7\xc3\xbb\xf4\x82\xd9\x53\xb3\x1f\xdc\x1e\x69\xee\x63\xc8\x41\x5a\xe6\xf4\x2e\x47\x00\x03\x19\xf7" + - "\x7a\x97\x4b\xf1\x2e\xf5\x5b\x74\xcd\xe9\x5d\xda\x16\x08\xc7\x1d\xd3\x9a\x30\xef\x32\xb4\xb6\x71\xef\x12\xbc\xb9" + - "\xe5\xa0\x64\x7b\x97\x26\x84\xcb\xbb\x9c\x25\xfd\xbf\x10\x8d\x30\xbd\x4b\x0f\x50\xa0\x26\x38\xbd\xcb\x40\x05\x0e" + - "\xf4\x2e\x91\xba\x5d\x33\x3b\x92\x1c\xdd\x65\xa8\x35\x27\x26\xb4\x0a\xfd\x99\x07\x5f\x03\x6f\x22\x8f\xf8\xc7\xd2" + - "\x5c\xde\x4e\x0f\xf1\x95\xae\xc3\x47\x9c\x24\xd1\xc1\x57\xb9\xc8\xe1\xdd\x88\xba\xc8\xd7\xa3\xbf\xa5\xe1\x5e\x17" + - "\xd9\xdd\xfa\x37\x76\xbf\xcb\x45\xbe\x85\xc0\x9b\x5a\xef\x77\x91\x85\x91\xbf\xda\x45\x36\xeb\xb7\x3c\xd7\x20\xdf" + - "\xc0\xe1\x9e\x7a\x8c\x2c\xea\x25\xfb\xeb\x72\x39\xca\x36\xc0\x4d\x9c\xb8\x1d\x65\x1f\x68\x88\xa3\xec\x6c\xc1\x55" + - "\x38\x98\x3b\xb5\x5c\x2e\x65\xb3\xf6\x0d\x25\x59\xda\x5c\xce\x7b\xfd\xb4\xc1\x83\x7d\xd8\xc0\xbc\x36\x10\xfa\x4c" + - "\x11\x7b\xd0\xc5\x7f\x10\x6b\xe0\x42\x9e\xb2\x70\xec\x34\x23\xe0\x9f\x8a\x7c\xb7\xa7\x87\xaa\xa1\x7a\x0b\x12\x79" + - "\x07\xca\x58\x0e\x0e\x6f\x40\x7c\xfe\x4b\x92\x90\xe4\x3d\x42\x15\x5e\xf7\x40\xd6\x62\x35\x39\xe6\x25\x3b\x09\xe8" + - "\xe6\xd5\xbe\x76\xa0\xbf\x0a\x95\x18\x59\x80\x11\xa9\x0c\xd5\x38\xa4\x82\x02\x32\xc7\x40\xff\xd2\xd6\x24\xf0\xe9" + - "\x83\x47\x57\x1e\x21\x2b\xe7\x81\x75\x78\xcb\xf5\xcc\x90\x7c\x27\xe7\xaa\x47\x80\x7c\xb7\x94\xd1\x56\x6b\x99\x21" + - "\x2c\x09\x68\xa5\x4a\x1a\xf6\x26\x63\xd8\x0e\xdb\x48\x0e\x59\xbd\x66\x90\x48\xc2\x66\x0b\x14\x2a\xae\xde\xb2\x8d" + - "\xe7\xe2\x02\x2c\xbf\xcc\xef\xf2\x6d\x67\x5b\x63\x80\xeb\x88\x14\xfa\x1e\x3c\x0d\x4e\x72\x80\xf7\x26\x5c\xa6\x61" + - "\x9f\xb1\xb6\x18\xb3\xbc\xc9\xb5\x2c\xee\x59\xc7\x11\x41\x8b\xdd\xe5\xd0\x98\xea\x69\x2d\x0d\xcd\x0d\xbb\x8c\x6f" + - "\xbd\xc6\x8b\xdf\x51\x85\xdc\x68\x8b\x41\xbc\x00\x6d\x85\xe9\x06\x58\x02\x52\x00\x88\x88\xb4\x32\x5c\x2d\x0c\x18" + - "\x67\x32\x8e\xe0\x9c\x1b\xba\x0d\xf0\x6b\x4c\x5c\x1c\x6d\xc3\x27\x3e\x0e\xb6\x2f\x24\xbb\x97\x8b\xb6\xc7\xbc\x20" + - "\x00\xd8\x58\xd6\xac\xc5\x7a\xd4\x9e\xac\x3d\xbc\x38\x4d\x8a\x5d\x3e\x6e\x55\x50\x56\x2c\x10\x84\x97\xf6\x8c\xc8" + - "\x9c\x7f\xb4\x65\xee\x49\xd9\xe6\x22\xed\x13\xb9\x0d\x30\x2a\xf2\xc5\xa8\xc8\x17\x1e\x5e\xdc\x22\xb7\xca\xc7\x45" + - "\x8e\xb2\x62\x81\x00\x5e\xc4\x50\x0a\x72\x27\xf0\x44\x7d\xae\x54\x43\x9c\xf8\xa8\x77\xc1\x60\x64\xcb\xf9\x1f\xaa" + - "\x99\x63\xde\x8f\xe8\xfc\xa5\xeb\xa0\x7f\x70\x4a\x12\x75\x60\x7e\x65\x0a\xc7\x9c\xe0\xe4\xa7\x37\x27\x2a\xe2\xb4" + - "\xa6\x25\x7d\xe9\x40\xeb\xf9\xdf\x4a\x00\xf0\xe4\x84\x81\x58\x37\xf4\x39\xaf\x2e\x2d\x44\x56\xdf\x4c\x02\x30\xef" + - "\x82\x80\x35\xad\xbd\xfe\xcd\x68\xb2\xd3\xc6\x6b\x65\xaa\xd6\xb7\x18\x66\xc9\xe6\x70\x5c\xcf\xd0\x02\xad\xff\xa7" + - "\x73\x7a\x8e\xa6\xeb\xfe\x3f\x0b\x7a\x36\x4c\xc0\x66\xf5\xbb\x47\x33\x29\xe5\x66\x2c\x29\x25\x7c\xb0\xd1\xd2\xf5" + - "\xc0\x94\x9a\x7b\xd2\x52\xf5\x06\xbb\xae\x61\xd3\xf9\x8a\x9e\x45\x1b\x09\x6f\xa4\x94\xb5\xfc\xd3\x19\x29\x1b\xcd" + - "\x36\x25\xd2\x81\x6b\x22\xdc\xd1\x73\xdd\xbd\xea\x82\xb4\xde\x1e\x19\x84\x8d\xbb\xf1\xea\x7a\xb9\x46\x7a\xec\x78" + - "\x0d\x58\xd6\x68\xf0\x3f\x9e\x1a\x7a\x18\xd6\xb4\x58\x99\x37\xab\x15\x3f\x05\xa3\x93\xae\x9b\xfc\x4c\x9a\x57\x17" + - "\x8a\xee\xf5\x68\x28\x28\x37\x7a\x99\x97\x9b\xf9\xc3\x3a\x19\xde\x1e\xe4\xe8\xed\x25\x4d\x69\xdb\x3a\x1b\x90\xee" + - "\x1f\x56\x29\x8a\x82\x72\xa3\x97\x79\xb9\x59\x2e\xb7\xd9\xb0\x04\xe7\xe8\x79\x79\xa8\x9c\xac\xec\xd3\x24\xa3\x36" + - "\x3c\xca\x07\x28\xf0\x32\xb1\x98\xed\x93\x6c\xa5\x13\xfd\x4a\x9a\x52\xbe\x13\x8e\x8d\xfc\x84\x64\x4b\x8a\xa2\xa0" + - "\xac\xe8\x65\xfe\x24\x68\xe9\x76\x33\x3b\x18\x9a\x48\xca\xa3\x1b\x23\xdb\xae\x16\x4b\x14\x03\x57\x5d\x58\xe4\x65" + - "\x25\xdd\x2e\x92\xb9\xea\xf8\x3d\xc9\x8e\xd4\x3f\xd1\xc1\xf7\xa0\xcd\xeb\x89\x8b\xfa\x25\xda\x38\x53\xd5\xfe\x9d" + - "\xad\x1e\x6a\x0d\xb0\x19\x17\x9c\xbf\x64\xf2\x08\xb2\x57\x83\xe4\x02\xed\xd5\xf0\xec\xc4\x4b\xfb\x04\x68\x88\x67" + - "\x32\x5e\x5a\x48\x73\x38\x9f\x3b\x38\xf6\xda\x3b\x48\x44\xb0\xaa\x0c\x37\xff\xf3\x7e\x86\xbb\x77\xa9\x38\xbb\x79" + - "\x47\xcf\x72\x9d\xa8\x58\x1e\x72\x15\xa9\xb5\xe9\x13\xe0\x1f\x59\x03\xfa\xa7\x5a\xbd\x3a\x48\x0a\x73\x40\x70\xf0" + - "\x4f\x00\x4b\x3f\x98\xb9\xc2\x53\x33\xe9\x3c\x6b\x01\x13\xe0\xa2\xfe\xf5\x72\xde\x57\x5d\x63\xe6\xa1\x5e\x20\x37" + - "\x96\x64\x10\x51\x26\x6e\x17\x2d\xcd\xcb\x13\x6d\x72\xd7\x3a\x19\x78\x64\x43\x55\xd3\xd3\x6c\x12\x81\xbf\x4f\x33" + - "\x28\x57\x41\xd0\x46\xab\xb1\xe3\xd5\xc8\xfd\xe1\xf9\x0c\x19\xa2\xf3\x24\xb1\x28\x3e\x9d\x1a\xd3\xdd\x57\x26\x6a" + - "\xd5\xff\xb3\x72\x0b\x00\xae\xed\xfb\xf7\x91\x21\x4d\x77\xae\x69\x20\x8a\x81\xf4\x2f\xce\xd7\xb6\xc4\x16\x5d\x9b" + - "\x36\x94\x96\x11\xcb\xbb\x30\x18\x2e\x78\x94\x58\xaf\x7f\xe8\xce\xe5\x83\xb8\x3b\xf5\xef\x5a\x66\x81\xab\x5a\x63" + - "\xe6\xa9\x90\xcf\xe7\x1b\x6b\x9b\x35\xb8\x53\x38\xda\xe3\xb0\xd7\xd6\x0b\xfd\x36\x5d\x77\xba\x9c\xf7\x25\xc9\x0d" + - "\x27\xd5\x5e\xa3\xe0\x67\xc6\xe7\xd8\x2d\x55\x23\xb3\xe4\xdb\x17\x34\xc6\x43\xf9\x6c\xe7\x45\xd8\x4b\x0e\x19\x4d" + - "\xe7\x6d\x44\x49\x4b\xe3\xbc\x8c\xab\x0b\xbf\x5e\x57\x05\x02\x8e\x43\xd9\xc2\x62\xd9\x3f\x27\xd1\xf0\x05\x64\x03" + - "\x85\x56\x43\x5e\xf6\xd0\x0c\x03\x48\x2e\x43\x06\x0a\xea\xe1\x5a\xf0\x6d\xb0\xcd\xc3\x27\x67\x62\x4d\xdd\x3b\x1c" + - "\x78\x9d\xa6\xa4\x56\xa1\x78\x78\x37\xfd\x11\x3f\xf1\x44\x0a\xda\x74\x46\x44\xc8\xbf\xd1\xf1\x86\x1b\xe6\xbc\xb2" + - "\xd3\x12\xbf\x59\x82\xdb\x2a\x8e\xc3\xff\x67\xd8\xec\x32\x5d\x05\x0d\xfa\xa9\x9e\x08\x84\xa7\x4b\x81\xde\x1f\x31" + - "\xc0\x3f\xd5\x16\x47\x2b\x83\xeb\x38\xcb\xdb\x73\xde\xb2\x65\xa3\xa4\x2e\xbf\xb1\x6c\x39\xbf\xd8\xf9\x96\x16\x3e" + - "\x22\xd1\x34\x2d\xaa\x16\xa7\xc5\x8b\x46\x9d\x05\xe1\x36\xc9\x8b\x08\xd2\x46\x7b\xe4\xa8\x79\xf9\x4a\x1b\xd2\xcd" + - "\x7a\xe1\x5a\xde\x66\x87\x43\x92\x61\xf7\x0d\xb2\x35\xdd\xa6\x6b\x9c\xba\x7b\x0e\x48\xb7\x74\xbe\x5f\xe0\x58\x66" + - "\x1f\xab\xd5\xca\x7e\xb5\x1c\x3c\x50\x0e\xa4\xd6\x07\x83\xff\xbe\x49\x1e\x5c\x87\x33\xb2\x2d\xcd\x0e\x58\x64\x79" + - "\x9f\xd2\x87\xc3\x0c\x21\xed\x6e\x01\x59\xd3\x19\xc5\xb8\x71\xb2\xbf\x5c\xcd\xd7\x5b\x1d\x01\xae\x2c\xd4\x51\x6d" + - "\xb2\xce\x16\x7b\x97\x11\x4d\x0f\x0f\x74\x81\xb4\xe0\x40\xe8\x3e\x4d\x71\xea\xee\x46\x1c\x36\x74\xb6\x5f\xe1\x58" + - "\xae\x76\xac\xd7\xab\x99\xd9\x0d\x60\x4d\xa2\xe4\xb3\x5d\x2e\x97\x73\x57\x33\xe6\x19\xcd\xb0\xad\x8f\xbe\x11\xd9" + - "\x0c\x25\xee\x6e\x05\x5d\xee\xb7\x69\x82\x22\xb9\x1a\xf1\xb0\x5c\xac\x16\x72\xad\xf9\xcf\xdf\x7e\x23\x67\x99\x2f" + - "\xf4\xf5\xd0\x90\x33\x6d\xa3\xba\xa9\x8e\x0d\x6d\xdb\x78\xcf\xd2\xe2\x34\x79\x4d\xf9\x70\x39\x34\xd5\x39\xfa\x05" + - "\x34\x6a\x18\x9a\xcb\x84\xfb\x02\x8c\x6a\x67\x2d\x5c\x07\xc0\x21\xc5\xcb\xbf\xf3\xea\xab\xbf\x57\xcd\x7f\x8f\x6a" + - "\xa7\xb2\x2a\x06\x0f\x33\x26\x78\xa6\x9b\xc0\xb4\xdd\xbe\x7d\xf5\xc7\x80\xfb\xf7\x73\xe4\x3d\x5d\xef\xbd\x7a\x14" + - "\x41\x05\x2c\x81\x4c\xcd\xa0\xe6\xe3\x90\x12\x85\x4d\x7b\xca\x91\x12\x09\xa2\xc7\x5e\xa3\x9a\xeb\x6b\x05\xff\x3a" + - "\xd8\xbb\xcd\xe6\x93\x49\x0c\x72\x07\x80\x16\xba\x1f\x25\xf6\x22\x60\xce\x1c\x3f\x17\x37\x5d\x73\xe7\x0b\x71\xe2" + - "\x6c\x00\x77\x29\x26\x78\xa1\xcc\xd9\x24\x1a\x3e\x8b\x4f\x91\xdd\x43\x76\x32\x0d\xc9\x74\x2f\x7d\xd2\xc4\xc7\x5e" + - "\xa3\x68\xd9\x7d\x58\xae\x32\x7a\x9c\x38\xd2\x2a\xac\x3e\xf6\x3e\xf8\x7c\xf5\xbb\x09\x74\x8b\x22\xeb\xc3\x2a\xf9" + - "\x9d\x9b\x04\x2b\x75\xa7\x65\x58\x7d\x8c\x36\x26\x3d\xf3\xc3\xc7\x47\xbc\x4d\xd5\xb5\xcd\x61\xac\xb3\xdb\xda\xff" + - "\x80\xcd\xf9\xbf\xb7\x2d\x6a\xec\x0d\x6d\xe2\x63\x9e\x99\xd6\x65\x62\xed\x0f\x19\xa5\x98\xc2\xab\x45\x85\xfa\x2a" + - "\x4f\xee\xd8\xea\x2e\xeb\x27\x65\x7e\x16\x11\x1e\x74\x22\x98\xb7\x42\xc8\x51\x5e\x1e\xf2\x32\xef\xe4\x48\xbd\x0d" + - "\xf1\x7a\x2c\x7c\x64\x5f\x13\xac\xf6\x0f\x7e\x17\xad\xff\x34\x02\xff\x98\x03\xe7\x3f\x8a\x11\x40\xf5\x3a\x7c\xdb" + - "\x63\x44\xa9\x31\x42\xff\xa9\xd1\xff\x78\x5a\xf0\x1f\x5e\xa3\xaf\xda\x43\x1b\x51\x6a\x07\xad\xff\xd4\xeb\x7f\x3c" + - "\x5d\xf8\x0f\xaf\xd7\xd7\xec\xc6\x8e\xa8\x35\x4e\xea\x3f\xb5\xfa\x1f\x4f\x13\xfe\x23\x6a\x35\xdf\x07\x33\xc3\xdf" + - "\xf0\x54\x19\x83\xb0\x1e\xec\x44\x1f\x62\x65\xa0\x93\x88\xff\x6f\xbc\xaf\x32\xbe\x2b\x8e\xc5\x70\x7e\xae\xd8\x56" + - "\xa3\x86\x39\x60\x0c\x1b\x76\x49\x62\x70\x12\x57\xfb\xbf\xd2\xb4\x43\xb6\xb0\x74\x30\x16\x16\x97\xbc\x3c\x4d\xeb" + - "\x4b\x51\x80\x4c\x3c\xc6\x1b\x08\x56\x25\xfd\x77\x03\x59\x65\x13\x32\x9f\x55\xb0\x90\xfb\x66\x28\x29\x40\x4a\x80" + - "\x01\xc7\x93\x2f\xe6\x09\x85\xae\xaa\x75\xda\x3c\xa5\x1c\x23\xe1\x7f\x16\x59\xb2\xa2\x52\x52\x5b\x87\x1f\x58\x91" + - "\x0e\x7e\xa2\x24\x93\x53\xac\xb5\x41\x83\x65\x58\xd3\x64\x96\xb7\x98\x70\xbd\xaf\x3b\x0e\x3b\xf3\xfe\x43\x9d\x5a" + - "\x5c\xd0\xb1\xad\xef\xd9\x30\x09\x79\xea\x11\xa9\x4c\x3d\x4f\x72\xe3\xa5\x0c\x83\x41\xd7\xab\xb7\xb7\xe4\x30\x73" + - "\x55\x61\x24\xb5\xf3\x64\x4e\x73\xdd\x99\x18\x39\x18\xbc\x04\x67\x4a\xb0\x0e\x00\xf9\x36\x9c\x70\xe6\x07\x4d\xef" + - "\xec\x5d\x4a\x8b\x00\x38\x7f\x68\x14\x38\x33\xc2\x5c\x75\xe1\x86\x05\x93\x5d\x47\x5b\xe4\xe1\xd1\x89\xd5\x0c\x55" + - "\x04\x6e\x05\x38\x41\xee\x70\x29\x00\x9c\x04\x71\x55\xe3\x14\xf5\x28\xf7\x6e\xcc\x80\x66\x85\x74\xb0\xb1\x41\x19" + - "\xde\x82\xbe\x2b\x6f\x60\x9f\xa1\xdd\xc2\xbb\x2f\xf9\x18\x7e\xee\x09\xe1\x8e\x17\x0c\xc7\xf0\xf0\xe2\xe0\x2b\x35" + - "\xb7\xdf\x9f\xc1\x6b\xbe\x46\x4f\x46\x30\x9e\xa6\xed\x99\x14\x05\x2a\xea\x31\xd4\x31\xcc\x5b\x54\x33\x08\x73\x9c" + - "\xe9\x31\x02\xa3\xf8\xfe\x91\x71\x3b\x66\x00\xeb\x23\x04\x18\xfe\x15\x43\xd3\xd5\x8b\x8e\x81\xe9\x97\x9f\x73\x58" + - "\xfa\x79\xb7\x06\x65\xba\xc9\x32\xea\x3a\x20\x78\xeb\xc1\x07\xd7\x04\xe4\xa1\x37\x8a\x72\xbd\x6d\x74\xd2\x72\xce" + - "\x83\x0a\x00\x49\x77\xe4\x6d\x75\x02\x4e\x75\x38\xa9\x82\xd3\x4b\x7e\x88\x61\x1e\x1c\x85\xbc\x26\xd9\x06\x68\x82" + - "\x61\xe9\x60\x0f\x58\x35\xde\x72\x68\xc4\x29\x0a\x07\x31\x3f\xfc\x3d\xba\xbe\x27\xe4\xee\x77\x56\x8a\x74\xba\xaf" + - "\xa5\xe9\x92\x2e\x0e\x4e\x5f\x8b\x91\xf4\xf4\x38\x28\xf6\xb3\x85\xcd\x71\x01\x7d\x3d\x70\x6e\xf4\x35\x94\xb7\x55" + - "\xe1\x8d\x27\x6c\x9c\x42\x70\xd3\x1b\x45\xb9\x47\xa7\x0b\x5a\x6e\x01\x4b\x00\xbb\xeb\xfd\xad\x26\x87\xb9\x3a\x3e" + - "\xe4\xa4\xea\xe9\x7d\x1d\xc2\x37\xde\x0d\xc8\x6b\xc6\x3b\x68\x82\xae\x03\x5a\x0f\x58\x35\xde\x76\x3a\xc9\x29\x0c" + - "\x27\xb9\x31\x8c\x7b\x28\x00\x27\xe5\xee\x7f\x51\x6e\x4b\xd5\xdb\x62\xba\x4f\x53\x4f\xf7\x73\xa2\x9e\xde\xd7\x00" + - "\x7c\x9d\xaf\x03\x5e\xd3\xf7\x80\x7f\xbd\xef\x35\xd9\x7b\x45\x7c\x45\x20\xc3\xe9\x65\x60\xeb\x68\xe3\x1c\xf4\x62" + - "\xb8\xae\x58\x52\xf4\xdc\xe9\xdc\xde\xd6\x1f\x0d\x27\x8c\x1e\xae\x75\x9d\xe4\xe1\xc7\x94\x66\xf6\x31\xa5\xc4\x3e" + - "\xc4\xe3\x83\xd5\x5a\x35\x44\xe8\xb4\xe3\xc2\x3a\x0c\x94\x3d\x1e\x66\x09\x7d\x35\x25\xec\xfa\x32\x7a\xa7\x18\x65" + - "\x09\x7d\xd9\x19\xe4\x65\xc3\xdd\x5f\x4e\xa2\xcb\xbb\x82\x06\xe9\x53\x62\x1e\xe3\x5a\xfb\x0e\xe6\x02\xea\xd2\x93" + - "\x8f\x90\x8f\xe2\xd2\xeb\xf0\xd9\xfc\x7b\x58\x04\x58\x5f\xf5\x4c\x85\x68\xfd\x87\xaa\xea\xf4\x8b\xd5\x66\x97\x05" + - "\x9c\xb9\x33\x9e\xca\x31\x0e\xf8\xbb\xae\x76\x8f\xc4\x9b\xcc\xbe\x7c\x02\x83\x54\x8a\xe0\x49\xb4\x42\xa6\x9b\x7b" + - "\x32\xe3\x8a\xae\x03\xe0\x16\x45\xcb\x58\x07\x55\x61\x22\xc9\xe4\x7b\xf6\x1b\x7f\xc8\x18\x76\x33\xa3\xc5\x0b\x7d" + - "\xc1\xc4\x10\x26\x83\x89\xe9\xcc\x8f\xbf\xfc\x70\xed\x60\xd4\x98\x02\xe1\x4a\x4f\x28\x33\xa8\x7d\x61\xa4\xf4\xd6" + - "\x05\xc7\x45\xaf\xd7\x53\x69\x73\x3e\xf9\x14\xc5\x17\x11\x96\x87\x44\xed\xb9\xe9\x93\x3d\x68\x3d\x78\x0e\xc9\x75" + - "\xe2\x2a\x83\x28\xc6\xfe\x8c\x1b\xda\xd6\x55\xd9\xb2\x9b\x7c\xec\x8b\x7a\xe0\xd6\x3b\x9c\xd0\xaa\x22\x71\x33\xc5" + - "\xa8\xc3\xf1\xd9\xae\x5a\x02\x0a\x16\x82\xdf\xb6\x36\x78\x33\xa9\x6b\x79\x33\x78\x29\x3e\xb2\xac\x22\x6b\x9c\xbc" + - "\x75\x58\x5c\xc9\xda\x53\xd7\x4f\xc6\xfa\x97\x46\xe3\x5d\x4d\x06\x37\xd0\xee\xb5\xf7\x1a\xda\xd7\x71\xe6\x96\xea" + - "\x68\xcd\xff\xf0\x62\x8f\xba\xec\x6e\xbd\x30\x5a\xd5\xe9\xb7\xea\xf0\x7b\xb6\x6a\xb4\x2a\x7f\xab\xee\xda\x1b\x77" + - "\x95\xf7\x5d\x25\xfa\x16\x99\x8d\x0f\x92\xdf\x60\x10\x80\xf9\xfb\x57\x1e\x03\x77\xaa\x29\xa0\xc3\x7e\xab\x9a\xbc" + - "\x6d\xba\x67\x4f\xdc\x53\xd6\xf7\x94\xe6\x1b\xe4\x65\x2b\xff\xd5\x53\x00\xc8\x60\x25\xd8\xc1\x9c\x51\xb3\x04\xf3" + - "\x2d\xef\xb0\xde\xb9\x8a\x3b\xd1\x87\xf0\x43\x13\xaa\xb5\x7e\xba\xbd\xb7\x19\x4e\xf7\x0a\x96\x9c\xf2\x1c\xa9\xf3" + - "\xff\x02\x71\x5f\x33\x6b\xbe\xa9\x9a\x70\x3f\xe0\x0d\x9d\x7c\xbf\xd6\x8c\x54\x33\x32\xcb\xde\x4d\xfc\xf7\x93\xf0" + - "\xfd\x84\x78\xb3\x9c\xd0\xe1\xf0\x1b\xeb\xfa\x5d\x0c\xcd\x68\x47\xfc\xfa\xe6\xec\x6e\x6d\x19\xed\xc0\xbb\x98\xd0" + - "\xb1\xb9\xf4\x5e\xd2\xbd\x9b\x00\x6f\x95\x51\x14\x60\xf0\xd1\x60\x44\xdf\xea\x4f\x66\x90\xc3\x2a\x02\xfd\x6a\xcc" + - "\x4a\x9f\x00\xb0\x4f\x1d\x3e\x99\x71\x72\x77\x68\x14\x1b\x8a\x21\xde\x9c\xc1\x59\x88\xd3\x86\x85\xf4\x50\x4b\xc0" + - "\x21\xa8\x59\x87\x1d\x8d\x51\x90\xa0\x91\x63\x44\x39\xa7\x4f\x5d\xf3\x64\x98\xc0\x68\x14\x7e\x64\x7a\x1b\x30\x7a" + - "\x5d\xba\xa6\x06\x05\x1f\x5c\x43\xef\x8a\x5e\x53\x83\x82\x0f\x9e\xa2\x83\xe5\x76\x1b\x8d\x37\xf0\xe1\x90\xee\x6d" + - "\x34\xde\xc0\x87\xa3\x0f\x6e\xa3\x71\x72\x05\x61\xd5\x23\xd7\xa1\x3a\xed\xf4\x69\xf1\x6e\xf0\x4d\x30\xa8\xcc\x43" + - "\xe8\x03\xf1\x86\xd1\x07\xb2\x0c\xa1\x0f\xc4\x16\x36\x41\xde\x28\xb1\x40\x55\xbe\x95\x87\x20\xa9\x06\xaa\xf1\xad" + - "\x3c\x04\x49\x3e\x50\x85\x5d\xab\xa2\xe1\xa5\xe1\x10\x25\xd6\x67\x91\x71\x2d\x36\x16\xe9\x01\x6a\x16\x5c\x03\x0a" + - "\x8f\xd4\x10\xa0\x27\x66\x9d\x6f\xa7\x71\x25\x1f\x8e\xb6\xbf\x9d\xc6\xc9\xf6\x87\xc2\xfb\x1a\x7a\x5c\x01\x5d\x0d" + - "\xc1\xbd\x3d\x2d\x46\x46\x28\x7d\x0c\xfc\xc6\x7e\xf6\xd6\x78\x2d\x81\x2b\x79\x08\x6a\xf5\xb5\x04\x4e\x8e\xdd\xca" + - "\x91\x55\xdc\xc8\xcd\x0f\x93\x80\x7b\x9f\x1c\x5e\xb6\x81\xa0\xfc\x8f\xb1\x0b\x26\xe8\x3b\x1c\x26\x91\x4f\x36\x2d" + - "\x33\x01\x9b\x8d\xa4\x1d\x31\xf1\x0a\x07\x45\xfb\xe4\xd9\x46\x56\xa7\x2a\xc2\x10\x07\x6f\x1f\xf1\xb1\x3d\xfe\xbe" + - "\x4e\x1e\xdd\xc8\xf5\x37\x85\xa3\x98\x0c\x45\x8e\xe5\x87\x7d\xd2\xc6\xe6\x48\x4b\x8d\xed\x79\x67\x02\xc0\x3e\x21" + - "\xdd\x01\xae\xef\x84\x9e\x1b\xb9\xb2\x1a\x5f\x2f\x38\x93\x8f\x06\xb6\x00\xc9\x49\x0b\xd8\xf5\x3e\xa6\x88\xd2\xc5" + - "\xbb\xc9\xc5\xb1\x58\xd2\x3a\x99\xd6\x52\x86\xfb\x2e\x79\x68\xe0\xbe\x5e\x7a\xf3\x75\x12\x5f\x4d\xb7\x74\xd4\x15" + - "\xed\x78\x43\xfe\x60\x94\xee\x9b\xfa\x0a\xe3\x5b\x4b\x2d\xe3\x4b\x9f\xa8\x81\x7b\x07\xd5\x1d\x72\x35\xfa\x2a\xbb" + - "\x69\x68\x85\x37\x05\xe9\x31\xc0\xb4\xeb\xa0\xbf\x97\xf4\xdb\x06\x18\xc2\xfa\x90\x3a\xc5\x97\x2b\x72\x80\xf5\x76" + - "\xd7\x1d\xb2\x52\x3a\x6b\xba\xa5\xaf\x42\x1b\x81\x75\xd4\xc0\xae\xeb\x94\xbe\x9b\xee\x9b\x7a\x09\x63\x5a\xcb\x05" + - "\xe2\x4b\x89\xa9\x81\xfb\xfa\xea\x1e\xf9\x37\x7d\x95\xdd\xd2\x5d\x57\x34\x05\x9b\xb8\x06\xa6\x5d\x67\xea\xbd\xa4" + - "\xdf\xd4\x69\x18\xeb\x30\xd3\x85\x2f\xff\x27\x84\xf6\x75\xd9\x3d\x72\x8d\x7a\xea\xba\xa5\xc7\xc2\x1b\x82\x75\xd8" + - "\xc0\xb2\xeb\x20\xbc\x8f\xf2\x9b\xfa\x4b\x67\x9c\x9e\xf7\x34\x33\x57\x14\xa1\x57\xeb\xe5\x91\x78\xfd\x3d\x82\x04" + - "\xcb\xe6\xe9\xac\xcf\xfa\x22\x0f\xe3\x5a\x90\xec\x03\x5b\xab\x59\x45\x39\x4b\x71\x8a\x21\xf1\x1c\x12\x58\xc9\x73" + - "\x9e\xd1\x4a\x9e\x31\x54\x0d\x26\xfb\xb6\x2a\x2e\xdd\x90\x7c\x59\xac\x73\xe0\x6d\x80\x21\x65\x01\x48\x37\x8f\x65" + - "\xf8\xb4\x56\x61\x56\x5b\x67\xeb\xfd\xeb\x56\x4b\x88\xa0\xee\x2a\xac\xa7\xf3\xd5\xef\x9c\x88\xcb\xfd\xeb\x02\xc5" + - "\xdb\x0c\x48\x5f\xa9\xb8\xec\x79\xce\x4b\x2b\xab\xe8\x70\xf8\x7b\xeb\xcf\x02\x3e\xee\xd6\x6b\xab\x0d\xba\xe8\xff" + - "\xdd\x9e\x9f\x35\xec\x1e\xc3\x38\x86\x26\x04\xa6\xb1\x7f\xbb\x54\x1d\xfa\x2a\xbb\x7e\x7a\x5d\x7c\xb5\xf3\x9b\x42" + - "\x8a\x71\x61\xdc\x7a\x98\xeb\xf9\x14\x90\x77\x0b\x18\x5a\x7b\xd6\xd1\xb6\x28\x16\xd8\xdb\x1a\x12\x84\xc3\xe7\x2e" + - "\x1e\x03\x1e\x6d\x18\x7d\x57\x25\x49\x86\x97\xd3\xf4\xfb\x21\x89\x5a\x2e\x1c\xf2\xa2\xeb\x3b\x98\x14\xf5\x89\x7c" + - "\xa8\x6a\x92\xe6\xdd\x6b\xf4\x43\x34\x4f\x58\x97\x88\x0f\xbb\x68\x3a\xd7\x18\x56\xb7\xdf\xf9\x5f\xf6\x35\x20\x58" + - "\x77\xc0\xe3\x23\x3e\x56\x56\x26\x2b\x32\x9f\xc3\xfe\xd2\x75\x55\x09\x24\xa8\x52\x61\xd6\x35\x25\x0d\x29\x53\xf0" + - "\x82\xaf\x6e\xbd\x90\xea\x87\x71\xc0\x92\x1d\xa3\xc3\xfb\x5c\x65\xa4\x88\xd9\x7b\xd4\x58\x36\x1c\x0d\xcc\x30\xb4" + - "\x87\xfc\x85\x67\x7f\x18\x8c\x4e\x03\x8c\xab\xcb\x00\xa9\xd4\x01\xb3\x64\x95\x3c\x9a\xef\xd2\x60\x86\x18\x8e\x41" + - "\x59\x16\xb7\x69\x53\x15\x05\x6b\x7f\x57\x5d\xd2\x13\x43\xbc\x74\xbd\xee\x98\xcd\x9b\x1e\x48\x46\x23\xd1\xd4\x2c" + - "\x27\x45\x75\xd4\x84\x0b\x53\xf7\x6a\xdf\xd8\xfb\xff\xd3\x85\x78\x82\x01\x7f\xce\x41\xfe\x89\xc2\x42\x40\x0f\x45" + - "\xb3\x4e\x01\x5c\x90\x8e\xf6\xe3\x39\x9e\xaf\x7e\xc7\x13\xb3\x9e\xdb\x00\xa0\x6a\x1c\xc6\x0b\xa0\xcb\x2e\x2f\xc7" + - "\x24\x87\xd0\x49\x46\xd9\x4d\xc6\x78\x4d\xbc\x8c\x26\x1f\x11\x05\x06\x5a\xaa\xd4\xe4\x05\x2a\x91\xfa\xfa\xaa\xbd" + - "\x7d\x61\xb7\x0f\xf7\x26\xc4\xd4\xa9\x3f\xa5\x61\xe4\x58\x62\x94\xc4\xc3\xd5\x1e\x52\xee\x5b\x76\x48\xf2\xdd\xb4" + - "\xc8\xeb\x5d\x34\xcc\x9a\xd6\x24\x87\x96\xdb\xf3\xdc\x76\xbb\xc5\x4b\x8c\x89\x63\xfe\x11\x9f\x16\xf4\x21\xe6\xbe" + - "\xdb\xb7\xa8\x5f\xfa\x59\xc2\x24\x8b\x5d\xed\x73\x82\xea\x02\xed\x1b\x9b\x35\x55\x7d\x77\x0b\xb4\x4c\x1c\xbd\x91" + - "\x24\x09\xce\x02\x37\x26\xbf\x78\xac\xbb\x61\xdc\x5d\x74\xf2\xd2\x4b\xc5\x39\x47\x08\x3a\xbd\xab\x2e\x5f\x11\x02" + - "\xbe\xd2\x6c\x3d\x5d\x2e\x4c\x77\x69\xec\x66\xe3\x77\xec\x05\x40\xbc\x02\x30\x19\xc1\x10\x78\x3c\x37\x95\xde\xbc" + - "\x83\x88\x5f\x44\x95\x0f\xf2\x18\x42\x51\x37\x37\xd1\xd1\x82\xde\xe7\xe4\x98\xe8\xdd\x40\xd1\x5e\x98\x76\x5e\xf9" + - "\x20\x8e\x18\x38\x26\x01\x41\x7b\xba\xef\xca\x4f\xec\x91\x33\xd7\x9e\x82\xf6\xa8\x8e\x8b\xc5\xe1\xd1\x34\x9c\xe2" + - "\xf0\x60\xbb\x1b\x9d\x39\x85\x9f\x86\x9f\x36\xbe\xa1\x6d\x7c\x96\xdc\x93\x26\x3e\x53\xd2\x5e\x1a\x73\xb1\x64\xad" + - "\x1d\xe2\xed\x76\x2b\x3c\x3c\x61\xee\x56\xc2\xab\x96\x7d\xb8\xb2\x1e\x3f\xe0\x95\x88\x8a\xc5\xe3\x55\x1f\x22\xf5" + - "\x64\x55\xa4\xbd\x59\x65\xd9\x5a\x59\xcf\x3a\x91\x2f\x4c\x49\xfd\x61\xaf\x92\x71\x3b\xcd\x1f\x98\xb2\xad\xab\xc3" + - "\x02\xad\xc4\xe5\x50\xdc\x04\xbd\x0b\x05\xd6\xeb\x15\x8e\xb0\xe4\x77\x91\x24\xda\x0b\x56\x58\xc3\xb7\xdb\xb9\xd1" + - "\xf0\x42\x6f\xf4\xd6\x20\x32\xed\xaa\xaa\xe8\x72\xd3\xd0\xc1\x6e\x02\xd6\x6b\x93\xe0\x8b\x5c\xe6\x54\x1f\xc8\x39" + - "\x2f\x5e\x77\xd1\xfb\x7f\xa5\xc5\x33\xed\xf2\x94\x44\xff\x46\x2f\xf4\xfd\x24\x52\x1f\x26\xd1\xbf\x34\x39\x29\x26" + - "\x51\x4b\xca\x36\x6e\x69\x93\x1f\xcc\xeb\xc1\xd8\xf3\x87\x4b\xcc\x4d\x9f\x2e\x7d\x1e\xaf\xcb\x26\x8a\xe6\x8e\x19" + - "\xc3\xad\x69\x0c\xb7\x26\x81\xae\xaa\x75\x23\xb0\x92\x37\x5a\x35\xab\x05\x96\x29\x12\xd3\xca\xbb\x28\x74\xc2\x1a" + - "\xd8\x08\x2e\xc8\x60\xe8\xaf\x18\xc1\x35\x53\x36\xba\xaa\x45\x78\x8e\xf3\x12\x79\x41\x6e\x9e\x60\x4f\x5a\x3e\x5c" + - "\xf1\x22\xc7\x35\x79\xe8\xc4\x72\xc8\xbd\x9d\x2a\x79\x25\x4d\x53\x7d\xf5\xe8\x33\xf6\xde\x48\x62\x2f\x6e\xf1\xdb" + - "\xf7\x22\x6b\x23\x33\xe2\x98\x4a\x20\x5c\x20\x5e\xc1\x8a\xc7\x3e\x74\xb1\xeb\x93\xa6\x34\x86\xfc\xe1\x4a\xeb\xd2" + - "\x31\xe2\x36\x00\x36\x78\x7a\x4e\x84\x97\xe1\x49\x47\xcb\x5f\x31\xb3\x3d\xde\x93\x1d\xae\xf2\x81\xb2\xc1\x93\x4f" + - "\xde\x8b\x1d\x27\x2b\x7c\xa3\x9d\x77\x8c\x9d\x71\x93\x8f\x66\x2f\x13\x26\x23\xfc\x2c\xae\x87\x15\x57\x27\x41\x4e" + - "\xa0\x7b\x19\xc6\x4a\x22\x99\x79\xd4\x0f\xef\xf9\x38\x11\x66\xc5\xc5\xcb\x4d\x9a\x8b\xf1\x61\x84\x59\x9d\x9c\x38" + - "\xf5\xd7\xf2\xbb\x75\x6d\xf1\x88\xe6\x4d\xec\xf8\x95\xc6\xa9\xbc\x77\x63\xa7\xae\x6a\x15\x1e\x1a\x8b\xc3\xe2\xeb" + - "\x8e\x35\x1e\xf9\x80\xd6\x7c\xb3\x36\xdd\x78\x30\x15\xdf\x67\x72\x5f\x86\x4f\xee\xe0\x1d\x4d\x38\x77\xa8\x47\xa3" + - "\xf4\x37\x8d\x9b\x33\x29\xfe\x6e\xcb\xdc\x34\x4d\xdf\xbc\xcc\xf5\xb8\x95\x89\xed\x29\xce\x91\x95\xad\x1b\xd6\xd0" + - "\x22\xe5\xba\x68\x5a\x0a\x83\x0a\x12\x70\xf0\x54\xb4\xf1\x8e\x81\x02\xc7\x44\x4b\x9d\x8d\x80\x2a\x3f\xc4\x58\x87" + - "\xd8\xa0\x60\x89\xa7\x94\xf2\xa1\x6f\xa6\xf6\x24\x2b\x92\x63\x66\xe9\x8e\xcb\x6f\xfa\x7f\x23\x8b\xd3\x7d\xff\x0f" + - "\xe9\x2b\x65\xe5\x23\x73\x64\xea\x11\x18\x10\xb9\x66\xbc\x18\xc0\x4f\x53\x66\x40\x26\x91\xf1\x61\x47\x0e\x9d\x77" + - "\x90\xdb\x8e\xf7\xdd\x7d\x19\x9d\xa3\x08\x49\xdc\x32\x73\xb5\x07\xb0\x2f\xa4\xb1\x8b\xde\xbf\xb7\x4d\x1f\xa6\x13" + - "\x5d\x55\xeb\x55\xca\x94\xd3\xc2\x06\x79\x26\x1f\x09\x82\x4c\xff\x5a\xfc\x09\x96\x98\x43\x64\xf5\xd1\x36\xc3\x56" + - "\xe6\x10\x8b\x55\xd0\x60\xa0\x45\x08\x87\xea\x91\x3a\x29\x95\xe8\xbd\x83\x63\x2d\xf3\xd5\x18\x27\x6c\x78\x42\xb1" + - "\xd9\x2e\x8c\x92\x8e\x3e\xd6\x75\x91\xe9\x8e\x8a\x2e\x34\xad\xcc\x2b\x36\xe6\x63\x84\xb0\x8a\x88\x4d\x89\x48\x18" + - "\x18\xaf\xbc\x74\x76\x75\x89\x79\x99\xe0\xb5\x59\x02\xbb\x51\xc9\xe0\xd0\xc3\x27\x70\x5d\x92\x7a\xa1\x2d\x4a\x2f" + - "\xb7\x40\x66\x32\x90\x74\x93\x9e\x8d\x33\x0d\xcf\x85\x01\x83\xed\x52\x33\xf9\xde\x6e\xb8\x9e\x21\x2c\x68\xee\xa9" + - "\x2e\x35\x58\x34\x2e\x33\xc0\x29\x90\x98\xcc\x8a\xa3\x2f\x7a\xc6\xc4\x15\xc6\x2d\x10\x57\x4a\x9a\xea\xd2\x52\x73" + - "\xd7\x4a\xc6\x15\x4d\x30\xb0\xa6\xf6\x46\xff\xe5\x46\xb9\x6b\xa7\x4c\xa7\xf7\x34\x0d\x4d\xfe\x2f\x5d\x40\x6c\x53" + - "\x4a\xbe\x24\x29\x5e\x01\x57\x5e\x97\xb1\x15\xe5\x02\x1b\x83\xf1\xb1\xfe\x24\x1f\x18\x47\x0b\xe5\x5b\xe3\xba\xb7" + - "\xa8\x07\xc4\x48\x51\xf0\x37\xec\xd5\x5e\x4e\xbc\xc8\x3e\x46\x93\xe8\x83\xbd\xd9\x16\x2f\xb2\x48\x84\xcb\x9c\x72" + - "\x0c\xdd\xb6\x5b\x5b\xef\xab\xfb\xb7\xee\x10\x78\xc7\xf6\x1d\x46\x19\xb8\xb3\x07\x92\xd2\xf8\x39\x6f\xf3\x7d\x5e" + - "\xb0\x68\xd5\xb0\x01\xf5\x6e\xac\x5c\xd2\xa9\x69\xd3\xd6\x94\x67\xa4\x64\x2f\x8d\xb0\x52\xeb\xab\x7a\xe2\x1f\x11" + - "\x96\x48\x68\x39\x95\x6f\x8d\xa0\x30\xa5\xcc\x21\x09\xd7\x29\xde\xed\xbd\x45\xf6\xa1\x1f\x02\x7c\xd8\x7f\x1c\xc4" + - "\xe4\x05\x0b\xe1\x53\xbc\x45\x82\x82\xd4\x0d\x7d\xbe\x9a\xcd\x38\x90\xcf\xf8\x3a\x46\x7d\xa2\xe4\x8d\xe8\xeb\x72" + - "\xb7\x03\xb8\xf1\xd7\xb4\x26\x09\x68\x49\xa2\xb5\x02\x1f\xd4\xce\x46\x94\x3c\x41\xba\xf9\x59\x89\x1e\x7f\xcf\x06" + - "\x27\xcf\x8d\x82\xbe\x21\x71\x6d\x7d\x63\x0b\x6b\x60\x8f\x7d\x55\x00\x56\x7c\xa0\xaa\x5a\x35\x79\xfb\xc9\xba\xd4" + - "\xd5\xe8\xe1\x11\x19\x00\xd5\x0f\xad\x1c\x8e\xea\xb1\xb6\xf5\x53\x69\x53\x99\x33\xe0\x6d\xe7\xc5\x56\xe6\x03\xd0" + - "\x57\xbd\xf5\x8c\x9c\xd8\x41\x1e\xa9\x5e\x33\xed\xbe\x7e\x47\xd4\x6c\xf0\x20\xd0\xf0\x47\xcb\x78\x7f\x5a\x5b\x40" + - "\x51\x32\x3c\x66\x05\x0e\x6b\x25\xc9\xec\x23\x93\x79\xf8\x33\x62\x77\xae\x40\x34\x63\x20\xcf\xaa\x9b\xb0\x09\x3d" + - "\xea\xaa\x7a\xc2\xb7\x3c\xf9\xcf\x43\x53\x9d\x3f\x58\x55\x7f\xe4\x4f\x7d\x55\x66\x09\xab\xfc\x63\xe0\x8b\x62\x5d" + - "\x15\x89\x19\xe6\xb6\xa6\xc9\xde\xae\x9b\xea\x98\x67\xbb\xff\xf2\x3f\xff\xd8\xd7\xf3\x67\x69\xe0\xa6\x7f\xca\xd3" + - "\xa6\x6a\xab\x43\x37\x55\x55\xb6\x1d\x69\xba\x3f\xf4\x6a\xd7\x76\xcd\x0f\xdf\x7f\xf7\x90\xf0\xff\xfb\x9e\x55\x47" + - "\xcb\x0c\x94\x25\xaa\x2c\xfa\x6f\x02\xff\xcf\xaf\x35\xfd\x61\x66\x36\xaf\xa1\x35\x65\x87\xd5\xd8\xff\xc6\x2f\x4e" + - "\xdd\x1a\x46\x1e\x0c\x06\xf3\x11\x23\x8f\x86\xbc\x51\xed\xb8\x88\x50\xe9\xad\xee\xa2\x76\xb7\x57\xf0\x66\xb5\xe3" + - "\xca\xe5\xd0\xbc\xd5\xdb\xd5\x2e\xb0\x69\x77\x50\xbb\xc4\xa3\x76\x0f\xf7\x56\xbb\xe1\x78\xa2\x59\xe0\x4c\x58\xee" + - "\xdc\xcd\x1b\xdb\x65\xd5\x8e\xf8\x20\x7b\xae\xd6\xfc\x32\x3d\x16\xaf\xf5\x29\x4f\xab\x32\x4e\x4f\xf4\xb9\xa9\xca" + - "\xd8\x9c\x1e\x3d\xa0\xbc\x1f\x35\xaf\x4b\x41\x33\x40\xd3\x53\xd0\x4b\x43\x1c\x06\xb1\x3a\x56\x01\xf8\x95\xb6\xf4" + - "\xca\x4b\xb6\x7e\xc1\xfd\x9a\x5b\xda\xa8\xf8\x12\x67\xb5\x7d\x91\x0c\x10\x7d\x0b\x17\x96\xb3\xd2\x5e\x54\xa2\x52" + - "\xb9\x23\xa3\xd5\xaa\xe2\x03\xde\x6a\xaf\x91\xba\xda\x7c\xd6\x4f\x89\xc8\xbf\xad\xa0\xb6\xb5\x85\xa1\x76\x26\xd0" + - "\x45\xa4\xaf\xfe\xdd\x9e\x1e\xaa\x86\xea\x21\xce\xef\xff\x32\x4f\x16\xdb\xef\x03\x1a\xe7\x46\x27\x36\x7a\x5e\x66" + - "\x79\x4a\xba\xaa\x69\x3d\xba\xa6\xc2\x8e\x09\x12\xc1\x1a\x76\x7f\x56\xc0\xaf\x5a\xf3\x42\xf7\xdb\x82\xf2\x10\x00" + - "\x87\xc3\xbd\x2b\xd7\x03\x86\x18\xf7\x45\xae\x7b\xf3\x50\xf9\x35\xb7\x5a\xef\xcf\x59\xa2\xc7\xf8\x67\xe0\x88\x55" + - "\xdf\xae\x5e\x76\xb1\x3a\x3a\xe4\x3d\x8c\x0c\x77\xd4\xa2\xbf\x6c\xf1\x42\xdd\x74\x27\x1f\x1d\x7b\x3d\x7a\xb8\x51" + - "\x6e\x0c\xa0\xda\x0d\x64\x00\x57\x29\xb2\xbd\x73\xa3\xbd\x73\x64\x4f\xc3\x7f\x6f\x73\x50\x35\x9e\x0c\xda\xa3\x28" + - "\x2a\x31\xf4\xef\xa0\xda\xcc\xf5\xa8\xeb\xca\x50\x1b\x78\x65\x85\x0f\x28\xe3\x62\x84\x75\x11\xe2\xae\xae\xb9\xb3" + - "\x99\xea\x20\x9b\x46\x09\xe8\xa1\x08\x04\xb5\x69\x43\x69\xc9\x63\x41\xea\x8c\x94\x76\x36\xec\xd7\x9a\x58\xde\x3a" + - "\xb3\x0c\x47\xbe\xc4\x09\x35\xa9\x25\x0b\xfd\xc8\x9a\x34\x73\x62\x1f\x19\xae\x96\x16\xea\x9c\xd7\x1b\x9b\x09\xe7" + - "\x16\x66\xe7\xcd\x09\x65\x75\x5d\x45\x61\x13\x8a\x56\x93\x9a\x44\xd0\xaa\x80\xf2\x4b\x3d\x9f\x73\xe3\x25\x14\x5b" + - "\xfe\x65\x6a\x2d\x2a\x22\xc3\xee\xbe\xd3\xb3\x3f\x0c\x61\x0e\x75\xb8\x32\x96\x4f\xc9\x3e\x0d\xdf\x78\xf0\x79\x12" + - "\x8d\x40\xf1\xf9\x80\x79\x22\xfd\xc7\xae\xaa\x8a\x3d\x69\x34\x64\xf9\x4d\x80\x46\xd3\xb4\xa0\xa4\x39\xe4\x2f\x0a" + - "\x4a\x7d\x00\xd4\x7a\x91\x92\xbc\xa4\x4d\x7c\x28\x2e\x79\x36\xc0\x1a\xdf\x07\xaa\xb2\x40\x80\x6a\x44\x06\xb0\xac" + - "\x88\x4f\x55\x93\xff\xdc\x97\x14\x51\x36\x10\xb6\x0a\x00\x33\x2c\xce\x0a\x4a\xf9\x07\x5d\x4e\x3e\x18\x40\x0a\x1e" + - "\x50\x55\xb8\xda\x47\xc5\x6a\x49\x9e\x15\x44\xff\x1b\x50\x29\xc9\xf3\x9e\x34\xea\x4e\x20\x04\xd3\xbe\x43\x5a\x7d" + - "\x01\x3f\xa0\x0c\x24\xa4\x7f\x37\xc0\x0d\xb2\x43\x71\x4d\x8e\x1a\x15\xfe\x37\x28\x96\x17\x14\x15\x05\xf0\x49\x81" + - "\xa9\x2d\x0e\xf1\x9b\x17\x08\x57\x4c\x7f\x4f\xd9\xdc\xe4\xb8\x5e\x85\x4d\xcd\x34\x94\x30\x48\xe5\xdc\xba\x32\x10" + - "\x09\x51\x15\x54\x07\x86\xde\x0e\xe8\x60\xad\x1f\xad\xee\xb2\xbb\xc7\xea\x0f\x63\xb3\xbb\x17\x06\x7b\x41\xfa\xa4" + - "\xa6\x2c\x36\xd9\x81\x23\xd3\xf6\xce\xbd\x6e\xda\xf4\x2b\x1e\xf1\xb0\xb8\x57\x3b\x5c\xfa\x8b\xdd\xf0\xa2\x5b\xf4" + - "\x4f\xf9\xb9\xae\x9a\x8e\x94\x9d\x06\xad\x62\x52\x02\x98\xfd\x6d\xc3\x9e\x72\x71\xbd\x40\xdb\x19\x42\x00\xdb\x93" + - "\xd8\xff\xd3\x1b\x83\x40\xe6\x25\xdb\x6d\x90\x2f\x73\x5b\x3b\x0f\xea\x94\x55\x3f\x7f\xab\xfa\xfb\xc9\x6b\x17\x25" + - "\x9f\x93\x88\x00\x5f\xc2\x38\xba\x60\x4d\xf9\xb8\x9b\x84\x1e\x78\x00\x71\x51\xce\x47\x50\xb3\xc9\xe1\x90\xbf\x60" + - "\xf7\x40\xa4\xb3\xf1\xed\x37\xf1\xb9\x8d\x9f\x73\xfa\xb5\xc7\x84\x3e\x5e\x46\x9f\xf3\x94\x72\xbf\x43\x92\x13\x92" + - "\x89\x8b\xe3\x24\x52\x7f\x9c\x33\xf0\x47\x7b\x06\x7f\xbc\xb4\x41\x4c\x0e\x54\xb9\xd2\x01\x0a\xc5\x31\xe6\x2e\x37" + - "\xf6\x4d\x40\xf7\x7a\x3e\xf0\x62\x91\x38\x67\x36\x09\xf5\x0d\x21\xd1\x9e\x2d\x12\xed\xd9\x26\xa1\xbe\x21\x24\x5e" + - "\x5a\x8b\xc4\x4b\x6b\x93\x50\xdf\xb0\xb1\x86\xcb\x6a\x38\x36\x2f\xcf\xbe\x45\xbb\xcd\x7a\xa3\x7c\x42\x43\xf2\x3e" + - "\x6d\x67\xae\x03\x33\xb1\x6e\x2c\x56\x2c\x41\x9b\x11\xb8\xb8\xa9\xbe\x22\x35\x64\x00\x6d\x12\x75\xa7\x31\x2a\x29" + - "\x2d\x0a\x8b\xcc\x95\x8d\x07\x02\x1d\x13\xc1\xb5\x94\x79\x8f\x19\xa4\xc5\xc7\xfb\xd0\x46\x99\xd7\x8a\x46\xea\x31" + - "\xaf\x92\xf0\x35\x84\x3a\x2c\xb9\xdd\xce\xac\xca\xe5\x6d\x8d\xeb\xf4\xc5\xc2\x72\xe8\x0b\x0e\x37\xaa\x2f\xbd\x2d" + - "\x01\xfa\xe2\xa0\x12\xa2\x2f\x37\x49\xe4\x76\x25\xba\xad\xba\x37\x68\xd6\x5b\x2a\xbc\xa3\xba\xf1\x0b\x3c\x46\xe5" + - "\xb3\xd9\x76\x6b\xd5\x7e\xce\x6e\xd1\x37\x0b\xcb\xa1\x6f\x38\xdc\xa8\xbe\xf5\x13\x19\xd0\x37\x07\x95\xeb\xf4\xed" + - "\x1a\x91\xdc\x43\xe1\xae\xaa\xef\x2e\x1a\x77\x43\x8d\x77\x54\xb9\x19\xbb\xc7\x63\x54\x24\xaf\x8d\x5d\xa7\x5d\x16" + - "\x96\x43\xbb\x70\xb8\x51\xed\xea\x7d\x26\xa0\x5d\x0e\x2a\xd7\x69\x97\xa3\xf5\xf7\x50\x24\x17\xe9\xbb\xe8\x8c\x9f" + - "\xf8\x9b\xd5\x03\x9f\x68\xb9\xdb\x6c\xbb\x1d\x96\xa7\xf5\x36\x03\x2b\xaa\xb1\x66\xab\xeb\xaa\x19\x1f\x55\xa2\x1e" + - "\xcb\x4a\x5d\x57\x8f\xd6\x13\x82\xa4\xa5\x9a\x6e\x92\xaa\xf3\xea\x26\x17\x07\xc8\xc3\x3c\xd8\x01\x1e\x21\x71\xe5" + - "\xc0\xc5\x10\x1d\x63\xd7\x09\x3a\x3a\x7c\x19\xa6\x36\x82\xdd\xb4\xdc\x83\x58\x47\xbe\xda\xef\x77\x49\xed\xda\x01" + - "\x6f\x60\x83\x31\xfd\x46\x3e\xae\xb6\x0e\x28\xfe\xfd\xe4\x72\x0f\x83\x02\x88\x8b\x01\x82\xf5\x3c\x3e\x46\xfe\x4f" + - "\x00\x00\x00\xff\xff\x47\x37\xb0\x07\xc9\x28\x02\x00") + "\x4d\x59\x2e\xf9\x77\xda\x89\xce\xb7\xfb\xe6\x0e\xb7\x03\xdc\xec\x97\x9b\x0f\x07\xf4\xf4\x7b\xa0\x25\xda\xd6\x94" + + "\x2c\x69\x24\x39\x2b\xb3\xfb\xf6\xfe\xf6\x83\xf8\x4b\x41\x32\x48\xd1\x4e\x77\xcf\xdc\x62\xb7\xee\x7a\x9c\x62\x44" + + "\x30\x18\x0c\x06\x83\x41\x32\xf8\xf9\xf7\xff\xf4\xed\x37\xd1\xef\xa3\xff\xb7\xaa\xba\xb6\x6b\x48\x1d\x3d\x2f\xa6" + + "\x8b\xe9\x32\xfa\x70\xea\xba\x7a\xf7\xf9\xf3\x91\x76\x7b\x59\x36\x4d\xab\xf3\x47\x06\xfe\x87\xaa\x7e\x6d\xf2\xe3" + + "\xa9\x8b\xe6\xc9\x6c\x16\xcf\x93\xd9\x2a\xfa\xf3\xd7\xbc\xeb\x68\x33\x89\xfe\x58\xa6\x53\x06\xf5\xdf\xf3\x94\x96" + + "\x2d\xcd\xa2\x4b\x99\xd1\x26\xfa\xd3\x1f\xff\xcc\xc9\xb6\x3d\xdd\xbc\x3b\x5d\xf6\x3d\xc5\xcf\xdd\xd7\x7d\xfb\x59" + + "\x55\xf2\x79\x5f\x54\xfb\xcf\x67\xd2\x76\xb4\xf9\xfc\xdf\xff\xf8\x87\xff\xfa\x6f\xff\xe3\xbf\xb2\x4a\x3f\x47\x9f" + + "\x7f\xff\x4f\x51\x59\x35\x67\x52\xe4\x3f\xd3\x69\xda\xb6\x3d\xb3\xc9\x74\x1e\xfd\x2f\x46\x5b\x54\x17\xfd\xaf\xe8" + + "\x98\x77\xd3\xbc\xfa\xac\x60\xa3\xdf\x7f\xfe\xf6\x9b\x53\x77\x2e\xa2\x5f\xbe\xfd\xe6\xdd\xa1\x2a\xbb\xf8\x40\xce" + + "\x79\xf1\xba\x8b\x5a\x52\xb6\x71\x4b\x9b\xfc\xf0\xf8\xed\x37\xef\xe2\xaf\x74\xff\x25\xef\xe2\x8e\xbe\x74\x71\x9b" + + "\xff\x4c\x63\x92\xfd\xf5\xd2\x76\xbb\x68\x96\x24\xbf\x63\x10\xe7\xd6\x51\xfa\xed\x37\xff\xfe\xed\x37\xdf\x7e\xb3" + + "\xaf\xb2\x57\x56\xcd\x99\x34\xc7\xbc\xdc\x45\x89\x28\x20\x4d\x97\xa7\x05\x9d\x44\xa4\xcd\x33\x3a\x89\x32\xda\x91" + + "\xbc\x68\x27\xd1\x21\x3f\xa6\xa4\xee\xf2\xaa\x64\xbf\x2f\x0d\x9d\x44\x87\xaa\x62\xb2\x3c\x51\x92\xb1\xff\x3d\x36" + + "\xd5\xa5\x9e\x30\xb2\x79\x39\x89\xce\xb4\xbc\x4c\xa2\x92\x3c\x4f\xa2\x96\xa6\x1c\xb7\xbd\x9c\xcf\xa4\xe1\x95\x67" + + "\x79\x5b\x17\xe4\x75\x17\xed\x8b\x2a\xfd\x22\x39\xb8\x64\x79\x35\x89\x52\x52\x3e\x93\x76\x12\xd5\x4d\x75\x6c\x68" + + "\xdb\x4e\xa2\xe7\x3c\xa3\x95\x8e\x97\x97\x45\x5e\xd2\x98\xa1\xf7\xed\x7e\xa6\x3d\xfb\xa4\x88\x49\x91\x1f\xcb\x5d" + + "\xb4\x27\x2d\xed\x21\x20\xe9\x5d\x59\x75\xd1\x87\x1f\xd3\xaa\xec\x9a\xaa\x68\x7f\x8a\x3e\x6a\x24\xcb\xaa\xa4\x3d" + + "\xa9\x13\xed\x35\x67\x10\xcc\x8f\xa7\x3c\xcb\x68\xf9\xd3\x24\xea\xe8\xb9\x2e\x48\x47\x23\x0b\x4f\x56\xc3\x4a\xf6" + + "\x24\xfd\xd2\xcb\xa3\xcc\xe2\xb4\x2a\xaa\x66\x17\x75\x0d\x29\xdb\x9a\x34\xb4\xec\x24\xe4\x8e\xa4\x5d\xfe\xdc\x8b" + + "\x7b\x77\xaa\x9e\x69\xc3\x30\xab\x4b\xd7\x33\x0d\x3a\x65\xbf\x6f\x7e\xec\xf2\xae\xa0\x3f\x71\xd2\x55\x93\xd1\x26" + + "\xde\x57\x5d\x57\x9d\x77\xd1\xac\x7e\x89\xb2\xaa\xeb\x68\x26\x7b\x77\x12\xb5\x5d\x53\x95\xc7\x41\x93\xbe\x8a\xe6" + + "\x6c\x12\x49\x34\x3b\x94\x43\x71\xdb\xbd\x16\x74\x17\xe5\x1d\x29\xf2\x54\x00\x9c\x66\x9a\x86\x4c\xd7\x1b\x7a\x8e" + + "\x92\x47\x85\x92\xff\x4c\x77\xd1\x9c\x9e\x05\xf8\x99\x34\x5f\x18\x82\x68\xed\x77\x49\xc2\x80\x07\x39\xec\xa2\xef" + + "\x0e\x07\x59\x7d\x7b\x26\x05\xd0\x74\x4e\xed\x41\x29\x68\x7b\xe9\x1b\x71\xa9\x19\x44\x5d\xb5\x79\xaf\x3d\xbb\xa8" + + "\xa1\x05\xe9\x05\x66\x70\xb1\x59\x31\xb5\x67\xca\xa0\x3a\x2e\x40\x21\x64\x05\x5d\x55\xef\xa2\x78\xba\x52\x8d\x69" + + "\x2f\x7b\x21\x69\x2e\xe2\x78\x3a\x1f\x0a\xf3\xf3\x11\x74\xc3\xd0\x4d\xed\xf3\x91\x2b\xd7\xae\xa9\xaa\x8e\xeb\x55" + + "\xdf\xa9\x87\xa2\xfa\xba\x8b\xb8\xfe\x08\x50\x3e\x82\x34\xf9\xce\xe8\x39\x5a\x26\xf5\x8b\x94\x3e\xd7\x05\xad\x35" + + "\x72\xe0\xef\xab\x97\xbe\xe1\x79\x79\xdc\x45\xbd\x1e\xd3\x92\x7d\xe3\x23\xbf\xfa\xd9\x57\xee\x28\x12\x95\xd6\x82" + + "\xa7\x81\x6b\x72\xe9\x2a\x51\x98\x56\xbd\x41\xf8\xb2\xcf\xfa\x41\x49\x27\x51\x4b\xce\xb5\x6d\xaa\xce\x55\x59\xb5" + + "\x35\x49\xe9\x64\xf8\x69\xf4\xd6\x4c\x49\x72\x7f\xe9\xba\xde\x28\xe4\x65\x7d\xe9\x26\x51\x55\x77\xdc\x82\x44\x2d" + + "\x2d\x68\xda\xf5\x63\xed\xa5\x23\x0d\x25\xba\xad\x92\xf4\x7a\x03\x70\xa2\x4d\xde\x3d\x0e\x6a\x27\xbe\x68\x15\x18" + + "\x6d\x7a\xce\xdb\x7c\x5f\x50\x83\x07\x5e\x25\x57\x87\xde\x74\xb2\xd1\x7a\xa8\x9a\xb3\x36\xb6\x25\x34\xb3\xd3\x8c" + + "\xed\x1f\xbb\xd7\x9a\xfe\xc0\xbf\xff\x34\x81\xdf\x1a\xda\xd2\x4e\xff\xd4\x5e\xf6\xe7\xbc\xe3\xa3\x58\xf6\x26\xa9" + + "\x6b\x4a\x1a\x52\xa6\x74\x17\x71\x32\xac\x39\x97\xa6\xed\xdb\x53\x57\x79\xd9\xd1\x46\xab\xfe\xc7\x2c\x6f\xc9\xbe" + + "\xa0\xd9\x4f\x1a\x23\xea\x2b\x1f\x86\x82\x40\x46\x0f\xe4\x52\xe8\x02\xd9\xed\x98\x9e\x1c\xaa\xf4\xd2\xc6\x79\x59" + + "\xf6\xc6\x9b\xd1\xb0\x0b\xf8\x00\x24\x59\xc6\x54\x86\x8f\x68\x43\xef\x19\x26\x83\xd3\x06\x20\x9f\xd8\x20\x0c\x97" + + "\x41\x7a\xa2\xe9\x97\x7d\xf5\x62\x08\x8b\x64\x79\xa5\x0b\x06\xea\xaa\x32\x79\xb8\x96\xeb\xc5\xee\x92\xa1\x21\x36" + + "\x5f\xe5\xe5\xbc\xa7\xcd\x4f\xbb\x9d\xac\x9f\xb5\x3f\x6e\xeb\xbc\x8c\x35\x45\x75\x80\x57\x97\x4e\x07\xff\xf6\x9b" + + "\x77\x70\x08\x83\xa1\x04\x35\x82\x92\x26\x3d\xb9\x1b\x7e\x9f\xf1\xfd\xe8\xd0\xb7\x5e\xd3\x0f\x39\x2d\x32\x27\x63" + + "\x43\xfb\xf8\x87\x38\xed\x31\x0b\x4c\x22\x2e\x8c\x8c\xa6\x55\x43\x7a\x03\x2e\x24\x82\x71\x02\xc6\x18\x63\xa8\xa5" + + "\x9d\xae\x7a\xd3\xc5\x8a\x9e\xa3\xe9\x7a\xce\xfe\x67\xb3\xa2\xe7\x47\x68\x13\xa2\x79\xfd\x02\x95\xb3\x9f\x14\xdb" + + "\xaa\xc8\xb3\xa8\xcd\x8b\x67\x35\x80\x0a\x7a\xa4\x65\x16\xa0\xd4\x9a\xe5\x41\xed\xa1\xb4\x56\xbe\x49\xb6\xeb\x07" + + "\x24\x9c\xb3\x7b\x7b\x68\x56\xda\xfb\x07\x05\xa9\x5b\xda\x77\x19\xff\x25\xd1\xb3\x49\xd4\x9d\x0c\x6e\x59\xd9\xbb" + + "\xde\xcd\xfc\x1f\xd5\xa5\xe9\x65\x87\xb8\xab\xa7\xd5\xbe\xfe\xdc\xdb\x86\x55\xbc\xaf\xf2\x82\x36\xcc\x65\xd1\xdc" + + "\xd6\xb6\x49\x3f\xa7\x6d\xfb\xb9\xf7\xd5\x98\x9f\xda\xfb\x9f\xff\x7c\xa6\x59\x4e\xa2\xba\xc9\x4b\x2e\xff\xdf\x4f" + + "\xa2\x1d\x39\x30\x37\x6f\xb7\xa7\x87\x4a\xcc\x10\x70\x96\x8f\xfe\x29\x3f\xd7\x55\xd3\x91\x92\x19\x62\x6e\x3e\xdb" + + "\x13\xc9\x7a\x81\xf5\xfd\x6a\x02\x40\x97\x20\x89\x2c\x7c\x6d\x18\xf8\xc8\xb8\xcb\xbf\xfd\xe6\x5d\x2f\x24\xd2\x3b" + + "\x56\xbd\xb9\xef\x28\xef\x73\xce\xdb\xa0\x90\x3b\xee\xf5\x73\x97\x80\xa3\xfc\x78\x6a\xe8\xe1\x27\xde\x66\xd9\x54" + + "\x36\x8e\x76\xd1\xfb\xe8\xc3\xfb\x88\x74\x5d\xf3\xa1\x87\xf9\x18\xbd\xff\xf8\x5e\x62\x0d\x1e\xda\x08\x26\x03\xd2" + + "\x50\x59\x85\xff\xdf\x0f\xef\xff\x4a\x9e\x49\x9b\x36\x79\xdd\xed\xde\xff\x24\x65\xae\x4a\xbf\x7b\xef\xa0\x2c\xe9" + + "\x30\x27\xf8\x6f\x97\xaa\xa3\x6c\x7e\xe6\x60\xf6\x68\xf8\x6e\xbb\xdd\x32\xe9\xd5\xe4\x48\xe3\x7d\x43\xc9\x97\x38" + + "\x2f\x7b\x67\x7f\x17\x91\xe7\x2a\xcf\x04\xb9\xae\x77\xea\x39\x11\xe5\xe3\x32\x6d\x8e\xb9\xb7\x1f\x33\xdd\x17\xc0" + + "\xf9\xf9\x38\x89\x3a\xc1\xda\x08\x61\xe9\x3d\xbd\x3b\x93\x97\xf8\x6b\x9e\x75\x27\xbe\x32\xb1\x7b\xef\x34\x9f\x44" + + "\xa7\xc5\x24\xe2\x23\xec\x5d\xd5\xd4\x27\x52\xb6\xbb\x68\xc1\xf8\xff\x9a\x67\xd5\xd7\xfe\x2f\x0d\xda\x62\x81\xc9" + + "\x4c\xe7\x00\xcc\xf4\xa6\x77\x7a\xb0\xb9\x98\x96\xe4\x79\x4f\x1a\x43\x14\xdc\x5c\x71\x80\x7d\x57\x3e\x4d\x53\xd2" + + "\xd0\x6e\x12\x4d\xb3\xa6\xaa\x2f\xf5\x13\xf8\x08\x7b\x22\xee\xaa\x3a\xc6\x87\x8e\xa4\x56\x90\x3d\x2d\x9c\xbd\x97" + + "\xf4\xa6\x85\x03\x0e\xb6\xc5\x6d\x47\x10\xfa\x1c\xad\xb7\x2c\xf2\xe7\xc9\x14\x85\xe2\x10\x17\x08\x57\x03\x5e\x27" + + "\xcd\x00\x29\xf0\xed\xe4\x6c\x41\x96\x65\x16\x4d\x66\xec\xfe\x59\xf8\x91\x29\xb5\xbd\xca\xef\xff\x5b\xf1\x5a\x9f" + + "\xf2\xb4\x2a\xdb\xe8\x5f\x49\x71\x28\xf2\xf2\xd8\x7e\xdf\xeb\x41\xdb\xa4\xbb\xe8\xd2\x14\x1f\xa6\xd3\xcf\x3d\x4a" + + "\xfb\xf9\xa8\x40\xe3\x93\x04\x8d\x1b\x7a\xbc\x14\xa4\x99\xd2\xaa\xfb\x78\x1b\xda\xff\xf3\x5d\x4e\x0f\xf9\xcb\xc7" + + "\xbe\x59\xbd\x5b\x48\xba\x0f\xdf\xd3\xf3\x9e\x66\x19\xcd\xe2\xaa\xa6\x65\x3f\x07\x7e\xff\xb1\x5f\xfd\xbe\x0b\x27" + + "\xfc\xb5\x3a\x1c\xe6\x1f\x23\x49\x90\xfd\x79\x13\x11\x9d\xc6\xd5\x24\xba\x0e\x50\xe8\x9a\x0b\xbd\xa9\x35\xed\xf3" + + "\xf1\xbb\x01\xe0\xff\x57\x00\xa2\x5c\x93\x5d\xfb\x7c\xfc\xfe\xa3\xe8\xfa\xa9\x42\xf2\xac\xf7\xd8\x22\x6d\xc6\x67" + + "\x79\x67\x04\x20\x50\x6b\xe0\xa2\x97\xfb\xa9\x8f\xe6\x24\xbe\xe4\xcb\x57\xcd\xa5\x9d\x41\x3f\x8a\xd3\x38\x57\x55" + + "\x77\x62\x13\x33\x29\xbb\x9c\x14\x39\x69\x69\xa6\x3c\xb5\xaa\x7d\xb1\xe0\x8e\x0d\x79\x6d\x53\xa2\x16\x20\x43\xe3" + + "\x63\x36\x31\xe7\xed\x17\x38\xd3\x0e\x96\xfe\x2f\x73\xf2\xde\xc6\xa9\x8b\x4b\xeb\x82\xdf\x23\xf0\xf4\xd2\x08\xf0" + + "\x49\xa4\x7f\xae\x5c\x64\x12\x92\x22\x84\xce\x79\xe9\xae\x79\x3e\x9b\x23\x28\x69\x51\x5d\x32\x17\xca\x3a\x99\x61" + + "\xec\x96\xcf\xb4\xa8\x6a\xea\xc2\xda\x24\x5b\x4c\x28\xb4\x4c\xf3\xc2\x8d\x73\x40\x70\x8e\x05\x69\x5d\xed\xa1\x09" + + "\xca\xdc\xf9\xd2\xe6\xa9\x1b\x05\x13\x01\xf7\x89\xdd\x38\x0b\x04\xe7\x44\x49\xd3\xb9\x51\x56\x58\x35\x1d\x69\xdc" + + "\x18\x6b\x07\x46\x4c\xcf\x75\xf7\xea\xc6\xdb\x20\x78\x97\x96\x7a\x6a\x7a\x40\x30\x0e\x79\x71\x76\x63\x60\xdd\xd9" + + "\x9d\xe2\x82\x34\x47\x97\x12\xd0\x64\x96\xa0\x58\x6e\x78\xac\x37\xfb\x5a\xf2\xd6\x2d\x68\x54\xa5\x2b\xd7\x60\xa5" + + "\xc9\x0c\xeb\xcb\x86\x9e\xab\x67\x4f\x43\x96\x08\xce\xcf\x55\x75\x8e\xf3\xd2\x8d\x84\x69\x00\x43\xaa\x2e\x9e\xe6" + + "\x60\x5a\x50\x1d\x0e\x6e\x04\xac\xfb\xdb\xfc\x58\x12\xd7\x48\xa3\xc9\x0c\x53\x80\xb4\x3a\xba\x11\xd0\xfe\x6f\x48" + + "\xeb\xee\xcc\x39\xd6\xf9\xa7\xea\xec\x96\xf2\x1c\xeb\xfe\x43\x5e\x78\x30\xb0\xbe\xef\x72\x5f\x1d\x68\xef\x57\xc4" + + "\x65\xff\x68\x32\xc7\xfa\x3e\xab\xbe\x96\x45\x45\xb2\x98\x14\xee\xae\x9c\x63\x0a\x20\x31\xdd\x58\x98\x02\x5c\x6a" + + "\x3f\x0e\xa6\x03\x79\xb9\xaf\x5e\xdc\x28\x98\x0a\xf4\xb3\x77\x9c\xe6\x4d\xea\x93\x39\xa6\x0a\x0d\xad\x29\x71\x4b" + + "\x62\x81\xe9\x42\x43\x0f\x0d\xf5\x28\xd0\x02\x53\x87\xde\x14\x78\x85\xbe\xc0\x54\xa2\xf7\x43\xdc\x18\x98\x4a\x1c" + + "\x0a\xe2\x1e\x0d\x0b\x4c\x25\xfa\x05\x58\x7d\xaa\x4a\xea\x9e\xad\x16\x98\x42\x3c\x57\xc5\xe5\x4c\xbd\x43\x7c\x81" + + "\xa9\x84\xc0\xeb\xf5\xc9\x8d\x88\xe9\x85\x40\xbc\xd4\x6e\x34\x4c\x37\xfe\xd6\xa4\x55\xe6\x56\x8b\x05\xa6\x16\x7b" + + "\xe2\x47\x5a\xa2\x13\x84\x47\xf2\x4b\x74\x86\x20\x47\xb7\xcc\x97\x98\x3e\xec\x2b\xcf\x04\xb1\xc4\xf4\xa1\xc7\x38" + + "\x93\xc6\x83\x85\xe9\x04\x0b\xd8\xb8\x51\x30\x75\x48\xc9\x99\x36\xc4\x8d\x83\xa9\x02\x8b\xba\x3b\x31\x30\x1d\xd8" + + "\x57\x85\xdb\x9a\x2c\xb1\xee\xe7\x9b\x50\x6e\x1c\x74\x82\xa0\x2f\x9d\xf4\xd2\x5d\x88\x2b\x54\x05\x7a\x44\x1e\x85" + + "\x70\xe2\x61\x9a\xc0\xf6\x93\xe2\x82\x1e\x3c\xf5\x61\xfa\xc0\xf1\x52\x5a\x76\x1e\xaf\x69\x85\xe9\x05\xc7\x6c\xfc" + + "\x4d\xc4\x54\x83\x23\xfe\xf5\xd2\x76\xf9\xc1\xed\xdb\xad\x30\x15\xf1\xba\x43\x2b\x4c\x41\xf2\x32\xa3\x65\x37\x22" + + "\x18\x7c\x0e\x61\x88\x23\xed\x43\xdd\x49\x92\xd2\x7e\x26\x8e\xd9\x06\xb1\x1b\x17\x5d\x27\xe4\x69\x77\x69\xdc\x66" + + "\x63\x8d\xe9\xcc\x99\xd4\x71\x3f\x42\x3d\x3d\xb8\x46\xfb\x9e\xef\xc3\x3b\x71\xb0\x5e\xef\x7c\xc3\x7a\x8d\x75\x37" + + "\xcd\x72\x0f\x06\xba\x56\x38\x11\x9f\x08\xb0\x6e\x66\x7b\x38\x6e\x14\xac\x83\xbd\x6e\xef\x1a\xeb\xd8\xb6\xa3\x75" + + "\xbc\x27\xe9\x97\xaf\xa4\x71\xdb\x90\x35\xd6\xaf\x07\xd2\x76\xe3\xa8\x1b\xac\x77\xc7\xb1\x30\x7b\xc0\xa2\x11\x4e" + + "\x0c\x4c\x1b\x6a\x72\x69\xdd\x02\xd9\x60\xca\xd0\x76\x95\x7b\x2a\xdd\x60\xca\x70\xa8\x1a\x7f\x5b\x30\x7d\x60\xc2" + + "\x1b\xc5\xc4\xd7\x90\xb4\x1e\xc7\xc4\xb4\x83\xfe\x95\xa6\x6e\xb5\xdd\xa0\xab\x88\x13\x7d\x6e\xaa\x11\x23\xbc\xc1" + + "\xb4\x43\x62\xfa\x8d\xcd\x03\xa6\x1d\x75\x71\x69\xd9\x9a\xc7\x8d\x86\x06\x0a\xf2\x72\x14\x0f\x53\x12\xbe\x5a\x1c" + + "\x41\xc4\x54\xa5\xfa\x32\x82\x84\x69\xcb\xdf\x2e\xb4\xed\x72\xb1\xa8\x73\xa3\x62\x3a\x93\x97\x87\x6a\x04\x0d\x55" + + "\x98\xb4\xa1\xb4\x6c\x4f\x95\xa7\x1b\x30\x75\x11\x72\x19\x59\x40\x3c\x60\x6a\x53\x7d\x19\x45\xc3\x1d\xcc\x72\x0c" + + "\x6f\x8b\x29\x0c\x69\x9a\xea\xab\x5f\x47\xb7\xa8\x83\xc1\xf0\xfc\x1a\xba\x45\x67\x19\x86\xe8\xf1\xb9\xb7\xa8\x77" + + "\xc1\xb0\xbc\x2e\xfe\x16\x53\x19\x36\x77\x78\x97\x49\x5b\x4c\x5d\x1a\xca\x4e\xa6\x1d\x2e\x85\x3b\x74\xb0\xc5\x14" + + "\x46\x20\xb2\xd3\x43\x6e\x4c\xd4\xc2\xbc\xa4\x05\x39\x93\x51\xfd\x9e\xa1\x91\xbe\x63\xee\xee\xc0\x19\x1a\xe8\x2b" + + "\x28\x71\xae\xb3\x66\x68\x98\xef\x90\xbb\xa7\xe1\x59\x82\xce\xf5\xaf\x94\x6d\x3d\xb8\xb1\x30\xe1\xf7\x58\x69\x51" + + "\xb9\x67\x9f\x19\x1a\x20\xfc\x4a\x9a\x32\x2f\x8f\x23\xc2\xc3\x44\x5f\x17\xa4\xf4\x54\x86\x1a\x77\x52\xd0\x32\x73" + + "\xc7\x30\x67\x68\x9c\xb0\x21\x65\x56\x39\x63\x8b\x33\x34\x4a\x98\x56\xe7\x33\x75\x3b\x59\x33\x34\x54\x78\x26\xc7" + + "\x92\x7a\x70\xd0\xe0\xb7\x98\x75\xdc\x43\x73\x86\x46\x0c\x25\x9e\x6f\x70\xce\xd0\xb8\x61\x43\xbb\xaf\xd4\xc7\x26" + + "\xee\x0d\x56\x75\xdd\xf7\x73\xea\x09\x3a\xcf\xd0\xe0\xe1\xa1\x2a\xd8\x36\xa4\x57\xb7\xd0\x28\xa2\xc0\xf4\xea\x32" + + "\x1a\x4a\x14\xf6\x40\x9e\xf3\x73\x23\xe3\xb1\x24\x86\x7c\xaa\x9a\xfc\xe7\xaa\xec\x3c\xe8\x78\x88\x31\x73\x3a\x39" + + "\x33\x34\xc2\xb8\xbf\x14\xc5\xa9\x6a\xdc\x4d\x44\xa3\x8c\x7b\xea\x36\x75\x33\x34\xca\x98\xf6\xd2\x38\xe4\x29\xe9" + + "\xdc\xdd\x80\x06\x1b\xbb\xd3\xe5\xbc\x6f\x7d\x1a\x8a\x46\x1a\x05\x9a\x57\x41\xd1\x60\xe3\x89\x94\x99\x7f\x8e\x9b" + + "\xa1\x01\x47\x86\xe7\x9b\x53\x67\x68\xd0\x91\xa1\xf9\x1a\x87\x29\x09\x43\xf2\x36\x0d\x8d\x39\x72\x5f\x21\x64\x1a" + + "\x9f\xa1\xe1\x47\x0d\xdf\xdb\x54\x34\x0e\xa9\xa1\x7b\x9a\x8c\x86\x24\x35\x64\x7f\xd3\x31\x2d\x3a\x16\xd5\xde\xad" + + "\x78\x68\x68\xf2\x6b\x43\x4b\xf7\xae\xd8\x0c\x0d\x4b\x76\xa4\xfd\xe2\x8c\xc6\xcd\xd0\x80\xe4\x21\x2f\x3c\x71\x97" + + "\x19\x1a\x8d\xdc\x37\x39\x3d\xa4\xc4\x63\xd1\xd0\x80\x64\xef\xda\x70\xef\xd6\x89\x87\xc6\x24\x33\xd2\x9e\xf6\x95" + + "\x67\xfd\x34\x43\x23\x93\x35\xa9\x69\x93\x16\xb9\xbb\xa7\xd1\xf0\x24\xdb\x59\xf4\xef\xfa\xcd\xd0\x28\x65\x91\x97" + + "\xce\xf5\xff\x0c\x8f\x50\x9e\x2a\x8f\x13\x80\x46\x28\xeb\x4b\x7b\xaa\xdd\xfb\x5e\x33\x34\x44\x79\x69\x3d\xa2\xc3" + + "\x3a\xf8\xb8\xf7\x08\x0d\xeb\xda\xb6\xf2\x4c\x8c\x68\x94\xb1\xc7\x88\xf7\xaf\x31\x29\xea\x13\xd9\x7b\x66\x64\x34" + + "\xd6\x68\x62\xfb\xdc\xed\x19\x1a\x75\x94\x14\xf8\x69\x1c\x27\x2a\x1a\x73\x80\xa8\xfe\x9a\xd1\xf5\x81\xe4\xbd\xeb" + + "\x9a\x7c\x7f\xe9\xdc\x7b\x16\x33\x34\x02\x69\xe3\xfb\x79\x40\x35\xa2\x64\xe1\x2a\xea\xd6\x0b\x34\x22\x49\x5f\x6a" + + "\x52\x7a\x70\xf0\x9d\x4d\x7e\xee\xca\x6f\x35\xd1\x50\xa4\x42\xf5\x58\x6b\x34\x1c\x59\x54\x47\xcf\xe6\xf0\x6c\x8d" + + "\xee\x75\x16\x9e\x0d\xd5\x19\x1a\xbd\xec\xab\xf1\x6c\x27\xcf\xd0\xf0\x65\x49\xbf\xc6\x5f\xf3\x32\xab\xbe\xba\xf1" + + "\x70\xcf\x35\xad\x3c\x26\x10\x0f\x63\x12\x77\x80\x71\x86\x46\x31\xbd\xee\x26\x1a\xc4\xec\xeb\xf0\xb0\x85\x6e\x67" + + "\xb0\xa3\x6e\x6e\x1c\x4c\x17\xe8\x8b\x17\x07\x8d\x5b\xb6\xd4\xa3\xac\x68\xcc\xf2\x50\x54\x75\xfd\x1a\x67\xee\x03" + + "\x47\x74\x86\x86\x2e\x05\xa2\x5f\x18\x68\x04\x53\x60\xfa\x0f\x41\xcc\xf0\x50\xe6\x50\xa9\x1b\x11\x0d\x67\x72\x44" + + "\x6f\x67\xa3\xd1\xcc\xb4\xa1\x59\xde\xf5\xeb\x20\x4f\x2b\x31\x2d\xe1\x57\x47\x3c\x96\x16\x8f\x67\x5e\xba\x82\x36" + + "\xee\x79\x18\x0d\x65\xf2\xc3\xb8\x4e\x1c\x34\x86\x99\x56\xe7\xba\xa1\x6d\xeb\xe9\x3c\x34\x88\x49\x49\xe3\x9f\xc4" + + "\xd1\x10\x26\x43\xf1\x1a\x6d\x34\x80\xd9\x55\x5f\x7d\xed\x42\xe7\x9a\x8e\x74\xee\xe9\x05\x0d\x5b\xb6\x99\x7f\xd7" + + "\x68\x86\x46\x2d\x4f\xa3\x58\xa8\xed\xb8\xec\xd9\xe1\x6f\x0f\x8b\xe8\x2e\x08\x3b\x91\xdb\x76\xb4\xf1\x55\x88\xfb" + + "\x29\x17\xb6\x74\x29\xf6\x6e\xa5\x42\x63\x96\x1c\x71\x15\xcf\xdc\x68\xb8\x9f\xd2\xa3\xad\x7d\x68\xb8\x73\xd2\xa3" + + "\x6d\x7c\x68\xe8\x22\x45\xde\xee\x8d\x7d\xbb\xe5\x33\x34\x6a\xd9\xd0\x63\xde\x76\xfc\x0a\xc0\x08\x3a\xba\x73\x5e" + + "\x54\x97\x6c\xf4\x7c\xcd\x0c\x0d\x43\x72\x5c\xff\x29\x9b\xd9\x16\x53\x84\xae\xa1\x34\x4e\xab\x32\xf7\x59\x96\x2d" + + "\x7e\x7c\x8a\xd2\x38\xa3\x69\x9e\x5d\x2a\xe7\x91\x4d\x3a\x4f\x50\x63\xe1\xe4\x72\x8e\x06\x4a\x7b\xfb\xec\x3d\x4a" + + "\x35\x47\xa3\xa5\xbd\x75\x1e\x41\x43\x97\x21\xf4\x99\x16\x1e\x8f\x69\x8e\x86\x4d\x7b\xd5\x71\x63\xa0\x2b\x11\xd2" + + "\xba\x63\x29\x73\x34\x5c\x4a\x0a\xea\x9e\xc2\xe7\x68\xf8\x92\xfe\xed\xc2\x6e\x82\x3b\xbb\x77\x8e\x46\x30\xbf\xe4" + + "\xa5\xf3\x1c\xcb\x1c\x0d\x5f\xfe\xed\xe2\x59\x97\xe2\x47\x77\x6b\xe2\x76\x68\xe7\x68\xdc\x72\x9f\xb7\x27\xf7\x7e" + + "\xe5\x1c\x8d\x58\x7e\x29\x7d\x91\x92\x39\x1a\xb0\xdc\x93\xfd\x6b\x7c\xa8\x9a\xf3\xa5\x70\x9e\x66\x99\xa3\xf1\xca" + + "\xce\x1d\xf7\x9d\xaf\x0f\xd8\x61\xeb\x7d\x41\xd2\x2f\xde\xe5\xf9\x1c\x0d\x53\xee\xdd\x73\xed\x1c\x0d\x4d\x92\xba" + + "\x76\x8e\x85\xc3\xc3\x01\x3b\xbf\x4c\x1b\x4f\x90\x62\x8e\x06\x24\x4f\xd5\xa5\xf1\x1d\x7b\x9e\x2f\x66\xd8\x11\xf2" + + "\x82\x9c\xdd\xfd\x8a\x46\x24\xb3\x4b\x5d\x78\xe3\x91\x73\x34\x1e\x59\xe7\xc7\xe3\x6b\xbc\x27\xee\x58\xc3\x1c\x0d" + + "\x48\xb6\x69\xde\xb6\x55\xe3\x36\x75\x68\x34\x72\x9f\x77\x69\xe5\x5e\x49\xcd\xd1\x50\xe4\xbe\x73\x1e\x55\xc2\x11" + + "\x5e\xf6\x6e\xfd\x46\x11\x5e\x9d\x43\x35\x49\x08\xd6\xfa\xbf\x3a\xad\x9b\x03\xa1\xb9\xec\x9d\xca\x36\x4f\xf6\x19" + + "\x8e\x72\x1d\x02\xbb\xf1\xe0\x6c\x38\x1a\x42\xcd\x53\x1a\x17\x55\x51\xb8\x6d\x35\x1a\x39\x55\x68\x71\xd7\x5b\x6d" + + "\xf7\xc0\x43\x03\xa7\x34\xbb\xa4\xfc\x6a\xa0\x13\x0d\xdd\x6f\x67\xa9\x31\x02\xb6\x12\xe6\x68\xc8\x54\xa0\x8f\x6d" + + "\x63\xcc\xd1\xe0\xe9\x99\x96\x97\xf8\x44\xce\xfb\x4b\x73\xf4\xcc\x1d\x68\x10\xf5\x5c\x65\xa4\x18\x59\xa2\xcf\xd1" + + "\x58\x6a\xe5\xbc\x5f\x41\xe7\x68\x20\xf5\xd8\x10\xcf\xe0\x42\x83\xa8\xed\xa5\x64\xe6\xc9\xed\x33\xcf\xf1\x83\x9d" + + "\x32\xf7\x89\x1b\x0d\x3d\xde\xd9\xa3\xf1\xbb\x6f\x4e\x3c\xf4\x1c\x78\x8f\x07\x6e\x12\x3a\x91\x51\xcd\xd9\xff\x95" + + "\xa6\x9d\x38\xa5\xe7\x39\xe0\x33\x47\xa3\xaa\x1a\xb6\xc8\x56\xe1\x24\x80\x29\x8f\x46\x20\x40\x7d\xd1\x98\xab\x46" + + "\xc4\xb7\x59\x31\x47\xcf\x88\x6a\xe8\xa3\x63\x00\x0d\xe2\x6a\x24\xbc\xdb\x2d\x73\xfc\x00\x69\x93\x93\xf2\x58\xd0" + + "\x11\x5c\xfc\x0c\xa9\xc4\xf5\xb6\x1c\x0d\xed\x2a\xd4\x91\xae\x43\xa3\xba\x0a\xd9\xa7\x35\x68\x50\x37\xad\xca\xb6" + + "\xf2\x98\x63\x3c\x94\x7b\xa9\x69\x23\x2e\x28\x3b\x11\xd1\xd9\xf8\xb2\x1f\x43\x43\x4d\x53\x6f\xd6\xfc\x22\x45\xcf" + + "\x19\xf6\x68\x23\xbd\x88\x69\x10\xc3\xf3\x85\x6d\xe7\x68\xd8\x96\xa1\x79\x16\x20\x43\xc8\xf6\xf7\xac\xf0\x57\x4a" + + "\x6e\x21\xea\xc0\xae\xea\xff\xba\x35\xea\x09\xab\x44\x82\x97\xa4\xd6\x32\x4e\x74\xa4\x8e\x4f\xf9\xf1\x54\xb0\xe5" + + "\xba\xb8\x5c\xdc\x1c\xf7\xe4\x43\x32\x89\xc4\xff\x93\x57\x41\x55\x66\x2a\xed\x26\xe7\xfb\x7f\xa5\xc5\x33\xed\xed" + + "\x42\xf4\x6f\xf4\x42\xdf\x4f\x22\xf5\x61\x12\xfd\x4b\x93\x93\x62\x62\x24\xc9\x82\xec\x2c\x39\x3b\xfa\x55\xce\xe9" + + "\x72\xfe\xb0\xda\xcc\x96\x0b\x90\x3c\xe6\xbb\xc5\x62\xf1\x88\xe6\x6e\xfa\xee\x70\x38\x48\x0e\xf5\xa4\x35\x68\xaa" + + "\x1a\x8d\x79\x90\xa4\x06\x70\x05\xbe\x6a\x8c\xe9\x09\x6c\x88\xd0\x28\xc9\xde\x86\xec\x37\x8f\x32\x45\x0d\xcc\x63" + + "\x00\xf3\x4f\xed\x58\xfe\x16\x3d\xa9\x94\x24\x31\x5f\xac\xe6\x9b\x14\x25\x01\x52\x21\x40\x3a\x0c\x5d\xe5\xa4\xea" + + "\x4e\x79\x29\xb2\x4d\x3d\xc2\xef\xab\xfa\x85\x25\xc7\x88\x86\xeb\xb1\xe9\xa5\x8d\x1b\x76\x92\xa4\xaf\x1b\x40\xc7" + + "\xd5\xe1\xd0\xd2\x6e\x17\xc5\x73\x95\xef\x08\xc9\x88\xa4\x72\xb4\x88\x8c\x01\x66\x32\xa7\x73\x9e\x65\xc3\x2d\xda" + + "\x94\x34\xd5\xa5\xa5\x05\x4f\xdb\xf2\x34\xcd\x3b\x7a\x7e\x22\x4f\x2c\x35\x01\x5e\xc8\x8b\xf2\xf3\x31\x6e\x68\x5b" + + "\x57\x65\x9b\x3f\xd3\x09\xbb\xe0\x7e\xba\x9c\xf7\x25\xc9\x8b\x48\xe2\xab\x2f\x4f\x92\x19\x3d\x77\x19\x4f\x45\xa2" + + "\xe5\x33\x78\xc4\x53\xbf\xf0\xfa\x7a\xd5\x12\x29\x29\xc4\x88\x6a\x48\x96\x5f\xda\x5d\xb4\x56\x12\x61\x90\x03\x2b" + + "\xbf\xf8\xae\x3d\x8f\xd4\xad\xa5\xbe\x19\x1f\x0d\xb8\xfa\xe3\xd9\x55\xbe\xcb\xb2\xec\xd1\x6e\xc6\xd2\xb0\x00\x0d" + + "\x29\xe5\x9d\x6e\x52\x14\xd1\x74\xde\x46\x94\xb4\x34\xce\xcb\xb8\xba\xb0\x41\x10\x57\x21\x50\x23\x20\x50\x74\xfc" + + "\x14\x03\x26\xe3\x95\x4a\x33\x26\xb2\x6c\x71\x8d\x63\xf3\x68\x34\x17\xc6\x4b\x7c\x93\x19\xc0\xe4\x67\x95\x27\x06" + + "\x34\x5a\xde\x4c\x97\x22\xa1\x54\x69\x65\xdb\xc4\x55\x59\x70\x8b\x36\x5c\x6b\x27\xfb\xb6\x2a\x2e\x1d\xbb\xd6\x2e" + + "\xbb\x8d\x93\x57\x1d\x52\x1b\xf9\x8a\x60\xb2\x9b\x58\x94\x9a\xc9\xc5\x98\x25\x2b\xf2\x7a\x17\x35\x34\xed\xa0\x71" + + "\xc5\x32\xdc\x48\xde\xf8\x48\x25\xfd\x12\x50\x66\xa3\x43\x8a\x06\x53\x30\x34\xa3\xed\x48\x97\xa7\xa0\x11\x52\xd7" + + "\x4c\xdd\xd3\x32\x77\x59\x89\xb8\x06\xb6\xc1\x38\xf9\xb1\xa9\x0a\x95\x56\x8b\x5b\x30\x34\x23\xd6\xf4\x34\x9b\x44" + + "\xd3\xd3\xbc\xff\xcf\xa2\xff\xcf\xb2\xff\xcf\xaa\xff\xcf\x7a\x12\xf5\x85\x32\x8d\x48\x5f\xd2\x17\x9c\xd6\xe3\x26" + + "\x5a\x26\x01\x58\x61\x49\x00\xa6\x33\x67\xbe\xb1\xe9\x69\x16\x4d\xd9\xe1\xd4\x9e\x81\x59\xa4\x7e\xce\xc1\xe7\xf9" + + "\xf0\x79\x01\x3e\x2f\x86\xcf\x4b\xf9\xb9\xb7\x46\xa7\xe5\x50\xb0\x02\xf0\xab\xe1\xf3\x1a\x7c\x5e\xcb\xcf\x80\x15" + + "\xc5\x09\xcb\x93\x32\x7c\x56\x9c\x00\x46\x06\x3e\x06\x36\xa2\x81\x87\x81\x85\x9e\x96\xe2\x01\xb0\x20\x39\x18\xa4" + + "\x3c\x9a\x52\x41\x5a\x99\xcd\x66\x83\x77\xeb\xd0\x8f\xa1\xe3\x75\x36\xa4\xd2\xbb\x4b\xa7\x0c\x34\xfa\x76\x2b\x22" + + "\xa1\xd2\x34\x5d\xa4\xf5\xea\x77\x8a\x3b\x5d\x63\x75\x2d\x85\x2d\x9d\x05\xb4\x74\x09\x78\xbf\x55\x6f\xa0\xf6\x61" + + "\x1d\x1f\x05\x76\xbb\xca\xcd\x08\xfb\x54\x64\x95\x04\x00\x0b\x30\xe5\xb1\x3e\x9e\x5b\x10\xb0\x85\x0b\xa5\x05\x30" + + "\x0d\xe5\x12\xca\x80\xb5\xc1\xf4\x49\x1f\x00\xc4\x8a\xb5\xc1\x84\x80\x34\xd6\xba\x9d\x10\x10\x83\xbb\x52\xeb\x9e" + + "\x4a\x94\x68\xdd\x50\xc8\xdc\x49\x8e\x49\x04\xd2\x5c\x83\x4f\x72\xa0\x2c\x50\xb3\xb3\x14\xe4\x45\x8e\xae\x0f\xd1" + + "\x39\x2f\xf9\xac\x1f\xed\x36\xeb\x87\xfa\xe5\x23\xab\x73\xa8\x5d\x93\xd0\xac\x67\x4f\x25\xdb\x91\xbd\x86\xa7\xe1" + + "\x1c\xba\xec\x4c\x9a\x2f\x93\x48\xe5\xf6\x1c\xb2\xb1\xcd\x79\xfe\x35\xcc\x55\x48\x0f\x0f\x74\x21\x09\x30\x2f\xb3" + + "\x5f\xc5\x31\x7c\xf6\x97\x70\xdf\xfa\x8f\x1a\x14\xcf\xd5\x6b\x82\xb1\xaf\x1a\x1c\xbf\x3d\x69\x01\xf2\xcf\x1a\xa4" + + "\xb8\xf4\x68\x81\x8a\xef\x1a\x6c\x59\x7d\x6d\x08\xef\xd6\xaf\xa7\xbc\xa3\x2c\x55\x1b\x4b\x0f\xd3\x7f\xd7\x9b\x53" + + "\x7d\xa5\x4d\x4a\x5a\x3a\x10\x06\xd9\x22\x55\xa9\x86\x73\xa9\x6b\x0f\x8e\x2a\xd5\x1b\x4a\x6a\x76\x19\xf6\x67\x1c" + + "\x69\x28\xd6\xb0\xce\x17\x99\xed\x0c\x31\xab\x0c\xa2\x6e\x72\x95\x83\x57\x5f\x5a\x48\xcf\x5f\x83\xc3\x56\x11\x0f" + + "\xeb\x64\x9b\x68\x44\xdb\x4b\x9a\xd2\xb6\xd5\x89\xa6\x9b\xf5\x22\xd3\x89\x0a\x38\x8c\xe8\x7e\xb5\x9c\xa7\x1a\xd1" + + "\xbc\x3c\x54\x3a\xc5\xd9\x26\x79\x38\xe8\x14\x7b\x20\x8c\xdc\x72\x35\x5f\x6f\x35\x72\xe2\x0a\x83\x06\xf6\x40\xd6" + + "\xd9\x62\xaf\x53\x14\x70\x08\xd1\xf5\x7a\x35\x33\x78\xcc\x48\x79\x34\xa0\xc8\x76\xb9\x5c\xce\x75\x9a\x1c\x0c\x21" + + "\xf9\xb0\x5c\xac\x16\x72\x6c\x4f\xf7\x47\xb4\x7b\xa4\xff\x6d\x0f\x37\xa3\xe3\x06\x7c\x50\x15\x82\xa6\xf7\xe0\xfe" + + "\xa8\xf5\x1f\x02\x9f\x1d\x0e\x49\xf6\x00\xab\xb1\x3b\x12\x41\x4b\x67\x74\xbe\x5f\x80\x6a\x54\x8f\x62\x75\x6c\x69" + + "\x76\xd0\x9a\x62\x74\x2d\x82\x43\x0e\xd9\x76\x70\xb7\xf7\x47\xad\x8f\xc7\xac\x13\x01\x08\xfe\x6a\x0e\x1b\x9a\xee" + + "\x57\xa0\x1a\xd0\xeb\x18\xf8\x3c\xa3\x19\x85\xb5\x58\xdd\x8f\x60\xd1\xe5\x7e\xbb\x57\x1a\xcb\x92\xd8\xf1\xf3\x3d" + + "\xd0\xf6\xaa\xc9\x64\x0b\xbd\x81\x1d\xcb\x1d\x1c\x25\xc6\x3a\x45\xcb\x11\x6d\xad\x4e\xaa\x62\x12\x5d\x0a\xcb\xcf" + + "\x48\xfc\x4e\x46\x55\x44\x3d\x62\x55\x44\x17\x8e\x2f\xc8\xe8\x94\x24\xa2\x52\x31\x96\x4f\xe3\x52\xb2\xa4\x5b\x5a" + + "\x02\x4e\x1e\xe3\x8b\xc4\x8c\xd7\x82\xbc\x5c\x2a\x12\xc1\x91\xf9\xa2\xd7\x85\x2a\xea\xe5\x5f\xe2\x95\x5c\xe4\x8e" + + "\xd2\x7b\x2a\x72\xff\xda\x5a\xd6\xd5\x88\x25\x81\xb6\x32\x13\xf5\xad\x94\x74\xb2\x30\x79\xce\x07\x79\x66\xd9\x24" + + "\xca\x90\xfc\xb9\xc3\x9a\x5c\x02\x76\xb6\x4b\x0d\xf2\x79\x6b\x1e\x87\x10\x4c\xa0\xc7\x90\x15\x20\xf4\x2f\x99\x79" + + "\x77\x28\x2a\xd2\xf1\x79\x5a\x66\x5c\x64\x2b\xd5\xb5\x50\x31\x74\xfd\xf9\x2e\x2d\x28\x69\x00\x96\x35\x97\x0f\x5f" + + "\x07\x7c\x5a\x14\x79\xdd\xe6\x2d\xaf\x07\x9b\x7e\x79\xea\x41\x83\x51\xe1\xe6\x68\x6d\x9e\x3d\x24\x9a\xa7\xc3\x52" + + "\x73\x66\xa4\x23\x71\xd5\xe4\xc7\xbc\x24\x45\xcc\x13\x75\x4e\x22\x33\xaf\xba\x5c\x61\x9e\x68\x51\x3b\xc6\x10\x8f" + + "\x7c\x69\x53\x6a\x5e\xe6\x2c\xf1\x5b\x7b\x36\xfd\xa8\x2d\x8f\xc4\x8c\x4d\xf6\x43\xe6\x4e\xdd\xc7\xea\xc7\x9c\xb1" + + "\xbc\xe1\xae\x26\xe6\x46\x6e\xa6\x2b\x6d\xe0\x2b\xbd\xb4\x87\x3d\xa8\xaf\x2a\x76\x05\x69\xbb\x38\x3d\xe5\x45\x36" + + "\x89\x40\x49\xed\x2a\xb8\x40\x14\x91\xd0\xd7\x31\xe6\x01\x96\xf4\x37\xc1\x27\xf9\x7a\x00\xf8\x34\x78\xa3\x76\x78" + + "\x4d\x4f\x13\x1f\x18\xcf\x1d\xba\xc9\xe2\x45\x84\xc8\x11\x96\xb0\x12\x88\x22\x1a\xad\xc2\xfc\xdf\xff\x65\x9e\xcc" + + "\x96\xd1\x5f\x92\xe4\x5f\x92\xef\xd5\x14\xa1\x70\xe3\x86\x3e\xd3\xa6\xd5\xe8\x4d\xeb\x4b\x51\x00\x87\xd7\xb0\x31" + + "\x33\xd4\xc8\x24\x8f\x98\x6b\x0c\x83\x6f\xca\x42\x81\x4e\xb7\x74\x22\x71\xb3\x68\x8a\x06\x03\xd1\x65\xc4\xf2\x9f" + + "\xda\x40\x2e\x09\xc3\x76\xeb\x75\x69\x19\x6c\x21\x98\xb3\x4f\x20\x90\xb7\x7b\x3c\x7d\x22\x99\x10\xdb\x26\x9e\xf6" + + "\x72\x08\x6f\x73\x05\x11\x6f\x6b\x15\x19\x6f\x63\xbd\x94\x00\xa1\xc8\xd0\xc3\x5e\x03\x23\xa6\x8d\xb2\xcd\x24\xcb" + + "\x1a\xe9\xd5\x79\x17\xa3\x66\x2e\x4c\xff\x54\x14\xf6\x16\xc0\x9f\x68\x59\x54\x93\xe8\x4f\x55\x49\xd2\x6a\x12\xfd" + + "\x81\xed\x3a\x92\x76\x12\xbd\xff\x43\x75\x69\x72\xda\x44\xff\x46\xbf\xbe\x07\x0f\x05\x00\xea\xba\x29\x9c\xd7\x2f" + + "\x32\xa4\x6c\xdb\x57\xe5\x6b\x6e\xe6\xab\x25\x75\xad\x4a\xb7\x87\xf9\x61\x89\x47\xaa\x45\xb5\x5f\xf6\xd9\x0d\xb5" + + "\xfa\x3c\xf3\x05\x52\xdf\x42\x8f\x8c\xc3\x24\xd6\x79\xd9\xd2\x2e\x4a\x58\x7c\x37\x4a\x8c\x1d\xb2\xe9\x7c\xf5\x51" + + "\xed\xc6\x85\x22\x80\x96\x59\xad\x33\x9f\xf2\x90\x1b\x07\xa6\x7f\xe1\xe2\x56\xbe\x94\x62\x7e\x93\x11\x12\xb1\x9b" + + "\x63\x5b\x72\xc5\xc1\x56\xce\x59\x66\x1c\xc5\xe4\x6c\x71\xed\x06\xde\xd7\xaa\xc9\x78\x02\xe8\x5d\x24\xf2\x40\x17" + + "\x85\x2a\xe8\x3d\x0a\xf9\xbd\xff\xe0\x52\x99\x55\xff\xcf\xb1\xed\x91\xa6\xa9\x57\x99\xfa\xe6\xdb\x7a\x6c\xca\xdc" + + "\xf9\x7e\xc5\xa3\x19\x86\xa8\x1b\xca\xf8\xc6\x79\x05\x4f\xcb\x20\x5c\x29\x8b\xdf\x13\x69\xd3\xa6\x2a\x0a\x95\x3b" + + "\xfa\x4c\x5e\x94\x48\x17\xcb\x44\xdf\x58\x88\x5f\x77\x11\x87\x57\xbb\x6c\xbd\xe7\x95\x1b\xef\x42\xf8\xa7\xad\x99" + + "\xd6\xc9\x12\x56\xdf\x1a\x10\xa0\x20\xfe\x3f\xe6\xb2\xea\x8c\x48\xdf\x74\xb3\xd2\x9d\x3f\x8c\xca\x76\x3b\x1f\xa1" + + "\xb2\xdd\x8c\x53\x99\xcd\x93\x64\x84\xcc\x6c\x66\xd0\x19\xe0\xe2\x43\x71\xc9\xb3\x5f\x5b\x86\xd3\xa6\xfa\x0a\x2d" + + "\xbf\x40\x8b\x0d\x6a\x62\xc9\x34\x1b\x16\x31\xd3\xb4\x2a\xe2\xe2\x18\xcf\x26\x91\xfa\x99\x80\xdf\xf0\xfb\x7c\xf8" + + "\x0d\x7e\x2e\x26\x5c\x2e\xec\x8f\xe5\xf0\x7d\x35\xfc\x5c\x0f\x3f\x37\xc3\xcf\x87\xe1\xe7\x56\xd1\x38\x67\x8a\x95" + + "\xfe\x67\x02\x7e\xc3\xef\xf3\xe1\x37\xf8\xb9\x80\x64\x96\xc3\xf7\xd5\xf0\x73\x3d\xfc\xdc\x0c\x3f\x1f\x86\x9f\x03" + + "\x2b\xed\x59\xb1\xd2\xff\x4c\xc0\x6f\xf8\x7d\x3e\xfc\x06\x3f\x17\x90\xcc\x72\xf8\xbe\x1a\x7e\xae\x87\x9f\x9b\xe1" + + "\xe7\xc3\xf0\x73\x60\xe5\xa5\x55\xac\xf4\x3f\x13\xf0\x1b\x7e\x9f\x0f\xbf\xc1\xcf\x05\x24\xb3\x1c\xbe\xaf\x86\x9f" + + "\xeb\xe1\xe7\x66\xf8\xf9\x30\xfc\xdc\x1a\xfb\x81\x30\x5b\x77\x3f\x54\xf0\xcd\xcc\x71\x4d\x87\x5a\xf8\x0f\xd2\x48" + + "\xb0\x16\x36\xb9\xe3\xdb\x15\x60\xf7\xdd\x04\x98\x41\x80\xed\x6c\xba\xe6\xff\xb7\xb1\x00\x13\x08\xf8\xb0\x98\x2e" + + "\xc4\xff\x99\x80\x5b\x08\x07\xf6\x57\x24\xf3\xb0\x78\xbd\x76\xd6\xb7\x81\x70\xab\x07\x67\x75\x6b\x0d\xce\x6a\xdf" + + "\x0a\x16\x2f\xdd\xcd\x5b\x42\xb8\x85\xbb\x75\x0b\x08\x37\xb7\x5a\xa7\x8b\xdb\xdd\x3a\x4d\xea\xee\xc6\x31\xc7\x5a" + + "\xf4\xa1\x54\x4c\xbb\x0f\x39\xd4\x0c\x42\x79\x3a\x92\x43\x27\x10\xda\xd3\x9b\x0c\x7a\x0b\x81\xed\x2e\x65\x30\x0f" + + "\x10\xc6\xd3\xaf\x0c\x78\x03\x81\x3d\x9d\xcb\x80\xd7\x1a\x30\xde\xfa\x15\x84\xf1\x74\x33\x03\x5e\x42\x60\x4f\x5f" + + "\x33\xe0\x05\x04\xb6\x3b\x9c\xc1\xe8\x1d\x34\xd2\x76\xad\x9f\x46\x9a\xae\xf5\x12\x9c\x3b\x15\x50\x7b\x92\xfa\x21" + + "\x2c\x14\xa6\x1e\x3d\xd0\x0c\x00\x79\xb5\xa3\x07\x4e\x00\xb0\x57\x39\xda\x93\x50\x0e\x0e\x8b\xe9\x46\x7b\x12\xba" + + "\xc1\x41\xbc\xaa\xd1\x9e\x84\x6a\x88\x00\x91\x4f\x3c\xed\x49\x68\x86\x80\xc5\xdb\xbd\x02\x20\x5e\xbd\x68\x4f\x42" + + "\x2f\x38\xac\x57\x2d\xda\x93\x50\x0b\x0e\x8b\x69\x45\x7b\x8a\xb5\x6e\x19\x69\x35\xec\x9d\x91\x46\xc3\xbe\x41\x54" + + "\x82\x9f\x5e\x93\x4a\xa1\x07\x1f\x6d\xdd\x90\xd0\x33\x1b\xda\xa3\x24\x12\x2b\xb1\xb1\x3c\xda\x22\xb0\xb6\x36\x92" + + "\xad\x36\x02\xf6\xc1\x86\xf5\xe8\x8f\x40\xda\xd8\x48\x1e\x45\x12\x48\x6b\x04\xc9\x25\xad\x95\x0d\xeb\x51\x2d\x81" + + "\xb4\xb4\x91\x3c\x3a\x26\x90\x16\x36\x92\xad\x6c\x02\x16\xeb\xf0\x51\x59\x21\xfd\x3e\x2a\x2a\xa4\xd7\x43\x43\xf9" + + "\xf7\xf1\x51\xdf\xec\xa4\x5a\x3b\x08\x32\x82\xaf\x2a\xd7\x97\x4a\x6c\xdc\xe8\x10\x33\x7d\x4d\xa6\x75\xbf\x0e\x99" + + "\x68\x90\xfa\xf8\xd0\x20\xb7\xc6\x62\xd1\x2c\x7f\xd0\xca\xf5\x71\xa0\x01\x6e\x34\x40\x5d\xf7\x35\xc0\xb5\x0e\x68" + + "\xb5\x72\xa5\x95\x2f\xdd\x8d\x5c\x6a\x80\x0b\x77\x1b\x17\x1a\xe0\xdc\x6a\xa3\x21\x78\x77\x1b\x75\xf9\xbb\x9b\x08" + + "\x3d\x28\xdd\x85\x42\xc0\x66\x1a\x98\xa7\x53\xa1\x0f\x85\x3b\x51\x36\xf8\x56\x83\xb6\xbb\x17\x78\x51\xb8\x1b\x65" + + "\x43\x6f\x34\x68\x4f\x47\x03\x3f\x4a\x73\xa4\x6c\xa0\x95\x06\xe4\xe9\x72\xe0\x49\xe1\xae\x94\x0d\xbd\xd0\xa0\xed" + + "\xce\x07\xbe\x14\xee\x4c\x21\x7d\xa0\x77\x81\xbf\x7e\xbd\xbf\xf8\xdc\x69\x40\x0d\xee\x94\xe6\x4f\x21\x50\x33\x08" + + "\xe5\x55\x95\xc1\xa1\x42\x3d\x2a\x1b\x7a\x0b\x81\x31\x45\x51\x2e\x15\xea\x53\xd9\xc0\x1b\x08\xec\x55\x13\xe5\x54" + + "\x41\xaf\xca\x86\x59\x41\x18\xaf\x92\x28\xb7\x0a\xf5\xab\x6c\xe0\x05\x04\xc6\x54\x44\x39\x56\xa8\x67\x85\x88\x5e" + + "\x93\xbc\xbf\x72\xad\x97\x10\xfd\xd0\x7d\x2b\xcc\xb9\x42\xc1\x67\x08\xb8\x47\x63\x74\xef\xca\xe7\x5e\x61\x68\x5b" + + "\x04\xcb\xd6\x21\xcd\xbf\xf2\x39\x58\x18\xd6\x06\xc1\xf2\x68\x95\xe6\x61\x21\x2e\x16\x06\xbc\x42\x80\x3d\x7a\xa6" + + "\xf9\x58\x3e\x27\x0b\xc3\x5a\x20\x58\xb6\xe6\x69\x5e\x96\xcf\xcd\x42\xfb\x12\xeb\xca\x31\xbe\xb0\xfe\x4f\xae\x0a" + + "\x1f\xdf\x23\x36\xf9\xe6\xe0\xa4\xd7\xd9\x62\x95\x7b\x9d\x2d\xc6\x6a\x90\xb3\xc5\x1a\x18\xe4\x6c\x0d\x6c\xe1\xce" + + "\x56\xdf\x82\x20\x67\xab\x6f\x75\x90\xb3\xd5\x4b\xca\xe7\x6c\xf5\x42\x0d\x72\xb6\xfa\x8e\x08\x72\xb6\xfa\xfe\xf3" + + "\x39\x5b\x7d\x57\x07\x39\x5b\xbd\x58\x43\x9c\xad\x73\x16\xe4\x6c\x29\xb0\x30\x67\x4b\x81\x87\x39\x5b\x12\xdc\xeb" + + "\x6c\x49\xa0\x30\x67\x4b\x42\x87\x39\x5b\x12\xda\xeb\x6c\x49\xa0\x30\x67\x4b\x42\x87\x39\x5b\x12\xda\xeb\x6c\x49" + + "\xa0\x30\x67\x4b\xf5\x41\x88\xb3\x25\x81\xfd\xce\x16\x83\x1a\x75\xb6\x14\x54\x90\xb3\xa5\xa0\x83\x9c\x2d\x09\xed" + + "\x73\xb6\x24\x4c\x90\xb3\x25\x81\x83\x9c\x2d\x09\xec\x73\xb6\x24\x4c\x90\xb3\x25\x81\x83\x9c\x2d\x09\xec\x73\xb6" + + "\x24\x4c\x90\xb3\xa5\x44\x1f\xe0\x6c\x49\x58\xaf\xb3\x75\xce\xae\x72\xb6\x00\xf8\x35\xce\x16\x40\xbb\xc6\xd9\x1a" + + "\xd0\x02\x9c\xad\x01\xf8\x1a\x67\x6b\xc0\xba\xc6\xd9\x1a\xb0\x02\x9c\xad\x01\xf8\x1a\x67\x6b\xc0\xba\xc6\xd9\x1a" + + "\xb0\x02\x9c\xad\x01\xf8\x1a\x67\x0b\xf4\x65\xb8\xb3\x35\x20\xdd\xe2\x6c\x19\xbb\xec\xf7\xd8\x94\x7e\xf3\xae\xb4" + + "\xd7\xdb\x62\x95\x7b\xbd\x2d\xc6\x6a\x90\xb7\xc5\x1a\x18\xe4\x6d\x0d\x6c\xe1\xde\x56\xdf\x82\x20\x6f\xab\x6f\x75" + + "\x90\xb7\xd5\x4b\xca\xe7\x6d\xf5\x42\x0d\xf2\xb6\xfa\x8e\x08\xf2\xb6\xfa\xfe\xf3\x79\x5b\x7d\x57\x07\x79\x5b\xbd" + + "\x58\x43\xbc\xad\xe2\x18\xe4\x6d\x29\xb0\x30\x6f\x4b\x81\x87\x79\x5b\x12\xdc\xeb\x6d\x49\xa0\x30\x6f\x4b\x42\x87" + + "\x79\x5b\x12\xda\xeb\x6d\x49\xa0\x30\x6f\x4b\x42\x87\x79\x5b\x12\xda\xeb\x6d\x49\xa0\x30\x6f\x4b\xf5\x41\x88\xb7" + + "\x25\x81\xfd\xde\x16\x83\x1a\xf5\xb6\x14\x54\x90\xb7\xa5\xa0\x83\xbc\x2d\x09\xed\xf3\xb6\x24\x4c\x90\xb7\x25\x81" + + "\x83\xbc\x2d\x09\xec\xf3\xb6\x24\x4c\x90\xb7\x25\x81\x83\xbc\x2d\x09\xec\xf3\xb6\x24\x4c\x90\xb7\xa5\x44\x1f\xe0" + + "\x6d\x49\x58\xaf\xb7\x55\x1c\xaf\xf2\xb6\x00\xf8\x35\xde\x16\x40\xbb\xc6\xdb\x1a\xd0\x02\xbc\xad\x01\xf8\x1a\x6f" + + "\x6b\xc0\xba\xc6\xdb\x1a\xb0\x02\xbc\xad\x01\xf8\x1a\x6f\x6b\xc0\xba\xc6\xdb\x1a\xb0\x02\xbc\xad\x01\xf8\x1a\x6f" + + "\x0b\xf4\x65\xb8\xb7\x35\x20\x8d\x79\x5b\x9d\x3a\x01\xea\x3d\x4d\x2a\x4f\x64\x13\x96\xa0\x8e\xc1\xcb\xf3\x5a\xec" + + "\x6e\xd3\x83\x7e\x86\x4b\x9e\x2d\x17\x9f\xc1\x35\x0c\xf3\xee\x02\x38\x49\xd5\x9d\x18\x5d\xe7\xdd\x60\xc5\xa9\x91" + + "\xe1\x04\x49\x7a\xe2\xbe\x65\xc5\xc9\x3c\x75\xfb\x2a\x7b\x7d\xea\x9a\xa7\x2e\x9b\x44\xd6\xb7\xd3\xf0\xed\x50\x55" + + "\x9d\x09\xa7\xbe\x9d\x78\x9a\x18\xfe\xf5\x44\x49\x66\x42\xaa\x6f\x27\x28\x32\x25\x17\xcf\x41\x66\x33\xc9\x4d\x57" + + "\xd5\x9e\x4c\x23\x59\x96\x19\xed\x33\x6a\x36\xc9\x71\xc9\x20\x97\x9b\xe6\x1e\xa2\xa2\xf7\x3f\x49\xe2\xbb\x43\xde" + + "\xc8\x1b\x40\xb0\xd9\x7e\x38\x28\xb4\xb4\x2a\x7a\x95\xab\xc7\x49\xfa\x01\xad\x8e\xd0\x8b\x9d\x64\xc7\x61\x4f\xe2" + + "\x1a\x09\x14\x7c\x82\xe8\xd2\xa7\x4e\x65\xac\x82\xa0\x1e\x71\x46\x53\xdf\xd8\x03\x89\xa6\x38\x5c\x9c\x56\x65\x46" + + "\xcb\x96\x66\x98\xf2\xa2\xa5\x40\x2a\xb0\xdc\x56\x69\xb4\xd4\x81\x6d\xab\x39\x5a\x6a\x28\xfc\xca\x18\x80\x31\x17" + + "\x92\x96\xfb\xc8\xab\xd1\x0a\x01\x6d\x3d\x52\x08\xd9\x1f\x8a\x91\xb6\x23\x85\x38\x2e\xd2\x72\xa4\xf0\x74\x43\x8b" + + "\xae\xa7\x2c\xc6\xab\xb4\x7b\x73\x53\xbc\x6d\xd7\xe4\x35\x90\xc7\xae\xec\x4e\x71\x75\x88\xbb\xd7\x9a\x7e\xa8\xb2" + + "\xec\xa3\x53\xed\xb6\xfd\x3f\x9d\x18\xbb\xac\x3c\x90\xf2\x5f\x90\x66\x97\x25\xb4\xc9\x25\xad\x8a\x1f\xd3\x82\xb4" + + "\xed\xef\x7f\xe8\xe7\x26\x7e\xc7\x12\xcb\x1e\xa4\xae\x88\x48\xb5\x2a\x2e\x67\x76\x99\x54\x2c\xb2\xc1\xad\x12\x4e" + + "\xb9\xcb\x34\xc2\x93\x48\x7c\x3e\xdd\x56\x1f\xe5\x77\x43\xec\xda\x8c\x09\x62\xca\xf3\x23\x61\x73\x87\x2a\x3a\x21" + + "\xd3\x4a\x26\x4a\xa1\xb1\x1a\xf4\x75\xaa\xb2\x2e\xe9\xd3\x0c\x56\x9b\x59\xa4\xd9\xbf\x41\xc7\x5d\x24\xb1\xda\x84" + + "\x9a\x81\xda\xec\xb9\x0d\x6b\xdd\xa0\xbb\x2e\x92\x43\x6d\xd2\x96\x8e\xa8\x0d\xaa\x76\x82\xc4\x4e\x7c\x1d\x46\x8a" + + "\x17\x0c\x8e\x64\x4c\x8d\x9f\x0c\xa6\x0d\xa0\xa1\x55\x1c\xdc\x49\x6d\x68\xe3\xc8\xd5\xfe\x87\xfe\x9f\x43\xad\x44" + + "\x26\x05\x54\xaf\x54\x19\xae\x58\xa2\xd8\xa1\x59\xb2\xd4\xd2\x1f\xac\x46\xab\xcc\xa5\x5c\x2e\xaa\x68\x8d\x52\x83" + + "\x40\x8d\x88\x7e\x61\xad\x04\x0a\xe6\xa2\x0a\x6a\x74\xab\x98\x96\xb9\x02\xd7\x1d\x2d\x95\x85\x47\xc7\x0c\xb8\x71" + + "\x25\x33\x18\x47\xb4\x4c\x23\xe9\x55\xb3\xa0\x7c\x1b\x59\x42\xb7\xe9\xda\xa1\x67\x79\x79\xa8\x50\x25\xe3\x05\xb8" + + "\x86\xf5\x65\x0e\xf5\x62\x45\x96\xfe\x58\xb5\xe8\x05\x2e\xad\x42\x89\xd9\xb5\x48\x8d\x91\xb5\x20\xca\x64\xb5\x06" + + "\x68\x12\x4a\x4c\xd6\xe2\xd1\x21\x98\x99\x04\xd7\x8d\x21\x55\x89\x47\x81\x20\xd0\xb8\xf6\x40\x66\x11\xd5\x19\x88" + + "\x79\xf5\x66\x3c\x87\x4a\xba\xa4\x8b\xc3\xc2\xa1\x34\x22\x3d\x0a\xaa\x37\xaa\x0c\x57\x1d\x51\xec\xd0\x1e\x59\x6a" + + "\xe9\x09\x56\xa3\x55\xe6\x52\x23\x17\x55\xb4\x46\xa9\x31\xa0\x46\x44\x9f\xb0\x56\x02\x95\x72\x51\x05\x35\x7a\xe6" + + "\x3f\x3d\x59\x16\xa6\x33\x5a\x7e\x1a\x8f\x6e\x19\x70\xe3\xea\x65\x30\x8e\x68\x98\x46\xd2\xab\x64\x61\x49\x74\xc8" + + "\x61\x9e\xa6\x0e\x3d\xe3\x09\x72\x50\x35\x93\x45\xb8\x96\xf1\x52\x87\x92\x89\x42\x4b\x8f\x90\xda\xcc\x22\x97\x86" + + "\x39\x48\x62\xb5\x49\x0d\x1a\x6a\x43\xd4\x0b\x69\x1d\xd0\x2e\x07\xc9\xa1\x36\x8f\x6e\xc1\x24\x44\xb8\xce\xc0\xac" + + "\x44\x1e\xd5\xd2\xc1\xc6\x35\x4b\x67\x1a\x51\x2c\x48\xd0\xab\x57\x41\x69\x93\xf6\x69\x6a\xa8\x15\xc8\xe8\xcb\xb0" + + "\xe0\x6d\xc4\x69\x32\xfb\x9d\x76\xc9\xf9\x05\xbb\x78\xcc\xdf\x6e\x8d\x48\x99\x45\x1f\x86\x40\xd3\x66\xbd\x51\xdb" + + "\x91\x68\x45\x66\x8c\xca\xca\xa3\xb4\x32\x72\xe7\xc4\xaf\x5a\xf6\x9c\xf8\xdc\xaa\xb4\x38\x32\x29\x43\xff\xad\x67" + + "\xf0\x94\xb3\x18\x1b\xbf\x90\xbd\x27\x2c\xa3\xb2\x73\xc1\xc9\x63\x82\x26\x8f\x4f\x20\xf6\x80\x64\x6d\xf1\x22\xa1" + + "\x0b\x70\x1f\xd4\x89\x6f\xb7\x3a\x01\x91\x35\xb9\x0f\x6a\x8c\x1c\xb2\x98\xf6\x41\x9d\x7a\x6a\xbc\xcb\xdc\xf9\x86" + + "\x1c\x64\xf4\x28\x06\xcc\xac\x1b\x86\x06\x45\x09\xc3\x4e\xde\x16\xa2\xc1\x8e\x5b\xb0\x07\xb9\xbf\x09\xfb\xa6\xba" + + "\x87\x4e\x7a\x13\xb6\x56\x37\xec\x04\x3d\xd2\x7d\x65\x4f\x80\x8c\x47\xd7\x77\xc4\xf5\xc8\xa0\x1f\xde\x80\x7c\x4b" + + "\xcd\xa0\x17\xde\x80\x0c\x6b\xd6\xfa\x40\xec\x91\x5e\xdf\x09\x80\xa0\x98\x2c\x6f\x45\xf6\x1b\x0b\x5b\x8e\xb7\xd5" + + "\x8c\x21\x9f\x34\x51\x18\xc6\x95\xcd\x30\x87\x9c\x16\x59\x4b\x3b\x35\x33\x89\x39\x23\x71\x67\xfc\x4e\xb0\x04\xde" + + "\x05\x3d\xd2\x92\x4b\xde\x4e\xb2\x62\xcc\x43\x18\x59\x5f\x5a\xda\xf9\x0c\xd9\xa9\xb0\xb3\x95\xe8\x39\x6e\xf4\xac" + + "\xe8\x58\xea\xc1\x55\xff\x4f\xb2\x4f\xf6\xf4\xfa\xb4\xf6\x06\xeb\x2b\x24\x7b\xee\x90\x13\x8f\x3d\xd1\xf0\x63\xf7" + + "\x5a\xd3\x1f\x5a\x4a\x9a\xf4\xc4\x63\x82\xbf\xee\x8b\x18\xa0\x52\xf6\xee\xf4\xbe\x7a\xf9\x49\xbc\x16\xc1\xbf\x36" + + "\x24\xcb\x2b\xce\x89\x4a\xde\xc8\xf2\xf7\xc0\xbe\x51\x3b\x3d\x7f\xd9\x5a\xfd\xc0\xb3\x34\xd9\xd5\x1d\x72\x99\xc9" + + "\x4e\xd7\x07\x1b\xb2\xe9\xdd\x2a\x0c\xf4\x11\x4d\x65\xc0\xdf\xb8\xf8\xf1\x7c\x29\xba\xbc\x66\xa9\xf3\xc4\x97\x5e" + + "\x59\x38\x19\xe4\xa9\x03\x93\x33\xf9\x2c\x05\x26\x20\xa4\x8c\x8b\x89\x17\x08\x27\xf7\x57\x7f\x85\xa2\xba\x74\xf5" + + "\xa5\x73\xc8\x45\xdb\xf8\xdc\xd8\x59\x8a\xc2\x9f\x19\x59\xad\x54\xc8\xf3\x50\x35\xe7\x38\xad\xca\xae\xa9\x5c\x99" + + "\xef\x1c\x0f\x3b\x2c\x96\xc6\x1b\x01\xeb\xfa\x85\xa5\xa8\x7e\x13\x5f\xae\x5c\x48\x56\x96\xab\xfc\x4c\x8e\x14\x66" + + "\x81\x0a\x4f\x91\x34\x96\xff\xaa\xa7\xd1\xff\x7f\x23\x9f\x55\xb2\x71\x67\xc0\x1a\x41\xc1\xde\xa1\x10\x7c\xb1\x16" + + "\xc2\x37\x24\xa2\xe9\x6c\xd5\x4e\x22\x9b\xc1\xde\xac\x9b\x70\x8f\xf6\xcb\x15\x23\x74\x07\x7a\xfa\xc3\x15\xef\xde" + + "\x49\x7a\x6f\x26\xc6\x0a\x31\x05\x03\xaf\x38\x40\xc2\x2c\xaf\x31\x39\xd0\xad\x36\x96\x9c\x89\xbf\x02\x64\x3e\x61" + + "\xa9\xbc\x58\xca\xf5\x77\xef\x58\xf9\x2c\x99\x4f\xa2\xd9\x66\x35\x89\xe6\x8b\xc5\x24\x9a\xae\x6f\xe9\xca\x10\xb2" + + "\x68\xbb\x77\xcc\xa0\xd7\x05\x49\xe9\xa9\x2a\x32\x23\x03\xf3\x76\xcb\x5b\x5e\x93\x34\xef\x5e\x77\xd1\x0c\xa5\xd1" + + "\x2f\xc3\x98\x79\xf2\xd1\x71\xd4\x2e\xa4\x78\x13\xfa\x8f\x59\xce\x9e\xe0\xc8\x7e\x9a\x44\x7a\x41\x43\x49\x56\x95" + + "\xc5\xeb\x4f\x93\x48\xfa\x14\x03\xb0\x0e\xeb\x8e\x12\x88\x14\x91\xfe\xc6\x43\x1e\xc6\xaa\xe2\x6d\x12\xa9\x54\xcb" + + "\xaa\x8b\x49\x51\x54\x5f\xa9\xdc\x04\x95\xef\x24\xd9\x38\xfe\x29\x04\x9b\xc0\x49\x5d\x53\xd2\x90\x32\xd5\xd3\xfb" + + "\x22\x4b\x78\x89\xd1\xbb\x5b\x19\x7d\xce\x53\x1a\xd7\xf9\x0b\x2d\x62\xf6\xf8\xd1\x2e\xe1\x6b\x7a\x50\x5d\x46\x3a" + + "\xaa\x4f\xdb\x5d\x7e\x36\xbe\xf4\x30\xfd\xd7\xb8\xa8\x52\x52\xe8\x65\xe7\xaa\xec\x4e\x3f\xa9\x35\xa6\x66\x7c\x17" + + "\x4b\x99\x16\xec\xdd\x94\xab\x04\x3b\xe3\x10\xb7\x67\x93\x7a\xdf\xe5\x6e\x08\xce\x11\x33\x1d\x7e\x32\x1a\x93\x1e" + + "\x58\xce\x34\xa3\x68\x32\x22\xb0\xda\xb3\x2d\x13\xbc\xc8\xa8\x77\x00\x32\xa8\xf3\x3a\x55\x71\x84\x88\x2b\xc1\xc5" + + "\x55\x1c\xc7\xc4\xa5\x43\x38\xc4\x65\x93\x71\x8b\x4b\x87\x1d\x17\x57\x71\x74\x8a\xcb\x28\xc2\xc5\x55\x1c\xbd\xe2" + + "\x2a\x8e\x88\xb8\x96\x6b\x3d\xe9\x1c\x1b\x67\x8c\x7d\xe0\x72\x6a\x01\x29\x95\x84\x42\x78\x63\x93\x68\xca\x9c\x2f" + + "\x63\x03\x1d\xa6\xf7\xc2\x9e\xbf\xba\xea\xa5\x12\x59\x57\xc4\x96\x01\xaa\xc6\x61\x51\x00\x43\x76\x72\x81\xa2\xa7" + + "\x0a\x73\xbc\xfc\x92\x58\x0b\x02\xf1\xee\x8c\xe3\x01\x21\xc5\x09\xee\xb8\xab\x72\x99\x7f\x1c\x05\xeb\x75\x93\xb7" + + "\xc0\xf2\x60\x65\xdb\x10\x7c\xb0\x12\xc0\x1f\x87\x82\x42\x5d\xaa\xc5\x80\x9e\xb7\x6f\x8e\x48\xf5\x93\xd5\x97\x9f" + + "\x40\x97\x42\xaa\x31\xd2\xff\x82\x53\x93\xf1\x00\x6d\x70\xe5\x4e\xbf\xad\xc3\xf0\x07\xdf\x02\xba\x52\x70\xfc\x69" + + "\xa4\x45\x9f\xec\xf6\xb9\xf2\xb6\xcb\x63\xba\xe0\xbd\x3a\x6b\x16\xc4\xf5\xc7\x0f\x28\x54\x44\x9f\x7b\x14\xf6\x54" + + "\xe2\xe0\x8b\x26\x38\x2b\x5b\x34\x07\x5c\x9d\x38\x2f\x05\xdc\xf8\xa7\x6b\x53\x84\x80\x25\x4d\x7a\xe0\x3b\xe6\x20" + + "\x98\x1d\xd1\xf7\x38\x02\x66\xf5\x47\x00\x63\xaa\x66\xdd\x94\x58\x9f\x7d\x6c\x09\x18\x1f\x57\xc0\x34\x79\x98\x82" + + "\x4e\x4d\xcc\x4f\x1c\x59\xd6\xcc\x58\xb8\x69\xeb\x49\xf3\x20\xed\x06\x1f\x31\x9e\xea\xc0\xf4\xe2\x29\x16\x13\xad" + + "\x91\x92\x31\x41\x92\x8e\xcb\xaa\x34\x3c\x38\x35\x3f\x1a\xe7\xfd\xd0\x0c\xbe\x73\x74\x0d\xba\xc2\xf3\x23\x6b\x51" + + "\x07\x7f\xc5\x88\xa3\x80\x46\x2c\x80\x8f\xa2\x1c\x50\x94\x30\xcc\xf7\x35\xcc\x9c\x3d\x94\xdb\x61\xfd\x2d\xa4\x70" + + "\x2d\x2f\xc1\x82\xf1\x10\x06\xb2\xf2\x40\x89\xa5\xc5\x95\x02\x84\x83\xc3\xe4\x5d\x1b\x2c\xf3\xb7\xc9\x56\x57\x5f" + + "\xe1\x30\x41\x57\xe9\xd1\x7a\x72\x41\x7b\x92\x6b\x78\x3d\x0c\xa1\x2e\x8e\xe0\x23\xfd\xb7\xc6\xb5\xd8\x51\x3f\xe2" + + "\xbf\xf9\xb4\xb8\x1f\xdb\x86\x16\x1b\x84\x1d\x9d\x50\x1c\x3d\x9a\xf3\x1b\x0a\xe3\x5a\x96\x82\xe5\xe3\x21\x8c\x2b" + + "\xb3\x09\x15\xa6\xcc\x26\x16\xa6\xcc\x92\x77\x4d\x99\x1f\xee\x22\x62\xc9\xd1\x89\xb4\xf1\x81\xd2\xac\x5f\xd5\x3b" + + "\xbc\x33\x14\xd4\x16\xb8\x31\x0f\x2c\xe7\x53\xe0\x16\x6a\x2d\x75\xd4\x07\x9d\xd6\xc1\x79\x82\xd3\xca\xcf\x71\x5e" + + "\x66\xf4\x65\x17\xcd\xf1\xf5\x83\xbc\xfe\xb9\xd4\x1f\x42\x5d\x60\xd1\x4b\xf9\xd1\x7e\xfe\x8d\x49\x97\x3b\x85\x31" + + "\x7d\xa6\x65\xd7\xea\x07\x7a\xe5\x68\xf9\xe4\x69\x95\xbc\xb1\xba\xd6\x39\x19\x53\x46\x35\x9f\x04\xd0\x96\x96\x2e" + + "\xd4\x6a\xb3\xfe\x93\x2f\x74\x41\xdf\x1e\xfd\x3e\x78\xbb\x7a\xb1\x60\x48\xf9\x3a\x7a\xf1\x89\x16\x35\xf7\xdc\x4d" + + "\x44\xe6\xff\xa0\x1f\x81\x3b\x07\x4b\xed\xd5\x1d\x56\x28\xfd\x3c\x94\x1f\xe8\x74\x19\xf8\x9a\x93\x08\xbc\x32\xec" + + "\xd1\x39\x9d\x67\x4b\xef\x8d\x28\x28\x47\xfd\x6d\xc3\xd3\xa3\x8c\xba\x83\xb6\xfc\xc1\xbc\x37\x87\x69\xd7\xf5\x4b" + + "\xf4\xdd\x7a\xb3\x9f\xad\x1f\x6e\x8e\xc9\x02\x1a\x68\x83\x60\x10\x85\x64\x99\xb8\x4a\x66\xcb\xdd\x79\x7e\xf7\xd1" + + "\xd5\x5b\xa3\xf2\xd3\x07\xa0\x1b\x59\x3e\x1c\x67\x0e\x2f\xeb\xbb\x3e\xbc\x86\x62\x74\x78\xa9\x62\x6b\x78\xa9\x12" + + "\x38\xbc\xf4\x8f\xe6\xf0\x12\xa5\xf8\xf0\x32\x0b\xf1\xe1\x25\xa1\xec\xe1\xa5\x95\xb8\x87\x97\xf6\x5e\xa2\xce\xf3" + + "\xd8\xf0\xe2\xa8\x7f\xbf\xe1\x85\x32\xea\xdb\x13\x59\xcd\xee\x35\xbc\xd2\x84\xcc\xd6\xfb\xb7\x0d\x2f\x4e\x03\x6d" + + "\x90\x7f\x78\x0d\x72\x77\x9e\x40\x45\x86\x57\x60\x47\xe3\xc3\xcb\x46\xa6\x4d\x53\x35\xd6\xe0\x32\xbe\xea\x43\x4b" + + "\x16\xa2\x03\x4b\x14\x5a\xc3\x4a\x7c\x87\x83\x0a\x7e\x32\x87\x14\x2b\xc3\x07\x94\x5e\xa4\x0f\x27\x08\x01\x87\x92" + + "\x4e\x76\x64\x28\x69\xcf\x84\x42\x4e\xc7\x06\x12\x47\xfc\xfb\x0d\x24\x84\x4d\xf7\x30\xe2\xef\x9b\xde\x69\x18\xd1" + + "\x87\xe5\xc3\xe2\x8d\xc3\x88\xd1\x40\x9a\xe3\x1f\x44\x83\xcc\x9d\x47\x6d\x91\x41\x14\xd4\xc5\xf8\x10\xb2\x51\x15" + + "\x18\x57\xa5\xff\xed\x21\xc2\x2f\xa1\xae\x74\x07\x52\xc7\x97\x8f\xfc\x8f\xd3\x51\x31\xa0\x61\xb0\x39\x8e\x2a\xc0" + + "\xf0\xe9\xca\xb9\x07\x00\x8f\x1c\x6c\x16\xfd\xbf\xc0\xe4\xd6\x8c\x4f\x31\x9c\xcc\x7d\x0d\x77\x10\x1a\x8d\x37\x3b" + + "\x82\xcb\x72\x9f\xc9\xae\x09\x0e\x47\x4f\x5d\xc2\xc1\x97\x4f\xf3\xdc\x5a\x0d\x5c\x51\xe2\xb5\xa1\x24\x80\x0a\xe3" + + "\xa8\xec\x04\xdb\xb5\x8c\x41\xaa\xc6\x9a\xda\x03\x68\x0d\x27\xbe\xf5\x16\x86\xb0\xef\x4a\xed\x3c\x35\xcc\xa7\xe1" + + "\xa2\xf0\x84\x74\x14\x92\x84\x49\x43\xd7\xe6\x16\xfc\x58\xf4\xb5\xd2\x02\x33\x9c\xf6\x7d\xd8\x7f\x19\x57\xd5\x61" + + "\x09\x7d\x37\x76\xd4\xc4\x85\x30\x05\x5a\x6f\x45\x7f\x7d\x24\x1d\x3b\x66\x48\x0d\xd6\x06\x84\xda\x19\xc7\x77\x94" + + "\xd0\xc4\x15\x06\x1b\xee\x98\x86\x6e\xc3\x94\x11\x33\xf6\x44\xc1\x4b\xb2\x56\xa7\x61\x65\xd0\x75\xb0\x80\xa4\xbf" + + "\x81\x17\x60\x6f\x17\xc3\xb0\xff\xd8\x73\xc1\xc9\x4d\x8c\x83\x1d\x3f\xb8\x99\xba\x31\x42\x3b\x10\x05\xdf\x2c\x0e" + + "\x7e\x38\x2c\xc8\x80\x6b\xec\xdb\xe3\x0f\x93\x0f\x3e\x0a\xac\xb7\x50\xbd\x5d\x1c\xaa\x2e\xe0\x79\xaa\x5b\x5b\x65" + + "\x84\x0a\xc7\x1a\x39\x5b\x4e\x17\x8b\xd1\x17\xe7\x42\x6b\x6c\xcf\xe3\x35\x1a\x47\x04\xa4\xb5\x1d\xdb\xc7\xd5\xcf" + + "\x18\x3a\xb7\x71\xf5\x73\x87\xd8\xce\xae\xe7\x2c\x22\x1e\xd3\x43\xee\x68\xf8\x77\x88\xe3\x73\x1b\x77\xd5\x25\x3d" + + "\xc5\x24\xe5\xe6\xe5\x4c\xca\xbc\xbe\xf4\x26\xa6\x2a\x79\x98\xd2\x57\x6a\xec\x30\x43\xf7\xf5\xd2\xd2\x26\xe6\xa1" + + "\xe7\xe1\xfc\x23\x3b\x60\xe6\x28\x69\xf1\x02\xf4\xe3\x35\x27\x2c\xfd\xaf\x3e\x0e\x6f\x51\xf6\xfd\x2b\x6e\xa9\x4f" + + "\xc5\x39\x5b\xf0\x69\x07\x3f\x81\xdf\x3b\x0d\xa3\xd7\xba\xe1\x23\xc4\x01\x9e\xff\xaf\x7e\x3e\xd7\xe2\x11\xfe\x1e" + + "\x2e\x89\x19\xa7\xd3\x99\x4a\x65\x34\xad\xd8\x61\xaf\x52\x8f\x08\x0f\x82\xd0\x9a\x6d\x5e\x36\x33\x3a\x23\xfc\x94" + + "\xe4\xa2\x7e\x61\xcd\x36\x16\x25\x33\xcf\x73\xae\x1e\x14\xc8\x35\xd8\x89\xdf\x77\xe5\xd8\x11\x3d\x39\xc6\xb1\xe8" + + "\xf8\x23\xbe\xa9\xcd\x46\x6f\x5e\x74\xbd\xd6\x91\xa2\x3e\x91\x0f\xe2\x94\x60\xf4\x43\xb4\xd6\x0f\xd6\x86\x3c\x0c" + + "\xab\x1d\x33\x9c\xae\x57\xa0\x2d\x71\x46\x0f\xe4\x52\x74\x58\xef\x79\x4e\x23\xeb\x6b\x2d\x70\x09\x10\x90\xd4\x3a" + + "\x57\x7d\x04\x7a\x23\xbf\xed\x40\x92\x0e\xf8\x19\x03\xe5\x17\x17\xa3\x69\x55\xd3\xf2\x69\x9a\x35\x55\x9d\x55\x5f" + + "\xfb\xf9\xfb\x78\x2c\x28\x84\x54\x8f\x51\x8f\x35\x89\xae\xfb\x7f\xd8\x0a\x32\xeb\xff\x85\x36\x6c\xa7\x3e\x86\xb2" + + "\x86\xeb\x38\x56\x9f\xae\x6f\xd6\x67\x5c\xd0\xaa\x54\x33\x23\x56\xf1\xce\x8b\x8c\xf5\xc1\x50\x38\xdc\x22\x05\xc5" + + "\xda\xa9\x59\xf4\x3b\xca\x2f\x28\x46\x19\x1e\xca\x51\x8e\x41\xf1\x18\xba\x50\x21\xc7\x50\x95\x08\xa3\x00\x20\xb5" + + "\xcc\x18\xa4\x10\xe2\x08\xd8\x2e\x98\xe0\x2e\x90\x20\x6b\xa9\xe7\x9a\xf2\x15\x83\x39\x9a\xee\x49\x76\xa4\x9a\x99" + + "\xf0\x3e\xc0\x0d\x69\xd4\x4d\x7e\x26\xcd\x6b\x30\xf2\x86\xec\x37\x08\x67\x73\xba\xce\xc8\x12\x21\xac\x2b\x94\xfc" + + "\x08\x55\x57\x7c\x33\x2d\x8d\xfc\x8c\x81\x8e\x5b\x1a\x01\x69\x58\x1a\x77\xc3\xe6\x0f\xeb\x64\x9b\x60\x0d\x4b\x96" + + "\xd9\x26\xb8\x61\x21\x96\x46\x67\x6d\xdc\xd2\xc8\xfa\x0c\x4b\x63\x7e\xc6\x05\xed\xb0\x34\x66\xf1\xce\x8b\x8c\xf5" + + "\x81\xcb\xd2\x88\x62\xcb\xd2\x58\xdf\x51\x7e\x9d\x96\xc6\x2a\x47\x39\x76\x5a\x1a\xbb\x7c\xc4\xd2\x08\x84\x51\x80" + + "\x00\x4b\x63\xe8\xfc\x08\x58\x80\xa5\x31\x46\xc6\x18\xd8\x88\xa5\xb9\x7e\x48\x63\xf6\x06\x50\xf1\x66\xef\xeb\xc9" + + "\xc8\x0d\xc9\xb0\x91\xb9\x4a\xf7\x0f\xab\x14\xe1\x6f\x99\x12\xba\x4c\x11\xc2\xba\x66\xc9\x8f\x50\x87\x65\xd6\x20" + + "\xc3\xe4\xc8\xcf\x18\xe8\xb8\xc9\xd1\x73\x2e\x8d\x37\x6c\xb9\xdc\x66\xcb\x25\xb6\x85\xbb\x7d\x58\x2e\xb6\xa1\x0d" + + "\x0b\x31\x39\xce\x74\x50\x0e\x93\x23\xeb\x33\x4c\x8e\xf9\x19\x17\xb4\xc3\xe4\x98\xc5\x3b\x2f\x32\xd6\x07\x2e\x93" + + "\x23\x8a\x2d\x93\x63\x7d\x47\xf9\x75\x9a\x1c\xab\x1c\xe5\xd8\x69\x72\xec\xf2\x11\x93\xa3\xd2\x62\x8d\x00\x04\x98" + + "\x1c\x43\xe7\x47\xc0\x02\x4c\x8e\x31\x32\xc6\xc0\x46\x4c\xce\xf5\x43\x1a\x33\x39\x80\xca\xa8\xc9\xc9\xcb\x43\x15" + + "\x6a\x6f\xf6\x69\x82\xee\x5a\x2d\xd7\xfb\x87\x8c\x98\x54\x75\x9d\x62\x5f\xa0\xea\xb2\x3c\x53\x16\x88\xa1\x2a\x20" + + "\x67\x95\x6f\x14\x5f\xd1\x88\xc5\x6c\x9f\x64\x2b\xcc\xa8\xaf\xb7\x64\x9f\x8e\x37\x22\xc4\xaa\x28\x7e\xc6\x0d\x0a" + + "\xab\xc4\xb0\x26\xda\x37\x44\x8c\x0e\x3b\xa2\x95\xd9\xa2\xc5\x2d\x88\x5e\xa2\x9b\x8f\xbe\xcc\xb2\x1d\xfa\x47\x9b" + + "\x3b\xa7\xd5\xd0\x0b\x6d\xfe\x2c\x7b\x81\x16\x29\x0e\x5d\x23\x8d\x67\x41\xf3\x95\x06\x98\x09\xa8\xad\x3e\x98\x00" + + "\x03\x01\xb4\xda\x4f\x6a\xcc\x34\x5c\x37\xfa\x50\xbb\x30\x90\x18\xb5\x0b\xf2\xf0\x46\xd8\xa8\x3a\x24\x24\x5b\x62" + + "\xcc\x51\x4a\xe6\x8b\x35\x42\x58\x57\x1c\xf9\x11\x76\xbc\xcc\x11\x66\xb8\x22\xf2\x33\x06\x3a\x6e\x29\xf4\x0c\x6b" + + "\xe3\x0d\xa3\xe9\x76\x33\xc3\x16\x9c\xd9\xea\x61\x35\x9b\x87\x36\x2c\xc4\x68\x38\x93\xbf\x39\x2c\x87\xac\xcf\x30" + + "\x1e\xe6\x67\x5c\xd0\x0e\x13\x62\x16\xef\xbc\xc8\x58\x1f\xb8\x6c\x89\x28\xb6\xcc\x89\xf5\x1d\xe5\xd7\x69\x54\xac" + + "\x72\x94\x63\xa7\x2b\x62\x97\x8f\xb8\x22\x2a\x09\xde\x08\x40\x80\x8d\x31\x74\x7e\x04\x2c\xc0\xd2\x18\x23\x63\x0c" + + "\x6c\x2c\xce\x72\xf5\x90\x46\xa3\x2d\x03\x95\x51\x93\xc3\x93\xb7\x05\x5a\x9c\x6c\xbb\x5a\x2c\xd1\x81\xb9\x5c\x1c" + + "\x16\xc4\xa6\x6b\xc4\xef\xf8\x37\x2d\x50\xc8\x73\xc7\x21\x60\x66\x70\x0e\x66\xa3\xf3\x46\x4e\xaf\x69\x50\xba\x5d" + + "\x24\x73\xcc\xf5\x23\xe9\x7c\x3b\x5f\x85\x35\x28\x28\x9e\xeb\xc8\x03\xe8\x0a\xe7\xf2\xca\xcc\x68\xae\xfe\x15\x15" + + "\xae\x2b\x96\xab\x97\x62\x02\x77\x44\x72\x8d\x32\x23\x90\xcb\x4a\xed\x38\xae\xf1\x19\xe3\xd4\x1d\xc5\x35\x8a\x31" + + "\x5e\x1d\x6e\x8b\x55\x38\xea\xb8\xc8\x2c\x88\xfe\xf2\x90\x00\xae\xa6\xdb\x7e\xa8\x90\xf0\x2d\x1c\x03\x63\xe4\x46" + + "\x8c\xca\xd5\xa3\x16\xb3\x29\x80\xc8\xa8\x4d\x29\xf2\x92\x6f\xd3\xa3\x37\xbc\x5d\x81\x1e\xb9\x27\x9a\x98\xa4\x44" + + "\xe7\xf6\x3f\x75\x45\xea\xbf\xec\xac\x2f\x40\x1b\x3d\x02\x56\x3c\x7a\x9f\x56\xb9\x76\xfb\xcc\xc3\xba\xcd\xa8\xa6" + + "\xba\xec\x03\x48\xa1\xa9\xf5\x94\xfd\xd8\x4b\x10\x11\xb5\xca\x5a\xac\xe6\x9b\x14\xdd\x65\xbd\x94\x19\x6d\x8a\xdc" + + "\xda\xd7\x1e\xaf\xd8\x31\x04\x8d\xa2\x91\x99\x1d\xb4\x60\xa4\xaf\x90\x66\xc1\x17\x6b\x3c\x3b\xc7\xea\x90\xc7\x53" + + "\xff\x97\x64\xf3\x08\xcf\xf9\xfc\x2a\xf7\xe8\x40\xdd\xed\x19\xd6\xad\xdf\xeb\xbd\xef\x4d\x54\x50\xe9\x4b\x0b\x2b" + + "\x7d\x69\x8d\x06\xf3\xfd\xeb\xbb\xd5\xe9\x3b\x71\x6a\x27\x2b\x1b\x50\x3e\x19\xd8\xc6\xe9\x54\x3b\xc7\xcc\xfe\xd2" + + "\x75\x55\xf9\xd3\x80\xa6\xdf\xab\xa7\x2d\xed\x5c\x85\xed\x65\x7f\xce\x61\xa9\xb0\x99\x08\x7f\x07\x92\x71\xfb\xa7" + + "\x36\xc3\xb5\x43\x04\x30\xfd\x93\xdc\x6f\x9f\xce\x56\x6d\xd4\x0b\x8e\x67\x7d\x35\x32\x4e\x39\xa0\x46\x40\x20\x3b" + + "\xd3\xbc\xd4\x39\x52\x59\x80\xd2\xaa\x28\x48\xdd\x52\x5d\xfc\x70\x18\x48\x08\x49\x03\xcd\x3d\xd7\x35\x6e\x38\x91" + + "\x67\xb1\xfa\x2a\x61\xf7\x55\xf6\x1a\x00\xce\x75\xd1\x60\x43\x2e\x71\xf1\x63\x85\x52\xed\x98\xc0\x65\x9e\x5d\x98" + + "\x80\xd7\xee\x84\xb8\xcb\xcf\x79\x79\x8c\x0f\x97\x52\x1c\x15\xa2\xa4\xa5\x56\x2f\xb8\xc1\x82\x48\xd9\xd5\x66\x17" + + "\x69\x73\xa6\x0b\x24\xcf\x18\x52\xee\x47\xb6\x6b\xa8\x9b\xaa\xa6\x4d\xdf\xdb\x5c\x2c\x93\xe8\x39\x6f\xf3\x7d\x5e" + + "\xe4\xdd\xab\x5d\xdf\x18\x74\x20\xa8\xea\x2e\xd2\xd0\xce\x7f\xe8\x0c\xa6\xc5\xd4\x3a\x4e\x7f\x6c\x8d\x5b\x15\xf7" + + "\x49\x30\xf8\x2c\xd3\xb2\x7e\x89\x32\xd2\x9e\xf8\xd9\x16\x3d\x5d\xe9\x72\xe4\x5c\x95\x78\x47\x0e\x83\x92\x8d\x92" + + "\xde\xf9\x24\x62\x3f\xc5\x21\x4a\xf7\xad\x5c\xc3\x9b\xc7\x4e\x52\x25\x16\xec\x99\x96\x97\xb1\xdb\xb7\x32\x57\xa0" + + "\x38\x3e\xfb\x08\xef\xdf\xce\x12\xee\x2c\x69\x83\xf9\x71\x78\xff\xa6\xc7\x79\xd4\x33\x93\xce\xd6\x58\x86\x03\x2d" + + "\x43\xe9\x7c\xc8\x60\x89\x9c\x01\x34\xdf\x76\xe3\xf3\x40\xdb\xc9\x14\xd7\xc8\xe9\x37\x63\x81\xa5\x3c\x25\x00\x51" + + "\xe4\xf5\x2e\x1a\x32\x66\xbc\x98\x14\xd0\xf2\x91\x3c\x85\xb0\xc4\x3c\x7f\x25\x4f\x6c\x85\xe6\x33\x4c\xd4\x71\x49" + + "\x8b\x14\x72\x07\xc7\x0f\x8d\xaa\xc1\x94\xbd\x4c\xca\xf4\x17\x1e\x5d\x4d\x86\xae\x87\x17\xd8\x75\x0d\x9a\x66\xf9" + + "\x73\x2e\x53\xd0\xa9\xe9\x18\x9e\xec\xdc\x45\x5b\xd9\xcb\x98\xa9\xc4\x82\x6b\x30\xbf\xab\x5e\xdf\x53\x91\x3f\x11" + + "\x7f\x62\x4d\x36\xef\xab\x24\x41\x69\x41\x49\xc3\x1e\xac\x3b\xdd\x70\x8a\xd4\x38\x70\x85\xa6\xf8\x76\x71\xa9\x7c" + + "\x4e\xa4\x08\x71\x80\xd7\xfd\x3f\xa7\xb3\xe8\xd2\x6a\xed\xdd\x23\xbd\x22\xf9\xda\x12\xb1\x58\x50\x25\x0e\x16\x87" + + "\x72\xb8\x6c\x33\x46\xd2\x35\x6c\x0e\x0b\xa9\x11\x83\xf4\xa4\x56\xf1\x18\xdb\x43\x19\x88\xbc\xb8\x61\x50\x77\x7c" + + "\xb4\x5a\x97\x4c\x50\xc2\x4e\x21\x38\x8e\x41\x8e\xae\xe4\xdc\x47\x45\xe5\x09\xca\xba\xa9\x8e\x79\xb6\xfb\x2f\xff" + + "\xf3\x8f\x7d\xf9\x9f\x7b\xf4\x43\xd5\x9c\xa7\x7f\xca\xd3\xa6\x6a\xab\x43\x37\x3d\xf6\x36\x85\x96\xdd\x07\x5a\x32" + + "\x8e\x7f\x38\x90\xa2\xa5\x6a\xe8\x1b\x11\x20\x35\x0f\xa0\x0e\x17\x87\x26\x21\x93\xc9\x6d\x06\x84\xcd\x87\x10\x49" + + "\x5e\x79\x32\xf2\x06\x29\xa4\x13\x25\xd2\xdc\x04\x9a\x80\xf1\xc5\x03\x36\xe4\xc5\xd2\x2d\x64\xc8\xf7\x9d\xd6\xff" + + "\x61\x4c\xa7\x87\xfc\x85\xf7\x3a\x9e\xc9\x42\x3b\xf0\x8e\xcd\xb0\xdb\xad\x6a\xfd\x60\xa0\xb1\x9e\x1b\x17\xf7\xa5" + + "\x8e\xb8\xab\x34\x89\xa6\x25\x79\xde\x93\x26\x66\xdc\x89\x53\xf7\x83\xb2\x47\xc0\xa3\x4a\xab\xb2\xa3\x65\xb7\x8b" + + "\xde\xbf\x37\x1d\x20\x2c\x41\xb7\x72\x69\xcc\x8a\x35\x86\xc7\x19\xb0\xdb\xc7\xaa\x94\x7a\x31\xdc\x00\xc4\xdf\x6a" + + "\x0d\xbe\x6e\x21\xd8\xe0\x5a\x8b\xd4\xaa\x89\x15\x79\x8f\xd9\x83\x3f\x28\xb5\xa9\xd5\xef\xec\x27\x74\x87\xf5\xb0" + + "\x58\x07\xf3\xb5\xb1\xf4\x44\x6f\xc9\x97\xe7\xba\xd7\x65\xae\xbf\x25\x1c\x5c\x85\x8b\x3b\x70\xc3\x39\x6f\xac\x66" + + "\xe0\xe3\x8d\x50\xd5\xc3\x61\x08\x80\xb9\x8f\x87\x81\xc0\xe8\x0d\x56\xae\x47\x7c\x87\x16\x20\x95\x6b\x75\x5a\xdf" + + "\xf5\x30\x2f\x28\x18\x4c\xfe\x90\x80\xc6\x6a\x39\x23\xf7\xc9\x94\xe5\xf0\xd5\xee\x65\xf0\x93\xe3\x69\x55\x9b\xa5" + + "\xf6\x8d\x2a\x79\x75\x4a\x0f\x74\x74\x55\x55\xec\x49\x83\x00\xae\x70\x40\x8b\x39\x55\x60\xde\x04\x75\x74\xbc\x80" + + "\x87\x7a\x04\x3f\x61\xb4\x9f\x2c\xda\xfa\xab\xdc\x48\xbc\x88\x77\x45\x59\x75\xd1\x07\xed\xe1\x8e\x8f\xe2\x1b\x78" + + "\x47\x42\x7c\x32\x97\x46\xdf\x7e\xf3\xee\xe3\x2f\x23\xf1\x5c\xa8\x0e\xc6\xeb\x20\xe6\x6d\xc2\x31\xa4\x60\xbe\x22" + + "\xc8\x55\x57\xd5\xdc\xaa\x0c\xfc\x59\xe6\xd6\x04\x70\xf0\x32\xd4\x8c\x89\x4d\xd7\x7f\x73\x15\x59\x56\xdd\xb7\xdf" + + "\xbc\x33\x50\x0c\x36\x7b\x49\xf8\xb8\xd4\xcb\x71\x26\xc7\xb5\xcb\x84\x0d\x54\x81\xc1\x88\x85\x75\xb7\x20\xee\xef" + + "\x3f\x53\xae\x88\xb1\x08\xa4\x63\xaa\xc0\xaf\xa2\x01\x82\x17\xbf\x1e\xe0\xca\x7e\xbf\x6e\x8e\x2c\xdd\xb2\xed\x2f" + + "\x73\x34\x2d\x40\x87\xdf\xa9\xb7\xf1\x13\x8a\x65\xe4\x22\x7b\xc0\x52\xff\x3e\xb8\x8c\x0c\x4b\xed\x15\x40\x75\x36" + + "\xc7\xc8\xce\xe6\x08\x5d\x4f\x03\xff\x2e\xf7\xbe\x7c\x5c\xe9\xdb\x4f\x37\xee\x2e\x41\x57\xd2\x6d\x38\xd9\xc5\x56" + + "\x05\x27\xd4\x4a\xc4\x8b\x56\xa2\x21\x88\xc6\xc9\xa0\x9e\xe9\x6b\x8e\x91\x4c\x24\xd1\x2b\x9c\x21\xbd\x44\xcc\x65" + + "\x1e\x77\xc5\x74\xa1\xec\x65\x0a\x78\x22\xfa\xd1\x7e\x99\xc3\x78\xae\x66\x84\x53\xb3\x36\xe4\xf9\x69\x07\xa6\xe5" + + "\xa9\x20\xc5\xa1\xad\x1d\xa1\x65\x39\x31\x22\xa6\xa0\xa5\x90\x9e\x21\xb7\xc2\xed\x21\x6f\xb8\x7e\x61\x53\x41\xd0" + + "\x24\x60\x3a\x9d\x5e\xfb\xed\xb5\xd6\x22\x98\xe7\xb5\xd7\x57\x5b\x51\x83\x3d\xbf\x49\x0f\x35\xe0\x41\x33\x8d\x86" + + "\xbd\x1c\x1d\x3b\xd7\x4f\xd2\xf2\x60\xc0\x75\x3d\x74\x87\xf9\xfa\x26\x82\xb6\x4f\xf9\xcb\xaf\xdc\xd9\xb7\xcd\xe2" + + "\x3a\x63\xd7\xaa\x81\xcd\xd2\x5f\x2f\x6d\x97\x1f\x72\x9a\x21\x1b\x69\x88\x19\xe3\x1b\x6c\x05\x79\xad\x2e\x1d\x08" + + "\x86\x0c\xc7\x06\xd8\xbe\xdc\x2e\x6a\x69\x4d\x1a\xd2\x21\xd6\x4a\x55\x68\x9b\x64\xbd\x08\xb8\x90\xe3\x8f\xf2\x43" + + "\x56\x11\xe3\x8a\x52\x56\xd6\xd5\x6b\x97\x71\x54\x3b\xb2\x60\xc5\x68\x7e\xcc\x48\x47\x84\x3a\x89\xdd\xe3\xf6\x27" + + "\x6e\xd2\xf1\xdc\x28\x61\x08\x43\x56\x78\x37\x3c\x9c\x3e\xae\xad\xcb\x81\xab\x32\xb3\xb8\x77\x97\xf8\x9e\x4a\x43" + + "\xd3\x6e\x70\x50\x12\xe6\xd0\x8c\x67\x5d\x1d\xfa\x7a\x24\x2a\xa2\x14\x73\x54\xe5\x00\xe1\x1f\xd3\x82\xb4\xed\xef" + + "\x7f\x48\xab\x22\xfe\xc9\x9c\x50\x1f\x6f\xc9\x75\x7e\xb4\x13\x1e\x79\xb8\xd7\xf3\xdb\x1a\x7b\x69\xfe\x47\xec\xb0" + + "\x7a\xd9\x99\x12\x23\xd7\x92\x59\x8c\x66\x58\xf2\x42\xed\xbb\x72\x70\x38\xfe\x6e\x59\xb0\x5d\x0d\x74\x00\xa1\xcd" + + "\x0c\x80\xf5\x36\xf6\xca\x94\xdb\x7e\x96\x3d\xe0\x1e\xe6\x03\xb1\x64\x33\xac\x9c\xdf\x0e\x9e\xc4\xee\x06\x0a\x68" + + "\x73\xe3\x26\x8a\xf1\xe0\x49\x8f\xad\xbf\x2a\xe4\xd5\xdd\xbe\x78\x5c\x77\x4d\x28\xb4\x3b\x7f\xbb\x07\x08\x5c\x2d" + + "\x73\x00\x85\x2a\xed\x55\xad\xbc\xf2\xb5\x03\x3f\xcb\x1e\xf0\xeb\x95\xd6\xd5\x0c\x87\x7e\x59\x3c\xb9\x94\x16\xe7" + + "\xc6\x4d\xf4\x76\xa5\xb5\x32\xdb\x21\xd5\xa2\x29\xea\x10\xc7\x65\x94\x7c\xa0\x8f\x6d\x8d\x09\xc6\xc7\xad\xc8\xf7" + + "\x59\x75\x85\x8a\x45\x79\x6a\x8e\xcd\xb8\xf1\xed\x0e\x3c\x1f\x67\xe8\x73\x97\xe3\x07\x06\x1e\xed\x97\x2f\xf1\xe4" + + "\x53\xee\x57\xf3\xae\x79\xf5\xd2\xd9\x2c\xf4\x49\x96\x51\x4b\xe6\x3e\x32\xe9\xaa\xe0\xda\x73\xa9\xee\xd3\xa7\x76" + + "\xcf\x38\x32\x01\x7a\x01\x35\x77\x53\xcb\x80\x37\x3e\x7e\xe0\xe3\xe1\x48\x35\xe6\xe3\xe2\xd6\x38\x00\xe5\x72\x8d" + + "\x32\x06\x02\x9c\xe6\x71\x92\xc6\x52\x13\x21\x0f\xde\x8c\xd6\xd7\xde\x2c\x76\x6f\xad\x84\xc7\x29\x58\xe3\xf8\xdb" + + "\x6f\xde\xfd\xda\xbb\x16\x5e\xc1\x6b\x11\x7c\xf5\x24\xf8\x58\xcf\x82\x15\x3f\xd6\xb1\x46\x40\x20\xac\xd3\x9c\xab" + + "\xee\x20\x1a\x8e\x1d\x98\x91\xee\x40\x49\xa3\x9d\x1e\xd2\xbf\xde\xd0\xc5\xed\x91\x7e\x9f\x7c\x61\xf7\xb9\xd7\x47" + + "\xf1\xc8\x7e\xf3\x60\x56\x92\x91\x53\x19\x4e\x2f\xc8\x7d\x7e\x12\x43\xf9\xa4\xf0\x9c\x5b\xad\x18\xda\xb0\xb3\x81" + + "\x96\x0e\xfb\xcb\x68\xb1\x6f\x97\xf9\x6e\xa6\x47\xb7\x94\x2a\x27\xa7\xb3\x5d\x96\x46\x06\x1a\x21\xbd\x1e\x5b\x7c" + + "\x25\x79\xd6\xb6\x54\xc0\x11\x18\x2c\x25\xa4\x79\xce\x13\x90\x79\x2a\xf2\x90\x78\x80\x76\xae\x89\xa3\x89\x93\x4d" + + "\xa1\x8f\x53\x1a\x73\xde\x4a\x6b\x8c\x7e\xe8\x4f\x7d\x08\x38\x2c\x86\x3b\x06\x3a\x69\x70\xfe\xcc\x75\xa4\xcd\x02" + + "\x34\x98\x19\x3d\x1b\xe7\x3d\xd6\x77\xcb\x89\x36\xd8\xd5\xe2\x24\x19\xe7\x46\xfe\x05\x39\x54\xdf\xc0\x15\xa3\x11" + + "\x8f\xc9\x38\x60\xa8\x55\x57\x92\xe7\xf8\x57\x3f\x9b\x2a\x7b\xf9\x29\x3f\x1f\x85\xb1\x50\x7b\x37\x86\x92\xc6\x1d" + + "\xd9\x6b\x89\xed\xd5\x41\xa6\xc1\xe9\xcb\xb2\xcc\xc4\x90\xba\x6d\x9e\xaa\xd6\x47\x88\x31\xae\x24\xa6\xd0\x15\x7d" + + "\xa8\x8f\x1f\x81\xbb\x21\x45\x28\xfb\xff\xc9\x60\xda\x35\x26\x9c\x97\xc6\xfa\xde\x14\xff\xc1\x9b\x0e\xcf\xb0\x62" + + "\x9f\xa1\xfe\xd8\x85\xd8\xe9\x55\xe1\xa1\x4b\x6d\x16\x09\xe1\x5c\xc7\x6b\x61\x4e\x39\xb3\xa7\xec\xc9\xd1\x3b\x00" + + "\x18\x7b\xec\x87\x1e\x47\x37\x62\x7a\x86\x72\x58\x02\xd5\x29\x18\xda\x81\xa9\x9c\x85\xa0\x2b\x85\xac\x68\xe5\x7a" + + "\x0a\x6b\x84\x5e\xf8\xc1\x3d\x2b\xea\x1d\x70\x40\xcf\xd3\x64\x57\xa4\x1f\xc6\xf6\xd5\x41\x3d\xaf\x24\x90\x38\xea" + + "\x70\x38\x2f\x50\x8c\xfa\xc1\x4e\xd7\x9a\xcd\x25\x43\x44\xcb\x5d\x20\xc0\x85\x18\x05\x35\x87\x9d\xc3\xd6\xdc\xdc" + + "\x0f\x52\x7e\x5e\x83\xf6\x08\x20\x50\x83\xe1\xed\xa4\xdb\x44\x73\x95\x6c\xf0\x41\xcc\x2f\x0c\xeb\x7a\x50\xe7\x45" + + "\x81\x19\x64\x0c\x46\xc8\xc6\xaf\x0b\x12\xf8\x93\xa0\x69\xde\x48\xc2\x60\x4d\x89\x58\xdf\x35\x9b\x68\x97\x7a\x8e" + + "\xf4\x3b\x4f\xee\x43\x3e\xda\x8e\xa4\x5f\x46\x2d\xcf\x00\x65\xb4\x8d\xbf\x28\xe2\xdb\xe9\xf7\x9a\x48\x14\x68\x84" + + "\x97\x3b\x19\xbf\xdf\xcc\xe6\xbd\xd1\xd4\xdd\x6a\xe1\x0c\xa1\x8f\x4d\x44\x77\x33\x86\x23\xa3\x3d\xd0\x08\xfe\x16" + + "\x06\xf0\x57\x37\x7e\x6f\x12\x45\xb0\x2c\xc2\x0c\x5e\x47\xf6\xb1\xb8\x01\xf0\xc4\xfe\xa8\x49\xe9\xb9\xbe\xab\x81" + + "\x83\xdc\xe7\xce\xd5\x17\xf7\x87\x91\x01\x84\x9d\x09\x7a\xe3\x19\x06\x7e\x54\xdf\xb3\xd4\x83\x0f\x5b\xac\xf0\xe7" + + "\xe5\xe5\x6d\x12\xaf\x73\x7c\xd5\xd5\x03\xad\x33\xb4\x01\x12\xfc\x80\x83\xb8\x83\x00\xee\xc4\xe8\xf3\x92\x36\xca" + + "\x7b\x48\xed\x1e\xb6\x79\x98\x71\x85\x1e\x66\x14\x5f\xe5\xfa\x28\x7e\xd9\xf1\x7b\xb8\x85\x76\xe5\x58\x15\xb7\x69" + + "\x53\x15\x05\x5b\x25\xb3\xa7\x11\xcc\xab\x23\xce\x45\xc5\xd8\xb3\x5e\x09\x3f\xd0\x38\x5f\xad\x26\xd1\xf0\x9f\xe9" + + "\xcc\xfb\x0a\x99\x13\xc9\x21\x17\x75\x83\x5d\x36\xe7\xf5\x5a\xf3\x6d\x49\xd9\x7a\xcb\xc9\xba\x48\xe3\x3d\x61\x89" + + "\x1c\xb1\xd4\xee\x9f\x28\xce\xf5\x4a\xf5\x71\x17\xfd\x53\x7e\xae\xab\xa6\x23\x5c\xd4\xda\x26\x96\x59\x66\xbe\x1d" + + "\xcf\x59\x1c\x96\xc7\xa2\xf3\x01\x9a\x8b\x23\x21\x4b\x4d\x98\x02\xdb\x40\xd1\xef\x02\x19\x74\xcc\x2b\x43\x5d\x55" + + "\xdb\x30\xd2\x00\xf6\x1f\xf9\xa3\x57\x28\x1c\x67\x08\x3b\xc3\x81\x3f\x59\xa4\x29\xc9\x9b\xb9\x54\x21\xb1\x17\xf0" + + "\x06\x71\x82\xdc\x58\x22\x2f\x71\x46\x9f\xf3\x94\x4a\x25\x5b\x3e\x24\xf5\xcb\x47\x52\x66\xd1\x87\xaa\xc9\x69\xd9" + + "\xf1\xe8\x4c\x41\xca\xac\x4d\x49\x4d\x75\xfd\xbb\x07\xa3\xef\x84\xe3\x30\xb0\x3a\x4f\x12\xfd\xbd\x97\xde\xde\x93" + + "\xbc\xa4\x4d\x7c\x28\x2e\x79\xf6\x84\xd4\xe4\x02\xe1\x16\x8b\xcd\xe0\x0a\xc4\x8b\xff\x84\xd8\xba\x7b\x3f\x2b\x74" + + "\x97\xf6\xbc\xa5\x41\x98\x03\x85\x3e\x61\xa5\xa9\x25\x50\xf7\x5f\xb0\x1b\xfa\xe6\x09\x68\x66\x19\xaf\x33\x68\x46" + + "\x15\xc8\xae\xae\x77\xb0\x60\x2a\xf7\x0b\x7e\x57\xd2\xbe\xcb\x68\xa6\x1d\x58\x24\xd7\xf1\x1e\xc2\x48\x78\x83\x24" + + "\x86\x75\x0d\x12\x15\x2f\x3a\x20\x7f\x31\x2f\x7f\x62\xe1\x6e\x9d\xea\xcc\x8a\xae\xf5\x54\xf7\x4d\x6f\x10\x90\xe8" + + "\xa0\xe9\xca\x0c\x71\xeb\x95\x88\x5b\x87\x1c\xc9\x9a\x27\x56\x3b\x58\x8d\x70\x81\x39\x7c\x1c\x89\x73\x63\x84\x54" + + "\xd4\x14\x75\x12\xc3\xba\xf7\x69\x18\x51\x3a\x43\x8a\xbf\x27\x73\xd0\xea\x70\xc0\xd4\xd9\x66\xc3\x52\x02\x78\x15" + + "\xc4\x77\x33\x92\xa9\xb1\x26\xfa\x2d\xd8\x87\x87\x2e\xee\x83\xf6\xc9\x70\xc5\x0c\xcd\x90\x3b\xea\xb7\xdf\x22\x7f" + + "\xc3\xeb\x4f\x9a\x04\xbc\x39\x46\x74\x59\x4d\xf3\xb4\x2a\x63\xe9\xef\x3a\x53\x2f\xcd\xe7\xfa\x5b\xf6\xf8\xf9\x04" + + "\x7b\x68\x99\xb5\x7c\xd2\xeb\x83\xa2\x5e\x5e\x6b\xf6\x40\x6f\x9b\xab\x1e\x4b\x33\xe4\x76\x96\xdc\x58\xd8\x4c\xfb" + + "\xb1\x16\x1b\x9b\x44\x02\x12\x6c\x3d\x69\x2f\xb8\xe9\xe3\xd5\x7a\xed\xd4\x35\x3c\x35\xc7\x41\x35\x67\x63\x36\x47" + + "\x6d\xb2\xa0\xd7\x9d\x07\x7d\xe6\xd6\xfe\x11\xac\x26\x94\x33\x6a\xfa\xb2\xf6\x43\x93\xa3\xca\xa9\x74\xf0\xed\xbe" + + "\xaf\xb3\x41\x66\xba\x80\xc1\x58\xb9\x50\x58\x8f\x0c\xaf\x49\x6a\xa7\x67\xe4\x3d\xa4\xb9\xb2\x09\xa3\x1c\x80\x00" + + "\x01\xd2\x69\xe1\x24\x4c\x5b\xeb\x07\x96\xb1\x3d\xde\x08\x57\x0e\xcf\x6b\x57\x97\x52\xb3\xcd\x59\x46\xa9\x7a\x62" + + "\xb7\x48\x85\xae\xac\xe5\xe8\x3b\x74\x18\x18\xe3\x40\x98\x3f\x7b\x20\xe0\x56\xf9\x50\x35\x67\xec\x50\xd2\x2a\xd0" + + "\xdc\x9a\xae\xa3\x61\x6f\xed\x99\x21\x78\x51\xeb\x8c\x0e\xdd\x6b\xf1\x3b\x91\x00\x2c\xd9\xc0\x1d\x17\xc8\x21\x84" + + "\xaf\x74\xc4\xfa\x5e\xfa\x75\xdf\x5b\xb6\x6b\xfa\x55\xde\x5b\x76\x56\x13\xfe\xde\xb2\x46\xe2\x6e\xef\x2d\x3b\xa9" + + "\x9a\xa7\x52\xdd\x80\x8e\xf7\x96\xc3\x10\x7c\xef\x2d\xbb\x28\x04\xbe\xb7\xac\xa1\xdf\xe7\xbd\x65\x9d\xe4\xf0\x02" + + "\xae\xf6\xfd\xb7\x7b\x6f\x19\x65\x47\xbd\xb7\x8c\x30\x35\xfe\xde\x32\x4e\xd2\x71\xca\x12\xa9\xe1\x4e\xef\x2d\x6b" + + "\x94\x6f\x7f\x6f\x39\xd0\xcd\xc1\xed\x8c\xbd\xe5\xe3\x1e\xcd\xe6\x75\xbb\xd1\x4d\x94\x6b\x2c\x20\x1a\x13\xd4\xa6" + + "\xbf\xc4\x13\x87\x1b\x8f\x10\xdc\xc7\xc7\xc2\x3c\xd6\x91\x60\xbd\x19\x8c\xbf\x3d\x52\x8f\x07\xb0\x46\xb9\xc0\x16" + + "\xd0\x16\x23\x4b\x6b\x47\xe1\xd7\xbb\xbb\x2b\xd7\x99\xfa\x49\x42\xc4\x0f\x01\x0e\x87\x8d\x3b\x05\x19\x79\x21\x89" + + "\x19\xbe\x51\x31\x43\x96\xed\x82\x88\xc8\xb0\xab\x11\x59\xe2\x44\x90\x85\x1f\x7d\xe9\x6c\x74\xdc\x71\xba\x22\xe8" + + "\x66\x52\x77\x78\x99\xe6\xca\x58\x57\x7a\xc3\x2f\x0c\xac\x73\xc8\xd2\x04\xea\x74\xc7\xb5\x87\xfc\x66\xda\x2a\xdf" + + "\x8c\x9f\x23\xae\x25\x4a\xe8\x7f\x23\x74\x8d\xd1\x8d\x0c\x45\xf8\xc2\x2d\x76\x62\xe9\xa1\xff\x87\x9c\x90\xa3\x9b" + + "\xfe\x9f\x83\x98\x1d\x50\xc2\x8f\x17\x3a\x71\xcc\x65\x0a\x0e\x84\x9e\xc7\x62\x07\xea\xae\x39\x49\x88\xd1\x57\xda" + + "\x13\xce\xb7\xb6\xfc\xb8\x1e\x6d\xac\xc5\xfa\xf9\xcf\xd0\xf7\x7b\xc3\x5b\xdc\xd3\x37\xf6\x88\x47\xc1\xf4\x6d\xf3" + + "\x71\x70\xfb\x90\xa8\x38\x3d\x87\x9d\x8b\x0c\xd1\x2f\x46\x5e\xcb\xf0\x18\x06\x18\xc8\xb8\xf7\x7c\xab\xbc\x50\xf3" + + "\x16\x2d\xb3\x12\xf5\xa8\xa7\x07\xb4\xd3\x8b\x6e\xdc\x31\xad\x11\x50\x63\xaf\x25\x04\xd6\x66\x84\xde\x10\x4a\x0f" + + "\x0f\x0f\x23\x94\xec\x5d\x23\x13\x42\x39\x35\xb7\x58\x1c\xd6\x6f\xf0\x64\xf0\x08\x50\xa0\x26\x58\x27\x89\xaf\x54" + + "\xe0\x40\x4f\x13\xa9\x7b\x2c\x1a\xa4\x59\x1a\x6d\x56\xb8\x8a\x98\x71\xec\xe3\x7a\x7c\x70\x1c\xc4\xb0\x4a\x63\x43" + + "\xe4\x36\xa6\x07\x5b\x75\x13\xcf\xae\xf3\x2e\x37\x12\x41\x5a\x2f\x34\xc3\xa7\x1a\x37\xb6\x1c\x18\xbc\xdb\xd8\xc6" + + "\x0c\xe1\xdb\xc8\x20\xed\x17\xf6\x31\xa4\xf7\xbd\x23\x5a\xa5\x8d\x0a\x9f\x53\x1d\x8f\x67\x80\x77\xb7\x4d\x44\x2d" + + "\x3f\x55\x40\x45\xd6\x53\x24\x4e\x80\x9b\xd8\x40\x1e\x1a\x09\x00\xf5\xbe\xfc\x33\xd6\x82\xab\x70\x30\x1f\x04\xbc" + + "\x8c\x2e\xf0\xf2\xf2\x99\x36\xe2\x88\x04\xf6\xe0\xf7\x7c\x8e\xf8\x95\xc9\x43\xff\xcf\x41\xc9\xed\x57\x6e\xb3\xfe" + + "\x5f\x08\x9a\x29\x51\x1c\xe8\xaa\x53\xad\xee\x19\xdf\x24\x6e\xf9\x95\x41\x7c\xa3\xae\xe5\x55\x98\x63\x8d\xf6\x7a" + + "\x97\x77\x68\xb7\xc3\xbb\xf4\x82\xd9\x53\xb3\x1f\xdc\x1e\x69\xee\x63\xc8\x41\x5a\xe6\xf4\x2e\x47\x00\x03\x19\xf7" + + "\x7a\x97\x4b\xf1\x2e\xf5\x5b\x74\xcd\xe9\x5d\xda\x16\x08\xc7\x1d\xd3\x9a\x30\xef\x32\xb4\xb6\x71\xef\x12\xbc\xb9" + + "\xe5\xa0\x64\x7b\x97\x26\x84\xcb\xbb\x9c\x25\xfd\xbf\x10\x8d\x30\xbd\x4b\x0f\x50\xa0\x26\x38\xbd\xcb\x40\x05\x0e" + + "\xf4\x2e\x91\xba\x5d\x33\x3b\x92\x1c\xdd\x65\xa8\x35\x27\x26\xb4\x0a\xfd\x99\x07\x5f\x03\x6f\x22\x8f\xf8\xc7\xd2" + + "\x5c\xde\x4e\x0f\xf1\x95\xae\xc3\x47\x9c\x24\xd1\xc1\x57\xb9\xc8\xe1\xdd\x88\xba\xc8\xd7\xa3\xbf\xa5\xe1\x5e\x17" + + "\xd9\xdd\xfa\x37\x76\xbf\xcb\x45\xbe\x85\xc0\x9b\x5a\xef\x77\x91\x85\x91\xbf\xda\x45\x36\xeb\xb7\x3c\xd7\x20\xdf" + + "\xc0\xe1\x9e\x7a\x8c\x2c\xea\x25\xfb\xeb\x72\x39\xca\x36\xc0\x4d\x9c\xb8\x1d\x65\x1f\x68\x88\xa3\xec\x6c\xc1\x55" + + "\x38\x98\x3b\xb5\x5c\x2e\x65\xb3\xf6\x0d\x25\x59\xda\x5c\xce\x7b\xfd\xb4\xc1\x83\x7d\xd8\xc0\xbc\x36\x10\xfa\x4c" + + "\x11\x7b\xd0\xc5\x7f\x10\x6b\xe0\x42\x9e\xb2\x70\xec\x34\x23\xe0\x9f\x8a\x7c\xb7\xa7\x87\xaa\xa1\x7a\x0b\x12\x79" + + "\x07\xca\x58\x0e\x0e\x6f\x40\x7c\xfe\x4b\x92\x90\xe4\x3d\x42\x15\x5e\xf7\x40\xd6\x62\x35\x39\xe6\x25\x3b\x09\xe8" + + "\xe6\xd5\xbe\x76\xa0\xbf\x0a\x95\x18\x59\x80\x11\xa9\x0c\xd5\x38\xa4\x82\x02\x32\xc7\x40\xff\xd2\xd6\x24\xf0\xe9" + + "\x83\x47\x57\x1e\x21\x2b\xe7\x81\x75\x78\xcb\xf5\xcc\x90\x7c\x27\xe7\xaa\x47\x80\x7c\xb7\x94\xd1\x56\x6b\x99\x21" + + "\x2c\x09\x68\xa5\x4a\x1a\xf6\x26\x63\xd8\x0e\xdb\x48\x0e\x59\xbd\x66\x90\x48\xc2\x66\x0b\x14\x2a\xae\xde\xb2\x8d" + + "\xe7\xe2\x02\x2c\xbf\xcc\xef\xf2\x6d\x67\x5b\x63\x80\xeb\x88\x14\xfa\x1e\x3c\x0d\x4e\x72\x80\xf7\x26\x5c\xa6\x61" + + "\x9f\xb1\xb6\x18\xb3\xbc\xc9\xb5\x2c\xee\x59\xc7\x11\x41\x8b\xdd\xe5\xd0\x98\xea\x69\x2d\x0d\xcd\x0d\xbb\x8c\x6f" + + "\xbd\xc6\x8b\xdf\x51\x85\xdc\x68\x8b\x41\xbc\x00\x6d\x85\xe9\x06\x58\x02\x52\x00\x88\x88\xb4\x32\x5c\x2d\x0c\x18" + + "\x67\x32\x8e\xe0\x9c\x1b\xba\x0d\xf0\x6b\x4c\x5c\x1c\x6d\xc3\x27\x3e\x0e\xb6\x2f\x24\xbb\x97\x8b\xb6\xc7\xbc\x20" + + "\x00\xd8\x58\xd6\xac\xc5\x7a\xd4\x9e\xac\x3d\xbc\x38\x4d\x8a\x5d\x3e\x6e\x55\x50\x56\x2c\x10\x84\x97\xf6\x8c\xc8" + + "\x9c\x7f\xb4\x65\xee\x49\xd9\xe6\x22\xed\x13\xb9\x0d\x30\x2a\xf2\xc5\xa8\xc8\x17\x1e\x5e\xdc\x22\xb7\xca\xc7\x45" + + "\x8e\xb2\x62\x81\x00\x5e\xc4\x50\x0a\x72\x27\xf0\x44\x7d\xae\x54\x43\x9c\xf8\xa8\x77\xc1\x60\x64\xcb\xf9\x1f\xaa" + + "\x99\x63\xde\x8f\xe8\xfc\xa5\xeb\xa0\x7f\x70\x4a\x12\x75\x60\x7e\x65\x0a\xc7\x9c\xe0\xe4\xa7\x37\x27\x2a\xe2\xb4" + + "\xa6\x25\x7d\xe9\x40\xeb\xf9\xdf\x4a\x00\xf0\xe4\x84\x81\x58\x37\xf4\x39\xaf\x2e\x2d\x44\x56\xdf\x4c\x02\x30\xef" + + "\x82\x80\x35\xad\xbd\xfe\xcd\x68\xb2\xd3\xc6\x6b\x65\xaa\xd6\xb7\x18\x66\xc9\xe6\x70\x5c\xcf\xd0\x02\xad\xff\xa7" + + "\x73\x7a\x8e\xa6\xeb\xfe\x3f\x0b\x7a\x36\x4c\xc0\x66\xf5\xbb\x47\x33\x29\xe5\x66\x2c\x29\x25\x7c\xb0\xd1\xd2\xf5" + + "\xc0\x94\x9a\x7b\xd2\x52\xf5\x06\xbb\xae\x61\xd3\xf9\x8a\x9e\x45\x1b\x09\x6f\xa4\x94\xb5\xfc\xd3\x19\x29\x1b\xcd" + + "\x36\x25\xd2\x81\x6b\x22\xdc\xd1\x73\xdd\xbd\xea\x82\xb4\xde\x1e\x19\x84\x8d\xbb\xf1\xea\x7a\xb9\x46\x7a\xec\x78" + + "\x0d\x58\xd6\x68\xf0\x3f\x9e\x1a\x7a\x18\xd6\xb4\x58\x99\x37\xab\x15\x3f\x05\xa3\x93\xae\x9b\xfc\x4c\x9a\x57\x17" + + "\x8a\xee\xf5\x68\x28\x28\x37\x7a\x99\x97\x9b\xf9\xc3\x3a\x19\xde\x1e\xe4\xe8\xed\x25\x4d\x69\xdb\x3a\x1b\x90\xee" + + "\x1f\x56\x29\x8a\x82\x72\xa3\x97\x79\xb9\x59\x2e\xb7\xd9\xb0\x04\xe7\xe8\x79\x79\xa8\x9c\xac\xec\xd3\x24\xa3\x36" + + "\x3c\xca\x07\x28\xf0\x32\xb1\x98\xed\x93\x6c\xa5\x13\xfd\x4a\x9a\x52\xbe\x13\x8e\x8d\xfc\x84\x64\x4b\x8a\xa2\xa0" + + "\xac\xe8\x65\xfe\x24\x68\xe9\x76\x33\x3b\x18\x9a\x48\xca\xa3\x1b\x23\xdb\xae\x16\x4b\x14\x03\x57\x5d\x58\xe4\x65" + + "\x25\xdd\x2e\x92\xb9\xea\xf8\x3d\xc9\x8e\xd4\x3f\xd1\xc1\xf7\xa0\xcd\xeb\x89\x8b\xfa\x25\xda\x38\x53\xd5\xfe\x9d" + + "\xad\x1e\x6a\x0d\xb0\x19\x17\x9c\xbf\x64\xf2\x08\xb2\x57\x83\xe4\x02\xed\xd5\xf0\xec\xc4\x4b\xfb\x04\x68\x88\x67" + + "\x32\x5e\x5a\x48\x73\x38\x9f\x3b\x38\xf6\xda\x3b\x48\x44\xb0\xaa\x0c\x37\xff\xf3\x7e\x86\xbb\x77\xa9\x38\xbb\x79" + + "\x47\xcf\x72\x9d\xa8\x58\x1e\x72\x15\xa9\xb5\xe9\x13\xe0\x1f\x59\x03\xfa\xa7\x5a\xbd\x3a\x48\x0a\x73\x40\x70\xf0" + + "\x4f\x00\x4b\x3f\x98\xb9\xc2\x53\x33\xe9\x3c\x6b\x01\x13\xe0\xa2\xfe\xf5\x72\xde\x57\x5d\x63\xe6\xa1\x5e\x20\x37" + + "\x96\x64\x10\x51\x26\x6e\x17\x2d\xcd\xcb\x13\x6d\x72\xd7\x3a\x19\x78\x64\x43\x55\xd3\xd3\x6c\x12\x81\xbf\x4f\x33" + + "\x28\x57\x41\xd0\x46\xab\xb1\xe3\xd5\xc8\xfd\xe1\xf9\x0c\x19\xa2\xf3\x24\xb1\x28\x3e\x9d\x1a\xd3\xdd\x57\x26\x6a" + + "\xd5\xff\xb3\x72\x0b\x00\xae\xed\xfb\xf7\x91\x21\x4d\x77\xae\x69\x20\x8a\x81\xf4\x2f\xce\xd7\xb6\xc4\x16\x5d\x9b" + + "\x36\x94\x96\x11\xcb\xbb\x30\x18\x2e\x78\x94\x58\xaf\x7f\xe8\xce\xe5\x83\xb8\x3b\xf5\xef\x5a\x66\x81\xab\x5a\x63" + + "\xe6\xa9\x90\xcf\xe7\x1b\x6b\x9b\x35\xb8\x53\x38\xda\xe3\xb0\xd7\xd6\x0b\xfd\x36\x5d\x77\xba\x9c\xf7\x25\xc9\x0d" + + "\x27\xd5\x5e\xa3\xe0\x67\xc6\xe7\xd8\x2d\x55\x23\xb3\xe4\xdb\x17\x34\xc6\x43\xf9\x6c\xe7\x45\xd8\x4b\x0e\x19\x4d" + + "\xe7\x6d\x44\x49\x4b\xe3\xbc\x8c\xab\x0b\xbf\x5e\x57\x05\x02\x8e\x43\xd9\xc2\x62\xd9\x3f\x27\xd1\xf0\x05\x64\x03" + + "\x85\x56\x43\x5e\xf6\xd0\x0c\x03\x48\x2e\x43\x06\x0a\xea\xe1\x5a\xf0\x6d\xb0\xcd\xc3\x27\x67\x62\x4d\xdd\x3b\x1c" + + "\x78\x9d\xa6\xa4\x56\xa1\x78\x78\x37\xfd\x11\x3f\xf1\x44\x0a\xda\x74\x46\x44\xc8\xbf\xd1\xf1\x86\x1b\xe6\xbc\xb2" + + "\xd3\x12\xbf\x59\x82\xdb\x2a\x8e\xc3\xff\x67\xd8\xec\x32\x5d\x05\x0d\xfa\xa9\x9e\x08\x84\xa7\x4b\x81\xde\x1f\x31" + + "\xc0\x3f\xd5\x16\x47\x2b\x83\xeb\x38\xcb\xdb\x73\xde\xb2\x65\xa3\xa4\x2e\xbf\xb1\x6c\x39\xbf\xd8\xf9\x96\x16\x3e" + + "\x22\xd1\x34\x2d\xaa\x16\xa7\xc5\x8b\x46\x9d\x05\xe1\x36\xc9\x8b\x08\xd2\x46\x7b\xe4\xa8\x79\xf9\x4a\x1b\xd2\xcd" + + "\x7a\xe1\x5a\xde\x66\x87\x43\x92\x61\xf7\x0d\xb2\x35\xdd\xa6\x6b\x9c\xba\x7b\x0e\x48\xb7\x74\xbe\x5f\xe0\x58\x66" + + "\x1f\xab\xd5\xca\x7e\xb5\x1c\x3c\x50\x0e\xa4\xd6\x07\x83\xff\xbe\x49\x1e\x5c\x87\x33\xb2\x2d\xcd\x0e\x58\x64\x79" + + "\x9f\xd2\x87\xc3\x0c\x21\xed\x6e\x01\x59\xd3\x19\xc5\xb8\x71\xb2\xbf\x5c\xcd\xd7\x5b\x1d\x01\xae\x2c\xd4\x51\x6d" + + "\xb2\xce\x16\x7b\x97\x11\x4d\x0f\x0f\x74\x81\xb4\xe0\x40\xe8\x3e\x4d\x71\xea\xee\x46\x1c\x36\x74\xb6\x5f\xe1\x58" + + "\xae\x76\xac\xd7\xab\x99\xd9\x0d\x60\x4d\xa2\xe4\xb3\x5d\x2e\x97\x73\x57\x33\xe6\x19\xcd\xb0\xad\x8f\xbe\x11\xd9" + + "\x0c\x25\xee\x6e\x05\x5d\xee\xb7\x69\x82\x22\xb9\x1a\xf1\xb0\x5c\xac\x16\x72\xad\xf9\xcf\xdf\x7e\x23\x67\x99\x2f" + + "\xf4\xf5\xd0\x90\x33\x6d\xa3\xba\xa9\x8e\x0d\x6d\xdb\x78\xcf\xd2\xe2\x34\x79\x4d\xf9\x70\x39\x34\xd5\x39\xfa\x05" + + "\x34\x6a\x18\x9a\xcb\x84\xfb\x02\x8c\x6a\x67\x2d\x5c\x07\xc0\x21\xc5\xcb\xbf\xf3\xea\xab\xbf\x57\xcd\x7f\x8f\x6a" + + "\xa7\xb2\x2a\x06\x0f\x33\x26\x78\xa6\x9b\xc0\xb4\xdd\xbe\x7d\xf5\xc7\x80\xfb\xf7\x73\xe4\x3d\x5d\xef\xbd\x7a\x14" + + "\x41\x05\x2c\x81\x4c\xcd\xa0\xe6\xe3\x90\x12\x85\x4d\x7b\xca\x91\x12\x09\xa2\xc7\x5e\xa3\x9a\xeb\x6b\x05\xff\x3a" + + "\xd8\xbb\xcd\xe6\x93\x49\x0c\x72\x07\x80\x16\xba\x1f\x25\xf6\x22\x60\xce\x1c\x3f\x17\x37\x5d\x73\xe7\x0b\x71\xe2" + + "\x6c\x00\x77\x29\x26\x78\xa1\xcc\xd9\x24\x1a\x3e\x8b\x4f\x91\xdd\x43\x76\x32\x0d\xc9\x74\x2f\x7d\xd2\xc4\xc7\x5e" + + "\xa3\x68\xd9\x7d\x58\xae\x32\x7a\x9c\x38\xd2\x2a\xac\x3e\xf6\x3e\xf8\x7c\xf5\xbb\x09\x74\x8b\x22\xeb\xc3\x2a\xf9" + + "\x9d\x9b\x04\x2b\x75\xa7\x65\x58\x7d\x8c\x36\x26\x3d\xf3\xc3\xc7\x47\xbc\x4d\xd5\xb5\xcd\x61\xac\xb3\xdb\xda\xff" + + "\x80\xcd\xf9\xbf\xb7\x2d\x6a\xec\x0d\x6d\xe2\x63\x9e\x99\xd6\x65\x62\xed\x0f\x19\xa5\x98\xc2\xab\x45\x85\xfa\x2a" + + "\x4f\xee\xd8\xea\x2e\xeb\x27\x65\x7e\x16\x11\x1e\x74\x22\x98\xb7\x42\xc8\x51\x5e\x1e\xf2\x32\xef\xe4\x48\xbd\x0d" + + "\xf1\x7a\x2c\x7c\x64\x5f\x13\xac\xf6\x0f\x7e\x17\xad\xff\x34\x02\xff\x98\x03\xe7\x3f\x8a\x11\x40\xf5\x3a\x7c\xdb" + + "\x63\x44\xa9\x31\x42\xff\xa9\xd1\xff\x78\x5a\xf0\x1f\x5e\xa3\xaf\xda\x43\x1b\x51\x6a\x07\xad\xff\xd4\xeb\x7f\x3c" + + "\x5d\xf8\x0f\xaf\xd7\xd7\xec\xc6\x8e\xa8\x35\x4e\xea\x3f\xb5\xfa\x1f\x4f\x13\xfe\x23\x6a\x35\xdf\x07\x33\xc3\xdf" + + "\xf0\x54\x19\x83\xb0\x1e\xec\x44\x1f\x62\x65\xa0\x93\x88\xff\x6f\xbc\xaf\x32\xbe\x2b\x8e\xc5\x70\x7e\xae\xd8\x56" + + "\xa3\x86\x39\x60\x0c\x1b\x76\x49\x62\x70\x12\x57\xfb\xbf\xd2\xb4\x43\xb6\xb0\x74\x30\x16\x16\x97\xbc\x3c\x4d\xeb" + + "\x4b\x51\x80\x4c\x3c\xc6\x1b\x08\x56\x25\xfd\x77\x03\x59\x65\x13\x32\x9f\x55\xb0\x90\xfb\x66\x28\x29\x40\x4a\x80" + + "\x01\xc7\x93\x2f\xe6\x09\x85\xae\xaa\x75\xda\x3c\xa5\x1c\x23\xe1\x7f\x16\x59\xb2\xa2\x52\x52\x5b\x87\x1f\x58\x91" + + "\x0e\x7e\xa2\x24\x93\x53\xac\xb5\x41\x83\x65\x58\xd3\x64\x96\xb7\x98\x70\xbd\xaf\x3b\x0e\x3b\xf3\xfe\x43\x9d\x5a" + + "\x5c\xd0\xb1\xad\xef\xd9\x30\x09\x79\xea\x11\xa9\x4c\x3d\x4f\x72\xe3\xa5\x0c\x83\x41\xd7\xab\xb7\xb7\xe4\x30\x73" + + "\x55\x61\x24\xb5\xf3\x64\x4e\x73\xdd\x99\x18\x39\x18\xbc\x04\x67\x4a\xb0\x0e\x00\xf9\x36\x9c\x70\xe6\x07\x4d\xef" + + "\xec\x5d\x4a\x8b\x00\x38\x7f\x68\x14\x38\x33\xc2\x5c\x75\xe1\x86\x05\x93\x5d\x47\x5b\xe4\xe1\xd1\x89\xd5\x0c\x55" + + "\x04\x6e\x05\x38\x41\xee\x70\x29\x00\x9c\x04\x71\x55\xe3\x14\xf5\x28\xf7\x6e\xcc\x80\x66\x85\x74\xb0\xb1\x41\x19" + + "\xde\x82\xbe\x2b\x6f\x60\x9f\xa1\xdd\xc2\xbb\x2f\xf9\x18\x7e\xee\x09\xe1\x8e\x17\x0c\xc7\xf0\xf0\xe2\xe0\x2b\x35" + + "\xb7\xdf\x9f\xc1\x6b\xbe\x46\x4f\x46\x30\x9e\xa6\xed\x99\x14\x05\x2a\xea\x31\xd4\x31\xcc\x5b\x54\x33\x08\x73\x9c" + + "\xe9\x31\x02\xa3\xf8\xfe\x91\x71\x3b\x66\x00\xeb\x23\x04\x18\xfe\x15\x43\xd3\xd5\x8b\x8e\x81\xe9\x97\x9f\x73\x58" + + "\xfa\x79\xb7\x06\x65\xba\xc9\x32\xea\x3a\x20\x78\xeb\xc1\x07\xd7\x04\xe4\xa1\x37\x8a\x72\xbd\x6d\x74\xd2\x72\xce" + + "\x83\x0a\x00\x49\x77\xe4\x6d\x75\x02\x4e\x75\x38\xa9\x82\xd3\x4b\x7e\x88\x61\x1e\x1c\x85\xbc\x26\xd9\x06\x68\x82" + + "\x61\xe9\x60\x0f\x58\x35\xde\x72\x68\xc4\x29\x0a\x07\x31\x3f\xfc\x3d\xba\xbe\x27\xe4\xee\x77\x56\x8a\x74\xba\xaf" + + "\xa5\xe9\x92\x2e\x0e\x4e\x5f\x8b\x91\xf4\xf4\x38\x28\xf6\xb3\x85\xcd\x71\x01\x7d\x3d\x70\x6e\xf4\x35\x94\xb7\x55" + + "\xe1\x8d\x27\x6c\x9c\x42\x70\xd3\x1b\x45\xb9\x47\xa7\x0b\x5a\x6e\x01\x4b\x00\xbb\xeb\xfd\xad\x26\x87\xb9\x3a\x3e" + + "\xe4\xa4\xea\xe9\x7d\x1d\xc2\x37\xde\x0d\xc8\x6b\xc6\x3b\x68\x82\xae\x03\x5a\x0f\x58\x35\xde\x76\x3a\xc9\x29\x0c" + + "\x27\xb9\x31\x8c\x7b\x28\x00\x27\xe5\xee\x7f\x51\x6e\x4b\xd5\xdb\x62\xba\x4f\x53\x4f\xf7\x73\xa2\x9e\xde\xd7\x00" + + "\x7c\x9d\xaf\x03\x5e\xd3\xf7\x80\x7f\xbd\xef\x35\xd9\x7b\x45\x7c\x45\x20\xc3\xe9\x65\x60\xeb\x68\xe3\x1c\xf4\x62" + + "\xb8\xae\x58\x52\xf4\xdc\xe9\xdc\xde\xd6\x1f\x0d\x27\x8c\x1e\xae\x75\x9d\xe4\xe1\xc7\x94\x66\xf6\x31\xa5\xc4\x3e" + + "\xc4\xe3\x83\xd5\x5a\x35\x44\xe8\xb4\xe3\xc2\x3a\x0c\x94\x3d\x1e\x66\x09\x7d\x35\x25\xec\xfa\x32\x7a\xa7\x18\x65" + + "\x09\x7d\xd9\x19\xe4\x65\xc3\xdd\x5f\x4e\xa2\xcb\xbb\x82\x06\xe9\x53\x62\x1e\xe3\x5a\xfb\x0e\xe6\x02\xea\xd2\x93" + + "\x8f\x90\x8f\xe2\xd2\xeb\xf0\xd9\xfc\x7b\x58\x04\x58\x5f\xf5\x4c\x85\x68\xfd\x87\xaa\xea\xf4\x8b\xd5\x66\x97\x05" + + "\x9c\xb9\x33\x9e\xca\x31\x0e\xf8\xbb\xae\x76\x8f\xc4\x9b\xcc\xbe\x7c\x02\x83\x54\x8a\xe0\x49\xb4\x42\xa6\x9b\x7b" + + "\x32\xe3\x8a\xae\x03\xe0\x16\x45\xcb\x58\x07\x55\x61\x22\xc9\xe4\x7b\xf6\x1b\x7f\xc8\x18\x76\x33\xa3\xc5\x0b\x7d" + + "\xc1\xc4\x10\x26\x83\x89\xe9\xcc\x8f\xbf\xfc\x70\xed\x60\xd4\x98\x02\xe1\x4a\x4f\x28\x33\xa8\x7d\x61\xa4\xf4\xd6" + + "\x05\xc7\x45\xaf\xd7\x53\x69\x73\x3e\xf9\x14\xc5\x17\x11\x96\x87\x44\xed\xb9\xe9\x93\x3d\x68\x3d\x78\x0e\xc9\x75" + + "\xe2\x2a\x83\x28\xc6\xfe\x8c\x1b\xda\xd6\x55\xd9\xb2\x9b\x7c\xec\x8b\x7a\xe0\xd6\x3b\x9c\xd0\xaa\x22\x71\x33\xc5" + + "\xa8\xc3\xf1\xd9\xae\x5a\x02\x0a\x16\x82\xdf\xb6\x36\x78\x33\xa9\x6b\x79\x33\x78\x29\x3e\xb2\xac\x22\x6b\x9c\xbc" + + "\x75\x58\x5c\xc9\xda\x53\xd7\x4f\xc6\xfa\x97\x46\xe3\x5d\x4d\x06\x37\xd0\xee\xb5\xf7\x1a\xda\xd7\x71\xe6\x96\xea" + + "\x68\xcd\xff\xf0\x62\x8f\xba\xec\x6e\xbd\x30\x5a\xd5\xe9\xb7\xea\xf0\x7b\xb6\x6a\xb4\x2a\x7f\xab\xee\xda\x1b\x77" + + "\x95\xf7\x5d\x25\xfa\x16\x99\x8d\x0f\x92\xdf\x60\x10\x80\xf9\xfb\x57\x1e\x03\x77\xaa\x29\xa0\xc3\x7e\xab\x9a\xbc" + + "\x6d\xba\x67\x4f\xdc\x53\xd6\xf7\x94\xe6\x1b\xe4\x65\x2b\xff\xd5\x53\x00\xc8\x60\x25\xd8\xc1\x9c\x51\xb3\x04\xf3" + + "\x2d\xef\xb0\xde\xb9\x8a\x3b\xd1\x87\xf0\x43\x13\xaa\xb5\x7e\xba\xbd\xb7\x19\x4e\xf7\x0a\x96\x9c\xf2\x1c\xa9\xf3" + + "\xff\x02\x71\x5f\x33\x6b\xbe\xa9\x9a\x70\x3f\xe0\x0d\x9d\x7c\xbf\xd6\x8c\x54\x33\x32\xcb\xde\x4d\xfc\xf7\x93\xf0" + + "\xfd\x84\x78\xb3\x9c\xd0\xe1\xf0\x1b\xeb\xfa\x5d\x0c\xcd\x68\x47\xfc\xfa\xe6\xec\x6e\x6d\x19\xed\xc0\xbb\x98\xd0" + + "\xb1\xb9\xf4\x5e\xd2\xbd\x9b\x00\x6f\x95\x51\x14\x60\xf0\xd1\x60\x44\xdf\xea\x4f\x66\x90\xc3\x2a\x02\xfd\x6a\xcc" + + "\x4a\x9f\x00\xb0\x4f\x1d\x3e\x99\x71\x72\x77\x68\x14\x1b\x8a\x21\xde\x9c\xc1\x59\x88\xd3\x86\x85\xf4\x50\x4b\xc0" + + "\x21\xa8\x59\x87\x1d\x8d\x51\x90\xa0\x91\x63\x44\x39\xa7\x4f\x5d\xf3\x64\x98\xc0\x68\x14\x7e\x64\x7a\x1b\x30\x7a" + + "\x5d\xba\xa6\x06\x05\x1f\x5c\x43\xef\x8a\x5e\x53\x83\x82\x0f\x9e\xa2\x83\xe5\x76\x1b\x8d\x37\xf0\xe1\x90\xee\x6d" + + "\x34\xde\xc0\x87\xa3\x0f\x6e\xa3\x71\x72\x05\x61\xd5\x23\xd7\xa1\x3a\xed\xf4\x69\xf1\x6e\xf0\x4d\x30\xa8\xcc\x43" + + "\xe8\x03\xf1\x86\xd1\x07\xb2\x0c\xa1\x0f\xc4\x16\x36\x41\xde\x28\xb1\x40\x55\xbe\x95\x87\x20\xa9\x06\xaa\xf1\xad" + + "\x3c\x04\x49\x3e\x50\x85\x5d\xab\xa2\xe1\xa5\xe1\x10\x25\xd6\x67\x91\x71\x2d\x36\x16\xe9\x01\x6a\x16\x5c\x03\x0a" + + "\x8f\xd4\x10\xa0\x27\x66\x9d\x6f\xa7\x71\x25\x1f\x8e\xb6\xbf\x9d\xc6\xc9\xf6\x87\xc2\xfb\x1a\x7a\x5c\x01\x5d\x0d" + + "\xc1\xbd\x3d\x2d\x46\x46\x28\x7d\x0c\xfc\xc6\x7e\xf6\xd6\x78\x2d\x81\x2b\x79\x08\x6a\xf5\xb5\x04\x4e\x8e\xdd\xca" + + "\x91\x55\xdc\xc8\xcd\x0f\x93\x80\x7b\x9f\x1c\x5e\xb6\x81\xa0\xfc\x8f\xb1\x0b\x26\xe8\x3b\x1c\x26\x91\x4f\x36\x2d" + + "\x33\x01\x9b\x8d\xa4\x1d\x31\xf1\x0a\x07\x45\xfb\xe4\xd9\x46\x56\xa7\x2a\xc2\x10\x07\x6f\x1f\xf1\xb1\x3d\xfe\xbe" + + "\x4e\x1e\xdd\xc8\xf5\x37\x85\xa3\x98\x0c\x45\x8e\xe5\x87\x7d\xd2\xc6\xe6\x48\x4b\x8d\xed\x79\x67\x02\xc0\x3e\x21" + + "\xdd\x01\xae\xef\x84\x9e\x1b\xb9\xb2\x1a\x5f\x2f\x38\x93\x8f\x06\xb6\x00\xc9\x49\x0b\xd8\xf5\x3e\xa6\x88\xd2\xc5" + + "\xbb\xc9\xc5\xb1\x58\xd2\x3a\x99\xd6\x52\x86\xfb\x2e\x79\x68\xe0\xbe\x5e\x7a\xf3\x75\x12\x5f\x4d\xb7\x74\xd4\x15" + + "\xed\x78\x43\xfe\x60\x94\xee\x9b\xfa\x0a\xe3\x5b\x4b\x2d\xe3\x4b\x9f\xa8\x81\x7b\x07\xd5\x1d\x72\x35\xfa\x2a\xbb" + + "\x69\x68\x85\x37\x05\xe9\x31\xc0\xb4\xeb\xa0\xbf\x97\xf4\xdb\x06\x18\xc2\xfa\x90\x3a\xc5\x97\x2b\x72\x80\xf5\x76" + + "\xd7\x1d\xb2\x52\x3a\x6b\xba\xa5\xaf\x42\x1b\x81\x75\xd4\xc0\xae\xeb\x94\xbe\x9b\xee\x9b\x7a\x09\x63\x5a\xcb\x05" + + "\xe2\x4b\x89\xa9\x81\xfb\xfa\xea\x1e\xf9\x37\x7d\x95\xdd\xd2\x5d\x57\x34\x05\x9b\xb8\x06\xa6\x5d\x67\xea\xbd\xa4" + + "\xdf\xd4\x69\x18\xeb\x30\xd3\x85\x2f\xff\x27\x84\xf6\x75\xd9\x3d\x72\x8d\x7a\xea\xba\xa5\xc7\xc2\x1b\x82\x75\xd8" + + "\xc0\xb2\xeb\x20\xbc\x8f\xf2\x9b\xfa\x4b\x67\x9c\x9e\xf7\x34\x33\x57\x14\xa1\x57\xeb\xe5\x91\x78\xfd\x3d\x82\x04" + + "\xcb\xe6\xe9\xac\xcf\xfa\x22\x0f\xe3\x5a\x90\xec\x03\x5b\xab\x59\x45\x39\x4b\x71\x8a\x21\xf1\x1c\x12\x58\xc9\x73" + + "\x9e\xd1\x4a\x9e\x31\x54\x0d\x26\xfb\xb6\x2a\x2e\xdd\x90\x7c\x59\xac\x73\xe0\x6d\x80\x21\x65\x01\x48\x37\x8f\x65" + + "\xf8\xb4\x56\x61\x56\x5b\x67\xeb\xfd\xeb\x56\x4b\x88\xa0\xee\x2a\xac\xa7\xf3\xd5\xef\x9c\x88\xcb\xfd\xeb\x02\xc5" + + "\xdb\x0c\x48\x5f\xa9\xb8\xec\x79\xce\x4b\x2b\xab\xe8\x70\xf8\x7b\xeb\xcf\x02\x3e\xee\xd6\x6b\xab\x0d\xba\xe8\xff" + + "\xdd\x9e\x9f\x35\xec\x1e\xc3\x38\x86\x26\x04\xa6\xb1\x7f\xbb\x54\x1d\xfa\x2a\xbb\x7e\x7a\x5d\x7c\xb5\xf3\x9b\x42" + + "\x8a\x71\x61\xdc\x7a\x98\xeb\xf9\x14\x90\x77\x0b\x18\x5a\x7b\xd6\xd1\xb6\x28\x16\xd8\xdb\x1a\x12\x84\xc3\xe7\x2e" + + "\x1e\x03\x1e\x6d\x18\x7d\x57\x25\x49\x86\x97\xd3\xf4\xfb\x21\x89\x5a\x2e\x1c\xf2\xa2\xeb\x3b\x98\x14\xf5\x89\x7c" + + "\xa8\x6a\x92\xe6\xdd\x6b\xf4\x43\x34\x4f\x58\x97\x88\x0f\xbb\x68\x3a\xd7\x18\x56\xb7\xdf\xf9\x5f\xf6\x35\x20\x58" + + "\x77\xc0\xe3\x23\x3e\x56\x56\x26\x2b\x32\x9f\xc3\xfe\xd2\x75\x55\x09\x24\xa8\x52\x61\xd6\x35\x25\x0d\x29\x53\xf0" + + "\x82\xaf\x6e\xbd\x90\xea\x87\x71\xc0\x92\x1d\xa3\xc3\xfb\x5c\x65\xa4\x88\xd9\x7b\xd4\x58\x36\x1c\x0d\xcc\x30\xb4" + + "\x87\xfc\x85\x67\x7f\x18\x8c\x4e\x03\x8c\xab\xcb\x00\xa9\xd4\x01\xb3\x64\x95\x3c\x9a\xef\xd2\x60\x86\x18\x8e\x41" + + "\x59\x16\xb7\x69\x53\x15\x05\x6b\x7f\x57\x5d\xd2\x13\x43\xbc\x74\xbd\xee\x98\xcd\x9b\x1e\x48\x46\x23\xd1\xd4\x2c" + + "\x27\x45\x75\xd4\x84\x0b\x53\xf7\x6a\xdf\xd8\xfb\xff\xd3\x85\x78\x82\x01\x7f\xce\x41\xfe\x89\xc2\x42\x40\x0f\x45" + + "\xb3\x4e\x01\x5c\x90\x8e\xf6\xe3\x39\x9e\xaf\x7e\xc7\x13\xb3\x9e\xdb\x00\xa0\x6a\x1c\xc6\x0b\xa0\xcb\x2e\x2f\xc7" + + "\x24\x87\xd0\x49\x46\xd9\x4d\xc6\x78\x4d\xbc\x8c\x26\x1f\x11\x05\x06\x5a\xaa\xd4\xe4\x05\x2a\x91\xfa\xfa\xaa\xbd" + + "\x7d\x61\xb7\x0f\xf7\x26\xc4\xd4\xa9\x3f\xa5\x61\xe4\x58\x62\x94\xc4\xc3\xd5\x1e\x52\xee\x5b\x76\x48\xf2\xdd\xb4" + + "\xc8\xeb\x5d\x34\xcc\x9a\xd6\x24\x87\x96\xdb\xf3\xdc\x76\xbb\xc5\x4b\x8c\x89\x63\xfe\x11\x9f\x16\xf4\x21\xe6\xbe" + + "\xdb\xb7\xa8\x5f\xfa\x59\xc2\x24\x8b\x5d\xed\x73\x82\xea\x02\xed\x1b\x9b\x35\x55\x7d\x77\x0b\xb4\x4c\x1c\xbd\x91" + + "\x24\x09\xce\x02\x37\x26\xbf\x78\xac\xbb\x61\xdc\x5d\x74\xf2\xd2\x4b\xc5\x39\x47\x08\x3a\xbd\xab\x2e\x5f\x11\x02" + + "\xbe\xd2\x6c\x3d\x5d\x2e\x4c\x77\x69\xec\x66\xe3\x77\xec\x05\x40\xbc\x02\x30\x19\xc1\x10\x78\x3c\x37\x95\xde\xbc" + + "\x83\x88\x5f\x44\x95\x0f\xf2\x18\x42\x51\x37\x37\xd1\xd1\x82\xde\xe7\xe4\x98\xe8\xdd\x40\xd1\x5e\x98\x76\x5e\xf9" + + "\x20\x8e\x18\x38\x26\x01\x41\x7b\xba\xef\xca\x4f\xec\x91\x33\xd7\x9e\x82\xf6\xa8\x8e\x8b\xc5\xe1\xd1\x34\x9c\xe2" + + "\xf0\x60\xbb\x1b\x9d\x39\x85\x9f\x86\x9f\x36\xbe\xa1\x6d\x7c\x96\xdc\x93\x26\x3e\x53\xd2\x5e\x1a\x73\xb1\x64\xad" + + "\x1d\xe2\xed\x76\x2b\x3c\x3c\x61\xee\x56\xc2\xab\x96\x7d\xb8\xb2\x1e\x3f\xe0\x95\x88\x8a\xc5\xe3\x55\x1f\x22\xf5" + + "\x64\x55\xa4\xbd\x59\x65\xd9\x5a\x59\xcf\x3a\x91\x2f\x4c\x49\xfd\x61\xaf\x92\x71\x3b\xcd\x1f\x98\xb2\xad\xab\xc3" + + "\x02\xad\xc4\xe5\x50\xdc\x04\xbd\x0b\x05\xd6\xeb\x15\x8e\xb0\xe4\x77\x91\x24\xda\x0b\x56\x58\xc3\xb7\xdb\xb9\xd1" + + "\xf0\x42\x6f\xf4\xd6\x20\x32\xed\xaa\xaa\xe8\x72\xd3\xd0\xc1\x6e\x02\xd6\x6b\x93\xe0\x8b\x5c\xe6\x54\x1f\xc8\x39" + + "\x2f\x5e\x77\xd1\xfb\x7f\xa5\xc5\x33\xed\xf2\x94\x44\xff\x46\x2f\xf4\xfd\x24\x52\x1f\x26\xd1\xbf\x34\x39\x29\x26" + + "\x51\x4b\xca\x36\x6e\x69\x93\x1f\xcc\xeb\xc1\xd8\xf3\x87\x4b\xcc\x4d\x9f\x2e\x7d\x1e\xaf\xcb\x26\x8a\xe6\x8e\x19" + + "\xc3\xad\x69\x0c\xb7\x26\x81\xae\xaa\x75\x23\xb0\x92\x37\x5a\x35\xab\x05\x96\x29\x12\xd3\xca\xbb\x28\x74\xc2\x1a" + + "\xd8\x08\x2e\xc8\x60\xe8\xaf\x18\xc1\x35\x53\x36\xba\xaa\x45\x78\x8e\xf3\x12\x79\x41\x6e\x9e\x60\x4f\x5a\x3e\x5c" + + "\xf1\x22\xc7\x35\x79\xe8\xc4\x72\xc8\xbd\x9d\x2a\x79\x25\x4d\x53\x7d\xf5\xe8\x33\xf6\xde\x48\x62\x2f\x6e\xf1\xdb" + + "\xf7\x22\x6b\x23\x33\xe2\x98\x4a\x20\x5c\x20\x5e\xc1\x8a\xc7\x3e\x74\xb1\xeb\x93\xa6\x34\x86\xfc\xe1\x4a\xeb\xd2" + + "\x31\xe2\x36\x00\x36\x78\x7a\x4e\x84\x97\xe1\x49\x47\xcb\x5f\x31\xb3\x3d\xde\x93\x1d\xae\xf2\x81\xb2\xc1\x93\x4f" + + "\xde\x8b\x1d\x27\x2b\x7c\xa3\x9d\x77\x8c\x9d\x71\x93\x8f\x66\x2f\x13\x26\x23\xfc\x2c\xae\x87\x15\x57\x27\x41\x4e" + + "\xa0\x7b\x19\xc6\x4a\x22\x99\x79\xd4\x0f\xef\xf9\x38\x11\x66\xc5\xc5\xcb\x4d\x9a\x8b\xf1\x61\x84\x59\x9d\x9c\x38" + + "\xf5\xd7\xf2\xbb\x75\x6d\xf1\x88\xe6\x4d\xec\xf8\x95\xc6\xa9\xbc\x77\x63\xa7\xae\x6a\x15\x1e\x1a\x8b\xc3\xe2\xeb" + + "\x8e\x35\x1e\xf9\x80\xd6\x7c\xb3\x36\xdd\x78\x30\x15\xdf\x67\x72\x5f\x86\x4f\xee\xe0\x1d\x4d\x38\x77\xa8\x47\xa3" + + "\xf4\x37\x8d\x9b\x33\x29\xfe\x6e\xcb\xdc\x34\x4d\xdf\xbc\xcc\xf5\xb8\x95\x89\xed\x29\xce\x91\x95\xad\x1b\xd6\xd0" + + "\x22\xe5\xba\x68\x5a\x0a\x83\x0a\x12\x70\xf0\x54\xb4\xf1\x8e\x81\x02\xc7\x44\x4b\x9d\x8d\x80\x2a\x3f\xc4\x58\x87" + + "\xd8\xa0\x60\x89\xa7\x94\xf2\xa1\x6f\xa6\xf6\x24\x2b\x92\x63\x66\xe9\x8e\xcb\x6f\xfa\x7f\x23\x8b\xd3\x7d\xff\x0f" + + "\xe9\x2b\x65\xe5\x23\x73\x64\xea\x11\x18\x10\xb9\x66\xbc\x18\xc0\x4f\x53\x66\x40\x26\x91\xf1\x61\x47\x0e\x9d\x77" + + "\x90\xdb\x8e\xf7\xdd\x7d\x19\x9d\xa3\x08\x49\xdc\x32\x73\xb5\x07\xb0\x2f\xa4\xb1\x8b\xde\xbf\xb7\x4d\x1f\xa6\x13" + + "\x5d\x55\xeb\x55\xca\x94\xd3\xc2\x06\x79\x26\x1f\x09\x82\x4c\xff\x5a\xfc\x09\x96\x98\x43\x64\xf5\xd1\x36\xc3\x56" + + "\xe6\x10\x8b\x55\xd0\x60\xa0\x45\x08\x87\xea\x91\x3a\x29\x95\xe8\xbd\x83\x63\x2d\xf3\xd5\x18\x27\x6c\x78\x42\xb1" + + "\xd9\x2e\x8c\x92\x8e\x3e\xd6\x75\x91\xe9\x8e\x8a\x2e\x34\xad\xcc\x2b\x36\xe6\x63\x84\xb0\x8a\x88\x4d\x89\x48\x18" + + "\x18\xaf\xbc\x74\x76\x75\x89\x79\x99\xe0\xb5\x59\x02\xbb\x51\xc9\xe0\xd0\xc3\x27\x70\x5d\x92\x7a\xa1\x2d\x4a\x2f" + + "\xb7\x40\x66\x32\x90\x74\x93\x9e\x8d\x33\x0d\xcf\x85\x01\x83\xed\x52\x33\xf9\xde\x6e\xb8\x9e\x21\x2c\x68\xee\xa9" + + "\x2e\x35\x58\x34\x2e\x33\xc0\x29\x90\x98\xcc\x8a\xa3\x2f\x7a\xc6\xc4\x15\xc6\x2d\x10\x57\x4a\x9a\xea\xd2\x52\x73" + + "\xd7\x4a\xc6\x15\x4d\x30\xb0\xa6\xf6\x46\xff\xe5\x46\xb9\x6b\xa7\x4c\xa7\xf7\x34\x0d\x4d\xfe\x2f\x5d\x40\x6c\x53" + + "\x4a\xbe\x24\x29\x5e\x01\x57\x5e\x97\xb1\x15\xe5\x02\x1b\x83\xf1\xb1\xfe\x24\x1f\x18\x47\x0b\xe5\x5b\xe3\xba\xb7" + + "\xa8\x07\xc4\x48\x51\xf0\x37\xec\xd5\x5e\x4e\xbc\xc8\x3e\x46\x93\xe8\x83\xbd\xd9\x16\x2f\xb2\x48\x84\xcb\x9c\x72" + + "\x0c\xdd\xb6\x5b\x5b\xef\xab\xfb\xb7\xee\x10\x78\xc7\xf6\x1d\x46\x19\xb8\xb3\x07\x92\xd2\xf8\x39\x6f\xf3\x7d\x5e" + + "\xb0\x68\xd5\xb0\x01\xf5\x6e\xac\x5c\xd2\xa9\x69\xd3\xd6\x94\x67\xa4\x64\x2f\x8d\xb0\x52\xeb\xab\x7a\xe2\x1f\x11" + + "\x96\x48\x68\x39\x95\x6f\x8d\xa0\x30\xa5\xcc\x21\x09\xd7\x29\xde\xed\xbd\x45\xf6\xa1\x1f\x02\x7c\xd8\x7f\x1c\xc4" + + "\xe4\x05\x0b\xe1\x53\xbc\x45\x82\x82\xd4\x0d\x7d\xbe\x9a\xcd\x38\x90\xcf\xf8\x3a\x46\x7d\xa2\xe4\x8d\xe8\xeb\x72" + + "\xb7\x03\xb8\xf1\xd7\xb4\x26\x09\x68\x49\xa2\xb5\x02\x1f\xd4\xce\x46\x94\x3c\x41\xba\xf9\x59\x89\x1e\x7f\xcf\x06" + + "\x27\xcf\x8d\x82\xbe\x21\x71\x6d\x7d\x63\x0b\x6b\x60\x8f\x7d\x55\x00\x56\x7c\xa0\xaa\x5a\x35\x79\xfb\xc9\xba\xd4" + + "\xd5\xe8\xe1\x11\x19\x00\xd5\x0f\xad\x1c\x8e\xea\xb1\xb6\xf5\x53\x69\x53\x99\x33\xe0\x6d\xe7\xc5\x56\xe6\x03\xd0" + + "\x57\xbd\xf5\x8c\x9c\xd8\x41\x1e\xa9\x5e\x33\xed\xbe\x7e\x47\xd4\x6c\xf0\x20\xd0\xf0\x47\xcb\x78\x7f\x5a\x5b\x40" + + "\x51\x32\x3c\x66\x05\x0e\x6b\x25\xc9\xec\x23\x93\x79\xf8\x33\x62\x77\xae\x40\x34\x63\x20\xcf\xaa\x9b\xb0\x09\x3d" + + "\xea\xaa\x7a\xc2\xb7\x3c\xf9\xcf\x43\x53\x9d\x3f\x58\x55\x7f\xe4\x4f\x7d\x55\x66\x09\xab\xfc\x63\xe0\x8b\x62\x5d" + + "\x15\x89\x19\xe6\xb6\xa6\xc9\xde\xae\x9b\xea\x98\x67\xbb\xff\xf2\x3f\xff\xd8\xd7\xf3\x67\x69\xe0\xa6\x7f\xca\xd3" + + "\xa6\x6a\xab\x43\x37\x55\x55\xb6\x1d\x69\xba\x3f\xf4\x6a\xd7\x76\xcd\x0f\xdf\x7f\xf7\x90\xf0\xff\xfb\x9e\x55\x47" + + "\xcb\x0c\x94\x25\xaa\x2c\xfa\x6f\x02\xff\xcf\xaf\x35\xfd\x61\x66\x36\xaf\xa1\x35\x65\x87\xd5\xd8\xff\xc6\x2f\x4e" + + "\xdd\x1a\x46\x1e\x0c\x06\xf3\x11\x23\x8f\x86\xbc\x51\xed\xb8\x88\x50\xe9\xad\xee\xa2\x76\xb7\x57\xf0\x66\xb5\xe3" + + "\xca\xe5\xd0\xbc\xd5\xdb\xd5\x2e\xb0\x69\x77\x50\xbb\xc4\xa3\x76\x0f\xf7\x56\xbb\xe1\x78\xa2\x59\xe0\x4c\x58\xee" + + "\xdc\xcd\x1b\xdb\x65\xd5\x8e\xf8\x20\x7b\xae\xd6\xfc\x32\x3d\x16\xaf\xf5\x29\x4f\xab\x32\x4e\x4f\xf4\xb9\xa9\xca" + + "\xd8\x9c\x1e\x3d\xa0\xbc\x1f\x35\xaf\x4b\x41\x33\x40\xd3\x53\xd0\x4b\x43\x1c\x06\xb1\x3a\x56\x01\xf8\x95\xb6\xf4" + + "\xca\x4b\xb6\x7e\xc1\xfd\x9a\x5b\xda\xa8\xf8\x12\x67\xb5\x7d\x91\x0c\x10\x7d\x0b\x17\x96\xb3\xd2\x5e\x54\xa2\x52" + + "\xb9\x23\xa3\xd5\xaa\xe2\x03\xde\x6a\xaf\x91\xba\xda\x7c\xd6\x4f\x89\xc8\xbf\xad\xa0\xb6\xb5\x85\xa1\x76\x26\xd0" + + "\x45\xa4\xaf\xfe\xdd\x9e\x1e\xaa\x86\xea\x21\xce\xef\xff\x32\x4f\x16\xdb\xef\x03\x1a\xe7\x46\x27\x36\x7a\x5e\x66" + + "\x79\x4a\xba\xaa\x69\x3d\xba\xa6\xc2\x8e\x09\x12\xc1\x1a\x76\x7f\x56\xc0\xaf\x5a\xf3\x42\xf7\xdb\x82\xf2\x10\x00" + + "\x87\xc3\xbd\x2b\xd7\x03\x86\x18\xf7\x45\xae\x7b\xf3\x50\xf9\x35\xb7\x5a\xef\xcf\x59\xa2\xc7\xf8\x67\xe0\x88\x55" + + "\xdf\xae\x5e\x76\xb1\x3a\x3a\xe4\x3d\x8c\x0c\x77\xd4\xa2\xbf\x6c\xf1\x42\xdd\x74\x27\x1f\x1d\x7b\x3d\x7a\xb8\x51" + + "\x6e\x0c\xa0\xda\x0d\x64\x00\x57\x29\xb2\xbd\x73\xa3\xbd\x73\x64\x4f\xc3\x7f\x6f\x73\x50\x35\x9e\x0c\xda\xa3\x28" + + "\x2a\x31\xf4\xef\xa0\xda\xcc\xf5\xa8\xeb\xca\x50\x1b\x78\x65\x85\x0f\x28\xe3\x62\x84\x75\x11\xe2\xae\xae\xb9\xb3" + + "\x99\xea\x20\x9b\x46\x09\xe8\xa1\x08\x04\xb5\x69\x43\x69\xc9\x63\x41\xea\x8c\x94\x76\x36\xec\xd7\x9a\x58\xde\x3a" + + "\xb3\x0c\x47\xbe\xc4\x09\x35\xa9\x25\x0b\xfd\xc8\x9a\x34\x73\x62\x1f\x19\xae\x96\x16\xea\x9c\xd7\x1b\x9b\x09\xe7" + + "\x16\x66\xe7\xcd\x09\x65\x75\x5d\x45\x61\x13\x8a\x56\x93\x9a\x44\xd0\xaa\x80\xf2\x4b\x3d\x9f\x73\xe3\x25\x14\x5b" + + "\xfe\x65\x6a\x2d\x2a\x22\xc3\xee\xbe\xd3\xb3\x3f\x0c\x61\x0e\x75\xb8\x32\x96\x4f\xc9\x3e\x0d\xdf\x78\xf0\x79\x12" + + "\x8d\x40\xf1\xf9\x80\x79\x22\xfd\xc7\xae\xaa\x8a\x3d\x69\x34\x64\xf9\x4d\x80\x46\xd3\xb4\xa0\xa4\x39\xe4\x2f\x0a" + + "\x4a\x7d\x00\xd4\x7a\x91\x92\xbc\xa4\x4d\x7c\x28\x2e\x79\x36\xc0\x1a\xdf\x07\xaa\xb2\x40\x80\x6a\x44\x06\xb0\xac" + + "\x88\x4f\x55\x93\xff\xdc\x97\x14\x51\x36\x10\xb6\x0a\x00\x33\x2c\xce\x0a\x4a\xf9\x07\x5d\x4e\x3e\x18\x40\x0a\x1e" + + "\x50\x55\xb8\xda\x47\xc5\x6a\x49\x9e\x15\x44\xff\x1b\x50\x29\xc9\xf3\x9e\x34\xea\x4e\x20\x04\xd3\xbe\x43\x5a\x7d" + + "\x01\x3f\xa0\x0c\x24\xa4\x7f\x37\xc0\x0d\xb2\x43\x71\x4d\x8e\x1a\x15\xfe\x37\x28\x96\x17\x14\x15\x05\xf0\x49\x81" + + "\xa9\x2d\x0e\xf1\x9b\x17\x08\x57\x4c\x7f\x4f\xd9\xdc\xe4\xb8\x5e\x85\x4d\xcd\x34\x94\x30\x48\xe5\xdc\xba\x32\x10" + + "\x09\x51\x15\x54\x07\x86\xde\x0e\xe8\x60\xad\x1f\xad\xee\xb2\xbb\xc7\xea\x0f\x63\xb3\xbb\x17\x06\x7b\x41\xfa\xa4" + + "\xa6\x2c\x36\xd9\x81\x23\xd3\xf6\xce\xbd\x6e\xda\xf4\x2b\x1e\xf1\xb0\xb8\x57\x3b\x5c\xfa\x8b\xdd\xf0\xa2\x5b\xf4" + + "\x4f\xf9\xb9\xae\x9a\x8e\x94\x9d\x06\xad\x62\x52\x02\x98\xfd\x6d\xc3\x9e\x72\x71\xbd\x40\xdb\x19\x42\x00\xdb\x93" + + "\xd8\xff\xd3\x1b\x83\x40\xe6\x25\xdb\x6d\x90\x2f\x73\x5b\x3b\x0f\xea\x94\x55\x3f\x7f\xab\xfa\xfb\xc9\x6b\x17\x25" + + "\x9f\x93\x88\x00\x5f\xc2\x38\xba\x60\x4d\xf9\xb8\x9b\x84\x1e\x78\x00\x71\x51\xce\x47\x50\xb3\xc9\xe1\x90\xbf\x60" + + "\xf7\x40\xa4\xb3\xf1\xed\x37\xf1\xb9\x8d\x9f\x73\xfa\xb5\xc7\x84\x3e\x5e\x46\x9f\xf3\x94\x72\xbf\x43\x92\x13\x92" + + "\x89\x8b\xe3\x24\x52\x7f\x9c\x33\xf0\x47\x7b\x06\x7f\xbc\xb4\x41\x4c\x0e\x54\xb9\xd2\x01\x0a\xc5\x31\xe6\x2e\x37" + + "\xf6\x4d\x40\xf7\x7a\x3e\xf0\x62\x91\x38\x67\x36\x09\xf5\x0d\x21\xd1\x9e\x2d\x12\xed\xd9\x26\xa1\xbe\x21\x24\x5e" + + "\x5a\x8b\xc4\x4b\x6b\x93\x50\xdf\xb0\xb1\x86\xcb\x6a\x38\x36\x2f\xcf\xbe\x45\xbb\xcd\x7a\xa3\x7c\x42\x43\xf2\x3e" + + "\x6d\x67\xae\x03\x33\xb1\x6e\x2c\x56\x2c\x41\x9b\x11\xb8\xb8\xa9\xbe\x22\x35\x64\x00\x6d\x12\x75\xa7\x31\x2a\x29" + + "\x2d\x0a\x8b\xcc\x95\x8d\x07\x02\x1d\x13\xc1\xb5\x94\x79\x8f\x19\xa4\xc5\xc7\xfb\xd0\x46\x99\xd7\x8a\x46\xea\x31" + + "\xaf\x92\xf0\x35\x84\x3a\x2c\xb9\xdd\xce\xac\xca\xe5\x6d\x8d\xeb\xf4\xc5\xc2\x72\xe8\x0b\x0e\x37\xaa\x2f\xbd\x2d" + + "\x01\xfa\xe2\xa0\x12\xa2\x2f\x37\x49\xe4\x76\x25\xba\xad\xba\x37\x68\xd6\x5b\x2a\xbc\xa3\xba\xf1\x0b\x3c\x46\xe5" + + "\xb3\xd9\x76\x6b\xd5\x7e\xce\x6e\xd1\x37\x0b\xcb\xa1\x6f\x38\xdc\xa8\xbe\xf5\x13\x19\xd0\x37\x07\x95\xeb\xf4\xed" + + "\x1a\x91\xdc\x43\xe1\xae\xaa\xef\x2e\x1a\x77\x43\x8d\x77\x54\xb9\x19\xbb\xc7\x63\x54\x24\xaf\x8d\x5d\xa7\x5d\x16" + + "\x96\x43\xbb\x70\xb8\x51\xed\xea\x7d\x26\xa0\x5d\x0e\x2a\xd7\x69\x97\xa3\xf5\xf7\x50\x24\x17\xe9\xbb\xe8\x8c\x9f" + + "\xf8\x9b\xd5\x03\x9f\x68\xb9\xdb\x6c\xbb\x1d\x96\xa7\xf5\x36\x03\x2b\xaa\xb1\x66\xab\xeb\xaa\x19\x1f\x55\xa2\x1e" + + "\xcb\x4a\x5d\x57\x8f\xd6\x13\x82\xa4\xa5\x9a\x6e\x92\xaa\xf3\xea\x26\x17\x07\xc8\xc3\x3c\xd8\x01\x1e\x21\x71\xe5" + + "\xc0\xc5\x10\x1d\x63\xd7\x09\x3a\x3a\x7c\x19\xa6\x36\x82\xdd\xb4\xdc\x83\x58\x47\xbe\xda\xef\x77\x49\xed\xda\x01" + + "\x6f\x60\x83\x31\xfd\x46\x3e\xae\xb6\x0e\x28\xfe\xfd\xe4\x72\x0f\x83\x02\x88\x8b\x01\x82\xf5\x3c\x3e\x46\xfe\x4f" + + "\x00\x00\x00\xff\xff\x47\x37\xb0\x07\xc9\x28\x02\x00") func gzipBindataAssetsCssBootstrapmincss() (*gzipAsset, error) { bytes := _gzipBindataAssetsCssBootstrapmincss info := gzipBindataFileInfo{ - name: "assets/css/bootstrap.min.css", - size: 141513, + name: "assets/css/bootstrap.min.css", + size: 141513, md5checksum: "", - mode: os.FileMode(511), - modTime: time.Unix(1521004692, 0), + mode: os.FileMode(511), + modTime: time.Unix(1521004692, 0), } a := &gzipAsset{bytes: bytes, info: info} @@ -823,158 +821,158 @@ func gzipBindataAssetsCssBootstrapmincss() (*gzipAsset, error) { var _gzipBindataAssetsFaviconico = []byte( "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5a\x0b\x70\x55\xc7\x79\xde\x7b\xce\x45\x12\xb2\x90\xc4\xc3\xe6\x61" + - "\x3b\x90\xf8\x31\xc4\x19\x6c\x32\xe3\xc4\x34\xe3\xc6\x34\x6d\xed\xd4\x69\x62\x32\x49\x9a\xa6\x75\xea\x36\x33\xee" + - "\xd8\x9e\xb4\x75\xdc\x7a\xa6\xc5\x31\x02\xa6\xd3\x84\x47\x28\x6f\x3b\xc6\x3c\xcc\xeb\x9e\xbd\x08\x21\x04\x92\x28" + - "\x12\x0e\x08\x5b\x3c\xec\x02\x92\x78\x08\x21\x09\x41\x25\x24\x10\xe8\x71\xb5\xe7\xdc\xd7\xb9\xf7\xef\xfc\xff\x9e" + - "\x73\x74\x25\xdd\x97\x24\x82\x33\x1e\xce\xcc\x3f\x7b\xee\x9e\xdd\xff\xff\xf6\xdf\x7f\xff\xfd\xf7\xdf\xcb\x98\x8b" + - "\xa9\x2c\x3f\x1f\xcb\x19\xec\x15\x37\x63\x5f\x67\x8c\xcd\x98\x21\x7f\x6b\xf9\x8c\x6d\x72\x33\x36\x7b\xb6\xf5\xfb" + - "\x11\xc6\x9e\xbd\x97\xb1\x99\x8c\xb1\x7c\x6c\xc7\x64\x3d\x3d\x6e\x76\xdb\x1f\xe1\x75\xab\x42\x53\x7e\x22\x3c\x6c" + - "\x91\xf0\xb0\x02\x22\xae\x14\x08\x8f\xab\x40\xec\x64\x92\xf0\x5d\x53\xfe\x59\xec\x64\x5f\x15\x1e\xa6\x08\x4f\x7f" + - "\x7f\xdf\x7a\x96\xa1\x97\x3c\xb8\x3f\x78\xfa\x0d\x08\x9e\x5d\x08\xc1\xda\x5f\x82\x51\xf6\x65\x30\xca\x67\x41\xf0" + - "\xcc\xbf\x11\x19\x07\x1e\x07\xbd\x78\x2a\x18\x65\x8f\xb5\x0b\x4d\x7d\xad\x6f\x07\x73\x0b\xcd\x45\xfd\xbb\x17\xb3" + - "\x0c\xa3\x62\xce\xfe\xa8\xd1\x0a\xf8\x98\x6d\x25\x10\x38\xfe\x53\x88\xdc\x3a\x01\x66\x6b\x11\x11\xbe\x07\x8e\xfd" + - "\x2d\x84\x2e\x2c\x05\xff\xd1\x79\x3d\xc2\xc3\x7e\x20\x78\x06\x13\x5c\x89\xe9\xdf\x06\xd1\x50\x2f\x04\x4e\xfc\x0c" + - "\xcc\x6b\xa5\x60\x1c\xfd\x21\x74\x6c\x1e\x47\x84\xef\x58\x17\xf8\xe4\x65\x30\x6f\x54\x81\x71\xe0\x89\xea\xbe\x2d" + - "\x6c\xd2\x80\xfe\xfe\x76\x30\x6f\x1c\x81\x60\xed\x7c\x08\x9e\x5d\x0c\x2d\xeb\xc7\x41\xed\xd2\x29\x50\xbb\x74\x32" + - "\xbd\x63\x1d\x7e\xc3\x36\xa1\x73\xff\x19\x14\x1e\x36\x4f\x78\xc7\xc4\xf4\xef\x80\x70\xd3\xfb\x10\x6e\x5c\x0f\xdd" + - "\x65\x73\xe1\xdc\xf2\x89\xd0\xb1\x25\x0f\x6e\x7c\x90\x07\xe7\x7f\x33\x81\xea\xf0\x5b\xb8\x79\x13\x61\xd0\x8b\xa7" + - "\x2c\x09\x7c\xfc\x57\xac\x7b\x11\xf6\x7f\x6a\x5f\xd4\xb8\x06\xa1\xfa\x15\x10\x6e\x7a\x0f\x3a\xb4\xc7\xa0\x61\x55" + - "\x3e\x04\x8f\xfc\x39\x84\x3e\xfa\x4b\x68\x5c\x93\x4f\x75\xf8\x2d\x74\x71\x05\x44\x45\x13\xea\x54\xeb\x7c\x85\xa9" + - "\x48\xf8\x1e\x15\xcd\xf4\xcd\xee\x7f\x71\x65\x3e\x04\x3e\x7c\x86\x78\x5c\x5a\x1d\xd3\xbf\x7e\x05\xa0\x2c\x94\x89" + - "\xb2\x03\xd5\x3f\x66\x88\x05\x31\x21\x36\x1b\xff\xd9\xe5\x13\xe1\xda\xc6\x5c\x68\xdf\x94\x4b\x63\x71\xf0\x37\xbd" + - "\x0f\x38\x56\x1c\x33\x8e\x1d\x75\x80\xba\x40\x9d\x0c\xd6\x5f\xcd\x92\x29\x44\x83\xf5\x87\xba\x76\xfa\x73\x85\xe1" + - "\x5c\x18\x07\x9e\x38\x86\x18\x68\x8e\xac\xf9\xbb\xbe\x39\x87\xc8\x99\xbf\x13\x3f\xa3\x39\xc6\xb9\x8e\xed\x4f\xb6" + - "\xe0\x61\x3f\x40\xdb\x40\x1b\x41\x5b\x19\x62\x3f\xc7\x7f\x4a\xb6\x85\x0f\xda\x9a\xdd\x9f\xd6\x80\xe6\x62\xd2\x26" + - "\xd5\xd7\xd0\x46\xc9\x56\x0f\x3c\xde\x6f\xbf\xe5\xb3\xc8\xa6\xd1\xb6\xc9\xc6\x4f\xbf\x01\x68\xf3\x68\xfb\xce\x3a" + - "\xf2\x30\x26\x76\x32\x85\xd6\x08\xae\x95\xc1\xeb\x87\xd6\x14\xb3\x69\x11\xad\x39\xaf\x5b\x1d\xed\xfa\x05\x60\x8c" + - "\x65\x32\xc6\x54\x8b\x5c\x31\x64\x3d\x0b\x63\xe8\xb0\x45\x2d\x56\xdf\x99\x96\x8f\x99\x1b\xeb\x67\xf2\x47\x8b\xea" + - "\xf3\xf9\x08\xae\x22\xe5\x09\xae\x4e\x17\x5c\xfd\xc2\x28\x69\x8a\xe0\xca\x58\xb4\x3d\xdb\x17\xa6\x29\xff\x5f\x04" + - "\x57\x5b\x85\xe6\xba\x92\x90\xb8\x1a\x43\x4a\x4c\xbd\x62\xd7\xb7\x08\xae\xd6\x0b\xae\xfe\x8f\xe0\xea\x9b\x38\x1e" + - "\x1f\x1f\x4b\xfe\x34\xb5\x7c\xa5\x40\xec\xca\x02\xbd\x64\x3a\xe8\xfb\xbe\x38\x94\x4a\xa6\x83\xf0\x66\x82\xd0\x14" + - "\x10\x9a\x0b\x44\xe1\x38\x5c\x2b\x44\xf8\x4e\x75\x5c\x01\xe1\x75\x03\xf2\x11\x9a\x2b\x2a\xb8\x52\x2b\xb8\x3a\x4f" + - "\x68\x8a\x92\x0c\x03\xc9\xf7\xb0\x02\xa3\xfc\x2b\x10\xe9\xae\x85\xa8\x7e\x15\xa2\xfa\x95\x18\xba\x0a\xa1\xb3\x8b" + - "\x49\xbe\xbe\xe7\x5e\x08\xfe\xef\x3f\x81\xd9\x51\x09\x91\xbe\x4b\x44\xf8\x8e\x75\xf8\x4d\x70\x37\x04\x3e\xfe\x11" + - "\xf9\x14\xbd\x68\x3c\xe2\xe8\x14\x5c\x7d\x49\x78\x99\x2b\x11\x06\x47\xfe\x81\xd9\x10\x0d\xde\x82\xc1\x8f\x79\xe3" + - "\x30\xe8\x7b\xa7\x81\x51\xfa\x28\x98\xd7\xca\x00\xa2\xa6\xfc\x80\x65\xcc\x3b\x7e\xc3\x36\xfa\xde\x07\x08\x93\xd9" + - "\x5a\x0c\xfa\xfe\x87\x41\x68\xac\x43\x70\xf5\x59\x92\xe3\x1d\xea\x1a\x92\xc9\x8f\x06\x3a\xc1\xff\xe1\x5c\xda\x67" + - "\x91\x27\x3e\x91\xde\x0b\xe4\xaf\xfc\x47\x5f\x20\xc2\x77\xac\x23\xac\x1d\x95\xd4\xd6\xff\xe1\x9f\x10\x2f\xfa\x5d" + - "\xf2\x05\xc4\x70\x4c\x70\xf5\x7e\x94\x35\x1c\xf9\xa1\xc6\x77\x68\x3e\x43\x17\x57\x4a\xfe\xe8\xc3\xcb\xbe\x8c\xfc" + - "\xa0\xcf\x23\x09\xdf\xb1\x0e\xbf\x51\x9f\x8b\x2b\x65\x9f\xc6\x77\xe8\x37\xee\x4f\x62\xd7\x58\xb4\x8f\x05\x3e\x9e" + - "\x35\xc4\x1e\x13\xc9\x8f\x06\xbb\xc0\xa8\xfc\x23\xf0\x1f\xfa\x63\x88\x86\xba\x21\x72\xeb\x24\x18\xfb\x1f\x82\xde" + - "\x1d\x2e\x68\xdd\x30\x0e\x1a\x56\x4f\x24\xc2\x77\xac\xc3\x6f\xd8\x06\xdb\x62\x1f\xec\x8b\xef\x10\xd6\xc1\xff\xd1" + - "\xf7\x11\x67\x83\xe0\xea\x97\x06\xeb\x20\x91\x7c\xd2\xdd\xee\x3c\x08\x37\x6f\x04\x30\x0d\x08\x7c\x34\x8f\xe4\x34" + - "\xae\x99\x00\xa7\x7f\x3d\x0d\x4e\xfd\xea\x7e\x22\x7c\xc7\x3a\xfc\x86\x6d\xb0\x6d\xb8\x69\x23\xf5\xb5\xe7\xcc\x6c" + - "\x3f\x00\x62\x77\x6e\x54\x68\xae\x57\xad\xf5\x96\x52\x7e\xb0\x6e\x01\xe8\xfb\x66\xd0\x1a\x30\xaf\x95\x83\x28\xcc" + - "\x81\x2b\xef\xe6\x92\x3c\x24\x8a\x63\x96\x4d\x71\x7e\xe3\x37\x6c\x83\x6d\xb1\x0f\xf6\x0d\xd6\x15\x48\x5d\x86\x7c" + - "\x64\x47\xc2\xc3\xf6\x0a\xae\x66\xc6\xea\x20\xae\xfc\x48\x08\xfc\x55\xdf\x05\x7f\xd5\x77\x00\x22\x41\x08\x7e\xfa" + - "\x2a\x74\x6d\x53\xa1\x6e\xf9\x64\x92\x75\x69\xcd\x44\xb8\xb9\x35\x13\x6e\x6d\xcb\x80\xe6\x75\xe3\xa9\x0e\xbf\x61" + - "\x1b\x6c\x8b\x7d\xb0\xaf\xbf\xea\x7b\xc4\x8b\xec\xe2\xec\x22\x9c\x83\x66\xc1\xd5\x19\xa9\xe4\xd3\xdc\x1f\x98\x0d" + - "\xc1\x33\x6f\x42\x34\xec\x03\x7f\xe5\x1c\x68\xdb\x30\x96\xe4\x9c\xfb\xcd\x7d\xd0\xbd\x63\x0c\xe8\x85\x63\x41\x2f" + - "\xbc\x07\x7a\x3d\x6e\xa8\x5f\x39\x89\xbe\x61\x1b\x6c\x8b\x7d\xb0\xaf\xe4\xd9\x65\xd9\x6e\x19\x88\x5d\xd9\xba\xd0" + - "\x5c\x73\x53\xca\xd7\xff\x0f\xf4\xfd\x0f\x41\xa8\x61\x35\xf9\x1f\x7d\xdf\x74\x68\x5e\x97\x47\xf3\xdd\xf2\x4e\x1e" + - "\xc9\x0d\x9f\xfc\x3b\x30\x4f\xbd\x02\xc6\x9e\x09\xd0\xba\x21\x07\x4e\xfd\x6a\x1a\xb5\xc1\xb6\xe4\xb3\x1a\x56\x13" + - "\x0f\xe4\x25\xd7\xed\x39\x5c\x9b\x51\xa1\xb1\x17\xe3\xc8\x7f\x0b\x63\x13\x5c\xef\xd4\xb6\xaf\x91\x7c\x6b\xf8\xf2" + - "\x16\x5a\xdb\x62\xcf\x64\xb8\xb4\x7a\x3c\xc9\x68\xdb\x90\x0d\xfe\xb2\x87\x01\x2e\x2d\x07\x68\x5a\x05\x81\xca\x27" + - "\xe1\xfa\xe6\x4c\x39\x2f\xab\xc7\x53\xdb\x88\xaf\x9e\xfa\x22\x0f\xe4\xe5\xc4\x47\xa5\x8f\xa2\x0d\xfc\x22\x8e\xfc" + - "\x5f\xe0\x37\x3b\x5e\x4f\x2e\xff\x1e\xf0\x97\x7e\x11\xa2\x0d\x4b\x00\x9a\x56\x42\xe0\xe0\x13\x70\x7d\x53\x56\x6a" + - "\xf9\x81\x4e\x8a\xbf\x70\xac\x43\xe4\x6b\xec\x45\xd4\x0d\xea\x28\xbe\xfe\x67\x38\xfa\x6f\x5e\x97\x2f\xfd\xcb\xd1" + - "\xe7\x21\x74\xec\x87\xa0\xef\xce\x81\xab\xbf\x1d\x67\x7d\xcb\xb3\xd6\xcc\x50\xfd\xe3\xdc\xe2\x1c\xcb\xb3\xd0\x60" + - "\xf9\xae\xb9\x68\x1b\xe4\xdf\x53\xd8\x1f\xda\x39\xda\xbe\xee\x55\x41\xf7\xba\xc9\x16\xcf\xaf\xb8\x2f\xa5\xfd\x25" + - "\x95\x8f\x6b\x42\x63\xcd\xb8\xcf\x25\x5c\x7f\x5b\xe5\xfa\xc3\x39\xb8\xf0\xdf\xf7\x42\xfb\xc6\x7b\xa0\x63\x53\x36" + - "\x5c\x5c\x35\x29\xad\xf5\x97\x42\x7e\x26\xfa\x06\xda\x37\xc2\xbe\xb4\xfc\x0f\xd2\x99\x25\xd3\xd2\xf2\x3f\xc9\xe5" + - "\x2b\xf6\x1c\xbc\x86\x3e\x12\x7d\xe5\x50\xff\xeb\x8f\xe3\x7f\x25\x0d\xf5\xbf\xfe\x21\xfe\x37\x99\xfc\x18\x1d\x7c" + - "\x09\xf7\x08\xdc\x2b\xc0\xd4\x69\xef\x30\x2a\x46\xb9\xff\x58\x73\x9f\x5a\xbe\xc2\x7c\x1a\xed\x8d\x0b\x70\xaf\xc4" + - "\x3d\x53\xee\xbf\xef\x8e\x7a\xff\x4d\x47\x7e\x8c\x0e\xee\xc7\x58\x01\x63\x06\xd4\x1d\xf6\x41\x9b\x18\x51\xfc\x61" + - "\xf9\xb2\xb4\xe5\x7b\x55\x1b\xc3\xb3\x18\x33\x61\xec\x84\x31\x14\xf1\xdc\xfb\x40\x5a\xf1\x97\x4e\xf1\xd7\x34\x8a" + - "\xd9\x06\x3f\xa9\xe4\x3b\xb6\x48\xb1\xa2\xfa\x12\xc6\x8e\x18\x43\x62\x2c\x89\x31\x25\xc6\x96\x29\xe3\x4f\x6f\x26" + - "\xc5\xaa\xf1\x62\x58\x8c\x6d\x31\xc6\x4d\x26\xbf\x7f\x3d\x60\xcc\xac\xce\xa3\x18\x1a\x63\x69\x8c\xa9\xb9\x5b\xc6" + - "\xd8\x14\x7f\xe7\xc4\xc4\xdf\x39\xb2\x0e\x63\x73\x8c\x91\x93\xc5\xf0\xc4\x47\x49\x2a\x9f\x30\x68\x0a\xf3\x15\x65" + - "\x31\x6b\xaf\x7e\xd3\x3a\x53\xd4\x5b\x67\x8c\x44\xe7\x0f\x49\xc9\xcf\x30\xad\xd6\x59\x27\xa9\xfc\x58\x5d\xf4\x69" + - "\x14\x2f\x8d\x95\x67\xab\x51\x9f\xcf\xa6\x5b\x67\xbd\xb4\xe4\x7f\xde\x1f\x7b\x6d\x1c\x66\x2a\x1c\x66\x0c\xe9\x99" + - "\xc3\x8c\x4d\xb7\x28\xcf\xa2\x4c\x8b\xd4\x74\xa8\xc5\xa2\x1e\x8b\x02\x16\x99\x8c\xa9\xc0\x48\x90\x6a\xcb\x9d\xc9" + - "\x18\x9b\xcd\x18\xfb\xfb\xd8\x3c\xc5\xc3\x9f\xb5\x56\xee\x3e\x77\x9f\x3f\xcc\xc7\xda\x1f\x1f\x16\x5c\x7d\x5b\x70" + - "\x75\xa1\xe0\x6a\xc1\xef\x89\x6c\xde\xff\x2a\xb8\xfa\x37\x82\x2b\xb3\x05\x57\x72\x7a\x35\xc6\x0c\x2d\x79\x3e\x29" + - "\x0d\xfc\xdf\x16\x5c\x0d\x0a\xae\xc2\x1d\x22\x53\x70\xb5\x53\x70\xf5\x20\xed\xeb\x5c\xc9\xc7\x58\xc3\x48\x33\x3f" + - "\x97\x18\xbf\x42\xb1\x57\x5a\x84\x6d\x07\x60\x4a\xd2\x37\x6e\x5b\x97\xfd\x1b\xf5\x56\x2a\xb8\xfa\x24\xec\x67\x4c" + - "\xe7\xc3\x1b\x83\x83\x5f\x73\x05\x31\xc6\x0b\xd6\xbe\x45\xe7\xf2\x64\x14\x3c\xbb\x08\x8c\x8a\xa7\xfa\x71\x21\xc6" + - "\xc2\x1c\x30\x0e\x7e\x0d\x02\x27\xfe\x81\x78\x20\xe1\x3b\xd6\xc9\x78\x84\x39\xd8\xf5\xe2\x29\x60\x94\xcd\x04\xe1" + - "\xcd\x8a\x1d\x47\xa3\xe0\xea\x0b\x7e\xce\x5c\x7a\x8a\xfc\x64\x7c\xfc\x2c\x48\xf1\x75\xb8\x6f\x48\x9c\x37\xf8\x31" + - "\xdb\x4a\x64\x9c\x84\xb2\xbd\x19\xe0\x3f\xf2\x17\x60\xb6\xee\x85\x68\xe0\x26\x40\x34\x12\x13\x20\x46\xa8\x0e\xbf" + - "\x61\x1b\x6c\x8b\x7d\xf4\xe2\xc9\x10\x6a\x58\x0b\xe1\xcb\x5b\xc1\xa8\xfc\x46\xff\x9c\x70\xb5\x0d\xc7\xd0\xa3\x65" + - "\x33\x91\xe6\x3c\x0c\x17\x7f\xa4\xeb\x14\xc5\xb4\xc2\xc3\xe8\x3c\x43\xb1\x65\xb0\x3b\xe5\x98\xb1\x0d\xb6\xc5\x3e" + - "\xf2\x7c\x30\x13\x22\xdd\x35\x10\xf5\x5f\xa7\x73\xa9\x28\xbc\xc7\x1e\x43\x93\xe0\xca\x53\x14\x73\x16\xa6\x8e\x89" + - "\x86\x83\x9f\xce\x41\x55\xdf\x23\xec\x62\x77\x2e\x9d\xc7\xed\xb3\xa8\x1c\x5c\x10\xa2\xa2\x05\x22\xb7\x3e\x21\xc2" + - "\x77\xac\xeb\xff\x1e\xa2\x3e\xd8\x17\x79\x20\xaf\x68\xa8\x87\xda\x84\xea\x97\xcb\xbc\xb3\x1c\x43\xa5\xe0\xea\xe4" + - "\x74\x62\xba\xe1\xe0\x0f\x35\xac\x91\x36\xc0\xdd\x10\xac\x7b\xbb\x1f\x7b\x34\x0c\x66\x47\x05\xdd\x3d\xe9\xa5\x8f" + - "\x80\x5e\x34\x51\x52\xe9\x23\xf2\x3e\xaa\xa3\x82\xda\xd8\x63\x08\xd6\xfe\x52\xc6\xee\xde\x0c\xe2\x69\x8f\x1d\xcf" + - "\x4d\x92\xbf\x1a\x45\x7f\xeb\xf3\x32\x57\x5f\x0a\x3b\x4a\x17\x3f\xea\xd2\x28\x9f\x25\xf5\x76\xe4\x3b\xfd\x79\xad" + - "\x70\x1f\x84\xce\xff\x17\xe8\x7b\x26\x59\xfe\xc6\xca\xdb\xdb\x3e\x46\x63\xf4\x0d\xdb\xd8\xbc\xe9\x0c\x78\xe4\x79" + - "\xe2\x85\x3c\x69\x9e\x68\x7e\x7b\x21\x50\xfd\x63\x7b\x4d\x5f\x13\x5c\xfd\x7a\xca\x73\x45\x9a\xf8\x69\x7e\xad\xb5" + - "\x67\xde\xa8\xea\xd7\x59\xdd\x02\x79\x0f\xc1\xa5\x1f\xe9\xd9\x39\x06\x6e\x6e\xcd\x22\xc2\x77\xb9\x36\x5d\xd4\x06" + - "\xdb\xda\xf6\x64\xde\x38\x42\xbc\x90\x27\xf2\x76\x4c\xac\xbb\x86\x72\x44\xd6\x18\xde\xd3\xb9\xcb\x9d\xcc\x1f\xa5" + - "\x83\x9f\xf2\x5c\x15\x73\x48\x5f\x81\x4f\x5f\x75\xce\xa8\xe1\xcb\x5b\x1c\x9b\x45\xac\x57\xde\xcd\xa3\x5c\x66\xcd" + - "\xd2\x29\x44\xf8\x8e\x75\x72\x1c\x0a\xb5\xc5\x3e\x92\xa9\x49\xbc\x68\x0e\x2a\xe6\x0c\x38\x5b\x87\x2e\x2c\xb1\xce" + - "\x86\x6a\xbb\xe0\xea\x57\x93\x9f\x2d\x53\xe3\xa7\x5c\xcf\xae\x6c\xb2\x03\xb3\xb3\x5a\xea\xa9\xaf\x51\x9e\x5d\x35" + - "\x06\xdd\xdb\x33\x9c\x9c\x53\x3c\xc2\x6f\xd8\x86\xfc\x4e\xf9\x57\x9c\xfc\x9f\xd9\xf9\xb1\xb4\xbb\xc2\x6c\x30\xdb" + - "\xcb\xfb\xf5\xa5\x5f\x95\x79\x41\xb9\x67\x2c\x12\xdc\x9d\xf0\xce\x2a\x1d\xfc\xe4\xdf\xc8\x5f\x7c\x97\x72\xf1\x54" + - "\x57\xf3\xef\x64\x17\xbd\x1e\x37\xe5\x6c\x12\x61\xb7\x09\xdb\x60\x5b\xec\x83\x7d\xe5\x00\x0c\xe2\x89\xbc\x51\xc6" + - "\x00\x99\x75\x0b\x6d\x1b\x3a\x2e\xb8\x32\x61\xa4\xf8\xf1\x37\xe5\xe9\x35\x06\xa1\x86\x55\x96\x7e\x5a\xc0\x28\x9d" + - "\x49\x75\xad\xef\x8d\x1b\x82\xb5\x76\xd9\xc0\x7b\x00\x9b\xb0\xad\xed\xfb\xa3\xfa\x15\x69\x2b\x17\x57\x51\x1d\xca" + - "\x88\x95\x8d\xfe\x57\xde\x9f\x29\x3e\xc1\xd5\x6f\x26\xce\x8f\x24\xc7\x1f\xf1\x35\x80\x5e\xf2\x00\xe8\xbb\xf3\x21" + - "\x72\xf3\x98\x65\xf7\x1f\x80\xf0\x8e\x81\x9e\x1d\x63\xc8\xc6\x6d\x7c\x35\x4b\xa7\x92\xbd\xdf\xda\x96\x09\x5d\xdb" + - "\x33\xa1\x6d\x43\x8e\x73\xbf\x60\xe7\xf9\xb1\x0f\xfa\x48\xdc\x7b\x89\xff\xcd\x6a\xe2\x4d\x79\x65\x5f\xc3\x40\xbd" + - "\xfd\xee\x5b\xb6\x0d\x51\x7e\x3b\xde\x3a\x4e\x85\xdf\xec\x38\x44\xb6\x6f\x94\x3d\x46\xff\x67\xc0\x27\x70\xf2\x65" + - "\xe2\x7b\xed\xfd\x9c\x98\xbc\xe7\x54\xa9\x5f\x27\x16\x50\x40\xe7\x2a\x5c\xdf\x9c\x4d\xf7\x32\x76\x3b\xec\x83\x7d" + - "\x03\x9f\xfc\xa3\xc4\xe9\x6f\x27\xde\x28\x03\x65\x0d\xb0\xa1\x9a\xff\xb0\xf1\x6f\xd3\xb9\x2b\xee\x9d\x69\x2a\xfc" + - "\xa4\x6b\x9c\xdf\xc3\xcf\x01\x44\x02\x94\xcb\x35\x2a\x9f\xa6\xba\xa6\xb5\x13\x9c\x7c\x29\xae\x51\x9f\x47\xe6\x93" + - "\xf4\xc2\x6c\xd0\x77\x8f\x73\xe2\xcd\xcb\xeb\xf3\x9d\xfc\x2a\xf6\x21\x7e\x87\x9e\x96\x79\xe1\x48\x80\x78\x63\x1d" + - "\xca\x1a\x20\xfb\x2a\xb7\xf7\xb3\x6a\xc1\x95\xdc\x91\xe0\x0f\x5d\x58\x26\xfd\xe6\xf1\x97\xa4\xbe\xc4\x65\xca\x5d" + - "\xf5\xee\x54\x29\xe7\x6d\xeb\xb5\x0d\xf5\xca\x5d\x60\xec\x9d\x4a\x77\x30\x91\xda\x37\xc0\x5f\x3e\x93\xc6\xd3\xf9" + - "\xc1\x58\xb2\x2d\x3b\x4f\xee\xdb\xa9\x12\x0f\xe4\x45\xf3\x79\xfc\x25\x92\x81\xb2\x06\xd8\xee\xcd\x13\xf2\xce\x98" + - "\x2b\x4d\x82\xab\x0f\x26\xc9\x91\x3e\x97\x08\x3f\xed\x4f\x3b\x19\x04\x4f\xbd\x2e\x79\xf6\xd4\xd2\xbe\xd3\xbd\x7d" + - "\x0c\x9c\xb5\x6c\x1b\xb1\xe1\x7e\xa5\x7b\x55\x08\x1d\xfb\x11\x40\xf3\x5a\x22\xf3\xf4\xcf\x69\x2e\xd0\xff\xa3\xed" + - "\x23\x7e\xec\xd3\xbd\xdd\x4d\x31\x74\xa4\xa7\x4e\xca\x38\xf5\xba\x94\x81\xfb\x5b\xac\xef\x10\xcd\x74\xf7\x64\xdd" + - "\x79\xcf\x4a\x82\xff\x5b\x42\x63\x86\x71\xf0\xc9\x21\xb1\x24\xf9\x4e\xe4\x5d\x3b\xdf\xd2\xc9\x71\xd0\x8b\xf2\xa1" + - "\x6b\x5b\x86\xe3\x63\xb0\xec\xda\x9e\x41\xf7\x6f\x66\xcd\xeb\x00\xcd\x6b\x00\x9a\x56\x43\xb4\x7e\x31\x18\x7b\x27" + - "\x83\xcf\x23\xe7\x0a\xf1\x3b\x6d\x8b\xf2\xe9\xff\x3a\x24\xa3\x76\xbe\x94\x31\xc8\x87\x62\x6c\x4a\x31\x8b\xc6\xfa" + - "\x04\x57\x9f\x4e\x82\xff\x69\x6c\x43\xb1\x88\xff\xfa\xc8\xf0\x6f\xcb\x00\x7d\x57\x16\x98\x67\x7e\xde\x8f\xff\x42" + - "\x01\x18\xc5\x93\x08\xff\xf9\x91\xe0\x0f\x76\x03\xea\x14\x75\x4b\x3a\x4e\x8c\x7f\x16\xe5\x96\xf7\xcd\xa0\x39\x4b" + - "\x6e\x3f\x75\x34\xf7\x68\x03\xb6\xfd\xa0\xef\xb9\xb1\x85\xee\xd3\x21\x78\xe4\xcf\xe8\x0e\x10\xed\x27\x7c\xe2\x45" + - "\xd0\xbd\x19\xd0\xbd\x23\x83\xda\x0e\xdb\x7e\xc2\x7d\x74\x67\x81\xb6\x4d\x36\x9e\x18\xff\x83\xb8\x46\xf4\xa2\x09" + - "\x74\xdf\x31\x92\xf5\x7b\xf5\xb7\xb9\x96\xef\xc9\x81\x60\xd5\x73\x10\xaa\xfe\x3e\xe8\xc5\xf7\x82\xce\x15\xba\xd3" + - "\xc2\x31\x9e\xfa\xb5\xbd\x7e\x95\xb4\xd6\xef\x20\xfc\xdf\x8e\x8f\x9f\x72\xeb\xb9\xe4\xa3\x70\x5f\xb9\xca\x07\xf0" + - "\x48\xd7\x7f\x9e\x5b\x81\x7b\x53\x46\x7f\xec\x6c\x91\x4f\xeb\x8f\x2f\xb0\x6d\xe3\x30\xfc\x67\xba\xf8\xe5\xde\xa0" + - "\x6e\x47\x1e\xc1\x9a\xf9\x03\x78\xa4\xbb\x7f\x21\x35\xad\x1b\x0f\xbd\x9e\x31\xd6\x3d\xa6\x0a\x7d\x9a\x9b\xe6\x05" + - "\x75\x3f\x64\xff\x3a\xf9\xb2\xb5\x46\x13\xef\x5f\xe9\xe0\xd7\xed\xbb\x3e\xdc\xa3\x51\x2f\xbf\xfb\xd3\x81\x71\x48" + - "\xdc\xf8\x61\x6b\xdc\xf8\xc1\xde\xc7\x30\x6e\x40\x9c\xa8\xeb\x58\xec\xc3\x89\x1f\xd2\xc5\x1f\xb3\x06\xbe\x29\xb8" + - "\xd2\xa7\xef\xb9\x0f\x22\x5d\x9f\x0e\xe0\xe1\xc4\x6f\x17\xd3\x8b\xdf\x12\xd1\x70\xe2\xb7\xe1\xe1\xa7\x35\x30\x81" + - "\x62\x55\xcd\x45\xe7\xd0\xd8\xe7\xb3\x88\x9f\x87\x85\x5f\x53\x18\xfd\x3f\x95\xab\x8b\xe5\x19\xe3\x71\x3a\x43\x38" + - "\x6b\xe0\xf7\x76\x7e\xa9\x8e\x7b\x7e\x19\x2e\xfe\x18\x1b\xc2\xb3\x5a\x07\x9e\xdd\xf0\x0c\xe7\xf0\xb9\x23\xe7\xc7" + - "\x9b\xa3\xc4\x4f\x7e\xc8\x8d\x67\x66\x3a\xa7\xef\x7f\x88\xce\xd2\xf6\x93\xf6\xf9\x7d\x47\xcc\xf9\x7d\x47\xb2\xf3" + - "\x7b\x55\xdc\xf3\xfb\x48\xf1\xc7\xcc\xc1\xd7\x28\x77\x81\x3e\xae\xfa\xaf\x29\xa7\x01\x43\xf2\x27\xcf\x0f\xcc\x9f" + - "\x9c\xbb\x3d\xf9\x93\xd1\xe2\xef\xe3\x2e\xe6\xe3\x4c\x91\x67\x66\x35\x8a\x7e\x8e\xd6\xb2\xa5\xb3\xd4\xf9\xab\x17" + - "\xc1\x28\x7d\x04\xf4\x3d\x13\x89\x8c\x44\xf9\xab\xba\xb7\x87\xe6\xaf\x6e\x03\xfe\x98\x39\x98\x2c\xb8\x7a\xc8\xb6" + - "\xd9\x50\xfd\x32\x99\x1b\x0c\xf5\x38\xfe\xe2\xf6\xe5\x0f\x13\xe7\x4e\x47\x84\xbf\x50\xb5\xfd\xe9\x1c\x2b\x97\x4a" + - "\xb9\x55\xfa\xdf\x50\xe0\x3a\x44\xba\xcf\xc8\xdc\x37\xda\x8a\x9d\xbf\x4d\x82\xc1\xc1\x62\xe5\x6f\xb1\x0f\xe5\x7e" + - "\x4b\x1f\xa5\x5c\x70\xd2\x3e\x23\xc0\x4f\x63\xf0\xba\x58\x8f\x27\x1b\xe7\xe1\x05\x99\xd3\x56\x68\xbe\x8d\xca\x6f" + - "\xd0\xbe\x19\x6a\x58\xeb\xac\x3d\x27\x7f\xde\x56\x92\x7e\xfe\xbc\xe4\x41\x30\xdb\xf6\xa5\x1e\xf3\x08\xf1\xe3\xa3" + - "\x7b\x15\x66\xec\xa2\xff\x6d\xbc\x60\xdd\x2d\x48\xbc\xbb\xb2\xe8\xbf\x31\x7a\xf1\xd4\x24\xf7\x17\xf3\x89\x12\xdd" + - "\x5f\x18\x15\x4f\xd1\x1d\x48\xca\x7b\x92\xda\xb7\xac\xff\xda\xba\x86\x8d\x9f\xc6\xc0\x5d\x0c\xbc\xe4\x5b\xd1\x27" + - "\x95\x39\x77\x64\x8e\x8f\x19\xcd\xfd\xd1\xb0\xee\xa9\x46\x84\x1f\x1f\x43\x73\xd9\x6b\x7a\xbc\xbc\x6b\xa3\x3b\xb7" + - "\x4e\xeb\x0e\xee\x4e\xdd\xf7\x8d\x18\xbf\x33\x0e\x8f\xc2\x7a\x8b\x54\x8c\x35\x72\x04\x57\x67\x0b\xae\xfe\xc4\xba" + - "\x0b\x2d\xb8\x03\xf7\xae\x6f\x5b\x77\xbc\x23\xc6\x7f\xf7\xb9\xfb\x7c\x9e\x1e\xb9\x43\x24\x2e\x5b\x18\x63\xcf\x58" + - "\x65\x9e\x55\x66\x5a\xa5\x6b\x50\xc9\xec\xb2\xc0\x2a\x9f\x19\x54\x4e\x4f\x50\xe6\x25\x28\x33\x6f\x5f\xd9\x93\xa0" + - "\x0c\x24\x28\xcd\x41\x65\xd4\x2a\xc1\x2e\x17\x0e\x2a\x5b\xac\xb2\xc7\x2a\x4d\xab\x4c\xa1\xdf\xff\x0f\x00\x00\xff" + - "\xff\xc6\xb9\x24\x2f\xee\x3a\x00\x00") + "\x3b\x90\xf8\x31\xc4\x19\x6c\x32\xe3\xc4\x34\xe3\xc6\x34\x6d\xed\xd4\x69\x62\x32\x49\x9a\xa6\x75\xea\x36\x33\xee" + + "\xd8\x9e\xb4\x75\xdc\x7a\xa6\xc5\x31\x02\xa6\xd3\x84\x47\x28\x6f\x3b\xc6\x3c\xcc\xeb\x9e\xbd\x08\x21\x04\x92\x28" + + "\x12\x0e\x08\x5b\x3c\xec\x02\x92\x78\x08\x21\x09\x41\x25\x24\x10\xe8\x71\xb5\xe7\xdc\xd7\xb9\xf7\xef\xfc\xff\x9e" + + "\x73\x74\x25\xdd\x97\x24\x82\x33\x1e\xce\xcc\x3f\x7b\xee\x9e\xdd\xff\xff\xf6\xdf\x7f\xff\xfd\xf7\xdf\xcb\x98\x8b" + + "\xa9\x2c\x3f\x1f\xcb\x19\xec\x15\x37\x63\x5f\x67\x8c\xcd\x98\x21\x7f\x6b\xf9\x8c\x6d\x72\x33\x36\x7b\xb6\xf5\xfb" + + "\x11\xc6\x9e\xbd\x97\xb1\x99\x8c\xb1\x7c\x6c\xc7\x64\x3d\x3d\x6e\x76\xdb\x1f\xe1\x75\xab\x42\x53\x7e\x22\x3c\x6c" + + "\x91\xf0\xb0\x02\x22\xae\x14\x08\x8f\xab\x40\xec\x64\x92\xf0\x5d\x53\xfe\x59\xec\x64\x5f\x15\x1e\xa6\x08\x4f\x7f" + + "\x7f\xdf\x7a\x96\xa1\x97\x3c\xb8\x3f\x78\xfa\x0d\x08\x9e\x5d\x08\xc1\xda\x5f\x82\x51\xf6\x65\x30\xca\x67\x41\xf0" + + "\xcc\xbf\x11\x19\x07\x1e\x07\xbd\x78\x2a\x18\x65\x8f\xb5\x0b\x4d\x7d\xad\x6f\x07\x73\x0b\xcd\x45\xfd\xbb\x17\xb3" + + "\x0c\xa3\x62\xce\xfe\xa8\xd1\x0a\xf8\x98\x6d\x25\x10\x38\xfe\x53\x88\xdc\x3a\x01\x66\x6b\x11\x11\xbe\x07\x8e\xfd" + + "\x2d\x84\x2e\x2c\x05\xff\xd1\x79\x3d\xc2\xc3\x7e\x20\x78\x06\x13\x5c\x89\xe9\xdf\x06\xd1\x50\x2f\x04\x4e\xfc\x0c" + + "\xcc\x6b\xa5\x60\x1c\xfd\x21\x74\x6c\x1e\x47\x84\xef\x58\x17\xf8\xe4\x65\x30\x6f\x54\x81\x71\xe0\x89\xea\xbe\x2d" + + "\x6c\xd2\x80\xfe\xfe\x76\x30\x6f\x1c\x81\x60\xed\x7c\x08\x9e\x5d\x0c\x2d\xeb\xc7\x41\xed\xd2\x29\x50\xbb\x74\x32" + + "\xbd\x63\x1d\x7e\xc3\x36\xa1\x73\xff\x19\x14\x1e\x36\x4f\x78\xc7\xc4\xf4\xef\x80\x70\xd3\xfb\x10\x6e\x5c\x0f\xdd" + + "\x65\x73\xe1\xdc\xf2\x89\xd0\xb1\x25\x0f\x6e\x7c\x90\x07\xe7\x7f\x33\x81\xea\xf0\x5b\xb8\x79\x13\x61\xd0\x8b\xa7" + + "\x2c\x09\x7c\xfc\x57\xac\x7b\x11\xf6\x7f\x6a\x5f\xd4\xb8\x06\xa1\xfa\x15\x10\x6e\x7a\x0f\x3a\xb4\xc7\xa0\x61\x55" + + "\x3e\x04\x8f\xfc\x39\x84\x3e\xfa\x4b\x68\x5c\x93\x4f\x75\xf8\x2d\x74\x71\x05\x44\x45\x13\xea\x54\xeb\x7c\x85\xa9" + + "\x48\xf8\x1e\x15\xcd\xf4\xcd\xee\x7f\x71\x65\x3e\x04\x3e\x7c\x86\x78\x5c\x5a\x1d\xd3\xbf\x7e\x05\xa0\x2c\x94\x89" + + "\xb2\x03\xd5\x3f\x66\x88\x05\x31\x21\x36\x1b\xff\xd9\xe5\x13\xe1\xda\xc6\x5c\x68\xdf\x94\x4b\x63\x71\xf0\x37\xbd" + + "\x0f\x38\x56\x1c\x33\x8e\x1d\x75\x80\xba\x40\x9d\x0c\xd6\x5f\xcd\x92\x29\x44\x83\xf5\x87\xba\x76\xfa\x73\x85\xe1" + + "\x5c\x18\x07\x9e\x38\x86\x18\x68\x8e\xac\xf9\xbb\xbe\x39\x87\xc8\x99\xbf\x13\x3f\xa3\x39\xc6\xb9\x8e\xed\x4f\xb6" + + "\xe0\x61\x3f\x40\xdb\x40\x1b\x41\x5b\x19\x62\x3f\xc7\x7f\x4a\xb6\x85\x0f\xda\x9a\xdd\x9f\xd6\x80\xe6\x62\xd2\x26" + + "\xd5\xd7\xd0\x46\xc9\x56\x0f\x3c\xde\x6f\xbf\xe5\xb3\xc8\xa6\xd1\xb6\xc9\xc6\x4f\xbf\x01\x68\xf3\x68\xfb\xce\x3a" + + "\xf2\x30\x26\x76\x32\x85\xd6\x08\xae\x95\xc1\xeb\x87\xd6\x14\xb3\x69\x11\xad\x39\xaf\x5b\x1d\xed\xfa\x05\x60\x8c" + + "\x65\x32\xc6\x54\x8b\x5c\x31\x64\x3d\x0b\x63\xe8\xb0\x45\x2d\x56\xdf\x99\x96\x8f\x99\x1b\xeb\x67\xf2\x47\x8b\xea" + + "\xf3\xf9\x08\xae\x22\xe5\x09\xae\x4e\x17\x5c\xfd\xc2\x28\x69\x8a\xe0\xca\x58\xb4\x3d\xdb\x17\xa6\x29\xff\x5f\x04" + + "\x57\x5b\x85\xe6\xba\x92\x90\xb8\x1a\x43\x4a\x4c\xbd\x62\xd7\xb7\x08\xae\xd6\x0b\xae\xfe\x8f\xe0\xea\x9b\x38\x1e" + + "\x1f\x1f\x4b\xfe\x34\xb5\x7c\xa5\x40\xec\xca\x02\xbd\x64\x3a\xe8\xfb\xbe\x38\x94\x4a\xa6\x83\xf0\x66\x82\xd0\x14" + + "\x10\x9a\x0b\x44\xe1\x38\x5c\x2b\x44\xf8\x4e\x75\x5c\x01\xe1\x75\x03\xf2\x11\x9a\x2b\x2a\xb8\x52\x2b\xb8\x3a\x4f" + + "\x68\x8a\x92\x0c\x03\xc9\xf7\xb0\x02\xa3\xfc\x2b\x10\xe9\xae\x85\xa8\x7e\x15\xa2\xfa\x95\x18\xba\x0a\xa1\xb3\x8b" + + "\x49\xbe\xbe\xe7\x5e\x08\xfe\xef\x3f\x81\xd9\x51\x09\x91\xbe\x4b\x44\xf8\x8e\x75\xf8\x4d\x70\x37\x04\x3e\xfe\x11" + + "\xf9\x14\xbd\x68\x3c\xe2\xe8\x14\x5c\x7d\x49\x78\x99\x2b\x11\x06\x47\xfe\x81\xd9\x10\x0d\xde\x82\xc1\x8f\x79\xe3" + + "\x30\xe8\x7b\xa7\x81\x51\xfa\x28\x98\xd7\xca\x00\xa2\xa6\xfc\x80\x65\xcc\x3b\x7e\xc3\x36\xfa\xde\x07\x08\x93\xd9" + + "\x5a\x0c\xfa\xfe\x87\x41\x68\xac\x43\x70\xf5\x59\x92\xe3\x1d\xea\x1a\x92\xc9\x8f\x06\x3a\xc1\xff\xe1\x5c\xda\x67" + + "\x91\x27\x3e\x91\xde\x0b\xe4\xaf\xfc\x47\x5f\x20\xc2\x77\xac\x23\xac\x1d\x95\xd4\xd6\xff\xe1\x9f\x10\x2f\xfa\x5d" + + "\xf2\x05\xc4\x70\x4c\x70\xf5\x7e\x94\x35\x1c\xf9\xa1\xc6\x77\x68\x3e\x43\x17\x57\x4a\xfe\xe8\xc3\xcb\xbe\x8c\xfc" + + "\xa0\xcf\x23\x09\xdf\xb1\x0e\xbf\x51\x9f\x8b\x2b\x65\x9f\xc6\x77\xe8\x37\xee\x4f\x62\xd7\x58\xb4\x8f\x05\x3e\x9e" + + "\x35\xc4\x1e\x13\xc9\x8f\x06\xbb\xc0\xa8\xfc\x23\xf0\x1f\xfa\x63\x88\x86\xba\x21\x72\xeb\x24\x18\xfb\x1f\x82\xde" + + "\x1d\x2e\x68\xdd\x30\x0e\x1a\x56\x4f\x24\xc2\x77\xac\xc3\x6f\xd8\x06\xdb\x62\x1f\xec\x8b\xef\x10\xd6\xc1\xff\xd1" + + "\xf7\x11\x67\x83\xe0\xea\x97\x06\xeb\x20\x91\x7c\xd2\xdd\xee\x3c\x08\x37\x6f\x04\x30\x0d\x08\x7c\x34\x8f\xe4\x34" + + "\xae\x99\x00\xa7\x7f\x3d\x0d\x4e\xfd\xea\x7e\x22\x7c\xc7\x3a\xfc\x86\x6d\xb0\x6d\xb8\x69\x23\xf5\xb5\xe7\xcc\x6c" + + "\x3f\x00\x62\x77\x6e\x54\x68\xae\x57\xad\xf5\x96\x52\x7e\xb0\x6e\x01\xe8\xfb\x66\xd0\x1a\x30\xaf\x95\x83\x28\xcc" + + "\x81\x2b\xef\xe6\x92\x3c\x24\x8a\x63\x96\x4d\x71\x7e\xe3\x37\x6c\x83\x6d\xb1\x0f\xf6\x0d\xd6\x15\x48\x5d\x86\x7c" + + "\x64\x47\xc2\xc3\xf6\x0a\xae\x66\xc6\xea\x20\xae\xfc\x48\x08\xfc\x55\xdf\x05\x7f\xd5\x77\x00\x22\x41\x08\x7e\xfa" + + "\x2a\x74\x6d\x53\xa1\x6e\xf9\x64\x92\x75\x69\xcd\x44\xb8\xb9\x35\x13\x6e\x6d\xcb\x80\xe6\x75\xe3\xa9\x0e\xbf\x61" + + "\x1b\x6c\x8b\x7d\xb0\xaf\xbf\xea\x7b\xc4\x8b\xec\xe2\xec\x22\x9c\x83\x66\xc1\xd5\x19\xa9\xe4\xd3\xdc\x1f\x98\x0d" + + "\xc1\x33\x6f\x42\x34\xec\x03\x7f\xe5\x1c\x68\xdb\x30\x96\xe4\x9c\xfb\xcd\x7d\xd0\xbd\x63\x0c\xe8\x85\x63\x41\x2f" + + "\xbc\x07\x7a\x3d\x6e\xa8\x5f\x39\x89\xbe\x61\x1b\x6c\x8b\x7d\xb0\xaf\xe4\xd9\x65\xd9\x6e\x19\x88\x5d\xd9\xba\xd0" + + "\x5c\x73\x53\xca\xd7\xff\x0f\xf4\xfd\x0f\x41\xa8\x61\x35\xf9\x1f\x7d\xdf\x74\x68\x5e\x97\x47\xf3\xdd\xf2\x4e\x1e" + + "\xc9\x0d\x9f\xfc\x3b\x30\x4f\xbd\x02\xc6\x9e\x09\xd0\xba\x21\x07\x4e\xfd\x6a\x1a\xb5\xc1\xb6\xe4\xb3\x1a\x56\x13" + + "\x0f\xe4\x25\xd7\xed\x39\x5c\x9b\x51\xa1\xb1\x17\xe3\xc8\x7f\x0b\x63\x13\x5c\xef\xd4\xb6\xaf\x91\x7c\x6b\xf8\xf2" + + "\x16\x5a\xdb\x62\xcf\x64\xb8\xb4\x7a\x3c\xc9\x68\xdb\x90\x0d\xfe\xb2\x87\x01\x2e\x2d\x07\x68\x5a\x05\x81\xca\x27" + + "\xe1\xfa\xe6\x4c\x39\x2f\xab\xc7\x53\xdb\x88\xaf\x9e\xfa\x22\x0f\xe4\xe5\xc4\x47\xa5\x8f\xa2\x0d\xfc\x22\x8e\xfc" + + "\x5f\xe0\x37\x3b\x5e\x4f\x2e\xff\x1e\xf0\x97\x7e\x11\xa2\x0d\x4b\x00\x9a\x56\x42\xe0\xe0\x13\x70\x7d\x53\x56\x6a" + + "\xf9\x81\x4e\x8a\xbf\x70\xac\x43\xe4\x6b\xec\x45\xd4\x0d\xea\x28\xbe\xfe\x67\x38\xfa\x6f\x5e\x97\x2f\xfd\xcb\xd1" + + "\xe7\x21\x74\xec\x87\xa0\xef\xce\x81\xab\xbf\x1d\x67\x7d\xcb\xb3\xd6\xcc\x50\xfd\xe3\xdc\xe2\x1c\xcb\xb3\xd0\x60" + + "\xf9\xae\xb9\x68\x1b\xe4\xdf\x53\xd8\x1f\xda\x39\xda\xbe\xee\x55\x41\xf7\xba\xc9\x16\xcf\xaf\xb8\x2f\xa5\xfd\x25" + + "\x95\x8f\x6b\x42\x63\xcd\xb8\xcf\x25\x5c\x7f\x5b\xe5\xfa\xc3\x39\xb8\xf0\xdf\xf7\x42\xfb\xc6\x7b\xa0\x63\x53\x36" + + "\x5c\x5c\x35\x29\xad\xf5\x97\x42\x7e\x26\xfa\x06\xda\x37\xc2\xbe\xb4\xfc\x0f\xd2\x99\x25\xd3\xd2\xf2\x3f\xc9\xe5" + + "\x2b\xf6\x1c\xbc\x86\x3e\x12\x7d\xe5\x50\xff\xeb\x8f\xe3\x7f\x25\x0d\xf5\xbf\xfe\x21\xfe\x37\x99\xfc\x18\x1d\x7c" + + "\x09\xf7\x08\xdc\x2b\xc0\xd4\x69\xef\x30\x2a\x46\xb9\xff\x58\x73\x9f\x5a\xbe\xc2\x7c\x1a\xed\x8d\x0b\x70\xaf\xc4" + + "\x3d\x53\xee\xbf\xef\x8e\x7a\xff\x4d\x47\x7e\x8c\x0e\xee\xc7\x58\x01\x63\x06\xd4\x1d\xf6\x41\x9b\x18\x51\xfc\x61" + + "\xf9\xb2\xb4\xe5\x7b\x55\x1b\xc3\xb3\x18\x33\x61\xec\x84\x31\x14\xf1\xdc\xfb\x40\x5a\xf1\x97\x4e\xf1\xd7\x34\x8a" + + "\xd9\x06\x3f\xa9\xe4\x3b\xb6\x48\xb1\xa2\xfa\x12\xc6\x8e\x18\x43\x62\x2c\x89\x31\x25\xc6\x96\x29\xe3\x4f\x6f\x26" + + "\xc5\xaa\xf1\x62\x58\x8c\x6d\x31\xc6\x4d\x26\xbf\x7f\x3d\x60\xcc\xac\xce\xa3\x18\x1a\x63\x69\x8c\xa9\xb9\x5b\xc6" + + "\xd8\x14\x7f\xe7\xc4\xc4\xdf\x39\xb2\x0e\x63\x73\x8c\x91\x93\xc5\xf0\xc4\x47\x49\x2a\x9f\x30\x68\x0a\xf3\x15\x65" + + "\x31\x6b\xaf\x7e\xd3\x3a\x53\xd4\x5b\x67\x8c\x44\xe7\x0f\x49\xc9\xcf\x30\xad\xd6\x59\x27\xa9\xfc\x58\x5d\xf4\x69" + + "\x14\x2f\x8d\x95\x67\xab\x51\x9f\xcf\xa6\x5b\x67\xbd\xb4\xe4\x7f\xde\x1f\x7b\x6d\x1c\x66\x2a\x1c\x66\x0c\xe9\x99" + + "\xc3\x8c\x4d\xb7\x28\xcf\xa2\x4c\x8b\xd4\x74\xa8\xc5\xa2\x1e\x8b\x02\x16\x99\x8c\xa9\xc0\x48\x90\x6a\xcb\x9d\xc9" + + "\x18\x9b\xcd\x18\xfb\xfb\xd8\x3c\xc5\xc3\x9f\xb5\x56\xee\x3e\x77\x9f\x3f\xcc\xc7\xda\x1f\x1f\x16\x5c\x7d\x5b\x70" + + "\x75\xa1\xe0\x6a\xc1\xef\x89\x6c\xde\xff\x2a\xb8\xfa\x37\x82\x2b\xb3\x05\x57\x72\x7a\x35\xc6\x0c\x2d\x79\x3e\x29" + + "\x0d\xfc\xdf\x16\x5c\x0d\x0a\xae\xc2\x1d\x22\x53\x70\xb5\x53\x70\xf5\x20\xed\xeb\x5c\xc9\xc7\x58\xc3\x48\x33\x3f" + + "\x97\x18\xbf\x42\xb1\x57\x5a\x84\x6d\x07\x60\x4a\xd2\x37\x6e\x5b\x97\xfd\x1b\xf5\x56\x2a\xb8\xfa\x24\xec\x67\x4c" + + "\xe7\xc3\x1b\x83\x83\x5f\x73\x05\x31\xc6\x0b\xd6\xbe\x45\xe7\xf2\x64\x14\x3c\xbb\x08\x8c\x8a\xa7\xfa\x71\x21\xc6" + + "\xc2\x1c\x30\x0e\x7e\x0d\x02\x27\xfe\x81\x78\x20\xe1\x3b\xd6\xc9\x78\x84\x39\xd8\xf5\xe2\x29\x60\x94\xcd\x04\xe1" + + "\xcd\x8a\x1d\x47\xa3\xe0\xea\x0b\x7e\xce\x5c\x7a\x8a\xfc\x64\x7c\xfc\x2c\x48\xf1\x75\xb8\x6f\x48\x9c\x37\xf8\x31" + + "\xdb\x4a\x64\x9c\x84\xb2\xbd\x19\xe0\x3f\xf2\x17\x60\xb6\xee\x85\x68\xe0\x26\x40\x34\x12\x13\x20\x46\xa8\x0e\xbf" + + "\x61\x1b\x6c\x8b\x7d\xf4\xe2\xc9\x10\x6a\x58\x0b\xe1\xcb\x5b\xc1\xa8\xfc\x46\xff\x9c\x70\xb5\x0d\xc7\xd0\xa3\x65" + + "\x33\x91\xe6\x3c\x0c\x17\x7f\xa4\xeb\x14\xc5\xb4\xc2\xc3\xe8\x3c\x43\xb1\x65\xb0\x3b\xe5\x98\xb1\x0d\xb6\xc5\x3e" + + "\xf2\x7c\x30\x13\x22\xdd\x35\x10\xf5\x5f\xa7\x73\xa9\x28\xbc\xc7\x1e\x43\x93\xe0\xca\x53\x14\x73\x16\xa6\x8e\x89" + + "\x86\x83\x9f\xce\x41\x55\xdf\x23\xec\x62\x77\x2e\x9d\xc7\xed\xb3\xa8\x1c\x5c\x10\xa2\xa2\x05\x22\xb7\x3e\x21\xc2" + + "\x77\xac\xeb\xff\x1e\xa2\x3e\xd8\x17\x79\x20\xaf\x68\xa8\x87\xda\x84\xea\x97\xcb\xbc\xb3\x1c\x43\xa5\xe0\xea\xe4" + + "\x74\x62\xba\xe1\xe0\x0f\x35\xac\x91\x36\xc0\xdd\x10\xac\x7b\xbb\x1f\x7b\x34\x0c\x66\x47\x05\xdd\x3d\xe9\xa5\x8f" + + "\x80\x5e\x34\x51\x52\xe9\x23\xf2\x3e\xaa\xa3\x82\xda\xd8\x63\x08\xd6\xfe\x52\xc6\xee\xde\x0c\xe2\x69\x8f\x1d\xcf" + + "\x4d\x92\xbf\x1a\x45\x7f\xeb\xf3\x32\x57\x5f\x0a\x3b\x4a\x17\x3f\xea\xd2\x28\x9f\x25\xf5\x76\xe4\x3b\xfd\x79\xad" + + "\x70\x1f\x84\xce\xff\x17\xe8\x7b\x26\x59\xfe\xc6\xca\xdb\xdb\x3e\x46\x63\xf4\x0d\xdb\xd8\xbc\xe9\x0c\x78\xe4\x79" + + "\xe2\x85\x3c\x69\x9e\x68\x7e\x7b\x21\x50\xfd\x63\x7b\x4d\x5f\x13\x5c\xfd\x7a\xca\x73\x45\x9a\xf8\x69\x7e\xad\xb5" + + "\x67\xde\xa8\xea\xd7\x59\xdd\x02\x79\x0f\xc1\xa5\x1f\xe9\xd9\x39\x06\x6e\x6e\xcd\x22\xc2\x77\xb9\x36\x5d\xd4\x06" + + "\xdb\xda\xf6\x64\xde\x38\x42\xbc\x90\x27\xf2\x76\x4c\xac\xbb\x86\x72\x44\xd6\x18\xde\xd3\xb9\xcb\x9d\xcc\x1f\xa5" + + "\x83\x9f\xf2\x5c\x15\x73\x48\x5f\x81\x4f\x5f\x75\xce\xa8\xe1\xcb\x5b\x1c\x9b\x45\xac\x57\xde\xcd\xa3\x5c\x66\xcd" + + "\xd2\x29\x44\xf8\x8e\x75\x72\x1c\x0a\xb5\xc5\x3e\x92\xa9\x49\xbc\x68\x0e\x2a\xe6\x0c\x38\x5b\x87\x2e\x2c\xb1\xce" + + "\x86\x6a\xbb\xe0\xea\x57\x93\x9f\x2d\x53\xe3\xa7\x5c\xcf\xae\x6c\xb2\x03\xb3\xb3\x5a\xea\xa9\xaf\x51\x9e\x5d\x35" + + "\x06\xdd\xdb\x33\x9c\x9c\x53\x3c\xc2\x6f\xd8\x86\xfc\x4e\xf9\x57\x9c\xfc\x9f\xd9\xf9\xb1\xb4\xbb\xc2\x6c\x30\xdb" + + "\xcb\xfb\xf5\xa5\x5f\x95\x79\x41\xb9\x67\x2c\x12\xdc\x9d\xf0\xce\x2a\x1d\xfc\xe4\xdf\xc8\x5f\x7c\x97\x72\xf1\x54" + + "\x57\xf3\xef\x64\x17\xbd\x1e\x37\xe5\x6c\x12\x61\xb7\x09\xdb\x60\x5b\xec\x83\x7d\xe5\x00\x0c\xe2\x89\xbc\x51\xc6" + + "\x00\x99\x75\x0b\x6d\x1b\x3a\x2e\xb8\x32\x61\xa4\xf8\xf1\x37\xe5\xe9\x35\x06\xa1\x86\x55\x96\x7e\x5a\xc0\x28\x9d" + + "\x49\x75\xad\xef\x8d\x1b\x82\xb5\x76\xd9\xc0\x7b\x00\x9b\xb0\xad\xed\xfb\xa3\xfa\x15\x69\x2b\x17\x57\x51\x1d\xca" + + "\x88\x95\x8d\xfe\x57\xde\x9f\x29\x3e\xc1\xd5\x6f\x26\xce\x8f\x24\xc7\x1f\xf1\x35\x80\x5e\xf2\x00\xe8\xbb\xf3\x21" + + "\x72\xf3\x98\x65\xf7\x1f\x80\xf0\x8e\x81\x9e\x1d\x63\xc8\xc6\x6d\x7c\x35\x4b\xa7\x92\xbd\xdf\xda\x96\x09\x5d\xdb" + + "\x33\xa1\x6d\x43\x8e\x73\xbf\x60\xe7\xf9\xb1\x0f\xfa\x48\xdc\x7b\x89\xff\xcd\x6a\xe2\x4d\x79\x65\x5f\xc3\x40\xbd" + + "\xfd\xee\x5b\xb6\x0d\x51\x7e\x3b\xde\x3a\x4e\x85\xdf\xec\x38\x44\xb6\x6f\x94\x3d\x46\xff\x67\xc0\x27\x70\xf2\x65" + + "\xe2\x7b\xed\xfd\x9c\x98\xbc\xe7\x54\xa9\x5f\x27\x16\x50\x40\xe7\x2a\x5c\xdf\x9c\x4d\xf7\x32\x76\x3b\xec\x83\x7d" + + "\x03\x9f\xfc\xa3\xc4\xe9\x6f\x27\xde\x28\x03\x65\x0d\xb0\xa1\x9a\xff\xb0\xf1\x6f\xd3\xb9\x2b\xee\x9d\x69\x2a\xfc" + + "\xa4\x6b\x9c\xdf\xc3\xcf\x01\x44\x02\x94\xcb\x35\x2a\x9f\xa6\xba\xa6\xb5\x13\x9c\x7c\x29\xae\x51\x9f\x47\xe6\x93" + + "\xf4\xc2\x6c\xd0\x77\x8f\x73\xe2\xcd\xcb\xeb\xf3\x9d\xfc\x2a\xf6\x21\x7e\x87\x9e\x96\x79\xe1\x48\x80\x78\x63\x1d" + + "\xca\x1a\x20\xfb\x2a\xb7\xf7\xb3\x6a\xc1\x95\xdc\x91\xe0\x0f\x5d\x58\x26\xfd\xe6\xf1\x97\xa4\xbe\xc4\x65\xca\x5d" + + "\xf5\xee\x54\x29\xe7\x6d\xeb\xb5\x0d\xf5\xca\x5d\x60\xec\x9d\x4a\x77\x30\x91\xda\x37\xc0\x5f\x3e\x93\xc6\xd3\xf9" + + "\xc1\x58\xb2\x2d\x3b\x4f\xee\xdb\xa9\x12\x0f\xe4\x45\xf3\x79\xfc\x25\x92\x81\xb2\x06\xd8\xee\xcd\x13\xf2\xce\x98" + + "\x2b\x4d\x82\xab\x0f\x26\xc9\x91\x3e\x97\x08\x3f\xed\x4f\x3b\x19\x04\x4f\xbd\x2e\x79\xf6\xd4\xd2\xbe\xd3\xbd\x7d" + + "\x0c\x9c\xb5\x6c\x1b\xb1\xe1\x7e\xa5\x7b\x55\x08\x1d\xfb\x11\x40\xf3\x5a\x22\xf3\xf4\xcf\x69\x2e\xd0\xff\xa3\xed" + + "\x23\x7e\xec\xd3\xbd\xdd\x4d\x31\x74\xa4\xa7\x4e\xca\x38\xf5\xba\x94\x81\xfb\x5b\xac\xef\x10\xcd\x74\xf7\x64\xdd" + + "\x79\xcf\x4a\x82\xff\x5b\x42\x63\x86\x71\xf0\xc9\x21\xb1\x24\xf9\x4e\xe4\x5d\x3b\xdf\xd2\xc9\x71\xd0\x8b\xf2\xa1" + + "\x6b\x5b\x86\xe3\x63\xb0\xec\xda\x9e\x41\xf7\x6f\x66\xcd\xeb\x00\xcd\x6b\x00\x9a\x56\x43\xb4\x7e\x31\x18\x7b\x27" + + "\x83\xcf\x23\xe7\x0a\xf1\x3b\x6d\x8b\xf2\xe9\xff\x3a\x24\xa3\x76\xbe\x94\x31\xc8\x87\x62\x6c\x4a\x31\x8b\xc6\xfa" + + "\x04\x57\x9f\x4e\x82\xff\x69\x6c\x43\xb1\x88\xff\xfa\xc8\xf0\x6f\xcb\x00\x7d\x57\x16\x98\x67\x7e\xde\x8f\xff\x42" + + "\x01\x18\xc5\x93\x08\xff\xf9\x91\xe0\x0f\x76\x03\xea\x14\x75\x4b\x3a\x4e\x8c\x7f\x16\xe5\x96\xf7\xcd\xa0\x39\x4b" + + "\x6e\x3f\x75\x34\xf7\x68\x03\xb6\xfd\xa0\xef\xb9\xb1\x85\xee\xd3\x21\x78\xe4\xcf\xe8\x0e\x10\xed\x27\x7c\xe2\x45" + + "\xd0\xbd\x19\xd0\xbd\x23\x83\xda\x0e\xdb\x7e\xc2\x7d\x74\x67\x81\xb6\x4d\x36\x9e\x18\xff\x83\xb8\x46\xf4\xa2\x09" + + "\x74\xdf\x31\x92\xf5\x7b\xf5\xb7\xb9\x96\xef\xc9\x81\x60\xd5\x73\x10\xaa\xfe\x3e\xe8\xc5\xf7\x82\xce\x15\xba\xd3" + + "\xc2\x31\x9e\xfa\xb5\xbd\x7e\x95\xb4\xd6\xef\x20\xfc\xdf\x8e\x8f\x9f\x72\xeb\xb9\xe4\xa3\x70\x5f\xb9\xca\x07\xf0" + + "\x48\xd7\x7f\x9e\x5b\x81\x7b\x53\x46\x7f\xec\x6c\x91\x4f\xeb\x8f\x2f\xb0\x6d\xe3\x30\xfc\x67\xba\xf8\xe5\xde\xa0" + + "\x6e\x47\x1e\xc1\x9a\xf9\x03\x78\xa4\xbb\x7f\x21\x35\xad\x1b\x0f\xbd\x9e\x31\xd6\x3d\xa6\x0a\x7d\x9a\x9b\xe6\x05" + + "\x75\x3f\x64\xff\x3a\xf9\xb2\xb5\x46\x13\xef\x5f\xe9\xe0\xd7\xed\xbb\x3e\xdc\xa3\x51\x2f\xbf\xfb\xd3\x81\x71\x48" + + "\xdc\xf8\x61\x6b\xdc\xf8\xc1\xde\xc7\x30\x6e\x40\x9c\xa8\xeb\x58\xec\xc3\x89\x1f\xd2\xc5\x1f\xb3\x06\xbe\x29\xb8" + + "\xd2\xa7\xef\xb9\x0f\x22\x5d\x9f\x0e\xe0\xe1\xc4\x6f\x17\xd3\x8b\xdf\x12\xd1\x70\xe2\xb7\xe1\xe1\xa7\x35\x30\x81" + + "\x62\x55\xcd\x45\xe7\xd0\xd8\xe7\xb3\x88\x9f\x87\x85\x5f\x53\x18\xfd\x3f\x95\xab\x8b\xe5\x19\xe3\x71\x3a\x43\x38" + + "\x6b\xe0\xf7\x76\x7e\xa9\x8e\x7b\x7e\x19\x2e\xfe\x18\x1b\xc2\xb3\x5a\x07\x9e\xdd\xf0\x0c\xe7\xf0\xb9\x23\xe7\xc7" + + "\x9b\xa3\xc4\x4f\x7e\xc8\x8d\x67\x66\x3a\xa7\xef\x7f\x88\xce\xd2\xf6\x93\xf6\xf9\x7d\x47\xcc\xf9\x7d\x47\xb2\xf3" + + "\x7b\x55\xdc\xf3\xfb\x48\xf1\xc7\xcc\xc1\xd7\x28\x77\x81\x3e\xae\xfa\xaf\x29\xa7\x01\x43\xf2\x27\xcf\x0f\xcc\x9f" + + "\x9c\xbb\x3d\xf9\x93\xd1\xe2\xef\xe3\x2e\xe6\xe3\x4c\x91\x67\x66\x35\x8a\x7e\x8e\xd6\xb2\xa5\xb3\xd4\xf9\xab\x17" + + "\xc1\x28\x7d\x04\xf4\x3d\x13\x89\x8c\x44\xf9\xab\xba\xb7\x87\xe6\xaf\x6e\x03\xfe\x98\x39\x98\x2c\xb8\x7a\xc8\xb6" + + "\xd9\x50\xfd\x32\x99\x1b\x0c\xf5\x38\xfe\xe2\xf6\xe5\x0f\x13\xe7\x4e\x47\x84\xbf\x50\xb5\xfd\xe9\x1c\x2b\x97\x4a" + + "\xb9\x55\xfa\xdf\x50\xe0\x3a\x44\xba\xcf\xc8\xdc\x37\xda\x8a\x9d\xbf\x4d\x82\xc1\xc1\x62\xe5\x6f\xb1\x0f\xe5\x7e" + + "\x4b\x1f\xa5\x5c\x70\xd2\x3e\x23\xc0\x4f\x63\xf0\xba\x58\x8f\x27\x1b\xe7\xe1\x05\x99\xd3\x56\x68\xbe\x8d\xca\x6f" + + "\xd0\xbe\x19\x6a\x58\xeb\xac\x3d\x27\x7f\xde\x56\x92\x7e\xfe\xbc\xe4\x41\x30\xdb\xf6\xa5\x1e\xf3\x08\xf1\xe3\xa3" + + "\x7b\x15\x66\xec\xa2\xff\x6d\xbc\x60\xdd\x2d\x48\xbc\xbb\xb2\xe8\xbf\x31\x7a\xf1\xd4\x24\xf7\x17\xf3\x89\x12\xdd" + + "\x5f\x18\x15\x4f\xd1\x1d\x48\xca\x7b\x92\xda\xb7\xac\xff\xda\xba\x86\x8d\x9f\xc6\xc0\x5d\x0c\xbc\xe4\x5b\xd1\x27" + + "\x95\x39\x77\x64\x8e\x8f\x19\xcd\xfd\xd1\xb0\xee\xa9\x46\x84\x1f\x1f\x43\x73\xd9\x6b\x7a\xbc\xbc\x6b\xa3\x3b\xb7" + + "\x4e\xeb\x0e\xee\x4e\xdd\xf7\x8d\x18\xbf\x33\x0e\x8f\xc2\x7a\x8b\x54\x8c\x35\x72\x04\x57\x67\x0b\xae\xfe\xc4\xba" + + "\x0b\x2d\xb8\x03\xf7\xae\x6f\x5b\x77\xbc\x23\xc6\x7f\xf7\xb9\xfb\x7c\x9e\x1e\xb9\x43\x24\x2e\x5b\x18\x63\xcf\x58" + + "\x65\x9e\x55\x66\x5a\xa5\x6b\x50\xc9\xec\xb2\xc0\x2a\x9f\x19\x54\x4e\x4f\x50\xe6\x25\x28\x33\x6f\x5f\xd9\x93\xa0" + + "\x0c\x24\x28\xcd\x41\x65\xd4\x2a\xc1\x2e\x17\x0e\x2a\x5b\xac\xb2\xc7\x2a\x4d\xab\x4c\xa1\xdf\xff\x0f\x00\x00\xff" + + "\xff\xc6\xb9\x24\x2f\xee\x3a\x00\x00") func gzipBindataAssetsFaviconico() (*gzipAsset, error) { bytes := _gzipBindataAssetsFaviconico info := gzipBindataFileInfo{ - name: "assets/favicon.ico", - size: 15086, + name: "assets/favicon.ico", + size: 15086, md5checksum: "", - mode: os.FileMode(511), - modTime: time.Unix(1521004692, 0), + mode: os.FileMode(511), + modTime: time.Unix(1521004692, 0), } a := &gzipAsset{bytes: bytes, info: info} @@ -984,2664 +982,2664 @@ func gzipBindataAssetsFaviconico() (*gzipAsset, error) { var _gzipBindataAssetsJsJquery211js = []byte( "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xfd\x7b\x77\xdb\x46\x96\x28\x8a\xff\x2d\xaf\xe5\xef\x50\xa2\x73\x64" + - "\xd0\xe2\x43\xb2\x93\x74\x42\x99\xd6\xcf\xb1\x9d\x1e\x9d\x5f\xec\xb8\x23\x67\x32\xf7\x4a\xca\xa4\x48\x14\xc5\xb2" + - "\x41\x80\x41\x81\x92\xd8\xa1\xfa\xb3\xdf\xb5\x1f\xf5\x02\x40\xd9\xee\x4e\xcf\x39\x3d\x6b\x62\x11\x28\xd4\x63\xd7" + - "\xae\x5d\xfb\xbd\x87\x8f\x76\xef\xdf\x13\x8f\xc4\xfb\xbf\xad\x54\xb9\x16\xff\x5b\x5e\xc9\xd3\x69\xa9\x97\x95\xf8" + - "\x41\x4f\x4a\x59\xae\xc5\xd5\xe3\xc1\xe1\xe0\x10\x1b\xcd\xab\x6a\x39\x1a\x0e\xdf\xff\x0e\x6d\x07\xd3\x62\x31\x84" + - "\xc7\xf8\xea\x24\x9f\x66\xab\x54\x19\x71\xaa\xff\xfe\xf7\x4c\x0d\xde\x9b\xf0\x0b\x83\x0f\xdf\x9b\xf8\x9b\x17\xc5" + - "\x72\x5d\xea\xcb\x79\x25\x1e\x1f\x1c\x7c\xd5\x13\x8f\x0f\x0e\xbf\xb4\x13\xf9\xbe\x58\xe5\xa9\xac\x74\x91\xf7\xa0" + - "\xef\x81\x90\x79\x2a\x8a\x6a\xae\x4a\x31\x2d\xf2\xaa\xd4\x93\x55\x55\x94\x34\xc8\x4f\x2a\x53\xd2\xa8\x54\xac\xf2" + - "\x54\x95\xa2\x9a\x2b\xf1\xfa\xe4\x9d\xc8\xf4\x54\xe5\x46\xb5\xcc\xbc\x28\x2f\x87\xc1\x5b\x6c\xf1\x52\x56\x6a\x84" + - "\x53\xe8\x1f\x7c\xd5\x3f\x38\x7c\x77\xf8\x97\xd1\xe1\xe1\xff\x0b\xef\x86\xf7\xef\xdd\xbf\x97\xcc\x56\xf9\x14\xe6" + - "\x93\x88\xcb\xac\x98\xc8\xac\x27\x66\x72\x5a\x15\xe5\x5a\x74\xc5\x1f\xd0\x62\x47\xcf\x44\x22\xaa\xf5\x52\x15\x33" + - "\xb1\x28\xd2\x55\xa6\xc4\x78\x3c\x16\x9d\x62\xf2\x5e\x4d\xab\x8e\xd8\xdb\x8b\xdf\x0e\xd4\xcd\xb2\x28\x2b\x13\xb7" + - "\xc2\xde\x76\x76\x86\x43\xf1\x7d\x51\x8a\x17\xc5\x62\x51\xe4\xff\xfb\x14\xd7\x6f\x7f\xf4\x33\xfd\x41\x09\x95\x5f" + - "\xe9\xb2\xc8\x17\x2a\xaf\x8c\xb8\x9e\xab\x52\x09\x29\x96\x65\xb1\x54\xa5\xb8\xd6\x79\x5a\x5c\x0b\x6d\xc4\xb2\x54" + - "\x46\xe5\x55\x8f\xfb\x54\x37\x6a\xba\xaa\x14\x02\xc9\xce\x1f\xba\xbe\x54\x15\x83\x3e\x18\x3c\x1a\xa1\x9a\xcb\x4a" + - "\xa4\x85\xc8\x8b\x4a\xe8\x1c\x86\xcb\xab\x6c\x2d\x96\x85\x31\xca\x08\x69\x87\xbc\xd6\xd5\x5c\x48\x91\x16\xd3\x15" + - "\x7c\xc7\xbd\x25\x66\x35\x9d\x0b\x69\xc4\x9b\x22\x05\xe4\xe8\xf6\x04\x2c\xde\xc0\x94\x69\xd8\xfe\x42\x7e\xd0\xf9" + - "\xa5\x9f\x94\xa9\x41\x89\x7b\x7a\x37\xd7\x46\xc8\xe9\x54\xe5\xd5\x4a\x56\xca\xe0\x4a\x72\xa5\x52\x31\x2b\x68\xef" + - "\xa7\xa5\x42\xc4\x11\xc5\x4c\x48\x51\x2a\x99\xf1\xdc\x2c\x08\x06\x97\x03\x71\x25\x4b\x8b\x6a\x63\x51\xaa\xdf\x57" + - "\xba\x54\x49\x87\xf0\xa3\xd3\x4d\xe8\x83\xee\x11\x7f\x72\xaa\x94\xa8\xf4\xf4\x83\xaa\xc4\x83\xc3\x2f\xbf\xfa\xf2" + - "\x5b\x1c\x6c\x51\x94\x4a\xe8\x7c\x56\x40\xab\xfa\x96\x32\x96\x0c\x2c\x20\xc4\x31\xb4\xda\xe1\xe5\x79\x24\xaa\xca" + - "\x95\x12\x5d\x31\xa2\xb7\x0e\xc7\xae\x2d\x1e\xec\x10\x5a\xed\x5e\xfb\x9e\xdc\x9b\x9d\x6a\x5e\x16\xd7\x22\x57\xd7" + - "\xe2\x55\x59\x16\x65\x22\x3a\xbc\x26\x5e\xd1\xf6\x7d\xe9\x08\x5a\xdc\xce\xce\x2d\xfd\x53\xaa\x6a\x55\xe6\xc2\xcd" + - "\xef\xda\x36\xb8\x85\x7f\x6e\x85\xca\x8c\xa2\x71\x6b\x4b\xa0\x76\xb7\x70\x02\x86\x43\xf1\x56\x1a\xd8\x12\x6d\x84" + - "\x9e\x05\x58\x08\x48\x93\xaa\x99\xce\x55\x2a\xd6\xaa\xba\x7f\xef\x36\xe1\xa3\xc0\x6d\x76\xe1\x08\xc0\xf9\xc5\x36" + - "\x1d\x71\x6c\x5f\x8c\xb0\xb7\x9e\x08\x40\x83\x2f\x7a\x22\x2f\xfe\xca\x13\xa0\xf3\x37\x1c\x8a\x17\x32\x7f\x88\x48" + - "\x8a\x33\x98\xa8\xa9\x5c\x19\x25\x8c\xba\x52\xa5\xcc\x84\x5c\x2e\x8d\xd0\x48\xa8\x00\xd3\x9e\x9f\xbe\x1d\xbc\x79" + - "\xf5\x4e\x54\xa5\x9c\x2a\xfc\x1c\xb0\xc7\x54\x72\xfa\x41\x5c\x69\x29\x64\x79\x89\xa0\x32\x83\xa9\xcc\x32\x55\xd2" + - "\x3f\x0a\x8f\xcb\xf7\xba\x54\xb3\xe2\x46\xa4\x5a\xc1\x4a\xf1\xeb\x75\xb1\x12\x55\xb9\x16\x55\x41\x5d\x0a\xd8\x9d" + - "\xd5\xe5\x5c\x74\x70\x12\x55\xa9\xe1\x78\x43\x27\x62\x3a\x97\x3a\x37\x03\x91\x3c\x38\x7c\xf2\xe4\xc9\x57\x5d\xfc" + - "\xfe\x74\xb5\x04\xdc\x19\xb9\xce\x0f\xbf\xd9\x87\x17\xb0\x36\x40\x57\x59\x96\x62\x2c\xce\x2e\x8e\xec\x03\x03\x34" + - "\x4c\x8c\xe1\xc5\x00\xff\x76\x6f\xa6\x45\x3e\x95\x15\xbf\xa2\x1f\xee\xdd\x72\x65\xe6\xfc\x06\xfe\x74\xcf\x75\x9e" + - "\xaa\x9b\x1f\x67\xfc\x8a\x7f\xf9\x1e\x33\x69\xcc\x63\xd8\x33\x31\x16\x7f\xdc\xba\xe7\x55\x71\x5a\x95\x00\xcd\x71" + - "\xd0\x64\x60\x9f\xba\x66\x73\x69\x7e\xbc\xce\xe3\x46\xf4\xec\x2d\x12\xac\x6a\xed\x57\x45\x60\xf0\xc3\xf0\x8b\xfb" + - "\xf7\xe0\x24\xfe\x6c\x88\x76\x4d\x8b\xb2\x54\xd3\xca\xe1\x33\x90\x84\xa2\x84\x7d\xcd\xd6\x84\xeb\x8c\x3f\x76\x17" + - "\x45\x62\x64\x9e\x4e\x8a\x9b\xee\xfd\x7b\x3b\xee\xab\x31\x37\x73\x87\xab\x87\x94\xfc\x4a\x95\x06\x28\xc8\x58\x74" + - "\xf0\xf6\xeb\xd0\xe3\xe1\x50\xbc\x44\x04\x15\x52\x64\xc5\x54\x66\x62\x5a\x2c\xd7\x40\x67\x1c\xe9\x74\x34\xc5\xe3" + - "\xab\x51\x99\x82\x13\xd3\xc3\x9b\x4b\xdd\x54\x01\x89\x7f\x37\x57\x96\x0c\x11\xfd\x17\x48\xdd\xaa\x95\xcc\xb2\xb5" + - "\x78\xbf\x32\x15\xae\x56\xe7\xba\x82\xaf\x4d\x55\xae\xa0\x2b\xf1\x50\xe5\x73\x99\x4f\x55\xfa\x90\x3b\x7a\x03\x14" + - "\x10\x9b\x69\x3b\x1b\xe8\x0a\x51\x36\x15\x09\xf6\x24\xb3\xac\xb8\x16\x0a\x28\x05\x20\xe9\x84\x30\xf4\x3a\x87\x4f" + - "\x88\xaa\xe3\x1d\x9e\x02\x84\x2c\x3d\x00\xda\x42\xdd\x0d\x66\xf9\x00\x06\x68\x5d\x10\x92\x00\x07\x24\x87\xc9\xcf" + - "\xf3\xb4\x2c\x74\xfa\xf4\x4b\x60\x20\xe0\xcd\x6b\xf9\x41\x09\xb3\x2a\x95\xb8\x56\xa2\x2a\xf5\x42\x7c\xf7\xe3\x6b" + - "\x3c\x51\x6f\xbe\x3b\x7d\x7b\xff\xde\x4e\x89\x0f\xc7\x62\xf8\xeb\xd9\xb9\x39\x5f\x7d\xff\xea\xfb\xef\xcf\x6f\x9e" + - "\x1f\x5c\xec\x6f\x6a\xbf\xbf\x18\x5e\xba\xf1\x5e\xcb\x6a\x3a\x57\x46\xa4\xd2\xcc\x55\x8a\x47\x0d\x6e\x92\xa2\x14" + - "\x53\xb9\x50\x99\xfe\xbb\xce\x2f\xa1\xef\x85\x79\x5b\xaa\x99\xbe\xc1\xfe\xfb\x0b\xd3\x1f\xc2\xb5\x58\xc2\x67\xcf" + - "\xb3\xe5\x5c\xc2\xf3\x7e\x72\x76\x9e\xca\xfe\xdf\x2f\xba\xc3\x4b\xed\x46\xf8\x19\xd8\x8b\xc9\xda\x82\x02\xbb\x7d" + - "\x21\xe1\xfa\x22\x18\x4f\x80\x68\x54\x85\x28\xd5\x32\x93\x53\x95\x00\x08\x67\xbe\x55\x88\x0e\x32\xcb\x7a\x22\x53" + - "\x55\xa5\x4a\x8b\x08\x0c\x6b\x7a\x38\xa8\x8a\x9f\x97\x4b\x55\xc2\x87\x09\x01\x16\x8f\x81\xdb\x05\x31\xb6\xd3\x58" + - "\x96\x45\x55\xd8\x33\x49\x13\x05\x84\x9a\xae\x4a\xb8\x9c\x85\xc5\x62\x87\x9f\x62\xa2\x00\x30\x2b\xa3\x52\x40\x55" + - "\xbc\xec\x46\xb6\x19\xad\x35\x40\xb2\x11\x7f\xe5\xb7\xb5\x92\x65\xc5\x17\x49\x2e\xd4\x62\x59\xad\x1d\x2e\xdc\xbf" + - "\xb7\x63\xff\x1c\x89\x8e\x3f\x2f\x30\x9f\x54\xcd\xe4\x2a\xab\x44\xa6\xf2\xcb\x6a\x4e\xd7\x72\x03\xe9\x0f\xee\xdf" + - "\xdb\xa1\x06\x23\x71\x40\x9f\x57\xc5\xf3\xb2\x94\xeb\x91\x07\x5e\x0c\x2f\xa4\x79\x48\x95\x13\x22\xf8\x35\x34\xfc" + - "\xab\xa2\xd3\xf3\xa6\x9a\x0b\x95\x29\x3c\xf0\x3a\xc7\x47\x0b\xc4\x98\xd4\x3d\x36\xaa\x12\x3f\xfe\x14\x7f\x76\x3d" + - "\x2f\xb2\xf6\x96\x12\xee\xd5\x69\xa6\x64\x0e\xb4\x52\xc2\xb9\xbf\x54\x55\x30\x4f\x91\xaf\x16\xb5\xcd\x85\x27\xbb" + - "\x63\x91\xaf\xb2\x0c\x58\x01\xbc\x5a\x87\x43\xf1\x13\xbd\x75\x27\xbd\xc8\x95\x1b\x6a\x56\x16\x0b\xba\x93\x14\xf2" + - "\x51\x3b\xd4\xef\x53\x71\x20\x8e\x71\xc1\x67\xf8\x7b\x1f\xff\x1e\x30\x74\x2f\xf8\xc6\xa4\x77\x17\xc4\x5a\xd4\x46" + - "\x83\x2b\x08\xfa\xe5\x81\xe0\x52\x6c\x2c\x68\x67\xe7\x63\xe0\x7d\x07\x67\xd9\x7e\x01\xbb\xea\xba\x83\xf3\x8c\xd7" + - "\x8c\xae\x44\x91\xc3\x7d\x68\x2f\x56\xfa\x32\x21\x98\x00\x2e\x12\xf7\x76\xdd\x06\x66\x38\x43\xd0\xcb\x29\x7c\x18" + - "\x02\x17\xda\x18\xc7\x75\x43\x87\xdf\xad\x74\x96\x0a\x19\x50\xab\xb6\x0e\xa1\x31\xdc\x30\xa5\xaa\xfc\x19\x5a\xa8" + - "\xf2\x52\xd1\x02\x07\x01\xf2\x27\xc0\xa1\xd2\x38\x47\x6e\x98\xe7\x69\x4a\x9b\x94\xa5\x16\x73\xe3\xe5\x89\x04\x51" + - "\xa3\x54\x33\x60\x8f\xa7\xca\x52\xd2\xc1\xb2\x54\x57\x3f\xd2\x17\x63\x1c\xeb\xc8\xbe\xb1\x24\x74\xec\xa6\x00\x3f" + - "\xfd\x98\xbc\x65\x0c\xa7\x6c\xdd\x9f\x15\xe5\xa2\xb9\x2e\xc6\xb2\x52\x55\xf1\x26\xbd\x62\x7e\x5f\x7a\x32\x05\x74" + - "\x11\x38\xa2\xf5\xb6\x43\x61\x54\x35\xe0\x8d\xfa\x7f\x8a\x95\x98\xca\x5c\x18\xb8\x5e\xa0\x8d\x63\x8a\x1c\x1d\x70" + - "\xdb\x2f\xcb\x4b\xd3\x13\x93\x55\xc5\xfc\x9f\xa1\x3e\x8a\x3c\x5b\x23\xc9\x11\x3a\xaf\x54\x99\xc3\xcd\x36\x00\xc0" + - "\x28\x39\x9d\x87\xdb\x6a\x27\xd8\xc3\x9e\x6a\xc7\x87\x77\x0b\xbe\x49\x98\x23\xac\xb7\x0f\x16\xbe\x90\xcb\xb6\x9e" + - "\x6b\x7d\x22\xc0\x1d\x86\x25\x0e\x23\xe4\x32\xa9\xf3\x9c\x00\xa9\x9e\xd0\x8e\xf5\xe6\x1e\x6c\xc7\x7c\x4a\xb8\x15" + - "\x61\x0e\xf3\xcf\xb7\xdd\x70\x62\x78\xa6\xb6\x12\xb4\xfa\x84\xe8\x04\xca\xe5\x32\x5b\xdb\x45\x7b\xf8\x77\xa3\x15" + - "\xcf\x74\x69\xaa\xbb\x3b\x56\xbf\x27\xe2\x20\xfa\x28\x93\x9f\xf2\x4d\xff\x30\xfa\x48\xfd\x1e\x82\xd6\x81\x04\x0e" + - "\x56\xa6\x72\x8b\xc7\x44\x8d\x50\xea\xdc\x79\x2f\xc6\x62\x5f\x8b\x7d\x01\xcd\x89\x7a\x41\xcb\x91\x9d\xcd\xd6\xfd" + - "\x10\xcf\xc6\xe2\x00\xc4\xe6\xf7\xe2\x29\x7e\x72\x2c\xce\x88\xb8\xbd\xbf\x40\x42\x77\x76\x11\x4f\x2d\x4f\x3f\x02" + - "\x5b\x7f\x0c\x37\x9b\xe6\x99\x07\xe2\x5c\x23\x72\x20\x06\x5b\xbc\x05\x2c\x46\x74\xe6\xd3\xf1\x9d\x9a\xcb\x2b\x65" + - "\x04\x4a\xe3\x32\x17\x78\x5b\x3d\x34\x62\xa1\xaa\x79\x91\xf6\x90\xa7\xa2\x77\x8e\x28\xe1\x9b\x01\x13\xb6\x11\x12" + - "\x49\x80\x91\x41\x6e\x09\xf9\xf8\xa2\x44\x59\xdd\x2c\x09\x53\xf0\x19\xfe\x7d\xff\x5e\xc4\x07\xa8\x9b\x4a\xe5\xa9" + - "\xa7\x63\xb3\xdc\x3f\xaa\x81\x00\xb6\xa6\x58\xc2\x03\xd3\x13\xb9\x5c\xa8\x9e\x30\xe5\xb4\x87\xcc\x2b\xfd\xf7\xc4" + - "\xe0\xdc\x7b\x62\x9a\x15\xb9\xc2\x5d\xab\x64\x79\xa9\x48\x84\x60\x8c\x3b\x3b\xb8\x00\xa8\xfd\x71\x8b\xef\xb5\x18" + - "\x8b\x43\xfc\x8b\x2f\x9e\xa0\x65\xb8\xfb\xa9\x52\x4b\x98\x92\xcc\x0c\xc9\x27\x00\xb9\xff\x90\x79\x9a\x01\x5c\xf0" + - "\x2d\x32\xd1\x46\x83\x3c\xaf\x8b\xbc\xa6\x48\xb1\xf3\x00\xf9\x70\x52\x14\x70\x47\x39\x1d\x09\xf7\x4d\x4d\x3c\xc9" + - "\x34\x1f\xf4\x12\x89\x15\xb7\xc7\xfb\x08\x7e\x53\xc3\x2d\xab\x13\x5a\xf0\xfa\x10\x27\xf5\xfe\xbe\x93\x6b\x83\x29" + - "\x4f\x81\x9d\xbb\x9e\xab\xdc\x4e\x0c\xf8\x75\xcb\x71\x16\xa5\x30\x05\xec\x31\xfc\x48\x96\x85\x31\x7a\x92\x01\xf7" + - "\xee\xd7\xd9\x6d\x5f\xde\x6e\x4d\x4f\xb4\xcb\xbb\xaa\xcd\xf7\x76\x2f\xa9\x65\xd7\xae\xdd\xad\x80\xe6\xeb\xe6\xc9" + - "\x48\x60\x45\x80\xca\xa8\x6c\x06\x0c\x3e\x92\x61\xe0\x2e\x9c\x40\xa4\x8d\x58\x4a\x43\xbc\x20\x4e\x49\x23\x94\x79" + - "\x3b\xeb\xc3\xb8\x4b\x4b\xf7\xfb\x7e\x40\xb8\x4b\x12\x71\x84\xe7\x9a\x3e\x3c\x12\x7a\x7f\x3f\x90\x70\x7e\x84\x71" + - "\x53\x52\xc2\x54\x73\x91\x17\x79\x1f\x8e\xd9\xd0\xc9\xfa\xe2\x4a\x66\x2b\x85\xea\x1d\x9c\x45\xc2\xa8\xda\xd8\x9c" + - "\xae\xe3\x9f\x2c\x15\xc6\xfb\x0d\x97\x8b\xbb\x0d\x5b\x43\x30\x24\x65\x0a\xce\x0d\xf0\x1d\x76\xc0\xf6\xea\x94\x27" + - "\xa6\x9c\x3a\xdc\x39\xa3\x66\x17\xac\x12\x41\x84\x1c\xdb\x4f\x82\x97\xf4\x7a\x38\x14\x6f\x4b\x75\x05\x30\xcc\xe1" + - "\x22\xed\xab\x1c\x15\x0a\x59\x51\x2c\x03\x95\x4d\x80\xb9\xd8\xa1\x57\xdb\xc0\x25\xaf\xf3\x95\xf2\x1a\x18\xd7\xf1" + - "\x4f\x6a\xba\x2a\x8d\x42\xed\x89\x7a\x58\x2a\x01\xfc\x09\x74\xbe\xcc\x24\xac\x02\x97\x67\x00\xd3\xf0\xde\x35\xc1" + - "\x78\x88\x63\x7b\x7b\x34\xd8\xde\x9e\x70\x17\x9a\x36\x6f\xe1\x63\x22\x7c\x09\x62\x21\x20\x7a\x12\x9c\x7c\x4f\x47" + - "\x34\x3d\xa0\x66\x80\x6d\x7e\xda\x38\x4a\xf8\x91\x7f\xb5\x13\xf7\x65\x4f\x3b\xbf\x03\xa2\x22\xc6\x40\x74\x90\x98" + - "\xc7\x03\x99\x72\xda\x15\xc7\xf8\x72\x64\xb5\x1b\xf8\x59\xa8\x73\xba\xab\x9b\x70\x71\x51\x67\x7c\x92\x43\x08\x93" + - "\xa8\x7c\xa5\x4a\xb1\x28\xae\x94\x28\x4a\x7d\xa9\x81\xb2\x33\x5c\x99\x00\x02\x3a\x2d\xac\x8a\x2d\x42\x10\x0f\x27" + - "\x3a\x67\x04\x75\x4b\x37\x79\x9f\x43\x44\x79\x59\xe4\x0f\x2b\x31\x41\xf2\xa0\x73\xd1\x86\xf5\x6e\xa5\x0e\xbe\x48" + - "\x0e\x7c\xd3\x40\xdf\x57\x9f\x0c\xb4\x8e\xf4\x78\xf8\xdf\xdb\x90\x20\x04\x0c\xe4\xa2\x48\xf5\x4c\xab\xd4\x9f\x12" + - "\x7b\x39\x5a\x0a\xda\x72\xc5\x24\x2c\x59\xfe\x9c\xeb\xdf\x57\x8a\xb8\x47\x39\x9d\xd7\x54\x1f\xa2\xa0\x21\x96\xf2" + - "\x52\xc1\x4d\x7c\xb3\x94\x79\x5a\x8c\xac\x42\xb2\x83\xb7\xbf\x15\x48\xf7\x41\x62\x9f\x0f\x4a\x68\xb2\x48\xba\xa2" + - "\x3b\xb0\x72\xb3\x18\x9e\xbf\x1c\x5e\xf6\x44\xa7\x23\xba\xee\x0e\x7e\x6e\xcc\x6a\xa1\x02\xad\x46\xa9\x64\x4a\x5a" + - "\x9e\x62\x45\x62\x13\x3d\x21\x1d\x2c\x90\x33\xf3\x13\x3c\x18\xa1\x76\x95\x79\x83\xb2\x04\xd1\xd4\x73\x2e\x0b\x73" + - "\xe9\x88\x5c\x5d\x8d\x8a\xef\x02\x46\x20\x2f\x8a\x65\xcc\x59\x04\xca\x0e\xa5\x44\xa5\x4c\x35\x5c\xe5\xba\x1a\x4e" + - "\x8b\x52\x0d\xde\x1b\x04\x53\xaa\x2a\xa9\x33\x83\xda\x38\x45\xe2\x8e\xa7\xe7\xcc\x43\x9c\xea\x7c\xaa\x1c\x60\x0e" + - "\x07\x4f\x7a\xe2\xe5\x8f\xaf\x99\x51\x20\x49\xca\x0e\x6b\x19\x8d\x4c\x95\x15\x7d\x2c\x4b\x05\xd8\xc5\x1a\x33\x95" + - "\x0e\x40\xdc\x5e\x0b\xa7\xca\xcd\x90\x5f\x11\x27\xaf\x44\xf2\xe0\xf1\xb7\x5f\x7f\xd3\x1d\x20\x6c\xec\x14\x42\x68" + - "\x14\x93\xf7\xed\x1c\x37\xdc\x53\x49\x31\x79\xdf\xa5\x2b\xd8\x7e\xd1\x09\xa0\xc3\x27\x79\x44\x0c\x90\x3d\xd8\xf6" + - "\xdd\x2f\xa8\x60\xbb\x7b\x2c\x78\x62\x89\xfb\xde\x1e\xfe\x84\xd1\x8a\xc9\xfb\x01\xe9\xe7\xa2\xd1\xde\xac\x16\xaa" + - "\xd4\xd3\x2d\x5d\x0e\x87\x62\x29\x4b\xa3\xbe\xcf\x0a\x59\x89\x37\xf2\x8d\x01\x49\x18\x3e\xe8\x4f\xa5\xa9\x18\x2c" + - "\xcb\xc2\xe8\x4a\x03\xf7\x86\x5c\xdf\x06\x10\x65\x83\xaf\x36\x9d\x4e\x97\xfb\x19\x0c\x06\x20\xce\x2c\xb4\x41\x16" + - "\x70\x59\xaa\xca\x88\x4c\x49\xa0\xf6\xfd\x7c\xb5\x98\xa8\x92\xaf\x7e\xd3\x83\x41\x2b\x3d\x5d\x65\xb2\xcc\xd6\x62" + - "\xae\x6e\x44\xa6\x2b\x55\xca\xcc\x88\xa4\x73\x70\x33\x18\x0c\x5c\xb7\x66\x35\xa9\x4a\x89\x33\x07\x3c\x99\x2a\x10" + - "\xc0\x67\x3a\xd7\x95\x56\x46\x54\x05\x4c\x3a\x00\xce\x6e\x8d\x60\xf2\x62\x19\x4e\xfd\x60\xb5\xf6\x15\xb0\xcd\x11" + - "\xc4\x02\x12\xb9\x1d\x6a\x6f\x8a\x2a\xbe\x65\x46\xfc\xa2\x2f\x9e\xe7\x4e\x55\x53\x94\x44\xba\xc4\xf5\xbc\x00\x9a" + - "\x65\x79\xe3\xb3\xb3\x17\x99\x34\xe6\xe2\x82\x4d\x50\xd5\xda\xea\xfd\x3b\x67\xfc\x29\x4d\xe0\xa2\xe3\xba\x05\x4c" + - "\xcf\x8b\x54\x19\xf7\xc4\x1b\x6a\x90\x18\x86\x38\xc8\xb3\x8d\x38\xa5\xcd\x06\x71\x04\xfa\x78\xb7\x5e\x2a\xf8\xed" + - "\x80\x45\x78\x67\x3f\xab\x09\x6e\xfe\x82\xe2\xab\x01\x87\x83\xbe\x42\x2d\xeb\xde\x1e\x91\xd6\x5d\x52\x55\xb3\x94" + - "\x57\x6b\xe5\xb5\x70\x3d\xd1\xd1\xe6\xad\xfd\xf5\xe3\xac\xf3\x09\xe3\x0e\x87\xe2\x64\x46\xd6\x38\xde\x16\x31\x97" + - "\x06\x4e\x35\x7d\xa1\x52\x21\x33\xa4\x6e\x3d\x66\x08\xa6\x45\x3e\xd3\x29\x30\x1f\xd5\x5c\x5a\xfb\xda\xa6\x98\xbc" + - "\xdf\x10\x2f\x1a\x6e\x61\x8f\x8c\x61\xa4\xbb\xfc\xe3\x16\x36\xcf\xcd\x5c\xa5\xcc\x91\xa9\x6b\xde\x99\x50\x5a\x2a" + - "\x89\x3b\x71\x18\xf4\x6a\xb1\xac\xd6\x77\x62\x10\x48\x19\x70\x2f\xe1\xea\x6a\xbc\x97\x6f\xd5\x0a\x88\x6d\xc3\x02" + - "\x18\xb7\x8c\x66\xf7\x4b\x8c\x6b\x3c\x61\x40\x51\xf6\x45\xa7\xe3\x87\x68\xd1\x4b\x8b\xa7\xe2\xcb\xc1\x41\x4f\xe8" + - "\x1f\x4f\xc5\x53\xf1\xb5\x70\x36\x5e\x6d\xe6\xe2\x27\x75\xf9\xea\x66\x19\xea\xc2\x99\x65\xb7\xd4\x29\xc4\xc2\xfa" + - "\x2b\x47\x26\xd9\xec\xe7\xcd\x1e\x67\xce\x64\x42\xe8\x84\xa4\x15\x05\x0f\xd7\x1f\xd9\x02\x7d\x97\x35\x8d\x0e\x1c" + - "\x3f\xb4\x7c\x4a\x61\xc8\x54\x8f\xea\x3b\xb6\xc6\xb1\x02\xe9\xfe\xbd\x1d\x7a\x00\xcd\x23\x5d\x48\x91\xaa\x70\xcb" + - "\xa8\x0b\x12\xd4\x75\x9e\xea\x92\x74\x54\xea\x4a\x66\xcc\xc7\xe0\x17\x8e\xef\xa9\x4a\xbd\xb0\xbd\x1c\x05\x67\x27" + - "\xec\x37\xc0\x6a\x7c\xac\xad\x73\x80\x04\xda\xa1\xd3\x1e\xd0\x88\xac\xb8\x5c\x59\x3a\x8c\x52\x1f\xd1\x46\x34\x93" + - "\xc1\x4d\xae\xc4\xb2\x94\x97\x0b\xd9\x73\x36\x6b\xec\x6b\xb2\x16\x3a\x07\x38\xc1\x75\x2a\xdd\x67\x04\x88\x4a\x02" + - "\x97\xc5\x1a\x39\x6b\xd2\x19\xd0\xda\xec\x24\xad\x69\x2b\x09\xcd\x72\x74\xbb\x1d\x06\xd2\x01\x75\x38\xf6\xbd\xd0" + - "\x49\x7a\x45\x2a\xb3\xa4\x43\x0d\x3a\xd6\x8a\x4a\x3f\x07\xac\xca\x83\x71\xf8\x85\xfb\x7e\xae\x64\x3a\x90\xcb\xa5" + - "\xca\xd3\x17\x73\x9d\xa5\x89\x9d\x74\x77\xb0\x84\x8b\xbc\x42\xd3\x78\xa9\x80\x31\xad\x35\x60\x43\x6c\xc8\x0f\x83" + - "\x64\x55\xcd\x55\x79\xad\x8d\xea\x09\x79\x05\xd8\x0c\x8b\xb6\x24\xd5\x59\xc1\x7b\x42\xe7\x46\x95\x21\x8c\x81\xa9" + - "\xc0\x71\x64\x06\xe0\x5c\x19\x04\x65\x2e\xdc\xf6\x33\x2a\x01\x0e\xb0\x7c\xc1\x6f\x82\x8d\x8f\x78\x4d\x87\x9c\x2f" + - "\x8a\xfc\x4a\x95\x95\xb5\xc4\x54\x85\x70\x46\x90\x23\x52\x02\x4e\xd6\x84\x17\x86\x98\x9b\x54\x56\x92\xf9\x36\xd6" + - "\x17\xbe\xd6\xd3\xb2\x30\xc5\xac\x82\xbb\xf1\xb2\xa8\xa0\x93\xf9\x6a\x81\x12\xbd\x2e\xc5\x95\xca\xd3\xa2\x14\x4b" + - "\x32\xe4\x24\x0f\xbe\xfd\xea\x2f\x8f\xe1\x90\xba\x71\x42\x64\x67\xb9\xbc\x66\x36\xa0\xd3\xe7\x58\x4e\x67\x16\xea" + - "\x89\xce\xc2\xf4\x3b\x21\x3b\xea\x6d\x43\x3d\x11\xd8\x73\x62\xde\x30\x55\x6f\xe4\x42\xd5\x35\xd4\xa4\x6a\xa9\x8d" + - "\x0d\x2f\x06\xf6\x0b\xb8\xc2\xa3\x07\x83\xaa\xf8\xa1\xb8\xb6\xa6\x1f\x44\xc9\xbc\xf1\x38\xa6\x06\xa8\xfa\xd4\xc4" + - "\x6f\x06\x7a\x2a\x79\x49\x9a\xaa\x16\x35\x6b\x31\x79\xdf\xd4\x9d\x7a\x7a\x80\x97\x3b\x93\x03\x31\x46\x53\xcc\x4e" + - "\xa0\xe3\x81\xcb\x2f\xd4\xed\x69\x27\xf3\xf1\x5f\xc0\xa3\x32\xa5\x0e\xc9\x43\x38\x0c\x6b\x1b\xea\x42\xe4\x47\x74" + - "\x09\x3b\x30\x3f\x60\x3c\xc6\x5e\xed\xca\xaa\xd1\x62\xf2\x1e\x35\x04\x81\x26\x38\x14\x59\xf9\xb3\x31\xcb\xa5\xa1" + - "\xd8\x3a\x29\x95\xfc\x10\x48\x89\x81\x20\x15\x49\x9f\x34\x37\x5d\xbf\xcc\xfe\x87\xa7\xe4\x0d\x11\xc2\x2c\xd5\x54" + - "\x93\x13\x92\x81\x6b\x1e\xb0\xd2\x3a\xc0\x2c\x0a\x53\x89\x29\xfa\x0a\x91\xca\x72\x86\x12\x1b\x9e\xd6\x70\x55\x7f" + - "\xda\x36\x38\xbe\x88\x97\xac\x7b\xee\xc7\xff\xd9\xcd\xf8\xf7\x4f\x2c\x60\xe5\x3c\xe7\xf1\x49\xd6\x70\xb8\x48\xc3" + - "\x73\x19\x7a\x06\x58\x86\x03\x6f\x13\x6f\x34\xdc\xd9\xd9\xe9\x58\xf6\x80\x3f\xd8\x47\x51\x39\x20\x58\xd0\x2d\xc9" + - "\xcf\xf1\x2c\x4a\x65\x56\x59\xf5\x11\x5a\xb1\x90\x1f\x54\xdd\xe6\x2a\x64\x59\xf6\xdc\xe7\x01\xa5\x20\x33\x9a\x7d" + - "\xb1\xd9\x78\xe5\x0d\x9f\xf8\xb2\xa1\xb0\x0b\x31\x8e\x08\x05\xeb\x6d\x64\x59\x46\xba\xa6\xd8\x38\x57\x2a\x66\x50" + - "\x1c\x57\x84\xbe\x30\xc0\x68\x11\x31\xb7\x6c\xd6\xce\xce\x19\xbe\xba\x10\xa8\x39\xa7\x67\x6d\xd7\x27\xea\xdf\x19" + - "\x3d\xa0\x77\xfc\xaa\x76\xad\xdd\xdf\x66\x56\xd3\x79\x03\x46\x44\xf0\x11\x52\xba\xb6\x89\x34\x55\xde\x43\xd1\x3f" + - "\x14\x23\xeb\x6a\xc3\xe3\xe3\x57\xce\xc0\x14\x5a\xb1\x60\xf5\xe1\x28\x68\xe4\xe9\x09\xa3\xa6\x45\x9e\x36\x0d\x2f" + - "\xfb\xf4\xa2\x61\x7b\x39\xf0\xe4\x1c\x7b\xe0\x06\xbc\x59\xf6\xbc\xb3\x8d\xe5\x48\xbc\x0f\x0e\x3b\xb6\x3f\xc3\xf3" + - "\x7f\x21\xc6\x3c\xf2\x99\x78\xcf\xaa\x52\x86\x52\xd8\x2b\xdc\x04\x47\x11\xf0\xf0\x6d\xb0\xac\xcb\x52\x2d\x1b\xe6" + - "\xdc\xf0\x4a\xd2\xc4\x43\x04\xeb\xb3\xef\x4e\xe0\x8d\xe1\xeb\x69\xc1\x5e\x1f\x63\x71\x76\xb1\xfd\xc2\xc2\xde\x23" + - "\x90\xd8\xce\x5e\xdd\x2c\x89\xd7\xdd\xa5\x01\xbd\x01\xe1\xaf\x85\xf3\xdd\x22\x9b\x27\xda\x46\x50\x83\x6e\xe4\x95" + - "\x35\x5b\xeb\x4a\x2d\xac\xe4\x8a\xce\x91\x4b\xf2\x7d\x53\xc4\xe4\x4a\x90\x20\xed\x2a\x43\x40\x6f\x23\xac\xb5\x45" + - "\xc2\xc4\xec\x23\x06\x92\xa5\x62\x16\x53\x89\xa7\xad\x7d\x06\x02\x72\x6d\x89\xee\x58\x31\xc8\xd0\xc8\x16\xf6\x79" + - "\x07\xea\xf3\x27\x0d\xae\xe3\x63\x84\xe4\xee\x2d\x86\x0e\x3e\x9d\xe9\x68\xee\xe1\x16\xb6\x83\x2d\xf6\x3d\x2b\x09" + - "\x7a\x7f\xb9\x3b\xf6\xb5\x2a\x65\x6e\x32\x89\x02\x05\x6a\x36\x8b\x99\xdf\x5f\x41\xc2\x84\x2e\x51\x4e\xae\x99\x2a" + - "\xea\x77\xe7\x47\xaf\xce\xfa\x05\x55\xdb\x57\x86\x8b\xbb\x98\x82\x7b\xa9\x4e\x49\xd9\xad\x00\xf7\x91\x5a\x74\xeb" + - "\x7a\xe0\xe6\xa2\xc9\xea\xff\x41\x39\x6d\x2d\x6b\x09\x1a\x9c\x41\x70\xc3\x06\xce\x16\xff\xe3\x2b\x08\x97\xf1\x7d" + - "\x26\xab\x4a\xe5\x42\xe6\x6b\x91\x2b\x53\xa9\x34\xb0\x80\x58\x73\x3c\x7a\x3a\x5a\x16\xec\xec\xa2\x87\x77\x54\xed" + - "\x22\x7c\x6e\xc5\x9b\xbf\xfe\x7c\xf2\x52\x4c\x8b\x15\x20\x30\xa2\x32\xab\xbd\x80\x44\xad\x74\x3a\x42\xf3\x26\x5b" + - "\x7a\x75\x9e\x0a\xe9\x55\x34\x55\x21\xa4\x95\xb4\x7b\x6c\x27\x42\x8f\x3d\x54\x02\xe2\x5f\x38\x09\x12\xac\xd6\xee" + - "\xd0\xb0\x79\xf4\xfe\xbd\x9d\x65\x59\xdc\x44\x37\xc8\x2c\x6f\xf8\x07\xa2\x7f\xe5\x62\xd9\x63\xcf\x0a\xfc\x24\xbc" + - "\x61\xf9\x2e\x74\x1e\x24\xe1\x7d\x68\xa1\x5c\x2d\xd0\xfa\x9a\x9f\xb9\x66\x6c\xe4\xf2\x7e\x27\xb3\x9c\x9e\xa0\x67" + - "\x59\xb5\x58\xd6\xd4\x53\x7f\x5b\xe9\xe9\x07\x31\x9d\x2b\xf2\x70\x4b\x55\xa5\xca\x85\xce\xd1\x5c\xe1\x6d\xa0\x80" + - "\x0f\x72\x92\xa9\x9e\x75\x26\x01\x06\xd5\x11\x47\x6d\xc8\xd5\xd0\x08\x29\xde\xad\x97\x0a\xd5\xec\xe4\x2b\x72\xad" + - "\xc4\xb5\xce\x32\xf2\x80\xe2\x7d\x74\xa6\x8f\x81\x5b\x6b\x8b\x41\x54\xcc\xf2\xa6\x82\xcd\x7d\x5a\x5b\xc5\xa9\x5e" + - "\xac\x32\xd2\x84\xe9\x3c\x85\x87\xc8\x97\x8f\x23\x27\x32\xb7\x43\x3d\xf1\x98\xb1\x11\x81\xde\x34\xa9\xfb\xcb\x2d" + - "\xb7\xe8\x66\x01\xca\x8e\x05\xb4\x6b\xec\x7c\x9b\xb4\x0f\x83\xd3\x67\x37\x11\x4f\xa5\x4e\xd9\xff\x0c\x90\x10\x68" + - "\xd1\x8a\x0c\x2f\x73\x34\x40\x97\xc2\xfa\x1b\x81\x00\x59\xcc\xbc\x09\x8b\xdf\xf7\x84\x29\x84\xae\xd0\x6b\x67\xa2" + - "\x48\xce\x47\x13\x2f\x2d\x65\x80\xbd\xc2\xa6\xd7\xff\xf2\xba\x53\xf8\x89\xd6\xef\xe0\x68\x59\xe4\xf3\x52\xef\xf5" + - "\x08\x63\x26\x06\x79\x71\xed\xce\x09\x77\x60\x5d\x78\x59\x01\xcc\xce\x3f\xe2\x45\x51\x2a\xdc\x73\x8a\xe3\x58\x96" + - "\x05\x19\x33\x65\x55\x01\xd9\x45\x32\x4b\xfd\xb0\x0a\x99\xd5\xe1\xba\xe2\x35\xe5\x4a\xa5\xf8\x44\xdd\x68\x83\x7a" + - "\x1d\x63\x79\x6b\xfe\xe3\xfe\xbd\x5b\x22\x3e\xc3\xa1\x78\x5b\x2c\x71\xcb\x49\xdf\xe0\xfd\x97\x17\x72\xe9\x4d\x5c" + - "\x72\x3a\x4f\x3a\xdf\xb1\x9f\xc0\x1b\x52\xe9\xb3\x47\xb3\x45\x34\x32\x6b\xe0\x62\x59\x29\xc8\x5c\x2b\x59\x8b\x3a" + - "\xe8\x9f\x51\x25\x1d\xd1\xe9\x06\x2e\x43\x9a\xe4\x7f\x42\x97\x50\xfd\xe7\xd4\xe1\x1d\xb1\x4f\x2a\x82\x7d\xd1\xb9" + - "\xe8\x20\x7f\xd5\x2a\xed\xf3\x8a\x1c\xf1\x69\x0a\xda\xce\xcb\x63\x9b\x98\xce\x3e\xa2\x4d\x75\xfa\x51\x1c\xb8\x52" + - "\x57\x5e\x7e\x54\x9f\x5e\xd7\xe6\xde\xfa\xfe\x22\xc5\x3c\x69\xd7\xf6\xf6\x6a\xde\x05\x75\xb5\x2f\x7e\x1d\x68\x5b" + - "\x69\x3e\x48\xe7\x71\x32\x76\x7d\xe3\xb1\x38\x10\x9b\x8d\x5d\x5a\x31\x0b\xdf\x74\xc8\x32\xd3\x09\x86\x7b\x46\x6e" + - "\x44\x89\xfd\xdd\x47\x55\x9f\xb6\xc2\xda\x2d\x79\x9e\x53\xe8\x92\x18\xdf\xbf\x67\xa3\xa2\xf8\xc9\x8b\xd3\x53\x71" + - "\xca\xde\xad\xe2\x55\x7e\x09\xd4\xef\xea\x70\x70\x78\x30\x38\xfc\xf6\xf3\xc2\x9c\x0e\x9f\xfc\x5f\x11\xe0\xf4\x65" + - "\xff\xf0\x1b\x8e\x6c\x4a\xea\x81\x15\xd6\xb1\x12\x63\x02\x7a\xfe\x8c\xc1\x9f\xaf\x6e\x96\x65\x8f\xbc\x5d\xdf\xc1" + - "\xd5\x87\xa6\x81\xff\x7a\xfd\x43\x0f\xbd\x75\x3f\xa8\x5c\xff\x1d\xd9\xb8\x69\xb1\x58\xea\x0c\xff\x24\xaf\x60\xf8" + - "\xab\x58\xc1\xcd\x51\x98\xea\x05\x5f\x9c\xec\xf8\x74\x92\x2f\x57\xf8\x63\x2e\xcd\xcb\xd5\x32\xd3\x53\x59\x29\x47" + - "\x52\x7e\x40\x3f\x7b\xe7\xb0\x7f\x25\x01\x26\x3b\x46\x55\x2f\xbd\xc7\xfe\x4e\x1a\xff\xfd\x0a\x84\xa9\xe0\xf1\x89" + - "\xf9\x8f\x77\x34\xc9\x72\xb2\xba\xbc\x5c\xff\xed\xf4\xb9\xff\xc1\xce\xe3\x3d\xe4\x5a\xdd\x9f\xb0\x07\x52\xe7\xc6" + - "\xcd\xe3\x24\x37\x95\xcc\xa7\xaa\x8f\x9a\x97\x99\x9e\xa2\xea\xd2\x9b\xba\x05\x5c\xbe\xb8\xff\x70\xae\xfb\x09\xb0" + - "\x8b\x00\xf2\xa4\x8b\xec\xe8\x12\x7d\x42\x4b\x95\xbe\x2c\xa6\xad\x51\x07\x3b\xa9\x2e\xcb\x15\xba\xbd\x1c\xd0\xdc" + - "\xd1\xd9\x01\xff\x46\xf2\xf1\x42\x4e\xe7\xc8\x79\xa1\x1e\x1a\x7f\x25\x5d\x07\xf8\xad\x6f\x79\x2b\xca\xad\x0d\x60" + - "\x0b\x7e\x2c\x01\xaf\x22\x2f\xf5\x9e\x98\x44\xb6\x16\x89\x67\xcb\x3d\x8b\x36\x0b\xf8\x06\x3e\xc2\x91\x39\xe7\xa0" + - "\xee\x8f\x9d\xab\x52\x66\xfd\xe5\xaa\xc4\xd0\x2f\x34\x45\xc9\x1c\x39\x2e\x53\x95\xde\xe1\x61\x6c\x59\x1b\xf7\x08" + - "\x26\xfa\xfa\xf9\x7f\xfd\xf7\x9b\x57\x7f\x7d\xfe\xee\xe4\x3f\x5f\x09\x20\x27\x4f\x9f\x8a\x27\x87\x8d\x0d\xb2\xb6" + - "\x73\x42\x28\x8a\x3a\x49\xfe\xb8\xed\xd6\xe2\x4d\xa0\x47\x1b\x51\x83\x1b\x54\x2c\x6d\x54\x4c\xb1\xec\xb1\x87\xde" + - "\x7f\xe7\xb2\xd2\x57\x2a\x08\x97\xb1\x6f\x6a\x8f\x1a\xa1\x38\x3d\x1f\xae\x42\xee\x61\xcb\xa5\x4a\xfb\x29\x46\x5b" + - "\x70\xa0\x0d\xba\xf8\xc0\x3d\xfd\x10\xaf\x48\x21\x05\x8f\x56\xe4\xe8\xc3\xd0\x16\x8f\x03\x44\x30\x16\xab\x42\x66" + - "\x31\x96\x9d\x62\x57\xcc\xa3\x16\x11\x34\x96\x4e\xe8\x16\x98\x6b\x73\xa6\x2f\x70\xb3\xc3\xee\xdd\x9e\xea\x9a\xee" + - "\xdf\x3e\xef\x1f\x06\x9b\xcd\x8e\x77\x80\xcc\x1d\xe4\x1c\x55\xba\x21\x42\xa0\xd2\x8d\x34\xeb\x7c\xba\x91\xab\xaa" + - "\x98\x15\xd3\x95\xc1\xbf\x96\x99\x5c\x6f\x90\xee\x15\x99\xd9\xa4\x70\x56\x36\xa9\x36\xc0\x51\xa6\x9b\xb9\x4e\x53" + - "\x95\x6f\xb4\x59\xc8\xe5\x26\x2b\x8a\xe5\x66\xb1\xca\x2a\xbd\xcc\xd4\xa6\x58\xaa\x7c\x53\x2a\x99\x82\xdc\xb9\xe1" + - "\xa8\xb7\x74\x63\xa6\xc5\x52\xa5\x3e\x0a\xe1\x27\x75\xb9\xca\x64\x29\xd4\xcd\xb2\x54\xc6\xe8\x22\x37\xf6\xd5\x2f" + - "\x73\x5d\x29\xb3\x94\x53\x25\xa6\x73\x59\xca\x69\xa5\x4a\x63\xc9\xe9\xf5\xf5\xf5\xe0\xfa\x09\x92\xd3\x77\x3f\x0d" + - "\xa7\xc6\x3c\xe9\xdb\x28\x07\x33\x7c\x70\xed\x3e\xbd\x7f\x6f\xc7\xff\x80\x45\x9f\x9d\x9f\xdf\x3c\x3e\x38\x3f\xaf" + - "\xce\xcf\xcb\xf3\xf3\xfc\xfc\x7c\x76\xd1\x61\x94\xb8\xa3\xeb\x75\x5e\xc9\x9b\xe1\x03\x3f\x0f\x38\xbf\xf6\xc7\xab" + - "\x7c\x5a\xa4\x14\x69\xd5\x49\x8e\x47\xe7\xe7\xe7\xe7\x83\xcd\xd9\xf9\xf9\x75\xff\x62\x73\xf6\xeb\xf9\xf9\xcd\xc1" + - "\x41\xff\xfc\xfc\x46\x1e\x5c\x74\xf7\x3b\x01\xf9\x2c\x8c\xca\xd0\x35\x46\x65\x2a\x05\xc1\x0f\x6e\x33\x34\x20\xeb" + - "\x99\x86\xdb\x26\x1c\x0d\xe4\x23\x60\xa2\x7f\x5f\x15\x95\x75\x52\x12\x66\x5e\xac\xb2\x14\xb8\x49\x59\xff\xf8\x93" + - "\xe0\x24\x2b\xba\xce\x94\x7f\x48\x43\xd1\x59\x14\xb4\xee\x51\x7b\x67\x2f\x4e\x4f\x1f\x1f\x0e\xcd\x1a\x2e\x4b\x39" + - "\x98\x57\x8b\xec\x01\xce\xaa\x9f\xaa\x59\xdf\xcf\x04\x0e\x8c\x9f\xd6\x58\x34\xc0\xe6\x55\xa4\x9d\xeb\x4e\x4f\x74" + - "\xae\x1f\x44\x2e\x46\x76\x8a\x2e\xa0\xc5\x6c\x99\xcf\x47\xd7\xe5\x9e\x22\xf6\x9f\x9f\x9f\xc1\x7d\x10\x60\xc7\xbe" + - "\xe8\x3c\x4a\xe0\x59\x73\x67\xf7\x45\xa7\x9b\x1c\x8f\xea\x1f\xb0\x5c\xf0\xe3\x52\x95\xa8\x54\x4a\xa6\x72\x59\xad" + - "\x4a\x25\xd0\xf0\xb5\xd3\x79\x94\x9c\x3d\xfa\xf5\x8b\xcd\xee\x3f\x2e\x8e\xc7\xdd\x2d\x1f\x77\xfc\x0a\x49\x89\x21" + - "\x16\x20\x70\x4d\x54\x6d\x47\x8d\x38\xb3\xbd\x7f\x75\x81\x0e\xad\xe4\xdf\xe2\x1f\x3f\x41\x2f\x02\xfe\xf1\x25\x79" + - "\x73\x74\x1e\x25\xc7\xa3\x87\x89\x47\xcb\x5f\xe1\xdf\x87\x17\xdd\x47\xdd\x87\x9b\xf3\x4e\xfd\xc5\x79\x07\xde\x9c" + - "\x77\x36\x08\x87\x60\xdf\x00\x00\xdd\x4d\xeb\x1a\x3a\x8f\xce\xcf\x2f\x18\xaf\x97\x46\xad\xd2\x02\xe1\x3b\xba\x1b" + - "\x94\xe7\xe7\x09\x34\x60\x20\xbc\x2b\x44\xa9\xd2\xd5\x94\x44\x02\x76\xe0\x29\x66\x7e\xcf\x51\xc2\x40\xfd\x1e\x33" + - "\x33\x56\x9a\x5d\x96\xea\x7b\x9d\x55\x20\x5e\xd1\x4d\xee\x85\x38\xeb\x25\x73\x38\x10\x7c\x6a\xdc\xfe\x3c\x39\xf2" + - "\x80\x0a\xa1\xf6\x15\xed\x5b\xf2\xf9\x10\xeb\x6e\xfc\x6a\x1e\x0f\x84\xd1\x8b\x65\xa6\xfc\x80\x5f\x73\xc7\xb5\xaf" + - "\x93\xee\xd9\xf9\xf9\xc5\x05\x7c\x2b\x02\xf4\x04\x18\x3d\x0a\x7b\x7c\x02\x5c\xe8\x9a\xdc\x97\x51\x1b\x54\xc7\xb4" + - "\xc1\x23\x6e\xdc\xe9\x9e\x9f\xc3\x46\x79\x3a\x43\x5e\x51\xc8\xc5\xe6\x45\xde\x57\x66\x2a\x97\x2a\x15\x55\x29\x75" + - "\x06\x2f\xfc\x7e\xf6\x18\x0e\xf0\xd4\x14\x0b\x85\xed\xaf\x5b\xc9\xf0\xb2\x54\x53\xde\x90\xb9\x12\xa8\x01\x2a\x83" + - "\x20\x41\xe0\xb1\x48\x22\x4b\x44\xe7\xd7\xe6\x39\xdb\xdf\x00\x24\x7e\x65\x28\x5c\x74\x2d\x58\xba\x8f\x1a\x28\x26" + - "\x3a\xfb\x5f\x00\x59\xb8\x74\x54\xa1\x9c\x16\x8b\x85\xfc\x84\x51\x1e\xf5\x5a\x9e\x51\x37\xd8\xc9\x44\xe7\x12\x91" + - "\xeb\x13\xba\x4a\xce\x9e\xed\xff\x83\x36\x2a\x7e\xd3\x32\xe1\x47\x7e\xaa\x6e\x53\xff\x06\x18\xd8\x18\x69\xdc\x3a" + - "\xd2\xaf\xe7\xe7\x17\x0f\xcf\x3b\x17\x8f\x8e\xdb\x3a\xc7\xd3\x16\xc1\x83\x4e\x5d\xad\x6f\x7b\x14\x69\xb5\x11\x09" + - "\x6e\x2e\x36\x3e\xe9\x5f\xb8\xae\x91\xef\x06\xd9\x82\xe3\x18\x77\x3a\x27\x2f\x3b\xa3\x5a\x07\x0f\xee\x38\xe9\x0c" + - "\xed\x9d\xce\x8b\x1f\x9e\x9f\x9e\x36\x3e\x3d\x3f\x1f\x7c\xca\xc7\xef\x9e\xff\xb5\xf1\x69\xfb\x77\x8d\xcb\x04\xf6" + - "\x22\xee\xec\xf9\xbb\x77\x3f\x35\x7a\xab\x1d\x40\x6e\xfa\xf6\xf4\xd5\xcf\x2f\x7f\x6c\x6d\x1c\x81\x77\xa7\xf3\xe2" + - "\x3f\x4e\x7e\x68\x42\x66\x94\x20\xf7\x83\x76\x96\x4d\x26\x4d\xb5\xc9\xab\x39\xfc\x7f\x1f\x7e\x74\xfb\xc9\x74\xae" + - "\xb3\x74\x53\xcc\xfa\xc0\x56\x33\x59\x6c\xa3\xb1\x40\xc7\xd5\x95\xca\x37\x45\x9a\x6e\x92\xe4\x6c\xbf\x7f\xb1\xe9" + - "\x26\xe7\xe7\xe9\xa3\x6e\xde\xa4\xca\x02\xa9\x3e\xb7\xda\xd6\xdd\xf9\x79\xba\xdf\xdd\x74\xdb\x31\x0c\x29\x88\xe8" + - "\x68\x07\x34\xe0\x1b\x9b\x5b\x40\x37\xa2\xe3\x29\x01\xcc\x5f\x44\xdf\x71\x9c\xce\x0a\xfd\x11\x45\x86\x89\x4b\x30" + - "\x30\x1f\xa8\x23\x10\x69\xd8\xea\x81\x36\x89\xf5\xc0\xfc\x45\x61\x63\x54\x4c\x02\x4f\xfc\xf6\xc7\x53\x32\x74\xb0" + - "\x9b\xf6\x6f\x74\x23\xfc\x86\x93\x42\xad\x13\xcb\xac\xad\x9b\x54\x5b\x17\x1d\xe1\x91\x87\xa4\xfa\x7d\x73\x59\x6d" + - "\x32\xda\x16\xbf\x4b\x7e\x23\x10\x58\x75\xd0\x26\xc7\xa3\xfe\xf9\x79\xda\x3d\x46\xf8\x6f\x83\x5f\x72\x3c\x3e\xfb" + - "\xb5\x7f\xb1\xf9\xc2\x41\xd2\x73\xe1\xa5\x06\xc9\xda\x60\xb4\x73\x72\x3c\xc2\x5f\xcc\x86\x6f\x60\x31\xb2\x54\x72" + - "\x33\x59\x55\x55\x91\x77\xbf\x18\xa2\xac\x5f\xce\x95\x24\x51\x70\xf8\xeb\xfc\x3c\xa5\xa7\xf0\xdc\x09\x42\xc3\x5f" + - "\xcf\x7e\xfd\xe3\x62\xff\xfc\x8f\x73\xf3\xe8\xfc\x8c\x1f\x9f\x5f\x0f\xbd\x7f\x9a\x34\x3a\x5b\xf7\xd1\x2b\x15\xf8" + - "\xf7\x61\xa9\xaa\x52\xab\x2b\xf8\x5b\x9c\xbc\x84\x7b\xf0\xdd\xf3\xbf\xc2\x3f\x78\x58\x45\xc8\x3b\x95\xbf\xaf\x34" + - "\x5a\xad\x4a\x3b\xe9\x07\xc9\x19\x70\xb8\xfb\xdd\x4d\x72\x7e\xbd\xdf\xdd\x9c\x0f\xec\x83\xee\x17\x3c\x66\x69\xf4" + - "\x24\x23\xc6\x78\x78\xb6\xff\x8f\x0b\x0a\xea\xa6\x0b\x08\x9e\x3d\xdc\x9c\x9f\x07\xc1\xe2\xc0\xef\xd0\xcb\x2d\x6c" + - "\x7e\x0b\xc7\xc9\xb7\x59\x3f\xe2\x95\xcb\x55\xee\x06\x89\x90\x02\xaf\xdc\xb3\xf3\xf3\x54\xf6\x67\x17\x7f\x1c\xf6" + - "\xbe\xbe\x6d\xee\xde\xf1\xa6\x71\x02\x45\xa7\xbb\x19\xd0\x36\x32\xd5\xdd\x99\x05\x43\x78\xb1\xef\xbf\x7b\xbc\x80" + - "\xd4\xfd\x11\x48\x31\x81\x3c\x38\xd7\x97\x20\xa8\x76\x0e\x6e\x60\x2c\x7b\x25\xf7\xc5\xc1\xcd\xe1\xc1\xc1\xc1\x81" + - "\xcd\x6e\xf2\x46\xbe\x11\x0b\x3c\x5a\x70\x13\x4f\x8b\x54\x2d\x0b\xed\x52\xb7\xd4\xd3\x52\x3c\x7d\xfc\xa5\x3d\x45" + - "\x45\xf9\x41\x96\xc5\x2a\x4f\x31\xa9\x40\xae\x8a\x95\xf3\xb5\x16\xce\x63\xda\xe5\x62\xd9\x87\x79\x04\x12\x23\xce" + - "\x6e\x77\x3c\xa6\x3f\x36\x9b\x96\xb5\x90\x55\xdf\x4e\x9c\x1c\x1f\xb0\x35\x46\x11\xde\xb7\x41\x16\xdf\xbd\x7e\x2b" + - "\xa2\x69\xef\xec\xb0\x8b\xe5\xac\x2c\x16\x2f\xe6\xb2\x7c\x51\xa4\x2a\xa1\x81\xf6\xed\xf2\x5d\xd6\x15\xbb\x4a\xa2" + - "\x15\x32\x13\x6f\x33\x99\x2b\xdf\xa3\x48\xcc\xaa\x2c\x8b\x4b\x59\x29\xb1\x94\xba\xec\x7e\x6c\x88\x67\xcf\xc4\xe1" + - "\x81\xd8\x88\x83\x9b\x97\xdf\x1c\x1c\xf4\xe8\xe1\x9e\x38\xb8\x79\xf2\xfd\xf7\xf4\xf8\xc5\x81\x8d\xc4\xb4\xda\xea" + - "\x1f\x97\x95\x5e\x00\xc7\x09\xf4\x08\xbd\x13\xd8\xae\xf0\xdf\x3d\x4c\x9a\xf3\x83\x36\x15\x1c\xee\xaa\x5c\xe3\x06" + - "\x07\x4d\x60\x3a\x09\xe9\x32\x42\x33\x43\xa8\x72\x1a\xe0\x15\x00\xfd\x18\x41\x0a\xa9\x9d\x2d\xaf\xef\xdf\x23\x87" + - "\x89\x76\xc7\x95\x03\x9b\x05\xa3\x52\xd3\x4a\x18\x9d\x51\x12\xa0\x19\x33\x79\x7e\x52\xa4\x5d\x39\xdb\x36\x09\x17" + - "\xad\xee\x54\xc4\x47\xf7\xef\xdd\x8a\x29\xd0\x60\x91\x08\x8b\xc5\xac\x69\xf9\x83\xac\x69\x14\x0d\xc9\x5f\x1e\x3b" + - "\x7b\xc9\x0f\x98\xde\xe5\x52\x71\x3e\x14\x3d\x13\x36\xf2\x0e\x55\x1e\xde\xc1\x06\x8d\x55\x3d\xe0\x6c\x9d\x56\x23" + - "\x50\xf2\xb8\x38\x5b\x6e\x16\x80\x52\x65\xc6\xd9\x69\x6c\x38\x7d\x08\x9f\x93\x57\x4f\xbf\xb5\x42\x9a\x75\xca\x14" + - "\xe4\xea\x29\xc8\x71\x12\x01\xf2\x91\xb9\x60\x4a\x22\x17\x92\x16\x99\xbb\xc9\x2a\x4e\x9a\x17\x97\xe6\xa6\x2a\x41" + - "\x82\xb3\xb8\xc1\xed\xed\x55\x02\x52\x81\xe0\x98\xc1\xb3\xf7\xfb\xfb\x17\x68\x46\x37\x67\x7a\x7f\xff\x02\xb5\xf7" + - "\x64\x64\x8d\xc6\x12\x63\xf1\x5e\xf4\xc5\xa1\xd3\xe3\xdd\x92\x6e\x3c\xb0\x3d\x90\x42\xbc\x25\x05\x88\xf3\x10\xea" + - "\x51\xac\xb8\xb7\x49\xe0\xbd\x6a\x1d\x5c\x16\x3d\x61\x37\xdc\xde\xdc\x7f\x3b\x7d\x6e\xb5\xba\x3b\xba\x27\x2e\xcb" + - "\x62\xb5\x34\x3d\x51\x64\x69\x4f\xe4\x1a\xfe\xa3\xae\xad\xc6\x18\xfe\xb6\x8a\xf8\xc0\x74\xe1\x8d\x6f\xc7\xf6\xaf" + - "\x41\x71\x9d\xab\xd2\xea\x88\x81\xba\xd8\x26\xa3\x08\x27\x39\xa2\xa0\x9e\x5b\x29\xd0\x2f\x27\xb5\x2c\x27\x36\x4d" + - "\x86\x73\xf5\x75\x66\x3f\xdb\xc9\x11\xdd\x3f\xe8\x16\xd5\xea\x20\x45\x16\x4d\x0b\xc3\xc0\x7f\xdc\x3d\xda\x6d\xb1" + - "\xe5\x3a\x5f\x24\xec\xaf\x66\x6d\x49\xbc\xa9\xc5\x81\xc0\x3e\xa2\x25\xa2\xf9\xc5\xb5\x82\x27\xdf\xd6\x7a\xc6\xe9" + - "\x85\x9d\xc6\xfa\x73\x8c\x4b\xf5\x9b\x6b\x0f\xc1\xbc\x28\xab\xe9\xaa\x0a\x02\x38\x71\xc7\x61\xe5\xee\x36\x1f\xa8" + - "\x1b\x35\xf5\x58\x23\xba\xdd\xd0\x55\xfc\x74\xa9\x54\xda\x5f\x2d\x47\x16\xbd\x3a\x0f\x4e\x5e\x52\xb4\x8c\xed\x51" + - "\x8c\x09\x8f\xce\x0e\x2f\xba\xb5\xcc\x58\x91\x8d\xe9\xdb\xc0\xbd\x00\xd5\x97\x1e\x1a\x97\xaa\x62\xe7\xed\xef\xd6" + - "\x27\x69\x22\x16\xce\xdf\x00\x8f\x14\xda\xb7\xbd\x23\x36\xb9\x2e\xc3\x3a\x30\xd8\xf7\xbb\x4c\x4e\x3f\x4c\x54\x59" + - "\xae\xc5\x97\x83\xaf\xd9\x4e\x6d\xfc\xe7\x18\xc5\x42\x5e\x40\xb2\x04\x89\x56\x64\x45\x7e\xa9\x4a\xab\x3f\x70\xf8" + - "\x95\xb0\xf9\xe7\xc1\xd7\xdf\x7e\xfd\x84\x2f\x12\x5a\x07\x4e\xd7\x7a\x04\x07\x13\x09\xfc\x10\x7d\x18\x32\x9a\x34" + - "\x39\x14\xb9\x54\xe2\xe4\x55\x8f\xd4\x43\x3d\x14\xc0\x7f\x51\x93\x0f\xda\x59\xd3\x9d\x9f\x12\x77\x31\x59\xdb\xc0" + - "\x0c\x53\x29\x89\x26\xe6\x93\x97\xf6\xbd\x9b\xca\x40\xa7\x08\xd1\x45\x38\x01\x8b\xd6\x81\x03\x91\x87\x62\x1b\x86" + - "\x86\x1e\x93\x8d\x80\xce\xf6\xe6\xd6\xbf\x32\x6e\x4c\xbe\xe5\x78\xd2\xd8\xaa\x1c\xe7\x98\xf3\x1e\xfe\x6d\xc7\x7f" + - "\x6f\x4f\x24\x35\x74\x88\x1a\xb4\x21\x47\xd7\x85\xff\xec\x38\x6b\x50\xe2\xc9\x1d\x2b\xc7\xed\x86\xb5\x41\xeb\x4e" + - "\x60\xdd\xbd\x78\x9f\xb2\xa5\x79\x38\x40\x4c\x25\xcc\x09\xe3\x46\xe9\x78\x3c\xbe\xf0\x13\x08\x99\x08\x47\x9c\x9b" + - "\xa7\xc1\x7c\xb7\x7e\x27\x2f\xdf\xc8\x85\x0a\x0f\xa8\x9b\x69\x63\x9e\xdb\x27\x36\x20\xe9\xbb\x39\xb7\xe0\xfc\x3e" + - "\xb9\x40\x98\xb1\x4d\x31\x9e\x06\x06\x90\x59\xc7\xf8\xd6\x89\xfa\x16\xff\xc4\x2a\xdd\xc7\xb8\xbd\xdb\x17\xd8\xf4" + - "\x3d\x82\x2b\x6a\x29\xe9\x72\xc5\x05\xd9\xe9\xff\x6e\x24\xe2\xd6\xae\xb3\x2b\x02\x31\xf7\xbf\x06\x95\x32\x55\x3b" + - "\xdd\xcb\xd1\xf9\xa2\xc8\xe0\xbf\x6c\x42\xa4\xb1\xfd\x75\xe7\xb1\xd5\xbd\x71\x56\xe8\x71\x9d\xee\x01\x50\xa3\x9b" + - "\x11\x67\xfe\xfb\xe9\x73\x71\x5d\x94\x1f\x8c\x30\x55\x29\xf3\x4b\x85\x49\x00\x04\x03\xa5\x5f\x16\xa8\xb0\xfc\x7d" + - "\xa5\x40\x5e\xb6\x1f\xfd\x82\x56\x29\xfc\x4e\x30\x7f\x4f\xf9\xf4\xd6\xe4\x76\x3e\x63\xbf\x26\xa1\x6e\xaa\x52\xa2" + - "\x4c\x47\x54\x0e\xba\xb3\x9d\x00\x1d\x82\x1e\x30\xe1\xd4\xd2\xe5\x32\x2a\x95\x48\xde\xcd\x65\xfe\x01\xfd\x38\x80" + - "\xb1\x54\xd7\xe2\xe5\x6a\x59\xe4\x95\xf3\x5f\xaf\xd4\x74\x8e\x3e\x2f\x5d\xdb\xd9\xc9\x2b\xf1\x8d\x48\x0b\x85\x81" + - "\x71\x38\xaf\xc2\x86\xb8\xb9\xac\x43\xfe\xba\x68\x7a\x1d\x84\x37\x62\x4b\xa0\xc5\x6e\x4b\xfe\xcd\x9d\x1d\xe2\x44" + - "\x80\x21\x63\x65\x70\xb8\x91\xb1\x87\x5b\x42\xfb\x18\xa0\x9d\x53\xb7\x27\x1d\x9d\x76\xba\x61\x18\xbd\xdb\xf9\xc0" + - "\x6b\x9b\x44\x9c\x1e\xc8\x8e\x5f\xec\x05\xb9\x19\x63\x22\x68\xfb\x37\x61\xff\x02\x06\x40\x56\xa9\x9e\xd2\x91\x06" + - "\xea\x9c\xe9\x74\xfc\x10\x9d\x4d\x74\x0a\x52\xe6\xc3\x0b\xd1\xf1\xd3\x17\x63\x66\xb9\x42\x3b\xa1\x67\x21\x75\xbf" + - "\x1f\x4c\x9d\x5a\xa2\x7d\x90\x7b\xab\x0a\x8b\x92\x89\xf0\x6f\xeb\x13\x09\x51\xda\x8a\xeb\x8d\xb3\x81\xf9\x51\x95" + - "\x73\x0f\xf0\xb4\x3c\xba\x0c\x3d\x27\x77\xe4\x3a\x0f\x4e\x05\xaf\xe5\x7d\xa1\xf3\xa4\xd3\xeb\x78\xbf\xd6\x00\x3d" + - "\x82\x0f\xdc\xd2\xac\x58\xb5\x8d\xa4\x58\xb2\xed\x97\x32\x40\x57\x0b\xdb\xd3\x73\x90\xb8\xa2\x9e\xf9\x0b\x47\xf1" + - "\x5b\x09\x3e\x8b\x3c\xc9\xef\x46\xa2\x33\x91\x9b\xcf\xad\x98\x69\x72\x29\x8c\xb2\x2f\xec\x02\xa2\x45\x69\x17\x68" + - "\x2e\xe4\xe6\x55\x43\xba\x3b\x23\x16\x7c\x82\x80\xe7\x59\x46\x8e\x27\xc6\x3b\xdf\xd0\xae\xf8\xdd\x69\x06\x18\x7c" + - "\x71\xd8\x11\xdd\xed\xec\xbf\x95\x1c\x86\x8f\xd8\x09\x06\xdd\x0e\xc4\x07\xb5\xee\x93\x51\x71\x2a\xd1\x79\xbb\x98" + - "\x89\x4c\x2f\x34\x50\x21\xa3\xff\x4e\xbe\x2c\xff\x3f\x66\xaf\xc4\x1f\xce\xd7\x8f\x58\xe1\x1e\x3b\x5e\x75\x6f\x39" + - "\xab\x01\xb9\x5b\xb3\x37\x16\x86\x92\xc9\x59\x85\x41\xd9\x05\x65\x5c\xa8\x80\x50\x70\x12\x94\x6b\x0d\x14\x5c\x3c" + - "\xda\x71\x01\xca\xc8\x06\x41\x0f\x09\xaa\x1b\xfa\x66\x35\x9b\xe9\x1b\x95\x76\x6d\xe0\x18\x10\xb1\x44\x73\x24\x23" + - "\x3a\x50\x68\x23\x32\x90\x99\x80\x52\xc9\x5c\x20\x73\x8b\x6f\x7e\xc0\xd3\xd3\xc5\x01\x52\x95\xa9\xca\x5a\x2d\x8a" + - "\x2c\x55\xa6\x12\x2a\xaf\xca\x35\xfb\xdc\x38\x71\x2a\x72\xc6\x70\x12\xd3\x07\xb5\x36\x81\xe7\xb2\x6f\x8d\xed\xe0" + - "\x75\xcf\x7a\xcc\xba\xe0\xed\x9f\x8d\x12\xc9\x07\xb5\x86\x03\x2e\x3a\x5d\xf4\x50\xc5\xa0\xc0\x69\x91\x65\x1a\x93" + - "\x0b\x50\xb4\x2f\x29\xec\x7c\xe6\xc0\xc0\xd5\x2e\x31\x4a\x89\x13\x63\x56\x4a\x3c\x38\xfc\xea\x2f\x5d\x77\xdd\xc1" + - "\x84\x98\x8b\x71\x43\x88\xae\x78\xd6\x58\x7e\xc8\xd5\x63\xe2\x97\x0f\x4a\x2d\x7d\x4c\x52\xa9\xa6\xc0\x8d\x01\x28" + - "\xec\x75\x83\xa0\x62\xe0\x9e\xd1\x40\x66\xae\x67\x55\xd2\xf5\x21\x06\xee\xec\x24\xbe\x19\x4f\x02\x08\x11\x82\xc2" + - "\xca\x66\x3e\x33\xd7\x74\xae\xea\x48\xf8\x5a\xc2\x8d\xe6\xdd\x78\xe1\xc2\xe1\x40\x2a\xd4\x07\x4f\xd6\xcc\xcb\x10" + - "\x1a\x2e\x65\x29\x17\x1e\x09\x6f\xc5\x2c\xc7\x7c\x86\xa1\x1b\xf0\x42\x96\x1f\xea\xbb\x0a\xcf\x6a\x5e\xaa\x00\x95" + - "\x59\x7e\x66\x6f\x7a\x9c\xb7\x75\x99\x71\x9e\xa4\xf5\xe9\xb2\x7e\x01\x89\x22\xe5\x6d\xb4\xf7\x2e\x5d\x79\xdb\x67" + - "\xf9\x16\xf3\xfa\xf8\x6c\xc8\x2a\x15\xa9\xbe\x42\x74\x56\x18\x12\x60\x84\x74\xd9\x91\xe8\xe4\xd6\x17\x01\x3d\x94" + - "\x55\x30\x7d\xc0\x4c\xe8\x64\x7b\x48\x6c\xaa\xaf\x3a\x7c\x31\x3a\x72\x6a\x73\x18\xec\xce\xf2\x04\x3f\xa7\x8d\xb2" + - "\x9a\x1e\xb5\xcd\x8f\x30\x26\x7f\xe8\xc2\x81\x19\x5b\x90\x8f\xd0\x95\x61\x51\x0d\xb6\x8c\xd3\x4b\x3a\x6c\x4d\xf5" + - "\x55\x9b\xfc\x14\x3f\x8e\x03\x6d\xdd\xc4\x5c\xa8\x78\x49\x2e\x77\x62\xa1\x16\x45\xb9\x06\x31\xee\xe4\x15\xbc\x22" + - "\x08\xe4\xab\x2c\x63\x84\x8b\x76\xec\x79\x9a\x1a\xef\x9d\x6b\x3d\x76\x01\xcd\x24\x10\xd9\x99\xf3\x8c\xa6\x34\x2c" + - "\xb2\xaa\xd8\xc3\xcf\xee\x22\xe9\x14\x6f\xe9\x8d\x78\xab\x97\xaa\x6f\x14\xbc\x83\x2d\xcc\xb4\xa9\x30\xd1\x9e\xb3" + - "\x20\x6d\xc1\x00\x3b\x30\x20\x2b\x79\x43\x91\x68\x8a\x8e\xd6\x13\x54\x4d\x65\x5a\xa5\x8d\x2d\x4f\x53\x12\x2f\x13" + - "\x1a\xbf\xe7\x3a\xf2\x18\x40\x6a\x46\x7c\x6d\xfd\x5e\x37\x9d\xae\xcb\x08\x46\x2f\xc2\xf8\xa2\x16\x46\x02\xa9\x06" + - "\xb4\xa4\xd1\x30\x64\x0b\xb8\x06\x38\x14\x3c\x62\x1b\x70\x51\x44\x37\x5e\x94\x2e\xd0\x69\x0d\x80\x7a\x5d\x08\x66" + - "\x2a\x62\x88\x30\x66\xde\x0a\xd9\xfe\x78\x52\xbb\x6e\xc8\xff\xd7\x5f\x2e\x99\xc2\x80\x1e\x99\x8b\x03\x10\x64\x24" + - "\xdb\xa3\x95\x11\x93\x9e\xb8\x44\xe4\x2f\xa3\xf7\xb3\x22\xcb\x8a\x6b\x43\x1d\x87\xa0\xe5\xe9\xe1\x12\x22\xe7\x3a" + - "\x8c\x6e\x5a\x01\x4c\x27\xc0\xff\x48\xca\x99\xa6\x67\x33\x60\x27\x57\x25\x3e\x6b\x71\xa3\x9d\x34\x9f\x21\x92\x27" + - "\xe2\x1f\x93\x81\x29\x56\xe5\x54\x9d\xe4\xa9\xba\x01\x76\x29\xf2\x9b\xeb\x8a\xbe\x6d\x28\xef\x6e\xe8\x92\xb5\xc1" + - "\xd5\x72\xf2\x4a\x84\x8d\x61\xb1\x57\x52\xa3\xc7\x3f\xdc\xb0\x93\x02\x53\x7b\x91\xfa\x98\x0f\xe1\x6c\x56\x53\x2f" + - "\xc1\xa3\x28\x55\x19\xe9\x5c\xf4\x4c\x4c\x1c\xe0\xa4\xfd\x1e\xd6\xce\x9f\x3b\x6d\x26\xc1\x69\xba\x2a\x07\xb9\xba" + - "\xa9\x4e\x09\xa4\xdd\xd8\x7f\x0d\xdb\x44\x8e\x8a\xb1\x83\x5a\x83\x01\xb2\x51\x7a\xe2\x58\x1c\x8a\x11\xb5\x8a\xd0" + - "\xce\x22\x43\x1c\xfe\xc1\xb6\x46\x6b\x9f\xa5\x48\xa8\xe5\xaa\x42\x4d\x5e\xfb\x99\x86\x37\xed\x0c\x00\x7a\xc0\xbe" + - "\xc5\xae\xd8\x0f\x9b\x26\x6f\xa9\xe2\x56\x87\x3f\x64\x60\xc6\x77\x05\x91\x87\xf9\x15\xa9\x35\xc8\x3a\x38\xd5\x8e" + - "\x53\x5e\x38\x57\xeb\x8a\x14\xf1\x5e\xf1\xfb\xd9\x40\x20\x73\xe2\xe7\x02\xe0\x3b\xfc\xea\xdf\x0f\x81\xa4\x01\x82" + - "\xcd\x26\x00\x0b\x4d\xbe\xd3\xfd\x77\x00\xc6\x26\xba\x90\xd9\x36\xaa\x3d\xcb\xdb\x81\xf3\xd6\x7d\x69\x01\xe4\xee" + - "\x64\x17\xa3\x17\x30\x1c\x61\xe0\xee\x65\xa4\xd4\x76\xbf\xc7\x62\xdf\xfe\x1d\x42\x67\x4b\x37\xc0\xd0\xf7\x6c\x1c" + - "\x60\x6c\xad\x60\xb1\x08\xdf\x21\x65\x40\xdf\x13\xb8\xea\xcf\x2e\x48\x12\xb0\x66\x8c\x60\x32\x81\x49\x23\xfc\x30" + - "\x8e\x4a\x75\x69\xbd\x7d\x56\xe1\x19\x6a\x22\x64\x55\xbb\x44\x35\x7d\x1e\x19\x3e\x22\xa9\x95\x34\x36\x4a\xa5\x67" + - "\x22\x79\x5f\x1b\xf4\x4c\x5f\x74\x45\xa0\x33\xdb\xc1\x76\xef\xe1\x26\xda\x4d\x78\xc9\xf4\x93\x5f\xb4\xc5\xa8\x11" + - "\x4b\xd3\x14\x79\xe8\xbe\x92\x94\x8f\x63\x46\x89\x93\x74\xaa\xab\x35\x25\x90\xe6\xe0\x02\x97\xb0\xa5\x79\x43\x6d" + - "\x48\xb2\x19\xdf\xc6\x8d\xdc\x7d\x15\x37\xdb\x70\x18\xcb\x2d\xde\xfb\x44\x8d\x70\x68\xa0\xd6\xd3\xa9\x5a\x56\x14" + - "\xa0\x55\x78\x13\x15\x32\x5c\x6b\xe2\xa0\xeb\xc8\xd7\x26\x8a\xc7\x68\x67\x1f\xfa\xba\x26\x77\x69\x17\x51\xcb\x12" + - "\xb9\x79\x7b\xc5\x8c\x03\xdd\x10\x44\x8a\xc2\x28\x57\x05\xe0\x4a\x96\x74\x7e\xa6\x45\x7e\xa5\x72\xad\xf2\xa9\xba" + - "\x7f\xcf\xd7\x08\xe0\x72\x33\x8d\xa2\x01\x76\x13\xc8\x52\x69\xc4\x7f\xbd\xfe\xc1\x5e\x50\x5b\xe1\x7c\x4b\xd4\xe5" + - "\xb9\x63\xb0\x31\xcd\x62\xa0\x66\x8e\x80\xef\xa1\x5d\xae\x00\xc6\x94\xff\x9a\x72\x30\xe5\x45\xde\x47\x93\x89\x1d" + - "\x96\x81\x8b\xc1\x12\x7e\xd6\xf6\x67\x2b\x79\x1b\x0e\xdd\xc8\xaf\x6c\x9e\x66\x23\xae\x54\x49\x68\x4f\xd9\xed\x8d" + - "\xb2\xa5\x5f\x74\xe5\x14\x64\x6b\x55\x51\x84\x14\x27\x71\xb6\xb5\x57\xb2\x82\x7c\xf4\xf4\xac\x94\x0b\x4c\x3a\x06" + - "\xf7\x7a\x5f\x3c\xf8\xf2\x9b\x27\x68\x8b\x40\x16\xbf\x36\xe6\xd8\x19\x26\x50\x83\xde\xb4\xab\xc1\xd3\xee\xa0\xf6" + - "\x59\x20\xd7\xd4\x3b\x3c\xae\x3f\xf1\xf9\x50\x50\x0f\x07\x70\xeb\x88\x91\x93\x05\xe2\xfd\x3c\x55\x95\x67\x01\xfb" + - "\xa5\xa2\x98\xbe\x2b\x59\x6a\x40\x6e\x23\x8a\x7c\x4a\x99\x40\x53\xab\x94\xb4\xd9\xf0\xe3\x6d\xdc\x82\x00\x67\x69" + - "\x31\xbd\xa8\x61\x80\x67\x38\x49\xcf\xc0\xf4\xbd\x2a\x30\x17\x7c\x68\xdd\xa9\x61\x88\xed\x34\xd4\x55\xb4\xcd\x66" + - "\x78\xff\x5e\x60\x6f\x0c\x90\x3a\x7a\x18\x24\x97\xf7\x62\x0d\xd7\xd6\x78\x51\x2c\x40\xb4\x21\xe6\x11\x03\x4c\xb0" + - "\xcd\x31\xfe\xd3\xdc\x32\x7c\x19\xdb\x41\xc9\x25\x80\x64\x2a\x94\xf0\x06\x2c\x56\xfd\xa7\x56\xd7\x8e\x15\x3c\x99" + - "\x89\xbc\x08\x6a\x6e\xe4\x69\x1b\x8e\x3a\xd6\xb0\xc7\x26\xa8\xc0\x9e\x88\xb7\x69\x1a\xcc\x05\x86\xaa\x59\x25\x37" + - "\x1b\xb1\x8b\x33\xa8\x75\x5d\x63\x27\x03\x6b\xeb\xad\x4f\xc6\x58\x89\x62\x55\x86\xa6\xa1\xa0\xd6\x47\x5a\x4c\x8f" + - "\x7c\x84\x90\x5d\x67\x03\x73\x23\xef\x07\xa4\x83\xa6\x11\x4c\x84\x69\x03\xe0\xf8\xd2\xaa\xba\xf5\xcf\x46\xe2\xe4" + - "\xd5\xb3\x6f\x1c\xd4\xe8\xc8\xf9\x85\x03\x94\x8c\xd1\x97\x39\x25\x49\xea\xf8\xb2\x3c\x16\x95\x11\xb8\xda\x7d\x39" + - "\x97\x46\x4c\x94\x02\x69\x1d\x8e\x31\x45\xc4\x90\x66\x1c\xa5\x3a\x4a\x61\xd9\x59\xaa\x72\xa1\x31\xc0\x41\xa4\x40" + - "\x2d\xd3\x0e\xd7\xfb\x40\x2b\x26\xdc\x02\x06\x95\x08\x2d\x03\xe2\x7d\x6d\xa3\xd3\x1e\x1c\x3e\xf9\xf6\xc9\xd7\x76" + - "\x88\xaf\xfb\xdf\xd8\xca\x4f\x96\xd0\x56\xbe\xae\x03\x60\x88\x4f\xfa\x67\x0a\x2b\x9a\x5b\x69\xd3\x11\x7c\x8b\x06" + - "\xfc\x7e\x6f\xcf\xfe\x05\xdb\x4e\x7f\x0e\xaa\x62\x19\x68\xb5\x4e\x5e\x1d\x1e\x22\x59\xc3\xb1\xe7\xf2\x4a\x71\xb0" + - "\xe8\xab\x2b\x95\x57\x18\xea\x0a\x82\x35\xba\xb2\x9b\xd5\x6c\x86\xde\xc1\xe1\x20\x03\x99\xa6\xd8\xf6\x07\x6d\x2a" + - "\x95\xfb\x92\x1b\x3b\x5b\xde\x27\xa2\xb3\xca\x01\xc2\x9d\x5e\x33\xe6\x37\x72\x0b\xb0\xaa\xe5\x9e\xcd\x17\xc3\xfe" + - "\x21\xde\xec\x65\x87\xf0\x33\x6e\x8c\xee\x5f\x25\xa2\x53\xe4\x9f\x39\xb4\x57\x59\xf0\x01\x78\xe4\x03\x19\x00\x65" + - "\xfb\x7f\xca\xff\xb8\x00\x5a\xdd\xe3\x85\x91\xfb\x3f\xe1\x42\x5a\x93\x7e\x21\xb4\x7b\x60\xe1\xad\xcc\x26\x23\x35" + - "\xa1\xdb\x2b\xf9\x88\x57\x91\xea\x51\xdd\x00\x83\x02\xa8\x79\xf2\xea\x1b\xe7\xeb\xd9\xf5\xe1\x87\x83\x28\xae\x82" + - "\xb5\x53\x9e\x26\xa2\x06\x87\x60\x95\xea\xab\xc1\xd4\x19\x0a\x81\xd5\xef\x84\x5c\xee\x2e\xbc\x8f\x2d\x34\xae\x75" + - "\xc7\xb3\x72\x04\x4e\xcf\xc8\x24\xa6\xfb\xdd\xfa\xd1\xbf\x03\xa8\x4e\x0c\x6e\xb5\xc9\x76\x1e\x75\xba\x0e\x88\x98" + - "\x82\x24\x30\x78\xb5\x9a\x51\x2d\xbf\xf5\x71\x28\x45\xd9\xe8\x80\x16\xb2\x3e\xba\x58\x90\x42\xaf\xd3\x8d\x13\xf4" + - "\x5b\xd0\xb5\xcf\x32\x30\x20\xdd\x7a\x7a\xd8\xbe\x3a\x6f\xc8\xe5\x38\x75\x74\x66\x42\x12\xf1\x11\xd3\xf0\x58\xb0" + - "\x2f\x2a\xdb\x8f\x60\xda\x5b\x6d\xc4\x7b\x7b\x1f\x85\x81\xce\x73\x55\x32\x45\xef\x3c\x85\x97\x88\x0d\xe3\x87\xf2" + - "\xe1\xb3\xa7\xc3\x54\x5f\x3d\x8b\x1e\x0a\x6d\x1f\x77\x8e\x9a\x8e\x60\xa7\x72\x26\x4b\xfd\xd4\x3a\x48\xbe\x40\x01" + - "\x06\x3f\x15\xc5\x95\x2a\xfb\x53\x89\x2e\xc6\x76\x6c\xf4\x05\x46\xf0\xb7\x22\x6c\xd8\x33\x7a\x77\x3c\x3d\x3c\x88" + - "\x7a\xbe\x7c\xf5\xdd\x8b\x37\xe8\x7c\xb7\x2a\x91\x21\x99\x69\x0e\xbf\xe0\x24\xb5\x34\xb6\x32\x91\x16\xe6\x6a\x9b" + - "\x59\xbc\xa3\xdd\x26\xe2\x35\xfd\xb8\xb6\x95\xe1\xe9\x3f\x3c\xd8\xba\xbd\xdf\xad\x4f\x52\x87\xb1\x4e\x7a\x63\xaf" + - "\x13\x5f\x15\x68\x52\x16\x1f\x54\x5e\xff\xce\x26\x3e\x4e\x31\x6f\xf6\x52\x4f\x3f\x88\xd5\x12\x28\xc5\x65\x29\x17" + - "\xb2\xd2\x53\x20\x2a\x7d\x60\xbc\xa0\x37\xc3\xb7\xa0\x29\x38\x82\x12\xad\xd5\x72\x52\xac\xaa\x18\xdf\x10\xb2\x80" + - "\x30\x31\x82\xe1\x90\x1f\x39\x27\xc4\x2c\xd4\xce\x0a\xbc\x47\x9f\x8f\xc8\x76\xef\x8e\x49\x1d\x27\x71\x78\xcb\xd6" + - "\x34\xde\x24\xce\x2c\xb0\xe5\x0c\x9d\xbc\xa4\x9d\xc5\x6c\xd0\x18\x86\x64\xaf\xd2\xfa\x5a\x42\x0d\x2b\x7c\x72\xd6" + - "\x39\x79\xd9\xb9\x88\xb8\x47\x9d\x36\x12\x8d\xb4\xa5\x13\xa9\xb9\xc4\xb4\x4a\x6f\x35\x96\x28\x48\x12\x53\x8a\xbb" + - "\x5c\xaf\x02\x53\xf5\xbf\xe6\x7a\xf5\x39\x9e\x57\xe8\x71\x15\x69\x04\x51\xaa\x89\x7c\xad\x8e\xc5\x99\x58\x70\x65" + - "\x91\x50\x5b\x78\x14\x00\x15\xc0\xdf\x0a\xd6\x48\x35\x02\xb7\x15\xe2\x96\x0e\xcd\xfc\xd6\x9d\x1b\x2f\x78\xf6\xec" + - "\x66\x48\xdc\xa9\xe9\x8a\xf3\x47\x36\xdd\x0b\xf0\xb8\xd2\x90\x3c\x6d\x97\x54\x24\xf2\x21\x88\x0f\xf1\xd7\xc3\xbf" + - "\xf0\xc3\xda\x5e\xb3\x87\x55\xa9\x32\x66\x45\x51\xbf\x05\x18\x68\xd8\xdb\x0f\x4f\x06\x99\xee\x6a\xb8\xc6\x54\xb1" + - "\x0d\x58\xff\x73\xd0\x42\xcd\x20\xa5\xad\x65\xac\x6e\x00\x0e\xf7\xbb\x0d\xa9\x5b\x5b\x46\x06\x75\xab\x4e\x85\x1e" + - "\xd8\xa7\x72\xe0\xb3\x07\x6e\xdb\x06\x7b\x98\xdf\xc9\x4b\xce\xa4\xc0\x50\x7b\xf7\xfc\xaf\x08\x9e\x3b\x2f\x73\x74" + - "\x76\x0f\xfd\x87\x2f\x3f\xf7\x14\xdf\xa5\x89\xa9\xa3\xd9\xdd\x5e\x62\x95\xbc\x8c\x13\x86\x91\x1f\xfd\x47\x66\x07" + - "\x7b\xa2\x38\x31\x83\x4b\x4c\x64\x33\xb7\x85\x69\xbf\x02\xdf\xd9\x4f\x9b\x87\xd5\x17\x52\x84\xa6\x00\xe2\xef\x6a" + - "\xaf\x4c\x89\x97\x09\xbc\x83\xe0\x2b\xd4\xf6\x3e\x0a\x7c\x7d\x9c\x8d\x81\xbd\x04\x79\x0a\xde\x5d\xfa\x7e\xcd\x53" + - "\xb3\x6e\x7f\x09\x7c\x32\xaa\xc5\xb2\xd5\xe5\xaf\xe6\xdb\xe7\xf2\x9c\x70\xc6\x25\x7e\xdf\xe2\x26\x72\xeb\x99\x29" + - "\xb8\xab\x63\xec\x21\x9f\xbb\xad\xf8\x13\xf9\xd4\x05\x59\xa0\xed\xe3\xc6\x3e\x7d\x14\x89\x7c\x8f\x9f\x71\x25\xdc" + - "\x85\x57\x81\x5f\x9e\xe7\x82\xba\x91\x13\x3a\x31\xe3\x7f\x3b\x7d\x3e\x64\x9d\xec\xa9\x2f\x3b\xf8\xa7\xf3\xe3\x7f" + - "\x3b\x7d\x8e\x37\x6d\x6d\x28\x9f\x62\x88\x9a\xd5\x5e\x27\x23\x39\x05\xb6\x14\x98\x75\x2a\x01\x4c\x62\x21\xd5\x0a" + - "\x2a\x57\x4a\x24\x27\xaf\xbe\x1d\x22\x1f\x27\x0e\x0f\x07\x18\x03\x1c\x65\x20\x09\x5c\x3e\xd0\x73\x4f\x26\x23\x4c" + - "\x90\x70\x47\x8f\x2f\xe6\x65\xb1\x50\xe2\xf1\x61\x97\x93\x19\x28\x2e\xf2\x19\xd5\xbf\xc5\x82\x8b\x93\xd5\x25\x29" + - "\xfc\xbe\x19\x7e\x4b\xd7\xa5\xcd\xc8\x95\x93\x8a\x80\x7a\x80\xce\xb1\x3e\xca\x6f\xce\xca\x4f\xeb\xe2\xfd\xfa\x4d" + - "\x70\xf9\x65\xc3\x2a\x36\x99\xb3\x8a\x82\x79\xc4\xa2\x27\xae\xed\x2c\x68\xfe\x70\x9f\x73\x6a\x44\x4a\x43\x87\x00" + - "\xe6\x12\x84\x95\x5e\x28\xef\xac\x02\x4f\x4e\x5e\x85\xf3\x39\x55\xca\x46\x69\x4d\x56\x97\x66\x10\xd4\x1e\xa7\x82" + - "\xcc\xc3\xc3\x27\x4f\xfe\xf2\x4d\x98\xda\x25\x80\x23\x39\xe7\x85\xde\x9a\x6d\xe2\x43\xdd\x91\x2b\x70\xd3\x74\xb5" + - "\x05\xa1\xdf\x52\x5d\xaa\x1b\xe7\x8e\x70\xa9\x6e\xd0\xa9\xb2\x52\x97\x6b\x21\xd3\x62\x59\xa9\x94\xdc\x13\x5e\x6a" + - "\x75\x59\x88\xb7\xaa\xd4\xb9\x46\xbb\xcb\x1d\xec\x25\xad\x31\xe3\x22\x98\xa8\x50\x2c\x6c\x69\x4d\x2e\x2a\x95\x0b" + - "\x4e\x98\x62\xdb\xbf\xa3\xf2\x7a\x98\x09\x4c\x99\x4a\x9c\xbc\x7a\x68\x44\x05\xa2\x1b\xa9\x29\xa9\x9a\xab\xba\x59" + - "\x66\x7a\xaa\x39\xf4\x04\xb9\x64\x55\x51\xd6\x74\xe7\xfa\x81\xe7\x31\xaf\xbc\x70\xde\x73\x6d\xb1\x2e\x09\x3a\x5a" + - "\x60\x01\xf1\x69\x98\x06\x42\xe5\xb0\x8f\xb6\xe9\x47\xb6\xe7\xf1\x93\xaf\xbe\x75\x0e\x18\xb1\xb4\x45\xde\x65\x62" + - "\x61\x10\x5d\xa6\x99\x5e\x8e\x1f\x3e\x7c\xf6\x94\xf2\xe9\x09\x9b\x30\x04\x9f\x0d\xe9\xe1\xb3\xa7\x9c\x80\xc1\x89" + - "\x5f\x35\x9e\xe6\x1b\x76\x84\x17\x87\x87\xfd\xc3\xc7\x83\xc3\xaf\x6d\x9b\x37\x05\xc5\xb5\xfb\x55\xd8\xfe\xe9\x40" + - "\x85\x30\x37\x6c\x8f\x16\xbf\x8e\x45\x51\x8a\x2f\xf0\xbf\x8f\xc6\x1e\xfe\x24\x4b\x78\xb0\xb9\x64\x0a\xab\xfc\x43" + - "\x4e\x39\x5e\x78\x1a\x93\x55\x25\x3a\x46\xce\x54\x07\x35\xf6\xbf\xe8\xfc\xa7\x77\x35\xc0\x2d\x4c\x9a\x0f\x16\x36" + - "\xeb\x39\xc2\x4e\xe5\xfd\x95\x19\x52\x20\xeb\x7a\xa8\xd5\x70\x3e\xff\xf2\xeb\xaf\x9e\x7c\xf3\xcd\x40\x9a\xe5\x8d" + - "\x4f\x3c\xf1\xdf\x46\xb9\xf4\xa2\xde\xf9\xa5\xe1\x98\xd8\x39\x0b\x40\xfc\xeb\xf8\xe1\xc3\x0b\x2f\xe8\xf9\xab\xdf" + - "\x39\x2d\xd3\xe5\xd5\x39\x7b\xf4\xeb\x17\x17\xad\xa1\xe3\xc7\xa3\x87\x0f\x37\xe7\x9d\x73\x0c\x77\x8e\x3d\x2c\x6b" + - "\xbb\x61\x9f\xd9\x0c\x6b\x35\x2d\x50\x07\xd9\xa6\x0e\x73\xee\x15\x21\xb1\x4a\x6d\x75\x67\x46\x5d\xf2\x7c\xdc\xb2" + - "\x32\xbb\x8b\x9f\xb4\xa4\x2d\xd9\x38\x8e\x47\x38\x8f\x4d\x23\xcc\xb8\x6d\x79\x14\x5c\xc1\x84\xbc\x2f\x46\x9c\xdf" + - "\xc6\x22\x56\xe4\x40\x09\x24\x92\x90\x39\xf2\x52\xde\x96\x05\xe6\xf1\xc1\xe1\xe1\xf0\xa7\x57\x2f\xfa\x71\x06\x95" + - "\x3e\x3c\x3f\xf8\xf6\xf1\xb7\xc3\x07\x3c\xd8\x7d\xe7\x17\xfd\x8d\x25\xe3\xa4\xe6\x45\x53\x10\xba\x5e\xeb\x2c\x23" + - "\x85\xad\xc2\xc4\x09\xaa\x74\x8a\xec\xbb\x01\x6a\xd7\xf3\x71\x70\x06\x4d\x8f\x6a\xd6\xd0\x4f\xa2\x7a\x16\x4d\x28" + - "\xb1\x9c\x11\xdf\x88\x37\xe4\x9c\xf8\x7c\xb9\x34\xd1\x59\x03\x36\x0b\x95\x86\xc0\x19\x84\x28\x54\x2a\x60\x94\xb0" + - "\x84\x83\x4a\x45\x4a\x39\x25\x02\x22\x43\x3a\x76\x17\x23\x42\x65\xce\x97\x2b\x6b\xe2\xa8\xf9\xaf\x91\x4b\x80\xcd" + - "\xad\x0b\x3f\xea\x9e\xd6\x30\x93\x4e\x4f\x74\x28\x23\x91\xc3\x8e\x86\x2e\x8d\x06\xe9\xd6\x3f\x87\xf9\xc3\xe7\x2f" + - "\x3b\x11\xdf\xda\x76\x60\x5e\xe5\x58\x19\x08\x4d\x7c\x7d\xa3\x72\xac\x56\xa4\x2b\xac\xb8\x15\x83\xe1\xa3\x67\x1f" + - "\x9a\x8f\x3f\xed\x7c\xe0\x04\x5b\x22\xda\x5d\x7a\x99\xb6\x03\xf1\xfd\xf7\xe2\xc9\xe0\x2b\x38\x0a\x2a\xc7\x84\x4d" + - "\xc3\x91\x4d\xdd\x84\xbb\x46\xc0\xf2\x9a\xa0\xa4\xfe\x00\xb6\xd1\x54\x80\xb0\xdc\x41\xf7\xdf\x89\xdf\x3c\xc6\xa7" + - "\x80\xc3\xb5\xed\x89\x8e\x5b\x53\x1b\x08\xf8\xca\x39\xe8\x87\xe6\x0a\x32\xc9\xc0\xf5\x5d\x98\xaa\x4f\xd9\x44\x74" + - "\x8e\x3e\x00\xd6\x33\xc4\x61\x4f\x73\x9e\x8f\x7a\xa3\x1b\x8b\x8b\xf5\x83\xd7\x1b\x3c\x1a\x75\x6c\x79\xd9\x7a\x20" + - "\xa0\xe5\x76\xea\xec\x6b\x9d\xf3\x49\x7c\xfe\x6c\xab\xe3\xb2\x4f\x28\xb3\xa2\x7d\x7a\x8d\x04\xef\x75\xad\xbb\xb8" + - "\xcd\xa2\xf8\xfb\xdd\x0d\x8a\x8f\x7c\x6f\x6a\xef\xbb\x8e\x09\xfb\x14\x5a\xf2\xc2\x66\xa7\x05\x6c\xd0\x33\xa1\xab" + - "\x87\xc6\xcb\x80\x55\x21\xd2\xa2\xce\xaf\xdb\x4f\x81\x85\x15\xa9\x36\xd3\x22\xcf\x89\x62\xa3\x5c\x9f\x9c\xbc\x12" + - "\xdf\x12\x1e\x5a\x80\x86\x8d\x5e\x73\x88\xa3\x4d\xa8\x4d\x11\xd7\xa9\xbe\xea\x09\x74\x83\x8d\xce\x37\xf2\x6b\x7c" + - "\x3d\xcc\xa4\xce\x7c\x09\x75\x32\x7a\xf8\xca\x2c\x7f\x55\xd3\x0f\x85\xc7\x20\x45\x69\x72\xad\x2e\x95\xd8\x7f\x0e" + - "\xdb\xc3\x4f\xda\x86\x3f\x33\xbb\x70\xc3\x8f\x6e\x1c\xa2\x46\x52\x86\xc5\xed\xdd\x71\xa7\xe7\xd3\x8b\x34\x70\x29" + - "\xe4\xa6\x3d\xfa\xf1\x89\xd9\xdb\x8b\x12\x1e\xf8\xf7\x14\x76\xb1\xb1\x76\x83\xba\x78\x13\x4f\xe4\xae\xce\x6c\x9b" + - "\xb8\x43\x12\x03\x5f\x70\x30\xde\x9f\x2b\xfb\xed\x78\x33\x7a\x9b\x90\x80\x58\x3a\xa5\xf7\xd6\x0e\x67\x1d\xb3\x02" + - "\xeb\xaf\x35\x55\xdb\x80\x41\x21\x73\x74\xb7\xe1\x7c\x67\xc4\xc7\xcf\x56\x59\xb6\xf6\xbb\xec\xb2\x94\x50\x9d\x24" + - "\x03\x57\x60\xaa\xcc\x54\xe5\x29\x5d\x5c\x58\x02\x51\xe8\xbc\x17\xf8\x7e\xfb\xcf\x79\x28\x8e\x72\x08\x52\x57\xa2" + - "\x37\xad\x5b\xd3\x66\xb3\x75\x51\xdc\xbc\x5b\x57\x32\x85\x39\x20\x49\x4d\x87\xf9\x0b\xc7\x75\x8f\xd4\x6f\xc5\xb1" + - "\x90\x0d\x6b\xfd\x88\x9d\x59\x77\x76\x26\xab\xa5\xf5\x6f\x9d\x04\xda\xd6\x48\x93\xc7\xe9\x25\x57\x4b\x54\x93\xef" + - "\x26\xf8\x27\x7c\xb0\x5a\xb6\xb8\xbf\x26\xd4\x31\xce\xc7\x2f\xc0\xd6\x80\x88\x1f\x53\x57\x2e\xd7\xc3\x8e\xdc\xba" + - "\x8d\xe8\x6b\xbb\xe5\xa5\xed\x65\x4f\xb0\x48\xd1\x0d\xf2\x01\x6c\x05\x1a\x52\xe4\x49\x8b\x9a\x69\x02\x00\x09\x60" + - "\xd1\xd0\x31\x4d\x48\x97\x18\x87\x93\x46\xc9\x72\xdb\x23\x7b\x5a\xea\xab\xb9\x83\x73\x5a\x94\x15\x59\x9f\xfe\xc4" + - "\x73\xc3\x09\x21\x62\xa7\x6c\xe3\x46\x0a\xb3\x8b\x06\xd8\x78\x1c\xc4\xb5\x84\x30\xbb\xef\x92\xbd\x5f\x52\x09\x4d" + - "\x97\x62\x94\x0b\x56\xdd\xff\xdc\x7c\xa4\x51\x2e\xd2\x30\x21\x78\x51\x62\x70\x10\xfb\xc7\xa3\xbf\x14\x8a\xb9\x61" + - "\xad\x64\xe2\xe3\xe6\xd2\x88\x2d\x68\x71\xdf\x16\xa8\x70\x94\x63\x77\x3b\x7e\xf5\xc5\xee\x64\xdb\xcb\xa3\xfb\xbe" + - "\x90\x1a\x75\xd5\x50\x9d\xe1\xe3\xda\x2a\x5e\xc8\x6c\x4a\x49\xae\xad\x7f\x29\xfa\x53\x17\xd5\x5c\x70\xf2\x9f\x89" + - "\xca\x0a\x4c\x68\xe7\xe3\x12\xc2\xb8\x69\x3f\xf1\x44\xc8\xa6\xa7\x10\x20\x20\xc0\x39\x11\x93\xe6\xcb\x89\x25\x19" + - "\xdb\xcf\x14\x61\xff\x28\xe0\x94\x9c\xf3\xe1\xb5\x12\x20\x2b\xc3\xb4\xd6\xc8\x02\x86\xf7\x2b\x36\x3f\xf4\x16\xd6" + - "\x97\xf5\x0b\xda\x34\xe0\xb5\x27\x0e\x99\xa9\xd8\x49\x76\xed\x9d\x0d\xe8\xf7\x52\x55\x72\x3a\x27\xf5\xe4\x56\xf8" + - "\x27\x6e\xa9\xdc\x20\xe0\x3e\x88\xc3\x28\x0a\x43\xc1\x62\x68\xb5\x75\x74\x18\x55\x69\x58\x93\x96\x5c\xd1\xaa\x02" + - "\x1d\x90\x9c\x6f\x55\x1c\xa5\x1e\xa0\x6e\x5a\x4c\x11\xc2\x35\xb8\xc2\xab\x28\x41\x05\x7b\x49\x22\x29\x8b\x3c\xb6" + - "\x84\xec\xde\xed\xe4\x1e\x52\x12\x1e\xad\xbe\x8b\x9f\x31\xda\xa4\x39\xda\x61\x83\x11\x7e\x2d\x35\xdd\x46\xbe\xb2" + - "\x32\x1c\xfe\x10\x91\x5d\xca\x67\x4b\xaf\x93\x5a\x3d\x1c\x9f\x13\x1a\xf7\xa4\xbf\xfd\xf5\x04\x13\x91\x33\x61\x8f" + - "\x0e\x78\x7c\x68\xc4\x9e\xf8\xd2\xd6\xde\xa1\x34\xb5\xf8\x51\x3b\xd1\x46\x1f\x54\x5d\x09\x85\x85\x5c\x39\xf8\x8f" + - "\xac\x8c\xd0\x15\xe5\xb0\x9b\xfe\x59\x94\x88\xe3\x3f\x1a\xb5\x4f\x24\xde\x99\x32\xb8\x22\xe8\x39\xdf\xa5\x8d\xe7" + - "\x12\xad\x29\x42\x0a\x36\xa8\x4c\xe8\xf7\x44\x04\xe5\x4f\xde\xe2\x37\x18\xd4\xe2\xd7\xa3\x34\xe6\x1c\xb7\x58\x8a" + - "\xa5\xc5\xeb\x27\x91\xe4\x29\xc9\x97\x33\x5d\x84\x7f\x34\x6f\x6f\xc0\x31\x82\x32\xdf\xfb\xc1\x53\xf7\x10\x7a\x89" + - "\x1a\xe1\x6f\xf7\xf3\xdf\x89\x1d\xf7\xa3\x7a\xab\x1e\x04\x36\x76\xa8\xc7\xf9\x98\x41\x5a\x90\xe2\x77\x5f\xf7\xe2" + - "\x7e\xcd\xb1\x0b\x37\x87\xd9\x95\x1a\x24\xda\x02\x7d\x6a\x34\x3b\x22\x81\xb9\x52\xa9\x00\x86\x10\xa3\xbb\x0c\xc7" + - "\x88\xe9\x52\xc8\x7c\xaa\x0c\xa6\x8d\x24\xef\x67\x40\x64\x6d\xe8\xc6\xa1\x40\x18\x89\xfd\xb6\x44\xc7\xb4\xb1\x15" + - "\x72\x39\x58\xe5\x14\x59\x49\xb1\x35\x3e\xda\x8d\xc3\x8f\x3e\xa7\xb7\xc9\xb6\xde\x78\x89\xbf\xc8\xec\x83\x40\x66" + - "\x11\x75\xfc\x25\xc8\xe8\x45\x81\xb9\x00\x66\xe4\x53\xad\xcd\xb4\x54\x4b\x99\x4f\xd7\xe1\xb0\x72\x69\x73\x4f\x4f" + - "\xf0\x2f\xc7\x47\x61\x39\x8a\xfa\xe9\xd6\x8c\x23\xc8\x7f\x08\x69\x61\xcf\xb5\x4a\xa2\x93\x4b\xae\x83\xb6\x28\x9e" + - "\x85\x2d\x89\x77\xf1\x8e\xc1\xb8\x3d\x37\x7c\xeb\xcd\x45\x5d\x02\x91\x0b\x3c\x4d\x11\xf3\xe8\x6e\x60\x80\xdb\xa5" + - "\x44\xf4\x35\x40\xfd\xc9\xb6\x16\xb6\xc1\x81\x4f\x10\x16\x38\xbd\x3a\x97\x68\xf6\x12\xf6\x62\x7c\x60\x0d\xbf\x59" + - "\x72\x4d\x31\x2e\x33\x12\x78\xed\xdb\x14\x4e\xd4\x26\x5f\x65\x99\xfd\xaf\x6f\xbf\x65\x8c\x40\x97\x50\x2f\x7d\x06" + - "\xbd\x79\xc7\xf5\x53\x55\xc5\x29\xfb\x61\x37\x00\xd5\xbd\x13\x28\x9b\x51\x5b\xdd\xc9\x3f\x25\x29\x93\xb7\xad\x3a" + - "\xcb\xfa\x6b\xf9\x41\x09\x83\xae\x50\xe8\x0e\xd2\xcc\xe9\x8c\xc7\x9d\xb2\xf4\x52\xe6\xfe\x92\x3c\x78\xc2\xf8\xf6" + - "\x5a\x2e\xd5\x9e\xe8\x8c\x1f\x7e\x71\xf8\xf0\xa2\x13\x55\xcb\xd8\xa6\x65\x69\x9a\x40\x29\x32\x2f\xb1\x59\x41\x5e" + - "\x3b\x1d\x4b\xed\x09\x8b\x65\x0c\xc8\x6e\xfd\x3b\x10\xc5\xe1\x7f\x6d\xf9\x45\xdc\x37\x8e\x65\xf1\xe9\x0c\x7c\xa5" + - "\xbe\x58\x59\x10\x6e\x5b\xa0\xab\x38\x79\x25\xbe\x7d\x68\x1a\xb6\xcf\x58\x05\x51\xe4\x4d\x8d\x49\xa0\x79\x83\xe1" + - "\x36\x1b\xb1\x5d\x6f\xc2\x6c\xda\x0e\x4b\xb6\xd7\x0a\xb0\xaf\xd9\x23\x11\x67\xa9\x91\xa9\x9a\x28\x2a\x73\x5c\x4b" + - "\xfa\x33\x1c\x8a\x59\x29\x2f\x59\x7c\xc6\xe9\xf3\x1b\x44\xaf\x34\xc8\x00\x14\x3d\x88\x7d\xce\x0f\x0f\x1b\xbc\x0d" + - "\x97\xfc\x73\x2e\x0e\x94\xa7\x41\x71\xe6\xb4\x28\x76\x30\x3e\x51\xae\xa6\x03\x9f\xaa\x33\x42\xd5\x0b\xe7\xdc\x25" + - "\x9e\x21\x0b\x10\x1d\xb0\x40\x66\x0f\x4b\x35\xc7\xb9\x86\x3e\xe7\x70\x7d\x34\x0d\xda\x3f\x91\xf7\x2c\xb4\xe2\xb7" + - "\x66\x43\xaa\xaf\x0a\x8e\x52\x0b\xad\x08\xea\xe2\xfe\x9f\xa1\x15\x70\x26\xb0\xda\x55\x23\x12\xb9\x59\x80\x87\x19" + - "\x2a\xbc\x63\xf2\x87\xe8\x56\x28\x66\x45\x91\x51\x29\x63\x0a\xf1\x18\xb4\xa7\x53\xf0\xbe\xf4\xdf\x1c\x50\x36\x85" + - "\x2b\x99\x61\x7c\x1c\xa0\x63\x54\x53\xbe\x36\x91\x5e\xdb\x44\xac\xb0\x35\x8b\x00\xd9\x43\xa7\xc2\xd8\xe7\x82\xae" + - "\x8f\xb0\x14\x96\xdf\x3c\x98\x02\x00\xcc\x7b\x6d\x1c\xdb\x99\xe1\x67\x2d\xee\xd6\xec\xb8\x18\x8e\xc1\x89\x39\x1b" + - "\xde\x68\x76\x6f\xb9\x46\x29\xad\xb7\xdd\xa3\x0a\xab\x23\xa1\x8b\xee\x95\xcc\x06\x3e\x9e\x8f\xf9\x3e\x78\x48\x4e" + - "\x55\xcc\xc1\x71\xcc\x7d\x84\x60\x64\x14\x08\x31\x6c\x61\x6c\x61\x41\x52\xbf\xe7\xea\x9a\xca\x34\x25\xa2\x73\x8a" + - "\x75\x06\xac\x56\x75\x95\x97\x6a\x5a\x5c\xe6\xfa\xef\x2a\x0d\x0a\x43\x8c\xb0\x2e\x13\x76\xd3\x08\x3e\x7a\x19\xde" + - "\xf5\x36\x3f\x08\x2a\x26\xe0\x87\xd3\x55\xc4\x31\x66\x58\xac\xe9\x07\xfd\x41\xdd\x5a\xa7\x1e\x8e\xf9\xe1\x35\x50" + - "\x79\xaf\x53\x8a\x5e\xf3\x0b\x89\x0b\xae\x46\xce\x53\x7e\x20\xef\x41\xe5\xeb\x7c\xda\x54\x91\x1c\xbc\x9d\x23\xbf" + - "\x7f\xad\xc4\x23\x90\xb6\x1f\x39\x16\x97\x32\x78\xfa\xae\x7a\x42\x1a\xb3\xa2\x7c\x28\xba\x74\x56\xff\x5a\x59\x1e" + - "\x31\x16\x4e\xb6\xa6\x2e\xdc\x2b\xf4\x55\xf2\xec\x7b\xd0\x10\x1e\x9e\x62\xf0\x21\xec\xb6\xcd\x8a\x86\xf9\x35\x13" + - "\xc1\x79\x50\xdd\xd3\xa2\xac\x88\x8b\x27\xad\x51\x78\xe7\x46\x13\xa9\x07\x87\xdf\xe9\xb8\xe5\x13\xec\x01\xbb\x65" + - "\xdb\x50\xe5\x4b\x4b\xf7\x01\x82\x1e\x1c\xac\x26\xd7\x8d\x5a\xe7\x6e\xc4\xf7\x41\x8c\xa9\x9b\xfd\x92\x16\xe5\xfb" + - "\xc1\x5a\xa9\x3d\x71\x28\x1a\xb1\x1a\x43\xf1\x22\x53\xce\x20\xc9\x79\x6b\x18\xaf\xaa\xc2\x25\xa0\xf0\x45\x09\x03" + - "\x6f\x18\x33\x1a\x0e\x2f\x75\x35\x5f\xa1\x3e\x83\xab\x3e\x71\xf9\xa9\xe1\x72\x95\x65\xc3\xc7\x8f\xbf\xaa\x6d\x07" + - "\x9f\x1f\x4f\x09\xbc\x8b\x59\x8c\xe5\x3f\x57\x3a\xd3\xd5\x3a\x4e\x93\xc2\x49\x9c\x6d\x52\x1b\xbc\x17\xe8\x78\x16" + - "\x33\x21\x73\xaa\xc5\x08\x7f\xdb\x02\xf4\x2d\x87\x60\xe3\x12\x2f\xc0\x56\xf0\x29\xe0\x52\x52\x3e\xea\xcd\x3f\x68" + - "\xf5\xee\xb4\xae\x9d\x3d\x16\x04\xc4\x58\x74\x3a\x1e\xf1\xf1\xaf\x20\x17\x66\xe4\xab\x17\x66\xdf\x74\x6d\x82\x68" + - "\x23\x8c\x6e\x73\xf9\x49\xc9\x89\x4a\x1b\x4e\x99\xa2\x2c\x1b\x62\x57\x1b\xa1\x1f\x7b\x9b\xc2\x70\x35\xdc\x23\xe9" + - "\x84\xbc\x1b\x24\x95\x68\x65\xa7\xc4\x80\x6f\x82\x85\xec\x8f\x05\xaf\xdd\x86\xf8\x79\x94\x09\x84\xcf\x9a\x36\x9c" + - "\xc3\xf9\x02\x65\x7c\xfd\x89\x67\x6e\x38\x99\x03\x6c\xde\x0b\xf6\xfc\x81\xbd\x0d\x7d\x13\x86\x43\x81\xe6\x73\xdc" + - "\x02\x2a\xe9\xca\x25\x04\x6d\x14\xae\x21\x45\x29\x59\xa2\xd5\xb5\xc8\x74\x1e\x5d\x76\x87\x87\x5f\x3d\xf1\xa9\x83" + - "\x42\xf7\xdb\x70\xdc\xd6\x62\x95\xa1\x93\x73\xd0\x38\x0c\xac\x72\x30\x7d\x67\x81\xa9\x2b\x23\x30\xb1\x70\xa9\xc8" + - "\x8e\x46\x45\x8e\x98\x1e\x60\x5f\x3e\xce\xe2\x08\x1f\x1c\x45\x6f\x83\x64\x12\x11\x17\x18\x6d\x48\xe8\xca\x79\xfb" + - "\xd1\x6d\x79\xd2\xd8\x84\x2f\x6b\xd1\x8b\x0e\x2f\xff\x13\x0e\x91\x65\xb0\x3c\xae\xa0\x29\x28\xf5\xa8\x52\x60\xbd" + - "\x44\x1b\xbe\xa7\x73\x53\x95\x2b\x3a\x9d\x8c\x44\xe1\xb9\xae\xdc\x99\xe6\x54\xea\x2e\xa0\xd4\xca\x41\x63\x16\x14" + - "\x28\x99\x30\x62\x75\xfa\x1e\x23\x70\x80\xab\x81\x13\xbe\x32\xa8\xb6\x0b\x92\x3b\x8d\xc4\x57\x07\x94\x45\x9d\xf3" + - "\x12\xa0\xf1\x70\x14\xa5\x0d\x08\xea\x39\x8c\x84\x2b\xeb\x40\x4f\x3d\x7b\x33\x12\x7f\x70\x8a\xfa\x99\xce\x53\xff" + - "\x0b\x75\xa8\xfa\x0a\xde\x03\xa8\x3a\xcf\x3a\x23\xf1\x87\x48\x75\x39\x12\x1d\xaf\x86\xe8\xf4\x48\xcc\x1e\x91\x13" + - "\xe4\x2d\x95\x0e\x10\xed\x6d\xed\xeb\xfd\xf0\x75\xa9\xae\x74\xb1\x32\xbc\xe9\xed\xfd\xfd\xe3\x8e\x0f\xc4\xad\x4f" + - "\xb2\xef\x2a\xc3\xd8\x49\x73\xe1\x87\x80\x25\x41\x99\xc7\x62\x96\x4d\x63\x1b\x64\xb4\xfd\x04\x97\x77\xa7\x5f\x2d" + - "\xae\x48\x09\x7d\xa9\xaf\x54\xce\x14\xb8\x2a\x5c\x72\x4d\x71\x3d\x57\xa8\xcf\xe3\x52\x34\x45\xe9\x8a\x39\x05\xa3" + - "\x3f\xb9\x40\x7d\xbf\xfb\xb1\xd9\xf0\xdf\x5f\x06\x7f\x7f\x85\x7f\xd7\xaa\xcb\xdf\x39\xbf\x38\x0f\x29\x9e\xf0\x7f" + - "\x8c\x03\x27\xeb\x60\xf0\x0e\x71\x59\xf6\x01\x26\xf3\x8a\x95\xc9\x61\xf9\x69\xc7\x2b\xf4\xe0\x1c\x11\x39\x20\xe8" + - "\xfb\x92\x18\xdb\xe0\x3d\x7c\xe4\x52\x57\xa0\x73\xa6\x43\xca\x33\xfe\xf4\x82\x26\x77\x48\x6e\x46\x54\x4a\x23\xaf" + - "\xe6\x9b\xc1\x60\xc0\x39\xfc\x1e\x8b\xeb\xb9\xac\x44\xad\x8c\x06\xbd\x7b\xe2\x13\x5b\xf8\x82\x0f\xe7\xe9\x23\xf8" + - "\xff\x1c\x6b\x63\x9c\xa7\xfb\xdd\xe3\xa0\xb7\x2f\xc5\x4d\xde\x9f\x16\x8b\x65\x91\xb3\xb7\xe6\x4d\xbe\xbf\x0e\xba" + - "\x81\x8f\x8e\xe1\xf3\x0d\x7f\xf1\x95\x30\xfa\x32\xa7\x96\xfe\x4b\x7a\xf7\xb5\xb8\x69\x7f\xf1\x17\xf7\xd1\xba\xfe" + - "\xea\x1b\xb1\x6e\x7b\x8e\x56\xf0\x76\x04\xad\x27\x54\xa9\x6f\xf7\xe1\x45\xb0\x45\x4f\xd8\x90\xd2\xc9\xab\x79\xb0" + - "\xfb\xc3\xa1\xc8\xab\x79\xff\x91\xe0\x2a\x6d\xc6\x2d\x99\xde\xd3\xb5\xec\x50\xc2\x1b\x3e\x43\x5e\xdf\x0e\x78\x10" + - "\xe5\x98\xf4\x03\x70\xf1\x81\x1b\xe4\xcc\xb1\x1c\xb3\x5c\x28\x2c\x25\x04\xb7\x42\x10\x94\x32\xc0\xcd\x77\x1f\x96" + - "\x6a\xa1\xb0\x1a\x14\x6a\x8e\x50\xcb\x31\x44\x6a\x30\x95\x98\xb7\x0e\xc4\x13\xa0\x4c\xd9\x1a\x4e\xdb\xc1\xf0\x30" + - "\xc4\xe8\x2f\x01\x56\xfb\x89\x3f\x43\xc7\xfe\x08\xed\xb3\x9f\xcd\xd9\xd7\x78\x9c\x0e\xbb\x62\x24\x1e\x8b\x47\xe1" + - "\xe9\x43\x58\x01\xee\x74\xfc\xe1\xb3\x8f\x8b\x34\xed\x04\xb9\x6a\x5d\xb7\x38\x9e\xed\xe3\x2f\x17\xee\x2c\x7d\x73" + - "\x41\x29\x32\xdb\x7a\x09\xc8\x08\xd5\x19\xc5\x54\x45\x70\xad\xcc\xf5\x44\x57\xbe\xa2\x15\x9d\xc3\x46\x6e\xe1\x70" + - "\x53\xee\xde\x93\xb6\x33\x1c\x9f\x5a\x57\xf2\x66\xdb\xb1\x45\x81\xe7\x06\xee\x3b\x76\x22\x70\x35\xe9\xc6\x16\x49" + - "\xbe\xbe\xc0\xf8\x2d\xa6\x37\x4d\xac\x8c\x0e\x39\x6b\xca\xfc\x4c\x1b\x0a\x1f\x9b\xd3\x2d\xb2\x67\x3d\xc7\xbc\x29" + - "\x96\x9a\xfa\xc2\xcd\xd2\xf4\xb5\xa9\x9f\x82\x10\x40\x9e\x0c\xde\x41\x5a\x43\x1f\xc0\xaa\xd4\x4b\x5e\x71\x58\x01" + - "\x0b\x69\x96\x5b\xfb\xf6\x2d\x72\x4d\x40\xc2\x22\xb7\x1e\x5e\xb2\x7b\xe3\x13\x5a\xa3\xa7\x51\x65\x47\xa3\xd4\xbc" + - "\xb6\xe0\x59\x52\xaa\xe9\xaa\x34\x88\xeb\x4c\x7f\x12\x6e\x18\x66\xc2\xb5\xbd\xf6\xe8\xd2\xec\x46\x9d\xcb\xf4\x0a" + - "\x2b\x71\xb2\xd1\x19\x18\x2c\x31\xcd\x0a\x64\x5d\xe8\x6e\x9e\x2b\xc3\xf0\x0b\x7a\xb7\x7d\xda\x62\x97\x89\xe8\x74" + - "\x3b\x3d\xff\xd8\x15\xef\xe5\x2f\xba\xa2\x5f\x7f\x19\x5a\x6d\x61\x26\xdc\x92\x92\xb2\xa8\x4b\xf2\x2f\xc5\xee\xc3" + - "\x6d\x3a\xf0\xdb\x74\x10\x52\x32\x3b\xce\x51\x63\x4f\xdd\xb0\xdb\x1a\x07\x38\x44\xe9\x3f\xc8\xa9\x80\xeb\xa9\x19" + - "\x56\x70\x59\x66\x8b\x4b\x6b\x11\x69\xb2\x2e\x09\x89\xf3\x7b\xb5\xdb\xde\xbd\xeb\x66\x7c\x12\xca\x0b\x96\xbb\x72" + - "\x8c\xc9\x7d\x5f\xe0\x2a\x4e\x24\xf2\x46\x2e\x54\x23\x1d\xae\x15\xb2\x38\x20\xb9\xde\xee\x63\x0c\x41\x4b\x02\xae" + - "\x30\x68\x2e\x1a\xd2\x86\x62\xb1\xda\x27\x4c\x7c\x20\x42\x8f\x17\x71\x6b\x15\x41\xdb\x82\xfe\x1a\xac\xb5\x0d\x7b" + - "\xba\x23\x39\x18\x0e\x6f\x5f\xd9\x0b\xa5\xc6\x60\x70\x49\xb1\x96\xe0\xa9\x08\x5e\x4b\xac\x4e\x97\x8b\xb1\xf0\xe5" + - "\x7a\xcf\x82\xb6\x9c\xb0\xf4\x28\xa6\x8d\xf6\x2b\xab\x12\x4f\x7c\x37\x51\x4d\xa1\xe4\xd7\x6d\x45\xe1\xa2\x11\x5a" + - "\x8a\x0a\x6d\xbe\xe8\x76\xc2\xf3\xe9\x67\x17\x85\x81\x7d\x0c\xaa\x3c\x2f\x26\x2a\xa1\x58\x17\x84\xae\x87\x42\x9d" + - "\x05\xbc\x7f\xed\xeb\x5c\x34\x34\x82\x9f\x16\x89\xc9\x99\x1a\x3a\x5d\xcb\x99\xda\x1d\xab\xf1\x84\x0d\x16\x9c\x14" + - "\xa5\x05\x17\xd0\xec\xb1\x85\xb0\x26\x76\xde\x15\x4c\x4a\xba\x12\x2f\x49\x81\x2c\x13\xab\xb3\xe3\x84\xe0\xb6\x3d" + - "\xa9\x5d\x9a\xd0\xb4\x53\x21\x90\xed\x8e\x3b\x71\xc2\x6c\xce\xf5\x6c\x1b\x35\x3e\x0f\x7c\xc0\x82\x70\x42\x1c\x72" + - "\x7f\x1c\x5c\x2c\xed\xc3\x8d\x3b\xe2\xd8\xcf\x70\xcc\xd0\xb0\xfe\x71\x8d\xa9\xf9\xc6\xbb\x1f\x69\xfc\x2b\x36\xa6" + - "\x16\x4e\xd3\xe7\xa9\xb9\x85\x3a\x95\x6f\x6f\xef\xe2\xd1\xa7\x75\xf1\x2c\xf0\x20\xa8\xf5\xf0\x45\x6b\x0f\x4c\x27" + - "\xfb\xf8\xdc\x7b\x7e\x7f\x6c\xf9\xff\xc0\xce\x12\x96\x57\x2c\x88\x29\xff\xf1\x67\xcd\x6a\xd3\x0e\xf4\xcd\xa6\x36" + - "\xc1\x03\x46\x4e\x3b\xc5\x7d\x8c\x2d\xf5\x1f\xec\x8b\x4e\xbf\xe3\xc6\xf0\x5e\x7e\x0d\xaa\xd5\x10\x8b\x2a\xd4\x69" + - "\x81\x24\xe3\x93\xf1\xb1\xe4\xdb\x13\x19\xb0\xb9\x21\x35\xe3\xca\xa2\x14\x3f\x5d\x63\xee\x77\x2d\x73\xcf\xac\xd9" + - "\xac\x28\xaf\x65\x99\xd6\x1a\xf7\xbf\xb4\x4d\xa1\x73\xdb\xb6\x98\xb1\x62\x0e\x45\x2a\xe2\x4e\x49\xa0\xea\xd4\x28" + - "\x23\xb9\x59\x39\x97\x4f\x9c\x21\x61\xce\x71\x70\xc1\xdb\xf2\x33\xc8\xdf\x8f\x50\xc0\x48\xf2\xee\xa7\x5d\x14\xbb" + - "\xbb\xb5\x5a\x2b\x2e\x29\xbb\x35\xfb\xef\xd4\x4d\x57\xce\xe0\x75\xb3\x08\x4f\x35\x7a\xf1\x00\x49\xed\x09\xac\x72" + - "\xff\x82\xfe\x46\x3d\x25\xe6\x3d\xa5\xbf\x31\xe9\x60\x4f\x98\x4a\x52\x39\x7d\xfc\x5f\xaa\xb1\x70\x17\xc1\x1b\xe0" + - "\x65\xc1\x79\x2c\x3a\x81\x6a\xaa\x23\xda\x34\x17\xb6\x13\x97\xb9\xab\xb6\x22\x9f\xb7\x9e\x6e\x72\x06\xff\xdd\x97" + - "\xa2\xfb\x68\x65\x94\x2d\x1b\xbf\x0b\x0b\xde\xdb\x13\xbb\xd4\x83\x23\x30\x51\x46\xa7\x80\xf7\xc2\xcd\x19\x25\x41" + - "\x4d\x4a\xe0\x7f\x1a\xb5\x28\x6d\x63\xb2\xa9\x13\x0c\x02\x97\x57\xa7\x5f\x05\x20\x85\xcf\x77\x02\x7d\xeb\x91\x7f" + - "\x5a\x57\xc7\xc2\x3f\x67\xf8\x71\x14\xc5\xed\x46\x64\x70\x70\x9e\xb4\xbb\x58\x04\x00\xdf\xc8\x37\x6b\x8f\xfc\xde" + - "\x69\xf3\xbf\xe5\xff\xdd\xfa\xbf\x83\x3f\x91\x3d\x24\x3d\x26\x15\x0a\xb3\xfa\xf6\x11\x80\xab\xff\x08\xb3\xcf\x5f" + - "\x2b\xf4\x5f\xb1\xa9\xfd\xd2\x22\x57\xc2\x14\x5d\xdf\x0b\x22\x94\x18\x0b\x42\x25\x97\xb4\xb4\x03\x7d\x74\xa8\x6c" + - "\x13\xb6\xd8\xdb\x8b\x51\xca\xcf\xcf\x4f\xa9\xc5\xcb\xd8\xdf\x31\x7e\xa8\xb3\x00\x4d\x39\x99\x95\xd7\xb2\x8a\x91" + - "\x7d\x06\x3b\x4f\x8f\x2e\x8e\x22\xd4\xc8\x8b\xbc\x0f\x28\x85\x47\x16\x71\x22\x19\x0c\x06\x5d\xcc\xdc\xaf\x0c\x27" + - "\xdb\xc7\x8c\xfe\x45\x2e\x7e\xa3\xde\x7e\x8b\xb0\xc5\x8e\xbf\xb7\x27\x1c\x9e\x86\x7b\x41\xe6\x92\x0f\xe2\x37\xc0" + - "\x91\xdf\x48\xca\xc1\x0c\xce\x78\x82\xb2\x35\x26\xe3\xb1\xf9\x43\xdd\x57\xfe\xf8\x0a\x9b\x93\x2c\xcc\xda\xbe\xd9" + - "\x88\xa4\xf9\x74\x2c\xfe\xb8\x0d\xca\x20\x4d\xf9\x73\xdf\xd7\x19\x6d\xca\x85\x2b\x02\x16\x60\x31\x65\x54\x1e\x73" + - "\x0a\xfc\x03\x12\xd9\x53\x5d\x96\xab\xdc\xa0\x3b\x26\x3e\x3f\x0c\xbe\xb2\xe9\xa1\xef\xfc\xe0\x71\x6d\x18\x3e\x0d" + - "\x34\x9a\x4b\xbd\x16\x94\xe4\x3b\x0b\xde\x87\x9b\xd5\x38\x54\xfb\xfb\x51\x47\x61\x1a\x0c\x3e\x6b\xc8\xcd\x46\x48" + - "\xfe\xbd\xcc\xb2\x89\x74\x31\x3a\xe8\x09\x16\x6e\x0c\xfa\x26\x03\x6a\xf9\xaf\x12\x5e\x66\x08\xa3\x03\xe4\xfc\xb0" + - "\xe1\x60\x59\x2c\x93\x6e\x37\xa6\x39\xe4\x7c\x36\x57\x39\x25\x8b\xed\xd9\xa2\x0d\x9c\x9a\x36\x40\x25\x94\xab\x26" + - "\xa5\x92\x1f\xfc\xb7\x4e\x8f\xdf\x12\x71\xb0\xbf\x8f\xd3\xb1\xeb\x85\xe7\xb5\x4b\x25\xc6\x1e\xb7\xe3\x70\x54\x78" + - "\x73\xa2\x4b\x00\xbb\xbb\x08\x29\x04\xce\xe6\xa8\x8d\x4c\xdc\x46\x47\xe7\x67\xa3\x5a\xd0\x58\xb9\x18\x92\x7a\x82" + - "\x6e\x77\x8a\x43\x75\x81\x3d\x31\x7b\x7b\x5c\x55\x41\x8c\xc9\x86\x5a\xc7\xf6\xfa\x33\xc4\xf5\xae\x5d\x5e\xd7\x23" + - "\x5c\x0d\x11\x43\xc0\x44\x08\x7b\x58\xa3\x04\x6d\x54\xc0\xde\xe5\x40\x3e\x5a\x9e\x27\x54\xd8\xf8\xb8\xcf\xd7\x48" + - "\xe2\xb5\xab\xcd\x2a\x63\xce\xea\x65\xdd\xdf\xb3\xa2\x58\x62\x4a\x9b\x09\x2a\xd3\x09\x21\x3f\x82\x8d\xff\xe4\x19" + - "\xf8\xd7\x70\x99\x7d\x5f\xfe\x9c\x4b\xca\xe3\x70\x8c\xb2\x68\x01\x82\xfd\xaf\xec\x41\x11\x20\xa0\xc9\xe9\x5c\xa8" + - "\x7c\x5a\xac\xf2\x4a\x95\x1e\xbd\xea\x17\x68\x2b\xe5\x85\x05\x13\x24\x62\x54\xaa\x3f\x8b\x51\x29\x3e\x29\xcd\xe3" + - "\x71\x1b\x82\xc6\x9f\xd5\x6d\x47\xb1\x71\x9c\xda\x6f\xe0\xdb\x96\x3b\x6e\x38\x14\x27\xf9\xb4\x28\x97\x45\x29\x2b" + - "\x02\x4c\x31\x9b\x19\x55\xf5\xe0\xef\x9c\x39\x71\x79\x29\x75\x6e\x2a\x31\x5d\x4f\x33\xc5\xc5\x6b\x02\x74\xef\x8f" + - "\x91\x65\x75\x13\x08\x92\xe0\xe3\x94\x89\xbd\x05\xb0\xd0\xb3\xff\x15\x30\xbc\x07\xe8\x46\x08\x4f\x87\xfc\xf4\xd9" + - "\xd8\x3a\x4a\x04\x93\xbe\xfd\xa8\x4e\x95\xf4\x4a\xbd\x46\x26\x70\x58\x22\xbd\xeb\x53\x76\x3a\x4c\xa6\x86\xfe\x76" + - "\x18\x70\xac\x73\x1b\x72\xec\x92\x4e\xb4\x06\xac\x3b\x83\xe2\xf0\x41\xd8\x9d\x2f\x25\xf6\xb6\xd4\x45\xa9\x2b\xfd" + - "\x77\x2c\xae\x82\x15\x0b\xc3\x60\x66\x9d\xd3\xb3\xe9\xca\x54\xc5\xc2\x85\x23\xc2\x3c\x64\x9a\xaa\x94\x22\x25\x57" + - "\xcb\xa5\x2a\xb1\x5d\xa6\x2a\x2e\xbe\x6c\x6b\x82\x04\x5a\x7b\xa3\x2a\xb2\xc4\x19\xa1\xf3\xb9\x2a\x75\xc5\xba\xcd" + - "\x30\xd8\x96\x6a\x58\x5c\x5a\xad\xb2\xf7\x02\xe3\x46\x67\x56\x17\x87\x28\x8b\x6f\x7c\xbf\xf6\x65\xdd\x43\xcc\x9f" + - "\xf5\x58\x2f\xde\x59\xe5\xec\x03\xa3\x6c\xc8\x2f\xb9\x17\xf1\x18\x71\x90\x28\xd9\x5c\xc5\x42\xae\x31\x99\x5d\x68" + - "\x64\x05\x2a\xa5\xf3\x94\x3c\x5f\x60\xb1\xf6\xab\x40\x23\x5d\x2a\xab\x54\xac\x0a\xfe\x98\xc3\x55\x50\xa9\x68\x91" + - "\xc2\x7e\xf9\x7e\x65\x2a\xa0\x82\x9c\x85\x3c\x2d\x42\x0f\xce\xb8\x54\x4d\x5d\x53\x3e\x8b\x72\xcb\x37\xf4\x9d\xdf" + - "\xad\x2a\xb1\xb0\x71\x20\x36\x5f\x2c\xf0\xb4\x45\x96\xa2\x51\x4a\xa2\x0a\x34\x1c\xcd\x7b\x46\x06\xfc\x34\x6c\x13" + - "\x12\x05\x8b\xc5\xf6\xdf\x4e\x27\xc0\xe8\x8b\x38\x29\x57\x6d\xc7\x06\xe4\x65\xf7\x96\xb3\xd3\x26\xed\x1b\xd8\x75" + - "\xa1\x83\x9f\x95\x02\xdf\x66\x14\x48\x6f\x9c\xc4\xc4\x11\xb9\x29\x67\xc1\xa7\xef\x1a\xa9\xef\xc3\xec\xf7\x4e\x75" + - "\xed\x28\x45\x7b\xe9\xb5\x9d\x1d\x9d\xc2\xb5\x51\x0b\x77\x08\x26\x96\x86\x95\xd7\x6c\x2a\x7b\x98\x9d\xa0\x74\xf6" + - "\x76\xfe\xfe\x59\xeb\x77\xae\x5a\xa7\x0f\x99\xdc\x2a\x48\x87\x18\x41\x02\xf2\x01\x2e\xd7\x04\xb4\xaa\xd5\x24\x34" + - "\xcb\xeb\xba\x6a\x3e\x7f\x23\xe7\xa9\xf2\xb6\xa8\x54\x5e\x69\x4c\x22\x3b\x2d\x40\x32\xbc\x09\x4f\x72\x27\x2f\xaa" + - "\xce\x68\x7b\xcd\x82\x9a\x46\x1b\x3d\x46\x34\x5f\xed\xf6\xe5\x92\xcb\x24\x15\x38\x80\xce\x1c\xb1\xf3\x09\x89\xe0" + - "\x1c\x01\xb3\x6a\x13\x6a\x02\xdb\x58\x95\x54\xee\xda\xb6\x46\x55\xab\x11\x14\x25\x38\xd1\xb9\xe4\x6a\xf6\x71\xc2" + - "\x09\x97\xea\xcc\xa7\x37\x73\x8f\x68\x23\x30\xe2\x82\x26\xf2\xd1\xca\x6b\x9e\x76\x84\xe6\x00\x55\x86\xe7\xf6\xd8" + - "\x76\xfe\x71\x9c\xbe\x53\xb3\x11\x64\x6d\xdb\xd9\x59\xe5\x1e\xc5\x79\x4c\xdb\x17\xf9\x3b\xdf\x2c\xb2\x9e\x38\xbb" + - "\x08\x90\x5d\x73\xf9\x84\x5a\x85\x87\xb6\x1a\x0f\xbe\xf7\xc9\x5a\xfc\xc6\xfd\x5b\xb9\x6f\xcb\xc1\x20\x36\x89\x3d" + - "\x7a\x5c\x07\x58\xd9\x21\x3c\x3e\x78\x1c\x74\x5c\xd9\x41\x5f\xb0\x0e\xa1\x05\xfd\xf9\x8e\xed\xb6\x9b\x1d\xb6\x02" + - "\x0c\xb7\x9b\x2c\x4a\xa1\x72\xc2\x81\x4a\x53\x70\x52\x00\x2b\xe7\xe9\x79\x54\x53\x4f\xb9\xfa\xb1\xc0\x1d\xc6\xc6" + - "\x89\xae\xbd\xf4\xe7\xd2\x7c\xc6\x29\xf8\xb4\x24\x93\xcd\x22\xdf\xd4\x2c\xf6\x5f\x6f\x99\x8c\x75\x0c\xdf\x3e\xa3" + - "\x28\x23\xe0\xa7\xcd\x26\x69\x3a\x8f\xb1\xeb\xf7\xc0\x7b\xaa\x6d\x36\x75\x57\xad\x50\x3f\xcb\xa3\x3e\xf3\xe1\x91" + - "\xf1\xc4\x87\x43\xd1\xf9\x85\x1d\x67\x82\x10\x7b\x8c\xea\x24\x47\x58\x76\x8c\x92\x62\x94\xc9\xfc\x32\xe9\x3a\xd8" + - "\xf0\xe7\xda\x70\xd1\x01\x53\x64\x5c\x63\x15\x28\x0d\xf7\xf4\xd0\x08\xf8\x6c\x25\x2f\x95\xad\xb5\x41\x95\x98\x15" + - "\x90\x14\xf5\xfb\x4a\x66\xd6\x56\x4a\xe1\x85\x33\xad\x4a\xf1\xc2\x3a\x9e\x17\xa5\x98\xa8\x4b\x9d\xe7\xd0\x1a\x39" + - "\xa2\x7a\x4b\xa1\x17\x0b\x95\x6a\x59\xc1\xd8\x94\xbb\x8a\x26\xdc\xe9\x77\x06\xdc\x0b\x16\x03\x03\x2c\xc4\xa4\x62" + - "\x33\xf1\xc2\x71\xb0\x77\xcd\x14\x56\xb6\x54\xe5\xac\x28\x17\x2a\x6d\x30\x87\xd9\x3a\xec\x3d\x9a\x51\x9c\xb5\x9d" + - "\x3d\x27\xa9\x02\x8a\x1f\x02\xbd\xdc\x3b\xdc\xc5\xc7\x38\x4c\xf8\xaa\x4f\x37\x00\x62\x1b\xfc\xae\x63\x5a\x80\x4c" + - "\xf0\x3a\x24\xff\xf8\x9b\xd6\x64\xb3\x75\xd9\xf9\xf8\x89\x7b\xa6\x64\xb7\xf4\x4f\xc9\xe8\x85\x1d\xa0\xe1\xa9\xbb" + - "\xcd\x11\x22\x62\xf8\xa0\x3d\xb1\x7b\x34\x95\x30\x32\x17\x9f\x8c\xf1\xc5\xbf\x60\x4c\xbd\xcb\x62\x05\x4f\x7e\x90" + - "\xf9\x25\xd3\x8d\xb4\x88\xf3\x0b\x24\xf6\x7d\x50\xcf\x2f\xf2\xed\xb7\xee\xfd\x38\xd3\x51\xf4\x28\x36\xc9\xdd\x2c" + - "\x32\x3c\x14\x64\x95\x6b\x69\x40\x2f\x6b\xd2\x6d\x30\xbc\xfd\xb3\x6d\xa1\xb1\x55\x97\x3e\x18\x13\xdc\xec\x68\xf8" + - "\xa9\x3b\xea\xf8\x86\x8c\x24\x6c\x68\xaa\x0b\x4d\xa2\xee\x32\x5e\x53\x99\x77\x23\xed\x78\x28\x43\xc7\x9c\x66\xd3" + - "\xf6\x12\x90\x93\xd7\xda\x4c\x55\x96\xc9\x5c\x15\x2b\x62\x57\x2a\x59\x5e\xaa\x2a\x92\xce\xa2\x4d\xe3\x4a\x1e\x73" + - "\x31\x16\xd7\x98\x10\x6b\x90\x15\x53\x69\xf3\x52\xd4\x1e\x01\x5b\x3b\x8f\x50\x01\x3f\xa5\xa8\x12\xe7\x14\x60\x2d" + - "\x47\x44\x2b\xd3\x58\x5a\x2c\x8b\xe2\x8e\xd9\x04\x40\xb7\x41\xbc\xaf\xec\x6d\xe6\xba\xc0\xec\x8e\x9f\xd5\x47\x4b" + - "\x42\x49\xaa\x9f\xed\xde\xcd\xa5\xf9\x1e\x93\x46\x52\x69\x90\xf8\x61\x42\xf1\x22\xbb\xbb\x89\xaf\xce\x65\x71\x6e" + - "\x5e\xaa\x19\xfc\xf8\x07\xbd\x92\x13\xd4\xb3\xc4\x86\xe1\x20\x11\x9d\x8f\xd3\xc1\xa5\xd8\x44\x4f\x9f\xb2\x98\x81" + - "\xcb\x6e\x85\x72\xbc\x4f\xb4\x61\xe1\xe2\x32\x45\x7d\x7e\x6f\x4e\xed\xee\x3a\xb3\x39\xd6\xb6\xf6\x85\xda\x0a\xf1" + - "\xe2\xf4\xf4\x49\x6f\x5b\x32\x3a\xcc\x07\x61\x5f\x01\x07\xeb\xb2\xd3\xfd\x1b\xd2\xd2\xd5\x7c\x47\xee\xb0\x33\x45" + - "\x08\x9c\xf8\x6f\xe2\x0a\x75\x6c\xa5\xe3\x21\xba\x4e\x93\xe4\xdb\x52\x8a\xbd\xb0\xb1\x5d\x5f\xcd\x2f\xc0\x3e\xbe" + - "\x13\x98\xcf\x5d\x91\x14\xf4\xff\x77\x85\x4d\x16\xf2\x83\x32\x0e\x72\xfd\xc9\xba\x1f\x14\x1e\xc5\x6b\x1a\xa7\x81" + - "\x81\xc1\x54\x07\x80\x2a\x95\x53\x07\x61\x2a\xc3\x1a\xc1\xf1\x74\xbb\xf6\xc2\x2d\x03\x51\xb9\x55\x8e\x8a\x56\xdb" + - "\x8e\x41\xc3\xa1\x60\xbe\x89\x51\x7d\xb1\xac\xd6\x77\x42\xe0\x63\x17\x31\xf6\x10\xdc\xc4\x68\xea\xa3\xfc\x99\xda" + - "\x90\x9b\x15\x71\x1f\x96\x91\x4a\x0e\x51\x75\x6b\xb3\x8d\x52\x70\x67\x02\x5c\xd9\x48\x3c\x39\x12\xd3\x54\x56\x72" + - "\x24\xbe\x3c\x12\x70\xe1\x56\x6b\x51\xaa\xd9\x48\x7c\xd5\x75\xc9\x48\x05\xa6\xd1\x04\x66\x62\xb2\xe6\x52\xd5\x22" + - "\x61\xcf\xf8\x91\xf8\xe6\x68\x8b\x6b\xfc\x48\xfc\xe5\x48\xa8\x6a\x3a\x70\xf9\xe4\x1c\x45\x7f\x2a\xbe\xe6\xba\xf8" + - "\x36\x49\x6e\x10\xef\x96\x3c\xee\xda\x72\x37\x72\xb9\x54\xb2\x44\xd1\xee\x4f\x0f\x31\x68\xc9\x25\x0d\xd3\x6a\x98" + - "\xa9\x43\x53\x62\x4b\xa6\x9f\x26\xc9\x20\x0c\xfa\x28\xf5\xd9\x8d\xf4\x5e\x8c\x17\x17\x51\xa8\x43\x80\x43\x4c\xae" + - "\x87\x51\x95\x4b\x10\x40\x94\x4c\x55\xf9\xd1\xc1\x4a\x6a\x67\x03\x96\x23\x17\xad\xda\x29\xa5\xa3\xff\xd1\x0e\x29" + - "\xbf\xcd\xa7\x74\xc8\x65\x1d\xef\xbc\x7a\x3f\xb1\x8e\xe4\xa7\x97\xd2\xb4\xa3\xb6\x56\x98\x8c\xe7\x07\x07\xe1\xee" + - "\xd9\x01\x72\x1e\x35\xce\xfd\x1d\xa6\x00\x3f\xad\x80\xb2\xf8\xb9\xe1\x88\xf8\x92\x5e\xb7\x94\xf6\xe1\xac\xb9\xea" + - "\x5a\x00\x53\xf8\x55\x10\x4d\x8f\x3c\xb4\x11\x89\x1a\x5c\x0e\x7a\xa2\x63\x94\x2c\xa7\xf3\x4e\xd7\x9e\x15\x14\x50" + - "\xda\xc6\xa3\x4e\x13\x91\x70\x58\x70\x0b\xab\x88\x7e\x20\xdd\xae\xf3\x9b\xda\x6c\x70\xdc\xb6\x05\xd2\x12\x1a\x68" + - "\x6a\xf3\xf9\xf4\x75\xde\x9f\x16\x59\xe6\xf3\xe3\x76\xf0\x88\x76\x46\xdb\xaa\x6a\x36\x4a\x2e\x31\xa8\xcf\xc4\x81" + - "\x2d\x45\xee\x04\x5d\xf4\x68\xf9\x78\x4f\x51\xa9\xc9\x9e\xa8\xe5\x9b\x74\xfd\x3b\xbf\xd6\xc3\xc6\x40\xea\xf7\x7f" + - "\x76\x98\x16\xa5\xbf\x1b\xd0\xbd\x79\x2a\x0e\xc4\xb1\xff\xb9\x6f\xa7\x32\xaa\xeb\x57\x83\x19\x5d\xa9\xfc\x5f\x5e" + - "\x3a\xea\xc5\x84\x63\xce\x89\x9c\x1e\x09\x2d\x9e\x72\x4b\xf8\x7b\x7f\x2c\x1e\xd7\x1c\xaa\x6d\xa9\xd0\xb6\xe0\xcc" + - "\x48\x11\xc6\x0d\x6b\x73\x2f\xd2\xf4\x4f\x9b\xfa\xe1\xff\xec\xd4\xb3\x7f\x1a\xdf\x5a\x10\xc1\xae\xe1\x33\xf0\x20" + - "\x5e\x6d\xbf\xaf\xd1\x24\x75\xf4\xe7\x2e\xf2\xf2\xff\xaa\x45\xee\xef\x87\x9b\xfa\xa7\x2c\x94\xab\x9a\xbb\xd0\x3c" + - "\x7f\xfb\xe6\xd5\x1c\x8b\x38\xd4\xee\xe4\xdf\xb9\xa0\x0a\xf0\xa5\x69\xca\xd5\x95\x83\x3b\xd8\x6b\xc4\x69\xd6\x1a" + - "\xb8\xcf\x3f\x44\x29\x53\x5d\x50\x3c\x1b\xfb\x13\x4e\x8a\x1b\xfb\x7b\xa6\x33\x65\xff\x5e\x4a\x63\xae\x8b\x32\xb5" + - "\xbf\xf5\x42\x5e\x2a\x1b\x08\xc7\x6b\x8e\xcd\x63\x1a\x2d\x07\x2d\x75\xab\x09\x08\xb7\xb5\x99\x98\xd5\x64\xa1\x2b" + - "\xdb\x7d\xa9\x8c\xaa\x3e\xb9\xfb\xb8\x2a\xb4\xeb\x9f\xca\xc4\x4a\xb3\x16\xcf\xdf\x9e\x50\x54\xaa\xd5\xd2\xe7\xea" + - "\x3a\x30\x03\x86\xf5\xd7\xdd\xc3\x84\x32\x78\x04\x26\x22\x9f\xbc\x61\x1c\x46\x08\x99\xda\x6e\x1c\xf1\x96\x05\x66" + - "\xc6\x71\x6d\x40\x8e\x8d\x72\xb1\x14\xce\x5d\x38\x78\xd2\xd4\xce\xc2\x2e\x94\x46\xfd\x98\x67\xeb\x20\xc6\x99\xd5" + - "\xd8\xac\xa1\xef\x51\xe8\x85\xe9\x91\x1b\x27\x60\x93\x29\xbe\x97\x65\x4f\x5c\x96\xc5\x6a\x69\x7a\xc2\xc5\x21\x92" + - "\x69\x93\xbd\x42\x38\x64\x83\x5d\x52\x9c\x3e\x38\xf2\x45\xa7\x2c\x7a\xd4\x3e\x0e\x52\xf5\xf3\x3a\x16\x07\x62\xc4" + - "\x8d\x6a\x91\xfb\x24\x91\xe0\x6c\x50\xcf\x4f\x43\xc0\x1b\x9a\x9a\x2d\xc7\xe0\x23\x25\x3d\x64\xed\x13\x9a\x88\x55" + - "\xcc\x50\x5f\x61\x3e\xc8\x17\x98\x3c\x99\xca\x5f\x95\xa6\x12\xe5\x0a\xaf\xf4\x20\x64\x4c\xa5\x28\x18\x2e\x38\x2f" + - "\x6f\x89\xe9\x96\x07\xea\x46\x4d\x5d\x7f\xb5\x74\x00\x71\xbc\x91\x4f\xf0\x31\x2d\x72\xca\x83\xc0\x56\x1e\x0c\xc1" + - "\x95\x68\xde\x41\x6d\x21\x35\x77\xeb\x85\x7f\x2d\x44\x5c\x08\x89\xbb\x33\x36\x1b\x6a\x11\x92\x07\x02\x0b\x93\x8e" + - "\x84\xf6\x15\x81\xd4\x8d\xf3\x68\x05\xa6\x44\x96\x00\x3c\x34\x42\x2b\x13\xe9\xf3\xc2\x95\xdb\xb7\xdb\xd6\x5f\xb3" + - "\xe0\x0c\x28\x93\x17\xd3\x30\x9a\x10\x4d\xcf\xe9\x13\xb3\x95\x1a\x39\x94\x74\x00\x7b\x21\x4d\x65\x53\xd5\x4a\xcc" + - "\x7a\xeb\x86\x46\xbf\x9a\xa5\x9c\xb2\x53\x04\x60\xed\xc8\xc3\xa7\x61\xd3\x12\x1d\x41\x42\x9a\xf5\xa3\xdb\x0e\x5f" + - "\x1f\x08\x54\xcf\x3a\xe6\x8e\xbd\xa5\xe1\x78\xa8\x75\x1e\x9e\xea\x18\x07\x1c\xd4\x7c\xc0\x18\x7b\xa3\xd4\x41\x87" + - "\x5a\x2a\x8f\xc1\x81\x43\x1f\xb3\xb5\xb6\xa7\x66\x1b\x87\x6a\xc1\x0e\xdc\xbd\x05\x6d\x7b\xd0\xbe\x09\x0c\x58\x47" + - "\x14\x7c\x4e\x68\x6e\xc9\x62\xa3\xed\xf8\xd3\xc1\xea\xa2\xdc\x9b\x07\xcd\x65\x81\x73\x1e\x36\x51\x5a\x0b\x8e\x77" + - "\xaa\xe6\xca\xde\xb0\x94\xd4\xce\x25\x3f\xa7\x48\x29\x6a\x8c\xee\xad\x0f\x4b\x45\xfe\x08\x40\x70\xc8\xb0\x1a\x26" + - "\x5c\xeb\x71\x2a\x75\x5b\xa9\x46\xb8\x84\x54\x4c\x15\x7d\xec\x7b\x40\xb1\x1c\x8d\xb4\xeb\x1a\xb9\x27\xac\xe2\x8e" + - "\x75\xf7\x81\xb1\x6c\x64\xf5\x05\xde\x33\xca\x0d\xc4\x9b\xc3\x01\x34\x9e\x86\x33\xb1\xeb\xc6\xd4\x91\xae\x7a\x5f" + - "\x53\xbd\x70\xe5\x82\xb8\xc7\x80\xe2\xfb\xfc\x15\x99\xca\x2d\xe5\xb6\x69\xb2\x89\xe4\xfb\xfc\x6b\x18\xe3\x51\xe7" + - "\x3e\x8f\x84\xde\xdf\xf7\x19\x90\x2c\xb1\xb7\x5d\x9d\xe9\x0b\x4a\xa9\x53\xcb\xe7\x14\xd0\xec\xdb\x68\xba\x32\x4d" + - "\x3d\xad\xb1\x78\x52\xf6\x82\x73\xde\x43\xb3\x57\xb0\x08\x72\x41\xf6\x0d\x06\xa9\xa6\xe4\x96\xc8\x85\xbc\x29\x72" + - "\x5b\xf7\x49\x8c\xe9\x53\xf4\x74\xe2\x20\x89\x30\xc6\xff\x3e\x66\x87\xcf\xad\x1a\x11\xfe\xc4\x24\x80\x61\x1a\x2a" + - "\x37\x08\xdd\x0a\xc7\x96\x3e\xc6\xfe\x59\x59\x61\xb0\x58\x0b\x27\xfd\x1b\x2e\x4b\x35\x55\x68\xcc\x0f\x9c\xda\x3e" + - "\xc9\xba\xdb\x66\x39\x68\xba\x97\x6f\xad\x11\xb6\xd9\x88\x06\x14\x1a\xda\x1e\x67\x28\x6e\x9b\x47\x53\x0b\xe4\x62" + - "\x15\x1a\xeb\x96\x59\x76\xc7\x9a\xcd\x27\x2f\x1a\x76\xb5\xc8\xd2\x17\x8d\xf0\x06\x9a\x4b\xae\xae\xad\xbb\x74\xe8" + - "\xbe\x67\x77\xee\x22\x70\x71\xfa\x05\x53\x0f\x3d\x44\x4f\x2d\x21\xcb\x89\xae\x4a\x59\xae\x9d\x97\xb7\x2b\xd1\x8f" + - "\x75\x9d\x31\x2d\x30\x55\x01\x9d\xa8\x5c\xcd\x74\x45\xce\x5c\x00\xed\xa0\x8c\x2a\x41\x3b\x32\xc1\x7f\xda\x2e\xfd" + - "\xb3\xdb\x14\x30\x0f\xdb\x76\x29\x72\x3b\xd8\xe2\x4f\x1f\x99\xa4\x68\x3b\x23\xbf\xd5\x7f\xf3\x22\x22\x37\xf7\x4f" + - "\x76\xfb\x3d\x8a\x60\x90\x58\xac\xa8\xb9\xba\xf3\x24\xad\xea\x09\x46\xe3\x86\xa8\x4a\xa9\xbb\xab\xfb\x97\x87\xf6" + - "\xa5\x45\x9e\xd8\x1f\x16\x93\x05\x62\x52\x83\xaa\x10\x0e\xed\x4c\xe1\x1c\x28\x26\x72\xfa\xa1\xbf\x2c\x8b\xa5\xbc" + - "\x44\xe7\xb7\xc2\xb9\x49\xc7\x76\x8e\xd0\xb9\xc0\xf6\x73\x26\x1e\xe3\x2a\xfd\x6c\x1e\x8b\x8b\xc0\x2b\xa4\xc5\xa9" + - "\xf8\x27\xb5\x32\x0a\x26\x32\xfd\x57\x26\xd2\x80\x1c\x49\x15\xf8\xe4\xa8\xb6\x7a\x66\x24\x16\x58\x9f\x88\xae\x4d" + - "\x80\xd5\x91\x90\x54\x57\xc2\xbe\x70\x36\xf7\x0f\x4a\x2d\x09\x0f\xec\x71\xf1\xbb\x57\x5f\xf9\x9d\x28\x5d\x8b\x9e" + - "\x69\x43\xea\xc8\x95\xb6\x05\xbd\xef\x73\x2e\xfa\xf8\x8a\x61\x78\xbc\xb6\x83\xf3\x2c\x6a\x39\x4b\xed\xd3\xd0\x4f" + - "\xf0\xf8\xb3\x28\x98\xf7\xb7\x73\xbd\x1c\x45\x34\x3d\x72\x2a\x0a\xf9\x9d\x12\xee\xcd\x8f\x1e\xf4\xcf\xd5\xd5\x13" + - "\x8f\xe1\x46\x38\xb8\x68\x40\x66\xb1\xca\x2a\xbd\xcc\xd4\x0b\x1a\xd2\x84\xcc\x06\x4f\xc3\xf4\x5a\xd2\xc4\xd5\xd9" + - "\x08\xdb\x36\x58\xf5\x5d\x6c\x43\xd3\xf9\xc7\x76\x80\x89\x71\x23\x67\xa5\xdb\xd6\x64\x62\xd1\x2a\xa6\x45\x9e\xaa" + - "\xdc\x60\xc6\x80\x40\xa4\x5d\xf6\xd8\x2f\xb5\x75\xcb\x22\xa7\xb3\x5c\x5d\xff\x1c\xf8\x9c\xb1\xcf\x5c\x7d\x95\xae" + - "\xf7\x90\x5f\x5a\xc8\xe5\x92\x79\xec\xa5\xd8\x0d\x53\xa0\xdd\x05\x81\x4f\xf0\x27\x23\xfc\x60\x89\x62\xb3\xe1\xb5" + - "\x7c\x0c\x49\xc2\x95\xb4\x55\x08\xe5\x9b\x05\xe7\xec\x31\x6b\x21\x97\x75\x35\x53\x74\xa4\xea\xd9\x48\xc3\x51\x1a" + - "\xdb\x61\x94\x3f\x6a\x4e\x52\xe9\x05\x9b\xed\x78\xbc\x65\x61\x2a\xfb\x9a\xfe\xce\x53\xfb\x77\x2d\x5f\x00\x85\x00" + - "\xba\xf6\x68\x87\xf5\x3f\x5b\x3c\x89\x83\xb6\xe3\x78\x4a\xfe\x85\x43\xb0\xa0\x77\x98\x41\xd0\x3b\xfc\xdc\xda\x7b" + - "\x9e\x6e\xe9\xbd\x6d\x19\x35\x64\xbe\xd3\x63\x92\x31\xbd\x9d\xd6\x00\xe6\x56\x6a\xb1\xec\x09\xdd\x0b\xfc\x26\x97" + - "\xa5\x7a\x2d\xc3\x7a\xb7\x30\x7c\xed\x49\xa9\xb0\x06\x85\x46\x9f\x18\xeb\xfa\xe7\x90\xd9\xf2\x50\x7f\x55\x95\xd0" + - "\xb9\xae\xb4\xcc\xbc\xd7\x24\x32\x46\x30\x3b\x67\x65\xbd\x21\xab\x34\xb4\x30\xec\x7d\x89\xe9\x47\xb6\xd2\x14\x74" + - "\x6c\x7a\xd4\x71\xab\xf2\xfc\xc4\xb1\x38\x73\x99\x60\x2f\xc4\xc8\x2f\x9b\x7d\x3c\xed\xcc\xde\x96\x8a\x0f\x44\x55" + - "\x60\x96\x54\xeb\xd4\xca\x1e\x8f\xe8\x48\x57\x5e\x51\x01\x4a\x38\x90\x70\x06\x61\x62\x7d\x4b\x53\xcc\x3a\x9f\xce" + - "\xcb\x22\xd7\x7f\x97\xce\x53\x9d\x3b\x39\xc9\x43\xd1\x1a\xa5\x71\xb7\xa8\xdd\x40\x72\x63\xdf\x25\x4f\x75\x10\x02" + - "\x38\xf8\x6b\x20\x3a\x01\xce\xd7\xb6\x8f\x5d\x9c\xa8\x3d\xaf\x8a\x07\xff\x71\xe5\xd3\x27\x5b\xd9\x91\xf3\x05\xda" + - "\xbb\x56\x46\xc8\x55\x94\x4c\x11\x54\xca\x48\x53\x94\x18\xf1\x88\x53\x0e\x90\x1c\xb3\xba\xf9\x7d\xb7\xa8\x45\x23" + - "\x04\x78\x8c\x61\x22\xf8\xf1\x71\x00\x85\x51\xf4\xf1\x66\x13\x1d\x1f\x1f\x25\x0d\x53\x1d\x0c\x06\x3a\xaf\x54\xc9" + - "\x5e\x82\x91\xc1\xdc\x88\x5c\xc1\x0f\x59\xae\xf9\x83\xb3\x0b\x1f\x01\xcd\x5f\x17\x2e\xfb\x39\x30\x3d\x76\xc7\x28" + - "\x66\x35\x5b\xbb\x4b\x90\x1e\x8f\x42\x1d\x47\x79\x92\x1f\x05\x2a\x9a\x3c\x15\xcb\x52\x2f\x80\xf1\x67\x4d\x85\xa3" + - "\xb9\x16\xc2\xb1\x9a\xca\x33\x05\x27\xb9\xa3\x4f\x3f\x02\x46\xb5\xc8\x46\x5e\x19\xf4\x7c\xb9\xcc\xd6\x01\x44\xdc" + - "\x28\x11\x90\x68\x20\x38\xb1\x74\x53\x32\xd6\x84\xa3\xd8\xa3\xca\xb4\xd7\x7f\x9e\xf0\x49\x3f\xbb\x68\x99\x8a\x3d" + - "\x15\x3f\xe7\x7d\x62\xda\x66\xac\x4d\x74\x87\x76\xb2\x16\x9c\x38\xb6\x9a\xab\x85\xb0\xd1\x91\x6e\xad\x74\xd1\x88" + - "\x31\x8e\xf2\x89\x2c\x8b\xbd\xb5\xe0\x93\x9a\x03\xb4\x5f\xd2\x99\x5d\xd2\x99\xbe\x10\xa1\x3f\x74\x79\x92\x37\xde" + - "\x85\xce\xd1\xb7\xed\x7a\x21\xc4\xcb\xe8\x66\x8c\x31\xd7\x23\x6c\x3c\xd9\xa0\x95\x9f\x26\x93\x38\x0a\x5c\xc9\x65" + - "\x16\x6c\x05\x46\x10\xd1\x16\x39\xef\x9c\x08\xa9\x75\x0e\x9c\xb6\xef\xd5\x32\x2e\x56\x55\xa6\xb8\xe4\xb8\x65\x59" + - "\x03\x9e\xf0\xc7\x55\x55\x0b\xc3\xf8\x14\x67\xf3\x00\xa6\x75\x6f\x73\x94\x0f\x30\x98\xd9\xef\x28\x17\xd5\xc5\x8f" + - "\xb9\xc4\xfe\x1a\x24\xe1\x70\xa5\xae\x03\xdc\x75\xd6\x11\xfb\xed\xf1\x0e\xeb\x6d\x11\x1b\xfc\xaf\x07\x41\xc2\x7e" + - "\xe6\x49\x44\xc9\xce\x2e\xba\x3d\xc6\xdd\x9a\x56\xc1\x91\x36\xcc\x33\x68\x99\xae\x96\x7b\xa6\xf2\xc2\x8e\x15\x33" + - "\x10\x8b\x3d\x09\x67\x6f\xb0\x3b\x81\xdc\x0e\xe3\xbb\x40\xec\x85\xca\x84\xb7\x33\xd8\xef\xe3\xd6\xe0\x18\x76\xa6" + - "\x18\xf1\x1d\x80\xdd\x60\xa2\x8e\x48\xba\xc4\xe8\x00\xe8\x92\x0e\x84\x4d\x11\x6c\x9f\x44\x31\x02\x75\xb9\xc6\x52" + - "\x9c\x34\x00\x95\x07\x50\xcf\xd5\xbd\x0e\xa6\xaa\x67\x82\x13\xdd\xdc\xaf\xe7\x36\x8d\xb6\xca\x91\xa4\x88\xa2\xe2" + - "\x3b\x9f\xc8\x38\x88\x5e\x72\x70\xb6\x99\x88\x83\x1b\xa2\xd7\xdc\x87\xa0\x2c\x9a\x7f\x87\x0f\x6c\x15\xd4\x6d\x07" + - "\xb5\x89\x63\x6e\xb9\x21\xf1\x0c\xf0\x2b\x16\xa1\x01\xb3\x07\x12\x68\x74\xd2\xf6\x65\x33\xd5\x6a\xb7\x29\x20\x51" + - "\xeb\xef\xcb\x62\xf1\x0e\xf5\x9b\x2d\x3a\x55\x94\x7d\x5f\x58\xe2\xec\x98\xdb\xf7\x77\xaa\x59\x39\xd6\xe7\x27\xce" + - "\x46\x6a\xad\x55\x36\x3b\xe9\x99\x55\xa7\x1e\x5c\x90\x8b\x0b\x4b\x24\x0b\xaa\xb7\x1d\x7c\x56\xef\xc8\x46\x14\xba" + - "\x9e\x3a\xa2\xe3\xc5\x99\x7a\x6b\x2c\x04\x22\x0e\xbc\x6f\xcb\x3b\x20\x8a\xc5\x2a\x4f\x25\x59\xc6\xdd\x85\xa9\x72" + - "\x83\x49\xc5\x30\x0c\x52\x85\x65\x55\x4b\x25\xa7\x73\xcc\xbc\xcd\x59\xde\x96\xfd\x4c\x5d\xa9\xcc\xd2\xc6\xc4\x74" + - "\x9d\x1c\xca\x60\x12\xe3\xba\xde\xf7\x13\xfd\x7b\x43\x58\xb3\x5b\x8e\xa8\x03\xc5\xa6\x8b\xeb\xb9\x51\x9f\xe7\xeb" + - "\x7f\x72\xe0\xf8\xb0\xc7\x3b\xcd\xed\x5d\xc4\xc7\x27\x4d\x85\x2c\x93\x67\x8d\x7a\x05\xad\x4a\x05\x17\x9d\xb2\x5b" + - "\xdf\x37\x64\x4e\xa1\x69\x50\x6d\x61\x77\xcc\x3a\xb2\x45\x61\xaa\x17\xae\x04\x03\x79\xb3\xd2\x89\x48\xc2\x15\x78" + - "\xb9\xbd\x1b\x70\xe2\xe1\x51\xe5\x86\x5b\xe6\x18\x9d\x6a\x0f\xe2\x6d\x12\x2a\xeb\x24\x2e\x3e\x55\x38\xf6\xf1\x6a" + - "\xed\x27\x43\xdb\x93\x51\xb7\x39\x32\x84\xe3\x7d\xde\xae\x03\x72\x47\xb6\x6b\xfd\x90\x5a\x28\x65\x6c\xb6\x6f\xce" + - "\xc1\x92\x19\x22\x53\xfe\xad\x0b\xe7\x3c\x6a\xe4\xea\xc3\x6a\x04\x32\x13\xab\x25\xca\xcc\x8a\x84\x96\xa5\xf3\x49" + - "\xb1\xd3\xf2\x34\xb2\x25\xfc\x2e\x34\x2d\x23\xdf\xeb\x72\x21\x5a\x78\xf9\xbc\x5c\x89\x9e\x09\x99\xaf\xbb\x28\x14" + - "\x91\xc7\xb0\x98\xcb\x3c\x75\x61\x86\x98\x9e\x7e\x7f\x5f\xf3\x1d\x64\xb7\xe8\xbd\xdd\xa2\xf7\x7e\x8b\xec\x94\xda" + - "\xb7\xe6\xbd\x05\x4b\xc8\xae\x44\xb1\xf2\xd1\xf5\xe6\x6d\x44\x6e\x7f\x1c\xf7\xf4\x8c\x52\x63\xdc\xb1\x7d\xf5\xa6" + - "\x81\xfd\xcb\x0e\xed\x0b\x72\x79\x1b\x05\x4e\x55\x5c\x4b\x23\x64\xbb\x79\xb9\x27\x74\x6e\x54\x59\x09\x99\xbb\x73" + - "\x0d\xf0\xeb\x5b\x8f\xe3\xdf\x1e\xb9\x64\x31\x4c\xdf\x7d\x0a\x2b\x8d\x9e\x76\xdd\xc1\xb4\xc8\xa7\xb2\x4a\xfe\x10" + - "\x6c\x59\x65\x00\xe1\xfb\xc7\xe2\x22\x70\x5f\x14\x1d\x71\x8c\x49\x0a\x47\xa2\xd3\x11\xb7\x36\xd5\x44\x77\x4b\x6c" + - "\x66\x6c\x89\x2d\x3d\x14\x9e\x8a\xf7\x2e\x65\x69\xdb\xc5\x65\x27\xa9\x7b\xe2\x3d\x1c\x4b\xfb\x25\xef\xf2\x96\x6f" + - "\xbd\x0b\x41\xdc\xcb\x7b\x54\xdb\xb6\xf4\xd1\x66\x85\xa4\x56\x91\x1b\x93\x53\x97\x12\x17\xea\xa4\xb3\xa3\x56\xb5" + - "\xd3\x76\x2c\xb8\xeb\xe2\xfe\x6b\x59\xac\x96\xfc\x8d\x49\x6a\x9d\x98\x5e\x80\x76\xe1\xad\x3e\x59\x9f\x62\xe2\xff" + - "\xe0\x6d\x10\x9b\x88\x2b\x9e\xac\x6d\x7c\xc9\xb8\xde\x6b\xbd\xa9\x59\x2d\x55\xf9\xda\xd1\x92\xba\xbe\x27\xa4\x95" + - "\x01\x97\xe3\xa8\x79\xa4\x66\x26\xf2\xfa\xde\xb3\x1a\x21\xdf\x96\xbe\x28\x56\x38\x21\xae\xf1\x87\xb7\x7e\xe7\xa0" + - "\xe3\x32\xdc\x7a\x2d\x27\x32\xd9\x7b\x7b\x3e\x42\xd8\x2d\x35\x0d\xe3\x86\x79\x6e\xdf\xc9\xe9\x07\xac\x0b\x58\xbf" + - "\x62\xbc\xab\xc6\x2f\x1c\xf5\x26\xb3\x6b\xb9\xe6\x7a\x68\x5c\xfa\x0f\xc7\x72\x5c\x43\x51\x06\x4b\x0b\x75\x49\x0d" + - "\x65\x92\x07\xf1\xde\x9e\xa5\xc0\x79\x7a\x86\x59\x46\x2f\x12\xd2\x26\x05\x50\xf2\x73\xf9\x19\xab\x58\x57\xea\x52" + - "\x95\xce\x10\xa4\x67\x33\x57\x6f\x01\x13\x6e\xb8\x0f\x43\x52\xbb\xc3\xcd\x7f\xc6\x9a\x29\x62\x2c\x12\xfb\xfd\xbe" + - "\xbb\x30\x2d\x30\xd8\x85\x98\xb8\xa8\xd7\xb2\x9a\x0f\x4a\x20\xcc\x8b\x04\x2f\xdd\x83\xc1\xa1\x9d\x11\xb1\x81\xb8" + - "\xba\x5a\x84\x32\xe5\x08\x6b\x6c\xf4\x4e\xe3\x26\x1f\x47\x17\x7d\x58\x74\x6a\x1a\xf0\x43\x51\x62\xe1\x50\x58\x58" + - "\x4a\x52\xc5\xd4\x10\xd5\xa9\x57\x02\x69\xc2\x7e\xff\xff\x07\x91\xeb\x37\xfd\x9b\x90\x82\x12\x6e\x72\xbd\xbb\x52" + - "\x51\x26\x88\xc2\xf7\x6e\x0a\x1b\x49\x4d\x08\xf8\x1b\x15\xcf\x9f\x28\xd1\x39\x38\xe8\x60\x81\xd8\x6b\xdb\x6d\xe8" + - "\x05\xfe\x6d\x8f\xe3\x58\xec\xcb\x77\x45\xa6\x30\x23\xca\x9b\x22\x55\x3f\x68\x53\x45\xd5\x8e\x4e\x5e\x8d\x44\x87" + - "\xe0\xd7\x39\xe2\x2f\x47\xe2\x69\xbe\x5a\x4c\x54\xf9\xac\xeb\x63\x4f\x43\x0d\x08\xbb\x53\x79\x8e\x03\xe0\xc7\x64" + - "\x2a\x34\x7d\x1a\x14\xdb\xac\x0a\x3f\x64\x48\x6c\x95\xd3\x10\x19\xe3\x68\x48\xaa\x8d\x53\x97\xeb\x03\x1e\xa6\x06" + - "\xf6\xb3\xf7\x51\xfd\x8e\x7f\xc6\xe4\xcb\x71\xdb\x4d\x15\x7f\x23\x2f\x4d\x5d\x76\xdf\x86\x72\x0e\xf5\x85\x33\x9e" + - "\xd2\x21\x68\xde\xda\xee\x9c\xbd\x2b\xe5\xf4\x43\x10\x52\xef\xe5\x78\xd4\xbc\x56\xac\xa4\x34\x11\x18\x81\xb2\x46" + - "\xea\x98\x77\x73\xb5\x26\x8c\x41\xa2\x71\x59\xe4\xca\x49\xb4\x32\xcb\x7c\x99\x7d\x4b\xf1\xdb\xc4\x78\x6b\x4b\xb3" + - "\xbb\x13\x01\x2c\x44\xce\x7e\x3f\x58\x90\x9f\x04\x55\xa0\x50\xe4\x55\x44\xb5\x66\xb0\x72\xc9\x95\x2a\x5d\x98\x91" + - "\xcb\x83\x41\xda\xd6\x2a\x9c\x47\xa4\xa3\x0a\x69\x6d\xeb\x26\xb5\x09\xf8\x5e\xa7\x18\x40\x0e\x0e\x66\x13\xbe\xc1" + - "\xed\xc9\x24\x7f\x7f\x2c\x74\x20\x50\x13\x94\xf7\xf6\x18\xdf\xa3\xa6\x6e\x92\x21\xd6\xb6\x20\x6d\x70\xf7\x35\x10" + - "\xd6\xa1\x6a\x60\x73\xf3\x17\xc8\x76\xa7\x92\x00\x11\x6a\x00\x43\xd6\x18\x69\x36\x12\x00\xcb\x66\x59\x16\xba\x02" + - "\x72\xa3\x17\xc0\x9c\x29\x66\x73\xb9\x60\x8c\xaf\x04\x5e\x3b\x48\xbc\xdc\x67\xe2\x20\xdc\x97\xad\xb9\x4f\xd0\xe0" + - "\x96\x84\xd6\x38\xf4\xad\x74\x8b\x6a\x28\xe0\x76\xa2\x77\xa8\x28\x5a\xb2\xa8\xd8\x48\xb8\xd0\x6e\xbb\xf6\x4b\x7f" + - "\xa9\xcd\x54\x96\x9c\x2a\x50\x20\xcb\x37\x2f\xb2\x54\x95\x36\x16\x86\x2d\x1e\x98\xe2\x5b\x4e\xab\x95\x93\x10\xec" + - "\x61\x88\xae\x6f\xaf\x67\x0e\x1e\xb7\x69\xe1\xe0\x92\x08\x40\x1c\x5e\x01\xed\x0a\x94\x5a\x7f\xae\xa3\x53\xa5\x52" + - "\xac\x03\x66\x94\xdf\x34\xb3\x9a\x4e\x15\x31\xdc\xd6\x2e\x44\xcf\x8c\x99\xad\x32\xcf\xc0\x99\x4a\x2f\xa9\xc6\x78" + - "\xb4\x99\x35\x4a\x85\x59\x26\x99\x6b\xf1\xd3\x08\x78\x2d\xaf\xbb\xab\xa1\xc0\x7e\x1b\x1f\xd7\xf5\xb9\x80\xf8\xab" + - "\x46\xb9\xb4\xe6\x46\x36\x0e\xec\x8f\x57\xaa\x2c\x75\x0a\xb4\x29\xa7\x45\x00\xff\x59\xcc\xc4\x65\x56\x4c\x64\x86" + - "\x57\x50\xae\xb0\xec\x4d\x44\xbd\xb6\x51\xe1\xbb\x69\xf0\x76\xb6\x80\x78\x92\xd6\x08\xce\x55\x60\xab\xdd\xa9\x55" + - "\x7b\x25\x3a\x71\x4c\x0a\x8a\x30\xcb\x41\xc4\xb2\x76\x5d\xe1\x3e\xf7\xcc\xb2\xdc\x9c\x4d\xc6\x3b\xa2\xfb\x07\x6d" + - "\x7e\xe8\x64\xa9\x18\x3e\x12\x27\x79\xa5\x4a\x90\x73\x81\x55\x43\x77\xca\x47\xc3\xd0\xc5\x80\xbd\x11\x3d\xa7\xe2" + - "\x78\xd2\x3a\x0b\xe3\x5e\x38\x87\x74\x9e\x42\xf9\x71\x9f\xf4\xdd\xd8\x29\x1d\x4d\x03\x39\x71\x20\xd2\x57\x27\x2b" + - "\x66\xc2\x95\x2c\x70\x4f\x59\x17\x36\xa5\xda\x46\x2b\x9b\xe5\x07\x1d\xe4\x28\xb7\x9d\x77\xfd\x0b\x9c\x3d\x62\x6d" + - "\x45\x54\xf0\xc0\x44\xc6\x62\x42\x35\xa7\xdb\x0e\xd5\xda\x6d\x24\xcc\x2d\xbe\x45\x7c\x23\xa7\x68\x9f\x82\x29\x70" + - "\xc7\x6f\xd5\x26\x84\x87\x85\x2e\x2f\x0b\xa6\x36\x3d\x6b\x5d\xf6\x69\xfd\xe2\x7e\x64\x39\xf3\x4e\xaf\xbc\x55\x69" + - "\x94\x3c\xac\x7d\x23\x1b\x68\xf4\xcf\xc8\x77\x5d\x6f\x28\x3c\x05\x5e\xc3\xc1\x1c\xb3\x2e\xd1\x56\xc8\x78\x1e\x83" + - "\xc0\x27\x36\x8c\x3d\x08\xcb\x95\x4a\xeb\x0a\x11\x95\xb9\x7b\x2e\xb2\xe2\x9a\xb5\xa1\xf4\x25\xe6\xde\x75\xae\xba" + - "\x80\x3f\x14\x22\x8c\x11\x8d\x74\x80\x1e\x1a\x07\x14\xec\xc4\x4f\xd1\x61\x5e\x54\xf7\xee\x14\x79\xf3\x8d\x3d\xb9" + - "\xb7\xbe\xfd\x73\xff\x27\x56\xc4\x5e\x96\xaa\xff\x91\xae\xc5\x64\xa5\xb3\x2a\x9c\xce\xc0\xe5\xad\x0a\xc6\x74\x55" + - "\xf6\x9c\xf4\x56\x2f\xc4\x77\x2b\xce\x98\x74\x5e\xb4\xbe\x04\x3a\x7e\x81\x33\xc4\xfa\x44\xa1\x51\x83\x0e\x06\xfb" + - "\x98\x72\x09\x3f\x9a\x68\xbd\xcc\xd8\x16\x1a\xe3\x78\x8f\xe0\xd2\x72\x67\x9c\x88\x8b\x8f\x75\x81\x7f\x39\xe4\x45" + - "\x80\x70\x49\x94\xc4\x62\xe5\xd8\x96\x13\x30\x51\x31\x09\x3b\x6a\x87\xae\x22\x1e\xf8\xfe\x3d\x7f\xaa\xdd\x45\xe5" + - "\x8f\x77\x12\xe0\x91\x1d\x60\x10\x3a\x47\xd8\xbf\x1d\x96\xfa\x34\x5e\xf6\x2f\x9b\xdc\x97\xdc\xd7\xdf\x95\x28\xb7" + - "\x2d\x74\xae\x17\xfa\xef\x56\xd7\x47\x19\x02\xac\xa8\x86\x56\x40\x02\x00\xa0\x38\xf2\x0f\xc0\x5f\xa3\x33\xb9\x25" + - "\x83\x21\x85\x09\x73\x4e\xf3\x49\x79\x27\x3f\x00\x3d\x34\x36\x11\x3a\xe5\x77\xa8\xf8\x00\xd3\x45\xc4\xb5\xd0\xcb" + - "\xa2\xa8\x3c\xb0\xb4\x11\x32\x17\x27\x58\x04\xc9\xa9\x90\x6c\x88\x46\x5b\x41\x14\xa6\x17\x54\xd7\x2f\xb4\x9a\x88" + - "\x67\xe2\x31\x4a\x6c\xa4\xb8\x1b\x7b\x03\x49\x37\xd0\xa2\x9d\xbc\xf4\xf1\xc8\xb6\x34\xe8\xa5\xaa\xbe\x5b\x9f\xa4" + - "\x81\xa4\x3c\xa8\x55\x33\xdc\x56\x50\x7b\x67\xa7\x5d\xbf\x79\x18\xeb\x37\x89\xfc\xba\xfb\x38\x09\x15\x15\x27\x2f" + - "\x3b\x17\xbc\x12\xab\x0c\x0e\x83\x53\xda\xd2\xf1\x74\x7b\x41\x01\x65\xdc\x6f\xd1\x25\xe7\x3d\xc7\xa4\xfa\xf7\x71" + - "\x1e\x2b\xef\x21\x67\xb9\x93\xb7\xa5\x72\xb8\xec\xb8\x2d\x94\xb4\x4c\x05\xff\xbd\x52\xa5\x9e\xad\xd9\x89\xbb\x5c" + - "\xa3\x5b\xb4\xa9\xd4\x52\xac\x96\x42\x0a\xa4\x5c\x21\xc5\xa7\x8b\xc3\x76\xe8\x86\x9f\xd6\x99\x91\x46\xc2\x7b\xcb" + - "\x91\xb4\x90\x52\xbb\xf7\x56\xb3\x48\x51\x2a\x14\x45\xb0\x35\x0c\x47\x21\x89\x20\xb4\x46\x61\xa9\x28\x45\xa9\x2f" + - "\xe7\x55\xbf\x2a\xfa\x99\x9a\x55\x4e\x17\x10\x5d\xa2\x54\xaf\x09\x24\x07\xc3\x0c\x94\x2b\xdb\x14\x7a\xf8\x60\x24" + - "\x5a\x84\x7e\x5b\xaf\xdd\x1a\x3a\xea\xd0\x19\xfd\xf9\xa4\x28\x2b\xc1\xd9\xd5\x75\x25\x64\xa0\x5e\xf6\xbb\x59\xc3" + - "\xb1\x84\xc3\x04\x09\x67\x30\x83\x7d\x78\x35\x07\xa2\xfd\xad\xef\x23\x01\x6c\xf3\x46\x8a\x3c\xf5\xc9\x93\x43\x13" + - "\xc1\x29\xc6\xd1\xf7\xf8\xca\xa7\xc0\x33\xda\x39\x80\x9f\xcd\x3f\x68\x38\x8b\x44\x3d\xd3\x20\x0f\x85\x30\x1f\x23" + - "\xad\xb4\x1a\xf6\xad\xf8\xbd\x25\xdf\x94\x55\x18\x97\x3c\x94\xad\xf8\x12\xdb\x3c\x31\x22\x0a\xde\x38\xcb\x52\x13" + - "\xbb\xe8\x88\x44\x3a\xc4\x5a\x1a\x28\x52\xfe\xe3\xa4\xb5\x11\x94\x42\x04\x85\x77\xab\x97\x2e\xd5\x42\xea\xbc\x67" + - "\xab\x16\x5b\x5d\xb3\x2c\x9d\xcf\x91\xc5\xcc\xa5\x53\x9d\xfb\x4c\x4d\x31\x46\x7b\x69\x64\x8b\x0e\xfc\x28\x94\x52" + - "\x77\x1b\xc9\xf3\xb6\x0b\x5d\x81\xf8\xd6\x72\xdc\x6b\xf2\x64\xa8\xff\x69\xf5\xe3\xa4\x08\x3f\x64\xd3\x81\x96\xab" + - "\x1b\x35\x5d\x11\xcb\x8b\x4a\x07\xd8\x7d\xc7\x11\xe8\x19\xde\x17\xec\x4d\xb2\x2c\x8b\x2b\x4d\x75\xd3\x91\xbc\xe0" + - "\x2f\x56\xfe\xfd\xe6\x93\x5a\x96\x2a\xe4\xa5\xf8\x0c\x2c\x8a\x94\xea\x6f\x47\x19\x32\x31\x47\xf6\xfd\x7b\x3b\x01" + - "\x61\xc1\x2d\xad\x25\xa9\xec\xb9\x68\xca\x6e\x42\xa2\x81\xb2\x77\xb5\xd7\x43\xd7\x6a\x88\x73\x01\x5f\xef\xf1\x56" + - "\x43\xb8\x00\xfe\x9f\x8f\x6a\x5c\x53\xba\xbd\xce\xf1\x50\xfc\x98\xab\x7e\xa5\x17\x4a\x48\x0c\x28\x60\xad\x0d\xbe" + - "\xc2\x42\xdc\xa6\x92\x13\x2c\x82\x7c\xff\x5e\x4b\x11\xeb\xb1\x65\xcb\x11\xeb\xaa\xa4\xd3\xe9\x36\xeb\x56\x0f\xde" + - "\x17\x3a\x87\x57\x94\x82\x8b\x3e\xb0\xe3\x3b\x35\xeb\x8b\x79\x59\x2c\xd4\xd3\xc3\x2f\x29\xc4\x9b\x94\xf3\x5c\x88" + - "\x3b\x28\xf3\x4d\xf7\xf7\x5a\xc0\x7a\x1f\x56\x41\xde\x52\xcb\xa5\xcb\x52\x9b\x80\x7b\xf5\xd3\xae\x17\xe9\x06\xee" + - "\x67\x37\x2c\xa4\x6d\xa7\x74\x42\x4e\xa5\xc0\xa9\x84\x79\x01\x39\xc7\x91\xbb\x83\x31\x72\xda\x55\xd6\xef\x36\x16" + - "\xf4\x8b\x9a\x7c\xd0\xd5\xd3\xaf\x9e\xfc\x65\xf0\xe4\xb1\xe8\xdb\x4c\x48\x5f\x0f\x0e\x06\x4f\x86\xb4\x5a\xf1\xf8" + - "\x2b\xa0\x89\x37\x58\x7b\x41\xd8\x67\x7f\xe9\x62\x47\x2f\x55\x45\xf2\x05\x25\x09\x9a\x16\x39\x7a\x3c\xe8\xfc\xd2" + - "\x65\x36\x14\x8f\x50\x82\x43\x8f\xc4\x47\xf1\x06\xb9\xaf\xc7\x00\x44\x55\x56\x81\xf7\x6e\xaa\xaf\x6c\x72\x61\xaa" + - "\x1b\x13\x24\xc8\x3a\xec\x61\x86\x21\xfa\x65\xc4\x97\x22\xa1\xa1\x74\x7e\xd9\xf5\x88\x04\x3d\x0c\x08\xda\xca\x82" + - "\xc0\xe6\x29\x48\x7c\xb6\x32\x0a\x5e\x67\x2e\x3c\xe9\xa4\xfa\x0a\x13\x06\xee\x61\xca\x88\xdb\x26\xc8\x28\xe1\x0a" + - "\xf1\x03\x57\x2a\xaf\x7c\xaa\x95\xa1\x4b\x3e\xd5\x41\x47\xb7\x65\x41\x1a\x8c\x0e\x36\xe7\x34\x4d\x0b\x93\xe6\x83" + - "\x85\x9e\x96\x85\x29\x66\x15\xd6\x03\x57\x79\x7f\x65\x86\x99\x9e\x94\xb2\x5c\x0f\x17\xe6\xab\x27\x5f\x7f\xf9\xf8" + - "\xdb\xff\xf5\xf8\x9b\xff\x3c\x1d\x7c\xf3\xd5\xff\x7a\xfc\xed\x40\x9a\xe5\xcd\xfd\x7b\x44\xe8\xda\x20\xc5\x80\x4a" + - "\xf5\x15\x25\xd9\x44\xc6\x6b\x2c\x3a\x4f\xa5\x98\x97\x6a\x36\x7e\xf8\xe0\xe1\xb3\xa7\x43\xf9\xac\x73\x14\x81\x27" + - "\x48\x83\x54\xcb\xec\x02\x5f\xf1\x59\xe8\x3c\xe8\x08\x84\x04\x0f\x22\xd3\x94\xca\x02\x27\x02\x13\xc0\x6c\xa0\xed" + - "\x66\xae\x80\x63\xd8\x5c\xeb\xb4\x9a\x77\xea\xe5\xc9\x7a\x5c\xd1\x4b\x9b\xff\x7a\xfd\x43\xe4\x9a\xb0\x1b\x3d\x8a" + - "\xd2\xe5\x44\x13\xe2\x0e\xf2\x2d\xe9\x73\x30\x11\x0d\xdb\x8e\x1e\x87\x26\xcf\x30\x07\x41\x64\x2c\xc1\x27\x3f\x1b" + - "\x77\x62\xfe\x93\xb2\x67\xe6\xa4\x2e\x44\x9d\x53\x04\x10\x64\xa1\x3a\x5d\xbb\x09\x16\x8b\x83\x34\x54\x9b\xcd\x67" + - "\xee\x0d\x3a\x5a\x0f\x69\x4f\x6a\x9b\x61\xa2\xb5\xf3\xe0\x3d\x57\x43\xed\x13\x76\xd0\x7e\x64\x8b\xbb\x76\xb6\x6d" + - "\xa1\xed\xfb\x33\x77\xec\x13\xea\xf4\xd9\xa4\x46\xad\x59\xf4\x02\xa8\x7f\xce\x6e\x85\x6b\xc4\x8b\xa4\x2a\xc4\x0c" + - "\x19\xd8\x09\x65\x0a\x34\xe2\x7a\xae\xf2\xa8\x9d\xc8\x30\x6d\xe0\x47\x4f\x4f\x00\xd5\x78\xef\x5d\x82\x40\x97\xe9" + - "\x68\x0b\x30\xed\x1c\x3e\x09\x9a\x20\x3c\x5f\xc9\xec\xe8\x13\xce\xc2\x19\xa5\xa4\xba\x70\x19\xe3\xc4\x71\xdb\x51" + - "\xb0\x5e\x44\xc9\x95\xcc\xda\x12\x36\x01\xc0\x12\xae\x7f\x87\xb7\xf4\x95\xcc\x06\xe8\x3b\x83\x9c\x84\xf5\x57\x82" + - "\xa7\x94\x78\x95\x3b\x74\xa5\x56\xe3\x4d\x8a\xd2\x0f\x23\x99\xbc\xed\x26\x9c\xfa\x92\xa5\x6e\xf8\x3f\xaa\x34\x3f" + - "\x60\xae\xda\xb5\xe6\xc7\xaa\xbd\xe2\x79\xdc\xe0\xac\x33\xc2\x6c\x2b\xc1\xa3\x20\xcd\x07\x3f\x5d\x59\x23\x73\x43" + - "\xf3\xec\xdb\xb0\x64\xc5\x2d\x38\x05\xb1\x7f\x8d\x1b\xf0\xb2\x98\xfa\x26\xf8\xc4\x37\xb0\x19\x93\x43\x0d\x2d\x3d" + - "\x71\xcb\xc5\xf2\x83\xa1\x54\x54\x9b\x37\xa9\x07\xc2\x06\x47\xee\x33\x03\xf7\xa6\x7a\x27\x2f\x41\xf4\x1d\xfe\xfa" + - "\x34\x39\xbf\xde\xef\x9e\x9b\x47\xe7\xc3\xe3\x67\xc9\xf1\xe8\xe9\xf9\xf0\xfc\xf0\xd9\xa6\xfb\xc5\xb0\x1b\x0f\xa7" + - "\xcd\xa9\xad\xff\x36\xfc\x75\x70\xf6\xeb\xe8\xc1\xf9\xd9\xf9\xa0\x77\xf1\xe8\x8b\xa1\xe3\x17\xe0\x3d\x1a\x81\x7c" + - "\x32\xe2\xa9\xcc\x1c\xa2\x4a\x60\x9f\x50\x74\xe1\xa8\x10\xe0\x65\xd1\x2a\xe7\x98\xd7\x6b\x9d\xe7\xc5\xb5\xd3\x0a" + - "\x9a\x9e\xf8\x7d\x25\x33\xcc\xb8\xdb\x43\x7e\x36\x08\x2f\x72\x00\xf5\x4a\x70\xd7\xd8\x9b\x5f\x19\x83\xb8\xf1\x65" + - "\xa9\x96\x61\xef\xf5\x33\xa4\xdd\xd1\x18\x3e\x12\xef\xcd\x5c\xe7\x95\xe8\xff\x72\x70\xf8\x8d\xe0\x52\xd8\xae\x4e" + - "\x9c\x1b\x8a\x2d\x48\xfc\xbd\xf3\x33\xdc\xc5\x2a\xa2\xec\xf5\xc8\xfa\xa1\x5b\xaf\xc8\xf6\x9f\x3b\xe5\xc6\x3f\x31" + - "\xe1\xa6\xeb\xa1\x73\xbd\x0c\x41\xf1\x91\xb9\xb0\xca\xcc\x7f\x11\x15\xed\x0c\x09\xb3\xc3\x02\x66\xc8\x5b\xe0\x5d" + - "\x9b\xbf\x0d\x83\x0b\xb6\xd1\x2f\x06\x37\x34\x54\x15\x04\x53\xf8\x84\x0e\xc2\x64\x33\xff\x0c\xd4\x1c\xd0\x62\xb7" + - "\xd1\xda\x48\xa2\xcb\xa5\x56\x42\x30\x7a\x0a\x15\x4d\x33\x52\x70\xc2\x51\xec\xd9\x68\x23\x8f\xbb\xd6\x27\xc8\xb9" + - "\x31\x70\x32\x39\xbb\x1b\xbe\xe5\x0e\x13\xae\xce\x28\x2f\x2a\x2c\xe3\x8a\x0f\xb0\xca\x6b\x63\xe5\xa1\xb3\x8a\xaf" + - "\x51\xd5\x16\x07\x8e\x34\x38\xa0\x98\x56\x11\xe0\xa5\x5f\xc2\x65\x1c\xac\x8b\xc1\x5e\x38\xdf\x0b\x31\x12\x14\x06" + - "\xd4\xfa\xb9\x5d\x70\x63\x0b\x3e\x8a\xb5\x2d\x93\x64\x54\xf5\xf9\x32\xec\x80\xf9\x40\xdd\x54\x2a\x4f\x31\x07\x0a" + - "\x0c\x3f\x6a\x51\x29\x87\xd7\x1f\x19\xa6\xac\x63\xf7\x5c\x47\x6e\xdd\x30\x83\xc0\x79\xca\xa8\x6c\xc6\xad\x8e\x82" + - "\x68\x96\xba\x4a\x79\xb7\xe5\x78\xb8\x70\x5e\x18\x61\xb9\x32\xf3\xd3\x4a\x4e\x3f\x58\x22\x15\x4e\xcd\x62\x74\x23" + - "\xb9\xe0\x8e\xcd\x92\x85\x59\xd4\xda\x3c\x6d\xad\x22\xa2\x76\x53\x60\xef\x33\x4c\x94\xd5\x23\x8f\xa9\xc8\xee\xdd" + - "\x12\x99\x1d\x7b\x33\xd4\x92\x0c\x7d\x7c\x1a\xc1\xee\x87\x02\x7f\x30\x0b\x80\x6b\x5d\x09\xf8\x86\xeb\x5b\x73\x76" + - "\xd5\x2f\x5a\x4c\x00\xa2\x0b\xaf\x8b\x85\x32\xf0\xda\x3d\xac\x8d\x44\xae\x89\xb4\x75\x75\x78\xc3\x3e\x63\x28\xb8" + - "\x88\xae\xec\x84\x66\x24\x46\xc1\xcc\x4a\x55\x85\xa6\x22\xec\xc9\xfd\x3e\xae\xfd\xde\xe7\x7a\xaf\xee\xc1\x28\xb2" + - "\x2d\x79\xc5\x02\x91\x87\x5e\x50\x6a\x7b\x3b\x7e\x6e\xc1\x19\xbe\x04\xe1\x71\x2f\x8a\xc6\x3c\xbb\xe8\x51\x38\x39" + - "\xef\x18\x0e\x93\x17\xd5\x9f\x3d\x06\xa0\x4a\x38\x84\x36\x9f\x30\xc2\xee\x2e\xf7\x49\x7a\x56\xe8\xd8\xab\x56\x4f" + - "\xbc\x2b\x5f\xe8\x34\x3d\x74\x6e\xcf\x01\x2a\xa0\x45\x96\xaa\x38\x99\xb9\x5e\x82\xc0\x84\x96\x0a\x1c\x86\xf4\xc7" + - "\xb6\x5b\x53\x88\x2f\x92\xce\x72\x44\x79\x3c\xbb\x03\x6d\xe0\x17\xa6\xe2\xec\x8a\x6b\xcc\x14\x12\x60\x3f\xb2\x1e" + - "\x12\xa4\x72\x2e\x99\x70\x5d\x88\xce\x92\xaa\x21\xec\xb4\xda\x8d\x82\xc2\xd5\x11\xbf\xd5\xa2\x83\xa6\x13\xd5\x3c" + - "\xee\x96\xc1\xad\xc1\x18\x1f\xe2\x5e\xc2\x5f\xdd\x40\x6d\x7d\xeb\x34\x02\x0d\x25\x0c\xe3\xb4\x28\x26\xef\xd5\xb4" + - "\x72\x4d\x9e\x8b\xa9\xca\xab\x52\x66\xa2\x54\x33\x55\xaa\xa0\xce\x3e\x9a\x77\x78\x52\x56\x1b\xd1\x65\x8e\xae\x28" + - "\x2a\x7a\xd3\xb3\x3a\xc6\xe7\xb6\xde\xea\xb5\x5c\x7b\xe3\x38\x40\x0d\x05\x4a\x82\x86\xb1\xaa\x44\x57\xc6\xeb\x81" + - "\x4e\x45\x71\xa5\x4a\xf1\xb4\x92\x97\xcf\xbc\x52\xf1\xbf\x4e\x4f\xc5\x95\x96\x22\x4a\x51\x2f\x92\x07\xdf\x7e\xf5" + - "\xf8\xb0\xcb\x3a\x97\xaa\xd4\xd3\x8a\xba\x2f\xd5\xb4\xb8\xcc\x11\x33\x44\xf2\xe0\xf0\xf0\xf1\xb7\x07\x23\xf2\x50" + - "\xa5\x0a\xa3\xb8\x67\x4f\x51\xf9\xf2\xfb\x4a\x4f\x3f\xbc\xa2\xdb\x71\xf8\x6b\x72\x3c\x3a\x37\x8f\x92\xa7\x67\xe7" + - "\xd7\xe7\xbf\x5c\xec\x3f\xeb\x9e\xfd\xfa\xec\xe2\xd1\xe6\x41\x72\x76\x7e\xdd\xbf\x78\xd4\xed\x7e\x31\xa4\x25\xea" + - "\x5c\x07\xac\xf2\x2c\x1f\xf0\x83\x3b\x8c\x92\xe1\x55\x82\x17\x1d\xdd\xe8\xde\x2a\xfd\x1f\xcf\xdf\xbc\xfc\xe1\xd5" + - "\x08\xf0\xb0\xd3\xed\x89\x2f\x12\x90\x64\xf0\x0f\x57\xb8\x1c\x7f\xd1\xb9\xf5\x82\xd8\xb6\x42\x2c\x7c\xf9\x84\x84" + - "\x93\x44\xbf\xfa\x1e\xb4\xdf\x4d\x6d\xac\x9b\x75\xdf\xa2\x26\xb6\x2a\x63\xe7\x69\x64\x0d\xf5\x6e\x17\x83\x30\xf9" + - "\x2c\x35\x7d\x16\x35\x75\x26\xbe\x31\xd6\x7e\xf6\xf6\x8a\xe7\xa4\xa5\xa4\xd2\x6b\x34\x51\xfb\x43\x96\x64\x86\x54" + - "\x39\x57\x70\x7b\xfa\x0c\xbd\x52\x71\x51\x68\x9f\xfc\xa0\x97\x7c\xce\x2f\xd5\x0d\xa1\x1e\x75\x6c\x4d\xb4\x67\x1c" + - "\xae\xe1\xf7\x08\xbd\x79\x9d\x05\x27\xf6\x72\xb0\x5f\x79\x5c\xb1\xf9\xdb\x62\xaf\x8d\xd0\x37\x88\x2a\x0f\xcd\xab" + - "\x45\x26\x8a\x12\xb3\xbb\x0b\xb3\x22\xd7\x59\x67\x36\x35\xc2\x4b\xb3\x70\x32\x1e\xb0\xbf\x6a\x90\x40\x70\x6f\x8f" + - "\xbd\xf2\xce\x0e\xd1\x25\xcd\xda\xff\x22\x43\x47\x84\x3a\x30\x64\x57\xf4\x9f\x89\x2f\x12\xf4\x64\xec\x06\x06\x1c" + - "\xd7\x93\xbf\xd2\x1b\xf6\x3b\x4c\x71\x2e\xf3\x29\xa0\x02\xd3\x88\x63\xfb\x0e\xf6\x7b\x14\x38\x1d\x7b\x3b\x8b\x99" + - "\x96\x7a\x59\x91\x7f\xb5\x25\x8f\x98\xa7\x06\x15\x9a\x55\x60\x90\xc1\x24\xed\x48\xb1\xb3\xb5\xc8\xd8\x92\x4c\x89" + - "\xd7\x26\xe4\xfa\x79\x8d\x46\x03\xcc\xb5\x86\x5b\xea\xcc\x0f\x58\x2a\x87\xbb\xe2\x83\xb7\x50\xe5\xa5\x4a\x04\xdd" + - "\x3d\xfc\xcc\x7d\xe9\xa2\x40\xec\xba\x5d\xcd\x28\xbb\xd6\x36\xc3\xb0\x5b\xed\xa0\xb8\xce\x55\x69\x55\xb1\x61\xbc" + - "\xd5\xc8\xa9\x63\x5d\x8f\xb0\x6a\xfe\x3b\xa8\x9e\xd5\xb2\x37\x3d\x74\x6b\x36\xdd\x90\x09\xf3\x92\x34\xdf\x06\xc1" + - "\x46\xed\xed\x79\xe9\xf4\x6d\x26\x75\xfe\x23\x52\xec\x80\xa5\x09\x19\x34\x62\xb8\x08\x77\x74\x5e\xa7\x3c\x76\x46" + - "\x6f\xbd\x63\x75\x31\x73\x8d\xa8\x3e\x63\x96\xa9\x54\x48\x23\x16\xaa\x9a\x17\x29\x1a\x07\xac\x0f\xee\xfd\xc8\x5f" + - "\xb2\x45\x66\x86\x6d\x38\xe3\xd1\x2f\x6a\x6e\xcb\x3b\xd1\x4b\x37\xfd\xa0\x79\x2d\x1f\xd1\x60\x30\x40\xaf\x05\x97" + - "\x1a\x00\xf3\x7a\x99\x20\x95\xbe\x6b\xdd\xc8\x9f\x84\x83\xa1\xb6\x33\xb1\xa4\xb6\x75\xbc\x9d\xd8\x2d\xb3\xc5\x3f" + - "\x33\x26\xa5\x2d\xe7\xed\x81\x4e\x79\x2f\x6b\xb3\x60\xc1\xcc\x29\xee\x2f\x55\xc5\x5a\xfb\xef\xd6\x27\xa9\xdd\xe3" + - "\xc7\x17\x35\x6c\xa1\x34\x6b\x81\xed\x09\x2e\x4f\x9c\x32\x6a\x0a\xbf\xcb\xe4\xf4\xc3\x44\x95\xe5\x5a\x7c\x39\xf8" + - "\xda\xda\x14\xfc\xe7\x64\xd8\x40\x4a\xc9\x9e\xfa\x59\x91\x5f\x62\x9e\x0c\xb2\xb8\x58\x74\x7e\xf0\xf5\xb7\x5f\x3f" + - "\x09\x91\x10\xe7\x6b\xe5\xbc\xb6\xfa\x11\x7c\x7e\x01\xfb\xc2\xa2\x4e\x3e\x8e\x00\x23\xe4\xe1\x4d\x8d\xb7\x08\xb6" + - "\xc4\x0a\x95\x36\xc1\xb5\xc5\x8b\x46\x45\x33\xbf\x03\xf8\x9d\x27\x53\x76\x01\x47\xe1\xeb\x2d\x6e\x5a\xcd\x0d\xdc" + - "\x89\xa9\xb4\xdf\x46\x12\x38\xbf\xc0\x5a\xbf\xdd\xfb\x75\xbf\x07\xe7\x76\xe1\x89\xc0\xe0\xfd\xef\xb8\xc8\xba\x23" + - "\x86\x3f\x98\x9b\x4d\xc0\x18\xb5\x48\x1e\x47\xdb\xe7\x61\xa9\xbc\x7d\x9f\x5c\xcf\x35\x9c\x68\x43\x89\x2c\xd5\xef" + - "\x2b\x7d\x25\x33\x54\x8f\x15\xf0\x95\x8b\xe6\xc4\x31\xa0\x8f\x6e\xcb\x3d\x16\xf2\xef\xd3\x82\x2b\x59\x80\x90\xbe" + - "\x5d\x3a\x8a\xee\xb5\x68\xa2\x2f\x7f\x7c\xcd\xe8\x8c\x43\x85\xd0\x72\x97\x7b\x5d\x1f\x55\xdf\x4b\xbf\xf5\xf1\xae" + - "\xb5\xa2\x4a\xf3\x24\x46\xf3\xb1\x8c\x57\x97\xdf\x9c\x5a\x8f\x25\x20\x89\x0e\xeb\x4b\x25\xd3\x75\x7d\xbe\x2d\x94" + - "\x2c\x60\xa9\xea\x4c\x15\x71\x49\x7e\x67\x07\xd8\x27\x49\xf2\x8e\x4f\xeb\x58\x2e\xbe\xde\xae\x8d\x9f\x1f\x0e\xc5" + - "\x2b\x36\xc3\x87\x95\xd6\xf4\x8c\xa6\xdb\x7a\x01\x1a\xa7\x61\xb1\xf8\x15\x72\x7a\xf1\x36\x44\xda\x06\x37\xc5\x78" + - "\x53\x5a\xbd\x73\x9a\x9b\xe2\xf7\xce\xb5\x0a\x63\x90\x78\xf8\x58\x83\x06\xcc\x0f\xfa\xfe\x85\x3c\x31\xe9\x16\x50" + - "\x48\xb1\x3a\xdf\xbf\x82\xf0\x46\x99\x5c\x75\x15\xba\x4a\x3a\x82\xe2\x73\x69\xa3\xd3\x8a\xac\x90\xae\x01\xbb\x52" + - "\x69\xf6\xdc\x84\x6f\xa3\x9c\xdb\x8e\x43\x6f\x31\x45\x37\x64\x9d\xfb\xf7\x82\x13\x3b\x76\x1a\x17\x87\x3e\x56\x98" + - "\x42\xa1\x87\x68\xa4\x59\x96\xea\xca\xca\x0e\xfc\x68\x03\xcf\x92\xe3\xd1\xcf\x79\xa5\xb3\xcd\xf3\x2c\xeb\x76\x41" + - "\x6c\x80\x8d\xb6\xd7\xea\xe5\x4a\x96\x32\xaf\x38\xdb\xc5\xb2\x2c\xd2\xd5\x14\xc4\x32\x36\x0b\xc0\x5d\x87\xf4\x1e" + - "\xd9\x5d\x74\xca\x28\x8b\x45\xf4\xfe\xfe\xbd\x1d\xdf\x89\x0b\x59\xc3\x2d\xb5\xd5\x64\x38\x31\xfa\x7d\xeb\x2a\x91" + - "\x57\x26\x78\x94\x63\x85\x1c\xf7\x13\xe6\x4c\x3f\xdd\xa6\x38\x43\x80\x53\x93\xa5\xba\xac\x97\x12\xe9\xc1\x05\xd0" + - "\x13\x2b\x58\x6b\x43\xc4\x89\x02\x0a\xab\x72\x95\x63\x8d\xe1\x31\xb7\x8e\xf0\x91\x0f\xf5\x9d\xa9\x29\x1b\x6a\xc8" + - "\x5d\xf4\xe2\x8b\x84\x93\x36\x3d\x65\x1c\xcd\xe5\xe6\xe1\x78\x2b\xab\x4c\x04\xa9\xdf\xad\xc4\x5f\x7c\x4d\xa7\x9a" + - "\x9d\xed\x01\x3e\xce\xdf\x26\x4e\x2f\x98\x1e\xf9\x6a\xb4\xec\x8a\x12\x42\x32\xef\x45\xfa\xcc\x3a\x00\x8f\x42\x7d" + - "\xda\x91\xc8\x8f\x44\x2e\xc6\x22\x6f\x2d\xfd\x43\xaa\xdf\x3a\x08\xf6\xf6\x44\x8e\xe0\x8a\xc3\xd7\xe2\x75\xe4\x6d" + - "\x4e\xdb\x2d\xcb\x70\x7a\x85\x56\x5d\xea\x5c\x46\x4a\x1e\xaa\x4d\x17\xe5\x30\xc3\x27\x26\x38\x61\xf4\xc4\x92\x05" + - "\xd6\xb3\xc2\x0d\x41\x2d\xe3\xc8\xc9\xf0\x1e\xdb\xa6\x01\xbd\xab\x06\x48\x5b\x84\x5f\x43\x0f\x4a\x22\x05\x8f\x8f" + - "\x0e\xf4\xcd\x7c\x8c\x81\x1e\x34\xf4\xb5\xea\x06\x5b\xcd\xf9\x81\xdb\x94\x5e\xa6\x55\x33\x30\x5d\x71\x58\xaf\xcf" + - "\x41\x48\x90\xa8\xeb\x9b\x9b\xe7\x6b\x59\xa0\xbf\xf0\x1d\xda\x25\x43\x9e\x4c\x35\x49\xdf\xc4\x6a\xe8\x2d\xfa\xa7" + - "\x60\xba\xd0\x45\x78\x1b\xb8\x9b\xec\xa0\x86\xa7\x2d\xe0\xa6\x57\xd3\x95\xd5\x93\x9e\xe9\x8b\x23\xfc\x09\xb2\xd8" + - "\x8a\xee\x28\x7b\xa5\x70\xb3\xe9\xaa\x6c\x65\x48\xbd\x4f\x13\x4a\xfc\x8e\x4a\xcf\x4a\x79\x19\xa4\x41\x25\xcf\xd5" + - "\x55\x19\x16\xc2\x3a\xc4\x03\x91\x00\xc4\xac\x1d\x79\x59\x18\x2a\xf4\x98\x4c\x57\x25\x27\xf1\x89\xf2\x94\x51\x02" + - "\xff\x25\x16\xb4\x2f\xf2\x7e\xe8\xb7\x4e\xd6\x55\x2b\x52\x87\x43\xd9\xc3\x67\xb9\xdd\xbb\x8c\x25\xb0\xf5\x1e\xdc" + - "\x35\x67\xc6\xf8\xa0\x02\x60\x9c\x00\xb3\xdd\xe7\xaf\x7e\x5a\x02\xad\xed\xa2\x1e\x42\xd5\xa2\xe8\xb6\x28\xd6\x15" + - "\x23\xff\x77\x80\xdc\xe4\x51\xa5\xca\x85\xce\xe9\xe6\xb6\xea\x58\x10\x2b\x83\x52\xb7\xd7\xba\x9a\xeb\x9c\x3e\xa8" + - "\xe6\x3e\xf5\x53\x2d\x02\x00\xd5\x6a\xa9\xba\x69\x2f\x56\xc5\x7c\xdd\x9b\xc2\x15\x54\xe9\x89\x30\x57\x0b\x7a\xc3" + - "\x20\x96\x38\x0e\x68\xb7\xdd\xb0\x49\x92\xe8\x81\xb8\x40\xd7\x3f\xfb\x23\x46\xb1\x63\x4b\x5e\x4a\x53\x25\xdd\x01" + - "\x5c\x8e\xcf\xb3\x2c\x71\x55\x8a\x47\x2e\xf7\x8b\x9b\x99\x9b\x45\x58\xbd\x37\xd4\xac\x39\x83\xea\x36\x8b\x4f\x6c" + - "\x3c\x8c\xaf\xa6\x5e\x30\xed\xba\x39\xe4\x87\x62\x6a\x43\x23\xc3\x1d\x20\x0f\x3b\xa3\x4b\x1f\x3d\x1a\x20\x44\x3c" + - "\x58\x53\xc9\xae\x81\x5b\x9e\x2a\x7d\xa5\x4c\x5d\x5d\xdc\xe3\x0c\x6a\xa5\x71\x09\x81\x80\x49\x5d\x19\x4e\xcb\x85" + - "\x57\x30\xcb\x47\xc7\x7c\x83\x1f\xa0\xd1\x0f\xfe\x86\x26\x21\x16\xc9\xb4\xd5\xf2\xd6\xa0\x8e\xed\x88\x7c\x3f\xb0" + - "\x22\x31\xde\x86\xf4\x2b\xd4\x10\x81\x08\x9e\x74\x7b\x0d\x43\x5a\x38\x12\xc9\x4d\xdd\x96\x39\x7e\x27\xa7\x1f\x3e" + - "\xd5\x3a\x22\xd3\x50\x8a\x72\xc9\x02\x3c\x1f\x0d\xf8\x44\x8a\x1c\x31\x12\xb5\x27\xf6\x4e\x73\x31\x21\x7e\x32\xee" + - "\xde\xf5\x29\x57\xe9\xf2\x47\x8a\x80\x9c\x18\x4f\xc7\xb1\x51\x8e\x84\x9e\xa5\xba\x24\x16\x2a\x22\x50\xbb\x96\x41" + - "\x0a\x63\x9a\x56\x65\xcd\x26\xad\xe4\x94\x6a\x45\xd0\x21\xd9\x56\x4e\x0e\x2e\x30\x6a\xd1\xac\x7c\x1b\xda\xb6\xb8" + - "\xcd\xde\x1e\xff\x55\x9b\x0e\x90\x22\x6e\x32\xb2\x0e\x4c\x64\x3e\x62\x06\x7b\xdb\xf8\xb1\xe0\x91\x6a\x67\x80\x0e" + - "\x93\xff\x07\xd6\x28\xee\x0e\xf9\xf4\x26\x5f\xab\x6b\x5c\xed\x27\xf5\xee\xbe\xf1\x56\x35\xe4\xb3\xef\x9c\xb0\xdb" + - "\x45\xee\x2f\x60\xeb\xa2\xe9\x22\x8b\xfe\x59\x3d\xd9\xd4\xe0\x2d\xbd\xc1\x20\xcf\xb3\xc6\xba\x3f\xbe\xda\x3b\x66" + - "\xf7\x4f\xf5\xf7\x91\x39\xfe\xcb\xbb\x13\xce\xb7\xb9\x3d\x30\xfa\xbf\x8e\x00\xb5\x25\x34\x87\xe1\x8d\xf9\x44\xd4" + - "\x75\xdb\xd8\xac\xe7\xba\xd9\x88\x3f\x6e\x51\x55\x63\x5d\x29\x7b\x81\xfc\x81\x63\x79\xf9\xef\xb3\xc6\x52\x71\xa9" + - "\xd1\xb0\x43\x27\x3d\xde\xd9\x21\x76\xc0\x6d\x43\xbd\x79\x4c\x8a\xcf\x2e\x7a\xdc\x12\x46\x79\x83\x0a\x4b\x47\xde" + - "\x42\x07\x0f\xf2\x42\x9c\xe5\x3c\x8a\x93\x35\xbc\x7f\x61\xd0\x18\xe1\xdd\x6b\xf5\xdb\xf0\x9c\xb2\xd3\x48\x2c\x2d" + - "\x83\x3f\xcb\xc3\xad\x72\x37\x36\xba\x2b\x72\x74\x52\xff\x2b\x76\xd8\xe9\x20\x9a\xf8\x5b\x3b\xd0\x99\x60\x17\x5b" + - "\x35\x30\xc8\x67\x7c\x8a\x75\xad\x31\x53\xeb\xb2\x54\x0f\x7f\x4d\x5b\xf4\x3d\xa1\xd6\xec\x59\x20\xf4\x62\x76\x85" + - "\xff\x8f\xbc\x7f\xef\x6e\xdb\xb8\xf6\xc7\xe1\xbf\x95\xb5\xfc\x1e\x46\x70\x8f\x4c\x5a\x14\x29\xd9\xce\x8d\xb2\xa2" + - "\xc7\xb1\x9d\xc6\xdf\xc6\x76\x4e\xe4\x36\xed\x23\xab\xee\x88\x18\x92\x88\x40\x80\x05\x40\x51\x4a\xe4\xf7\xfe\x5b" + - "\xb3\x2f\x33\x7b\x06\xa0\xe4\xb4\x3d\x67\xfd\x2e\xab\xab\x31\x05\x0c\xe6\x3e\x7b\xf6\xf5\xb3\x17\xe5\xa5\xf4\xf9" + - "\xf7\x82\xe2\x76\xac\x44\x70\xb3\xeb\xb1\x22\x36\x70\x85\x2d\xa3\xd7\x4f\xe6\xd2\x54\xb5\x51\x25\x04\x29\x00\xd8" + - "\x18\x12\xd8\x87\x60\x97\xb3\x87\x64\x2f\x35\x55\x76\x09\x86\x7a\xd1\x09\xa9\x4b\x21\x91\x05\xfd\x3e\xdb\x82\x6a" + - "\x85\x6d\xf4\x36\x0b\xaa\x1b\x38\x5d\xaf\x6d\x82\x3b\x14\x1d\x1f\xcb\x66\x3d\xcf\x40\x23\xd1\x1b\xbd\x3f\xd9\x1d" + - "\xcd\xbc\xab\x22\x99\x94\x01\x30\x4c\xd1\x5d\xcd\x49\x98\xa7\x65\xb5\x80\x00\xf0\xc9\xdc\x60\x55\xf4\x86\x33\x56" + - "\xfc\xe6\xb4\x5a\xcf\xcb\xe2\xd2\x54\x0d\xd5\xb5\x87\x5f\x36\x26\x15\x09\x9d\x5d\xfd\xf2\x6d\x61\xd9\xae\x22\x55" + - "\x88\xf2\x9a\x15\xdc\x98\xc7\xbe\x87\x40\x80\xb7\x58\x4b\xcf\x55\xe7\x3d\xc3\x90\x57\x53\x47\x41\xdf\x4e\x5d\xc1" + - "\x33\xee\xe6\x96\xbc\xe3\xf9\x35\x0a\x27\x3d\x31\x45\x7d\xe7\x36\xe2\xce\xdc\x87\x81\x9a\xe6\xda\x69\x1e\xb0\xc1" + - "\x53\x7c\x66\xab\x67\xf9\xf8\xa3\x74\x03\xc7\x52\xce\x75\x1a\xc3\xa5\x9f\xc3\x60\x94\x06\x03\x14\x80\x15\xe7\x59" + - "\xdd\xa8\x15\x61\xf1\x1a\xe5\x22\x26\x14\x44\x13\x5b\xa9\xa3\x1e\xdb\x4f\xed\xff\xb7\xa8\xd3\x63\x2b\x74\xe0\x6f" + - "\x9d\x63\x0d\xf6\xc8\x2d\xf5\xc4\xec\xd5\xc6\x7e\x28\x27\x1e\x63\xb0\xb3\x3c\x57\x93\xb9\x2e\x66\x46\xcd\xcb\x35" + - "\xd4\x66\x79\x34\x13\xf5\xe4\xdc\xcc\xb5\xe5\x84\xc1\xed\x63\x61\x97\xa4\xa9\x74\xca\x80\x7d\x58\xa5\x33\x78\x60" + - "\xaf\xd4\xb7\xd7\x2e\xc0\x25\x1e\x18\x34\xab\x27\x8d\xca\xb3\x0b\x03\xa2\x12\xc4\x66\x84\x85\xec\xf2\x23\xc6\x00" + - "\x54\x97\x4c\x2d\x27\x9f\x78\x38\x8d\x26\x5b\x98\x7a\xe8\x9a\xfb\x91\xa1\x72\x78\x36\xfc\xf4\x14\x13\x33\xde\xda" + - "\xda\x82\x56\x11\xce\x53\xb5\x87\x68\x9b\x82\x18\xe1\x73\xe0\xed\x61\x13\x4e\x8c\xea\x61\x17\xd5\x0b\x33\x35\x55" + - "\x65\xd2\xbe\xab\x76\x61\x16\x65\x75\xed\x2a\x46\x9c\x5e\x40\x05\x2a\xa7\x3e\x27\x09\x81\x98\x68\xb0\xd6\xdb\xc9" + - "\xc6\xd4\x41\xd7\xbe\x75\x9d\xa6\x18\x95\x0e\xd2\xac\x9e\x02\xca\xfb\xdc\x60\xaf\xe6\xba\x56\xe7\xc6\x14\xd4\x25" + - "\x88\xf4\x54\x7a\xad\xaf\xc9\xf1\xc6\x96\xb3\x14\xad\x51\x09\xf4\x27\xfb\xd5\xa4\x89\xab\x8c\xb3\x09\x6f\x1c\x03" + - "\x12\xb5\x78\x72\xc4\x72\xc9\x59\x81\x8e\xd2\xac\x14\xa5\x27\xa7\x6c\x5c\xb3\x1d\xf6\x55\xd7\x4d\xb9\x7c\x5b\x7c" + - "\xa7\xf3\xda\x8c\xb7\x20\xc2\xa6\x5a\x2d\x71\x8d\xc1\x9d\x01\xf4\xbb\xa2\x25\x8e\x0f\x22\x57\x1e\xac\x65\xe4\x58" + - "\xf0\xe7\x54\xae\x0e\xae\xbd\xe0\xd8\x73\x78\x1f\x52\x1c\x47\xac\xaa\x72\xd1\x26\x3f\x5d\x44\x27\x9b\x02\xb4\x0e" + - "\x87\xf8\xf5\xd6\x86\xfc\x76\x98\xfc\xa0\xcc\x67\x05\x12\xae\xdc\x45\xc9\xbb\x07\x2d\x55\x52\x6f\x23\x01\xba\xb9" + - "\xd9\x4c\xc5\xfa\x81\x77\x28\x69\x17\xd5\x6f\x1f\x07\xbe\x0c\x5e\xd8\x96\xd4\x59\x19\x58\xd7\x0d\xec\x11\xdc\x70" + - "\xaa\x37\x25\x54\xfc\x69\x59\xcd\x4c\x83\xb1\x75\x76\x81\x08\x93\x16\xf6\xee\x80\x04\xe8\xef\x2c\xc5\x6a\x4a\x75" + - "\x51\x94\x6b\x3b\x0b\x78\x46\x75\xad\x74\x8e\x26\x18\xd8\x7c\xa0\xd9\xb2\x3f\x6e\xfd\x2c\xab\xad\xfc\x64\xaf\xb3" + - "\x1c\xbe\xa3\x40\x64\xfc\xe5\xbe\x04\xd9\xd9\x2d\x7d\x53\x62\xd7\x7b\x80\x25\x92\x11\x3e\x8a\xdd\x74\xd7\x76\xd3" + - "\x71\x6e\x4a\xf3\x73\xd6\xcc\xfb\xbe\xb6\x93\x46\x57\x0d\x57\xf9\xb2\x48\x59\xe8\xcf\xcb\x72\x89\xdb\x2b\x6e\xff" + - "\x07\xaf\x40\x04\x53\x48\x6a\xae\xc0\x05\x20\xea\xb0\xef\x59\xcf\x45\x6e\x9e\x5f\xab\x0a\xd9\x08\xb7\x4d\x44\x57" + - "\xa0\x2a\xae\xf7\x19\x82\x14\x05\xe4\xc5\xbe\x82\xf9\x71\xfa\x4a\xb8\x60\x89\x5a\xc0\xe8\x6d\x79\x84\x0f\xab\xcc" + - "\xd2\x68\xb1\x64\xb6\x78\x0d\x65\x8f\xd4\x36\xdf\x50\x70\x0e\x3d\x8a\x21\xce\xaa\x27\x6a\x35\x2f\x57\x70\x5e\x20" + - "\x1d\x98\x63\xb7\x60\x13\xf8\x1b\x72\x48\x0f\x76\x76\xa0\x1c\xa9\x8e\x81\xee\x1c\x09\x65\xaf\x18\x31\x44\x43\xbb" + - "\xa5\x00\xe8\x3f\x59\x06\x9f\x1e\x85\x0f\x7f\x60\xc3\xa6\x1d\x5a\x00\x59\x4e\x93\x1f\xb4\x45\x9a\x54\x98\xba\x9d" + - "\x1d\x25\xdb\x7e\xaa\x64\x85\x87\xf2\x5d\x4b\xbf\x6d\xbf\x3f\x0d\xbe\x76\xc8\xb5\x76\xa8\xa0\x9f\x19\xd0\xcf\x03" + - "\x60\xfe\xec\x41\x06\x52\x04\x69\xb4\x68\x82\x04\x4d\x93\x88\x60\x3c\x8f\x98\xa0\x48\x01\x9a\x1f\xdc\x00\xa0\x8e" + - "\x5d\x55\x80\x04\x89\xcb\x8b\x57\xba\x4e\xd3\xdb\x95\x97\x7e\x2e\x44\xd2\x23\x37\x92\x68\x70\xb8\x35\x22\xcf\x66" + - "\x78\x38\x8c\xf2\x6b\xd3\x7a\xf2\x5b\x42\x1c\x68\x63\xb3\x09\xeb\x30\x0d\xce\xd7\xe0\x76\xf1\xe1\xbd\x2e\xbf\x8f" + - "\xda\xe4\xd3\x21\xc5\x60\xf5\xba\x92\x1b\x44\xa7\xc4\xd3\x75\xef\x2f\x41\xde\xe3\x8e\x7f\x7f\x66\x69\x80\x3f\x4f" + - "\xc0\x84\xf8\xfc\xf3\x70\x82\x5d\x2d\xe4\x83\xc1\x67\x2e\x52\xaf\xb5\x77\x45\x88\xc3\x06\x84\x09\x22\xe2\x6b\x4d" + - "\xe6\x58\x22\x0e\x94\x6e\x93\x8a\x5a\xaa\x5b\xd3\xee\x6e\xed\xe3\xad\xad\x9e\xcc\xf2\xd8\x53\xba\x9a\x05\x09\xe2" + - "\x02\x8e\xd3\xbe\x8c\xb8\x4a\x5d\xcd\x02\xe7\x21\x30\x1a\x05\xf6\x5c\xfb\x57\x0f\xcb\x79\x3f\x1e\xa7\x6c\x8d\xa1" + - "\x5a\x02\x47\x24\x14\x7b\x78\x47\x93\x41\x95\x32\xbd\x4c\x87\x73\x5d\x53\xbd\xe1\x57\xb0\xec\xa4\x7d\x8f\x9a\xf5" + - "\xfe\x43\xc1\xc6\xb1\xa5\x76\x76\xec\x3f\x12\x19\x80\x95\x5c\x2d\xd9\xcf\x7b\xd8\xd4\x4b\xcb\xb7\x3b\xd8\x29\x07" + - "\x46\x80\x8b\xd9\x6a\xde\x7b\x2f\xf9\x6d\xdc\xef\x39\x2d\xb9\x80\x1e\x00\x23\x86\x5d\xdb\x82\xec\xce\xf6\x6e\x91" + - "\x8c\x20\xef\x1e\x5f\x9e\x17\x9f\x8e\xe3\xb9\x95\x0a\x8e\xe5\x31\xa3\x17\xe1\x01\xbb\x95\xca\x21\x62\xac\x65\xde" + - "\xe8\x12\xf6\x69\x5a\x8b\xd2\xb5\xd4\xcc\x4d\xe1\x8b\xdb\xfd\x88\x31\xd5\xc0\x3e\x7a\x2e\x90\x07\x7c\xdb\x81\x8d" + - "\x88\x31\x6c\xdb\xc3\x90\x1c\xf0\x37\x9d\x51\x0d\x6d\x1f\x22\x3c\xc3\x42\xb2\x16\x87\x13\xa1\xf0\xe5\x09\xc4\x6b" + - "\xf3\x53\x0f\x61\x7c\x36\x56\xad\xc0\xa3\xf6\x01\x01\x6b\xa7\xa5\xea\x6e\x58\x4e\xff\x4b\x66\x09\x77\x70\xb2\x82" + - "\x7c\x31\x74\x35\x1b\x40\xdb\x03\x2a\xd2\x57\x32\x75\x85\xdc\xf5\x0e\xfe\x02\x2e\x79\x09\x81\x21\x9d\x8a\x69\xe1" + - "\x32\xcc\x49\x1f\x1e\xca\xf6\x2e\xa1\x17\xd8\xf4\xd3\xa3\xe0\x2a\x8b\x4e\x9e\x7c\xe5\x11\x3c\x83\x73\xd7\x59\xd9" + - "\x2b\x1a\x56\xbb\x2e\x78\xb3\xa1\xaa\xb6\x33\x60\x48\xc4\x6f\xdb\x0d\xe8\xbc\x97\x4d\x95\x56\xb3\xec\xd2\x14\x7e" + - "\x57\x40\x36\x19\xb7\x2d\x86\xf7\xbc\x9d\xa5\xf0\x06\x2d\x5b\x0a\xbe\x73\x96\xad\xf5\xdc\xc0\xdd\x89\x98\xa3\x5e" + - "\x22\xf2\x07\x56\x37\x08\x4a\x80\x55\x46\xa6\x77\xa7\x3b\x13\x39\x04\x0b\x6f\xe7\x73\x7b\x61\x5a\x0c\x78\x1b\xa2" + - "\xdd\x53\x6d\x6f\xf7\x1c\xcf\x21\x4e\xb0\x53\xfa\xb4\x0e\x40\x9e\x8b\x4e\xb5\xcf\x00\xa0\xaf\x74\x1d\x81\xf8\x36" + - "\x8d\xa8\x07\x63\x94\xde\x32\xe9\xdf\xf3\x45\x05\x55\xa5\xa5\x9d\x29\x80\x02\xd6\xc5\xb5\x95\xd4\xa1\x1c\x5d\xc8" + - "\xb7\xf4\x80\xf9\x4b\xc7\xcc\x48\xcf\x94\x3b\xba\xf0\xaa\x56\x59\xa3\x38\xf0\xfa\x58\xb6\xd8\x79\xf9\x72\x9c\x8b" + - "\x6d\x3a\xae\xeb\x87\xd2\x0a\x04\x3c\x9c\xac\x50\x59\xe3\x24\x0a\xdb\xc9\x06\x07\x94\x97\x81\x39\xca\x03\xf8\xd1" + - "\x30\xe2\xde\x13\x0e\x61\x4c\x1b\x6f\xe1\x56\xee\x1e\xb0\xed\x03\x0f\x17\x7f\xdf\x36\x58\xe8\x59\xeb\xc4\x80\x36" + - "\x20\xd8\x3c\x4e\xae\xa7\x23\xc4\xee\xc9\x45\xea\xc9\xa1\xe3\xcc\xed\x3d\x22\x77\xbc\x03\x80\x0b\x59\x0e\x4f\x68" + - "\x21\x7f\xc6\x36\x32\xf5\x37\x37\x8e\x75\xf4\x33\x02\x1f\x1e\xe1\xf7\x8c\xb9\x26\x5f\x9c\x86\x6d\xa0\x96\x58\x1d" + - "\x8b\x3f\x7a\x7d\x35\xc6\xef\xcf\x0e\x6f\xbf\x2a\x91\x0b\x75\x4c\x85\xb8\xaa\x63\x97\x66\xbc\xa6\xa2\x32\x9f\x4c" + - "\x96\x78\x92\xc3\xbb\x3e\x9a\xe8\xf6\xe4\x76\xee\x2f\xbb\x61\x78\xe6\x59\x8b\xde\xe6\x35\x6e\xe9\xcd\x3b\x2f\x30" + - "\x87\xfd\xc1\x5c\x77\x24\x71\x83\xce\x87\xdd\xd1\x2d\xf3\x69\xe5\xfb\xb2\xa0\x94\xff\xb0\x7e\xb7\x6d\x36\x5c\x61" + - "\xa9\x23\x0e\xb0\x4f\xed\x28\x5c\x40\x68\x87\xa3\xdb\xbd\xcf\xb6\x58\x57\x14\xd0\xd3\x55\x31\x09\x1c\x99\x56\xcb" + - "\x1c\x50\x6f\x4e\xb1\xf5\xd1\x48\x69\x28\x3a\x00\xd6\xca\x6e\x38\x53\x98\x6a\xe0\x7e\xd1\x85\x8b\x29\xb9\xfc\x61" + - "\xde\x3a\x55\x49\x65\xea\x32\xbf\x04\xdc\x8c\xb4\x2c\xec\xbf\xb1\xe2\xa7\x97\x80\xc8\x8b\x67\x38\xe9\x0f\xdc\x37" + - "\x69\xa2\x38\xb6\x01\x2a\xb2\x62\x84\xad\x67\xaa\xb3\xfc\x13\xeb\xb1\x9f\x44\xf5\x14\x65\x93\x4d\xaf\x13\xb0\x6e" + - "\x95\xb3\xca\xd4\x75\x67\x5d\x5c\x8d\x3a\x83\x2f\x39\xfe\xb5\x41\x47\xbf\x64\x69\x00\x5f\x27\xe1\x3c\x94\xe5\x22" + - "\xab\x9d\xa3\x22\x95\xeb\x5a\x48\xb7\x52\x0d\xc2\x08\x6d\xf9\x3d\xb4\x85\x69\x06\x3a\xbf\x4a\x69\xd5\x86\x76\x0e" + - "\x03\x26\x78\x68\x67\xa3\x93\x2d\xee\x70\x11\xa7\x86\x2c\x13\x2a\xd7\x7f\xf4\x50\x4d\x8b\x17\x65\x01\x66\xa9\xef" + - "\x74\x96\xdb\x7f\x7f\xa4\xd9\xf1\x28\xb6\xcc\x92\x4d\x0b\xa2\x24\xd8\x62\xd4\x1e\x4d\x25\xef\x33\x01\xf2\x51\x98" + - "\x35\x3c\xdd\x28\x32\xe1\xbe\x93\x3c\x61\x36\xc0\x87\x2d\xb1\x69\x5a\x08\xde\x4f\x78\x38\x4f\x31\x19\x09\x85\x98" + - "\xf0\x5f\x01\x5f\xc7\x73\x79\x0a\x79\xa0\xd5\x0d\xa6\x81\xbe\x51\xbc\x1d\xd4\x19\x22\x30\x94\xd5\x5a\x57\x80\x1f" + - "\xa7\x19\x1e\xb7\x74\x63\x70\x15\xfa\xda\xa0\xa3\xa7\x07\x67\xea\xac\x23\x72\x99\xfb\xed\x62\x34\x8f\xec\x10\xa0" + - "\x8b\xac\xb0\xd8\x44\x73\x1c\xa1\x75\xdf\xca\xe0\x19\x3f\x74\x7e\x3d\xe4\xdd\x18\x8b\x7a\x71\x81\x5e\x5f\xbc\xdc" + - "\xa2\xad\xc5\x03\x1c\xd2\x21\x54\x61\x21\xdc\x6d\xa2\x10\x18\x63\xc2\x32\x3c\x91\xa2\x1c\x1e\xba\x50\xba\x6c\x45" + - "\xb7\x6c\x71\x71\x9e\x4b\xf0\xae\xd9\x55\x89\xa5\xc9\x89\x3a\xc3\x29\x02\x21\x98\x87\x78\xec\x9b\x70\x83\x22\xd7" + - "\x93\x01\xf2\x84\xa7\x7e\xda\xce\xf0\xfe\xea\x98\x5e\xc1\x26\x8b\x0c\x81\xfe\x27\xee\x78\x87\xc0\x02\x2f\x7d\x83" + - "\xd1\xe9\xa2\x6c\x8c\xda\x75\xd2\xee\x26\xe8\x39\xef\x15\x57\xee\xd5\x54\x95\xe7\xbf\x58\xfe\x98\x51\xe8\x06\x94" + - "\xd5\x07\xbf\xd4\x28\x33\x67\x35\xe9\xe8\x49\x09\x22\x23\x50\xa8\xa8\x3c\xce\xb6\xca\x16\xc1\xb1\x0f\xb7\x5d\x7a" + - "\x8f\x48\xff\x5c\x9e\xff\x32\x50\x7e\xdb\x8c\xf9\x77\xa8\xe6\xc1\xf1\xf1\x20\xbc\x39\xd0\xe7\xd6\x58\x66\xcb\xce" + - "\x20\x39\xaa\x6e\x08\xef\xdd\xea\x0d\x2d\x1d\xf2\x35\x3c\xa3\xab\x65\x8f\xc2\x07\x27\xec\x55\x7e\xef\xb3\xdf\x4f" + - "\x27\xec\x59\x23\x0e\x98\xf6\xd2\x23\x77\x09\x00\xed\x25\x23\xa8\x7b\xfd\x58\x49\xa0\x4b\xea\xe1\x2d\x24\x82\x34" + - "\x00\xac\xf1\x73\x1f\x78\x2a\x20\x8a\xc8\x98\x18\x94\x2a\xfd\x25\xc9\x5a\x3d\xd7\xa5\x80\x83\x07\x9f\xab\x0e\x72" + - "\x32\x1a\x29\xbe\x8b\xec\x0e\xc7\xfb\x52\xdd\x28\xbe\xf2\xe8\xda\xf2\x37\x96\x68\x41\x46\x7c\x9d\xd2\x17\x1f\x60" + - "\xb2\x6e\xb8\x2a\xfc\xf3\x8c\x59\xe8\x43\x37\xf2\x0f\x28\x35\x95\x1c\x7a\xfa\x91\x26\x1e\xe8\xec\xdf\xd5\x81\x3a" + - "\x83\x99\xe6\x0f\xfd\xdb\x47\xfc\xc6\x7e\xdb\x61\x64\xf7\x74\x94\x09\x0f\x0f\x46\xdd\x28\x22\x1f\x67\xc1\x06\xe4" + - "\xb9\xde\x3f\x0b\x7d\x26\xdc\x24\x75\x14\xec\x24\x26\x6e\x47\x1f\xbb\x33\x30\xfe\x1d\x1c\xe0\xe1\xa6\x5e\xf9\xc6" + - "\x78\x2b\x30\x83\x49\xe0\x1d\x7e\xef\xbf\xd6\x17\x86\xa1\x03\xb1\x2f\x8e\x7c\x04\xe7\x87\x48\x8e\x2f\x26\xea\x00" + - "\x76\x18\x79\x5e\x60\xe8\x30\x3b\xda\x3d\xf6\xa3\x90\x4c\xde\x96\xfd\x83\x5c\x24\xb9\xaa\x41\x58\x69\x90\xa4\x33" + - "\xcf\xe1\x20\x6c\xdf\xf3\xee\x08\x5c\x38\xf6\x9b\xa5\x2a\xe6\x26\x5f\xc2\x2d\xb9\x8e\x78\x8d\x7a\x75\x5e\xda\x5b" + - "\xd5\xee\xca\xd1\x43\x35\x50\xc3\xe1\x70\x20\x9f\xbe\x11\x0c\x47\x98\x9a\x7f\x8b\x76\xc6\x5f\xd0\xfa\x79\xa4\x40" + - "\x2c\xa1\x61\x88\x95\x72\x78\x26\x28\x6b\x07\x5f\xb5\x93\x83\x23\x1a\xe4\xaa\x00\xa3\xfa\xaa\xb0\x44\x2b\x37\xf6" + - "\x04\x89\x3e\xd5\xd4\xfc\x42\x67\x05\x52\x0d\xaa\x1d\xdd\x0c\x31\xd3\xb4\x18\x58\xf7\x05\x2d\x4a\x04\x77\xf4\xb1" + - "\x72\xde\xb7\xfb\x51\xc7\x16\xba\x6e\x4c\xe5\xa6\x75\x68\x6f\x8c\x70\x16\x26\x65\x51\x93\x47\x00\x66\xd2\x50\x18" + - "\x75\xeb\xbe\x19\x60\x70\xdd\xaa\xc6\xb0\xf3\x61\x4c\xc4\xc5\xa8\x10\xfc\x26\x18\xc9\xb8\xc5\xcf\xc9\xf4\xe5\x7f" + - "\x5e\xa6\xb6\x90\xd3\x8a\x03\xe9\x2f\x9b\xb9\x3b\xc3\xe8\x1f\x43\x44\x13\xad\xd6\xf0\xed\x0a\x3e\xb4\x53\x13\x98" + - "\xb1\x32\xe7\xb3\x5a\x0f\xd8\xc2\xde\xd2\xf4\xb8\xd2\x68\x11\x6d\x05\x7d\x13\x03\x78\x24\x39\x5f\xb2\x98\xf3\x1b" + - "\xb7\x59\x42\x3f\xf1\x0d\xfb\x49\x8d\xb1\xa9\x40\xea\xa5\xde\x11\x33\x02\x03\xfc\x4b\xd4\x61\xc1\xb6\x23\x01\x43" + - "\xd9\xb2\x3d\xc2\x48\x3a\xa6\xbc\x2d\x6a\x6f\xcf\xaf\x4d\xbf\xb3\x5a\x9a\xe6\x3b\xeb\x25\x5a\xed\x45\x56\xbe\xb3" + - "\x44\xbf\x07\x6e\x1c\xcf\x5d\x45\x54\x3f\x3f\xf0\xb4\x46\x8a\x81\xc0\x17\xbb\x83\x2f\x4f\xcd\xa1\x6a\x2a\xa3\x1b" + - "\x0c\x76\xae\x95\xae\xdd\x4d\xe5\xa8\x52\x87\x63\x57\x34\x9d\x47\x96\xc5\x53\xa4\xd1\x0b\xd5\x75\x71\x87\x6f\x2b" + - "\x1b\x0d\xe5\xb6\xa2\x51\x2a\x4f\x30\x42\xb6\x43\x6b\x82\x63\x88\x1b\x6b\x13\x5f\x1e\x17\xec\xe4\xd0\x37\x17\xf3" + - "\x7c\x3a\xf1\xe8\xfe\xf4\xc0\x91\x89\x86\x36\x88\x28\x44\xdf\xb3\xe7\xc4\xbe\x8b\xfd\x13\xb2\xef\x82\x75\x8f\xda" + - "\x68\xef\x8d\xd6\xae\xef\x77\x1b\x0e\xc5\x2e\xde\x18\xcc\x31\x1a\x85\xc6\x92\xb5\xce\x20\x3a\xb0\x2c\xec\x15\x06" + - "\x6a\x4f\x37\x2a\x41\x17\xdd\x2e\xda\x96\x07\xe5\xb7\x80\xc2\x85\x67\xe4\xae\xa9\xea\x08\xf7\x74\x15\x05\xfc\x7e" + - "\x84\x41\xf3\x4e\x5e\xdd\xe0\xed\x50\x16\xea\xc5\xdb\xd7\x1c\x99\x8b\xa2\x9f\x4e\xaf\x7f\x40\xd5\xa8\x0c\x31\x43" + - "\xc5\xd0\x51\x97\x7e\x9b\xb8\x62\xa9\x4f\xf2\x8e\x6d\xf0\x9d\xef\x15\xed\x8d\x69\xe1\x73\x2d\x48\x4e\x65\x53\xe8" + - "\x23\x6a\x3d\x6d\x0b\xae\xbb\xf6\x3c\x53\x02\x98\x63\x75\x62\x1a\x10\x3b\xaa\x95\x41\x17\xa1\xac\x51\xe5\x64\xb2" + - "\xaa\xea\x21\xe0\x1e\xfd\x64\xbf\x18\xa3\x39\x5b\xc0\xe4\xc0\x8d\x6a\x2a\xfc\x54\x4f\x2e\xd4\xbc\x5c\xab\x85\x2e" + - "\xae\x55\xd6\x98\x05\x90\x0c\xbb\xc8\x78\x63\x98\x29\xea\xb3\xe9\xd2\xc3\x4e\x90\x95\x3d\xab\x4c\x3d\x54\x27\xc6" + - "\xa8\xfb\x5f\x7c\xf9\xd5\x01\x8c\x4b\xa7\xd7\x3f\xeb\xac\x19\xab\x03\xd7\xe2\xf7\x65\x9e\xaa\x1e\xf8\x58\xe4\x46" + - "\xd7\xa6\x1f\xd7\x74\xef\xb3\xad\x79\x99\xa7\xdc\x5d\x37\xd7\xf6\x61\x80\xe0\x27\x1f\x04\x53\x6d\x9b\xdc\xdd\xc5" + - "\x1d\x22\xb7\x78\x18\x07\x8d\xf9\x91\x79\x1f\x09\xd6\x88\x18\xff\x35\x27\x64\xb3\xd3\x9d\xd5\x2e\x74\xbb\x8a\x3b" + - "\x06\xd3\x23\x43\x84\x1c\xf8\xbe\xcf\x58\x48\x5a\x28\xe8\x33\x38\xf1\xe1\x11\x62\x65\xa3\x0b\x0b\x87\x81\x41\x85" + - "\x02\xbb\x74\x6f\x2f\x1e\x9d\xbf\xed\x69\x5d\xa3\x48\x9e\x88\x2d\xfc\xc9\x20\x06\x15\xba\x1c\x76\x8c\x69\x2b\xaa" + - "\xcd\x79\x80\x50\x05\xaf\xa6\x4a\xab\xa2\xac\x16\x3a\x87\x4f\x7f\x8a\x16\x1e\x78\xd2\x49\x45\x89\xea\xc0\xd5\xce" + - "\xf6\x92\x1c\x75\xc0\x81\x50\x8e\x6d\x9b\xc7\xb6\xb3\xd3\x35\x38\x99\x35\xad\x73\x3c\xaf\xe4\xd4\xfa\xa4\x48\xe7" + - "\xe5\xaa\xb0\x72\x79\xc9\xa8\xf2\x48\x1c\xe8\x30\x87\xf4\xc5\x01\xa8\xa8\x53\x8e\x2d\x3a\x93\x3c\xfa\xbb\x2a\x9b" + - "\xcd\x00\xd7\xf3\x1a\xeb\x95\x5b\xd4\x63\x16\x79\xe2\xd0\xe0\x07\xb8\x79\xaa\x68\x5f\xca\x10\xee\xa8\x64\x4f\x25" + - "\x50\x73\xc2\x64\xb9\xe3\x8b\x72\x3a\x8d\x8b\x7d\x0c\x48\x1b\x67\xfd\x79\x17\x1d\xca\x39\xf5\x06\xb3\xa6\xe4\x53" + - "\x35\xc9\x8d\x2e\x56\x4b\x12\xd8\xc9\xc1\xcf\xbb\xf4\x32\x4b\x4d\xa2\x99\xc3\x0e\x41\x0b\xf2\x4b\x5b\xe7\x0f\xc4" + - "\x4c\xf4\x54\xf2\xe2\xed\xeb\xe7\xe8\x6c\xff\x43\xa9\x53\x93\x26\x03\x5f\x03\xa1\xbb\x61\x6f\x11\xe4\x76\x43\x2d" + - "\x79\xa9\x37\x7f\x19\x1c\xd9\x18\xa8\x32\xa0\xab\xa1\x57\xa2\x53\xac\xf0\xad\x43\x9b\xc0\x9f\x53\xff\xe8\xa8\xcd" + - "\x39\x4b\x59\xad\x99\xcc\xd5\x44\xd7\x06\x1c\x26\x2b\xa3\xfe\xe0\xd1\xc7\xb8\x5f\xe0\x73\x47\xa6\x02\xe7\x3d\x7a" + - "\x5e\x95\xeb\xda\x54\x6e\x25\xbc\x33\x1f\x50\xe5\x8a\x4c\xa6\xe8\x5c\x00\x04\xbb\xa9\x32\x54\x1d\x59\x11\x00\x8a" + - "\x9e\x80\x4e\x00\xe1\xd1\xf5\xa4\xc9\x2e\x4d\xa2\x6c\x27\x10\xd0\x3d\x6b\x14\xe0\x0f\xa6\x2a\xab\x6b\x7b\x2b\x82" + - "\x97\x29\xe8\x9d\x0a\x43\x75\xa7\x59\x3d\x29\x2f\x4d\x85\x0e\x74\xcf\xe7\x55\x56\x9f\x40\x15\x63\x46\x58\x3f\x5f" + - "\xcd\x6a\x0a\x96\x03\x78\xf5\x26\x9b\x5c\x98\x66\x74\xf0\xe8\xd1\x57\x8f\xee\x4f\xca\x85\x1d\xe9\xf8\xe0\x73\xb7" + - "\xe5\xc5\xa6\x70\x3d\x04\x77\x17\x5e\xc1\x44\x7a\xfe\x13\x31\xcd\x1a\xa5\xeb\xeb\x62\x32\xaf\xca\xa2\x5c\xd5\x98" + - "\xf4\x55\x03\xde\x3d\x43\x37\x41\xbf\x01\xc4\x7a\x55\x64\x0d\x14\x48\x4d\xae\x05\x71\xdc\xaa\x4d\xf3\x2e\x5b\x98" + - "\x72\xd5\xb8\x93\x87\x33\xca\x0b\xe6\xc9\xbd\x13\x7c\x6a\x9c\x11\x7b\x12\xae\x23\x2f\x67\x64\x3f\x78\x38\x3a\x4d" + - "\xff\xd5\x0d\xce\x8d\x3d\xb3\xcf\x9c\x47\x25\xed\xfa\xb2\xb0\x3b\x7c\x20\xdc\xbd\x29\x4b\xf1\xba\xac\xb0\x0b\x54" + - "\xb0\xa3\x03\xb7\x9e\x0d\xa6\x01\x1e\xb0\x91\x29\x9d\xd3\x3e\xc0\x39\x90\xa9\x21\xfe\x94\x81\xbf\xe3\x34\xe2\x23" + - "\x28\x75\xdc\xa5\x29\xd8\x2a\xb6\xb2\x5b\x37\x2d\x4d\x8d\xa8\xc6\xdd\x9c\x8c\x8b\x55\x80\xba\x5f\xaf\xf2\x26\xf3" + - "\x00\xc9\x44\x63\x38\x7b\x24\x27\x6e\x22\x91\xa7\x9c\x06\x2e\x64\x8e\x37\x83\xd7\xa3\x1a\xdd\x9e\x97\x0e\xa8\xeb" + - "\xdc\x30\x4d\x07\x2f\xe1\xac\x79\x50\x8b\x2c\x79\xc8\xb6\x69\x48\xee\xe8\x8f\xb3\xfb\x3b\x8c\x19\xa2\xa0\x9b\x0b" + - "\x73\x4d\xf2\xd7\x40\x4d\xe6\x3a\x2b\x50\x0b\x06\x7e\x02\x7f\x34\xcd\x40\x55\x7a\x2d\x82\x19\xbc\x72\xa3\x9d\x50" + - "\x19\x53\x72\xaf\xf2\x0b\x75\x64\xab\x15\xa8\xe7\x84\x0c\x68\x9a\x1a\x59\x2a\x27\x58\xcb\xcb\x03\x5d\xc9\xec\x87" + - "\x04\x04\x8f\x5a\x63\x77\x8c\x5c\xef\xa4\x63\x26\x23\x9b\x66\x05\x7d\x19\xb0\x38\x38\xf4\x60\xbc\x19\x0c\xf9\x34" + - "\x23\x4c\xcc\xd6\x48\xc5\x15\xcb\x5d\x2e\x0b\x5a\x0f\xbb\xcf\x84\xc4\x8b\xe2\x7c\x27\x98\x4b\x47\x5f\x3d\xef\xdf" + - "\x21\x72\xb1\x66\xc0\x5d\xf7\x7a\x2d\x47\x29\xc3\x8b\x60\x82\x05\x65\xf9\xd6\xfe\x2d\xd2\x8e\x55\xab\x22\xc8\xed" + - "\x61\x8a\x26\xab\x8c\x83\xd8\x44\x51\xd0\xad\x29\xd8\x0a\x04\xde\x35\x0b\xe3\x4e\x38\x02\xbb\x95\x5f\x46\x86\x04" + - "\x33\x57\x13\xb3\x24\x6c\x14\xdc\x91\x41\xc6\x1a\xa1\x39\x09\xa5\x2b\xda\x1e\xd3\x42\x56\x1f\xc7\xfb\xf9\x3d\xd9" + - "\x36\x0b\xd8\x0a\x36\x04\x66\x87\x1d\xff\xd8\x0e\x4c\x42\xb5\x62\x11\x61\x20\x6c\x02\xe6\x9d\xf2\x41\x81\xcd\x02" + - "\x7d\xb2\xf3\x76\x4c\xed\x90\x8e\x45\xce\x1d\x14\xcc\xec\x3e\x8b\xbe\x84\x95\x8d\x71\x49\x02\xac\x67\xbf\x61\xc0" + - "\x8d\x03\xb3\xb0\x8f\xdd\xf5\xfb\x47\x83\xcc\x16\x4c\x1f\x3a\x7a\x84\xcb\xe6\xb0\x1f\xec\xb1\x3c\x16\x3d\xd8\x77" + - "\x3d\x18\xbb\xad\x2e\x2c\xee\xcc\x31\x39\xfc\x80\xda\xf9\x3a\x69\x0e\xa4\x01\x22\x04\x4e\x01\xa9\x6e\x74\x18\x0d" + - "\x61\x4f\xd8\xb2\x79\xa1\x1b\x1d\x32\x1e\xeb\xc2\x31\x7f\xe0\x62\x6b\x4b\xd5\xa0\xf0\x1b\xe3\x23\xb5\x07\x09\xc6" + - "\xe9\x0f\xfe\x73\xf8\xf2\x87\x97\xaf\x5f\xbe\x79\xf7\xe1\xcd\xdb\x17\x2f\xe3\x77\x2f\xde\x3e\xff\x73\xfc\x72\x8f" + - "\xa2\x27\x44\xd9\x67\xa0\x43\xee\x04\x7b\x67\xd3\x92\xed\x5d\x8c\x0d\x71\x73\xd3\xf5\xfc\x6b\xf0\x48\xed\xa9\xdd" + - "\xe8\x5d\x5f\xcc\xa1\xdb\xf5\x76\x1a\x7a\x6e\xd0\x2e\x15\xc5\xb3\x22\xad\xca\x2c\x55\x4f\xd5\x13\x42\x1f\x7a\x9b" + - "\xa7\xea\x67\x73\xfe\xa7\xac\x71\x77\x0b\x4e\x30\x45\x9e\x93\xcb\xf6\x4b\x2b\xf5\xd6\xf6\x54\x8f\xa6\x95\x31\xbf" + - "\x1a\xba\x4b\xa8\x16\x1a\x4d\x61\xd6\x9c\x54\x0b\x97\xcb\x1e\x7d\xa3\x09\x94\xb3\x28\xd5\xe9\x69\x6d\x9a\xb3\x33" + - "\xba\x18\x00\x0f\x81\xda\x41\xaa\x45\x30\x84\x64\xd1\x1d\x4e\x5c\xec\xdc\x40\xed\x0f\xf0\x34\xcc\x4c\xd3\x61\xe6" + - "\xa7\x0e\x60\xf4\x9a\x4f\xf3\x70\xef\x33\x0c\xae\xe7\xb4\xa6\x32\x93\x01\x3c\xd8\x0d\x33\xf5\x33\x3b\x6b\xa7\x6f" + - "\xb8\xca\x52\xc2\x1a\x83\x3f\x35\xed\x9c\xe0\x36\xc3\x0d\x77\xe8\xbe\x91\x38\x53\xb6\x67\x17\x26\x10\x4c\xe5\x66" + - "\x04\x9f\x57\x4c\x33\x86\x35\x61\x24\x02\x07\xa9\x30\x8a\x02\xc2\xf7\x65\x85\x5a\x94\xa9\xb1\x54\x07\x99\xd8\x9a" + - "\x7d\xc6\x2d\xdb\xe9\x7d\x61\x8b\xb2\x81\x04\x61\xea\xfe\x57\x8f\x1f\x7f\x3e\x74\x46\x08\x60\x6f\x9c\x56\xc3\xc0" + - "\x39\x44\xc0\xe2\x69\x55\xfe\x6a\xf8\x7c\x0d\xfd\xd5\x20\xc7\xec\x3b\x1e\xcd\xf7\xbe\xbc\x13\xec\xa5\x9c\x1a\x64" + - "\x1e\x21\x04\xf6\xb7\x0e\x37\x48\xe0\x29\xa1\x32\xda\x22\xcc\x82\x03\x3b\x4e\x31\x45\x17\x06\xb9\xcb\x55\x01\x16" + - "\xaf\x23\xfc\xe2\x54\x05\x6b\x79\x16\x08\xc3\x30\x70\x0c\x1d\x62\x5e\x1b\xc7\x41\x75\x70\xc7\x5d\x95\xbc\xc4\xa0" + - "\x96\xe0\x6e\x9e\x98\xc9\xaa\x02\xde\x38\x2b\x40\xbe\x2e\xf6\x4c\xb1\x5a\x98\x0a\x59\x11\xfb\xf7\xba\xca\x30\x0c" + - "\x85\x73\x25\xc1\xb7\x4d\x75\xed\x4d\x67\x3c\x05\x71\x87\xed\x94\x20\xa9\x1e\x2b\xea\x07\x5d\x0d\x9d\xa7\x20\x33" + - "\x3c\xf1\x03\x39\xaf\x92\xbd\xed\x3a\xd8\xfc\xee\x3b\xc1\xf8\x6a\x45\xd9\xb8\x61\x78\xd0\x4a\xd6\x50\x5e\xdb\xad" + - "\x8f\x84\x26\xd9\x53\xe2\x92\xbb\x75\x14\xd8\x79\xea\x7a\x6c\x0f\xef\xec\x70\x5b\x69\xf9\x52\x06\x1d\x4e\x02\xcb" + - "\x3c\x2e\x9c\xa7\x00\xa7\x3c\x5b\x67\x11\x6c\x60\xf4\xf2\x48\x9c\x7f\xa1\x85\xf4\xbd\xc5\xb0\xfb\x80\x80\xb8\xfe" + - "\xea\x46\x47\x37\x3d\x40\x57\x54\xe5\xd2\xbb\xa9\x81\xb4\xb9\xd0\x18\xf9\xc7\x15\x53\x4e\x37\x76\x31\x00\x68\xbe" + - "\xd4\xb8\x8f\xa2\xdc\xab\xa6\xb0\x5b\xc5\xb9\x35\x24\xd0\x7c\x22\xb7\xae\xca\x8a\x3c\xc3\x1d\x0c\xe6\x02\x91\x5e" + - "\xd5\x35\xa8\x9a\x79\xb9\x9a\xcd\xe1\x62\x84\xc3\x84\xd5\xce\x75\xca\xa2\x8c\xb9\xb2\x32\x4b\x1a\xee\x79\x98\xb5" + - "\x0b\x73\xed\xce\x33\xf6\x92\xc9\x6c\xd7\xa4\x1e\x46\x40\xd1\x63\x75\xca\x53\x26\x78\xa3\x33\xf0\x43\xbc\x17\xa1" + - "\xdb\x00\x3d\xeb\x8c\x6a\xa7\x46\xa0\x80\x5d\x37\xb6\x11\x6d\x6a\xea\x37\x3e\x6d\x99\xa9\xd5\x47\xd1\x5c\xc0\xd2" + - "\xd9\x4d\x5f\x99\x7a\x2e\xb3\xec\x59\x19\x9b\x29\x8d\xe5\x3d\xe7\x28\xe2\x4e\xca\x65\x66\x04\xb6\xb2\x63\x84\x5f" + - "\xda\xeb\xcb\x01\xea\xc2\xc4\xf4\x5b\x71\xef\xbc\xd7\xbb\x26\x6c\x40\x01\x65\x87\xdc\xa5\xb7\x0c\x57\x6b\xa5\xc6" + - "\xe5\x35\x3b\xa9\x38\xb8\xdd\xc2\xec\x9d\x5f\xef\xd9\x85\xe7\xfc\x7a\xd1\x71\x88\xf8\x56\x64\x15\x6d\x0d\x96\x48" + - "\x05\xd1\x6b\x6e\x62\xe1\xad\x9d\x58\x0c\xdf\xc2\x3f\x3b\x4d\x08\x5b\x41\xd6\x6a\x77\x48\x66\x9d\x87\x44\xc8\x35" + - "\xf6\x04\x67\xc8\x9c\xd9\xd5\xcb\x52\xea\x76\x56\xab\x29\x2a\xfd\xca\x0a\x65\xeb\x73\x43\x9b\xdb\x69\x57\xde\x98" + - "\x35\x96\xae\xe3\x12\x98\x78\xdb\xef\x74\xf6\x3f\xe2\xcb\x4e\x73\xc8\x37\x22\xcc\xb2\x80\x49\x13\x57\x98\x75\x7e" + - "\xcd\x55\xd1\x17\xc8\x8e\xc0\x2c\xd1\x15\xa7\x9e\x51\x87\x83\x6b\x08\xa0\xe0\xcf\x8d\x73\x26\x1a\x32\x05\xe8\x3a" + - "\x1c\xad\x73\xe4\xce\x09\x4d\x26\xca\x9c\x52\x1a\x3b\x16\x27\x6d\xac\xa8\x1e\x5b\xec\xcc\xcd\x39\x0e\xa6\x7b\xda" + - "\x3b\x48\x13\xc0\x00\xa0\x3f\x2b\xc4\x08\x05\x2a\x31\x03\x6b\x33\xc6\x97\x54\x44\xa9\x83\xa1\x7a\x53\x42\xab\x6b" + - "\x2d\xa0\xc6\xdd\xfb\x47\x76\x72\xf0\xac\xb6\x4b\xa1\x86\xab\x28\xa9\x27\x22\xf7\xa7\x6f\xe2\x1d\xfb\x62\x80\x6a" + - "\x34\x51\x4b\xdd\xcc\xd1\x4d\x1b\x4e\x1d\x78\x16\x9b\x46\xe8\x21\x52\x66\xf6\x59\xf1\x06\xa8\xb6\xd8\x42\x53\xd2" + - "\xfa\x83\xa9\x69\x69\x40\xdb\x96\x5f\x6f\x1e\xdb\x3b\x2f\x63\xc6\x67\x88\x87\x07\xc6\x26\xbb\x19\x70\xf6\x14\x29" + - "\xdf\x89\xe1\xc0\xea\x80\x20\xb4\x57\xf0\xe6\x06\xcf\x4f\xaf\x67\xdf\x79\xfc\x0e\x2e\xc9\x44\x8e\x13\x93\xad\x4c" + - "\x58\x81\x04\x6f\xa3\xd6\x8f\x3c\x08\x55\x70\xc4\xf8\x86\x77\x0e\xaf\x50\x7a\xbb\x63\x43\x71\x4d\xe3\x76\x4d\x8c" + - "\x5f\xa8\x17\x26\x87\xfc\x6a\x17\xe6\xba\xdf\xf2\x4f\x39\x7d\x78\xf6\x33\x9b\x55\x6c\xdb\x84\x2c\xab\x69\x1b\xc0" + - "\x31\x06\xb7\x04\x0d\xaf\xed\x5a\xb2\x02\x02\x0e\xa4\xa5\xa9\x7e\x87\x00\x7c\x5b\xa5\x90\x3e\xaa\x1e\x5c\x42\x60" + - "\x8c\x84\x85\xa8\xfb\x28\x08\x6c\x5c\xc0\x67\x4e\xce\x03\xb8\x00\xa6\x91\xe1\xfe\xec\xe8\x86\xfd\x2f\x61\xd6\x36" + - "\x9d\xa7\x46\xe4\xf9\xcf\x40\xaf\x6b\xb7\x68\x6d\x1a\xda\xa1\x4e\xaa\x6c\xd6\xa5\xc3\x36\xa7\x3b\x75\x59\x66\x64" + - "\x5e\xf0\x72\x0e\x28\x33\xae\x96\xe8\x2d\x06\xdb\xe9\x5c\x93\xe1\x12\x37\x30\xd4\x6a\x4f\x4f\xa3\x2f\x4c\x71\xfa" + - "\xf0\x4c\xd0\x86\x2e\x5d\x8d\x97\xe4\x2f\xcc\xb5\x23\x08\xad\x28\xb1\x0e\x3a\x4c\x19\xec\x11\x18\x07\xd6\x7a\xf0" + - "\x9f\xba\xf3\x37\x9c\x83\x4f\x61\xc1\xba\xae\x66\xe2\x55\x15\xe4\x20\xb0\xbb\x04\x50\x38\x94\x47\xe1\x20\xc2\x83" + - "\x47\xaa\xee\xb8\x9b\xc9\xe3\x80\xb5\x18\x74\xe7\x21\xff\x9f\xd8\x19\x48\x28\xc7\x3c\x35\x81\x15\x0d\x87\x43\x57" + - "\x10\xb6\x3a\x2c\x18\x44\x5f\x01\xec\xaf\xbf\x32\x06\x90\x50\xa4\x97\x5c\x18\xf0\x71\xbf\xd4\x79\xd2\x57\x96\x93" + - "\xd0\xcd\xaa\x32\xde\x45\xd5\xd6\xea\x6f\x2e\xc4\x56\x40\xf6\xcf\x1d\x36\xdf\xa4\xdb\x70\x8e\x05\xa4\xfc\x27\x8d" + - "\xc9\x73\xf5\x61\x5e\xae\x3f\xd0\xd9\x02\x74\x81\x14\x1c\x59\x71\xe5\x5d\x1d\x70\x00\x97\xb9\x26\xd5\x22\xa2\x80" + - "\x50\x4b\xf6\xc9\x50\xdd\x3f\x78\xf4\xe5\x57\x5f\xb8\x0f\xde\x59\xde\x12\x7a\x08\x8e\x4d\x4b\x53\x20\xbc\xb1\xdd" + - "\xb8\x38\x39\x2e\xc0\xcc\x6e\x55\xea\x2d\x00\xec\x80\xc2\x74\x38\x29\x8b\x89\x6e\x60\xae\x11\x1b\x29\xa6\x26\x42" + - "\x8b\x14\x70\x27\x50\xc0\xcb\xc8\x9e\xfa\x38\xca\xc6\x5d\xac\x90\x15\xa2\x55\x07\xe9\xcf\x16\x41\x8b\x36\x58\xf9" + - "\x16\xba\xc8\x96\xab\x5c\x3b\x49\xc5\x6f\x49\x07\x3f\xe1\x59\x1f\xea\xfd\x29\x1e\x7c\xec\xc7\x86\x80\x6c\xb6\x9f" + - "\xc2\xac\x73\xc8\x0b\x6c\x47\x62\x9c\xeb\x01\x58\x7c\x32\x72\xf9\x6a\xf1\x71\x84\x4d\xc3\x3b\xed\xfc\xda\x65\x98" + - "\x47\x19\x71\x9e\x35\x06\xea\x0b\xfb\x06\x9d\x3a\x0c\x9f\xc1\x3f\x6e\x38\x1c\x48\xbb\xe5\x30\x97\xc6\x8c\x3d\xb5" + - "\x09\x7e\x47\xb5\x22\xca\xf1\xe8\x50\xdd\x41\xa0\x6d\x57\xd2\xfa\xad\xd4\xe4\xa6\x31\xcc\x93\xd8\x6f\xd0\x25\xe7" + - "\x2c\xd6\x12\x0e\x10\xc9\xd7\x4a\xce\x1b\x95\x1a\x1c\x6d\xd3\xc9\x50\xb7\xe8\x46\xa7\x5c\x8f\x30\x20\x80\x3e\xe8" + - "\x11\x17\xb7\xd2\xac\x9e\xe8\x2a\xdd\xd8\x30\x6c\x8d\xee\xfa\xbc\x5f\x0b\x0c\xf4\x13\x3a\x10\x18\x74\x09\x1a\xca" + - "\x92\x8d\x0f\xcb\x2a\xbb\x24\xff\x27\x54\xb1\xb9\xdc\x97\xf0\x1a\x6c\x34\xad\xd7\x8c\x6a\xb4\xe5\x72\x58\x62\x22" + - "\xf4\x93\xd5\x62\xa1\xab\x6b\x58\xb0\x83\xa1\x7a\x59\x4c\xcb\x6a\x62\xd4\xb3\x1f\x5f\xa9\x7a\x55\x4d\x2d\x75\x44" + - "\xe9\x6f\xa1\x8b\x26\x9b\x60\xe2\xed\x26\xc3\x4c\xe1\xb8\x71\x0f\x86\x5f\x0f\xaf\xd4\x79\xa5\x8b\xc9\xfc\xde\x67" + - "\x5b\x8f\x86\xea\xd5\xc2\x72\x66\xe4\xea\x53\xa6\xab\xdc\x3c\xa8\xd5\x42\x67\x80\x62\x4c\x59\xc6\x11\xb9\x23\x5d" + - "\x4d\x18\x4b\xc9\x72\x11\x7a\x86\xfe\xb2\xba\x99\xd7\xa8\x33\x20\x6f\xc8\x85\x99\xcc\x75\x91\xd5\x0b\x7b\x18\x1e" + - "\x0f\x9d\x01\xaf\xb6\x1b\x34\x2e\x63\xbf\xa4\xdc\xc2\x2a\x59\x02\xb0\x97\x49\x60\x18\x89\x9d\x9c\x04\xe6\xc9\x56" + - "\xf4\x64\xa8\x3e\xbc\x31\x97\xa6\xfa\x60\xaf\xd2\xb2\x36\xa2\x38\x50\x68\xb4\xba\x56\x6a\x52\xa6\x46\xf5\xde\xbd" + - "\x7d\xf1\x76\xac\x5e\x58\x41\xe6\x03\xca\xea\x1f\x90\x48\xda\x79\xee\xdf\xfb\x6c\xeb\xf3\xa1\x7a\x06\x89\xa1\xa0" + - "\x36\x08\x3b\x0e\x67\x3b\x35\x8d\xce\x72\x2b\x70\x61\xbd\xc4\x93\xa8\x9e\x99\x0d\x39\x5f\xba\x60\x3a\x6c\x9d\x5f" + - "\x0c\x5d\x52\x7b\x0d\x86\xfa\x0a\x6f\x76\x2b\x82\x45\xb5\xaf\x96\xb3\x4a\x63\x6e\x8e\x9f\x8d\xbe\x78\xad\x41\x3a" + - "\x7b\xb4\x7f\xf0\xe4\xde\x67\x0f\x47\xe4\xc5\x74\x5e\xd9\x35\xe5\xac\x52\xbf\x61\x4a\xa9\x87\xef\x3f\xde\xbc\x3f" + - "\xe5\xdf\x67\x98\x4f\x6a\xab\x02\x4c\xa7\x17\xba\x9e\xdb\xf2\xbd\xd3\x67\x7b\xff\xff\xb3\xfe\x68\x16\x42\x7d\xda" + - "\x89\x78\x06\x29\x4d\x84\xb5\x42\x48\x84\xb6\x51\x7b\x9e\x9d\xdd\x0b\x15\x65\x40\xa7\xec\x6d\x03\x92\x9a\x00\x97" + - "\x19\x28\xcb\xf1\xb8\x8c\xc4\xe8\x02\x3d\x1a\x91\x62\x92\x23\x78\xbf\x7f\xf7\xfa\x87\xcf\xe1\xd9\xde\x43\x9f\x7b" + - "\x85\x4d\x68\x4e\xe8\xf7\x1c\xc3\x86\x54\x91\x74\x2c\x89\x0e\x26\x50\x61\xa2\x76\xe1\xce\xa9\x0c\xa4\xb1\xee\x29" + - "\x3f\x0f\x03\x95\xec\xfd\xe1\x20\x51\xfd\x30\x69\x30\x1c\x55\x6c\x74\x53\xda\xed\x10\xc8\xef\x4e\xe5\x84\xd4\xe5" + - "\x61\xbd\xbe\x6c\x53\xad\x20\x4f\x37\xf8\xca\x70\xba\x62\xff\x1a\x6c\xc1\xf6\x3d\x1a\x85\xdb\x05\x8a\x55\x9e\xdb" + - "\xf7\x10\x4b\x32\x16\x97\x8b\xbd\xa6\x89\x95\xc0\xc3\x57\xac\xc0\x3f\x08\x4c\xab\xa0\x9a\x2f\x1e\x34\x0c\x4b\xe6" + - "\xef\x4d\xaa\x61\x17\x5a\xd8\x55\x49\x82\x5e\xf9\xf6\xaf\x63\x85\x4f\xb9\x15\xdc\x7d\x84\xa5\x47\x9b\xe4\x38\xc8" + - "\x90\xf4\x7f\x4e\xde\xbe\x71\xaf\x64\xdf\x0f\xa5\x9e\x90\xd4\x84\x41\x66\x2b\xce\x65\xb5\x36\x4e\x57\x85\x52\x56" + - "\x09\xba\x54\xd1\xf7\x14\x93\x34\x20\x3d\x66\x92\x89\x7c\x7b\x6b\x0f\xb7\xfd\xc5\x68\x3d\xc2\x48\xe6\xc8\xe8\x4e" + - "\x1d\xfe\xd8\xed\xb3\xd7\x71\x7f\x75\xc0\x56\xfa\x9e\x51\x79\x57\xea\xe6\xc6\x5f\x04\xf1\x4b\xe1\xcf\x9f\x76\xb4" + - "\xc1\x5c\xba\x54\xd9\xb4\xda\x93\x76\xe2\xf0\x03\x51\xbb\xa7\x7c\xdd\x6d\x70\xed\xbe\x5a\xfc\x22\x2c\x13\x86\x1f" + - "\x20\x81\x7d\x03\x52\xba\x6e\x5c\x00\x36\x5c\x05\x40\x71\x81\x88\x0b\xa2\x8b\x12\x13\x04\xe5\xd2\x69\x25\x90\x30" + - "\xb8\x98\x48\x41\xe3\xaa\xf0\xb7\x27\x45\x26\x41\xb4\x56\x6d\x08\xce\x4e\xa5\x66\x59\x99\x09\x6b\x89\x3e\xfc\x2b" + - "\xf3\x07\x4b\xf2\x49\xf3\xf7\xe1\x77\x4d\x20\xd4\xbb\x71\x02\x6f\x4f\x7c\x10\x8f\xa3\x5b\x95\x93\xc9\x9e\xa2\x9c" + - "\x41\xb9\x2e\x1c\xc2\x37\x3e\xb5\xd4\xb6\x26\x42\xe7\xc8\xaa\x4f\x7f\x75\x18\x58\x69\x61\x0d\xbd\xf9\xfb\x0e\x71" + - "\xae\x05\x18\xda\xef\x20\x82\xb8\x99\x66\x7c\x5a\x45\xa2\xaa\x8d\x89\x36\x76\x76\xd4\xb6\x9f\xc6\x99\x3f\xe8\x09" + - "\x9d\x1e\x4b\xac\xeb\x24\xf0\xe7\xb6\xbc\x2b\x0c\x35\x42\x89\x69\xb1\xaf\xcc\x2d\x87\xe9\xf6\x0f\x0e\x76\xc5\x8b" + - "\x77\x56\xe6\x81\x79\x73\xf8\xfc\xb4\xe7\x80\x08\xf7\xee\x1f\x3c\xf9\xea\xeb\x27\xce\x8f\x1b\x81\x7a\x6c\x79\x0e" + - "\x86\xf5\x61\x96\x74\x55\xf9\xb7\x43\xba\x5d\xb7\xc4\xb7\xc0\x74\x13\x94\x7a\xcf\x5d\x6b\xe8\x48\xb2\x1f\x86\x95" + - "\x52\x7d\x6d\x59\x49\x80\xcd\x7e\xde\x0f\xc2\x2d\xe3\x2b\xdf\xef\x1b\x8f\xd2\xda\x05\x04\x44\x3f\x3e\x0a\xaa\x8e" + - "\x2b\x52\x6f\x5a\x91\x81\xf4\xc7\x8d\xa5\x8b\x90\xd6\x4a\x85\x12\xba\xd6\x30\x20\x65\xb4\xfd\x62\x95\x59\xe4\x57" + - "\x13\xe0\xb5\x42\xbc\x62\x47\x64\x5a\x78\x69\x60\xac\x99\x90\x2d\x3f\x76\x39\xa2\x33\x55\xa0\xe0\xd6\x0d\x61\x30" + - "\xcc\xc6\x0f\x84\x28\xfb\x27\x73\x7d\xab\x34\x7b\xcf\xdb\x86\x18\xc7\x31\x44\xc6\xc7\xb4\x35\x56\xd2\xa6\xe4\x0e" + - "\x7d\xd6\xb1\x81\x6a\x9a\xbf\xef\x91\xe6\xbb\x42\xf1\x17\xac\xa1\x3e\x5d\x82\x5e\x2e\x8d\xae\x6a\x54\x57\x12\x45" + - "\xe8\xb3\xb2\x9c\xab\xf8\x07\x8c\xe6\x1f\x1e\x0e\x15\x78\x3c\xdb\x92\x3b\xed\xa0\x62\x43\x95\x78\x3b\x23\x1b\x90" + - "\xee\x3c\x57\x95\xa9\x57\x39\x58\x40\xff\xe1\x3e\xfc\x07\xf0\xbc\x31\x51\x22\x6d\x97\xfd\x8a\x6b\x80\x74\x8d\xd0" + - "\x75\x70\xcb\xb1\x5c\x2a\x04\xd3\xd9\x43\x63\x1b\x46\xad\xae\x4e\x95\x46\xb2\xec\xac\x06\x0b\x9d\x92\xd6\x24\xc8" + - "\x3d\xd7\xa1\x48\x0d\x54\x3f\xcf\x7c\xb5\x33\xd3\x44\x9c\x2a\x01\xe4\x6e\xf1\xe0\x48\xd2\x07\x1d\x4a\xbd\x97\xd5" + - "\x77\xd1\xb7\x60\x63\x09\xf6\xb6\x3b\x6b\x56\xfb\x54\x88\xa4\x75\xff\x46\x57\x61\xd7\x65\xbf\x72\xec\xf3\x6d\xdd" + - "\x75\x5b\xf6\x7f\xa0\xcf\x09\x3b\xae\x26\x9e\xbf\xcb\x0a\x57\x12\xa5\x82\xc9\xaa\x6e\xca\x85\x14\x0e\xda\x93\x2c" + - "\xc9\x17\x77\x78\x20\xfb\xf6\x1f\xea\xfb\xcf\xec\xbf\x5b\x19\xd0\xf2\xcd\x75\x45\x46\x0c\xd7\x7f\xe6\xab\x41\xe9" + - "\x43\xba\x1e\xe1\xdf\x2e\x83\x6c\x4f\x04\x5f\xcb\x2a\xc5\xdb\xe8\x94\x47\xce\x13\x3b\x1f\xa1\x9b\x35\x1a\x02\x21" + - "\xe2\x82\x53\x2a\x97\x2e\xe2\x74\xcb\x49\x5c\xc0\x88\x2d\xb2\xd9\xbc\x79\xc0\x9c\x16\x56\x00\xdb\x43\x7b\x1d\x60" + - "\x0a\x32\x13\x7e\xcc\x44\xac\xbd\x45\x90\xf8\x05\x5b\xc4\x77\x95\xd2\x30\xb7\xe5\x3a\x14\x0f\xcb\x25\x20\x00\xa2" + - "\x92\xbc\x74\x9f\x61\x77\xd8\x13\x02\x2e\x20\x02\x91\x49\x75\x3d\x47\xbf\x15\xd1\x4f\x40\xc9\x1e\x86\x5a\x4a\x18" + - "\x1f\xda\x1c\x96\x4b\xe7\x85\x2c\x04\xf1\xe1\x70\xf8\xf0\x16\xd2\xef\x77\x50\xa8\xeb\x87\x16\x1e\x0e\x87\x43\xf5" + - "\xaa\xa0\x13\x56\x9b\xd0\xae\x20\x26\x58\x7d\xd0\x80\xbd\x98\x5f\x7f\x70\x1f\x93\x9f\x99\x1d\xc7\x20\x80\xc8\xcb" + - "\xeb\x78\x25\xa7\x50\x95\xfb\x72\x55\xb0\xb0\xc3\x53\x33\x0c\xf5\x97\x8e\x3f\x48\xf6\x12\x44\x92\xdf\x3b\x60\x8c" + - "\xd1\x8d\xbb\x7d\xd3\xcd\xd7\x72\x37\x0c\xee\xc1\x01\x25\x36\x26\xc7\xda\xae\xf0\x4d\x2e\xe2\xef\xfb\x5b\xe5\x0c" + - "\x61\x7d\xb8\xfb\xbe\x6e\x8b\x20\xf1\x8d\xfd\xb1\x15\x14\xd6\x96\xda\xfe\xb9\x32\x2b\xd3\x66\xd5\x2d\x3b\x11\xca" + - "\x03\x76\xf7\x43\x61\x29\xf1\x07\x39\x7f\xc8\x39\x8b\x50\x21\x6f\x6e\x54\x32\xbd\xb2\x0c\xc8\xae\x4a\xe0\xc3\x04" + - "\x67\x11\x7e\xf3\x19\x8a\x59\xd7\x86\xfd\xee\x1c\x71\x58\xda\xbd\xb1\x5a\xaa\xd4\xe0\x87\xe7\xd7\x96\xc6\xa3\xed" + - "\x6b\xd5\x28\x48\x13\x8d\x09\x1c\x39\x53\x3d\x44\x16\x6b\x95\x97\xe5\xc5\x6a\xe9\xef\xbd\xd0\x9e\x8f\x9e\x30\x58" + - "\xa5\xcf\x9a\xe0\x2c\x21\x54\xd8\x6f\x91\x76\xaf\x43\x79\x08\x27\xac\x95\x85\xd1\x16\xdf\x18\x84\x08\x75\x12\x22" + - "\x95\x74\x6d\x08\xb0\x59\x69\x23\xb8\x9e\x9e\x9e\xc5\x61\x5c\x34\x33\xdd\x8b\xc8\x43\xa0\xc5\x91\x4b\x73\xe8\x9d" + - "\xcb\x78\x74\xd4\x7f\xf8\x33\xac\xc5\x21\x0d\x55\x8d\xc3\x8b\xc3\xfe\xcb\x3c\x69\xe0\xe9\x8b\x8f\x09\xee\x15\x9f" + - "\xcf\xcb\xf2\x42\xf8\xf7\x7d\x80\x22\xdf\xdb\x87\x5d\xad\x14\x98\xf5\xb2\x4d\xf9\x39\x19\x88\xe9\xe8\xa0\xc7\x3d" + - "\xb8\x27\x03\xa7\xd4\xf4\x8a\x46\x07\x50\x27\xf0\x33\x1d\xb0\x2f\x0f\x81\x2c\x93\xe3\x08\x06\x84\xd7\xa6\x68\xb2" + - "\xc2\xe4\xf7\x84\x33\x31\xb0\xd4\x59\xe1\xb0\x99\xbc\x77\x71\x6b\xc0\x87\xf1\x44\x11\xf4\x61\x97\x7b\x32\x6f\x72" + - "\x84\x9c\x6d\xf5\x00\xb3\x55\x62\x1c\x47\x30\x14\xe0\x6d\xce\x0d\x6b\xa9\x46\x23\xa5\x57\x4d\xb9\xd0\x4d\x36\x81" + - "\xfb\x98\xc7\x29\xc4\x4f\x0f\xd4\x7a\x25\x60\x50\xb1\xe7\xab\x02\xfb\x1e\x0d\xb1\x75\x51\xa3\x9e\x76\xb5\x24\x20" + - "\xf8\xba\xa1\xee\xd4\x4d\xb9\x14\xf1\x09\xde\x1e\x00\xcb\x0e\x38\xc6\x14\xc3\x2c\xdd\x99\x07\xaa\x00\x60\x37\xdc" + - "\x1b\xed\x14\x1b\xdb\x72\xb3\xed\xec\x70\x39\xea\x3a\x56\x0d\x0c\x37\x00\x58\xf4\xba\xa2\x1b\xed\xdd\x67\x2f\xd9" + - "\x22\x35\x98\xf5\x7d\xb9\x3a\xcf\x41\xdd\x5f\xd4\xab\x05\xf2\xd0\x7b\x6a\x66\x0a\x53\xe9\x06\x52\x6f\xf9\x8d\xe9" + - "\xd2\x6f\x95\x95\x43\x8b\x97\x08\xbd\xe8\x0a\x29\x76\xf2\xed\xe7\xcf\x9e\x32\x10\xce\xf0\x29\xd3\x44\xf8\x12\x09" + - "\x63\x4b\xe1\x12\x33\xcb\xa1\x86\x2c\x24\x3f\x70\x59\xe1\xcc\x10\xfa\xe3\x1d\x40\x64\x1b\x20\x5c\x36\xa9\x65\x4e" + - "\xc3\x6e\x27\xd8\xa5\x33\x2f\x1a\x76\xdd\x37\x9d\x7a\x9b\x16\xad\xea\xbe\x6a\x6a\xd3\x34\x60\xf1\x79\xd4\xa1\x61" + - "\xde\x0c\xec\x4b\xfc\x99\x2d\x70\x28\x2f\x25\xa2\x77\x18\x57\xd5\x98\xaa\xe3\x50\xb6\xee\xef\xa7\xdc\x89\x48\x86" + - "\x0e\x89\x24\xe5\x55\x0e\xc8\x50\x14\xab\xdd\xd6\xdb\xfb\xec\x64\xa4\x0d\xbe\x8d\xdf\xdd\x4c\xa0\x29\x6f\xa6\x98" + - "\x40\xc9\xa2\xb9\xfc\x0a\x78\x72\x9c\x67\x24\x7c\x1c\x10\xd4\x80\x1e\xfb\x4a\x63\x25\x54\x48\x44\x76\x76\xb0\xa6" + - "\xd3\xfd\x33\x5c\x8b\x2e\xfa\xd8\xa6\xd9\x51\xf5\x31\x5b\x85\x16\xc9\xf6\x8d\x26\xcf\xd2\xdd\xbc\xd1\x9d\x8d\x8a" + - "\xc6\x80\xaa\xfd\xf7\xa7\xb6\xc7\x15\x8a\x7b\x74\xe0\x4c\xc5\x1f\xc9\x69\x3f\x44\xda\x72\x40\x48\x10\x48\x03\x15" + - "\x70\x4c\x98\xa9\x1a\x9d\x61\x9e\x6b\xfc\x52\x57\x06\xb4\x08\x56\xb8\xea\x4d\xaf\xec\xa5\x65\x89\x0e\x34\x77\xee" + - "\x52\x9c\xf4\x21\x95\x56\x0b\x62\x0b\x37\x82\x00\xda\x02\xd8\xc4\x05\xb9\xd9\x22\x9c\xcc\x11\x84\xa7\x33\x14\x41" + - "\x57\x3c\xa8\xd7\x92\x82\x46\xef\x88\xd3\x15\x92\xf6\xb0\x95\x1b\x95\x11\x10\xba\x2e\x6c\x0f\x1a\x82\xad\x4b\x8e" + - "\x2a\x95\x80\x6e\x18\xa8\xcc\x8d\x5a\x7a\xe3\x3a\xd0\x32\xc3\xff\x2e\x82\x60\x67\xa3\x83\x1e\xb4\xed\x1c\xb7\x70" + - "\x48\x5d\xb6\xfd\x66\xb1\xec\xe6\x61\x6d\x9f\x41\x83\x39\xe8\xa2\xf4\x3c\x16\xec\xfc\x62\x09\xde\x6e\x8b\x25\x5e" + - "\x64\x7e\x72\x60\xb6\x28\xac\x1f\xda\xa2\x9b\x0e\x20\xc9\x1d\x06\x5e\xe4\x45\xc0\x2b\x41\x57\xa1\x44\x8a\x68\x47" + - "\x49\x3a\x32\x0d\xbe\xd8\xc5\x6a\x01\x69\x99\x4e\x77\xf7\xce\x8e\x7b\xc7\xe3\xf7\xe9\xc3\xf7\xc3\x9b\xfe\xfb\x74" + - "\xb7\x77\x3c\x3e\x35\x2f\xcf\xe0\xc5\xfb\x74\xf7\xa6\x3f\xea\x0f\xeb\x72\x55\x4d\x8c\xb3\xcf\x4f\xea\xfa\x25\x18" + - "\x79\xc1\x47\x24\x79\x57\x2e\x93\x81\x4a\x7e\xb2\xc2\x9f\xfd\xf1\x6d\xd9\x34\xe5\xc2\xfe\xfa\xc1\x4c\x9b\x84\x9c" + - "\xa0\x40\x39\x5f\x7f\x9f\xa5\xa9\xe9\x8a\x0e\x33\xb9\x70\x87\x75\xe5\x50\xa0\x3c\x37\x1c\x80\x0c\x7c\x10\x6e\xe0" + - "\xfb\x98\xbd\xcb\x55\xc4\xde\x9b\x00\x04\x0d\xe9\xa3\x6a\x33\x10\x49\x52\xd1\xc5\xa8\x36\x93\x52\x40\xdd\xde\xfb" + - "\xcc\x99\x07\x4c\x6e\x37\x81\xfd\x43\x4e\x26\x6b\x2b\xfd\xc5\x9b\xa4\x59\xbd\xcc\xf5\x35\xeb\xa1\x93\xa2\x2c\x4c" + - "\x02\x01\x45\xad\x34\xc7\xa0\xc4\x07\xbf\x88\x17\x2e\x22\x5f\xd8\xb7\xdc\xbc\x54\x10\xa2\xaa\xcf\x73\xd2\xf6\xab" + - "\x1e\x98\xb5\xe1\xe9\x79\x79\x75\x53\xe9\x34\x2b\xfb\x7f\x18\x65\xde\x09\x22\x26\x81\x80\x46\x49\xa9\x79\xed\x3e" + - "\xe5\xc0\x5f\xf4\xaf\xe1\xe6\xbf\xa3\x12\x74\xe8\x53\xf0\xc0\xe0\xcf\x86\x7a\xb9\x34\x45\x0a\xe9\xe9\x7a\x71\x0d" + - "\x2f\x71\x22\x7b\x76\xfc\x97\x60\x62\x80\x1a\xb2\x62\xb9\xea\x68\xcf\x97\x86\x02\x09\x5f\x2c\xa3\x91\xba\x7f\x70" + - "\xf0\xe8\xe0\x4b\xb5\xc7\xa1\x52\x90\xc2\x99\x62\x74\x1d\x2a\x05\x7a\xf2\xd4\x22\xe0\x1c\x0a\x80\x97\xa9\x37\x92" + - "\x4b\x53\xc5\xcf\x10\x66\x5c\xdb\x5a\xd5\xb3\xe5\xb2\x56\xbd\x9f\x7f\x7e\xd6\xc7\x42\xff\xb0\xd5\xfd\x03\x74\xbc" + - "\xff\xb0\x47\xf4\x1f\xa8\x7f\xb0\xb2\xbf\x33\x6f\xc3\x6d\xf9\xf3\xcf\xcf\x20\x4d\xee\x72\xd5\x04\x2f\x7b\x2a\xb1" + - "\xdf\xd9\x2d\x0d\x4b\x41\xa7\xba\xb3\x20\x75\xd4\x96\xe5\x9f\xb7\x94\x06\x57\xbb\x81\x4a\xfc\x14\xa5\x96\xd5\x93" + - "\x0b\x81\x53\xec\x27\xd0\x0d\xf9\x44\x4f\x75\x95\xa9\xcf\x87\x07\x03\x95\xbd\x3d\xc1\x1f\x1c\xbd\xf2\x64\x78\xe5" + - "\xff\x78\x34\x7c\x8c\xdf\x96\x61\x88\x1a\xd8\x92\xf3\xb2\xf0\xd3\x8b\x38\x7d\x93\xb2\xaa\xcc\xa4\xc9\xc1\x39\x4c" + - "\x26\x7c\x26\x77\x94\x21\x14\x7f\x0e\x5f\x1e\x29\xdb\x63\xa8\xe5\x4d\x99\x1a\x86\x1e\xe9\x78\x62\x05\x08\x18\xd3" + - "\x90\x5a\x73\x43\xf2\x56\xef\xc6\x5c\x35\xba\x32\x1a\x95\xf8\x7c\x00\xfa\x7c\x0f\x02\x40\x0e\x01\x55\x2e\x4d\x95" + - "\x5f\x63\xf7\xd3\x68\x66\x5e\xbd\xfc\x7a\x8f\x6d\x57\xb6\x77\x59\x51\x98\xea\xfb\x77\xaf\x7f\xb0\x8c\xe1\x53\x6e" + - "\xe3\x9b\xab\xa7\x23\xf7\x1b\x98\x45\x1e\x5e\x51\xc2\xd8\x9e\xd3\xa4\x1c\xa9\xed\xed\xee\x41\xfa\x21\xc9\x0e\x42" + - "\x16\xbc\x1e\xd3\xda\xba\xa9\x3c\x1f\xe8\x32\x3a\x85\x99\xf9\xed\xff\xb8\xf1\x69\x39\x59\xd5\x59\xf1\xed\xea\xfc" + - "\x1c\xe1\x8f\x93\xb2\xa0\x67\x89\x5d\x0f\x0c\xa8\xa7\xcf\x2e\x75\x75\xef\xb3\xad\xea\xc2\x5c\x43\x74\x3d\x38\xc4" + - "\x5c\x98\x6b\xf2\x7b\x29\x57\xb5\xf1\xcf\x7b\xc7\x63\x78\x72\x03\x7e\xb8\xa6\xba\x21\xa8\xae\x85\x29\x56\xfd\x9b" + - "\x49\x9e\x4d\x2e\xf0\x3b\x68\xed\x75\x59\x2d\xe7\xfc\x1d\xb5\x0f\xff\xdc\xc0\x7f\xcb\x55\x73\x9e\xaf\x2a\x76\xb1" + - "\xb1\xa3\x02\x95\xe5\xd2\xb9\xe5\x9c\xfe\x7d\x78\xf6\xb0\x6f\xef\x96\x61\x6f\xb8\xdb\xbf\xe9\xff\x61\x14\xba\xdc" + - "\x20\x89\x7d\x57\xad\x0c\xd1\xb0\x30\xf1\xfb\xc7\x8e\xc2\x90\x1b\x27\x2c\xcd\x19\x6c\xc2\xe2\xb5\x9e\x9a\x67\xe0" + - "\xe5\xce\xa4\x08\x3f\x72\x0e\x29\x7c\x59\x3a\x80\x04\x59\x18\xa8\xb3\x0f\xe5\xaa\x40\x22\x50\x1f\xc3\xac\x7a\xdf" + - "\x03\xb6\xa0\x40\x68\xb1\x14\x64\xa1\x0b\x3d\xcb\x8a\x19\x41\xa9\xa8\xbd\x3d\x90\x49\x97\xba\x6a\x38\x7f\x14\x89" + - "\xa4\xb0\x04\x53\x3d\x31\x43\xcc\x2f\x57\x95\x4b\x82\x30\xd3\x85\x7a\x99\xae\x75\x95\xd6\x0f\x14\xc3\x26\xa8\x3c" + - "\x3b\xaf\x34\x85\x3b\x41\xb4\x3d\xd5\x96\xa5\x46\x63\x9a\x3a\x1f\xbe\x6b\x68\xc9\x51\xe1\x30\xcb\xcb\x73\x9d\x8f" + - "\x31\x84\xb0\x9d\x11\xda\x4b\xae\xf5\x80\x21\x55\x38\x86\x2b\xcc\xf7\xc9\x0c\x26\x16\x7a\x7b\xfe\xcb\xab\x62\x80" + - "\xe3\xc4\x20\xa3\x81\x67\x3d\x71\xf4\x03\xd5\x0c\x7c\x69\x52\x28\x2d\xcd\x24\xd3\xb9\x6b\xca\x89\x33\x6e\xf7\xd4" + - "\x56\x02\xcf\x66\xf6\x26\xf4\x9c\xe9\x0b\xa1\x86\x0f\xd9\x2f\xe9\x91\x8e\x49\xe4\x31\x69\x03\xaf\x40\x53\xaa\xa2" + - "\x84\xcf\xad\x38\x64\xae\x9a\x11\xc1\x7e\x50\x38\x68\xef\x7c\xd5\x50\x4c\x05\xba\x05\xb3\x83\xfd\xbd\x20\xd1\xf9" + - "\x0b\xa9\x4c\xec\xc4\xed\xb1\x82\x37\x24\x62\x2a\x30\x8d\x7d\x56\x88\x60\x6b\x48\x03\xe6\xec\x39\xf6\x5d\x9e\x99" + - "\x15\x2f\x22\xcd\x85\x6b\x91\xfe\x1e\xce\x23\xbc\x1d\x31\xf3\xea\x88\x4b\x1d\x8a\x57\x95\x7b\x0c\x85\x86\x41\x11" + - "\x91\x51\x55\x96\xe1\xc7\xd1\x70\x04\x4d\x66\x5c\x25\x6e\x03\xe3\x4b\x29\xb7\xcf\xab\x17\x03\x84\x1a\x83\x34\x6b" + - "\x45\x3a\xe2\x3c\x66\x8d\x77\x4f\xc2\x69\xe4\x51\xcd\x56\x59\x1a\x0d\x89\x1e\x3a\xe1\x64\xc6\xd1\xa4\x01\x30\x52" + - "\x91\x11\xf8\x01\x9e\xd2\x07\x35\x41\x9e\x58\x0a\x3b\x69\x40\xf4\x2d\x52\x70\xd0\xf4\x1b\x59\xa8\x89\x5d\x5a\x75" + - "\xdf\xa5\x1e\x6d\x12\x74\x03\x81\x38\x56\x7c\xe2\xe5\x96\x4d\x25\x82\x10\xc9\xb0\x3e\x82\x85\x11\x9f\x60\x77\xa2" + - "\x4a\x37\x15\x0b\xb9\xe3\xc0\x44\xfb\x02\x3d\x77\xd1\x6b\x0d\x59\x59\x9c\x02\x90\x2e\xe5\xf1\x67\x20\xa6\x1e\xd8" + - "\xb6\x5d\x05\x98\x16\x91\x33\x62\xc6\xc8\x3e\x5a\x2d\xf5\x0c\x2d\xe6\x2b\x00\x76\x61\x43\x29\x53\x66\xbc\xbb\xc8" + - "\xde\x6d\xc5\xaf\xe0\x72\xf3\xc0\x83\x41\x17\x28\xde\xc6\x00\x16\x88\x73\xcb\x0e\x4a\x5a\x9e\xda\x52\x5b\x06\x21" + - "\x47\xa2\x14\x82\x5f\x46\x39\x37\x3e\x46\xbb\x83\x66\xd3\xb9\x4b\xd0\x2a\xf9\x98\x88\x73\x40\x25\x65\x4f\x72\x20" + - "\x78\xce\x78\x01\xc9\x28\x92\x44\xf5\x37\xb9\x86\xdb\x97\xa8\x87\x6f\xe8\x0e\x0f\x1c\x6a\x58\x60\x6c\x5a\x02\x63" + - "\x78\x33\x0e\xcd\x95\x99\x50\x93\xa7\xcd\x19\xfb\x9d\x07\x92\x2a\x13\x3f\xdb\xce\x62\x79\x7a\x40\x6f\x3d\x7d\xc4" + - "\x5e\x2f\x96\xa7\x8f\xce\x5c\xb7\xeb\x65\x9e\x59\x76\x7b\x08\x7f\x94\x55\xd3\x8b\x3c\x2a\x2a\xa3\x1e\x2e\x56\x75" + - "\xf3\x10\x02\x6e\x99\xe6\x96\x44\x2c\xc1\xdb\x9e\x1b\xd8\x83\x40\x07\xa6\xcf\x5e\x7a\xdd\x96\x2a\x12\xc4\x39\xcd" + - "\x0a\xc6\x23\x15\x5a\xe3\x57\x53\x86\x22\x02\xcb\x5d\x0d\x39\x56\xb0\xc1\x15\xfb\x3b\xe3\x2d\x10\x02\x79\xb1\xc6" + - "\xca\x38\xff\x46\x52\x93\xb8\x5b\x43\x80\x0e\xc0\xb6\xa1\xc7\xa4\xab\x24\x5f\xf7\xc3\xa0\x27\x8e\xe8\xd1\xe6\x19" + - "\xf8\x38\xb9\xa8\x17\x7a\x99\xb1\x42\x85\xc3\x13\x08\xc7\xd8\x75\xc3\x19\xbc\x5c\xad\xc7\x5c\xc9\x30\x35\xb9\x99" + - "\xe9\x06\x25\xb8\xb1\x7b\x7c\x9e\x15\x29\x62\x4b\xd8\xde\x91\x5a\x82\xfb\x47\xc0\xb5\xdc\x0f\x17\xf9\x84\xd1\x97" + - "\x95\x01\x07\xd0\x7f\x73\x0e\x1c\xa9\x07\xb6\x59\xd7\x35\x5b\x5e\xe3\xd9\x0f\x6f\x18\x89\xef\xe0\x54\xb9\x34\x05" + - "\x63\x9c\x27\x7c\xc0\xdb\x75\x1c\xdd\xda\xe4\xaf\x27\x9c\x80\xa8\xa1\xb1\x23\xce\xf8\xd8\xd2\x7a\xf7\x0c\x28\x3f" + - "\x03\xa4\xd3\x24\x8f\x7d\x82\x6e\x7c\x61\xa5\x37\x86\x00\x1d\x07\x79\xc0\x3d\x24\x45\x85\x27\x79\x28\xcb\x92\xc3" + - "\xae\xe7\x6a\xb8\x3e\xde\xf9\x63\xc1\x85\x0c\x7f\x29\xb3\xa2\x97\x0c\x13\x74\x67\xfb\x38\x90\x97\x66\x60\xb1\xf4" + - "\xf7\x52\x00\x4b\x47\x46\x28\x06\x14\x0d\x6e\x1f\xbe\x2e\xdc\xce\x3f\x22\x7a\xc5\xcb\x28\xf4\x66\x1b\xcb\xc8\xc4" + - "\x4e\x5c\xc8\x6d\xc3\xe7\xa4\xfc\xdb\x97\x0a\x62\x70\x8d\xb6\x67\x30\x46\xe3\x62\x38\x89\xe0\x44\xd4\x6e\x28\x51" + - "\xf2\x5c\xaf\xe8\xe3\x5d\x5e\x9b\x66\xb5\x84\x8c\x3f\xf2\x41\x60\xfb\x41\x8e\x52\x72\x79\xf2\x12\x94\x19\x31\x85" + - "\xf3\xa2\xf3\x84\x6c\x75\x58\x38\xff\x75\x16\x60\xe5\x68\xc0\x9f\x4a\x7c\xb1\x38\xc5\x8f\x0b\xf6\x01\x20\x7c\x1a" + - "\x86\x4e\x85\xd7\x80\x78\x18\x8c\xcc\x9f\x99\x48\x7d\xbe\xed\xde\x0c\x3b\x79\x1f\x71\xdc\x86\x11\x1f\x24\xff\xec" + - "\xf4\x1a\x64\x4c\xd6\x32\xe2\x88\x78\xc9\x30\x15\x0e\xef\x86\x1a\x05\xf9\xb2\x10\xbb\x2f\x4e\xe6\x2f\x36\x11\xa7" + - "\xa4\xeb\xde\x55\xbb\xbb\x00\x21\x13\x0e\xbb\x65\xec\x76\xdf\xa2\xb9\xbb\x5d\xda\x0f\xe4\x4f\x41\x6e\x6b\x74\x84" + - "\x73\x3b\xf0\x12\xce\x55\x85\x3e\x3b\x96\xd1\x1c\xa0\xff\x1c\xb2\x3d\xcb\x26\x5b\x64\xbf\xfa\xb0\xb6\x80\x34\xa2" + - "\xe4\x23\x8e\x4b\x04\xbd\x25\x01\xe3\x41\x64\x70\x8c\x51\x59\x61\xfc\xed\x94\xfb\x01\x8a\x47\xef\x45\xd8\x19\x51" + - "\xda\x2d\x49\x39\xda\xa5\x16\x7a\xb9\x34\x70\x19\xd4\xa1\x40\xf5\x0b\x4a\x3c\x30\xb9\xff\xab\x42\x54\xec\x91\x4f" + - "\x6e\x33\x9b\x24\xac\x48\x1a\x02\x0c\xa5\xbb\x19\xe8\x4e\x61\xe9\x6d\x31\x41\x95\x9b\xb1\xf3\x6e\x3b\x3f\xf4\xea" + - "\x03\x32\x90\xd4\x87\xb8\x72\x84\x12\x52\x2e\xb2\x86\xc0\x08\xfe\x3f\xc5\xbc\xfd\xb9\xb0\x3c\x84\xbf\xb0\x6b\xd5" + - "\x2b\x0b\x42\x47\xe1\x6a\x41\xce\x61\x18\x81\xbe\xe3\xa3\xfc\x6e\xed\x66\xe1\x10\xff\x02\x9e\x65\x05\xd7\xde\xb2" + - "\xe4\xe1\x61\x0a\xcd\xc3\x64\xe9\xc0\xb9\x50\x8d\x3a\xeb\xdc\xf1\x1d\x5e\xcf\x1b\xd8\xc6\xdf\xc9\xdc\xfc\x07\x79" + - "\xb1\x5b\x6f\x58\xb9\xc0\xb0\x23\x68\xe5\x76\x76\x20\x30\xf1\x27\x33\x7b\x79\xb5\xec\xa9\xa4\xf7\xf7\x9b\xf7\xef" + - "\x87\xfd\x44\xed\xb6\x39\x88\xf7\xef\x87\xbd\xe3\xf1\xf0\xe1\xfb\xf7\xc3\x9b\x7e\x02\xde\x51\x3d\xfb\xfb\x0f\xfd" + - "\x24\x60\x23\x28\xd7\xa3\x8b\x7e\xf5\x60\xbc\x5b\x8e\x3a\xd8\xf9\xf1\xb7\x43\xdd\x19\x90\xfa\x8b\x0c\x48\x95\xfc" + - "\x1c\x7f\x75\xaa\x7e\xf1\x59\x66\x70\x5f\xf4\x02\xe2\x74\x73\x23\xf6\xf1\x91\xd0\x16\x0c\xdd\x63\x4b\x2b\x68\x97" + - "\x78\xc9\xde\x7e\x18\xde\x63\xc1\xc7\x74\xf7\xc9\x0f\xed\xa4\xda\xa5\x58\x2c\x89\x37\xf3\xa5\x3d\x39\xe8\x47\x1f" + - "\xb9\x05\xb7\xfc\x86\xd3\x69\x04\x4d\x6d\x2c\x92\x3c\x7c\x08\x86\xec\x8e\xa2\xfd\xd6\xbd\x2c\x6e\xc2\x5f\x38\x31" + - "\xab\xe4\x4c\x3a\x2b\x71\x6c\x49\xf7\xe5\xe9\xf3\xa2\x7e\x94\x55\xf1\x16\x25\xe5\x89\xa8\x26\x7c\x73\x0b\xe3\xb1" + - "\x99\xa5\xf1\x9b\x0b\x3c\x5f\xb2\x49\xc4\xa9\x02\x8f\x4a\xae\x51\xa9\xaa\xcb\x85\xe1\x14\x9f\xa9\x15\x11\x17\xe8" + - "\x45\x4f\x67\x04\xfc\x7b\xb9\xda\x9e\xbe\x2c\xb3\xb4\x56\xcb\xb2\x31\x45\x63\x0f\x30\xd0\x74\x5b\xb4\xae\x39\xc9" + - "\x72\x59\xa8\x74\x05\x91\xe9\xd0\x84\xce\xed\xbd\xda\x2d\x01\xf6\x3d\xa9\xf2\x7b\x7e\x67\xc7\xed\xb0\x76\x44\x4d" + - "\xc8\x87\x36\x46\x57\x69\xb9\x2e\x24\x2b\xca\xcf\x42\x4f\x24\xc9\x87\x46\xea\x97\x6e\x5e\xd4\x81\xc4\x3a\x98\xe7" + - "\xd0\x13\xb0\x55\x4b\xec\x46\x4d\x2e\x52\x21\x85\xe9\xc4\xf3\xfa\xc9\x3b\xa9\x71\x30\x2d\xc3\xc2\x16\xa5\xca\xcb" + - "\x62\x66\x2a\x60\x85\xee\x7d\x76\x2b\xe6\x92\x23\xe8\x51\xd4\x76\xd4\x55\xec\xc3\x26\x47\xa0\x04\x6b\x49\xda\x68" + - "\xf2\xa4\xde\x09\x58\xa0\x4b\xb0\x71\x22\xaf\x8f\xdf\x97\x45\x7e\xfd\x3d\x6f\x9e\x80\xed\xc9\x06\x6a\xb2\xaa\x90" + - "\xe1\x51\xe7\x60\xee\x78\x87\xf2\x77\x81\x53\x3a\x27\xb6\x9d\xd9\x1d\xcf\x15\xfd\xa8\xc1\x1f\x11\x9d\x06\xc0\x4d" + - "\x8a\xf1\xc4\x29\xba\x8b\x6e\x87\xb9\xae\xdf\xfa\x95\xc7\xce\xa1\x29\x0f\x22\x36\x49\x4d\x85\xb7\x04\xbe\x6e\x5f" + - "\xd7\x9d\x75\xb8\x12\xb2\x22\xcf\x29\xe0\x8d\x6e\x85\x47\x35\xc6\x1b\xc4\xd6\x3b\x59\x55\x78\x85\x70\xd8\xd9\x51" + - "\xab\xff\xb1\x2e\x3b\x2d\x79\x15\xed\x9d\xcf\x99\x5a\x03\x0d\xf6\xbd\xcf\x36\x86\x8c\x3d\x66\x93\x76\xf8\xf8\xab" + - "\xdb\x79\x33\xb0\xef\x8c\xce\xf3\x55\x65\x8f\xfe\x12\x43\xd8\xc9\x02\x34\x2a\x57\xcd\x21\x3b\x1a\x75\xa5\x15\x5f" + - "\x50\xfa\xf0\xa2\x5c\xbb\x8e\x09\x83\x12\x91\x79\x62\x1f\x36\x68\x0b\x6f\xe3\x1d\x9d\x13\x88\xf7\xfb\xb6\xb3\xfc" + - "\x8d\x0c\x08\x1b\x8d\xd4\x1b\x5e\x8a\x54\x51\xbd\x87\x0e\x6a\x42\x55\x66\x66\xae\x96\x76\x54\x70\xd9\x12\x0d\x62" + - "\x36\x08\x77\x1d\x65\x3b\x09\x76\x02\x34\xeb\x97\x36\xe0\x43\xc4\xb5\x1f\xf8\x85\xca\xe7\xcc\xd9\xd1\x81\xc7\x6d" + - "\xce\xf5\xba\xe1\x8c\x93\xbe\x7a\xaa\xf6\x2d\xd9\x4b\xca\x22\x21\x2e\xeb\xf0\x56\x3b\x03\xcf\x24\xda\x8a\xd8\x91" + - "\xf1\xad\x77\x68\x44\x17\xe9\x42\x0e\xd5\x47\x3d\xb3\xbd\x08\xfe\x3d\x8d\x71\x3d\xcf\x48\x65\x8b\xa5\xd0\x7b\xcd" + - "\x32\x3f\xb2\x49\x96\xb6\x49\x41\x4c\x15\xca\xb0\xb4\x9d\x1d\x7a\xda\x91\x86\xe0\x3c\x6b\x16\xba\xbe\x18\xab\x1d" + - "\x75\x80\xa0\x9d\xba\xc9\x2e\xfd\x9d\x73\xa8\x76\xd4\x23\x78\x41\x9a\xe7\x1e\x79\xf3\x5a\xfe\xb2\xef\x46\x30\xcc" + - "\x6a\xae\xf1\x28\x24\x3b\xc7\xea\x91\x1a\xab\xc7\x87\xbe\xa8\xb4\x55\x76\xe9\x7c\xba\x8a\x7e\xa8\x0c\x4f\x92\xf8" + - "\xfe\xd8\x4d\xc8\xbf\xcf\x0d\xf2\xec\x7a\x60\x66\xbb\xde\xb9\xd1\x05\x3b\xe1\x92\xde\x1e\x11\xca\x30\x20\x1c\xfd" + - "\x82\x55\x65\xf8\x46\x60\x7e\x1d\x42\xcf\x62\xcf\x27\x92\xe1\xf0\xc4\xe9\x6a\x66\x9a\xd0\x28\xc1\x0f\x8f\xbc\x2b" + - "\x8c\x30\x71\x81\xc5\x1f\xd2\xa7\x14\x93\x72\x01\xe8\x71\x1c\xce\xbc\xac\xcc\xd2\x10\xe4\x1c\x51\x49\x38\x70\x8c" + - "\x8b\xe1\xb2\x35\x54\x33\x97\xb8\x3c\xc4\x04\xa0\xac\x90\xd0\x97\x53\x1a\xe9\x19\x4d\x49\xcb\xcf\x9e\xee\x18\x5f" + - "\x4e\xec\xab\x67\x08\xbd\x1f\xea\xb2\x9a\x52\xa5\x95\x5e\xab\x72\xd5\xd4\x59\xca\x39\xcd\x0b\xa4\x9f\xbf\x5b\xfc" + - "\xc0\x69\x0c\x36\xd9\xce\x8e\x67\x39\x68\x1b\xb6\x1f\x85\x06\x0e\xf2\x81\x6d\xb3\x1b\x9d\x74\xd9\xa1\x39\xd3\x98" + - "\x97\x55\xb9\xd4\x33\xc4\xcc\x00\x2c\x0d\x4b\x09\xd2\x4b\x5d\x58\x79\x70\x69\x2a\xf5\xf3\xe3\xe7\xce\x0c\xb2\x34" + - "\x13\xd5\xbb\xff\xf5\xd7\x9f\x1f\xf4\xa9\x3a\x74\x30\x80\x8d\x55\x8a\x8c\x21\x0d\xf8\xe0\x30\xc0\xff\xa1\x5a\x03" + - "\x89\x44\x80\x5b\x54\xa8\xa8\xc0\xa3\x49\xd9\xab\xbc\x77\xff\xeb\x2f\x1f\x3d\xe9\x6f\x9e\x19\xc7\xa1\x15\x25\xb5" + - "\x6b\x1f\x3a\xb6\x05\xbd\x77\x9c\x1e\xc2\xfb\xca\x7b\xb6\x40\x1d\x75\x8b\x77\x81\x24\x47\x09\x31\x5a\xf7\x8d\xa8" + - "\x66\x97\x3d\x3d\xbd\x21\x03\xae\xe5\xc9\xaa\x1a\x2e\x75\x65\x8a\xe6\x4d\x99\x1a\xc1\x97\x39\x40\xf1\xc9\xaa\x82" + - "\xff\xb4\x0a\xfb\xaa\x1c\x73\x42\x5a\x2f\x5b\xba\xef\x9d\xfa\xf0\xcb\x96\xfe\x0b\xd4\xb2\x3a\x4d\x69\xce\x89\x1f" + - "\x9f\x95\x8d\x5c\x19\xd5\x33\xc3\xd9\x70\x80\xee\x04\x6c\xa8\x56\x60\xd8\x68\xf4\x64\x6e\x52\xf5\xe2\xed\x6b\xc1" + - "\x3f\x43\x73\x47\x47\x18\x33\x1b\x3a\xa1\x49\x86\xa3\xbf\xb9\xf3\x56\x2a\x63\xb7\x96\xcc\xac\x59\x50\xc3\x71\xe3" + - "\x8a\xd9\x67\xd4\xe9\x6e\x68\xda\xef\x32\x29\x3b\x94\x85\x20\x62\x76\xcb\xc2\x86\x21\x2d\xb5\x97\x60\x7b\x38\xc9" + - "\xae\x3f\xa7\xd9\xee\xee\x19\x68\xa7\xb6\x99\xd0\xff\xe8\xf7\xfe\x49\x53\x5a\xd1\xb5\x27\xb7\x8d\x60\xec\x8e\x54" + - "\x86\x79\xf5\x70\x90\x62\x27\x10\x2c\x47\x4b\x3b\xd0\xb6\xd3\xd0\xb5\x23\xcc\xf4\x5b\xce\x54\xdb\x8b\x55\x66\xc0" + - "\xd3\x7a\xae\x19\x89\x86\xea\x9f\x4a\x6e\xf3\xac\x43\xd5\x86\xdf\x61\xbd\xa1\xdb\xa8\x93\x4b\x02\xa1\x9e\x49\x09" + - "\x7c\x27\xa3\x89\xc4\xce\x7a\x13\x5c\xa4\x61\xc7\x89\xfd\xd8\xd9\xb1\x35\x9c\xf2\x9f\x67\xed\x76\x9d\xb8\x8c\x2d" + - "\x0a\x3b\x8b\x87\xed\xa6\xad\x1e\x6d\x26\x7f\x09\xdd\xd1\x65\x62\x60\x83\x6f\x3a\x64\x30\x2c\x40\x11\x32\x2f\x70" + - "\x6b\xf6\x3a\x62\xa8\x3e\xfa\x6b\x50\xb0\x58\x11\xc8\xf5\x79\x99\x5e\x73\xb4\x8d\x49\x39\xed\xa9\xad\xd2\xa5\x99" + - "\x4f\x01\x73\x45\xb2\xb2\x6d\xc2\xc6\x3b\x92\xba\xf3\x23\x57\x18\xec\x47\x54\xb2\x38\x22\xf8\x81\x1b\x12\x62\x2a" + - "\x3f\x73\x37\x84\x3f\x8d\xe5\xb2\xd7\x6f\x5f\x16\x5e\x29\xd2\xb1\x1a\x2d\x42\xca\x9c\xa3\xd2\xcc\x5d\xbd\x78\xfb" + - "\x9a\xd1\x43\xe9\x5c\xd2\xd5\xef\x61\xdc\xf4\x82\x5c\x31\xe1\x3f\xba\xf6\xa7\xd7\x47\x9e\x3a\x39\x25\x9c\x3c\x38" + - "\xec\x48\x1a\x30\x3b\xcc\x03\xc6\x53\xa5\x4b\xe4\x52\x57\x99\x06\x0f\xb7\x73\xa3\x7a\xf7\xbf\x38\xf8\x72\xbf\x2f" + - "\xf6\x82\xdf\x9d\x1d\x89\x35\xec\xe8\xdc\xa5\xdc\xff\xc4\xab\x44\xf4\xb6\x32\x7b\x8d\x4b\x81\xa5\xca\xe2\xbb\xb7" + - "\x6f\x89\x28\x81\x7f\xc4\x1a\xfd\x8d\xc1\x6e\xfd\xdd\xdb\xb7\xbd\xbe\xcb\x28\xb5\xe5\x09\x39\xf6\x41\x9c\x1a\xa9" + - "\xce\xb1\x45\x22\x0b\x95\x2f\x1b\xe7\xf0\x96\xfd\xa3\xed\x23\x7a\x48\x38\x8e\x6e\x3d\x88\xb7\xaa\x01\x0b\x71\xed" + - "\xb3\xac\x21\x61\x4b\x21\x19\xd1\xb9\x43\x3c\xdc\xda\x20\x62\x49\x0f\x79\xee\x1f\xf6\xce\x9d\xa7\xcd\x9f\x86\xbe" + - "\x8b\x9f\x3e\xea\x66\xb1\xdc\xa4\xa7\x8a\x43\x68\x24\x29\x90\x58\x40\xe4\x27\xd2\xd2\x39\xf8\x75\x66\xd7\x25\xad" + - "\x1c\xbc\x7c\x20\x1c\x39\x98\x00\x3a\x06\x46\x88\x4c\x52\x18\x0a\x46\x3f\xcd\xae\x7a\x91\xfc\x42\x1a\x8c\x5f\x06" + - "\xaa\x32\xcd\x80\x10\x29\xd2\x96\xa9\x86\x48\xef\x7f\x53\x38\xcf\x29\xa3\xcf\x54\xb3\x3b\x53\x07\x0b\xb5\x74\xeb" + - "\x92\xc1\xf8\x96\x3b\x6f\x19\xd0\x5f\x07\x36\xa3\x8d\x2c\x6e\xfc\x9d\xcc\xaa\xce\x30\x75\xd3\xec\x6a\xcf\xa4\xe1" + - "\x7c\x56\x1a\xa0\xab\x9b\xb9\x46\x22\xd2\xb3\xdb\x11\x5c\x48\xfa\xc1\x14\xdb\xaa\xec\xa8\x4f\xf7\xcf\xf8\x6e\x17" + - "\x42\x96\x63\xe9\x58\xfa\xa0\x7c\x91\x42\xe6\xa5\xa0\x4d\xf3\x82\xf6\x00\x44\x39\x39\x53\x07\xea\xaf\x49\x0c\xb5" + - "\xf2\x48\x6e\x20\x87\xd8\xb9\xce\x72\xcb\x50\xa5\xa6\xce\x2a\xa1\x31\x63\xb2\x2b\x2b\x14\xec\xba\x78\x4c\xcb\x83" + - "\x33\xce\x9b\xed\x77\xb3\xec\xd2\xcb\x22\xda\x13\xc1\x7a\x38\x45\x67\xab\x55\x6f\xed\x93\xb2\xce\x4f\xab\x42\x58" + - "\x79\xc1\xc1\xe0\xd0\x4e\xc8\x35\x98\xcd\xd6\xba\x60\xb0\x84\x65\x20\x2f\x9c\x9b\xc2\x58\x91\x61\x55\x6f\x60\xc1" + - "\x68\x3f\x7b\xb3\x01\xf4\xf6\x14\x92\xe9\x7c\x32\x2f\xe6\xae\x6c\x8a\xa1\x74\xab\x4b\xb5\x0f\x49\xc6\x44\x11\xcf" + - "\x75\xc2\xf7\x42\x9a\x2f\xf8\x1b\x61\xc6\x68\xf7\xe5\xd5\x62\x61\xd2\x4c\x37\xe6\x0e\x06\x51\xa8\x1f\x0c\xfb\xd0" + - "\x01\x6e\x39\x02\x2a\xab\x83\x3e\x9a\x9e\x8b\x52\x1a\xd9\xca\xca\x7d\xfc\x88\x0b\xf0\xdb\x5e\xdd\x57\x5a\xd5\xab" + - "\x73\x06\x6e\xfe\xe7\x4a\xe7\x68\x9f\x2f\x6b\xb4\x69\xce\x0d\x65\x5b\xc4\xf6\x7a\x80\x45\xeb\x00\x93\x65\x53\x7d" + - "\x09\x72\xb0\xdd\xa1\x87\xb8\xb9\x89\x15\x11\x1f\x2a\x73\x87\x0d\xc5\x5f\x84\x72\xab\x49\xdb\xd0\xdb\xf3\x5f\x0e" + - "\x83\x22\x24\xa0\xfb\x1a\x53\x4e\xd1\xb2\x45\x6e\x81\x40\x9c\x7a\xdd\x24\xa5\xc3\x6e\x44\xa4\xa5\xcf\x5a\x72\x67" + - "\x31\x12\x3e\x10\x3e\x11\xf0\x16\x33\x43\x72\xbf\x80\x5f\x60\xdd\x32\xc6\xd8\xbe\x6c\x82\x7b\x20\xfe\x2b\xe2\x49" + - "\x2b\xd3\x74\xab\xfa\xef\x60\x34\xdd\x7b\x7b\xaa\xc4\x3e\x13\x05\x3e\xde\x75\xcd\x05\x34\xad\xac\x9b\x3b\x89\x5a" + - "\x9b\x70\xc9\xaf\xb8\xef\x5d\x2f\xbb\xe8\x57\x47\xd0\xea\x86\x1b\x97\x4f\x5b\x87\x96\x7f\x1e\x68\xf5\xdd\x8d\x48" + - "\xd8\x4c\x60\x07\xfe\xd4\xeb\x30\xf6\x5a\xea\xb6\x9d\x51\x58\xa3\x17\x0e\x49\x59\x75\x28\xc4\xcd\x22\x75\xe4\x30" + - "\xa0\xb9\xa3\x91\xfa\x36\xd7\x93\x8b\xbd\x79\x99\x1b\x75\xf2\x97\x3f\xaa\xa7\xab\xda\x7c\x03\x69\x95\x34\xe6\xa7" + - "\x34\xa6\x56\xbd\xfb\x07\x8f\x0f\xbe\xda\x67\x1d\x09\xc2\xa0\x16\x65\xb1\x97\x9b\x69\xb3\x07\x31\x12\xc8\x69\x01" + - "\x2a\x6a\x01\xf2\xed\xb4\xbc\x52\xbd\xfb\x8f\xbf\xfa\xe2\xc0\x2b\x40\xc2\x01\xa1\x8c\xe5\x95\xf0\x3b\x3b\xaa\x47" + - "\xa7\xfa\x7c\xd5\x34\x65\xe1\xcf\xb3\x0f\x6c\x84\xc6\x12\x79\x70\x85\x22\x02\xb3\xcc\xda\x3b\xb2\x5b\x23\x61\x65" + - "\xd8\x79\x56\x47\x14\x0f\xb9\xdf\x65\x55\x42\xaa\x07\x68\x00\xf8\xf4\x34\xab\x35\x30\x8f\x2e\x06\xb3\x77\xff\x8b" + - "\xaf\x0f\x0e\x06\xea\xfe\x57\x07\x5f\x7c\x3e\x50\xf7\x0f\x0e\x1e\x7f\xf5\x08\xfe\xfd\xf2\x8b\x27\x92\x4f\xb7\xed" + - "\xba\xcf\x5d\xea\xdb\x8d\xc3\x11\xa7\x8c\xf6\x89\xf4\x62\x73\x89\xff\xec\x4d\x00\x09\xdc\x82\x79\x8c\x52\xb9\x6d" + - "\xb2\x6e\x67\x92\x1d\xf7\xc3\x9e\x94\xc5\x34\xcf\x26\x24\xdf\xb8\x9c\x5c\x9c\x64\x4a\x60\xd9\xd8\x4d\xf0\x68\xff" + - "\xb1\x23\x43\x35\xc0\x70\x77\x58\x7b\x77\x55\xa2\x12\xd1\x16\xcc\x08\x8d\xeb\xd4\xee\x7f\xcb\xf6\x6e\xa2\x49\x5b" + - "\x71\x41\x49\xb8\x85\xd7\xa2\x07\xb2\xf6\xe9\x73\xe1\x68\xe1\x02\xa3\xe1\x80\xe5\x6f\xb0\x83\x8c\xe3\x0f\x86\xd3" + - "\xac\x48\xc5\x57\x8c\x52\x73\x0a\x5f\x9d\xa9\x7e\x04\x0e\xe8\xc1\xee\xba\x46\xd4\x31\x86\x4d\x4e\x5e\x1d\x70\x79" + - "\xb2\xc6\x96\x35\x37\x24\x10\x58\xeb\x6f\xb0\x2b\xc7\xa8\x34\xf0\xe4\x88\xb7\xcf\xc7\x8d\xb6\x6f\x49\x6c\x39\x7f" + - "\xb9\xcf\xd0\xde\x43\x58\xcd\xfc\x7a\x0f\xee\xe4\x7e\x40\x2d\x3a\xce\xf0\xd3\xd8\xeb\x22\x0e\x61\xe8\xe8\x32\xce" + - "\xb5\xef\xb3\x77\x2b\x40\xaf\x82\xb0\x85\xbe\xea\x04\xdc\x93\xd5\x1f\x06\x5e\x6b\xaf\x8a\x49\xbe\x4a\x4d\x0d\x26" + - "\x7b\xa1\x14\xae\x55\x3d\xd7\x94\x14\xf7\x4f\x1c\x19\x66\x79\xe2\xd7\x2e\x20\x0c\xe3\xc9\x97\xf5\x58\x25\x3a\x6f" + - "\xfe\x64\x58\x7e\x04\x40\xc7\x89\xc9\x41\x6e\x9a\x34\x15\xc0\x5b\x85\xdc\x1b\x2a\x26\xe6\xba\x86\xc4\x75\xda\x16" + - "\xa8\x4c\xae\x1b\x93\x52\x01\xb0\x7f\xd9\xc7\xa4\x4f\x68\xb2\x85\x39\x69\xf4\x62\xa9\x2e\x33\xb3\x46\xff\xbe\x84" + - "\xed\x68\x2a\xe9\xe3\x78\xa6\xd9\x15\xa1\x6a\x70\xa0\xd2\x85\xb9\xe6\x27\x76\x3a\xb8\xbf\x93\xb9\xae\x94\xfd\xcf" + - "\x73\x4b\xe8\x2e\xcc\xb5\xfd\xbf\xfd\x1d\xd5\xb9\xb5\x85\x11\xc2\x1d\x37\x97\x65\x47\xb2\x42\xe7\x6d\x50\x16\x74" + - "\x3e\xb4\x64\xc8\x56\x2c\x5c\x70\x84\x82\x0a\xcb\xb0\xbd\x22\xd2\x78\xd1\x4b\xd7\xc4\xd0\xf5\x74\x9b\x0d\x1c\x1d" + - "\xef\xc6\xfe\x19\x0d\x26\x54\xe5\xc9\x3b\x3a\x36\xc3\x43\x4c\x5f\xd7\x44\xd1\xd5\x82\xff\x00\xb9\x37\x45\xf3\x57" + - "\xfa\xf7\x6f\xaa\x9c\x4e\x6b\xd3\xfc\x95\xfe\xfd\x1b\x84\x7e\xfc\x15\xfe\xfb\x37\x55\x4f\x2a\x63\x8a\xbf\xd2\xbf" + - "\x7f\x53\x4d\x49\x91\x71\xff\xea\x1c\x13\xaa\x05\xf2\x53\xe5\x64\xa0\x52\xfb\x9f\xf3\x32\xbd\x26\x1f\x6c\xea\xac" + - "\x98\x38\x7c\x22\xb4\xb0\xcf\x75\x3e\x59\xd9\x8d\x86\x5d\x1d\xfd\xcd\xca\x75\x8b\xac\xae\xd9\x57\x85\x46\x38\xfa" + - "\x9b\xd2\x97\x3a\x83\x3d\x1c\xaf\x1d\x0e\x92\xd7\x6e\x67\x47\xac\x05\x4d\xcf\x76\xe7\xba\xbe\x28\x27\x11\xd3\xb1" + - "\x59\xa5\x4e\xf4\x28\xf5\x9f\xbc\x28\x27\x43\x7e\x2b\x42\x0c\xed\xb0\x4b\x48\x48\xef\x4a\xd9\xbf\xdd\x85\x12\x74" + - "\xb9\xdd\xd3\x5d\xcc\x57\x0d\xaa\xe4\x72\x32\xac\x27\x55\x99\xe7\x3f\x98\x29\x74\x06\x2a\xde\xd9\x81\x7f\xa3\x57" + - "\xfb\xaa\xaf\xf6\xc2\x6f\xb1\xca\xce\x6f\xc3\x57\xfb\x8e\xb2\xfb\xce\xfd\xad\xdd\xb9\xbf\x75\x77\xee\x5d\xb9\x54" + - "\x1b\x3a\xc7\xaf\x36\x76\xae\xf3\xdb\xf0\xd5\x7e\x87\x06\x3c\x3c\xd4\xc0\x84\x8c\xd5\x01\xdc\xca\x96\xa5\x3b\x54" + - "\x8f\xe0\xf7\x22\x4b\xd3\xdc\x1c\xaa\xc7\xf0\x17\xb8\x30\x70\x0d\x6f\xca\xc6\x8c\xe9\x14\x31\xde\x68\x51\x56\x0b" + - "\x48\x03\x92\x0e\x54\x5d\xaa\x14\x18\x0c\x4c\x73\xe1\x77\xdc\xb6\xa4\x08\xb6\xc7\x58\xc5\x06\x21\x25\x24\x1f\x3d" + - "\x2e\xbd\xa3\x0e\xd4\xb1\x3a\x80\xdc\x15\xee\xd1\x23\x75\xac\x1e\x87\x8f\x9e\x90\x91\x7b\x3f\xca\x4a\x7b\x27\xf9" + - "\x98\x66\x57\x1b\xb4\x69\xf2\xe0\x74\x78\x05\x44\x20\x39\x41\xe5\x2c\xe2\xb0\xc7\x85\x53\xc5\x79\x8c\xbf\x50\xf3" + - "\x46\xbe\x66\x34\xab\x78\xa1\x85\x59\x8b\x48\xba\x80\x2c\x82\x50\x4d\xe0\xe8\xe3\xb9\x4d\x7c\xcc\xfb\xf1\xa5\x74" + - "\x6d\x20\xc8\x32\xbc\x68\x18\xd9\x84\xef\x1d\xe1\x91\xe5\x86\xbe\xcd\x65\x9d\x5b\x70\xd7\x17\xea\x48\xb9\x3a\x71" + - "\x2d\x45\xe4\xb5\x74\x78\xe9\xab\x63\x6c\xd3\x93\x6c\xe6\xd5\x5c\x04\x77\x67\x79\xbe\x09\xb9\xb4\x0c\x3c\x84\x19" + - "\x75\x3d\x18\xe2\xfd\x4f\xdf\xc1\x1f\x2e\x01\x4d\x58\xa4\xcf\x89\xae\xe0\x4f\x1a\x35\x2b\x3f\xdb\xfe\x1d\xe1\x84" + - "\x3a\x8f\x70\x2b\x79\x94\xcb\xeb\x2e\x77\x6a\x09\x9e\x02\x59\xf3\xb0\x28\xf3\xe7\xbc\xe5\x45\x86\xbd\xa0\x8d\x20" + - "\xd5\x9e\xc0\x44\xe6\x18\xff\xe7\x65\x95\x96\x97\x5a\x3d\x1a\x7e\xae\x7a\x88\x69\xd0\x47\xce\xfd\xf3\xcf\x9d\xf8" + - "\xe6\x7d\xa6\x29\xa9\x2b\x68\x5a\x34\x71\x26\x87\xae\x92\xd4\x5c\x66\x13\x83\x8a\x74\x02\x46\xb8\xf7\xbb\x9c\x25" + - "\x02\xda\xdf\xd1\x5b\xc2\x6a\xf8\x62\xb8\xbf\x3b\x50\xcf\xe7\x95\xdd\xdf\x4f\xd5\xa3\xaf\xee\x71\xb2\x37\xe2\x9c" + - "\x38\xf3\x2c\x45\xe9\x59\xf6\xbf\x80\xa4\x1d\xf7\x3f\xdf\x7f\x62\xe5\xaf\xc7\x07\x4f\x1e\xf7\xc3\xb3\xc9\x17\x52" + - "\xe4\xfa\xb5\xc9\xad\x43\x7e\x12\x19\xbc\x43\xc6\x93\xf7\x0b\x01\xad\x1c\x47\x0f\x5a\x37\x3d\x6d\x0d\x76\xa5\x13" + - "\xbc\x2a\xa9\x25\x88\x3f\xc9\x4b\x9d\x8e\xbd\xab\x16\x9b\x3c\xbc\x85\x21\x5b\xe8\x99\x19\xda\x62\x41\xf8\x85\x93" + - "\xbb\x9d\x77\x02\x94\x81\x7a\xd8\xad\x60\x0c\xf2\x27\x8c\x05\xd9\x93\x72\xb2\xaa\x45\x63\x60\x8f\x0e\x34\xff\xd9" + - "\xd4\xa7\x29\xab\x4b\x75\x9e\xaf\xaa\x11\x7c\xa5\x6a\xf3\xcf\x15\x00\xca\x66\x35\x23\x62\x20\x11\x68\xf9\x3d\x86" + - "\xde\xa8\x20\x97\x41\x70\x6c\x07\x08\xc1\xce\x0e\x91\x1d\x68\xc2\x0b\x3e\xfe\xa1\x57\x23\x45\x08\x07\x42\xb8\x09" + - "\xb5\x26\x18\x7e\x97\x30\x48\x84\x1f\xbd\x1d\x0c\x0f\xfe\x93\x7a\x7d\x74\x47\xaf\xc1\x29\x30\xea\xb4\x7d\xf6\xef" + - "\xf5\xb9\x5c\x35\xa2\xd3\x74\x47\xfb\x25\xb3\xf7\x36\x01\x81\x0c\xd4\xb4\xb5\x80\x75\x19\xa1\x97\x30\xd6\x8f\xbf" + - "\xc5\x3f\x65\xec\x43\x0f\x76\xc6\xad\x25\x6e\xdc\xa8\xf8\xf1\xc6\x48\x7b\xd4\xde\xe8\x85\x03\x1a\x73\x30\x37\xf1" + - "\xe4\xc0\x87\x9f\x38\x3b\xc1\x80\xab\xb2\xae\xf7\x28\x41\x35\xc0\x17\x42\x5c\xdb\xe4\x7a\x40\xcc\x86\x9c\x07\x6e" + - "\x45\x95\x85\xca\xb3\xe2\x02\x25\x16\x36\x28\x6f\xbc\xdd\x63\x90\x23\x3f\x28\x49\x23\x06\x2a\xd1\x49\xe8\xdd\x41" + - "\x7d\xc5\xf4\x62\x18\x28\xce\xeb\x25\x15\x8f\xb7\x18\xe9\x42\xe2\xc8\x4a\xb4\x47\xfb\xbb\xee\x25\x3f\x63\x98\x1a" + - "\x9d\x9b\xaa\xe1\x30\x45\xec\x37\x82\xc1\x4c\x33\x93\xa7\xcc\x97\xd5\xa6\x91\x9a\xf3\x40\xe1\xbb\xdd\x4a\xa4\x03" + - "\x6f\x63\xea\x15\xfa\x1a\x04\x6f\x87\xb2\xdd\xa3\x96\xc6\xb4\xed\x83\xc0\xe4\x2f\x5b\x80\xdc\xd2\x86\x6e\x23\xec" + - "\x2b\xa4\xa3\x28\x81\x0b\x18\xac\x1f\xb3\xd9\xec\x1a\xf2\x4e\x97\x85\xd2\x76\xe1\x5d\xe0\x5b\x53\x2a\xae\xd5\xbe" + - "\xc9\xa6\x00\x7e\x0d\x20\x95\x9c\x1a\xf6\x3b\x7d\x61\x22\xda\xdc\x94\x0a\x1c\xf6\xb1\xaa\x07\xb5\x8a\x34\xd8\x08" + - "\xe9\x8d\x93\x4c\xb5\x70\x2b\xa9\xd3\x2f\x10\x49\x66\x73\x7f\x43\x16\xf3\xb4\xf4\x36\x6a\xf2\x27\x80\x56\x5c\xf6" + - "\x57\xd3\x0a\x29\x46\xca\x1d\xb3\x1a\x7d\xe1\xe7\x8d\x3f\x37\x85\x1e\x67\xf5\x09\xf7\x0e\xe9\xbe\x08\x49\x76\x83" + - "\x1e\x53\xfa\xb3\x2d\x9f\x04\x0d\x37\x47\x38\xdd\x9d\xd6\xee\x9e\x32\xac\x2a\xf3\xb0\x5d\x61\x9c\x63\x37\x8c\x81" + - "\x0c\x35\x10\x18\x91\xbc\x2d\x6f\x71\x17\xb9\xdd\xf8\x20\xf2\xa8\x39\xb4\x17\x11\x91\xd0\x81\xab\x26\x3d\xe9\xa9" + - "\x05\xef\x2c\x2e\x3e\x8d\x03\x6b\x37\xbd\xef\xa9\xd0\x37\x5f\x84\xd4\xc6\x1d\x6b\x77\xa9\xae\x26\x03\xc5\xec\xe7" + - "\x6f\xa8\xc4\x42\x67\x4d\x54\xc3\x37\x19\x5a\x27\xd7\x59\x33\x2f\x09\x5c\xfe\x41\x61\xd6\x0f\xd4\x85\xb9\x5e\x97" + - "\x55\xca\xbd\xdf\xee\x21\xa8\x07\x29\xef\x1d\x26\x05\xb6\xd9\x8f\x70\x1c\xdb\xdc\xac\xec\x08\x75\x1d\x7b\xf3\x32" + - "\xf4\x06\x40\x8b\x4b\x05\xa2\x68\x5d\x4d\x86\x32\x7c\x0e\xe8\x7b\x2c\x67\xd4\xd5\xe4\xd0\xbd\x24\xd9\x84\x3f\xf4" + - "\x66\x8a\x97\x78\x84\x1c\x43\x43\xce\xbd\xce\xd5\x6f\xa1\xaf\x45\x4a\xa0\x85\xae\x00\xf9\xac\xf6\xde\x4a\x54\x0f" + - "\x40\x5a\xb8\x88\xdf\x72\x6d\x2a\x05\xd1\x2f\xe0\xcc\x53\x19\x73\xa8\x2a\x33\xcd\xad\x78\x05\xa8\x0a\xc8\xc3\x20" + - "\x7c\xf9\xd0\xf5\xb2\xbd\x17\xa9\xcf\x69\xfc\x98\xd3\xf6\x76\xbe\x8c\xf3\x94\xb5\xc9\xbc\x48\xac\x3f\xdc\xf7\x35" + - "\x05\x44\xd5\x59\xe3\x8e\x85\x6c\xf9\xce\x67\x08\x13\x30\x50\x87\xe1\x9a\x91\x91\x4c\x1e\xce\x68\x11\x82\x85\xfe" + - "\x71\xd5\x28\x73\xb5\xcc\xb3\x49\xd6\xe4\xd7\x2e\x76\x32\x4c\x27\xce\xd1\xd5\x1d\x9b\x42\xee\xe2\xae\x5c\xe6\xdd" + - "\xdb\xcb\x09\xc4\x4d\xb6\x30\x35\xe8\x44\xb3\xa9\x77\xa6\xc6\x86\xf8\xca\x83\x1d\x80\xa8\xc3\x38\x12\xa7\x47\x3d" + - "\x0a\xf6\xa4\x7b\xec\x61\xcd\x8b\x72\xdd\xeb\x0b\x78\xb5\xea\x02\xfc\x82\x6a\xcb\xc2\xc3\xee\xc1\xbc\x23\x2d\x99" + - "\xde\x85\x48\xe3\x41\x76\xae\x8f\x74\x96\xb3\xda\x63\x54\xbc\x78\xfb\xfa\x31\x6f\x64\x99\xdb\xda\x6e\x4a\x3b\x69" + - "\x2f\x9f\xbf\x7e\x76\x32\xa9\xb2\x65\xa3\x7e\xd0\xc5\x6c\xa5\x67\x46\x7d\x9b\x15\x29\xc4\x1c\x8c\x46\x6a\xde\x34" + - "\xcb\xf1\x68\xb4\x5e\xaf\x87\xeb\xc7\xc3\xb2\x9a\x8d\xde\xfd\x34\x7a\xb4\xbf\xff\x78\xf4\xf3\x8b\xbd\x17\x6f\x5f" + - "\xef\xfd\x60\x2e\x4d\xbe\xf7\x78\x0f\xdb\xd8\xb3\xaf\xf6\x1f\x3f\x3e\x18\x99\xc9\x42\xef\xd5\x50\xf3\xde\x39\x56" + - "\x38\x9c\x37\x8b\x3c\xa4\x3b\xc2\xb2\x73\x84\x54\xaf\xb5\xcd\xc7\x12\x54\x6c\x00\x45\xda\x5e\x03\x1d\x85\x6e\xf1" + - "\x31\x88\x4b\x83\x9a\x5d\xd2\xf1\x36\x0b\xca\x57\x63\x9b\x9c\x10\xbd\xd8\x7c\x48\xfd\xe9\x08\x20\xfa\x81\xb7\x89" + - "\xee\x0f\x7f\xb9\xdc\x72\xb1\xd8\xe1\x45\x1c\xc1\xbf\xde\xdf\xf6\xe4\xdc\xd5\xe3\xa8\x69\xd1\xe5\x6e\x43\x7b\xd0" + - "\xe7\xae\x45\xf9\xd7\x3b\x7f\xcb\x12\x7f\xca\x28\xba\x3e\x8f\x86\xd3\x55\xa4\x17\x98\x7f\x30\x0b\x77\xd7\xc8\x3f" + - "\x8a\xf3\x49\x14\x05\x34\x4a\x76\x5f\x54\xa3\xdc\xe8\x4b\x07\x7f\xb4\x02\xe5\x38\xbc\x2d\x2f\x4d\x35\xb2\xb7\xaa" + - "\x66\x0f\x94\x3d\x4b\x3a\x50\x78\xaa\xa1\x32\xaf\x5c\x41\x0d\xc5\xc1\xe7\xbb\x1e\x54\x4e\x4f\xe6\x00\x02\xe3\x9b" + - "\x1a\xab\xc4\xd5\x9c\x0c\xf8\x15\xb4\xef\x5e\xad\x1a\x78\x43\x90\x83\xfc\x19\xfd\xe9\x3e\xa4\xbf\xf9\x53\x7e\x0d" + - "\x72\xe1\x47\x99\x65\xca\xae\x99\x15\x02\xaf\x68\x3a\xbb\x1d\x4f\x6c\x29\xcc\xa0\x6d\x27\x32\x14\x39\xa7\xd9\x15" + - "\xca\xc6\xe4\xee\xcd\x4f\xee\x39\xc7\xac\xcd\x02\x13\x60\xb5\x1a\xe2\x4a\xb7\x1a\xe9\xab\x36\x60\x89\x0a\x99\x65" + - "\x2f\x1d\x08\xcb\x58\x80\x83\x83\x56\xeb\xc8\x13\xe7\x30\x94\x02\x61\x0a\xc5\xa2\x4e\xd8\x65\x44\x44\xee\x72\x8b" + - "\x59\x1d\x84\xb6\x90\x82\x87\x6b\x7b\xf3\xed\x58\xbd\x29\x23\x43\x1d\x49\x53\xd0\x0a\x68\xc3\x47\xd0\x18\x39\x43" + - "\xb3\xf0\x89\xaa\x96\x7b\x5e\xad\xcd\x2d\xde\xdc\xa8\x1e\xff\x06\xcb\x3f\xd6\x2a\xbc\x71\x3d\x12\x2e\xcb\x92\x5c" + - "\xbe\xdf\x72\x15\x77\x11\x9b\xb1\xcf\xd0\xa1\x93\x55\x83\xd7\x1c\x68\x4e\x1e\x42\x78\xe7\x0a\x1f\xca\xc3\x8e\xca" + - "\xa7\xd9\x95\x0c\xec\x20\xf6\xb0\x32\x42\x29\x7e\xe8\xc0\xec\xfd\xe1\x4a\x98\x51\x4b\x30\x0c\x12\x4e\x10\xa8\x42" + - "\xd8\x40\xd8\x21\xcd\xb2\x9a\x6f\x40\xba\xbf\x7b\x9f\x51\xa8\x72\x37\xcc\x67\xb8\x9d\xe1\xac\x29\x52\x5e\x39\xc5" + - "\xce\x40\xa1\x42\xc7\x6b\x4d\xd4\x6d\x87\x83\x95\xa0\x08\x87\xe8\x72\x10\x4f\xf4\xb2\xc1\x70\x6c\xde\x45\x4e\x5c" + - "\x23\xf6\x13\x35\xb8\x75\xb9\x30\x65\x61\xc0\x87\xb0\x76\xf1\x9f\xdc\xf4\xbd\x00\x0c\xb2\x0a\x25\x8f\x50\x94\x0e" + - "\xcf\x28\x49\x6c\xa0\x8e\x1e\x44\x9a\x86\x8d\x3e\xb7\x21\x94\x04\x7b\xa6\x76\x1f\x7e\x3b\x7e\x77\xf6\xb7\x00\x88" + - "\xa8\x4b\xf1\x03\xc9\x9d\xc0\x44\x87\x97\x41\x6c\xcd\x13\x87\x7a\x0b\x41\xd2\xc0\x57\xa5\x9d\x8f\x01\x2c\x99\x30" + - "\xe9\x11\xfa\x8f\xfb\x4a\x40\xa0\x97\x93\x0e\xa4\x22\x5c\x37\x87\x9f\xd1\x85\x9a\xb1\xb9\xd9\x01\xe6\x58\xc4\x96" + - "\xc8\x80\xb6\x4b\x60\x05\x5e\xed\xc6\x41\xf0\xff\x4b\x33\xa1\xf6\xd4\xc1\xa7\xcd\x46\xa7\x88\x79\xdb\x84\x74\x04" + - "\xaa\x77\xac\x40\x94\x78\xe7\xb6\xe9\xf3\x1d\xeb\x50\xe2\xc0\x75\xdb\x8f\x72\xe0\x06\xf9\x2d\xee\x7d\xb6\x15\x70" + - "\x1a\x0c\x00\xe4\x51\x50\x30\x52\x71\x5a\x0c\xd4\xe8\xe1\xab\x37\xef\x5e\xfe\xf4\xe6\xd9\x0f\x0f\x47\x96\xb3\x97" + - "\x9e\x73\x76\xcc\xdf\x15\x83\x28\x52\x05\x01\x39\x28\xc9\xa6\x56\x0b\xbd\x54\x84\x7e\x5f\x8f\x5a\x0e\x2b\x02\x1b" + - "\xbf\xee\x4e\x0a\x39\x1a\x31\x66\xce\x1e\x07\x07\x87\xfd\x54\x32\x82\x0c\xab\x73\xde\x4e\x9d\x70\xfb\x5d\x55\x8a" + - "\x8a\x82\x10\x4f\x01\xc6\x41\x53\x2d\x20\x49\x63\x78\x47\xf8\x6f\x08\x50\xd3\x78\xe8\x24\xa7\x60\xf5\xba\xb4\x78" + - "\xc2\x19\x9b\x06\x6c\x74\x03\x9c\xee\x0e\xea\x4f\x8e\xe6\x61\x80\x79\x10\x91\xba\xb3\x83\x19\x81\x42\xbf\x00\x3f" + - "\xee\x01\xa4\xf7\xc1\xfe\x16\x56\x36\x0b\xc6\x48\x13\xb0\x71\xa4\xb4\x53\x7d\xe2\xa1\xb0\x99\xce\x95\xe8\xcc\xb5" + - "\x1d\xf4\xc8\x4f\x86\xeb\x1b\x76\x4e\x24\xf8\xeb\xcc\x00\x1d\x9d\x1c\x59\x27\xef\xe3\x3b\xea\xfb\x7d\x4b\xec\xb5" + - "\x62\x94\x75\x29\x74\xc6\x85\x36\x42\xa1\x3f\x9c\xb2\xed\x69\x11\x5b\xa2\x3b\x57\x14\xa0\xca\x65\xae\xf4\x2d\x3c" + - "\x70\xf6\xe2\xa2\x0c\x85\xd3\xe2\xb6\x5b\x0c\x1c\x50\x0a\x44\xcf\xe3\xc4\x9f\xb5\x71\x91\x38\x58\x9a\x19\x1e\x84" + - "\x66\x2e\xa6\xa5\xbc\x01\x7b\xfd\x61\x39\x9d\xf6\x02\x1f\x5c\xd7\x69\xec\xcd\x1d\xdc\x0c\x41\x1f\x51\x44\x06\xa8" + - "\x5a\x01\x54\xa7\x2e\x11\xc7\x15\x51\x01\x08\x43\x06\x59\x7f\xac\x97\xc6\xc7\xe8\x72\xd4\x18\xfc\x65\xb9\xb8\xe0" + - "\x41\x04\xc2\x2b\xb5\x97\xad\x3c\x2c\xed\xdb\x24\xb8\x93\x21\x7b\x85\x4f\xc5\x52\x23\x15\x8c\xb1\xa5\xb1\x7e\x9f" + - "\x4f\xa5\x2c\x5a\x9a\xf2\x4e\x7a\xda\x95\xad\xe5\x0e\x02\x7c\x20\xd2\xb6\x94\xd3\xe9\xad\xcd\xf8\x06\x02\xd0\xeb" + - "\x81\x8f\x9c\x72\x67\x13\x22\x01\x11\x57\x2c\x12\xbb\xdd\x73\xe1\x1a\x29\x09\x08\x6f\x32\xc5\xaa\xe3\x28\xbc\x06" + - "\x4a\x4a\x81\x21\xaa\xed\x50\x4c\x3a\xf5\x25\x8e\xa5\xc1\x5d\x17\x89\x1e\x12\xc0\xa0\xcb\x4f\x7f\x17\xd0\xc8\x76" + - "\x3b\x63\x09\xc6\x1d\x1f\xc4\xa2\xcd\x30\x82\xec\x6c\xf1\xed\xf0\x98\xb6\x75\xc7\xb9\xfd\x57\x6e\x34\xf2\x24\x39" + - "\xf5\x8b\x78\xc6\x64\xf9\xee\x6b\xc4\x1e\xcc\xf8\x1e\x09\x6e\x90\x3b\x2f\x8f\x18\x56\xd1\x13\x33\x0a\x28\x6e\x51" + - "\x70\xde\x7c\x5d\xa3\xb1\xc3\x98\x16\x67\x9b\xef\x95\xcd\x17\xca\xbf\x42\x51\x3b\x4f\xf7\xed\x87\x3b\x4c\x42\x29" + - "\xce\xf7\xc6\x93\xdd\x8d\x19\xd4\xb4\xd2\x81\xfd\xce\x8e\x38\x63\x8d\xaf\x89\x9d\xa3\x63\xd2\x42\x45\x29\x80\xf7" + - "\xee\xa4\x64\x32\x4b\xf3\xfe\x99\x3f\xf4\x41\x1a\xcc\xd0\x8a\x7a\x4b\x9f\xc8\x22\xe3\xb9\xd9\x8f\x51\xb6\x4e\xca" + - "\xe6\x70\x35\x6f\x16\xf9\x3b\x3d\x53\x47\x6a\xf4\xb4\x77\xbc\xad\x2b\xa3\x6f\xce\xab\x9b\x49\x99\xdf\x98\xc5\xb9" + - "\x49\x6f\xe6\xd5\x4d\xb6\x98\xdd\x80\xd5\xf9\x26\xcf\x8a\x8b\x9b\x85\x69\xf4\x0d\xa4\xab\xee\xf7\x7a\xa7\xef\xd7" + - "\xe3\xb3\xdd\xfe\xe9\xdf\xbf\x39\x7b\xd8\x7f\x3f\xfa\x66\x34\xcb\x30\x4b\x83\x9e\xbd\xc1\x3c\xe9\xa3\xa7\x5c\x08" + - "\xf3\x37\xd8\x16\xe1\xf1\xcd\xce\xfd\xe3\xf7\xeb\xdd\x43\x7c\x5c\x94\xaf\x8a\xc2\xf8\xb7\xbd\xe3\x31\x6a\x5e\x6f" + - "\xea\xe6\x3a\x37\xd0\x74\x7f\x94\x51\x16\x2c\x32\xc3\x1f\xf9\xc4\x27\x6c\xba\x07\x9d\x73\x35\x71\xf9\x34\x46\xf4" + - "\xf3\x7d\xfd\xb0\x77\x3c\x3e\xfd\xfb\xd1\xd9\xcd\xd1\xfb\xfa\x21\x27\x06\x19\x52\x9d\x15\x36\x46\xf0\x0f\xa3\xbf" + - "\xff\xe1\xe6\xfd\xa8\x77\x3c\xfe\x45\x5f\xea\x1b\x33\x59\xe8\x3e\xbe\x6f\x15\x7e\xad\x6b\x6a\xe7\xef\x76\xb6\xdf" + - "\x8f\x7a\xc3\x87\x34\xd0\x49\x6e\x74\x41\x7a\x69\xfb\xfe\x7d\xfd\xf0\xe9\x76\xef\x78\xfc\xfe\xf4\xf9\x8b\x67\xef" + - "\x9e\xbd\x3f\xbd\xd9\xdb\xeb\xdf\xd8\x07\x67\xef\xcf\xec\xef\x6f\xde\xd7\x0f\xff\x30\x9a\x39\xa7\xeb\x9f\x5d\xea" + - "\x5e\x35\xc9\x4b\x0c\x8c\xb4\xff\xd5\x33\xc0\x18\x21\xf1\x5e\xfd\x15\xd2\x8d\x60\x24\x01\x84\x93\xac\x2b\xbd\x7c" + - "\xad\x97\x2e\x2d\x43\x94\xb0\x44\x7d\x6d\x9f\x95\x4b\xd4\x5b\x9e\xaa\x83\x81\x4a\x9e\xe2\x49\x72\x98\xe6\x47\x0f" + - "\xf8\xd7\x83\x6f\x12\xfb\x7e\x84\x05\xbe\x49\x00\xf6\x0a\x95\x86\x46\xa7\xee\x7b\xf0\xb9\xa3\xa2\xf4\x9b\x00\xb2" + - "\x26\x65\x6e\x4b\x3d\xf2\xa5\x9e\x4e\xca\x7c\x56\x95\xab\x25\x95\x77\x7f\xc6\x9f\x36\x55\xfc\x65\x73\x5e\xa6\xd7" + - "\xdc\x0c\xfc\x6e\x7d\x03\x7d\x7a\xdc\xfa\xe6\x69\x53\xf1\x77\xd5\x37\xdd\x1f\xdb\xcf\xbd\x2b\xc3\xa9\xda\x1f\xa8" + - "\xc4\x7e\x92\xa8\x33\x97\x43\xa9\x3d\x95\x34\xdb\xc3\x72\xd9\xc0\x28\xd4\x91\x12\x8f\x32\xf2\x2b\xe6\x47\x0d\xb9" + - "\xe1\xba\xbf\xa7\x65\xd9\x88\xbf\x79\x2e\xe4\x23\x8d\xd9\x24\xc5\x47\x76\xea\x0f\x45\xa5\x73\xf9\x32\x6d\x75\xf4" + - "\x60\x78\xa5\x26\xe5\x62\xa9\x9b\xec\x3c\xcb\xb3\xe6\x1a\x5e\xbf\xd6\x45\xb6\x5c\xe5\x84\x9b\x83\x01\xf2\x95\xf9" + - "\xe7\x2a\xab\x20\x5d\x25\xf4\x54\xe4\x39\x59\xb8\xe2\x65\x81\xf7\xbd\x4b\x07\x5e\x16\x8d\x67\x60\x37\x7a\x7a\x20" + - "\xc6\x1b\x34\x94\x38\x9c\xc5\x56\x31\xaa\xcc\xbb\x98\x59\x59\xf0\xe0\x40\x1d\xbb\x66\xc6\xae\x0c\xc4\xa0\x42\x52" + - "\x1c\x5b\x71\x05\x00\x69\xe4\x5d\x98\x9b\xc5\x70\x66\xd8\x05\xba\xfe\xf6\xfa\x1d\x12\xa4\x5e\x02\xe3\x4a\xfa\xa7" + - "\xfb\x67\x6c\x65\x44\x54\x67\x99\x08\xa9\x0d\x64\x12\x65\x9b\xe2\x5a\x18\x48\x89\xa2\x4b\x3f\xd2\xcc\xff\x64\x96" + - "\xb9\x9e\x98\x51\x65\x30\xe3\xb4\xcb\xb3\xe7\x13\x74\xdb\x2b\x1a\x69\x83\x8b\x84\xb2\xbc\x43\xad\xa7\x84\x97\x20" + - "\xa6\x5b\xac\x02\x05\x40\x21\x59\x09\x6e\x07\xe8\x33\x43\x95\xf2\xf8\x7d\x02\x28\xc4\xa2\xc3\xb4\xd5\x56\xec\x03" + - "\x3c\xa8\x91\x65\xbc\xdc\x87\x87\x7e\xf5\xfc\x78\x44\x5a\x1c\x18\x4b\x47\xcb\xf6\xfa\x42\x78\xb3\x23\xd5\x22\x8d" + - "\x04\x65\xeb\x7b\x47\x9a\x13\x1f\x9c\x13\xf8\x01\xd0\x00\xe0\xc5\xa9\x3a\x40\xa7\x4c\x29\x28\x0a\x6f\x81\xd6\xe0" + - "\xbc\x01\xb4\x35\x0c\xda\xf1\xd5\x05\xcd\x3a\x58\x12\xe7\xfa\x12\x1c\xfa\x19\xd7\xc0\x98\x42\x99\x4b\x9d\xaf\x34" + - "\x18\xbe\x7d\x8a\x1f\xd3\xfc\x11\xa0\x24\x5e\x5e\x6a\x72\xb6\xa8\x07\xaa\x32\x53\xde\x5e\x62\x22\x20\xa2\x0c\x28" + - "\x51\x4e\xd0\x0d\x02\x3b\xf5\xde\x67\x2e\xb2\x2e\x53\x4f\x55\x1e\x84\x99\x79\xcd\x51\x6d\x9a\x9e\xdb\x99\x9c\xf1" + - "\x2f\x99\xb9\x2e\x24\x03\xb5\x2d\x5b\x0f\x92\xb7\xc2\xc1\x14\x6f\x3b\x3e\x47\x56\xcf\x19\x78\xee\xc9\x74\x46\x90" + - "\x79\xea\x79\xb9\xbc\x96\xfe\x0b\xa9\xa9\x1b\x39\xc6\x81\xca\xd9\xdf\x63\x69\x5b\x7e\x6b\x4f\x20\xfc\x7a\xbe\xaa" + - "\x06\x6a\xe5\x9e\xad\xdc\x33\xd4\x5f\x8b\xb5\xb7\x75\x46\xa7\x3c\xe4\xca\x02\x73\xf6\xc1\x50\xd9\x4e\x29\x3b\x44" + - "\xdd\x60\x42\x7f\xf2\xfe\xac\x25\x38\xb5\x69\x26\x43\xd7\x42\x1b\x7d\xba\xae\x26\xde\x73\x8e\xbb\xde\xa9\x61\x84" + - "\x92\x87\xae\xd8\x73\x08\x7d\x0c\x97\x08\x86\xe0\x67\x40\x09\x28\xb7\x5a\x1d\xb9\xe7\x43\x39\x74\xe1\x2d\x56\xc7" + - "\x60\x99\xdc\x50\x00\x96\xe9\x1e\xba\x7a\x7d\xce\x85\xdb\x41\x95\x45\x84\xe3\x40\xe5\x2d\xc4\x61\xde\x95\x1d\x3b" + - "\xb1\x53\xb8\xc6\xc1\x36\x1e\xea\xde\xd5\x04\x3b\xac\x53\xa7\x29\x57\xf0\x11\xad\xe0\xaa\x36\x15\x4c\x64\xb0\x4c" + - "\x90\x6c\xbe\x7b\x99\x56\xd1\x32\x41\xd1\xf6\x32\xad\xfc\x32\x45\x4e\x12\xbf\x7d\xf4\x5b\xd2\x29\x6e\xa3\xbc\xfc" + - "\x38\x3a\x57\x47\xf7\xd9\xb0\x04\x35\xcf\xe9\x8e\xba\xb2\xb3\xa1\x67\xe2\x58\xa0\xdd\x88\x5e\x76\xde\x3e\x7c\x8b" + - "\x6d\x78\xdd\x83\x0a\x6f\x6e\x54\xf2\xd0\x43\xf4\xf1\x07\xff\xb4\x63\x3a\x21\x81\xe7\x19\x44\x77\x6d\x7a\xd5\x59" + - "\x0f\x63\x83\xb2\xc8\x63\x99\xfe\xc0\x91\xc6\xca\x8e\x7a\xd6\xe9\x7a\x1a\x0d\xf8\x58\xdc\xdc\x0b\x53\xcd\x4c\x4f" + - "\x9d\x72\x19\x4b\x6b\x2a\xf0\x5e\x1f\xd3\x51\x16\x04\x58\xb2\x4e\xdf\x1c\x59\xee\xc9\xcd\xed\x34\xbb\x7a\x65\x65" + - "\x8c\x6e\x8a\xc3\x5d\xb1\x7b\x80\xe9\x86\xfd\x7b\xd8\x94\x3f\x94\x6b\x53\x3d\xd7\xb5\x11\x6e\x28\xdf\xe9\x2c\x07" + - "\x1e\x79\x69\xaa\x3a\xab\x9b\x20\xaf\x23\xba\xee\x62\x92\x5c\x48\xe9\xe7\x7c\x7e\x21\x1f\xb7\x4e\xb3\x92\x82\x5d" + - "\x1c\x25\xf1\xcd\x53\x32\xe2\x15\xe2\x4c\x86\xd9\x34\x39\xe9\x87\xf7\xde\x62\xca\x6e\xbb\xec\x45\x12\x5b\x20\xce" + - "\x4b\xe8\x7a\xec\x24\x52\x43\xd2\xad\x49\x15\xf2\x91\x9c\x81\x81\xdd\x21\xdd\x6b\xf2\x45\x9e\x1b\xa4\xde\xa0\x8b" + - "\x83\x2f\x6a\x7f\x77\x6e\x1e\xc6\xcd\x4d\xf4\x9c\x13\x15\x26\x41\xf7\x83\xb4\x88\x81\xd7\x16\x27\x22\x74\xe7\xa5" + - "\x9d\xcd\x05\xe6\xb9\x9d\xc0\xc0\x9e\xb6\x67\x05\xda\xa8\x6a\xbb\xe6\x66\xf9\x42\x3e\x8a\xc2\xfd\xf3\x81\x6d\xf6" + - "\xa5\x4b\xe4\x6b\xfb\xe5\xfe\xc2\xb3\x42\x79\x22\x81\x49\x68\xe5\x50\xa4\x44\xc3\xc5\x8f\x7a\x26\x3c\x44\x3f\x31" + - "\x87\x6a\x87\x1c\x85\x3b\x98\x7c\x88\xaf\x00\xb2\x12\x62\xf5\xeb\x7a\x25\xb0\x72\xb7\x37\xa4\x7a\xdc\xd9\xe9\x04" + - "\xd2\x3d\xe8\x06\xd2\x3d\x38\x10\xd0\xe4\x1e\x82\xea\xaf\xaf\x7f\x78\x51\x4e\x3a\x20\xa8\x50\x7c\x34\xf5\x64\x6e" + - "\xd6\xea\x24\xfb\xf5\xd7\xdc\x28\xc0\xc4\x82\x54\xf5\xa6\x9a\x96\xd5\x02\xc0\x08\x2a\xa3\xeb\xb2\xa8\xc7\xec\x25" + - "\xf5\x4b\x6d\xdf\x0e\x27\xe5\x62\x34\x33\x8d\xce\xf3\xbd\xcb\x7a\xaf\x86\x0a\x46\x8f\xe8\xb6\xf2\xd3\xae\x8e\x3c" + - "\x51\xcc\x85\xdd\x43\xac\x93\x28\x12\x4c\x66\xfb\x7e\x12\x1f\xdd\x7a\x39\x05\xa4\x22\x62\x73\x64\xe7\x82\x7b\x29" + - "\x86\xc4\xb0\x57\x91\xf3\xb8\xab\x3d\x56\x93\x0b\x26\xa5\xd3\x06\xc3\x0a\xac\x35\xad\xed\xc9\xfc\xcc\x86\xdd\x1b" + - "\xcf\x86\xfc\xeb\xe6\xa6\x3d\x39\x5b\xed\x39\x0e\xfe\x14\xdf\xf8\x39\xdf\x70\xe5\x7f\xea\x94\x6e\x75\xb0\x7d\x9f" + - "\x3a\xb3\x7c\xe3\x07\xd6\x9c\xb8\x3e\x92\x14\xf3\xd8\x36\xe6\x57\xe4\xc7\xca\xd4\xa6\xba\x34\x4e\x2c\x42\x46\xdc" + - "\x12\xbe\x79\x66\x45\x8f\x6b\xa6\x45\x9b\x36\xdf\x40\x25\xf8\x2d\x07\x11\x38\x3e\x33\x9a\x03\xf5\x8d\x80\x70\x8e" + - "\x98\xfb\x80\xa8\xa8\x6d\xa2\x16\x3b\x3b\xc1\x3a\xc9\x96\x42\x88\x13\x10\xfe\x1c\x05\xa7\xfb\xa5\x36\x8d\x50\x36" + - "\xc2\x43\xa1\xa8\x3c\x5f\x65\x79\xca\xe9\x92\x63\x22\x59\x0f\xfc\xe5\x4b\x92\x0b\xab\x3d\x85\xa7\x17\x2b\x10\x09" + - "\xe1\xbc\xd1\xb3\x01\xe8\x03\x06\xce\x4c\x34\x50\x04\x8b\x22\x32\x37\x33\xfb\x70\x6b\xe2\xe6\x2d\xcc\x5d\xe9\x01" + - "\x54\xbc\x80\xb3\x41\xc2\xb9\x45\xc4\xd9\x12\x58\xe4\x21\x7c\x86\xd7\x75\x12\xf9\x03\xaa\xb7\x1f\xc5\x71\x3c\x4b" + - "\x53\xca\xa5\xc9\x90\x0a\xf7\xbc\xdd\x9f\x88\xa2\xbd\x7a\x1d\x41\xec\x54\xe4\x87\x84\xfc\xbf\x1b\x0c\xe9\xf3\xaf" + - "\x24\x67\xa3\xce\xcd\x44\xaf\x6a\xa3\x96\xab\x9a\x73\x06\x7e\x18\x28\x5d\x55\xfa\x3a\xcf\x2e\x4c\x5f\x35\xf3\xaa" + - "\x5c\xd7\x21\xdb\x4c\x4c\x11\x74\x75\x10\x51\xf3\x63\xc6\x92\x3f\x53\xe3\x88\x22\x22\x61\x2a\x2e\x4d\xd5\x00\x12" + - "\x0c\x28\x43\xb3\xa2\x29\x65\x80\xde\x3d\xe9\x75\x40\x6e\x52\xb6\x20\x71\x1f\xf2\x26\x80\x2e\x41\x27\x18\x24\x36" + - "\x58\xf1\x77\xe6\xaa\xc1\xfb\x91\x3f\xea\xea\x88\xef\xc4\x8b\xb7\xaf\x3d\x0e\x7c\xcb\xf1\xc1\x65\x2d\xb1\x2b\xd8" + - "\x9d\xe8\x3b\x6c\xde\xe9\x52\xd2\xec\x32\x91\x8d\x23\x9c\x59\x6d\xaa\x0c\x43\x74\xb5\xe5\x70\x8a\x54\x57\xa9\xaa" + - "\xcc\xd2\x92\x89\xa2\xf1\x79\x98\xb6\xb6\x80\x95\x55\x3d\xc5\x4a\x67\xa1\x72\xf0\x69\x79\x50\x8f\xa7\xfa\xa0\x54" + - "\x68\xb1\x8d\x50\x8f\x3d\x31\x5e\x91\x76\x0a\xcc\x2e\xa0\x48\xb1\x6a\x8d\x95\x83\x87\x7e\xc8\x41\xc2\x67\x5b\x0e" + - "\xea\x67\xad\x4a\x85\x7a\xa0\x9e\x72\x8a\xf6\x81\x4a\x9e\xfe\xe1\xe0\x9b\xa7\xa3\x3f\x3c\xfa\x26\x01\xff\x19\xfc" + - "\xe8\x91\x44\x92\xc1\xf1\x4f\x10\xe3\xba\x2a\x57\xb3\x39\x94\xb2\xcc\x2c\x5f\x4b\x08\x7d\x4f\x8a\x30\xde\x7c\xae" + - "\x0b\xfb\xca\xe1\xdc\x74\xe6\x6a\x11\xab\xe5\x13\x4b\x77\xa2\x44\xfe\x2f\x1e\x13\xdb\x99\x89\xed\xc8\x1b\x38\xe1" + - "\xe1\x7e\xf8\xc9\x2c\xcc\xe2\x9c\x32\xb4\x37\xe5\x72\x2f\x37\x97\x26\x67\xf2\x46\x46\x3e\x1e\x96\xdb\x7d\x5e\x41" + - "\x18\x54\xf6\x5d\x76\x65\x6a\x75\xff\xe0\xd1\xe3\x27\x5f\x74\x0c\xf5\x67\x73\x7e\x91\x35\x03\xf5\xea\xa5\x58\x67" + - "\xbb\x71\x9f\x93\x06\xf2\x48\x25\x49\xa7\xb4\x7b\x2f\xc8\xaa\x41\x6b\x86\xbc\x05\xf7\x09\x08\x24\xf7\xaf\xa3\xd2" + - "\x7b\xdd\x20\x79\x44\x38\x61\xaa\x1c\x34\x5e\xc0\xee\xdd\x7f\xb2\xff\xd5\x97\x6a\x4f\xbd\x9a\x12\x0f\x03\xbe\x83" + - "\xf6\x3a\xcb\x0a\xbc\x46\x9d\xa2\x51\x93\x4a\xb2\xd6\x0b\x82\x30\xa4\xc4\xb5\x5c\x17\xe4\xe1\xa5\xe2\x80\x4d\x5b" + - "\x94\x00\xbc\xaa\x8b\x6b\xc8\xd7\xe2\x49\xb6\xbf\x8a\x04\x7e\x6a\x41\xc0\xe9\x78\x25\xc9\xdb\x6a\xfb\xe8\x48\xed" + - "\x1d\x08\x40\xec\xce\x14\x4d\xce\xb7\xe1\x5f\x61\xd2\xe1\x9e\x58\x22\x40\x7c\x19\x4c\x3b\xed\x0e\xbe\xc8\xbb\x69" + - "\x14\xd6\x15\xb1\x12\x5c\xef\xa7\xf1\x28\x04\x57\xc5\x83\xf0\x6c\x60\xc8\x69\x00\x86\x69\x0b\x45\xe2\x39\xf8\x4c" + - "\x1a\x65\x69\xd8\x0a\xb5\xf2\x62\xb6\x49\x77\xe9\x1d\x1e\x3d\x92\x61\x6b\xaf\x34\x8b\xa5\x03\x2e\xf4\x27\x1f\x11" + - "\xec\xbc\x96\x56\x5c\x1b\x28\xb5\x52\xaa\x30\x49\x2c\xa8\x59\xba\x44\x02\x46\xf5\x4e\x78\x55\x9e\x65\xc1\xf0\x80" + - "\x61\xec\x05\x28\xf0\x22\x66\x47\xf2\x33\x81\x21\x13\xb4\x4e\x17\xe6\xfa\x53\x00\x46\x05\x9b\x12\x31\x24\xbd\x16" + - "\xfb\xd1\x0f\x63\x35\x43\x66\x45\x72\x15\x9b\x10\x8f\xed\xd8\x2f\xcc\xb5\x43\xe9\xf5\x1a\x42\x17\xea\x12\x7a\x27" + - "\xda\xc2\x56\xf4\x4b\xe3\x0c\x79\x13\x3d\x99\x9b\x53\x78\xdf\x5e\xb0\x54\x64\x83\x16\x0b\x13\x2a\x00\x37\x14\x0a" + - "\xc0\xfc\x04\x96\xb1\x2f\x70\x67\xfa\x35\x41\x8b\x29\xcb\x2f\xe6\xb9\xd6\xaa\x9e\x97\x55\x33\x59\x89\x80\xcf\x8e" + - "\xba\x1e\xd4\xaa\xbc\x34\xd5\xdc\xe8\xd4\xd5\x12\x71\x0f\x9f\x90\xf6\x28\xed\x48\x79\x24\x01\xc4\x3a\xe1\xbf\xba" + - "\xe7\x57\x8e\x5e\xe4\xba\xd6\xc5\xb5\x80\xed\xfa\x07\xe9\x9a\xff\xc1\xda\xca\xad\x2d\xaf\xab\xed\xae\x77\xf3\xa1" + - "\xb8\xa5\x99\x55\x6d\x2a\xd1\x86\x6c\x00\xf4\x93\xd4\x80\xd8\x5f\xf0\xd8\x87\x52\x9d\x75\x58\xf8\xbb\xfc\x47\xb7" + - "\x30\x8b\xad\x3f\x73\x10\x9e\x17\xb9\x42\xb0\x62\x15\x7d\x2d\x36\x94\xe5\xc2\x97\x2e\x94\xce\xab\x11\x09\x43\x8e" + - "\xb9\x71\x73\x45\x18\xc2\x4e\x11\x89\x6e\x30\xe0\xd6\xd6\xeb\x6f\xf0\xba\x90\xd1\xf2\x6d\xf5\x48\xc7\xe3\x0d\xcf" + - "\xbf\x0e\x78\x1e\x08\x6d\x0b\xae\xdc\x4b\xd6\x5d\xc9\x55\x23\x81\x8e\xe3\x71\xa1\x8c\x70\x91\x73\xa0\x6c\x82\xa4" + - "\xe1\x15\xd2\x76\x79\x96\xfe\x25\x69\xb9\x00\x93\xab\xc0\x5f\x1e\x44\x04\x30\xf2\xc5\xfc\x0f\x8e\xde\x52\xd4\xc6" + - "\x63\xe2\xb6\x4d\xb9\x04\xda\x29\x69\x3b\x05\x76\x74\x5c\x8f\x52\x80\x97\xd3\x40\x99\x59\xfe\xdf\x39\x0f\x59\x51" + - "\x9b\xaa\xf9\x16\xa0\x08\x1c\x65\xc2\x57\x9e\xcf\xdc\x3c\x37\x88\x61\xf0\x3f\x31\x35\x5d\xe9\x41\xa2\x17\xdd\x9d" + - "\xf7\x8e\x4b\x1d\xfd\x85\x3c\xfd\xff\x77\xeb\xee\xb0\x30\x57\xcd\x49\x86\xb1\xcc\x1b\xbb\xde\x4e\x98\xeb\x3d\xed" + - "\x2e\x48\x4d\xa7\x46\x0f\xd5\xab\xa2\x31\x55\xa1\x73\xf0\x71\x85\xd4\x28\x0f\x47\x2d\x95\x8a\xd3\x5b\xd4\xd2\xb7" + - "\xfa\x58\x39\xbc\x4b\x44\xa8\x11\xbe\x7c\x44\xec\x44\x34\xc3\xdd\xcc\x48\x06\xac\x08\xa2\xf5\xb7\x99\x90\x6d\xd7" + - "\xeb\x9d\x9d\x4e\x9d\x71\x1c\x01\xe3\x58\xac\x5e\xa4\x5f\x8c\x39\x4e\x1f\xa1\xdf\xb5\x2c\xc4\xb1\xf8\xb6\x7f\x07" + - "\x3b\x2e\x28\x6f\xc4\xf8\xde\xa1\x49\x73\x84\x38\xea\x16\x71\x06\x1b\x09\x51\xc0\x76\xb2\xbb\x24\xed\x08\xb8\x6d" + - "\x36\x04\x69\xba\x45\xbe\x6d\x95\xc0\x2f\xef\xf6\x45\xda\xb8\x2e\x4e\xa5\xc2\xf8\x43\x0b\xb3\x28\xab\x6b\x95\x1b" + - "\x4d\x00\x2a\x77\x2c\x9b\xc3\x3e\x08\x35\x34\x24\x66\x86\xec\x84\x50\xd0\x20\x4f\xdf\x29\xb7\xde\x3d\x63\x2d\x93" + - "\xcd\xa7\x1a\x6b\x42\x15\xf9\x51\xa4\x32\x77\xb9\xb7\x68\x48\xe3\xf0\x3d\xf4\xae\x5d\xf5\x51\x47\x73\xbe\xa6\xb0" + - "\x85\x71\xbb\xec\x61\x6b\xa0\xc3\x85\x5e\xb6\xb9\x8e\xd0\x75\x09\x66\x80\x2f\x84\xbb\x47\xdf\xf6\x40\x9d\x37\x8b" + - "\xfc\x3f\xc3\x6e\xc5\x0e\xa2\x6a\x9f\xe1\xcd\x19\x9f\xc4\x2b\x65\x41\x2b\x0b\x63\x0c\x94\xb2\xb8\x47\xbb\x18\xb6" + - "\xbb\x48\x8a\xf0\xa5\xf1\xda\xae\x96\xdc\x7a\x62\x0c\x65\x93\x9a\xe8\x42\x35\x98\x17\xc3\x49\x07\xba\x48\x31\x31" + - "\x20\x20\x17\x72\x25\xe2\x62\x40\xa7\x65\xdf\x3d\x17\x73\xb2\xb3\xa3\xb6\xa5\x73\x28\xc9\xab\x3c\x3f\xce\x24\xe6" + - "\xb4\x76\x2d\x3d\x20\x17\xbd\x5b\x11\xc8\x82\x01\xb3\x0a\x68\xea\x44\x10\x8b\x3b\x55\x79\xee\x64\x36\xd5\xb5\xa3" + - "\x7c\xb7\xa8\xc2\xbd\x36\x1c\x97\x34\x8b\x92\x61\x84\x87\x9c\x94\x31\xa4\xfd\xa6\x2c\x78\x1b\x88\xc9\x5d\xf4\x28" + - "\x94\xb7\x3e\x89\xe6\x6c\xf9\x0e\x07\x1a\xcf\x80\x7f\x96\x12\x18\xfd\xa2\x11\xee\x4b\xb2\xf5\x6a\x4a\x01\x23\xbe" + - "\x22\x54\x0e\x42\xb4\xcb\x95\x95\xb3\x01\x20\x68\xc5\xa9\x40\x74\x9e\x03\x34\x91\x4c\x8d\xf3\x51\x4d\x30\x03\x3b" + - "\x1c\x92\x8f\xdd\x77\x5a\xc4\x5f\xb0\xc8\x81\x0c\xad\xdb\x18\x01\xde\xd4\xef\xe0\xf9\x69\x47\xfc\x9c\x35\xf3\xee" + - "\x9b\x45\x57\x33\x75\xe4\xeb\x60\xb5\xec\x3d\x91\x3a\x06\xfd\x12\x74\x31\x33\xe0\x50\x66\x2b\x04\x74\x0e\x3d\x99" + - "\x3b\x87\x0a\x5e\x7a\x97\x2c\xa9\x30\x6b\xa9\xf9\xfd\xdd\xac\x18\xf6\x2b\x62\xb9\x5c\x6e\x8c\x8d\xbb\x82\xf8\x9a" + - "\x7e\x40\x50\x6c\x5d\x6e\x96\x75\x35\xe3\x73\x22\x6e\xe9\x4d\x8c\x26\xcd\xc3\x77\x65\x35\x31\x2e\x5f\x33\x06\x8a" + - "\x57\x46\xad\x35\xa4\x20\x16\x63\xe5\xb4\x74\xa0\x4e\xc5\xa8\x28\x37\xd6\xbe\x24\xa9\x15\x38\xb1\xf4\x6c\x6f\x68" + - "\xd9\x6e\x6e\xec\x53\x77\x18\x18\xed\x92\x71\x29\x49\xe3\x21\x17\x17\x53\xdd\x75\xb1\x90\x5d\xa1\x03\xac\x32\xe9" + - "\xca\x47\xcf\x15\xd2\x02\xc9\x2a\x75\x35\xab\x07\x10\x4f\x05\xfb\x5b\x86\x52\x7f\x97\xeb\xa6\x31\x05\x5c\xee\x85" + - "\xa9\x1b\x93\xa2\x32\x1d\x8e\x38\xa5\xf4\x41\xb4\x4d\x0e\xe4\x3a\x3d\x8b\xd2\x55\xd8\x2d\xc8\xda\xb7\x01\xe6\x6b" + - "\x11\x36\xc4\xb9\xae\x4f\xf8\xb7\x9d\x17\xc4\x49\xf6\x7c\x90\xb7\xf0\x89\xbb\x84\xd4\x6f\x11\x14\x41\xf6\x06\x3d" + - "\x1b\xd4\x91\xca\xd5\x9e\x3a\x18\xd0\x9d\x85\xe4\x13\x32\xf1\xd8\xad\x4f\x85\x5d\x72\x2d\xaf\xbe\x93\x09\xb7\xfc" + - "\xa1\xa4\x99\xf8\x19\x6e\x94\x07\x8d\x72\xfe\x1c\x6e\x54\x35\x2a\xaa\x89\x1b\x65\x07\x9f\x81\xca\x0a\xe5\x8d\x15" + - "\xb0\x4d\x45\xab\x0c\x2d\xd4\x53\x39\x64\xeb\xa3\xb8\xa9\x4d\xb7\x0f\x11\x32\xe7\xc5\x01\x8d\xe0\x70\x9d\x03\x90" + - "\x49\xa3\x5b\x29\x4e\x2b\xdc\x15\x60\xa2\x00\x4d\x3f\x94\x4c\x6b\x93\x4f\x41\xca\x68\x86\xe6\x9f\xae\xc4\xa1\x60" + - "\xc6\xc5\x40\x3c\x2d\x77\x53\xec\x6e\x2b\x99\x88\x03\x6a\x01\x35\xfc\x14\xd0\x6b\x7a\x2d\x46\x1b\x5e\x05\x14\x24" + - "\xd8\x96\x74\x70\xfb\xad\x48\x47\x1f\x3b\x2a\xac\xca\xb4\xa6\x81\x55\x9b\xeb\x74\xcc\x4b\x2c\x32\xc0\x5d\x13\x12" + - "\x0a\xd8\xb0\xb7\x1b\x73\x30\xf4\x88\xdf\x7b\xdb\x11\x1f\xfb\xe8\xce\x13\x9d\xc4\xec\x45\xed\x5b\x03\x1b\xf5\x1a" + - "\x7b\xd2\xb7\xbb\x51\x59\xb6\xb1\x65\x40\x90\x32\xcc\x20\xf4\xd0\x76\x33\xed\x8f\x9b\x5d\x5f\xd2\xa7\x87\x0c\x9a" + - "\x4c\x7f\xe5\xbc\x50\x5c\x9f\x39\x51\x4b\xae\xeb\x46\x65\x8d\x59\x00\x24\x99\xd1\x29\x63\x1c\x63\xd7\xd9\x0e\x97" + - "\x35\xc0\x87\x99\x22\x55\xab\xa5\xab\x1e\xf3\xf7\x5a\xda\x99\x99\x14\xc0\xa0\x2a\x34\xa3\x43\x9e\x5f\x53\xc1\x31" + - "\xaa\xb3\x06\x6d\x1a\xb5\xea\xdd\xff\x6a\xff\xcb\x7d\x4e\x11\x74\x2b\x33\x03\xd8\xb1\x47\x52\xdd\x7f\x4f\x28\xf2" + - "\x32\xd0\xb3\x3b\x42\x21\xd8\x10\xfa\x2e\xe4\xb9\x91\x20\x01\xce\x9e\xa7\xa4\x82\x29\xfa\x93\x31\x4b\x55\x19\x40" + - "\x22\x9c\x98\x9a\x22\x64\xc0\xd5\x82\x26\xd9\xf6\x35\xd7\x8d\xa9\xc8\x6f\x5d\xda\x8b\x39\xe5\xa4\x5b\x11\xc9\x15" + - "\xdd\x62\xf3\xfc\x77\xad\x9e\xb1\xdd\xd3\xd1\x62\xde\x50\x38\xec\x0e\x81\xb8\x8b\xb5\xe2\xf3\x29\xce\x3a\x79\xea" + - "\x60\x35\x99\x3c\xe5\x82\x82\x74\x8e\x1b\x41\x19\xa8\x43\xa7\xd1\x06\xb5\x34\x3d\x3e\xb2\x91\x71\xd6\x14\x80\xb9" + - "\x4d\xdf\xd1\x1b\x79\x66\xdc\x58\x83\x30\x82\xc8\xc8\xfb\x92\x7c\xef\x85\xf1\xcb\x2d\x28\xb8\x88\xda\x1d\xee\xb0" + - "\x43\x50\x47\xe4\x97\xb5\x95\xd1\xc5\x8f\xb4\xc5\x79\xd3\xae\x73\x03\xce\xbc\xee\x7e\x93\x85\xcc\x7e\x12\x5a\xc8" + - "\xdc\xe5\xb0\xb5\xb5\xdd\x76\x20\xa7\xc5\x0c\xdc\xee\x3b\x55\x28\x80\x0f\x51\xa0\xde\x45\x88\x1f\xdc\x13\x68\x17" + - "\x1d\xa2\x85\xb1\x64\x34\x52\x6f\x81\x4f\xd6\xb9\x7a\xf6\x7f\x9e\xfd\x55\xa5\xa0\x79\x45\xdc\xd6\xf3\x55\xa3\xd6" + - "\x98\x7e\x72\x55\xb8\x19\xcc\xa6\x98\xd1\x17\x1d\x28\x7c\x55\xd2\xcc\xf5\xc1\x5c\xea\xfc\xcf\x55\x1e\x36\xb6\x15" + - "\xbd\x95\x9d\xf2\xc2\x81\xb7\xc4\x6c\x36\xee\xcc\x84\x1a\x08\x27\xd4\xab\x27\x84\x88\x25\x42\xe7\x06\x64\x8d\xbc" + - "\xdb\xe0\xb3\xd1\x04\xe9\x34\x1b\xb1\x75\xc4\x01\x4d\xa1\x44\xf0\xae\x1c\xab\x04\x7f\x22\x54\x14\x6a\xb3\xe1\x31" + - "\xfd\x86\xe7\x52\x39\x39\x56\x09\x2a\x76\xc5\x9b\x67\xa8\x39\x4d\x40\x83\x0a\xcf\x69\x64\xcf\xf2\x7c\xac\x12\x21" + - "\x37\xc4\x98\x53\x05\x18\xe4\xa3\x7c\x16\xce\x94\x73\x8a\xc9\x51\xcf\x42\xa0\xcb\x88\x2d\x65\x55\x01\xf1\x66\xe8" + - "\x93\xee\x7c\xb7\xa0\x7f\x8e\xdc\xca\xaf\x89\xdf\xd3\x70\xe7\x62\x39\x71\xfc\x37\x2b\xc8\x32\xf5\xf4\x08\x2e\xa5" + - "\xb6\xa3\x57\x0d\x19\x91\x21\xff\x81\xad\x36\xe4\xb9\x59\xbb\x22\x00\x57\xb8\x53\xd8\x3a\xf9\x18\x9e\xfa\xe9\x38" + - "\x73\x56\x62\x61\x92\xef\x26\xd6\xa3\x91\x82\x40\x98\xfe\xef\x22\xd1\xa2\x0c\xa6\xda\x44\xe7\x36\xac\xa8\x2b\x61" + - "\x0e\xca\x50\xab\x7a\x7e\xd2\xe8\xc9\x05\x66\x86\x43\xa6\xff\x30\x8c\xb5\x55\xd9\xb4\xb2\x6b\x4b\x71\x5a\x69\x56" + - "\x2f\x73\x7d\xed\x83\x39\x46\x0f\x1f\xde\xfb\x4c\x3d\x54\x3f\x99\xa6\xca\xcc\x25\x32\x01\x7a\xd2\xac\x74\xae\xb8" + - "\x30\x78\xac\x93\x30\x08\x85\xff\x7f\x10\x84\xab\x7e\x3b\x01\x66\xf5\x23\xe5\xcf\x65\x5f\x6e\x4e\x7d\xd0\xf1\x01" + - "\xa2\xa7\x7c\x04\x28\x1e\x07\xbf\xc3\xa0\x93\xea\xe1\x08\x11\xa9\x74\x9e\x03\xfe\x62\x7e\x8d\x22\x97\x95\x3f\xb3" + - "\x82\xdd\xcf\x5f\x60\xaf\x84\x07\x3f\x76\x97\x9e\xf3\x5e\xb6\x4d\x78\x37\x7e\x08\xe5\x85\xbd\x44\x8a\x01\x5e\x72" + - "\x48\xbe\x11\x78\x85\xe1\x68\xfa\x8a\xc5\xf5\x77\x25\x96\x82\xf8\x49\x4a\xe4\x63\x97\x79\x66\x18\x01\xe1\x79\xb9" + - "\x58\xae\x1a\x93\x9e\xd8\x46\xd4\x02\x1c\xa4\xce\xad\x64\x99\x67\xfa\x3c\x87\xc0\x13\x1a\x8e\xed\x6c\x43\xa9\xcc" + - "\xdd\xfc\x6c\x6d\xf9\x55\x21\xcc\xf7\x4d\x75\x83\xeb\x36\x8c\xe5\xce\xb2\x9c\x41\x78\x1f\x74\x4b\x2e\x3e\x91\x79" + - "\x3d\x58\xa4\xac\xe6\xec\xc8\x60\x52\x6f\xcc\x62\x59\x56\xba\xba\x06\xa0\xa1\xde\xa2\xac\x8c\xb2\x5b\x55\x95\xcb" + - "\x66\x91\xfd\x0a\x9c\x4c\x5f\xad\x8a\x26\xcb\x01\x39\x0b\x3c\x72\xd4\xb9\x69\x1a\xc0\xef\x5e\x98\x5a\xe9\xbc\x2c" + - "\x66\x03\x6e\x08\x61\x43\xb2\x06\x64\x6a\x14\x55\x53\x5c\x52\x82\xd2\x9c\xa0\x0b\x8b\x2e\x52\x0e\x2a\xe6\x99\xca" + - "\x0a\xf5\xdd\x77\x28\xf4\xd9\xd1\x0c\x79\x8a\xc6\xee\x1a\xab\x6b\x31\xc4\x81\x4a\xa8\x84\x53\x88\xa1\x04\x87\x48" + - "\xe2\x98\x12\xa1\xb8\xc6\xe0\x77\xe0\x03\x5c\x46\x68\xf6\x36\xc2\x4f\xea\x12\xd4\x3f\x09\x8a\xe1\x09\xcf\x8f\xae" + - "\xd5\xd4\x92\x92\xb5\xbe\xb6\x3c\xdf\xcc\x34\xaa\xca\xd2\xd6\x56\x47\x3d\x15\x7e\xcb\x51\x21\x74\x62\xa9\x7b\x2e" + - "\x26\x85\xce\xdd\xbb\x0a\x2a\x4c\x5d\x12\x55\x19\x68\xc1\x83\x46\xe9\xce\x1e\xc3\xe2\xf6\x73\x48\x47\x90\xce\x92" + - "\x8f\xdd\x0c\x4e\x8e\x08\xc7\xf0\x07\x04\xf9\x30\x66\x71\x06\xe1\xae\x14\x94\xe3\xd4\x7f\x7c\x26\x62\xea\xb6\xb9" + - "\x30\xeb\xe2\xdd\xb7\xf1\xe1\xa4\xaf\xe9\x80\x06\xf9\xca\xc1\x33\x2c\x5b\x2c\x73\x03\xf3\x3c\xd5\x59\x0e\x7c\x9b" + - "\xa6\x4d\x93\x15\x00\xfd\xa7\x0b\x22\x6a\x4e\x1c\x74\xad\x59\x09\xba\x28\x0b\x03\xc1\x25\x61\x9f\xe4\xe6\x07\x1a" + - "\x87\xb1\x97\x7b\x78\xf8\x53\xaa\x52\xa6\x4a\x20\xe1\xac\xc2\xe8\x9f\x1e\xfd\x72\x00\xb4\x3d\x95\x3c\xa5\x67\xf0" + - "\xdf\xf3\xb2\x4a\x4d\x75\xf4\x60\xff\x81\x5a\x67\x69\x33\x87\x5f\x73\x63\xa9\x81\xfd\x39\xfa\x26\x51\xfd\x98\xa6" + - "\x44\x09\x93\x42\x57\xb2\x7c\xad\xaf\x6b\x48\x2b\x63\x94\x06\x7d\x14\xa8\x2c\xeb\x0b\x93\x9b\xa6\x2c\xec\x56\x45" + - "\x87\x41\x38\x3f\x1e\x4c\x1e\x54\x16\xf3\xf2\x02\x30\xca\x2b\xb3\xaa\x71\x24\xb8\xc2\xd8\x63\x14\x85\x49\xbd\x15" + - "\x73\xd6\x61\xb0\x09\x7f\x3b\x84\x8e\xb0\xcf\x2a\xe6\x2c\x2a\x7d\xec\xd3\xef\x5a\x72\x37\xaf\xf2\xa8\x04\x39\x45" + - "\x5c\xf0\x32\x03\x3a\x47\x47\x82\x29\x79\xc7\xae\xb4\xdb\xd8\x9d\xb5\x30\x2a\x37\x38\x83\x10\x38\xb7\xd0\xd5\x2c" + - "\x2b\xec\xf2\x8e\xfe\x8e\xbf\x47\x38\x20\x78\x5b\xac\x16\x45\x59\x2c\xaf\x28\x5b\xcc\x4f\x66\xf6\xf2\x6a\xd9\x53" + - "\xc9\xdf\x7b\x89\xda\x55\xcb\x62\xb5\x50\xbb\x2a\xe9\xf7\x8e\xb7\x97\x57\xfd\x53\xbd\xf7\xeb\x7f\x9d\xed\xfe\x21" + - "\x19\xa8\x24\x63\x2a\x64\xab\x99\x99\x06\x28\x72\xdd\x82\x2e\x8f\x34\x7a\x1d\xc1\xdf\x1c\xe9\x94\x19\x20\xf4\x1d" + - "\x14\x7e\x40\x58\x5a\x87\x0e\x29\x20\x8c\xaa\x5d\x55\xcf\x4f\x4e\x5c\x51\x58\x86\x09\xd5\x22\x8e\x3f\xec\xd8\x81" + - "\x5a\x64\xc5\xcf\xf4\x4b\x5f\xd1\x2f\x06\x03\xe5\x6b\x07\x7a\x09\x7f\xe0\xca\xbb\xda\x8e\x7c\xc5\x18\x29\x82\xa3" + - "\x0e\xa3\x6f\xc2\xcd\xf5\x35\x3e\x99\x99\xe6\x47\xc4\xa4\xbe\xc6\x30\xaf\xac\xc6\x5b\xa0\x30\x26\xb5\x57\x46\x59" + - "\x29\x20\xf8\x0f\xd0\xe8\xfd\xa0\x6f\xef\x87\x57\x2f\xbf\x1e\xa8\xda\x18\x75\xff\xe0\xd1\xe7\x8f\xbf\x64\x52\x14" + - "\x8d\x6e\x8b\x83\x23\xf1\xe9\x30\x6e\xcb\xdd\xf7\x37\x37\xae\x10\xf3\xbb\x7e\x03\x75\xd4\xec\xa8\x0f\x34\x60\x29" + - "\x4f\xd2\x8d\x0b\xfa\x09\x96\x6a\xec\x23\x7d\x59\x07\x8b\x0b\x9d\x8b\x8f\x07\xcf\x60\xf6\xf6\x44\x3d\x55\x5f\xd0" + - "\xe3\x67\x8a\x63\xfc\xc9\x57\x3b\xd1\x6b\x03\x69\xa6\xe6\x7a\x72\xa1\xce\xaf\xd5\x0b\xa3\x0b\xf5\x32\x5d\xeb\x2a" + - "\xad\x13\xfa\x8a\xea\x50\x3d\xdd\xa8\xdc\xe8\xba\xe9\x53\x28\x60\xad\x96\xa6\x9a\x98\xa2\xd1\x33\x8c\xde\xd2\x2a" + - "\xd7\xd5\xcc\x54\x0a\xd2\x3f\x93\xda\xb2\x26\xa9\xcf\x6e\x16\xbb\x1a\x0b\x50\x8a\x48\xf6\x67\x99\x5d\x99\x9c\x13" + - "\xd4\x36\xec\xc0\x37\xb3\x93\x83\xf1\x91\xcf\x4f\x4e\xde\xbe\x56\x69\xa5\xa7\x0d\x30\x06\x2e\x24\x2c\x35\x97\x0c" + - "\x9c\x3d\xa9\xeb\x35\xfc\xb7\x5c\x8c\xee\x57\xa6\x2e\xf3\x4b\x93\xee\x61\x0f\xfc\x4a\xf0\x81\x25\xc9\x19\xc3\x41" + - "\x77\x76\xf8\x9c\xb3\x40\x4d\x0c\x9e\xbc\x16\x02\x37\x6f\xc7\xf8\xfb\xfa\xb7\x70\x80\x47\xc8\x7d\x0d\xe1\x2f\xa4" + - "\x64\x7c\x66\xdc\x3b\x7e\x40\xaf\xe9\x20\xf9\xd7\xf4\x40\x7a\xf7\xae\x1a\x4e\x9e\x6d\xe9\x0c\xb6\xca\x7c\x86\xf6" + - "\xfb\x8e\xf8\x00\x44\x26\xdd\x0a\x5b\x6b\xd5\x1f\xf6\x15\x01\x91\x0e\xc5\x6e\x73\x27\x62\x1d\xf5\xe6\x27\x03\xe1" + - "\x17\xde\x42\x94\xca\x79\x08\xeb\x14\xf3\xd0\xea\x4e\x38\x0f\xad\xce\x89\x79\x90\x01\xdb\x1e\xb0\x36\xca\x66\x72" + - "\x1c\x6f\x7e\xbc\x9b\x2c\xeb\xf0\xd2\xed\xd8\x5f\x5f\x81\xe6\x1a\x27\x4a\x83\x61\x2f\x2b\x1a\x33\x33\x98\xa3\xc3" + - "\xd6\xba\x6b\x0f\x6a\x1c\x22\x2c\xa5\x89\x34\xfd\xa3\x69\xbe\x2f\xcb\x8b\x57\x53\x70\xa6\x4e\x33\xfb\xfc\xbb\x62" + - "\x00\x89\xab\xbf\x63\xfd\x37\xc4\x4a\x4c\x99\x65\xb3\xaf\x06\x6a\x6d\x1e\xe4\x39\x9a\x03\x98\xbd\x44\xdd\x51\xb5" + - "\x2a\x00\x05\xbf\x79\x60\x19\x61\x9d\x3b\xda\x36\xf4\x43\x06\x52\x30\x33\x1d\xf8\xe9\xce\xaf\x9b\xbb\x22\x32\x69" + - "\xd8\x7e\x40\x5e\x36\xc8\xd9\x87\xf4\xb2\x57\x56\xd8\x14\xa8\x5d\x38\xf3\x53\x53\x52\xfa\x3e\x95\xae\xe0\x2f\xce" + - "\x2b\xe9\x35\x38\x24\x8c\xdb\x3a\x09\x61\x2f\xe3\x64\x33\x76\xe6\x81\x9d\x47\x2b\x99\xae\x20\x9b\x7b\x09\x99\xe4" + - "\xe7\x90\xb8\xcd\x92\x08\x3c\x67\x3f\x59\xa6\x67\xc0\x55\xd8\x59\x58\x43\x4a\x6a\x94\xf4\xa8\x42\x72\x37\x05\x49" + - "\x76\xc6\x5b\x53\x20\x30\x04\x46\x7e\x1c\x21\x8c\xee\x50\x55\x06\xf7\x84\x1d\x4a\x5d\xa2\x29\x06\x78\x47\xc2\x25" + - "\xb2\xa7\x9c\xb3\xe5\xa0\x42\xcf\xa4\x48\x70\x86\x54\x23\xcd\x78\x8f\x1b\x57\x47\xb4\xb6\xfd\xdb\xd1\x09\x1d\x7c" + - "\x32\xee\x99\xd8\x91\xc3\xde\xa4\x40\xed\x7e\x2c\x6b\x58\xa9\xbf\xe8\x7c\xa0\xce\xcb\xab\x93\xec\xd7\xac\x98\xfd" + - "\x84\x14\xd1\xfc\x85\x5c\xc5\xd3\x12\x42\x1d\x05\xdf\x1d\x33\x84\x84\x63\x44\xa1\x26\xb2\x60\x24\xb3\x42\x28\x13" + - "\xe9\x52\xd2\xec\xf2\xee\x92\x21\xef\x7e\x89\x97\xce\x26\x18\x0c\x57\x60\x78\xae\x27\x17\xb3\xaa\x5c\x15\xe9\xf3" + - "\x3c\x5b\xaa\x23\x95\x10\x13\xb9\x77\x5e\x5e\x81\x8b\x8f\x2d\xdb\x0a\x80\xde\xf8\x35\x7c\xe2\x2c\x5c\xb9\xd1\x15" + - "\xe8\xe9\x4f\x88\xd7\xd8\xdc\xf0\x51\xbb\x69\xe0\x45\x68\xaa\xe8\xab\x49\x5d\xbf\x33\x57\xe0\x7f\x84\xec\xf9\x78" + - "\xff\x10\x48\xd6\x78\xff\x10\x59\xf3\xf1\xfe\x61\x53\x2e\xc7\xfb\x87\xb9\x99\x36\xe3\xbd\xaf\xbf\xfe\xfa\xeb\xe5" + - "\xd5\x21\x6e\xe3\x3d\xfb\xe6\x60\x79\x75\x98\x28\x48\xda\x94\x2c\x69\x59\xc7\xfa\xbc\x2e\xf3\x55\x63\xa0\xfb\xbe" + - "\xd1\xc0\x61\xd5\x2e\x83\x67\x7a\x5e\xc2\x3e\x04\x79\xb9\x6c\xe6\xe1\x2e\x51\x3b\xed\x3d\x02\x9b\xd8\xc1\x22\xb1" + - "\xf6\xc0\xa8\x5c\x5f\x23\xfd\x47\x59\xb5\x99\x9b\xeb\x07\x2e\x68\xc3\x6e\xf3\xc6\xa7\x28\x02\xe8\xfb\xa6\x54\xb5" + - "\xa6\x53\x58\x1b\x4b\x43\x88\xf2\x83\xe8\x6d\xcf\xa2\xe7\x15\xf1\x46\xf8\x51\xf6\xed\x59\x91\x7e\x1b\xf7\xad\xe7" + - "\x84\xbc\xcb\x78\x9e\x5b\x02\x04\x89\x25\x4f\x1f\x7d\x3d\x70\xc9\x51\x1e\x0d\x1f\x73\xb9\xbf\x98\x22\x2d\xab\xbd" + - "\x65\x65\xa6\xd9\x95\x9d\x85\xbd\x1a\x9a\x82\xf7\xc9\xde\x1a\xe4\x9b\x3d\xff\x7c\x8c\xcb\x68\x9f\x1c\xee\x2d\xca" + - "\x5f\x37\xbc\xa2\x05\xdb\x4a\xba\x5f\x93\x1c\x30\x3e\xcf\xcb\xc9\x45\xb0\xd8\xff\x75\x48\xff\x88\x1a\x60\xdf\xd8" + - "\x6d\xb0\xd4\x69\x6a\x6b\xb2\xbf\x71\x17\x3d\xb1\x4f\x3b\x37\x05\x4c\x8e\x74\x58\x21\x07\x38\x3a\xf3\xed\xf0\x44" + - "\x3c\xe1\xd2\x84\x9e\x66\x97\x27\x2d\x55\x4f\x24\x01\xa4\xd9\xa5\x14\x00\xb6\x62\xea\x83\x67\x08\x0a\x0f\x9b\x72" + - "\x89\xf8\xc6\x07\xff\x85\x7d\xe9\x22\x4c\xf2\x03\xba\xe4\xed\x27\x4f\x96\x7c\xc4\xdc\x08\x02\xa7\xc8\x70\x04\x1e" + - "\x7b\xc5\xed\x03\xd0\xb9\xff\x52\xab\x5f\xea\xb4\x5c\xd0\xed\x09\x92\xaa\xae\xeb\x95\xdd\xa6\x96\x88\xc7\xe3\x43" + - "\xb5\x14\xa5\xab\x71\x39\x55\x51\x95\x1f\xe5\xaa\xd9\x30\x43\x4c\xd1\x22\x60\x16\xa2\x38\x03\xba\x43\x83\x59\xeb" + - "\x82\x0f\xe7\xc8\x13\xbe\x59\xdc\x71\xa3\x73\x39\x31\xc8\x04\x1b\x55\x37\x59\x9e\xab\xb4\x04\xef\x28\xbf\x95\xbd" + - "\x36\x8c\xfc\xd4\xd8\xc7\xa8\x7d\xf0\x97\x95\xd9\xc3\x93\x98\x15\x33\x7f\xf9\xbe\x29\xe1\xfe\x03\x8b\x23\xf0\x17" + - "\x94\xd9\x00\xba\xb4\xb6\xac\x0e\x81\x49\x11\xc6\x82\x49\x07\xaa\x99\x97\xab\xd9\x9c\xea\xf8\xf4\xd3\x1d\xa2\xf6" + - "\xc6\x5b\x8a\xee\x66\xe4\x14\x5a\xdd\xdf\x98\x7f\xb0\x7b\xb3\xc5\x89\xa8\x7f\x7f\x2f\x3f\x06\x9d\xed\x6a\x25\xe8" + - "\x30\x49\x25\xe6\xb5\x67\x54\x36\x2c\x78\x2b\xa7\x13\x93\x2d\x08\x96\xe3\x25\xb0\x54\x1e\xfc\xa3\x38\xd1\x12\x49" + - "\x42\x98\xeb\x97\xf8\xa1\x3d\x0c\x9a\x15\x66\x6f\x57\xd1\xcc\x34\xb5\x67\xf0\x83\xe2\x2e\x0d\x11\xd6\x58\x4e\xfd" + - "\x29\x1b\xaa\xde\xfd\xc7\x8f\x1f\x3f\xee\xbb\x7a\xd0\x04\xa1\xbe\x5d\xcd\xd4\xc1\xe3\xc7\x4f\x1e\xab\xbd\xf6\x69" + - "\x62\x26\x79\x5d\x95\xc5\x8c\x78\x64\xcf\xb4\xed\xf9\x5c\x92\x6e\xbf\x33\x47\xe5\xae\x08\x16\xcc\xc5\x01\x98\x40" + - "\x4e\xd1\x42\xec\x78\xe0\xbd\x1c\x77\xdb\xca\x29\xb2\x85\xed\xbd\x40\x36\x25\xbb\x8c\xae\xcd\xdb\xf9\x96\xd8\x11" + - "\xd9\x8a\xa2\xcf\x4f\x4e\xc6\xe2\xee\x38\x74\x7a\x1e\x1a\xd9\xa1\x42\x22\x7e\xa8\x88\x82\xe3\xf7\xae\x1b\x2d\x66" + - "\x61\xd3\xc5\xf6\xe9\x57\xdb\xdd\x97\x5b\xf7\xf5\x26\x58\x9a\xd6\xfd\x26\xdf\xf1\xf5\x14\x5e\x71\xb2\x44\xd7\x1d" + - "\x37\xde\x3f\x74\x6c\x10\x5f\x66\xfb\x1c\x50\x1c\x4f\x87\x60\xe5\x41\x5a\x0b\xdf\xb2\x00\x98\xb8\xef\xd3\xf6\xbb" + - "\x03\xbc\x35\xc8\xce\xff\x29\xf7\x1e\x0b\xa7\xdb\x4b\x5d\xd5\xe6\xbb\xbc\xd4\xcd\x46\xda\xde\xf3\x9d\xe2\x3b\x30" + - "\xe8\xb4\xaf\xf3\x13\xae\xac\x80\x8a\x38\x49\x59\x46\x78\xdc\xfb\xec\x63\xbf\xc7\x96\x35\xd0\xb6\x90\x6d\xc0\x1e" + - "\xa1\x7f\xae\xb2\xc9\x45\x7e\xad\xea\xb5\x5e\x2e\xd1\xc5\x14\xf2\x10\x3d\x3f\x39\x91\xe9\xd6\x48\xa4\x67\xa5\xe6" + - "\x84\xb2\xfd\x67\x65\x51\x0f\x9d\x71\xd8\xd6\xd1\x91\xe5\x90\x90\x95\xbc\x7f\x14\x7b\xdd\x49\x18\x30\x52\xf1\xd9" + - "\x6e\x97\x00\x5c\xc6\x5e\xbd\x2d\x15\x47\x9e\x3a\xfd\x8d\xa5\x55\x64\xa0\x65\x15\x44\x59\x80\xb8\x8f\xb6\x56\xd0" + - "\x97\x64\x05\xf7\x80\xa9\x75\x99\xa7\xc2\x30\xec\xd5\x82\x52\x7b\xb6\xd5\x7e\xac\x8e\xb8\xa2\xb6\x9a\x8d\x34\x13" + - "\xec\x60\x42\xb2\x18\x8e\x1f\x06\x7b\x73\xa3\x4e\xcf\x04\x5b\x2d\x74\x15\x7e\x44\x77\x75\xbc\xbb\x4f\x79\x87\xda" + - "\x2f\xd8\x0f\x1f\x03\x04\x63\x7b\xa1\xdb\xc5\x86\x3b\x1b\x2e\x02\x54\x7f\x83\xdc\x59\x18\x55\x56\xaa\x6e\x74\xd5" + - "\xd4\xe4\x3e\x0b\xe5\xd0\xc9\x98\xb1\x48\x19\x94\x74\x6f\x62\xf2\x3c\x19\xd8\x4f\xf8\x01\x22\xaf\x26\xd4\x8e\x11" + - "\x10\x4a\x81\x4d\x88\xd0\x93\x6a\xd4\x95\x99\xdc\x6e\xb4\xe1\xa2\xfc\x35\xcb\x73\x0d\x6a\x33\x53\xec\xfd\xf9\x64" + - "\x94\x96\x93\x7a\xf4\xfc\xe4\x64\xe4\xb5\xe7\x15\xfd\xa4\xcd\x36\xfa\x7b\xcf\xf6\xfa\x06\x9a\xef\x1d\x6f\xef\x4d" + - "\x4e\x8d\x3e\xeb\x0f\x19\x3b\xb9\x58\x2d\xea\x65\x9e\x35\x77\x69\xc2\x87\x0f\xfb\x4e\x01\x0e\x1f\x56\x26\x7f\xb3" + - "\x5a\xb4\x3f\x3b\xdd\xdd\x3b\xeb\x1f\x85\x5f\x8b\x0f\xad\x58\x55\xd7\x27\xf3\x72\x6d\xf7\xb0\x72\x3c\xb6\x4a\x1c" + - "\x97\x3d\x50\x97\x59\x4d\xb0\xb2\x63\x95\xcc\xb3\x34\x35\x45\x32\xe0\x09\x1a\xab\x04\x48\x5f\xa2\xe0\xe6\x9f\xd4" + - "\xf5\x1b\x48\xbd\xff\xae\xd2\x45\x6d\x19\x24\x4e\x9f\x93\x83\xfd\xf2\x64\x09\x0e\xd0\x63\x4b\xd0\x28\xab\x76\xd1" + - "\xfc\x8c\x22\xa2\x4a\x9e\xec\xef\x27\x22\x42\xa5\xae\x7f\x04\x9a\x8e\xf0\x34\x2a\x41\x33\x8c\xed\xfe\x5b\xfb\x9f" + - "\xd7\xe5\xaf\xf6\x9f\x45\x9d\x90\x8d\x0c\xd4\x29\xe8\x22\xac\x26\x75\xed\x39\xda\x85\x86\x74\x6b\x80\xb3\xb2\x2c" + - "\x2d\xed\xce\x40\x37\x74\x09\x37\x87\xc2\x9b\xc3\x67\x6c\x94\x46\x6f\x2c\xf2\x63\x55\x2e\x11\x29\x0f\x2d\xdc\xac" + - "\xdb\xfc\x8d\x0f\x88\x0b\x84\xb0\x7b\x07\xf0\xed\x91\xd5\x46\xfd\x4d\x13\xb7\xe4\x70\xe7\xe8\xe4\x74\xa8\x05\xe0" + - "\x5d\xc0\xe4\x23\x3f\x6a\x1b\x88\xfb\x0d\x0d\x12\x75\x9a\xe8\x25\x01\xe9\xd9\xa7\xa7\xfb\x67\xc3\xa6\xfc\xf3\x72" + - "\xe9\x42\x20\x76\xe1\xf9\xb0\xce\xb3\x89\xe9\x1d\xa0\x2a\xa3\xac\xb2\x99\xf8\x08\x9e\x41\x3e\x7e\xbf\x02\x81\x2f" + - "\x63\x47\x5e\xfe\x02\x3f\x17\x5f\xa0\x7f\xc7\x2e\x77\xc8\x03\x36\x75\x0e\x3a\x1e\x75\x5b\x55\xc9\x9d\x3c\x8c\x51" + - "\x1b\x6b\xd3\x20\x0b\x7b\x69\xde\xac\x2c\xe5\x65\x52\x46\x4e\xfe\xf5\xea\xbc\xa9\xf4\xa4\x89\xd1\x6c\x61\x5b\xb9" + - "\x23\x17\x06\x93\x08\xa8\x5c\x2e\xcb\x8a\xd1\x3f\xae\x20\xc6\x9b\x14\xeb\x5e\x71\x9a\x70\x3b\xc9\x40\xa1\x23\x3b" + - "\x20\xf6\x81\x57\x82\xae\xc1\x01\xb3\xae\xbf\x2f\x4b\x8c\xe2\x78\xad\x9b\xf9\x70\xa1\xaf\x7a\x6a\x7f\xc0\x4d\x20" + - "\xb4\xcc\x9e\xea\xf9\x2e\x53\x16\x26\xbb\x6c\x3d\x5f\xec\x11\x86\x92\x24\xcb\x2b\x07\xff\xc8\x81\x1a\xe1\xd4\xe8" + - "\x15\x38\x6b\x82\x02\xf8\x6d\xf5\x3d\x9c\xb3\xd0\x48\x65\xae\x9a\x4a\x0f\x54\x56\x7f\x0b\x1c\xcb\xb7\xe5\xd5\x00" + - "\x17\x26\xc6\xbc\x85\x82\x20\xa5\xf6\x64\x69\x75\xcc\x3a\x9f\x44\x8d\x9d\xae\x28\x61\x10\x49\xb4\x38\xaf\x9d\x1d" + - "\x98\x00\xcf\x1d\xc0\xcd\xc2\xe8\x7a\x55\x11\x0e\x09\xe2\x0b\x50\x9f\x9d\x43\xe7\x13\x1c\xe0\x68\xa4\xde\x36\x73" + - "\x53\xad\x33\x88\x30\xca\x1a\x02\x0f\xb2\xe7\x61\x5e\x56\xd9\xaf\x96\xcf\xc8\x15\x9c\x8e\xaa\xc9\x26\x3a\x17\x1c" + - "\x81\xdf\xa1\x56\xca\x06\xc6\x29\x51\xc7\xea\x40\x8d\xc1\x11\x9e\x26\xd0\x7b\x3f\x49\x4f\xd8\x27\xf6\x9f\xdd\x23" + - "\xf5\x88\xb7\xea\x68\x84\xca\xa5\xf3\xf2\x4a\x2d\xca\xd4\xe4\x56\x50\x9d\xe4\xab\xd4\x10\xa7\x34\xb0\x9c\xba\x4e" + - "\x53\x95\x35\x14\x32\xb5\xd6\x45\xa3\x84\xbb\xba\x9f\xcc\x04\x3f\x49\x44\x28\x58\x6e\x5b\x8b\xdd\x2f\x68\xa5\xec" + - "\x79\xaa\xeb\x97\x00\x0d\x40\xde\xa0\xe8\x45\xcb\x6b\xd6\xf2\xe1\x96\x6b\xc5\x6d\xc0\x08\x58\x4d\x63\xe5\x25\xdb" + - "\xf9\x9a\xd9\x76\xe8\xbe\xd3\x4b\xcb\x11\x48\x38\xa2\x78\x1c\x62\xe5\x9d\xc3\x7b\xae\xf6\xba\x46\x92\x50\x43\xc9" + - "\xa7\x8d\x46\x2a\xa8\x41\xef\x96\xd5\x0a\xd2\x3a\xf2\x9c\x64\x90\xe3\x16\x47\xa4\x0a\x27\x69\xc9\x71\xe0\xcb\xb8" + - "\xe3\xdb\x5d\x0b\x70\x4b\xbf\x79\xa3\xc7\xdd\xb6\xd7\x2a\x9c\xb1\x64\xe3\x00\x22\x9f\xc9\xdb\x87\x42\x73\xe9\xf6" + - "\x91\x94\xa7\x36\xee\x8f\xdf\x35\xab\x9f\xde\x09\x98\x50\xb9\x33\x6c\x87\x6e\x99\x4e\xd7\x8b\x60\x3e\xbb\x7b\xfc" + - "\xef\xcd\x67\x7c\x41\x5c\x82\x0e\xa2\x85\xe8\x7b\x17\xf1\x93\xd7\xf8\x89\x65\x25\x91\x93\x2c\xa7\x53\x2b\xf4\x32" + - "\x4b\x60\xa9\x79\x36\x99\x83\x56\xea\x9f\xab\xec\x52\xe7\x94\x05\x1f\xb5\x4b\xee\x30\x01\x1d\x26\xb2\x09\xbf\x5f" + - "\x89\xf3\x77\xe4\x53\xcb\x23\xb9\xe9\xa0\x49\x68\xc6\x86\xc6\xd1\x84\x37\x96\x8f\x70\x14\xde\x51\x80\x30\x12\x43" + - "\x17\x00\xbc\xbf\x83\x76\x3b\x27\x9f\x74\x38\x89\x0b\xcf\x70\x84\x1f\xba\xe4\x47\x95\x38\x41\x00\xcc\xdc\x0e\xba" + - "\xce\x01\x4e\xd1\x0a\xf8\xcb\xd0\x12\x50\x31\x08\xd8\x38\x9e\x7f\xb1\x52\xe4\xc8\x15\xa6\x9a\x2f\x67\x6a\xcf\xb1" + - "\xd9\xe7\xab\x19\x72\xd7\x92\xcb\xae\xe7\xe5\xfa\xc3\xf9\x6a\x36\x9c\xcc\xb2\xe3\x2c\x3d\xfa\xe2\xc9\xd7\x8f\xbe" + - "\xfa\x9c\x13\x53\x37\xf3\xd7\x3f\xfc\xde\x1a\x9e\x7c\x7d\xf0\xc5\x17\x5f\x31\x37\x66\xd7\xe4\xe9\x91\xda\xb7\x77" + - "\xeb\x65\x5b\x6d\x06\x28\xbe\x79\xae\x20\x68\xa6\x29\xbd\x3a\xa9\x81\x7b\xbe\x70\x7f\x5b\xde\x33\x9b\xaa\xc2\x4c" + - "\x4c\x5d\x6b\xc4\x8c\xc2\xf5\xee\x72\x13\x09\xb6\xb6\xef\xc7\xc6\x6e\x50\x55\x1b\x04\x41\x89\x80\x4a\xdd\x59\x15" + - "\x99\xb3\xd3\xa1\x93\xc0\x50\x9d\x34\xe5\x12\x85\x1d\x2b\x95\xe2\xf2\x0d\xef\x6d\x30\xf0\x5f\xea\xbc\x15\xf0\x74" + - "\x49\x0a\x3f\xdf\xde\xda\x90\xe6\x94\xa1\x98\x31\xdf\x01\x2a\x98\x0b\x35\xd1\xb5\x51\xda\xa7\x82\x85\xd3\xc4\xaa" + - "\xb2\x55\xc1\x0a\x43\x61\x03\x1f\x8d\xa0\x86\x96\x7e\xad\xce\xec\xd9\xcb\xaf\x21\x70\xb4\x76\xcb\x01\x4c\x05\xd7" + - "\xe2\x67\xc7\x31\x47\xe1\x41\x94\xc7\x83\xfc\xfc\x9d\xbe\x7a\xd8\x52\x6f\xf6\xfa\x7e\x31\xba\xa6\x5e\x7a\xd8\xa1" + - "\xfc\x63\x59\x93\x24\x19\x28\xbd\x6a\xca\x01\xc7\xf3\x2e\x35\x49\x97\x40\x78\xfc\xb6\x90\x5a\x98\x4b\xf0\x0b\xb7" + - "\x7c\x5f\xc0\xfc\xb3\x22\x5b\x4f\x2c\x9f\x2b\xb4\x5c\xc8\x82\x80\x6c\x93\xa6\x23\xc7\x38\x66\x56\x24\x34\x97\xf6" + - "\xd6\xc6\x0d\xe6\xe9\x24\xb6\x01\x8a\xad\x4e\xfe\xf0\x1e\xfb\x77\x13\x3e\x28\x4b\x04\x5b\x48\x2e\x21\xcb\xdb\xa7" + - "\x70\x80\x22\x4c\x50\xcc\x3d\x85\x18\x72\x9f\xb6\xfa\xf7\x3e\xdb\x82\x5c\x15\xa8\xc4\x8a\x58\xfb\x79\xb9\xfe\x3e" + - "\x63\x04\x4b\x0c\x7a\xb5\xcf\xa4\x47\x25\xca\xa1\x8c\x24\x86\xf2\xe9\xc0\xad\xba\x40\x36\xc5\x68\x3b\x97\xbd\x81" + - "\x42\xc8\x5c\xcd\xdd\x59\x1c\xe0\x9b\xa7\xca\x61\xeb\xda\xbf\xbd\x1b\xbc\x80\xf8\x20\xd8\x5c\x28\x2f\xd2\x3b\x6d" + - "\xfb\xcd\xe2\x8e\x50\x00\x8a\xf7\xd1\xb1\x9f\x2b\xe3\x2b\x08\x90\xc3\x44\x2a\x96\xa4\xcc\xd3\xc0\x03\x37\xf6\x1f" + - "\x1d\x06\x7e\xbc\xbe\x1f\x62\xd6\x84\x4a\x17\x73\x0b\xe6\x59\x61\xa4\x17\x3a\x70\x04\x1c\x95\xdc\x94\x2a\x37\xba" + - "\x22\xbf\x0a\x81\x21\x88\xb1\x66\x38\xdf\xea\xfc\xda\x1e\xf0\x89\x4e\x4d\xaa\xaa\x95\xa5\x67\x96\xcc\x97\x82\x55" + - "\xdc\x8e\x47\xb8\xb3\xd3\xe5\x50\xea\xb8\x86\xf6\x60\x42\x78\x0b\xee\xc6\x89\x11\x19\x56\x90\xaa\x80\x8c\x01\xc9" + - "\x3e\xca\x4b\x53\x55\xd8\x43\xb8\xd4\x9d\xd2\xa2\x20\xd0\x67\xf0\xcc\x2a\x00\x81\xd4\x6e\xc8\xb9\x31\x30\xe2\xf5" + - "\x5c\x37\xe6\x92\x74\x78\xec\x13\xc9\xa4\x8b\x48\x9a\x9b\x08\x20\x73\xab\xc9\x3c\x70\x1b\x0e\x82\xf4\xa3\x61\x38" + - "\x27\xb6\xac\xfe\x1e\x3a\xd7\x86\x9c\xbb\x6d\x3b\x70\x00\x52\x7b\x47\x0c\x62\x17\x64\x07\x11\x60\x05\xe7\xfe\x66" + - "\x76\x94\x56\xf1\xa8\xd5\xa3\x20\x12\x93\x07\xb0\x1d\xfa\xff\xd2\xc7\xae\xef\x51\x12\x8d\xae\x6e\xd2\x27\xc7\x6a" + - "\xb3\xbf\x79\xe0\x6a\xbe\x81\xf1\xa3\xe5\x87\x45\xf2\xdb\x77\x51\xd6\x4d\xe4\x32\x5e\xd3\x22\xa3\x61\x3e\x2f\xcb" + - "\x25\x7e\xed\x40\xed\xd0\x07\xb6\xa8\x1b\x4b\x30\x2b\x33\xcd\x21\x4d\x39\x45\x9c\x31\xdd\xf8\x5f\x22\x07\x0e\x57" + - "\xde\x1e\x59\x06\x8b\xef\xd8\x42\x6e\x05\x36\xef\x31\x19\xad\xd3\x3a\x4c\x50\xff\xb1\x8a\xb7\x1a\x46\xbf\x8d\xa9" + - "\xfe\x6e\x5d\x0c\x8f\xf0\x70\x63\x46\x00\x02\x73\x76\x6a\x1e\xa7\x8b\xf3\x4e\x4c\x74\x38\x21\x3b\x95\x3f\x66\xf8" + - "\xed\xb9\x99\xeb\xcb\x0c\x98\x48\xcb\x00\x80\x47\x07\x84\x2f\xf0\xef\xa8\x5a\x54\x17\x82\x76\x65\x4c\x6a\xf3\xa5" + - "\x9e\x80\xca\x12\x67\x20\x74\xf8\x62\xb8\xf2\xc8\x87\x75\xab\xdb\xb5\xd5\xc1\xed\xd7\xf3\x72\x95\xa7\x4a\xa3\xcb" + - "\x38\x7a\x0d\x16\xa0\x72\x42\x2e\x04\xdc\xe7\xa9\x61\xfa\x50\xe4\x0d\x09\x78\xbf\x84\x8a\x25\x3e\xf2\x4d\xb8\xe4" + - "\xd1\xf2\x1d\xab\xe4\xc0\x2e\x85\x33\x94\xb4\x92\xaf\xb8\x5c\x72\x64\xe5\x5f\x35\xe5\x42\x83\xf6\x23\xbf\x06\x49" + - "\x0d\x74\x44\xc8\x1d\xd5\x86\x9d\xd4\xae\xf7\x2c\x4f\x98\x1b\xaf\x23\x45\x1d\xc9\xa4\xae\x51\x83\x46\xb3\x96\x4c" + - "\xca\x7c\xb5\x28\x9e\x97\xab\xa2\x49\xc6\x5e\x78\x49\xa6\x59\x9e\xbf\xa5\x01\x04\xcf\x73\x73\xf5\xc7\xaa\x5c\xb7" + - "\x1e\x9e\xcc\xab\xac\xb8\x08\x1f\x3b\xcd\x6f\xf0\xd8\x5e\x46\xdf\xb7\x1f\x97\x1d\xad\x21\xd3\x11\x3e\x59\xce\x75" + - "\x51\x07\xcf\xd6\x59\x5a\xae\xc3\x47\xe8\xbe\x18\x3e\x2a\xcb\x05\x3d\x08\xe6\x95\x36\xb1\x30\x2e\xad\xe7\x65\x6d" + - "\x48\xc7\x7b\x5d\xae\xd4\x3a\xab\xe7\x80\x44\x9b\x5d\x29\x0c\x15\x64\x73\x02\x6e\x55\x64\x61\x1b\xde\xe6\x2c\x20" + - "\x82\xa6\xb4\x5c\xf2\x76\x1d\x8d\xac\xa0\x4d\x8c\xe3\xd4\xb2\x82\x81\x0a\x9b\x26\xb2\xd4\x76\x56\x92\x49\x5d\x03" + - "\xb7\x98\x04\x5d\xfd\xa3\x69\xf8\x8c\xa0\x1b\x52\x78\xf0\x4a\x4b\x01\x5f\xbc\x7d\xad\xde\x20\xc8\x38\xbc\x6e\x9f" + - "\x09\x14\x4a\x48\x75\x2a\x04\xe4\x2d\xbf\xcb\x6c\x03\x24\xb5\x94\x05\x02\x97\x6b\xf4\x77\xf2\x10\x36\x21\xc5\xeb" + - "\xce\x79\xf1\xb8\xfb\xf1\x57\x70\xab\x74\x10\x4a\xe1\xb4\xf8\x31\x84\x59\xa9\x57\x15\xf9\xb6\xac\xcd\x83\xca\xa8" + - "\x75\x59\x5d\xd8\x09\x77\x90\x2a\xa8\x6d\x2c\x28\x9a\xc5\x59\xf1\x10\x78\x14\x48\x12\xf2\xa5\x42\x13\xce\x17\x92" + - "\x5e\x98\x1c\x74\xe7\xa4\xf4\x17\x0c\x6c\x87\x9b\x3e\x2b\xc2\xfd\x75\x06\xab\x7c\xea\xd4\xd7\x48\x61\x7b\xb7\x16" + - "\x38\xda\x64\x76\x70\x65\xfa\x52\xe2\x00\xe7\x06\x3b\x08\x07\x22\xe0\x2c\x03\x97\xa6\xaa\x49\x8f\x0a\x9c\x4a\x9e" + - "\x97\x6b\x93\x5a\x76\xcd\x16\x5b\x15\x5d\x05\x91\x42\xcb\x21\x00\x5d\x75\xb2\x8e\x0b\xcd\x11\xaf\x7c\xe7\x7d\xb7" + - "\x9c\xf3\x06\xae\x89\x27\xdd\x7c\x04\x24\x64\x55\xe8\x84\xcc\x2b\x4e\xd9\xe2\x24\x7e\x87\x50\x5e\x4d\x08\xc1\xbe" + - "\x32\xb9\x06\xa9\x88\x68\x31\x82\x7b\xd4\xaa\xb7\x7b\x64\x4f\xdf\xde\x51\x1f\x13\xef\x04\xa5\xea\xa1\xba\xff\xe5" + - "\xe3\x27\x9f\x7b\xf6\xa6\xe1\x0d\x28\xb1\xa9\x7a\x48\xbc\xc9\xc0\x16\x1a\x09\x62\x7e\x0d\x41\xea\x4d\x73\x7a\x70" + - "\xa6\x76\x01\x98\xe2\x21\xfc\xf9\xc8\xfe\x29\x65\xbc\x36\xaf\x53\xf8\x45\xdd\x92\x18\xe6\xe7\xab\x99\xba\xff\xf5" + - "\x23\x08\xbb\xf0\xf3\x91\xe0\x10\xda\xcc\x70\x74\x18\x40\x6d\x60\x8f\xe6\x1b\xfd\x86\xdd\xdd\x75\x65\xe8\x0c\x0f" + - "\xd5\x89\x31\x63\x75\xff\xcb\x83\x83\x2f\xfc\x2c\x30\x48\x0a\x7e\x8c\x52\x2f\xad\x4f\x88\x59\xb6\xc9\x87\xf8\xd5" + - "\xd4\xdf\x8a\x6b\x5d\xab\xa5\xae\x6b\x00\xa3\x18\xc0\x85\xf4\x60\x79\xf5\x80\xc5\xf5\x1e\x19\x6a\xed\xb6\x65\x74" + - "\x8a\xd0\x94\xdf\xef\x5a\x1e\x1a\x7d\x10\x06\xc2\x37\x57\x70\x8e\xa2\xe5\xd9\x3d\x62\x29\x33\xec\x31\xc1\xc5\x7f" + - "\xf5\xf5\xfe\x57\x03\x06\xd6\x38\x87\x98\x46\xa3\x20\x3a\xd3\xc3\x68\x9c\x5f\x53\x4c\xe5\xb5\xdd\xca\x35\xd8\x34" + - "\x03\xdb\x8e\x0b\xca\x3c\x5f\x35\x10\x92\x09\x1c\xc3\xc2\xe8\x02\xe3\x0f\xc1\xa1\x1a\xae\x37\xd5\x03\x4d\xc0\xa5" + - "\xa9\xae\xed\x80\xcf\x73\x03\x37\xb7\x23\xd8\x7d\x95\xa5\xa6\x40\x4b\x06\x13\x69\x01\x15\xbe\xbd\xc9\x9d\x77\x67" + - "\x47\x02\xdd\xc0\x2c\x81\xc5\x0f\xf8\xbb\xb7\xd3\x9e\x4a\xbc\x93\x6f\x42\xba\xbe\x7d\x01\x89\x12\x19\xec\x93\xac" + - "\x98\x9b\x2a\x6b\xda\xd3\x06\x0b\x0d\x64\x07\x96\xb9\x2a\x2f\xb3\xd4\xa4\x8c\xeb\xa5\x1b\xbe\x44\x4a\x67\xb6\x01" + - "\x84\x38\x77\x3d\x61\x6c\x2a\x87\x3d\x88\x91\x21\x01\xb2\x97\x40\x2f\xa9\x4d\x93\xd8\xf9\x85\x67\xa0\x17\xe9\xf1" + - "\x59\x83\x47\x52\xc6\x08\x2f\xad\xfe\x06\x9a\xd2\x1a\xa1\xc0\x38\xa3\xd1\xc5\xaa\xfa\xee\x91\x02\x03\x08\x9e\x1c" + - "\x65\xb1\x17\x05\x8f\x70\xba\xa1\x4a\x8c\x0b\x87\xb5\xb3\xa3\x92\x99\x1c\x94\xa0\x32\x38\x22\x21\xee\x93\x5e\xf6" + - "\xae\x11\x75\xf8\xd3\x70\xd7\xdf\x86\x93\xcf\x5d\x0e\x7b\x49\xac\x82\x73\xf5\x74\x35\x76\xea\x17\x85\x7d\x7e\x13" + - "\xfb\x40\x56\xc5\xc0\x90\xc8\x2a\xf1\x81\x25\x0e\xbf\xf7\xd2\x3d\xfc\xb7\xee\xfb\xff\x99\x3b\xd9\x5f\xfd\xff\x0f" + - "\xbb\x98\xef\xd8\xce\xb7\x6e\xe5\x5b\x77\x72\xa8\xa1\x6e\xed\x66\x34\xe5\xd0\x66\x8e\xd8\x38\xb7\x4f\x07\x96\x63" + - "\xd0\x32\x02\xbc\xa3\x4f\xe6\x2a\xab\x9b\xda\x93\x1a\xc9\x4c\x44\xe8\x97\x61\x9f\xee\x54\xc0\xbb\x1e\x31\x73\x91" + - "\x20\x5b\x9e\x04\x1a\xff\x16\x07\xc3\x12\x39\x16\x25\x92\x4b\xf7\x42\xec\x10\x13\xf5\xa8\x55\x60\x83\x3e\x1f\xd3" + - "\x4e\x0d\x98\xeb\x01\x79\xa2\xe4\x8b\x36\x9b\xda\x2d\x36\x31\xa9\x82\x00\xc2\x7f\xae\x74\x6e\x69\x6b\x15\xae\xb0" + - "\x65\x05\x6c\xab\x39\xac\x56\xb1\x5a\x98\x2a\x9b\xdc\xeb\x30\x4a\xa3\x5a\x41\x32\xff\x5b\x05\xb8\x17\xb5\x34\xd5" + - "\x87\x92\x5c\xf8\x1a\x20\x1e\xc5\xef\xc7\xcc\xde\xce\xb6\xb1\x9e\x6d\x55\xf5\xd5\x31\xfc\x0b\xde\x0d\x63\x69\x4b" + - "\x88\xed\x0b\xdd\x90\x2e\xa7\x2a\xc1\xb0\x92\x64\xe0\x2c\x67\x67\x12\x67\x25\x93\x1e\x3a\x5b\x9b\xce\xcb\x51\x57" + - "\x2c\x58\xa4\x1a\x88\x64\xa0\x4d\x0a\x02\xcb\x8d\x12\x03\xe3\x54\x4e\x96\x8d\x00\x55\x64\x9a\x2d\x4c\x51\x83\x5f" + - "\x6f\x31\x2d\xc9\xa0\x9e\x15\xe0\x57\x95\x5f\xa3\x1e\xa6\x99\x9b\x85\xab\x6a\x5e\xae\x2d\x5f\x00\xcc\xc8\xc2\x92" + - "\x6d\x04\x56\xb0\xbb\xb7\xb2\x12\x16\xeb\x70\x90\x6c\x23\x1d\x04\x3e\xe3\xdc\x14\x66\x9a\x35\x7c\x66\x49\x47\xe9" + - "\xee\x07\xe1\x8c\x46\x31\x9a\x77\x68\xdd\x1c\x76\xac\x34\x48\x22\xc3\x40\x69\x00\xb6\x84\x37\xa5\x9b\x3b\x74\x29" + - "\x1b\x74\x38\x7c\xbb\xbe\x7c\x92\x61\xd6\x01\xf7\xbb\xd4\x02\x5b\xbf\xe3\x3b\x42\xfc\xc4\x03\x54\x77\x2d\x72\x97" + - "\x94\xeb\x71\x4c\x6a\xe7\xf5\x82\xd9\xe1\x5a\x71\xd6\xe2\x9e\xbc\xc3\x05\x09\xab\xa1\x29\xdb\x6c\x74\x91\x66\x17" + - "\x69\x78\x21\xd3\xcb\x20\x9c\xf2\x7f\xd5\x98\xcb\xd5\x78\x1b\xcc\xd6\x56\x5f\x8d\xd5\x3e\xfc\x8c\x22\xf0\xfa\xad" + - "\x64\xf3\x81\x0f\x76\x74\xb4\x22\x6f\xe6\x30\xc6\x93\x19\xd6\x8e\xd8\x80\x81\x88\x8f\xda\xa4\x9c\xeb\x3e\x79\xff" + - "\x69\x9f\x7c\x5b\x5f\x59\x5d\x28\x0d\xfc\x31\xdc\xc7\x04\xd7\x92\xd9\xa3\x4a\x32\x2c\x1b\x47\xf8\x20\x36\x25\x99" + - "\x51\xf6\xc0\x19\x52\x6e\x8d\x8e\xf3\xf1\x9b\x3f\x64\x63\xcb\x5f\xfb\x0f\xc9\x8b\x72\x6b\x6b\x0b\x2f\xaa\x01\xe5" + - "\x92\x1b\xb0\x9b\x0a\xcc\x56\xe2\x72\x33\x92\x62\xd6\x2d\xd2\x3b\xd0\xf2\xe1\x65\xac\x2b\x83\xce\x67\xe7\xd7\x4a" + - "\x17\xd9\x42\x63\xc0\x3a\xa6\x15\x09\xf4\x7e\x31\x5a\x16\x79\xb1\xab\x04\x51\xb2\xc8\x83\x9d\xfe\x24\xcf\x76\x76" + - "\xd0\x88\x00\xae\x90\x6d\x19\xa8\x7a\x35\x9d\x66\x57\x9b\xe8\x2f\xb9\xea\xef\x72\x31\x47\x8a\xb1\x73\x1b\x31\xb5" + - "\xa3\x04\xec\x5c\xde\xa0\x07\xf6\x40\x44\x2c\x60\xb8\x13\x24\xb0\xc9\x8a\x59\x6e\xc4\x3d\x59\x94\x0d\xa8\x8f\x2b" + - "\x17\x22\xb0\x04\xff\xe1\xa3\x5b\x60\x42\x49\x4b\x3e\x04\x4f\xc1\x5e\xa2\x12\x7b\x5e\x4e\xa9\xe4\x59\x98\xf0\xd4" + - "\x7b\x8d\x49\x48\x3a\xee\xa9\x18\x7c\xcb\xe7\xc5\xcf\x06\x9d\x50\xe8\x98\x43\x8e\x76\x7f\xed\xb1\x03\x20\x3d\x71" + - "\xd9\xe0\x3e\x86\x71\xb7\xdc\x66\x70\xa2\x5d\x38\x6a\x18\xac\x4f\xbd\xea\x47\x91\x5c\xb7\xac\xd9\x10\x61\x62\x5b" + - "\xa4\xaf\xf3\xda\x0e\xf3\xd4\x44\x92\x83\x50\x39\x7e\x22\x7a\x7a\x4b\x55\xd9\x41\xbd\x07\x2a\x27\x43\xf0\xd6\xd6" + - "\x02\xbc\xaf\x43\x34\xf5\xc0\xb4\xe5\xf8\x14\xca\x6c\x26\xb1\x0b\x3c\xad\xec\x72\xb6\xa1\x3b\x2a\x07\xf3\x19\x08" + - "\xda\x11\xea\x67\x80\xaa\x69\x8a\x18\xaa\x70\xa1\x97\xc8\x90\xe0\x3a\x9f\x75\x3a\xeb\xb8\xf7\x2d\xea\x1e\x43\x40" + - "\x3a\xa7\xd5\x65\xe7\x96\xe8\x52\xb6\x85\x09\x7d\x5a\xb0\x18\x7e\x86\xc7\x41\xc1\x96\xf6\x0a\xb7\x59\xa4\x41\x6e" + - "\x21\x6c\x7f\xa3\x0e\x3c\x6e\xf2\x96\xe5\x7d\x36\xe6\x20\xf1\xd6\x7f\x5c\xff\x10\x73\x79\x6b\x9e\xa5\x9b\xd3\xad" + - "\x84\xdf\x8a\xaf\x9a\x72\x36\x0b\xf5\xde\x98\x5e\x5b\xde\x32\x44\x08\xf0\x05\x5d\x9f\x65\x6e\xb4\xf0\x12\x74\x02" + - "\xb2\x2d\x82\xc8\x77\x43\xdb\x66\x8f\x13\x83\x0c\x6d\xf7\x7a\x1b\x41\xe5\xba\xd3\x22\x91\xc7\x26\xdb\x60\x19\x91" + - "\x9b\x37\x0b\x23\x22\xe1\x73\x6a\x8f\xd6\x39\x40\x64\x8c\x0a\x8a\xae\xb4\x62\x6d\x0e\x23\x5c\x86\x77\x6b\x63\xda" + - "\xc1\x30\xf6\xba\x18\x28\x53\x58\x7e\x58\x03\x9a\x01\x76\x8a\xbd\xb6\xcd\x1a\x3f\x1c\x2e\xab\xb2\x29\xed\xfc\x0d" + - "\xb3\x22\x6b\x3e\xa5\x1e\xb4\x21\xd2\xa6\x82\x4a\xd4\x11\x56\x06\x5d\x8b\xaa\xa5\x9b\x02\x6c\xb5\xd5\x6a\xd2\x94" + - "\xd5\x18\x0b\x23\x3c\x63\xd6\xc1\xe5\x6d\x6e\x7c\x80\xbe\x51\x34\xbf\xb8\x2e\xde\x84\x7b\xe8\x1e\xda\x0f\xad\xf0" + - "\x53\x95\x4b\xff\x90\xfa\x7f\xc4\x03\xb9\xb9\x51\x49\xbd\xb6\xd7\x85\x2f\xc3\x11\x31\x2e\x16\xc7\xbf\x82\xa8\x15" + - "\x46\xdf\x2e\x20\x00\x03\x71\x13\x57\x15\x2d\x15\xb6\x52\xd8\xcb\xcd\x14\xa9\x7f\x04\x7d\x3e\xc2\xae\x47\x6a\x0b" + - "\xd6\x81\x42\x87\xcf\xd4\x31\x59\x72\xc1\x4f\xdc\x9d\x80\xc9\xaa\x23\xed\x8f\xa5\x9b\xac\x5f\x70\x53\xbe\x24\xda" + - "\xef\x27\xe1\x2c\x4c\xb5\xe1\x14\x01\x4e\xd6\x27\x6a\x22\x64\xff\x20\x37\x58\x54\xb5\xcb\xb8\x2a\x8b\xba\x8e\x56" + - "\x2b\x19\x25\xcc\x30\x39\x01\x10\xa6\xae\x4d\x3a\xf0\x2d\x7e\x5a\xe7\x7d\xaa\x22\x5a\x95\x61\xba\x42\x00\x61\x6f" + - "\x78\x80\x8f\xca\x1a\x97\x17\x18\x0c\xc7\x25\xd9\xd5\x3e\x55\x72\x0f\x9c\x11\xfb\x4e\x3d\x1c\x6c\xa8\xfc\xa1\x72" + - "\x05\xf6\x07\xea\x60\x43\x31\xc9\x85\xcb\x43\xdd\xd1\x25\xaa\xce\x0b\xcf\x62\x33\xd1\x08\xed\xfe\xd9\x53\x62\xc7" + - "\xf5\xd5\x43\xfa\x7e\x57\x3c\xde\x38\x33\x75\x63\x96\xe1\xac\xc8\x37\x02\x9b\x78\x68\x44\x12\x27\x2b\xfc\x09\xac" + - "\x6f\xe9\x8f\x1e\x6d\x99\xda\x78\x38\x6e\xa1\xd0\x95\x1f\xcb\x49\xd8\xb8\x7f\x5a\x5f\xdd\xeb\xc6\x87\xed\xa2\x29" + - "\x40\xaa\x02\x12\x13\x15\x08\x3f\xc2\xa6\x89\x10\x71\x07\xc6\x9d\xba\x84\x06\xc8\x99\xe4\x4d\x2a\x53\x63\x82\x61" + - "\x4f\xef\xa1\xd0\x10\x31\x16\x1b\xd7\x88\x3a\xe3\x54\x44\x0e\x87\xb8\xb7\xed\x8b\x92\x69\xf4\xe6\x46\xc5\xcf\xa2" + - "\x4a\xc8\x92\xd3\x6f\x69\x8b\x37\x35\xdb\x52\x21\x2f\x35\xe2\xd7\xe8\x82\xb2\x32\x20\x57\x0c\xb8\x3f\xea\x71\x95" + - "\x2a\x80\x47\x34\x8d\xa9\xac\x7c\x61\xc9\x90\x5a\x67\x79\x1e\x3a\x23\x70\x65\xba\xb1\xf2\x94\xe5\xc0\xbd\x2a\x09" + - "\xf4\x52\x2e\x0b\x08\x44\x69\x51\x13\x14\x7c\x0f\x45\x11\xa8\x90\xeb\xa9\xcb\x01\x83\x18\x92\x61\x0b\x5d\xb0\x6a" + - "\x95\x1c\xec\x5b\x7a\x67\xc5\x1f\xf8\x0e\xe2\xbe\xa0\x9d\xe1\x3d\x67\x38\xb4\x1f\x5e\xb5\xbe\xac\x4a\x7b\x9d\xf7" + - "\x0e\x2a\x9d\xf6\xb1\x06\x9c\x2b\x8a\xe0\xa9\x87\x74\xf5\xdb\x25\x8c\xf8\x34\x3f\x9b\x03\x31\x9b\x08\x6e\x7c\xc8" + - "\xed\xbe\x14\xd3\x57\x73\x2a\x12\xcf\x88\xd9\x69\x48\xec\xac\x61\xdb\xa4\xe8\xc3\x01\xec\x0f\x25\xdb\xb1\x4d\x7d" + - "\xb8\xb9\x51\xdc\x1b\xcb\xa5\xe0\xb7\xc7\xa0\x54\x73\x1b\x8d\x63\xf2\xeb\xdb\xb6\x26\x79\x98\xc2\x69\x77\x0a\x6b" + - "\x58\x0e\x3b\x57\xba\x51\x7b\xf0\x9e\xc4\x01\xf4\x05\xac\x09\xa3\x08\x5f\xd1\x86\xc4\x37\x6e\xb5\x2f\x75\x96\x83" + - "\x43\xae\x1d\x1b\xc0\xf4\xe6\x3a\x76\xa7\x00\x2f\x64\x2e\xd8\x62\xc9\xa7\x57\x40\x69\xa2\x5d\x1d\xb1\x44\xdd\xa5" + - "\xdc\x20\x03\x16\x29\x3a\x73\xd4\x6f\x80\x7c\x6d\x1f\xa5\x96\x45\x20\xe8\x85\x3f\xa2\x5d\xaa\xf7\xa8\xc3\x71\x97" + - "\x89\xd1\xde\xb4\x71\xf0\xb7\xa5\xe5\xbb\xf4\x1b\x79\x95\x2e\x76\x6f\x23\x05\x39\xf2\xd5\xb4\x1d\xe8\x3e\xb6\x54" + - "\x3b\x80\x14\x38\x1a\xa9\x1f\x75\x91\x4d\x08\x18\x41\x2f\x97\x55\xa9\x27\xe0\xe2\x52\x3b\x3f\x16\xb0\xaf\x97\x00" + - "\xf5\x38\x29\x8b\xc2\x4c\xec\x36\x25\xc7\x8f\x16\xa9\x1c\xd6\x93\xaa\xcc\xf3\x77\xc0\x44\x75\xbf\xfb\xc1\x4c\x1b" + - "\xa2\xa8\xb7\xed\xd3\x78\xed\x9c\xdf\xc8\xce\x8e\x7c\xdc\x91\xea\xee\x93\xa7\x28\x98\x9c\xe0\xce\xa7\xfe\xe5\x59" + - "\x61\x74\x15\x30\x26\x91\xd4\xba\xf4\xe2\xcd\x1a\x34\x27\x9b\x8b\xee\x0f\x3f\x57\x7b\x10\xbc\x30\x9c\x94\xb5\x7d" + - "\xff\x10\xff\xfa\xf1\x95\xea\xab\x91\x7a\x74\xd8\xd1\x9d\xe9\x55\xfb\x8a\x82\x3b\x8c\x17\xf4\x5b\x7b\x70\x9f\xe3" + - "\xc1\x7d\x7a\x30\xfc\x4a\x81\xec\x0d\x1a\x68\x08\xf4\x11\x35\xe1\x05\xff\x7f\x31\xf7\xee\xdf\x6d\xdb\xd8\xfe\xe8" + - "\xcf\xce\x5a\xfe\x1f\x10\xa6\x37\x95\x62\x59\xb2\xd3\xa6\xd3\x2a\xe3\xf1\x4d\xf3\x98\x66\x6e\xd3\xf4\x34\xe9\x69" + - "\xcf\x72\x7c\xba\x60\x11\xb2\x18\x53\xa4\x86\xa0\xfc\x68\xed\xff\xfd\x2e\xec\x07\xb0\x01\x52\x76\x3a\xe7\xf1\xfd" + - "\xce\x5a\xd3\x58\x24\x88\x37\x36\xf6\xf3\xb3\x7d\x00\xbb\x0c\xbd\x9e\x5f\xfe\x00\xf7\x78\xb1\x34\xcd\x6b\xe0\xb2" + - "\x9a\xf9\xa5\x6b\xcb\x62\x24\xf3\xe1\x14\x65\xa9\x6b\x27\x87\x5c\x3b\x19\x63\xf8\xd9\x84\x8a\x55\x7d\xc1\xc8\x87" + - "\x53\x8a\x47\xbe\x1e\x26\xf1\xcc\x08\xea\xd9\x09\x6a\x5e\x3b\x51\x60\xf2\xcf\xb5\x59\x1b\xd8\x2c\x58\x3d\x2a\xb3" + - "\x8a\xba\x82\x48\xd3\x12\x2c\xf0\x07\xea\x88\x1d\x08\xfd\x53\xcc\x48\x03\xab\x8b\x45\xd0\xa7\xed\x51\x36\x55\x47" + - "\x91\xca\xca\x1d\xb7\xae\x16\xa1\x25\x51\x04\xb9\x72\x40\xc9\x20\xd9\x28\xfa\x82\x54\x0a\x3e\xe7\x28\xee\x26\xe0" + - "\xe2\x47\xb1\x7a\x09\xa7\x25\x76\x21\xa1\x22\xc4\xd2\x63\xc9\x87\x0f\x59\xb1\xf3\x45\xd7\x30\x79\x1b\x87\x2f\x15" + - "\x60\x10\xc9\x54\x78\x5d\xa7\xc0\xa2\x52\x85\xc7\xbb\xc2\x38\x1d\x1f\x11\x8d\x22\xc5\xb2\xb0\x14\x68\xca\xaa\x0f" + - "\x14\x54\x6e\xe9\xc5\xf5\x35\x7e\x8a\x01\x60\x97\x60\x00\xdb\xa1\x19\x11\x69\x14\xa2\x09\xd8\x74\x79\x42\x95\x43" + - "\x3f\x33\x76\xa6\xc1\xcf\x6a\xdf\x6b\x72\x2e\x5f\xb7\xa6\xd1\x2c\x57\x3d\x8e\xf5\x38\xd8\xd9\x87\x0f\xf1\x0f\x9c" + - "\x41\xd4\x76\x14\x6d\x64\xad\x79\xdf\x40\xb6\xba\xaa\x80\xe8\x25\x82\xc4\x3e\xb9\x12\xdd\x8a\x56\x86\x85\xad\x50" + - "\xad\xc4\x47\x09\x36\xe9\x0b\xa3\xd6\xab\x1c\x54\xad\x0b\x43\x5b\x48\x5c\x76\x98\xb1\x84\x33\x5a\xf0\xc6\xc0\x7f" + - "\x01\x73\x21\xca\xa3\x86\xe3\x3c\x37\xe5\x15\x52\xe1\x4b\x54\xe2\x82\x71\x47\xab\xaa\xae\x7e\x37\x4d\x8d\x5d\x72" + - "\x2b\x4d\x47\x5b\xae\x19\x2f\xc2\xf5\xb5\xda\x17\x30\x1d\xd2\xad\xf5\xf5\x1c\x32\xcd\x15\xf5\xda\xaa\x82\x67\x56" + - "\xb9\x9a\x4d\xae\xea\x75\x3b\x52\x79\xbd\x76\x37\x38\x02\x92\x5f\x18\xb0\xc9\x3e\xf2\xc0\xe4\x8f\x42\x55\x3f\x43" + - "\x84\x0f\xb1\x6e\x00\xa2\xe0\xbe\x84\x1f\x1a\x92\x10\xd8\xda\x7d\x8f\xd0\xc9\x7a\x36\x03\xff\x16\xf0\x54\xb5\xc6" + - "\x28\x5c\x69\x6d\xd5\xba\x62\x3c\xcc\x13\x83\x7e\xd8\x72\x23\xe0\xbf\x4e\xd8\x1e\x3f\xc9\xa2\xec\x22\xcf\x72\x70" + - "\x71\x70\x9c\x06\x20\x5a\xf0\x87\x34\x17\xf8\xef\x04\x2b\x60\xcb\xd2\xe6\xbb\x18\x0f\x39\x7e\xb4\xa3\xfc\xdd\xeb" + - "\x57\xe7\x67\x5c\x66\xa8\x6d\xa4\xda\xba\x84\xa9\xab\x4e\x61\xea\x54\xdd\x80\xcf\x15\xda\xe1\x02\x45\xf0\x5f\x3f" + - "\xab\x72\x75\xd2\x18\x7d\xc6\x6e\xa1\x65\x5d\xaf\x1c\x6b\x82\xc3\x2b\xe4\x2c\xb8\x23\x6a\x9a\xb9\x99\xb5\x80\x5d" + - "\x81\x0e\x75\xe7\xe4\xd0\xb1\xd0\xb9\x32\x55\xbd\x3e\x5d\x90\x22\x50\x71\x70\x3e\xd6\xe4\x36\xff\x80\xe7\x4e\xf4" + - "\x44\x4d\x28\xb7\x31\xd8\xf8\x42\x59\xc8\x97\xb5\xbb\x1b\x1f\xb3\x6e\x1c\x2e\x8d\x3e\xdd\xe0\xe1\x20\xe2\x9e\x16" + - "\xfa\x53\xd2\x76\x40\x0f\xfc\xf6\xc4\x3f\xae\xaf\xe5\x46\xdd\x7b\x2a\x99\x1a\x71\xfe\x82\x6f\x1c\x38\x30\xec\x1c" + - "\x4c\x76\x0f\x54\x5b\x9f\x99\x2a\x71\x40\x42\x9f\x90\xbc\x46\x6f\x43\xef\xf7\xe7\xef\x8d\x88\x69\x02\xfd\x0a\xd1" + - "\xdb\x7d\x47\x51\xa3\x6d\xb3\xc3\x43\xc1\x97\xec\xd5\x47\x8f\x1e\xab\x63\x6f\x98\xdc\x09\xcf\x7a\x35\xaf\x2d\x69" + - "\xb4\xdc\x12\x1d\x7b\x5d\x3c\x6c\x05\xea\x96\x55\x0c\x92\x6e\xaf\xaa\xd9\xa2\xa9\xab\x7a\x6d\xcb\x2b\x14\xa6\x20" + - "\xd1\x8b\x7c\x2c\xc1\xa7\xe1\xb3\x57\xee\xba\x26\x75\x8e\x35\xed\xfb\x62\x69\xea\x75\xdb\xd1\x31\xc2\xad\xae\x84" + - "\xfe\x17\x38\x0c\x09\x78\x30\x50\x5c\x86\x4e\x47\x05\xf5\x0e\x3d\xa6\xfe\x44\xfd\xdd\x5d\xa9\x6e\x03\x78\xd1\x0f" + - "\x73\x34\x41\x47\x80\x06\xe8\x2a\xc7\x54\xf8\x7e\xce\x45\x4c\x6e\xf5\xea\x72\x40\xbe\xb7\x14\x7c\x8e\x96\x65\x01" + - "\x94\xbd\x28\x66\x0b\x8f\x43\x81\xe6\x1e\xdd\xb6\x78\x8d\x13\xdc\xfb\x14\x5d\x02\x03\xf2\x0e\x1b\xd6\x31\x16\x9f" + - "\xb0\xb6\x81\xbf\x39\x67\xb8\xeb\x7d\xf0\xc2\xab\x95\x2e\xcb\x60\x7f\x61\x84\x1e\x59\x0b\x12\xa9\x5b\xeb\x7a\x0c" + - "\x2c\xf1\x59\xb1\x82\x48\x06\x05\x2c\xac\xab\xed\x27\x32\x26\x46\x43\x3b\x88\x47\x4a\xd8\x03\x4f\x53\xac\x01\xe5" + - "\xc1\x06\x76\xfb\xa6\x66\x0b\x03\x9c\x0e\x12\xdb\xd1\x53\x3f\x3d\x47\x21\x9e\x7d\x87\xa2\xa1\x1c\x8b\xcb\xef\x44" + - "\x88\x78\x78\x49\x1a\x0e\x09\xc1\xdd\xd7\x34\xd4\x31\x26\x3f\x7c\xae\xd3\x83\x50\xc5\x95\xb0\xf9\xc6\x15\xe9\x04" + - "\xf5\x45\xbc\x14\x99\x09\x90\xda\xfa\xdd\x22\x76\x42\xcb\xca\xdd\xad\x59\x5d\x96\x86\x33\x0b\x12\xb1\x36\x8d\x95" + - "\x5c\xc8\xd1\xb1\x1a\x8e\x31\x6d\xa2\x2c\x90\x3d\x02\x93\xe9\x6d\x51\x80\xa1\xf2\x60\xbf\xf9\xd4\x28\x40\x98\xb2" + - "\x01\xf3\x8b\xa1\x26\x1f\x53\x43\x6a\x32\x3f\xbc\x51\xcc\x42\x26\x18\xd9\x4c\xbe\x2a\xc3\xfe\x6c\x45\x1c\x08\xd0" + - "\x43\x52\x48\x4a\x88\xe6\x39\xe5\x87\x59\x1f\xee\xaa\xb2\xa0\x16\x67\x02\x3d\x79\xa4\x3e\xda\x45\x51\x81\xcb\xa6" + - "\x5b\xd0\xc2\x62\x28\x04\xe4\xb7\x40\xbc\xdd\xd0\x61\x77\xdb\x39\xbe\x9f\x64\x54\x76\xe5\x53\x75\x99\xcf\x8b\xc6" + - "\x8c\x42\x48\x26\x84\x01\x53\x2c\x1a\x1e\xe1\xaa\x58\xca\xd4\x92\x75\x53\x9c\x06\xc3\x5c\xd7\xa7\x1e\x1e\xfb\xe0" + - "\xb4\x8e\xc8\x97\x46\xab\x21\x2e\xaf\x6e\x35\x21\x1a\xf5\x87\x50\xce\x2f\x9d\xc0\x22\x13\x98\x2c\x74\x95\x97\x46" + - "\x81\xa0\x31\xa5\xbc\xb8\xab\xa6\x5e\x16\x16\xae\x34\xb4\x97\xba\xf9\x1a\x43\x11\x5e\xf7\xc4\x1f\xef\xb7\x20\xa8" + - "\x88\xb6\x32\x19\xd9\x8d\x1a\xce\x75\x05\x25\xf3\x4e\x64\x77\xfa\x9a\xef\x42\x9a\x59\xef\x53\x07\x6a\xb8\xb1\x7b" + - "\xf4\x54\x7c\x17\x9e\x4a\x58\xb3\x38\xb4\xe9\x7e\xd2\x44\xb0\x43\x52\x1b\x09\xe0\xe3\x4d\x50\xa6\xc6\x5f\xee\xec" + - "\x10\x33\xe4\x96\x74\x8c\x11\x51\x5d\x7b\xd6\x64\x42\xd7\x30\x26\xc1\xd1\x67\xa0\x6d\x63\xdf\x4d\x76\xec\x03\x80" + - "\x6a\x5c\x83\x06\x6f\xbb\x13\x03\xe8\x64\x26\xe7\x5a\x30\xb0\x06\xab\xe1\x4f\x90\xdb\xb8\xb5\xfd\xa4\xd3\xbb\xbb" + - "\x4f\xe5\x5c\xd0\xba\xc1\xbb\x78\xc5\x7c\x3a\x60\x3f\x3d\xe9\x14\xa7\xf3\x14\xa5\x07\xf7\xfb\x0a\xee\xa9\x09\x01" + - "\x4b\x9e\x9b\x66\x5e\xd6\x17\xa0\x4f\xe5\x5d\xd5\x8d\x7e\xd9\x47\x55\x14\x3b\xb8\x71\xf0\x11\xc8\x07\xec\xeb\xe6" + - "\x9f\x0d\x45\x6c\x4e\xea\xfb\x5f\x63\xde\x20\x5b\x19\x7d\x66\x19\xcd\x1e\xfc\x08\x67\xb5\xbb\x99\xcb\x52\x7d\x11" + - "\x3a\xe5\x48\x35\x24\x35\xb0\x3e\xa3\xd6\xeb\x97\xdf\xec\xee\xef\xb9\xdb\x92\x02\x79\x01\x83\xca\xf1\xa4\x08\x04" + - "\xd7\xf9\x14\x01\x8f\xf8\xf9\xaf\xee\x32\xa4\xcf\xf8\xd9\x7f\x80\x62\xd3\x1a\x8f\x9c\x01\x00\xca\xde\x9b\x12\x8e" + - "\x98\xaf\xd7\xc9\xf4\x18\xb3\xc8\x8f\x46\xc9\xef\x5f\xd3\x07\xff\x21\xdd\x5c\xdf\x99\xe0\xa0\xe3\xa3\xa0\x12\x4f" + - "\x1d\x84\x0f\x12\xcb\x44\xdf\xea\xc0\x94\x81\xdb\x1e\x84\x48\x7b\xcf\x3e\x0f\xed\xb5\xd0\xe7\xe8\x76\x9c\xb7\x8b" + - "\x09\x56\xc3\xbe\x36\x30\xf4\x10\x6c\x79\xab\xa3\x5d\xe8\xf3\x7b\x63\x3b\x49\x58\x12\xd8\x3b\x72\x02\x2c\xaf\x28" + - "\x42\x13\xae\x46\x41\x68\x43\x62\x16\x19\x26\x8a\x6c\xed\x27\xc4\x94\xbb\x7d\x96\x26\x32\x8a\xc2\x88\xd5\x50\x4d" + - "\x45\x8a\x17\x4f\xdb\xe2\x3e\x1c\x1c\xb0\x67\x53\x26\x93\x22\x8a\xe1\x63\x34\x1b\xfb\xa7\xc5\xd1\xdf\x9d\xb8\xef" + - "\xc8\x49\x2a\x89\x49\x85\xd6\xe3\xad\x43\xf5\xc4\x9b\xc3\xd5\x43\xf0\x75\x4f\xef\xa4\x5c\x9d\x4f\xa3\x06\x84\xcf" + - "\x4d\xb2\x23\xbb\x25\xf7\xfb\x4b\xfe\x47\xb7\x24\x8b\x0e\x09\x15\x71\xb7\xd5\x64\x51\xe4\x86\x29\x07\xb2\x25\xc0" + - "\xf5\x08\x4a\x40\x46\x51\x8c\x8d\x58\xa1\xb6\x5a\x58\x74\x10\xd8\x83\x14\x78\x49\xe6\x7c\x1e\x34\xe5\x0a\xe8\x7e" + - "\x4c\x5e\x13\xee\xea\xc6\x3f\x7c\x5c\x10\x2c\x1e\x3e\xa4\x08\x91\x28\x8a\xc8\x31\x6a\x3e\xd8\xdb\xcd\xbe\x01\x75" + - "\x15\x5d\xc0\x32\x1d\xa6\xcf\x4d\xd5\x00\x73\xed\x6f\xf1\xd2\xb1\xd5\xc0\x60\x93\xde\xc3\xb6\x35\xa0\xf9\xc1\x8c" + - "\xd4\x0d\xba\xcf\x3a\xbe\xfb\x02\xd3\x25\x9c\xd6\xe4\x1a\xbd\x6a\xea\x99\x31\x39\x32\x51\x16\x1c\x52\x2f\x7c\x0c" + - "\xef\xaa\x31\xad\x93\xfd\x30\x89\x0a\x76\x51\xdc\x0d\xd2\x07\x0c\xfa\xfa\xf0\x61\xe8\x92\xf8\xdb\x33\x9f\x1b\x22" + - "\x33\x02\xf3\xe2\xd8\x29\xbe\x32\xe2\xec\x99\x51\xfc\x77\x14\xe2\x0b\xfc\x91\x6f\xe2\xe0\xf6\x1e\x04\x13\x44\xe4" + - "\xc2\x83\xfa\xb4\x40\x61\x9e\x55\x57\x10\xb0\x32\xe7\xf4\x1d\x6e\x3e\xad\x5a\x5b\x9c\x5f\x4c\xdf\xca\x5a\x09\x9f" + - "\xa1\x25\x82\xc3\xdc\x4e\xad\xb2\xe1\xa0\x46\x52\x65\x7a\x46\xef\x7b\x2f\x2b\x30\x84\x61\x96\xc2\x01\x34\x12\x36" + - "\x21\x22\x0d\xf0\x40\x23\xc7\x18\x3e\xbd\x6e\xd7\x77\x4a\x84\x99\xe6\x57\x63\x7c\xb2\x09\xf3\xa0\x97\x4f\x4c\xb0" + - "\x15\x88\x55\x1c\xa9\x3f\x6e\x3a\x11\x0b\x90\xde\x8e\x1c\x80\xd8\x1e\x86\x87\x63\x57\x61\xba\x5c\xab\xc6\x6e\x72" + - "\x07\xc3\x31\xbe\x18\x40\x1c\x62\xd6\x98\x73\xd3\x58\x24\xdc\x68\xd0\xc0\xcf\x86\x49\xc7\xc6\x7e\x44\xf7\xc5\x48" + - "\x02\x40\x40\x82\xbb\xc0\x3e\x3f\xc8\x0a\x4b\xe7\xa0\x68\xd8\x40\xf5\x9c\x70\xd1\xc3\x2d\x25\x55\x44\x6e\x43\xc2" + - "\xac\x7e\x4b\x15\x2c\x2a\xf8\x6c\x65\x7e\x66\x39\x85\x7e\x0f\x13\xee\x9d\xe4\x98\xa4\xd1\x8e\xe8\xb5\x97\x49\xed" + - "\x5c\x74\x3c\xba\xfe\x4d\xb7\xd5\xea\xa5\x35\x29\x8c\x06\x58\x8a\xf4\x70\x4d\xd5\x9e\x14\x52\x13\x60\x8c\xfb\xa1" + - "\x11\xb1\x2f\x23\x40\x8c\xa8\xb6\x48\x0f\x26\x59\xd2\x14\x4a\x23\x52\x52\x75\xbf\xd9\x8a\xd5\x69\xe8\xa6\x24\xd0" + - "\xc4\xae\xaf\xc5\x33\x66\x28\x85\xea\xa1\x2f\xa9\x2e\xd3\x61\xca\x1f\xa5\xaa\xba\x5e\x61\x7a\x4a\xda\x0f\xf4\x8f" + - "\xcf\xf4\xac\x34\xf2\x7c\x17\x4d\xd1\xb6\xa6\xea\x90\x0a\x69\x76\x1d\xf4\x71\x26\x9f\xce\x6e\x0c\x63\xbe\x22\xba" + - "\xe5\xf3\x94\xfb\x79\xda\x27\x13\xbb\xe9\x78\x45\xd2\x30\xc9\xc1\x10\x87\xa8\xcb\x97\xd2\xad\x0d\xfc\x8c\x31\xad" + - "\x3e\x05\x16\x90\xbf\x18\x09\xc0\x20\x0d\x78\xf1\xd1\x47\xab\xa5\x95\xb9\x5b\x89\xfc\xad\xd9\x72\x1e\x5d\xe1\xa8" + - "\x1e\x48\xef\xf0\x6a\x53\x28\x1c\x16\xc7\xad\xed\x4d\x92\x51\x8b\x51\xe8\x50\xc2\x0b\x74\xb0\x48\x52\x9f\xd7\x94" + - "\x1b\xf0\x4d\xc0\x0b\xc1\xc8\xf4\x57\x1c\x0a\xee\xc5\xb1\x4b\xa4\x51\x72\x85\xdc\x2d\x29\x02\x73\xb6\xb6\xa8\x8a" + - "\xbe\x58\xcc\x98\x19\x91\xbd\xa7\x7a\xef\x08\x87\x4b\xa4\x6e\x08\x57\xc3\xc5\xe8\x8f\x58\x13\x31\xa5\x58\x2c\x02" + - "\x83\x4d\xfb\x53\xc9\x98\x3a\x44\x6f\x68\xd5\x3f\xd7\x45\x6b\xd4\x67\xe4\xea\x4c\x2e\x50\x17\x75\xd5\xfa\x03\x62" + - "\xd4\x99\xb9\x12\x49\x24\x30\x57\xb7\x77\x4c\xd1\xa5\xad\xd5\x2e\x64\x93\x74\x53\xff\x39\x8c\xfa\x73\xe2\x7c\x4e" + - "\x00\xc8\x92\x84\xb3\x0b\x13\xa0\x54\x19\xe7\x3c\x73\x9d\xca\x04\x3d\xf5\xfb\x2b\x89\xdc\x66\xa2\xd5\xd9\x7f\x81" + - "\xf0\x6c\x5a\x5b\xb9\x0e\x8e\xa7\x8d\x77\x5f\x28\x8e\x9b\xa7\x87\xc8\xc8\xbb\xa8\x77\xef\xc6\x1f\xf7\x6a\xb6\xbc" + - "\xca\x5c\x5e\x07\x68\x81\x18\x25\x28\xe4\xc1\xe7\x8a\x54\x4c\xc0\x3c\xde\xa6\x09\xec\x31\x2f\x93\x3a\x00\xd5\x4b" + - "\x66\x6e\x9a\x46\x7a\x04\xbe\xa0\x27\x83\x21\x4b\x13\x5d\xed\x0b\x28\x42\xaa\xcf\x5b\xc4\xf0\xc5\x0b\x96\x52\xd1" + - "\x4d\x59\x60\xf4\xc9\xba\xe5\x76\x6b\x8b\xd9\xd9\xd8\x7b\xa3\xde\xa0\x8a\xcb\x3d\xec\xd3\xf1\x90\x09\x14\xf9\xe3" + - "\xd4\xdf\x0b\xd4\x5a\xe2\x8e\x44\xb4\x68\x14\x26\xdf\x17\x40\x72\x50\xef\x7f\x7d\x1d\x5b\x14\x46\x5c\xcd\x52\x17" + - "\x15\x52\x84\x08\xbd\xd8\x4f\x18\x5e\x44\x50\xd7\x8e\x78\xea\xfd\x1f\x77\xa3\xe6\x44\x12\x34\xdd\xcc\x16\xba\x98" + - "\xa9\x59\xa3\xed\x02\x30\x0f\x30\xbb\xbd\x2e\x9d\xec\xb5\xb6\x9c\x53\x6d\x1f\xc0\x91\xf7\xc6\x4f\x18\x17\x79\xf0" + - "\x60\xff\xf1\x97\xdf\xfc\x85\xec\x6a\xad\x59\xae\x20\x01\x1f\x77\x74\xd2\xd7\x0b\xf7\x29\x5b\xe6\xc9\xa3\xf4\x00" + - "\x6a\x76\x9f\x73\x80\x40\xb4\x35\xfa\x36\xc7\x18\xae\x5e\x9b\x38\xfb\xf7\x2b\x8c\x55\x47\x63\xbc\xb5\x95\x56\x14" + - "\x74\xc5\xcd\x5a\xfa\xba\xc6\xb6\x24\xde\x7c\xe3\xaa\x6e\x8b\xf9\xd5\x2f\x45\xbb\xe0\x23\x70\x14\xa9\x97\xd9\xcf" + - "\x34\xcc\xc5\x71\xcc\xb2\x70\x03\x7f\x45\x85\x53\xaa\xef\xf2\x11\xe5\xf4\x79\x9f\xd7\x91\xef\x0c\xe5\x89\xdc\xd0" + - "\x9b\xc0\x9a\x6d\xda\x89\x37\x5e\x37\xac\x49\xbb\xef\xab\x26\x2d\xec\x80\x6e\xa4\xd2\x2c\x11\x0e\x75\x14\x6e\x0f" + - "\x0f\x1d\xc6\x59\x87\xfe\xb8\x91\x04\x81\xf7\x99\x93\xb5\x3b\x45\x31\x22\xf9\x8f\xf8\x12\x9d\x3a\x6e\xff\x46\x10" + - "\x92\x10\xa5\xee\x64\xa1\x1f\x7d\xd5\x53\x49\x77\xa2\x32\x6f\xf1\xd3\xa9\xf7\x3d\x27\x05\x00\x1d\x8f\xe9\xad\x27" + - "\x8d\x77\xaa\xff\xda\xef\xdd\x51\x60\x5d\xed\xd4\x27\xfd\x17\x2c\xec\xb4\xe3\xd7\xe2\x58\x47\x01\x83\x11\xdc\x5a" + - "\xa4\xc3\xbd\xcf\xfd\xe0\x37\xa5\x9b\x2d\xe9\x30\x4f\xe4\x7e\x2b\x2e\x31\x4e\x08\x78\x90\x44\x93\x72\xc2\xd7\xbf" + - "\x6f\xf3\x43\x8a\xfd\xc4\x5b\xaf\x6b\xe4\xe0\xdc\x42\x8e\xc0\xc9\x81\x9e\xd6\x6d\xfd\x32\x1d\x66\x7a\x82\x83\x65" + - "\x2f\xd2\x11\x00\x46\x5c\x05\x36\x63\x84\xb8\x6e\x6b\x30\xb5\xea\xb2\x0c\x1e\x1c\x36\x54\x11\xb0\x2c\x2e\x0c\xda" + - "\xfe\xd0\x3a\xa3\x1b\xf2\xbc\x08\xa4\x82\xbb\x75\xb8\x89\x68\x08\x2e\xbc\x9f\x70\xa7\xfe\xcb\x21\x0d\x13\x17\x8d" + - "\xd4\x0a\x9f\x4e\x7c\xee\xa2\x3e\xfb\xdd\xb8\x22\xc8\xad\x00\xc7\x1c\xb5\xbc\x17\xe0\xca\x79\x45\x78\xaf\xa5\xb6" + - "\xad\xf2\xc9\xc2\xe3\x99\x72\x44\xc8\xe3\x4a\xe0\x48\x3b\x2b\xf6\xa9\xb4\x64\xe4\x3f\x0d\x44\x25\xd1\xa6\x88\x9a" + - "\x5c\xab\x7f\xa6\xa2\x78\xdf\xf9\x49\xbf\x11\x37\x2f\x32\x4a\xf2\x1e\x80\x27\x48\x5a\x7b\x84\x8b\xdb\xce\x0b\x0b" + - "\x91\x9f\xba\x6e\xde\xef\xb8\x87\x43\xb9\xc5\xd4\x18\x19\xfd\xe2\xfe\x48\xd3\x14\xd5\x9e\xc4\x37\x49\x2f\x62\xaf" + - "\xcc\x21\xd2\xb1\xd4\x2b\x3f\x4e\x41\x83\x22\x33\xae\x08\x38\xf4\xe2\xc6\x2b\x7f\x72\xd3\xd9\xa1\x00\x05\x36\x38" + - "\xf7\xbc\xa5\xe1\x25\xe4\x4a\x66\xc3\x0b\x9e\x8d\xe0\xb8\x08\x91\x19\x29\xd5\x2f\x66\x67\x9c\x93\x2e\xbd\x52\x5c" + - "\x9d\x53\x31\x7d\xf0\x90\x0c\x83\x49\x87\xe0\x29\xee\x8d\xed\x7b\x5b\xc1\x9a\xa8\xdb\x56\xcf\x16\x3e\xbd\x8e\x65" + - "\x58\x40\x06\xf0\x61\xe3\xb8\xdc\x42\xa7\x0d\xa8\x9d\x92\x16\xf8\x85\x02\x06\x07\x55\x2e\x69\x19\xf7\xb0\xb3\xcf" + - "\xbc\x55\x0d\x3f\x9c\xeb\xa2\xec\x7c\xe8\x1e\xd2\x7b\x66\x5b\x93\x12\x84\x73\x38\x4c\x50\x1e\x9f\x89\x8b\x3a\x99" + - "\xd9\x67\x61\xdb\xa1\x62\x97\x6c\xf0\xe9\xbd\x24\xd2\x2b\x45\x7a\xbf\x9e\x3d\x92\x8a\x26\xfe\x3b\x92\x3f\x9f\x06" + - "\x4e\x00\xb3\xc4\x3c\xca\x58\x4c\x94\x84\x81\x0b\xc0\xbf\x22\x8e\x57\x0a\x94\xde\xce\x8d\x6c\x52\x7c\x83\x78\xba" + - "\x8e\x35\x44\x7c\xdf\x27\x53\x5e\x11\x48\x96\xc8\xb4\x5b\x1d\x77\x86\x83\x0d\x1e\x0e\xfd\xc5\xc7\xeb\xca\x2e\x8a" + - "\x79\x3b\x10\x13\x1b\x8e\xed\x88\xe8\x13\x91\x0b\xb9\x1c\x21\xcd\xd5\xaa\x81\x04\xc5\xd1\x82\x24\xcf\xfa\x7c\x6f" + - "\x37\xb7\x9c\xaa\x1d\xd3\x0f\xf1\xd6\xef\xeb\x6f\x1a\x3e\x6c\x57\x06\x6e\x3b\x11\xb4\xe9\x9e\x04\xbd\xcc\x5c\xba" + - "\x8c\xd4\xab\x16\x15\x23\x26\x07\xc7\x70\x8a\xe6\xc4\x3a\x0e\x0e\x54\x86\x40\x47\x99\x3a\xec\x63\x1d\xb1\xdc\x50" + - "\x51\x44\x0f\x1f\xa5\xa9\x6b\xe3\xfa\x5a\xdd\x9f\x57\x80\x8a\xc1\x41\x7f\xdb\x41\xf7\x1a\xed\x5b\xae\xe6\xe1\x43" + - "\xea\x2b\x08\x8f\x9e\xb5\x0b\xcf\x0c\x31\x9d\x49\xbd\xfc\x97\x00\x39\x93\xd5\xfb\x28\x4c\xff\x4d\x88\xef\xae\x57" + - "\x6d\x10\x77\x0e\x44\x20\x45\x3d\x9f\x53\x74\x08\xcd\x49\x5c\x52\x62\xab\x1d\xc6\xef\xc0\xcb\x2d\x7a\x52\x54\x32" + - "\x42\xc3\x8d\xc6\x86\xf9\xf4\x8f\x8e\xe2\x6a\x8e\x03\xd0\xaf\x2f\xe2\x63\xb8\x3c\x01\x0d\x40\x98\xee\x63\x74\xb9" + - "\xd8\x05\x4e\x27\x24\x0d\x98\x80\xe3\xc4\xee\xdf\xc0\x60\x2f\x8c\x80\x54\x5c\xe0\xd7\xc9\x87\x04\x4c\x43\xbb\x59" + - "\xbc\x81\x6a\x22\xab\xdb\xbf\xb9\x17\x38\xad\xae\x1c\xa6\x79\x73\x7f\xf1\x86\x08\x73\xed\xa9\x6d\x57\x24\xdf\x44" + - "\xd5\xb8\xca\x40\xd7\xe8\x89\x88\xa8\xeb\x09\x9e\x0b\x3d\x8e\xb5\xfe\xe3\xdc\x90\x17\x03\x46\x4a\x8b\x72\x69\xf0" + - "\x3f\x67\x53\x5a\x85\x5c\x6b\xbd\x31\xfa\x73\x9d\x9b\xf7\xf5\xb4\x7b\xe4\xda\x3a\x1c\xbb\x98\x88\x6f\x93\x61\x04" + - "\x0d\x72\x57\xac\xcd\xf6\x66\x73\x3d\x6f\x4d\x13\x70\x51\xc9\x93\xac\xad\x11\x79\x44\x46\x47\xb3\xc3\x12\x3b\xf8" + - "\xa8\x21\x9a\x8e\x3d\x0c\xec\xc8\x89\xff\x64\xe3\x08\x3a\x38\x01\x73\x11\x40\xce\x3c\xce\x1c\x94\x1a\xbb\xf1\x0d" + - "\xc7\x54\x72\xf0\x87\xf2\x38\xc1\x6d\xad\xf8\xf4\xf7\x0d\xd0\xc7\x74\xd0\xa7\x5d\x51\x6b\xe3\xa7\x22\x5e\x15\x02" + - "\xc0\x0e\x54\xbf\x21\x0c\x4d\x75\x5e\x5c\x75\x32\x88\x2f\x0a\x95\x77\xc8\x5e\x68\x83\x44\xc7\x5a\x5e\xce\xbd\xf9" + - "\x56\xdf\xae\xd0\x73\x13\xe0\x60\x67\xf5\x0a\x20\xb3\xa1\x65\x5b\xab\x95\x69\x76\xbd\xab\x04\x91\x18\x54\xc5\x9c" + - "\x18\x55\xd6\xb6\x0d\x02\x16\xb9\x72\x09\x55\x1c\x6e\xbd\x0d\xc2\xb8\x1a\xc2\xae\xd4\x94\x42\xd9\x77\x07\x43\xe2" + - "\x82\xbb\x05\xb8\x38\xcf\x8b\xaa\xb0\xe0\xbd\x42\xe2\x80\x55\xc5\x72\x69\xf2\x42\xb7\x86\xfd\xba\xd1\x7d\x06\xbe" + - "\xbe\xbe\x4e\x3d\xbd\xb0\x2b\x19\xd6\x93\x45\x8a\x4d\x30\x5e\x81\x59\x4e\xe0\x09\x24\xfe\x4e\x72\x1e\xc7\x58\x09" + - "\xa4\x7a\xf7\x0f\xe3\x28\x68\xdf\x0b\x1c\xa0\xa0\x36\xe8\x4a\x86\xbe\x17\x21\xec\x5f\xd6\xe4\x23\xa3\xe1\x35\x1d" + - "\x62\x59\xcf\x28\x2e\x1d\x42\x8b\x12\x29\x18\xdd\x69\x01\x0c\xf2\xdf\xf0\xbb\x44\xca\x42\x64\x8c\x7a\xf5\x6f\x44" + - "\xf1\xc2\xa7\xa9\x2a\x1c\xcb\x05\x84\xc5\x96\xc2\xde\x59\x27\x99\x3e\xc6\xd9\xf4\xcd\x21\xc5\x89\x22\x8a\xf1\xb6" + - "\x01\x77\xdd\xfb\x12\x57\x85\xdb\xe4\x6f\x0f\xc4\x00\xb0\xee\xf0\x5b\x38\x99\x7a\x20\xd4\xae\xb9\x99\x7c\x51\xc2" + - "\x57\xc4\x00\x40\xbb\xb8\x1c\x51\x34\x33\x93\x4d\x57\xe4\xfa\x1a\xae\x81\x11\xe7\xbe\xfc\x13\xc0\x0d\x90\x89\xc2" + - "\xf0\x65\xe2\x61\xa5\x03\x17\x49\x7d\xe0\x80\x5e\xfc\xbd\xa3\xb2\xe0\x33\xc8\xb8\x4c\x20\xb6\x08\xbb\x06\xfe\xa6" + - "\x97\x6e\x9f\x77\x1d\x1b\xfd\x6d\x11\xf4\x7b\x64\x2b\x8a\x34\xfe\xee\xab\x38\xff\x82\x7c\x00\x0b\x2a\x0e\x8a\xdf" + - "\x2b\xe9\x87\xc9\x89\x89\xc4\xef\xc4\xee\x00\xdd\x0d\x55\x7e\x72\x2f\x1e\x3e\x54\x4d\xb3\x66\x6c\x1a\x1e\x8b\x40" + - "\x11\xbb\xb3\x73\x2c\xcd\x7b\xd3\xc3\x76\x6a\x16\x39\xc0\xc8\x36\xcf\xca\xe3\xe3\xdd\xdd\xa7\xc9\xac\x61\xa9\xd0" + - "\x41\x44\x88\x38\x40\x2f\x56\x70\xd6\x23\x64\x5a\xcf\x71\xa4\x5f\x08\xee\xe3\x6a\x65\xe4\x38\xd2\x92\x82\x38\xc5" + - "\xc7\x09\x0e\x1f\x6f\x2f\xa1\x3f\xe5\x2a\x40\xa2\x99\xb1\x8d\x70\x14\x6b\x70\xe2\xd0\x0d\x94\xb2\x31\x03\xed\x65" + - "\xcb\x56\x08\xac\x9b\xe2\xad\x41\x9d\x03\xce\xee\x17\x1a\x72\x81\x21\xb6\x20\xd7\x40\x3b\x34\x38\xa2\x81\xcf\xe6" + - "\x8c\x74\x66\x45\x13\x9c\x3a\xbd\x0c\xcc\xe9\xb3\xa0\x24\x8d\x84\xab\x3b\x59\xb7\x98\xed\x1a\x5b\xbf\x52\x17\x06" + - "\x54\x74\x30\xfe\xb0\xa3\x79\xfc\x8e\x07\xef\x28\x90\xfa\xd9\x20\x58\x98\x1e\xdc\x13\x80\x1b\x03\xb2\x9e\x52\xd0" + - "\x0e\x0c\x4c\x1f\xdd\x08\xa0\xd4\x4c\x32\x7a\x21\x07\x6e\x21\x15\xb8\x4a\x77\x1f\x69\x2a\xc2\x0b\x8f\x5b\x3d\x22" + - "\x1d\x99\x22\x2d\xb0\x37\x87\xf6\x14\x42\xfa\xe2\x4b\xde\x4a\x61\xbc\x9c\x8b\x8d\x1e\xe2\xbf\xb1\xca\x92\x57\x0e" + - "\xdd\x5c\xc4\x75\x3d\x2f\xf5\xa9\x02\x33\x7b\x71\xee\x98\x0c\xd7\x17\xbc\x39\x74\xab\xc3\x4d\x4a\x4a\x4b\x5f\x0d" + - "\xdc\x9f\x61\x17\xce\x8b\x86\x38\x8d\xd8\x43\x37\x2c\xea\x48\xa4\x27\xde\x80\x2b\x11\x11\xb3\xf0\x4c\xf0\xd7\xa3" + - "\x88\x01\x10\x27\xa4\xe4\x00\x78\xc7\xc4\x52\xc2\x25\xc9\xa1\x00\x5c\x01\x8e\xc5\xc3\x36\xfe\x8f\x50\x96\xdb\x09" + - "\xc9\xa7\xd1\x91\x88\xc9\xf9\xf3\xd4\x22\x9e\x8b\xe0\x15\x4b\x64\xc3\xc9\x30\xd8\xab\xbb\x27\xe5\xee\xfc\x29\x34" + - "\x2f\x50\x61\x74\x45\xc4\x4f\x78\x23\x85\xf1\xf7\xbe\xef\x8a\x52\x3d\xe3\x43\x61\x68\x3e\x4f\x36\xb1\x64\x77\xc4" + - "\xde\x8d\xdd\x33\xfb\x91\x49\xc9\x19\x72\x44\x9e\x83\x23\x76\x7b\xbc\x05\xa0\x14\x2c\xb1\xd6\xbe\x92\xd2\x7a\x25" + - "\xfd\x18\x3a\x0f\x6f\xd3\x85\xa4\x82\x07\x43\x55\x91\xfe\x23\x5c\x53\x1d\xbd\x88\x47\xb9\x42\x8e\x15\xba\xc4\xd9" + - "\xc1\xf1\xc4\x78\x38\xaf\x98\x6f\x65\x71\x8a\x63\xbb\xd0\x69\x06\xb7\xde\x5d\x32\x55\x84\x32\xe9\x03\xcb\x38\xa1" + - "\x32\xa6\x8a\x99\xad\x6d\x5b\x2f\xc5\xfe\xeb\x82\x16\xda\xb2\xc8\xcd\x8b\xfa\xa2\x9a\x52\x27\x70\xfa\x81\x84\xc2" + - "\xbb\x9f\x57\xfe\x0d\x2c\x48\x78\xf3\x9e\x20\xc1\xe8\x2d\x2d\x20\xbc\x77\x52\xf0\xeb\x6a\xaa\x84\x9c\x48\x0e\xa1" + - "\x37\xfc\xfa\xed\xba\x8d\xdf\xe3\x72\xfb\xf7\x5c\xbb\x2c\x42\x4d\xa8\x9b\x04\x3e\x11\xe7\x4d\x7a\x03\xfd\x77\xac" + - "\x7c\xbc\x44\xc1\xed\xe9\x93\x16\x25\xba\x23\x20\x99\xda\x53\x09\x1f\xd0\xef\x8a\x00\x86\x46\xf7\x45\x12\xc2\xd7" + - "\x7f\xf3\x90\x19\xa4\x27\xe8\xb0\x9b\x8d\x37\xa5\xac\x81\x78\xc0\x1b\x4f\x7b\x43\x5c\x1c\x67\xa2\xb0\x68\xd0\x83" + - "\x52\x0b\x8d\xe9\x10\xd9\x0f\x07\x92\x85\xa1\x87\x62\xee\xaf\xff\xfb\x68\x40\x18\x46\x94\x18\x10\x75\xa8\x91\xc0" + - "\x11\x24\x54\x75\x77\x37\xd0\xd4\xd4\x07\x36\x1a\x40\x82\xb6\x08\x70\x0c\xf5\x6a\xc0\x04\xa6\x37\x58\x33\x81\x82" + - "\x18\xf3\xb8\x05\x23\x23\x3a\x17\x4d\x34\xdb\x59\xf1\xfd\x53\xee\x13\x8f\xb3\xa7\x33\xba\x69\xa9\x37\x82\xcd\x4f" + - "\xea\x14\x1d\x4e\xfb\x56\x54\xad\x69\x10\xe7\x7a\xff\x8b\xe4\x1d\x7b\x2d\x26\x5b\x47\xcc\xd2\xeb\x3c\x5a\xdb\xd7" + - "\x39\xc2\x4d\xbe\xa6\x4a\x25\x44\x0c\x9a\x74\x7a\x1a\xde\xd4\x33\x92\x70\x93\xc6\x41\x6e\x0c\xf5\xfb\x5e\xb8\x4a" + - "\x42\x1f\x1c\x01\xed\x59\x08\x52\x82\x12\x8a\x49\x59\x5f\x4c\xd5\x57\x7b\x7b\x48\x06\x6c\x3b\x55\x8f\xf1\xc7\x64" + - "\xa2\x5e\x50\x80\x07\x7c\x11\x81\x48\x7d\xb9\xb7\xc7\x15\x13\x92\x87\x35\x39\xdc\x4f\x94\xd0\x6c\x55\xae\x4f\x0b" + - "\xc8\xb7\xf7\xbc\x2c\xaa\x56\x7d\x67\xca\xb9\x63\xde\xd0\xcb\x7d\x65\x9a\x65\x61\x6d\x51\x57\x63\xf8\x7c\xd1\xb6" + - "\xab\xe9\x64\x72\x52\x16\x55\x6e\x8b\xd3\x4a\x97\x60\x1b\x9a\xc0\x45\x39\x5e\x2d\x56\x93\xc7\x7b\x7b\xdf\x4c\xf6" + - "\xfe\x32\xf9\xf8\x4f\x37\x8c\xdd\xdc\x94\xfa\x6a\x22\x55\x82\xf0\xa4\xb3\xbd\x46\x92\x03\x69\x0b\xe9\xb0\x38\xbf" + - "\xec\xd5\x03\x43\xa1\x63\x16\x8f\xd4\x14\xfe\x81\x79\xed\x65\xa7\x83\xa6\x32\x15\xd3\x23\x7a\x69\x2e\xdb\x51\xac" + - "\xbf\x60\xd2\x53\xaf\x09\x9d\x94\x03\xa1\xa9\x30\xb4\x8e\x47\x53\x70\x8a\x3d\xca\x32\xd8\x0b\xfe\x63\xae\x32\x68" + - "\x37\x90\x0f\xe0\xb5\x4a\xf9\x7c\xe4\xf2\x57\xd0\x89\xbc\x9e\xc1\xa5\x49\x28\x22\x2f\x51\x1f\x3a\x50\x19\x14\xe0" + - "\x4c\x99\xe8\xfd\x75\x5b\x71\x2c\xc1\xe5\xc9\xca\x01\xcf\xdc\x25\x6d\xaa\xfc\xf9\xa2\x28\xf3\xc1\xe6\x0a\xd0\x06" + - "\x99\x85\x24\x05\xd0\x81\x31\x67\x95\x81\x08\x9e\x28\xdd\xaf\x47\x06\x2a\xde\xbe\x53\x4f\xc6\xfb\x23\x8f\xfe\xfc" + - "\xe5\xf8\x72\x14\x43\x41\x87\x94\x3f\x32\x69\x22\xd7\x39\x69\x74\x5e\xd4\xa4\x92\x1d\x64\x99\x93\x12\x1c\xf3\x88" + - "\xe0\xcd\x4f\x55\xe6\xfa\xe5\x48\x0c\xe0\x41\x0d\xdd\x09\xe2\xfc\x26\xae\x86\xb7\x90\x9c\x10\x7a\x1b\x20\x4c\xb3" + - "\xd0\xd1\x37\x80\xfc\x00\xce\xfb\x8c\x18\x46\xc9\x2b\x97\xfa\x0c\x5d\x94\x61\xec\x34\x5f\xe4\xb8\x03\xba\xc4\x04" + - "\x00\x69\xa4\x5e\xbf\xdc\xdf\x13\xed\xd7\xab\xf6\x1d\x7c\x64\xd8\x02\x60\xe9\x67\x68\x3d\x0e\xbd\x03\xc6\x78\xc5" + - "\x7c\xb2\x2d\x72\x48\x4f\xe8\x44\x25\xf6\xf1\xf3\x69\x78\x96\xba\x39\x43\x74\x31\x2e\x81\x35\x0e\x08\xd4\xda\xbd" + - "\x87\x11\x2d\x65\x19\x98\x1e\x5c\x78\x5f\x71\x70\x05\x11\x1d\x7f\x11\xde\xde\x07\x43\x0c\xfd\xf6\x3d\xf7\x39\x9a" + - "\x74\x45\xdb\x75\xa9\x8b\xaa\xd5\x85\xeb\x7a\x6b\x69\xbd\x50\x71\x7f\x62\x66\xf5\x92\x30\x15\xdc\x62\xde\x32\x77" + - "\x9f\xbc\xf3\x9f\xfa\x4d\xc8\x1e\xb8\x19\x66\x9a\x89\x77\x26\xb4\x97\xc9\xc1\xc1\x93\x7f\xa7\x6f\xa2\x1a\x0e\xb8" + - "\x8e\x9b\xe1\x80\xd1\x4d\xdd\x69\xac\xea\x1c\x04\xe1\x91\x72\x6c\x2e\xfc\xb5\x7d\x0f\xa2\xda\xbf\xc3\xf0\x5f\x61" + - "\xcd\x5e\x35\xe3\xf0\x62\xb3\x8d\xc4\x95\xf9\x57\x80\x8c\xa9\x32\xf7\xf9\x9f\x82\xcb\x05\xa2\xe8\x98\x94\x67\x3d" + - "\x0d\xf7\x31\x7d\xfd\x1a\x08\x6a\x3e\x54\xc5\xfd\x92\x38\xbe\x1b\x84\x9c\xcd\x83\xdf\x88\xc9\xec\xa1\x45\x47\x90" + - "\x74\x0d\xba\x50\x61\xbc\x6b\x1c\xff\x1a\x82\x94\xd0\x57\xf6\xd4\xb4\x13\x6b\x5a\x19\x9b\x4a\xf9\xe6\x46\x3e\xd9" + - "\x1c\xa0\xbd\xf8\x00\xd4\x0d\xa9\xe7\xaa\x38\xe5\x5c\x15\xa7\x9a\x0b\x3f\x1f\x27\xee\x2f\x49\xc4\xcf\x2b\x01\x51" + - "\x08\x36\x0d\xf0\x84\x12\xbd\xd3\x8d\x01\xb6\x92\x36\xa9\xe0\x25\x49\xd6\x82\xe1\x9e\x9a\xf6\x99\xef\xb1\x6b\xd6" + - "\xb6\x4d\x37\x74\x2c\x86\x8f\x77\xcd\xf5\x4e\x71\xd2\xc5\x67\x65\x99\x76\xa8\xac\x2f\x4c\x33\xd3\xd6\x50\x91\xbf" + - "\x37\xfa\x24\xe4\x26\x47\xb4\xbf\x62\xae\xea\x0a\xe3\xee\x7c\x4e\x76\xec\x38\x4e\x0e\x22\xc3\x5c\x5f\x0b\x53\xf4" + - "\xaf\x6f\xbe\x7f\x51\xcf\x3a\x99\x6b\x29\x78\x01\x80\xb0\xdb\xfa\x7b\xd7\x36\x04\x2f\x0c\x45\xa4\x7a\x38\x69\x70" + - "\xc8\x92\x1c\x36\x28\xa8\x0f\xa2\xc3\x08\x5e\xd3\x63\x77\x6e\x49\x25\x4c\x1b\xfe\xd0\x9f\x65\x35\xf5\x07\xbc\xc7" + - "\x6e\xba\x31\xc7\x5c\xd0\x1f\x05\xea\x11\x85\xe4\xf7\x1d\x96\x04\xf4\x5a\xaa\xc1\x93\x78\x03\x7b\x6b\xa2\xa7\x6e" + - "\xea\x2a\xac\xf3\xd3\xf2\x3c\xf5\x68\xdf\x11\x38\x41\x6c\xaf\x98\x24\xed\x08\x34\xca\x08\x10\x3c\xd2\x80\xf5\x8f" + - "\xe4\x93\x53\x56\xc9\x21\x44\x33\xd9\xe9\x7c\xd4\x77\xac\x8d\xa9\x6c\x51\xe5\xb0\x37\xfa\xe7\x1a\x92\xac\x57\xbb" + - "\x90\x04\x08\x68\x40\xd8\xf0\x8c\x47\x0d\xc8\x9a\x17\x46\xb8\x12\xb4\x75\x98\xd1\xa4\x3f\x5e\x29\x42\xd8\x3f\x61" + - "\xe6\xa7\x7e\xae\x52\x5f\x9a\x7e\x3a\x2c\x16\x53\x52\xbf\x20\xd6\xff\xe0\x73\x7a\x88\x34\x06\xae\xff\x3f\x40\x3e" + - "\x51\xce\xb1\xc7\x39\xdc\x70\xe3\x0f\x54\x53\xd5\xed\xc5\xa2\x68\xc3\x24\xc0\xf2\x84\x0f\x39\x4f\x4b\x02\x25\xc0" + - "\x73\xcf\x98\x50\x03\x3a\x9e\xfe\xc3\xa3\x62\x67\xe7\x58\x58\x24\xb8\x8f\x61\x2d\xd0\xa9\xf1\x52\x26\x99\x72\x7f" + - "\x49\x1b\xee\xb7\xa8\x36\x92\xeb\x70\x6a\x5a\x76\xaa\x56\xad\xbb\xfb\x81\x58\x0f\x1e\xec\xef\x7d\xfd\x97\xbd\xa1" + - "\xd0\xf5\x7d\xca\x29\x0f\x7a\x3e\x8a\xea\x87\x80\x17\xbb\xaa\x2b\x48\x1e\x2c\x63\xfb\x41\x53\x4f\x85\x11\xec\xd1" + - "\x8f\xe8\x38\xb1\x9c\x78\xd7\x56\x98\xb8\xb0\x9e\xe2\xe0\x74\xd3\x4e\xe3\xe2\x7b\xb2\x45\x3e\x42\x8e\xba\x73\xa2" + - "\xe1\xcd\x89\x66\xd2\xf8\x9b\x1e\x56\x26\xce\xdd\x87\x5c\x4f\xc0\xcf\xf3\x9a\x11\x8c\x8c\xf3\xb1\x94\xcc\x4c\x75" + - "\x26\xca\x27\x9d\x05\x3e\x0a\x2c\xfe\xc8\x86\x9f\xac\xdb\xd6\xfd\x04\xbe\x2e\xb8\x4a\x34\xc6\x1a\x84\x75\x65\x94" + - "\xa3\x4a\xbd\x7e\xf9\xd5\xee\x37\xa1\x56\xcc\x1b\x8f\x6f\x31\xa1\x21\xb0\xf9\x45\xa5\xdc\x15\x83\x0d\x15\x16\x20" + - "\x1e\xb0\x76\x2c\x9a\xaf\x21\xa6\x18\xd8\x40\x8f\xc0\xc5\x19\xe1\x98\x0f\x10\xb4\xa8\x97\x96\x65\xae\xf6\x2c\xbe" + - "\xfa\x04\xf9\x96\xf6\xc1\x50\x1f\x9e\xa9\xc4\x2a\xd8\x43\xfd\x3a\xa9\x95\xa5\x5a\xf2\x3b\x9f\xb4\xfa\xa4\xb3\xd7" + - "\xb7\xef\xf9\x3b\xa8\x17\xc0\xb4\x87\xc0\x0b\x1b\x53\x58\xee\xd8\xc8\x04\x53\xbd\x84\x88\xaf\xee\xe9\x02\xbe\x83" + - "\x50\x34\xc2\x8e\xbf\xfb\xa6\x4a\x68\xee\xc6\xeb\x42\x7e\x20\x58\x4a\x3a\xf7\xac\x4e\x91\x1a\xd8\x4d\xe7\xd8\xd6" + - "\xeb\x66\xe6\xc9\xd8\xe4\xc3\xc5\xce\xe4\x54\x0d\x6f\xd7\x84\x9f\x42\x56\x4d\xa2\x52\xc8\x82\xf7\xa4\xb8\xf3\x77" + - "\xc4\xd3\x70\x24\xe3\xb2\x07\x1b\x98\x53\xe0\x5d\x24\x79\x86\x54\xc0\x0b\xe6\xf5\xf9\x78\x46\xc5\x80\xb7\x82\x4c" + - "\xf1\x20\x28\xcd\x8b\xca\x11\x63\x00\xed\x4b\x52\x04\xc1\xf4\x7b\xc8\x1b\x1f\xb2\xe6\x53\x2d\xe2\xe8\x90\x19\x62" + - "\xb9\xa3\xdb\xf9\xa7\xfe\x62\xe8\x0c\xca\x67\x79\xc4\x2b\x13\xeb\xeb\x1f\xe1\xfd\xf8\x5e\xeb\x32\x65\x7c\xc1\x91" + - "\x46\x6b\x53\x93\x62\x6e\xe4\x7e\xa0\x9e\x08\x65\x71\x90\xb6\x9a\x79\x3d\x5b\x83\xb0\xc9\x60\xb1\x40\xa5\xae\x51" + - "\x6c\xbd\x76\x4c\xbc\x6e\x8c\xbe\x46\x4a\x34\xfc\x6c\x52\x6c\x16\xb3\x1c\x09\xff\x2f\x88\x59\xe8\x9d\xf5\xaf\x88" + - "\x59\x3f\xf6\x34\xfc\xe9\x62\x16\x47\xf0\x2d\x0a\x7b\x74\xc7\x6d\x9a\x02\x7f\x6c\x14\xba\xe8\x7b\xce\xcf\x3e\xaf" + - "\x9b\x6c\xaa\xb2\x45\xbb\x2c\x5f\xd5\x0d\x7a\x90\x64\xb3\x52\x5b\x0b\x69\xc2\xdd\x1f\x3f\x50\x4c\xa8\xf7\x01\x8e" + - "\x87\x74\xab\xd4\x86\x07\x03\x45\xb7\xaa\x6e\x2f\x97\xe5\xbf\x20\xbd\x89\x50\xac\xff\x73\xd2\x1b\xf6\xde\x09\x26" + - "\x9f\x26\xcf\x48\x2e\x8b\xbe\x15\x94\xe0\x55\x71\x89\xcb\x46\xfd\xd7\xb3\x05\x4e\x93\x14\x81\xee\xe4\x9f\xba\xe2" + - "\x90\xc8\x5a\xd1\x4d\x01\x79\x67\xb2\xec\x34\x27\xc7\x7f\x93\xf4\x71\xe8\x79\x60\xa6\x16\xf8\x59\x1a\xb5\xed\x27" + - "\x2d\xe5\xeb\xe3\x4e\xfd\xeb\x82\x44\xb7\x23\xb2\x1b\x5d\x67\x77\x9a\x4b\xe6\xd1\xf4\x09\x64\xfd\x67\x3e\xad\x27" + - "\xeb\x63\x47\xd0\x82\xfd\xbd\xd0\x36\xe2\x41\xf4\x09\x68\xcf\x09\x2a\x29\xd0\x39\xe2\x59\x53\xf0\x02\x4e\x71\xbf" + - "\x68\xcc\xdc\x83\x8b\xc2\x13\xee\x91\x87\x10\xdd\xdd\x4f\xd9\xcd\xde\x04\x7c\xaf\x5f\x7e\xb3\x83\x4f\x48\x0f\x59" + - "\x19\x6b\xc9\x46\xcf\x6a\xce\xa2\xa2\x1f\xa7\x4d\xbd\x5e\x71\x46\xeb\xa2\xd2\xb3\xd9\xba\xd1\xad\xd9\xbe\x17\xf3" + - "\xa0\x52\xc9\x19\x19\x8e\x04\x50\x7b\x50\x82\xc2\x2c\xdd\x36\x81\x10\x49\x81\x2a\x58\xa2\x12\x01\x92\xfd\x69\x90" + - "\xb9\xa9\x08\x02\x5e\x9b\xaa\xed\x03\x6e\xdf\xea\xbc\xf2\x3d\x81\xd9\x93\x11\xcd\x42\xfa\x8b\xdc\x9e\x6f\x3a\x66" + - "\xfa\xed\x7b\x5b\x19\xcf\x3f\x90\xcd\xac\x31\x3a\x7f\x5b\x95\x57\xf8\x6b\xa9\x2f\xbf\x87\x9b\x01\x7f\xce\x4c\x59" + - "\xbe\x5b\xe9\x19\x24\x58\xe4\x07\x3f\x12\x98\x26\x7e\x5e\x5f\xbc\x5b\xe9\x8a\xde\xd6\x65\xf8\xb1\xb6\xe6\x8d\x5e" + - "\xe1\xdf\x10\x22\xf7\x2d\x64\xd0\xe3\x92\x95\x13\x61\x5f\xe6\x45\xeb\xf6\x50\xb6\x7d\xef\xb8\x93\x36\x33\x25\x24" + - "\x70\xe5\xc4\xd7\xf8\x31\x81\x2a\xf6\xde\xc4\x70\x0d\xb8\x5b\xf8\xe8\x43\xfb\xa1\xf9\x50\x7d\x98\x1f\x4f\x4e\x6f" + - "\x51\x6a\xe6\xf9\x73\xf7\xc5\xc6\x2c\x7c\xe0\xad\xe0\x4a\x18\xcb\xd1\x65\xb3\x75\x33\x72\xcf\x7e\xff\x7d\xa4\x3e" + - "\x8e\xd4\xbc\xa8\x74\x09\x12\x8d\x8f\xd3\x9d\x61\x00\xc7\xe6\x14\x7b\x2c\xfa\x74\xa4\xe3\x32\xa0\xb0\x47\x41\x37" + - "\x9b\x5c\xeb\x53\x18\x8b\xcd\x17\xb5\xfa\x98\xaa\x79\x7c\xc6\x2c\x9e\x04\xaa\x2e\xf2\x1a\xfa\x48\x59\x6e\xfc\xf5" + - "\x1a\x12\xf7\xdf\x74\x55\x4f\x3c\x76\x71\x7d\xbc\x5f\x80\x41\xe0\x23\xf3\x86\x8c\x79\x05\xf2\x05\x32\xbf\xb3\x7a" + - "\xb9\x6a\x8c\xb5\xc5\x49\x51\x16\xed\x95\x1a\x58\x63\xc8\x40\x0d\xfd\x42\x11\x9a\x56\x01\xe0\x50\x71\xd8\xd7\xd7" + - "\xa0\xe3\xe9\xd1\x1b\xc4\xf8\xe2\xb7\x27\xa5\xa3\x24\x58\xc8\xb9\x14\x1e\xed\x61\xb6\x6e\x3a\x28\x9c\x02\xb2\x10" + - "\x5e\x84\x49\x61\x5a\x37\x50\x99\xca\xd4\x4e\xfa\x7a\x07\x1e\x0f\xc7\x8d\x59\x95\x7a\x66\x06\xb4\x4f\x47\xf8\xd8" + - "\xd3\xc4\x4c\x21\xa0\xc5\x56\xf0\x1a\x47\x0f\xdf\x75\x23\xe4\xbd\x8f\x01\x2b\x53\x28\x3b\x60\x43\x82\x4f\x31\x4c" + - "\xd3\xd1\xc7\x58\xd7\x11\x6a\x12\xb9\xf1\xa1\xab\xf8\x21\xf5\x50\xfd\x55\xa6\xc7\xa7\x69\xd8\x39\x90\x85\xb8\x65" + - "\x2f\x5e\x7a\xdd\x02\x44\xc2\x56\xe5\x95\xd2\xd6\x16\xa7\x15\x42\xf9\xcd\xe7\x86\xad\x53\x1a\x64\x8a\x75\x55\x19" + - "\x93\x9b\x5c\x35\xa6\xca\x8d\x3b\x0f\x63\xfa\x3c\x9c\x24\xe1\x34\xd1\x14\x4b\x9a\x80\x48\x04\x4e\x26\x18\x1c\x17" + - "\xc3\xe7\xa9\x70\x1c\x0a\xca\x62\x9b\xbc\x67\xfb\x5c\xa1\x3b\xec\xf2\xff\x1c\xd9\xe8\xf0\xeb\x98\x83\x38\x38\x31" + - "\xfd\x5f\x4f\x50\xc4\x0c\xfd\xcb\x34\x65\x03\x45\xf9\x5f\xa6\x02\x40\xc0\x0a\xab\x9c\xa8\x6f\xac\xa5\x8c\x12\x40" + - "\xc3\xee\x22\x60\x4c\x55\x87\xff\x07\xe9\xc9\xff\x20\x39\x09\x3a\x9b\x47\xba\x2c\x1f\xa9\xa2\xb2\xad\xae\x66\x9c" + - "\x48\x23\x54\x75\x27\xc9\xf9\xdb\x41\x0f\xcd\x81\xec\xf5\x61\x7c\x9d\xef\x68\xa8\xff\x4b\xc4\x08\x77\xda\x61\x0f" + - "\x51\x52\x53\xb4\xcc\xff\x5f\x41\x99\xd0\xd3\xae\x9f\x32\x8d\x10\xbd\xef\xdf\x83\xea\x10\x9c\x47\x82\x3f\x0a\x13" + - "\x96\x9e\x58\x16\xff\x65\xec\x38\xc9\x91\x1d\x07\x7d\x51\x2e\x32\x67\xa8\xfb\x94\xd2\x86\x26\xbc\x86\xf2\x19\x44" + - "\xbb\x34\xa3\xc7\xb4\xf5\x5f\x23\x58\xc5\x46\x82\x25\x26\x2e\x22\x58\x48\xaf\x8a\x94\x5e\x85\xb9\x1c\xca\x69\xed" + - "\x63\x8b\x3e\x31\x0d\xea\xe6\x79\x04\xbf\x5d\xc4\x4c\x2c\xaa\xbc\x38\x2f\xf2\xb5\x2e\xf1\x58\x82\x30\x48\xe7\xcd" + - "\x5f\x38\x3f\x88\x44\xea\x32\x7b\xf4\x96\x35\xe5\xdc\xdf\xab\x89\xcf\xfd\x96\xff\xd4\x9b\x65\xee\xa4\xa7\x11\xad" + - "\xf0\x7b\x38\x54\x74\x04\x04\xf6\x38\x51\xd4\x83\x83\x8b\x32\x80\x19\xe0\x3f\x3b\x2d\xce\x4d\x35\x52\x76\xa5\x67" + - "\x46\x59\xb3\xd2\x0d\x40\x44\x95\x05\xc7\xe0\x11\x66\x88\x29\xe7\x4e\x42\xa5\x75\x8a\xae\x0f\x11\x2d\xe3\x4a\x45" + - "\xbb\x49\x14\xf4\x07\x2b\xc6\xd1\xc0\x8f\xc2\xde\xec\xfb\x62\x3b\x32\xa4\xb8\x8b\x01\x57\xe5\x62\x51\x97\x46\x2c" + - "\x08\x6e\x02\x99\x7e\x8d\xd7\x36\x32\x7d\xd3\x75\xbe\x21\xe3\xae\x48\x4e\x29\x87\x29\x26\x12\xe1\x08\xc3\xcb\x62" + - "\xae\xac\xe1\xe9\x0a\xf1\x15\x56\x44\x08\xfe\xf6\x9b\x2f\xfe\xdb\x6f\x59\xf7\x12\xee\x81\x41\x41\x94\x5a\x9f\x02" + - "\x7e\x01\x69\x10\xc3\x58\x43\x8a\x96\x06\x01\x7b\x4d\xae\x32\x50\xd2\x67\x01\xf0\xaa\x5d\x78\x7f\x53\xa8\x4c\x4c" + - "\x18\xd4\x31\x28\x18\x0a\xf7\x42\x5b\x05\x08\x0f\xae\x18\x42\xc0\x59\x7d\x6e\x72\x55\xb4\xc3\xb1\xaf\xef\xad\x87" + - "\xa5\x39\x01\x3b\x0b\x78\x29\x5c\x2c\x74\x6b\xce\x4d\x43\xd9\x51\x30\xc7\x4f\x79\x45\xdf\x0f\xc0\xe9\xe7\x0a\x40" + - "\xc2\x05\x14\xd7\x5c\x97\xa5\xaf\x81\x01\x72\x64\xd6\x47\xcc\xa0\x0e\x8e\xf2\xae\x5e\x98\xf3\x9c\x7a\x92\xcc\xde" + - "\x41\x3a\x9d\x11\x6a\x30\xc5\x46\x62\x02\xab\xfe\xf8\xcd\x78\x75\xf0\xb4\xf1\xd5\x92\xc4\xf3\x6c\xdf\xdb\xe2\x63" + - "\x10\xc5\x2c\x13\xa4\x5a\x87\x09\xa5\x0e\xe2\x25\xea\x4b\xe1\x3d\xda\x61\x18\x3b\xec\x62\xc2\x3a\xc5\x8c\x93\xdf" + - "\xa7\x47\xc5\x71\x1f\x63\x83\x6d\x72\x81\x84\x83\x09\x0c\x8c\xe0\x5f\x86\x81\x5b\x90\x5b\x3f\xe6\x12\x98\xac\x36" + - "\x6b\xf3\x74\xd3\xe5\xe8\xed\x9f\x37\x7d\x8a\x02\x2a\x74\xa0\x26\x1f\x9a\xdb\x34\x04\xe7\xba\xbc\x95\xcb\x17\xce" + - "\x3e\x2a\xdc\x4b\x38\x97\x92\xa9\xdc\x8b\x12\xf2\xde\xef\x30\xf9\xd1\x84\xc6\x0a\xba\x44\x71\x7a\xae\x4b\xd2\x9b" + - "\xa2\x66\xcd\x4d\xb8\x34\x16\x25\xef\x59\x3d\x97\x6a\x51\x62\x9e\xf0\x5f\xd0\x59\x66\x30\x17\xd9\x2d\x2e\x1c\x89" + - "\xed\x24\x49\xdd\x9e\x5a\x42\xe3\x95\x45\xce\x03\x1d\x16\xc4\xb5\x78\x18\x28\x20\x59\x94\x96\xb5\x6d\x41\xc7\x5e" + - "\x57\x7c\x6c\x67\xda\x7a\x3e\xb4\x31\x6d\xd8\x65\x58\xf9\x48\x65\x59\x60\x92\x43\x4d\xf0\x19\xe5\xe8\xf4\x89\x6f" + - "\xaa\x75\x59\x22\x12\x83\x23\x76\x88\x18\x11\xaa\x0e\xde\x14\x78\xb4\xfd\x48\xe3\x84\x48\x11\x23\xe3\x37\x89\x8c" + - "\x8d\xef\x30\x34\x4f\xef\xe2\x1f\x04\x3b\x43\xa6\xe5\x38\xd1\x2e\xe6\x26\xa6\x03\x79\x3f\xf2\x90\x90\xbd\xf2\x3d" + - "\xa5\x74\xec\xbe\x73\xbe\x30\x1a\xad\xbb\x62\x5c\x31\x4a\x98\x09\xb7\x92\x83\x61\x7f\xd6\x4e\x51\x49\x27\x04\xed" + - "\x7d\x63\x74\x2b\x26\xba\xa0\x1c\xb4\x59\xf6\x94\xf3\xc2\xd2\xc4\x03\x38\x22\x2e\x72\xe8\x33\x54\x9d\x7a\x32\x61" + - "\x7b\x59\xd6\xe7\xb2\x14\xb8\xdd\x18\x06\x24\xfa\x78\x67\xd3\xd7\x3d\x48\xb2\x92\x01\xc1\x86\x25\x6a\xd4\xb9\x2e" + - "\x47\x9b\x28\x48\x62\x9d\x4f\xb7\x53\x70\x65\xe2\xf3\x93\x04\xf0\x6d\x24\x0d\xa8\x37\xdd\x4c\x1a\xfc\xf6\xb8\x8d" + - "\x34\x20\x03\x60\x4d\x4b\xae\x46\x36\x1c\xf2\x11\x5c\x9e\xfe\xe6\x44\xd7\x23\x86\xbb\x08\x6b\x83\x29\x58\xc0\xf8" + - "\x34\x88\x4d\x34\x70\xbf\x25\x49\xb0\x47\x38\x57\x9e\xb0\xc0\xf2\xf4\xd0\x15\xe8\x7c\xc7\xe1\xa1\x37\xd9\x7f\xd7" + - "\xaa\xc8\x73\x40\xb6\x11\xb4\x21\x7c\x92\xa1\x24\x78\x70\x6c\x72\xdd\xf2\x3d\xef\xf8\x9d\xa5\xe6\x69\xd8\x27\x82" + - "\x04\x09\x83\xc7\xfe\xde\xee\xfe\xfe\x8e\x90\x62\x57\x08\x5e\x67\x2e\x5b\xd5\x2e\x9a\xfa\xc2\x2a\x73\x39\x33\xe4" + - "\x73\x3d\x78\xb0\xff\xe5\x57\x5f\x7f\x35\x52\x0f\xf6\xbf\xfc\xfa\xc9\xd7\x43\x96\xea\xa5\xa4\xca\x3f\xcc\x65\x1b" + - "\x7c\x18\xe5\xa4\x09\x9f\xfc\x3f\x33\x13\x4e\xaa\xc4\xde\xb1\x1c\xc1\x9e\xe0\x44\xda\x23\x44\xc8\x80\x0f\x40\xbe" + - "\x18\xc2\xb0\xe1\xbf\xaf\xbc\xa9\x55\x88\x44\x50\x72\x17\x00\xb4\xaf\xaf\x7d\x5c\xa5\x97\x6c\x28\xb3\xf5\x01\xb8" + - "\x75\x1e\xe2\x34\x07\xc4\x48\x48\xa3\xe9\x5f\xe2\xc7\x3b\x00\x0b\xce\x88\x93\x02\xf0\x96\x78\x21\xdf\x84\x5f\x2e" + - "\xa8\x84\xd7\x6b\x4b\xd6\x25\xa2\x84\xdd\x6a\x7d\x5f\xd7\x2b\x58\xa6\xf5\xe9\xc2\x23\x2b\x7a\x73\x52\x00\x46\x4b" + - "\x34\x52\x4b\x7d\x99\x68\xa4\x68\x2e\xd1\x0d\xdf\x7d\xc4\x7a\xa9\xb0\x33\xc0\x5d\x49\xe5\xb5\x81\xb8\x75\xca\xc5" + - "\xe9\xdb\x42\x97\xa4\x79\xdd\x2c\xd1\xd7\x49\x0d\x1e\x3c\x7e\xf2\x64\x7f\x28\x45\xaa\x01\xef\x2e\xff\x95\x9b\x60" + - "\x98\x76\x06\x22\xf0\x1e\x59\xd0\xe4\x0b\x30\x77\x07\x5c\x1d\x58\x6d\x9f\x22\xc6\x3b\xe8\x3b\xb9\xa0\x52\x5a\x3c" + - "\x20\xeb\x9c\xaf\x6b\xa0\xfa\x5c\xf7\x0f\xc1\x75\x1f\x20\x6c\xf9\x11\xaf\x53\xe4\x4a\x3c\x80\x8c\x32\x50\x80\xe9" + - "\x04\xd1\x7f\xd1\xdd\x81\xaf\x4c\xd8\xd3\x7c\xbd\xc2\x20\x1e\x9c\xcc\x3a\xe5\x47\x10\x48\x02\x5d\x47\xa7\xb3\xe0" + - "\x49\x8b\x13\xf2\x77\x83\x31\x10\x84\xbc\x33\x23\x9a\xed\xd6\x36\x84\x46\x70\xf9\xf3\x48\xb9\xcd\xcd\xf1\xcd\xf9" + - "\x34\xaa\xf8\x17\xce\xcb\x57\x19\x48\x97\xae\xb4\xbb\x6f\xa0\x62\xb7\xfd\x28\xb6\x82\x3f\x40\xc4\xa4\x2a\x52\x30" + - "\xf5\x39\x7e\x49\x0d\x19\xc6\x92\x94\x6d\xb1\xfb\x8e\x02\x35\x3c\x5a\x1f\x36\x16\x75\x9b\x03\xea\x12\x87\xb4\x9b" + - "\x2e\x63\xe7\xdb\x64\x4c\x49\xce\xd5\xfb\x29\xee\x82\x84\x69\x56\xd4\xd5\x3b\xc7\x52\xff\x19\xf2\xe2\xe9\x80\xbf" + - "\x7d\xcf\x4c\x0c\xf7\x2e\xcf\x78\x7c\xfa\x3b\x5a\x8d\x62\x77\xf7\x13\xce\xa2\x38\x49\xe9\x41\x0a\xcc\x5d\x45\x9d" + - "\xa0\x12\x44\x38\xa9\xb7\x28\xd9\x44\x1a\x0c\x3f\xfc\x18\xf2\xb4\x33\xd5\x4e\x82\xad\x9b\x99\x93\x83\xeb\x0b\x4b" + - "\xdc\xd1\x89\x01\xa8\xf4\x59\x5d\x59\xf4\x18\x2e\xaf\xd0\x85\xae\xaa\xab\x5d\xd0\xe9\x84\x44\xc9\xe8\xbb\x28\xa4" + - "\x80\xfb\xa1\xe9\xd0\x9f\x2e\xb5\x56\x07\x8a\xcd\xf7\x09\x90\x68\xb4\xec\xdb\x7d\x96\xfd\x9f\x74\x5e\xd4\x16\x9c" + - "\x49\x38\x5c\x0a\x5d\x68\x5b\xd3\x4c\x2c\xf9\x8b\x25\x51\xe6\xe8\x1b\x3a\x12\x41\x5b\x6a\xa3\xe5\x38\x66\x71\xc0" + - "\x58\xfc\x07\xde\x6e\x77\xee\xbd\x4f\x4a\x14\x10\x12\x87\xa2\xfe\xd6\xf5\xa8\x77\xb5\xe9\x8c\xbb\x52\x74\xbe\x43" + - "\x7b\x28\xcc\xa6\xd3\xe4\x63\x54\xef\xa7\xe1\x60\x71\xb0\x6a\x3a\xc4\x31\x26\xe3\xde\x70\x59\x4b\xe6\xe2\x17\x73" + - "\x72\x56\xb4\xfc\x38\xcb\x30\x3d\xb6\x1b\x8f\xc9\x41\x83\x6f\x74\xae\xea\x39\x06\xa8\x15\x73\xa5\xfd\x46\x71\x84" + - "\x28\x06\x17\x93\x6e\x23\x11\x69\x26\x26\x48\x50\xe5\x43\xac\x70\x9a\x7a\xbe\xde\xf4\x49\xe7\x60\x58\x10\xe1\x20" + - "\xe8\xec\xe1\xfd\x41\x77\x11\x3d\xa5\x9a\x95\x6b\x0b\x94\x35\x75\x77\x50\x83\xec\xa4\x5c\xbb\x8b\x6f\xb6\xb6\xf8" + - "\xdf\xa2\xc2\x7f\xeb\x75\xab\xca\x5a\xe7\xee\x3e\x2c\x7e\x37\x0a\xd3\xf1\xab\x75\x05\x0f\x67\x65\x31\x3b\x53\xf9" + - "\x49\x89\x7f\x64\x6a\x07\x9c\x23\xea\xb5\x35\x79\x7d\x51\x29\xf8\x6b\xbd\xc2\x7f\x41\x9b\x05\x7f\x41\xba\x26\xfc" + - "\x6b\xdd\xe2\x1f\xa6\x6a\xf9\x59\x69\xdc\x69\xa4\xba\x28\xa1\x1c\x85\xe5\xd9\xf5\xc9\xb2\x68\xd5\x99\xb9\x82\xea" + - "\xcf\xcc\x15\x18\x91\xdc\x1f\xeb\x95\x32\x4d\x53\x37\x0a\x5c\x26\x2e\xdb\xa5\xa9\xd6\xd9\x50\x20\x79\x6e\x74\x2a" + - "\xc5\x38\x35\x0a\xf2\x32\xe7\xa6\x6a\xd5\x49\x01\xae\xe3\x77\xc6\xd7\xe7\xba\xd5\x02\x5c\xd2\xbb\x19\x76\xdd\x07" + - "\xf7\x24\xca\x57\x70\x52\xc4\x40\x04\x51\x8d\x00\x4d\x68\x9b\xe2\xf4\xd4\x34\xd2\xd5\xbc\x1b\x77\x1f\x6b\x5e\x16" + - "\x6e\x66\xe5\x99\x9d\x57\x6f\xcf\x4d\xe3\xea\x7e\xbb\x6e\xfb\x5c\x13\xc3\xe4\x73\x61\x35\x1c\x87\x65\x18\xd0\x97" + - "\xd7\xd7\xfe\xad\xd0\xa8\xb9\x69\x4a\x11\x72\xec\x68\xd3\xac\xf8\xa1\x53\xb1\x74\xec\x1e\x7a\x67\x5d\x6d\xa8\x78" + - "\x43\x95\xf3\x79\x52\xa7\xac\x6d\xfb\x1e\x38\x5a\x9e\x26\x90\x7c\xac\xd2\x1b\xfd\xc9\x4e\x87\xef\x7a\x3b\xfe\x49" + - "\x4d\x85\x46\x26\x13\x85\xcb\x8b\x7a\xfc\xa1\x02\xf6\x36\xf9\x40\x1d\xb9\x4f\x8e\x11\x8b\x77\xd3\x0e\x43\xf5\xe1" + - "\xa1\x98\x91\x50\x4b\xf6\xe8\x51\x16\xac\x46\x72\xba\xbc\x62\xf3\xfa\x1a\x4a\x89\xf1\x08\x12\x83\xd1\x91\xd5\xcc" + - "\xf4\xa1\x2f\x80\x66\x10\x82\xc3\xd5\x81\x1a\x4c\x3e\x1c\x4e\x02\x65\x92\x74\x34\x8a\x05\x76\xbc\x5a\xdd\x9c\xe9" + - "\xa6\x5e\x57\xb9\x9a\xeb\xa2\x84\xe0\x58\x56\x54\xec\xce\xb4\x45\xed\x06\x86\x6e\xfa\xdd\xbe\xd2\x8d\x35\xff\x78" + - "\xf7\xf6\x87\xce\x29\xa4\x19\xa5\xe9\x71\x45\xb0\x30\xbd\xf5\xa1\x4d\x22\x76\xfe\x79\x53\x5b\xbb\x4b\x8c\x80\xba" + - "\x5c\x96\xca\x7d\x01\xc7\x5e\x36\xf7\xeb\x9b\xef\x37\xb5\xe6\xc6\x7e\xb9\x2c\x47\xaa\x5d\xae\xc2\x4d\x04\x05\x82" + - "\xeb\x01\xfc\xec\x43\xb5\x4b\xbc\xd1\x6e\x3a\x41\xd5\xaf\x5f\x7e\xb3\x7d\x6f\xab\x6d\xae\xc8\x43\x11\xb2\x57\x54" + - "\xe6\x42\xbd\x78\xfb\xe6\x47\xd7\xb5\x86\xc2\xe6\xd0\x75\xb5\x5d\xae\xb0\xc7\xaf\x9a\x7a\xf9\x0e\xda\x62\x0a\x95" + - "\x39\x8a\x38\xb9\x5c\x96\x24\x67\xdf\xa8\x19\xe4\x19\x19\x28\x7f\x95\x63\x1d\x71\xd6\xef\xed\x00\x4b\xe1\x5e\x5f" + - "\x5f\xbb\xd1\xba\x9b\x8b\x02\x75\xed\xb7\x57\xef\xf5\x29\x8a\x01\x19\x34\xdd\x00\x0d\xee\x66\x48\xe5\xdb\xc6\xbd" + - "\x1d\xa8\xec\x75\x05\x89\x84\xd5\xaf\x6f\xbe\x9f\x82\xb6\x1b\x27\x95\x61\x2d\x68\x66\x2e\x97\xa5\x58\xb1\x73\xdd" + - "\x10\x3a\x02\x05\x0d\xab\xb2\x9e\x71\xb4\x88\xfe\xa8\x2f\xbf\xaf\x67\x3f\xea\xa6\x05\xde\x96\x7e\x33\x46\xb7\xab" + - "\x73\xa1\x01\x5b\x6a\xf2\x60\xfc\xe8\xb3\x89\x2b\xd3\xb4\xe0\xf5\x36\x38\x3a\x7c\x78\x3c\xfc\xed\xe0\xe8\x3f\x1f" + - "\x1e\x3f\xc2\x17\x0b\xa3\x73\xc4\x21\x99\xfc\xe7\x60\xfc\xe8\x70\x38\x3d\x52\x1f\xda\xe3\x47\x83\xa3\xff\xfc\xd0" + - "\x7c\xa8\x8e\x1f\x0d\x3f\x9b\x2c\x4f\x09\xac\xe1\xc1\x5f\xbe\x7a\xf2\xc5\x48\x3d\xf8\x7a\xff\xf1\x13\xf8\xe7\xc9" + - "\xe3\x29\x74\xad\x54\xab\xa6\x6e\xeb\x59\x5d\xaa\xdc\xb4\x98\xf2\xd9\xd5\x0e\xef\x7e\xe4\x57\xe4\xfd\xae\x4f\xea" + - "\x75\x7b\xad\x57\x2b\xf7\xff\x5d\xdb\xd6\x8d\x3e\x35\xd7\xe3\x9d\x5d\xa0\xee\xee\xda\xbe\x9e\x17\xa5\xb9\x6e\x8c" + - "\xbd\xbe\x28\xf2\x53\xd3\x0e\xa7\x34\x8c\xaa\x7e\x8e\x5e\x82\x5c\xd7\xdf\x5f\xbe\xbf\xfe\xee\xe5\xb3\x17\x43\x2a" + - "\xb0\x92\x6d\x7d\x98\x7c\x98\xe0\xe3\x75\x43\xad\x1f\x7d\xb8\x18\xef\xec\x1e\xef\x4c\x87\x83\xc3\xa9\x7b\x3f\x38" + - "\x9c\x1e\xfd\xe7\x87\xc9\xe1\x83\xe3\x47\xff\xef\xf5\x70\x80\x7f\x4f\x8f\x1f\xb9\xf7\xd3\xc1\x87\x7c\x67\x78\x3d" + - "\xbc\x1e\x4e\x70\x62\x27\x8f\x54\xc0\x6c\xde\xbe\xb7\xa5\x1e\xa9\xfd\xa1\x7a\xbf\x30\x57\x20\xdf\xae\xad\x99\xaf" + - "\x4b\xcc\xab\xda\x36\x75\xbe\x9e\x19\x86\xeb\x71\x8b\xfe\x1e\x28\x1c\x7a\x7f\x7c\xd4\x97\x93\x8f\xb6\xae\x56\xe3" + - "\x8f\xde\x5f\xd5\x5c\xea\xe5\xaa\x84\x80\x7f\xf5\x48\x3d\x86\x8a\x2d\x26\x69\xc0\x0c\xc0\x53\x7c\xa3\x94\xda\x55" + - "\xdf\xbe\x7c\xf5\xf6\xa7\x97\x4a\xdb\x33\xc0\x69\x72\x35\xa8\xb6\xd1\x95\x75\xe7\x49\x94\x7b\xf6\xea\xfd\xcb\x9f" + - "\x30\x37\xbd\xb2\xa6\x29\x74\x59\xfc\x8e\xf8\x99\x03\x3b\x86\xad\x08\xa9\xcd\x82\x45\x0b\xa0\xd6\x67\xc6\xda\x17" + - "\xf4\xd2\xc9\x18\xd4\xa7\x2f\x86\x8e\xfd\x80\x87\x0b\xe3\xc7\x84\xef\xbe\x1c\x62\x02\x26\x77\xd8\x74\x59\x2a\x7b" + - "\xb5\x3c\xa9\x4b\xc0\x20\x27\x97\x5b\xc7\x29\x61\xd9\x27\x43\x65\x2e\xcd\x6c\x0d\xfd\x00\x1c\x3c\x44\x40\xc1\x1c" + - "\xdf\x3c\x0a\xdf\x00\x88\x03\xef\xbf\x7b\xf9\x83\xe2\xfc\x90\x0a\x78\xa2\xb6\x86\xea\x8b\xb9\x42\x37\x0d\xa8\x7c" + - "\x22\xd1\xbd\x2d\x67\xd4\xc6\xc5\x7b\xcf\x55\x5b\x66\x7b\xc2\x2a\x6e\x1c\xd8\xe3\x3f\x31\xb0\x2f\x86\x74\xcf\xfc" + - "\xd9\x81\x9d\xd6\x9b\x47\xd3\x86\x5e\x8b\xd1\x70\x10\x0e\xc5\x0f\xec\xae\x9a\xba\xac\x4f\xd5\x6c\xa1\x1b\x65\xcd" + - "\x3f\xd7\xc6\x5d\x62\x83\x07\xfb\x7b\x7b\xdf\x7c\x3d\x7c\xaa\x96\x80\x0a\xb1\x5a\x19\x6d\x8d\x02\xb8\x14\xc8\xc8" + - "\x76\xae\x73\x13\x1c\x94\x90\xbe\x94\x25\xee\xd4\x03\x95\x3d\x9a\x64\x9c\x43\x3e\x7b\x94\x79\x29\xed\xc1\xd7\xfb" + - "\x5f\x7c\x3d\x52\xaf\x5f\xaa\xa5\xbe\x42\xad\x23\x6e\x60\xd2\x3b\x52\x34\x38\x44\xa0\xc0\x25\x33\x99\x28\xad\xe6" + - "\x85\x29\x73\x8c\xfe\xb9\x28\xaa\xbc\xbe\x18\x33\x55\x03\xf7\x1b\xc6\x47\xc8\xeb\xa5\x2e\x2a\x30\x26\x03\x16\x11" + - "\xc8\xa0\x7c\x33\x48\x62\xa7\x0e\x3c\x59\x04\x97\x72\x47\x40\x71\x99\x02\xad\x9f\x4c\xd4\xcf\x16\x0d\xcb\xe0\x75" + - "\x1e\x22\x2c\x6a\x00\x7a\x78\xc6\xc6\x6b\xca\x2f\x5b\xb8\x59\x7b\xfd\x12\xd7\x6e\x59\xe7\xc5\xfc\x4a\x15\x2d\xba" + - "\x20\x84\x2e\x76\xa9\xb1\xcf\xd6\xb3\x09\xe5\x41\xd3\x75\x24\xcb\xa3\x23\x3c\x59\x12\xd2\x9a\x3a\x05\xd9\x79\x1b" + - "\xbc\xdd\x4f\xa3\x5b\xc1\xd1\x9b\x1a\x32\xaf\xd8\xed\x7b\xf2\x7e\x50\x07\xca\xd1\x3e\xca\x71\x1b\x55\x19\x2b\xf5" + - "\xa5\xf7\x06\x61\xed\xa8\x6c\x56\x57\xb6\x6d\xd6\x8e\x6b\xca\x80\xc4\x70\xa8\xfa\x47\x7d\xe9\xe9\x20\xec\x23\xf1" + - "\xe2\x7d\x20\x42\x3e\xe2\x4b\xe7\xf9\xfb\x3a\x50\xce\xb7\x4d\x38\x88\x03\x85\x4d\x38\xa6\x48\x88\x28\x7c\x42\x5e" + - "\x46\x9e\x75\xa8\x7f\xd0\x25\xb4\x49\xf1\x96\x96\x0e\x4e\xb8\x4b\x63\xfe\x25\xae\x05\x25\xa3\xa0\xa6\x93\x16\x9f" + - "\x9e\x36\x7b\x11\x7a\xa1\x86\x83\x9e\xe2\x28\xb1\xf7\x54\xe3\x4e\x52\x26\xad\x7c\x80\x91\x4b\xe5\x3a\x36\xf6\x70" + - "\x57\xf4\x35\x12\x2f\xdc\x5d\x7e\x38\x9b\xfc\xa2\x68\x16\x64\x20\x4f\xdd\xa0\xe3\x8d\x27\x4e\x84\x6b\xd8\xed\x02" + - "\x7c\xe2\xfd\x7b\x7c\xf9\xd0\xdb\x4e\x2c\xf5\x64\xe2\x2e\x4e\x48\x9f\x50\xcc\x55\xe3\xc8\x93\x25\x4c\x08\x01\x85" + - "\xeb\x3e\x3d\xda\x43\x54\xb1\x6c\x47\x58\xdc\xb6\x7a\xda\x18\x5b\x44\x18\xdb\x27\x5f\x88\x47\xde\xcf\x6e\xe0\x77" + - "\xd4\x51\x18\x8c\x13\x66\xfb\x9f\xc3\x74\x0d\x43\xea\x06\x9c\x1a\xa9\xb4\x0f\x2e\x25\x88\x2d\x44\xaa\xad\xd8\x49" + - "\xe8\x5f\x6b\x15\x95\xa6\xbe\xc9\xad\x9e\xe0\x5b\x71\xee\xe1\x58\x16\x95\x5d\xd1\x0d\x13\x42\x2a\xeb\x46\x89\x4b" + - "\xcf\x1d\x8f\x70\x6b\x88\x83\x48\xdf\xde\x79\x14\x7d\xc6\xaf\x91\x4a\xf2\x78\x8d\xd4\xc7\x7f\xfe\xfa\xdd\x4f\xfe" + - "\x04\x21\xb8\x13\xd4\x8a\xf1\x30\x6c\x2d\x32\x8e\x31\xf1\x95\x83\x47\x6e\x38\xe9\x98\x7e\xc0\x5f\x6b\x0c\x6e\x97" + - "\x74\x33\xec\x0a\xe9\x52\x21\x20\x87\xb6\xb6\x7c\xd3\xc9\xa4\x7b\xc5\x68\xa4\xfb\xb9\x65\x29\xa4\xca\xe4\xb7\x51" + - "\x98\xcc\xb7\xcd\x2b\xed\x08\xe0\x55\x64\x4e\xe7\xaf\xc5\xf4\x41\x2e\x93\xf4\xa3\xc1\xdd\xf3\x28\x62\x80\x12\x3a" + - "\x14\x55\x9e\xb8\x73\xdf\xef\x4c\xb0\x7b\xd8\x33\x1b\xb2\x92\xe3\x70\xa2\x7c\x3a\x35\x3e\xb1\x61\xff\xf7\x7d\xc9" + - "\x7b\xb3\xb3\x30\x7d\x85\x7a\x52\xdb\x09\x03\x79\xa7\xe3\xa9\xea\xf4\xfe\x40\x09\x2d\xf9\x2d\x0d\xc9\xf4\xc6\xec" + - "\x4f\x2a\xf6\xc6\xcd\xb6\x40\x4e\xf3\x1d\xef\x0c\x1c\x72\xb4\x22\x0d\x91\xf3\x07\xb9\x73\xdc\xa4\xfa\x2f\xdd\x93" + - "\xa1\x38\x8c\xcf\x3c\xaa\x03\x6a\xa5\x90\x09\xff\xa8\x2f\x83\x19\x0f\xdc\xdb\x74\xab\x5a\x7d\x66\xac\xca\xe6\xa5" + - "\x6e\x33\x6f\x16\x1b\x54\x75\x4b\x39\xd7\x73\x63\x56\x54\x0b\x20\x5a\x61\x5c\xa5\xb1\xea\xc1\x37\x5f\x7f\xfd\x17" + - "\x79\x91\x7e\xd4\x97\x2f\x39\x75\x93\x6e\x4e\x4d\x3b\x52\xb6\x99\x09\x19\xfd\xcc\x5c\x8d\xa0\x3e\x38\x86\xae\xc5" + - "\xb7\xde\x2a\x22\x6e\x69\x42\x44\xb0\x63\x59\xe2\xfa\x5a\xfd\x71\x23\x71\x26\x81\x27\xae\x44\x0b\xe4\x69\xd9\xcc" + - "\x8e\xe0\xdd\xa6\x5c\xef\x03\x25\xaa\xe5\xa2\x87\xd4\x63\x35\x05\x04\x6b\xb3\x72\xed\x0d\xe0\x0f\x47\x36\xc0\x7a" + - "\xc6\x65\x0f\x44\x1b\x12\x3a\x92\xe1\xaf\xcd\x2a\x95\xb6\xa3\x2c\x86\x3c\x35\x58\xb0\xb3\x19\xf0\xb5\x5f\xca\x47" + - "\xa4\x10\xb5\x0a\x91\x34\xac\x01\x9e\x42\xe3\x74\xf3\x6d\x35\xdd\xbe\xa7\x1e\xa9\x5d\x35\x2f\xaa\x1c\xc5\x84\xa6" + - "\x38\x5d\x08\x5e\x7e\x40\x59\x19\x1c\xdb\x8a\xe9\xfb\x28\xa2\x6d\xb7\x65\x56\xdf\x5c\x12\x9d\xe4\x8f\x86\x54\x29" + - "\x3b\x50\xf8\x14\xb6\x1e\xd1\x83\xbb\xe4\x0a\x4e\x92\x9d\x80\xdd\xfe\x89\x3b\x3d\x50\x4c\x55\x46\x62\x24\x92\x50" + - "\xcf\x5a\xc6\x8c\x06\x67\xf2\x17\xcc\x81\x20\xcc\xf4\x0b\xc9\x90\x50\xdf\xdd\xb6\xb1\x63\xfe\x81\x89\x7b\x04\x7b" + - "\x22\xce\x91\xc7\x51\x23\xbf\x7f\xbd\x6e\xeb\x58\xd0\x39\x05\xb8\x12\x31\x25\xc4\x60\x90\xbc\xb9\x7d\xcf\xf3\x14" + - "\xc9\xe1\x04\xe2\xf7\xc8\xf3\x03\x81\x66\x21\xc5\x12\x99\xdb\x66\xed\x06\xa7\x10\x40\x13\xb4\xe3\x65\xb1\x44\x8f" + - "\xa7\xeb\x6b\x9c\xa9\xf1\xa9\x69\x79\x02\xbf\x03\x55\xc8\x20\x23\x15\xc3\xae\x2b\x98\xa5\xc8\xa5\x12\x28\x0e\x1d" + - "\x5b\x73\xa3\xc1\x4d\x14\x64\x3c\xad\xce\x2a\x27\x9a\xca\x71\xf2\xb6\x9d\x79\x5a\x87\xa7\x8b\xe7\xc0\x4f\x75\x64" + - "\x69\xe2\xa7\x84\x5f\x0e\xb4\x28\x7d\x46\x71\xb6\xb3\x36\x4d\xb1\x9e\x90\x74\x09\xfe\xbe\x75\xd2\x18\x7d\xd6\xb5" + - "\xc1\x45\xa8\x85\xb5\x23\xd3\x94\x24\x12\x0c\x86\xda\xef\x28\x6f\xbb\xee\x6c\x66\x7f\x3c\xe3\xd5\x2b\xaa\x74\x37" + - "\x52\xf8\xc4\x8b\x3e\xc6\x91\x33\x66\x4b\xee\x0a\x9c\xc0\xae\xd8\xd9\xab\x38\x29\x03\x53\x6a\xbb\xd3\xd9\x69\x4c" + - "\xe8\x2a\x45\xb7\xae\xaf\x71\x63\xbb\x2a\x01\xcf\x96\x61\xe2\xbd\x92\x0e\x0b\xef\x1d\xcb\x7b\x33\xed\x78\x48\xc3" + - "\xd1\x99\x57\x6a\x36\x3a\x5a\xb2\x22\xf9\x58\x56\xe4\x17\x05\x58\xcf\x46\x7d\x74\x92\xfb\xda\x12\x16\xbc\xaa\x2b" + - "\xd3\x37\x83\xf1\xef\xeb\xeb\xf8\x48\x47\x4a\xd7\xd7\xb0\xac\x73\xd0\x47\x6b\xb9\x7a\xe8\x56\xa0\xf3\x3c\xe2\xfb" + - "\xd9\xf5\xb9\x2c\x6c\x1b\x69\x27\x20\xcb\x50\xae\xbc\xf5\x60\x33\xe9\xc2\xa9\x88\xbb\x28\x2f\x94\xf8\x8d\xbb\x53" + - "\x3a\xd7\xf3\x1f\xb1\x68\x24\xd8\xf5\xb8\xd6\x1e\x64\x0e\xda\x0e\x47\x49\xd1\xe3\xa7\x22\x9f\xf6\xe4\x91\x7a\xbe" + - "\xd0\x78\x18\xcf\x4d\x63\xe1\x3e\x44\xa9\x1f\x48\x3d\xde\x01\xc8\x58\x2f\x8c\x67\xe6\x22\xf2\xac\x9e\x95\xd6\x1d" + - "\x1c\x82\x0d\xe2\x57\xbf\xfe\xfa\x2b\xaa\x3e\x10\xf4\x61\x61\x88\xf3\xe3\x90\xa8\x3e\xca\xfe\x1c\xf7\x25\x50\x74" + - "\xae\xc7\xd3\xf6\xc2\xbe\x5b\x23\xbc\x67\xb8\xf6\x5d\xb7\x1f\x8f\x38\x0f\xc5\x08\x7e\x83\xae\x1e\x58\xd9\x73\x26" + - "\xe9\xb4\xd9\x03\x9f\x4e\xd6\x09\x26\x5e\x9c\x04\x29\xd0\x78\x46\x33\xba\x30\xe8\x69\xd2\xd6\x42\x2d\x32\x47\x1b" + - "\x24\x4d\xd8\x2d\x97\x03\x09\x6b\xc3\x00\xb6\x09\xea\x11\x25\xba\xb4\xd4\x2b\xec\x85\x07\xe9\xcb\x21\x41\x7c\x0f" + - "\x55\xd9\x0f\x3b\x02\x8f\xbe\xab\x06\x18\x15\x71\xa0\x03\xe9\x17\x67\xdc\xfd\xdd\x13\x2f\x1e\x13\x02\xa8\xed\x38" + - "\xa1\xfb\x34\xb3\x92\x56\x89\xeb\x87\x06\x45\xde\xa8\x6d\x8d\x92\x34\xaa\xe1\x5a\xc7\x22\x8a\x53\x26\x22\xdf\xa0" + - "\xc6\x58\x17\x61\xc7\xbc\xde\xaf\x60\xcf\x1c\xf9\x72\xe1\x14\xc0\x3e\x38\xba\xb5\x28\xa2\xe3\xe0\xdb\x14\x17\x71" + - "\xb5\x2a\xaf\xfc\x09\xc7\x24\xad\xee\x5c\xaf\x9a\xfa\xbc\xc8\x25\xe8\xb7\xdb\x39\xc0\x02\xfb\x0d\xf7\xf0\x21\xad" + - "\x2a\x7d\x16\xc2\xaa\xe8\x72\x38\x88\xde\x0f\xc4\xe6\x0d\xbb\x21\x8e\xdc\x82\x46\x0e\xb8\xeb\xf0\xe6\xce\xb9\xf6" + - "\x81\x8a\xf1\x04\x62\x3c\x79\x63\x3e\xb7\x18\xdb\x77\xe1\x76\xb6\xe3\x42\x6a\x37\x3e\x2e\x1e\xf4\x1b\x16\xbc\x5e" + - "\x1c\xa3\x22\xae\x5d\x6e\x5b\xf2\x1c\x48\xb2\x43\xb7\x5c\x9f\x85\x17\x2c\xaf\xbb\x9f\x05\x98\x4d\x73\xde\xdb\x14" + - "\xea\xae\x20\xd6\x90\xd2\xa1\x52\xbd\x1d\x49\x09\xaa\xb8\x4f\xfd\x78\xf8\x30\xfc\xee\x0c\x9c\x40\xce\xcc\x19\xf8" + - "\xd4\x35\x66\xd6\x86\x93\x45\x7d\x77\x7b\xfa\x40\xc9\x6d\x0e\xd5\xf1\x7d\x17\x76\xce\xf5\x75\x54\x2a\x7b\x14\xbf" + - "\x7f\x1a\x87\xff\x54\x75\x45\x57\xc9\x08\x24\x3b\xa5\xd5\x4a\x17\x8d\x74\x1a\x82\xa6\x83\x2a\x27\x9c\xd8\xc7\xca" + - "\xd3\xdb\x70\x60\xb7\x83\xf3\xd9\xeb\x39\x15\xab\xd7\xed\x6a\xdd\xda\x68\xa2\xb6\xd8\x48\x08\x45\xc8\xf7\x21\x89" + - "\xfa\x44\xa1\x7a\xb9\x42\x8a\x71\xd0\x3f\x73\xbe\x2d\x98\x0f\xd2\xe8\x73\xaf\x80\xde\xe9\xd9\xcc\xac\x5a\x70\x81" + - "\x01\x03\x2d\x7d\x75\xd7\x94\x42\xc3\x7b\x70\x16\x19\xc9\x73\x2b\x21\x47\x34\xb9\xa1\xa4\xef\xba\xe7\x01\xcf\x23" + - "\x97\x3d\xda\x6d\xb9\x71\xbb\xcc\xfc\x73\x5d\x9c\xeb\x12\x14\xfd\xa1\xd6\x50\x36\x54\x91\x66\x7b\xdc\x3c\x02\x9c" + - "\x70\xe1\x47\x9a\x68\xc0\x46\xee\xda\x32\x94\x34\x09\x90\xe5\x49\xea\x91\x14\x8e\xfe\x27\xf7\x72\x4f\x1b\xb0\x95" + - "\xfb\x7a\xe5\x8f\x19\xcf\xcb\x53\xf1\xb6\x8f\xbb\xe5\x15\x1e\x8a\x82\x37\xe1\x4f\xc1\x98\x45\x6f\x44\x50\x70\xea" + - "\x38\x87\x34\xd2\x77\x1a\x22\xc4\x20\x49\x42\x25\x67\x5d\x82\x37\xc2\x5c\xc6\x23\xda\xf6\x9e\xb8\x3f\x57\xa5\xa3" + - "\x9e\x60\x12\x46\x24\x5a\x5d\xba\x6b\x0e\xb6\xd7\xc9\xfa\xe4\xa4\x34\x23\x32\x53\xc7\x1c\xd5\x72\xfb\x5e\xb2\x94" + - "\x8e\x02\x1f\xa9\x0c\x3d\xbd\x33\xc9\x9a\x46\x54\xd8\x95\x0d\xd4\x77\x73\x64\xa3\xb7\xb8\x7f\x6a\x05\x7d\xf6\xf4" + - "\x2d\xa1\xbd\xf9\x03\x23\x5e\xa7\xb1\x91\x7c\x84\x63\x9f\xe2\x18\x0e\x95\x51\x53\x95\xfd\x50\x0b\xe6\x01\x49\xa1" + - "\x3b\x0d\xfe\x10\xb5\x75\x44\x7a\x6e\xfa\xa2\xb9\xb7\x7a\xd1\x0a\x83\xa8\x1f\xba\x63\xf1\x0a\xcb\xd0\x9b\x65\x1a" + - "\x86\xd6\x41\xc5\xf1\x3e\x46\x7c\xab\xaf\x2b\x72\x95\x56\x8b\xba\xcc\x19\x48\x12\xe3\x42\xc0\x8e\x84\x79\x91\xfe" + - "\xb9\x36\x4d\x01\x12\x09\x3e\x98\x82\x42\x1f\x2b\xf9\x5e\xdb\x76\xf7\x8d\x63\x9c\x0a\x93\x2b\x34\xba\xab\x99\x9e" + - "\x2d\x50\x9e\x82\xf4\x63\xc4\x64\x6e\xdf\xdb\x2a\xb5\x6d\xb9\xf0\x94\x58\x35\xd3\xea\xd3\xa9\x37\xff\x49\x1d\x0e" + - "\xf9\xe4\xaf\x9b\x72\xaa\x12\x67\x00\xc6\xe3\xcc\xfe\xfe\xf2\x3d\x06\xf3\x15\xd6\xbd\x2e\xa7\x2a\xb6\xcd\x93\x24" + - "\x29\x6d\x47\x74\xa6\xe0\xab\xd3\xb2\x3e\x71\x1f\xf9\x6c\x7e\xc2\x46\x2c\x9e\x6a\x7b\x55\xcd\xc4\x6f\x92\x57\xdf" + - "\x63\x1f\xf4\x6a\x55\x16\xd8\xb5\xc9\xe5\xee\xc5\xc5\xc5\xee\xbc\x6e\x96\xbb\xeb\xc6\x1d\xa6\x3a\x37\xf9\x53\xb0" + - "\x5e\x5a\xd3\x1e\xfc\xfc\xfe\xd5\xee\xd7\xd8\xe1\xc9\xa3\x6d\xca\x7a\x51\xaf\xdb\x29\xd9\x48\x70\x09\xc1\x03\x4a" + - "\x72\x9d\xe2\xd1\xda\x9a\xa6\xd2\x4b\xf9\x68\xa5\xad\xbd\xa8\x9b\x5c\x3c\x82\x15\x10\xbf\xf1\x58\x4d\x51\x77\x89" + - "\x4f\x1a\x9d\x17\x68\x75\x92\x8f\xc9\x6d\x82\x17\x67\xcb\x71\xf0\x30\x03\x70\x57\xf0\x92\x6c\x65\x8f\xb2\xa9\x62" + - "\x83\x2a\x5a\x77\x5a\x73\xd9\x4e\xc9\x4b\x65\x55\xea\xa2\xa2\x20\xcb\x45\xbb\x2c\xf9\xb9\xfb\x9b\x1e\x5f\xc2\xd3" + - "\x68\xea\xc0\x0b\x87\x9d\x5c\xb0\xd4\x47\x5b\x57\x49\x31\xf7\x88\xca\x7d\xd4\xe7\xda\xce\x9a\x62\xd5\x02\xe2\x03" + - "\x3b\x5c\xb3\x36\x81\x3b\x0b\x4d\xb9\x4a\x27\xb2\x47\xd0\x99\x89\x6c\x06\xaa\x9e\xc8\x9a\x62\x3e\x34\xaa\x2f\xf3" + - "\x62\xd0\x9b\xef\xb3\x68\x06\xf8\xc5\x7b\x73\xd9\xc6\xc3\xe0\x37\xff\x78\xf7\xf6\x87\xa8\xc7\x93\x89\x02\xaf\x84" + - "\xf8\xb6\x9b\x4c\xd4\xff\x67\xae\xac\x0f\x0d\x57\x88\xb4\xa9\x06\x4e\x3a\x61\xab\x7d\xf6\x28\x1b\x92\xd9\xd0\xb6" + - "\x45\x85\x66\x53\xf4\x39\x23\xd9\xc7\x16\xd5\x69\x69\x30\xcc\x3c\x16\x97\xa6\x9e\x9a\x0b\x66\x8f\x03\x86\x41\x3c" + - "\x36\x97\x2d\xad\x37\xfc\x9d\x4d\x15\x3a\x25\x8d\x44\x18\x1b\x04\xe8\xd4\xca\x4d\xa7\x1a\xc0\x2d\x71\xa0\xaa\x1a" + - "\xcd\x20\xee\x20\x40\x97\xf0\x4a\x81\x5d\x00\x25\x33\x7f\x9a\xb8\x9e\x97\xe7\xba\x5c\x43\x66\x5f\x57\x06\x22\xae" + - "\xdd\xb4\x09\x0c\x12\x51\x85\x7b\x93\xf9\x3c\xd3\xde\xa5\x4c\x54\x07\xce\x55\xbe\xae\xcb\x65\x29\xbe\xbe\x84\xf6" + - "\x13\x07\xb1\x64\x3d\x5e\xd5\x4d\x1c\xe8\x61\x17\xf5\xba\xcc\x29\x4f\x6e\xa4\xd8\x9e\xd2\x27\x57\xf5\x1a\xf8\x2c" + - "\x9d\xe7\xee\xef\x46\x81\xc2\x0c\xfd\x64\xb8\x2a\xc4\x81\x9a\xd3\x17\x6e\xdd\xc0\xa5\x00\x3e\x45\xd1\xd1\x31\x9e" + - "\x9d\x06\xa9\x7c\xd4\x6c\xf0\xb8\x41\xcd\x39\x4c\xb1\xd0\x4f\xf3\x76\x05\xfa\x19\xd2\x95\x92\x6f\x2d\x3e\xda\x8e" + - "\x01\xf5\xbc\x00\xeb\x66\x7f\xbe\x2e\x4b\x35\x2f\x4d\x7e\x0a\x39\x2d\x90\x26\x2b\xcc\xab\x8e\x86\x79\xd4\x37\xe3" + - "\x77\xb0\xd9\x4e\x6a\xb7\xe3\x04\x09\x87\x11\xfa\x6f\x51\x5b\x30\xf6\xda\x1a\xd2\x9b\x17\x56\xd5\xcb\xa2\x6d\x4d" + - "\x3e\x52\x17\x4d\xd1\x82\x74\xee\xf8\x53\xa9\xcf\x0f\x77\xc3\x3a\xce\x89\xcb\xd6\x02\x6e\x24\xf6\xcc\xf3\x8f\x0f" + - "\xc3\xd6\xf8\x76\x5d\xe0\x6d\xa7\xd3\x61\x41\x09\x69\x8b\xe8\xb3\x4b\xf4\x58\x1b\x20\x03\x5a\xe8\xc0\x54\xec\x6a" + - "\xf8\x18\x1a\x13\xe5\x3b\xed\xf4\xd4\xc9\xda\xfe\xc8\x0d\x36\xf2\x50\x98\xde\xee\x7f\x20\xec\xa6\x43\xf6\xa7\xf3" + - "\xef\xef\xf8\x56\xda\x30\xfd\xd6\x78\xa3\x8b\x4a\x2d\x4d\xbb\xa8\x73\xaa\x4e\x2e\xc4\xba\x29\xbd\x75\x35\x12\x5d" + - "\x5f\xcf\xdd\x3b\x70\xc7\xaa\x68\x9e\x47\xca\x16\xcb\x75\xe9\xb6\xfb\xaa\x31\xbb\xfb\xe3\x27\x0a\x52\x17\xb5\xeb" + - "\xc6\x6c\x27\xde\x0b\xe0\xe2\x26\x33\xfa\x33\x73\x16\xa2\x62\xd6\x0d\xc5\x42\xa2\x3b\x5c\x27\x63\x70\x38\xd2\xb3" + - "\x90\xb5\x05\x2d\x54\xbe\x4b\xdb\xf7\x64\x8d\x75\xd7\x72\x84\xc0\x31\x3c\x2f\x23\x5e\xe0\x9f\x7f\xfa\x1e\xf6\x7e" + - "\xbd\x76\xa4\xb3\x2d\x76\x91\xf9\x01\xc7\x34\x3c\x6f\xee\xf7\xcf\x3f\x7d\xef\xbf\x60\xb5\x3c\x71\x4b\x36\x52\x34" + - "\xa0\xae\xde\x7a\x2a\xdb\x7d\xe5\xeb\xe1\x74\x45\x18\xc6\x8d\x37\x10\x3e\x7a\xef\xd3\xb2\x6d\x79\x1f\x59\xf2\x3e" + - "\xf2\x5e\x8c\xea\x5c\x53\xd3\x2b\x76\xb8\x24\x78\x0f\xd0\xf4\x3b\xe9\x06\x99\x23\x74\xa7\x47\xee\x9e\xac\x7a\x85" + - "\x5d\xb9\xeb\x87\xfc\x1c\xe6\x45\x63\xfe\x0e\x45\x43\x2d\x10\x0e\x78\xae\x9b\x42\x9f\x50\xd7\x0a\xd1\x1f\xa0\x73" + - "\x8e\xd5\x04\xc5\xa5\x9f\x6c\x71\x06\xbb\x56\xbd\xf5\x0a\x13\x8d\xfb\x1d\x16\xea\xe3\x04\xb4\x1c\x36\x40\xd3\x8e" + - "\x4f\x9f\xe3\xb3\x60\xee\xb9\x04\x4f\xf8\xd0\x55\x2e\xe0\xd8\xd5\x78\xc4\x85\x55\x69\x2d\xc5\x5c\x15\x2d\x7a\x16" + - "\xbe\x78\xfb\x06\xd0\x6c\x95\xf7\x1f\x52\xb3\xba\x2c\xbd\x8f\x28\x33\x97\x2f\x5d\x65\x7d\xbd\x00\x00\xac\xa4\x81" + - "\x10\xba\x7e\x7d\xdd\x79\x87\xf9\xbb\xd4\x90\xa3\x33\x39\x9c\x2e\xed\xa4\x0f\xf2\x67\xc6\xdf\xf5\xc0\x8f\xf7\x85" + - "\x99\x9b\xa6\x31\x39\x2e\x7e\x4e\xbf\xc2\x7c\xf3\xfb\xc1\x90\xef\x0b\x4c\xf4\xfb\xa2\x53\xd2\x4f\xfc\x20\x03\xcf" + - "\xf2\xa5\x59\xd6\xcd\x55\x16\x56\xe6\x5d\xab\xdb\xb5\xdd\xcd\xc1\x41\xc6\x89\x3a\x3e\x57\x30\x2e\x32\xbc\x7e\xee" + - "\xe6\xd0\xcd\x8b\xf8\x09\xc7\xce\x57\x43\x1b\x5f\x0d\x5a\x76\x48\xb5\x00\x2c\x0c\x79\x50\x54\xed\x05\x56\x92\x33" + - "\xbe\xf3\x9e\xbf\x5c\x47\xfc\x82\xf1\x7e\x44\x0b\xef\xbd\xf2\x1a\xa4\x2a\xdf\x3b\x13\x9c\x97\x44\x4a\x37\x7d\x52" + - "\x37\xad\x5a\x1a\x6b\xf5\x29\x97\x6d\x9e\x9d\xa0\xaf\x44\x36\xd3\xd5\xcc\x94\x26\xcf\xfc\x77\xaf\xf4\x99\x51\x97" + - "\x0b\x54\x1e\x61\x33\x07\xc1\x37\x40\xe7\x57\xef\x50\x94\xdb\x1b\x09\x49\x1d\x2e\x29\xcb\x34\x42\x2d\xb4\x5d\x00" + - "\x7c\x68\x64\xa9\xc0\x80\xe5\xd8\xce\x27\x69\xf2\x99\xb9\x12\xb2\xac\x23\x60\xe0\x56\x15\x45\xf0\xd1\x38\x23\x70" + - "\x65\xaf\xe3\x4a\x68\x4f\x22\x18\xc7\xef\x0e\x90\x54\xd2\x5b\xef\x46\x05\x2d\xaa\x03\xc5\x1e\xd9\xe4\xb3\xd7\x4b" + - "\xf0\xd4\x70\x18\x2b\x4d\x92\x52\x47\xd8\xff\xa3\xfd\xe3\x1e\x65\x37\xbe\x52\x8f\xa5\x5e\xa5\xa3\x13\xd9\xf2\xdd" + - "\x49\x6b\x3e\x33\x57\x3d\x80\x00\xd1\xc7\xc4\x53\x50\x15\x3e\xca\x8b\x22\xaf\xe5\xd4\xde\xc8\xa5\xfc\x49\x5f\x48" + - "\xf4\x06\xb7\x64\xcf\xca\x32\x5e\x35\x89\x68\xd3\x01\x49\x90\x4b\x74\xb8\x61\xe6\xa6\x01\x12\x37\x69\xfe\xb9\xbb" + - "\x80\xd0\x74\x83\x4b\x80\x6f\xac\xdb\x38\xe2\x5c\xdc\x81\xbe\x4e\xfb\xa7\xbc\x23\xf9\x8f\x4f\x7c\x01\x5d\x16\x6b" + - "\x49\xdf\xf5\x1c\xc5\x23\xaa\xf4\xf8\xae\xd7\x11\xac\x76\xe7\x58\xa7\x58\xd5\x1b\x16\x8f\xb1\xe3\xd2\x59\x7a\x7b" + - "\x6e\x9a\xa6\xc8\x85\xb3\x44\x6c\xd3\x97\x53\x57\x53\xd9\x37\x64\x75\xdf\x94\x61\x7c\xf3\x6c\x08\x8b\x7d\x64\x6b" + - "\xfd\xd4\xde\xde\x41\x59\x05\x69\x95\x7d\x5b\xea\x55\xb2\x9c\x33\x0f\xd6\x4c\x5d\x8d\x8b\x48\x0a\xf1\xd7\x98\x3e" + - "\x78\x7d\x77\x0e\xc6\xe9\xe4\x3b\x64\x02\xf4\xef\x57\xbb\x6c\x75\xad\xcc\x45\x48\x40\x0b\x41\xf2\x17\xe0\x62\xad" + - "\x5b\xc7\x02\x5a\xd3\x9c\x1b\x0b\xd9\x02\xeb\xca\x08\x5d\x6f\x18\xc8\x11\xb6\xe5\xd6\xf7\x48\x75\x1f\x8f\x5c\x17" + - "\x7c\x99\x5e\x12\x90\xa8\x08\x91\x3d\x37\xb3\x35\x31\x23\x7a\xb5\x6a\xea\x55\x03\x4a\xdf\x64\x3a\x99\x6e\x8f\x75" + - "\x79\xa1\xaf\xec\x00\xdb\xc2\x47\xd8\x95\x48\x4b\x7b\xf3\xe7\x16\xf3\x39\xdc\x18\xd2\x1e\x8b\xaf\xe0\x9e\x89\xa2" + - "\xd0\xa0\xa9\xf7\x78\xc7\xcb\x65\x04\x3e\xea\x3d\x31\x18\xa1\x90\xe3\x73\xe8\x66\x8a\x16\xb9\xed\xfa\xa8\x6d\x05" + - "\x6f\xfc\x31\xb4\x3b\x10\x95\xa6\x51\xef\x5b\x79\x5d\x99\x81\xda\x1b\xf5\x95\xe9\x19\x2c\xfc\x73\x13\x92\x07\x3c" + - "\x43\x38\xfd\x5c\x72\x22\xfc\x63\xbc\x6a\xea\x65\x61\xcd\x80\xfd\x08\xc7\xcc\x80\x80\xf2\x36\xe6\x45\xc6\x3a\x47" + - "\x26\x9f\x96\x82\xac\x79\x07\xb4\x34\xae\x9b\xe2\x35\xc6\x96\xf2\xcb\xb9\x2e\xca\xd0\x25\x72\xee\x81\x00\xa3\xd9" + - "\x42\x37\x7a\x06\xea\xf1\x07\x7f\x79\xf2\xc5\xfe\x14\xa5\x58\xa4\xb3\xae\x7b\xb5\xd7\x68\xb8\xc1\xe4\x79\x08\x12" + - "\x22\x75\x3a\x9b\x1c\xd5\x40\x08\x61\x4b\x70\xab\x42\xef\x12\x55\xb4\xfc\x3d\x05\xad\xce\x75\x69\xaf\x50\x50\xaa" + - "\x08\x3c\x23\x96\xb8\x31\xe4\xe1\x8b\x69\x88\x71\x9f\x5d\xa1\xd4\xed\x4e\x8d\x17\x9f\xb8\xda\x5f\x8c\xd2\xa5\xad" + - "\xc1\xc1\xc2\x55\xe7\x6a\x06\xa1\xc4\x90\x59\x54\x9f\xeb\xa2\x64\xf6\xdc\x8e\x51\x74\x1a\x28\x10\xe4\xd0\x89\x84" + - "\xfe\x88\xfc\xf7\x87\x14\x86\x27\x30\x58\xdd\x9c\x8d\xe0\x21\xac\xb3\x78\xc3\xd3\x32\xea\xd1\xbf\xee\xa8\x6c\x32" + - "\xc9\xbc\x3f\x32\xe4\xb5\x2b\xb4\x25\xf9\x92\x21\x22\xda\x1a\x09\xaa\xb6\x6a\x65\x1a\xd5\x16\xb3\x33\xd3\xaa\x07" + - "\xfb\x8f\xf7\xf6\xbe\xc4\x7e\x13\x94\x27\xbb\x3f\xd2\xe7\xd7\xd7\xfe\x09\x27\x9d\x95\xef\xf0\x69\x68\xfa\xe5\x65" + - "\xeb\x56\x5c\xb8\x07\x30\x08\xa3\xb0\xf5\xa7\xe8\xcc\xc2\xf0\x8b\x7e\xda\x80\xa8\xf9\x09\x3e\xec\x6e\xae\x8e\xc5" + - "\xb8\xd5\x4c\x4a\x68\xec\x92\x51\x80\x8f\x02\xe0\xc8\xa3\x8e\x28\xb8\x2c\xf1\xbc\x4e\x17\xb5\x6d\xa7\x70\x90\x97" + - "\x85\x85\xd6\xb6\x83\xbd\x1d\x6a\x7d\x81\x95\xa6\x40\x51\xab\x6e\x10\x05\xac\x77\x1a\x3d\x81\x27\x38\xa9\x4b\xdd" + - "\xbf\x3f\xc0\xa0\x0c\x0f\x3b\x42\xbf\x71\x69\xef\x1f\x1c\xf4\x2c\xf8\xf5\x35\x97\x79\xdc\x5b\xe6\xb1\xb4\x27\xfa" + - "\xfa\xbe\xc0\x2f\xa3\xfa\x41\x1b\x00\x69\x8f\x33\x75\xa8\xb2\xaf\xf7\x32\x35\x55\xd9\x97\x5f\x7e\x81\x50\x25\xf7" + - "\x0f\x0e\x98\xa6\xa5\x8a\x7f\x5f\x5b\xb7\x7b\x77\x54\x8a\x7b\x3b\x4d\xc5\xc8\x3a\x53\x8c\x37\x9b\x47\xf9\xc6\xb5" + - "\xe0\xf9\x68\x45\xa0\x18\xb8\x1a\xc8\x50\x34\xc2\x93\xad\xe7\x5c\xa2\x37\x38\x83\xde\x1d\x08\xb5\xa5\xf6\x9b\x70" + - "\xe4\x76\x74\x50\xe8\x77\x53\x46\x82\xd9\x6f\x25\x43\xfc\xb6\xee\x70\x99\x0f\x85\x47\xca\x0a\xb7\xf9\xe0\xdd\xbd" + - "\xed\xd5\x3b\xbc\x65\x2f\xb4\x45\xe1\x08\x61\x15\x8a\x1c\x37\x2b\x55\x34\x52\x90\x86\x19\x30\x2f\xc3\xa4\xf4\x48" + - "\x1f\x9c\x16\xd3\xb5\x94\x0c\xe4\x17\x03\x1a\xd6\x79\xd1\x98\x54\x3d\x61\x55\xed\x16\x00\x34\x17\xda\x9e\x81\x0d" + - "\x72\xfb\x5e\xa4\x9e\x00\x31\x13\x3f\x0b\xfd\xff\x05\xb8\x79\x0c\x34\x74\x4c\x8a\x35\xad\xaa\xfd\x98\x42\xae\x1a" + - "\x59\xcf\xc3\x87\x5e\x3b\x01\x16\xb1\x9d\x1d\x42\x2b\xf7\x9e\x2c\x42\xf2\xf6\x20\x00\x19\xa8\x32\x5a\xdd\xb4\x59" + - "\xba\x40\x3f\xaf\x56\xe8\x1b\xe4\x53\xb9\x45\xd4\x0d\xff\x18\xb7\x35\x94\xf3\xfc\x36\x7d\xfc\xc2\x91\xf4\x65\x51" + - "\x19\x11\x83\x02\x61\x66\xc4\xc0\x62\x55\x0b\x6d\x43\x8c\xe9\xfd\x10\x71\x4a\x16\x32\x6a\x4b\x54\xfb\x4e\x13\x72" + - "\xe9\xcf\x3f\x7d\x2f\xdc\xa5\x3e\x07\x3d\xd0\x95\xf7\x0c\x75\x25\x5e\xcf\xbd\x0d\x70\xf7\x5d\x51\xcd\x58\x5f\xad" + - "\xab\x7c\x52\x37\xee\xf5\x0f\x75\x65\x76\xdf\xc0\x54\x93\x91\xb0\xd4\xee\x22\x42\x55\x09\xeb\xc8\x60\xa8\xa8\xcd" + - "\xa3\x1a\xde\xd4\x4d\x50\xd9\x81\xa6\x8b\xc3\x42\x79\x81\xb0\x17\x55\x2d\x47\x4b\x5c\xb7\x1c\xf3\x50\xda\x3a\x5e" + - "\x53\x48\x77\x61\xc3\x35\x38\xa2\x20\x18\x7c\xd3\xd6\xee\x1e\x84\xf2\xf2\xf0\x7a\x7e\x49\xf4\x98\x48\xa7\xda\x71" + - "\x7f\x62\x18\x3d\xfb\xaf\x72\xa1\xa1\x23\x29\x0f\x81\xa2\x1c\x66\x70\x87\x72\x7d\x01\x70\xfd\xc1\x37\x5f\x7d\xfd" + - "\x78\xca\x88\xb1\xf0\xd6\xd6\xc8\x20\x17\xed\xe7\x16\x68\xcb\xda\xc2\xc9\x02\x73\xbd\xdb\x5a\x6b\xf0\xd4\x6b\x1b" + - "\x82\x2c\xa2\x6c\x54\x58\x77\x07\x6f\xd0\x31\x2a\x42\x43\x59\x54\xc8\x6d\x44\xea\x04\xbe\x3a\xa0\x44\x37\x63\x9d" + - "\xe7\x13\x9a\xd6\xf6\x8c\x31\x02\xe9\x62\x74\x5b\x37\xc7\x9e\x24\x7e\xfe\xdb\xe7\x81\x0b\x01\x9d\x79\x48\x41\x4d" + - "\xdf\x72\x85\x82\x8f\x68\xed\x48\x65\x9f\xed\xff\x76\x90\xa9\x1d\x44\x31\x00\xc4\xb0\xa9\x6c\x4f\xc4\x32\xe5\x39" + - "\x1a\x51\x08\xd9\x96\xe3\x9a\xc2\x9a\xed\xfc\x89\x85\xca\xa2\x56\xbb\xa8\xab\x94\xae\xb2\xf7\x14\xdc\xb6\xff\x47" + - "\xa0\x4b\xac\x54\x31\xf7\xd6\xf3\x65\x9d\x9b\xb1\xb8\x2e\xc4\xab\x3e\xac\x1e\x69\x4c\x3f\x0a\x43\x10\x9e\x13\xc4" + - "\x15\x27\x82\xfe\x40\x65\x9d\x9e\x66\xa3\xbb\x6b\xed\xb8\x00\x33\x91\x6b\xf5\xe9\x9f\x6f\x3f\x4c\x48\x68\xbb\x5b" + - "\xd3\xad\xf3\x0d\x5e\xb9\xb3\x56\x4e\x28\x9f\xea\x13\xe3\xc8\x84\x95\xe4\x40\x5e\xbf\x82\x2e\xc0\x6f\x61\xcf\x47" + - "\xe4\x7a\xd8\xf5\x82\x89\x94\x05\x22\x6f\xc5\xbe\xd1\x45\x7e\xf6\xa3\xa4\xfa\x94\xf2\xf3\x60\x9e\xa1\x81\x9d\xa9" + - "\x23\x3b\xa3\x83\x60\xdc\x8c\x14\x4a\xfa\x6e\x50\x75\x95\xc6\x72\x6f\xea\x09\xf4\x32\xc3\x8a\x49\x1b\xd9\x89\x0f" + - "\x82\xe1\x93\x71\xff\x48\x7a\xb6\xa2\x7f\xf8\x21\x1f\xfb\xcd\x45\x76\xd4\x40\x75\xaa\x65\xef\xbe\x43\x4c\x59\xb0" + - "\xe3\x7d\x05\xdc\x89\x7a\xaa\xfe\x79\xb0\x37\xde\xdb\x87\x63\x26\x12\x37\x88\x56\x20\x4a\xc9\x3d\x15\xf7\x11\xba" + - "\xf0\x83\xb7\x0a\x69\x1c\x03\xca\x1c\x2a\x23\x0a\xf4\x95\x5d\x24\xca\xca\x4d\x0b\x55\x8c\x42\x61\x40\x36\xeb\x4b" + - "\xb5\x5d\x5f\xb0\x09\x97\x4a\x4e\x96\xc5\xd2\xa0\x81\x1d\x42\x5f\x74\x53\x5e\x21\xd7\x23\xb6\xda\x89\x99\xd7\x8d" + - "\x79\xe7\xae\x13\x50\xf3\xcb\x27\x84\x26\x9b\x68\xed\xbd\x17\xb4\x25\x60\x3f\xbf\x07\x63\x16\x49\x44\xb6\xa2\xca" + - "\x99\xd8\x4e\x27\xeb\x06\x42\xeb\x9d\xad\x3a\x0c\x15\x49\xf7\xe9\x48\xe1\x29\x20\x25\xb8\x9b\x46\x95\x75\x75\x6a" + - "\x1c\x47\x84\xda\xec\xd2\x67\x74\x95\x9a\x6e\xf8\x26\x13\x9c\x60\x65\x5b\x5d\x96\x41\x79\xe2\xf6\x6a\x24\xe4\x8b" + - "\x65\xfa\x43\x91\xb4\x3e\x55\xfb\xde\x8b\x6a\x7f\xe4\x45\xfc\xa9\xda\x57\x37\xa9\x67\x70\xa1\x8e\x07\x6a\xc3\x5a" + - "\x01\x22\xa1\x00\x8a\x08\x0a\x0d\x40\xb6\xbc\x95\xd9\x0d\xe6\xce\xbb\x99\x5d\x76\x6d\x00\x2b\xa0\x13\xca\xf4\xba" + - "\xad\x77\xe3\x0d\x70\xbf\xab\x61\x41\x95\xc9\xee\xfe\x08\xfc\xc3\x7c\xe3\x59\x5f\xd2\x56\x5c\xa8\x60\x1a\x50\x07" + - "\x6a\x5f\xb8\xe5\xc2\xb6\x92\xdc\x6f\x20\xc9\x92\x49\xf5\x64\xb8\x6b\x87\x0a\xb8\x54\xc8\x93\x9a\x2a\xcf\x46\xea" + - "\x28\x6c\xc1\x84\xdc\x4f\x26\xea\x3d\x9a\x16\x25\x97\x00\x5e\x51\x48\x41\xd8\x16\xf9\x37\x89\x56\x2e\xad\x91\x8e" + - "\xb3\x33\x2d\x55\xd2\xcd\x06\xe1\xf5\x6b\xb0\x39\x33\xfa\x32\xf3\xa1\xc3\x23\xd1\x46\x82\x05\x2c\x3c\xfd\xac\x98" + - "\xac\x58\xa5\x65\xc1\xca\x1e\x2b\x8c\x47\x78\x66\x3c\x6e\x73\x8f\xfb\x1f\x84\x77\xd7\x2b\x7d\xea\xea\x0d\x28\x10" + - "\x9a\x5c\x1e\xe5\xd9\xc3\x0f\x36\xea\x4b\xc3\xf2\x1b\xc9\xf4\xbd\x2b\x96\x2b\x48\x28\x8b\x58\x13\x35\x33\x31\x34" + - "\xec\x58\x63\x89\x65\xfa\x73\x19\x33\x8d\x64\x0d\xab\x3b\x69\xa0\x35\x30\xe7\xa6\x21\x87\x9e\xc2\xfa\x9e\xfa\xa0" + - "\x0c\xec\x17\xea\x0c\x47\xaa\xd2\x4e\x9a\x79\xe7\x35\x88\x22\xde\x6e\xa4\x52\xb2\x0a\x11\xd2\xec\x41\x3f\xe2\xe3" + - "\x4c\x67\x59\x86\x77\x2c\x89\x9d\x18\x6d\x0b\xdd\x34\x69\x2b\xd3\x16\xa5\xf7\x39\x60\xc3\x80\x7d\x4f\xec\xba\x3e" + - "\x6b\x55\x1f\xae\x37\x29\xc9\x81\xff\xcc\x72\x00\xd1\xad\xea\x0b\xbc\x04\x69\x9b\x3c\x96\x8d\x95\x46\x37\xde\xa4" + - "\x8e\x66\x5e\x48\x3e\x6f\x43\xdb\xd1\x7e\x0e\x92\x80\xfb\x92\x37\x76\x52\xa6\xd3\xa5\x17\xa6\x31\x90\x8c\x67\x66" + - "\x84\x16\x76\x0e\x10\x05\xee\x1e\x39\xd5\xcd\x89\x3e\x35\xa9\x25\x79\x32\x51\x83\xaa\x56\x4b\x0d\x79\x97\x16\xf5" + - "\x05\x10\x68\x11\x73\x43\x3a\x42\x40\xf7\x20\xe0\x96\x21\x9d\x8e\x40\x04\xa5\x5f\x44\x98\xe4\x99\x08\xe9\xb9\xdb" + - "\x25\x41\x1d\xf8\x7d\xc0\x89\x1a\x02\x59\x6a\x55\xa0\x59\x9b\x08\x19\xa9\xcb\x01\x4d\x4f\x7d\x29\x61\x84\x53\x49" + - "\x96\x36\xd4\x7c\x4d\x62\x98\x0f\xd6\x08\x95\x1c\xa8\xc7\x7b\x7b\x40\x81\xf0\xc1\x5f\xd5\x17\x7b\x7b\x7c\x67\xae" + - "\x2d\x26\x94\xdd\xfb\x52\xb4\xf0\x77\x23\xc2\x19\x1c\xd3\x12\x96\xb7\x1b\x5f\x27\xfd\x86\x3f\x3d\x2e\xb5\xb3\xe8" + - "\xac\x25\x0a\x2b\x78\xe1\xa4\xba\x01\xc8\x76\x17\xfa\xaa\x2f\xa2\x0a\x7d\xa9\x2f\x34\xb8\xff\xb5\xc3\x68\x41\xa8" + - "\x37\x9f\x1a\x4b\x95\xc0\x9a\xfb\x59\xe5\x7c\xd8\xa8\x61\x9d\x2d\x74\x51\x45\x20\xe6\x49\x38\x56\xa0\x59\xff\xdd" + - "\xe2\xce\x6d\x02\xcf\xd6\x16\x53\x0f\xaf\xb8\xef\x89\x6c\x8d\xbc\x90\xb3\xd8\x14\xb9\xec\x56\xb9\x75\x97\xac\x73" + - "\xe0\xbf\x4a\x2d\x1f\x9f\xd2\x1b\x27\xc6\x7c\x7a\x27\x3a\x42\xcf\xc6\xc6\xa5\x23\x3f\xdc\x3c\x52\xe5\x21\xe8\x23" + - "\x6d\xfc\xc7\x7b\x5f\x06\x5d\x37\xea\x37\xbf\x7b\xf9\xec\x85\x84\x1f\x89\x48\x71\x56\xd5\x54\x5f\xf6\x34\x6d\xa9" + - "\xf5\x7d\x8a\x6e\xa6\xb4\xc9\x2f\xf6\xbe\xbc\xa5\xf6\x96\xeb\xc8\x92\x60\x1b\xd6\x6c\xa3\x2a\xb3\x34\xed\xe7\xd6" + - "\x67\x40\x20\xdc\xd6\xf4\x2e\x8c\xea\xe6\xdd\x0f\xb6\x38\x6f\xcf\x0c\xd6\x20\xff\x3e\xe8\x45\xb6\xb6\xd8\x1a\xe4" + - "\x5f\xc2\x03\xbf\x6a\x82\xda\xdc\x97\x6f\xe8\xda\x8d\x7a\x83\x8a\x49\x43\x46\x04\xac\x18\xdc\xfe\x43\x2f\x7d\xc1" + - "\x16\x41\x89\x9b\xa5\x2e\x01\x8b\x35\x8c\x03\x8d\x4c\x30\x97\xe0\x3a\x5f\x57\xc8\x55\x92\x0d\x92\xfb\x6b\xe5\x5d" + - "\x99\xae\xfb\xf5\x35\x1a\x9b\x3b\x56\xc2\x78\x2d\x30\x78\xa1\xe3\x06\x02\x14\x34\x4a\x4a\xc7\x6b\x1b\x52\xe5\xa5" + - "\xb1\x09\x92\xfa\x83\x80\xcd\x92\xeb\x9c\xbc\x5e\xa4\x5b\x57\x64\x31\xe5\xa1\x3c\xed\xbc\xa2\x6e\x0e\x3a\xdc\x41" + - "\x20\xed\x34\xbc\x9d\xe4\x0a\xc2\x35\x9b\xbc\x74\xe3\xdb\x48\xc9\xb6\x84\xdf\xd3\xb8\x31\xb6\x2e\xcf\xcd\x2f\x45" + - "\xbb\xe8\x91\xc9\x8e\x02\x5b\x63\x05\x57\x84\x97\xee\x71\x7f\xce\x0f\x51\xb5\x1b\xf8\xc6\x9a\x99\xd9\x16\xf5\xe2" + - "\x1a\x1f\xf7\xdc\x21\x77\x18\xfc\xe5\xec\x3d\xaf\x73\xcf\xd2\x81\x37\x15\x5b\x71\xa4\xbb\x55\x87\x17\xf8\xd7\xc4" + - "\x87\x30\xb3\x87\x24\x4a\x50\x34\x8a\x13\xed\xc1\xc1\x15\xc3\x64\x68\xf3\x84\x41\x8f\xa2\x4f\xf9\xa8\x4e\x6f\x99" + - "\x81\xe7\x24\x18\xc2\xef\x8e\x21\xd8\xf5\xfc\xd3\x67\x9a\x1a\xf8\xaf\xca\x4d\xdc\xa5\x0d\xb2\x93\xb0\xee\xba\x03" + - "\x41\x12\xdb\xb3\x7f\x3c\xfb\x55\xcd\x30\xf6\x46\x1c\xe0\xfb\x03\xb5\xbb\x1b\x19\x15\xa2\xfc\x6e\xb7\x19\x14\xea" + - "\x55\xd6\x8f\xb1\xb4\x7d\xaf\x6b\x4c\x21\xcf\x83\x53\xd3\xfe\xe3\xdd\xdb\x1f\x3a\x0e\xbc\x48\x82\xbd\xa3\x46\xec" + - "\x4c\x4d\x9d\x80\x64\x48\x3d\xa5\x47\x2a\x03\xbf\xfc\xc8\x63\xf9\xd4\xb4\xef\x20\x44\xa3\xd3\xd4\xa7\x36\x22\x92" + - "\xaf\x88\x96\x28\xee\x23\x45\xba\x8d\x60\x91\x8e\x30\xad\xd3\x48\x65\xab\xda\xb6\x31\x7a\xba\x2a\x46\x6c\x6b\x96" + - "\x40\xea\x47\xfc\x30\x06\x89\xee\x1d\xad\x74\xf5\x99\x4c\x14\x44\xed\x05\x54\x5f\xaf\x8e\xe4\x27\x98\xe7\x0d\x1d" + - "\xdd\xb7\x6f\x81\x30\x23\x43\x03\xaf\xbd\xc8\x55\x29\x9d\x42\x71\xc1\xfd\x1c\x62\x48\x71\x00\x6a\xdb\xe4\x06\x1d" + - "\x4f\xb2\xdb\x3f\x03\x11\x25\xe0\x86\xe9\x1b\x9d\xd2\x54\xc4\xe0\x6d\x53\x04\x5a\xf1\xcf\x30\xaf\x1b\x69\x17\x59" + - "\xa3\xc3\xdd\xda\x0e\xa9\x69\x9e\x4a\x34\x7c\x72\x00\xd1\xea\x64\x5d\xcd\x16\xaa\x9e\xfb\xa9\xc6\xbb\xcf\x1b\x7a" + - "\x28\xc1\x15\x9c\x19\x34\xf4\x75\x97\x38\x58\xd5\x46\x2a\x9c\x88\x51\xe7\x88\x4a\x7a\x14\x13\xab\x91\x50\x83\x74" + - "\x36\x89\x58\x65\x01\x24\xde\x32\x20\x97\xc4\xe9\xbe\x0d\x77\x5a\xc0\x32\xcb\x0c\xee\x54\xe5\x6f\xe6\x5c\x97\x3f" + - "\x83\x69\x25\xda\x74\x31\x24\x72\x67\xd5\xa2\x45\x4b\x23\xe2\xc2\x8a\xf1\x61\x91\xb1\x6c\x21\xe4\x8b\x63\xe0\xc2" + - "\x13\x8e\xc2\xf4\x31\x22\x37\x12\x76\xb9\x17\xb5\xfc\xa2\xd1\xab\x67\x65\x94\x33\x0e\x02\x82\x04\xbe\x99\x2b\x72" + - "\x07\x7a\x1f\x7d\x92\x18\x82\xff\x5c\x52\x53\xea\x09\x56\x16\xe5\x33\xbd\x2d\x85\x3b\x66\x40\xf6\x90\x1c\x7c\xe9" + - "\xbc\x0f\x59\x20\x21\x62\xc0\x55\x8e\x26\x5a\x8c\xcd\x40\xf4\x6b\x28\x0d\xaf\x42\x8e\x13\xd7\xfa\x28\x54\x3b\xae" + - "\x2f\x2a\xd3\x78\xd8\xe3\xe1\xd8\xfc\x73\xe0\x58\xad\xf1\xac\x04\x0d\x0c\x46\xd7\x76\x52\x99\xe1\xb7\x21\x2f\x4b" + - "\x18\xb5\x6b\x6e\x8c\x31\xcb\xdf\x82\x6a\x39\x1a\x43\x7c\x7b\x42\xd9\xa5\x5e\xf5\xe8\xdd\xdc\xc2\x88\x7c\x7d\x9d" + - "\x7c\x20\x90\xba\x00\x20\x57\x08\xf2\xf3\xf9\xa2\x28\xf3\x24\x4d\x06\x27\x26\xe9\x94\x7b\x9a\x08\x2e\x22\x79\x02" + - "\xaf\xc4\x18\xad\xae\xbc\x7c\x3d\xb4\x2a\xc9\xf6\xeb\x06\xf3\xba\xaa\x62\x87\x55\xb9\xd7\xfe\xa7\x37\x17\x34\xfe" + - "\xe9\xdb\xeb\xee\x54\xb8\x04\xfe\xb7\x31\x4d\xad\x84\xac\x32\xe5\xdc\xa3\x56\x0d\xe2\xfd\xc2\x8f\xd3\xd4\x8a\xfe" + - "\xfb\xf8\x68\x84\xdd\x16\xb3\xaf\x98\x13\x96\x16\xc5\x17\xec\xcd\xc6\xe9\xea\xbb\xed\xc4\xdf\x95\xf3\x2f\xea\xc6" + - "\x27\xad\xc7\xa6\xb3\x2e\x5a\x3a\xec\x5b\x99\xa9\x1c\x49\x34\x86\x75\x95\x8c\xa2\x87\x86\xe3\xf9\x1b\x0c\x6f\x4b" + - "\x65\xdc\x4d\xaa\x44\x09\x4e\x4f\xea\xfc\x2a\x93\xbc\x5c\x27\x6b\x3c\x98\xb9\x91\x79\xc5\x64\xaa\xee\xe8\xb8\xd3" + - "\x6e\x93\xa9\x1f\xbb\x35\xe9\x40\xfb\xfb\xf0\xee\x55\x33\x26\xeb\xc6\x78\x51\xe4\x39\xa4\xc0\xef\xcd\x8e\x22\x01" + - "\xea\xdf\xae\x4c\xa3\xd5\x5f\x0f\xd4\xfe\xe3\xf1\xfe\x63\x7c\x89\xcf\x1a\x83\x01\x60\xf5\x7c\x6e\x4d\xfb\x4b\x91" + - "\xb7\x0b\x34\x79\xe1\x83\xef\x4c\x71\xba\x68\xad\x02\x04\x80\x76\xa1\x2b\xf5\xbb\x69\x6a\x55\x57\xca\xd6\xcb\x40" + - "\x35\xc3\xed\x85\xb9\x8b\x42\x65\xae\x51\x50\xde\x89\x17\x58\x29\xbc\xa1\x1b\xa7\x6f\x74\xe7\x85\x05\xb0\xac\x0d" + - "\xc3\x63\xbc\xc5\xcd\x13\xc3\xc5\xc5\xad\xb6\xcd\x79\x10\x1e\xef\xa9\x03\x35\xf9\x7f\x1e\xef\x4d\x20\xfe\xaa\x39" + - "\x69\x34\x38\x1d\x1e\xa8\xc9\x87\xa3\x0f\xc7\x84\xc7\xfe\xfc\xa7\xef\x5f\x61\x16\xd5\xc3\x0f\x15\x95\xc4\xcc\x26" + - "\xad\x69\xd8\x5d\x10\x90\xdc\xf1\xe9\xf5\xc9\xba\x6d\xeb\xea\xba\x58\xea\x53\x40\x80\x37\x2d\x80\xc1\x0f\x3f\x9b" + - "\x14\xf2\x63\x8d\xe3\x82\x2f\x01\x96\xe3\x1a\xa1\x1f\xaf\x9d\xf8\xa1\x1b\xa3\xaf\xcf\xcc\xd5\xa9\xa9\x86\x93\x02" + - "\x3a\xee\x15\xf9\x27\xeb\xa2\xcc\x7f\xd4\x8d\x5e\xb2\xf3\xd6\xe5\xc8\x89\xde\x23\x25\x1c\xc3\x46\xe0\x1c\x11\xd0" + - "\x95\xc8\x9d\x9e\xa1\x88\xd2\x24\x40\xf5\xc9\xc7\xb0\x71\x41\xc6\x47\x9c\x75\x43\x49\xb9\x8a\xd6\x2c\x41\x83\x17" + - "\xb1\x64\xd0\x68\xc4\x42\x9d\xc7\xfe\x0b\xd2\x53\xed\xfa\x5a\xf1\x0c\x93\x2f\x06\xf6\x5d\xc5\x20\xbb\x98\x2b\x13" + - "\xc0\x87\x42\xd3\x18\x24\x6c\x67\xba\xd4\x0d\x29\x12\x75\x9e\x87\xd1\x9f\x6f\x22\x71\x93\x89\x7a\xed\xbe\x27\xf4" + - "\x1a\xac\x41\x0d\xb0\xe6\x9a\x35\x16\xc3\x91\xc2\xf8\x7d\x70\x51\xa9\xd6\x4b\xd3\x14\x33\xcc\x0f\x47\xad\xf5\xcc" + - "\xb9\xda\x51\xd9\x51\x06\x46\x71\xce\xb7\x19\x47\x2f\x1e\xaa\x82\xcd\xde\x3b\x2a\x3b\xce\x46\xea\xbc\x6f\x89\x52" + - "\x92\x1b\x90\xe3\xbc\x81\xd1\xcf\x61\xf0\x46\x73\x4d\xf2\xb2\xf5\xc5\x4c\x46\x6b\xc8\x91\xbc\xbc\x88\x68\x9c\x85" + - "\x20\x8a\xa2\xa2\x4a\x70\xc2\x6e\x1b\x67\x45\x69\x8d\xdd\x48\xea\x93\x8f\x1c\x85\xb1\x71\x4c\x37\x72\x2c\xdd\x4e" + - "\xd1\x5a\xf8\x4e\x45\x0b\x0a\x7d\x8a\xd0\xcd\xa2\x3d\xc9\xb9\xe2\x9c\x38\x51\x37\xcb\xc0\xb8\x81\x6f\x1f\xfa\xf5" + - "\xc1\x37\x67\xe6\x6a\x42\x79\xc8\x30\xd0\x58\x61\x64\x1d\x3b\x6c\x4a\x17\xcb\x88\xc8\xe8\x68\x58\xe2\x20\x51\x0f" + - "\x5d\x8f\xdd\xc1\xa7\x24\x8c\x6e\xd4\x07\x71\x38\x56\x1a\x55\x83\x0a\x50\x9f\x97\x4c\xfb\xd2\x23\x55\x54\xe7\xf5" + - "\x99\xdb\x7c\x12\x3b\x25\xf6\x96\x8a\x13\xeb\xf5\xe5\xd3\x55\x87\xf8\xd7\x60\x08\xf0\xa4\xb7\xa4\x5b\x65\x2d\xd1" + - "\x91\xf2\x1c\x84\x93\x6f\xf0\x08\xfc\xfc\xd3\x6b\x27\x49\xd5\x15\x80\xbe\x63\x58\xd9\x8e\xca\xc0\x35\xaa\xaf\x84" + - "\xac\xf2\xc6\xe3\x88\xbd\x43\x13\xbd\x9f\xbf\xb6\x46\xbe\x37\x40\xb0\xc3\x45\x34\xfe\x62\xfc\x18\x13\xba\x15\x35" + - "\x1c\xec\x0e\xd5\xe8\xc5\xc2\x8c\x0a\xf4\x46\x69\x0b\xb7\x4d\x19\x5a\x2e\x3e\x4c\xf1\x04\xfd\x9e\x82\xfc\xea\x98" + - "\xe9\xbd\xa8\x46\x4a\x5b\xbb\x5e\x1a\xf6\xce\xa3\xd8\xe6\xfe\xdd\x37\xde\x44\x5d\x35\xba\x83\x0f\x94\xe6\xc8\xce" + - "\x87\x0f\xfd\xa5\x55\xd8\x1f\x4b\x5d\x54\x6f\xe1\x8c\x62\xd9\x7e\x4a\xdc\x22\xd2\xca\x52\x5e\xb8\x31\x3d\xd6\x9d" + - "\x9c\x71\x74\xac\x30\x19\x2e\x84\x7a\x89\xd4\xb2\x82\x47\xea\x1e\xd4\xd7\xf3\xf8\x5c\x13\x81\x74\x9d\xc8\xea\x32" + - "\xcf\xc0\x9c\x35\x80\x74\xf7\xfa\x8a\x56\xd2\x11\xd4\x92\x62\xa7\x26\x13\x95\x17\x90\xd8\x7e\x14\x8c\xdd\x5c\x0b" + - "\x9c\x37\xab\x1a\x33\x5b\x37\xb6\x38\x37\xe5\x95\xa0\x4b\x44\x76\x20\x72\xe8\x16\xba\x34\x52\xfa\x88\xcb\xde\x4a" + - "\x84\xc2\x32\xff\x14\x70\x1e\x1b\x63\xd7\x65\x8b\xae\x63\x22\xa5\x48\xe0\x29\xec\xf8\x63\x5d\x54\x03\xf0\x11\x94" + - "\x31\x10\x8f\xf7\x46\x88\xec\xee\x39\x8a\x5e\x29\x99\x6b\x35\x1b\xf9\xcd\xd8\xbb\x1b\x96\xc5\x7f\x84\xfb\x66\x28" + - "\x92\x55\xc5\xaf\x6e\x67\x62\x7b\xe5\x3f\x8c\x3e\x82\x99\x59\x35\xf5\xea\xbb\xba\x46\xd7\x81\x8c\x77\x13\xa0\x15" + - "\x51\x42\x04\x47\x46\xf3\xbc\xbb\xdb\xbc\x10\x49\x42\x0a\x8f\xa1\xa9\x57\x9e\x0b\x0e\xf5\x11\x9d\x11\x4c\x21\x7c" + - "\x76\xd8\x93\xbe\xd2\xbf\xe4\xc4\x57\xb4\x35\xdd\x7f\x89\xa3\xeb\x97\xa6\x58\x67\xc6\xd9\xa0\x85\x89\xe0\x67\x6b" + - "\xd4\xb8\xb0\x03\x95\x4d\x65\x2a\x55\x76\xb5\x45\xf3\xab\x69\x8f\xf8\xe5\x31\xa0\xed\xd9\x8e\xc8\x08\xd7\x5c\x38" + - "\xb0\x9e\x9d\xef\x56\xcd\x31\x12\x92\xc5\x23\x5e\x27\x4a\x47\x0d\x45\xd5\xfd\x84\x8d\xe4\x92\xa8\x85\x0a\xf1\x16" + - "\x24\x29\x60\x1a\xc6\xeb\x6b\x75\xbf\x81\x1f\xae\x72\xc8\x22\x10\x7d\x36\x94\x13\x17\x6d\x04\xc7\x9e\x45\x79\x13" + - "\xd3\x6c\xcf\x71\x96\x73\x9e\x48\x91\xe1\xf9\x20\xce\xf0\x8c\xc1\xb0\x52\xd2\x49\x73\x86\x1f\xc6\x2a\xed\x0d\xc9" + - "\xc2\x63\xfc\x2f\xc2\xbc\x42\xe0\x23\xcc\xef\x1f\x42\x54\xe1\x06\x13\x87\xd1\xf1\xe6\x23\x95\x7d\x68\x3e\x54\x6e" + - "\xfe\x7d\x50\xf2\x4d\xc8\x7e\xff\x5f\xaa\xea\x66\x08\xda\xe9\x4d\x82\x58\x74\xb7\x5c\x2e\x1a\xc9\x02\xe0\xa0\xbc" + - "\xcb\x12\xa7\x0f\x33\x17\xea\xd7\x37\xdf\x7f\xd7\xb6\x2b\x72\x51\x1c\xc8\x14\x5f\xe4\x92\x74\xc3\xa4\x05\x52\x96" + - "\x2d\x9a\xd7\x39\x47\xa7\x5f\x2e\x9a\x00\x82\xc0\x81\xed\x97\x8b\x86\xf4\x9b\xef\xd8\xde\xc6\x54\xdc\x09\x1e\x21" + - "\x66\x8d\xdc\x0c\xae\xd0\xf1\x80\x8c\x73\x40\x90\xf7\xfc\x45\xf7\x78\x6f\xcf\x7d\xbb\x37\x75\x7f\x31\xc0\x6a\x92" + - "\xe4\x0c\x9c\xd8\xf7\xbf\x7c\xb2\x37\x05\x09\xb0\x2d\x96\xc6\xaa\xd7\x2f\x3d\x06\xf8\xfe\xe3\xc7\x5f\xa0\x4f\x52" + - "\xc1\xe0\x36\xea\xc4\x55\x0d\x91\x5c\xee\xed\x94\x7e\x84\xfe\x43\x03\x12\x73\x20\x9d\xdc\x81\xd7\x29\xc7\xbd\x41" + - "\x29\xb6\x0a\x51\x02\x90\x27\xe8\xc4\xa8\xa5\xae\xd6\xba\x64\x97\x4d\xf0\x2f\xe2\x4c\x98\x83\x07\x4f\x1e\x7f\xbd" + - "\x37\xdc\xbe\x07\xd7\x35\xa5\xf2\x79\x06\xb6\x98\x5f\xf1\x22\x8e\xf4\xc0\x5c\x44\x0d\x41\xc9\x9b\x61\x2d\x59\xf7" + - "\xb6\xc5\x0b\x8c\x40\xec\xdd\x0d\x16\xad\x17\xef\x73\xf9\x90\x10\xe2\x07\xe2\xb6\xf2\x08\xfd\x3e\x49\x6a\x0d\x31" + - "\xf7\xf7\xef\x47\x13\x05\xde\xa6\xd9\x45\xd1\x2e\x9e\x37\x26\x47\x90\x56\x9b\x51\xa3\xa1\x98\xab\x8d\x2b\x02\x30" + - "\xf8\x03\x95\xcc\x77\x5c\xef\xd3\x64\x7f\x7b\xff\x45\x41\x49\x22\xec\x17\x8c\x2e\x0e\xb6\x0a\x06\x17\xaa\xad\x55" + - "\x14\xe8\x06\x50\xa6\x8c\x17\x08\xfe\x3e\xdc\x3a\xe7\x11\x8f\xcf\x04\xf3\x51\xd1\x04\x5c\x5f\xab\x74\xfc\xf7\xbd" + - "\xd3\xb6\x08\x5a\x8b\x2f\x44\x0a\xa9\x32\x71\x86\xca\x05\xfb\x05\xfa\x88\xd3\x48\x4d\x5a\xb0\x15\x13\xcf\x34\xb7" + - "\x02\x9b\xd0\x67\x58\x76\x53\xb7\xb3\x03\xa7\xd3\xeb\x52\x2f\x17\xcd\xb8\x5e\x99\x30\x45\x63\x34\x08\xf0\x2f\x89" + - "\x9c\x83\x4e\x95\xe2\x1d\xc1\xbd\x85\x27\x8c\xf6\x16\xa7\x72\x21\x60\x47\xf4\x54\x26\x1f\xa2\x04\xfb\x96\xb3\x65" + - "\x87\x7e\x23\xac\x59\x07\xc3\x14\xfc\x73\x6f\x2b\xe6\x46\x84\x4e\xb8\x07\xdd\x72\x51\x8e\xe8\x1e\xcf\x15\x0e\xb4" + - "\x57\xcb\x62\x49\xbe\x47\x09\xa4\x45\xd4\x4d\x1f\x27\xff\xf0\xa1\x82\x89\x4c\x62\xef\x45\xb7\xfa\x5e\xf7\x54\x34" + - "\x4c\xb5\xd2\x93\x89\xfa\x75\xf7\x27\xce\xdd\xb3\xfb\x4b\xd1\x2e\xa2\x70\x7f\x42\x03\xeb\x8b\xd2\x84\xfc\x9b\x10" + - "\x6b\x80\xe1\x56\xc8\x6c\x52\xe6\x3b\xe0\x43\x4b\x50\x68\xe9\xc6\xf8\xba\xf4\x59\x01\x81\xad\x5a\x7d\x2c\x4e\xad" + - "\xbe\x50\xab\xf5\xef\xbf\x97\x06\x7c\x89\x2d\xfa\x83\x56\xe6\xdc\x34\x14\x1d\x43\xa0\x3b\x76\xdd\xb0\xb7\xd4\x64" + - "\xa2\x06\x45\x8b\x50\x63\x48\xbb\x4f\x0c\x8a\xb7\x8e\x39\x5e\x99\x66\x97\x83\xc0\x4e\xb4\x2d\x40\xfc\x35\xe7\xa6" + - "\x52\x6b\x2b\x70\xa8\xd6\xab\x61\x34\x3a\xab\x97\xa6\x3b\xb8\x0b\x48\xc5\x4e\x09\x7c\x29\x34\xa1\x98\x7b\x3f\x73" + - "\xde\x5e\xd2\x8d\xab\xf7\xf8\xb9\x63\xc9\x9e\xf6\x59\x3a\xd9\x99\x04\xfb\xbc\xad\xd4\x81\xca\x62\x92\x90\xf5\x2c" + - "\xa5\x13\x32\xa5\x1b\xa3\xdc\xd4\xa9\x0b\x2b\xee\x99\xde\xc8\x80\x9e\xb8\x80\xb8\x9d\xe7\xc2\xc6\x19\x19\x62\x37" + - "\x62\x41\xa4\x69\xbc\x52\x9c\x85\xd4\x20\xbe\xb5\x15\x62\xba\xe2\xdb\xa1\xc8\x25\xc2\x81\x68\x1b\x8e\x00\xde\x66" + - "\xfc\x83\xfd\x86\x08\x1e\xc4\x7f\xe5\x31\xb6\x50\x53\x84\xce\xfc\x31\x86\x83\xab\x40\x86\x0b\x6c\x6d\x25\xae\x5f" + - "\xe1\x73\xce\x19\x2a\x3f\x67\x32\x3a\x08\x8f\x98\xfb\x98\xde\xc1\x7e\xec\x3d\x85\x44\x0d\x0f\xbe\xfe\x6a\xef\xc9" + - "\xc8\x71\x15\x8f\xf7\xfe\x22\x6a\x81\x55\x43\x9f\xe5\xde\xa7\xc1\xe3\x6a\xcb\x47\xed\xca\xce\xdf\xd1\xc9\x94\x75" + - "\x3a\x52\xa1\x6a\x8c\x20\xfe\x94\x0e\x8c\xe2\x61\xa7\xdc\x52\x78\xf3\x8c\xf3\x09\xaa\x93\xa2\xd2\xcd\xd5\x2e\x18" + - "\xf0\x25\x8c\x24\xa6\x22\xb4\x51\x2e\xc2\xb8\x8e\xc1\x83\xfd\xfd\x2f\x1f\x7f\x35\x14\x4f\x49\xff\xe8\x3a\x15\xd5" + - "\x15\xa5\x5c\x3a\x94\x73\xc1\x10\x96\xe9\x27\xa2\xc4\x8d\x9a\x0a\x87\x8c\x64\xec\xbd\xc0\x36\x83\x61\xff\x4a\xf0" + - "\x5f\x1e\x2c\x83\xcf\x98\xbc\xd6\xbe\x07\xa0\x03\x00\x9e\x3f\xf7\xe2\xe6\x56\xb4\xcb\x79\xf7\xfb\x3d\x1a\x6f\x7b" + - "\xff\x9a\xb6\x68\x74\x6b\x0a\x28\x32\x04\x75\x9a\x6d\x3a\xd4\xdd\xf3\x17\xd5\x8d\xa7\x27\xd4\x2d\xe1\x87\x21\xdd" + - "\xad\x72\xcc\x46\x94\x72\x01\x8c\x53\x90\x67\xb2\xd1\x10\xb6\x28\xd6\x76\x18\x51\xa7\x2a\x0f\xb7\x58\x1c\xb9\x26" + - "\x93\x3e\x01\x3c\x0e\xc4\xf8\xf3\x44\xf6\x02\x1a\x23\x93\xfe\xd5\xd7\x5f\x4c\xd5\xdb\x4a\x84\x1e\x14\x73\x14\xf4" + - "\x16\xda\x22\xe4\x24\xb8\x29\xb6\xe8\xb5\xaa\x71\xeb\xc1\x94\x5e\x19\xde\x0f\x1b\x89\x56\x1c\xa8\x90\xb8\x0c\x32" + - "\xf2\x49\x8a\x6e\xe2\xbf\xdf\x54\x6d\x67\xa1\xa5\xb3\x53\x2a\x8b\x91\x50\xc0\x21\x49\xe8\x00\x21\x82\xe6\x3a\xe0" + - "\x72\x7f\x00\xbc\xb1\x04\xb9\xb5\xe4\xb6\x94\x25\x58\xb3\x10\x28\x1c\xe0\x68\x37\x3c\x37\xb3\x65\xef\xf3\xcb\xdd" + - "\xf0\x26\x63\x59\x27\x41\xac\xe5\x96\x27\x83\xc3\xa9\xab\xff\xda\x7d\x32\xc4\xa7\x13\xf1\x8d\x84\x71\x65\x6c\x53" + - "\xaa\x39\x82\x24\x92\xae\xa0\xec\x5e\x45\xbe\x6d\xba\xe4\xf7\x91\x5a\xa6\x65\xf7\xd2\x9b\x68\x5e\x83\x43\x1b\xf8" + - "\x2b\x7f\x6e\x7d\xaa\x30\x08\x0e\xd7\x55\xae\xc4\xad\x1f\xcd\xb2\x0f\xbd\x1a\x04\x77\x14\x09\x6d\x43\x1d\xec\x04" + - "\x20\x77\xd4\xbc\xfe\x65\x48\xc4\x76\x23\x3e\xec\xf2\xfc\x3e\x8a\x1e\x5c\x63\x9e\xa6\x03\xfa\xb6\xa8\x72\xde\x1f" + - "\xad\x3e\x55\x0b\xb7\xeb\x44\x20\x59\xaf\xd4\x73\xeb\x18\xc0\x6f\x04\x12\x0c\x73\xec\x05\x88\x3a\xb9\xd1\x25\x45" + - "\xab\xcf\xa4\x1c\x24\x90\x06\x36\x0f\x02\x7c\x04\x68\x3b\x45\x2e\x60\xb7\x4a\x34\xbf\xf5\xc9\x32\x34\x56\xaf\xe0" + - "\xc9\xfe\x8a\x4f\xfe\x96\x0d\x51\x67\xc7\x07\x2e\x45\xbd\x76\x67\x10\x71\xac\xa7\xca\x8e\xf1\xa3\xe7\xf8\x80\xdf" + - "\xdb\x66\x36\xc5\x70\x78\x3a\xa2\x20\x1b\xd3\xcb\x0c\x28\xb6\x89\x3c\x42\x7b\xf9\x26\x73\x1e\x21\x13\x61\x4b\x63" + - "\x8c\x8c\x17\xac\x88\xf8\x56\x60\x9f\x11\x01\x49\xea\x08\xf7\xbc\x7b\x33\xee\x30\x2e\x87\xea\xcb\xbd\x2f\x15\xaa" + - "\x37\x42\x89\x8d\x90\x4e\xfc\xc2\xa7\xc5\x75\xec\x22\x79\x4d\x80\xe7\xcb\x80\x56\x2b\xf6\xc7\x19\xfd\x2f\x51\x3e" + - "\xb7\x5b\xea\x32\x97\x4a\x21\x34\x49\x35\x90\x9b\x1b\x52\xa6\x1f\x0c\x3f\x1c\x0e\x0e\x0f\x1e\x5e\x7f\x36\xbc\xfe" + - "\x70\xf8\xe1\x70\xc2\x07\x82\x61\x0e\xb1\xa8\xf5\x90\xb5\xbd\x24\x13\x0a\x4d\x55\xc6\x5d\x84\x85\x85\x87\xdc\x78" + - "\x77\xa0\x52\x35\xe0\x24\x48\xd1\xd1\xf1\xaa\x5e\x0d\xc8\x2c\x12\xcc\xf7\xba\xca\x6b\x08\xc5\x47\xc3\x6a\x40\x00" + - "\xc0\xf9\x40\xbf\x27\x5f\x63\x94\x26\x93\x8e\x87\x3c\x32\xd1\xe9\x7f\x01\x78\xa8\x23\xe1\x91\xcf\x6a\x0c\x47\xcc" + - "\x8a\x4e\x44\x2b\x98\xaa\x60\x62\xc2\xb1\xdd\x40\xe5\x00\xbd\x1a\xca\xc6\x54\x22\xa4\xcc\x0c\x50\xbf\xdd\xdc\xa3" + - "\xdc\xe4\x0f\x28\xfc\x9f\x9b\xe6\xa2\x29\xda\xd6\x54\x21\xd8\xc7\x31\x02\xba\xa8\x08\xea\xd5\xb5\xf4\x63\x53\xaf" + - "\x00\x43\x03\xbb\x18\x42\xd9\x41\x2d\x84\x8b\xef\xf1\x3e\xd0\xbd\x10\xb5\xb1\xd9\xba\x29\x33\xd2\x8e\xc6\x60\x34" + - "\x9d\x04\x9d\x83\x24\xa0\x1d\xc2\xc0\xd4\x70\x0c\x86\xf1\xb7\xf3\xc1\xdd\x70\xf8\x19\x28\xba\x93\xde\x90\xd7\xeb" + - "\xc3\x87\x2a\x73\x7f\x02\x3c\x7a\xc8\x40\x44\xb7\x4e\x31\x9f\x77\x53\xb4\x91\x0e\xc1\xe2\x8c\xaf\x32\x27\xef\x0a" + - "\xac\x24\x8f\x79\x05\xc9\xdf\xbc\x16\xc9\x4f\x17\x84\xc8\xf4\x25\xe6\xa3\xda\xbc\x3f\x20\x45\x8f\xf9\x7d\x86\x6a" + - "\x99\xc6\x2c\xcd\xf2\xc4\x10\x36\x98\x81\x98\x41\xf7\x37\x1a\xd3\xb4\xb5\xf5\xac\xd0\xae\xab\x40\xf8\x31\x9a\x45" + - "\xae\x6d\x58\xae\xe7\xe1\x48\xf4\xd8\x73\xd3\x42\xbc\x72\xc9\xf3\x01\xeb\xb8\x93\xe7\x51\x94\xb6\x11\x9c\x2e\x5a" + - "\xc0\xdd\x5e\xa8\x1b\x34\xed\x70\x54\x5c\x3c\x4d\x1e\x87\xe8\x28\x3c\x83\x14\x53\xf2\xb7\xd0\x9c\x43\xeb\x00\xdb" + - "\x01\xb9\x2e\xe4\x88\xa3\x88\x67\xba\xf2\xd2\x0d\x1b\x60\x8f\xfa\xa1\x55\xfc\xf6\xed\xe0\xaa\x60\x4d\x6c\x9c\x96" + - "\x0d\xa7\x98\x3b\x14\x01\x28\xd2\xa1\xb4\x35\xc0\xa9\x14\xe6\xdc\x20\xf8\xbc\x9e\xbb\xc7\x74\x63\xfa\xd4\xfe\xc4" + - "\x86\x84\xd4\x2f\xc4\x0d\x20\x2c\xfd\x71\x57\xe1\x9f\xc2\xa9\xfa\x93\x9b\x7a\x85\x61\x10\xd2\x20\x9e\xaf\x1d\x95" + - "\x81\xfd\xb9\xaa\x71\xd9\xc0\xac\x24\xc3\xb3\x93\x8c\x70\xbe\xf6\x90\x64\x46\x80\xef\xcd\x01\x05\x1b\x46\x27\x31" + - "\x24\xba\x67\x80\xbc\xf9\x37\xc7\xf7\xbb\xc7\x82\x30\xa9\x03\x52\x88\x1f\xc5\xdd\xc7\x1e\xf4\xbf\xea\x9b\xaa\xee" + - "\x24\x1d\x04\xaf\xfa\x74\x34\xcf\x4b\xa3\xab\xdd\xf5\x2a\xa4\x8c\x1e\xcc\x8b\xc6\x58\x5a\xb9\xb0\x46\x20\x52\x45" + - "\x20\x8e\x7d\xc6\xd0\x9f\x8c\x6d\xeb\xc6\x74\x4f\x32\x14\xd8\x38\x06\x31\x0b\x32\x1a\xc9\x51\x20\x38\x63\xda\xaa" + - "\x79\x63\x64\x18\x73\xa7\x12\xe9\xed\xb4\xd4\x67\xa8\xf0\x43\x9b\x64\x63\x76\x51\x75\x07\x19\xfa\xe8\x7a\xca\x6b" + - "\x03\x82\x9a\x9d\x35\xe6\x42\x41\x80\xb7\x95\xee\xc8\x29\x01\x70\xbd\x4c\xae\x9d\x5e\x0a\x81\xa1\x0c\x0c\xfd\x14" + - "\x11\x3b\xb8\xfc\xe6\x6b\x48\x74\xbd\xe6\x18\xf5\xf8\xf6\x86\xac\xdf\x3d\x87\x3d\x0a\xe4\x71\x7b\x08\x23\xac\x01" + - "\x30\x2c\x2c\x1d\xa4\x43\xe8\x24\xe6\x0c\xb3\xd6\xdd\x19\xc1\xa3\x43\xd2\x4a\xb9\x29\x85\x1f\x99\x78\xdc\x53\x57" + - "\xaf\xe7\x74\xdf\x5e\x8c\xb7\x7c\x12\x65\x11\xc1\x72\x95\x06\x80\x03\xdc\xc5\x03\xf4\x41\x30\x24\x2c\x3f\x6c\x90" + - "\x5b\x31\xb2\x82\x20\x27\xeb\x39\x78\xaf\xc2\x0b\x06\x0f\x1f\xe0\x3e\xd0\xe5\x70\x0a\x51\xbd\x4e\x0c\x83\x18\x7b" + - "\x74\x08\x69\xf4\x29\x86\x9c\x50\x40\x38\xe6\x96\xc8\x11\x5b\xb2\xf0\x48\xe9\x23\x95\x23\xb3\x67\x31\x9d\x1c\x32" + - "\xb3\xe4\x23\x65\x56\x18\xb8\x63\xd3\xc6\x30\x17\x31\x54\x5d\x54\xb3\x72\x9d\x1b\x1a\x9f\x70\x91\x41\xb8\xe1\x76" + - "\x59\xf6\x38\x55\x59\xf3\xdd\xfb\x37\xdf\x47\x1c\x3f\x85\xd6\x70\xaf\x64\xe3\x42\x2e\xbc\xcf\x7a\x0e\x91\x50\xbc" + - "\x17\x2d\x8f\xed\xaa\x24\x15\x78\xf9\x90\xbe\xe3\x49\x84\x6b\xfe\xa4\xae\x1d\x0d\xf1\xdf\xca\xb6\x0f\xb8\x28\x2c" + - "\xae\xff\x2c\x96\x3c\xc3\x63\x81\x2f\xcf\x73\xf9\xd4\x33\x74\x30\xf0\x5c\x1d\xa8\x06\x13\xb2\xbc\xd7\xa7\x84\xbc" + - "\x88\xac\xcf\x28\x48\xfe\x60\xd7\x93\xfd\x78\xf8\x50\x1d\x1d\x07\x37\x2a\x4c\xe8\xd2\xea\x53\x1e\x17\xd5\x1d\x8f" + - "\xfe\x88\xfb\x33\xc6\xd5\x27\xc7\x7c\x2e\x7d\xb4\xef\x88\xce\x71\xf0\x78\xf2\x1d\xa4\x95\x02\xef\x9a\x57\xb4\x93" + - "\x06\x0a\x53\xaf\xab\x63\xb1\x4c\xdc\xdb\xa1\xf0\x21\xb5\xa1\xcb\xf4\x67\xe2\x8f\xce\xc6\x53\xff\x71\x24\xd8\x45" + - "\x49\xae\xd8\x43\xc0\x34\xa7\x66\x00\xb9\xec\xb1\x8f\xa9\x87\x34\xfb\xf0\x42\xc2\x1c\xb3\x12\xf9\x3e\x81\x62\x96" + - "\xb9\x02\xc9\x93\x53\x57\xb8\xd5\xf8\x8d\xb4\x87\xc1\x4d\xc7\x3d\x40\xa9\xe0\xd1\x23\xc8\x7a\xfa\xbd\x2b\xa1\x09" + - "\x92\x15\xec\x35\x2b\xc0\x7b\x87\xac\xa6\xf1\x77\xdd\x58\x31\xf4\x65\xea\x04\xb9\xa5\x89\x2d\xee\x27\xdc\x35\x76" + - "\x2b\x5e\x47\x78\xe6\x64\xcb\xf2\x8a\xdd\x69\x42\x90\x99\x98\x34\x0a\x23\x30\xb3\xb6\x6e\x38\x1d\xb6\xc7\x05\x80" + - "\xcd\x85\x31\x06\x50\x05\xdc\xdd\xf3\x39\x26\xcf\x08\xbc\xbb\xca\xe4\x5a\xba\x02\x7f\x13\xb0\x86\x5c\x7b\x8a\x84" + - "\xea\xaa\xc0\x44\xa8\xf0\x09\xcb\x65\x94\x8d\x23\xbc\xdc\x1b\xe1\xfb\xd4\xcb\x0e\xf0\xed\xc2\x3d\xd0\x71\x98\x0b" + - "\x94\x9d\x5c\xc4\x86\x11\x57\xfe\x8b\x49\xfc\xf1\x3e\xb7\xd1\xe5\x25\x59\x6e\x75\x40\x75\x40\x0f\xa9\xba\x4e\x38" + - "\x6c\x9c\x19\x10\x0e\x02\x8b\x12\x01\xd5\x33\x4a\x69\x89\x15\x05\x28\x4f\xae\xb9\xc7\x09\x97\xb5\x51\x3f\xbe\x7d" + - "\xe7\xd5\x51\x32\x81\x31\x5c\x7f\x32\xe8\x08\xf3\xd2\x8e\x90\x2d\x88\x51\xa2\xf1\xc8\x99\x72\xce\x87\x4c\x00\xf0" + - "\xdc\x1a\xe3\xc7\x97\x71\x31\x57\x99\xeb\x50\xe6\xb3\x75\x38\x49\x4a\x84\x5c\x42\xbc\x3a\x68\xce\x38\x32\x52\x82" + - "\x8c\x78\x81\x31\x0d\x0b\xa4\xc0\x33\x91\xf0\x0b\xaf\x34\x9c\x17\xbc\x2a\x01\x9f\x59\x38\x10\x44\x56\x8a\x28\x0c" + - "\x0b\x38\xa9\x28\x51\xf7\xda\x52\x8a\x71\xd2\x6e\x45\x8a\x7b\x09\x94\x21\x18\x47\x52\x91\x95\xf3\xb1\xeb\xd6\xc0" + - "\x1f\x96\x00\x5c\x48\x4e\x9f\xe1\x8d\x63\x50\xc4\xdd\x5a\xd6\x33\xb6\x17\x60\x92\x7c\xbf\x4c\xe0\x97\x98\xaf\x97" + - "\xcb\x2b\x95\x17\xe7\xbe\xb6\x97\x97\xf1\xfd\xe8\xc8\xc8\x79\x5d\xe4\xea\xf5\x4b\xf5\xf9\x8f\xa6\x59\x16\x90\xd9" + - "\x4a\xbd\x30\x55\x61\xf2\xcf\x29\x93\xa2\x94\x08\x06\xd9\x5f\xf3\xe2\xfc\x6f\x59\x08\x94\x4a\x2f\xd2\xce\xc4\x0d" + - "\xc7\xf3\xc2\x15\xf4\xa3\x10\x50\x89\x11\x52\x22\x63\x43\x43\xa6\x27\xf4\x7d\xc4\x52\x71\x85\x34\x75\x37\x01\x8a" + - "\x5b\x68\xa9\x1e\x3e\x14\xa4\x2f\x0a\xb4\x0e\x32\x9c\x9b\x72\xf4\x45\x0d\xc1\xb3\x7e\x8d\x00\x11\x99\x81\x62\x42" + - "\xb3\x23\x0f\x4a\x14\x07\xdb\xdf\x74\xaf\x09\xf2\x0c\x94\x91\x1c\x7d\xa1\x1f\xba\x2a\x96\x1a\x9d\x5b\x6e\x0b\x1b" + - "\x61\x05\x79\x63\x56\x03\xa6\x72\xc5\x12\xfc\x42\x6e\x89\xf5\xc4\x30\x38\x27\xbe\x56\x63\x0e\x6f\xbb\x19\xd2\xa9" + - "\xec\x09\x33\xc9\xeb\xd9\x4b\x8c\x9c\x23\x3f\x23\xaf\x49\xe4\x3f\xe8\xba\x8e\xae\xa4\xbf\x9b\xd6\x11\x4a\xf2\x3b" + - "\x02\x88\x09\xed\x7d\x28\xd3\x7c\xdb\xa7\xa6\xfd\x05\x0a\xde\x32\xca\xc2\x26\x45\x0e\xf1\x0f\xf6\x8c\xe3\x6c\x34" + - "\x6e\x64\xdf\xf8\x58\x1d\x62\x1a\xff\xbd\x30\x17\x49\x8e\x49\x8c\xe2\x21\x57\x33\x6b\xda\xb7\xf0\x7b\x9a\x4c\xb8" + - "\x40\x58\x2b\xa4\x82\x7b\xb6\x6e\x7e\xac\x6d\x81\xee\xef\xb3\x75\xf3\xbd\x99\xb7\xf0\xc7\xf3\x77\xef\xde\xd7\x2b" + - "\xf8\x93\xff\xc5\x9a\xf9\x2d\x95\xd4\xe5\x0c\xb2\x4a\xf9\x5a\x60\xff\xad\xe8\x57\xb8\xb6\x66\xd6\x72\x4f\x32\x7e" + - "\x9b\x71\xbc\xdd\x6c\xdd\xd0\xd2\x30\xab\x82\x73\x43\x95\x35\xf5\xca\xe7\x3a\xd9\x0e\x18\x8e\xbe\x11\x08\x82\x1c" + - "\xa9\xa2\xda\x45\x3c\xdf\x7a\x35\x29\x0d\x04\x86\xa3\x93\x06\xb8\x62\xd4\x98\xd4\xa3\x98\x41\xdd\x5e\xdb\x12\x7a" + - "\x8a\x7c\x81\x2b\x11\x8c\xea\x30\xf7\xb6\xbd\x2a\xcd\x58\x0c\x29\x6b\x4c\x09\x30\x19\x99\xd4\x6f\xf8\x19\xc2\x14" + - "\xd4\x2f\x43\x88\x15\x29\x91\xfd\xac\xf6\xcf\x4a\x5b\xaf\x58\xc9\x10\x66\xb8\xbf\xa8\x1b\x9d\x2f\x9b\xae\x00\xc0" + - "\x78\xc4\xc3\xd2\x27\xb6\x2e\xd7\xad\xc9\x00\x12\x3c\x7a\x35\x2f\x2e\x23\x9f\xd9\x41\x58\x7c\x4c\x98\xca\x1d\x91" + - "\xea\xc6\x75\x5b\x67\x43\xf5\x37\xb5\xbb\x1f\x56\xe4\x07\x4a\xe9\x7e\x62\x14\xdc\x69\x6d\x1d\x36\x47\x68\xb3\x98" + - "\x2b\x53\x38\x6a\xe8\x56\x49\xd5\x8d\x82\x85\x2a\xac\xf2\xf9\xac\x43\x51\xcb\x45\xb9\xfb\xa0\x2f\x73\xfd\xf5\xab" + - "\xd7\x1d\x3c\xaf\x9c\xd8\xd8\x62\x3d\xb8\x72\x56\xeb\xe3\xee\xc6\x02\x5c\x7c\xdc\xd6\x2b\xff\x96\xd6\x40\xbe\x76" + - "\x3d\x66\xfa\x2c\x7d\x1b\x7c\x5d\x70\x4d\xbc\x2a\x6b\xdd\xca\xc9\x04\x15\xfb\x5e\x5a\x71\xb7\x2c\x4e\x76\x28\x7c" + - "\x73\x7b\xfc\x76\x70\x01\xe4\x91\x77\x52\xaa\x11\xfa\x25\xee\x9d\x42\x1c\x65\xd5\x0d\xca\xf6\xee\x72\xf5\x4a\xdd" + - "\x4f\x11\xec\xdd\x39\x84\x37\x07\x49\xc9\xdd\x50\x27\xfc\x1e\xe2\xd6\x79\x4f\x13\x79\xd3\xa9\x1e\x56\xbd\xbf\xfe" + - "\x12\x27\x26\x29\x2b\x5b\x28\x71\x86\x76\x98\x5e\x75\x06\x91\x81\xee\x26\x13\x3e\x75\xe9\xe4\x8c\xa1\x44\x34\x31" + - "\x48\x65\x86\x1b\x56\x16\x76\x0f\x1c\xc1\x50\x2e\x98\x6a\x37\x87\x1f\xd4\x1d\x6a\x9c\xf4\x08\x3a\xec\x59\xa6\x34" + - "\x90\x98\xae\x0e\xbf\xa4\x91\x75\x96\xbc\xba\x41\xbb\x30\x0d\x7f\xdf\x12\x5a\xbd\x15\xdd\x19\x63\x7f\x5b\xb0\x90" + - "\x23\xef\x08\xb6\x7b\x45\x7b\x44\xdc\xa3\x23\x77\x27\x8e\x3c\x95\x24\x29\x07\x54\x3a\xf8\xf4\xa4\xbe\x74\x44\xdb" + - "\x1d\xf4\xa9\x93\x43\xdc\xb2\x4d\xd5\x9e\x22\x93\x5c\x5e\xcf\x28\x88\x3d\x04\xa4\xca\x80\x7d\x89\x5b\x70\xdf\x15" + - "\x8e\xe7\x44\xf6\x2a\xdc\xec\x79\x3d\xeb\xbd\xcd\x11\xd8\xdc\xeb\xf8\x3c\xba\xb7\x56\x79\x61\x67\x75\x55\xa1\x6d" + - "\x83\x13\xcc\x85\x86\x99\xf8\xa2\x32\xca\x0e\xc2\xe8\xe9\xf6\x4e\x56\xea\xa4\xbe\x4c\x74\xde\x28\x61\xe4\xe0\xd5" + - "\x07\x72\xc6\xe9\xb7\xcf\x7f\x1a\xa9\x8f\x6b\x0b\xe0\xe2\x6a\x6f\xb4\xa7\x1a\x8d\x24\x71\xc1\x2e\x1f\xf4\xed\xb7" + - "\xa5\x9e\x9d\x7d\x6b\x9a\xe6\x4a\x3d\x19\xa9\xe2\xed\x3b\xf5\x85\x1a\xb0\x4e\x51\x15\x3f\x2e\xea\x0a\xb3\x8f\x48" + - "\x21\x17\xa6\xf2\xd4\xb4\xdf\xd6\x6b\x80\x2f\x7e\x5e\x16\xa6\x6a\x7f\x32\xb3\x16\x64\x5f\xdb\x36\x1d\x03\x3f\xad" + - "\xd5\xe6\x2f\x85\x5b\xf4\xd6\x05\x24\xa4\x10\xac\x0e\x2c\x4e\xd7\x32\x0e\xeb\x7e\x52\x5f\x02\x45\xd8\x71\xbb\x65" + - "\xec\xa4\xf9\xff\x20\xda\xb3\xcb\x53\x39\x9e\x41\x33\x8e\xcb\x80\xef\x70\x9f\xb8\x0f\xe1\xa0\x87\x2f\x7f\xdd\xf0" + - "\xa5\xa3\x01\xdb\xde\x2e\x8b\x92\x16\x13\xfa\xae\x29\x94\x82\x39\x63\xf0\x89\xde\x6d\x05\x26\x5d\x68\xf2\x47\x88" + - "\x46\x1f\xd1\xaf\xdb\x36\x3d\xc6\xad\x7b\x3e\xa0\x67\xf7\x87\xfd\xf8\xca\x5d\x65\x41\x9e\x71\xdc\x0a\x31\x73\xc0" + - "\x66\x12\xcb\x39\x48\xab\x74\x35\x86\x0a\x6f\x46\xea\xc4\xcc\x34\x08\x67\x98\xc1\xa4\xb5\xe8\xfc\x40\x75\xe1\xe7" + - "\xe9\x15\xb2\x81\x1d\x4b\x78\x02\xaf\xa4\x4f\xe4\xfd\xfe\xdd\x25\xa1\xfd\x31\xea\xc0\x09\x2f\x6b\x77\xb0\xe4\xa5" + - "\xee\x6f\xf0\x2d\xcf\xba\xde\xb1\xf1\x3a\x04\x99\xec\x82\x8f\x1a\xa3\xcb\x47\xd1\x1a\x89\x7a\xf1\x01\xc7\x24\xc9" + - "\x67\x83\x61\x02\x4f\xc9\xb0\xe6\x58\xc8\xc6\x9d\x13\x9f\x33\xdb\xb0\x01\x7e\x40\xb6\x81\x7b\x82\xc4\x71\xa9\x12" + - "\x4f\x96\x53\x7e\x93\xb4\x92\x24\x12\x88\x46\x75\x02\x59\x6a\x6c\x67\xcf\xe1\x61\x8b\x99\xc6\xbe\x6e\xe1\xf7\xef" + - "\xeb\x15\xe0\x02\x64\xa3\x80\x86\x92\x56\x88\x87\xf0\x53\x6b\x74\x67\xb1\xa7\x4a\x01\xbe\xbe\x3e\x41\xcc\x3e\x6c" + - "\x84\xa7\x1c\x81\xbd\xf1\x28\xa8\xa5\x6e\x4e\x8b\xca\xf6\x53\x94\x3a\x8c\x73\x57\x75\x86\xbe\xdb\xb7\xc1\xb1\xbe" + - "\xf7\x00\x51\x84\x9d\x92\x94\xa6\x16\xe3\x4c\x6a\xa4\x67\x1b\xab\x74\xa3\xf5\x75\xa6\x24\x48\x4e\xd2\xbf\x10\x27" + - "\x98\x52\x9f\xbe\x8d\x4c\x6a\xef\x97\x28\xfd\xc2\x67\x8c\x22\x13\x15\x03\x5f\x84\xdb\xf7\xab\xd8\xaa\xc1\xc2\xd3" + - "\x59\xec\x3e\x6a\x11\x64\xa6\x60\xf6\x89\xfb\xdd\xb3\xc7\xf1\x47\x6a\xf9\x41\x66\x67\xe3\x00\x85\x2a\x22\xb8\x93" + - "\x90\x43\xa9\x9d\x35\x75\x59\x02\xf3\xac\xd1\xbb\xac\x2e\x4b\xc7\x77\xa3\x0a\x2d\x05\xb1\xfa\x43\x7c\x30\x55\x99" + - "\xb8\x5e\xb2\x51\xf8\x98\xde\xd0\x95\x95\xa9\x1b\xa9\x90\x20\xa8\x2e\x60\x08\x45\x04\x0e\xf2\xc7\xf1\x77\x6e\x9e" + - "\x5c\x31\x5c\x24\x81\x69\xd5\x8b\x7c\x26\x42\xf1\x68\x4a\x34\xb8\x2b\x33\x97\x96\x4a\xf6\xdc\x11\x19\xc2\x07\xe8" + - "\x4f\xe9\x45\xed\x11\x38\x02\x11\x3b\xdf\x14\xda\xed\xdb\x76\xb5\x1c\xba\xff\x1e\xe1\x48\x8f\x49\x53\x11\x3a\x1f" + - "\xaf\x22\x47\x72\x09\xdc\xa4\xa2\x1a\xf3\x94\xb2\x63\xda\x7d\x37\x4d\x10\x28\xaf\xa6\xac\x8f\x11\x8b\xc0\xbe\x6a" + - "\x1b\x4a\xd1\xc4\x6e\x7b\xc7\x30\xec\x41\xe4\x69\x1e\xf7\x11\x53\x54\x4a\x88\x87\x68\xde\x46\x1d\x16\x7c\x24\x3c" + - "\x7b\x13\x24\x35\x4a\xaf\xe8\xd5\x0c\x33\x6b\xbf\xab\xeb\x33\x4b\xd1\x1e\x41\x0e\xe0\xa3\x02\x9f\xfd\x62\x4e\xce" + - "\x8a\x56\x9d\xac\x4f\xa7\x6a\xd1\xb6\x2b\x3b\x9d\x4c\x4e\xd6\xa7\x76\x7c\x01\x2f\xc6\x75\x73\x3a\xb1\x8b\xfa\xe2" + - "\xb7\x93\xf5\xe9\x78\x76\x5a\x1c\x16\xf9\xc1\xe3\x6f\xf6\xbe\xfe\x12\xbe\x3e\x35\xed\x73\xba\x4c\xdf\xb5\x57\xa5" + - "\xf1\x21\x7e\x2b\xd3\xcc\xc0\xec\xe8\xee\x5b\xaf\x37\x45\x48\x50\xea\xe0\xe4\xa4\x6e\xdb\x7a\x39\x01\xfd\x29\xd4" + - "\x26\xf9\x4d\xaf\xe2\x9e\x59\xab\x96\x75\xbe\x2e\x0d\xa5\xbe\xe0\xbc\x17\x74\x13\xe2\x3b\x88\x99\x01\xe6\x75\xe6" + - "\x93\x43\x14\xad\xc2\x0c\x53\x29\x4e\x1c\xa1\xc2\xa1\xba\x22\x45\x79\x13\xe7\x26\x90\x1b\x98\x48\xbf\xd3\x0e\x94" + - "\xce\xf3\xbf\x9b\xd6\x3d\x7d\x3d\x0f\x71\x68\xab\xe2\xd2\x94\x91\xc6\x29\x3d\x13\x9e\xf3\x88\xbc\x41\x3a\x4f\xb7" + - "\xfc\x93\x03\x12\xbf\xa5\x38\x28\x51\x25\x8b\x39\x15\x48\x67\x5e\x9f\x9a\x91\x9a\xb3\x6e\xb6\xad\x69\xba\xa2\x33" + - "\xd4\x54\xeb\x65\x55\x57\xab\x4b\x4e\x7e\x13\xfa\x11\x87\xe6\xf2\x19\x15\x8a\x0a\x3f\x19\x3b\x2a\x5b\x5d\x66\x3e" + - "\x9e\x96\xeb\x90\x7b\x7a\xfb\x1e\x9c\x06\x6f\xda\x0e\xe4\xb1\xa8\x2a\xd3\x20\xd4\xcf\x08\x7f\xc0\x2d\x3d\x52\x0b" + - "\x7a\x76\x81\x3f\xeb\x75\xcb\xe5\x10\x78\xc8\xfd\x46\xec\xa0\x4d\x84\x14\x4b\x4f\x55\x86\x55\x65\x23\x05\xe5\xa7" + - "\x2a\x83\x3a\x13\xaa\x49\xe0\x07\x1d\x84\x3f\xae\x6d\xa5\x73\xc7\x01\x4e\x55\x06\xbd\x64\xbc\x93\x11\x63\x6d\x91" + - "\xd5\x43\x65\xd9\x54\x65\xd0\x3b\x0f\x89\x12\xb5\x43\x0a\x53\x48\x33\x88\xcf\x29\xe0\x9b\x23\x72\xf1\x06\x77\x0c" + - "\x29\x70\xcb\x6e\x1f\x8b\xc1\x8f\xc4\xc8\xb7\x83\x65\xc7\xd1\x6c\x5f\x57\x4c\xb5\xb1\xbe\x14\x6c\x04\x74\xac\x0b" + - "\x5d\x54\x84\x32\xd4\x91\xf4\xe1\x6a\x96\x9d\x15\xc6\x76\xea\xe2\xfd\xd8\x66\x4e\xb4\x11\xb0\x8f\x9d\xc8\x9b\x7c" + - "\xcb\x3d\x01\xb2\x0e\x9c\xc9\xf5\xb5\x07\x21\xa1\x27\x87\xcc\xc0\x80\x1f\x17\x72\x6e\x21\x31\xe4\xa7\xdd\x3a\xb8" + - "\x0c\x49\xc2\x62\xd2\x0f\x78\xc7\x96\x58\x6b\x95\x28\xbe\xa3\x08\x89\x67\x90\x4c\xee\xc9\xe4\xeb\xc9\xe3\xbd\xfd" + - "\xc7\xe8\x32\x01\x66\x2f\x88\x52\x52\x45\xc5\x3c\x3a\x1a\x4d\xd0\x2d\xf4\x4d\x7d\xe2\xb8\x9d\x77\x7a\xae\x9b\x62" + - "\xa4\x4e\xd6\x6d\xc8\x75\x47\xc7\x16\x3c\x76\xb4\xba\x58\xd4\xa5\x51\x65\xdd\x3a\xf2\x35\xd3\x95\xca\xeb\xb1\x7a" + - "\x67\x8c\x5a\xa1\x21\x06\x03\x44\x74\x8b\x0d\xff\xfc\xd3\xf7\x50\x7f\x5e\xd8\xd9\x1a\xcc\x45\xd3\x50\x25\x13\xef" + - "\xd3\xa2\x5d\xac\x4f\xc6\xb3\x7a\x39\x41\x30\x11\xfe\xc7\x55\x39\xf9\xcb\x57\x5f\xd2\x27\x12\x8b\x6b\x93\xc9\xe1" + - "\x48\x65\x28\xcb\xfa\xcd\x7c\xdc\x13\xff\xe6\x44\x15\xfe\x10\x0f\xac\x82\xd4\x3c\x48\xd7\x83\x1f\x76\x8f\x1d\x21" + - "\xcc\x75\xd0\xbb\x6c\xd0\x94\x90\x19\x0d\x55\xaf\x78\x6f\x1f\xc1\x39\x98\xe0\xd1\x38\x06\x78\x11\x20\x72\xdd\xe7" + - "\x38\x8a\xf8\xf9\x28\xd4\x7a\xb1\x28\x66\x0b\x88\xb4\x2c\xac\x3a\x05\xd2\xc4\xa9\x77\x79\x9e\xde\xe8\x76\x31\x5e" + - "\xea\x4b\x1f\x1d\x06\x5d\x3d\xa9\xf3\xab\x23\x70\xe1\xa9\xcb\x32\x4c\xd2\xc8\xcd\x47\xdf\xf3\xbe\x8f\x6b\xe2\xc6" + - "\xd2\x8f\x3b\xcf\xf9\x63\x7c\x9d\x2e\x0c\xbd\xed\x04\x28\x06\x80\x86\x75\x1a\x47\x71\x18\x66\xc0\xad\x61\xb2\x74" + - "\x7c\xcf\x92\xf8\x33\xe2\xed\x08\xe1\x69\xeb\x16\x14\x55\xf3\xba\x99\x81\xbf\xab\xd7\x17\xc7\x1a\x3d\x21\x9b\xe0" + - "\xc1\x44\xf2\x90\x64\x6c\x7b\x77\x67\xe3\x71\xad\x60\xf9\xe8\x39\xf0\xbe\x7a\x76\xb2\xa7\x97\x81\xd2\x1d\x32\x15" + - "\x9a\x46\x60\xc2\xfc\x5e\x72\x57\x24\x34\xa5\x17\xd7\xfb\x85\x51\xd5\x7a\x79\x62\xdc\x66\x0b\x5a\x12\xd2\xc4\x05" + - "\x8f\x27\xc8\xc1\x1a\xf4\x28\xe8\x70\x1c\x78\x30\x5b\xfc\x6e\xba\x2e\x8f\x52\xfa\x4a\x0c\x86\xe1\x53\x5d\xe5\xef" + - "\x24\x46\x24\x3c\xcb\xf3\x6f\xd9\x73\xcf\x77\xf5\x27\x73\x5a\xd8\xd6\x34\x88\x8e\xe6\x76\x49\xae\x9e\xbd\x79\xe1" + - "\x39\x26\x0b\xa9\x1a\x08\x6e\xc9\x11\x9f\x13\xc8\x74\x3e\xd3\xad\xa9\x82\xa3\x32\x80\xf3\x40\x7d\xf3\xa2\x84\xec" + - "\xf1\xba\x85\x60\xb5\xb5\x75\x1c\x99\x9b\xc2\x91\xdf\x0f\xe7\x85\xc6\xac\xb4\x2b\x74\xb9\xa4\xba\x8a\xba\xf2\x81" + - "\x35\x0b\x8d\xcc\x9e\x9b\xff\xc6\xb6\xba\xca\x9d\x94\x5d\x57\x57\xcb\x7a\x6d\x45\xff\xec\x58\x3d\x13\x9d\x2e\xac" + - "\xb2\x7a\x0e\xd4\xb0\xca\xd5\xb2\xb6\xad\x6a\xea\x93\xb5\xc5\xca\x20\x83\x78\xad\x1a\x1a\xf1\x58\x41\xee\x5a\x30" + - "\xbb\x11\xa2\x52\x61\x31\x67\x22\x6b\xa5\x42\x43\xd0\x88\xc5\xc0\xec\xc9\x44\xe5\xa6\x29\xce\x1d\xab\xda\x40\xfc" + - "\x3c\xbf\x1f\x41\xbb\x34\x59\x00\x17\xd7\x2c\x01\x3d\x22\x37\x65\x71\x6e\x1a\x4a\xc7\xa8\x4a\x6e\xd8\x4f\x19\x66" + - "\xc8\x57\x2f\x6a\x24\xe2\xe4\x8e\xea\x88\x0c\x7b\x72\x12\x1e\xb8\x4f\xf2\x08\x68\x53\xa2\x83\x17\x1a\x02\x1e\x27" + - "\x13\xb2\x5e\x95\x0a\x72\x76\xce\xcb\x62\x06\x41\xe1\x8b\x02\x90\x97\x0a\xab\xce\x4d\x03\x5e\x04\xf5\x9c\xba\x3a" + - "\x02\xe7\x4a\x77\x61\x5d\xd4\xcd\xd9\x98\x76\xc6\x0f\x75\x4b\x2a\x33\x77\x9d\x2c\xf5\x65\xb1\x5c\x2f\x95\xe3\x61" + - "\xf5\x49\x51\x16\xed\xd5\x48\x95\xc5\x49\xa3\x9b\x82\x17\x5c\x37\x06\x16\x98\x26\x00\x41\x3b\x68\xbe\x66\xa5\x06" + - "\x07\x55\xb3\xb4\xa6\x3c\x37\x16\x83\x04\x79\x45\x69\x35\x71\xfe\xd0\xe5\x81\x22\x49\x94\xe6\x91\xc3\x88\x51\x8a" + - "\x79\xf3\x02\x5c\xb4\x90\x14\x43\x3e\xf8\xaa\x1d\x8b\x79\xd7\x51\xa0\xd9\x18\x22\xd6\x97\x75\xe3\x58\xc9\xb9\x5b" + - "\x12\x34\x19\x5b\x83\xf3\xdf\x77\x29\x36\x27\xeb\xe6\xcc\x4c\x1c\x35\x2b\x1a\xf3\xd1\x4e\x2e\x8a\xb3\x62\xf2\xf3" + - "\x2a\x87\x05\xd9\x65\x6f\xdf\x5d\x3f\x03\x0f\x5c\x81\x5d\x37\x22\x37\x7d\x52\xa7\x8d\xdb\x9f\xb4\x93\x74\x94\xc1" + - "\x7b\x0b\x5f\x8c\xf5\x92\x79\x7a\x7c\x30\x50\x19\x6e\xc7\x6c\x04\x4e\x6c\xb7\x42\x3f\x3d\x8d\xc0\x3e\xbc\xc3\x00" + - "\x3a\x08\xbd\xd1\x2b\x70\x3f\xf5\x33\x43\x59\x59\xeb\xb9\xf7\x4a\x75\xec\xc6\x6f\xf4\xda\x3b\x17\xd0\xae\x60\x3f" + - "\x23\x5f\x8d\xdb\x86\x9f\x6d\xac\xe5\xb3\x50\xc1\x67\x92\x1a\x89\x6d\x18\xf9\x70\x1a\xb3\x92\x6e\x6e\xfc\x29\x4c" + - "\x14\xf5\x88\x46\x1c\x5e\xa9\xdf\x3e\x0b\xfe\x1c\xf0\x19\x54\xf3\xf0\x61\xdc\xf5\xcd\x75\xf8\xa1\xfe\x26\xe6\xaf" + - "\xeb\x44\xe8\x29\x2a\x38\xe5\xac\x6a\xeb\x49\xa0\xdb\xa0\x9f\xa9\x02\xb0\x52\xe6\x05\xf8\x79\x80\x89\xbe\x08\x5b" + - "\x73\xf0\xe0\x2f\xfb\x7b\x8f\x1f\xcc\xea\xa5\x23\xea\xd3\xfd\xbd\xd1\x27\xf2\x5d\x4f\x9e\xfc\x65\x08\xb5\xb8\x46" + - "\x9e\x03\x96\xf9\x3f\xde\xc1\xe9\x3b\x69\xea\x0b\x6b\x1a\x65\x96\xeb\x52\xb7\x75\x63\xd5\xe0\xc1\xfe\x17\x4f\xbe" + - "\xfa\x6a\x18\xef\xb5\xaa\xc6\xb4\x04\x30\x01\x3d\xd6\x92\x74\x16\xc4\xcc\x86\x81\x87\x9d\x94\xce\x89\xbb\xe5\xdc" + - "\x66\xfb\xff\x03\x00\x00\xff\xff\x1d\x30\x27\xdd\x1d\xea\x03\x00") + "\xd0\xe2\x43\xb2\x93\x74\x42\x99\xd6\xcf\xb1\x9d\x1e\x9d\x5f\xec\xb8\x23\x67\x32\xf7\x4a\xca\xa4\x48\x14\xc5\xb2" + + "\x41\x80\x41\x81\x92\xd8\xa1\xfa\xb3\xdf\xb5\x1f\xf5\x02\x40\xd9\xee\x4e\xcf\x39\x3d\x6b\x62\x11\x28\xd4\x63\xd7" + + "\xae\x5d\xfb\xbd\x87\x8f\x76\xef\xdf\x13\x8f\xc4\xfb\xbf\xad\x54\xb9\x16\xff\x5b\x5e\xc9\xd3\x69\xa9\x97\x95\xf8" + + "\x41\x4f\x4a\x59\xae\xc5\xd5\xe3\xc1\xe1\xe0\x10\x1b\xcd\xab\x6a\x39\x1a\x0e\xdf\xff\x0e\x6d\x07\xd3\x62\x31\x84" + + "\xc7\xf8\xea\x24\x9f\x66\xab\x54\x19\x71\xaa\xff\xfe\xf7\x4c\x0d\xde\x9b\xf0\x0b\x83\x0f\xdf\x9b\xf8\x9b\x17\xc5" + + "\x72\x5d\xea\xcb\x79\x25\x1e\x1f\x1c\x7c\xd5\x13\x8f\x0f\x0e\xbf\xb4\x13\xf9\xbe\x58\xe5\xa9\xac\x74\x91\xf7\xa0" + + "\xef\x81\x90\x79\x2a\x8a\x6a\xae\x4a\x31\x2d\xf2\xaa\xd4\x93\x55\x55\x94\x34\xc8\x4f\x2a\x53\xd2\xa8\x54\xac\xf2" + + "\x54\x95\xa2\x9a\x2b\xf1\xfa\xe4\x9d\xc8\xf4\x54\xe5\x46\xb5\xcc\xbc\x28\x2f\x87\xc1\x5b\x6c\xf1\x52\x56\x6a\x84" + + "\x53\xe8\x1f\x7c\xd5\x3f\x38\x7c\x77\xf8\x97\xd1\xe1\xe1\xff\x0b\xef\x86\xf7\xef\xdd\xbf\x97\xcc\x56\xf9\x14\xe6" + + "\x93\x88\xcb\xac\x98\xc8\xac\x27\x66\x72\x5a\x15\xe5\x5a\x74\xc5\x1f\xd0\x62\x47\xcf\x44\x22\xaa\xf5\x52\x15\x33" + + "\xb1\x28\xd2\x55\xa6\xc4\x78\x3c\x16\x9d\x62\xf2\x5e\x4d\xab\x8e\xd8\xdb\x8b\xdf\x0e\xd4\xcd\xb2\x28\x2b\x13\xb7" + + "\xc2\xde\x76\x76\x86\x43\xf1\x7d\x51\x8a\x17\xc5\x62\x51\xe4\xff\xfb\x14\xd7\x6f\x7f\xf4\x33\xfd\x41\x09\x95\x5f" + + "\xe9\xb2\xc8\x17\x2a\xaf\x8c\xb8\x9e\xab\x52\x09\x29\x96\x65\xb1\x54\xa5\xb8\xd6\x79\x5a\x5c\x0b\x6d\xc4\xb2\x54" + + "\x46\xe5\x55\x8f\xfb\x54\x37\x6a\xba\xaa\x14\x02\xc9\xce\x1f\xba\xbe\x54\x15\x83\x3e\x18\x3c\x1a\xa1\x9a\xcb\x4a" + + "\xa4\x85\xc8\x8b\x4a\xe8\x1c\x86\xcb\xab\x6c\x2d\x96\x85\x31\xca\x08\x69\x87\xbc\xd6\xd5\x5c\x48\x91\x16\xd3\x15" + + "\x7c\xc7\xbd\x25\x66\x35\x9d\x0b\x69\xc4\x9b\x22\x05\xe4\xe8\xf6\x04\x2c\xde\xc0\x94\x69\xd8\xfe\x42\x7e\xd0\xf9" + + "\xa5\x9f\x94\xa9\x41\x89\x7b\x7a\x37\xd7\x46\xc8\xe9\x54\xe5\xd5\x4a\x56\xca\xe0\x4a\x72\xa5\x52\x31\x2b\x68\xef" + + "\xa7\xa5\x42\xc4\x11\xc5\x4c\x48\x51\x2a\x99\xf1\xdc\x2c\x08\x06\x97\x03\x71\x25\x4b\x8b\x6a\x63\x51\xaa\xdf\x57" + + "\xba\x54\x49\x87\xf0\xa3\xd3\x4d\xe8\x83\xee\x11\x7f\x72\xaa\x94\xa8\xf4\xf4\x83\xaa\xc4\x83\xc3\x2f\xbf\xfa\xf2" + + "\x5b\x1c\x6c\x51\x94\x4a\xe8\x7c\x56\x40\xab\xfa\x96\x32\x96\x0c\x2c\x20\xc4\x31\xb4\xda\xe1\xe5\x79\x24\xaa\xca" + + "\x95\x12\x5d\x31\xa2\xb7\x0e\xc7\xae\x2d\x1e\xec\x10\x5a\xed\x5e\xfb\x9e\xdc\x9b\x9d\x6a\x5e\x16\xd7\x22\x57\xd7" + + "\xe2\x55\x59\x16\x65\x22\x3a\xbc\x26\x5e\xd1\xf6\x7d\xe9\x08\x5a\xdc\xce\xce\x2d\xfd\x53\xaa\x6a\x55\xe6\xc2\xcd" + + "\xef\xda\x36\xb8\x85\x7f\x6e\x85\xca\x8c\xa2\x71\x6b\x4b\xa0\x76\xb7\x70\x02\x86\x43\xf1\x56\x1a\xd8\x12\x6d\x84" + + "\x9e\x05\x58\x08\x48\x93\xaa\x99\xce\x55\x2a\xd6\xaa\xba\x7f\xef\x36\xe1\xa3\xc0\x6d\x76\xe1\x08\xc0\xf9\xc5\x36" + + "\x1d\x71\x6c\x5f\x8c\xb0\xb7\x9e\x08\x40\x83\x2f\x7a\x22\x2f\xfe\xca\x13\xa0\xf3\x37\x1c\x8a\x17\x32\x7f\x88\x48" + + "\x8a\x33\x98\xa8\xa9\x5c\x19\x25\x8c\xba\x52\xa5\xcc\x84\x5c\x2e\x8d\xd0\x48\xa8\x00\xd3\x9e\x9f\xbe\x1d\xbc\x79" + + "\xf5\x4e\x54\xa5\x9c\x2a\xfc\x1c\xb0\xc7\x54\x72\xfa\x41\x5c\x69\x29\x64\x79\x89\xa0\x32\x83\xa9\xcc\x32\x55\xd2" + + "\x3f\x0a\x8f\xcb\xf7\xba\x54\xb3\xe2\x46\xa4\x5a\xc1\x4a\xf1\xeb\x75\xb1\x12\x55\xb9\x16\x55\x41\x5d\x0a\xd8\x9d" + + "\xd5\xe5\x5c\x74\x70\x12\x55\xa9\xe1\x78\x43\x27\x62\x3a\x97\x3a\x37\x03\x91\x3c\x38\x7c\xf2\xe4\xc9\x57\x5d\xfc" + + "\xfe\x74\xb5\x04\xdc\x19\xb9\xce\x0f\xbf\xd9\x87\x17\xb0\x36\x40\x57\x59\x96\x62\x2c\xce\x2e\x8e\xec\x03\x03\x34" + + "\x4c\x8c\xe1\xc5\x00\xff\x76\x6f\xa6\x45\x3e\x95\x15\xbf\xa2\x1f\xee\xdd\x72\x65\xe6\xfc\x06\xfe\x74\xcf\x75\x9e" + + "\xaa\x9b\x1f\x67\xfc\x8a\x7f\xf9\x1e\x33\x69\xcc\x63\xd8\x33\x31\x16\x7f\xdc\xba\xe7\x55\x71\x5a\x95\x00\xcd\x71" + + "\xd0\x64\x60\x9f\xba\x66\x73\x69\x7e\xbc\xce\xe3\x46\xf4\xec\x2d\x12\xac\x6a\xed\x57\x45\x60\xf0\xc3\xf0\x8b\xfb" + + "\xf7\xe0\x24\xfe\x6c\x88\x76\x4d\x8b\xb2\x54\xd3\xca\xe1\x33\x90\x84\xa2\x84\x7d\xcd\xd6\x84\xeb\x8c\x3f\x76\x17" + + "\x45\x62\x64\x9e\x4e\x8a\x9b\xee\xfd\x7b\x3b\xee\xab\x31\x37\x73\x87\xab\x87\x94\xfc\x4a\x95\x06\x28\xc8\x58\x74" + + "\xf0\xf6\xeb\xd0\xe3\xe1\x50\xbc\x44\x04\x15\x52\x64\xc5\x54\x66\x62\x5a\x2c\xd7\x40\x67\x1c\xe9\x74\x34\xc5\xe3" + + "\xab\x51\x99\x82\x13\xd3\xc3\x9b\x4b\xdd\x54\x01\x89\x7f\x37\x57\x96\x0c\x11\xfd\x17\x48\xdd\xaa\x95\xcc\xb2\xb5" + + "\x78\xbf\x32\x15\xae\x56\xe7\xba\x82\xaf\x4d\x55\xae\xa0\x2b\xf1\x50\xe5\x73\x99\x4f\x55\xfa\x90\x3b\x7a\x03\x14" + + "\x10\x9b\x69\x3b\x1b\xe8\x0a\x51\x36\x15\x09\xf6\x24\xb3\xac\xb8\x16\x0a\x28\x05\x20\xe9\x84\x30\xf4\x3a\x87\x4f" + + "\x88\xaa\xe3\x1d\x9e\x02\x84\x2c\x3d\x00\xda\x42\xdd\x0d\x66\xf9\x00\x06\x68\x5d\x10\x92\x00\x07\x24\x87\xc9\xcf" + + "\xf3\xb4\x2c\x74\xfa\xf4\x4b\x60\x20\xe0\xcd\x6b\xf9\x41\x09\xb3\x2a\x95\xb8\x56\xa2\x2a\xf5\x42\x7c\xf7\xe3\x6b" + + "\x3c\x51\x6f\xbe\x3b\x7d\x7b\xff\xde\x4e\x89\x0f\xc7\x62\xf8\xeb\xd9\xb9\x39\x5f\x7d\xff\xea\xfb\xef\xcf\x6f\x9e" + + "\x1f\x5c\xec\x6f\x6a\xbf\xbf\x18\x5e\xba\xf1\x5e\xcb\x6a\x3a\x57\x46\xa4\xd2\xcc\x55\x8a\x47\x0d\x6e\x92\xa2\x14" + + "\x53\xb9\x50\x99\xfe\xbb\xce\x2f\xa1\xef\x85\x79\x5b\xaa\x99\xbe\xc1\xfe\xfb\x0b\xd3\x1f\xc2\xb5\x58\xc2\x67\xcf" + + "\xb3\xe5\x5c\xc2\xf3\x7e\x72\x76\x9e\xca\xfe\xdf\x2f\xba\xc3\x4b\xed\x46\xf8\x19\xd8\x8b\xc9\xda\x82\x02\xbb\x7d" + + "\x21\xe1\xfa\x22\x18\x4f\x80\x68\x54\x85\x28\xd5\x32\x93\x53\x95\x00\x08\x67\xbe\x55\x88\x0e\x32\xcb\x7a\x22\x53" + + "\x55\xa5\x4a\x8b\x08\x0c\x6b\x7a\x38\xa8\x8a\x9f\x97\x4b\x55\xc2\x87\x09\x01\x16\x8f\x81\xdb\x05\x31\xb6\xd3\x58" + + "\x96\x45\x55\xd8\x33\x49\x13\x05\x84\x9a\xae\x4a\xb8\x9c\x85\xc5\x62\x87\x9f\x62\xa2\x00\x30\x2b\xa3\x52\x40\x55" + + "\xbc\xec\x46\xb6\x19\xad\x35\x40\xb2\x11\x7f\xe5\xb7\xb5\x92\x65\xc5\x17\x49\x2e\xd4\x62\x59\xad\x1d\x2e\xdc\xbf" + + "\xb7\x63\xff\x1c\x89\x8e\x3f\x2f\x30\x9f\x54\xcd\xe4\x2a\xab\x44\xa6\xf2\xcb\x6a\x4e\xd7\x72\x03\xe9\x0f\xee\xdf" + + "\xdb\xa1\x06\x23\x71\x40\x9f\x57\xc5\xf3\xb2\x94\xeb\x91\x07\x5e\x0c\x2f\xa4\x79\x48\x95\x13\x22\xf8\x35\x34\xfc" + + "\xab\xa2\xd3\xf3\xa6\x9a\x0b\x95\x29\x3c\xf0\x3a\xc7\x47\x0b\xc4\x98\xd4\x3d\x36\xaa\x12\x3f\xfe\x14\x7f\x76\x3d" + + "\x2f\xb2\xf6\x96\x12\xee\xd5\x69\xa6\x64\x0e\xb4\x52\xc2\xb9\xbf\x54\x55\x30\x4f\x91\xaf\x16\xb5\xcd\x85\x27\xbb" + + "\x63\x91\xaf\xb2\x0c\x58\x01\xbc\x5a\x87\x43\xf1\x13\xbd\x75\x27\xbd\xc8\x95\x1b\x6a\x56\x16\x0b\xba\x93\x14\xf2" + + "\x51\x3b\xd4\xef\x53\x71\x20\x8e\x71\xc1\x67\xf8\x7b\x1f\xff\x1e\x30\x74\x2f\xf8\xc6\xa4\x77\x17\xc4\x5a\xd4\x46" + + "\x83\x2b\x08\xfa\xe5\x81\xe0\x52\x6c\x2c\x68\x67\xe7\x63\xe0\x7d\x07\x67\xd9\x7e\x01\xbb\xea\xba\x83\xf3\x8c\xd7" + + "\x8c\xae\x44\x91\xc3\x7d\x68\x2f\x56\xfa\x32\x21\x98\x00\x2e\x12\xf7\x76\xdd\x06\x66\x38\x43\xd0\xcb\x29\x7c\x18" + + "\x02\x17\xda\x18\xc7\x75\x43\x87\xdf\xad\x74\x96\x0a\x19\x50\xab\xb6\x0e\xa1\x31\xdc\x30\xa5\xaa\xfc\x19\x5a\xa8" + + "\xf2\x52\xd1\x02\x07\x01\xf2\x27\xc0\xa1\xd2\x38\x47\x6e\x98\xe7\x69\x4a\x9b\x94\xa5\x16\x73\xe3\xe5\x89\x04\x51" + + "\xa3\x54\x33\x60\x8f\xa7\xca\x52\xd2\xc1\xb2\x54\x57\x3f\xd2\x17\x63\x1c\xeb\xc8\xbe\xb1\x24\x74\xec\xa6\x00\x3f" + + "\xfd\x98\xbc\x65\x0c\xa7\x6c\xdd\x9f\x15\xe5\xa2\xb9\x2e\xc6\xb2\x52\x55\xf1\x26\xbd\x62\x7e\x5f\x7a\x32\x05\x74" + + "\x11\x38\xa2\xf5\xb6\x43\x61\x54\x35\xe0\x8d\xfa\x7f\x8a\x95\x98\xca\x5c\x18\xb8\x5e\xa0\x8d\x63\x8a\x1c\x1d\x70" + + "\xdb\x2f\xcb\x4b\xd3\x13\x93\x55\xc5\xfc\x9f\xa1\x3e\x8a\x3c\x5b\x23\xc9\x11\x3a\xaf\x54\x99\xc3\xcd\x36\x00\xc0" + + "\x28\x39\x9d\x87\xdb\x6a\x27\xd8\xc3\x9e\x6a\xc7\x87\x77\x0b\xbe\x49\x98\x23\xac\xb7\x0f\x16\xbe\x90\xcb\xb6\x9e" + + "\x6b\x7d\x22\xc0\x1d\x86\x25\x0e\x23\xe4\x32\xa9\xf3\x9c\x00\xa9\x9e\xd0\x8e\xf5\xe6\x1e\x6c\xc7\x7c\x4a\xb8\x15" + + "\x61\x0e\xf3\xcf\xb7\xdd\x70\x62\x78\xa6\xb6\x12\xb4\xfa\x84\xe8\x04\xca\xe5\x32\x5b\xdb\x45\x7b\xf8\x77\xa3\x15" + + "\xcf\x74\x69\xaa\xbb\x3b\x56\xbf\x27\xe2\x20\xfa\x28\x93\x9f\xf2\x4d\xff\x30\xfa\x48\xfd\x1e\x82\xd6\x81\x04\x0e" + + "\x56\xa6\x72\x8b\xc7\x44\x8d\x50\xea\xdc\x79\x2f\xc6\x62\x5f\x8b\x7d\x01\xcd\x89\x7a\x41\xcb\x91\x9d\xcd\xd6\xfd" + + "\x10\xcf\xc6\xe2\x00\xc4\xe6\xf7\xe2\x29\x7e\x72\x2c\xce\x88\xb8\xbd\xbf\x40\x42\x77\x76\x11\x4f\x2d\x4f\x3f\x02" + + "\x5b\x7f\x0c\x37\x9b\xe6\x99\x07\xe2\x5c\x23\x72\x20\x06\x5b\xbc\x05\x2c\x46\x74\xe6\xd3\xf1\x9d\x9a\xcb\x2b\x65" + + "\x04\x4a\xe3\x32\x17\x78\x5b\x3d\x34\x62\xa1\xaa\x79\x91\xf6\x90\xa7\xa2\x77\x8e\x28\xe1\x9b\x01\x13\xb6\x11\x12" + + "\x49\x80\x91\x41\x6e\x09\xf9\xf8\xa2\x44\x59\xdd\x2c\x09\x53\xf0\x19\xfe\x7d\xff\x5e\xc4\x07\xa8\x9b\x4a\xe5\xa9" + + "\xa7\x63\xb3\xdc\x3f\xaa\x81\x00\xb6\xa6\x58\xc2\x03\xd3\x13\xb9\x5c\xa8\x9e\x30\xe5\xb4\x87\xcc\x2b\xfd\xf7\xc4" + + "\xe0\xdc\x7b\x62\x9a\x15\xb9\xc2\x5d\xab\x64\x79\xa9\x48\x84\x60\x8c\x3b\x3b\xb8\x00\xa8\xfd\x71\x8b\xef\xb5\x18" + + "\x8b\x43\xfc\x8b\x2f\x9e\xa0\x65\xb8\xfb\xa9\x52\x4b\x98\x92\xcc\x0c\xc9\x27\x00\xb9\xff\x90\x79\x9a\x01\x5c\xf0" + + "\x2d\x32\xd1\x46\x83\x3c\xaf\x8b\xbc\xa6\x48\xb1\xf3\x00\xf9\x70\x52\x14\x70\x47\x39\x1d\x09\xf7\x4d\x4d\x3c\xc9" + + "\x34\x1f\xf4\x12\x89\x15\xb7\xc7\xfb\x08\x7e\x53\xc3\x2d\xab\x13\x5a\xf0\xfa\x10\x27\xf5\xfe\xbe\x93\x6b\x83\x29" + + "\x4f\x81\x9d\xbb\x9e\xab\xdc\x4e\x0c\xf8\x75\xcb\x71\x16\xa5\x30\x05\xec\x31\xfc\x48\x96\x85\x31\x7a\x92\x01\xf7" + + "\xee\xd7\xd9\x6d\x5f\xde\x6e\x4d\x4f\xb4\xcb\xbb\xaa\xcd\xf7\x76\x2f\xa9\x65\xd7\xae\xdd\xad\x80\xe6\xeb\xe6\xc9" + + "\x48\x60\x45\x80\xca\xa8\x6c\x06\x0c\x3e\x92\x61\xe0\x2e\x9c\x40\xa4\x8d\x58\x4a\x43\xbc\x20\x4e\x49\x23\x94\x79" + + "\x3b\xeb\xc3\xb8\x4b\x4b\xf7\xfb\x7e\x40\xb8\x4b\x12\x71\x84\xe7\x9a\x3e\x3c\x12\x7a\x7f\x3f\x90\x70\x7e\x84\x71" + + "\x53\x52\xc2\x54\x73\x91\x17\x79\x1f\x8e\xd9\xd0\xc9\xfa\xe2\x4a\x66\x2b\x85\xea\x1d\x9c\x45\xc2\xa8\xda\xd8\x9c" + + "\xae\xe3\x9f\x2c\x15\xc6\xfb\x0d\x97\x8b\xbb\x0d\x5b\x43\x30\x24\x65\x0a\xce\x0d\xf0\x1d\x76\xc0\xf6\xea\x94\x27" + + "\xa6\x9c\x3a\xdc\x39\xa3\x66\x17\xac\x12\x41\x84\x1c\xdb\x4f\x82\x97\xf4\x7a\x38\x14\x6f\x4b\x75\x05\x30\xcc\xe1" + + "\x22\xed\xab\x1c\x15\x0a\x59\x51\x2c\x03\x95\x4d\x80\xb9\xd8\xa1\x57\xdb\xc0\x25\xaf\xf3\x95\xf2\x1a\x18\xd7\xf1" + + "\x4f\x6a\xba\x2a\x8d\x42\xed\x89\x7a\x58\x2a\x01\xfc\x09\x74\xbe\xcc\x24\xac\x02\x97\x67\x00\xd3\xf0\xde\x35\xc1" + + "\x78\x88\x63\x7b\x7b\x34\xd8\xde\x9e\x70\x17\x9a\x36\x6f\xe1\x63\x22\x7c\x09\x62\x21\x20\x7a\x12\x9c\x7c\x4f\x47" + + "\x34\x3d\xa0\x66\x80\x6d\x7e\xda\x38\x4a\xf8\x91\x7f\xb5\x13\xf7\x65\x4f\x3b\xbf\x03\xa2\x22\xc6\x40\x74\x90\x98" + + "\xc7\x03\x99\x72\xda\x15\xc7\xf8\x72\x64\xb5\x1b\xf8\x59\xa8\x73\xba\xab\x9b\x70\x71\x51\x67\x7c\x92\x43\x08\x93" + + "\xa8\x7c\xa5\x4a\xb1\x28\xae\x94\x28\x4a\x7d\xa9\x81\xb2\x33\x5c\x99\x00\x02\x3a\x2d\xac\x8a\x2d\x42\x10\x0f\x27" + + "\x3a\x67\x04\x75\x4b\x37\x79\x9f\x43\x44\x79\x59\xe4\x0f\x2b\x31\x41\xf2\xa0\x73\xd1\x86\xf5\x6e\xa5\x0e\xbe\x48" + + "\x0e\x7c\xd3\x40\xdf\x57\x9f\x0c\xb4\x8e\xf4\x78\xf8\xdf\xdb\x90\x20\x04\x0c\xe4\xa2\x48\xf5\x4c\xab\xd4\x9f\x12" + + "\x7b\x39\x5a\x0a\xda\x72\xc5\x24\x2c\x59\xfe\x9c\xeb\xdf\x57\x8a\xb8\x47\x39\x9d\xd7\x54\x1f\xa2\xa0\x21\x96\xf2" + + "\x52\xc1\x4d\x7c\xb3\x94\x79\x5a\x8c\xac\x42\xb2\x83\xb7\xbf\x15\x48\xf7\x41\x62\x9f\x0f\x4a\x68\xb2\x48\xba\xa2" + + "\x3b\xb0\x72\xb3\x18\x9e\xbf\x1c\x5e\xf6\x44\xa7\x23\xba\xee\x0e\x7e\x6e\xcc\x6a\xa1\x02\xad\x46\xa9\x64\x4a\x5a" + + "\x9e\x62\x45\x62\x13\x3d\x21\x1d\x2c\x90\x33\xf3\x13\x3c\x18\xa1\x76\x95\x79\x83\xb2\x04\xd1\xd4\x73\x2e\x0b\x73" + + "\xe9\x88\x5c\x5d\x8d\x8a\xef\x02\x46\x20\x2f\x8a\x65\xcc\x59\x04\xca\x0e\xa5\x44\xa5\x4c\x35\x5c\xe5\xba\x1a\x4e" + + "\x8b\x52\x0d\xde\x1b\x04\x53\xaa\x2a\xa9\x33\x83\xda\x38\x45\xe2\x8e\xa7\xe7\xcc\x43\x9c\xea\x7c\xaa\x1c\x60\x0e" + + "\x07\x4f\x7a\xe2\xe5\x8f\xaf\x99\x51\x20\x49\xca\x0e\x6b\x19\x8d\x4c\x95\x15\x7d\x2c\x4b\x05\xd8\xc5\x1a\x33\x95" + + "\x0e\x40\xdc\x5e\x0b\xa7\xca\xcd\x90\x5f\x11\x27\xaf\x44\xf2\xe0\xf1\xb7\x5f\x7f\xd3\x1d\x20\x6c\xec\x14\x42\x68" + + "\x14\x93\xf7\xed\x1c\x37\xdc\x53\x49\x31\x79\xdf\xa5\x2b\xd8\x7e\xd1\x09\xa0\xc3\x27\x79\x44\x0c\x90\x3d\xd8\xf6" + + "\xdd\x2f\xa8\x60\xbb\x7b\x2c\x78\x62\x89\xfb\xde\x1e\xfe\x84\xd1\x8a\xc9\xfb\x01\xe9\xe7\xa2\xd1\xde\xac\x16\xaa" + + "\xd4\xd3\x2d\x5d\x0e\x87\x62\x29\x4b\xa3\xbe\xcf\x0a\x59\x89\x37\xf2\x8d\x01\x49\x18\x3e\xe8\x4f\xa5\xa9\x18\x2c" + + "\xcb\xc2\xe8\x4a\x03\xf7\x86\x5c\xdf\x06\x10\x65\x83\xaf\x36\x9d\x4e\x97\xfb\x19\x0c\x06\x20\xce\x2c\xb4\x41\x16" + + "\x70\x59\xaa\xca\x88\x4c\x49\xa0\xf6\xfd\x7c\xb5\x98\xa8\x92\xaf\x7e\xd3\x83\x41\x2b\x3d\x5d\x65\xb2\xcc\xd6\x62" + + "\xae\x6e\x44\xa6\x2b\x55\xca\xcc\x88\xa4\x73\x70\x33\x18\x0c\x5c\xb7\x66\x35\xa9\x4a\x89\x33\x07\x3c\x99\x2a\x10" + + "\xc0\x67\x3a\xd7\x95\x56\x46\x54\x05\x4c\x3a\x00\xce\x6e\x8d\x60\xf2\x62\x19\x4e\xfd\x60\xb5\xf6\x15\xb0\xcd\x11" + + "\xc4\x02\x12\xb9\x1d\x6a\x6f\x8a\x2a\xbe\x65\x46\xfc\xa2\x2f\x9e\xe7\x4e\x55\x53\x94\x44\xba\xc4\xf5\xbc\x00\x9a" + + "\x65\x79\xe3\xb3\xb3\x17\x99\x34\xe6\xe2\x82\x4d\x50\xd5\xda\xea\xfd\x3b\x67\xfc\x29\x4d\xe0\xa2\xe3\xba\x05\x4c" + + "\xcf\x8b\x54\x19\xf7\xc4\x1b\x6a\x90\x18\x86\x38\xc8\xb3\x8d\x38\xa5\xcd\x06\x71\x04\xfa\x78\xb7\x5e\x2a\xf8\xed" + + "\x80\x45\x78\x67\x3f\xab\x09\x6e\xfe\x82\xe2\xab\x01\x87\x83\xbe\x42\x2d\xeb\xde\x1e\x91\xd6\x5d\x52\x55\xb3\x94" + + "\x57\x6b\xe5\xb5\x70\x3d\xd1\xd1\xe6\xad\xfd\xf5\xe3\xac\xf3\x09\xe3\x0e\x87\xe2\x64\x46\xd6\x38\xde\x16\x31\x97" + + "\x06\x4e\x35\x7d\xa1\x52\x21\x33\xa4\x6e\x3d\x66\x08\xa6\x45\x3e\xd3\x29\x30\x1f\xd5\x5c\x5a\xfb\xda\xa6\x98\xbc" + + "\xdf\x10\x2f\x1a\x6e\x61\x8f\x8c\x61\xa4\xbb\xfc\xe3\x16\x36\xcf\xcd\x5c\xa5\xcc\x91\xa9\x6b\xde\x99\x50\x5a\x2a" + + "\x89\x3b\x71\x18\xf4\x6a\xb1\xac\xd6\x77\x62\x10\x48\x19\x70\x2f\xe1\xea\x6a\xbc\x97\x6f\xd5\x0a\x88\x6d\xc3\x02" + + "\x18\xb7\x8c\x66\xf7\x4b\x8c\x6b\x3c\x61\x40\x51\xf6\x45\xa7\xe3\x87\x68\xd1\x4b\x8b\xa7\xe2\xcb\xc1\x41\x4f\xe8" + + "\x1f\x4f\xc5\x53\xf1\xb5\x70\x36\x5e\x6d\xe6\xe2\x27\x75\xf9\xea\x66\x19\xea\xc2\x99\x65\xb7\xd4\x29\xc4\xc2\xfa" + + "\x2b\x47\x26\xd9\xec\xe7\xcd\x1e\x67\xce\x64\x42\xe8\x84\xa4\x15\x05\x0f\xd7\x1f\xd9\x02\x7d\x97\x35\x8d\x0e\x1c" + + "\x3f\xb4\x7c\x4a\x61\xc8\x54\x8f\xea\x3b\xb6\xc6\xb1\x02\xe9\xfe\xbd\x1d\x7a\x00\xcd\x23\x5d\x48\x91\xaa\x70\xcb" + + "\xa8\x0b\x12\xd4\x75\x9e\xea\x92\x74\x54\xea\x4a\x66\xcc\xc7\xe0\x17\x8e\xef\xa9\x4a\xbd\xb0\xbd\x1c\x05\x67\x27" + + "\xec\x37\xc0\x6a\x7c\xac\xad\x73\x80\x04\xda\xa1\xd3\x1e\xd0\x88\xac\xb8\x5c\x59\x3a\x8c\x52\x1f\xd1\x46\x34\x93" + + "\xc1\x4d\xae\xc4\xb2\x94\x97\x0b\xd9\x73\x36\x6b\xec\x6b\xb2\x16\x3a\x07\x38\xc1\x75\x2a\xdd\x67\x04\x88\x4a\x02" + + "\x97\xc5\x1a\x39\x6b\xd2\x19\xd0\xda\xec\x24\xad\x69\x2b\x09\xcd\x72\x74\xbb\x1d\x06\xd2\x01\x75\x38\xf6\xbd\xd0" + + "\x49\x7a\x45\x2a\xb3\xa4\x43\x0d\x3a\xd6\x8a\x4a\x3f\x07\xac\xca\x83\x71\xf8\x85\xfb\x7e\xae\x64\x3a\x90\xcb\xa5" + + "\xca\xd3\x17\x73\x9d\xa5\x89\x9d\x74\x77\xb0\x84\x8b\xbc\x42\xd3\x78\xa9\x80\x31\xad\x35\x60\x43\x6c\xc8\x0f\x83" + + "\x64\x55\xcd\x55\x79\xad\x8d\xea\x09\x79\x05\xd8\x0c\x8b\xb6\x24\xd5\x59\xc1\x7b\x42\xe7\x46\x95\x21\x8c\x81\xa9" + + "\xc0\x71\x64\x06\xe0\x5c\x19\x04\x65\x2e\xdc\xf6\x33\x2a\x01\x0e\xb0\x7c\xc1\x6f\x82\x8d\x8f\x78\x4d\x87\x9c\x2f" + + "\x8a\xfc\x4a\x95\x95\xb5\xc4\x54\x85\x70\x46\x90\x23\x52\x02\x4e\xd6\x84\x17\x86\x98\x9b\x54\x56\x92\xf9\x36\xd6" + + "\x17\xbe\xd6\xd3\xb2\x30\xc5\xac\x82\xbb\xf1\xb2\xa8\xa0\x93\xf9\x6a\x81\x12\xbd\x2e\xc5\x95\xca\xd3\xa2\x14\x4b" + + "\x32\xe4\x24\x0f\xbe\xfd\xea\x2f\x8f\xe1\x90\xba\x71\x42\x64\x67\xb9\xbc\x66\x36\xa0\xd3\xe7\x58\x4e\x67\x16\xea" + + "\x89\xce\xc2\xf4\x3b\x21\x3b\xea\x6d\x43\x3d\x11\xd8\x73\x62\xde\x30\x55\x6f\xe4\x42\xd5\x35\xd4\xa4\x6a\xa9\x8d" + + "\x0d\x2f\x06\xf6\x0b\xb8\xc2\xa3\x07\x83\xaa\xf8\xa1\xb8\xb6\xa6\x1f\x44\xc9\xbc\xf1\x38\xa6\x06\xa8\xfa\xd4\xc4" + + "\x6f\x06\x7a\x2a\x79\x49\x9a\xaa\x16\x35\x6b\x31\x79\xdf\xd4\x9d\x7a\x7a\x80\x97\x3b\x93\x03\x31\x46\x53\xcc\x4e" + + "\xa0\xe3\x81\xcb\x2f\xd4\xed\x69\x27\xf3\xf1\x5f\xc0\xa3\x32\xa5\x0e\xc9\x43\x38\x0c\x6b\x1b\xea\x42\xe4\x47\x74" + + "\x09\x3b\x30\x3f\x60\x3c\xc6\x5e\xed\xca\xaa\xd1\x62\xf2\x1e\x35\x04\x81\x26\x38\x14\x59\xf9\xb3\x31\xcb\xa5\xa1" + + "\xd8\x3a\x29\x95\xfc\x10\x48\x89\x81\x20\x15\x49\x9f\x34\x37\x5d\xbf\xcc\xfe\x87\xa7\xe4\x0d\x11\xc2\x2c\xd5\x54" + + "\x93\x13\x92\x81\x6b\x1e\xb0\xd2\x3a\xc0\x2c\x0a\x53\x89\x29\xfa\x0a\x91\xca\x72\x86\x12\x1b\x9e\xd6\x70\x55\x7f" + + "\xda\x36\x38\xbe\x88\x97\xac\x7b\xee\xc7\xff\xd9\xcd\xf8\xf7\x4f\x2c\x60\xe5\x3c\xe7\xf1\x49\xd6\x70\xb8\x48\xc3" + + "\x73\x19\x7a\x06\x58\x86\x03\x6f\x13\x6f\x34\xdc\xd9\xd9\xe9\x58\xf6\x80\x3f\xd8\x47\x51\x39\x20\x58\xd0\x2d\xc9" + + "\xcf\xf1\x2c\x4a\x65\x56\x59\xf5\x11\x5a\xb1\x90\x1f\x54\xdd\xe6\x2a\x64\x59\xf6\xdc\xe7\x01\xa5\x20\x33\x9a\x7d" + + "\xb1\xd9\x78\xe5\x0d\x9f\xf8\xb2\xa1\xb0\x0b\x31\x8e\x08\x05\xeb\x6d\x64\x59\x46\xba\xa6\xd8\x38\x57\x2a\x66\x50" + + "\x1c\x57\x84\xbe\x30\xc0\x68\x11\x31\xb7\x6c\xd6\xce\xce\x19\xbe\xba\x10\xa8\x39\xa7\x67\x6d\xd7\x27\xea\xdf\x19" + + "\x3d\xa0\x77\xfc\xaa\x76\xad\xdd\xdf\x66\x56\xd3\x79\x03\x46\x44\xf0\x11\x52\xba\xb6\x89\x34\x55\xde\x43\xd1\x3f" + + "\x14\x23\xeb\x6a\xc3\xe3\xe3\x57\xce\xc0\x14\x5a\xb1\x60\xf5\xe1\x28\x68\xe4\xe9\x09\xa3\xa6\x45\x9e\x36\x0d\x2f" + + "\xfb\xf4\xa2\x61\x7b\x39\xf0\xe4\x1c\x7b\xe0\x06\xbc\x59\xf6\xbc\xb3\x8d\xe5\x48\xbc\x0f\x0e\x3b\xb6\x3f\xc3\xf3" + + "\x7f\x21\xc6\x3c\xf2\x99\x78\xcf\xaa\x52\x86\x52\xd8\x2b\xdc\x04\x47\x11\xf0\xf0\x6d\xb0\xac\xcb\x52\x2d\x1b\xe6" + + "\xdc\xf0\x4a\xd2\xc4\x43\x04\xeb\xb3\xef\x4e\xe0\x8d\xe1\xeb\x69\xc1\x5e\x1f\x63\x71\x76\xb1\xfd\xc2\xc2\xde\x23" + + "\x90\xd8\xce\x5e\xdd\x2c\x89\xd7\xdd\xa5\x01\xbd\x01\xe1\xaf\x85\xf3\xdd\x22\x9b\x27\xda\x46\x50\x83\x6e\xe4\x95" + + "\x35\x5b\xeb\x4a\x2d\xac\xe4\x8a\xce\x91\x4b\xf2\x7d\x53\xc4\xe4\x4a\x90\x20\xed\x2a\x43\x40\x6f\x23\xac\xb5\x45" + + "\xc2\xc4\xec\x23\x06\x92\xa5\x62\x16\x53\x89\xa7\xad\x7d\x06\x02\x72\x6d\x89\xee\x58\x31\xc8\xd0\xc8\x16\xf6\x79" + + "\x07\xea\xf3\x27\x0d\xae\xe3\x63\x84\xe4\xee\x2d\x86\x0e\x3e\x9d\xe9\x68\xee\xe1\x16\xb6\x83\x2d\xf6\x3d\x2b\x09" + + "\x7a\x7f\xb9\x3b\xf6\xb5\x2a\x65\x6e\x32\x89\x02\x05\x6a\x36\x8b\x99\xdf\x5f\x41\xc2\x84\x2e\x51\x4e\xae\x99\x2a" + + "\xea\x77\xe7\x47\xaf\xce\xfa\x05\x55\xdb\x57\x86\x8b\xbb\x98\x82\x7b\xa9\x4e\x49\xd9\xad\x00\xf7\x91\x5a\x74\xeb" + + "\x7a\xe0\xe6\xa2\xc9\xea\xff\x41\x39\x6d\x2d\x6b\x09\x1a\x9c\x41\x70\xc3\x06\xce\x16\xff\xe3\x2b\x08\x97\xf1\x7d" + + "\x26\xab\x4a\xe5\x42\xe6\x6b\x91\x2b\x53\xa9\x34\xb0\x80\x58\x73\x3c\x7a\x3a\x5a\x16\xec\xec\xa2\x87\x77\x54\xed" + + "\x22\x7c\x6e\xc5\x9b\xbf\xfe\x7c\xf2\x52\x4c\x8b\x15\x20\x30\xa2\x32\xab\xbd\x80\x44\xad\x74\x3a\x42\xf3\x26\x5b" + + "\x7a\x75\x9e\x0a\xe9\x55\x34\x55\x21\xa4\x95\xb4\x7b\x6c\x27\x42\x8f\x3d\x54\x02\xe2\x5f\x38\x09\x12\xac\xd6\xee" + + "\xd0\xb0\x79\xf4\xfe\xbd\x9d\x65\x59\xdc\x44\x37\xc8\x2c\x6f\xf8\x07\xa2\x7f\xe5\x62\xd9\x63\xcf\x0a\xfc\x24\xbc" + + "\x61\xf9\x2e\x74\x1e\x24\xe1\x7d\x68\xa1\x5c\x2d\xd0\xfa\x9a\x9f\xb9\x66\x6c\xe4\xf2\x7e\x27\xb3\x9c\x9e\xa0\x67" + + "\x59\xb5\x58\xd6\xd4\x53\x7f\x5b\xe9\xe9\x07\x31\x9d\x2b\xf2\x70\x4b\x55\xa5\xca\x85\xce\xd1\x5c\xe1\x6d\xa0\x80" + + "\x0f\x72\x92\xa9\x9e\x75\x26\x01\x06\xd5\x11\x47\x6d\xc8\xd5\xd0\x08\x29\xde\xad\x97\x0a\xd5\xec\xe4\x2b\x72\xad" + + "\xc4\xb5\xce\x32\xf2\x80\xe2\x7d\x74\xa6\x8f\x81\x5b\x6b\x8b\x41\x54\xcc\xf2\xa6\x82\xcd\x7d\x5a\x5b\xc5\xa9\x5e" + + "\xac\x32\xd2\x84\xe9\x3c\x85\x87\xc8\x97\x8f\x23\x27\x32\xb7\x43\x3d\xf1\x98\xb1\x11\x81\xde\x34\xa9\xfb\xcb\x2d" + + "\xb7\xe8\x66\x01\xca\x8e\x05\xb4\x6b\xec\x7c\x9b\xb4\x0f\x83\xd3\x67\x37\x11\x4f\xa5\x4e\xd9\xff\x0c\x90\x10\x68" + + "\xd1\x8a\x0c\x2f\x73\x34\x40\x97\xc2\xfa\x1b\x81\x00\x59\xcc\xbc\x09\x8b\xdf\xf7\x84\x29\x84\xae\xd0\x6b\x67\xa2" + + "\x48\xce\x47\x13\x2f\x2d\x65\x80\xbd\xc2\xa6\xd7\xff\xf2\xba\x53\xf8\x89\xd6\xef\xe0\x68\x59\xe4\xf3\x52\xef\xf5" + + "\x08\x63\x26\x06\x79\x71\xed\xce\x09\x77\x60\x5d\x78\x59\x01\xcc\xce\x3f\xe2\x45\x51\x2a\xdc\x73\x8a\xe3\x58\x96" + + "\x05\x19\x33\x65\x55\x01\xd9\x45\x32\x4b\xfd\xb0\x0a\x99\xd5\xe1\xba\xe2\x35\xe5\x4a\xa5\xf8\x44\xdd\x68\x83\x7a" + + "\x1d\x63\x79\x6b\xfe\xe3\xfe\xbd\x5b\x22\x3e\xc3\xa1\x78\x5b\x2c\x71\xcb\x49\xdf\xe0\xfd\x97\x17\x72\xe9\x4d\x5c" + + "\x72\x3a\x4f\x3a\xdf\xb1\x9f\xc0\x1b\x52\xe9\xb3\x47\xb3\x45\x34\x32\x6b\xe0\x62\x59\x29\xc8\x5c\x2b\x59\x8b\x3a" + + "\xe8\x9f\x51\x25\x1d\xd1\xe9\x06\x2e\x43\x9a\xe4\x7f\x42\x97\x50\xfd\xe7\xd4\xe1\x1d\xb1\x4f\x2a\x82\x7d\xd1\xb9" + + "\xe8\x20\x7f\xd5\x2a\xed\xf3\x8a\x1c\xf1\x69\x0a\xda\xce\xcb\x63\x9b\x98\xce\x3e\xa2\x4d\x75\xfa\x51\x1c\xb8\x52" + + "\x57\x5e\x7e\x54\x9f\x5e\xd7\xe6\xde\xfa\xfe\x22\xc5\x3c\x69\xd7\xf6\xf6\x6a\xde\x05\x75\xb5\x2f\x7e\x1d\x68\x5b" + + "\x69\x3e\x48\xe7\x71\x32\x76\x7d\xe3\xb1\x38\x10\x9b\x8d\x5d\x5a\x31\x0b\xdf\x74\xc8\x32\xd3\x09\x86\x7b\x46\x6e" + + "\x44\x89\xfd\xdd\x47\x55\x9f\xb6\xc2\xda\x2d\x79\x9e\x53\xe8\x92\x18\xdf\xbf\x67\xa3\xa2\xf8\xc9\x8b\xd3\x53\x71" + + "\xca\xde\xad\xe2\x55\x7e\x09\xd4\xef\xea\x70\x70\x78\x30\x38\xfc\xf6\xf3\xc2\x9c\x0e\x9f\xfc\x5f\x11\xe0\xf4\x65" + + "\xff\xf0\x1b\x8e\x6c\x4a\xea\x81\x15\xd6\xb1\x12\x63\x02\x7a\xfe\x8c\xc1\x9f\xaf\x6e\x96\x65\x8f\xbc\x5d\xdf\xc1" + + "\xd5\x87\xa6\x81\xff\x7a\xfd\x43\x0f\xbd\x75\x3f\xa8\x5c\xff\x1d\xd9\xb8\x69\xb1\x58\xea\x0c\xff\x24\xaf\x60\xf8" + + "\xab\x58\xc1\xcd\x51\x98\xea\x05\x5f\x9c\xec\xf8\x74\x92\x2f\x57\xf8\x63\x2e\xcd\xcb\xd5\x32\xd3\x53\x59\x29\x47" + + "\x52\x7e\x40\x3f\x7b\xe7\xb0\x7f\x25\x01\x26\x3b\x46\x55\x2f\xbd\xc7\xfe\x4e\x1a\xff\xfd\x0a\x84\xa9\xe0\xf1\x89" + + "\xf9\x8f\x77\x34\xc9\x72\xb2\xba\xbc\x5c\xff\xed\xf4\xb9\xff\xc1\xce\xe3\x3d\xe4\x5a\xdd\x9f\xb0\x07\x52\xe7\xc6" + + "\xcd\xe3\x24\x37\x95\xcc\xa7\xaa\x8f\x9a\x97\x99\x9e\xa2\xea\xd2\x9b\xba\x05\x5c\xbe\xb8\xff\x70\xae\xfb\x09\xb0" + + "\x8b\x00\xf2\xa4\x8b\xec\xe8\x12\x7d\x42\x4b\x95\xbe\x2c\xa6\xad\x51\x07\x3b\xa9\x2e\xcb\x15\xba\xbd\x1c\xd0\xdc" + + "\xd1\xd9\x01\xff\x46\xf2\xf1\x42\x4e\xe7\xc8\x79\xa1\x1e\x1a\x7f\x25\x5d\x07\xf8\xad\x6f\x79\x2b\xca\xad\x0d\x60" + + "\x0b\x7e\x2c\x01\xaf\x22\x2f\xf5\x9e\x98\x44\xb6\x16\x89\x67\xcb\x3d\x8b\x36\x0b\xf8\x06\x3e\xc2\x91\x39\xe7\xa0" + + "\xee\x8f\x9d\xab\x52\x66\xfd\xe5\xaa\xc4\xd0\x2f\x34\x45\xc9\x1c\x39\x2e\x53\x95\xde\xe1\x61\x6c\x59\x1b\xf7\x08" + + "\x26\xfa\xfa\xf9\x7f\xfd\xf7\x9b\x57\x7f\x7d\xfe\xee\xe4\x3f\x5f\x09\x20\x27\x4f\x9f\x8a\x27\x87\x8d\x0d\xb2\xb6" + + "\x73\x42\x28\x8a\x3a\x49\xfe\xb8\xed\xd6\xe2\x4d\xa0\x47\x1b\x51\x83\x1b\x54\x2c\x6d\x54\x4c\xb1\xec\xb1\x87\xde" + + "\x7f\xe7\xb2\xd2\x57\x2a\x08\x97\xb1\x6f\x6a\x8f\x1a\xa1\x38\x3d\x1f\xae\x42\xee\x61\xcb\xa5\x4a\xfb\x29\x46\x5b" + + "\x70\xa0\x0d\xba\xf8\xc0\x3d\xfd\x10\xaf\x48\x21\x05\x8f\x56\xe4\xe8\xc3\xd0\x16\x8f\x03\x44\x30\x16\xab\x42\x66" + + "\x31\x96\x9d\x62\x57\xcc\xa3\x16\x11\x34\x96\x4e\xe8\x16\x98\x6b\x73\xa6\x2f\x70\xb3\xc3\xee\xdd\x9e\xea\x9a\xee" + + "\xdf\x3e\xef\x1f\x06\x9b\xcd\x8e\x77\x80\xcc\x1d\xe4\x1c\x55\xba\x21\x42\xa0\xd2\x8d\x34\xeb\x7c\xba\x91\xab\xaa" + + "\x98\x15\xd3\x95\xc1\xbf\x96\x99\x5c\x6f\x90\xee\x15\x99\xd9\xa4\x70\x56\x36\xa9\x36\xc0\x51\xa6\x9b\xb9\x4e\x53" + + "\x95\x6f\xb4\x59\xc8\xe5\x26\x2b\x8a\xe5\x66\xb1\xca\x2a\xbd\xcc\xd4\xa6\x58\xaa\x7c\x53\x2a\x99\x82\xdc\xb9\xe1" + + "\xa8\xb7\x74\x63\xa6\xc5\x52\xa5\x3e\x0a\xe1\x27\x75\xb9\xca\x64\x29\xd4\xcd\xb2\x54\xc6\xe8\x22\x37\xf6\xd5\x2f" + + "\x73\x5d\x29\xb3\x94\x53\x25\xa6\x73\x59\xca\x69\xa5\x4a\x63\xc9\xe9\xf5\xf5\xf5\xe0\xfa\x09\x92\xd3\x77\x3f\x0d" + + "\xa7\xc6\x3c\xe9\xdb\x28\x07\x33\x7c\x70\xed\x3e\xbd\x7f\x6f\xc7\xff\x80\x45\x9f\x9d\x9f\xdf\x3c\x3e\x38\x3f\xaf" + + "\xce\xcf\xcb\xf3\xf3\xfc\xfc\x7c\x76\xd1\x61\x94\xb8\xa3\xeb\x75\x5e\xc9\x9b\xe1\x03\x3f\x0f\x38\xbf\xf6\xc7\xab" + + "\x7c\x5a\xa4\x14\x69\xd5\x49\x8e\x47\xe7\xe7\xe7\xe7\x83\xcd\xd9\xf9\xf9\x75\xff\x62\x73\xf6\xeb\xf9\xf9\xcd\xc1" + + "\x41\xff\xfc\xfc\x46\x1e\x5c\x74\xf7\x3b\x01\xf9\x2c\x8c\xca\xd0\x35\x46\x65\x2a\x05\xc1\x0f\x6e\x33\x34\x20\xeb" + + "\x99\x86\xdb\x26\x1c\x0d\xe4\x23\x60\xa2\x7f\x5f\x15\x95\x75\x52\x12\x66\x5e\xac\xb2\x14\xb8\x49\x59\xff\xf8\x93" + + "\xe0\x24\x2b\xba\xce\x94\x7f\x48\x43\xd1\x59\x14\xb4\xee\x51\x7b\x67\x2f\x4e\x4f\x1f\x1f\x0e\xcd\x1a\x2e\x4b\x39" + + "\x98\x57\x8b\xec\x01\xce\xaa\x9f\xaa\x59\xdf\xcf\x04\x0e\x8c\x9f\xd6\x58\x34\xc0\xe6\x55\xa4\x9d\xeb\x4e\x4f\x74" + + "\xae\x1f\x44\x2e\x46\x76\x8a\x2e\xa0\xc5\x6c\x99\xcf\x47\xd7\xe5\x9e\x22\xf6\x9f\x9f\x9f\xc1\x7d\x10\x60\xc7\xbe" + + "\xe8\x3c\x4a\xe0\x59\x73\x67\xf7\x45\xa7\x9b\x1c\x8f\xea\x1f\xb0\x5c\xf0\xe3\x52\x95\xa8\x54\x4a\xa6\x72\x59\xad" + + "\x4a\x25\xd0\xf0\xb5\xd3\x79\x94\x9c\x3d\xfa\xf5\x8b\xcd\xee\x3f\x2e\x8e\xc7\xdd\x2d\x1f\x77\xfc\x0a\x49\x89\x21" + + "\x16\x20\x70\x4d\x54\x6d\x47\x8d\x38\xb3\xbd\x7f\x75\x81\x0e\xad\xe4\xdf\xe2\x1f\x3f\x41\x2f\x02\xfe\xf1\x25\x79" + + "\x73\x74\x1e\x25\xc7\xa3\x87\x89\x47\xcb\x5f\xe1\xdf\x87\x17\xdd\x47\xdd\x87\x9b\xf3\x4e\xfd\xc5\x79\x07\xde\x9c" + + "\x77\x36\x08\x87\x60\xdf\x00\x00\xdd\x4d\xeb\x1a\x3a\x8f\xce\xcf\x2f\x18\xaf\x97\x46\xad\xd2\x02\xe1\x3b\xba\x1b" + + "\x94\xe7\xe7\x09\x34\x60\x20\xbc\x2b\x44\xa9\xd2\xd5\x94\x44\x02\x76\xe0\x29\x66\x7e\xcf\x51\xc2\x40\xfd\x1e\x33" + + "\x33\x56\x9a\x5d\x96\xea\x7b\x9d\x55\x20\x5e\xd1\x4d\xee\x85\x38\xeb\x25\x73\x38\x10\x7c\x6a\xdc\xfe\x3c\x39\xf2" + + "\x80\x0a\xa1\xf6\x15\xed\x5b\xf2\xf9\x10\xeb\x6e\xfc\x6a\x1e\x0f\x84\xd1\x8b\x65\xa6\xfc\x80\x5f\x73\xc7\xb5\xaf" + + "\x93\xee\xd9\xf9\xf9\xc5\x05\x7c\x2b\x02\xf4\x04\x18\x3d\x0a\x7b\x7c\x02\x5c\xe8\x9a\xdc\x97\x51\x1b\x54\xc7\xb4" + + "\xc1\x23\x6e\xdc\xe9\x9e\x9f\xc3\x46\x79\x3a\x43\x5e\x51\xc8\xc5\xe6\x45\xde\x57\x66\x2a\x97\x2a\x15\x55\x29\x75" + + "\x06\x2f\xfc\x7e\xf6\x18\x0e\xf0\xd4\x14\x0b\x85\xed\xaf\x5b\xc9\xf0\xb2\x54\x53\xde\x90\xb9\x12\xa8\x01\x2a\x83" + + "\x20\x41\xe0\xb1\x48\x22\x4b\x44\xe7\xd7\xe6\x39\xdb\xdf\x00\x24\x7e\x65\x28\x5c\x74\x2d\x58\xba\x8f\x1a\x28\x26" + + "\x3a\xfb\x5f\x00\x59\xb8\x74\x54\xa1\x9c\x16\x8b\x85\xfc\x84\x51\x1e\xf5\x5a\x9e\x51\x37\xd8\xc9\x44\xe7\x12\x91" + + "\xeb\x13\xba\x4a\xce\x9e\xed\xff\x83\x36\x2a\x7e\xd3\x32\xe1\x47\x7e\xaa\x6e\x53\xff\x06\x18\xd8\x18\x69\xdc\x3a" + + "\xd2\xaf\xe7\xe7\x17\x0f\xcf\x3b\x17\x8f\x8e\xdb\x3a\xc7\xd3\x16\xc1\x83\x4e\x5d\xad\x6f\x7b\x14\x69\xb5\x11\x09" + + "\x6e\x2e\x36\x3e\xe9\x5f\xb8\xae\x91\xef\x06\xd9\x82\xe3\x18\x77\x3a\x27\x2f\x3b\xa3\x5a\x07\x0f\xee\x38\xe9\x0c" + + "\xed\x9d\xce\x8b\x1f\x9e\x9f\x9e\x36\x3e\x3d\x3f\x1f\x7c\xca\xc7\xef\x9e\xff\xb5\xf1\x69\xfb\x77\x8d\xcb\x04\xf6" + + "\x22\xee\xec\xf9\xbb\x77\x3f\x35\x7a\xab\x1d\x40\x6e\xfa\xf6\xf4\xd5\xcf\x2f\x7f\x6c\x6d\x1c\x81\x77\xa7\xf3\xe2" + + "\x3f\x4e\x7e\x68\x42\x66\x94\x20\xf7\x83\x76\x96\x4d\x26\x4d\xb5\xc9\xab\x39\xfc\x7f\x1f\x7e\x74\xfb\xc9\x74\xae" + + "\xb3\x74\x53\xcc\xfa\xc0\x56\x33\x59\x6c\xa3\xb1\x40\xc7\xd5\x95\xca\x37\x45\x9a\x6e\x92\xe4\x6c\xbf\x7f\xb1\xe9" + + "\x26\xe7\xe7\xe9\xa3\x6e\xde\xa4\xca\x02\xa9\x3e\xb7\xda\xd6\xdd\xf9\x79\xba\xdf\xdd\x74\xdb\x31\x0c\x29\x88\xe8" + + "\x68\x07\x34\xe0\x1b\x9b\x5b\x40\x37\xa2\xe3\x29\x01\xcc\x5f\x44\xdf\x71\x9c\xce\x0a\xfd\x11\x45\x86\x89\x4b\x30" + + "\x30\x1f\xa8\x23\x10\x69\xd8\xea\x81\x36\x89\xf5\xc0\xfc\x45\x61\x63\x54\x4c\x02\x4f\xfc\xf6\xc7\x53\x32\x74\xb0" + + "\x9b\xf6\x6f\x74\x23\xfc\x86\x93\x42\xad\x13\xcb\xac\xad\x9b\x54\x5b\x17\x1d\xe1\x91\x87\xa4\xfa\x7d\x73\x59\x6d" + + "\x32\xda\x16\xbf\x4b\x7e\x23\x10\x58\x75\xd0\x26\xc7\xa3\xfe\xf9\x79\xda\x3d\x46\xf8\x6f\x83\x5f\x72\x3c\x3e\xfb" + + "\xb5\x7f\xb1\xf9\xc2\x41\xd2\x73\xe1\xa5\x06\xc9\xda\x60\xb4\x73\x72\x3c\xc2\x5f\xcc\x86\x6f\x60\x31\xb2\x54\x72" + + "\x33\x59\x55\x55\x91\x77\xbf\x18\xa2\xac\x5f\xce\x95\x24\x51\x70\xf8\xeb\xfc\x3c\xa5\xa7\xf0\xdc\x09\x42\xc3\x5f" + + "\xcf\x7e\xfd\xe3\x62\xff\xfc\x8f\x73\xf3\xe8\xfc\x8c\x1f\x9f\x5f\x0f\xbd\x7f\x9a\x34\x3a\x5b\xf7\xd1\x2b\x15\xf8" + + "\xf7\x61\xa9\xaa\x52\xab\x2b\xf8\x5b\x9c\xbc\x84\x7b\xf0\xdd\xf3\xbf\xc2\x3f\x78\x58\x45\xc8\x3b\x95\xbf\xaf\x34" + + "\x5a\xad\x4a\x3b\xe9\x07\xc9\x19\x70\xb8\xfb\xdd\x4d\x72\x7e\xbd\xdf\xdd\x9c\x0f\xec\x83\xee\x17\x3c\x66\x69\xf4" + + "\x24\x23\xc6\x78\x78\xb6\xff\x8f\x0b\x0a\xea\xa6\x0b\x08\x9e\x3d\xdc\x9c\x9f\x07\xc1\xe2\xc0\xef\xd0\xcb\x2d\x6c" + + "\x7e\x0b\xc7\xc9\xb7\x59\x3f\xe2\x95\xcb\x55\xee\x06\x89\x90\x02\xaf\xdc\xb3\xf3\xf3\x54\xf6\x67\x17\x7f\x1c\xf6" + + "\xbe\xbe\x6d\xee\xde\xf1\xa6\x71\x02\x45\xa7\xbb\x19\xd0\x36\x32\xd5\xdd\x99\x05\x43\x78\xb1\xef\xbf\x7b\xbc\x80" + + "\xd4\xfd\x11\x48\x31\x81\x3c\x38\xd7\x97\x20\xa8\x76\x0e\x6e\x60\x2c\x7b\x25\xf7\xc5\xc1\xcd\xe1\xc1\xc1\xc1\x81" + + "\xcd\x6e\xf2\x46\xbe\x11\x0b\x3c\x5a\x70\x13\x4f\x8b\x54\x2d\x0b\xed\x52\xb7\xd4\xd3\x52\x3c\x7d\xfc\xa5\x3d\x45" + + "\x45\xf9\x41\x96\xc5\x2a\x4f\x31\xa9\x40\xae\x8a\x95\xf3\xb5\x16\xce\x63\xda\xe5\x62\xd9\x87\x79\x04\x12\x23\xce" + + "\x6e\x77\x3c\xa6\x3f\x36\x9b\x96\xb5\x90\x55\xdf\x4e\x9c\x1c\x1f\xb0\x35\x46\x11\xde\xb7\x41\x16\xdf\xbd\x7e\x2b" + + "\xa2\x69\xef\xec\xb0\x8b\xe5\xac\x2c\x16\x2f\xe6\xb2\x7c\x51\xa4\x2a\xa1\x81\xf6\xed\xf2\x5d\xd6\x15\xbb\x4a\xa2" + + "\x15\x32\x13\x6f\x33\x99\x2b\xdf\xa3\x48\xcc\xaa\x2c\x8b\x4b\x59\x29\xb1\x94\xba\xec\x7e\x6c\x88\x67\xcf\xc4\xe1" + + "\x81\xd8\x88\x83\x9b\x97\xdf\x1c\x1c\xf4\xe8\xe1\x9e\x38\xb8\x79\xf2\xfd\xf7\xf4\xf8\xc5\x81\x8d\xc4\xb4\xda\xea" + + "\x1f\x97\x95\x5e\x00\xc7\x09\xf4\x08\xbd\x13\xd8\xae\xf0\xdf\x3d\x4c\x9a\xf3\x83\x36\x15\x1c\xee\xaa\x5c\xe3\x06" + + "\x07\x4d\x60\x3a\x09\xe9\x32\x42\x33\x43\xa8\x72\x1a\xe0\x15\x00\xfd\x18\x41\x0a\xa9\x9d\x2d\xaf\xef\xdf\x23\x87" + + "\x89\x76\xc7\x95\x03\x9b\x05\xa3\x52\xd3\x4a\x18\x9d\x51\x12\xa0\x19\x33\x79\x7e\x52\xa4\x5d\x39\xdb\x36\x09\x17" + + "\xad\xee\x54\xc4\x47\xf7\xef\xdd\x8a\x29\xd0\x60\x91\x08\x8b\xc5\xac\x69\xf9\x83\xac\x69\x14\x0d\xc9\x5f\x1e\x3b" + + "\x7b\xc9\x0f\x98\xde\xe5\x52\x71\x3e\x14\x3d\x13\x36\xf2\x0e\x55\x1e\xde\xc1\x06\x8d\x55\x3d\xe0\x6c\x9d\x56\x23" + + "\x50\xf2\xb8\x38\x5b\x6e\x16\x80\x52\x65\xc6\xd9\x69\x6c\x38\x7d\x08\x9f\x93\x57\x4f\xbf\xb5\x42\x9a\x75\xca\x14" + + "\xe4\xea\x29\xc8\x71\x12\x01\xf2\x91\xb9\x60\x4a\x22\x17\x92\x16\x99\xbb\xc9\x2a\x4e\x9a\x17\x97\xe6\xa6\x2a\x41" + + "\x82\xb3\xb8\xc1\xed\xed\x55\x02\x52\x81\xe0\x98\xc1\xb3\xf7\xfb\xfb\x17\x68\x46\x37\x67\x7a\x7f\xff\x02\xb5\xf7" + + "\x64\x64\x8d\xc6\x12\x63\xf1\x5e\xf4\xc5\xa1\xd3\xe3\xdd\x92\x6e\x3c\xb0\x3d\x90\x42\xbc\x25\x05\x88\xf3\x10\xea" + + "\x51\xac\xb8\xb7\x49\xe0\xbd\x6a\x1d\x5c\x16\x3d\x61\x37\xdc\xde\xdc\x7f\x3b\x7d\x6e\xb5\xba\x3b\xba\x27\x2e\xcb" + + "\x62\xb5\x34\x3d\x51\x64\x69\x4f\xe4\x1a\xfe\xa3\xae\xad\xc6\x18\xfe\xb6\x8a\xf8\xc0\x74\xe1\x8d\x6f\xc7\xf6\xaf" + + "\x41\x71\x9d\xab\xd2\xea\x88\x81\xba\xd8\x26\xa3\x08\x27\x39\xa2\xa0\x9e\x5b\x29\xd0\x2f\x27\xb5\x2c\x27\x36\x4d" + + "\x86\x73\xf5\x75\x66\x3f\xdb\xc9\x11\xdd\x3f\xe8\x16\xd5\xea\x20\x45\x16\x4d\x0b\xc3\xc0\x7f\xdc\x3d\xda\x6d\xb1" + + "\xe5\x3a\x5f\x24\xec\xaf\x66\x6d\x49\xbc\xa9\xc5\x81\xc0\x3e\xa2\x25\xa2\xf9\xc5\xb5\x82\x27\xdf\xd6\x7a\xc6\xe9" + + "\x85\x9d\xc6\xfa\x73\x8c\x4b\xf5\x9b\x6b\x0f\xc1\xbc\x28\xab\xe9\xaa\x0a\x02\x38\x71\xc7\x61\xe5\xee\x36\x1f\xa8" + + "\x1b\x35\xf5\x58\x23\xba\xdd\xd0\x55\xfc\x74\xa9\x54\xda\x5f\x2d\x47\x16\xbd\x3a\x0f\x4e\x5e\x52\xb4\x8c\xed\x51" + + "\x8c\x09\x8f\xce\x0e\x2f\xba\xb5\xcc\x58\x91\x8d\xe9\xdb\xc0\xbd\x00\xd5\x97\x1e\x1a\x97\xaa\x62\xe7\xed\xef\xd6" + + "\x27\x69\x22\x16\xce\xdf\x00\x8f\x14\xda\xb7\xbd\x23\x36\xb9\x2e\xc3\x3a\x30\xd8\xf7\xbb\x4c\x4e\x3f\x4c\x54\x59" + + "\xae\xc5\x97\x83\xaf\xd9\x4e\x6d\xfc\xe7\x18\xc5\x42\x5e\x40\xb2\x04\x89\x56\x64\x45\x7e\xa9\x4a\xab\x3f\x70\xf8" + + "\x95\xb0\xf9\xe7\xc1\xd7\xdf\x7e\xfd\x84\x2f\x12\x5a\x07\x4e\xd7\x7a\x04\x07\x13\x09\xfc\x10\x7d\x18\x32\x9a\x34" + + "\x39\x14\xb9\x54\xe2\xe4\x55\x8f\xd4\x43\x3d\x14\xc0\x7f\x51\x93\x0f\xda\x59\xd3\x9d\x9f\x12\x77\x31\x59\xdb\xc0" + + "\x0c\x53\x29\x89\x26\xe6\x93\x97\xf6\xbd\x9b\xca\x40\xa7\x08\xd1\x45\x38\x01\x8b\xd6\x81\x03\x91\x87\x62\x1b\x86" + + "\x86\x1e\x93\x8d\x80\xce\xf6\xe6\xd6\xbf\x32\x6e\x4c\xbe\xe5\x78\xd2\xd8\xaa\x1c\xe7\x98\xf3\x1e\xfe\x6d\xc7\x7f" + + "\x6f\x4f\x24\x35\x74\x88\x1a\xb4\x21\x47\xd7\x85\xff\xec\x38\x6b\x50\xe2\xc9\x1d\x2b\xc7\xed\x86\xb5\x41\xeb\x4e" + + "\x60\xdd\xbd\x78\x9f\xb2\xa5\x79\x38\x40\x4c\x25\xcc\x09\xe3\x46\xe9\x78\x3c\xbe\xf0\x13\x08\x99\x08\x47\x9c\x9b" + + "\xa7\xc1\x7c\xb7\x7e\x27\x2f\xdf\xc8\x85\x0a\x0f\xa8\x9b\x69\x63\x9e\xdb\x27\x36\x20\xe9\xbb\x39\xb7\xe0\xfc\x3e" + + "\xb9\x40\x98\xb1\x4d\x31\x9e\x06\x06\x90\x59\xc7\xf8\xd6\x89\xfa\x16\xff\xc4\x2a\xdd\xc7\xb8\xbd\xdb\x17\xd8\xf4" + + "\x3d\x82\x2b\x6a\x29\xe9\x72\xc5\x05\xd9\xe9\xff\x6e\x24\xe2\xd6\xae\xb3\x2b\x02\x31\xf7\xbf\x06\x95\x32\x55\x3b" + + "\xdd\xcb\xd1\xf9\xa2\xc8\xe0\xbf\x6c\x42\xa4\xb1\xfd\x75\xe7\xb1\xd5\xbd\x71\x56\xe8\x71\x9d\xee\x01\x50\xa3\x9b" + + "\x11\x67\xfe\xfb\xe9\x73\x71\x5d\x94\x1f\x8c\x30\x55\x29\xf3\x4b\x85\x49\x00\x04\x03\xa5\x5f\x16\xa8\xb0\xfc\x7d" + + "\xa5\x40\x5e\xb6\x1f\xfd\x82\x56\x29\xfc\x4e\x30\x7f\x4f\xf9\xf4\xd6\xe4\x76\x3e\x63\xbf\x26\xa1\x6e\xaa\x52\xa2" + + "\x4c\x47\x54\x0e\xba\xb3\x9d\x00\x1d\x82\x1e\x30\xe1\xd4\xd2\xe5\x32\x2a\x95\x48\xde\xcd\x65\xfe\x01\xfd\x38\x80" + + "\xb1\x54\xd7\xe2\xe5\x6a\x59\xe4\x95\xf3\x5f\xaf\xd4\x74\x8e\x3e\x2f\x5d\xdb\xd9\xc9\x2b\xf1\x8d\x48\x0b\x85\x81" + + "\x71\x38\xaf\xc2\x86\xb8\xb9\xac\x43\xfe\xba\x68\x7a\x1d\x84\x37\x62\x4b\xa0\xc5\x6e\x4b\xfe\xcd\x9d\x1d\xe2\x44" + + "\x80\x21\x63\x65\x70\xb8\x91\xb1\x87\x5b\x42\xfb\x18\xa0\x9d\x53\xb7\x27\x1d\x9d\x76\xba\x61\x18\xbd\xdb\xf9\xc0" + + "\x6b\x9b\x44\x9c\x1e\xc8\x8e\x5f\xec\x05\xb9\x19\x63\x22\x68\xfb\x37\x61\xff\x02\x06\x40\x56\xa9\x9e\xd2\x91\x06" + + "\xea\x9c\xe9\x74\xfc\x10\x9d\x4d\x74\x0a\x52\xe6\xc3\x0b\xd1\xf1\xd3\x17\x63\x66\xb9\x42\x3b\xa1\x67\x21\x75\xbf" + + "\x1f\x4c\x9d\x5a\xa2\x7d\x90\x7b\xab\x0a\x8b\x92\x89\xf0\x6f\xeb\x13\x09\x51\xda\x8a\xeb\x8d\xb3\x81\xf9\x51\x95" + + "\x73\x0f\xf0\xb4\x3c\xba\x0c\x3d\x27\x77\xe4\x3a\x0f\x4e\x05\xaf\xe5\x7d\xa1\xf3\xa4\xd3\xeb\x78\xbf\xd6\x00\x3d" + + "\x82\x0f\xdc\xd2\xac\x58\xb5\x8d\xa4\x58\xb2\xed\x97\x32\x40\x57\x0b\xdb\xd3\x73\x90\xb8\xa2\x9e\xf9\x0b\x47\xf1" + + "\x5b\x09\x3e\x8b\x3c\xc9\xef\x46\xa2\x33\x91\x9b\xcf\xad\x98\x69\x72\x29\x8c\xb2\x2f\xec\x02\xa2\x45\x69\x17\x68" + + "\x2e\xe4\xe6\x55\x43\xba\x3b\x23\x16\x7c\x82\x80\xe7\x59\x46\x8e\x27\xc6\x3b\xdf\xd0\xae\xf8\xdd\x69\x06\x18\x7c" + + "\x71\xd8\x11\xdd\xed\xec\xbf\x95\x1c\x86\x8f\xd8\x09\x06\xdd\x0e\xc4\x07\xb5\xee\x93\x51\x71\x2a\xd1\x79\xbb\x98" + + "\x89\x4c\x2f\x34\x50\x21\xa3\xff\x4e\xbe\x2c\xff\x3f\x66\xaf\xc4\x1f\xce\xd7\x8f\x58\xe1\x1e\x3b\x5e\x75\x6f\x39" + + "\xab\x01\xb9\x5b\xb3\x37\x16\x86\x92\xc9\x59\x85\x41\xd9\x05\x65\x5c\xa8\x80\x50\x70\x12\x94\x6b\x0d\x14\x5c\x3c" + + "\xda\x71\x01\xca\xc8\x06\x41\x0f\x09\xaa\x1b\xfa\x66\x35\x9b\xe9\x1b\x95\x76\x6d\xe0\x18\x10\xb1\x44\x73\x24\x23" + + "\x3a\x50\x68\x23\x32\x90\x99\x80\x52\xc9\x5c\x20\x73\x8b\x6f\x7e\xc0\xd3\xd3\xc5\x01\x52\x95\xa9\xca\x5a\x2d\x8a" + + "\x2c\x55\xa6\x12\x2a\xaf\xca\x35\xfb\xdc\x38\x71\x2a\x72\xc6\x70\x12\xd3\x07\xb5\x36\x81\xe7\xb2\x6f\x8d\xed\xe0" + + "\x75\xcf\x7a\xcc\xba\xe0\xed\x9f\x8d\x12\xc9\x07\xb5\x86\x03\x2e\x3a\x5d\xf4\x50\xc5\xa0\xc0\x69\x91\x65\x1a\x93" + + "\x0b\x50\xb4\x2f\x29\xec\x7c\xe6\xc0\xc0\xd5\x2e\x31\x4a\x89\x13\x63\x56\x4a\x3c\x38\xfc\xea\x2f\x5d\x77\xdd\xc1" + + "\x84\x98\x8b\x71\x43\x88\xae\x78\xd6\x58\x7e\xc8\xd5\x63\xe2\x97\x0f\x4a\x2d\x7d\x4c\x52\xa9\xa6\xc0\x8d\x01\x28" + + "\xec\x75\x83\xa0\x62\xe0\x9e\xd1\x40\x66\xae\x67\x55\xd2\xf5\x21\x06\xee\xec\x24\xbe\x19\x4f\x02\x08\x11\x82\xc2" + + "\xca\x66\x3e\x33\xd7\x74\xae\xea\x48\xf8\x5a\xc2\x8d\xe6\xdd\x78\xe1\xc2\xe1\x40\x2a\xd4\x07\x4f\xd6\xcc\xcb\x10" + + "\x1a\x2e\x65\x29\x17\x1e\x09\x6f\xc5\x2c\xc7\x7c\x86\xa1\x1b\xf0\x42\x96\x1f\xea\xbb\x0a\xcf\x6a\x5e\xaa\x00\x95" + + "\x59\x7e\x66\x6f\x7a\x9c\xb7\x75\x99\x71\x9e\xa4\xf5\xe9\xb2\x7e\x01\x89\x22\xe5\x6d\xb4\xf7\x2e\x5d\x79\xdb\x67" + + "\xf9\x16\xf3\xfa\xf8\x6c\xc8\x2a\x15\xa9\xbe\x42\x74\x56\x18\x12\x60\x84\x74\xd9\x91\xe8\xe4\xd6\x17\x01\x3d\x94" + + "\x55\x30\x7d\xc0\x4c\xe8\x64\x7b\x48\x6c\xaa\xaf\x3a\x7c\x31\x3a\x72\x6a\x73\x18\xec\xce\xf2\x04\x3f\xa7\x8d\xb2" + + "\x9a\x1e\xb5\xcd\x8f\x30\x26\x7f\xe8\xc2\x81\x19\x5b\x90\x8f\xd0\x95\x61\x51\x0d\xb6\x8c\xd3\x4b\x3a\x6c\x4d\xf5" + + "\x55\x9b\xfc\x14\x3f\x8e\x03\x6d\xdd\xc4\x5c\xa8\x78\x49\x2e\x77\x62\xa1\x16\x45\xb9\x06\x31\xee\xe4\x15\xbc\x22" + + "\x08\xe4\xab\x2c\x63\x84\x8b\x76\xec\x79\x9a\x1a\xef\x9d\x6b\x3d\x76\x01\xcd\x24\x10\xd9\x99\xf3\x8c\xa6\x34\x2c" + + "\xb2\xaa\xd8\xc3\xcf\xee\x22\xe9\x14\x6f\xe9\x8d\x78\xab\x97\xaa\x6f\x14\xbc\x83\x2d\xcc\xb4\xa9\x30\xd1\x9e\xb3" + + "\x20\x6d\xc1\x00\x3b\x30\x20\x2b\x79\x43\x91\x68\x8a\x8e\xd6\x13\x54\x4d\x65\x5a\xa5\x8d\x2d\x4f\x53\x12\x2f\x13" + + "\x1a\xbf\xe7\x3a\xf2\x18\x40\x6a\x46\x7c\x6d\xfd\x5e\x37\x9d\xae\xcb\x08\x46\x2f\xc2\xf8\xa2\x16\x46\x02\xa9\x06" + + "\xb4\xa4\xd1\x30\x64\x0b\xb8\x06\x38\x14\x3c\x62\x1b\x70\x51\x44\x37\x5e\x94\x2e\xd0\x69\x0d\x80\x7a\x5d\x08\x66" + + "\x2a\x62\x88\x30\x66\xde\x0a\xd9\xfe\x78\x52\xbb\x6e\xc8\xff\xd7\x5f\x2e\x99\xc2\x80\x1e\x99\x8b\x03\x10\x64\x24" + + "\xdb\xa3\x95\x11\x93\x9e\xb8\x44\xe4\x2f\xa3\xf7\xb3\x22\xcb\x8a\x6b\x43\x1d\x87\xa0\xe5\xe9\xe1\x12\x22\xe7\x3a" + + "\x8c\x6e\x5a\x01\x4c\x27\xc0\xff\x48\xca\x99\xa6\x67\x33\x60\x27\x57\x25\x3e\x6b\x71\xa3\x9d\x34\x9f\x21\x92\x27" + + "\xe2\x1f\x93\x81\x29\x56\xe5\x54\x9d\xe4\xa9\xba\x01\x76\x29\xf2\x9b\xeb\x8a\xbe\x6d\x28\xef\x6e\xe8\x92\xb5\xc1" + + "\xd5\x72\xf2\x4a\x84\x8d\x61\xb1\x57\x52\xa3\xc7\x3f\xdc\xb0\x93\x02\x53\x7b\x91\xfa\x98\x0f\xe1\x6c\x56\x53\x2f" + + "\xc1\xa3\x28\x55\x19\xe9\x5c\xf4\x4c\x4c\x1c\xe0\xa4\xfd\x1e\xd6\xce\x9f\x3b\x6d\x26\xc1\x69\xba\x2a\x07\xb9\xba" + + "\xa9\x4e\x09\xa4\xdd\xd8\x7f\x0d\xdb\x44\x8e\x8a\xb1\x83\x5a\x83\x01\xb2\x51\x7a\xe2\x58\x1c\x8a\x11\xb5\x8a\xd0" + + "\xce\x22\x43\x1c\xfe\xc1\xb6\x46\x6b\x9f\xa5\x48\xa8\xe5\xaa\x42\x4d\x5e\xfb\x99\x86\x37\xed\x0c\x00\x7a\xc0\xbe" + + "\xc5\xae\xd8\x0f\x9b\x26\x6f\xa9\xe2\x56\x87\x3f\x64\x60\xc6\x77\x05\x91\x87\xf9\x15\xa9\x35\xc8\x3a\x38\xd5\x8e" + + "\x53\x5e\x38\x57\xeb\x8a\x14\xf1\x5e\xf1\xfb\xd9\x40\x20\x73\xe2\xe7\x02\xe0\x3b\xfc\xea\xdf\x0f\x81\xa4\x01\x82" + + "\xcd\x26\x00\x0b\x4d\xbe\xd3\xfd\x77\x00\xc6\x26\xba\x90\xd9\x36\xaa\x3d\xcb\xdb\x81\xf3\xd6\x7d\x69\x01\xe4\xee" + + "\x64\x17\xa3\x17\x30\x1c\x61\xe0\xee\x65\xa4\xd4\x76\xbf\xc7\x62\xdf\xfe\x1d\x42\x67\x4b\x37\xc0\xd0\xf7\x6c\x1c" + + "\x60\x6c\xad\x60\xb1\x08\xdf\x21\x65\x40\xdf\x13\xb8\xea\xcf\x2e\x48\x12\xb0\x66\x8c\x60\x32\x81\x49\x23\xfc\x30" + + "\x8e\x4a\x75\x69\xbd\x7d\x56\xe1\x19\x6a\x22\x64\x55\xbb\x44\x35\x7d\x1e\x19\x3e\x22\xa9\x95\x34\x36\x4a\xa5\x67" + + "\x22\x79\x5f\x1b\xf4\x4c\x5f\x74\x45\xa0\x33\xdb\xc1\x76\xef\xe1\x26\xda\x4d\x78\xc9\xf4\x93\x5f\xb4\xc5\xa8\x11" + + "\x4b\xd3\x14\x79\xe8\xbe\x92\x94\x8f\x63\x46\x89\x93\x74\xaa\xab\x35\x25\x90\xe6\xe0\x02\x97\xb0\xa5\x79\x43\x6d" + + "\x48\xb2\x19\xdf\xc6\x8d\xdc\x7d\x15\x37\xdb\x70\x18\xcb\x2d\xde\xfb\x44\x8d\x70\x68\xa0\xd6\xd3\xa9\x5a\x56\x14" + + "\xa0\x55\x78\x13\x15\x32\x5c\x6b\xe2\xa0\xeb\xc8\xd7\x26\x8a\xc7\x68\x67\x1f\xfa\xba\x26\x77\x69\x17\x51\xcb\x12" + + "\xb9\x79\x7b\xc5\x8c\x03\xdd\x10\x44\x8a\xc2\x28\x57\x05\xe0\x4a\x96\x74\x7e\xa6\x45\x7e\xa5\x72\xad\xf2\xa9\xba" + + "\x7f\xcf\xd7\x08\xe0\x72\x33\x8d\xa2\x01\x76\x13\xc8\x52\x69\xc4\x7f\xbd\xfe\xc1\x5e\x50\x5b\xe1\x7c\x4b\xd4\xe5" + + "\xb9\x63\xb0\x31\xcd\x62\xa0\x66\x8e\x80\xef\xa1\x5d\xae\x00\xc6\x94\xff\x9a\x72\x30\xe5\x45\xde\x47\x93\x89\x1d" + + "\x96\x81\x8b\xc1\x12\x7e\xd6\xf6\x67\x2b\x79\x1b\x0e\xdd\xc8\xaf\x6c\x9e\x66\x23\xae\x54\x49\x68\x4f\xd9\xed\x8d" + + "\xb2\xa5\x5f\x74\xe5\x14\x64\x6b\x55\x51\x84\x14\x27\x71\xb6\xb5\x57\xb2\x82\x7c\xf4\xf4\xac\x94\x0b\x4c\x3a\x06" + + "\xf7\x7a\x5f\x3c\xf8\xf2\x9b\x27\x68\x8b\x40\x16\xbf\x36\xe6\xd8\x19\x26\x50\x83\xde\xb4\xab\xc1\xd3\xee\xa0\xf6" + + "\x59\x20\xd7\xd4\x3b\x3c\xae\x3f\xf1\xf9\x50\x50\x0f\x07\x70\xeb\x88\x91\x93\x05\xe2\xfd\x3c\x55\x95\x67\x01\xfb" + + "\xa5\xa2\x98\xbe\x2b\x59\x6a\x40\x6e\x23\x8a\x7c\x4a\x99\x40\x53\xab\x94\xb4\xd9\xf0\xe3\x6d\xdc\x82\x00\x67\x69" + + "\x31\xbd\xa8\x61\x80\x67\x38\x49\xcf\xc0\xf4\xbd\x2a\x30\x17\x7c\x68\xdd\xa9\x61\x88\xed\x34\xd4\x55\xb4\xcd\x66" + + "\x78\xff\x5e\x60\x6f\x0c\x90\x3a\x7a\x18\x24\x97\xf7\x62\x0d\xd7\xd6\x78\x51\x2c\x40\xb4\x21\xe6\x11\x03\x4c\xb0" + + "\xcd\x31\xfe\xd3\xdc\x32\x7c\x19\xdb\x41\xc9\x25\x80\x64\x2a\x94\xf0\x06\x2c\x56\xfd\xa7\x56\xd7\x8e\x15\x3c\x99" + + "\x89\xbc\x08\x6a\x6e\xe4\x69\x1b\x8e\x3a\xd6\xb0\xc7\x26\xa8\xc0\x9e\x88\xb7\x69\x1a\xcc\x05\x86\xaa\x59\x25\x37" + + "\x1b\xb1\x8b\x33\xa8\x75\x5d\x63\x27\x03\x6b\xeb\xad\x4f\xc6\x58\x89\x62\x55\x86\xa6\xa1\xa0\xd6\x47\x5a\x4c\x8f" + + "\x7c\x84\x90\x5d\x67\x03\x73\x23\xef\x07\xa4\x83\xa6\x11\x4c\x84\x69\x03\xe0\xf8\xd2\xaa\xba\xf5\xcf\x46\xe2\xe4" + + "\xd5\xb3\x6f\x1c\xd4\xe8\xc8\xf9\x85\x03\x94\x8c\xd1\x97\x39\x25\x49\xea\xf8\xb2\x3c\x16\x95\x11\xb8\xda\x7d\x39" + + "\x97\x46\x4c\x94\x02\x69\x1d\x8e\x31\x45\xc4\x90\x66\x1c\xa5\x3a\x4a\x61\xd9\x59\xaa\x72\xa1\x31\xc0\x41\xa4\x40" + + "\x2d\xd3\x0e\xd7\xfb\x40\x2b\x26\xdc\x02\x06\x95\x08\x2d\x03\xe2\x7d\x6d\xa3\xd3\x1e\x1c\x3e\xf9\xf6\xc9\xd7\x76" + + "\x88\xaf\xfb\xdf\xd8\xca\x4f\x96\xd0\x56\xbe\xae\x03\x60\x88\x4f\xfa\x67\x0a\x2b\x9a\x5b\x69\xd3\x11\x7c\x8b\x06" + + "\xfc\x7e\x6f\xcf\xfe\x05\xdb\x4e\x7f\x0e\xaa\x62\x19\x68\xb5\x4e\x5e\x1d\x1e\x22\x59\xc3\xb1\xe7\xf2\x4a\x71\xb0" + + "\xe8\xab\x2b\x95\x57\x18\xea\x0a\x82\x35\xba\xb2\x9b\xd5\x6c\x86\xde\xc1\xe1\x20\x03\x99\xa6\xd8\xf6\x07\x6d\x2a" + + "\x95\xfb\x92\x1b\x3b\x5b\xde\x27\xa2\xb3\xca\x01\xc2\x9d\x5e\x33\xe6\x37\x72\x0b\xb0\xaa\xe5\x9e\xcd\x17\xc3\xfe" + + "\x21\xde\xec\x65\x87\xf0\x33\x6e\x8c\xee\x5f\x25\xa2\x53\xe4\x9f\x39\xb4\x57\x59\xf0\x01\x78\xe4\x03\x19\x00\x65" + + "\xfb\x7f\xca\xff\xb8\x00\x5a\xdd\xe3\x85\x91\xfb\x3f\xe1\x42\x5a\x93\x7e\x21\xb4\x7b\x60\xe1\xad\xcc\x26\x23\x35" + + "\xa1\xdb\x2b\xf9\x88\x57\x91\xea\x51\xdd\x00\x83\x02\xa8\x79\xf2\xea\x1b\xe7\xeb\xd9\xf5\xe1\x87\x83\x28\xae\x82" + + "\xb5\x53\x9e\x26\xa2\x06\x87\x60\x95\xea\xab\xc1\xd4\x19\x0a\x81\xd5\xef\x84\x5c\xee\x2e\xbc\x8f\x2d\x34\xae\x75" + + "\xc7\xb3\x72\x04\x4e\xcf\xc8\x24\xa6\xfb\xdd\xfa\xd1\xbf\x03\xa8\x4e\x0c\x6e\xb5\xc9\x76\x1e\x75\xba\x0e\x88\x98" + + "\x82\x24\x30\x78\xb5\x9a\x51\x2d\xbf\xf5\x71\x28\x45\xd9\xe8\x80\x16\xb2\x3e\xba\x58\x90\x42\xaf\xd3\x8d\x13\xf4" + + "\x5b\xd0\xb5\xcf\x32\x30\x20\xdd\x7a\x7a\xd8\xbe\x3a\x6f\xc8\xe5\x38\x75\x74\x66\x42\x12\xf1\x11\xd3\xf0\x58\xb0" + + "\x2f\x2a\xdb\x8f\x60\xda\x5b\x6d\xc4\x7b\x7b\x1f\x85\x81\xce\x73\x55\x32\x45\xef\x3c\x85\x97\x88\x0d\xe3\x87\xf2" + + "\xe1\xb3\xa7\xc3\x54\x5f\x3d\x8b\x1e\x0a\x6d\x1f\x77\x8e\x9a\x8e\x60\xa7\x72\x26\x4b\xfd\xd4\x3a\x48\xbe\x40\x01" + + "\x06\x3f\x15\xc5\x95\x2a\xfb\x53\x89\x2e\xc6\x76\x6c\xf4\x05\x46\xf0\xb7\x22\x6c\xd8\x33\x7a\x77\x3c\x3d\x3c\x88" + + "\x7a\xbe\x7c\xf5\xdd\x8b\x37\xe8\x7c\xb7\x2a\x91\x21\x99\x69\x0e\xbf\xe0\x24\xb5\x34\xb6\x32\x91\x16\xe6\x6a\x9b" + + "\x59\xbc\xa3\xdd\x26\xe2\x35\xfd\xb8\xb6\x95\xe1\xe9\x3f\x3c\xd8\xba\xbd\xdf\xad\x4f\x52\x87\xb1\x4e\x7a\x63\xaf" + + "\x13\x5f\x15\x68\x52\x16\x1f\x54\x5e\xff\xce\x26\x3e\x4e\x31\x6f\xf6\x52\x4f\x3f\x88\xd5\x12\x28\xc5\x65\x29\x17" + + "\xb2\xd2\x53\x20\x2a\x7d\x60\xbc\xa0\x37\xc3\xb7\xa0\x29\x38\x82\x12\xad\xd5\x72\x52\xac\xaa\x18\xdf\x10\xb2\x80" + + "\x30\x31\x82\xe1\x90\x1f\x39\x27\xc4\x2c\xd4\xce\x0a\xbc\x47\x9f\x8f\xc8\x76\xef\x8e\x49\x1d\x27\x71\x78\xcb\xd6" + + "\x34\xde\x24\xce\x2c\xb0\xe5\x0c\x9d\xbc\xa4\x9d\xc5\x6c\xd0\x18\x86\x64\xaf\xd2\xfa\x5a\x42\x0d\x2b\x7c\x72\xd6" + + "\x39\x79\xd9\xb9\x88\xb8\x47\x9d\x36\x12\x8d\xb4\xa5\x13\xa9\xb9\xc4\xb4\x4a\x6f\x35\x96\x28\x48\x12\x53\x8a\xbb" + + "\x5c\xaf\x02\x53\xf5\xbf\xe6\x7a\xf5\x39\x9e\x57\xe8\x71\x15\x69\x04\x51\xaa\x89\x7c\xad\x8e\xc5\x99\x58\x70\x65" + + "\x91\x50\x5b\x78\x14\x00\x15\xc0\xdf\x0a\xd6\x48\x35\x02\xb7\x15\xe2\x96\x0e\xcd\xfc\xd6\x9d\x1b\x2f\x78\xf6\xec" + + "\x66\x48\xdc\xa9\xe9\x8a\xf3\x47\x36\xdd\x0b\xf0\xb8\xd2\x90\x3c\x6d\x97\x54\x24\xf2\x21\x88\x0f\xf1\xd7\xc3\xbf" + + "\xf0\xc3\xda\x5e\xb3\x87\x55\xa9\x32\x66\x45\x51\xbf\x05\x18\x68\xd8\xdb\x0f\x4f\x06\x99\xee\x6a\xb8\xc6\x54\xb1" + + "\x0d\x58\xff\x73\xd0\x42\xcd\x20\xa5\xad\x65\xac\x6e\x00\x0e\xf7\xbb\x0d\xa9\x5b\x5b\x46\x06\x75\xab\x4e\x85\x1e" + + "\xd8\xa7\x72\xe0\xb3\x07\x6e\xdb\x06\x7b\x98\xdf\xc9\x4b\xce\xa4\xc0\x50\x7b\xf7\xfc\xaf\x08\x9e\x3b\x2f\x73\x74" + + "\x76\x0f\xfd\x87\x2f\x3f\xf7\x14\xdf\xa5\x89\xa9\xa3\xd9\xdd\x5e\x62\x95\xbc\x8c\x13\x86\x91\x1f\xfd\x47\x66\x07" + + "\x7b\xa2\x38\x31\x83\x4b\x4c\x64\x33\xb7\x85\x69\xbf\x02\xdf\xd9\x4f\x9b\x87\xd5\x17\x52\x84\xa6\x00\xe2\xef\x6a" + + "\xaf\x4c\x89\x97\x09\xbc\x83\xe0\x2b\xd4\xf6\x3e\x0a\x7c\x7d\x9c\x8d\x81\xbd\x04\x79\x0a\xde\x5d\xfa\x7e\xcd\x53" + + "\xb3\x6e\x7f\x09\x7c\x32\xaa\xc5\xb2\xd5\xe5\xaf\xe6\xdb\xe7\xf2\x9c\x70\xc6\x25\x7e\xdf\xe2\x26\x72\xeb\x99\x29" + + "\xb8\xab\x63\xec\x21\x9f\xbb\xad\xf8\x13\xf9\xd4\x05\x59\xa0\xed\xe3\xc6\x3e\x7d\x14\x89\x7c\x8f\x9f\x71\x25\xdc" + + "\x85\x57\x81\x5f\x9e\xe7\x82\xba\x91\x13\x3a\x31\xe3\x7f\x3b\x7d\x3e\x64\x9d\xec\xa9\x2f\x3b\xf8\xa7\xf3\xe3\x7f" + + "\x3b\x7d\x8e\x37\x6d\x6d\x28\x9f\x62\x88\x9a\xd5\x5e\x27\x23\x39\x05\xb6\x14\x98\x75\x2a\x01\x4c\x62\x21\xd5\x0a" + + "\x2a\x57\x4a\x24\x27\xaf\xbe\x1d\x22\x1f\x27\x0e\x0f\x07\x18\x03\x1c\x65\x20\x09\x5c\x3e\xd0\x73\x4f\x26\x23\x4c" + + "\x90\x70\x47\x8f\x2f\xe6\x65\xb1\x50\xe2\xf1\x61\x97\x93\x19\x28\x2e\xf2\x19\xd5\xbf\xc5\x82\x8b\x93\xd5\x25\x29" + + "\xfc\xbe\x19\x7e\x4b\xd7\xa5\xcd\xc8\x95\x93\x8a\x80\x7a\x80\xce\xb1\x3e\xca\x6f\xce\xca\x4f\xeb\xe2\xfd\xfa\x4d" + + "\x70\xf9\x65\xc3\x2a\x36\x99\xb3\x8a\x82\x79\xc4\xa2\x27\xae\xed\x2c\x68\xfe\x70\x9f\x73\x6a\x44\x4a\x43\x87\x00" + + "\xe6\x12\x84\x95\x5e\x28\xef\xac\x02\x4f\x4e\x5e\x85\xf3\x39\x55\xca\x46\x69\x4d\x56\x97\x66\x10\xd4\x1e\xa7\x82" + + "\xcc\xc3\xc3\x27\x4f\xfe\xf2\x4d\x98\xda\x25\x80\x23\x39\xe7\x85\xde\x9a\x6d\xe2\x43\xdd\x91\x2b\x70\xd3\x74\xb5" + + "\x05\xa1\xdf\x52\x5d\xaa\x1b\xe7\x8e\x70\xa9\x6e\xd0\xa9\xb2\x52\x97\x6b\x21\xd3\x62\x59\xa9\x94\xdc\x13\x5e\x6a" + + "\x75\x59\x88\xb7\xaa\xd4\xb9\x46\xbb\xcb\x1d\xec\x25\xad\x31\xe3\x22\x98\xa8\x50\x2c\x6c\x69\x4d\x2e\x2a\x95\x0b" + + "\x4e\x98\x62\xdb\xbf\xa3\xf2\x7a\x98\x09\x4c\x99\x4a\x9c\xbc\x7a\x68\x44\x05\xa2\x1b\xa9\x29\xa9\x9a\xab\xba\x59" + + "\x66\x7a\xaa\x39\xf4\x04\xb9\x64\x55\x51\xd6\x74\xe7\xfa\x81\xe7\x31\xaf\xbc\x70\xde\x73\x6d\xb1\x2e\x09\x3a\x5a" + + "\x60\x01\xf1\x69\x98\x06\x42\xe5\xb0\x8f\xb6\xe9\x47\xb6\xe7\xf1\x93\xaf\xbe\x75\x0e\x18\xb1\xb4\x45\xde\x65\x62" + + "\x61\x10\x5d\xa6\x99\x5e\x8e\x1f\x3e\x7c\xf6\x94\xf2\xe9\x09\x9b\x30\x04\x9f\x0d\xe9\xe1\xb3\xa7\x9c\x80\xc1\x89" + + "\x5f\x35\x9e\xe6\x1b\x76\x84\x17\x87\x87\xfd\xc3\xc7\x83\xc3\xaf\x6d\x9b\x37\x05\xc5\xb5\xfb\x55\xd8\xfe\xe9\x40" + + "\x85\x30\x37\x6c\x8f\x16\xbf\x8e\x45\x51\x8a\x2f\xf0\xbf\x8f\xc6\x1e\xfe\x24\x4b\x78\xb0\xb9\x64\x0a\xab\xfc\x43" + + "\x4e\x39\x5e\x78\x1a\x93\x55\x25\x3a\x46\xce\x54\x07\x35\xf6\xbf\xe8\xfc\xa7\x77\x35\xc0\x2d\x4c\x9a\x0f\x16\x36" + + "\xeb\x39\xc2\x4e\xe5\xfd\x95\x19\x52\x20\xeb\x7a\xa8\xd5\x70\x3e\xff\xf2\xeb\xaf\x9e\x7c\xf3\xcd\x40\x9a\xe5\x8d" + + "\x4f\x3c\xf1\xdf\x46\xb9\xf4\xa2\xde\xf9\xa5\xe1\x98\xd8\x39\x0b\x40\xfc\xeb\xf8\xe1\xc3\x0b\x2f\xe8\xf9\xab\xdf" + + "\x39\x2d\xd3\xe5\xd5\x39\x7b\xf4\xeb\x17\x17\xad\xa1\xe3\xc7\xa3\x87\x0f\x37\xe7\x9d\x73\x0c\x77\x8e\x3d\x2c\x6b" + + "\xbb\x61\x9f\xd9\x0c\x6b\x35\x2d\x50\x07\xd9\xa6\x0e\x73\xee\x15\x21\xb1\x4a\x6d\x75\x67\x46\x5d\xf2\x7c\xdc\xb2" + + "\x32\xbb\x8b\x9f\xb4\xa4\x2d\xd9\x38\x8e\x47\x38\x8f\x4d\x23\xcc\xb8\x6d\x79\x14\x5c\xc1\x84\xbc\x2f\x46\x9c\xdf" + + "\xc6\x22\x56\xe4\x40\x09\x24\x92\x90\x39\xf2\x52\xde\x96\x05\xe6\xf1\xc1\xe1\xe1\xf0\xa7\x57\x2f\xfa\x71\x06\x95" + + "\x3e\x3c\x3f\xf8\xf6\xf1\xb7\xc3\x07\x3c\xd8\x7d\xe7\x17\xfd\x8d\x25\xe3\xa4\xe6\x45\x53\x10\xba\x5e\xeb\x2c\x23" + + "\x85\xad\xc2\xc4\x09\xaa\x74\x8a\xec\xbb\x01\x6a\xd7\xf3\x71\x70\x06\x4d\x8f\x6a\xd6\xd0\x4f\xa2\x7a\x16\x4d\x28" + + "\xb1\x9c\x11\xdf\x88\x37\xe4\x9c\xf8\x7c\xb9\x34\xd1\x59\x03\x36\x0b\x95\x86\xc0\x19\x84\x28\x54\x2a\x60\x94\xb0" + + "\x84\x83\x4a\x45\x4a\x39\x25\x02\x22\x43\x3a\x76\x17\x23\x42\x65\xce\x97\x2b\x6b\xe2\xa8\xf9\xaf\x91\x4b\x80\xcd" + + "\xad\x0b\x3f\xea\x9e\xd6\x30\x93\x4e\x4f\x74\x28\x23\x91\xc3\x8e\x86\x2e\x8d\x06\xe9\xd6\x3f\x87\xf9\xc3\xe7\x2f" + + "\x3b\x11\xdf\xda\x76\x60\x5e\xe5\x58\x19\x08\x4d\x7c\x7d\xa3\x72\xac\x56\xa4\x2b\xac\xb8\x15\x83\xe1\xa3\x67\x1f" + + "\x9a\x8f\x3f\xed\x7c\xe0\x04\x5b\x22\xda\x5d\x7a\x99\xb6\x03\xf1\xfd\xf7\xe2\xc9\xe0\x2b\x38\x0a\x2a\xc7\x84\x4d" + + "\xc3\x91\x4d\xdd\x84\xbb\x46\xc0\xf2\x9a\xa0\xa4\xfe\x00\xb6\xd1\x54\x80\xb0\xdc\x41\xf7\xdf\x89\xdf\x3c\xc6\xa7" + + "\x80\xc3\xb5\xed\x89\x8e\x5b\x53\x1b\x08\xf8\xca\x39\xe8\x87\xe6\x0a\x32\xc9\xc0\xf5\x5d\x98\xaa\x4f\xd9\x44\x74" + + "\x8e\x3e\x00\xd6\x33\xc4\x61\x4f\x73\x9e\x8f\x7a\xa3\x1b\x8b\x8b\xf5\x83\xd7\x1b\x3c\x1a\x75\x6c\x79\xd9\x7a\x20" + + "\xa0\xe5\x76\xea\xec\x6b\x9d\xf3\x49\x7c\xfe\x6c\xab\xe3\xb2\x4f\x28\xb3\xa2\x7d\x7a\x8d\x04\xef\x75\xad\xbb\xb8" + + "\xcd\xa2\xf8\xfb\xdd\x0d\x8a\x8f\x7c\x6f\x6a\xef\xbb\x8e\x09\xfb\x14\x5a\xf2\xc2\x66\xa7\x05\x6c\xd0\x33\xa1\xab" + + "\x87\xc6\xcb\x80\x55\x21\xd2\xa2\xce\xaf\xdb\x4f\x81\x85\x15\xa9\x36\xd3\x22\xcf\x89\x62\xa3\x5c\x9f\x9c\xbc\x12" + + "\xdf\x12\x1e\x5a\x80\x86\x8d\x5e\x73\x88\xa3\x4d\xa8\x4d\x11\xd7\xa9\xbe\xea\x09\x74\x83\x8d\xce\x37\xf2\x6b\x7c" + + "\x3d\xcc\xa4\xce\x7c\x09\x75\x32\x7a\xf8\xca\x2c\x7f\x55\xd3\x0f\x85\xc7\x20\x45\x69\x72\xad\x2e\x95\xd8\x7f\x0e" + + "\xdb\xc3\x4f\xda\x86\x3f\x33\xbb\x70\xc3\x8f\x6e\x1c\xa2\x46\x52\x86\xc5\xed\xdd\x71\xa7\xe7\xd3\x8b\x34\x70\x29" + + "\xe4\xa6\x3d\xfa\xf1\x89\xd9\xdb\x8b\x12\x1e\xf8\xf7\x14\x76\xb1\xb1\x76\x83\xba\x78\x13\x4f\xe4\xae\xce\x6c\x9b" + + "\xb8\x43\x12\x03\x5f\x70\x30\xde\x9f\x2b\xfb\xed\x78\x33\x7a\x9b\x90\x80\x58\x3a\xa5\xf7\xd6\x0e\x67\x1d\xb3\x02" + + "\xeb\xaf\x35\x55\xdb\x80\x41\x21\x73\x74\xb7\xe1\x7c\x67\xc4\xc7\xcf\x56\x59\xb6\xf6\xbb\xec\xb2\x94\x50\x9d\x24" + + "\x03\x57\x60\xaa\xcc\x54\xe5\x29\x5d\x5c\x58\x02\x51\xe8\xbc\x17\xf8\x7e\xfb\xcf\x79\x28\x8e\x72\x08\x52\x57\xa2" + + "\x37\xad\x5b\xd3\x66\xb3\x75\x51\xdc\xbc\x5b\x57\x32\x85\x39\x20\x49\x4d\x87\xf9\x0b\xc7\x75\x8f\xd4\x6f\xc5\xb1" + + "\x90\x0d\x6b\xfd\x88\x9d\x59\x77\x76\x26\xab\xa5\xf5\x6f\x9d\x04\xda\xd6\x48\x93\xc7\xe9\x25\x57\x4b\x54\x93\xef" + + "\x26\xf8\x27\x7c\xb0\x5a\xb6\xb8\xbf\x26\xd4\x31\xce\xc7\x2f\xc0\xd6\x80\x88\x1f\x53\x57\x2e\xd7\xc3\x8e\xdc\xba" + + "\x8d\xe8\x6b\xbb\xe5\xa5\xed\x65\x4f\xb0\x48\xd1\x0d\xf2\x01\x6c\x05\x1a\x52\xe4\x49\x8b\x9a\x69\x02\x00\x09\x60" + + "\xd1\xd0\x31\x4d\x48\x97\x18\x87\x93\x46\xc9\x72\xdb\x23\x7b\x5a\xea\xab\xb9\x83\x73\x5a\x94\x15\x59\x9f\xfe\xc4" + + "\x73\xc3\x09\x21\x62\xa7\x6c\xe3\x46\x0a\xb3\x8b\x06\xd8\x78\x1c\xc4\xb5\x84\x30\xbb\xef\x92\xbd\x5f\x52\x09\x4d" + + "\x97\x62\x94\x0b\x56\xdd\xff\xdc\x7c\xa4\x51\x2e\xd2\x30\x21\x78\x51\x62\x70\x10\xfb\xc7\xa3\xbf\x14\x8a\xb9\x61" + + "\xad\x64\xe2\xe3\xe6\xd2\x88\x2d\x68\x71\xdf\x16\xa8\x70\x94\x63\x77\x3b\x7e\xf5\xc5\xee\x64\xdb\xcb\xa3\xfb\xbe" + + "\x90\x1a\x75\xd5\x50\x9d\xe1\xe3\xda\x2a\x5e\xc8\x6c\x4a\x49\xae\xad\x7f\x29\xfa\x53\x17\xd5\x5c\x70\xf2\x9f\x89" + + "\xca\x0a\x4c\x68\xe7\xe3\x12\xc2\xb8\x69\x3f\xf1\x44\xc8\xa6\xa7\x10\x20\x20\xc0\x39\x11\x93\xe6\xcb\x89\x25\x19" + + "\xdb\xcf\x14\x61\xff\x28\xe0\x94\x9c\xf3\xe1\xb5\x12\x20\x2b\xc3\xb4\xd6\xc8\x02\x86\xf7\x2b\x36\x3f\xf4\x16\xd6" + + "\x97\xf5\x0b\xda\x34\xe0\xb5\x27\x0e\x99\xa9\xd8\x49\x76\xed\x9d\x0d\xe8\xf7\x52\x55\x72\x3a\x27\xf5\xe4\x56\xf8" + + "\x27\x6e\xa9\xdc\x20\xe0\x3e\x88\xc3\x28\x0a\x43\xc1\x62\x68\xb5\x75\x74\x18\x55\x69\x58\x93\x96\x5c\xd1\xaa\x02" + + "\x1d\x90\x9c\x6f\x55\x1c\xa5\x1e\xa0\x6e\x5a\x4c\x11\xc2\x35\xb8\xc2\xab\x28\x41\x05\x7b\x49\x22\x29\x8b\x3c\xb6" + + "\x84\xec\xde\xed\xe4\x1e\x52\x12\x1e\xad\xbe\x8b\x9f\x31\xda\xa4\x39\xda\x61\x83\x11\x7e\x2d\x35\xdd\x46\xbe\xb2" + + "\x32\x1c\xfe\x10\x91\x5d\xca\x67\x4b\xaf\x93\x5a\x3d\x1c\x9f\x13\x1a\xf7\xa4\xbf\xfd\xf5\x04\x13\x91\x33\x61\x8f" + + "\x0e\x78\x7c\x68\xc4\x9e\xf8\xd2\xd6\xde\xa1\x34\xb5\xf8\x51\x3b\xd1\x46\x1f\x54\x5d\x09\x85\x85\x5c\x39\xf8\x8f" + + "\xac\x8c\xd0\x15\xe5\xb0\x9b\xfe\x59\x94\x88\xe3\x3f\x1a\xb5\x4f\x24\xde\x99\x32\xb8\x22\xe8\x39\xdf\xa5\x8d\xe7" + + "\x12\xad\x29\x42\x0a\x36\xa8\x4c\xe8\xf7\x44\x04\xe5\x4f\xde\xe2\x37\x18\xd4\xe2\xd7\xa3\x34\xe6\x1c\xb7\x58\x8a" + + "\xa5\xc5\xeb\x27\x91\xe4\x29\xc9\x97\x33\x5d\x84\x7f\x34\x6f\x6f\xc0\x31\x82\x32\xdf\xfb\xc1\x53\xf7\x10\x7a\x89" + + "\x1a\xe1\x6f\xf7\xf3\xdf\x89\x1d\xf7\xa3\x7a\xab\x1e\x04\x36\x76\xa8\xc7\xf9\x98\x41\x5a\x90\xe2\x77\x5f\xf7\xe2" + + "\x7e\xcd\xb1\x0b\x37\x87\xd9\x95\x1a\x24\xda\x02\x7d\x6a\x34\x3b\x22\x81\xb9\x52\xa9\x00\x86\x10\xa3\xbb\x0c\xc7" + + "\x88\xe9\x52\xc8\x7c\xaa\x0c\xa6\x8d\x24\xef\x67\x40\x64\x6d\xe8\xc6\xa1\x40\x18\x89\xfd\xb6\x44\xc7\xb4\xb1\x15" + + "\x72\x39\x58\xe5\x14\x59\x49\xb1\x35\x3e\xda\x8d\xc3\x8f\x3e\xa7\xb7\xc9\xb6\xde\x78\x89\xbf\xc8\xec\x83\x40\x66" + + "\x11\x75\xfc\x25\xc8\xe8\x45\x81\xb9\x00\x66\xe4\x53\xad\xcd\xb4\x54\x4b\x99\x4f\xd7\xe1\xb0\x72\x69\x73\x4f\x4f" + + "\xf0\x2f\xc7\x47\x61\x39\x8a\xfa\xe9\xd6\x8c\x23\xc8\x7f\x08\x69\x61\xcf\xb5\x4a\xa2\x93\x4b\xae\x83\xb6\x28\x9e" + + "\x85\x2d\x89\x77\xf1\x8e\xc1\xb8\x3d\x37\x7c\xeb\xcd\x45\x5d\x02\x91\x0b\x3c\x4d\x11\xf3\xe8\x6e\x60\x80\xdb\xa5" + + "\x44\xf4\x35\x40\xfd\xc9\xb6\x16\xb6\xc1\x81\x4f\x10\x16\x38\xbd\x3a\x97\x68\xf6\x12\xf6\x62\x7c\x60\x0d\xbf\x59" + + "\x72\x4d\x31\x2e\x33\x12\x78\xed\xdb\x14\x4e\xd4\x26\x5f\x65\x99\xfd\xaf\x6f\xbf\x65\x8c\x40\x97\x50\x2f\x7d\x06" + + "\xbd\x79\xc7\xf5\x53\x55\xc5\x29\xfb\x61\x37\x00\xd5\xbd\x13\x28\x9b\x51\x5b\xdd\xc9\x3f\x25\x29\x93\xb7\xad\x3a" + + "\xcb\xfa\x6b\xf9\x41\x09\x83\xae\x50\xe8\x0e\xd2\xcc\xe9\x8c\xc7\x9d\xb2\xf4\x52\xe6\xfe\x92\x3c\x78\xc2\xf8\xf6" + + "\x5a\x2e\xd5\x9e\xe8\x8c\x1f\x7e\x71\xf8\xf0\xa2\x13\x55\xcb\xd8\xa6\x65\x69\x9a\x40\x29\x32\x2f\xb1\x59\x41\x5e" + + "\x3b\x1d\x4b\xed\x09\x8b\x65\x0c\xc8\x6e\xfd\x3b\x10\xc5\xe1\x7f\x6d\xf9\x45\xdc\x37\x8e\x65\xf1\xe9\x0c\x7c\xa5" + + "\xbe\x58\x59\x10\x6e\x5b\xa0\xab\x38\x79\x25\xbe\x7d\x68\x1a\xb6\xcf\x58\x05\x51\xe4\x4d\x8d\x49\xa0\x79\x83\xe1" + + "\x36\x1b\xb1\x5d\x6f\xc2\x6c\xda\x0e\x4b\xb6\xd7\x0a\xb0\xaf\xd9\x23\x11\x67\xa9\x91\xa9\x9a\x28\x2a\x73\x5c\x4b" + + "\xfa\x33\x1c\x8a\x59\x29\x2f\x59\x7c\xc6\xe9\xf3\x1b\x44\xaf\x34\xc8\x00\x14\x3d\x88\x7d\xce\x0f\x0f\x1b\xbc\x0d" + + "\x97\xfc\x73\x2e\x0e\x94\xa7\x41\x71\xe6\xb4\x28\x76\x30\x3e\x51\xae\xa6\x03\x9f\xaa\x33\x42\xd5\x0b\xe7\xdc\x25" + + "\x9e\x21\x0b\x10\x1d\xb0\x40\x66\x0f\x4b\x35\xc7\xb9\x86\x3e\xe7\x70\x7d\x34\x0d\xda\x3f\x91\xf7\x2c\xb4\xe2\xb7" + + "\x66\x43\xaa\xaf\x0a\x8e\x52\x0b\xad\x08\xea\xe2\xfe\x9f\xa1\x15\x70\x26\xb0\xda\x55\x23\x12\xb9\x59\x80\x87\x19" + + "\x2a\xbc\x63\xf2\x87\xe8\x56\x28\x66\x45\x91\x51\x29\x63\x0a\xf1\x18\xb4\xa7\x53\xf0\xbe\xf4\xdf\x1c\x50\x36\x85" + + "\x2b\x99\x61\x7c\x1c\xa0\x63\x54\x53\xbe\x36\x91\x5e\xdb\x44\xac\xb0\x35\x8b\x00\xd9\x43\xa7\xc2\xd8\xe7\x82\xae" + + "\x8f\xb0\x14\x96\xdf\x3c\x98\x02\x00\xcc\x7b\x6d\x1c\xdb\x99\xe1\x67\x2d\xee\xd6\xec\xb8\x18\x8e\xc1\x89\x39\x1b" + + "\xde\x68\x76\x6f\xb9\x46\x29\xad\xb7\xdd\xa3\x0a\xab\x23\xa1\x8b\xee\x95\xcc\x06\x3e\x9e\x8f\xf9\x3e\x78\x48\x4e" + + "\x55\xcc\xc1\x71\xcc\x7d\x84\x60\x64\x14\x08\x31\x6c\x61\x6c\x61\x41\x52\xbf\xe7\xea\x9a\xca\x34\x25\xa2\x73\x8a" + + "\x75\x06\xac\x56\x75\x95\x97\x6a\x5a\x5c\xe6\xfa\xef\x2a\x0d\x0a\x43\x8c\xb0\x2e\x13\x76\xd3\x08\x3e\x7a\x19\xde" + + "\xf5\x36\x3f\x08\x2a\x26\xe0\x87\xd3\x55\xc4\x31\x66\x58\xac\xe9\x07\xfd\x41\xdd\x5a\xa7\x1e\x8e\xf9\xe1\x35\x50" + + "\x79\xaf\x53\x8a\x5e\xf3\x0b\x89\x0b\xae\x46\xce\x53\x7e\x20\xef\x41\xe5\xeb\x7c\xda\x54\x91\x1c\xbc\x9d\x23\xbf" + + "\x7f\xad\xc4\x23\x90\xb6\x1f\x39\x16\x97\x32\x78\xfa\xae\x7a\x42\x1a\xb3\xa2\x7c\x28\xba\x74\x56\xff\x5a\x59\x1e" + + "\x31\x16\x4e\xb6\xa6\x2e\xdc\x2b\xf4\x55\xf2\xec\x7b\xd0\x10\x1e\x9e\x62\xf0\x21\xec\xb6\xcd\x8a\x86\xf9\x35\x13" + + "\xc1\x79\x50\xdd\xd3\xa2\xac\x88\x8b\x27\xad\x51\x78\xe7\x46\x13\xa9\x07\x87\xdf\xe9\xb8\xe5\x13\xec\x01\xbb\x65" + + "\xdb\x50\xe5\x4b\x4b\xf7\x01\x82\x1e\x1c\xac\x26\xd7\x8d\x5a\xe7\x6e\xc4\xf7\x41\x8c\xa9\x9b\xfd\x92\x16\xe5\xfb" + + "\xc1\x5a\xa9\x3d\x71\x28\x1a\xb1\x1a\x43\xf1\x22\x53\xce\x20\xc9\x79\x6b\x18\xaf\xaa\xc2\x25\xa0\xf0\x45\x09\x03" + + "\x6f\x18\x33\x1a\x0e\x2f\x75\x35\x5f\xa1\x3e\x83\xab\x3e\x71\xf9\xa9\xe1\x72\x95\x65\xc3\xc7\x8f\xbf\xaa\x6d\x07" + + "\x9f\x1f\x4f\x09\xbc\x8b\x59\x8c\xe5\x3f\x57\x3a\xd3\xd5\x3a\x4e\x93\xc2\x49\x9c\x6d\x52\x1b\xbc\x17\xe8\x78\x16" + + "\x33\x21\x73\xaa\xc5\x08\x7f\xdb\x02\xf4\x2d\x87\x60\xe3\x12\x2f\xc0\x56\xf0\x29\xe0\x52\x52\x3e\xea\xcd\x3f\x68" + + "\xf5\xee\xb4\xae\x9d\x3d\x16\x04\xc4\x58\x74\x3a\x1e\xf1\xf1\xaf\x20\x17\x66\xe4\xab\x17\x66\xdf\x74\x6d\x82\x68" + + "\x23\x8c\x6e\x73\xf9\x49\xc9\x89\x4a\x1b\x4e\x99\xa2\x2c\x1b\x62\x57\x1b\xa1\x1f\x7b\x9b\xc2\x70\x35\xdc\x23\xe9" + + "\x84\xbc\x1b\x24\x95\x68\x65\xa7\xc4\x80\x6f\x82\x85\xec\x8f\x05\xaf\xdd\x86\xf8\x79\x94\x09\x84\xcf\x9a\x36\x9c" + + "\xc3\xf9\x02\x65\x7c\xfd\x89\x67\x6e\x38\x99\x03\x6c\xde\x0b\xf6\xfc\x81\xbd\x0d\x7d\x13\x86\x43\x81\xe6\x73\xdc" + + "\x02\x2a\xe9\xca\x25\x04\x6d\x14\xae\x21\x45\x29\x59\xa2\xd5\xb5\xc8\x74\x1e\x5d\x76\x87\x87\x5f\x3d\xf1\xa9\x83" + + "\x42\xf7\xdb\x70\xdc\xd6\x62\x95\xa1\x93\x73\xd0\x38\x0c\xac\x72\x30\x7d\x67\x81\xa9\x2b\x23\x30\xb1\x70\xa9\xc8" + + "\x8e\x46\x45\x8e\x98\x1e\x60\x5f\x3e\xce\xe2\x08\x1f\x1c\x45\x6f\x83\x64\x12\x11\x17\x18\x6d\x48\xe8\xca\x79\xfb" + + "\xd1\x6d\x79\xd2\xd8\x84\x2f\x6b\xd1\x8b\x0e\x2f\xff\x13\x0e\x91\x65\xb0\x3c\xae\xa0\x29\x28\xf5\xa8\x52\x60\xbd" + + "\x44\x1b\xbe\xa7\x73\x53\x95\x2b\x3a\x9d\x8c\x44\xe1\xb9\xae\xdc\x99\xe6\x54\xea\x2e\xa0\xd4\xca\x41\x63\x16\x14" + + "\x28\x99\x30\x62\x75\xfa\x1e\x23\x70\x80\xab\x81\x13\xbe\x32\xa8\xb6\x0b\x92\x3b\x8d\xc4\x57\x07\x94\x45\x9d\xf3" + + "\x12\xa0\xf1\x70\x14\xa5\x0d\x08\xea\x39\x8c\x84\x2b\xeb\x40\x4f\x3d\x7b\x33\x12\x7f\x70\x8a\xfa\x99\xce\x53\xff" + + "\x0b\x75\xa8\xfa\x0a\xde\x03\xa8\x3a\xcf\x3a\x23\xf1\x87\x48\x75\x39\x12\x1d\xaf\x86\xe8\xf4\x48\xcc\x1e\x91\x13" + + "\xe4\x2d\x95\x0e\x10\xed\x6d\xed\xeb\xfd\xf0\x75\xa9\xae\x74\xb1\x32\xbc\xe9\xed\xfd\xfd\xe3\x8e\x0f\xc4\xad\x4f" + + "\xb2\xef\x2a\xc3\xd8\x49\x73\xe1\x87\x80\x25\x41\x99\xc7\x62\x96\x4d\x63\x1b\x64\xb4\xfd\x04\x97\x77\xa7\x5f\x2d" + + "\xae\x48\x09\x7d\xa9\xaf\x54\xce\x14\xb8\x2a\x5c\x72\x4d\x71\x3d\x57\xa8\xcf\xe3\x52\x34\x45\xe9\x8a\x39\x05\xa3" + + "\x3f\xb9\x40\x7d\xbf\xfb\xb1\xd9\xf0\xdf\x5f\x06\x7f\x7f\x85\x7f\xd7\xaa\xcb\xdf\x39\xbf\x38\x0f\x29\x9e\xf0\x7f" + + "\x8c\x03\x27\xeb\x60\xf0\x0e\x71\x59\xf6\x01\x26\xf3\x8a\x95\xc9\x61\xf9\x69\xc7\x2b\xf4\xe0\x1c\x11\x39\x20\xe8" + + "\xfb\x92\x18\xdb\xe0\x3d\x7c\xe4\x52\x57\xa0\x73\xa6\x43\xca\x33\xfe\xf4\x82\x26\x77\x48\x6e\x46\x54\x4a\x23\xaf" + + "\xe6\x9b\xc1\x60\xc0\x39\xfc\x1e\x8b\xeb\xb9\xac\x44\xad\x8c\x06\xbd\x7b\xe2\x13\x5b\xf8\x82\x0f\xe7\xe9\x23\xf8" + + "\xff\x1c\x6b\x63\x9c\xa7\xfb\xdd\xe3\xa0\xb7\x2f\xc5\x4d\xde\x9f\x16\x8b\x65\x91\xb3\xb7\xe6\x4d\xbe\xbf\x0e\xba" + + "\x81\x8f\x8e\xe1\xf3\x0d\x7f\xf1\x95\x30\xfa\x32\xa7\x96\xfe\x4b\x7a\xf7\xb5\xb8\x69\x7f\xf1\x17\xf7\xd1\xba\xfe" + + "\xea\x1b\xb1\x6e\x7b\x8e\x56\xf0\x76\x04\xad\x27\x54\xa9\x6f\xf7\xe1\x45\xb0\x45\x4f\xd8\x90\xd2\xc9\xab\x79\xb0" + + "\xfb\xc3\xa1\xc8\xab\x79\xff\x91\xe0\x2a\x6d\xc6\x2d\x99\xde\xd3\xb5\xec\x50\xc2\x1b\x3e\x43\x5e\xdf\x0e\x78\x10" + + "\xe5\x98\xf4\x03\x70\xf1\x81\x1b\xe4\xcc\xb1\x1c\xb3\x5c\x28\x2c\x25\x04\xb7\x42\x10\x94\x32\xc0\xcd\x77\x1f\x96" + + "\x6a\xa1\xb0\x1a\x14\x6a\x8e\x50\xcb\x31\x44\x6a\x30\x95\x98\xb7\x0e\xc4\x13\xa0\x4c\xd9\x1a\x4e\xdb\xc1\xf0\x30" + + "\xc4\xe8\x2f\x01\x56\xfb\x89\x3f\x43\xc7\xfe\x08\xed\xb3\x9f\xcd\xd9\xd7\x78\x9c\x0e\xbb\x62\x24\x1e\x8b\x47\xe1" + + "\xe9\x43\x58\x01\xee\x74\xfc\xe1\xb3\x8f\x8b\x34\xed\x04\xb9\x6a\x5d\xb7\x38\x9e\xed\xe3\x2f\x17\xee\x2c\x7d\x73" + + "\x41\x29\x32\xdb\x7a\x09\xc8\x08\xd5\x19\xc5\x54\x45\x70\xad\xcc\xf5\x44\x57\xbe\xa2\x15\x9d\xc3\x46\x6e\xe1\x70" + + "\x53\xee\xde\x93\xb6\x33\x1c\x9f\x5a\x57\xf2\x66\xdb\xb1\x45\x81\xe7\x06\xee\x3b\x76\x22\x70\x35\xe9\xc6\x16\x49" + + "\xbe\xbe\xc0\xf8\x2d\xa6\x37\x4d\xac\x8c\x0e\x39\x6b\xca\xfc\x4c\x1b\x0a\x1f\x9b\xd3\x2d\xb2\x67\x3d\xc7\xbc\x29" + + "\x96\x9a\xfa\xc2\xcd\xd2\xf4\xb5\xa9\x9f\x82\x10\x40\x9e\x0c\xde\x41\x5a\x43\x1f\xc0\xaa\xd4\x4b\x5e\x71\x58\x01" + + "\x0b\x69\x96\x5b\xfb\xf6\x2d\x72\x4d\x40\xc2\x22\xb7\x1e\x5e\xb2\x7b\xe3\x13\x5a\xa3\xa7\x51\x65\x47\xa3\xd4\xbc" + + "\xb6\xe0\x59\x52\xaa\xe9\xaa\x34\x88\xeb\x4c\x7f\x12\x6e\x18\x66\xc2\xb5\xbd\xf6\xe8\xd2\xec\x46\x9d\xcb\xf4\x0a" + + "\x2b\x71\xb2\xd1\x19\x18\x2c\x31\xcd\x0a\x64\x5d\xe8\x6e\x9e\x2b\xc3\xf0\x0b\x7a\xb7\x7d\xda\x62\x97\x89\xe8\x74" + + "\x3b\x3d\xff\xd8\x15\xef\xe5\x2f\xba\xa2\x5f\x7f\x19\x5a\x6d\x61\x26\xdc\x92\x92\xb2\xa8\x4b\xf2\x2f\xc5\xee\xc3" + + "\x6d\x3a\xf0\xdb\x74\x10\x52\x32\x3b\xce\x51\x63\x4f\xdd\xb0\xdb\x1a\x07\x38\x44\xe9\x3f\xc8\xa9\x80\xeb\xa9\x19" + + "\x56\x70\x59\x66\x8b\x4b\x6b\x11\x69\xb2\x2e\x09\x89\xf3\x7b\xb5\xdb\xde\xbd\xeb\x66\x7c\x12\xca\x0b\x96\xbb\x72" + + "\x8c\xc9\x7d\x5f\xe0\x2a\x4e\x24\xf2\x46\x2e\x54\x23\x1d\xae\x15\xb2\x38\x20\xb9\xde\xee\x63\x0c\x41\x4b\x02\xae" + + "\x30\x68\x2e\x1a\xd2\x86\x62\xb1\xda\x27\x4c\x7c\x20\x42\x8f\x17\x71\x6b\x15\x41\xdb\x82\xfe\x1a\xac\xb5\x0d\x7b" + + "\xba\x23\x39\x18\x0e\x6f\x5f\xd9\x0b\xa5\xc6\x60\x70\x49\xb1\x96\xe0\xa9\x08\x5e\x4b\xac\x4e\x97\x8b\xb1\xf0\xe5" + + "\x7a\xcf\x82\xb6\x9c\xb0\xf4\x28\xa6\x8d\xf6\x2b\xab\x12\x4f\x7c\x37\x51\x4d\xa1\xe4\xd7\x6d\x45\xe1\xa2\x11\x5a" + + "\x8a\x0a\x6d\xbe\xe8\x76\xc2\xf3\xe9\x67\x17\x85\x81\x7d\x0c\xaa\x3c\x2f\x26\x2a\xa1\x58\x17\x84\xae\x87\x42\x9d" + + "\x05\xbc\x7f\xed\xeb\x5c\x34\x34\x82\x9f\x16\x89\xc9\x99\x1a\x3a\x5d\xcb\x99\xda\x1d\xab\xf1\x84\x0d\x16\x9c\x14" + + "\xa5\x05\x17\xd0\xec\xb1\x85\xb0\x26\x76\xde\x15\x4c\x4a\xba\x12\x2f\x49\x81\x2c\x13\xab\xb3\xe3\x84\xe0\xb6\x3d" + + "\xa9\x5d\x9a\xd0\xb4\x53\x21\x90\xed\x8e\x3b\x71\xc2\x6c\xce\xf5\x6c\x1b\x35\x3e\x0f\x7c\xc0\x82\x70\x42\x1c\x72" + + "\x7f\x1c\x5c\x2c\xed\xc3\x8d\x3b\xe2\xd8\xcf\x70\xcc\xd0\xb0\xfe\x71\x8d\xa9\xf9\xc6\xbb\x1f\x69\xfc\x2b\x36\xa6" + + "\x16\x4e\xd3\xe7\xa9\xb9\x85\x3a\x95\x6f\x6f\xef\xe2\xd1\xa7\x75\xf1\x2c\xf0\x20\xa8\xf5\xf0\x45\x6b\x0f\x4c\x27" + + "\xfb\xf8\xdc\x7b\x7e\x7f\x6c\xf9\xff\xc0\xce\x12\x96\x57\x2c\x88\x29\xff\xf1\x67\xcd\x6a\xd3\x0e\xf4\xcd\xa6\x36" + + "\xc1\x03\x46\x4e\x3b\xc5\x7d\x8c\x2d\xf5\x1f\xec\x8b\x4e\xbf\xe3\xc6\xf0\x5e\x7e\x0d\xaa\xd5\x10\x8b\x2a\xd4\x69" + + "\x81\x24\xe3\x93\xf1\xb1\xe4\xdb\x13\x19\xb0\xb9\x21\x35\xe3\xca\xa2\x14\x3f\x5d\x63\xee\x77\x2d\x73\xcf\xac\xd9" + + "\xac\x28\xaf\x65\x99\xd6\x1a\xf7\xbf\xb4\x4d\xa1\x73\xdb\xb6\x98\xb1\x62\x0e\x45\x2a\xe2\x4e\x49\xa0\xea\xd4\x28" + + "\x23\xb9\x59\x39\x97\x4f\x9c\x21\x61\xce\x71\x70\xc1\xdb\xf2\x33\xc8\xdf\x8f\x50\xc0\x48\xf2\xee\xa7\x5d\x14\xbb" + + "\xbb\xb5\x5a\x2b\x2e\x29\xbb\x35\xfb\xef\xd4\x4d\x57\xce\xe0\x75\xb3\x08\x4f\x35\x7a\xf1\x00\x49\xed\x09\xac\x72" + + "\xff\x82\xfe\x46\x3d\x25\xe6\x3d\xa5\xbf\x31\xe9\x60\x4f\x98\x4a\x52\x39\x7d\xfc\x5f\xaa\xb1\x70\x17\xc1\x1b\xe0" + + "\x65\xc1\x79\x2c\x3a\x81\x6a\xaa\x23\xda\x34\x17\xb6\x13\x97\xb9\xab\xb6\x22\x9f\xb7\x9e\x6e\x72\x06\xff\xdd\x97" + + "\xa2\xfb\x68\x65\x94\x2d\x1b\xbf\x0b\x0b\xde\xdb\x13\xbb\xd4\x83\x23\x30\x51\x46\xa7\x80\xf7\xc2\xcd\x19\x25\x41" + + "\x4d\x4a\xe0\x7f\x1a\xb5\x28\x6d\x63\xb2\xa9\x13\x0c\x02\x97\x57\xa7\x5f\x05\x20\x85\xcf\x77\x02\x7d\xeb\x91\x7f" + + "\x5a\x57\xc7\xc2\x3f\x67\xf8\x71\x14\xc5\xed\x46\x64\x70\x70\x9e\xb4\xbb\x58\x04\x00\xdf\xc8\x37\x6b\x8f\xfc\xde" + + "\x69\xf3\xbf\xe5\xff\xdd\xfa\xbf\x83\x3f\x91\x3d\x24\x3d\x26\x15\x0a\xb3\xfa\xf6\x11\x80\xab\xff\x08\xb3\xcf\x5f" + + "\x2b\xf4\x5f\xb1\xa9\xfd\xd2\x22\x57\xc2\x14\x5d\xdf\x0b\x22\x94\x18\x0b\x42\x25\x97\xb4\xb4\x03\x7d\x74\xa8\x6c" + + "\x13\xb6\xd8\xdb\x8b\x51\xca\xcf\xcf\x4f\xa9\xc5\xcb\xd8\xdf\x31\x7e\xa8\xb3\x00\x4d\x39\x99\x95\xd7\xb2\x8a\x91" + + "\x7d\x06\x3b\x4f\x8f\x2e\x8e\x22\xd4\xc8\x8b\xbc\x0f\x28\x85\x47\x16\x71\x22\x19\x0c\x06\x5d\xcc\xdc\xaf\x0c\x27" + + "\xdb\xc7\x8c\xfe\x45\x2e\x7e\xa3\xde\x7e\x8b\xb0\xc5\x8e\xbf\xb7\x27\x1c\x9e\x86\x7b\x41\xe6\x92\x0f\xe2\x37\xc0" + + "\x91\xdf\x48\xca\xc1\x0c\xce\x78\x82\xb2\x35\x26\xe3\xb1\xf9\x43\xdd\x57\xfe\xf8\x0a\x9b\x93\x2c\xcc\xda\xbe\xd9" + + "\x88\xa4\xf9\x74\x2c\xfe\xb8\x0d\xca\x20\x4d\xf9\x73\xdf\xd7\x19\x6d\xca\x85\x2b\x02\x16\x60\x31\x65\x54\x1e\x73" + + "\x0a\xfc\x03\x12\xd9\x53\x5d\x96\xab\xdc\xa0\x3b\x26\x3e\x3f\x0c\xbe\xb2\xe9\xa1\xef\xfc\xe0\x71\x6d\x18\x3e\x0d" + + "\x34\x9a\x4b\xbd\x16\x94\xe4\x3b\x0b\xde\x87\x9b\xd5\x38\x54\xfb\xfb\x51\x47\x61\x1a\x0c\x3e\x6b\xc8\xcd\x46\x48" + + "\xfe\xbd\xcc\xb2\x89\x74\x31\x3a\xe8\x09\x16\x6e\x0c\xfa\x26\x03\x6a\xf9\xaf\x12\x5e\x66\x08\xa3\x03\xe4\xfc\xb0" + + "\xe1\x60\x59\x2c\x93\x6e\x37\xa6\x39\xe4\x7c\x36\x57\x39\x25\x8b\xed\xd9\xa2\x0d\x9c\x9a\x36\x40\x25\x94\xab\x26" + + "\xa5\x92\x1f\xfc\xb7\x4e\x8f\xdf\x12\x71\xb0\xbf\x8f\xd3\xb1\xeb\x85\xe7\xb5\x4b\x25\xc6\x1e\xb7\xe3\x70\x54\x78" + + "\x73\xa2\x4b\x00\xbb\xbb\x08\x29\x04\xce\xe6\xa8\x8d\x4c\xdc\x46\x47\xe7\x67\xa3\x5a\xd0\x58\xb9\x18\x92\x7a\x82" + + "\x6e\x77\x8a\x43\x75\x81\x3d\x31\x7b\x7b\x5c\x55\x41\x8c\xc9\x86\x5a\xc7\xf6\xfa\x33\xc4\xf5\xae\x5d\x5e\xd7\x23" + + "\x5c\x0d\x11\x43\xc0\x44\x08\x7b\x58\xa3\x04\x6d\x54\xc0\xde\xe5\x40\x3e\x5a\x9e\x27\x54\xd8\xf8\xb8\xcf\xd7\x48" + + "\xe2\xb5\xab\xcd\x2a\x63\xce\xea\x65\xdd\xdf\xb3\xa2\x58\x62\x4a\x9b\x09\x2a\xd3\x09\x21\x3f\x82\x8d\xff\xe4\x19" + + "\xf8\xd7\x70\x99\x7d\x5f\xfe\x9c\x4b\xca\xe3\x70\x8c\xb2\x68\x01\x82\xfd\xaf\xec\x41\x11\x20\xa0\xc9\xe9\x5c\xa8" + + "\x7c\x5a\xac\xf2\x4a\x95\x1e\xbd\xea\x17\x68\x2b\xe5\x85\x05\x13\x24\x62\x54\xaa\x3f\x8b\x51\x29\x3e\x29\xcd\xe3" + + "\x71\x1b\x82\xc6\x9f\xd5\x6d\x47\xb1\x71\x9c\xda\x6f\xe0\xdb\x96\x3b\x6e\x38\x14\x27\xf9\xb4\x28\x97\x45\x29\x2b" + + "\x02\x4c\x31\x9b\x19\x55\xf5\xe0\xef\x9c\x39\x71\x79\x29\x75\x6e\x2a\x31\x5d\x4f\x33\xc5\xc5\x6b\x02\x74\xef\x8f" + + "\x91\x65\x75\x13\x08\x92\xe0\xe3\x94\x89\xbd\x05\xb0\xd0\xb3\xff\x15\x30\xbc\x07\xe8\x46\x08\x4f\x87\xfc\xf4\xd9" + + "\xd8\x3a\x4a\x04\x93\xbe\xfd\xa8\x4e\x95\xf4\x4a\xbd\x46\x26\x70\x58\x22\xbd\xeb\x53\x76\x3a\x4c\xa6\x86\xfe\x76" + + "\x18\x70\xac\x73\x1b\x72\xec\x92\x4e\xb4\x06\xac\x3b\x83\xe2\xf0\x41\xd8\x9d\x2f\x25\xf6\xb6\xd4\x45\xa9\x2b\xfd" + + "\x77\x2c\xae\x82\x15\x0b\xc3\x60\x66\x9d\xd3\xb3\xe9\xca\x54\xc5\xc2\x85\x23\xc2\x3c\x64\x9a\xaa\x94\x22\x25\x57" + + "\xcb\xa5\x2a\xb1\x5d\xa6\x2a\x2e\xbe\x6c\x6b\x82\x04\x5a\x7b\xa3\x2a\xb2\xc4\x19\xa1\xf3\xb9\x2a\x75\xc5\xba\xcd" + + "\x30\xd8\x96\x6a\x58\x5c\x5a\xad\xb2\xf7\x02\xe3\x46\x67\x56\x17\x87\x28\x8b\x6f\x7c\xbf\xf6\x65\xdd\x43\xcc\x9f" + + "\xf5\x58\x2f\xde\x59\xe5\xec\x03\xa3\x6c\xc8\x2f\xb9\x17\xf1\x18\x71\x90\x28\xd9\x5c\xc5\x42\xae\x31\x99\x5d\x68" + + "\x64\x05\x2a\xa5\xf3\x94\x3c\x5f\x60\xb1\xf6\xab\x40\x23\x5d\x2a\xab\x54\xac\x0a\xfe\x98\xc3\x55\x50\xa9\x68\x91" + + "\xc2\x7e\xf9\x7e\x65\x2a\xa0\x82\x9c\x85\x3c\x2d\x42\x0f\xce\xb8\x54\x4d\x5d\x53\x3e\x8b\x72\xcb\x37\xf4\x9d\xdf" + + "\xad\x2a\xb1\xb0\x71\x20\x36\x5f\x2c\xf0\xb4\x45\x96\xa2\x51\x4a\xa2\x0a\x34\x1c\xcd\x7b\x46\x06\xfc\x34\x6c\x13" + + "\x12\x05\x8b\xc5\xf6\xdf\x4e\x27\xc0\xe8\x8b\x38\x29\x57\x6d\xc7\x06\xe4\x65\xf7\x96\xb3\xd3\x26\xed\x1b\xd8\x75" + + "\xa1\x83\x9f\x95\x02\xdf\x66\x14\x48\x6f\x9c\xc4\xc4\x11\xb9\x29\x67\xc1\xa7\xef\x1a\xa9\xef\xc3\xec\xf7\x4e\x75" + + "\xed\x28\x45\x7b\xe9\xb5\x9d\x1d\x9d\xc2\xb5\x51\x0b\x77\x08\x26\x96\x86\x95\xd7\x6c\x2a\x7b\x98\x9d\xa0\x74\xf6" + + "\x76\xfe\xfe\x59\xeb\x77\xae\x5a\xa7\x0f\x99\xdc\x2a\x48\x87\x18\x41\x02\xf2\x01\x2e\xd7\x04\xb4\xaa\xd5\x24\x34" + + "\xcb\xeb\xba\x6a\x3e\x7f\x23\xe7\xa9\xf2\xb6\xa8\x54\x5e\x69\x4c\x22\x3b\x2d\x40\x32\xbc\x09\x4f\x72\x27\x2f\xaa" + + "\xce\x68\x7b\xcd\x82\x9a\x46\x1b\x3d\x46\x34\x5f\xed\xf6\xe5\x92\xcb\x24\x15\x38\x80\xce\x1c\xb1\xf3\x09\x89\xe0" + + "\x1c\x01\xb3\x6a\x13\x6a\x02\xdb\x58\x95\x54\xee\xda\xb6\x46\x55\xab\x11\x14\x25\x38\xd1\xb9\xe4\x6a\xf6\x71\xc2" + + "\x09\x97\xea\xcc\xa7\x37\x73\x8f\x68\x23\x30\xe2\x82\x26\xf2\xd1\xca\x6b\x9e\x76\x84\xe6\x00\x55\x86\xe7\xf6\xd8" + + "\x76\xfe\x71\x9c\xbe\x53\xb3\x11\x64\x6d\xdb\xd9\x59\xe5\x1e\xc5\x79\x4c\xdb\x17\xf9\x3b\xdf\x2c\xb2\x9e\x38\xbb" + + "\x08\x90\x5d\x73\xf9\x84\x5a\x85\x87\xb6\x1a\x0f\xbe\xf7\xc9\x5a\xfc\xc6\xfd\x5b\xb9\x6f\xcb\xc1\x20\x36\x89\x3d" + + "\x7a\x5c\x07\x58\xd9\x21\x3c\x3e\x78\x1c\x74\x5c\xd9\x41\x5f\xb0\x0e\xa1\x05\xfd\xf9\x8e\xed\xb6\x9b\x1d\xb6\x02" + + "\x0c\xb7\x9b\x2c\x4a\xa1\x72\xc2\x81\x4a\x53\x70\x52\x00\x2b\xe7\xe9\x79\x54\x53\x4f\xb9\xfa\xb1\xc0\x1d\xc6\xc6" + + "\x89\xae\xbd\xf4\xe7\xd2\x7c\xc6\x29\xf8\xb4\x24\x93\xcd\x22\xdf\xd4\x2c\xf6\x5f\x6f\x99\x8c\x75\x0c\xdf\x3e\xa3" + + "\x28\x23\xe0\xa7\xcd\x26\x69\x3a\x8f\xb1\xeb\xf7\xc0\x7b\xaa\x6d\x36\x75\x57\xad\x50\x3f\xcb\xa3\x3e\xf3\xe1\x91" + + "\xf1\xc4\x87\x43\xd1\xf9\x85\x1d\x67\x82\x10\x7b\x8c\xea\x24\x47\x58\x76\x8c\x92\x62\x94\xc9\xfc\x32\xe9\x3a\xd8" + + "\xf0\xe7\xda\x70\xd1\x01\x53\x64\x5c\x63\x15\x28\x0d\xf7\xf4\xd0\x08\xf8\x6c\x25\x2f\x95\xad\xb5\x41\x95\x98\x15" + + "\x90\x14\xf5\xfb\x4a\x66\xd6\x56\x4a\xe1\x85\x33\xad\x4a\xf1\xc2\x3a\x9e\x17\xa5\x98\xa8\x4b\x9d\xe7\xd0\x1a\x39" + + "\xa2\x7a\x4b\xa1\x17\x0b\x95\x6a\x59\xc1\xd8\x94\xbb\x8a\x26\xdc\xe9\x77\x06\xdc\x0b\x16\x03\x03\x2c\xc4\xa4\x62" + + "\x33\xf1\xc2\x71\xb0\x77\xcd\x14\x56\xb6\x54\xe5\xac\x28\x17\x2a\x6d\x30\x87\xd9\x3a\xec\x3d\x9a\x51\x9c\xb5\x9d" + + "\x3d\x27\xa9\x02\x8a\x1f\x02\xbd\xdc\x3b\xdc\xc5\xc7\x38\x4c\xf8\xaa\x4f\x37\x00\x62\x1b\xfc\xae\x63\x5a\x80\x4c" + + "\xf0\x3a\x24\xff\xf8\x9b\xd6\x64\xb3\x75\xd9\xf9\xf8\x89\x7b\xa6\x64\xb7\xf4\x4f\xc9\xe8\x85\x1d\xa0\xe1\xa9\xbb" + + "\xcd\x11\x22\x62\xf8\xa0\x3d\xb1\x7b\x34\x95\x30\x32\x17\x9f\x8c\xf1\xc5\xbf\x60\x4c\xbd\xcb\x62\x05\x4f\x7e\x90" + + "\xf9\x25\xd3\x8d\xb4\x88\xf3\x0b\x24\xf6\x7d\x50\xcf\x2f\xf2\xed\xb7\xee\xfd\x38\xd3\x51\xf4\x28\x36\xc9\xdd\x2c" + + "\x32\x3c\x14\x64\x95\x6b\x69\x40\x2f\x6b\xd2\x6d\x30\xbc\xfd\xb3\x6d\xa1\xb1\x55\x97\x3e\x18\x13\xdc\xec\x68\xf8" + + "\xa9\x3b\xea\xf8\x86\x8c\x24\x6c\x68\xaa\x0b\x4d\xa2\xee\x32\x5e\x53\x99\x77\x23\xed\x78\x28\x43\xc7\x9c\x66\xd3" + + "\xf6\x12\x90\x93\xd7\xda\x4c\x55\x96\xc9\x5c\x15\x2b\x62\x57\x2a\x59\x5e\xaa\x2a\x92\xce\xa2\x4d\xe3\x4a\x1e\x73" + + "\x31\x16\xd7\x98\x10\x6b\x90\x15\x53\x69\xf3\x52\xd4\x1e\x01\x5b\x3b\x8f\x50\x01\x3f\xa5\xa8\x12\xe7\x14\x60\x2d" + + "\x47\x44\x2b\xd3\x58\x5a\x2c\x8b\xe2\x8e\xd9\x04\x40\xb7\x41\xbc\xaf\xec\x6d\xe6\xba\xc0\xec\x8e\x9f\xd5\x47\x4b" + + "\x42\x49\xaa\x9f\xed\xde\xcd\xa5\xf9\x1e\x93\x46\x52\x69\x90\xf8\x61\x42\xf1\x22\xbb\xbb\x89\xaf\xce\x65\x71\x6e" + + "\x5e\xaa\x19\xfc\xf8\x07\xbd\x92\x13\xd4\xb3\xc4\x86\xe1\x20\x11\x9d\x8f\xd3\xc1\xa5\xd8\x44\x4f\x9f\xb2\x98\x81" + + "\xcb\x6e\x85\x72\xbc\x4f\xb4\x61\xe1\xe2\x32\x45\x7d\x7e\x6f\x4e\xed\xee\x3a\xb3\x39\xd6\xb6\xf6\x85\xda\x0a\xf1" + + "\xe2\xf4\xf4\x49\x6f\x5b\x32\x3a\xcc\x07\x61\x5f\x01\x07\xeb\xb2\xd3\xfd\x1b\xd2\xd2\xd5\x7c\x47\xee\xb0\x33\x45" + + "\x08\x9c\xf8\x6f\xe2\x0a\x75\x6c\xa5\xe3\x21\xba\x4e\x93\xe4\xdb\x52\x8a\xbd\xb0\xb1\x5d\x5f\xcd\x2f\xc0\x3e\xbe" + + "\x13\x98\xcf\x5d\x91\x14\xf4\xff\x77\x85\x4d\x16\xf2\x83\x32\x0e\x72\xfd\xc9\xba\x1f\x14\x1e\xc5\x6b\x1a\xa7\x81" + + "\x81\xc1\x54\x07\x80\x2a\x95\x53\x07\x61\x2a\xc3\x1a\xc1\xf1\x74\xbb\xf6\xc2\x2d\x03\x51\xb9\x55\x8e\x8a\x56\xdb" + + "\x8e\x41\xc3\xa1\x60\xbe\x89\x51\x7d\xb1\xac\xd6\x77\x42\xe0\x63\x17\x31\xf6\x10\xdc\xc4\x68\xea\xa3\xfc\x99\xda" + + "\x90\x9b\x15\x71\x1f\x96\x91\x4a\x0e\x51\x75\x6b\xb3\x8d\x52\x70\x67\x02\x5c\xd9\x48\x3c\x39\x12\xd3\x54\x56\x72" + + "\x24\xbe\x3c\x12\x70\xe1\x56\x6b\x51\xaa\xd9\x48\x7c\xd5\x75\xc9\x48\x05\xa6\xd1\x04\x66\x62\xb2\xe6\x52\xd5\x22" + + "\x61\xcf\xf8\x91\xf8\xe6\x68\x8b\x6b\xfc\x48\xfc\xe5\x48\xa8\x6a\x3a\x70\xf9\xe4\x1c\x45\x7f\x2a\xbe\xe6\xba\xf8" + + "\x36\x49\x6e\x10\xef\x96\x3c\xee\xda\x72\x37\x72\xb9\x54\xb2\x44\xd1\xee\x4f\x0f\x31\x68\xc9\x25\x0d\xd3\x6a\x98" + + "\xa9\x43\x53\x62\x4b\xa6\x9f\x26\xc9\x20\x0c\xfa\x28\xf5\xd9\x8d\xf4\x5e\x8c\x17\x17\x51\xa8\x43\x80\x43\x4c\xae" + + "\x87\x51\x95\x4b\x10\x40\x94\x4c\x55\xf9\xd1\xc1\x4a\x6a\x67\x03\x96\x23\x17\xad\xda\x29\xa5\xa3\xff\xd1\x0e\x29" + + "\xbf\xcd\xa7\x74\xc8\x65\x1d\xef\xbc\x7a\x3f\xb1\x8e\xe4\xa7\x97\xd2\xb4\xa3\xb6\x56\x98\x8c\xe7\x07\x07\xe1\xee" + + "\xd9\x01\x72\x1e\x35\xce\xfd\x1d\xa6\x00\x3f\xad\x80\xb2\xf8\xb9\xe1\x88\xf8\x92\x5e\xb7\x94\xf6\xe1\xac\xb9\xea" + + "\x5a\x00\x53\xf8\x55\x10\x4d\x8f\x3c\xb4\x11\x89\x1a\x5c\x0e\x7a\xa2\x63\x94\x2c\xa7\xf3\x4e\xd7\x9e\x15\x14\x50" + + "\xda\xc6\xa3\x4e\x13\x91\x70\x58\x70\x0b\xab\x88\x7e\x20\xdd\xae\xf3\x9b\xda\x6c\x70\xdc\xb6\x05\xd2\x12\x1a\x68" + + "\x6a\xf3\xf9\xf4\x75\xde\x9f\x16\x59\xe6\xf3\xe3\x76\xf0\x88\x76\x46\xdb\xaa\x6a\x36\x4a\x2e\x31\xa8\xcf\xc4\x81" + + "\x2d\x45\xee\x04\x5d\xf4\x68\xf9\x78\x4f\x51\xa9\xc9\x9e\xa8\xe5\x9b\x74\xfd\x3b\xbf\xd6\xc3\xc6\x40\xea\xf7\x7f" + + "\x76\x98\x16\xa5\xbf\x1b\xd0\xbd\x79\x2a\x0e\xc4\xb1\xff\xb9\x6f\xa7\x32\xaa\xeb\x57\x83\x19\x5d\xa9\xfc\x5f\x5e" + + "\x3a\xea\xc5\x84\x63\xce\x89\x9c\x1e\x09\x2d\x9e\x72\x4b\xf8\x7b\x7f\x2c\x1e\xd7\x1c\xaa\x6d\xa9\xd0\xb6\xe0\xcc" + + "\x48\x11\xc6\x0d\x6b\x73\x2f\xd2\xf4\x4f\x9b\xfa\xe1\xff\xec\xd4\xb3\x7f\x1a\xdf\x5a\x10\xc1\xae\xe1\x33\xf0\x20" + + "\x5e\x6d\xbf\xaf\xd1\x24\x75\xf4\xe7\x2e\xf2\xf2\xff\xaa\x45\xee\xef\x87\x9b\xfa\xa7\x2c\x94\xab\x9a\xbb\xd0\x3c" + + "\x7f\xfb\xe6\xd5\x1c\x8b\x38\xd4\xee\xe4\xdf\xb9\xa0\x0a\xf0\xa5\x69\xca\xd5\x95\x83\x3b\xd8\x6b\xc4\x69\xd6\x1a" + + "\xb8\xcf\x3f\x44\x29\x53\x5d\x50\x3c\x1b\xfb\x13\x4e\x8a\x1b\xfb\x7b\xa6\x33\x65\xff\x5e\x4a\x63\xae\x8b\x32\xb5" + + "\xbf\xf5\x42\x5e\x2a\x1b\x08\xc7\x6b\x8e\xcd\x63\x1a\x2d\x07\x2d\x75\xab\x09\x08\xb7\xb5\x99\x98\xd5\x64\xa1\x2b" + + "\xdb\x7d\xa9\x8c\xaa\x3e\xb9\xfb\xb8\x2a\xb4\xeb\x9f\xca\xc4\x4a\xb3\x16\xcf\xdf\x9e\x50\x54\xaa\xd5\xd2\xe7\xea" + + "\x3a\x30\x03\x86\xf5\xd7\xdd\xc3\x84\x32\x78\x04\x26\x22\x9f\xbc\x61\x1c\x46\x08\x99\xda\x6e\x1c\xf1\x96\x05\x66" + + "\xc6\x71\x6d\x40\x8e\x8d\x72\xb1\x14\xce\x5d\x38\x78\xd2\xd4\xce\xc2\x2e\x94\x46\xfd\x98\x67\xeb\x20\xc6\x99\xd5" + + "\xd8\xac\xa1\xef\x51\xe8\x85\xe9\x91\x1b\x27\x60\x93\x29\xbe\x97\x65\x4f\x5c\x96\xc5\x6a\x69\x7a\xc2\xc5\x21\x92" + + "\x69\x93\xbd\x42\x38\x64\x83\x5d\x52\x9c\x3e\x38\xf2\x45\xa7\x2c\x7a\xd4\x3e\x0e\x52\xf5\xf3\x3a\x16\x07\x62\xc4" + + "\x8d\x6a\x91\xfb\x24\x91\xe0\x6c\x50\xcf\x4f\x43\xc0\x1b\x9a\x9a\x2d\xc7\xe0\x23\x25\x3d\x64\xed\x13\x9a\x88\x55" + + "\xcc\x50\x5f\x61\x3e\xc8\x17\x98\x3c\x99\xca\x5f\x95\xa6\x12\xe5\x0a\xaf\xf4\x20\x64\x4c\xa5\x28\x18\x2e\x38\x2f" + + "\x6f\x89\xe9\x96\x07\xea\x46\x4d\x5d\x7f\xb5\x74\x00\x71\xbc\x91\x4f\xf0\x31\x2d\x72\xca\x83\xc0\x56\x1e\x0c\xc1" + + "\x95\x68\xde\x41\x6d\x21\x35\x77\xeb\x85\x7f\x2d\x44\x5c\x08\x89\xbb\x33\x36\x1b\x6a\x11\x92\x07\x02\x0b\x93\x8e" + + "\x84\xf6\x15\x81\xd4\x8d\xf3\x68\x05\xa6\x44\x96\x00\x3c\x34\x42\x2b\x13\xe9\xf3\xc2\x95\xdb\xb7\xdb\xd6\x5f\xb3" + + "\xe0\x0c\x28\x93\x17\xd3\x30\x9a\x10\x4d\xcf\xe9\x13\xb3\x95\x1a\x39\x94\x74\x00\x7b\x21\x4d\x65\x53\xd5\x4a\xcc" + + "\x7a\xeb\x86\x46\xbf\x9a\xa5\x9c\xb2\x53\x04\x60\xed\xc8\xc3\xa7\x61\xd3\x12\x1d\x41\x42\x9a\xf5\xa3\xdb\x0e\x5f" + + "\x1f\x08\x54\xcf\x3a\xe6\x8e\xbd\xa5\xe1\x78\xa8\x75\x1e\x9e\xea\x18\x07\x1c\xd4\x7c\xc0\x18\x7b\xa3\xd4\x41\x87" + + "\x5a\x2a\x8f\xc1\x81\x43\x1f\xb3\xb5\xb6\xa7\x66\x1b\x87\x6a\xc1\x0e\xdc\xbd\x05\x6d\x7b\xd0\xbe\x09\x0c\x58\x47" + + "\x14\x7c\x4e\x68\x6e\xc9\x62\xa3\xed\xf8\xd3\xc1\xea\xa2\xdc\x9b\x07\xcd\x65\x81\x73\x1e\x36\x51\x5a\x0b\x8e\x77" + + "\xaa\xe6\xca\xde\xb0\x94\xd4\xce\x25\x3f\xa7\x48\x29\x6a\x8c\xee\xad\x0f\x4b\x45\xfe\x08\x40\x70\xc8\xb0\x1a\x26" + + "\x5c\xeb\x71\x2a\x75\x5b\xa9\x46\xb8\x84\x54\x4c\x15\x7d\xec\x7b\x40\xb1\x1c\x8d\xb4\xeb\x1a\xb9\x27\xac\xe2\x8e" + + "\x75\xf7\x81\xb1\x6c\x64\xf5\x05\xde\x33\xca\x0d\xc4\x9b\xc3\x01\x34\x9e\x86\x33\xb1\xeb\xc6\xd4\x91\xae\x7a\x5f" + + "\x53\xbd\x70\xe5\x82\xb8\xc7\x80\xe2\xfb\xfc\x15\x99\xca\x2d\xe5\xb6\x69\xb2\x89\xe4\xfb\xfc\x6b\x18\xe3\x51\xe7" + + "\x3e\x8f\x84\xde\xdf\xf7\x19\x90\x2c\xb1\xb7\x5d\x9d\xe9\x0b\x4a\xa9\x53\xcb\xe7\x14\xd0\xec\xdb\x68\xba\x32\x4d" + + "\x3d\xad\xb1\x78\x52\xf6\x82\x73\xde\x43\xb3\x57\xb0\x08\x72\x41\xf6\x0d\x06\xa9\xa6\xe4\x96\xc8\x85\xbc\x29\x72" + + "\x5b\xf7\x49\x8c\xe9\x53\xf4\x74\xe2\x20\x89\x30\xc6\xff\x3e\x66\x87\xcf\xad\x1a\x11\xfe\xc4\x24\x80\x61\x1a\x2a" + + "\x37\x08\xdd\x0a\xc7\x96\x3e\xc6\xfe\x59\x59\x61\xb0\x58\x0b\x27\xfd\x1b\x2e\x4b\x35\x55\x68\xcc\x0f\x9c\xda\x3e" + + "\xc9\xba\xdb\x66\x39\x68\xba\x97\x6f\xad\x11\xb6\xd9\x88\x06\x14\x1a\xda\x1e\x67\x28\x6e\x9b\x47\x53\x0b\xe4\x62" + + "\x15\x1a\xeb\x96\x59\x76\xc7\x9a\xcd\x27\x2f\x1a\x76\xb5\xc8\xd2\x17\x8d\xf0\x06\x9a\x4b\xae\xae\xad\xbb\x74\xe8" + + "\xbe\x67\x77\xee\x22\x70\x71\xfa\x05\x53\x0f\x3d\x44\x4f\x2d\x21\xcb\x89\xae\x4a\x59\xae\x9d\x97\xb7\x2b\xd1\x8f" + + "\x75\x9d\x31\x2d\x30\x55\x01\x9d\xa8\x5c\xcd\x74\x45\xce\x5c\x00\xed\xa0\x8c\x2a\x41\x3b\x32\xc1\x7f\xda\x2e\xfd" + + "\xb3\xdb\x14\x30\x0f\xdb\x76\x29\x72\x3b\xd8\xe2\x4f\x1f\x99\xa4\x68\x3b\x23\xbf\xd5\x7f\xf3\x22\x22\x37\xf7\x4f" + + "\x76\xfb\x3d\x8a\x60\x90\x58\xac\xa8\xb9\xba\xf3\x24\xad\xea\x09\x46\xe3\x86\xa8\x4a\xa9\xbb\xab\xfb\x97\x87\xf6" + + "\xa5\x45\x9e\xd8\x1f\x16\x93\x05\x62\x52\x83\xaa\x10\x0e\xed\x4c\xe1\x1c\x28\x26\x72\xfa\xa1\xbf\x2c\x8b\xa5\xbc" + + "\x44\xe7\xb7\xc2\xb9\x49\xc7\x76\x8e\xd0\xb9\xc0\xf6\x73\x26\x1e\xe3\x2a\xfd\x6c\x1e\x8b\x8b\xc0\x2b\xa4\xc5\xa9" + + "\xf8\x27\xb5\x32\x0a\x26\x32\xfd\x57\x26\xd2\x80\x1c\x49\x15\xf8\xe4\xa8\xb6\x7a\x66\x24\x16\x58\x9f\x88\xae\x4d" + + "\x80\xd5\x91\x90\x54\x57\xc2\xbe\x70\x36\xf7\x0f\x4a\x2d\x09\x0f\xec\x71\xf1\xbb\x57\x5f\xf9\x9d\x28\x5d\x8b\x9e" + + "\x69\x43\xea\xc8\x95\xb6\x05\xbd\xef\x73\x2e\xfa\xf8\x8a\x61\x78\xbc\xb6\x83\xf3\x2c\x6a\x39\x4b\xed\xd3\xd0\x4f" + + "\xf0\xf8\xb3\x28\x98\xf7\xb7\x73\xbd\x1c\x45\x34\x3d\x72\x2a\x0a\xf9\x9d\x12\xee\xcd\x8f\x1e\xf4\xcf\xd5\xd5\x13" + + "\x8f\xe1\x46\x38\xb8\x68\x40\x66\xb1\xca\x2a\xbd\xcc\xd4\x0b\x1a\xd2\x84\xcc\x06\x4f\xc3\xf4\x5a\xd2\xc4\xd5\xd9" + + "\x08\xdb\x36\x58\xf5\x5d\x6c\x43\xd3\xf9\xc7\x76\x80\x89\x71\x23\x67\xa5\xdb\xd6\x64\x62\xd1\x2a\xa6\x45\x9e\xaa" + + "\xdc\x60\xc6\x80\x40\xa4\x5d\xf6\xd8\x2f\xb5\x75\xcb\x22\xa7\xb3\x5c\x5d\xff\x1c\xf8\x9c\xb1\xcf\x5c\x7d\x95\xae" + + "\xf7\x90\x5f\x5a\xc8\xe5\x92\x79\xec\xa5\xd8\x0d\x53\xa0\xdd\x05\x81\x4f\xf0\x27\x23\xfc\x60\x89\x62\xb3\xe1\xb5" + + "\x7c\x0c\x49\xc2\x95\xb4\x55\x08\xe5\x9b\x05\xe7\xec\x31\x6b\x21\x97\x75\x35\x53\x74\xa4\xea\xd9\x48\xc3\x51\x1a" + + "\xdb\x61\x94\x3f\x6a\x4e\x52\xe9\x05\x9b\xed\x78\xbc\x65\x61\x2a\xfb\x9a\xfe\xce\x53\xfb\x77\x2d\x5f\x00\x85\x00" + + "\xba\xf6\x68\x87\xf5\x3f\x5b\x3c\x89\x83\xb6\xe3\x78\x4a\xfe\x85\x43\xb0\xa0\x77\x98\x41\xd0\x3b\xfc\xdc\xda\x7b" + + "\x9e\x6e\xe9\xbd\x6d\x19\x35\x64\xbe\xd3\x63\x92\x31\xbd\x9d\xd6\x00\xe6\x56\x6a\xb1\xec\x09\xdd\x0b\xfc\x26\x97" + + "\xa5\x7a\x2d\xc3\x7a\xb7\x30\x7c\xed\x49\xa9\xb0\x06\x85\x46\x9f\x18\xeb\xfa\xe7\x90\xd9\xf2\x50\x7f\x55\x95\xd0" + + "\xb9\xae\xb4\xcc\xbc\xd7\x24\x32\x46\x30\x3b\x67\x65\xbd\x21\xab\x34\xb4\x30\xec\x7d\x89\xe9\x47\xb6\xd2\x14\x74" + + "\x6c\x7a\xd4\x71\xab\xf2\xfc\xc4\xb1\x38\x73\x99\x60\x2f\xc4\xc8\x2f\x9b\x7d\x3c\xed\xcc\xde\x96\x8a\x0f\x44\x55" + + "\x60\x96\x54\xeb\xd4\xca\x1e\x8f\xe8\x48\x57\x5e\x51\x01\x4a\x38\x90\x70\x06\x61\x62\x7d\x4b\x53\xcc\x3a\x9f\xce" + + "\xcb\x22\xd7\x7f\x97\xce\x53\x9d\x3b\x39\xc9\x43\xd1\x1a\xa5\x71\xb7\xa8\xdd\x40\x72\x63\xdf\x25\x4f\x75\x10\x02" + + "\x38\xf8\x6b\x20\x3a\x01\xce\xd7\xb6\x8f\x5d\x9c\xa8\x3d\xaf\x8a\x07\xff\x71\xe5\xd3\x27\x5b\xd9\x91\xf3\x05\xda" + + "\xbb\x56\x46\xc8\x55\x94\x4c\x11\x54\xca\x48\x53\x94\x18\xf1\x88\x53\x0e\x90\x1c\xb3\xba\xf9\x7d\xb7\xa8\x45\x23" + + "\x04\x78\x8c\x61\x22\xf8\xf1\x71\x00\x85\x51\xf4\xf1\x66\x13\x1d\x1f\x1f\x25\x0d\x53\x1d\x0c\x06\x3a\xaf\x54\xc9" + + "\x5e\x82\x91\xc1\xdc\x88\x5c\xc1\x0f\x59\xae\xf9\x83\xb3\x0b\x1f\x01\xcd\x5f\x17\x2e\xfb\x39\x30\x3d\x76\xc7\x28" + + "\x66\x35\x5b\xbb\x4b\x90\x1e\x8f\x42\x1d\x47\x79\x92\x1f\x05\x2a\x9a\x3c\x15\xcb\x52\x2f\x80\xf1\x67\x4d\x85\xa3" + + "\xb9\x16\xc2\xb1\x9a\xca\x33\x05\x27\xb9\xa3\x4f\x3f\x02\x46\xb5\xc8\x46\x5e\x19\xf4\x7c\xb9\xcc\xd6\x01\x44\xdc" + + "\x28\x11\x90\x68\x20\x38\xb1\x74\x53\x32\xd6\x84\xa3\xd8\xa3\xca\xb4\xd7\x7f\x9e\xf0\x49\x3f\xbb\x68\x99\x8a\x3d" + + "\x15\x3f\xe7\x7d\x62\xda\x66\xac\x4d\x74\x87\x76\xb2\x16\x9c\x38\xb6\x9a\xab\x85\xb0\xd1\x91\x6e\xad\x74\xd1\x88" + + "\x31\x8e\xf2\x89\x2c\x8b\xbd\xb5\xe0\x93\x9a\x03\xb4\x5f\xd2\x99\x5d\xd2\x99\xbe\x10\xa1\x3f\x74\x79\x92\x37\xde" + + "\x85\xce\xd1\xb7\xed\x7a\x21\xc4\xcb\xe8\x66\x8c\x31\xd7\x23\x6c\x3c\xd9\xa0\x95\x9f\x26\x93\x38\x0a\x5c\xc9\x65" + + "\x16\x6c\x05\x46\x10\xd1\x16\x39\xef\x9c\x08\xa9\x75\x0e\x9c\xb6\xef\xd5\x32\x2e\x56\x55\xa6\xb8\xe4\xb8\x65\x59" + + "\x03\x9e\xf0\xc7\x55\x55\x0b\xc3\xf8\x14\x67\xf3\x00\xa6\x75\x6f\x73\x94\x0f\x30\x98\xd9\xef\x28\x17\xd5\xc5\x8f" + + "\xb9\xc4\xfe\x1a\x24\xe1\x70\xa5\xae\x03\xdc\x75\xd6\x11\xfb\xed\xf1\x0e\xeb\x6d\x11\x1b\xfc\xaf\x07\x41\xc2\x7e" + + "\xe6\x49\x44\xc9\xce\x2e\xba\x3d\xc6\xdd\x9a\x56\xc1\x91\x36\xcc\x33\x68\x99\xae\x96\x7b\xa6\xf2\xc2\x8e\x15\x33" + + "\x10\x8b\x3d\x09\x67\x6f\xb0\x3b\x81\xdc\x0e\xe3\xbb\x40\xec\x85\xca\x84\xb7\x33\xd8\xef\xe3\xd6\xe0\x18\x76\xa6" + + "\x18\xf1\x1d\x80\xdd\x60\xa2\x8e\x48\xba\xc4\xe8\x00\xe8\x92\x0e\x84\x4d\x11\x6c\x9f\x44\x31\x02\x75\xb9\xc6\x52" + + "\x9c\x34\x00\x95\x07\x50\xcf\xd5\xbd\x0e\xa6\xaa\x67\x82\x13\xdd\xdc\xaf\xe7\x36\x8d\xb6\xca\x91\xa4\x88\xa2\xe2" + + "\x3b\x9f\xc8\x38\x88\x5e\x72\x70\xb6\x99\x88\x83\x1b\xa2\xd7\xdc\x87\xa0\x2c\x9a\x7f\x87\x0f\x6c\x15\xd4\x6d\x07" + + "\xb5\x89\x63\x6e\xb9\x21\xf1\x0c\xf0\x2b\x16\xa1\x01\xb3\x07\x12\x68\x74\xd2\xf6\x65\x33\xd5\x6a\xb7\x29\x20\x51" + + "\xeb\xef\xcb\x62\xf1\x0e\xf5\x9b\x2d\x3a\x55\x94\x7d\x5f\x58\xe2\xec\x98\xdb\xf7\x77\xaa\x59\x39\xd6\xe7\x27\xce" + + "\x46\x6a\xad\x55\x36\x3b\xe9\x99\x55\xa7\x1e\x5c\x90\x8b\x0b\x4b\x24\x0b\xaa\xb7\x1d\x7c\x56\xef\xc8\x46\x14\xba" + + "\x9e\x3a\xa2\xe3\xc5\x99\x7a\x6b\x2c\x04\x22\x0e\xbc\x6f\xcb\x3b\x20\x8a\xc5\x2a\x4f\x25\x59\xc6\xdd\x85\xa9\x72" + + "\x83\x49\xc5\x30\x0c\x52\x85\x65\x55\x4b\x25\xa7\x73\xcc\xbc\xcd\x59\xde\x96\xfd\x4c\x5d\xa9\xcc\xd2\xc6\xc4\x74" + + "\x9d\x1c\xca\x60\x12\xe3\xba\xde\xf7\x13\xfd\x7b\x43\x58\xb3\x5b\x8e\xa8\x03\xc5\xa6\x8b\xeb\xb9\x51\x9f\xe7\xeb" + + "\x7f\x72\xe0\xf8\xb0\xc7\x3b\xcd\xed\x5d\xc4\xc7\x27\x4d\x85\x2c\x93\x67\x8d\x7a\x05\xad\x4a\x05\x17\x9d\xb2\x5b" + + "\xdf\x37\x64\x4e\xa1\x69\x50\x6d\x61\x77\xcc\x3a\xb2\x45\x61\xaa\x17\xae\x04\x03\x79\xb3\xd2\x89\x48\xc2\x15\x78" + + "\xb9\xbd\x1b\x70\xe2\xe1\x51\xe5\x86\x5b\xe6\x18\x9d\x6a\x0f\xe2\x6d\x12\x2a\xeb\x24\x2e\x3e\x55\x38\xf6\xf1\x6a" + + "\xed\x27\x43\xdb\x93\x51\xb7\x39\x32\x84\xe3\x7d\xde\xae\x03\x72\x47\xb6\x6b\xfd\x90\x5a\x28\x65\x6c\xb6\x6f\xce" + + "\xc1\x92\x19\x22\x53\xfe\xad\x0b\xe7\x3c\x6a\xe4\xea\xc3\x6a\x04\x32\x13\xab\x25\xca\xcc\x8a\x84\x96\xa5\xf3\x49" + + "\xb1\xd3\xf2\x34\xb2\x25\xfc\x2e\x34\x2d\x23\xdf\xeb\x72\x21\x5a\x78\xf9\xbc\x5c\x89\x9e\x09\x99\xaf\xbb\x28\x14" + + "\x91\xc7\xb0\x98\xcb\x3c\x75\x61\x86\x98\x9e\x7e\x7f\x5f\xf3\x1d\x64\xb7\xe8\xbd\xdd\xa2\xf7\x7e\x8b\xec\x94\xda" + + "\xb7\xe6\xbd\x05\x4b\xc8\xae\x44\xb1\xf2\xd1\xf5\xe6\x6d\x44\x6e\x7f\x1c\xf7\xf4\x8c\x52\x63\xdc\xb1\x7d\xf5\xa6" + + "\x81\xfd\xcb\x0e\xed\x0b\x72\x79\x1b\x05\x4e\x55\x5c\x4b\x23\x64\xbb\x79\xb9\x27\x74\x6e\x54\x59\x09\x99\xbb\x73" + + "\x0d\xf0\xeb\x5b\x8f\xe3\xdf\x1e\xb9\x64\x31\x4c\xdf\x7d\x0a\x2b\x8d\x9e\x76\xdd\xc1\xb4\xc8\xa7\xb2\x4a\xfe\x10" + + "\x6c\x59\x65\x00\xe1\xfb\xc7\xe2\x22\x70\x5f\x14\x1d\x71\x8c\x49\x0a\x47\xa2\xd3\x11\xb7\x36\xd5\x44\x77\x4b\x6c" + + "\x66\x6c\x89\x2d\x3d\x14\x9e\x8a\xf7\x2e\x65\x69\xdb\xc5\x65\x27\xa9\x7b\xe2\x3d\x1c\x4b\xfb\x25\xef\xf2\x96\x6f" + + "\xbd\x0b\x41\xdc\xcb\x7b\x54\xdb\xb6\xf4\xd1\x66\x85\xa4\x56\x91\x1b\x93\x53\x97\x12\x17\xea\xa4\xb3\xa3\x56\xb5" + + "\xd3\x76\x2c\xb8\xeb\xe2\xfe\x6b\x59\xac\x96\xfc\x8d\x49\x6a\x9d\x98\x5e\x80\x76\xe1\xad\x3e\x59\x9f\x62\xe2\xff" + + "\xe0\x6d\x10\x9b\x88\x2b\x9e\xac\x6d\x7c\xc9\xb8\xde\x6b\xbd\xa9\x59\x2d\x55\xf9\xda\xd1\x92\xba\xbe\x27\xa4\x95" + + "\x01\x97\xe3\xa8\x79\xa4\x66\x26\xf2\xfa\xde\xb3\x1a\x21\xdf\x96\xbe\x28\x56\x38\x21\xae\xf1\x87\xb7\x7e\xe7\xa0" + + "\xe3\x32\xdc\x7a\x2d\x27\x32\xd9\x7b\x7b\x3e\x42\xd8\x2d\x35\x0d\xe3\x86\x79\x6e\xdf\xc9\xe9\x07\xac\x0b\x58\xbf" + + "\x62\xbc\xab\xc6\x2f\x1c\xf5\x26\xb3\x6b\xb9\xe6\x7a\x68\x5c\xfa\x0f\xc7\x72\x5c\x43\x51\x06\x4b\x0b\x75\x49\x0d" + + "\x65\x92\x07\xf1\xde\x9e\xa5\xc0\x79\x7a\x86\x59\x46\x2f\x12\xd2\x26\x05\x50\xf2\x73\xf9\x19\xab\x58\x57\xea\x52" + + "\x95\xce\x10\xa4\x67\x33\x57\x6f\x01\x13\x6e\xb8\x0f\x43\x52\xbb\xc3\xcd\x7f\xc6\x9a\x29\x62\x2c\x12\xfb\xfd\xbe" + + "\xbb\x30\x2d\x30\xd8\x85\x98\xb8\xa8\xd7\xb2\x9a\x0f\x4a\x20\xcc\x8b\x04\x2f\xdd\x83\xc1\xa1\x9d\x11\xb1\x81\xb8" + + "\xba\x5a\x84\x32\xe5\x08\x6b\x6c\xf4\x4e\xe3\x26\x1f\x47\x17\x7d\x58\x74\x6a\x1a\xf0\x43\x51\x62\xe1\x50\x58\x58" + + "\x4a\x52\xc5\xd4\x10\xd5\xa9\x57\x02\x69\xc2\x7e\xff\xff\x07\x91\xeb\x37\xfd\x9b\x90\x82\x12\x6e\x72\xbd\xbb\x52" + + "\x51\x26\x88\xc2\xf7\x6e\x0a\x1b\x49\x4d\x08\xf8\x1b\x15\xcf\x9f\x28\xd1\x39\x38\xe8\x60\x81\xd8\x6b\xdb\x6d\xe8" + + "\x05\xfe\x6d\x8f\xe3\x58\xec\xcb\x77\x45\xa6\x30\x23\xca\x9b\x22\x55\x3f\x68\x53\x45\xd5\x8e\x4e\x5e\x8d\x44\x87" + + "\xe0\xd7\x39\xe2\x2f\x47\xe2\x69\xbe\x5a\x4c\x54\xf9\xac\xeb\x63\x4f\x43\x0d\x08\xbb\x53\x79\x8e\x03\xe0\xc7\x64" + + "\x2a\x34\x7d\x1a\x14\xdb\xac\x0a\x3f\x64\x48\x6c\x95\xd3\x10\x19\xe3\x68\x48\xaa\x8d\x53\x97\xeb\x03\x1e\xa6\x06" + + "\xf6\xb3\xf7\x51\xfd\x8e\x7f\xc6\xe4\xcb\x71\xdb\x4d\x15\x7f\x23\x2f\x4d\x5d\x76\xdf\x86\x72\x0e\xf5\x85\x33\x9e" + + "\xd2\x21\x68\xde\xda\xee\x9c\xbd\x2b\xe5\xf4\x43\x10\x52\xef\xe5\x78\xd4\xbc\x56\xac\xa4\x34\x11\x18\x81\xb2\x46" + + "\xea\x98\x77\x73\xb5\x26\x8c\x41\xa2\x71\x59\xe4\xca\x49\xb4\x32\xcb\x7c\x99\x7d\x4b\xf1\xdb\xc4\x78\x6b\x4b\xb3" + + "\xbb\x13\x01\x2c\x44\xce\x7e\x3f\x58\x90\x9f\x04\x55\xa0\x50\xe4\x55\x44\xb5\x66\xb0\x72\xc9\x95\x2a\x5d\x98\x91" + + "\xcb\x83\x41\xda\xd6\x2a\x9c\x47\xa4\xa3\x0a\x69\x6d\xeb\x26\xb5\x09\xf8\x5e\xa7\x18\x40\x0e\x0e\x66\x13\xbe\xc1" + + "\xed\xc9\x24\x7f\x7f\x2c\x74\x20\x50\x13\x94\xf7\xf6\x18\xdf\xa3\xa6\x6e\x92\x21\xd6\xb6\x20\x6d\x70\xf7\x35\x10" + + "\xd6\xa1\x6a\x60\x73\xf3\x17\xc8\x76\xa7\x92\x00\x11\x6a\x00\x43\xd6\x18\x69\x36\x12\x00\xcb\x66\x59\x16\xba\x02" + + "\x72\xa3\x17\xc0\x9c\x29\x66\x73\xb9\x60\x8c\xaf\x04\x5e\x3b\x48\xbc\xdc\x67\xe2\x20\xdc\x97\xad\xb9\x4f\xd0\xe0" + + "\x96\x84\xd6\x38\xf4\xad\x74\x8b\x6a\x28\xe0\x76\xa2\x77\xa8\x28\x5a\xb2\xa8\xd8\x48\xb8\xd0\x6e\xbb\xf6\x4b\x7f" + + "\xa9\xcd\x54\x96\x9c\x2a\x50\x20\xcb\x37\x2f\xb2\x54\x95\x36\x16\x86\x2d\x1e\x98\xe2\x5b\x4e\xab\x95\x93\x10\xec" + + "\x61\x88\xae\x6f\xaf\x67\x0e\x1e\xb7\x69\xe1\xe0\x92\x08\x40\x1c\x5e\x01\xed\x0a\x94\x5a\x7f\xae\xa3\x53\xa5\x52" + + "\xac\x03\x66\x94\xdf\x34\xb3\x9a\x4e\x15\x31\xdc\xd6\x2e\x44\xcf\x8c\x99\xad\x32\xcf\xc0\x99\x4a\x2f\xa9\xc6\x78" + + "\xb4\x99\x35\x4a\x85\x59\x26\x99\x6b\xf1\xd3\x08\x78\x2d\xaf\xbb\xab\xa1\xc0\x7e\x1b\x1f\xd7\xf5\xb9\x80\xf8\xab" + + "\x46\xb9\xb4\xe6\x46\x36\x0e\xec\x8f\x57\xaa\x2c\x75\x0a\xb4\x29\xa7\x45\x00\xff\x59\xcc\xc4\x65\x56\x4c\x64\x86" + + "\x57\x50\xae\xb0\xec\x4d\x44\xbd\xb6\x51\xe1\xbb\x69\xf0\x76\xb6\x80\x78\x92\xd6\x08\xce\x55\x60\xab\xdd\xa9\x55" + + "\x7b\x25\x3a\x71\x4c\x0a\x8a\x30\xcb\x41\xc4\xb2\x76\x5d\xe1\x3e\xf7\xcc\xb2\xdc\x9c\x4d\xc6\x3b\xa2\xfb\x07\x6d" + + "\x7e\xe8\x64\xa9\x18\x3e\x12\x27\x79\xa5\x4a\x90\x73\x81\x55\x43\x77\xca\x47\xc3\xd0\xc5\x80\xbd\x11\x3d\xa7\xe2" + + "\x78\xd2\x3a\x0b\xe3\x5e\x38\x87\x74\x9e\x42\xf9\x71\x9f\xf4\xdd\xd8\x29\x1d\x4d\x03\x39\x71\x20\xd2\x57\x27\x2b" + + "\x66\xc2\x95\x2c\x70\x4f\x59\x17\x36\xa5\xda\x46\x2b\x9b\xe5\x07\x1d\xe4\x28\xb7\x9d\x77\xfd\x0b\x9c\x3d\x62\x6d" + + "\x45\x54\xf0\xc0\x44\xc6\x62\x42\x35\xa7\xdb\x0e\xd5\xda\x6d\x24\xcc\x2d\xbe\x45\x7c\x23\xa7\x68\x9f\x82\x29\x70" + + "\xc7\x6f\xd5\x26\x84\x87\x85\x2e\x2f\x0b\xa6\x36\x3d\x6b\x5d\xf6\x69\xfd\xe2\x7e\x64\x39\xf3\x4e\xaf\xbc\x55\x69" + + "\x94\x3c\xac\x7d\x23\x1b\x68\xf4\xcf\xc8\x77\x5d\x6f\x28\x3c\x05\x5e\xc3\xc1\x1c\xb3\x2e\xd1\x56\xc8\x78\x1e\x83" + + "\xc0\x27\x36\x8c\x3d\x08\xcb\x95\x4a\xeb\x0a\x11\x95\xb9\x7b\x2e\xb2\xe2\x9a\xb5\xa1\xf4\x25\xe6\xde\x75\xae\xba" + + "\x80\x3f\x14\x22\x8c\x11\x8d\x74\x80\x1e\x1a\x07\x14\xec\xc4\x4f\xd1\x61\x5e\x54\xf7\xee\x14\x79\xf3\x8d\x3d\xb9" + + "\xb7\xbe\xfd\x73\xff\x27\x56\xc4\x5e\x96\xaa\xff\x91\xae\xc5\x64\xa5\xb3\x2a\x9c\xce\xc0\xe5\xad\x0a\xc6\x74\x55" + + "\xf6\x9c\xf4\x56\x2f\xc4\x77\x2b\xce\x98\x74\x5e\xb4\xbe\x04\x3a\x7e\x81\x33\xc4\xfa\x44\xa1\x51\x83\x0e\x06\xfb" + + "\x98\x72\x09\x3f\x9a\x68\xbd\xcc\xd8\x16\x1a\xe3\x78\x8f\xe0\xd2\x72\x67\x9c\x88\x8b\x8f\x75\x81\x7f\x39\xe4\x45" + + "\x80\x70\x49\x94\xc4\x62\xe5\xd8\x96\x13\x30\x51\x31\x09\x3b\x6a\x87\xae\x22\x1e\xf8\xfe\x3d\x7f\xaa\xdd\x45\xe5" + + "\x8f\x77\x12\xe0\x91\x1d\x60\x10\x3a\x47\xd8\xbf\x1d\x96\xfa\x34\x5e\xf6\x2f\x9b\xdc\x97\xdc\xd7\xdf\x95\x28\xb7" + + "\x2d\x74\xae\x17\xfa\xef\x56\xd7\x47\x19\x02\xac\xa8\x86\x56\x40\x02\x00\xa0\x38\xf2\x0f\xc0\x5f\xa3\x33\xb9\x25" + + "\x83\x21\x85\x09\x73\x4e\xf3\x49\x79\x27\x3f\x00\x3d\x34\x36\x11\x3a\xe5\x77\xa8\xf8\x00\xd3\x45\xc4\xb5\xd0\xcb" + + "\xa2\xa8\x3c\xb0\xb4\x11\x32\x17\x27\x58\x04\xc9\xa9\x90\x6c\x88\x46\x5b\x41\x14\xa6\x17\x54\xd7\x2f\xb4\x9a\x88" + + "\x67\xe2\x31\x4a\x6c\xa4\xb8\x1b\x7b\x03\x49\x37\xd0\xa2\x9d\xbc\xf4\xf1\xc8\xb6\x34\xe8\xa5\xaa\xbe\x5b\x9f\xa4" + + "\x81\xa4\x3c\xa8\x55\x33\xdc\x56\x50\x7b\x67\xa7\x5d\xbf\x79\x18\xeb\x37\x89\xfc\xba\xfb\x38\x09\x15\x15\x27\x2f" + + "\x3b\x17\xbc\x12\xab\x0c\x0e\x83\x53\xda\xd2\xf1\x74\x7b\x41\x01\x65\xdc\x6f\xd1\x25\xe7\x3d\xc7\xa4\xfa\xf7\x71" + + "\x1e\x2b\xef\x21\x67\xb9\x93\xb7\xa5\x72\xb8\xec\xb8\x2d\x94\xb4\x4c\x05\xff\xbd\x52\xa5\x9e\xad\xd9\x89\xbb\x5c" + + "\xa3\x5b\xb4\xa9\xd4\x52\xac\x96\x42\x0a\xa4\x5c\x21\xc5\xa7\x8b\xc3\x76\xe8\x86\x9f\xd6\x99\x91\x46\xc2\x7b\xcb" + + "\x91\xb4\x90\x52\xbb\xf7\x56\xb3\x48\x51\x2a\x14\x45\xb0\x35\x0c\x47\x21\x89\x20\xb4\x46\x61\xa9\x28\x45\xa9\x2f" + + "\xe7\x55\xbf\x2a\xfa\x99\x9a\x55\x4e\x17\x10\x5d\xa2\x54\xaf\x09\x24\x07\xc3\x0c\x94\x2b\xdb\x14\x7a\xf8\x60\x24" + + "\x5a\x84\x7e\x5b\xaf\xdd\x1a\x3a\xea\xd0\x19\xfd\xf9\xa4\x28\x2b\xc1\xd9\xd5\x75\x25\x64\xa0\x5e\xf6\xbb\x59\xc3" + + "\xb1\x84\xc3\x04\x09\x67\x30\x83\x7d\x78\x35\x07\xa2\xfd\xad\xef\x23\x01\x6c\xf3\x46\x8a\x3c\xf5\xc9\x93\x43\x13" + + "\xc1\x29\xc6\xd1\xf7\xf8\xca\xa7\xc0\x33\xda\x39\x80\x9f\xcd\x3f\x68\x38\x8b\x44\x3d\xd3\x20\x0f\x85\x30\x1f\x23" + + "\xad\xb4\x1a\xf6\xad\xf8\xbd\x25\xdf\x94\x55\x18\x97\x3c\x94\xad\xf8\x12\xdb\x3c\x31\x22\x0a\xde\x38\xcb\x52\x13" + + "\xbb\xe8\x88\x44\x3a\xc4\x5a\x1a\x28\x52\xfe\xe3\xa4\xb5\x11\x94\x42\x04\x85\x77\xab\x97\x2e\xd5\x42\xea\xbc\x67" + + "\xab\x16\x5b\x5d\xb3\x2c\x9d\xcf\x91\xc5\xcc\xa5\x53\x9d\xfb\x4c\x4d\x31\x46\x7b\x69\x64\x8b\x0e\xfc\x28\x94\x52" + + "\x77\x1b\xc9\xf3\xb6\x0b\x5d\x81\xf8\xd6\x72\xdc\x6b\xf2\x64\xa8\xff\x69\xf5\xe3\xa4\x08\x3f\x64\xd3\x81\x96\xab" + + "\x1b\x35\x5d\x11\xcb\x8b\x4a\x07\xd8\x7d\xc7\x11\xe8\x19\xde\x17\xec\x4d\xb2\x2c\x8b\x2b\x4d\x75\xd3\x91\xbc\xe0" + + "\x2f\x56\xfe\xfd\xe6\x93\x5a\x96\x2a\xe4\xa5\xf8\x0c\x2c\x8a\x94\xea\x6f\x47\x19\x32\x31\x47\xf6\xfd\x7b\x3b\x01" + + "\x61\xc1\x2d\xad\x25\xa9\xec\xb9\x68\xca\x6e\x42\xa2\x81\xb2\x77\xb5\xd7\x43\xd7\x6a\x88\x73\x01\x5f\xef\xf1\x56" + + "\x43\xb8\x00\xfe\x9f\x8f\x6a\x5c\x53\xba\xbd\xce\xf1\x50\xfc\x98\xab\x7e\xa5\x17\x4a\x48\x0c\x28\x60\xad\x0d\xbe" + + "\xc2\x42\xdc\xa6\x92\x13\x2c\x82\x7c\xff\x5e\x4b\x11\xeb\xb1\x65\xcb\x11\xeb\xaa\xa4\xd3\xe9\x36\xeb\x56\x0f\xde" + + "\x17\x3a\x87\x57\x94\x82\x8b\x3e\xb0\xe3\x3b\x35\xeb\x8b\x79\x59\x2c\xd4\xd3\xc3\x2f\x29\xc4\x9b\x94\xf3\x5c\x88" + + "\x3b\x28\xf3\x4d\xf7\xf7\x5a\xc0\x7a\x1f\x56\x41\xde\x52\xcb\xa5\xcb\x52\x9b\x80\x7b\xf5\xd3\xae\x17\xe9\x06\xee" + + "\x67\x37\x2c\xa4\x6d\xa7\x74\x42\x4e\xa5\xc0\xa9\x84\x79\x01\x39\xc7\x91\xbb\x83\x31\x72\xda\x55\xd6\xef\x36\x16" + + "\xf4\x8b\x9a\x7c\xd0\xd5\xd3\xaf\x9e\xfc\x65\xf0\xe4\xb1\xe8\xdb\x4c\x48\x5f\x0f\x0e\x06\x4f\x86\xb4\x5a\xf1\xf8" + + "\x2b\xa0\x89\x37\x58\x7b\x41\xd8\x67\x7f\xe9\x62\x47\x2f\x55\x45\xf2\x05\x25\x09\x9a\x16\x39\x7a\x3c\xe8\xfc\xd2" + + "\x65\x36\x14\x8f\x50\x82\x43\x8f\xc4\x47\xf1\x06\xb9\xaf\xc7\x00\x44\x55\x56\x81\xf7\x6e\xaa\xaf\x6c\x72\x61\xaa" + + "\x1b\x13\x24\xc8\x3a\xec\x61\x86\x21\xfa\x65\xc4\x97\x22\xa1\xa1\x74\x7e\xd9\xf5\x88\x04\x3d\x0c\x08\xda\xca\x82" + + "\xc0\xe6\x29\x48\x7c\xb6\x32\x0a\x5e\x67\x2e\x3c\xe9\xa4\xfa\x0a\x13\x06\xee\x61\xca\x88\xdb\x26\xc8\x28\xe1\x0a" + + "\xf1\x03\x57\x2a\xaf\x7c\xaa\x95\xa1\x4b\x3e\xd5\x41\x47\xb7\x65\x41\x1a\x8c\x0e\x36\xe7\x34\x4d\x0b\x93\xe6\x83" + + "\x85\x9e\x96\x85\x29\x66\x15\xd6\x03\x57\x79\x7f\x65\x86\x99\x9e\x94\xb2\x5c\x0f\x17\xe6\xab\x27\x5f\x7f\xf9\xf8" + + "\xdb\xff\xf5\xf8\x9b\xff\x3c\x1d\x7c\xf3\xd5\xff\x7a\xfc\xed\x40\x9a\xe5\xcd\xfd\x7b\x44\xe8\xda\x20\xc5\x80\x4a" + + "\xf5\x15\x25\xd9\x44\xc6\x6b\x2c\x3a\x4f\xa5\x98\x97\x6a\x36\x7e\xf8\xe0\xe1\xb3\xa7\x43\xf9\xac\x73\x14\x81\x27" + + "\x48\x83\x54\xcb\xec\x02\x5f\xf1\x59\xe8\x3c\xe8\x08\x84\x04\x0f\x22\xd3\x94\xca\x02\x27\x02\x13\xc0\x6c\xa0\xed" + + "\x66\xae\x80\x63\xd8\x5c\xeb\xb4\x9a\x77\xea\xe5\xc9\x7a\x5c\xd1\x4b\x9b\xff\x7a\xfd\x43\xe4\x9a\xb0\x1b\x3d\x8a" + + "\xd2\xe5\x44\x13\xe2\x0e\xf2\x2d\xe9\x73\x30\x11\x0d\xdb\x8e\x1e\x87\x26\xcf\x30\x07\x41\x64\x2c\xc1\x27\x3f\x1b" + + "\x77\x62\xfe\x93\xb2\x67\xe6\xa4\x2e\x44\x9d\x53\x04\x10\x64\xa1\x3a\x5d\xbb\x09\x16\x8b\x83\x34\x54\x9b\xcd\x67" + + "\xee\x0d\x3a\x5a\x0f\x69\x4f\x6a\x9b\x61\xa2\xb5\xf3\xe0\x3d\x57\x43\xed\x13\x76\xd0\x7e\x64\x8b\xbb\x76\xb6\x6d" + + "\xa1\xed\xfb\x33\x77\xec\x13\xea\xf4\xd9\xa4\x46\xad\x59\xf4\x02\xa8\x7f\xce\x6e\x85\x6b\xc4\x8b\xa4\x2a\xc4\x0c" + + "\x19\xd8\x09\x65\x0a\x34\xe2\x7a\xae\xf2\xa8\x9d\xc8\x30\x6d\xe0\x47\x4f\x4f\x00\xd5\x78\xef\x5d\x82\x40\x97\xe9" + + "\x68\x0b\x30\xed\x1c\x3e\x09\x9a\x20\x3c\x5f\xc9\xec\xe8\x13\xce\xc2\x19\xa5\xa4\xba\x70\x19\xe3\xc4\x71\xdb\x51" + + "\xb0\x5e\x44\xc9\x95\xcc\xda\x12\x36\x01\xc0\x12\xae\x7f\x87\xb7\xf4\x95\xcc\x06\xe8\x3b\x83\x9c\x84\xf5\x57\x82" + + "\xa7\x94\x78\x95\x3b\x74\xa5\x56\xe3\x4d\x8a\xd2\x0f\x23\x99\xbc\xed\x26\x9c\xfa\x92\xa5\x6e\xf8\x3f\xaa\x34\x3f" + + "\x60\xae\xda\xb5\xe6\xc7\xaa\xbd\xe2\x79\xdc\xe0\xac\x33\xc2\x6c\x2b\xc1\xa3\x20\xcd\x07\x3f\x5d\x59\x23\x73\x43" + + "\xf3\xec\xdb\xb0\x64\xc5\x2d\x38\x05\xb1\x7f\x8d\x1b\xf0\xb2\x98\xfa\x26\xf8\xc4\x37\xb0\x19\x93\x43\x0d\x2d\x3d" + + "\x71\xcb\xc5\xf2\x83\xa1\x54\x54\x9b\x37\xa9\x07\xc2\x06\x47\xee\x33\x03\xf7\xa6\x7a\x27\x2f\x41\xf4\x1d\xfe\xfa" + + "\x34\x39\xbf\xde\xef\x9e\x9b\x47\xe7\xc3\xe3\x67\xc9\xf1\xe8\xe9\xf9\xf0\xfc\xf0\xd9\xa6\xfb\xc5\xb0\x1b\x0f\xa7" + + "\xcd\xa9\xad\xff\x36\xfc\x75\x70\xf6\xeb\xe8\xc1\xf9\xd9\xf9\xa0\x77\xf1\xe8\x8b\xa1\xe3\x17\xe0\x3d\x1a\x81\x7c" + + "\x32\xe2\xa9\xcc\x1c\xa2\x4a\x60\x9f\x50\x74\xe1\xa8\x10\xe0\x65\xd1\x2a\xe7\x98\xd7\x6b\x9d\xe7\xc5\xb5\xd3\x0a" + + "\x9a\x9e\xf8\x7d\x25\x33\xcc\xb8\xdb\x43\x7e\x36\x08\x2f\x72\x00\xf5\x4a\x70\xd7\xd8\x9b\x5f\x19\x83\xb8\xf1\x65" + + "\xa9\x96\x61\xef\xf5\x33\xa4\xdd\xd1\x18\x3e\x12\xef\xcd\x5c\xe7\x95\xe8\xff\x72\x70\xf8\x8d\xe0\x52\xd8\xae\x4e" + + "\x9c\x1b\x8a\x2d\x48\xfc\xbd\xf3\x33\xdc\xc5\x2a\xa2\xec\xf5\xc8\xfa\xa1\x5b\xaf\xc8\xf6\x9f\x3b\xe5\xc6\x3f\x31" + + "\xe1\xa6\xeb\xa1\x73\xbd\x0c\x41\xf1\x91\xb9\xb0\xca\xcc\x7f\x11\x15\xed\x0c\x09\xb3\xc3\x02\x66\xc8\x5b\xe0\x5d" + + "\x9b\xbf\x0d\x83\x0b\xb6\xd1\x2f\x06\x37\x34\x54\x15\x04\x53\xf8\x84\x0e\xc2\x64\x33\xff\x0c\xd4\x1c\xd0\x62\xb7" + + "\xd1\xda\x48\xa2\xcb\xa5\x56\x42\x30\x7a\x0a\x15\x4d\x33\x52\x70\xc2\x51\xec\xd9\x68\x23\x8f\xbb\xd6\x27\xc8\xb9" + + "\x31\x70\x32\x39\xbb\x1b\xbe\xe5\x0e\x13\xae\xce\x28\x2f\x2a\x2c\xe3\x8a\x0f\xb0\xca\x6b\x63\xe5\xa1\xb3\x8a\xaf" + + "\x51\xd5\x16\x07\x8e\x34\x38\xa0\x98\x56\x11\xe0\xa5\x5f\xc2\x65\x1c\xac\x8b\xc1\x5e\x38\xdf\x0b\x31\x12\x14\x06" + + "\xd4\xfa\xb9\x5d\x70\x63\x0b\x3e\x8a\xb5\x2d\x93\x64\x54\xf5\xf9\x32\xec\x80\xf9\x40\xdd\x54\x2a\x4f\x31\x07\x0a" + + "\x0c\x3f\x6a\x51\x29\x87\xd7\x1f\x19\xa6\xac\x63\xf7\x5c\x47\x6e\xdd\x30\x83\xc0\x79\xca\xa8\x6c\xc6\xad\x8e\x82" + + "\x68\x96\xba\x4a\x79\xb7\xe5\x78\xb8\x70\x5e\x18\x61\xb9\x32\xf3\xd3\x4a\x4e\x3f\x58\x22\x15\x4e\xcd\x62\x74\x23" + + "\xb9\xe0\x8e\xcd\x92\x85\x59\xd4\xda\x3c\x6d\xad\x22\xa2\x76\x53\x60\xef\x33\x4c\x94\xd5\x23\x8f\xa9\xc8\xee\xdd" + + "\x12\x99\x1d\x7b\x33\xd4\x92\x0c\x7d\x7c\x1a\xc1\xee\x87\x02\x7f\x30\x0b\x80\x6b\x5d\x09\xf8\x86\xeb\x5b\x73\x76" + + "\xd5\x2f\x5a\x4c\x00\xa2\x0b\xaf\x8b\x85\x32\xf0\xda\x3d\xac\x8d\x44\xae\x89\xb4\x75\x75\x78\xc3\x3e\x63\x28\xb8" + + "\x88\xae\xec\x84\x66\x24\x46\xc1\xcc\x4a\x55\x85\xa6\x22\xec\xc9\xfd\x3e\xae\xfd\xde\xe7\x7a\xaf\xee\xc1\x28\xb2" + + "\x2d\x79\xc5\x02\x91\x87\x5e\x50\x6a\x7b\x3b\x7e\x6e\xc1\x19\xbe\x04\xe1\x71\x2f\x8a\xc6\x3c\xbb\xe8\x51\x38\x39" + + "\xef\x18\x0e\x93\x17\xd5\x9f\x3d\x06\xa0\x4a\x38\x84\x36\x9f\x30\xc2\xee\x2e\xf7\x49\x7a\x56\xe8\xd8\xab\x56\x4f" + + "\xbc\x2b\x5f\xe8\x34\x3d\x74\x6e\xcf\x01\x2a\xa0\x45\x96\xaa\x38\x99\xb9\x5e\x82\xc0\x84\x96\x0a\x1c\x86\xf4\xc7" + + "\xb6\x5b\x53\x88\x2f\x92\xce\x72\x44\x79\x3c\xbb\x03\x6d\xe0\x17\xa6\xe2\xec\x8a\x6b\xcc\x14\x12\x60\x3f\xb2\x1e" + + "\x12\xa4\x72\x2e\x99\x70\x5d\x88\xce\x92\xaa\x21\xec\xb4\xda\x8d\x82\xc2\xd5\x11\xbf\xd5\xa2\x83\xa6\x13\xd5\x3c" + + "\xee\x96\xc1\xad\xc1\x18\x1f\xe2\x5e\xc2\x5f\xdd\x40\x6d\x7d\xeb\x34\x02\x0d\x25\x0c\xe3\xb4\x28\x26\xef\xd5\xb4" + + "\x72\x4d\x9e\x8b\xa9\xca\xab\x52\x66\xa2\x54\x33\x55\xaa\xa0\xce\x3e\x9a\x77\x78\x52\x56\x1b\xd1\x65\x8e\xae\x28" + + "\x2a\x7a\xd3\xb3\x3a\xc6\xe7\xb6\xde\xea\xb5\x5c\x7b\xe3\x38\x40\x0d\x05\x4a\x82\x86\xb1\xaa\x44\x57\xc6\xeb\x81" + + "\x4e\x45\x71\xa5\x4a\xf1\xb4\x92\x97\xcf\xbc\x52\xf1\xbf\x4e\x4f\xc5\x95\x96\x22\x4a\x51\x2f\x92\x07\xdf\x7e\xf5" + + "\xf8\xb0\xcb\x3a\x97\xaa\xd4\xd3\x8a\xba\x2f\xd5\xb4\xb8\xcc\x11\x33\x44\xf2\xe0\xf0\xf0\xf1\xb7\x07\x23\xf2\x50" + + "\xa5\x0a\xa3\xb8\x67\x4f\x51\xf9\xf2\xfb\x4a\x4f\x3f\xbc\xa2\xdb\x71\xf8\x6b\x72\x3c\x3a\x37\x8f\x92\xa7\x67\xe7" + + "\xd7\xe7\xbf\x5c\xec\x3f\xeb\x9e\xfd\xfa\xec\xe2\xd1\xe6\x41\x72\x76\x7e\xdd\xbf\x78\xd4\xed\x7e\x31\xa4\x25\xea" + + "\x5c\x07\xac\xf2\x2c\x1f\xf0\x83\x3b\x8c\x92\xe1\x55\x82\x17\x1d\xdd\xe8\xde\x2a\xfd\x1f\xcf\xdf\xbc\xfc\xe1\xd5" + + "\x08\xf0\xb0\xd3\xed\x89\x2f\x12\x90\x64\xf0\x0f\x57\xb8\x1c\x7f\xd1\xb9\xf5\x82\xd8\xb6\x42\x2c\x7c\xf9\x84\x84" + + "\x93\x44\xbf\xfa\x1e\xb4\xdf\x4d\x6d\xac\x9b\x75\xdf\xa2\x26\xb6\x2a\x63\xe7\x69\x64\x0d\xf5\x6e\x17\x83\x30\xf9" + + "\x2c\x35\x7d\x16\x35\x75\x26\xbe\x31\xd6\x7e\xf6\xf6\x8a\xe7\xa4\xa5\xa4\xd2\x6b\x34\x51\xfb\x43\x96\x64\x86\x54" + + "\x39\x57\x70\x7b\xfa\x0c\xbd\x52\x71\x51\x68\x9f\xfc\xa0\x97\x7c\xce\x2f\xd5\x0d\xa1\x1e\x75\x6c\x4d\xb4\x67\x1c" + + "\xae\xe1\xf7\x08\xbd\x79\x9d\x05\x27\xf6\x72\xb0\x5f\x79\x5c\xb1\xf9\xdb\x62\xaf\x8d\xd0\x37\x88\x2a\x0f\xcd\xab" + + "\x45\x26\x8a\x12\xb3\xbb\x0b\xb3\x22\xd7\x59\x67\x36\x35\xc2\x4b\xb3\x70\x32\x1e\xb0\xbf\x6a\x90\x40\x70\x6f\x8f" + + "\xbd\xf2\xce\x0e\xd1\x25\xcd\xda\xff\x22\x43\x47\x84\x3a\x30\x64\x57\xf4\x9f\x89\x2f\x12\xf4\x64\xec\x06\x06\x1c" + + "\xd7\x93\xbf\xd2\x1b\xf6\x3b\x4c\x71\x2e\xf3\x29\xa0\x02\xd3\x88\x63\xfb\x0e\xf6\x7b\x14\x38\x1d\x7b\x3b\x8b\x99" + + "\x96\x7a\x59\x91\x7f\xb5\x25\x8f\x98\xa7\x06\x15\x9a\x55\x60\x90\xc1\x24\xed\x48\xb1\xb3\xb5\xc8\xd8\x92\x4c\x89" + + "\xd7\x26\xe4\xfa\x79\x8d\x46\x03\xcc\xb5\x86\x5b\xea\xcc\x0f\x58\x2a\x87\xbb\xe2\x83\xb7\x50\xe5\xa5\x4a\x04\xdd" + + "\x3d\xfc\xcc\x7d\xe9\xa2\x40\xec\xba\x5d\xcd\x28\xbb\xd6\x36\xc3\xb0\x5b\xed\xa0\xb8\xce\x55\x69\x55\xb1\x61\xbc" + + "\xd5\xc8\xa9\x63\x5d\x8f\xb0\x6a\xfe\x3b\xa8\x9e\xd5\xb2\x37\x3d\x74\x6b\x36\xdd\x90\x09\xf3\x92\x34\xdf\x06\xc1" + + "\x46\xed\xed\x79\xe9\xf4\x6d\x26\x75\xfe\x23\x52\xec\x80\xa5\x09\x19\x34\x62\xb8\x08\x77\x74\x5e\xa7\x3c\x76\x46" + + "\x6f\xbd\x63\x75\x31\x73\x8d\xa8\x3e\x63\x96\xa9\x54\x48\x23\x16\xaa\x9a\x17\x29\x1a\x07\xac\x0f\xee\xfd\xc8\x5f" + + "\xb2\x45\x66\x86\x6d\x38\xe3\xd1\x2f\x6a\x6e\xcb\x3b\xd1\x4b\x37\xfd\xa0\x79\x2d\x1f\xd1\x60\x30\x40\xaf\x05\x97" + + "\x1a\x00\xf3\x7a\x99\x20\x95\xbe\x6b\xdd\xc8\x9f\x84\x83\xa1\xb6\x33\xb1\xa4\xb6\x75\xbc\x9d\xd8\x2d\xb3\xc5\x3f" + + "\x33\x26\xa5\x2d\xe7\xed\x81\x4e\x79\x2f\x6b\xb3\x60\xc1\xcc\x29\xee\x2f\x55\xc5\x5a\xfb\xef\xd6\x27\xa9\xdd\xe3" + + "\xc7\x17\x35\x6c\xa1\x34\x6b\x81\xed\x09\x2e\x4f\x9c\x32\x6a\x0a\xbf\xcb\xe4\xf4\xc3\x44\x95\xe5\x5a\x7c\x39\xf8" + + "\xda\xda\x14\xfc\xe7\x64\xd8\x40\x4a\xc9\x9e\xfa\x59\x91\x5f\x62\x9e\x0c\xb2\xb8\x58\x74\x7e\xf0\xf5\xb7\x5f\x3f" + + "\x09\x91\x10\xe7\x6b\xe5\xbc\xb6\xfa\x11\x7c\x7e\x01\xfb\xc2\xa2\x4e\x3e\x8e\x00\x23\xe4\xe1\x4d\x8d\xb7\x08\xb6" + + "\xc4\x0a\x95\x36\xc1\xb5\xc5\x8b\x46\x45\x33\xbf\x03\xf8\x9d\x27\x53\x76\x01\x47\xe1\xeb\x2d\x6e\x5a\xcd\x0d\xdc" + + "\x89\xa9\xb4\xdf\x46\x12\x38\xbf\xc0\x5a\xbf\xdd\xfb\x75\xbf\x07\xe7\x76\xe1\x89\xc0\xe0\xfd\xef\xb8\xc8\xba\x23" + + "\x86\x3f\x98\x9b\x4d\xc0\x18\xb5\x48\x1e\x47\xdb\xe7\x61\xa9\xbc\x7d\x9f\x5c\xcf\x35\x9c\x68\x43\x89\x2c\xd5\xef" + + "\x2b\x7d\x25\x33\x54\x8f\x15\xf0\x95\x8b\xe6\xc4\x31\xa0\x8f\x6e\xcb\x3d\x16\xf2\xef\xd3\x82\x2b\x59\x80\x90\xbe" + + "\x5d\x3a\x8a\xee\xb5\x68\xa2\x2f\x7f\x7c\xcd\xe8\x8c\x43\x85\xd0\x72\x97\x7b\x5d\x1f\x55\xdf\x4b\xbf\xf5\xf1\xae" + + "\xb5\xa2\x4a\xf3\x24\x46\xf3\xb1\x8c\x57\x97\xdf\x9c\x5a\x8f\x25\x20\x89\x0e\xeb\x4b\x25\xd3\x75\x7d\xbe\x2d\x94" + + "\x2c\x60\xa9\xea\x4c\x15\x71\x49\x7e\x67\x07\xd8\x27\x49\xf2\x8e\x4f\xeb\x58\x2e\xbe\xde\xae\x8d\x9f\x1f\x0e\xc5" + + "\x2b\x36\xc3\x87\x95\xd6\xf4\x8c\xa6\xdb\x7a\x01\x1a\xa7\x61\xb1\xf8\x15\x72\x7a\xf1\x36\x44\xda\x06\x37\xc5\x78" + + "\x53\x5a\xbd\x73\x9a\x9b\xe2\xf7\xce\xb5\x0a\x63\x90\x78\xf8\x58\x83\x06\xcc\x0f\xfa\xfe\x85\x3c\x31\xe9\x16\x50" + + "\x48\xb1\x3a\xdf\xbf\x82\xf0\x46\x99\x5c\x75\x15\xba\x4a\x3a\x82\xe2\x73\x69\xa3\xd3\x8a\xac\x90\xae\x01\xbb\x52" + + "\x69\xf6\xdc\x84\x6f\xa3\x9c\xdb\x8e\x43\x6f\x31\x45\x37\x64\x9d\xfb\xf7\x82\x13\x3b\x76\x1a\x17\x87\x3e\x56\x98" + + "\x42\xa1\x87\x68\xa4\x59\x96\xea\xca\xca\x0e\xfc\x68\x03\xcf\x92\xe3\xd1\xcf\x79\xa5\xb3\xcd\xf3\x2c\xeb\x76\x41" + + "\x6c\x80\x8d\xb6\xd7\xea\xe5\x4a\x96\x32\xaf\x38\xdb\xc5\xb2\x2c\xd2\xd5\x14\xc4\x32\x36\x0b\xc0\x5d\x87\xf4\x1e" + + "\xd9\x5d\x74\xca\x28\x8b\x45\xf4\xfe\xfe\xbd\x1d\xdf\x89\x0b\x59\xc3\x2d\xb5\xd5\x64\x38\x31\xfa\x7d\xeb\x2a\x91" + + "\x57\x26\x78\x94\x63\x85\x1c\xf7\x13\xe6\x4c\x3f\xdd\xa6\x38\x43\x80\x53\x93\xa5\xba\xac\x97\x12\xe9\xc1\x05\xd0" + + "\x13\x2b\x58\x6b\x43\xc4\x89\x02\x0a\xab\x72\x95\x63\x8d\xe1\x31\xb7\x8e\xf0\x91\x0f\xf5\x9d\xa9\x29\x1b\x6a\xc8" + + "\x5d\xf4\xe2\x8b\x84\x93\x36\x3d\x65\x1c\xcd\xe5\xe6\xe1\x78\x2b\xab\x4c\x04\xa9\xdf\xad\xc4\x5f\x7c\x4d\xa7\x9a" + + "\x9d\xed\x01\x3e\xce\xdf\x26\x4e\x2f\x98\x1e\xf9\x6a\xb4\xec\x8a\x12\x42\x32\xef\x45\xfa\xcc\x3a\x00\x8f\x42\x7d" + + "\xda\x91\xc8\x8f\x44\x2e\xc6\x22\x6f\x2d\xfd\x43\xaa\xdf\x3a\x08\xf6\xf6\x44\x8e\xe0\x8a\xc3\xd7\xe2\x75\xe4\x6d" + + "\x4e\xdb\x2d\xcb\x70\x7a\x85\x56\x5d\xea\x5c\x46\x4a\x1e\xaa\x4d\x17\xe5\x30\xc3\x27\x26\x38\x61\xf4\xc4\x92\x05" + + "\xd6\xb3\xc2\x0d\x41\x2d\xe3\xc8\xc9\xf0\x1e\xdb\xa6\x01\xbd\xab\x06\x48\x5b\x84\x5f\x43\x0f\x4a\x22\x05\x8f\x8f" + + "\x0e\xf4\xcd\x7c\x8c\x81\x1e\x34\xf4\xb5\xea\x06\x5b\xcd\xf9\x81\xdb\x94\x5e\xa6\x55\x33\x30\x5d\x71\x58\xaf\xcf" + + "\x41\x48\x90\xa8\xeb\x9b\x9b\xe7\x6b\x59\xa0\xbf\xf0\x1d\xda\x25\x43\x9e\x4c\x35\x49\xdf\xc4\x6a\xe8\x2d\xfa\xa7" + + "\x60\xba\xd0\x45\x78\x1b\xb8\x9b\xec\xa0\x86\xa7\x2d\xe0\xa6\x57\xd3\x95\xd5\x93\x9e\xe9\x8b\x23\xfc\x09\xb2\xd8" + + "\x8a\xee\x28\x7b\xa5\x70\xb3\xe9\xaa\x6c\x65\x48\xbd\x4f\x13\x4a\xfc\x8e\x4a\xcf\x4a\x79\x19\xa4\x41\x25\xcf\xd5" + + "\x55\x19\x16\xc2\x3a\xc4\x03\x91\x00\xc4\xac\x1d\x79\x59\x18\x2a\xf4\x98\x4c\x57\x25\x27\xf1\x89\xf2\x94\x51\x02" + + "\xff\x25\x16\xb4\x2f\xf2\x7e\xe8\xb7\x4e\xd6\x55\x2b\x52\x87\x43\xd9\xc3\x67\xb9\xdd\xbb\x8c\x25\xb0\xf5\x1e\xdc" + + "\x35\x67\xc6\xf8\xa0\x02\x60\x9c\x00\xb3\xdd\xe7\xaf\x7e\x5a\x02\xad\xed\xa2\x1e\x42\xd5\xa2\xe8\xb6\x28\xd6\x15" + + "\x23\xff\x77\x80\xdc\xe4\x51\xa5\xca\x85\xce\xe9\xe6\xb6\xea\x58\x10\x2b\x83\x52\xb7\xd7\xba\x9a\xeb\x9c\x3e\xa8" + + "\xe6\x3e\xf5\x53\x2d\x02\x00\xd5\x6a\xa9\xba\x69\x2f\x56\xc5\x7c\xdd\x9b\xc2\x15\x54\xe9\x89\x30\x57\x0b\x7a\xc3" + + "\x20\x96\x38\x0e\x68\xb7\xdd\xb0\x49\x92\xe8\x81\xb8\x40\xd7\x3f\xfb\x23\x46\xb1\x63\x4b\x5e\x4a\x53\x25\xdd\x01" + + "\x5c\x8e\xcf\xb3\x2c\x71\x55\x8a\x47\x2e\xf7\x8b\x9b\x99\x9b\x45\x58\xbd\x37\xd4\xac\x39\x83\xea\x36\x8b\x4f\x6c" + + "\x3c\x8c\xaf\xa6\x5e\x30\xed\xba\x39\xe4\x87\x62\x6a\x43\x23\xc3\x1d\x20\x0f\x3b\xa3\x4b\x1f\x3d\x1a\x20\x44\x3c" + + "\x58\x53\xc9\xae\x81\x5b\x9e\x2a\x7d\xa5\x4c\x5d\x5d\xdc\xe3\x0c\x6a\xa5\x71\x09\x81\x80\x49\x5d\x19\x4e\xcb\x85" + + "\x57\x30\xcb\x47\xc7\x7c\x83\x1f\xa0\xd1\x0f\xfe\x86\x26\x21\x16\xc9\xb4\xd5\xf2\xd6\xa0\x8e\xed\x88\x7c\x3f\xb0" + + "\x22\x31\xde\x86\xf4\x2b\xd4\x10\x81\x08\x9e\x74\x7b\x0d\x43\x5a\x38\x12\xc9\x4d\xdd\x96\x39\x7e\x27\xa7\x1f\x3e" + + "\xd5\x3a\x22\xd3\x50\x8a\x72\xc9\x02\x3c\x1f\x0d\xf8\x44\x8a\x1c\x31\x12\xb5\x27\xf6\x4e\x73\x31\x21\x7e\x32\xee" + + "\xde\xf5\x29\x57\xe9\xf2\x47\x8a\x80\x9c\x18\x4f\xc7\xb1\x51\x8e\x84\x9e\xa5\xba\x24\x16\x2a\x22\x50\xbb\x96\x41" + + "\x0a\x63\x9a\x56\x65\xcd\x26\xad\xe4\x94\x6a\x45\xd0\x21\xd9\x56\x4e\x0e\x2e\x30\x6a\xd1\xac\x7c\x1b\xda\xb6\xb8" + + "\xcd\xde\x1e\xff\x55\x9b\x0e\x90\x22\x6e\x32\xb2\x0e\x4c\x64\x3e\x62\x06\x7b\xdb\xf8\xb1\xe0\x91\x6a\x67\x80\x0e" + + "\x93\xff\x07\xd6\x28\xee\x0e\xf9\xf4\x26\x5f\xab\x6b\x5c\xed\x27\xf5\xee\xbe\xf1\x56\x35\xe4\xb3\xef\x9c\xb0\xdb" + + "\x45\xee\x2f\x60\xeb\xa2\xe9\x22\x8b\xfe\x59\x3d\xd9\xd4\xe0\x2d\xbd\xc1\x20\xcf\xb3\xc6\xba\x3f\xbe\xda\x3b\x66" + + "\xf7\x4f\xf5\xf7\x91\x39\xfe\xcb\xbb\x13\xce\xb7\xb9\x3d\x30\xfa\xbf\x8e\x00\xb5\x25\x34\x87\xe1\x8d\xf9\x44\xd4" + + "\x75\xdb\xd8\xac\xe7\xba\xd9\x88\x3f\x6e\x51\x55\x63\x5d\x29\x7b\x81\xfc\x81\x63\x79\xf9\xef\xb3\xc6\x52\x71\xa9" + + "\xd1\xb0\x43\x27\x3d\xde\xd9\x21\x76\xc0\x6d\x43\xbd\x79\x4c\x8a\xcf\x2e\x7a\xdc\x12\x46\x79\x83\x0a\x4b\x47\xde" + + "\x42\x07\x0f\xf2\x42\x9c\xe5\x3c\x8a\x93\x35\xbc\x7f\x61\xd0\x18\xe1\xdd\x6b\xf5\xdb\xf0\x9c\xb2\xd3\x48\x2c\x2d" + + "\x83\x3f\xcb\xc3\xad\x72\x37\x36\xba\x2b\x72\x74\x52\xff\x2b\x76\xd8\xe9\x20\x9a\xf8\x5b\x3b\xd0\x99\x60\x17\x5b" + + "\x35\x30\xc8\x67\x7c\x8a\x75\xad\x31\x53\xeb\xb2\x54\x0f\x7f\x4d\x5b\xf4\x3d\xa1\xd6\xec\x59\x20\xf4\x62\x76\x85" + + "\xff\x8f\xbc\x7f\xef\x6e\xdb\xb8\xf6\xc7\xe1\xbf\x95\xb5\xfc\x1e\x46\x70\x8f\x4c\x5a\x14\x29\xd9\xce\x8d\xb2\xa2" + + "\xc7\xb1\x9d\xc6\xdf\xc6\x76\x4e\xe4\x36\xed\x23\xab\xee\x88\x18\x92\x88\x40\x80\x05\x40\x51\x4a\xe4\xf7\xfe\x5b" + + "\xb3\x2f\x33\x7b\x06\xa0\xe4\xb4\x3d\x67\xfd\x2e\xab\xab\x31\x05\x0c\xe6\x3e\x7b\xf6\xf5\xb3\x17\xe5\xa5\xf4\xf9" + + "\xf7\x82\xe2\x76\xac\x44\x70\xb3\xeb\xb1\x22\x36\x70\x85\x2d\xa3\xd7\x4f\xe6\xd2\x54\xb5\x51\x25\x04\x29\x00\xd8" + + "\x18\x12\xd8\x87\x60\x97\xb3\x87\x64\x2f\x35\x55\x76\x09\x86\x7a\xd1\x09\xa9\x4b\x21\x91\x05\xfd\x3e\xdb\x82\x6a" + + "\x85\x6d\xf4\x36\x0b\xaa\x1b\x38\x5d\xaf\x6d\x82\x3b\x14\x1d\x1f\xcb\x66\x3d\xcf\x40\x23\xd1\x1b\xbd\x3f\xd9\x1d" + + "\xcd\xbc\xab\x22\x99\x94\x01\x30\x4c\xd1\x5d\xcd\x49\x98\xa7\x65\xb5\x80\x00\xf0\xc9\xdc\x60\x55\xf4\x86\x33\x56" + + "\xfc\xe6\xb4\x5a\xcf\xcb\xe2\xd2\x54\x0d\xd5\xb5\x87\x5f\x36\x26\x15\x09\x9d\x5d\xfd\xf2\x6d\x61\xd9\xae\x22\x55" + + "\x88\xf2\x9a\x15\xdc\x98\xc7\xbe\x87\x40\x80\xb7\x58\x4b\xcf\x55\xe7\x3d\xc3\x90\x57\x53\x47\x41\xdf\x4e\x5d\xc1" + + "\x33\xee\xe6\x96\xbc\xe3\xf9\x35\x0a\x27\x3d\x31\x45\x7d\xe7\x36\xe2\xce\xdc\x87\x81\x9a\xe6\xda\x69\x1e\xb0\xc1" + + "\x53\x7c\x66\xab\x67\xf9\xf8\xa3\x74\x03\xc7\x52\xce\x75\x1a\xc3\xa5\x9f\xc3\x60\x94\x06\x03\x14\x80\x15\xe7\x59" + + "\xdd\xa8\x15\x61\xf1\x1a\xe5\x22\x26\x14\x44\x13\x5b\xa9\xa3\x1e\xdb\x4f\xed\xff\xb7\xa8\xd3\x63\x2b\x74\xe0\x6f" + + "\x9d\x63\x0d\xf6\xc8\x2d\xf5\xc4\xec\xd5\xc6\x7e\x28\x27\x1e\x63\xb0\xb3\x3c\x57\x93\xb9\x2e\x66\x46\xcd\xcb\x35" + + "\xd4\x66\x79\x34\x13\xf5\xe4\xdc\xcc\xb5\xe5\x84\xc1\xed\x63\x61\x97\xa4\xa9\x74\xca\x80\x7d\x58\xa5\x33\x78\x60" + + "\xaf\xd4\xb7\xd7\x2e\xc0\x25\x1e\x18\x34\xab\x27\x8d\xca\xb3\x0b\x03\xa2\x12\xc4\x66\x84\x85\xec\xf2\x23\xc6\x00" + + "\x54\x97\x4c\x2d\x27\x9f\x78\x38\x8d\x26\x5b\x98\x7a\xe8\x9a\xfb\x91\xa1\x72\x78\x36\xfc\xf4\x14\x13\x33\xde\xda" + + "\xda\x82\x56\x11\xce\x53\xb5\x87\x68\x9b\x82\x18\xe1\x73\xe0\xed\x61\x13\x4e\x8c\xea\x61\x17\xd5\x0b\x33\x35\x55" + + "\x65\xd2\xbe\xab\x76\x61\x16\x65\x75\xed\x2a\x46\x9c\x5e\x40\x05\x2a\xa7\x3e\x27\x09\x81\x98\x68\xb0\xd6\xdb\xc9" + + "\xc6\xd4\x41\xd7\xbe\x75\x9d\xa6\x18\x95\x0e\xd2\xac\x9e\x02\xca\xfb\xdc\x60\xaf\xe6\xba\x56\xe7\xc6\x14\xd4\x25" + + "\x88\xf4\x54\x7a\xad\xaf\xc9\xf1\xc6\x96\xb3\x14\xad\x51\x09\xf4\x27\xfb\xd5\xa4\x89\xab\x8c\xb3\x09\x6f\x1c\x03" + + "\x12\xb5\x78\x72\xc4\x72\xc9\x59\x81\x8e\xd2\xac\x14\xa5\x27\xa7\x6c\x5c\xb3\x1d\xf6\x55\xd7\x4d\xb9\x7c\x5b\x7c" + + "\xa7\xf3\xda\x8c\xb7\x20\xc2\xa6\x5a\x2d\x71\x8d\xc1\x9d\x01\xf4\xbb\xa2\x25\x8e\x0f\x22\x57\x1e\xac\x65\xe4\x58" + + "\xf0\xe7\x54\xae\x0e\xae\xbd\xe0\xd8\x73\x78\x1f\x52\x1c\x47\xac\xaa\x72\xd1\x26\x3f\x5d\x44\x27\x9b\x02\xb4\x0e" + + "\x87\xf8\xf5\xd6\x86\xfc\x76\x98\xfc\xa0\xcc\x67\x05\x12\xae\xdc\x45\xc9\xbb\x07\x2d\x55\x52\x6f\x23\x01\xba\xb9" + + "\xd9\x4c\xc5\xfa\x81\x77\x28\x69\x17\xd5\x6f\x1f\x07\xbe\x0c\x5e\xd8\x96\xd4\x59\x19\x58\xd7\x0d\xec\x11\xdc\x70" + + "\xaa\x37\x25\x54\xfc\x69\x59\xcd\x4c\x83\xb1\x75\x76\x81\x08\x93\x16\xf6\xee\x80\x04\xe8\xef\x2c\xc5\x6a\x4a\x75" + + "\x51\x94\x6b\x3b\x0b\x78\x46\x75\xad\x74\x8e\x26\x18\xd8\x7c\xa0\xd9\xb2\x3f\x6e\xfd\x2c\xab\xad\xfc\x64\xaf\xb3" + + "\x1c\xbe\xa3\x40\x64\xfc\xe5\xbe\x04\xd9\xd9\x2d\x7d\x53\x62\xd7\x7b\x80\x25\x92\x11\x3e\x8a\xdd\x74\xd7\x76\xd3" + + "\x71\x6e\x4a\xf3\x73\xd6\xcc\xfb\xbe\xb6\x93\x46\x57\x0d\x57\xf9\xb2\x48\x59\xe8\xcf\xcb\x72\x89\xdb\x2b\x6e\xff" + + "\x07\xaf\x40\x04\x53\x48\x6a\xae\xc0\x05\x20\xea\xb0\xef\x59\xcf\x45\x6e\x9e\x5f\xab\x0a\xd9\x08\xb7\x4d\x44\x57" + + "\xa0\x2a\xae\xf7\x19\x82\x14\x05\xe4\xc5\xbe\x82\xf9\x71\xfa\x4a\xb8\x60\x89\x5a\xc0\xe8\x6d\x79\x84\x0f\xab\xcc" + + "\xd2\x68\xb1\x64\xb6\x78\x0d\x65\x8f\xd4\x36\xdf\x50\x70\x0e\x3d\x8a\x21\xce\xaa\x27\x6a\x35\x2f\x57\x70\x5e\x20" + + "\x1d\x98\x63\xb7\x60\x13\xf8\x1b\x72\x48\x0f\x76\x76\xa0\x1c\xa9\x8e\x81\xee\x1c\x09\x65\xaf\x18\x31\x44\x43\xbb" + + "\xa5\x00\xe8\x3f\x59\x06\x9f\x1e\x85\x0f\x7f\x60\xc3\xa6\x1d\x5a\x00\x59\x4e\x93\x1f\xb4\x45\x9a\x54\x98\xba\x9d" + + "\x1d\x25\xdb\x7e\xaa\x64\x85\x87\xf2\x5d\x4b\xbf\x6d\xbf\x3f\x0d\xbe\x76\xc8\xb5\x76\xa8\xa0\x9f\x19\xd0\xcf\x03" + + "\x60\xfe\xec\x41\x06\x52\x04\x69\xb4\x68\x82\x04\x4d\x93\x88\x60\x3c\x8f\x98\xa0\x48\x01\x9a\x1f\xdc\x00\xa0\x8e" + + "\x5d\x55\x80\x04\x89\xcb\x8b\x57\xba\x4e\xd3\xdb\x95\x97\x7e\x2e\x44\xd2\x23\x37\x92\x68\x70\xb8\x35\x22\xcf\x66" + + "\x78\x38\x8c\xf2\x6b\xd3\x7a\xf2\x5b\x42\x1c\x68\x63\xb3\x09\xeb\x30\x0d\xce\xd7\xe0\x76\xf1\xe1\xbd\x2e\xbf\x8f" + + "\xda\xe4\xd3\x21\xc5\x60\xf5\xba\x92\x1b\x44\xa7\xc4\xd3\x75\xef\x2f\x41\xde\xe3\x8e\x7f\x7f\x66\x69\x80\x3f\x4f" + + "\xc0\x84\xf8\xfc\xf3\x70\x82\x5d\x2d\xe4\x83\xc1\x67\x2e\x52\xaf\xb5\x77\x45\x88\xc3\x06\x84\x09\x22\xe2\x6b\x4d" + + "\xe6\x58\x22\x0e\x94\x6e\x93\x8a\x5a\xaa\x5b\xd3\xee\x6e\xed\xe3\xad\xad\x9e\xcc\xf2\xd8\x53\xba\x9a\x05\x09\xe2" + + "\x02\x8e\xd3\xbe\x8c\xb8\x4a\x5d\xcd\x02\xe7\x21\x30\x1a\x05\xf6\x5c\xfb\x57\x0f\xcb\x79\x3f\x1e\xa7\x6c\x8d\xa1" + + "\x5a\x02\x47\x24\x14\x7b\x78\x47\x93\x41\x95\x32\xbd\x4c\x87\x73\x5d\x53\xbd\xe1\x57\xb0\xec\xa4\x7d\x8f\x9a\xf5" + + "\xfe\x43\xc1\xc6\xb1\xa5\x76\x76\xec\x3f\x12\x19\x80\x95\x5c\x2d\xd9\xcf\x7b\xd8\xd4\x4b\xcb\xb7\x3b\xd8\x29\x07" + + "\x46\x80\x8b\xd9\x6a\xde\x7b\x2f\xf9\x6d\xdc\xef\x39\x2d\xb9\x80\x1e\x00\x23\x86\x5d\xdb\x82\xec\xce\xf6\x6e\x91" + + "\x8c\x20\xef\x1e\x5f\x9e\x17\x9f\x8e\xe3\xb9\x95\x0a\x8e\xe5\x31\xa3\x17\xe1\x01\xbb\x95\xca\x21\x62\xac\x65\xde" + + "\xe8\x12\xf6\x69\x5a\x8b\xd2\xb5\xd4\xcc\x4d\xe1\x8b\xdb\xfd\x88\x31\xd5\xc0\x3e\x7a\x2e\x90\x07\x7c\xdb\x81\x8d" + + "\x88\x31\x6c\xdb\xc3\x90\x1c\xf0\x37\x9d\x51\x0d\x6d\x1f\x22\x3c\xc3\x42\xb2\x16\x87\x13\xa1\xf0\xe5\x09\xc4\x6b" + + "\xf3\x53\x0f\x61\x7c\x36\x56\xad\xc0\xa3\xf6\x01\x01\x6b\xa7\xa5\xea\x6e\x58\x4e\xff\x4b\x66\x09\x77\x70\xb2\x82" + + "\x7c\x31\x74\x35\x1b\x40\xdb\x03\x2a\xd2\x57\x32\x75\x85\xdc\xf5\x0e\xfe\x02\x2e\x79\x09\x81\x21\x9d\x8a\x69\xe1" + + "\x32\xcc\x49\x1f\x1e\xca\xf6\x2e\xa1\x17\xd8\xf4\xd3\xa3\xe0\x2a\x8b\x4e\x9e\x7c\xe5\x11\x3c\x83\x73\xd7\x59\xd9" + + "\x2b\x1a\x56\xbb\x2e\x78\xb3\xa1\xaa\xb6\x33\x60\x48\xc4\x6f\xdb\x0d\xe8\xbc\x97\x4d\x95\x56\xb3\xec\xd2\x14\x7e" + + "\x57\x40\x36\x19\xb7\x2d\x86\xf7\xbc\x9d\xa5\xf0\x06\x2d\x5b\x0a\xbe\x73\x96\xad\xf5\xdc\xc0\xdd\x89\x98\xa3\x5e" + + "\x22\xf2\x07\x56\x37\x08\x4a\x80\x55\x46\xa6\x77\xa7\x3b\x13\x39\x04\x0b\x6f\xe7\x73\x7b\x61\x5a\x0c\x78\x1b\xa2" + + "\xdd\x53\x6d\x6f\xf7\x1c\xcf\x21\x4e\xb0\x53\xfa\xb4\x0e\x40\x9e\x8b\x4e\xb5\xcf\x00\xa0\xaf\x74\x1d\x81\xf8\x36" + + "\x8d\xa8\x07\x63\x94\xde\x32\xe9\xdf\xf3\x45\x05\x55\xa5\xa5\x9d\x29\x80\x02\xd6\xc5\xb5\x95\xd4\xa1\x1c\x5d\xc8" + + "\xb7\xf4\x80\xf9\x4b\xc7\xcc\x48\xcf\x94\x3b\xba\xf0\xaa\x56\x59\xa3\x38\xf0\xfa\x58\xb6\xd8\x79\xf9\x72\x9c\x8b" + + "\x6d\x3a\xae\xeb\x87\xd2\x0a\x04\x3c\x9c\xac\x50\x59\xe3\x24\x0a\xdb\xc9\x06\x07\x94\x97\x81\x39\xca\x03\xf8\xd1" + + "\x30\xe2\xde\x13\x0e\x61\x4c\x1b\x6f\xe1\x56\xee\x1e\xb0\xed\x03\x0f\x17\x7f\xdf\x36\x58\xe8\x59\xeb\xc4\x80\x36" + + "\x20\xd8\x3c\x4e\xae\xa7\x23\xc4\xee\xc9\x45\xea\xc9\xa1\xe3\xcc\xed\x3d\x22\x77\xbc\x03\x80\x0b\x59\x0e\x4f\x68" + + "\x21\x7f\xc6\x36\x32\xf5\x37\x37\x8e\x75\xf4\x33\x02\x1f\x1e\xe1\xf7\x8c\xb9\x26\x5f\x9c\x86\x6d\xa0\x96\x58\x1d" + + "\x8b\x3f\x7a\x7d\x35\xc6\xef\xcf\x0e\x6f\xbf\x2a\x91\x0b\x75\x4c\x85\xb8\xaa\x63\x97\x66\xbc\xa6\xa2\x32\x9f\x4c" + + "\x96\x78\x92\xc3\xbb\x3e\x9a\xe8\xf6\xe4\x76\xee\x2f\xbb\x61\x78\xe6\x59\x8b\xde\xe6\x35\x6e\xe9\xcd\x3b\x2f\x30" + + "\x87\xfd\xc1\x5c\x77\x24\x71\x83\xce\x87\xdd\xd1\x2d\xf3\x69\xe5\xfb\xb2\xa0\x94\xff\xb0\x7e\xb7\x6d\x36\x5c\x61" + + "\xa9\x23\x0e\xb0\x4f\xed\x28\x5c\x40\x68\x87\xa3\xdb\xbd\xcf\xb6\x58\x57\x14\xd0\xd3\x55\x31\x09\x1c\x99\x56\xcb" + + "\x1c\x50\x6f\x4e\xb1\xf5\xd1\x48\x69\x28\x3a\x00\xd6\xca\x6e\x38\x53\x98\x6a\xe0\x7e\xd1\x85\x8b\x29\xb9\xfc\x61" + + "\xde\x3a\x55\x49\x65\xea\x32\xbf\x04\xdc\x8c\xb4\x2c\xec\xbf\xb1\xe2\xa7\x97\x80\xc8\x8b\x67\x38\xe9\x0f\xdc\x37" + + "\x69\xa2\x38\xb6\x01\x2a\xb2\x62\x84\xad\x67\xaa\xb3\xfc\x13\xeb\xb1\x9f\x44\xf5\x14\x65\x93\x4d\xaf\x13\xb0\x6e" + + "\x95\xb3\xca\xd4\x75\x67\x5d\x5c\x8d\x3a\x83\x2f\x39\xfe\xb5\x41\x47\xbf\x64\x69\x00\x5f\x27\xe1\x3c\x94\xe5\x22" + + "\xab\x9d\xa3\x22\x95\xeb\x5a\x48\xb7\x52\x0d\xc2\x08\x6d\xf9\x3d\xb4\x85\x69\x06\x3a\xbf\x4a\x69\xd5\x86\x76\x0e" + + "\x03\x26\x78\x68\x67\xa3\x93\x2d\xee\x70\x11\xa7\x86\x2c\x13\x2a\xd7\x7f\xf4\x50\x4d\x8b\x17\x65\x01\x66\xa9\xef" + + "\x74\x96\xdb\x7f\x7f\xa4\xd9\xf1\x28\xb6\xcc\x92\x4d\x0b\xa2\x24\xd8\x62\xd4\x1e\x4d\x25\xef\x33\x01\xf2\x51\x98" + + "\x35\x3c\xdd\x28\x32\xe1\xbe\x93\x3c\x61\x36\xc0\x87\x2d\xb1\x69\x5a\x08\xde\x4f\x78\x38\x4f\x31\x19\x09\x85\x98" + + "\xf0\x5f\x01\x5f\xc7\x73\x79\x0a\x79\xa0\xd5\x0d\xa6\x81\xbe\x51\xbc\x1d\xd4\x19\x22\x30\x94\xd5\x5a\x57\x80\x1f" + + "\xa7\x19\x1e\xb7\x74\x63\x70\x15\xfa\xda\xa0\xa3\xa7\x07\x67\xea\xac\x23\x72\x99\xfb\xed\x62\x34\x8f\xec\x10\xa0" + + "\x8b\xac\xb0\xd8\x44\x73\x1c\xa1\x75\xdf\xca\xe0\x19\x3f\x74\x7e\x3d\xe4\xdd\x18\x8b\x7a\x71\x81\x5e\x5f\xbc\xdc" + + "\xa2\xad\xc5\x03\x1c\xd2\x21\x54\x61\x21\xdc\x6d\xa2\x10\x18\x63\xc2\x32\x3c\x91\xa2\x1c\x1e\xba\x50\xba\x6c\x45" + + "\xb7\x6c\x71\x71\x9e\x4b\xf0\xae\xd9\x55\x89\xa5\xc9\x89\x3a\xc3\x29\x02\x21\x98\x87\x78\xec\x9b\x70\x83\x22\xd7" + + "\x93\x01\xf2\x84\xa7\x7e\xda\xce\xf0\xfe\xea\x98\x5e\xc1\x26\x8b\x0c\x81\xfe\x27\xee\x78\x87\xc0\x02\x2f\x7d\x83" + + "\xd1\xe9\xa2\x6c\x8c\xda\x75\xd2\xee\x26\xe8\x39\xef\x15\x57\xee\xd5\x54\x95\xe7\xbf\x58\xfe\x98\x51\xe8\x06\x94" + + "\xd5\x07\xbf\xd4\x28\x33\x67\x35\xe9\xe8\x49\x09\x22\x23\x50\xa8\xa8\x3c\xce\xb6\xca\x16\xc1\xb1\x0f\xb7\x5d\x7a" + + "\x8f\x48\xff\x5c\x9e\xff\x32\x50\x7e\xdb\x8c\xf9\x77\xa8\xe6\xc1\xf1\xf1\x20\xbc\x39\xd0\xe7\xd6\x58\x66\xcb\xce" + + "\x20\x39\xaa\x6e\x08\xef\xdd\xea\x0d\x2d\x1d\xf2\x35\x3c\xa3\xab\x65\x8f\xc2\x07\x27\xec\x55\x7e\xef\xb3\xdf\x4f" + + "\x27\xec\x59\x23\x0e\x98\xf6\xd2\x23\x77\x09\x00\xed\x25\x23\xa8\x7b\xfd\x58\x49\xa0\x4b\xea\xe1\x2d\x24\x82\x34" + + "\x00\xac\xf1\x73\x1f\x78\x2a\x20\x8a\xc8\x98\x18\x94\x2a\xfd\x25\xc9\x5a\x3d\xd7\xa5\x80\x83\x07\x9f\xab\x0e\x72" + + "\x32\x1a\x29\xbe\x8b\xec\x0e\xc7\xfb\x52\xdd\x28\xbe\xf2\xe8\xda\xf2\x37\x96\x68\x41\x46\x7c\x9d\xd2\x17\x1f\x60" + + "\xb2\x6e\xb8\x2a\xfc\xf3\x8c\x59\xe8\x43\x37\xf2\x0f\x28\x35\x95\x1c\x7a\xfa\x91\x26\x1e\xe8\xec\xdf\xd5\x81\x3a" + + "\x83\x99\xe6\x0f\xfd\xdb\x47\xfc\xc6\x7e\xdb\x61\x64\xf7\x74\x94\x09\x0f\x0f\x46\xdd\x28\x22\x1f\x67\xc1\x06\xe4" + + "\xb9\xde\x3f\x0b\x7d\x26\xdc\x24\x75\x14\xec\x24\x26\x6e\x47\x1f\xbb\x33\x30\xfe\x1d\x1c\xe0\xe1\xa6\x5e\xf9\xc6" + + "\x78\x2b\x30\x83\x49\xe0\x1d\x7e\xef\xbf\xd6\x17\x86\xa1\x03\xb1\x2f\x8e\x7c\x04\xe7\x87\x48\x8e\x2f\x26\xea\x00" + + "\x76\x18\x79\x5e\x60\xe8\x30\x3b\xda\x3d\xf6\xa3\x90\x4c\xde\x96\xfd\x83\x5c\x24\xb9\xaa\x41\x58\x69\x90\xa4\x33" + + "\xcf\xe1\x20\x6c\xdf\xf3\xee\x08\x5c\x38\xf6\x9b\xa5\x2a\xe6\x26\x5f\xc2\x2d\xb9\x8e\x78\x8d\x7a\x75\x5e\xda\x5b" + + "\xd5\xee\xca\xd1\x43\x35\x50\xc3\xe1\x70\x20\x9f\xbe\x11\x0c\x47\x98\x9a\x7f\x8b\x76\xc6\x5f\xd0\xfa\x79\xa4\x40" + + "\x2c\xa1\x61\x88\x95\x72\x78\x26\x28\x6b\x07\x5f\xb5\x93\x83\x23\x1a\xe4\xaa\x00\xa3\xfa\xaa\xb0\x44\x2b\x37\xf6" + + "\x04\x89\x3e\xd5\xd4\xfc\x42\x67\x05\x52\x0d\xaa\x1d\xdd\x0c\x31\xd3\xb4\x18\x58\xf7\x05\x2d\x4a\x04\x77\xf4\xb1" + + "\x72\xde\xb7\xfb\x51\xc7\x16\xba\x6e\x4c\xe5\xa6\x75\x68\x6f\x8c\x70\x16\x26\x65\x51\x93\x47\x00\x66\xd2\x50\x18" + + "\x75\xeb\xbe\x19\x60\x70\xdd\xaa\xc6\xb0\xf3\x61\x4c\xc4\xc5\xa8\x10\xfc\x26\x18\xc9\xb8\xc5\xcf\xc9\xf4\xe5\x7f" + + "\x5e\xa6\xb6\x90\xd3\x8a\x03\xe9\x2f\x9b\xb9\x3b\xc3\xe8\x1f\x43\x44\x13\xad\xd6\xf0\xed\x0a\x3e\xb4\x53\x13\x98" + + "\xb1\x32\xe7\xb3\x5a\x0f\xd8\xc2\xde\xd2\xf4\xb8\xd2\x68\x11\x6d\x05\x7d\x13\x03\x78\x24\x39\x5f\xb2\x98\xf3\x1b" + + "\xb7\x59\x42\x3f\xf1\x0d\xfb\x49\x8d\xb1\xa9\x40\xea\xa5\xde\x11\x33\x02\x03\xfc\x4b\xd4\x61\xc1\xb6\x23\x01\x43" + + "\xd9\xb2\x3d\xc2\x48\x3a\xa6\xbc\x2d\x6a\x6f\xcf\xaf\x4d\xbf\xb3\x5a\x9a\xe6\x3b\xeb\x25\x5a\xed\x45\x56\xbe\xb3" + + "\x44\xbf\x07\x6e\x1c\xcf\x5d\x45\x54\x3f\x3f\xf0\xb4\x46\x8a\x81\xc0\x17\xbb\x83\x2f\x4f\xcd\xa1\x6a\x2a\xa3\x1b" + + "\x0c\x76\xae\x95\xae\xdd\x4d\xe5\xa8\x52\x87\x63\x57\x34\x9d\x47\x96\xc5\x53\xa4\xd1\x0b\xd5\x75\x71\x87\x6f\x2b" + + "\x1b\x0d\xe5\xb6\xa2\x51\x2a\x4f\x30\x42\xb6\x43\x6b\x82\x63\x88\x1b\x6b\x13\x5f\x1e\x17\xec\xe4\xd0\x37\x17\xf3" + + "\x7c\x3a\xf1\xe8\xfe\xf4\xc0\x91\x89\x86\x36\x88\x28\x44\xdf\xb3\xe7\xc4\xbe\x8b\xfd\x13\xb2\xef\x82\x75\x8f\xda" + + "\x68\xef\x8d\xd6\xae\xef\x77\x1b\x0e\xc5\x2e\xde\x18\xcc\x31\x1a\x85\xc6\x92\xb5\xce\x20\x3a\xb0\x2c\xec\x15\x06" + + "\x6a\x4f\x37\x2a\x41\x17\xdd\x2e\xda\x96\x07\xe5\xb7\x80\xc2\x85\x67\xe4\xae\xa9\xea\x08\xf7\x74\x15\x05\xfc\x7e" + + "\x84\x41\xf3\x4e\x5e\xdd\xe0\xed\x50\x16\xea\xc5\xdb\xd7\x1c\x99\x8b\xa2\x9f\x4e\xaf\x7f\x40\xd5\xa8\x0c\x31\x43" + + "\xc5\xd0\x51\x97\x7e\x9b\xb8\x62\xa9\x4f\xf2\x8e\x6d\xf0\x9d\xef\x15\xed\x8d\x69\xe1\x73\x2d\x48\x4e\x65\x53\xe8" + + "\x23\x6a\x3d\x6d\x0b\xae\xbb\xf6\x3c\x53\x02\x98\x63\x75\x62\x1a\x10\x3b\xaa\x95\x41\x17\xa1\xac\x51\xe5\x64\xb2" + + "\xaa\xea\x21\xe0\x1e\xfd\x64\xbf\x18\xa3\x39\x5b\xc0\xe4\xc0\x8d\x6a\x2a\xfc\x54\x4f\x2e\xd4\xbc\x5c\xab\x85\x2e" + + "\xae\x55\xd6\x98\x05\x90\x0c\xbb\xc8\x78\x63\x98\x29\xea\xb3\xe9\xd2\xc3\x4e\x90\x95\x3d\xab\x4c\x3d\x54\x27\xc6" + + "\xa8\xfb\x5f\x7c\xf9\xd5\x01\x8c\x4b\xa7\xd7\x3f\xeb\xac\x19\xab\x03\xd7\xe2\xf7\x65\x9e\xaa\x1e\xf8\x58\xe4\x46" + + "\xd7\xa6\x1f\xd7\x74\xef\xb3\xad\x79\x99\xa7\xdc\x5d\x37\xd7\xf6\x61\x80\xe0\x27\x1f\x04\x53\x6d\x9b\xdc\xdd\xc5" + + "\x1d\x22\xb7\x78\x18\x07\x8d\xf9\x91\x79\x1f\x09\xd6\x88\x18\xff\x35\x27\x64\xb3\xd3\x9d\xd5\x2e\x74\xbb\x8a\x3b" + + "\x06\xd3\x23\x43\x84\x1c\xf8\xbe\xcf\x58\x48\x5a\x28\xe8\x33\x38\xf1\xe1\x11\x62\x65\xa3\x0b\x0b\x87\x81\x41\x85" + + "\x02\xbb\x74\x6f\x2f\x1e\x9d\xbf\xed\x69\x5d\xa3\x48\x9e\x88\x2d\xfc\xc9\x20\x06\x15\xba\x1c\x76\x8c\x69\x2b\xaa" + + "\xcd\x79\x80\x50\x05\xaf\xa6\x4a\xab\xa2\xac\x16\x3a\x87\x4f\x7f\x8a\x16\x1e\x78\xd2\x49\x45\x89\xea\xc0\xd5\xce" + + "\xf6\x92\x1c\x75\xc0\x81\x50\x8e\x6d\x9b\xc7\xb6\xb3\xd3\x35\x38\x99\x35\xad\x73\x3c\xaf\xe4\xd4\xfa\xa4\x48\xe7" + + "\xe5\xaa\xb0\x72\x79\xc9\xa8\xf2\x48\x1c\xe8\x30\x87\xf4\xc5\x01\xa8\xa8\x53\x8e\x2d\x3a\x93\x3c\xfa\xbb\x2a\x9b" + + "\xcd\x00\xd7\xf3\x1a\xeb\x95\x5b\xd4\x63\x16\x79\xe2\xd0\xe0\x07\xb8\x79\xaa\x68\x5f\xca\x10\xee\xa8\x64\x4f\x25" + + "\x50\x73\xc2\x64\xb9\xe3\x8b\x72\x3a\x8d\x8b\x7d\x0c\x48\x1b\x67\xfd\x79\x17\x1d\xca\x39\xf5\x06\xb3\xa6\xe4\x53" + + "\x35\xc9\x8d\x2e\x56\x4b\x12\xd8\xc9\xc1\xcf\xbb\xf4\x32\x4b\x4d\xa2\x99\xc3\x0e\x41\x0b\xf2\x4b\x5b\xe7\x0f\xc4" + + "\x4c\xf4\x54\xf2\xe2\xed\xeb\xe7\xe8\x6c\xff\x43\xa9\x53\x93\x26\x03\x5f\x03\xa1\xbb\x61\x6f\x11\xe4\x76\x43\x2d" + + "\x79\xa9\x37\x7f\x19\x1c\xd9\x18\xa8\x32\xa0\xab\xa1\x57\xa2\x53\xac\xf0\xad\x43\x9b\xc0\x9f\x53\xff\xe8\xa8\xcd" + + "\x39\x4b\x59\xad\x99\xcc\xd5\x44\xd7\x06\x1c\x26\x2b\xa3\xfe\xe0\xd1\xc7\xb8\x5f\xe0\x73\x47\xa6\x02\xe7\x3d\x7a" + + "\x5e\x95\xeb\xda\x54\x6e\x25\xbc\x33\x1f\x50\xe5\x8a\x4c\xa6\xe8\x5c\x00\x04\xbb\xa9\x32\x54\x1d\x59\x11\x00\x8a" + + "\x9e\x80\x4e\x00\xe1\xd1\xf5\xa4\xc9\x2e\x4d\xa2\x6c\x27\x10\xd0\x3d\x6b\x14\xe0\x0f\xa6\x2a\xab\x6b\x7b\x2b\x82" + + "\x97\x29\xe8\x9d\x0a\x43\x75\xa7\x59\x3d\x29\x2f\x4d\x85\x0e\x74\xcf\xe7\x55\x56\x9f\x40\x15\x63\x46\x58\x3f\x5f" + + "\xcd\x6a\x0a\x96\x03\x78\xf5\x26\x9b\x5c\x98\x66\x74\xf0\xe8\xd1\x57\x8f\xee\x4f\xca\x85\x1d\xe9\xf8\xe0\x73\xb7" + + "\xe5\xc5\xa6\x70\x3d\x04\x77\x17\x5e\xc1\x44\x7a\xfe\x13\x31\xcd\x1a\xa5\xeb\xeb\x62\x32\xaf\xca\xa2\x5c\xd5\x98" + + "\xf4\x55\x03\xde\x3d\x43\x37\x41\xbf\x01\xc4\x7a\x55\x64\x0d\x14\x48\x4d\xae\x05\x71\xdc\xaa\x4d\xf3\x2e\x5b\x98" + + "\x72\xd5\xb8\x93\x87\x33\xca\x0b\xe6\xc9\xbd\x13\x7c\x6a\x9c\x11\x7b\x12\xae\x23\x2f\x67\x64\x3f\x78\x38\x3a\x4d" + + "\xff\xd5\x0d\xce\x8d\x3d\xb3\xcf\x9c\x47\x25\xed\xfa\xb2\xb0\x3b\x7c\x20\xdc\xbd\x29\x4b\xf1\xba\xac\xb0\x0b\x54" + + "\xb0\xa3\x03\xb7\x9e\x0d\xa6\x01\x1e\xb0\x91\x29\x9d\xd3\x3e\xc0\x39\x90\xa9\x21\xfe\x94\x81\xbf\xe3\x34\xe2\x23" + + "\x28\x75\xdc\xa5\x29\xd8\x2a\xb6\xb2\x5b\x37\x2d\x4d\x8d\xa8\xc6\xdd\x9c\x8c\x8b\x55\x80\xba\x5f\xaf\xf2\x26\xf3" + + "\x00\xc9\x44\x63\x38\x7b\x24\x27\x6e\x22\x91\xa7\x9c\x06\x2e\x64\x8e\x37\x83\xd7\xa3\x1a\xdd\x9e\x97\x0e\xa8\xeb" + + "\xdc\x30\x4d\x07\x2f\xe1\xac\x79\x50\x8b\x2c\x79\xc8\xb6\x69\x48\xee\xe8\x8f\xb3\xfb\x3b\x8c\x19\xa2\xa0\x9b\x0b" + + "\x73\x4d\xf2\xd7\x40\x4d\xe6\x3a\x2b\x50\x0b\x06\x7e\x02\x7f\x34\xcd\x40\x55\x7a\x2d\x82\x19\xbc\x72\xa3\x9d\x50" + + "\x19\x53\x72\xaf\xf2\x0b\x75\x64\xab\x15\xa8\xe7\x84\x0c\x68\x9a\x1a\x59\x2a\x27\x58\xcb\xcb\x03\x5d\xc9\xec\x87" + + "\x04\x04\x8f\x5a\x63\x77\x8c\x5c\xef\xa4\x63\x26\x23\x9b\x66\x05\x7d\x19\xb0\x38\x38\xf4\x60\xbc\x19\x0c\xf9\x34" + + "\x23\x4c\xcc\xd6\x48\xc5\x15\xcb\x5d\x2e\x0b\x5a\x0f\xbb\xcf\x84\xc4\x8b\xe2\x7c\x27\x98\x4b\x47\x5f\x3d\xef\xdf" + + "\x21\x72\xb1\x66\xc0\x5d\xf7\x7a\x2d\x47\x29\xc3\x8b\x60\x82\x05\x65\xf9\xd6\xfe\x2d\xd2\x8e\x55\xab\x22\xc8\xed" + + "\x61\x8a\x26\xab\x8c\x83\xd8\x44\x51\xd0\xad\x29\xd8\x0a\x04\xde\x35\x0b\xe3\x4e\x38\x02\xbb\x95\x5f\x46\x86\x04" + + "\x33\x57\x13\xb3\x24\x6c\x14\xdc\x91\x41\xc6\x1a\xa1\x39\x09\xa5\x2b\xda\x1e\xd3\x42\x56\x1f\xc7\xfb\xf9\x3d\xd9" + + "\x36\x0b\xd8\x0a\x36\x04\x66\x87\x1d\xff\xd8\x0e\x4c\x42\xb5\x62\x11\x61\x20\x6c\x02\xe6\x9d\xf2\x41\x81\xcd\x02" + + "\x7d\xb2\xf3\x76\x4c\xed\x90\x8e\x45\xce\x1d\x14\xcc\xec\x3e\x8b\xbe\x84\x95\x8d\x71\x49\x02\xac\x67\xbf\x61\xc0" + + "\x8d\x03\xb3\xb0\x8f\xdd\xf5\xfb\x47\x83\xcc\x16\x4c\x1f\x3a\x7a\x84\xcb\xe6\xb0\x1f\xec\xb1\x3c\x16\x3d\xd8\x77" + + "\x3d\x18\xbb\xad\x2e\x2c\xee\xcc\x31\x39\xfc\x80\xda\xf9\x3a\x69\x0e\xa4\x01\x22\x04\x4e\x01\xa9\x6e\x74\x18\x0d" + + "\x61\x4f\xd8\xb2\x79\xa1\x1b\x1d\x32\x1e\xeb\xc2\x31\x7f\xe0\x62\x6b\x4b\xd5\xa0\xf0\x1b\xe3\x23\xb5\x07\x09\xc6" + + "\xe9\x0f\xfe\x73\xf8\xf2\x87\x97\xaf\x5f\xbe\x79\xf7\xe1\xcd\xdb\x17\x2f\xe3\x77\x2f\xde\x3e\xff\x73\xfc\x72\x8f" + + "\xa2\x27\x44\xd9\x67\xa0\x43\xee\x04\x7b\x67\xd3\x92\xed\x5d\x8c\x0d\x71\x73\xd3\xf5\xfc\x6b\xf0\x48\xed\xa9\xdd" + + "\xe8\x5d\x5f\xcc\xa1\xdb\xf5\x76\x1a\x7a\x6e\xd0\x2e\x15\xc5\xb3\x22\xad\xca\x2c\x55\x4f\xd5\x13\x42\x1f\x7a\x9b" + + "\xa7\xea\x67\x73\xfe\xa7\xac\x71\x77\x0b\x4e\x30\x45\x9e\x93\xcb\xf6\x4b\x2b\xf5\xd6\xf6\x54\x8f\xa6\x95\x31\xbf" + + "\x1a\xba\x4b\xa8\x16\x1a\x4d\x61\xd6\x9c\x54\x0b\x97\xcb\x1e\x7d\xa3\x09\x94\xb3\x28\xd5\xe9\x69\x6d\x9a\xb3\x33" + + "\xba\x18\x00\x0f\x81\xda\x41\xaa\x45\x30\x84\x64\xd1\x1d\x4e\x5c\xec\xdc\x40\xed\x0f\xf0\x34\xcc\x4c\xd3\x61\xe6" + + "\xa7\x0e\x60\xf4\x9a\x4f\xf3\x70\xef\x33\x0c\xae\xe7\xb4\xa6\x32\x93\x01\x3c\xd8\x0d\x33\xf5\x33\x3b\x6b\xa7\x6f" + + "\xb8\xca\x52\xc2\x1a\x83\x3f\x35\xed\x9c\xe0\x36\xc3\x0d\x77\xe8\xbe\x91\x38\x53\xb6\x67\x17\x26\x10\x4c\xe5\x66" + + "\x04\x9f\x57\x4c\x33\x86\x35\x61\x24\x02\x07\xa9\x30\x8a\x02\xc2\xf7\x65\x85\x5a\x94\xa9\xb1\x54\x07\x99\xd8\x9a" + + "\x7d\xc6\x2d\xdb\xe9\x7d\x61\x8b\xb2\x81\x04\x61\xea\xfe\x57\x8f\x1f\x7f\x3e\x74\x46\x08\x60\x6f\x9c\x56\xc3\xc0" + + "\x39\x44\xc0\xe2\x69\x55\xfe\x6a\xf8\x7c\x0d\xfd\xd5\x20\xc7\xec\x3b\x1e\xcd\xf7\xbe\xbc\x13\xec\xa5\x9c\x1a\x64" + + "\x1e\x21\x04\xf6\xb7\x0e\x37\x48\xe0\x29\xa1\x32\xda\x22\xcc\x82\x03\x3b\x4e\x31\x45\x17\x06\xb9\xcb\x55\x01\x16" + + "\xaf\x23\xfc\xe2\x54\x05\x6b\x79\x16\x08\xc3\x30\x70\x0c\x1d\x62\x5e\x1b\xc7\x41\x75\x70\xc7\x5d\x95\xbc\xc4\xa0" + + "\x96\xe0\x6e\x9e\x98\xc9\xaa\x02\xde\x38\x2b\x40\xbe\x2e\xf6\x4c\xb1\x5a\x98\x0a\x59\x11\xfb\xf7\xba\xca\x30\x0c" + + "\x85\x73\x25\xc1\xb7\x4d\x75\xed\x4d\x67\x3c\x05\x71\x87\xed\x94\x20\xa9\x1e\x2b\xea\x07\x5d\x0d\x9d\xa7\x20\x33" + + "\x3c\xf1\x03\x39\xaf\x92\xbd\xed\x3a\xd8\xfc\xee\x3b\xc1\xf8\x6a\x45\xd9\xb8\x61\x78\xd0\x4a\xd6\x50\x5e\xdb\xad" + + "\x8f\x84\x26\xd9\x53\xe2\x92\xbb\x75\x14\xd8\x79\xea\x7a\x6c\x0f\xef\xec\x70\x5b\x69\xf9\x52\x06\x1d\x4e\x02\xcb" + + "\x3c\x2e\x9c\xa7\x00\xa7\x3c\x5b\x67\x11\x6c\x60\xf4\xf2\x48\x9c\x7f\xa1\x85\xf4\xbd\xc5\xb0\xfb\x80\x80\xb8\xfe" + + "\xea\x46\x47\x37\x3d\x40\x57\x54\xe5\xd2\xbb\xa9\x81\xb4\xb9\xd0\x18\xf9\xc7\x15\x53\x4e\x37\x76\x31\x00\x68\xbe" + + "\xd4\xb8\x8f\xa2\xdc\xab\xa6\xb0\x5b\xc5\xb9\x35\x24\xd0\x7c\x22\xb7\xae\xca\x8a\x3c\xc3\x1d\x0c\xe6\x02\x91\x5e" + + "\xd5\x35\xa8\x9a\x79\xb9\x9a\xcd\xe1\x62\x84\xc3\x84\xd5\xce\x75\xca\xa2\x8c\xb9\xb2\x32\x4b\x1a\xee\x79\x98\xb5" + + "\x0b\x73\xed\xce\x33\xf6\x92\xc9\x6c\xd7\xa4\x1e\x46\x40\xd1\x63\x75\xca\x53\x26\x78\xa3\x33\xf0\x43\xbc\x17\xa1" + + "\xdb\x00\x3d\xeb\x8c\x6a\xa7\x46\xa0\x80\x5d\x37\xb6\x11\x6d\x6a\xea\x37\x3e\x6d\x99\xa9\xd5\x47\xd1\x5c\xc0\xd2" + + "\xd9\x4d\x5f\x99\x7a\x2e\xb3\xec\x59\x19\x9b\x29\x8d\xe5\x3d\xe7\x28\xe2\x4e\xca\x65\x66\x04\xb6\xb2\x63\x84\x5f" + + "\xda\xeb\xcb\x01\xea\xc2\xc4\xf4\x5b\x71\xef\xbc\xd7\xbb\x26\x6c\x40\x01\x65\x87\xdc\xa5\xb7\x0c\x57\x6b\xa5\xc6" + + "\xe5\x35\x3b\xa9\x38\xb8\xdd\xc2\xec\x9d\x5f\xef\xd9\x85\xe7\xfc\x7a\xd1\x71\x88\xf8\x56\x64\x15\x6d\x0d\x96\x48" + + "\x05\xd1\x6b\x6e\x62\xe1\xad\x9d\x58\x0c\xdf\xc2\x3f\x3b\x4d\x08\x5b\x41\xd6\x6a\x77\x48\x66\x9d\x87\x44\xc8\x35" + + "\xf6\x04\x67\xc8\x9c\xd9\xd5\xcb\x52\xea\x76\x56\xab\x29\x2a\xfd\xca\x0a\x65\xeb\x73\x43\x9b\xdb\x69\x57\xde\x98" + + "\x35\x96\xae\xe3\x12\x98\x78\xdb\xef\x74\xf6\x3f\xe2\xcb\x4e\x73\xc8\x37\x22\xcc\xb2\x80\x49\x13\x57\x98\x75\x7e" + + "\xcd\x55\xd1\x17\xc8\x8e\xc0\x2c\xd1\x15\xa7\x9e\x51\x87\x83\x6b\x08\xa0\xe0\xcf\x8d\x73\x26\x1a\x32\x05\xe8\x3a" + + "\x1c\xad\x73\xe4\xce\x09\x4d\x26\xca\x9c\x52\x1a\x3b\x16\x27\x6d\xac\xa8\x1e\x5b\xec\xcc\xcd\x39\x0e\xa6\x7b\xda" + + "\x3b\x48\x13\xc0\x00\xa0\x3f\x2b\xc4\x08\x05\x2a\x31\x03\x6b\x33\xc6\x97\x54\x44\xa9\x83\xa1\x7a\x53\x42\xab\x6b" + + "\x2d\xa0\xc6\xdd\xfb\x47\x76\x72\xf0\xac\xb6\x4b\xa1\x86\xab\x28\xa9\x27\x22\xf7\xa7\x6f\xe2\x1d\xfb\x62\x80\x6a" + + "\x34\x51\x4b\xdd\xcc\xd1\x4d\x1b\x4e\x1d\x78\x16\x9b\x46\xe8\x21\x52\x66\xf6\x59\xf1\x06\xa8\xb6\xd8\x42\x53\xd2" + + "\xfa\x83\xa9\x69\x69\x40\xdb\x96\x5f\x6f\x1e\xdb\x3b\x2f\x63\xc6\x67\x88\x87\x07\xc6\x26\xbb\x19\x70\xf6\x14\x29" + + "\xdf\x89\xe1\xc0\xea\x80\x20\xb4\x57\xf0\xe6\x06\xcf\x4f\xaf\x67\xdf\x79\xfc\x0e\x2e\xc9\x44\x8e\x13\x93\xad\x4c" + + "\x58\x81\x04\x6f\xa3\xd6\x8f\x3c\x08\x55\x70\xc4\xf8\x86\x77\x0e\xaf\x50\x7a\xbb\x63\x43\x71\x4d\xe3\x76\x4d\x8c" + + "\x5f\xa8\x17\x26\x87\xfc\x6a\x17\xe6\xba\xdf\xf2\x4f\x39\x7d\x78\xf6\x33\x9b\x55\x6c\xdb\x84\x2c\xab\x69\x1b\xc0" + + "\x31\x06\xb7\x04\x0d\xaf\xed\x5a\xb2\x02\x02\x0e\xa4\xa5\xa9\x7e\x87\x00\x7c\x5b\xa5\x90\x3e\xaa\x1e\x5c\x42\x60" + + "\x8c\x84\x85\xa8\xfb\x28\x08\x6c\x5c\xc0\x67\x4e\xce\x03\xb8\x00\xa6\x91\xe1\xfe\xec\xe8\x86\xfd\x2f\x61\xd6\x36" + + "\x9d\xa7\x46\xe4\xf9\xcf\x40\xaf\x6b\xb7\x68\x6d\x1a\xda\xa1\x4e\xaa\x6c\xd6\xa5\xc3\x36\xa7\x3b\x75\x59\x66\x64" + + "\x5e\xf0\x72\x0e\x28\x33\xae\x96\xe8\x2d\x06\xdb\xe9\x5c\x93\xe1\x12\x37\x30\xd4\x6a\x4f\x4f\xa3\x2f\x4c\x71\xfa" + + "\xf0\x4c\xd0\x86\x2e\x5d\x8d\x97\xe4\x2f\xcc\xb5\x23\x08\xad\x28\xb1\x0e\x3a\x4c\x19\xec\x11\x18\x07\xd6\x7a\xf0" + + "\x9f\xba\xf3\x37\x9c\x83\x4f\x61\xc1\xba\xae\x66\xe2\x55\x15\xe4\x20\xb0\xbb\x04\x50\x38\x94\x47\xe1\x20\xc2\x83" + + "\x47\xaa\xee\xb8\x9b\xc9\xe3\x80\xb5\x18\x74\xe7\x21\xff\x9f\xd8\x19\x48\x28\xc7\x3c\x35\x81\x15\x0d\x87\x43\x57" + + "\x10\xb6\x3a\x2c\x18\x44\x5f\x01\xec\xaf\xbf\x32\x06\x90\x50\xa4\x97\x5c\x18\xf0\x71\xbf\xd4\x79\xd2\x57\x96\x93" + + "\xd0\xcd\xaa\x32\xde\x45\xd5\xd6\xea\x6f\x2e\xc4\x56\x40\xf6\xcf\x1d\x36\xdf\xa4\xdb\x70\x8e\x05\xa4\xfc\x27\x8d" + + "\xc9\x73\xf5\x61\x5e\xae\x3f\xd0\xd9\x02\x74\x81\x14\x1c\x59\x71\xe5\x5d\x1d\x70\x00\x97\xb9\x26\xd5\x22\xa2\x80" + + "\x50\x4b\xf6\xc9\x50\xdd\x3f\x78\xf4\xe5\x57\x5f\xb8\x0f\xde\x59\xde\x12\x7a\x08\x8e\x4d\x4b\x53\x20\xbc\xb1\xdd" + + "\xb8\x38\x39\x2e\xc0\xcc\x6e\x55\xea\x2d\x00\xec\x80\xc2\x74\x38\x29\x8b\x89\x6e\x60\xae\x11\x1b\x29\xa6\x26\x42" + + "\x8b\x14\x70\x27\x50\xc0\xcb\xc8\x9e\xfa\x38\xca\xc6\x5d\xac\x90\x15\xa2\x55\x07\xe9\xcf\x16\x41\x8b\x36\x58\xf9" + + "\x16\xba\xc8\x96\xab\x5c\x3b\x49\xc5\x6f\x49\x07\x3f\xe1\x59\x1f\xea\xfd\x29\x1e\x7c\xec\xc7\x86\x80\x6c\xb6\x9f" + + "\xc2\xac\x73\xc8\x0b\x6c\x47\x62\x9c\xeb\x01\x58\x7c\x32\x72\xf9\x6a\xf1\x71\x84\x4d\xc3\x3b\xed\xfc\xda\x65\x98" + + "\x47\x19\x71\x9e\x35\x06\xea\x0b\xfb\x06\x9d\x3a\x0c\x9f\xc1\x3f\x6e\x38\x1c\x48\xbb\xe5\x30\x97\xc6\x8c\x3d\xb5" + + "\x09\x7e\x47\xb5\x22\xca\xf1\xe8\x50\xdd\x41\xa0\x6d\x57\xd2\xfa\xad\xd4\xe4\xa6\x31\xcc\x93\xd8\x6f\xd0\x25\xe7" + + "\x2c\xd6\x12\x0e\x10\xc9\xd7\x4a\xce\x1b\x95\x1a\x1c\x6d\xd3\xc9\x50\xb7\xe8\x46\xa7\x5c\x8f\x30\x20\x80\x3e\xe8" + + "\x11\x17\xb7\xd2\xac\x9e\xe8\x2a\xdd\xd8\x30\x6c\x8d\xee\xfa\xbc\x5f\x0b\x0c\xf4\x13\x3a\x10\x18\x74\x09\x1a\xca" + + "\x92\x8d\x0f\xcb\x2a\xbb\x24\xff\x27\x54\xb1\xb9\xdc\x97\xf0\x1a\x6c\x34\xad\xd7\x8c\x6a\xb4\xe5\x72\x58\x62\x22" + + "\xf4\x93\xd5\x62\xa1\xab\x6b\x58\xb0\x83\xa1\x7a\x59\x4c\xcb\x6a\x62\xd4\xb3\x1f\x5f\xa9\x7a\x55\x4d\x2d\x75\x44" + + "\xe9\x6f\xa1\x8b\x26\x9b\x60\xe2\xed\x26\xc3\x4c\xe1\xb8\x71\x0f\x86\x5f\x0f\xaf\xd4\x79\xa5\x8b\xc9\xfc\xde\x67" + + "\x5b\x8f\x86\xea\xd5\xc2\x72\x66\xe4\xea\x53\xa6\xab\xdc\x3c\xa8\xd5\x42\x67\x80\x62\x4c\x59\xc6\x11\xb9\x23\x5d" + + "\x4d\x18\x4b\xc9\x72\x11\x7a\x86\xfe\xb2\xba\x99\xd7\xa8\x33\x20\x6f\xc8\x85\x99\xcc\x75\x91\xd5\x0b\x7b\x18\x1e" + + "\x0f\x9d\x01\xaf\xb6\x1b\x34\x2e\x63\xbf\xa4\xdc\xc2\x2a\x59\x02\xb0\x97\x49\x60\x18\x89\x9d\x9c\x04\xe6\xc9\x56" + + "\xf4\x64\xa8\x3e\xbc\x31\x97\xa6\xfa\x60\xaf\xd2\xb2\x36\xa2\x38\x50\x68\xb4\xba\x56\x6a\x52\xa6\x46\xf5\xde\xbd" + + "\x7d\xf1\x76\xac\x5e\x58\x41\xe6\x03\xca\xea\x1f\x90\x48\xda\x79\xee\xdf\xfb\x6c\xeb\xf3\xa1\x7a\x06\x89\xa1\xa0" + + "\x36\x08\x3b\x0e\x67\x3b\x35\x8d\xce\x72\x2b\x70\x61\xbd\xc4\x93\xa8\x9e\x99\x0d\x39\x5f\xba\x60\x3a\x6c\x9d\x5f" + + "\x0c\x5d\x52\x7b\x0d\x86\xfa\x0a\x6f\x76\x2b\x82\x45\xb5\xaf\x96\xb3\x4a\x63\x6e\x8e\x9f\x8d\xbe\x78\xad\x41\x3a" + + "\x7b\xb4\x7f\xf0\xe4\xde\x67\x0f\x47\xe4\xc5\x74\x5e\xd9\x35\xe5\xac\x52\xbf\x61\x4a\xa9\x87\xef\x3f\xde\xbc\x3f" + + "\xe5\xdf\x67\x98\x4f\x6a\xab\x02\x4c\xa7\x17\xba\x9e\xdb\xf2\xbd\xd3\x67\x7b\xff\xff\xb3\xfe\x68\x16\x42\x7d\xda" + + "\x89\x78\x06\x29\x4d\x84\xb5\x42\x48\x84\xb6\x51\x7b\x9e\x9d\xdd\x0b\x15\x65\x40\xa7\xec\x6d\x03\x92\x9a\x00\x97" + + "\x19\x28\xcb\xf1\xb8\x8c\xc4\xe8\x02\x3d\x1a\x91\x62\x92\x23\x78\xbf\x7f\xf7\xfa\x87\xcf\xe1\xd9\xde\x43\x9f\x7b" + + "\x85\x4d\x68\x4e\xe8\xf7\x1c\xc3\x86\x54\x91\x74\x2c\x89\x0e\x26\x50\x61\xa2\x76\xe1\xce\xa9\x0c\xa4\xb1\xee\x29" + + "\x3f\x0f\x03\x95\xec\xfd\xe1\x20\x51\xfd\x30\x69\x30\x1c\x55\x6c\x74\x53\xda\xed\x10\xc8\xef\x4e\xe5\x84\xd4\xe5" + + "\x61\xbd\xbe\x6c\x53\xad\x20\x4f\x37\xf8\xca\x70\xba\x62\xff\x1a\x6c\xc1\xf6\x3d\x1a\x85\xdb\x05\x8a\x55\x9e\xdb" + + "\xf7\x10\x4b\x32\x16\x97\x8b\xbd\xa6\x89\x95\xc0\xc3\x57\xac\xc0\x3f\x08\x4c\xab\xa0\x9a\x2f\x1e\x34\x0c\x4b\xe6" + + "\xef\x4d\xaa\x61\x17\x5a\xd8\x55\x49\x82\x5e\xf9\xf6\xaf\x63\x85\x4f\xb9\x15\xdc\x7d\x84\xa5\x47\x9b\xe4\x38\xc8" + + "\x90\xf4\x7f\x4e\xde\xbe\x71\xaf\x64\xdf\x0f\xa5\x9e\x90\xd4\x84\x41\x66\x2b\xce\x65\xb5\x36\x4e\x57\x85\x52\x56" + + "\x09\xba\x54\xd1\xf7\x14\x93\x34\x20\x3d\x66\x92\x89\x7c\x7b\x6b\x0f\xb7\xfd\xc5\x68\x3d\xc2\x48\xe6\xc8\xe8\x4e" + + "\x1d\xfe\xd8\xed\xb3\xd7\x71\x7f\x75\xc0\x56\xfa\x9e\x51\x79\x57\xea\xe6\xc6\x5f\x04\xf1\x4b\xe1\xcf\x9f\x76\xb4" + + "\xc1\x5c\xba\x54\xd9\xb4\xda\x93\x76\xe2\xf0\x03\x51\xbb\xa7\x7c\xdd\x6d\x70\xed\xbe\x5a\xfc\x22\x2c\x13\x86\x1f" + + "\x20\x81\x7d\x03\x52\xba\x6e\x5c\x00\x36\x5c\x05\x40\x71\x81\x88\x0b\xa2\x8b\x12\x13\x04\xe5\xd2\x69\x25\x90\x30" + + "\xb8\x98\x48\x41\xe3\xaa\xf0\xb7\x27\x45\x26\x41\xb4\x56\x6d\x08\xce\x4e\xa5\x66\x59\x99\x09\x6b\x89\x3e\xfc\x2b" + + "\xf3\x07\x4b\xf2\x49\xf3\xf7\xe1\x77\x4d\x20\xd4\xbb\x71\x02\x6f\x4f\x7c\x10\x8f\xa3\x5b\x95\x93\xc9\x9e\xa2\x9c" + + "\x41\xb9\x2e\x1c\xc2\x37\x3e\xb5\xd4\xb6\x26\x42\xe7\xc8\xaa\x4f\x7f\x75\x18\x58\x69\x61\x0d\xbd\xf9\xfb\x0e\x71" + + "\xae\x05\x18\xda\xef\x20\x82\xb8\x99\x66\x7c\x5a\x45\xa2\xaa\x8d\x89\x36\x76\x76\xd4\xb6\x9f\xc6\x99\x3f\xe8\x09" + + "\x9d\x1e\x4b\xac\xeb\x24\xf0\xe7\xb6\xbc\x2b\x0c\x35\x42\x89\x69\xb1\xaf\xcc\x2d\x87\xe9\xf6\x0f\x0e\x76\xc5\x8b" + + "\x77\x56\xe6\x81\x79\x73\xf8\xfc\xb4\xe7\x80\x08\xf7\xee\x1f\x3c\xf9\xea\xeb\x27\xce\x8f\x1b\x81\x7a\x6c\x79\x0e" + + "\x86\xf5\x61\x96\x74\x55\xf9\xb7\x43\xba\x5d\xb7\xc4\xb7\xc0\x74\x13\x94\x7a\xcf\x5d\x6b\xe8\x48\xb2\x1f\x86\x95" + + "\x52\x7d\x6d\x59\x49\x80\xcd\x7e\xde\x0f\xc2\x2d\xe3\x2b\xdf\xef\x1b\x8f\xd2\xda\x05\x04\x44\x3f\x3e\x0a\xaa\x8e" + + "\x2b\x52\x6f\x5a\x91\x81\xf4\xc7\x8d\xa5\x8b\x90\xd6\x4a\x85\x12\xba\xd6\x30\x20\x65\xb4\xfd\x62\x95\x59\xe4\x57" + + "\x13\xe0\xb5\x42\xbc\x62\x47\x64\x5a\x78\x69\x60\xac\x99\x90\x2d\x3f\x76\x39\xa2\x33\x55\xa0\xe0\xd6\x0d\x61\x30" + + "\xcc\xc6\x0f\x84\x28\xfb\x27\x73\x7d\xab\x34\x7b\xcf\xdb\x86\x18\xc7\x31\x44\xc6\xc7\xb4\x35\x56\xd2\xa6\xe4\x0e" + + "\x7d\xd6\xb1\x81\x6a\x9a\xbf\xef\x91\xe6\xbb\x42\xf1\x17\xac\xa1\x3e\x5d\x82\x5e\x2e\x8d\xae\x6a\x54\x57\x12\x45" + + "\xe8\xb3\xb2\x9c\xab\xf8\x07\x8c\xe6\x1f\x1e\x0e\x15\x78\x3c\xdb\x92\x3b\xed\xa0\x62\x43\x95\x78\x3b\x23\x1b\x90" + + "\xee\x3c\x57\x95\xa9\x57\x39\x58\x40\xff\xe1\x3e\xfc\x07\xf0\xbc\x31\x51\x22\x6d\x97\xfd\x8a\x6b\x80\x74\x8d\xd0" + + "\x75\x70\xcb\xb1\x5c\x2a\x04\xd3\xd9\x43\x63\x1b\x46\xad\xae\x4e\x95\x46\xb2\xec\xac\x06\x0b\x9d\x92\xd6\x24\xc8" + + "\x3d\xd7\xa1\x48\x0d\x54\x3f\xcf\x7c\xb5\x33\xd3\x44\x9c\x2a\x01\xe4\x6e\xf1\xe0\x48\xd2\x07\x1d\x4a\xbd\x97\xd5" + + "\x77\xd1\xb7\x60\x63\x09\xf6\xb6\x3b\x6b\x56\xfb\x54\x88\xa4\x75\xff\x46\x57\x61\xd7\x65\xbf\x72\xec\xf3\x6d\xdd" + + "\x75\x5b\xf6\x7f\xa0\xcf\x09\x3b\xae\x26\x9e\xbf\xcb\x0a\x57\x12\xa5\x82\xc9\xaa\x6e\xca\x85\x14\x0e\xda\x93\x2c" + + "\xc9\x17\x77\x78\x20\xfb\xf6\x1f\xea\xfb\xcf\xec\xbf\x5b\x19\xd0\xf2\xcd\x75\x45\x46\x0c\xd7\x7f\xe6\xab\x41\xe9" + + "\x43\xba\x1e\xe1\xdf\x2e\x83\x6c\x4f\x04\x5f\xcb\x2a\xc5\xdb\xe8\x94\x47\xce\x13\x3b\x1f\xa1\x9b\x35\x1a\x02\x21" + + "\xe2\x82\x53\x2a\x97\x2e\xe2\x74\xcb\x49\x5c\xc0\x88\x2d\xb2\xd9\xbc\x79\xc0\x9c\x16\x56\x00\xdb\x43\x7b\x1d\x60" + + "\x0a\x32\x13\x7e\xcc\x44\xac\xbd\x45\x90\xf8\x05\x5b\xc4\x77\x95\xd2\x30\xb7\xe5\x3a\x14\x0f\xcb\x25\x20\x00\xa2" + + "\x92\xbc\x74\x9f\x61\x77\xd8\x13\x02\x2e\x20\x02\x91\x49\x75\x3d\x47\xbf\x15\xd1\x4f\x40\xc9\x1e\x86\x5a\x4a\x18" + + "\x1f\xda\x1c\x96\x4b\xe7\x85\x2c\x04\xf1\xe1\x70\xf8\xf0\x16\xd2\xef\x77\x50\xa8\xeb\x87\x16\x1e\x0e\x87\x43\xf5" + + "\xaa\xa0\x13\x56\x9b\xd0\xae\x20\x26\x58\x7d\xd0\x80\xbd\x98\x5f\x7f\x70\x1f\x93\x9f\x99\x1d\xc7\x20\x80\xc8\xcb" + + "\xeb\x78\x25\xa7\x50\x95\xfb\x72\x55\xb0\xb0\xc3\x53\x33\x0c\xf5\x97\x8e\x3f\x48\xf6\x12\x44\x92\xdf\x3b\x60\x8c" + + "\xd1\x8d\xbb\x7d\xd3\xcd\xd7\x72\x37\x0c\xee\xc1\x01\x25\x36\x26\xc7\xda\xae\xf0\x4d\x2e\xe2\xef\xfb\x5b\xe5\x0c" + + "\x61\x7d\xb8\xfb\xbe\x6e\x8b\x20\xf1\x8d\xfd\xb1\x15\x14\xd6\x96\xda\xfe\xb9\x32\x2b\xd3\x66\xd5\x2d\x3b\x11\xca" + + "\x03\x76\xf7\x43\x61\x29\xf1\x07\x39\x7f\xc8\x39\x8b\x50\x21\x6f\x6e\x54\x32\xbd\xb2\x0c\xc8\xae\x4a\xe0\xc3\x04" + + "\x67\x11\x7e\xf3\x19\x8a\x59\xd7\x86\xfd\xee\x1c\x71\x58\xda\xbd\xb1\x5a\xaa\xd4\xe0\x87\xe7\xd7\x96\xc6\xa3\xed" + + "\x6b\xd5\x28\x48\x13\x8d\x09\x1c\x39\x53\x3d\x44\x16\x6b\x95\x97\xe5\xc5\x6a\xe9\xef\xbd\xd0\x9e\x8f\x9e\x30\x58" + + "\xa5\xcf\x9a\xe0\x2c\x21\x54\xd8\x6f\x91\x76\xaf\x43\x79\x08\x27\xac\x95\x85\xd1\x16\xdf\x18\x84\x08\x75\x12\x22" + + "\x95\x74\x6d\x08\xb0\x59\x69\x23\xb8\x9e\x9e\x9e\xc5\x61\x5c\x34\x33\xdd\x8b\xc8\x43\xa0\xc5\x91\x4b\x73\xe8\x9d" + + "\xcb\x78\x74\xd4\x7f\xf8\x33\xac\xc5\x21\x0d\x55\x8d\xc3\x8b\xc3\xfe\xcb\x3c\x69\xe0\xe9\x8b\x8f\x09\xee\x15\x9f" + + "\xcf\xcb\xf2\x42\xf8\xf7\x7d\x80\x22\xdf\xdb\x87\x5d\xad\x14\x98\xf5\xb2\x4d\xf9\x39\x19\x88\xe9\xe8\xa0\xc7\x3d" + + "\xb8\x27\x03\xa7\xd4\xf4\x8a\x46\x07\x50\x27\xf0\x33\x1d\xb0\x2f\x0f\x81\x2c\x93\xe3\x08\x06\x84\xd7\xa6\x68\xb2" + + "\xc2\xe4\xf7\x84\x33\x31\xb0\xd4\x59\xe1\xb0\x99\xbc\x77\x71\x6b\xc0\x87\xf1\x44\x11\xf4\x61\x97\x7b\x32\x6f\x72" + + "\x84\x9c\x6d\xf5\x00\xb3\x55\x62\x1c\x47\x30\x14\xe0\x6d\xce\x0d\x6b\xa9\x46\x23\xa5\x57\x4d\xb9\xd0\x4d\x36\x81" + + "\xfb\x98\xc7\x29\xc4\x4f\x0f\xd4\x7a\x25\x60\x50\xb1\xe7\xab\x02\xfb\x1e\x0d\xb1\x75\x51\xa3\x9e\x76\xb5\x24\x20" + + "\xf8\xba\xa1\xee\xd4\x4d\xb9\x14\xf1\x09\xde\x1e\x00\xcb\x0e\x38\xc6\x14\xc3\x2c\xdd\x99\x07\xaa\x00\x60\x37\xdc" + + "\x1b\xed\x14\x1b\xdb\x72\xb3\xed\xec\x70\x39\xea\x3a\x56\x0d\x0c\x37\x00\x58\xf4\xba\xa2\x1b\xed\xdd\x67\x2f\xd9" + + "\x22\x35\x98\xf5\x7d\xb9\x3a\xcf\x41\xdd\x5f\xd4\xab\x05\xf2\xd0\x7b\x6a\x66\x0a\x53\xe9\x06\x52\x6f\xf9\x8d\xe9" + + "\xd2\x6f\x95\x95\x43\x8b\x97\x08\xbd\xe8\x0a\x29\x76\xf2\xed\xe7\xcf\x9e\x32\x10\xce\xf0\x29\xd3\x44\xf8\x12\x09" + + "\x63\x4b\xe1\x12\x33\xcb\xa1\x86\x2c\x24\x3f\x70\x59\xe1\xcc\x10\xfa\xe3\x1d\x40\x64\x1b\x20\x5c\x36\xa9\x65\x4e" + + "\xc3\x6e\x27\xd8\xa5\x33\x2f\x1a\x76\xdd\x37\x9d\x7a\x9b\x16\xad\xea\xbe\x6a\x6a\xd3\x34\x60\xf1\x79\xd4\xa1\x61" + + "\xde\x0c\xec\x4b\xfc\x99\x2d\x70\x28\x2f\x25\xa2\x77\x18\x57\xd5\x98\xaa\xe3\x50\xb6\xee\xef\xa7\xdc\x89\x48\x86" + + "\x0e\x89\x24\xe5\x55\x0e\xc8\x50\x14\xab\xdd\xd6\xdb\xfb\xec\x64\xa4\x0d\xbe\x8d\xdf\xdd\x4c\xa0\x29\x6f\xa6\x98" + + "\x40\xc9\xa2\xb9\xfc\x0a\x78\x72\x9c\x67\x24\x7c\x1c\x10\xd4\x80\x1e\xfb\x4a\x63\x25\x54\x48\x44\x76\x76\xb0\xa6" + + "\xd3\xfd\x33\x5c\x8b\x2e\xfa\xd8\xa6\xd9\x51\xf5\x31\x5b\x85\x16\xc9\xf6\x8d\x26\xcf\xd2\xdd\xbc\xd1\x9d\x8d\x8a" + + "\xc6\x80\xaa\xfd\xf7\xa7\xb6\xc7\x15\x8a\x7b\x74\xe0\x4c\xc5\x1f\xc9\x69\x3f\x44\xda\x72\x40\x48\x10\x48\x03\x15" + + "\x70\x4c\x98\xa9\x1a\x9d\x61\x9e\x6b\xfc\x52\x57\x06\xb4\x08\x56\xb8\xea\x4d\xaf\xec\xa5\x65\x89\x0e\x34\x77\xee" + + "\x52\x9c\xf4\x21\x95\x56\x0b\x62\x0b\x37\x82\x00\xda\x02\xd8\xc4\x05\xb9\xd9\x22\x9c\xcc\x11\x84\xa7\x33\x14\x41" + + "\x57\x3c\xa8\xd7\x92\x82\x46\xef\x88\xd3\x15\x92\xf6\xb0\x95\x1b\x95\x11\x10\xba\x2e\x6c\x0f\x1a\x82\xad\x4b\x8e" + + "\x2a\x95\x80\x6e\x18\xa8\xcc\x8d\x5a\x7a\xe3\x3a\xd0\x32\xc3\xff\x2e\x82\x60\x67\xa3\x83\x1e\xb4\xed\x1c\xb7\x70" + + "\x48\x5d\xb6\xfd\x66\xb1\xec\xe6\x61\x6d\x9f\x41\x83\x39\xe8\xa2\xf4\x3c\x16\xec\xfc\x62\x09\xde\x6e\x8b\x25\x5e" + + "\x64\x7e\x72\x60\xb6\x28\xac\x1f\xda\xa2\x9b\x0e\x20\xc9\x1d\x06\x5e\xe4\x45\xc0\x2b\x41\x57\xa1\x44\x8a\x68\x47" + + "\x49\x3a\x32\x0d\xbe\xd8\xc5\x6a\x01\x69\x99\x4e\x77\xf7\xce\x8e\x7b\xc7\xe3\xf7\xe9\xc3\xf7\xc3\x9b\xfe\xfb\x74" + + "\xb7\x77\x3c\x3e\x35\x2f\xcf\xe0\xc5\xfb\x74\xf7\xa6\x3f\xea\x0f\xeb\x72\x55\x4d\x8c\xb3\xcf\x4f\xea\xfa\x25\x18" + + "\x79\xc1\x47\x24\x79\x57\x2e\x93\x81\x4a\x7e\xb2\xc2\x9f\xfd\xf1\x6d\xd9\x34\xe5\xc2\xfe\xfa\xc1\x4c\x9b\x84\x9c" + + "\xa0\x40\x39\x5f\x7f\x9f\xa5\xa9\xe9\x8a\x0e\x33\xb9\x70\x87\x75\xe5\x50\xa0\x3c\x37\x1c\x80\x0c\x7c\x10\x6e\xe0" + + "\xfb\x98\xbd\xcb\x55\xc4\xde\x9b\x00\x04\x0d\xe9\xa3\x6a\x33\x10\x49\x52\xd1\xc5\xa8\x36\x93\x52\x40\xdd\xde\xfb" + + "\xcc\x99\x07\x4c\x6e\x37\x81\xfd\x43\x4e\x26\x6b\x2b\xfd\xc5\x9b\xa4\x59\xbd\xcc\xf5\x35\xeb\xa1\x93\xa2\x2c\x4c" + + "\x02\x01\x45\xad\x34\xc7\xa0\xc4\x07\xbf\x88\x17\x2e\x22\x5f\xd8\xb7\xdc\xbc\x54\x10\xa2\xaa\xcf\x73\xd2\xf6\xab" + + "\x1e\x98\xb5\xe1\xe9\x79\x79\x75\x53\xe9\x34\x2b\xfb\x7f\x18\x65\xde\x09\x22\x26\x81\x80\x46\x49\xa9\x79\xed\x3e" + + "\xe5\xc0\x5f\xf4\xaf\xe1\xe6\xbf\xa3\x12\x74\xe8\x53\xf0\xc0\xe0\xcf\x86\x7a\xb9\x34\x45\x0a\xe9\xe9\x7a\x71\x0d" + + "\x2f\x71\x22\x7b\x76\xfc\x97\x60\x62\x80\x1a\xb2\x62\xb9\xea\x68\xcf\x97\x86\x02\x09\x5f\x2c\xa3\x91\xba\x7f\x70" + + "\xf0\xe8\xe0\x4b\xb5\xc7\xa1\x52\x90\xc2\x99\x62\x74\x1d\x2a\x05\x7a\xf2\xd4\x22\xe0\x1c\x0a\x80\x97\xa9\x37\x92" + + "\x4b\x53\xc5\xcf\x10\x66\x5c\xdb\x5a\xd5\xb3\xe5\xb2\x56\xbd\x9f\x7f\x7e\xd6\xc7\x42\xff\xb0\xd5\xfd\x03\x74\xbc" + + "\xff\xb0\x47\xf4\x1f\xa8\x7f\xb0\xb2\xbf\x33\x6f\xc3\x6d\xf9\xf3\xcf\xcf\x20\x4d\xee\x72\xd5\x04\x2f\x7b\x2a\xb1" + + "\xdf\xd9\x2d\x0d\x4b\x41\xa7\xba\xb3\x20\x75\xd4\x96\xe5\x9f\xb7\x94\x06\x57\xbb\x81\x4a\xfc\x14\xa5\x96\xd5\x93" + + "\x0b\x81\x53\xec\x27\xd0\x0d\xf9\x44\x4f\x75\x95\xa9\xcf\x87\x07\x03\x95\xbd\x3d\xc1\x1f\x1c\xbd\xf2\x64\x78\xe5" + + "\xff\x78\x34\x7c\x8c\xdf\x96\x61\x88\x1a\xd8\x92\xf3\xb2\xf0\xd3\x8b\x38\x7d\x93\xb2\xaa\xcc\xa4\xc9\xc1\x39\x4c" + + "\x26\x7c\x26\x77\x94\x21\x14\x7f\x0e\x5f\x1e\x29\xdb\x63\xa8\xe5\x4d\x99\x1a\x86\x1e\xe9\x78\x62\x05\x08\x18\xd3" + + "\x90\x5a\x73\x43\xf2\x56\xef\xc6\x5c\x35\xba\x32\x1a\x95\xf8\x7c\x00\xfa\x7c\x0f\x02\x40\x0e\x01\x55\x2e\x4d\x95" + + "\x5f\x63\xf7\xd3\x68\x66\x5e\xbd\xfc\x7a\x8f\x6d\x57\xb6\x77\x59\x51\x98\xea\xfb\x77\xaf\x7f\xb0\x8c\xe1\x53\x6e" + + "\xe3\x9b\xab\xa7\x23\xf7\x1b\x98\x45\x1e\x5e\x51\xc2\xd8\x9e\xd3\xa4\x1c\xa9\xed\xed\xee\x41\xfa\x21\xc9\x0e\x42" + + "\x16\xbc\x1e\xd3\xda\xba\xa9\x3c\x1f\xe8\x32\x3a\x85\x99\xf9\xed\xff\xb8\xf1\x69\x39\x59\xd5\x59\xf1\xed\xea\xfc" + + "\x1c\xe1\x8f\x93\xb2\xa0\x67\x89\x5d\x0f\x0c\xa8\xa7\xcf\x2e\x75\x75\xef\xb3\xad\xea\xc2\x5c\x43\x74\x3d\x38\xc4" + + "\x5c\x98\x6b\xf2\x7b\x29\x57\xb5\xf1\xcf\x7b\xc7\x63\x78\x72\x03\x7e\xb8\xa6\xba\x21\xa8\xae\x85\x29\x56\xfd\x9b" + + "\x49\x9e\x4d\x2e\xf0\x3b\x68\xed\x75\x59\x2d\xe7\xfc\x1d\xb5\x0f\xff\xdc\xc0\x7f\xcb\x55\x73\x9e\xaf\x2a\x76\xb1" + + "\xb1\xa3\x02\x95\xe5\xd2\xb9\xe5\x9c\xfe\x7d\x78\xf6\xb0\x6f\xef\x96\x61\x6f\xb8\xdb\xbf\xe9\xff\x61\x14\xba\xdc" + + "\x20\x89\x7d\x57\xad\x0c\xd1\xb0\x30\xf1\xfb\xc7\x8e\xc2\x90\x1b\x27\x2c\xcd\x19\x6c\xc2\xe2\xb5\x9e\x9a\x67\xe0" + + "\xe5\xce\xa4\x08\x3f\x72\x0e\x29\x7c\x59\x3a\x80\x04\x59\x18\xa8\xb3\x0f\xe5\xaa\x40\x22\x50\x1f\xc3\xac\x7a\xdf" + + "\x03\xb6\xa0\x40\x68\xb1\x14\x64\xa1\x0b\x3d\xcb\x8a\x19\x41\xa9\xa8\xbd\x3d\x90\x49\x97\xba\x6a\x38\x7f\x14\x89" + + "\xa4\xb0\x04\x53\x3d\x31\x43\xcc\x2f\x57\x95\x4b\x82\x30\xd3\x85\x7a\x99\xae\x75\x95\xd6\x0f\x14\xc3\x26\xa8\x3c" + + "\x3b\xaf\x34\x85\x3b\x41\xb4\x3d\xd5\x96\xa5\x46\x63\x9a\x3a\x1f\xbe\x6b\x68\xc9\x51\xe1\x30\xcb\xcb\x73\x9d\x8f" + + "\x31\x84\xb0\x9d\x11\xda\x4b\xae\xf5\x80\x21\x55\x38\x86\x2b\xcc\xf7\xc9\x0c\x26\x16\x7a\x7b\xfe\xcb\xab\x62\x80" + + "\xe3\xc4\x20\xa3\x81\x67\x3d\x71\xf4\x03\xd5\x0c\x7c\x69\x52\x28\x2d\xcd\x24\xd3\xb9\x6b\xca\x89\x33\x6e\xf7\xd4" + + "\x56\x02\xcf\x66\xf6\x26\xf4\x9c\xe9\x0b\xa1\x86\x0f\xd9\x2f\xe9\x91\x8e\x49\xe4\x31\x69\x03\xaf\x40\x53\xaa\xa2" + + "\x84\xcf\xad\x38\x64\xae\x9a\x11\xc1\x7e\x50\x38\x68\xef\x7c\xd5\x50\x4c\x05\xba\x05\xb3\x83\xfd\xbd\x20\xd1\xf9" + + "\x0b\xa9\x4c\xec\xc4\xed\xb1\x82\x37\x24\x62\x2a\x30\x8d\x7d\x56\x88\x60\x6b\x48\x03\xe6\xec\x39\xf6\x5d\x9e\x99" + + "\x15\x2f\x22\xcd\x85\x6b\x91\xfe\x1e\xce\x23\xbc\x1d\x31\xf3\xea\x88\x4b\x1d\x8a\x57\x95\x7b\x0c\x85\x86\x41\x11" + + "\x91\x51\x55\x96\xe1\xc7\xd1\x70\x04\x4d\x66\x5c\x25\x6e\x03\xe3\x4b\x29\xb7\xcf\xab\x17\x03\x84\x1a\x83\x34\x6b" + + "\x45\x3a\xe2\x3c\x66\x8d\x77\x4f\xc2\x69\xe4\x51\xcd\x56\x59\x1a\x0d\x89\x1e\x3a\xe1\x64\xc6\xd1\xa4\x01\x30\x52" + + "\x91\x11\xf8\x01\x9e\xd2\x07\x35\x41\x9e\x58\x0a\x3b\x69\x40\xf4\x2d\x52\x70\xd0\xf4\x1b\x59\xa8\x89\x5d\x5a\x75" + + "\xdf\xa5\x1e\x6d\x12\x74\x03\x81\x38\x56\x7c\xe2\xe5\x96\x4d\x25\x82\x10\xc9\xb0\x3e\x82\x85\x11\x9f\x60\x77\xa2" + + "\x4a\x37\x15\x0b\xb9\xe3\xc0\x44\xfb\x02\x3d\x77\xd1\x6b\x0d\x59\x59\x9c\x02\x90\x2e\xe5\xf1\x67\x20\xa6\x1e\xd8" + + "\xb6\x5d\x05\x98\x16\x91\x33\x62\xc6\xc8\x3e\x5a\x2d\xf5\x0c\x2d\xe6\x2b\x00\x76\x61\x43\x29\x53\x66\xbc\xbb\xc8" + + "\xde\x6d\xc5\xaf\xe0\x72\xf3\xc0\x83\x41\x17\x28\xde\xc6\x00\x16\x88\x73\xcb\x0e\x4a\x5a\x9e\xda\x52\x5b\x06\x21" + + "\x47\xa2\x14\x82\x5f\x46\x39\x37\x3e\x46\xbb\x83\x66\xd3\xb9\x4b\xd0\x2a\xf9\x98\x88\x73\x40\x25\x65\x4f\x72\x20" + + "\x78\xce\x78\x01\xc9\x28\x92\x44\xf5\x37\xb9\x86\xdb\x97\xa8\x87\x6f\xe8\x0e\x0f\x1c\x6a\x58\x60\x6c\x5a\x02\x63" + + "\x78\x33\x0e\xcd\x95\x99\x50\x93\xa7\xcd\x19\xfb\x9d\x07\x92\x2a\x13\x3f\xdb\xce\x62\x79\x7a\x40\x6f\x3d\x7d\xc4" + + "\x5e\x2f\x96\xa7\x8f\xce\x5c\xb7\xeb\x65\x9e\x59\x76\x7b\x08\x7f\x94\x55\xd3\x8b\x3c\x2a\x2a\xa3\x1e\x2e\x56\x75" + + "\xf3\x10\x02\x6e\x99\xe6\x96\x44\x2c\xc1\xdb\x9e\x1b\xd8\x83\x40\x07\xa6\xcf\x5e\x7a\xdd\x96\x2a\x12\xc4\x39\xcd" + + "\x0a\xc6\x23\x15\x5a\xe3\x57\x53\x86\x22\x02\xcb\x5d\x0d\x39\x56\xb0\xc1\x15\xfb\x3b\xe3\x2d\x10\x02\x79\xb1\xc6" + + "\xca\x38\xff\x46\x52\x93\xb8\x5b\x43\x80\x0e\xc0\xb6\xa1\xc7\xa4\xab\x24\x5f\xf7\xc3\xa0\x27\x8e\xe8\xd1\xe6\x19" + + "\xf8\x38\xb9\xa8\x17\x7a\x99\xb1\x42\x85\xc3\x13\x08\xc7\xd8\x75\xc3\x19\xbc\x5c\xad\xc7\x5c\xc9\x30\x35\xb9\x99" + + "\xe9\x06\x25\xb8\xb1\x7b\x7c\x9e\x15\x29\x62\x4b\xd8\xde\x91\x5a\x82\xfb\x47\xc0\xb5\xdc\x0f\x17\xf9\x84\xd1\x97" + + "\x95\x01\x07\xd0\x7f\x73\x0e\x1c\xa9\x07\xb6\x59\xd7\x35\x5b\x5e\xe3\xd9\x0f\x6f\x18\x89\xef\xe0\x54\xb9\x34\x05" + + "\x63\x9c\x27\x7c\xc0\xdb\x75\x1c\xdd\xda\xe4\xaf\x27\x9c\x80\xa8\xa1\xb1\x23\xce\xf8\xd8\xd2\x7a\xf7\x0c\x28\x3f" + + "\x03\xa4\xd3\x24\x8f\x7d\x82\x6e\x7c\x61\xa5\x37\x86\x00\x1d\x07\x79\xc0\x3d\x24\x45\x85\x27\x79\x28\xcb\x92\xc3" + + "\xae\xe7\x6a\xb8\x3e\xde\xf9\x63\xc1\x85\x0c\x7f\x29\xb3\xa2\x97\x0c\x13\x74\x67\xfb\x38\x90\x97\x66\x60\xb1\xf4" + + "\xf7\x52\x00\x4b\x47\x46\x28\x06\x14\x0d\x6e\x1f\xbe\x2e\xdc\xce\x3f\x22\x7a\xc5\xcb\x28\xf4\x66\x1b\xcb\xc8\xc4" + + "\x4e\x5c\xc8\x6d\xc3\xe7\xa4\xfc\xdb\x97\x0a\x62\x70\x8d\xb6\x67\x30\x46\xe3\x62\x38\x89\xe0\x44\xd4\x6e\x28\x51" + + "\xf2\x5c\xaf\xe8\xe3\x5d\x5e\x9b\x66\xb5\x84\x8c\x3f\xf2\x41\x60\xfb\x41\x8e\x52\x72\x79\xf2\x12\x94\x19\x31\x85" + + "\xf3\xa2\xf3\x84\x6c\x75\x58\x38\xff\x75\x16\x60\xe5\x68\xc0\x9f\x4a\x7c\xb1\x38\xc5\x8f\x0b\xf6\x01\x20\x7c\x1a" + + "\x86\x4e\x85\xd7\x80\x78\x18\x8c\xcc\x9f\x99\x48\x7d\xbe\xed\xde\x0c\x3b\x79\x1f\x71\xdc\x86\x11\x1f\x24\xff\xec" + + "\xf4\x1a\x64\x4c\xd6\x32\xe2\x88\x78\xc9\x30\x15\x0e\xef\x86\x1a\x05\xf9\xb2\x10\xbb\x2f\x4e\xe6\x2f\x36\x11\xa7" + + "\xa4\xeb\xde\x55\xbb\xbb\x00\x21\x13\x0e\xbb\x65\xec\x76\xdf\xa2\xb9\xbb\x5d\xda\x0f\xe4\x4f\x41\x6e\x6b\x74\x84" + + "\x73\x3b\xf0\x12\xce\x55\x85\x3e\x3b\x96\xd1\x1c\xa0\xff\x1c\xb2\x3d\xcb\x26\x5b\x64\xbf\xfa\xb0\xb6\x80\x34\xa2" + + "\xe4\x23\x8e\x4b\x04\xbd\x25\x01\xe3\x41\x64\x70\x8c\x51\x59\x61\xfc\xed\x94\xfb\x01\x8a\x47\xef\x45\xd8\x19\x51" + + "\xda\x2d\x49\x39\xda\xa5\x16\x7a\xb9\x34\x70\x19\xd4\xa1\x40\xf5\x0b\x4a\x3c\x30\xb9\xff\xab\x42\x54\xec\x91\x4f" + + "\x6e\x33\x9b\x24\xac\x48\x1a\x02\x0c\xa5\xbb\x19\xe8\x4e\x61\xe9\x6d\x31\x41\x95\x9b\xb1\xf3\x6e\x3b\x3f\xf4\xea" + + "\x03\x32\x90\xd4\x87\xb8\x72\x84\x12\x52\x2e\xb2\x86\xc0\x08\xfe\x3f\xc5\xbc\xfd\xb9\xb0\x3c\x84\xbf\xb0\x6b\xd5" + + "\x2b\x0b\x42\x47\xe1\x6a\x41\xce\x61\x18\x81\xbe\xe3\xa3\xfc\x6e\xed\x66\xe1\x10\xff\x02\x9e\x65\x05\xd7\xde\xb2" + + "\xe4\xe1\x61\x0a\xcd\xc3\x64\xe9\xc0\xb9\x50\x8d\x3a\xeb\xdc\xf1\x1d\x5e\xcf\x1b\xd8\xc6\xdf\xc9\xdc\xfc\x07\x79" + + "\xb1\x5b\x6f\x58\xb9\xc0\xb0\x23\x68\xe5\x76\x76\x20\x30\xf1\x27\x33\x7b\x79\xb5\xec\xa9\xa4\xf7\xf7\x9b\xf7\xef" + + "\x87\xfd\x44\xed\xb6\x39\x88\xf7\xef\x87\xbd\xe3\xf1\xf0\xe1\xfb\xf7\xc3\x9b\x7e\x02\xde\x51\x3d\xfb\xfb\x0f\xfd" + + "\x24\x60\x23\x28\xd7\xa3\x8b\x7e\xf5\x60\xbc\x5b\x8e\x3a\xd8\xf9\xf1\xb7\x43\xdd\x19\x90\xfa\x8b\x0c\x48\x95\xfc" + + "\x1c\x7f\x75\xaa\x7e\xf1\x59\x66\x70\x5f\xf4\x02\xe2\x74\x73\x23\xf6\xf1\x91\xd0\x16\x0c\xdd\x63\x4b\x2b\x68\x97" + + "\x78\xc9\xde\x7e\x18\xde\x63\xc1\xc7\x74\xf7\xc9\x0f\xed\xa4\xda\xa5\x58\x2c\x89\x37\xf3\xa5\x3d\x39\xe8\x47\x1f" + + "\xb9\x05\xb7\xfc\x86\xd3\x69\x04\x4d\x6d\x2c\x92\x3c\x7c\x08\x86\xec\x8e\xa2\xfd\xd6\xbd\x2c\x6e\xc2\x5f\x38\x31" + + "\xab\xe4\x4c\x3a\x2b\x71\x6c\x49\xf7\xe5\xe9\xf3\xa2\x7e\x94\x55\xf1\x16\x25\xe5\x89\xa8\x26\x7c\x73\x0b\xe3\xb1" + + "\x99\xa5\xf1\x9b\x0b\x3c\x5f\xb2\x49\xc4\xa9\x02\x8f\x4a\xae\x51\xa9\xaa\xcb\x85\xe1\x14\x9f\xa9\x15\x11\x17\xe8" + + "\x45\x4f\x67\x04\xfc\x7b\xb9\xda\x9e\xbe\x2c\xb3\xb4\x56\xcb\xb2\x31\x45\x63\x0f\x30\xd0\x74\x5b\xb4\xae\x39\xc9" + + "\x72\x59\xa8\x74\x05\x91\xe9\xd0\x84\xce\xed\xbd\xda\x2d\x01\xf6\x3d\xa9\xf2\x7b\x7e\x67\xc7\xed\xb0\x76\x44\x4d" + + "\xc8\x87\x36\x46\x57\x69\xb9\x2e\x24\x2b\xca\xcf\x42\x4f\x24\xc9\x87\x46\xea\x97\x6e\x5e\xd4\x81\xc4\x3a\x98\xe7" + + "\xd0\x13\xb0\x55\x4b\xec\x46\x4d\x2e\x52\x21\x85\xe9\xc4\xf3\xfa\xc9\x3b\xa9\x71\x30\x2d\xc3\xc2\x16\xa5\xca\xcb" + + "\x62\x66\x2a\x60\x85\xee\x7d\x76\x2b\xe6\x92\x23\xe8\x51\xd4\x76\xd4\x55\xec\xc3\x26\x47\xa0\x04\x6b\x49\xda\x68" + + "\xf2\xa4\xde\x09\x58\xa0\x4b\xb0\x71\x22\xaf\x8f\xdf\x97\x45\x7e\xfd\x3d\x6f\x9e\x80\xed\xc9\x06\x6a\xb2\xaa\x90" + + "\xe1\x51\xe7\x60\xee\x78\x87\xf2\x77\x81\x53\x3a\x27\xb6\x9d\xd9\x1d\xcf\x15\xfd\xa8\xc1\x1f\x11\x9d\x06\xc0\x4d" + + "\x8a\xf1\xc4\x29\xba\x8b\x6e\x87\xb9\xae\xdf\xfa\x95\xc7\xce\xa1\x29\x0f\x22\x36\x49\x4d\x85\xb7\x04\xbe\x6e\x5f" + + "\xd7\x9d\x75\xb8\x12\xb2\x22\xcf\x29\xe0\x8d\x6e\x85\x47\x35\xc6\x1b\xc4\xd6\x3b\x59\x55\x78\x85\x70\xd8\xd9\x51" + + "\xab\xff\xb1\x2e\x3b\x2d\x79\x15\xed\x9d\xcf\x99\x5a\x03\x0d\xf6\xbd\xcf\x36\x86\x8c\x3d\x66\x93\x76\xf8\xf8\xab" + + "\xdb\x79\x33\xb0\xef\x8c\xce\xf3\x55\x65\x8f\xfe\x12\x43\xd8\xc9\x02\x34\x2a\x57\xcd\x21\x3b\x1a\x75\xa5\x15\x5f" + + "\x50\xfa\xf0\xa2\x5c\xbb\x8e\x09\x83\x12\x91\x79\x62\x1f\x36\x68\x0b\x6f\xe3\x1d\x9d\x13\x88\xf7\xfb\xb6\xb3\xfc" + + "\x8d\x0c\x08\x1b\x8d\xd4\x1b\x5e\x8a\x54\x51\xbd\x87\x0e\x6a\x42\x55\x66\x66\xae\x96\x76\x54\x70\xd9\x12\x0d\x62" + + "\x36\x08\x77\x1d\x65\x3b\x09\x76\x02\x34\xeb\x97\x36\xe0\x43\xc4\xb5\x1f\xf8\x85\xca\xe7\xcc\xd9\xd1\x81\xc7\x6d" + + "\xce\xf5\xba\xe1\x8c\x93\xbe\x7a\xaa\xf6\x2d\xd9\x4b\xca\x22\x21\x2e\xeb\xf0\x56\x3b\x03\xcf\x24\xda\x8a\xd8\x91" + + "\xf1\xad\x77\x68\x44\x17\xe9\x42\x0e\xd5\x47\x3d\xb3\xbd\x08\xfe\x3d\x8d\x71\x3d\xcf\x48\x65\x8b\xa5\xd0\x7b\xcd" + + "\x32\x3f\xb2\x49\x96\xb6\x49\x41\x4c\x15\xca\xb0\xb4\x9d\x1d\x7a\xda\x91\x86\xe0\x3c\x6b\x16\xba\xbe\x18\xab\x1d" + + "\x75\x80\xa0\x9d\xba\xc9\x2e\xfd\x9d\x73\xa8\x76\xd4\x23\x78\x41\x9a\xe7\x1e\x79\xf3\x5a\xfe\xb2\xef\x46\x30\xcc" + + "\x6a\xae\xf1\x28\x24\x3b\xc7\xea\x91\x1a\xab\xc7\x87\xbe\xa8\xb4\x55\x76\xe9\x7c\xba\x8a\x7e\xa8\x0c\x4f\x92\xf8" + + "\xfe\xd8\x4d\xc8\xbf\xcf\x0d\xf2\xec\x7a\x60\x66\xbb\xde\xb9\xd1\x05\x3b\xe1\x92\xde\x1e\x11\xca\x30\x20\x1c\xfd" + + "\x82\x55\x65\xf8\x46\x60\x7e\x1d\x42\xcf\x62\xcf\x27\x92\xe1\xf0\xc4\xe9\x6a\x66\x9a\xd0\x28\xc1\x0f\x8f\xbc\x2b" + + "\x8c\x30\x71\x81\xc5\x1f\xd2\xa7\x14\x93\x72\x01\xe8\x71\x1c\xce\xbc\xac\xcc\xd2\x10\xe4\x1c\x51\x49\x38\x70\x8c" + + "\x8b\xe1\xb2\x35\x54\x33\x97\xb8\x3c\xc4\x04\xa0\xac\x90\xd0\x97\x53\x1a\xe9\x19\x4d\x49\xcb\xcf\x9e\xee\x18\x5f" + + "\x4e\xec\xab\x67\x08\xbd\x1f\xea\xb2\x9a\x52\xa5\x95\x5e\xab\x72\xd5\xd4\x59\xca\x39\xcd\x0b\xa4\x9f\xbf\x5b\xfc" + + "\xc0\x69\x0c\x36\xd9\xce\x8e\x67\x39\x68\x1b\xb6\x1f\x85\x06\x0e\xf2\x81\x6d\xb3\x1b\x9d\x74\xd9\xa1\x39\xd3\x98" + + "\x97\x55\xb9\xd4\x33\xc4\xcc\x00\x2c\x0d\x4b\x09\xd2\x4b\x5d\x58\x79\x70\x69\x2a\xf5\xf3\xe3\xe7\xce\x0c\xb2\x34" + + "\x13\xd5\xbb\xff\xf5\xd7\x9f\x1f\xf4\xa9\x3a\x74\x30\x80\x8d\x55\x8a\x8c\x21\x0d\xf8\xe0\x30\xc0\xff\xa1\x5a\x03" + + "\x89\x44\x80\x5b\x54\xa8\xa8\xc0\xa3\x49\xd9\xab\xbc\x77\xff\xeb\x2f\x1f\x3d\xe9\x6f\x9e\x19\xc7\xa1\x15\x25\xb5" + + "\x6b\x1f\x3a\xb6\x05\xbd\x77\x9c\x1e\xc2\xfb\xca\x7b\xb6\x40\x1d\x75\x8b\x77\x81\x24\x47\x09\x31\x5a\xf7\x8d\xa8" + + "\x66\x97\x3d\x3d\xbd\x21\x03\xae\xe5\xc9\xaa\x1a\x2e\x75\x65\x8a\xe6\x4d\x99\x1a\xc1\x97\x39\x40\xf1\xc9\xaa\x82" + + "\xff\xb4\x0a\xfb\xaa\x1c\x73\x42\x5a\x2f\x5b\xba\xef\x9d\xfa\xf0\xcb\x96\xfe\x0b\xd4\xb2\x3a\x4d\x69\xce\x89\x1f" + + "\x9f\x95\x8d\x5c\x19\xd5\x33\xc3\xd9\x70\x80\xee\x04\x6c\xa8\x56\x60\xd8\x68\xf4\x64\x6e\x52\xf5\xe2\xed\x6b\xc1" + + "\x3f\x43\x73\x47\x47\x18\x33\x1b\x3a\xa1\x49\x86\xa3\xbf\xb9\xf3\x56\x2a\x63\xb7\x96\xcc\xac\x59\x50\xc3\x71\xe3" + + "\x8a\xd9\x67\xd4\xe9\x6e\x68\xda\xef\x32\x29\x3b\x94\x85\x20\x62\x76\xcb\xc2\x86\x21\x2d\xb5\x97\x60\x7b\x38\xc9" + + "\xae\x3f\xa7\xd9\xee\xee\x19\x68\xa7\xb6\x99\xd0\xff\xe8\xf7\xfe\x49\x53\x5a\xd1\xb5\x27\xb7\x8d\x60\xec\x8e\x54" + + "\x86\x79\xf5\x70\x90\x62\x27\x10\x2c\x47\x4b\x3b\xd0\xb6\xd3\xd0\xb5\x23\xcc\xf4\x5b\xce\x54\xdb\x8b\x55\x66\xc0" + + "\xd3\x7a\xae\x19\x89\x86\xea\x9f\x4a\x6e\xf3\xac\x43\xd5\x86\xdf\x61\xbd\xa1\xdb\xa8\x93\x4b\x02\xa1\x9e\x49\x09" + + "\x7c\x27\xa3\x89\xc4\xce\x7a\x13\x5c\xa4\x61\xc7\x89\xfd\xd8\xd9\xb1\x35\x9c\xf2\x9f\x67\xed\x76\x9d\xb8\x8c\x2d" + + "\x0a\x3b\x8b\x87\xed\xa6\xad\x1e\x6d\x26\x7f\x09\xdd\xd1\x65\x62\x60\x83\x6f\x3a\x64\x30\x2c\x40\x11\x32\x2f\x70" + + "\x6b\xf6\x3a\x62\xa8\x3e\xfa\x6b\x50\xb0\x58\x11\xc8\xf5\x79\x99\x5e\x73\xb4\x8d\x49\x39\xed\xa9\xad\xd2\xa5\x99" + + "\x4f\x01\x73\x45\xb2\xb2\x6d\xc2\xc6\x3b\x92\xba\xf3\x23\x57\x18\xec\x47\x54\xb2\x38\x22\xf8\x81\x1b\x12\x62\x2a" + + "\x3f\x73\x37\x84\x3f\x8d\xe5\xb2\xd7\x6f\x5f\x16\x5e\x29\xd2\xb1\x1a\x2d\x42\xca\x9c\xa3\xd2\xcc\x5d\xbd\x78\xfb" + + "\x9a\xd1\x43\xe9\x5c\xd2\xd5\xef\x61\xdc\xf4\x82\x5c\x31\xe1\x3f\xba\xf6\xa7\xd7\x47\x9e\x3a\x39\x25\x9c\x3c\x38" + + "\xec\x48\x1a\x30\x3b\xcc\x03\xc6\x53\xa5\x4b\xe4\x52\x57\x99\x06\x0f\xb7\x73\xa3\x7a\xf7\xbf\x38\xf8\x72\xbf\x2f" + + "\xf6\x82\xdf\x9d\x1d\x89\x35\xec\xe8\xdc\xa5\xdc\xff\xc4\xab\x44\xf4\xb6\x32\x7b\x8d\x4b\x81\xa5\xca\xe2\xbb\xb7" + + "\x6f\x89\x28\x81\x7f\xc4\x1a\xfd\x8d\xc1\x6e\xfd\xdd\xdb\xb7\xbd\xbe\xcb\x28\xb5\xe5\x09\x39\xf6\x41\x9c\x1a\xa9" + + "\xce\xb1\x45\x22\x0b\x95\x2f\x1b\xe7\xf0\x96\xfd\xa3\xed\x23\x7a\x48\x38\x8e\x6e\x3d\x88\xb7\xaa\x01\x0b\x71\xed" + + "\xb3\xac\x21\x61\x4b\x21\x19\xd1\xb9\x43\x3c\xdc\xda\x20\x62\x49\x0f\x79\xee\x1f\xf6\xce\x9d\xa7\xcd\x9f\x86\xbe" + + "\x8b\x9f\x3e\xea\x66\xb1\xdc\xa4\xa7\x8a\x43\x68\x24\x29\x90\x58\x40\xe4\x27\xd2\xd2\x39\xf8\x75\x66\xd7\x25\xad" + + "\x1c\xbc\x7c\x20\x1c\x39\x98\x00\x3a\x06\x46\x88\x4c\x52\x18\x0a\x46\x3f\xcd\xae\x7a\x91\xfc\x42\x1a\x8c\x5f\x06" + + "\xaa\x32\xcd\x80\x10\x29\xd2\x96\xa9\x86\x48\xef\x7f\x53\x38\xcf\x29\xa3\xcf\x54\xb3\x3b\x53\x07\x0b\xb5\x74\xeb" + + "\x92\xc1\xf8\x96\x3b\x6f\x19\xd0\x5f\x07\x36\xa3\x8d\x2c\x6e\xfc\x9d\xcc\xaa\xce\x30\x75\xd3\xec\x6a\xcf\xa4\xe1" + + "\x7c\x56\x1a\xa0\xab\x9b\xb9\x46\x22\xd2\xb3\xdb\x11\x5c\x48\xfa\xc1\x14\xdb\xaa\xec\xa8\x4f\xf7\xcf\xf8\x6e\x17" + + "\x42\x96\x63\xe9\x58\xfa\xa0\x7c\x91\x42\xe6\xa5\xa0\x4d\xf3\x82\xf6\x00\x44\x39\x39\x53\x07\xea\xaf\x49\x0c\xb5" + + "\xf2\x48\x6e\x20\x87\xd8\xb9\xce\x72\xcb\x50\xa5\xa6\xce\x2a\xa1\x31\x63\xb2\x2b\x2b\x14\xec\xba\x78\x4c\xcb\x83" + + "\x33\xce\x9b\xed\x77\xb3\xec\xd2\xcb\x22\xda\x13\xc1\x7a\x38\x45\x67\xab\x55\x6f\xed\x93\xb2\xce\x4f\xab\x42\x58" + + "\x79\xc1\xc1\xe0\xd0\x4e\xc8\x35\x98\xcd\xd6\xba\x60\xb0\x84\x65\x20\x2f\x9c\x9b\xc2\x58\x91\x61\x55\x6f\x60\xc1" + + "\x68\x3f\x7b\xb3\x01\xf4\xf6\x14\x92\xe9\x7c\x32\x2f\xe6\xae\x6c\x8a\xa1\x74\xab\x4b\xb5\x0f\x49\xc6\x44\x11\xcf" + + "\x75\xc2\xf7\x42\x9a\x2f\xf8\x1b\x61\xc6\x68\xf7\xe5\xd5\x62\x61\xd2\x4c\x37\xe6\x0e\x06\x51\xa8\x1f\x0c\xfb\xd0" + + "\x01\x6e\x39\x02\x2a\xab\x83\x3e\x9a\x9e\x8b\x52\x1a\xd9\xca\xca\x7d\xfc\x88\x0b\xf0\xdb\x5e\xdd\x57\x5a\xd5\xab" + + "\x73\x06\x6e\xfe\xe7\x4a\xe7\x68\x9f\x2f\x6b\xb4\x69\xce\x0d\x65\x5b\xc4\xf6\x7a\x80\x45\xeb\x00\x93\x65\x53\x7d" + + "\x09\x72\xb0\xdd\xa1\x87\xb8\xb9\x89\x15\x11\x1f\x2a\x73\x87\x0d\xc5\x5f\x84\x72\xab\x49\xdb\xd0\xdb\xf3\x5f\x0e" + + "\x83\x22\x24\xa0\xfb\x1a\x53\x4e\xd1\xb2\x45\x6e\x81\x40\x9c\x7a\xdd\x24\xa5\xc3\x6e\x44\xa4\xa5\xcf\x5a\x72\x67" + + "\x31\x12\x3e\x10\x3e\x11\xf0\x16\x33\x43\x72\xbf\x80\x5f\x60\xdd\x32\xc6\xd8\xbe\x6c\x82\x7b\x20\xfe\x2b\xe2\x49" + + "\x2b\xd3\x74\xab\xfa\xef\x60\x34\xdd\x7b\x7b\xaa\xc4\x3e\x13\x05\x3e\xde\x75\xcd\x05\x34\xad\xac\x9b\x3b\x89\x5a" + + "\x9b\x70\xc9\xaf\xb8\xef\x5d\x2f\xbb\xe8\x57\x47\xd0\xea\x86\x1b\x97\x4f\x5b\x87\x96\x7f\x1e\x68\xf5\xdd\x8d\x48" + + "\xd8\x4c\x60\x07\xfe\xd4\xeb\x30\xf6\x5a\xea\xb6\x9d\x51\x58\xa3\x17\x0e\x49\x59\x75\x28\xc4\xcd\x22\x75\xe4\x30" + + "\xa0\xb9\xa3\x91\xfa\x36\xd7\x93\x8b\xbd\x79\x99\x1b\x75\xf2\x97\x3f\xaa\xa7\xab\xda\x7c\x03\x69\x95\x34\xe6\xa7" + + "\x34\xa6\x56\xbd\xfb\x07\x8f\x0f\xbe\xda\x67\x1d\x09\xc2\xa0\x16\x65\xb1\x97\x9b\x69\xb3\x07\x31\x12\xc8\x69\x01" + + "\x2a\x6a\x01\xf2\xed\xb4\xbc\x52\xbd\xfb\x8f\xbf\xfa\xe2\xc0\x2b\x40\xc2\x01\xa1\x8c\xe5\x95\xf0\x3b\x3b\xaa\x47" + + "\xa7\xfa\x7c\xd5\x34\x65\xe1\xcf\xb3\x0f\x6c\x84\xc6\x12\x79\x70\x85\x22\x02\xb3\xcc\xda\x3b\xb2\x5b\x23\x61\x65" + + "\xd8\x79\x56\x47\x14\x0f\xb9\xdf\x65\x55\x42\xaa\x07\x68\x00\xf8\xf4\x34\xab\x35\x30\x8f\x2e\x06\xb3\x77\xff\x8b" + + "\xaf\x0f\x0e\x06\xea\xfe\x57\x07\x5f\x7c\x3e\x50\xf7\x0f\x0e\x1e\x7f\xf5\x08\xfe\xfd\xf2\x8b\x27\x92\x4f\xb7\xed" + + "\xba\xcf\x5d\xea\xdb\x8d\xc3\x11\xa7\x8c\xf6\x89\xf4\x62\x73\x89\xff\xec\x4d\x00\x09\xdc\x82\x79\x8c\x52\xb9\x6d" + + "\xb2\x6e\x67\x92\x1d\xf7\xc3\x9e\x94\xc5\x34\xcf\x26\x24\xdf\xb8\x9c\x5c\x9c\x64\x4a\x60\xd9\xd8\x4d\xf0\x68\xff" + + "\xb1\x23\x43\x35\xc0\x70\x77\x58\x7b\x77\x55\xa2\x12\xd1\x16\xcc\x08\x8d\xeb\xd4\xee\x7f\xcb\xf6\x6e\xa2\x49\x5b" + + "\x71\x41\x49\xb8\x85\xd7\xa2\x07\xb2\xf6\xe9\x73\xe1\x68\xe1\x02\xa3\xe1\x80\xe5\x6f\xb0\x83\x8c\xe3\x0f\x86\xd3" + + "\xac\x48\xc5\x57\x8c\x52\x73\x0a\x5f\x9d\xa9\x7e\x04\x0e\xe8\xc1\xee\xba\x46\xd4\x31\x86\x4d\x4e\x5e\x1d\x70\x79" + + "\xb2\xc6\x96\x35\x37\x24\x10\x58\xeb\x6f\xb0\x2b\xc7\xa8\x34\xf0\xe4\x88\xb7\xcf\xc7\x8d\xb6\x6f\x49\x6c\x39\x7f" + + "\xb9\xcf\xd0\xde\x43\x58\xcd\xfc\x7a\x0f\xee\xe4\x7e\x40\x2d\x3a\xce\xf0\xd3\xd8\xeb\x22\x0e\x61\xe8\xe8\x32\xce" + + "\xb5\xef\xb3\x77\x2b\x40\xaf\x82\xb0\x85\xbe\xea\x04\xdc\x93\xd5\x1f\x06\x5e\x6b\xaf\x8a\x49\xbe\x4a\x4d\x0d\x26" + + "\x7b\xa1\x14\xae\x55\x3d\xd7\x94\x14\xf7\x4f\x1c\x19\x66\x79\xe2\xd7\x2e\x20\x0c\xe3\xc9\x97\xf5\x58\x25\x3a\x6f" + + "\xfe\x64\x58\x7e\x04\x40\xc7\x89\xc9\x41\x6e\x9a\x34\x15\xc0\x5b\x85\xdc\x1b\x2a\x26\xe6\xba\x86\xc4\x75\xda\x16" + + "\xa8\x4c\xae\x1b\x93\x52\x01\xb0\x7f\xd9\xc7\xa4\x4f\x68\xb2\x85\x39\x69\xf4\x62\xa9\x2e\x33\xb3\x46\xff\xbe\x84" + + "\xed\x68\x2a\xe9\xe3\x78\xa6\xd9\x15\xa1\x6a\x70\xa0\xd2\x85\xb9\xe6\x27\x76\x3a\xb8\xbf\x93\xb9\xae\x94\xfd\xcf" + + "\x73\x4b\xe8\x2e\xcc\xb5\xfd\xbf\xfd\x1d\xd5\xb9\xb5\x85\x11\xc2\x1d\x37\x97\x65\x47\xb2\x42\xe7\x6d\x50\x16\x74" + + "\x3e\xb4\x64\xc8\x56\x2c\x5c\x70\x84\x82\x0a\xcb\xb0\xbd\x22\xd2\x78\xd1\x4b\xd7\xc4\xd0\xf5\x74\x9b\x0d\x1c\x1d" + + "\xef\xc6\xfe\x19\x0d\x26\x54\xe5\xc9\x3b\x3a\x36\xc3\x43\x4c\x5f\xd7\x44\xd1\xd5\x82\xff\x00\xb9\x37\x45\xf3\x57" + + "\xfa\xf7\x6f\xaa\x9c\x4e\x6b\xd3\xfc\x95\xfe\xfd\x1b\x84\x7e\xfc\x15\xfe\xfb\x37\x55\x4f\x2a\x63\x8a\xbf\xd2\xbf" + + "\x7f\x53\x4d\x49\x91\x71\xff\xea\x1c\x13\xaa\x05\xf2\x53\xe5\x64\xa0\x52\xfb\x9f\xf3\x32\xbd\x26\x1f\x6c\xea\xac" + + "\x98\x38\x7c\x22\xb4\xb0\xcf\x75\x3e\x59\xd9\x8d\x86\x5d\x1d\xfd\xcd\xca\x75\x8b\xac\xae\xd9\x57\x85\x46\x38\xfa" + + "\x9b\xd2\x97\x3a\x83\x3d\x1c\xaf\x1d\x0e\x92\xd7\x6e\x67\x47\xac\x05\x4d\xcf\x76\xe7\xba\xbe\x28\x27\x11\xd3\xb1" + + "\x59\xa5\x4e\xf4\x28\xf5\x9f\xbc\x28\x27\x43\x7e\x2b\x42\x0c\xed\xb0\x4b\x48\x48\xef\x4a\xd9\xbf\xdd\x85\x12\x74" + + "\xb9\xdd\xd3\x5d\xcc\x57\x0d\xaa\xe4\x72\x32\xac\x27\x55\x99\xe7\x3f\x98\x29\x74\x06\x2a\xde\xd9\x81\x7f\xa3\x57" + + "\xfb\xaa\xaf\xf6\xc2\x6f\xb1\xca\xce\x6f\xc3\x57\xfb\x8e\xb2\xfb\xce\xfd\xad\xdd\xb9\xbf\x75\x77\xee\x5d\xb9\x54" + + "\x1b\x3a\xc7\xaf\x36\x76\xae\xf3\xdb\xf0\xd5\x7e\x87\x06\x3c\x3c\xd4\xc0\x84\x8c\xd5\x01\xdc\xca\x96\xa5\x3b\x54" + + "\x8f\xe0\xf7\x22\x4b\xd3\xdc\x1c\xaa\xc7\xf0\x17\xb8\x30\x70\x0d\x6f\xca\xc6\x8c\xe9\x14\x31\xde\x68\x51\x56\x0b" + + "\x48\x03\x92\x0e\x54\x5d\xaa\x14\x18\x0c\x4c\x73\xe1\x77\xdc\xb6\xa4\x08\xb6\xc7\x58\xc5\x06\x21\x25\x24\x1f\x3d" + + "\x2e\xbd\xa3\x0e\xd4\xb1\x3a\x80\xdc\x15\xee\xd1\x23\x75\xac\x1e\x87\x8f\x9e\x90\x91\x7b\x3f\xca\x4a\x7b\x27\xf9" + + "\x98\x66\x57\x1b\xb4\x69\xf2\xe0\x74\x78\x05\x44\x20\x39\x41\xe5\x2c\xe2\xb0\xc7\x85\x53\xc5\x79\x8c\xbf\x50\xf3" + + "\x46\xbe\x66\x34\xab\x78\xa1\x85\x59\x8b\x48\xba\x80\x2c\x82\x50\x4d\xe0\xe8\xe3\xb9\x4d\x7c\xcc\xfb\xf1\xa5\x74" + + "\x6d\x20\xc8\x32\xbc\x68\x18\xd9\x84\xef\x1d\xe1\x91\xe5\x86\xbe\xcd\x65\x9d\x5b\x70\xd7\x17\xea\x48\xb9\x3a\x71" + + "\x2d\x45\xe4\xb5\x74\x78\xe9\xab\x63\x6c\xd3\x93\x6c\xe6\xd5\x5c\x04\x77\x67\x79\xbe\x09\xb9\xb4\x0c\x3c\x84\x19" + + "\x75\x3d\x18\xe2\xfd\x4f\xdf\xc1\x1f\x2e\x01\x4d\x58\xa4\xcf\x89\xae\xe0\x4f\x1a\x35\x2b\x3f\xdb\xfe\x1d\xe1\x84" + + "\x3a\x8f\x70\x2b\x79\x94\xcb\xeb\x2e\x77\x6a\x09\x9e\x02\x59\xf3\xb0\x28\xf3\xe7\xbc\xe5\x45\x86\xbd\xa0\x8d\x20" + + "\xd5\x9e\xc0\x44\xe6\x18\xff\xe7\x65\x95\x96\x97\x5a\x3d\x1a\x7e\xae\x7a\x88\x69\xd0\x47\xce\xfd\xf3\xcf\x9d\xf8" + + "\xe6\x7d\xa6\x29\xa9\x2b\x68\x5a\x34\x71\x26\x87\xae\x92\xd4\x5c\x66\x13\x83\x8a\x74\x02\x46\xb8\xf7\xbb\x9c\x25" + + "\x02\xda\xdf\xd1\x5b\xc2\x6a\xf8\x62\xb8\xbf\x3b\x50\xcf\xe7\x95\xdd\xdf\x4f\xd5\xa3\xaf\xee\x71\xb2\x37\xe2\x9c" + + "\x38\xf3\x2c\x45\xe9\x59\xf6\xbf\x80\xa4\x1d\xf7\x3f\xdf\x7f\x62\xe5\xaf\xc7\x07\x4f\x1e\xf7\xc3\xb3\xc9\x17\x52" + + "\xe4\xfa\xb5\xc9\xad\x43\x7e\x12\x19\xbc\x43\xc6\x93\xf7\x0b\x01\xad\x1c\x47\x0f\x5a\x37\x3d\x6d\x0d\x76\xa5\x13" + + "\xbc\x2a\xa9\x25\x88\x3f\xc9\x4b\x9d\x8e\xbd\xab\x16\x9b\x3c\xbc\x85\x21\x5b\xe8\x99\x19\xda\x62\x41\xf8\x85\x93" + + "\xbb\x9d\x77\x02\x94\x81\x7a\xd8\xad\x60\x0c\xf2\x27\x8c\x05\xd9\x93\x72\xb2\xaa\x45\x63\x60\x8f\x0e\x34\xff\xd9" + + "\xd4\xa7\x29\xab\x4b\x75\x9e\xaf\xaa\x11\x7c\xa5\x6a\xf3\xcf\x15\x00\xca\x66\x35\x23\x62\x20\x11\x68\xf9\x3d\x86" + + "\xde\xa8\x20\x97\x41\x70\x6c\x07\x08\xc1\xce\x0e\x91\x1d\x68\xc2\x0b\x3e\xfe\xa1\x57\x23\x45\x08\x07\x42\xb8\x09" + + "\xb5\x26\x18\x7e\x97\x30\x48\x84\x1f\xbd\x1d\x0c\x0f\xfe\x93\x7a\x7d\x74\x47\xaf\xc1\x29\x30\xea\xb4\x7d\xf6\xef" + + "\xf5\xb9\x5c\x35\xa2\xd3\x74\x47\xfb\x25\xb3\xf7\x36\x01\x81\x0c\xd4\xb4\xb5\x80\x75\x19\xa1\x97\x30\xd6\x8f\xbf" + + "\xc5\x3f\x65\xec\x43\x0f\x76\xc6\xad\x25\x6e\xdc\xa8\xf8\xf1\xc6\x48\x7b\xd4\xde\xe8\x85\x03\x1a\x73\x30\x37\xf1" + + "\xe4\xc0\x87\x9f\x38\x3b\xc1\x80\xab\xb2\xae\xf7\x28\x41\x35\xc0\x17\x42\x5c\xdb\xe4\x7a\x40\xcc\x86\x9c\x07\x6e" + + "\x45\x95\x85\xca\xb3\xe2\x02\x25\x16\x36\x28\x6f\xbc\xdd\x63\x90\x23\x3f\x28\x49\x23\x06\x2a\xd1\x49\xe8\xdd\x41" + + "\x7d\xc5\xf4\x62\x18\x28\xce\xeb\x25\x15\x8f\xb7\x18\xe9\x42\xe2\xc8\x4a\xb4\x47\xfb\xbb\xee\x25\x3f\x63\x98\x1a" + + "\x9d\x9b\xaa\xe1\x30\x45\xec\x37\x82\xc1\x4c\x33\x93\xa7\xcc\x97\xd5\xa6\x91\x9a\xf3\x40\xe1\xbb\xdd\x4a\xa4\x03" + + "\x6f\x63\xea\x15\xfa\x1a\x04\x6f\x87\xb2\xdd\xa3\x96\xc6\xb4\xed\x83\xc0\xe4\x2f\x5b\x80\xdc\xd2\x86\x6e\x23\xec" + + "\x2b\xa4\xa3\x28\x81\x0b\x18\xac\x1f\xb3\xd9\xec\x1a\xf2\x4e\x97\x85\xd2\x76\xe1\x5d\xe0\x5b\x53\x2a\xae\xd5\xbe" + + "\xc9\xa6\x00\x7e\x0d\x20\x95\x9c\x1a\xf6\x3b\x7d\x61\x22\xda\xdc\x94\x0a\x1c\xf6\xb1\xaa\x07\xb5\x8a\x34\xd8\x08" + + "\xe9\x8d\x93\x4c\xb5\x70\x2b\xa9\xd3\x2f\x10\x49\x66\x73\x7f\x43\x16\xf3\xb4\xf4\x36\x6a\xf2\x27\x80\x56\x5c\xf6" + + "\x57\xd3\x0a\x29\x46\xca\x1d\xb3\x1a\x7d\xe1\xe7\x8d\x3f\x37\x85\x1e\x67\xf5\x09\xf7\x0e\xe9\xbe\x08\x49\x76\x83" + + "\x1e\x53\xfa\xb3\x2d\x9f\x04\x0d\x37\x47\x38\xdd\x9d\xd6\xee\x9e\x32\xac\x2a\xf3\xb0\x5d\x61\x9c\x63\x37\x8c\x81" + + "\x0c\x35\x10\x18\x91\xbc\x2d\x6f\x71\x17\xb9\xdd\xf8\x20\xf2\xa8\x39\xb4\x17\x11\x91\xd0\x81\xab\x26\x3d\xe9\xa9" + + "\x05\xef\x2c\x2e\x3e\x8d\x03\x6b\x37\xbd\xef\xa9\xd0\x37\x5f\x84\xd4\xc6\x1d\x6b\x77\xa9\xae\x26\x03\xc5\xec\xe7" + + "\x6f\xa8\xc4\x42\x67\x4d\x54\xc3\x37\x19\x5a\x27\xd7\x59\x33\x2f\x09\x5c\xfe\x41\x61\xd6\x0f\xd4\x85\xb9\x5e\x97" + + "\x55\xca\xbd\xdf\xee\x21\xa8\x07\x29\xef\x1d\x26\x05\xb6\xd9\x8f\x70\x1c\xdb\xdc\xac\xec\x08\x75\x1d\x7b\xf3\x32" + + "\xf4\x06\x40\x8b\x4b\x05\xa2\x68\x5d\x4d\x86\x32\x7c\x0e\xe8\x7b\x2c\x67\xd4\xd5\xe4\xd0\xbd\x24\xd9\x84\x3f\xf4" + + "\x66\x8a\x97\x78\x84\x1c\x43\x43\xce\xbd\xce\xd5\x6f\xa1\xaf\x45\x4a\xa0\x85\xae\x00\xf9\xac\xf6\xde\x4a\x54\x0f" + + "\x40\x5a\xb8\x88\xdf\x72\x6d\x2a\x05\xd1\x2f\xe0\xcc\x53\x19\x73\xa8\x2a\x33\xcd\xad\x78\x05\xa8\x0a\xc8\xc3\x20" + + "\x7c\xf9\xd0\xf5\xb2\xbd\x17\xa9\xcf\x69\xfc\x98\xd3\xf6\x76\xbe\x8c\xf3\x94\xb5\xc9\xbc\x48\xac\x3f\xdc\xf7\x35" + + "\x05\x44\xd5\x59\xe3\x8e\x85\x6c\xf9\xce\x67\x08\x13\x30\x50\x87\xe1\x9a\x91\x91\x4c\x1e\xce\x68\x11\x82\x85\xfe" + + "\x71\xd5\x28\x73\xb5\xcc\xb3\x49\xd6\xe4\xd7\x2e\x76\x32\x4c\x27\xce\xd1\xd5\x1d\x9b\x42\xee\xe2\xae\x5c\xe6\xdd" + + "\xdb\xcb\x09\xc4\x4d\xb6\x30\x35\xe8\x44\xb3\xa9\x77\xa6\xc6\x86\xf8\xca\x83\x1d\x80\xa8\xc3\x38\x12\xa7\x47\x3d" + + "\x0a\xf6\xa4\x7b\xec\x61\xcd\x8b\x72\xdd\xeb\x0b\x78\xb5\xea\x02\xfc\x82\x6a\xcb\xc2\xc3\xee\xc1\xbc\x23\x2d\x99" + + "\xde\x85\x48\xe3\x41\x76\xae\x8f\x74\x96\xb3\xda\x63\x54\xbc\x78\xfb\xfa\x31\x6f\x64\x99\xdb\xda\x6e\x4a\x3b\x69" + + "\x2f\x9f\xbf\x7e\x76\x32\xa9\xb2\x65\xa3\x7e\xd0\xc5\x6c\xa5\x67\x46\x7d\x9b\x15\x29\xc4\x1c\x8c\x46\x6a\xde\x34" + + "\xcb\xf1\x68\xb4\x5e\xaf\x87\xeb\xc7\xc3\xb2\x9a\x8d\xde\xfd\x34\x7a\xb4\xbf\xff\x78\xf4\xf3\x8b\xbd\x17\x6f\x5f" + + "\xef\xfd\x60\x2e\x4d\xbe\xf7\x78\x0f\xdb\xd8\xb3\xaf\xf6\x1f\x3f\x3e\x18\x99\xc9\x42\xef\xd5\x50\xf3\xde\x39\x56" + + "\x38\x9c\x37\x8b\x3c\xa4\x3b\xc2\xb2\x73\x84\x54\xaf\xb5\xcd\xc7\x12\x54\x6c\x00\x45\xda\x5e\x03\x1d\x85\x6e\xf1" + + "\x31\x88\x4b\x83\x9a\x5d\xd2\xf1\x36\x0b\xca\x57\x63\x9b\x9c\x10\xbd\xd8\x7c\x48\xfd\xe9\x08\x20\xfa\x81\xb7\x89" + + "\xee\x0f\x7f\xb9\xdc\x72\xb1\xd8\xe1\x45\x1c\xc1\xbf\xde\xdf\xf6\xe4\xdc\xd5\xe3\xa8\x69\xd1\xe5\x6e\x43\x7b\xd0" + + "\xe7\xae\x45\xf9\xd7\x3b\x7f\xcb\x12\x7f\xca\x28\xba\x3e\x8f\x86\xd3\x55\xa4\x17\x98\x7f\x30\x0b\x77\xd7\xc8\x3f" + + "\x8a\xf3\x49\x14\x05\x34\x4a\x76\x5f\x54\xa3\xdc\xe8\x4b\x07\x7f\xb4\x02\xe5\x38\xbc\x2d\x2f\x4d\x35\xb2\xb7\xaa" + + "\x66\x0f\x94\x3d\x4b\x3a\x50\x78\xaa\xa1\x32\xaf\x5c\x41\x0d\xc5\xc1\xe7\xbb\x1e\x54\x4e\x4f\xe6\x00\x02\xe3\x9b" + + "\x1a\xab\xc4\xd5\x9c\x0c\xf8\x15\xb4\xef\x5e\xad\x1a\x78\x43\x90\x83\xfc\x19\xfd\xe9\x3e\xa4\xbf\xf9\x53\x7e\x0d" + + "\x72\xe1\x47\x99\x65\xca\xae\x99\x15\x02\xaf\x68\x3a\xbb\x1d\x4f\x6c\x29\xcc\xa0\x6d\x27\x32\x14\x39\xa7\xd9\x15" + + "\xca\xc6\xe4\xee\xcd\x4f\xee\x39\xc7\xac\xcd\x02\x13\x60\xb5\x1a\xe2\x4a\xb7\x1a\xe9\xab\x36\x60\x89\x0a\x99\x65" + + "\x2f\x1d\x08\xcb\x58\x80\x83\x83\x56\xeb\xc8\x13\xe7\x30\x94\x02\x61\x0a\xc5\xa2\x4e\xd8\x65\x44\x44\xee\x72\x8b" + + "\x59\x1d\x84\xb6\x90\x82\x87\x6b\x7b\xf3\xed\x58\xbd\x29\x23\x43\x1d\x49\x53\xd0\x0a\x68\xc3\x47\xd0\x18\x39\x43" + + "\xb3\xf0\x89\xaa\x96\x7b\x5e\xad\xcd\x2d\xde\xdc\xa8\x1e\xff\x06\xcb\x3f\xd6\x2a\xbc\x71\x3d\x12\x2e\xcb\x92\x5c" + + "\xbe\xdf\x72\x15\x77\x11\x9b\xb1\xcf\xd0\xa1\x93\x55\x83\xd7\x1c\x68\x4e\x1e\x42\x78\xe7\x0a\x1f\xca\xc3\x8e\xca" + + "\xa7\xd9\x95\x0c\xec\x20\xf6\xb0\x32\x42\x29\x7e\xe8\xc0\xec\xfd\xe1\x4a\x98\x51\x4b\x30\x0c\x12\x4e\x10\xa8\x42" + + "\xd8\x40\xd8\x21\xcd\xb2\x9a\x6f\x40\xba\xbf\x7b\x9f\x51\xa8\x72\x37\xcc\x67\xb8\x9d\xe1\xac\x29\x52\x5e\x39\xc5" + + "\xce\x40\xa1\x42\xc7\x6b\x4d\xd4\x6d\x87\x83\x95\xa0\x08\x87\xe8\x72\x10\x4f\xf4\xb2\xc1\x70\x6c\xde\x45\x4e\x5c" + + "\x23\xf6\x13\x35\xb8\x75\xb9\x30\x65\x61\xc0\x87\xb0\x76\xf1\x9f\xdc\xf4\xbd\x00\x0c\xb2\x0a\x25\x8f\x50\x94\x0e" + + "\xcf\x28\x49\x6c\xa0\x8e\x1e\x44\x9a\x86\x8d\x3e\xb7\x21\x94\x04\x7b\xa6\x76\x1f\x7e\x3b\x7e\x77\xf6\xb7\x00\x88" + + "\xa8\x4b\xf1\x03\xc9\x9d\xc0\x44\x87\x97\x41\x6c\xcd\x13\x87\x7a\x0b\x41\xd2\xc0\x57\xa5\x9d\x8f\x01\x2c\x99\x30" + + "\xe9\x11\xfa\x8f\xfb\x4a\x40\xa0\x97\x93\x0e\xa4\x22\x5c\x37\x87\x9f\xd1\x85\x9a\xb1\xb9\xd9\x01\xe6\x58\xc4\x96" + + "\xc8\x80\xb6\x4b\x60\x05\x5e\xed\xc6\x41\xf0\xff\x4b\x33\xa1\xf6\xd4\xc1\xa7\xcd\x46\xa7\x88\x79\xdb\x84\x74\x04" + + "\xaa\x77\xac\x40\x94\x78\xe7\xb6\xe9\xf3\x1d\xeb\x50\xe2\xc0\x75\xdb\x8f\x72\xe0\x06\xf9\x2d\xee\x7d\xb6\x15\x70" + + "\x1a\x0c\x00\xe4\x51\x50\x30\x52\x71\x5a\x0c\xd4\xe8\xe1\xab\x37\xef\x5e\xfe\xf4\xe6\xd9\x0f\x0f\x47\x96\xb3\x97" + + "\x9e\x73\x76\xcc\xdf\x15\x83\x28\x52\x05\x01\x39\x28\xc9\xa6\x56\x0b\xbd\x54\x84\x7e\x5f\x8f\x5a\x0e\x2b\x02\x1b" + + "\xbf\xee\x4e\x0a\x39\x1a\x31\x66\xce\x1e\x07\x07\x87\xfd\x54\x32\x82\x0c\xab\x73\xde\x4e\x9d\x70\xfb\x5d\x55\x8a" + + "\x8a\x82\x10\x4f\x01\xc6\x41\x53\x2d\x20\x49\x63\x78\x47\xf8\x6f\x08\x50\xd3\x78\xe8\x24\xa7\x60\xf5\xba\xb4\x78" + + "\xc2\x19\x9b\x06\x6c\x74\x03\x9c\xee\x0e\xea\x4f\x8e\xe6\x61\x80\x79\x10\x91\xba\xb3\x83\x19\x81\x42\xbf\x00\x3f" + + "\xee\x01\xa4\xf7\xc1\xfe\x16\x56\x36\x0b\xc6\x48\x13\xb0\x71\xa4\xb4\x53\x7d\xe2\xa1\xb0\x99\xce\x95\xe8\xcc\xb5" + + "\x1d\xf4\xc8\x4f\x86\xeb\x1b\x76\x4e\x24\xf8\xeb\xcc\x00\x1d\x9d\x1c\x59\x27\xef\xe3\x3b\xea\xfb\x7d\x4b\xec\xb5" + + "\x62\x94\x75\x29\x74\xc6\x85\x36\x42\xa1\x3f\x9c\xb2\xed\x69\x11\x5b\xa2\x3b\x57\x14\xa0\xca\x65\xae\xf4\x2d\x3c" + + "\x70\xf6\xe2\xa2\x0c\x85\xd3\xe2\xb6\x5b\x0c\x1c\x50\x0a\x44\xcf\xe3\xc4\x9f\xb5\x71\x91\x38\x58\x9a\x19\x1e\x84" + + "\x66\x2e\xa6\xa5\xbc\x01\x7b\xfd\x61\x39\x9d\xf6\x02\x1f\x5c\xd7\x69\xec\xcd\x1d\xdc\x0c\x41\x1f\x51\x44\x06\xa8" + + "\x5a\x01\x54\xa7\x2e\x11\xc7\x15\x51\x01\x08\x43\x06\x59\x7f\xac\x97\xc6\xc7\xe8\x72\xd4\x18\xfc\x65\xb9\xb8\xe0" + + "\x41\x04\xc2\x2b\xb5\x97\xad\x3c\x2c\xed\xdb\x24\xb8\x93\x21\x7b\x85\x4f\xc5\x52\x23\x15\x8c\xb1\xa5\xb1\x7e\x9f" + + "\x4f\xa5\x2c\x5a\x9a\xf2\x4e\x7a\xda\x95\xad\xe5\x0e\x02\x7c\x20\xd2\xb6\x94\xd3\xe9\xad\xcd\xf8\x06\x02\xd0\xeb" + + "\x81\x8f\x9c\x72\x67\x13\x22\x01\x11\x57\x2c\x12\xbb\xdd\x73\xe1\x1a\x29\x09\x08\x6f\x32\xc5\xaa\xe3\x28\xbc\x06" + + "\x4a\x4a\x81\x21\xaa\xed\x50\x4c\x3a\xf5\x25\x8e\xa5\xc1\x5d\x17\x89\x1e\x12\xc0\xa0\xcb\x4f\x7f\x17\xd0\xc8\x76" + + "\x3b\x63\x09\xc6\x1d\x1f\xc4\xa2\xcd\x30\x82\xec\x6c\xf1\xed\xf0\x98\xb6\x75\xc7\xb9\xfd\x57\x6e\x34\xf2\x24\x39" + + "\xf5\x8b\x78\xc6\x64\xf9\xee\x6b\xc4\x1e\xcc\xf8\x1e\x09\x6e\x90\x3b\x2f\x8f\x18\x56\xd1\x13\x33\x0a\x28\x6e\x51" + + "\x70\xde\x7c\x5d\xa3\xb1\xc3\x98\x16\x67\x9b\xef\x95\xcd\x17\xca\xbf\x42\x51\x3b\x4f\xf7\xed\x87\x3b\x4c\x42\x29" + + "\xce\xf7\xc6\x93\xdd\x8d\x19\xd4\xb4\xd2\x81\xfd\xce\x8e\x38\x63\x8d\xaf\x89\x9d\xa3\x63\xd2\x42\x45\x29\x80\xf7" + + "\xee\xa4\x64\x32\x4b\xf3\xfe\x99\x3f\xf4\x41\x1a\xcc\xd0\x8a\x7a\x4b\x9f\xc8\x22\xe3\xb9\xd9\x8f\x51\xb6\x4e\xca" + + "\xe6\x70\x35\x6f\x16\xf9\x3b\x3d\x53\x47\x6a\xf4\xb4\x77\xbc\xad\x2b\xa3\x6f\xce\xab\x9b\x49\x99\xdf\x98\xc5\xb9" + + "\x49\x6f\xe6\xd5\x4d\xb6\x98\xdd\x80\xd5\xf9\x26\xcf\x8a\x8b\x9b\x85\x69\xf4\x0d\xa4\xab\xee\xf7\x7a\xa7\xef\xd7" + + "\xe3\xb3\xdd\xfe\xe9\xdf\xbf\x39\x7b\xd8\x7f\x3f\xfa\x66\x34\xcb\x30\x4b\x83\x9e\xbd\xc1\x3c\xe9\xa3\xa7\x5c\x08" + + "\xf3\x37\xd8\x16\xe1\xf1\xcd\xce\xfd\xe3\xf7\xeb\xdd\x43\x7c\x5c\x94\xaf\x8a\xc2\xf8\xb7\xbd\xe3\x31\x6a\x5e\x6f" + + "\xea\xe6\x3a\x37\xd0\x74\x7f\x94\x51\x16\x2c\x32\xc3\x1f\xf9\xc4\x27\x6c\xba\x07\x9d\x73\x35\x71\xf9\x34\x46\xf4" + + "\xf3\x7d\xfd\xb0\x77\x3c\x3e\xfd\xfb\xd1\xd9\xcd\xd1\xfb\xfa\x21\x27\x06\x19\x52\x9d\x15\x36\x46\xf0\x0f\xa3\xbf" + + "\xff\xe1\xe6\xfd\xa8\x77\x3c\xfe\x45\x5f\xea\x1b\x33\x59\xe8\x3e\xbe\x6f\x15\x7e\xad\x6b\x6a\xe7\xef\x76\xb6\xdf" + + "\x8f\x7a\xc3\x87\x34\xd0\x49\x6e\x74\x41\x7a\x69\xfb\xfe\x7d\xfd\xf0\xe9\x76\xef\x78\xfc\xfe\xf4\xf9\x8b\x67\xef" + + "\x9e\xbd\x3f\xbd\xd9\xdb\xeb\xdf\xd8\x07\x67\xef\xcf\xec\xef\x6f\xde\xd7\x0f\xff\x30\x9a\x39\xa7\xeb\x9f\x5d\xea" + + "\x5e\x35\xc9\x4b\x0c\x8c\xb4\xff\xd5\x33\xc0\x18\x21\xf1\x5e\xfd\x15\xd2\x8d\x60\x24\x01\x84\x93\xac\x2b\xbd\x7c" + + "\xad\x97\x2e\x2d\x43\x94\xb0\x44\x7d\x6d\x9f\x95\x4b\xd4\x5b\x9e\xaa\x83\x81\x4a\x9e\xe2\x49\x72\x98\xe6\x47\x0f" + + "\xf8\xd7\x83\x6f\x12\xfb\x7e\x84\x05\xbe\x49\x00\xf6\x0a\x95\x86\x46\xa7\xee\x7b\xf0\xb9\xa3\xa2\xf4\x9b\x00\xb2" + + "\x26\x65\x6e\x4b\x3d\xf2\xa5\x9e\x4e\xca\x7c\x56\x95\xab\x25\x95\x77\x7f\xc6\x9f\x36\x55\xfc\x65\x73\x5e\xa6\xd7" + + "\xdc\x0c\xfc\x6e\x7d\x03\x7d\x7a\xdc\xfa\xe6\x69\x53\xf1\x77\xd5\x37\xdd\x1f\xdb\xcf\xbd\x2b\xc3\xa9\xda\x1f\xa8" + + "\xc4\x7e\x92\xa8\x33\x97\x43\xa9\x3d\x95\x34\xdb\xc3\x72\xd9\xc0\x28\xd4\x91\x12\x8f\x32\xf2\x2b\xe6\x47\x0d\xb9" + + "\xe1\xba\xbf\xa7\x65\xd9\x88\xbf\x79\x2e\xe4\x23\x8d\xd9\x24\xc5\x47\x76\xea\x0f\x45\xa5\x73\xf9\x32\x6d\x75\xf4" + + "\x60\x78\xa5\x26\xe5\x62\xa9\x9b\xec\x3c\xcb\xb3\xe6\x1a\x5e\xbf\xd6\x45\xb6\x5c\xe5\x84\x9b\x83\x01\xf2\x95\xf9" + + "\xe7\x2a\xab\x20\x5d\x25\xf4\x54\xe4\x39\x59\xb8\xe2\x65\x81\xf7\xbd\x4b\x07\x5e\x16\x8d\x67\x60\x37\x7a\x7a\x20" + + "\xc6\x1b\x34\x94\x38\x9c\xc5\x56\x31\xaa\xcc\xbb\x98\x59\x59\xf0\xe0\x40\x1d\xbb\x66\xc6\xae\x0c\xc4\xa0\x42\x52" + + "\x1c\x5b\x71\x05\x00\x69\xe4\x5d\x98\x9b\xc5\x70\x66\xd8\x05\xba\xfe\xf6\xfa\x1d\x12\xa4\x5e\x02\xe3\x4a\xfa\xa7" + + "\xfb\x67\x6c\x65\x44\x54\x67\x99\x08\xa9\x0d\x64\x12\x65\x9b\xe2\x5a\x18\x48\x89\xa2\x4b\x3f\xd2\xcc\xff\x64\x96" + + "\xb9\x9e\x98\x51\x65\x30\xe3\xb4\xcb\xb3\xe7\x13\x74\xdb\x2b\x1a\x69\x83\x8b\x84\xb2\xbc\x43\xad\xa7\x84\x97\x20" + + "\xa6\x5b\xac\x02\x05\x40\x21\x59\x09\x6e\x07\xe8\x33\x43\x95\xf2\xf8\x7d\x02\x28\xc4\xa2\xc3\xb4\xd5\x56\xec\x03" + + "\x3c\xa8\x91\x65\xbc\xdc\x87\x87\x7e\xf5\xfc\x78\x44\x5a\x1c\x18\x4b\x47\xcb\xf6\xfa\x42\x78\xb3\x23\xd5\x22\x8d" + + "\x04\x65\xeb\x7b\x47\x9a\x13\x1f\x9c\x13\xf8\x01\xd0\x00\xe0\xc5\xa9\x3a\x40\xa7\x4c\x29\x28\x0a\x6f\x81\xd6\xe0" + + "\xbc\x01\xb4\x35\x0c\xda\xf1\xd5\x05\xcd\x3a\x58\x12\xe7\xfa\x12\x1c\xfa\x19\xd7\xc0\x98\x42\x99\x4b\x9d\xaf\x34" + + "\x18\xbe\x7d\x8a\x1f\xd3\xfc\x11\xa0\x24\x5e\x5e\x6a\x72\xb6\xa8\x07\xaa\x32\x53\xde\x5e\x62\x22\x20\xa2\x0c\x28" + + "\x51\x4e\xd0\x0d\x02\x3b\xf5\xde\x67\x2e\xb2\x2e\x53\x4f\x55\x1e\x84\x99\x79\xcd\x51\x6d\x9a\x9e\xdb\x99\x9c\xf1" + + "\x2f\x99\xb9\x2e\x24\x03\xb5\x2d\x5b\x0f\x92\xb7\xc2\xc1\x14\x6f\x3b\x3e\x47\x56\xcf\x19\x78\xee\xc9\x74\x46\x90" + + "\x79\xea\x79\xb9\xbc\x96\xfe\x0b\xa9\xa9\x1b\x39\xc6\x81\xca\xd9\xdf\x63\x69\x5b\x7e\x6b\x4f\x20\xfc\x7a\xbe\xaa" + + "\x06\x6a\xe5\x9e\xad\xdc\x33\xd4\x5f\x8b\xb5\xb7\x75\x46\xa7\x3c\xe4\xca\x02\x73\xf6\xc1\x50\xd9\x4e\x29\x3b\x44" + + "\xdd\x60\x42\x7f\xf2\xfe\xac\x25\x38\xb5\x69\x26\x43\xd7\x42\x1b\x7d\xba\xae\x26\xde\x73\x8e\xbb\xde\xa9\x61\x84" + + "\x92\x87\xae\xd8\x73\x08\x7d\x0c\x97\x08\x86\xe0\x67\x40\x09\x28\xb7\x5a\x1d\xb9\xe7\x43\x39\x74\xe1\x2d\x56\xc7" + + "\x60\x99\xdc\x50\x00\x96\xe9\x1e\xba\x7a\x7d\xce\x85\xdb\x41\x95\x45\x84\xe3\x40\xe5\x2d\xc4\x61\xde\x95\x1d\x3b" + + "\xb1\x53\xb8\xc6\xc1\x36\x1e\xea\xde\xd5\x04\x3b\xac\x53\xa7\x29\x57\xf0\x11\xad\xe0\xaa\x36\x15\x4c\x64\xb0\x4c" + + "\x90\x6c\xbe\x7b\x99\x56\xd1\x32\x41\xd1\xf6\x32\xad\xfc\x32\x45\x4e\x12\xbf\x7d\xf4\x5b\xd2\x29\x6e\xa3\xbc\xfc" + + "\x38\x3a\x57\x47\xf7\xd9\xb0\x04\x35\xcf\xe9\x8e\xba\xb2\xb3\xa1\x67\xe2\x58\xa0\xdd\x88\x5e\x76\xde\x3e\x7c\x8b" + + "\x6d\x78\xdd\x83\x0a\x6f\x6e\x54\xf2\xd0\x43\xf4\xf1\x07\xff\xb4\x63\x3a\x21\x81\xe7\x19\x44\x77\x6d\x7a\xd5\x59" + + "\x0f\x63\x83\xb2\xc8\x63\x99\xfe\xc0\x91\xc6\xca\x8e\x7a\xd6\xe9\x7a\x1a\x0d\xf8\x58\xdc\xdc\x0b\x53\xcd\x4c\x4f" + + "\x9d\x72\x19\x4b\x6b\x2a\xf0\x5e\x1f\xd3\x51\x16\x04\x58\xb2\x4e\xdf\x1c\x59\xee\xc9\xcd\xed\x34\xbb\x7a\x65\x65" + + "\x8c\x6e\x8a\xc3\x5d\xb1\x7b\x80\xe9\x86\xfd\x7b\xd8\x94\x3f\x94\x6b\x53\x3d\xd7\xb5\x11\x6e\x28\xdf\xe9\x2c\x07" + + "\x1e\x79\x69\xaa\x3a\xab\x9b\x20\xaf\x23\xba\xee\x62\x92\x5c\x48\xe9\xe7\x7c\x7e\x21\x1f\xb7\x4e\xb3\x92\x82\x5d" + + "\x1c\x25\xf1\xcd\x53\x32\xe2\x15\xe2\x4c\x86\xd9\x34\x39\xe9\x87\xf7\xde\x62\xca\x6e\xbb\xec\x45\x12\x5b\x20\xce" + + "\x4b\xe8\x7a\xec\x24\x52\x43\xd2\xad\x49\x15\xf2\x91\x9c\x81\x81\xdd\x21\xdd\x6b\xf2\x45\x9e\x1b\xa4\xde\xa0\x8b" + + "\x83\x2f\x6a\x7f\x77\x6e\x1e\xc6\xcd\x4d\xf4\x9c\x13\x15\x26\x41\xf7\x83\xb4\x88\x81\xd7\x16\x27\x22\x74\xe7\xa5" + + "\x9d\xcd\x05\xe6\xb9\x9d\xc0\xc0\x9e\xb6\x67\x05\xda\xa8\x6a\xbb\xe6\x66\xf9\x42\x3e\x8a\xc2\xfd\xf3\x81\x6d\xf6" + + "\xa5\x4b\xe4\x6b\xfb\xe5\xfe\xc2\xb3\x42\x79\x22\x81\x49\x68\xe5\x50\xa4\x44\xc3\xc5\x8f\x7a\x26\x3c\x44\x3f\x31" + + "\x87\x6a\x87\x1c\x85\x3b\x98\x7c\x88\xaf\x00\xb2\x12\x62\xf5\xeb\x7a\x25\xb0\x72\xb7\x37\xa4\x7a\xdc\xd9\xe9\x04" + + "\xd2\x3d\xe8\x06\xd2\x3d\x38\x10\xd0\xe4\x1e\x82\xea\xaf\xaf\x7f\x78\x51\x4e\x3a\x20\xa8\x50\x7c\x34\xf5\x64\x6e" + + "\xd6\xea\x24\xfb\xf5\xd7\xdc\x28\xc0\xc4\x82\x54\xf5\xa6\x9a\x96\xd5\x02\xc0\x08\x2a\xa3\xeb\xb2\xa8\xc7\xec\x25" + + "\xf5\x4b\x6d\xdf\x0e\x27\xe5\x62\x34\x33\x8d\xce\xf3\xbd\xcb\x7a\xaf\x86\x0a\x46\x8f\xe8\xb6\xf2\xd3\xae\x8e\x3c" + + "\x51\xcc\x85\xdd\x43\xac\x93\x28\x12\x4c\x66\xfb\x7e\x12\x1f\xdd\x7a\x39\x05\xa4\x22\x62\x73\x64\xe7\x82\x7b\x29" + + "\x86\xc4\xb0\x57\x91\xf3\xb8\xab\x3d\x56\x93\x0b\x26\xa5\xd3\x06\xc3\x0a\xac\x35\xad\xed\xc9\xfc\xcc\x86\xdd\x1b" + + "\xcf\x86\xfc\xeb\xe6\xa6\x3d\x39\x5b\xed\x39\x0e\xfe\x14\xdf\xf8\x39\xdf\x70\xe5\x7f\xea\x94\x6e\x75\xb0\x7d\x9f" + + "\x3a\xb3\x7c\xe3\x07\xd6\x9c\xb8\x3e\x92\x14\xf3\xd8\x36\xe6\x57\xe4\xc7\xca\xd4\xa6\xba\x34\x4e\x2c\x42\x46\xdc" + + "\x12\xbe\x79\x66\x45\x8f\x6b\xa6\x45\x9b\x36\xdf\x40\x25\xf8\x2d\x07\x11\x38\x3e\x33\x9a\x03\xf5\x8d\x80\x70\x8e" + + "\x98\xfb\x80\xa8\xa8\x6d\xa2\x16\x3b\x3b\xc1\x3a\xc9\x96\x42\x88\x13\x10\xfe\x1c\x05\xa7\xfb\xa5\x36\x8d\x50\x36" + + "\xc2\x43\xa1\xa8\x3c\x5f\x65\x79\xca\xe9\x92\x63\x22\x59\x0f\xfc\xe5\x4b\x92\x0b\xab\x3d\x85\xa7\x17\x2b\x10\x09" + + "\xe1\xbc\xd1\xb3\x01\xe8\x03\x06\xce\x4c\x34\x50\x04\x8b\x22\x32\x37\x33\xfb\x70\x6b\xe2\xe6\x2d\xcc\x5d\xe9\x01" + + "\x54\xbc\x80\xb3\x41\xc2\xb9\x45\xc4\xd9\x12\x58\xe4\x21\x7c\x86\xd7\x75\x12\xf9\x03\xaa\xb7\x1f\xc5\x71\x3c\x4b" + + "\x53\xca\xa5\xc9\x90\x0a\xf7\xbc\xdd\x9f\x88\xa2\xbd\x7a\x1d\x41\xec\x54\xe4\x87\x84\xfc\xbf\x1b\x0c\xe9\xf3\xaf" + + "\x24\x67\xa3\xce\xcd\x44\xaf\x6a\xa3\x96\xab\x9a\x73\x06\x7e\x18\x28\x5d\x55\xfa\x3a\xcf\x2e\x4c\x5f\x35\xf3\xaa" + + "\x5c\xd7\x21\xdb\x4c\x4c\x11\x74\x75\x10\x51\xf3\x63\xc6\x92\x3f\x53\xe3\x88\x22\x22\x61\x2a\x2e\x4d\xd5\x00\x12" + + "\x0c\x28\x43\xb3\xa2\x29\x65\x80\xde\x3d\xe9\x75\x40\x6e\x52\xb6\x20\x71\x1f\xf2\x26\x80\x2e\x41\x27\x18\x24\x36" + + "\x58\xf1\x77\xe6\xaa\xc1\xfb\x91\x3f\xea\xea\x88\xef\xc4\x8b\xb7\xaf\x3d\x0e\x7c\xcb\xf1\xc1\x65\x2d\xb1\x2b\xd8" + + "\x9d\xe8\x3b\x6c\xde\xe9\x52\xd2\xec\x32\x91\x8d\x23\x9c\x59\x6d\xaa\x0c\x43\x74\xb5\xe5\x70\x8a\x54\x57\xa9\xaa" + + "\xcc\xd2\x92\x89\xa2\xf1\x79\x98\xb6\xb6\x80\x95\x55\x3d\xc5\x4a\x67\xa1\x72\xf0\x69\x79\x50\x8f\xa7\xfa\xa0\x54" + + "\x68\xb1\x8d\x50\x8f\x3d\x31\x5e\x91\x76\x0a\xcc\x2e\xa0\x48\xb1\x6a\x8d\x95\x83\x87\x7e\xc8\x41\xc2\x67\x5b\x0e" + + "\xea\x67\xad\x4a\x85\x7a\xa0\x9e\x72\x8a\xf6\x81\x4a\x9e\xfe\xe1\xe0\x9b\xa7\xa3\x3f\x3c\xfa\x26\x01\xff\x19\xfc" + + "\xe8\x91\x44\x92\xc1\xf1\x4f\x10\xe3\xba\x2a\x57\xb3\x39\x94\xb2\xcc\x2c\x5f\x4b\x08\x7d\x4f\x8a\x30\xde\x7c\xae" + + "\x0b\xfb\xca\xe1\xdc\x74\xe6\x6a\x11\xab\xe5\x13\x4b\x77\xa2\x44\xfe\x2f\x1e\x13\xdb\x99\x89\xed\xc8\x1b\x38\xe1" + + "\xe1\x7e\xf8\xc9\x2c\xcc\xe2\x9c\x32\xb4\x37\xe5\x72\x2f\x37\x97\x26\x67\xf2\x46\x46\x3e\x1e\x96\xdb\x7d\x5e\x41" + + "\x18\x54\xf6\x5d\x76\x65\x6a\x75\xff\xe0\xd1\xe3\x27\x5f\x74\x0c\xf5\x67\x73\x7e\x91\x35\x03\xf5\xea\xa5\x58\x67" + + "\xbb\x71\x9f\x93\x06\xf2\x48\x25\x49\xa7\xb4\x7b\x2f\xc8\xaa\x41\x6b\x86\xbc\x05\xf7\x09\x08\x24\xf7\xaf\xa3\xd2" + + "\x7b\xdd\x20\x79\x44\x38\x61\xaa\x1c\x34\x5e\xc0\xee\xdd\x7f\xb2\xff\xd5\x97\x6a\x4f\xbd\x9a\x12\x0f\x03\xbe\x83" + + "\xf6\x3a\xcb\x0a\xbc\x46\x9d\xa2\x51\x93\x4a\xb2\xd6\x0b\x82\x30\xa4\xc4\xb5\x5c\x17\xe4\xe1\xa5\xe2\x80\x4d\x5b" + + "\x94\x00\xbc\xaa\x8b\x6b\xc8\xd7\xe2\x49\xb6\xbf\x8a\x04\x7e\x6a\x41\xc0\xe9\x78\x25\xc9\xdb\x6a\xfb\xe8\x48\xed" + + "\x1d\x08\x40\xec\xce\x14\x4d\xce\xb7\xe1\x5f\x61\xd2\xe1\x9e\x58\x22\x40\x7c\x19\x4c\x3b\xed\x0e\xbe\xc8\xbb\x69" + + "\x14\xd6\x15\xb1\x12\x5c\xef\xa7\xf1\x28\x04\x57\xc5\x83\xf0\x6c\x60\xc8\x69\x00\x86\x69\x0b\x45\xe2\x39\xf8\x4c" + + "\x1a\x65\x69\xd8\x0a\xb5\xf2\x62\xb6\x49\x77\xe9\x1d\x1e\x3d\x92\x61\x6b\xaf\x34\x8b\xa5\x03\x2e\xf4\x27\x1f\x11" + + "\xec\xbc\x96\x56\x5c\x1b\x28\xb5\x52\xaa\x30\x49\x2c\xa8\x59\xba\x44\x02\x46\xf5\x4e\x78\x55\x9e\x65\xc1\xf0\x80" + + "\x61\xec\x05\x28\xf0\x22\x66\x47\xf2\x33\x81\x21\x13\xb4\x4e\x17\xe6\xfa\x53\x00\x46\x05\x9b\x12\x31\x24\xbd\x16" + + "\xfb\xd1\x0f\x63\x35\x43\x66\x45\x72\x15\x9b\x10\x8f\xed\xd8\x2f\xcc\xb5\x43\xe9\xf5\x1a\x42\x17\xea\x12\x7a\x27" + + "\xda\xc2\x56\xf4\x4b\xe3\x0c\x79\x13\x3d\x99\x9b\x53\x78\xdf\x5e\xb0\x54\x64\x83\x16\x0b\x13\x2a\x00\x37\x14\x0a" + + "\xc0\xfc\x04\x96\xb1\x2f\x70\x67\xfa\x35\x41\x8b\x29\xcb\x2f\xe6\xb9\xd6\xaa\x9e\x97\x55\x33\x59\x89\x80\xcf\x8e" + + "\xba\x1e\xd4\xaa\xbc\x34\xd5\xdc\xe8\xd4\xd5\x12\x71\x0f\x9f\x90\xf6\x28\xed\x48\x79\x24\x01\xc4\x3a\xe1\xbf\xba" + + "\xe7\x57\x8e\x5e\xe4\xba\xd6\xc5\xb5\x80\xed\xfa\x07\xe9\x9a\xff\xc1\xda\xca\xad\x2d\xaf\xab\xed\xae\x77\xf3\xa1" + + "\xb8\xa5\x99\x55\x6d\x2a\xd1\x86\x6c\x00\xf4\x93\xd4\x80\xd8\x5f\xf0\xd8\x87\x52\x9d\x75\x58\xf8\xbb\xfc\x47\xb7" + + "\x30\x8b\xad\x3f\x73\x10\x9e\x17\xb9\x42\xb0\x62\x15\x7d\x2d\x36\x94\xe5\xc2\x97\x2e\x94\xce\xab\x11\x09\x43\x8e" + + "\xb9\x71\x73\x45\x18\xc2\x4e\x11\x89\x6e\x30\xe0\xd6\xd6\xeb\x6f\xf0\xba\x90\xd1\xf2\x6d\xf5\x48\xc7\xe3\x0d\xcf" + + "\xbf\x0e\x78\x1e\x08\x6d\x0b\xae\xdc\x4b\xd6\x5d\xc9\x55\x23\x81\x8e\xe3\x71\xa1\x8c\x70\x91\x73\xa0\x6c\x82\xa4" + + "\xe1\x15\xd2\x76\x79\x96\xfe\x25\x69\xb9\x00\x93\xab\xc0\x5f\x1e\x44\x04\x30\xf2\xc5\xfc\x0f\x8e\xde\x52\xd4\xc6" + + "\x63\xe2\xb6\x4d\xb9\x04\xda\x29\x69\x3b\x05\x76\x74\x5c\x8f\x52\x80\x97\xd3\x40\x99\x59\xfe\xdf\x39\x0f\x59\x51" + + "\x9b\xaa\xf9\x16\xa0\x08\x1c\x65\xc2\x57\x9e\xcf\xdc\x3c\x37\x88\x61\xf0\x3f\x31\x35\x5d\xe9\x41\xa2\x17\xdd\x9d" + + "\xf7\x8e\x4b\x1d\xfd\x85\x3c\xfd\xff\x77\xeb\xee\xb0\x30\x57\xcd\x49\x86\xb1\xcc\x1b\xbb\xde\x4e\x98\xeb\x3d\xed" + + "\x2e\x48\x4d\xa7\x46\x0f\xd5\xab\xa2\x31\x55\xa1\x73\xf0\x71\x85\xd4\x28\x0f\x47\x2d\x95\x8a\xd3\x5b\xd4\xd2\xb7" + + "\xfa\x58\x39\xbc\x4b\x44\xa8\x11\xbe\x7c\x44\xec\x44\x34\xc3\xdd\xcc\x48\x06\xac\x08\xa2\xf5\xb7\x99\x90\x6d\xd7" + + "\xeb\x9d\x9d\x4e\x9d\x71\x1c\x01\xe3\x58\xac\x5e\xa4\x5f\x8c\x39\x4e\x1f\xa1\xdf\xb5\x2c\xc4\xb1\xf8\xb6\x7f\x07" + + "\x3b\x2e\x28\x6f\xc4\xf8\xde\xa1\x49\x73\x84\x38\xea\x16\x71\x06\x1b\x09\x51\xc0\x76\xb2\xbb\x24\xed\x08\xb8\x6d" + + "\x36\x04\x69\xba\x45\xbe\x6d\x95\xc0\x2f\xef\xf6\x45\xda\xb8\x2e\x4e\xa5\xc2\xf8\x43\x0b\xb3\x28\xab\x6b\x95\x1b" + + "\x4d\x00\x2a\x77\x2c\x9b\xc3\x3e\x08\x35\x34\x24\x66\x86\xec\x84\x50\xd0\x20\x4f\xdf\x29\xb7\xde\x3d\x63\x2d\x93" + + "\xcd\xa7\x1a\x6b\x42\x15\xf9\x51\xa4\x32\x77\xb9\xb7\x68\x48\xe3\xf0\x3d\xf4\xae\x5d\xf5\x51\x47\x73\xbe\xa6\xb0" + + "\x85\x71\xbb\xec\x61\x6b\xa0\xc3\x85\x5e\xb6\xb9\x8e\xd0\x75\x09\x66\x80\x2f\x84\xbb\x47\xdf\xf6\x40\x9d\x37\x8b" + + "\xfc\x3f\xc3\x6e\xc5\x0e\xa2\x6a\x9f\xe1\xcd\x19\x9f\xc4\x2b\x65\x41\x2b\x0b\x63\x0c\x94\xb2\xb8\x47\xbb\x18\xb6" + + "\xbb\x48\x8a\xf0\xa5\xf1\xda\xae\x96\xdc\x7a\x62\x0c\x65\x93\x9a\xe8\x42\x35\x98\x17\xc3\x49\x07\xba\x48\x31\x31" + + "\x20\x20\x17\x72\x25\xe2\x62\x40\xa7\x65\xdf\x3d\x17\x73\xb2\xb3\xa3\xb6\xa5\x73\x28\xc9\xab\x3c\x3f\xce\x24\xe6" + + "\xb4\x76\x2d\x3d\x20\x17\xbd\x5b\x11\xc8\x82\x01\xb3\x0a\x68\xea\x44\x10\x8b\x3b\x55\x79\xee\x64\x36\xd5\xb5\xa3" + + "\x7c\xb7\xa8\xc2\xbd\x36\x1c\x97\x34\x8b\x92\x61\x84\x87\x9c\x94\x31\xa4\xfd\xa6\x2c\x78\x1b\x88\xc9\x5d\xf4\x28" + + "\x94\xb7\x3e\x89\xe6\x6c\xf9\x0e\x07\x1a\xcf\x80\x7f\x96\x12\x18\xfd\xa2\x11\xee\x4b\xb2\xf5\x6a\x4a\x01\x23\xbe" + + "\x22\x54\x0e\x42\xb4\xcb\x95\x95\xb3\x01\x20\x68\xc5\xa9\x40\x74\x9e\x03\x34\x91\x4c\x8d\xf3\x51\x4d\x30\x03\x3b" + + "\x1c\x92\x8f\xdd\x77\x5a\xc4\x5f\xb0\xc8\x81\x0c\xad\xdb\x18\x01\xde\xd4\xef\xe0\xf9\x69\x47\xfc\x9c\x35\xf3\xee" + + "\x9b\x45\x57\x33\x75\xe4\xeb\x60\xb5\xec\x3d\x91\x3a\x06\xfd\x12\x74\x31\x33\xe0\x50\x66\x2b\x04\x74\x0e\x3d\x99" + + "\x3b\x87\x0a\x5e\x7a\x97\x2c\xa9\x30\x6b\xa9\xf9\xfd\xdd\xac\x18\xf6\x2b\x62\xb9\x5c\x6e\x8c\x8d\xbb\x82\xf8\x9a" + + "\x7e\x40\x50\x6c\x5d\x6e\x96\x75\x35\xe3\x73\x22\x6e\xe9\x4d\x8c\x26\xcd\xc3\x77\x65\x35\x31\x2e\x5f\x33\x06\x8a" + + "\x57\x46\xad\x35\xa4\x20\x16\x63\xe5\xb4\x74\xa0\x4e\xc5\xa8\x28\x37\xd6\xbe\x24\xa9\x15\x38\xb1\xf4\x6c\x6f\x68" + + "\xd9\x6e\x6e\xec\x53\x77\x18\x18\xed\x92\x71\x29\x49\xe3\x21\x17\x17\x53\xdd\x75\xb1\x90\x5d\xa1\x03\xac\x32\xe9" + + "\xca\x47\xcf\x15\xd2\x02\xc9\x2a\x75\x35\xab\x07\x10\x4f\x05\xfb\x5b\x86\x52\x7f\x97\xeb\xa6\x31\x05\x5c\xee\x85" + + "\xa9\x1b\x93\xa2\x32\x1d\x8e\x38\xa5\xf4\x41\xb4\x4d\x0e\xe4\x3a\x3d\x8b\xd2\x55\xd8\x2d\xc8\xda\xb7\x01\xe6\x6b" + + "\x11\x36\xc4\xb9\xae\x4f\xf8\xb7\x9d\x17\xc4\x49\xf6\x7c\x90\xb7\xf0\x89\xbb\x84\xd4\x6f\x11\x14\x41\xf6\x06\x3d" + + "\x1b\xd4\x91\xca\xd5\x9e\x3a\x18\xd0\x9d\x85\xe4\x13\x32\xf1\xd8\xad\x4f\x85\x5d\x72\x2d\xaf\xbe\x93\x09\xb7\xfc" + + "\xa1\xa4\x99\xf8\x19\x6e\x94\x07\x8d\x72\xfe\x1c\x6e\x54\x35\x2a\xaa\x89\x1b\x65\x07\x9f\x81\xca\x0a\xe5\x8d\x15" + + "\xb0\x4d\x45\xab\x0c\x2d\xd4\x53\x39\x64\xeb\xa3\xb8\xa9\x4d\xb7\x0f\x11\x32\xe7\xc5\x01\x8d\xe0\x70\x9d\x03\x90" + + "\x49\xa3\x5b\x29\x4e\x2b\xdc\x15\x60\xa2\x00\x4d\x3f\x94\x4c\x6b\x93\x4f\x41\xca\x68\x86\xe6\x9f\xae\xc4\xa1\x60" + + "\xc6\xc5\x40\x3c\x2d\x77\x53\xec\x6e\x2b\x99\x88\x03\x6a\x01\x35\xfc\x14\xd0\x6b\x7a\x2d\x46\x1b\x5e\x05\x14\x24" + + "\xd8\x96\x74\x70\xfb\xad\x48\x47\x1f\x3b\x2a\xac\xca\xb4\xa6\x81\x55\x9b\xeb\x74\xcc\x4b\x2c\x32\xc0\x5d\x13\x12" + + "\x0a\xd8\xb0\xb7\x1b\x73\x30\xf4\x88\xdf\x7b\xdb\x11\x1f\xfb\xe8\xce\x13\x9d\xc4\xec\x45\xed\x5b\x03\x1b\xf5\x1a" + + "\x7b\xd2\xb7\xbb\x51\x59\xb6\xb1\x65\x40\x90\x32\xcc\x20\xf4\xd0\x76\x33\xed\x8f\x9b\x5d\x5f\xd2\xa7\x87\x0c\x9a" + + "\x4c\x7f\xe5\xbc\x50\x5c\x9f\x39\x51\x4b\xae\xeb\x46\x65\x8d\x59\x00\x24\x99\xd1\x29\x63\x1c\x63\xd7\xd9\x0e\x97" + + "\x35\xc0\x87\x99\x22\x55\xab\xa5\xab\x1e\xf3\xf7\x5a\xda\x99\x99\x14\xc0\xa0\x2a\x34\xa3\x43\x9e\x5f\x53\xc1\x31" + + "\xaa\xb3\x06\x6d\x1a\xb5\xea\xdd\xff\x6a\xff\xcb\x7d\x4e\x11\x74\x2b\x33\x03\xd8\xb1\x47\x52\xdd\x7f\x4f\x28\xf2" + + "\x32\xd0\xb3\x3b\x42\x21\xd8\x10\xfa\x2e\xe4\xb9\x91\x20\x01\xce\x9e\xa7\xa4\x82\x29\xfa\x93\x31\x4b\x55\x19\x40" + + "\x22\x9c\x98\x9a\x22\x64\xc0\xd5\x82\x26\xd9\xf6\x35\xd7\x8d\xa9\xc8\x6f\x5d\xda\x8b\x39\xe5\xa4\x5b\x11\xc9\x15" + + "\xdd\x62\xf3\xfc\x77\xad\x9e\xb1\xdd\xd3\xd1\x62\xde\x50\x38\xec\x0e\x81\xb8\x8b\xb5\xe2\xf3\x29\xce\x3a\x79\xea" + + "\x60\x35\x99\x3c\xe5\x82\x82\x74\x8e\x1b\x41\x19\xa8\x43\xa7\xd1\x06\xb5\x34\x3d\x3e\xb2\x91\x71\xd6\x14\x80\xb9" + + "\x4d\xdf\xd1\x1b\x79\x66\xdc\x58\x83\x30\x82\xc8\xc8\xfb\x92\x7c\xef\x85\xf1\xcb\x2d\x28\xb8\x88\xda\x1d\xee\xb0" + + "\x43\x50\x47\xe4\x97\xb5\x95\xd1\xc5\x8f\xb4\xc5\x79\xd3\xae\x73\x03\xce\xbc\xee\x7e\x93\x85\xcc\x7e\x12\x5a\xc8" + + "\xdc\xe5\xb0\xb5\xb5\xdd\x76\x20\xa7\xc5\x0c\xdc\xee\x3b\x55\x28\x80\x0f\x51\xa0\xde\x45\x88\x1f\xdc\x13\x68\x17" + + "\x1d\xa2\x85\xb1\x64\x34\x52\x6f\x81\x4f\xd6\xb9\x7a\xf6\x7f\x9e\xfd\x55\xa5\xa0\x79\x45\xdc\xd6\xf3\x55\xa3\xd6" + + "\x98\x7e\x72\x55\xb8\x19\xcc\xa6\x98\xd1\x17\x1d\x28\x7c\x55\xd2\xcc\xf5\xc1\x5c\xea\xfc\xcf\x55\x1e\x36\xb6\x15" + + "\xbd\x95\x9d\xf2\xc2\x81\xb7\xc4\x6c\x36\xee\xcc\x84\x1a\x08\x27\xd4\xab\x27\x84\x88\x25\x42\xe7\x06\x64\x8d\xbc" + + "\xdb\xe0\xb3\xd1\x04\xe9\x34\x1b\xb1\x75\xc4\x01\x4d\xa1\x44\xf0\xae\x1c\xab\x04\x7f\x22\x54\x14\x6a\xb3\xe1\x31" + + "\xfd\x86\xe7\x52\x39\x39\x56\x09\x2a\x76\xc5\x9b\x67\xa8\x39\x4d\x40\x83\x0a\xcf\x69\x64\xcf\xf2\x7c\xac\x12\x21" + + "\x37\xc4\x98\x53\x05\x18\xe4\xa3\x7c\x16\xce\x94\x73\x8a\xc9\x51\xcf\x42\xa0\xcb\x88\x2d\x65\x55\x01\xf1\x66\xe8" + + "\x93\xee\x7c\xb7\xa0\x7f\x8e\xdc\xca\xaf\x89\xdf\xd3\x70\xe7\x62\x39\x71\xfc\x37\x2b\xc8\x32\xf5\xf4\x08\x2e\xa5" + + "\xb6\xa3\x57\x0d\x19\x91\x21\xff\x81\xad\x36\xe4\xb9\x59\xbb\x22\x00\x57\xb8\x53\xd8\x3a\xf9\x18\x9e\xfa\xe9\x38" + + "\x73\x56\x62\x61\x92\xef\x26\xd6\xa3\x91\x82\x40\x98\xfe\xef\x22\xd1\xa2\x0c\xa6\xda\x44\xe7\x36\xac\xa8\x2b\x61" + + "\x0e\xca\x50\xab\x7a\x7e\xd2\xe8\xc9\x05\x66\x86\x43\xa6\xff\x30\x8c\xb5\x55\xd9\xb4\xb2\x6b\x4b\x71\x5a\x69\x56" + + "\x2f\x73\x7d\xed\x83\x39\x46\x0f\x1f\xde\xfb\x4c\x3d\x54\x3f\x99\xa6\xca\xcc\x25\x32\x01\x7a\xd2\xac\x74\xae\xb8" + + "\x30\x78\xac\x93\x30\x08\x85\xff\x7f\x10\x84\xab\x7e\x3b\x01\x66\xf5\x23\xe5\xcf\x65\x5f\x6e\x4e\x7d\xd0\xf1\x01" + + "\xa2\xa7\x7c\x04\x28\x1e\x07\xbf\xc3\xa0\x93\xea\xe1\x08\x11\xa9\x74\x9e\x03\xfe\x62\x7e\x8d\x22\x97\x95\x3f\xb3" + + "\x82\xdd\xcf\x5f\x60\xaf\x84\x07\x3f\x76\x97\x9e\xf3\x5e\xb6\x4d\x78\x37\x7e\x08\xe5\x85\xbd\x44\x8a\x01\x5e\x72" + + "\x48\xbe\x11\x78\x85\xe1\x68\xfa\x8a\xc5\xf5\x77\x25\x96\x82\xf8\x49\x4a\xe4\x63\x97\x79\x66\x18\x01\xe1\x79\xb9" + + "\x58\xae\x1a\x93\x9e\xd8\x46\xd4\x02\x1c\xa4\xce\xad\x64\x99\x67\xfa\x3c\x87\xc0\x13\x1a\x8e\xed\x6c\x43\xa9\xcc" + + "\xdd\xfc\x6c\x6d\xf9\x55\x21\xcc\xf7\x4d\x75\x83\xeb\x36\x8c\xe5\xce\xb2\x9c\x41\x78\x1f\x74\x4b\x2e\x3e\x91\x79" + + "\x3d\x58\xa4\xac\xe6\xec\xc8\x60\x52\x6f\xcc\x62\x59\x56\xba\xba\x06\xa0\xa1\xde\xa2\xac\x8c\xb2\x5b\x55\x95\xcb" + + "\x66\x91\xfd\x0a\x9c\x4c\x5f\xad\x8a\x26\xcb\x01\x39\x0b\x3c\x72\xd4\xb9\x69\x1a\xc0\xef\x5e\x98\x5a\xe9\xbc\x2c" + + "\x66\x03\x6e\x08\x61\x43\xb2\x06\x64\x6a\x14\x55\x53\x5c\x52\x82\xd2\x9c\xa0\x0b\x8b\x2e\x52\x0e\x2a\xe6\x99\xca" + + "\x0a\xf5\xdd\x77\x28\xf4\xd9\xd1\x0c\x79\x8a\xc6\xee\x1a\xab\x6b\x31\xc4\x81\x4a\xa8\x84\x53\x88\xa1\x04\x87\x48" + + "\xe2\x98\x12\xa1\xb8\xc6\xe0\x77\xe0\x03\x5c\x46\x68\xf6\x36\xc2\x4f\xea\x12\xd4\x3f\x09\x8a\xe1\x09\xcf\x8f\xae" + + "\xd5\xd4\x92\x92\xb5\xbe\xb6\x3c\xdf\xcc\x34\xaa\xca\xd2\xd6\x56\x47\x3d\x15\x7e\xcb\x51\x21\x74\x62\xa9\x7b\x2e" + + "\x26\x85\xce\xdd\xbb\x0a\x2a\x4c\x5d\x12\x55\x19\x68\xc1\x83\x46\xe9\xce\x1e\xc3\xe2\xf6\x73\x48\x47\x90\xce\x92" + + "\x8f\xdd\x0c\x4e\x8e\x08\xc7\xf0\x07\x04\xf9\x30\x66\x71\x06\xe1\xae\x14\x94\xe3\xd4\x7f\x7c\x26\x62\xea\xb6\xb9" + + "\x30\xeb\xe2\xdd\xb7\xf1\xe1\xa4\xaf\xe9\x80\x06\xf9\xca\xc1\x33\x2c\x5b\x2c\x73\x03\xf3\x3c\xd5\x59\x0e\x7c\x9b" + + "\xa6\x4d\x93\x15\x00\xfd\xa7\x0b\x22\x6a\x4e\x1c\x74\xad\x59\x09\xba\x28\x0b\x03\xc1\x25\x61\x9f\xe4\xe6\x07\x1a" + + "\x87\xb1\x97\x7b\x78\xf8\x53\xaa\x52\xa6\x4a\x20\xe1\xac\xc2\xe8\x9f\x1e\xfd\x72\x00\xb4\x3d\x95\x3c\xa5\x67\xf0" + + "\xdf\xf3\xb2\x4a\x4d\x75\xf4\x60\xff\x81\x5a\x67\x69\x33\x87\x5f\x73\x63\xa9\x81\xfd\x39\xfa\x26\x51\xfd\x98\xa6" + + "\x44\x09\x93\x42\x57\xb2\x7c\xad\xaf\x6b\x48\x2b\x63\x94\x06\x7d\x14\xa8\x2c\xeb\x0b\x93\x9b\xa6\x2c\xec\x56\x45" + + "\x87\x41\x38\x3f\x1e\x4c\x1e\x54\x16\xf3\xf2\x02\x30\xca\x2b\xb3\xaa\x71\x24\xb8\xc2\xd8\x63\x14\x85\x49\xbd\x15" + + "\x73\xd6\x61\xb0\x09\x7f\x3b\x84\x8e\xb0\xcf\x2a\xe6\x2c\x2a\x7d\xec\xd3\xef\x5a\x72\x37\xaf\xf2\xa8\x04\x39\x45" + + "\x5c\xf0\x32\x03\x3a\x47\x47\x82\x29\x79\xc7\xae\xb4\xdb\xd8\x9d\xb5\x30\x2a\x37\x38\x83\x10\x38\xb7\xd0\xd5\x2c" + + "\x2b\xec\xf2\x8e\xfe\x8e\xbf\x47\x38\x20\x78\x5b\xac\x16\x45\x59\x2c\xaf\x28\x5b\xcc\x4f\x66\xf6\xf2\x6a\xd9\x53" + + "\xc9\xdf\x7b\x89\xda\x55\xcb\x62\xb5\x50\xbb\x2a\xe9\xf7\x8e\xb7\x97\x57\xfd\x53\xbd\xf7\xeb\x7f\x9d\xed\xfe\x21" + + "\x19\xa8\x24\x63\x2a\x64\xab\x99\x99\x06\x28\x72\xdd\x82\x2e\x8f\x34\x7a\x1d\xc1\xdf\x1c\xe9\x94\x19\x20\xf4\x1d" + + "\x14\x7e\x40\x58\x5a\x87\x0e\x29\x20\x8c\xaa\x5d\x55\xcf\x4f\x4e\x5c\x51\x58\x86\x09\xd5\x22\x8e\x3f\xec\xd8\x81" + + "\x5a\x64\xc5\xcf\xf4\x4b\x5f\xd1\x2f\x06\x03\xe5\x6b\x07\x7a\x09\x7f\xe0\xca\xbb\xda\x8e\x7c\xc5\x18\x29\x82\xa3" + + "\x0e\xa3\x6f\xc2\xcd\xf5\x35\x3e\x99\x99\xe6\x47\xc4\xa4\xbe\xc6\x30\xaf\xac\xc6\x5b\xa0\x30\x26\xb5\x57\x46\x59" + + "\x29\x20\xf8\x0f\xd0\xe8\xfd\xa0\x6f\xef\x87\x57\x2f\xbf\x1e\xa8\xda\x18\x75\xff\xe0\xd1\xe7\x8f\xbf\x64\x52\x14" + + "\x8d\x6e\x8b\x83\x23\xf1\xe9\x30\x6e\xcb\xdd\xf7\x37\x37\xae\x10\xf3\xbb\x7e\x03\x75\xd4\xec\xa8\x0f\x34\x60\x29" + + "\x4f\xd2\x8d\x0b\xfa\x09\x96\x6a\xec\x23\x7d\x59\x07\x8b\x0b\x9d\x8b\x8f\x07\xcf\x60\xf6\xf6\x44\x3d\x55\x5f\xd0" + + "\xe3\x67\x8a\x63\xfc\xc9\x57\x3b\xd1\x6b\x03\x69\xa6\xe6\x7a\x72\xa1\xce\xaf\xd5\x0b\xa3\x0b\xf5\x32\x5d\xeb\x2a" + + "\xad\x13\xfa\x8a\xea\x50\x3d\xdd\xa8\xdc\xe8\xba\xe9\x53\x28\x60\xad\x96\xa6\x9a\x98\xa2\xd1\x33\x8c\xde\xd2\x2a" + + "\xd7\xd5\xcc\x54\x0a\xd2\x3f\x93\xda\xb2\x26\xa9\xcf\x6e\x16\xbb\x1a\x0b\x50\x8a\x48\xf6\x67\x99\x5d\x99\x9c\x13" + + "\xd4\x36\xec\xc0\x37\xb3\x93\x83\xf1\x91\xcf\x4f\x4e\xde\xbe\x56\x69\xa5\xa7\x0d\x30\x06\x2e\x24\x2c\x35\x97\x0c" + + "\x9c\x3d\xa9\xeb\x35\xfc\xb7\x5c\x8c\xee\x57\xa6\x2e\xf3\x4b\x93\xee\x61\x0f\xfc\x4a\xf0\x81\x25\xc9\x19\xc3\x41" + + "\x77\x76\xf8\x9c\xb3\x40\x4d\x0c\x9e\xbc\x16\x02\x37\x6f\xc7\xf8\xfb\xfa\xb7\x70\x80\x47\xc8\x7d\x0d\xe1\x2f\xa4" + + "\x64\x7c\x66\xdc\x3b\x7e\x40\xaf\xe9\x20\xf9\xd7\xf4\x40\x7a\xf7\xae\x1a\x4e\x9e\x6d\xe9\x0c\xb6\xca\x7c\x86\xf6" + + "\xfb\x8e\xf8\x00\x44\x26\xdd\x0a\x5b\x6b\xd5\x1f\xf6\x15\x01\x91\x0e\xc5\x6e\x73\x27\x62\x1d\xf5\xe6\x27\x03\xe1" + + "\x17\xde\x42\x94\xca\x79\x08\xeb\x14\xf3\xd0\xea\x4e\x38\x0f\xad\xce\x89\x79\x90\x01\xdb\x1e\xb0\x36\xca\x66\x72" + + "\x1c\x6f\x7e\xbc\x9b\x2c\xeb\xf0\xd2\xed\xd8\x5f\x5f\x81\xe6\x1a\x27\x4a\x83\x61\x2f\x2b\x1a\x33\x33\x98\xa3\xc3" + + "\xd6\xba\x6b\x0f\x6a\x1c\x22\x2c\xa5\x89\x34\xfd\xa3\x69\xbe\x2f\xcb\x8b\x57\x53\x70\xa6\x4e\x33\xfb\xfc\xbb\x62" + + "\x00\x89\xab\xbf\x63\xfd\x37\xc4\x4a\x4c\x99\x65\xb3\xaf\x06\x6a\x6d\x1e\xe4\x39\x9a\x03\x98\xbd\x44\xdd\x51\xb5" + + "\x2a\x00\x05\xbf\x79\x60\x19\x61\x9d\x3b\xda\x36\xf4\x43\x06\x52\x30\x33\x1d\xf8\xe9\xce\xaf\x9b\xbb\x22\x32\x69" + + "\xd8\x7e\x40\x5e\x36\xc8\xd9\x87\xf4\xb2\x57\x56\xd8\x14\xa8\x5d\x38\xf3\x53\x53\x52\xfa\x3e\x95\xae\xe0\x2f\xce" + + "\x2b\xe9\x35\x38\x24\x8c\xdb\x3a\x09\x61\x2f\xe3\x64\x33\x76\xe6\x81\x9d\x47\x2b\x99\xae\x20\x9b\x7b\x09\x99\xe4" + + "\xe7\x90\xb8\xcd\x92\x08\x3c\x67\x3f\x59\xa6\x67\xc0\x55\xd8\x59\x58\x43\x4a\x6a\x94\xf4\xa8\x42\x72\x37\x05\x49" + + "\x76\xc6\x5b\x53\x20\x30\x04\x46\x7e\x1c\x21\x8c\xee\x50\x55\x06\xf7\x84\x1d\x4a\x5d\xa2\x29\x06\x78\x47\xc2\x25" + + "\xb2\xa7\x9c\xb3\xe5\xa0\x42\xcf\xa4\x48\x70\x86\x54\x23\xcd\x78\x8f\x1b\x57\x47\xb4\xb6\xfd\xdb\xd1\x09\x1d\x7c" + + "\x32\xee\x99\xd8\x91\xc3\xde\xa4\x40\xed\x7e\x2c\x6b\x58\xa9\xbf\xe8\x7c\xa0\xce\xcb\xab\x93\xec\xd7\xac\x98\xfd" + + "\x84\x14\xd1\xfc\x85\x5c\xc5\xd3\x12\x42\x1d\x05\xdf\x1d\x33\x84\x84\x63\x44\xa1\x26\xb2\x60\x24\xb3\x42\x28\x13" + + "\xe9\x52\xd2\xec\xf2\xee\x92\x21\xef\x7e\x89\x97\xce\x26\x18\x0c\x57\x60\x78\xae\x27\x17\xb3\xaa\x5c\x15\xe9\xf3" + + "\x3c\x5b\xaa\x23\x95\x10\x13\xb9\x77\x5e\x5e\x81\x8b\x8f\x2d\xdb\x0a\x80\xde\xf8\x35\x7c\xe2\x2c\x5c\xb9\xd1\x15" + + "\xe8\xe9\x4f\x88\xd7\xd8\xdc\xf0\x51\xbb\x69\xe0\x45\x68\xaa\xe8\xab\x49\x5d\xbf\x33\x57\xe0\x7f\x84\xec\xf9\x78" + + "\xff\x10\x48\xd6\x78\xff\x10\x59\xf3\xf1\xfe\x61\x53\x2e\xc7\xfb\x87\xb9\x99\x36\xe3\xbd\xaf\xbf\xfe\xfa\xeb\xe5" + + "\xd5\x21\x6e\xe3\x3d\xfb\xe6\x60\x79\x75\x98\x28\x48\xda\x94\x2c\x69\x59\xc7\xfa\xbc\x2e\xf3\x55\x63\xa0\xfb\xbe" + + "\xd1\xc0\x61\xd5\x2e\x83\x67\x7a\x5e\xc2\x3e\x04\x79\xb9\x6c\xe6\xe1\x2e\x51\x3b\xed\x3d\x02\x9b\xd8\xc1\x22\xb1" + + "\xf6\xc0\xa8\x5c\x5f\x23\xfd\x47\x59\xb5\x99\x9b\xeb\x07\x2e\x68\xc3\x6e\xf3\xc6\xa7\x28\x02\xe8\xfb\xa6\x54\xb5" + + "\xa6\x53\x58\x1b\x4b\x43\x88\xf2\x83\xe8\x6d\xcf\xa2\xe7\x15\xf1\x46\xf8\x51\xf6\xed\x59\x91\x7e\x1b\xf7\xad\xe7" + + "\x84\xbc\xcb\x78\x9e\x5b\x02\x04\x89\x25\x4f\x1f\x7d\x3d\x70\xc9\x51\x1e\x0d\x1f\x73\xb9\xbf\x98\x22\x2d\xab\xbd" + + "\x65\x65\xa6\xd9\x95\x9d\x85\xbd\x1a\x9a\x82\xf7\xc9\xde\x1a\xe4\x9b\x3d\xff\x7c\x8c\xcb\x68\x9f\x1c\xee\x2d\xca" + + "\x5f\x37\xbc\xa2\x05\xdb\x4a\xba\x5f\x93\x1c\x30\x3e\xcf\xcb\xc9\x45\xb0\xd8\xff\x75\x48\xff\x88\x1a\x60\xdf\xd8" + + "\x6d\xb0\xd4\x69\x6a\x6b\xb2\xbf\x71\x17\x3d\xb1\x4f\x3b\x37\x05\x4c\x8e\x74\x58\x21\x07\x38\x3a\xf3\xed\xf0\x44" + + "\x3c\xe1\xd2\x84\x9e\x66\x97\x27\x2d\x55\x4f\x24\x01\xa4\xd9\xa5\x14\x00\xb6\x62\xea\x83\x67\x08\x0a\x0f\x9b\x72" + + "\x89\xf8\xc6\x07\xff\x85\x7d\xe9\x22\x4c\xf2\x03\xba\xe4\xed\x27\x4f\x96\x7c\xc4\xdc\x08\x02\xa7\xc8\x70\x04\x1e" + + "\x7b\xc5\xed\x03\xd0\xb9\xff\x52\xab\x5f\xea\xb4\x5c\xd0\xed\x09\x92\xaa\xae\xeb\x95\xdd\xa6\x96\x88\xc7\xe3\x43" + + "\xb5\x14\xa5\xab\x71\x39\x55\x51\x95\x1f\xe5\xaa\xd9\x30\x43\x4c\xd1\x22\x60\x16\xa2\x38\x03\xba\x43\x83\x59\xeb" + + "\x82\x0f\xe7\xc8\x13\xbe\x59\xdc\x71\xa3\x73\x39\x31\xc8\x04\x1b\x55\x37\x59\x9e\xab\xb4\x04\xef\x28\xbf\x95\xbd" + + "\x36\x8c\xfc\xd4\xd8\xc7\xa8\x7d\xf0\x97\x95\xd9\xc3\x93\x98\x15\x33\x7f\xf9\xbe\x29\xe1\xfe\x03\x8b\x23\xf0\x17" + + "\x94\xd9\x00\xba\xb4\xb6\xac\x0e\x81\x49\x11\xc6\x82\x49\x07\xaa\x99\x97\xab\xd9\x9c\xea\xf8\xf4\xd3\x1d\xa2\xf6" + + "\xc6\x5b\x8a\xee\x66\xe4\x14\x5a\xdd\xdf\x98\x7f\xb0\x7b\xb3\xc5\x89\xa8\x7f\x7f\x2f\x3f\x06\x9d\xed\x6a\x25\xe8" + + "\x30\x49\x25\xe6\xb5\x67\x54\x36\x2c\x78\x2b\xa7\x13\x93\x2d\x08\x96\xe3\x25\xb0\x54\x1e\xfc\xa3\x38\xd1\x12\x49" + + "\x42\x98\xeb\x97\xf8\xa1\x3d\x0c\x9a\x15\x66\x6f\x57\xd1\xcc\x34\xb5\x67\xf0\x83\xe2\x2e\x0d\x11\xd6\x58\x4e\xfd" + + "\x29\x1b\xaa\xde\xfd\xc7\x8f\x1f\x3f\xee\xbb\x7a\xd0\x04\xa1\xbe\x5d\xcd\xd4\xc1\xe3\xc7\x4f\x1e\xab\xbd\xf6\x69" + + "\x62\x26\x79\x5d\x95\xc5\x8c\x78\x64\xcf\xb4\xed\xf9\x5c\x92\x6e\xbf\x33\x47\xe5\xae\x08\x16\xcc\xc5\x01\x98\x40" + + "\x4e\xd1\x42\xec\x78\xe0\xbd\x1c\x77\xdb\xca\x29\xb2\x85\xed\xbd\x40\x36\x25\xbb\x8c\xae\xcd\xdb\xf9\x96\xd8\x11" + + "\xd9\x8a\xa2\xcf\x4f\x4e\xc6\xe2\xee\x38\x74\x7a\x1e\x1a\xd9\xa1\x42\x22\x7e\xa8\x88\x82\xe3\xf7\xae\x1b\x2d\x66" + + "\x61\xd3\xc5\xf6\xe9\x57\xdb\xdd\x97\x5b\xf7\xf5\x26\x58\x9a\xd6\xfd\x26\xdf\xf1\xf5\x14\x5e\x71\xb2\x44\xd7\x1d" + + "\x37\xde\x3f\x74\x6c\x10\x5f\x66\xfb\x1c\x50\x1c\x4f\x87\x60\xe5\x41\x5a\x0b\xdf\xb2\x00\x98\xb8\xef\xd3\xf6\xbb" + + "\x03\xbc\x35\xc8\xce\xff\x29\xf7\x1e\x0b\xa7\xdb\x4b\x5d\xd5\xe6\xbb\xbc\xd4\xcd\x46\xda\xde\xf3\x9d\xe2\x3b\x30" + + "\xe8\xb4\xaf\xf3\x13\xae\xac\x80\x8a\x38\x49\x59\x46\x78\xdc\xfb\xec\x63\xbf\xc7\x96\x35\xd0\xb6\x90\x6d\xc0\x1e" + + "\xa1\x7f\xae\xb2\xc9\x45\x7e\xad\xea\xb5\x5e\x2e\xd1\xc5\x14\xf2\x10\x3d\x3f\x39\x91\xe9\xd6\x48\xa4\x67\xa5\xe6" + + "\x84\xb2\xfd\x67\x65\x51\x0f\x9d\x71\xd8\xd6\xd1\x91\xe5\x90\x90\x95\xbc\x7f\x14\x7b\xdd\x49\x18\x30\x52\xf1\xd9" + + "\x6e\x97\x00\x5c\xc6\x5e\xbd\x2d\x15\x47\x9e\x3a\xfd\x8d\xa5\x55\x64\xa0\x65\x15\x44\x59\x80\xb8\x8f\xb6\x56\xd0" + + "\x97\x64\x05\xf7\x80\xa9\x75\x99\xa7\xc2\x30\xec\xd5\x82\x52\x7b\xb6\xd5\x7e\xac\x8e\xb8\xa2\xb6\x9a\x8d\x34\x13" + + "\xec\x60\x42\xb2\x18\x8e\x1f\x06\x7b\x73\xa3\x4e\xcf\x04\x5b\x2d\x74\x15\x7e\x44\x77\x75\xbc\xbb\x4f\x79\x87\xda" + + "\x2f\xd8\x0f\x1f\x03\x04\x63\x7b\xa1\xdb\xc5\x86\x3b\x1b\x2e\x02\x54\x7f\x83\xdc\x59\x18\x55\x56\xaa\x6e\x74\xd5" + + "\xd4\xe4\x3e\x0b\xe5\xd0\xc9\x98\xb1\x48\x19\x94\x74\x6f\x62\xf2\x3c\x19\xd8\x4f\xf8\x01\x22\xaf\x26\xd4\x8e\x11" + + "\x10\x4a\x81\x4d\x88\xd0\x93\x6a\xd4\x95\x99\xdc\x6e\xb4\xe1\xa2\xfc\x35\xcb\x73\x0d\x6a\x33\x53\xec\xfd\xf9\x64" + + "\x94\x96\x93\x7a\xf4\xfc\xe4\x64\xe4\xb5\xe7\x15\xfd\xa4\xcd\x36\xfa\x7b\xcf\xf6\xfa\x06\x9a\xef\x1d\x6f\xef\x4d" + + "\x4e\x8d\x3e\xeb\x0f\x19\x3b\xb9\x58\x2d\xea\x65\x9e\x35\x77\x69\xc2\x87\x0f\xfb\x4e\x01\x0e\x1f\x56\x26\x7f\xb3" + + "\x5a\xb4\x3f\x3b\xdd\xdd\x3b\xeb\x1f\x85\x5f\x8b\x0f\xad\x58\x55\xd7\x27\xf3\x72\x6d\xf7\xb0\x72\x3c\xb6\x4a\x1c" + + "\x97\x3d\x50\x97\x59\x4d\xb0\xb2\x63\x95\xcc\xb3\x34\x35\x45\x32\xe0\x09\x1a\xab\x04\x48\x5f\xa2\xe0\xe6\x9f\xd4" + + "\xf5\x1b\x48\xbd\xff\xae\xd2\x45\x6d\x19\x24\x4e\x9f\x93\x83\xfd\xf2\x64\x09\x0e\xd0\x63\x4b\xd0\x28\xab\x76\xd1" + + "\xfc\x8c\x22\xa2\x4a\x9e\xec\xef\x27\x22\x42\xa5\xae\x7f\x04\x9a\x8e\xf0\x34\x2a\x41\x33\x8c\xed\xfe\x5b\xfb\x9f" + + "\xd7\xe5\xaf\xf6\x9f\x45\x9d\x90\x8d\x0c\xd4\x29\xe8\x22\xac\x26\x75\xed\x39\xda\x85\x86\x74\x6b\x80\xb3\xb2\x2c" + + "\x2d\xed\xce\x40\x37\x74\x09\x37\x87\xc2\x9b\xc3\x67\x6c\x94\x46\x6f\x2c\xf2\x63\x55\x2e\x11\x29\x0f\x2d\xdc\xac" + + "\xdb\xfc\x8d\x0f\x88\x0b\x84\xb0\x7b\x07\xf0\xed\x91\xd5\x46\xfd\x4d\x13\xb7\xe4\x70\xe7\xe8\xe4\x74\xa8\x05\xe0" + + "\x5d\xc0\xe4\x23\x3f\x6a\x1b\x88\xfb\x0d\x0d\x12\x75\x9a\xe8\x25\x01\xe9\xd9\xa7\xa7\xfb\x67\xc3\xa6\xfc\xf3\x72" + + "\xe9\x42\x20\x76\xe1\xf9\xb0\xce\xb3\x89\xe9\x1d\xa0\x2a\xa3\xac\xb2\x99\xf8\x08\x9e\x41\x3e\x7e\xbf\x02\x81\x2f" + + "\x63\x47\x5e\xfe\x02\x3f\x17\x5f\xa0\x7f\xc7\x2e\x77\xc8\x03\x36\x75\x0e\x3a\x1e\x75\x5b\x55\xc9\x9d\x3c\x8c\x51" + + "\x1b\x6b\xd3\x20\x0b\x7b\x69\xde\xac\x2c\xe5\x65\x52\x46\x4e\xfe\xf5\xea\xbc\xa9\xf4\xa4\x89\xd1\x6c\x61\x5b\xb9" + + "\x23\x17\x06\x93\x08\xa8\x5c\x2e\xcb\x8a\xd1\x3f\xae\x20\xc6\x9b\x14\xeb\x5e\x71\x9a\x70\x3b\xc9\x40\xa1\x23\x3b" + + "\x20\xf6\x81\x57\x82\xae\xc1\x01\xb3\xae\xbf\x2f\x4b\x8c\xe2\x78\xad\x9b\xf9\x70\xa1\xaf\x7a\x6a\x7f\xc0\x4d\x20" + + "\xb4\xcc\x9e\xea\xf9\x2e\x53\x16\x26\xbb\x6c\x3d\x5f\xec\x11\x86\x92\x24\xcb\x2b\x07\xff\xc8\x81\x1a\xe1\xd4\xe8" + + "\x15\x38\x6b\x82\x02\xf8\x6d\xf5\x3d\x9c\xb3\xd0\x48\x65\xae\x9a\x4a\x0f\x54\x56\x7f\x0b\x1c\xcb\xb7\xe5\xd5\x00" + + "\x17\x26\xc6\xbc\x85\x82\x20\xa5\xf6\x64\x69\x75\xcc\x3a\x9f\x44\x8d\x9d\xae\x28\x61\x10\x49\xb4\x38\xaf\x9d\x1d" + + "\x98\x00\xcf\x1d\xc0\xcd\xc2\xe8\x7a\x55\x11\x0e\x09\xe2\x0b\x50\x9f\x9d\x43\xe7\x13\x1c\xe0\x68\xa4\xde\x36\x73" + + "\x53\xad\x33\x88\x30\xca\x1a\x02\x0f\xb2\xe7\x61\x5e\x56\xd9\xaf\x96\xcf\xc8\x15\x9c\x8e\xaa\xc9\x26\x3a\x17\x1c" + + "\x81\xdf\xa1\x56\xca\x06\xc6\x29\x51\xc7\xea\x40\x8d\xc1\x11\x9e\x26\xd0\x7b\x3f\x49\x4f\xd8\x27\xf6\x9f\xdd\x23" + + "\xf5\x88\xb7\xea\x68\x84\xca\xa5\xf3\xf2\x4a\x2d\xca\xd4\xe4\x56\x50\x9d\xe4\xab\xd4\x10\xa7\x34\xb0\x9c\xba\x4e" + + "\x53\x95\x35\x14\x32\xb5\xd6\x45\xa3\x84\xbb\xba\x9f\xcc\x04\x3f\x49\x44\x28\x58\x6e\x5b\x8b\xdd\x2f\x68\xa5\xec" + + "\x79\xaa\xeb\x97\x00\x0d\x40\xde\xa0\xe8\x45\xcb\x6b\xd6\xf2\xe1\x96\x6b\xc5\x6d\xc0\x08\x58\x4d\x63\xe5\x25\xdb" + + "\xf9\x9a\xd9\x76\xe8\xbe\xd3\x4b\xcb\x11\x48\x38\xa2\x78\x1c\x62\xe5\x9d\xc3\x7b\xae\xf6\xba\x46\x92\x50\x43\xc9" + + "\xa7\x8d\x46\x2a\xa8\x41\xef\x96\xd5\x0a\xd2\x3a\xf2\x9c\x64\x90\xe3\x16\x47\xa4\x0a\x27\x69\xc9\x71\xe0\xcb\xb8" + + "\xe3\xdb\x5d\x0b\x70\x4b\xbf\x79\xa3\xc7\xdd\xb6\xd7\x2a\x9c\xb1\x64\xe3\x00\x22\x9f\xc9\xdb\x87\x42\x73\xe9\xf6" + + "\x91\x94\xa7\x36\xee\x8f\xdf\x35\xab\x9f\xde\x09\x98\x50\xb9\x33\x6c\x87\x6e\x99\x4e\xd7\x8b\x60\x3e\xbb\x7b\xfc" + + "\xef\xcd\x67\x7c\x41\x5c\x82\x0e\xa2\x85\xe8\x7b\x17\xf1\x93\xd7\xf8\x89\x65\x25\x91\x93\x2c\xa7\x53\x2b\xf4\x32" + + "\x4b\x60\xa9\x79\x36\x99\x83\x56\xea\x9f\xab\xec\x52\xe7\x94\x05\x1f\xb5\x4b\xee\x30\x01\x1d\x26\xb2\x09\xbf\x5f" + + "\x89\xf3\x77\xe4\x53\xcb\x23\xb9\xe9\xa0\x49\x68\xc6\x86\xc6\xd1\x84\x37\x96\x8f\x70\x14\xde\x51\x80\x30\x12\x43" + + "\x17\x00\xbc\xbf\x83\x76\x3b\x27\x9f\x74\x38\x89\x0b\xcf\x70\x84\x1f\xba\xe4\x47\x95\x38\x41\x00\xcc\xdc\x0e\xba" + + "\xce\x01\x4e\xd1\x0a\xf8\xcb\xd0\x12\x50\x31\x08\xd8\x38\x9e\x7f\xb1\x52\xe4\xc8\x15\xa6\x9a\x2f\x67\x6a\xcf\xb1" + + "\xd9\xe7\xab\x19\x72\xd7\x92\xcb\xae\xe7\xe5\xfa\xc3\xf9\x6a\x36\x9c\xcc\xb2\xe3\x2c\x3d\xfa\xe2\xc9\xd7\x8f\xbe" + + "\xfa\x9c\x13\x53\x37\xf3\xd7\x3f\xfc\xde\x1a\x9e\x7c\x7d\xf0\xc5\x17\x5f\x31\x37\x66\xd7\xe4\xe9\x91\xda\xb7\x77" + + "\xeb\x65\x5b\x6d\x06\x28\xbe\x79\xae\x20\x68\xa6\x29\xbd\x3a\xa9\x81\x7b\xbe\x70\x7f\x5b\xde\x33\x9b\xaa\xc2\x4c" + + "\x4c\x5d\x6b\xc4\x8c\xc2\xf5\xee\x72\x13\x09\xb6\xb6\xef\xc7\xc6\x6e\x50\x55\x1b\x04\x41\x89\x80\x4a\xdd\x59\x15" + + "\x99\xb3\xd3\xa1\x93\xc0\x50\x9d\x34\xe5\x12\x85\x1d\x2b\x95\xe2\xf2\x0d\xef\x6d\x30\xf0\x5f\xea\xbc\x15\xf0\x74" + + "\x49\x0a\x3f\xdf\xde\xda\x90\xe6\x94\xa1\x98\x31\xdf\x01\x2a\x98\x0b\x35\xd1\xb5\x51\xda\xa7\x82\x85\xd3\xc4\xaa" + + "\xb2\x55\xc1\x0a\x43\x61\x03\x1f\x8d\xa0\x86\x96\x7e\xad\xce\xec\xd9\xcb\xaf\x21\x70\xb4\x76\xcb\x01\x4c\x05\xd7" + + "\xe2\x67\xc7\x31\x47\xe1\x41\x94\xc7\x83\xfc\xfc\x9d\xbe\x7a\xd8\x52\x6f\xf6\xfa\x7e\x31\xba\xa6\x5e\x7a\xd8\xa1" + + "\xfc\x63\x59\x93\x24\x19\x28\xbd\x6a\xca\x01\xc7\xf3\x2e\x35\x49\x97\x40\x78\xfc\xb6\x90\x5a\x98\x4b\xf0\x0b\xb7" + + "\x7c\x5f\xc0\xfc\xb3\x22\x5b\x4f\x2c\x9f\x2b\xb4\x5c\xc8\x82\x80\x6c\x93\xa6\x23\xc7\x38\x66\x56\x24\x34\x97\xf6" + + "\xd6\xc6\x0d\xe6\xe9\x24\xb6\x01\x8a\xad\x4e\xfe\xf0\x1e\xfb\x77\x13\x3e\x28\x4b\x04\x5b\x48\x2e\x21\xcb\xdb\xa7" + + "\x70\x80\x22\x4c\x50\xcc\x3d\x85\x18\x72\x9f\xb6\xfa\xf7\x3e\xdb\x82\x5c\x15\xa8\xc4\x8a\x58\xfb\x79\xb9\xfe\x3e" + + "\x63\x04\x4b\x0c\x7a\xb5\xcf\xa4\x47\x25\xca\xa1\x8c\x24\x86\xf2\xe9\xc0\xad\xba\x40\x36\xc5\x68\x3b\x97\xbd\x81" + + "\x42\xc8\x5c\xcd\xdd\x59\x1c\xe0\x9b\xa7\xca\x61\xeb\xda\xbf\xbd\x1b\xbc\x80\xf8\x20\xd8\x5c\x28\x2f\xd2\x3b\x6d" + + "\xfb\xcd\xe2\x8e\x50\x00\x8a\xf7\xd1\xb1\x9f\x2b\xe3\x2b\x08\x90\xc3\x44\x2a\x96\xa4\xcc\xd3\xc0\x03\x37\xf6\x1f" + + "\x1d\x06\x7e\xbc\xbe\x1f\x62\xd6\x84\x4a\x17\x73\x0b\xe6\x59\x61\xa4\x17\x3a\x70\x04\x1c\x95\xdc\x94\x2a\x37\xba" + + "\x22\xbf\x0a\x81\x21\x88\xb1\x66\x38\xdf\xea\xfc\xda\x1e\xf0\x89\x4e\x4d\xaa\xaa\x95\xa5\x67\x96\xcc\x97\x82\x55" + + "\xdc\x8e\x47\xb8\xb3\xd3\xe5\x50\xea\xb8\x86\xf6\x60\x42\x78\x0b\xee\xc6\x89\x11\x19\x56\x90\xaa\x80\x8c\x01\xc9" + + "\x3e\xca\x4b\x53\x55\xd8\x43\xb8\xd4\x9d\xd2\xa2\x20\xd0\x67\xf0\xcc\x2a\x00\x81\xd4\x6e\xc8\xb9\x31\x30\xe2\xf5" + + "\x5c\x37\xe6\x92\x74\x78\xec\x13\xc9\xa4\x8b\x48\x9a\x9b\x08\x20\x73\xab\xc9\x3c\x70\x1b\x0e\x82\xf4\xa3\x61\x38" + + "\x27\xb6\xac\xfe\x1e\x3a\xd7\x86\x9c\xbb\x6d\x3b\x70\x00\x52\x7b\x47\x0c\x62\x17\x64\x07\x11\x60\x05\xe7\xfe\x66" + + "\x76\x94\x56\xf1\xa8\xd5\xa3\x20\x12\x93\x07\xb0\x1d\xfa\xff\xd2\xc7\xae\xef\x51\x12\x8d\xae\x6e\xd2\x27\xc7\x6a" + + "\xb3\xbf\x79\xe0\x6a\xbe\x81\xf1\xa3\xe5\x87\x45\xf2\xdb\x77\x51\xd6\x4d\xe4\x32\x5e\xd3\x22\xa3\x61\x3e\x2f\xcb" + + "\x25\x7e\xed\x40\xed\xd0\x07\xb6\xa8\x1b\x4b\x30\x2b\x33\xcd\x21\x4d\x39\x45\x9c\x31\xdd\xf8\x5f\x22\x07\x0e\x57" + + "\xde\x1e\x59\x06\x8b\xef\xd8\x42\x6e\x05\x36\xef\x31\x19\xad\xd3\x3a\x4c\x50\xff\xb1\x8a\xb7\x1a\x46\xbf\x8d\xa9" + + "\xfe\x6e\x5d\x0c\x8f\xf0\x70\x63\x46\x00\x02\x73\x76\x6a\x1e\xa7\x8b\xf3\x4e\x4c\x74\x38\x21\x3b\x95\x3f\x66\xf8" + + "\xed\xb9\x99\xeb\xcb\x0c\x98\x48\xcb\x00\x80\x47\x07\x84\x2f\xf0\xef\xa8\x5a\x54\x17\x82\x76\x65\x4c\x6a\xf3\xa5" + + "\x9e\x80\xca\x12\x67\x20\x74\xf8\x62\xb8\xf2\xc8\x87\x75\xab\xdb\xb5\xd5\xc1\xed\xd7\xf3\x72\x95\xa7\x4a\xa3\xcb" + + "\x38\x7a\x0d\x16\xa0\x72\x42\x2e\x04\xdc\xe7\xa9\x61\xfa\x50\xe4\x0d\x09\x78\xbf\x84\x8a\x25\x3e\xf2\x4d\xb8\xe4" + + "\xd1\xf2\x1d\xab\xe4\xc0\x2e\x85\x33\x94\xb4\x92\xaf\xb8\x5c\x72\x64\xe5\x5f\x35\xe5\x42\x83\xf6\x23\xbf\x06\x49" + + "\x0d\x74\x44\xc8\x1d\xd5\x86\x9d\xd4\xae\xf7\x2c\x4f\x98\x1b\xaf\x23\x45\x1d\xc9\xa4\xae\x51\x83\x46\xb3\x96\x4c" + + "\xca\x7c\xb5\x28\x9e\x97\xab\xa2\x49\xc6\x5e\x78\x49\xa6\x59\x9e\xbf\xa5\x01\x04\xcf\x73\x73\xf5\xc7\xaa\x5c\xb7" + + "\x1e\x9e\xcc\xab\xac\xb8\x08\x1f\x3b\xcd\x6f\xf0\xd8\x5e\x46\xdf\xb7\x1f\x97\x1d\xad\x21\xd3\x11\x3e\x59\xce\x75" + + "\x51\x07\xcf\xd6\x59\x5a\xae\xc3\x47\xe8\xbe\x18\x3e\x2a\xcb\x05\x3d\x08\xe6\x95\x36\xb1\x30\x2e\xad\xe7\x65\x6d" + + "\x48\xc7\x7b\x5d\xae\xd4\x3a\xab\xe7\x80\x44\x9b\x5d\x29\x0c\x15\x64\x73\x02\x6e\x55\x64\x61\x1b\xde\xe6\x2c\x20" + + "\x82\xa6\xb4\x5c\xf2\x76\x1d\x8d\xac\xa0\x4d\x8c\xe3\xd4\xb2\x82\x81\x0a\x9b\x26\xb2\xd4\x76\x56\x92\x49\x5d\x03" + + "\xb7\x98\x04\x5d\xfd\xa3\x69\xf8\x8c\xa0\x1b\x52\x78\xf0\x4a\x4b\x01\x5f\xbc\x7d\xad\xde\x20\xc8\x38\xbc\x6e\x9f" + + "\x09\x14\x4a\x48\x75\x2a\x04\xe4\x2d\xbf\xcb\x6c\x03\x24\xb5\x94\x05\x02\x97\x6b\xf4\x77\xf2\x10\x36\x21\xc5\xeb" + + "\xce\x79\xf1\xb8\xfb\xf1\x57\x70\xab\x74\x10\x4a\xe1\xb4\xf8\x31\x84\x59\xa9\x57\x15\xf9\xb6\xac\xcd\x83\xca\xa8" + + "\x75\x59\x5d\xd8\x09\x77\x90\x2a\xa8\x6d\x2c\x28\x9a\xc5\x59\xf1\x10\x78\x14\x48\x12\xf2\xa5\x42\x13\xce\x17\x92" + + "\x5e\x98\x1c\x74\xe7\xa4\xf4\x17\x0c\x6c\x87\x9b\x3e\x2b\xc2\xfd\x75\x06\xab\x7c\xea\xd4\xd7\x48\x61\x7b\xb7\x16" + + "\x38\xda\x64\x76\x70\x65\xfa\x52\xe2\x00\xe7\x06\x3b\x08\x07\x22\xe0\x2c\x03\x97\xa6\xaa\x49\x8f\x0a\x9c\x4a\x9e" + + "\x97\x6b\x93\x5a\x76\xcd\x16\x5b\x15\x5d\x05\x91\x42\xcb\x21\x00\x5d\x75\xb2\x8e\x0b\xcd\x11\xaf\x7c\xe7\x7d\xb7" + + "\x9c\xf3\x06\xae\x89\x27\xdd\x7c\x04\x24\x64\x55\xe8\x84\xcc\x2b\x4e\xd9\xe2\x24\x7e\x87\x50\x5e\x4d\x08\xc1\xbe" + + "\x32\xb9\x06\xa9\x88\x68\x31\x82\x7b\xd4\xaa\xb7\x7b\x64\x4f\xdf\xde\x51\x1f\x13\xef\x04\xa5\xea\xa1\xba\xff\xe5" + + "\xe3\x27\x9f\x7b\xf6\xa6\xe1\x0d\x28\xb1\xa9\x7a\x48\xbc\xc9\xc0\x16\x1a\x09\x62\x7e\x0d\x41\xea\x4d\x73\x7a\x70" + + "\xa6\x76\x01\x98\xe2\x21\xfc\xf9\xc8\xfe\x29\x65\xbc\x36\xaf\x53\xf8\x45\xdd\x92\x18\xe6\xe7\xab\x99\xba\xff\xf5" + + "\x23\x08\xbb\xf0\xf3\x91\xe0\x10\xda\xcc\x70\x74\x18\x40\x6d\x60\x8f\xe6\x1b\xfd\x86\xdd\xdd\x75\x65\xe8\x0c\x0f" + + "\xd5\x89\x31\x63\x75\xff\xcb\x83\x83\x2f\xfc\x2c\x30\x48\x0a\x7e\x8c\x52\x2f\xad\x4f\x88\x59\xb6\xc9\x87\xf8\xd5" + + "\xd4\xdf\x8a\x6b\x5d\xab\xa5\xae\x6b\x00\xa3\x18\xc0\x85\xf4\x60\x79\xf5\x80\xc5\xf5\x1e\x19\x6a\xed\xb6\x65\x74" + + "\x8a\xd0\x94\xdf\xef\x5a\x1e\x1a\x7d\x10\x06\xc2\x37\x57\x70\x8e\xa2\xe5\xd9\x3d\x62\x29\x33\xec\x31\xc1\xc5\x7f" + + "\xf5\xf5\xfe\x57\x03\x06\xd6\x38\x87\x98\x46\xa3\x20\x3a\xd3\xc3\x68\x9c\x5f\x53\x4c\xe5\xb5\xdd\xca\x35\xd8\x34" + + "\x03\xdb\x8e\x0b\xca\x3c\x5f\x35\x10\x92\x09\x1c\xc3\xc2\xe8\x02\xe3\x0f\xc1\xa1\x1a\xae\x37\xd5\x03\x4d\xc0\xa5" + + "\xa9\xae\xed\x80\xcf\x73\x03\x37\xb7\x23\xd8\x7d\x95\xa5\xa6\x40\x4b\x06\x13\x69\x01\x15\xbe\xbd\xc9\x9d\x77\x67" + + "\x47\x02\xdd\xc0\x2c\x81\xc5\x0f\xf8\xbb\xb7\xd3\x9e\x4a\xbc\x93\x6f\x42\xba\xbe\x7d\x01\x89\x12\x19\xec\x93\xac" + + "\x98\x9b\x2a\x6b\xda\xd3\x06\x0b\x0d\x64\x07\x96\xb9\x2a\x2f\xb3\xd4\xa4\x8c\xeb\xa5\x1b\xbe\x44\x4a\x67\xb6\x01" + + "\x84\x38\x77\x3d\x61\x6c\x2a\x87\x3d\x88\x91\x21\x01\xb2\x97\x40\x2f\xa9\x4d\x93\xd8\xf9\x85\x67\xa0\x17\xe9\xf1" + + "\x59\x83\x47\x52\xc6\x08\x2f\xad\xfe\x06\x9a\xd2\x1a\xa1\xc0\x38\xa3\xd1\xc5\xaa\xfa\xee\x91\x02\x03\x08\x9e\x1c" + + "\x65\xb1\x17\x05\x8f\x70\xba\xa1\x4a\x8c\x0b\x87\xb5\xb3\xa3\x92\x99\x1c\x94\xa0\x32\x38\x22\x21\xee\x93\x5e\xf6" + + "\xae\x11\x75\xf8\xd3\x70\xd7\xdf\x86\x93\xcf\x5d\x0e\x7b\x49\xac\x82\x73\xf5\x74\x35\x76\xea\x17\x85\x7d\x7e\x13" + + "\xfb\x40\x56\xc5\xc0\x90\xc8\x2a\xf1\x81\x25\x0e\xbf\xf7\xd2\x3d\xfc\xb7\xee\xfb\xff\x99\x3b\xd9\x5f\xfd\xff\x0f" + + "\xbb\x98\xef\xd8\xce\xb7\x6e\xe5\x5b\x77\x72\xa8\xa1\x6e\xed\x66\x34\xe5\xd0\x66\x8e\xd8\x38\xb7\x4f\x07\x96\x63" + + "\xd0\x32\x02\xbc\xa3\x4f\xe6\x2a\xab\x9b\xda\x93\x1a\xc9\x4c\x44\xe8\x97\x61\x9f\xee\x54\xc0\xbb\x1e\x31\x73\x91" + + "\x20\x5b\x9e\x04\x1a\xff\x16\x07\xc3\x12\x39\x16\x25\x92\x4b\xf7\x42\xec\x10\x13\xf5\xa8\x55\x60\x83\x3e\x1f\xd3" + + "\x4e\x0d\x98\xeb\x01\x79\xa2\xe4\x8b\x36\x9b\xda\x2d\x36\x31\xa9\x82\x00\xc2\x7f\xae\x74\x6e\x69\x6b\x15\xae\xb0" + + "\x65\x05\x6c\xab\x39\xac\x56\xb1\x5a\x98\x2a\x9b\xdc\xeb\x30\x4a\xa3\x5a\x41\x32\xff\x5b\x05\xb8\x17\xb5\x34\xd5" + + "\x87\x92\x5c\xf8\x1a\x20\x1e\xc5\xef\xc7\xcc\xde\xce\xb6\xb1\x9e\x6d\x55\xf5\xd5\x31\xfc\x0b\xde\x0d\x63\x69\x4b" + + "\x88\xed\x0b\xdd\x90\x2e\xa7\x2a\xc1\xb0\x92\x64\xe0\x2c\x67\x67\x12\x67\x25\x93\x1e\x3a\x5b\x9b\xce\xcb\x51\x57" + + "\x2c\x58\xa4\x1a\x88\x64\xa0\x4d\x0a\x02\xcb\x8d\x12\x03\xe3\x54\x4e\x96\x8d\x00\x55\x64\x9a\x2d\x4c\x51\x83\x5f" + + "\x6f\x31\x2d\xc9\xa0\x9e\x15\xe0\x57\x95\x5f\xa3\x1e\xa6\x99\x9b\x85\xab\x6a\x5e\xae\x2d\x5f\x00\xcc\xc8\xc2\x92" + + "\x6d\x04\x56\xb0\xbb\xb7\xb2\x12\x16\xeb\x70\x90\x6c\x23\x1d\x04\x3e\xe3\xdc\x14\x66\x9a\x35\x7c\x66\x49\x47\xe9" + + "\xee\x07\xe1\x8c\x46\x31\x9a\x77\x68\xdd\x1c\x76\xac\x34\x48\x22\xc3\x40\x69\x00\xb6\x84\x37\xa5\x9b\x3b\x74\x29" + + "\x1b\x74\x38\x7c\xbb\xbe\x7c\x92\x61\xd6\x01\xf7\xbb\xd4\x02\x5b\xbf\xe3\x3b\x42\xfc\xc4\x03\x54\x77\x2d\x72\x97" + + "\x94\xeb\x71\x4c\x6a\xe7\xf5\x82\xd9\xe1\x5a\x71\xd6\xe2\x9e\xbc\xc3\x05\x09\xab\xa1\x29\xdb\x6c\x74\x91\x66\x17" + + "\x69\x78\x21\xd3\xcb\x20\x9c\xf2\x7f\xd5\x98\xcb\xd5\x78\x1b\xcc\xd6\x56\x5f\x8d\xd5\x3e\xfc\x8c\x22\xf0\xfa\xad" + + "\x64\xf3\x81\x0f\x76\x74\xb4\x22\x6f\xe6\x30\xc6\x93\x19\xd6\x8e\xd8\x80\x81\x88\x8f\xda\xa4\x9c\xeb\x3e\x79\xff" + + "\x69\x9f\x7c\x5b\x5f\x59\x5d\x28\x0d\xfc\x31\xdc\xc7\x04\xd7\x92\xd9\xa3\x4a\x32\x2c\x1b\x47\xf8\x20\x36\x25\x99" + + "\x51\xf6\xc0\x19\x52\x6e\x8d\x8e\xf3\xf1\x9b\x3f\x64\x63\xcb\x5f\xfb\x0f\xc9\x8b\x72\x6b\x6b\x0b\x2f\xaa\x01\xe5" + + "\x92\x1b\xb0\x9b\x0a\xcc\x56\xe2\x72\x33\x92\x62\xd6\x2d\xd2\x3b\xd0\xf2\xe1\x65\xac\x2b\x83\xce\x67\xe7\xd7\x4a" + + "\x17\xd9\x42\x63\xc0\x3a\xa6\x15\x09\xf4\x7e\x31\x5a\x16\x79\xb1\xab\x04\x51\xb2\xc8\x83\x9d\xfe\x24\xcf\x76\x76" + + "\xd0\x88\x00\xae\x90\x6d\x19\xa8\x7a\x35\x9d\x66\x57\x9b\xe8\x2f\xb9\xea\xef\x72\x31\x47\x8a\xb1\x73\x1b\x31\xb5" + + "\xa3\x04\xec\x5c\xde\xa0\x07\xf6\x40\x44\x2c\x60\xb8\x13\x24\xb0\xc9\x8a\x59\x6e\xc4\x3d\x59\x94\x0d\xa8\x8f\x2b" + + "\x17\x22\xb0\x04\xff\xe1\xa3\x5b\x60\x42\x49\x4b\x3e\x04\x4f\xc1\x5e\xa2\x12\x7b\x5e\x4e\xa9\xe4\x59\x98\xf0\xd4" + + "\x7b\x8d\x49\x48\x3a\xee\xa9\x18\x7c\xcb\xe7\xc5\xcf\x06\x9d\x50\xe8\x98\x43\x8e\x76\x7f\xed\xb1\x03\x20\x3d\x71" + + "\xd9\xe0\x3e\x86\x71\xb7\xdc\x66\x70\xa2\x5d\x38\x6a\x18\xac\x4f\xbd\xea\x47\x91\x5c\xb7\xac\xd9\x10\x61\x62\x5b" + + "\xa4\xaf\xf3\xda\x0e\xf3\xd4\x44\x92\x83\x50\x39\x7e\x22\x7a\x7a\x4b\x55\xd9\x41\xbd\x07\x2a\x27\x43\xf0\xd6\xd6" + + "\x02\xbc\xaf\x43\x34\xf5\xc0\xb4\xe5\xf8\x14\xca\x6c\x26\xb1\x0b\x3c\xad\xec\x72\xb6\xa1\x3b\x2a\x07\xf3\x19\x08" + + "\xda\x11\xea\x67\x80\xaa\x69\x8a\x18\xaa\x70\xa1\x97\xc8\x90\xe0\x3a\x9f\x75\x3a\xeb\xb8\xf7\x2d\xea\x1e\x43\x40" + + "\x3a\xa7\xd5\x65\xe7\x96\xe8\x52\xb6\x85\x09\x7d\x5a\xb0\x18\x7e\x86\xc7\x41\xc1\x96\xf6\x0a\xb7\x59\xa4\x41\x6e" + + "\x21\x6c\x7f\xa3\x0e\x3c\x6e\xf2\x96\xe5\x7d\x36\xe6\x20\xf1\xd6\x7f\x5c\xff\x10\x73\x79\x6b\x9e\xa5\x9b\xd3\xad" + + "\x84\xdf\x8a\xaf\x9a\x72\x36\x0b\xf5\xde\x98\x5e\x5b\xde\x32\x44\x08\xf0\x05\x5d\x9f\x65\x6e\xb4\xf0\x12\x74\x02" + + "\xb2\x2d\x82\xc8\x77\x43\xdb\x66\x8f\x13\x83\x0c\x6d\xf7\x7a\x1b\x41\xe5\xba\xd3\x22\x91\xc7\x26\xdb\x60\x19\x91" + + "\x9b\x37\x0b\x23\x22\xe1\x73\x6a\x8f\xd6\x39\x40\x64\x8c\x0a\x8a\xae\xb4\x62\x6d\x0e\x23\x5c\x86\x77\x6b\x63\xda" + + "\xc1\x30\xf6\xba\x18\x28\x53\x58\x7e\x58\x03\x9a\x01\x76\x8a\xbd\xb6\xcd\x1a\x3f\x1c\x2e\xab\xb2\x29\xed\xfc\x0d" + + "\xb3\x22\x6b\x3e\xa5\x1e\xb4\x21\xd2\xa6\x82\x4a\xd4\x11\x56\x06\x5d\x8b\xaa\xa5\x9b\x02\x6c\xb5\xd5\x6a\xd2\x94" + + "\xd5\x18\x0b\x23\x3c\x63\xd6\xc1\xe5\x6d\x6e\x7c\x80\xbe\x51\x34\xbf\xb8\x2e\xde\x84\x7b\xe8\x1e\xda\x0f\xad\xf0" + + "\x53\x95\x4b\xff\x90\xfa\x7f\xc4\x03\xb9\xb9\x51\x49\xbd\xb6\xd7\x85\x2f\xc3\x11\x31\x2e\x16\xc7\xbf\x82\xa8\x15" + + "\x46\xdf\x2e\x20\x00\x03\x71\x13\x57\x15\x2d\x15\xb6\x52\xd8\xcb\xcd\x14\xa9\x7f\x04\x7d\x3e\xc2\xae\x47\x6a\x0b" + + "\xd6\x81\x42\x87\xcf\xd4\x31\x59\x72\xc1\x4f\xdc\x9d\x80\xc9\xaa\x23\xed\x8f\xa5\x9b\xac\x5f\x70\x53\xbe\x24\xda" + + "\xef\x27\xe1\x2c\x4c\xb5\xe1\x14\x01\x4e\xd6\x27\x6a\x22\x64\xff\x20\x37\x58\x54\xb5\xcb\xb8\x2a\x8b\xba\x8e\x56" + + "\x2b\x19\x25\xcc\x30\x39\x01\x10\xa6\xae\x4d\x3a\xf0\x2d\x7e\x5a\xe7\x7d\xaa\x22\x5a\x95\x61\xba\x42\x00\x61\x6f" + + "\x78\x80\x8f\xca\x1a\x97\x17\x18\x0c\xc7\x25\xd9\xd5\x3e\x55\x72\x0f\x9c\x11\xfb\x4e\x3d\x1c\x6c\xa8\xfc\xa1\x72" + + "\x05\xf6\x07\xea\x60\x43\x31\xc9\x85\xcb\x43\xdd\xd1\x25\xaa\xce\x0b\xcf\x62\x33\xd1\x08\xed\xfe\xd9\x53\x62\xc7" + + "\xf5\xd5\x43\xfa\x7e\x57\x3c\xde\x38\x33\x75\x63\x96\xe1\xac\xc8\x37\x02\x9b\x78\x68\x44\x12\x27\x2b\xfc\x09\xac" + + "\x6f\xe9\x8f\x1e\x6d\x99\xda\x78\x38\x6e\xa1\xd0\x95\x1f\xcb\x49\xd8\xb8\x7f\x5a\x5f\xdd\xeb\xc6\x87\xed\xa2\x29" + + "\x40\xaa\x02\x12\x13\x15\x08\x3f\xc2\xa6\x89\x10\x71\x07\xc6\x9d\xba\x84\x06\xc8\x99\xe4\x4d\x2a\x53\x63\x82\x61" + + "\x4f\xef\xa1\xd0\x10\x31\x16\x1b\xd7\x88\x3a\xe3\x54\x44\x0e\x87\xb8\xb7\xed\x8b\x92\x69\xf4\xe6\x46\xc5\xcf\xa2" + + "\x4a\xc8\x92\xd3\x6f\x69\x8b\x37\x35\xdb\x52\x21\x2f\x35\xe2\xd7\xe8\x82\xb2\x32\x20\x57\x0c\xb8\x3f\xea\x71\x95" + + "\x2a\x80\x47\x34\x8d\xa9\xac\x7c\x61\xc9\x90\x5a\x67\x79\x1e\x3a\x23\x70\x65\xba\xb1\xf2\x94\xe5\xc0\xbd\x2a\x09" + + "\xf4\x52\x2e\x0b\x08\x44\x69\x51\x13\x14\x7c\x0f\x45\x11\xa8\x90\xeb\xa9\xcb\x01\x83\x18\x92\x61\x0b\x5d\xb0\x6a" + + "\x95\x1c\xec\x5b\x7a\x67\xc5\x1f\xf8\x0e\xe2\xbe\xa0\x9d\xe1\x3d\x67\x38\xb4\x1f\x5e\xb5\xbe\xac\x4a\x7b\x9d\xf7" + + "\x0e\x2a\x9d\xf6\xb1\x06\x9c\x2b\x8a\xe0\xa9\x87\x74\xf5\xdb\x25\x8c\xf8\x34\x3f\x9b\x03\x31\x9b\x08\x6e\x7c\xc8" + + "\xed\xbe\x14\xd3\x57\x73\x2a\x12\xcf\x88\xd9\x69\x48\xec\xac\x61\xdb\xa4\xe8\xc3\x01\xec\x0f\x25\xdb\xb1\x4d\x7d" + + "\xb8\xb9\x51\xdc\x1b\xcb\xa5\xe0\xb7\xc7\xa0\x54\x73\x1b\x8d\x63\xf2\xeb\xdb\xb6\x26\x79\x98\xc2\x69\x77\x0a\x6b" + + "\x58\x0e\x3b\x57\xba\x51\x7b\xf0\x9e\xc4\x01\xf4\x05\xac\x09\xa3\x08\x5f\xd1\x86\xc4\x37\x6e\xb5\x2f\x75\x96\x83" + + "\x43\xae\x1d\x1b\xc0\xf4\xe6\x3a\x76\xa7\x00\x2f\x64\x2e\xd8\x62\xc9\xa7\x57\x40\x69\xa2\x5d\x1d\xb1\x44\xdd\xa5" + + "\xdc\x20\x03\x16\x29\x3a\x73\xd4\x6f\x80\x7c\x6d\x1f\xa5\x96\x45\x20\xe8\x85\x3f\xa2\x5d\xaa\xf7\xa8\xc3\x71\x97" + + "\x89\xd1\xde\xb4\x71\xf0\xb7\xa5\xe5\xbb\xf4\x1b\x79\x95\x2e\x76\x6f\x23\x05\x39\xf2\xd5\xb4\x1d\xe8\x3e\xb6\x54" + + "\x3b\x80\x14\x38\x1a\xa9\x1f\x75\x91\x4d\x08\x18\x41\x2f\x97\x55\xa9\x27\xe0\xe2\x52\x3b\x3f\x16\xb0\xaf\x97\x00" + + "\xf5\x38\x29\x8b\xc2\x4c\xec\x36\x25\xc7\x8f\x16\xa9\x1c\xd6\x93\xaa\xcc\xf3\x77\xc0\x44\x75\xbf\xfb\xc1\x4c\x1b" + + "\xa2\xa8\xb7\xed\xd3\x78\xed\x9c\xdf\xc8\xce\x8e\x7c\xdc\x91\xea\xee\x93\xa7\x28\x98\x9c\xe0\xce\xa7\xfe\xe5\x59" + + "\x61\x74\x15\x30\x26\x91\xd4\xba\xf4\xe2\xcd\x1a\x34\x27\x9b\x8b\xee\x0f\x3f\x57\x7b\x10\xbc\x30\x9c\x94\xb5\x7d" + + "\xff\x10\xff\xfa\xf1\x95\xea\xab\x91\x7a\x74\xd8\xd1\x9d\xe9\x55\xfb\x8a\x82\x3b\x8c\x17\xf4\x5b\x7b\x70\x9f\xe3" + + "\xc1\x7d\x7a\x30\xfc\x4a\x81\xec\x0d\x1a\x68\x08\xf4\x11\x35\xe1\x05\xff\x7f\x31\xf7\xee\xdf\x6d\xdb\xd8\xfe\xe8" + + "\xcf\xce\x5a\xfe\x1f\x10\xa6\x37\x95\x62\x59\xb2\xd3\xa6\xd3\x2a\xe3\xf1\x4d\xf3\x98\x66\x6e\xd3\xf4\x34\xe9\x69" + + "\xcf\x72\x7c\xba\x60\x11\xb2\x18\x53\xa4\x86\xa0\xfc\x68\xed\xff\xfd\x2e\xec\x07\xb0\x01\x52\x76\x3a\xe7\xf1\xfd" + + "\xce\x5a\xd3\x58\x24\x88\x37\x36\xf6\xf3\xb3\x7d\x00\xbb\x0c\xbd\x9e\x5f\xfe\x00\xf7\x78\xb1\x34\xcd\x6b\xe0\xb2" + + "\x9a\xf9\xa5\x6b\xcb\x62\x24\xf3\xe1\x14\x65\xa9\x6b\x27\x87\x5c\x3b\x19\x63\xf8\xd9\x84\x8a\x55\x7d\xc1\xc8\x87" + + "\x53\x8a\x47\xbe\x1e\x26\xf1\xcc\x08\xea\xd9\x09\x6a\x5e\x3b\x51\x60\xf2\xcf\xb5\x59\x1b\xd8\x2c\x58\x3d\x2a\xb3" + + "\x8a\xba\x82\x48\xd3\x12\x2c\xf0\x07\xea\x88\x1d\x08\xfd\x53\xcc\x48\x03\xab\x8b\x45\xd0\xa7\xed\x51\x36\x55\x47" + + "\x91\xca\xca\x1d\xb7\xae\x16\xa1\x25\x51\x04\xb9\x72\x40\xc9\x20\xd9\x28\xfa\x82\x54\x0a\x3e\xe7\x28\xee\x26\xe0" + + "\xe2\x47\xb1\x7a\x09\xa7\x25\x76\x21\xa1\x22\xc4\xd2\x63\xc9\x87\x0f\x59\xb1\xf3\x45\xd7\x30\x79\x1b\x87\x2f\x15" + + "\x60\x10\xc9\x54\x78\x5d\xa7\xc0\xa2\x52\x85\xc7\xbb\xc2\x38\x1d\x1f\x11\x8d\x22\xc5\xb2\xb0\x14\x68\xca\xaa\x0f" + + "\x14\x54\x6e\xe9\xc5\xf5\x35\x7e\x8a\x01\x60\x97\x60\x00\xdb\xa1\x19\x11\x69\x14\xa2\x09\xd8\x74\x79\x42\x95\x43" + + "\x3f\x33\x76\xa6\xc1\xcf\x6a\xdf\x6b\x72\x2e\x5f\xb7\xa6\xd1\x2c\x57\x3d\x8e\xf5\x38\xd8\xd9\x87\x0f\xf1\x0f\x9c" + + "\x41\xd4\x76\x14\x6d\x64\xad\x79\xdf\x40\xb6\xba\xaa\x80\xe8\x25\x82\xc4\x3e\xb9\x12\xdd\x8a\x56\x86\x85\xad\x50" + + "\xad\xc4\x47\x09\x36\xe9\x0b\xa3\xd6\xab\x1c\x54\xad\x0b\x43\x5b\x48\x5c\x76\x98\xb1\x84\x33\x5a\xf0\xc6\xc0\x7f" + + "\x01\x73\x21\xca\xa3\x86\xe3\x3c\x37\xe5\x15\x52\xe1\x4b\x54\xe2\x82\x71\x47\xab\xaa\xae\x7e\x37\x4d\x8d\x5d\x72" + + "\x2b\x4d\x47\x5b\xae\x19\x2f\xc2\xf5\xb5\xda\x17\x30\x1d\xd2\xad\xf5\xf5\x1c\x32\xcd\x15\xf5\xda\xaa\x82\x67\x56" + + "\xb9\x9a\x4d\xae\xea\x75\x3b\x52\x79\xbd\x76\x37\x38\x02\x92\x5f\x18\xb0\xc9\x3e\xf2\xc0\xe4\x8f\x42\x55\x3f\x43" + + "\x84\x0f\xb1\x6e\x00\xa2\xe0\xbe\x84\x1f\x1a\x92\x10\xd8\xda\x7d\x8f\xd0\xc9\x7a\x36\x03\xff\x16\xf0\x54\xb5\xc6" + + "\x28\x5c\x69\x6d\xd5\xba\x62\x3c\xcc\x13\x83\x7e\xd8\x72\x23\xe0\xbf\x4e\xd8\x1e\x3f\xc9\xa2\xec\x22\xcf\x72\x70" + + "\x71\x70\x9c\x06\x20\x5a\xf0\x87\x34\x17\xf8\xef\x04\x2b\x60\xcb\xd2\xe6\xbb\x18\x0f\x39\x7e\xb4\xa3\xfc\xdd\xeb" + + "\x57\xe7\x67\x5c\x66\xa8\x6d\xa4\xda\xba\x84\xa9\xab\x4e\x61\xea\x54\xdd\x80\xcf\x15\xda\xe1\x02\x45\xf0\x5f\x3f" + + "\xab\x72\x75\xd2\x18\x7d\xc6\x6e\xa1\x65\x5d\xaf\x1c\x6b\x82\xc3\x2b\xe4\x2c\xb8\x23\x6a\x9a\xb9\x99\xb5\x80\x5d" + + "\x81\x0e\x75\xe7\xe4\xd0\xb1\xd0\xb9\x32\x55\xbd\x3e\x5d\x90\x22\x50\x71\x70\x3e\xd6\xe4\x36\xff\x80\xe7\x4e\xf4" + + "\x44\x4d\x28\xb7\x31\xd8\xf8\x42\x59\xc8\x97\xb5\xbb\x1b\x1f\xb3\x6e\x1c\x2e\x8d\x3e\xdd\xe0\xe1\x20\xe2\x9e\x16" + + "\xfa\x53\xd2\x76\x40\x0f\xfc\xf6\xc4\x3f\xae\xaf\xe5\x46\xdd\x7b\x2a\x99\x1a\x71\xfe\x82\x6f\x1c\x38\x30\xec\x1c" + + "\x4c\x76\x0f\x54\x5b\x9f\x99\x2a\x71\x40\x42\x9f\x90\xbc\x46\x6f\x43\xef\xf7\xe7\xef\x8d\x88\x69\x02\xfd\x0a\xd1" + + "\xdb\x7d\x47\x51\xa3\x6d\xb3\xc3\x43\xc1\x97\xec\xd5\x47\x8f\x1e\xab\x63\x6f\x98\xdc\x09\xcf\x7a\x35\xaf\x2d\x69" + + "\xb4\xdc\x12\x1d\x7b\x5d\x3c\x6c\x05\xea\x96\x55\x0c\x92\x6e\xaf\xaa\xd9\xa2\xa9\xab\x7a\x6d\xcb\x2b\x14\xa6\x20" + + "\xd1\x8b\x7c\x2c\xc1\xa7\xe1\xb3\x57\xee\xba\x26\x75\x8e\x35\xed\xfb\x62\x69\xea\x75\xdb\xd1\x31\xc2\xad\xae\x84" + + "\xfe\x17\x38\x0c\x09\x78\x30\x50\x5c\x86\x4e\x47\x05\xf5\x0e\x3d\xa6\xfe\x44\xfd\xdd\x5d\xa9\x6e\x03\x78\xd1\x0f" + + "\x73\x34\x41\x47\x80\x06\xe8\x2a\xc7\x54\xf8\x7e\xce\x45\x4c\x6e\xf5\xea\x72\x40\xbe\xb7\x14\x7c\x8e\x96\x65\x01" + + "\x94\xbd\x28\x66\x0b\x8f\x43\x81\xe6\x1e\xdd\xb6\x78\x8d\x13\xdc\xfb\x14\x5d\x02\x03\xf2\x0e\x1b\xd6\x31\x16\x9f" + + "\xb0\xb6\x81\xbf\x39\x67\xb8\xeb\x7d\xf0\xc2\xab\x95\x2e\xcb\x60\x7f\x61\x84\x1e\x59\x0b\x12\xa9\x5b\xeb\x7a\x0c" + + "\x2c\xf1\x59\xb1\x82\x48\x06\x05\x2c\xac\xab\xed\x27\x32\x26\x46\x43\x3b\x88\x47\x4a\xd8\x03\x4f\x53\xac\x01\xe5" + + "\xc1\x06\x76\xfb\xa6\x66\x0b\x03\x9c\x0e\x12\xdb\xd1\x53\x3f\x3d\x47\x21\x9e\x7d\x87\xa2\xa1\x1c\x8b\xcb\xef\x44" + + "\x88\x78\x78\x49\x1a\x0e\x09\xc1\xdd\xd7\x34\xd4\x31\x26\x3f\x7c\xae\xd3\x83\x50\xc5\x95\xb0\xf9\xc6\x15\xe9\x04" + + "\xf5\x45\xbc\x14\x99\x09\x90\xda\xfa\xdd\x22\x76\x42\xcb\xca\xdd\xad\x59\x5d\x96\x86\x33\x0b\x12\xb1\x36\x8d\x95" + + "\x5c\xc8\xd1\xb1\x1a\x8e\x31\x6d\xa2\x2c\x90\x3d\x02\x93\xe9\x6d\x51\x80\xa1\xf2\x60\xbf\xf9\xd4\x28\x40\x98\xb2" + + "\x01\xf3\x8b\xa1\x26\x1f\x53\x43\x6a\x32\x3f\xbc\x51\xcc\x42\x26\x18\xd9\x4c\xbe\x2a\xc3\xfe\x6c\x45\x1c\x08\xd0" + + "\x43\x52\x48\x4a\x88\xe6\x39\xe5\x87\x59\x1f\xee\xaa\xb2\xa0\x16\x67\x02\x3d\x79\xa4\x3e\xda\x45\x51\x81\xcb\xa6" + + "\x5b\xd0\xc2\x62\x28\x04\xe4\xb7\x40\xbc\xdd\xd0\x61\x77\xdb\x39\xbe\x9f\x64\x54\x76\xe5\x53\x75\x99\xcf\x8b\xc6" + + "\x8c\x42\x48\x26\x84\x01\x53\x2c\x1a\x1e\xe1\xaa\x58\xca\xd4\x92\x75\x53\x9c\x06\xc3\x5c\xd7\xa7\x1e\x1e\xfb\xe0" + + "\xb4\x8e\xc8\x97\x46\xab\x21\x2e\xaf\x6e\x35\x21\x1a\xf5\x87\x50\xce\x2f\x9d\xc0\x22\x13\x98\x2c\x74\x95\x97\x46" + + "\x81\xa0\x31\xa5\xbc\xb8\xab\xa6\x5e\x16\x16\xae\x34\xb4\x97\xba\xf9\x1a\x43\x11\x5e\xf7\xc4\x1f\xef\xb7\x20\xa8" + + "\x88\xb6\x32\x19\xd9\x8d\x1a\xce\x75\x05\x25\xf3\x4e\x64\x77\xfa\x9a\xef\x42\x9a\x59\xef\x53\x07\x6a\xb8\xb1\x7b" + + "\xf4\x54\x7c\x17\x9e\x4a\x58\xb3\x38\xb4\xe9\x7e\xd2\x44\xb0\x43\x52\x1b\x09\xe0\xe3\x4d\x50\xa6\xc6\x5f\xee\xec" + + "\x10\x33\xe4\x96\x74\x8c\x11\x51\x5d\x7b\xd6\x64\x42\xd7\x30\x26\xc1\xd1\x67\xa0\x6d\x63\xdf\x4d\x76\xec\x03\x80" + + "\x6a\x5c\x83\x06\x6f\xbb\x13\x03\xe8\x64\x26\xe7\x5a\x30\xb0\x06\xab\xe1\x4f\x90\xdb\xb8\xb5\xfd\xa4\xd3\xbb\xbb" + + "\x4f\xe5\x5c\xd0\xba\xc1\xbb\x78\xc5\x7c\x3a\x60\x3f\x3d\xe9\x14\xa7\xf3\x14\xa5\x07\xf7\xfb\x0a\xee\xa9\x09\x01" + + "\x4b\x9e\x9b\x66\x5e\xd6\x17\xa0\x4f\xe5\x5d\xd5\x8d\x7e\xd9\x47\x55\x14\x3b\xb8\x71\xf0\x11\xc8\x07\xec\xeb\xe6" + + "\x9f\x0d\x45\x6c\x4e\xea\xfb\x5f\x63\xde\x20\x5b\x19\x7d\x66\x19\xcd\x1e\xfc\x08\x67\xb5\xbb\x99\xcb\x52\x7d\x11" + + "\x3a\xe5\x48\x35\x24\x35\xb0\x3e\xa3\xd6\xeb\x97\xdf\xec\xee\xef\xb9\xdb\x92\x02\x79\x01\x83\xca\xf1\xa4\x08\x04" + + "\xd7\xf9\x14\x01\x8f\xf8\xf9\xaf\xee\x32\xa4\xcf\xf8\xd9\x7f\x80\x62\xd3\x1a\x8f\x9c\x01\x00\xca\xde\x9b\x12\x8e" + + "\x98\xaf\xd7\xc9\xf4\x18\xb3\xc8\x8f\x46\xc9\xef\x5f\xd3\x07\xff\x21\xdd\x5c\xdf\x99\xe0\xa0\xe3\xa3\xa0\x12\x4f" + + "\x1d\x84\x0f\x12\xcb\x44\xdf\xea\xc0\x94\x81\xdb\x1e\x84\x48\x7b\xcf\x3e\x0f\xed\xb5\xd0\xe7\xe8\x76\x9c\xb7\x8b" + + "\x09\x56\xc3\xbe\x36\x30\xf4\x10\x6c\x79\xab\xa3\x5d\xe8\xf3\x7b\x63\x3b\x49\x58\x12\xd8\x3b\x72\x02\x2c\xaf\x28" + + "\x42\x13\xae\x46\x41\x68\x43\x62\x16\x19\x26\x8a\x6c\xed\x27\xc4\x94\xbb\x7d\x96\x26\x32\x8a\xc2\x88\xd5\x50\x4d" + + "\x45\x8a\x17\x4f\xdb\xe2\x3e\x1c\x1c\xb0\x67\x53\x26\x93\x22\x8a\xe1\x63\x34\x1b\xfb\xa7\xc5\xd1\xdf\x9d\xb8\xef" + + "\xc8\x49\x2a\x89\x49\x85\xd6\xe3\xad\x43\xf5\xc4\x9b\xc3\xd5\x43\xf0\x75\x4f\xef\xa4\x5c\x9d\x4f\xa3\x06\x84\xcf" + + "\x4d\xb2\x23\xbb\x25\xf7\xfb\x4b\xfe\x47\xb7\x24\x8b\x0e\x09\x15\x71\xb7\xd5\x64\x51\xe4\x86\x29\x07\xb2\x25\xc0" + + "\xf5\x08\x4a\x40\x46\x51\x8c\x8d\x58\xa1\xb6\x5a\x58\x74\x10\xd8\x83\x14\x78\x49\xe6\x7c\x1e\x34\xe5\x0a\xe8\x7e" + + "\x4c\x5e\x13\xee\xea\xc6\x3f\x7c\x5c\x10\x2c\x1e\x3e\xa4\x08\x91\x28\x8a\xc8\x31\x6a\x3e\xd8\xdb\xcd\xbe\x01\x75" + + "\x15\x5d\xc0\x32\x1d\xa6\xcf\x4d\xd5\x00\x73\xed\x6f\xf1\xd2\xb1\xd5\xc0\x60\x93\xde\xc3\xb6\x35\xa0\xf9\xc1\x8c" + + "\xd4\x0d\xba\xcf\x3a\xbe\xfb\x02\xd3\x25\x9c\xd6\xe4\x1a\xbd\x6a\xea\x99\x31\x39\x32\x51\x16\x1c\x52\x2f\x7c\x0c" + + "\xef\xaa\x31\xad\x93\xfd\x30\x89\x0a\x76\x51\xdc\x0d\xd2\x07\x0c\xfa\xfa\xf0\x61\xe8\x92\xf8\xdb\x33\x9f\x1b\x22" + + "\x33\x02\xf3\xe2\xd8\x29\xbe\x32\xe2\xec\x99\x51\xfc\x77\x14\xe2\x0b\xfc\x91\x6f\xe2\xe0\xf6\x1e\x04\x13\x44\xe4" + + "\xc2\x83\xfa\xb4\x40\x61\x9e\x55\x57\x10\xb0\x32\xe7\xf4\x1d\x6e\x3e\xad\x5a\x5b\x9c\x5f\x4c\xdf\xca\x5a\x09\x9f" + + "\xa1\x25\x82\xc3\xdc\x4e\xad\xb2\xe1\xa0\x46\x52\x65\x7a\x46\xef\x7b\x2f\x2b\x30\x84\x61\x96\xc2\x01\x34\x12\x36" + + "\x21\x22\x0d\xf0\x40\x23\xc7\x18\x3e\xbd\x6e\xd7\x77\x4a\x84\x99\xe6\x57\x63\x7c\xb2\x09\xf3\xa0\x97\x4f\x4c\xb0" + + "\x15\x88\x55\x1c\xa9\x3f\x6e\x3a\x11\x0b\x90\xde\x8e\x1c\x80\xd8\x1e\x86\x87\x63\x57\x61\xba\x5c\xab\xc6\x6e\x72" + + "\x07\xc3\x31\xbe\x18\x40\x1c\x62\xd6\x98\x73\xd3\x58\x24\xdc\x68\xd0\xc0\xcf\x86\x49\xc7\xc6\x7e\x44\xf7\xc5\x48" + + "\x02\x40\x40\x82\xbb\xc0\x3e\x3f\xc8\x0a\x4b\xe7\xa0\x68\xd8\x40\xf5\x9c\x70\xd1\xc3\x2d\x25\x55\x44\x6e\x43\xc2" + + "\xac\x7e\x4b\x15\x2c\x2a\xf8\x6c\x65\x7e\x66\x39\x85\x7e\x0f\x13\xee\x9d\xe4\x98\xa4\xd1\x8e\xe8\xb5\x97\x49\xed" + + "\x5c\x74\x3c\xba\xfe\x4d\xb7\xd5\xea\xa5\x35\x29\x8c\x06\x58\x8a\xf4\x70\x4d\xd5\x9e\x14\x52\x13\x60\x8c\xfb\xa1" + + "\x11\xb1\x2f\x23\x40\x8c\xa8\xb6\x48\x0f\x26\x59\xd2\x14\x4a\x23\x52\x52\x75\xbf\xd9\x8a\xd5\x69\xe8\xa6\x24\xd0" + + "\xc4\xae\xaf\xc5\x33\x66\x28\x85\xea\xa1\x2f\xa9\x2e\xd3\x61\xca\x1f\xa5\xaa\xba\x5e\x61\x7a\x4a\xda\x0f\xf4\x8f" + + "\xcf\xf4\xac\x34\xf2\x7c\x17\x4d\xd1\xb6\xa6\xea\x90\x0a\x69\x76\x1d\xf4\x71\x26\x9f\xce\x6e\x0c\x63\xbe\x22\xba" + + "\xe5\xf3\x94\xfb\x79\xda\x27\x13\xbb\xe9\x78\x45\xd2\x30\xc9\xc1\x10\x87\xa8\xcb\x97\xd2\xad\x0d\xfc\x8c\x31\xad" + + "\x3e\x05\x16\x90\xbf\x18\x09\xc0\x20\x0d\x78\xf1\xd1\x47\xab\xa5\x95\xb9\x5b\x89\xfc\xad\xd9\x72\x1e\x5d\xe1\xa8" + + "\x1e\x48\xef\xf0\x6a\x53\x28\x1c\x16\xc7\xad\xed\x4d\x92\x51\x8b\x51\xe8\x50\xc2\x0b\x74\xb0\x48\x52\x9f\xd7\x94" + + "\x1b\xf0\x4d\xc0\x0b\xc1\xc8\xf4\x57\x1c\x0a\xee\xc5\xb1\x4b\xa4\x51\x72\x85\xdc\x2d\x29\x02\x73\xb6\xb6\xa8\x8a" + + "\xbe\x58\xcc\x98\x19\x91\xbd\xa7\x7a\xef\x08\x87\x4b\xa4\x6e\x08\x57\xc3\xc5\xe8\x8f\x58\x13\x31\xa5\x58\x2c\x02" + + "\x83\x4d\xfb\x53\xc9\x98\x3a\x44\x6f\x68\xd5\x3f\xd7\x45\x6b\xd4\x67\xe4\xea\x4c\x2e\x50\x17\x75\xd5\xfa\x03\x62" + + "\xd4\x99\xb9\x12\x49\x24\x30\x57\xb7\x77\x4c\xd1\xa5\xad\xd5\x2e\x64\x93\x74\x53\xff\x39\x8c\xfa\x73\xe2\x7c\x4e" + + "\x00\xc8\x92\x84\xb3\x0b\x13\xa0\x54\x19\xe7\x3c\x73\x9d\xca\x04\x3d\xf5\xfb\x2b\x89\xdc\x66\xa2\xd5\xd9\x7f\x81" + + "\xf0\x6c\x5a\x5b\xb9\x0e\x8e\xa7\x8d\x77\x5f\x28\x8e\x9b\xa7\x87\xc8\xc8\xbb\xa8\x77\xef\xc6\x1f\xf7\x6a\xb6\xbc" + + "\xca\x5c\x5e\x07\x68\x81\x18\x25\x28\xe4\xc1\xe7\x8a\x54\x4c\xc0\x3c\xde\xa6\x09\xec\x31\x2f\x93\x3a\x00\xd5\x4b" + + "\x66\x6e\x9a\x46\x7a\x04\xbe\xa0\x27\x83\x21\x4b\x13\x5d\xed\x0b\x28\x42\xaa\xcf\x5b\xc4\xf0\xc5\x0b\x96\x52\xd1" + + "\x4d\x59\x60\xf4\xc9\xba\xe5\x76\x6b\x8b\xd9\xd9\xd8\x7b\xa3\xde\xa0\x8a\xcb\x3d\xec\xd3\xf1\x90\x09\x14\xf9\xe3" + + "\xd4\xdf\x0b\xd4\x5a\xe2\x8e\x44\xb4\x68\x14\x26\xdf\x17\x40\x72\x50\xef\x7f\x7d\x1d\x5b\x14\x46\x5c\xcd\x52\x17" + + "\x15\x52\x84\x08\xbd\xd8\x4f\x18\x5e\x44\x50\xd7\x8e\x78\xea\xfd\x1f\x77\xa3\xe6\x44\x12\x34\xdd\xcc\x16\xba\x98" + + "\xa9\x59\xa3\xed\x02\x30\x0f\x30\xbb\xbd\x2e\x9d\xec\xb5\xb6\x9c\x53\x6d\x1f\xc0\x91\xf7\xc6\x4f\x18\x17\x79\xf0" + + "\x60\xff\xf1\x97\xdf\xfc\x85\xec\x6a\xad\x59\xae\x20\x01\x1f\x77\x74\xd2\xd7\x0b\xf7\x29\x5b\xe6\xc9\xa3\xf4\x00" + + "\x6a\x76\x9f\x73\x80\x40\xb4\x35\xfa\x36\xc7\x18\xae\x5e\x9b\x38\xfb\xf7\x2b\x8c\x55\x47\x63\xbc\xb5\x95\x56\x14" + + "\x74\xc5\xcd\x5a\xfa\xba\xc6\xb6\x24\xde\x7c\xe3\xaa\x6e\x8b\xf9\xd5\x2f\x45\xbb\xe0\x23\x70\x14\xa9\x97\xd9\xcf" + + "\x34\xcc\xc5\x71\xcc\xb2\x70\x03\x7f\x45\x85\x53\xaa\xef\xf2\x11\xe5\xf4\x79\x9f\xd7\x91\xef\x0c\xe5\x89\xdc\xd0" + + "\x9b\xc0\x9a\x6d\xda\x89\x37\x5e\x37\xac\x49\xbb\xef\xab\x26\x2d\xec\x80\x6e\xa4\xd2\x2c\x11\x0e\x75\x14\x6e\x0f" + + "\x0f\x1d\xc6\x59\x87\xfe\xb8\x91\x04\x81\xf7\x99\x93\xb5\x3b\x45\x31\x22\xf9\x8f\xf8\x12\x9d\x3a\x6e\xff\x46\x10" + + "\x92\x10\xa5\xee\x64\xa1\x1f\x7d\xd5\x53\x49\x77\xa2\x32\x6f\xf1\xd3\xa9\xf7\x3d\x27\x05\x00\x1d\x8f\xe9\xad\x27" + + "\x8d\x77\xaa\xff\xda\xef\xdd\x51\x60\x5d\xed\xd4\x27\xfd\x17\x2c\xec\xb4\xe3\xd7\xe2\x58\x47\x01\x83\x11\xdc\x5a" + + "\xa4\xc3\xbd\xcf\xfd\xe0\x37\xa5\x9b\x2d\xe9\x30\x4f\xe4\x7e\x2b\x2e\x31\x4e\x08\x78\x90\x44\x93\x72\xc2\xd7\xbf" + + "\x6f\xf3\x43\x8a\xfd\xc4\x5b\xaf\x6b\xe4\xe0\xdc\x42\x8e\xc0\xc9\x81\x9e\xd6\x6d\xfd\x32\x1d\x66\x7a\x82\x83\x65" + + "\x2f\xd2\x11\x00\x46\x5c\x05\x36\x63\x84\xb8\x6e\x6b\x30\xb5\xea\xb2\x0c\x1e\x1c\x36\x54\x11\xb0\x2c\x2e\x0c\xda" + + "\xfe\xd0\x3a\xa3\x1b\xf2\xbc\x08\xa4\x82\xbb\x75\xb8\x89\x68\x08\x2e\xbc\x9f\x70\xa7\xfe\xcb\x21\x0d\x13\x17\x8d" + + "\xd4\x0a\x9f\x4e\x7c\xee\xa2\x3e\xfb\xdd\xb8\x22\xc8\xad\x00\xc7\x1c\xb5\xbc\x17\xe0\xca\x79\x45\x78\xaf\xa5\xb6" + + "\xad\xf2\xc9\xc2\xe3\x99\x72\x44\xc8\xe3\x4a\xe0\x48\x3b\x2b\xf6\xa9\xb4\x64\xe4\x3f\x0d\x44\x25\xd1\xa6\x88\x9a" + + "\x5c\xab\x7f\xa6\xa2\x78\xdf\xf9\x49\xbf\x11\x37\x2f\x32\x4a\xf2\x1e\x80\x27\x48\x5a\x7b\x84\x8b\xdb\xce\x0b\x0b" + + "\x91\x9f\xba\x6e\xde\xef\xb8\x87\x43\xb9\xc5\xd4\x18\x19\xfd\xe2\xfe\x48\xd3\x14\xd5\x9e\xc4\x37\x49\x2f\x62\xaf" + + "\xcc\x21\xd2\xb1\xd4\x2b\x3f\x4e\x41\x83\x22\x33\xae\x08\x38\xf4\xe2\xc6\x2b\x7f\x72\xd3\xd9\xa1\x00\x05\x36\x38" + + "\xf7\xbc\xa5\xe1\x25\xe4\x4a\x66\xc3\x0b\x9e\x8d\xe0\xb8\x08\x91\x19\x29\xd5\x2f\x66\x67\x9c\x93\x2e\xbd\x52\x5c" + + "\x9d\x53\x31\x7d\xf0\x90\x0c\x83\x49\x87\xe0\x29\xee\x8d\xed\x7b\x5b\xc1\x9a\xa8\xdb\x56\xcf\x16\x3e\xbd\x8e\x65" + + "\x58\x40\x06\xf0\x61\xe3\xb8\xdc\x42\xa7\x0d\xa8\x9d\x92\x16\xf8\x85\x02\x06\x07\x55\x2e\x69\x19\xf7\xb0\xb3\xcf" + + "\xbc\x55\x0d\x3f\x9c\xeb\xa2\xec\x7c\xe8\x1e\xd2\x7b\x66\x5b\x93\x12\x84\x73\x38\x4c\x50\x1e\x9f\x89\x8b\x3a\x99" + + "\xd9\x67\x61\xdb\xa1\x62\x97\x6c\xf0\xe9\xbd\x24\xd2\x2b\x45\x7a\xbf\x9e\x3d\x92\x8a\x26\xfe\x3b\x92\x3f\x9f\x06" + + "\x4e\x00\xb3\xc4\x3c\xca\x58\x4c\x94\x84\x81\x0b\xc0\xbf\x22\x8e\x57\x0a\x94\xde\xce\x8d\x6c\x52\x7c\x83\x78\xba" + + "\x8e\x35\x44\x7c\xdf\x27\x53\x5e\x11\x48\x96\xc8\xb4\x5b\x1d\x77\x86\x83\x0d\x1e\x0e\xfd\xc5\xc7\xeb\xca\x2e\x8a" + + "\x79\x3b\x10\x13\x1b\x8e\xed\x88\xe8\x13\x91\x0b\xb9\x1c\x21\xcd\xd5\xaa\x81\x04\xc5\xd1\x82\x24\xcf\xfa\x7c\x6f" + + "\x37\xb7\x9c\xaa\x1d\xd3\x0f\xf1\xd6\xef\xeb\x6f\x1a\x3e\x6c\x57\x06\x6e\x3b\x11\xb4\xe9\x9e\x04\xbd\xcc\x5c\xba" + + "\x8c\xd4\xab\x16\x15\x23\x26\x07\xc7\x70\x8a\xe6\xc4\x3a\x0e\x0e\x54\x86\x40\x47\x99\x3a\xec\x63\x1d\xb1\xdc\x50" + + "\x51\x44\x0f\x1f\xa5\xa9\x6b\xe3\xfa\x5a\xdd\x9f\x57\x80\x8a\xc1\x41\x7f\xdb\x41\xf7\x1a\xed\x5b\xae\xe6\xe1\x43" + + "\xea\x2b\x08\x8f\x9e\xb5\x0b\xcf\x0c\x31\x9d\x49\xbd\xfc\x97\x00\x39\x93\xd5\xfb\x28\x4c\xff\x4d\x88\xef\xae\x57" + + "\x6d\x10\x77\x0e\x44\x20\x45\x3d\x9f\x53\x74\x08\xcd\x49\x5c\x52\x62\xab\x1d\xc6\xef\xc0\xcb\x2d\x7a\x52\x54\x32" + + "\x42\xc3\x8d\xc6\x86\xf9\xf4\x8f\x8e\xe2\x6a\x8e\x03\xd0\xaf\x2f\xe2\x63\xb8\x3c\x01\x0d\x40\x98\xee\x63\x74\xb9" + + "\xd8\x05\x4e\x27\x24\x0d\x98\x80\xe3\xc4\xee\xdf\xc0\x60\x2f\x8c\x80\x54\x5c\xe0\xd7\xc9\x87\x04\x4c\x43\xbb\x59" + + "\xbc\x81\x6a\x22\xab\xdb\xbf\xb9\x17\x38\xad\xae\x1c\xa6\x79\x73\x7f\xf1\x86\x08\x73\xed\xa9\x6d\x57\x24\xdf\x44" + + "\xd5\xb8\xca\x40\xd7\xe8\x89\x88\xa8\xeb\x09\x9e\x0b\x3d\x8e\xb5\xfe\xe3\xdc\x90\x17\x03\x46\x4a\x8b\x72\x69\xf0" + + "\x3f\x67\x53\x5a\x85\x5c\x6b\xbd\x31\xfa\x73\x9d\x9b\xf7\xf5\xb4\x7b\xe4\xda\x3a\x1c\xbb\x98\x88\x6f\x93\x61\x04" + + "\x0d\x72\x57\xac\xcd\xf6\x66\x73\x3d\x6f\x4d\x13\x70\x51\xc9\x93\xac\xad\x11\x79\x44\x46\x47\xb3\xc3\x12\x3b\xf8" + + "\xa8\x21\x9a\x8e\x3d\x0c\xec\xc8\x89\xff\x64\xe3\x08\x3a\x38\x01\x73\x11\x40\xce\x3c\xce\x1c\x94\x1a\xbb\xf1\x0d" + + "\xc7\x54\x72\xf0\x87\xf2\x38\xc1\x6d\xad\xf8\xf4\xf7\x0d\xd0\xc7\x74\xd0\xa7\x5d\x51\x6b\xe3\xa7\x22\x5e\x15\x02" + + "\xc0\x0e\x54\xbf\x21\x0c\x4d\x75\x5e\x5c\x75\x32\x88\x2f\x0a\x95\x77\xc8\x5e\x68\x83\x44\xc7\x5a\x5e\xce\xbd\xf9" + + "\x56\xdf\xae\xd0\x73\x13\xe0\x60\x67\xf5\x0a\x20\xb3\xa1\x65\x5b\xab\x95\x69\x76\xbd\xab\x04\x91\x18\x54\xc5\x9c" + + "\x18\x55\xd6\xb6\x0d\x02\x16\xb9\x72\x09\x55\x1c\x6e\xbd\x0d\xc2\xb8\x1a\xc2\xae\xd4\x94\x42\xd9\x77\x07\x43\xe2" + + "\x82\xbb\x05\xb8\x38\xcf\x8b\xaa\xb0\xe0\xbd\x42\xe2\x80\x55\xc5\x72\x69\xf2\x42\xb7\x86\xfd\xba\xd1\x7d\x06\xbe" + + "\xbe\xbe\x4e\x3d\xbd\xb0\x2b\x19\xd6\x93\x45\x8a\x4d\x30\x5e\x81\x59\x4e\xe0\x09\x24\xfe\x4e\x72\x1e\xc7\x58\x09" + + "\xa4\x7a\xf7\x0f\xe3\x28\x68\xdf\x0b\x1c\xa0\xa0\x36\xe8\x4a\x86\xbe\x17\x21\xec\x5f\xd6\xe4\x23\xa3\xe1\x35\x1d" + + "\x62\x59\xcf\x28\x2e\x1d\x42\x8b\x12\x29\x18\xdd\x69\x01\x0c\xf2\xdf\xf0\xbb\x44\xca\x42\x64\x8c\x7a\xf5\x6f\x44" + + "\xf1\xc2\xa7\xa9\x2a\x1c\xcb\x05\x84\xc5\x96\xc2\xde\x59\x27\x99\x3e\xc6\xd9\xf4\xcd\x21\xc5\x89\x22\x8a\xf1\xb6" + + "\x01\x77\xdd\xfb\x12\x57\x85\xdb\xe4\x6f\x0f\xc4\x00\xb0\xee\xf0\x5b\x38\x99\x7a\x20\xd4\xae\xb9\x99\x7c\x51\xc2" + + "\x57\xc4\x00\x40\xbb\xb8\x1c\x51\x34\x33\x93\x4d\x57\xe4\xfa\x1a\xae\x81\x11\xe7\xbe\xfc\x13\xc0\x0d\x90\x89\xc2" + + "\xf0\x65\xe2\x61\xa5\x03\x17\x49\x7d\xe0\x80\x5e\xfc\xbd\xa3\xb2\xe0\x33\xc8\xb8\x4c\x20\xb6\x08\xbb\x06\xfe\xa6" + + "\x97\x6e\x9f\x77\x1d\x1b\xfd\x6d\x11\xf4\x7b\x64\x2b\x8a\x34\xfe\xee\xab\x38\xff\x82\x7c\x00\x0b\x2a\x0e\x8a\xdf" + + "\x2b\xe9\x87\xc9\x89\x89\xc4\xef\xc4\xee\x00\xdd\x0d\x55\x7e\x72\x2f\x1e\x3e\x54\x4d\xb3\x66\x6c\x1a\x1e\x8b\x40" + + "\x11\xbb\xb3\x73\x2c\xcd\x7b\xd3\xc3\x76\x6a\x16\x39\xc0\xc8\x36\xcf\xca\xe3\xe3\xdd\xdd\xa7\xc9\xac\x61\xa9\xd0" + + "\x41\x44\x88\x38\x40\x2f\x56\x70\xd6\x23\x64\x5a\xcf\x71\xa4\x5f\x08\xee\xe3\x6a\x65\xe4\x38\xd2\x92\x82\x38\xc5" + + "\xc7\x09\x0e\x1f\x6f\x2f\xa1\x3f\xe5\x2a\x40\xa2\x99\xb1\x8d\x70\x14\x6b\x70\xe2\xd0\x0d\x94\xb2\x31\x03\xed\x65" + + "\xcb\x56\x08\xac\x9b\xe2\xad\x41\x9d\x03\xce\xee\x17\x1a\x72\x81\x21\xb6\x20\xd7\x40\x3b\x34\x38\xa2\x81\xcf\xe6" + + "\x8c\x74\x66\x45\x13\x9c\x3a\xbd\x0c\xcc\xe9\xb3\xa0\x24\x8d\x84\xab\x3b\x59\xb7\x98\xed\x1a\x5b\xbf\x52\x17\x06" + + "\x54\x74\x30\xfe\xb0\xa3\x79\xfc\x8e\x07\xef\x28\x90\xfa\xd9\x20\x58\x98\x1e\xdc\x13\x80\x1b\x03\xb2\x9e\x52\xd0" + + "\x0e\x0c\x4c\x1f\xdd\x08\xa0\xd4\x4c\x32\x7a\x21\x07\x6e\x21\x15\xb8\x4a\x77\x1f\x69\x2a\xc2\x0b\x8f\x5b\x3d\x22" + + "\x1d\x99\x22\x2d\xb0\x37\x87\xf6\x14\x42\xfa\xe2\x4b\xde\x4a\x61\xbc\x9c\x8b\x8d\x1e\xe2\xbf\xb1\xca\x92\x57\x0e" + + "\xdd\x5c\xc4\x75\x3d\x2f\xf5\xa9\x02\x33\x7b\x71\xee\x98\x0c\xd7\x17\xbc\x39\x74\xab\xc3\x4d\x4a\x4a\x4b\x5f\x0d" + + "\xdc\x9f\x61\x17\xce\x8b\x86\x38\x8d\xd8\x43\x37\x2c\xea\x48\xa4\x27\xde\x80\x2b\x11\x11\xb3\xf0\x4c\xf0\xd7\xa3" + + "\x88\x01\x10\x27\xa4\xe4\x00\x78\xc7\xc4\x52\xc2\x25\xc9\xa1\x00\x5c\x01\x8e\xc5\xc3\x36\xfe\x8f\x50\x96\xdb\x09" + + "\xc9\xa7\xd1\x91\x88\xc9\xf9\xf3\xd4\x22\x9e\x8b\xe0\x15\x4b\x64\xc3\xc9\x30\xd8\xab\xbb\x27\xe5\xee\xfc\x29\x34" + + "\x2f\x50\x61\x74\x45\xc4\x4f\x78\x23\x85\xf1\xf7\xbe\xef\x8a\x52\x3d\xe3\x43\x61\x68\x3e\x4f\x36\xb1\x64\x77\xc4" + + "\xde\x8d\xdd\x33\xfb\x91\x49\xc9\x19\x72\x44\x9e\x83\x23\x76\x7b\xbc\x05\xa0\x14\x2c\xb1\xd6\xbe\x92\xd2\x7a\x25" + + "\xfd\x18\x3a\x0f\x6f\xd3\x85\xa4\x82\x07\x43\x55\x91\xfe\x23\x5c\x53\x1d\xbd\x88\x47\xb9\x42\x8e\x15\xba\xc4\xd9" + + "\xc1\xf1\xc4\x78\x38\xaf\x98\x6f\x65\x71\x8a\x63\xbb\xd0\x69\x06\xb7\xde\x5d\x32\x55\x84\x32\xe9\x03\xcb\x38\xa1" + + "\x32\xa6\x8a\x99\xad\x6d\x5b\x2f\xc5\xfe\xeb\x82\x16\xda\xb2\xc8\xcd\x8b\xfa\xa2\x9a\x52\x27\x70\xfa\x81\x84\xc2" + + "\xbb\x9f\x57\xfe\x0d\x2c\x48\x78\xf3\x9e\x20\xc1\xe8\x2d\x2d\x20\xbc\x77\x52\xf0\xeb\x6a\xaa\x84\x9c\x48\x0e\xa1" + + "\x37\xfc\xfa\xed\xba\x8d\xdf\xe3\x72\xfb\xf7\x5c\xbb\x2c\x42\x4d\xa8\x9b\x04\x3e\x11\xe7\x4d\x7a\x03\xfd\x77\xac" + + "\x7c\xbc\x44\xc1\xed\xe9\x93\x16\x25\xba\x23\x20\x99\xda\x53\x09\x1f\xd0\xef\x8a\x00\x86\x46\xf7\x45\x12\xc2\xd7" + + "\x7f\xf3\x90\x19\xa4\x27\xe8\xb0\x9b\x8d\x37\xa5\xac\x81\x78\xc0\x1b\x4f\x7b\x43\x5c\x1c\x67\xa2\xb0\x68\xd0\x83" + + "\x52\x0b\x8d\xe9\x10\xd9\x0f\x07\x92\x85\xa1\x87\x62\xee\xaf\xff\xfb\x68\x40\x18\x46\x94\x18\x10\x75\xa8\x91\xc0" + + "\x11\x24\x54\x75\x77\x37\xd0\xd4\xd4\x07\x36\x1a\x40\x82\xb6\x08\x70\x0c\xf5\x6a\xc0\x04\xa6\x37\x58\x33\x81\x82" + + "\x18\xf3\xb8\x05\x23\x23\x3a\x17\x4d\x34\xdb\x59\xf1\xfd\x53\xee\x13\x8f\xb3\xa7\x33\xba\x69\xa9\x37\x82\xcd\x4f" + + "\xea\x14\x1d\x4e\xfb\x56\x54\xad\x69\x10\xe7\x7a\xff\x8b\xe4\x1d\x7b\x2d\x26\x5b\x47\xcc\xd2\xeb\x3c\x5a\xdb\xd7" + + "\x39\xc2\x4d\xbe\xa6\x4a\x25\x44\x0c\x9a\x74\x7a\x1a\xde\xd4\x33\x92\x70\x93\xc6\x41\x6e\x0c\xf5\xfb\x5e\xb8\x4a" + + "\x42\x1f\x1c\x01\xed\x59\x08\x52\x82\x12\x8a\x49\x59\x5f\x4c\xd5\x57\x7b\x7b\x48\x06\x6c\x3b\x55\x8f\xf1\xc7\x64" + + "\xa2\x5e\x50\x80\x07\x7c\x11\x81\x48\x7d\xb9\xb7\xc7\x15\x13\x92\x87\x35\x39\xdc\x4f\x94\xd0\x6c\x55\xae\x4f\x0b" + + "\xc8\xb7\xf7\xbc\x2c\xaa\x56\x7d\x67\xca\xb9\x63\xde\xd0\xcb\x7d\x65\x9a\x65\x61\x6d\x51\x57\x63\xf8\x7c\xd1\xb6" + + "\xab\xe9\x64\x72\x52\x16\x55\x6e\x8b\xd3\x4a\x97\x60\x1b\x9a\xc0\x45\x39\x5e\x2d\x56\x93\xc7\x7b\x7b\xdf\x4c\xf6" + + "\xfe\x32\xf9\xf8\x4f\x37\x8c\xdd\xdc\x94\xfa\x6a\x22\x55\x82\xf0\xa4\xb3\xbd\x46\x92\x03\x69\x0b\xe9\xb0\x38\xbf" + + "\xec\xd5\x03\x43\xa1\x63\x16\x8f\xd4\x14\xfe\x81\x79\xed\x65\xa7\x83\xa6\x32\x15\xd3\x23\x7a\x69\x2e\xdb\x51\xac" + + "\xbf\x60\xd2\x53\xaf\x09\x9d\x94\x03\xa1\xa9\x30\xb4\x8e\x47\x53\x70\x8a\x3d\xca\x32\xd8\x0b\xfe\x63\xae\x32\x68" + + "\x37\x90\x0f\xe0\xb5\x4a\xf9\x7c\xe4\xf2\x57\xd0\x89\xbc\x9e\xc1\xa5\x49\x28\x22\x2f\x51\x1f\x3a\x50\x19\x14\xe0" + + "\x4c\x99\xe8\xfd\x75\x5b\x71\x2c\xc1\xe5\xc9\xca\x01\xcf\xdc\x25\x6d\xaa\xfc\xf9\xa2\x28\xf3\xc1\xe6\x0a\xd0\x06" + + "\x99\x85\x24\x05\xd0\x81\x31\x67\x95\x81\x08\x9e\x28\xdd\xaf\x47\x06\x2a\xde\xbe\x53\x4f\xc6\xfb\x23\x8f\xfe\xfc" + + "\xe5\xf8\x72\x14\x43\x41\x87\x94\x3f\x32\x69\x22\xd7\x39\x69\x74\x5e\xd4\xa4\x92\x1d\x64\x99\x93\x12\x1c\xf3\x88" + + "\xe0\xcd\x4f\x55\xe6\xfa\xe5\x48\x0c\xe0\x41\x0d\xdd\x09\xe2\xfc\x26\xae\x86\xb7\x90\x9c\x10\x7a\x1b\x20\x4c\xb3" + + "\xd0\xd1\x37\x80\xfc\x00\xce\xfb\x8c\x18\x46\xc9\x2b\x97\xfa\x0c\x5d\x94\x61\xec\x34\x5f\xe4\xb8\x03\xba\xc4\x04" + + "\x00\x69\xa4\x5e\xbf\xdc\xdf\x13\xed\xd7\xab\xf6\x1d\x7c\x64\xd8\x02\x60\xe9\x67\x68\x3d\x0e\xbd\x03\xc6\x78\xc5" + + "\x7c\xb2\x2d\x72\x48\x4f\xe8\x44\x25\xf6\xf1\xf3\x69\x78\x96\xba\x39\x43\x74\x31\x2e\x81\x35\x0e\x08\xd4\xda\xbd" + + "\x87\x11\x2d\x65\x19\x98\x1e\x5c\x78\x5f\x71\x70\x05\x11\x1d\x7f\x11\xde\xde\x07\x43\x0c\xfd\xf6\x3d\xf7\x39\x9a" + + "\x74\x45\xdb\x75\xa9\x8b\xaa\xd5\x85\xeb\x7a\x6b\x69\xbd\x50\x71\x7f\x62\x66\xf5\x92\x30\x15\xdc\x62\xde\x32\x77" + + "\x9f\xbc\xf3\x9f\xfa\x4d\xc8\x1e\xb8\x19\x66\x9a\x89\x77\x26\xb4\x97\xc9\xc1\xc1\x93\x7f\xa7\x6f\xa2\x1a\x0e\xb8" + + "\x8e\x9b\xe1\x80\xd1\x4d\xdd\x69\xac\xea\x1c\x04\xe1\x91\x72\x6c\x2e\xfc\xb5\x7d\x0f\xa2\xda\xbf\xc3\xf0\x5f\x61" + + "\xcd\x5e\x35\xe3\xf0\x62\xb3\x8d\xc4\x95\xf9\x57\x80\x8c\xa9\x32\xf7\xf9\x9f\x82\xcb\x05\xa2\xe8\x98\x94\x67\x3d" + + "\x0d\xf7\x31\x7d\xfd\x1a\x08\x6a\x3e\x54\xc5\xfd\x92\x38\xbe\x1b\x84\x9c\xcd\x83\xdf\x88\xc9\xec\xa1\x45\x47\x90" + + "\x74\x0d\xba\x50\x61\xbc\x6b\x1c\xff\x1a\x82\x94\xd0\x57\xf6\xd4\xb4\x13\x6b\x5a\x19\x9b\x4a\xf9\xe6\x46\x3e\xd9" + + "\x1c\xa0\xbd\xf8\x00\xd4\x0d\xa9\xe7\xaa\x38\xe5\x5c\x15\xa7\x9a\x0b\x3f\x1f\x27\xee\x2f\x49\xc4\xcf\x2b\x01\x51" + + "\x08\x36\x0d\xf0\x84\x12\xbd\xd3\x8d\x01\xb6\x92\x36\xa9\xe0\x25\x49\xd6\x82\xe1\x9e\x9a\xf6\x99\xef\xb1\x6b\xd6" + + "\xb6\x4d\x37\x74\x2c\x86\x8f\x77\xcd\xf5\x4e\x71\xd2\xc5\x67\x65\x99\x76\xa8\xac\x2f\x4c\x33\xd3\xd6\x50\x91\xbf" + + "\x37\xfa\x24\xe4\x26\x47\xb4\xbf\x62\xae\xea\x0a\xe3\xee\x7c\x4e\x76\xec\x38\x4e\x0e\x22\xc3\x5c\x5f\x0b\x53\xf4" + + "\xaf\x6f\xbe\x7f\x51\xcf\x3a\x99\x6b\x29\x78\x01\x80\xb0\xdb\xfa\x7b\xd7\x36\x04\x2f\x0c\x45\xa4\x7a\x38\x69\x70" + + "\xc8\x92\x1c\x36\x28\xa8\x0f\xa2\xc3\x08\x5e\xd3\x63\x77\x6e\x49\x25\x4c\x1b\xfe\xd0\x9f\x65\x35\xf5\x07\xbc\xc7" + + "\x6e\xba\x31\xc7\x5c\xd0\x1f\x05\xea\x11\x85\xe4\xf7\x1d\x96\x04\xf4\x5a\xaa\xc1\x93\x78\x03\x7b\x6b\xa2\xa7\x6e" + + "\xea\x2a\xac\xf3\xd3\xf2\x3c\xf5\x68\xdf\x11\x38\x41\x6c\xaf\x98\x24\xed\x08\x34\xca\x08\x10\x3c\xd2\x80\xf5\x8f" + + "\xe4\x93\x53\x56\xc9\x21\x44\x33\xd9\xe9\x7c\xd4\x77\xac\x8d\xa9\x6c\x51\xe5\xb0\x37\xfa\xe7\x1a\x92\xac\x57\xbb" + + "\x90\x04\x08\x68\x40\xd8\xf0\x8c\x47\x0d\xc8\x9a\x17\x46\xb8\x12\xb4\x75\x98\xd1\xa4\x3f\x5e\x29\x42\xd8\x3f\x61" + + "\xe6\xa7\x7e\xae\x52\x5f\x9a\x7e\x3a\x2c\x16\x53\x52\xbf\x20\xd6\xff\xe0\x73\x7a\x88\x34\x06\xae\xff\x3f\x40\x3e" + + "\x51\xce\xb1\xc7\x39\xdc\x70\xe3\x0f\x54\x53\xd5\xed\xc5\xa2\x68\xc3\x24\xc0\xf2\x84\x0f\x39\x4f\x4b\x02\x25\xc0" + + "\x73\xcf\x98\x50\x03\x3a\x9e\xfe\xc3\xa3\x62\x67\xe7\x58\x58\x24\xb8\x8f\x61\x2d\xd0\xa9\xf1\x52\x26\x99\x72\x7f" + + "\x49\x1b\xee\xb7\xa8\x36\x92\xeb\x70\x6a\x5a\x76\xaa\x56\xad\xbb\xfb\x81\x58\x0f\x1e\xec\xef\x7d\xfd\x97\xbd\xa1" + + "\xd0\xf5\x7d\xca\x29\x0f\x7a\x3e\x8a\xea\x87\x80\x17\xbb\xaa\x2b\x48\x1e\x2c\x63\xfb\x41\x53\x4f\x85\x11\xec\xd1" + + "\x8f\xe8\x38\xb1\x9c\x78\xd7\x56\x98\xb8\xb0\x9e\xe2\xe0\x74\xd3\x4e\xe3\xe2\x7b\xb2\x45\x3e\x42\x8e\xba\x73\xa2" + + "\xe1\xcd\x89\x66\xd2\xf8\x9b\x1e\x56\x26\xce\xdd\x87\x5c\x4f\xc0\xcf\xf3\x9a\x11\x8c\x8c\xf3\xb1\x94\xcc\x4c\x75" + + "\x26\xca\x27\x9d\x05\x3e\x0a\x2c\xfe\xc8\x86\x9f\xac\xdb\xd6\xfd\x04\xbe\x2e\xb8\x4a\x34\xc6\x1a\x84\x75\x65\x94" + + "\xa3\x4a\xbd\x7e\xf9\xd5\xee\x37\xa1\x56\xcc\x1b\x8f\x6f\x31\xa1\x21\xb0\xf9\x45\xa5\xdc\x15\x83\x0d\x15\x16\x20" + + "\x1e\xb0\x76\x2c\x9a\xaf\x21\xa6\x18\xd8\x40\x8f\xc0\xc5\x19\xe1\x98\x0f\x10\xb4\xa8\x97\x96\x65\xae\xf6\x2c\xbe" + + "\xfa\x04\xf9\x96\xf6\xc1\x50\x1f\x9e\xa9\xc4\x2a\xd8\x43\xfd\x3a\xa9\x95\xa5\x5a\xf2\x3b\x9f\xb4\xfa\xa4\xb3\xd7" + + "\xb7\xef\xf9\x3b\xa8\x17\xc0\xb4\x87\xc0\x0b\x1b\x53\x58\xee\xd8\xc8\x04\x53\xbd\x84\x88\xaf\xee\xe9\x02\xbe\x83" + + "\x50\x34\xc2\x8e\xbf\xfb\xa6\x4a\x68\xee\xc6\xeb\x42\x7e\x20\x58\x4a\x3a\xf7\xac\x4e\x91\x1a\xd8\x4d\xe7\xd8\xd6" + + "\xeb\x66\xe6\xc9\xd8\xe4\xc3\xc5\xce\xe4\x54\x0d\x6f\xd7\x84\x9f\x42\x56\x4d\xa2\x52\xc8\x82\xf7\xa4\xb8\xf3\x77" + + "\xc4\xd3\x70\x24\xe3\xb2\x07\x1b\x98\x53\xe0\x5d\x24\x79\x86\x54\xc0\x0b\xe6\xf5\xf9\x78\x46\xc5\x80\xb7\x82\x4c" + + "\xf1\x20\x28\xcd\x8b\xca\x11\x63\x00\xed\x4b\x52\x04\xc1\xf4\x7b\xc8\x1b\x1f\xb2\xe6\x53\x2d\xe2\xe8\x90\x19\x62" + + "\xb9\xa3\xdb\xf9\xa7\xfe\x62\xe8\x0c\xca\x67\x79\xc4\x2b\x13\xeb\xeb\x1f\xe1\xfd\xf8\x5e\xeb\x32\x65\x7c\xc1\x91" + + "\x46\x6b\x53\x93\x62\x6e\xe4\x7e\xa0\x9e\x08\x65\x71\x90\xb6\x9a\x79\x3d\x5b\x83\xb0\xc9\x60\xb1\x40\xa5\xae\x51" + + "\x6c\xbd\x76\x4c\xbc\x6e\x8c\xbe\x46\x4a\x34\xfc\x6c\x52\x6c\x16\xb3\x1c\x09\xff\x2f\x88\x59\xe8\x9d\xf5\xaf\x88" + + "\x59\x3f\xf6\x34\xfc\xe9\x62\x16\x47\xf0\x2d\x0a\x7b\x74\xc7\x6d\x9a\x02\x7f\x6c\x14\xba\xe8\x7b\xce\xcf\x3e\xaf" + + "\x9b\x6c\xaa\xb2\x45\xbb\x2c\x5f\xd5\x0d\x7a\x90\x64\xb3\x52\x5b\x0b\x69\xc2\xdd\x1f\x3f\x50\x4c\xa8\xf7\x01\x8e" + + "\x87\x74\xab\xd4\x86\x07\x03\x45\xb7\xaa\x6e\x2f\x97\xe5\xbf\x20\xbd\x89\x50\xac\xff\x73\xd2\x1b\xf6\xde\x09\x26" + + "\x9f\x26\xcf\x48\x2e\x8b\xbe\x15\x94\xe0\x55\x71\x89\xcb\x46\xfd\xd7\xb3\x05\x4e\x93\x14\x81\xee\xe4\x9f\xba\xe2" + + "\x90\xc8\x5a\xd1\x4d\x01\x79\x67\xb2\xec\x34\x27\xc7\x7f\x93\xf4\x71\xe8\x79\x60\xa6\x16\xf8\x59\x1a\xb5\xed\x27" + + "\x2d\xe5\xeb\xe3\x4e\xfd\xeb\x82\x44\xb7\x23\xb2\x1b\x5d\x67\x77\x9a\x4b\xe6\xd1\xf4\x09\x64\xfd\x67\x3e\xad\x27" + + "\xeb\x63\x47\xd0\x82\xfd\xbd\xd0\x36\xe2\x41\xf4\x09\x68\xcf\x09\x2a\x29\xd0\x39\xe2\x59\x53\xf0\x02\x4e\x71\xbf" + + "\x68\xcc\xdc\x83\x8b\xc2\x13\xee\x91\x87\x10\xdd\xdd\x4f\xd9\xcd\xde\x04\x7c\xaf\x5f\x7e\xb3\x83\x4f\x48\x0f\x59" + + "\x19\x6b\xc9\x46\xcf\x6a\xce\xa2\xa2\x1f\xa7\x4d\xbd\x5e\x71\x46\xeb\xa2\xd2\xb3\xd9\xba\xd1\xad\xd9\xbe\x17\xf3" + + "\xa0\x52\xc9\x19\x19\x8e\x04\x50\x7b\x50\x82\xc2\x2c\xdd\x36\x81\x10\x49\x81\x2a\x58\xa2\x12\x01\x92\xfd\x69\x90" + + "\xb9\xa9\x08\x02\x5e\x9b\xaa\xed\x03\x6e\xdf\xea\xbc\xf2\x3d\x81\xd9\x93\x11\xcd\x42\xfa\x8b\xdc\x9e\x6f\x3a\x66" + + "\xfa\xed\x7b\x5b\x19\xcf\x3f\x90\xcd\xac\x31\x3a\x7f\x5b\x95\x57\xf8\x6b\xa9\x2f\xbf\x87\x9b\x01\x7f\xce\x4c\x59" + + "\xbe\x5b\xe9\x19\x24\x58\xe4\x07\x3f\x12\x98\x26\x7e\x5e\x5f\xbc\x5b\xe9\x8a\xde\xd6\x65\xf8\xb1\xb6\xe6\x8d\x5e" + + "\xe1\xdf\x10\x22\xf7\x2d\x64\xd0\xe3\x92\x95\x13\x61\x5f\xe6\x45\xeb\xf6\x50\xb6\x7d\xef\xb8\x93\x36\x33\x25\x24" + + "\x70\xe5\xc4\xd7\xf8\x31\x81\x2a\xf6\xde\xc4\x70\x0d\xb8\x5b\xf8\xe8\x43\xfb\xa1\xf9\x50\x7d\x98\x1f\x4f\x4e\x6f" + + "\x51\x6a\xe6\xf9\x73\xf7\xc5\xc6\x2c\x7c\xe0\xad\xe0\x4a\x18\xcb\xd1\x65\xb3\x75\x33\x72\xcf\x7e\xff\x7d\xa4\x3e" + + "\x8e\xd4\xbc\xa8\x74\x09\x12\x8d\x8f\xd3\x9d\x61\x00\xc7\xe6\x14\x7b\x2c\xfa\x74\xa4\xe3\x32\xa0\xb0\x47\x41\x37" + + "\x9b\x5c\xeb\x53\x18\x8b\xcd\x17\xb5\xfa\x98\xaa\x79\x7c\xc6\x2c\x9e\x04\xaa\x2e\xf2\x1a\xfa\x48\x59\x6e\xfc\xf5" + + "\x1a\x12\xf7\xdf\x74\x55\x4f\x3c\x76\x71\x7d\xbc\x5f\x80\x41\xe0\x23\xf3\x86\x8c\x79\x05\xf2\x05\x32\xbf\xb3\x7a" + + "\xb9\x6a\x8c\xb5\xc5\x49\x51\x16\xed\x95\x1a\x58\x63\xc8\x40\x0d\xfd\x42\x11\x9a\x56\x01\xe0\x50\x71\xd8\xd7\xd7" + + "\xa0\xe3\xe9\xd1\x1b\xc4\xf8\xe2\xb7\x27\xa5\xa3\x24\x58\xc8\xb9\x14\x1e\xed\x61\xb6\x6e\x3a\x28\x9c\x02\xb2\x10" + + "\x5e\x84\x49\x61\x5a\x37\x50\x99\xca\xd4\x4e\xfa\x7a\x07\x1e\x0f\xc7\x8d\x59\x95\x7a\x66\x06\xb4\x4f\x47\xf8\xd8" + + "\xd3\xc4\x4c\x21\xa0\xc5\x56\xf0\x1a\x47\x0f\xdf\x75\x23\xe4\xbd\x8f\x01\x2b\x53\x28\x3b\x60\x43\x82\x4f\x31\x4c" + + "\xd3\xd1\xc7\x58\xd7\x11\x6a\x12\xb9\xf1\xa1\xab\xf8\x21\xf5\x50\xfd\x55\xa6\xc7\xa7\x69\xd8\x39\x90\x85\xb8\x65" + + "\x2f\x5e\x7a\xdd\x02\x44\xc2\x56\xe5\x95\xd2\xd6\x16\xa7\x15\x42\xf9\xcd\xe7\x86\xad\x53\x1a\x64\x8a\x75\x55\x19" + + "\x93\x9b\x5c\x35\xa6\xca\x8d\x3b\x0f\x63\xfa\x3c\x9c\x24\xe1\x34\xd1\x14\x4b\x9a\x80\x48\x04\x4e\x26\x18\x1c\x17" + + "\xc3\xe7\xa9\x70\x1c\x0a\xca\x62\x9b\xbc\x67\xfb\x5c\xa1\x3b\xec\xf2\xff\x1c\xd9\xe8\xf0\xeb\x98\x83\x38\x38\x31" + + "\xfd\x5f\x4f\x50\xc4\x0c\xfd\xcb\x34\x65\x03\x45\xf9\x5f\xa6\x02\x40\xc0\x0a\xab\x9c\xa8\x6f\xac\xa5\x8c\x12\x40" + + "\xc3\xee\x22\x60\x4c\x55\x87\xff\x07\xe9\xc9\xff\x20\x39\x09\x3a\x9b\x47\xba\x2c\x1f\xa9\xa2\xb2\xad\xae\x66\x9c" + + "\x48\x23\x54\x75\x27\xc9\xf9\xdb\x41\x0f\xcd\x81\xec\xf5\x61\x7c\x9d\xef\x68\xa8\xff\x4b\xc4\x08\x77\xda\x61\x0f" + + "\x51\x52\x53\xb4\xcc\xff\x5f\x41\x99\xd0\xd3\xae\x9f\x32\x8d\x10\xbd\xef\xdf\x83\xea\x10\x9c\x47\x82\x3f\x0a\x13" + + "\x96\x9e\x58\x16\xff\x65\xec\x38\xc9\x91\x1d\x07\x7d\x51\x2e\x32\x67\xa8\xfb\x94\xd2\x86\x26\xbc\x86\xf2\x19\x44" + + "\xbb\x34\xa3\xc7\xb4\xf5\x5f\x23\x58\xc5\x46\x82\x25\x26\x2e\x22\x58\x48\xaf\x8a\x94\x5e\x85\xb9\x1c\xca\x69\xed" + + "\x63\x8b\x3e\x31\x0d\xea\xe6\x79\x04\xbf\x5d\xc4\x4c\x2c\xaa\xbc\x38\x2f\xf2\xb5\x2e\xf1\x58\x82\x30\x48\xe7\xcd" + + "\x5f\x38\x3f\x88\x44\xea\x32\x7b\xf4\x96\x35\xe5\xdc\xdf\xab\x89\xcf\xfd\x96\xff\xd4\x9b\x65\xee\xa4\xa7\x11\xad" + + "\xf0\x7b\x38\x54\x74\x04\x04\xf6\x38\x51\xd4\x83\x83\x8b\x32\x80\x19\xe0\x3f\x3b\x2d\xce\x4d\x35\x52\x76\xa5\x67" + + "\x46\x59\xb3\xd2\x0d\x40\x44\x95\x05\xc7\xe0\x11\x66\x88\x29\xe7\x4e\x42\xa5\x75\x8a\xae\x0f\x11\x2d\xe3\x4a\x45" + + "\xbb\x49\x14\xf4\x07\x2b\xc6\xd1\xc0\x8f\xc2\xde\xec\xfb\x62\x3b\x32\xa4\xb8\x8b\x01\x57\xe5\x62\x51\x97\x46\x2c" + + "\x08\x6e\x02\x99\x7e\x8d\xd7\x36\x32\x7d\xd3\x75\xbe\x21\xe3\xae\x48\x4e\x29\x87\x29\x26\x12\xe1\x08\xc3\xcb\x62" + + "\xae\xac\xe1\xe9\x0a\xf1\x15\x56\x44\x08\xfe\xf6\x9b\x2f\xfe\xdb\x6f\x59\xf7\x12\xee\x81\x41\x41\x94\x5a\x9f\x02" + + "\x7e\x01\x69\x10\xc3\x58\x43\x8a\x96\x06\x01\x7b\x4d\xae\x32\x50\xd2\x67\x01\xf0\xaa\x5d\x78\x7f\x53\xa8\x4c\x4c" + + "\x18\xd4\x31\x28\x18\x0a\xf7\x42\x5b\x05\x08\x0f\xae\x18\x42\xc0\x59\x7d\x6e\x72\x55\xb4\xc3\xb1\xaf\xef\xad\x87" + + "\xa5\x39\x01\x3b\x0b\x78\x29\x5c\x2c\x74\x6b\xce\x4d\x43\xd9\x51\x30\xc7\x4f\x79\x45\xdf\x0f\xc0\xe9\xe7\x0a\x40" + + "\xc2\x05\x14\xd7\x5c\x97\xa5\xaf\x81\x01\x72\x64\xd6\x47\xcc\xa0\x0e\x8e\xf2\xae\x5e\x98\xf3\x9c\x7a\x92\xcc\xde" + + "\x41\x3a\x9d\x11\x6a\x30\xc5\x46\x62\x02\xab\xfe\xf8\xcd\x78\x75\xf0\xb4\xf1\xd5\x92\xc4\xf3\x6c\xdf\xdb\xe2\x63" + + "\x10\xc5\x2c\x13\xa4\x5a\x87\x09\xa5\x0e\xe2\x25\xea\x4b\xe1\x3d\xda\x61\x18\x3b\xec\x62\xc2\x3a\xc5\x8c\x93\xdf" + + "\xa7\x47\xc5\x71\x1f\x63\x83\x6d\x72\x81\x84\x83\x09\x0c\x8c\xe0\x5f\x86\x81\x5b\x90\x5b\x3f\xe6\x12\x98\xac\x36" + + "\x6b\xf3\x74\xd3\xe5\xe8\xed\x9f\x37\x7d\x8a\x02\x2a\x74\xa0\x26\x1f\x9a\xdb\x34\x04\xe7\xba\xbc\x95\xcb\x17\xce" + + "\x3e\x2a\xdc\x4b\x38\x97\x92\xa9\xdc\x8b\x12\xf2\xde\xef\x30\xf9\xd1\x84\xc6\x0a\xba\x44\x71\x7a\xae\x4b\xd2\x9b" + + "\xa2\x66\xcd\x4d\xb8\x34\x16\x25\xef\x59\x3d\x97\x6a\x51\x62\x9e\xf0\x5f\xd0\x59\x66\x30\x17\xd9\x2d\x2e\x1c\x89" + + "\xed\x24\x49\xdd\x9e\x5a\x42\xe3\x95\x45\xce\x03\x1d\x16\xc4\xb5\x78\x18\x28\x20\x59\x94\x96\xb5\x6d\x41\xc7\x5e" + + "\x57\x7c\x6c\x67\xda\x7a\x3e\xb4\x31\x6d\xd8\x65\x58\xf9\x48\x65\x59\x60\x92\x43\x4d\xf0\x19\xe5\xe8\xf4\x89\x6f" + + "\xaa\x75\x59\x22\x12\x83\x23\x76\x88\x18\x11\xaa\x0e\xde\x14\x78\xb4\xfd\x48\xe3\x84\x48\x11\x23\xe3\x37\x89\x8c" + + "\x8d\xef\x30\x34\x4f\xef\xe2\x1f\x04\x3b\x43\xa6\xe5\x38\xd1\x2e\xe6\x26\xa6\x03\x79\x3f\xf2\x90\x90\xbd\xf2\x3d" + + "\xa5\x74\xec\xbe\x73\xbe\x30\x1a\xad\xbb\x62\x5c\x31\x4a\x98\x09\xb7\x92\x83\x61\x7f\xd6\x4e\x51\x49\x27\x04\xed" + + "\x7d\x63\x74\x2b\x26\xba\xa0\x1c\xb4\x59\xf6\x94\xf3\xc2\xd2\xc4\x03\x38\x22\x2e\x72\xe8\x33\x54\x9d\x7a\x32\x61" + + "\x7b\x59\xd6\xe7\xb2\x14\xb8\xdd\x18\x06\x24\xfa\x78\x67\xd3\xd7\x3d\x48\xb2\x92\x01\xc1\x86\x25\x6a\xd4\xb9\x2e" + + "\x47\x9b\x28\x48\x62\x9d\x4f\xb7\x53\x70\x65\xe2\xf3\x93\x04\xf0\x6d\x24\x0d\xa8\x37\xdd\x4c\x1a\xfc\xf6\xb8\x8d" + + "\x34\x20\x03\x60\x4d\x4b\xae\x46\x36\x1c\xf2\x11\x5c\x9e\xfe\xe6\x44\xd7\x23\x86\xbb\x08\x6b\x83\x29\x58\xc0\xf8" + + "\x34\x88\x4d\x34\x70\xbf\x25\x49\xb0\x47\x38\x57\x9e\xb0\xc0\xf2\xf4\xd0\x15\xe8\x7c\xc7\xe1\xa1\x37\xd9\x7f\xd7" + + "\xaa\xc8\x73\x40\xb6\x11\xb4\x21\x7c\x92\xa1\x24\x78\x70\x6c\x72\xdd\xf2\x3d\xef\xf8\x9d\xa5\xe6\x69\xd8\x27\x82" + + "\x04\x09\x83\xc7\xfe\xde\xee\xfe\xfe\x8e\x90\x62\x57\x08\x5e\x67\x2e\x5b\xd5\x2e\x9a\xfa\xc2\x2a\x73\x39\x33\xe4" + + "\x73\x3d\x78\xb0\xff\xe5\x57\x5f\x7f\x35\x52\x0f\xf6\xbf\xfc\xfa\xc9\xd7\x43\x96\xea\xa5\xa4\xca\x3f\xcc\x65\x1b" + + "\x7c\x18\xe5\xa4\x09\x9f\xfc\x3f\x33\x13\x4e\xaa\xc4\xde\xb1\x1c\xc1\x9e\xe0\x44\xda\x23\x44\xc8\x80\x0f\x40\xbe" + + "\x18\xc2\xb0\xe1\xbf\xaf\xbc\xa9\x55\x88\x44\x50\x72\x17\x00\xb4\xaf\xaf\x7d\x5c\xa5\x97\x6c\x28\xb3\xf5\x01\xb8" + + "\x75\x1e\xe2\x34\x07\xc4\x48\x48\xa3\xe9\x5f\xe2\xc7\x3b\x00\x0b\xce\x88\x93\x02\xf0\x96\x78\x21\xdf\x84\x5f\x2e" + + "\xa8\x84\xd7\x6b\x4b\xd6\x25\xa2\x84\xdd\x6a\x7d\x5f\xd7\x2b\x58\xa6\xf5\xe9\xc2\x23\x2b\x7a\x73\x52\x00\x46\x4b" + + "\x34\x52\x4b\x7d\x99\x68\xa4\x68\x2e\xd1\x0d\xdf\x7d\xc4\x7a\xa9\xb0\x33\xc0\x5d\x49\xe5\xb5\x81\xb8\x75\xca\xc5" + + "\xe9\xdb\x42\x97\xa4\x79\xdd\x2c\xd1\xd7\x49\x0d\x1e\x3c\x7e\xf2\x64\x7f\x28\x45\xaa\x01\xef\x2e\xff\x95\x9b\x60" + + "\x98\x76\x06\x22\xf0\x1e\x59\xd0\xe4\x0b\x30\x77\x07\x5c\x1d\x58\x6d\x9f\x22\xc6\x3b\xe8\x3b\xb9\xa0\x52\x5a\x3c" + + "\x20\xeb\x9c\xaf\x6b\xa0\xfa\x5c\xf7\x0f\xc1\x75\x1f\x20\x6c\xf9\x11\xaf\x53\xe4\x4a\x3c\x80\x8c\x32\x50\x80\xe9" + + "\x04\xd1\x7f\xd1\xdd\x81\xaf\x4c\xd8\xd3\x7c\xbd\xc2\x20\x1e\x9c\xcc\x3a\xe5\x47\x10\x48\x02\x5d\x47\xa7\xb3\xe0" + + "\x49\x8b\x13\xf2\x77\x83\x31\x10\x84\xbc\x33\x23\x9a\xed\xd6\x36\x84\x46\x70\xf9\xf3\x48\xb9\xcd\xcd\xf1\xcd\xf9" + + "\x34\xaa\xf8\x17\xce\xcb\x57\x19\x48\x97\xae\xb4\xbb\x6f\xa0\x62\xb7\xfd\x28\xb6\x82\x3f\x40\xc4\xa4\x2a\x52\x30" + + "\xf5\x39\x7e\x49\x0d\x19\xc6\x92\x94\x6d\xb1\xfb\x8e\x02\x35\x3c\x5a\x1f\x36\x16\x75\x9b\x03\xea\x12\x87\xb4\x9b" + + "\x2e\x63\xe7\xdb\x64\x4c\x49\xce\xd5\xfb\x29\xee\x82\x84\x69\x56\xd4\xd5\x3b\xc7\x52\xff\x19\xf2\xe2\xe9\x80\xbf" + + "\x7d\xcf\x4c\x0c\xf7\x2e\xcf\x78\x7c\xfa\x3b\x5a\x8d\x62\x77\xf7\x13\xce\xa2\x38\x49\xe9\x41\x0a\xcc\x5d\x45\x9d" + + "\xa0\x12\x44\x38\xa9\xb7\x28\xd9\x44\x1a\x0c\x3f\xfc\x18\xf2\xb4\x33\xd5\x4e\x82\xad\x9b\x99\x93\x83\xeb\x0b\x4b" + + "\xdc\xd1\x89\x01\xa8\xf4\x59\x5d\x59\xf4\x18\x2e\xaf\xd0\x85\xae\xaa\xab\x5d\xd0\xe9\x84\x44\xc9\xe8\xbb\x28\xa4" + + "\x80\xfb\xa1\xe9\xd0\x9f\x2e\xb5\x56\x07\x8a\xcd\xf7\x09\x90\x68\xb4\xec\xdb\x7d\x96\xfd\x9f\x74\x5e\xd4\x16\x9c" + + "\x49\x38\x5c\x0a\x5d\x68\x5b\xd3\x4c\x2c\xf9\x8b\x25\x51\xe6\xe8\x1b\x3a\x12\x41\x5b\x6a\xa3\xe5\x38\x66\x71\xc0" + + "\x58\xfc\x07\xde\x6e\x77\xee\xbd\x4f\x4a\x14\x10\x12\x87\xa2\xfe\xd6\xf5\xa8\x77\xb5\xe9\x8c\xbb\x52\x74\xbe\x43" + + "\x7b\x28\xcc\xa6\xd3\xe4\x63\x54\xef\xa7\xe1\x60\x71\xb0\x6a\x3a\xc4\x31\x26\xe3\xde\x70\x59\x4b\xe6\xe2\x17\x73" + + "\x72\x56\xb4\xfc\x38\xcb\x30\x3d\xb6\x1b\x8f\xc9\x41\x83\x6f\x74\xae\xea\x39\x06\xa8\x15\x73\xa5\xfd\x46\x71\x84" + + "\x28\x06\x17\x93\x6e\x23\x11\x69\x26\x26\x48\x50\xe5\x43\xac\x70\x9a\x7a\xbe\xde\xf4\x49\xe7\x60\x58\x10\xe1\x20" + + "\xe8\xec\xe1\xfd\x41\x77\x11\x3d\xa5\x9a\x95\x6b\x0b\x94\x35\x75\x77\x50\x83\xec\xa4\x5c\xbb\x8b\x6f\xb6\xb6\xf8" + + "\xdf\xa2\xc2\x7f\xeb\x75\xab\xca\x5a\xe7\xee\x3e\x2c\x7e\x37\x0a\xd3\xf1\xab\x75\x05\x0f\x67\x65\x31\x3b\x53\xf9" + + "\x49\x89\x7f\x64\x6a\x07\x9c\x23\xea\xb5\x35\x79\x7d\x51\x29\xf8\x6b\xbd\xc2\x7f\x41\x9b\x05\x7f\x41\xba\x26\xfc" + + "\x6b\xdd\xe2\x1f\xa6\x6a\xf9\x59\x69\xdc\x69\xa4\xba\x28\xa1\x1c\x85\xe5\xd9\xf5\xc9\xb2\x68\xd5\x99\xb9\x82\xea" + + "\xcf\xcc\x15\x18\x91\xdc\x1f\xeb\x95\x32\x4d\x53\x37\x0a\x5c\x26\x2e\xdb\xa5\xa9\xd6\xd9\x50\x20\x79\x6e\x74\x2a" + + "\xc5\x38\x35\x0a\xf2\x32\xe7\xa6\x6a\xd5\x49\x01\xae\xe3\x77\xc6\xd7\xe7\xba\xd5\x02\x5c\xd2\xbb\x19\x76\xdd\x07" + + "\xf7\x24\xca\x57\x70\x52\xc4\x40\x04\x51\x8d\x00\x4d\x68\x9b\xe2\xf4\xd4\x34\xd2\xd5\xbc\x1b\x77\x1f\x6b\x5e\x16" + + "\x6e\x66\xe5\x99\x9d\x57\x6f\xcf\x4d\xe3\xea\x7e\xbb\x6e\xfb\x5c\x13\xc3\xe4\x73\x61\x35\x1c\x87\x65\x18\xd0\x97" + + "\xd7\xd7\xfe\xad\xd0\xa8\xb9\x69\x4a\x11\x72\xec\x68\xd3\xac\xf8\xa1\x53\xb1\x74\xec\x1e\x7a\x67\x5d\x6d\xa8\x78" + + "\x43\x95\xf3\x79\x52\xa7\xac\x6d\xfb\x1e\x38\x5a\x9e\x26\x90\x7c\xac\xd2\x1b\xfd\xc9\x4e\x87\xef\x7a\x3b\xfe\x49" + + "\x4d\x85\x46\x26\x13\x85\xcb\x8b\x7a\xfc\xa1\x02\xf6\x36\xf9\x40\x1d\xb9\x4f\x8e\x11\x8b\x77\xd3\x0e\x43\xf5\xe1" + + "\xa1\x98\x91\x50\x4b\xf6\xe8\x51\x16\xac\x46\x72\xba\xbc\x62\xf3\xfa\x1a\x4a\x89\xf1\x08\x12\x83\xd1\x91\xd5\xcc" + + "\xf4\xa1\x2f\x80\x66\x10\x82\xc3\xd5\x81\x1a\x4c\x3e\x1c\x4e\x02\x65\x92\x74\x34\x8a\x05\x76\xbc\x5a\xdd\x9c\xe9" + + "\xa6\x5e\x57\xb9\x9a\xeb\xa2\x84\xe0\x58\x56\x54\xec\xce\xb4\x45\xed\x06\x86\x6e\xfa\xdd\xbe\xd2\x8d\x35\xff\x78" + + "\xf7\xf6\x87\xce\x29\xa4\x19\xa5\xe9\x71\x45\xb0\x30\xbd\xf5\xa1\x4d\x22\x76\xfe\x79\x53\x5b\xbb\x4b\x8c\x80\xba" + + "\x5c\x96\xca\x7d\x01\xc7\x5e\x36\xf7\xeb\x9b\xef\x37\xb5\xe6\xc6\x7e\xb9\x2c\x47\xaa\x5d\xae\xc2\x4d\x04\x05\x82" + + "\xeb\x01\xfc\xec\x43\xb5\x4b\xbc\xd1\x6e\x3a\x41\xd5\xaf\x5f\x7e\xb3\x7d\x6f\xab\x6d\xae\xc8\x43\x11\xb2\x57\x54" + + "\xe6\x42\xbd\x78\xfb\xe6\x47\xd7\xb5\x86\xc2\xe6\xd0\x75\xb5\x5d\xae\xb0\xc7\xaf\x9a\x7a\xf9\x0e\xda\x62\x0a\x95" + + "\x39\x8a\x38\xb9\x5c\x96\x24\x67\xdf\xa8\x19\xe4\x19\x19\x28\x7f\x95\x63\x1d\x71\xd6\xef\xed\x00\x4b\xe1\x5e\x5f" + + "\x5f\xbb\xd1\xba\x9b\x8b\x02\x75\xed\xb7\x57\xef\xf5\x29\x8a\x01\x19\x34\xdd\x00\x0d\xee\x66\x48\xe5\xdb\xc6\xbd" + + "\x1d\xa8\xec\x75\x05\x89\x84\xd5\xaf\x6f\xbe\x9f\x82\xb6\x1b\x27\x95\x61\x2d\x68\x66\x2e\x97\xa5\x58\xb1\x73\xdd" + + "\x10\x3a\x02\x05\x0d\xab\xb2\x9e\x71\xb4\x88\xfe\xa8\x2f\xbf\xaf\x67\x3f\xea\xa6\x05\xde\x96\x7e\x33\x46\xb7\xab" + + "\x73\xa1\x01\x5b\x6a\xf2\x60\xfc\xe8\xb3\x89\x2b\xd3\xb4\xe0\xf5\x36\x38\x3a\x7c\x78\x3c\xfc\xed\xe0\xe8\x3f\x1f" + + "\x1e\x3f\xc2\x17\x0b\xa3\x73\xc4\x21\x99\xfc\xe7\x60\xfc\xe8\x70\x38\x3d\x52\x1f\xda\xe3\x47\x83\xa3\xff\xfc\xd0" + + "\x7c\xa8\x8e\x1f\x0d\x3f\x9b\x2c\x4f\x09\xac\xe1\xc1\x5f\xbe\x7a\xf2\xc5\x48\x3d\xf8\x7a\xff\xf1\x13\xf8\xe7\xc9" + + "\xe3\x29\x74\xad\x54\xab\xa6\x6e\xeb\x59\x5d\xaa\xdc\xb4\x98\xf2\xd9\xd5\x0e\xef\x7e\xe4\x57\xe4\xfd\xae\x4f\xea" + + "\x75\x7b\xad\x57\x2b\xf7\xff\x5d\xdb\xd6\x8d\x3e\x35\xd7\xe3\x9d\x5d\xa0\xee\xee\xda\xbe\x9e\x17\xa5\xb9\x6e\x8c" + + "\xbd\xbe\x28\xf2\x53\xd3\x0e\xa7\x34\x8c\xaa\x7e\x8e\x5e\x82\x5c\xd7\xdf\x5f\xbe\xbf\xfe\xee\xe5\xb3\x17\x43\x2a" + + "\xb0\x92\x6d\x7d\x98\x7c\x98\xe0\xe3\x75\x43\xad\x1f\x7d\xb8\x18\xef\xec\x1e\xef\x4c\x87\x83\xc3\xa9\x7b\x3f\x38" + + "\x9c\x1e\xfd\xe7\x87\xc9\xe1\x83\xe3\x47\xff\xef\xf5\x70\x80\x7f\x4f\x8f\x1f\xb9\xf7\xd3\xc1\x87\x7c\x67\x78\x3d" + + "\xbc\x1e\x4e\x70\x62\x27\x8f\x54\xc0\x6c\xde\xbe\xb7\xa5\x1e\xa9\xfd\xa1\x7a\xbf\x30\x57\x20\xdf\xae\xad\x99\xaf" + + "\x4b\xcc\xab\xda\x36\x75\xbe\x9e\x19\x86\xeb\x71\x8b\xfe\x1e\x28\x1c\x7a\x7f\x7c\xd4\x97\x93\x8f\xb6\xae\x56\xe3" + + "\x8f\xde\x5f\xd5\x5c\xea\xe5\xaa\x84\x80\x7f\xf5\x48\x3d\x86\x8a\x2d\x26\x69\xc0\x0c\xc0\x53\x7c\xa3\x94\xda\x55" + + "\xdf\xbe\x7c\xf5\xf6\xa7\x97\x4a\xdb\x33\xc0\x69\x72\x35\xa8\xb6\xd1\x95\x75\xe7\x49\x94\x7b\xf6\xea\xfd\xcb\x9f" + + "\x30\x37\xbd\xb2\xa6\x29\x74\x59\xfc\x8e\xf8\x99\x03\x3b\x86\xad\x08\xa9\xcd\x82\x45\x0b\xa0\xd6\x67\xc6\xda\x17" + + "\xf4\xd2\xc9\x18\xd4\xa7\x2f\x86\x8e\xfd\x80\x87\x0b\xe3\xc7\x84\xef\xbe\x1c\x62\x02\x26\x77\xd8\x74\x59\x2a\x7b" + + "\xb5\x3c\xa9\x4b\xc0\x20\x27\x97\x5b\xc7\x29\x61\xd9\x27\x43\x65\x2e\xcd\x6c\x0d\xfd\x00\x1c\x3c\x44\x40\xc1\x1c" + + "\xdf\x3c\x0a\xdf\x00\x88\x03\xef\xbf\x7b\xf9\x83\xe2\xfc\x90\x0a\x78\xa2\xb6\x86\xea\x8b\xb9\x42\x37\x0d\xa8\x7c" + + "\x22\xd1\xbd\x2d\x67\xd4\xc6\xc5\x7b\xcf\x55\x5b\x66\x7b\xc2\x2a\x6e\x1c\xd8\xe3\x3f\x31\xb0\x2f\x86\x74\xcf\xfc" + + "\xd9\x81\x9d\xd6\x9b\x47\xd3\x86\x5e\x8b\xd1\x70\x10\x0e\xc5\x0f\xec\xae\x9a\xba\xac\x4f\xd5\x6c\xa1\x1b\x65\xcd" + + "\x3f\xd7\xc6\x5d\x62\x83\x07\xfb\x7b\x7b\xdf\x7c\x3d\x7c\xaa\x96\x80\x0a\xb1\x5a\x19\x6d\x8d\x02\xb8\x14\xc8\xc8" + + "\x76\xae\x73\x13\x1c\x94\x90\xbe\x94\x25\xee\xd4\x03\x95\x3d\x9a\x64\x9c\x43\x3e\x7b\x94\x79\x29\xed\xc1\xd7\xfb" + + "\x5f\x7c\x3d\x52\xaf\x5f\xaa\xa5\xbe\x42\xad\x23\x6e\x60\xd2\x3b\x52\x34\x38\x44\xa0\xc0\x25\x33\x99\x28\xad\xe6" + + "\x85\x29\x73\x8c\xfe\xb9\x28\xaa\xbc\xbe\x18\x33\x55\x03\xf7\x1b\xc6\x47\xc8\xeb\xa5\x2e\x2a\x30\x26\x03\x16\x11" + + "\xc8\xa0\x7c\x33\x48\x62\xa7\x0e\x3c\x59\x04\x97\x72\x47\x40\x71\x99\x02\xad\x9f\x4c\xd4\xcf\x16\x0d\xcb\xe0\x75" + + "\x1e\x22\x2c\x6a\x00\x7a\x78\xc6\xc6\x6b\xca\x2f\x5b\xb8\x59\x7b\xfd\x12\xd7\x6e\x59\xe7\xc5\xfc\x4a\x15\x2d\xba" + + "\x20\x84\x2e\x76\xa9\xb1\xcf\xd6\xb3\x09\xe5\x41\xd3\x75\x24\xcb\xa3\x23\x3c\x59\x12\xd2\x9a\x3a\x05\xd9\x79\x1b" + + "\xbc\xdd\x4f\xa3\x5b\xc1\xd1\x9b\x1a\x32\xaf\xd8\xed\x7b\xf2\x7e\x50\x07\xca\xd1\x3e\xca\x71\x1b\x55\x19\x2b\xf5" + + "\xa5\xf7\x06\x61\xed\xa8\x6c\x56\x57\xb6\x6d\xd6\x8e\x6b\xca\x80\xc4\x70\xa8\xfa\x47\x7d\xe9\xe9\x20\xec\x23\xf1" + + "\xe2\x7d\x20\x42\x3e\xe2\x4b\xe7\xf9\xfb\x3a\x50\xce\xb7\x4d\x38\x88\x03\x85\x4d\x38\xa6\x48\x88\x28\x7c\x42\x5e" + + "\x46\x9e\x75\xa8\x7f\xd0\x25\xb4\x49\xf1\x96\x96\x0e\x4e\xb8\x4b\x63\xfe\x25\xae\x05\x25\xa3\xa0\xa6\x93\x16\x9f" + + "\x9e\x36\x7b\x11\x7a\xa1\x86\x83\x9e\xe2\x28\xb1\xf7\x54\xe3\x4e\x52\x26\xad\x7c\x80\x91\x4b\xe5\x3a\x36\xf6\x70" + + "\x57\xf4\x35\x12\x2f\xdc\x5d\x7e\x38\x9b\xfc\xa2\x68\x16\x64\x20\x4f\xdd\xa0\xe3\x8d\x27\x4e\x84\x6b\xd8\xed\x02" + + "\x7c\xe2\xfd\x7b\x7c\xf9\xd0\xdb\x4e\x2c\xf5\x64\xe2\x2e\x4e\x48\x9f\x50\xcc\x55\xe3\xc8\x93\x25\x4c\x08\x01\x85" + + "\xeb\x3e\x3d\xda\x43\x54\xb1\x6c\x47\x58\xdc\xb6\x7a\xda\x18\x5b\x44\x18\xdb\x27\x5f\x88\x47\xde\xcf\x6e\xe0\x77" + + "\xd4\x51\x18\x8c\x13\x66\xfb\x9f\xc3\x74\x0d\x43\xea\x06\x9c\x1a\xa9\xb4\x0f\x2e\x25\x88\x2d\x44\xaa\xad\xd8\x49" + + "\xe8\x5f\x6b\x15\x95\xa6\xbe\xc9\xad\x9e\xe0\x5b\x71\xee\xe1\x58\x16\x95\x5d\xd1\x0d\x13\x42\x2a\xeb\x46\x89\x4b" + + "\xcf\x1d\x8f\x70\x6b\x88\x83\x48\xdf\xde\x79\x14\x7d\xc6\xaf\x91\x4a\xf2\x78\x8d\xd4\xc7\x7f\xfe\xfa\xdd\x4f\xfe" + + "\x04\x21\xb8\x13\xd4\x8a\xf1\x30\x6c\x2d\x32\x8e\x31\xf1\x95\x83\x47\x6e\x38\xe9\x98\x7e\xc0\x5f\x6b\x0c\x6e\x97" + + "\x74\x33\xec\x0a\xe9\x52\x21\x20\x87\xb6\xb6\x7c\xd3\xc9\xa4\x7b\xc5\x68\xa4\xfb\xb9\x65\x29\xa4\xca\xe4\xb7\x51" + + "\x98\xcc\xb7\xcd\x2b\xed\x08\xe0\x55\x64\x4e\xe7\xaf\xc5\xf4\x41\x2e\x93\xf4\xa3\xc1\xdd\xf3\x28\x62\x80\x12\x3a" + + "\x14\x55\x9e\xb8\x73\xdf\xef\x4c\xb0\x7b\xd8\x33\x1b\xb2\x92\xe3\x70\xa2\x7c\x3a\x35\x3e\xb1\x61\xff\xf7\x7d\xc9" + + "\x7b\xb3\xb3\x30\x7d\x85\x7a\x52\xdb\x09\x03\x79\xa7\xe3\xa9\xea\xf4\xfe\x40\x09\x2d\xf9\x2d\x0d\xc9\xf4\xc6\xec" + + "\x4f\x2a\xf6\xc6\xcd\xb6\x40\x4e\xf3\x1d\xef\x0c\x1c\x72\xb4\x22\x0d\x91\xf3\x07\xb9\x73\xdc\xa4\xfa\x2f\xdd\x93" + + "\xa1\x38\x8c\xcf\x3c\xaa\x03\x6a\xa5\x90\x09\xff\xa8\x2f\x83\x19\x0f\xdc\xdb\x74\xab\x5a\x7d\x66\xac\xca\xe6\xa5" + + "\x6e\x33\x6f\x16\x1b\x54\x75\x4b\x39\xd7\x73\x63\x56\x54\x0b\x20\x5a\x61\x5c\xa5\xb1\xea\xc1\x37\x5f\x7f\xfd\x17" + + "\x79\x91\x7e\xd4\x97\x2f\x39\x75\x93\x6e\x4e\x4d\x3b\x52\xb6\x99\x09\x19\xfd\xcc\x5c\x8d\xa0\x3e\x38\x86\xae\xc5" + + "\xb7\xde\x2a\x22\x6e\x69\x42\x44\xb0\x63\x59\xe2\xfa\x5a\xfd\x71\x23\x71\x26\x81\x27\xae\x44\x0b\xe4\x69\xd9\xcc" + + "\x8e\xe0\xdd\xa6\x5c\xef\x03\x25\xaa\xe5\xa2\x87\xd4\x63\x35\x05\x04\x6b\xb3\x72\xed\x0d\xe0\x0f\x47\x36\xc0\x7a" + + "\xc6\x65\x0f\x44\x1b\x12\x3a\x92\xe1\xaf\xcd\x2a\x95\xb6\xa3\x2c\x86\x3c\x35\x58\xb0\xb3\x19\xf0\xb5\x5f\xca\x47" + + "\xa4\x10\xb5\x0a\x91\x34\xac\x01\x9e\x42\xe3\x74\xf3\x6d\x35\xdd\xbe\xa7\x1e\xa9\x5d\x35\x2f\xaa\x1c\xc5\x84\xa6" + + "\x38\x5d\x08\x5e\x7e\x40\x59\x19\x1c\xdb\x8a\xe9\xfb\x28\xa2\x6d\xb7\x65\x56\xdf\x5c\x12\x9d\xe4\x8f\x86\x54\x29" + + "\x3b\x50\xf8\x14\xb6\x1e\xd1\x83\xbb\xe4\x0a\x4e\x92\x9d\x80\xdd\xfe\x89\x3b\x3d\x50\x4c\x55\x46\x62\x24\x92\x50" + + "\xcf\x5a\xc6\x8c\x06\x67\xf2\x17\xcc\x81\x20\xcc\xf4\x0b\xc9\x90\x50\xdf\xdd\xb6\xb1\x63\xfe\x81\x89\x7b\x04\x7b" + + "\x22\xce\x91\xc7\x51\x23\xbf\x7f\xbd\x6e\xeb\x58\xd0\x39\x05\xb8\x12\x31\x25\xc4\x60\x90\xbc\xb9\x7d\xcf\xf3\x14" + + "\xc9\xe1\x04\xe2\xf7\xc8\xf3\x03\x81\x66\x21\xc5\x12\x99\xdb\x66\xed\x06\xa7\x10\x40\x13\xb4\xe3\x65\xb1\x44\x8f" + + "\xa7\xeb\x6b\x9c\xa9\xf1\xa9\x69\x79\x02\xbf\x03\x55\xc8\x20\x23\x15\xc3\xae\x2b\x98\xa5\xc8\xa5\x12\x28\x0e\x1d" + + "\x5b\x73\xa3\xc1\x4d\x14\x64\x3c\xad\xce\x2a\x27\x9a\xca\x71\xf2\xb6\x9d\x79\x5a\x87\xa7\x8b\xe7\xc0\x4f\x75\x64" + + "\x69\xe2\xa7\x84\x5f\x0e\xb4\x28\x7d\x46\x71\xb6\xb3\x36\x4d\xb1\x9e\x90\x74\x09\xfe\xbe\x75\xd2\x18\x7d\xd6\xb5" + + "\xc1\x45\xa8\x85\xb5\x23\xd3\x94\x24\x12\x0c\x86\xda\xef\x28\x6f\xbb\xee\x6c\x66\x7f\x3c\xe3\xd5\x2b\xaa\x74\x37" + + "\x52\xf8\xc4\x8b\x3e\xc6\x91\x33\x66\x4b\xee\x0a\x9c\xc0\xae\xd8\xd9\xab\x38\x29\x03\x53\x6a\xbb\xd3\xd9\x69\x4c" + + "\xe8\x2a\x45\xb7\xae\xaf\x71\x63\xbb\x2a\x01\xcf\x96\x61\xe2\xbd\x92\x0e\x0b\xef\x1d\xcb\x7b\x33\xed\x78\x48\xc3" + + "\xd1\x99\x57\x6a\x36\x3a\x5a\xb2\x22\xf9\x58\x56\xe4\x17\x05\x58\xcf\x46\x7d\x74\x92\xfb\xda\x12\x16\xbc\xaa\x2b" + + "\xd3\x37\x83\xf1\xef\xeb\xeb\xf8\x48\x47\x4a\xd7\xd7\xb0\xac\x73\xd0\x47\x6b\xb9\x7a\xe8\x56\xa0\xf3\x3c\xe2\xfb" + + "\xd9\xf5\xb9\x2c\x6c\x1b\x69\x27\x20\xcb\x50\xae\xbc\xf5\x60\x33\xe9\xc2\xa9\x88\xbb\x28\x2f\x94\xf8\x8d\xbb\x53" + + "\x3a\xd7\xf3\x1f\xb1\x68\x24\xd8\xf5\xb8\xd6\x1e\x64\x0e\xda\x0e\x47\x49\xd1\xe3\xa7\x22\x9f\xf6\xe4\x91\x7a\xbe" + + "\xd0\x78\x18\xcf\x4d\x63\xe1\x3e\x44\xa9\x1f\x48\x3d\xde\x01\xc8\x58\x2f\x8c\x67\xe6\x22\xf2\xac\x9e\x95\xd6\x1d" + + "\x1c\x82\x0d\xe2\x57\xbf\xfe\xfa\x2b\xaa\x3e\x10\xf4\x61\x61\x88\xf3\xe3\x90\xa8\x3e\xca\xfe\x1c\xf7\x25\x50\x74" + + "\xae\xc7\xd3\xf6\xc2\xbe\x5b\x23\xbc\x67\xb8\xf6\x5d\xb7\x1f\x8f\x38\x0f\xc5\x08\x7e\x83\xae\x1e\x58\xd9\x73\x26" + + "\xe9\xb4\xd9\x03\x9f\x4e\xd6\x09\x26\x5e\x9c\x04\x29\xd0\x78\x46\x33\xba\x30\xe8\x69\xd2\xd6\x42\x2d\x32\x47\x1b" + + "\x24\x4d\xd8\x2d\x97\x03\x09\x6b\xc3\x00\xb6\x09\xea\x11\x25\xba\xb4\xd4\x2b\xec\x85\x07\xe9\xcb\x21\x41\x7c\x0f" + + "\x55\xd9\x0f\x3b\x02\x8f\xbe\xab\x06\x18\x15\x71\xa0\x03\xe9\x17\x67\xdc\xfd\xdd\x13\x2f\x1e\x13\x02\xa8\xed\x38" + + "\xa1\xfb\x34\xb3\x92\x56\x89\xeb\x87\x06\x45\xde\xa8\x6d\x8d\x92\x34\xaa\xe1\x5a\xc7\x22\x8a\x53\x26\x22\xdf\xa0" + + "\xc6\x58\x17\x61\xc7\xbc\xde\xaf\x60\xcf\x1c\xf9\x72\xe1\x14\xc0\x3e\x38\xba\xb5\x28\xa2\xe3\xe0\xdb\x14\x17\x71" + + "\xb5\x2a\xaf\xfc\x09\xc7\x24\xad\xee\x5c\xaf\x9a\xfa\xbc\xc8\x25\xe8\xb7\xdb\x39\xc0\x02\xfb\x0d\xf7\xf0\x21\xad" + + "\x2a\x7d\x16\xc2\xaa\xe8\x72\x38\x88\xde\x0f\xc4\xe6\x0d\xbb\x21\x8e\xdc\x82\x46\x0e\xb8\xeb\xf0\xe6\xce\xb9\xf6" + + "\x81\x8a\xf1\x04\x62\x3c\x79\x63\x3e\xb7\x18\xdb\x77\xe1\x76\xb6\xe3\x42\x6a\x37\x3e\x2e\x1e\xf4\x1b\x16\xbc\x5e" + + "\x1c\xa3\x22\xae\x5d\x6e\x5b\xf2\x1c\x48\xb2\x43\xb7\x5c\x9f\x85\x17\x2c\xaf\xbb\x9f\x05\x98\x4d\x73\xde\xdb\x14" + + "\xea\xae\x20\xd6\x90\xd2\xa1\x52\xbd\x1d\x49\x09\xaa\xb8\x4f\xfd\x78\xf8\x30\xfc\xee\x0c\x9c\x40\xce\xcc\x19\xf8" + + "\xd4\x35\x66\xd6\x86\x93\x45\x7d\x77\x7b\xfa\x40\xc9\x6d\x0e\xd5\xf1\x7d\x17\x76\xce\xf5\x75\x54\x2a\x7b\x14\xbf" + + "\x7f\x1a\x87\xff\x54\x75\x45\x57\xc9\x08\x24\x3b\xa5\xd5\x4a\x17\x8d\x74\x1a\x82\xa6\x83\x2a\x27\x9c\xd8\xc7\xca" + + "\xd3\xdb\x70\x60\xb7\x83\xf3\xd9\xeb\x39\x15\xab\xd7\xed\x6a\xdd\xda\x68\xa2\xb6\xd8\x48\x08\x45\xc8\xf7\x21\x89" + + "\xfa\x44\xa1\x7a\xb9\x42\x8a\x71\xd0\x3f\x73\xbe\x2d\x98\x0f\xd2\xe8\x73\xaf\x80\xde\xe9\xd9\xcc\xac\x5a\x70\x81" + + "\x01\x03\x2d\x7d\x75\xd7\x94\x42\xc3\x7b\x70\x16\x19\xc9\x73\x2b\x21\x47\x34\xb9\xa1\xa4\xef\xba\xe7\x01\xcf\x23" + + "\x97\x3d\xda\x6d\xb9\x71\xbb\xcc\xfc\x73\x5d\x9c\xeb\x12\x14\xfd\xa1\xd6\x50\x36\x54\x91\x66\x7b\xdc\x3c\x02\x9c" + + "\x70\xe1\x47\x9a\x68\xc0\x46\xee\xda\x32\x94\x34\x09\x90\xe5\x49\xea\x91\x14\x8e\xfe\x27\xf7\x72\x4f\x1b\xb0\x95" + + "\xfb\x7a\xe5\x8f\x19\xcf\xcb\x53\xf1\xb6\x8f\xbb\xe5\x15\x1e\x8a\x82\x37\xe1\x4f\xc1\x98\x45\x6f\x44\x50\x70\xea" + + "\x38\x87\x34\xd2\x77\x1a\x22\xc4\x20\x49\x42\x25\x67\x5d\x82\x37\xc2\x5c\xc6\x23\xda\xf6\x9e\xb8\x3f\x57\xa5\xa3" + + "\x9e\x60\x12\x46\x24\x5a\x5d\xba\x6b\x0e\xb6\xd7\xc9\xfa\xe4\xa4\x34\x23\x32\x53\xc7\x1c\xd5\x72\xfb\x5e\xb2\x94" + + "\x8e\x02\x1f\xa9\x0c\x3d\xbd\x33\xc9\x9a\x46\x54\xd8\x95\x0d\xd4\x77\x73\x64\xa3\xb7\xb8\x7f\x6a\x05\x7d\xf6\xf4" + + "\x2d\xa1\xbd\xf9\x03\x23\x5e\xa7\xb1\x91\x7c\x84\x63\x9f\xe2\x18\x0e\x95\x51\x53\x95\xfd\x50\x0b\xe6\x01\x49\xa1" + + "\x3b\x0d\xfe\x10\xb5\x75\x44\x7a\x6e\xfa\xa2\xb9\xb7\x7a\xd1\x0a\x83\xa8\x1f\xba\x63\xf1\x0a\xcb\xd0\x9b\x65\x1a" + + "\x86\xd6\x41\xc5\xf1\x3e\x46\x7c\xab\xaf\x2b\x72\x95\x56\x8b\xba\xcc\x19\x48\x12\xe3\x42\xc0\x8e\x84\x79\x91\xfe" + + "\xb9\x36\x4d\x01\x12\x09\x3e\x98\x82\x42\x1f\x2b\xf9\x5e\xdb\x76\xf7\x8d\x63\x9c\x0a\x93\x2b\x34\xba\xab\x99\x9e" + + "\x2d\x50\x9e\x82\xf4\x63\xc4\x64\x6e\xdf\xdb\x2a\xb5\x6d\xb9\xf0\x94\x58\x35\xd3\xea\xd3\xa9\x37\xff\x49\x1d\x0e" + + "\xf9\xe4\xaf\x9b\x72\xaa\x12\x67\x00\xc6\xe3\xcc\xfe\xfe\xf2\x3d\x06\xf3\x15\xd6\xbd\x2e\xa7\x2a\xb6\xcd\x93\x24" + + "\x29\x6d\x47\x74\xa6\xe0\xab\xd3\xb2\x3e\x71\x1f\xf9\x6c\x7e\xc2\x46\x2c\x9e\x6a\x7b\x55\xcd\xc4\x6f\x92\x57\xdf" + + "\x63\x1f\xf4\x6a\x55\x16\xd8\xb5\xc9\xe5\xee\xc5\xc5\xc5\xee\xbc\x6e\x96\xbb\xeb\xc6\x1d\xa6\x3a\x37\xf9\x53\xb0" + + "\x5e\x5a\xd3\x1e\xfc\xfc\xfe\xd5\xee\xd7\xd8\xe1\xc9\xa3\x6d\xca\x7a\x51\xaf\xdb\x29\xd9\x48\x70\x09\xc1\x03\x4a" + + "\x72\x9d\xe2\xd1\xda\x9a\xa6\xd2\x4b\xf9\x68\xa5\xad\xbd\xa8\x9b\x5c\x3c\x82\x15\x10\xbf\xf1\x58\x4d\x51\x77\x89" + + "\x4f\x1a\x9d\x17\x68\x75\x92\x8f\xc9\x6d\x82\x17\x67\xcb\x71\xf0\x30\x03\x70\x57\xf0\x92\x6c\x65\x8f\xb2\xa9\x62" + + "\x83\x2a\x5a\x77\x5a\x73\xd9\x4e\xc9\x4b\x65\x55\xea\xa2\xa2\x20\xcb\x45\xbb\x2c\xf9\xb9\xfb\x9b\x1e\x5f\xc2\xd3" + + "\x68\xea\xc0\x0b\x87\x9d\x5c\xb0\xd4\x47\x5b\x57\x49\x31\xf7\x88\xca\x7d\xd4\xe7\xda\xce\x9a\x62\xd5\x02\xe2\x03" + + "\x3b\x5c\xb3\x36\x81\x3b\x0b\x4d\xb9\x4a\x27\xb2\x47\xd0\x99\x89\x6c\x06\xaa\x9e\xc8\x9a\x62\x3e\x34\xaa\x2f\xf3" + + "\x62\xd0\x9b\xef\xb3\x68\x06\xf8\xc5\x7b\x73\xd9\xc6\xc3\xe0\x37\xff\x78\xf7\xf6\x87\xa8\xc7\x93\x89\x02\xaf\x84" + + "\xf8\xb6\x9b\x4c\xd4\xff\x67\xae\xac\x0f\x0d\x57\x88\xb4\xa9\x06\x4e\x3a\x61\xab\x7d\xf6\x28\x1b\x92\xd9\xd0\xb6" + + "\x45\x85\x66\x53\xf4\x39\x23\xd9\xc7\x16\xd5\x69\x69\x30\xcc\x3c\x16\x97\xa6\x9e\x9a\x0b\x66\x8f\x03\x86\x41\x3c" + + "\x36\x97\x2d\xad\x37\xfc\x9d\x4d\x15\x3a\x25\x8d\x44\x18\x1b\x04\xe8\xd4\xca\x4d\xa7\x1a\xc0\x2d\x71\xa0\xaa\x1a" + + "\xcd\x20\xee\x20\x40\x97\xf0\x4a\x81\x5d\x00\x25\x33\x7f\x9a\xb8\x9e\x97\xe7\xba\x5c\x43\x66\x5f\x57\x06\x22\xae" + + "\xdd\xb4\x09\x0c\x12\x51\x85\x7b\x93\xf9\x3c\xd3\xde\xa5\x4c\x54\x07\xce\x55\xbe\xae\xcb\x65\x29\xbe\xbe\x84\xf6" + + "\x13\x07\xb1\x64\x3d\x5e\xd5\x4d\x1c\xe8\x61\x17\xf5\xba\xcc\x29\x4f\x6e\xa4\xd8\x9e\xd2\x27\x57\xf5\x1a\xf8\x2c" + + "\x9d\xe7\xee\xef\x46\x81\xc2\x0c\xfd\x64\xb8\x2a\xc4\x81\x9a\xd3\x17\x6e\xdd\xc0\xa5\x00\x3e\x45\xd1\xd1\x31\x9e" + + "\x9d\x06\xa9\x7c\xd4\x6c\xf0\xb8\x41\xcd\x39\x4c\xb1\xd0\x4f\xf3\x76\x05\xfa\x19\xd2\x95\x92\x6f\x2d\x3e\xda\x8e" + + "\x01\xf5\xbc\x00\xeb\x66\x7f\xbe\x2e\x4b\x35\x2f\x4d\x7e\x0a\x39\x2d\x90\x26\x2b\xcc\xab\x8e\x86\x79\xd4\x37\xe3" + + "\x77\xb0\xd9\x4e\x6a\xb7\xe3\x04\x09\x87\x11\xfa\x6f\x51\x5b\x30\xf6\xda\x1a\xd2\x9b\x17\x56\xd5\xcb\xa2\x6d\x4d" + + "\x3e\x52\x17\x4d\xd1\x82\x74\xee\xf8\x53\xa9\xcf\x0f\x77\xc3\x3a\xce\x89\xcb\xd6\x02\x6e\x24\xf6\xcc\xf3\x8f\x0f" + + "\xc3\xd6\xf8\x76\x5d\xe0\x6d\xa7\xd3\x61\x41\x09\x69\x8b\xe8\xb3\x4b\xf4\x58\x1b\x20\x03\x5a\xe8\xc0\x54\xec\x6a" + + "\xf8\x18\x1a\x13\xe5\x3b\xed\xf4\xd4\xc9\xda\xfe\xc8\x0d\x36\xf2\x50\x98\xde\xee\x7f\x20\xec\xa6\x43\xf6\xa7\xf3" + + "\xef\xef\xf8\x56\xda\x30\xfd\xd6\x78\xa3\x8b\x4a\x2d\x4d\xbb\xa8\x73\xaa\x4e\x2e\xc4\xba\x29\xbd\x75\x35\x12\x5d" + + "\x5f\xcf\xdd\x3b\x70\xc7\xaa\x68\x9e\x47\xca\x16\xcb\x75\xe9\xb6\xfb\xaa\x31\xbb\xfb\xe3\x27\x0a\x52\x17\xb5\xeb" + + "\xc6\x6c\x27\xde\x0b\xe0\xe2\x26\x33\xfa\x33\x73\x16\xa2\x62\xd6\x0d\xc5\x42\xa2\x3b\x5c\x27\x63\x70\x38\xd2\xb3" + + "\x90\xb5\x05\x2d\x54\xbe\x4b\xdb\xf7\x64\x8d\x75\xd7\x72\x84\xc0\x31\x3c\x2f\x23\x5e\xe0\x9f\x7f\xfa\x1e\xf6\x7e" + + "\xbd\x76\xa4\xb3\x2d\x76\x91\xf9\x01\xc7\x34\x3c\x6f\xee\xf7\xcf\x3f\x7d\xef\xbf\x60\xb5\x3c\x71\x4b\x36\x52\x34" + + "\xa0\xae\xde\x7a\x2a\xdb\x7d\xe5\xeb\xe1\x74\x45\x18\xc6\x8d\x37\x10\x3e\x7a\xef\xd3\xb2\x6d\x79\x1f\x59\xf2\x3e" + + "\xf2\x5e\x8c\xea\x5c\x53\xd3\x2b\x76\xb8\x24\x78\x0f\xd0\xf4\x3b\xe9\x06\x99\x23\x74\xa7\x47\xee\x9e\xac\x7a\x85" + + "\x5d\xb9\xeb\x87\xfc\x1c\xe6\x45\x63\xfe\x0e\x45\x43\x2d\x10\x0e\x78\xae\x9b\x42\x9f\x50\xd7\x0a\xd1\x1f\xa0\x73" + + "\x8e\xd5\x04\xc5\xa5\x9f\x6c\x71\x06\xbb\x56\xbd\xf5\x0a\x13\x8d\xfb\x1d\x16\xea\xe3\x04\xb4\x1c\x36\x40\xd3\x8e" + + "\x4f\x9f\xe3\xb3\x60\xee\xb9\x04\x4f\xf8\xd0\x55\x2e\xe0\xd8\xd5\x78\xc4\x85\x55\x69\x2d\xc5\x5c\x15\x2d\x7a\x16" + + "\xbe\x78\xfb\x06\xd0\x6c\x95\xf7\x1f\x52\xb3\xba\x2c\xbd\x8f\x28\x33\x97\x2f\x5d\x65\x7d\xbd\x00\x00\xac\xa4\x81" + + "\x10\xba\x7e\x7d\xdd\x79\x87\xf9\xbb\xd4\x90\xa3\x33\x39\x9c\x2e\xed\xa4\x0f\xf2\x67\xc6\xdf\xf5\xc0\x8f\xf7\x85" + + "\x99\x9b\xa6\x31\x39\x2e\x7e\x4e\xbf\xc2\x7c\xf3\xfb\xc1\x90\xef\x0b\x4c\xf4\xfb\xa2\x53\xd2\x4f\xfc\x20\x03\xcf" + + "\xf2\xa5\x59\xd6\xcd\x55\x16\x56\xe6\x5d\xab\xdb\xb5\xdd\xcd\xc1\x41\xc6\x89\x3a\x3e\x57\x30\x2e\x32\xbc\x7e\xee" + + "\xe6\xd0\xcd\x8b\xf8\x09\xc7\xce\x57\x43\x1b\x5f\x0d\x5a\x76\x48\xb5\x00\x2c\x0c\x79\x50\x54\xed\x05\x56\x92\x33" + + "\xbe\xf3\x9e\xbf\x5c\x47\xfc\x82\xf1\x7e\x44\x0b\xef\xbd\xf2\x1a\xa4\x2a\xdf\x3b\x13\x9c\x97\x44\x4a\x37\x7d\x52" + + "\x37\xad\x5a\x1a\x6b\xf5\x29\x97\x6d\x9e\x9d\xa0\xaf\x44\x36\xd3\xd5\xcc\x94\x26\xcf\xfc\x77\xaf\xf4\x99\x51\x97" + + "\x0b\x54\x1e\x61\x33\x07\xc1\x37\x40\xe7\x57\xef\x50\x94\xdb\x1b\x09\x49\x1d\x2e\x29\xcb\x34\x42\x2d\xb4\x5d\x00" + + "\x7c\x68\x64\xa9\xc0\x80\xe5\xd8\xce\x27\x69\xf2\x99\xb9\x12\xb2\xac\x23\x60\xe0\x56\x15\x45\xf0\xd1\x38\x23\x70" + + "\x65\xaf\xe3\x4a\x68\x4f\x22\x18\xc7\xef\x0e\x90\x54\xd2\x5b\xef\x46\x05\x2d\xaa\x03\xc5\x1e\xd9\xe4\xb3\xd7\x4b" + + "\xf0\xd4\x70\x18\x2b\x4d\x92\x52\x47\xd8\xff\xa3\xfd\xe3\x1e\x65\x37\xbe\x52\x8f\xa5\x5e\xa5\xa3\x13\xd9\xf2\xdd" + + "\x49\x6b\x3e\x33\x57\x3d\x80\x00\xd1\xc7\xc4\x53\x50\x15\x3e\xca\x8b\x22\xaf\xe5\xd4\xde\xc8\xa5\xfc\x49\x5f\x48" + + "\xf4\x06\xb7\x64\xcf\xca\x32\x5e\x35\x89\x68\xd3\x01\x49\x90\x4b\x74\xb8\x61\xe6\xa6\x01\x12\x37\x69\xfe\xb9\xbb" + + "\x80\xd0\x74\x83\x4b\x80\x6f\xac\xdb\x38\xe2\x5c\xdc\x81\xbe\x4e\xfb\xa7\xbc\x23\xf9\x8f\x4f\x7c\x01\x5d\x16\x6b" + + "\x49\xdf\xf5\x1c\xc5\x23\xaa\xf4\xf8\xae\xd7\x11\xac\x76\xe7\x58\xa7\x58\xd5\x1b\x16\x8f\xb1\xe3\xd2\x59\x7a\x7b" + + "\x6e\x9a\xa6\xc8\x85\xb3\x44\x6c\xd3\x97\x53\x57\x53\xd9\x37\x64\x75\xdf\x94\x61\x7c\xf3\x6c\x08\x8b\x7d\x64\x6b" + + "\xfd\xd4\xde\xde\x41\x59\x05\x69\x95\x7d\x5b\xea\x55\xb2\x9c\x33\x0f\xd6\x4c\x5d\x8d\x8b\x48\x0a\xf1\xd7\x98\x3e" + + "\x78\x7d\x77\x0e\xc6\xe9\xe4\x3b\x64\x02\xf4\xef\x57\xbb\x6c\x75\xad\xcc\x45\x48\x40\x0b\x41\xf2\x17\xe0\x62\xad" + + "\x5b\xc7\x02\x5a\xd3\x9c\x1b\x0b\xd9\x02\xeb\xca\x08\x5d\x6f\x18\xc8\x11\xb6\xe5\xd6\xf7\x48\x75\x1f\x8f\x5c\x17" + + "\x7c\x99\x5e\x12\x90\xa8\x08\x91\x3d\x37\xb3\x35\x31\x23\x7a\xb5\x6a\xea\x55\x03\x4a\xdf\x64\x3a\x99\x6e\x8f\x75" + + "\x79\xa1\xaf\xec\x00\xdb\xc2\x47\xd8\x95\x48\x4b\x7b\xf3\xe7\x16\xf3\x39\xdc\x18\xd2\x1e\x8b\xaf\xe0\x9e\x89\xa2" + + "\xd0\xa0\xa9\xf7\x78\xc7\xcb\x65\x04\x3e\xea\x3d\x31\x18\xa1\x90\xe3\x73\xe8\x66\x8a\x16\xb9\xed\xfa\xa8\x6d\x05" + + "\x6f\xfc\x31\xb4\x3b\x10\x95\xa6\x51\xef\x5b\x79\x5d\x99\x81\xda\x1b\xf5\x95\xe9\x19\x2c\xfc\x73\x13\x92\x07\x3c" + + "\x43\x38\xfd\x5c\x72\x22\xfc\x63\xbc\x6a\xea\x65\x61\xcd\x80\xfd\x08\xc7\xcc\x80\x80\xf2\x36\xe6\x45\xc6\x3a\x47" + + "\x26\x9f\x96\x82\xac\x79\x07\xb4\x34\xae\x9b\xe2\x35\xc6\x96\xf2\xcb\xb9\x2e\xca\xd0\x25\x72\xee\x81\x00\xa3\xd9" + + "\x42\x37\x7a\x06\xea\xf1\x07\x7f\x79\xf2\xc5\xfe\x14\xa5\x58\xa4\xb3\xae\x7b\xb5\xd7\x68\xb8\xc1\xe4\x79\x08\x12" + + "\x22\x75\x3a\x9b\x1c\xd5\x40\x08\x61\x4b\x70\xab\x42\xef\x12\x55\xb4\xfc\x3d\x05\xad\xce\x75\x69\xaf\x50\x50\xaa" + + "\x08\x3c\x23\x96\xb8\x31\xe4\xe1\x8b\x69\x88\x71\x9f\x5d\xa1\xd4\xed\x4e\x8d\x17\x9f\xb8\xda\x5f\x8c\xd2\xa5\xad" + + "\xc1\xc1\xc2\x55\xe7\x6a\x06\xa1\xc4\x90\x59\x54\x9f\xeb\xa2\x64\xf6\xdc\x8e\x51\x74\x1a\x28\x10\xe4\xd0\x89\x84" + + "\xfe\x88\xfc\xf7\x87\x14\x86\x27\x30\x58\xdd\x9c\x8d\xe0\x21\xac\xb3\x78\xc3\xd3\x32\xea\xd1\xbf\xee\xa8\x6c\x32" + + "\xc9\xbc\x3f\x32\xe4\xb5\x2b\xb4\x25\xf9\x92\x21\x22\xda\x1a\x09\xaa\xb6\x6a\x65\x1a\xd5\x16\xb3\x33\xd3\xaa\x07" + + "\xfb\x8f\xf7\xf6\xbe\xc4\x7e\x13\x94\x27\xbb\x3f\xd2\xe7\xd7\xd7\xfe\x09\x27\x9d\x95\xef\xf0\x69\x68\xfa\xe5\x65" + + "\xeb\x56\x5c\xb8\x07\x30\x08\xa3\xb0\xf5\xa7\xe8\xcc\xc2\xf0\x8b\x7e\xda\x80\xa8\xf9\x09\x3e\xec\x6e\xae\x8e\xc5" + + "\xb8\xd5\x4c\x4a\x68\xec\x92\x51\x80\x8f\x02\xe0\xc8\xa3\x8e\x28\xb8\x2c\xf1\xbc\x4e\x17\xb5\x6d\xa7\x70\x90\x97" + + "\x85\x85\xd6\xb6\x83\xbd\x1d\x6a\x7d\x81\x95\xa6\x40\x51\xab\x6e\x10\x05\xac\x77\x1a\x3d\x81\x27\x38\xa9\x4b\xdd" + + "\xbf\x3f\xc0\xa0\x0c\x0f\x3b\x42\xbf\x71\x69\xef\x1f\x1c\xf4\x2c\xf8\xf5\x35\x97\x79\xdc\x5b\xe6\xb1\xb4\x27\xfa" + + "\xfa\xbe\xc0\x2f\xa3\xfa\x41\x1b\x00\x69\x8f\x33\x75\xa8\xb2\xaf\xf7\x32\x35\x55\xd9\x97\x5f\x7e\x81\x50\x25\xf7" + + "\x0f\x0e\x98\xa6\xa5\x8a\x7f\x5f\x5b\xb7\x7b\x77\x54\x8a\x7b\x3b\x4d\xc5\xc8\x3a\x53\x8c\x37\x9b\x47\xf9\xc6\xb5" + + "\xe0\xf9\x68\x45\xa0\x18\xb8\x1a\xc8\x50\x34\xc2\x93\xad\xe7\x5c\xa2\x37\x38\x83\xde\x1d\x08\xb5\xa5\xf6\x9b\x70" + + "\xe4\x76\x74\x50\xe8\x77\x53\x46\x82\xd9\x6f\x25\x43\xfc\xb6\xee\x70\x99\x0f\x85\x47\xca\x0a\xb7\xf9\xe0\xdd\xbd" + + "\xed\xd5\x3b\xbc\x65\x2f\xb4\x45\xe1\x08\x61\x15\x8a\x1c\x37\x2b\x55\x34\x52\x90\x86\x19\x30\x2f\xc3\xa4\xf4\x48" + + "\x1f\x9c\x16\xd3\xb5\x94\x0c\xe4\x17\x03\x1a\xd6\x79\xd1\x98\x54\x3d\x61\x55\xed\x16\x00\x34\x17\xda\x9e\x81\x0d" + + "\x72\xfb\x5e\xa4\x9e\x00\x31\x13\x3f\x0b\xfd\xff\x05\xb8\x79\x0c\x34\x74\x4c\x8a\x35\xad\xaa\xfd\x98\x42\xae\x1a" + + "\x59\xcf\xc3\x87\x5e\x3b\x01\x16\xb1\x9d\x1d\x42\x2b\xf7\x9e\x2c\x42\xf2\xf6\x20\x00\x19\xa8\x32\x5a\xdd\xb4\x59" + + "\xba\x40\x3f\xaf\x56\xe8\x1b\xe4\x53\xb9\x45\xd4\x0d\xff\x18\xb7\x35\x94\xf3\xfc\x36\x7d\xfc\xc2\x91\xf4\x65\x51" + + "\x19\x11\x83\x02\x61\x66\xc4\xc0\x62\x55\x0b\x6d\x43\x8c\xe9\xfd\x10\x71\x4a\x16\x32\x6a\x4b\x54\xfb\x4e\x13\x72" + + "\xe9\xcf\x3f\x7d\x2f\xdc\xa5\x3e\x07\x3d\xd0\x95\xf7\x0c\x75\x25\x5e\xcf\xbd\x0d\x70\xf7\x5d\x51\xcd\x58\x5f\xad" + + "\xab\x7c\x52\x37\xee\xf5\x0f\x75\x65\x76\xdf\xc0\x54\x93\x91\xb0\xd4\xee\x22\x42\x55\x09\xeb\xc8\x60\xa8\xa8\xcd" + + "\xa3\x1a\xde\xd4\x4d\x50\xd9\x81\xa6\x8b\xc3\x42\x79\x81\xb0\x17\x55\x2d\x47\x4b\x5c\xb7\x1c\xf3\x50\xda\x3a\x5e" + + "\x53\x48\x77\x61\xc3\x35\x38\xa2\x20\x18\x7c\xd3\xd6\xee\x1e\x84\xf2\xf2\xf0\x7a\x7e\x49\xf4\x98\x48\xa7\xda\x71" + + "\x7f\x62\x18\x3d\xfb\xaf\x72\xa1\xa1\x23\x29\x0f\x81\xa2\x1c\x66\x70\x87\x72\x7d\x01\x70\xfd\xc1\x37\x5f\x7d\xfd" + + "\x78\xca\x88\xb1\xf0\xd6\xd6\xc8\x20\x17\xed\xe7\x16\x68\xcb\xda\xc2\xc9\x02\x73\xbd\xdb\x5a\x6b\xf0\xd4\x6b\x1b" + + "\x82\x2c\xa2\x6c\x54\x58\x77\x07\x6f\xd0\x31\x2a\x42\x43\x59\x54\xc8\x6d\x44\xea\x04\xbe\x3a\xa0\x44\x37\x63\x9d" + + "\xe7\x13\x9a\xd6\xf6\x8c\x31\x02\xe9\x62\x74\x5b\x37\xc7\x9e\x24\x7e\xfe\xdb\xe7\x81\x0b\x01\x9d\x79\x48\x41\x4d" + + "\xdf\x72\x85\x82\x8f\x68\xed\x48\x65\x9f\xed\xff\x76\x90\xa9\x1d\x44\x31\x00\xc4\xb0\xa9\x6c\x4f\xc4\x32\xe5\x39" + + "\x1a\x51\x08\xd9\x96\xe3\x9a\xc2\x9a\xed\xfc\x89\x85\xca\xa2\x56\xbb\xa8\xab\x94\xae\xb2\xf7\x14\xdc\xb6\xff\x47" + + "\xa0\x4b\xac\x54\x31\xf7\xd6\xf3\x65\x9d\x9b\xb1\xb8\x2e\xc4\xab\x3e\xac\x1e\x69\x4c\x3f\x0a\x43\x10\x9e\x13\xc4" + + "\x15\x27\x82\xfe\x40\x65\x9d\x9e\x66\xa3\xbb\x6b\xed\xb8\x00\x33\x91\x6b\xf5\xe9\x9f\x6f\x3f\x4c\x48\x68\xbb\x5b" + + "\xd3\xad\xf3\x0d\x5e\xb9\xb3\x56\x4e\x28\x9f\xea\x13\xe3\xc8\x84\x95\xe4\x40\x5e\xbf\x82\x2e\xc0\x6f\x61\xcf\x47" + + "\xe4\x7a\xd8\xf5\x82\x89\x94\x05\x22\x6f\xc5\xbe\xd1\x45\x7e\xf6\xa3\xa4\xfa\x94\xf2\xf3\x60\x9e\xa1\x81\x9d\xa9" + + "\x23\x3b\xa3\x83\x60\xdc\x8c\x14\x4a\xfa\x6e\x50\x75\x95\xc6\x72\x6f\xea\x09\xf4\x32\xc3\x8a\x49\x1b\xd9\x89\x0f" + + "\x82\xe1\x93\x71\xff\x48\x7a\xb6\xa2\x7f\xf8\x21\x1f\xfb\xcd\x45\x76\xd4\x40\x75\xaa\x65\xef\xbe\x43\x4c\x59\xb0" + + "\xe3\x7d\x05\xdc\x89\x7a\xaa\xfe\x79\xb0\x37\xde\xdb\x87\x63\x26\x12\x37\x88\x56\x20\x4a\xc9\x3d\x15\xf7\x11\xba" + + "\xf0\x83\xb7\x0a\x69\x1c\x03\xca\x1c\x2a\x23\x0a\xf4\x95\x5d\x24\xca\xca\x4d\x0b\x55\x8c\x42\x61\x40\x36\xeb\x4b" + + "\xb5\x5d\x5f\xb0\x09\x97\x4a\x4e\x96\xc5\xd2\xa0\x81\x1d\x42\x5f\x74\x53\x5e\x21\xd7\x23\xb6\xda\x89\x99\xd7\x8d" + + "\x79\xe7\xae\x13\x50\xf3\xcb\x27\x84\x26\x9b\x68\xed\xbd\x17\xb4\x25\x60\x3f\xbf\x07\x63\x16\x49\x44\xb6\xa2\xca" + + "\x99\xd8\x4e\x27\xeb\x06\x42\xeb\x9d\xad\x3a\x0c\x15\x49\xf7\xe9\x48\xe1\x29\x20\x25\xb8\x9b\x46\x95\x75\x75\x6a" + + "\x1c\x47\x84\xda\xec\xd2\x67\x74\x95\x9a\x6e\xf8\x26\x13\x9c\x60\x65\x5b\x5d\x96\x41\x79\xe2\xf6\x6a\x24\xe4\x8b" + + "\x65\xfa\x43\x91\xb4\x3e\x55\xfb\xde\x8b\x6a\x7f\xe4\x45\xfc\xa9\xda\x57\x37\xa9\x67\x70\xa1\x8e\x07\x6a\xc3\x5a" + + "\x01\x22\xa1\x00\x8a\x08\x0a\x0d\x40\xb6\xbc\x95\xd9\x0d\xe6\xce\xbb\x99\x5d\x76\x6d\x00\x2b\xa0\x13\xca\xf4\xba" + + "\xad\x77\xe3\x0d\x70\xbf\xab\x61\x41\x95\xc9\xee\xfe\x08\xfc\xc3\x7c\xe3\x59\x5f\xd2\x56\x5c\xa8\x60\x1a\x50\x07" + + "\x6a\x5f\xb8\xe5\xc2\xb6\x92\xdc\x6f\x20\xc9\x92\x49\xf5\x64\xb8\x6b\x87\x0a\xb8\x54\xc8\x93\x9a\x2a\xcf\x46\xea" + + "\x28\x6c\xc1\x84\xdc\x4f\x26\xea\x3d\x9a\x16\x25\x97\x00\x5e\x51\x48\x41\xd8\x16\xf9\x37\x89\x56\x2e\xad\x91\x8e" + + "\xb3\x33\x2d\x55\xd2\xcd\x06\xe1\xf5\x6b\xb0\x39\x33\xfa\x32\xf3\xa1\xc3\x23\xd1\x46\x82\x05\x2c\x3c\xfd\xac\x98" + + "\xac\x58\xa5\x65\xc1\xca\x1e\x2b\x8c\x47\x78\x66\x3c\x6e\x73\x8f\xfb\x1f\x84\x77\xd7\x2b\x7d\xea\xea\x0d\x28\x10" + + "\x9a\x5c\x1e\xe5\xd9\xc3\x0f\x36\xea\x4b\xc3\xf2\x1b\xc9\xf4\xbd\x2b\x96\x2b\x48\x28\x8b\x58\x13\x35\x33\x31\x34" + + "\xec\x58\x63\x89\x65\xfa\x73\x19\x33\x8d\x64\x0d\xab\x3b\x69\xa0\x35\x30\xe7\xa6\x21\x87\x9e\xc2\xfa\x9e\xfa\xa0" + + "\x0c\xec\x17\xea\x0c\x47\xaa\xd2\x4e\x9a\x79\xe7\x35\x88\x22\xde\x6e\xa4\x52\xb2\x0a\x11\xd2\xec\x41\x3f\xe2\xe3" + + "\x4c\x67\x59\x86\x77\x2c\x89\x9d\x18\x6d\x0b\xdd\x34\x69\x2b\xd3\x16\xa5\xf7\x39\x60\xc3\x80\x7d\x4f\xec\xba\x3e" + + "\x6b\x55\x1f\xae\x37\x29\xc9\x81\xff\xcc\x72\x00\xd1\xad\xea\x0b\xbc\x04\x69\x9b\x3c\x96\x8d\x95\x46\x37\xde\xa4" + + "\x8e\x66\x5e\x48\x3e\x6f\x43\xdb\xd1\x7e\x0e\x92\x80\xfb\x92\x37\x76\x52\xa6\xd3\xa5\x17\xa6\x31\x90\x8c\x67\x66" + + "\x84\x16\x76\x0e\x10\x05\xee\x1e\x39\xd5\xcd\x89\x3e\x35\xa9\x25\x79\x32\x51\x83\xaa\x56\x4b\x0d\x79\x97\x16\xf5" + + "\x05\x10\x68\x11\x73\x43\x3a\x42\x40\xf7\x20\xe0\x96\x21\x9d\x8e\x40\x04\xa5\x5f\x44\x98\xe4\x99\x08\xe9\xb9\xdb" + + "\x25\x41\x1d\xf8\x7d\xc0\x89\x1a\x02\x59\x6a\x55\xa0\x59\x9b\x08\x19\xa9\xcb\x01\x4d\x4f\x7d\x29\x61\x84\x53\x49" + + "\x96\x36\xd4\x7c\x4d\x62\x98\x0f\xd6\x08\x95\x1c\xa8\xc7\x7b\x7b\x40\x81\xf0\xc1\x5f\xd5\x17\x7b\x7b\x7c\x67\xae" + + "\x2d\x26\x94\xdd\xfb\x52\xb4\xf0\x77\x23\xc2\x19\x1c\xd3\x12\x96\xb7\x1b\x5f\x27\xfd\x86\x3f\x3d\x2e\xb5\xb3\xe8" + + "\xac\x25\x0a\x2b\x78\xe1\xa4\xba\x01\xc8\x76\x17\xfa\xaa\x2f\xa2\x0a\x7d\xa9\x2f\x34\xb8\xff\xb5\xc3\x68\x41\xa8" + + "\x37\x9f\x1a\x4b\x95\xc0\x9a\xfb\x59\xe5\x7c\xd8\xa8\x61\x9d\x2d\x74\x51\x45\x20\xe6\x49\x38\x56\xa0\x59\xff\xdd" + + "\xe2\xce\x6d\x02\xcf\xd6\x16\x53\x0f\xaf\xb8\xef\x89\x6c\x8d\xbc\x90\xb3\xd8\x14\xb9\xec\x56\xb9\x75\x97\xac\x73" + + "\xe0\xbf\x4a\x2d\x1f\x9f\xd2\x1b\x27\xc6\x7c\x7a\x27\x3a\x42\xcf\xc6\xc6\xa5\x23\x3f\xdc\x3c\x52\xe5\x21\xe8\x23" + + "\x6d\xfc\xc7\x7b\x5f\x06\x5d\x37\xea\x37\xbf\x7b\xf9\xec\x85\x84\x1f\x89\x48\x71\x56\xd5\x54\x5f\xf6\x34\x6d\xa9" + + "\xf5\x7d\x8a\x6e\xa6\xb4\xc9\x2f\xf6\xbe\xbc\xa5\xf6\x96\xeb\xc8\x92\x60\x1b\xd6\x6c\xa3\x2a\xb3\x34\xed\xe7\xd6" + + "\x67\x40\x20\xdc\xd6\xf4\x2e\x8c\xea\xe6\xdd\x0f\xb6\x38\x6f\xcf\x0c\xd6\x20\xff\x3e\xe8\x45\xb6\xb6\xd8\x1a\xe4" + + "\x5f\xc2\x03\xbf\x6a\x82\xda\xdc\x97\x6f\xe8\xda\x8d\x7a\x83\x8a\x49\x43\x46\x04\xac\x18\xdc\xfe\x43\x2f\x7d\xc1" + + "\x16\x41\x89\x9b\xa5\x2e\x01\x8b\x35\x8c\x03\x8d\x4c\x30\x97\xe0\x3a\x5f\x57\xc8\x55\x92\x0d\x92\xfb\x6b\xe5\x5d" + + "\x99\xae\xfb\xf5\x35\x1a\x9b\x3b\x56\xc2\x78\x2d\x30\x78\xa1\xe3\x06\x02\x14\x34\x4a\x4a\xc7\x6b\x1b\x52\xe5\xa5" + + "\xb1\x09\x92\xfa\x83\x80\xcd\x92\xeb\x9c\xbc\x5e\xa4\x5b\x57\x64\x31\xe5\xa1\x3c\xed\xbc\xa2\x6e\x0e\x3a\xdc\x41" + + "\x20\xed\x34\xbc\x9d\xe4\x0a\xc2\x35\x9b\xbc\x74\xe3\xdb\x48\xc9\xb6\x84\xdf\xd3\xb8\x31\xb6\x2e\xcf\xcd\x2f\x45" + + "\xbb\xe8\x91\xc9\x8e\x02\x5b\x63\x05\x57\x84\x97\xee\x71\x7f\xce\x0f\x51\xb5\x1b\xf8\xc6\x9a\x99\xd9\x16\xf5\xe2" + + "\x1a\x1f\xf7\xdc\x21\x77\x18\xfc\xe5\xec\x3d\xaf\x73\xcf\xd2\x81\x37\x15\x5b\x71\xa4\xbb\x55\x87\x17\xf8\xd7\xc4" + + "\x87\x30\xb3\x87\x24\x4a\x50\x34\x8a\x13\xed\xc1\xc1\x15\xc3\x64\x68\xf3\x84\x41\x8f\xa2\x4f\xf9\xa8\x4e\x6f\x99" + + "\x81\xe7\x24\x18\xc2\xef\x8e\x21\xd8\xf5\xfc\xd3\x67\x9a\x1a\xf8\xaf\xca\x4d\xdc\xa5\x0d\xb2\x93\xb0\xee\xba\x03" + + "\x41\x12\xdb\xb3\x7f\x3c\xfb\x55\xcd\x30\xf6\x46\x1c\xe0\xfb\x03\xb5\xbb\x1b\x19\x15\xa2\xfc\x6e\xb7\x19\x14\xea" + + "\x55\xd6\x8f\xb1\xb4\x7d\xaf\x6b\x4c\x21\xcf\x83\x53\xd3\xfe\xe3\xdd\xdb\x1f\x3a\x0e\xbc\x48\x82\xbd\xa3\x46\xec" + + "\x4c\x4d\x9d\x80\x64\x48\x3d\xa5\x47\x2a\x03\xbf\xfc\xc8\x63\xf9\xd4\xb4\xef\x20\x44\xa3\xd3\xd4\xa7\x36\x22\x92" + + "\xaf\x88\x96\x28\xee\x23\x45\xba\x8d\x60\x91\x8e\x30\xad\xd3\x48\x65\xab\xda\xb6\x31\x7a\xba\x2a\x46\x6c\x6b\x96" + + "\x40\xea\x47\xfc\x30\x06\x89\xee\x1d\xad\x74\xf5\x99\x4c\x14\x44\xed\x05\x54\x5f\xaf\x8e\xe4\x27\x98\xe7\x0d\x1d" + + "\xdd\xb7\x6f\x81\x30\x23\x43\x03\xaf\xbd\xc8\x55\x29\x9d\x42\x71\xc1\xfd\x1c\x62\x48\x71\x00\x6a\xdb\xe4\x06\x1d" + + "\x4f\xb2\xdb\x3f\x03\x11\x25\xe0\x86\xe9\x1b\x9d\xd2\x54\xc4\xe0\x6d\x53\x04\x5a\xf1\xcf\x30\xaf\x1b\x69\x17\x59" + + "\xa3\xc3\xdd\xda\x0e\xa9\x69\x9e\x4a\x34\x7c\x72\x00\xd1\xea\x64\x5d\xcd\x16\xaa\x9e\xfb\xa9\xc6\xbb\xcf\x1b\x7a" + + "\x28\xc1\x15\x9c\x19\x34\xf4\x75\x97\x38\x58\xd5\x46\x2a\x9c\x88\x51\xe7\x88\x4a\x7a\x14\x13\xab\x91\x50\x83\x74" + + "\x36\x89\x58\x65\x01\x24\xde\x32\x20\x97\xc4\xe9\xbe\x0d\x77\x5a\xc0\x32\xcb\x0c\xee\x54\xe5\x6f\xe6\x5c\x97\x3f" + + "\x83\x69\x25\xda\x74\x31\x24\x72\x67\xd5\xa2\x45\x4b\x23\xe2\xc2\x8a\xf1\x61\x91\xb1\x6c\x21\xe4\x8b\x63\xe0\xc2" + + "\x13\x8e\xc2\xf4\x31\x22\x37\x12\x76\xb9\x17\xb5\xfc\xa2\xd1\xab\x67\x65\x94\x33\x0e\x02\x82\x04\xbe\x99\x2b\x72" + + "\x07\x7a\x1f\x7d\x92\x18\x82\xff\x5c\x52\x53\xea\x09\x56\x16\xe5\x33\xbd\x2d\x85\x3b\x66\x40\xf6\x90\x1c\x7c\xe9" + + "\xbc\x0f\x59\x20\x21\x62\xc0\x55\x8e\x26\x5a\x8c\xcd\x40\xf4\x6b\x28\x0d\xaf\x42\x8e\x13\xd7\xfa\x28\x54\x3b\xae" + + "\x2f\x2a\xd3\x78\xd8\xe3\xe1\xd8\xfc\x73\xe0\x58\xad\xf1\xac\x04\x0d\x0c\x46\xd7\x76\x52\x99\xe1\xb7\x21\x2f\x4b" + + "\x18\xb5\x6b\x6e\x8c\x31\xcb\xdf\x82\x6a\x39\x1a\x43\x7c\x7b\x42\xd9\xa5\x5e\xf5\xe8\xdd\xdc\xc2\x88\x7c\x7d\x9d" + + "\x7c\x20\x90\xba\x00\x20\x57\x08\xf2\xf3\xf9\xa2\x28\xf3\x24\x4d\x06\x27\x26\xe9\x94\x7b\x9a\x08\x2e\x22\x79\x02" + + "\xaf\xc4\x18\xad\xae\xbc\x7c\x3d\xb4\x2a\xc9\xf6\xeb\x06\xf3\xba\xaa\x62\x87\x55\xb9\xd7\xfe\xa7\x37\x17\x34\xfe" + + "\xe9\xdb\xeb\xee\x54\xb8\x04\xfe\xb7\x31\x4d\xad\x84\xac\x32\xe5\xdc\xa3\x56\x0d\xe2\xfd\xc2\x8f\xd3\xd4\x8a\xfe" + + "\xfb\xf8\x68\x84\xdd\x16\xb3\xaf\x98\x13\x96\x16\xc5\x17\xec\xcd\xc6\xe9\xea\xbb\xed\xc4\xdf\x95\xf3\x2f\xea\xc6" + + "\x27\xad\xc7\xa6\xb3\x2e\x5a\x3a\xec\x5b\x99\xa9\x1c\x49\x34\x86\x75\x95\x8c\xa2\x87\x86\xe3\xf9\x1b\x0c\x6f\x4b" + + "\x65\xdc\x4d\xaa\x44\x09\x4e\x4f\xea\xfc\x2a\x93\xbc\x5c\x27\x6b\x3c\x98\xb9\x91\x79\xc5\x64\xaa\xee\xe8\xb8\xd3" + + "\x6e\x93\xa9\x1f\xbb\x35\xe9\x40\xfb\xfb\xf0\xee\x55\x33\x26\xeb\xc6\x78\x51\xe4\x39\xa4\xc0\xef\xcd\x8e\x22\x01" + + "\xea\xdf\xae\x4c\xa3\xd5\x5f\x0f\xd4\xfe\xe3\xf1\xfe\x63\x7c\x89\xcf\x1a\x83\x01\x60\xf5\x7c\x6e\x4d\xfb\x4b\x91" + + "\xb7\x0b\x34\x79\xe1\x83\xef\x4c\x71\xba\x68\xad\x02\x04\x80\x76\xa1\x2b\xf5\xbb\x69\x6a\x55\x57\xca\xd6\xcb\x40" + + "\x35\xc3\xed\x85\xb9\x8b\x42\x65\xae\x51\x50\xde\x89\x17\x58\x29\xbc\xa1\x1b\xa7\x6f\x74\xe7\x85\x05\xb0\xac\x0d" + + "\xc3\x63\xbc\xc5\xcd\x13\xc3\xc5\xc5\xad\xb6\xcd\x79\x10\x1e\xef\xa9\x03\x35\xf9\x7f\x1e\xef\x4d\x20\xfe\xaa\x39" + + "\x69\x34\x38\x1d\x1e\xa8\xc9\x87\xa3\x0f\xc7\x84\xc7\xfe\xfc\xa7\xef\x5f\x61\x16\xd5\xc3\x0f\x15\x95\xc4\xcc\x26" + + "\xad\x69\xd8\x5d\x10\x90\xdc\xf1\xe9\xf5\xc9\xba\x6d\xeb\xea\xba\x58\xea\x53\x40\x80\x37\x2d\x80\xc1\x0f\x3f\x9b" + + "\x14\xf2\x63\x8d\xe3\x82\x2f\x01\x96\xe3\x1a\xa1\x1f\xaf\x9d\xf8\xa1\x1b\xa3\xaf\xcf\xcc\xd5\xa9\xa9\x86\x93\x02" + + "\x3a\xee\x15\xf9\x27\xeb\xa2\xcc\x7f\xd4\x8d\x5e\xb2\xf3\xd6\xe5\xc8\x89\xde\x23\x25\x1c\xc3\x46\xe0\x1c\x11\xd0" + + "\x95\xc8\x9d\x9e\xa1\x88\xd2\x24\x40\xf5\xc9\xc7\xb0\x71\x41\xc6\x47\x9c\x75\x43\x49\xb9\x8a\xd6\x2c\x41\x83\x17" + + "\xb1\x64\xd0\x68\xc4\x42\x9d\xc7\xfe\x0b\xd2\x53\xed\xfa\x5a\xf1\x0c\x93\x2f\x06\xf6\x5d\xc5\x20\xbb\x98\x2b\x13" + + "\xc0\x87\x42\xd3\x18\x24\x6c\x67\xba\xd4\x0d\x29\x12\x75\x9e\x87\xd1\x9f\x6f\x22\x71\x93\x89\x7a\xed\xbe\x27\xf4" + + "\x1a\xac\x41\x0d\xb0\xe6\x9a\x35\x16\xc3\x91\xc2\xf8\x7d\x70\x51\xa9\xd6\x4b\xd3\x14\x33\xcc\x0f\x47\xad\xf5\xcc" + + "\xb9\xda\x51\xd9\x51\x06\x46\x71\xce\xb7\x19\x47\x2f\x1e\xaa\x82\xcd\xde\x3b\x2a\x3b\xce\x46\xea\xbc\x6f\x89\x52" + + "\x92\x1b\x90\xe3\xbc\x81\xd1\xcf\x61\xf0\x46\x73\x4d\xf2\xb2\xf5\xc5\x4c\x46\x6b\xc8\x91\xbc\xbc\x88\x68\x9c\x85" + + "\x20\x8a\xa2\xa2\x4a\x70\xc2\x6e\x1b\x67\x45\x69\x8d\xdd\x48\xea\x93\x8f\x1c\x85\xb1\x71\x4c\x37\x72\x2c\xdd\x4e" + + "\xd1\x5a\xf8\x4e\x45\x0b\x0a\x7d\x8a\xd0\xcd\xa2\x3d\xc9\xb9\xe2\x9c\x38\x51\x37\xcb\xc0\xb8\x81\x6f\x1f\xfa\xf5" + + "\xc1\x37\x67\xe6\x6a\x42\x79\xc8\x30\xd0\x58\x61\x64\x1d\x3b\x6c\x4a\x17\xcb\x88\xc8\xe8\x68\x58\xe2\x20\x51\x0f" + + "\x5d\x8f\xdd\xc1\xa7\x24\x8c\x6e\xd4\x07\x71\x38\x56\x1a\x55\x83\x0a\x50\x9f\x97\x4c\xfb\xd2\x23\x55\x54\xe7\xf5" + + "\x99\xdb\x7c\x12\x3b\x25\xf6\x96\x8a\x13\xeb\xf5\xe5\xd3\x55\x87\xf8\xd7\x60\x08\xf0\xa4\xb7\xa4\x5b\x65\x2d\xd1" + + "\x91\xf2\x1c\x84\x93\x6f\xf0\x08\xfc\xfc\xd3\x6b\x27\x49\xd5\x15\x80\xbe\x63\x58\xd9\x8e\xca\xc0\x35\xaa\xaf\x84" + + "\xac\xf2\xc6\xe3\x88\xbd\x43\x13\xbd\x9f\xbf\xb6\x46\xbe\x37\x40\xb0\xc3\x45\x34\xfe\x62\xfc\x18\x13\xba\x15\x35" + + "\x1c\xec\x0e\xd5\xe8\xc5\xc2\x8c\x0a\xf4\x46\x69\x0b\xb7\x4d\x19\x5a\x2e\x3e\x4c\xf1\x04\xfd\x9e\x82\xfc\xea\x98" + + "\xe9\xbd\xa8\x46\x4a\x5b\xbb\x5e\x1a\xf6\xce\xa3\xd8\xe6\xfe\xdd\x37\xde\x44\x5d\x35\xba\x83\x0f\x94\xe6\xc8\xce" + + "\x87\x0f\xfd\xa5\x55\xd8\x1f\x4b\x5d\x54\x6f\xe1\x8c\x62\xd9\x7e\x4a\xdc\x22\xd2\xca\x52\x5e\xb8\x31\x3d\xd6\x9d" + + "\x9c\x71\x74\xac\x30\x19\x2e\x84\x7a\x89\xd4\xb2\x82\x47\xea\x1e\xd4\xd7\xf3\xf8\x5c\x13\x81\x74\x9d\xc8\xea\x32" + + "\xcf\xc0\x9c\x35\x80\x74\xf7\xfa\x8a\x56\xd2\x11\xd4\x92\x62\xa7\x26\x13\x95\x17\x90\xd8\x7e\x14\x8c\xdd\x5c\x0b" + + "\x9c\x37\xab\x1a\x33\x5b\x37\xb6\x38\x37\xe5\x95\xa0\x4b\x44\x76\x20\x72\xe8\x16\xba\x34\x52\xfa\x88\xcb\xde\x4a" + + "\x84\xc2\x32\xff\x14\x70\x1e\x1b\x63\xd7\x65\x8b\xae\x63\x22\xa5\x48\xe0\x29\xec\xf8\x63\x5d\x54\x03\xf0\x11\x94" + + "\x31\x10\x8f\xf7\x46\x88\xec\xee\x39\x8a\x5e\x29\x99\x6b\x35\x1b\xf9\xcd\xd8\xbb\x1b\x96\xc5\x7f\x84\xfb\x66\x28" + + "\x92\x55\xc5\xaf\x6e\x67\x62\x7b\xe5\x3f\x8c\x3e\x82\x99\x59\x35\xf5\xea\xbb\xba\x46\xd7\x81\x8c\x77\x13\xa0\x15" + + "\x51\x42\x04\x47\x46\xf3\xbc\xbb\xdb\xbc\x10\x49\x42\x0a\x8f\xa1\xa9\x57\x9e\x0b\x0e\xf5\x11\x9d\x11\x4c\x21\x7c" + + "\x76\xd8\x93\xbe\xd2\xbf\xe4\xc4\x57\xb4\x35\xdd\x7f\x89\xa3\xeb\x97\xa6\x58\x67\xc6\xd9\xa0\x85\x89\xe0\x67\x6b" + + "\xd4\xb8\xb0\x03\x95\x4d\x65\x2a\x55\x76\xb5\x45\xf3\xab\x69\x8f\xf8\xe5\x31\xa0\xed\xd9\x8e\xc8\x08\xd7\x5c\x38" + + "\xb0\x9e\x9d\xef\x56\xcd\x31\x12\x92\xc5\x23\x5e\x27\x4a\x47\x0d\x45\xd5\xfd\x84\x8d\xe4\x92\xa8\x85\x0a\xf1\x16" + + "\x24\x29\x60\x1a\xc6\xeb\x6b\x75\xbf\x81\x1f\xae\x72\xc8\x22\x10\x7d\x36\x94\x13\x17\x6d\x04\xc7\x9e\x45\x79\x13" + + "\xd3\x6c\xcf\x71\x96\x73\x9e\x48\x91\xe1\xf9\x20\xce\xf0\x8c\xc1\xb0\x52\xd2\x49\x73\x86\x1f\xc6\x2a\xed\x0d\xc9" + + "\xc2\x63\xfc\x2f\xc2\xbc\x42\xe0\x23\xcc\xef\x1f\x42\x54\xe1\x06\x13\x87\xd1\xf1\xe6\x23\x95\x7d\x68\x3e\x54\x6e" + + "\xfe\x7d\x50\xf2\x4d\xc8\x7e\xff\x5f\xaa\xea\x66\x08\xda\xe9\x4d\x82\x58\x74\xb7\x5c\x2e\x1a\xc9\x02\xe0\xa0\xbc" + + "\xcb\x12\xa7\x0f\x33\x17\xea\xd7\x37\xdf\x7f\xd7\xb6\x2b\x72\x51\x1c\xc8\x14\x5f\xe4\x92\x74\xc3\xa4\x05\x52\x96" + + "\x2d\x9a\xd7\x39\x47\xa7\x5f\x2e\x9a\x00\x82\xc0\x81\xed\x97\x8b\x86\xf4\x9b\xef\xd8\xde\xc6\x54\xdc\x09\x1e\x21" + + "\x66\x8d\xdc\x0c\xae\xd0\xf1\x80\x8c\x73\x40\x90\xf7\xfc\x45\xf7\x78\x6f\xcf\x7d\xbb\x37\x75\x7f\x31\xc0\x6a\x92" + + "\xe4\x0c\x9c\xd8\xf7\xbf\x7c\xb2\x37\x05\x09\xb0\x2d\x96\xc6\xaa\xd7\x2f\x3d\x06\xf8\xfe\xe3\xc7\x5f\xa0\x4f\x52" + + "\xc1\xe0\x36\xea\xc4\x55\x0d\x91\x5c\xee\xed\x94\x7e\x84\xfe\x43\x03\x12\x73\x20\x9d\xdc\x81\xd7\x29\xc7\xbd\x41" + + "\x29\xb6\x0a\x51\x02\x90\x27\xe8\xc4\xa8\xa5\xae\xd6\xba\x64\x97\x4d\xf0\x2f\xe2\x4c\x98\x83\x07\x4f\x1e\x7f\xbd" + + "\x37\xdc\xbe\x07\xd7\x35\xa5\xf2\x79\x06\xb6\x98\x5f\xf1\x22\x8e\xf4\xc0\x5c\x44\x0d\x41\xc9\x9b\x61\x2d\x59\xf7" + + "\xb6\xc5\x0b\x8c\x40\xec\xdd\x0d\x16\xad\x17\xef\x73\xf9\x90\x10\xe2\x07\xe2\xb6\xf2\x08\xfd\x3e\x49\x6a\x0d\x31" + + "\xf7\xf7\xef\x47\x13\x05\xde\xa6\xd9\x45\xd1\x2e\x9e\x37\x26\x47\x90\x56\x9b\x51\xa3\xa1\x98\xab\x8d\x2b\x02\x30" + + "\xf8\x03\x95\xcc\x77\x5c\xef\xd3\x64\x7f\x7b\xff\x45\x41\x49\x22\xec\x17\x8c\x2e\x0e\xb6\x0a\x06\x17\xaa\xad\x55" + + "\x14\xe8\x06\x50\xa6\x8c\x17\x08\xfe\x3e\xdc\x3a\xe7\x11\x8f\xcf\x04\xf3\x51\xd1\x04\x5c\x5f\xab\x74\xfc\xf7\xbd" + + "\xd3\xb6\x08\x5a\x8b\x2f\x44\x0a\xa9\x32\x71\x86\xca\x05\xfb\x05\xfa\x88\xd3\x48\x4d\x5a\xb0\x15\x13\xcf\x34\xb7" + + "\x02\x9b\xd0\x67\x58\x76\x53\xb7\xb3\x03\xa7\xd3\xeb\x52\x2f\x17\xcd\xb8\x5e\x99\x30\x45\x63\x34\x08\xf0\x2f\x89" + + "\x9c\x83\x4e\x95\xe2\x1d\xc1\xbd\x85\x27\x8c\xf6\x16\xa7\x72\x21\x60\x47\xf4\x54\x26\x1f\xa2\x04\xfb\x96\xb3\x65" + + "\x87\x7e\x23\xac\x59\x07\xc3\x14\xfc\x73\x6f\x2b\xe6\x46\x84\x4e\xb8\x07\xdd\x72\x51\x8e\xe8\x1e\xcf\x15\x0e\xb4" + + "\x57\xcb\x62\x49\xbe\x47\x09\xa4\x45\xd4\x4d\x1f\x27\xff\xf0\xa1\x82\x89\x4c\x62\xef\x45\xb7\xfa\x5e\xf7\x54\x34" + + "\x4c\xb5\xd2\x93\x89\xfa\x75\xf7\x27\xce\xdd\xb3\xfb\x4b\xd1\x2e\xa2\x70\x7f\x42\x03\xeb\x8b\xd2\x84\xfc\x9b\x10" + + "\x6b\x80\xe1\x56\xc8\x6c\x52\xe6\x3b\xe0\x43\x4b\x50\x68\xe9\xc6\xf8\xba\xf4\x59\x01\x81\xad\x5a\x7d\x2c\x4e\xad" + + "\xbe\x50\xab\xf5\xef\xbf\x97\x06\x7c\x89\x2d\xfa\x83\x56\xe6\xdc\x34\x14\x1d\x43\xa0\x3b\x76\xdd\xb0\xb7\xd4\x64" + + "\xa2\x06\x45\x8b\x50\x63\x48\xbb\x4f\x0c\x8a\xb7\x8e\x39\x5e\x99\x66\x97\x83\xc0\x4e\xb4\x2d\x40\xfc\x35\xe7\xa6" + + "\x52\x6b\x2b\x70\xa8\xd6\xab\x61\x34\x3a\xab\x97\xa6\x3b\xb8\x0b\x48\xc5\x4e\x09\x7c\x29\x34\xa1\x98\x7b\x3f\x73" + + "\xde\x5e\xd2\x8d\xab\xf7\xf8\xb9\x63\xc9\x9e\xf6\x59\x3a\xd9\x99\x04\xfb\xbc\xad\xd4\x81\xca\x62\x92\x90\xf5\x2c" + + "\xa5\x13\x32\xa5\x1b\xa3\xdc\xd4\xa9\x0b\x2b\xee\x99\xde\xc8\x80\x9e\xb8\x80\xb8\x9d\xe7\xc2\xc6\x19\x19\x62\x37" + + "\x62\x41\xa4\x69\xbc\x52\x9c\x85\xd4\x20\xbe\xb5\x15\x62\xba\xe2\xdb\xa1\xc8\x25\xc2\x81\x68\x1b\x8e\x00\xde\x66" + + "\xfc\x83\xfd\x86\x08\x1e\xc4\x7f\xe5\x31\xb6\x50\x53\x84\xce\xfc\x31\x86\x83\xab\x40\x86\x0b\x6c\x6d\x25\xae\x5f" + + "\xe1\x73\xce\x19\x2a\x3f\x67\x32\x3a\x08\x8f\x98\xfb\x98\xde\xc1\x7e\xec\x3d\x85\x44\x0d\x0f\xbe\xfe\x6a\xef\xc9" + + "\xc8\x71\x15\x8f\xf7\xfe\x22\x6a\x81\x55\x43\x9f\xe5\xde\xa7\xc1\xe3\x6a\xcb\x47\xed\xca\xce\xdf\xd1\xc9\x94\x75" + + "\x3a\x52\xa1\x6a\x8c\x20\xfe\x94\x0e\x8c\xe2\x61\xa7\xdc\x52\x78\xf3\x8c\xf3\x09\xaa\x93\xa2\xd2\xcd\xd5\x2e\x18" + + "\xf0\x25\x8c\x24\xa6\x22\xb4\x51\x2e\xc2\xb8\x8e\xc1\x83\xfd\xfd\x2f\x1f\x7f\x35\x14\x4f\x49\xff\xe8\x3a\x15\xd5" + + "\x15\xa5\x5c\x3a\x94\x73\xc1\x10\x96\xe9\x27\xa2\xc4\x8d\x9a\x0a\x87\x8c\x64\xec\xbd\xc0\x36\x83\x61\xff\x4a\xf0" + + "\x5f\x1e\x2c\x83\xcf\x98\xbc\xd6\xbe\x07\xa0\x03\x00\x9e\x3f\xf7\xe2\xe6\x56\xb4\xcb\x79\xf7\xfb\x3d\x1a\x6f\x7b" + + "\xff\x9a\xb6\x68\x74\x6b\x0a\x28\x32\x04\x75\x9a\x6d\x3a\xd4\xdd\xf3\x17\xd5\x8d\xa7\x27\xd4\x2d\xe1\x87\x21\xdd" + + "\xad\x72\xcc\x46\x94\x72\x01\x8c\x53\x90\x67\xb2\xd1\x10\xb6\x28\xd6\x76\x18\x51\xa7\x2a\x0f\xb7\x58\x1c\xb9\x26" + + "\x93\x3e\x01\x3c\x0e\xc4\xf8\xf3\x44\xf6\x02\x1a\x23\x93\xfe\xd5\xd7\x5f\x4c\xd5\xdb\x4a\x84\x1e\x14\x73\x14\xf4" + + "\x16\xda\x22\xe4\x24\xb8\x29\xb6\xe8\xb5\xaa\x71\xeb\xc1\x94\x5e\x19\xde\x0f\x1b\x89\x56\x1c\xa8\x90\xb8\x0c\x32" + + "\xf2\x49\x8a\x6e\xe2\xbf\xdf\x54\x6d\x67\xa1\xa5\xb3\x53\x2a\x8b\x91\x50\xc0\x21\x49\xe8\x00\x21\x82\xe6\x3a\xe0" + + "\x72\x7f\x00\xbc\xb1\x04\xb9\xb5\xe4\xb6\x94\x25\x58\xb3\x10\x28\x1c\xe0\x68\x37\x3c\x37\xb3\x65\xef\xf3\xcb\xdd" + + "\xf0\x26\x63\x59\x27\x41\xac\xe5\x96\x27\x83\xc3\xa9\xab\xff\xda\x7d\x32\xc4\xa7\x13\xf1\x8d\x84\x71\x65\x6c\x53" + + "\xaa\x39\x82\x24\x92\xae\xa0\xec\x5e\x45\xbe\x6d\xba\xe4\xf7\x91\x5a\xa6\x65\xf7\xd2\x9b\x68\x5e\x83\x43\x1b\xf8" + + "\x2b\x7f\x6e\x7d\xaa\x30\x08\x0e\xd7\x55\xae\xc4\xad\x1f\xcd\xb2\x0f\xbd\x1a\x04\x77\x14\x09\x6d\x43\x1d\xec\x04" + + "\x20\x77\xd4\xbc\xfe\x65\x48\xc4\x76\x23\x3e\xec\xf2\xfc\x3e\x8a\x1e\x5c\x63\x9e\xa6\x03\xfa\xb6\xa8\x72\xde\x1f" + + "\xad\x3e\x55\x0b\xb7\xeb\x44\x20\x59\xaf\xd4\x73\xeb\x18\xc0\x6f\x04\x12\x0c\x73\xec\x05\x88\x3a\xb9\xd1\x25\x45" + + "\xab\xcf\xa4\x1c\x24\x90\x06\x36\x0f\x02\x7c\x04\x68\x3b\x45\x2e\x60\xb7\x4a\x34\xbf\xf5\xc9\x32\x34\x56\xaf\xe0" + + "\xc9\xfe\x8a\x4f\xfe\x96\x0d\x51\x67\xc7\x07\x2e\x45\xbd\x76\x67\x10\x71\xac\xa7\xca\x8e\xf1\xa3\xe7\xf8\x80\xdf" + + "\xdb\x66\x36\xc5\x70\x78\x3a\xa2\x20\x1b\xd3\xcb\x0c\x28\xb6\x89\x3c\x42\x7b\xf9\x26\x73\x1e\x21\x13\x61\x4b\x63" + + "\x8c\x8c\x17\xac\x88\xf8\x56\x60\x9f\x11\x01\x49\xea\x08\xf7\xbc\x7b\x33\xee\x30\x2e\x87\xea\xcb\xbd\x2f\x15\xaa" + + "\x37\x42\x89\x8d\x90\x4e\xfc\xc2\xa7\xc5\x75\xec\x22\x79\x4d\x80\xe7\xcb\x80\x56\x2b\xf6\xc7\x19\xfd\x2f\x51\x3e" + + "\xb7\x5b\xea\x32\x97\x4a\x21\x34\x49\x35\x90\x9b\x1b\x52\xa6\x1f\x0c\x3f\x1c\x0e\x0e\x0f\x1e\x5e\x7f\x36\xbc\xfe" + + "\x70\xf8\xe1\x70\xc2\x07\x82\x61\x0e\xb1\xa8\xf5\x90\xb5\xbd\x24\x13\x0a\x4d\x55\xc6\x5d\x84\x85\x85\x87\xdc\x78" + + "\x77\xa0\x52\x35\xe0\x24\x48\xd1\xd1\xf1\xaa\x5e\x0d\xc8\x2c\x12\xcc\xf7\xba\xca\x6b\x08\xc5\x47\xc3\x6a\x40\x00" + + "\xc0\xf9\x40\xbf\x27\x5f\x63\x94\x26\x93\x8e\x87\x3c\x32\xd1\xe9\x7f\x01\x78\xa8\x23\xe1\x91\xcf\x6a\x0c\x47\xcc" + + "\x8a\x4e\x44\x2b\x98\xaa\x60\x62\xc2\xb1\xdd\x40\xe5\x00\xbd\x1a\xca\xc6\x54\x22\xa4\xcc\x0c\x50\xbf\xdd\xdc\xa3" + + "\xdc\xe4\x0f\x28\xfc\x9f\x9b\xe6\xa2\x29\xda\xd6\x54\x21\xd8\xc7\x31\x02\xba\xa8\x08\xea\xd5\xb5\xf4\x63\x53\xaf" + + "\x00\x43\x03\xbb\x18\x42\xd9\x41\x2d\x84\x8b\xef\xf1\x3e\xd0\xbd\x10\xb5\xb1\xd9\xba\x29\x33\xd2\x8e\xc6\x60\x34" + + "\x9d\x04\x9d\x83\x24\xa0\x1d\xc2\xc0\xd4\x70\x0c\x86\xf1\xb7\xf3\xc1\xdd\x70\xf8\x19\x28\xba\x93\xde\x90\xd7\xeb" + + "\xc3\x87\x2a\x73\x7f\x02\x3c\x7a\xc8\x40\x44\xb7\x4e\x31\x9f\x77\x53\xb4\x91\x0e\xc1\xe2\x8c\xaf\x32\x27\xef\x0a" + + "\xac\x24\x8f\x79\x05\xc9\xdf\xbc\x16\xc9\x4f\x17\x84\xc8\xf4\x25\xe6\xa3\xda\xbc\x3f\x20\x45\x8f\xf9\x7d\x86\x6a" + + "\x99\xc6\x2c\xcd\xf2\xc4\x10\x36\x98\x81\x98\x41\xf7\x37\x1a\xd3\xb4\xb5\xf5\xac\xd0\xae\xab\x40\xf8\x31\x9a\x45" + + "\xae\x6d\x58\xae\xe7\xe1\x48\xf4\xd8\x73\xd3\x42\xbc\x72\xc9\xf3\x01\xeb\xb8\x93\xe7\x51\x94\xb6\x11\x9c\x2e\x5a" + + "\xc0\xdd\x5e\xa8\x1b\x34\xed\x70\x54\x5c\x3c\x4d\x1e\x87\xe8\x28\x3c\x83\x14\x53\xf2\xb7\xd0\x9c\x43\xeb\x00\xdb" + + "\x01\xb9\x2e\xe4\x88\xa3\x88\x67\xba\xf2\xd2\x0d\x1b\x60\x8f\xfa\xa1\x55\xfc\xf6\xed\xe0\xaa\x60\x4d\x6c\x9c\x96" + + "\x0d\xa7\x98\x3b\x14\x01\x28\xd2\xa1\xb4\x35\xc0\xa9\x14\xe6\xdc\x20\xf8\xbc\x9e\xbb\xc7\x74\x63\xfa\xd4\xfe\xc4" + + "\x86\x84\xd4\x2f\xc4\x0d\x20\x2c\xfd\x71\x57\xe1\x9f\xc2\xa9\xfa\x93\x9b\x7a\x85\x61\x10\xd2\x20\x9e\xaf\x1d\x95" + + "\x81\xfd\xb9\xaa\x71\xd9\xc0\xac\x24\xc3\xb3\x93\x8c\x70\xbe\xf6\x90\x64\x46\x80\xef\xcd\x01\x05\x1b\x46\x27\x31" + + "\x24\xba\x67\x80\xbc\xf9\x37\xc7\xf7\xbb\xc7\x82\x30\xa9\x03\x52\x88\x1f\xc5\xdd\xc7\x1e\xf4\xbf\xea\x9b\xaa\xee" + + "\x24\x1d\x04\xaf\xfa\x74\x34\xcf\x4b\xa3\xab\xdd\xf5\x2a\xa4\x8c\x1e\xcc\x8b\xc6\x58\x5a\xb9\xb0\x46\x20\x52\x45" + + "\x20\x8e\x7d\xc6\xd0\x9f\x8c\x6d\xeb\xc6\x74\x4f\x32\x14\xd8\x38\x06\x31\x0b\x32\x1a\xc9\x51\x20\x38\x63\xda\xaa" + + "\x79\x63\x64\x18\x73\xa7\x12\xe9\xed\xb4\xd4\x67\xa8\xf0\x43\x9b\x64\x63\x76\x51\x75\x07\x19\xfa\xe8\x7a\xca\x6b" + + "\x03\x82\x9a\x9d\x35\xe6\x42\x41\x80\xb7\x95\xee\xc8\x29\x01\x70\xbd\x4c\xae\x9d\x5e\x0a\x81\xa1\x0c\x0c\xfd\x14" + + "\x11\x3b\xb8\xfc\xe6\x6b\x48\x74\xbd\xe6\x18\xf5\xf8\xf6\x86\xac\xdf\x3d\x87\x3d\x0a\xe4\x71\x7b\x08\x23\xac\x01" + + "\x30\x2c\x2c\x1d\xa4\x43\xe8\x24\xe6\x0c\xb3\xd6\xdd\x19\xc1\xa3\x43\xd2\x4a\xb9\x29\x85\x1f\x99\x78\xdc\x53\x57" + + "\xaf\xe7\x74\xdf\x5e\x8c\xb7\x7c\x12\x65\x11\xc1\x72\x95\x06\x80\x03\xdc\xc5\x03\xf4\x41\x30\x24\x2c\x3f\x6c\x90" + + "\x5b\x31\xb2\x82\x20\x27\xeb\x39\x78\xaf\xc2\x0b\x06\x0f\x1f\xe0\x3e\xd0\xe5\x70\x0a\x51\xbd\x4e\x0c\x83\x18\x7b" + + "\x74\x08\x69\xf4\x29\x86\x9c\x50\x40\x38\xe6\x96\xc8\x11\x5b\xb2\xf0\x48\xe9\x23\x95\x23\xb3\x67\x31\x9d\x1c\x32" + + "\xb3\xe4\x23\x65\x56\x18\xb8\x63\xd3\xc6\x30\x17\x31\x54\x5d\x54\xb3\x72\x9d\x1b\x1a\x9f\x70\x91\x41\xb8\xe1\x76" + + "\x59\xf6\x38\x55\x59\xf3\xdd\xfb\x37\xdf\x47\x1c\x3f\x85\xd6\x70\xaf\x64\xe3\x42\x2e\xbc\xcf\x7a\x0e\x91\x50\xbc" + + "\x17\x2d\x8f\xed\xaa\x24\x15\x78\xf9\x90\xbe\xe3\x49\x84\x6b\xfe\xa4\xae\x1d\x0d\xf1\xdf\xca\xb6\x0f\xb8\x28\x2c" + + "\xae\xff\x2c\x96\x3c\xc3\x63\x81\x2f\xcf\x73\xf9\xd4\x33\x74\x30\xf0\x5c\x1d\xa8\x06\x13\xb2\xbc\xd7\xa7\x84\xbc" + + "\x88\xac\xcf\x28\x48\xfe\x60\xd7\x93\xfd\x78\xf8\x50\x1d\x1d\x07\x37\x2a\x4c\xe8\xd2\xea\x53\x1e\x17\xd5\x1d\x8f" + + "\xfe\x88\xfb\x33\xc6\xd5\x27\xc7\x7c\x2e\x7d\xb4\xef\x88\xce\x71\xf0\x78\xf2\x1d\xa4\x95\x02\xef\x9a\x57\xb4\x93" + + "\x06\x0a\x53\xaf\xab\x63\xb1\x4c\xdc\xdb\xa1\xf0\x21\xb5\xa1\xcb\xf4\x67\xe2\x8f\xce\xc6\x53\xff\x71\x24\xd8\x45" + + "\x49\xae\xd8\x43\xc0\x34\xa7\x66\x00\xb9\xec\xb1\x8f\xa9\x87\x34\xfb\xf0\x42\xc2\x1c\xb3\x12\xf9\x3e\x81\x62\x96" + + "\xb9\x02\xc9\x93\x53\x57\xb8\xd5\xf8\x8d\xb4\x87\xc1\x4d\xc7\x3d\x40\xa9\xe0\xd1\x23\xc8\x7a\xfa\xbd\x2b\xa1\x09" + + "\x92\x15\xec\x35\x2b\xc0\x7b\x87\xac\xa6\xf1\x77\xdd\x58\x31\xf4\x65\xea\x04\xb9\xa5\x89\x2d\xee\x27\xdc\x35\x76" + + "\x2b\x5e\x47\x78\xe6\x64\xcb\xf2\x8a\xdd\x69\x42\x90\x99\x98\x34\x0a\x23\x30\xb3\xb6\x6e\x38\x1d\xb6\xc7\x05\x80" + + "\xcd\x85\x31\x06\x50\x05\xdc\xdd\xf3\x39\x26\xcf\x08\xbc\xbb\xca\xe4\x5a\xba\x02\x7f\x13\xb0\x86\x5c\x7b\x8a\x84" + + "\xea\xaa\xc0\x44\xa8\xf0\x09\xcb\x65\x94\x8d\x23\xbc\xdc\x1b\xe1\xfb\xd4\xcb\x0e\xf0\xed\xc2\x3d\xd0\x71\x98\x0b" + + "\x94\x9d\x5c\xc4\x86\x11\x57\xfe\x8b\x49\xfc\xf1\x3e\xb7\xd1\xe5\x25\x59\x6e\x75\x40\x75\x40\x0f\xa9\xba\x4e\x38" + + "\x6c\x9c\x19\x10\x0e\x02\x8b\x12\x01\xd5\x33\x4a\x69\x89\x15\x05\x28\x4f\xae\xb9\xc7\x09\x97\xb5\x51\x3f\xbe\x7d" + + "\xe7\xd5\x51\x32\x81\x31\x5c\x7f\x32\xe8\x08\xf3\xd2\x8e\x90\x2d\x88\x51\xa2\xf1\xc8\x99\x72\xce\x87\x4c\x00\xf0" + + "\xdc\x1a\xe3\xc7\x97\x71\x31\x57\x99\xeb\x50\xe6\xb3\x75\x38\x49\x4a\x84\x5c\x42\xbc\x3a\x68\xce\x38\x32\x52\x82" + + "\x8c\x78\x81\x31\x0d\x0b\xa4\xc0\x33\x91\xf0\x0b\xaf\x34\x9c\x17\xbc\x2a\x01\x9f\x59\x38\x10\x44\x56\x8a\x28\x0c" + + "\x0b\x38\xa9\x28\x51\xf7\xda\x52\x8a\x71\xd2\x6e\x45\x8a\x7b\x09\x94\x21\x18\x47\x52\x91\x95\xf3\xb1\xeb\xd6\xc0" + + "\x1f\x96\x00\x5c\x48\x4e\x9f\xe1\x8d\x63\x50\xc4\xdd\x5a\xd6\x33\xb6\x17\x60\x92\x7c\xbf\x4c\xe0\x97\x98\xaf\x97" + + "\xcb\x2b\x95\x17\xe7\xbe\xb6\x97\x97\xf1\xfd\xe8\xc8\xc8\x79\x5d\xe4\xea\xf5\x4b\xf5\xf9\x8f\xa6\x59\x16\x90\xd9" + + "\x4a\xbd\x30\x55\x61\xf2\xcf\x29\x93\xa2\x94\x08\x06\xd9\x5f\xf3\xe2\xfc\x6f\x59\x08\x94\x4a\x2f\xd2\xce\xc4\x0d" + + "\xc7\xf3\xc2\x15\xf4\xa3\x10\x50\x89\x11\x52\x22\x63\x43\x43\xa6\x27\xf4\x7d\xc4\x52\x71\x85\x34\x75\x37\x01\x8a" + + "\x5b\x68\xa9\x1e\x3e\x14\xa4\x2f\x0a\xb4\x0e\x32\x9c\x9b\x72\xf4\x45\x0d\xc1\xb3\x7e\x8d\x00\x11\x99\x81\x62\x42" + + "\xb3\x23\x0f\x4a\x14\x07\xdb\xdf\x74\xaf\x09\xf2\x0c\x94\x91\x1c\x7d\xa1\x1f\xba\x2a\x96\x1a\x9d\x5b\x6e\x0b\x1b" + + "\x61\x05\x79\x63\x56\x03\xa6\x72\xc5\x12\xfc\x42\x6e\x89\xf5\xc4\x30\x38\x27\xbe\x56\x63\x0e\x6f\xbb\x19\xd2\xa9" + + "\xec\x09\x33\xc9\xeb\xd9\x4b\x8c\x9c\x23\x3f\x23\xaf\x49\xe4\x3f\xe8\xba\x8e\xae\xa4\xbf\x9b\xd6\x11\x4a\xf2\x3b" + + "\x02\x88\x09\xed\x7d\x28\xd3\x7c\xdb\xa7\xa6\xfd\x05\x0a\xde\x32\xca\xc2\x26\x45\x0e\xf1\x0f\xf6\x8c\xe3\x6c\x34" + + "\x6e\x64\xdf\xf8\x58\x1d\x62\x1a\xff\xbd\x30\x17\x49\x8e\x49\x8c\xe2\x21\x57\x33\x6b\xda\xb7\xf0\x7b\x9a\x4c\xb8" + + "\x40\x58\x2b\xa4\x82\x7b\xb6\x6e\x7e\xac\x6d\x81\xee\xef\xb3\x75\xf3\xbd\x99\xb7\xf0\xc7\xf3\x77\xef\xde\xd7\x2b" + + "\xf8\x93\xff\xc5\x9a\xf9\x2d\x95\xd4\xe5\x0c\xb2\x4a\xf9\x5a\x60\xff\xad\xe8\x57\xb8\xb6\x66\xd6\x72\x4f\x32\x7e" + + "\x9b\x71\xbc\xdd\x6c\xdd\xd0\xd2\x30\xab\x82\x73\x43\x95\x35\xf5\xca\xe7\x3a\xd9\x0e\x18\x8e\xbe\x11\x08\x82\x1c" + + "\xa9\xa2\xda\x45\x3c\xdf\x7a\x35\x29\x0d\x04\x86\xa3\x93\x06\xb8\x62\xd4\x98\xd4\xa3\x98\x41\xdd\x5e\xdb\x12\x7a" + + "\x8a\x7c\x81\x2b\x11\x8c\xea\x30\xf7\xb6\xbd\x2a\xcd\x58\x0c\x29\x6b\x4c\x09\x30\x19\x99\xd4\x6f\xf8\x19\xc2\x14" + + "\xd4\x2f\x43\x88\x15\x29\x91\xfd\xac\xf6\xcf\x4a\x5b\xaf\x58\xc9\x10\x66\xb8\xbf\xa8\x1b\x9d\x2f\x9b\xae\x00\xc0" + + "\x78\xc4\xc3\xd2\x27\xb6\x2e\xd7\xad\xc9\x00\x12\x3c\x7a\x35\x2f\x2e\x23\x9f\xd9\x41\x58\x7c\x4c\x98\xca\x1d\x91" + + "\xea\xc6\x75\x5b\x67\x43\xf5\x37\xb5\xbb\x1f\x56\xe4\x07\x4a\xe9\x7e\x62\x14\xdc\x69\x6d\x1d\x36\x47\x68\xb3\x98" + + "\x2b\x53\x38\x6a\xe8\x56\x49\xd5\x8d\x82\x85\x2a\xac\xf2\xf9\xac\x43\x51\xcb\x45\xb9\xfb\xa0\x2f\x73\xfd\xf5\xab" + + "\xd7\x1d\x3c\xaf\x9c\xd8\xd8\x62\x3d\xb8\x72\x56\xeb\xe3\xee\xc6\x02\x5c\x7c\xdc\xd6\x2b\xff\x96\xd6\x40\xbe\x76" + + "\x3d\x66\xfa\x2c\x7d\x1b\x7c\x5d\x70\x4d\xbc\x2a\x6b\xdd\xca\xc9\x04\x15\xfb\x5e\x5a\x71\xb7\x2c\x4e\x76\x28\x7c" + + "\x73\x7b\xfc\x76\x70\x01\xe4\x91\x77\x52\xaa\x11\xfa\x25\xee\x9d\x42\x1c\x65\xd5\x0d\xca\xf6\xee\x72\xf5\x4a\xdd" + + "\x4f\x11\xec\xdd\x39\x84\x37\x07\x49\xc9\xdd\x50\x27\xfc\x1e\xe2\xd6\x79\x4f\x13\x79\xd3\xa9\x1e\x56\xbd\xbf\xfe" + + "\x12\x27\x26\x29\x2b\x5b\x28\x71\x86\x76\x98\x5e\x75\x06\x91\x81\xee\x26\x13\x3e\x75\xe9\xe4\x8c\xa1\x44\x34\x31" + + "\x48\x65\x86\x1b\x56\x16\x76\x0f\x1c\xc1\x50\x2e\x98\x6a\x37\x87\x1f\xd4\x1d\x6a\x9c\xf4\x08\x3a\xec\x59\xa6\x34" + + "\x90\x98\xae\x0e\xbf\xa4\x91\x75\x96\xbc\xba\x41\xbb\x30\x0d\x7f\xdf\x12\x5a\xbd\x15\xdd\x19\x63\x7f\x5b\xb0\x90" + + "\x23\xef\x08\xb6\x7b\x45\x7b\x44\xdc\xa3\x23\x77\x27\x8e\x3c\x95\x24\x29\x07\x54\x3a\xf8\xf4\xa4\xbe\x74\x44\xdb" + + "\x1d\xf4\xa9\x93\x43\xdc\xb2\x4d\xd5\x9e\x22\x93\x5c\x5e\xcf\x28\x88\x3d\x04\xa4\xca\x80\x7d\x89\x5b\x70\xdf\x15" + + "\x8e\xe7\x44\xf6\x2a\xdc\xec\x79\x3d\xeb\xbd\xcd\x11\xd8\xdc\xeb\xf8\x3c\xba\xb7\x56\x79\x61\x67\x75\x55\xa1\x6d" + + "\x83\x13\xcc\x85\x86\x99\xf8\xa2\x32\xca\x0e\xc2\xe8\xe9\xf6\x4e\x56\xea\xa4\xbe\x4c\x74\xde\x28\x61\xe4\xe0\xd5" + + "\x07\x72\xc6\xe9\xb7\xcf\x7f\x1a\xa9\x8f\x6b\x0b\xe0\xe2\x6a\x6f\xb4\xa7\x1a\x8d\x24\x71\xc1\x2e\x1f\xf4\xed\xb7" + + "\xa5\x9e\x9d\x7d\x6b\x9a\xe6\x4a\x3d\x19\xa9\xe2\xed\x3b\xf5\x85\x1a\xb0\x4e\x51\x15\x3f\x2e\xea\x0a\xb3\x8f\x48" + + "\x21\x17\xa6\xf2\xd4\xb4\xdf\xd6\x6b\x80\x2f\x7e\x5e\x16\xa6\x6a\x7f\x32\xb3\x16\x64\x5f\xdb\x36\x1d\x03\x3f\xad" + + "\xd5\xe6\x2f\x85\x5b\xf4\xd6\x05\x24\xa4\x10\xac\x0e\x2c\x4e\xd7\x32\x0e\xeb\x7e\x52\x5f\x02\x45\xd8\x71\xbb\x65" + + "\xec\xa4\xf9\xff\x20\xda\xb3\xcb\x53\x39\x9e\x41\x33\x8e\xcb\x80\xef\x70\x9f\xb8\x0f\xe1\xa0\x87\x2f\x7f\xdd\xf0" + + "\xa5\xa3\x01\xdb\xde\x2e\x8b\x92\x16\x13\xfa\xae\x29\x94\x82\x39\x63\xf0\x89\xde\x6d\x05\x26\x5d\x68\xf2\x47\x88" + + "\x46\x1f\xd1\xaf\xdb\x36\x3d\xc6\xad\x7b\x3e\xa0\x67\xf7\x87\xfd\xf8\xca\x5d\x65\x41\x9e\x71\xdc\x0a\x31\x73\xc0" + + "\x66\x12\xcb\x39\x48\xab\x74\x35\x86\x0a\x6f\x46\xea\xc4\xcc\x34\x08\x67\x98\xc1\xa4\xb5\xe8\xfc\x40\x75\xe1\xe7" + + "\xe9\x15\xb2\x81\x1d\x4b\x78\x02\xaf\xa4\x4f\xe4\xfd\xfe\xdd\x25\xa1\xfd\x31\xea\xc0\x09\x2f\x6b\x77\xb0\xe4\xa5" + + "\xee\x6f\xf0\x2d\xcf\xba\xde\xb1\xf1\x3a\x04\x99\xec\x82\x8f\x1a\xa3\xcb\x47\xd1\x1a\x89\x7a\xf1\x01\xc7\x24\xc9" + + "\x67\x83\x61\x02\x4f\xc9\xb0\xe6\x58\xc8\xc6\x9d\x13\x9f\x33\xdb\xb0\x01\x7e\x40\xb6\x81\x7b\x82\xc4\x71\xa9\x12" + + "\x4f\x96\x53\x7e\x93\xb4\x92\x24\x12\x88\x46\x75\x02\x59\x6a\x6c\x67\xcf\xe1\x61\x8b\x99\xc6\xbe\x6e\xe1\xf7\xef" + + "\xeb\x15\xe0\x02\x64\xa3\x80\x86\x92\x56\x88\x87\xf0\x53\x6b\x74\x67\xb1\xa7\x4a\x01\xbe\xbe\x3e\x41\xcc\x3e\x6c" + + "\x84\xa7\x1c\x81\xbd\xf1\x28\xa8\xa5\x6e\x4e\x8b\xca\xf6\x53\x94\x3a\x8c\x73\x57\x75\x86\xbe\xdb\xb7\xc1\xb1\xbe" + + "\xf7\x00\x51\x84\x9d\x92\x94\xa6\x16\xe3\x4c\x6a\xa4\x67\x1b\xab\x74\xa3\xf5\x75\xa6\x24\x48\x4e\xd2\xbf\x10\x27" + + "\x98\x52\x9f\xbe\x8d\x4c\x6a\xef\x97\x28\xfd\xc2\x67\x8c\x22\x13\x15\x03\x5f\x84\xdb\xf7\xab\xd8\xaa\xc1\xc2\xd3" + + "\x59\xec\x3e\x6a\x11\x64\xa6\x60\xf6\x89\xfb\xdd\xb3\xc7\xf1\x47\x6a\xf9\x41\x66\x67\xe3\x00\x85\x2a\x22\xb8\x93" + + "\x90\x43\xa9\x9d\x35\x75\x59\x02\xf3\xac\xd1\xbb\xac\x2e\x4b\xc7\x77\xa3\x0a\x2d\x05\xb1\xfa\x43\x7c\x30\x55\x99" + + "\xb8\x5e\xb2\x51\xf8\x98\xde\xd0\x95\x95\xa9\x1b\xa9\x90\x20\xa8\x2e\x60\x08\x45\x04\x0e\xf2\xc7\xf1\x77\x6e\x9e" + + "\x5c\x31\x5c\x24\x81\x69\xd5\x8b\x7c\x26\x42\xf1\x68\x4a\x34\xb8\x2b\x33\x97\x96\x4a\xf6\xdc\x11\x19\xc2\x07\xe8" + + "\x4f\xe9\x45\xed\x11\x38\x02\x11\x3b\xdf\x14\xda\xed\xdb\x76\xb5\x1c\xba\xff\x1e\xe1\x48\x8f\x49\x53\x11\x3a\x1f" + + "\xaf\x22\x47\x72\x09\xdc\xa4\xa2\x1a\xf3\x94\xb2\x63\xda\x7d\x37\x4d\x10\x28\xaf\xa6\xac\x8f\x11\x8b\xc0\xbe\x6a" + + "\x1b\x4a\xd1\xc4\x6e\x7b\xc7\x30\xec\x41\xe4\x69\x1e\xf7\x11\x53\x54\x4a\x88\x87\x68\xde\x46\x1d\x16\x7c\x24\x3c" + + "\x7b\x13\x24\x35\x4a\xaf\xe8\xd5\x0c\x33\x6b\xbf\xab\xeb\x33\x4b\xd1\x1e\x41\x0e\xe0\xa3\x02\x9f\xfd\x62\x4e\xce" + + "\x8a\x56\x9d\xac\x4f\xa7\x6a\xd1\xb6\x2b\x3b\x9d\x4c\x4e\xd6\xa7\x76\x7c\x01\x2f\xc6\x75\x73\x3a\xb1\x8b\xfa\xe2" + + "\xb7\x93\xf5\xe9\x78\x76\x5a\x1c\x16\xf9\xc1\xe3\x6f\xf6\xbe\xfe\x12\xbe\x3e\x35\xed\x73\xba\x4c\xdf\xb5\x57\xa5" + + "\xf1\x21\x7e\x2b\xd3\xcc\xc0\xec\xe8\xee\x5b\xaf\x37\x45\x48\x50\xea\xe0\xe4\xa4\x6e\xdb\x7a\x39\x01\xfd\x29\xd4" + + "\x26\xf9\x4d\xaf\xe2\x9e\x59\xab\x96\x75\xbe\x2e\x0d\xa5\xbe\xe0\xbc\x17\x74\x13\xe2\x3b\x88\x99\x01\xe6\x75\xe6" + + "\x93\x43\x14\xad\xc2\x0c\x53\x29\x4e\x1c\xa1\xc2\xa1\xba\x22\x45\x79\x13\xe7\x26\x90\x1b\x98\x48\xbf\xd3\x0e\x94" + + "\xce\xf3\xbf\x9b\xd6\x3d\x7d\x3d\x0f\x71\x68\xab\xe2\xd2\x94\x91\xc6\x29\x3d\x13\x9e\xf3\x88\xbc\x41\x3a\x4f\xb7" + + "\xfc\x93\x03\x12\xbf\xa5\x38\x28\x51\x25\x8b\x39\x15\x48\x67\x5e\x9f\x9a\x91\x9a\xb3\x6e\xb6\xad\x69\xba\xa2\x33" + + "\xd4\x54\xeb\x65\x55\x57\xab\x4b\x4e\x7e\x13\xfa\x11\x87\xe6\xf2\x19\x15\x8a\x0a\x3f\x19\x3b\x2a\x5b\x5d\x66\x3e" + + "\x9e\x96\xeb\x90\x7b\x7a\xfb\x1e\x9c\x06\x6f\xda\x0e\xe4\xb1\xa8\x2a\xd3\x20\xd4\xcf\x08\x7f\xc0\x2d\x3d\x52\x0b" + + "\x7a\x76\x81\x3f\xeb\x75\xcb\xe5\x10\x78\xc8\xfd\x46\xec\xa0\x4d\x84\x14\x4b\x4f\x55\x86\x55\x65\x23\x05\xe5\xa7" + + "\x2a\x83\x3a\x13\xaa\x49\xe0\x07\x1d\x84\x3f\xae\x6d\xa5\x73\xc7\x01\x4e\x55\x06\xbd\x64\xbc\x93\x11\x63\x6d\x91" + + "\xd5\x43\x65\xd9\x54\x65\xd0\x3b\x0f\x89\x12\xb5\x43\x0a\x53\x48\x33\x88\xcf\x29\xe0\x9b\x23\x72\xf1\x06\x77\x0c" + + "\x29\x70\xcb\x6e\x1f\x8b\xc1\x8f\xc4\xc8\xb7\x83\x65\xc7\xd1\x6c\x5f\x57\x4c\xb5\xb1\xbe\x14\x6c\x04\x74\xac\x0b" + + "\x5d\x54\x84\x32\xd4\x91\xf4\xe1\x6a\x96\x9d\x15\xc6\x76\xea\xe2\xfd\xd8\x66\x4e\xb4\x11\xb0\x8f\x9d\xc8\x9b\x7c" + + "\xcb\x3d\x01\xb2\x0e\x9c\xc9\xf5\xb5\x07\x21\xa1\x27\x87\xcc\xc0\x80\x1f\x17\x72\x6e\x21\x31\xe4\xa7\xdd\x3a\xb8" + + "\x0c\x49\xc2\x62\xd2\x0f\x78\xc7\x96\x58\x6b\x95\x28\xbe\xa3\x08\x89\x67\x90\x4c\xee\xc9\xe4\xeb\xc9\xe3\xbd\xfd" + + "\xc7\xe8\x32\x01\x66\x2f\x88\x52\x52\x45\xc5\x3c\x3a\x1a\x4d\xd0\x2d\xf4\x4d\x7d\xe2\xb8\x9d\x77\x7a\xae\x9b\x62" + + "\xa4\x4e\xd6\x6d\xc8\x75\x47\xc7\x16\x3c\x76\xb4\xba\x58\xd4\xa5\x51\x65\xdd\x3a\xf2\x35\xd3\x95\xca\xeb\xb1\x7a" + + "\x67\x8c\x5a\xa1\x21\x06\x03\x44\x74\x8b\x0d\xff\xfc\xd3\xf7\x50\x7f\x5e\xd8\xd9\x1a\xcc\x45\xd3\x50\x25\x13\xef" + + "\xd3\xa2\x5d\xac\x4f\xc6\xb3\x7a\x39\x41\x30\x11\xfe\xc7\x55\x39\xf9\xcb\x57\x5f\xd2\x27\x12\x8b\x6b\x93\xc9\xe1" + + "\x48\x65\x28\xcb\xfa\xcd\x7c\xdc\x13\xff\xe6\x44\x15\xfe\x10\x0f\xac\x82\xd4\x3c\x48\xd7\x83\x1f\x76\x8f\x1d\x21" + + "\xcc\x75\xd0\xbb\x6c\xd0\x94\x90\x19\x0d\x55\xaf\x78\x6f\x1f\xc1\x39\x98\xe0\xd1\x38\x06\x78\x11\x20\x72\xdd\xe7" + + "\x38\x8a\xf8\xf9\x28\xd4\x7a\xb1\x28\x66\x0b\x88\xb4\x2c\xac\x3a\x05\xd2\xc4\xa9\x77\x79\x9e\xde\xe8\x76\x31\x5e" + + "\xea\x4b\x1f\x1d\x06\x5d\x3d\xa9\xf3\xab\x23\x70\xe1\xa9\xcb\x32\x4c\xd2\xc8\xcd\x47\xdf\xf3\xbe\x8f\x6b\xe2\xc6" + + "\xd2\x8f\x3b\xcf\xf9\x63\x7c\x9d\x2e\x0c\xbd\xed\x04\x28\x06\x80\x86\x75\x1a\x47\x71\x18\x66\xc0\xad\x61\xb2\x74" + + "\x7c\xcf\x92\xf8\x33\xe2\xed\x08\xe1\x69\xeb\x16\x14\x55\xf3\xba\x99\x81\xbf\xab\xd7\x17\xc7\x1a\x3d\x21\x9b\xe0" + + "\xc1\x44\xf2\x90\x64\x6c\x7b\x77\x67\xe3\x71\xad\x60\xf9\xe8\x39\xf0\xbe\x7a\x76\xb2\xa7\x97\x81\xd2\x1d\x32\x15" + + "\x9a\x46\x60\xc2\xfc\x5e\x72\x57\x24\x34\xa5\x17\xd7\xfb\x85\x51\xd5\x7a\x79\x62\xdc\x66\x0b\x5a\x12\xd2\xc4\x05" + + "\x8f\x27\xc8\xc1\x1a\xf4\x28\xe8\x70\x1c\x78\x30\x5b\xfc\x6e\xba\x2e\x8f\x52\xfa\x4a\x0c\x86\xe1\x53\x5d\xe5\xef" + + "\x24\x46\x24\x3c\xcb\xf3\x6f\xd9\x73\xcf\x77\xf5\x27\x73\x5a\xd8\xd6\x34\x88\x8e\xe6\x76\x49\xae\x9e\xbd\x79\xe1" + + "\x39\x26\x0b\xa9\x1a\x08\x6e\xc9\x11\x9f\x13\xc8\x74\x3e\xd3\xad\xa9\x82\xa3\x32\x80\xf3\x40\x7d\xf3\xa2\x84\xec" + + "\xf1\xba\x85\x60\xb5\xb5\x75\x1c\x99\x9b\xc2\x91\xdf\x0f\xe7\x85\xc6\xac\xb4\x2b\x74\xb9\xa4\xba\x8a\xba\xf2\x81" + + "\x35\x0b\x8d\xcc\x9e\x9b\xff\xc6\xb6\xba\xca\x9d\x94\x5d\x57\x57\xcb\x7a\x6d\x45\xff\xec\x58\x3d\x13\x9d\x2e\xac" + + "\xb2\x7a\x0e\xd4\xb0\xca\xd5\xb2\xb6\xad\x6a\xea\x93\xb5\xc5\xca\x20\x83\x78\xad\x1a\x1a\xf1\x58\x41\xee\x5a\x30" + + "\xbb\x11\xa2\x52\x61\x31\x67\x22\x6b\xa5\x42\x43\xd0\x88\xc5\xc0\xec\xc9\x44\xe5\xa6\x29\xce\x1d\xab\xda\x40\xfc" + + "\x3c\xbf\x1f\x41\xbb\x34\x59\x00\x17\xd7\x2c\x01\x3d\x22\x37\x65\x71\x6e\x1a\x4a\xc7\xa8\x4a\x6e\xd8\x4f\x19\x66" + + "\xc8\x57\x2f\x6a\x24\xe2\xe4\x8e\xea\x88\x0c\x7b\x72\x12\x1e\xb8\x4f\xf2\x08\x68\x53\xa2\x83\x17\x1a\x02\x1e\x27" + + "\x13\xb2\x5e\x95\x0a\x72\x76\xce\xcb\x62\x06\x41\xe1\x8b\x02\x90\x97\x0a\xab\xce\x4d\x03\x5e\x04\xf5\x9c\xba\x3a" + + "\x02\xe7\x4a\x77\x61\x5d\xd4\xcd\xd9\x98\x76\xc6\x0f\x75\x4b\x2a\x33\x77\x9d\x2c\xf5\x65\xb1\x5c\x2f\x95\xe3\x61" + + "\xf5\x49\x51\x16\xed\xd5\x48\x95\xc5\x49\xa3\x9b\x82\x17\x5c\x37\x06\x16\x98\x26\x00\x41\x3b\x68\xbe\x66\xa5\x06" + + "\x07\x55\xb3\xb4\xa6\x3c\x37\x16\x83\x04\x79\x45\x69\x35\x71\xfe\xd0\xe5\x81\x22\x49\x94\xe6\x91\xc3\x88\x51\x8a" + + "\x79\xf3\x02\x5c\xb4\x90\x14\x43\x3e\xf8\xaa\x1d\x8b\x79\xd7\x51\xa0\xd9\x18\x22\xd6\x97\x75\xe3\x58\xc9\xb9\x5b" + + "\x12\x34\x19\x5b\x83\xf3\xdf\x77\x29\x36\x27\xeb\xe6\xcc\x4c\x1c\x35\x2b\x1a\xf3\xd1\x4e\x2e\x8a\xb3\x62\xf2\xf3" + + "\x2a\x87\x05\xd9\x65\x6f\xdf\x5d\x3f\x03\x0f\x5c\x81\x5d\x37\x22\x37\x7d\x52\xa7\x8d\xdb\x9f\xb4\x93\x74\x94\xc1" + + "\x7b\x0b\x5f\x8c\xf5\x92\x79\x7a\x7c\x30\x50\x19\x6e\xc7\x6c\x04\x4e\x6c\xb7\x42\x3f\x3d\x8d\xc0\x3e\xbc\xc3\x00" + + "\x3a\x08\xbd\xd1\x2b\x70\x3f\xf5\x33\x43\x59\x59\xeb\xb9\xf7\x4a\x75\xec\xc6\x6f\xf4\xda\x3b\x17\xd0\xae\x60\x3f" + + "\x23\x5f\x8d\xdb\x86\x9f\x6d\xac\xe5\xb3\x50\xc1\x67\x92\x1a\x89\x6d\x18\xf9\x70\x1a\xb3\x92\x6e\x6e\xfc\x29\x4c" + + "\x14\xf5\x88\x46\x1c\x5e\xa9\xdf\x3e\x0b\xfe\x1c\xf0\x19\x54\xf3\xf0\x61\xdc\xf5\xcd\x75\xf8\xa1\xfe\x26\xe6\xaf" + + "\xeb\x44\xe8\x29\x2a\x38\xe5\xac\x6a\xeb\x49\xa0\xdb\xa0\x9f\xa9\x02\xb0\x52\xe6\x05\xf8\x79\x80\x89\xbe\x08\x5b" + + "\x73\xf0\xe0\x2f\xfb\x7b\x8f\x1f\xcc\xea\xa5\x23\xea\xd3\xfd\xbd\xd1\x27\xf2\x5d\x4f\x9e\xfc\x65\x08\xb5\xb8\x46" + + "\x9e\x03\x96\xf9\x3f\xde\xc1\xe9\x3b\x69\xea\x0b\x6b\x1a\x65\x96\xeb\x52\xb7\x75\x63\xd5\xe0\xc1\xfe\x17\x4f\xbe" + + "\xfa\x6a\x18\xef\xb5\xaa\xc6\xb4\x04\x30\x01\x3d\xd6\x92\x74\x16\xc4\xcc\x86\x81\x87\x9d\x94\xce\x89\xbb\xe5\xdc" + + "\x66\xfb\xff\x03\x00\x00\xff\xff\x1d\x30\x27\xdd\x1d\xea\x03\x00") func gzipBindataAssetsJsJquery211js() (*gzipAsset, error) { bytes := _gzipBindataAssetsJsJquery211js info := gzipBindataFileInfo{ - name: "assets/js/jquery-2.1.1.js", - size: 256541, + name: "assets/js/jquery-2.1.1.js", + size: 256541, md5checksum: "", - mode: os.FileMode(511), - modTime: time.Unix(1521004692, 0), + mode: os.FileMode(511), + modTime: time.Unix(1521004692, 0), } a := &gzipAsset{bytes: bytes, info: info} @@ -3649,8 +3647,6 @@ func gzipBindataAssetsJsJquery211js() (*gzipAsset, error) { return a, nil } - - // GzipAsset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. @@ -3711,7 +3707,6 @@ var _gzipbindata = map[string]func() (*gzipAsset, error){ "assets/js/jquery-2.1.1.js": gzipBindataAssetsJsJquery211js, } - // GzipAssetDir returns the file names below a certain // directory embedded in the file by bindata. // For example if you run bindata on data/... and data contains the @@ -3734,18 +3729,18 @@ func GzipAssetDir(name string) ([]string, error) { node = node.Children[p] if node == nil { return nil, &os.PathError{ - Op: "open", + Op: "open", Path: name, - Err: os.ErrNotExist, + Err: os.ErrNotExist, } } } } if node.Func != nil { return nil, &os.PathError{ - Op: "open", + Op: "open", Path: name, - Err: os.ErrNotExist, + Err: os.ErrNotExist, } } rv := make([]string, 0, len(node.Children)) @@ -3755,7 +3750,6 @@ func GzipAssetDir(name string) ([]string, error) { return rv, nil } - type gzipBintree struct { Func func() (*gzipAsset, error) Children map[string]*gzipBintree diff --git a/_examples/tutorial/url-shortener/README.md b/_examples/tutorial/url-shortener/README.md new file mode 100644 index 000000000..b6098c256 --- /dev/null +++ b/_examples/tutorial/url-shortener/README.md @@ -0,0 +1,3 @@ +## A URL Shortener Service using Go, Iris and Bolt + +Hackernoon Article: https://hackernoon.com/a-url-shortener-service-using-go-iris-and-bolt-4182f0b00ae7 \ No newline at end of file diff --git a/_examples/tutorial/url-shortener/factory.go b/_examples/tutorial/url-shortener/factory.go index 9df9ae95b..66d6b4085 100644 --- a/_examples/tutorial/url-shortener/factory.go +++ b/_examples/tutorial/url-shortener/factory.go @@ -3,7 +3,7 @@ package main import ( "net/url" - "github.com/satori/go.uuid" + "github.com/iris-contrib/go.uuid" ) // Generator the type to generate keys(short urls) diff --git a/_examples/tutorial/url-shortener/main.go b/_examples/tutorial/url-shortener/main.go index 7fa911231..1771f766c 100644 --- a/_examples/tutorial/url-shortener/main.go +++ b/_examples/tutorial/url-shortener/main.go @@ -3,7 +3,7 @@ // Article: https://medium.com/@kataras/a-url-shortener-service-using-go-iris-and-bolt-4182f0b00ae7 // // $ go get github.com/etcd-io/bbolt -// $ go get github.com/satori/go.uuid +// $ go get github.com/iris-contrib/go.uuid // $ cd $GOPATH/src/github.com/kataras/iris/_examples/tutorial/url-shortener // $ go build // $ ./url-shortener diff --git a/_examples/tutorial/vuejs-todo-mvc/README.md b/_examples/tutorial/vuejs-todo-mvc/README.md index b856373bc..9e0e582a5 100644 --- a/_examples/tutorial/vuejs-todo-mvc/README.md +++ b/_examples/tutorial/vuejs-todo-mvc/README.md @@ -1,5 +1,7 @@ # A Todo MVC Application using Iris and Vue.js +## Hackernoon Article: https://twitter.com/vuejsdevelopers/status/954805901789224960 + Vue.js is a front-end framework for building web applications using javascript. It has a blazing fast Virtual DOM renderer. Iris is a back-end framework for building web applications using The Go Programming Language (disclaimer: author here). It's one of the fastest and featured web frameworks out there. We wanna use this to serve our "todo service". diff --git a/middleware/logger/vendor/github.com/ryanuber/columnize/columnize.go b/middleware/logger/vendor/github.com/ryanuber/columnize/columnize.go index 527c1d1b3..4e8209102 100644 --- a/middleware/logger/vendor/github.com/ryanuber/columnize/columnize.go +++ b/middleware/logger/vendor/github.com/ryanuber/columnize/columnize.go @@ -113,7 +113,7 @@ func elementsFromLine(config *Config, line string) []interface{} { // runeLen calculates the number of visible "characters" in a string func runeLen(s string) int { l := 0 - for _ = range s { + for range s { l++ } return l diff --git a/sessions/sessiondb/badger/vendor/github.com/dgraph-io/badger/vendor/github.com/AndreasBriese/bbloom/bbloom.go b/sessions/sessiondb/badger/vendor/github.com/dgraph-io/badger/vendor/github.com/AndreasBriese/bbloom/bbloom.go index 3d4574066..a8afc147d 100644 --- a/sessions/sessiondb/badger/vendor/github.com/dgraph-io/badger/vendor/github.com/AndreasBriese/bbloom/bbloom.go +++ b/sessions/sessiondb/badger/vendor/github.com/dgraph-io/badger/vendor/github.com/AndreasBriese/bbloom/bbloom.go @@ -206,7 +206,7 @@ func (bl *Bloom) Size(sz uint64) { // Clear // resets the Bloom filter func (bl *Bloom) Clear() { - for i, _ := range (*bl).bitset { + for i := range (*bl).bitset { (*bl).bitset[i] = 0 } } diff --git a/vendor/github.com/Shopify/goreferrer/default_rules.go b/vendor/github.com/Shopify/goreferrer/default_rules.go index 18aca8e72..b6121184d 100644 --- a/vendor/github.com/Shopify/goreferrer/default_rules.go +++ b/vendor/github.com/Shopify/goreferrer/default_rules.go @@ -15,22 +15,22 @@ func init() { DefaultRules = RuleSet{ DomainRules: domainRules, UaRules: map[string]UaRule{ - "Twitter": UaRule{ + "Twitter": { Url: "twitter://twitter.com", Domain: "twitter", Tld: "com", }, - "Pinterest": UaRule{ + "Pinterest": { Url: "pinterest://pinterest.com", Domain: "pinterest", Tld: "com", }, - "Facebook": UaRule{ + "Facebook": { Url: "facebook://facebook.com", Domain: "facebook", Tld: "com", }, - "FBAV": UaRule{ + "FBAV": { Url: "facebook://facebook.com", Domain: "facebook", Tld: "com", diff --git a/vendor/golang.org/x/net/html/entity.go b/vendor/golang.org/x/net/html/entity.go index a50c04c60..b628880a0 100644 --- a/vendor/golang.org/x/net/html/entity.go +++ b/vendor/golang.org/x/net/html/entity.go @@ -75,2083 +75,2083 @@ var entity = map[string]rune{ "Copf;": '\U00002102', "Coproduct;": '\U00002210', "CounterClockwiseContourIntegral;": '\U00002233', - "Cross;": '\U00002A2F', - "Cscr;": '\U0001D49E', - "Cup;": '\U000022D3', - "CupCap;": '\U0000224D', - "DD;": '\U00002145', - "DDotrahd;": '\U00002911', - "DJcy;": '\U00000402', - "DScy;": '\U00000405', - "DZcy;": '\U0000040F', - "Dagger;": '\U00002021', - "Darr;": '\U000021A1', - "Dashv;": '\U00002AE4', - "Dcaron;": '\U0000010E', - "Dcy;": '\U00000414', - "Del;": '\U00002207', - "Delta;": '\U00000394', - "Dfr;": '\U0001D507', - "DiacriticalAcute;": '\U000000B4', - "DiacriticalDot;": '\U000002D9', - "DiacriticalDoubleAcute;": '\U000002DD', - "DiacriticalGrave;": '\U00000060', - "DiacriticalTilde;": '\U000002DC', - "Diamond;": '\U000022C4', - "DifferentialD;": '\U00002146', - "Dopf;": '\U0001D53B', - "Dot;": '\U000000A8', - "DotDot;": '\U000020DC', - "DotEqual;": '\U00002250', - "DoubleContourIntegral;": '\U0000222F', - "DoubleDot;": '\U000000A8', - "DoubleDownArrow;": '\U000021D3', - "DoubleLeftArrow;": '\U000021D0', - "DoubleLeftRightArrow;": '\U000021D4', - "DoubleLeftTee;": '\U00002AE4', - "DoubleLongLeftArrow;": '\U000027F8', - "DoubleLongLeftRightArrow;": '\U000027FA', - "DoubleLongRightArrow;": '\U000027F9', - "DoubleRightArrow;": '\U000021D2', - "DoubleRightTee;": '\U000022A8', - "DoubleUpArrow;": '\U000021D1', - "DoubleUpDownArrow;": '\U000021D5', - "DoubleVerticalBar;": '\U00002225', - "DownArrow;": '\U00002193', - "DownArrowBar;": '\U00002913', - "DownArrowUpArrow;": '\U000021F5', - "DownBreve;": '\U00000311', - "DownLeftRightVector;": '\U00002950', - "DownLeftTeeVector;": '\U0000295E', - "DownLeftVector;": '\U000021BD', - "DownLeftVectorBar;": '\U00002956', - "DownRightTeeVector;": '\U0000295F', - "DownRightVector;": '\U000021C1', - "DownRightVectorBar;": '\U00002957', - "DownTee;": '\U000022A4', - "DownTeeArrow;": '\U000021A7', - "Downarrow;": '\U000021D3', - "Dscr;": '\U0001D49F', - "Dstrok;": '\U00000110', - "ENG;": '\U0000014A', - "ETH;": '\U000000D0', - "Eacute;": '\U000000C9', - "Ecaron;": '\U0000011A', - "Ecirc;": '\U000000CA', - "Ecy;": '\U0000042D', - "Edot;": '\U00000116', - "Efr;": '\U0001D508', - "Egrave;": '\U000000C8', - "Element;": '\U00002208', - "Emacr;": '\U00000112', - "EmptySmallSquare;": '\U000025FB', - "EmptyVerySmallSquare;": '\U000025AB', - "Eogon;": '\U00000118', - "Eopf;": '\U0001D53C', - "Epsilon;": '\U00000395', - "Equal;": '\U00002A75', - "EqualTilde;": '\U00002242', - "Equilibrium;": '\U000021CC', - "Escr;": '\U00002130', - "Esim;": '\U00002A73', - "Eta;": '\U00000397', - "Euml;": '\U000000CB', - "Exists;": '\U00002203', - "ExponentialE;": '\U00002147', - "Fcy;": '\U00000424', - "Ffr;": '\U0001D509', - "FilledSmallSquare;": '\U000025FC', - "FilledVerySmallSquare;": '\U000025AA', - "Fopf;": '\U0001D53D', - "ForAll;": '\U00002200', - "Fouriertrf;": '\U00002131', - "Fscr;": '\U00002131', - "GJcy;": '\U00000403', - "GT;": '\U0000003E', - "Gamma;": '\U00000393', - "Gammad;": '\U000003DC', - "Gbreve;": '\U0000011E', - "Gcedil;": '\U00000122', - "Gcirc;": '\U0000011C', - "Gcy;": '\U00000413', - "Gdot;": '\U00000120', - "Gfr;": '\U0001D50A', - "Gg;": '\U000022D9', - "Gopf;": '\U0001D53E', - "GreaterEqual;": '\U00002265', - "GreaterEqualLess;": '\U000022DB', - "GreaterFullEqual;": '\U00002267', - "GreaterGreater;": '\U00002AA2', - "GreaterLess;": '\U00002277', - "GreaterSlantEqual;": '\U00002A7E', - "GreaterTilde;": '\U00002273', - "Gscr;": '\U0001D4A2', - "Gt;": '\U0000226B', - "HARDcy;": '\U0000042A', - "Hacek;": '\U000002C7', - "Hat;": '\U0000005E', - "Hcirc;": '\U00000124', - "Hfr;": '\U0000210C', - "HilbertSpace;": '\U0000210B', - "Hopf;": '\U0000210D', - "HorizontalLine;": '\U00002500', - "Hscr;": '\U0000210B', - "Hstrok;": '\U00000126', - "HumpDownHump;": '\U0000224E', - "HumpEqual;": '\U0000224F', - "IEcy;": '\U00000415', - "IJlig;": '\U00000132', - "IOcy;": '\U00000401', - "Iacute;": '\U000000CD', - "Icirc;": '\U000000CE', - "Icy;": '\U00000418', - "Idot;": '\U00000130', - "Ifr;": '\U00002111', - "Igrave;": '\U000000CC', - "Im;": '\U00002111', - "Imacr;": '\U0000012A', - "ImaginaryI;": '\U00002148', - "Implies;": '\U000021D2', - "Int;": '\U0000222C', - "Integral;": '\U0000222B', - "Intersection;": '\U000022C2', - "InvisibleComma;": '\U00002063', - "InvisibleTimes;": '\U00002062', - "Iogon;": '\U0000012E', - "Iopf;": '\U0001D540', - "Iota;": '\U00000399', - "Iscr;": '\U00002110', - "Itilde;": '\U00000128', - "Iukcy;": '\U00000406', - "Iuml;": '\U000000CF', - "Jcirc;": '\U00000134', - "Jcy;": '\U00000419', - "Jfr;": '\U0001D50D', - "Jopf;": '\U0001D541', - "Jscr;": '\U0001D4A5', - "Jsercy;": '\U00000408', - "Jukcy;": '\U00000404', - "KHcy;": '\U00000425', - "KJcy;": '\U0000040C', - "Kappa;": '\U0000039A', - "Kcedil;": '\U00000136', - "Kcy;": '\U0000041A', - "Kfr;": '\U0001D50E', - "Kopf;": '\U0001D542', - "Kscr;": '\U0001D4A6', - "LJcy;": '\U00000409', - "LT;": '\U0000003C', - "Lacute;": '\U00000139', - "Lambda;": '\U0000039B', - "Lang;": '\U000027EA', - "Laplacetrf;": '\U00002112', - "Larr;": '\U0000219E', - "Lcaron;": '\U0000013D', - "Lcedil;": '\U0000013B', - "Lcy;": '\U0000041B', - "LeftAngleBracket;": '\U000027E8', - "LeftArrow;": '\U00002190', - "LeftArrowBar;": '\U000021E4', - "LeftArrowRightArrow;": '\U000021C6', - "LeftCeiling;": '\U00002308', - "LeftDoubleBracket;": '\U000027E6', - "LeftDownTeeVector;": '\U00002961', - "LeftDownVector;": '\U000021C3', - "LeftDownVectorBar;": '\U00002959', - "LeftFloor;": '\U0000230A', - "LeftRightArrow;": '\U00002194', - "LeftRightVector;": '\U0000294E', - "LeftTee;": '\U000022A3', - "LeftTeeArrow;": '\U000021A4', - "LeftTeeVector;": '\U0000295A', - "LeftTriangle;": '\U000022B2', - "LeftTriangleBar;": '\U000029CF', - "LeftTriangleEqual;": '\U000022B4', - "LeftUpDownVector;": '\U00002951', - "LeftUpTeeVector;": '\U00002960', - "LeftUpVector;": '\U000021BF', - "LeftUpVectorBar;": '\U00002958', - "LeftVector;": '\U000021BC', - "LeftVectorBar;": '\U00002952', - "Leftarrow;": '\U000021D0', - "Leftrightarrow;": '\U000021D4', - "LessEqualGreater;": '\U000022DA', - "LessFullEqual;": '\U00002266', - "LessGreater;": '\U00002276', - "LessLess;": '\U00002AA1', - "LessSlantEqual;": '\U00002A7D', - "LessTilde;": '\U00002272', - "Lfr;": '\U0001D50F', - "Ll;": '\U000022D8', - "Lleftarrow;": '\U000021DA', - "Lmidot;": '\U0000013F', - "LongLeftArrow;": '\U000027F5', - "LongLeftRightArrow;": '\U000027F7', - "LongRightArrow;": '\U000027F6', - "Longleftarrow;": '\U000027F8', - "Longleftrightarrow;": '\U000027FA', - "Longrightarrow;": '\U000027F9', - "Lopf;": '\U0001D543', - "LowerLeftArrow;": '\U00002199', - "LowerRightArrow;": '\U00002198', - "Lscr;": '\U00002112', - "Lsh;": '\U000021B0', - "Lstrok;": '\U00000141', - "Lt;": '\U0000226A', - "Map;": '\U00002905', - "Mcy;": '\U0000041C', - "MediumSpace;": '\U0000205F', - "Mellintrf;": '\U00002133', - "Mfr;": '\U0001D510', - "MinusPlus;": '\U00002213', - "Mopf;": '\U0001D544', - "Mscr;": '\U00002133', - "Mu;": '\U0000039C', - "NJcy;": '\U0000040A', - "Nacute;": '\U00000143', - "Ncaron;": '\U00000147', - "Ncedil;": '\U00000145', - "Ncy;": '\U0000041D', - "NegativeMediumSpace;": '\U0000200B', - "NegativeThickSpace;": '\U0000200B', - "NegativeThinSpace;": '\U0000200B', - "NegativeVeryThinSpace;": '\U0000200B', - "NestedGreaterGreater;": '\U0000226B', - "NestedLessLess;": '\U0000226A', - "NewLine;": '\U0000000A', - "Nfr;": '\U0001D511', - "NoBreak;": '\U00002060', - "NonBreakingSpace;": '\U000000A0', - "Nopf;": '\U00002115', - "Not;": '\U00002AEC', - "NotCongruent;": '\U00002262', - "NotCupCap;": '\U0000226D', - "NotDoubleVerticalBar;": '\U00002226', - "NotElement;": '\U00002209', - "NotEqual;": '\U00002260', - "NotExists;": '\U00002204', - "NotGreater;": '\U0000226F', - "NotGreaterEqual;": '\U00002271', - "NotGreaterLess;": '\U00002279', - "NotGreaterTilde;": '\U00002275', - "NotLeftTriangle;": '\U000022EA', - "NotLeftTriangleEqual;": '\U000022EC', - "NotLess;": '\U0000226E', - "NotLessEqual;": '\U00002270', - "NotLessGreater;": '\U00002278', - "NotLessTilde;": '\U00002274', - "NotPrecedes;": '\U00002280', - "NotPrecedesSlantEqual;": '\U000022E0', - "NotReverseElement;": '\U0000220C', - "NotRightTriangle;": '\U000022EB', - "NotRightTriangleEqual;": '\U000022ED', - "NotSquareSubsetEqual;": '\U000022E2', - "NotSquareSupersetEqual;": '\U000022E3', - "NotSubsetEqual;": '\U00002288', - "NotSucceeds;": '\U00002281', - "NotSucceedsSlantEqual;": '\U000022E1', - "NotSupersetEqual;": '\U00002289', - "NotTilde;": '\U00002241', - "NotTildeEqual;": '\U00002244', - "NotTildeFullEqual;": '\U00002247', - "NotTildeTilde;": '\U00002249', - "NotVerticalBar;": '\U00002224', - "Nscr;": '\U0001D4A9', - "Ntilde;": '\U000000D1', - "Nu;": '\U0000039D', - "OElig;": '\U00000152', - "Oacute;": '\U000000D3', - "Ocirc;": '\U000000D4', - "Ocy;": '\U0000041E', - "Odblac;": '\U00000150', - "Ofr;": '\U0001D512', - "Ograve;": '\U000000D2', - "Omacr;": '\U0000014C', - "Omega;": '\U000003A9', - "Omicron;": '\U0000039F', - "Oopf;": '\U0001D546', - "OpenCurlyDoubleQuote;": '\U0000201C', - "OpenCurlyQuote;": '\U00002018', - "Or;": '\U00002A54', - "Oscr;": '\U0001D4AA', - "Oslash;": '\U000000D8', - "Otilde;": '\U000000D5', - "Otimes;": '\U00002A37', - "Ouml;": '\U000000D6', - "OverBar;": '\U0000203E', - "OverBrace;": '\U000023DE', - "OverBracket;": '\U000023B4', - "OverParenthesis;": '\U000023DC', - "PartialD;": '\U00002202', - "Pcy;": '\U0000041F', - "Pfr;": '\U0001D513', - "Phi;": '\U000003A6', - "Pi;": '\U000003A0', - "PlusMinus;": '\U000000B1', - "Poincareplane;": '\U0000210C', - "Popf;": '\U00002119', - "Pr;": '\U00002ABB', - "Precedes;": '\U0000227A', - "PrecedesEqual;": '\U00002AAF', - "PrecedesSlantEqual;": '\U0000227C', - "PrecedesTilde;": '\U0000227E', - "Prime;": '\U00002033', - "Product;": '\U0000220F', - "Proportion;": '\U00002237', - "Proportional;": '\U0000221D', - "Pscr;": '\U0001D4AB', - "Psi;": '\U000003A8', - "QUOT;": '\U00000022', - "Qfr;": '\U0001D514', - "Qopf;": '\U0000211A', - "Qscr;": '\U0001D4AC', - "RBarr;": '\U00002910', - "REG;": '\U000000AE', - "Racute;": '\U00000154', - "Rang;": '\U000027EB', - "Rarr;": '\U000021A0', - "Rarrtl;": '\U00002916', - "Rcaron;": '\U00000158', - "Rcedil;": '\U00000156', - "Rcy;": '\U00000420', - "Re;": '\U0000211C', - "ReverseElement;": '\U0000220B', - "ReverseEquilibrium;": '\U000021CB', - "ReverseUpEquilibrium;": '\U0000296F', - "Rfr;": '\U0000211C', - "Rho;": '\U000003A1', - "RightAngleBracket;": '\U000027E9', - "RightArrow;": '\U00002192', - "RightArrowBar;": '\U000021E5', - "RightArrowLeftArrow;": '\U000021C4', - "RightCeiling;": '\U00002309', - "RightDoubleBracket;": '\U000027E7', - "RightDownTeeVector;": '\U0000295D', - "RightDownVector;": '\U000021C2', - "RightDownVectorBar;": '\U00002955', - "RightFloor;": '\U0000230B', - "RightTee;": '\U000022A2', - "RightTeeArrow;": '\U000021A6', - "RightTeeVector;": '\U0000295B', - "RightTriangle;": '\U000022B3', - "RightTriangleBar;": '\U000029D0', - "RightTriangleEqual;": '\U000022B5', - "RightUpDownVector;": '\U0000294F', - "RightUpTeeVector;": '\U0000295C', - "RightUpVector;": '\U000021BE', - "RightUpVectorBar;": '\U00002954', - "RightVector;": '\U000021C0', - "RightVectorBar;": '\U00002953', - "Rightarrow;": '\U000021D2', - "Ropf;": '\U0000211D', - "RoundImplies;": '\U00002970', - "Rrightarrow;": '\U000021DB', - "Rscr;": '\U0000211B', - "Rsh;": '\U000021B1', - "RuleDelayed;": '\U000029F4', - "SHCHcy;": '\U00000429', - "SHcy;": '\U00000428', - "SOFTcy;": '\U0000042C', - "Sacute;": '\U0000015A', - "Sc;": '\U00002ABC', - "Scaron;": '\U00000160', - "Scedil;": '\U0000015E', - "Scirc;": '\U0000015C', - "Scy;": '\U00000421', - "Sfr;": '\U0001D516', - "ShortDownArrow;": '\U00002193', - "ShortLeftArrow;": '\U00002190', - "ShortRightArrow;": '\U00002192', - "ShortUpArrow;": '\U00002191', - "Sigma;": '\U000003A3', - "SmallCircle;": '\U00002218', - "Sopf;": '\U0001D54A', - "Sqrt;": '\U0000221A', - "Square;": '\U000025A1', - "SquareIntersection;": '\U00002293', - "SquareSubset;": '\U0000228F', - "SquareSubsetEqual;": '\U00002291', - "SquareSuperset;": '\U00002290', - "SquareSupersetEqual;": '\U00002292', - "SquareUnion;": '\U00002294', - "Sscr;": '\U0001D4AE', - "Star;": '\U000022C6', - "Sub;": '\U000022D0', - "Subset;": '\U000022D0', - "SubsetEqual;": '\U00002286', - "Succeeds;": '\U0000227B', - "SucceedsEqual;": '\U00002AB0', - "SucceedsSlantEqual;": '\U0000227D', - "SucceedsTilde;": '\U0000227F', - "SuchThat;": '\U0000220B', - "Sum;": '\U00002211', - "Sup;": '\U000022D1', - "Superset;": '\U00002283', - "SupersetEqual;": '\U00002287', - "Supset;": '\U000022D1', - "THORN;": '\U000000DE', - "TRADE;": '\U00002122', - "TSHcy;": '\U0000040B', - "TScy;": '\U00000426', - "Tab;": '\U00000009', - "Tau;": '\U000003A4', - "Tcaron;": '\U00000164', - "Tcedil;": '\U00000162', - "Tcy;": '\U00000422', - "Tfr;": '\U0001D517', - "Therefore;": '\U00002234', - "Theta;": '\U00000398', - "ThinSpace;": '\U00002009', - "Tilde;": '\U0000223C', - "TildeEqual;": '\U00002243', - "TildeFullEqual;": '\U00002245', - "TildeTilde;": '\U00002248', - "Topf;": '\U0001D54B', - "TripleDot;": '\U000020DB', - "Tscr;": '\U0001D4AF', - "Tstrok;": '\U00000166', - "Uacute;": '\U000000DA', - "Uarr;": '\U0000219F', - "Uarrocir;": '\U00002949', - "Ubrcy;": '\U0000040E', - "Ubreve;": '\U0000016C', - "Ucirc;": '\U000000DB', - "Ucy;": '\U00000423', - "Udblac;": '\U00000170', - "Ufr;": '\U0001D518', - "Ugrave;": '\U000000D9', - "Umacr;": '\U0000016A', - "UnderBar;": '\U0000005F', - "UnderBrace;": '\U000023DF', - "UnderBracket;": '\U000023B5', - "UnderParenthesis;": '\U000023DD', - "Union;": '\U000022C3', - "UnionPlus;": '\U0000228E', - "Uogon;": '\U00000172', - "Uopf;": '\U0001D54C', - "UpArrow;": '\U00002191', - "UpArrowBar;": '\U00002912', - "UpArrowDownArrow;": '\U000021C5', - "UpDownArrow;": '\U00002195', - "UpEquilibrium;": '\U0000296E', - "UpTee;": '\U000022A5', - "UpTeeArrow;": '\U000021A5', - "Uparrow;": '\U000021D1', - "Updownarrow;": '\U000021D5', - "UpperLeftArrow;": '\U00002196', - "UpperRightArrow;": '\U00002197', - "Upsi;": '\U000003D2', - "Upsilon;": '\U000003A5', - "Uring;": '\U0000016E', - "Uscr;": '\U0001D4B0', - "Utilde;": '\U00000168', - "Uuml;": '\U000000DC', - "VDash;": '\U000022AB', - "Vbar;": '\U00002AEB', - "Vcy;": '\U00000412', - "Vdash;": '\U000022A9', - "Vdashl;": '\U00002AE6', - "Vee;": '\U000022C1', - "Verbar;": '\U00002016', - "Vert;": '\U00002016', - "VerticalBar;": '\U00002223', - "VerticalLine;": '\U0000007C', - "VerticalSeparator;": '\U00002758', - "VerticalTilde;": '\U00002240', - "VeryThinSpace;": '\U0000200A', - "Vfr;": '\U0001D519', - "Vopf;": '\U0001D54D', - "Vscr;": '\U0001D4B1', - "Vvdash;": '\U000022AA', - "Wcirc;": '\U00000174', - "Wedge;": '\U000022C0', - "Wfr;": '\U0001D51A', - "Wopf;": '\U0001D54E', - "Wscr;": '\U0001D4B2', - "Xfr;": '\U0001D51B', - "Xi;": '\U0000039E', - "Xopf;": '\U0001D54F', - "Xscr;": '\U0001D4B3', - "YAcy;": '\U0000042F', - "YIcy;": '\U00000407', - "YUcy;": '\U0000042E', - "Yacute;": '\U000000DD', - "Ycirc;": '\U00000176', - "Ycy;": '\U0000042B', - "Yfr;": '\U0001D51C', - "Yopf;": '\U0001D550', - "Yscr;": '\U0001D4B4', - "Yuml;": '\U00000178', - "ZHcy;": '\U00000416', - "Zacute;": '\U00000179', - "Zcaron;": '\U0000017D', - "Zcy;": '\U00000417', - "Zdot;": '\U0000017B', - "ZeroWidthSpace;": '\U0000200B', - "Zeta;": '\U00000396', - "Zfr;": '\U00002128', - "Zopf;": '\U00002124', - "Zscr;": '\U0001D4B5', - "aacute;": '\U000000E1', - "abreve;": '\U00000103', - "ac;": '\U0000223E', - "acd;": '\U0000223F', - "acirc;": '\U000000E2', - "acute;": '\U000000B4', - "acy;": '\U00000430', - "aelig;": '\U000000E6', - "af;": '\U00002061', - "afr;": '\U0001D51E', - "agrave;": '\U000000E0', - "alefsym;": '\U00002135', - "aleph;": '\U00002135', - "alpha;": '\U000003B1', - "amacr;": '\U00000101', - "amalg;": '\U00002A3F', - "amp;": '\U00000026', - "and;": '\U00002227', - "andand;": '\U00002A55', - "andd;": '\U00002A5C', - "andslope;": '\U00002A58', - "andv;": '\U00002A5A', - "ang;": '\U00002220', - "ange;": '\U000029A4', - "angle;": '\U00002220', - "angmsd;": '\U00002221', - "angmsdaa;": '\U000029A8', - "angmsdab;": '\U000029A9', - "angmsdac;": '\U000029AA', - "angmsdad;": '\U000029AB', - "angmsdae;": '\U000029AC', - "angmsdaf;": '\U000029AD', - "angmsdag;": '\U000029AE', - "angmsdah;": '\U000029AF', - "angrt;": '\U0000221F', - "angrtvb;": '\U000022BE', - "angrtvbd;": '\U0000299D', - "angsph;": '\U00002222', - "angst;": '\U000000C5', - "angzarr;": '\U0000237C', - "aogon;": '\U00000105', - "aopf;": '\U0001D552', - "ap;": '\U00002248', - "apE;": '\U00002A70', - "apacir;": '\U00002A6F', - "ape;": '\U0000224A', - "apid;": '\U0000224B', - "apos;": '\U00000027', - "approx;": '\U00002248', - "approxeq;": '\U0000224A', - "aring;": '\U000000E5', - "ascr;": '\U0001D4B6', - "ast;": '\U0000002A', - "asymp;": '\U00002248', - "asympeq;": '\U0000224D', - "atilde;": '\U000000E3', - "auml;": '\U000000E4', - "awconint;": '\U00002233', - "awint;": '\U00002A11', - "bNot;": '\U00002AED', - "backcong;": '\U0000224C', - "backepsilon;": '\U000003F6', - "backprime;": '\U00002035', - "backsim;": '\U0000223D', - "backsimeq;": '\U000022CD', - "barvee;": '\U000022BD', - "barwed;": '\U00002305', - "barwedge;": '\U00002305', - "bbrk;": '\U000023B5', - "bbrktbrk;": '\U000023B6', - "bcong;": '\U0000224C', - "bcy;": '\U00000431', - "bdquo;": '\U0000201E', - "becaus;": '\U00002235', - "because;": '\U00002235', - "bemptyv;": '\U000029B0', - "bepsi;": '\U000003F6', - "bernou;": '\U0000212C', - "beta;": '\U000003B2', - "beth;": '\U00002136', - "between;": '\U0000226C', - "bfr;": '\U0001D51F', - "bigcap;": '\U000022C2', - "bigcirc;": '\U000025EF', - "bigcup;": '\U000022C3', - "bigodot;": '\U00002A00', - "bigoplus;": '\U00002A01', - "bigotimes;": '\U00002A02', - "bigsqcup;": '\U00002A06', - "bigstar;": '\U00002605', - "bigtriangledown;": '\U000025BD', - "bigtriangleup;": '\U000025B3', - "biguplus;": '\U00002A04', - "bigvee;": '\U000022C1', - "bigwedge;": '\U000022C0', - "bkarow;": '\U0000290D', - "blacklozenge;": '\U000029EB', - "blacksquare;": '\U000025AA', - "blacktriangle;": '\U000025B4', - "blacktriangledown;": '\U000025BE', - "blacktriangleleft;": '\U000025C2', - "blacktriangleright;": '\U000025B8', - "blank;": '\U00002423', - "blk12;": '\U00002592', - "blk14;": '\U00002591', - "blk34;": '\U00002593', - "block;": '\U00002588', - "bnot;": '\U00002310', - "bopf;": '\U0001D553', - "bot;": '\U000022A5', - "bottom;": '\U000022A5', - "bowtie;": '\U000022C8', - "boxDL;": '\U00002557', - "boxDR;": '\U00002554', - "boxDl;": '\U00002556', - "boxDr;": '\U00002553', - "boxH;": '\U00002550', - "boxHD;": '\U00002566', - "boxHU;": '\U00002569', - "boxHd;": '\U00002564', - "boxHu;": '\U00002567', - "boxUL;": '\U0000255D', - "boxUR;": '\U0000255A', - "boxUl;": '\U0000255C', - "boxUr;": '\U00002559', - "boxV;": '\U00002551', - "boxVH;": '\U0000256C', - "boxVL;": '\U00002563', - "boxVR;": '\U00002560', - "boxVh;": '\U0000256B', - "boxVl;": '\U00002562', - "boxVr;": '\U0000255F', - "boxbox;": '\U000029C9', - "boxdL;": '\U00002555', - "boxdR;": '\U00002552', - "boxdl;": '\U00002510', - "boxdr;": '\U0000250C', - "boxh;": '\U00002500', - "boxhD;": '\U00002565', - "boxhU;": '\U00002568', - "boxhd;": '\U0000252C', - "boxhu;": '\U00002534', - "boxminus;": '\U0000229F', - "boxplus;": '\U0000229E', - "boxtimes;": '\U000022A0', - "boxuL;": '\U0000255B', - "boxuR;": '\U00002558', - "boxul;": '\U00002518', - "boxur;": '\U00002514', - "boxv;": '\U00002502', - "boxvH;": '\U0000256A', - "boxvL;": '\U00002561', - "boxvR;": '\U0000255E', - "boxvh;": '\U0000253C', - "boxvl;": '\U00002524', - "boxvr;": '\U0000251C', - "bprime;": '\U00002035', - "breve;": '\U000002D8', - "brvbar;": '\U000000A6', - "bscr;": '\U0001D4B7', - "bsemi;": '\U0000204F', - "bsim;": '\U0000223D', - "bsime;": '\U000022CD', - "bsol;": '\U0000005C', - "bsolb;": '\U000029C5', - "bsolhsub;": '\U000027C8', - "bull;": '\U00002022', - "bullet;": '\U00002022', - "bump;": '\U0000224E', - "bumpE;": '\U00002AAE', - "bumpe;": '\U0000224F', - "bumpeq;": '\U0000224F', - "cacute;": '\U00000107', - "cap;": '\U00002229', - "capand;": '\U00002A44', - "capbrcup;": '\U00002A49', - "capcap;": '\U00002A4B', - "capcup;": '\U00002A47', - "capdot;": '\U00002A40', - "caret;": '\U00002041', - "caron;": '\U000002C7', - "ccaps;": '\U00002A4D', - "ccaron;": '\U0000010D', - "ccedil;": '\U000000E7', - "ccirc;": '\U00000109', - "ccups;": '\U00002A4C', - "ccupssm;": '\U00002A50', - "cdot;": '\U0000010B', - "cedil;": '\U000000B8', - "cemptyv;": '\U000029B2', - "cent;": '\U000000A2', - "centerdot;": '\U000000B7', - "cfr;": '\U0001D520', - "chcy;": '\U00000447', - "check;": '\U00002713', - "checkmark;": '\U00002713', - "chi;": '\U000003C7', - "cir;": '\U000025CB', - "cirE;": '\U000029C3', - "circ;": '\U000002C6', - "circeq;": '\U00002257', - "circlearrowleft;": '\U000021BA', - "circlearrowright;": '\U000021BB', - "circledR;": '\U000000AE', - "circledS;": '\U000024C8', - "circledast;": '\U0000229B', - "circledcirc;": '\U0000229A', - "circleddash;": '\U0000229D', - "cire;": '\U00002257', - "cirfnint;": '\U00002A10', - "cirmid;": '\U00002AEF', - "cirscir;": '\U000029C2', - "clubs;": '\U00002663', - "clubsuit;": '\U00002663', - "colon;": '\U0000003A', - "colone;": '\U00002254', - "coloneq;": '\U00002254', - "comma;": '\U0000002C', - "commat;": '\U00000040', - "comp;": '\U00002201', - "compfn;": '\U00002218', - "complement;": '\U00002201', - "complexes;": '\U00002102', - "cong;": '\U00002245', - "congdot;": '\U00002A6D', - "conint;": '\U0000222E', - "copf;": '\U0001D554', - "coprod;": '\U00002210', - "copy;": '\U000000A9', - "copysr;": '\U00002117', - "crarr;": '\U000021B5', - "cross;": '\U00002717', - "cscr;": '\U0001D4B8', - "csub;": '\U00002ACF', - "csube;": '\U00002AD1', - "csup;": '\U00002AD0', - "csupe;": '\U00002AD2', - "ctdot;": '\U000022EF', - "cudarrl;": '\U00002938', - "cudarrr;": '\U00002935', - "cuepr;": '\U000022DE', - "cuesc;": '\U000022DF', - "cularr;": '\U000021B6', - "cularrp;": '\U0000293D', - "cup;": '\U0000222A', - "cupbrcap;": '\U00002A48', - "cupcap;": '\U00002A46', - "cupcup;": '\U00002A4A', - "cupdot;": '\U0000228D', - "cupor;": '\U00002A45', - "curarr;": '\U000021B7', - "curarrm;": '\U0000293C', - "curlyeqprec;": '\U000022DE', - "curlyeqsucc;": '\U000022DF', - "curlyvee;": '\U000022CE', - "curlywedge;": '\U000022CF', - "curren;": '\U000000A4', - "curvearrowleft;": '\U000021B6', - "curvearrowright;": '\U000021B7', - "cuvee;": '\U000022CE', - "cuwed;": '\U000022CF', - "cwconint;": '\U00002232', - "cwint;": '\U00002231', - "cylcty;": '\U0000232D', - "dArr;": '\U000021D3', - "dHar;": '\U00002965', - "dagger;": '\U00002020', - "daleth;": '\U00002138', - "darr;": '\U00002193', - "dash;": '\U00002010', - "dashv;": '\U000022A3', - "dbkarow;": '\U0000290F', - "dblac;": '\U000002DD', - "dcaron;": '\U0000010F', - "dcy;": '\U00000434', - "dd;": '\U00002146', - "ddagger;": '\U00002021', - "ddarr;": '\U000021CA', - "ddotseq;": '\U00002A77', - "deg;": '\U000000B0', - "delta;": '\U000003B4', - "demptyv;": '\U000029B1', - "dfisht;": '\U0000297F', - "dfr;": '\U0001D521', - "dharl;": '\U000021C3', - "dharr;": '\U000021C2', - "diam;": '\U000022C4', - "diamond;": '\U000022C4', - "diamondsuit;": '\U00002666', - "diams;": '\U00002666', - "die;": '\U000000A8', - "digamma;": '\U000003DD', - "disin;": '\U000022F2', - "div;": '\U000000F7', - "divide;": '\U000000F7', - "divideontimes;": '\U000022C7', - "divonx;": '\U000022C7', - "djcy;": '\U00000452', - "dlcorn;": '\U0000231E', - "dlcrop;": '\U0000230D', - "dollar;": '\U00000024', - "dopf;": '\U0001D555', - "dot;": '\U000002D9', - "doteq;": '\U00002250', - "doteqdot;": '\U00002251', - "dotminus;": '\U00002238', - "dotplus;": '\U00002214', - "dotsquare;": '\U000022A1', - "doublebarwedge;": '\U00002306', - "downarrow;": '\U00002193', - "downdownarrows;": '\U000021CA', - "downharpoonleft;": '\U000021C3', - "downharpoonright;": '\U000021C2', - "drbkarow;": '\U00002910', - "drcorn;": '\U0000231F', - "drcrop;": '\U0000230C', - "dscr;": '\U0001D4B9', - "dscy;": '\U00000455', - "dsol;": '\U000029F6', - "dstrok;": '\U00000111', - "dtdot;": '\U000022F1', - "dtri;": '\U000025BF', - "dtrif;": '\U000025BE', - "duarr;": '\U000021F5', - "duhar;": '\U0000296F', - "dwangle;": '\U000029A6', - "dzcy;": '\U0000045F', - "dzigrarr;": '\U000027FF', - "eDDot;": '\U00002A77', - "eDot;": '\U00002251', - "eacute;": '\U000000E9', - "easter;": '\U00002A6E', - "ecaron;": '\U0000011B', - "ecir;": '\U00002256', - "ecirc;": '\U000000EA', - "ecolon;": '\U00002255', - "ecy;": '\U0000044D', - "edot;": '\U00000117', - "ee;": '\U00002147', - "efDot;": '\U00002252', - "efr;": '\U0001D522', - "eg;": '\U00002A9A', - "egrave;": '\U000000E8', - "egs;": '\U00002A96', - "egsdot;": '\U00002A98', - "el;": '\U00002A99', - "elinters;": '\U000023E7', - "ell;": '\U00002113', - "els;": '\U00002A95', - "elsdot;": '\U00002A97', - "emacr;": '\U00000113', - "empty;": '\U00002205', - "emptyset;": '\U00002205', - "emptyv;": '\U00002205', - "emsp;": '\U00002003', - "emsp13;": '\U00002004', - "emsp14;": '\U00002005', - "eng;": '\U0000014B', - "ensp;": '\U00002002', - "eogon;": '\U00000119', - "eopf;": '\U0001D556', - "epar;": '\U000022D5', - "eparsl;": '\U000029E3', - "eplus;": '\U00002A71', - "epsi;": '\U000003B5', - "epsilon;": '\U000003B5', - "epsiv;": '\U000003F5', - "eqcirc;": '\U00002256', - "eqcolon;": '\U00002255', - "eqsim;": '\U00002242', - "eqslantgtr;": '\U00002A96', - "eqslantless;": '\U00002A95', - "equals;": '\U0000003D', - "equest;": '\U0000225F', - "equiv;": '\U00002261', - "equivDD;": '\U00002A78', - "eqvparsl;": '\U000029E5', - "erDot;": '\U00002253', - "erarr;": '\U00002971', - "escr;": '\U0000212F', - "esdot;": '\U00002250', - "esim;": '\U00002242', - "eta;": '\U000003B7', - "eth;": '\U000000F0', - "euml;": '\U000000EB', - "euro;": '\U000020AC', - "excl;": '\U00000021', - "exist;": '\U00002203', - "expectation;": '\U00002130', - "exponentiale;": '\U00002147', - "fallingdotseq;": '\U00002252', - "fcy;": '\U00000444', - "female;": '\U00002640', - "ffilig;": '\U0000FB03', - "fflig;": '\U0000FB00', - "ffllig;": '\U0000FB04', - "ffr;": '\U0001D523', - "filig;": '\U0000FB01', - "flat;": '\U0000266D', - "fllig;": '\U0000FB02', - "fltns;": '\U000025B1', - "fnof;": '\U00000192', - "fopf;": '\U0001D557', - "forall;": '\U00002200', - "fork;": '\U000022D4', - "forkv;": '\U00002AD9', - "fpartint;": '\U00002A0D', - "frac12;": '\U000000BD', - "frac13;": '\U00002153', - "frac14;": '\U000000BC', - "frac15;": '\U00002155', - "frac16;": '\U00002159', - "frac18;": '\U0000215B', - "frac23;": '\U00002154', - "frac25;": '\U00002156', - "frac34;": '\U000000BE', - "frac35;": '\U00002157', - "frac38;": '\U0000215C', - "frac45;": '\U00002158', - "frac56;": '\U0000215A', - "frac58;": '\U0000215D', - "frac78;": '\U0000215E', - "frasl;": '\U00002044', - "frown;": '\U00002322', - "fscr;": '\U0001D4BB', - "gE;": '\U00002267', - "gEl;": '\U00002A8C', - "gacute;": '\U000001F5', - "gamma;": '\U000003B3', - "gammad;": '\U000003DD', - "gap;": '\U00002A86', - "gbreve;": '\U0000011F', - "gcirc;": '\U0000011D', - "gcy;": '\U00000433', - "gdot;": '\U00000121', - "ge;": '\U00002265', - "gel;": '\U000022DB', - "geq;": '\U00002265', - "geqq;": '\U00002267', - "geqslant;": '\U00002A7E', - "ges;": '\U00002A7E', - "gescc;": '\U00002AA9', - "gesdot;": '\U00002A80', - "gesdoto;": '\U00002A82', - "gesdotol;": '\U00002A84', - "gesles;": '\U00002A94', - "gfr;": '\U0001D524', - "gg;": '\U0000226B', - "ggg;": '\U000022D9', - "gimel;": '\U00002137', - "gjcy;": '\U00000453', - "gl;": '\U00002277', - "glE;": '\U00002A92', - "gla;": '\U00002AA5', - "glj;": '\U00002AA4', - "gnE;": '\U00002269', - "gnap;": '\U00002A8A', - "gnapprox;": '\U00002A8A', - "gne;": '\U00002A88', - "gneq;": '\U00002A88', - "gneqq;": '\U00002269', - "gnsim;": '\U000022E7', - "gopf;": '\U0001D558', - "grave;": '\U00000060', - "gscr;": '\U0000210A', - "gsim;": '\U00002273', - "gsime;": '\U00002A8E', - "gsiml;": '\U00002A90', - "gt;": '\U0000003E', - "gtcc;": '\U00002AA7', - "gtcir;": '\U00002A7A', - "gtdot;": '\U000022D7', - "gtlPar;": '\U00002995', - "gtquest;": '\U00002A7C', - "gtrapprox;": '\U00002A86', - "gtrarr;": '\U00002978', - "gtrdot;": '\U000022D7', - "gtreqless;": '\U000022DB', - "gtreqqless;": '\U00002A8C', - "gtrless;": '\U00002277', - "gtrsim;": '\U00002273', - "hArr;": '\U000021D4', - "hairsp;": '\U0000200A', - "half;": '\U000000BD', - "hamilt;": '\U0000210B', - "hardcy;": '\U0000044A', - "harr;": '\U00002194', - "harrcir;": '\U00002948', - "harrw;": '\U000021AD', - "hbar;": '\U0000210F', - "hcirc;": '\U00000125', - "hearts;": '\U00002665', - "heartsuit;": '\U00002665', - "hellip;": '\U00002026', - "hercon;": '\U000022B9', - "hfr;": '\U0001D525', - "hksearow;": '\U00002925', - "hkswarow;": '\U00002926', - "hoarr;": '\U000021FF', - "homtht;": '\U0000223B', - "hookleftarrow;": '\U000021A9', - "hookrightarrow;": '\U000021AA', - "hopf;": '\U0001D559', - "horbar;": '\U00002015', - "hscr;": '\U0001D4BD', - "hslash;": '\U0000210F', - "hstrok;": '\U00000127', - "hybull;": '\U00002043', - "hyphen;": '\U00002010', - "iacute;": '\U000000ED', - "ic;": '\U00002063', - "icirc;": '\U000000EE', - "icy;": '\U00000438', - "iecy;": '\U00000435', - "iexcl;": '\U000000A1', - "iff;": '\U000021D4', - "ifr;": '\U0001D526', - "igrave;": '\U000000EC', - "ii;": '\U00002148', - "iiiint;": '\U00002A0C', - "iiint;": '\U0000222D', - "iinfin;": '\U000029DC', - "iiota;": '\U00002129', - "ijlig;": '\U00000133', - "imacr;": '\U0000012B', - "image;": '\U00002111', - "imagline;": '\U00002110', - "imagpart;": '\U00002111', - "imath;": '\U00000131', - "imof;": '\U000022B7', - "imped;": '\U000001B5', - "in;": '\U00002208', - "incare;": '\U00002105', - "infin;": '\U0000221E', - "infintie;": '\U000029DD', - "inodot;": '\U00000131', - "int;": '\U0000222B', - "intcal;": '\U000022BA', - "integers;": '\U00002124', - "intercal;": '\U000022BA', - "intlarhk;": '\U00002A17', - "intprod;": '\U00002A3C', - "iocy;": '\U00000451', - "iogon;": '\U0000012F', - "iopf;": '\U0001D55A', - "iota;": '\U000003B9', - "iprod;": '\U00002A3C', - "iquest;": '\U000000BF', - "iscr;": '\U0001D4BE', - "isin;": '\U00002208', - "isinE;": '\U000022F9', - "isindot;": '\U000022F5', - "isins;": '\U000022F4', - "isinsv;": '\U000022F3', - "isinv;": '\U00002208', - "it;": '\U00002062', - "itilde;": '\U00000129', - "iukcy;": '\U00000456', - "iuml;": '\U000000EF', - "jcirc;": '\U00000135', - "jcy;": '\U00000439', - "jfr;": '\U0001D527', - "jmath;": '\U00000237', - "jopf;": '\U0001D55B', - "jscr;": '\U0001D4BF', - "jsercy;": '\U00000458', - "jukcy;": '\U00000454', - "kappa;": '\U000003BA', - "kappav;": '\U000003F0', - "kcedil;": '\U00000137', - "kcy;": '\U0000043A', - "kfr;": '\U0001D528', - "kgreen;": '\U00000138', - "khcy;": '\U00000445', - "kjcy;": '\U0000045C', - "kopf;": '\U0001D55C', - "kscr;": '\U0001D4C0', - "lAarr;": '\U000021DA', - "lArr;": '\U000021D0', - "lAtail;": '\U0000291B', - "lBarr;": '\U0000290E', - "lE;": '\U00002266', - "lEg;": '\U00002A8B', - "lHar;": '\U00002962', - "lacute;": '\U0000013A', - "laemptyv;": '\U000029B4', - "lagran;": '\U00002112', - "lambda;": '\U000003BB', - "lang;": '\U000027E8', - "langd;": '\U00002991', - "langle;": '\U000027E8', - "lap;": '\U00002A85', - "laquo;": '\U000000AB', - "larr;": '\U00002190', - "larrb;": '\U000021E4', - "larrbfs;": '\U0000291F', - "larrfs;": '\U0000291D', - "larrhk;": '\U000021A9', - "larrlp;": '\U000021AB', - "larrpl;": '\U00002939', - "larrsim;": '\U00002973', - "larrtl;": '\U000021A2', - "lat;": '\U00002AAB', - "latail;": '\U00002919', - "late;": '\U00002AAD', - "lbarr;": '\U0000290C', - "lbbrk;": '\U00002772', - "lbrace;": '\U0000007B', - "lbrack;": '\U0000005B', - "lbrke;": '\U0000298B', - "lbrksld;": '\U0000298F', - "lbrkslu;": '\U0000298D', - "lcaron;": '\U0000013E', - "lcedil;": '\U0000013C', - "lceil;": '\U00002308', - "lcub;": '\U0000007B', - "lcy;": '\U0000043B', - "ldca;": '\U00002936', - "ldquo;": '\U0000201C', - "ldquor;": '\U0000201E', - "ldrdhar;": '\U00002967', - "ldrushar;": '\U0000294B', - "ldsh;": '\U000021B2', - "le;": '\U00002264', - "leftarrow;": '\U00002190', - "leftarrowtail;": '\U000021A2', - "leftharpoondown;": '\U000021BD', - "leftharpoonup;": '\U000021BC', - "leftleftarrows;": '\U000021C7', - "leftrightarrow;": '\U00002194', - "leftrightarrows;": '\U000021C6', - "leftrightharpoons;": '\U000021CB', - "leftrightsquigarrow;": '\U000021AD', - "leftthreetimes;": '\U000022CB', - "leg;": '\U000022DA', - "leq;": '\U00002264', - "leqq;": '\U00002266', - "leqslant;": '\U00002A7D', - "les;": '\U00002A7D', - "lescc;": '\U00002AA8', - "lesdot;": '\U00002A7F', - "lesdoto;": '\U00002A81', - "lesdotor;": '\U00002A83', - "lesges;": '\U00002A93', - "lessapprox;": '\U00002A85', - "lessdot;": '\U000022D6', - "lesseqgtr;": '\U000022DA', - "lesseqqgtr;": '\U00002A8B', - "lessgtr;": '\U00002276', - "lesssim;": '\U00002272', - "lfisht;": '\U0000297C', - "lfloor;": '\U0000230A', - "lfr;": '\U0001D529', - "lg;": '\U00002276', - "lgE;": '\U00002A91', - "lhard;": '\U000021BD', - "lharu;": '\U000021BC', - "lharul;": '\U0000296A', - "lhblk;": '\U00002584', - "ljcy;": '\U00000459', - "ll;": '\U0000226A', - "llarr;": '\U000021C7', - "llcorner;": '\U0000231E', - "llhard;": '\U0000296B', - "lltri;": '\U000025FA', - "lmidot;": '\U00000140', - "lmoust;": '\U000023B0', - "lmoustache;": '\U000023B0', - "lnE;": '\U00002268', - "lnap;": '\U00002A89', - "lnapprox;": '\U00002A89', - "lne;": '\U00002A87', - "lneq;": '\U00002A87', - "lneqq;": '\U00002268', - "lnsim;": '\U000022E6', - "loang;": '\U000027EC', - "loarr;": '\U000021FD', - "lobrk;": '\U000027E6', - "longleftarrow;": '\U000027F5', - "longleftrightarrow;": '\U000027F7', - "longmapsto;": '\U000027FC', - "longrightarrow;": '\U000027F6', - "looparrowleft;": '\U000021AB', - "looparrowright;": '\U000021AC', - "lopar;": '\U00002985', - "lopf;": '\U0001D55D', - "loplus;": '\U00002A2D', - "lotimes;": '\U00002A34', - "lowast;": '\U00002217', - "lowbar;": '\U0000005F', - "loz;": '\U000025CA', - "lozenge;": '\U000025CA', - "lozf;": '\U000029EB', - "lpar;": '\U00000028', - "lparlt;": '\U00002993', - "lrarr;": '\U000021C6', - "lrcorner;": '\U0000231F', - "lrhar;": '\U000021CB', - "lrhard;": '\U0000296D', - "lrm;": '\U0000200E', - "lrtri;": '\U000022BF', - "lsaquo;": '\U00002039', - "lscr;": '\U0001D4C1', - "lsh;": '\U000021B0', - "lsim;": '\U00002272', - "lsime;": '\U00002A8D', - "lsimg;": '\U00002A8F', - "lsqb;": '\U0000005B', - "lsquo;": '\U00002018', - "lsquor;": '\U0000201A', - "lstrok;": '\U00000142', - "lt;": '\U0000003C', - "ltcc;": '\U00002AA6', - "ltcir;": '\U00002A79', - "ltdot;": '\U000022D6', - "lthree;": '\U000022CB', - "ltimes;": '\U000022C9', - "ltlarr;": '\U00002976', - "ltquest;": '\U00002A7B', - "ltrPar;": '\U00002996', - "ltri;": '\U000025C3', - "ltrie;": '\U000022B4', - "ltrif;": '\U000025C2', - "lurdshar;": '\U0000294A', - "luruhar;": '\U00002966', - "mDDot;": '\U0000223A', - "macr;": '\U000000AF', - "male;": '\U00002642', - "malt;": '\U00002720', - "maltese;": '\U00002720', - "map;": '\U000021A6', - "mapsto;": '\U000021A6', - "mapstodown;": '\U000021A7', - "mapstoleft;": '\U000021A4', - "mapstoup;": '\U000021A5', - "marker;": '\U000025AE', - "mcomma;": '\U00002A29', - "mcy;": '\U0000043C', - "mdash;": '\U00002014', - "measuredangle;": '\U00002221', - "mfr;": '\U0001D52A', - "mho;": '\U00002127', - "micro;": '\U000000B5', - "mid;": '\U00002223', - "midast;": '\U0000002A', - "midcir;": '\U00002AF0', - "middot;": '\U000000B7', - "minus;": '\U00002212', - "minusb;": '\U0000229F', - "minusd;": '\U00002238', - "minusdu;": '\U00002A2A', - "mlcp;": '\U00002ADB', - "mldr;": '\U00002026', - "mnplus;": '\U00002213', - "models;": '\U000022A7', - "mopf;": '\U0001D55E', - "mp;": '\U00002213', - "mscr;": '\U0001D4C2', - "mstpos;": '\U0000223E', - "mu;": '\U000003BC', - "multimap;": '\U000022B8', - "mumap;": '\U000022B8', - "nLeftarrow;": '\U000021CD', - "nLeftrightarrow;": '\U000021CE', - "nRightarrow;": '\U000021CF', - "nVDash;": '\U000022AF', - "nVdash;": '\U000022AE', - "nabla;": '\U00002207', - "nacute;": '\U00000144', - "nap;": '\U00002249', - "napos;": '\U00000149', - "napprox;": '\U00002249', - "natur;": '\U0000266E', - "natural;": '\U0000266E', - "naturals;": '\U00002115', - "nbsp;": '\U000000A0', - "ncap;": '\U00002A43', - "ncaron;": '\U00000148', - "ncedil;": '\U00000146', - "ncong;": '\U00002247', - "ncup;": '\U00002A42', - "ncy;": '\U0000043D', - "ndash;": '\U00002013', - "ne;": '\U00002260', - "neArr;": '\U000021D7', - "nearhk;": '\U00002924', - "nearr;": '\U00002197', - "nearrow;": '\U00002197', - "nequiv;": '\U00002262', - "nesear;": '\U00002928', - "nexist;": '\U00002204', - "nexists;": '\U00002204', - "nfr;": '\U0001D52B', - "nge;": '\U00002271', - "ngeq;": '\U00002271', - "ngsim;": '\U00002275', - "ngt;": '\U0000226F', - "ngtr;": '\U0000226F', - "nhArr;": '\U000021CE', - "nharr;": '\U000021AE', - "nhpar;": '\U00002AF2', - "ni;": '\U0000220B', - "nis;": '\U000022FC', - "nisd;": '\U000022FA', - "niv;": '\U0000220B', - "njcy;": '\U0000045A', - "nlArr;": '\U000021CD', - "nlarr;": '\U0000219A', - "nldr;": '\U00002025', - "nle;": '\U00002270', - "nleftarrow;": '\U0000219A', - "nleftrightarrow;": '\U000021AE', - "nleq;": '\U00002270', - "nless;": '\U0000226E', - "nlsim;": '\U00002274', - "nlt;": '\U0000226E', - "nltri;": '\U000022EA', - "nltrie;": '\U000022EC', - "nmid;": '\U00002224', - "nopf;": '\U0001D55F', - "not;": '\U000000AC', - "notin;": '\U00002209', - "notinva;": '\U00002209', - "notinvb;": '\U000022F7', - "notinvc;": '\U000022F6', - "notni;": '\U0000220C', - "notniva;": '\U0000220C', - "notnivb;": '\U000022FE', - "notnivc;": '\U000022FD', - "npar;": '\U00002226', - "nparallel;": '\U00002226', - "npolint;": '\U00002A14', - "npr;": '\U00002280', - "nprcue;": '\U000022E0', - "nprec;": '\U00002280', - "nrArr;": '\U000021CF', - "nrarr;": '\U0000219B', - "nrightarrow;": '\U0000219B', - "nrtri;": '\U000022EB', - "nrtrie;": '\U000022ED', - "nsc;": '\U00002281', - "nsccue;": '\U000022E1', - "nscr;": '\U0001D4C3', - "nshortmid;": '\U00002224', - "nshortparallel;": '\U00002226', - "nsim;": '\U00002241', - "nsime;": '\U00002244', - "nsimeq;": '\U00002244', - "nsmid;": '\U00002224', - "nspar;": '\U00002226', - "nsqsube;": '\U000022E2', - "nsqsupe;": '\U000022E3', - "nsub;": '\U00002284', - "nsube;": '\U00002288', - "nsubseteq;": '\U00002288', - "nsucc;": '\U00002281', - "nsup;": '\U00002285', - "nsupe;": '\U00002289', - "nsupseteq;": '\U00002289', - "ntgl;": '\U00002279', - "ntilde;": '\U000000F1', - "ntlg;": '\U00002278', - "ntriangleleft;": '\U000022EA', - "ntrianglelefteq;": '\U000022EC', - "ntriangleright;": '\U000022EB', - "ntrianglerighteq;": '\U000022ED', - "nu;": '\U000003BD', - "num;": '\U00000023', - "numero;": '\U00002116', - "numsp;": '\U00002007', - "nvDash;": '\U000022AD', - "nvHarr;": '\U00002904', - "nvdash;": '\U000022AC', - "nvinfin;": '\U000029DE', - "nvlArr;": '\U00002902', - "nvrArr;": '\U00002903', - "nwArr;": '\U000021D6', - "nwarhk;": '\U00002923', - "nwarr;": '\U00002196', - "nwarrow;": '\U00002196', - "nwnear;": '\U00002927', - "oS;": '\U000024C8', - "oacute;": '\U000000F3', - "oast;": '\U0000229B', - "ocir;": '\U0000229A', - "ocirc;": '\U000000F4', - "ocy;": '\U0000043E', - "odash;": '\U0000229D', - "odblac;": '\U00000151', - "odiv;": '\U00002A38', - "odot;": '\U00002299', - "odsold;": '\U000029BC', - "oelig;": '\U00000153', - "ofcir;": '\U000029BF', - "ofr;": '\U0001D52C', - "ogon;": '\U000002DB', - "ograve;": '\U000000F2', - "ogt;": '\U000029C1', - "ohbar;": '\U000029B5', - "ohm;": '\U000003A9', - "oint;": '\U0000222E', - "olarr;": '\U000021BA', - "olcir;": '\U000029BE', - "olcross;": '\U000029BB', - "oline;": '\U0000203E', - "olt;": '\U000029C0', - "omacr;": '\U0000014D', - "omega;": '\U000003C9', - "omicron;": '\U000003BF', - "omid;": '\U000029B6', - "ominus;": '\U00002296', - "oopf;": '\U0001D560', - "opar;": '\U000029B7', - "operp;": '\U000029B9', - "oplus;": '\U00002295', - "or;": '\U00002228', - "orarr;": '\U000021BB', - "ord;": '\U00002A5D', - "order;": '\U00002134', - "orderof;": '\U00002134', - "ordf;": '\U000000AA', - "ordm;": '\U000000BA', - "origof;": '\U000022B6', - "oror;": '\U00002A56', - "orslope;": '\U00002A57', - "orv;": '\U00002A5B', - "oscr;": '\U00002134', - "oslash;": '\U000000F8', - "osol;": '\U00002298', - "otilde;": '\U000000F5', - "otimes;": '\U00002297', - "otimesas;": '\U00002A36', - "ouml;": '\U000000F6', - "ovbar;": '\U0000233D', - "par;": '\U00002225', - "para;": '\U000000B6', - "parallel;": '\U00002225', - "parsim;": '\U00002AF3', - "parsl;": '\U00002AFD', - "part;": '\U00002202', - "pcy;": '\U0000043F', - "percnt;": '\U00000025', - "period;": '\U0000002E', - "permil;": '\U00002030', - "perp;": '\U000022A5', - "pertenk;": '\U00002031', - "pfr;": '\U0001D52D', - "phi;": '\U000003C6', - "phiv;": '\U000003D5', - "phmmat;": '\U00002133', - "phone;": '\U0000260E', - "pi;": '\U000003C0', - "pitchfork;": '\U000022D4', - "piv;": '\U000003D6', - "planck;": '\U0000210F', - "planckh;": '\U0000210E', - "plankv;": '\U0000210F', - "plus;": '\U0000002B', - "plusacir;": '\U00002A23', - "plusb;": '\U0000229E', - "pluscir;": '\U00002A22', - "plusdo;": '\U00002214', - "plusdu;": '\U00002A25', - "pluse;": '\U00002A72', - "plusmn;": '\U000000B1', - "plussim;": '\U00002A26', - "plustwo;": '\U00002A27', - "pm;": '\U000000B1', - "pointint;": '\U00002A15', - "popf;": '\U0001D561', - "pound;": '\U000000A3', - "pr;": '\U0000227A', - "prE;": '\U00002AB3', - "prap;": '\U00002AB7', - "prcue;": '\U0000227C', - "pre;": '\U00002AAF', - "prec;": '\U0000227A', - "precapprox;": '\U00002AB7', - "preccurlyeq;": '\U0000227C', - "preceq;": '\U00002AAF', - "precnapprox;": '\U00002AB9', - "precneqq;": '\U00002AB5', - "precnsim;": '\U000022E8', - "precsim;": '\U0000227E', - "prime;": '\U00002032', - "primes;": '\U00002119', - "prnE;": '\U00002AB5', - "prnap;": '\U00002AB9', - "prnsim;": '\U000022E8', - "prod;": '\U0000220F', - "profalar;": '\U0000232E', - "profline;": '\U00002312', - "profsurf;": '\U00002313', - "prop;": '\U0000221D', - "propto;": '\U0000221D', - "prsim;": '\U0000227E', - "prurel;": '\U000022B0', - "pscr;": '\U0001D4C5', - "psi;": '\U000003C8', - "puncsp;": '\U00002008', - "qfr;": '\U0001D52E', - "qint;": '\U00002A0C', - "qopf;": '\U0001D562', - "qprime;": '\U00002057', - "qscr;": '\U0001D4C6', - "quaternions;": '\U0000210D', - "quatint;": '\U00002A16', - "quest;": '\U0000003F', - "questeq;": '\U0000225F', - "quot;": '\U00000022', - "rAarr;": '\U000021DB', - "rArr;": '\U000021D2', - "rAtail;": '\U0000291C', - "rBarr;": '\U0000290F', - "rHar;": '\U00002964', - "racute;": '\U00000155', - "radic;": '\U0000221A', - "raemptyv;": '\U000029B3', - "rang;": '\U000027E9', - "rangd;": '\U00002992', - "range;": '\U000029A5', - "rangle;": '\U000027E9', - "raquo;": '\U000000BB', - "rarr;": '\U00002192', - "rarrap;": '\U00002975', - "rarrb;": '\U000021E5', - "rarrbfs;": '\U00002920', - "rarrc;": '\U00002933', - "rarrfs;": '\U0000291E', - "rarrhk;": '\U000021AA', - "rarrlp;": '\U000021AC', - "rarrpl;": '\U00002945', - "rarrsim;": '\U00002974', - "rarrtl;": '\U000021A3', - "rarrw;": '\U0000219D', - "ratail;": '\U0000291A', - "ratio;": '\U00002236', - "rationals;": '\U0000211A', - "rbarr;": '\U0000290D', - "rbbrk;": '\U00002773', - "rbrace;": '\U0000007D', - "rbrack;": '\U0000005D', - "rbrke;": '\U0000298C', - "rbrksld;": '\U0000298E', - "rbrkslu;": '\U00002990', - "rcaron;": '\U00000159', - "rcedil;": '\U00000157', - "rceil;": '\U00002309', - "rcub;": '\U0000007D', - "rcy;": '\U00000440', - "rdca;": '\U00002937', - "rdldhar;": '\U00002969', - "rdquo;": '\U0000201D', - "rdquor;": '\U0000201D', - "rdsh;": '\U000021B3', - "real;": '\U0000211C', - "realine;": '\U0000211B', - "realpart;": '\U0000211C', - "reals;": '\U0000211D', - "rect;": '\U000025AD', - "reg;": '\U000000AE', - "rfisht;": '\U0000297D', - "rfloor;": '\U0000230B', - "rfr;": '\U0001D52F', - "rhard;": '\U000021C1', - "rharu;": '\U000021C0', - "rharul;": '\U0000296C', - "rho;": '\U000003C1', - "rhov;": '\U000003F1', - "rightarrow;": '\U00002192', - "rightarrowtail;": '\U000021A3', - "rightharpoondown;": '\U000021C1', - "rightharpoonup;": '\U000021C0', - "rightleftarrows;": '\U000021C4', - "rightleftharpoons;": '\U000021CC', - "rightrightarrows;": '\U000021C9', - "rightsquigarrow;": '\U0000219D', - "rightthreetimes;": '\U000022CC', - "ring;": '\U000002DA', - "risingdotseq;": '\U00002253', - "rlarr;": '\U000021C4', - "rlhar;": '\U000021CC', - "rlm;": '\U0000200F', - "rmoust;": '\U000023B1', - "rmoustache;": '\U000023B1', - "rnmid;": '\U00002AEE', - "roang;": '\U000027ED', - "roarr;": '\U000021FE', - "robrk;": '\U000027E7', - "ropar;": '\U00002986', - "ropf;": '\U0001D563', - "roplus;": '\U00002A2E', - "rotimes;": '\U00002A35', - "rpar;": '\U00000029', - "rpargt;": '\U00002994', - "rppolint;": '\U00002A12', - "rrarr;": '\U000021C9', - "rsaquo;": '\U0000203A', - "rscr;": '\U0001D4C7', - "rsh;": '\U000021B1', - "rsqb;": '\U0000005D', - "rsquo;": '\U00002019', - "rsquor;": '\U00002019', - "rthree;": '\U000022CC', - "rtimes;": '\U000022CA', - "rtri;": '\U000025B9', - "rtrie;": '\U000022B5', - "rtrif;": '\U000025B8', - "rtriltri;": '\U000029CE', - "ruluhar;": '\U00002968', - "rx;": '\U0000211E', - "sacute;": '\U0000015B', - "sbquo;": '\U0000201A', - "sc;": '\U0000227B', - "scE;": '\U00002AB4', - "scap;": '\U00002AB8', - "scaron;": '\U00000161', - "sccue;": '\U0000227D', - "sce;": '\U00002AB0', - "scedil;": '\U0000015F', - "scirc;": '\U0000015D', - "scnE;": '\U00002AB6', - "scnap;": '\U00002ABA', - "scnsim;": '\U000022E9', - "scpolint;": '\U00002A13', - "scsim;": '\U0000227F', - "scy;": '\U00000441', - "sdot;": '\U000022C5', - "sdotb;": '\U000022A1', - "sdote;": '\U00002A66', - "seArr;": '\U000021D8', - "searhk;": '\U00002925', - "searr;": '\U00002198', - "searrow;": '\U00002198', - "sect;": '\U000000A7', - "semi;": '\U0000003B', - "seswar;": '\U00002929', - "setminus;": '\U00002216', - "setmn;": '\U00002216', - "sext;": '\U00002736', - "sfr;": '\U0001D530', - "sfrown;": '\U00002322', - "sharp;": '\U0000266F', - "shchcy;": '\U00000449', - "shcy;": '\U00000448', - "shortmid;": '\U00002223', - "shortparallel;": '\U00002225', - "shy;": '\U000000AD', - "sigma;": '\U000003C3', - "sigmaf;": '\U000003C2', - "sigmav;": '\U000003C2', - "sim;": '\U0000223C', - "simdot;": '\U00002A6A', - "sime;": '\U00002243', - "simeq;": '\U00002243', - "simg;": '\U00002A9E', - "simgE;": '\U00002AA0', - "siml;": '\U00002A9D', - "simlE;": '\U00002A9F', - "simne;": '\U00002246', - "simplus;": '\U00002A24', - "simrarr;": '\U00002972', - "slarr;": '\U00002190', - "smallsetminus;": '\U00002216', - "smashp;": '\U00002A33', - "smeparsl;": '\U000029E4', - "smid;": '\U00002223', - "smile;": '\U00002323', - "smt;": '\U00002AAA', - "smte;": '\U00002AAC', - "softcy;": '\U0000044C', - "sol;": '\U0000002F', - "solb;": '\U000029C4', - "solbar;": '\U0000233F', - "sopf;": '\U0001D564', - "spades;": '\U00002660', - "spadesuit;": '\U00002660', - "spar;": '\U00002225', - "sqcap;": '\U00002293', - "sqcup;": '\U00002294', - "sqsub;": '\U0000228F', - "sqsube;": '\U00002291', - "sqsubset;": '\U0000228F', - "sqsubseteq;": '\U00002291', - "sqsup;": '\U00002290', - "sqsupe;": '\U00002292', - "sqsupset;": '\U00002290', - "sqsupseteq;": '\U00002292', - "squ;": '\U000025A1', - "square;": '\U000025A1', - "squarf;": '\U000025AA', - "squf;": '\U000025AA', - "srarr;": '\U00002192', - "sscr;": '\U0001D4C8', - "ssetmn;": '\U00002216', - "ssmile;": '\U00002323', - "sstarf;": '\U000022C6', - "star;": '\U00002606', - "starf;": '\U00002605', - "straightepsilon;": '\U000003F5', - "straightphi;": '\U000003D5', - "strns;": '\U000000AF', - "sub;": '\U00002282', - "subE;": '\U00002AC5', - "subdot;": '\U00002ABD', - "sube;": '\U00002286', - "subedot;": '\U00002AC3', - "submult;": '\U00002AC1', - "subnE;": '\U00002ACB', - "subne;": '\U0000228A', - "subplus;": '\U00002ABF', - "subrarr;": '\U00002979', - "subset;": '\U00002282', - "subseteq;": '\U00002286', - "subseteqq;": '\U00002AC5', - "subsetneq;": '\U0000228A', - "subsetneqq;": '\U00002ACB', - "subsim;": '\U00002AC7', - "subsub;": '\U00002AD5', - "subsup;": '\U00002AD3', - "succ;": '\U0000227B', - "succapprox;": '\U00002AB8', - "succcurlyeq;": '\U0000227D', - "succeq;": '\U00002AB0', - "succnapprox;": '\U00002ABA', - "succneqq;": '\U00002AB6', - "succnsim;": '\U000022E9', - "succsim;": '\U0000227F', - "sum;": '\U00002211', - "sung;": '\U0000266A', - "sup;": '\U00002283', - "sup1;": '\U000000B9', - "sup2;": '\U000000B2', - "sup3;": '\U000000B3', - "supE;": '\U00002AC6', - "supdot;": '\U00002ABE', - "supdsub;": '\U00002AD8', - "supe;": '\U00002287', - "supedot;": '\U00002AC4', - "suphsol;": '\U000027C9', - "suphsub;": '\U00002AD7', - "suplarr;": '\U0000297B', - "supmult;": '\U00002AC2', - "supnE;": '\U00002ACC', - "supne;": '\U0000228B', - "supplus;": '\U00002AC0', - "supset;": '\U00002283', - "supseteq;": '\U00002287', - "supseteqq;": '\U00002AC6', - "supsetneq;": '\U0000228B', - "supsetneqq;": '\U00002ACC', - "supsim;": '\U00002AC8', - "supsub;": '\U00002AD4', - "supsup;": '\U00002AD6', - "swArr;": '\U000021D9', - "swarhk;": '\U00002926', - "swarr;": '\U00002199', - "swarrow;": '\U00002199', - "swnwar;": '\U0000292A', - "szlig;": '\U000000DF', - "target;": '\U00002316', - "tau;": '\U000003C4', - "tbrk;": '\U000023B4', - "tcaron;": '\U00000165', - "tcedil;": '\U00000163', - "tcy;": '\U00000442', - "tdot;": '\U000020DB', - "telrec;": '\U00002315', - "tfr;": '\U0001D531', - "there4;": '\U00002234', - "therefore;": '\U00002234', - "theta;": '\U000003B8', - "thetasym;": '\U000003D1', - "thetav;": '\U000003D1', - "thickapprox;": '\U00002248', - "thicksim;": '\U0000223C', - "thinsp;": '\U00002009', - "thkap;": '\U00002248', - "thksim;": '\U0000223C', - "thorn;": '\U000000FE', - "tilde;": '\U000002DC', - "times;": '\U000000D7', - "timesb;": '\U000022A0', - "timesbar;": '\U00002A31', - "timesd;": '\U00002A30', - "tint;": '\U0000222D', - "toea;": '\U00002928', - "top;": '\U000022A4', - "topbot;": '\U00002336', - "topcir;": '\U00002AF1', - "topf;": '\U0001D565', - "topfork;": '\U00002ADA', - "tosa;": '\U00002929', - "tprime;": '\U00002034', - "trade;": '\U00002122', - "triangle;": '\U000025B5', - "triangledown;": '\U000025BF', - "triangleleft;": '\U000025C3', - "trianglelefteq;": '\U000022B4', - "triangleq;": '\U0000225C', - "triangleright;": '\U000025B9', - "trianglerighteq;": '\U000022B5', - "tridot;": '\U000025EC', - "trie;": '\U0000225C', - "triminus;": '\U00002A3A', - "triplus;": '\U00002A39', - "trisb;": '\U000029CD', - "tritime;": '\U00002A3B', - "trpezium;": '\U000023E2', - "tscr;": '\U0001D4C9', - "tscy;": '\U00000446', - "tshcy;": '\U0000045B', - "tstrok;": '\U00000167', - "twixt;": '\U0000226C', - "twoheadleftarrow;": '\U0000219E', - "twoheadrightarrow;": '\U000021A0', - "uArr;": '\U000021D1', - "uHar;": '\U00002963', - "uacute;": '\U000000FA', - "uarr;": '\U00002191', - "ubrcy;": '\U0000045E', - "ubreve;": '\U0000016D', - "ucirc;": '\U000000FB', - "ucy;": '\U00000443', - "udarr;": '\U000021C5', - "udblac;": '\U00000171', - "udhar;": '\U0000296E', - "ufisht;": '\U0000297E', - "ufr;": '\U0001D532', - "ugrave;": '\U000000F9', - "uharl;": '\U000021BF', - "uharr;": '\U000021BE', - "uhblk;": '\U00002580', - "ulcorn;": '\U0000231C', - "ulcorner;": '\U0000231C', - "ulcrop;": '\U0000230F', - "ultri;": '\U000025F8', - "umacr;": '\U0000016B', - "uml;": '\U000000A8', - "uogon;": '\U00000173', - "uopf;": '\U0001D566', - "uparrow;": '\U00002191', - "updownarrow;": '\U00002195', - "upharpoonleft;": '\U000021BF', - "upharpoonright;": '\U000021BE', - "uplus;": '\U0000228E', - "upsi;": '\U000003C5', - "upsih;": '\U000003D2', - "upsilon;": '\U000003C5', - "upuparrows;": '\U000021C8', - "urcorn;": '\U0000231D', - "urcorner;": '\U0000231D', - "urcrop;": '\U0000230E', - "uring;": '\U0000016F', - "urtri;": '\U000025F9', - "uscr;": '\U0001D4CA', - "utdot;": '\U000022F0', - "utilde;": '\U00000169', - "utri;": '\U000025B5', - "utrif;": '\U000025B4', - "uuarr;": '\U000021C8', - "uuml;": '\U000000FC', - "uwangle;": '\U000029A7', - "vArr;": '\U000021D5', - "vBar;": '\U00002AE8', - "vBarv;": '\U00002AE9', - "vDash;": '\U000022A8', - "vangrt;": '\U0000299C', - "varepsilon;": '\U000003F5', - "varkappa;": '\U000003F0', - "varnothing;": '\U00002205', - "varphi;": '\U000003D5', - "varpi;": '\U000003D6', - "varpropto;": '\U0000221D', - "varr;": '\U00002195', - "varrho;": '\U000003F1', - "varsigma;": '\U000003C2', - "vartheta;": '\U000003D1', - "vartriangleleft;": '\U000022B2', - "vartriangleright;": '\U000022B3', - "vcy;": '\U00000432', - "vdash;": '\U000022A2', - "vee;": '\U00002228', - "veebar;": '\U000022BB', - "veeeq;": '\U0000225A', - "vellip;": '\U000022EE', - "verbar;": '\U0000007C', - "vert;": '\U0000007C', - "vfr;": '\U0001D533', - "vltri;": '\U000022B2', - "vopf;": '\U0001D567', - "vprop;": '\U0000221D', - "vrtri;": '\U000022B3', - "vscr;": '\U0001D4CB', - "vzigzag;": '\U0000299A', - "wcirc;": '\U00000175', - "wedbar;": '\U00002A5F', - "wedge;": '\U00002227', - "wedgeq;": '\U00002259', - "weierp;": '\U00002118', - "wfr;": '\U0001D534', - "wopf;": '\U0001D568', - "wp;": '\U00002118', - "wr;": '\U00002240', - "wreath;": '\U00002240', - "wscr;": '\U0001D4CC', - "xcap;": '\U000022C2', - "xcirc;": '\U000025EF', - "xcup;": '\U000022C3', - "xdtri;": '\U000025BD', - "xfr;": '\U0001D535', - "xhArr;": '\U000027FA', - "xharr;": '\U000027F7', - "xi;": '\U000003BE', - "xlArr;": '\U000027F8', - "xlarr;": '\U000027F5', - "xmap;": '\U000027FC', - "xnis;": '\U000022FB', - "xodot;": '\U00002A00', - "xopf;": '\U0001D569', - "xoplus;": '\U00002A01', - "xotime;": '\U00002A02', - "xrArr;": '\U000027F9', - "xrarr;": '\U000027F6', - "xscr;": '\U0001D4CD', - "xsqcup;": '\U00002A06', - "xuplus;": '\U00002A04', - "xutri;": '\U000025B3', - "xvee;": '\U000022C1', - "xwedge;": '\U000022C0', - "yacute;": '\U000000FD', - "yacy;": '\U0000044F', - "ycirc;": '\U00000177', - "ycy;": '\U0000044B', - "yen;": '\U000000A5', - "yfr;": '\U0001D536', - "yicy;": '\U00000457', - "yopf;": '\U0001D56A', - "yscr;": '\U0001D4CE', - "yucy;": '\U0000044E', - "yuml;": '\U000000FF', - "zacute;": '\U0000017A', - "zcaron;": '\U0000017E', - "zcy;": '\U00000437', - "zdot;": '\U0000017C', - "zeetrf;": '\U00002128', - "zeta;": '\U000003B6', - "zfr;": '\U0001D537', - "zhcy;": '\U00000436', - "zigrarr;": '\U000021DD', - "zopf;": '\U0001D56B', - "zscr;": '\U0001D4CF', - "zwj;": '\U0000200D', - "zwnj;": '\U0000200C', - "AElig": '\U000000C6', - "AMP": '\U00000026', - "Aacute": '\U000000C1', - "Acirc": '\U000000C2', - "Agrave": '\U000000C0', - "Aring": '\U000000C5', - "Atilde": '\U000000C3', - "Auml": '\U000000C4', - "COPY": '\U000000A9', - "Ccedil": '\U000000C7', - "ETH": '\U000000D0', - "Eacute": '\U000000C9', - "Ecirc": '\U000000CA', - "Egrave": '\U000000C8', - "Euml": '\U000000CB', - "GT": '\U0000003E', - "Iacute": '\U000000CD', - "Icirc": '\U000000CE', - "Igrave": '\U000000CC', - "Iuml": '\U000000CF', - "LT": '\U0000003C', - "Ntilde": '\U000000D1', - "Oacute": '\U000000D3', - "Ocirc": '\U000000D4', - "Ograve": '\U000000D2', - "Oslash": '\U000000D8', - "Otilde": '\U000000D5', - "Ouml": '\U000000D6', - "QUOT": '\U00000022', - "REG": '\U000000AE', - "THORN": '\U000000DE', - "Uacute": '\U000000DA', - "Ucirc": '\U000000DB', - "Ugrave": '\U000000D9', - "Uuml": '\U000000DC', - "Yacute": '\U000000DD', - "aacute": '\U000000E1', - "acirc": '\U000000E2', - "acute": '\U000000B4', - "aelig": '\U000000E6', - "agrave": '\U000000E0', - "amp": '\U00000026', - "aring": '\U000000E5', - "atilde": '\U000000E3', - "auml": '\U000000E4', - "brvbar": '\U000000A6', - "ccedil": '\U000000E7', - "cedil": '\U000000B8', - "cent": '\U000000A2', - "copy": '\U000000A9', - "curren": '\U000000A4', - "deg": '\U000000B0', - "divide": '\U000000F7', - "eacute": '\U000000E9', - "ecirc": '\U000000EA', - "egrave": '\U000000E8', - "eth": '\U000000F0', - "euml": '\U000000EB', - "frac12": '\U000000BD', - "frac14": '\U000000BC', - "frac34": '\U000000BE', - "gt": '\U0000003E', - "iacute": '\U000000ED', - "icirc": '\U000000EE', - "iexcl": '\U000000A1', - "igrave": '\U000000EC', - "iquest": '\U000000BF', - "iuml": '\U000000EF', - "laquo": '\U000000AB', - "lt": '\U0000003C', - "macr": '\U000000AF', - "micro": '\U000000B5', - "middot": '\U000000B7', - "nbsp": '\U000000A0', - "not": '\U000000AC', - "ntilde": '\U000000F1', - "oacute": '\U000000F3', - "ocirc": '\U000000F4', - "ograve": '\U000000F2', - "ordf": '\U000000AA', - "ordm": '\U000000BA', - "oslash": '\U000000F8', - "otilde": '\U000000F5', - "ouml": '\U000000F6', - "para": '\U000000B6', - "plusmn": '\U000000B1', - "pound": '\U000000A3', - "quot": '\U00000022', - "raquo": '\U000000BB', - "reg": '\U000000AE', - "sect": '\U000000A7', - "shy": '\U000000AD', - "sup1": '\U000000B9', - "sup2": '\U000000B2', - "sup3": '\U000000B3', - "szlig": '\U000000DF', - "thorn": '\U000000FE', - "times": '\U000000D7', - "uacute": '\U000000FA', - "ucirc": '\U000000FB', - "ugrave": '\U000000F9', - "uml": '\U000000A8', - "uuml": '\U000000FC', - "yacute": '\U000000FD', - "yen": '\U000000A5', - "yuml": '\U000000FF', + "Cross;": '\U00002A2F', + "Cscr;": '\U0001D49E', + "Cup;": '\U000022D3', + "CupCap;": '\U0000224D', + "DD;": '\U00002145', + "DDotrahd;": '\U00002911', + "DJcy;": '\U00000402', + "DScy;": '\U00000405', + "DZcy;": '\U0000040F', + "Dagger;": '\U00002021', + "Darr;": '\U000021A1', + "Dashv;": '\U00002AE4', + "Dcaron;": '\U0000010E', + "Dcy;": '\U00000414', + "Del;": '\U00002207', + "Delta;": '\U00000394', + "Dfr;": '\U0001D507', + "DiacriticalAcute;": '\U000000B4', + "DiacriticalDot;": '\U000002D9', + "DiacriticalDoubleAcute;": '\U000002DD', + "DiacriticalGrave;": '\U00000060', + "DiacriticalTilde;": '\U000002DC', + "Diamond;": '\U000022C4', + "DifferentialD;": '\U00002146', + "Dopf;": '\U0001D53B', + "Dot;": '\U000000A8', + "DotDot;": '\U000020DC', + "DotEqual;": '\U00002250', + "DoubleContourIntegral;": '\U0000222F', + "DoubleDot;": '\U000000A8', + "DoubleDownArrow;": '\U000021D3', + "DoubleLeftArrow;": '\U000021D0', + "DoubleLeftRightArrow;": '\U000021D4', + "DoubleLeftTee;": '\U00002AE4', + "DoubleLongLeftArrow;": '\U000027F8', + "DoubleLongLeftRightArrow;": '\U000027FA', + "DoubleLongRightArrow;": '\U000027F9', + "DoubleRightArrow;": '\U000021D2', + "DoubleRightTee;": '\U000022A8', + "DoubleUpArrow;": '\U000021D1', + "DoubleUpDownArrow;": '\U000021D5', + "DoubleVerticalBar;": '\U00002225', + "DownArrow;": '\U00002193', + "DownArrowBar;": '\U00002913', + "DownArrowUpArrow;": '\U000021F5', + "DownBreve;": '\U00000311', + "DownLeftRightVector;": '\U00002950', + "DownLeftTeeVector;": '\U0000295E', + "DownLeftVector;": '\U000021BD', + "DownLeftVectorBar;": '\U00002956', + "DownRightTeeVector;": '\U0000295F', + "DownRightVector;": '\U000021C1', + "DownRightVectorBar;": '\U00002957', + "DownTee;": '\U000022A4', + "DownTeeArrow;": '\U000021A7', + "Downarrow;": '\U000021D3', + "Dscr;": '\U0001D49F', + "Dstrok;": '\U00000110', + "ENG;": '\U0000014A', + "ETH;": '\U000000D0', + "Eacute;": '\U000000C9', + "Ecaron;": '\U0000011A', + "Ecirc;": '\U000000CA', + "Ecy;": '\U0000042D', + "Edot;": '\U00000116', + "Efr;": '\U0001D508', + "Egrave;": '\U000000C8', + "Element;": '\U00002208', + "Emacr;": '\U00000112', + "EmptySmallSquare;": '\U000025FB', + "EmptyVerySmallSquare;": '\U000025AB', + "Eogon;": '\U00000118', + "Eopf;": '\U0001D53C', + "Epsilon;": '\U00000395', + "Equal;": '\U00002A75', + "EqualTilde;": '\U00002242', + "Equilibrium;": '\U000021CC', + "Escr;": '\U00002130', + "Esim;": '\U00002A73', + "Eta;": '\U00000397', + "Euml;": '\U000000CB', + "Exists;": '\U00002203', + "ExponentialE;": '\U00002147', + "Fcy;": '\U00000424', + "Ffr;": '\U0001D509', + "FilledSmallSquare;": '\U000025FC', + "FilledVerySmallSquare;": '\U000025AA', + "Fopf;": '\U0001D53D', + "ForAll;": '\U00002200', + "Fouriertrf;": '\U00002131', + "Fscr;": '\U00002131', + "GJcy;": '\U00000403', + "GT;": '\U0000003E', + "Gamma;": '\U00000393', + "Gammad;": '\U000003DC', + "Gbreve;": '\U0000011E', + "Gcedil;": '\U00000122', + "Gcirc;": '\U0000011C', + "Gcy;": '\U00000413', + "Gdot;": '\U00000120', + "Gfr;": '\U0001D50A', + "Gg;": '\U000022D9', + "Gopf;": '\U0001D53E', + "GreaterEqual;": '\U00002265', + "GreaterEqualLess;": '\U000022DB', + "GreaterFullEqual;": '\U00002267', + "GreaterGreater;": '\U00002AA2', + "GreaterLess;": '\U00002277', + "GreaterSlantEqual;": '\U00002A7E', + "GreaterTilde;": '\U00002273', + "Gscr;": '\U0001D4A2', + "Gt;": '\U0000226B', + "HARDcy;": '\U0000042A', + "Hacek;": '\U000002C7', + "Hat;": '\U0000005E', + "Hcirc;": '\U00000124', + "Hfr;": '\U0000210C', + "HilbertSpace;": '\U0000210B', + "Hopf;": '\U0000210D', + "HorizontalLine;": '\U00002500', + "Hscr;": '\U0000210B', + "Hstrok;": '\U00000126', + "HumpDownHump;": '\U0000224E', + "HumpEqual;": '\U0000224F', + "IEcy;": '\U00000415', + "IJlig;": '\U00000132', + "IOcy;": '\U00000401', + "Iacute;": '\U000000CD', + "Icirc;": '\U000000CE', + "Icy;": '\U00000418', + "Idot;": '\U00000130', + "Ifr;": '\U00002111', + "Igrave;": '\U000000CC', + "Im;": '\U00002111', + "Imacr;": '\U0000012A', + "ImaginaryI;": '\U00002148', + "Implies;": '\U000021D2', + "Int;": '\U0000222C', + "Integral;": '\U0000222B', + "Intersection;": '\U000022C2', + "InvisibleComma;": '\U00002063', + "InvisibleTimes;": '\U00002062', + "Iogon;": '\U0000012E', + "Iopf;": '\U0001D540', + "Iota;": '\U00000399', + "Iscr;": '\U00002110', + "Itilde;": '\U00000128', + "Iukcy;": '\U00000406', + "Iuml;": '\U000000CF', + "Jcirc;": '\U00000134', + "Jcy;": '\U00000419', + "Jfr;": '\U0001D50D', + "Jopf;": '\U0001D541', + "Jscr;": '\U0001D4A5', + "Jsercy;": '\U00000408', + "Jukcy;": '\U00000404', + "KHcy;": '\U00000425', + "KJcy;": '\U0000040C', + "Kappa;": '\U0000039A', + "Kcedil;": '\U00000136', + "Kcy;": '\U0000041A', + "Kfr;": '\U0001D50E', + "Kopf;": '\U0001D542', + "Kscr;": '\U0001D4A6', + "LJcy;": '\U00000409', + "LT;": '\U0000003C', + "Lacute;": '\U00000139', + "Lambda;": '\U0000039B', + "Lang;": '\U000027EA', + "Laplacetrf;": '\U00002112', + "Larr;": '\U0000219E', + "Lcaron;": '\U0000013D', + "Lcedil;": '\U0000013B', + "Lcy;": '\U0000041B', + "LeftAngleBracket;": '\U000027E8', + "LeftArrow;": '\U00002190', + "LeftArrowBar;": '\U000021E4', + "LeftArrowRightArrow;": '\U000021C6', + "LeftCeiling;": '\U00002308', + "LeftDoubleBracket;": '\U000027E6', + "LeftDownTeeVector;": '\U00002961', + "LeftDownVector;": '\U000021C3', + "LeftDownVectorBar;": '\U00002959', + "LeftFloor;": '\U0000230A', + "LeftRightArrow;": '\U00002194', + "LeftRightVector;": '\U0000294E', + "LeftTee;": '\U000022A3', + "LeftTeeArrow;": '\U000021A4', + "LeftTeeVector;": '\U0000295A', + "LeftTriangle;": '\U000022B2', + "LeftTriangleBar;": '\U000029CF', + "LeftTriangleEqual;": '\U000022B4', + "LeftUpDownVector;": '\U00002951', + "LeftUpTeeVector;": '\U00002960', + "LeftUpVector;": '\U000021BF', + "LeftUpVectorBar;": '\U00002958', + "LeftVector;": '\U000021BC', + "LeftVectorBar;": '\U00002952', + "Leftarrow;": '\U000021D0', + "Leftrightarrow;": '\U000021D4', + "LessEqualGreater;": '\U000022DA', + "LessFullEqual;": '\U00002266', + "LessGreater;": '\U00002276', + "LessLess;": '\U00002AA1', + "LessSlantEqual;": '\U00002A7D', + "LessTilde;": '\U00002272', + "Lfr;": '\U0001D50F', + "Ll;": '\U000022D8', + "Lleftarrow;": '\U000021DA', + "Lmidot;": '\U0000013F', + "LongLeftArrow;": '\U000027F5', + "LongLeftRightArrow;": '\U000027F7', + "LongRightArrow;": '\U000027F6', + "Longleftarrow;": '\U000027F8', + "Longleftrightarrow;": '\U000027FA', + "Longrightarrow;": '\U000027F9', + "Lopf;": '\U0001D543', + "LowerLeftArrow;": '\U00002199', + "LowerRightArrow;": '\U00002198', + "Lscr;": '\U00002112', + "Lsh;": '\U000021B0', + "Lstrok;": '\U00000141', + "Lt;": '\U0000226A', + "Map;": '\U00002905', + "Mcy;": '\U0000041C', + "MediumSpace;": '\U0000205F', + "Mellintrf;": '\U00002133', + "Mfr;": '\U0001D510', + "MinusPlus;": '\U00002213', + "Mopf;": '\U0001D544', + "Mscr;": '\U00002133', + "Mu;": '\U0000039C', + "NJcy;": '\U0000040A', + "Nacute;": '\U00000143', + "Ncaron;": '\U00000147', + "Ncedil;": '\U00000145', + "Ncy;": '\U0000041D', + "NegativeMediumSpace;": '\U0000200B', + "NegativeThickSpace;": '\U0000200B', + "NegativeThinSpace;": '\U0000200B', + "NegativeVeryThinSpace;": '\U0000200B', + "NestedGreaterGreater;": '\U0000226B', + "NestedLessLess;": '\U0000226A', + "NewLine;": '\U0000000A', + "Nfr;": '\U0001D511', + "NoBreak;": '\U00002060', + "NonBreakingSpace;": '\U000000A0', + "Nopf;": '\U00002115', + "Not;": '\U00002AEC', + "NotCongruent;": '\U00002262', + "NotCupCap;": '\U0000226D', + "NotDoubleVerticalBar;": '\U00002226', + "NotElement;": '\U00002209', + "NotEqual;": '\U00002260', + "NotExists;": '\U00002204', + "NotGreater;": '\U0000226F', + "NotGreaterEqual;": '\U00002271', + "NotGreaterLess;": '\U00002279', + "NotGreaterTilde;": '\U00002275', + "NotLeftTriangle;": '\U000022EA', + "NotLeftTriangleEqual;": '\U000022EC', + "NotLess;": '\U0000226E', + "NotLessEqual;": '\U00002270', + "NotLessGreater;": '\U00002278', + "NotLessTilde;": '\U00002274', + "NotPrecedes;": '\U00002280', + "NotPrecedesSlantEqual;": '\U000022E0', + "NotReverseElement;": '\U0000220C', + "NotRightTriangle;": '\U000022EB', + "NotRightTriangleEqual;": '\U000022ED', + "NotSquareSubsetEqual;": '\U000022E2', + "NotSquareSupersetEqual;": '\U000022E3', + "NotSubsetEqual;": '\U00002288', + "NotSucceeds;": '\U00002281', + "NotSucceedsSlantEqual;": '\U000022E1', + "NotSupersetEqual;": '\U00002289', + "NotTilde;": '\U00002241', + "NotTildeEqual;": '\U00002244', + "NotTildeFullEqual;": '\U00002247', + "NotTildeTilde;": '\U00002249', + "NotVerticalBar;": '\U00002224', + "Nscr;": '\U0001D4A9', + "Ntilde;": '\U000000D1', + "Nu;": '\U0000039D', + "OElig;": '\U00000152', + "Oacute;": '\U000000D3', + "Ocirc;": '\U000000D4', + "Ocy;": '\U0000041E', + "Odblac;": '\U00000150', + "Ofr;": '\U0001D512', + "Ograve;": '\U000000D2', + "Omacr;": '\U0000014C', + "Omega;": '\U000003A9', + "Omicron;": '\U0000039F', + "Oopf;": '\U0001D546', + "OpenCurlyDoubleQuote;": '\U0000201C', + "OpenCurlyQuote;": '\U00002018', + "Or;": '\U00002A54', + "Oscr;": '\U0001D4AA', + "Oslash;": '\U000000D8', + "Otilde;": '\U000000D5', + "Otimes;": '\U00002A37', + "Ouml;": '\U000000D6', + "OverBar;": '\U0000203E', + "OverBrace;": '\U000023DE', + "OverBracket;": '\U000023B4', + "OverParenthesis;": '\U000023DC', + "PartialD;": '\U00002202', + "Pcy;": '\U0000041F', + "Pfr;": '\U0001D513', + "Phi;": '\U000003A6', + "Pi;": '\U000003A0', + "PlusMinus;": '\U000000B1', + "Poincareplane;": '\U0000210C', + "Popf;": '\U00002119', + "Pr;": '\U00002ABB', + "Precedes;": '\U0000227A', + "PrecedesEqual;": '\U00002AAF', + "PrecedesSlantEqual;": '\U0000227C', + "PrecedesTilde;": '\U0000227E', + "Prime;": '\U00002033', + "Product;": '\U0000220F', + "Proportion;": '\U00002237', + "Proportional;": '\U0000221D', + "Pscr;": '\U0001D4AB', + "Psi;": '\U000003A8', + "QUOT;": '\U00000022', + "Qfr;": '\U0001D514', + "Qopf;": '\U0000211A', + "Qscr;": '\U0001D4AC', + "RBarr;": '\U00002910', + "REG;": '\U000000AE', + "Racute;": '\U00000154', + "Rang;": '\U000027EB', + "Rarr;": '\U000021A0', + "Rarrtl;": '\U00002916', + "Rcaron;": '\U00000158', + "Rcedil;": '\U00000156', + "Rcy;": '\U00000420', + "Re;": '\U0000211C', + "ReverseElement;": '\U0000220B', + "ReverseEquilibrium;": '\U000021CB', + "ReverseUpEquilibrium;": '\U0000296F', + "Rfr;": '\U0000211C', + "Rho;": '\U000003A1', + "RightAngleBracket;": '\U000027E9', + "RightArrow;": '\U00002192', + "RightArrowBar;": '\U000021E5', + "RightArrowLeftArrow;": '\U000021C4', + "RightCeiling;": '\U00002309', + "RightDoubleBracket;": '\U000027E7', + "RightDownTeeVector;": '\U0000295D', + "RightDownVector;": '\U000021C2', + "RightDownVectorBar;": '\U00002955', + "RightFloor;": '\U0000230B', + "RightTee;": '\U000022A2', + "RightTeeArrow;": '\U000021A6', + "RightTeeVector;": '\U0000295B', + "RightTriangle;": '\U000022B3', + "RightTriangleBar;": '\U000029D0', + "RightTriangleEqual;": '\U000022B5', + "RightUpDownVector;": '\U0000294F', + "RightUpTeeVector;": '\U0000295C', + "RightUpVector;": '\U000021BE', + "RightUpVectorBar;": '\U00002954', + "RightVector;": '\U000021C0', + "RightVectorBar;": '\U00002953', + "Rightarrow;": '\U000021D2', + "Ropf;": '\U0000211D', + "RoundImplies;": '\U00002970', + "Rrightarrow;": '\U000021DB', + "Rscr;": '\U0000211B', + "Rsh;": '\U000021B1', + "RuleDelayed;": '\U000029F4', + "SHCHcy;": '\U00000429', + "SHcy;": '\U00000428', + "SOFTcy;": '\U0000042C', + "Sacute;": '\U0000015A', + "Sc;": '\U00002ABC', + "Scaron;": '\U00000160', + "Scedil;": '\U0000015E', + "Scirc;": '\U0000015C', + "Scy;": '\U00000421', + "Sfr;": '\U0001D516', + "ShortDownArrow;": '\U00002193', + "ShortLeftArrow;": '\U00002190', + "ShortRightArrow;": '\U00002192', + "ShortUpArrow;": '\U00002191', + "Sigma;": '\U000003A3', + "SmallCircle;": '\U00002218', + "Sopf;": '\U0001D54A', + "Sqrt;": '\U0000221A', + "Square;": '\U000025A1', + "SquareIntersection;": '\U00002293', + "SquareSubset;": '\U0000228F', + "SquareSubsetEqual;": '\U00002291', + "SquareSuperset;": '\U00002290', + "SquareSupersetEqual;": '\U00002292', + "SquareUnion;": '\U00002294', + "Sscr;": '\U0001D4AE', + "Star;": '\U000022C6', + "Sub;": '\U000022D0', + "Subset;": '\U000022D0', + "SubsetEqual;": '\U00002286', + "Succeeds;": '\U0000227B', + "SucceedsEqual;": '\U00002AB0', + "SucceedsSlantEqual;": '\U0000227D', + "SucceedsTilde;": '\U0000227F', + "SuchThat;": '\U0000220B', + "Sum;": '\U00002211', + "Sup;": '\U000022D1', + "Superset;": '\U00002283', + "SupersetEqual;": '\U00002287', + "Supset;": '\U000022D1', + "THORN;": '\U000000DE', + "TRADE;": '\U00002122', + "TSHcy;": '\U0000040B', + "TScy;": '\U00000426', + "Tab;": '\U00000009', + "Tau;": '\U000003A4', + "Tcaron;": '\U00000164', + "Tcedil;": '\U00000162', + "Tcy;": '\U00000422', + "Tfr;": '\U0001D517', + "Therefore;": '\U00002234', + "Theta;": '\U00000398', + "ThinSpace;": '\U00002009', + "Tilde;": '\U0000223C', + "TildeEqual;": '\U00002243', + "TildeFullEqual;": '\U00002245', + "TildeTilde;": '\U00002248', + "Topf;": '\U0001D54B', + "TripleDot;": '\U000020DB', + "Tscr;": '\U0001D4AF', + "Tstrok;": '\U00000166', + "Uacute;": '\U000000DA', + "Uarr;": '\U0000219F', + "Uarrocir;": '\U00002949', + "Ubrcy;": '\U0000040E', + "Ubreve;": '\U0000016C', + "Ucirc;": '\U000000DB', + "Ucy;": '\U00000423', + "Udblac;": '\U00000170', + "Ufr;": '\U0001D518', + "Ugrave;": '\U000000D9', + "Umacr;": '\U0000016A', + "UnderBar;": '\U0000005F', + "UnderBrace;": '\U000023DF', + "UnderBracket;": '\U000023B5', + "UnderParenthesis;": '\U000023DD', + "Union;": '\U000022C3', + "UnionPlus;": '\U0000228E', + "Uogon;": '\U00000172', + "Uopf;": '\U0001D54C', + "UpArrow;": '\U00002191', + "UpArrowBar;": '\U00002912', + "UpArrowDownArrow;": '\U000021C5', + "UpDownArrow;": '\U00002195', + "UpEquilibrium;": '\U0000296E', + "UpTee;": '\U000022A5', + "UpTeeArrow;": '\U000021A5', + "Uparrow;": '\U000021D1', + "Updownarrow;": '\U000021D5', + "UpperLeftArrow;": '\U00002196', + "UpperRightArrow;": '\U00002197', + "Upsi;": '\U000003D2', + "Upsilon;": '\U000003A5', + "Uring;": '\U0000016E', + "Uscr;": '\U0001D4B0', + "Utilde;": '\U00000168', + "Uuml;": '\U000000DC', + "VDash;": '\U000022AB', + "Vbar;": '\U00002AEB', + "Vcy;": '\U00000412', + "Vdash;": '\U000022A9', + "Vdashl;": '\U00002AE6', + "Vee;": '\U000022C1', + "Verbar;": '\U00002016', + "Vert;": '\U00002016', + "VerticalBar;": '\U00002223', + "VerticalLine;": '\U0000007C', + "VerticalSeparator;": '\U00002758', + "VerticalTilde;": '\U00002240', + "VeryThinSpace;": '\U0000200A', + "Vfr;": '\U0001D519', + "Vopf;": '\U0001D54D', + "Vscr;": '\U0001D4B1', + "Vvdash;": '\U000022AA', + "Wcirc;": '\U00000174', + "Wedge;": '\U000022C0', + "Wfr;": '\U0001D51A', + "Wopf;": '\U0001D54E', + "Wscr;": '\U0001D4B2', + "Xfr;": '\U0001D51B', + "Xi;": '\U0000039E', + "Xopf;": '\U0001D54F', + "Xscr;": '\U0001D4B3', + "YAcy;": '\U0000042F', + "YIcy;": '\U00000407', + "YUcy;": '\U0000042E', + "Yacute;": '\U000000DD', + "Ycirc;": '\U00000176', + "Ycy;": '\U0000042B', + "Yfr;": '\U0001D51C', + "Yopf;": '\U0001D550', + "Yscr;": '\U0001D4B4', + "Yuml;": '\U00000178', + "ZHcy;": '\U00000416', + "Zacute;": '\U00000179', + "Zcaron;": '\U0000017D', + "Zcy;": '\U00000417', + "Zdot;": '\U0000017B', + "ZeroWidthSpace;": '\U0000200B', + "Zeta;": '\U00000396', + "Zfr;": '\U00002128', + "Zopf;": '\U00002124', + "Zscr;": '\U0001D4B5', + "aacute;": '\U000000E1', + "abreve;": '\U00000103', + "ac;": '\U0000223E', + "acd;": '\U0000223F', + "acirc;": '\U000000E2', + "acute;": '\U000000B4', + "acy;": '\U00000430', + "aelig;": '\U000000E6', + "af;": '\U00002061', + "afr;": '\U0001D51E', + "agrave;": '\U000000E0', + "alefsym;": '\U00002135', + "aleph;": '\U00002135', + "alpha;": '\U000003B1', + "amacr;": '\U00000101', + "amalg;": '\U00002A3F', + "amp;": '\U00000026', + "and;": '\U00002227', + "andand;": '\U00002A55', + "andd;": '\U00002A5C', + "andslope;": '\U00002A58', + "andv;": '\U00002A5A', + "ang;": '\U00002220', + "ange;": '\U000029A4', + "angle;": '\U00002220', + "angmsd;": '\U00002221', + "angmsdaa;": '\U000029A8', + "angmsdab;": '\U000029A9', + "angmsdac;": '\U000029AA', + "angmsdad;": '\U000029AB', + "angmsdae;": '\U000029AC', + "angmsdaf;": '\U000029AD', + "angmsdag;": '\U000029AE', + "angmsdah;": '\U000029AF', + "angrt;": '\U0000221F', + "angrtvb;": '\U000022BE', + "angrtvbd;": '\U0000299D', + "angsph;": '\U00002222', + "angst;": '\U000000C5', + "angzarr;": '\U0000237C', + "aogon;": '\U00000105', + "aopf;": '\U0001D552', + "ap;": '\U00002248', + "apE;": '\U00002A70', + "apacir;": '\U00002A6F', + "ape;": '\U0000224A', + "apid;": '\U0000224B', + "apos;": '\U00000027', + "approx;": '\U00002248', + "approxeq;": '\U0000224A', + "aring;": '\U000000E5', + "ascr;": '\U0001D4B6', + "ast;": '\U0000002A', + "asymp;": '\U00002248', + "asympeq;": '\U0000224D', + "atilde;": '\U000000E3', + "auml;": '\U000000E4', + "awconint;": '\U00002233', + "awint;": '\U00002A11', + "bNot;": '\U00002AED', + "backcong;": '\U0000224C', + "backepsilon;": '\U000003F6', + "backprime;": '\U00002035', + "backsim;": '\U0000223D', + "backsimeq;": '\U000022CD', + "barvee;": '\U000022BD', + "barwed;": '\U00002305', + "barwedge;": '\U00002305', + "bbrk;": '\U000023B5', + "bbrktbrk;": '\U000023B6', + "bcong;": '\U0000224C', + "bcy;": '\U00000431', + "bdquo;": '\U0000201E', + "becaus;": '\U00002235', + "because;": '\U00002235', + "bemptyv;": '\U000029B0', + "bepsi;": '\U000003F6', + "bernou;": '\U0000212C', + "beta;": '\U000003B2', + "beth;": '\U00002136', + "between;": '\U0000226C', + "bfr;": '\U0001D51F', + "bigcap;": '\U000022C2', + "bigcirc;": '\U000025EF', + "bigcup;": '\U000022C3', + "bigodot;": '\U00002A00', + "bigoplus;": '\U00002A01', + "bigotimes;": '\U00002A02', + "bigsqcup;": '\U00002A06', + "bigstar;": '\U00002605', + "bigtriangledown;": '\U000025BD', + "bigtriangleup;": '\U000025B3', + "biguplus;": '\U00002A04', + "bigvee;": '\U000022C1', + "bigwedge;": '\U000022C0', + "bkarow;": '\U0000290D', + "blacklozenge;": '\U000029EB', + "blacksquare;": '\U000025AA', + "blacktriangle;": '\U000025B4', + "blacktriangledown;": '\U000025BE', + "blacktriangleleft;": '\U000025C2', + "blacktriangleright;": '\U000025B8', + "blank;": '\U00002423', + "blk12;": '\U00002592', + "blk14;": '\U00002591', + "blk34;": '\U00002593', + "block;": '\U00002588', + "bnot;": '\U00002310', + "bopf;": '\U0001D553', + "bot;": '\U000022A5', + "bottom;": '\U000022A5', + "bowtie;": '\U000022C8', + "boxDL;": '\U00002557', + "boxDR;": '\U00002554', + "boxDl;": '\U00002556', + "boxDr;": '\U00002553', + "boxH;": '\U00002550', + "boxHD;": '\U00002566', + "boxHU;": '\U00002569', + "boxHd;": '\U00002564', + "boxHu;": '\U00002567', + "boxUL;": '\U0000255D', + "boxUR;": '\U0000255A', + "boxUl;": '\U0000255C', + "boxUr;": '\U00002559', + "boxV;": '\U00002551', + "boxVH;": '\U0000256C', + "boxVL;": '\U00002563', + "boxVR;": '\U00002560', + "boxVh;": '\U0000256B', + "boxVl;": '\U00002562', + "boxVr;": '\U0000255F', + "boxbox;": '\U000029C9', + "boxdL;": '\U00002555', + "boxdR;": '\U00002552', + "boxdl;": '\U00002510', + "boxdr;": '\U0000250C', + "boxh;": '\U00002500', + "boxhD;": '\U00002565', + "boxhU;": '\U00002568', + "boxhd;": '\U0000252C', + "boxhu;": '\U00002534', + "boxminus;": '\U0000229F', + "boxplus;": '\U0000229E', + "boxtimes;": '\U000022A0', + "boxuL;": '\U0000255B', + "boxuR;": '\U00002558', + "boxul;": '\U00002518', + "boxur;": '\U00002514', + "boxv;": '\U00002502', + "boxvH;": '\U0000256A', + "boxvL;": '\U00002561', + "boxvR;": '\U0000255E', + "boxvh;": '\U0000253C', + "boxvl;": '\U00002524', + "boxvr;": '\U0000251C', + "bprime;": '\U00002035', + "breve;": '\U000002D8', + "brvbar;": '\U000000A6', + "bscr;": '\U0001D4B7', + "bsemi;": '\U0000204F', + "bsim;": '\U0000223D', + "bsime;": '\U000022CD', + "bsol;": '\U0000005C', + "bsolb;": '\U000029C5', + "bsolhsub;": '\U000027C8', + "bull;": '\U00002022', + "bullet;": '\U00002022', + "bump;": '\U0000224E', + "bumpE;": '\U00002AAE', + "bumpe;": '\U0000224F', + "bumpeq;": '\U0000224F', + "cacute;": '\U00000107', + "cap;": '\U00002229', + "capand;": '\U00002A44', + "capbrcup;": '\U00002A49', + "capcap;": '\U00002A4B', + "capcup;": '\U00002A47', + "capdot;": '\U00002A40', + "caret;": '\U00002041', + "caron;": '\U000002C7', + "ccaps;": '\U00002A4D', + "ccaron;": '\U0000010D', + "ccedil;": '\U000000E7', + "ccirc;": '\U00000109', + "ccups;": '\U00002A4C', + "ccupssm;": '\U00002A50', + "cdot;": '\U0000010B', + "cedil;": '\U000000B8', + "cemptyv;": '\U000029B2', + "cent;": '\U000000A2', + "centerdot;": '\U000000B7', + "cfr;": '\U0001D520', + "chcy;": '\U00000447', + "check;": '\U00002713', + "checkmark;": '\U00002713', + "chi;": '\U000003C7', + "cir;": '\U000025CB', + "cirE;": '\U000029C3', + "circ;": '\U000002C6', + "circeq;": '\U00002257', + "circlearrowleft;": '\U000021BA', + "circlearrowright;": '\U000021BB', + "circledR;": '\U000000AE', + "circledS;": '\U000024C8', + "circledast;": '\U0000229B', + "circledcirc;": '\U0000229A', + "circleddash;": '\U0000229D', + "cire;": '\U00002257', + "cirfnint;": '\U00002A10', + "cirmid;": '\U00002AEF', + "cirscir;": '\U000029C2', + "clubs;": '\U00002663', + "clubsuit;": '\U00002663', + "colon;": '\U0000003A', + "colone;": '\U00002254', + "coloneq;": '\U00002254', + "comma;": '\U0000002C', + "commat;": '\U00000040', + "comp;": '\U00002201', + "compfn;": '\U00002218', + "complement;": '\U00002201', + "complexes;": '\U00002102', + "cong;": '\U00002245', + "congdot;": '\U00002A6D', + "conint;": '\U0000222E', + "copf;": '\U0001D554', + "coprod;": '\U00002210', + "copy;": '\U000000A9', + "copysr;": '\U00002117', + "crarr;": '\U000021B5', + "cross;": '\U00002717', + "cscr;": '\U0001D4B8', + "csub;": '\U00002ACF', + "csube;": '\U00002AD1', + "csup;": '\U00002AD0', + "csupe;": '\U00002AD2', + "ctdot;": '\U000022EF', + "cudarrl;": '\U00002938', + "cudarrr;": '\U00002935', + "cuepr;": '\U000022DE', + "cuesc;": '\U000022DF', + "cularr;": '\U000021B6', + "cularrp;": '\U0000293D', + "cup;": '\U0000222A', + "cupbrcap;": '\U00002A48', + "cupcap;": '\U00002A46', + "cupcup;": '\U00002A4A', + "cupdot;": '\U0000228D', + "cupor;": '\U00002A45', + "curarr;": '\U000021B7', + "curarrm;": '\U0000293C', + "curlyeqprec;": '\U000022DE', + "curlyeqsucc;": '\U000022DF', + "curlyvee;": '\U000022CE', + "curlywedge;": '\U000022CF', + "curren;": '\U000000A4', + "curvearrowleft;": '\U000021B6', + "curvearrowright;": '\U000021B7', + "cuvee;": '\U000022CE', + "cuwed;": '\U000022CF', + "cwconint;": '\U00002232', + "cwint;": '\U00002231', + "cylcty;": '\U0000232D', + "dArr;": '\U000021D3', + "dHar;": '\U00002965', + "dagger;": '\U00002020', + "daleth;": '\U00002138', + "darr;": '\U00002193', + "dash;": '\U00002010', + "dashv;": '\U000022A3', + "dbkarow;": '\U0000290F', + "dblac;": '\U000002DD', + "dcaron;": '\U0000010F', + "dcy;": '\U00000434', + "dd;": '\U00002146', + "ddagger;": '\U00002021', + "ddarr;": '\U000021CA', + "ddotseq;": '\U00002A77', + "deg;": '\U000000B0', + "delta;": '\U000003B4', + "demptyv;": '\U000029B1', + "dfisht;": '\U0000297F', + "dfr;": '\U0001D521', + "dharl;": '\U000021C3', + "dharr;": '\U000021C2', + "diam;": '\U000022C4', + "diamond;": '\U000022C4', + "diamondsuit;": '\U00002666', + "diams;": '\U00002666', + "die;": '\U000000A8', + "digamma;": '\U000003DD', + "disin;": '\U000022F2', + "div;": '\U000000F7', + "divide;": '\U000000F7', + "divideontimes;": '\U000022C7', + "divonx;": '\U000022C7', + "djcy;": '\U00000452', + "dlcorn;": '\U0000231E', + "dlcrop;": '\U0000230D', + "dollar;": '\U00000024', + "dopf;": '\U0001D555', + "dot;": '\U000002D9', + "doteq;": '\U00002250', + "doteqdot;": '\U00002251', + "dotminus;": '\U00002238', + "dotplus;": '\U00002214', + "dotsquare;": '\U000022A1', + "doublebarwedge;": '\U00002306', + "downarrow;": '\U00002193', + "downdownarrows;": '\U000021CA', + "downharpoonleft;": '\U000021C3', + "downharpoonright;": '\U000021C2', + "drbkarow;": '\U00002910', + "drcorn;": '\U0000231F', + "drcrop;": '\U0000230C', + "dscr;": '\U0001D4B9', + "dscy;": '\U00000455', + "dsol;": '\U000029F6', + "dstrok;": '\U00000111', + "dtdot;": '\U000022F1', + "dtri;": '\U000025BF', + "dtrif;": '\U000025BE', + "duarr;": '\U000021F5', + "duhar;": '\U0000296F', + "dwangle;": '\U000029A6', + "dzcy;": '\U0000045F', + "dzigrarr;": '\U000027FF', + "eDDot;": '\U00002A77', + "eDot;": '\U00002251', + "eacute;": '\U000000E9', + "easter;": '\U00002A6E', + "ecaron;": '\U0000011B', + "ecir;": '\U00002256', + "ecirc;": '\U000000EA', + "ecolon;": '\U00002255', + "ecy;": '\U0000044D', + "edot;": '\U00000117', + "ee;": '\U00002147', + "efDot;": '\U00002252', + "efr;": '\U0001D522', + "eg;": '\U00002A9A', + "egrave;": '\U000000E8', + "egs;": '\U00002A96', + "egsdot;": '\U00002A98', + "el;": '\U00002A99', + "elinters;": '\U000023E7', + "ell;": '\U00002113', + "els;": '\U00002A95', + "elsdot;": '\U00002A97', + "emacr;": '\U00000113', + "empty;": '\U00002205', + "emptyset;": '\U00002205', + "emptyv;": '\U00002205', + "emsp;": '\U00002003', + "emsp13;": '\U00002004', + "emsp14;": '\U00002005', + "eng;": '\U0000014B', + "ensp;": '\U00002002', + "eogon;": '\U00000119', + "eopf;": '\U0001D556', + "epar;": '\U000022D5', + "eparsl;": '\U000029E3', + "eplus;": '\U00002A71', + "epsi;": '\U000003B5', + "epsilon;": '\U000003B5', + "epsiv;": '\U000003F5', + "eqcirc;": '\U00002256', + "eqcolon;": '\U00002255', + "eqsim;": '\U00002242', + "eqslantgtr;": '\U00002A96', + "eqslantless;": '\U00002A95', + "equals;": '\U0000003D', + "equest;": '\U0000225F', + "equiv;": '\U00002261', + "equivDD;": '\U00002A78', + "eqvparsl;": '\U000029E5', + "erDot;": '\U00002253', + "erarr;": '\U00002971', + "escr;": '\U0000212F', + "esdot;": '\U00002250', + "esim;": '\U00002242', + "eta;": '\U000003B7', + "eth;": '\U000000F0', + "euml;": '\U000000EB', + "euro;": '\U000020AC', + "excl;": '\U00000021', + "exist;": '\U00002203', + "expectation;": '\U00002130', + "exponentiale;": '\U00002147', + "fallingdotseq;": '\U00002252', + "fcy;": '\U00000444', + "female;": '\U00002640', + "ffilig;": '\U0000FB03', + "fflig;": '\U0000FB00', + "ffllig;": '\U0000FB04', + "ffr;": '\U0001D523', + "filig;": '\U0000FB01', + "flat;": '\U0000266D', + "fllig;": '\U0000FB02', + "fltns;": '\U000025B1', + "fnof;": '\U00000192', + "fopf;": '\U0001D557', + "forall;": '\U00002200', + "fork;": '\U000022D4', + "forkv;": '\U00002AD9', + "fpartint;": '\U00002A0D', + "frac12;": '\U000000BD', + "frac13;": '\U00002153', + "frac14;": '\U000000BC', + "frac15;": '\U00002155', + "frac16;": '\U00002159', + "frac18;": '\U0000215B', + "frac23;": '\U00002154', + "frac25;": '\U00002156', + "frac34;": '\U000000BE', + "frac35;": '\U00002157', + "frac38;": '\U0000215C', + "frac45;": '\U00002158', + "frac56;": '\U0000215A', + "frac58;": '\U0000215D', + "frac78;": '\U0000215E', + "frasl;": '\U00002044', + "frown;": '\U00002322', + "fscr;": '\U0001D4BB', + "gE;": '\U00002267', + "gEl;": '\U00002A8C', + "gacute;": '\U000001F5', + "gamma;": '\U000003B3', + "gammad;": '\U000003DD', + "gap;": '\U00002A86', + "gbreve;": '\U0000011F', + "gcirc;": '\U0000011D', + "gcy;": '\U00000433', + "gdot;": '\U00000121', + "ge;": '\U00002265', + "gel;": '\U000022DB', + "geq;": '\U00002265', + "geqq;": '\U00002267', + "geqslant;": '\U00002A7E', + "ges;": '\U00002A7E', + "gescc;": '\U00002AA9', + "gesdot;": '\U00002A80', + "gesdoto;": '\U00002A82', + "gesdotol;": '\U00002A84', + "gesles;": '\U00002A94', + "gfr;": '\U0001D524', + "gg;": '\U0000226B', + "ggg;": '\U000022D9', + "gimel;": '\U00002137', + "gjcy;": '\U00000453', + "gl;": '\U00002277', + "glE;": '\U00002A92', + "gla;": '\U00002AA5', + "glj;": '\U00002AA4', + "gnE;": '\U00002269', + "gnap;": '\U00002A8A', + "gnapprox;": '\U00002A8A', + "gne;": '\U00002A88', + "gneq;": '\U00002A88', + "gneqq;": '\U00002269', + "gnsim;": '\U000022E7', + "gopf;": '\U0001D558', + "grave;": '\U00000060', + "gscr;": '\U0000210A', + "gsim;": '\U00002273', + "gsime;": '\U00002A8E', + "gsiml;": '\U00002A90', + "gt;": '\U0000003E', + "gtcc;": '\U00002AA7', + "gtcir;": '\U00002A7A', + "gtdot;": '\U000022D7', + "gtlPar;": '\U00002995', + "gtquest;": '\U00002A7C', + "gtrapprox;": '\U00002A86', + "gtrarr;": '\U00002978', + "gtrdot;": '\U000022D7', + "gtreqless;": '\U000022DB', + "gtreqqless;": '\U00002A8C', + "gtrless;": '\U00002277', + "gtrsim;": '\U00002273', + "hArr;": '\U000021D4', + "hairsp;": '\U0000200A', + "half;": '\U000000BD', + "hamilt;": '\U0000210B', + "hardcy;": '\U0000044A', + "harr;": '\U00002194', + "harrcir;": '\U00002948', + "harrw;": '\U000021AD', + "hbar;": '\U0000210F', + "hcirc;": '\U00000125', + "hearts;": '\U00002665', + "heartsuit;": '\U00002665', + "hellip;": '\U00002026', + "hercon;": '\U000022B9', + "hfr;": '\U0001D525', + "hksearow;": '\U00002925', + "hkswarow;": '\U00002926', + "hoarr;": '\U000021FF', + "homtht;": '\U0000223B', + "hookleftarrow;": '\U000021A9', + "hookrightarrow;": '\U000021AA', + "hopf;": '\U0001D559', + "horbar;": '\U00002015', + "hscr;": '\U0001D4BD', + "hslash;": '\U0000210F', + "hstrok;": '\U00000127', + "hybull;": '\U00002043', + "hyphen;": '\U00002010', + "iacute;": '\U000000ED', + "ic;": '\U00002063', + "icirc;": '\U000000EE', + "icy;": '\U00000438', + "iecy;": '\U00000435', + "iexcl;": '\U000000A1', + "iff;": '\U000021D4', + "ifr;": '\U0001D526', + "igrave;": '\U000000EC', + "ii;": '\U00002148', + "iiiint;": '\U00002A0C', + "iiint;": '\U0000222D', + "iinfin;": '\U000029DC', + "iiota;": '\U00002129', + "ijlig;": '\U00000133', + "imacr;": '\U0000012B', + "image;": '\U00002111', + "imagline;": '\U00002110', + "imagpart;": '\U00002111', + "imath;": '\U00000131', + "imof;": '\U000022B7', + "imped;": '\U000001B5', + "in;": '\U00002208', + "incare;": '\U00002105', + "infin;": '\U0000221E', + "infintie;": '\U000029DD', + "inodot;": '\U00000131', + "int;": '\U0000222B', + "intcal;": '\U000022BA', + "integers;": '\U00002124', + "intercal;": '\U000022BA', + "intlarhk;": '\U00002A17', + "intprod;": '\U00002A3C', + "iocy;": '\U00000451', + "iogon;": '\U0000012F', + "iopf;": '\U0001D55A', + "iota;": '\U000003B9', + "iprod;": '\U00002A3C', + "iquest;": '\U000000BF', + "iscr;": '\U0001D4BE', + "isin;": '\U00002208', + "isinE;": '\U000022F9', + "isindot;": '\U000022F5', + "isins;": '\U000022F4', + "isinsv;": '\U000022F3', + "isinv;": '\U00002208', + "it;": '\U00002062', + "itilde;": '\U00000129', + "iukcy;": '\U00000456', + "iuml;": '\U000000EF', + "jcirc;": '\U00000135', + "jcy;": '\U00000439', + "jfr;": '\U0001D527', + "jmath;": '\U00000237', + "jopf;": '\U0001D55B', + "jscr;": '\U0001D4BF', + "jsercy;": '\U00000458', + "jukcy;": '\U00000454', + "kappa;": '\U000003BA', + "kappav;": '\U000003F0', + "kcedil;": '\U00000137', + "kcy;": '\U0000043A', + "kfr;": '\U0001D528', + "kgreen;": '\U00000138', + "khcy;": '\U00000445', + "kjcy;": '\U0000045C', + "kopf;": '\U0001D55C', + "kscr;": '\U0001D4C0', + "lAarr;": '\U000021DA', + "lArr;": '\U000021D0', + "lAtail;": '\U0000291B', + "lBarr;": '\U0000290E', + "lE;": '\U00002266', + "lEg;": '\U00002A8B', + "lHar;": '\U00002962', + "lacute;": '\U0000013A', + "laemptyv;": '\U000029B4', + "lagran;": '\U00002112', + "lambda;": '\U000003BB', + "lang;": '\U000027E8', + "langd;": '\U00002991', + "langle;": '\U000027E8', + "lap;": '\U00002A85', + "laquo;": '\U000000AB', + "larr;": '\U00002190', + "larrb;": '\U000021E4', + "larrbfs;": '\U0000291F', + "larrfs;": '\U0000291D', + "larrhk;": '\U000021A9', + "larrlp;": '\U000021AB', + "larrpl;": '\U00002939', + "larrsim;": '\U00002973', + "larrtl;": '\U000021A2', + "lat;": '\U00002AAB', + "latail;": '\U00002919', + "late;": '\U00002AAD', + "lbarr;": '\U0000290C', + "lbbrk;": '\U00002772', + "lbrace;": '\U0000007B', + "lbrack;": '\U0000005B', + "lbrke;": '\U0000298B', + "lbrksld;": '\U0000298F', + "lbrkslu;": '\U0000298D', + "lcaron;": '\U0000013E', + "lcedil;": '\U0000013C', + "lceil;": '\U00002308', + "lcub;": '\U0000007B', + "lcy;": '\U0000043B', + "ldca;": '\U00002936', + "ldquo;": '\U0000201C', + "ldquor;": '\U0000201E', + "ldrdhar;": '\U00002967', + "ldrushar;": '\U0000294B', + "ldsh;": '\U000021B2', + "le;": '\U00002264', + "leftarrow;": '\U00002190', + "leftarrowtail;": '\U000021A2', + "leftharpoondown;": '\U000021BD', + "leftharpoonup;": '\U000021BC', + "leftleftarrows;": '\U000021C7', + "leftrightarrow;": '\U00002194', + "leftrightarrows;": '\U000021C6', + "leftrightharpoons;": '\U000021CB', + "leftrightsquigarrow;": '\U000021AD', + "leftthreetimes;": '\U000022CB', + "leg;": '\U000022DA', + "leq;": '\U00002264', + "leqq;": '\U00002266', + "leqslant;": '\U00002A7D', + "les;": '\U00002A7D', + "lescc;": '\U00002AA8', + "lesdot;": '\U00002A7F', + "lesdoto;": '\U00002A81', + "lesdotor;": '\U00002A83', + "lesges;": '\U00002A93', + "lessapprox;": '\U00002A85', + "lessdot;": '\U000022D6', + "lesseqgtr;": '\U000022DA', + "lesseqqgtr;": '\U00002A8B', + "lessgtr;": '\U00002276', + "lesssim;": '\U00002272', + "lfisht;": '\U0000297C', + "lfloor;": '\U0000230A', + "lfr;": '\U0001D529', + "lg;": '\U00002276', + "lgE;": '\U00002A91', + "lhard;": '\U000021BD', + "lharu;": '\U000021BC', + "lharul;": '\U0000296A', + "lhblk;": '\U00002584', + "ljcy;": '\U00000459', + "ll;": '\U0000226A', + "llarr;": '\U000021C7', + "llcorner;": '\U0000231E', + "llhard;": '\U0000296B', + "lltri;": '\U000025FA', + "lmidot;": '\U00000140', + "lmoust;": '\U000023B0', + "lmoustache;": '\U000023B0', + "lnE;": '\U00002268', + "lnap;": '\U00002A89', + "lnapprox;": '\U00002A89', + "lne;": '\U00002A87', + "lneq;": '\U00002A87', + "lneqq;": '\U00002268', + "lnsim;": '\U000022E6', + "loang;": '\U000027EC', + "loarr;": '\U000021FD', + "lobrk;": '\U000027E6', + "longleftarrow;": '\U000027F5', + "longleftrightarrow;": '\U000027F7', + "longmapsto;": '\U000027FC', + "longrightarrow;": '\U000027F6', + "looparrowleft;": '\U000021AB', + "looparrowright;": '\U000021AC', + "lopar;": '\U00002985', + "lopf;": '\U0001D55D', + "loplus;": '\U00002A2D', + "lotimes;": '\U00002A34', + "lowast;": '\U00002217', + "lowbar;": '\U0000005F', + "loz;": '\U000025CA', + "lozenge;": '\U000025CA', + "lozf;": '\U000029EB', + "lpar;": '\U00000028', + "lparlt;": '\U00002993', + "lrarr;": '\U000021C6', + "lrcorner;": '\U0000231F', + "lrhar;": '\U000021CB', + "lrhard;": '\U0000296D', + "lrm;": '\U0000200E', + "lrtri;": '\U000022BF', + "lsaquo;": '\U00002039', + "lscr;": '\U0001D4C1', + "lsh;": '\U000021B0', + "lsim;": '\U00002272', + "lsime;": '\U00002A8D', + "lsimg;": '\U00002A8F', + "lsqb;": '\U0000005B', + "lsquo;": '\U00002018', + "lsquor;": '\U0000201A', + "lstrok;": '\U00000142', + "lt;": '\U0000003C', + "ltcc;": '\U00002AA6', + "ltcir;": '\U00002A79', + "ltdot;": '\U000022D6', + "lthree;": '\U000022CB', + "ltimes;": '\U000022C9', + "ltlarr;": '\U00002976', + "ltquest;": '\U00002A7B', + "ltrPar;": '\U00002996', + "ltri;": '\U000025C3', + "ltrie;": '\U000022B4', + "ltrif;": '\U000025C2', + "lurdshar;": '\U0000294A', + "luruhar;": '\U00002966', + "mDDot;": '\U0000223A', + "macr;": '\U000000AF', + "male;": '\U00002642', + "malt;": '\U00002720', + "maltese;": '\U00002720', + "map;": '\U000021A6', + "mapsto;": '\U000021A6', + "mapstodown;": '\U000021A7', + "mapstoleft;": '\U000021A4', + "mapstoup;": '\U000021A5', + "marker;": '\U000025AE', + "mcomma;": '\U00002A29', + "mcy;": '\U0000043C', + "mdash;": '\U00002014', + "measuredangle;": '\U00002221', + "mfr;": '\U0001D52A', + "mho;": '\U00002127', + "micro;": '\U000000B5', + "mid;": '\U00002223', + "midast;": '\U0000002A', + "midcir;": '\U00002AF0', + "middot;": '\U000000B7', + "minus;": '\U00002212', + "minusb;": '\U0000229F', + "minusd;": '\U00002238', + "minusdu;": '\U00002A2A', + "mlcp;": '\U00002ADB', + "mldr;": '\U00002026', + "mnplus;": '\U00002213', + "models;": '\U000022A7', + "mopf;": '\U0001D55E', + "mp;": '\U00002213', + "mscr;": '\U0001D4C2', + "mstpos;": '\U0000223E', + "mu;": '\U000003BC', + "multimap;": '\U000022B8', + "mumap;": '\U000022B8', + "nLeftarrow;": '\U000021CD', + "nLeftrightarrow;": '\U000021CE', + "nRightarrow;": '\U000021CF', + "nVDash;": '\U000022AF', + "nVdash;": '\U000022AE', + "nabla;": '\U00002207', + "nacute;": '\U00000144', + "nap;": '\U00002249', + "napos;": '\U00000149', + "napprox;": '\U00002249', + "natur;": '\U0000266E', + "natural;": '\U0000266E', + "naturals;": '\U00002115', + "nbsp;": '\U000000A0', + "ncap;": '\U00002A43', + "ncaron;": '\U00000148', + "ncedil;": '\U00000146', + "ncong;": '\U00002247', + "ncup;": '\U00002A42', + "ncy;": '\U0000043D', + "ndash;": '\U00002013', + "ne;": '\U00002260', + "neArr;": '\U000021D7', + "nearhk;": '\U00002924', + "nearr;": '\U00002197', + "nearrow;": '\U00002197', + "nequiv;": '\U00002262', + "nesear;": '\U00002928', + "nexist;": '\U00002204', + "nexists;": '\U00002204', + "nfr;": '\U0001D52B', + "nge;": '\U00002271', + "ngeq;": '\U00002271', + "ngsim;": '\U00002275', + "ngt;": '\U0000226F', + "ngtr;": '\U0000226F', + "nhArr;": '\U000021CE', + "nharr;": '\U000021AE', + "nhpar;": '\U00002AF2', + "ni;": '\U0000220B', + "nis;": '\U000022FC', + "nisd;": '\U000022FA', + "niv;": '\U0000220B', + "njcy;": '\U0000045A', + "nlArr;": '\U000021CD', + "nlarr;": '\U0000219A', + "nldr;": '\U00002025', + "nle;": '\U00002270', + "nleftarrow;": '\U0000219A', + "nleftrightarrow;": '\U000021AE', + "nleq;": '\U00002270', + "nless;": '\U0000226E', + "nlsim;": '\U00002274', + "nlt;": '\U0000226E', + "nltri;": '\U000022EA', + "nltrie;": '\U000022EC', + "nmid;": '\U00002224', + "nopf;": '\U0001D55F', + "not;": '\U000000AC', + "notin;": '\U00002209', + "notinva;": '\U00002209', + "notinvb;": '\U000022F7', + "notinvc;": '\U000022F6', + "notni;": '\U0000220C', + "notniva;": '\U0000220C', + "notnivb;": '\U000022FE', + "notnivc;": '\U000022FD', + "npar;": '\U00002226', + "nparallel;": '\U00002226', + "npolint;": '\U00002A14', + "npr;": '\U00002280', + "nprcue;": '\U000022E0', + "nprec;": '\U00002280', + "nrArr;": '\U000021CF', + "nrarr;": '\U0000219B', + "nrightarrow;": '\U0000219B', + "nrtri;": '\U000022EB', + "nrtrie;": '\U000022ED', + "nsc;": '\U00002281', + "nsccue;": '\U000022E1', + "nscr;": '\U0001D4C3', + "nshortmid;": '\U00002224', + "nshortparallel;": '\U00002226', + "nsim;": '\U00002241', + "nsime;": '\U00002244', + "nsimeq;": '\U00002244', + "nsmid;": '\U00002224', + "nspar;": '\U00002226', + "nsqsube;": '\U000022E2', + "nsqsupe;": '\U000022E3', + "nsub;": '\U00002284', + "nsube;": '\U00002288', + "nsubseteq;": '\U00002288', + "nsucc;": '\U00002281', + "nsup;": '\U00002285', + "nsupe;": '\U00002289', + "nsupseteq;": '\U00002289', + "ntgl;": '\U00002279', + "ntilde;": '\U000000F1', + "ntlg;": '\U00002278', + "ntriangleleft;": '\U000022EA', + "ntrianglelefteq;": '\U000022EC', + "ntriangleright;": '\U000022EB', + "ntrianglerighteq;": '\U000022ED', + "nu;": '\U000003BD', + "num;": '\U00000023', + "numero;": '\U00002116', + "numsp;": '\U00002007', + "nvDash;": '\U000022AD', + "nvHarr;": '\U00002904', + "nvdash;": '\U000022AC', + "nvinfin;": '\U000029DE', + "nvlArr;": '\U00002902', + "nvrArr;": '\U00002903', + "nwArr;": '\U000021D6', + "nwarhk;": '\U00002923', + "nwarr;": '\U00002196', + "nwarrow;": '\U00002196', + "nwnear;": '\U00002927', + "oS;": '\U000024C8', + "oacute;": '\U000000F3', + "oast;": '\U0000229B', + "ocir;": '\U0000229A', + "ocirc;": '\U000000F4', + "ocy;": '\U0000043E', + "odash;": '\U0000229D', + "odblac;": '\U00000151', + "odiv;": '\U00002A38', + "odot;": '\U00002299', + "odsold;": '\U000029BC', + "oelig;": '\U00000153', + "ofcir;": '\U000029BF', + "ofr;": '\U0001D52C', + "ogon;": '\U000002DB', + "ograve;": '\U000000F2', + "ogt;": '\U000029C1', + "ohbar;": '\U000029B5', + "ohm;": '\U000003A9', + "oint;": '\U0000222E', + "olarr;": '\U000021BA', + "olcir;": '\U000029BE', + "olcross;": '\U000029BB', + "oline;": '\U0000203E', + "olt;": '\U000029C0', + "omacr;": '\U0000014D', + "omega;": '\U000003C9', + "omicron;": '\U000003BF', + "omid;": '\U000029B6', + "ominus;": '\U00002296', + "oopf;": '\U0001D560', + "opar;": '\U000029B7', + "operp;": '\U000029B9', + "oplus;": '\U00002295', + "or;": '\U00002228', + "orarr;": '\U000021BB', + "ord;": '\U00002A5D', + "order;": '\U00002134', + "orderof;": '\U00002134', + "ordf;": '\U000000AA', + "ordm;": '\U000000BA', + "origof;": '\U000022B6', + "oror;": '\U00002A56', + "orslope;": '\U00002A57', + "orv;": '\U00002A5B', + "oscr;": '\U00002134', + "oslash;": '\U000000F8', + "osol;": '\U00002298', + "otilde;": '\U000000F5', + "otimes;": '\U00002297', + "otimesas;": '\U00002A36', + "ouml;": '\U000000F6', + "ovbar;": '\U0000233D', + "par;": '\U00002225', + "para;": '\U000000B6', + "parallel;": '\U00002225', + "parsim;": '\U00002AF3', + "parsl;": '\U00002AFD', + "part;": '\U00002202', + "pcy;": '\U0000043F', + "percnt;": '\U00000025', + "period;": '\U0000002E', + "permil;": '\U00002030', + "perp;": '\U000022A5', + "pertenk;": '\U00002031', + "pfr;": '\U0001D52D', + "phi;": '\U000003C6', + "phiv;": '\U000003D5', + "phmmat;": '\U00002133', + "phone;": '\U0000260E', + "pi;": '\U000003C0', + "pitchfork;": '\U000022D4', + "piv;": '\U000003D6', + "planck;": '\U0000210F', + "planckh;": '\U0000210E', + "plankv;": '\U0000210F', + "plus;": '\U0000002B', + "plusacir;": '\U00002A23', + "plusb;": '\U0000229E', + "pluscir;": '\U00002A22', + "plusdo;": '\U00002214', + "plusdu;": '\U00002A25', + "pluse;": '\U00002A72', + "plusmn;": '\U000000B1', + "plussim;": '\U00002A26', + "plustwo;": '\U00002A27', + "pm;": '\U000000B1', + "pointint;": '\U00002A15', + "popf;": '\U0001D561', + "pound;": '\U000000A3', + "pr;": '\U0000227A', + "prE;": '\U00002AB3', + "prap;": '\U00002AB7', + "prcue;": '\U0000227C', + "pre;": '\U00002AAF', + "prec;": '\U0000227A', + "precapprox;": '\U00002AB7', + "preccurlyeq;": '\U0000227C', + "preceq;": '\U00002AAF', + "precnapprox;": '\U00002AB9', + "precneqq;": '\U00002AB5', + "precnsim;": '\U000022E8', + "precsim;": '\U0000227E', + "prime;": '\U00002032', + "primes;": '\U00002119', + "prnE;": '\U00002AB5', + "prnap;": '\U00002AB9', + "prnsim;": '\U000022E8', + "prod;": '\U0000220F', + "profalar;": '\U0000232E', + "profline;": '\U00002312', + "profsurf;": '\U00002313', + "prop;": '\U0000221D', + "propto;": '\U0000221D', + "prsim;": '\U0000227E', + "prurel;": '\U000022B0', + "pscr;": '\U0001D4C5', + "psi;": '\U000003C8', + "puncsp;": '\U00002008', + "qfr;": '\U0001D52E', + "qint;": '\U00002A0C', + "qopf;": '\U0001D562', + "qprime;": '\U00002057', + "qscr;": '\U0001D4C6', + "quaternions;": '\U0000210D', + "quatint;": '\U00002A16', + "quest;": '\U0000003F', + "questeq;": '\U0000225F', + "quot;": '\U00000022', + "rAarr;": '\U000021DB', + "rArr;": '\U000021D2', + "rAtail;": '\U0000291C', + "rBarr;": '\U0000290F', + "rHar;": '\U00002964', + "racute;": '\U00000155', + "radic;": '\U0000221A', + "raemptyv;": '\U000029B3', + "rang;": '\U000027E9', + "rangd;": '\U00002992', + "range;": '\U000029A5', + "rangle;": '\U000027E9', + "raquo;": '\U000000BB', + "rarr;": '\U00002192', + "rarrap;": '\U00002975', + "rarrb;": '\U000021E5', + "rarrbfs;": '\U00002920', + "rarrc;": '\U00002933', + "rarrfs;": '\U0000291E', + "rarrhk;": '\U000021AA', + "rarrlp;": '\U000021AC', + "rarrpl;": '\U00002945', + "rarrsim;": '\U00002974', + "rarrtl;": '\U000021A3', + "rarrw;": '\U0000219D', + "ratail;": '\U0000291A', + "ratio;": '\U00002236', + "rationals;": '\U0000211A', + "rbarr;": '\U0000290D', + "rbbrk;": '\U00002773', + "rbrace;": '\U0000007D', + "rbrack;": '\U0000005D', + "rbrke;": '\U0000298C', + "rbrksld;": '\U0000298E', + "rbrkslu;": '\U00002990', + "rcaron;": '\U00000159', + "rcedil;": '\U00000157', + "rceil;": '\U00002309', + "rcub;": '\U0000007D', + "rcy;": '\U00000440', + "rdca;": '\U00002937', + "rdldhar;": '\U00002969', + "rdquo;": '\U0000201D', + "rdquor;": '\U0000201D', + "rdsh;": '\U000021B3', + "real;": '\U0000211C', + "realine;": '\U0000211B', + "realpart;": '\U0000211C', + "reals;": '\U0000211D', + "rect;": '\U000025AD', + "reg;": '\U000000AE', + "rfisht;": '\U0000297D', + "rfloor;": '\U0000230B', + "rfr;": '\U0001D52F', + "rhard;": '\U000021C1', + "rharu;": '\U000021C0', + "rharul;": '\U0000296C', + "rho;": '\U000003C1', + "rhov;": '\U000003F1', + "rightarrow;": '\U00002192', + "rightarrowtail;": '\U000021A3', + "rightharpoondown;": '\U000021C1', + "rightharpoonup;": '\U000021C0', + "rightleftarrows;": '\U000021C4', + "rightleftharpoons;": '\U000021CC', + "rightrightarrows;": '\U000021C9', + "rightsquigarrow;": '\U0000219D', + "rightthreetimes;": '\U000022CC', + "ring;": '\U000002DA', + "risingdotseq;": '\U00002253', + "rlarr;": '\U000021C4', + "rlhar;": '\U000021CC', + "rlm;": '\U0000200F', + "rmoust;": '\U000023B1', + "rmoustache;": '\U000023B1', + "rnmid;": '\U00002AEE', + "roang;": '\U000027ED', + "roarr;": '\U000021FE', + "robrk;": '\U000027E7', + "ropar;": '\U00002986', + "ropf;": '\U0001D563', + "roplus;": '\U00002A2E', + "rotimes;": '\U00002A35', + "rpar;": '\U00000029', + "rpargt;": '\U00002994', + "rppolint;": '\U00002A12', + "rrarr;": '\U000021C9', + "rsaquo;": '\U0000203A', + "rscr;": '\U0001D4C7', + "rsh;": '\U000021B1', + "rsqb;": '\U0000005D', + "rsquo;": '\U00002019', + "rsquor;": '\U00002019', + "rthree;": '\U000022CC', + "rtimes;": '\U000022CA', + "rtri;": '\U000025B9', + "rtrie;": '\U000022B5', + "rtrif;": '\U000025B8', + "rtriltri;": '\U000029CE', + "ruluhar;": '\U00002968', + "rx;": '\U0000211E', + "sacute;": '\U0000015B', + "sbquo;": '\U0000201A', + "sc;": '\U0000227B', + "scE;": '\U00002AB4', + "scap;": '\U00002AB8', + "scaron;": '\U00000161', + "sccue;": '\U0000227D', + "sce;": '\U00002AB0', + "scedil;": '\U0000015F', + "scirc;": '\U0000015D', + "scnE;": '\U00002AB6', + "scnap;": '\U00002ABA', + "scnsim;": '\U000022E9', + "scpolint;": '\U00002A13', + "scsim;": '\U0000227F', + "scy;": '\U00000441', + "sdot;": '\U000022C5', + "sdotb;": '\U000022A1', + "sdote;": '\U00002A66', + "seArr;": '\U000021D8', + "searhk;": '\U00002925', + "searr;": '\U00002198', + "searrow;": '\U00002198', + "sect;": '\U000000A7', + "semi;": '\U0000003B', + "seswar;": '\U00002929', + "setminus;": '\U00002216', + "setmn;": '\U00002216', + "sext;": '\U00002736', + "sfr;": '\U0001D530', + "sfrown;": '\U00002322', + "sharp;": '\U0000266F', + "shchcy;": '\U00000449', + "shcy;": '\U00000448', + "shortmid;": '\U00002223', + "shortparallel;": '\U00002225', + "shy;": '\U000000AD', + "sigma;": '\U000003C3', + "sigmaf;": '\U000003C2', + "sigmav;": '\U000003C2', + "sim;": '\U0000223C', + "simdot;": '\U00002A6A', + "sime;": '\U00002243', + "simeq;": '\U00002243', + "simg;": '\U00002A9E', + "simgE;": '\U00002AA0', + "siml;": '\U00002A9D', + "simlE;": '\U00002A9F', + "simne;": '\U00002246', + "simplus;": '\U00002A24', + "simrarr;": '\U00002972', + "slarr;": '\U00002190', + "smallsetminus;": '\U00002216', + "smashp;": '\U00002A33', + "smeparsl;": '\U000029E4', + "smid;": '\U00002223', + "smile;": '\U00002323', + "smt;": '\U00002AAA', + "smte;": '\U00002AAC', + "softcy;": '\U0000044C', + "sol;": '\U0000002F', + "solb;": '\U000029C4', + "solbar;": '\U0000233F', + "sopf;": '\U0001D564', + "spades;": '\U00002660', + "spadesuit;": '\U00002660', + "spar;": '\U00002225', + "sqcap;": '\U00002293', + "sqcup;": '\U00002294', + "sqsub;": '\U0000228F', + "sqsube;": '\U00002291', + "sqsubset;": '\U0000228F', + "sqsubseteq;": '\U00002291', + "sqsup;": '\U00002290', + "sqsupe;": '\U00002292', + "sqsupset;": '\U00002290', + "sqsupseteq;": '\U00002292', + "squ;": '\U000025A1', + "square;": '\U000025A1', + "squarf;": '\U000025AA', + "squf;": '\U000025AA', + "srarr;": '\U00002192', + "sscr;": '\U0001D4C8', + "ssetmn;": '\U00002216', + "ssmile;": '\U00002323', + "sstarf;": '\U000022C6', + "star;": '\U00002606', + "starf;": '\U00002605', + "straightepsilon;": '\U000003F5', + "straightphi;": '\U000003D5', + "strns;": '\U000000AF', + "sub;": '\U00002282', + "subE;": '\U00002AC5', + "subdot;": '\U00002ABD', + "sube;": '\U00002286', + "subedot;": '\U00002AC3', + "submult;": '\U00002AC1', + "subnE;": '\U00002ACB', + "subne;": '\U0000228A', + "subplus;": '\U00002ABF', + "subrarr;": '\U00002979', + "subset;": '\U00002282', + "subseteq;": '\U00002286', + "subseteqq;": '\U00002AC5', + "subsetneq;": '\U0000228A', + "subsetneqq;": '\U00002ACB', + "subsim;": '\U00002AC7', + "subsub;": '\U00002AD5', + "subsup;": '\U00002AD3', + "succ;": '\U0000227B', + "succapprox;": '\U00002AB8', + "succcurlyeq;": '\U0000227D', + "succeq;": '\U00002AB0', + "succnapprox;": '\U00002ABA', + "succneqq;": '\U00002AB6', + "succnsim;": '\U000022E9', + "succsim;": '\U0000227F', + "sum;": '\U00002211', + "sung;": '\U0000266A', + "sup;": '\U00002283', + "sup1;": '\U000000B9', + "sup2;": '\U000000B2', + "sup3;": '\U000000B3', + "supE;": '\U00002AC6', + "supdot;": '\U00002ABE', + "supdsub;": '\U00002AD8', + "supe;": '\U00002287', + "supedot;": '\U00002AC4', + "suphsol;": '\U000027C9', + "suphsub;": '\U00002AD7', + "suplarr;": '\U0000297B', + "supmult;": '\U00002AC2', + "supnE;": '\U00002ACC', + "supne;": '\U0000228B', + "supplus;": '\U00002AC0', + "supset;": '\U00002283', + "supseteq;": '\U00002287', + "supseteqq;": '\U00002AC6', + "supsetneq;": '\U0000228B', + "supsetneqq;": '\U00002ACC', + "supsim;": '\U00002AC8', + "supsub;": '\U00002AD4', + "supsup;": '\U00002AD6', + "swArr;": '\U000021D9', + "swarhk;": '\U00002926', + "swarr;": '\U00002199', + "swarrow;": '\U00002199', + "swnwar;": '\U0000292A', + "szlig;": '\U000000DF', + "target;": '\U00002316', + "tau;": '\U000003C4', + "tbrk;": '\U000023B4', + "tcaron;": '\U00000165', + "tcedil;": '\U00000163', + "tcy;": '\U00000442', + "tdot;": '\U000020DB', + "telrec;": '\U00002315', + "tfr;": '\U0001D531', + "there4;": '\U00002234', + "therefore;": '\U00002234', + "theta;": '\U000003B8', + "thetasym;": '\U000003D1', + "thetav;": '\U000003D1', + "thickapprox;": '\U00002248', + "thicksim;": '\U0000223C', + "thinsp;": '\U00002009', + "thkap;": '\U00002248', + "thksim;": '\U0000223C', + "thorn;": '\U000000FE', + "tilde;": '\U000002DC', + "times;": '\U000000D7', + "timesb;": '\U000022A0', + "timesbar;": '\U00002A31', + "timesd;": '\U00002A30', + "tint;": '\U0000222D', + "toea;": '\U00002928', + "top;": '\U000022A4', + "topbot;": '\U00002336', + "topcir;": '\U00002AF1', + "topf;": '\U0001D565', + "topfork;": '\U00002ADA', + "tosa;": '\U00002929', + "tprime;": '\U00002034', + "trade;": '\U00002122', + "triangle;": '\U000025B5', + "triangledown;": '\U000025BF', + "triangleleft;": '\U000025C3', + "trianglelefteq;": '\U000022B4', + "triangleq;": '\U0000225C', + "triangleright;": '\U000025B9', + "trianglerighteq;": '\U000022B5', + "tridot;": '\U000025EC', + "trie;": '\U0000225C', + "triminus;": '\U00002A3A', + "triplus;": '\U00002A39', + "trisb;": '\U000029CD', + "tritime;": '\U00002A3B', + "trpezium;": '\U000023E2', + "tscr;": '\U0001D4C9', + "tscy;": '\U00000446', + "tshcy;": '\U0000045B', + "tstrok;": '\U00000167', + "twixt;": '\U0000226C', + "twoheadleftarrow;": '\U0000219E', + "twoheadrightarrow;": '\U000021A0', + "uArr;": '\U000021D1', + "uHar;": '\U00002963', + "uacute;": '\U000000FA', + "uarr;": '\U00002191', + "ubrcy;": '\U0000045E', + "ubreve;": '\U0000016D', + "ucirc;": '\U000000FB', + "ucy;": '\U00000443', + "udarr;": '\U000021C5', + "udblac;": '\U00000171', + "udhar;": '\U0000296E', + "ufisht;": '\U0000297E', + "ufr;": '\U0001D532', + "ugrave;": '\U000000F9', + "uharl;": '\U000021BF', + "uharr;": '\U000021BE', + "uhblk;": '\U00002580', + "ulcorn;": '\U0000231C', + "ulcorner;": '\U0000231C', + "ulcrop;": '\U0000230F', + "ultri;": '\U000025F8', + "umacr;": '\U0000016B', + "uml;": '\U000000A8', + "uogon;": '\U00000173', + "uopf;": '\U0001D566', + "uparrow;": '\U00002191', + "updownarrow;": '\U00002195', + "upharpoonleft;": '\U000021BF', + "upharpoonright;": '\U000021BE', + "uplus;": '\U0000228E', + "upsi;": '\U000003C5', + "upsih;": '\U000003D2', + "upsilon;": '\U000003C5', + "upuparrows;": '\U000021C8', + "urcorn;": '\U0000231D', + "urcorner;": '\U0000231D', + "urcrop;": '\U0000230E', + "uring;": '\U0000016F', + "urtri;": '\U000025F9', + "uscr;": '\U0001D4CA', + "utdot;": '\U000022F0', + "utilde;": '\U00000169', + "utri;": '\U000025B5', + "utrif;": '\U000025B4', + "uuarr;": '\U000021C8', + "uuml;": '\U000000FC', + "uwangle;": '\U000029A7', + "vArr;": '\U000021D5', + "vBar;": '\U00002AE8', + "vBarv;": '\U00002AE9', + "vDash;": '\U000022A8', + "vangrt;": '\U0000299C', + "varepsilon;": '\U000003F5', + "varkappa;": '\U000003F0', + "varnothing;": '\U00002205', + "varphi;": '\U000003D5', + "varpi;": '\U000003D6', + "varpropto;": '\U0000221D', + "varr;": '\U00002195', + "varrho;": '\U000003F1', + "varsigma;": '\U000003C2', + "vartheta;": '\U000003D1', + "vartriangleleft;": '\U000022B2', + "vartriangleright;": '\U000022B3', + "vcy;": '\U00000432', + "vdash;": '\U000022A2', + "vee;": '\U00002228', + "veebar;": '\U000022BB', + "veeeq;": '\U0000225A', + "vellip;": '\U000022EE', + "verbar;": '\U0000007C', + "vert;": '\U0000007C', + "vfr;": '\U0001D533', + "vltri;": '\U000022B2', + "vopf;": '\U0001D567', + "vprop;": '\U0000221D', + "vrtri;": '\U000022B3', + "vscr;": '\U0001D4CB', + "vzigzag;": '\U0000299A', + "wcirc;": '\U00000175', + "wedbar;": '\U00002A5F', + "wedge;": '\U00002227', + "wedgeq;": '\U00002259', + "weierp;": '\U00002118', + "wfr;": '\U0001D534', + "wopf;": '\U0001D568', + "wp;": '\U00002118', + "wr;": '\U00002240', + "wreath;": '\U00002240', + "wscr;": '\U0001D4CC', + "xcap;": '\U000022C2', + "xcirc;": '\U000025EF', + "xcup;": '\U000022C3', + "xdtri;": '\U000025BD', + "xfr;": '\U0001D535', + "xhArr;": '\U000027FA', + "xharr;": '\U000027F7', + "xi;": '\U000003BE', + "xlArr;": '\U000027F8', + "xlarr;": '\U000027F5', + "xmap;": '\U000027FC', + "xnis;": '\U000022FB', + "xodot;": '\U00002A00', + "xopf;": '\U0001D569', + "xoplus;": '\U00002A01', + "xotime;": '\U00002A02', + "xrArr;": '\U000027F9', + "xrarr;": '\U000027F6', + "xscr;": '\U0001D4CD', + "xsqcup;": '\U00002A06', + "xuplus;": '\U00002A04', + "xutri;": '\U000025B3', + "xvee;": '\U000022C1', + "xwedge;": '\U000022C0', + "yacute;": '\U000000FD', + "yacy;": '\U0000044F', + "ycirc;": '\U00000177', + "ycy;": '\U0000044B', + "yen;": '\U000000A5', + "yfr;": '\U0001D536', + "yicy;": '\U00000457', + "yopf;": '\U0001D56A', + "yscr;": '\U0001D4CE', + "yucy;": '\U0000044E', + "yuml;": '\U000000FF', + "zacute;": '\U0000017A', + "zcaron;": '\U0000017E', + "zcy;": '\U00000437', + "zdot;": '\U0000017C', + "zeetrf;": '\U00002128', + "zeta;": '\U000003B6', + "zfr;": '\U0001D537', + "zhcy;": '\U00000436', + "zigrarr;": '\U000021DD', + "zopf;": '\U0001D56B', + "zscr;": '\U0001D4CF', + "zwj;": '\U0000200D', + "zwnj;": '\U0000200C', + "AElig": '\U000000C6', + "AMP": '\U00000026', + "Aacute": '\U000000C1', + "Acirc": '\U000000C2', + "Agrave": '\U000000C0', + "Aring": '\U000000C5', + "Atilde": '\U000000C3', + "Auml": '\U000000C4', + "COPY": '\U000000A9', + "Ccedil": '\U000000C7', + "ETH": '\U000000D0', + "Eacute": '\U000000C9', + "Ecirc": '\U000000CA', + "Egrave": '\U000000C8', + "Euml": '\U000000CB', + "GT": '\U0000003E', + "Iacute": '\U000000CD', + "Icirc": '\U000000CE', + "Igrave": '\U000000CC', + "Iuml": '\U000000CF', + "LT": '\U0000003C', + "Ntilde": '\U000000D1', + "Oacute": '\U000000D3', + "Ocirc": '\U000000D4', + "Ograve": '\U000000D2', + "Oslash": '\U000000D8', + "Otilde": '\U000000D5', + "Ouml": '\U000000D6', + "QUOT": '\U00000022', + "REG": '\U000000AE', + "THORN": '\U000000DE', + "Uacute": '\U000000DA', + "Ucirc": '\U000000DB', + "Ugrave": '\U000000D9', + "Uuml": '\U000000DC', + "Yacute": '\U000000DD', + "aacute": '\U000000E1', + "acirc": '\U000000E2', + "acute": '\U000000B4', + "aelig": '\U000000E6', + "agrave": '\U000000E0', + "amp": '\U00000026', + "aring": '\U000000E5', + "atilde": '\U000000E3', + "auml": '\U000000E4', + "brvbar": '\U000000A6', + "ccedil": '\U000000E7', + "cedil": '\U000000B8', + "cent": '\U000000A2', + "copy": '\U000000A9', + "curren": '\U000000A4', + "deg": '\U000000B0', + "divide": '\U000000F7', + "eacute": '\U000000E9', + "ecirc": '\U000000EA', + "egrave": '\U000000E8', + "eth": '\U000000F0', + "euml": '\U000000EB', + "frac12": '\U000000BD', + "frac14": '\U000000BC', + "frac34": '\U000000BE', + "gt": '\U0000003E', + "iacute": '\U000000ED', + "icirc": '\U000000EE', + "iexcl": '\U000000A1', + "igrave": '\U000000EC', + "iquest": '\U000000BF', + "iuml": '\U000000EF', + "laquo": '\U000000AB', + "lt": '\U0000003C', + "macr": '\U000000AF', + "micro": '\U000000B5', + "middot": '\U000000B7', + "nbsp": '\U000000A0', + "not": '\U000000AC', + "ntilde": '\U000000F1', + "oacute": '\U000000F3', + "ocirc": '\U000000F4', + "ograve": '\U000000F2', + "ordf": '\U000000AA', + "ordm": '\U000000BA', + "oslash": '\U000000F8', + "otilde": '\U000000F5', + "ouml": '\U000000F6', + "para": '\U000000B6', + "plusmn": '\U000000B1', + "pound": '\U000000A3', + "quot": '\U00000022', + "raquo": '\U000000BB', + "reg": '\U000000AE', + "sect": '\U000000A7', + "shy": '\U000000AD', + "sup1": '\U000000B9', + "sup2": '\U000000B2', + "sup3": '\U000000B3', + "szlig": '\U000000DF', + "thorn": '\U000000FE', + "times": '\U000000D7', + "uacute": '\U000000FA', + "ucirc": '\U000000FB', + "ugrave": '\U000000F9', + "uml": '\U000000A8', + "uuml": '\U000000FC', + "yacute": '\U000000FD', + "yen": '\U000000A5', + "yuml": '\U000000FF', } // HTML entities that are two unicode codepoints. diff --git a/vendor/golang.org/x/text/encoding/ianaindex/tables.go b/vendor/golang.org/x/text/encoding/ianaindex/tables.go index 98a1d77ca..cec6a0407 100644 --- a/vendor/golang.org/x/text/encoding/ianaindex/tables.go +++ b/vendor/golang.org/x/text/encoding/ianaindex/tables.go @@ -830,1519 +830,1519 @@ var mibNames = []string{ // 257 elements // on-the fly lower-casing per character. This allows to always avoid // allocation and will be considerably more compact. var ianaAliases = map[string]int{ - "US-ASCII": enc3, - "us-ascii": enc3, - "iso-ir-6": enc3, - "ANSI_X3.4-1968": enc3, - "ansi_x3.4-1968": enc3, - "ANSI_X3.4-1986": enc3, - "ansi_x3.4-1986": enc3, - "ISO_646.irv:1991": enc3, - "iso_646.irv:1991": enc3, - "ISO646-US": enc3, - "iso646-us": enc3, - "us": enc3, - "IBM367": enc3, - "ibm367": enc3, - "cp367": enc3, - "csASCII": enc3, - "csascii": enc3, - "ISO_8859-1:1987": enc4, - "iso_8859-1:1987": enc4, - "iso-ir-100": enc4, - "ISO_8859-1": enc4, - "iso_8859-1": enc4, - "ISO-8859-1": enc4, - "iso-8859-1": enc4, - "latin1": enc4, - "l1": enc4, - "IBM819": enc4, - "ibm819": enc4, - "CP819": enc4, - "cp819": enc4, - "csISOLatin1": enc4, - "csisolatin1": enc4, - "ISO_8859-2:1987": enc5, - "iso_8859-2:1987": enc5, - "iso-ir-101": enc5, - "ISO_8859-2": enc5, - "iso_8859-2": enc5, - "ISO-8859-2": enc5, - "iso-8859-2": enc5, - "latin2": enc5, - "l2": enc5, - "csISOLatin2": enc5, - "csisolatin2": enc5, - "ISO_8859-3:1988": enc6, - "iso_8859-3:1988": enc6, - "iso-ir-109": enc6, - "ISO_8859-3": enc6, - "iso_8859-3": enc6, - "ISO-8859-3": enc6, - "iso-8859-3": enc6, - "latin3": enc6, - "l3": enc6, - "csISOLatin3": enc6, - "csisolatin3": enc6, - "ISO_8859-4:1988": enc7, - "iso_8859-4:1988": enc7, - "iso-ir-110": enc7, - "ISO_8859-4": enc7, - "iso_8859-4": enc7, - "ISO-8859-4": enc7, - "iso-8859-4": enc7, - "latin4": enc7, - "l4": enc7, - "csISOLatin4": enc7, - "csisolatin4": enc7, - "ISO_8859-5:1988": enc8, - "iso_8859-5:1988": enc8, - "iso-ir-144": enc8, - "ISO_8859-5": enc8, - "iso_8859-5": enc8, - "ISO-8859-5": enc8, - "iso-8859-5": enc8, - "cyrillic": enc8, - "csISOLatinCyrillic": enc8, - "csisolatincyrillic": enc8, - "ISO_8859-6:1987": enc9, - "iso_8859-6:1987": enc9, - "iso-ir-127": enc9, - "ISO_8859-6": enc9, - "iso_8859-6": enc9, - "ISO-8859-6": enc9, - "iso-8859-6": enc9, - "ECMA-114": enc9, - "ecma-114": enc9, - "ASMO-708": enc9, - "asmo-708": enc9, - "arabic": enc9, - "csISOLatinArabic": enc9, - "csisolatinarabic": enc9, - "ISO_8859-7:1987": enc10, - "iso_8859-7:1987": enc10, - "iso-ir-126": enc10, - "ISO_8859-7": enc10, - "iso_8859-7": enc10, - "ISO-8859-7": enc10, - "iso-8859-7": enc10, - "ELOT_928": enc10, - "elot_928": enc10, - "ECMA-118": enc10, - "ecma-118": enc10, - "greek": enc10, - "greek8": enc10, - "csISOLatinGreek": enc10, - "csisolatingreek": enc10, - "ISO_8859-8:1988": enc11, - "iso_8859-8:1988": enc11, - "iso-ir-138": enc11, - "ISO_8859-8": enc11, - "iso_8859-8": enc11, - "ISO-8859-8": enc11, - "iso-8859-8": enc11, - "hebrew": enc11, - "csISOLatinHebrew": enc11, - "csisolatinhebrew": enc11, - "ISO_8859-9:1989": enc12, - "iso_8859-9:1989": enc12, - "iso-ir-148": enc12, - "ISO_8859-9": enc12, - "iso_8859-9": enc12, - "ISO-8859-9": enc12, - "iso-8859-9": enc12, - "latin5": enc12, - "l5": enc12, - "csISOLatin5": enc12, - "csisolatin5": enc12, - "ISO-8859-10": enc13, - "iso-8859-10": enc13, - "iso-ir-157": enc13, - "l6": enc13, - "ISO_8859-10:1992": enc13, - "iso_8859-10:1992": enc13, - "csISOLatin6": enc13, - "csisolatin6": enc13, - "latin6": enc13, - "ISO_6937-2-add": enc14, - "iso_6937-2-add": enc14, - "iso-ir-142": enc14, - "csISOTextComm": enc14, - "csisotextcomm": enc14, - "JIS_X0201": enc15, - "jis_x0201": enc15, - "X0201": enc15, - "x0201": enc15, - "csHalfWidthKatakana": enc15, - "cshalfwidthkatakana": enc15, - "JIS_Encoding": enc16, - "jis_encoding": enc16, - "csJISEncoding": enc16, - "csjisencoding": enc16, - "Shift_JIS": enc17, - "shift_jis": enc17, - "MS_Kanji": enc17, - "ms_kanji": enc17, - "csShiftJIS": enc17, - "csshiftjis": enc17, + "US-ASCII": enc3, + "us-ascii": enc3, + "iso-ir-6": enc3, + "ANSI_X3.4-1968": enc3, + "ansi_x3.4-1968": enc3, + "ANSI_X3.4-1986": enc3, + "ansi_x3.4-1986": enc3, + "ISO_646.irv:1991": enc3, + "iso_646.irv:1991": enc3, + "ISO646-US": enc3, + "iso646-us": enc3, + "us": enc3, + "IBM367": enc3, + "ibm367": enc3, + "cp367": enc3, + "csASCII": enc3, + "csascii": enc3, + "ISO_8859-1:1987": enc4, + "iso_8859-1:1987": enc4, + "iso-ir-100": enc4, + "ISO_8859-1": enc4, + "iso_8859-1": enc4, + "ISO-8859-1": enc4, + "iso-8859-1": enc4, + "latin1": enc4, + "l1": enc4, + "IBM819": enc4, + "ibm819": enc4, + "CP819": enc4, + "cp819": enc4, + "csISOLatin1": enc4, + "csisolatin1": enc4, + "ISO_8859-2:1987": enc5, + "iso_8859-2:1987": enc5, + "iso-ir-101": enc5, + "ISO_8859-2": enc5, + "iso_8859-2": enc5, + "ISO-8859-2": enc5, + "iso-8859-2": enc5, + "latin2": enc5, + "l2": enc5, + "csISOLatin2": enc5, + "csisolatin2": enc5, + "ISO_8859-3:1988": enc6, + "iso_8859-3:1988": enc6, + "iso-ir-109": enc6, + "ISO_8859-3": enc6, + "iso_8859-3": enc6, + "ISO-8859-3": enc6, + "iso-8859-3": enc6, + "latin3": enc6, + "l3": enc6, + "csISOLatin3": enc6, + "csisolatin3": enc6, + "ISO_8859-4:1988": enc7, + "iso_8859-4:1988": enc7, + "iso-ir-110": enc7, + "ISO_8859-4": enc7, + "iso_8859-4": enc7, + "ISO-8859-4": enc7, + "iso-8859-4": enc7, + "latin4": enc7, + "l4": enc7, + "csISOLatin4": enc7, + "csisolatin4": enc7, + "ISO_8859-5:1988": enc8, + "iso_8859-5:1988": enc8, + "iso-ir-144": enc8, + "ISO_8859-5": enc8, + "iso_8859-5": enc8, + "ISO-8859-5": enc8, + "iso-8859-5": enc8, + "cyrillic": enc8, + "csISOLatinCyrillic": enc8, + "csisolatincyrillic": enc8, + "ISO_8859-6:1987": enc9, + "iso_8859-6:1987": enc9, + "iso-ir-127": enc9, + "ISO_8859-6": enc9, + "iso_8859-6": enc9, + "ISO-8859-6": enc9, + "iso-8859-6": enc9, + "ECMA-114": enc9, + "ecma-114": enc9, + "ASMO-708": enc9, + "asmo-708": enc9, + "arabic": enc9, + "csISOLatinArabic": enc9, + "csisolatinarabic": enc9, + "ISO_8859-7:1987": enc10, + "iso_8859-7:1987": enc10, + "iso-ir-126": enc10, + "ISO_8859-7": enc10, + "iso_8859-7": enc10, + "ISO-8859-7": enc10, + "iso-8859-7": enc10, + "ELOT_928": enc10, + "elot_928": enc10, + "ECMA-118": enc10, + "ecma-118": enc10, + "greek": enc10, + "greek8": enc10, + "csISOLatinGreek": enc10, + "csisolatingreek": enc10, + "ISO_8859-8:1988": enc11, + "iso_8859-8:1988": enc11, + "iso-ir-138": enc11, + "ISO_8859-8": enc11, + "iso_8859-8": enc11, + "ISO-8859-8": enc11, + "iso-8859-8": enc11, + "hebrew": enc11, + "csISOLatinHebrew": enc11, + "csisolatinhebrew": enc11, + "ISO_8859-9:1989": enc12, + "iso_8859-9:1989": enc12, + "iso-ir-148": enc12, + "ISO_8859-9": enc12, + "iso_8859-9": enc12, + "ISO-8859-9": enc12, + "iso-8859-9": enc12, + "latin5": enc12, + "l5": enc12, + "csISOLatin5": enc12, + "csisolatin5": enc12, + "ISO-8859-10": enc13, + "iso-8859-10": enc13, + "iso-ir-157": enc13, + "l6": enc13, + "ISO_8859-10:1992": enc13, + "iso_8859-10:1992": enc13, + "csISOLatin6": enc13, + "csisolatin6": enc13, + "latin6": enc13, + "ISO_6937-2-add": enc14, + "iso_6937-2-add": enc14, + "iso-ir-142": enc14, + "csISOTextComm": enc14, + "csisotextcomm": enc14, + "JIS_X0201": enc15, + "jis_x0201": enc15, + "X0201": enc15, + "x0201": enc15, + "csHalfWidthKatakana": enc15, + "cshalfwidthkatakana": enc15, + "JIS_Encoding": enc16, + "jis_encoding": enc16, + "csJISEncoding": enc16, + "csjisencoding": enc16, + "Shift_JIS": enc17, + "shift_jis": enc17, + "MS_Kanji": enc17, + "ms_kanji": enc17, + "csShiftJIS": enc17, + "csshiftjis": enc17, "Extended_UNIX_Code_Packed_Format_for_Japanese": enc18, "extended_unix_code_packed_format_for_japanese": enc18, "csEUCPkdFmtJapanese": enc18, "cseucpkdfmtjapanese": enc18, "EUC-JP": enc18, "euc-jp": enc18, - "Extended_UNIX_Code_Fixed_Width_for_Japanese": enc19, - "extended_unix_code_fixed_width_for_japanese": enc19, - "csEUCFixWidJapanese": enc19, - "cseucfixwidjapanese": enc19, - "BS_4730": enc20, - "bs_4730": enc20, - "iso-ir-4": enc20, - "ISO646-GB": enc20, - "iso646-gb": enc20, - "gb": enc20, - "uk": enc20, - "csISO4UnitedKingdom": enc20, - "csiso4unitedkingdom": enc20, - "SEN_850200_C": enc21, - "sen_850200_c": enc21, - "iso-ir-11": enc21, - "ISO646-SE2": enc21, - "iso646-se2": enc21, - "se2": enc21, - "csISO11SwedishForNames": enc21, - "csiso11swedishfornames": enc21, - "IT": enc22, - "it": enc22, - "iso-ir-15": enc22, - "ISO646-IT": enc22, - "iso646-it": enc22, - "csISO15Italian": enc22, - "csiso15italian": enc22, - "ES": enc23, - "es": enc23, - "iso-ir-17": enc23, - "ISO646-ES": enc23, - "iso646-es": enc23, - "csISO17Spanish": enc23, - "csiso17spanish": enc23, - "DIN_66003": enc24, - "din_66003": enc24, - "iso-ir-21": enc24, - "de": enc24, - "ISO646-DE": enc24, - "iso646-de": enc24, - "csISO21German": enc24, - "csiso21german": enc24, - "NS_4551-1": enc25, - "ns_4551-1": enc25, - "iso-ir-60": enc25, - "ISO646-NO": enc25, - "iso646-no": enc25, - "no": enc25, - "csISO60DanishNorwegian": enc25, - "csiso60danishnorwegian": enc25, - "csISO60Norwegian1": enc25, - "csiso60norwegian1": enc25, - "NF_Z_62-010": enc26, - "nf_z_62-010": enc26, - "iso-ir-69": enc26, - "ISO646-FR": enc26, - "iso646-fr": enc26, - "fr": enc26, - "csISO69French": enc26, - "csiso69french": enc26, - "ISO-10646-UTF-1": enc27, - "iso-10646-utf-1": enc27, - "csISO10646UTF1": enc27, - "csiso10646utf1": enc27, - "ISO_646.basic:1983": enc28, - "iso_646.basic:1983": enc28, - "ref": enc28, - "csISO646basic1983": enc28, - "csiso646basic1983": enc28, - "INVARIANT": enc29, - "invariant": enc29, - "csINVARIANT": enc29, - "csinvariant": enc29, - "ISO_646.irv:1983": enc30, - "iso_646.irv:1983": enc30, - "iso-ir-2": enc30, - "irv": enc30, - "csISO2IntlRefVersion": enc30, - "csiso2intlrefversion": enc30, - "NATS-SEFI": enc31, - "nats-sefi": enc31, - "iso-ir-8-1": enc31, - "csNATSSEFI": enc31, - "csnatssefi": enc31, - "NATS-SEFI-ADD": enc32, - "nats-sefi-add": enc32, - "iso-ir-8-2": enc32, - "csNATSSEFIADD": enc32, - "csnatssefiadd": enc32, - "NATS-DANO": enc33, - "nats-dano": enc33, - "iso-ir-9-1": enc33, - "csNATSDANO": enc33, - "csnatsdano": enc33, - "NATS-DANO-ADD": enc34, - "nats-dano-add": enc34, - "iso-ir-9-2": enc34, - "csNATSDANOADD": enc34, - "csnatsdanoadd": enc34, - "SEN_850200_B": enc35, - "sen_850200_b": enc35, - "iso-ir-10": enc35, - "FI": enc35, - "fi": enc35, - "ISO646-FI": enc35, - "iso646-fi": enc35, - "ISO646-SE": enc35, - "iso646-se": enc35, - "se": enc35, - "csISO10Swedish": enc35, - "csiso10swedish": enc35, - "KS_C_5601-1987": enc36, - "ks_c_5601-1987": enc36, - "iso-ir-149": enc36, - "KS_C_5601-1989": enc36, - "ks_c_5601-1989": enc36, - "KSC_5601": enc36, - "ksc_5601": enc36, - "korean": enc36, - "csKSC56011987": enc36, - "csksc56011987": enc36, - "ISO-2022-KR": enc37, - "iso-2022-kr": enc37, - "csISO2022KR": enc37, - "csiso2022kr": enc37, - "EUC-KR": enc38, - "euc-kr": enc38, - "csEUCKR": enc38, - "cseuckr": enc38, - "ISO-2022-JP": enc39, - "iso-2022-jp": enc39, - "csISO2022JP": enc39, - "csiso2022jp": enc39, - "ISO-2022-JP-2": enc40, - "iso-2022-jp-2": enc40, - "csISO2022JP2": enc40, - "csiso2022jp2": enc40, - "JIS_C6220-1969-jp": enc41, - "jis_c6220-1969-jp": enc41, - "JIS_C6220-1969": enc41, - "jis_c6220-1969": enc41, - "iso-ir-13": enc41, - "katakana": enc41, - "x0201-7": enc41, - "csISO13JISC6220jp": enc41, - "csiso13jisc6220jp": enc41, - "JIS_C6220-1969-ro": enc42, - "jis_c6220-1969-ro": enc42, - "iso-ir-14": enc42, - "jp": enc42, - "ISO646-JP": enc42, - "iso646-jp": enc42, - "csISO14JISC6220ro": enc42, - "csiso14jisc6220ro": enc42, - "PT": enc43, - "pt": enc43, - "iso-ir-16": enc43, - "ISO646-PT": enc43, - "iso646-pt": enc43, - "csISO16Portuguese": enc43, - "csiso16portuguese": enc43, - "greek7-old": enc44, - "iso-ir-18": enc44, - "csISO18Greek7Old": enc44, - "csiso18greek7old": enc44, - "latin-greek": enc45, - "iso-ir-19": enc45, - "csISO19LatinGreek": enc45, - "csiso19latingreek": enc45, - "NF_Z_62-010_(1973)": enc46, - "nf_z_62-010_(1973)": enc46, - "iso-ir-25": enc46, - "ISO646-FR1": enc46, - "iso646-fr1": enc46, - "csISO25French": enc46, - "csiso25french": enc46, - "Latin-greek-1": enc47, - "latin-greek-1": enc47, - "iso-ir-27": enc47, - "csISO27LatinGreek1": enc47, - "csiso27latingreek1": enc47, - "ISO_5427": enc48, - "iso_5427": enc48, - "iso-ir-37": enc48, - "csISO5427Cyrillic": enc48, - "csiso5427cyrillic": enc48, - "JIS_C6226-1978": enc49, - "jis_c6226-1978": enc49, - "iso-ir-42": enc49, - "csISO42JISC62261978": enc49, - "csiso42jisc62261978": enc49, - "BS_viewdata": enc50, - "bs_viewdata": enc50, - "iso-ir-47": enc50, - "csISO47BSViewdata": enc50, - "csiso47bsviewdata": enc50, - "INIS": enc51, - "inis": enc51, - "iso-ir-49": enc51, - "csISO49INIS": enc51, - "csiso49inis": enc51, - "INIS-8": enc52, - "inis-8": enc52, - "iso-ir-50": enc52, - "csISO50INIS8": enc52, - "csiso50inis8": enc52, - "INIS-cyrillic": enc53, - "inis-cyrillic": enc53, - "iso-ir-51": enc53, - "csISO51INISCyrillic": enc53, - "csiso51iniscyrillic": enc53, - "ISO_5427:1981": enc54, - "iso_5427:1981": enc54, - "iso-ir-54": enc54, - "ISO5427Cyrillic1981": enc54, - "iso5427cyrillic1981": enc54, - "csISO54271981": enc54, - "csiso54271981": enc54, - "ISO_5428:1980": enc55, - "iso_5428:1980": enc55, - "iso-ir-55": enc55, - "csISO5428Greek": enc55, - "csiso5428greek": enc55, - "GB_1988-80": enc56, - "gb_1988-80": enc56, - "iso-ir-57": enc56, - "cn": enc56, - "ISO646-CN": enc56, - "iso646-cn": enc56, - "csISO57GB1988": enc56, - "csiso57gb1988": enc56, - "GB_2312-80": enc57, - "gb_2312-80": enc57, - "iso-ir-58": enc57, - "chinese": enc57, - "csISO58GB231280": enc57, - "csiso58gb231280": enc57, - "NS_4551-2": enc58, - "ns_4551-2": enc58, - "ISO646-NO2": enc58, - "iso646-no2": enc58, - "iso-ir-61": enc58, - "no2": enc58, - "csISO61Norwegian2": enc58, - "csiso61norwegian2": enc58, - "videotex-suppl": enc59, - "iso-ir-70": enc59, - "csISO70VideotexSupp1": enc59, - "csiso70videotexsupp1": enc59, - "PT2": enc60, - "pt2": enc60, - "iso-ir-84": enc60, - "ISO646-PT2": enc60, - "iso646-pt2": enc60, - "csISO84Portuguese2": enc60, - "csiso84portuguese2": enc60, - "ES2": enc61, - "es2": enc61, - "iso-ir-85": enc61, - "ISO646-ES2": enc61, - "iso646-es2": enc61, - "csISO85Spanish2": enc61, - "csiso85spanish2": enc61, - "MSZ_7795.3": enc62, - "msz_7795.3": enc62, - "iso-ir-86": enc62, - "ISO646-HU": enc62, - "iso646-hu": enc62, - "hu": enc62, - "csISO86Hungarian": enc62, - "csiso86hungarian": enc62, - "JIS_C6226-1983": enc63, - "jis_c6226-1983": enc63, - "iso-ir-87": enc63, - "x0208": enc63, - "JIS_X0208-1983": enc63, - "jis_x0208-1983": enc63, - "csISO87JISX0208": enc63, - "csiso87jisx0208": enc63, - "greek7": enc64, - "iso-ir-88": enc64, - "csISO88Greek7": enc64, - "csiso88greek7": enc64, - "ASMO_449": enc65, - "asmo_449": enc65, - "ISO_9036": enc65, - "iso_9036": enc65, - "arabic7": enc65, - "iso-ir-89": enc65, - "csISO89ASMO449": enc65, - "csiso89asmo449": enc65, - "iso-ir-90": enc66, - "csISO90": enc66, - "csiso90": enc66, - "JIS_C6229-1984-a": enc67, - "jis_c6229-1984-a": enc67, - "iso-ir-91": enc67, - "jp-ocr-a": enc67, - "csISO91JISC62291984a": enc67, - "csiso91jisc62291984a": enc67, - "JIS_C6229-1984-b": enc68, - "jis_c6229-1984-b": enc68, - "iso-ir-92": enc68, - "ISO646-JP-OCR-B": enc68, - "iso646-jp-ocr-b": enc68, - "jp-ocr-b": enc68, - "csISO92JISC62991984b": enc68, - "csiso92jisc62991984b": enc68, - "JIS_C6229-1984-b-add": enc69, - "jis_c6229-1984-b-add": enc69, - "iso-ir-93": enc69, - "jp-ocr-b-add": enc69, - "csISO93JIS62291984badd": enc69, - "csiso93jis62291984badd": enc69, - "JIS_C6229-1984-hand": enc70, - "jis_c6229-1984-hand": enc70, - "iso-ir-94": enc70, - "jp-ocr-hand": enc70, - "csISO94JIS62291984hand": enc70, - "csiso94jis62291984hand": enc70, - "JIS_C6229-1984-hand-add": enc71, - "jis_c6229-1984-hand-add": enc71, - "iso-ir-95": enc71, - "jp-ocr-hand-add": enc71, - "csISO95JIS62291984handadd": enc71, - "csiso95jis62291984handadd": enc71, - "JIS_C6229-1984-kana": enc72, - "jis_c6229-1984-kana": enc72, - "iso-ir-96": enc72, - "csISO96JISC62291984kana": enc72, - "csiso96jisc62291984kana": enc72, - "ISO_2033-1983": enc73, - "iso_2033-1983": enc73, - "iso-ir-98": enc73, - "e13b": enc73, - "csISO2033": enc73, - "csiso2033": enc73, - "ANSI_X3.110-1983": enc74, - "ansi_x3.110-1983": enc74, - "iso-ir-99": enc74, - "CSA_T500-1983": enc74, - "csa_t500-1983": enc74, - "NAPLPS": enc74, - "naplps": enc74, - "csISO99NAPLPS": enc74, - "csiso99naplps": enc74, - "T.61-7bit": enc75, - "t.61-7bit": enc75, - "iso-ir-102": enc75, - "csISO102T617bit": enc75, - "csiso102t617bit": enc75, - "T.61-8bit": enc76, - "t.61-8bit": enc76, - "T.61": enc76, - "t.61": enc76, - "iso-ir-103": enc76, - "csISO103T618bit": enc76, - "csiso103t618bit": enc76, - "ECMA-cyrillic": enc77, - "ecma-cyrillic": enc77, - "iso-ir-111": enc77, - "KOI8-E": enc77, - "koi8-e": enc77, - "csISO111ECMACyrillic": enc77, - "csiso111ecmacyrillic": enc77, - "CSA_Z243.4-1985-1": enc78, - "csa_z243.4-1985-1": enc78, - "iso-ir-121": enc78, - "ISO646-CA": enc78, - "iso646-ca": enc78, - "csa7-1": enc78, - "csa71": enc78, - "ca": enc78, - "csISO121Canadian1": enc78, - "csiso121canadian1": enc78, - "CSA_Z243.4-1985-2": enc79, - "csa_z243.4-1985-2": enc79, - "iso-ir-122": enc79, - "ISO646-CA2": enc79, - "iso646-ca2": enc79, - "csa7-2": enc79, - "csa72": enc79, - "csISO122Canadian2": enc79, - "csiso122canadian2": enc79, - "CSA_Z243.4-1985-gr": enc80, - "csa_z243.4-1985-gr": enc80, - "iso-ir-123": enc80, - "csISO123CSAZ24341985gr": enc80, - "csiso123csaz24341985gr": enc80, - "ISO_8859-6-E": enc81, - "iso_8859-6-e": enc81, - "csISO88596E": enc81, - "csiso88596e": enc81, - "ISO-8859-6-E": enc81, - "iso-8859-6-e": enc81, - "ISO_8859-6-I": enc82, - "iso_8859-6-i": enc82, - "csISO88596I": enc82, - "csiso88596i": enc82, - "ISO-8859-6-I": enc82, - "iso-8859-6-i": enc82, - "T.101-G2": enc83, - "t.101-g2": enc83, - "iso-ir-128": enc83, - "csISO128T101G2": enc83, - "csiso128t101g2": enc83, - "ISO_8859-8-E": enc84, - "iso_8859-8-e": enc84, - "csISO88598E": enc84, - "csiso88598e": enc84, - "ISO-8859-8-E": enc84, - "iso-8859-8-e": enc84, - "ISO_8859-8-I": enc85, - "iso_8859-8-i": enc85, - "csISO88598I": enc85, - "csiso88598i": enc85, - "ISO-8859-8-I": enc85, - "iso-8859-8-i": enc85, - "CSN_369103": enc86, - "csn_369103": enc86, - "iso-ir-139": enc86, - "csISO139CSN369103": enc86, - "csiso139csn369103": enc86, - "JUS_I.B1.002": enc87, - "jus_i.b1.002": enc87, - "iso-ir-141": enc87, - "ISO646-YU": enc87, - "iso646-yu": enc87, - "js": enc87, - "yu": enc87, - "csISO141JUSIB1002": enc87, - "csiso141jusib1002": enc87, - "IEC_P27-1": enc88, - "iec_p27-1": enc88, - "iso-ir-143": enc88, - "csISO143IECP271": enc88, - "csiso143iecp271": enc88, - "JUS_I.B1.003-serb": enc89, - "jus_i.b1.003-serb": enc89, - "iso-ir-146": enc89, - "serbian": enc89, - "csISO146Serbian": enc89, - "csiso146serbian": enc89, - "JUS_I.B1.003-mac": enc90, - "jus_i.b1.003-mac": enc90, - "macedonian": enc90, - "iso-ir-147": enc90, - "csISO147Macedonian": enc90, - "csiso147macedonian": enc90, - "greek-ccitt": enc91, - "iso-ir-150": enc91, - "csISO150": enc91, - "csiso150": enc91, - "csISO150GreekCCITT": enc91, - "csiso150greekccitt": enc91, - "NC_NC00-10:81": enc92, - "nc_nc00-10:81": enc92, - "cuba": enc92, - "iso-ir-151": enc92, - "ISO646-CU": enc92, - "iso646-cu": enc92, - "csISO151Cuba": enc92, - "csiso151cuba": enc92, - "ISO_6937-2-25": enc93, - "iso_6937-2-25": enc93, - "iso-ir-152": enc93, - "csISO6937Add": enc93, - "csiso6937add": enc93, - "GOST_19768-74": enc94, - "gost_19768-74": enc94, - "ST_SEV_358-88": enc94, - "st_sev_358-88": enc94, - "iso-ir-153": enc94, - "csISO153GOST1976874": enc94, - "csiso153gost1976874": enc94, - "ISO_8859-supp": enc95, - "iso_8859-supp": enc95, - "iso-ir-154": enc95, - "latin1-2-5": enc95, - "csISO8859Supp": enc95, - "csiso8859supp": enc95, - "ISO_10367-box": enc96, - "iso_10367-box": enc96, - "iso-ir-155": enc96, - "csISO10367Box": enc96, - "csiso10367box": enc96, - "latin-lap": enc97, - "lap": enc97, - "iso-ir-158": enc97, - "csISO158Lap": enc97, - "csiso158lap": enc97, - "JIS_X0212-1990": enc98, - "jis_x0212-1990": enc98, - "x0212": enc98, - "iso-ir-159": enc98, - "csISO159JISX02121990": enc98, - "csiso159jisx02121990": enc98, - "DS_2089": enc99, - "ds_2089": enc99, - "DS2089": enc99, - "ds2089": enc99, - "ISO646-DK": enc99, - "iso646-dk": enc99, - "dk": enc99, - "csISO646Danish": enc99, - "csiso646danish": enc99, - "us-dk": enc100, - "csUSDK": enc100, - "csusdk": enc100, - "dk-us": enc101, - "csDKUS": enc101, - "csdkus": enc101, - "KSC5636": enc102, - "ksc5636": enc102, - "ISO646-KR": enc102, - "iso646-kr": enc102, - "csKSC5636": enc102, - "csksc5636": enc102, - "UNICODE-1-1-UTF-7": enc103, - "unicode-1-1-utf-7": enc103, - "csUnicode11UTF7": enc103, - "csunicode11utf7": enc103, - "ISO-2022-CN": enc104, - "iso-2022-cn": enc104, - "csISO2022CN": enc104, - "csiso2022cn": enc104, - "ISO-2022-CN-EXT": enc105, - "iso-2022-cn-ext": enc105, - "csISO2022CNEXT": enc105, - "csiso2022cnext": enc105, - "UTF-8": enc106, - "utf-8": enc106, - "csUTF8": enc106, - "csutf8": enc106, - "ISO-8859-13": enc109, - "iso-8859-13": enc109, - "csISO885913": enc109, - "csiso885913": enc109, - "ISO-8859-14": enc110, - "iso-8859-14": enc110, - "iso-ir-199": enc110, - "ISO_8859-14:1998": enc110, - "iso_8859-14:1998": enc110, - "ISO_8859-14": enc110, - "iso_8859-14": enc110, - "latin8": enc110, - "iso-celtic": enc110, - "l8": enc110, - "csISO885914": enc110, - "csiso885914": enc110, - "ISO-8859-15": enc111, - "iso-8859-15": enc111, - "ISO_8859-15": enc111, - "iso_8859-15": enc111, - "Latin-9": enc111, - "latin-9": enc111, - "csISO885915": enc111, - "csiso885915": enc111, - "ISO-8859-16": enc112, - "iso-8859-16": enc112, - "iso-ir-226": enc112, - "ISO_8859-16:2001": enc112, - "iso_8859-16:2001": enc112, - "ISO_8859-16": enc112, - "iso_8859-16": enc112, - "latin10": enc112, - "l10": enc112, - "csISO885916": enc112, - "csiso885916": enc112, - "GBK": enc113, - "gbk": enc113, - "CP936": enc113, - "cp936": enc113, - "MS936": enc113, - "ms936": enc113, - "windows-936": enc113, - "csGBK": enc113, - "csgbk": enc113, - "GB18030": enc114, - "gb18030": enc114, - "csGB18030": enc114, - "csgb18030": enc114, - "OSD_EBCDIC_DF04_15": enc115, - "osd_ebcdic_df04_15": enc115, - "csOSDEBCDICDF0415": enc115, - "csosdebcdicdf0415": enc115, - "OSD_EBCDIC_DF03_IRV": enc116, - "osd_ebcdic_df03_irv": enc116, - "csOSDEBCDICDF03IRV": enc116, - "csosdebcdicdf03irv": enc116, - "OSD_EBCDIC_DF04_1": enc117, - "osd_ebcdic_df04_1": enc117, - "csOSDEBCDICDF041": enc117, - "csosdebcdicdf041": enc117, - "ISO-11548-1": enc118, - "iso-11548-1": enc118, - "ISO_11548-1": enc118, - "iso_11548-1": enc118, - "ISO_TR_11548-1": enc118, - "iso_tr_11548-1": enc118, - "csISO115481": enc118, - "csiso115481": enc118, - "KZ-1048": enc119, - "kz-1048": enc119, - "STRK1048-2002": enc119, - "strk1048-2002": enc119, - "RK1048": enc119, - "rk1048": enc119, - "csKZ1048": enc119, - "cskz1048": enc119, - "ISO-10646-UCS-2": enc1000, - "iso-10646-ucs-2": enc1000, - "csUnicode": enc1000, - "csunicode": enc1000, - "ISO-10646-UCS-4": enc1001, - "iso-10646-ucs-4": enc1001, - "csUCS4": enc1001, - "csucs4": enc1001, - "ISO-10646-UCS-Basic": enc1002, - "iso-10646-ucs-basic": enc1002, - "csUnicodeASCII": enc1002, - "csunicodeascii": enc1002, - "ISO-10646-Unicode-Latin1": enc1003, - "iso-10646-unicode-latin1": enc1003, - "csUnicodeLatin1": enc1003, - "csunicodelatin1": enc1003, - "ISO-10646": enc1003, - "iso-10646": enc1003, - "ISO-10646-J-1": enc1004, - "iso-10646-j-1": enc1004, - "csUnicodeJapanese": enc1004, - "csunicodejapanese": enc1004, - "ISO-Unicode-IBM-1261": enc1005, - "iso-unicode-ibm-1261": enc1005, - "csUnicodeIBM1261": enc1005, - "csunicodeibm1261": enc1005, - "ISO-Unicode-IBM-1268": enc1006, - "iso-unicode-ibm-1268": enc1006, - "csUnicodeIBM1268": enc1006, - "csunicodeibm1268": enc1006, - "ISO-Unicode-IBM-1276": enc1007, - "iso-unicode-ibm-1276": enc1007, - "csUnicodeIBM1276": enc1007, - "csunicodeibm1276": enc1007, - "ISO-Unicode-IBM-1264": enc1008, - "iso-unicode-ibm-1264": enc1008, - "csUnicodeIBM1264": enc1008, - "csunicodeibm1264": enc1008, - "ISO-Unicode-IBM-1265": enc1009, - "iso-unicode-ibm-1265": enc1009, - "csUnicodeIBM1265": enc1009, - "csunicodeibm1265": enc1009, - "UNICODE-1-1": enc1010, - "unicode-1-1": enc1010, - "csUnicode11": enc1010, - "csunicode11": enc1010, - "SCSU": enc1011, - "scsu": enc1011, - "csSCSU": enc1011, - "csscsu": enc1011, - "UTF-7": enc1012, - "utf-7": enc1012, - "csUTF7": enc1012, - "csutf7": enc1012, - "UTF-16BE": enc1013, - "utf-16be": enc1013, - "csUTF16BE": enc1013, - "csutf16be": enc1013, - "UTF-16LE": enc1014, - "utf-16le": enc1014, - "csUTF16LE": enc1014, - "csutf16le": enc1014, - "UTF-16": enc1015, - "utf-16": enc1015, - "csUTF16": enc1015, - "csutf16": enc1015, - "CESU-8": enc1016, - "cesu-8": enc1016, - "csCESU8": enc1016, - "cscesu8": enc1016, - "csCESU-8": enc1016, - "cscesu-8": enc1016, - "UTF-32": enc1017, - "utf-32": enc1017, - "csUTF32": enc1017, - "csutf32": enc1017, - "UTF-32BE": enc1018, - "utf-32be": enc1018, - "csUTF32BE": enc1018, - "csutf32be": enc1018, - "UTF-32LE": enc1019, - "utf-32le": enc1019, - "csUTF32LE": enc1019, - "csutf32le": enc1019, - "BOCU-1": enc1020, - "bocu-1": enc1020, - "csBOCU1": enc1020, - "csbocu1": enc1020, - "csBOCU-1": enc1020, - "csbocu-1": enc1020, - "ISO-8859-1-Windows-3.0-Latin-1": enc2000, - "iso-8859-1-windows-3.0-latin-1": enc2000, - "csWindows30Latin1": enc2000, - "cswindows30latin1": enc2000, - "ISO-8859-1-Windows-3.1-Latin-1": enc2001, - "iso-8859-1-windows-3.1-latin-1": enc2001, - "csWindows31Latin1": enc2001, - "cswindows31latin1": enc2001, - "ISO-8859-2-Windows-Latin-2": enc2002, - "iso-8859-2-windows-latin-2": enc2002, - "csWindows31Latin2": enc2002, - "cswindows31latin2": enc2002, - "ISO-8859-9-Windows-Latin-5": enc2003, - "iso-8859-9-windows-latin-5": enc2003, - "csWindows31Latin5": enc2003, - "cswindows31latin5": enc2003, - "hp-roman8": enc2004, - "roman8": enc2004, - "r8": enc2004, - "csHPRoman8": enc2004, - "cshproman8": enc2004, - "Adobe-Standard-Encoding": enc2005, - "adobe-standard-encoding": enc2005, - "csAdobeStandardEncoding": enc2005, - "csadobestandardencoding": enc2005, - "Ventura-US": enc2006, - "ventura-us": enc2006, - "csVenturaUS": enc2006, - "csventuraus": enc2006, - "Ventura-International": enc2007, - "ventura-international": enc2007, - "csVenturaInternational": enc2007, - "csventurainternational": enc2007, - "DEC-MCS": enc2008, - "dec-mcs": enc2008, - "dec": enc2008, - "csDECMCS": enc2008, - "csdecmcs": enc2008, - "IBM850": enc2009, - "ibm850": enc2009, - "cp850": enc2009, - "850": enc2009, - "csPC850Multilingual": enc2009, - "cspc850multilingual": enc2009, - "PC8-Danish-Norwegian": enc2012, - "pc8-danish-norwegian": enc2012, - "csPC8DanishNorwegian": enc2012, - "cspc8danishnorwegian": enc2012, - "IBM862": enc2013, - "ibm862": enc2013, - "cp862": enc2013, - "862": enc2013, - "csPC862LatinHebrew": enc2013, - "cspc862latinhebrew": enc2013, - "PC8-Turkish": enc2014, - "pc8-turkish": enc2014, - "csPC8Turkish": enc2014, - "cspc8turkish": enc2014, - "IBM-Symbols": enc2015, - "ibm-symbols": enc2015, - "csIBMSymbols": enc2015, - "csibmsymbols": enc2015, - "IBM-Thai": enc2016, - "ibm-thai": enc2016, - "csIBMThai": enc2016, - "csibmthai": enc2016, - "HP-Legal": enc2017, - "hp-legal": enc2017, - "csHPLegal": enc2017, - "cshplegal": enc2017, - "HP-Pi-font": enc2018, - "hp-pi-font": enc2018, - "csHPPiFont": enc2018, - "cshppifont": enc2018, - "HP-Math8": enc2019, - "hp-math8": enc2019, - "csHPMath8": enc2019, - "cshpmath8": enc2019, - "Adobe-Symbol-Encoding": enc2020, - "adobe-symbol-encoding": enc2020, - "csHPPSMath": enc2020, - "cshppsmath": enc2020, - "HP-DeskTop": enc2021, - "hp-desktop": enc2021, - "csHPDesktop": enc2021, - "cshpdesktop": enc2021, - "Ventura-Math": enc2022, - "ventura-math": enc2022, - "csVenturaMath": enc2022, - "csventuramath": enc2022, - "Microsoft-Publishing": enc2023, - "microsoft-publishing": enc2023, - "csMicrosoftPublishing": enc2023, - "csmicrosoftpublishing": enc2023, - "Windows-31J": enc2024, - "windows-31j": enc2024, - "csWindows31J": enc2024, - "cswindows31j": enc2024, - "GB2312": enc2025, - "gb2312": enc2025, - "csGB2312": enc2025, - "csgb2312": enc2025, - "Big5": enc2026, - "big5": enc2026, - "csBig5": enc2026, - "csbig5": enc2026, - "macintosh": enc2027, - "mac": enc2027, - "csMacintosh": enc2027, - "csmacintosh": enc2027, - "IBM037": enc2028, - "ibm037": enc2028, - "cp037": enc2028, - "ebcdic-cp-us": enc2028, - "ebcdic-cp-ca": enc2028, - "ebcdic-cp-wt": enc2028, - "ebcdic-cp-nl": enc2028, - "csIBM037": enc2028, - "csibm037": enc2028, - "IBM038": enc2029, - "ibm038": enc2029, - "EBCDIC-INT": enc2029, - "ebcdic-int": enc2029, - "cp038": enc2029, - "csIBM038": enc2029, - "csibm038": enc2029, - "IBM273": enc2030, - "ibm273": enc2030, - "CP273": enc2030, - "cp273": enc2030, - "csIBM273": enc2030, - "csibm273": enc2030, - "IBM274": enc2031, - "ibm274": enc2031, - "EBCDIC-BE": enc2031, - "ebcdic-be": enc2031, - "CP274": enc2031, - "cp274": enc2031, - "csIBM274": enc2031, - "csibm274": enc2031, - "IBM275": enc2032, - "ibm275": enc2032, - "EBCDIC-BR": enc2032, - "ebcdic-br": enc2032, - "cp275": enc2032, - "csIBM275": enc2032, - "csibm275": enc2032, - "IBM277": enc2033, - "ibm277": enc2033, - "EBCDIC-CP-DK": enc2033, - "ebcdic-cp-dk": enc2033, - "EBCDIC-CP-NO": enc2033, - "ebcdic-cp-no": enc2033, - "csIBM277": enc2033, - "csibm277": enc2033, - "IBM278": enc2034, - "ibm278": enc2034, - "CP278": enc2034, - "cp278": enc2034, - "ebcdic-cp-fi": enc2034, - "ebcdic-cp-se": enc2034, - "csIBM278": enc2034, - "csibm278": enc2034, - "IBM280": enc2035, - "ibm280": enc2035, - "CP280": enc2035, - "cp280": enc2035, - "ebcdic-cp-it": enc2035, - "csIBM280": enc2035, - "csibm280": enc2035, - "IBM281": enc2036, - "ibm281": enc2036, - "EBCDIC-JP-E": enc2036, - "ebcdic-jp-e": enc2036, - "cp281": enc2036, - "csIBM281": enc2036, - "csibm281": enc2036, - "IBM284": enc2037, - "ibm284": enc2037, - "CP284": enc2037, - "cp284": enc2037, - "ebcdic-cp-es": enc2037, - "csIBM284": enc2037, - "csibm284": enc2037, - "IBM285": enc2038, - "ibm285": enc2038, - "CP285": enc2038, - "cp285": enc2038, - "ebcdic-cp-gb": enc2038, - "csIBM285": enc2038, - "csibm285": enc2038, - "IBM290": enc2039, - "ibm290": enc2039, - "cp290": enc2039, - "EBCDIC-JP-kana": enc2039, - "ebcdic-jp-kana": enc2039, - "csIBM290": enc2039, - "csibm290": enc2039, - "IBM297": enc2040, - "ibm297": enc2040, - "cp297": enc2040, - "ebcdic-cp-fr": enc2040, - "csIBM297": enc2040, - "csibm297": enc2040, - "IBM420": enc2041, - "ibm420": enc2041, - "cp420": enc2041, - "ebcdic-cp-ar1": enc2041, - "csIBM420": enc2041, - "csibm420": enc2041, - "IBM423": enc2042, - "ibm423": enc2042, - "cp423": enc2042, - "ebcdic-cp-gr": enc2042, - "csIBM423": enc2042, - "csibm423": enc2042, - "IBM424": enc2043, - "ibm424": enc2043, - "cp424": enc2043, - "ebcdic-cp-he": enc2043, - "csIBM424": enc2043, - "csibm424": enc2043, - "IBM437": enc2011, - "ibm437": enc2011, - "cp437": enc2011, - "437": enc2011, - "csPC8CodePage437": enc2011, - "cspc8codepage437": enc2011, - "IBM500": enc2044, - "ibm500": enc2044, - "CP500": enc2044, - "cp500": enc2044, - "ebcdic-cp-be": enc2044, - "ebcdic-cp-ch": enc2044, - "csIBM500": enc2044, - "csibm500": enc2044, - "IBM851": enc2045, - "ibm851": enc2045, - "cp851": enc2045, - "851": enc2045, - "csIBM851": enc2045, - "csibm851": enc2045, - "IBM852": enc2010, - "ibm852": enc2010, - "cp852": enc2010, - "852": enc2010, - "csPCp852": enc2010, - "cspcp852": enc2010, - "IBM855": enc2046, - "ibm855": enc2046, - "cp855": enc2046, - "855": enc2046, - "csIBM855": enc2046, - "csibm855": enc2046, - "IBM857": enc2047, - "ibm857": enc2047, - "cp857": enc2047, - "857": enc2047, - "csIBM857": enc2047, - "csibm857": enc2047, - "IBM860": enc2048, - "ibm860": enc2048, - "cp860": enc2048, - "860": enc2048, - "csIBM860": enc2048, - "csibm860": enc2048, - "IBM861": enc2049, - "ibm861": enc2049, - "cp861": enc2049, - "861": enc2049, - "cp-is": enc2049, - "csIBM861": enc2049, - "csibm861": enc2049, - "IBM863": enc2050, - "ibm863": enc2050, - "cp863": enc2050, - "863": enc2050, - "csIBM863": enc2050, - "csibm863": enc2050, - "IBM864": enc2051, - "ibm864": enc2051, - "cp864": enc2051, - "csIBM864": enc2051, - "csibm864": enc2051, - "IBM865": enc2052, - "ibm865": enc2052, - "cp865": enc2052, - "865": enc2052, - "csIBM865": enc2052, - "csibm865": enc2052, - "IBM868": enc2053, - "ibm868": enc2053, - "CP868": enc2053, - "cp868": enc2053, - "cp-ar": enc2053, - "csIBM868": enc2053, - "csibm868": enc2053, - "IBM869": enc2054, - "ibm869": enc2054, - "cp869": enc2054, - "869": enc2054, - "cp-gr": enc2054, - "csIBM869": enc2054, - "csibm869": enc2054, - "IBM870": enc2055, - "ibm870": enc2055, - "CP870": enc2055, - "cp870": enc2055, - "ebcdic-cp-roece": enc2055, - "ebcdic-cp-yu": enc2055, - "csIBM870": enc2055, - "csibm870": enc2055, - "IBM871": enc2056, - "ibm871": enc2056, - "CP871": enc2056, - "cp871": enc2056, - "ebcdic-cp-is": enc2056, - "csIBM871": enc2056, - "csibm871": enc2056, - "IBM880": enc2057, - "ibm880": enc2057, - "cp880": enc2057, - "EBCDIC-Cyrillic": enc2057, - "ebcdic-cyrillic": enc2057, - "csIBM880": enc2057, - "csibm880": enc2057, - "IBM891": enc2058, - "ibm891": enc2058, - "cp891": enc2058, - "csIBM891": enc2058, - "csibm891": enc2058, - "IBM903": enc2059, - "ibm903": enc2059, - "cp903": enc2059, - "csIBM903": enc2059, - "csibm903": enc2059, - "IBM904": enc2060, - "ibm904": enc2060, - "cp904": enc2060, - "904": enc2060, - "csIBBM904": enc2060, - "csibbm904": enc2060, - "IBM905": enc2061, - "ibm905": enc2061, - "CP905": enc2061, - "cp905": enc2061, - "ebcdic-cp-tr": enc2061, - "csIBM905": enc2061, - "csibm905": enc2061, - "IBM918": enc2062, - "ibm918": enc2062, - "CP918": enc2062, - "cp918": enc2062, - "ebcdic-cp-ar2": enc2062, - "csIBM918": enc2062, - "csibm918": enc2062, - "IBM1026": enc2063, - "ibm1026": enc2063, - "CP1026": enc2063, - "cp1026": enc2063, - "csIBM1026": enc2063, - "csibm1026": enc2063, - "EBCDIC-AT-DE": enc2064, - "ebcdic-at-de": enc2064, - "csIBMEBCDICATDE": enc2064, - "csibmebcdicatde": enc2064, - "EBCDIC-AT-DE-A": enc2065, - "ebcdic-at-de-a": enc2065, - "csEBCDICATDEA": enc2065, - "csebcdicatdea": enc2065, - "EBCDIC-CA-FR": enc2066, - "ebcdic-ca-fr": enc2066, - "csEBCDICCAFR": enc2066, - "csebcdiccafr": enc2066, - "EBCDIC-DK-NO": enc2067, - "ebcdic-dk-no": enc2067, - "csEBCDICDKNO": enc2067, - "csebcdicdkno": enc2067, - "EBCDIC-DK-NO-A": enc2068, - "ebcdic-dk-no-a": enc2068, - "csEBCDICDKNOA": enc2068, - "csebcdicdknoa": enc2068, - "EBCDIC-FI-SE": enc2069, - "ebcdic-fi-se": enc2069, - "csEBCDICFISE": enc2069, - "csebcdicfise": enc2069, - "EBCDIC-FI-SE-A": enc2070, - "ebcdic-fi-se-a": enc2070, - "csEBCDICFISEA": enc2070, - "csebcdicfisea": enc2070, - "EBCDIC-FR": enc2071, - "ebcdic-fr": enc2071, - "csEBCDICFR": enc2071, - "csebcdicfr": enc2071, - "EBCDIC-IT": enc2072, - "ebcdic-it": enc2072, - "csEBCDICIT": enc2072, - "csebcdicit": enc2072, - "EBCDIC-PT": enc2073, - "ebcdic-pt": enc2073, - "csEBCDICPT": enc2073, - "csebcdicpt": enc2073, - "EBCDIC-ES": enc2074, - "ebcdic-es": enc2074, - "csEBCDICES": enc2074, - "csebcdices": enc2074, - "EBCDIC-ES-A": enc2075, - "ebcdic-es-a": enc2075, - "csEBCDICESA": enc2075, - "csebcdicesa": enc2075, - "EBCDIC-ES-S": enc2076, - "ebcdic-es-s": enc2076, - "csEBCDICESS": enc2076, - "csebcdicess": enc2076, - "EBCDIC-UK": enc2077, - "ebcdic-uk": enc2077, - "csEBCDICUK": enc2077, - "csebcdicuk": enc2077, - "EBCDIC-US": enc2078, - "ebcdic-us": enc2078, - "csEBCDICUS": enc2078, - "csebcdicus": enc2078, - "UNKNOWN-8BIT": enc2079, - "unknown-8bit": enc2079, - "csUnknown8BiT": enc2079, - "csunknown8bit": enc2079, - "MNEMONIC": enc2080, - "mnemonic": enc2080, - "csMnemonic": enc2080, - "csmnemonic": enc2080, - "MNEM": enc2081, - "mnem": enc2081, - "csMnem": enc2081, - "csmnem": enc2081, - "VISCII": enc2082, - "viscii": enc2082, - "csVISCII": enc2082, - "csviscii": enc2082, - "VIQR": enc2083, - "viqr": enc2083, - "csVIQR": enc2083, - "csviqr": enc2083, - "KOI8-R": enc2084, - "koi8-r": enc2084, - "csKOI8R": enc2084, - "cskoi8r": enc2084, - "HZ-GB-2312": enc2085, - "hz-gb-2312": enc2085, - "IBM866": enc2086, - "ibm866": enc2086, - "cp866": enc2086, - "866": enc2086, - "csIBM866": enc2086, - "csibm866": enc2086, - "IBM775": enc2087, - "ibm775": enc2087, - "cp775": enc2087, - "csPC775Baltic": enc2087, - "cspc775baltic": enc2087, - "KOI8-U": enc2088, - "koi8-u": enc2088, - "csKOI8U": enc2088, - "cskoi8u": enc2088, - "IBM00858": enc2089, - "ibm00858": enc2089, - "CCSID00858": enc2089, - "ccsid00858": enc2089, - "CP00858": enc2089, - "cp00858": enc2089, - "PC-Multilingual-850+euro": enc2089, - "pc-multilingual-850+euro": enc2089, - "csIBM00858": enc2089, - "csibm00858": enc2089, - "IBM00924": enc2090, - "ibm00924": enc2090, - "CCSID00924": enc2090, - "ccsid00924": enc2090, - "CP00924": enc2090, - "cp00924": enc2090, - "ebcdic-Latin9--euro": enc2090, - "ebcdic-latin9--euro": enc2090, - "csIBM00924": enc2090, - "csibm00924": enc2090, - "IBM01140": enc2091, - "ibm01140": enc2091, - "CCSID01140": enc2091, - "ccsid01140": enc2091, - "CP01140": enc2091, - "cp01140": enc2091, - "ebcdic-us-37+euro": enc2091, - "csIBM01140": enc2091, - "csibm01140": enc2091, - "IBM01141": enc2092, - "ibm01141": enc2092, - "CCSID01141": enc2092, - "ccsid01141": enc2092, - "CP01141": enc2092, - "cp01141": enc2092, - "ebcdic-de-273+euro": enc2092, - "csIBM01141": enc2092, - "csibm01141": enc2092, - "IBM01142": enc2093, - "ibm01142": enc2093, - "CCSID01142": enc2093, - "ccsid01142": enc2093, - "CP01142": enc2093, - "cp01142": enc2093, - "ebcdic-dk-277+euro": enc2093, - "ebcdic-no-277+euro": enc2093, - "csIBM01142": enc2093, - "csibm01142": enc2093, - "IBM01143": enc2094, - "ibm01143": enc2094, - "CCSID01143": enc2094, - "ccsid01143": enc2094, - "CP01143": enc2094, - "cp01143": enc2094, - "ebcdic-fi-278+euro": enc2094, - "ebcdic-se-278+euro": enc2094, - "csIBM01143": enc2094, - "csibm01143": enc2094, - "IBM01144": enc2095, - "ibm01144": enc2095, - "CCSID01144": enc2095, - "ccsid01144": enc2095, - "CP01144": enc2095, - "cp01144": enc2095, - "ebcdic-it-280+euro": enc2095, - "csIBM01144": enc2095, - "csibm01144": enc2095, - "IBM01145": enc2096, - "ibm01145": enc2096, - "CCSID01145": enc2096, - "ccsid01145": enc2096, - "CP01145": enc2096, - "cp01145": enc2096, - "ebcdic-es-284+euro": enc2096, - "csIBM01145": enc2096, - "csibm01145": enc2096, - "IBM01146": enc2097, - "ibm01146": enc2097, - "CCSID01146": enc2097, - "ccsid01146": enc2097, - "CP01146": enc2097, - "cp01146": enc2097, - "ebcdic-gb-285+euro": enc2097, - "csIBM01146": enc2097, - "csibm01146": enc2097, - "IBM01147": enc2098, - "ibm01147": enc2098, - "CCSID01147": enc2098, - "ccsid01147": enc2098, - "CP01147": enc2098, - "cp01147": enc2098, - "ebcdic-fr-297+euro": enc2098, - "csIBM01147": enc2098, - "csibm01147": enc2098, - "IBM01148": enc2099, - "ibm01148": enc2099, - "CCSID01148": enc2099, - "ccsid01148": enc2099, - "CP01148": enc2099, - "cp01148": enc2099, - "ebcdic-international-500+euro": enc2099, - "csIBM01148": enc2099, - "csibm01148": enc2099, - "IBM01149": enc2100, - "ibm01149": enc2100, - "CCSID01149": enc2100, - "ccsid01149": enc2100, - "CP01149": enc2100, - "cp01149": enc2100, - "ebcdic-is-871+euro": enc2100, - "csIBM01149": enc2100, - "csibm01149": enc2100, - "Big5-HKSCS": enc2101, - "big5-hkscs": enc2101, - "csBig5HKSCS": enc2101, - "csbig5hkscs": enc2101, - "IBM1047": enc2102, - "ibm1047": enc2102, - "IBM-1047": enc2102, - "ibm-1047": enc2102, - "csIBM1047": enc2102, - "csibm1047": enc2102, - "PTCP154": enc2103, - "ptcp154": enc2103, - "csPTCP154": enc2103, - "csptcp154": enc2103, - "PT154": enc2103, - "pt154": enc2103, - "CP154": enc2103, - "cp154": enc2103, - "Cyrillic-Asian": enc2103, - "cyrillic-asian": enc2103, - "Amiga-1251": enc2104, - "amiga-1251": enc2104, - "Ami1251": enc2104, - "ami1251": enc2104, - "Amiga1251": enc2104, - "amiga1251": enc2104, - "Ami-1251": enc2104, - "ami-1251": enc2104, - "csAmiga1251\n(Aliases": enc2104, - "csamiga1251\n(aliases": enc2104, - "KOI7-switched": enc2105, - "koi7-switched": enc2105, - "csKOI7switched": enc2105, - "cskoi7switched": enc2105, - "BRF": enc2106, - "brf": enc2106, - "csBRF": enc2106, - "csbrf": enc2106, - "TSCII": enc2107, - "tscii": enc2107, - "csTSCII": enc2107, - "cstscii": enc2107, - "CP51932": enc2108, - "cp51932": enc2108, - "csCP51932": enc2108, - "cscp51932": enc2108, - "windows-874": enc2109, - "cswindows874": enc2109, - "windows-1250": enc2250, - "cswindows1250": enc2250, - "windows-1251": enc2251, - "cswindows1251": enc2251, - "windows-1252": enc2252, - "cswindows1252": enc2252, - "windows-1253": enc2253, - "cswindows1253": enc2253, - "windows-1254": enc2254, - "cswindows1254": enc2254, - "windows-1255": enc2255, - "cswindows1255": enc2255, - "windows-1256": enc2256, - "cswindows1256": enc2256, - "windows-1257": enc2257, - "cswindows1257": enc2257, - "windows-1258": enc2258, - "cswindows1258": enc2258, - "TIS-620": enc2259, - "tis-620": enc2259, - "csTIS620": enc2259, - "cstis620": enc2259, - "ISO-8859-11": enc2259, - "iso-8859-11": enc2259, - "CP50220": enc2260, - "cp50220": enc2260, - "csCP50220": enc2260, - "cscp50220": enc2260, + "Extended_UNIX_Code_Fixed_Width_for_Japanese": enc19, + "extended_unix_code_fixed_width_for_japanese": enc19, + "csEUCFixWidJapanese": enc19, + "cseucfixwidjapanese": enc19, + "BS_4730": enc20, + "bs_4730": enc20, + "iso-ir-4": enc20, + "ISO646-GB": enc20, + "iso646-gb": enc20, + "gb": enc20, + "uk": enc20, + "csISO4UnitedKingdom": enc20, + "csiso4unitedkingdom": enc20, + "SEN_850200_C": enc21, + "sen_850200_c": enc21, + "iso-ir-11": enc21, + "ISO646-SE2": enc21, + "iso646-se2": enc21, + "se2": enc21, + "csISO11SwedishForNames": enc21, + "csiso11swedishfornames": enc21, + "IT": enc22, + "it": enc22, + "iso-ir-15": enc22, + "ISO646-IT": enc22, + "iso646-it": enc22, + "csISO15Italian": enc22, + "csiso15italian": enc22, + "ES": enc23, + "es": enc23, + "iso-ir-17": enc23, + "ISO646-ES": enc23, + "iso646-es": enc23, + "csISO17Spanish": enc23, + "csiso17spanish": enc23, + "DIN_66003": enc24, + "din_66003": enc24, + "iso-ir-21": enc24, + "de": enc24, + "ISO646-DE": enc24, + "iso646-de": enc24, + "csISO21German": enc24, + "csiso21german": enc24, + "NS_4551-1": enc25, + "ns_4551-1": enc25, + "iso-ir-60": enc25, + "ISO646-NO": enc25, + "iso646-no": enc25, + "no": enc25, + "csISO60DanishNorwegian": enc25, + "csiso60danishnorwegian": enc25, + "csISO60Norwegian1": enc25, + "csiso60norwegian1": enc25, + "NF_Z_62-010": enc26, + "nf_z_62-010": enc26, + "iso-ir-69": enc26, + "ISO646-FR": enc26, + "iso646-fr": enc26, + "fr": enc26, + "csISO69French": enc26, + "csiso69french": enc26, + "ISO-10646-UTF-1": enc27, + "iso-10646-utf-1": enc27, + "csISO10646UTF1": enc27, + "csiso10646utf1": enc27, + "ISO_646.basic:1983": enc28, + "iso_646.basic:1983": enc28, + "ref": enc28, + "csISO646basic1983": enc28, + "csiso646basic1983": enc28, + "INVARIANT": enc29, + "invariant": enc29, + "csINVARIANT": enc29, + "csinvariant": enc29, + "ISO_646.irv:1983": enc30, + "iso_646.irv:1983": enc30, + "iso-ir-2": enc30, + "irv": enc30, + "csISO2IntlRefVersion": enc30, + "csiso2intlrefversion": enc30, + "NATS-SEFI": enc31, + "nats-sefi": enc31, + "iso-ir-8-1": enc31, + "csNATSSEFI": enc31, + "csnatssefi": enc31, + "NATS-SEFI-ADD": enc32, + "nats-sefi-add": enc32, + "iso-ir-8-2": enc32, + "csNATSSEFIADD": enc32, + "csnatssefiadd": enc32, + "NATS-DANO": enc33, + "nats-dano": enc33, + "iso-ir-9-1": enc33, + "csNATSDANO": enc33, + "csnatsdano": enc33, + "NATS-DANO-ADD": enc34, + "nats-dano-add": enc34, + "iso-ir-9-2": enc34, + "csNATSDANOADD": enc34, + "csnatsdanoadd": enc34, + "SEN_850200_B": enc35, + "sen_850200_b": enc35, + "iso-ir-10": enc35, + "FI": enc35, + "fi": enc35, + "ISO646-FI": enc35, + "iso646-fi": enc35, + "ISO646-SE": enc35, + "iso646-se": enc35, + "se": enc35, + "csISO10Swedish": enc35, + "csiso10swedish": enc35, + "KS_C_5601-1987": enc36, + "ks_c_5601-1987": enc36, + "iso-ir-149": enc36, + "KS_C_5601-1989": enc36, + "ks_c_5601-1989": enc36, + "KSC_5601": enc36, + "ksc_5601": enc36, + "korean": enc36, + "csKSC56011987": enc36, + "csksc56011987": enc36, + "ISO-2022-KR": enc37, + "iso-2022-kr": enc37, + "csISO2022KR": enc37, + "csiso2022kr": enc37, + "EUC-KR": enc38, + "euc-kr": enc38, + "csEUCKR": enc38, + "cseuckr": enc38, + "ISO-2022-JP": enc39, + "iso-2022-jp": enc39, + "csISO2022JP": enc39, + "csiso2022jp": enc39, + "ISO-2022-JP-2": enc40, + "iso-2022-jp-2": enc40, + "csISO2022JP2": enc40, + "csiso2022jp2": enc40, + "JIS_C6220-1969-jp": enc41, + "jis_c6220-1969-jp": enc41, + "JIS_C6220-1969": enc41, + "jis_c6220-1969": enc41, + "iso-ir-13": enc41, + "katakana": enc41, + "x0201-7": enc41, + "csISO13JISC6220jp": enc41, + "csiso13jisc6220jp": enc41, + "JIS_C6220-1969-ro": enc42, + "jis_c6220-1969-ro": enc42, + "iso-ir-14": enc42, + "jp": enc42, + "ISO646-JP": enc42, + "iso646-jp": enc42, + "csISO14JISC6220ro": enc42, + "csiso14jisc6220ro": enc42, + "PT": enc43, + "pt": enc43, + "iso-ir-16": enc43, + "ISO646-PT": enc43, + "iso646-pt": enc43, + "csISO16Portuguese": enc43, + "csiso16portuguese": enc43, + "greek7-old": enc44, + "iso-ir-18": enc44, + "csISO18Greek7Old": enc44, + "csiso18greek7old": enc44, + "latin-greek": enc45, + "iso-ir-19": enc45, + "csISO19LatinGreek": enc45, + "csiso19latingreek": enc45, + "NF_Z_62-010_(1973)": enc46, + "nf_z_62-010_(1973)": enc46, + "iso-ir-25": enc46, + "ISO646-FR1": enc46, + "iso646-fr1": enc46, + "csISO25French": enc46, + "csiso25french": enc46, + "Latin-greek-1": enc47, + "latin-greek-1": enc47, + "iso-ir-27": enc47, + "csISO27LatinGreek1": enc47, + "csiso27latingreek1": enc47, + "ISO_5427": enc48, + "iso_5427": enc48, + "iso-ir-37": enc48, + "csISO5427Cyrillic": enc48, + "csiso5427cyrillic": enc48, + "JIS_C6226-1978": enc49, + "jis_c6226-1978": enc49, + "iso-ir-42": enc49, + "csISO42JISC62261978": enc49, + "csiso42jisc62261978": enc49, + "BS_viewdata": enc50, + "bs_viewdata": enc50, + "iso-ir-47": enc50, + "csISO47BSViewdata": enc50, + "csiso47bsviewdata": enc50, + "INIS": enc51, + "inis": enc51, + "iso-ir-49": enc51, + "csISO49INIS": enc51, + "csiso49inis": enc51, + "INIS-8": enc52, + "inis-8": enc52, + "iso-ir-50": enc52, + "csISO50INIS8": enc52, + "csiso50inis8": enc52, + "INIS-cyrillic": enc53, + "inis-cyrillic": enc53, + "iso-ir-51": enc53, + "csISO51INISCyrillic": enc53, + "csiso51iniscyrillic": enc53, + "ISO_5427:1981": enc54, + "iso_5427:1981": enc54, + "iso-ir-54": enc54, + "ISO5427Cyrillic1981": enc54, + "iso5427cyrillic1981": enc54, + "csISO54271981": enc54, + "csiso54271981": enc54, + "ISO_5428:1980": enc55, + "iso_5428:1980": enc55, + "iso-ir-55": enc55, + "csISO5428Greek": enc55, + "csiso5428greek": enc55, + "GB_1988-80": enc56, + "gb_1988-80": enc56, + "iso-ir-57": enc56, + "cn": enc56, + "ISO646-CN": enc56, + "iso646-cn": enc56, + "csISO57GB1988": enc56, + "csiso57gb1988": enc56, + "GB_2312-80": enc57, + "gb_2312-80": enc57, + "iso-ir-58": enc57, + "chinese": enc57, + "csISO58GB231280": enc57, + "csiso58gb231280": enc57, + "NS_4551-2": enc58, + "ns_4551-2": enc58, + "ISO646-NO2": enc58, + "iso646-no2": enc58, + "iso-ir-61": enc58, + "no2": enc58, + "csISO61Norwegian2": enc58, + "csiso61norwegian2": enc58, + "videotex-suppl": enc59, + "iso-ir-70": enc59, + "csISO70VideotexSupp1": enc59, + "csiso70videotexsupp1": enc59, + "PT2": enc60, + "pt2": enc60, + "iso-ir-84": enc60, + "ISO646-PT2": enc60, + "iso646-pt2": enc60, + "csISO84Portuguese2": enc60, + "csiso84portuguese2": enc60, + "ES2": enc61, + "es2": enc61, + "iso-ir-85": enc61, + "ISO646-ES2": enc61, + "iso646-es2": enc61, + "csISO85Spanish2": enc61, + "csiso85spanish2": enc61, + "MSZ_7795.3": enc62, + "msz_7795.3": enc62, + "iso-ir-86": enc62, + "ISO646-HU": enc62, + "iso646-hu": enc62, + "hu": enc62, + "csISO86Hungarian": enc62, + "csiso86hungarian": enc62, + "JIS_C6226-1983": enc63, + "jis_c6226-1983": enc63, + "iso-ir-87": enc63, + "x0208": enc63, + "JIS_X0208-1983": enc63, + "jis_x0208-1983": enc63, + "csISO87JISX0208": enc63, + "csiso87jisx0208": enc63, + "greek7": enc64, + "iso-ir-88": enc64, + "csISO88Greek7": enc64, + "csiso88greek7": enc64, + "ASMO_449": enc65, + "asmo_449": enc65, + "ISO_9036": enc65, + "iso_9036": enc65, + "arabic7": enc65, + "iso-ir-89": enc65, + "csISO89ASMO449": enc65, + "csiso89asmo449": enc65, + "iso-ir-90": enc66, + "csISO90": enc66, + "csiso90": enc66, + "JIS_C6229-1984-a": enc67, + "jis_c6229-1984-a": enc67, + "iso-ir-91": enc67, + "jp-ocr-a": enc67, + "csISO91JISC62291984a": enc67, + "csiso91jisc62291984a": enc67, + "JIS_C6229-1984-b": enc68, + "jis_c6229-1984-b": enc68, + "iso-ir-92": enc68, + "ISO646-JP-OCR-B": enc68, + "iso646-jp-ocr-b": enc68, + "jp-ocr-b": enc68, + "csISO92JISC62991984b": enc68, + "csiso92jisc62991984b": enc68, + "JIS_C6229-1984-b-add": enc69, + "jis_c6229-1984-b-add": enc69, + "iso-ir-93": enc69, + "jp-ocr-b-add": enc69, + "csISO93JIS62291984badd": enc69, + "csiso93jis62291984badd": enc69, + "JIS_C6229-1984-hand": enc70, + "jis_c6229-1984-hand": enc70, + "iso-ir-94": enc70, + "jp-ocr-hand": enc70, + "csISO94JIS62291984hand": enc70, + "csiso94jis62291984hand": enc70, + "JIS_C6229-1984-hand-add": enc71, + "jis_c6229-1984-hand-add": enc71, + "iso-ir-95": enc71, + "jp-ocr-hand-add": enc71, + "csISO95JIS62291984handadd": enc71, + "csiso95jis62291984handadd": enc71, + "JIS_C6229-1984-kana": enc72, + "jis_c6229-1984-kana": enc72, + "iso-ir-96": enc72, + "csISO96JISC62291984kana": enc72, + "csiso96jisc62291984kana": enc72, + "ISO_2033-1983": enc73, + "iso_2033-1983": enc73, + "iso-ir-98": enc73, + "e13b": enc73, + "csISO2033": enc73, + "csiso2033": enc73, + "ANSI_X3.110-1983": enc74, + "ansi_x3.110-1983": enc74, + "iso-ir-99": enc74, + "CSA_T500-1983": enc74, + "csa_t500-1983": enc74, + "NAPLPS": enc74, + "naplps": enc74, + "csISO99NAPLPS": enc74, + "csiso99naplps": enc74, + "T.61-7bit": enc75, + "t.61-7bit": enc75, + "iso-ir-102": enc75, + "csISO102T617bit": enc75, + "csiso102t617bit": enc75, + "T.61-8bit": enc76, + "t.61-8bit": enc76, + "T.61": enc76, + "t.61": enc76, + "iso-ir-103": enc76, + "csISO103T618bit": enc76, + "csiso103t618bit": enc76, + "ECMA-cyrillic": enc77, + "ecma-cyrillic": enc77, + "iso-ir-111": enc77, + "KOI8-E": enc77, + "koi8-e": enc77, + "csISO111ECMACyrillic": enc77, + "csiso111ecmacyrillic": enc77, + "CSA_Z243.4-1985-1": enc78, + "csa_z243.4-1985-1": enc78, + "iso-ir-121": enc78, + "ISO646-CA": enc78, + "iso646-ca": enc78, + "csa7-1": enc78, + "csa71": enc78, + "ca": enc78, + "csISO121Canadian1": enc78, + "csiso121canadian1": enc78, + "CSA_Z243.4-1985-2": enc79, + "csa_z243.4-1985-2": enc79, + "iso-ir-122": enc79, + "ISO646-CA2": enc79, + "iso646-ca2": enc79, + "csa7-2": enc79, + "csa72": enc79, + "csISO122Canadian2": enc79, + "csiso122canadian2": enc79, + "CSA_Z243.4-1985-gr": enc80, + "csa_z243.4-1985-gr": enc80, + "iso-ir-123": enc80, + "csISO123CSAZ24341985gr": enc80, + "csiso123csaz24341985gr": enc80, + "ISO_8859-6-E": enc81, + "iso_8859-6-e": enc81, + "csISO88596E": enc81, + "csiso88596e": enc81, + "ISO-8859-6-E": enc81, + "iso-8859-6-e": enc81, + "ISO_8859-6-I": enc82, + "iso_8859-6-i": enc82, + "csISO88596I": enc82, + "csiso88596i": enc82, + "ISO-8859-6-I": enc82, + "iso-8859-6-i": enc82, + "T.101-G2": enc83, + "t.101-g2": enc83, + "iso-ir-128": enc83, + "csISO128T101G2": enc83, + "csiso128t101g2": enc83, + "ISO_8859-8-E": enc84, + "iso_8859-8-e": enc84, + "csISO88598E": enc84, + "csiso88598e": enc84, + "ISO-8859-8-E": enc84, + "iso-8859-8-e": enc84, + "ISO_8859-8-I": enc85, + "iso_8859-8-i": enc85, + "csISO88598I": enc85, + "csiso88598i": enc85, + "ISO-8859-8-I": enc85, + "iso-8859-8-i": enc85, + "CSN_369103": enc86, + "csn_369103": enc86, + "iso-ir-139": enc86, + "csISO139CSN369103": enc86, + "csiso139csn369103": enc86, + "JUS_I.B1.002": enc87, + "jus_i.b1.002": enc87, + "iso-ir-141": enc87, + "ISO646-YU": enc87, + "iso646-yu": enc87, + "js": enc87, + "yu": enc87, + "csISO141JUSIB1002": enc87, + "csiso141jusib1002": enc87, + "IEC_P27-1": enc88, + "iec_p27-1": enc88, + "iso-ir-143": enc88, + "csISO143IECP271": enc88, + "csiso143iecp271": enc88, + "JUS_I.B1.003-serb": enc89, + "jus_i.b1.003-serb": enc89, + "iso-ir-146": enc89, + "serbian": enc89, + "csISO146Serbian": enc89, + "csiso146serbian": enc89, + "JUS_I.B1.003-mac": enc90, + "jus_i.b1.003-mac": enc90, + "macedonian": enc90, + "iso-ir-147": enc90, + "csISO147Macedonian": enc90, + "csiso147macedonian": enc90, + "greek-ccitt": enc91, + "iso-ir-150": enc91, + "csISO150": enc91, + "csiso150": enc91, + "csISO150GreekCCITT": enc91, + "csiso150greekccitt": enc91, + "NC_NC00-10:81": enc92, + "nc_nc00-10:81": enc92, + "cuba": enc92, + "iso-ir-151": enc92, + "ISO646-CU": enc92, + "iso646-cu": enc92, + "csISO151Cuba": enc92, + "csiso151cuba": enc92, + "ISO_6937-2-25": enc93, + "iso_6937-2-25": enc93, + "iso-ir-152": enc93, + "csISO6937Add": enc93, + "csiso6937add": enc93, + "GOST_19768-74": enc94, + "gost_19768-74": enc94, + "ST_SEV_358-88": enc94, + "st_sev_358-88": enc94, + "iso-ir-153": enc94, + "csISO153GOST1976874": enc94, + "csiso153gost1976874": enc94, + "ISO_8859-supp": enc95, + "iso_8859-supp": enc95, + "iso-ir-154": enc95, + "latin1-2-5": enc95, + "csISO8859Supp": enc95, + "csiso8859supp": enc95, + "ISO_10367-box": enc96, + "iso_10367-box": enc96, + "iso-ir-155": enc96, + "csISO10367Box": enc96, + "csiso10367box": enc96, + "latin-lap": enc97, + "lap": enc97, + "iso-ir-158": enc97, + "csISO158Lap": enc97, + "csiso158lap": enc97, + "JIS_X0212-1990": enc98, + "jis_x0212-1990": enc98, + "x0212": enc98, + "iso-ir-159": enc98, + "csISO159JISX02121990": enc98, + "csiso159jisx02121990": enc98, + "DS_2089": enc99, + "ds_2089": enc99, + "DS2089": enc99, + "ds2089": enc99, + "ISO646-DK": enc99, + "iso646-dk": enc99, + "dk": enc99, + "csISO646Danish": enc99, + "csiso646danish": enc99, + "us-dk": enc100, + "csUSDK": enc100, + "csusdk": enc100, + "dk-us": enc101, + "csDKUS": enc101, + "csdkus": enc101, + "KSC5636": enc102, + "ksc5636": enc102, + "ISO646-KR": enc102, + "iso646-kr": enc102, + "csKSC5636": enc102, + "csksc5636": enc102, + "UNICODE-1-1-UTF-7": enc103, + "unicode-1-1-utf-7": enc103, + "csUnicode11UTF7": enc103, + "csunicode11utf7": enc103, + "ISO-2022-CN": enc104, + "iso-2022-cn": enc104, + "csISO2022CN": enc104, + "csiso2022cn": enc104, + "ISO-2022-CN-EXT": enc105, + "iso-2022-cn-ext": enc105, + "csISO2022CNEXT": enc105, + "csiso2022cnext": enc105, + "UTF-8": enc106, + "utf-8": enc106, + "csUTF8": enc106, + "csutf8": enc106, + "ISO-8859-13": enc109, + "iso-8859-13": enc109, + "csISO885913": enc109, + "csiso885913": enc109, + "ISO-8859-14": enc110, + "iso-8859-14": enc110, + "iso-ir-199": enc110, + "ISO_8859-14:1998": enc110, + "iso_8859-14:1998": enc110, + "ISO_8859-14": enc110, + "iso_8859-14": enc110, + "latin8": enc110, + "iso-celtic": enc110, + "l8": enc110, + "csISO885914": enc110, + "csiso885914": enc110, + "ISO-8859-15": enc111, + "iso-8859-15": enc111, + "ISO_8859-15": enc111, + "iso_8859-15": enc111, + "Latin-9": enc111, + "latin-9": enc111, + "csISO885915": enc111, + "csiso885915": enc111, + "ISO-8859-16": enc112, + "iso-8859-16": enc112, + "iso-ir-226": enc112, + "ISO_8859-16:2001": enc112, + "iso_8859-16:2001": enc112, + "ISO_8859-16": enc112, + "iso_8859-16": enc112, + "latin10": enc112, + "l10": enc112, + "csISO885916": enc112, + "csiso885916": enc112, + "GBK": enc113, + "gbk": enc113, + "CP936": enc113, + "cp936": enc113, + "MS936": enc113, + "ms936": enc113, + "windows-936": enc113, + "csGBK": enc113, + "csgbk": enc113, + "GB18030": enc114, + "gb18030": enc114, + "csGB18030": enc114, + "csgb18030": enc114, + "OSD_EBCDIC_DF04_15": enc115, + "osd_ebcdic_df04_15": enc115, + "csOSDEBCDICDF0415": enc115, + "csosdebcdicdf0415": enc115, + "OSD_EBCDIC_DF03_IRV": enc116, + "osd_ebcdic_df03_irv": enc116, + "csOSDEBCDICDF03IRV": enc116, + "csosdebcdicdf03irv": enc116, + "OSD_EBCDIC_DF04_1": enc117, + "osd_ebcdic_df04_1": enc117, + "csOSDEBCDICDF041": enc117, + "csosdebcdicdf041": enc117, + "ISO-11548-1": enc118, + "iso-11548-1": enc118, + "ISO_11548-1": enc118, + "iso_11548-1": enc118, + "ISO_TR_11548-1": enc118, + "iso_tr_11548-1": enc118, + "csISO115481": enc118, + "csiso115481": enc118, + "KZ-1048": enc119, + "kz-1048": enc119, + "STRK1048-2002": enc119, + "strk1048-2002": enc119, + "RK1048": enc119, + "rk1048": enc119, + "csKZ1048": enc119, + "cskz1048": enc119, + "ISO-10646-UCS-2": enc1000, + "iso-10646-ucs-2": enc1000, + "csUnicode": enc1000, + "csunicode": enc1000, + "ISO-10646-UCS-4": enc1001, + "iso-10646-ucs-4": enc1001, + "csUCS4": enc1001, + "csucs4": enc1001, + "ISO-10646-UCS-Basic": enc1002, + "iso-10646-ucs-basic": enc1002, + "csUnicodeASCII": enc1002, + "csunicodeascii": enc1002, + "ISO-10646-Unicode-Latin1": enc1003, + "iso-10646-unicode-latin1": enc1003, + "csUnicodeLatin1": enc1003, + "csunicodelatin1": enc1003, + "ISO-10646": enc1003, + "iso-10646": enc1003, + "ISO-10646-J-1": enc1004, + "iso-10646-j-1": enc1004, + "csUnicodeJapanese": enc1004, + "csunicodejapanese": enc1004, + "ISO-Unicode-IBM-1261": enc1005, + "iso-unicode-ibm-1261": enc1005, + "csUnicodeIBM1261": enc1005, + "csunicodeibm1261": enc1005, + "ISO-Unicode-IBM-1268": enc1006, + "iso-unicode-ibm-1268": enc1006, + "csUnicodeIBM1268": enc1006, + "csunicodeibm1268": enc1006, + "ISO-Unicode-IBM-1276": enc1007, + "iso-unicode-ibm-1276": enc1007, + "csUnicodeIBM1276": enc1007, + "csunicodeibm1276": enc1007, + "ISO-Unicode-IBM-1264": enc1008, + "iso-unicode-ibm-1264": enc1008, + "csUnicodeIBM1264": enc1008, + "csunicodeibm1264": enc1008, + "ISO-Unicode-IBM-1265": enc1009, + "iso-unicode-ibm-1265": enc1009, + "csUnicodeIBM1265": enc1009, + "csunicodeibm1265": enc1009, + "UNICODE-1-1": enc1010, + "unicode-1-1": enc1010, + "csUnicode11": enc1010, + "csunicode11": enc1010, + "SCSU": enc1011, + "scsu": enc1011, + "csSCSU": enc1011, + "csscsu": enc1011, + "UTF-7": enc1012, + "utf-7": enc1012, + "csUTF7": enc1012, + "csutf7": enc1012, + "UTF-16BE": enc1013, + "utf-16be": enc1013, + "csUTF16BE": enc1013, + "csutf16be": enc1013, + "UTF-16LE": enc1014, + "utf-16le": enc1014, + "csUTF16LE": enc1014, + "csutf16le": enc1014, + "UTF-16": enc1015, + "utf-16": enc1015, + "csUTF16": enc1015, + "csutf16": enc1015, + "CESU-8": enc1016, + "cesu-8": enc1016, + "csCESU8": enc1016, + "cscesu8": enc1016, + "csCESU-8": enc1016, + "cscesu-8": enc1016, + "UTF-32": enc1017, + "utf-32": enc1017, + "csUTF32": enc1017, + "csutf32": enc1017, + "UTF-32BE": enc1018, + "utf-32be": enc1018, + "csUTF32BE": enc1018, + "csutf32be": enc1018, + "UTF-32LE": enc1019, + "utf-32le": enc1019, + "csUTF32LE": enc1019, + "csutf32le": enc1019, + "BOCU-1": enc1020, + "bocu-1": enc1020, + "csBOCU1": enc1020, + "csbocu1": enc1020, + "csBOCU-1": enc1020, + "csbocu-1": enc1020, + "ISO-8859-1-Windows-3.0-Latin-1": enc2000, + "iso-8859-1-windows-3.0-latin-1": enc2000, + "csWindows30Latin1": enc2000, + "cswindows30latin1": enc2000, + "ISO-8859-1-Windows-3.1-Latin-1": enc2001, + "iso-8859-1-windows-3.1-latin-1": enc2001, + "csWindows31Latin1": enc2001, + "cswindows31latin1": enc2001, + "ISO-8859-2-Windows-Latin-2": enc2002, + "iso-8859-2-windows-latin-2": enc2002, + "csWindows31Latin2": enc2002, + "cswindows31latin2": enc2002, + "ISO-8859-9-Windows-Latin-5": enc2003, + "iso-8859-9-windows-latin-5": enc2003, + "csWindows31Latin5": enc2003, + "cswindows31latin5": enc2003, + "hp-roman8": enc2004, + "roman8": enc2004, + "r8": enc2004, + "csHPRoman8": enc2004, + "cshproman8": enc2004, + "Adobe-Standard-Encoding": enc2005, + "adobe-standard-encoding": enc2005, + "csAdobeStandardEncoding": enc2005, + "csadobestandardencoding": enc2005, + "Ventura-US": enc2006, + "ventura-us": enc2006, + "csVenturaUS": enc2006, + "csventuraus": enc2006, + "Ventura-International": enc2007, + "ventura-international": enc2007, + "csVenturaInternational": enc2007, + "csventurainternational": enc2007, + "DEC-MCS": enc2008, + "dec-mcs": enc2008, + "dec": enc2008, + "csDECMCS": enc2008, + "csdecmcs": enc2008, + "IBM850": enc2009, + "ibm850": enc2009, + "cp850": enc2009, + "850": enc2009, + "csPC850Multilingual": enc2009, + "cspc850multilingual": enc2009, + "PC8-Danish-Norwegian": enc2012, + "pc8-danish-norwegian": enc2012, + "csPC8DanishNorwegian": enc2012, + "cspc8danishnorwegian": enc2012, + "IBM862": enc2013, + "ibm862": enc2013, + "cp862": enc2013, + "862": enc2013, + "csPC862LatinHebrew": enc2013, + "cspc862latinhebrew": enc2013, + "PC8-Turkish": enc2014, + "pc8-turkish": enc2014, + "csPC8Turkish": enc2014, + "cspc8turkish": enc2014, + "IBM-Symbols": enc2015, + "ibm-symbols": enc2015, + "csIBMSymbols": enc2015, + "csibmsymbols": enc2015, + "IBM-Thai": enc2016, + "ibm-thai": enc2016, + "csIBMThai": enc2016, + "csibmthai": enc2016, + "HP-Legal": enc2017, + "hp-legal": enc2017, + "csHPLegal": enc2017, + "cshplegal": enc2017, + "HP-Pi-font": enc2018, + "hp-pi-font": enc2018, + "csHPPiFont": enc2018, + "cshppifont": enc2018, + "HP-Math8": enc2019, + "hp-math8": enc2019, + "csHPMath8": enc2019, + "cshpmath8": enc2019, + "Adobe-Symbol-Encoding": enc2020, + "adobe-symbol-encoding": enc2020, + "csHPPSMath": enc2020, + "cshppsmath": enc2020, + "HP-DeskTop": enc2021, + "hp-desktop": enc2021, + "csHPDesktop": enc2021, + "cshpdesktop": enc2021, + "Ventura-Math": enc2022, + "ventura-math": enc2022, + "csVenturaMath": enc2022, + "csventuramath": enc2022, + "Microsoft-Publishing": enc2023, + "microsoft-publishing": enc2023, + "csMicrosoftPublishing": enc2023, + "csmicrosoftpublishing": enc2023, + "Windows-31J": enc2024, + "windows-31j": enc2024, + "csWindows31J": enc2024, + "cswindows31j": enc2024, + "GB2312": enc2025, + "gb2312": enc2025, + "csGB2312": enc2025, + "csgb2312": enc2025, + "Big5": enc2026, + "big5": enc2026, + "csBig5": enc2026, + "csbig5": enc2026, + "macintosh": enc2027, + "mac": enc2027, + "csMacintosh": enc2027, + "csmacintosh": enc2027, + "IBM037": enc2028, + "ibm037": enc2028, + "cp037": enc2028, + "ebcdic-cp-us": enc2028, + "ebcdic-cp-ca": enc2028, + "ebcdic-cp-wt": enc2028, + "ebcdic-cp-nl": enc2028, + "csIBM037": enc2028, + "csibm037": enc2028, + "IBM038": enc2029, + "ibm038": enc2029, + "EBCDIC-INT": enc2029, + "ebcdic-int": enc2029, + "cp038": enc2029, + "csIBM038": enc2029, + "csibm038": enc2029, + "IBM273": enc2030, + "ibm273": enc2030, + "CP273": enc2030, + "cp273": enc2030, + "csIBM273": enc2030, + "csibm273": enc2030, + "IBM274": enc2031, + "ibm274": enc2031, + "EBCDIC-BE": enc2031, + "ebcdic-be": enc2031, + "CP274": enc2031, + "cp274": enc2031, + "csIBM274": enc2031, + "csibm274": enc2031, + "IBM275": enc2032, + "ibm275": enc2032, + "EBCDIC-BR": enc2032, + "ebcdic-br": enc2032, + "cp275": enc2032, + "csIBM275": enc2032, + "csibm275": enc2032, + "IBM277": enc2033, + "ibm277": enc2033, + "EBCDIC-CP-DK": enc2033, + "ebcdic-cp-dk": enc2033, + "EBCDIC-CP-NO": enc2033, + "ebcdic-cp-no": enc2033, + "csIBM277": enc2033, + "csibm277": enc2033, + "IBM278": enc2034, + "ibm278": enc2034, + "CP278": enc2034, + "cp278": enc2034, + "ebcdic-cp-fi": enc2034, + "ebcdic-cp-se": enc2034, + "csIBM278": enc2034, + "csibm278": enc2034, + "IBM280": enc2035, + "ibm280": enc2035, + "CP280": enc2035, + "cp280": enc2035, + "ebcdic-cp-it": enc2035, + "csIBM280": enc2035, + "csibm280": enc2035, + "IBM281": enc2036, + "ibm281": enc2036, + "EBCDIC-JP-E": enc2036, + "ebcdic-jp-e": enc2036, + "cp281": enc2036, + "csIBM281": enc2036, + "csibm281": enc2036, + "IBM284": enc2037, + "ibm284": enc2037, + "CP284": enc2037, + "cp284": enc2037, + "ebcdic-cp-es": enc2037, + "csIBM284": enc2037, + "csibm284": enc2037, + "IBM285": enc2038, + "ibm285": enc2038, + "CP285": enc2038, + "cp285": enc2038, + "ebcdic-cp-gb": enc2038, + "csIBM285": enc2038, + "csibm285": enc2038, + "IBM290": enc2039, + "ibm290": enc2039, + "cp290": enc2039, + "EBCDIC-JP-kana": enc2039, + "ebcdic-jp-kana": enc2039, + "csIBM290": enc2039, + "csibm290": enc2039, + "IBM297": enc2040, + "ibm297": enc2040, + "cp297": enc2040, + "ebcdic-cp-fr": enc2040, + "csIBM297": enc2040, + "csibm297": enc2040, + "IBM420": enc2041, + "ibm420": enc2041, + "cp420": enc2041, + "ebcdic-cp-ar1": enc2041, + "csIBM420": enc2041, + "csibm420": enc2041, + "IBM423": enc2042, + "ibm423": enc2042, + "cp423": enc2042, + "ebcdic-cp-gr": enc2042, + "csIBM423": enc2042, + "csibm423": enc2042, + "IBM424": enc2043, + "ibm424": enc2043, + "cp424": enc2043, + "ebcdic-cp-he": enc2043, + "csIBM424": enc2043, + "csibm424": enc2043, + "IBM437": enc2011, + "ibm437": enc2011, + "cp437": enc2011, + "437": enc2011, + "csPC8CodePage437": enc2011, + "cspc8codepage437": enc2011, + "IBM500": enc2044, + "ibm500": enc2044, + "CP500": enc2044, + "cp500": enc2044, + "ebcdic-cp-be": enc2044, + "ebcdic-cp-ch": enc2044, + "csIBM500": enc2044, + "csibm500": enc2044, + "IBM851": enc2045, + "ibm851": enc2045, + "cp851": enc2045, + "851": enc2045, + "csIBM851": enc2045, + "csibm851": enc2045, + "IBM852": enc2010, + "ibm852": enc2010, + "cp852": enc2010, + "852": enc2010, + "csPCp852": enc2010, + "cspcp852": enc2010, + "IBM855": enc2046, + "ibm855": enc2046, + "cp855": enc2046, + "855": enc2046, + "csIBM855": enc2046, + "csibm855": enc2046, + "IBM857": enc2047, + "ibm857": enc2047, + "cp857": enc2047, + "857": enc2047, + "csIBM857": enc2047, + "csibm857": enc2047, + "IBM860": enc2048, + "ibm860": enc2048, + "cp860": enc2048, + "860": enc2048, + "csIBM860": enc2048, + "csibm860": enc2048, + "IBM861": enc2049, + "ibm861": enc2049, + "cp861": enc2049, + "861": enc2049, + "cp-is": enc2049, + "csIBM861": enc2049, + "csibm861": enc2049, + "IBM863": enc2050, + "ibm863": enc2050, + "cp863": enc2050, + "863": enc2050, + "csIBM863": enc2050, + "csibm863": enc2050, + "IBM864": enc2051, + "ibm864": enc2051, + "cp864": enc2051, + "csIBM864": enc2051, + "csibm864": enc2051, + "IBM865": enc2052, + "ibm865": enc2052, + "cp865": enc2052, + "865": enc2052, + "csIBM865": enc2052, + "csibm865": enc2052, + "IBM868": enc2053, + "ibm868": enc2053, + "CP868": enc2053, + "cp868": enc2053, + "cp-ar": enc2053, + "csIBM868": enc2053, + "csibm868": enc2053, + "IBM869": enc2054, + "ibm869": enc2054, + "cp869": enc2054, + "869": enc2054, + "cp-gr": enc2054, + "csIBM869": enc2054, + "csibm869": enc2054, + "IBM870": enc2055, + "ibm870": enc2055, + "CP870": enc2055, + "cp870": enc2055, + "ebcdic-cp-roece": enc2055, + "ebcdic-cp-yu": enc2055, + "csIBM870": enc2055, + "csibm870": enc2055, + "IBM871": enc2056, + "ibm871": enc2056, + "CP871": enc2056, + "cp871": enc2056, + "ebcdic-cp-is": enc2056, + "csIBM871": enc2056, + "csibm871": enc2056, + "IBM880": enc2057, + "ibm880": enc2057, + "cp880": enc2057, + "EBCDIC-Cyrillic": enc2057, + "ebcdic-cyrillic": enc2057, + "csIBM880": enc2057, + "csibm880": enc2057, + "IBM891": enc2058, + "ibm891": enc2058, + "cp891": enc2058, + "csIBM891": enc2058, + "csibm891": enc2058, + "IBM903": enc2059, + "ibm903": enc2059, + "cp903": enc2059, + "csIBM903": enc2059, + "csibm903": enc2059, + "IBM904": enc2060, + "ibm904": enc2060, + "cp904": enc2060, + "904": enc2060, + "csIBBM904": enc2060, + "csibbm904": enc2060, + "IBM905": enc2061, + "ibm905": enc2061, + "CP905": enc2061, + "cp905": enc2061, + "ebcdic-cp-tr": enc2061, + "csIBM905": enc2061, + "csibm905": enc2061, + "IBM918": enc2062, + "ibm918": enc2062, + "CP918": enc2062, + "cp918": enc2062, + "ebcdic-cp-ar2": enc2062, + "csIBM918": enc2062, + "csibm918": enc2062, + "IBM1026": enc2063, + "ibm1026": enc2063, + "CP1026": enc2063, + "cp1026": enc2063, + "csIBM1026": enc2063, + "csibm1026": enc2063, + "EBCDIC-AT-DE": enc2064, + "ebcdic-at-de": enc2064, + "csIBMEBCDICATDE": enc2064, + "csibmebcdicatde": enc2064, + "EBCDIC-AT-DE-A": enc2065, + "ebcdic-at-de-a": enc2065, + "csEBCDICATDEA": enc2065, + "csebcdicatdea": enc2065, + "EBCDIC-CA-FR": enc2066, + "ebcdic-ca-fr": enc2066, + "csEBCDICCAFR": enc2066, + "csebcdiccafr": enc2066, + "EBCDIC-DK-NO": enc2067, + "ebcdic-dk-no": enc2067, + "csEBCDICDKNO": enc2067, + "csebcdicdkno": enc2067, + "EBCDIC-DK-NO-A": enc2068, + "ebcdic-dk-no-a": enc2068, + "csEBCDICDKNOA": enc2068, + "csebcdicdknoa": enc2068, + "EBCDIC-FI-SE": enc2069, + "ebcdic-fi-se": enc2069, + "csEBCDICFISE": enc2069, + "csebcdicfise": enc2069, + "EBCDIC-FI-SE-A": enc2070, + "ebcdic-fi-se-a": enc2070, + "csEBCDICFISEA": enc2070, + "csebcdicfisea": enc2070, + "EBCDIC-FR": enc2071, + "ebcdic-fr": enc2071, + "csEBCDICFR": enc2071, + "csebcdicfr": enc2071, + "EBCDIC-IT": enc2072, + "ebcdic-it": enc2072, + "csEBCDICIT": enc2072, + "csebcdicit": enc2072, + "EBCDIC-PT": enc2073, + "ebcdic-pt": enc2073, + "csEBCDICPT": enc2073, + "csebcdicpt": enc2073, + "EBCDIC-ES": enc2074, + "ebcdic-es": enc2074, + "csEBCDICES": enc2074, + "csebcdices": enc2074, + "EBCDIC-ES-A": enc2075, + "ebcdic-es-a": enc2075, + "csEBCDICESA": enc2075, + "csebcdicesa": enc2075, + "EBCDIC-ES-S": enc2076, + "ebcdic-es-s": enc2076, + "csEBCDICESS": enc2076, + "csebcdicess": enc2076, + "EBCDIC-UK": enc2077, + "ebcdic-uk": enc2077, + "csEBCDICUK": enc2077, + "csebcdicuk": enc2077, + "EBCDIC-US": enc2078, + "ebcdic-us": enc2078, + "csEBCDICUS": enc2078, + "csebcdicus": enc2078, + "UNKNOWN-8BIT": enc2079, + "unknown-8bit": enc2079, + "csUnknown8BiT": enc2079, + "csunknown8bit": enc2079, + "MNEMONIC": enc2080, + "mnemonic": enc2080, + "csMnemonic": enc2080, + "csmnemonic": enc2080, + "MNEM": enc2081, + "mnem": enc2081, + "csMnem": enc2081, + "csmnem": enc2081, + "VISCII": enc2082, + "viscii": enc2082, + "csVISCII": enc2082, + "csviscii": enc2082, + "VIQR": enc2083, + "viqr": enc2083, + "csVIQR": enc2083, + "csviqr": enc2083, + "KOI8-R": enc2084, + "koi8-r": enc2084, + "csKOI8R": enc2084, + "cskoi8r": enc2084, + "HZ-GB-2312": enc2085, + "hz-gb-2312": enc2085, + "IBM866": enc2086, + "ibm866": enc2086, + "cp866": enc2086, + "866": enc2086, + "csIBM866": enc2086, + "csibm866": enc2086, + "IBM775": enc2087, + "ibm775": enc2087, + "cp775": enc2087, + "csPC775Baltic": enc2087, + "cspc775baltic": enc2087, + "KOI8-U": enc2088, + "koi8-u": enc2088, + "csKOI8U": enc2088, + "cskoi8u": enc2088, + "IBM00858": enc2089, + "ibm00858": enc2089, + "CCSID00858": enc2089, + "ccsid00858": enc2089, + "CP00858": enc2089, + "cp00858": enc2089, + "PC-Multilingual-850+euro": enc2089, + "pc-multilingual-850+euro": enc2089, + "csIBM00858": enc2089, + "csibm00858": enc2089, + "IBM00924": enc2090, + "ibm00924": enc2090, + "CCSID00924": enc2090, + "ccsid00924": enc2090, + "CP00924": enc2090, + "cp00924": enc2090, + "ebcdic-Latin9--euro": enc2090, + "ebcdic-latin9--euro": enc2090, + "csIBM00924": enc2090, + "csibm00924": enc2090, + "IBM01140": enc2091, + "ibm01140": enc2091, + "CCSID01140": enc2091, + "ccsid01140": enc2091, + "CP01140": enc2091, + "cp01140": enc2091, + "ebcdic-us-37+euro": enc2091, + "csIBM01140": enc2091, + "csibm01140": enc2091, + "IBM01141": enc2092, + "ibm01141": enc2092, + "CCSID01141": enc2092, + "ccsid01141": enc2092, + "CP01141": enc2092, + "cp01141": enc2092, + "ebcdic-de-273+euro": enc2092, + "csIBM01141": enc2092, + "csibm01141": enc2092, + "IBM01142": enc2093, + "ibm01142": enc2093, + "CCSID01142": enc2093, + "ccsid01142": enc2093, + "CP01142": enc2093, + "cp01142": enc2093, + "ebcdic-dk-277+euro": enc2093, + "ebcdic-no-277+euro": enc2093, + "csIBM01142": enc2093, + "csibm01142": enc2093, + "IBM01143": enc2094, + "ibm01143": enc2094, + "CCSID01143": enc2094, + "ccsid01143": enc2094, + "CP01143": enc2094, + "cp01143": enc2094, + "ebcdic-fi-278+euro": enc2094, + "ebcdic-se-278+euro": enc2094, + "csIBM01143": enc2094, + "csibm01143": enc2094, + "IBM01144": enc2095, + "ibm01144": enc2095, + "CCSID01144": enc2095, + "ccsid01144": enc2095, + "CP01144": enc2095, + "cp01144": enc2095, + "ebcdic-it-280+euro": enc2095, + "csIBM01144": enc2095, + "csibm01144": enc2095, + "IBM01145": enc2096, + "ibm01145": enc2096, + "CCSID01145": enc2096, + "ccsid01145": enc2096, + "CP01145": enc2096, + "cp01145": enc2096, + "ebcdic-es-284+euro": enc2096, + "csIBM01145": enc2096, + "csibm01145": enc2096, + "IBM01146": enc2097, + "ibm01146": enc2097, + "CCSID01146": enc2097, + "ccsid01146": enc2097, + "CP01146": enc2097, + "cp01146": enc2097, + "ebcdic-gb-285+euro": enc2097, + "csIBM01146": enc2097, + "csibm01146": enc2097, + "IBM01147": enc2098, + "ibm01147": enc2098, + "CCSID01147": enc2098, + "ccsid01147": enc2098, + "CP01147": enc2098, + "cp01147": enc2098, + "ebcdic-fr-297+euro": enc2098, + "csIBM01147": enc2098, + "csibm01147": enc2098, + "IBM01148": enc2099, + "ibm01148": enc2099, + "CCSID01148": enc2099, + "ccsid01148": enc2099, + "CP01148": enc2099, + "cp01148": enc2099, + "ebcdic-international-500+euro": enc2099, + "csIBM01148": enc2099, + "csibm01148": enc2099, + "IBM01149": enc2100, + "ibm01149": enc2100, + "CCSID01149": enc2100, + "ccsid01149": enc2100, + "CP01149": enc2100, + "cp01149": enc2100, + "ebcdic-is-871+euro": enc2100, + "csIBM01149": enc2100, + "csibm01149": enc2100, + "Big5-HKSCS": enc2101, + "big5-hkscs": enc2101, + "csBig5HKSCS": enc2101, + "csbig5hkscs": enc2101, + "IBM1047": enc2102, + "ibm1047": enc2102, + "IBM-1047": enc2102, + "ibm-1047": enc2102, + "csIBM1047": enc2102, + "csibm1047": enc2102, + "PTCP154": enc2103, + "ptcp154": enc2103, + "csPTCP154": enc2103, + "csptcp154": enc2103, + "PT154": enc2103, + "pt154": enc2103, + "CP154": enc2103, + "cp154": enc2103, + "Cyrillic-Asian": enc2103, + "cyrillic-asian": enc2103, + "Amiga-1251": enc2104, + "amiga-1251": enc2104, + "Ami1251": enc2104, + "ami1251": enc2104, + "Amiga1251": enc2104, + "amiga1251": enc2104, + "Ami-1251": enc2104, + "ami-1251": enc2104, + "csAmiga1251\n(Aliases": enc2104, + "csamiga1251\n(aliases": enc2104, + "KOI7-switched": enc2105, + "koi7-switched": enc2105, + "csKOI7switched": enc2105, + "cskoi7switched": enc2105, + "BRF": enc2106, + "brf": enc2106, + "csBRF": enc2106, + "csbrf": enc2106, + "TSCII": enc2107, + "tscii": enc2107, + "csTSCII": enc2107, + "cstscii": enc2107, + "CP51932": enc2108, + "cp51932": enc2108, + "csCP51932": enc2108, + "cscp51932": enc2108, + "windows-874": enc2109, + "cswindows874": enc2109, + "windows-1250": enc2250, + "cswindows1250": enc2250, + "windows-1251": enc2251, + "cswindows1251": enc2251, + "windows-1252": enc2252, + "cswindows1252": enc2252, + "windows-1253": enc2253, + "cswindows1253": enc2253, + "windows-1254": enc2254, + "cswindows1254": enc2254, + "windows-1255": enc2255, + "cswindows1255": enc2255, + "windows-1256": enc2256, + "cswindows1256": enc2256, + "windows-1257": enc2257, + "cswindows1257": enc2257, + "windows-1258": enc2258, + "cswindows1258": enc2258, + "TIS-620": enc2259, + "tis-620": enc2259, + "csTIS620": enc2259, + "cstis620": enc2259, + "ISO-8859-11": enc2259, + "iso-8859-11": enc2259, + "CP50220": enc2260, + "cp50220": enc2260, + "csCP50220": enc2260, + "cscp50220": enc2260, } // Total table size 14402 bytes (14KiB); checksum: CEBAA10C diff --git a/vendor/golang.org/x/text/language/lookup.go b/vendor/golang.org/x/text/language/lookup.go index 96d16dac9..3ee0e5dd3 100644 --- a/vendor/golang.org/x/text/language/lookup.go +++ b/vendor/golang.org/x/text/language/lookup.go @@ -375,7 +375,7 @@ var ( {'z', 'h', '-', 'm', 'i', 'n'}: -6, // zh-min // CLDR-specific tag. - {'r', 'o', 'o', 't'}: 0, // root + {'r', 'o', 'o', 't'}: 0, // root {'e', 'n', '-', 'u', 's', '-', 'p', 'o', 's', 'i', 'x'}: -7, // en_US_POSIX" } diff --git a/vendor/gopkg.in/yaml.v2/readerc.go b/vendor/gopkg.in/yaml.v2/readerc.go index 7c1f5fac3..b0c436c4a 100644 --- a/vendor/gopkg.in/yaml.v2/readerc.go +++ b/vendor/gopkg.in/yaml.v2/readerc.go @@ -95,7 +95,7 @@ func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { // [Go] This function was changed to guarantee the requested length size at EOF. // The fact we need to do this is pretty awful, but the description above implies - // for that to be the case, and there are tests + // for that to be the case, and there are tests // If the EOF flag is set and the raw buffer is empty, do nothing. if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go index 6c151db6f..bf830eee5 100644 --- a/vendor/gopkg.in/yaml.v2/resolve.go +++ b/vendor/gopkg.in/yaml.v2/resolve.go @@ -180,7 +180,7 @@ func resolve(tag string, in string) (rtag string, out interface{}) { return yaml_INT_TAG, uintv } } else if strings.HasPrefix(plain, "-0b") { - intv, err := strconv.ParseInt("-" + plain[3:], 2, 64) + intv, err := strconv.ParseInt("-"+plain[3:], 2, 64) if err == nil { if true || intv == int64(int(intv)) { return yaml_INT_TAG, int(intv) diff --git a/vendor/gopkg.in/yaml.v2/sorter.go b/vendor/gopkg.in/yaml.v2/sorter.go index 4c45e660a..2edd73405 100644 --- a/vendor/gopkg.in/yaml.v2/sorter.go +++ b/vendor/gopkg.in/yaml.v2/sorter.go @@ -52,7 +52,7 @@ func (l keyList) Less(i, j int) bool { var ai, bi int var an, bn int64 if ar[i] == '0' || br[i] == '0' { - for j := i-1; j >= 0 && unicode.IsDigit(ar[j]); j-- { + for j := i - 1; j >= 0 && unicode.IsDigit(ar[j]); j-- { if ar[j] != '0' { an = 1 bn = 1 From 07e9179fd5f243450b74353037c5ccde52f1dd7c Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 2 Feb 2019 04:49:58 +0200 Subject: [PATCH 08/89] add Context#ResetRequest and core/handlerconv.FromStdWithNext updates the request for any incoming request changes - https://github.com/kataras/iris/issues/1180 --- context/context.go | 27 +++++++++++++++++++++++++++ core/handlerconv/from_std.go | 1 + core/handlerconv/from_std_test.go | 6 ++++-- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/context/context.go b/context/context.go index 7fa1a95e3..fced06073 100644 --- a/context/context.go +++ b/context/context.go @@ -114,6 +114,18 @@ type Context interface { // Request returns the original *http.Request, as expected. Request() *http.Request + // ResetRequest sets the Context's Request, + // It is useful to store the new request created by a std *http.Request#WithContext() into Iris' Context. + // Use `ResetRequest` when for some reason you want to make a full + // override of the *http.Request. + // Note that: when you just want to change one of each fields you can use the Request() which returns a pointer to Request, + // so the changes will have affect without a full override. + // Usage: you use a native http handler which uses the standard "context" package + // to get values instead of the Iris' Context#Values(): + // r := c.Request() + // stdCtx := context.WithValue(r.Context(), key, val) + // ctx.ResetRequest(r.WithContext(stdCtx)). + ResetRequest(r *http.Request) // SetCurrentRouteName sets the route's name internally, // in order to be able to find the correct current "read-only" Route when @@ -1068,6 +1080,21 @@ func (ctx *context) Request() *http.Request { return ctx.request } +// ResetRequest sets the Context's Request, +// It is useful to store the new request created by a std *http.Request#WithContext() into Iris' Context. +// Use `ResetRequest` when for some reason you want to make a full +// override of the *http.Request. +// Note that: when you just want to change one of each fields you can use the Request() which returns a pointer to Request, +// so the changes will have affect without a full override. +// Usage: you use a native http handler which uses the standard "context" package +// to get values instead of the Iris' Context#Values(): +// r := c.Request() +// stdCtx := context.WithValue(r.Context(), key, val) +// ctx.ResetRequest(r.WithContext(stdCtx)). +func (ctx *context) ResetRequest(r *http.Request) { + ctx.request = r +} + // SetCurrentRouteName sets the route's name internally, // in order to be able to find the correct current "read-only" Route when // end-developer calls the `GetCurrentRoute()` function. diff --git a/core/handlerconv/from_std.go b/core/handlerconv/from_std.go index 98c22deb6..255bcaa93 100644 --- a/core/handlerconv/from_std.go +++ b/core/handlerconv/from_std.go @@ -75,6 +75,7 @@ func FromStd(handler interface{}) context.Handler { func FromStdWithNext(h func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc)) context.Handler { return func(ctx context.Context) { next := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx.ResetRequest(r) ctx.Next() }) diff --git a/core/handlerconv/from_std_test.go b/core/handlerconv/from_std_test.go index 17f5adcb2..49bb7938c 100644 --- a/core/handlerconv/from_std_test.go +++ b/core/handlerconv/from_std_test.go @@ -2,6 +2,7 @@ package handlerconv_test import ( + stdContext "context" "net/http" "testing" @@ -42,7 +43,8 @@ func TestFromStdWithNext(t *testing.T) { stdWNext := func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { if username, password, ok := r.BasicAuth(); ok && username == basicauth && password == basicauth { - next.ServeHTTP(w, r) + ctx := stdContext.WithValue(r.Context(), "key", "ok") + next.ServeHTTP(w, r.WithContext(ctx)) return } w.WriteHeader(iris.StatusForbidden) @@ -50,7 +52,7 @@ func TestFromStdWithNext(t *testing.T) { h := handlerconv.FromStdWithNext(stdWNext) next := func(ctx context.Context) { - ctx.WriteString(passed) + ctx.WriteString(ctx.Request().Context().Value("key").(string)) } app := iris.New() From 1a8d162da3c263939f618aa335f4086101f8be7e Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 2 Feb 2019 04:56:32 +0200 Subject: [PATCH 09/89] minor --- context/context.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/context/context.go b/context/context.go index fced06073..fd751eb23 100644 --- a/context/context.go +++ b/context/context.go @@ -122,7 +122,7 @@ type Context interface { // so the changes will have affect without a full override. // Usage: you use a native http handler which uses the standard "context" package // to get values instead of the Iris' Context#Values(): - // r := c.Request() + // r := ctx.Request() // stdCtx := context.WithValue(r.Context(), key, val) // ctx.ResetRequest(r.WithContext(stdCtx)). ResetRequest(r *http.Request) @@ -1088,7 +1088,7 @@ func (ctx *context) Request() *http.Request { // so the changes will have affect without a full override. // Usage: you use a native http handler which uses the standard "context" package // to get values instead of the Iris' Context#Values(): -// r := c.Request() +// r := ctx.Request() // stdCtx := context.WithValue(r.Context(), key, val) // ctx.ResetRequest(r.WithContext(stdCtx)). func (ctx *context) ResetRequest(r *http.Request) { From 90784f33580e036e3adda9a3c0e490e1ea5bd08d Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 9 Feb 2019 04:28:00 +0200 Subject: [PATCH 10/89] add iris websocket client side for Go and a simple chat example --- _examples/README.md | 3 + _examples/README_ZH.md | 3 + _examples/websocket/custom-go-client/main.go | 2 +- _examples/websocket/go-client/client/main.go | 58 +++ _examples/websocket/go-client/server/main.go | 32 ++ websocket/client.go | 427 +++++++++---------- websocket/client.js.go | 233 ++++++++++ websocket/client.ts | 2 +- websocket/connection.go | 2 +- 9 files changed, 536 insertions(+), 226 deletions(-) create mode 100644 _examples/websocket/go-client/client/main.go create mode 100644 _examples/websocket/go-client/server/main.go create mode 100644 websocket/client.js.go diff --git a/_examples/README.md b/_examples/README.md index 38a3faa2b..17ce3df0d 100644 --- a/_examples/README.md +++ b/_examples/README.md @@ -478,6 +478,9 @@ iris websocket library lives on its own [package](https://github.com/kataras/iri The package is designed to work with raw websockets although its API is similar to the famous [socket.io](https://socket.io). I have read an article recently and I felt very contented about my decision to design a **fast** websocket-**only** package for Iris and not a backwards socket.io-like package. You can read that article by following this link: https://medium.com/@ivanderbyl/why-you-don-t-need-socket-io-6848f1c871cd. - [Chat](websocket/chat/main.go) +- [Chat with Iris Go Client Side](websocket/go-client) **NEW** + * [Server](websocket/go-client/server/main.go) + * [Client](websocket/go-client/client/main.go) - [Native Messages](websocket/native-messages/main.go) - [Connection List](websocket/connectionlist/main.go) - [TLS Enabled](websocket/secure/main.go) diff --git a/_examples/README_ZH.md b/_examples/README_ZH.md index 53e2a7550..cae15a08f 100644 --- a/_examples/README_ZH.md +++ b/_examples/README_ZH.md @@ -431,6 +431,9 @@ iris websocket库依赖于它自己的[包](https://github.com/kataras/iris/tree 决定给iris设计一个**快速的**websocket**限定**包并且不是一个向后传递类socket.io的包。你可以阅读这个链接里的文章https://medium.com/@ivanderbyl/why-you-don-t-need-socket-io-6848f1c871cd。 - [聊天](websocket/chat/main.go) +- [Chat with Iris Go Client Side](websocket/go-client) **NEW** + * [Server](websocket/go-client/server/main.go) + * [Client](websocket/go-client/client/main.go) - [原生消息](websocket/native-messages/main.go) - [连接列表](websocket/connectionlist/main.go) - [TLS支持](websocket/secure/main.go) diff --git a/_examples/websocket/custom-go-client/main.go b/_examples/websocket/custom-go-client/main.go index 32ff53db4..7dba7e168 100644 --- a/_examples/websocket/custom-go-client/main.go +++ b/_examples/websocket/custom-go-client/main.go @@ -87,7 +87,7 @@ func SendMessage(serverID, to, method, message string) error { // SendtBytes broadcast a message to server func SendtBytes(serverID, to, method string, message []byte) error { - // look https://github.com/kataras/iris/blob/master/websocket/message.go , client.go and client.js + // look https://github.com/kataras/iris/blob/master/websocket/message.go , client.js.go and client.js // to understand the buffer line: buffer := []byte(fmt.Sprintf("%s%v;0;%v;%v;", websocket.DefaultEvtMessageKey, method, serverID, to)) buffer = append(buffer, message...) diff --git a/_examples/websocket/go-client/client/main.go b/_examples/websocket/go-client/client/main.go new file mode 100644 index 000000000..6a36b6a20 --- /dev/null +++ b/_examples/websocket/go-client/client/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "bufio" + "fmt" + "os" + + "github.com/kataras/iris/websocket" +) + +const ( + url = "ws://localhost:8080/socket" + prompt = ">> " +) + +/* +How to run: +Start the server, if it is not already started by executing `go run ../server/main.go` +And open two or more terminal windows and start the clients: +$ go run main.go +>> hi! +*/ +func main() { + conn, err := websocket.Dial(url, websocket.DefaultEvtMessageKey) + if err != nil { + panic(err) + } + + conn.OnError(func(err error) { + fmt.Printf("error: %v", err) + }) + + conn.OnDisconnect(func() { + fmt.Println("Server was force-closed[see ../server/main.go#L19] this connection after 20 seconds, therefore I am disconnected.") + os.Exit(0) + }) + + conn.On("chat", func(message string) { + fmt.Printf("\n%s\n", message) + }) + + fmt.Println("Start by typing a message to send") + scanner := bufio.NewScanner(os.Stdin) + for { + fmt.Print(prompt) + if !scanner.Scan() || scanner.Err() != nil { + break + } + msgToSend := scanner.Text() + if msgToSend == "exit" { + break + } + + conn.Emit("chat", msgToSend) + } + + fmt.Println("Terminated.") +} diff --git a/_examples/websocket/go-client/server/main.go b/_examples/websocket/go-client/server/main.go new file mode 100644 index 000000000..34e880d97 --- /dev/null +++ b/_examples/websocket/go-client/server/main.go @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" + "time" + + "github.com/kataras/iris" + "github.com/kataras/iris/websocket" +) + +func main() { + app := iris.New() + ws := websocket.New(websocket.Config{}) + app.Get("/socket", ws.Handler()) + + ws.OnConnection(func(c websocket.Connection) { + go func() { + <-time.After(20 * time.Second) + c.Disconnect() + }() + + c.On("chat", func(message string) { + c.To(websocket.Broadcast).Emit("chat", c.ID()+": "+message) + }) + + c.OnDisconnect(func() { + fmt.Printf("Connection with ID: %s has been disconnected!\n", c.ID()) + }) + }) + + app.Run(iris.Addr(":8080")) +} diff --git a/websocket/client.go b/websocket/client.go index 2144411a7..2220e07da 100644 --- a/websocket/client.go +++ b/websocket/client.go @@ -1,233 +1,214 @@ package websocket import ( - "time" + "bytes" + "strconv" + "strings" + "sync" + "sync/atomic" - "github.com/kataras/iris/context" + "github.com/gorilla/websocket" ) -// ClientHandler is the handler which serves the javascript client-side -// library. It uses a small cache based on the iris/context.WriteWithExpiration. -func ClientHandler() context.Handler { - modNow := time.Now() - return func(ctx context.Context) { - ctx.ContentType("application/javascript") - if _, err := ctx.WriteWithExpiration(ClientSource, modNow); err != nil { - ctx.StatusCode(500) - ctx.StopExecution() - // ctx.Application().Logger().Infof("error while serving []byte via StaticContent: %s", err.Error()) +// Dial opens a new client connection to a WebSocket. +func Dial(url, evtMessagePrefix string) (ws *ClientConn, err error) { + if !strings.HasPrefix(url, "ws://") { + url = "ws://" + url + } + + conn, _, err := websocket.DefaultDialer.Dial(url, nil) + if err != nil { + return nil, err + } + + return NewClientConn(conn, evtMessagePrefix), nil +} + +type ClientConn struct { + underline UnderlineConnection // TODO make it using gorilla's one, because the 'startReader' will not know when to stop otherwise, we have a fixed length currently... + messageType int + serializer *messageSerializer + + onErrorListeners []ErrorFunc + onDisconnectListeners []DisconnectFunc + onNativeMessageListeners []NativeMessageFunc + onEventListeners map[string][]MessageFunc + + writerMu sync.Mutex + + disconnected uint32 +} + +func NewClientConn(conn UnderlineConnection, evtMessagePrefix string) *ClientConn { + if evtMessagePrefix == "" { + evtMessagePrefix = DefaultEvtMessageKey + } + + c := &ClientConn{ + underline: conn, + serializer: newMessageSerializer([]byte(evtMessagePrefix)), + + onErrorListeners: make([]ErrorFunc, 0), + onDisconnectListeners: make([]DisconnectFunc, 0), + onNativeMessageListeners: make([]NativeMessageFunc, 0), + onEventListeners: make(map[string][]MessageFunc, 0), + } + + c.SetBinaryMessages(false) + + go c.startReader() + + return c +} + +func (c *ClientConn) SetBinaryMessages(binaryMessages bool) { + if binaryMessages { + c.messageType = websocket.BinaryMessage + } else { + c.messageType = websocket.TextMessage + } +} + +func (c *ClientConn) startReader() { + defer c.Disconnect() + + for { + _, data, err := c.underline.ReadMessage() + if err != nil { + if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { + c.FireOnError(err) + } + + break + } else { + c.messageReceived(data) + } + } +} + +func (c *ClientConn) messageReceived(data []byte) error { + if bytes.HasPrefix(data, c.serializer.prefix) { + // is a custom iris message. + receivedEvt := c.serializer.getWebsocketCustomEvent(data) + listeners, ok := c.onEventListeners[string(receivedEvt)] + if !ok || len(listeners) == 0 { + return nil // if not listeners for this event exit from here + } + + customMessage, err := c.serializer.deserialize(receivedEvt, data) + if customMessage == nil || err != nil { + return err + } + + for i := range listeners { + if fn, ok := listeners[i].(func()); ok { // its a simple func(){} callback + fn() + } else if fnString, ok := listeners[i].(func(string)); ok { + + if msgString, is := customMessage.(string); is { + fnString(msgString) + } else if msgInt, is := customMessage.(int); is { + // here if server side waiting for string but client side sent an int, just convert this int to a string + fnString(strconv.Itoa(msgInt)) + } + + } else if fnInt, ok := listeners[i].(func(int)); ok { + fnInt(customMessage.(int)) + } else if fnBool, ok := listeners[i].(func(bool)); ok { + fnBool(customMessage.(bool)) + } else if fnBytes, ok := listeners[i].(func([]byte)); ok { + fnBytes(customMessage.([]byte)) + } else { + listeners[i].(func(interface{}))(customMessage) + } + + } + } else { + // it's native websocket message + for i := range c.onNativeMessageListeners { + c.onNativeMessageListeners[i](data) } } + + return nil +} + +func (c *ClientConn) OnMessage(cb NativeMessageFunc) { + c.onNativeMessageListeners = append(c.onNativeMessageListeners, cb) +} + +func (c *ClientConn) On(event string, cb MessageFunc) { + if c.onEventListeners[event] == nil { + c.onEventListeners[event] = make([]MessageFunc, 0) + } + + c.onEventListeners[event] = append(c.onEventListeners[event], cb) +} + +func (c *ClientConn) OnError(cb ErrorFunc) { + c.onErrorListeners = append(c.onErrorListeners, cb) +} + +func (c *ClientConn) FireOnError(err error) { + for _, cb := range c.onErrorListeners { + cb(err) + } } -// ClientSource the client-side javascript raw source code. -var ClientSource = []byte(`var websocketStringMessageType = 0; -var websocketIntMessageType = 1; -var websocketBoolMessageType = 2; -var websocketJSONMessageType = 4; -var websocketMessagePrefix = "` + DefaultEvtMessageKey + `"; -var websocketMessageSeparator = ";"; -var websocketMessagePrefixLen = websocketMessagePrefix.length; -var websocketMessageSeparatorLen = websocketMessageSeparator.length; -var websocketMessagePrefixAndSepIdx = websocketMessagePrefixLen + websocketMessageSeparatorLen - 1; -var websocketMessagePrefixIdx = websocketMessagePrefixLen - 1; -var websocketMessageSeparatorIdx = websocketMessageSeparatorLen - 1; -var Ws = (function () { - // - function Ws(endpoint, protocols) { - var _this = this; - // events listeners - this.connectListeners = []; - this.disconnectListeners = []; - this.nativeMessageListeners = []; - this.messageListeners = {}; - if (!window["WebSocket"]) { - return; - } - if (endpoint.indexOf("ws") == -1) { - endpoint = "ws://" + endpoint; - } - if (protocols != null && protocols.length > 0) { - this.conn = new WebSocket(endpoint, protocols); - } - else { - this.conn = new WebSocket(endpoint); - } - this.conn.onopen = (function (evt) { - _this.fireConnect(); - _this.isReady = true; - return null; - }); - this.conn.onclose = (function (evt) { - _this.fireDisconnect(); - return null; - }); - this.conn.onmessage = (function (evt) { - _this.messageReceivedFromConn(evt); - }); - } - //utils - Ws.prototype.isNumber = function (obj) { - return !isNaN(obj - 0) && obj !== null && obj !== "" && obj !== false; - }; - Ws.prototype.isString = function (obj) { - return Object.prototype.toString.call(obj) == "[object String]"; - }; - Ws.prototype.isBoolean = function (obj) { - return typeof obj === 'boolean' || - (typeof obj === 'object' && typeof obj.valueOf() === 'boolean'); - }; - Ws.prototype.isJSON = function (obj) { - return typeof obj === 'object'; - }; - // - // messages - Ws.prototype._msg = function (event, websocketMessageType, dataMessage) { - return websocketMessagePrefix + event + websocketMessageSeparator + String(websocketMessageType) + websocketMessageSeparator + dataMessage; - }; - Ws.prototype.encodeMessage = function (event, data) { - var m = ""; - var t = 0; - if (this.isNumber(data)) { - t = websocketIntMessageType; - m = data.toString(); - } - else if (this.isBoolean(data)) { - t = websocketBoolMessageType; - m = data.toString(); - } - else if (this.isString(data)) { - t = websocketStringMessageType; - m = data.toString(); - } - else if (this.isJSON(data)) { - //propably json-object - t = websocketJSONMessageType; - m = JSON.stringify(data); - } - else if (data !== null && typeof(data) !== "undefined" ) { - // if it has a second parameter but it's not a type we know, then fire this: - console.log("unsupported type of input argument passed, try to not include this argument to the 'Emit'"); - } - return this._msg(event, t, m); - }; - Ws.prototype.decodeMessage = function (event, websocketMessage) { - //iris-websocket-message;user;4;themarshaledstringfromajsonstruct - var skipLen = websocketMessagePrefixLen + websocketMessageSeparatorLen + event.length + 2; - if (websocketMessage.length < skipLen + 1) { - return null; - } - var websocketMessageType = parseInt(websocketMessage.charAt(skipLen - 2)); - var theMessage = websocketMessage.substring(skipLen, websocketMessage.length); - if (websocketMessageType == websocketIntMessageType) { - return parseInt(theMessage); - } - else if (websocketMessageType == websocketBoolMessageType) { - return Boolean(theMessage); - } - else if (websocketMessageType == websocketStringMessageType) { - return theMessage; - } - else if (websocketMessageType == websocketJSONMessageType) { - return JSON.parse(theMessage); - } - else { - return null; // invalid - } - }; - Ws.prototype.getWebsocketCustomEvent = function (websocketMessage) { - if (websocketMessage.length < websocketMessagePrefixAndSepIdx) { - return ""; - } - var s = websocketMessage.substring(websocketMessagePrefixAndSepIdx, websocketMessage.length); - var evt = s.substring(0, s.indexOf(websocketMessageSeparator)); - return evt; - }; - Ws.prototype.getCustomMessage = function (event, websocketMessage) { - var eventIdx = websocketMessage.indexOf(event + websocketMessageSeparator); - var s = websocketMessage.substring(eventIdx + event.length + websocketMessageSeparator.length + 2, websocketMessage.length); - return s; - }; - // - // Ws Events - // messageReceivedFromConn this is the func which decides - // if it's a native websocket message or a custom qws message - // if native message then calls the fireNativeMessage - // else calls the fireMessage - // - // remember iris gives you the freedom of native websocket messages if you don't want to use this client side at all. - Ws.prototype.messageReceivedFromConn = function (evt) { - //check if qws message - var message = evt.data; - if (message.indexOf(websocketMessagePrefix) != -1) { - var event_1 = this.getWebsocketCustomEvent(message); - if (event_1 != "") { - // it's a custom message - this.fireMessage(event_1, this.getCustomMessage(event_1, message)); - return; - } - } - // it's a native websocket message - this.fireNativeMessage(message); - }; - Ws.prototype.OnConnect = function (fn) { - if (this.isReady) { - fn(); - } - this.connectListeners.push(fn); - }; - Ws.prototype.fireConnect = function () { - for (var i = 0; i < this.connectListeners.length; i++) { - this.connectListeners[i](); - } - }; - Ws.prototype.OnDisconnect = function (fn) { - this.disconnectListeners.push(fn); - }; - Ws.prototype.fireDisconnect = function () { - for (var i = 0; i < this.disconnectListeners.length; i++) { - this.disconnectListeners[i](); - } - }; - Ws.prototype.OnMessage = function (cb) { - this.nativeMessageListeners.push(cb); - }; - Ws.prototype.fireNativeMessage = function (websocketMessage) { - for (var i = 0; i < this.nativeMessageListeners.length; i++) { - this.nativeMessageListeners[i](websocketMessage); - } - }; - Ws.prototype.On = function (event, cb) { - if (this.messageListeners[event] == null || this.messageListeners[event] == undefined) { - this.messageListeners[event] = []; - } - this.messageListeners[event].push(cb); - }; - Ws.prototype.fireMessage = function (event, message) { - for (var key in this.messageListeners) { - if (this.messageListeners.hasOwnProperty(key)) { - if (key == event) { - for (var i = 0; i < this.messageListeners[key].length; i++) { - this.messageListeners[key][i](message); - } - } - } - } - }; - // - // Ws Actions - Ws.prototype.Disconnect = function () { - this.conn.close(); - }; - // EmitMessage sends a native websocket message - Ws.prototype.EmitMessage = function (websocketMessage) { - this.conn.send(websocketMessage); - }; - // Emit sends an iris-custom websocket message - Ws.prototype.Emit = function (event, data) { - var messageStr = this.encodeMessage(event, data); - this.EmitMessage(messageStr); - }; - return Ws; -}()); -`) +func (c *ClientConn) OnDisconnect(cb DisconnectFunc) { + c.onDisconnectListeners = append(c.onDisconnectListeners, cb) +} + +func (c *ClientConn) Disconnect() error { + if c == nil || !atomic.CompareAndSwapUint32(&c.disconnected, 0, 1) { + return ErrAlreadyDisconnected + } + + err := c.underline.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) + if err != nil { + err = c.underline.Close() + } + + if err == nil { + for i := range c.onDisconnectListeners { + c.onDisconnectListeners[i]() + } + } + + return err +} + +func (c *ClientConn) EmitMessage(nativeMessage []byte) error { + return c.writeDefault(nativeMessage) +} + +func (c *ClientConn) Emit(event string, data interface{}) error { + b, err := c.serializer.serialize(event, data) + if err != nil { + return err + } + + return c.EmitMessage(b) +} + +// Write writes a raw websocket message with a specific type to the client +// used by ping messages and any CloseMessage types. +func (c *ClientConn) Write(websocketMessageType int, data []byte) error { + // for any-case the app tries to write from different goroutines, + // we must protect them because they're reporting that as bug... + c.writerMu.Lock() + // .WriteMessage same as NextWriter and close (flush) + err := c.underline.WriteMessage(websocketMessageType, data) + c.writerMu.Unlock() + if err != nil { + // if failed then the connection is off, fire the disconnect + c.Disconnect() + } + return err +} + +// writeDefault is the same as write but the message type is the configured by c.messageType +// if BinaryMessages is enabled then it's raw []byte as you expected to work with protobufs +func (c *ClientConn) writeDefault(data []byte) error { + return c.Write(c.messageType, data) +} diff --git a/websocket/client.js.go b/websocket/client.js.go new file mode 100644 index 000000000..2144411a7 --- /dev/null +++ b/websocket/client.js.go @@ -0,0 +1,233 @@ +package websocket + +import ( + "time" + + "github.com/kataras/iris/context" +) + +// ClientHandler is the handler which serves the javascript client-side +// library. It uses a small cache based on the iris/context.WriteWithExpiration. +func ClientHandler() context.Handler { + modNow := time.Now() + return func(ctx context.Context) { + ctx.ContentType("application/javascript") + if _, err := ctx.WriteWithExpiration(ClientSource, modNow); err != nil { + ctx.StatusCode(500) + ctx.StopExecution() + // ctx.Application().Logger().Infof("error while serving []byte via StaticContent: %s", err.Error()) + } + } +} + +// ClientSource the client-side javascript raw source code. +var ClientSource = []byte(`var websocketStringMessageType = 0; +var websocketIntMessageType = 1; +var websocketBoolMessageType = 2; +var websocketJSONMessageType = 4; +var websocketMessagePrefix = "` + DefaultEvtMessageKey + `"; +var websocketMessageSeparator = ";"; +var websocketMessagePrefixLen = websocketMessagePrefix.length; +var websocketMessageSeparatorLen = websocketMessageSeparator.length; +var websocketMessagePrefixAndSepIdx = websocketMessagePrefixLen + websocketMessageSeparatorLen - 1; +var websocketMessagePrefixIdx = websocketMessagePrefixLen - 1; +var websocketMessageSeparatorIdx = websocketMessageSeparatorLen - 1; +var Ws = (function () { + // + function Ws(endpoint, protocols) { + var _this = this; + // events listeners + this.connectListeners = []; + this.disconnectListeners = []; + this.nativeMessageListeners = []; + this.messageListeners = {}; + if (!window["WebSocket"]) { + return; + } + if (endpoint.indexOf("ws") == -1) { + endpoint = "ws://" + endpoint; + } + if (protocols != null && protocols.length > 0) { + this.conn = new WebSocket(endpoint, protocols); + } + else { + this.conn = new WebSocket(endpoint); + } + this.conn.onopen = (function (evt) { + _this.fireConnect(); + _this.isReady = true; + return null; + }); + this.conn.onclose = (function (evt) { + _this.fireDisconnect(); + return null; + }); + this.conn.onmessage = (function (evt) { + _this.messageReceivedFromConn(evt); + }); + } + //utils + Ws.prototype.isNumber = function (obj) { + return !isNaN(obj - 0) && obj !== null && obj !== "" && obj !== false; + }; + Ws.prototype.isString = function (obj) { + return Object.prototype.toString.call(obj) == "[object String]"; + }; + Ws.prototype.isBoolean = function (obj) { + return typeof obj === 'boolean' || + (typeof obj === 'object' && typeof obj.valueOf() === 'boolean'); + }; + Ws.prototype.isJSON = function (obj) { + return typeof obj === 'object'; + }; + // + // messages + Ws.prototype._msg = function (event, websocketMessageType, dataMessage) { + return websocketMessagePrefix + event + websocketMessageSeparator + String(websocketMessageType) + websocketMessageSeparator + dataMessage; + }; + Ws.prototype.encodeMessage = function (event, data) { + var m = ""; + var t = 0; + if (this.isNumber(data)) { + t = websocketIntMessageType; + m = data.toString(); + } + else if (this.isBoolean(data)) { + t = websocketBoolMessageType; + m = data.toString(); + } + else if (this.isString(data)) { + t = websocketStringMessageType; + m = data.toString(); + } + else if (this.isJSON(data)) { + //propably json-object + t = websocketJSONMessageType; + m = JSON.stringify(data); + } + else if (data !== null && typeof(data) !== "undefined" ) { + // if it has a second parameter but it's not a type we know, then fire this: + console.log("unsupported type of input argument passed, try to not include this argument to the 'Emit'"); + } + return this._msg(event, t, m); + }; + Ws.prototype.decodeMessage = function (event, websocketMessage) { + //iris-websocket-message;user;4;themarshaledstringfromajsonstruct + var skipLen = websocketMessagePrefixLen + websocketMessageSeparatorLen + event.length + 2; + if (websocketMessage.length < skipLen + 1) { + return null; + } + var websocketMessageType = parseInt(websocketMessage.charAt(skipLen - 2)); + var theMessage = websocketMessage.substring(skipLen, websocketMessage.length); + if (websocketMessageType == websocketIntMessageType) { + return parseInt(theMessage); + } + else if (websocketMessageType == websocketBoolMessageType) { + return Boolean(theMessage); + } + else if (websocketMessageType == websocketStringMessageType) { + return theMessage; + } + else if (websocketMessageType == websocketJSONMessageType) { + return JSON.parse(theMessage); + } + else { + return null; // invalid + } + }; + Ws.prototype.getWebsocketCustomEvent = function (websocketMessage) { + if (websocketMessage.length < websocketMessagePrefixAndSepIdx) { + return ""; + } + var s = websocketMessage.substring(websocketMessagePrefixAndSepIdx, websocketMessage.length); + var evt = s.substring(0, s.indexOf(websocketMessageSeparator)); + return evt; + }; + Ws.prototype.getCustomMessage = function (event, websocketMessage) { + var eventIdx = websocketMessage.indexOf(event + websocketMessageSeparator); + var s = websocketMessage.substring(eventIdx + event.length + websocketMessageSeparator.length + 2, websocketMessage.length); + return s; + }; + // + // Ws Events + // messageReceivedFromConn this is the func which decides + // if it's a native websocket message or a custom qws message + // if native message then calls the fireNativeMessage + // else calls the fireMessage + // + // remember iris gives you the freedom of native websocket messages if you don't want to use this client side at all. + Ws.prototype.messageReceivedFromConn = function (evt) { + //check if qws message + var message = evt.data; + if (message.indexOf(websocketMessagePrefix) != -1) { + var event_1 = this.getWebsocketCustomEvent(message); + if (event_1 != "") { + // it's a custom message + this.fireMessage(event_1, this.getCustomMessage(event_1, message)); + return; + } + } + // it's a native websocket message + this.fireNativeMessage(message); + }; + Ws.prototype.OnConnect = function (fn) { + if (this.isReady) { + fn(); + } + this.connectListeners.push(fn); + }; + Ws.prototype.fireConnect = function () { + for (var i = 0; i < this.connectListeners.length; i++) { + this.connectListeners[i](); + } + }; + Ws.prototype.OnDisconnect = function (fn) { + this.disconnectListeners.push(fn); + }; + Ws.prototype.fireDisconnect = function () { + for (var i = 0; i < this.disconnectListeners.length; i++) { + this.disconnectListeners[i](); + } + }; + Ws.prototype.OnMessage = function (cb) { + this.nativeMessageListeners.push(cb); + }; + Ws.prototype.fireNativeMessage = function (websocketMessage) { + for (var i = 0; i < this.nativeMessageListeners.length; i++) { + this.nativeMessageListeners[i](websocketMessage); + } + }; + Ws.prototype.On = function (event, cb) { + if (this.messageListeners[event] == null || this.messageListeners[event] == undefined) { + this.messageListeners[event] = []; + } + this.messageListeners[event].push(cb); + }; + Ws.prototype.fireMessage = function (event, message) { + for (var key in this.messageListeners) { + if (this.messageListeners.hasOwnProperty(key)) { + if (key == event) { + for (var i = 0; i < this.messageListeners[key].length; i++) { + this.messageListeners[key][i](message); + } + } + } + } + }; + // + // Ws Actions + Ws.prototype.Disconnect = function () { + this.conn.close(); + }; + // EmitMessage sends a native websocket message + Ws.prototype.EmitMessage = function (websocketMessage) { + this.conn.send(websocketMessage); + }; + // Emit sends an iris-custom websocket message + Ws.prototype.Emit = function (event, data) { + var messageStr = this.encodeMessage(event, data); + this.EmitMessage(messageStr); + }; + return Ws; +}()); +`) diff --git a/websocket/client.ts b/websocket/client.ts index 98392492d..c346154c8 100644 --- a/websocket/client.ts +++ b/websocket/client.ts @@ -1,4 +1,4 @@ -// export to client.go:ClientSource []byte +// export to client.js.go:ClientSource []byte const websocketStringMessageType = 0; const websocketIntMessageType = 1; diff --git a/websocket/connection.go b/websocket/connection.go index 11f1e787b..66acb0df4 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -400,7 +400,7 @@ func (c *connection) startReader() { _, data, err := conn.ReadMessage() if err != nil { - if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway) { + if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { c.FireOnError(err) } break From edaf4615d6287c945fbb2498f2a267d452f72571 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sun, 10 Feb 2019 17:16:43 +0200 Subject: [PATCH 11/89] use the same connection structure for both client and server-side connections interfaces, the 'Connection' interface could be changed to 'ServerConn' but this would produce breaking naming change to the iris users, so keep it as it's. --- _examples/websocket/go-client/client/main.go | 12 +- _examples/websocket/go-client/server/main.go | 4 +- websocket/client.go | 214 ------------- websocket/connection.go | 319 ++++++++++++++----- websocket/server.go | 5 +- 5 files changed, 258 insertions(+), 296 deletions(-) delete mode 100644 websocket/client.go diff --git a/_examples/websocket/go-client/client/main.go b/_examples/websocket/go-client/client/main.go index 6a36b6a20..f89f18039 100644 --- a/_examples/websocket/go-client/client/main.go +++ b/_examples/websocket/go-client/client/main.go @@ -21,21 +21,21 @@ $ go run main.go >> hi! */ func main() { - conn, err := websocket.Dial(url, websocket.DefaultEvtMessageKey) + c, err := websocket.Dial(url, websocket.ConnectionConfig{}) if err != nil { panic(err) } - conn.OnError(func(err error) { + c.OnError(func(err error) { fmt.Printf("error: %v", err) }) - conn.OnDisconnect(func() { - fmt.Println("Server was force-closed[see ../server/main.go#L19] this connection after 20 seconds, therefore I am disconnected.") + c.OnDisconnect(func() { + fmt.Println("Server was force-closed[see ../server/main.go#L17] this connection after 20 seconds, therefore I am disconnected.") os.Exit(0) }) - conn.On("chat", func(message string) { + c.On("chat", func(message string) { fmt.Printf("\n%s\n", message) }) @@ -51,7 +51,7 @@ func main() { break } - conn.Emit("chat", msgToSend) + c.Emit("chat", msgToSend) } fmt.Println("Terminated.") diff --git a/_examples/websocket/go-client/server/main.go b/_examples/websocket/go-client/server/main.go index 34e880d97..0c6bed81d 100644 --- a/_examples/websocket/go-client/server/main.go +++ b/_examples/websocket/go-client/server/main.go @@ -11,8 +11,6 @@ import ( func main() { app := iris.New() ws := websocket.New(websocket.Config{}) - app.Get("/socket", ws.Handler()) - ws.OnConnection(func(c websocket.Connection) { go func() { <-time.After(20 * time.Second) @@ -28,5 +26,7 @@ func main() { }) }) + app.Get("/socket", ws.Handler()) + app.Run(iris.Addr(":8080")) } diff --git a/websocket/client.go b/websocket/client.go deleted file mode 100644 index 2220e07da..000000000 --- a/websocket/client.go +++ /dev/null @@ -1,214 +0,0 @@ -package websocket - -import ( - "bytes" - "strconv" - "strings" - "sync" - "sync/atomic" - - "github.com/gorilla/websocket" -) - -// Dial opens a new client connection to a WebSocket. -func Dial(url, evtMessagePrefix string) (ws *ClientConn, err error) { - if !strings.HasPrefix(url, "ws://") { - url = "ws://" + url - } - - conn, _, err := websocket.DefaultDialer.Dial(url, nil) - if err != nil { - return nil, err - } - - return NewClientConn(conn, evtMessagePrefix), nil -} - -type ClientConn struct { - underline UnderlineConnection // TODO make it using gorilla's one, because the 'startReader' will not know when to stop otherwise, we have a fixed length currently... - messageType int - serializer *messageSerializer - - onErrorListeners []ErrorFunc - onDisconnectListeners []DisconnectFunc - onNativeMessageListeners []NativeMessageFunc - onEventListeners map[string][]MessageFunc - - writerMu sync.Mutex - - disconnected uint32 -} - -func NewClientConn(conn UnderlineConnection, evtMessagePrefix string) *ClientConn { - if evtMessagePrefix == "" { - evtMessagePrefix = DefaultEvtMessageKey - } - - c := &ClientConn{ - underline: conn, - serializer: newMessageSerializer([]byte(evtMessagePrefix)), - - onErrorListeners: make([]ErrorFunc, 0), - onDisconnectListeners: make([]DisconnectFunc, 0), - onNativeMessageListeners: make([]NativeMessageFunc, 0), - onEventListeners: make(map[string][]MessageFunc, 0), - } - - c.SetBinaryMessages(false) - - go c.startReader() - - return c -} - -func (c *ClientConn) SetBinaryMessages(binaryMessages bool) { - if binaryMessages { - c.messageType = websocket.BinaryMessage - } else { - c.messageType = websocket.TextMessage - } -} - -func (c *ClientConn) startReader() { - defer c.Disconnect() - - for { - _, data, err := c.underline.ReadMessage() - if err != nil { - if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { - c.FireOnError(err) - } - - break - } else { - c.messageReceived(data) - } - } -} - -func (c *ClientConn) messageReceived(data []byte) error { - if bytes.HasPrefix(data, c.serializer.prefix) { - // is a custom iris message. - receivedEvt := c.serializer.getWebsocketCustomEvent(data) - listeners, ok := c.onEventListeners[string(receivedEvt)] - if !ok || len(listeners) == 0 { - return nil // if not listeners for this event exit from here - } - - customMessage, err := c.serializer.deserialize(receivedEvt, data) - if customMessage == nil || err != nil { - return err - } - - for i := range listeners { - if fn, ok := listeners[i].(func()); ok { // its a simple func(){} callback - fn() - } else if fnString, ok := listeners[i].(func(string)); ok { - - if msgString, is := customMessage.(string); is { - fnString(msgString) - } else if msgInt, is := customMessage.(int); is { - // here if server side waiting for string but client side sent an int, just convert this int to a string - fnString(strconv.Itoa(msgInt)) - } - - } else if fnInt, ok := listeners[i].(func(int)); ok { - fnInt(customMessage.(int)) - } else if fnBool, ok := listeners[i].(func(bool)); ok { - fnBool(customMessage.(bool)) - } else if fnBytes, ok := listeners[i].(func([]byte)); ok { - fnBytes(customMessage.([]byte)) - } else { - listeners[i].(func(interface{}))(customMessage) - } - - } - } else { - // it's native websocket message - for i := range c.onNativeMessageListeners { - c.onNativeMessageListeners[i](data) - } - } - - return nil -} - -func (c *ClientConn) OnMessage(cb NativeMessageFunc) { - c.onNativeMessageListeners = append(c.onNativeMessageListeners, cb) -} - -func (c *ClientConn) On(event string, cb MessageFunc) { - if c.onEventListeners[event] == nil { - c.onEventListeners[event] = make([]MessageFunc, 0) - } - - c.onEventListeners[event] = append(c.onEventListeners[event], cb) -} - -func (c *ClientConn) OnError(cb ErrorFunc) { - c.onErrorListeners = append(c.onErrorListeners, cb) -} - -func (c *ClientConn) FireOnError(err error) { - for _, cb := range c.onErrorListeners { - cb(err) - } -} - -func (c *ClientConn) OnDisconnect(cb DisconnectFunc) { - c.onDisconnectListeners = append(c.onDisconnectListeners, cb) -} - -func (c *ClientConn) Disconnect() error { - if c == nil || !atomic.CompareAndSwapUint32(&c.disconnected, 0, 1) { - return ErrAlreadyDisconnected - } - - err := c.underline.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) - if err != nil { - err = c.underline.Close() - } - - if err == nil { - for i := range c.onDisconnectListeners { - c.onDisconnectListeners[i]() - } - } - - return err -} - -func (c *ClientConn) EmitMessage(nativeMessage []byte) error { - return c.writeDefault(nativeMessage) -} - -func (c *ClientConn) Emit(event string, data interface{}) error { - b, err := c.serializer.serialize(event, data) - if err != nil { - return err - } - - return c.EmitMessage(b) -} - -// Write writes a raw websocket message with a specific type to the client -// used by ping messages and any CloseMessage types. -func (c *ClientConn) Write(websocketMessageType int, data []byte) error { - // for any-case the app tries to write from different goroutines, - // we must protect them because they're reporting that as bug... - c.writerMu.Lock() - // .WriteMessage same as NextWriter and close (flush) - err := c.underline.WriteMessage(websocketMessageType, data) - c.writerMu.Unlock() - if err != nil { - // if failed then the connection is off, fire the disconnect - c.Disconnect() - } - return err -} - -// writeDefault is the same as write but the message type is the configured by c.messageType -// if BinaryMessages is enabled then it's raw []byte as you expected to work with protobufs -func (c *ClientConn) writeDefault(data []byte) error { - return c.Write(c.messageType, data) -} diff --git a/websocket/connection.go b/websocket/connection.go index 66acb0df4..821d812bc 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -6,13 +6,37 @@ import ( "io" "net" "strconv" + "strings" "sync" + "sync/atomic" "time" "github.com/gorilla/websocket" "github.com/kataras/iris/context" ) +const ( + // TextMessage denotes a text data message. The text message payload is + // interpreted as UTF-8 encoded text data. + TextMessage = websocket.TextMessage + + // BinaryMessage denotes a binary data message. + BinaryMessage = websocket.BinaryMessage + + // CloseMessage denotes a close control message. The optional message + // payload contains a numeric code and text. Use the FormatCloseMessage + // function to format a close message payload. + CloseMessage = websocket.CloseMessage + + // PingMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PingMessage = websocket.PingMessage + + // PongMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PongMessage = websocket.PongMessage +) + type ( connectionValue struct { key []byte @@ -136,51 +160,27 @@ type ( PingFunc func() // PongFunc is the callback which fires on pong message received PongFunc func() - // Connection is the front-end API that you will use to communicate with the client side + // Connection is the front-end API that you will use to communicate with the client side, + // it is the server-side connection. Connection interface { - // Emitter implements EmitMessage & Emit - Emitter + ClientConnection // Err is not nil if the upgrader failed to upgrade http to websocket connection. Err() error - // ID returns the connection's identifier ID() string - // Server returns the websocket server instance // which this connection is listening to. // // Its connection-relative operations are safe for use. Server() *Server - - // Write writes a raw websocket message with a specific type to the client - // used by ping messages and any CloseMessage types. - Write(websocketMessageType int, data []byte) error - // Context returns the (upgraded) context.Context of this connection // avoid using it, you normally don't need it, // websocket has everything you need to authenticate the user BUT if it's necessary // then you use it to receive user information, for example: from headers Context() context.Context - - // OnDisconnect registers a callback which is fired when this connection is closed by an error or manual - OnDisconnect(DisconnectFunc) - // OnError registers a callback which fires when this connection occurs an error - OnError(ErrorFunc) - // OnPing registers a callback which fires on each ping - OnPing(PingFunc) - // OnPong registers a callback which fires on pong message received - OnPong(PongFunc) - // FireOnError can be used to send a custom error message to the connection - // - // It does nothing more than firing the OnError listeners. It doesn't send anything to the client. - FireOnError(err error) // To defines on what "room" (see Join) the server should send a message // returns an Emmiter(`EmitMessage` & `Emit`) to send messages. To(string) Emitter - // OnMessage registers a callback which fires when native websocket message received - OnMessage(NativeMessageFunc) - // On registers a callback to a particular event which is fired when a message to this event is received - On(string, MessageFunc) // Join registers this connection to a room, if it doesn't exist then it creates a new. One room can have one or more connections. One connection can be joined to many rooms. All connections are joined to a room specified by their `ID` automatically. Join(string) // IsJoined returns true when this connection is joined to the room, otherwise false. @@ -201,9 +201,6 @@ type ( // after the "On" events IF server's `Upgrade` is used, // otherise you don't have to call it because the `Handler()` does it automatically. Wait() - // Disconnect disconnects the client, close the underline websocket conn and removes it from the conn list - // returns the error, if any, from the underline connection - Disconnect() error // SetValue sets a key-value pair on the connection's mem store. SetValue(key string, value interface{}) // GetValue gets a value by its key from the connection's mem store. @@ -216,20 +213,51 @@ type ( GetValueInt(key string) int } + // ClientConnection is the client-side connection interface. Server shares some of its methods but the underline actions differs. + ClientConnection interface { + Emitter + // Write writes a raw websocket message with a specific type to the client + // used by ping messages and any CloseMessage types. + Write(websocketMessageType int, data []byte) error + // OnMessage registers a callback which fires when native websocket message received + OnMessage(NativeMessageFunc) + // On registers a callback to a particular event which is fired when a message to this event is received + On(string, MessageFunc) + // OnError registers a callback which fires when this connection occurs an error + OnError(ErrorFunc) + // OnPing registers a callback which fires on each ping + OnPing(PingFunc) + // OnPong registers a callback which fires on pong message received + OnPong(PongFunc) + // FireOnError can be used to send a custom error message to the connection + // + // It does nothing more than firing the OnError listeners. It doesn't send anything to the client. + FireOnError(err error) + // OnDisconnect registers a callback which is fired when this connection is closed by an error or manual + OnDisconnect(DisconnectFunc) + // Disconnect disconnects the client, close the underline websocket conn and removes it from the conn list + // returns the error, if any, from the underline connection + Disconnect() error + } + connection struct { - err error - underline UnderlineConnection - id string - messageType int - disconnected bool - onDisconnectListeners []DisconnectFunc - onRoomLeaveListeners []LeaveRoomFunc + err error + underline UnderlineConnection + config ConnectionConfig + defaultMessageType int + serializer *messageSerializer + id string + onErrorListeners []ErrorFunc onPingListeners []PingFunc onPongListeners []PongFunc onNativeMessageListeners []NativeMessageFunc onEventListeners map[string][]MessageFunc - started bool + onRoomLeaveListeners []LeaveRoomFunc + onDisconnectListeners []DisconnectFunc + disconnected uint32 + + started bool // these were maden for performance only self Emitter // pre-defined emitter than sends message to its self client broadcast Emitter // pre-defined emitter that sends message to all except this @@ -250,33 +278,49 @@ type ( var _ Connection = &connection{} -// CloseMessage denotes a close control message. The optional message -// payload contains a numeric code and text. Use the FormatCloseMessage -// function to format a close message payload. -// -// Use the `Connection#Disconnect` instead. -const CloseMessage = websocket.CloseMessage - -func newConnection(ctx context.Context, s *Server, underlineConn UnderlineConnection, id string) *connection { +func newConnection(underlineConn UnderlineConnection, cfg ConnectionConfig) *connection { + cfg = cfg.Validate() c := &connection{ underline: underlineConn, - id: id, - messageType: websocket.TextMessage, - onDisconnectListeners: make([]DisconnectFunc, 0), - onRoomLeaveListeners: make([]LeaveRoomFunc, 0), + config: cfg, + serializer: newMessageSerializer(cfg.EvtMessagePrefix), + defaultMessageType: websocket.TextMessage, onErrorListeners: make([]ErrorFunc, 0), + onPingListeners: make([]PingFunc, 0), + onPongListeners: make([]PongFunc, 0), onNativeMessageListeners: make([]NativeMessageFunc, 0), onEventListeners: make(map[string][]MessageFunc, 0), - onPongListeners: make([]PongFunc, 0), - started: false, - ctx: ctx, - server: s, + onDisconnectListeners: make([]DisconnectFunc, 0), + disconnected: 0, } - if s.config.BinaryMessages { - c.messageType = websocket.BinaryMessage + if cfg.BinaryMessages { + c.defaultMessageType = websocket.BinaryMessage } + return c +} + +func newServerConnection(ctx context.Context, s *Server, underlineConn UnderlineConnection, id string) *connection { + c := newConnection(underlineConn, ConnectionConfig{ + EvtMessagePrefix: s.config.EvtMessagePrefix, + WriteTimeout: s.config.WriteTimeout, + ReadTimeout: s.config.ReadTimeout, + PongTimeout: s.config.PongTimeout, + PingPeriod: s.config.PingPeriod, + MaxMessageSize: s.config.MaxMessageSize, + BinaryMessages: s.config.BinaryMessages, + ReadBufferSize: s.config.ReadBufferSize, + WriteBufferSize: s.config.WriteBufferSize, + EnableCompression: s.config.EnableCompression, + }) + + c.id = id + c.server = s + c.ctx = ctx + c.onRoomLeaveListeners = make([]LeaveRoomFunc, 0) + c.started = false + c.self = newEmitter(c, c.id) c.broadcast = newEmitter(c, Broadcast) c.all = newEmitter(c, All) @@ -295,7 +339,7 @@ func (c *connection) Write(websocketMessageType int, data []byte) error { // for any-case the app tries to write from different goroutines, // we must protect them because they're reporting that as bug... c.writerMu.Lock() - if writeTimeout := c.server.config.WriteTimeout; writeTimeout > 0 { + if writeTimeout := c.config.WriteTimeout; writeTimeout > 0 { // set the write deadline based on the configuration c.underline.SetWriteDeadline(time.Now().Add(writeTimeout)) } @@ -312,8 +356,8 @@ func (c *connection) Write(websocketMessageType int, data []byte) error { // writeDefault is the same as write but the message type is the configured by c.messageType // if BinaryMessages is enabled then it's raw []byte as you expected to work with protobufs -func (c *connection) writeDefault(data []byte) { - c.Write(c.messageType, data) +func (c *connection) writeDefault(data []byte) error { + return c.Write(c.defaultMessageType, data) } const ( @@ -342,8 +386,8 @@ func (c *connection) startPinger() { go func() { for { // using sleep avoids the ticker error that causes a memory leak - time.Sleep(c.server.config.PingPeriod) - if c.disconnected { + time.Sleep(c.config.PingPeriod) + if atomic.LoadUint32(&c.disconnected) > 0 { // verifies if already disconected break } @@ -375,12 +419,12 @@ func (c *connection) fireOnPong() { func (c *connection) startReader() { conn := c.underline - hasReadTimeout := c.server.config.ReadTimeout > 0 + hasReadTimeout := c.config.ReadTimeout > 0 - conn.SetReadLimit(c.server.config.MaxMessageSize) + conn.SetReadLimit(c.config.MaxMessageSize) conn.SetPongHandler(func(s string) error { if hasReadTimeout { - conn.SetReadDeadline(time.Now().Add(c.server.config.ReadTimeout)) + conn.SetReadDeadline(time.Now().Add(c.config.ReadTimeout)) } //fire all OnPong methods go c.fireOnPong() @@ -395,7 +439,7 @@ func (c *connection) startReader() { for { if hasReadTimeout { // set the read deadline based on the configuration - conn.SetReadDeadline(time.Now().Add(c.server.config.ReadTimeout)) + conn.SetReadDeadline(time.Now().Add(c.config.ReadTimeout)) } _, data, err := conn.ReadMessage() @@ -415,15 +459,15 @@ func (c *connection) startReader() { // messageReceived checks the incoming message and fire the nativeMessage listeners or the event listeners (ws custom message) func (c *connection) messageReceived(data []byte) { - if bytes.HasPrefix(data, c.server.config.EvtMessagePrefix) { + if bytes.HasPrefix(data, c.config.EvtMessagePrefix) { //it's a custom ws message - receivedEvt := c.server.messageSerializer.getWebsocketCustomEvent(data) + receivedEvt := c.serializer.getWebsocketCustomEvent(data) listeners, ok := c.onEventListeners[string(receivedEvt)] if !ok || len(listeners) == 0 { return // if not listeners for this event exit from here } - customMessage, err := c.server.messageSerializer.deserialize(receivedEvt, data) + customMessage, err := c.serializer.deserialize(receivedEvt, data) if customMessage == nil || err != nil { return } @@ -518,11 +562,23 @@ func (c *connection) To(to string) Emitter { } func (c *connection) EmitMessage(nativeMessage []byte) error { - return c.self.EmitMessage(nativeMessage) + if c.server != nil { + return c.self.EmitMessage(nativeMessage) + } + return c.writeDefault(nativeMessage) } func (c *connection) Emit(event string, message interface{}) error { - return c.self.Emit(event, message) + if c.server != nil { + return c.self.Emit(event, message) + } + + b, err := c.serializer.serialize(event, message) + if err != nil { + return err + } + + return c.EmitMessage(b) } func (c *connection) OnMessage(cb NativeMessageFunc) { @@ -586,10 +642,24 @@ func (c *connection) Wait() { var ErrAlreadyDisconnected = errors.New("already disconnected") func (c *connection) Disconnect() error { - if c == nil || c.disconnected { + if c == nil || !atomic.CompareAndSwapUint32(&c.disconnected, 0, 1) { return ErrAlreadyDisconnected } - return c.server.Disconnect(c.ID()) + + if c.server != nil { + return c.server.Disconnect(c.ID()) + } + + err := c.underline.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) + if err != nil { + err = c.underline.Close() + } + + if err == nil { + c.fireDisconnect() + } + + return err } // mem per-conn store @@ -632,3 +702,108 @@ func (c *connection) GetValueInt(key string) int { } return 0 } + +// ConnectionConfig is the base configuration for both server and client connections. +// Clients must use `ConnectionConfig` in order to `Dial`, server's connection configuration is set by the `Config` structure. +type ConnectionConfig struct { + // EvtMessagePrefix is the prefix of the underline websocket events that are being established under the hoods. + // This prefix is visible only to the javascript side (code) and it has nothing to do + // with the message that the end-user receives. + // Do not change it unless it is absolutely necessary. + // + // If empty then defaults to []byte("iris-websocket-message:"). + // Should match with the server's EvtMessagePrefix. + EvtMessagePrefix []byte + // WriteTimeout time allowed to write a message to the connection. + // 0 means no timeout. + // Default value is 0 + WriteTimeout time.Duration + // ReadTimeout time allowed to read a message from the connection. + // 0 means no timeout. + // Default value is 0 + ReadTimeout time.Duration + // PongTimeout allowed to read the next pong message from the connection. + // Default value is 60 * time.Second + PongTimeout time.Duration + // PingPeriod send ping messages to the connection within this period. Must be less than PongTimeout. + // Default value is 60 *time.Second + PingPeriod time.Duration + // MaxMessageSize max message size allowed from connection. + // Default value is 1024 + MaxMessageSize int64 + // BinaryMessages set it to true in order to denotes binary data messages instead of utf-8 text + // compatible if you wanna use the Connection's EmitMessage to send a custom binary data to the client, like a native server-client communication. + // Default value is false + BinaryMessages bool + // ReadBufferSize is the buffer size for the connection reader. + // Default value is 4096 + ReadBufferSize int + // WriteBufferSize is the buffer size for the connection writer. + // Default value is 4096 + WriteBufferSize int + // EnableCompression specify if the server should attempt to negotiate per + // message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + // + // Defaults to false and it should be remain as it is, unless special requirements. + EnableCompression bool +} + +// Validate validates the connection configuration. +func (c ConnectionConfig) Validate() ConnectionConfig { + if len(c.EvtMessagePrefix) == 0 { + c.EvtMessagePrefix = []byte(DefaultEvtMessageKey) + } + + // 0 means no timeout. + if c.WriteTimeout < 0 { + c.WriteTimeout = DefaultWebsocketWriteTimeout + } + + if c.ReadTimeout < 0 { + c.ReadTimeout = DefaultWebsocketReadTimeout + } + + if c.PongTimeout < 0 { + c.PongTimeout = DefaultWebsocketPongTimeout + } + + if c.PingPeriod <= 0 { + c.PingPeriod = DefaultWebsocketPingPeriod + } + + if c.MaxMessageSize <= 0 { + c.MaxMessageSize = DefaultWebsocketMaxMessageSize + } + + if c.ReadBufferSize <= 0 { + c.ReadBufferSize = DefaultWebsocketReadBufferSize + } + + if c.WriteBufferSize <= 0 { + c.WriteBufferSize = DefaultWebsocketWriterBufferSize + } + + return c +} + +// Dial opens a new client connection to a WebSocket. +// The "url" input parameter is the url to connect to the server, it should be +// the ws:// (or wss:// if secure) + the host + the endpoint of the +// open socket of the server, i.e ws://localhost:8080/my_websocket_endpoint. +func Dial(url string, cfg ConnectionConfig) (ClientConnection, error) { + if !strings.HasPrefix(url, "ws://") { + url = "ws://" + url + } + + conn, _, err := websocket.DefaultDialer.Dial(url, nil) + if err != nil { + return nil, err + } + + clientConn := newConnection(conn, cfg) + go clientConn.Wait() + + return clientConn, nil +} diff --git a/websocket/server.go b/websocket/server.go index 9bf323ad1..1de429dad 100644 --- a/websocket/server.go +++ b/websocket/server.go @@ -3,6 +3,7 @@ package websocket import ( "bytes" "sync" + "sync/atomic" "github.com/kataras/iris/context" @@ -149,7 +150,7 @@ func (s *Server) handleConnection(ctx context.Context, websocketConn UnderlineCo // use the config's id generator (or the default) to create a websocket client/connection id cid := s.config.IDGenerator(ctx) // create the new connection - c := newConnection(ctx, s, websocketConn, cid) + c := newServerConnection(ctx, s, websocketConn, cid) // add the connection to the Server's list s.addConnection(c) @@ -397,7 +398,7 @@ func (s *Server) Disconnect(connID string) (err error) { // remove the connection from the list. if conn, ok := s.getConnection(connID); ok { - conn.disconnected = true + atomic.StoreUint32(&conn.disconnected, 1) // fire the disconnect callbacks, if any. conn.fireDisconnect() // close the underline connection and return its error, if any. From 71ad442bb8d406b5f888e22df02c3c3c02d883c1 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Thu, 14 Feb 2019 03:28:41 +0200 Subject: [PATCH 12/89] add websocket client stress test, passed and update the vendors (this commit fixes the https://github.com/kataras/iris/issues/1178 and https://github.com/kataras/iris/issues/1173) --- .../go-client-stress-test/client/main.go | 85 ++++ .../go-client-stress-test/client/test.data | 19 + .../go-client-stress-test/server/main.go | 64 +++ _examples/websocket/go-client/client/main.go | 1 + websocket/config.go | 44 +- websocket/connection.go | 92 ++-- websocket/emitter.go | 2 +- websocket/message.go | 3 +- websocket/server.go | 2 - .../github.com/gorilla/websocket/AUTHORS | 17 +- .../github.com/gorilla/websocket/LICENSE | 44 +- .../github.com/gorilla/websocket/README.md | 64 --- .../github.com/gorilla/websocket/client.go | 245 ++++----- .../github.com/gorilla/websocket/conn.go | 211 ++++---- .../gorilla/websocket/conn_read_legacy.go | 21 - .../websocket/{conn_read.go => conn_write.go} | 15 +- .../gorilla/websocket/conn_write_legacy.go | 18 + .../github.com/gorilla/websocket/doc.go | 180 ------- .../github.com/gorilla/websocket/join.go | 42 ++ .../github.com/gorilla/websocket/json.go | 11 +- .../github.com/gorilla/websocket/mask.go | 1 - .../github.com/gorilla/websocket/prepared.go | 1 - .../github.com/gorilla/websocket/proxy.go | 77 +++ .../github.com/gorilla/websocket/server.go | 138 +++-- .../github.com/gorilla/websocket/trace.go | 19 + .../github.com/gorilla/websocket/trace_17.go | 12 + .../github.com/gorilla/websocket/util.go | 165 ++++-- .../gorilla/websocket/x_net_proxy.go | 473 ++++++++++++++++++ websocket/websocket.go | 5 - 29 files changed, 1393 insertions(+), 678 deletions(-) create mode 100644 _examples/websocket/go-client-stress-test/client/main.go create mode 100644 _examples/websocket/go-client-stress-test/client/test.data create mode 100644 _examples/websocket/go-client-stress-test/server/main.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/README.md delete mode 100644 websocket/vendor/github.com/gorilla/websocket/conn_read_legacy.go rename websocket/vendor/github.com/gorilla/websocket/{conn_read.go => conn_write.go} (52%) create mode 100644 websocket/vendor/github.com/gorilla/websocket/conn_write_legacy.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/doc.go create mode 100644 websocket/vendor/github.com/gorilla/websocket/join.go create mode 100644 websocket/vendor/github.com/gorilla/websocket/proxy.go create mode 100644 websocket/vendor/github.com/gorilla/websocket/trace.go create mode 100644 websocket/vendor/github.com/gorilla/websocket/trace_17.go create mode 100644 websocket/vendor/github.com/gorilla/websocket/x_net_proxy.go diff --git a/_examples/websocket/go-client-stress-test/client/main.go b/_examples/websocket/go-client-stress-test/client/main.go new file mode 100644 index 000000000..7d49a1cf7 --- /dev/null +++ b/_examples/websocket/go-client-stress-test/client/main.go @@ -0,0 +1,85 @@ +package main + +import ( + "bufio" + "fmt" + "math/rand" + "os" + "sync" + "time" + + "github.com/kataras/iris/websocket" +) + +var ( + url = "ws://localhost:8080/socket" + f *os.File +) + +const totalClients = 1200 + +func main() { + var err error + f, err = os.Open("./test.data") + if err != nil { + panic(err) + } + defer f.Close() + + wg := new(sync.WaitGroup) + for i := 0; i < totalClients/2; i++ { + wg.Add(1) + go connect(wg, 5*time.Second) + } + + for i := 0; i < totalClients/2; i++ { + wg.Add(1) + waitTime := time.Duration(rand.Intn(10)) * time.Millisecond + time.Sleep(waitTime) + go connect(wg, 10*time.Second+waitTime) + } + + wg.Wait() + fmt.Println("ALL OK.") + time.Sleep(5 * time.Second) +} + +func connect(wg *sync.WaitGroup, alive time.Duration) { + + c, err := websocket.Dial(url, websocket.ConnectionConfig{}) + if err != nil { + panic(err) + } + + c.OnError(func(err error) { + fmt.Printf("error: %v", err) + }) + + disconnected := false + c.OnDisconnect(func() { + fmt.Printf("I am disconnected after [%s].\n", alive) + disconnected = true + }) + + c.On("chat", func(message string) { + fmt.Printf("\n%s\n", message) + }) + + go func() { + time.Sleep(alive) + if err := c.Disconnect(); err != nil { + panic(err) + } + + wg.Done() + }() + + scanner := bufio.NewScanner(f) + for !disconnected { + if !scanner.Scan() || scanner.Err() != nil { + break + } + + c.Emit("chat", scanner.Text()) + } +} diff --git a/_examples/websocket/go-client-stress-test/client/test.data b/_examples/websocket/go-client-stress-test/client/test.data new file mode 100644 index 000000000..be5eb502a --- /dev/null +++ b/_examples/websocket/go-client-stress-test/client/test.data @@ -0,0 +1,19 @@ +Σκουπίζει τη τι αρματωσιά ευρυδίκης κι αποδεχθεί αν εχτύπεσεν. Οι το ζητούσε δεκτικό αφήσουν μπράτσο βλ απ. Φυγή τι έτσι εκ πλάι αυτή θεός ας αδάμ. Αποβαίνει να τι βλ κατάγεται γεγονότος. Μπουφάν ξάπλωσε σχέσεις βλ ας να να. Υποδηλώσει τα τι κι σιδερένιων εξελικτική ως συγκράτησε παιγνιώδης. Προφανώς μου μία σύγχρονο ιστορίας. + +Νερά ψηλά λύπη αφτί ας ψυχή τι λόγω. Του φίλ διά γεφυρώνει ανίχνευση διεύρυνση. Όλο μήπως τομέα πρώτο στους δις νόημα εάν του. Παιδείας ομορφιάς καλύτερα ας με. Παραγωγή προθέαση σε κουλιζάρ παραπάνω υπ. Πώς δικούς στήθος πόντου πως θέατρο θέληση σίδερο. Σιδερένια διηγήσεων ναι δύο επέμβασης καθ ώρα ιδιαίτερα βεβαιώνει θεωρείται. Βλ νερο τη να ύλης μτφρ τέλη. Ας ρόλων τη χώρων υπ αφορά είδος είπεν. + +Ου πάρκαρε παιδικό μάλιστα ιι. Σκοτωθεί απαγωγής ανάλυσης άνθρωποι ιι τραγικού οι. Αναπνοή επέλεξα πομπούς εφ δράσεις να. Νε υλικό ας ως ευρήκ νόρμα ου. Ιι εμάζεψα δεύτερη αλλαγές ατ τα σύζευξη επίπεδο. Συγγραφέα νεότερους κατέγραψε ζωή διά υφολογική. Που απέσ νου στον άρα είδη σούκ νικά ήρωά. Το κανένα τι ιι γωνίας να δεσμός. + +Ροή ρευστότητα στο έλα παραμυθιού διαδικασία ειδυλλιακή. Ελλάδας σύμβαση δε με πομπούς εμφανής. Ατ ως εποχή τρόπο εβγάλ αυτές πεδίο γωνία. Των άνθρωπος μπανιέρα ροζ υφίστατο φίλ. Εδώ ροζ πήρε τύπο πια μην δική. Έζησαν μάλλον ως με δε τρόπου. Παράλληλη από αδιόρατης επισκίασε άρα rites ναι. Πολιτισμού του ειδολογική νέο συνάντησης στα ταυτότητας δημοσίευση. + +Παραλλαγές τόζλουτζας κι ατ συγγραφέας παρωδώντας συνείδησης να. Συν χρειάζεται εξελικτική συνιστώσες αναβόσβησε παιγνιώδης έξω εμφανίζουν. Περίτεχνο κοινωνίας ρου του ηθελημένα την σύγχρονων ζώγ. Συν στα υποτίθεται εις ανακάλυψης νέο κατασκευές. Τεκμήρια επίλογοι περίοδος σου εξω στα αγγελίες ποικίλες. Γι παραμένει συμβάντος ακολούθως δε κι να υπόστρωμα. Τη θάρρος θεϊκού να μικρές αηδίες σοφίας πρέπει. Γιατί ευρήκ σοφία αίσια και όνομά για επικό την. Έστειλεν οι σύνδρομο αληθινής κι με εξυπνάδα υπέδειξε αδειάσει. + +Πω δε φοβηθώ ας σε μιχάλη ακουσε όμορφα εφόδιο. Ελέγχοντας διαχείριση όλα αναπαράγει συν στα εάν. Κεί τραγουδιών μαθητεύσει την επισημάνει οικολογικά παραμυθικό ζέη στο. Λαϊκού ατότες εξω μια την ακούμε. Δεδομένου ας τα αγαπημένο παρουσίας διαθέσεων αν. Αντίστροφα ρεαλιστικό περιπέτεια διαδικασία άρα ατο ημερολόγια. + +Άντλησης νεόφερτο μοναδικό εκ ιι δυναμική μηνύματα. Συγγραφική προ έξω την περιπέτεια εγχειρίδια μαθητεύσει εκφέρονται. Εάν δεν μαρί άρα ήχοι ατο κόρη. Εν ας επομένως κινήματα άνθρωποι. Ου δάσος τι υπ γιατί πόνος όποια αυτός. Δεύτερη δέχεται το χρονικά αχιλλέα μη. Τα απαγωγή ου ακριβώς θηλάσει. Οι παραγωγή τα παιγνίδι απ παιδικών τρομάξει. + +Ιστορικά ανθρώπου οπλιστεί εκκίνηση στα μερ χάσματος αργότερα. Κοινωνία επιδίωξη κοιμάται πια πειστική διά πιο απ΄. Εκ οι εύκολα γονείς σύζυγο κι πολλοί με φυσερά. Εκ τα μέτωπο το κύματα δηλαδή όμορφα φανερό πράγμα. Νωρίτερα ομορφιάς διαμέσου ζώγ ανέδειξε υπό πρόσμιξη. Επιδιώκει τις όλη μια βεβαιώνει μελετηθεί μία. Παρατηρεί υιοθετούν ροή ανθρώπινη τον επέστρεψε κατασκευή πια. + +Αναπνοή επί νυχτικά εις σηκώνει τράβηξε γερανού χάλκενα. Αν αδειάσει ποικίλες νε δυναμικό. Όπως δύο αυτό ένα δέβα αυτο από νέοι πάλι. Έως υποβάλλουν αποτέλεσμα εξω σην συγχρονική μεσημεριού. Όλα νέο νου εναντίον σκέπαζαν τον διδάσκει σπουδαίο. Ακόμη πι ως έργου σοφοί δε τα. Σώματος απόλυτα εν τέτοιες διάφορα ατ πι τι. Ως ατ κοινού έμαθες πλάκες. Τα τη συνοχή έκρυβε οποίος σταθεί παίκτη. + +Με σύγχρονης βρίσκεται αποτέλεσε πα τα ελληνικής. Ανακοίνωσή τις στο ουσιαστικό πολλαπλούς τις φιλολογική σου. Φιλολογική να κι κι μορφολογία μυθοπλασία πω. Τυχόν βαθιά ου λόγια έχουν να. Μικρούς έχοντας με χαμένης τη μη. Μοντέλα συνήθως επί θεωρίες χρονικά όλα χάλκενα. Διήγημα θεωρίας ατ βαγγέλη βλ νε αρ ευτελής μαγείας. diff --git a/_examples/websocket/go-client-stress-test/server/main.go b/_examples/websocket/go-client-stress-test/server/main.go new file mode 100644 index 000000000..0519323a0 --- /dev/null +++ b/_examples/websocket/go-client-stress-test/server/main.go @@ -0,0 +1,64 @@ +package main + +import ( + "fmt" + "os" + "sync/atomic" + "time" + + "github.com/kataras/iris" + "github.com/kataras/iris/websocket" +) + +const totalClients = 1200 + +func main() { + app := iris.New() + + // websocket.Config{PingPeriod: ((60 * time.Second) * 9) / 10} + ws := websocket.New(websocket.Config{}) + ws.OnConnection(handleConnection) + app.Get("/socket", ws.Handler()) + + go func() { + t := time.NewTicker(2 * time.Second) + for { + <-t.C + + conns := ws.GetConnections() + for _, conn := range conns { + // fmt.Println(conn.ID()) + // Do nothing. + _ = conn + } + + if atomic.LoadUint64(&count) == totalClients { + fmt.Println("ALL CLIENTS DISCONNECTED SUCCESSFULLY.") + t.Stop() + os.Exit(0) + return + } + } + }() + + app.Run(iris.Addr(":8080")) +} + +func handleConnection(c websocket.Connection) { + c.OnError(func(err error) { handleErr(c, err) }) + c.OnDisconnect(func() { handleDisconnect(c) }) + c.On("chat", func(message string) { + c.To(websocket.Broadcast).Emit("chat", c.ID()+": "+message) + }) +} + +var count uint64 + +func handleDisconnect(c websocket.Connection) { + atomic.AddUint64(&count, 1) + fmt.Printf("client [%s] disconnected!\n", c.ID()) +} + +func handleErr(c websocket.Connection, err error) { + fmt.Printf("client [%s] errored: %v\n", c.ID(), err) +} diff --git a/_examples/websocket/go-client/client/main.go b/_examples/websocket/go-client/client/main.go index f89f18039..2d1ded6d5 100644 --- a/_examples/websocket/go-client/client/main.go +++ b/_examples/websocket/go-client/client/main.go @@ -21,6 +21,7 @@ $ go run main.go >> hi! */ func main() { + // `websocket.DialContext` is also available. c, err := websocket.Dial(url, websocket.ConnectionConfig{}) if err != nil { panic(err) diff --git a/websocket/config.go b/websocket/config.go index 68be4f751..145ea2a68 100644 --- a/websocket/config.go +++ b/websocket/config.go @@ -15,16 +15,15 @@ const ( DefaultWebsocketWriteTimeout = 0 // DefaultWebsocketReadTimeout 0, no timeout DefaultWebsocketReadTimeout = 0 - // DefaultWebsocketPongTimeout 60 * time.Second - DefaultWebsocketPongTimeout = 60 * time.Second - // DefaultWebsocketPingPeriod (DefaultPongTimeout * 9) / 10 - DefaultWebsocketPingPeriod = (DefaultWebsocketPongTimeout * 9) / 10 - // DefaultWebsocketMaxMessageSize 1024 - DefaultWebsocketMaxMessageSize = 1024 - // DefaultWebsocketReadBufferSize 4096 - DefaultWebsocketReadBufferSize = 4096 - // DefaultWebsocketWriterBufferSize 4096 - DefaultWebsocketWriterBufferSize = 4096 + // DefaultWebsocketPingPeriod is 0 but + // could be 10 * time.Second. + DefaultWebsocketPingPeriod = 0 + // DefaultWebsocketMaxMessageSize 0 + DefaultWebsocketMaxMessageSize = 0 + // DefaultWebsocketReadBufferSize 0 + DefaultWebsocketReadBufferSize = 0 + // DefaultWebsocketWriterBufferSize 0 + DefaultWebsocketWriterBufferSize = 0 // DefaultEvtMessageKey is the default prefix of the underline websocket events // that are being established under the hoods. // @@ -76,11 +75,9 @@ type Config struct { // 0 means no timeout. // Default value is 0 ReadTimeout time.Duration - // PongTimeout allowed to read the next pong message from the connection. - // Default value is 60 * time.Second - PongTimeout time.Duration - // PingPeriod send ping messages to the connection within this period. Must be less than PongTimeout. - // Default value is 60 *time.Second + // PingPeriod send ping messages to the connection repeatedly after this period. + // The value should be close to the ReadTimeout to avoid issues. + // Default value is 0. PingPeriod time.Duration // MaxMessageSize max message size allowed from connection. // Default value is 1024 @@ -89,12 +86,13 @@ type Config struct { // compatible if you wanna use the Connection's EmitMessage to send a custom binary data to the client, like a native server-client communication. // Default value is false BinaryMessages bool - // ReadBufferSize is the buffer size for the connection reader. - // Default value is 4096 - ReadBufferSize int - // WriteBufferSize is the buffer size for the connection writer. - // Default value is 4096 - WriteBufferSize int + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer + // size is zero, then buffers allocated by the HTTP server are used. The + // I/O buffer sizes do not limit the size of the messages that can be sent + // or received. + // + // Default value is 0. + ReadBufferSize, WriteBufferSize int // EnableCompression specify if the server should attempt to negotiate per // message compression (RFC 7692). Setting this value to true does not // guarantee that compression will be supported. Currently only "no context @@ -121,10 +119,6 @@ func (c Config) Validate() Config { c.ReadTimeout = DefaultWebsocketReadTimeout } - if c.PongTimeout < 0 { - c.PongTimeout = DefaultWebsocketPongTimeout - } - if c.PingPeriod <= 0 { c.PingPeriod = DefaultWebsocketPingPeriod } diff --git a/websocket/connection.go b/websocket/connection.go index 821d812bc..b2b7afaba 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -2,6 +2,7 @@ package websocket import ( "bytes" + stdContext "context" "errors" "io" "net" @@ -278,6 +279,12 @@ type ( var _ Connection = &connection{} +// WrapConnection wraps the underline websocket connection into a new iris websocket connection. +// The caller should call the `connection#Wait` (which blocks) to enable its read and write functionality. +func WrapConnection(underlineConn UnderlineConnection, cfg ConnectionConfig) Connection { + return newConnection(underlineConn, cfg) +} + func newConnection(underlineConn UnderlineConnection, cfg ConnectionConfig) *connection { cfg = cfg.Validate() c := &connection{ @@ -306,7 +313,6 @@ func newServerConnection(ctx context.Context, s *Server, underlineConn Underline EvtMessagePrefix: s.config.EvtMessagePrefix, WriteTimeout: s.config.WriteTimeout, ReadTimeout: s.config.ReadTimeout, - PongTimeout: s.config.PongTimeout, PingPeriod: s.config.PingPeriod, MaxMessageSize: s.config.MaxMessageSize, BinaryMessages: s.config.BinaryMessages, @@ -383,24 +389,25 @@ func (c *connection) startPinger() { c.underline.SetPingHandler(pingHandler) - go func() { - for { - // using sleep avoids the ticker error that causes a memory leak - time.Sleep(c.config.PingPeriod) - if atomic.LoadUint32(&c.disconnected) > 0 { - // verifies if already disconected - break - } - //fire all OnPing methods - c.fireOnPing() - // try to ping the client, if failed then it disconnects - err := c.Write(websocket.PingMessage, []byte{}) - if err != nil { - // must stop to exit the loop and finish the go routine - break + if c.config.PingPeriod > 0 { + go func() { + for { + time.Sleep(c.config.PingPeriod) + if c == nil || atomic.LoadUint32(&c.disconnected) > 0 { + // verifies if already disconected. + return + } + //fire all OnPing methods + c.fireOnPing() + // try to ping the client, if failed then it disconnects. + err := c.Write(websocket.PingMessage, []byte{}) + if err != nil { + // must stop to exit the loop and exit from the routine. + return + } } - } - }() + }() + } } func (c *connection) fireOnPing() { @@ -444,14 +451,13 @@ func (c *connection) startReader() { _, data, err := conn.ReadMessage() if err != nil { - if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { + if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure, websocket.CloseNormalClosure) { c.FireOnError(err) } - break - } else { - c.messageReceived(data) + return } + c.messageReceived(data) } } @@ -722,14 +728,12 @@ type ConnectionConfig struct { // 0 means no timeout. // Default value is 0 ReadTimeout time.Duration - // PongTimeout allowed to read the next pong message from the connection. - // Default value is 60 * time.Second - PongTimeout time.Duration - // PingPeriod send ping messages to the connection within this period. Must be less than PongTimeout. - // Default value is 60 *time.Second + // PingPeriod send ping messages to the connection repeatedly after this period. + // The value should be close to the ReadTimeout to avoid issues. + // Default value is 0 PingPeriod time.Duration // MaxMessageSize max message size allowed from connection. - // Default value is 1024 + // Default value is 0. Unlimited but it is recommended to be 1024 for medium to large messages. MaxMessageSize int64 // BinaryMessages set it to true in order to denotes binary data messages instead of utf-8 text // compatible if you wanna use the Connection's EmitMessage to send a custom binary data to the client, like a native server-client communication. @@ -765,10 +769,6 @@ func (c ConnectionConfig) Validate() ConnectionConfig { c.ReadTimeout = DefaultWebsocketReadTimeout } - if c.PongTimeout < 0 { - c.PongTimeout = DefaultWebsocketPongTimeout - } - if c.PingPeriod <= 0 { c.PingPeriod = DefaultWebsocketPingPeriod } @@ -788,22 +788,42 @@ func (c ConnectionConfig) Validate() ConnectionConfig { return c } -// Dial opens a new client connection to a WebSocket. +// ErrBadHandshake is returned when the server response to opening handshake is +// invalid. +var ErrBadHandshake = websocket.ErrBadHandshake + +// DialContext creates a new client connection. +// +// The context will be used in the request and in the Dialer. +// +// If the WebSocket handshake fails, `ErrBadHandshake` is returned. +// // The "url" input parameter is the url to connect to the server, it should be // the ws:// (or wss:// if secure) + the host + the endpoint of the // open socket of the server, i.e ws://localhost:8080/my_websocket_endpoint. -func Dial(url string, cfg ConnectionConfig) (ClientConnection, error) { +// +// Custom dialers can be used by wrapping the iris websocket connection via `websocket.WrapConnection`. +func DialContext(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { + if ctx == nil { + ctx = stdContext.Background() + } + if !strings.HasPrefix(url, "ws://") { url = "ws://" + url } - conn, _, err := websocket.DefaultDialer.Dial(url, nil) + conn, _, err := websocket.DefaultDialer.DialContext(ctx, url, nil) if err != nil { return nil, err } - clientConn := newConnection(conn, cfg) + clientConn := WrapConnection(conn, cfg) go clientConn.Wait() return clientConn, nil } + +// Dial creates a new client connection by calling `DialContext` with a background context. +func Dial(url string, cfg ConnectionConfig) (ClientConnection, error) { + return DialContext(stdContext.Background(), url, cfg) +} diff --git a/websocket/emitter.go b/websocket/emitter.go index d8ae087d8..84d1fa485 100644 --- a/websocket/emitter.go +++ b/websocket/emitter.go @@ -34,7 +34,7 @@ func (e *emitter) EmitMessage(nativeMessage []byte) error { } func (e *emitter) Emit(event string, data interface{}) error { - message, err := e.conn.server.messageSerializer.serialize(event, data) + message, err := e.conn.serializer.serialize(event, data) if err != nil { return err } diff --git a/websocket/message.go b/websocket/message.go index 804baa3c2..6b27fbeec 100644 --- a/websocket/message.go +++ b/websocket/message.go @@ -81,7 +81,7 @@ var ( ) // websocketMessageSerialize serializes a custom websocket message from websocketServer to be delivered to the client -// returns the string form of the message +// returns the string form of the message // Supported data types are: string, int, bool, bytes and JSON. func (ms *messageSerializer) serialize(event string, data interface{}) ([]byte, error) { b := ms.buf.Get() @@ -114,6 +114,7 @@ func (ms *messageSerializer) serialize(event string, data interface{}) ([]byte, //we suppose is json res, err := json.Marshal(data) if err != nil { + ms.buf.Put(b) return nil, err } b.WriteString(messageTypeJSON.String()) diff --git a/websocket/server.go b/websocket/server.go index 1de429dad..6b9b61302 100644 --- a/websocket/server.go +++ b/websocket/server.go @@ -44,7 +44,6 @@ type ( // Use a route to serve this file on a specific path, i.e // app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(mywebsocketServer.ClientSource) }) ClientSource []byte - messageSerializer *messageSerializer connections map[string]*connection // key = the Connection ID. rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name mu sync.RWMutex // for rooms and connections. @@ -64,7 +63,6 @@ func New(cfg Config) *Server { return &Server{ config: cfg, ClientSource: bytes.Replace(ClientSource, []byte(DefaultEvtMessageKey), cfg.EvtMessagePrefix, -1), - messageSerializer: newMessageSerializer(cfg.EvtMessagePrefix), connections: make(map[string]*connection), rooms: make(map[string][]string), onConnectionListeners: make([]ConnectionFunc, 0), diff --git a/websocket/vendor/github.com/gorilla/websocket/AUTHORS b/websocket/vendor/github.com/gorilla/websocket/AUTHORS index 7d7fd53be..1931f4006 100644 --- a/websocket/vendor/github.com/gorilla/websocket/AUTHORS +++ b/websocket/vendor/github.com/gorilla/websocket/AUTHORS @@ -1,8 +1,9 @@ -# This is the official list of Gorilla WebSocket authors for copyright -# purposes. -# -# Please keep the list sorted. - -Gary Burd -Joachim Bauch - +# This is the official list of Gorilla WebSocket authors for copyright +# purposes. +# +# Please keep the list sorted. + +Gary Burd +Google LLC (https://opensource.google.com/) +Joachim Bauch + diff --git a/websocket/vendor/github.com/gorilla/websocket/LICENSE b/websocket/vendor/github.com/gorilla/websocket/LICENSE index 6b2f6e2f5..9171c9722 100644 --- a/websocket/vendor/github.com/gorilla/websocket/LICENSE +++ b/websocket/vendor/github.com/gorilla/websocket/LICENSE @@ -1,22 +1,22 @@ -Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/websocket/vendor/github.com/gorilla/websocket/README.md b/websocket/vendor/github.com/gorilla/websocket/README.md deleted file mode 100644 index 49639c7fe..000000000 --- a/websocket/vendor/github.com/gorilla/websocket/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Gorilla WebSocket - -Gorilla WebSocket is a [Go](http://golang.org/) implementation of the -[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. - -[![Build Status](https://travis-ci.org/gorilla/websocket.svg?branch=master)](https://travis-ci.org/gorilla/websocket) -[![GoDoc](https://godoc.org/github.com/gorilla/websocket?status.svg)](https://godoc.org/github.com/gorilla/websocket) - -### Documentation - -* [API Reference](http://godoc.org/github.com/gorilla/websocket) -* [Chat example](https://github.com/gorilla/websocket/tree/master/examples/chat) -* [Command example](https://github.com/gorilla/websocket/tree/master/examples/command) -* [Client and server example](https://github.com/gorilla/websocket/tree/master/examples/echo) -* [File watch example](https://github.com/gorilla/websocket/tree/master/examples/filewatch) - -### Status - -The Gorilla WebSocket package provides a complete and tested implementation of -the [WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. The -package API is stable. - -### Installation - - go get github.com/gorilla/websocket - -### Protocol Compliance - -The Gorilla WebSocket package passes the server tests in the [Autobahn Test -Suite](http://autobahn.ws/testsuite) using the application in the [examples/autobahn -subdirectory](https://github.com/gorilla/websocket/tree/master/examples/autobahn). - -### Gorilla WebSocket compared with other packages - - - - - - - - - - - - - - - - - - -
github.com/gorillagolang.org/x/net
RFC 6455 Features
Passes Autobahn Test SuiteYesNo
Receive fragmented messageYesNo, see note 1
Send close messageYesNo
Send pings and receive pongsYesNo
Get the type of a received data messageYesYes, see note 2
Other Features
Compression ExtensionsExperimentalNo
Read message using io.ReaderYesNo, see note 3
Write message using io.WriteCloserYesNo, see note 3
- -Notes: - -1. Large messages are fragmented in [Chrome's new WebSocket implementation](http://www.ietf.org/mail-archive/web/hybi/current/msg10503.html). -2. The application can get the type of a received data message by implementing - a [Codec marshal](http://godoc.org/golang.org/x/net/websocket#Codec.Marshal) - function. -3. The go.net io.Reader and io.Writer operate across WebSocket frame boundaries. - Read returns when the input buffer is full or a frame boundary is - encountered. Each call to Write sends a single frame message. The Gorilla - io.Reader and io.WriteCloser operate on a single WebSocket message. - diff --git a/websocket/vendor/github.com/gorilla/websocket/client.go b/websocket/vendor/github.com/gorilla/websocket/client.go index 43a87c753..962c06a39 100644 --- a/websocket/vendor/github.com/gorilla/websocket/client.go +++ b/websocket/vendor/github.com/gorilla/websocket/client.go @@ -5,15 +5,15 @@ package websocket import ( - "bufio" "bytes" + "context" "crypto/tls" - "encoding/base64" "errors" "io" "io/ioutil" "net" "net/http" + "net/http/httptrace" "net/url" "strings" "time" @@ -53,6 +53,10 @@ type Dialer struct { // NetDial is nil, net.Dial is used. NetDial func(network, addr string) (net.Conn, error) + // NetDialContext specifies the dial function for creating TCP connections. If + // NetDialContext is nil, net.DialContext is used. + NetDialContext func(ctx context.Context, network, addr string) (net.Conn, error) + // Proxy specifies a function to return a proxy for a given // Request. If the function returns a non-nil error, the // request is aborted with the provided error. @@ -66,11 +70,22 @@ type Dialer struct { // HandshakeTimeout specifies the duration for the handshake to complete. HandshakeTimeout time.Duration - // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer // size is zero, then a useful default size is used. The I/O buffer sizes // do not limit the size of the messages that can be sent or received. ReadBufferSize, WriteBufferSize int + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + // Subprotocols specifies the client's requested subprotocols. Subprotocols []string @@ -86,52 +101,13 @@ type Dialer struct { Jar http.CookieJar } -var errMalformedURL = errors.New("malformed ws or wss URL") - -// parseURL parses the URL. -// -// This function is a replacement for the standard library url.Parse function. -// In Go 1.4 and earlier, url.Parse loses information from the path. -func parseURL(s string) (*url.URL, error) { - // From the RFC: - // - // ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ] - // wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ] - var u url.URL - switch { - case strings.HasPrefix(s, "ws://"): - u.Scheme = "ws" - s = s[len("ws://"):] - case strings.HasPrefix(s, "wss://"): - u.Scheme = "wss" - s = s[len("wss://"):] - default: - return nil, errMalformedURL - } - - if i := strings.Index(s, "?"); i >= 0 { - u.RawQuery = s[i+1:] - s = s[:i] - } - - if i := strings.Index(s, "/"); i >= 0 { - u.Opaque = s[i:] - s = s[:i] - } else { - u.Opaque = "/" - } - - u.Host = s - - if strings.Contains(u.Host, "@") { - // Don't bother parsing user information because user information is - // not allowed in websocket URIs. - return nil, errMalformedURL - } - - return &u, nil +// Dial creates a new client connection by calling DialContext with a background context. +func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + return d.DialContext(context.Background(), urlStr, requestHeader) } +var errMalformedURL = errors.New("malformed ws or wss URL") + func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { hostPort = u.Host hostNoPort = u.Host @@ -150,26 +126,29 @@ func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { return hostPort, hostNoPort } -// DefaultDialer is a dialer with all fields set to the default zero values. +// DefaultDialer is a dialer with all fields set to the default values. var DefaultDialer = &Dialer{ - Proxy: http.ProxyFromEnvironment, + Proxy: http.ProxyFromEnvironment, + HandshakeTimeout: 45 * time.Second, } -// Dial creates a new client connection. Use requestHeader to specify the +// nilDialer is dialer to use when receiver is nil. +var nilDialer = *DefaultDialer + +// DialContext creates a new client connection. Use requestHeader to specify the // origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). // Use the response.Header to get the selected subprotocol // (Sec-WebSocket-Protocol) and cookies (Set-Cookie). // +// The context will be used in the request and in the Dialer. +// // If the WebSocket handshake fails, ErrBadHandshake is returned along with a // non-nil *http.Response so that callers can handle redirects, authentication, // etcetera. The response body may not contain the entire response and does not // need to be closed by the application. -func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { - +func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { if d == nil { - d = &Dialer{ - Proxy: http.ProxyFromEnvironment, - } + d = &nilDialer } challengeKey, err := generateChallengeKey() @@ -177,7 +156,7 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re return nil, nil, err } - u, err := parseURL(urlStr) + u, err := url.Parse(urlStr) if err != nil { return nil, nil, err } @@ -205,6 +184,7 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re Header: make(http.Header), Host: u.Host, } + req = req.WithContext(ctx) // Set the cookies present in the cookie jar of the dialer if d.Jar != nil { @@ -237,45 +217,83 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re k == "Sec-Websocket-Extensions" || (k == "Sec-Websocket-Protocol" && len(d.Subprotocols) > 0): return nil, nil, errors.New("websocket: duplicate header not allowed: " + k) + case k == "Sec-Websocket-Protocol": + req.Header["Sec-WebSocket-Protocol"] = vs default: req.Header[k] = vs } } if d.EnableCompression { - req.Header.Set("Sec-Websocket-Extensions", "permessage-deflate; server_no_context_takeover; client_no_context_takeover") + req.Header["Sec-WebSocket-Extensions"] = []string{"permessage-deflate; server_no_context_takeover; client_no_context_takeover"} } - hostPort, hostNoPort := hostPortNoPort(u) - - var proxyURL *url.URL - // Check wether the proxy method has been configured - if d.Proxy != nil { - proxyURL, err = d.Proxy(req) - } - if err != nil { - return nil, nil, err + if d.HandshakeTimeout != 0 { + var cancel func() + ctx, cancel = context.WithTimeout(ctx, d.HandshakeTimeout) + defer cancel() } - var targetHostPort string - if proxyURL != nil { - targetHostPort, _ = hostPortNoPort(proxyURL) + // Get network dial function. + var netDial func(network, add string) (net.Conn, error) + + if d.NetDialContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialContext(ctx, network, addr) + } + } else if d.NetDial != nil { + netDial = d.NetDial } else { - targetHostPort = hostPort + netDialer := &net.Dialer{} + netDial = func(network, addr string) (net.Conn, error) { + return netDialer.DialContext(ctx, network, addr) + } } - var deadline time.Time - if d.HandshakeTimeout != 0 { - deadline = time.Now().Add(d.HandshakeTimeout) + // If needed, wrap the dial function to set the connection deadline. + if deadline, ok := ctx.Deadline(); ok { + forwardDial := netDial + netDial = func(network, addr string) (net.Conn, error) { + c, err := forwardDial(network, addr) + if err != nil { + return nil, err + } + err = c.SetDeadline(deadline) + if err != nil { + c.Close() + return nil, err + } + return c, nil + } } - netDial := d.NetDial - if netDial == nil { - netDialer := &net.Dialer{Deadline: deadline} - netDial = netDialer.Dial + // If needed, wrap the dial function to connect through a proxy. + if d.Proxy != nil { + proxyURL, err := d.Proxy(req) + if err != nil { + return nil, nil, err + } + if proxyURL != nil { + dialer, err := proxy_FromURL(proxyURL, netDialerFunc(netDial)) + if err != nil { + return nil, nil, err + } + netDial = dialer.Dial + } + } + + hostPort, hostNoPort := hostPortNoPort(u) + trace := httptrace.ContextClientTrace(ctx) + if trace != nil && trace.GetConn != nil { + trace.GetConn(hostPort) } - netConn, err := netDial("tcp", targetHostPort) + netConn, err := netDial("tcp", hostPort) + if trace != nil && trace.GotConn != nil { + trace.GotConn(httptrace.GotConnInfo{ + Conn: netConn, + }) + } if err != nil { return nil, nil, err } @@ -286,42 +304,6 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re } }() - if err := netConn.SetDeadline(deadline); err != nil { - return nil, nil, err - } - - if proxyURL != nil { - connectHeader := make(http.Header) - if user := proxyURL.User; user != nil { - proxyUser := user.Username() - if proxyPassword, passwordSet := user.Password(); passwordSet { - credential := base64.StdEncoding.EncodeToString([]byte(proxyUser + ":" + proxyPassword)) - connectHeader.Set("Proxy-Authorization", "Basic "+credential) - } - } - connectReq := &http.Request{ - Method: "CONNECT", - URL: &url.URL{Opaque: hostPort}, - Host: hostPort, - Header: connectHeader, - } - - connectReq.Write(netConn) - - // Read response. - // Okay to use and discard buffered reader here, because - // TLS server will not speak until spoken to. - br := bufio.NewReader(netConn) - resp, err := http.ReadResponse(br, connectReq) - if err != nil { - return nil, nil, err - } - if resp.StatusCode != 200 { - f := strings.SplitN(resp.Status, " ", 2) - return nil, nil, errors.New(f[1]) - } - } - if u.Scheme == "https" { cfg := cloneTLSConfig(d.TLSClientConfig) if cfg.ServerName == "" { @@ -329,22 +311,31 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re } tlsConn := tls.Client(netConn, cfg) netConn = tlsConn - if err := tlsConn.Handshake(); err != nil { - return nil, nil, err + + var err error + if trace != nil { + err = doHandshakeWithTrace(trace, tlsConn, cfg) + } else { + err = doHandshake(tlsConn, cfg) } - if !cfg.InsecureSkipVerify { - if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { - return nil, nil, err - } + + if err != nil { + return nil, nil, err } } - conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize) + conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize, d.WriteBufferPool, nil, nil) if err := req.Write(netConn); err != nil { return nil, nil, err } + if trace != nil && trace.GotFirstResponseByte != nil { + if peek, err := conn.br.Peek(1); err == nil && len(peek) == 1 { + trace.GotFirstResponseByte() + } + } + resp, err := http.ReadResponse(conn.br, req) if err != nil { return nil, nil, err @@ -390,3 +381,15 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re netConn = nil // to avoid close in defer. return conn, resp, nil } + +func doHandshake(tlsConn *tls.Conn, cfg *tls.Config) error { + if err := tlsConn.Handshake(); err != nil { + return err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return err + } + } + return nil +} diff --git a/websocket/vendor/github.com/gorilla/websocket/conn.go b/websocket/vendor/github.com/gorilla/websocket/conn.go index 97e1dbacb..3848ab4a9 100644 --- a/websocket/vendor/github.com/gorilla/websocket/conn.go +++ b/websocket/vendor/github.com/gorilla/websocket/conn.go @@ -76,7 +76,7 @@ const ( // is UTF-8 encoded text. PingMessage = 9 - // PongMessage denotes a ping control message. The optional message payload + // PongMessage denotes a pong control message. The optional message payload // is UTF-8 encoded text. PongMessage = 10 ) @@ -100,9 +100,8 @@ func (e *netError) Error() string { return e.msg } func (e *netError) Temporary() bool { return e.temporary } func (e *netError) Timeout() bool { return e.timeout } -// CloseError represents close frame. +// CloseError represents a close message. type CloseError struct { - // Code is defined in RFC 6455, section 11.7. Code int @@ -224,6 +223,20 @@ func isValidReceivedCloseCode(code int) bool { return validReceivedCloseCodes[code] || (code >= 3000 && code <= 4999) } +// BufferPool represents a pool of buffers. The *sync.Pool type satisfies this +// interface. The type of the value stored in a pool is not specified. +type BufferPool interface { + // Get gets a value from the pool or returns nil if the pool is empty. + Get() interface{} + // Put adds a value to the pool. + Put(interface{}) +} + +// writePoolData is the type added to the write buffer pool. This wrapper is +// used to prevent applications from peeking at and depending on the values +// added to the pool. +type writePoolData struct{ buf []byte } + // The Conn type represents a WebSocket connection. type Conn struct { conn net.Conn @@ -233,6 +246,8 @@ type Conn struct { // Write fields mu chan bool // used as mutex to protect write to conn writeBuf []byte // frame is constructed in this buffer. + writePool BufferPool + writeBufSize int writeDeadline time.Time writer io.WriteCloser // the current writer returned to the application isWriting bool // for best-effort concurrent write detection @@ -264,64 +279,29 @@ type Conn struct { newDecompressionReader func(io.Reader) io.ReadCloser } -func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int) *Conn { - return newConnBRW(conn, isServer, readBufferSize, writeBufferSize, nil) -} - -type writeHook struct { - p []byte -} +func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int, writeBufferPool BufferPool, br *bufio.Reader, writeBuf []byte) *Conn { -func (wh *writeHook) Write(p []byte) (int, error) { - wh.p = p - return len(p), nil -} - -func newConnBRW(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int, brw *bufio.ReadWriter) *Conn { - mu := make(chan bool, 1) - mu <- true - - var br *bufio.Reader - if readBufferSize == 0 && brw != nil && brw.Reader != nil { - // Reuse the supplied bufio.Reader if the buffer has a useful size. - // This code assumes that peek on a reader returns - // bufio.Reader.buf[:0]. - brw.Reader.Reset(conn) - if p, err := brw.Reader.Peek(0); err == nil && cap(p) >= 256 { - br = brw.Reader - } - } if br == nil { if readBufferSize == 0 { readBufferSize = defaultReadBufferSize - } - if readBufferSize < maxControlFramePayloadSize { + } else if readBufferSize < maxControlFramePayloadSize { + // must be large enough for control frame readBufferSize = maxControlFramePayloadSize } br = bufio.NewReaderSize(conn, readBufferSize) } - var writeBuf []byte - if writeBufferSize == 0 && brw != nil && brw.Writer != nil { - // Use the bufio.Writer's buffer if the buffer has a useful size. This - // code assumes that bufio.Writer.buf[:1] is passed to the - // bufio.Writer's underlying writer. - var wh writeHook - brw.Writer.Reset(&wh) - brw.Writer.WriteByte(0) - brw.Flush() - if cap(wh.p) >= maxFrameHeaderSize+256 { - writeBuf = wh.p[:cap(wh.p)] - } + if writeBufferSize <= 0 { + writeBufferSize = defaultWriteBufferSize } + writeBufferSize += maxFrameHeaderSize - if writeBuf == nil { - if writeBufferSize == 0 { - writeBufferSize = defaultWriteBufferSize - } - writeBuf = make([]byte, writeBufferSize+maxFrameHeaderSize) + if writeBuf == nil && writeBufferPool == nil { + writeBuf = make([]byte, writeBufferSize) } + mu := make(chan bool, 1) + mu <- true c := &Conn{ isServer: isServer, br: br, @@ -329,6 +309,8 @@ func newConnBRW(conn net.Conn, isServer bool, readBufferSize, writeBufferSize in mu: mu, readFinal: true, writeBuf: writeBuf, + writePool: writeBufferPool, + writeBufSize: writeBufferSize, enableWriteCompression: true, compressionLevel: defaultCompressionLevel, } @@ -343,7 +325,8 @@ func (c *Conn) Subprotocol() string { return c.subprotocol } -// Close closes the underlying network connection without sending or waiting for a close frame. +// Close closes the underlying network connection without sending or waiting +// for a close message. func (c *Conn) Close() error { return c.conn.Close() } @@ -370,7 +353,16 @@ func (c *Conn) writeFatal(err error) error { return err } -func (c *Conn) write(frameType int, deadline time.Time, bufs ...[]byte) error { +func (c *Conn) read(n int) ([]byte, error) { + p, err := c.br.Peek(n) + if err == io.EOF { + err = errUnexpectedEOF + } + c.br.Discard(len(p)) + return p, err +} + +func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error { <-c.mu defer func() { c.mu <- true }() @@ -382,15 +374,14 @@ func (c *Conn) write(frameType int, deadline time.Time, bufs ...[]byte) error { } c.conn.SetWriteDeadline(deadline) - for _, buf := range bufs { - if len(buf) > 0 { - _, err := c.conn.Write(buf) - if err != nil { - return c.writeFatal(err) - } - } + if len(buf1) == 0 { + _, err = c.conn.Write(buf0) + } else { + err = c.writeBufs(buf0, buf1) + } + if err != nil { + return c.writeFatal(err) } - if frameType == CloseMessage { c.writeFatal(ErrCloseSent) } @@ -460,7 +451,8 @@ func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) er return err } -func (c *Conn) prepWrite(messageType int) error { +// beginMessage prepares a connection and message writer for a new message. +func (c *Conn) beginMessage(mw *messageWriter, messageType int) error { // Close previous writer if not already closed by the application. It's // probably better to return an error in this situation, but we cannot // change this without breaking existing applications. @@ -476,7 +468,23 @@ func (c *Conn) prepWrite(messageType int) error { c.writeErrMu.Lock() err := c.writeErr c.writeErrMu.Unlock() - return err + if err != nil { + return err + } + + mw.c = c + mw.frameType = messageType + mw.pos = maxFrameHeaderSize + + if c.writeBuf == nil { + wpd, ok := c.writePool.Get().(writePoolData) + if ok { + c.writeBuf = wpd.buf + } else { + c.writeBuf = make([]byte, c.writeBufSize) + } + } + return nil } // NextWriter returns a writer for the next message to send. The writer's Close @@ -484,17 +492,15 @@ func (c *Conn) prepWrite(messageType int) error { // // There can be at most one open writer on a connection. NextWriter closes the // previous writer if the application has not already done so. +// +// All message types (TextMessage, BinaryMessage, CloseMessage, PingMessage and +// PongMessage) are supported. func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { - if err := c.prepWrite(messageType); err != nil { + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { return nil, err } - - mw := &messageWriter{ - c: c, - frameType: messageType, - pos: maxFrameHeaderSize, - } - c.writer = mw + c.writer = &mw if c.newCompressionWriter != nil && c.enableWriteCompression && isData(messageType) { w := c.newCompressionWriter(c.writer, c.compressionLevel) mw.compress = true @@ -511,10 +517,16 @@ type messageWriter struct { err error } -func (w *messageWriter) fatal(err error) error { +func (w *messageWriter) endMessage(err error) error { if w.err != nil { - w.err = err - w.c.writer = nil + return err + } + c := w.c + w.err = err + c.writer = nil + if c.writePool != nil { + c.writePool.Put(writePoolData{buf: c.writeBuf}) + c.writeBuf = nil } return err } @@ -528,7 +540,7 @@ func (w *messageWriter) flushFrame(final bool, extra []byte) error { // Check for invalid control frames. if isControl(w.frameType) && (!final || length > maxControlFramePayloadSize) { - return w.fatal(errInvalidControlFrame) + return w.endMessage(errInvalidControlFrame) } b0 := byte(w.frameType) @@ -573,7 +585,7 @@ func (w *messageWriter) flushFrame(final bool, extra []byte) error { copy(c.writeBuf[maxFrameHeaderSize-4:], key[:]) maskBytes(key, 0, c.writeBuf[maxFrameHeaderSize:w.pos]) if len(extra) > 0 { - return c.writeFatal(errors.New("websocket: internal error, extra used in client mode")) + return w.endMessage(c.writeFatal(errors.New("websocket: internal error, extra used in client mode"))) } } @@ -594,11 +606,11 @@ func (w *messageWriter) flushFrame(final bool, extra []byte) error { c.isWriting = false if err != nil { - return w.fatal(err) + return w.endMessage(err) } if final { - c.writer = nil + w.endMessage(errWriteClosed) return nil } @@ -699,7 +711,6 @@ func (w *messageWriter) Close() error { if err := w.flushFrame(true, nil); err != nil { return err } - w.err = errWriteClosed return nil } @@ -732,10 +743,10 @@ func (c *Conn) WriteMessage(messageType int, data []byte) error { if c.isServer && (c.newCompressionWriter == nil || !c.enableWriteCompression) { // Fast path with no allocations and single frame. - if err := c.prepWrite(messageType); err != nil { + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { return err } - mw := messageWriter{c: c, frameType: messageType, pos: maxFrameHeaderSize} n := copy(c.writeBuf[mw.pos:], data) mw.pos += n data = data[n:] @@ -764,7 +775,6 @@ func (c *Conn) SetWriteDeadline(t time.Time) error { // Read methods func (c *Conn) advanceFrame() (int, error) { - // 1. Skip remainder of previous frame. if c.readRemaining > 0 { @@ -1032,8 +1042,8 @@ func (c *Conn) SetReadDeadline(t time.Time) error { return c.conn.SetReadDeadline(t) } -// SetReadLimit sets the maximum size for a message read from the peer. If a -// message exceeds the limit, the connection sends a close frame to the peer +// SetReadLimit sets the maximum size in bytes for a message read from the peer. If a +// message exceeds the limit, the connection sends a close message to the peer // and returns ErrReadLimit to the application. func (c *Conn) SetReadLimit(limit int64) { c.readLimit = limit @@ -1046,24 +1056,22 @@ func (c *Conn) CloseHandler() func(code int, text string) error { // SetCloseHandler sets the handler for close messages received from the peer. // The code argument to h is the received close code or CloseNoStatusReceived -// if the close message is empty. The default close handler sends a close frame -// back to the peer. +// if the close message is empty. The default close handler sends a close +// message back to the peer. // -// The application must read the connection to process close messages as -// described in the section on Control Frames above. +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// close messages as described in the section on Control Messages above. // -// The connection read methods return a CloseError when a close frame is +// The connection read methods return a CloseError when a close message is // received. Most applications should handle close messages as part of their // normal error handling. Applications should only set a close handler when the -// application must perform some action before sending a close frame back to +// application must perform some action before sending a close message back to // the peer. func (c *Conn) SetCloseHandler(h func(code int, text string) error) { if h == nil { h = func(code int, text string) error { - message := []byte{} - if code != CloseNoStatusReceived { - message = FormatCloseMessage(code, "") - } + message := FormatCloseMessage(code, "") c.WriteControl(CloseMessage, message, time.Now().Add(writeWait)) return nil } @@ -1077,11 +1085,12 @@ func (c *Conn) PingHandler() func(appData string) error { } // SetPingHandler sets the handler for ping messages received from the peer. -// The appData argument to h is the PING frame application data. The default +// The appData argument to h is the PING message application data. The default // ping handler sends a pong to the peer. // -// The application must read the connection to process ping messages as -// described in the section on Control Frames above. +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// ping messages as described in the section on Control Messages above. func (c *Conn) SetPingHandler(h func(appData string) error) { if h == nil { h = func(message string) error { @@ -1103,11 +1112,12 @@ func (c *Conn) PongHandler() func(appData string) error { } // SetPongHandler sets the handler for pong messages received from the peer. -// The appData argument to h is the PONG frame application data. The default +// The appData argument to h is the PONG message application data. The default // pong handler does nothing. // -// The application must read the connection to process ping messages as -// described in the section on Control Frames above. +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// pong messages as described in the section on Control Messages above. func (c *Conn) SetPongHandler(h func(appData string) error) { if h == nil { h = func(string) error { return nil } @@ -1141,7 +1151,14 @@ func (c *Conn) SetCompressionLevel(level int) error { } // FormatCloseMessage formats closeCode and text as a WebSocket close message. +// An empty message is returned for code CloseNoStatusReceived. func FormatCloseMessage(closeCode int, text string) []byte { + if closeCode == CloseNoStatusReceived { + // Return empty message because it's illegal to send + // CloseNoStatusReceived. Return non-nil value in case application + // checks for nil. + return []byte{} + } buf := make([]byte, 2+len(text)) binary.BigEndian.PutUint16(buf, uint16(closeCode)) copy(buf[2:], text) diff --git a/websocket/vendor/github.com/gorilla/websocket/conn_read_legacy.go b/websocket/vendor/github.com/gorilla/websocket/conn_read_legacy.go deleted file mode 100644 index 018541cf6..000000000 --- a/websocket/vendor/github.com/gorilla/websocket/conn_read_legacy.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !go1.5 - -package websocket - -import "io" - -func (c *Conn) read(n int) ([]byte, error) { - p, err := c.br.Peek(n) - if err == io.EOF { - err = errUnexpectedEOF - } - if len(p) > 0 { - // advance over the bytes just read - io.ReadFull(c.br, p) - } - return p, err -} diff --git a/websocket/vendor/github.com/gorilla/websocket/conn_read.go b/websocket/vendor/github.com/gorilla/websocket/conn_write.go similarity index 52% rename from websocket/vendor/github.com/gorilla/websocket/conn_read.go rename to websocket/vendor/github.com/gorilla/websocket/conn_write.go index 1ea15059e..a509a21f8 100644 --- a/websocket/vendor/github.com/gorilla/websocket/conn_read.go +++ b/websocket/vendor/github.com/gorilla/websocket/conn_write.go @@ -2,17 +2,14 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build go1.5 +// +build go1.8 package websocket -import "io" +import "net" -func (c *Conn) read(n int) ([]byte, error) { - p, err := c.br.Peek(n) - if err == io.EOF { - err = errUnexpectedEOF - } - c.br.Discard(len(p)) - return p, err +func (c *Conn) writeBufs(bufs ...[]byte) error { + b := net.Buffers(bufs) + _, err := b.WriteTo(c.conn) + return err } diff --git a/websocket/vendor/github.com/gorilla/websocket/conn_write_legacy.go b/websocket/vendor/github.com/gorilla/websocket/conn_write_legacy.go new file mode 100644 index 000000000..37edaff5a --- /dev/null +++ b/websocket/vendor/github.com/gorilla/websocket/conn_write_legacy.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.8 + +package websocket + +func (c *Conn) writeBufs(bufs ...[]byte) error { + for _, buf := range bufs { + if len(buf) > 0 { + if _, err := c.conn.Write(buf); err != nil { + return err + } + } + } + return nil +} diff --git a/websocket/vendor/github.com/gorilla/websocket/doc.go b/websocket/vendor/github.com/gorilla/websocket/doc.go deleted file mode 100644 index e291a952c..000000000 --- a/websocket/vendor/github.com/gorilla/websocket/doc.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package websocket implements the WebSocket protocol defined in RFC 6455. -// -// Overview -// -// The Conn type represents a WebSocket connection. A server application uses -// the Upgrade function from an Upgrader object with a HTTP request handler -// to get a pointer to a Conn: -// -// var upgrader = websocket.Upgrader{ -// ReadBufferSize: 1024, -// WriteBufferSize: 1024, -// } -// -// func handler(w http.ResponseWriter, r *http.Request) { -// conn, err := upgrader.Upgrade(w, r, nil) -// if err != nil { -// log.Println(err) -// return -// } -// ... Use conn to send and receive messages. -// } -// -// Call the connection's WriteMessage and ReadMessage methods to send and -// receive messages as a slice of bytes. This snippet of code shows how to echo -// messages using these methods: -// -// for { -// messageType, p, err := conn.ReadMessage() -// if err != nil { -// return -// } -// if err = conn.WriteMessage(messageType, p); err != nil { -// return err -// } -// } -// -// In above snippet of code, p is a []byte and messageType is an int with value -// websocket.BinaryMessage or websocket.TextMessage. -// -// An application can also send and receive messages using the io.WriteCloser -// and io.Reader interfaces. To send a message, call the connection NextWriter -// method to get an io.WriteCloser, write the message to the writer and close -// the writer when done. To receive a message, call the connection NextReader -// method to get an io.Reader and read until io.EOF is returned. This snippet -// shows how to echo messages using the NextWriter and NextReader methods: -// -// for { -// messageType, r, err := conn.NextReader() -// if err != nil { -// return -// } -// w, err := conn.NextWriter(messageType) -// if err != nil { -// return err -// } -// if _, err := io.Copy(w, r); err != nil { -// return err -// } -// if err := w.Close(); err != nil { -// return err -// } -// } -// -// Data Messages -// -// The WebSocket protocol distinguishes between text and binary data messages. -// Text messages are interpreted as UTF-8 encoded text. The interpretation of -// binary messages is left to the application. -// -// This package uses the TextMessage and BinaryMessage integer constants to -// identify the two data message types. The ReadMessage and NextReader methods -// return the type of the received message. The messageType argument to the -// WriteMessage and NextWriter methods specifies the type of a sent message. -// -// It is the application's responsibility to ensure that text messages are -// valid UTF-8 encoded text. -// -// Control Messages -// -// The WebSocket protocol defines three types of control messages: close, ping -// and pong. Call the connection WriteControl, WriteMessage or NextWriter -// methods to send a control message to the peer. -// -// Connections handle received close messages by sending a close message to the -// peer and returning a *CloseError from the the NextReader, ReadMessage or the -// message Read method. -// -// Connections handle received ping and pong messages by invoking callback -// functions set with SetPingHandler and SetPongHandler methods. The callback -// functions are called from the NextReader, ReadMessage and the message Read -// methods. -// -// The default ping handler sends a pong to the peer. The application's reading -// goroutine can block for a short time while the handler writes the pong data -// to the connection. -// -// The application must read the connection to process ping, pong and close -// messages sent from the peer. If the application is not otherwise interested -// in messages from the peer, then the application should start a goroutine to -// read and discard messages from the peer. A simple example is: -// -// func readLoop(c *websocket.Conn) { -// for { -// if _, _, err := c.NextReader(); err != nil { -// c.Close() -// break -// } -// } -// } -// -// Concurrency -// -// Connections support one concurrent reader and one concurrent writer. -// -// Applications are responsible for ensuring that no more than one goroutine -// calls the write methods (NextWriter, SetWriteDeadline, WriteMessage, -// WriteJSON, EnableWriteCompression, SetCompressionLevel) concurrently and -// that no more than one goroutine calls the read methods (NextReader, -// SetReadDeadline, ReadMessage, ReadJSON, SetPongHandler, SetPingHandler) -// concurrently. -// -// The Close and WriteControl methods can be called concurrently with all other -// methods. -// -// Origin Considerations -// -// Web browsers allow Javascript applications to open a WebSocket connection to -// any host. It's up to the server to enforce an origin policy using the Origin -// request header sent by the browser. -// -// The Upgrader calls the function specified in the CheckOrigin field to check -// the origin. If the CheckOrigin function returns false, then the Upgrade -// method fails the WebSocket handshake with HTTP status 403. -// -// If the CheckOrigin field is nil, then the Upgrader uses a safe default: fail -// the handshake if the Origin request header is present and not equal to the -// Host request header. -// -// An application can allow connections from any origin by specifying a -// function that always returns true: -// -// var upgrader = websocket.Upgrader{ -// CheckOrigin: func(r *http.Request) bool { return true }, -// } -// -// The deprecated Upgrade function does not enforce an origin policy. It's the -// application's responsibility to check the Origin header before calling -// Upgrade. -// -// Compression EXPERIMENTAL -// -// Per message compression extensions (RFC 7692) are experimentally supported -// by this package in a limited capacity. Setting the EnableCompression option -// to true in Dialer or Upgrader will attempt to negotiate per message deflate -// support. -// -// var upgrader = websocket.Upgrader{ -// EnableCompression: true, -// } -// -// If compression was successfully negotiated with the connection's peer, any -// message received in compressed form will be automatically decompressed. -// All Read methods will return uncompressed bytes. -// -// Per message compression of messages written to a connection can be enabled -// or disabled by calling the corresponding Conn method: -// -// conn.EnableWriteCompression(false) -// -// Currently this package does not support compression with "context takeover". -// This means that messages must be compressed and decompressed in isolation, -// without retaining sliding window or dictionary state across messages. For -// more details refer to RFC 7692. -// -// Use of compression is experimental and may result in decreased performance. -package websocket diff --git a/websocket/vendor/github.com/gorilla/websocket/join.go b/websocket/vendor/github.com/gorilla/websocket/join.go new file mode 100644 index 000000000..c64f8c829 --- /dev/null +++ b/websocket/vendor/github.com/gorilla/websocket/join.go @@ -0,0 +1,42 @@ +// Copyright 2019 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "io" + "strings" +) + +// JoinMessages concatenates received messages to create a single io.Reader. +// The string term is appended to each message. The returned reader does not +// support concurrent calls to the Read method. +func JoinMessages(c *Conn, term string) io.Reader { + return &joinReader{c: c, term: term} +} + +type joinReader struct { + c *Conn + term string + r io.Reader +} + +func (r *joinReader) Read(p []byte) (int, error) { + if r.r == nil { + var err error + _, r.r, err = r.c.NextReader() + if err != nil { + return 0, err + } + if r.term != "" { + r.r = io.MultiReader(r.r, strings.NewReader(r.term)) + } + } + n, err := r.r.Read(p) + if err == io.EOF { + err = nil + r.r = nil + } + return n, err +} diff --git a/websocket/vendor/github.com/gorilla/websocket/json.go b/websocket/vendor/github.com/gorilla/websocket/json.go index 4f0e36875..dc2c1f641 100644 --- a/websocket/vendor/github.com/gorilla/websocket/json.go +++ b/websocket/vendor/github.com/gorilla/websocket/json.go @@ -9,12 +9,14 @@ import ( "io" ) -// WriteJSON is deprecated, use c.WriteJSON instead. +// WriteJSON writes the JSON encoding of v as a message. +// +// Deprecated: Use c.WriteJSON instead. func WriteJSON(c *Conn, v interface{}) error { return c.WriteJSON(v) } -// WriteJSON writes the JSON encoding of v to the connection. +// WriteJSON writes the JSON encoding of v as a message. // // See the documentation for encoding/json Marshal for details about the // conversion of Go values to JSON. @@ -31,7 +33,10 @@ func (c *Conn) WriteJSON(v interface{}) error { return err2 } -// ReadJSON is deprecated, use c.ReadJSON instead. +// ReadJSON reads the next JSON-encoded message from the connection and stores +// it in the value pointed to by v. +// +// Deprecated: Use c.ReadJSON instead. func ReadJSON(c *Conn, v interface{}) error { return c.ReadJSON(v) } diff --git a/websocket/vendor/github.com/gorilla/websocket/mask.go b/websocket/vendor/github.com/gorilla/websocket/mask.go index 6a88bbc74..577fce9ef 100644 --- a/websocket/vendor/github.com/gorilla/websocket/mask.go +++ b/websocket/vendor/github.com/gorilla/websocket/mask.go @@ -11,7 +11,6 @@ import "unsafe" const wordSize = int(unsafe.Sizeof(uintptr(0))) func maskBytes(key [4]byte, pos int, b []byte) int { - // Mask one byte at a time for small buffers. if len(b) < 2*wordSize { for i := range b { diff --git a/websocket/vendor/github.com/gorilla/websocket/prepared.go b/websocket/vendor/github.com/gorilla/websocket/prepared.go index 1efffbd1e..74ec565d2 100644 --- a/websocket/vendor/github.com/gorilla/websocket/prepared.go +++ b/websocket/vendor/github.com/gorilla/websocket/prepared.go @@ -19,7 +19,6 @@ import ( type PreparedMessage struct { messageType int data []byte - err error mu sync.Mutex frames map[prepareKey]*preparedFrame } diff --git a/websocket/vendor/github.com/gorilla/websocket/proxy.go b/websocket/vendor/github.com/gorilla/websocket/proxy.go new file mode 100644 index 000000000..bf2478e43 --- /dev/null +++ b/websocket/vendor/github.com/gorilla/websocket/proxy.go @@ -0,0 +1,77 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "encoding/base64" + "errors" + "net" + "net/http" + "net/url" + "strings" +) + +type netDialerFunc func(network, addr string) (net.Conn, error) + +func (fn netDialerFunc) Dial(network, addr string) (net.Conn, error) { + return fn(network, addr) +} + +func init() { + proxy_RegisterDialerType("http", func(proxyURL *url.URL, forwardDialer proxy_Dialer) (proxy_Dialer, error) { + return &httpProxyDialer{proxyURL: proxyURL, fowardDial: forwardDialer.Dial}, nil + }) +} + +type httpProxyDialer struct { + proxyURL *url.URL + fowardDial func(network, addr string) (net.Conn, error) +} + +func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error) { + hostPort, _ := hostPortNoPort(hpd.proxyURL) + conn, err := hpd.fowardDial(network, hostPort) + if err != nil { + return nil, err + } + + connectHeader := make(http.Header) + if user := hpd.proxyURL.User; user != nil { + proxyUser := user.Username() + if proxyPassword, passwordSet := user.Password(); passwordSet { + credential := base64.StdEncoding.EncodeToString([]byte(proxyUser + ":" + proxyPassword)) + connectHeader.Set("Proxy-Authorization", "Basic "+credential) + } + } + + connectReq := &http.Request{ + Method: "CONNECT", + URL: &url.URL{Opaque: addr}, + Host: addr, + Header: connectHeader, + } + + if err := connectReq.Write(conn); err != nil { + conn.Close() + return nil, err + } + + // Read response. It's OK to use and discard buffered reader here becaue + // the remote server does not speak until spoken to. + br := bufio.NewReader(conn) + resp, err := http.ReadResponse(br, connectReq) + if err != nil { + conn.Close() + return nil, err + } + + if resp.StatusCode != 200 { + conn.Close() + f := strings.SplitN(resp.Status, " ", 2) + return nil, errors.New(f[1]) + } + return conn, nil +} diff --git a/websocket/vendor/github.com/gorilla/websocket/server.go b/websocket/vendor/github.com/gorilla/websocket/server.go index 3495e0f1a..3d4480a47 100644 --- a/websocket/vendor/github.com/gorilla/websocket/server.go +++ b/websocket/vendor/github.com/gorilla/websocket/server.go @@ -7,7 +7,7 @@ package websocket import ( "bufio" "errors" - "net" + "io" "net/http" "net/url" "strings" @@ -27,16 +27,29 @@ type Upgrader struct { // HandshakeTimeout specifies the duration for the handshake to complete. HandshakeTimeout time.Duration - // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer // size is zero, then buffers allocated by the HTTP server are used. The // I/O buffer sizes do not limit the size of the messages that can be sent // or received. ReadBufferSize, WriteBufferSize int + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + // Subprotocols specifies the server's supported protocols in order of - // preference. If this field is set, then the Upgrade method negotiates a + // preference. If this field is not nil, then the Upgrade method negotiates a // subprotocol by selecting the first match in this list with a protocol - // requested by the client. + // requested by the client. If there's no match, then no protocol is + // negotiated (the Sec-Websocket-Protocol header is not included in the + // handshake response). Subprotocols []string // Error specifies the function for generating HTTP error responses. If Error @@ -44,8 +57,12 @@ type Upgrader struct { Error func(w http.ResponseWriter, r *http.Request, status int, reason error) // CheckOrigin returns true if the request Origin header is acceptable. If - // CheckOrigin is nil, the host in the Origin header must not be set or - // must match the host of the request. + // CheckOrigin is nil, then a safe default is used: return false if the + // Origin request header is present and the origin host is not equal to + // request Host header. + // + // A CheckOrigin function should carefully validate the request origin to + // prevent cross-site request forgery. CheckOrigin func(r *http.Request) bool // EnableCompression specify if the server should attempt to negotiate per @@ -76,7 +93,7 @@ func checkSameOrigin(r *http.Request) bool { if err != nil { return false } - return u.Host == r.Host + return equalASCIIFold(u.Host, r.Host) } func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string { @@ -99,42 +116,44 @@ func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header // // The responseHeader is included in the response to the client's upgrade // request. Use the responseHeader to specify cookies (Set-Cookie) and the -// application negotiated subprotocol (Sec-Websocket-Protocol). +// application negotiated subprotocol (Sec-WebSocket-Protocol). // // If the upgrade fails, then Upgrade replies to the client with an HTTP error // response. func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { - if r.Method != "GET" { - return u.returnError(w, r, http.StatusMethodNotAllowed, "websocket: not a websocket handshake: request method is not GET") - } - - if _, ok := responseHeader["Sec-Websocket-Extensions"]; ok { - return u.returnError(w, r, http.StatusInternalServerError, "websocket: application specific 'Sec-Websocket-Extensions' headers are unsupported") - } + const badHandshake = "websocket: the client is not using the websocket protocol: " if !tokenListContainsValue(r.Header, "Connection", "upgrade") { - return u.returnError(w, r, http.StatusBadRequest, "websocket: not a websocket handshake: 'upgrade' token not found in 'Connection' header") + return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'upgrade' token not found in 'Connection' header") } if !tokenListContainsValue(r.Header, "Upgrade", "websocket") { - return u.returnError(w, r, http.StatusBadRequest, "websocket: not a websocket handshake: 'websocket' token not found in 'Upgrade' header") + return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'websocket' token not found in 'Upgrade' header") + } + + if r.Method != "GET" { + return u.returnError(w, r, http.StatusMethodNotAllowed, badHandshake+"request method is not GET") } if !tokenListContainsValue(r.Header, "Sec-Websocket-Version", "13") { return u.returnError(w, r, http.StatusBadRequest, "websocket: unsupported version: 13 not found in 'Sec-Websocket-Version' header") } + if _, ok := responseHeader["Sec-Websocket-Extensions"]; ok { + return u.returnError(w, r, http.StatusInternalServerError, "websocket: application specific 'Sec-WebSocket-Extensions' headers are unsupported") + } + checkOrigin := u.CheckOrigin if checkOrigin == nil { checkOrigin = checkSameOrigin } if !checkOrigin(r) { - return u.returnError(w, r, http.StatusForbidden, "websocket: 'Origin' header value not allowed") + return u.returnError(w, r, http.StatusForbidden, "websocket: request origin not allowed by Upgrader.CheckOrigin") } challengeKey := r.Header.Get("Sec-Websocket-Key") if challengeKey == "" { - return u.returnError(w, r, http.StatusBadRequest, "websocket: not a websocket handshake: `Sec-Websocket-Key' header is missing or blank") + return u.returnError(w, r, http.StatusBadRequest, "websocket: not a websocket handshake: `Sec-WebSocket-Key' header is missing or blank") } subprotocol := u.selectSubprotocol(r, responseHeader) @@ -151,17 +170,12 @@ func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeade } } - var ( - netConn net.Conn - err error - ) - h, ok := w.(http.Hijacker) if !ok { return u.returnError(w, r, http.StatusInternalServerError, "websocket: response does not implement http.Hijacker") } var brw *bufio.ReadWriter - netConn, brw, err = h.Hijack() + netConn, brw, err := h.Hijack() if err != nil { return u.returnError(w, r, http.StatusInternalServerError, err.Error()) } @@ -171,7 +185,21 @@ func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeade return nil, errors.New("websocket: client sent data before handshake is complete") } - c := newConnBRW(netConn, true, u.ReadBufferSize, u.WriteBufferSize, brw) + var br *bufio.Reader + if u.ReadBufferSize == 0 && bufioReaderSize(netConn, brw.Reader) > 256 { + // Reuse hijacked buffered reader as connection reader. + br = brw.Reader + } + + buf := bufioWriterBuffer(netConn, brw.Writer) + + var writeBuf []byte + if u.WriteBufferPool == nil && u.WriteBufferSize == 0 && len(buf) >= maxFrameHeaderSize+256 { + // Reuse hijacked write buffer as connection buffer. + writeBuf = buf + } + + c := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize, u.WriteBufferPool, br, writeBuf) c.subprotocol = subprotocol if compress { @@ -179,17 +207,23 @@ func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeade c.newDecompressionReader = decompressNoContextTakeover } - p := c.writeBuf[:0] + // Use larger of hijacked buffer and connection write buffer for header. + p := buf + if len(c.writeBuf) > len(p) { + p = c.writeBuf + } + p = p[:0] + p = append(p, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "...) p = append(p, computeAcceptKey(challengeKey)...) p = append(p, "\r\n"...) if c.subprotocol != "" { - p = append(p, "Sec-Websocket-Protocol: "...) + p = append(p, "Sec-WebSocket-Protocol: "...) p = append(p, c.subprotocol...) p = append(p, "\r\n"...) } if compress { - p = append(p, "Sec-Websocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover\r\n"...) + p = append(p, "Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover\r\n"...) } for k, vs := range responseHeader { if k == "Sec-Websocket-Protocol" { @@ -230,13 +264,14 @@ func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeade // Upgrade upgrades the HTTP server connection to the WebSocket protocol. // -// This function is deprecated, use websocket.Upgrader instead. +// Deprecated: Use websocket.Upgrader instead. // -// The application is responsible for checking the request origin before -// calling Upgrade. An example implementation of the same origin policy is: +// Upgrade does not perform origin checking. The application is responsible for +// checking the Origin header before calling Upgrade. An example implementation +// of the same origin policy check is: // // if req.Header.Get("Origin") != "http://"+req.Host { -// http.Error(w, "Origin not allowed", 403) +// http.Error(w, "Origin not allowed", http.StatusForbidden) // return // } // @@ -289,3 +324,40 @@ func IsWebSocketUpgrade(r *http.Request) bool { return tokenListContainsValue(r.Header, "Connection", "upgrade") && tokenListContainsValue(r.Header, "Upgrade", "websocket") } + +// bufioReaderSize size returns the size of a bufio.Reader. +func bufioReaderSize(originalReader io.Reader, br *bufio.Reader) int { + // This code assumes that peek on a reset reader returns + // bufio.Reader.buf[:0]. + // TODO: Use bufio.Reader.Size() after Go 1.10 + br.Reset(originalReader) + if p, err := br.Peek(0); err == nil { + return cap(p) + } + return 0 +} + +// writeHook is an io.Writer that records the last slice passed to it vio +// io.Writer.Write. +type writeHook struct { + p []byte +} + +func (wh *writeHook) Write(p []byte) (int, error) { + wh.p = p + return len(p), nil +} + +// bufioWriterBuffer grabs the buffer from a bufio.Writer. +func bufioWriterBuffer(originalWriter io.Writer, bw *bufio.Writer) []byte { + // This code assumes that bufio.Writer.buf[:1] is passed to the + // bufio.Writer's underlying writer. + var wh writeHook + bw.Reset(&wh) + bw.WriteByte(0) + bw.Flush() + + bw.Reset(originalWriter) + + return wh.p[:cap(wh.p)] +} diff --git a/websocket/vendor/github.com/gorilla/websocket/trace.go b/websocket/vendor/github.com/gorilla/websocket/trace.go new file mode 100644 index 000000000..834f122a0 --- /dev/null +++ b/websocket/vendor/github.com/gorilla/websocket/trace.go @@ -0,0 +1,19 @@ +// +build go1.8 + +package websocket + +import ( + "crypto/tls" + "net/http/httptrace" +) + +func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error { + if trace.TLSHandshakeStart != nil { + trace.TLSHandshakeStart() + } + err := doHandshake(tlsConn, cfg) + if trace.TLSHandshakeDone != nil { + trace.TLSHandshakeDone(tlsConn.ConnectionState(), err) + } + return err +} diff --git a/websocket/vendor/github.com/gorilla/websocket/trace_17.go b/websocket/vendor/github.com/gorilla/websocket/trace_17.go new file mode 100644 index 000000000..77d05a0b5 --- /dev/null +++ b/websocket/vendor/github.com/gorilla/websocket/trace_17.go @@ -0,0 +1,12 @@ +// +build !go1.8 + +package websocket + +import ( + "crypto/tls" + "net/http/httptrace" +) + +func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error { + return doHandshake(tlsConn, cfg) +} diff --git a/websocket/vendor/github.com/gorilla/websocket/util.go b/websocket/vendor/github.com/gorilla/websocket/util.go index 9a4908df2..7bf2f66c6 100644 --- a/websocket/vendor/github.com/gorilla/websocket/util.go +++ b/websocket/vendor/github.com/gorilla/websocket/util.go @@ -11,6 +11,7 @@ import ( "io" "net/http" "strings" + "unicode/utf8" ) var keyGUID = []byte("258EAFA5-E914-47DA-95CA-C5AB0DC85B11") @@ -30,68 +31,113 @@ func generateChallengeKey() (string, error) { return base64.StdEncoding.EncodeToString(p), nil } -// Octet types from RFC 2616. -var octetTypes [256]byte - -const ( - isTokenOctet = 1 << iota - isSpaceOctet -) - -func init() { - // From RFC 2616 - // - // OCTET = - // CHAR = - // CTL = - // CR = - // LF = - // SP = - // HT = - // <"> = - // CRLF = CR LF - // LWS = [CRLF] 1*( SP | HT ) - // TEXT = - // separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> - // | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT - // token = 1* - // qdtext = > - - for c := 0; c < 256; c++ { - var t byte - isCtl := c <= 31 || c == 127 - isChar := 0 <= c && c <= 127 - isSeparator := strings.IndexRune(" \t\"(),/:;<=>?@[]\\{}", rune(c)) >= 0 - if strings.IndexRune(" \t\r\n", rune(c)) >= 0 { - t |= isSpaceOctet - } - if isChar && !isCtl && !isSeparator { - t |= isTokenOctet - } - octetTypes[c] = t - } +// Token octets per RFC 2616. +var isTokenOctet = [256]bool{ + '!': true, + '#': true, + '$': true, + '%': true, + '&': true, + '\'': true, + '*': true, + '+': true, + '-': true, + '.': true, + '0': true, + '1': true, + '2': true, + '3': true, + '4': true, + '5': true, + '6': true, + '7': true, + '8': true, + '9': true, + 'A': true, + 'B': true, + 'C': true, + 'D': true, + 'E': true, + 'F': true, + 'G': true, + 'H': true, + 'I': true, + 'J': true, + 'K': true, + 'L': true, + 'M': true, + 'N': true, + 'O': true, + 'P': true, + 'Q': true, + 'R': true, + 'S': true, + 'T': true, + 'U': true, + 'W': true, + 'V': true, + 'X': true, + 'Y': true, + 'Z': true, + '^': true, + '_': true, + '`': true, + 'a': true, + 'b': true, + 'c': true, + 'd': true, + 'e': true, + 'f': true, + 'g': true, + 'h': true, + 'i': true, + 'j': true, + 'k': true, + 'l': true, + 'm': true, + 'n': true, + 'o': true, + 'p': true, + 'q': true, + 'r': true, + 's': true, + 't': true, + 'u': true, + 'v': true, + 'w': true, + 'x': true, + 'y': true, + 'z': true, + '|': true, + '~': true, } +// skipSpace returns a slice of the string s with all leading RFC 2616 linear +// whitespace removed. func skipSpace(s string) (rest string) { i := 0 for ; i < len(s); i++ { - if octetTypes[s[i]]&isSpaceOctet == 0 { + if b := s[i]; b != ' ' && b != '\t' { break } } return s[i:] } +// nextToken returns the leading RFC 2616 token of s and the string following +// the token. func nextToken(s string) (token, rest string) { i := 0 for ; i < len(s); i++ { - if octetTypes[s[i]]&isTokenOctet == 0 { + if !isTokenOctet[s[i]] { break } } return s[:i], s[i:] } +// nextTokenOrQuoted returns the leading token or quoted string per RFC 2616 +// and the string following the token or quoted string. func nextTokenOrQuoted(s string) (value string, rest string) { if !strings.HasPrefix(s, "\"") { return nextToken(s) @@ -111,14 +157,14 @@ func nextTokenOrQuoted(s string) (value string, rest string) { case escape: escape = false p[j] = b - j += 1 + j++ case b == '\\': escape = true case b == '"': return string(p[:j]), s[i+1:] default: p[j] = b - j += 1 + j++ } } return "", "" @@ -127,8 +173,32 @@ func nextTokenOrQuoted(s string) (value string, rest string) { return "", "" } +// equalASCIIFold returns true if s is equal to t with ASCII case folding as +// defined in RFC 4790. +func equalASCIIFold(s, t string) bool { + for s != "" && t != "" { + sr, size := utf8.DecodeRuneInString(s) + s = s[size:] + tr, size := utf8.DecodeRuneInString(t) + t = t[size:] + if sr == tr { + continue + } + if 'A' <= sr && sr <= 'Z' { + sr = sr + 'a' - 'A' + } + if 'A' <= tr && tr <= 'Z' { + tr = tr + 'a' - 'A' + } + if sr != tr { + return false + } + } + return s == t +} + // tokenListContainsValue returns true if the 1#token header with the given -// name contains token. +// name contains a token equal to value with ASCII case folding. func tokenListContainsValue(header http.Header, name string, value string) bool { headers: for _, s := range header[name] { @@ -142,7 +212,7 @@ headers: if s != "" && s[0] != ',' { continue headers } - if strings.EqualFold(t, value) { + if equalASCIIFold(t, value) { return true } if s == "" { @@ -154,9 +224,8 @@ headers: return false } -// parseExtensiosn parses WebSocket extensions from a header. +// parseExtensions parses WebSocket extensions from a header. func parseExtensions(header http.Header) []map[string]string { - // From RFC 6455: // // Sec-WebSocket-Extensions = extension-list diff --git a/websocket/vendor/github.com/gorilla/websocket/x_net_proxy.go b/websocket/vendor/github.com/gorilla/websocket/x_net_proxy.go new file mode 100644 index 000000000..2e668f6b8 --- /dev/null +++ b/websocket/vendor/github.com/gorilla/websocket/x_net_proxy.go @@ -0,0 +1,473 @@ +// Code generated by golang.org/x/tools/cmd/bundle. DO NOT EDIT. +//go:generate bundle -o x_net_proxy.go golang.org/x/net/proxy + +// Package proxy provides support for a variety of protocols to proxy network +// data. +// + +package websocket + +import ( + "errors" + "io" + "net" + "net/url" + "os" + "strconv" + "strings" + "sync" +) + +type proxy_direct struct{} + +// Direct is a direct proxy: one that makes network connections directly. +var proxy_Direct = proxy_direct{} + +func (proxy_direct) Dial(network, addr string) (net.Conn, error) { + return net.Dial(network, addr) +} + +// A PerHost directs connections to a default Dialer unless the host name +// requested matches one of a number of exceptions. +type proxy_PerHost struct { + def, bypass proxy_Dialer + + bypassNetworks []*net.IPNet + bypassIPs []net.IP + bypassZones []string + bypassHosts []string +} + +// NewPerHost returns a PerHost Dialer that directs connections to either +// defaultDialer or bypass, depending on whether the connection matches one of +// the configured rules. +func proxy_NewPerHost(defaultDialer, bypass proxy_Dialer) *proxy_PerHost { + return &proxy_PerHost{ + def: defaultDialer, + bypass: bypass, + } +} + +// Dial connects to the address addr on the given network through either +// defaultDialer or bypass. +func (p *proxy_PerHost) Dial(network, addr string) (c net.Conn, err error) { + host, _, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + + return p.dialerForRequest(host).Dial(network, addr) +} + +func (p *proxy_PerHost) dialerForRequest(host string) proxy_Dialer { + if ip := net.ParseIP(host); ip != nil { + for _, net := range p.bypassNetworks { + if net.Contains(ip) { + return p.bypass + } + } + for _, bypassIP := range p.bypassIPs { + if bypassIP.Equal(ip) { + return p.bypass + } + } + return p.def + } + + for _, zone := range p.bypassZones { + if strings.HasSuffix(host, zone) { + return p.bypass + } + if host == zone[1:] { + // For a zone ".example.com", we match "example.com" + // too. + return p.bypass + } + } + for _, bypassHost := range p.bypassHosts { + if bypassHost == host { + return p.bypass + } + } + return p.def +} + +// AddFromString parses a string that contains comma-separated values +// specifying hosts that should use the bypass proxy. Each value is either an +// IP address, a CIDR range, a zone (*.example.com) or a host name +// (localhost). A best effort is made to parse the string and errors are +// ignored. +func (p *proxy_PerHost) AddFromString(s string) { + hosts := strings.Split(s, ",") + for _, host := range hosts { + host = strings.TrimSpace(host) + if len(host) == 0 { + continue + } + if strings.Contains(host, "/") { + // We assume that it's a CIDR address like 127.0.0.0/8 + if _, net, err := net.ParseCIDR(host); err == nil { + p.AddNetwork(net) + } + continue + } + if ip := net.ParseIP(host); ip != nil { + p.AddIP(ip) + continue + } + if strings.HasPrefix(host, "*.") { + p.AddZone(host[1:]) + continue + } + p.AddHost(host) + } +} + +// AddIP specifies an IP address that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match an IP. +func (p *proxy_PerHost) AddIP(ip net.IP) { + p.bypassIPs = append(p.bypassIPs, ip) +} + +// AddNetwork specifies an IP range that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match. +func (p *proxy_PerHost) AddNetwork(net *net.IPNet) { + p.bypassNetworks = append(p.bypassNetworks, net) +} + +// AddZone specifies a DNS suffix that will use the bypass proxy. A zone of +// "example.com" matches "example.com" and all of its subdomains. +func (p *proxy_PerHost) AddZone(zone string) { + if strings.HasSuffix(zone, ".") { + zone = zone[:len(zone)-1] + } + if !strings.HasPrefix(zone, ".") { + zone = "." + zone + } + p.bypassZones = append(p.bypassZones, zone) +} + +// AddHost specifies a host name that will use the bypass proxy. +func (p *proxy_PerHost) AddHost(host string) { + if strings.HasSuffix(host, ".") { + host = host[:len(host)-1] + } + p.bypassHosts = append(p.bypassHosts, host) +} + +// A Dialer is a means to establish a connection. +type proxy_Dialer interface { + // Dial connects to the given address via the proxy. + Dial(network, addr string) (c net.Conn, err error) +} + +// Auth contains authentication parameters that specific Dialers may require. +type proxy_Auth struct { + User, Password string +} + +// FromEnvironment returns the dialer specified by the proxy related variables in +// the environment. +func proxy_FromEnvironment() proxy_Dialer { + allProxy := proxy_allProxyEnv.Get() + if len(allProxy) == 0 { + return proxy_Direct + } + + proxyURL, err := url.Parse(allProxy) + if err != nil { + return proxy_Direct + } + proxy, err := proxy_FromURL(proxyURL, proxy_Direct) + if err != nil { + return proxy_Direct + } + + noProxy := proxy_noProxyEnv.Get() + if len(noProxy) == 0 { + return proxy + } + + perHost := proxy_NewPerHost(proxy, proxy_Direct) + perHost.AddFromString(noProxy) + return perHost +} + +// proxySchemes is a map from URL schemes to a function that creates a Dialer +// from a URL with such a scheme. +var proxy_proxySchemes map[string]func(*url.URL, proxy_Dialer) (proxy_Dialer, error) + +// RegisterDialerType takes a URL scheme and a function to generate Dialers from +// a URL with that scheme and a forwarding Dialer. Registered schemes are used +// by FromURL. +func proxy_RegisterDialerType(scheme string, f func(*url.URL, proxy_Dialer) (proxy_Dialer, error)) { + if proxy_proxySchemes == nil { + proxy_proxySchemes = make(map[string]func(*url.URL, proxy_Dialer) (proxy_Dialer, error)) + } + proxy_proxySchemes[scheme] = f +} + +// FromURL returns a Dialer given a URL specification and an underlying +// Dialer for it to make network requests. +func proxy_FromURL(u *url.URL, forward proxy_Dialer) (proxy_Dialer, error) { + var auth *proxy_Auth + if u.User != nil { + auth = new(proxy_Auth) + auth.User = u.User.Username() + if p, ok := u.User.Password(); ok { + auth.Password = p + } + } + + switch u.Scheme { + case "socks5": + return proxy_SOCKS5("tcp", u.Host, auth, forward) + } + + // If the scheme doesn't match any of the built-in schemes, see if it + // was registered by another package. + if proxy_proxySchemes != nil { + if f, ok := proxy_proxySchemes[u.Scheme]; ok { + return f(u, forward) + } + } + + return nil, errors.New("proxy: unknown scheme: " + u.Scheme) +} + +var ( + proxy_allProxyEnv = &proxy_envOnce{ + names: []string{"ALL_PROXY", "all_proxy"}, + } + proxy_noProxyEnv = &proxy_envOnce{ + names: []string{"NO_PROXY", "no_proxy"}, + } +) + +// envOnce looks up an environment variable (optionally by multiple +// names) once. It mitigates expensive lookups on some platforms +// (e.g. Windows). +// (Borrowed from net/http/transport.go) +type proxy_envOnce struct { + names []string + once sync.Once + val string +} + +func (e *proxy_envOnce) Get() string { + e.once.Do(e.init) + return e.val +} + +func (e *proxy_envOnce) init() { + for _, n := range e.names { + e.val = os.Getenv(n) + if e.val != "" { + return + } + } +} + +// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given address +// with an optional username and password. See RFC 1928 and RFC 1929. +func proxy_SOCKS5(network, addr string, auth *proxy_Auth, forward proxy_Dialer) (proxy_Dialer, error) { + s := &proxy_socks5{ + network: network, + addr: addr, + forward: forward, + } + if auth != nil { + s.user = auth.User + s.password = auth.Password + } + + return s, nil +} + +type proxy_socks5 struct { + user, password string + network, addr string + forward proxy_Dialer +} + +const proxy_socks5Version = 5 + +const ( + proxy_socks5AuthNone = 0 + proxy_socks5AuthPassword = 2 +) + +const proxy_socks5Connect = 1 + +const ( + proxy_socks5IP4 = 1 + proxy_socks5Domain = 3 + proxy_socks5IP6 = 4 +) + +var proxy_socks5Errors = []string{ + "", + "general failure", + "connection forbidden", + "network unreachable", + "host unreachable", + "connection refused", + "TTL expired", + "command not supported", + "address type not supported", +} + +// Dial connects to the address addr on the given network via the SOCKS5 proxy. +func (s *proxy_socks5) Dial(network, addr string) (net.Conn, error) { + switch network { + case "tcp", "tcp6", "tcp4": + default: + return nil, errors.New("proxy: no support for SOCKS5 proxy connections of type " + network) + } + + conn, err := s.forward.Dial(s.network, s.addr) + if err != nil { + return nil, err + } + if err := s.connect(conn, addr); err != nil { + conn.Close() + return nil, err + } + return conn, nil +} + +// connect takes an existing connection to a socks5 proxy server, +// and commands the server to extend that connection to target, +// which must be a canonical address with a host and port. +func (s *proxy_socks5) connect(conn net.Conn, target string) error { + host, portStr, err := net.SplitHostPort(target) + if err != nil { + return err + } + + port, err := strconv.Atoi(portStr) + if err != nil { + return errors.New("proxy: failed to parse port number: " + portStr) + } + if port < 1 || port > 0xffff { + return errors.New("proxy: port number out of range: " + portStr) + } + + // the size here is just an estimate + buf := make([]byte, 0, 6+len(host)) + + buf = append(buf, proxy_socks5Version) + if len(s.user) > 0 && len(s.user) < 256 && len(s.password) < 256 { + buf = append(buf, 2 /* num auth methods */, proxy_socks5AuthNone, proxy_socks5AuthPassword) + } else { + buf = append(buf, 1 /* num auth methods */, proxy_socks5AuthNone) + } + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + if buf[0] != 5 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0]))) + } + if buf[1] == 0xff { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication") + } + + // See RFC 1929 + if buf[1] == proxy_socks5AuthPassword { + buf = buf[:0] + buf = append(buf, 1 /* password protocol version */) + buf = append(buf, uint8(len(s.user))) + buf = append(buf, s.user...) + buf = append(buf, uint8(len(s.password))) + buf = append(buf, s.password...) + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if buf[1] != 0 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password") + } + } + + buf = buf[:0] + buf = append(buf, proxy_socks5Version, proxy_socks5Connect, 0 /* reserved */) + + if ip := net.ParseIP(host); ip != nil { + if ip4 := ip.To4(); ip4 != nil { + buf = append(buf, proxy_socks5IP4) + ip = ip4 + } else { + buf = append(buf, proxy_socks5IP6) + } + buf = append(buf, ip...) + } else { + if len(host) > 255 { + return errors.New("proxy: destination host name too long: " + host) + } + buf = append(buf, proxy_socks5Domain) + buf = append(buf, byte(len(host))) + buf = append(buf, host...) + } + buf = append(buf, byte(port>>8), byte(port)) + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:4]); err != nil { + return errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + failure := "unknown error" + if int(buf[1]) < len(proxy_socks5Errors) { + failure = proxy_socks5Errors[buf[1]] + } + + if len(failure) > 0 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure) + } + + bytesToDiscard := 0 + switch buf[3] { + case proxy_socks5IP4: + bytesToDiscard = net.IPv4len + case proxy_socks5IP6: + bytesToDiscard = net.IPv6len + case proxy_socks5Domain: + _, err := io.ReadFull(conn, buf[:1]) + if err != nil { + return errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + bytesToDiscard = int(buf[0]) + default: + return errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr) + } + + if cap(buf) < bytesToDiscard { + buf = make([]byte, bytesToDiscard) + } else { + buf = buf[:bytesToDiscard] + } + if _, err := io.ReadFull(conn, buf); err != nil { + return errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + // Also need to discard the port number + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + return nil +} diff --git a/websocket/websocket.go b/websocket/websocket.go index 9cf4fdf01..1792e0dc2 100644 --- a/websocket/websocket.go +++ b/websocket/websocket.go @@ -4,11 +4,6 @@ Source code and other details for the project are available at GitHub: https://github.com/kataras/iris/tree/master/websocket -Installation - - $ go get -u github.com/kataras/iris/websocket - - Example code: From cea2375a14855c99577b9ee4ef277f037656f8a5 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 16 Feb 2019 00:42:26 +0200 Subject: [PATCH 13/89] add support for mvc and hero dynamic dependencies to understand the error type as a second output value as requested at: https://github.com/kataras/iris/issues/1187 --- hero/di/object.go | 39 +++++++++++++++++++++++++++++---------- hero/di/reflect.go | 7 +++++++ mvc/controller.go | 4 ++++ mvc/controller_test.go | 17 +++++++++++++++++ websocket/connection.go | 2 +- 5 files changed, 58 insertions(+), 11 deletions(-) diff --git a/hero/di/object.go b/hero/di/object.go index 385162bd8..047d73620 100644 --- a/hero/di/object.go +++ b/hero/di/object.go @@ -77,8 +77,10 @@ func MakeReturnValue(fn reflect.Value, goodFunc TypeChecker) (func([]reflect.Val return nil, typ, errBad } - // invalid if not returns one single value. - if typ.NumOut() != 1 { + n := typ.NumOut() + + // invalid if not returns one single value or two values but the second is not an error. + if !(n == 1 || (n == 2 && IsError(typ.Out(1)))) { return nil, typ, errBad } @@ -88,19 +90,36 @@ func MakeReturnValue(fn reflect.Value, goodFunc TypeChecker) (func([]reflect.Val } } - outTyp := typ.Out(0) - zeroOutVal := reflect.New(outTyp).Elem() + firstOutTyp := typ.Out(0) + firstZeroOutVal := reflect.New(firstOutTyp).Elem() bf := func(ctxValue []reflect.Value) reflect.Value { results := fn.Call(ctxValue) - if len(results) == 0 { - return zeroOutVal - } v := results[0] - if !v.IsValid() { - return zeroOutVal + if !v.IsValid() { // check the first value, second is error. + return firstZeroOutVal } + + if n == 2 { + // two, second is always error. + errVal := results[1] + if !errVal.IsNil() { + // error is not nil, do something with it. + if ctx, ok := ctxValue[0].Interface().(interface { + StatusCode(int) + WriteString(string) (int, error) + StopExecution() + }); ok { + ctx.StatusCode(400) + ctx.WriteString(errVal.Interface().(error).Error()) + ctx.StopExecution() + } + + return firstZeroOutVal + } + } + // if v.String() == "" { // println("di/object.go: " + v.String()) // // println("di/object.go: because it's interface{} it should be returned as: " + v.Elem().Type().String() + " and its value: " + v.Elem().Interface().(string)) @@ -109,7 +128,7 @@ func MakeReturnValue(fn reflect.Value, goodFunc TypeChecker) (func([]reflect.Val return v } - return bf, outTyp, nil + return bf, firstOutTyp, nil } // IsAssignable checks if "to" type can be used as "b.Value/ReturnValue". diff --git a/hero/di/reflect.go b/hero/di/reflect.go index 08fc7f2a7..e2c687007 100644 --- a/hero/di/reflect.go +++ b/hero/di/reflect.go @@ -59,6 +59,13 @@ func IsZero(v reflect.Value) bool { return v.Interface() == zero.Interface() } +var errTyp = reflect.TypeOf((*error)(nil)).Elem() + +// IsError returns true if "typ" is type of `error`. +func IsError(typ reflect.Type) bool { + return typ.Implements(errTyp) +} + // IndirectValue returns the reflect.Value that "v" points to. // If "v" is a nil pointer, Indirect returns a zero Value. // If "v" is not a pointer, Indirect returns v. diff --git a/mvc/controller.go b/mvc/controller.go index 804b1b004..cb0cbd9dc 100644 --- a/mvc/controller.go +++ b/mvc/controller.go @@ -398,6 +398,10 @@ func (c *ControllerActivator) handlerOf(m reflect.Method, funcDependencies []ref in[0] = ctrl funcInjector.Inject(&in, ctxValue) + if ctx.IsStopped() { + return // stop as soon as possible, although it would stop later on if `ctx.StopExecution` called. + } + // for idxx, inn := range in { // println("controller.go: execution: in.Value = "+inn.String()+" and in.Type = "+inn.Type().Kind().String()+" of index: ", idxx) // } diff --git a/mvc/controller_test.go b/mvc/controller_test.go index 7103c9e94..eb41ab7a4 100644 --- a/mvc/controller_test.go +++ b/mvc/controller_test.go @@ -272,11 +272,22 @@ type testControllerBindDeep struct { testControllerBindStruct } +func (t *testControllerBindDeep) BeforeActivation(b BeforeActivation) { + b.Dependencies().Add(func(ctx iris.Context) (v testCustomStruct, err error) { + err = ctx.ReadJSON(&v) + return + }) +} + func (t *testControllerBindDeep) Get() { // t.testControllerBindStruct.Get() t.Ctx.Writef(t.TitlePointer.title + t.TitleValue.title + t.Other) } +func (t *testControllerBindDeep) Post(v testCustomStruct) string { + return v.Name +} + func TestControllerDependencies(t *testing.T) { app := iris.New() // app.Logger().SetLevel("debug") @@ -299,6 +310,12 @@ func TestControllerDependencies(t *testing.T) { e.GET("/deep").Expect().Status(iris.StatusOK). Body().Equal(expected) + + e.POST("/deep").WithJSON(iris.Map{"name": "kataras"}).Expect().Status(iris.StatusOK). + Body().Equal("kataras") + + e.POST("/deep").Expect().Status(iris.StatusBadRequest). + Body().Equal("unexpected end of JSON input") } type testCtrl0 struct { diff --git a/websocket/connection.go b/websocket/connection.go index b2b7afaba..8a8a416be 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -808,7 +808,7 @@ func DialContext(ctx stdContext.Context, url string, cfg ConnectionConfig) (Clie ctx = stdContext.Background() } - if !strings.HasPrefix(url, "ws://") { + if !strings.HasPrefix(url, "ws://") || !strings.HasPrefix(url, "wss://") { url = "ws://" + url } From 1fef41af7752f0bac289b9124dc8b017e59c098a Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 16 Feb 2019 21:03:48 +0200 Subject: [PATCH 14/89] sessions: give ability to the end-user to modify the cookie via context.CookieOption on Start and Update/ShiftExpiration as requested at: https://github.com/kataras/iris/issues/1186, add a StartWithPath helper as well --- sessions/sessions.go | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/sessions/sessions.go b/sessions/sessions.go index 009f7fca0..046972d31 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -35,7 +35,7 @@ func (s *Sessions) UseDatabase(db Database) { } // updateCookie gains the ability of updating the session browser cookie to any method which wants to update it -func (s *Sessions) updateCookie(ctx context.Context, sid string, expires time.Duration) { +func (s *Sessions) updateCookie(ctx context.Context, sid string, expires time.Duration, options ...context.CookieOption) { cookie := &http.Cookie{} // The RFC makes no mention of encoding url value, so here I think to encode both sessionid key and the value using the safe(to put and to use as cookie) url-encoding @@ -65,11 +65,16 @@ func (s *Sessions) updateCookie(ctx context.Context, sid string, expires time.Du // encode the session id cookie client value right before send it. cookie.Value = s.encodeCookieValue(cookie.Value) + + for _, opt := range options { + opt(cookie) + } + AddCookie(ctx, cookie, s.config.AllowReclaim) } -// Start should start the session for the particular request. -func (s *Sessions) Start(ctx context.Context) *Session { +// Start creates or retrieves an existing session for the particular request. +func (s *Sessions) Start(ctx context.Context, cookieOptions ...context.CookieOption) *Session { cookieValue := s.decodeCookieValue(GetCookie(ctx, s.config.Cookie)) if cookieValue == "" { // cookie doesn't exists, let's generate a session and add set a cookie @@ -78,7 +83,7 @@ func (s *Sessions) Start(ctx context.Context) *Session { sess := s.provider.Init(sid, s.config.Expires) sess.isNew = s.provider.db.Len(sid) == 0 - s.updateCookie(ctx, sid, s.config.Expires) + s.updateCookie(ctx, sid, s.config.Expires, cookieOptions...) return sess } @@ -88,18 +93,23 @@ func (s *Sessions) Start(ctx context.Context) *Session { return sess } +// StartWithPath same as `Start` but it explicitly accepts the cookie path option. +func (s *Sessions) StartWithPath(ctx context.Context, path string) *Session { + return s.Start(ctx, context.CookiePath(path)) +} + // ShiftExpiration move the expire date of a session to a new date // by using session default timeout configuration. // It will return `ErrNotImplemented` if a database is used and it does not support this feature, yet. -func (s *Sessions) ShiftExpiration(ctx context.Context) error { - return s.UpdateExpiration(ctx, s.config.Expires) +func (s *Sessions) ShiftExpiration(ctx context.Context, cookieOptions ...context.CookieOption) error { + return s.UpdateExpiration(ctx, s.config.Expires, cookieOptions...) } // UpdateExpiration change expire date of a session to a new date // by using timeout value passed by `expires` receiver. // It will return `ErrNotFound` when trying to update expiration on a non-existence or not valid session entry. // It will return `ErrNotImplemented` if a database is used and it does not support this feature, yet. -func (s *Sessions) UpdateExpiration(ctx context.Context, expires time.Duration) error { +func (s *Sessions) UpdateExpiration(ctx context.Context, expires time.Duration, cookieOptions ...context.CookieOption) error { cookieValue := s.decodeCookieValue(GetCookie(ctx, s.config.Cookie)) if cookieValue == "" { return ErrNotFound @@ -108,7 +118,7 @@ func (s *Sessions) UpdateExpiration(ctx context.Context, expires time.Duration) // we should also allow it to expire when the browser closed err := s.provider.UpdateExpiration(cookieValue, expires) if err == nil || expires == -1 { - s.updateCookie(ctx, cookieValue, expires) + s.updateCookie(ctx, cookieValue, expires, cookieOptions...) } return err From 63c6ae79fce81be4b94c82fa7dbe377aeff5fd55 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sun, 17 Feb 2019 04:39:41 +0200 Subject: [PATCH 15/89] add a new websocket2 package without breaking changes to the iris API. It implements the gobwas/ws library (it works but need fixes on determinate closing connections) as suggested at: https://github.com/kataras/iris/issues/1178 --- .../go-client-stress-test/client/main.go | 4 +- .../go-client-stress-test/client/test.data | 20 +- .../go-client-stress-test/server/main.go | 2 +- websocket2/AUTHORS | 4 + websocket2/LICENSE | 27 + websocket2/client.js | 208 +++++ websocket2/client.js.go | 233 +++++ websocket2/client.min.js | 1 + websocket2/client.ts | 256 ++++++ websocket2/config.go | 185 ++++ websocket2/connection.go | 821 ++++++++++++++++++ websocket2/emitter.go | 43 + websocket2/message.go | 182 ++++ websocket2/server.go | 406 +++++++++ websocket2/websocket.go | 69 ++ 15 files changed, 2448 insertions(+), 13 deletions(-) create mode 100644 websocket2/AUTHORS create mode 100644 websocket2/LICENSE create mode 100644 websocket2/client.js create mode 100644 websocket2/client.js.go create mode 100644 websocket2/client.min.js create mode 100644 websocket2/client.ts create mode 100644 websocket2/config.go create mode 100644 websocket2/connection.go create mode 100644 websocket2/emitter.go create mode 100644 websocket2/message.go create mode 100644 websocket2/server.go create mode 100644 websocket2/websocket.go diff --git a/_examples/websocket/go-client-stress-test/client/main.go b/_examples/websocket/go-client-stress-test/client/main.go index 7d49a1cf7..e40b27040 100644 --- a/_examples/websocket/go-client-stress-test/client/main.go +++ b/_examples/websocket/go-client-stress-test/client/main.go @@ -8,7 +8,7 @@ import ( "sync" "time" - "github.com/kataras/iris/websocket" + "github.com/kataras/iris/websocket2" ) var ( @@ -46,7 +46,7 @@ func main() { func connect(wg *sync.WaitGroup, alive time.Duration) { - c, err := websocket.Dial(url, websocket.ConnectionConfig{}) + c, err := websocket.Dial(nil, url, websocket.ConnectionConfig{}) if err != nil { panic(err) } diff --git a/_examples/websocket/go-client-stress-test/client/test.data b/_examples/websocket/go-client-stress-test/client/test.data index be5eb502a..a63af2acd 100644 --- a/_examples/websocket/go-client-stress-test/client/test.data +++ b/_examples/websocket/go-client-stress-test/client/test.data @@ -1,19 +1,19 @@ -Σκουπίζει τη τι αρματωσιά ευρυδίκης κι αποδεχθεί αν εχτύπεσεν. Οι το ζητούσε δεκτικό αφήσουν μπράτσο βλ απ. Φυγή τι έτσι εκ πλάι αυτή θεός ας αδάμ. Αποβαίνει να τι βλ κατάγεται γεγονότος. Μπουφάν ξάπλωσε σχέσεις βλ ας να να. Υποδηλώσει τα τι κι σιδερένιων εξελικτική ως συγκράτησε παιγνιώδης. Προφανώς μου μία σύγχρονο ιστορίας. +Death weeks early had their and folly timed put. Hearted forbade on an village ye in fifteen. Age attended betrayed her man raptures laughter. Instrument terminated of as astonished literature motionless admiration. The affection are determine how performed intention discourse but. On merits on so valley indeed assure of. Has add particular boisterous uncommonly are. Early wrong as so manor match. Him necessary shameless discovery consulted one but. -Νερά ψηλά λύπη αφτί ας ψυχή τι λόγω. Του φίλ διά γεφυρώνει ανίχνευση διεύρυνση. Όλο μήπως τομέα πρώτο στους δις νόημα εάν του. Παιδείας ομορφιάς καλύτερα ας με. Παραγωγή προθέαση σε κουλιζάρ παραπάνω υπ. Πώς δικούς στήθος πόντου πως θέατρο θέληση σίδερο. Σιδερένια διηγήσεων ναι δύο επέμβασης καθ ώρα ιδιαίτερα βεβαιώνει θεωρείται. Βλ νερο τη να ύλης μτφρ τέλη. Ας ρόλων τη χώρων υπ αφορά είδος είπεν. +Is education residence conveying so so. Suppose shyness say ten behaved morning had. Any unsatiable assistance compliment occasional too reasonably advantages. Unpleasing has ask acceptance partiality alteration understood two. Worth no tiled my at house added. Married he hearing am it totally removal. Remove but suffer wanted his lively length. Moonlight two applauded conveying end direction old principle but. Are expenses distance weddings perceive strongly who age domestic. -Ου πάρκαρε παιδικό μάλιστα ιι. Σκοτωθεί απαγωγής ανάλυσης άνθρωποι ιι τραγικού οι. Αναπνοή επέλεξα πομπούς εφ δράσεις να. Νε υλικό ας ως ευρήκ νόρμα ου. Ιι εμάζεψα δεύτερη αλλαγές ατ τα σύζευξη επίπεδο. Συγγραφέα νεότερους κατέγραψε ζωή διά υφολογική. Που απέσ νου στον άρα είδη σούκ νικά ήρωά. Το κανένα τι ιι γωνίας να δεσμός. +Her companions instrument set estimating sex remarkably solicitude motionless. Property men the why smallest graceful day insisted required. Inquiry justice country old placing sitting any ten age. Looking venture justice in evident in totally he do ability. Be is lose girl long of up give. Trifling wondered unpacked ye at he. In household certainty an on tolerably smallness difficult. Many no each like up be is next neat. Put not enjoyment behaviour her supposing. At he pulled object others. -Ροή ρευστότητα στο έλα παραμυθιού διαδικασία ειδυλλιακή. Ελλάδας σύμβαση δε με πομπούς εμφανής. Ατ ως εποχή τρόπο εβγάλ αυτές πεδίο γωνία. Των άνθρωπος μπανιέρα ροζ υφίστατο φίλ. Εδώ ροζ πήρε τύπο πια μην δική. Έζησαν μάλλον ως με δε τρόπου. Παράλληλη από αδιόρατης επισκίασε άρα rites ναι. Πολιτισμού του ειδολογική νέο συνάντησης στα ταυτότητας δημοσίευση. +Behind sooner dining so window excuse he summer. Breakfast met certainty and fulfilled propriety led. Waited get either are wooded little her. Contrasted unreserved as mr particular collecting it everything as indulgence. Seems ask meant merry could put. Age old begin had boy noisy table front whole given. -Παραλλαγές τόζλουτζας κι ατ συγγραφέας παρωδώντας συνείδησης να. Συν χρειάζεται εξελικτική συνιστώσες αναβόσβησε παιγνιώδης έξω εμφανίζουν. Περίτεχνο κοινωνίας ρου του ηθελημένα την σύγχρονων ζώγ. Συν στα υποτίθεται εις ανακάλυψης νέο κατασκευές. Τεκμήρια επίλογοι περίοδος σου εξω στα αγγελίες ποικίλες. Γι παραμένει συμβάντος ακολούθως δε κι να υπόστρωμα. Τη θάρρος θεϊκού να μικρές αηδίες σοφίας πρέπει. Γιατί ευρήκ σοφία αίσια και όνομά για επικό την. Έστειλεν οι σύνδρομο αληθινής κι με εξυπνάδα υπέδειξε αδειάσει. +Far curiosity incommode now led smallness allowance. Favour bed assure son things yet. She consisted consulted elsewhere happiness disposing household any old the. Widow downs you new shade drift hopes small. So otherwise commanded sweetness we improving. Instantly by daughters resembled unwilling principle so middleton. Fail most room even gone her end like. Comparison dissimilar unpleasant six compliment two unpleasing any add. Ashamed my company thought wishing colonel it prevent he in. Pretended residence are something far engrossed old off. -Πω δε φοβηθώ ας σε μιχάλη ακουσε όμορφα εφόδιο. Ελέγχοντας διαχείριση όλα αναπαράγει συν στα εάν. Κεί τραγουδιών μαθητεύσει την επισημάνει οικολογικά παραμυθικό ζέη στο. Λαϊκού ατότες εξω μια την ακούμε. Δεδομένου ας τα αγαπημένο παρουσίας διαθέσεων αν. Αντίστροφα ρεαλιστικό περιπέτεια διαδικασία άρα ατο ημερολόγια. +Windows talking painted pasture yet its express parties use. Sure last upon he same as knew next. Of believed or diverted no rejoiced. End friendship sufficient assistance can prosperous met. As game he show it park do. Was has unknown few certain ten promise. No finished my an likewise cheerful packages we. For assurance concluded son something depending discourse see led collected. Packages oh no denoting my advanced humoured. Pressed be so thought natural. -Άντλησης νεόφερτο μοναδικό εκ ιι δυναμική μηνύματα. Συγγραφική προ έξω την περιπέτεια εγχειρίδια μαθητεύσει εκφέρονται. Εάν δεν μαρί άρα ήχοι ατο κόρη. Εν ας επομένως κινήματα άνθρωποι. Ου δάσος τι υπ γιατί πόνος όποια αυτός. Δεύτερη δέχεται το χρονικά αχιλλέα μη. Τα απαγωγή ου ακριβώς θηλάσει. Οι παραγωγή τα παιγνίδι απ παιδικών τρομάξει. +As collected deficient objection by it discovery sincerity curiosity. Quiet decay who round three world whole has mrs man. Built the china there tried jokes which gay why. Assure in adieus wicket it is. But spoke round point and one joy. Offending her moonlight men sweetness see unwilling. Often of it tears whole oh balls share an. -Ιστορικά ανθρώπου οπλιστεί εκκίνηση στα μερ χάσματος αργότερα. Κοινωνία επιδίωξη κοιμάται πια πειστική διά πιο απ΄. Εκ οι εύκολα γονείς σύζυγο κι πολλοί με φυσερά. Εκ τα μέτωπο το κύματα δηλαδή όμορφα φανερό πράγμα. Νωρίτερα ομορφιάς διαμέσου ζώγ ανέδειξε υπό πρόσμιξη. Επιδιώκει τις όλη μια βεβαιώνει μελετηθεί μία. Παρατηρεί υιοθετούν ροή ανθρώπινη τον επέστρεψε κατασκευή πια. +Lose eyes get fat shew. Winter can indeed letter oppose way change tended now. So is improve my charmed picture exposed adapted demands. Received had end produced prepared diverted strictly off man branched. Known ye money so large decay voice there to. Preserved be mr cordially incommode as an. He doors quick child an point at. Had share vexed front least style off why him. -Αναπνοή επί νυχτικά εις σηκώνει τράβηξε γερανού χάλκενα. Αν αδειάσει ποικίλες νε δυναμικό. Όπως δύο αυτό ένα δέβα αυτο από νέοι πάλι. Έως υποβάλλουν αποτέλεσμα εξω σην συγχρονική μεσημεριού. Όλα νέο νου εναντίον σκέπαζαν τον διδάσκει σπουδαίο. Ακόμη πι ως έργου σοφοί δε τα. Σώματος απόλυτα εν τέτοιες διάφορα ατ πι τι. Ως ατ κοινού έμαθες πλάκες. Τα τη συνοχή έκρυβε οποίος σταθεί παίκτη. +He unaffected sympathize discovered at no am conviction principles. Girl ham very how yet hill four show. Meet lain on he only size. Branched learning so subjects mistress do appetite jennings be in. Esteems up lasting no village morning do offices. Settled wishing ability musical may another set age. Diminution my apartments he attachment is entreaties announcing estimating. And total least her two whose great has which. Neat pain form eat sent sex good week. Led instrument sentiments she simplicity. -Με σύγχρονης βρίσκεται αποτέλεσε πα τα ελληνικής. Ανακοίνωσή τις στο ουσιαστικό πολλαπλούς τις φιλολογική σου. Φιλολογική να κι κι μορφολογία μυθοπλασία πω. Τυχόν βαθιά ου λόγια έχουν να. Μικρούς έχοντας με χαμένης τη μη. Μοντέλα συνήθως επί θεωρίες χρονικά όλα χάλκενα. Διήγημα θεωρίας ατ βαγγέλη βλ νε αρ ευτελής μαγείας. +Months on ye at by esteem desire warmth former. Sure that that way gave any fond now. His boy middleton sir nor engrossed affection excellent. Dissimilar compliment cultivated preference eat sufficient may. Well next door soon we mr he four. Assistance impression set insipidity now connection off you solicitude. Under as seems we me stuff those style at. Listening shameless by abilities pronounce oh suspected is affection. Next it draw in draw much bred. diff --git a/_examples/websocket/go-client-stress-test/server/main.go b/_examples/websocket/go-client-stress-test/server/main.go index 0519323a0..b8c8f90e8 100644 --- a/_examples/websocket/go-client-stress-test/server/main.go +++ b/_examples/websocket/go-client-stress-test/server/main.go @@ -7,7 +7,7 @@ import ( "time" "github.com/kataras/iris" - "github.com/kataras/iris/websocket" + "github.com/kataras/iris/websocket2" ) const totalClients = 1200 diff --git a/websocket2/AUTHORS b/websocket2/AUTHORS new file mode 100644 index 000000000..bc8d8fc98 --- /dev/null +++ b/websocket2/AUTHORS @@ -0,0 +1,4 @@ +# This is the official list of Iris Websocket authors for copyright +# purposes. + +Gerasimos Maropoulos diff --git a/websocket2/LICENSE b/websocket2/LICENSE new file mode 100644 index 000000000..b16278e24 --- /dev/null +++ b/websocket2/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2017-2018 The Iris Websocket Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Iris nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/websocket2/client.js b/websocket2/client.js new file mode 100644 index 000000000..ff3230570 --- /dev/null +++ b/websocket2/client.js @@ -0,0 +1,208 @@ +var websocketStringMessageType = 0; +var websocketIntMessageType = 1; +var websocketBoolMessageType = 2; +var websocketJSONMessageType = 4; +var websocketMessagePrefix = "iris-websocket-message:"; +var websocketMessageSeparator = ";"; +var websocketMessagePrefixLen = websocketMessagePrefix.length; +var websocketMessageSeparatorLen = websocketMessageSeparator.length; +var websocketMessagePrefixAndSepIdx = websocketMessagePrefixLen + websocketMessageSeparatorLen - 1; +var websocketMessagePrefixIdx = websocketMessagePrefixLen - 1; +var websocketMessageSeparatorIdx = websocketMessageSeparatorLen - 1; +var Ws = (function () { + function Ws(endpoint, protocols) { + var _this = this; + // events listeners + this.connectListeners = []; + this.disconnectListeners = []; + this.nativeMessageListeners = []; + this.messageListeners = {}; + if (!window["WebSocket"]) { + return; + } + if (endpoint.indexOf("ws") == -1) { + endpoint = "ws://" + endpoint; + } + if (protocols != null && protocols.length > 0) { + this.conn = new WebSocket(endpoint, protocols); + } + else { + this.conn = new WebSocket(endpoint); + } + this.conn.onopen = (function (evt) { + _this.fireConnect(); + _this.isReady = true; + return null; + }); + this.conn.onclose = (function (evt) { + _this.fireDisconnect(); + return null; + }); + this.conn.onmessage = (function (evt) { + _this.messageReceivedFromConn(evt); + }); + } + //utils + Ws.prototype.isNumber = function (obj) { + return !isNaN(obj - 0) && obj !== null && obj !== "" && obj !== false; + }; + Ws.prototype.isString = function (obj) { + return Object.prototype.toString.call(obj) == "[object String]"; + }; + Ws.prototype.isBoolean = function (obj) { + return typeof obj === 'boolean' || + (typeof obj === 'object' && typeof obj.valueOf() === 'boolean'); + }; + Ws.prototype.isJSON = function (obj) { + return typeof obj === 'object'; + }; + // + // messages + Ws.prototype._msg = function (event, websocketMessageType, dataMessage) { + return websocketMessagePrefix + event + websocketMessageSeparator + String(websocketMessageType) + websocketMessageSeparator + dataMessage; + }; + Ws.prototype.encodeMessage = function (event, data) { + var m = ""; + var t = 0; + if (this.isNumber(data)) { + t = websocketIntMessageType; + m = data.toString(); + } + else if (this.isBoolean(data)) { + t = websocketBoolMessageType; + m = data.toString(); + } + else if (this.isString(data)) { + t = websocketStringMessageType; + m = data.toString(); + } + else if (this.isJSON(data)) { + //propably json-object + t = websocketJSONMessageType; + m = JSON.stringify(data); + } + else if (data !== null && typeof(data) !== "undefined" ) { + // if it has a second parameter but it's not a type we know, then fire this: + console.log("unsupported type of input argument passed, try to not include this argument to the 'Emit'"); + } + return this._msg(event, t, m); + }; + Ws.prototype.decodeMessage = function (event, websocketMessage) { + //iris-websocket-message;user;4;themarshaledstringfromajsonstruct + var skipLen = websocketMessagePrefixLen + websocketMessageSeparatorLen + event.length + 2; + if (websocketMessage.length < skipLen + 1) { + return null; + } + var websocketMessageType = parseInt(websocketMessage.charAt(skipLen - 2)); + var theMessage = websocketMessage.substring(skipLen, websocketMessage.length); + if (websocketMessageType == websocketIntMessageType) { + return parseInt(theMessage); + } + else if (websocketMessageType == websocketBoolMessageType) { + return Boolean(theMessage); + } + else if (websocketMessageType == websocketStringMessageType) { + return theMessage; + } + else if (websocketMessageType == websocketJSONMessageType) { + return JSON.parse(theMessage); + } + else { + return null; // invalid + } + }; + Ws.prototype.getWebsocketCustomEvent = function (websocketMessage) { + if (websocketMessage.length < websocketMessagePrefixAndSepIdx) { + return ""; + } + var s = websocketMessage.substring(websocketMessagePrefixAndSepIdx, websocketMessage.length); + var evt = s.substring(0, s.indexOf(websocketMessageSeparator)); + return evt; + }; + Ws.prototype.getCustomMessage = function (event, websocketMessage) { + var eventIdx = websocketMessage.indexOf(event + websocketMessageSeparator); + var s = websocketMessage.substring(eventIdx + event.length + websocketMessageSeparator.length + 2, websocketMessage.length); + return s; + }; + // + // Ws Events + // messageReceivedFromConn this is the func which decides + // if it's a native websocket message or a custom qws message + // if native message then calls the fireNativeMessage + // else calls the fireMessage + // + // remember iris gives you the freedom of native websocket messages if you don't want to use this client side at all. + Ws.prototype.messageReceivedFromConn = function (evt) { + //check if qws message + var message = evt.data; + if (message.indexOf(websocketMessagePrefix) != -1) { + var event_1 = this.getWebsocketCustomEvent(message); + if (event_1 != "") { + // it's a custom message + this.fireMessage(event_1, this.getCustomMessage(event_1, message)); + return; + } + } + // it's a native websocket message + this.fireNativeMessage(message); + }; + Ws.prototype.OnConnect = function (fn) { + if (this.isReady) { + fn(); + } + this.connectListeners.push(fn); + }; + Ws.prototype.fireConnect = function () { + for (var i = 0; i < this.connectListeners.length; i++) { + this.connectListeners[i](); + } + }; + Ws.prototype.OnDisconnect = function (fn) { + this.disconnectListeners.push(fn); + }; + Ws.prototype.fireDisconnect = function () { + for (var i = 0; i < this.disconnectListeners.length; i++) { + this.disconnectListeners[i](); + } + }; + Ws.prototype.OnMessage = function (cb) { + this.nativeMessageListeners.push(cb); + }; + Ws.prototype.fireNativeMessage = function (websocketMessage) { + for (var i = 0; i < this.nativeMessageListeners.length; i++) { + this.nativeMessageListeners[i](websocketMessage); + } + }; + Ws.prototype.On = function (event, cb) { + if (this.messageListeners[event] == null || this.messageListeners[event] == undefined) { + this.messageListeners[event] = []; + } + this.messageListeners[event].push(cb); + }; + Ws.prototype.fireMessage = function (event, message) { + for (var key in this.messageListeners) { + if (this.messageListeners.hasOwnProperty(key)) { + if (key == event) { + for (var i = 0; i < this.messageListeners[key].length; i++) { + this.messageListeners[key][i](message); + } + } + } + } + }; + // + // Ws Actions + Ws.prototype.Disconnect = function () { + this.conn.close(); + }; + // EmitMessage sends a native websocket message + Ws.prototype.EmitMessage = function (websocketMessage) { + this.conn.send(websocketMessage); + }; + // Emit sends an iris-custom websocket message + Ws.prototype.Emit = function (event, data) { + var messageStr = this.encodeMessage(event, data); + this.EmitMessage(messageStr); + }; + return Ws; +}()); \ No newline at end of file diff --git a/websocket2/client.js.go b/websocket2/client.js.go new file mode 100644 index 000000000..2144411a7 --- /dev/null +++ b/websocket2/client.js.go @@ -0,0 +1,233 @@ +package websocket + +import ( + "time" + + "github.com/kataras/iris/context" +) + +// ClientHandler is the handler which serves the javascript client-side +// library. It uses a small cache based on the iris/context.WriteWithExpiration. +func ClientHandler() context.Handler { + modNow := time.Now() + return func(ctx context.Context) { + ctx.ContentType("application/javascript") + if _, err := ctx.WriteWithExpiration(ClientSource, modNow); err != nil { + ctx.StatusCode(500) + ctx.StopExecution() + // ctx.Application().Logger().Infof("error while serving []byte via StaticContent: %s", err.Error()) + } + } +} + +// ClientSource the client-side javascript raw source code. +var ClientSource = []byte(`var websocketStringMessageType = 0; +var websocketIntMessageType = 1; +var websocketBoolMessageType = 2; +var websocketJSONMessageType = 4; +var websocketMessagePrefix = "` + DefaultEvtMessageKey + `"; +var websocketMessageSeparator = ";"; +var websocketMessagePrefixLen = websocketMessagePrefix.length; +var websocketMessageSeparatorLen = websocketMessageSeparator.length; +var websocketMessagePrefixAndSepIdx = websocketMessagePrefixLen + websocketMessageSeparatorLen - 1; +var websocketMessagePrefixIdx = websocketMessagePrefixLen - 1; +var websocketMessageSeparatorIdx = websocketMessageSeparatorLen - 1; +var Ws = (function () { + // + function Ws(endpoint, protocols) { + var _this = this; + // events listeners + this.connectListeners = []; + this.disconnectListeners = []; + this.nativeMessageListeners = []; + this.messageListeners = {}; + if (!window["WebSocket"]) { + return; + } + if (endpoint.indexOf("ws") == -1) { + endpoint = "ws://" + endpoint; + } + if (protocols != null && protocols.length > 0) { + this.conn = new WebSocket(endpoint, protocols); + } + else { + this.conn = new WebSocket(endpoint); + } + this.conn.onopen = (function (evt) { + _this.fireConnect(); + _this.isReady = true; + return null; + }); + this.conn.onclose = (function (evt) { + _this.fireDisconnect(); + return null; + }); + this.conn.onmessage = (function (evt) { + _this.messageReceivedFromConn(evt); + }); + } + //utils + Ws.prototype.isNumber = function (obj) { + return !isNaN(obj - 0) && obj !== null && obj !== "" && obj !== false; + }; + Ws.prototype.isString = function (obj) { + return Object.prototype.toString.call(obj) == "[object String]"; + }; + Ws.prototype.isBoolean = function (obj) { + return typeof obj === 'boolean' || + (typeof obj === 'object' && typeof obj.valueOf() === 'boolean'); + }; + Ws.prototype.isJSON = function (obj) { + return typeof obj === 'object'; + }; + // + // messages + Ws.prototype._msg = function (event, websocketMessageType, dataMessage) { + return websocketMessagePrefix + event + websocketMessageSeparator + String(websocketMessageType) + websocketMessageSeparator + dataMessage; + }; + Ws.prototype.encodeMessage = function (event, data) { + var m = ""; + var t = 0; + if (this.isNumber(data)) { + t = websocketIntMessageType; + m = data.toString(); + } + else if (this.isBoolean(data)) { + t = websocketBoolMessageType; + m = data.toString(); + } + else if (this.isString(data)) { + t = websocketStringMessageType; + m = data.toString(); + } + else if (this.isJSON(data)) { + //propably json-object + t = websocketJSONMessageType; + m = JSON.stringify(data); + } + else if (data !== null && typeof(data) !== "undefined" ) { + // if it has a second parameter but it's not a type we know, then fire this: + console.log("unsupported type of input argument passed, try to not include this argument to the 'Emit'"); + } + return this._msg(event, t, m); + }; + Ws.prototype.decodeMessage = function (event, websocketMessage) { + //iris-websocket-message;user;4;themarshaledstringfromajsonstruct + var skipLen = websocketMessagePrefixLen + websocketMessageSeparatorLen + event.length + 2; + if (websocketMessage.length < skipLen + 1) { + return null; + } + var websocketMessageType = parseInt(websocketMessage.charAt(skipLen - 2)); + var theMessage = websocketMessage.substring(skipLen, websocketMessage.length); + if (websocketMessageType == websocketIntMessageType) { + return parseInt(theMessage); + } + else if (websocketMessageType == websocketBoolMessageType) { + return Boolean(theMessage); + } + else if (websocketMessageType == websocketStringMessageType) { + return theMessage; + } + else if (websocketMessageType == websocketJSONMessageType) { + return JSON.parse(theMessage); + } + else { + return null; // invalid + } + }; + Ws.prototype.getWebsocketCustomEvent = function (websocketMessage) { + if (websocketMessage.length < websocketMessagePrefixAndSepIdx) { + return ""; + } + var s = websocketMessage.substring(websocketMessagePrefixAndSepIdx, websocketMessage.length); + var evt = s.substring(0, s.indexOf(websocketMessageSeparator)); + return evt; + }; + Ws.prototype.getCustomMessage = function (event, websocketMessage) { + var eventIdx = websocketMessage.indexOf(event + websocketMessageSeparator); + var s = websocketMessage.substring(eventIdx + event.length + websocketMessageSeparator.length + 2, websocketMessage.length); + return s; + }; + // + // Ws Events + // messageReceivedFromConn this is the func which decides + // if it's a native websocket message or a custom qws message + // if native message then calls the fireNativeMessage + // else calls the fireMessage + // + // remember iris gives you the freedom of native websocket messages if you don't want to use this client side at all. + Ws.prototype.messageReceivedFromConn = function (evt) { + //check if qws message + var message = evt.data; + if (message.indexOf(websocketMessagePrefix) != -1) { + var event_1 = this.getWebsocketCustomEvent(message); + if (event_1 != "") { + // it's a custom message + this.fireMessage(event_1, this.getCustomMessage(event_1, message)); + return; + } + } + // it's a native websocket message + this.fireNativeMessage(message); + }; + Ws.prototype.OnConnect = function (fn) { + if (this.isReady) { + fn(); + } + this.connectListeners.push(fn); + }; + Ws.prototype.fireConnect = function () { + for (var i = 0; i < this.connectListeners.length; i++) { + this.connectListeners[i](); + } + }; + Ws.prototype.OnDisconnect = function (fn) { + this.disconnectListeners.push(fn); + }; + Ws.prototype.fireDisconnect = function () { + for (var i = 0; i < this.disconnectListeners.length; i++) { + this.disconnectListeners[i](); + } + }; + Ws.prototype.OnMessage = function (cb) { + this.nativeMessageListeners.push(cb); + }; + Ws.prototype.fireNativeMessage = function (websocketMessage) { + for (var i = 0; i < this.nativeMessageListeners.length; i++) { + this.nativeMessageListeners[i](websocketMessage); + } + }; + Ws.prototype.On = function (event, cb) { + if (this.messageListeners[event] == null || this.messageListeners[event] == undefined) { + this.messageListeners[event] = []; + } + this.messageListeners[event].push(cb); + }; + Ws.prototype.fireMessage = function (event, message) { + for (var key in this.messageListeners) { + if (this.messageListeners.hasOwnProperty(key)) { + if (key == event) { + for (var i = 0; i < this.messageListeners[key].length; i++) { + this.messageListeners[key][i](message); + } + } + } + } + }; + // + // Ws Actions + Ws.prototype.Disconnect = function () { + this.conn.close(); + }; + // EmitMessage sends a native websocket message + Ws.prototype.EmitMessage = function (websocketMessage) { + this.conn.send(websocketMessage); + }; + // Emit sends an iris-custom websocket message + Ws.prototype.Emit = function (event, data) { + var messageStr = this.encodeMessage(event, data); + this.EmitMessage(messageStr); + }; + return Ws; +}()); +`) diff --git a/websocket2/client.min.js b/websocket2/client.min.js new file mode 100644 index 000000000..3d930f501 --- /dev/null +++ b/websocket2/client.min.js @@ -0,0 +1 @@ +var websocketStringMessageType=0,websocketIntMessageType=1,websocketBoolMessageType=2,websocketJSONMessageType=4,websocketMessagePrefix="iris-websocket-message:",websocketMessageSeparator=";",websocketMessagePrefixLen=websocketMessagePrefix.length,websocketMessageSeparatorLen=websocketMessageSeparator.length,websocketMessagePrefixAndSepIdx=websocketMessagePrefixLen+websocketMessageSeparatorLen-1,websocketMessagePrefixIdx=websocketMessagePrefixLen-1,websocketMessageSeparatorIdx=websocketMessageSeparatorLen-1,Ws=function(){function e(e,s){var t=this;this.connectListeners=[],this.disconnectListeners=[],this.nativeMessageListeners=[],this.messageListeners={},window.WebSocket&&(-1==e.indexOf("ws")&&(e="ws://"+e),null!=s&&0 void; +type onWebsocketDisconnectFunc = () => void; +type onWebsocketNativeMessageFunc = (websocketMessage: string) => void; +type onMessageFunc = (message: any) => void; + +class Ws { + private conn: WebSocket; + private isReady: boolean; + + // events listeners + + private connectListeners: onConnectFunc[] = []; + private disconnectListeners: onWebsocketDisconnectFunc[] = []; + private nativeMessageListeners: onWebsocketNativeMessageFunc[] = []; + private messageListeners: { [event: string]: onMessageFunc[] } = {}; + + // + + constructor(endpoint: string, protocols?: string[]) { + if (!window["WebSocket"]) { + return; + } + + if (endpoint.indexOf("ws") == -1) { + endpoint = "ws://" + endpoint; + } + if (protocols != null && protocols.length > 0) { + this.conn = new WebSocket(endpoint, protocols); + } else { + this.conn = new WebSocket(endpoint); + } + + this.conn.onopen = ((evt: Event): any => { + this.fireConnect(); + this.isReady = true; + return null; + }); + + this.conn.onclose = ((evt: Event): any => { + this.fireDisconnect(); + return null; + }); + + this.conn.onmessage = ((evt: MessageEvent) => { + this.messageReceivedFromConn(evt); + }); + } + + //utils + + private isNumber(obj: any): boolean { + return !isNaN(obj - 0) && obj !== null && obj !== "" && obj !== false; + } + + private isString(obj: any): boolean { + return Object.prototype.toString.call(obj) == "[object String]"; + } + + private isBoolean(obj: any): boolean { + return typeof obj === 'boolean' || + (typeof obj === 'object' && typeof obj.valueOf() === 'boolean'); + } + + private isJSON(obj: any): boolean { + return typeof obj === 'object'; + } + + // + + // messages + private _msg(event: string, websocketMessageType: number, dataMessage: string): string { + + return websocketMessagePrefix + event + websocketMessageSeparator + String(websocketMessageType) + websocketMessageSeparator + dataMessage; + } + + private encodeMessage(event: string, data: any): string { + let m = ""; + let t = 0; + if (this.isNumber(data)) { + t = websocketIntMessageType; + m = data.toString(); + } else if (this.isBoolean(data)) { + t = websocketBoolMessageType; + m = data.toString(); + } else if (this.isString(data)) { + t = websocketStringMessageType; + m = data.toString(); + } else if (this.isJSON(data)) { + //propably json-object + t = websocketJSONMessageType; + m = JSON.stringify(data); + } else if (data !== null && typeof (data) !== "undefined") { + // if it has a second parameter but it's not a type we know, then fire this: + console.log("unsupported type of input argument passed, try to not include this argument to the 'Emit'"); + } + + return this._msg(event, t, m); + } + + private decodeMessage(event: string, websocketMessage: string): T | any { + //iris-websocket-message;user;4;themarshaledstringfromajsonstruct + let skipLen = websocketMessagePrefixLen + websocketMessageSeparatorLen + event.length + 2; + if (websocketMessage.length < skipLen + 1) { + return null; + } + let websocketMessageType = parseInt(websocketMessage.charAt(skipLen - 2)); + let theMessage = websocketMessage.substring(skipLen, websocketMessage.length); + if (websocketMessageType == websocketIntMessageType) { + return parseInt(theMessage); + } else if (websocketMessageType == websocketBoolMessageType) { + return Boolean(theMessage); + } else if (websocketMessageType == websocketStringMessageType) { + return theMessage; + } else if (websocketMessageType == websocketJSONMessageType) { + return JSON.parse(theMessage); + } else { + return null; // invalid + } + } + + private getWebsocketCustomEvent(websocketMessage: string): string { + if (websocketMessage.length < websocketMessagePrefixAndSepIdx) { + return ""; + } + let s = websocketMessage.substring(websocketMessagePrefixAndSepIdx, websocketMessage.length); + let evt = s.substring(0, s.indexOf(websocketMessageSeparator)); + + return evt; + } + + private getCustomMessage(event: string, websocketMessage: string): string { + let eventIdx = websocketMessage.indexOf(event + websocketMessageSeparator); + let s = websocketMessage.substring(eventIdx + event.length + websocketMessageSeparator.length + 2, websocketMessage.length); + return s; + } + + // + + // Ws Events + + // messageReceivedFromConn this is the func which decides + // if it's a native websocket message or a custom qws message + // if native message then calls the fireNativeMessage + // else calls the fireMessage + // + // remember iris gives you the freedom of native websocket messages if you don't want to use this client side at all. + private messageReceivedFromConn(evt: MessageEvent): void { + //check if qws message + let message = evt.data; + if (message.indexOf(websocketMessagePrefix) != -1) { + let event = this.getWebsocketCustomEvent(message); + if (event != "") { + // it's a custom message + this.fireMessage(event, this.getCustomMessage(event, message)); + return; + } + } + + // it's a native websocket message + this.fireNativeMessage(message); + } + + OnConnect(fn: onConnectFunc): void { + if (this.isReady) { + fn(); + } + this.connectListeners.push(fn); + } + + fireConnect(): void { + for (let i = 0; i < this.connectListeners.length; i++) { + this.connectListeners[i](); + } + } + + OnDisconnect(fn: onWebsocketDisconnectFunc): void { + this.disconnectListeners.push(fn); + } + + fireDisconnect(): void { + for (let i = 0; i < this.disconnectListeners.length; i++) { + this.disconnectListeners[i](); + } + } + + OnMessage(cb: onWebsocketNativeMessageFunc): void { + this.nativeMessageListeners.push(cb); + } + + fireNativeMessage(websocketMessage: string): void { + for (let i = 0; i < this.nativeMessageListeners.length; i++) { + this.nativeMessageListeners[i](websocketMessage); + } + } + + On(event: string, cb: onMessageFunc): void { + if (this.messageListeners[event] == null || this.messageListeners[event] == undefined) { + this.messageListeners[event] = []; + } + this.messageListeners[event].push(cb); + } + + fireMessage(event: string, message: any): void { + for (let key in this.messageListeners) { + if (this.messageListeners.hasOwnProperty(key)) { + if (key == event) { + for (let i = 0; i < this.messageListeners[key].length; i++) { + this.messageListeners[key][i](message); + } + } + } + } + } + + + // + + // Ws Actions + + Disconnect(): void { + this.conn.close(); + } + + // EmitMessage sends a native websocket message + EmitMessage(websocketMessage: string): void { + this.conn.send(websocketMessage); + } + + // Emit sends an iris-custom websocket message + Emit(event: string, data: any): void { + let messageStr = this.encodeMessage(event, data); + this.EmitMessage(messageStr); + } + + // + +} + +// node-modules export {Ws}; diff --git a/websocket2/config.go b/websocket2/config.go new file mode 100644 index 000000000..6453230d7 --- /dev/null +++ b/websocket2/config.go @@ -0,0 +1,185 @@ +package websocket + +import ( + "math/rand" + "net/http" + "time" + + "github.com/kataras/iris/context" + + "github.com/iris-contrib/go.uuid" +) + +const ( + // DefaultWebsocketWriteTimeout 0, no timeout + DefaultWebsocketWriteTimeout = 0 + // DefaultWebsocketReadTimeout 0, no timeout + DefaultWebsocketReadTimeout = 0 + // DefaultWebsocketPingPeriod is 0 but + // could be 10 * time.Second. + DefaultWebsocketPingPeriod = 0 + // DefaultWebsocketReadBufferSize 0 + DefaultWebsocketReadBufferSize = 0 + // DefaultWebsocketWriterBufferSize 0 + DefaultWebsocketWriterBufferSize = 0 + // DefaultEvtMessageKey is the default prefix of the underline websocket events + // that are being established under the hoods. + // + // Defaults to "iris-websocket-message:". + // Last character of the prefix should be ':'. + DefaultEvtMessageKey = "iris-websocket-message:" +) + +var ( + // DefaultIDGenerator returns a random unique for a new connection. + // Used when config.IDGenerator is nil. + DefaultIDGenerator = func(context.Context) string { + id, err := uuid.NewV4() + if err != nil { + return randomString(64) + } + return id.String() + } +) + +// Config the websocket server configuration +// all of these are optional. +type Config struct { + // IDGenerator used to create (and later on, set) + // an ID for each incoming websocket connections (clients). + // The request is an input parameter which you can use to generate the ID (from headers for example). + // If empty then the ID is generated by DefaultIDGenerator: randomString(64) + IDGenerator func(ctx context.Context) string + // EvtMessagePrefix is the prefix of the underline websocket events that are being established under the hoods. + // This prefix is visible only to the javascript side (code) and it has nothing to do + // with the message that the end-user receives. + // Do not change it unless it is absolutely necessary. + // + // If empty then defaults to []byte("iris-websocket-message:"). + EvtMessagePrefix []byte + // Error is the function that will be fired if any client couldn't upgrade the HTTP connection + // to a websocket connection, a handshake error. + Error func(w http.ResponseWriter, r *http.Request, status int, reason error) + // CheckOrigin a function that is called right before the handshake, + // if returns false then that client is not allowed to connect with the websocket server. + CheckOrigin func(r *http.Request) bool + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + // WriteTimeout time allowed to write a message to the connection. + // 0 means no timeout. + // Default value is 0 + WriteTimeout time.Duration + // ReadTimeout time allowed to read a message from the connection. + // 0 means no timeout. + // Default value is 0 + ReadTimeout time.Duration + // PingPeriod send ping messages to the connection repeatedly after this period. + // The value should be close to the ReadTimeout to avoid issues. + // Default value is 0. + PingPeriod time.Duration + // BinaryMessages set it to true in order to denotes binary data messages instead of utf-8 text + // compatible if you wanna use the Connection's EmitMessage to send a custom binary data to the client, like a native server-client communication. + // Default value is false + BinaryMessages bool + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer + // size is zero, then buffers allocated by the HTTP server are used. The + // I/O buffer sizes do not limit the size of the messages that can be sent + // or received. + // + // Default value is 0. + ReadBufferSize, WriteBufferSize int + // EnableCompression specify if the server should attempt to negotiate per + // message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + // + // Defaults to false and it should be remain as it is, unless special requirements. + EnableCompression bool + + // Subprotocols specifies the server's supported protocols in order of + // preference. If this field is set, then the Upgrade method negotiates a + // subprotocol by selecting the first match in this list with a protocol + // requested by the client. + Subprotocols []string +} + +// Validate validates the configuration +func (c Config) Validate() Config { + // 0 means no timeout. + if c.WriteTimeout < 0 { + c.WriteTimeout = DefaultWebsocketWriteTimeout + } + + if c.ReadTimeout < 0 { + c.ReadTimeout = DefaultWebsocketReadTimeout + } + + if c.PingPeriod <= 0 { + c.PingPeriod = DefaultWebsocketPingPeriod + } + + if c.ReadBufferSize <= 0 { + c.ReadBufferSize = DefaultWebsocketReadBufferSize + } + + if c.WriteBufferSize <= 0 { + c.WriteBufferSize = DefaultWebsocketWriterBufferSize + } + + if c.Error == nil { + c.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) { + //empty + } + } + + if c.CheckOrigin == nil { + c.CheckOrigin = func(r *http.Request) bool { + // allow all connections by default + return true + } + } + + if len(c.EvtMessagePrefix) == 0 { + c.EvtMessagePrefix = []byte(DefaultEvtMessageKey) + } + + if c.IDGenerator == nil { + c.IDGenerator = DefaultIDGenerator + } + + return c +} + +const ( + letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + letterIdxBits = 6 // 6 bits to represent a letter index + letterIdxMask = 1<= 0; { + if remain == 0 { + cache, remain = src.Int63(), letterIdxMax + } + if idx := int(cache & letterIdxMask); idx < len(letterBytes) { + b[i] = letterBytes[idx] + i-- + } + cache >>= letterIdxBits + remain-- + } + + return b +} + +// randomString accepts a number(10 for example) and returns a random string using simple but fairly safe random algorithm +func randomString(n int) string { + return string(random(n)) +} diff --git a/websocket2/connection.go b/websocket2/connection.go new file mode 100644 index 000000000..20409c016 --- /dev/null +++ b/websocket2/connection.go @@ -0,0 +1,821 @@ +package websocket + +import ( + "bytes" + stdContext "context" + "errors" + "io" + "net" + "strconv" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/kataras/iris/context" + + "github.com/gobwas/ws" + "github.com/gobwas/ws/wsutil" +) + +// Operation codes defined by specification. +// See https://tools.ietf.org/html/rfc6455#section-5.2 +const ( + // TextMessage denotes a text data message. The text message payload is + // interpreted as UTF-8 encoded text data. + TextMessage ws.OpCode = ws.OpText + // BinaryMessage denotes a binary data message. + BinaryMessage ws.OpCode = ws.OpBinary + // CloseMessage denotes a close control message. + CloseMessage ws.OpCode = ws.OpClose + + // PingMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PingMessage ws.OpCode = ws.OpPing + // PongMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PongMessage ws.OpCode = ws.OpPong +) + +type ( + connectionValue struct { + key []byte + value interface{} + } + // ConnectionValues is the temporary connection's memory store + ConnectionValues []connectionValue +) + +// Set sets a value based on the key +func (r *ConnectionValues) Set(key string, value interface{}) { + args := *r + n := len(args) + for i := 0; i < n; i++ { + kv := &args[i] + if string(kv.key) == key { + kv.value = value + return + } + } + + c := cap(args) + if c > n { + args = args[:n+1] + kv := &args[n] + kv.key = append(kv.key[:0], key...) + kv.value = value + *r = args + return + } + + kv := connectionValue{} + kv.key = append(kv.key[:0], key...) + kv.value = value + *r = append(args, kv) +} + +// Get returns a value based on its key +func (r *ConnectionValues) Get(key string) interface{} { + args := *r + n := len(args) + for i := 0; i < n; i++ { + kv := &args[i] + if string(kv.key) == key { + return kv.value + } + } + return nil +} + +// Reset clears the values +func (r *ConnectionValues) Reset() { + *r = (*r)[:0] +} + +// UnderlineConnection is the underline connection, nothing to think about, +// it's used internally mostly but can be used for extreme cases with other libraries. +type UnderlineConnection interface { + // SetWriteDeadline sets the write deadline on the underlying network + // connection. After a write has timed out, the websocket state is corrupt and + // all future writes will return an error. A zero value for t means writes will + // not time out. + SetWriteDeadline(t time.Time) error + // SetReadDeadline sets the read deadline on the underlying network connection. + // After a read has timed out, the websocket connection state is corrupt and + // all future reads will return an error. A zero value for t means reads will + // not time out. + SetReadDeadline(t time.Time) error + // SetReadLimit sets the maximum size for a message read from the peer. If a + // message exceeds the limit, the connection sends a close frame to the peer + // and returns ErrReadLimit to the application. + SetReadLimit(limit int64) + // SetPongHandler sets the handler for pong messages received from the peer. + // The appData argument to h is the PONG frame application data. The default + // pong handler does nothing. + SetPongHandler(h func(appData string) error) + // SetPingHandler sets the handler for ping messages received from the peer. + // The appData argument to h is the PING frame application data. The default + // ping handler sends a pong to the peer. + SetPingHandler(h func(appData string) error) + // WriteControl writes a control message with the given deadline. The allowed + // message types are CloseMessage, PingMessage and PongMessage. + WriteControl(messageType int, data []byte, deadline time.Time) error + // WriteMessage is a helper method for getting a writer using NextWriter, + // writing the message and closing the writer. + WriteMessage(messageType int, data []byte) error + // ReadMessage is a helper method for getting a reader using NextReader and + // reading from that reader to a buffer. + ReadMessage() (messageType int, p []byte, err error) + // NextWriter returns a writer for the next message to send. The writer's Close + // method flushes the complete message to the network. + // + // There can be at most one open writer on a connection. NextWriter closes the + // previous writer if the application has not already done so. + NextWriter(messageType int) (io.WriteCloser, error) + // Close closes the underlying network connection without sending or waiting for a close frame. + Close() error +} + +// ------------------------------------------------------------------------------------- +// ------------------------------------------------------------------------------------- +// -------------------------------Connection implementation----------------------------- +// ------------------------------------------------------------------------------------- +// ------------------------------------------------------------------------------------- + +type ( + // DisconnectFunc is the callback which is fired when a client/connection closed + DisconnectFunc func() + // LeaveRoomFunc is the callback which is fired when a client/connection leaves from any room. + // This is called automatically when client/connection disconnected + // (because websocket server automatically leaves from all joined rooms) + LeaveRoomFunc func(roomName string) + // ErrorFunc is the callback which fires whenever an error occurs + ErrorFunc (func(error)) + // NativeMessageFunc is the callback for native websocket messages, receives one []byte parameter which is the raw client's message + NativeMessageFunc func([]byte) + // MessageFunc is the second argument to the Emitter's Emit functions. + // A callback which should receives one parameter of type string, int, bool or any valid JSON/Go struct + MessageFunc interface{} + // PingFunc is the callback which fires each ping + PingFunc func() + // PongFunc is the callback which fires on pong message received + PongFunc func() + // Connection is the front-end API that you will use to communicate with the client side, + // it is the server-side connection. + Connection interface { + ClientConnection + // Err is not nil if the upgrader failed to upgrade http to websocket connection. + Err() error + // ID returns the connection's identifier + ID() string + // Server returns the websocket server instance + // which this connection is listening to. + // + // Its connection-relative operations are safe for use. + Server() *Server + // Context returns the (upgraded) context.Context of this connection + // avoid using it, you normally don't need it, + // websocket has everything you need to authenticate the user BUT if it's necessary + // then you use it to receive user information, for example: from headers + Context() context.Context + // To defines on what "room" (see Join) the server should send a message + // returns an Emmiter(`EmitMessage` & `Emit`) to send messages. + To(string) Emitter + // Join registers this connection to a room, if it doesn't exist then it creates a new. One room can have one or more connections. One connection can be joined to many rooms. All connections are joined to a room specified by their `ID` automatically. + Join(string) + // IsJoined returns true when this connection is joined to the room, otherwise false. + // It Takes the room name as its input parameter. + IsJoined(roomName string) bool + // Leave removes this connection entry from a room + // Returns true if the connection has actually left from the particular room. + Leave(string) bool + // OnLeave registers a callback which fires when this connection left from any joined room. + // This callback is called automatically on Disconnected client, because websocket server automatically + // deletes the disconnected connection from any joined rooms. + // + // Note: the callback(s) called right before the server deletes the connection from the room + // so the connection theoretical can still send messages to its room right before it is being disconnected. + OnLeave(roomLeaveCb LeaveRoomFunc) + // Wait starts the pinger and the messages reader, + // it's named as "Wait" because it should be called LAST, + // after the "On" events IF server's `Upgrade` is used, + // otherise you don't have to call it because the `Handler()` does it automatically. + Wait() + // SetValue sets a key-value pair on the connection's mem store. + SetValue(key string, value interface{}) + // GetValue gets a value by its key from the connection's mem store. + GetValue(key string) interface{} + // GetValueArrString gets a value as []string by its key from the connection's mem store. + GetValueArrString(key string) []string + // GetValueString gets a value as string by its key from the connection's mem store. + GetValueString(key string) string + // GetValueInt gets a value as integer by its key from the connection's mem store. + GetValueInt(key string) int + } + + // ClientConnection is the client-side connection interface. Server shares some of its methods but the underline actions differs. + ClientConnection interface { + Emitter + // Write writes a raw websocket message with a specific type to the client + // used by ping messages and any CloseMessage types. + Write(websocketMessageType ws.OpCode, data []byte) error + // OnMessage registers a callback which fires when native websocket message received + OnMessage(NativeMessageFunc) + // On registers a callback to a particular event which is fired when a message to this event is received + On(string, MessageFunc) + // OnError registers a callback which fires when this connection occurs an error + OnError(ErrorFunc) + // OnPing registers a callback which fires on each ping + OnPing(PingFunc) + // OnPong registers a callback which fires on pong message received + OnPong(PongFunc) + // FireOnError can be used to send a custom error message to the connection + // + // It does nothing more than firing the OnError listeners. It doesn't send anything to the client. + FireOnError(err error) + // OnDisconnect registers a callback which is fired when this connection is closed by an error or manual + OnDisconnect(DisconnectFunc) + // Disconnect disconnects the client, close the underline websocket conn and removes it from the conn list + // returns the error, if any, from the underline connection + Disconnect() error + } + + connection struct { + err error + underline net.Conn + config ConnectionConfig + defaultMessageType ws.OpCode + serializer *messageSerializer + id string + + onErrorListeners []ErrorFunc + onPingListeners []PingFunc + onPongListeners []PongFunc + onNativeMessageListeners []NativeMessageFunc + onEventListeners map[string][]MessageFunc + onRoomLeaveListeners []LeaveRoomFunc + onDisconnectListeners []DisconnectFunc + disconnected uint32 + + started bool + // these were maden for performance only + self Emitter // pre-defined emitter than sends message to its self client + broadcast Emitter // pre-defined emitter that sends message to all except this + all Emitter // pre-defined emitter which sends message to all clients + + // access to the Context, use with caution, you can't use response writer as you imagine. + ctx context.Context + values ConnectionValues + server *Server + // #119 , websocket writers are not protected by locks inside the gorilla's websocket code + // so we must protect them otherwise we're getting concurrent connection error on multi writers in the same time. + writerMu sync.Mutex + // same exists for reader look here: https://godoc.org/github.com/gorilla/websocket#hdr-Control_Messages + // but we only use one reader in one goroutine, so we are safe. + // readerMu sync.Mutex + } +) + +var _ Connection = &connection{} + +// WrapConnection wraps the underline websocket connection into a new iris websocket connection. +// The caller should call the `connection#Wait` (which blocks) to enable its read and write functionality. +func WrapConnection(conn net.Conn, cfg ConnectionConfig) Connection { + return newConnection(conn, cfg) +} + +func newConnection(conn net.Conn, cfg ConnectionConfig) *connection { + cfg = cfg.Validate() + c := &connection{ + underline: conn, + config: cfg, + serializer: newMessageSerializer(cfg.EvtMessagePrefix), + defaultMessageType: TextMessage, + onErrorListeners: make([]ErrorFunc, 0), + onPingListeners: make([]PingFunc, 0), + onPongListeners: make([]PongFunc, 0), + onNativeMessageListeners: make([]NativeMessageFunc, 0), + onEventListeners: make(map[string][]MessageFunc, 0), + onDisconnectListeners: make([]DisconnectFunc, 0), + disconnected: 0, + } + + if cfg.BinaryMessages { + c.defaultMessageType = BinaryMessage + } + + return c +} + +func newServerConnection(ctx context.Context, s *Server, conn net.Conn, id string) *connection { + c := newConnection(conn, ConnectionConfig{ + EvtMessagePrefix: s.config.EvtMessagePrefix, + WriteTimeout: s.config.WriteTimeout, + ReadTimeout: s.config.ReadTimeout, + PingPeriod: s.config.PingPeriod, + BinaryMessages: s.config.BinaryMessages, + ReadBufferSize: s.config.ReadBufferSize, + WriteBufferSize: s.config.WriteBufferSize, + EnableCompression: s.config.EnableCompression, + }) + + c.id = id + c.server = s + c.ctx = ctx + c.onRoomLeaveListeners = make([]LeaveRoomFunc, 0) + c.started = false + + c.self = newEmitter(c, c.id) + c.broadcast = newEmitter(c, Broadcast) + c.all = newEmitter(c, All) + + return c +} + +// Err is not nil if the upgrader failed to upgrade http to websocket connection. +func (c *connection) Err() error { + return c.err +} + +// IsClient returns true if that connection is from client. +func (c *connection) getState() ws.State { + if c.server != nil { + // server-side. + return ws.StateServerSide + } + + // else return client-side. + return ws.StateClientSide +} + +// Write writes a raw websocket message with a specific type to the client +// used by ping messages and any CloseMessage types. +func (c *connection) Write(websocketMessageType ws.OpCode, data []byte) error { + // for any-case the app tries to write from different goroutines, + // we must protect them because they're reporting that as bug... + c.writerMu.Lock() + if writeTimeout := c.config.WriteTimeout; writeTimeout > 0 { + // set the write deadline based on the configuration + c.underline.SetWriteDeadline(time.Now().Add(writeTimeout)) + } + + err := wsutil.WriteMessage(c.underline, c.getState(), websocketMessageType, data) + c.writerMu.Unlock() + if err != nil { + // if failed then the connection is off, fire the disconnect + c.Disconnect() + } + return err +} + +// writeDefault is the same as write but the message type is the configured by c.messageType +// if BinaryMessages is enabled then it's raw []byte as you expected to work with protobufs +func (c *connection) writeDefault(data []byte) error { + return c.Write(c.defaultMessageType, data) +} + +func (c *connection) startPinger() { + if c.config.PingPeriod > 0 { + go func() { + for { + time.Sleep(c.config.PingPeriod) + if c == nil || atomic.LoadUint32(&c.disconnected) > 0 { + // verifies if already disconected. + return + } + + // try to ping the client, if failed then it disconnects. + err := c.Write(PingMessage, []byte{}) + if err != nil && !c.isErrClosed(err) { + c.FireOnError(err) + // must stop to exit the loop and exit from the routine. + return + } + + //fire all OnPing methods + c.fireOnPing() + + } + }() + } +} + +func (c *connection) fireOnPing() { + // fire the onPingListeners + for i := range c.onPingListeners { + c.onPingListeners[i]() + } +} + +func (c *connection) fireOnPong() { + // fire the onPongListeners + for i := range c.onPongListeners { + c.onPongListeners[i]() + } +} + +func (c *connection) isErrClosed(err error) bool { + if err == nil { + return false + } + + _, is := err.(wsutil.ClosedError) + if is { + return true + } + + if opErr, is := err.(*net.OpError); is { + if opErr.Err == io.EOF { + return false + } + + if atomic.LoadUint32(&c.disconnected) == 0 { + c.Disconnect() + } + + return true + } + + return err != io.EOF +} + +func (c *connection) startReader() { + hasReadTimeout := c.config.ReadTimeout > 0 + + for { + if c == nil || c.underline == nil || atomic.LoadUint32(&c.disconnected) > 0 { + return + } + + if hasReadTimeout { + // set the read deadline based on the configuration + c.underline.SetReadDeadline(time.Now().Add(c.config.ReadTimeout)) + } + + data, code, err := wsutil.ReadData(c.underline, c.getState()) + if code == CloseMessage || c.isErrClosed(err) { + c.Disconnect() + return + } + + if err != nil { + c.FireOnError(err) + } + + c.messageReceived(data) + } + +} + +// messageReceived checks the incoming message and fire the nativeMessage listeners or the event listeners (ws custom message) +func (c *connection) messageReceived(data []byte) { + + if bytes.HasPrefix(data, c.config.EvtMessagePrefix) { + //it's a custom ws message + receivedEvt := c.serializer.getWebsocketCustomEvent(data) + listeners, ok := c.onEventListeners[string(receivedEvt)] + if !ok || len(listeners) == 0 { + return // if not listeners for this event exit from here + } + + customMessage, err := c.serializer.deserialize(receivedEvt, data) + if customMessage == nil || err != nil { + return + } + + for i := range listeners { + if fn, ok := listeners[i].(func()); ok { // its a simple func(){} callback + fn() + } else if fnString, ok := listeners[i].(func(string)); ok { + + if msgString, is := customMessage.(string); is { + fnString(msgString) + } else if msgInt, is := customMessage.(int); is { + // here if server side waiting for string but client side sent an int, just convert this int to a string + fnString(strconv.Itoa(msgInt)) + } + + } else if fnInt, ok := listeners[i].(func(int)); ok { + fnInt(customMessage.(int)) + } else if fnBool, ok := listeners[i].(func(bool)); ok { + fnBool(customMessage.(bool)) + } else if fnBytes, ok := listeners[i].(func([]byte)); ok { + fnBytes(customMessage.([]byte)) + } else { + listeners[i].(func(interface{}))(customMessage) + } + + } + } else { + // it's native websocket message + for i := range c.onNativeMessageListeners { + c.onNativeMessageListeners[i](data) + } + } + +} + +func (c *connection) ID() string { + return c.id +} + +func (c *connection) Server() *Server { + return c.server +} + +func (c *connection) Context() context.Context { + return c.ctx +} + +func (c *connection) Values() ConnectionValues { + return c.values +} + +func (c *connection) fireDisconnect() { + for i := range c.onDisconnectListeners { + c.onDisconnectListeners[i]() + } +} + +func (c *connection) OnDisconnect(cb DisconnectFunc) { + c.onDisconnectListeners = append(c.onDisconnectListeners, cb) +} + +func (c *connection) OnError(cb ErrorFunc) { + c.onErrorListeners = append(c.onErrorListeners, cb) +} + +func (c *connection) OnPing(cb PingFunc) { + c.onPingListeners = append(c.onPingListeners, cb) +} + +func (c *connection) OnPong(cb PongFunc) { + c.onPongListeners = append(c.onPongListeners, cb) +} + +func (c *connection) FireOnError(err error) { + for _, cb := range c.onErrorListeners { + cb(err) + } +} + +func (c *connection) To(to string) Emitter { + if to == Broadcast { // if send to all except me, then return the pre-defined emitter, and so on + return c.broadcast + } else if to == All { + return c.all + } else if to == c.id { + return c.self + } + + // is an emitter to another client/connection + return newEmitter(c, to) +} + +func (c *connection) EmitMessage(nativeMessage []byte) error { + if c.server != nil { + return c.self.EmitMessage(nativeMessage) + } + return c.writeDefault(nativeMessage) +} + +func (c *connection) Emit(event string, message interface{}) error { + if c.server != nil { + return c.self.Emit(event, message) + } + + b, err := c.serializer.serialize(event, message) + if err != nil { + return err + } + + return c.EmitMessage(b) +} + +func (c *connection) OnMessage(cb NativeMessageFunc) { + c.onNativeMessageListeners = append(c.onNativeMessageListeners, cb) +} + +func (c *connection) On(event string, cb MessageFunc) { + if c.onEventListeners[event] == nil { + c.onEventListeners[event] = make([]MessageFunc, 0) + } + + c.onEventListeners[event] = append(c.onEventListeners[event], cb) +} + +func (c *connection) Join(roomName string) { + c.server.Join(roomName, c.id) +} + +func (c *connection) IsJoined(roomName string) bool { + return c.server.IsJoined(roomName, c.id) +} + +func (c *connection) Leave(roomName string) bool { + return c.server.Leave(roomName, c.id) +} + +func (c *connection) OnLeave(roomLeaveCb LeaveRoomFunc) { + c.onRoomLeaveListeners = append(c.onRoomLeaveListeners, roomLeaveCb) + // note: the callbacks are called from the server on the '.leave' and '.LeaveAll' funcs. +} + +func (c *connection) fireOnLeave(roomName string) { + // check if connection is already closed + if c == nil { + return + } + // fire the onRoomLeaveListeners + for i := range c.onRoomLeaveListeners { + c.onRoomLeaveListeners[i](roomName) + } +} + +// Wait starts the pinger and the messages reader, +// it's named as "Wait" because it should be called LAST, +// after the "On" events IF server's `Upgrade` is used, +// otherise you don't have to call it because the `Handler()` does it automatically. +func (c *connection) Wait() { + if c.started { + return + } + c.started = true + // start the ping + c.startPinger() + + // start the messages reader + c.startReader() +} + +// ErrAlreadyDisconnected can be reported on the `Connection#Disconnect` function whenever the caller tries to close the +// connection when it is already closed by the client or the caller previously. +var ErrAlreadyDisconnected = errors.New("already disconnected") + +func (c *connection) Disconnect() error { + if c == nil || !atomic.CompareAndSwapUint32(&c.disconnected, 0, 1) { + return ErrAlreadyDisconnected + } + + if c.server != nil { + return c.server.Disconnect(c.ID()) + } + + err := c.Write(CloseMessage, nil) + + if err == nil { + c.fireDisconnect() + } + + c.underline.Close() + + return err +} + +// mem per-conn store + +func (c *connection) SetValue(key string, value interface{}) { + c.values.Set(key, value) +} + +func (c *connection) GetValue(key string) interface{} { + return c.values.Get(key) +} + +func (c *connection) GetValueArrString(key string) []string { + if v := c.values.Get(key); v != nil { + if arrString, ok := v.([]string); ok { + return arrString + } + } + return nil +} + +func (c *connection) GetValueString(key string) string { + if v := c.values.Get(key); v != nil { + if s, ok := v.(string); ok { + return s + } + } + return "" +} + +func (c *connection) GetValueInt(key string) int { + if v := c.values.Get(key); v != nil { + if i, ok := v.(int); ok { + return i + } else if s, ok := v.(string); ok { + if iv, err := strconv.Atoi(s); err == nil { + return iv + } + } + } + return 0 +} + +// ConnectionConfig is the base configuration for both server and client connections. +// Clients must use `ConnectionConfig` in order to `Dial`, server's connection configuration is set by the `Config` structure. +type ConnectionConfig struct { + // EvtMessagePrefix is the prefix of the underline websocket events that are being established under the hoods. + // This prefix is visible only to the javascript side (code) and it has nothing to do + // with the message that the end-user receives. + // Do not change it unless it is absolutely necessary. + // + // If empty then defaults to []byte("iris-websocket-message:"). + // Should match with the server's EvtMessagePrefix. + EvtMessagePrefix []byte + // WriteTimeout time allowed to write a message to the connection. + // 0 means no timeout. + // Default value is 0 + WriteTimeout time.Duration + // ReadTimeout time allowed to read a message from the connection. + // 0 means no timeout. + // Default value is 0 + ReadTimeout time.Duration + // PingPeriod send ping messages to the connection repeatedly after this period. + // The value should be close to the ReadTimeout to avoid issues. + // Default value is 0 + PingPeriod time.Duration + // BinaryMessages set it to true in order to denotes binary data messages instead of utf-8 text + // compatible if you wanna use the Connection's EmitMessage to send a custom binary data to the client, like a native server-client communication. + // Default value is false + BinaryMessages bool + // ReadBufferSize is the buffer size for the connection reader. + // Default value is 4096 + ReadBufferSize int + // WriteBufferSize is the buffer size for the connection writer. + // Default value is 4096 + WriteBufferSize int + // EnableCompression specify if the server should attempt to negotiate per + // message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + // + // Defaults to false and it should be remain as it is, unless special requirements. + EnableCompression bool +} + +// Validate validates the connection configuration. +func (c ConnectionConfig) Validate() ConnectionConfig { + if len(c.EvtMessagePrefix) == 0 { + c.EvtMessagePrefix = []byte(DefaultEvtMessageKey) + } + + // 0 means no timeout. + if c.WriteTimeout < 0 { + c.WriteTimeout = DefaultWebsocketWriteTimeout + } + + if c.ReadTimeout < 0 { + c.ReadTimeout = DefaultWebsocketReadTimeout + } + + if c.PingPeriod <= 0 { + c.PingPeriod = DefaultWebsocketPingPeriod + } + + if c.ReadBufferSize <= 0 { + c.ReadBufferSize = DefaultWebsocketReadBufferSize + } + + if c.WriteBufferSize <= 0 { + c.WriteBufferSize = DefaultWebsocketWriterBufferSize + } + + return c +} + +// ErrBadHandshake is returned when the server response to opening handshake is +// invalid. +var ErrBadHandshake = ws.ErrHandshakeBadConnection + +// Dial creates a new client connection. +// +// The context will be used in the request and in the Dialer. +// +// If the WebSocket handshake fails, `ErrHandshakeBadConnection` is returned. +// +// The "url" input parameter is the url to connect to the server, it should be +// the ws:// (or wss:// if secure) + the host + the endpoint of the +// open socket of the server, i.e ws://localhost:8080/my_websocket_endpoint. +// +// Custom dialers can be used by wrapping the iris websocket connection via `websocket.WrapConnection`. +func Dial(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { + if ctx == nil { + ctx = stdContext.Background() + } + + if !strings.HasPrefix(url, "ws://") && !strings.HasPrefix(url, "wss://") { + url = "ws://" + url + } + + conn, _, _, err := ws.DefaultDialer.Dial(ctx, url) + if err != nil { + return nil, err + } + + clientConn := WrapConnection(conn, cfg) + go clientConn.Wait() + + return clientConn, nil +} diff --git a/websocket2/emitter.go b/websocket2/emitter.go new file mode 100644 index 000000000..84d1fa485 --- /dev/null +++ b/websocket2/emitter.go @@ -0,0 +1,43 @@ +package websocket + +const ( + // All is the string which the Emitter use to send a message to all. + All = "" + // Broadcast is the string which the Emitter use to send a message to all except this connection. + Broadcast = ";to;all;except;me;" +) + +type ( + // Emitter is the message/or/event manager + Emitter interface { + // EmitMessage sends a native websocket message + EmitMessage([]byte) error + // Emit sends a message on a particular event + Emit(string, interface{}) error + } + + emitter struct { + conn *connection + to string + } +) + +var _ Emitter = &emitter{} + +func newEmitter(c *connection, to string) *emitter { + return &emitter{conn: c, to: to} +} + +func (e *emitter) EmitMessage(nativeMessage []byte) error { + e.conn.server.emitMessage(e.conn.id, e.to, nativeMessage) + return nil +} + +func (e *emitter) Emit(event string, data interface{}) error { + message, err := e.conn.serializer.serialize(event, data) + if err != nil { + return err + } + e.EmitMessage(message) + return nil +} diff --git a/websocket2/message.go b/websocket2/message.go new file mode 100644 index 000000000..6b27fbeec --- /dev/null +++ b/websocket2/message.go @@ -0,0 +1,182 @@ +package websocket + +import ( + "bytes" + "encoding/binary" + "encoding/json" + "strconv" + + "github.com/kataras/iris/core/errors" + "github.com/valyala/bytebufferpool" +) + +type ( + messageType uint8 +) + +func (m messageType) String() string { + return strconv.Itoa(int(m)) +} + +func (m messageType) Name() string { + switch m { + case messageTypeString: + return "string" + case messageTypeInt: + return "int" + case messageTypeBool: + return "bool" + case messageTypeBytes: + return "[]byte" + case messageTypeJSON: + return "json" + default: + return "Invalid(" + m.String() + ")" + } +} + +// The same values are exists on client side too. +const ( + messageTypeString messageType = iota + messageTypeInt + messageTypeBool + messageTypeBytes + messageTypeJSON +) + +const ( + messageSeparator = ";" +) + +var messageSeparatorByte = messageSeparator[0] + +type messageSerializer struct { + prefix []byte + + prefixLen int + separatorLen int + prefixAndSepIdx int + prefixIdx int + separatorIdx int + + buf *bytebufferpool.Pool +} + +func newMessageSerializer(messagePrefix []byte) *messageSerializer { + return &messageSerializer{ + prefix: messagePrefix, + prefixLen: len(messagePrefix), + separatorLen: len(messageSeparator), + prefixAndSepIdx: len(messagePrefix) + len(messageSeparator) - 1, + prefixIdx: len(messagePrefix) - 1, + separatorIdx: len(messageSeparator) - 1, + + buf: new(bytebufferpool.Pool), + } +} + +var ( + boolTrueB = []byte("true") + boolFalseB = []byte("false") +) + +// websocketMessageSerialize serializes a custom websocket message from websocketServer to be delivered to the client +// returns the string form of the message +// Supported data types are: string, int, bool, bytes and JSON. +func (ms *messageSerializer) serialize(event string, data interface{}) ([]byte, error) { + b := ms.buf.Get() + b.Write(ms.prefix) + b.WriteString(event) + b.WriteByte(messageSeparatorByte) + + switch v := data.(type) { + case string: + b.WriteString(messageTypeString.String()) + b.WriteByte(messageSeparatorByte) + b.WriteString(v) + case int: + b.WriteString(messageTypeInt.String()) + b.WriteByte(messageSeparatorByte) + binary.Write(b, binary.LittleEndian, v) + case bool: + b.WriteString(messageTypeBool.String()) + b.WriteByte(messageSeparatorByte) + if v { + b.Write(boolTrueB) + } else { + b.Write(boolFalseB) + } + case []byte: + b.WriteString(messageTypeBytes.String()) + b.WriteByte(messageSeparatorByte) + b.Write(v) + default: + //we suppose is json + res, err := json.Marshal(data) + if err != nil { + ms.buf.Put(b) + return nil, err + } + b.WriteString(messageTypeJSON.String()) + b.WriteByte(messageSeparatorByte) + b.Write(res) + } + + message := b.Bytes() + ms.buf.Put(b) + + return message, nil +} + +var errInvalidTypeMessage = errors.New("Type %s is invalid for message: %s") + +// deserialize deserializes a custom websocket message from the client +// ex: iris-websocket-message;chat;4;themarshaledstringfromajsonstruct will return 'hello' as string +// Supported data types are: string, int, bool, bytes and JSON. +func (ms *messageSerializer) deserialize(event []byte, websocketMessage []byte) (interface{}, error) { + dataStartIdx := ms.prefixAndSepIdx + len(event) + 3 + if len(websocketMessage) <= dataStartIdx { + return nil, errors.New("websocket invalid message: " + string(websocketMessage)) + } + + typ, err := strconv.Atoi(string(websocketMessage[ms.prefixAndSepIdx+len(event)+1 : ms.prefixAndSepIdx+len(event)+2])) // in order to iris-websocket-message;user;-> 4 + if err != nil { + return nil, err + } + + data := websocketMessage[dataStartIdx:] // in order to iris-websocket-message;user;4; -> themarshaledstringfromajsonstruct + + switch messageType(typ) { + case messageTypeString: + return string(data), nil + case messageTypeInt: + msg, err := strconv.Atoi(string(data)) + if err != nil { + return nil, err + } + return msg, nil + case messageTypeBool: + if bytes.Equal(data, boolTrueB) { + return true, nil + } + return false, nil + case messageTypeBytes: + return data, nil + case messageTypeJSON: + var msg interface{} + err := json.Unmarshal(data, &msg) + return msg, err + default: + return nil, errInvalidTypeMessage.Format(messageType(typ).Name(), websocketMessage) + } +} + +// getWebsocketCustomEvent return empty string when the websocketMessage is native message +func (ms *messageSerializer) getWebsocketCustomEvent(websocketMessage []byte) []byte { + if len(websocketMessage) < ms.prefixAndSepIdx { + return nil + } + s := websocketMessage[ms.prefixAndSepIdx:] + evt := s[:bytes.IndexByte(s, messageSeparatorByte)] + return evt +} diff --git a/websocket2/server.go b/websocket2/server.go new file mode 100644 index 000000000..31f400b68 --- /dev/null +++ b/websocket2/server.go @@ -0,0 +1,406 @@ +package websocket + +import ( + "bytes" + "net" + "sync" + "sync/atomic" + + "github.com/kataras/iris/context" + + "github.com/gobwas/ws" +) + +type ( + // ConnectionFunc is the callback which fires when a client/connection is connected to the Server. + // Receives one parameter which is the Connection + ConnectionFunc func(Connection) + + // websocketRoomPayload is used as payload from the connection to the Server + websocketRoomPayload struct { + roomName string + connectionID string + } + + // payloads, connection -> Server + websocketMessagePayload struct { + from string + to string + data []byte + } + + // Server is the websocket Server's implementation. + // + // It listens for websocket clients (either from the javascript client-side or from any websocket implementation). + // See `OnConnection` , to register a single event which will handle all incoming connections and + // the `Handler` which builds the upgrader handler that you can register to a route based on an Endpoint. + // + // To serve the built'n javascript client-side library look the `websocket.ClientHandler`. + Server struct { + config Config + // ClientSource contains the javascript side code + // for the iris websocket communication + // based on the configuration's `EvtMessagePrefix`. + // + // Use a route to serve this file on a specific path, i.e + // app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(mywebsocketServer.ClientSource) }) + ClientSource []byte + connections map[string]*connection // key = the Connection ID. + rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name + mu sync.RWMutex // for rooms and connections. + onConnectionListeners []ConnectionFunc + //connectionPool sync.Pool // sadly we can't make this because the websocket connection is live until is closed. + upgrader ws.HTTPUpgrader + } +) + +// New returns a new websocket Server based on a configuration. +// See `OnConnection` , to register a single event which will handle all incoming connections and +// the `Handler` which builds the upgrader handler that you can register to a route based on an Endpoint. +// +// To serve the built'n javascript client-side library look the `websocket.ClientHandler`. +func New(cfg Config) *Server { + cfg = cfg.Validate() + return &Server{ + config: cfg, + ClientSource: bytes.Replace(ClientSource, []byte(DefaultEvtMessageKey), cfg.EvtMessagePrefix, -1), + connections: make(map[string]*connection), + rooms: make(map[string][]string), + onConnectionListeners: make([]ConnectionFunc, 0), + upgrader: ws.DefaultHTTPUpgrader, // ws.DefaultUpgrader, + } +} + +// Handler builds the handler based on the configuration and returns it. +// It should be called once per Server, its result should be passed +// as a middleware to an iris route which will be responsible +// to register the websocket's endpoint. +// +// Endpoint is the path which the websocket Server will listen for clients/connections. +// +// To serve the built'n javascript client-side library look the `websocket.ClientHandler`. +func (s *Server) Handler() context.Handler { + return func(ctx context.Context) { + c := s.Upgrade(ctx) + if c.Err() != nil { + return + } + + // NOTE TO ME: fire these first BEFORE startReader and startPinger + // in order to set the events and any messages to send + // the startPinger will send the OK to the client and only + // then the client is able to send and receive from Server + // when all things are ready and only then. DO NOT change this order. + + // fire the on connection event callbacks, if any + for i := range s.onConnectionListeners { + s.onConnectionListeners[i](c) + } + + // start the ping and the messages reader + c.Wait() + } +} + +// Upgrade upgrades the HTTP Server connection to the WebSocket protocol. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie) and the +// application negotiated subprotocol (Sec--Protocol). +// +// If the upgrade fails, then Upgrade replies to the client with an HTTP error +// response and the return `Connection.Err()` is filled with that error. +// +// For a more high-level function use the `Handler()` and `OnConnecton` events. +// This one does not starts the connection's writer and reader, so after your `On/OnMessage` events registration +// the caller has to call the `Connection#Wait` function, otherwise the connection will be not handled. +func (s *Server) Upgrade(ctx context.Context) Connection { + conn, _, _, err := s.upgrader.Upgrade(ctx.Request(), ctx.ResponseWriter()) + if err != nil { + ctx.Application().Logger().Warnf("websocket error: %v\n", err) + ctx.StatusCode(503) // Status Service Unavailable + return &connection{err: err} + } + + return s.handleConnection(ctx, conn) +} + +func (s *Server) addConnection(c *connection) { + s.mu.Lock() + s.connections[c.id] = c + s.mu.Unlock() +} + +func (s *Server) getConnection(connID string) (*connection, bool) { + c, ok := s.connections[connID] + return c, ok +} + +// wrapConnection wraps an underline connection to an iris websocket connection. +// It does NOT starts its writer, reader and event mux, the caller is responsible for that. +func (s *Server) handleConnection(ctx context.Context, conn net.Conn) *connection { + // use the config's id generator (or the default) to create a websocket client/connection id + cid := s.config.IDGenerator(ctx) + // create the new connection + c := newServerConnection(ctx, s, conn, cid) + // add the connection to the Server's list + s.addConnection(c) + + // join to itself + s.Join(c.id, c.id) + + return c +} + +/* Notes: + We use the id as the signature of the connection because with the custom IDGenerator + the developer can share this ID with a database field, so we want to give the oportunnity to handle + his/her websocket connections without even use the connection itself. + + Another question may be: + Q: Why you use Server as the main actioner for all of the connection actions? + For example the Server.Disconnect(connID) manages the connection internal fields, is this code-style correct? + A: It's the correct code-style for these type of applications and libraries, Server manages all, the connnection's functions + should just do some internal checks (if needed) and push the action to its parent, which is the Server, the Server is able to + remove a connection, the rooms of its connected and all these things, so in order to not split the logic, we have the main logic + here, in the Server, and let the connection with some exported functions whose exists for the per-connection action user's code-style. + + Ok my english are s** I can feel it, but these comments are mostly for me. +*/ + +/* + connection actions, same as the connection's method, + but these methods accept the connection ID, + which is useful when the developer maps + this id with a database field (using config.IDGenerator). +*/ + +// OnConnection is the main event you, as developer, will work with each of the websocket connections. +func (s *Server) OnConnection(cb ConnectionFunc) { + s.onConnectionListeners = append(s.onConnectionListeners, cb) +} + +// IsConnected returns true if the connection with that ID is connected to the Server +// useful when you have defined a custom connection id generator (based on a database) +// and you want to check if that connection is already connected (on multiple tabs) +func (s *Server) IsConnected(connID string) bool { + _, found := s.getConnection(connID) + return found +} + +// Join joins a websocket client to a room, +// first parameter is the room name and the second the connection.ID() +// +// You can use connection.Join("room name") instead. +func (s *Server) Join(roomName string, connID string) { + s.mu.Lock() + s.join(roomName, connID) + s.mu.Unlock() +} + +// join used internally, no locks used. +func (s *Server) join(roomName string, connID string) { + if s.rooms[roomName] == nil { + s.rooms[roomName] = make([]string, 0) + } + s.rooms[roomName] = append(s.rooms[roomName], connID) +} + +// IsJoined reports if a specific room has a specific connection into its values. +// First parameter is the room name, second is the connection's id. +// +// It returns true when the "connID" is joined to the "roomName". +func (s *Server) IsJoined(roomName string, connID string) bool { + s.mu.RLock() + room := s.rooms[roomName] + s.mu.RUnlock() + + if room == nil { + return false + } + + for _, connid := range room { + if connID == connid { + return true + } + } + + return false +} + +// LeaveAll kicks out a connection from ALL of its joined rooms +func (s *Server) LeaveAll(connID string) { + s.mu.Lock() + for name := range s.rooms { + s.leave(name, connID) + } + s.mu.Unlock() +} + +// Leave leaves a websocket client from a room, +// first parameter is the room name and the second the connection.ID() +// +// You can use connection.Leave("room name") instead. +// Returns true if the connection has actually left from the particular room. +func (s *Server) Leave(roomName string, connID string) bool { + s.mu.Lock() + left := s.leave(roomName, connID) + s.mu.Unlock() + return left +} + +// leave used internally, no locks used. +func (s *Server) leave(roomName string, connID string) (left bool) { + ///THINK: we could add locks to its room but we still use the lock for the whole rooms or we can just do what we do with connections + // I will think about it on the next revision, so far we use the locks only for rooms so we are ok... + if s.rooms[roomName] != nil { + for i := range s.rooms[roomName] { + if s.rooms[roomName][i] == connID { + s.rooms[roomName] = append(s.rooms[roomName][:i], s.rooms[roomName][i+1:]...) + left = true + break + } + } + if len(s.rooms[roomName]) == 0 { // if room is empty then delete it + delete(s.rooms, roomName) + } + } + + if left { + // fire the on room leave connection's listeners, + // the existence check is not necessary here. + if c, ok := s.getConnection(connID); ok { + c.fireOnLeave(roomName) + } + } + return +} + +// GetTotalConnections returns the number of total connections +func (s *Server) GetTotalConnections() (n int) { + s.mu.RLock() + n = len(s.connections) + s.mu.RUnlock() + + return +} + +// GetConnections returns all connections +func (s *Server) GetConnections() []Connection { + s.mu.RLock() + conns := make([]Connection, len(s.connections)) + i := 0 + for _, c := range s.connections { + conns[i] = c + i++ + } + + s.mu.RUnlock() + return conns +} + +// GetConnection returns single connection +func (s *Server) GetConnection(connID string) Connection { + conn, ok := s.getConnection(connID) + if !ok { + return nil + } + + return conn +} + +// GetConnectionsByRoom returns a list of Connection +// which are joined to this room. +func (s *Server) GetConnectionsByRoom(roomName string) []Connection { + var conns []Connection + s.mu.RLock() + if connIDs, found := s.rooms[roomName]; found { + for _, connID := range connIDs { + // existence check is not necessary here. + if conn, ok := s.connections[connID]; ok { + conns = append(conns, conn) + } + } + } + + s.mu.RUnlock() + + return conns +} + +// emitMessage is the main 'router' of the messages coming from the connection +// this is the main function which writes the RAW websocket messages to the client. +// It sends them(messages) to the correct room (self, broadcast or to specific client) +// +// You don't have to use this generic method, exists only for extreme +// apps which you have an external goroutine with a list of custom connection list. +// +// You SHOULD use connection.EmitMessage/Emit/To().Emit/EmitMessage instead. +// let's keep it unexported for the best. +func (s *Server) emitMessage(from, to string, data []byte) { + if to != All && to != Broadcast { + s.mu.RLock() + room := s.rooms[to] + s.mu.RUnlock() + if room != nil { + // it suppose to send the message to a specific room/or a user inside its own room + for _, connectionIDInsideRoom := range room { + if c, ok := s.getConnection(connectionIDInsideRoom); ok { + c.writeDefault(data) //send the message to the client(s) + } else { + // the connection is not connected but it's inside the room, we remove it on disconnect but for ANY CASE: + cid := connectionIDInsideRoom + if c != nil { + cid = c.id + } + s.Leave(cid, to) + } + } + } + } else { + s.mu.RLock() + // it suppose to send the message to all opened connections or to all except the sender. + for _, conn := range s.connections { + if to != All && to != conn.id { // if it's not suppose to send to all connections (including itself) + if to == Broadcast && from == conn.id { // if broadcast to other connections except this + // here we do the opossite of previous block, + // just skip this connection when it's suppose to send the message to all connections except the sender. + continue + } + } + + conn.writeDefault(data) + } + s.mu.RUnlock() + } +} + +// Disconnect force-disconnects a websocket connection based on its connection.ID() +// What it does? +// 1. remove the connection from the list +// 2. leave from all joined rooms +// 3. fire the disconnect callbacks, if any +// 4. close the underline connection and return its error, if any. +// +// You can use the connection.Disconnect() instead. +func (s *Server) Disconnect(connID string) (err error) { + // leave from all joined rooms before remove the actual connection from the list. + // note: we cannot use that to send data if the client is actually closed. + s.LeaveAll(connID) + + // remove the connection from the list. + if conn, ok := s.getConnection(connID); ok { + atomic.StoreUint32(&conn.disconnected, 1) + + // fire the disconnect callbacks, if any. + conn.fireDisconnect() + + s.mu.Lock() + delete(s.connections, conn.id) + s.mu.Unlock() + + err = conn.underline.Close() + } + + return +} diff --git a/websocket2/websocket.go b/websocket2/websocket.go new file mode 100644 index 000000000..1792e0dc2 --- /dev/null +++ b/websocket2/websocket.go @@ -0,0 +1,69 @@ +/*Package websocket provides rich websocket support for the iris web framework. + +Source code and other details for the project are available at GitHub: + + https://github.com/kataras/iris/tree/master/websocket + +Example code: + + + package main + + import ( + "fmt" + + "github.com/kataras/iris" + "github.com/kataras/iris/context" + + "github.com/kataras/iris/websocket" + ) + + func main() { + app := iris.New() + + app.Get("/", func(ctx context.Context) { + ctx.ServeFile("websockets.html", false) + }) + + setupWebsocket(app) + + // x2 + // http://localhost:8080 + // http://localhost:8080 + // write something, press submit, see the result. + app.Run(iris.Addr(":8080")) + } + + func setupWebsocket(app *iris.Application) { + // create our echo websocket server + ws := websocket.New(websocket.Config{ + ReadBufferSize: 1024, + WriteBufferSize: 1024, + }) + ws.OnConnection(handleConnection) + + // register the server's endpoint. + // see the inline javascript code in the websockets.html, + // this endpoint is used to connect to the server. + app.Get("/echo", ws.Handler()) + + // serve the javascript built'n client-side library, + // see websockets.html script tags, this path is used. + app.Any("/iris-ws.js", func(ctx context.Context) { + ctx.Write(websocket.ClientSource) + }) + } + + func handleConnection(c websocket.Connection) { + // Read events from browser + c.On("chat", func(msg string) { + // Print the message to the console + fmt.Printf("%s sent: %s\n", c.Context().RemoteAddr(), msg) + // Write message back to the client message owner: + // c.Emit("chat", msg) + c.To(websocket.Broadcast).Emit("chat", msg) + }) + } + +*/ +package websocket From f39dffcab2b8e3539d8e97ec1e3776fb3c520cd8 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sun, 17 Feb 2019 16:10:25 +0200 Subject: [PATCH 16/89] fix issue on binding sessions caused by variadic cookie options, as reported at: https://github.com/kataras/iris/issues/1197 --- hero/di.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hero/di.go b/hero/di.go index d50665145..d997e1145 100644 --- a/hero/di.go +++ b/hero/di.go @@ -36,7 +36,8 @@ func init() { } di.DefaultTypeChecker = func(fn reflect.Type) bool { - // valid if that single input arg is a typeof context.Context. - return fn.NumIn() == 1 && IsContext(fn.In(0)) + // valid if that single input arg is a typeof context.Context + // or first argument is context.Context and second argument is a variadic, which is ignored (i.e new sessions#Start). + return (fn.NumIn() == 1 || (fn.NumIn() == 2 && fn.IsVariadic())) && IsContext(fn.In(0)) } } From e5d07025a4d6e376fbd81771f4f9fe1ed2acaa99 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Mon, 18 Feb 2019 04:42:57 +0200 Subject: [PATCH 17/89] websocket: from 1k to 100k on a simple raspeberry pi 3 model b by using a bit lower level of the new ws lib api and restore the previous sync.Map for server's live connections, relative: https://github.com/kataras/iris/issues/1178 --- .../go-client-stress-test/client/main.go | 106 +++++++++++-- .../go-client-stress-test/client/test.data | 6 - .../go-client-stress-test/server/main.go | 2 +- websocket/connection.go | 2 +- websocket2/AUTHORS | 4 - websocket2/LICENSE | 27 ---- websocket2/connection.go | 143 ++++++++++++++++-- websocket2/server.go | 89 +++++++---- 8 files changed, 289 insertions(+), 90 deletions(-) delete mode 100644 websocket2/AUTHORS delete mode 100644 websocket2/LICENSE diff --git a/_examples/websocket/go-client-stress-test/client/main.go b/_examples/websocket/go-client-stress-test/client/main.go index e40b27040..4747feb62 100644 --- a/_examples/websocket/go-client-stress-test/client/main.go +++ b/_examples/websocket/go-client-stress-test/client/main.go @@ -6,6 +6,7 @@ import ( "math/rand" "os" "sync" + "sync/atomic" "time" "github.com/kataras/iris/websocket2" @@ -16,7 +17,28 @@ var ( f *os.File ) -const totalClients = 1200 +const totalClients = 100000 + +var connectionFailures uint64 + +var ( + disconnectErrors []error + connectErrors []error + errMu sync.Mutex +) + +func collectError(op string, err error) { + errMu.Lock() + defer errMu.Unlock() + + switch op { + case "disconnect": + disconnectErrors = append(disconnectErrors, err) + case "connect": + connectErrors = append(connectErrors, err) + } + +} func main() { var err error @@ -26,29 +48,93 @@ func main() { } defer f.Close() + start := time.Now() + wg := new(sync.WaitGroup) - for i := 0; i < totalClients/2; i++ { + for i := 0; i < totalClients/4; i++ { wg.Add(1) go connect(wg, 5*time.Second) } - for i := 0; i < totalClients/2; i++ { + for i := 0; i < totalClients/4; i++ { + wg.Add(1) + waitTime := time.Duration(rand.Intn(5)) * time.Millisecond + time.Sleep(waitTime) + go connect(wg, 7*time.Second+waitTime) + } + + for i := 0; i < totalClients/4; i++ { wg.Add(1) waitTime := time.Duration(rand.Intn(10)) * time.Millisecond time.Sleep(waitTime) go connect(wg, 10*time.Second+waitTime) } + for i := 0; i < totalClients/4; i++ { + wg.Add(1) + waitTime := time.Duration(rand.Intn(20)) * time.Millisecond + time.Sleep(waitTime) + go connect(wg, 25*time.Second+waitTime) + } + wg.Wait() - fmt.Println("ALL OK.") - time.Sleep(5 * time.Second) + fmt.Println("--------================--------------") + fmt.Printf("execution time [%s]", time.Since(start)) + fmt.Println() + + if connectionFailures > 0 { + fmt.Printf("Finished with %d/%d connection failures. Please close the server-side manually.\n", connectionFailures, totalClients) + } + + if n := len(connectErrors); n > 0 { + fmt.Printf("Finished with %d connect errors:\n", n) + var lastErr error + var sameC int + + for i, err := range connectErrors { + if lastErr != nil { + if lastErr.Error() == err.Error() { + sameC++ + continue + } + } + + if sameC > 0 { + fmt.Printf("and %d more like this...\n", sameC) + sameC = 0 + continue + } + + fmt.Printf("[%d] - %v\n", i+1, err) + lastErr = err + } + } + + if n := len(disconnectErrors); n > 0 { + fmt.Printf("Finished with %d disconnect errors\n", n) + for i, err := range disconnectErrors { + if err == websocket.ErrAlreadyDisconnected { + continue + } + + fmt.Printf("[%d] - %v\n", i+1, err) + } + } + + if connectionFailures == 0 && len(connectErrors) == 0 && len(disconnectErrors) == 0 { + fmt.Println("ALL OK.") + } + + fmt.Println("--------================--------------") } func connect(wg *sync.WaitGroup, alive time.Duration) { - c, err := websocket.Dial(nil, url, websocket.ConnectionConfig{}) if err != nil { - panic(err) + atomic.AddUint64(&connectionFailures, 1) + collectError("connect", err) + wg.Done() + return } c.OnError(func(err error) { @@ -68,7 +154,7 @@ func connect(wg *sync.WaitGroup, alive time.Duration) { go func() { time.Sleep(alive) if err := c.Disconnect(); err != nil { - panic(err) + collectError("disconnect", err) } wg.Done() @@ -80,6 +166,8 @@ func connect(wg *sync.WaitGroup, alive time.Duration) { break } - c.Emit("chat", scanner.Text()) + if text := scanner.Text(); len(text) > 1 { + c.Emit("chat", text) + } } } diff --git a/_examples/websocket/go-client-stress-test/client/test.data b/_examples/websocket/go-client-stress-test/client/test.data index a63af2acd..8f3e0fc02 100644 --- a/_examples/websocket/go-client-stress-test/client/test.data +++ b/_examples/websocket/go-client-stress-test/client/test.data @@ -11,9 +11,3 @@ Far curiosity incommode now led smallness allowance. Favour bed assure son thing Windows talking painted pasture yet its express parties use. Sure last upon he same as knew next. Of believed or diverted no rejoiced. End friendship sufficient assistance can prosperous met. As game he show it park do. Was has unknown few certain ten promise. No finished my an likewise cheerful packages we. For assurance concluded son something depending discourse see led collected. Packages oh no denoting my advanced humoured. Pressed be so thought natural. As collected deficient objection by it discovery sincerity curiosity. Quiet decay who round three world whole has mrs man. Built the china there tried jokes which gay why. Assure in adieus wicket it is. But spoke round point and one joy. Offending her moonlight men sweetness see unwilling. Often of it tears whole oh balls share an. - -Lose eyes get fat shew. Winter can indeed letter oppose way change tended now. So is improve my charmed picture exposed adapted demands. Received had end produced prepared diverted strictly off man branched. Known ye money so large decay voice there to. Preserved be mr cordially incommode as an. He doors quick child an point at. Had share vexed front least style off why him. - -He unaffected sympathize discovered at no am conviction principles. Girl ham very how yet hill four show. Meet lain on he only size. Branched learning so subjects mistress do appetite jennings be in. Esteems up lasting no village morning do offices. Settled wishing ability musical may another set age. Diminution my apartments he attachment is entreaties announcing estimating. And total least her two whose great has which. Neat pain form eat sent sex good week. Led instrument sentiments she simplicity. - -Months on ye at by esteem desire warmth former. Sure that that way gave any fond now. His boy middleton sir nor engrossed affection excellent. Dissimilar compliment cultivated preference eat sufficient may. Well next door soon we mr he four. Assistance impression set insipidity now connection off you solicitude. Under as seems we me stuff those style at. Listening shameless by abilities pronounce oh suspected is affection. Next it draw in draw much bred. diff --git a/_examples/websocket/go-client-stress-test/server/main.go b/_examples/websocket/go-client-stress-test/server/main.go index b8c8f90e8..07ea3014b 100644 --- a/_examples/websocket/go-client-stress-test/server/main.go +++ b/_examples/websocket/go-client-stress-test/server/main.go @@ -10,7 +10,7 @@ import ( "github.com/kataras/iris/websocket2" ) -const totalClients = 1200 +const totalClients = 100000 func main() { app := iris.New() diff --git a/websocket/connection.go b/websocket/connection.go index 8a8a416be..983fe2098 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -808,7 +808,7 @@ func DialContext(ctx stdContext.Context, url string, cfg ConnectionConfig) (Clie ctx = stdContext.Background() } - if !strings.HasPrefix(url, "ws://") || !strings.HasPrefix(url, "wss://") { + if !strings.HasPrefix(url, "ws://") && !strings.HasPrefix(url, "wss://") { url = "ws://" + url } diff --git a/websocket2/AUTHORS b/websocket2/AUTHORS deleted file mode 100644 index bc8d8fc98..000000000 --- a/websocket2/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -# This is the official list of Iris Websocket authors for copyright -# purposes. - -Gerasimos Maropoulos diff --git a/websocket2/LICENSE b/websocket2/LICENSE deleted file mode 100644 index b16278e24..000000000 --- a/websocket2/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2017-2018 The Iris Websocket Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Iris nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/websocket2/connection.go b/websocket2/connection.go index 20409c016..840d36e46 100644 --- a/websocket2/connection.go +++ b/websocket2/connection.go @@ -5,6 +5,7 @@ import ( stdContext "context" "errors" "io" + "io/ioutil" "net" "strconv" "strings" @@ -267,6 +268,9 @@ type ( ctx context.Context values ConnectionValues server *Server + + writer *wsutil.Writer + // #119 , websocket writers are not protected by locks inside the gorilla's websocket code // so we must protect them otherwise we're getting concurrent connection error on multi writers in the same time. writerMu sync.Mutex @@ -304,6 +308,8 @@ func newConnection(conn net.Conn, cfg ConnectionConfig) *connection { c.defaultMessageType = BinaryMessage } + // c.writer = wsutil.NewWriter(conn, c.getState(), c.defaultMessageType) + return c } @@ -350,17 +356,26 @@ func (c *connection) getState() ws.State { // Write writes a raw websocket message with a specific type to the client // used by ping messages and any CloseMessage types. -func (c *connection) Write(websocketMessageType ws.OpCode, data []byte) error { +func (c *connection) Write(websocketMessageType ws.OpCode, data []byte) (err error) { // for any-case the app tries to write from different goroutines, // we must protect them because they're reporting that as bug... c.writerMu.Lock() + defer c.writerMu.Unlock() if writeTimeout := c.config.WriteTimeout; writeTimeout > 0 { // set the write deadline based on the configuration c.underline.SetWriteDeadline(time.Now().Add(writeTimeout)) } - err := wsutil.WriteMessage(c.underline, c.getState(), websocketMessageType, data) - c.writerMu.Unlock() + // 2. + // if websocketMessageType != c.defaultMessageType { + // err = wsutil.WriteMessage(c.underline, c.getState(), websocketMessageType, data) + // } else { + // _, err = c.writer.Write(data) + // c.writer.Flush() + // } + + err = wsutil.WriteMessage(c.underline, c.getState(), websocketMessageType, data) + if err != nil { // if failed then the connection is off, fire the disconnect c.Disconnect() @@ -440,29 +455,125 @@ func (c *connection) isErrClosed(err error) bool { } func (c *connection) startReader() { + defer c.Disconnect() + hasReadTimeout := c.config.ReadTimeout > 0 - for { - if c == nil || c.underline == nil || atomic.LoadUint32(&c.disconnected) > 0 { - return - } + controlHandler := wsutil.ControlFrameHandler(c.underline, c.getState()) + rd := wsutil.Reader{ + Source: c.underline, + State: c.getState(), + CheckUTF8: false, + SkipHeaderCheck: false, + OnIntermediate: controlHandler, + } + for { if hasReadTimeout { // set the read deadline based on the configuration c.underline.SetReadDeadline(time.Now().Add(c.config.ReadTimeout)) } - data, code, err := wsutil.ReadData(c.underline, c.getState()) - if code == CloseMessage || c.isErrClosed(err) { - c.Disconnect() + hdr, err := rd.NextFrame() + if err != nil { return } + if hdr.OpCode.IsControl() { + if err := controlHandler(hdr, &rd); err != nil { + return + } + continue + } + + if hdr.OpCode&TextMessage == 0 && hdr.OpCode&BinaryMessage == 0 { + if err := rd.Discard(); err != nil { + return + } + continue + } + data, err := ioutil.ReadAll(&rd) if err != nil { - c.FireOnError(err) + return } c.messageReceived(data) + + // 4. + // var buf bytes.Buffer + // data, code, err := wsutil.ReadData(struct { + // io.Reader + // io.Writer + // }{c.underline, &buf}, c.getState()) + // if err != nil { + // if _, closed := err.(*net.OpError); closed && code == 0 { + // c.Disconnect() + // return + // } else if _, closed = err.(wsutil.ClosedError); closed { + // c.Disconnect() + // return + // // > 1200 conns but I don't know why yet: + // } else if err == ws.ErrProtocolOpCodeReserved || err == ws.ErrProtocolNonZeroRsv { + // c.Disconnect() + // return + // } else if err == io.EOF || err == io.ErrUnexpectedEOF { + // c.Disconnect() + // return + // } + + // c.FireOnError(err) + // } + + // c.messageReceived(data) + + // 2. + // header, err := reader.NextFrame() + // if err != nil { + // println("next frame err: " + err.Error()) + // return + // } + + // if header.OpCode == ws.OpClose { // io.EOF. + // return + // } + // payload := make([]byte, header.Length) + // _, err = io.ReadFull(reader, payload) + // if err != nil { + // return + // } + + // if header.Masked { + // ws.Cipher(payload, header.Mask, 0) + // } + + // c.messageReceived(payload) + + // data, code, err := wsutil.ReadData(c.underline, c.getState()) + // // if code == CloseMessage || c.isErrClosed(err) { + // // c.Disconnect() + // // return + // // } + + // if err != nil { + // if _, closed := err.(*net.OpError); closed && code == 0 { + // c.Disconnect() + // return + // } else if _, closed = err.(wsutil.ClosedError); closed { + // c.Disconnect() + // return + // // > 1200 conns but I don't know why yet: + // } else if err == ws.ErrProtocolOpCodeReserved || err == ws.ErrProtocolNonZeroRsv { + // c.Disconnect() + // return + // } else if err == io.EOF || err == io.ErrUnexpectedEOF { + // c.Disconnect() + // return + // } + + // c.FireOnError(err) + // } + + // c.messageReceived(data) } } @@ -801,6 +912,16 @@ var ErrBadHandshake = ws.ErrHandshakeBadConnection // // Custom dialers can be used by wrapping the iris websocket connection via `websocket.WrapConnection`. func Dial(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { + c, err := dial(ctx, url, cfg) + if err != nil { + time.Sleep(1 * time.Second) + c, err = dial(ctx, url, cfg) + } + + return c, err +} + +func dial(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { if ctx == nil { ctx = stdContext.Background() } diff --git a/websocket2/server.go b/websocket2/server.go index 31f400b68..e4a2df8dc 100644 --- a/websocket2/server.go +++ b/websocket2/server.go @@ -45,9 +45,9 @@ type ( // Use a route to serve this file on a specific path, i.e // app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(mywebsocketServer.ClientSource) }) ClientSource []byte - connections map[string]*connection // key = the Connection ID. - rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name - mu sync.RWMutex // for rooms and connections. + connections sync.Map // key = the Connection ID. // key = the Connection ID. + rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name + mu sync.RWMutex // for rooms. onConnectionListeners []ConnectionFunc //connectionPool sync.Pool // sadly we can't make this because the websocket connection is live until is closed. upgrader ws.HTTPUpgrader @@ -64,7 +64,7 @@ func New(cfg Config) *Server { return &Server{ config: cfg, ClientSource: bytes.Replace(ClientSource, []byte(DefaultEvtMessageKey), cfg.EvtMessagePrefix, -1), - connections: make(map[string]*connection), + connections: sync.Map{}, // ready-to-use, this is not necessary. rooms: make(map[string][]string), onConnectionListeners: make([]ConnectionFunc, 0), upgrader: ws.DefaultHTTPUpgrader, // ws.DefaultUpgrader, @@ -126,14 +126,19 @@ func (s *Server) Upgrade(ctx context.Context) Connection { } func (s *Server) addConnection(c *connection) { - s.mu.Lock() - s.connections[c.id] = c - s.mu.Unlock() + s.connections.Store(c.id, c) } func (s *Server) getConnection(connID string) (*connection, bool) { - c, ok := s.connections[connID] - return c, ok + if cValue, ok := s.connections.Load(connID); ok { + // this cast is not necessary, + // we know that we always save a connection, but for good or worse let it be here. + if conn, ok := cValue.(*connection); ok { + return conn, ok + } + } + + return nil, false } // wrapConnection wraps an underline connection to an iris websocket connection. @@ -278,24 +283,34 @@ func (s *Server) leave(roomName string, connID string) (left bool) { // GetTotalConnections returns the number of total connections func (s *Server) GetTotalConnections() (n int) { - s.mu.RLock() - n = len(s.connections) - s.mu.RUnlock() + s.connections.Range(func(k, v interface{}) bool { + n++ + return true + }) return } // GetConnections returns all connections func (s *Server) GetConnections() []Connection { - s.mu.RLock() - conns := make([]Connection, len(s.connections)) + // first call of Range to get the total length, we don't want to use append or manually grow the list here for many reasons. + length := s.GetTotalConnections() + conns := make([]Connection, length, length) i := 0 - for _, c := range s.connections { - conns[i] = c + // second call of Range. + s.connections.Range(func(k, v interface{}) bool { + conn, ok := v.(*connection) + if !ok { + // if for some reason (should never happen), the value is not stored as *connection + // then stop the iteration and don't continue insertion of the result connections + // in order to avoid any issues while end-dev will try to iterate a nil entry. + return false + } + conns[i] = conn i++ - } + return true + }) - s.mu.RUnlock() return conns } @@ -317,8 +332,10 @@ func (s *Server) GetConnectionsByRoom(roomName string) []Connection { if connIDs, found := s.rooms[roomName]; found { for _, connID := range connIDs { // existence check is not necessary here. - if conn, ok := s.connections[connID]; ok { - conns = append(conns, conn) + if cValue, ok := s.connections.Load(connID); ok { + if conn, ok := cValue.(*connection); ok { + conns = append(conns, conn) + } } } } @@ -358,20 +375,32 @@ func (s *Server) emitMessage(from, to string, data []byte) { } } } else { - s.mu.RLock() // it suppose to send the message to all opened connections or to all except the sender. - for _, conn := range s.connections { - if to != All && to != conn.id { // if it's not suppose to send to all connections (including itself) - if to == Broadcast && from == conn.id { // if broadcast to other connections except this + s.connections.Range(func(k, v interface{}) bool { + connID, ok := k.(string) + if !ok { + // should never happen. + return true + } + + if to != All && to != connID { // if it's not suppose to send to all connections (including itself) + if to == Broadcast && from == connID { // if broadcast to other connections except this // here we do the opossite of previous block, // just skip this connection when it's suppose to send the message to all connections except the sender. - continue + return true } + } - conn.writeDefault(data) - } - s.mu.RUnlock() + // not necessary cast. + conn, ok := v.(*connection) + if ok { + // send to the client(s) when the top validators passed + conn.writeDefault(data) + } + + return ok + }) } } @@ -395,9 +424,7 @@ func (s *Server) Disconnect(connID string) (err error) { // fire the disconnect callbacks, if any. conn.fireDisconnect() - s.mu.Lock() - delete(s.connections, conn.id) - s.mu.Unlock() + s.connections.Delete(connID) err = conn.underline.Close() } From 7ed238aeefcb2cdc1654df7ca4955ca9d15b26d8 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Tue, 19 Feb 2019 22:49:16 +0200 Subject: [PATCH 18/89] improve client test, I think we are OK, both gorilla(websocket) and ws(websocket2) have the same API, it's time to combine them but first let's give a lower level of api available for users if they want to manage the routines by theirselves (i.e on unix they can use netpolls manually) --- _examples/mvc/session-controller/main.go | 4 +- .../go-client-stress-test/client/main.go | 50 ++++++----- .../go-client-stress-test/server/main.go | 85 ++++++++++++++----- _examples/websocket/go-client/client/main.go | 3 +- websocket/connection.go | 19 ++--- websocket2/connection.go | 36 ++++---- websocket2/server.go | 51 ++++++++--- 7 files changed, 160 insertions(+), 88 deletions(-) diff --git a/_examples/mvc/session-controller/main.go b/_examples/mvc/session-controller/main.go index aa3ea0514..272b0abfd 100644 --- a/_examples/mvc/session-controller/main.go +++ b/_examples/mvc/session-controller/main.go @@ -63,10 +63,10 @@ func newApp() *iris.Application { func main() { app := newApp() - // 1. open the browser (no in private mode) + // 1. open the browser // 2. navigate to http://localhost:8080 // 3. refresh the page some times // 4. close the browser - // 5. re-open the browser and re-play 2. + // 5. re-open the browser (if it wasn't in private mode) and re-play 2. app.Run(iris.Addr(":8080")) } diff --git a/_examples/websocket/go-client-stress-test/client/main.go b/_examples/websocket/go-client-stress-test/client/main.go index 4747feb62..0be23e137 100644 --- a/_examples/websocket/go-client-stress-test/client/main.go +++ b/_examples/websocket/go-client-stress-test/client/main.go @@ -2,8 +2,9 @@ package main import ( "bufio" - "fmt" + "log" "math/rand" + "net" "os" "sync" "sync/atomic" @@ -13,11 +14,11 @@ import ( ) var ( - url = "ws://localhost:8080/socket" + url = "ws://localhost:8080" f *os.File ) -const totalClients = 100000 +const totalClients = 16000 // max depends on the OS. var connectionFailures uint64 @@ -41,6 +42,7 @@ func collectError(op string, err error) { } func main() { + log.Println("--------======Running tests...==========--------------") var err error f, err = os.Open("./test.data") if err != nil { @@ -67,27 +69,27 @@ func main() { wg.Add(1) waitTime := time.Duration(rand.Intn(10)) * time.Millisecond time.Sleep(waitTime) - go connect(wg, 10*time.Second+waitTime) + go connect(wg, 9*time.Second+waitTime) } for i := 0; i < totalClients/4; i++ { wg.Add(1) - waitTime := time.Duration(rand.Intn(20)) * time.Millisecond + waitTime := time.Duration(rand.Intn(5)) * time.Millisecond time.Sleep(waitTime) - go connect(wg, 25*time.Second+waitTime) + go connect(wg, 14*time.Second+waitTime) } wg.Wait() - fmt.Println("--------================--------------") - fmt.Printf("execution time [%s]", time.Since(start)) - fmt.Println() + + log.Printf("execution time [%s]", time.Since(start)) + log.Println() if connectionFailures > 0 { - fmt.Printf("Finished with %d/%d connection failures. Please close the server-side manually.\n", connectionFailures, totalClients) + log.Printf("Finished with %d/%d connection failures. Please close the server-side manually.\n", connectionFailures, totalClients) } if n := len(connectErrors); n > 0 { - fmt.Printf("Finished with %d connect errors:\n", n) + log.Printf("Finished with %d connect errors:\n", n) var lastErr error var sameC int @@ -96,36 +98,44 @@ func main() { if lastErr.Error() == err.Error() { sameC++ continue + } else { + _, ok := lastErr.(*net.OpError) + if ok { + if _, ok = err.(*net.OpError); ok { + sameC++ + continue + } + } } } if sameC > 0 { - fmt.Printf("and %d more like this...\n", sameC) + log.Printf("and %d more like this...\n", sameC) sameC = 0 continue } - fmt.Printf("[%d] - %v\n", i+1, err) + log.Printf("[%d] - %v\n", i+1, err) lastErr = err } } if n := len(disconnectErrors); n > 0 { - fmt.Printf("Finished with %d disconnect errors\n", n) + log.Printf("Finished with %d disconnect errors\n", n) for i, err := range disconnectErrors { if err == websocket.ErrAlreadyDisconnected { continue } - fmt.Printf("[%d] - %v\n", i+1, err) + log.Printf("[%d] - %v\n", i+1, err) } } if connectionFailures == 0 && len(connectErrors) == 0 && len(disconnectErrors) == 0 { - fmt.Println("ALL OK.") + log.Println("ALL OK.") } - fmt.Println("--------================--------------") + log.Println("--------================--------------") } func connect(wg *sync.WaitGroup, alive time.Duration) { @@ -138,17 +148,17 @@ func connect(wg *sync.WaitGroup, alive time.Duration) { } c.OnError(func(err error) { - fmt.Printf("error: %v", err) + log.Printf("error: %v", err) }) disconnected := false c.OnDisconnect(func() { - fmt.Printf("I am disconnected after [%s].\n", alive) + // log.Printf("I am disconnected after [%s].\n", alive) disconnected = true }) c.On("chat", func(message string) { - fmt.Printf("\n%s\n", message) + // log.Printf("\n%s\n", message) }) go func() { diff --git a/_examples/websocket/go-client-stress-test/server/main.go b/_examples/websocket/go-client-stress-test/server/main.go index 07ea3014b..a0cf66686 100644 --- a/_examples/websocket/go-client-stress-test/server/main.go +++ b/_examples/websocket/go-client-stress-test/server/main.go @@ -1,8 +1,9 @@ package main import ( - "fmt" + "log" "os" + "runtime" "sync/atomic" "time" @@ -10,38 +11,84 @@ import ( "github.com/kataras/iris/websocket2" ) -const totalClients = 100000 +const totalClients = 16000 // max depends on the OS. +const http = true func main() { - app := iris.New() - // websocket.Config{PingPeriod: ((60 * time.Second) * 9) / 10} ws := websocket.New(websocket.Config{}) ws.OnConnection(handleConnection) - app.Get("/socket", ws.Handler()) + + // websocket.Config{PingPeriod: ((60 * time.Second) * 9) / 10} go func() { - t := time.NewTicker(2 * time.Second) + dur := 8 * time.Second + if totalClients >= 64000 { + // if more than 64000 then let's no check every 8 seconds, let's do it every 24 seconds, + // just for simplicity, either way works. + dur = 24 * time.Second + } + t := time.NewTicker(dur) + defer t.Stop() + defer os.Exit(0) + defer runtime.Goexit() + + var started bool for { <-t.C - conns := ws.GetConnections() - for _, conn := range conns { - // fmt.Println(conn.ID()) - // Do nothing. - _ = conn + n := ws.GetTotalConnections() + if n > 0 { + started = true } - if atomic.LoadUint64(&count) == totalClients { - fmt.Println("ALL CLIENTS DISCONNECTED SUCCESSFULLY.") - t.Stop() - os.Exit(0) - return + if started { + totalConnected := atomic.LoadUint64(&count) + + if totalConnected == totalClients { + if n != 0 { + log.Println("ALL CLIENTS DISCONNECTED BUT LEFTOVERS ON CONNECTIONS LIST.") + } else { + log.Println("ALL CLIENTS DISCONNECTED SUCCESSFULLY.") + } + return + } else if n == 0 { + log.Printf("%d/%d CLIENTS WERE NOT CONNECTED AT ALL. CHECK YOUR OS NET SETTINGS. ALL OTHER CONNECTED CLIENTS DISCONNECTED SUCCESSFULLY.\n", + totalClients-totalConnected, totalClients) + + return + } } } }() - app.Run(iris.Addr(":8080")) + if http { + app := iris.New() + app.Get("/", ws.Handler()) + app.Run(iris.Addr(":8080")) + return + } + + // ln, err := net.Listen("tcp", ":8080") + // if err != nil { + // panic(err) + // } + + // defer ln.Close() + // for { + // conn, err := ln.Accept() + // if err != nil { + // panic(err) + // } + + // go func() { + // err = ws.HandleConn(conn) + // if err != nil { + // panic(err) + // } + // }() + // } + } func handleConnection(c websocket.Connection) { @@ -56,9 +103,9 @@ var count uint64 func handleDisconnect(c websocket.Connection) { atomic.AddUint64(&count, 1) - fmt.Printf("client [%s] disconnected!\n", c.ID()) + // log.Printf("client [%s] disconnected!\n", c.ID()) } func handleErr(c websocket.Connection, err error) { - fmt.Printf("client [%s] errored: %v\n", c.ID(), err) + log.Printf("client [%s] errored: %v\n", c.ID(), err) } diff --git a/_examples/websocket/go-client/client/main.go b/_examples/websocket/go-client/client/main.go index 2d1ded6d5..6d3f744d8 100644 --- a/_examples/websocket/go-client/client/main.go +++ b/_examples/websocket/go-client/client/main.go @@ -21,8 +21,7 @@ $ go run main.go >> hi! */ func main() { - // `websocket.DialContext` is also available. - c, err := websocket.Dial(url, websocket.ConnectionConfig{}) + c, err := websocket.Dial(nil, url, websocket.ConnectionConfig{}) if err != nil { panic(err) } diff --git a/websocket/connection.go b/websocket/connection.go index 983fe2098..8987ec3e8 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -197,11 +197,6 @@ type ( // Note: the callback(s) called right before the server deletes the connection from the room // so the connection theoretical can still send messages to its room right before it is being disconnected. OnLeave(roomLeaveCb LeaveRoomFunc) - // Wait starts the pinger and the messages reader, - // it's named as "Wait" because it should be called LAST, - // after the "On" events IF server's `Upgrade` is used, - // otherise you don't have to call it because the `Handler()` does it automatically. - Wait() // SetValue sets a key-value pair on the connection's mem store. SetValue(key string, value interface{}) // GetValue gets a value by its key from the connection's mem store. @@ -239,6 +234,11 @@ type ( // Disconnect disconnects the client, close the underline websocket conn and removes it from the conn list // returns the error, if any, from the underline connection Disconnect() error + // Wait starts the pinger and the messages reader, + // it's named as "Wait" because it should be called LAST, + // after the "On" events IF server's `Upgrade` is used, + // otherise you don't have to call it because the `Handler()` does it automatically. + Wait() } connection struct { @@ -792,7 +792,7 @@ func (c ConnectionConfig) Validate() ConnectionConfig { // invalid. var ErrBadHandshake = websocket.ErrBadHandshake -// DialContext creates a new client connection. +// Dial creates a new client connection. // // The context will be used in the request and in the Dialer. // @@ -803,7 +803,7 @@ var ErrBadHandshake = websocket.ErrBadHandshake // open socket of the server, i.e ws://localhost:8080/my_websocket_endpoint. // // Custom dialers can be used by wrapping the iris websocket connection via `websocket.WrapConnection`. -func DialContext(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { +func Dial(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { if ctx == nil { ctx = stdContext.Background() } @@ -822,8 +822,3 @@ func DialContext(ctx stdContext.Context, url string, cfg ConnectionConfig) (Clie return clientConn, nil } - -// Dial creates a new client connection by calling `DialContext` with a background context. -func Dial(url string, cfg ConnectionConfig) (ClientConnection, error) { - return DialContext(stdContext.Background(), url, cfg) -} diff --git a/websocket2/connection.go b/websocket2/connection.go index 840d36e46..2547cf5a0 100644 --- a/websocket2/connection.go +++ b/websocket2/connection.go @@ -197,11 +197,7 @@ type ( // Note: the callback(s) called right before the server deletes the connection from the room // so the connection theoretical can still send messages to its room right before it is being disconnected. OnLeave(roomLeaveCb LeaveRoomFunc) - // Wait starts the pinger and the messages reader, - // it's named as "Wait" because it should be called LAST, - // after the "On" events IF server's `Upgrade` is used, - // otherise you don't have to call it because the `Handler()` does it automatically. - Wait() + // SetValue sets a key-value pair on the connection's mem store. SetValue(key string, value interface{}) // GetValue gets a value by its key from the connection's mem store. @@ -239,6 +235,11 @@ type ( // Disconnect disconnects the client, close the underline websocket conn and removes it from the conn list // returns the error, if any, from the underline connection Disconnect() error + // Wait starts the pinger and the messages reader, + // it's named as "Wait" because it should be called LAST, + // after the "On" events IF server's `Upgrade` is used, + // otherise you don't have to call it because the `Handler()` does it automatically. + Wait() error } connection struct { @@ -454,7 +455,7 @@ func (c *connection) isErrClosed(err error) bool { return err != io.EOF } -func (c *connection) startReader() { +func (c *connection) startReader() error { defer c.Disconnect() hasReadTimeout := c.config.ReadTimeout > 0 @@ -476,25 +477,25 @@ func (c *connection) startReader() { hdr, err := rd.NextFrame() if err != nil { - return + return err } if hdr.OpCode.IsControl() { if err := controlHandler(hdr, &rd); err != nil { - return + return err } continue } if hdr.OpCode&TextMessage == 0 && hdr.OpCode&BinaryMessage == 0 { if err := rd.Discard(); err != nil { - return + return err } continue } data, err := ioutil.ReadAll(&rd) if err != nil { - return + return err } c.messageReceived(data) @@ -575,7 +576,6 @@ func (c *connection) startReader() { // c.messageReceived(data) } - } // messageReceived checks the incoming message and fire the nativeMessage listeners or the event listeners (ws custom message) @@ -747,16 +747,16 @@ func (c *connection) fireOnLeave(roomName string) { // it's named as "Wait" because it should be called LAST, // after the "On" events IF server's `Upgrade` is used, // otherise you don't have to call it because the `Handler()` does it automatically. -func (c *connection) Wait() { +func (c *connection) Wait() error { if c.started { - return + return nil } c.started = true // start the ping c.startPinger() // start the messages reader - c.startReader() + return c.startReader() } // ErrAlreadyDisconnected can be reported on the `Connection#Disconnect` function whenever the caller tries to close the @@ -912,13 +912,7 @@ var ErrBadHandshake = ws.ErrHandshakeBadConnection // // Custom dialers can be used by wrapping the iris websocket connection via `websocket.WrapConnection`. func Dial(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { - c, err := dial(ctx, url, cfg) - if err != nil { - time.Sleep(1 * time.Second) - c, err = dial(ctx, url, cfg) - } - - return c, err + return dial(ctx, url, cfg) } func dial(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { diff --git a/websocket2/server.go b/websocket2/server.go index e4a2df8dc..8adfd32e4 100644 --- a/websocket2/server.go +++ b/websocket2/server.go @@ -50,7 +50,8 @@ type ( mu sync.RWMutex // for rooms. onConnectionListeners []ConnectionFunc //connectionPool sync.Pool // sadly we can't make this because the websocket connection is live until is closed. - upgrader ws.HTTPUpgrader + httpUpgrader ws.HTTPUpgrader + tcpUpgrader ws.Upgrader } ) @@ -67,7 +68,8 @@ func New(cfg Config) *Server { connections: sync.Map{}, // ready-to-use, this is not necessary. rooms: make(map[string][]string), onConnectionListeners: make([]ConnectionFunc, 0), - upgrader: ws.DefaultHTTPUpgrader, // ws.DefaultUpgrader, + httpUpgrader: ws.DefaultHTTPUpgrader, // ws.DefaultUpgrader, + tcpUpgrader: ws.DefaultUpgrader, } } @@ -115,7 +117,7 @@ func (s *Server) Handler() context.Handler { // This one does not starts the connection's writer and reader, so after your `On/OnMessage` events registration // the caller has to call the `Connection#Wait` function, otherwise the connection will be not handled. func (s *Server) Upgrade(ctx context.Context) Connection { - conn, _, _, err := s.upgrader.Upgrade(ctx.Request(), ctx.ResponseWriter()) + conn, _, _, err := s.httpUpgrader.Upgrade(ctx.Request(), ctx.ResponseWriter()) if err != nil { ctx.Application().Logger().Warnf("websocket error: %v\n", err) ctx.StatusCode(503) // Status Service Unavailable @@ -125,6 +127,37 @@ func (s *Server) Upgrade(ctx context.Context) Connection { return s.handleConnection(ctx, conn) } +func (s *Server) ZeroUpgrade(conn net.Conn) Connection { + _, err := s.tcpUpgrader.Upgrade(conn) + if err != nil { + return &connection{err: err} + } + + return s.handleConnection(nil, conn) +} + +func (s *Server) HandleConn(conn net.Conn) error { + c := s.ZeroUpgrade(conn) + if c.Err() != nil { + return c.Err() + } + + // NOTE TO ME: fire these first BEFORE startReader and startPinger + // in order to set the events and any messages to send + // the startPinger will send the OK to the client and only + // then the client is able to send and receive from Server + // when all things are ready and only then. DO NOT change this order. + + // fire the on connection event callbacks, if any + for i := range s.onConnectionListeners { + s.onConnectionListeners[i](c) + } + + // start the ping and the messages reader + c.Wait() + return nil +} + func (s *Server) addConnection(c *connection) { s.connections.Store(c.id, c) } @@ -292,12 +325,7 @@ func (s *Server) GetTotalConnections() (n int) { } // GetConnections returns all connections -func (s *Server) GetConnections() []Connection { - // first call of Range to get the total length, we don't want to use append or manually grow the list here for many reasons. - length := s.GetTotalConnections() - conns := make([]Connection, length, length) - i := 0 - // second call of Range. +func (s *Server) GetConnections() (conns []Connection) { s.connections.Range(func(k, v interface{}) bool { conn, ok := v.(*connection) if !ok { @@ -306,12 +334,11 @@ func (s *Server) GetConnections() []Connection { // in order to avoid any issues while end-dev will try to iterate a nil entry. return false } - conns[i] = conn - i++ + conns = append(conns, conn) return true }) - return conns + return } // GetConnection returns single connection From 1cf47dae31e48facc709b0193ff64585ee0efd3f Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Fri, 22 Feb 2019 21:24:10 +0200 Subject: [PATCH 19/89] some cleanup, and remove the test 'testwebocket2' package at all; A lower-level fast websocket impl based on gobwas/ws will be published on a different repo, it is a WIP --- LICENSE | 2 +- .../go-client-stress-test/client/main.go | 22 +- .../go-client-stress-test/server/main.go | 37 +- cache/LICENSE | 2 +- doc.go | 2 +- hero/LICENSE | 2 +- macro/LICENSE | 2 +- mvc/LICENSE | 2 +- sessions/LICENSE | 2 +- typescript/LICENSE | 2 +- versioning/LICENSE | 2 +- websocket/LICENSE | 2 +- websocket/config.go | 43 +- websocket/connection.go | 58 +- websocket/server.go | 120 +-- websocket2/client.js | 208 ---- websocket2/client.js.go | 233 ----- websocket2/client.min.js | 1 - websocket2/client.ts | 256 ----- websocket2/config.go | 185 ---- websocket2/connection.go | 936 ------------------ websocket2/emitter.go | 43 - websocket2/message.go | 182 ---- websocket2/server.go | 460 --------- websocket2/websocket.go | 69 -- 25 files changed, 107 insertions(+), 2766 deletions(-) delete mode 100644 websocket2/client.js delete mode 100644 websocket2/client.js.go delete mode 100644 websocket2/client.min.js delete mode 100644 websocket2/client.ts delete mode 100644 websocket2/config.go delete mode 100644 websocket2/connection.go delete mode 100644 websocket2/emitter.go delete mode 100644 websocket2/message.go delete mode 100644 websocket2/server.go delete mode 100644 websocket2/websocket.go diff --git a/LICENSE b/LICENSE index c9eada500..a56c9e1a1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2017-2018 The Iris Authors. All rights reserved. +Copyright (c) 2017-2019 The Iris Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/_examples/websocket/go-client-stress-test/client/main.go b/_examples/websocket/go-client-stress-test/client/main.go index 0be23e137..fb5d9806a 100644 --- a/_examples/websocket/go-client-stress-test/client/main.go +++ b/_examples/websocket/go-client-stress-test/client/main.go @@ -10,7 +10,7 @@ import ( "sync/atomic" "time" - "github.com/kataras/iris/websocket2" + "github.com/kataras/iris/websocket" ) var ( @@ -19,6 +19,7 @@ var ( ) const totalClients = 16000 // max depends on the OS. +const verbose = true var connectionFailures uint64 @@ -42,7 +43,7 @@ func collectError(op string, err error) { } func main() { - log.Println("--------======Running tests...==========--------------") + log.Println("--Running...") var err error f, err = os.Open("./test.data") if err != nil { @@ -85,11 +86,11 @@ func main() { log.Println() if connectionFailures > 0 { - log.Printf("Finished with %d/%d connection failures. Please close the server-side manually.\n", connectionFailures, totalClients) + log.Printf("Finished with %d/%d connection failures.", connectionFailures, totalClients) } if n := len(connectErrors); n > 0 { - log.Printf("Finished with %d connect errors:\n", n) + log.Printf("Finished with %d connect errors: ", n) var lastErr error var sameC int @@ -123,7 +124,7 @@ func main() { if n := len(disconnectErrors); n > 0 { log.Printf("Finished with %d disconnect errors\n", n) for i, err := range disconnectErrors { - if err == websocket.ErrAlreadyDisconnected { + if err == websocket.ErrAlreadyDisconnected && i > 0 { continue } @@ -135,7 +136,7 @@ func main() { log.Println("ALL OK.") } - log.Println("--------================--------------") + log.Println("--Finished.") } func connect(wg *sync.WaitGroup, alive time.Duration) { @@ -153,12 +154,17 @@ func connect(wg *sync.WaitGroup, alive time.Duration) { disconnected := false c.OnDisconnect(func() { - // log.Printf("I am disconnected after [%s].\n", alive) + if verbose { + log.Printf("I am disconnected after [%s].\n", alive) + } + disconnected = true }) c.On("chat", func(message string) { - // log.Printf("\n%s\n", message) + if verbose { + log.Printf("\n%s\n", message) + } }) go func() { diff --git a/_examples/websocket/go-client-stress-test/server/main.go b/_examples/websocket/go-client-stress-test/server/main.go index a0cf66686..37fe73834 100644 --- a/_examples/websocket/go-client-stress-test/server/main.go +++ b/_examples/websocket/go-client-stress-test/server/main.go @@ -8,11 +8,11 @@ import ( "time" "github.com/kataras/iris" - "github.com/kataras/iris/websocket2" + "github.com/kataras/iris/websocket" ) const totalClients = 16000 // max depends on the OS. -const http = true +const verbose = true func main() { @@ -62,32 +62,9 @@ func main() { } }() - if http { - app := iris.New() - app.Get("/", ws.Handler()) - app.Run(iris.Addr(":8080")) - return - } - - // ln, err := net.Listen("tcp", ":8080") - // if err != nil { - // panic(err) - // } - - // defer ln.Close() - // for { - // conn, err := ln.Accept() - // if err != nil { - // panic(err) - // } - - // go func() { - // err = ws.HandleConn(conn) - // if err != nil { - // panic(err) - // } - // }() - // } + app := iris.New() + app.Get("/", ws.Handler()) + app.Run(iris.Addr(":8080")) } @@ -103,7 +80,9 @@ var count uint64 func handleDisconnect(c websocket.Connection) { atomic.AddUint64(&count, 1) - // log.Printf("client [%s] disconnected!\n", c.ID()) + if verbose { + log.Printf("client [%s] disconnected!\n", c.ID()) + } } func handleErr(c websocket.Connection, err error) { diff --git a/cache/LICENSE b/cache/LICENSE index 6beda715e..568450b04 100644 --- a/cache/LICENSE +++ b/cache/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2017-2018 The Iris Cache Authors. All rights reserved. +Copyright (c) 2017-2019 The Iris Cache Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/doc.go b/doc.go index 84b0b61fb..b40c8aa35 100644 --- a/doc.go +++ b/doc.go @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2018 The Iris Authors. All rights reserved. +// Copyright (c) 2017-2019 The Iris Authors. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are diff --git a/hero/LICENSE b/hero/LICENSE index a0b2d92fe..970e41a78 100644 --- a/hero/LICENSE +++ b/hero/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018 Gerasimos Maropoulos. All rights reserved. +Copyright (c) 2018-2019 Gerasimos Maropoulos. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/macro/LICENSE b/macro/LICENSE index c73df4cef..8f0865b20 100644 --- a/macro/LICENSE +++ b/macro/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2017-2018 The Iris Macro and Route path interpreter. All rights reserved. +Copyright (c) 2017-2019 The Iris Macro and Route path interpreter. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/mvc/LICENSE b/mvc/LICENSE index 469fb44d0..fb9b3b8af 100644 --- a/mvc/LICENSE +++ b/mvc/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018 Gerasimos Maropoulos. All rights reserved. +Copyright (c) 2018-2019 Gerasimos Maropoulos. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/sessions/LICENSE b/sessions/LICENSE index 6a39906b6..ca7456f20 100644 --- a/sessions/LICENSE +++ b/sessions/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2017-2018 The Iris Sessions Authors. All rights reserved. +Copyright (c) 2017-2019 The Iris Sessions Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/typescript/LICENSE b/typescript/LICENSE index ec4015993..50c59d41f 100644 --- a/typescript/LICENSE +++ b/typescript/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2017-2018 The Iris Typescript Authors. All rights reserved. +Copyright (c) 2017-2019 The Iris Typescript Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/versioning/LICENSE b/versioning/LICENSE index 469fb44d0..fb9b3b8af 100644 --- a/versioning/LICENSE +++ b/versioning/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018 Gerasimos Maropoulos. All rights reserved. +Copyright (c) 2018-2019 Gerasimos Maropoulos. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/websocket/LICENSE b/websocket/LICENSE index 47aea48dc..1ea6d9b56 100644 --- a/websocket/LICENSE +++ b/websocket/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2017-2018 The Iris Websocket Authors. All rights reserved. +Copyright (c) 2017-2019 The Iris Websocket Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/websocket/config.go b/websocket/config.go index 145ea2a68..0636ae536 100644 --- a/websocket/config.go +++ b/websocket/config.go @@ -1,8 +1,8 @@ package websocket import ( - "math/rand" "net/http" + "strconv" "time" "github.com/kataras/iris/context" @@ -33,19 +33,18 @@ const ( ) var ( - // DefaultIDGenerator returns a random unique for a new connection. + // DefaultIDGenerator returns a random unique string for a new connection. // Used when config.IDGenerator is nil. DefaultIDGenerator = func(context.Context) string { id, err := uuid.NewV4() if err != nil { - return randomString(64) + return strconv.FormatInt(time.Now().Unix(), 10) } return id.String() } ) -// Config the websocket server configuration -// all of these are optional. +// Config contains the websocket server's configuration, optional. type Config struct { // IDGenerator used to create (and later on, set) // an ID for each incoming websocket connections (clients). @@ -158,37 +157,3 @@ func (c Config) Validate() Config { return c } - -const ( - letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - letterIdxBits = 6 // 6 bits to represent a letter index - letterIdxMask = 1<= 0; { - if remain == 0 { - cache, remain = src.Int63(), letterIdxMax - } - if idx := int(cache & letterIdxMask); idx < len(letterBytes) { - b[i] = letterBytes[idx] - i-- - } - cache >>= letterIdxBits - remain-- - } - - return b -} - -// randomString accepts a number(10 for example) and returns a random string using simple but fairly safe random algorithm -func randomString(n int) string { - return string(random(n)) -} diff --git a/websocket/connection.go b/websocket/connection.go index 8987ec3e8..2203e3992 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -4,7 +4,6 @@ import ( "bytes" stdContext "context" "errors" - "io" "net" "strconv" "strings" @@ -93,50 +92,6 @@ func (r *ConnectionValues) Reset() { *r = (*r)[:0] } -// UnderlineConnection is the underline connection, nothing to think about, -// it's used internally mostly but can be used for extreme cases with other libraries. -type UnderlineConnection interface { - // SetWriteDeadline sets the write deadline on the underlying network - // connection. After a write has timed out, the websocket state is corrupt and - // all future writes will return an error. A zero value for t means writes will - // not time out. - SetWriteDeadline(t time.Time) error - // SetReadDeadline sets the read deadline on the underlying network connection. - // After a read has timed out, the websocket connection state is corrupt and - // all future reads will return an error. A zero value for t means reads will - // not time out. - SetReadDeadline(t time.Time) error - // SetReadLimit sets the maximum size for a message read from the peer. If a - // message exceeds the limit, the connection sends a close frame to the peer - // and returns ErrReadLimit to the application. - SetReadLimit(limit int64) - // SetPongHandler sets the handler for pong messages received from the peer. - // The appData argument to h is the PONG frame application data. The default - // pong handler does nothing. - SetPongHandler(h func(appData string) error) - // SetPingHandler sets the handler for ping messages received from the peer. - // The appData argument to h is the PING frame application data. The default - // ping handler sends a pong to the peer. - SetPingHandler(h func(appData string) error) - // WriteControl writes a control message with the given deadline. The allowed - // message types are CloseMessage, PingMessage and PongMessage. - WriteControl(messageType int, data []byte, deadline time.Time) error - // WriteMessage is a helper method for getting a writer using NextWriter, - // writing the message and closing the writer. - WriteMessage(messageType int, data []byte) error - // ReadMessage is a helper method for getting a reader using NextReader and - // reading from that reader to a buffer. - ReadMessage() (messageType int, p []byte, err error) - // NextWriter returns a writer for the next message to send. The writer's Close - // method flushes the complete message to the network. - // - // There can be at most one open writer on a connection. NextWriter closes the - // previous writer if the application has not already done so. - NextWriter(messageType int) (io.WriteCloser, error) - // Close closes the underlying network connection without sending or waiting for a close frame. - Close() error -} - // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- // -------------------------------Connection implementation----------------------------- @@ -239,11 +194,12 @@ type ( // after the "On" events IF server's `Upgrade` is used, // otherise you don't have to call it because the `Handler()` does it automatically. Wait() + UnderlyingConn() *websocket.Conn } connection struct { err error - underline UnderlineConnection + underline *websocket.Conn config ConnectionConfig defaultMessageType int serializer *messageSerializer @@ -281,11 +237,11 @@ var _ Connection = &connection{} // WrapConnection wraps the underline websocket connection into a new iris websocket connection. // The caller should call the `connection#Wait` (which blocks) to enable its read and write functionality. -func WrapConnection(underlineConn UnderlineConnection, cfg ConnectionConfig) Connection { +func WrapConnection(underlineConn *websocket.Conn, cfg ConnectionConfig) Connection { return newConnection(underlineConn, cfg) } -func newConnection(underlineConn UnderlineConnection, cfg ConnectionConfig) *connection { +func newConnection(underlineConn *websocket.Conn, cfg ConnectionConfig) *connection { cfg = cfg.Validate() c := &connection{ underline: underlineConn, @@ -308,7 +264,7 @@ func newConnection(underlineConn UnderlineConnection, cfg ConnectionConfig) *con return c } -func newServerConnection(ctx context.Context, s *Server, underlineConn UnderlineConnection, id string) *connection { +func newServerConnection(ctx context.Context, s *Server, underlineConn *websocket.Conn, id string) *connection { c := newConnection(underlineConn, ConnectionConfig{ EvtMessagePrefix: s.config.EvtMessagePrefix, WriteTimeout: s.config.WriteTimeout, @@ -334,6 +290,10 @@ func newServerConnection(ctx context.Context, s *Server, underlineConn Underline return c } +func (c *connection) UnderlyingConn() *websocket.Conn { + return c.underline +} + // Err is not nil if the upgrader failed to upgrade http to websocket connection. func (c *connection) Err() error { return c.err diff --git a/websocket/server.go b/websocket/server.go index 6b9b61302..da747e3ed 100644 --- a/websocket/server.go +++ b/websocket/server.go @@ -15,19 +15,6 @@ type ( // Receives one parameter which is the Connection ConnectionFunc func(Connection) - // websocketRoomPayload is used as payload from the connection to the Server - websocketRoomPayload struct { - roomName string - connectionID string - } - - // payloads, connection -> Server - websocketMessagePayload struct { - from string - to string - data []byte - } - // Server is the websocket Server's implementation. // // It listens for websocket clients (either from the javascript client-side or from any websocket implementation). @@ -44,9 +31,9 @@ type ( // Use a route to serve this file on a specific path, i.e // app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(mywebsocketServer.ClientSource) }) ClientSource []byte - connections map[string]*connection // key = the Connection ID. - rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name - mu sync.RWMutex // for rooms and connections. + connections sync.Map // key = the Connection ID. + rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name + mu sync.RWMutex // for rooms. onConnectionListeners []ConnectionFunc //connectionPool sync.Pool // sadly we can't make this because the websocket connection is live until is closed. upgrader websocket.Upgrader @@ -63,7 +50,7 @@ func New(cfg Config) *Server { return &Server{ config: cfg, ClientSource: bytes.Replace(ClientSource, []byte(DefaultEvtMessageKey), cfg.EvtMessagePrefix, -1), - connections: make(map[string]*connection), + connections: sync.Map{}, // ready-to-use, this is not necessary. rooms: make(map[string][]string), onConnectionListeners: make([]ConnectionFunc, 0), upgrader: websocket.Upgrader{ @@ -132,19 +119,24 @@ func (s *Server) Upgrade(ctx context.Context) Connection { } func (s *Server) addConnection(c *connection) { - s.mu.Lock() - s.connections[c.id] = c - s.mu.Unlock() + s.connections.Store(c.id, c) } func (s *Server) getConnection(connID string) (*connection, bool) { - c, ok := s.connections[connID] - return c, ok + if cValue, ok := s.connections.Load(connID); ok { + // this cast is not necessary, + // we know that we always save a connection, but for good or worse let it be here. + if conn, ok := cValue.(*connection); ok { + return conn, ok + } + } + + return nil, false } // wrapConnection wraps an underline connection to an iris websocket connection. // It does NOT starts its writer, reader and event mux, the caller is responsible for that. -func (s *Server) handleConnection(ctx context.Context, websocketConn UnderlineConnection) *connection { +func (s *Server) handleConnection(ctx context.Context, websocketConn *websocket.Conn) *connection { // use the config's id generator (or the default) to create a websocket client/connection id cid := s.config.IDGenerator(ctx) // create the new connection @@ -282,27 +274,31 @@ func (s *Server) leave(roomName string, connID string) (left bool) { return } -// GetTotalConnections returns the number of total connections +// GetTotalConnections returns the number of total connections. func (s *Server) GetTotalConnections() (n int) { - s.mu.RLock() - n = len(s.connections) - s.mu.RUnlock() + s.connections.Range(func(k, v interface{}) bool { + n++ + return true + }) - return + return n } -// GetConnections returns all connections -func (s *Server) GetConnections() []Connection { - s.mu.RLock() - conns := make([]Connection, len(s.connections)) - i := 0 - for _, c := range s.connections { - conns[i] = c - i++ - } +// GetConnections returns all connections. +func (s *Server) GetConnections() (conns []Connection) { + s.connections.Range(func(k, v interface{}) bool { + conn, ok := v.(*connection) + if !ok { + // if for some reason (should never happen), the value is not stored as *connection + // then stop the iteration and don't continue insertion of the result connections + // in order to avoid any issues while end-dev will try to iterate a nil entry. + return false + } + conns = append(conns, conn) + return true + }) - s.mu.RUnlock() - return conns + return } // GetConnection returns single connection @@ -317,21 +313,19 @@ func (s *Server) GetConnection(connID string) Connection { // GetConnectionsByRoom returns a list of Connection // which are joined to this room. -func (s *Server) GetConnectionsByRoom(roomName string) []Connection { - var conns []Connection - s.mu.RLock() +func (s *Server) GetConnectionsByRoom(roomName string) (conns []Connection) { if connIDs, found := s.rooms[roomName]; found { for _, connID := range connIDs { // existence check is not necessary here. - if conn, ok := s.connections[connID]; ok { - conns = append(conns, conn) + if cValue, ok := s.connections.Load(connID); ok { + if conn, ok := cValue.(*connection); ok { + conns = append(conns, conn) + } } } } - s.mu.RUnlock() - - return conns + return } // emitMessage is the main 'router' of the messages coming from the connection @@ -364,20 +358,32 @@ func (s *Server) emitMessage(from, to string, data []byte) { } } } else { - s.mu.RLock() // it suppose to send the message to all opened connections or to all except the sender. - for _, conn := range s.connections { - if to != All && to != conn.id { // if it's not suppose to send to all connections (including itself) - if to == Broadcast && from == conn.id { // if broadcast to other connections except this + s.connections.Range(func(k, v interface{}) bool { + connID, ok := k.(string) + if !ok { + // should never happen. + return true + } + + if to != All && to != connID { // if it's not suppose to send to all connections (including itself) + if to == Broadcast && from == connID { // if broadcast to other connections except this // here we do the opossite of previous block, // just skip this connection when it's suppose to send the message to all connections except the sender. - continue + return true } + } - conn.writeDefault(data) - } - s.mu.RUnlock() + // not necessary cast. + conn, ok := v.(*connection) + if ok { + // send to the client(s) when the top validators passed + conn.writeDefault(data) + } + + return ok + }) } } @@ -402,9 +408,7 @@ func (s *Server) Disconnect(connID string) (err error) { // close the underline connection and return its error, if any. err = conn.underline.Close() - s.mu.Lock() - delete(s.connections, conn.id) - s.mu.Unlock() + s.connections.Delete(connID) } return diff --git a/websocket2/client.js b/websocket2/client.js deleted file mode 100644 index ff3230570..000000000 --- a/websocket2/client.js +++ /dev/null @@ -1,208 +0,0 @@ -var websocketStringMessageType = 0; -var websocketIntMessageType = 1; -var websocketBoolMessageType = 2; -var websocketJSONMessageType = 4; -var websocketMessagePrefix = "iris-websocket-message:"; -var websocketMessageSeparator = ";"; -var websocketMessagePrefixLen = websocketMessagePrefix.length; -var websocketMessageSeparatorLen = websocketMessageSeparator.length; -var websocketMessagePrefixAndSepIdx = websocketMessagePrefixLen + websocketMessageSeparatorLen - 1; -var websocketMessagePrefixIdx = websocketMessagePrefixLen - 1; -var websocketMessageSeparatorIdx = websocketMessageSeparatorLen - 1; -var Ws = (function () { - function Ws(endpoint, protocols) { - var _this = this; - // events listeners - this.connectListeners = []; - this.disconnectListeners = []; - this.nativeMessageListeners = []; - this.messageListeners = {}; - if (!window["WebSocket"]) { - return; - } - if (endpoint.indexOf("ws") == -1) { - endpoint = "ws://" + endpoint; - } - if (protocols != null && protocols.length > 0) { - this.conn = new WebSocket(endpoint, protocols); - } - else { - this.conn = new WebSocket(endpoint); - } - this.conn.onopen = (function (evt) { - _this.fireConnect(); - _this.isReady = true; - return null; - }); - this.conn.onclose = (function (evt) { - _this.fireDisconnect(); - return null; - }); - this.conn.onmessage = (function (evt) { - _this.messageReceivedFromConn(evt); - }); - } - //utils - Ws.prototype.isNumber = function (obj) { - return !isNaN(obj - 0) && obj !== null && obj !== "" && obj !== false; - }; - Ws.prototype.isString = function (obj) { - return Object.prototype.toString.call(obj) == "[object String]"; - }; - Ws.prototype.isBoolean = function (obj) { - return typeof obj === 'boolean' || - (typeof obj === 'object' && typeof obj.valueOf() === 'boolean'); - }; - Ws.prototype.isJSON = function (obj) { - return typeof obj === 'object'; - }; - // - // messages - Ws.prototype._msg = function (event, websocketMessageType, dataMessage) { - return websocketMessagePrefix + event + websocketMessageSeparator + String(websocketMessageType) + websocketMessageSeparator + dataMessage; - }; - Ws.prototype.encodeMessage = function (event, data) { - var m = ""; - var t = 0; - if (this.isNumber(data)) { - t = websocketIntMessageType; - m = data.toString(); - } - else if (this.isBoolean(data)) { - t = websocketBoolMessageType; - m = data.toString(); - } - else if (this.isString(data)) { - t = websocketStringMessageType; - m = data.toString(); - } - else if (this.isJSON(data)) { - //propably json-object - t = websocketJSONMessageType; - m = JSON.stringify(data); - } - else if (data !== null && typeof(data) !== "undefined" ) { - // if it has a second parameter but it's not a type we know, then fire this: - console.log("unsupported type of input argument passed, try to not include this argument to the 'Emit'"); - } - return this._msg(event, t, m); - }; - Ws.prototype.decodeMessage = function (event, websocketMessage) { - //iris-websocket-message;user;4;themarshaledstringfromajsonstruct - var skipLen = websocketMessagePrefixLen + websocketMessageSeparatorLen + event.length + 2; - if (websocketMessage.length < skipLen + 1) { - return null; - } - var websocketMessageType = parseInt(websocketMessage.charAt(skipLen - 2)); - var theMessage = websocketMessage.substring(skipLen, websocketMessage.length); - if (websocketMessageType == websocketIntMessageType) { - return parseInt(theMessage); - } - else if (websocketMessageType == websocketBoolMessageType) { - return Boolean(theMessage); - } - else if (websocketMessageType == websocketStringMessageType) { - return theMessage; - } - else if (websocketMessageType == websocketJSONMessageType) { - return JSON.parse(theMessage); - } - else { - return null; // invalid - } - }; - Ws.prototype.getWebsocketCustomEvent = function (websocketMessage) { - if (websocketMessage.length < websocketMessagePrefixAndSepIdx) { - return ""; - } - var s = websocketMessage.substring(websocketMessagePrefixAndSepIdx, websocketMessage.length); - var evt = s.substring(0, s.indexOf(websocketMessageSeparator)); - return evt; - }; - Ws.prototype.getCustomMessage = function (event, websocketMessage) { - var eventIdx = websocketMessage.indexOf(event + websocketMessageSeparator); - var s = websocketMessage.substring(eventIdx + event.length + websocketMessageSeparator.length + 2, websocketMessage.length); - return s; - }; - // - // Ws Events - // messageReceivedFromConn this is the func which decides - // if it's a native websocket message or a custom qws message - // if native message then calls the fireNativeMessage - // else calls the fireMessage - // - // remember iris gives you the freedom of native websocket messages if you don't want to use this client side at all. - Ws.prototype.messageReceivedFromConn = function (evt) { - //check if qws message - var message = evt.data; - if (message.indexOf(websocketMessagePrefix) != -1) { - var event_1 = this.getWebsocketCustomEvent(message); - if (event_1 != "") { - // it's a custom message - this.fireMessage(event_1, this.getCustomMessage(event_1, message)); - return; - } - } - // it's a native websocket message - this.fireNativeMessage(message); - }; - Ws.prototype.OnConnect = function (fn) { - if (this.isReady) { - fn(); - } - this.connectListeners.push(fn); - }; - Ws.prototype.fireConnect = function () { - for (var i = 0; i < this.connectListeners.length; i++) { - this.connectListeners[i](); - } - }; - Ws.prototype.OnDisconnect = function (fn) { - this.disconnectListeners.push(fn); - }; - Ws.prototype.fireDisconnect = function () { - for (var i = 0; i < this.disconnectListeners.length; i++) { - this.disconnectListeners[i](); - } - }; - Ws.prototype.OnMessage = function (cb) { - this.nativeMessageListeners.push(cb); - }; - Ws.prototype.fireNativeMessage = function (websocketMessage) { - for (var i = 0; i < this.nativeMessageListeners.length; i++) { - this.nativeMessageListeners[i](websocketMessage); - } - }; - Ws.prototype.On = function (event, cb) { - if (this.messageListeners[event] == null || this.messageListeners[event] == undefined) { - this.messageListeners[event] = []; - } - this.messageListeners[event].push(cb); - }; - Ws.prototype.fireMessage = function (event, message) { - for (var key in this.messageListeners) { - if (this.messageListeners.hasOwnProperty(key)) { - if (key == event) { - for (var i = 0; i < this.messageListeners[key].length; i++) { - this.messageListeners[key][i](message); - } - } - } - } - }; - // - // Ws Actions - Ws.prototype.Disconnect = function () { - this.conn.close(); - }; - // EmitMessage sends a native websocket message - Ws.prototype.EmitMessage = function (websocketMessage) { - this.conn.send(websocketMessage); - }; - // Emit sends an iris-custom websocket message - Ws.prototype.Emit = function (event, data) { - var messageStr = this.encodeMessage(event, data); - this.EmitMessage(messageStr); - }; - return Ws; -}()); \ No newline at end of file diff --git a/websocket2/client.js.go b/websocket2/client.js.go deleted file mode 100644 index 2144411a7..000000000 --- a/websocket2/client.js.go +++ /dev/null @@ -1,233 +0,0 @@ -package websocket - -import ( - "time" - - "github.com/kataras/iris/context" -) - -// ClientHandler is the handler which serves the javascript client-side -// library. It uses a small cache based on the iris/context.WriteWithExpiration. -func ClientHandler() context.Handler { - modNow := time.Now() - return func(ctx context.Context) { - ctx.ContentType("application/javascript") - if _, err := ctx.WriteWithExpiration(ClientSource, modNow); err != nil { - ctx.StatusCode(500) - ctx.StopExecution() - // ctx.Application().Logger().Infof("error while serving []byte via StaticContent: %s", err.Error()) - } - } -} - -// ClientSource the client-side javascript raw source code. -var ClientSource = []byte(`var websocketStringMessageType = 0; -var websocketIntMessageType = 1; -var websocketBoolMessageType = 2; -var websocketJSONMessageType = 4; -var websocketMessagePrefix = "` + DefaultEvtMessageKey + `"; -var websocketMessageSeparator = ";"; -var websocketMessagePrefixLen = websocketMessagePrefix.length; -var websocketMessageSeparatorLen = websocketMessageSeparator.length; -var websocketMessagePrefixAndSepIdx = websocketMessagePrefixLen + websocketMessageSeparatorLen - 1; -var websocketMessagePrefixIdx = websocketMessagePrefixLen - 1; -var websocketMessageSeparatorIdx = websocketMessageSeparatorLen - 1; -var Ws = (function () { - // - function Ws(endpoint, protocols) { - var _this = this; - // events listeners - this.connectListeners = []; - this.disconnectListeners = []; - this.nativeMessageListeners = []; - this.messageListeners = {}; - if (!window["WebSocket"]) { - return; - } - if (endpoint.indexOf("ws") == -1) { - endpoint = "ws://" + endpoint; - } - if (protocols != null && protocols.length > 0) { - this.conn = new WebSocket(endpoint, protocols); - } - else { - this.conn = new WebSocket(endpoint); - } - this.conn.onopen = (function (evt) { - _this.fireConnect(); - _this.isReady = true; - return null; - }); - this.conn.onclose = (function (evt) { - _this.fireDisconnect(); - return null; - }); - this.conn.onmessage = (function (evt) { - _this.messageReceivedFromConn(evt); - }); - } - //utils - Ws.prototype.isNumber = function (obj) { - return !isNaN(obj - 0) && obj !== null && obj !== "" && obj !== false; - }; - Ws.prototype.isString = function (obj) { - return Object.prototype.toString.call(obj) == "[object String]"; - }; - Ws.prototype.isBoolean = function (obj) { - return typeof obj === 'boolean' || - (typeof obj === 'object' && typeof obj.valueOf() === 'boolean'); - }; - Ws.prototype.isJSON = function (obj) { - return typeof obj === 'object'; - }; - // - // messages - Ws.prototype._msg = function (event, websocketMessageType, dataMessage) { - return websocketMessagePrefix + event + websocketMessageSeparator + String(websocketMessageType) + websocketMessageSeparator + dataMessage; - }; - Ws.prototype.encodeMessage = function (event, data) { - var m = ""; - var t = 0; - if (this.isNumber(data)) { - t = websocketIntMessageType; - m = data.toString(); - } - else if (this.isBoolean(data)) { - t = websocketBoolMessageType; - m = data.toString(); - } - else if (this.isString(data)) { - t = websocketStringMessageType; - m = data.toString(); - } - else if (this.isJSON(data)) { - //propably json-object - t = websocketJSONMessageType; - m = JSON.stringify(data); - } - else if (data !== null && typeof(data) !== "undefined" ) { - // if it has a second parameter but it's not a type we know, then fire this: - console.log("unsupported type of input argument passed, try to not include this argument to the 'Emit'"); - } - return this._msg(event, t, m); - }; - Ws.prototype.decodeMessage = function (event, websocketMessage) { - //iris-websocket-message;user;4;themarshaledstringfromajsonstruct - var skipLen = websocketMessagePrefixLen + websocketMessageSeparatorLen + event.length + 2; - if (websocketMessage.length < skipLen + 1) { - return null; - } - var websocketMessageType = parseInt(websocketMessage.charAt(skipLen - 2)); - var theMessage = websocketMessage.substring(skipLen, websocketMessage.length); - if (websocketMessageType == websocketIntMessageType) { - return parseInt(theMessage); - } - else if (websocketMessageType == websocketBoolMessageType) { - return Boolean(theMessage); - } - else if (websocketMessageType == websocketStringMessageType) { - return theMessage; - } - else if (websocketMessageType == websocketJSONMessageType) { - return JSON.parse(theMessage); - } - else { - return null; // invalid - } - }; - Ws.prototype.getWebsocketCustomEvent = function (websocketMessage) { - if (websocketMessage.length < websocketMessagePrefixAndSepIdx) { - return ""; - } - var s = websocketMessage.substring(websocketMessagePrefixAndSepIdx, websocketMessage.length); - var evt = s.substring(0, s.indexOf(websocketMessageSeparator)); - return evt; - }; - Ws.prototype.getCustomMessage = function (event, websocketMessage) { - var eventIdx = websocketMessage.indexOf(event + websocketMessageSeparator); - var s = websocketMessage.substring(eventIdx + event.length + websocketMessageSeparator.length + 2, websocketMessage.length); - return s; - }; - // - // Ws Events - // messageReceivedFromConn this is the func which decides - // if it's a native websocket message or a custom qws message - // if native message then calls the fireNativeMessage - // else calls the fireMessage - // - // remember iris gives you the freedom of native websocket messages if you don't want to use this client side at all. - Ws.prototype.messageReceivedFromConn = function (evt) { - //check if qws message - var message = evt.data; - if (message.indexOf(websocketMessagePrefix) != -1) { - var event_1 = this.getWebsocketCustomEvent(message); - if (event_1 != "") { - // it's a custom message - this.fireMessage(event_1, this.getCustomMessage(event_1, message)); - return; - } - } - // it's a native websocket message - this.fireNativeMessage(message); - }; - Ws.prototype.OnConnect = function (fn) { - if (this.isReady) { - fn(); - } - this.connectListeners.push(fn); - }; - Ws.prototype.fireConnect = function () { - for (var i = 0; i < this.connectListeners.length; i++) { - this.connectListeners[i](); - } - }; - Ws.prototype.OnDisconnect = function (fn) { - this.disconnectListeners.push(fn); - }; - Ws.prototype.fireDisconnect = function () { - for (var i = 0; i < this.disconnectListeners.length; i++) { - this.disconnectListeners[i](); - } - }; - Ws.prototype.OnMessage = function (cb) { - this.nativeMessageListeners.push(cb); - }; - Ws.prototype.fireNativeMessage = function (websocketMessage) { - for (var i = 0; i < this.nativeMessageListeners.length; i++) { - this.nativeMessageListeners[i](websocketMessage); - } - }; - Ws.prototype.On = function (event, cb) { - if (this.messageListeners[event] == null || this.messageListeners[event] == undefined) { - this.messageListeners[event] = []; - } - this.messageListeners[event].push(cb); - }; - Ws.prototype.fireMessage = function (event, message) { - for (var key in this.messageListeners) { - if (this.messageListeners.hasOwnProperty(key)) { - if (key == event) { - for (var i = 0; i < this.messageListeners[key].length; i++) { - this.messageListeners[key][i](message); - } - } - } - } - }; - // - // Ws Actions - Ws.prototype.Disconnect = function () { - this.conn.close(); - }; - // EmitMessage sends a native websocket message - Ws.prototype.EmitMessage = function (websocketMessage) { - this.conn.send(websocketMessage); - }; - // Emit sends an iris-custom websocket message - Ws.prototype.Emit = function (event, data) { - var messageStr = this.encodeMessage(event, data); - this.EmitMessage(messageStr); - }; - return Ws; -}()); -`) diff --git a/websocket2/client.min.js b/websocket2/client.min.js deleted file mode 100644 index 3d930f501..000000000 --- a/websocket2/client.min.js +++ /dev/null @@ -1 +0,0 @@ -var websocketStringMessageType=0,websocketIntMessageType=1,websocketBoolMessageType=2,websocketJSONMessageType=4,websocketMessagePrefix="iris-websocket-message:",websocketMessageSeparator=";",websocketMessagePrefixLen=websocketMessagePrefix.length,websocketMessageSeparatorLen=websocketMessageSeparator.length,websocketMessagePrefixAndSepIdx=websocketMessagePrefixLen+websocketMessageSeparatorLen-1,websocketMessagePrefixIdx=websocketMessagePrefixLen-1,websocketMessageSeparatorIdx=websocketMessageSeparatorLen-1,Ws=function(){function e(e,s){var t=this;this.connectListeners=[],this.disconnectListeners=[],this.nativeMessageListeners=[],this.messageListeners={},window.WebSocket&&(-1==e.indexOf("ws")&&(e="ws://"+e),null!=s&&0 void; -type onWebsocketDisconnectFunc = () => void; -type onWebsocketNativeMessageFunc = (websocketMessage: string) => void; -type onMessageFunc = (message: any) => void; - -class Ws { - private conn: WebSocket; - private isReady: boolean; - - // events listeners - - private connectListeners: onConnectFunc[] = []; - private disconnectListeners: onWebsocketDisconnectFunc[] = []; - private nativeMessageListeners: onWebsocketNativeMessageFunc[] = []; - private messageListeners: { [event: string]: onMessageFunc[] } = {}; - - // - - constructor(endpoint: string, protocols?: string[]) { - if (!window["WebSocket"]) { - return; - } - - if (endpoint.indexOf("ws") == -1) { - endpoint = "ws://" + endpoint; - } - if (protocols != null && protocols.length > 0) { - this.conn = new WebSocket(endpoint, protocols); - } else { - this.conn = new WebSocket(endpoint); - } - - this.conn.onopen = ((evt: Event): any => { - this.fireConnect(); - this.isReady = true; - return null; - }); - - this.conn.onclose = ((evt: Event): any => { - this.fireDisconnect(); - return null; - }); - - this.conn.onmessage = ((evt: MessageEvent) => { - this.messageReceivedFromConn(evt); - }); - } - - //utils - - private isNumber(obj: any): boolean { - return !isNaN(obj - 0) && obj !== null && obj !== "" && obj !== false; - } - - private isString(obj: any): boolean { - return Object.prototype.toString.call(obj) == "[object String]"; - } - - private isBoolean(obj: any): boolean { - return typeof obj === 'boolean' || - (typeof obj === 'object' && typeof obj.valueOf() === 'boolean'); - } - - private isJSON(obj: any): boolean { - return typeof obj === 'object'; - } - - // - - // messages - private _msg(event: string, websocketMessageType: number, dataMessage: string): string { - - return websocketMessagePrefix + event + websocketMessageSeparator + String(websocketMessageType) + websocketMessageSeparator + dataMessage; - } - - private encodeMessage(event: string, data: any): string { - let m = ""; - let t = 0; - if (this.isNumber(data)) { - t = websocketIntMessageType; - m = data.toString(); - } else if (this.isBoolean(data)) { - t = websocketBoolMessageType; - m = data.toString(); - } else if (this.isString(data)) { - t = websocketStringMessageType; - m = data.toString(); - } else if (this.isJSON(data)) { - //propably json-object - t = websocketJSONMessageType; - m = JSON.stringify(data); - } else if (data !== null && typeof (data) !== "undefined") { - // if it has a second parameter but it's not a type we know, then fire this: - console.log("unsupported type of input argument passed, try to not include this argument to the 'Emit'"); - } - - return this._msg(event, t, m); - } - - private decodeMessage(event: string, websocketMessage: string): T | any { - //iris-websocket-message;user;4;themarshaledstringfromajsonstruct - let skipLen = websocketMessagePrefixLen + websocketMessageSeparatorLen + event.length + 2; - if (websocketMessage.length < skipLen + 1) { - return null; - } - let websocketMessageType = parseInt(websocketMessage.charAt(skipLen - 2)); - let theMessage = websocketMessage.substring(skipLen, websocketMessage.length); - if (websocketMessageType == websocketIntMessageType) { - return parseInt(theMessage); - } else if (websocketMessageType == websocketBoolMessageType) { - return Boolean(theMessage); - } else if (websocketMessageType == websocketStringMessageType) { - return theMessage; - } else if (websocketMessageType == websocketJSONMessageType) { - return JSON.parse(theMessage); - } else { - return null; // invalid - } - } - - private getWebsocketCustomEvent(websocketMessage: string): string { - if (websocketMessage.length < websocketMessagePrefixAndSepIdx) { - return ""; - } - let s = websocketMessage.substring(websocketMessagePrefixAndSepIdx, websocketMessage.length); - let evt = s.substring(0, s.indexOf(websocketMessageSeparator)); - - return evt; - } - - private getCustomMessage(event: string, websocketMessage: string): string { - let eventIdx = websocketMessage.indexOf(event + websocketMessageSeparator); - let s = websocketMessage.substring(eventIdx + event.length + websocketMessageSeparator.length + 2, websocketMessage.length); - return s; - } - - // - - // Ws Events - - // messageReceivedFromConn this is the func which decides - // if it's a native websocket message or a custom qws message - // if native message then calls the fireNativeMessage - // else calls the fireMessage - // - // remember iris gives you the freedom of native websocket messages if you don't want to use this client side at all. - private messageReceivedFromConn(evt: MessageEvent): void { - //check if qws message - let message = evt.data; - if (message.indexOf(websocketMessagePrefix) != -1) { - let event = this.getWebsocketCustomEvent(message); - if (event != "") { - // it's a custom message - this.fireMessage(event, this.getCustomMessage(event, message)); - return; - } - } - - // it's a native websocket message - this.fireNativeMessage(message); - } - - OnConnect(fn: onConnectFunc): void { - if (this.isReady) { - fn(); - } - this.connectListeners.push(fn); - } - - fireConnect(): void { - for (let i = 0; i < this.connectListeners.length; i++) { - this.connectListeners[i](); - } - } - - OnDisconnect(fn: onWebsocketDisconnectFunc): void { - this.disconnectListeners.push(fn); - } - - fireDisconnect(): void { - for (let i = 0; i < this.disconnectListeners.length; i++) { - this.disconnectListeners[i](); - } - } - - OnMessage(cb: onWebsocketNativeMessageFunc): void { - this.nativeMessageListeners.push(cb); - } - - fireNativeMessage(websocketMessage: string): void { - for (let i = 0; i < this.nativeMessageListeners.length; i++) { - this.nativeMessageListeners[i](websocketMessage); - } - } - - On(event: string, cb: onMessageFunc): void { - if (this.messageListeners[event] == null || this.messageListeners[event] == undefined) { - this.messageListeners[event] = []; - } - this.messageListeners[event].push(cb); - } - - fireMessage(event: string, message: any): void { - for (let key in this.messageListeners) { - if (this.messageListeners.hasOwnProperty(key)) { - if (key == event) { - for (let i = 0; i < this.messageListeners[key].length; i++) { - this.messageListeners[key][i](message); - } - } - } - } - } - - - // - - // Ws Actions - - Disconnect(): void { - this.conn.close(); - } - - // EmitMessage sends a native websocket message - EmitMessage(websocketMessage: string): void { - this.conn.send(websocketMessage); - } - - // Emit sends an iris-custom websocket message - Emit(event: string, data: any): void { - let messageStr = this.encodeMessage(event, data); - this.EmitMessage(messageStr); - } - - // - -} - -// node-modules export {Ws}; diff --git a/websocket2/config.go b/websocket2/config.go deleted file mode 100644 index 6453230d7..000000000 --- a/websocket2/config.go +++ /dev/null @@ -1,185 +0,0 @@ -package websocket - -import ( - "math/rand" - "net/http" - "time" - - "github.com/kataras/iris/context" - - "github.com/iris-contrib/go.uuid" -) - -const ( - // DefaultWebsocketWriteTimeout 0, no timeout - DefaultWebsocketWriteTimeout = 0 - // DefaultWebsocketReadTimeout 0, no timeout - DefaultWebsocketReadTimeout = 0 - // DefaultWebsocketPingPeriod is 0 but - // could be 10 * time.Second. - DefaultWebsocketPingPeriod = 0 - // DefaultWebsocketReadBufferSize 0 - DefaultWebsocketReadBufferSize = 0 - // DefaultWebsocketWriterBufferSize 0 - DefaultWebsocketWriterBufferSize = 0 - // DefaultEvtMessageKey is the default prefix of the underline websocket events - // that are being established under the hoods. - // - // Defaults to "iris-websocket-message:". - // Last character of the prefix should be ':'. - DefaultEvtMessageKey = "iris-websocket-message:" -) - -var ( - // DefaultIDGenerator returns a random unique for a new connection. - // Used when config.IDGenerator is nil. - DefaultIDGenerator = func(context.Context) string { - id, err := uuid.NewV4() - if err != nil { - return randomString(64) - } - return id.String() - } -) - -// Config the websocket server configuration -// all of these are optional. -type Config struct { - // IDGenerator used to create (and later on, set) - // an ID for each incoming websocket connections (clients). - // The request is an input parameter which you can use to generate the ID (from headers for example). - // If empty then the ID is generated by DefaultIDGenerator: randomString(64) - IDGenerator func(ctx context.Context) string - // EvtMessagePrefix is the prefix of the underline websocket events that are being established under the hoods. - // This prefix is visible only to the javascript side (code) and it has nothing to do - // with the message that the end-user receives. - // Do not change it unless it is absolutely necessary. - // - // If empty then defaults to []byte("iris-websocket-message:"). - EvtMessagePrefix []byte - // Error is the function that will be fired if any client couldn't upgrade the HTTP connection - // to a websocket connection, a handshake error. - Error func(w http.ResponseWriter, r *http.Request, status int, reason error) - // CheckOrigin a function that is called right before the handshake, - // if returns false then that client is not allowed to connect with the websocket server. - CheckOrigin func(r *http.Request) bool - // HandshakeTimeout specifies the duration for the handshake to complete. - HandshakeTimeout time.Duration - // WriteTimeout time allowed to write a message to the connection. - // 0 means no timeout. - // Default value is 0 - WriteTimeout time.Duration - // ReadTimeout time allowed to read a message from the connection. - // 0 means no timeout. - // Default value is 0 - ReadTimeout time.Duration - // PingPeriod send ping messages to the connection repeatedly after this period. - // The value should be close to the ReadTimeout to avoid issues. - // Default value is 0. - PingPeriod time.Duration - // BinaryMessages set it to true in order to denotes binary data messages instead of utf-8 text - // compatible if you wanna use the Connection's EmitMessage to send a custom binary data to the client, like a native server-client communication. - // Default value is false - BinaryMessages bool - // ReadBufferSize and WriteBufferSize specify I/O buffer sizes. If a buffer - // size is zero, then buffers allocated by the HTTP server are used. The - // I/O buffer sizes do not limit the size of the messages that can be sent - // or received. - // - // Default value is 0. - ReadBufferSize, WriteBufferSize int - // EnableCompression specify if the server should attempt to negotiate per - // message compression (RFC 7692). Setting this value to true does not - // guarantee that compression will be supported. Currently only "no context - // takeover" modes are supported. - // - // Defaults to false and it should be remain as it is, unless special requirements. - EnableCompression bool - - // Subprotocols specifies the server's supported protocols in order of - // preference. If this field is set, then the Upgrade method negotiates a - // subprotocol by selecting the first match in this list with a protocol - // requested by the client. - Subprotocols []string -} - -// Validate validates the configuration -func (c Config) Validate() Config { - // 0 means no timeout. - if c.WriteTimeout < 0 { - c.WriteTimeout = DefaultWebsocketWriteTimeout - } - - if c.ReadTimeout < 0 { - c.ReadTimeout = DefaultWebsocketReadTimeout - } - - if c.PingPeriod <= 0 { - c.PingPeriod = DefaultWebsocketPingPeriod - } - - if c.ReadBufferSize <= 0 { - c.ReadBufferSize = DefaultWebsocketReadBufferSize - } - - if c.WriteBufferSize <= 0 { - c.WriteBufferSize = DefaultWebsocketWriterBufferSize - } - - if c.Error == nil { - c.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) { - //empty - } - } - - if c.CheckOrigin == nil { - c.CheckOrigin = func(r *http.Request) bool { - // allow all connections by default - return true - } - } - - if len(c.EvtMessagePrefix) == 0 { - c.EvtMessagePrefix = []byte(DefaultEvtMessageKey) - } - - if c.IDGenerator == nil { - c.IDGenerator = DefaultIDGenerator - } - - return c -} - -const ( - letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - letterIdxBits = 6 // 6 bits to represent a letter index - letterIdxMask = 1<= 0; { - if remain == 0 { - cache, remain = src.Int63(), letterIdxMax - } - if idx := int(cache & letterIdxMask); idx < len(letterBytes) { - b[i] = letterBytes[idx] - i-- - } - cache >>= letterIdxBits - remain-- - } - - return b -} - -// randomString accepts a number(10 for example) and returns a random string using simple but fairly safe random algorithm -func randomString(n int) string { - return string(random(n)) -} diff --git a/websocket2/connection.go b/websocket2/connection.go deleted file mode 100644 index 2547cf5a0..000000000 --- a/websocket2/connection.go +++ /dev/null @@ -1,936 +0,0 @@ -package websocket - -import ( - "bytes" - stdContext "context" - "errors" - "io" - "io/ioutil" - "net" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/kataras/iris/context" - - "github.com/gobwas/ws" - "github.com/gobwas/ws/wsutil" -) - -// Operation codes defined by specification. -// See https://tools.ietf.org/html/rfc6455#section-5.2 -const ( - // TextMessage denotes a text data message. The text message payload is - // interpreted as UTF-8 encoded text data. - TextMessage ws.OpCode = ws.OpText - // BinaryMessage denotes a binary data message. - BinaryMessage ws.OpCode = ws.OpBinary - // CloseMessage denotes a close control message. - CloseMessage ws.OpCode = ws.OpClose - - // PingMessage denotes a ping control message. The optional message payload - // is UTF-8 encoded text. - PingMessage ws.OpCode = ws.OpPing - // PongMessage denotes a ping control message. The optional message payload - // is UTF-8 encoded text. - PongMessage ws.OpCode = ws.OpPong -) - -type ( - connectionValue struct { - key []byte - value interface{} - } - // ConnectionValues is the temporary connection's memory store - ConnectionValues []connectionValue -) - -// Set sets a value based on the key -func (r *ConnectionValues) Set(key string, value interface{}) { - args := *r - n := len(args) - for i := 0; i < n; i++ { - kv := &args[i] - if string(kv.key) == key { - kv.value = value - return - } - } - - c := cap(args) - if c > n { - args = args[:n+1] - kv := &args[n] - kv.key = append(kv.key[:0], key...) - kv.value = value - *r = args - return - } - - kv := connectionValue{} - kv.key = append(kv.key[:0], key...) - kv.value = value - *r = append(args, kv) -} - -// Get returns a value based on its key -func (r *ConnectionValues) Get(key string) interface{} { - args := *r - n := len(args) - for i := 0; i < n; i++ { - kv := &args[i] - if string(kv.key) == key { - return kv.value - } - } - return nil -} - -// Reset clears the values -func (r *ConnectionValues) Reset() { - *r = (*r)[:0] -} - -// UnderlineConnection is the underline connection, nothing to think about, -// it's used internally mostly but can be used for extreme cases with other libraries. -type UnderlineConnection interface { - // SetWriteDeadline sets the write deadline on the underlying network - // connection. After a write has timed out, the websocket state is corrupt and - // all future writes will return an error. A zero value for t means writes will - // not time out. - SetWriteDeadline(t time.Time) error - // SetReadDeadline sets the read deadline on the underlying network connection. - // After a read has timed out, the websocket connection state is corrupt and - // all future reads will return an error. A zero value for t means reads will - // not time out. - SetReadDeadline(t time.Time) error - // SetReadLimit sets the maximum size for a message read from the peer. If a - // message exceeds the limit, the connection sends a close frame to the peer - // and returns ErrReadLimit to the application. - SetReadLimit(limit int64) - // SetPongHandler sets the handler for pong messages received from the peer. - // The appData argument to h is the PONG frame application data. The default - // pong handler does nothing. - SetPongHandler(h func(appData string) error) - // SetPingHandler sets the handler for ping messages received from the peer. - // The appData argument to h is the PING frame application data. The default - // ping handler sends a pong to the peer. - SetPingHandler(h func(appData string) error) - // WriteControl writes a control message with the given deadline. The allowed - // message types are CloseMessage, PingMessage and PongMessage. - WriteControl(messageType int, data []byte, deadline time.Time) error - // WriteMessage is a helper method for getting a writer using NextWriter, - // writing the message and closing the writer. - WriteMessage(messageType int, data []byte) error - // ReadMessage is a helper method for getting a reader using NextReader and - // reading from that reader to a buffer. - ReadMessage() (messageType int, p []byte, err error) - // NextWriter returns a writer for the next message to send. The writer's Close - // method flushes the complete message to the network. - // - // There can be at most one open writer on a connection. NextWriter closes the - // previous writer if the application has not already done so. - NextWriter(messageType int) (io.WriteCloser, error) - // Close closes the underlying network connection without sending or waiting for a close frame. - Close() error -} - -// ------------------------------------------------------------------------------------- -// ------------------------------------------------------------------------------------- -// -------------------------------Connection implementation----------------------------- -// ------------------------------------------------------------------------------------- -// ------------------------------------------------------------------------------------- - -type ( - // DisconnectFunc is the callback which is fired when a client/connection closed - DisconnectFunc func() - // LeaveRoomFunc is the callback which is fired when a client/connection leaves from any room. - // This is called automatically when client/connection disconnected - // (because websocket server automatically leaves from all joined rooms) - LeaveRoomFunc func(roomName string) - // ErrorFunc is the callback which fires whenever an error occurs - ErrorFunc (func(error)) - // NativeMessageFunc is the callback for native websocket messages, receives one []byte parameter which is the raw client's message - NativeMessageFunc func([]byte) - // MessageFunc is the second argument to the Emitter's Emit functions. - // A callback which should receives one parameter of type string, int, bool or any valid JSON/Go struct - MessageFunc interface{} - // PingFunc is the callback which fires each ping - PingFunc func() - // PongFunc is the callback which fires on pong message received - PongFunc func() - // Connection is the front-end API that you will use to communicate with the client side, - // it is the server-side connection. - Connection interface { - ClientConnection - // Err is not nil if the upgrader failed to upgrade http to websocket connection. - Err() error - // ID returns the connection's identifier - ID() string - // Server returns the websocket server instance - // which this connection is listening to. - // - // Its connection-relative operations are safe for use. - Server() *Server - // Context returns the (upgraded) context.Context of this connection - // avoid using it, you normally don't need it, - // websocket has everything you need to authenticate the user BUT if it's necessary - // then you use it to receive user information, for example: from headers - Context() context.Context - // To defines on what "room" (see Join) the server should send a message - // returns an Emmiter(`EmitMessage` & `Emit`) to send messages. - To(string) Emitter - // Join registers this connection to a room, if it doesn't exist then it creates a new. One room can have one or more connections. One connection can be joined to many rooms. All connections are joined to a room specified by their `ID` automatically. - Join(string) - // IsJoined returns true when this connection is joined to the room, otherwise false. - // It Takes the room name as its input parameter. - IsJoined(roomName string) bool - // Leave removes this connection entry from a room - // Returns true if the connection has actually left from the particular room. - Leave(string) bool - // OnLeave registers a callback which fires when this connection left from any joined room. - // This callback is called automatically on Disconnected client, because websocket server automatically - // deletes the disconnected connection from any joined rooms. - // - // Note: the callback(s) called right before the server deletes the connection from the room - // so the connection theoretical can still send messages to its room right before it is being disconnected. - OnLeave(roomLeaveCb LeaveRoomFunc) - - // SetValue sets a key-value pair on the connection's mem store. - SetValue(key string, value interface{}) - // GetValue gets a value by its key from the connection's mem store. - GetValue(key string) interface{} - // GetValueArrString gets a value as []string by its key from the connection's mem store. - GetValueArrString(key string) []string - // GetValueString gets a value as string by its key from the connection's mem store. - GetValueString(key string) string - // GetValueInt gets a value as integer by its key from the connection's mem store. - GetValueInt(key string) int - } - - // ClientConnection is the client-side connection interface. Server shares some of its methods but the underline actions differs. - ClientConnection interface { - Emitter - // Write writes a raw websocket message with a specific type to the client - // used by ping messages and any CloseMessage types. - Write(websocketMessageType ws.OpCode, data []byte) error - // OnMessage registers a callback which fires when native websocket message received - OnMessage(NativeMessageFunc) - // On registers a callback to a particular event which is fired when a message to this event is received - On(string, MessageFunc) - // OnError registers a callback which fires when this connection occurs an error - OnError(ErrorFunc) - // OnPing registers a callback which fires on each ping - OnPing(PingFunc) - // OnPong registers a callback which fires on pong message received - OnPong(PongFunc) - // FireOnError can be used to send a custom error message to the connection - // - // It does nothing more than firing the OnError listeners. It doesn't send anything to the client. - FireOnError(err error) - // OnDisconnect registers a callback which is fired when this connection is closed by an error or manual - OnDisconnect(DisconnectFunc) - // Disconnect disconnects the client, close the underline websocket conn and removes it from the conn list - // returns the error, if any, from the underline connection - Disconnect() error - // Wait starts the pinger and the messages reader, - // it's named as "Wait" because it should be called LAST, - // after the "On" events IF server's `Upgrade` is used, - // otherise you don't have to call it because the `Handler()` does it automatically. - Wait() error - } - - connection struct { - err error - underline net.Conn - config ConnectionConfig - defaultMessageType ws.OpCode - serializer *messageSerializer - id string - - onErrorListeners []ErrorFunc - onPingListeners []PingFunc - onPongListeners []PongFunc - onNativeMessageListeners []NativeMessageFunc - onEventListeners map[string][]MessageFunc - onRoomLeaveListeners []LeaveRoomFunc - onDisconnectListeners []DisconnectFunc - disconnected uint32 - - started bool - // these were maden for performance only - self Emitter // pre-defined emitter than sends message to its self client - broadcast Emitter // pre-defined emitter that sends message to all except this - all Emitter // pre-defined emitter which sends message to all clients - - // access to the Context, use with caution, you can't use response writer as you imagine. - ctx context.Context - values ConnectionValues - server *Server - - writer *wsutil.Writer - - // #119 , websocket writers are not protected by locks inside the gorilla's websocket code - // so we must protect them otherwise we're getting concurrent connection error on multi writers in the same time. - writerMu sync.Mutex - // same exists for reader look here: https://godoc.org/github.com/gorilla/websocket#hdr-Control_Messages - // but we only use one reader in one goroutine, so we are safe. - // readerMu sync.Mutex - } -) - -var _ Connection = &connection{} - -// WrapConnection wraps the underline websocket connection into a new iris websocket connection. -// The caller should call the `connection#Wait` (which blocks) to enable its read and write functionality. -func WrapConnection(conn net.Conn, cfg ConnectionConfig) Connection { - return newConnection(conn, cfg) -} - -func newConnection(conn net.Conn, cfg ConnectionConfig) *connection { - cfg = cfg.Validate() - c := &connection{ - underline: conn, - config: cfg, - serializer: newMessageSerializer(cfg.EvtMessagePrefix), - defaultMessageType: TextMessage, - onErrorListeners: make([]ErrorFunc, 0), - onPingListeners: make([]PingFunc, 0), - onPongListeners: make([]PongFunc, 0), - onNativeMessageListeners: make([]NativeMessageFunc, 0), - onEventListeners: make(map[string][]MessageFunc, 0), - onDisconnectListeners: make([]DisconnectFunc, 0), - disconnected: 0, - } - - if cfg.BinaryMessages { - c.defaultMessageType = BinaryMessage - } - - // c.writer = wsutil.NewWriter(conn, c.getState(), c.defaultMessageType) - - return c -} - -func newServerConnection(ctx context.Context, s *Server, conn net.Conn, id string) *connection { - c := newConnection(conn, ConnectionConfig{ - EvtMessagePrefix: s.config.EvtMessagePrefix, - WriteTimeout: s.config.WriteTimeout, - ReadTimeout: s.config.ReadTimeout, - PingPeriod: s.config.PingPeriod, - BinaryMessages: s.config.BinaryMessages, - ReadBufferSize: s.config.ReadBufferSize, - WriteBufferSize: s.config.WriteBufferSize, - EnableCompression: s.config.EnableCompression, - }) - - c.id = id - c.server = s - c.ctx = ctx - c.onRoomLeaveListeners = make([]LeaveRoomFunc, 0) - c.started = false - - c.self = newEmitter(c, c.id) - c.broadcast = newEmitter(c, Broadcast) - c.all = newEmitter(c, All) - - return c -} - -// Err is not nil if the upgrader failed to upgrade http to websocket connection. -func (c *connection) Err() error { - return c.err -} - -// IsClient returns true if that connection is from client. -func (c *connection) getState() ws.State { - if c.server != nil { - // server-side. - return ws.StateServerSide - } - - // else return client-side. - return ws.StateClientSide -} - -// Write writes a raw websocket message with a specific type to the client -// used by ping messages and any CloseMessage types. -func (c *connection) Write(websocketMessageType ws.OpCode, data []byte) (err error) { - // for any-case the app tries to write from different goroutines, - // we must protect them because they're reporting that as bug... - c.writerMu.Lock() - defer c.writerMu.Unlock() - if writeTimeout := c.config.WriteTimeout; writeTimeout > 0 { - // set the write deadline based on the configuration - c.underline.SetWriteDeadline(time.Now().Add(writeTimeout)) - } - - // 2. - // if websocketMessageType != c.defaultMessageType { - // err = wsutil.WriteMessage(c.underline, c.getState(), websocketMessageType, data) - // } else { - // _, err = c.writer.Write(data) - // c.writer.Flush() - // } - - err = wsutil.WriteMessage(c.underline, c.getState(), websocketMessageType, data) - - if err != nil { - // if failed then the connection is off, fire the disconnect - c.Disconnect() - } - return err -} - -// writeDefault is the same as write but the message type is the configured by c.messageType -// if BinaryMessages is enabled then it's raw []byte as you expected to work with protobufs -func (c *connection) writeDefault(data []byte) error { - return c.Write(c.defaultMessageType, data) -} - -func (c *connection) startPinger() { - if c.config.PingPeriod > 0 { - go func() { - for { - time.Sleep(c.config.PingPeriod) - if c == nil || atomic.LoadUint32(&c.disconnected) > 0 { - // verifies if already disconected. - return - } - - // try to ping the client, if failed then it disconnects. - err := c.Write(PingMessage, []byte{}) - if err != nil && !c.isErrClosed(err) { - c.FireOnError(err) - // must stop to exit the loop and exit from the routine. - return - } - - //fire all OnPing methods - c.fireOnPing() - - } - }() - } -} - -func (c *connection) fireOnPing() { - // fire the onPingListeners - for i := range c.onPingListeners { - c.onPingListeners[i]() - } -} - -func (c *connection) fireOnPong() { - // fire the onPongListeners - for i := range c.onPongListeners { - c.onPongListeners[i]() - } -} - -func (c *connection) isErrClosed(err error) bool { - if err == nil { - return false - } - - _, is := err.(wsutil.ClosedError) - if is { - return true - } - - if opErr, is := err.(*net.OpError); is { - if opErr.Err == io.EOF { - return false - } - - if atomic.LoadUint32(&c.disconnected) == 0 { - c.Disconnect() - } - - return true - } - - return err != io.EOF -} - -func (c *connection) startReader() error { - defer c.Disconnect() - - hasReadTimeout := c.config.ReadTimeout > 0 - - controlHandler := wsutil.ControlFrameHandler(c.underline, c.getState()) - rd := wsutil.Reader{ - Source: c.underline, - State: c.getState(), - CheckUTF8: false, - SkipHeaderCheck: false, - OnIntermediate: controlHandler, - } - - for { - if hasReadTimeout { - // set the read deadline based on the configuration - c.underline.SetReadDeadline(time.Now().Add(c.config.ReadTimeout)) - } - - hdr, err := rd.NextFrame() - if err != nil { - return err - } - if hdr.OpCode.IsControl() { - if err := controlHandler(hdr, &rd); err != nil { - return err - } - continue - } - - if hdr.OpCode&TextMessage == 0 && hdr.OpCode&BinaryMessage == 0 { - if err := rd.Discard(); err != nil { - return err - } - continue - } - - data, err := ioutil.ReadAll(&rd) - if err != nil { - return err - } - - c.messageReceived(data) - - // 4. - // var buf bytes.Buffer - // data, code, err := wsutil.ReadData(struct { - // io.Reader - // io.Writer - // }{c.underline, &buf}, c.getState()) - // if err != nil { - // if _, closed := err.(*net.OpError); closed && code == 0 { - // c.Disconnect() - // return - // } else if _, closed = err.(wsutil.ClosedError); closed { - // c.Disconnect() - // return - // // > 1200 conns but I don't know why yet: - // } else if err == ws.ErrProtocolOpCodeReserved || err == ws.ErrProtocolNonZeroRsv { - // c.Disconnect() - // return - // } else if err == io.EOF || err == io.ErrUnexpectedEOF { - // c.Disconnect() - // return - // } - - // c.FireOnError(err) - // } - - // c.messageReceived(data) - - // 2. - // header, err := reader.NextFrame() - // if err != nil { - // println("next frame err: " + err.Error()) - // return - // } - - // if header.OpCode == ws.OpClose { // io.EOF. - // return - // } - // payload := make([]byte, header.Length) - // _, err = io.ReadFull(reader, payload) - // if err != nil { - // return - // } - - // if header.Masked { - // ws.Cipher(payload, header.Mask, 0) - // } - - // c.messageReceived(payload) - - // data, code, err := wsutil.ReadData(c.underline, c.getState()) - // // if code == CloseMessage || c.isErrClosed(err) { - // // c.Disconnect() - // // return - // // } - - // if err != nil { - // if _, closed := err.(*net.OpError); closed && code == 0 { - // c.Disconnect() - // return - // } else if _, closed = err.(wsutil.ClosedError); closed { - // c.Disconnect() - // return - // // > 1200 conns but I don't know why yet: - // } else if err == ws.ErrProtocolOpCodeReserved || err == ws.ErrProtocolNonZeroRsv { - // c.Disconnect() - // return - // } else if err == io.EOF || err == io.ErrUnexpectedEOF { - // c.Disconnect() - // return - // } - - // c.FireOnError(err) - // } - - // c.messageReceived(data) - } -} - -// messageReceived checks the incoming message and fire the nativeMessage listeners or the event listeners (ws custom message) -func (c *connection) messageReceived(data []byte) { - - if bytes.HasPrefix(data, c.config.EvtMessagePrefix) { - //it's a custom ws message - receivedEvt := c.serializer.getWebsocketCustomEvent(data) - listeners, ok := c.onEventListeners[string(receivedEvt)] - if !ok || len(listeners) == 0 { - return // if not listeners for this event exit from here - } - - customMessage, err := c.serializer.deserialize(receivedEvt, data) - if customMessage == nil || err != nil { - return - } - - for i := range listeners { - if fn, ok := listeners[i].(func()); ok { // its a simple func(){} callback - fn() - } else if fnString, ok := listeners[i].(func(string)); ok { - - if msgString, is := customMessage.(string); is { - fnString(msgString) - } else if msgInt, is := customMessage.(int); is { - // here if server side waiting for string but client side sent an int, just convert this int to a string - fnString(strconv.Itoa(msgInt)) - } - - } else if fnInt, ok := listeners[i].(func(int)); ok { - fnInt(customMessage.(int)) - } else if fnBool, ok := listeners[i].(func(bool)); ok { - fnBool(customMessage.(bool)) - } else if fnBytes, ok := listeners[i].(func([]byte)); ok { - fnBytes(customMessage.([]byte)) - } else { - listeners[i].(func(interface{}))(customMessage) - } - - } - } else { - // it's native websocket message - for i := range c.onNativeMessageListeners { - c.onNativeMessageListeners[i](data) - } - } - -} - -func (c *connection) ID() string { - return c.id -} - -func (c *connection) Server() *Server { - return c.server -} - -func (c *connection) Context() context.Context { - return c.ctx -} - -func (c *connection) Values() ConnectionValues { - return c.values -} - -func (c *connection) fireDisconnect() { - for i := range c.onDisconnectListeners { - c.onDisconnectListeners[i]() - } -} - -func (c *connection) OnDisconnect(cb DisconnectFunc) { - c.onDisconnectListeners = append(c.onDisconnectListeners, cb) -} - -func (c *connection) OnError(cb ErrorFunc) { - c.onErrorListeners = append(c.onErrorListeners, cb) -} - -func (c *connection) OnPing(cb PingFunc) { - c.onPingListeners = append(c.onPingListeners, cb) -} - -func (c *connection) OnPong(cb PongFunc) { - c.onPongListeners = append(c.onPongListeners, cb) -} - -func (c *connection) FireOnError(err error) { - for _, cb := range c.onErrorListeners { - cb(err) - } -} - -func (c *connection) To(to string) Emitter { - if to == Broadcast { // if send to all except me, then return the pre-defined emitter, and so on - return c.broadcast - } else if to == All { - return c.all - } else if to == c.id { - return c.self - } - - // is an emitter to another client/connection - return newEmitter(c, to) -} - -func (c *connection) EmitMessage(nativeMessage []byte) error { - if c.server != nil { - return c.self.EmitMessage(nativeMessage) - } - return c.writeDefault(nativeMessage) -} - -func (c *connection) Emit(event string, message interface{}) error { - if c.server != nil { - return c.self.Emit(event, message) - } - - b, err := c.serializer.serialize(event, message) - if err != nil { - return err - } - - return c.EmitMessage(b) -} - -func (c *connection) OnMessage(cb NativeMessageFunc) { - c.onNativeMessageListeners = append(c.onNativeMessageListeners, cb) -} - -func (c *connection) On(event string, cb MessageFunc) { - if c.onEventListeners[event] == nil { - c.onEventListeners[event] = make([]MessageFunc, 0) - } - - c.onEventListeners[event] = append(c.onEventListeners[event], cb) -} - -func (c *connection) Join(roomName string) { - c.server.Join(roomName, c.id) -} - -func (c *connection) IsJoined(roomName string) bool { - return c.server.IsJoined(roomName, c.id) -} - -func (c *connection) Leave(roomName string) bool { - return c.server.Leave(roomName, c.id) -} - -func (c *connection) OnLeave(roomLeaveCb LeaveRoomFunc) { - c.onRoomLeaveListeners = append(c.onRoomLeaveListeners, roomLeaveCb) - // note: the callbacks are called from the server on the '.leave' and '.LeaveAll' funcs. -} - -func (c *connection) fireOnLeave(roomName string) { - // check if connection is already closed - if c == nil { - return - } - // fire the onRoomLeaveListeners - for i := range c.onRoomLeaveListeners { - c.onRoomLeaveListeners[i](roomName) - } -} - -// Wait starts the pinger and the messages reader, -// it's named as "Wait" because it should be called LAST, -// after the "On" events IF server's `Upgrade` is used, -// otherise you don't have to call it because the `Handler()` does it automatically. -func (c *connection) Wait() error { - if c.started { - return nil - } - c.started = true - // start the ping - c.startPinger() - - // start the messages reader - return c.startReader() -} - -// ErrAlreadyDisconnected can be reported on the `Connection#Disconnect` function whenever the caller tries to close the -// connection when it is already closed by the client or the caller previously. -var ErrAlreadyDisconnected = errors.New("already disconnected") - -func (c *connection) Disconnect() error { - if c == nil || !atomic.CompareAndSwapUint32(&c.disconnected, 0, 1) { - return ErrAlreadyDisconnected - } - - if c.server != nil { - return c.server.Disconnect(c.ID()) - } - - err := c.Write(CloseMessage, nil) - - if err == nil { - c.fireDisconnect() - } - - c.underline.Close() - - return err -} - -// mem per-conn store - -func (c *connection) SetValue(key string, value interface{}) { - c.values.Set(key, value) -} - -func (c *connection) GetValue(key string) interface{} { - return c.values.Get(key) -} - -func (c *connection) GetValueArrString(key string) []string { - if v := c.values.Get(key); v != nil { - if arrString, ok := v.([]string); ok { - return arrString - } - } - return nil -} - -func (c *connection) GetValueString(key string) string { - if v := c.values.Get(key); v != nil { - if s, ok := v.(string); ok { - return s - } - } - return "" -} - -func (c *connection) GetValueInt(key string) int { - if v := c.values.Get(key); v != nil { - if i, ok := v.(int); ok { - return i - } else if s, ok := v.(string); ok { - if iv, err := strconv.Atoi(s); err == nil { - return iv - } - } - } - return 0 -} - -// ConnectionConfig is the base configuration for both server and client connections. -// Clients must use `ConnectionConfig` in order to `Dial`, server's connection configuration is set by the `Config` structure. -type ConnectionConfig struct { - // EvtMessagePrefix is the prefix of the underline websocket events that are being established under the hoods. - // This prefix is visible only to the javascript side (code) and it has nothing to do - // with the message that the end-user receives. - // Do not change it unless it is absolutely necessary. - // - // If empty then defaults to []byte("iris-websocket-message:"). - // Should match with the server's EvtMessagePrefix. - EvtMessagePrefix []byte - // WriteTimeout time allowed to write a message to the connection. - // 0 means no timeout. - // Default value is 0 - WriteTimeout time.Duration - // ReadTimeout time allowed to read a message from the connection. - // 0 means no timeout. - // Default value is 0 - ReadTimeout time.Duration - // PingPeriod send ping messages to the connection repeatedly after this period. - // The value should be close to the ReadTimeout to avoid issues. - // Default value is 0 - PingPeriod time.Duration - // BinaryMessages set it to true in order to denotes binary data messages instead of utf-8 text - // compatible if you wanna use the Connection's EmitMessage to send a custom binary data to the client, like a native server-client communication. - // Default value is false - BinaryMessages bool - // ReadBufferSize is the buffer size for the connection reader. - // Default value is 4096 - ReadBufferSize int - // WriteBufferSize is the buffer size for the connection writer. - // Default value is 4096 - WriteBufferSize int - // EnableCompression specify if the server should attempt to negotiate per - // message compression (RFC 7692). Setting this value to true does not - // guarantee that compression will be supported. Currently only "no context - // takeover" modes are supported. - // - // Defaults to false and it should be remain as it is, unless special requirements. - EnableCompression bool -} - -// Validate validates the connection configuration. -func (c ConnectionConfig) Validate() ConnectionConfig { - if len(c.EvtMessagePrefix) == 0 { - c.EvtMessagePrefix = []byte(DefaultEvtMessageKey) - } - - // 0 means no timeout. - if c.WriteTimeout < 0 { - c.WriteTimeout = DefaultWebsocketWriteTimeout - } - - if c.ReadTimeout < 0 { - c.ReadTimeout = DefaultWebsocketReadTimeout - } - - if c.PingPeriod <= 0 { - c.PingPeriod = DefaultWebsocketPingPeriod - } - - if c.ReadBufferSize <= 0 { - c.ReadBufferSize = DefaultWebsocketReadBufferSize - } - - if c.WriteBufferSize <= 0 { - c.WriteBufferSize = DefaultWebsocketWriterBufferSize - } - - return c -} - -// ErrBadHandshake is returned when the server response to opening handshake is -// invalid. -var ErrBadHandshake = ws.ErrHandshakeBadConnection - -// Dial creates a new client connection. -// -// The context will be used in the request and in the Dialer. -// -// If the WebSocket handshake fails, `ErrHandshakeBadConnection` is returned. -// -// The "url" input parameter is the url to connect to the server, it should be -// the ws:// (or wss:// if secure) + the host + the endpoint of the -// open socket of the server, i.e ws://localhost:8080/my_websocket_endpoint. -// -// Custom dialers can be used by wrapping the iris websocket connection via `websocket.WrapConnection`. -func Dial(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { - return dial(ctx, url, cfg) -} - -func dial(ctx stdContext.Context, url string, cfg ConnectionConfig) (ClientConnection, error) { - if ctx == nil { - ctx = stdContext.Background() - } - - if !strings.HasPrefix(url, "ws://") && !strings.HasPrefix(url, "wss://") { - url = "ws://" + url - } - - conn, _, _, err := ws.DefaultDialer.Dial(ctx, url) - if err != nil { - return nil, err - } - - clientConn := WrapConnection(conn, cfg) - go clientConn.Wait() - - return clientConn, nil -} diff --git a/websocket2/emitter.go b/websocket2/emitter.go deleted file mode 100644 index 84d1fa485..000000000 --- a/websocket2/emitter.go +++ /dev/null @@ -1,43 +0,0 @@ -package websocket - -const ( - // All is the string which the Emitter use to send a message to all. - All = "" - // Broadcast is the string which the Emitter use to send a message to all except this connection. - Broadcast = ";to;all;except;me;" -) - -type ( - // Emitter is the message/or/event manager - Emitter interface { - // EmitMessage sends a native websocket message - EmitMessage([]byte) error - // Emit sends a message on a particular event - Emit(string, interface{}) error - } - - emitter struct { - conn *connection - to string - } -) - -var _ Emitter = &emitter{} - -func newEmitter(c *connection, to string) *emitter { - return &emitter{conn: c, to: to} -} - -func (e *emitter) EmitMessage(nativeMessage []byte) error { - e.conn.server.emitMessage(e.conn.id, e.to, nativeMessage) - return nil -} - -func (e *emitter) Emit(event string, data interface{}) error { - message, err := e.conn.serializer.serialize(event, data) - if err != nil { - return err - } - e.EmitMessage(message) - return nil -} diff --git a/websocket2/message.go b/websocket2/message.go deleted file mode 100644 index 6b27fbeec..000000000 --- a/websocket2/message.go +++ /dev/null @@ -1,182 +0,0 @@ -package websocket - -import ( - "bytes" - "encoding/binary" - "encoding/json" - "strconv" - - "github.com/kataras/iris/core/errors" - "github.com/valyala/bytebufferpool" -) - -type ( - messageType uint8 -) - -func (m messageType) String() string { - return strconv.Itoa(int(m)) -} - -func (m messageType) Name() string { - switch m { - case messageTypeString: - return "string" - case messageTypeInt: - return "int" - case messageTypeBool: - return "bool" - case messageTypeBytes: - return "[]byte" - case messageTypeJSON: - return "json" - default: - return "Invalid(" + m.String() + ")" - } -} - -// The same values are exists on client side too. -const ( - messageTypeString messageType = iota - messageTypeInt - messageTypeBool - messageTypeBytes - messageTypeJSON -) - -const ( - messageSeparator = ";" -) - -var messageSeparatorByte = messageSeparator[0] - -type messageSerializer struct { - prefix []byte - - prefixLen int - separatorLen int - prefixAndSepIdx int - prefixIdx int - separatorIdx int - - buf *bytebufferpool.Pool -} - -func newMessageSerializer(messagePrefix []byte) *messageSerializer { - return &messageSerializer{ - prefix: messagePrefix, - prefixLen: len(messagePrefix), - separatorLen: len(messageSeparator), - prefixAndSepIdx: len(messagePrefix) + len(messageSeparator) - 1, - prefixIdx: len(messagePrefix) - 1, - separatorIdx: len(messageSeparator) - 1, - - buf: new(bytebufferpool.Pool), - } -} - -var ( - boolTrueB = []byte("true") - boolFalseB = []byte("false") -) - -// websocketMessageSerialize serializes a custom websocket message from websocketServer to be delivered to the client -// returns the string form of the message -// Supported data types are: string, int, bool, bytes and JSON. -func (ms *messageSerializer) serialize(event string, data interface{}) ([]byte, error) { - b := ms.buf.Get() - b.Write(ms.prefix) - b.WriteString(event) - b.WriteByte(messageSeparatorByte) - - switch v := data.(type) { - case string: - b.WriteString(messageTypeString.String()) - b.WriteByte(messageSeparatorByte) - b.WriteString(v) - case int: - b.WriteString(messageTypeInt.String()) - b.WriteByte(messageSeparatorByte) - binary.Write(b, binary.LittleEndian, v) - case bool: - b.WriteString(messageTypeBool.String()) - b.WriteByte(messageSeparatorByte) - if v { - b.Write(boolTrueB) - } else { - b.Write(boolFalseB) - } - case []byte: - b.WriteString(messageTypeBytes.String()) - b.WriteByte(messageSeparatorByte) - b.Write(v) - default: - //we suppose is json - res, err := json.Marshal(data) - if err != nil { - ms.buf.Put(b) - return nil, err - } - b.WriteString(messageTypeJSON.String()) - b.WriteByte(messageSeparatorByte) - b.Write(res) - } - - message := b.Bytes() - ms.buf.Put(b) - - return message, nil -} - -var errInvalidTypeMessage = errors.New("Type %s is invalid for message: %s") - -// deserialize deserializes a custom websocket message from the client -// ex: iris-websocket-message;chat;4;themarshaledstringfromajsonstruct will return 'hello' as string -// Supported data types are: string, int, bool, bytes and JSON. -func (ms *messageSerializer) deserialize(event []byte, websocketMessage []byte) (interface{}, error) { - dataStartIdx := ms.prefixAndSepIdx + len(event) + 3 - if len(websocketMessage) <= dataStartIdx { - return nil, errors.New("websocket invalid message: " + string(websocketMessage)) - } - - typ, err := strconv.Atoi(string(websocketMessage[ms.prefixAndSepIdx+len(event)+1 : ms.prefixAndSepIdx+len(event)+2])) // in order to iris-websocket-message;user;-> 4 - if err != nil { - return nil, err - } - - data := websocketMessage[dataStartIdx:] // in order to iris-websocket-message;user;4; -> themarshaledstringfromajsonstruct - - switch messageType(typ) { - case messageTypeString: - return string(data), nil - case messageTypeInt: - msg, err := strconv.Atoi(string(data)) - if err != nil { - return nil, err - } - return msg, nil - case messageTypeBool: - if bytes.Equal(data, boolTrueB) { - return true, nil - } - return false, nil - case messageTypeBytes: - return data, nil - case messageTypeJSON: - var msg interface{} - err := json.Unmarshal(data, &msg) - return msg, err - default: - return nil, errInvalidTypeMessage.Format(messageType(typ).Name(), websocketMessage) - } -} - -// getWebsocketCustomEvent return empty string when the websocketMessage is native message -func (ms *messageSerializer) getWebsocketCustomEvent(websocketMessage []byte) []byte { - if len(websocketMessage) < ms.prefixAndSepIdx { - return nil - } - s := websocketMessage[ms.prefixAndSepIdx:] - evt := s[:bytes.IndexByte(s, messageSeparatorByte)] - return evt -} diff --git a/websocket2/server.go b/websocket2/server.go deleted file mode 100644 index 8adfd32e4..000000000 --- a/websocket2/server.go +++ /dev/null @@ -1,460 +0,0 @@ -package websocket - -import ( - "bytes" - "net" - "sync" - "sync/atomic" - - "github.com/kataras/iris/context" - - "github.com/gobwas/ws" -) - -type ( - // ConnectionFunc is the callback which fires when a client/connection is connected to the Server. - // Receives one parameter which is the Connection - ConnectionFunc func(Connection) - - // websocketRoomPayload is used as payload from the connection to the Server - websocketRoomPayload struct { - roomName string - connectionID string - } - - // payloads, connection -> Server - websocketMessagePayload struct { - from string - to string - data []byte - } - - // Server is the websocket Server's implementation. - // - // It listens for websocket clients (either from the javascript client-side or from any websocket implementation). - // See `OnConnection` , to register a single event which will handle all incoming connections and - // the `Handler` which builds the upgrader handler that you can register to a route based on an Endpoint. - // - // To serve the built'n javascript client-side library look the `websocket.ClientHandler`. - Server struct { - config Config - // ClientSource contains the javascript side code - // for the iris websocket communication - // based on the configuration's `EvtMessagePrefix`. - // - // Use a route to serve this file on a specific path, i.e - // app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(mywebsocketServer.ClientSource) }) - ClientSource []byte - connections sync.Map // key = the Connection ID. // key = the Connection ID. - rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name - mu sync.RWMutex // for rooms. - onConnectionListeners []ConnectionFunc - //connectionPool sync.Pool // sadly we can't make this because the websocket connection is live until is closed. - httpUpgrader ws.HTTPUpgrader - tcpUpgrader ws.Upgrader - } -) - -// New returns a new websocket Server based on a configuration. -// See `OnConnection` , to register a single event which will handle all incoming connections and -// the `Handler` which builds the upgrader handler that you can register to a route based on an Endpoint. -// -// To serve the built'n javascript client-side library look the `websocket.ClientHandler`. -func New(cfg Config) *Server { - cfg = cfg.Validate() - return &Server{ - config: cfg, - ClientSource: bytes.Replace(ClientSource, []byte(DefaultEvtMessageKey), cfg.EvtMessagePrefix, -1), - connections: sync.Map{}, // ready-to-use, this is not necessary. - rooms: make(map[string][]string), - onConnectionListeners: make([]ConnectionFunc, 0), - httpUpgrader: ws.DefaultHTTPUpgrader, // ws.DefaultUpgrader, - tcpUpgrader: ws.DefaultUpgrader, - } -} - -// Handler builds the handler based on the configuration and returns it. -// It should be called once per Server, its result should be passed -// as a middleware to an iris route which will be responsible -// to register the websocket's endpoint. -// -// Endpoint is the path which the websocket Server will listen for clients/connections. -// -// To serve the built'n javascript client-side library look the `websocket.ClientHandler`. -func (s *Server) Handler() context.Handler { - return func(ctx context.Context) { - c := s.Upgrade(ctx) - if c.Err() != nil { - return - } - - // NOTE TO ME: fire these first BEFORE startReader and startPinger - // in order to set the events and any messages to send - // the startPinger will send the OK to the client and only - // then the client is able to send and receive from Server - // when all things are ready and only then. DO NOT change this order. - - // fire the on connection event callbacks, if any - for i := range s.onConnectionListeners { - s.onConnectionListeners[i](c) - } - - // start the ping and the messages reader - c.Wait() - } -} - -// Upgrade upgrades the HTTP Server connection to the WebSocket protocol. -// -// The responseHeader is included in the response to the client's upgrade -// request. Use the responseHeader to specify cookies (Set-Cookie) and the -// application negotiated subprotocol (Sec--Protocol). -// -// If the upgrade fails, then Upgrade replies to the client with an HTTP error -// response and the return `Connection.Err()` is filled with that error. -// -// For a more high-level function use the `Handler()` and `OnConnecton` events. -// This one does not starts the connection's writer and reader, so after your `On/OnMessage` events registration -// the caller has to call the `Connection#Wait` function, otherwise the connection will be not handled. -func (s *Server) Upgrade(ctx context.Context) Connection { - conn, _, _, err := s.httpUpgrader.Upgrade(ctx.Request(), ctx.ResponseWriter()) - if err != nil { - ctx.Application().Logger().Warnf("websocket error: %v\n", err) - ctx.StatusCode(503) // Status Service Unavailable - return &connection{err: err} - } - - return s.handleConnection(ctx, conn) -} - -func (s *Server) ZeroUpgrade(conn net.Conn) Connection { - _, err := s.tcpUpgrader.Upgrade(conn) - if err != nil { - return &connection{err: err} - } - - return s.handleConnection(nil, conn) -} - -func (s *Server) HandleConn(conn net.Conn) error { - c := s.ZeroUpgrade(conn) - if c.Err() != nil { - return c.Err() - } - - // NOTE TO ME: fire these first BEFORE startReader and startPinger - // in order to set the events and any messages to send - // the startPinger will send the OK to the client and only - // then the client is able to send and receive from Server - // when all things are ready and only then. DO NOT change this order. - - // fire the on connection event callbacks, if any - for i := range s.onConnectionListeners { - s.onConnectionListeners[i](c) - } - - // start the ping and the messages reader - c.Wait() - return nil -} - -func (s *Server) addConnection(c *connection) { - s.connections.Store(c.id, c) -} - -func (s *Server) getConnection(connID string) (*connection, bool) { - if cValue, ok := s.connections.Load(connID); ok { - // this cast is not necessary, - // we know that we always save a connection, but for good or worse let it be here. - if conn, ok := cValue.(*connection); ok { - return conn, ok - } - } - - return nil, false -} - -// wrapConnection wraps an underline connection to an iris websocket connection. -// It does NOT starts its writer, reader and event mux, the caller is responsible for that. -func (s *Server) handleConnection(ctx context.Context, conn net.Conn) *connection { - // use the config's id generator (or the default) to create a websocket client/connection id - cid := s.config.IDGenerator(ctx) - // create the new connection - c := newServerConnection(ctx, s, conn, cid) - // add the connection to the Server's list - s.addConnection(c) - - // join to itself - s.Join(c.id, c.id) - - return c -} - -/* Notes: - We use the id as the signature of the connection because with the custom IDGenerator - the developer can share this ID with a database field, so we want to give the oportunnity to handle - his/her websocket connections without even use the connection itself. - - Another question may be: - Q: Why you use Server as the main actioner for all of the connection actions? - For example the Server.Disconnect(connID) manages the connection internal fields, is this code-style correct? - A: It's the correct code-style for these type of applications and libraries, Server manages all, the connnection's functions - should just do some internal checks (if needed) and push the action to its parent, which is the Server, the Server is able to - remove a connection, the rooms of its connected and all these things, so in order to not split the logic, we have the main logic - here, in the Server, and let the connection with some exported functions whose exists for the per-connection action user's code-style. - - Ok my english are s** I can feel it, but these comments are mostly for me. -*/ - -/* - connection actions, same as the connection's method, - but these methods accept the connection ID, - which is useful when the developer maps - this id with a database field (using config.IDGenerator). -*/ - -// OnConnection is the main event you, as developer, will work with each of the websocket connections. -func (s *Server) OnConnection(cb ConnectionFunc) { - s.onConnectionListeners = append(s.onConnectionListeners, cb) -} - -// IsConnected returns true if the connection with that ID is connected to the Server -// useful when you have defined a custom connection id generator (based on a database) -// and you want to check if that connection is already connected (on multiple tabs) -func (s *Server) IsConnected(connID string) bool { - _, found := s.getConnection(connID) - return found -} - -// Join joins a websocket client to a room, -// first parameter is the room name and the second the connection.ID() -// -// You can use connection.Join("room name") instead. -func (s *Server) Join(roomName string, connID string) { - s.mu.Lock() - s.join(roomName, connID) - s.mu.Unlock() -} - -// join used internally, no locks used. -func (s *Server) join(roomName string, connID string) { - if s.rooms[roomName] == nil { - s.rooms[roomName] = make([]string, 0) - } - s.rooms[roomName] = append(s.rooms[roomName], connID) -} - -// IsJoined reports if a specific room has a specific connection into its values. -// First parameter is the room name, second is the connection's id. -// -// It returns true when the "connID" is joined to the "roomName". -func (s *Server) IsJoined(roomName string, connID string) bool { - s.mu.RLock() - room := s.rooms[roomName] - s.mu.RUnlock() - - if room == nil { - return false - } - - for _, connid := range room { - if connID == connid { - return true - } - } - - return false -} - -// LeaveAll kicks out a connection from ALL of its joined rooms -func (s *Server) LeaveAll(connID string) { - s.mu.Lock() - for name := range s.rooms { - s.leave(name, connID) - } - s.mu.Unlock() -} - -// Leave leaves a websocket client from a room, -// first parameter is the room name and the second the connection.ID() -// -// You can use connection.Leave("room name") instead. -// Returns true if the connection has actually left from the particular room. -func (s *Server) Leave(roomName string, connID string) bool { - s.mu.Lock() - left := s.leave(roomName, connID) - s.mu.Unlock() - return left -} - -// leave used internally, no locks used. -func (s *Server) leave(roomName string, connID string) (left bool) { - ///THINK: we could add locks to its room but we still use the lock for the whole rooms or we can just do what we do with connections - // I will think about it on the next revision, so far we use the locks only for rooms so we are ok... - if s.rooms[roomName] != nil { - for i := range s.rooms[roomName] { - if s.rooms[roomName][i] == connID { - s.rooms[roomName] = append(s.rooms[roomName][:i], s.rooms[roomName][i+1:]...) - left = true - break - } - } - if len(s.rooms[roomName]) == 0 { // if room is empty then delete it - delete(s.rooms, roomName) - } - } - - if left { - // fire the on room leave connection's listeners, - // the existence check is not necessary here. - if c, ok := s.getConnection(connID); ok { - c.fireOnLeave(roomName) - } - } - return -} - -// GetTotalConnections returns the number of total connections -func (s *Server) GetTotalConnections() (n int) { - s.connections.Range(func(k, v interface{}) bool { - n++ - return true - }) - - return -} - -// GetConnections returns all connections -func (s *Server) GetConnections() (conns []Connection) { - s.connections.Range(func(k, v interface{}) bool { - conn, ok := v.(*connection) - if !ok { - // if for some reason (should never happen), the value is not stored as *connection - // then stop the iteration and don't continue insertion of the result connections - // in order to avoid any issues while end-dev will try to iterate a nil entry. - return false - } - conns = append(conns, conn) - return true - }) - - return -} - -// GetConnection returns single connection -func (s *Server) GetConnection(connID string) Connection { - conn, ok := s.getConnection(connID) - if !ok { - return nil - } - - return conn -} - -// GetConnectionsByRoom returns a list of Connection -// which are joined to this room. -func (s *Server) GetConnectionsByRoom(roomName string) []Connection { - var conns []Connection - s.mu.RLock() - if connIDs, found := s.rooms[roomName]; found { - for _, connID := range connIDs { - // existence check is not necessary here. - if cValue, ok := s.connections.Load(connID); ok { - if conn, ok := cValue.(*connection); ok { - conns = append(conns, conn) - } - } - } - } - - s.mu.RUnlock() - - return conns -} - -// emitMessage is the main 'router' of the messages coming from the connection -// this is the main function which writes the RAW websocket messages to the client. -// It sends them(messages) to the correct room (self, broadcast or to specific client) -// -// You don't have to use this generic method, exists only for extreme -// apps which you have an external goroutine with a list of custom connection list. -// -// You SHOULD use connection.EmitMessage/Emit/To().Emit/EmitMessage instead. -// let's keep it unexported for the best. -func (s *Server) emitMessage(from, to string, data []byte) { - if to != All && to != Broadcast { - s.mu.RLock() - room := s.rooms[to] - s.mu.RUnlock() - if room != nil { - // it suppose to send the message to a specific room/or a user inside its own room - for _, connectionIDInsideRoom := range room { - if c, ok := s.getConnection(connectionIDInsideRoom); ok { - c.writeDefault(data) //send the message to the client(s) - } else { - // the connection is not connected but it's inside the room, we remove it on disconnect but for ANY CASE: - cid := connectionIDInsideRoom - if c != nil { - cid = c.id - } - s.Leave(cid, to) - } - } - } - } else { - // it suppose to send the message to all opened connections or to all except the sender. - s.connections.Range(func(k, v interface{}) bool { - connID, ok := k.(string) - if !ok { - // should never happen. - return true - } - - if to != All && to != connID { // if it's not suppose to send to all connections (including itself) - if to == Broadcast && from == connID { // if broadcast to other connections except this - // here we do the opossite of previous block, - // just skip this connection when it's suppose to send the message to all connections except the sender. - return true - } - - } - - // not necessary cast. - conn, ok := v.(*connection) - if ok { - // send to the client(s) when the top validators passed - conn.writeDefault(data) - } - - return ok - }) - } -} - -// Disconnect force-disconnects a websocket connection based on its connection.ID() -// What it does? -// 1. remove the connection from the list -// 2. leave from all joined rooms -// 3. fire the disconnect callbacks, if any -// 4. close the underline connection and return its error, if any. -// -// You can use the connection.Disconnect() instead. -func (s *Server) Disconnect(connID string) (err error) { - // leave from all joined rooms before remove the actual connection from the list. - // note: we cannot use that to send data if the client is actually closed. - s.LeaveAll(connID) - - // remove the connection from the list. - if conn, ok := s.getConnection(connID); ok { - atomic.StoreUint32(&conn.disconnected, 1) - - // fire the disconnect callbacks, if any. - conn.fireDisconnect() - - s.connections.Delete(connID) - - err = conn.underline.Close() - } - - return -} diff --git a/websocket2/websocket.go b/websocket2/websocket.go deleted file mode 100644 index 1792e0dc2..000000000 --- a/websocket2/websocket.go +++ /dev/null @@ -1,69 +0,0 @@ -/*Package websocket provides rich websocket support for the iris web framework. - -Source code and other details for the project are available at GitHub: - - https://github.com/kataras/iris/tree/master/websocket - -Example code: - - - package main - - import ( - "fmt" - - "github.com/kataras/iris" - "github.com/kataras/iris/context" - - "github.com/kataras/iris/websocket" - ) - - func main() { - app := iris.New() - - app.Get("/", func(ctx context.Context) { - ctx.ServeFile("websockets.html", false) - }) - - setupWebsocket(app) - - // x2 - // http://localhost:8080 - // http://localhost:8080 - // write something, press submit, see the result. - app.Run(iris.Addr(":8080")) - } - - func setupWebsocket(app *iris.Application) { - // create our echo websocket server - ws := websocket.New(websocket.Config{ - ReadBufferSize: 1024, - WriteBufferSize: 1024, - }) - ws.OnConnection(handleConnection) - - // register the server's endpoint. - // see the inline javascript code in the websockets.html, - // this endpoint is used to connect to the server. - app.Get("/echo", ws.Handler()) - - // serve the javascript built'n client-side library, - // see websockets.html script tags, this path is used. - app.Any("/iris-ws.js", func(ctx context.Context) { - ctx.Write(websocket.ClientSource) - }) - } - - func handleConnection(c websocket.Connection) { - // Read events from browser - c.On("chat", func(msg string) { - // Print the message to the console - fmt.Printf("%s sent: %s\n", c.Context().RemoteAddr(), msg) - // Write message back to the client message owner: - // c.Emit("chat", msg) - c.To(websocket.Broadcast).Emit("chat", msg) - }) - } - -*/ -package websocket From decd93328a36038cc95bb60db50072f841895a00 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 23 Feb 2019 07:23:10 +0200 Subject: [PATCH 20/89] add `Context.ResponseWriter.IsHijacked` to report whether the underline conn is already hijacked and a lot of cleanup and minor ws stress test example improvements --- HISTORY.md | 14 +++--- HISTORY_GR.md | 2 +- HISTORY_ID.md | 6 +-- README.md | 6 +-- _examples/configuration/README.md | 2 +- _examples/hello-world/main.go | 2 +- _examples/hero/basic/README.md | 2 +- _examples/hero/overview/web/routes/hello.go | 2 +- _examples/mvc/hello-world/main.go | 2 +- .../web/controllers/hello_controller.go | 2 +- _examples/routing/macros/main.go | 4 +- _examples/websocket/README.md | 2 +- _examples/websocket/chat/main.go | 2 +- _examples/websocket/connectionlist/main.go | 2 +- .../go-client-stress-test/client/main.go | 43 +++++++++++------- .../go-client-stress-test/server/main.go | 44 ++++++++++++------- _examples/websocket/secure/main.go | 2 +- cache/client/handler.go | 2 +- context/context.go | 2 +- context/response_writer.go | 12 +++++ doc.go | 4 +- go19.go | 2 +- hero/di/func.go | 2 +- hero/session.go | 2 +- iris.go | 2 +- middleware/README.md | 2 +- sessions/config.go | 2 +- view/README.md | 2 +- websocket/connection.go | 11 ++++- websocket/server.go | 38 ++++------------ websocket/websocket.go | 2 +- 31 files changed, 124 insertions(+), 100 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 340eb0d11..3c9737b05 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -38,7 +38,7 @@ I have some features in-mind but lately I do not have the time to humanize those - fix [#1164](https://github.com/kataras/iris/issues/1164). [701e8e46c20395f87fa34bf9fabd145074c7b78c](https://github.com/kataras/iris/commit/701e8e46c20395f87fa34bf9fabd145074c7b78c) (@kataras) -- `context#ReadForm` can skip unkown fields by `IsErrPath(err)`, fixes: [#1157](https://github.com/kataras/iris/issues/1157). [1607bb5113568af6a34142f23bfa44903205b314](https://github.com/kataras/iris/commit/1607bb5113568af6a34142f23bfa44903205b314) (@kataras) +- `context#ReadForm` can skip unknown fields by `IsErrPath(err)`, fixes: [#1157](https://github.com/kataras/iris/issues/1157). [1607bb5113568af6a34142f23bfa44903205b314](https://github.com/kataras/iris/commit/1607bb5113568af6a34142f23bfa44903205b314) (@kataras) Doc updates: @@ -281,7 +281,7 @@ wsServer := websocket.New(websocket.Config{ // [...] -// serve the javascript built'n client-side library, +// serve the javascript builtin client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(wsServer.ClientSource) @@ -401,7 +401,7 @@ The old `github.com/kataras/iris/core/router/macro` package was moved to `guthub - Add `:uint64` parameter type and `ctx.Params().GetUint64` - Add alias `:bool` for the `:boolean` parameter type -Here is the full list of the built'n parameter types that we support now, including their validations/path segment rules. +Here is the full list of the builtin parameter types that we support now, including their validations/path segment rules. | Param Type | Go Type | Validation | Retrieve Helper | | -----------------|------|-------------|------| @@ -430,7 +430,7 @@ app.Get("/users/{id:uint64}", func(ctx iris.Context){ }) ``` -| Built'n Func | Param Types | +| Builtin Func | Param Types | | -----------|---------------| | `regexp`(expr string) | :string | | `prefix`(prefix string) | :string | @@ -633,7 +633,7 @@ Sincerely, # We, 25 April 2018 | v10.6.1 -- Re-implement the [BoltDB](https://github.com/coreos/bbolt) as built'n back-end storage for sessions(`sessiondb`) using the latest features: [/sessions/sessiondb/boltdb/database.go](sessions/sessiondb/boltdb/database.go), example can be found at [/_examples/sessions/database/boltdb/main.go](_examples/sessions/database/boltdb/main.go). +- Re-implement the [BoltDB](https://github.com/coreos/bbolt) as builtin back-end storage for sessions(`sessiondb`) using the latest features: [/sessions/sessiondb/boltdb/database.go](sessions/sessiondb/boltdb/database.go), example can be found at [/_examples/sessions/database/boltdb/main.go](_examples/sessions/database/boltdb/main.go). - Fix a minor issue on [Badger sessiondb example](_examples/sessions/database/badger/main.go). Its `sessions.Config { Expires }` field was `2 *time.Second`, it's `45 *time.Minute` now. - Other minor improvements to the badger sessiondb. @@ -642,7 +642,7 @@ Sincerely, - Fix open redirect by @wozz via PR: https://github.com/kataras/iris/pull/972. - Fix when destroy session can't remove cookie in subdomain by @Chengyumeng via PR: https://github.com/kataras/iris/pull/964. - Add `OnDestroy(sid string)` on sessions for registering a listener when a session is destroyed with commit: https://github.com/kataras/iris/commit/d17d7fecbe4937476d00af7fda1c138c1ac6f34d. -- Finally, sessions are in full-sync with the registered database now. That required a lot of internal code changed but **zero code change requirements by your side**. We kept only `badger` and `redis` as the back-end built'n supported sessions storages, they are enough. Made with commit: https://github.com/kataras/iris/commit/f2c3a5f0cef62099fd4d77c5ccb14f654ddbfb5c relative to many issues that you've requested it. +- Finally, sessions are in full-sync with the registered database now. That required a lot of internal code changed but **zero code change requirements by your side**. We kept only `badger` and `redis` as the back-end builtin supported sessions storages, they are enough. Made with commit: https://github.com/kataras/iris/commit/f2c3a5f0cef62099fd4d77c5ccb14f654ddbfb5c relative to many issues that you've requested it. # Sa, 24 March 2018 | v10.5.0 @@ -840,7 +840,7 @@ The new package [hero](hero) contains features for binding any object or functio Below you will see some screenshots we prepared for you in order to be easier to understand: -### 1. Path Parameters - Built'n Dependencies +### 1. Path Parameters - Builtin Dependencies ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) diff --git a/HISTORY_GR.md b/HISTORY_GR.md index 34f6a5f2c..e30161768 100644 --- a/HISTORY_GR.md +++ b/HISTORY_GR.md @@ -201,7 +201,7 @@ This history entry is not yet translated to Greek. Please read [the english vers Παρακάτω θα δείτε μερικά στιγμιότυπα που ετοιμάσαμε για εσάς, ώστε να γίνουν πιο κατανοητά τα παραπάνω: -### 1. Παράμετροι διαδρομής - Ενσωματωμένες Εξαρτήσεις (Built'n Dependencies) +### 1. Παράμετροι διαδρομής - Ενσωματωμένες Εξαρτήσεις (Builtin Dependencies) ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) diff --git a/HISTORY_ID.md b/HISTORY_ID.md index f69ea630b..d28769d27 100644 --- a/HISTORY_ID.md +++ b/HISTORY_ID.md @@ -71,7 +71,7 @@ This history entry is not translated yet to the Bahasa Indonesia language yet, p # We, 25 April 2018 | v10.6.1 -- Re-implement the [BoltDB](https://github.com/coreos/bbolt) as built'n back-end storage for sessions(`sessiondb`) using the latest features: [/sessions/sessiondb/boltdb/database.go](sessions/sessiondb/boltdb/database.go), example can be found at [/_examples/sessions/database/boltdb/main.go](_examples/sessions/database/boltdb/main.go). +- Re-implement the [BoltDB](https://github.com/coreos/bbolt) as builtin back-end storage for sessions(`sessiondb`) using the latest features: [/sessions/sessiondb/boltdb/database.go](sessions/sessiondb/boltdb/database.go), example can be found at [/_examples/sessions/database/boltdb/main.go](_examples/sessions/database/boltdb/main.go). - Fix a minor issue on [Badger sessiondb example](_examples/sessions/database/badger/main.go). Its `sessions.Config { Expires }` field was `2 *time.Second`, it's `45 *time.Minute` now. - Other minor improvements to the badger sessiondb. @@ -80,7 +80,7 @@ This history entry is not translated yet to the Bahasa Indonesia language yet, p - Fix open redirect by @wozz via PR: https://github.com/kataras/iris/pull/972. - Fix when destroy session can't remove cookie in subdomain by @Chengyumeng via PR: https://github.com/kataras/iris/pull/964. - Add `OnDestroy(sid string)` on sessions for registering a listener when a session is destroyed with commit: https://github.com/kataras/iris/commit/d17d7fecbe4937476d00af7fda1c138c1ac6f34d. -- Finally, sessions are in full-sync with the registered database now. That required a lot of internal code changed but **zero code change requirements by your side**. We kept only `badger` and `redis` as the back-end built'n supported sessions storages, they are enough. Made with commit: https://github.com/kataras/iris/commit/f2c3a5f0cef62099fd4d77c5ccb14f654ddbfb5c relative to many issues that you've requested it. +- Finally, sessions are in full-sync with the registered database now. That required a lot of internal code changed but **zero code change requirements by your side**. We kept only `badger` and `redis` as the back-end builtin supported sessions storages, they are enough. Made with commit: https://github.com/kataras/iris/commit/f2c3a5f0cef62099fd4d77c5ccb14f654ddbfb5c relative to many issues that you've requested it. # Sa, 24 March 2018 | v10.5.0 @@ -278,7 +278,7 @@ The new package [hero](hero) contains features for binding any object or functio Below you will see some screenshots we prepared for you in order to be easier to understand: -### 1. Path Parameters - Built'n Dependencies +### 1. Path Parameters - Builtin Dependencies ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) diff --git a/README.md b/README.md index dfb02623e..79160bc85 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ app.Get("/users/{id:uint64}", func(ctx iris.Context){ }) ``` -| Built'n Func | Param Types | +| Builtin Func | Param Types | | -----------|---------------| | `regexp`(expr string) | :string | | `prefix`(prefix string) | :string | @@ -300,7 +300,7 @@ With Iris you get truly safe bindings thanks to the [hero](_examples/hero) [pack Below you will see some screenshots I prepared for you in order to be easier to understand: -#### 1. Path Parameters - Built'n Dependencies +#### 1. Path Parameters - Builtin Dependencies ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) @@ -797,7 +797,7 @@ func setupWebsocket(app *iris.Application) { // see the inline javascript code in the websockets.html, // this endpoint is used to connect to the server. app.Get("/echo", ws.Handler()) - // serve the javascript built'n client-side library, + // serve the javascript builtin client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", websocket.ClientHandler()) } diff --git a/_examples/configuration/README.md b/_examples/configuration/README.md index fa54b7759..774c0182f 100644 --- a/_examples/configuration/README.md +++ b/_examples/configuration/README.md @@ -134,7 +134,7 @@ func main() { ``` -## Built'n Configurators +## Builtin Configurators ```go // WithoutServerError will cause to ignore the matched "errors" diff --git a/_examples/hello-world/main.go b/_examples/hello-world/main.go index f9b4bc7e9..706cbc803 100644 --- a/_examples/hello-world/main.go +++ b/_examples/hello-world/main.go @@ -10,7 +10,7 @@ import ( func main() { app := iris.New() app.Logger().SetLevel("debug") - // Optionally, add two built'n handlers + // Optionally, add two builtin handlers // that can recover from any http-relative panics // and log the requests to the terminal. app.Use(recover.New()) diff --git a/_examples/hero/basic/README.md b/_examples/hero/basic/README.md index c039ce97b..88309fb5a 100644 --- a/_examples/hero/basic/README.md +++ b/_examples/hero/basic/README.md @@ -1,6 +1,6 @@ # hero: basic -## 1. Path Parameters - Built'n Dependencies +## 1. Path Parameters - Builtin Dependencies ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) diff --git a/_examples/hero/overview/web/routes/hello.go b/_examples/hero/overview/web/routes/hello.go index 8feeca14f..e3bba5fc3 100644 --- a/_examples/hero/overview/web/routes/hello.go +++ b/_examples/hero/overview/web/routes/hello.go @@ -19,7 +19,7 @@ var helloView = hero.View{ // Hello will return a predefined view with bind data. // // `hero.Result` is just an interface with a `Dispatch` function. -// `hero.Response` and `hero.View` are the built'n result type dispatchers +// `hero.Response` and `hero.View` are the builtin result type dispatchers // you can even create custom response dispatchers by // implementing the `github.com/kataras/iris/hero#Result` interface. func Hello() hero.Result { diff --git a/_examples/mvc/hello-world/main.go b/_examples/mvc/hello-world/main.go index 6f2ec963b..c93ff4b03 100644 --- a/_examples/mvc/hello-world/main.go +++ b/_examples/mvc/hello-world/main.go @@ -32,7 +32,7 @@ import ( // for the main_test.go. func newApp() *iris.Application { app := iris.New() - // Optionally, add two built'n handlers + // Optionally, add two builtin handlers // that can recover from any http-relative panics // and log the requests to the terminal. app.Use(recover.New()) diff --git a/_examples/mvc/overview/web/controllers/hello_controller.go b/_examples/mvc/overview/web/controllers/hello_controller.go index d1ff76ae6..2e10dc745 100644 --- a/_examples/mvc/overview/web/controllers/hello_controller.go +++ b/_examples/mvc/overview/web/controllers/hello_controller.go @@ -23,7 +23,7 @@ var helloView = mvc.View{ // Get will return a predefined view with bind data. // // `mvc.Result` is just an interface with a `Dispatch` function. -// `mvc.Response` and `mvc.View` are the built'n result type dispatchers +// `mvc.Response` and `mvc.View` are the builtin result type dispatchers // you can even create custom response dispatchers by // implementing the `github.com/kataras/iris/hero#Result` interface. func (c *HelloController) Get() mvc.Result { diff --git a/_examples/routing/macros/main.go b/_examples/routing/macros/main.go index 3de4e29a8..c19430014 100644 --- a/_examples/routing/macros/main.go +++ b/_examples/routing/macros/main.go @@ -52,7 +52,7 @@ func main() { /* http://localhost:8080/test_slice_hero/myvaluei1/myavlue2 -> - myparam's value (a trailing path parameter type) is: []string{"myvaluei1", "myavlue2"} + myparam's value (a trailing path parameter type) is: []string{"myvalue1", "myavlue2"} */ app.Get("/test_slice_hero/{myparam:slice}", hero.Handler(func(myparam []string) string { return fmt.Sprintf("myparam's value (a trailing path parameter type) is: %#v\n", myparam) @@ -66,7 +66,7 @@ func main() { myparam's value (a trailing path parameter type) is: []string{"value1", "value2"} */ app.Get("/test_slice_contains/{myparam:slice contains([value1,value2])}", func(ctx context.Context) { - // When it is not a built'n function available to retrieve your value with the type you want, such as ctx.Params().GetInt + // When it is not a builtin function available to retrieve your value with the type you want, such as ctx.Params().GetInt // then you can use the `GetEntry.ValueRaw` to get the real value, which is set-ed by your macro above. myparam := ctx.Params().GetEntry("myparam").ValueRaw.([]string) ctx.Writef("myparam's value (a trailing path parameter type) is: %#v\n", myparam) diff --git a/_examples/websocket/README.md b/_examples/websocket/README.md index 6d7f41cff..b5cdea050 100644 --- a/_examples/websocket/README.md +++ b/_examples/websocket/README.md @@ -115,7 +115,7 @@ func main() { // see the inline javascript code in the websockets.html, this endpoint is used to connect to the server. app.Get("/echo", ws.Handler()) - // serve the javascript built'n client-side library, + // serve the javascript builtin client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(websocket.ClientSource) diff --git a/_examples/websocket/chat/main.go b/_examples/websocket/chat/main.go index e3f18b159..caeba79f7 100644 --- a/_examples/websocket/chat/main.go +++ b/_examples/websocket/chat/main.go @@ -40,7 +40,7 @@ func setupWebsocket(app *iris.Application) { // see the inline javascript code in the websockets.html, this endpoint is used to connect to the server. app.Get("/echo", ws.Handler()) - // serve the javascript built'n client-side library, + // serve the javascript builtin client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(ws.ClientSource) diff --git a/_examples/websocket/connectionlist/main.go b/_examples/websocket/connectionlist/main.go index 490f85c6b..ef808f8f6 100644 --- a/_examples/websocket/connectionlist/main.go +++ b/_examples/websocket/connectionlist/main.go @@ -25,7 +25,7 @@ func main() { // see the inline javascript code i the websockets.html, this endpoint is used to connect to the server. app.Get("/my_endpoint", ws.Handler()) - // serve the javascript built'n client-side library, + // serve the javascript builtin client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(websocket.ClientSource) diff --git a/_examples/websocket/go-client-stress-test/client/main.go b/_examples/websocket/go-client-stress-test/client/main.go index fb5d9806a..69f50fc34 100644 --- a/_examples/websocket/go-client-stress-test/client/main.go +++ b/_examples/websocket/go-client-stress-test/client/main.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "context" "log" "math/rand" "net" @@ -19,7 +20,7 @@ var ( ) const totalClients = 16000 // max depends on the OS. -const verbose = true +const verbose = false var connectionFailures uint64 @@ -43,7 +44,7 @@ func collectError(op string, err error) { } func main() { - log.Println("--Running...") + log.Println("-- Running...") var err error f, err = os.Open("./test.data") if err != nil { @@ -63,7 +64,7 @@ func main() { wg.Add(1) waitTime := time.Duration(rand.Intn(5)) * time.Millisecond time.Sleep(waitTime) - go connect(wg, 7*time.Second+waitTime) + go connect(wg, 14*time.Second+waitTime) } for i := 0; i < totalClients/4; i++ { @@ -77,7 +78,7 @@ func main() { wg.Add(1) waitTime := time.Duration(rand.Intn(5)) * time.Millisecond time.Sleep(waitTime) - go connect(wg, 14*time.Second+waitTime) + go connect(wg, 7*time.Second+waitTime) } wg.Wait() @@ -136,16 +137,19 @@ func main() { log.Println("ALL OK.") } - log.Println("--Finished.") + log.Println("-- Finished.") } -func connect(wg *sync.WaitGroup, alive time.Duration) { - c, err := websocket.Dial(nil, url, websocket.ConnectionConfig{}) +func connect(wg *sync.WaitGroup, alive time.Duration) error { + ctx, cancel := context.WithTimeout(context.Background(), alive) + defer cancel() + + c, err := websocket.Dial(ctx, url, websocket.ConnectionConfig{}) if err != nil { atomic.AddUint64(&connectionFailures, 1) collectError("connect", err) wg.Done() - return + return err } c.OnError(func(err error) { @@ -167,23 +171,28 @@ func connect(wg *sync.WaitGroup, alive time.Duration) { } }) - go func() { - time.Sleep(alive) - if err := c.Disconnect(); err != nil { - collectError("disconnect", err) - } + if alive > 0 { + go func() { + time.Sleep(alive) + if err := c.Disconnect(); err != nil { + collectError("disconnect", err) + } - wg.Done() - }() + wg.Done() + }() + + } scanner := bufio.NewScanner(f) for !disconnected { - if !scanner.Scan() || scanner.Err() != nil { - break + if !scanner.Scan() { + return scanner.Err() } if text := scanner.Text(); len(text) > 1 { c.Emit("chat", text) } } + + return nil } diff --git a/_examples/websocket/go-client-stress-test/server/main.go b/_examples/websocket/go-client-stress-test/server/main.go index 37fe73834..b723d4dc7 100644 --- a/_examples/websocket/go-client-stress-test/server/main.go +++ b/_examples/websocket/go-client-stress-test/server/main.go @@ -11,21 +11,24 @@ import ( "github.com/kataras/iris/websocket" ) -const totalClients = 16000 // max depends on the OS. -const verbose = true +const ( + endpoint = "localhost:8080" + totalClients = 16000 // max depends on the OS. + verbose = false + maxC = 0 +) func main() { - ws := websocket.New(websocket.Config{}) ws.OnConnection(handleConnection) // websocket.Config{PingPeriod: ((60 * time.Second) * 9) / 10} go func() { - dur := 8 * time.Second + dur := 4 * time.Second if totalClients >= 64000 { - // if more than 64000 then let's no check every 8 seconds, let's do it every 24 seconds, - // just for simplicity, either way works. + // if more than 64000 then let's perform those checks every 24 seconds instead, + // either way works. dur = 24 * time.Second } t := time.NewTicker(dur) @@ -40,12 +43,16 @@ func main() { n := ws.GetTotalConnections() if n > 0 { started = true + if maxC > 0 && n > maxC { + log.Printf("current connections[%d] > MaxConcurrentConnections[%d]", n, maxC) + return + } } if started { - totalConnected := atomic.LoadUint64(&count) - - if totalConnected == totalClients { + disconnectedN := atomic.LoadUint64(&totalDisconnected) + connectedN := atomic.LoadUint64(&totalConnected) + if disconnectedN == totalClients && connectedN == totalClients { if n != 0 { log.Println("ALL CLIENTS DISCONNECTED BUT LEFTOVERS ON CONNECTIONS LIST.") } else { @@ -53,7 +60,7 @@ func main() { } return } else if n == 0 { - log.Printf("%d/%d CLIENTS WERE NOT CONNECTED AT ALL. CHECK YOUR OS NET SETTINGS. ALL OTHER CONNECTED CLIENTS DISCONNECTED SUCCESSFULLY.\n", + log.Printf("%d/%d CLIENTS WERE NOT CONNECTED AT ALL. CHECK YOUR OS NET SETTINGS. THE REST CLIENTS WERE DISCONNECTED SUCCESSFULLY.\n", totalClients-totalConnected, totalClients) return @@ -64,11 +71,18 @@ func main() { app := iris.New() app.Get("/", ws.Handler()) - app.Run(iris.Addr(":8080")) - + app.Run(iris.Addr(endpoint), iris.WithoutServerError(iris.ErrServerClosed)) } +var totalConnected uint64 + func handleConnection(c websocket.Connection) { + if c.Err() != nil { + log.Fatalf("[%d] upgrade failed: %v", atomic.LoadUint64(&totalConnected)+1, c.Err()) + return + } + + atomic.AddUint64(&totalConnected, 1) c.OnError(func(err error) { handleErr(c, err) }) c.OnDisconnect(func() { handleDisconnect(c) }) c.On("chat", func(message string) { @@ -76,12 +90,12 @@ func handleConnection(c websocket.Connection) { }) } -var count uint64 +var totalDisconnected uint64 func handleDisconnect(c websocket.Connection) { - atomic.AddUint64(&count, 1) + newC := atomic.AddUint64(&totalDisconnected, 1) if verbose { - log.Printf("client [%s] disconnected!\n", c.ID()) + log.Printf("[%d] client [%s] disconnected!\n", newC, c.ID()) } } diff --git a/_examples/websocket/secure/main.go b/_examples/websocket/secure/main.go index 3d2891147..5bedbb5e0 100644 --- a/_examples/websocket/secure/main.go +++ b/_examples/websocket/secure/main.go @@ -26,7 +26,7 @@ func main() { // see the inline javascript code i the websockets.html, this endpoint is used to connect to the server. app.Get("/my_endpoint", ws.Handler()) - // serve the javascript built'n client-side library, + // serve the javascript builtin client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(websocket.ClientSource) diff --git a/cache/client/handler.go b/cache/client/handler.go index 6cc353453..d0a7b8932 100644 --- a/cache/client/handler.go +++ b/cache/client/handler.go @@ -125,7 +125,7 @@ func (h *Handler) ServeHTTP(ctx context.Context) { // if it's expired, then execute the original handler // with our custom response recorder response writer // because the net/http doesn't give us - // a built'n way to get the status code & body + // a builtin way to get the status code & body recorder := ctx.Recorder() bodyHandler(ctx) diff --git a/context/context.go b/context/context.go index fd751eb23..46badde52 100644 --- a/context/context.go +++ b/context/context.go @@ -3177,7 +3177,7 @@ func (ctx *context) SendFile(filename string, destinationName string) error { // context's methods like `SetCookieKV`, `RemoveCookie` and `SetCookie` // as their (last) variadic input argument to amend the end cookie's form. // -// Any custom or built'n `CookieOption` is valid, +// Any custom or builtin `CookieOption` is valid, // see `CookiePath`, `CookieCleanPath`, `CookieExpires` and `CookieHTTPOnly` for more. type CookieOption func(*http.Cookie) diff --git a/context/response_writer.go b/context/response_writer.go index b2afc3bf9..419be6529 100644 --- a/context/response_writer.go +++ b/context/response_writer.go @@ -41,6 +41,9 @@ type ResponseWriter interface { // Here is the place which we can make the last checks or do a cleanup. EndResponse() + // IsHijacked reports whether this response writer's connection is hijacked. + IsHijacked() bool + // Writef formats according to a format specifier and writes to the response. // // Returns the number of bytes written and any write error encountered. @@ -195,6 +198,15 @@ func (w *responseWriter) tryWriteHeader() { } } +// IsHijacked reports whether this response writer's connection is hijacked. +func (w *responseWriter) IsHijacked() bool { + // Note: + // A zero-byte `ResponseWriter.Write` on a hijacked connection will + // return `http.ErrHijacked` without any other side effects. + _, err := w.ResponseWriter.Write(nil) + return err == http.ErrHijacked +} + // Write writes to the client // If WriteHeader has not yet been called, Write calls // WriteHeader(http.StatusOK) before writing the data. If the Header diff --git a/doc.go b/doc.go index b40c8aa35..61c48f8a1 100644 --- a/doc.go +++ b/doc.go @@ -1471,7 +1471,7 @@ Example Server Code: // see the inline javascript code i the websockets.html, this endpoint is used to connect to the server. app.Get("/echo", ws.Handler()) - // serve the javascript built'n client-side library, + // serve the javascript builtin client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(websocket.ClientSource) @@ -1554,7 +1554,7 @@ Example Code: func main() { app := iris.New() - // Optionally, add two built'n handlers + // Optionally, add two builtin handlers // that can recover from any http-relative panics // and log the requests to the terminal. app.Use(recover.New()) diff --git a/go19.go b/go19.go index 6d6c979e4..aadcb5259 100644 --- a/go19.go +++ b/go19.go @@ -82,7 +82,7 @@ type ( // context's methods like `SetCookieKV`, `RemoveCookie` and `SetCookie` // as their (last) variadic input argument to amend the end cookie's form. // - // Any custom or built'n `CookieOption` is valid, + // Any custom or builtin `CookieOption` is valid, // see `CookiePath`, `CookieCleanPath`, `CookieExpires` and `CookieHTTPOnly` for more. // // An alias for the `context/Context#CookieOption`. diff --git a/hero/di/func.go b/hero/di/func.go index 3c417d8f0..1f30e3073 100644 --- a/hero/di/func.go +++ b/hero/di/func.go @@ -144,7 +144,7 @@ func (s *FuncInjector) addValue(inputIndex int, value reflect.Value) bool { return false } -// Retry used to add missing dependencies, i.e path parameter built'n bindings if not already exists +// Retry used to add missing dependencies, i.e path parameter builtin bindings if not already exists // in the `hero.Handler`, once, only for that func injector. func (s *FuncInjector) Retry(retryFn func(inIndex int, inTyp reflect.Type) (reflect.Value, bool)) bool { for _, missing := range s.lost { diff --git a/hero/session.go b/hero/session.go index 8d0086536..acc919132 100644 --- a/hero/session.go +++ b/hero/session.go @@ -1,6 +1,6 @@ package hero -// It's so easy, no need to be lived anywhere as built'n.. users should understand +// It's so easy, no need to be lived anywhere as builtin.. users should understand // how easy it's by using it. // // Session is a binder that will fill a *sessions.Session function input argument diff --git a/iris.go b/iris.go index 496c5eb1a..dd7883611 100644 --- a/iris.go +++ b/iris.go @@ -613,7 +613,7 @@ func (app *Application) Shutdown(ctx stdContext.Context) error { // It can be used to register a custom runner with `Run` in order // to set the framework's server listen action. // -// Currently Runner is being used to declare the built'n server listeners. +// Currently `Runner` is being used to declare the builtin server listeners. // // See `Run` for more. type Runner func(*Application) error diff --git a/middleware/README.md b/middleware/README.md index 9e09ecc27..b4402aac4 100644 --- a/middleware/README.md +++ b/middleware/README.md @@ -1,4 +1,4 @@ -Built'n Handlers +Builtin Handlers ------------ | Middleware | Example | diff --git a/sessions/config.go b/sessions/config.go index 018ec1391..d6880e18f 100644 --- a/sessions/config.go +++ b/sessions/config.go @@ -49,7 +49,7 @@ type ( // CookieSecureTLS set to true if server is running over TLS // and you need the session's cookie "Secure" field to be setted true. // - // Note: The user should fill the Decode configuation field in order for this to work. + // Note: The user should fill the Decode configuration field in order for this to work. // Recommendation: You don't need this to be setted to true, just fill the Encode and Decode fields // with a third-party library like secure cookie, example is provided at the _examples folder. // diff --git a/view/README.md b/view/README.md index 0ce6e74fc..48a900b3e 100644 --- a/view/README.md +++ b/view/README.md @@ -77,7 +77,7 @@ func main() { // - amber | iris.Amber(...) tmpl := iris.HTML("./templates", ".html") - // built'n template funcs are: + // builtin template funcs are: // // - {{ urlpath "mynamedroute" "pathParameter_ifneeded" }} // - {{ render "header.html" }} diff --git a/websocket/connection.go b/websocket/connection.go index 2203e3992..c6d23c209 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -192,8 +192,9 @@ type ( // Wait starts the pinger and the messages reader, // it's named as "Wait" because it should be called LAST, // after the "On" events IF server's `Upgrade` is used, - // otherise you don't have to call it because the `Handler()` does it automatically. + // otherwise you don't have to call it because the `Handler()` does it automatically. Wait() + // UnderlyingConn returns the underline gorilla websocket connection. UnderlyingConn() *websocket.Conn } @@ -592,6 +593,14 @@ func (c *connection) fireOnLeave(roomName string) { // after the "On" events IF server's `Upgrade` is used, // otherise you don't have to call it because the `Handler()` does it automatically. func (c *connection) Wait() { + // if c.server != nil && c.server.config.MaxConcurrentConnections > 0 { + // defer func() { + // go func() { + // c.server.threads <- struct{}{} + // }() + // }() + // } + if c.started { return } diff --git a/websocket/server.go b/websocket/server.go index da747e3ed..6aaaccac5 100644 --- a/websocket/server.go +++ b/websocket/server.go @@ -21,7 +21,7 @@ type ( // See `OnConnection` , to register a single event which will handle all incoming connections and // the `Handler` which builds the upgrader handler that you can register to a route based on an Endpoint. // - // To serve the built'n javascript client-side library look the `websocket.ClientHandler`. + // To serve the builtin javascript client-side library look the `websocket.ClientHandler`. Server struct { config Config // ClientSource contains the javascript side code @@ -44,10 +44,11 @@ type ( // See `OnConnection` , to register a single event which will handle all incoming connections and // the `Handler` which builds the upgrader handler that you can register to a route based on an Endpoint. // -// To serve the built'n javascript client-side library look the `websocket.ClientHandler`. +// To serve the builtin javascript client-side library look the `websocket.ClientHandler`. func New(cfg Config) *Server { cfg = cfg.Validate() - return &Server{ + + s := &Server{ config: cfg, ClientSource: bytes.Replace(ClientSource, []byte(DefaultEvtMessageKey), cfg.EvtMessagePrefix, -1), connections: sync.Map{}, // ready-to-use, this is not necessary. @@ -63,6 +64,8 @@ func New(cfg Config) *Server { EnableCompression: cfg.EnableCompression, }, } + + return s } // Handler builds the handler based on the configuration and returns it. @@ -72,7 +75,7 @@ func New(cfg Config) *Server { // // Endpoint is the path which the websocket Server will listen for clients/connections. // -// To serve the built'n javascript client-side library look the `websocket.ClientHandler`. +// To serve the builtin javascript client-side library look the `websocket.ClientHandler`. func (s *Server) Handler() context.Handler { return func(ctx context.Context) { c := s.Upgrade(ctx) @@ -104,14 +107,14 @@ func (s *Server) Handler() context.Handler { // If the upgrade fails, then Upgrade replies to the client with an HTTP error // response and the return `Connection.Err()` is filled with that error. // -// For a more high-level function use the `Handler()` and `OnConnecton` events. +// For a more high-level function use the `Handler()` and `OnConnection` events. // This one does not starts the connection's writer and reader, so after your `On/OnMessage` events registration // the caller has to call the `Connection#Wait` function, otherwise the connection will be not handled. func (s *Server) Upgrade(ctx context.Context) Connection { conn, err := s.upgrader.Upgrade(ctx.ResponseWriter(), ctx.Request(), ctx.ResponseWriter().Header()) if err != nil { ctx.Application().Logger().Warnf("websocket error: %v\n", err) - ctx.StatusCode(503) // Status Service Unavailable + // ctx.StatusCode(503) // Status Service Unavailable return &connection{err: err} } @@ -150,29 +153,6 @@ func (s *Server) handleConnection(ctx context.Context, websocketConn *websocket. return c } -/* Notes: - We use the id as the signature of the connection because with the custom IDGenerator - the developer can share this ID with a database field, so we want to give the oportunnity to handle - his/her websocket connections without even use the connection itself. - - Another question may be: - Q: Why you use Server as the main actioner for all of the connection actions? - For example the Server.Disconnect(connID) manages the connection internal fields, is this code-style correct? - A: It's the correct code-style for these type of applications and libraries, Server manages all, the connnection's functions - should just do some internal checks (if needed) and push the action to its parent, which is the Server, the Server is able to - remove a connection, the rooms of its connected and all these things, so in order to not split the logic, we have the main logic - here, in the Server, and let the connection with some exported functions whose exists for the per-connection action user's code-style. - - Ok my english are s** I can feel it, but these comments are mostly for me. -*/ - -/* - connection actions, same as the connection's method, - but these methods accept the connection ID, - which is useful when the developer maps - this id with a database field (using config.IDGenerator). -*/ - // OnConnection is the main event you, as developer, will work with each of the websocket connections. func (s *Server) OnConnection(cb ConnectionFunc) { s.onConnectionListeners = append(s.onConnectionListeners, cb) diff --git a/websocket/websocket.go b/websocket/websocket.go index 1792e0dc2..fff59634a 100644 --- a/websocket/websocket.go +++ b/websocket/websocket.go @@ -47,7 +47,7 @@ Example code: // this endpoint is used to connect to the server. app.Get("/echo", ws.Handler()) - // serve the javascript built'n client-side library, + // serve the javascript builtin client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx context.Context) { ctx.Write(websocket.ClientSource) From 328b5c6610ff57cfce1fe2a317b817e1fba10585 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sat, 23 Feb 2019 18:35:29 +0200 Subject: [PATCH 21/89] remove websocket's connection's temp storage, as it was deprecated for quite long time (we have access to Context().Values() now) --- .../go-client-stress-test/server/main.go | 30 ++++- websocket/connection.go | 110 +----------------- 2 files changed, 28 insertions(+), 112 deletions(-) diff --git a/_examples/websocket/go-client-stress-test/server/main.go b/_examples/websocket/go-client-stress-test/server/main.go index b723d4dc7..69b598b0d 100644 --- a/_examples/websocket/go-client-stress-test/server/main.go +++ b/_examples/websocket/go-client-stress-test/server/main.go @@ -32,9 +32,11 @@ func main() { dur = 24 * time.Second } t := time.NewTicker(dur) - defer t.Stop() - defer os.Exit(0) - defer runtime.Goexit() + defer func() { + t.Stop() + printMemUsage() + os.Exit(0) + }() var started bool for { @@ -70,7 +72,11 @@ func main() { }() app := iris.New() - app.Get("/", ws.Handler()) + app.Get("/", func(ctx iris.Context) { + c := ws.Upgrade(ctx) + handleConnection(c) + c.Wait() + }) app.Run(iris.Addr(endpoint), iris.WithoutServerError(iris.ErrServerClosed)) } @@ -100,5 +106,19 @@ func handleDisconnect(c websocket.Connection) { } func handleErr(c websocket.Connection, err error) { - log.Printf("client [%s] errored: %v\n", c.ID(), err) + log.Printf("client [%s] errorred: %v\n", c.ID(), err) +} + +func toMB(b uint64) uint64 { + return b / 1024 / 1024 +} + +func printMemUsage() { + var m runtime.MemStats + runtime.ReadMemStats(&m) + log.Printf("Alloc = %v MiB", toMB(m.Alloc)) + log.Printf("\tTotalAlloc = %v MiB", toMB(m.TotalAlloc)) + log.Printf("\tSys = %v MiB", toMB(m.Sys)) + log.Printf("\tNumGC = %v\n", m.NumGC) + log.Printf("\tNumGoRoutines = %d\n", runtime.NumGoroutine()) } diff --git a/websocket/connection.go b/websocket/connection.go index c6d23c209..ef6ef3a09 100644 --- a/websocket/connection.go +++ b/websocket/connection.go @@ -42,56 +42,8 @@ type ( key []byte value interface{} } - // ConnectionValues is the temporary connection's memory store - ConnectionValues []connectionValue ) -// Set sets a value based on the key -func (r *ConnectionValues) Set(key string, value interface{}) { - args := *r - n := len(args) - for i := 0; i < n; i++ { - kv := &args[i] - if string(kv.key) == key { - kv.value = value - return - } - } - - c := cap(args) - if c > n { - args = args[:n+1] - kv := &args[n] - kv.key = append(kv.key[:0], key...) - kv.value = value - *r = args - return - } - - kv := connectionValue{} - kv.key = append(kv.key[:0], key...) - kv.value = value - *r = append(args, kv) -} - -// Get returns a value based on its key -func (r *ConnectionValues) Get(key string) interface{} { - args := *r - n := len(args) - for i := 0; i < n; i++ { - kv := &args[i] - if string(kv.key) == key { - return kv.value - } - } - return nil -} - -// Reset clears the values -func (r *ConnectionValues) Reset() { - *r = (*r)[:0] -} - // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- // -------------------------------Connection implementation----------------------------- @@ -135,7 +87,7 @@ type ( // then you use it to receive user information, for example: from headers Context() context.Context // To defines on what "room" (see Join) the server should send a message - // returns an Emmiter(`EmitMessage` & `Emit`) to send messages. + // returns an Emitter(`EmitMessage` & `Emit`) to send messages. To(string) Emitter // Join registers this connection to a room, if it doesn't exist then it creates a new. One room can have one or more connections. One connection can be joined to many rooms. All connections are joined to a room specified by their `ID` automatically. Join(string) @@ -152,16 +104,6 @@ type ( // Note: the callback(s) called right before the server deletes the connection from the room // so the connection theoretical can still send messages to its room right before it is being disconnected. OnLeave(roomLeaveCb LeaveRoomFunc) - // SetValue sets a key-value pair on the connection's mem store. - SetValue(key string, value interface{}) - // GetValue gets a value by its key from the connection's mem store. - GetValue(key string) interface{} - // GetValueArrString gets a value as []string by its key from the connection's mem store. - GetValueArrString(key string) []string - // GetValueString gets a value as string by its key from the connection's mem store. - GetValueString(key string) string - // GetValueInt gets a value as integer by its key from the connection's mem store. - GetValueInt(key string) int } // ClientConnection is the client-side connection interface. Server shares some of its methods but the underline actions differs. @@ -223,7 +165,6 @@ type ( // access to the Context, use with caution, you can't use response writer as you imagine. ctx context.Context - values ConnectionValues server *Server // #119 , websocket writers are not protected by locks inside the gorilla's websocket code // so we must protect them otherwise we're getting concurrent connection error on multi writers in the same time. @@ -355,7 +296,7 @@ func (c *connection) startPinger() { for { time.Sleep(c.config.PingPeriod) if c == nil || atomic.LoadUint32(&c.disconnected) > 0 { - // verifies if already disconected. + // verifies if already disconnected. return } //fire all OnPing methods @@ -483,10 +424,6 @@ func (c *connection) Context() context.Context { return c.ctx } -func (c *connection) Values() ConnectionValues { - return c.values -} - func (c *connection) fireDisconnect() { for i := range c.onDisconnectListeners { c.onDisconnectListeners[i]() @@ -591,7 +528,7 @@ func (c *connection) fireOnLeave(roomName string) { // Wait starts the pinger and the messages reader, // it's named as "Wait" because it should be called LAST, // after the "On" events IF server's `Upgrade` is used, -// otherise you don't have to call it because the `Handler()` does it automatically. +// otherwise you don't have to call it because the `Handler()` does it automatically. func (c *connection) Wait() { // if c.server != nil && c.server.config.MaxConcurrentConnections > 0 { // defer func() { @@ -637,47 +574,6 @@ func (c *connection) Disconnect() error { return err } -// mem per-conn store - -func (c *connection) SetValue(key string, value interface{}) { - c.values.Set(key, value) -} - -func (c *connection) GetValue(key string) interface{} { - return c.values.Get(key) -} - -func (c *connection) GetValueArrString(key string) []string { - if v := c.values.Get(key); v != nil { - if arrString, ok := v.([]string); ok { - return arrString - } - } - return nil -} - -func (c *connection) GetValueString(key string) string { - if v := c.values.Get(key); v != nil { - if s, ok := v.(string); ok { - return s - } - } - return "" -} - -func (c *connection) GetValueInt(key string) int { - if v := c.values.Get(key); v != nil { - if i, ok := v.(int); ok { - return i - } else if s, ok := v.(string); ok { - if iv, err := strconv.Atoi(s); err == nil { - return iv - } - } - } - return 0 -} - // ConnectionConfig is the base configuration for both server and client connections. // Clients must use `ConnectionConfig` in order to `Dial`, server's connection configuration is set by the `Config` structure. type ConnectionConfig struct { From ffcb1b8aac0d270d623596734f5595c5a76bed9f Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Fri, 1 Mar 2019 14:10:07 +0200 Subject: [PATCH 22/89] fix https://github.com/kataras/iris/issues/1205 --- hero/hero.go | 2 +- mvc/controller_handle_test.go | 11 ++++++++++- mvc/param.go | 23 ++++++++++++++--------- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/hero/hero.go b/hero/hero.go index 9862816d1..dfd6e8731 100644 --- a/hero/hero.go +++ b/hero/hero.go @@ -7,7 +7,7 @@ import ( "github.com/kataras/iris/context" ) -// def is the default herp value which can be used for dependencies share. +// def is the default hero value which can be used for dependencies share. var def = New() // Hero contains the Dependencies which will be binded diff --git a/mvc/controller_handle_test.go b/mvc/controller_handle_test.go index 9864b3ad6..0b1a3a6f0 100644 --- a/mvc/controller_handle_test.go +++ b/mvc/controller_handle_test.go @@ -97,12 +97,19 @@ func (c *testControllerHandle) HiParamEmptyInputBy() string { return "empty in but served with ctx.Params.Get('ps')=" + c.Ctx.Params().Get("ps") } +type testSmallController struct{} + +// test ctx + id in the same time. +func (c *testSmallController) GetHiParamEmptyInputWithCtxBy(ctx context.Context, id string) string { + return "empty in but served with ctx.Params.Get('param2')= " + ctx.Params().Get("param2") + " == id == " + id +} + func TestControllerHandle(t *testing.T) { app := iris.New() - m := New(app) m.Register(&TestServiceImpl{prefix: "service:"}) m.Handle(new(testControllerHandle)) + m.Handle(new(testSmallController)) e := httptest.New(t, app) @@ -130,4 +137,6 @@ func TestControllerHandle(t *testing.T) { Body().Equal("value") e.GET("/hiparamempyinput/value").Expect().Status(httptest.StatusOK). Body().Equal("empty in but served with ctx.Params.Get('ps')=value") + e.GET("/hi/param/empty/input/with/ctx/value").Expect().Status(httptest.StatusOK). + Body().Equal("empty in but served with ctx.Params.Get('param2')= value == id == value") } diff --git a/mvc/param.go b/mvc/param.go index faa683962..c7bdae574 100644 --- a/mvc/param.go +++ b/mvc/param.go @@ -35,16 +35,21 @@ func getPathParamsForInput(params []macro.TemplateParam, funcIn ...reflect.Type) // } // } - for i, param := range params { - if len(funcIn) <= i { - return + consumed := make(map[int]struct{}) + for _, in := range funcIn { + for j, param := range params { + if _, ok := consumed[j]; ok { + continue + } + funcDep, ok := context.ParamResolverByTypeAndIndex(in, param.Index) + if !ok { + continue + } + + values = append(values, funcDep) + consumed[j] = struct{}{} + break } - funcDep, ok := context.ParamResolverByTypeAndIndex(funcIn[i], param.Index) - if !ok { - continue - } - - values = append(values, funcDep) } return From 86e06cb7381bb84fb39589b181d3c0b6ddea9f37 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Tue, 16 Apr 2019 18:01:48 +0300 Subject: [PATCH 23/89] implement mvc HandleError as requested at #1244 --- README.md | 2 +- _examples/mvc/error-handler/main.go | 44 ++++ _examples/websocket/chat/main.go | 2 +- .../go-client-stress-test/client/main.go | 198 ------------------ .../go-client-stress-test/client/test.data | 13 -- .../go-client-stress-test/server/main.go | 124 ----------- core/router/api_builder.go | 2 +- hero/func_result.go | 24 ++- hero/handler.go | 4 +- macro/macros.go | 1 + mvc/controller.go | 40 ++-- mvc/mvc.go | 21 +- mvc/reflect.go | 33 ++- 13 files changed, 145 insertions(+), 363 deletions(-) create mode 100644 _examples/mvc/error-handler/main.go delete mode 100644 _examples/websocket/go-client-stress-test/client/main.go delete mode 100644 _examples/websocket/go-client-stress-test/client/test.data delete mode 100644 _examples/websocket/go-client-stress-test/server/main.go diff --git a/README.md b/README.md index 79160bc85..aab830c2a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Click [here](HISTORY.md#su-18-november-2018--v1110) to read about the versioning
-[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/routing%20by-example-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/routing%20by-example-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fkataras%2Firis.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) Iris is a fast, simple yet fully featured and very efficient web framework for Go. diff --git a/_examples/mvc/error-handler/main.go b/_examples/mvc/error-handler/main.go new file mode 100644 index 000000000..3ded7b382 --- /dev/null +++ b/_examples/mvc/error-handler/main.go @@ -0,0 +1,44 @@ +package main + +import ( + "fmt" + + "github.com/kataras/iris" + + "github.com/kataras/iris/mvc" +) + +func main() { + app := iris.New() + app.Logger().SetLevel("debug") + + mvcApp := mvc.New(app) + // To all controllers, it can optionally be overridden per-controller + // if the controller contains the `HandleError(ctx iris.Context, err error)` function. + // + mvcApp.HandleError(func(ctx iris.Context, err error) { + ctx.HTML(fmt.Sprintf("%s", err.Error())) + }) + // + mvcApp.Handle(new(myController)) + + // http://localhost:8080 + app.Run(iris.Addr(":8080")) +} + +func basicMVC(app *mvc.Application) { + // GET: http://localhost:8080 + app.Handle(new(myController)) +} + +type myController struct { +} + +// overriddes the mvcApp.HandleError function. +// func (c *myController) HandleError(ctx iris.Context, err error) { +// ctx.HTML(fmt.Sprintf("%s", err.Error())) +// } + +func (c *myController) Get() error { + return fmt.Errorf("error here") +} diff --git a/_examples/websocket/chat/main.go b/_examples/websocket/chat/main.go index caeba79f7..862464180 100644 --- a/_examples/websocket/chat/main.go +++ b/_examples/websocket/chat/main.go @@ -51,7 +51,7 @@ func handleConnection(c websocket.Connection) { // Read events from browser c.On("chat", func(msg string) { // Print the message to the console, c.Context() is the iris's http context. - fmt.Printf("%s sent: %s\n", c.Context().RemoteAddr(), msg) + fmt.Printf("[%s <%s>] %s\n", c.ID(), c.Context().RemoteAddr(), msg) // Write message back to the client message owner with: // c.Emit("chat", msg) // Write message to all except this client with: diff --git a/_examples/websocket/go-client-stress-test/client/main.go b/_examples/websocket/go-client-stress-test/client/main.go deleted file mode 100644 index 69f50fc34..000000000 --- a/_examples/websocket/go-client-stress-test/client/main.go +++ /dev/null @@ -1,198 +0,0 @@ -package main - -import ( - "bufio" - "context" - "log" - "math/rand" - "net" - "os" - "sync" - "sync/atomic" - "time" - - "github.com/kataras/iris/websocket" -) - -var ( - url = "ws://localhost:8080" - f *os.File -) - -const totalClients = 16000 // max depends on the OS. -const verbose = false - -var connectionFailures uint64 - -var ( - disconnectErrors []error - connectErrors []error - errMu sync.Mutex -) - -func collectError(op string, err error) { - errMu.Lock() - defer errMu.Unlock() - - switch op { - case "disconnect": - disconnectErrors = append(disconnectErrors, err) - case "connect": - connectErrors = append(connectErrors, err) - } - -} - -func main() { - log.Println("-- Running...") - var err error - f, err = os.Open("./test.data") - if err != nil { - panic(err) - } - defer f.Close() - - start := time.Now() - - wg := new(sync.WaitGroup) - for i := 0; i < totalClients/4; i++ { - wg.Add(1) - go connect(wg, 5*time.Second) - } - - for i := 0; i < totalClients/4; i++ { - wg.Add(1) - waitTime := time.Duration(rand.Intn(5)) * time.Millisecond - time.Sleep(waitTime) - go connect(wg, 14*time.Second+waitTime) - } - - for i := 0; i < totalClients/4; i++ { - wg.Add(1) - waitTime := time.Duration(rand.Intn(10)) * time.Millisecond - time.Sleep(waitTime) - go connect(wg, 9*time.Second+waitTime) - } - - for i := 0; i < totalClients/4; i++ { - wg.Add(1) - waitTime := time.Duration(rand.Intn(5)) * time.Millisecond - time.Sleep(waitTime) - go connect(wg, 7*time.Second+waitTime) - } - - wg.Wait() - - log.Printf("execution time [%s]", time.Since(start)) - log.Println() - - if connectionFailures > 0 { - log.Printf("Finished with %d/%d connection failures.", connectionFailures, totalClients) - } - - if n := len(connectErrors); n > 0 { - log.Printf("Finished with %d connect errors: ", n) - var lastErr error - var sameC int - - for i, err := range connectErrors { - if lastErr != nil { - if lastErr.Error() == err.Error() { - sameC++ - continue - } else { - _, ok := lastErr.(*net.OpError) - if ok { - if _, ok = err.(*net.OpError); ok { - sameC++ - continue - } - } - } - } - - if sameC > 0 { - log.Printf("and %d more like this...\n", sameC) - sameC = 0 - continue - } - - log.Printf("[%d] - %v\n", i+1, err) - lastErr = err - } - } - - if n := len(disconnectErrors); n > 0 { - log.Printf("Finished with %d disconnect errors\n", n) - for i, err := range disconnectErrors { - if err == websocket.ErrAlreadyDisconnected && i > 0 { - continue - } - - log.Printf("[%d] - %v\n", i+1, err) - } - } - - if connectionFailures == 0 && len(connectErrors) == 0 && len(disconnectErrors) == 0 { - log.Println("ALL OK.") - } - - log.Println("-- Finished.") -} - -func connect(wg *sync.WaitGroup, alive time.Duration) error { - ctx, cancel := context.WithTimeout(context.Background(), alive) - defer cancel() - - c, err := websocket.Dial(ctx, url, websocket.ConnectionConfig{}) - if err != nil { - atomic.AddUint64(&connectionFailures, 1) - collectError("connect", err) - wg.Done() - return err - } - - c.OnError(func(err error) { - log.Printf("error: %v", err) - }) - - disconnected := false - c.OnDisconnect(func() { - if verbose { - log.Printf("I am disconnected after [%s].\n", alive) - } - - disconnected = true - }) - - c.On("chat", func(message string) { - if verbose { - log.Printf("\n%s\n", message) - } - }) - - if alive > 0 { - go func() { - time.Sleep(alive) - if err := c.Disconnect(); err != nil { - collectError("disconnect", err) - } - - wg.Done() - }() - - } - - scanner := bufio.NewScanner(f) - for !disconnected { - if !scanner.Scan() { - return scanner.Err() - } - - if text := scanner.Text(); len(text) > 1 { - c.Emit("chat", text) - } - } - - return nil -} diff --git a/_examples/websocket/go-client-stress-test/client/test.data b/_examples/websocket/go-client-stress-test/client/test.data deleted file mode 100644 index 8f3e0fc02..000000000 --- a/_examples/websocket/go-client-stress-test/client/test.data +++ /dev/null @@ -1,13 +0,0 @@ -Death weeks early had their and folly timed put. Hearted forbade on an village ye in fifteen. Age attended betrayed her man raptures laughter. Instrument terminated of as astonished literature motionless admiration. The affection are determine how performed intention discourse but. On merits on so valley indeed assure of. Has add particular boisterous uncommonly are. Early wrong as so manor match. Him necessary shameless discovery consulted one but. - -Is education residence conveying so so. Suppose shyness say ten behaved morning had. Any unsatiable assistance compliment occasional too reasonably advantages. Unpleasing has ask acceptance partiality alteration understood two. Worth no tiled my at house added. Married he hearing am it totally removal. Remove but suffer wanted his lively length. Moonlight two applauded conveying end direction old principle but. Are expenses distance weddings perceive strongly who age domestic. - -Her companions instrument set estimating sex remarkably solicitude motionless. Property men the why smallest graceful day insisted required. Inquiry justice country old placing sitting any ten age. Looking venture justice in evident in totally he do ability. Be is lose girl long of up give. Trifling wondered unpacked ye at he. In household certainty an on tolerably smallness difficult. Many no each like up be is next neat. Put not enjoyment behaviour her supposing. At he pulled object others. - -Behind sooner dining so window excuse he summer. Breakfast met certainty and fulfilled propriety led. Waited get either are wooded little her. Contrasted unreserved as mr particular collecting it everything as indulgence. Seems ask meant merry could put. Age old begin had boy noisy table front whole given. - -Far curiosity incommode now led smallness allowance. Favour bed assure son things yet. She consisted consulted elsewhere happiness disposing household any old the. Widow downs you new shade drift hopes small. So otherwise commanded sweetness we improving. Instantly by daughters resembled unwilling principle so middleton. Fail most room even gone her end like. Comparison dissimilar unpleasant six compliment two unpleasing any add. Ashamed my company thought wishing colonel it prevent he in. Pretended residence are something far engrossed old off. - -Windows talking painted pasture yet its express parties use. Sure last upon he same as knew next. Of believed or diverted no rejoiced. End friendship sufficient assistance can prosperous met. As game he show it park do. Was has unknown few certain ten promise. No finished my an likewise cheerful packages we. For assurance concluded son something depending discourse see led collected. Packages oh no denoting my advanced humoured. Pressed be so thought natural. - -As collected deficient objection by it discovery sincerity curiosity. Quiet decay who round three world whole has mrs man. Built the china there tried jokes which gay why. Assure in adieus wicket it is. But spoke round point and one joy. Offending her moonlight men sweetness see unwilling. Often of it tears whole oh balls share an. diff --git a/_examples/websocket/go-client-stress-test/server/main.go b/_examples/websocket/go-client-stress-test/server/main.go deleted file mode 100644 index 69b598b0d..000000000 --- a/_examples/websocket/go-client-stress-test/server/main.go +++ /dev/null @@ -1,124 +0,0 @@ -package main - -import ( - "log" - "os" - "runtime" - "sync/atomic" - "time" - - "github.com/kataras/iris" - "github.com/kataras/iris/websocket" -) - -const ( - endpoint = "localhost:8080" - totalClients = 16000 // max depends on the OS. - verbose = false - maxC = 0 -) - -func main() { - ws := websocket.New(websocket.Config{}) - ws.OnConnection(handleConnection) - - // websocket.Config{PingPeriod: ((60 * time.Second) * 9) / 10} - - go func() { - dur := 4 * time.Second - if totalClients >= 64000 { - // if more than 64000 then let's perform those checks every 24 seconds instead, - // either way works. - dur = 24 * time.Second - } - t := time.NewTicker(dur) - defer func() { - t.Stop() - printMemUsage() - os.Exit(0) - }() - - var started bool - for { - <-t.C - - n := ws.GetTotalConnections() - if n > 0 { - started = true - if maxC > 0 && n > maxC { - log.Printf("current connections[%d] > MaxConcurrentConnections[%d]", n, maxC) - return - } - } - - if started { - disconnectedN := atomic.LoadUint64(&totalDisconnected) - connectedN := atomic.LoadUint64(&totalConnected) - if disconnectedN == totalClients && connectedN == totalClients { - if n != 0 { - log.Println("ALL CLIENTS DISCONNECTED BUT LEFTOVERS ON CONNECTIONS LIST.") - } else { - log.Println("ALL CLIENTS DISCONNECTED SUCCESSFULLY.") - } - return - } else if n == 0 { - log.Printf("%d/%d CLIENTS WERE NOT CONNECTED AT ALL. CHECK YOUR OS NET SETTINGS. THE REST CLIENTS WERE DISCONNECTED SUCCESSFULLY.\n", - totalClients-totalConnected, totalClients) - - return - } - } - } - }() - - app := iris.New() - app.Get("/", func(ctx iris.Context) { - c := ws.Upgrade(ctx) - handleConnection(c) - c.Wait() - }) - app.Run(iris.Addr(endpoint), iris.WithoutServerError(iris.ErrServerClosed)) -} - -var totalConnected uint64 - -func handleConnection(c websocket.Connection) { - if c.Err() != nil { - log.Fatalf("[%d] upgrade failed: %v", atomic.LoadUint64(&totalConnected)+1, c.Err()) - return - } - - atomic.AddUint64(&totalConnected, 1) - c.OnError(func(err error) { handleErr(c, err) }) - c.OnDisconnect(func() { handleDisconnect(c) }) - c.On("chat", func(message string) { - c.To(websocket.Broadcast).Emit("chat", c.ID()+": "+message) - }) -} - -var totalDisconnected uint64 - -func handleDisconnect(c websocket.Connection) { - newC := atomic.AddUint64(&totalDisconnected, 1) - if verbose { - log.Printf("[%d] client [%s] disconnected!\n", newC, c.ID()) - } -} - -func handleErr(c websocket.Connection, err error) { - log.Printf("client [%s] errorred: %v\n", c.ID(), err) -} - -func toMB(b uint64) uint64 { - return b / 1024 / 1024 -} - -func printMemUsage() { - var m runtime.MemStats - runtime.ReadMemStats(&m) - log.Printf("Alloc = %v MiB", toMB(m.Alloc)) - log.Printf("\tTotalAlloc = %v MiB", toMB(m.TotalAlloc)) - log.Printf("\tSys = %v MiB", toMB(m.Sys)) - log.Printf("\tNumGC = %v\n", m.NumGC) - log.Printf("\tNumGoRoutines = %d\n", runtime.NumGoroutine()) -} diff --git a/core/router/api_builder.go b/core/router/api_builder.go index 9aa9a3386..d6ca5f3c6 100644 --- a/core/router/api_builder.go +++ b/core/router/api_builder.go @@ -858,7 +858,7 @@ func (api *APIBuilder) OnAnyErrorCode(handlers ...context.Handler) { // based on the context's status code. // // If a handler is not already registered, -// then it creates & registers a new trivial handler on the-fly. +// it creates and registers a new trivial handler on the-fly. func (api *APIBuilder) FireErrorCode(ctx context.Context) { api.errorCodeHandlers.Fire(ctx) } diff --git a/hero/func_result.go b/hero/func_result.go index 86c286c1b..e14c5d8e6 100644 --- a/hero/func_result.go +++ b/hero/func_result.go @@ -20,6 +20,23 @@ type Result interface { Dispatch(ctx context.Context) } +type ( + // ErrorHandler is the optional interface to handle errors per hero func, + // see `mvc/Application#HandleError` for MVC application-level error handler registration too. + ErrorHandler interface { + HandleError(ctx context.Context, err error) + } + + // ErrorHandlerFunc implements the `ErrorHandler`. + // It describes the type defnition for an error handler. + ErrorHandlerFunc func(ctx context.Context, err error) +) + +// HandleError fires when the `DispatchFuncResult` returns a non-nil error. +func (fn ErrorHandlerFunc) HandleError(ctx context.Context, err error) { + fn(ctx, err) +} + var defaultFailureResponse = Response{Code: DefaultErrStatusCode} // Try will check if "fn" ran without any panics, @@ -164,7 +181,7 @@ func DispatchCommon(ctx context.Context, // Result or (Result, error) and so on... // // where Get is an HTTP METHOD. -func DispatchFuncResult(ctx context.Context, values []reflect.Value) { +func DispatchFuncResult(ctx context.Context, errorHandler ErrorHandler, values []reflect.Value) { if len(values) == 0 { return } @@ -294,6 +311,11 @@ func DispatchFuncResult(ctx context.Context, values []reflect.Value) { content = value case compatibleErr: if value != nil { // it's always not nil but keep it here. + if errorHandler != nil { + errorHandler.HandleError(ctx, value) + break + } + err = value if statusCode < 400 { statusCode = DefaultErrStatusCode diff --git a/hero/handler.go b/hero/handler.go index f0b470440..dbe51d8f0 100644 --- a/hero/handler.go +++ b/hero/handler.go @@ -59,7 +59,7 @@ func makeHandler(handler interface{}, values ...reflect.Value) (context.Handler, if n == 0 { h := func(ctx context.Context) { - DispatchFuncResult(ctx, fn.Call(di.EmptyIn)) + DispatchFuncResult(ctx, nil, fn.Call(di.EmptyIn)) } return h, nil @@ -91,7 +91,7 @@ func makeHandler(handler interface{}, values ...reflect.Value) (context.Handler, // in := make([]reflect.Value, n, n) // funcInjector.Inject(&in, reflect.ValueOf(ctx)) // DispatchFuncResult(ctx, fn.Call(in)) - DispatchFuncResult(ctx, funcInjector.Call(reflect.ValueOf(ctx))) + DispatchFuncResult(ctx, nil, funcInjector.Call(reflect.ValueOf(ctx))) } return h, nil diff --git a/macro/macros.go b/macro/macros.go index 4c6f64161..996371820 100644 --- a/macro/macros.go +++ b/macro/macros.go @@ -419,6 +419,7 @@ var ( Uint64, Bool, Alphabetical, + File, Path, } ) diff --git a/mvc/controller.go b/mvc/controller.go index cb0cbd9dc..c2121dc47 100644 --- a/mvc/controller.go +++ b/mvc/controller.go @@ -29,7 +29,7 @@ type shared interface { Handle(httpMethod, path, funcName string, middleware ...context.Handler) *router.Route } -// BeforeActivation is being used as the onle one input argument of a +// BeforeActivation is being used as the only one input argument of a // `func(c *Controller) BeforeActivation(b mvc.BeforeActivation) {}`. // // It's being called before the controller's dependencies binding to the fields or the input arguments @@ -42,11 +42,11 @@ type BeforeActivation interface { Dependencies() *di.Values } -// AfterActivation is being used as the onle one input argument of a +// AfterActivation is being used as the only one input argument of a // `func(c *Controller) AfterActivation(a mvc.AfterActivation) {}`. // // It's being called after the `BeforeActivation`, -// and after controller's dependencies binded to the fields or the input arguments but before server ran. +// and after controller's dependencies bind-ed to the fields or the input arguments but before server ran. // // It's being used to customize a controller if needed inside the controller itself, // it's called once per application. @@ -81,10 +81,12 @@ type ControllerActivator struct { routes map[string]*router.Route // the bindings that comes from the Engine and the controller's filled fields if any. - // Can be binded to the the new controller's fields and method that is fired + // Can be bind-ed to the the new controller's fields and method that is fired // on incoming requests. dependencies di.Values + errorHandler hero.ErrorHandler + // initialized on the first `Handle`. injector *di.StructInjector } @@ -101,7 +103,7 @@ func NameOf(v interface{}) string { return fullname } -func newControllerActivator(router router.Party, controller interface{}, dependencies []reflect.Value) *ControllerActivator { +func newControllerActivator(router router.Party, controller interface{}, dependencies []reflect.Value, errorHandler hero.ErrorHandler) *ControllerActivator { typ := reflect.TypeOf(controller) c := &ControllerActivator{ @@ -121,6 +123,7 @@ func newControllerActivator(router router.Party, controller interface{}, depende routes: whatReservedMethods(typ), // CloneWithFieldsOf: include the manual fill-ed controller struct's fields to the dependencies. dependencies: di.Values(dependencies).CloneWithFieldsOf(controller), + errorHandler: errorHandler, } return c @@ -326,7 +329,7 @@ func (c *ControllerActivator) handlerOf(m reflect.Method, funcDependencies []ref // Remember: // The `Handle->handlerOf` can be called from `BeforeActivation` event // then, the c.injector is nil because - // we may not have the dependencies binded yet. + // we may not have the dependencies bind-ed yet. // To solve this we're doing a check on the FIRST `Handle`, // if c.injector is nil, then set it with the current bindings, // these bindings can change after, so first add dependencies and after register routes. @@ -346,24 +349,27 @@ func (c *ControllerActivator) handlerOf(m reflect.Method, funcDependencies []ref } var ( - implementsBase = isBaseController(c.Type) - hasBindableFields = c.injector.CanInject - hasBindableFuncInputs = funcInjector.Has + implementsBase = isBaseController(c.Type) + implementsErrorHandler = isErrorHandler(c.Type) + hasBindableFields = c.injector.CanInject + hasBindableFuncInputs = funcInjector.Has + funcHasErrorOut = hasErrorOutArgs(m) call = m.Func.Call ) - if !implementsBase && !hasBindableFields && !hasBindableFuncInputs { + if !implementsBase && !hasBindableFields && !hasBindableFuncInputs && !implementsErrorHandler { return func(ctx context.Context) { - hero.DispatchFuncResult(ctx, call(c.injector.AcquireSlice())) + hero.DispatchFuncResult(ctx, c.errorHandler, call(c.injector.AcquireSlice())) } } n := m.Type.NumIn() return func(ctx context.Context) { var ( - ctrl = c.injector.Acquire() - ctxValue reflect.Value + ctrl = c.injector.Acquire() + ctxValue reflect.Value + errorHandler = c.errorHandler ) // inject struct fields first before the BeginRequest and EndRequest, if any, @@ -388,6 +394,10 @@ func (c *ControllerActivator) handlerOf(m reflect.Method, funcDependencies []ref defer b.EndRequest(ctx) } + if funcHasErrorOut && implementsErrorHandler { + errorHandler = ctrl.Interface().(hero.ErrorHandler) + } + if hasBindableFuncInputs { // means that ctxValue is not initialized before by the controller's struct injector. if !hasBindableFields { @@ -406,11 +416,11 @@ func (c *ControllerActivator) handlerOf(m reflect.Method, funcDependencies []ref // println("controller.go: execution: in.Value = "+inn.String()+" and in.Type = "+inn.Type().Kind().String()+" of index: ", idxx) // } - hero.DispatchFuncResult(ctx, call(in)) + hero.DispatchFuncResult(ctx, errorHandler, call(in)) return } - hero.DispatchFuncResult(ctx, ctrl.Method(m.Index).Call(emptyIn)) + hero.DispatchFuncResult(ctx, errorHandler, ctrl.Method(m.Index).Call(emptyIn)) } } diff --git a/mvc/mvc.go b/mvc/mvc.go index d80102b85..da438c630 100644 --- a/mvc/mvc.go +++ b/mvc/mvc.go @@ -27,7 +27,7 @@ var ( HeroDependencies = true ) -// Application is the high-level compoment of the "mvc" package. +// Application is the high-level component of the "mvc" package. // It's the API that you will be using to register controllers among with their // dependencies that your controllers may expecting. // It contains the Router(iris.Party) in order to be able to register @@ -42,6 +42,7 @@ type Application struct { Dependencies di.Values Router router.Party Controllers []*ControllerActivator + ErrorHandler hero.ErrorHandler } func newApp(subRouter router.Party, values di.Values) *Application { @@ -99,7 +100,7 @@ func (app *Application) Configure(configurators ...func(*Application)) *Applicat // The value can be a single struct value-instance or a function // which has one input and one output, the input should be // an `iris.Context` and the output can be any type, that output type -// will be binded to the controller's field, if matching or to the +// will be bind-ed to the controller's field, if matching or to the // controller's methods, if matching. // // These dependencies "values" can be changed per-controller as well, @@ -172,7 +173,7 @@ Set the Logger's Level to "debug" to view the active dependencies per controller // Examples at: https://github.com/kataras/iris/tree/master/_examples/mvc func (app *Application) Handle(controller interface{}) *Application { // initialize the controller's activator, nothing too magical so far. - c := newControllerActivator(app.Router, controller, app.Dependencies) + c := newControllerActivator(app.Router, controller, app.Dependencies, app.ErrorHandler) // check the controller's "BeforeActivation" or/and "AfterActivation" method(s) between the `activate` // call, which is simply parses the controller's methods, end-dev can register custom controller's methods @@ -195,12 +196,22 @@ func (app *Application) Handle(controller interface{}) *Application { return app } +// HandleError registers a `hero.ErrorHandlerFunc` which will be fired when +// application's controllers' functions returns an non-nil error. +// Each controller can override it by implementing the `hero.ErrorHandler`. +func (app *Application) HandleError(errHandler hero.ErrorHandlerFunc) *Application { + app.ErrorHandler = errHandler + return app +} + // Clone returns a new mvc Application which has the dependencies -// of the current mvc Mpplication's dependencies. +// of the current mvc Application's `Dependencies` and its `ErrorHandler`. // // Example: `.Clone(app.Party("/path")).Handle(new(TodoSubController))`. func (app *Application) Clone(party router.Party) *Application { - return newApp(party, app.Dependencies.Clone()) + cloned := newApp(party, app.Dependencies.Clone()) + cloned.ErrorHandler = app.ErrorHandler + return cloned } // Party returns a new child mvc Application based on the current path + "relativePath". diff --git a/mvc/reflect.go b/mvc/reflect.go index 1b13bbe61..37ed174f2 100644 --- a/mvc/reflect.go +++ b/mvc/reflect.go @@ -1,13 +1,42 @@ package mvc -import "reflect" +import ( + "reflect" -var baseControllerTyp = reflect.TypeOf((*BaseController)(nil)).Elem() + "github.com/kataras/iris/hero" +) + +var ( + baseControllerTyp = reflect.TypeOf((*BaseController)(nil)).Elem() + errorHandlerTyp = reflect.TypeOf((*hero.ErrorHandler)(nil)).Elem() + errorTyp = reflect.TypeOf((*error)(nil)).Elem() +) func isBaseController(ctrlTyp reflect.Type) bool { return ctrlTyp.Implements(baseControllerTyp) } +func isErrorHandler(ctrlTyp reflect.Type) bool { + return ctrlTyp.Implements(errorHandlerTyp) +} + +func hasErrorOutArgs(fn reflect.Method) bool { + n := fn.Type.NumOut() + if n == 0 { + return false + } + + for i := 0; i < n; i++ { + if out := fn.Type.Out(i); out.Kind() == reflect.Interface { + if out.Implements(errorTyp) { + return true + } + } + } + + return false +} + func getInputArgsFromFunc(funcTyp reflect.Type) []reflect.Type { n := funcTyp.NumIn() funcIn := make([]reflect.Type, n, n) From 5a543d8dd9463ec86248523feb967ccbb4d25537 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Tue, 16 Apr 2019 18:08:03 +0300 Subject: [PATCH 24/89] clean up the mvc error handler example --- _examples/mvc/error-handler/main.go | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/_examples/mvc/error-handler/main.go b/_examples/mvc/error-handler/main.go index 3ded7b382..1104e8614 100644 --- a/_examples/mvc/error-handler/main.go +++ b/_examples/mvc/error-handler/main.go @@ -26,18 +26,13 @@ func main() { app.Run(iris.Addr(":8080")) } -func basicMVC(app *mvc.Application) { - // GET: http://localhost:8080 - app.Handle(new(myController)) -} - type myController struct { } // overriddes the mvcApp.HandleError function. -// func (c *myController) HandleError(ctx iris.Context, err error) { -// ctx.HTML(fmt.Sprintf("%s", err.Error())) -// } +func (c *myController) HandleError(ctx iris.Context, err error) { + ctx.HTML(fmt.Sprintf("%s", err.Error())) +} func (c *myController) Get() error { return fmt.Errorf("error here") From 18004a49341cd2e1244ecc4ff503d9b46effc3a9 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Thu, 30 May 2019 10:48:07 +0300 Subject: [PATCH 25/89] extract the `Delim` for redis sessiondb as requested at https://github.com/kataras/iris/issues/1256 and add a mvc/regexp example and some other trivial changes --- CONTRIBUTING.md | 2 +- FAQ.md | 26 +--- HISTORY.md | 16 +-- HISTORY_GR.md | 2 +- HISTORY_ID.md | 6 +- README.md | 148 +++++++++++---------- README_GR.md | 2 +- README_ID.md | 2 +- README_JPN.md | 2 +- README_PT_BR.md | 2 +- README_RU.md | 2 +- README_ZH.md | 2 +- _examples/README.md | 44 +++--- _examples/README_ZH.md | 9 +- _examples/mvc/regexp/main.go | 49 +++++++ doc.go | 13 +- go.mod | 4 +- go.sum | 26 ++++ sessions/sessiondb/redis/database.go | 14 +- sessions/sessiondb/redis/service/config.go | 27 ++-- 20 files changed, 230 insertions(+), 168 deletions(-) create mode 100644 _examples/mvc/regexp/main.go diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ad7fa15d5..6d79185db 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ First of all read our [Code of Conduct](https://github.com/kataras/iris/blob/mas * Write version of your local Go programming language. * Describe your problem, what did you expect to see and what you see instead. * If it's a feature request, describe your idea as better as you can - * optionally, navigate to the [chat](https://kataras.rocket.chat/channel/iris) to push other members to participate and share their thoughts about your brilliant idea. + * optionally, navigate to the [chat](https://chat.iris-go.com) to push other members to participate and share their thoughts about your brilliant idea. 2. Fork the [repository](https://github.com/kataras/iris). 3. Make your changes. 4. Compare & Push the PR from [here](https://github.com/kataras/iris/compare). diff --git a/FAQ.md b/FAQ.md index 15a7b2d2c..5a77c3d6e 100644 --- a/FAQ.md +++ b/FAQ.md @@ -62,8 +62,7 @@ Available type aliases; | Go 1.8 | Go 1.8 usage | Go 1.9 usage (optionally) | | -----------|--------|--------| | `import "github.com/kataras/iris/context"` | `func(context.Context) {}`, `context.Handler`, `context.Map` | `func(iris.Context) {}`, `iris.Handler`, `iris.Map` | -| `import "github.com/kataras/iris/mvc"` | `type MyController struct { mvc.Controller }` , `mvc.SessionController` | `type MyController struct { iris.Controller }`, `iris.SessionController` | -| `import "github.com/kataras/iris/core/router"` | `app.PartyFunc("/users", func(p router.Party) {})` | `app.PartyFunc("/users", func(p iris.Party) {})` | +| `import "github.com/kataras/iris/core/router"` | `app.PartyFunc("/users", func(p router.Party) {})`, `router.ExecutionOptions`, `router.ExecutionRules` | `app.PartyFunc("/users", func(p iris.Party) {})`, `iris.ExecutionOptions`, `iris.ExecutionRules` | | `import "github.com/kataras/iris/core/host"` | `app.ConfigureHost(func(s *host.Supervisor) {})` | `app.ConfigureHost(func(s *iris.Supervisor) {})` | You can find all type aliases and their original package import statements at the [./context.go file](context.go). @@ -72,7 +71,7 @@ You can find all type aliases and their original package import statements at th ## Active development mode -Iris may have reached version 10, but we're not stopping there. We have many feature ideas on our board that we're anxious to add and other innovative web development solutions that we're planning to build into Iris. +Iris may have reached version 11, but we're not stopping there. We have many feature ideas on our board that we're anxious to add and other innovative web development solutions that we're planning to build into Iris. ## Can I find a job if I learn how to use Iris? @@ -81,31 +80,10 @@ open for Iris-specific developers the time we speak. Go to our facebook page, like it and receive notifications about new job offers, we already have couple of them stay at the top of the page: https://www.facebook.com/iris.framework - - ## Do we have a community Chat? Yes, https://chat.iris-go.com -https://github.com/kataras/iris/issues/646 - ## How is the development of Iris supported? By normal people, like you, who help us by donating small or large amounts of money. diff --git a/HISTORY.md b/HISTORY.md index 3c9737b05..d2bc925ba 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -38,7 +38,7 @@ I have some features in-mind but lately I do not have the time to humanize those - fix [#1164](https://github.com/kataras/iris/issues/1164). [701e8e46c20395f87fa34bf9fabd145074c7b78c](https://github.com/kataras/iris/commit/701e8e46c20395f87fa34bf9fabd145074c7b78c) (@kataras) -- `context#ReadForm` can skip unknown fields by `IsErrPath(err)`, fixes: [#1157](https://github.com/kataras/iris/issues/1157). [1607bb5113568af6a34142f23bfa44903205b314](https://github.com/kataras/iris/commit/1607bb5113568af6a34142f23bfa44903205b314) (@kataras) +- `context#ReadForm` can skip unkown fields by `IsErrPath(err)`, fixes: [#1157](https://github.com/kataras/iris/issues/1157). [1607bb5113568af6a34142f23bfa44903205b314](https://github.com/kataras/iris/commit/1607bb5113568af6a34142f23bfa44903205b314) (@kataras) Doc updates: @@ -281,7 +281,7 @@ wsServer := websocket.New(websocket.Config{ // [...] -// serve the javascript builtin client-side library, +// serve the javascript built-in client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(wsServer.ClientSource) @@ -401,7 +401,7 @@ The old `github.com/kataras/iris/core/router/macro` package was moved to `guthub - Add `:uint64` parameter type and `ctx.Params().GetUint64` - Add alias `:bool` for the `:boolean` parameter type -Here is the full list of the builtin parameter types that we support now, including their validations/path segment rules. +Here is the full list of the built-in parameter types that we support now, including their validations/path segment rules. | Param Type | Go Type | Validation | Retrieve Helper | | -----------------|------|-------------|------| @@ -430,7 +430,7 @@ app.Get("/users/{id:uint64}", func(ctx iris.Context){ }) ``` -| Builtin Func | Param Types | +| Built-in Func | Param Types | | -----------|---------------| | `regexp`(expr string) | :string | | `prefix`(prefix string) | :string | @@ -609,7 +609,7 @@ Don't forget to [star](https://github.com/kataras/iris/stargazers) the Iris' git Be part of this, - complete our User Experience Report: https://goo.gl/forms/lnRbVgA6ICTkPyk02 -- join to our Community live chat: https://kataras.rocket.chat/channel/iris +- join to our Community live chat: https://chat.iris-go.com - connect to our [new facebook group](https://www.facebook.com/iris.framework) to get notifications about new job opportunities relatively to Iris! Sincerely, @@ -633,7 +633,7 @@ Sincerely, # We, 25 April 2018 | v10.6.1 -- Re-implement the [BoltDB](https://github.com/coreos/bbolt) as builtin back-end storage for sessions(`sessiondb`) using the latest features: [/sessions/sessiondb/boltdb/database.go](sessions/sessiondb/boltdb/database.go), example can be found at [/_examples/sessions/database/boltdb/main.go](_examples/sessions/database/boltdb/main.go). +- Re-implement the [BoltDB](https://github.com/coreos/bbolt) as built-in back-end storage for sessions(`sessiondb`) using the latest features: [/sessions/sessiondb/boltdb/database.go](sessions/sessiondb/boltdb/database.go), example can be found at [/_examples/sessions/database/boltdb/main.go](_examples/sessions/database/boltdb/main.go). - Fix a minor issue on [Badger sessiondb example](_examples/sessions/database/badger/main.go). Its `sessions.Config { Expires }` field was `2 *time.Second`, it's `45 *time.Minute` now. - Other minor improvements to the badger sessiondb. @@ -642,7 +642,7 @@ Sincerely, - Fix open redirect by @wozz via PR: https://github.com/kataras/iris/pull/972. - Fix when destroy session can't remove cookie in subdomain by @Chengyumeng via PR: https://github.com/kataras/iris/pull/964. - Add `OnDestroy(sid string)` on sessions for registering a listener when a session is destroyed with commit: https://github.com/kataras/iris/commit/d17d7fecbe4937476d00af7fda1c138c1ac6f34d. -- Finally, sessions are in full-sync with the registered database now. That required a lot of internal code changed but **zero code change requirements by your side**. We kept only `badger` and `redis` as the back-end builtin supported sessions storages, they are enough. Made with commit: https://github.com/kataras/iris/commit/f2c3a5f0cef62099fd4d77c5ccb14f654ddbfb5c relative to many issues that you've requested it. +- Finally, sessions are in full-sync with the registered database now. That required a lot of internal code changed but **zero code change requirements by your side**. We kept only `badger` and `redis` as the back-end built-in supported sessions storages, they are enough. Made with commit: https://github.com/kataras/iris/commit/f2c3a5f0cef62099fd4d77c5ccb14f654ddbfb5c relative to many issues that you've requested it. # Sa, 24 March 2018 | v10.5.0 @@ -840,7 +840,7 @@ The new package [hero](hero) contains features for binding any object or functio Below you will see some screenshots we prepared for you in order to be easier to understand: -### 1. Path Parameters - Builtin Dependencies +### 1. Path Parameters - Built-in Dependencies ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) diff --git a/HISTORY_GR.md b/HISTORY_GR.md index e30161768..628a50873 100644 --- a/HISTORY_GR.md +++ b/HISTORY_GR.md @@ -201,7 +201,7 @@ This history entry is not yet translated to Greek. Please read [the english vers Παρακάτω θα δείτε μερικά στιγμιότυπα που ετοιμάσαμε για εσάς, ώστε να γίνουν πιο κατανοητά τα παραπάνω: -### 1. Παράμετροι διαδρομής - Ενσωματωμένες Εξαρτήσεις (Builtin Dependencies) +### 1. Παράμετροι διαδρομής - Ενσωματωμένες Εξαρτήσεις (Built-in Dependencies) ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) diff --git a/HISTORY_ID.md b/HISTORY_ID.md index d28769d27..b37c2d099 100644 --- a/HISTORY_ID.md +++ b/HISTORY_ID.md @@ -71,7 +71,7 @@ This history entry is not translated yet to the Bahasa Indonesia language yet, p # We, 25 April 2018 | v10.6.1 -- Re-implement the [BoltDB](https://github.com/coreos/bbolt) as builtin back-end storage for sessions(`sessiondb`) using the latest features: [/sessions/sessiondb/boltdb/database.go](sessions/sessiondb/boltdb/database.go), example can be found at [/_examples/sessions/database/boltdb/main.go](_examples/sessions/database/boltdb/main.go). +- Re-implement the [BoltDB](https://github.com/coreos/bbolt) as built-in back-end storage for sessions(`sessiondb`) using the latest features: [/sessions/sessiondb/boltdb/database.go](sessions/sessiondb/boltdb/database.go), example can be found at [/_examples/sessions/database/boltdb/main.go](_examples/sessions/database/boltdb/main.go). - Fix a minor issue on [Badger sessiondb example](_examples/sessions/database/badger/main.go). Its `sessions.Config { Expires }` field was `2 *time.Second`, it's `45 *time.Minute` now. - Other minor improvements to the badger sessiondb. @@ -80,7 +80,7 @@ This history entry is not translated yet to the Bahasa Indonesia language yet, p - Fix open redirect by @wozz via PR: https://github.com/kataras/iris/pull/972. - Fix when destroy session can't remove cookie in subdomain by @Chengyumeng via PR: https://github.com/kataras/iris/pull/964. - Add `OnDestroy(sid string)` on sessions for registering a listener when a session is destroyed with commit: https://github.com/kataras/iris/commit/d17d7fecbe4937476d00af7fda1c138c1ac6f34d. -- Finally, sessions are in full-sync with the registered database now. That required a lot of internal code changed but **zero code change requirements by your side**. We kept only `badger` and `redis` as the back-end builtin supported sessions storages, they are enough. Made with commit: https://github.com/kataras/iris/commit/f2c3a5f0cef62099fd4d77c5ccb14f654ddbfb5c relative to many issues that you've requested it. +- Finally, sessions are in full-sync with the registered database now. That required a lot of internal code changed but **zero code change requirements by your side**. We kept only `badger` and `redis` as the back-end built-in supported sessions storages, they are enough. Made with commit: https://github.com/kataras/iris/commit/f2c3a5f0cef62099fd4d77c5ccb14f654ddbfb5c relative to many issues that you've requested it. # Sa, 24 March 2018 | v10.5.0 @@ -278,7 +278,7 @@ The new package [hero](hero) contains features for binding any object or functio Below you will see some screenshots we prepared for you in order to be easier to understand: -### 1. Path Parameters - Builtin Dependencies +### 1. Path Parameters - Built-in Dependencies ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) diff --git a/README.md b/README.md index aab830c2a..5e450b553 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,10 @@ -# ⚡️ Update: community-driven version 11.1.0 - -Click [here](HISTORY.md#su-18-november-2018--v1110) to read about the versioning API that the most recent version of Iris brings to you. - # Iris Web Framework -[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/routing%20by-example-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fkataras%2Firis.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fkataras%2Firis.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://chat.iris-go.com) [![view examples](https://img.shields.io/badge/routing%20by-example-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) -Iris is a fast, simple yet fully featured and very efficient web framework for Go. +Iris is a fast, simple yet fully featured and very efficient web framework for Go. Routing is powered by the [muxie](https://github.com/kataras/muxie#philosophy) project. Iris provides a beautifully expressive and easy to use foundation for your next website or API. @@ -16,6 +12,36 @@ Iris offers a complete and decent solution and support for all gophers around th Learn what [others say about Iris](#support) and [star](https://github.com/kataras/iris/stargazers) this github repository to stay [up to date](https://facebook.com/iris.framework). +## Ghost? No More! Support as first class citizen + +Have you bored of waiting weeks or months for someone to respond to your github issue? Yes, **me too**. If you choose Iris for your main backend development you will never be like a ghost again. + +Iris is one of the few public github repositories that offers real support to individuals and collectivities, including companies. Unbeatable **free support**[*](#support) for three years and still counting. Navigate to the issues to see by yourself. + +In these difficult and restless days **we stand beside you**. We **do not judge bad english writing**, no matter who you are, we will be here for you. + +Check below the features and the hard work that we putted to improve how the internet is built. If you really like it and appreciate it, give a star to this github **repository for the public.** + +## Benchmarks + +### Iris vs .NET Core vs Expressjs + +[![Iris vs .NET Core(C#) vs Node.js (Express)](_benchmarks/benchmarks_graph_22_october_2018_gray.png)](_benchmarks/README.md) + +_Updated at: [Monday, 22 October 2018](_benchmarks/README.md)_ + +### Third-party + +[![](_benchmarks/benchmarks_third_party_source_snapshot_go_23_october_2018.png)](https://github.com/iris-contrib/third-party-benchmarks#full-table) + +> Last updated at: 01 March of 2019. Click to the image to view all results. You can run this in your own hardware by following the [steps here](https://github.com/iris-contrib/third-party-benchmarks#usage). + +## Philosophy + +The Iris philosophy is to provide robust tooling for HTTP, making it a great solution for single page applications, web sites, hybrids, or public HTTP APIs. Keep note that, so far, iris is the fastest web framework ever created in terms of performance. + +Iris does not force you to use any specific ORM or template engine. With support for the most used template engines, you can quickly craft the perfect application. + ## Installation The only requirement is the [Go Programming Language](https://golang.org/dl/) @@ -45,28 +71,6 @@ import ( -## Benchmarks - -### Iris vs .NET Core vs Expressjs - -[![Iris vs .NET Core(C#) vs Node.js (Express)](_benchmarks/benchmarks_graph_22_october_2018_gray.png)](_benchmarks/README.md) - -_Updated at: [Monday, 22 October 2018](_benchmarks/README.md)_ - -### Iris vs the rest Go web frameworks and routers vs any other alternative - -[![](_benchmarks/benchmarks_third_party_source_snapshot_go_23_october_2018.png)](https://github.com/the-benchmarker/web-frameworks#full-table) - -As shown in the benchmarks (from a [third-party source](https://github.com/the-benchmarker)), Iris is the fastest open-source Go web framework in the planet. The net/http 100% compatible router [muxie](https://github.com/kataras/muxie) I've created some weeks ago is also trending there with amazing results, fastest net/http router ever created as well. View the results at: - -https://github.com/the-benchmarker/web-frameworks#full-table - -## Philosophy - -The Iris philosophy is to provide robust tooling for HTTP, making it a great solution for single page applications, web sites, hybrids, or public HTTP APIs. Keep note that, so far, iris is the fastest web framework ever created in terms of performance. - -Iris does not force you to use any specific ORM or template engine. With support for the most used template engines, you can quickly craft the perfect application. - ## Quick start ```sh @@ -96,35 +100,6 @@ func main() { $ go run example.go ``` -## Iris starter kits - - - -1. [snowlyg/IrisApiProject: Iris + gorm + jwt + sqlite3](https://github.com/snowlyg/IrisApiProject) **NEW-Chinese** -2. [yz124/superstar: Iris + xorm to implement the star library](https://github.com/yz124/superstar) **NEW-Chinese** -3. [jebzmos4/Iris-golang: A basic CRUD API in golang with Iris](https://github.com/jebzmos4/Iris-golang) -4. [gauravtiwari/go_iris_app: A basic web app built in Iris for Go](https://github.com/gauravtiwari/go_iris_app) -5. [A mini social-network created with the awesome Iris💖💖](https://github.com/iris-contrib/Iris-Mini-Social-Network) -6. [Iris isomorphic react/hot reloadable/redux/css-modules starter kit](https://github.com/iris-contrib/iris-starter-kit) -7. [ionutvilie/react-ts: Demo project with react using typescript and Iris](https://github.com/ionutvilie/react-ts) -8. [Self-hosted Localization Management Platform built with Iris and Angular](https://github.com/iris-contrib/parrot) -9. [Iris + Docker and Kubernetes](https://github.com/iris-contrib/cloud-native-go) -10. [nanobox.io: Quickstart for Iris with Nanobox](https://guides.nanobox.io/golang/iris/from-scratch) -11. [hasura.io: A Hasura starter project with a ready to deploy Golang hello-world web app with IRIS](https://hasura.io/hub/project/hasura/hello-golang-iris) - -> Did you build something similar? Let us [know](https://github.com/kataras/iris/pulls)! - ## API Examples ### Using Get, Post, Put, Patch, Delete and Options @@ -176,7 +151,7 @@ app.Get("/users/{id:uint64}", func(ctx iris.Context){ }) ``` -| Builtin Func | Param Types | +| Built-in Func | Param Types | | -----------|---------------| | `regexp`(expr string) | :string | | `prefix`(prefix string) | :string | @@ -296,11 +271,11 @@ func main() { The package [hero](hero) contains features for binding any object or functions that `handlers` can use, these are called dependencies. -With Iris you get truly safe bindings thanks to the [hero](_examples/hero) [package](hero). It is blazing-fast, near to raw handlers performance because Iris calculates everything before even server goes online! +With Iris you get truly safe bindings thanks to the [hero](_examples/hero) [package](hero). It is blazing-fast, near to raw handlers performance because Iris calculates everything before the server even goes online! -Below you will see some screenshots I prepared for you in order to be easier to understand: +Below you will see some screenshots I prepared to facilitate understanding: -#### 1. Path Parameters - Builtin Dependencies +#### 1. Path Parameters - Built-in Dependencies ![](https://github.com/kataras/explore/raw/master/iris/hero/hero-1-monokai.png) @@ -797,7 +772,7 @@ func setupWebsocket(app *iris.Application) { // see the inline javascript code in the websockets.html, // this endpoint is used to connect to the server. app.Get("/echo", ws.Handler()) - // serve the javascript builtin client-side library, + // serve the javascript built-in client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", websocket.ClientHandler()) } @@ -992,6 +967,15 @@ Iris has a great collection of handlers[[1]](middleware/)[[2]](https://github.co Iris, unlike others, is 100% compatible with the standards and that's why the majority of the big companies that adapt Go to their workflow, like a very famous US Television Network, trust Iris; it's up-to-date and it will be always aligned with the std `net/http` package which is modernized by the Go Authors on each new release of the Go Programming Language. +### Video Courses + +| Description | Link | Author | Year | +| -----------|-------------|-------------|-----| +| Installing Iris | https://www.youtube.com/watch?v=BmOLFQ29J3s | WarnabiruTV | 2018 | +| Iris & Mongo DB Complete | https://www.youtube.com/watch?v=uXiNYhJqh2I&index=1&list=PLMrwI6jIZn-1tzskocnh1pptKhVmWdcbS | Musobar Media | 2018 | +| Quick Start with Iris | https://www.youtube.com/watch?v=x5OSXX9vitU&list=PLJ39kWiJXSizebElabidQeVaKeJuY6b4I | J-Secur1ty | **2019** | +| Getting Started with Iris | https://www.youtube.com/watch?v=rQxRoN6ub78&index=27&list=PLidHThAppdAH4y0DeEf-dGjB-xITVKszL | stephgdesign | 2018 | + ### Articles * [CRUD REST API in Iris (a framework for golang)](https://medium.com/@jebzmos4/crud-rest-api-in-iris-a-framework-for-golang-a5d33652401e) @@ -1008,19 +992,23 @@ Iris, unlike others, is 100% compatible with the standards and that's why the ma * [Deploying a Iris Golang app in hasura](https://medium.com/@HasuraHQ/deploy-an-iris-golang-app-with-backend-apis-in-minutes-25a559bf530b) * [A URL Shortener Service using Go, Iris and Bolt](https://medium.com/@kataras/a-url-shortener-service-using-go-iris-and-bolt-4182f0b00ae7) -### Video Courses +## Iris starter kits -* [Daily Coding - Web Framework Golang: Iris Framework]( https://www.youtube.com/watch?v=BmOLFQ29J3s) by WarnabiruTV, source: youtube, cost: **FREE** -* [Tutorial Golang MVC dengan Iris Framework & Mongo DB](https://www.youtube.com/watch?v=uXiNYhJqh2I&list=PLMrwI6jIZn-1tzskocnh1pptKhVmWdcbS) (19 parts so far) by Musobar Media, source: youtube, cost: **FREE** -* [Go/Golang 27 - Iris framework : Routage de base](https://www.youtube.com/watch?v=rQxRoN6ub78) by stephgdesign, source: youtube, cost: **FREE** -* [Go/Golang 28 - Iris framework : Templating](https://www.youtube.com/watch?v=nOKYV073S2Y) by stephgdesignn, source: youtube, cost: **FREE** -* [Go/Golang 29 - Iris framework : Paramètres](https://www.youtube.com/watch?v=K2FsprfXs1E) by stephgdesign, source: youtube, cost: **FREE** -* [Go/Golang 30 - Iris framework : Les middelwares](https://www.youtube.com/watch?v=BLPy1So6bhE) by stephgdesign, source: youtube, cost: **FREE** -* [Go/Golang 31 - Iris framework : Les sessions](https://www.youtube.com/watch?v=RnBwUrwgEZ8) by stephgdesign, source: youtube, cost: **FREE** +1. [snowlyg/IrisApiProject: Iris + gorm + jwt + sqlite3](https://github.com/snowlyg/IrisApiProject) **NEW-Chinese** +2. [yz124/superstar: Iris + xorm to implement the star library](https://github.com/yz124/superstar) **NEW-Chinese** +3. [jebzmos4/Iris-golang: A basic CRUD API in golang with Iris](https://github.com/jebzmos4/Iris-golang) +4. [gauravtiwari/go_iris_app: A basic web app built in Iris for Go](https://github.com/gauravtiwari/go_iris_app) +5. [A mini social-network created with the awesome Iris💖💖](https://github.com/iris-contrib/Iris-Mini-Social-Network) +6. [Iris isomorphic react/hot reloadable/redux/css-modules starter kit](https://github.com/iris-contrib/iris-starter-kit) +7. [ionutvilie/react-ts: Demo project with react using typescript and Iris](https://github.com/ionutvilie/react-ts) +8. [Self-hosted Localization Management Platform built with Iris and Angular](https://github.com/iris-contrib/parrot) +9. [Iris + Docker and Kubernetes](https://github.com/iris-contrib/cloud-native-go) +10. [nanobox.io: Quickstart for Iris with Nanobox](https://guides.nanobox.io/golang/iris/from-scratch) +11. [hasura.io: A Hasura starter project with a ready to deploy Golang hello-world web app with IRIS](https://hasura.io/hub/project/hasura/hello-golang-iris) ## Support -- [HISTORY](HISTORY.md#soon) file is your best friend, it contains information about the latest features and changes +- [HISTORY](HISTORY.md#fr-11-january-2019--v1111) file is your best friend, it contains information about the latest features and changes - Did you happen to find a bug? Post it at [github issues](https://github.com/kataras/iris/issues) - Do you have any questions or need to speak with someone experienced to solve a problem at real-time? Join us to the [community chat](https://chat.iris-go.com) - Complete our form-based user experience report by clicking [here](https://docs.google.com/forms/d/e/1FAIpQLSdCxZXPANg_xHWil4kVAdhmh7EBBHQZ_4_xSZVDL-oCC_z5pA/viewform?usp=sf_link) @@ -1077,6 +1065,24 @@ Iris, unlike others, is 100% compatible with the standards and that's why the ma There are many companies and start-ups looking for Go web developers with Iris experience as requirement, we are searching for you every day and we post those information via our [facebook page](https://www.facebook.com/iris.framework), like the page to get notified, we have already posted some of them. +### Author + + + + + +
+ + +Gerasimos Maropoulos + +

+ + + +

+
+ ### Backers Thank you to all our backers! 🙏 [Become a backer](https://iris-go.com/donate) diff --git a/README_GR.md b/README_GR.md index 19399496c..f7ce9d9f1 100644 --- a/README_GR.md +++ b/README_GR.md @@ -2,7 +2,7 @@ -[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://chat.iris-go.com) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) Το Iris είναι ένα γρήγορο, απλό αλλά και πλήρως λειτουργικό και πολύ αποδοτικό web framework για τη Go. diff --git a/README_ID.md b/README_ID.md index 687b42604..ceb49502d 100644 --- a/README_ID.md +++ b/README_ID.md @@ -2,7 +2,7 @@ -[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://chat.iris-go.com) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) Iris adalah web framework yang cepat, sederhana namun berfitur lengkap dan sangat efisien untuk Go. diff --git a/README_JPN.md b/README_JPN.md index 60cd9ff2f..8e063c77c 100644 --- a/README_JPN.md +++ b/README_JPN.md @@ -2,7 +2,7 @@ -[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://chat.iris-go.com) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) Irisはシンプルで高速、それにも関わらず充実した機能を有する効率的なGo言語のウェブフレームワークです。 diff --git a/README_PT_BR.md b/README_PT_BR.md index e0d34b8a9..a7387a3e5 100644 --- a/README_PT_BR.md +++ b/README_PT_BR.md @@ -2,7 +2,7 @@ -[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://chat.iris-go.com) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) Iris é um framework rápido, simples porém completo e muito eficiente para a linguagem Go. diff --git a/README_RU.md b/README_RU.md index 8b1baccc2..cb90fecf3 100644 --- a/README_RU.md +++ b/README_RU.md @@ -2,7 +2,7 @@ -[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://chat.iris-go.com) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) Iris - это быстрая, простая, но полнофункциональная и очень эффективная веб-платформа для Go. diff --git a/README_ZH.md b/README_ZH.md index 17cbdd624..6a0fcae89 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -2,7 +2,7 @@ -[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://kataras.rocket.chat/channel/iris) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=flat-square)](https://travis-ci.org/kataras/iris) [![report card](https://img.shields.io/badge/report%20card-a%2B-ff3333.svg?style=flat-square)](http://goreportcard.com/report/kataras/iris) [![vscode-iris](https://img.shields.io/badge/ext%20-vscode-0c77e3.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=kataras2006.iris) [![chat](https://img.shields.io/badge/community-%20chat-00BCD4.svg?style=flat-square)](https://chat.iris-go.com) [![view examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/tree/master/_examples/routing) [![release](https://img.shields.io/badge/release%20-v11.1-0077b3.svg?style=flat-square)](https://github.com/kataras/iris/releases) Iris 是一款超快、简洁高效的 Go 语言 Web开发框架。 diff --git a/_examples/README.md b/_examples/README.md index 17ce3df0d..92408f268 100644 --- a/_examples/README.md +++ b/_examples/README.md @@ -51,7 +51,7 @@ $ go run main.go ### Overview - [Hello world!](hello-world/main.go) -- [Hello WebAssemply!](webassembly/basic/main.go) **NEW** +- [Hello WebAssemply!](webassembly/basic/main.go) - [Glimpse](overview/main.go) - [Tutorial: Online Visitors](tutorial/online-visitors/main.go) - [Tutorial: A Todo MVC Application using Iris and Vue.js](https://hackernoon.com/a-todo-mvc-application-using-iris-and-vue-js-5019ff870064) @@ -62,7 +62,7 @@ $ go run main.go - [Tutorial: DropzoneJS Uploader](tutorial/dropzonejs) - [Tutorial: Caddy](tutorial/caddy) - [Tutorial:Iris Go Framework + MongoDB](https://medium.com/go-language/iris-go-framework-mongodb-552e349eab9c) -- [Tutorial: API for Apache Kafka](tutorial/api-for-apache-kafka) **NEW** +- [Tutorial: API for Apache Kafka](tutorial/api-for-apache-kafka) ### Structuring @@ -146,9 +146,9 @@ Navigate through examples for a better understanding. - [Custom HTTP Errors](routing/http-errors/main.go) - [Dynamic Path](routing/dynamic-path/main.go) * [root level wildcard path](routing/dynamic-path/root-wildcard/main.go) -- [Write your own custom parameter types](routing/macros/main.go) **NEW** +- [Write your own custom parameter types](routing/macros/main.go) - [Reverse routing](routing/reverse/main.go) -- [Custom Router (high-level)](routing/custom-high-level-router/main.go) **NEW** +- [Custom Router (high-level)](routing/custom-high-level-router/main.go) - [Custom Wrapper](routing/custom-wrapper/main.go) - Custom Context * [method overriding](routing/custom-context/method-overriding/main.go) @@ -167,7 +167,7 @@ Navigate through examples for a better understanding. - [Basic](hero/basic/main.go) - [Overview](hero/overview) -- [Sessions](hero/sessions) **NEW** +- [Sessions](hero/sessions) - [Yet another dependency injection example and good practises at general](hero/smart-contract/main.go) **NEW** ### MVC @@ -306,14 +306,15 @@ If you're new to back-end web development read about the MVC architectural patte Follow the examples below, -- [Hello world](mvc/hello-world/main.go) **UPDATED** -- [Session Controller](mvc/session-controller/main.go) **UPDATED** -- [Overview - Plus Repository and Service layers](mvc/overview) **UPDATED** -- [Login showcase - Plus Repository and Service layers](mvc/login) **UPDATED** -- [Singleton](mvc/singleton) **NEW** -- [Websocket Controller](mvc/websocket) **NEW** -- [Register Middleware](mvc/middleware) **NEW** -- [Vue.js Todo MVC](tutorial/vuejs-todo-mvc) **NEW** +- [Hello world](mvc/hello-world/main.go) +- [Regexp](mvc/regexp/main.go) **NEW** +- [Session Controller](mvc/session-controller/main.go) +- [Overview - Plus Repository and Service layers](mvc/overview) +- [Login showcase - Plus Repository and Service layers](mvc/login) +- [Singleton](mvc/singleton) +- [Websocket Controller](mvc/websocket) +- [Register Middleware](mvc/middleware) +- [Vue.js Todo MVC](tutorial/vuejs-todo-mvc) ### Subdomains @@ -367,7 +368,7 @@ You can serve [quicktemplate](https://github.com/valyala/quicktemplate) and [her - [Favicon](file-server/favicon/main.go) - [Basic](file-server/basic/main.go) - [Embedding Files Into App Executable File](file-server/embedding-files-into-app/main.go) -- [Embedding Gziped Files Into App Executable File](file-server/embedding-gziped-files-into-app/main.go) **NEW** +- [Embedding Gziped Files Into App Executable File](file-server/embedding-gziped-files-into-app/main.go) - [Send/Force-Download Files](file-server/send-files/main.go) - Single Page Applications * [single Page Application](file-server/single-page-application/basic/main.go) @@ -384,7 +385,7 @@ You can serve [quicktemplate](https://github.com/valyala/quicktemplate) and [her - [Read Custom via Unmarshaler](http_request/read-custom-via-unmarshaler/main.go) - [Upload/Read File](http_request/upload-file/main.go) - [Upload multiple files with an easy way](http_request/upload-files/main.go) -- [Extract referrer from "referer" header or URL query parameter](http_request/extract-referer/main.go) **NEW** +- [Extract referrer from "referer" header or URL query parameter](http_request/extract-referer/main.go) > The `context.Request()` returns the same *http.Request you already know, these examples show some places where the Context uses this object. Besides that you can use it as you did before iris. @@ -396,7 +397,7 @@ You can serve [quicktemplate](https://github.com/valyala/quicktemplate) and [her - [Write Gzip](http_responsewriter/write-gzip/main.go) - [Stream Writer](http_responsewriter/stream-writer/main.go) - [Transactions](http_responsewriter/transactions/main.go) -- [SSE](http_responsewriter/sse/main.go) **NEW** +- [SSE](http_responsewriter/sse/main.go) - [SSE (third-party package usage for server sent events)](http_responsewriter/sse-third-party/main.go) > The `context/context#ResponseWriter()` returns an enchament version of a http.ResponseWriter, these examples show some places where the Context uses this object. Besides that you can use it as you did before iris. @@ -473,14 +474,15 @@ iris session manager lives on its own [package](https://github.com/kataras/iris/ ### Websockets -iris websocket library lives on its own [package](https://github.com/kataras/iris/tree/master/websocket). +iris websocket library lives on its own [package](https://github.com/kataras/iris/tree/master/websocket) which depends on the [kataras/neffos](https://github.com/kataras/neffos) external package. The package is designed to work with raw websockets although its API is similar to the famous [socket.io](https://socket.io). I have read an article recently and I felt very contented about my decision to design a **fast** websocket-**only** package for Iris and not a backwards socket.io-like package. You can read that article by following this link: https://medium.com/@ivanderbyl/why-you-don-t-need-socket-io-6848f1c871cd. -- [Chat](websocket/chat/main.go) -- [Chat with Iris Go Client Side](websocket/go-client) **NEW** - * [Server](websocket/go-client/server/main.go) - * [Client](websocket/go-client/client/main.go) +- [Basic](websocket/basic) **NEW** + * [Server](websocket/basic/server.go) + * [Go Client](websocket/basic/go-client/client.go) + * [Browser Client](websocket/basic/browser/index.html) + * [Browser NPM Client (browserify)](websocket/basic/browserify/app.js) - [Native Messages](websocket/native-messages/main.go) - [Connection List](websocket/connectionlist/main.go) - [TLS Enabled](websocket/secure/main.go) diff --git a/_examples/README_ZH.md b/_examples/README_ZH.md index cae15a08f..d8aea7a9b 100644 --- a/_examples/README_ZH.md +++ b/_examples/README_ZH.md @@ -430,10 +430,11 @@ iris websocket库依赖于它自己的[包](https://github.com/kataras/iris/tree 设计这个包的目的是处理原始websockets,虽然它的API和著名的[socket.io](https://socket.io)很像。我最近读了一片文章,并且对我 决定给iris设计一个**快速的**websocket**限定**包并且不是一个向后传递类socket.io的包。你可以阅读这个链接里的文章https://medium.com/@ivanderbyl/why-you-don-t-need-socket-io-6848f1c871cd。 -- [聊天](websocket/chat/main.go) -- [Chat with Iris Go Client Side](websocket/go-client) **NEW** - * [Server](websocket/go-client/server/main.go) - * [Client](websocket/go-client/client/main.go) +- [Basic](websocket/basic) **NEW** + * [Server](websocket/basic/server.go) + * [Go Client](websocket/basic/go-client/client.go) + * [Browser Client](websocket/basic/browser/index.html) + * [Browser NPM Client (browserify)](websocket/basic/browserify/app.js) - [原生消息](websocket/native-messages/main.go) - [连接列表](websocket/connectionlist/main.go) - [TLS支持](websocket/secure/main.go) diff --git a/_examples/mvc/regexp/main.go b/_examples/mvc/regexp/main.go new file mode 100644 index 000000000..1c94866b8 --- /dev/null +++ b/_examples/mvc/regexp/main.go @@ -0,0 +1,49 @@ +// Package main shows how to match "/xxx.json" in MVC handler. +package main + +/* +There is no MVC naming pattern for such these things,you can imagine the limitations of that. +Instead you can use the `BeforeActivation` on your controller to add more advanced routing features +(https://github.com/kataras/iris/tree/master/_examples/routing). + +You can also create your own macro, +i.e: /{file:json} or macro function of a specific parameter type i.e: (/{file:string json()}). +Read the routing examples and you will gain a deeper view, there are all covered. +*/ + +import ( + "github.com/kataras/iris" + "github.com/kataras/iris/mvc" +) + +func main() { + app := iris.New() + + mvcApp := mvc.New(app.Party("/module")) + mvcApp.Handle(new(myController)) + + // http://localhost:8080/module/xxx.json (OK) + // http://localhost:8080/module/xxx.xml (Not Found) + app.Run(iris.Addr(":8080")) +} + +type myController struct{} + +func (m *myController) BeforeActivation(b mvc.BeforeActivation) { + // b.Dependencies().Add/Remove + // b.Router().Use/UseGlobal/Done // and any standard API call you already know + + // 1-> Method + // 2-> Path + // 3-> The controller's function name to be parsed as handler + // 4-> Any handlers that should run before the HandleJSON + + // "^[a-zA-Z0-9_.-]+.json$)" to validate file-name pattern and json + // or just: ".json$" to validate suffix. + + b.Handle("GET", "/{file:string regexp(^[a-zA-Z0-9_.-]+.json$))}", "HandleJSON" /*optionalMiddleware*/) +} + +func (m *myController) HandleJSON(file string) string { + return "custom serving of json: " + file +} diff --git a/doc.go b/doc.go index 61c48f8a1..41522132c 100644 --- a/doc.go +++ b/doc.go @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2019 The Iris Authors. All rights reserved. +// Copyright (c) 2017-2018 The Iris Authors. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -27,10 +27,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* -Package iris implements the highest realistic performance, easy to learn Go web framework. -Iris provides a beautifully expressive and easy to use foundation for your next website, API, or distributed app. -Low-level handlers compatible with `net/http` and high-level fastest MVC implementation and handlers dependency injection. -Easy to learn for new gophers and advanced features for experienced, it goes as far as you dive into it! +Package iris provides a beautifully expressive and easy to use foundation for your next website, API, or distributed app. Source code and other details for the project are available at GitHub: @@ -38,7 +35,7 @@ Source code and other details for the project are available at GitHub: Current Version -11.2.0 +11.1.1 Installation @@ -1471,7 +1468,7 @@ Example Server Code: // see the inline javascript code i the websockets.html, this endpoint is used to connect to the server. app.Get("/echo", ws.Handler()) - // serve the javascript builtin client-side library, + // serve the javascript built-in client-side library, // see websockets.html script tags, this path is used. app.Any("/iris-ws.js", func(ctx iris.Context) { ctx.Write(websocket.ClientSource) @@ -1554,7 +1551,7 @@ Example Code: func main() { app := iris.New() - // Optionally, add two builtin handlers + // Optionally, add two built-in handlers // that can recover from any http-relative panics // and log the requests to the terminal. app.Use(recover.New()) diff --git a/go.mod b/go.mod index a78a55820..3199ff898 100644 --- a/go.mod +++ b/go.mod @@ -22,13 +22,13 @@ require ( github.com/hashicorp/go-version v1.0.0 github.com/imkira/go-interpol v1.1.0 // indirect github.com/iris-contrib/blackfriday v2.0.0+incompatible - github.com/iris-contrib/formBinder v0.0.0-20190104093907-fbd5963f41e1 // indirect + github.com/iris-contrib/formBinder v0.0.0-20190104093907-fbd5963f41e1 github.com/iris-contrib/go.uuid v2.0.0+incompatible github.com/iris-contrib/httpexpect v0.0.0-20180314041918-ebe99fcebbce github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0 github.com/json-iterator/go v1.1.5 github.com/juju/errors v0.0.0-20181012004132-a4583d0a56ea // indirect - github.com/kataras/golog v0.0.0-20180321173939-03be10146386 // indirect + github.com/kataras/golog v0.0.0-20180321173939-03be10146386 github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d // indirect github.com/klauspost/compress v1.4.1 github.com/klauspost/cpuid v1.2.0 // indirect diff --git a/go.sum b/go.sum index 5c1b16056..ab14902be 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7 h1:PqzgE6kAMi81xWQA2QIVxjWkFHptGgC547vchpUbtFo= github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -6,26 +7,37 @@ github.com/Joker/jade v1.0.0 h1:lOCEPvTAtWfLpSZYMOv/g44MGQFAolbKh2khHHGu0Kc= github.com/Joker/jade v1.0.0/go.mod h1:efZIdO0py/LtcJRSa/j2WEklMSAw84WV0zZVMxNToB8= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398 h1:WDC6ySpJzbxGWFh4aMxFFC28wwGp5pEuoTtvA4q/qQ4= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= +github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f h1:zvClvFQwU++UpIUBGC8YmDlfhUrweEy1R1Fj1gu5iIM= github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/aymerick/raymond v2.0.2+incompatible h1:VEp3GpgdAnv9B2GFyTvqgcKvY+mfKMjPOA3SbKLtnU0= github.com/aymerick/raymond v2.0.2+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgraph-io/badger v1.5.4 h1:gVTrpUTbbr/T24uvoCaqY2KSHfNLVGm0w+hbee2HMeg= github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= +github.com/dgryski/go-farm v0.0.0-20180109070241-2de33835d102 h1:afESQBXJEnj3fu+34X//E8Wg3nEbMJxJkwSc0tPePK0= github.com/dgryski/go-farm v0.0.0-20180109070241-2de33835d102/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= +github.com/etcd-io/bbolt v1.3.0 h1:ec0U3x11Mk69A8YwQyZEhNaUqHkQSv2gDR3Bioz5DfU= github.com/etcd-io/bbolt v1.3.0/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/flosch/pongo2 v0.0.0-20180809100617-24195e6d38b0 h1:ZHx2BEERvWkuwuE7qWN9TuRxucHDH2JrsvneZjVJfo0= github.com/flosch/pongo2 v0.0.0-20180809100617-24195e6d38b0/go.mod h1:rE0ErqqBaMcp9pzj8JxV1GcfDBpuypXYxlR1c37AUwg= +github.com/gavv/monotime v0.0.0-20171021193802-6f8212e8d10d h1:oYXrtNhqNKL1dVtKdv8XUq5zqdGVFNQ0/4tvccXZOLM= github.com/gavv/monotime v0.0.0-20171021193802-6f8212e8d10d/go.mod h1:vmp8DIyckQMXOPl0AQVHt+7n5h7Gb7hS6CUydiV8QeA= +github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/hashicorp/go-version v1.0.0 h1:21MVWPKDphxa7ineQQTrCU5brh7OuVVAzGOCnnCPtE8= github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/iris-contrib/blackfriday v2.0.0+incompatible h1:o5sHQHHm0ToHUlAJSTjW9UWicjJSDDauOOQ2AHuIVp4= github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= @@ -33,7 +45,9 @@ github.com/iris-contrib/formBinder v0.0.0-20190104093907-fbd5963f41e1 h1:7GsNnSL github.com/iris-contrib/formBinder v0.0.0-20190104093907-fbd5963f41e1/go.mod h1:i8kTYUOEstd/S8TG0ChTXQdf4ermA/e8vJX0+QruD9w= github.com/iris-contrib/go.uuid v2.0.0+incompatible h1:XZubAYg61/JwnJNbZilGjf3b3pB80+OQg2qf6c8BfWE= github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= +github.com/iris-contrib/httpexpect v0.0.0-20180314041918-ebe99fcebbce h1:q8Ka/exfHNgK7izJE+aUOZd7KZXJ7oQbnJWiZakEiMo= github.com/iris-contrib/httpexpect v0.0.0-20180314041918-ebe99fcebbce/go.mod h1:VER17o2JZqquOx41avolD/wMGQSFEFBKWmhag9/RQRY= +github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0 h1:Kyp9KiXwsyZRTeoNjgVCrWks7D8ht9+kg6yCjh8K97o= github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -53,22 +67,33 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= +github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95 h1:/vdW8Cb7EXrkqWGufVMES1OH2sU9gKVb2n9/1y5NMBY= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20181112162635-ac52e6811b56 h1:yhqBHs09SmmUoNOHc9jgK4a60T3XFRtPAkYxVnqgY50= github.com/xeipuuv/gojsonschema v0.0.0-20181112162635-ac52e6811b56/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= +github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869 h1:kkXA53yGe04D0adEYJwEVQjeBppL01Exg+fnMjfUraU= golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -77,6 +102,7 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4r golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.39.0 h1:Jf2sFGT+sAd7i+4ftUN1Jz90uw8XNH8NXbbOY16taA8= gopkg.in/ini.v1 v1.39.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/sessions/sessiondb/redis/database.go b/sessions/sessiondb/redis/database.go index 6477af76b..8665bea3c 100644 --- a/sessions/sessiondb/redis/database.go +++ b/sessions/sessiondb/redis/database.go @@ -61,10 +61,8 @@ func (db *Database) OnUpdateExpiration(sid string, newExpires time.Duration) err return db.redis.UpdateTTLMany(sid, int64(newExpires.Seconds())) } -const delim = "_" - -func makeKey(sid, key string) string { - return sid + delim + key +func (db *Database) makeKey(sid, key string) string { + return sid + db.redis.Config.Delim + key } // Set sets a key value of a specific session. @@ -76,14 +74,14 @@ func (db *Database) Set(sid string, lifetime sessions.LifeTime, key string, valu return } - if err = db.redis.Set(makeKey(sid, key), valueBytes, int64(lifetime.DurationUntilExpiration().Seconds())); err != nil { + if err = db.redis.Set(db.makeKey(sid, key), valueBytes, int64(lifetime.DurationUntilExpiration().Seconds())); err != nil { golog.Debug(err) } } // Get retrieves a session value based on the key. func (db *Database) Get(sid string, key string) (value interface{}) { - db.get(makeKey(sid, key), &value) + db.get(db.makeKey(sid, key), &value) return } @@ -100,7 +98,7 @@ func (db *Database) get(key string, outPtr interface{}) { } func (db *Database) keys(sid string) []string { - keys, err := db.redis.GetKeys(sid + delim) + keys, err := db.redis.GetKeys(sid + db.redis.Config.Delim) if err != nil { golog.Debugf("unable to get all redis keys of session '%s': %v", sid, err) return nil @@ -126,7 +124,7 @@ func (db *Database) Len(sid string) (n int) { // Delete removes a session key value based on its key. func (db *Database) Delete(sid string, key string) (deleted bool) { - err := db.redis.Delete(makeKey(sid, key)) + err := db.redis.Delete(db.makeKey(sid, key)) if err != nil { golog.Error(err) } diff --git a/sessions/sessiondb/redis/service/config.go b/sessions/sessiondb/redis/service/config.go index 1715ffb17..e635fcbd7 100644 --- a/sessions/sessiondb/redis/service/config.go +++ b/sessions/sessiondb/redis/service/config.go @@ -5,32 +5,36 @@ import ( ) const ( - // DefaultRedisNetwork the redis network option, "tcp" + // DefaultRedisNetwork the redis network option, "tcp". DefaultRedisNetwork = "tcp" - // DefaultRedisAddr the redis address option, "127.0.0.1:6379" + // DefaultRedisAddr the redis address option, "127.0.0.1:6379". DefaultRedisAddr = "127.0.0.1:6379" - // DefaultRedisIdleTimeout the redis idle timeout option, time.Duration(5) * time.Minute + // DefaultRedisIdleTimeout the redis idle timeout option, time.Duration(5) * time.Minute. DefaultRedisIdleTimeout = time.Duration(5) * time.Minute + // DefaultDelim ths redis delim option, "-". + DefaultDelim = "-" ) // Config the redis configuration used inside sessions type Config struct { - // Network "tcp" + // Network protocol. Defaults to "tcp". Network string - // Addr "127.0.0.1:6379" + // Addr of the redis server. Defaults to "127.0.0.1:6379". Addr string - // Password string .If no password then no 'AUTH'. Default "" + // Password string .If no password then no 'AUTH'. Defaults to "". Password string - // If Database is empty "" then no 'SELECT'. Default "" + // If Database is empty "" then no 'SELECT'. Defaults to "". Database string - // MaxIdle 0 no limit + // MaxIdle 0 no limit. MaxIdle int - // MaxActive 0 no limit + // MaxActive 0 no limit. MaxActive int - // IdleTimeout time.Duration(5) * time.Minute + // IdleTimeout time.Duration(5) * time.Minute. IdleTimeout time.Duration - // Prefix "myprefix-for-this-website". Default "" + // Prefix "myprefix-for-this-website". Defaults to "". Prefix string + // Delim the delimeter for the values. Defaults to "-". + Delim string } // DefaultConfig returns the default configuration for Redis service. @@ -44,5 +48,6 @@ func DefaultConfig() Config { MaxActive: 0, IdleTimeout: DefaultRedisIdleTimeout, Prefix: "", + Delim: DefaultDelim, } } From 1e956950f72efdd080b904c952d4162fc7f309e9 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Thu, 30 May 2019 10:54:42 +0300 Subject: [PATCH 26/89] fix go.mod caused by prev commit --- doc.go | 9 ++++++--- go.sum | 26 -------------------------- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/doc.go b/doc.go index 41522132c..be9ff2a6f 100644 --- a/doc.go +++ b/doc.go @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2018 The Iris Authors. All rights reserved. +// Copyright (c) 2017-2019 The Iris Authors. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are @@ -27,7 +27,10 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* -Package iris provides a beautifully expressive and easy to use foundation for your next website, API, or distributed app. +Package iris implements the highest realistic performance, easy to learn Go web framework. +Iris provides a beautifully expressive and easy to use foundation for your next website, API, or distributed app. +Low-level handlers compatible with `net/http` and high-level fastest MVC implementation and handlers dependency injection. +Easy to learn for new gophers and advanced features for experienced, it goes as far as you dive into it! Source code and other details for the project are available at GitHub: @@ -35,7 +38,7 @@ Source code and other details for the project are available at GitHub: Current Version -11.1.1 +11.2.0 Installation diff --git a/go.sum b/go.sum index ab14902be..5c1b16056 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7 h1:PqzgE6kAMi81xWQA2QIVxjWkFHptGgC547vchpUbtFo= github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -7,37 +6,26 @@ github.com/Joker/jade v1.0.0 h1:lOCEPvTAtWfLpSZYMOv/g44MGQFAolbKh2khHHGu0Kc= github.com/Joker/jade v1.0.0/go.mod h1:efZIdO0py/LtcJRSa/j2WEklMSAw84WV0zZVMxNToB8= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398 h1:WDC6ySpJzbxGWFh4aMxFFC28wwGp5pEuoTtvA4q/qQ4= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f h1:zvClvFQwU++UpIUBGC8YmDlfhUrweEy1R1Fj1gu5iIM= github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/aymerick/raymond v2.0.2+incompatible h1:VEp3GpgdAnv9B2GFyTvqgcKvY+mfKMjPOA3SbKLtnU0= github.com/aymerick/raymond v2.0.2+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/badger v1.5.4 h1:gVTrpUTbbr/T24uvoCaqY2KSHfNLVGm0w+hbee2HMeg= github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= -github.com/dgryski/go-farm v0.0.0-20180109070241-2de33835d102 h1:afESQBXJEnj3fu+34X//E8Wg3nEbMJxJkwSc0tPePK0= github.com/dgryski/go-farm v0.0.0-20180109070241-2de33835d102/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/etcd-io/bbolt v1.3.0 h1:ec0U3x11Mk69A8YwQyZEhNaUqHkQSv2gDR3Bioz5DfU= github.com/etcd-io/bbolt v1.3.0/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/flosch/pongo2 v0.0.0-20180809100617-24195e6d38b0 h1:ZHx2BEERvWkuwuE7qWN9TuRxucHDH2JrsvneZjVJfo0= github.com/flosch/pongo2 v0.0.0-20180809100617-24195e6d38b0/go.mod h1:rE0ErqqBaMcp9pzj8JxV1GcfDBpuypXYxlR1c37AUwg= -github.com/gavv/monotime v0.0.0-20171021193802-6f8212e8d10d h1:oYXrtNhqNKL1dVtKdv8XUq5zqdGVFNQ0/4tvccXZOLM= github.com/gavv/monotime v0.0.0-20171021193802-6f8212e8d10d/go.mod h1:vmp8DIyckQMXOPl0AQVHt+7n5h7Gb7hS6CUydiV8QeA= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/hashicorp/go-version v1.0.0 h1:21MVWPKDphxa7ineQQTrCU5brh7OuVVAzGOCnnCPtE8= github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/iris-contrib/blackfriday v2.0.0+incompatible h1:o5sHQHHm0ToHUlAJSTjW9UWicjJSDDauOOQ2AHuIVp4= github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= @@ -45,9 +33,7 @@ github.com/iris-contrib/formBinder v0.0.0-20190104093907-fbd5963f41e1 h1:7GsNnSL github.com/iris-contrib/formBinder v0.0.0-20190104093907-fbd5963f41e1/go.mod h1:i8kTYUOEstd/S8TG0ChTXQdf4ermA/e8vJX0+QruD9w= github.com/iris-contrib/go.uuid v2.0.0+incompatible h1:XZubAYg61/JwnJNbZilGjf3b3pB80+OQg2qf6c8BfWE= github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/httpexpect v0.0.0-20180314041918-ebe99fcebbce h1:q8Ka/exfHNgK7izJE+aUOZd7KZXJ7oQbnJWiZakEiMo= github.com/iris-contrib/httpexpect v0.0.0-20180314041918-ebe99fcebbce/go.mod h1:VER17o2JZqquOx41avolD/wMGQSFEFBKWmhag9/RQRY= -github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0 h1:Kyp9KiXwsyZRTeoNjgVCrWks7D8ht9+kg6yCjh8K97o= github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -67,33 +53,22 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95 h1:/vdW8Cb7EXrkqWGufVMES1OH2sU9gKVb2n9/1y5NMBY= github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v0.0.0-20181112162635-ac52e6811b56 h1:yhqBHs09SmmUoNOHc9jgK4a60T3XFRtPAkYxVnqgY50= github.com/xeipuuv/gojsonschema v0.0.0-20181112162635-ac52e6811b56/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869 h1:kkXA53yGe04D0adEYJwEVQjeBppL01Exg+fnMjfUraU= golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -102,7 +77,6 @@ golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4r golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/ini.v1 v1.39.0 h1:Jf2sFGT+sAd7i+4ftUN1Jz90uw8XNH8NXbbOY16taA8= gopkg.in/ini.v1 v1.39.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From d1fd8b27ebd73593e8a83d9a16b65cbf451e03fa Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Sun, 2 Jun 2019 17:49:45 +0300 Subject: [PATCH 27/89] Add the new websocket package (which is just a helper for kataras/neffos) and an example for go server, client, browser client and nodejs client. Add a .fossa.yml and the generated NOTICE file for 3rd-party libs. Update go.mod, go.sum. Update the vendor folder for pongo2 to its latest master as well --- .fossa.yml | 11 + NOTICE | 98 ++ README.md | 2 +- _examples/websocket/basic/browser/index.html | 93 ++ .../websocket/basic/browserify/README.md | 11 + _examples/websocket/basic/browserify/app.js | 61 + .../websocket/basic/browserify/bundle.js | 1 + .../websocket/basic/browserify/index.html | 10 + .../websocket/basic/browserify/package.json | 16 + _examples/websocket/basic/go-client/client.go | 85 ++ _examples/websocket/basic/server.go | 53 + _examples/websocket/chat/main.go | 60 - _examples/websocket/chat/websockets.html | 45 - _examples/websocket/connectionlist/main.go | 96 -- .../connectionlist/static/js/chat.js | 38 - .../static/js/vendor/jquery-2.2.3.min.js | 4 - .../connectionlist/templates/client.html | 24 - _examples/websocket/custom-go-client/main.go | 179 --- _examples/websocket/custom-go-client/run.bat | 4 - _examples/websocket/go-client/client/main.go | 58 - _examples/websocket/go-client/server/main.go | 32 - go.mod | 54 +- go.sum | 93 +- vendor/github.com/flosch/pongo2/AUTHORS | 21 +- vendor/github.com/flosch/pongo2/LICENSE | 40 +- vendor/github.com/flosch/pongo2/context.go | 8 +- vendor/github.com/flosch/pongo2/doc.go | 31 - vendor/github.com/flosch/pongo2/filters.go | 12 +- vendor/github.com/flosch/pongo2/lexer.go | 30 +- vendor/github.com/flosch/pongo2/nodes_html.go | 15 +- vendor/github.com/flosch/pongo2/options.go | 26 + vendor/github.com/flosch/pongo2/parser.go | 2 +- .../flosch/pongo2/parser_document.go | 7 +- .../flosch/pongo2/parser_expression.go | 24 +- vendor/github.com/flosch/pongo2/template.go | 89 +- .../github.com/flosch/pongo2/template_sets.go | 59 +- vendor/github.com/flosch/pongo2/variable.go | 19 +- vendor/github.com/pmezard/go-difflib/LICENSE | 27 - .../pmezard/go-difflib/difflib/difflib.go | 772 ----------- .../skratchdot/open-golang/LICENSE-MIT | 22 - .../skratchdot/open-golang/open/exec.go | 18 - .../open-golang/open/exec_darwin.go | 15 - .../open-golang/open/exec_windows.go | 28 - .../skratchdot/open-golang/open/open.go | 50 - .../skratchdot/open-golang/vendor/xdg-open | 557 -------- websocket/AUTHORS | 4 - websocket/LICENSE | 27 - websocket/client.js | 208 --- websocket/client.js.go | 233 ---- websocket/client.min.js | 1 - websocket/client.ts | 256 ---- websocket/config.go | 159 --- websocket/connection.go | 689 ---------- websocket/emitter.go | 43 - websocket/message.go | 182 --- websocket/server.go | 395 ------ .../github.com/gorilla/websocket/AUTHORS | 9 - .../github.com/gorilla/websocket/LICENSE | 22 - .../github.com/gorilla/websocket/client.go | 395 ------ .../gorilla/websocket/client_clone.go | 16 - .../gorilla/websocket/client_clone_legacy.go | 38 - .../gorilla/websocket/compression.go | 148 --- .../github.com/gorilla/websocket/conn.go | 1166 ----------------- .../gorilla/websocket/conn_write.go | 15 - .../gorilla/websocket/conn_write_legacy.go | 18 - .../github.com/gorilla/websocket/join.go | 42 - .../github.com/gorilla/websocket/json.go | 60 - .../github.com/gorilla/websocket/mask.go | 54 - .../github.com/gorilla/websocket/mask_safe.go | 15 - .../github.com/gorilla/websocket/prepared.go | 102 -- .../github.com/gorilla/websocket/proxy.go | 77 -- .../github.com/gorilla/websocket/server.go | 363 ----- .../github.com/gorilla/websocket/trace.go | 19 - .../github.com/gorilla/websocket/trace_17.go | 12 - .../github.com/gorilla/websocket/util.go | 283 ---- .../gorilla/websocket/x_net_proxy.go | 473 ------- .../github.com/valyala/bytebufferpool/LICENSE | 22 - .../valyala/bytebufferpool/bytebuffer.go | 111 -- .../github.com/valyala/bytebufferpool/pool.go | 151 --- websocket/websocket.go | 164 ++- websocket/websocket_go19.go | 63 + 81 files changed, 941 insertions(+), 8094 deletions(-) create mode 100644 .fossa.yml create mode 100644 NOTICE create mode 100644 _examples/websocket/basic/browser/index.html create mode 100644 _examples/websocket/basic/browserify/README.md create mode 100644 _examples/websocket/basic/browserify/app.js create mode 100644 _examples/websocket/basic/browserify/bundle.js create mode 100644 _examples/websocket/basic/browserify/index.html create mode 100644 _examples/websocket/basic/browserify/package.json create mode 100644 _examples/websocket/basic/go-client/client.go create mode 100644 _examples/websocket/basic/server.go delete mode 100644 _examples/websocket/chat/main.go delete mode 100644 _examples/websocket/chat/websockets.html delete mode 100644 _examples/websocket/connectionlist/main.go delete mode 100644 _examples/websocket/connectionlist/static/js/chat.js delete mode 100644 _examples/websocket/connectionlist/static/js/vendor/jquery-2.2.3.min.js delete mode 100644 _examples/websocket/connectionlist/templates/client.html delete mode 100644 _examples/websocket/custom-go-client/main.go delete mode 100644 _examples/websocket/custom-go-client/run.bat delete mode 100644 _examples/websocket/go-client/client/main.go delete mode 100644 _examples/websocket/go-client/server/main.go delete mode 100644 vendor/github.com/flosch/pongo2/doc.go create mode 100644 vendor/github.com/flosch/pongo2/options.go delete mode 100644 vendor/github.com/pmezard/go-difflib/LICENSE delete mode 100644 vendor/github.com/pmezard/go-difflib/difflib/difflib.go delete mode 100644 vendor/github.com/skratchdot/open-golang/LICENSE-MIT delete mode 100644 vendor/github.com/skratchdot/open-golang/open/exec.go delete mode 100644 vendor/github.com/skratchdot/open-golang/open/exec_darwin.go delete mode 100644 vendor/github.com/skratchdot/open-golang/open/exec_windows.go delete mode 100644 vendor/github.com/skratchdot/open-golang/open/open.go delete mode 100644 vendor/github.com/skratchdot/open-golang/vendor/xdg-open delete mode 100644 websocket/AUTHORS delete mode 100644 websocket/LICENSE delete mode 100644 websocket/client.js delete mode 100644 websocket/client.js.go delete mode 100644 websocket/client.min.js delete mode 100644 websocket/client.ts delete mode 100644 websocket/config.go delete mode 100644 websocket/connection.go delete mode 100644 websocket/emitter.go delete mode 100644 websocket/message.go delete mode 100644 websocket/server.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/AUTHORS delete mode 100644 websocket/vendor/github.com/gorilla/websocket/LICENSE delete mode 100644 websocket/vendor/github.com/gorilla/websocket/client.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/client_clone.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/client_clone_legacy.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/compression.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/conn.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/conn_write.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/conn_write_legacy.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/join.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/json.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/mask.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/mask_safe.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/prepared.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/proxy.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/server.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/trace.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/trace_17.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/util.go delete mode 100644 websocket/vendor/github.com/gorilla/websocket/x_net_proxy.go delete mode 100644 websocket/vendor/github.com/valyala/bytebufferpool/LICENSE delete mode 100644 websocket/vendor/github.com/valyala/bytebufferpool/bytebuffer.go delete mode 100644 websocket/vendor/github.com/valyala/bytebufferpool/pool.go create mode 100644 websocket/websocket_go19.go diff --git a/.fossa.yml b/.fossa.yml new file mode 100644 index 000000000..cb3f48eeb --- /dev/null +++ b/.fossa.yml @@ -0,0 +1,11 @@ +version: 2 +cli: + server: https://app.fossa.com + fetcher: custom + project: https://github.com/kataras/iris.git +analyze: + modules: + - name: iris + type: go + target: . + path: . \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 000000000..41cb2f410 --- /dev/null +++ b/NOTICE @@ -0,0 +1,98 @@ +================================================================================ + + Third-Party Software for iris + +================================================================================ + +The following 3rd-party software components may be used by or distributed with iris. This document was automatically generated by FOSSA on 2019-6-2; any information relevant to third-party vendors listed below are collected using common, reasonable means. + +Revision ID: 1e956950f72efdd080b904c952d4162fc7f309e9 + + +================================================================================ + + Direct Dependencies + +================================================================================ + +----------------- ----------------- ------------------------------------------ + Library Version Website +----------------- ----------------- ------------------------------------------ + amber cdade1c073850f4 https://github.com/eknkc/amber + ffc70a829e31235 + ea6892853b + blackfriday 48b3da6a6f3865c https://github.com/iris-contrib/ + 7eb1eba96d74cf0 blackfriday + a16f63faca + bluemonday 89802068f71166e https://github.com/microcosm-cc/ + 95c92040512bf2e bluemonday + 11767721ed + columnize 9e6335e58db3b4c https://github.com/ryanuber/columnize + fe3c3c5c881f51f + fbc1091b34 + formBinder fbd5963f41e18ae https://github.com/iris-contrib/ + 1f1423ba0462350 formBinder + 94b0721ea1 + go e369490fb7db5f2 https://github.com/golang/go + d42bb0e8ee19b48 + 378dee0ebf + go-version 192140e6f3e645d https://github.com/hashicorp/go-version + 971b134d4e35b51 + 91adb9dfd3 + go.uuid 36e9d2ebbde5e3f https://github.com/iris-contrib/go.uuid + 13ab2e25625fd45 + 3271d6522e + golog 03be101463868ed https://github.com/kataras/golog + c5a81f094fc68a5 + f6c1b5503a + goreferrer ec9c9a553398739 https://github.com/Shopify/goreferrer + f0dcf817e0ad5e0 + 1c4e7dcd08 + httpexpect ebe99fcebbcedf6 https://github.com/iris-contrib/ + e7916320cce24c3 httpexpect + e1832766ac + i18n 987a633949d087b https://github.com/iris-contrib/i18n + a52207b587792e8 + c67d65780b + jade 9ffefa50b5f3141 https://github.com/Joker/jade + 6ac643e9d9ad611 + 6f4688705f + json-iterator 08047c174c6c03e https://github.com/json-iterator/go + 8ec963a411bde1b + 6d1ee67b26 + neffos 38e9cc9b65c6ae0 https://github.com/kataras/neffos + 2998cc1a2df8767 + ecd5951e52 + pongo2 8914e1cf9164420 https://github.com/flosch/pongo2 + c91423cdefc7d97 + 8a76c38213 + raymond b565731e1464263 https://github.com/aymerick/raymond + de0bda75f2e45d9 + 7b54b60110 + structs 878a968ab225483 https://github.com/fatih/structs + 62a09bdb3322f98 + b00f470d46 + toml 3012a1dbe2e4bd1 https://github.com/BurntSushi/toml + 391d42b32f0577c + b7bbc7f005 + yaml.v2 51d6538a90f86fe https://gopkg.in/yaml.v2 + 93ac480b35f37b2 + be17fef232 + + + +================================================================================ + + Deep Dependencies + +================================================================================ + + badger e9447c910efd3c6 https://github.com/dgraph-io/badger + 7c5453ea1f65d2f + 355544dd82 + bbolt 2eb7227adea1d5c https://github.com/etcd-io/bbolt + f85f0bc2a82b705 + 9b13c2fa68 + redigo 39e2c31b7ca38b5 https://github.com/gomodule/redigo + 21ceb836620a269 + e62c895dc9 \ No newline at end of file diff --git a/README.md b/README.md index 5e450b553..51d093c96 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ import ( ## Quick start ```sh -# assume the following codes in example.go file +# assume the following code in example.go file $ cat example.go ``` diff --git a/_examples/websocket/basic/browser/index.html b/_examples/websocket/basic/browser/index.html new file mode 100644 index 000000000..2f846405f --- /dev/null +++ b/_examples/websocket/basic/browser/index.html @@ -0,0 +1,93 @@ + + + + + + + +