From 9ce950578efccef10eb36c2d0a53ed1261ef7df7 Mon Sep 17 00:00:00 2001 From: Will Winder Date: Tue, 27 Oct 2020 14:39:10 -0400 Subject: [PATCH 1/5] Update spec and generate code. --- api/generated/common/routes.go | 33 +++++++++++++++++--- api/generated/v2/routes.go | 56 +++++++++++++++++----------------- api/indexer.oas2.json | 23 ++++++++++++++ api/indexer.oas3.yml | 19 ++++++++++++ 4 files changed, 99 insertions(+), 32 deletions(-) diff --git a/api/generated/common/routes.go b/api/generated/common/routes.go index b98b09cb3..a4313591b 100644 --- a/api/generated/common/routes.go +++ b/api/generated/common/routes.go @@ -19,6 +19,9 @@ type ServerInterface interface { // Returns 200 if healthy. // (GET /health) MakeHealthCheck(ctx echo.Context) error + // Returns 200 if healthy. + // (GET /openapi) + MakeHealthCheck(ctx echo.Context) error } // ServerInterfaceWrapper converts echo contexts to parameters. @@ -47,6 +50,27 @@ func (w *ServerInterfaceWrapper) MakeHealthCheck(ctx echo.Context) error { return err } +// MakeHealthCheck converts echo context to params. +func (w *ServerInterfaceWrapper) MakeHealthCheck(ctx echo.Context) error { + + validQueryParams := map[string]bool{ + "pretty": true, + } + + // Check for unknown query parameters. + for name, _ := range ctx.QueryParams() { + if _, ok := validQueryParams[name]; !ok { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Unknown parameter detected: %s", name)) + } + } + + var err error + + // Invoke the callback with all the unmarshalled arguments + err = w.Handler.MakeHealthCheck(ctx) + return err +} + // RegisterHandlers adds each server route to the EchoRouter. func RegisterHandlers(router interface { CONNECT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route @@ -65,6 +89,7 @@ func RegisterHandlers(router interface { } router.GET("/health", wrapper.MakeHealthCheck, m...) + router.GET("/openapi", wrapper.MakeHealthCheck, m...) } @@ -202,10 +227,10 @@ var swaggerSpec = []string{ "8TGtbFJGalq7THe6PXJvzwY47WOc8Dap4daXBMTn5eU9NPD5QbpNPkQsZKHCI9I8Q72RKpIunnvT0sLX", "DV1sra3Ns9PT6+vrk2B3OslUdbrBoP2VVU22PQ0DjR45DuP5YmROCpc7KzLDnr97jTqTsCXQ435wg/at", "lrIWT0+eoNOmBslrsXi2+OrkycmXhLEtEsEpZZVTQU9chyMRVIxe55jTeAlxXjoWnMXMc+z+9MmT3+E9", - "dF+EOfFGtryU6loyrA5B70I3VcX1DlPqbKOlYU+fPGGi8Nn06IGz3J3aHxaUCrb46PqdXj09jeJbBr+c", - "fgquZZHf7vl8OqjXGNpGTtj0r6ef+i6yeKLg4Oz9ffop2JVuZz6d+lzdue4TMFNtm9NPFE5It69oqnSn", - "nvL0yd546NCcox2pLp59+DTgFbjhVV0Cssni9mO7RS2X+a26Xba/lEpdNnX8iwGus+3i9uPt/w8AAP//", - "AwvMh/6aAAA=", + "dF+EOfFGtryU6loyrA5B70I3VcX1DlPqbKOlYU+fPGGi8Nn06IGz3J3aHxaUCrb46Pqdtji7F2LGzz63", + "hQlDjtXnWMzV09MoWGfwy+mn4CcX+e2ez6eD4pOhbeRRTv96+qnv74snCt7a3t+nn4KR7Hbm06lPPJ7r", + "PgEzFeo5/USxkXSVjKZKd+ppgp/sjYcObVPa8d3i2YdPA8aHG17VJSDPL24/tlvUigy/VbfL9pdSqcum", + "jn8xwHW2Xdx+vP3/AQAA//9JFgJky5sAAA==", } // GetSwagger returns the Swagger specification corresponding to the generated code diff --git a/api/generated/v2/routes.go b/api/generated/v2/routes.go index 688d3ca77..b7c168f6d 100644 --- a/api/generated/v2/routes.go +++ b/api/generated/v2/routes.go @@ -1363,34 +1363,34 @@ var swaggerSpec = []string{ "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", - "KeYAAA==", + "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", + "EYiBoTfmAAA=", } // GetSwagger returns the Swagger specification corresponding to the generated code diff --git a/api/indexer.oas2.json b/api/indexer.oas2.json index 45ebcd1b3..54306ec6b 100644 --- a/api/indexer.oas2.json +++ b/api/indexer.oas2.json @@ -17,6 +17,29 @@ "application/json" ], "paths": { + "/openapi": { + "get": { + "tags": [ + "common" + ], + "produces": [ + "application/json" + ], + "schemes": [ + "http" + ], + "summary": "Returns 200 if healthy.", + "operationId": "makeHealthCheck", + "responses": { + "200": { + "description": "the specification" + }, + "default": { + "description": "Unknown Error" + } + } + } + }, "/health": { "get": { "tags": [ diff --git a/api/indexer.oas3.yml b/api/indexer.oas3.yml index bcf31b126..176bcdf40 100644 --- a/api/indexer.oas3.yml +++ b/api/indexer.oas3.yml @@ -1646,6 +1646,25 @@ ] } }, + "/openapi": { + "get": { + "operationId": "makeHealthCheck", + "responses": { + "200": { + "content": {}, + "description": "the specification" + }, + "default": { + "content": {}, + "description": "Unknown Error" + } + }, + "summary": "Returns 200 if healthy.", + "tags": [ + "common" + ] + } + }, "/v2/accounts": { "get": { "description": "Search for accounts.", From 9acc522e4a93f2b690a5003c9c0f1dd9a3a0b7a8 Mon Sep 17 00:00:00 2001 From: Will Winder Date: Tue, 27 Oct 2020 14:47:10 -0400 Subject: [PATCH 2/5] Update/regenerate endpoints --- api/generated/common/routes.go | 282 ++++++++++++++++----------------- api/handlers.go | 7 + api/indexer.oas2.json | 17 +- api/indexer.oas3.yml | 19 ++- 4 files changed, 180 insertions(+), 145 deletions(-) diff --git a/api/generated/common/routes.go b/api/generated/common/routes.go index a4313591b..ef382ac35 100644 --- a/api/generated/common/routes.go +++ b/api/generated/common/routes.go @@ -19,9 +19,9 @@ type ServerInterface interface { // Returns 200 if healthy. // (GET /health) MakeHealthCheck(ctx echo.Context) error - // Returns 200 if healthy. + // Gets the OpenAPI specification file. // (GET /openapi) - MakeHealthCheck(ctx echo.Context) error + GetOpenAPISpec(ctx echo.Context) error } // ServerInterfaceWrapper converts echo contexts to parameters. @@ -50,8 +50,8 @@ func (w *ServerInterfaceWrapper) MakeHealthCheck(ctx echo.Context) error { return err } -// MakeHealthCheck converts echo context to params. -func (w *ServerInterfaceWrapper) MakeHealthCheck(ctx echo.Context) error { +// GetOpenAPISpec converts echo context to params. +func (w *ServerInterfaceWrapper) GetOpenAPISpec(ctx echo.Context) error { validQueryParams := map[string]bool{ "pretty": true, @@ -67,7 +67,7 @@ func (w *ServerInterfaceWrapper) MakeHealthCheck(ctx echo.Context) error { var err error // Invoke the callback with all the unmarshalled arguments - err = w.Handler.MakeHealthCheck(ctx) + err = w.Handler.GetOpenAPISpec(ctx) return err } @@ -89,148 +89,148 @@ func RegisterHandlers(router interface { } router.GET("/health", wrapper.MakeHealthCheck, m...) - router.GET("/openapi", wrapper.MakeHealthCheck, m...) + router.GET("/openapi", wrapper.GetOpenAPISpec, m...) } // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "jn8xwHW2Xdx+vP3/AQAA//9JFgJky5sAAA==", + "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", } // GetSwagger returns the Swagger specification corresponding to the generated code diff --git a/api/handlers.go b/api/handlers.go index 10b05aeea..f276fc373 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -73,6 +73,13 @@ func (si *ServerImplementation) MakeHealthCheck(ctx echo.Context) error { }) } +// Gets the OpenAPI specification file. +// (GET /openapi) +func (si *ServerImplementation) GetOpenAPISpec(ctx echo.Context) error { + + return nil; +} + // LookupAccountByID queries indexer for a given account. // (GET /v2/accounts/{account-id}) func (si *ServerImplementation) LookupAccountByID(ctx echo.Context, accountID string, params generated.LookupAccountByIDParams) error { diff --git a/api/indexer.oas2.json b/api/indexer.oas2.json index 54306ec6b..733738e03 100644 --- a/api/indexer.oas2.json +++ b/api/indexer.oas2.json @@ -28,8 +28,21 @@ "schemes": [ "http" ], - "summary": "Returns 200 if healthy.", - "operationId": "makeHealthCheck", + "summary": "Gets the OpenAPI specification file.", + "operationId": "getOpenAPISpec", + "parameters": [ + { + "type": "string", + "description": "which spec to retrieve", + "name": "spec", + "in": "path", + "required": true, + "enum": [ + "common", + "v2" + ] + } + ], "responses": { "200": { "description": "the specification" diff --git a/api/indexer.oas3.yml b/api/indexer.oas3.yml index 176bcdf40..a3833b166 100644 --- a/api/indexer.oas3.yml +++ b/api/indexer.oas3.yml @@ -1648,7 +1648,22 @@ }, "/openapi": { "get": { - "operationId": "makeHealthCheck", + "operationId": "getOpenAPISpec", + "parameters": [ + { + "description": "which spec to retrieve", + "in": "path", + "name": "spec", + "required": true, + "schema": { + "enum": [ + "common", + "v2" + ], + "type": "string" + } + } + ], "responses": { "200": { "content": {}, @@ -1659,7 +1674,7 @@ "description": "Unknown Error" } }, - "summary": "Returns 200 if healthy.", + "summary": "Gets the OpenAPI specification file.", "tags": [ "common" ] From 896e2f5ae79a68c4be1c274f39df13cfcc46c318 Mon Sep 17 00:00:00 2001 From: Will Winder Date: Tue, 27 Oct 2020 15:19:54 -0400 Subject: [PATCH 3/5] Implement new endpoint. --- api/generated/common/routes.go | 291 +++++++++++++++++---------------- api/generated/common/types.go | 7 + api/handlers.go | 42 ++++- api/indexer.oas2.json | 2 +- api/indexer.oas3.yml | 2 +- 5 files changed, 200 insertions(+), 144 deletions(-) diff --git a/api/generated/common/routes.go b/api/generated/common/routes.go index ef382ac35..6e142a968 100644 --- a/api/generated/common/routes.go +++ b/api/generated/common/routes.go @@ -8,6 +8,7 @@ import ( "compress/gzip" "encoding/base64" "fmt" + "github.com/algorand/oapi-codegen/pkg/runtime" "github.com/getkin/kin-openapi/openapi3" "github.com/labstack/echo/v4" "net/http" @@ -21,7 +22,7 @@ type ServerInterface interface { MakeHealthCheck(ctx echo.Context) error // Gets the OpenAPI specification file. // (GET /openapi) - GetOpenAPISpec(ctx echo.Context) error + GetOpenAPISpec(ctx echo.Context, params GetOpenAPISpecParams) error } // ServerInterfaceWrapper converts echo contexts to parameters. @@ -55,6 +56,7 @@ func (w *ServerInterfaceWrapper) GetOpenAPISpec(ctx echo.Context) error { validQueryParams := map[string]bool{ "pretty": true, + "spec": true, } // Check for unknown query parameters. @@ -66,8 +68,22 @@ func (w *ServerInterfaceWrapper) GetOpenAPISpec(ctx echo.Context) error { var err error + // Parameter object where we will unmarshal all parameters from the context + var params GetOpenAPISpecParams + // ------------- Required query parameter "spec" ------------- + if paramValue := ctx.QueryParam("spec"); paramValue != "" { + + } else { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Query argument spec is required, but not found")) + } + + err = runtime.BindQueryParameter("form", true, true, "spec", ctx.QueryParams(), ¶ms.Spec) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter spec: %s", err)) + } + // Invoke the callback with all the unmarshalled arguments - err = w.Handler.GetOpenAPISpec(ctx) + err = w.Handler.GetOpenAPISpec(ctx, params) return err } @@ -96,141 +112,142 @@ func RegisterHandlers(router interface { // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the Swagger specification corresponding to the generated code diff --git a/api/generated/common/types.go b/api/generated/common/types.go index 4b8204a56..daff1341f 100644 --- a/api/generated/common/types.go +++ b/api/generated/common/types.go @@ -897,3 +897,10 @@ type TransactionsResponse struct { NextToken *string `json:"next-token,omitempty"` Transactions []Transaction `json:"transactions"` } + +// GetOpenAPISpecParams defines parameters for GetOpenAPISpec. +type GetOpenAPISpecParams struct { + + // which spec to retrieve + Spec string `json:"spec"` +} diff --git a/api/handlers.go b/api/handlers.go index f276fc373..78f474799 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -4,13 +4,14 @@ import ( "context" "fmt" "net/http" + "os" "strconv" + "github.com/algorand/go-algorand-sdk/types" + "github.com/getkin/kin-openapi/openapi3" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/algorand/go-algorand-sdk/types" - "github.com/algorand/indexer/accounting" "github.com/algorand/indexer/api/generated/common" "github.com/algorand/indexer/api/generated/v2" @@ -51,6 +52,28 @@ const defaultAssetsLimit = 100 const maxBalancesLimit = 10000 const defaultBalancesLimit = 1000 +var commonSpecObject *openapi3.Swagger +var v2SpecObject *openapi3.Swagger + +func init() { + var err error + commonSpecObject, err = common.GetSwagger() + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to read common spec: %v", err) + os.Exit(1) + } + + v2SpecObject, err = generated.GetSwagger() + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to read v2 spec: %v", err) + os.Exit(1) + } + + commonSpecObject.Servers = nil + v2SpecObject.Servers = nil +} + + //////////////////////////// // Handler implementation // //////////////////////////// @@ -75,9 +98,18 @@ func (si *ServerImplementation) MakeHealthCheck(ctx echo.Context) error { // Gets the OpenAPI specification file. // (GET /openapi) -func (si *ServerImplementation) GetOpenAPISpec(ctx echo.Context) error { - - return nil; +func (si *ServerImplementation) GetOpenAPISpec(ctx echo.Context, params common.GetOpenAPISpecParams) error { + switch params.Spec { + case "common": + //return ctx.String(http.StatusOK, commonSpec) + return ctx.JSON(http.StatusOK, commonSpecObject) + case "v2": + //return ctx.String(http.StatusOK, v2Spec) + return ctx.JSON(http.StatusOK, v2SpecObject) + default: + return echo.NewHTTPError(http.StatusBadRequest, + fmt.Sprintf("unknown spec '%s', expected one of [common, v2]", params.Spec)) + } } // LookupAccountByID queries indexer for a given account. diff --git a/api/indexer.oas2.json b/api/indexer.oas2.json index 733738e03..237e5b27b 100644 --- a/api/indexer.oas2.json +++ b/api/indexer.oas2.json @@ -35,7 +35,7 @@ "type": "string", "description": "which spec to retrieve", "name": "spec", - "in": "path", + "in": "query", "required": true, "enum": [ "common", diff --git a/api/indexer.oas3.yml b/api/indexer.oas3.yml index a3833b166..902991bbd 100644 --- a/api/indexer.oas3.yml +++ b/api/indexer.oas3.yml @@ -1652,7 +1652,7 @@ "parameters": [ { "description": "which spec to retrieve", - "in": "path", + "in": "query", "name": "spec", "required": true, "schema": { From 1c92decf75ea9e2e6ed40dbebcdd3d305728108c Mon Sep 17 00:00:00 2001 From: Will Winder Date: Tue, 27 Oct 2020 15:32:41 -0400 Subject: [PATCH 4/5] Use path parameter instead of query parameter. --- api/generated/common/routes.go | 294 ++++++++++++++++----------------- api/generated/common/types.go | 7 - api/generated/v2/routes.go | 56 +++---- api/handlers.go | 8 +- api/indexer.oas2.json | 4 +- api/indexer.oas3.yml | 4 +- 6 files changed, 179 insertions(+), 194 deletions(-) diff --git a/api/generated/common/routes.go b/api/generated/common/routes.go index 6e142a968..1b0c6f0ba 100644 --- a/api/generated/common/routes.go +++ b/api/generated/common/routes.go @@ -21,8 +21,8 @@ type ServerInterface interface { // (GET /health) MakeHealthCheck(ctx echo.Context) error // Gets the OpenAPI specification file. - // (GET /openapi) - GetOpenAPISpec(ctx echo.Context, params GetOpenAPISpecParams) error + // (GET /openapi/{spec}) + GetOpenAPISpec(ctx echo.Context, spec string) error } // ServerInterfaceWrapper converts echo contexts to parameters. @@ -56,7 +56,6 @@ func (w *ServerInterfaceWrapper) GetOpenAPISpec(ctx echo.Context) error { validQueryParams := map[string]bool{ "pretty": true, - "spec": true, } // Check for unknown query parameters. @@ -67,23 +66,16 @@ func (w *ServerInterfaceWrapper) GetOpenAPISpec(ctx echo.Context) error { } var err error + // ------------- Path parameter "spec" ------------- + var spec string - // Parameter object where we will unmarshal all parameters from the context - var params GetOpenAPISpecParams - // ------------- Required query parameter "spec" ------------- - if paramValue := ctx.QueryParam("spec"); paramValue != "" { - - } else { - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Query argument spec is required, but not found")) - } - - err = runtime.BindQueryParameter("form", true, true, "spec", ctx.QueryParams(), ¶ms.Spec) + err = runtime.BindStyledParameter("simple", false, "spec", ctx.Param("spec"), &spec) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter spec: %s", err)) } // Invoke the callback with all the unmarshalled arguments - err = w.Handler.GetOpenAPISpec(ctx, params) + err = w.Handler.GetOpenAPISpec(ctx, spec) return err } @@ -105,149 +97,149 @@ func RegisterHandlers(router interface { } router.GET("/health", wrapper.MakeHealthCheck, m...) - router.GET("/openapi", wrapper.GetOpenAPISpec, m...) + router.GET("/openapi/:spec", wrapper.GetOpenAPISpec, m...) } // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "H4sIAAAAAAAC/+w9f2/cNrJfhdh3QJN7u3aaXg9ogMPBlzTXoEkbxG4PeHEejivN7rKWSJWk1t7m+bs/", - "cIaUKInS7tpu2gL3V+IVfwyHM8Ph/OLHWabKSkmQ1syefZxVXPMSLGj8i2eZqqVdiNz9lYPJtKisUHL2", - "LHxjxmoh17P5TLhfK243s/lM8hLaNq7/fKbh51poyGfPrK5hPjPZBkruBra7yrX2I93ezmc8zzUYM5z1", - "e1nsmJBZUefArObS8Mx9Muxa2A2zG2GY78yEZEoCUytmN53GbCWgyM1JAPrnGvQugtpPPg7ifHaz4MVa", - "aS7zxUrpktvZs9mZ73e797OfYaFVAcM1PlflUkgIK4JmQc3mMKtYDitstOGWOejcOkNDq5gBrrMNWym9", - "Z5kERLxWkHU5e/Z+ZkDmoHHnMhBb/O9KA/wCC8v1Guzswzy1dysLemFFmVjaK79zGkxdWMOwLa5xLbYg", - "met1wt7UxrIlMC7Zu5fP2RdffPEVIzRayD3Bja6qnT1eU7MLObcQPh+yqe9ePsf5z/0CD23Fq6oQGXfr", - "TrLPWfudvXoxtpjuIAmCFNLCGjQh3hhI8+qZ+zIxTei4b4LabhaObMY31nO8YZmSK7GuNeSOGmsDxJum", - "ApkLuWZXsBvdwmaaX48Dl7BSGg6kUmr8oGQaz/+b0mlWaw0y2y3WGjiyzobLIUreeVSYjaqLnG34FtfN", - "SzwDfF/m+tI+b3lROxSJTKuzYq0M4x6DOax4XVgWJma1LJzMcqN5OmTCsEqrrcghnzsxfr0R2YZl3NAQ", - "2I5di6Jw6K8N5GNoTq9uD5k3nRxcd8IHLuj3i4x2XXswATfICIusUAYWVu05q8Lxw2XO4tOlPbjMcScX", - "u9gAw8ndBzq1EXfSEXRR7JjFfc0ZN4yzcE7NmVixnarZNW5OIa6wv1+Nw1rJHNJwczqHqtNMxtA3QEYC", - "eUulCuASkVeIUtghxt7wG1HWJZN1uQTt1h7EjFVMg621HIOARtyzZyW/WWhVy/yA09cypWPpZirIxEpA", - "zppRxmBpp9kHj5DHwdPqBBE4YZBRcJpZ9oAj4SaxKY7O3BdW8TVEe3LCfvBshl+tugLZcCNb7vBTpWEr", - "VG2aTiMw4tTTeq9UFhaVhpW4GQJ57tHhSJ3aeFlQ+oMoU9JyISF3YgKBVhaIbUZhiiY89rRdcgN//cvY", - "UdN+1XAFu6T06BMALadR7zfuC/WdXkUzwx6WPJAOV6pPf5O0dxDdYaMFMX3iOHFfvUhIX6U6/Q+4TMVz", - "G7Fe0M8DkhLrCyeBV6JA6fyTo6SAhto4Ra2LiCCvjVhLbmsNzy7ln91fbMHOLZc517n7paSf3tSFFedi", - "7X4q6KfXai2yc7EeQWYDa/JGgt1K+seNl76B2JtmuakpwufUDBV3Da9gp8HNwbMV/nOzQqzzlf5lRrr9", - "2Mwp9fu1Uld1FWMy61xHlzv26sUYdeGQU1IDOcxUShrAC/MZqeDv/G/uJycYQKLci64Upz8ZhapNO3al", - "VQXaCoiv/+6/f9Kwmj2b/ddpay44pW7m1E/YapN2TOATmXPrGZ0Y3LM+aCfAyqq2pMGkeKgh+vcNbP05", - "221Ry58gs4SgLhiPoKzs7rED2MNuHg5b+H9hoTRH4M2DzLXmu18Zj3QELvAoG478g4Ec5V/F10Liwufs", - "egOSlfzKiQMuld2AZm4vwNhwGJIuRedjY7fwJ6rXr05mKY5J7Km596a2u/YQ+9q23bujUdNPyg0PhS7z", - "sPg6ghe6mPsPPyA/xJi8L0+4a+I/eMFlBg+xy0s/1ME7/EZIgUB8o4rcGx/+s81umxtUPsQWPwQDu3H2", - "Miw2+rRHPk75EEgyD4WlIwRcwNd/aL7Zy3tT/D8KlV3daS+ntgpH3TPzN8ALu3m+gV9h/mjsPVBctJeI", - "B6DoX5USo/vOvvVHq9qj6HSHPZJ4omnM7x17vx8+7qD8cPHX2dO+EDx8j81xm3wb7s3xxTjhHvOubCHJ", - "euXu5Nwy7r09ZPy5lJfyBayEFO77s0uZc8tPl9yIzJzWBrRXrk7Wij1jfsgX3PJLOZv3z44x9zYa9D00", - "Vb0sRMauYJfaBfI0DEe4vHzPi7W6vPzArLK8iOzMkf/B2wfbS/SQ5GiChaMMVduF99stNFxznSdAN411", - "EkcmR8jUrHPmxyYjqvcL+vHTbMCryiwKlfFiYSy3kF5+VRVu+bH2zLATc1vGjFU6mEiFCdDg/n6nrDc7", - "8mtG9MVqA4b9u+TVeyHtB7a4rJ88+QLYWVW9dmOeOzj+7U2Gjp92FXkQjrz1tIOllARcOO7n4rAzJBoZ", - "Bz2nXsFLbNKYc58QddiGbaDwRu574ClS+e+Mpj3Xhgm/9OXle3Q5Iz9EoRR8zYU0QRobsZaO+Lw3bwks", - "c6cv5Cfs1YqhNJl3uvuYEi+pGpYVhhxw7MKtEU3WLOMSHXNVjo4qIRmXu775z4C1wdj6Dq5gdxFZvI/0", - "fGfkEls4mhljkMrhI/LKqVWXXfwY/c33pnk8VKqKrQu19FzVkMWzhi5Cn3EGeusAMA/APEm9OqBhgt4r", - "rhOIIOIfQcEdFurGuxfpp5ZXcW1FJqrD7FIE4dtOHzfIPqGeFONq1ZfWA2GalN7UeLHkJi24wX1x++F4", - "iHF0zdrAamEm0pNwBScMo8E84S4LdPI2ASjE2Vyj9zksmwIyxkBLUwlo2Z6mAYwuRuJje8NNcESjvz4w", - "zEEH3IjyeOEQgAqko6KgQQrT0ViEm7eALR/D/7gb6JXMHSeB6TrlGydPEGx9Zpg3rkcKtAvOoOABCm6f", - "2fwoF8585k73Or0dSuLpnkMBa1o4NQ6E4kH7zEQb5OD4frUqhAS2YKJZrcXVUhCFygRFErSy3M8BTvn7", - "M3PU5gY4eIQUGUdgV0oVNDD7TsW8KdfHAClBoHbPw9hKM6miv+GA23gT8ejVyr3q31B2tEw0bz2itI1D", - "nb1xvLzti7GkZt5pxajJ0muakfBOkagTTZm72klTYyCNVZkqTgYquYEC8DhedCTrwqnfSa0CkAzPQ7dI", - "XWePxMod8o+DflDsmIa1MBa0v6ohhI1TufWZ7yw4yLi1oN1E//vo78/eny3+hy9+ebL46r9PP3z8y+3j", - "Pw9+fHr7t7/9X/enL27/9vjvf0rdHLbKwmIltLGLLS9S/srLy/eu0UuDyuBL1zQtfjqoYhTpJEausDjt", - "FewWuSjq9G77eb994ab9rrm3mHp5BTs8ZIBnG7bkNtvgKdSZ3rWZmLrgexf8mhb8mj/Yeg+jJdfUTayV", - "sr05/iBU1ZMnU8yUIMAUcQx3bRSlE+IF7z4voLB8OgIXb5NOYFp+MnVbHzBTHsaeUr8iKMYlL42UXEvX", - "ATm+CiFzuMHoO2GjwDYzWNEID/CqEvlN7+5Mo6ZpHKc4RlEnjX+ABdxdP9geDET35GE0i7vZh7s+bWl0", - "ZlKIoozXdnIQZpz2FSMkEgjxVMKEaPshohxpYxToXjsZ8OJb2P3o2uJyZrfz2f2u/Clc+xH34Ppts71J", - "PGM8NF0BO5azI1HOq0qrLS8WlVZrzcsx0tRq60kTmzPf/BOLuvT1++Lrs9dvPfju7lkA12SimlwVtqv+", - "MKtyN2KlRxgkBPA6bTXcnUkRizafDCPCdIwp1xvw8aeRLuekmCcuYq/mgItZ0RtXVuHMO9JUQhO0tsSj", - "OTMe4N6WuciwuXhQlh9wWJpC90iDeIaJ2NSS4psNUz4GtdHjUHnDuyUSScl3bu/IHDsUC7IuF47wF6YQ", - "WdpgIJfG8Y6sSze8a8yw8Yga6EasxYjRXNYiGss1Mwe4pHtARnMkkRkc62O4Wyrvhqml+LkGJnKQ1n3S", - "yA89FnEcERIFhgeZO7WHc/mBKWmgHf4+p7sbauxcRyCmj/bYtjsA90Vz1QsLbYzS7ofIJHeEayaecXAY", - "TbhVPH14aq6l8CbyBJ2kJY8jDAqJ3p+qFQwGGwI0TdGjEvlsXBq78Y+Qw63YRcBigTunRI/CqMQwtbzm", - "kjIzXD/Clu9tgO7lrte1crfLjBtIOhuFWay0+gXSt8WV25LrDaABBO0eNkYaqmTYOxq7Ew8eC8nG8tFm", - "wwX8xnCMEvGYthR9ZF0n2QgvIz1H5mn05QYjEpdEwM8xvy72I4ywQew9PaXxWzbwMPe5ICv49ZJnV2ml", - "xcF01jpCOuYuq1joHHbBW+Za2ot8Kk1bYXDzKtClsF03eEsMd1VA/lgkn0MmSl6krZ85Yv+ic67mYi0o", - "fag2EKXP+IFYpYS0REW5MFXBd+RqalHzasWezKNsMr8budgKI5YFYIvPqcWSGzyfGpNm08UtD6TdGGz+", - "9IDmm1rmGnK7MYRYo1ijJOJ1qbEvL8FeA0j2BNt9/hV7hJZ1I7bw2GHRax2zZ59/hSlH9MeTlND0OXdT", - "ciVHwfIvL1jSdIyuBRrDHUd+1JSgCVnT4yJsgpuo6yG8hC291NvPSyWXfA1pj2m5Bybqi7uJhrkeXmRO", - "WX7GarVjwqbnB8udfFpsuNmkz1sCg2WqLIUtHQNZxYwqHT21GSk0aRiOUgbpxG3gCh/RjVFhnl/3Sv/p", - "jbCU3JFaNTqbvuMldNE6Z9wwUzuY28wzLxCTCNZgQG/Tk+iRDQ7npu/LHkklF6Xjnfyxl2dd+kvGBynL", - "i+S0NsiufmTK9NCHKlVulMUoYusOYnkkk+6M4lqn18lrN9UP7177g6FUGromkmUIe+kcMRqsFrBNcmw/", - "RqrRTJrjImA+paBQSOMAVvw5hmxMlVbq6gqgEnJ9unR9SIWgUfvKwxokGGHGGXu9cehxnx0rRtY0HJot", - "oVBybT49TwbAR6yja0AKevViH9SDgUOC6AKbjiPGtXNTvA0JpTS0a//psRG5xPcGy77zbcc92E7oUBTO", - "cx8zQw6WrjmV1nvN0cgDMqfjBtlww4UccWsD5CMuOsAZz5W2gsz8AL+Bw82KEozlZZUWimjDIE5ErnaA", - "Nl2clmQgUzI3zAiZAYNKmc2+ENu08mhvJE5WCEOiL66fkylNaYR4AljVC388NGBlMtCzC+NCK2XHAMWj", - "Io7QVcoyXtsNSNs4xgHT+PsrcbTDNWpCpHCTyGJvnBgOCZi8KHZzJuxnNA663vBcKEFfFcCsBmDXG2WA", - "FcC30NZswNE+M+ziRuQGKzIUcCMytda82oiMKZ2DPmEvfRIxamfUyc/35IT5ADrv2L+4kbi8XAGpbvE6", - "aZkhEqMxq8UrnjMli93gZyx0YKDYgjlhF9eKgDBtsK9xh2Gnx7LGWwpnuVitAPkUl4NKHfZrP0QwYfUJ", - "rIHRDOvX9Btw241coDYzotxaukHdyOfUiPl4oa6tsscaJWnSgaAKyNegncqtSkK7KKEN7nY6hNK2vUiu", - "gMJonGQT0mqV1xlQSPF5hx4jsMQApKYKQRQ7iDQUin+0cIZLYJCp7qKAl64ndA+UqrtC3DvYgmZLd8tq", - "B3pEQieCy1iuMS4OMGKSlgr547Rwrqu15jkcZmJHIfgD9WhCYcMIW3XcAD+69n21qaObdE789CkdhbK4", - "UyaW5SlZNqp6vRuLL3tJNU00FBT4gzVAsO18oFitABZGyLRVZgWAsp1nGVSOnONyZwBOUJGeiaICY2LD", - "2ep2WFqxBQpJmlAGFhkvsrog1/vESX+d8UJ3zaUFrKxyBBZXwWlNFcLNtUTXP5XfoPm0E4BRD8dRjkx3", - "vgVp8aHahWMO3XMFDYP8FgVsIa24A6dYv2/Utbvk7pq9cFO0YMyJX5BVGshJV0EfB+32D/6CEYFPzOSp", - "bhpItxUjyM3jfa5AC5WLjAn5E3hubsRSoBgU35mSVsgay+ZoaOGmc4Jh2GI/NHFIAXos7N596MbtSLju", - "7HYe6XPdKBdj+RUQ2CHA0h+Nh+6pBiPyesTEonnWhew4YvTM+45bONXN1poHosuehGqYfIrp+rTcI5ve", - "bg2xNCqnOsL3EGHFm5A65gX10JMX8nlCy5G7j7Iq2AdCXH0z9ha08XaaoSkFbvaM7Vp0xqcsJ60qZSC/", - "wyyL4FE1o/PtSBy3NBeULwpLxv7gXXoJDI6kgDUAmGths81iJIrOtaUWDoZ3/ZvWcEpSIZALYbWCzB4C", - "A4ZjUfWoUSjos4PiBfAc42fbyDqKqeuD8ug7xdzQJtJrpBGohbZqDY7y+IjSCA2F7CP+H9WBtL9V+D90", - "3RzABkGR8XufNlJRG088bVg2ZzswiJWmOFHEI5UyvEhbnsOkORR8NzUlNuhO2ii2wfhOZw53Z5g7UOAG", - "stp2GSah+nk+m5rcNekvuGHPIVfEBXf6O/m11krH6Zw9Z5xk4FqwUDKHbjUKv4cMsSbzpruB7lsUBNjO", - "WYIxfA3pkl4xLYaGKRL8esuLkUjFd1BpME7TZZxdfH322jtHxuIVs9HwWm597LzlzHsNk3vnbmpp2UYh", - "F/jd1zVMWkbHwiwoysJ9HvQ+zMw7KBkzkvobITRE7QwB+jaE5bGKC+/5a4M1h5j1AbzDkOpDQvvaDe4v", - "wofF4iCplcQJ4UOKZhv8TClrDV0fQb75clFLvuWi4MsCUqXT0P9dirVG2ZduMc4EkVFwj6zuQdKbtp0j", - "jJhC1qDOSAJjRpRVQe4jf+a7EzruxY6KAm6jRo50WXTCG/YFKAyTNKajEr6Xz1VZFTAuDSryNlFBThL4", - "mADE81x4gRgsBCrLat2ajvpxBz/yQlB1OINJQFKpyv3rBKt0/8Gqmaq29H/g2v2HkiK7/8uhAFRaQ8aQ", - "G2o2n+FIGLlGA4Ugtpk7aXLSc33fVEbRHSPBD7J5DiVNwvI5GT7XkfC4MwVZatuQQKY0fVnjlzjykBEg", - "6Ps04S/DcrCgS6dybdx9ts42GGzH1xBi79Chi/a+3kSd0UNsSjeO07u1TMUzGoj8/QXXa9DMu+CZr23T", - "+PFLLno1Kvu+R7yB8ZT03RcROKysimdlFBeYCDwMYFzB7pSOAvz9Du7H8fDCEcAwyPBXBOlesYpxuOse", - "er3qnKKU4dyJ0m3Af8DT1MHnee3I03QYyHvo8nAdyA61geE6D/eRxLhNiIp2bYeqgkPkjmtwdnmIBpdO", - "FHXdUYUkhIRU5oTy/6kUQFqnH8PPm9z1bv2ZfhVrFEqG8aIIZaYzVZZKoo3DXY07DiaZMwyQMFh3WjKQ", - "WyhUBcnWiKQDYvOMWEvI7Y0k5/o5/nlxI1Nt4+MXW0fLS9Ubid4RuFshnl6yPcVIUo3/u47YRjG2I4bn", - "Je4+4ksKtWpGxKFWoO8z5oUf44BaE2upg5EpBAeGqCm3vwPdqYlKrEMVH6xl3Kb4YlxfSAZuXYb0Nkcz", - "Ry5ydBwm57hDCQkscT6VFK/RotoYa33MDEZ/Uld30OcO7Wq6KIBrL+R6MRF4nWHktW8YKsugGSS5yHhw", - "R166hHy6KhO6xPpvxFxz/4iF6z8Rfk2VNtpnOtJx91HtbjnMrmOPXr14zDC/s5tpxts6FO37NvuXHZe+", - "OAwiCsocwEJvC9wNihXAmKeq59xnKxg5RvalKa+2bYYytupbF/dCeWC00jfcYMqxb+69qr/TEKUOkL60", - "9HCoOHXp6DTW+WytVZ2OaFlTSts/sAA8A5kpKpZvgaGKQ3EWZsO//Pzp6dMv/8pysQZjT9i/MNCd9Jth", - "AYTubjLRFlbgnQ8IWJMvQ4qKd6ZHc278hg6CJoR3quMwn36Hkwmo0erwEZ9hL2k1JyG3UKtVMs3oe/yd", - "CeldcDrIPg1D7B4g/ahI+h3P1W+pwvrtfLYnL7/YNin5d2PwAsbqzRQ3CTL94umipdQT9tr1ZiBXSrv7", - "Y1nbmhf0kkgwG8XUQwHZtq3+hLHY8hfQCq/Hkil3G+6fNSJCNjrqeYYarvHRJg6GJlmrCU19dI5KwJyA", - "fEy3r8RrZ7W0osBfHRp/jLBYOQHvgP7XRhQJKqiU+25iOOZMKkb1BOOWFFbVJhYQzD6utUNIn5ad4pzK", - "PG39cZSALvXXUTJ3e/fONlyuoX0UIj6fKQaG/CBR6ZEeTR5TDL4rY/sXQ6lGnO/SV5Bw2i9GvzcmlE+L", - "7orvSpD2jkLhLfUmvz495TOthOoRJTT03lePauxdEje2+9hkX/knSbyxjARRtMZ5bMkyGL6Hqnn7LJOv", - "/taqT0Rc7pRa1RgbFoXTBWMZ3Qhbo+sV7JgOBoC41A1p7ndQ9OnESL+CdiFKaFVj0iVSp7A46LTwjwkm", - "L00UGEzS7LOJ5TTDTFOFGaGKcGeaoolmF44g2/OmT/ftkaHpZFdB183ZKbfVjevDa+EJe9HEW6JxnSKP", - "2iBM/5JlzwRP2VRNcpvQ8dtZZGREK/3l5fuKvL4JxvUN6Jh3bYYHvm/Cs9W6KRuZsAqEZjcr0G271M08", - "tFzpX9qGQ6NAaDas9NmRPPOHeNYlzUN+mxc4QSKGZ9a9u8yp7Eanmk3zvGZLcy357DFhTZaE8aEKaLaP", - "DquOnnJIrmhk2aSM0faH57woLm4kzZRwQLcvoaScTlRlyQehN1LTiVbvdwpRYp5jYxM5zzKnkeRtkFsE", - "52eG9WsdUOjbsNpB52A+UmomqrM29Mf1enTdaMcYak0iY1yv65Ksur/++vasYLQ4kMh9/kvI5BxoQtGj", - "n0r7yHex8mkNY0nsB9Z/4RXpaGuRtRpXG3c3Qulzp6tD5dNflVxkjUvUnV34CqBil+RKvJydsFcUJauB", - "5yREtbCQqkTSWT+mjl1DUaBB2L963OxuVCXoxHFRp9KLQcrWgEV0E6a7P2ptG16ZemTHxqSSj8XpbNJv", - "sEPP3Ux+pGaTMi6lsn+gfVopDWItp8oAr3gQxKaPrqQ47koJnx0TI94MpHSjot5NiJEhHQej+qY8XyhZ", - "7FLSLc6E6om3BheTtYCb3CjTpmYav8qoPMBhSwxs/jZaIRIW3vDePuz67lCG6N61h3oDdLh2X99OZMrE", - "q0eUmNEdep9mFLmVJjUjylUv3MJJPmhYhPMrSAyZUxp73Qa6XMoz9gto5S9wzVD4Um8bvkhpvT6d7yTR", - "qak5YQbd+lMeWdODFj+hnY3Wnrm8fH/DB6c8wnSP8/1uZYT27vHLkZoK8R4HD4YvonDPYik04wRix151", - "uLx8v+J53ku6j4NfSMg0pTEI2764BBILvx6p4zC5m6vJ3ZwYvxPzfR1uYBNVmcONjaLrrwPGqcch1Xfa", - "4La2/M5w6kOYv/HWHkQa4RZ6X+IIs06Qx0RpKV7ineisKbfugVMNfCfMixDv/wy/62DbKFZBmgWXSXDq", - "9cpi0wtYrOTVgxau2is8IojHXcEw6ghuMyn8wRzGi5LE/cvcDVv1im9P+wr2LX38EXQ0gbiv/fh5Hhd5", - "aB+X0FBi8kd7xUtsjq+I03hp21JF5FxHXzhVRAu1YdoZYlwz9sqNzItrvjPBdtkS1vhwAatUaiJhN4uz", - "w8jgmsaNztCJ8w4yUQl8L6MrBRsaH7f4jbxXQpZDJ3QobUVsG6NBXmMKOG9rTHUdNcFP46vl8OiAnns0", - "86J7W6eBg3XWtXkexg4rarY0Os8OqL+eqD3WoHSPzPOetElh5013x8o46kVCjqYZl26yX+x5xE8hXSO3", - "aW+4vuqcgdx0X2qggm6dUTsqRhR7fofi7d66/7atr40ROI2t/UfQ5Gx7x2WuSvaylkQFj3589/Kxf7sr", - "EFnIl3bE5yH5Hdd1Xw3ruieqmzuUPFRF96v8N6roXgwqut99pYfXcg+0NVbJPYRdkz9nLYzVCRPtpy/h", - "PiVmgm9uWs54N8KxgsZ3I0njZ7qbIkV61MibZ7YpKdM7Iu+ljnTegeGWnvMzvlxZq5Z0Q+LawoGyiWyL", - "4/r2hcx1xxspLu01EpwE61slHhUx/lmaIIWjJ7AKTL+jgodFpCasapmbHgpprWLaeTepJXglIbSZ9AOO", - "HZ+HnpnnsZevCwl60XzYevP8Tb+kORaho3Jz+AQRvX7Tr9TSotK/uJjIKSzUWmSGbBXHuhtfh76381lZ", - "F1bccZw3oS/5P9MnpkAP37nlMuc6Z5A//fLLz79ql/s7E1dDJCXjPvyyvDmOW5F1Nb5mdQcIsbCVJ2s1", - "FFmjXiG9bo3kjRdojmUz26ik45w5CEh6vdFiQ3TBcsd4ROrKKbiFFe1Pc/fbhptNKzq7L+FxyZmXV/1o", - "KsxQ+G1K2kdMsbiXV7/HHmOCo2WS3wNvxOKR6OFQkfgmkiTDyqB+iWSgdPQS0rYQ11UBTrdrZeCQbzK9", - "q6w6DVtDR36Y81wMK3LH46Wxjg2wpKBymgil8jplstW48CrdQnWHYmYD/JzHcKUqnW00GAdROhRkoy8v", - "P6SVTcpITWuX6U63R+7teQ+nXYwT3kY13OqKgPi0vLyHBj49SLfJh4iFXKnwiDTPUG+kiqSzM29amvm6", - "obONtZV5dnp6fX19EuxOJ5kqT9cYtL+wqs42p2GgwSPHYTxfjMxJ4WJnRWbY2dtXqDMJWwA97gc3aN9q", - "KGv29OQJOm0qkLwSs2ezL06enHxOGNsgEZxSVjkV9MR1OBJBxehVjjmNVxDnpWPBWcw8x+5Pnzz5Dd5D", - "90WYE29kyyupriXD6hD0LnRdllzvMKXO1loa9vTJEyZWPpsePXCWu1P7/YxSwWYfXL/TBmcjiPkn2O8r", - "kGdvX51XkIXHD+gdpmfv+4D5gnEVZBS3SAVgnXxyX3+uQe9moVowPrE8i2W71TXEzwOFcCcP8Hy2fZpI", - "hr79kN6s4VPUTbHEkPd1JwT/E7xH1eOlOyxbiQJGsb19ehpFE/V+Of0YHPkiv93z+bRXHTO0jVze6V9P", - "P3YdkvFEwZ3c+fv0Y7Di3U58OvWZ0VPdR2CmSkKnHyl4k+660VTpTh1V9aO98dCh8UxvA3F2JRPc8LIq", - "AIXSzFGN36JGpvmtup03vxRKXdVV/IsBrrPN7PbD7f8HAAD//6puMnpsnAAA", + "H4sIAAAAAAAC/+x9/2/cNvLov0Ls+wBN7u3aafrpB6iBw8GXNNegSRvEbg94cR6OK83uspZIHUmtvc3z", + "//7AGVKiJEq7a7tpC9xPiVf8MhzODIfzjZ9mmSorJUFaMzv7NKu45iVY0PgXzzJVS7sQufsrB5NpUVmh", + "5OwsfGPGaiHXs/lMuF8rbjez+UzyEto2rv98puHftdCQz86srmE+M9kGSu4GtrvKtfYj3d3NZzzPNRgz", + "nPVHWeyYkFlR58Cs5tLwzH0y7EbYDbMbYZjvzIRkSgJTK2Y3ncZsJaDIzUkA+t816F0EtZ98HMT57HbB", + "i7XSXOaLldIlt7Oz2bnvd7f3s59hoVUBwzW+UOVSSAgrgmZBzeYwq1gOK2y04ZY56Nw6Q0OrmAGusw1b", + "Kb1nmQREvFaQdTk7+zAzIHPQuHMZiC3+d6UBfoWF5XoNdvZxntq7lQW9sKJMLO213zkNpi6sYdgW17gW", + "W5DM9Tphb2tj2RIYl+z9qxfsq6+++oYRGi3knuBGV9XOHq+p2YWcWwifD9nU969e4PwXfoGHtuJVVYiM", + "u3Un2ee8/c5evxxbTHeQBEEKaWENmhBvDKR59dx9mZgmdNw3QW03C0c24xvrOd6wTMmVWNcackeNtQHi", + "TVOBzIVcs2vYjW5hM81vx4FLWCkNB1IpNX5UMo3n/13pNKu1BpntFmsNHFlnw+UQJe89KsxG1UXONnyL", + "6+YlngG+L3N9aZ+3vKgdikSm1XmxVoZxj8EcVrwuLAsTs1oWTma50TwdMmFYpdVW5JDPnRi/2YhswzJu", + "aAhsx25EUTj01wbyMTSnV7eHzJtODq574QMX9MdFRruuPZiAW2SERVYoAwur9pxV4fjhMmfx6dIeXOa4", + "k4tdboDh5O4DndqIO+kIuih2zOK+5owbxlk4p+ZMrNhO1ewGN6cQ19jfr8ZhrWQOabg5nUPVaSZj6Bsg", + "I4G8pVIFcInIK0Qp7BBjb/mtKOuSybpcgnZrD2LGKqbB1lqOQUAj7tmzkt8utKplfsDpa5nSsXQzFWRi", + "JSBnzShjsLTT7INHyOPgaXWCCJwwyCg4zSx7wJFwm9gUR2fuC6v4GqI9OWE/eTbDr1Zdg2y4kS13+KnS", + "sBWqNk2nERhx6mm9VyoLi0rDStwOgbzw6HCkTm28LCj9QZQpabmQkDsxgUArC8Q2ozBFEx572i65gf/5", + "77Gjpv2q4Rp2SenRJwBaTqPeb9wX6ju9imaGPSx5IB2uVJ/+JmnvILrDRgti+sRx4r56kZC+SnX6H3CZ", + "iuc2Yr2gnwckJdaXTgKvRIHS+RdHSQENtXGKWhcRQV4bsZbc1hrOruRf3F9swS4slznXufulpJ/e1oUV", + "F2LtfiropzdqLbILsR5BZgNr8kaC3Ur6x42XvoHY22a5qSnC59QMFXcNr2Gnwc3BsxX+c7tCrPOV/nVG", + "uv3YzCn1+41S13UVYzLrXEeXO/b65Rh14ZBTUgM5zFRKGsAL8zmp4O/9b+4nJxhAotyLrhSnvxiFqk07", + "dqVVBdoKiK//7r//pWE1O5v9r9PWXHBK3cypn7DVJu2YwCcy59YzOjG4Z33QToCVVW1Jg0nxUEP0HxrY", + "+nO226KWv0BmCUFdMJ5AWdndUwewh908Hrbw/8JCaY7AmweZa813vzEe6Qhc4FE2HPknAznKv4qvhcSF", + "z9nNBiQr+bUTB1wquwHN3F6AseEwJF2KzsfGbuFPVK9fncxSHJPYU/PgTW137TH2tW27d0ejpp+VGx4L", + "XeZx8XUEL3Qx9x9+QH6IMflQnnDXxL/zgssMHmOXl36og3f4rZACgfhOFbk3Pvxnm902N6h8jC1+DAZ2", + "4+xlWGz0eY98nPIxkGQeC0tHCLiAr//QfLOXD6b4vxcqu77XXk5tFY66Z+bvgBd282IDv8H80dh7oLhs", + "LxGPQNG/KSVG9519649WtUfR6Q57JPFE05g/Ovb+OHzcQfnh4q+zp30hePgem+M2+S7cm+OLccI95l3Z", + "QpL1yt3JuWXce3vI+HMlr+RLWAkp3PezK5lzy0+X3IjMnNYGtFeuTtaKnTE/5Etu+ZWczftnx5h7Gw36", + "HpqqXhYiY9ewS+0CeRqGI1xdfeDFWl1dfWRWWV5EdubI/+Dtg+0lekhyNMHCUYaq7cL77RYabrjOE6Cb", + "xjqJI5MjZGrWOfNjkxHV+wX9+Gk24FVlFoXKeLEwlltIL7+qCrf8WHtm2Im5LWPGKh1MpMIEaHB/f1DW", + "mx35DSP6YrUBw/5V8uqDkPYjW1zVz559Bey8qt64MS8cHP/yJkPHT7uKPAhH3nrawVJKAi4c93Nx2BkS", + "jYyDXlCv4CU2acy5T4g6bMM2UHgj9wPwFKn890bTnmvDhF/66uoDupyRH6JQCr7mQpogjY1YS0d83pu3", + "BJa50xfyE/Z6xVCazDvdfUyJl1QNywpDDjh26daIJmuWcYmOuSpHR5WQjMtd3/xnwNpgbH0P17C7jCze", + "R3q+M3KJLRzNjDFI5fAReeXUqssufoz+5nvTPB4qVcXWhVp6rmrI4qyhi9BnnIHeOQDMIzBPUq8OaJig", + "94rrBCKI+EdQcI+FuvEeRPqp5VVcW5GJ6jC7FEH4rtPHDbJPqCfFuFr1pfVAmCalNzVeLLlJC25wX9x+", + "OB5iHF2zNrBamIn0JFzBCcNoME+4ywKdvE0ACnE21+h9DsumgIwx0NJUAlq2p2kAo4uR+NjecBMc0eiv", + "Dwxz0AE3ojxeOgSgAumoKGiQwnQ0FuHmLWDLx/A/7gZ6LXPHSWC6TvnGyRMEW58Z5o3rkQLtgjMoeICC", + "22c2P8qFM5+5071Ob4eSeLrnUMCaFk6NA6F40L4w0QY5OH5crQohgS2YaFZrcbUURKEyQZEErSz3c4BT", + "/v7CHLW5AQ4eIUXGEdiVUgUNzH5QMW/K9TFAShCo3fMwttJMquhvOOA23kQ8erVyr/o3lB0tE81bjyht", + "41Bnbxwv7/piLKmZd1oxarL0mmYkvFMk6kRT5q520tQYSGNVpoqTgUpuoAA8jhcdybpw6ndSqwAkw4vQ", + "LVLX2ROxcof806AfFDumYS2MBe2vaghh41RufeY7Cw4ybi1oN9H/ffK3sw/ni//DF78+W3zzv08/fvrv", + "u6d/Gfz4/O6vf/1/3Z++uvvr07/9V+rmsFUWFiuhjV1seZHyV15dfXCNXhlUBl+5pmnx00EVo0gnMXKF", + "xWmvYbfIRVGnd9vP+/1LN+0Pzb3F1Mtr2OEhAzzbsCW32QZPoc70rs3E1AXfu+A3tOA3/NHWexgtuaZu", + "Yq2U7c3xJ6GqnjyZYqYEAaaIY7hroyidEC9493kJheXTEbh4m3QC0/KTqdv6gJnyMPaU+hVBMS55aaTk", + "WroOyPFVCJnDLUbfCRsFtpnBikZ4gFeVyG97d2caNU3jOMUxijpp/AMs4O76wfZgILonD6NZ3M0+3PVp", + "S6Mzk0IUZby2k4Mw47SvGCGRQIinEiZE2w8R5Ugbo0D32smAF9/D7mfXFpczu5vPHnblT+Haj7gH1++a", + "7U3iGeOh6QrYsZwdiXJeVVptebGotFprXo6RplZbT5rYnPnmn1nUpa/fl9+ev3nnwXd3zwK4JhPV5Kqw", + "XfWnWZW7ESs9wiAhgNdpq+HuTIpYtPlkGBGmY0y52YCPP410OSfFPHERezUHXMyK3riyCmfekaYSmqC1", + "JR7NmfEAD7bMRYbNxaOy/IDD0hS6RxrEM0zEppYU32yY8jGojR6HyhveLZFISr5ze0fm2KFYkHW5cIS/", + "MIXI0gYDuTSOd2RduuFdY4aNR9RAN2ItRozmshbRWK6ZOcAl3QMymiOJzOBYH8PdUnk3TC3Fv2tgIgdp", + "3SeN/NBjEccRIVFgeJC5U3s4lx+Ykgba4R9yuruhxs51BGL6aI9tuwNwXzZXvbDQxijtfohMcke4ZuIZ", + "B4fRhFvF04en5loKbyJP0Ela8jjCoJDo/alawWCwIUDTFD0qkc/HpbEb/wg53IpdBCwWuHNK9CiMSgxT", + "yxsuKTPD9SNs+d4G6F7uet0od7vMuIGks1GYxUqrXyF9W1y5LbnZABpA0O5hY6ShSoa9o7E78eCxkGws", + "H202XMBvDMcoEY9pS9FH1nWSjfAy0nNknkZfbjAicUkE/ALz62I/wggbxN7TUxq/ZQMPc58LsoLfLHl2", + "nVZaHEznrSOkY+6yioXOYRe8Za6lvcin0rQVBjevAl0K23WDt8RwXwXkz0XyOWSi5EXa+pkj9i8752ou", + "1oLSh2oDUfqMH4hVSkhLVJQLUxV8R66mFjWvV+zZPMom87uRi60wYlkAtviSWiy5wfOpMWk2XdzyQNqN", + "webPD2i+qWWuIbcbQ4g1ijVKIl6XGvvyEuwNgGTPsN2X37AnaFk3YgtPHRa91jE7+/IbTDmiP56lhKbP", + "uZuSKzkKln96wZKmY3Qt0BjuOPKjpgRNyJoeF2ET3ERdD+ElbOml3n5eKrnka0h7TMs9MFFf3E00zPXw", + "InPK8jNWqx0TNj0/WO7k02LDzSZ93hIYLFNlKWzpGMgqZlTp6KnNSKFJw3CUMkgnbgNX+IhujArz/LpX", + "+s9vhKXkjtSq0dn0Ay+hi9Y544aZ2sHcZp55gZhEsAYDepueRI9scDg3fV/2RCq5KB3v5E+9POvSXzI+", + "SFleJKe1QXb1I1Omhz5UqXKjLEYRW3cQyyOZdG8U1zq9Tl67qX56/8YfDKXS0DWRLEPYS+eI0WC1gG2S", + "Y/sxUo1m0hwXAfMpBYVCGgew4s8xZGOqtFLX1wCVkOvTpetDKgSN2lce1iDBCDPO2OuNQ4/77Fgxsqbh", + "0GwJhZJr8/l5MgA+Yh1dA1LQ65f7oB4MHBJEF9h0HDGunZviXUgopaFd+8+PjcglvjdY9r1vO+7BdkKH", + "onBe+JgZcrB0zam03huORh6QOR03yIYbLuSIWxsgH3HRAc54obQVZOYH+B0cblaUYCwvq7RQRBsGcSJy", + "tQO06eK0JAOZkrlhRsgMGFTKbPaF2KaVR3srcbJCGBJ9cf2cTGlKI8QTwKpe+OOhASuTgZ5dGBdaKTsG", + "KB4VcYSuUpbx2m5A2sYxDpjG31+Jox2uURMihZtEFnvrxHBIwORFsZszYb+gcdD1hudCCfq6AGY1ALvZ", + "KAOsAL6FtmYDjvaFYZe3IjdYkaGAW5GptebVRmRM6Rz0CXvlk4hRO6NOfr5nJ8wH0HnH/uWtxOXlCkh1", + "i9dJywyRGI1ZLV7xnClZ7AY/Y6EDA8UWzAm7vFEEhGmDfY07DDs9ljXeUjjLxWoFyKe4HFTqsF/7IYIJ", + "q09gDYxmWL+m34HbbuUCtZkR5dbSDepWvqBGzMcLdW2VPdYoSZMOBFVAvgbtVG5VEtpFCW1wt9MhlLbt", + "RXIFFEbjJJuQVqu8zoBCii869BiBJQYgNVUIothBpKFQ/KOFM1wCg0x1FwW8dD2je6BU3RXi3sEWNFu6", + "W1Y70BMSOhFcxnKNcXGAEZO0VMifpoVzXa01z+EwEzsKwZ+oRxMKG0bYquMG+Nm176tNHd2kc+KnT+ko", + "lMWdMrEsT8myUdXr/Vh82SuqaaKhoMAfrAGCbecDxWoFsDBCpq0yKwCU7TzLoHLkHJc7A3CCivRMFBUY", + "ExvOVrfD0ootUEjShDKwyHiR1QW53idO+puMF7prLi1gZZUjsLgKTmuqEG6uJbr+qfwGzaedAIx6OI5y", + "ZLrzLUiLD9UuHHPonitoGOS3KGALacUdOMX6fadu3CV31+yFm6IFY078gqzSQE66Cvo4aLd/8heMCHxi", + "Jk9100C6rRhBbh7vcwVaqFxkTMhfwHNzI5YCxaD4zpS0QtZYNkdDCzedEwzDFvuhiUMK0GNh9+5DN25H", + "wk1nt/NIn+tGuRjLr4HADgGW/mg8dE81GJHXIyYWzbMuZMcRo2fe99zCqW621jwSXfYkVMPkU0zXp+Ue", + "2fR2a4ilUTnVEb6HCCvehNQxL6iHnryQzxNajtx9lFXBPhDi6puxt6CNt9MMTSlwu2ds16IzPmU5aVUp", + "A/k9ZlkEj6oZnW9H4riluaB8UVgy9gfv0ktgcCQFrAHA3AibbRYjUXSuLbVwMLzv37SGU5IKgVwIqxVk", + "9hAYMByLqkeNQkGfHRQvgecYP9tG1lFMXR+UJz8o5oY2kV4jjUAttFVrcJSnR5RGaChkH/H/rA6k/a3C", + "/6Hr5gA2CIqM3/u0kYraeOJpw7I524FBrDTFiSIeqZThRdryHCbNoeC7qSmxQXfSRrENxnc6c7g7w9yB", + "AreQ1bbLMAnVz/PZ1OSuSX/BDXsOuSIuuNPfyW+1VjpO5+w54yQD14KFkjl0q1H4PWSINZk33Q1036Ig", + "wHbOEozha0iX9IppMTRMkeC3W16MRCq+h0qDcZou4+zy2/M33jkyFq+YjYbXcutj5y1n3muY3Dt3U0vL", + "Ngq5wO++rmHSMjoWZkFRFu7zoPdhZt5ByZiR1N8IoSFqZwjQ9yEsj1VceM9fG6w5xKwP4B2GVB8S2tdu", + "cH8RPiwWB0mtJE4IH1I02+BnSllr6PoI8s2Xi1ryLRcFXxaQKp2G/u9SrDXKvnSLcSaIjIJ7ZHUPkt60", + "7RxhxBSyBnVGEhgzoqwKch/5M9+d0HEvdlQUcBs1cqTLohPesC9AYZikMR2V8KN8ocqqgHFpUJG3iQpy", + "ksDHBCCe58ILxGAhUFlW69Z01I87+JkXgqrDGUwCkkpV7l8nWKX7D1bNVLWl/wPX7j+UFNn9Xw4FoNIa", + "MobcULP5DEfCyDUaKASxzdxJk5Oe6/umMoruGQl+kM1zKGkSls/J8LmOhMedKchS24YEMqXpyxq/xJGH", + "jABB36cJfxmWgwVdOpVr4+6zdbbBYDu+hhB7hw5dtPf1JuqMHmJTunGc3q1lKp7RQOTvL7heg2beBc98", + "bZvGj19y0atR2fc94g2Mp6TvvojAYWVVPCujuMBE4GEA4xp2p3QU4O/3cD+OhxeOAIZBhr8hSA+KVYzD", + "XffQ63XnFKUM506UbgP+I56mDj7Pa0eepsNA3kOXh+tAdqgNDNd5uI8kxm1CVLRrO1QVHCJ3XIOzy0M0", + "uHSiqOuOKiQhJKQyJ5T/z6UA0jr9GH7e5K5368/0q1ijUDKMF0UoM52pslQSbRzuatxxMMmcYYCEwbrT", + "koHcQqEqSLZGJB0Qm2fEWkJubyU51y/wz8tbmWobH7/YOlpeqt5I9I7A/Qrx9JLtKUaSavzfd8Q2irEd", + "MTwvcf8RX1GoVTMiDrUC/ZAxL/0YB9SaWEsdjEwhODBETbn9HehOTVRiHar4YC3jNsUX4/pCMnDrMqS3", + "OZo5cpGj4zA5xz1KSGCJ86mkeI0W1cZY62NmMPqTurqDPndoV9NFAVx7IdeLicDrDCOvfcNQWQbNIMlF", + "xoM78tIl5NNVmdAl1n8j5ob7Ryxc/4nwa6q00T7TkY67j2p3y2F2HXvy+uVThvmd3Uwz3tahaN+32b/s", + "uPTFYRBRUOYAFnpb4H5QrADGPFU95z5bwcgxsi9NebVtM5SxVd+6uBfKA6OVvuMGU459c+9V/YOGKHWA", + "9KWlh0PFqUtHp7HOZ2ut6nREy5pS2v6OBeAZyExRsXwLDFUcirMwG/71l89Pn3/9PywXazD2hP0TA91J", + "vxkWQOjuJhNtYQXe+YCANfkypKh4Z3o058Zv6CBoQninOg7z+Xc4mYAarQ4f8Rn2klZzEnILtVol04x+", + "xN+ZkN4Fp4Ps0zDE7gHSj4qk3/Nc/Z4qrN/NZ3vy8ottk5J/PwYvYKzeTHGbINOvni9aSj1hb1xvBnKl", + "tLs/lrWteUEviQSzUUw9FJBt2+pPGIstfwWt8HosmXK34f5ZIyJko6OeZ6jhGh9t4mBokrWa0NQnF6gE", + "zAnIp3T7Srx2VksrCvzVofHnCIuVE/AO6H9uRJGggkq57yaGY86kYlRPMG5JYVVtYgHB7ONaO4T0edkp", + "zqnM09YfRwnoUn8TJXO3d+9sw+Ua2kch4vOZYmDIDxKVHunR5DHF4Lsytn8xlGrE+S59BQmn/WL0e2NC", + "+bzorviuBGnvKRTeUW/y69NTPtNKqB5RQkPvffWoxt4lcWO7j032lX+SxBvLSBBFa5zHliyD4XuomrfP", + "Mvnqb636RMTlTqlVjbFhUThdMJbRjbA1ul7DjulgAIhL3ZDmfg9Fn06M9Ctol6KEVjUmXSJ1CouDTgv/", + "mGDy0kSBwSTNvphYTjPMNFWYEaoId6Ypmmh24QiyvWj6dN8eGZpOdhV03ZydclvduD68Fp6wl028JRrX", + "KfKoDcL0L1n2TPCUTdUktwkdv51FRka00l9dfajI65tgXN+AjnnXZnjg+yY8W62bspEJq0BodrsC3bZL", + "3cxDy5X+tW04NAqEZsNKnx3JM3+MZ13SPOS3eYETJGJ4Zt27y5zKbnSq2TTPa7Y015LPHhPWZEkYH6qA", + "ZvvosOroKYfkikaWTcoYbX94wYvi8lbSTAkHdPsSSsrpRFWWfBB6IzWdaPV+pxAl5jk2NpHzLHMaSd4G", + "uUVwfmFYv9YBhb4Nqx10DuYjpWaiOmtDf1yvR9eNdoyh1iQyxvW6Lsmq+9uvb88KRosDidznv4RMzoEm", + "FD36qbSPfBcrn9YwlsR+YP0XXpGOthZZq3G1cXcjlD53ujpUPv1VyUXWuETd2YWvACp2Ra7Eq9kJe01R", + "shp4TkJUCwupSiSd9WPq2A0UBRqE/avHze5GVYJOHBd1Kr0YpGwNWEQ3Ybr7s9a24ZWpR3ZsTCr5WJzO", + "Jv0OO/TCzeRHajYp41Iq+yfap5XSINZyqgzwigdBbProSorjrpTw2TEx4s1ASjcq6v2EGBnScTCqb8rz", + "hZLFLiXd4kyonnhrcDFZC7jJjTJtaqbxq4zKAxy2xMDm76IVImHhDe/d467vHmWIHlx7qDdAh2v39e1E", + "pky8ekSJGd2h92lGkVtpUjOiXPXCLZzkg4ZFOL+CxJA5pbHXbaDLlTxnv4JW/gLXDIUv9bbhi5TW69P5", + "ThKdmpoTZtCtP+WRNT1o8RPa2WjtmaurD7d8cMojTA843+9XRmjvHr8aqakQ73HwYPgiCg8slkIzTiB2", + "7FWHq6sPK57nvaT7OPiFhExTGoOw7YtLILHwm5E6DpO7uZrczYnxOzHfN+EGNlGVOdzYKLr+JmCcehxS", + "facNbmvL7wynPoT5G2/tQaQRbqEPJY4w6wR5TJSW4iXeic6bcuseONXAd8K8CPH+z/C7DraNYhWkWXCZ", + "BKderyw2vYDFSl49auGqvcIjgnjcFQyjjuA2k8IfzGG8KEncv8zdsFWv+Pa0r2Df0scfQUcTiPvaj5/n", + "cZGH9nEJDSUmf7RXvMTm+Io4jZe2LVVEznX0hVNFtFAbpp0hxjVjr93IvLjhOxNsly1hjQ8XsEqlJhJ2", + "szg7jAyuadzoDJ047yETlcD3MrpSsKHxcYvfyHslZDl0QofSVsS2MRrkNaaA87bGVNdRE/w0vloOjw7o", + "uUczL7q3dRo4WGddmxdh7LCiZkuj8+yA+uuJ2mMNSvfIPO9JmxR23nR3rIyjXiTkaJpx6Sb7xZ5H/BTS", + "NXKb9pbr684ZyE33pQYq6NYZtaNiRLHn9yje7q3779r62hiB09jafwZNzrb3XOaqZK9qSVTw5Of3r576", + "t7sCkYV8aUd8HpI/cF331bCue6K6uUPJY1V0v85/p4ruxaCi+/1Xengt90BbY5XcQ9g1+XPWwlidMNF+", + "/hLuU2Im+Oam5Yx3IxwraHw3kjR+pvspUqRHjbx5ZpuSMr0j8kHqSOcdGG7pOT/jy5W1akk3JK4tHCib", + "yLY4rm9fyFx3vJHi0l4jwUmwvlXiURHjn6UJUjh6AqvA9DsqeFhEasKqlrnpoZDWKqadd5NaglcSQptJ", + "P+DY8XnomXkRe/m6kKAXzYetN8/f9EuaYxE6KjeHTxDR6zf9Si0tKv2Li4mcwkKtRWbIVnGsu/FN6Hs3", + "n5V1YcU9x3kb+pL/M31iCvTwXVguc65zBvnzr7/+8pt2uX8wcTVEUjLuwy/Lm+O4FVlX42tWd4AQC1t5", + "slZDkTXqFdLr1kjeeIHmWDazjUo6zpmDgKTXGy02RBcsd4xHpK6cgltY0f40d79tuNm0orP7Eh6XnHl5", + "1Y+mwgyF36ekfcQUiwd59XvsMSY4Wib5I/BGLB6JHg4ViW8jSTKsDOqXSAZKRy8hbQtxXRXgdLtWBg75", + "JtO7yqrTsDV05Ic5L8SwInc8Xhrr2ABLCiqniVAqr1MmW40Lr9ItVPcoZjbAz0UMV6rS2UaDcRClQ0E2", + "+urqY1rZpIzUtHaZ7nR35N5e9HDaxTjhbVTDra4JiM/Ly3to4PODdJd8iFjIlQqPSPMM9UaqSDo796al", + "ma8bOttYW5mz09Obm5uTYHc6yVR5usag/YVVdbY5DQMNHjkO4/liZE4KFzsrMsPO371GnUnYAuhxP7hF", + "+1ZDWbPnJ8/QaVOB5JWYnc2+Onl28iVhbINEcEpZ5VTQE9fhSAQVo9c55jReQ5yXjgVnMfMcuz9/9ux3", + "eA/dF2FOvJEtr6W6kQyrQ9C70HVZcr3DlDpba2nY82fPmFj5bHr0wFnuTu0PM0oFm310/U49zk4/mQqy", + "u1H8/APsjxXI83evLyrIwhsI9BzT2Yc+fL5uXAUZhS9SHVgnptxXtymzUDMYH1qexRLe6hriR4JC0JMH", + "ez7bPk+kRN99TG/Z8EHqpmRiyP66F5r/Ad6v6tHSHZatRAGjON8+P41iinq/nH4K7nyR3+35fNqrkRna", + "Ro7v9K+nn7puyXii4FTu/H36Kdjy7iY+nfr86KnuIzBTPaHTTxTCSTfeaKp0p47C+sneeujQhKa3gTa7", + "8glueVkVgKJp5qjGb1Ej2fxW3c2bXwqlrusq/sUA19lmdvfx7v8HAAD//2/I5YBynAAA", } // GetSwagger returns the Swagger specification corresponding to the generated code diff --git a/api/generated/common/types.go b/api/generated/common/types.go index daff1341f..4b8204a56 100644 --- a/api/generated/common/types.go +++ b/api/generated/common/types.go @@ -897,10 +897,3 @@ type TransactionsResponse struct { NextToken *string `json:"next-token,omitempty"` Transactions []Transaction `json:"transactions"` } - -// GetOpenAPISpecParams defines parameters for GetOpenAPISpec. -type GetOpenAPISpecParams struct { - - // which spec to retrieve - Spec string `json:"spec"` -} diff --git a/api/generated/v2/routes.go b/api/generated/v2/routes.go index b7c168f6d..1ee3e298b 100644 --- a/api/generated/v2/routes.go +++ b/api/generated/v2/routes.go @@ -1363,34 +1363,34 @@ var swaggerSpec = []string{ "KsDpdq0MHPJNpreVVadha+jID3OeiWFF7ni8NNaxAZYUVE4ToVRep0y2GhdepVuoblHMbICfsxiuVKWz", "jQbjIEqHgmz0+fmntLJJGalp7TLd6ebAvT3r4bSLccLbqIZbXRAQD8vLO2jg4UG6ST5ELORKhUekeYZ6", "I1Uknb3wpqWZrxs621hbmeenp1dXVyfB7nSSqfJ0jUH7C6vqbHMaBho8chzG88XInBQutlZkhr149wZ1", - "JmELoMf94BrtWw1lzZ6ePEGnTQWSV2L2fPbs5MnJ94SxDRLBKWWVz55/vpnPTpuG+Nfl09M4xGOdfNQA", - "uM42dC3wbU8wixforvMmbxq9VvpFGM67C+jZoucfx6rjOwZ2f/+7Br2dhXK6sfmkdWINmWV3fmZ4mhtj", - "CW2tKY4zMWMhSmEPnK6tQMPXEM12wn4xEJV5w5e5g+oYgn5DlbKm0whgbogUXC35DlMLac1ebcVAMy6D", - "vXmNCSDoKpBRBONJp4SSN1D6Wti+REm2ZbUs8NFdGfnKTLM0rK5FtWky7jHgM09C+KTxOlBioWGShYdw", - "4SA8cEeml174svLf6LrdFLdZ9BuKaW0DsCLvnq8lj+s14eXSC9iOAdNmxY2T3M6wqunPY+AHVg1O1bYy", - "OJXcwkKcFWgcUmZo1zVYNDOYgkjcBL9+LgxfFoAFk/Ce13EKj/JbUyfwgB2I6w6My7S+O3xihk9Y9hvr", - "f6BkfvrkSTiMvO0mGu30N0NaRjvgeBjfITHsydeYO2/6j+ThNQU0yfxO+4rmFHr1d9xFeW0XKC6HI/8S", - "8iorvhbSO/bRIlLyCzR8SMpmcBozGBu404c6owxujMJeanuK2cMw0R5rXQR8SioPXcgfoX/9MWka3N0f", - "P84MHpizTze9Y/j0cwhpEvnN6Jn8VqmLuopeRm3rfg+OZmrrd/SvWyTPyaO5MSAFbkdidvpERMsNkLMY", - "UVbXcNBRtS/v355XvwgnHcA/X5Bf0jR6byRaIOHsINHTfq3qfei1bx2fINi4cvQuwj1qf710YDfLSlx7", - "2gruzkz1CrdIrEYXSqUloUC3CQ52sF5ABrAxtaD5+jk5cYiijye9h1SAFNrE+sO2cngoMDjwN4etQD91", - "a9ZvBNPgbfXwZjpbNNbV8Hw6W5Bl5Kx9SZ0tyFZIlpLU2ptX3lOL3+f19eEiPR9GC+maSZdbn2Sc3ou0", - "1vI1pfvOKbllSkclYdupS+GLsI5N3zS4FxCofmYfBn69A4bQ4FCF9Itcr/sri9ZELwxYUboLlRc0XLL3", - "r1+yZ8+e/egf8rGQe7VibME0JCWyxcA1AiPntvm8j/h5//olAnDWGKD2arVzUxuKuq+V44jf3sKPxoT/", - "WcaEr6n906p9iq7XhSmzd1o9afJ/E7O3car3exP4H3IPHj5Gc/fHY0bqOodzrjPhvV1eooyYvUzdcftx", - "a3e31bTF+75tREfr9/r+7/c9MtnPWtYtqXa0mPWSf76g1Sya5PRzl3l2W8+6BR+TRoi2Sdpyljoc+yy8", - "84D8Ysaqbm75AST8cEarL2SqatIDd8p5bDnl0KShjqanPfS512g7IdNJSLoM8oOuSU0KQhsRmNRim0cx", - "73V2N/roannv4nUP89WS3sxNzee+HTbfvdzp71nCNHy230Hpmh+PyOaIDKLlCx2OOPzp50AYuw9En2a2", - "25nkGu5/IMapMF/rKDS+kt5e5PmAPhuc8k4UMJ/9+cmfD0LNZAX8zqsrNzc3u4/ZiMJOfZX4nZ4grELX", - "rxtztVEY+Re/QT5JgWGy4+H8bRrjj7bD/9dth9+ouI/F0F6ayeCtmaOSEsryt0L2S97V4kPkkJCCTtWh", - "uB7ApO5yjCo4RhUcowqOUQXHqIKj///o/z/6/4/+//ZxAVlsWxf8oKZjnBruAI0SpjsP1VM14zFSb2pE", - "PVCKwUtVLoWEVgsOK2iTBqzyryd2SzmHhliZKXgNdqxroVUxcr6GSsFNfvt8Fooic+303H3O285qAoCY", - "3R/NHxc6PGht9G53oQw+ghWVm5YOz0WxZdY/IcOdMhhWMmdixbaqZlfILIW4wP74wAIFc5RUArSbq4H1", - "i+pRq7zvvmhKNk1GeNznhfQYrHIMVvlawSr0wvzpZyrqTxfPndb75iGj1K0Xn0XfddMlMqDp0oFfMUAP", - "a9+Z2j9a3C1xvZexIXIYT+cuNG7jo4XhaGE4WhiOFoajheGYt3C0WxztFke7xdFucbRbHO0WY3aLr2lr", - "+KOVszhaM749a8Z89sM93ugno9D6cY6d2o2fnba/O9KRuYtRMSgknzKdTN/kE0YSf9/YPy/uD8Qdt3sO", - "9BC6+7aCHx+QrFvDFNZB15eBxLpF5uCal1UBWF9u5kjH92/K02WqLJH1m1/8yNEvnoVuPt383wAAAP//", - "EYiBoTfmAAA=", + "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", + "NwAA//94dTfKPuYAAA==", } // GetSwagger returns the Swagger specification corresponding to the generated code diff --git a/api/handlers.go b/api/handlers.go index 78f474799..1e0f6ff70 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -97,9 +97,9 @@ func (si *ServerImplementation) MakeHealthCheck(ctx echo.Context) error { } // Gets the OpenAPI specification file. -// (GET /openapi) -func (si *ServerImplementation) GetOpenAPISpec(ctx echo.Context, params common.GetOpenAPISpecParams) error { - switch params.Spec { +// (GET /openapi/{spec}) +func (si *ServerImplementation) GetOpenAPISpec(ctx echo.Context, spec string) error { + switch spec { case "common": //return ctx.String(http.StatusOK, commonSpec) return ctx.JSON(http.StatusOK, commonSpecObject) @@ -108,7 +108,7 @@ func (si *ServerImplementation) GetOpenAPISpec(ctx echo.Context, params common.G return ctx.JSON(http.StatusOK, v2SpecObject) default: return echo.NewHTTPError(http.StatusBadRequest, - fmt.Sprintf("unknown spec '%s', expected one of [common, v2]", params.Spec)) + fmt.Sprintf("unknown spec '%s', expected one of [common, v2]", spec)) } } diff --git a/api/indexer.oas2.json b/api/indexer.oas2.json index 237e5b27b..971d4f13f 100644 --- a/api/indexer.oas2.json +++ b/api/indexer.oas2.json @@ -17,7 +17,7 @@ "application/json" ], "paths": { - "/openapi": { + "/openapi/{spec}": { "get": { "tags": [ "common" @@ -35,7 +35,7 @@ "type": "string", "description": "which spec to retrieve", "name": "spec", - "in": "query", + "in": "path", "required": true, "enum": [ "common", diff --git a/api/indexer.oas3.yml b/api/indexer.oas3.yml index 902991bbd..bf84391b6 100644 --- a/api/indexer.oas3.yml +++ b/api/indexer.oas3.yml @@ -1646,13 +1646,13 @@ ] } }, - "/openapi": { + "/openapi/{spec}": { "get": { "operationId": "getOpenAPISpec", "parameters": [ { "description": "which spec to retrieve", - "in": "query", + "in": "path", "name": "spec", "required": true, "schema": { From b5488f03ac039244e678270307d16549e9c14716 Mon Sep 17 00:00:00 2001 From: Will Winder Date: Tue, 27 Oct 2020 15:44:01 -0400 Subject: [PATCH 5/5] Fix linter warning. --- api/handlers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/handlers.go b/api/handlers.go index 1e0f6ff70..587cd1f19 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -96,7 +96,7 @@ func (si *ServerImplementation) MakeHealthCheck(ctx echo.Context) error { }) } -// Gets the OpenAPI specification file. +// GetOpenAPISpec Gets the OpenAPI specification file. // (GET /openapi/{spec}) func (si *ServerImplementation) GetOpenAPISpec(ctx echo.Context, spec string) error { switch spec {