Browse Source

lnrpc: extract or add REST annotations to yaml

master
Oliver Gugger 4 years ago
parent
commit
fe16be5bb8
No known key found for this signature in database
GPG Key ID: 8E4256593F177720
  1. 19
      lnrpc/autopilotrpc/autopilot.pb.go
  2. 380
      lnrpc/autopilotrpc/autopilot.pb.gw.go
  3. 197
      lnrpc/autopilotrpc/autopilot.swagger.json
  4. 16
      lnrpc/chainrpc/chainnotifier.pb.go
  5. 253
      lnrpc/chainrpc/chainnotifier.pb.gw.go
  6. 239
      lnrpc/chainrpc/chainnotifier.swagger.json
  7. 8
      lnrpc/gen_protos.sh
  8. 89
      lnrpc/invoicesrpc/invoices.pb.go
  9. 385
      lnrpc/invoicesrpc/invoices.pb.gw.go
  10. 1
      lnrpc/invoicesrpc/invoices.proto
  11. 260
      lnrpc/invoicesrpc/invoices.swagger.json
  12. 40
      lnrpc/lnclipb/lncli.swagger.json
  13. 290
      lnrpc/rest-annotations.yaml
  14. 43
      lnrpc/routerrpc/router.pb.go
  15. 782
      lnrpc/routerrpc/router.pb.gw.go
  16. 563
      lnrpc/routerrpc/router.swagger.json
  17. 1609
      lnrpc/rpc.pb.go
  18. 2503
      lnrpc/rpc.pb.gw.go
  19. 274
      lnrpc/rpc.proto
  20. 836
      lnrpc/rpc.swagger.json
  21. 22
      lnrpc/signrpc/signer.pb.go
  22. 475
      lnrpc/signrpc/signer.pb.gw.go
  23. 274
      lnrpc/signrpc/signer.swagger.json
  24. 10
      lnrpc/verrpc/verrpc.pb.go
  25. 147
      lnrpc/verrpc/verrpc.pb.gw.go
  26. 63
      lnrpc/verrpc/verrpc.swagger.json
  27. 46
      lnrpc/walletrpc/walletkit.pb.go
  28. 1102
      lnrpc/walletrpc/walletkit.pb.gw.go
  29. 575
      lnrpc/walletrpc/walletkit.swagger.json
  30. 92
      lnrpc/walletunlocker.pb.go
  31. 168
      lnrpc/walletunlocker.pb.gw.go
  32. 29
      lnrpc/walletunlocker.proto
  33. 61
      lnrpc/walletunlocker.swagger.json
  34. 10
      lnrpc/watchtowerrpc/watchtower.pb.go
  35. 147
      lnrpc/watchtowerrpc/watchtower.pb.gw.go
  36. 63
      lnrpc/watchtowerrpc/watchtower.swagger.json
  37. 25
      lnrpc/wtclientrpc/wtclient.pb.go
  38. 590
      lnrpc/wtclientrpc/wtclient.pb.gw.go
  39. 245
      lnrpc/wtclientrpc/wtclient.swagger.json

19
lnrpc/autopilotrpc/autopilot.pb.go

@ -8,6 +8,8 @@ import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -524,6 +526,23 @@ type AutopilotServer interface {
SetScores(context.Context, *SetScoresRequest) (*SetScoresResponse, error)
}
// UnimplementedAutopilotServer can be embedded to have forward compatible implementations.
type UnimplementedAutopilotServer struct {
}
func (*UnimplementedAutopilotServer) Status(ctx context.Context, req *StatusRequest) (*StatusResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Status not implemented")
}
func (*UnimplementedAutopilotServer) ModifyStatus(ctx context.Context, req *ModifyStatusRequest) (*ModifyStatusResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ModifyStatus not implemented")
}
func (*UnimplementedAutopilotServer) QueryScores(ctx context.Context, req *QueryScoresRequest) (*QueryScoresResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method QueryScores not implemented")
}
func (*UnimplementedAutopilotServer) SetScores(ctx context.Context, req *SetScoresRequest) (*SetScoresResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SetScores not implemented")
}
func RegisterAutopilotServer(s *grpc.Server, srv AutopilotServer) {
s.RegisterService(&_Autopilot_serviceDesc, srv)
}

380
lnrpc/autopilotrpc/autopilot.pb.gw.go

@ -0,0 +1,380 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: autopilotrpc/autopilot.proto
/*
Package autopilotrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package autopilotrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_Autopilot_Status_0(ctx context.Context, marshaler runtime.Marshaler, client AutopilotClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq StatusRequest
var metadata runtime.ServerMetadata
msg, err := client.Status(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Autopilot_Status_0(ctx context.Context, marshaler runtime.Marshaler, server AutopilotServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq StatusRequest
var metadata runtime.ServerMetadata
msg, err := server.Status(ctx, &protoReq)
return msg, metadata, err
}
func request_Autopilot_ModifyStatus_0(ctx context.Context, marshaler runtime.Marshaler, client AutopilotClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ModifyStatusRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ModifyStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Autopilot_ModifyStatus_0(ctx context.Context, marshaler runtime.Marshaler, server AutopilotServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ModifyStatusRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ModifyStatus(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Autopilot_QueryScores_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Autopilot_QueryScores_0(ctx context.Context, marshaler runtime.Marshaler, client AutopilotClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryScoresRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Autopilot_QueryScores_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.QueryScores(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Autopilot_QueryScores_0(ctx context.Context, marshaler runtime.Marshaler, server AutopilotServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryScoresRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Autopilot_QueryScores_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.QueryScores(ctx, &protoReq)
return msg, metadata, err
}
func request_Autopilot_SetScores_0(ctx context.Context, marshaler runtime.Marshaler, client AutopilotClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SetScoresRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SetScores(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Autopilot_SetScores_0(ctx context.Context, marshaler runtime.Marshaler, server AutopilotServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SetScoresRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SetScores(ctx, &protoReq)
return msg, metadata, err
}
// RegisterAutopilotHandlerServer registers the http handlers for service Autopilot to "mux".
// UnaryRPC :call AutopilotServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterAutopilotHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AutopilotServer) error {
mux.Handle("GET", pattern_Autopilot_Status_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Autopilot_Status_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Autopilot_Status_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Autopilot_ModifyStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Autopilot_ModifyStatus_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Autopilot_ModifyStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Autopilot_QueryScores_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Autopilot_QueryScores_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Autopilot_QueryScores_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Autopilot_SetScores_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Autopilot_SetScores_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Autopilot_SetScores_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterAutopilotHandlerFromEndpoint is same as RegisterAutopilotHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterAutopilotHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterAutopilotHandler(ctx, mux, conn)
}
// RegisterAutopilotHandler registers the http handlers for service Autopilot to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterAutopilotHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterAutopilotHandlerClient(ctx, mux, NewAutopilotClient(conn))
}
// RegisterAutopilotHandlerClient registers the http handlers for service Autopilot
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AutopilotClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AutopilotClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "AutopilotClient" to call the correct interceptors.
func RegisterAutopilotHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AutopilotClient) error {
mux.Handle("GET", pattern_Autopilot_Status_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Autopilot_Status_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Autopilot_Status_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Autopilot_ModifyStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Autopilot_ModifyStatus_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Autopilot_ModifyStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Autopilot_QueryScores_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Autopilot_QueryScores_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Autopilot_QueryScores_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Autopilot_SetScores_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Autopilot_SetScores_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Autopilot_SetScores_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Autopilot_Status_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "autopilot", "status"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Autopilot_ModifyStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "autopilot", "modify"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Autopilot_QueryScores_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "autopilot", "scores"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Autopilot_SetScores_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "autopilot", "scores"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_Autopilot_Status_0 = runtime.ForwardResponseMessage
forward_Autopilot_ModifyStatus_0 = runtime.ForwardResponseMessage
forward_Autopilot_QueryScores_0 = runtime.ForwardResponseMessage
forward_Autopilot_SetScores_0 = runtime.ForwardResponseMessage
)

197
lnrpc/autopilotrpc/autopilot.swagger.json

@ -4,17 +4,144 @@
"title": "autopilotrpc/autopilot.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/autopilot/modify": {
"post": {
"summary": "ModifyStatus is used to modify the status of the autopilot agent, like\nenabling or disabling it.",
"operationId": "ModifyStatus",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/autopilotrpcModifyStatusResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/autopilotrpcModifyStatusRequest"
}
}
],
"tags": [
"Autopilot"
]
}
},
"/v2/autopilot/scores": {
"get": {
"summary": "QueryScores queries all available autopilot heuristics, in addition to any\nactive combination of these heruristics, for the scores they would give to\nthe given nodes.",
"operationId": "QueryScores",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/autopilotrpcQueryScoresResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "pubkeys",
"in": "query",
"required": false,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi"
},
{
"name": "ignore_local_state",
"description": "If set, we will ignore the local channel state when calculating scores.",
"in": "query",
"required": false,
"type": "boolean",
"format": "boolean"
}
],
"tags": [
"Autopilot"
]
},
"post": {
"summary": "SetScores attempts to set the scores used by the running autopilot agent,\nif the external scoring heuristic is enabled.",
"operationId": "SetScores",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/autopilotrpcSetScoresResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/autopilotrpcSetScoresRequest"
}
}
],
"tags": [
"Autopilot"
]
}
},
"/v2/autopilot/status": {
"get": {
"summary": "Status returns whether the daemon's autopilot agent is active.",
"operationId": "Status",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/autopilotrpcStatusResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Autopilot"
]
}
}
},
"definitions": {
"QueryScoresResponseHeuristicResult": {
"type": "object",
@ -31,6 +158,16 @@
}
}
},
"autopilotrpcModifyStatusRequest": {
"type": "object",
"properties": {
"enable": {
"type": "boolean",
"format": "boolean",
"description": "Whether the autopilot agent should be enabled or not."
}
}
},
"autopilotrpcModifyStatusResponse": {
"type": "object"
},
@ -45,6 +182,23 @@
}
}
},
"autopilotrpcSetScoresRequest": {
"type": "object",
"properties": {
"heuristic": {
"type": "string",
"description": "The name of the heuristic to provide scores to."
},
"scores": {
"type": "object",
"additionalProperties": {
"type": "number",
"format": "double"
},
"description": "A map from hex-encoded public keys to scores. Scores must be in the range\n[0.0, 1.0]."
}
}
},
"autopilotrpcSetScoresResponse": {
"type": "object"
},
@ -57,6 +211,39 @@
"description": "Indicates whether the autopilot is active or not."
}
}
},
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
}
}
}

16
lnrpc/chainrpc/chainnotifier.pb.go

@ -8,6 +8,8 @@ import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -833,6 +835,20 @@ type ChainNotifierServer interface {
RegisterBlockEpochNtfn(*BlockEpoch, ChainNotifier_RegisterBlockEpochNtfnServer) error
}
// UnimplementedChainNotifierServer can be embedded to have forward compatible implementations.
type UnimplementedChainNotifierServer struct {
}
func (*UnimplementedChainNotifierServer) RegisterConfirmationsNtfn(req *ConfRequest, srv ChainNotifier_RegisterConfirmationsNtfnServer) error {
return status.Errorf(codes.Unimplemented, "method RegisterConfirmationsNtfn not implemented")
}
func (*UnimplementedChainNotifierServer) RegisterSpendNtfn(req *SpendRequest, srv ChainNotifier_RegisterSpendNtfnServer) error {
return status.Errorf(codes.Unimplemented, "method RegisterSpendNtfn not implemented")
}
func (*UnimplementedChainNotifierServer) RegisterBlockEpochNtfn(req *BlockEpoch, srv ChainNotifier_RegisterBlockEpochNtfnServer) error {
return status.Errorf(codes.Unimplemented, "method RegisterBlockEpochNtfn not implemented")
}
func RegisterChainNotifierServer(s *grpc.Server, srv ChainNotifierServer) {
s.RegisterService(&_ChainNotifier_serviceDesc, srv)
}

253
lnrpc/chainrpc/chainnotifier.pb.gw.go

@ -0,0 +1,253 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: chainrpc/chainnotifier.proto
/*
Package chainrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package chainrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_ChainNotifier_RegisterConfirmationsNtfn_0(ctx context.Context, marshaler runtime.Marshaler, client ChainNotifierClient, req *http.Request, pathParams map[string]string) (ChainNotifier_RegisterConfirmationsNtfnClient, runtime.ServerMetadata, error) {
var protoReq ConfRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.RegisterConfirmationsNtfn(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
func request_ChainNotifier_RegisterSpendNtfn_0(ctx context.Context, marshaler runtime.Marshaler, client ChainNotifierClient, req *http.Request, pathParams map[string]string) (ChainNotifier_RegisterSpendNtfnClient, runtime.ServerMetadata, error) {
var protoReq SpendRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.RegisterSpendNtfn(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
func request_ChainNotifier_RegisterBlockEpochNtfn_0(ctx context.Context, marshaler runtime.Marshaler, client ChainNotifierClient, req *http.Request, pathParams map[string]string) (ChainNotifier_RegisterBlockEpochNtfnClient, runtime.ServerMetadata, error) {
var protoReq BlockEpoch
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.RegisterBlockEpochNtfn(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
// RegisterChainNotifierHandlerServer registers the http handlers for service ChainNotifier to "mux".
// UnaryRPC :call ChainNotifierServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterChainNotifierHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ChainNotifierServer) error {
mux.Handle("POST", pattern_ChainNotifier_RegisterConfirmationsNtfn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("POST", pattern_ChainNotifier_RegisterSpendNtfn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("POST", pattern_ChainNotifier_RegisterBlockEpochNtfn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
return nil
}
// RegisterChainNotifierHandlerFromEndpoint is same as RegisterChainNotifierHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterChainNotifierHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterChainNotifierHandler(ctx, mux, conn)
}
// RegisterChainNotifierHandler registers the http handlers for service ChainNotifier to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterChainNotifierHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterChainNotifierHandlerClient(ctx, mux, NewChainNotifierClient(conn))
}
// RegisterChainNotifierHandlerClient registers the http handlers for service ChainNotifier
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ChainNotifierClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ChainNotifierClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "ChainNotifierClient" to call the correct interceptors.
func RegisterChainNotifierHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ChainNotifierClient) error {
mux.Handle("POST", pattern_ChainNotifier_RegisterConfirmationsNtfn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_ChainNotifier_RegisterConfirmationsNtfn_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ChainNotifier_RegisterConfirmationsNtfn_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_ChainNotifier_RegisterSpendNtfn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_ChainNotifier_RegisterSpendNtfn_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ChainNotifier_RegisterSpendNtfn_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_ChainNotifier_RegisterBlockEpochNtfn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_ChainNotifier_RegisterBlockEpochNtfn_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ChainNotifier_RegisterBlockEpochNtfn_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_ChainNotifier_RegisterConfirmationsNtfn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "chainnotifier", "register", "confirmations"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_ChainNotifier_RegisterSpendNtfn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "chainnotifier", "register", "spends"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_ChainNotifier_RegisterBlockEpochNtfn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "chainnotifier", "register", "blocks"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_ChainNotifier_RegisterConfirmationsNtfn_0 = runtime.ForwardResponseStream
forward_ChainNotifier_RegisterSpendNtfn_0 = runtime.ForwardResponseStream
forward_ChainNotifier_RegisterBlockEpochNtfn_0 = runtime.ForwardResponseStream
)

239
lnrpc/chainrpc/chainnotifier.swagger.json

@ -4,17 +4,143 @@
"title": "chainrpc/chainnotifier.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/chainnotifier/register/blocks": {
"post": {
"summary": "RegisterBlockEpochNtfn is a synchronous response-streaming RPC that\nregisters an intent for a client to be notified of blocks in the chain. The\nstream will return a hash and height tuple of a block for each new/stale\nblock in the chain. It is the client's responsibility to determine whether\nthe tuple returned is for a new or stale block in the chain.",
"description": "A client can also request a historical backlog of blocks from a particular\npoint. This allows clients to be idempotent by ensuring that they do not\nmissing processing a single block within the chain.",
"operationId": "RegisterBlockEpochNtfn",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/chainrpcBlockEpoch"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of chainrpcBlockEpoch"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/chainrpcBlockEpoch"
}
}
],
"tags": [
"ChainNotifier"
]
}
},
"/v2/chainnotifier/register/confirmations": {
"post": {
"summary": "RegisterConfirmationsNtfn is a synchronous response-streaming RPC that\nregisters an intent for a client to be notified once a confirmation request\nhas reached its required number of confirmations on-chain.",
"description": "A client can specify whether the confirmation request should be for a\nparticular transaction by its hash or for an output script by specifying a\nzero hash.",
"operationId": "RegisterConfirmationsNtfn",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/chainrpcConfEvent"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of chainrpcConfEvent"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/chainrpcConfRequest"
}
}
],
"tags": [
"ChainNotifier"
]
}
},
"/v2/chainnotifier/register/spends": {
"post": {
"summary": "RegisterSpendNtfn is a synchronous response-streaming RPC that registers an\nintent for a client to be notification once a spend request has been spent\nby a transaction that has confirmed on-chain.",
"description": "A client can specify whether the spend request should be for a particular\noutpoint or for an output script by specifying a zero outpoint.",
"operationId": "RegisterSpendNtfn",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/chainrpcSpendEvent"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of chainrpcSpendEvent"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/chainrpcSpendRequest"
}
}
],
"tags": [
"ChainNotifier"
]
}
}
},
"definitions": {
"chainrpcBlockEpoch": {
"type": "object",
@ -69,6 +195,31 @@
}
}
},
"chainrpcConfRequest": {
"type": "object",
"properties": {
"txid": {
"type": "string",
"format": "byte",
"description": "The transaction hash for which we should request a confirmation notification\nfor. If set to a hash of all zeros, then the confirmation notification will\nbe requested for the script instead."
},
"script": {
"type": "string",
"format": "byte",
"description": "An output script within a transaction with the hash above which will be used\nby light clients to match block filters. If the transaction hash is set to a\nhash of all zeros, then a confirmation notification will be requested for\nthis script instead."
},
"num_confs": {
"type": "integer",
"format": "int64",
"description": "The number of desired confirmations the transaction/output script should\nreach before dispatching a confirmation notification."
},
"height_hint": {
"type": "integer",
"format": "int64",
"description": "The earliest height in the chain for which the transaction/output script\ncould have been included in a block. This should in most cases be set to the\nbroadcast height of the transaction/output script."
}
}
},
"chainrpcOutpoint": {
"type": "object",
"properties": {
@ -129,6 +280,25 @@
}
}
},
"chainrpcSpendRequest": {
"type": "object",
"properties": {
"outpoint": {
"$ref": "#/definitions/chainrpcOutpoint",
"description": "The outpoint for which we should request a spend notification for. If set to\na zero outpoint, then the spend notification will be requested for the\nscript instead."
},
"script": {
"type": "string",
"format": "byte",
"description": "The output script for the outpoint above. This will be used by light clients\nto match block filters. If the outpoint is set to a zero outpoint, then a\nspend notification will be requested for this script instead."
},
"height_hint": {
"type": "integer",
"format": "int64",
"description": "The earliest height in the chain for which the outpoint/output script could\nhave been spent. This should in most cases be set to the broadcast height of\nthe outpoint/output script."
}
}
},
"protobufAny": {
"type": "object",
"properties": {
@ -141,6 +311,27 @@
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"runtimeStreamError": {
"type": "object",
"properties": {
@ -166,43 +357,5 @@
}
}
}
},
"x-stream-definitions": {
"chainrpcBlockEpoch": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/chainrpcBlockEpoch"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of chainrpcBlockEpoch"
},
"chainrpcConfEvent": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/chainrpcConfEvent"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of chainrpcConfEvent"
},
"chainrpcSpendEvent": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/chainrpcSpendEvent"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of chainrpcSpendEvent"
}
}
}

8
lnrpc/gen_protos.sh

@ -12,19 +12,17 @@ for file in $PROTOS; do
# Generate the protos.
protoc -I/usr/local/include -I. \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
--go_out=plugins=grpc,paths=source_relative:. \
"${file}"
# Generate the REST reverse proxy.
protoc -I/usr/local/include -I. \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
--grpc-gateway_out=logtostderr=true,paths=source_relative:. \
--grpc-gateway_out=logtostderr=true,paths=source_relative,grpc_api_configuration=rest-annotations.yaml:. \
"${file}"
# Finally, generate the swagger file which describes the REST API in detail.
protoc -I/usr/local/include -I. \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
--swagger_out=logtostderr=true:. \
--swagger_out=logtostderr=true,grpc_api_configuration=rest-annotations.yaml:. \
"${file}"
done

89
lnrpc/invoicesrpc/invoices.pb.go

@ -8,8 +8,9 @@ import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
lnrpc "github.com/lightningnetwork/lnd/lnrpc"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -399,41 +400,40 @@ func init() {
func init() { proto.RegisterFile("invoicesrpc/invoices.proto", fileDescriptor_090ab9c4958b987d) }
var fileDescriptor_090ab9c4958b987d = []byte{
// 541 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xc1, 0x6e, 0xd3, 0x40,
0x10, 0x95, 0xd3, 0x34, 0x4d, 0x26, 0x69, 0x1a, 0x16, 0x5a, 0x59, 0x16, 0xa1, 0xc1, 0x1c, 0x08,
0x1c, 0x6c, 0xda, 0x8a, 0x1b, 0x1c, 0x0a, 0x42, 0x0a, 0x48, 0xe5, 0xe0, 0x08, 0x0e, 0x5c, 0xac,
0x8d, 0xbd, 0xd8, 0xab, 0xda, 0xbb, 0xcb, 0xee, 0x26, 0xd0, 0x5f, 0xe4, 0x0f, 0xf8, 0x1b, 0xe4,
0xf5, 0xa6, 0xb2, 0x43, 0xe9, 0x6d, 0xe6, 0xcd, 0xec, 0xcb, 0xcb, 0x7b, 0x63, 0xf0, 0x28, 0xdb,
0x70, 0x9a, 0x10, 0x25, 0x45, 0x12, 0x6e, 0xeb, 0x40, 0x48, 0xae, 0x39, 0x1a, 0x36, 0x66, 0xde,
0xe3, 0x8c, 0xf3, 0xac, 0x20, 0x21, 0x16, 0x34, 0xc4, 0x8c, 0x71, 0x8d, 0x35, 0xe5, 0xcc, 0xae,
0x7a, 0x03, 0x29, 0x92, 0xba, 0xf4, 0x5f, 0xc3, 0xe4, 0x3d, 0x66, 0x09, 0x29, 0x3e, 0xd6, 0xaf,
0xaf, 0x54, 0x86, 0x9e, 0xc2, 0x48, 0xe0, 0x9b, 0x92, 0x30, 0x1d, 0xe7, 0x58, 0xe5, 0xae, 0x33,
0x73, 0xe6, 0xa3, 0x68, 0x68, 0xb1, 0x05, 0x56, 0xb9, 0xff, 0x10, 0x1e, 0xb4, 0x9e, 0x45, 0x44,
0x09, 0xff, 0x77, 0x07, 0x8e, 0x2f, 0xd3, 0x74, 0xc1, 0x8b, 0xf4, 0x16, 0xfe, 0xb1, 0x26, 0x4a,
0x23, 0x04, 0xdd, 0x92, 0x94, 0xdc, 0x30, 0x0d, 0x22, 0x53, 0x57, 0x98, 0x61, 0xef, 0x18, 0x76,
0x53, 0xa3, 0x47, 0xb0, 0xbf, 0xc1, 0xc5, 0x9a, 0xb8, 0x7b, 0x33, 0x67, 0xbe, 0x17, 0xd5, 0x0d,
0x9a, 0x02, 0x98, 0x22, 0x2e, 0x15, 0xd6, 0x2e, 0x98, 0xd1, 0xc0, 0x20, 0x57, 0x0a, 0x6b, 0xf4,
0x02, 0x26, 0x29, 0x51, 0x89, 0xa4, 0xa2, 0xfa, 0x8f, 0xb5, 0xe4, 0xae, 0x21, 0x3d, 0x6a, 0xe0,
0x95, 0x6c, 0x74, 0x02, 0x3d, 0xf2, 0x4b, 0x50, 0x79, 0xe3, 0xee, 0x1b, 0x16, 0xdb, 0xa1, 0x67,
0x70, 0xf8, 0x1d, 0x17, 0xc5, 0x0a, 0x27, 0xd7, 0x31, 0x4e, 0x53, 0xe9, 0xf6, 0x8c, 0xd0, 0xd1,
0x16, 0xbc, 0x4c, 0x53, 0x89, 0x4e, 0x61, 0x98, 0x14, 0x7a, 0x13, 0x5b, 0x86, 0x83, 0x99, 0x33,
0xef, 0x46, 0x50, 0x41, 0x1f, 0x6a, 0x96, 0x33, 0x18, 0x4a, 0xbe, 0xd6, 0x24, 0xce, 0x29, 0xd3,
0xca, 0xed, 0xcf, 0xf6, 0xe6, 0xc3, 0xf3, 0x49, 0x50, 0xb0, 0xca, 0xee, 0xa8, 0x9a, 0x2c, 0x28,
0xd3, 0x11, 0xc8, 0x6d, 0xa9, 0x90, 0x0b, 0x07, 0x42, 0xd2, 0x0d, 0xd6, 0xc4, 0x1d, 0xcc, 0x9c,
0x79, 0x3f, 0xda, 0xb6, 0xfe, 0x5b, 0x40, 0xbb, 0x5e, 0x2a, 0x81, 0x9e, 0xc3, 0xd1, 0x36, 0x1a,
0x59, 0x7b, 0x6b, 0x3d, 0x1d, 0x5b, 0xd8, 0x3a, 0xee, 0x07, 0x30, 0x59, 0x12, 0xad, 0x0b, 0xd2,
0xc8, 0xd5, 0x83, 0xbe, 0x90, 0x84, 0x96, 0x38, 0x23, 0x36, 0xd3, 0xdb, 0xbe, 0x0a, 0xb4, 0xb5,
0x6f, 0x02, 0x7d, 0x03, 0xd3, 0xe5, 0x7a, 0x55, 0x59, 0xb8, 0x22, 0x4b, 0xca, 0xb2, 0xc6, 0xb4,
0xce, 0xf5, 0x18, 0x7a, 0x32, 0x6e, 0xa4, 0xb8, 0x2f, 0x2b, 0x9b, 0x3f, 0x75, 0xfb, 0xce, 0xa4,
0x73, 0xfe, 0xa7, 0x03, 0x7d, 0xbb, 0xaf, 0xd0, 0x57, 0x38, 0xb9, 0x9b, 0x0a, 0xbd, 0x0c, 0x1a,
0x87, 0x1b, 0xdc, 0xfb, 0x7b, 0xde, 0xd8, 0x9a, 0x69, 0xe1, 0x57, 0x0e, 0xfa, 0x0c, 0x87, 0xad,
0x43, 0x44, 0xd3, 0x16, 0xdd, 0xee, 0x6d, 0x7b, 0x4f, 0xfe, 0x3f, 0x36, 0x06, 0x7f, 0x81, 0x71,
0xdb, 0x76, 0xe4, 0xb7, 0x5e, 0xdc, 0x79, 0xdf, 0xde, 0xe9, 0xbd, 0x3b, 0x4a, 0x54, 0x32, 0x5b,
0xf6, 0xee, 0xc8, 0xdc, 0x8d, 0x6a, 0x47, 0xe6, 0x3f, 0xc9, 0xbc, 0xbb, 0xf8, 0x76, 0x96, 0x51,
0x9d, 0xaf, 0x57, 0x41, 0xc2, 0xcb, 0xb0, 0xa0, 0x59, 0xae, 0x19, 0x65, 0x19, 0x23, 0xfa, 0x27,
0x97, 0xd7, 0x61, 0xc1, 0xd2, 0xd0, 0x38, 0x15, 0x36, 0x68, 0x56, 0x3d, 0xf3, 0xc9, 0x5f, 0xfc,
0x0d, 0x00, 0x00, 0xff, 0xff, 0x56, 0x22, 0x58, 0xe6, 0x46, 0x04, 0x00, 0x00,
// 523 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0x4d, 0x6f, 0xd3, 0x40,
0x10, 0x95, 0xf3, 0xd5, 0x64, 0x92, 0xa6, 0x61, 0xa1, 0x95, 0x65, 0x29, 0x34, 0x98, 0x03, 0x81,
0x83, 0x43, 0x5b, 0x71, 0x83, 0x43, 0x41, 0x48, 0x01, 0xa9, 0x1c, 0x1c, 0xc1, 0x81, 0x8b, 0xb5,
0xb1, 0x17, 0x7b, 0xd5, 0xf5, 0x7a, 0xd9, 0xdd, 0x04, 0xfa, 0x17, 0xf9, 0x07, 0xfc, 0x1b, 0xe4,
0xf5, 0xa6, 0xb2, 0x43, 0xdb, 0xdb, 0xcc, 0x9b, 0xd9, 0xe7, 0xa7, 0xf7, 0xc6, 0xe0, 0x51, 0xbe,
0x2d, 0x68, 0x4c, 0x94, 0x14, 0xf1, 0x62, 0x57, 0x07, 0x42, 0x16, 0xba, 0x40, 0xc3, 0xda, 0xcc,
0x1b, 0x48, 0x11, 0x57, 0xb8, 0xff, 0x06, 0x26, 0x1f, 0x30, 0x8f, 0x09, 0xfb, 0x54, 0xcd, 0xaf,
0x54, 0x8a, 0x9e, 0xc1, 0x48, 0xe0, 0x9b, 0x9c, 0x70, 0x1d, 0x65, 0x58, 0x65, 0xae, 0x33, 0x73,
0xe6, 0xa3, 0x70, 0x68, 0xb1, 0x25, 0x56, 0x99, 0xff, 0x18, 0x1e, 0x35, 0x9e, 0x85, 0x44, 0x09,
0xff, 0x4f, 0x0b, 0x8e, 0x2f, 0x93, 0x64, 0x59, 0xb0, 0xe4, 0x16, 0xfe, 0xb9, 0x21, 0x4a, 0x23,
0x04, 0x9d, 0x9c, 0xe4, 0x85, 0x61, 0x1a, 0x84, 0xa6, 0x2e, 0x31, 0xc3, 0xde, 0x32, 0xec, 0xa6,
0x46, 0x4f, 0xa0, 0xbb, 0xc5, 0x6c, 0x43, 0xdc, 0xf6, 0xcc, 0x99, 0xb7, 0xc3, 0xaa, 0x41, 0x53,
0x00, 0x53, 0x44, 0xb9, 0xc2, 0xda, 0x05, 0x33, 0x1a, 0x18, 0xe4, 0x4a, 0x61, 0x8d, 0x5e, 0xc2,
0x24, 0x21, 0x2a, 0x96, 0x54, 0x68, 0x5a, 0xf0, 0x4a, 0x72, 0xc7, 0x90, 0x1e, 0xd5, 0xf0, 0x52,
0x36, 0x3a, 0x81, 0x1e, 0xf9, 0x2d, 0xa8, 0xbc, 0x71, 0xbb, 0x86, 0xc5, 0x76, 0xe8, 0x39, 0x1c,
0xfe, 0xc0, 0x8c, 0xad, 0x71, 0x7c, 0x1d, 0xe1, 0x24, 0x91, 0x6e, 0xcf, 0x08, 0x1d, 0xed, 0xc0,
0xcb, 0x24, 0x91, 0xe8, 0x14, 0x86, 0x31, 0xd3, 0xdb, 0xc8, 0x32, 0x1c, 0xcc, 0x9c, 0x79, 0x27,
0x84, 0x12, 0xfa, 0x58, 0xb1, 0x9c, 0xc1, 0x50, 0x16, 0x1b, 0x4d, 0xa2, 0x8c, 0x72, 0xad, 0xdc,
0xfe, 0xac, 0x3d, 0x1f, 0x9e, 0x4f, 0x02, 0xc6, 0x4b, 0xbb, 0xc3, 0x72, 0xb2, 0xa4, 0x5c, 0x87,
0x20, 0x77, 0xa5, 0x42, 0x2e, 0x1c, 0x08, 0x49, 0xb7, 0x58, 0x13, 0x77, 0x30, 0x73, 0xe6, 0xfd,
0x70, 0xd7, 0xfa, 0xef, 0x00, 0xed, 0x7b, 0xa9, 0x04, 0x7a, 0x01, 0x47, 0xbb, 0x68, 0x64, 0xe5,
0xad, 0xf5, 0x74, 0x6c, 0x61, 0xeb, 0xb8, 0x1f, 0xc0, 0x64, 0x45, 0xb4, 0x66, 0xa4, 0x96, 0xab,
0x07, 0x7d, 0x21, 0x09, 0xcd, 0x71, 0x4a, 0x6c, 0xa6, 0xb7, 0x7d, 0x19, 0x68, 0x63, 0xdf, 0x04,
0xfa, 0x16, 0xa6, 0xab, 0xcd, 0xba, 0xb4, 0x70, 0x4d, 0x56, 0x94, 0xa7, 0xb5, 0x69, 0x95, 0xeb,
0x31, 0xf4, 0x64, 0x54, 0x4b, 0xb1, 0x2b, 0x4b, 0x9b, 0x3f, 0x77, 0xfa, 0xce, 0xa4, 0x75, 0xfe,
0xb7, 0x05, 0x7d, 0xbb, 0xaf, 0xd0, 0x37, 0x38, 0xb9, 0x9b, 0x0a, 0xbd, 0x0a, 0x6a, 0xa7, 0x19,
0x3c, 0xf8, 0x3d, 0x6f, 0x6c, 0xcd, 0xb4, 0xf0, 0x6b, 0x07, 0x7d, 0x81, 0xc3, 0xc6, 0x21, 0xa2,
0x69, 0x83, 0x6e, 0xff, 0xb6, 0xbd, 0xa7, 0xf7, 0x8f, 0x8d, 0xc1, 0x5f, 0x61, 0xdc, 0xb4, 0x1d,
0xf9, 0x8d, 0x17, 0x77, 0xde, 0xb7, 0x77, 0xfa, 0xe0, 0x8e, 0x12, 0xa5, 0xcc, 0x86, 0xbd, 0x7b,
0x32, 0xf7, 0xa3, 0xda, 0x93, 0xf9, 0x5f, 0x32, 0xef, 0x2f, 0xbe, 0x9f, 0xa5, 0x54, 0x67, 0x9b,
0x75, 0x10, 0x17, 0xf9, 0x82, 0xd1, 0x34, 0xd3, 0x9c, 0xf2, 0x94, 0x13, 0xfd, 0xab, 0x90, 0xd7,
0x0b, 0xc6, 0x93, 0x85, 0x71, 0x6a, 0x51, 0xa3, 0x59, 0xf7, 0xcc, 0x2f, 0x7f, 0xf1, 0x2f, 0x00,
0x00, 0xff, 0xff, 0xc3, 0xb1, 0x8c, 0x5e, 0x28, 0x04, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -557,6 +557,23 @@ type InvoicesServer interface {
SettleInvoice(context.Context, *SettleInvoiceMsg) (*SettleInvoiceResp, error)
}
// UnimplementedInvoicesServer can be embedded to have forward compatible implementations.
type UnimplementedInvoicesServer struct {
}
func (*UnimplementedInvoicesServer) SubscribeSingleInvoice(req *SubscribeSingleInvoiceRequest, srv Invoices_SubscribeSingleInvoiceServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeSingleInvoice not implemented")
}
func (*UnimplementedInvoicesServer) CancelInvoice(ctx context.Context, req *CancelInvoiceMsg) (*CancelInvoiceResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method CancelInvoice not implemented")
}
func (*UnimplementedInvoicesServer) AddHoldInvoice(ctx context.Context, req *AddHoldInvoiceRequest) (*AddHoldInvoiceResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method AddHoldInvoice not implemented")
}
func (*UnimplementedInvoicesServer) SettleInvoice(ctx context.Context, req *SettleInvoiceMsg) (*SettleInvoiceResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method SettleInvoice not implemented")
}
func RegisterInvoicesServer(s *grpc.Server, srv InvoicesServer) {
s.RegisterService(&_Invoices_serviceDesc, srv)
}

385
lnrpc/invoicesrpc/invoices.pb.gw.go

@ -0,0 +1,385 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: invoicesrpc/invoices.proto
/*
Package invoicesrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package invoicesrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_Invoices_SubscribeSingleInvoice_0(ctx context.Context, marshaler runtime.Marshaler, client InvoicesClient, req *http.Request, pathParams map[string]string) (Invoices_SubscribeSingleInvoiceClient, runtime.ServerMetadata, error) {
var protoReq SubscribeSingleInvoiceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["r_hash"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "r_hash")
}
protoReq.RHash, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "r_hash", err)
}
stream, err := client.SubscribeSingleInvoice(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
func request_Invoices_CancelInvoice_0(ctx context.Context, marshaler runtime.Marshaler, client InvoicesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CancelInvoiceMsg
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.CancelInvoice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Invoices_CancelInvoice_0(ctx context.Context, marshaler runtime.Marshaler, server InvoicesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CancelInvoiceMsg
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.CancelInvoice(ctx, &protoReq)
return msg, metadata, err
}
func request_Invoices_AddHoldInvoice_0(ctx context.Context, marshaler runtime.Marshaler, client InvoicesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AddHoldInvoiceRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.AddHoldInvoice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Invoices_AddHoldInvoice_0(ctx context.Context, marshaler runtime.Marshaler, server InvoicesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AddHoldInvoiceRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.AddHoldInvoice(ctx, &protoReq)
return msg, metadata, err
}
func request_Invoices_SettleInvoice_0(ctx context.Context, marshaler runtime.Marshaler, client InvoicesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SettleInvoiceMsg
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SettleInvoice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Invoices_SettleInvoice_0(ctx context.Context, marshaler runtime.Marshaler, server InvoicesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SettleInvoiceMsg
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SettleInvoice(ctx, &protoReq)
return msg, metadata, err
}
// RegisterInvoicesHandlerServer registers the http handlers for service Invoices to "mux".
// UnaryRPC :call InvoicesServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterInvoicesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server InvoicesServer) error {
mux.Handle("GET", pattern_Invoices_SubscribeSingleInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("POST", pattern_Invoices_CancelInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Invoices_CancelInvoice_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Invoices_CancelInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Invoices_AddHoldInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Invoices_AddHoldInvoice_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Invoices_AddHoldInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Invoices_SettleInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Invoices_SettleInvoice_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Invoices_SettleInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterInvoicesHandlerFromEndpoint is same as RegisterInvoicesHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterInvoicesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterInvoicesHandler(ctx, mux, conn)
}
// RegisterInvoicesHandler registers the http handlers for service Invoices to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterInvoicesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterInvoicesHandlerClient(ctx, mux, NewInvoicesClient(conn))
}
// RegisterInvoicesHandlerClient registers the http handlers for service Invoices
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "InvoicesClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "InvoicesClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "InvoicesClient" to call the correct interceptors.
func RegisterInvoicesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client InvoicesClient) error {
mux.Handle("GET", pattern_Invoices_SubscribeSingleInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Invoices_SubscribeSingleInvoice_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Invoices_SubscribeSingleInvoice_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Invoices_CancelInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Invoices_CancelInvoice_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Invoices_CancelInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Invoices_AddHoldInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Invoices_AddHoldInvoice_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Invoices_AddHoldInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Invoices_SettleInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Invoices_SettleInvoice_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Invoices_SettleInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Invoices_SubscribeSingleInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "invoices", "subscribe", "r_hash"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Invoices_CancelInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "invoices", "cancel"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Invoices_AddHoldInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "invoices", "hodl"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Invoices_SettleInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "invoices", "settle"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_Invoices_SubscribeSingleInvoice_0 = runtime.ForwardResponseStream
forward_Invoices_CancelInvoice_0 = runtime.ForwardResponseMessage
forward_Invoices_AddHoldInvoice_0 = runtime.ForwardResponseMessage
forward_Invoices_SettleInvoice_0 = runtime.ForwardResponseMessage
)

1
lnrpc/invoicesrpc/invoices.proto

@ -1,6 +1,5 @@
syntax = "proto3";
import "google/api/annotations.proto";
import "rpc.proto";
package invoicesrpc;

260
lnrpc/invoicesrpc/invoices.swagger.json

@ -4,17 +4,155 @@
"title": "invoicesrpc/invoices.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/invoices/cancel": {
"post": {
"summary": "CancelInvoice cancels a currently open invoice. If the invoice is already\ncanceled, this call will succeed. If the invoice is already settled, it will\nfail.",
"operationId": "CancelInvoice",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/invoicesrpcCancelInvoiceResp"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/invoicesrpcCancelInvoiceMsg"
}
}
],
"tags": [
"Invoices"
]
}
},
"/v2/invoices/hodl": {
"post": {
"summary": "AddHoldInvoice creates a hold invoice. It ties the invoice to the hash\nsupplied in the request.",
"operationId": "AddHoldInvoice",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/invoicesrpcAddHoldInvoiceResp"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/invoicesrpcAddHoldInvoiceRequest"
}
}
],
"tags": [
"Invoices"
]
}
},
"/v2/invoices/settle": {
"post": {
"summary": "SettleInvoice settles an accepted invoice. If the invoice is already\nsettled, this call will succeed.",
"operationId": "SettleInvoice",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/invoicesrpcSettleInvoiceResp"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/invoicesrpcSettleInvoiceMsg"
}
}
],
"tags": [
"Invoices"
]
}
},
"/v2/invoices/subscribe/{r_hash}": {
"get": {
"summary": "SubscribeSingleInvoice returns a uni-directional stream (server -\u003e client)\nto notify the client of state transitions of the specified invoice.\nInitially the current invoice state is always sent out.",
"operationId": "SubscribeSingleInvoice",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcInvoice"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcInvoice"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "r_hash",
"description": "Hash corresponding to the (hold) invoice to subscribe to.",
"in": "path",
"required": true,
"type": "string",
"format": "byte"
}
],
"tags": [
"Invoices"
]
}
}
},
"definitions": {
"InvoiceInvoiceState": {
"type": "string",
@ -26,6 +164,63 @@
],
"default": "OPEN"
},
"invoicesrpcAddHoldInvoiceRequest": {
"type": "object",
"properties": {
"memo": {
"type": "string",
"description": "An optional memo to attach along with the invoice. Used for record keeping\npurposes for the invoice's creator, and will also be set in the description\nfield of the encoded payment request if the description_hash field is not\nbeing used."
},
"hash": {
"type": "string",
"format": "byte",
"title": "The hash of the preimage"
},
"value": {
"type": "string",
"format": "int64",
"description": "The fields value and value_msat are mutually exclusive.",
"title": "The value of this invoice in satoshis"
},
"value_msat": {
"type": "string",
"format": "int64",
"description": "The fields value and value_msat are mutually exclusive.",
"title": "The value of this invoice in millisatoshis"
},
"description_hash": {
"type": "string",
"format": "byte",
"description": "Hash (SHA-256) of a description of the payment. Used if the description of\npayment (memo) is too long to naturally fit within the description field\nof an encoded payment request."
},
"expiry": {
"type": "string",
"format": "int64",
"description": "Payment request expiry time in seconds. Default is 3600 (1 hour)."
},
"fallback_addr": {
"type": "string",
"description": "Fallback on-chain address."
},
"cltv_expiry": {
"type": "string",
"format": "uint64",
"description": "Delta to use for the time-lock of the CLTV extended to the final hop."
},
"route_hints": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcRouteHint"
},
"description": "Route hints that can each be individually used to assist in reaching the\ninvoice's destination."
},
"private": {
"type": "boolean",
"format": "boolean",
"description": "Whether this invoice should include routing hints for private channels."
}
}
},
"invoicesrpcAddHoldInvoiceResp": {
"type": "object",
"properties": {
@ -35,9 +230,29 @@
}
}
},
"invoicesrpcCancelInvoiceMsg": {
"type": "object",
"properties": {
"payment_hash": {
"type": "string",
"format": "byte",
"description": "Hash corresponding to the (hold) invoice to cancel."
}
}
},
"invoicesrpcCancelInvoiceResp": {
"type": "object"
},
"invoicesrpcSettleInvoiceMsg": {
"type": "object",
"properties": {
"preimage": {
"type": "string",
"format": "byte",
"description": "Externally discovered pre-image that should be used to settle the hold\ninvoice."
}
}
},
"invoicesrpcSettleInvoiceResp": {
"type": "object"
},
@ -306,6 +521,27 @@
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"runtimeStreamError": {
"type": "object",
"properties": {
@ -331,19 +567,5 @@
}
}
}
},
"x-stream-definitions": {
"lnrpcInvoice": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcInvoice"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcInvoice"
}
}
}

40
lnrpc/lnclipb/lncli.swagger.json

@ -4,10 +4,6 @@
"title": "lnclipb/lncli.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
@ -15,5 +11,39 @@
"application/json"
],
"paths": {},
"definitions": {}
"definitions": {
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
}
}
}

290
lnrpc/rest-annotations.yaml

@ -0,0 +1,290 @@
type: google.api.Service
config_version: 3
http:
rules:
# rpc.proto
- selector: lnrpc.Lightning.WalletBalance
get: "/v1/balance/blockchain"
- selector: lnrpc.Lightning.ChannelBalance
get: "/v1/balance/channels"
- selector: lnrpc.Lightning.GetTransactions
get: "/v1/transactions"
- selector: lnrpc.Lightning.EstimateFee
get: "/v1/transactions/fee"
- selector: lnrpc.Lightning.SendCoins
post: "/v1/transactions"
body: "*"
- selector: lnrpc.Lightning.ListUnspent
get: "/v1/utxos"
- selector: lnrpc.Lightning.SubscribeTransactions
get: "/v1/transactions/subscribe"
- selector: lnrpc.Lightning.SendMany
post: "/v1/transactions/many"
body: "*"
- selector: lnrpc.Lightning.NewAddress
get: "/v1/newaddress"
- selector: lnrpc.Lightning.SignMessage
post: "/v1/signmessage"
body: "*"
- selector: lnrpc.Lightning.VerifyMessage
post: "/v1/verifymessage"
body: "*"
- selector: lnrpc.Lightning.ConnectPeer
post: "/v1/peers"
body: "*"
- selector: lnrpc.Lightning.DisconnectPeer
delete: "/v1/peers/{pub_key}"
- selector: lnrpc.Lightning.ListPeers
get: "/v1/peers"
- selector: lnrpc.Lightning.SubscribePeerEvents
get: "/v1/peers/subscribe"
- selector: lnrpc.Lightning.GetInfo
get: "/v1/getinfo"
- selector: lnrpc.Lightning.PendingChannels
get: "/v1/channels/pending"
- selector: lnrpc.Lightning.ListChannels
get: "/v1/channels"
- selector: lnrpc.Lightning.SubscribeChannelEvents
get: "/v1/channels/subscribe"
- selector: lnrpc.Lightning.ClosedChannels
get: "/v1/channels/closed"
- selector: lnrpc.Lightning.OpenChannelSync
post: "/v1/channels"
body: "*"
- selector: lnrpc.Lightning.OpenChannel
post: "/v1/channels/stream"
body: "*"
- selector: lnrpc.Lightning.FundingStateStep
post: "/v1/funding/step"
body: "*"
- selector: lnrpc.Lightning.ChannelAcceptor
# request streaming RPC, REST not supported
- selector: lnrpc.Lightning.CloseChannel
delete: "/v1/channels/{channel_point.funding_txid_str}/{channel_point.output_index}"
- selector: lnrpc.Lightning.AbandonChannel
delete: "/v1/channels/abandon/{channel_point.funding_txid_str}/{channel_point.output_index}"
- selector: lnrpc.Lightning.SendPayment
- selector: lnrpc.Lightning.SendPaymentSync
post: "/v1/channels/transactions"
body: "*"
- selector: lnrpc.Lightning.SendToRoute
# deprecated, no REST endpoint
- selector: lnrpc.Lightning.SendToRouteSync
post: "/v1/channels/transactions/route"
body: "*"
- selector: lnrpc.Lightning.AddInvoice
post: "/v1/invoices"
body: "*"
- selector: lnrpc.Lightning.ListInvoices
get: "/v1/invoices"
- selector: lnrpc.Lightning.LookupInvoice
get: "/v1/invoice/{r_hash_str}"
- selector: lnrpc.Lightning.SubscribeInvoices
get: "/v1/invoices/subscribe"
- selector: lnrpc.Lightning.DecodePayReq
get: "/v1/payreq/{pay_req}"
- selector: lnrpc.Lightning.ListPayments
get: "/v1/payments"
- selector: lnrpc.Lightning.DeleteAllPayments
delete: "/v1/payments"
- selector: lnrpc.Lightning.DescribeGraph
get: "/v1/graph"
- selector: lnrpc.Lightning.GetNodeMetrics
get: "/v1/graph/nodemetrics"
- selector: lnrpc.Lightning.GetChanInfo
get: "/v1/graph/edge/{chan_id}"
- selector: lnrpc.Lightning.GetNodeInfo
get: "/v1/graph/node/{pub_key}"
- selector: lnrpc.Lightning.QueryRoutes
get: "/v1/graph/routes/{pub_key}/{amt}"
- selector: lnrpc.Lightning.GetNetworkInfo
get: "/v1/graph/info"
- selector: lnrpc.Lightning.StopDaemon
post: "/v1/stop"
body: "*"
- selector: lnrpc.Lightning.SubscribeChannelGraph
get: "/v1/graph/subscribe"
- selector: lnrpc.Lightning.DebugLevel
post: "/v1/debuglevel"
body: "*"
- selector: lnrpc.Lightning.FeeReport
get: "/v1/fees"
- selector: lnrpc.Lightning.UpdateChannelPolicy
post: "/v1/chanpolicy"
body: "*"
- selector: lnrpc.Lightning.ForwardingHistory
post: "/v1/switch"
body: "*"
- selector: lnrpc.Lightning.ExportChannelBackup
get: "/v1/channels/backup/{chan_point.funding_txid_str}/{chan_point.output_index}"
- selector: lnrpc.Lightning.ExportAllChannelBackups
get: "/v1/channels/backup"
- selector: lnrpc.Lightning.VerifyChanBackup
post: "/v1/channels/backup/verify"
body: "*"
- selector: lnrpc.Lightning.RestoreChannelBackups
post: "/v1/channels/backup/restore"
body: "*"
- selector: lnrpc.Lightning.SubscribeChannelBackups
get: "/v1/channels/backup/subscribe"
- selector: lnrpc.Lightning.BakeMacaroon
post: "/v1/macaroon"
body: "*"
# walletunlocker.proto
- selector: lnrpc.WalletUnlocker.GenSeed
get: "/v1/genseed"
- selector: lnrpc.WalletUnlocker.InitWallet
post: "/v1/initwallet"
body: "*"
- selector: lnrpc.WalletUnlocker.UnlockWallet
post: "/v1/unlockwallet"
body: "*"
- selector: lnrpc.WalletUnlocker.ChangePassword
post: "/v1/changepassword"
body: "*"
# autopilotrpc/autopilot.proto
- selector: autopilotrpc.Autopilot.Status
get: "/v2/autopilot/status"
- selector: autopilotrpc.Autopilot.ModifyStatus
post: "/v2/autopilot/modify"
body: "*"
- selector: autopilotrpc.Autopilot.QueryScores
get: "/v2/autopilot/scores"
- selector: autopilotrpc.Autopilot.SetScores
post: "/v2/autopilot/scores"
body: "*"
# chainrpc/chainnotifier.proto
- selector: chainrpc.ChainNotifier.RegisterConfirmationsNtfn
post: "/v2/chainnotifier/register/confirmations"
body: "*"
- selector: chainrpc.ChainNotifier.RegisterSpendNtfn
post: "/v2/chainnotifier/register/spends"
body: "*"
- selector: chainrpc.ChainNotifier.RegisterBlockEpochNtfn
post: "/v2/chainnotifier/register/blocks"
body: "*"
# invoicesrpc/invoices.proto
- selector: invoicesrpc.Invoices.SubscribeSingleInvoice
get: "/v2/invoices/subscribe/{r_hash}"
- selector: invoicesrpc.Invoices.CancelInvoice
post: "/v2/invoices/cancel"
body: "*"
- selector: invoicesrpc.Invoices.AddHoldInvoice
post: "/v2/invoices/hodl"
body: "*"
- selector: invoicesrpc.Invoices.SettleInvoice
post: "/v2/invoices/settle"
body: "*"
# routerrpc/router.proto
- selector: routerrpc.Router.SendPaymentV2
post: "/v2/router/send"
body: "*"
- selector: routerrpc.Router.TrackPaymentV2
get: "/v2/router/track/{payment_hash}"
- selector: routerrpc.Router.EstimateRouteFee
post: "/v2/router/route/estimatefee"
body: "*"
- selector: routerrpc.Router.SendToRoute
# deprecated, no REST endpoint
- selector: routerrpc.Router.SendToRouteV2
post: "/v2/router/route/send"
body: "*"
- selector: routerrpc.Router.ResetMissionControl
post: "/v2/router/mc/reset"
body: "*"
- selector: routerrpc.Router.QueryMissionControl
get: "/v2/router/mc"
- selector: routerrpc.Router.QueryProbability
get: "/v2/router/mc/probability/{from_node}/{to_node}/{amt_msat}"
- selector: routerrpc.Router.BuildRoute
post: "/v2/router/route"
body: "*"
- selector: routerrpc.Router.SubscribeHtlcEvents
get: "/v2/router/htlcevents"
- selector: routerrpc.Router.SendPayment
# deprecated, no REST endpoint
- selector: routerrpc.Router.TrackPayment
# deprecated, no REST endpoint
# signrpc/signer.proto
- selector: signrpc.Signer.SignOutputRaw
post: "/v2/signer/signraw"
body: "*"
- selector: signrpc.Signer.ComputeInputScript
post: "/v2/signer/inputscript"
body: "*"
- selector: signrpc.Signer.SignMessage
post: "/v2/signer/signmessage"
body: "*"
- selector: signrpc.Signer.VerifyMessage
post: "/v2/signer/verifymessage"
body: "*"
- selector: signrpc.Signer.DeriveSharedKey
post: "/v2/signer/sharedkey"
body: "*"
# verrpc/verrpc.proto
- selector: verrpc.Versioner.GetVersion
get: "/v2/versioner/version"
# walletrpc/walletkit.proto
- selector: walletrpc.WalletKit.ListUnspent
post: "/v2/wallet/utxos"
- selector: walletrpc.WalletKit.LeaseOutput
post: "/v2/wallet/utxos/lease"
body: "*"
- selector: walletrpc.WalletKit.ReleaseOutput
post: "/v2/wallet/utxos/release"
body: "*"
- selector: walletrpc.WalletKit.DeriveNextKey
post: "/v2/wallet/key/next"
body: "*"
- selector: walletrpc.WalletKit.DeriveKey
post: "/v2/wallet/key"
body: "*"
- selector: walletrpc.WalletKit.NextAddr
post: "/v2/wallet/address/next"
body: "*"
- selector: walletrpc.WalletKit.PublishTransaction
post: "/v2/wallet/tx"
body: "*"
- selector: walletrpc.WalletKit.SendOutputs
post: "/v2/wallet/send"
body: "*"
- selector: walletrpc.WalletKit.EstimateFee
get: "/v2/wallet/estimatefee/{conf_target}"
- selector: walletrpc.WalletKit.PendingSweeps
get: "/v2/wallet/sweeps/pending"
- selector: walletrpc.WalletKit.BumpFee
post: "/v2/wallet/bumpfee"
body: "*"
- selector: walletrpc.WalletKit.ListSweeps
get: "/v2/wallet/sweeps"
- selector: walletrpc.WalletKit.LabelTransaction
post: "/v2/wallet/tx/label"
body: "*"
# watchtowerrpc/watchtower.proto
- selector: watchtowerrpc.Watchtower.GetInfo
get: "/v2/watchtower/server"
# wtclientrpc/wtclient.proto
- selector: wtclientrpc.WatchtowerClient.AddTower
post: "/v2/watchtower/client"
body: "*"
- selector: wtclientrpc.WatchtowerClient.RemoveTower
delete: "/v2/watchtower/client/{pubkey}"
- selector: wtclientrpc.WatchtowerClient.ListTowers
get: "/v2/watchtower/client"
- selector: wtclientrpc.WatchtowerClient.GetTowerInfo
get: "/v2/watchtower/client/info/{pubkey}"
- selector: wtclientrpc.WatchtowerClient.Stats
get: "/v2/watchtower/client/stats"
- selector: wtclientrpc.WatchtowerClient.Policy
get: "/v2/watchtower/client/policy"

43
lnrpc/routerrpc/router.pb.go

@ -9,6 +9,8 @@ import (
proto "github.com/golang/protobuf/proto"
lnrpc "github.com/lightningnetwork/lnd/lnrpc"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -2267,6 +2269,47 @@ type RouterServer interface {
TrackPayment(*TrackPaymentRequest, Router_TrackPaymentServer) error
}
// UnimplementedRouterServer can be embedded to have forward compatible implementations.
type UnimplementedRouterServer struct {
}
func (*UnimplementedRouterServer) SendPaymentV2(req *SendPaymentRequest, srv Router_SendPaymentV2Server) error {
return status.Errorf(codes.Unimplemented, "method SendPaymentV2 not implemented")
}
func (*UnimplementedRouterServer) TrackPaymentV2(req *TrackPaymentRequest, srv Router_TrackPaymentV2Server) error {
return status.Errorf(codes.Unimplemented, "method TrackPaymentV2 not implemented")
}
func (*UnimplementedRouterServer) EstimateRouteFee(ctx context.Context, req *RouteFeeRequest) (*RouteFeeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method EstimateRouteFee not implemented")
}
func (*UnimplementedRouterServer) SendToRoute(ctx context.Context, req *SendToRouteRequest) (*SendToRouteResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SendToRoute not implemented")
}
func (*UnimplementedRouterServer) SendToRouteV2(ctx context.Context, req *SendToRouteRequest) (*lnrpc.HTLCAttempt, error) {
return nil, status.Errorf(codes.Unimplemented, "method SendToRouteV2 not implemented")
}
func (*UnimplementedRouterServer) ResetMissionControl(ctx context.Context, req *ResetMissionControlRequest) (*ResetMissionControlResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ResetMissionControl not implemented")
}
func (*UnimplementedRouterServer) QueryMissionControl(ctx context.Context, req *QueryMissionControlRequest) (*QueryMissionControlResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method QueryMissionControl not implemented")
}
func (*UnimplementedRouterServer) QueryProbability(ctx context.Context, req *QueryProbabilityRequest) (*QueryProbabilityResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method QueryProbability not implemented")
}
func (*UnimplementedRouterServer) BuildRoute(ctx context.Context, req *BuildRouteRequest) (*BuildRouteResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BuildRoute not implemented")
}
func (*UnimplementedRouterServer) SubscribeHtlcEvents(req *SubscribeHtlcEventsRequest, srv Router_SubscribeHtlcEventsServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeHtlcEvents not implemented")
}
func (*UnimplementedRouterServer) SendPayment(req *SendPaymentRequest, srv Router_SendPaymentServer) error {
return status.Errorf(codes.Unimplemented, "method SendPayment not implemented")
}
func (*UnimplementedRouterServer) TrackPayment(req *TrackPaymentRequest, srv Router_TrackPaymentServer) error {
return status.Errorf(codes.Unimplemented, "method TrackPayment not implemented")
}
func RegisterRouterServer(s *grpc.Server, srv RouterServer) {
s.RegisterService(&_Router_serviceDesc, srv)
}

782
lnrpc/routerrpc/router.pb.gw.go

@ -0,0 +1,782 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: routerrpc/router.proto
/*
Package routerrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package routerrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_Router_SendPaymentV2_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (Router_SendPaymentV2Client, runtime.ServerMetadata, error) {
var protoReq SendPaymentRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.SendPaymentV2(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
var (
filter_Router_TrackPaymentV2_0 = &utilities.DoubleArray{Encoding: map[string]int{"payment_hash": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
func request_Router_TrackPaymentV2_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (Router_TrackPaymentV2Client, runtime.ServerMetadata, error) {
var protoReq TrackPaymentRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["payment_hash"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "payment_hash")
}
protoReq.PaymentHash, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "payment_hash", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Router_TrackPaymentV2_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.TrackPaymentV2(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
func request_Router_EstimateRouteFee_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RouteFeeRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.EstimateRouteFee(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Router_EstimateRouteFee_0(ctx context.Context, marshaler runtime.Marshaler, server RouterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RouteFeeRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.EstimateRouteFee(ctx, &protoReq)
return msg, metadata, err
}
func request_Router_SendToRouteV2_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendToRouteRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SendToRouteV2(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Router_SendToRouteV2_0(ctx context.Context, marshaler runtime.Marshaler, server RouterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendToRouteRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SendToRouteV2(ctx, &protoReq)
return msg, metadata, err
}
func request_Router_ResetMissionControl_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ResetMissionControlRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ResetMissionControl(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Router_ResetMissionControl_0(ctx context.Context, marshaler runtime.Marshaler, server RouterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ResetMissionControlRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ResetMissionControl(ctx, &protoReq)
return msg, metadata, err
}
func request_Router_QueryMissionControl_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryMissionControlRequest
var metadata runtime.ServerMetadata
msg, err := client.QueryMissionControl(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Router_QueryMissionControl_0(ctx context.Context, marshaler runtime.Marshaler, server RouterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryMissionControlRequest
var metadata runtime.ServerMetadata
msg, err := server.QueryMissionControl(ctx, &protoReq)
return msg, metadata, err
}
func request_Router_QueryProbability_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryProbabilityRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["from_node"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "from_node")
}
protoReq.FromNode, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "from_node", err)
}
val, ok = pathParams["to_node"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "to_node")
}
protoReq.ToNode, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "to_node", err)
}
val, ok = pathParams["amt_msat"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "amt_msat")
}
protoReq.AmtMsat, err = runtime.Int64(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "amt_msat", err)
}
msg, err := client.QueryProbability(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Router_QueryProbability_0(ctx context.Context, marshaler runtime.Marshaler, server RouterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryProbabilityRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["from_node"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "from_node")
}
protoReq.FromNode, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "from_node", err)
}
val, ok = pathParams["to_node"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "to_node")
}
protoReq.ToNode, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "to_node", err)
}
val, ok = pathParams["amt_msat"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "amt_msat")
}
protoReq.AmtMsat, err = runtime.Int64(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "amt_msat", err)
}
msg, err := server.QueryProbability(ctx, &protoReq)
return msg, metadata, err
}
func request_Router_BuildRoute_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BuildRouteRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.BuildRoute(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Router_BuildRoute_0(ctx context.Context, marshaler runtime.Marshaler, server RouterServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BuildRouteRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.BuildRoute(ctx, &protoReq)
return msg, metadata, err
}
func request_Router_SubscribeHtlcEvents_0(ctx context.Context, marshaler runtime.Marshaler, client RouterClient, req *http.Request, pathParams map[string]string) (Router_SubscribeHtlcEventsClient, runtime.ServerMetadata, error) {
var protoReq SubscribeHtlcEventsRequest
var metadata runtime.ServerMetadata
stream, err := client.SubscribeHtlcEvents(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
// RegisterRouterHandlerServer registers the http handlers for service Router to "mux".
// UnaryRPC :call RouterServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterRouterHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RouterServer) error {
mux.Handle("POST", pattern_Router_SendPaymentV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("GET", pattern_Router_TrackPaymentV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("POST", pattern_Router_EstimateRouteFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Router_EstimateRouteFee_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_EstimateRouteFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Router_SendToRouteV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Router_SendToRouteV2_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_SendToRouteV2_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Router_ResetMissionControl_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Router_ResetMissionControl_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_ResetMissionControl_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Router_QueryMissionControl_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Router_QueryMissionControl_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_QueryMissionControl_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Router_QueryProbability_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Router_QueryProbability_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_QueryProbability_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Router_BuildRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Router_BuildRoute_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_BuildRoute_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Router_SubscribeHtlcEvents_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
return nil
}
// RegisterRouterHandlerFromEndpoint is same as RegisterRouterHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterRouterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterRouterHandler(ctx, mux, conn)
}
// RegisterRouterHandler registers the http handlers for service Router to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterRouterHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterRouterHandlerClient(ctx, mux, NewRouterClient(conn))
}
// RegisterRouterHandlerClient registers the http handlers for service Router
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RouterClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RouterClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "RouterClient" to call the correct interceptors.
func RegisterRouterHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RouterClient) error {
mux.Handle("POST", pattern_Router_SendPaymentV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_SendPaymentV2_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_SendPaymentV2_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Router_TrackPaymentV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_TrackPaymentV2_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_TrackPaymentV2_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Router_EstimateRouteFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_EstimateRouteFee_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_EstimateRouteFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Router_SendToRouteV2_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_SendToRouteV2_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_SendToRouteV2_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Router_ResetMissionControl_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_ResetMissionControl_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_ResetMissionControl_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Router_QueryMissionControl_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_QueryMissionControl_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_QueryMissionControl_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Router_QueryProbability_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_QueryProbability_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_QueryProbability_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Router_BuildRoute_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_BuildRoute_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_BuildRoute_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Router_SubscribeHtlcEvents_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Router_SubscribeHtlcEvents_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Router_SubscribeHtlcEvents_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Router_SendPaymentV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "router", "send"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Router_TrackPaymentV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "router", "track", "payment_hash"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Router_EstimateRouteFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "router", "route", "estimatefee"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Router_SendToRouteV2_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "router", "route", "send"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Router_ResetMissionControl_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "router", "mc", "reset"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Router_QueryMissionControl_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "router", "mc"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Router_QueryProbability_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"v2", "router", "mc", "probability", "from_node", "to_node", "amt_msat"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Router_BuildRoute_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "router", "route"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Router_SubscribeHtlcEvents_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "router", "htlcevents"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_Router_SendPaymentV2_0 = runtime.ForwardResponseStream
forward_Router_TrackPaymentV2_0 = runtime.ForwardResponseStream
forward_Router_EstimateRouteFee_0 = runtime.ForwardResponseMessage
forward_Router_SendToRouteV2_0 = runtime.ForwardResponseMessage
forward_Router_ResetMissionControl_0 = runtime.ForwardResponseMessage
forward_Router_QueryMissionControl_0 = runtime.ForwardResponseMessage
forward_Router_QueryProbability_0 = runtime.ForwardResponseMessage
forward_Router_BuildRoute_0 = runtime.ForwardResponseMessage
forward_Router_SubscribeHtlcEvents_0 = runtime.ForwardResponseStream
)

563
lnrpc/routerrpc/router.swagger.json

@ -4,17 +4,342 @@
"title": "routerrpc/router.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/router/htlcevents": {
"get": {
"summary": "SubscribeHtlcEvents creates a uni-directional stream from the server to\nthe client which delivers a stream of htlc events.",
"operationId": "SubscribeHtlcEvents",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/routerrpcHtlcEvent"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of routerrpcHtlcEvent"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Router"
]
}
},
"/v2/router/mc": {
"get": {
"summary": "QueryMissionControl exposes the internal mission control state to callers.\nIt is a development feature.",
"operationId": "QueryMissionControl",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/routerrpcQueryMissionControlResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Router"
]
}
},
"/v2/router/mc/probability/{from_node}/{to_node}/{amt_msat}": {
"get": {
"summary": "QueryProbability returns the current success probability estimate for a\ngiven node pair and amount.",
"operationId": "QueryProbability",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/routerrpcQueryProbabilityResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "from_node",
"description": "The source node pubkey of the pair.",
"in": "path",
"required": true,
"type": "string",
"format": "byte"
},
{
"name": "to_node",
"description": "The destination node pubkey of the pair.",
"in": "path",
"required": true,
"type": "string",
"format": "byte"
},
{
"name": "amt_msat",
"description": "The amount for which to calculate a probability.",
"in": "path",
"required": true,
"type": "string",
"format": "int64"
}
],
"tags": [
"Router"
]
}
},
"/v2/router/mc/reset": {
"post": {
"summary": "ResetMissionControl clears all mission control state and starts with a clean\nslate.",
"operationId": "ResetMissionControl",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/routerrpcResetMissionControlResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/routerrpcResetMissionControlRequest"
}
}
],
"tags": [
"Router"
]
}
},
"/v2/router/route": {
"post": {
"summary": "BuildRoute builds a fully specified route based on a list of hop public\nkeys. It retrieves the relevant channel policies from the graph in order to\ncalculate the correct fees and time locks.",
"operationId": "BuildRoute",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/routerrpcBuildRouteResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/routerrpcBuildRouteRequest"
}
}
],
"tags": [
"Router"
]
}
},
"/v2/router/route/estimatefee": {
"post": {
"summary": "EstimateRouteFee allows callers to obtain a lower bound w.r.t how much it\nmay cost to send an HTLC to the target end destination.",
"operationId": "EstimateRouteFee",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/routerrpcRouteFeeResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/routerrpcRouteFeeRequest"
}
}
],
"tags": [
"Router"
]
}
},
"/v2/router/route/send": {
"post": {
"summary": "SendToRouteV2 attempts to make a payment via the specified route. This method\ndiffers from SendPayment in that it allows users to specify a full route\nmanually. This can be used for things like rebalancing, and atomic swaps.",
"operationId": "SendToRouteV2",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/lnrpcHTLCAttempt"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/routerrpcSendToRouteRequest"
}
}
],
"tags": [
"Router"
]
}
},
"/v2/router/send": {
"post": {
"summary": "SendPaymentV2 attempts to route a payment described by the passed\nPaymentRequest to the final destination. The call returns a stream of\npayment updates.",
"operationId": "SendPaymentV2",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcPayment"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcPayment"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/routerrpcSendPaymentRequest"
}
}
],
"tags": [
"Router"
]
}
},
"/v2/router/track/{payment_hash}": {
"get": {
"summary": "TrackPaymentV2 returns an update stream for the payment identified by the\npayment hash.",
"operationId": "TrackPaymentV2",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcPayment"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcPayment"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "payment_hash",
"description": "The hash of the payment to look up.",
"in": "path",
"required": true,
"type": "string",
"format": "byte"
},
{
"name": "no_inflight_updates",
"description": "If set, only the final payment update is streamed back. Intermediate updates\nthat show which htlcs are still in flight are suppressed.",
"in": "query",
"required": false,
"type": "boolean",
"format": "boolean"
}
],
"tags": [
"Router"
]
}
}
},
"definitions": {
"FailureFailureCode": {
"type": "string",
@ -482,6 +807,34 @@
}
}
},
"routerrpcBuildRouteRequest": {
"type": "object",
"properties": {
"amt_msat": {
"type": "string",
"format": "int64",
"description": "The amount to send expressed in msat. If set to zero, the minimum routable\namount is used."
},
"final_cltv_delta": {
"type": "integer",
"format": "int32",
"title": "CLTV delta from the current height that should be used for the timelock\nof the final hop"
},
"outgoing_chan_id": {
"type": "string",
"format": "uint64",
"description": "The channel id of the channel that must be taken to the first hop. If zero,\nany channel may be used."
},
"hop_pubkeys": {
"type": "array",
"items": {
"type": "string",
"format": "byte"
},
"description": "A list of hops that defines the route. This does not include the source hop\npubkey."
}
}
},
"routerrpcBuildRouteResponse": {
"type": "object",
"properties": {
@ -751,9 +1104,27 @@
}
}
},
"routerrpcResetMissionControlRequest": {
"type": "object"
},
"routerrpcResetMissionControlResponse": {
"type": "object"
},
"routerrpcRouteFeeRequest": {
"type": "object",
"properties": {
"dest": {
"type": "string",
"format": "byte",
"description": "The destination once wishes to obtain a routing fee quote to."
},
"amt_sat": {
"type": "string",
"format": "int64",
"description": "The amount one wishes to send to the target destination."
}
}
},
"routerrpcRouteFeeResponse": {
"type": "object",
"properties": {
@ -769,6 +1140,129 @@
}
}
},
"routerrpcSendPaymentRequest": {
"type": "object",
"properties": {
"dest": {
"type": "string",
"format": "byte",
"title": "The identity pubkey of the payment recipient"
},
"amt": {
"type": "string",
"format": "int64",
"description": "Number of satoshis to send.\n\nThe fields amt and amt_msat are mutually exclusive."
},
"amt_msat": {
"type": "string",
"format": "int64",
"description": "Number of millisatoshis to send.\n\nThe fields amt and amt_msat are mutually exclusive."
},
"payment_hash": {
"type": "string",
"format": "byte",
"title": "The hash to use within the payment's HTLC"
},
"final_cltv_delta": {
"type": "integer",
"format": "int32",
"description": "The CLTV delta from the current height that should be used to set the\ntimelock for the final hop."
},
"payment_request": {
"type": "string",
"description": "A bare-bones invoice for a payment within the Lightning Network. With the\ndetails of the invoice, the sender has all the data necessary to send a\npayment to the recipient. The amount in the payment request may be zero. In\nthat case it is required to set the amt field as well. If no payment request\nis specified, the following fields are required: dest, amt and payment_hash."
},
"timeout_seconds": {
"type": "integer",
"format": "int32",
"description": "An upper limit on the amount of time we should spend when attempting to\nfulfill the payment. This is expressed in seconds. If we cannot make a\nsuccessful payment within this time frame, an error will be returned.\nThis field must be non-zero."
},
"fee_limit_sat": {
"type": "string",
"format": "int64",
"description": "The maximum number of satoshis that will be paid as a fee of the payment.\nIf this field is left to the default value of 0, only zero-fee routes will\nbe considered. This usually means single hop routes connecting directly to\nthe destination. To send the payment without a fee limit, use max int here.\n\nThe fields fee_limit_sat and fee_limit_msat are mutually exclusive."
},
"fee_limit_msat": {
"type": "string",
"format": "int64",
"description": "The maximum number of millisatoshis that will be paid as a fee of the\npayment. If this field is left to the default value of 0, only zero-fee\nroutes will be considered. This usually means single hop routes connecting\ndirectly to the destination. To send the payment without a fee limit, use\nmax int here.\n\nThe fields fee_limit_sat and fee_limit_msat are mutually exclusive."
},
"outgoing_chan_id": {
"type": "string",
"format": "uint64",
"description": "Deprecated, use outgoing_chan_ids. The channel id of the channel that must\nbe taken to the first hop. If zero, any channel may be used (unless\noutgoing_chan_ids are set)."
},
"outgoing_chan_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uint64"
},
"description": "The channel ids of the channels are allowed for the first hop. If empty,\nany channel may be used."
},
"last_hop_pubkey": {
"type": "string",
"format": "byte",
"description": "The pubkey of the last hop of the route. If empty, any hop may be used."
},
"cltv_limit": {
"type": "integer",
"format": "int32",
"description": "An optional maximum total time lock for the route. This should not exceed\nlnd's `--max-cltv-expiry` setting. If zero, then the value of\n`--max-cltv-expiry` is enforced."
},
"route_hints": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcRouteHint"
},
"description": "Optional route hints to reach the destination through private channels."
},
"dest_custom_records": {
"type": "object",
"additionalProperties": {
"type": "string",
"format": "byte"
},
"description": "An optional field that can be used to pass an arbitrary set of TLV records\nto a peer which understands the new records. This can be used to pass\napplication specific data during the payment attempt. Record types are\nrequired to be in the custom range \u003e= 65536. When using REST, the values\nmust be encoded as base64."
},
"allow_self_payment": {
"type": "boolean",
"format": "boolean",
"description": "If set, circular payments to self are permitted."
},
"dest_features": {
"type": "array",
"items": {
"$ref": "#/definitions/lnrpcFeatureBit"
},
"description": "Features assumed to be supported by the final node. All transitive feature\ndependencies must also be set properly. For a given feature bit pair, either\noptional or remote may be set, but not both. If this field is nil or empty,\nthe router will try to load destination features from the graph as a\nfallback."
},
"max_parts": {
"type": "integer",
"format": "int64",
"description": "The maximum number of partial payments that may be use to complete the full\namount."
},
"no_inflight_updates": {
"type": "boolean",
"format": "boolean",
"description": "If set, only the final payment update is streamed back. Intermediate updates\nthat show which htlcs are still in flight are suppressed."
}
}
},
"routerrpcSendToRouteRequest": {
"type": "object",
"properties": {
"payment_hash": {
"type": "string",
"format": "byte",
"description": "The payment hash to use for the HTLC."
},
"route": {
"$ref": "#/definitions/lnrpcRoute",
"description": "Route that should be used to attempt to complete the payment."
}
}
},
"routerrpcSendToRouteResponse": {
"type": "object",
"properties": {
@ -786,6 +1280,27 @@
"routerrpcSettleEvent": {
"type": "object"
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"runtimeStreamError": {
"type": "object",
"properties": {
@ -811,43 +1326,5 @@
}
}
}
},
"x-stream-definitions": {
"lnrpcPayment": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcPayment"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcPayment"
},
"routerrpcHtlcEvent": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/routerrpcHtlcEvent"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of routerrpcHtlcEvent"
},
"routerrpcPaymentStatus": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/routerrpcPaymentStatus"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of routerrpcPaymentStatus"
}
}
}

1609
lnrpc/rpc.pb.go

@ -7,8 +7,9 @@ import (
context "context"
fmt "fmt"
proto "github.com/golang/protobuf/proto"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -11634,740 +11635,708 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 11718 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x5b, 0x6c, 0x23, 0x59,
0x76, 0x58, 0xf3, 0x25, 0x92, 0x87, 0x0f, 0x51, 0x57, 0x2f, 0xb6, 0x7a, 0x7a, 0xba, 0xa7, 0xe6,
0xd5, 0xd3, 0x33, 0xab, 0xee, 0xe9, 0xdd, 0x9e, 0xd9, 0xdd, 0x89, 0xd7, 0x4b, 0x49, 0xd4, 0x88,
0xdb, 0x12, 0xa5, 0x29, 0x52, 0x33, 0x9e, 0xf5, 0xa3, 0x5c, 0x22, 0xaf, 0xa4, 0x72, 0x93, 0x55,
0x9c, 0xaa, 0xa2, 0x5a, 0xda, 0xc1, 0xe4, 0x23, 0xc8, 0x0b, 0x46, 0x12, 0x20, 0x48, 0x1c, 0x20,
0x4e, 0x8c, 0x3c, 0x8c, 0x24, 0xc8, 0x8f, 0x11, 0xc4, 0x4e, 0x80, 0x00, 0xf9, 0x8e, 0x7f, 0x12,
0x04, 0x81, 0x9d, 0x8f, 0x04, 0x86, 0x81, 0x00, 0x89, 0xf3, 0x17, 0x18, 0xc8, 0x57, 0x3e, 0x02,
0x04, 0xf7, 0x9c, 0x7b, 0xab, 0x6e, 0x91, 0xa5, 0xee, 0x9e, 0xf5, 0x64, 0x7f, 0x24, 0xde, 0x73,
0xcf, 0x7d, 0x9f, 0x7b, 0xee, 0x79, 0xdd, 0x5b, 0x50, 0xf6, 0x27, 0x83, 0xcd, 0x89, 0xef, 0x85,
0x1e, 0x2b, 0x8c, 0x5c, 0x7f, 0x32, 0xd8, 0x78, 0xe5, 0xcc, 0xf3, 0xce, 0x46, 0xfc, 0x81, 0x3d,
0x71, 0x1e, 0xd8, 0xae, 0xeb, 0x85, 0x76, 0xe8, 0x78, 0x6e, 0x40, 0x48, 0xc6, 0x9f, 0x64, 0x20,
0x7f, 0x1c, 0x5e, 0x7a, 0xec, 0x31, 0x54, 0xed, 0xe1, 0xd0, 0xe7, 0x41, 0x60, 0x85, 0x57, 0x13,
0xde, 0xcc, 0xdc, 0xcd, 0xdc, 0xab, 0x3f, 0x62, 0x9b, 0x58, 0xc9, 0x66, 0x8b, 0xb2, 0xfa, 0x57,
0x13, 0x6e, 0x56, 0xec, 0x38, 0xc1, 0x9a, 0x50, 0x94, 0xc9, 0x66, 0xf6, 0x6e, 0xe6, 0x5e, 0xd9,
0x54, 0x49, 0x76, 0x1b, 0xc0, 0x1e, 0x7b, 0x53, 0x37, 0xb4, 0x02, 0x3b, 0x6c, 0xe6, 0xee, 0x66,
0xee, 0xe5, 0xcc, 0x32, 0x41, 0x7a, 0x76, 0xc8, 0x6e, 0x41, 0x79, 0xf2, 0xd4, 0x0a, 0x06, 0xbe,
0x33, 0x09, 0x9b, 0x79, 0x2c, 0x5a, 0x9a, 0x3c, 0xed, 0x61, 0x9a, 0xbd, 0x0b, 0x25, 0x6f, 0x1a,
0x4e, 0x3c, 0xc7, 0x0d, 0x9b, 0x85, 0xbb, 0x99, 0x7b, 0x95, 0x47, 0x8b, 0xb2, 0x23, 0x87, 0xd3,
0xf0, 0x48, 0x80, 0xcd, 0x08, 0x81, 0xbd, 0x01, 0xb5, 0x81, 0xe7, 0x9e, 0x3a, 0xfe, 0x98, 0x46,
0xd6, 0x5c, 0xc0, 0xb6, 0x92, 0x40, 0xe3, 0xdf, 0x65, 0xa1, 0xd2, 0xf7, 0x6d, 0x37, 0xb0, 0x07,
0x02, 0xc0, 0xd6, 0xa1, 0x18, 0x5e, 0x5a, 0xe7, 0x76, 0x70, 0x8e, 0x43, 0x2d, 0x9b, 0x0b, 0xe1,
0xe5, 0x9e, 0x1d, 0x9c, 0xb3, 0x35, 0x58, 0xa0, 0x5e, 0xe2, 0x80, 0x72, 0xa6, 0x4c, 0xb1, 0x77,
0x61, 0xc9, 0x9d, 0x8e, 0xad, 0x64, 0x53, 0x62, 0x58, 0x05, 0xb3, 0xe1, 0x4e, 0xc7, 0xdb, 0x3a,
0x5c, 0x0c, 0xfe, 0x64, 0xe4, 0x0d, 0x9e, 0x52, 0x03, 0x34, 0xbc, 0x32, 0x42, 0xb0, 0x8d, 0xd7,
0xa0, 0x2a, 0xb3, 0xb9, 0x73, 0x76, 0x4e, 0x63, 0x2c, 0x98, 0x15, 0x42, 0x40, 0x90, 0xa8, 0x21,
0x74, 0xc6, 0xdc, 0x0a, 0x42, 0x7b, 0x3c, 0x91, 0x43, 0x2a, 0x0b, 0x48, 0x4f, 0x00, 0x30, 0xdb,
0x0b, 0xed, 0x91, 0x75, 0xca, 0x79, 0xd0, 0x2c, 0xca, 0x6c, 0x01, 0xd9, 0xe5, 0x3c, 0x60, 0x6f,
0x42, 0x7d, 0xc8, 0x83, 0xd0, 0x92, 0x8b, 0xc1, 0x83, 0x66, 0xe9, 0x6e, 0xee, 0x5e, 0xd9, 0xac,
0x09, 0x68, 0x4b, 0x01, 0xd9, 0x2b, 0x00, 0xbe, 0xfd, 0xcc, 0x12, 0x13, 0xc1, 0x2f, 0x9b, 0x65,
0x5a, 0x05, 0xdf, 0x7e, 0xd6, 0xbf, 0xdc, 0xe3, 0x97, 0x6c, 0x05, 0x0a, 0x23, 0xfb, 0x84, 0x8f,
0x9a, 0x80, 0x19, 0x94, 0x30, 0x7e, 0x0c, 0x6b, 0x1f, 0xf3, 0x50, 0x9b, 0xca, 0xc0, 0xe4, 0x5f,
0x4c, 0x79, 0x10, 0x8a, 0x51, 0x05, 0xa1, 0xed, 0x87, 0x6a, 0x54, 0x19, 0x1a, 0x15, 0xc2, 0xe2,
0x51, 0x71, 0x77, 0xa8, 0x10, 0xb2, 0x88, 0x50, 0xe6, 0xee, 0x90, 0xb2, 0x8d, 0x7d, 0x60, 0x5a,
0xc5, 0x3b, 0x3c, 0xb4, 0x9d, 0x51, 0xc0, 0x3e, 0x80, 0x6a, 0xa8, 0x35, 0xd7, 0xcc, 0xdc, 0xcd,
0xdd, 0xab, 0x44, 0xa4, 0xa9, 0x15, 0x30, 0x13, 0x78, 0xc6, 0x39, 0x94, 0x76, 0x39, 0xdf, 0x77,
0xc6, 0x4e, 0xc8, 0xd6, 0xa0, 0x70, 0xea, 0x5c, 0xf2, 0x21, 0x76, 0x2a, 0xb7, 0x77, 0xc3, 0xa4,
0x24, 0xbb, 0x03, 0x80, 0x3f, 0xac, 0x71, 0x44, 0xa5, 0x7b, 0x37, 0xcc, 0x32, 0xc2, 0x0e, 0x02,
0x3b, 0x64, 0x1b, 0x50, 0x9c, 0x70, 0x7f, 0xc0, 0x15, 0x3d, 0xec, 0xdd, 0x30, 0x15, 0x60, 0xab,
0x08, 0x85, 0x91, 0xa8, 0xdd, 0xf8, 0xfd, 0x02, 0x54, 0x7a, 0xdc, 0x1d, 0xaa, 0x99, 0x60, 0x90,
0x17, 0x13, 0x8d, 0x8d, 0x55, 0x4d, 0xfc, 0xcd, 0x5e, 0x87, 0x0a, 0x2e, 0x49, 0x10, 0xfa, 0x8e,
0x7b, 0x46, 0xbb, 0x65, 0x2b, 0xdb, 0xcc, 0x98, 0x20, 0xc0, 0x3d, 0x84, 0xb2, 0x06, 0xe4, 0xec,
0xb1, 0xda, 0x2d, 0xe2, 0x27, 0xbb, 0x09, 0x25, 0x7b, 0x1c, 0x52, 0xf7, 0xaa, 0x08, 0x2e, 0xda,
0xe3, 0x10, 0xbb, 0xf6, 0x1a, 0x54, 0x27, 0xf6, 0xd5, 0x98, 0xbb, 0x61, 0x4c, 0x66, 0x55, 0xb3,
0x22, 0x61, 0x48, 0x68, 0x8f, 0x60, 0x59, 0x47, 0x51, 0x8d, 0x17, 0xa2, 0xc6, 0x97, 0x34, 0x6c,
0xd9, 0x87, 0xb7, 0x61, 0x51, 0x95, 0xf1, 0x69, 0x3c, 0x48, 0x7e, 0x65, 0xb3, 0x2e, 0xc1, 0x6a,
0x94, 0xf7, 0xa0, 0x71, 0xea, 0xb8, 0xf6, 0xc8, 0x1a, 0x8c, 0xc2, 0x0b, 0x6b, 0xc8, 0x47, 0xa1,
0x8d, 0x94, 0x58, 0x30, 0xeb, 0x08, 0xdf, 0x1e, 0x85, 0x17, 0x3b, 0x02, 0xca, 0xde, 0x83, 0xf2,
0x29, 0xe7, 0x16, 0x4e, 0x56, 0xb3, 0x94, 0xd8, 0xd0, 0x6a, 0x85, 0xcc, 0xd2, 0xa9, 0x5a, 0xab,
0xf7, 0xa0, 0xe1, 0x4d, 0xc3, 0x33, 0xcf, 0x71, 0xcf, 0xac, 0xc1, 0xb9, 0xed, 0x5a, 0xce, 0x10,
0x69, 0x33, 0xbf, 0x95, 0x7d, 0x98, 0x31, 0xeb, 0x2a, 0x6f, 0xfb, 0xdc, 0x76, 0x3b, 0x43, 0xf6,
0x16, 0x2c, 0x8e, 0xec, 0x20, 0xb4, 0xce, 0xbd, 0x89, 0x35, 0x99, 0x9e, 0x3c, 0xe5, 0x57, 0xcd,
0x1a, 0x4e, 0x44, 0x4d, 0x80, 0xf7, 0xbc, 0xc9, 0x11, 0x02, 0x05, 0xe9, 0x61, 0x3f, 0xa9, 0x13,
0x82, 0xa4, 0x6b, 0x66, 0x59, 0x40, 0xa8, 0xd1, 0xcf, 0x61, 0x19, 0x97, 0x67, 0x30, 0x0d, 0x42,
0x6f, 0x6c, 0xf9, 0x7c, 0xe0, 0xf9, 0xc3, 0xa0, 0x59, 0x41, 0x5a, 0x7b, 0x47, 0x76, 0x56, 0x5b,
0xe3, 0xcd, 0x1d, 0x1e, 0x84, 0xdb, 0x88, 0x6c, 0x12, 0x6e, 0xdb, 0x0d, 0xfd, 0x2b, 0x73, 0x69,
0x38, 0x0b, 0x67, 0xef, 0x01, 0xb3, 0x47, 0x23, 0xef, 0x99, 0x15, 0xf0, 0xd1, 0xa9, 0x25, 0x27,
0xb1, 0x59, 0xbf, 0x9b, 0xb9, 0x57, 0x32, 0x1b, 0x98, 0xd3, 0xe3, 0xa3, 0xd3, 0x23, 0x82, 0xb3,
0x0f, 0x00, 0x37, 0xa9, 0x75, 0xca, 0xed, 0x70, 0xea, 0xf3, 0xa0, 0xb9, 0x78, 0x37, 0x77, 0xaf,
0xfe, 0x68, 0x29, 0x9a, 0x2f, 0x04, 0x6f, 0x39, 0xa1, 0x59, 0x15, 0x78, 0x32, 0x1d, 0x6c, 0xec,
0xc0, 0x5a, 0x7a, 0x97, 0x04, 0x51, 0x89, 0x59, 0x11, 0xc4, 0x98, 0x37, 0xc5, 0x4f, 0xb1, 0xb3,
0x2f, 0xec, 0xd1, 0x94, 0x23, 0x15, 0x56, 0x4d, 0x4a, 0x7c, 0x3f, 0xfb, 0xdd, 0x8c, 0xf1, 0x7b,
0x19, 0xa8, 0xd2, 0x28, 0x83, 0x89, 0xe7, 0x06, 0x9c, 0xbd, 0x0e, 0x35, 0x45, 0x0d, 0xdc, 0xf7,
0x3d, 0x5f, 0x72, 0x4b, 0x45, 0x79, 0x6d, 0x01, 0x63, 0xef, 0x40, 0x43, 0x21, 0x4d, 0x7c, 0xee,
0x8c, 0xed, 0x33, 0x55, 0xb5, 0x22, 0xa5, 0x23, 0x09, 0x66, 0xef, 0xc7, 0xf5, 0xf9, 0xde, 0x34,
0xe4, 0x48, 0xeb, 0x95, 0x47, 0x55, 0x39, 0x3c, 0x53, 0xc0, 0xa2, 0xda, 0x31, 0xf5, 0x12, 0x74,
0x6e, 0xfc, 0x46, 0x06, 0x98, 0xe8, 0x76, 0xdf, 0xa3, 0x0a, 0x62, 0x8e, 0x94, 0x28, 0x99, 0x79,
0xe9, 0x1d, 0x92, 0x7d, 0xde, 0x0e, 0x31, 0xa0, 0x40, 0x7d, 0xcf, 0xa7, 0xf4, 0x9d, 0xb2, 0x7e,
0x94, 0x2f, 0xe5, 0x1a, 0x79, 0xe3, 0xbf, 0xe6, 0x60, 0x45, 0xd0, 0xa9, 0xcb, 0x47, 0xad, 0xc1,
0x80, 0x4f, 0xa2, 0xbd, 0x73, 0x07, 0x2a, 0xae, 0x37, 0xe4, 0x8a, 0x62, 0xa9, 0x63, 0x20, 0x40,
0x1a, 0xb9, 0x9e, 0xdb, 0x8e, 0x4b, 0x1d, 0xa7, 0xc9, 0x2c, 0x23, 0x04, 0xbb, 0xfd, 0x16, 0x2c,
0x4e, 0xb8, 0x3b, 0xd4, 0xb7, 0x48, 0x8e, 0xa8, 0x5e, 0x82, 0xe5, 0xee, 0xb8, 0x03, 0x95, 0xd3,
0x29, 0xe1, 0x09, 0xc6, 0x92, 0x47, 0x1a, 0x00, 0x09, 0x6a, 0x11, 0x7f, 0x99, 0x4c, 0x83, 0x73,
0xcc, 0x2d, 0x60, 0x6e, 0x51, 0xa4, 0x45, 0xd6, 0x6d, 0x80, 0xe1, 0x34, 0x08, 0xe5, 0x8e, 0x59,
0xc0, 0xcc, 0xb2, 0x80, 0xd0, 0x8e, 0xf9, 0x16, 0x2c, 0x8f, 0xed, 0x4b, 0x0b, 0x69, 0xc7, 0x72,
0x5c, 0xeb, 0x74, 0x84, 0x4c, 0xbd, 0x88, 0x78, 0x8d, 0xb1, 0x7d, 0xf9, 0xa9, 0xc8, 0xe9, 0xb8,
0xbb, 0x08, 0x17, 0x6c, 0x65, 0x40, 0x33, 0x61, 0xf9, 0x3c, 0xe0, 0xfe, 0x05, 0x47, 0x4e, 0x90,
0x37, 0xeb, 0x12, 0x6c, 0x12, 0x54, 0xf4, 0x68, 0x2c, 0xc6, 0x1d, 0x8e, 0x06, 0xb4, 0xed, 0xcd,
0xe2, 0xd8, 0x71, 0xf7, 0xc2, 0xd1, 0x40, 0x9c, 0x57, 0x82, 0x8f, 0x4c, 0xb8, 0x6f, 0x3d, 0x7d,
0x86, 0x7b, 0x38, 0x8f, 0x7c, 0xe3, 0x88, 0xfb, 0x4f, 0x9e, 0x09, 0x91, 0x62, 0x10, 0x20, 0x23,
0xb2, 0xaf, 0x9a, 0x15, 0xdc, 0xe0, 0xa5, 0x41, 0x20, 0x58, 0x90, 0x7d, 0x25, 0x36, 0xa1, 0xe8,
0xad, 0x8d, 0xab, 0xc0, 0x87, 0x58, 0x7d, 0x80, 0x1c, 0xb5, 0x86, 0x9d, 0x6d, 0xc9, 0x0c, 0xd1,
0x4e, 0x20, 0xa8, 0x5e, 0x75, 0xf6, 0x74, 0x64, 0x9f, 0x05, 0xc8, 0x52, 0x6a, 0x66, 0x55, 0x02,
0x77, 0x05, 0xcc, 0xf8, 0x0c, 0x56, 0x67, 0xd6, 0x56, 0xee, 0x19, 0x21, 0x42, 0x20, 0x04, 0xd7,
0xb5, 0x64, 0xca, 0x54, 0xda, 0xa2, 0x65, 0x53, 0x16, 0xcd, 0xf8, 0xad, 0x0c, 0x54, 0x65, 0xcd,
0x28, 0xec, 0xb0, 0x4d, 0x60, 0x6a, 0x15, 0xc3, 0x4b, 0x67, 0x68, 0x9d, 0x5c, 0x85, 0x3c, 0x20,
0xa2, 0xd9, 0xbb, 0x61, 0x36, 0x64, 0x5e, 0xff, 0xd2, 0x19, 0x6e, 0x89, 0x1c, 0x76, 0x1f, 0x1a,
0x09, 0xfc, 0x20, 0xf4, 0x89, 0xa2, 0xf7, 0x6e, 0x98, 0x75, 0x0d, 0xbb, 0x17, 0xfa, 0x62, 0x8f,
0x08, 0x51, 0x6a, 0x1a, 0x5a, 0x8e, 0x3b, 0xe4, 0x97, 0x48, 0x46, 0x35, 0xb3, 0x42, 0xb0, 0x8e,
0x00, 0x6d, 0xd5, 0xa1, 0xaa, 0x57, 0x67, 0x9c, 0x41, 0x49, 0xc9, 0x61, 0x28, 0x88, 0xcc, 0x74,
0xc9, 0x2c, 0x87, 0x51, 0x4f, 0x6e, 0x42, 0x29, 0xd9, 0x03, 0xb3, 0x18, 0xbe, 0x74, 0xc3, 0xc6,
0x0f, 0xa0, 0xb1, 0x2f, 0x88, 0xc7, 0x15, 0xc4, 0x2a, 0xe5, 0xca, 0x35, 0x58, 0xd0, 0x36, 0x4d,
0xd9, 0x94, 0x29, 0x71, 0xe6, 0x9e, 0x7b, 0x41, 0x28, 0x5b, 0xc1, 0xdf, 0xc6, 0xef, 0x67, 0x80,
0xb5, 0x83, 0xd0, 0x19, 0xdb, 0x21, 0xdf, 0xe5, 0x11, 0x5b, 0x38, 0x84, 0xaa, 0xa8, 0xad, 0xef,
0xb5, 0x48, 0xd0, 0x23, 0x81, 0xe2, 0x5d, 0xb9, 0x8d, 0xe7, 0x0b, 0x6c, 0xea, 0xd8, 0xc4, 0xe6,
0x13, 0x15, 0x88, 0x5d, 0x16, 0xda, 0xfe, 0x19, 0x0f, 0x51, 0x3c, 0x94, 0x72, 0x0d, 0x10, 0x48,
0x08, 0x86, 0x1b, 0x3f, 0x0f, 0x4b, 0x73, 0x75, 0xe8, 0x7c, 0xb9, 0x9c, 0xc2, 0x97, 0x73, 0x3a,
0x5f, 0xb6, 0x60, 0x39, 0xd1, 0x2f, 0x49, 0x69, 0xeb, 0x50, 0x14, 0x1b, 0x42, 0x08, 0x07, 0x19,
0x92, 0x56, 0x4f, 0x39, 0x17, 0xe2, 0xf5, 0x03, 0x58, 0x39, 0xe5, 0xdc, 0xb7, 0x43, 0xcc, 0xc4,
0x1d, 0x23, 0x56, 0x48, 0x56, 0xbc, 0x24, 0xf3, 0x7a, 0x76, 0x78, 0xc4, 0x7d, 0xb1, 0x52, 0xc6,
0xff, 0xc9, 0xc0, 0xa2, 0xe0, 0xa0, 0x07, 0xb6, 0x7b, 0xa5, 0xe6, 0x69, 0x3f, 0x75, 0x9e, 0xee,
0x69, 0x87, 0xa1, 0x86, 0xfd, 0x75, 0x27, 0x29, 0x37, 0x3b, 0x49, 0xec, 0x2e, 0x54, 0x13, 0x7d,
0x2d, 0x60, 0x5f, 0x21, 0x88, 0x3a, 0x19, 0x4b, 0xa4, 0x0b, 0x9a, 0x44, 0xfa, 0x67, 0x9f, 0xdc,
0xb7, 0xa0, 0x11, 0x0f, 0x46, 0xce, 0x2c, 0x83, 0xbc, 0x20, 0x54, 0x59, 0x01, 0xfe, 0x36, 0xfe,
0x65, 0x86, 0x10, 0xb7, 0x3d, 0x27, 0x96, 0x7a, 0x19, 0xe4, 0x85, 0x94, 0xad, 0x10, 0xc5, 0xef,
0x6b, 0x75, 0x88, 0x6f, 0x60, 0x0a, 0x6e, 0x42, 0x29, 0x10, 0x22, 0xb4, 0x3d, 0xa2, 0x59, 0x28,
0x99, 0x45, 0x91, 0x6e, 0x8d, 0x46, 0xf1, 0xec, 0x14, 0x75, 0x79, 0xfd, 0x6d, 0x58, 0xd2, 0xfa,
0xfc, 0x9c, 0xd1, 0x75, 0x81, 0xed, 0x3b, 0x41, 0x78, 0xec, 0x06, 0x13, 0x4d, 0xc8, 0xbb, 0x05,
0x65, 0xc1, 0x8d, 0x45, 0x7f, 0x03, 0x29, 0xd1, 0x0b, 0xf6, 0x2c, 0x7a, 0x1b, 0x60, 0xa6, 0x7d,
0x29, 0x33, 0xb3, 0x32, 0xd3, 0xbe, 0xc4, 0x4c, 0xe3, 0xbb, 0xb0, 0x9c, 0xa8, 0x4f, 0x36, 0xfd,
0x1a, 0x14, 0xa6, 0xe1, 0xa5, 0xa7, 0xc4, 0xf8, 0x8a, 0xa4, 0x26, 0xa1, 0x84, 0x9a, 0x94, 0x63,
0x7c, 0x04, 0x4b, 0x5d, 0xfe, 0x4c, 0x6e, 0x78, 0xd5, 0x91, 0xb7, 0x20, 0xff, 0x02, 0xc5, 0x14,
0xf3, 0x8d, 0x4d, 0x60, 0x7a, 0x61, 0xd9, 0xaa, 0xa6, 0xa7, 0x66, 0x12, 0x7a, 0xaa, 0xf1, 0x16,
0xb0, 0x9e, 0x73, 0xe6, 0x1e, 0xf0, 0x20, 0xb0, 0xcf, 0x22, 0x16, 0xd1, 0x80, 0xdc, 0x38, 0x38,
0x93, 0xfc, 0x4c, 0xfc, 0x34, 0xbe, 0x0d, 0xcb, 0x09, 0x3c, 0x59, 0xf1, 0x2b, 0x50, 0x0e, 0x9c,
0x33, 0x17, 0x85, 0x30, 0x59, 0x75, 0x0c, 0x30, 0x76, 0x61, 0xe5, 0x53, 0xee, 0x3b, 0xa7, 0x57,
0x2f, 0xaa, 0x3e, 0x59, 0x4f, 0x76, 0xb6, 0x9e, 0x36, 0xac, 0xce, 0xd4, 0x23, 0x9b, 0x27, 0xa2,
0x96, 0x2b, 0x59, 0x32, 0x29, 0xa1, 0xf1, 0xc8, 0xac, 0xce, 0x23, 0x8d, 0x63, 0x60, 0xdb, 0x9e,
0xeb, 0xf2, 0x41, 0x78, 0xc4, 0xb9, 0xaf, 0x3a, 0xf3, 0xae, 0x46, 0xc1, 0x95, 0x47, 0xeb, 0x72,
0x66, 0x67, 0x19, 0xaf, 0x24, 0x6d, 0x06, 0xf9, 0x09, 0xf7, 0xc7, 0x58, 0x71, 0xc9, 0xc4, 0xdf,
0xc6, 0x2a, 0x2c, 0x27, 0xaa, 0xa5, 0xbe, 0x19, 0x0f, 0x61, 0x75, 0xc7, 0x09, 0x06, 0xf3, 0x0d,
0xae, 0x43, 0x71, 0x32, 0x3d, 0xb1, 0x92, 0x3c, 0xfc, 0x09, 0xbf, 0x32, 0x9a, 0xb0, 0x36, 0x5b,
0x42, 0xd6, 0xf5, 0x17, 0x33, 0x90, 0xdf, 0xeb, 0xef, 0x6f, 0xb3, 0x0d, 0x28, 0x39, 0xee, 0xc0,
0x1b, 0x0b, 0x21, 0x8d, 0xc6, 0x1c, 0xa5, 0xaf, 0xdd, 0x76, 0xb7, 0xa0, 0x8c, 0xb2, 0x9d, 0x50,
0xaf, 0xa5, 0x98, 0x54, 0x12, 0x80, 0x7d, 0x6f, 0xf0, 0x54, 0xe8, 0xf5, 0xfc, 0x72, 0xe2, 0xf8,
0xa8, 0xb9, 0x2b, 0xcd, 0x34, 0x4f, 0x72, 0x41, 0x9c, 0x21, 0x15, 0xd4, 0x7f, 0x53, 0x82, 0xa2,
0x3c, 0x99, 0xe9, 0x94, 0x0f, 0x9d, 0x0b, 0x1e, 0x9f, 0xf2, 0x22, 0x25, 0x64, 0x07, 0x9f, 0x8f,
0xbd, 0x30, 0x12, 0xee, 0x68, 0x0d, 0xaa, 0x04, 0x94, 0xe2, 0x9d, 0x26, 0x60, 0x90, 0x99, 0x23,
0x47, 0x48, 0x03, 0xfd, 0xd8, 0xbf, 0x05, 0x45, 0x25, 0x27, 0xe4, 0x23, 0xfd, 0x67, 0x61, 0x40,
0x92, 0xdd, 0x06, 0x94, 0x06, 0xf6, 0xc4, 0x1e, 0x38, 0xe1, 0x95, 0x64, 0x13, 0x51, 0x5a, 0xd4,
0x3e, 0xf2, 0x06, 0xf6, 0xc8, 0x3a, 0xb1, 0x47, 0xb6, 0x3b, 0xe0, 0xd2, 0x7e, 0x50, 0x45, 0xe0,
0x16, 0xc1, 0xd8, 0x9b, 0x50, 0x97, 0xfd, 0x54, 0x58, 0x64, 0x46, 0x90, 0xbd, 0x57, 0x68, 0x42,
0x10, 0xf5, 0xc6, 0x63, 0x47, 0x68, 0x24, 0x24, 0xb2, 0xe5, 0xcc, 0x32, 0x41, 0x76, 0x39, 0x8e,
0x56, 0x66, 0x3f, 0xa3, 0xa9, 0x2b, 0x53, 0x53, 0x04, 0xfc, 0x8c, 0xd4, 0xfe, 0x79, 0xb9, 0x2d,
0xa7, 0xc9, 0x6d, 0xef, 0xc2, 0xd2, 0xd4, 0x0d, 0x78, 0x18, 0x8e, 0xf8, 0x30, 0xea, 0x4b, 0x05,
0x91, 0x1a, 0x51, 0x86, 0xea, 0xce, 0x26, 0x2c, 0x93, 0xe1, 0x23, 0xb0, 0x43, 0x2f, 0x38, 0x77,
0x02, 0x2b, 0x10, 0xda, 0x14, 0xa9, 0xc6, 0x4b, 0x98, 0xd5, 0x93, 0x39, 0x3d, 0x52, 0xa7, 0xd6,
0x67, 0xf0, 0x7d, 0x3e, 0xe0, 0xce, 0x05, 0x1f, 0xa2, 0x4c, 0x97, 0x33, 0x57, 0x13, 0x65, 0x4c,
0x99, 0x89, 0x02, 0xfa, 0x74, 0x6c, 0x4d, 0x27, 0x43, 0x5b, 0x08, 0x36, 0x75, 0x12, 0x9c, 0xdd,
0xe9, 0xf8, 0x98, 0x20, 0xec, 0x21, 0x28, 0xa9, 0x4d, 0xca, 0x92, 0x8b, 0x09, 0x7e, 0x26, 0x88,
0xd5, 0xac, 0x4a, 0x0c, 0x12, 0x2a, 0x13, 0xf2, 0x69, 0x63, 0x46, 0x3e, 0x6d, 0x42, 0x71, 0xe2,
0x3b, 0x17, 0x76, 0xc8, 0x9b, 0x4b, 0xc4, 0xd6, 0x65, 0x52, 0x70, 0x06, 0xc7, 0x75, 0x42, 0xc7,
0x0e, 0x3d, 0xbf, 0xc9, 0x30, 0x2f, 0x06, 0xb0, 0xfb, 0xb0, 0x84, 0x34, 0x12, 0x84, 0x76, 0x38,
0x0d, 0xa4, 0xb4, 0xba, 0x8c, 0xc4, 0x84, 0xf2, 0x76, 0x0f, 0xe1, 0x28, 0xb0, 0xb2, 0x6f, 0xc3,
0x1a, 0x91, 0x05, 0x96, 0x90, 0x52, 0x38, 0x0a, 0x0f, 0x2b, 0x38, 0x15, 0xcb, 0x98, 0x2b, 0xe8,
0x5b, 0xca, 0xe2, 0x42, 0x92, 0x78, 0x0c, 0xeb, 0x92, 0x4c, 0xe6, 0x4a, 0xad, 0x62, 0xa9, 0x15,
0xca, 0x9e, 0x29, 0xb6, 0x09, 0x4b, 0xa2, 0x4b, 0xce, 0xc0, 0x92, 0xa5, 0xc5, 0x4e, 0x58, 0x13,
0xbd, 0x47, 0xad, 0x6a, 0x91, 0x32, 0x4d, 0xcc, 0x7b, 0xc2, 0xaf, 0xd8, 0x0f, 0x60, 0x91, 0x48,
0x06, 0x55, 0x31, 0xe4, 0xf4, 0x1b, 0xc8, 0xe9, 0x57, 0xe5, 0x84, 0x6e, 0x47, 0xb9, 0xc8, 0xec,
0xeb, 0x83, 0x44, 0x5a, 0x6c, 0x87, 0x91, 0x73, 0xca, 0x43, 0x67, 0xcc, 0x9b, 0xeb, 0x44, 0x60,
0x2a, 0x2d, 0x76, 0xea, 0x74, 0x82, 0x39, 0x4d, 0xe2, 0x0b, 0x94, 0x42, 0xda, 0x1d, 0x79, 0x01,
0x57, 0x66, 0xb2, 0xe6, 0x4d, 0xb9, 0x09, 0x05, 0x50, 0xc9, 0x9b, 0x42, 0x68, 0x27, 0x05, 0x29,
0x32, 0x66, 0xde, 0x42, 0x62, 0xa8, 0x91, 0x9e, 0xa4, 0x0c, 0x9a, 0xe2, 0x6c, 0x3f, 0xb7, 0x9f,
0x29, 0x0e, 0xf2, 0x0a, 0xae, 0x2f, 0x08, 0x90, 0xe4, 0x1d, 0xbf, 0x9b, 0xa1, 0x03, 0x51, 0xf2,
0x8f, 0x40, 0x53, 0x05, 0x89, 0x73, 0x58, 0x9e, 0x3b, 0xba, 0x92, 0xcc, 0x04, 0x08, 0x74, 0xe8,
0x8e, 0x70, 0x37, 0x3b, 0xae, 0x8e, 0x42, 0xbc, 0xb7, 0xaa, 0x80, 0x88, 0x74, 0x07, 0x2a, 0x93,
0xe9, 0xc9, 0xc8, 0x19, 0x10, 0x4a, 0x8e, 0x6a, 0x21, 0x10, 0x22, 0x08, 0x5d, 0x98, 0x28, 0x8a,
0x30, 0xf2, 0x88, 0x51, 0x91, 0x30, 0x44, 0x41, 0xde, 0xce, 0x7d, 0x64, 0x27, 0x55, 0x13, 0x7f,
0x1b, 0x5b, 0xb0, 0x92, 0xec, 0xb4, 0x3c, 0x78, 0xee, 0x43, 0x49, 0xf2, 0x2a, 0x65, 0x24, 0xa9,
0xab, 0x85, 0x92, 0xea, 0x5c, 0x94, 0x6f, 0xfc, 0x76, 0x01, 0x96, 0x25, 0x74, 0x5b, 0x4c, 0x6d,
0x6f, 0x3a, 0x1e, 0xdb, 0x7e, 0x0a, 0x13, 0xcc, 0x3c, 0x9f, 0x09, 0x66, 0xe7, 0x98, 0x60, 0x52,
0x4b, 0x26, 0x1e, 0x9a, 0xd4, 0x92, 0xc5, 0x5a, 0x92, 0xe2, 0xa2, 0xdb, 0x62, 0x6b, 0x12, 0xdc,
0x27, 0x9b, 0xef, 0x1c, 0xcb, 0x2e, 0xa4, 0xb0, 0x6c, 0x9d, 0xe1, 0x2e, 0xcc, 0x30, 0xdc, 0xd7,
0x80, 0x88, 0x46, 0xad, 0x7e, 0x91, 0x74, 0x19, 0x84, 0x49, 0xd3, 0xe7, 0xdb, 0xb0, 0x38, 0xcb,
0xe3, 0x88, 0x99, 0xd6, 0x53, 0x38, 0x9c, 0x33, 0xe6, 0x78, 0x5a, 0x69, 0xc8, 0x65, 0xc9, 0xe1,
0x9c, 0x31, 0xdf, 0xc7, 0x1c, 0x85, 0xdf, 0x06, 0xa0, 0xb6, 0x71, 0xd3, 0x00, 0x6e, 0x9a, 0xb7,
0x92, 0x6b, 0xa1, 0xcf, 0xfa, 0xa6, 0x48, 0x4c, 0x7d, 0x8e, 0xbb, 0xa8, 0x8c, 0x25, 0x71, 0x03,
0x7d, 0x08, 0x75, 0x6f, 0xc2, 0x5d, 0x2b, 0xe6, 0x35, 0x15, 0xac, 0xaa, 0x21, 0xab, 0xea, 0x28,
0xb8, 0x59, 0x13, 0x78, 0x51, 0x92, 0x7d, 0x8f, 0x26, 0x99, 0x6b, 0x25, 0xab, 0xd7, 0x94, 0xac,
0x23, 0x62, 0x94, 0x36, 0x7e, 0x3d, 0x03, 0x15, 0xad, 0x3b, 0x6c, 0x15, 0x96, 0xb6, 0x0f, 0x0f,
0x8f, 0xda, 0x66, 0xab, 0xdf, 0xf9, 0xb4, 0x6d, 0x6d, 0xef, 0x1f, 0xf6, 0xda, 0x8d, 0x1b, 0x02,
0xbc, 0x7f, 0xb8, 0xdd, 0xda, 0xb7, 0x76, 0x0f, 0xcd, 0x6d, 0x05, 0xce, 0xb0, 0x35, 0x60, 0x66,
0xfb, 0xe0, 0xb0, 0xdf, 0x4e, 0xc0, 0xb3, 0xac, 0x01, 0xd5, 0x2d, 0xb3, 0xdd, 0xda, 0xde, 0x93,
0x90, 0x1c, 0x5b, 0x81, 0xc6, 0xee, 0x71, 0x77, 0xa7, 0xd3, 0xfd, 0xd8, 0xda, 0x6e, 0x75, 0xb7,
0xdb, 0xfb, 0xed, 0x9d, 0x46, 0x9e, 0xd5, 0xa0, 0xdc, 0xda, 0x6a, 0x75, 0x77, 0x0e, 0xbb, 0xed,
0x9d, 0x46, 0xc1, 0xf8, 0xe3, 0x0c, 0xac, 0xe2, 0x44, 0x0d, 0x67, 0x77, 0xe8, 0x5d, 0xa8, 0x0c,
0x3c, 0x6f, 0x22, 0x54, 0xa6, 0xf8, 0xb8, 0xd7, 0x41, 0x62, 0xf7, 0x11, 0x67, 0x3d, 0xf5, 0xfc,
0x01, 0x97, 0x1b, 0x14, 0x10, 0xb4, 0x2b, 0x20, 0x82, 0x40, 0x24, 0x85, 0x11, 0x06, 0xed, 0xcf,
0x0a, 0xc1, 0x08, 0x65, 0x0d, 0x16, 0x4e, 0x7c, 0x6e, 0x0f, 0xce, 0xe5, 0xd6, 0x94, 0x29, 0xf6,
0x4e, 0xac, 0xcc, 0x0f, 0xc4, 0x82, 0x8f, 0xf8, 0x10, 0xe9, 0xb3, 0x64, 0x2e, 0x4a, 0xf8, 0xb6,
0x04, 0x8b, 0xa3, 0xc2, 0x3e, 0xb1, 0xdd, 0xa1, 0xe7, 0xf2, 0xa1, 0xd4, 0x0e, 0x62, 0x80, 0x71,
0x04, 0x6b, 0xb3, 0xe3, 0x93, 0x9b, 0xf9, 0x03, 0x6d, 0x33, 0x93, 0x58, 0xbe, 0x71, 0x3d, 0x01,
0x69, 0x1b, 0xfb, 0xaf, 0xe7, 0x21, 0x2f, 0xc4, 0xb4, 0x6b, 0x25, 0x3a, 0x5d, 0xee, 0xce, 0xcd,
0xf9, 0x87, 0xd0, 0x66, 0x40, 0xe7, 0x37, 0x19, 0xa6, 0xca, 0x08, 0xc1, 0x73, 0x3b, 0xca, 0xf6,
0xf9, 0xe0, 0x42, 0x5a, 0xa6, 0x28, 0xdb, 0xe4, 0x83, 0x0b, 0x54, 0x83, 0xec, 0x90, 0xca, 0xd2,
0x66, 0x2c, 0x06, 0x76, 0x88, 0x25, 0x65, 0x16, 0x96, 0x2b, 0x46, 0x59, 0x58, 0xaa, 0x09, 0x45,
0xc7, 0x3d, 0xf1, 0xa6, 0xee, 0x10, 0xf7, 0x5e, 0xc9, 0x54, 0x49, 0x74, 0x47, 0x21, 0x9b, 0x10,
0xa7, 0x04, 0x6d, 0xb5, 0x92, 0x00, 0xf4, 0xc5, 0x39, 0xf1, 0x3e, 0x94, 0x83, 0x2b, 0x77, 0xa0,
0x6f, 0xb0, 0x15, 0x39, 0x3f, 0x62, 0xf4, 0x9b, 0xbd, 0x2b, 0x77, 0x80, 0xdb, 0xa9, 0x14, 0xc8,
0x5f, 0xec, 0x31, 0x94, 0x22, 0x03, 0x2e, 0xb1, 0xc7, 0x9b, 0x7a, 0x09, 0x65, 0xb5, 0x25, 0x3d,
0x39, 0x42, 0x65, 0x0f, 0x60, 0x01, 0xad, 0xac, 0x41, 0xb3, 0x8a, 0x85, 0x94, 0x30, 0x2e, 0xba,
0x81, 0x9e, 0x20, 0x3e, 0x44, 0x8b, 0xab, 0x29, 0xd1, 0x36, 0x9e, 0x40, 0x2d, 0x51, 0x97, 0xae,
0xf7, 0xd6, 0x48, 0xef, 0x7d, 0x43, 0xd7, 0x7b, 0x63, 0x36, 0x2d, 0x8b, 0xe9, 0x7a, 0xf0, 0xcf,
0x43, 0x49, 0x0d, 0x45, 0x6c, 0xa2, 0xe3, 0xee, 0x93, 0xee, 0xe1, 0x67, 0x5d, 0xab, 0xf7, 0x79,
0x77, 0xbb, 0x71, 0x83, 0x2d, 0x42, 0xa5, 0xb5, 0x8d, 0xfb, 0x12, 0x01, 0x19, 0x81, 0x72, 0xd4,
0xea, 0xf5, 0x22, 0x48, 0xd6, 0xd8, 0x85, 0xc6, 0x6c, 0x4f, 0x05, 0x4d, 0x86, 0x0a, 0x26, 0x6d,
0xd0, 0x31, 0x40, 0xe8, 0x2f, 0x64, 0x56, 0x26, 0x21, 0x99, 0x12, 0xc6, 0x63, 0x68, 0x88, 0x43,
0x47, 0x4c, 0x95, 0xee, 0x5d, 0x1a, 0x09, 0xc1, 0x4b, 0xb7, 0x43, 0x97, 0xcc, 0x0a, 0xc1, 0xb0,
0x29, 0xe3, 0x03, 0x58, 0xd2, 0x8a, 0xc5, 0xfa, 0xa6, 0x38, 0xc8, 0x66, 0xf5, 0x4d, 0xd4, 0x2e,
0x28, 0xc7, 0x58, 0x87, 0x55, 0x91, 0x6c, 0x5f, 0x70, 0x37, 0xec, 0x4d, 0x4f, 0xc8, 0x29, 0xe9,
0x78, 0xae, 0xd0, 0x3a, 0xca, 0x51, 0xce, 0xf5, 0x44, 0xbe, 0x29, 0x55, 0xd3, 0x2c, 0x92, 0xc6,
0x86, 0xd6, 0x02, 0x16, 0xdc, 0xc4, 0xbf, 0x09, 0x15, 0xb5, 0x1c, 0x81, 0xc4, 0xb4, 0x1e, 0xb5,
0xdb, 0xa6, 0x75, 0xd8, 0xdd, 0xef, 0x74, 0x05, 0xb7, 0x13, 0xd3, 0x8a, 0x80, 0xdd, 0x5d, 0x84,
0x64, 0x8c, 0x06, 0xd4, 0x3f, 0xe6, 0x61, 0xc7, 0x3d, 0xf5, 0xe4, 0x64, 0x18, 0x7f, 0x65, 0x01,
0x16, 0x23, 0x50, 0xac, 0xe2, 0x5e, 0x70, 0x3f, 0x70, 0x3c, 0x17, 0xa5, 0xd5, 0xb2, 0xa9, 0x92,
0x82, 0x3b, 0x49, 0x19, 0x1d, 0x8f, 0xc0, 0x15, 0xcc, 0x95, 0x52, 0x3d, 0x9e, 0x7f, 0x6f, 0xc3,
0xa2, 0x33, 0xe4, 0x6e, 0xe8, 0x84, 0x57, 0x56, 0xc2, 0xb8, 0x56, 0x57, 0x60, 0x79, 0x06, 0xae,
0x40, 0xc1, 0x1e, 0x39, 0xb6, 0x72, 0xf6, 0x52, 0x42, 0x40, 0x07, 0xde, 0xc8, 0xf3, 0x51, 0x72,
0x2d, 0x9b, 0x94, 0x60, 0x0f, 0x61, 0x45, 0x48, 0xd0, 0xba, 0xc5, 0x13, 0x19, 0x0c, 0xd9, 0xf9,
0x98, 0x3b, 0x1d, 0x1f, 0xc5, 0x56, 0x4f, 0x91, 0x23, 0x4e, 0x3e, 0x51, 0x42, 0x8a, 0x3a, 0x51,
0x01, 0x52, 0xc6, 0x96, 0xdc, 0xe9, 0xb8, 0x85, 0x39, 0x11, 0xfe, 0x23, 0x58, 0x15, 0xf8, 0x91,
0x70, 0x14, 0x95, 0x58, 0xc4, 0x12, 0xa2, 0xb2, 0x8e, 0xcc, 0x8b, 0xca, 0xdc, 0x82, 0x32, 0xf5,
0x4a, 0x90, 0x44, 0x81, 0x84, 0x70, 0xec, 0x0a, 0xf7, 0x83, 0x39, 0xbf, 0xec, 0x02, 0x1d, 0xe3,
0x33, 0x7e, 0x59, 0xcd, 0xb3, 0x5b, 0x9a, 0xf5, 0xec, 0x3e, 0x82, 0xd5, 0x13, 0x41, 0xa3, 0xe7,
0xdc, 0x1e, 0x72, 0xdf, 0x8a, 0x29, 0x9f, 0x94, 0x8d, 0x65, 0x91, 0xb9, 0x87, 0x79, 0xd1, 0x46,
0x11, 0x52, 0x8a, 0xe0, 0x1b, 0x7c, 0x68, 0x85, 0x9e, 0x85, 0xc2, 0x0b, 0x72, 0xa0, 0x92, 0x59,
0x23, 0x70, 0xdf, 0xdb, 0x16, 0xc0, 0x24, 0xde, 0x99, 0x6f, 0x4f, 0xce, 0xa5, 0x3a, 0x10, 0xe1,
0x7d, 0x2c, 0x80, 0xec, 0x15, 0x28, 0x8a, 0x3d, 0xe1, 0x72, 0x72, 0x73, 0x91, 0xc0, 0xad, 0x40,
0xec, 0x0d, 0x58, 0xc0, 0x36, 0x82, 0x66, 0x03, 0x37, 0x44, 0x35, 0xe6, 0xf4, 0x8e, 0x6b, 0xca,
0x3c, 0x21, 0x0a, 0x4e, 0x7d, 0x87, 0xd8, 0x50, 0xd9, 0xc4, 0xdf, 0xec, 0x87, 0x1a, 0x4f, 0x5b,
0xc6, 0xb2, 0x6f, 0xc8, 0xb2, 0x33, 0xa4, 0x78, 0x1d, 0x7b, 0xfb, 0x46, 0xb9, 0xd5, 0x8f, 0xf2,
0xa5, 0x4a, 0xa3, 0x6a, 0x7c, 0x08, 0x05, 0x9a, 0x1d, 0x41, 0x84, 0x38, 0x77, 0x19, 0x49, 0x84,
0x08, 0x6d, 0x42, 0xd1, 0xe5, 0xe1, 0x33, 0xcf, 0x7f, 0xaa, 0xcc, 0xcf, 0x32, 0x69, 0xfc, 0x04,
0x6d, 0x21, 0x91, 0xcf, 0x9e, 0xd4, 0x3a, 0x41, 0x1e, 0xb4, 0xbc, 0xc1, 0xb9, 0x2d, 0xcd, 0x33,
0x25, 0x04, 0xf4, 0xce, 0xed, 0x39, 0xf2, 0xc8, 0xce, 0xbb, 0xed, 0xdf, 0x80, 0xba, 0x8a, 0x12,
0x08, 0xac, 0x11, 0x3f, 0x0d, 0x25, 0xb9, 0x57, 0x65, 0x88, 0x40, 0xb0, 0xcf, 0x4f, 0x43, 0xe3,
0x00, 0x96, 0x24, 0x41, 0x1e, 0x4e, 0xb8, 0x6a, 0xfa, 0xbb, 0x69, 0xd2, 0x70, 0xe5, 0xd1, 0x72,
0xf2, 0x24, 0xa6, 0xe8, 0x87, 0x84, 0x88, 0x6c, 0x7c, 0x02, 0x4c, 0x3f, 0xa7, 0x65, 0x7d, 0x52,
0x26, 0x55, 0x56, 0x7b, 0xe5, 0xfc, 0x8a, 0x24, 0x5f, 0x67, 0x28, 0x66, 0x27, 0x98, 0x0e, 0x06,
0x2a, 0x7a, 0xa3, 0x64, 0xaa, 0xa4, 0xf1, 0x07, 0x19, 0x58, 0xc6, 0xca, 0x94, 0x34, 0x2f, 0xb9,
0xf0, 0x4f, 0xdd, 0x49, 0xb1, 0x3e, 0xba, 0x70, 0x44, 0x89, 0xaf, 0x6f, 0x11, 0xcd, 0xcf, 0x59,
0x44, 0xdf, 0x81, 0xc6, 0x90, 0x8f, 0x9c, 0x0b, 0xee, 0x5f, 0x45, 0x8a, 0x1c, 0xc9, 0xef, 0x8b,
0x0a, 0x2e, 0x75, 0x39, 0xe3, 0xef, 0x64, 0x60, 0x89, 0x44, 0x19, 0xd4, 0x8a, 0xe5, 0x44, 0x7d,
0xa4, 0xd4, 0x40, 0xc9, 0xaa, 0xe4, 0x98, 0xe2, 0x23, 0x1e, 0xa1, 0x84, 0xbc, 0x77, 0x43, 0xaa,
0x87, 0x12, 0xca, 0xbe, 0x8f, 0x1a, 0x88, 0x6b, 0x21, 0x50, 0x3a, 0x33, 0x6f, 0xa6, 0x08, 0x4f,
0x51, 0x71, 0xa1, 0x9e, 0xb8, 0x08, 0xda, 0x2a, 0x09, 0xbd, 0x54, 0x80, 0x8d, 0x5d, 0xa8, 0x25,
0x9a, 0x49, 0x18, 0x68, 0xab, 0x64, 0xa0, 0x9d, 0x73, 0x98, 0x64, 0xe7, 0x1d, 0x26, 0x57, 0xb0,
0x6c, 0x72, 0x7b, 0x78, 0xb5, 0xeb, 0xf9, 0x47, 0xc1, 0x49, 0xb8, 0x4b, 0xf2, 0xa1, 0xe0, 0xef,
0x91, 0x17, 0x30, 0x61, 0x05, 0x55, 0xce, 0x20, 0xa5, 0xec, 0xbe, 0x09, 0xf5, 0xd8, 0x5d, 0xa8,
0x59, 0xd2, 0x6a, 0x91, 0xc7, 0x10, 0x0d, 0x6a, 0x42, 0x51, 0x0c, 0x4e, 0x42, 0x69, 0x4b, 0xc3,
0xdf, 0xc6, 0x5f, 0xca, 0x03, 0x13, 0xd4, 0x3c, 0x43, 0x30, 0x33, 0x8e, 0xce, 0xec, 0x9c, 0xa3,
0xf3, 0x21, 0x30, 0x0d, 0x41, 0xf9, 0x5f, 0x73, 0x91, 0xff, 0xb5, 0x11, 0xe3, 0x4a, 0xf7, 0xeb,
0x43, 0x58, 0x91, 0xc2, 0x76, 0xb2, 0xab, 0x44, 0x1a, 0x8c, 0xa4, 0xee, 0x44, 0x7f, 0x95, 0x93,
0x53, 0x28, 0xef, 0x64, 0x2b, 0x43, 0x27, 0xa7, 0x52, 0xdb, 0x35, 0x02, 0x5c, 0x78, 0x21, 0x01,
0x16, 0xe7, 0x08, 0x50, 0x33, 0xdd, 0x94, 0x92, 0xa6, 0x1b, 0x03, 0x6a, 0xca, 0x95, 0x49, 0x11,
0x1c, 0x24, 0x59, 0x56, 0xa4, 0x3f, 0x13, 0xa3, 0x38, 0xee, 0x41, 0x43, 0xd9, 0x57, 0x22, 0xe3,
0x10, 0x45, 0x27, 0x48, 0xf3, 0xdc, 0xb6, 0x32, 0x11, 0x25, 0x4c, 0xf1, 0x95, 0x19, 0x53, 0xfc,
0xbb, 0xb0, 0x14, 0x08, 0xfa, 0xb5, 0xa6, 0xae, 0x0c, 0x51, 0xe2, 0x43, 0xd4, 0xc3, 0x4a, 0x66,
0x03, 0x33, 0x8e, 0x63, 0xf8, 0xbc, 0xe1, 0xa3, 0x96, 0x62, 0xf8, 0x78, 0x1c, 0x7b, 0xfd, 0x82,
0x73, 0x67, 0x8c, 0x42, 0x45, 0x1c, 0x76, 0x23, 0x27, 0xb8, 0x77, 0xee, 0x8c, 0x4d, 0xe5, 0x62,
0x16, 0x09, 0xe3, 0x7f, 0x67, 0xa0, 0x21, 0xe8, 0x20, 0xb1, 0xc5, 0xbe, 0x07, 0xc8, 0x0c, 0x5e,
0x72, 0x87, 0x55, 0x04, 0xae, 0xda, 0x60, 0x1f, 0x02, 0xee, 0x18, 0x4b, 0x28, 0x9d, 0x72, 0x7f,
0x35, 0x93, 0xfb, 0x2b, 0xe6, 0xa1, 0x7b, 0x37, 0x48, 0x39, 0x11, 0x10, 0xf6, 0x3d, 0x28, 0x0b,
0xc2, 0x44, 0x2a, 0x91, 0x51, 0x64, 0x4a, 0x34, 0x4b, 0xd9, 0x23, 0xa2, 0xe8, 0x44, 0x26, 0xd3,
0x1c, 0xb5, 0xf9, 0x14, 0x47, 0xad, 0xb6, 0x81, 0xf7, 0x00, 0x9e, 0xf0, 0xab, 0x7d, 0x6f, 0x80,
0x2a, 0xf1, 0x6d, 0x00, 0x41, 0xcb, 0xa7, 0xf6, 0xd8, 0x91, 0x16, 0x9d, 0x82, 0x59, 0x7e, 0xca,
0xaf, 0x76, 0x11, 0x20, 0x16, 0x52, 0x64, 0xc7, 0xbb, 0xb8, 0x60, 0x96, 0x9e, 0xf2, 0x2b, 0xda,
0xc2, 0x16, 0xd4, 0x9e, 0xf0, 0xab, 0x1d, 0x4e, 0x52, 0xa8, 0xe7, 0x0b, 0x22, 0xf2, 0xed, 0x67,
0x42, 0xec, 0x4c, 0x38, 0x59, 0x2b, 0xbe, 0xfd, 0xec, 0x09, 0xbf, 0x52, 0x0e, 0xdf, 0xa2, 0xc8,
0x1f, 0x79, 0x03, 0x79, 0x6e, 0xaa, 0x70, 0x91, 0xb8, 0x53, 0xe6, 0xc2, 0x53, 0xfc, 0x6d, 0xfc,
0x69, 0x06, 0x6a, 0xa2, 0xff, 0xc8, 0x96, 0xc5, 0x92, 0xa9, 0xa8, 0xa3, 0x4c, 0x1c, 0x75, 0xf4,
0x48, 0x72, 0x35, 0xe2, 0xf1, 0xd9, 0xeb, 0x79, 0x3c, 0xae, 0x0d, 0x31, 0xf8, 0xf7, 0xa1, 0x4c,
0xdb, 0x52, 0xec, 0xf3, 0x5c, 0x62, 0x81, 0x13, 0x03, 0x32, 0x4b, 0x88, 0xf6, 0x84, 0x82, 0x1c,
0x34, 0xeb, 0x20, 0x4d, 0x71, 0xd9, 0x8f, 0x6c, 0x82, 0x29, 0xcb, 0x50, 0xb8, 0x26, 0xc8, 0x41,
0x37, 0xbd, 0x2d, 0xcc, 0x99, 0xde, 0x0e, 0xa1, 0x24, 0x96, 0x1a, 0x07, 0x9b, 0x52, 0x69, 0x26,
0xad, 0x52, 0x21, 0x09, 0xd8, 0xe2, 0x50, 0x10, 0x8c, 0x2e, 0x2b, 0x25, 0x01, 0x3b, 0xe0, 0x47,
0xc8, 0xec, 0x32, 0x50, 0xd1, 0x76, 0x00, 0x5a, 0x2f, 0xa3, 0xf9, 0xa2, 0xed, 0x92, 0x24, 0xf1,
0xc4, 0x84, 0xef, 0xdd, 0x30, 0x6b, 0x83, 0xc4, 0x0a, 0x6c, 0x4a, 0x5a, 0xc5, 0x92, 0xd9, 0x44,
0x80, 0x94, 0xea, 0xb8, 0x22, 0x50, 0xf1, 0x7b, 0x6b, 0x01, 0xf2, 0x02, 0xd5, 0xf8, 0x08, 0x96,
0xb4, 0x6e, 0x90, 0x1d, 0xe0, 0x65, 0x47, 0x68, 0xfc, 0x52, 0x54, 0x58, 0xb4, 0x41, 0xfe, 0x25,
0x15, 0x30, 0xc2, 0x87, 0x34, 0x70, 0x19, 0x98, 0x42, 0x20, 0x81, 0xf6, 0xd2, 0x41, 0x0c, 0xbf,
0x02, 0xcb, 0x5a, 0xed, 0xbb, 0x8e, 0x6b, 0x8f, 0x9c, 0x9f, 0xe0, 0x81, 0x1f, 0x38, 0x67, 0xee,
0x4c, 0xfd, 0x04, 0xfa, 0x5a, 0xf5, 0xff, 0xdd, 0x2c, 0xac, 0xc8, 0x06, 0x30, 0x04, 0xd0, 0x11,
0x52, 0xdc, 0x41, 0x70, 0xc6, 0xbe, 0x07, 0x35, 0x31, 0x37, 0x96, 0xcf, 0xcf, 0x9c, 0x20, 0xe4,
0xca, 0xaf, 0x95, 0xc2, 0xb8, 0xc4, 0x61, 0x2e, 0x50, 0x4d, 0x89, 0xc9, 0x3e, 0x82, 0x0a, 0x16,
0x25, 0x3b, 0x8b, 0x5c, 0x88, 0xe6, 0x7c, 0x41, 0x9a, 0xe8, 0xbd, 0x1b, 0x26, 0x04, 0xf1, 0xb4,
0x7f, 0x04, 0x15, 0x5c, 0xc3, 0x0b, 0x9c, 0xc8, 0x19, 0x56, 0x35, 0x37, 0xd1, 0xa2, 0xf0, 0x24,
0x9e, 0xf6, 0x16, 0xd4, 0x88, 0x59, 0xc9, 0x79, 0x92, 0xa1, 0x45, 0x1b, 0xf3, 0xc5, 0xd5, 0x4c,
0x8a, 0xce, 0x4f, 0xb4, 0xf4, 0x56, 0x19, 0x8a, 0xa1, 0xef, 0x9c, 0x9d, 0x71, 0xdf, 0x58, 0x8b,
0xa6, 0x46, 0x70, 0x61, 0xde, 0x0b, 0xf9, 0x44, 0xc8, 0xe6, 0xc6, 0xbf, 0xcf, 0x40, 0x45, 0xf2,
0xd5, 0x9f, 0xda, 0x99, 0xb6, 0xa1, 0xc5, 0xe6, 0x92, 0x49, 0x27, 0x0e, 0xc5, 0x7d, 0x1b, 0x16,
0xc7, 0x42, 0x4e, 0x17, 0x7a, 0x64, 0xc2, 0x93, 0x56, 0x57, 0x60, 0x29, 0x26, 0x6f, 0xc2, 0x32,
0x4a, 0xcd, 0x81, 0x15, 0x3a, 0x23, 0x4b, 0x65, 0xca, 0x38, 0xd8, 0x25, 0xca, 0xea, 0x3b, 0xa3,
0x03, 0x99, 0x21, 0x84, 0xc7, 0x20, 0xb4, 0xcf, 0xb8, 0xdc, 0xdb, 0x94, 0x30, 0x9a, 0xb0, 0x36,
0xa3, 0x42, 0x2a, 0xfd, 0xf8, 0xff, 0x2e, 0xc1, 0xfa, 0x5c, 0x96, 0xd4, 0x93, 0x23, 0x0f, 0xd2,
0xc8, 0x19, 0x9f, 0x78, 0x91, 0x7d, 0x35, 0xa3, 0x79, 0x90, 0xf6, 0x45, 0x8e, 0xb2, 0xaf, 0x72,
0x58, 0x55, 0x04, 0x89, 0x06, 0xd2, 0x48, 0xcb, 0xcc, 0xa2, 0x0e, 0xf4, 0x7e, 0xf2, 0x10, 0x9b,
0x6d, 0x4e, 0xc1, 0x75, 0xd1, 0x68, 0x79, 0x32, 0x07, 0x0b, 0xd8, 0xaf, 0x41, 0x33, 0xa2, 0x7b,
0x29, 0xb6, 0x6b, 0x2a, 0xb3, 0x68, 0xe9, 0xbd, 0x17, 0xb4, 0x94, 0x30, 0xee, 0xa1, 0xec, 0xb4,
0xa6, 0xb6, 0x0c, 0x55, 0x18, 0xb5, 0x75, 0x01, 0xaf, 0xaa, 0xb6, 0x50, 0x0c, 0x9f, 0x6f, 0x31,
0xff, 0x52, 0x63, 0x43, 0xc3, 0x65, 0xa2, 0x59, 0xf3, 0x96, 0xac, 0x38, 0xca, 0xd2, 0xdb, 0x3d,
0x87, 0xb5, 0x67, 0xb6, 0x13, 0xaa, 0x31, 0x6a, 0x1a, 0x7b, 0x01, 0xdb, 0x7b, 0xf4, 0x82, 0xf6,
0x3e, 0xa3, 0xc2, 0x09, 0xc5, 0x64, 0xe5, 0xd9, 0x3c, 0x30, 0xd8, 0xf8, 0x47, 0x39, 0xa8, 0x27,
0x6b, 0x11, 0x8c, 0x45, 0x1e, 0x36, 0x4a, 0xde, 0x94, 0x42, 0xb0, 0xb4, 0xfd, 0x77, 0x49, 0xce,
0x9c, 0xf7, 0x4a, 0x64, 0x53, 0xbc, 0x12, 0xba, 0x33, 0x20, 0xf7, 0x22, 0xef, 0x6b, 0xfe, 0xa5,
0xbc, 0xaf, 0x85, 0x34, 0xef, 0xeb, 0xf5, 0x2e, 0xbb, 0x85, 0x9f, 0xca, 0x65, 0x57, 0x7c, 0xae,
0xcb, 0x4e, 0x73, 0x34, 0x96, 0xae, 0x31, 0xe1, 0x6b, 0xae, 0xc7, 0x14, 0x97, 0x5d, 0xf9, 0x6b,
0xb8, 0xec, 0x36, 0xfe, 0x34, 0x03, 0x6c, 0x7e, 0x77, 0xb0, 0x8f, 0xc9, 0xe1, 0xe3, 0xf2, 0x91,
0xe4, 0xdc, 0xdf, 0x7a, 0xb9, 0x1d, 0xa6, 0x08, 0x42, 0x95, 0x66, 0x0f, 0x60, 0x59, 0x8f, 0xd6,
0xd7, 0xb5, 0xf6, 0x9a, 0xc9, 0xf4, 0xac, 0xd8, 0xb6, 0xa3, 0xb9, 0xba, 0xf3, 0x2f, 0x74, 0x75,
0x17, 0x5e, 0xe8, 0xea, 0x5e, 0x48, 0xba, 0xba, 0x37, 0xfe, 0x53, 0x06, 0x96, 0x53, 0x88, 0xf8,
0x9b, 0x1b, 0xb3, 0xa0, 0xbd, 0x04, 0x5b, 0xcb, 0x4a, 0xda, 0xd3, 0x39, 0xda, 0xbe, 0xb2, 0x07,
0x8a, 0xa5, 0x08, 0xe4, 0x49, 0x75, 0xff, 0x45, 0xdc, 0x25, 0x2e, 0x61, 0xea, 0xc5, 0x37, 0x7e,
0x3b, 0x0b, 0x15, 0x2d, 0x53, 0xcc, 0x22, 0x91, 0xac, 0x16, 0x61, 0x44, 0x92, 0x21, 0xda, 0x1c,
0xee, 0x80, 0xf4, 0x7a, 0x50, 0x3e, 0x6d, 0x2e, 0x29, 0x06, 0x22, 0xc2, 0x26, 0x2c, 0x2b, 0x67,
0x1c, 0x8f, 0x83, 0x0e, 0xe5, 0x59, 0xb3, 0x24, 0x5d, 0x72, 0x3c, 0x8a, 0x61, 0x64, 0x0f, 0x94,
0x3a, 0x18, 0xaf, 0x1d, 0x92, 0x3a, 0xb9, 0x14, 0x96, 0x68, 0x83, 0xa8, 0x45, 0x14, 0x74, 0xfe,
0x3e, 0xac, 0xaa, 0xed, 0x91, 0x2c, 0x41, 0x5e, 0x06, 0x26, 0x37, 0x87, 0x5e, 0xe4, 0x87, 0x70,
0x7b, 0xa6, 0x4f, 0x33, 0x45, 0x29, 0x3a, 0xf6, 0x66, 0xa2, 0x77, 0x7a, 0x0d, 0x1b, 0x5f, 0x42,
0x2d, 0xc1, 0x28, 0xbf, 0xb9, 0x25, 0x9f, 0xb5, 0xf3, 0xd0, 0x8c, 0xea, 0x76, 0x9e, 0x8d, 0xff,
0x95, 0x03, 0x36, 0xcf, 0xab, 0x7f, 0x96, 0x5d, 0x98, 0x27, 0xcc, 0x5c, 0x0a, 0x61, 0xfe, 0x7f,
0x93, 0x1f, 0xde, 0x85, 0x25, 0x9f, 0x0f, 0xbc, 0x0b, 0xee, 0x6b, 0x1e, 0x55, 0xda, 0x9c, 0x8d,
0x28, 0x43, 0xf5, 0xe2, 0xc3, 0xd9, 0xc8, 0x8e, 0x52, 0xe2, 0xc2, 0x89, 0x26, 0x40, 0xcd, 0x04,
0x78, 0x1c, 0xc3, 0x82, 0xed, 0x0e, 0xce, 0x3d, 0x5f, 0xf2, 0xc1, 0x9f, 0xfb, 0xda, 0xc7, 0xe7,
0x66, 0x0b, 0xcb, 0xa3, 0xd4, 0x66, 0xca, 0xca, 0x8c, 0xf7, 0xa1, 0xa2, 0x81, 0x59, 0x19, 0x0a,
0xfb, 0x9d, 0x83, 0xad, 0xc3, 0xc6, 0x0d, 0x56, 0x83, 0xb2, 0xd9, 0xde, 0x3e, 0xfc, 0xb4, 0x6d,
0xb6, 0x77, 0x1a, 0x19, 0x56, 0x82, 0xfc, 0xfe, 0x61, 0xaf, 0xdf, 0xc8, 0x1a, 0x1b, 0xd0, 0x94,
0x35, 0xce, 0x3b, 0x35, 0x7e, 0x23, 0x1f, 0x99, 0x0b, 0x31, 0x53, 0xaa, 0xe8, 0xdf, 0x86, 0xaa,
0x2e, 0xde, 0x48, 0x8a, 0x98, 0x71, 0xea, 0x0b, 0xe5, 0xdc, 0xd3, 0x78, 0xf5, 0x36, 0x90, 0x4b,
0x77, 0x18, 0x15, 0xcb, 0x26, 0xe4, 0xd6, 0x14, 0xf7, 0x21, 0x2a, 0x3f, 0x09, 0x32, 0xfc, 0x73,
0x50, 0x4f, 0x1a, 0xf0, 0x25, 0x47, 0x4a, 0x53, 0x38, 0x45, 0xe9, 0x84, 0x45, 0x9f, 0xfd, 0x10,
0x1a, 0xb3, 0x0e, 0x00, 0x29, 0x3c, 0x5f, 0x53, 0x7e, 0xd1, 0x49, 0xfa, 0x04, 0xd8, 0x1e, 0xac,
0xa4, 0x09, 0x78, 0x48, 0x1f, 0xd7, 0x1b, 0x29, 0xd8, 0xbc, 0x10, 0xc7, 0xbe, 0x2b, 0x1d, 0x41,
0x05, 0x5c, 0xfe, 0x37, 0x92, 0xed, 0x6b, 0x93, 0xbd, 0x49, 0xff, 0x34, 0x97, 0xd0, 0x05, 0x40,
0x0c, 0x63, 0x0d, 0xa8, 0x1e, 0x1e, 0xb5, 0xbb, 0xd6, 0xf6, 0x5e, 0xab, 0xdb, 0x6d, 0xef, 0x37,
0x6e, 0x30, 0x06, 0x75, 0x74, 0x66, 0xef, 0x44, 0xb0, 0x8c, 0x80, 0x49, 0x87, 0x9c, 0x82, 0x65,
0xd9, 0x0a, 0x34, 0x3a, 0xdd, 0x19, 0x68, 0x8e, 0x35, 0x61, 0xe5, 0xa8, 0x4d, 0xfe, 0xef, 0x44,
0xbd, 0x79, 0xa1, 0x34, 0xc8, 0xe1, 0x0a, 0xa5, 0xe1, 0x33, 0x7b, 0x34, 0xe2, 0xa1, 0xdc, 0x07,
0x4a, 0x96, 0xfe, 0xcd, 0x0c, 0xac, 0xce, 0x64, 0xc4, 0x77, 0x43, 0x48, 0x92, 0x4e, 0xca, 0xd0,
0x55, 0x04, 0xaa, 0xdd, 0xf4, 0x2e, 0x2c, 0x45, 0x86, 0xa7, 0x99, 0x53, 0xa9, 0x11, 0x65, 0x28,
0xe4, 0x07, 0xb0, 0xac, 0xd9, 0xaf, 0x66, 0x78, 0x05, 0xd3, 0xb2, 0x64, 0x01, 0x63, 0x3d, 0x8a,
0xc1, 0x9f, 0xe9, 0xf5, 0x10, 0xd6, 0x66, 0x33, 0x62, 0x3f, 0x59, 0xb2, 0xbf, 0x2a, 0xc9, 0x1e,
0xce, 0x10, 0x42, 0xb2, 0xb7, 0xfa, 0x82, 0xab, 0xe6, 0x7f, 0x67, 0x01, 0xd8, 0x27, 0x53, 0xee,
0x5f, 0xe1, 0xdd, 0x8f, 0xe0, 0x45, 0x01, 0x8e, 0xca, 0xd2, 0x92, 0x7d, 0xa9, 0xfb, 0x5d, 0x69,
0xf7, 0xab, 0xf2, 0x2f, 0xbe, 0x5f, 0x55, 0x78, 0xd1, 0xfd, 0xaa, 0xd7, 0xa1, 0xe6, 0x9c, 0xb9,
0x9e, 0x60, 0x85, 0x42, 0x12, 0x0e, 0x9a, 0x0b, 0x77, 0x73, 0xf7, 0xaa, 0x66, 0x55, 0x02, 0x85,
0x1c, 0x1c, 0xb0, 0x8f, 0x62, 0x24, 0x3e, 0x3c, 0xc3, 0x3b, 0x86, 0x3a, 0x13, 0x6c, 0x0f, 0xcf,
0xb8, 0x34, 0x2c, 0xa1, 0xa6, 0xa1, 0x0a, 0x0b, 0x78, 0xc0, 0xde, 0x80, 0x7a, 0xe0, 0x4d, 0x85,
0x62, 0xa1, 0xa6, 0x81, 0x1c, 0x65, 0x55, 0x82, 0x1e, 0x29, 0xb7, 0xe9, 0xf2, 0x34, 0xe0, 0xd6,
0xd8, 0x09, 0x02, 0x21, 0x9e, 0x0d, 0x3c, 0x37, 0xf4, 0xbd, 0x91, 0xf4, 0x7d, 0x2d, 0x4d, 0x03,
0x7e, 0x40, 0x39, 0xdb, 0x94, 0xc1, 0xbe, 0x13, 0x77, 0x69, 0x62, 0x3b, 0x7e, 0xd0, 0x04, 0xec,
0x92, 0x1a, 0x29, 0xca, 0xef, 0xb6, 0xe3, 0x47, 0x7d, 0x11, 0x89, 0x60, 0xe6, 0xde, 0x57, 0x65,
0xf6, 0xde, 0xd7, 0xaf, 0xa6, 0xdf, 0xfb, 0xaa, 0x61, 0xd5, 0x0f, 0x65, 0xd5, 0xf3, 0x4b, 0xfc,
0xb5, 0xae, 0x7f, 0xcd, 0x5f, 0x67, 0xab, 0x7f, 0x9d, 0xeb, 0x6c, 0x8b, 0x69, 0xd7, 0xd9, 0xde,
0x87, 0x0a, 0x5e, 0x34, 0xb2, 0xce, 0x1d, 0x21, 0xc3, 0x91, 0x2f, 0xaf, 0xa1, 0xdf, 0x44, 0xda,
0x73, 0xdc, 0xd0, 0x04, 0x5f, 0xfd, 0x0c, 0xe6, 0x6f, 0x96, 0x2d, 0xfd, 0x0c, 0x6f, 0x96, 0xc9,
0x0b, 0x51, 0x9b, 0x50, 0x52, 0xeb, 0xc4, 0x18, 0xe4, 0x4f, 0x7d, 0x6f, 0xac, 0x7c, 0x1c, 0xe2,
0x37, 0xab, 0x43, 0x36, 0xf4, 0x64, 0xe1, 0x6c, 0xe8, 0x19, 0xbf, 0x0c, 0x15, 0x8d, 0xd4, 0xd8,
0x6b, 0x64, 0x97, 0x14, 0xba, 0x99, 0x94, 0x2d, 0x69, 0x16, 0xcb, 0x12, 0xda, 0x19, 0x0a, 0x7e,
0x33, 0x74, 0x7c, 0x8e, 0x77, 0x40, 0x2d, 0x9f, 0x5f, 0x70, 0x3f, 0x50, 0x3e, 0xa7, 0x46, 0x94,
0x61, 0x12, 0xdc, 0xf8, 0x15, 0x58, 0x4e, 0xac, 0xad, 0x64, 0x11, 0x6f, 0xc0, 0x02, 0xce, 0x9b,
0x0a, 0x1a, 0x48, 0xde, 0xf0, 0x92, 0x79, 0x78, 0xdf, 0x95, 0xdc, 0x65, 0xd6, 0xc4, 0xf7, 0x4e,
0xb0, 0x91, 0x8c, 0x59, 0x91, 0xb0, 0x23, 0xdf, 0x3b, 0x31, 0xfe, 0x28, 0x07, 0xb9, 0x3d, 0x6f,
0xa2, 0x07, 0xb1, 0x65, 0xe6, 0x82, 0xd8, 0xa4, 0xc2, 0x69, 0x45, 0x0a, 0xa5, 0x94, 0xd9, 0xd1,
0x51, 0xa4, 0x94, 0xca, 0x7b, 0x50, 0x17, 0x7c, 0x22, 0xf4, 0x84, 0xc6, 0xfe, 0xcc, 0xf6, 0x49,
0x20, 0xce, 0xd1, 0xe6, 0xb3, 0xc7, 0x61, 0xdf, 0xdb, 0x25, 0x38, 0x5b, 0x81, 0x5c, 0xa4, 0xbe,
0x60, 0xb6, 0x48, 0xb2, 0x35, 0x58, 0xc0, 0x68, 0xe6, 0x2b, 0xe9, 0xf4, 0x96, 0x29, 0xf6, 0x2d,
0x58, 0x4e, 0xd6, 0x4b, 0xac, 0x48, 0xca, 0x46, 0x7a, 0xc5, 0xc8, 0x93, 0x6e, 0x82, 0xe0, 0x23,
0x84, 0x23, 0x83, 0x6b, 0x4e, 0x39, 0xc7, 0x2c, 0x8d, 0xe9, 0x95, 0x12, 0x4c, 0xef, 0x0e, 0x54,
0xc2, 0xd1, 0x85, 0x35, 0xb1, 0xaf, 0x46, 0x9e, 0x3d, 0x94, 0xfb, 0x1b, 0xc2, 0xd1, 0xc5, 0x11,
0x41, 0xd8, 0x03, 0x80, 0xf1, 0x64, 0x22, 0xf7, 0x1e, 0x3a, 0x3f, 0x62, 0x52, 0x3e, 0x38, 0x3a,
0x22, 0x92, 0x33, 0xcb, 0xe3, 0xc9, 0x84, 0x7e, 0xb2, 0x1d, 0xa8, 0xa7, 0xde, 0xd3, 0xbc, 0xad,
0x82, 0x6f, 0xbd, 0xc9, 0x66, 0xca, 0xe6, 0xac, 0x0d, 0x74, 0xd8, 0xc6, 0x0f, 0x81, 0xfd, 0x19,
0x6f, 0x4b, 0xf6, 0xa1, 0x1c, 0xf5, 0x4f, 0xbf, 0x6c, 0x88, 0xe1, 0xf4, 0x95, 0xc4, 0x65, 0xc3,
0xd6, 0x70, 0xe8, 0x0b, 0xbe, 0x48, 0x07, 0x66, 0xc4, 0xf2, 0x41, 0x3b, 0x31, 0x5b, 0xc4, 0xf7,
0x8d, 0xff, 0x96, 0x81, 0x02, 0xdd, 0x7c, 0x7c, 0x0b, 0x16, 0x09, 0x3f, 0x0a, 0x08, 0x94, 0xae,
0x72, 0x3a, 0x77, 0xfb, 0x32, 0x16, 0x50, 0x6c, 0x0b, 0xed, 0x36, 0x78, 0x36, 0x5a, 0x79, 0xed,
0x46, 0xf8, 0x1d, 0x28, 0x47, 0x4d, 0x6b, 0xa4, 0x53, 0x52, 0x2d, 0xb3, 0x57, 0x21, 0x7f, 0xee,
0x4d, 0x94, 0xe5, 0x07, 0xe2, 0x99, 0x34, 0x11, 0x1e, 0xf7, 0x45, 0xb4, 0x41, 0x9d, 0x97, 0x16,
0x8b, 0xa8, 0x11, 0x24, 0x83, 0xf9, 0x31, 0x2e, 0xa4, 0x8c, 0xf1, 0x18, 0x16, 0x05, 0x1f, 0xd0,
0x62, 0x5a, 0xae, 0x3f, 0x34, 0xdf, 0x11, 0x12, 0xde, 0x60, 0x34, 0x1d, 0x72, 0xdd, 0xf6, 0x86,
0x01, 0x70, 0x12, 0xae, 0x24, 0x6b, 0xe3, 0x77, 0x32, 0xc4, 0x5f, 0x44, 0xbd, 0xec, 0x1e, 0xe4,
0xc5, 0xf9, 0x36, 0x63, 0x89, 0x8f, 0xee, 0x35, 0x08, 0x3c, 0x13, 0x31, 0xc4, 0xd2, 0xa1, 0xd7,
0x5e, 0xaf, 0xbd, 0x66, 0x56, 0xdc, 0xe9, 0x38, 0x32, 0x5d, 0xbd, 0xa9, 0x86, 0x35, 0x63, 0xf6,
0xa1, 0xd1, 0x47, 0xdb, 0x74, 0x53, 0x8b, 0xa4, 0xcb, 0x27, 0x4e, 0x4c, 0x25, 0x05, 0x0e, 0xcf,
0xb8, 0x16, 0x41, 0xf7, 0x7b, 0x59, 0xa8, 0x25, 0x7a, 0x84, 0xa1, 0x84, 0xe2, 0x00, 0x20, 0xc7,
0x92, 0x5c, 0x6f, 0x10, 0x20, 0x29, 0xa8, 0x6b, 0xf3, 0x94, 0x4d, 0xcc, 0x53, 0x14, 0x9c, 0x93,
0xd3, 0x83, 0x73, 0x1e, 0x42, 0x39, 0x7e, 0x05, 0x20, 0xd9, 0x25, 0xd1, 0x9e, 0xba, 0xdd, 0x11,
0x23, 0xc5, 0xe1, 0x3c, 0x05, 0x3d, 0x9c, 0xe7, 0x07, 0x5a, 0xf4, 0xc7, 0x02, 0x56, 0x63, 0xa4,
0xcd, 0xe8, 0xcf, 0x24, 0xf6, 0xc3, 0xf8, 0x08, 0x2a, 0x5a, 0xe7, 0xf5, 0x28, 0x8f, 0x4c, 0x22,
0xca, 0x23, 0xba, 0x9d, 0x95, 0x8d, 0x6f, 0x67, 0x19, 0x7f, 0x39, 0x0b, 0x35, 0xb1, 0xbf, 0x1c,
0xf7, 0xec, 0xc8, 0x1b, 0x39, 0x03, 0x74, 0x34, 0x45, 0x3b, 0x4c, 0x0a, 0x5a, 0x6a, 0x9f, 0xc9,
0x2d, 0x46, 0x72, 0x96, 0x7e, 0x35, 0x95, 0x98, 0x74, 0x74, 0x35, 0xd5, 0x80, 0x9a, 0x60, 0x8c,
0xe8, 0x32, 0x8a, 0xdf, 0x12, 0x30, 0x2b, 0xa7, 0x9c, 0x6f, 0xd9, 0x01, 0x71, 0xc8, 0x6f, 0xc1,
0xb2, 0xc0, 0xc1, 0x5b, 0x79, 0x63, 0x67, 0x34, 0x72, 0x08, 0x93, 0x0c, 0x4d, 0x8d, 0x53, 0xce,
0x4d, 0x3b, 0xe4, 0x07, 0x22, 0x43, 0x3e, 0x3d, 0x50, 0x1a, 0x3a, 0x81, 0x7d, 0x12, 0x07, 0x7c,
0x46, 0x69, 0xf4, 0x2c, 0xdb, 0x97, 0x9a, 0x67, 0x99, 0x0c, 0x10, 0x95, 0xb1, 0x7d, 0x19, 0x79,
0x96, 0x67, 0x28, 0xa9, 0x38, 0x4b, 0x49, 0xc6, 0xbf, 0xcd, 0x42, 0x45, 0x23, 0xcb, 0x97, 0x39,
0x5d, 0x6f, 0xcf, 0x39, 0x06, 0xcb, 0xba, 0x0f, 0xf0, 0xf5, 0x64, 0x93, 0x18, 0xfb, 0x42, 0x8f,
0x1c, 0x68, 0x04, 0x7c, 0x0b, 0xca, 0x62, 0xd7, 0xbd, 0x8f, 0x26, 0x58, 0xf9, 0xf4, 0x07, 0x02,
0x8e, 0xa6, 0x27, 0x2a, 0xf3, 0x11, 0x66, 0x16, 0xe2, 0xcc, 0x47, 0x22, 0xf3, 0x79, 0x21, 0xd8,
0x1f, 0x42, 0x55, 0xd6, 0x8a, 0x6b, 0x8a, 0xc3, 0x8d, 0x77, 0x7d, 0x62, 0xbd, 0xcd, 0x0a, 0x35,
0x47, 0x8b, 0x2f, 0x0b, 0x3e, 0x52, 0x05, 0x4b, 0x2f, 0x2a, 0xf8, 0x88, 0x12, 0xc6, 0x6e, 0x14,
0xd5, 0x8e, 0x71, 0x57, 0x8a, 0x8f, 0x3d, 0x80, 0x65, 0xc5, 0xae, 0xa6, 0xae, 0xed, 0xba, 0xde,
0xd4, 0x1d, 0x70, 0x75, 0x41, 0x8b, 0xc9, 0xac, 0xe3, 0x38, 0xc7, 0x18, 0x46, 0xb7, 0x7d, 0x29,
0x7e, 0xeb, 0x3e, 0x14, 0x48, 0x2e, 0x27, 0xe1, 0x23, 0x9d, 0x71, 0x11, 0x0a, 0xbb, 0x07, 0x05,
0x12, 0xcf, 0xb3, 0xd7, 0x32, 0x1b, 0x42, 0x30, 0x5a, 0xc0, 0x44, 0xc1, 0x03, 0x1e, 0xfa, 0xce,
0x20, 0x88, 0xef, 0x7e, 0x15, 0x84, 0xfe, 0x49, 0x6d, 0xc5, 0x96, 0xdb, 0x18, 0x13, 0x75, 0x54,
0xc2, 0x11, 0x07, 0xd3, 0x72, 0xa2, 0x0e, 0x29, 0x2e, 0x8d, 0x60, 0xed, 0x84, 0x87, 0xcf, 0x38,
0x77, 0x5d, 0x21, 0x0c, 0x0d, 0xb8, 0x1b, 0xfa, 0xf6, 0x48, 0x2c, 0x12, 0x8d, 0xe0, 0xf1, 0x5c,
0xad, 0xb1, 0x0d, 0x64, 0x2b, 0x2e, 0xb8, 0x1d, 0x95, 0x23, 0xde, 0xb1, 0x7a, 0x92, 0x96, 0xb7,
0xf1, 0x4b, 0xb0, 0x71, 0x7d, 0xa1, 0x94, 0x7b, 0x9f, 0xf7, 0x92, 0x5c, 0x25, 0xf2, 0x03, 0x8e,
0x3c, 0x3b, 0xa4, 0xde, 0xe8, 0x9c, 0xa5, 0x0b, 0x15, 0x2d, 0x27, 0x3e, 0xfb, 0x33, 0x28, 0xdc,
0x51, 0x42, 0x9c, 0x48, 0xae, 0xe7, 0x8f, 0xd1, 0xef, 0x36, 0xb4, 0xe2, 0xda, 0x33, 0xe6, 0x62,
0x0c, 0xc7, 0xeb, 0xef, 0xc6, 0x26, 0x2c, 0xa2, 0x64, 0xaf, 0x1d, 0x74, 0xcf, 0x13, 0x06, 0x8d,
0x15, 0x60, 0x5d, 0xe2, 0x5d, 0x7a, 0xbc, 0xe7, 0x7f, 0xce, 0x41, 0x45, 0x03, 0x8b, 0xd3, 0x08,
0x03, 0x00, 0xad, 0xa1, 0x63, 0x8f, 0xb9, 0x72, 0x72, 0xd6, 0xcc, 0x1a, 0x42, 0x77, 0x24, 0x50,
0x9c, 0xc5, 0xf6, 0xc5, 0x99, 0xe5, 0x4d, 0x43, 0x6b, 0xc8, 0xcf, 0x7c, 0xae, 0x7a, 0x59, 0xb5,
0x2f, 0xce, 0x0e, 0xa7, 0xe1, 0x0e, 0xc2, 0x04, 0x96, 0xe0, 0x25, 0x1a, 0x96, 0x8c, 0x59, 0x1b,
0xdb, 0x97, 0x31, 0x96, 0x0c, 0x9c, 0x24, 0xca, 0xcc, 0x47, 0x81, 0x93, 0xa4, 0x2d, 0xce, 0x1e,
0xa0, 0x85, 0xf9, 0x03, 0xf4, 0x3b, 0xb0, 0x46, 0x07, 0xa8, 0x64, 0xcd, 0xd6, 0xcc, 0x4e, 0x5e,
0xc1, 0x5c, 0x39, 0x48, 0x4d, 0xec, 0x6d, 0x88, 0x11, 0x28, 0xb6, 0x14, 0x38, 0x3f, 0x21, 0x46,
0x96, 0x31, 0xc5, 0xc8, 0x64, 0xe5, 0x3d, 0xe7, 0x27, 0x5c, 0x60, 0x62, 0x74, 0x8c, 0x8e, 0x29,
0x2f, 0x58, 0x8c, 0x1d, 0x77, 0x16, 0xd3, 0xbe, 0x4c, 0x62, 0x96, 0x25, 0xa6, 0x7d, 0xa9, 0x63,
0x3e, 0x86, 0xf5, 0x31, 0x1f, 0x3a, 0x76, 0xb2, 0x5a, 0x2b, 0x16, 0xdc, 0x56, 0x28, 0x5b, 0x2b,
0xd3, 0x23, 0xc5, 0x5d, 0xcc, 0xc6, 0x4f, 0xbc, 0xf1, 0x89, 0x43, 0x32, 0x0b, 0xc5, 0xeb, 0xe4,
0xcd, 0xba, 0x3b, 0x1d, 0xff, 0x18, 0xc1, 0xa2, 0x48, 0x60, 0xd4, 0xa0, 0xd2, 0x0b, 0xbd, 0x89,
0x5a, 0xe6, 0x3a, 0x54, 0x29, 0x29, 0x6f, 0x3d, 0xde, 0x82, 0x9b, 0xc8, 0x12, 0xfa, 0xde, 0xc4,
0x1b, 0x79, 0x67, 0x57, 0x09, 0x3b, 0xde, 0x7f, 0xc8, 0xc0, 0x72, 0x22, 0x57, 0xb2, 0xd7, 0xef,
0x10, 0x3f, 0x8b, 0xae, 0xae, 0xd1, 0x1e, 0x5c, 0xd2, 0xf6, 0x20, 0x21, 0x12, 0x33, 0x53, 0xd7,
0xd9, 0x5a, 0xf1, 0xf3, 0x0c, 0xaa, 0x20, 0xb1, 0x94, 0xe6, 0x3c, 0x4b, 0x91, 0xe5, 0xd5, 0xc3,
0x0d, 0xaa, 0x8a, 0x9f, 0x93, 0x97, 0x60, 0x86, 0x72, 0xc8, 0xb9, 0xe4, 0x4d, 0x02, 0xdd, 0xe6,
0xa7, 0x7a, 0x10, 0x1b, 0x02, 0x03, 0xe3, 0x1f, 0x67, 0x00, 0xe2, 0xde, 0xe1, 0x5d, 0x86, 0x48,
0x6e, 0xc9, 0x60, 0x18, 0xaa, 0x26, 0xa3, 0xbc, 0x06, 0xd5, 0x28, 0x62, 0x39, 0x96, 0x84, 0x2a,
0x0a, 0x26, 0xc4, 0xa1, 0xb7, 0x61, 0xf1, 0x6c, 0xe4, 0x9d, 0xa0, 0xc4, 0x2a, 0xe5, 0x16, 0x8a,
0x57, 0xab, 0x13, 0x58, 0x49, 0x23, 0xb1, 0xdc, 0x94, 0x4f, 0x0d, 0x6a, 0xd6, 0xa5, 0x20, 0xe3,
0x6f, 0x66, 0xa3, 0xd0, 0xcd, 0x78, 0x26, 0x9e, 0xaf, 0xde, 0xfd, 0x34, 0xb1, 0x34, 0xcf, 0x73,
0x2f, 0x7e, 0x04, 0x75, 0x9f, 0x0e, 0x25, 0x75, 0x62, 0xe5, 0x9f, 0x73, 0x62, 0xd5, 0xfc, 0x84,
0xa4, 0xf3, 0x0e, 0x34, 0xec, 0xe1, 0x05, 0xf7, 0x43, 0x07, 0xad, 0xf5, 0x28, 0x1f, 0xcb, 0x60,
0x49, 0x0d, 0x8e, 0x82, 0xe8, 0xdb, 0xb0, 0x28, 0x6f, 0xe2, 0x46, 0x98, 0xf2, 0x1d, 0xa0, 0x18,
0x2c, 0x10, 0x8d, 0x7f, 0xa6, 0x62, 0x45, 0x93, 0xab, 0xfb, 0xfc, 0x59, 0xd1, 0x47, 0x98, 0x9d,
0x77, 0xa0, 0x4a, 0x42, 0x92, 0x4e, 0x00, 0xc9, 0x8f, 0x08, 0x28, 0x5d, 0x00, 0xc9, 0x69, 0xcd,
0xbf, 0xcc, 0xb4, 0x1a, 0xff, 0x31, 0x03, 0xc5, 0x3d, 0x6f, 0xb2, 0xe7, 0x50, 0x34, 0x3f, 0x6e,
0x93, 0xc8, 0x47, 0xb5, 0x20, 0x92, 0x18, 0xf8, 0xf3, 0x9c, 0x0b, 0x67, 0xa9, 0x62, 0x5e, 0x2d,
0x29, 0xe6, 0xfd, 0x00, 0x6e, 0xa1, 0x0b, 0xd0, 0xf7, 0x26, 0x9e, 0x2f, 0xb6, 0xaa, 0x3d, 0x22,
0x71, 0xcf, 0x73, 0xc3, 0x73, 0xc5, 0x3b, 0x6f, 0x9e, 0x72, 0x7e, 0xa4, 0x61, 0x1c, 0x44, 0x08,
0x78, 0xa5, 0x73, 0x14, 0x5e, 0x58, 0xa4, 0xa1, 0x4b, 0x79, 0x94, 0x38, 0xea, 0xa2, 0xc8, 0x68,
0x23, 0x1c, 0x25, 0x52, 0xe3, 0xbb, 0x50, 0x8e, 0x8c, 0x3d, 0xec, 0x5d, 0x28, 0x9f, 0x7b, 0x13,
0x69, 0x11, 0xca, 0x24, 0x2e, 0xe5, 0xc9, 0x51, 0x9b, 0xa5, 0x73, 0xfa, 0x11, 0x18, 0x7f, 0x54,
0x84, 0x62, 0xc7, 0xbd, 0xf0, 0x9c, 0x01, 0x46, 0x9b, 0x8e, 0xf9, 0xd8, 0x53, 0xcf, 0x01, 0x88,
0xdf, 0x18, 0x9b, 0x15, 0xbf, 0xe6, 0x93, 0x93, 0xb1, 0x59, 0xd1, 0x3b, 0x3e, 0xab, 0xb0, 0xe0,
0xeb, 0xcf, 0xf1, 0x14, 0x7c, 0x8c, 0x7f, 0x8f, 0xce, 0xcb, 0x82, 0xf6, 0xc8, 0x82, 0xa8, 0x8b,
0x9e, 0x89, 0xc1, 0x29, 0xa3, 0xeb, 0x99, 0x65, 0x84, 0xe0, 0x84, 0xbd, 0x02, 0x45, 0x79, 0x07,
0x8e, 0x2e, 0x2d, 0x51, 0xc0, 0xba, 0x04, 0x21, 0x35, 0xf8, 0x9c, 0x5c, 0xb8, 0x91, 0x20, 0x9b,
0x33, 0xab, 0x0a, 0xb8, 0x23, 0x68, 0xed, 0x0e, 0x54, 0x08, 0x9f, 0x50, 0x4a, 0x32, 0x48, 0x13,
0x41, 0x88, 0x90, 0xf2, 0xaa, 0x55, 0x39, 0xf5, 0x55, 0x2b, 0x0c, 0x27, 0x8e, 0xb8, 0x2c, 0x0d,
0x11, 0xe8, 0x2d, 0x23, 0x0d, 0xae, 0x9e, 0x8a, 0x93, 0x36, 0x15, 0xba, 0xad, 0xac, 0x6c, 0x2a,
0xaf, 0x43, 0xed, 0xd4, 0x1e, 0x8d, 0x4e, 0xec, 0xc1, 0x53, 0x32, 0x05, 0x54, 0xc9, 0xfa, 0xa9,
0x80, 0x68, 0x0b, 0xb8, 0x03, 0x15, 0x6d, 0x95, 0x31, 0x02, 0x33, 0x6f, 0x42, 0xbc, 0xbe, 0xb3,
0x16, 0xbe, 0xfa, 0x4b, 0x58, 0xf8, 0xb4, 0x48, 0xd4, 0xc5, 0x64, 0x24, 0xea, 0x2d, 0xe4, 0xa6,
0x32, 0xe4, 0xb0, 0x41, 0x0f, 0xe7, 0xd8, 0xc3, 0x21, 0x86, 0x1c, 0xa2, 0x21, 0x8b, 0x26, 0x8f,
0xf2, 0x97, 0x48, 0x97, 0x20, 0x18, 0xa1, 0xdc, 0x26, 0x33, 0xf5, 0xc4, 0x76, 0x86, 0x78, 0xe9,
0x80, 0xac, 0x07, 0x45, 0x7b, 0x1c, 0x1e, 0xd9, 0xce, 0x90, 0xdd, 0x85, 0xaa, 0xca, 0xc6, 0xd3,
0x71, 0x99, 0xe6, 0x5f, 0x66, 0x8b, 0x33, 0xd1, 0x80, 0x5a, 0x84, 0x31, 0x8e, 0xaf, 0x1c, 0x57,
0x24, 0x0a, 0xd2, 0xc1, 0xfb, 0x18, 0xe5, 0x13, 0x72, 0xbc, 0x58, 0x5c, 0x7f, 0x74, 0x2b, 0x0a,
0x3e, 0x40, 0x2a, 0x55, 0xff, 0xc9, 0x39, 0x46, 0x98, 0x42, 0xb8, 0x23, 0x1f, 0xdd, 0x5a, 0x42,
0xfe, 0x95, 0xa8, 0xe8, 0xa3, 0x23, 0x04, 0xf6, 0x5d, 0x4d, 0x7f, 0x6d, 0x22, 0xf2, 0x2b, 0x33,
0xf5, 0x5f, 0x77, 0x29, 0xeb, 0x36, 0x80, 0x13, 0x88, 0x53, 0x26, 0xe0, 0xee, 0x10, 0xef, 0x08,
0x97, 0xcc, 0xb2, 0x13, 0x3c, 0x21, 0xc0, 0x37, 0xab, 0xd8, 0xb6, 0xa0, 0xaa, 0x0f, 0x93, 0x95,
0x20, 0x7f, 0x78, 0xd4, 0xee, 0x36, 0x6e, 0xb0, 0x0a, 0x14, 0x7b, 0xed, 0x7e, 0x7f, 0x1f, 0x3d,
0x7d, 0x55, 0x28, 0x45, 0x17, 0x19, 0xb3, 0x22, 0xd5, 0xda, 0xde, 0x6e, 0x1f, 0xf5, 0xdb, 0x3b,
0x8d, 0xdc, 0x8f, 0xf2, 0xa5, 0x6c, 0x23, 0x67, 0xfc, 0x71, 0x0e, 0x2a, 0xda, 0x2c, 0x3c, 0x9f,
0x19, 0xdf, 0x06, 0x40, 0x4d, 0x32, 0x8e, 0x48, 0xcd, 0x9b, 0x65, 0x01, 0xa1, 0xc5, 0xd7, 0x7d,
0x14, 0x39, 0x7a, 0x91, 0x49, 0xf9, 0x28, 0x5e, 0x87, 0x1a, 0x3d, 0x6e, 0xa4, 0xfb, 0x6b, 0x0b,
0x66, 0x95, 0x80, 0x92, 0x55, 0xe3, 0x0d, 0x67, 0x44, 0xc2, 0xeb, 0x75, 0xf2, 0x51, 0x13, 0x02,
0xe1, 0x05, 0x3b, 0xbc, 0x1d, 0x19, 0x78, 0xa3, 0x0b, 0x4e, 0x18, 0x24, 0x11, 0x56, 0x24, 0xac,
0x2f, 0xef, 0x6a, 0x4b, 0x7e, 0xa8, 0x5d, 0xb1, 0x2d, 0x98, 0x55, 0x02, 0xca, 0x86, 0xbe, 0xa5,
0x08, 0x88, 0xa2, 0x57, 0xd6, 0xe7, 0xa9, 0x21, 0x41, 0x3c, 0xfb, 0x73, 0x66, 0xc4, 0x32, 0x12,
0xc6, 0x9b, 0xf3, 0xe5, 0x5e, 0x6c, 0x4e, 0x64, 0xef, 0x02, 0x1b, 0x4f, 0x26, 0x56, 0x8a, 0x81,
0x2f, 0x6f, 0x2e, 0x8e, 0x27, 0x93, 0xbe, 0x66, 0xff, 0xfa, 0x06, 0x6c, 0x8f, 0x5f, 0x00, 0x6b,
0x89, 0x0d, 0x8c, 0x5d, 0x8c, 0x54, 0xb1, 0x98, 0x2d, 0x67, 0x74, 0xb6, 0x9c, 0xc2, 0xfd, 0xb2,
0xa9, 0xdc, 0xef, 0x79, 0x7c, 0xc2, 0xd8, 0x85, 0xca, 0x91, 0xf6, 0x74, 0xda, 0x5d, 0x71, 0x42,
0xa8, 0x47, 0xd3, 0xe8, 0xec, 0x20, 0x9b, 0xa2, 0x2f, 0xdf, 0x4a, 0xd3, 0x7a, 0x93, 0xd5, 0x7a,
0x63, 0xfc, 0xc3, 0x0c, 0x3d, 0x35, 0x13, 0x75, 0x3e, 0x7e, 0xad, 0x4d, 0xb9, 0xdf, 0xe2, 0x9b,
0xf0, 0x15, 0xe5, 0x76, 0x93, 0x97, 0xd8, 0xb1, 0x6b, 0x96, 0x77, 0x7a, 0x1a, 0x70, 0x15, 0xe3,
0x51, 0x41, 0xd8, 0x21, 0x82, 0x94, 0xf0, 0x2d, 0x24, 0x7c, 0x87, 0xea, 0x0f, 0x64, 0x60, 0x87,
0x10, 0xbe, 0x0f, 0xec, 0x4b, 0xd9, 0x6a, 0x20, 0x44, 0x10, 0xe9, 0x1f, 0x50, 0x97, 0x65, 0xa3,
0xb4, 0xf1, 0xf7, 0xe4, 0x65, 0xfd, 0xd9, 0xf9, 0xbd, 0x0f, 0xa5, 0xa8, 0xd6, 0xe4, 0x09, 0xab,
0x30, 0xa3, 0x7c, 0x71, 0x8e, 0xa3, 0x31, 0x24, 0xd1, 0x63, 0xda, 0x5c, 0xe8, 0xe3, 0xe9, 0x68,
0xbd, 0x7e, 0x0f, 0xd8, 0xa9, 0xe3, 0xcf, 0x22, 0xd3, 0x66, 0x6b, 0x60, 0x8e, 0x86, 0x6d, 0x1c,
0xc3, 0xb2, 0xe2, 0x12, 0x9a, 0x46, 0x90, 0x5c, 0xbc, 0xcc, 0x0b, 0x98, 0x7c, 0x76, 0x8e, 0xc9,
0x1b, 0xbf, 0x5e, 0x80, 0xa2, 0x7a, 0x86, 0x30, 0xed, 0xe9, 0xbc, 0x72, 0xf2, 0xe9, 0xbc, 0x66,
0xe2, 0x41, 0x25, 0x5c, 0x7a, 0x79, 0xde, 0xbf, 0x3d, 0x7b, 0x64, 0x6b, 0xbe, 0x8a, 0xc4, 0xb1,
0x2d, 0x7d, 0x15, 0x85, 0xa4, 0xaf, 0x22, 0xed, 0x39, 0x41, 0x12, 0x3d, 0xe7, 0x9e, 0x13, 0xbc,
0x05, 0x24, 0x47, 0x68, 0xc1, 0x6d, 0x25, 0x04, 0x88, 0x33, 0x27, 0x29, 0x76, 0x94, 0x66, 0xc5,
0x8e, 0x97, 0x16, 0x09, 0xbe, 0x03, 0x0b, 0xf4, 0xbc, 0x86, 0xbc, 0xfc, 0xab, 0x0e, 0x0e, 0x39,
0x57, 0xea, 0x3f, 0xdd, 0x78, 0x30, 0x25, 0xae, 0xfe, 0x36, 0x57, 0x25, 0xf1, 0x36, 0x97, 0xee,
0x43, 0xa9, 0x26, 0x7d, 0x28, 0xf7, 0xa0, 0x11, 0x4d, 0x1c, 0x5a, 0x24, 0xdd, 0x40, 0xde, 0x1c,
0xac, 0x2b, 0xb8, 0xe0, 0x86, 0xdd, 0x20, 0x3e, 0xf8, 0xea, 0x89, 0x83, 0x4f, 0xf0, 0xaa, 0x56,
0x18, 0xf2, 0xf1, 0x24, 0x54, 0x07, 0x9f, 0xf6, 0x82, 0x23, 0xad, 0xfc, 0x22, 0xae, 0xbc, 0x5a,
0x5e, 0xa2, 0x8e, 0x2d, 0xa8, 0x9f, 0xda, 0xce, 0x68, 0xea, 0x73, 0xcb, 0xe7, 0x76, 0xe0, 0xb9,
0xb8, 0xf9, 0xe3, 0x33, 0x58, 0x0e, 0x71, 0x97, 0x70, 0x4c, 0x44, 0x31, 0x6b, 0xa7, 0x7a, 0x12,
0x2f, 0x31, 0xe9, 0x33, 0x21, 0x8e, 0x2c, 0x79, 0x87, 0x98, 0x62, 0x55, 0x3a, 0x5d, 0x6b, 0x77,
0xbf, 0xf3, 0xf1, 0x5e, 0xbf, 0x91, 0x11, 0xc9, 0xde, 0xf1, 0xf6, 0x76, 0xbb, 0xbd, 0x83, 0x47,
0x18, 0xc0, 0xc2, 0x6e, 0xab, 0xb3, 0x2f, 0x0f, 0xb0, 0x7c, 0xa3, 0x60, 0xfc, 0xeb, 0x2c, 0x54,
0xb4, 0xd1, 0xb0, 0xc7, 0xd1, 0x22, 0xd0, 0x0b, 0x50, 0xb7, 0xe7, 0x47, 0xbc, 0xa9, 0x38, 0xbc,
0xb6, 0x0a, 0xd1, 0x5b, 0x8d, 0xd9, 0x6b, 0xdf, 0x6a, 0x64, 0x6f, 0xc1, 0xa2, 0x4d, 0x35, 0x44,
0x93, 0x2e, 0x8d, 0xfb, 0x12, 0x2c, 0xe7, 0x1c, 0x23, 0x48, 0xe3, 0x63, 0x4a, 0xe0, 0xe5, 0x55,
0xd0, 0x66, 0x74, 0x52, 0xe1, 0xda, 0x14, 0xe5, 0xcc, 0x48, 0x67, 0x7c, 0x74, 0xe0, 0xcb, 0xf9,
0x52, 0xd9, 0x82, 0x05, 0x25, 0x28, 0xbc, 0x6a, 0x46, 0x69, 0xe3, 0x03, 0x80, 0x78, 0x3c, 0xc9,
0xe9, 0xbb, 0x91, 0x9c, 0xbe, 0x8c, 0x36, 0x7d, 0x59, 0xe3, 0x9f, 0x4a, 0xd6, 0x25, 0xd7, 0x22,
0x32, 0xf5, 0x7d, 0x0b, 0x94, 0xf1, 0xd1, 0xc2, 0x20, 0xef, 0xc9, 0x88, 0x87, 0xea, 0x31, 0x83,
0x25, 0x99, 0xd3, 0x89, 0x32, 0xe6, 0x58, 0x6d, 0x76, 0x9e, 0xd5, 0xbe, 0x06, 0x55, 0xc1, 0x66,
0x25, 0x21, 0x05, 0x92, 0x5d, 0x55, 0xc6, 0xf6, 0xa5, 0x6a, 0x3b, 0xc1, 0x63, 0xf3, 0x33, 0x3c,
0xf6, 0xef, 0x67, 0xe8, 0x6d, 0x91, 0xb8, 0xa3, 0x31, 0x93, 0x8d, 0xea, 0x4c, 0x32, 0x59, 0x89,
0x6a, 0x46, 0xf9, 0xd7, 0x30, 0xce, 0x6c, 0x3a, 0xe3, 0x4c, 0x67, 0xc9, 0xb9, 0x54, 0x96, 0x6c,
0x6c, 0x40, 0x73, 0x87, 0x8b, 0xa9, 0x68, 0x8d, 0x46, 0x33, 0x73, 0x69, 0xdc, 0x82, 0x9b, 0x29,
0x79, 0xd2, 0x6a, 0xf3, 0x09, 0xac, 0xb6, 0xe8, 0xd1, 0x85, 0x6f, 0xea, 0xf2, 0xa4, 0xd1, 0x84,
0xb5, 0xd9, 0x2a, 0x65, 0x63, 0xbb, 0xb0, 0xb4, 0xc3, 0x4f, 0xa6, 0x67, 0xfb, 0xfc, 0x22, 0x6e,
0x88, 0x41, 0x3e, 0x38, 0xf7, 0x9e, 0xc9, 0xc5, 0xc5, 0xdf, 0x18, 0x96, 0x29, 0x70, 0xac, 0x60,
0xc2, 0x07, 0xca, 0x72, 0x8f, 0x90, 0xde, 0x84, 0x0f, 0x8c, 0xc7, 0xc0, 0xf4, 0x7a, 0xe4, 0x4a,
0x08, 0xb5, 0x6a, 0x7a, 0x62, 0x05, 0x57, 0x41, 0xc8, 0xc7, 0xea, 0xd2, 0x20, 0x04, 0xd3, 0x93,
0x1e, 0x41, 0x8c, 0xb7, 0xa1, 0x7a, 0x64, 0x5f, 0x99, 0xfc, 0x0b, 0x79, 0x37, 0x6f, 0x1d, 0x8a,
0x13, 0xfb, 0x4a, 0xf0, 0xd3, 0xc8, 0x89, 0x87, 0xd9, 0xc6, 0xbf, 0xc8, 0xc3, 0x02, 0x61, 0xb2,
0xbb, 0xf4, 0x12, 0xb2, 0xe3, 0x22, 0x3f, 0x53, 0x27, 0x8b, 0x06, 0x9a, 0x3b, 0x7c, 0xb2, 0xf3,
0x87, 0x8f, 0xb4, 0x38, 0xaa, 0x57, 0x9d, 0x94, 0xbb, 0xc5, 0x9d, 0x8e, 0xd5, 0x53, 0x4e, 0xc9,
0x97, 0x07, 0xf2, 0xf1, 0x0b, 0xda, 0x74, 0xeb, 0x3a, 0xe9, 0x10, 0x8f, 0x95, 0x37, 0xea, 0x9d,
0x3a, 0x53, 0xe5, 0xb9, 0xa3, 0x83, 0x52, 0x35, 0xc4, 0xa2, 0xba, 0x70, 0x9a, 0xd4, 0x10, 0xe7,
0x34, 0xc1, 0xd2, 0x8b, 0x35, 0x41, 0x32, 0x45, 0x3e, 0x47, 0x13, 0x84, 0x97, 0xd0, 0x04, 0x5f,
0xc2, 0x19, 0x7d, 0x13, 0x4a, 0x28, 0x28, 0x69, 0xc7, 0x90, 0x10, 0x90, 0xc4, 0x31, 0xf4, 0xa1,
0xa6, 0x2b, 0x51, 0x24, 0x8c, 0x76, 0x0e, 0x98, 0xfc, 0x8b, 0x9f, 0x8d, 0x93, 0xef, 0x73, 0x28,
0x4a, 0xa8, 0x20, 0x68, 0xd7, 0x1e, 0xab, 0x87, 0xf1, 0xf0, 0xb7, 0x98, 0x36, 0x7c, 0xcd, 0xeb,
0x8b, 0xa9, 0xe3, 0xf3, 0xa1, 0x7a, 0xf1, 0xc8, 0xc1, 0x3d, 0x2a, 0x20, 0x62, 0x80, 0x42, 0x6f,
0x73, 0xbd, 0x67, 0xae, 0xe4, 0x3d, 0x45, 0x27, 0x78, 0x22, 0x92, 0x06, 0x83, 0x06, 0x3e, 0xa3,
0x39, 0xf1, 0x7c, 0x75, 0xca, 0x1b, 0xbf, 0x9b, 0x81, 0x86, 0xdc, 0x5d, 0x51, 0x9e, 0xae, 0x36,
0x15, 0xae, 0x0b, 0xdc, 0x78, 0xfe, 0xfb, 0x45, 0x06, 0xd4, 0xd0, 0x5a, 0x14, 0x1d, 0xf9, 0x64,
0xed, 0xaa, 0x08, 0xe0, 0xae, 0x3c, 0xf6, 0x5f, 0x85, 0x8a, 0x0a, 0x1a, 0x1f, 0x3b, 0x23, 0xf5,
0x58, 0x3e, 0x45, 0x8d, 0x1f, 0x38, 0x23, 0x25, 0x31, 0xf8, 0xb6, 0xbc, 0x00, 0x9d, 0x41, 0x89,
0xc1, 0xb4, 0x43, 0x6e, 0xfc, 0xab, 0x0c, 0x2c, 0x69, 0x43, 0x91, 0xfb, 0xf6, 0xfb, 0x50, 0x8d,
0xde, 0xaf, 0xe5, 0x91, 0xa8, 0xba, 0x9e, 0x64, 0x34, 0x71, 0xb1, 0xca, 0x20, 0x82, 0x04, 0xa2,
0x33, 0x43, 0xfb, 0x8a, 0x22, 0x9b, 0xa7, 0x63, 0xa5, 0x0d, 0x0e, 0xed, 0xab, 0x5d, 0xce, 0x7b,
0xd3, 0xb1, 0xd0, 0xf5, 0x9f, 0x71, 0xfe, 0x34, 0x42, 0x20, 0xf6, 0x09, 0x02, 0x26, 0x31, 0x0c,
0xa8, 0x8d, 0x3d, 0x37, 0x3c, 0x8f, 0x50, 0xa4, 0x98, 0x8e, 0x40, 0xc2, 0x31, 0xfe, 0x30, 0x0b,
0xcb, 0x64, 0x93, 0x94, 0xb6, 0x60, 0xc9, 0xba, 0x9a, 0xb0, 0x40, 0xe6, 0x59, 0x62, 0x5e, 0x7b,
0x37, 0x4c, 0x99, 0x66, 0xdf, 0x79, 0x49, 0x3b, 0xaa, 0xba, 0x63, 0x7d, 0xcd, 0xf4, 0xe7, 0xe6,
0xa7, 0xff, 0xfa, 0xe9, 0x4d, 0xf3, 0x0c, 0x17, 0xd2, 0x3c, 0xc3, 0x2f, 0xe3, 0x8f, 0x9d, 0xbb,
0x0d, 0x5c, 0x94, 0x38, 0xda, 0x6d, 0xe0, 0xc7, 0xb0, 0x9e, 0xc0, 0x41, 0x6e, 0xed, 0x9c, 0x3a,
0x5c, 0xbd, 0x58, 0xb3, 0xa2, 0x61, 0xf7, 0x54, 0xde, 0x56, 0x11, 0x0a, 0xc1, 0xc0, 0x9b, 0x70,
0x63, 0x0d, 0x56, 0x92, 0xb3, 0x2a, 0x8f, 0x89, 0xdf, 0xca, 0x40, 0x53, 0xc6, 0xf1, 0x38, 0xee,
0xd9, 0x9e, 0x13, 0x84, 0x9e, 0x1f, 0xbd, 0xf3, 0x7a, 0x1b, 0x80, 0x1e, 0xee, 0x47, 0xe5, 0x5b,
0xbe, 0xd1, 0x82, 0x10, 0x54, 0xbd, 0x6f, 0x42, 0x89, 0xbb, 0x43, 0xca, 0x24, 0x6a, 0x28, 0x72,
0x77, 0xa8, 0x14, 0xf7, 0xb9, 0xa3, 0xb4, 0x96, 0x14, 0x12, 0xe4, 0x8b, 0x08, 0x62, 0x76, 0xf8,
0x05, 0x1e, 0xe9, 0xf9, 0xe8, 0x45, 0x84, 0x03, 0xfb, 0x12, 0xa3, 0x62, 0x03, 0xe3, 0x6f, 0x67,
0x61, 0x31, 0xee, 0x1f, 0xbd, 0xb7, 0xf2, 0xfc, 0x97, 0x63, 0xee, 0x4a, 0x72, 0x70, 0x84, 0xc2,
0xa3, 0x59, 0x6a, 0x4b, 0xb4, 0x39, 0x3b, 0x2e, 0x33, 0xa0, 0xa2, 0x30, 0xbc, 0x69, 0xa8, 0x3d,
0xa1, 0x58, 0x26, 0x94, 0xc3, 0x69, 0x28, 0x34, 0x54, 0xa1, 0xaa, 0x3b, 0xae, 0xd4, 0x11, 0x0b,
0xf6, 0x38, 0xec, 0xe0, 0xd7, 0x21, 0x04, 0x58, 0x14, 0xa3, 0x85, 0x14, 0x58, 0x02, 0xbf, 0x41,
0x0a, 0x0b, 0xad, 0x1c, 0x2a, 0x2b, 0xba, 0x34, 0x4f, 0x0f, 0x5a, 0x47, 0xd2, 0xfc, 0xab, 0x50,
0xa1, 0xca, 0xe3, 0xcb, 0xdf, 0x79, 0xb3, 0x8c, 0x2d, 0x60, 0xbe, 0xb4, 0x9a, 0x79, 0xd3, 0x84,
0xad, 0x00, 0xa8, 0x29, 0x0c, 0x93, 0xf9, 0x6b, 0x19, 0xb8, 0x99, 0xb2, 0x6c, 0x72, 0x97, 0x6f,
0xc3, 0xd2, 0x69, 0x94, 0xa9, 0x66, 0x97, 0xb6, 0xfa, 0x9a, 0x62, 0xab, 0xc9, 0x39, 0x35, 0x1b,
0xa7, 0x49, 0x40, 0xac, 0xa5, 0xd2, 0x0a, 0x26, 0x9e, 0x16, 0x40, 0x91, 0x88, 0x96, 0x91, 0x14,
0xc4, 0x23, 0xd8, 0x68, 0x5f, 0x0a, 0x8e, 0x11, 0x85, 0xd6, 0x0e, 0x9e, 0x4e, 0x95, 0xf7, 0x6a,
0xc6, 0x22, 0x9f, 0x79, 0x29, 0x8b, 0xfc, 0x90, 0xee, 0x22, 0x47, 0x75, 0xfd, 0x34, 0x95, 0xe0,
0x01, 0x2a, 0xca, 0x9c, 0x60, 0x15, 0xea, 0x8d, 0x01, 0x01, 0xa2, 0x4a, 0x8d, 0x00, 0x16, 0x0f,
0xa6, 0xa3, 0xd0, 0xd9, 0x8e, 0x40, 0xec, 0x3b, 0xb2, 0x0c, 0xb6, 0xa3, 0x66, 0x2d, 0xb5, 0x21,
0x88, 0x1a, 0xc2, 0xc9, 0x1a, 0x8b, 0x8a, 0xac, 0xf9, 0xf6, 0x16, 0xc7, 0xc9, 0x16, 0x8c, 0x9b,
0xb0, 0x1e, 0xa7, 0x68, 0xda, 0xd4, 0x51, 0xf3, 0x0f, 0x32, 0x14, 0x82, 0x4f, 0x79, 0x3d, 0xd7,
0x9e, 0x04, 0xe7, 0x5e, 0xc8, 0xda, 0xb0, 0x1c, 0x38, 0xee, 0xd9, 0x88, 0xeb, 0xd5, 0x07, 0x72,
0x12, 0x56, 0x93, 0x7d, 0xa3, 0xa2, 0x81, 0xb9, 0x44, 0x25, 0xe2, 0xda, 0x02, 0xb6, 0x75, 0x5d,
0x27, 0x63, 0xb2, 0x98, 0x99, 0x8d, 0xf9, 0xce, 0x77, 0xa0, 0x9e, 0x6c, 0x88, 0x7d, 0x28, 0xaf,
0xf0, 0xc7, 0xbd, 0xca, 0xcd, 0xdc, 0x6f, 0x8e, 0x09, 0xa2, 0x12, 0xcf, 0x7d, 0x60, 0xfc, 0x8d,
0x0c, 0x34, 0x4d, 0x2e, 0x28, 0x57, 0xeb, 0xa5, 0xa2, 0x99, 0xef, 0xcf, 0xd5, 0x7a, 0xfd, 0x58,
0xd5, 0xcb, 0x00, 0xaa, 0x47, 0xef, 0x5d, 0xbb, 0x18, 0x7b, 0x37, 0xe6, 0x46, 0xb4, 0x55, 0x82,
0x05, 0x42, 0x31, 0xd6, 0x61, 0x55, 0xf6, 0x47, 0xf5, 0x25, 0x76, 0xb7, 0x26, 0x5a, 0x4c, 0xb8,
0x5b, 0x37, 0xa0, 0x49, 0x77, 0x75, 0xf5, 0x41, 0xc8, 0x82, 0x3b, 0xc0, 0x0e, 0xec, 0x81, 0xed,
0x7b, 0x9e, 0x7b, 0xc4, 0x7d, 0x19, 0xd0, 0x8c, 0x12, 0x26, 0x7a, 0x23, 0x95, 0x28, 0x4c, 0x29,
0xf5, 0x70, 0xac, 0xe7, 0xaa, 0xf8, 0x2d, 0x4a, 0x19, 0x26, 0x2c, 0x6f, 0xd9, 0x4f, 0xb9, 0xaa,
0x49, 0x4d, 0xd1, 0x47, 0x50, 0x99, 0x44, 0x95, 0xaa, 0x79, 0x57, 0x4f, 0x8c, 0xcc, 0x37, 0x6b,
0xea, 0xd8, 0xc6, 0x23, 0x58, 0x49, 0xd6, 0x29, 0x59, 0xc7, 0x06, 0x94, 0xc6, 0x12, 0x26, 0x7b,
0x17, 0xa5, 0x8d, 0xdf, 0x28, 0x41, 0x51, 0x6a, 0xaa, 0x6c, 0x13, 0xf2, 0x03, 0x15, 0x43, 0x17,
0x3f, 0x6d, 0x25, 0x73, 0xd5, 0xff, 0x6d, 0x8c, 0xa4, 0x13, 0x78, 0xec, 0x23, 0xa8, 0x27, 0xdd,
0xc8, 0x33, 0x2f, 0x01, 0x24, 0xfd, 0xbf, 0xb5, 0xc1, 0x8c, 0xc3, 0xb0, 0x1c, 0x1f, 0x8e, 0x24,
0x33, 0x94, 0xce, 0xb5, 0xd3, 0xd3, 0x73, 0x85, 0xbc, 0x1d, 0x9c, 0xdb, 0xd6, 0xa3, 0xc7, 0x1f,
0xc8, 0xa7, 0x00, 0x2a, 0x08, 0xec, 0x9d, 0xdb, 0x8f, 0x1e, 0x7f, 0x30, 0x2b, 0x49, 0xcb, 0x87,
0x00, 0x34, 0x49, 0x7a, 0x05, 0x0a, 0xf4, 0x42, 0x2a, 0x05, 0x43, 0x51, 0x82, 0x3d, 0x84, 0x15,
0x65, 0xfc, 0x90, 0x61, 0xeb, 0xc4, 0x05, 0x4b, 0x74, 0x53, 0x50, 0xe6, 0xf5, 0x30, 0x8b, 0xcc,
0x25, 0x6b, 0xb0, 0x70, 0x1e, 0x3f, 0x77, 0x5b, 0x33, 0x65, 0xca, 0xf8, 0xc3, 0x02, 0x54, 0xb4,
0x49, 0x61, 0x55, 0x28, 0x99, 0xed, 0x5e, 0xdb, 0xfc, 0xb4, 0xbd, 0xd3, 0xb8, 0xc1, 0xee, 0xc1,
0x1b, 0x9d, 0xee, 0xf6, 0xa1, 0x69, 0xb6, 0xb7, 0xfb, 0xd6, 0xa1, 0x69, 0xa9, 0x07, 0xd6, 0x8e,
0x5a, 0x9f, 0x1f, 0xb4, 0xbb, 0x7d, 0x6b, 0xa7, 0xdd, 0x6f, 0x75, 0xf6, 0x7b, 0x8d, 0x0c, 0x7b,
0x05, 0x9a, 0x31, 0xa6, 0xca, 0x6e, 0x1d, 0x1c, 0x1e, 0x77, 0xfb, 0x8d, 0x2c, 0xbb, 0x03, 0xb7,
0x76, 0x3b, 0xdd, 0xd6, 0xbe, 0x15, 0xe3, 0x6c, 0xef, 0xf7, 0x3f, 0xb5, 0xda, 0xbf, 0x70, 0xd4,
0x31, 0x3f, 0x6f, 0xe4, 0xd2, 0x10, 0xf6, 0xfa, 0xfb, 0xdb, 0xaa, 0x86, 0x3c, 0xbb, 0x09, 0xab,
0x84, 0x40, 0x45, 0xac, 0xfe, 0xe1, 0xa1, 0xd5, 0x3b, 0x3c, 0xec, 0x36, 0x0a, 0x6c, 0x09, 0x6a,
0x9d, 0xee, 0xa7, 0xad, 0xfd, 0xce, 0x8e, 0x65, 0xb6, 0x5b, 0xfb, 0x07, 0x8d, 0x05, 0xb6, 0x0c,
0x8b, 0xb3, 0x78, 0x45, 0x51, 0x85, 0xc2, 0x3b, 0xec, 0x76, 0x0e, 0xbb, 0xd6, 0xa7, 0x6d, 0xb3,
0xd7, 0x39, 0xec, 0x36, 0x4a, 0x6c, 0x0d, 0x58, 0x32, 0x6b, 0xef, 0xa0, 0xb5, 0xdd, 0x28, 0xb3,
0x55, 0x58, 0x4a, 0xc2, 0x9f, 0xb4, 0x3f, 0x6f, 0x00, 0x6b, 0xc2, 0x0a, 0x75, 0xcc, 0xda, 0x6a,
0xef, 0x1f, 0x7e, 0x66, 0x1d, 0x74, 0xba, 0x9d, 0x83, 0xe3, 0x83, 0x46, 0x05, 0xdf, 0x6d, 0x6c,
0xb7, 0xad, 0x4e, 0xb7, 0x77, 0xbc, 0xbb, 0xdb, 0xd9, 0xee, 0xb4, 0xbb, 0xfd, 0x46, 0x95, 0x5a,
0x4e, 0x1b, 0x78, 0x4d, 0x14, 0x90, 0x77, 0x5b, 0xac, 0x9d, 0x4e, 0xaf, 0xb5, 0xb5, 0xdf, 0xde,
0x69, 0xd4, 0xd9, 0x6d, 0xb8, 0xd9, 0x6f, 0x1f, 0x1c, 0x1d, 0x9a, 0x2d, 0xf3, 0x73, 0x75, 0xf7,
0xc5, 0xda, 0x6d, 0x75, 0xf6, 0x8f, 0xcd, 0x76, 0x63, 0x91, 0xbd, 0x06, 0xb7, 0xcd, 0xf6, 0x27,
0xc7, 0x1d, 0xb3, 0xbd, 0x63, 0x75, 0x0f, 0x77, 0xda, 0xd6, 0x6e, 0xbb, 0xd5, 0x3f, 0x36, 0xdb,
0xd6, 0x41, 0xa7, 0xd7, 0xeb, 0x74, 0x3f, 0x6e, 0x34, 0xd8, 0x1b, 0x70, 0x37, 0x42, 0x89, 0x2a,
0x98, 0xc1, 0x5a, 0x12, 0xe3, 0x53, 0x4b, 0xda, 0x6d, 0xff, 0x42, 0xdf, 0x3a, 0x6a, 0xb7, 0xcd,
0x06, 0x63, 0x1b, 0xb0, 0x16, 0x37, 0x4f, 0x0d, 0xc8, 0xb6, 0x97, 0x45, 0xde, 0x51, 0xdb, 0x3c,
0x68, 0x75, 0xc5, 0x02, 0x27, 0xf2, 0x56, 0x44, 0xb7, 0xe3, 0xbc, 0xd9, 0x6e, 0xaf, 0x32, 0x06,
0x75, 0x6d, 0x55, 0x76, 0x5b, 0x66, 0x63, 0x8d, 0x2d, 0x42, 0xe5, 0xe0, 0xe8, 0xc8, 0xea, 0x77,
0x0e, 0xda, 0x87, 0xc7, 0xfd, 0xc6, 0x3a, 0x5b, 0x85, 0x46, 0xa7, 0xdb, 0x6f, 0x9b, 0x62, 0xad,
0x55, 0xd1, 0xff, 0x51, 0x64, 0x2b, 0xb0, 0xa8, 0x7a, 0xaa, 0xa0, 0x7f, 0x52, 0x64, 0xeb, 0xc0,
0x8e, 0xbb, 0x66, 0xbb, 0xb5, 0x23, 0x26, 0x2e, 0xca, 0xf8, 0x9f, 0x45, 0xe9, 0x52, 0xfa, 0xdd,
0x5c, 0x74, 0x58, 0xc7, 0x31, 0x1a, 0xc9, 0xc7, 0xcf, 0xab, 0xda, 0xa3, 0xe5, 0x2f, 0xfa, 0x84,
0x89, 0xa6, 0x5a, 0xe5, 0xe6, 0x54, 0xab, 0x39, 0xdd, 0xbd, 0xa6, 0xcb, 0x7e, 0xaf, 0x43, 0x6d,
0x4c, 0x0f, 0xa1, 0xcb, 0x07, 0x8f, 0x41, 0x06, 0x2c, 0x11, 0x90, 0x5e, 0x3b, 0x9e, 0xfb, 0x86,
0x47, 0x61, 0xfe, 0x1b, 0x1e, 0x69, 0xf2, 0xfd, 0x42, 0x9a, 0x7c, 0x7f, 0x1f, 0x96, 0x88, 0x35,
0x39, 0xae, 0x33, 0x56, 0x5a, 0x33, 0x49, 0x81, 0x8b, 0xc8, 0xa2, 0x08, 0xae, 0xd4, 0x09, 0xa5,
0x72, 0x48, 0x16, 0x52, 0x94, 0xda, 0x46, 0x42, 0xd3, 0x20, 0xce, 0x11, 0x69, 0x1a, 0x51, 0x0b,
0xf6, 0x65, 0xdc, 0x42, 0x45, 0x6b, 0x81, 0xe0, 0xd8, 0xc2, 0x7d, 0x58, 0xe2, 0x97, 0xa1, 0x6f,
0x5b, 0xde, 0xc4, 0xfe, 0x62, 0x8a, 0x3e, 0x6f, 0x1b, 0x75, 0xf8, 0xaa, 0xb9, 0x88, 0x19, 0x87,
0x08, 0xdf, 0xb1, 0x43, 0xfb, 0xfe, 0x57, 0x50, 0xd1, 0x1e, 0xc9, 0x67, 0xeb, 0xb0, 0xfc, 0x59,
0xa7, 0xdf, 0x6d, 0xf7, 0x7a, 0xd6, 0xd1, 0xf1, 0xd6, 0x93, 0xf6, 0xe7, 0xd6, 0x5e, 0xab, 0xb7,
0xd7, 0xb8, 0x21, 0x36, 0x6d, 0xb7, 0xdd, 0xeb, 0xb7, 0x77, 0x12, 0xf0, 0x0c, 0x7b, 0x15, 0x36,
0x8e, 0xbb, 0xc7, 0xbd, 0xf6, 0x8e, 0x95, 0x56, 0x2e, 0x2b, 0xa8, 0x54, 0xe6, 0xa7, 0x14, 0xcf,
0xdd, 0xff, 0x15, 0xa8, 0x27, 0xaf, 0x81, 0x33, 0x80, 0x85, 0xfd, 0xf6, 0xc7, 0xad, 0xed, 0xcf,
0xe9, 0x65, 0xd7, 0x5e, 0xbf, 0xd5, 0xef, 0x6c, 0x5b, 0xf2, 0x25, 0x57, 0xc1, 0x11, 0x32, 0xac,
0x02, 0xc5, 0x56, 0x77, 0x7b, 0xef, 0xd0, 0xec, 0x35, 0xb2, 0xec, 0x15, 0x58, 0x57, 0xb4, 0xba,
0x7d, 0x78, 0x70, 0xd0, 0xe9, 0x23, 0x33, 0xec, 0x7f, 0x7e, 0x24, 0x48, 0xf3, 0xbe, 0x0d, 0xe5,
0xf8, 0x29, 0x5a, 0x64, 0x30, 0x9d, 0x7e, 0xa7, 0xd5, 0x8f, 0xb9, 0x6b, 0xe3, 0x86, 0xe0, 0x5f,
0x31, 0x18, 0x5f, 0x92, 0x6d, 0x64, 0xe8, 0xa6, 0x9c, 0x02, 0x52, 0xeb, 0x8d, 0xac, 0xd8, 0x54,
0x31, 0x74, 0xeb, 0xb0, 0x2f, 0x86, 0xf0, 0x3d, 0xa8, 0x27, 0xe3, 0x21, 0x93, 0x86, 0xed, 0x0d,
0x58, 0xdb, 0x6a, 0xf7, 0x3f, 0x6b, 0xb7, 0xbb, 0x38, 0x3b, 0xdb, 0xed, 0x6e, 0xdf, 0x6c, 0xed,
0x77, 0xfa, 0x9f, 0x37, 0x32, 0xf7, 0x3f, 0x82, 0xc6, 0xac, 0xf3, 0x31, 0xe1, 0xad, 0x7d, 0x9e,
0x5b, 0xf7, 0xfe, 0x7f, 0xc9, 0xc0, 0x4a, 0x9a, 0xdd, 0x5d, 0xac, 0xa1, 0xdc, 0x9c, 0x82, 0x45,
0xf7, 0x0e, 0xbb, 0x56, 0xf7, 0x10, 0x9f, 0x8e, 0xdc, 0x80, 0xb5, 0x99, 0x0c, 0xc5, 0x09, 0x32,
0xec, 0x16, 0xac, 0xcf, 0x15, 0xb2, 0xcc, 0xc3, 0x63, 0x1c, 0x76, 0x13, 0x56, 0x66, 0x32, 0xdb,
0xa6, 0x79, 0x68, 0x36, 0x72, 0xec, 0x3d, 0xb8, 0x37, 0x93, 0x33, 0x7f, 0x30, 0xa9, 0x73, 0x2b,
0xcf, 0xde, 0x86, 0xd7, 0xe7, 0xb0, 0x63, 0xde, 0x6d, 0x6d, 0xb5, 0xf6, 0xc5, 0xf0, 0x1a, 0x85,
0xfb, 0xff, 0x24, 0x07, 0x10, 0x5f, 0x38, 0x12, 0xed, 0xef, 0xb4, 0xfa, 0xad, 0xfd, 0x43, 0x41,
0x5e, 0xe6, 0x61, 0x5f, 0xd4, 0x6e, 0xb6, 0x3f, 0x69, 0xdc, 0x48, 0xcd, 0x39, 0x3c, 0x12, 0x03,
0x5a, 0x87, 0x65, 0x5a, 0xaa, 0x7d, 0x31, 0x8c, 0x4e, 0xf7, 0x63, 0x7a, 0x85, 0x14, 0x4f, 0xbf,
0xe3, 0xa3, 0x5d, 0xf3, 0xb0, 0xdb, 0xb7, 0x7a, 0x7b, 0xc7, 0xfd, 0x1d, 0x7c, 0xc3, 0x74, 0xdb,
0xec, 0x1c, 0x51, 0x9d, 0xf9, 0xe7, 0x21, 0x88, 0xaa, 0x0b, 0x62, 0x2f, 0x7c, 0x7c, 0xd8, 0xeb,
0x75, 0x8e, 0xac, 0x4f, 0x8e, 0xdb, 0x66, 0xa7, 0xdd, 0xc3, 0x82, 0x0b, 0x29, 0x70, 0x81, 0x5f,
0x14, 0x67, 0x66, 0x7f, 0xff, 0x53, 0x79, 0xa8, 0x09, 0xd4, 0x52, 0x12, 0x24, 0xb0, 0xca, 0x62,
0x75, 0xc4, 0xa9, 0x90, 0x52, 0x33, 0x5c, 0x93, 0x27, 0xca, 0x55, 0xc4, 0x79, 0x37, 0xb7, 0x49,
0xb0, 0x58, 0x35, 0x3d, 0x4b, 0x94, 0xc2, 0xa3, 0x30, 0x12, 0x1c, 0x76, 0x76, 0x4c, 0x2c, 0x50,
0x9f, 0x83, 0x0a, 0xdc, 0x45, 0x41, 0x84, 0xe2, 0xd8, 0x10, 0x28, 0x0d, 0x95, 0x10, 0x39, 0x4b,
0x8f, 0xfe, 0xe0, 0x1d, 0x28, 0x47, 0x81, 0xc7, 0xec, 0xd7, 0xa0, 0x96, 0xb8, 0x09, 0xca, 0x94,
0x59, 0x30, 0xed, 0xe2, 0xe8, 0xc6, 0x2b, 0xe9, 0x99, 0x52, 0x66, 0x7e, 0xf5, 0x2f, 0xfc, 0xc1,
0x7f, 0xff, 0x5b, 0xd9, 0x26, 0x5b, 0x7b, 0x70, 0xf1, 0xfe, 0x03, 0x79, 0xd3, 0xf2, 0x01, 0xde,
0xdc, 0xa6, 0x97, 0x1b, 0x9f, 0x6a, 0x1a, 0x08, 0x35, 0xf6, 0xca, 0xac, 0x56, 0x90, 0x68, 0xed,
0xf6, 0x35, 0xb9, 0xb2, 0xb9, 0x57, 0xb0, 0xb9, 0x35, 0xb6, 0xa2, 0x37, 0xa7, 0xe2, 0x55, 0x19,
0xc7, 0xe7, 0x54, 0xf5, 0x8f, 0x1a, 0xb2, 0xdb, 0xf1, 0xdb, 0x96, 0x29, 0x1f, 0x3b, 0xdc, 0xb8,
0x39, 0xff, 0xf9, 0x41, 0xf9, 0xbd, 0x42, 0xa3, 0x89, 0x4d, 0x31, 0xd6, 0x10, 0x4d, 0xe9, 0x5f,
0x24, 0x64, 0x27, 0x50, 0xd1, 0xbe, 0xe2, 0xc3, 0x6e, 0x5e, 0xfb, 0xc5, 0xa1, 0x8d, 0x8d, 0xb4,
0xac, 0xb4, 0xa1, 0xe8, 0xf5, 0x3f, 0x38, 0xe5, 0x9c, 0xfd, 0x22, 0x94, 0xa3, 0xef, 0xbd, 0xb0,
0x75, 0xed, 0x5b, 0x3d, 0xfa, 0x57, 0x6b, 0x36, 0x9a, 0xf3, 0x19, 0x4a, 0x09, 0xc2, 0xda, 0x57,
0x8d, 0xb9, 0xde, 0x7f, 0x3f, 0x73, 0x9f, 0x7d, 0x06, 0x15, 0xed, 0x9b, 0x2e, 0xd1, 0x00, 0xe6,
0xbf, 0x1b, 0x13, 0x0d, 0x20, 0xe5, 0x13, 0x30, 0xc6, 0x12, 0x36, 0x51, 0x61, 0x65, 0xd1, 0x04,
0x7e, 0xf2, 0x85, 0xed, 0xc3, 0xaa, 0xd4, 0xb6, 0x4e, 0xf8, 0xd7, 0x59, 0x86, 0x94, 0xaf, 0x40,
0x3e, 0xcc, 0xb0, 0x8f, 0xa0, 0xa4, 0x3e, 0xe8, 0xc3, 0xd6, 0xd2, 0x3f, 0x57, 0xb4, 0xb1, 0x3e,
0x07, 0x97, 0xaa, 0xd1, 0xe7, 0x00, 0xf1, 0x07, 0x64, 0x98, 0x9a, 0xa8, 0xb9, 0x0f, 0xd2, 0x44,
0x14, 0x30, 0xff, 0xb5, 0x19, 0x63, 0x0d, 0x07, 0xd8, 0x60, 0x75, 0x31, 0x40, 0x97, 0x3f, 0x53,
0x6f, 0x5e, 0xff, 0x2a, 0x54, 0xb4, 0x6f, 0xc8, 0x44, 0xd3, 0x37, 0xff, 0xfd, 0x99, 0x68, 0xfa,
0x52, 0x3e, 0x39, 0x63, 0x6c, 0x60, 0xed, 0x2b, 0xc6, 0xa2, 0xa8, 0x5d, 0x88, 0x5b, 0x52, 0xec,
0x11, 0x0b, 0x74, 0x0e, 0xb5, 0xc4, 0x87, 0x62, 0xa2, 0x1d, 0x9a, 0xf6, 0x19, 0x9a, 0x68, 0x87,
0xa6, 0x7e, 0x5b, 0x46, 0xd1, 0x99, 0xb1, 0x24, 0xda, 0xa1, 0x57, 0xad, 0xb4, 0x96, 0x7e, 0x0c,
0x15, 0xed, 0xa3, 0x2f, 0xd1, 0x58, 0xe6, 0xbf, 0x2f, 0x13, 0x8d, 0x25, 0xed, 0x1b, 0x31, 0x2b,
0xd8, 0x46, 0xdd, 0x40, 0x52, 0xc0, 0x47, 0x79, 0x45, 0xdd, 0xbf, 0x06, 0xf5, 0xe4, 0x77, 0x60,
0xa2, 0xbd, 0x9f, 0xfa, 0x41, 0x99, 0x68, 0xef, 0x5f, 0xf3, 0xf1, 0x18, 0x49, 0xd2, 0xf7, 0x97,
0xa3, 0x46, 0x1e, 0x7c, 0x29, 0xaf, 0x50, 0x7d, 0xc5, 0x3e, 0x11, 0x0c, 0x4e, 0x3e, 0x1a, 0xcd,
0xd6, 0x35, 0xaa, 0xd5, 0x5f, 0x9f, 0x8e, 0xf6, 0xcb, 0xdc, 0xfb, 0xd2, 0x49, 0x62, 0xc6, 0xca,
0xd9, 0xc7, 0xb0, 0x1c, 0x11, 0x73, 0xf4, 0x0a, 0x74, 0x10, 0x8d, 0x21, 0xf5, 0xad, 0xe9, 0x8d,
0xc6, 0x6c, 0xee, 0xc3, 0x0c, 0x3b, 0x80, 0xa2, 0x7c, 0x5a, 0x97, 0xad, 0xce, 0x3e, 0xb5, 0x4b,
0xfd, 0x5a, 0x4b, 0x7f, 0x81, 0xd7, 0x58, 0xc6, 0x5e, 0xd5, 0x58, 0x45, 0xf4, 0xea, 0x8c, 0x87,
0x8e, 0xa8, 0xc3, 0x85, 0xc5, 0xd9, 0x27, 0x97, 0x6f, 0x5f, 0xf7, 0x44, 0x05, 0x55, 0xff, 0xea,
0xf3, 0x5f, 0xb0, 0x48, 0xb2, 0x22, 0xc5, 0x4d, 0x1f, 0xc8, 0x88, 0x1d, 0xf6, 0xcb, 0x50, 0xd5,
0xbf, 0x1d, 0xc1, 0x74, 0x9e, 0x30, 0xdb, 0xd2, 0xad, 0xd4, 0xbc, 0x24, 0x95, 0xb0, 0xaa, 0xde,
0x0c, 0xfb, 0x14, 0xd6, 0xa2, 0x69, 0xd6, 0xdf, 0x58, 0x08, 0xd8, 0x9d, 0x94, 0x97, 0x17, 0x12,
0x93, 0x7d, 0xf3, 0xda, 0xa7, 0x19, 0x1e, 0x66, 0x04, 0xf5, 0x25, 0xdf, 0xc9, 0x8f, 0x4f, 0x9e,
0xb4, 0xcf, 0x03, 0xc4, 0x27, 0x4f, 0xea, 0xe3, 0xfa, 0x8a, 0xfa, 0xd8, 0x72, 0x62, 0x8e, 0x28,
0x96, 0x99, 0xfd, 0x18, 0x16, 0xb5, 0x07, 0x24, 0x7a, 0x57, 0xee, 0x20, 0xda, 0x49, 0xf3, 0x8f,
0xa9, 0x6e, 0xa4, 0xd9, 0x27, 0x8d, 0x75, 0xac, 0x7f, 0xc9, 0x48, 0x4c, 0x8e, 0xd8, 0x45, 0xdb,
0x50, 0xd1, 0x1f, 0xa7, 0x78, 0x4e, 0xbd, 0xeb, 0x5a, 0x96, 0xfe, 0x6e, 0xe7, 0xc3, 0x0c, 0xdb,
0x87, 0xc6, 0xec, 0x53, 0x72, 0x11, 0x4f, 0x49, 0x7b, 0x7e, 0x6f, 0x63, 0x26, 0x33, 0xf1, 0x00,
0x1d, 0x3b, 0xa2, 0xdb, 0x30, 0xd1, 0x27, 0x13, 0x3d, 0x7f, 0xf6, 0x54, 0x4f, 0x7e, 0x4a, 0x31,
0xaa, 0x2d, 0xed, 0x23, 0x9a, 0xf7, 0x32, 0x0f, 0x33, 0xec, 0x37, 0x33, 0x50, 0x4d, 0x3c, 0xa5,
0x94, 0xb8, 0x6f, 0x30, 0x33, 0xce, 0xa6, 0x9e, 0xa7, 0x0f, 0xd4, 0x30, 0x71, 0x12, 0xf7, 0xef,
0xff, 0x28, 0xb1, 0x48, 0x5f, 0x26, 0xdc, 0x7b, 0x9b, 0xb3, 0xdf, 0x54, 0xfc, 0x6a, 0x16, 0x41,
0x7f, 0x9e, 0xf7, 0xab, 0x87, 0x19, 0xf6, 0xcf, 0x33, 0x50, 0x4f, 0xfa, 0xed, 0xa3, 0xe1, 0xa6,
0x46, 0x08, 0x44, 0xa4, 0x74, 0x8d, 0xb3, 0xff, 0xc7, 0xd8, 0xcb, 0xfe, 0x7d, 0x33, 0xd1, 0x4b,
0xf9, 0x85, 0x87, 0x3f, 0x5b, 0x6f, 0xd9, 0xcf, 0xd3, 0x27, 0x8c, 0x55, 0xfc, 0x17, 0x9b, 0xff,
0xe4, 0x6d, 0x44, 0x7e, 0xfa, 0x07, 0x62, 0x8d, 0xdc, 0x5f, 0xcd, 0x66, 0x70, 0x25, 0x7e, 0x95,
0x3e, 0x20, 0xa8, 0x42, 0x80, 0x04, 0x29, 0xbf, 0x74, 0x25, 0x6f, 0xe0, 0xc0, 0x5e, 0x35, 0x6e,
0x26, 0x06, 0x36, 0x2b, 0x7d, 0xec, 0x52, 0x17, 0xe5, 0x47, 0x5e, 0xe3, 0xe3, 0x73, 0xee, 0xc3,
0xaf, 0x2f, 0xe8, 0xe9, 0x98, 0x7a, 0x2a, 0xcb, 0x24, 0x36, 0xdd, 0xcb, 0xd6, 0x75, 0x1f, 0x3b,
0xfc, 0x86, 0x71, 0xe7, 0xda, 0x0e, 0x3f, 0x40, 0x6f, 0xbc, 0xe8, 0xf6, 0x11, 0x40, 0x1c, 0xa9,
0xc9, 0x66, 0xe2, 0x05, 0x23, 0x56, 0x34, 0x1f, 0xcc, 0x99, 0xdc, 0xd9, 0x2a, 0xac, 0x50, 0xd4,
0xf8, 0x8b, 0xc4, 0x58, 0xa3, 0x48, 0x46, 0x5d, 0x0e, 0x4b, 0x06, 0x55, 0x26, 0xe4, 0xb0, 0xd9,
0xfa, 0x13, 0x6c, 0x35, 0x0a, 0x5b, 0x3c, 0x86, 0xda, 0xbe, 0xe7, 0x3d, 0x9d, 0x4e, 0xa2, 0xdb,
0x01, 0xc9, 0xe0, 0x9b, 0x3d, 0x3b, 0x38, 0xdf, 0x98, 0x19, 0x85, 0x71, 0x17, 0xab, 0xda, 0x60,
0x4d, 0xad, 0xaa, 0x07, 0x5f, 0xc6, 0xe1, 0xa1, 0x5f, 0x31, 0x1b, 0x96, 0x22, 0x6e, 0x1d, 0x87,
0x60, 0x26, 0xab, 0x49, 0xf0, 0xe8, 0xd9, 0x26, 0x12, 0x0a, 0x83, 0xea, 0xed, 0x83, 0x40, 0xd5,
0xf9, 0x30, 0xc3, 0x8e, 0xa0, 0xba, 0xc3, 0x07, 0xf8, 0xbc, 0x04, 0x06, 0x9a, 0x2c, 0x27, 0x82,
0x16, 0x28, 0x42, 0x65, 0xa3, 0x96, 0x00, 0x26, 0x4f, 0xb0, 0x89, 0x7d, 0xe5, 0xf3, 0x2f, 0x1e,
0x7c, 0x29, 0x43, 0x58, 0xbe, 0x52, 0x27, 0x58, 0x1c, 0xce, 0xa4, 0x8b, 0x01, 0xc9, 0x98, 0xa0,
0xc4, 0x09, 0x36, 0x17, 0x13, 0x94, 0x98, 0xea, 0x28, 0x78, 0x69, 0x04, 0x4b, 0x73, 0x61, 0x44,
0xd1, 0xe1, 0x75, 0x5d, 0xf0, 0xd1, 0xc6, 0xdd, 0xeb, 0x11, 0x92, 0xad, 0xdd, 0x4f, 0xb6, 0xd6,
0x83, 0x1a, 0xbd, 0xc2, 0x7b, 0xc2, 0xe9, 0xa2, 0xe9, 0xcc, 0x2b, 0x4d, 0xfa, 0x2d, 0xd6, 0xd9,
0xa3, 0x06, 0xf3, 0x92, 0xb2, 0x0e, 0x5e, 0x35, 0x64, 0xa7, 0xf8, 0x6d, 0x0a, 0xed, 0x66, 0x67,
0x44, 0x8c, 0xf3, 0xb7, 0x4d, 0x23, 0x62, 0x4c, 0xb9, 0x08, 0x6a, 0xdc, 0xc6, 0xba, 0xd7, 0xd9,
0x6a, 0x54, 0xf7, 0x03, 0xd7, 0x1b, 0xf2, 0xb1, 0xac, 0xf5, 0x17, 0xa1, 0xf2, 0x31, 0x0f, 0xd5,
0x55, 0xca, 0x48, 0xaa, 0x9f, 0xb9, 0x5b, 0xb9, 0x91, 0x72, 0x01, 0x36, 0x49, 0x9b, 0x54, 0x33,
0x1f, 0x9e, 0x71, 0x62, 0x87, 0x96, 0x33, 0xfc, 0x8a, 0xfd, 0x02, 0x56, 0x1e, 0x3d, 0x1c, 0xb0,
0xa6, 0x75, 0x53, 0xaf, 0x7c, 0x71, 0x06, 0x9e, 0x56, 0xb3, 0xe8, 0xb3, 0x26, 0x5d, 0xba, 0x50,
0xd1, 0x1e, 0x18, 0x89, 0xe6, 0x66, 0xfe, 0x41, 0x99, 0x68, 0x6e, 0x52, 0xde, 0x23, 0x31, 0xee,
0x61, 0x3b, 0x06, 0xbb, 0x1b, 0xb7, 0x43, 0x6f, 0x90, 0xc4, 0x2d, 0x3d, 0xf8, 0xd2, 0x1e, 0x87,
0x5f, 0xb1, 0xcf, 0x68, 0x39, 0xb4, 0xab, 0xa2, 0xb1, 0x9a, 0x32, 0x7b, 0xab, 0x34, 0x9a, 0x2c,
0x2d, 0x2b, 0xa9, 0xba, 0x50, 0x53, 0x28, 0x3b, 0x3e, 0x06, 0xe8, 0x85, 0xde, 0x64, 0xc7, 0xe6,
0x63, 0xcf, 0x8d, 0x19, 0x7b, 0x7c, 0x79, 0x31, 0xe6, 0x93, 0xda, 0x0d, 0x46, 0xf6, 0x99, 0xa6,
0xd7, 0x25, 0x2e, 0x39, 0x2b, 0x22, 0xbe, 0xf6, 0x7e, 0x63, 0x34, 0x21, 0x29, 0x77, 0x1c, 0x1f,
0x66, 0x58, 0x0b, 0x20, 0x8e, 0x57, 0x8b, 0xb4, 0xb4, 0xb9, 0x50, 0xb8, 0x88, 0xbd, 0xa6, 0x04,
0xb7, 0x1d, 0x41, 0x39, 0x0e, 0xf4, 0x59, 0x8f, 0xdf, 0x4b, 0x4a, 0x84, 0x05, 0x45, 0x32, 0xc3,
0x5c, 0x90, 0x8d, 0xd1, 0xc0, 0xa9, 0x02, 0x56, 0x12, 0x53, 0x75, 0xca, 0x79, 0xc0, 0x1c, 0x58,
0xa6, 0x0e, 0x46, 0x02, 0x1a, 0x5e, 0xba, 0x8b, 0xbe, 0x08, 0x33, 0x1f, 0xef, 0x12, 0x71, 0x8d,
0xd4, 0xa8, 0x8d, 0x9b, 0xd8, 0xc2, 0xb2, 0x51, 0x57, 0xa7, 0x0c, 0x5d, 0xf8, 0x13, 0x47, 0xc0,
0x18, 0x96, 0xe6, 0x02, 0x03, 0x22, 0xd6, 0x71, 0x5d, 0xa4, 0x47, 0xc4, 0x3a, 0xae, 0x8d, 0x29,
0x30, 0x56, 0xb1, 0xc9, 0x45, 0x03, 0x50, 0xb9, 0x7c, 0xe6, 0x84, 0x83, 0x73, 0xd1, 0xdc, 0x6f,
0x67, 0x60, 0x39, 0xc5, 0xf5, 0xcf, 0x5e, 0x53, 0x76, 0x8a, 0x6b, 0xc3, 0x02, 0x36, 0x52, 0x5d,
0xc4, 0x46, 0x0f, 0xdb, 0x39, 0x60, 0x4f, 0x12, 0x07, 0x28, 0x79, 0x68, 0xe5, 0xce, 0x7c, 0xae,
0x18, 0x93, 0x2a, 0xc3, 0x7c, 0x01, 0xeb, 0xd4, 0x91, 0xd6, 0x68, 0x34, 0xe3, 0xbe, 0x7e, 0x55,
0xeb, 0x45, 0x8a, 0x4b, 0x3e, 0xa1, 0x11, 0x24, 0xdd, 0xf2, 0xd7, 0x08, 0xf0, 0xd4, 0x55, 0x36,
0x85, 0xc6, 0xac, 0x5b, 0x98, 0x5d, 0x5f, 0xd7, 0xc6, 0x9d, 0x84, 0xc6, 0x9d, 0xe2, 0x4a, 0x7e,
0x13, 0x1b, 0xbb, 0x63, 0x6c, 0xa4, 0xcd, 0x0b, 0x29, 0xe1, 0x62, 0x3d, 0xfe, 0x7c, 0xe4, 0xc3,
0x9e, 0x19, 0xe7, 0x9d, 0xe8, 0x89, 0xfb, 0x74, 0x8f, 0x7b, 0xa4, 0xf3, 0xa7, 0xbb, 0xc0, 0xdf,
0xc2, 0xe6, 0xef, 0x1a, 0xb7, 0xd2, 0x9a, 0xf7, 0xa9, 0x08, 0x69, 0xff, 0xeb, 0xb3, 0xfb, 0x5a,
0xf5, 0xe0, 0x6e, 0xda, 0x7a, 0x5f, 0xab, 0x7d, 0xcd, 0xcc, 0xf5, 0x0d, 0x14, 0x24, 0xab, 0xba,
0xcf, 0x3a, 0xda, 0x3e, 0x29, 0xce, 0xf1, 0x68, 0xfb, 0xa4, 0x39, 0xb9, 0x93, 0xf2, 0x93, 0x72,
0x6f, 0x7f, 0x3f, 0x73, 0x7f, 0xeb, 0xed, 0x1f, 0xbf, 0x79, 0xe6, 0x84, 0xe7, 0xd3, 0x93, 0xcd,
0x81, 0x37, 0x7e, 0x30, 0x52, 0xf6, 0x4d, 0x79, 0x33, 0xfd, 0xc1, 0xc8, 0x1d, 0x3e, 0xc0, 0x6a,
0x4f, 0x16, 0x26, 0xbe, 0x17, 0x7a, 0xdf, 0xfe, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x06, 0xce,
0x0f, 0x99, 0x57, 0x87, 0x00, 0x00,
// 11204 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x4d, 0x6c, 0x23, 0x49,
0x96, 0x18, 0x5c, 0xfc, 0x13, 0xc9, 0x47, 0x52, 0xa2, 0x42, 0x7f, 0x2c, 0x55, 0x57, 0x57, 0x75,
0x76, 0x4f, 0x77, 0x4d, 0x75, 0x8f, 0xba, 0xba, 0xa6, 0xab, 0x7f, 0xa6, 0xbe, 0xed, 0x19, 0x4a,
0xa2, 0x4a, 0x9c, 0x92, 0x48, 0x75, 0x92, 0xaa, 0xde, 0x5e, 0xec, 0xb7, 0xe9, 0x14, 0x19, 0x92,
0xd2, 0x45, 0x66, 0xb2, 0x33, 0x93, 0x2a, 0x69, 0x0c, 0xdf, 0xfc, 0x87, 0x85, 0x6d, 0xc0, 0x80,
0xd7, 0x80, 0x7f, 0x16, 0xfe, 0x59, 0xd8, 0xbe, 0x2d, 0x0c, 0xcf, 0xda, 0x80, 0x01, 0x9f, 0xbd,
0x17, 0x1b, 0x86, 0xe1, 0xf5, 0xc1, 0xc6, 0x62, 0x01, 0x1f, 0xbc, 0xbe, 0x19, 0x0b, 0xf8, 0xe4,
0x83, 0x0d, 0x23, 0xde, 0x8b, 0xc8, 0x8c, 0x24, 0x53, 0x55, 0xd5, 0xb3, 0xed, 0xb9, 0x48, 0xcc,
0xf7, 0x5e, 0xfc, 0x64, 0xc4, 0x8b, 0x17, 0xef, 0x2f, 0x22, 0xa1, 0xec, 0x4f, 0x06, 0x5b, 0x13,
0xdf, 0x0b, 0x3d, 0x56, 0x18, 0xb9, 0xfe, 0x64, 0x60, 0xfc, 0x71, 0x06, 0xf2, 0xc7, 0xe1, 0xa5,
0xc7, 0x1e, 0x41, 0xd5, 0x1e, 0x0e, 0x7d, 0x1e, 0x04, 0x56, 0x78, 0x35, 0xe1, 0x8d, 0xcc, 0xdd,
0xcc, 0xbd, 0xc5, 0x87, 0x6c, 0x0b, 0xc9, 0xb6, 0x9a, 0x84, 0xea, 0x5f, 0x4d, 0xb8, 0x59, 0xb1,
0xe3, 0x07, 0xd6, 0x80, 0xa2, 0x7c, 0x6c, 0x64, 0xef, 0x66, 0xee, 0x95, 0x4d, 0xf5, 0xc8, 0x6e,
0x03, 0xd8, 0x63, 0x6f, 0xea, 0x86, 0x56, 0x60, 0x87, 0x8d, 0xdc, 0xdd, 0xcc, 0xbd, 0x9c, 0x59,
0x26, 0x48, 0xcf, 0x0e, 0xd9, 0x2d, 0x28, 0x4f, 0x9e, 0x5b, 0xc1, 0xc0, 0x77, 0x26, 0x61, 0x23,
0x8f, 0x45, 0x4b, 0x93, 0xe7, 0x3d, 0x7c, 0x66, 0xef, 0x43, 0xc9, 0x9b, 0x86, 0x13, 0xcf, 0x71,
0xc3, 0x46, 0xe1, 0x6e, 0xe6, 0x5e, 0xe5, 0xe1, 0x92, 0xec, 0x48, 0x77, 0x1a, 0x1e, 0x09, 0xb0,
0x19, 0x11, 0xb0, 0x77, 0xa0, 0x36, 0xf0, 0xdc, 0x53, 0xc7, 0x1f, 0xdb, 0xa1, 0xe3, 0xb9, 0x41,
0x63, 0x01, 0xdb, 0x4a, 0x02, 0x8d, 0x7f, 0x93, 0x85, 0x4a, 0xdf, 0xb7, 0xdd, 0xc0, 0x1e, 0x08,
0x00, 0xdb, 0x80, 0x62, 0x78, 0x69, 0x9d, 0xdb, 0xc1, 0x39, 0xbe, 0x6a, 0xd9, 0x5c, 0x08, 0x2f,
0xf7, 0xed, 0xe0, 0x9c, 0xad, 0xc3, 0x02, 0xf5, 0x12, 0x5f, 0x28, 0x67, 0xca, 0x27, 0xf6, 0x3e,
0x2c, 0xbb, 0xd3, 0xb1, 0x95, 0x6c, 0x4a, 0xbc, 0x56, 0xc1, 0xac, 0xbb, 0xd3, 0xf1, 0x8e, 0x0e,
0x17, 0x2f, 0x7f, 0x32, 0xf2, 0x06, 0xcf, 0xa9, 0x01, 0x7a, 0xbd, 0x32, 0x42, 0xb0, 0x8d, 0xb7,
0xa0, 0x2a, 0xd1, 0xdc, 0x39, 0x3b, 0xa7, 0x77, 0x2c, 0x98, 0x15, 0x22, 0x40, 0x90, 0xa8, 0x21,
0x74, 0xc6, 0xdc, 0x0a, 0x42, 0x7b, 0x3c, 0x91, 0xaf, 0x54, 0x16, 0x90, 0x9e, 0x00, 0x20, 0xda,
0x0b, 0xed, 0x91, 0x75, 0xca, 0x79, 0xd0, 0x28, 0x4a, 0xb4, 0x80, 0xec, 0x71, 0x1e, 0xb0, 0xef,
0xc1, 0xe2, 0x90, 0x07, 0xa1, 0x25, 0x27, 0x83, 0x07, 0x8d, 0xd2, 0xdd, 0xdc, 0xbd, 0xb2, 0x59,
0x13, 0xd0, 0xa6, 0x02, 0xb2, 0x37, 0x00, 0x7c, 0xfb, 0x85, 0x25, 0x06, 0x82, 0x5f, 0x36, 0xca,
0x34, 0x0b, 0xbe, 0xfd, 0xa2, 0x7f, 0xb9, 0xcf, 0x2f, 0xd9, 0x2a, 0x14, 0x46, 0xf6, 0x09, 0x1f,
0x35, 0x00, 0x11, 0xf4, 0x60, 0xfc, 0x1a, 0xac, 0x3f, 0xe1, 0xa1, 0x36, 0x94, 0x81, 0xc9, 0xbf,
0x99, 0xf2, 0x20, 0x14, 0x6f, 0x15, 0x84, 0xb6, 0x1f, 0xaa, 0xb7, 0xca, 0xd0, 0x5b, 0x21, 0x2c,
0x7e, 0x2b, 0xee, 0x0e, 0x15, 0x41, 0x16, 0x09, 0xca, 0xdc, 0x1d, 0x12, 0xda, 0x38, 0x00, 0xa6,
0x55, 0xbc, 0xcb, 0x43, 0xdb, 0x19, 0x05, 0xec, 0x13, 0xa8, 0x86, 0x5a, 0x73, 0x8d, 0xcc, 0xdd,
0xdc, 0xbd, 0x4a, 0xc4, 0x9a, 0x5a, 0x01, 0x33, 0x41, 0x67, 0x9c, 0x43, 0x69, 0x8f, 0xf3, 0x03,
0x67, 0xec, 0x84, 0x6c, 0x1d, 0x0a, 0xa7, 0xce, 0x25, 0x1f, 0x62, 0xa7, 0x72, 0xfb, 0x37, 0x4c,
0x7a, 0x64, 0x77, 0x00, 0xf0, 0x87, 0x35, 0x8e, 0xb8, 0x74, 0xff, 0x86, 0x59, 0x46, 0xd8, 0x61,
0x60, 0x87, 0x6c, 0x13, 0x8a, 0x13, 0xee, 0x0f, 0xb8, 0xe2, 0x87, 0xfd, 0x1b, 0xa6, 0x02, 0x6c,
0x17, 0xa1, 0x30, 0x12, 0xb5, 0x1b, 0xbf, 0x5f, 0x80, 0x4a, 0x8f, 0xbb, 0x43, 0x35, 0x12, 0x0c,
0xf2, 0x62, 0xa0, 0xb1, 0xb1, 0xaa, 0x89, 0xbf, 0xd9, 0xdb, 0x50, 0xc1, 0x29, 0x09, 0x42, 0xdf,
0x71, 0xcf, 0x68, 0xb5, 0x6c, 0x67, 0x1b, 0x19, 0x13, 0x04, 0xb8, 0x87, 0x50, 0x56, 0x87, 0x9c,
0x3d, 0x56, 0xab, 0x45, 0xfc, 0x64, 0x37, 0xa1, 0x64, 0x8f, 0x43, 0xea, 0x5e, 0x15, 0xc1, 0x45,
0x7b, 0x1c, 0x62, 0xd7, 0xde, 0x82, 0xea, 0xc4, 0xbe, 0x1a, 0x73, 0x37, 0x8c, 0xd9, 0xac, 0x6a,
0x56, 0x24, 0x0c, 0x19, 0xed, 0x21, 0xac, 0xe8, 0x24, 0xaa, 0xf1, 0x42, 0xd4, 0xf8, 0xb2, 0x46,
0x2d, 0xfb, 0xf0, 0x1e, 0x2c, 0xa9, 0x32, 0x3e, 0xbd, 0x0f, 0xb2, 0x5f, 0xd9, 0x5c, 0x94, 0x60,
0xf5, 0x96, 0xf7, 0xa0, 0x7e, 0xea, 0xb8, 0xf6, 0xc8, 0x1a, 0x8c, 0xc2, 0x0b, 0x6b, 0xc8, 0x47,
0xa1, 0x8d, 0x9c, 0x58, 0x30, 0x17, 0x11, 0xbe, 0x33, 0x0a, 0x2f, 0x76, 0x05, 0x94, 0x7d, 0x00,
0xe5, 0x53, 0xce, 0x2d, 0x1c, 0xac, 0x46, 0x29, 0xb1, 0xa0, 0xd5, 0x0c, 0x99, 0xa5, 0x53, 0x35,
0x57, 0x1f, 0x40, 0xdd, 0x9b, 0x86, 0x67, 0x9e, 0xe3, 0x9e, 0x59, 0x83, 0x73, 0xdb, 0xb5, 0x9c,
0x21, 0xf2, 0x66, 0x7e, 0x3b, 0xfb, 0x20, 0x63, 0x2e, 0x2a, 0xdc, 0xce, 0xb9, 0xed, 0xb6, 0x87,
0xec, 0x5d, 0x58, 0x1a, 0xd9, 0x41, 0x68, 0x9d, 0x7b, 0x13, 0x6b, 0x32, 0x3d, 0x79, 0xce, 0xaf,
0x1a, 0x35, 0x1c, 0x88, 0x9a, 0x00, 0xef, 0x7b, 0x93, 0x23, 0x04, 0x0a, 0xd6, 0xc3, 0x7e, 0x52,
0x27, 0x04, 0x4b, 0xd7, 0xcc, 0xb2, 0x80, 0x50, 0xa3, 0x5f, 0xc3, 0x0a, 0x4e, 0xcf, 0x60, 0x1a,
0x84, 0xde, 0xd8, 0xf2, 0xf9, 0xc0, 0xf3, 0x87, 0x41, 0xa3, 0x82, 0xbc, 0xf6, 0x7d, 0xd9, 0x59,
0x6d, 0x8e, 0xb7, 0x76, 0x79, 0x10, 0xee, 0x20, 0xb1, 0x49, 0xb4, 0x2d, 0x37, 0xf4, 0xaf, 0xcc,
0xe5, 0xe1, 0x2c, 0x9c, 0x7d, 0x00, 0xcc, 0x1e, 0x8d, 0xbc, 0x17, 0x56, 0xc0, 0x47, 0xa7, 0x96,
0x1c, 0xc4, 0xc6, 0xe2, 0xdd, 0xcc, 0xbd, 0x92, 0x59, 0x47, 0x4c, 0x8f, 0x8f, 0x4e, 0x8f, 0x08,
0xce, 0x3e, 0x01, 0x5c, 0xa4, 0xd6, 0x29, 0xb7, 0xc3, 0xa9, 0xcf, 0x83, 0xc6, 0xd2, 0xdd, 0xdc,
0xbd, 0xc5, 0x87, 0xcb, 0xd1, 0x78, 0x21, 0x78, 0xdb, 0x09, 0xcd, 0xaa, 0xa0, 0x93, 0xcf, 0xc1,
0xe6, 0x2e, 0xac, 0xa7, 0x77, 0x49, 0x30, 0x95, 0x18, 0x15, 0xc1, 0x8c, 0x79, 0x53, 0xfc, 0x14,
0x2b, 0xfb, 0xc2, 0x1e, 0x4d, 0x39, 0x72, 0x61, 0xd5, 0xa4, 0x87, 0x1f, 0x65, 0x3f, 0xcb, 0x18,
0xbf, 0x97, 0x81, 0x2a, 0xbd, 0x65, 0x30, 0xf1, 0xdc, 0x80, 0xb3, 0xb7, 0xa1, 0xa6, 0xb8, 0x81,
0xfb, 0xbe, 0xe7, 0x4b, 0x69, 0xa9, 0x38, 0xaf, 0x25, 0x60, 0xec, 0xfb, 0x50, 0x57, 0x44, 0x13,
0x9f, 0x3b, 0x63, 0xfb, 0x4c, 0x55, 0xad, 0x58, 0xe9, 0x48, 0x82, 0xd9, 0x47, 0x71, 0x7d, 0xbe,
0x37, 0x0d, 0x39, 0xf2, 0x7a, 0xe5, 0x61, 0x55, 0xbe, 0x9e, 0x29, 0x60, 0x51, 0xed, 0xf8, 0xf4,
0x1a, 0x7c, 0x6e, 0xfc, 0x56, 0x06, 0x98, 0xe8, 0x76, 0xdf, 0xa3, 0x0a, 0x62, 0x89, 0x94, 0x28,
0x99, 0x79, 0xed, 0x15, 0x92, 0x7d, 0xd9, 0x0a, 0x31, 0xa0, 0x40, 0x7d, 0xcf, 0xa7, 0xf4, 0x9d,
0x50, 0x3f, 0xcd, 0x97, 0x72, 0xf5, 0xbc, 0xf1, 0x5f, 0x72, 0xb0, 0x2a, 0xf8, 0xd4, 0xe5, 0xa3,
0xe6, 0x60, 0xc0, 0x27, 0xd1, 0xda, 0xb9, 0x03, 0x15, 0xd7, 0x1b, 0x72, 0xc5, 0xb1, 0xd4, 0x31,
0x10, 0x20, 0x8d, 0x5d, 0xcf, 0x6d, 0xc7, 0xa5, 0x8e, 0xd3, 0x60, 0x96, 0x11, 0x82, 0xdd, 0x7e,
0x17, 0x96, 0x26, 0xdc, 0x1d, 0xea, 0x4b, 0x24, 0x47, 0x5c, 0x2f, 0xc1, 0x72, 0x75, 0xdc, 0x81,
0xca, 0xe9, 0x94, 0xe8, 0x84, 0x60, 0xc9, 0x23, 0x0f, 0x80, 0x04, 0x35, 0x49, 0xbe, 0x4c, 0xa6,
0xc1, 0x39, 0x62, 0x0b, 0x88, 0x2d, 0x8a, 0x67, 0x81, 0xba, 0x0d, 0x30, 0x9c, 0x06, 0xa1, 0x5c,
0x31, 0x0b, 0x88, 0x2c, 0x0b, 0x08, 0xad, 0x98, 0x1f, 0xc0, 0xca, 0xd8, 0xbe, 0xb4, 0x90, 0x77,
0x2c, 0xc7, 0xb5, 0x4e, 0x47, 0x28, 0xd4, 0x8b, 0x48, 0x57, 0x1f, 0xdb, 0x97, 0xcf, 0x04, 0xa6,
0xed, 0xee, 0x21, 0x5c, 0x88, 0x95, 0x01, 0x8d, 0x84, 0xe5, 0xf3, 0x80, 0xfb, 0x17, 0x1c, 0x25,
0x41, 0xde, 0x5c, 0x94, 0x60, 0x93, 0xa0, 0xa2, 0x47, 0x63, 0xf1, 0xde, 0xe1, 0x68, 0x40, 0xcb,
0xde, 0x2c, 0x8e, 0x1d, 0x77, 0x3f, 0x1c, 0x0d, 0xc4, 0x7e, 0x25, 0xe4, 0xc8, 0x84, 0xfb, 0xd6,
0xf3, 0x17, 0xb8, 0x86, 0xf3, 0x28, 0x37, 0x8e, 0xb8, 0xff, 0xf4, 0x85, 0x50, 0x29, 0x06, 0x01,
0x0a, 0x22, 0xfb, 0xaa, 0x51, 0xc1, 0x05, 0x5e, 0x1a, 0x04, 0x42, 0x04, 0xd9, 0x57, 0x62, 0x11,
0x8a, 0xde, 0xda, 0x38, 0x0b, 0x7c, 0x88, 0xd5, 0x07, 0x28, 0x51, 0x6b, 0xd8, 0xd9, 0xa6, 0x44,
0x88, 0x76, 0x02, 0xc1, 0xf5, 0xaa, 0xb3, 0xa7, 0x23, 0xfb, 0x2c, 0x40, 0x91, 0x52, 0x33, 0xab,
0x12, 0xb8, 0x27, 0x60, 0xc6, 0x57, 0xb0, 0x36, 0x33, 0xb7, 0x72, 0xcd, 0x08, 0x15, 0x02, 0x21,
0x38, 0xaf, 0x25, 0x53, 0x3e, 0xa5, 0x4d, 0x5a, 0x36, 0x65, 0xd2, 0x8c, 0xdf, 0xce, 0x40, 0x55,
0xd6, 0x8c, 0xca, 0x0e, 0xdb, 0x02, 0xa6, 0x66, 0x31, 0xbc, 0x74, 0x86, 0xd6, 0xc9, 0x55, 0xc8,
0x03, 0x62, 0x9a, 0xfd, 0x1b, 0x66, 0x5d, 0xe2, 0xfa, 0x97, 0xce, 0x70, 0x5b, 0x60, 0xd8, 0x7d,
0xa8, 0x27, 0xe8, 0x83, 0xd0, 0x27, 0x8e, 0xde, 0xbf, 0x61, 0x2e, 0x6a, 0xd4, 0xbd, 0xd0, 0x17,
0x6b, 0x44, 0xa8, 0x52, 0xd3, 0xd0, 0x72, 0xdc, 0x21, 0xbf, 0x44, 0x36, 0xaa, 0x99, 0x15, 0x82,
0xb5, 0x05, 0x68, 0x7b, 0x11, 0xaa, 0x7a, 0x75, 0xc6, 0x19, 0x94, 0x94, 0x1e, 0x86, 0x8a, 0xc8,
0x4c, 0x97, 0xcc, 0x72, 0x18, 0xf5, 0xe4, 0x26, 0x94, 0x92, 0x3d, 0x30, 0x8b, 0xe1, 0x6b, 0x37,
0x6c, 0x7c, 0x01, 0xf5, 0x03, 0xc1, 0x3c, 0xae, 0x60, 0x56, 0xa9, 0x57, 0xae, 0xc3, 0x82, 0xb6,
0x68, 0xca, 0xa6, 0x7c, 0x12, 0x7b, 0xee, 0xb9, 0x17, 0x84, 0xb2, 0x15, 0xfc, 0x6d, 0xfc, 0x7e,
0x06, 0x58, 0x2b, 0x08, 0x9d, 0xb1, 0x1d, 0xf2, 0x3d, 0x1e, 0x89, 0x85, 0x2e, 0x54, 0x45, 0x6d,
0x7d, 0xaf, 0x49, 0x8a, 0x1e, 0x29, 0x14, 0xef, 0xcb, 0x65, 0x3c, 0x5f, 0x60, 0x4b, 0xa7, 0x26,
0x31, 0x9f, 0xa8, 0x40, 0xac, 0xb2, 0xd0, 0xf6, 0xcf, 0x78, 0x88, 0xea, 0xa1, 0xd4, 0x6b, 0x80,
0x40, 0x42, 0x31, 0xdc, 0xfc, 0x31, 0x2c, 0xcf, 0xd5, 0xa1, 0xcb, 0xe5, 0x72, 0x8a, 0x5c, 0xce,
0xe9, 0x72, 0xd9, 0x82, 0x95, 0x44, 0xbf, 0x24, 0xa7, 0x6d, 0x40, 0x51, 0x2c, 0x08, 0xa1, 0x1c,
0x64, 0x48, 0x5b, 0x3d, 0xe5, 0x5c, 0xa8, 0xd7, 0x1f, 0xc2, 0xea, 0x29, 0xe7, 0xbe, 0x1d, 0x22,
0x12, 0x57, 0x8c, 0x98, 0x21, 0x59, 0xf1, 0xb2, 0xc4, 0xf5, 0xec, 0xf0, 0x88, 0xfb, 0x62, 0xa6,
0x8c, 0xff, 0x95, 0x81, 0x25, 0x21, 0x41, 0x0f, 0x6d, 0xf7, 0x4a, 0x8d, 0xd3, 0x41, 0xea, 0x38,
0xdd, 0xd3, 0x36, 0x43, 0x8d, 0xfa, 0xdb, 0x0e, 0x52, 0x6e, 0x76, 0x90, 0xd8, 0x5d, 0xa8, 0x26,
0xfa, 0x5a, 0xc0, 0xbe, 0x42, 0x10, 0x75, 0x32, 0xd6, 0x48, 0x17, 0x34, 0x8d, 0xf4, 0x4f, 0x3f,
0xb8, 0xef, 0x42, 0x3d, 0x7e, 0x19, 0x39, 0xb2, 0x0c, 0xf2, 0x82, 0x51, 0x65, 0x05, 0xf8, 0xdb,
0xf8, 0xe7, 0x19, 0x22, 0xdc, 0xf1, 0x9c, 0x58, 0xeb, 0x65, 0x90, 0x17, 0x5a, 0xb6, 0x22, 0x14,
0xbf, 0xaf, 0xb5, 0x21, 0xbe, 0x83, 0x21, 0xb8, 0x09, 0xa5, 0x40, 0xa8, 0xd0, 0xf6, 0x88, 0x46,
0xa1, 0x64, 0x16, 0xc5, 0x73, 0x73, 0x34, 0x8a, 0x47, 0xa7, 0xa8, 0xeb, 0xeb, 0xef, 0xc1, 0xb2,
0xd6, 0xe7, 0x97, 0xbc, 0x5d, 0x07, 0xd8, 0x81, 0x13, 0x84, 0xc7, 0x6e, 0x30, 0xd1, 0x94, 0xbc,
0x5b, 0x50, 0x16, 0xd2, 0x58, 0xf4, 0x37, 0x90, 0x1a, 0xbd, 0x10, 0xcf, 0xa2, 0xb7, 0x01, 0x22,
0xed, 0x4b, 0x89, 0xcc, 0x4a, 0xa4, 0x7d, 0x89, 0x48, 0xe3, 0x33, 0x58, 0x49, 0xd4, 0x27, 0x9b,
0x7e, 0x0b, 0x0a, 0xd3, 0xf0, 0xd2, 0x53, 0x6a, 0x7c, 0x45, 0x72, 0x93, 0x30, 0x42, 0x4d, 0xc2,
0x18, 0x8f, 0x61, 0xb9, 0xc3, 0x5f, 0xc8, 0x05, 0xaf, 0x3a, 0xf2, 0x2e, 0xe4, 0x5f, 0x61, 0x98,
0x22, 0xde, 0xd8, 0x02, 0xa6, 0x17, 0x96, 0xad, 0x6a, 0x76, 0x6a, 0x26, 0x61, 0xa7, 0x1a, 0xef,
0x02, 0xeb, 0x39, 0x67, 0xee, 0x21, 0x0f, 0x02, 0xfb, 0x2c, 0x12, 0x11, 0x75, 0xc8, 0x8d, 0x83,
0x33, 0x29, 0xcf, 0xc4, 0x4f, 0xe3, 0x87, 0xb0, 0x92, 0xa0, 0x93, 0x15, 0xbf, 0x01, 0xe5, 0xc0,
0x39, 0x73, 0x51, 0x09, 0x93, 0x55, 0xc7, 0x00, 0x63, 0x0f, 0x56, 0x9f, 0x71, 0xdf, 0x39, 0xbd,
0x7a, 0x55, 0xf5, 0xc9, 0x7a, 0xb2, 0xb3, 0xf5, 0xb4, 0x60, 0x6d, 0xa6, 0x1e, 0xd9, 0x3c, 0x31,
0xb5, 0x9c, 0xc9, 0x92, 0x49, 0x0f, 0x9a, 0x8c, 0xcc, 0xea, 0x32, 0xd2, 0x38, 0x06, 0xb6, 0xe3,
0xb9, 0x2e, 0x1f, 0x84, 0x47, 0x9c, 0xfb, 0xaa, 0x33, 0xef, 0x6b, 0x1c, 0x5c, 0x79, 0xb8, 0x21,
0x47, 0x76, 0x56, 0xf0, 0x4a, 0xd6, 0x66, 0x90, 0x9f, 0x70, 0x7f, 0x8c, 0x15, 0x97, 0x4c, 0xfc,
0x6d, 0xac, 0xc1, 0x4a, 0xa2, 0x5a, 0xea, 0x9b, 0xf1, 0x00, 0xd6, 0x76, 0x9d, 0x60, 0x30, 0xdf,
0xe0, 0x06, 0x14, 0x27, 0xd3, 0x13, 0x2b, 0x29, 0xc3, 0x9f, 0xf2, 0x2b, 0xa3, 0x01, 0xeb, 0xb3,
0x25, 0x64, 0x5d, 0x7f, 0x21, 0x03, 0xf9, 0xfd, 0xfe, 0xc1, 0x0e, 0xdb, 0x84, 0x92, 0xe3, 0x0e,
0xbc, 0xb1, 0x50, 0xd2, 0xe8, 0x9d, 0xa3, 0xe7, 0x6b, 0x97, 0xdd, 0x2d, 0x28, 0xa3, 0x6e, 0x27,
0xcc, 0x6b, 0xa9, 0x26, 0x95, 0x04, 0xe0, 0xc0, 0x1b, 0x3c, 0x17, 0x76, 0x3d, 0xbf, 0x9c, 0x38,
0x3e, 0x5a, 0xee, 0xca, 0x32, 0xcd, 0x93, 0x5e, 0x10, 0x23, 0xa4, 0x81, 0xfa, 0xaf, 0x4a, 0x50,
0x94, 0x3b, 0x33, 0xed, 0xf2, 0xa1, 0x73, 0xc1, 0xe3, 0x5d, 0x5e, 0x3c, 0x09, 0xdd, 0xc1, 0xe7,
0x63, 0x2f, 0x8c, 0x94, 0x3b, 0x9a, 0x83, 0x2a, 0x01, 0xa5, 0x7a, 0xa7, 0x29, 0x18, 0xe4, 0xe6,
0xc8, 0x11, 0xd1, 0x40, 0xdf, 0xf6, 0x6f, 0x41, 0x51, 0xe9, 0x09, 0xf9, 0xc8, 0xfe, 0x59, 0x18,
0x90, 0x66, 0xb7, 0x09, 0xa5, 0x81, 0x3d, 0xb1, 0x07, 0x4e, 0x78, 0x25, 0xc5, 0x44, 0xf4, 0x2c,
0x6a, 0x1f, 0x79, 0x03, 0x7b, 0x64, 0x9d, 0xd8, 0x23, 0xdb, 0x1d, 0x70, 0xe9, 0x3f, 0xa8, 0x22,
0x70, 0x9b, 0x60, 0xec, 0x7b, 0xb0, 0x28, 0xfb, 0xa9, 0xa8, 0xc8, 0x8d, 0x20, 0x7b, 0xaf, 0xc8,
0x84, 0x22, 0xea, 0x8d, 0xc7, 0x8e, 0xb0, 0x48, 0x48, 0x65, 0xcb, 0x99, 0x65, 0x82, 0xec, 0x71,
0x7c, 0x5b, 0x89, 0x7e, 0x41, 0x43, 0x57, 0xa6, 0xa6, 0x08, 0xf8, 0x15, 0x99, 0xfd, 0xf3, 0x7a,
0x5b, 0x4e, 0xd3, 0xdb, 0xde, 0x87, 0xe5, 0xa9, 0x1b, 0xf0, 0x30, 0x1c, 0xf1, 0x61, 0xd4, 0x97,
0x0a, 0x12, 0xd5, 0x23, 0x84, 0xea, 0xce, 0x16, 0xac, 0x90, 0xe3, 0x23, 0xb0, 0x43, 0x2f, 0x38,
0x77, 0x02, 0x2b, 0x10, 0xd6, 0x14, 0x99, 0xc6, 0xcb, 0x88, 0xea, 0x49, 0x4c, 0x8f, 0xcc, 0xa9,
0x8d, 0x19, 0x7a, 0x9f, 0x0f, 0xb8, 0x73, 0xc1, 0x87, 0xa8, 0xd3, 0xe5, 0xcc, 0xb5, 0x44, 0x19,
0x53, 0x22, 0x51, 0x41, 0x9f, 0x8e, 0xad, 0xe9, 0x64, 0x68, 0x0b, 0xc5, 0x66, 0x91, 0x14, 0x67,
0x77, 0x3a, 0x3e, 0x26, 0x08, 0x7b, 0x00, 0x4a, 0x6b, 0x93, 0xba, 0xe4, 0x52, 0x42, 0x9e, 0x09,
0x66, 0x35, 0xab, 0x92, 0x82, 0x94, 0xca, 0x84, 0x7e, 0x5a, 0x9f, 0xd1, 0x4f, 0x1b, 0x50, 0x9c,
0xf8, 0xce, 0x85, 0x1d, 0xf2, 0xc6, 0x32, 0x89, 0x75, 0xf9, 0x28, 0x24, 0x83, 0xe3, 0x3a, 0xa1,
0x63, 0x87, 0x9e, 0xdf, 0x60, 0x88, 0x8b, 0x01, 0xec, 0x3e, 0x2c, 0x23, 0x8f, 0x04, 0xa1, 0x1d,
0x4e, 0x03, 0xa9, 0xad, 0xae, 0x20, 0x33, 0xa1, 0xbe, 0xdd, 0x43, 0x38, 0x2a, 0xac, 0xec, 0x87,
0xb0, 0x4e, 0x6c, 0x81, 0x25, 0xa4, 0x16, 0x8e, 0xca, 0xc3, 0x2a, 0x0e, 0xc5, 0x0a, 0x62, 0x05,
0x7f, 0x4b, 0x5d, 0x5c, 0x68, 0x12, 0x8f, 0x60, 0x43, 0xb2, 0xc9, 0x5c, 0xa9, 0x35, 0x2c, 0xb5,
0x4a, 0xe8, 0x99, 0x62, 0x5b, 0xb0, 0x2c, 0xba, 0xe4, 0x0c, 0x2c, 0x59, 0x5a, 0xac, 0x84, 0x75,
0xd1, 0x7b, 0xb4, 0xaa, 0x96, 0x08, 0x69, 0x22, 0xee, 0x29, 0xbf, 0x62, 0x5f, 0xc0, 0x12, 0xb1,
0x0c, 0x9a, 0x62, 0x28, 0xe9, 0x37, 0x51, 0xd2, 0xaf, 0xc9, 0x01, 0xdd, 0x89, 0xb0, 0x28, 0xec,
0x17, 0x07, 0x89, 0x67, 0xb1, 0x1c, 0x46, 0xce, 0x29, 0x0f, 0x9d, 0x31, 0x6f, 0x6c, 0x10, 0x83,
0xa9, 0x67, 0xb1, 0x52, 0xa7, 0x13, 0xc4, 0x34, 0x48, 0x2e, 0xd0, 0x13, 0xf2, 0xee, 0xc8, 0x0b,
0xb8, 0x72, 0x93, 0x35, 0x6e, 0xca, 0x45, 0x28, 0x80, 0x4a, 0xdf, 0x14, 0x4a, 0x3b, 0x19, 0x48,
0x91, 0x33, 0xf3, 0x16, 0x32, 0x43, 0x8d, 0xec, 0x24, 0xe5, 0xd0, 0x14, 0x7b, 0xfb, 0xb9, 0xfd,
0x42, 0x49, 0x90, 0x37, 0x70, 0x7e, 0x41, 0x80, 0xa4, 0xec, 0xf8, 0x79, 0x86, 0x36, 0x44, 0x29,
0x3f, 0x02, 0xcd, 0x14, 0x24, 0xc9, 0x61, 0x79, 0xee, 0xe8, 0x4a, 0x0a, 0x13, 0x20, 0x50, 0xd7,
0x1d, 0xe1, 0x6a, 0x76, 0x5c, 0x9d, 0x84, 0x64, 0x6f, 0x55, 0x01, 0x91, 0xe8, 0x0e, 0x54, 0x26,
0xd3, 0x93, 0x91, 0x33, 0x20, 0x92, 0x1c, 0xd5, 0x42, 0x20, 0x24, 0x10, 0xb6, 0x30, 0x71, 0x14,
0x51, 0xe4, 0x91, 0xa2, 0x22, 0x61, 0x48, 0x82, 0xb2, 0x9d, 0xfb, 0x28, 0x4e, 0xaa, 0x26, 0xfe,
0x36, 0xb6, 0x61, 0x35, 0xd9, 0x69, 0xb9, 0xf1, 0xdc, 0x87, 0x92, 0x94, 0x55, 0xca, 0x49, 0xb2,
0xa8, 0x26, 0x4a, 0x9a, 0x73, 0x11, 0xde, 0xf8, 0x9d, 0x02, 0xac, 0x48, 0xe8, 0x8e, 0x18, 0xda,
0xde, 0x74, 0x3c, 0xb6, 0xfd, 0x14, 0x21, 0x98, 0x79, 0xb9, 0x10, 0xcc, 0xce, 0x09, 0xc1, 0xa4,
0x95, 0x4c, 0x32, 0x34, 0x69, 0x25, 0x8b, 0xb9, 0x24, 0xc3, 0x45, 0xf7, 0xc5, 0xd6, 0x24, 0xb8,
0x4f, 0x3e, 0xdf, 0x39, 0x91, 0x5d, 0x48, 0x11, 0xd9, 0xba, 0xc0, 0x5d, 0x98, 0x11, 0xb8, 0x6f,
0x01, 0x31, 0x8d, 0x9a, 0xfd, 0x22, 0xd9, 0x32, 0x08, 0x93, 0xae, 0xcf, 0xf7, 0x60, 0x69, 0x56,
0xc6, 0x91, 0x30, 0x5d, 0x4c, 0x91, 0x70, 0xce, 0x98, 0xe3, 0x6e, 0xa5, 0x11, 0x97, 0xa5, 0x84,
0x73, 0xc6, 0xfc, 0x00, 0x31, 0x8a, 0xbe, 0x05, 0x40, 0x6d, 0xe3, 0xa2, 0x01, 0x5c, 0x34, 0xef,
0x26, 0xe7, 0x42, 0x1f, 0xf5, 0x2d, 0xf1, 0x30, 0xf5, 0x39, 0xae, 0xa2, 0x32, 0x96, 0xc4, 0x05,
0xf4, 0x29, 0x2c, 0x7a, 0x13, 0xee, 0x5a, 0xb1, 0xac, 0xa9, 0x60, 0x55, 0x75, 0x59, 0x55, 0x5b,
0xc1, 0xcd, 0x9a, 0xa0, 0x8b, 0x1e, 0xd9, 0xe7, 0x34, 0xc8, 0x5c, 0x2b, 0x59, 0xbd, 0xa6, 0xe4,
0x22, 0x12, 0x46, 0xcf, 0xc6, 0x6f, 0x66, 0xa0, 0xa2, 0x75, 0x87, 0xad, 0xc1, 0xf2, 0x4e, 0xb7,
0x7b, 0xd4, 0x32, 0x9b, 0xfd, 0xf6, 0xb3, 0x96, 0xb5, 0x73, 0xd0, 0xed, 0xb5, 0xea, 0x37, 0x04,
0xf8, 0xa0, 0xbb, 0xd3, 0x3c, 0xb0, 0xf6, 0xba, 0xe6, 0x8e, 0x02, 0x67, 0xd8, 0x3a, 0x30, 0xb3,
0x75, 0xd8, 0xed, 0xb7, 0x12, 0xf0, 0x2c, 0xab, 0x43, 0x75, 0xdb, 0x6c, 0x35, 0x77, 0xf6, 0x25,
0x24, 0xc7, 0x56, 0xa1, 0xbe, 0x77, 0xdc, 0xd9, 0x6d, 0x77, 0x9e, 0x58, 0x3b, 0xcd, 0xce, 0x4e,
0xeb, 0xa0, 0xb5, 0x5b, 0xcf, 0xb3, 0x1a, 0x94, 0x9b, 0xdb, 0xcd, 0xce, 0x6e, 0xb7, 0xd3, 0xda,
0xad, 0x17, 0x8c, 0x3f, 0xca, 0xc0, 0x1a, 0x0e, 0xd4, 0x70, 0x76, 0x85, 0xde, 0x85, 0xca, 0xc0,
0xf3, 0x26, 0xc2, 0x64, 0x8a, 0xb7, 0x7b, 0x1d, 0x24, 0x56, 0x1f, 0x49, 0xd6, 0x53, 0xcf, 0x1f,
0x70, 0xb9, 0x40, 0x01, 0x41, 0x7b, 0x02, 0x22, 0x18, 0x44, 0x72, 0x18, 0x51, 0xd0, 0xfa, 0xac,
0x10, 0x8c, 0x48, 0xd6, 0x61, 0xe1, 0xc4, 0xe7, 0xf6, 0xe0, 0x5c, 0x2e, 0x4d, 0xf9, 0xc4, 0xbe,
0x1f, 0x1b, 0xf3, 0x03, 0x31, 0xe1, 0x23, 0x3e, 0x44, 0xfe, 0x2c, 0x99, 0x4b, 0x12, 0xbe, 0x23,
0xc1, 0x62, 0xab, 0xb0, 0x4f, 0x6c, 0x77, 0xe8, 0xb9, 0x7c, 0x28, 0xad, 0x83, 0x18, 0x60, 0x1c,
0xc1, 0xfa, 0xec, 0xfb, 0xc9, 0xc5, 0xfc, 0x89, 0xb6, 0x98, 0x49, 0x2d, 0xdf, 0xbc, 0x9e, 0x81,
0xb4, 0x85, 0xfd, 0xd7, 0xf2, 0x90, 0x17, 0x6a, 0xda, 0xb5, 0x1a, 0x9d, 0xae, 0x77, 0xe7, 0xe6,
0xe2, 0x43, 0xe8, 0x33, 0xa0, 0xfd, 0x9b, 0x1c, 0x53, 0x65, 0x84, 0xe0, 0xbe, 0x1d, 0xa1, 0x7d,
0x3e, 0xb8, 0x90, 0x9e, 0x29, 0x42, 0x9b, 0x7c, 0x70, 0x81, 0x66, 0x90, 0x1d, 0x52, 0x59, 0x5a,
0x8c, 0xc5, 0xc0, 0x0e, 0xb1, 0xa4, 0x44, 0x61, 0xb9, 0x62, 0x84, 0xc2, 0x52, 0x0d, 0x28, 0x3a,
0xee, 0x89, 0x37, 0x75, 0x87, 0xb8, 0xf6, 0x4a, 0xa6, 0x7a, 0xc4, 0x70, 0x14, 0x8a, 0x09, 0xb1,
0x4b, 0xd0, 0x52, 0x2b, 0x09, 0x40, 0x5f, 0xec, 0x13, 0x1f, 0x41, 0x39, 0xb8, 0x72, 0x07, 0xfa,
0x02, 0x5b, 0x95, 0xe3, 0x23, 0xde, 0x7e, 0xab, 0x77, 0xe5, 0x0e, 0x70, 0x39, 0x95, 0x02, 0xf9,
0x8b, 0x3d, 0x82, 0x52, 0xe4, 0xc0, 0x25, 0xf1, 0x78, 0x53, 0x2f, 0xa1, 0xbc, 0xb6, 0x64, 0x27,
0x47, 0xa4, 0xec, 0x43, 0x58, 0x40, 0x2f, 0x6b, 0xd0, 0xa8, 0x62, 0x21, 0xa5, 0x8c, 0x8b, 0x6e,
0x60, 0x24, 0x88, 0x0f, 0xd1, 0xe3, 0x6a, 0x4a, 0xb2, 0xcd, 0xa7, 0x50, 0x4b, 0xd4, 0xa5, 0xdb,
0xbd, 0x35, 0xb2, 0x7b, 0xdf, 0xd1, 0xed, 0xde, 0x58, 0x4c, 0xcb, 0x62, 0xba, 0x1d, 0xfc, 0x63,
0x28, 0xa9, 0x57, 0x11, 0x8b, 0xe8, 0xb8, 0xf3, 0xb4, 0xd3, 0xfd, 0xaa, 0x63, 0xf5, 0xbe, 0xee,
0xec, 0xd4, 0x6f, 0xb0, 0x25, 0xa8, 0x34, 0x77, 0x70, 0x5d, 0x22, 0x20, 0x23, 0x48, 0x8e, 0x9a,
0xbd, 0x5e, 0x04, 0xc9, 0x1a, 0x7b, 0x50, 0x9f, 0xed, 0xa9, 0xe0, 0xc9, 0x50, 0xc1, 0xa4, 0x0f,
0x3a, 0x06, 0x08, 0xfb, 0x85, 0xdc, 0xca, 0xa4, 0x24, 0xd3, 0x83, 0xf1, 0x08, 0xea, 0x62, 0xd3,
0x11, 0x43, 0xa5, 0x47, 0x97, 0x46, 0x42, 0xf1, 0xd2, 0xfd, 0xd0, 0x25, 0xb3, 0x42, 0x30, 0x6c,
0xca, 0xf8, 0x04, 0x96, 0xb5, 0x62, 0xb1, 0xbd, 0x29, 0x36, 0xb2, 0x59, 0x7b, 0x13, 0xad, 0x0b,
0xc2, 0x18, 0x1b, 0xb0, 0x26, 0x1e, 0x5b, 0x17, 0xdc, 0x0d, 0x7b, 0xd3, 0x13, 0x0a, 0x4a, 0x3a,
0x9e, 0x2b, 0xac, 0x8e, 0x72, 0x84, 0xb9, 0x9e, 0xc9, 0xb7, 0xa4, 0x69, 0x9a, 0x45, 0xd6, 0xd8,
0xd4, 0x5a, 0xc0, 0x82, 0x5b, 0xf8, 0x37, 0x61, 0xa2, 0x96, 0x23, 0x90, 0x18, 0xd6, 0xa3, 0x56,
0xcb, 0xb4, 0xba, 0x9d, 0x83, 0x76, 0x47, 0x48, 0x3b, 0x31, 0xac, 0x08, 0xd8, 0xdb, 0x43, 0x48,
0xc6, 0xa8, 0xc3, 0xe2, 0x13, 0x1e, 0xb6, 0xdd, 0x53, 0x4f, 0x0e, 0x86, 0xf1, 0x97, 0x17, 0x60,
0x29, 0x02, 0xc5, 0x26, 0xee, 0x05, 0xf7, 0x03, 0xc7, 0x73, 0x51, 0x5b, 0x2d, 0x9b, 0xea, 0x51,
0x48, 0x27, 0xa9, 0xa3, 0xe3, 0x16, 0xb8, 0x8a, 0x58, 0xa9, 0xd5, 0xe3, 0xfe, 0xf7, 0x1e, 0x2c,
0x39, 0x43, 0xee, 0x86, 0x4e, 0x78, 0x65, 0x25, 0x9c, 0x6b, 0x8b, 0x0a, 0x2c, 0xf7, 0xc0, 0x55,
0x28, 0xd8, 0x23, 0xc7, 0x56, 0xc1, 0x5e, 0x7a, 0x10, 0xd0, 0x81, 0x37, 0xf2, 0x7c, 0xd4, 0x5c,
0xcb, 0x26, 0x3d, 0xb0, 0x07, 0xb0, 0x2a, 0x34, 0x68, 0xdd, 0xe3, 0x89, 0x02, 0x86, 0xfc, 0x7c,
0xcc, 0x9d, 0x8e, 0x8f, 0x62, 0xaf, 0xa7, 0xc0, 0x88, 0x9d, 0x4f, 0x94, 0x90, 0xaa, 0x4e, 0x54,
0x80, 0x8c, 0xb1, 0x65, 0x77, 0x3a, 0x6e, 0x22, 0x26, 0xa2, 0x7f, 0x08, 0x6b, 0x82, 0x3e, 0x52,
0x8e, 0xa2, 0x12, 0x4b, 0x58, 0x42, 0x54, 0xd6, 0x96, 0xb8, 0xa8, 0xcc, 0x2d, 0x28, 0x53, 0xaf,
0x04, 0x4b, 0x14, 0x48, 0x09, 0xc7, 0xae, 0x70, 0x3f, 0x98, 0x8b, 0xcb, 0x2e, 0xd0, 0x36, 0x3e,
0x13, 0x97, 0xd5, 0x22, 0xbb, 0xa5, 0xd9, 0xc8, 0xee, 0x43, 0x58, 0x3b, 0x11, 0x3c, 0x7a, 0xce,
0xed, 0x21, 0xf7, 0xad, 0x98, 0xf3, 0xc9, 0xd8, 0x58, 0x11, 0xc8, 0x7d, 0xc4, 0x45, 0x0b, 0x45,
0x68, 0x29, 0x42, 0x6e, 0xf0, 0xa1, 0x15, 0x7a, 0x16, 0x2a, 0x2f, 0x28, 0x81, 0x4a, 0x66, 0x8d,
0xc0, 0x7d, 0x6f, 0x47, 0x00, 0x93, 0x74, 0x67, 0xbe, 0x3d, 0x39, 0x97, 0xe6, 0x40, 0x44, 0xf7,
0x44, 0x00, 0xd9, 0x1b, 0x50, 0x14, 0x6b, 0xc2, 0xe5, 0x14, 0xe6, 0x22, 0x85, 0x5b, 0x81, 0xd8,
0x3b, 0xb0, 0x80, 0x6d, 0x04, 0x8d, 0x3a, 0x2e, 0x88, 0x6a, 0x2c, 0xe9, 0x1d, 0xd7, 0x94, 0x38,
0xa1, 0x0a, 0x4e, 0x7d, 0x87, 0xc4, 0x50, 0xd9, 0xc4, 0xdf, 0xec, 0x27, 0x9a, 0x4c, 0x5b, 0xc1,
0xb2, 0xef, 0xc8, 0xb2, 0x33, 0xac, 0x78, 0x9d, 0x78, 0xfb, 0x4e, 0xa5, 0xd5, 0x4f, 0xf3, 0xa5,
0x4a, 0xbd, 0x6a, 0x7c, 0x0a, 0x05, 0x1a, 0x1d, 0xc1, 0x84, 0x38, 0x76, 0x19, 0xc9, 0x84, 0x08,
0x6d, 0x40, 0xd1, 0xe5, 0xe1, 0x0b, 0xcf, 0x7f, 0xae, 0xdc, 0xcf, 0xf2, 0xd1, 0xf8, 0x19, 0xfa,
0x42, 0xa2, 0x98, 0x3d, 0x99, 0x75, 0x82, 0x3d, 0x68, 0x7a, 0x83, 0x73, 0x5b, 0xba, 0x67, 0x4a,
0x08, 0xe8, 0x9d, 0xdb, 0x73, 0xec, 0x91, 0x9d, 0x0f, 0xdb, 0xbf, 0x03, 0x8b, 0x2a, 0x4b, 0x20,
0xb0, 0x46, 0xfc, 0x34, 0x94, 0xec, 0x5e, 0x95, 0x29, 0x02, 0xc1, 0x01, 0x3f, 0x0d, 0x8d, 0x43,
0x58, 0x96, 0x0c, 0xd9, 0x9d, 0x70, 0xd5, 0xf4, 0x67, 0x69, 0xda, 0x70, 0xe5, 0xe1, 0x4a, 0x72,
0x27, 0xa6, 0xec, 0x87, 0x84, 0x8a, 0x6c, 0x7c, 0x09, 0x4c, 0xdf, 0xa7, 0x65, 0x7d, 0x52, 0x27,
0x55, 0x5e, 0x7b, 0x15, 0xfc, 0x8a, 0x34, 0x5f, 0x67, 0x28, 0x46, 0x27, 0x98, 0x0e, 0x06, 0x2a,
0x7b, 0xa3, 0x64, 0xaa, 0x47, 0xe3, 0x3f, 0x66, 0x60, 0x05, 0x2b, 0x53, 0xda, 0xbc, 0x94, 0xc2,
0xbf, 0x70, 0x27, 0xc5, 0xfc, 0xe8, 0xca, 0x11, 0x3d, 0x7c, 0x7b, 0x8f, 0x68, 0x7e, 0xce, 0x23,
0xfa, 0x7d, 0xa8, 0x0f, 0xf9, 0xc8, 0xb9, 0xe0, 0xfe, 0x55, 0x64, 0xc8, 0x91, 0xfe, 0xbe, 0xa4,
0xe0, 0xd2, 0x96, 0x33, 0xfe, 0x56, 0x06, 0x96, 0x49, 0x95, 0x41, 0xab, 0x58, 0x0e, 0xd4, 0x63,
0x65, 0x06, 0x4a, 0x51, 0x25, 0xdf, 0x29, 0xde, 0xe2, 0x11, 0x4a, 0xc4, 0xfb, 0x37, 0xa4, 0x79,
0x28, 0xa1, 0xec, 0x47, 0x68, 0x81, 0xb8, 0x16, 0x02, 0x65, 0x30, 0xf3, 0x66, 0x8a, 0xf2, 0x14,
0x15, 0x17, 0xe6, 0x89, 0x8b, 0xa0, 0xed, 0x92, 0xb0, 0x4b, 0x05, 0xd8, 0xd8, 0x83, 0x5a, 0xa2,
0x99, 0x84, 0x83, 0xb6, 0x4a, 0x0e, 0xda, 0xb9, 0x80, 0x49, 0x76, 0x3e, 0x60, 0x72, 0x05, 0x2b,
0x26, 0xb7, 0x87, 0x57, 0x7b, 0x9e, 0x7f, 0x14, 0x9c, 0x84, 0x7b, 0xa4, 0x1f, 0x0a, 0xf9, 0x1e,
0x45, 0x01, 0x13, 0x5e, 0x50, 0x15, 0x0c, 0x52, 0xc6, 0xee, 0xf7, 0x60, 0x31, 0x0e, 0x17, 0x6a,
0x9e, 0xb4, 0x5a, 0x14, 0x31, 0x44, 0x87, 0x9a, 0x30, 0x14, 0x83, 0x93, 0x50, 0xfa, 0xd2, 0xf0,
0xb7, 0xf1, 0x17, 0xf3, 0xc0, 0x04, 0x37, 0xcf, 0x30, 0xcc, 0x4c, 0xa0, 0x33, 0x3b, 0x17, 0xe8,
0x7c, 0x00, 0x4c, 0x23, 0x50, 0xf1, 0xd7, 0x5c, 0x14, 0x7f, 0xad, 0xc7, 0xb4, 0x32, 0xfc, 0xfa,
0x00, 0x56, 0xa5, 0xb2, 0x9d, 0xec, 0x2a, 0xb1, 0x06, 0x23, 0xad, 0x3b, 0xd1, 0x5f, 0x15, 0xe4,
0x14, 0xc6, 0x3b, 0xf9, 0xca, 0x30, 0xc8, 0xa9, 0xcc, 0x76, 0x8d, 0x01, 0x17, 0x5e, 0xc9, 0x80,
0xc5, 0x39, 0x06, 0xd4, 0x5c, 0x37, 0xa5, 0xa4, 0xeb, 0xc6, 0x80, 0x9a, 0x0a, 0x65, 0x52, 0x06,
0x07, 0x69, 0x96, 0x15, 0x19, 0xcf, 0xc4, 0x2c, 0x8e, 0x7b, 0x50, 0x57, 0xfe, 0x95, 0xc8, 0x39,
0x44, 0xd9, 0x09, 0xd2, 0x3d, 0xb7, 0xa3, 0x5c, 0x44, 0x09, 0x57, 0x7c, 0x65, 0xc6, 0x15, 0xff,
0x3e, 0x2c, 0x07, 0x82, 0x7f, 0xad, 0xa9, 0x2b, 0x53, 0x94, 0xf8, 0x10, 0xed, 0xb0, 0x92, 0x59,
0x47, 0xc4, 0x71, 0x0c, 0x9f, 0x77, 0x7c, 0xd4, 0x52, 0x1c, 0x1f, 0x8f, 0xe2, 0xa8, 0x5f, 0x70,
0xee, 0x8c, 0x51, 0xa9, 0x88, 0xd3, 0x6e, 0xe4, 0x00, 0xf7, 0xce, 0x9d, 0xb1, 0xa9, 0x42, 0xcc,
0xe2, 0xc1, 0xf8, 0x9f, 0x19, 0xa8, 0x0b, 0x3e, 0x48, 0x2c, 0xb1, 0xcf, 0x01, 0x85, 0xc1, 0x6b,
0xae, 0xb0, 0x8a, 0xa0, 0x55, 0x0b, 0xec, 0x53, 0xc0, 0x15, 0x63, 0x09, 0xa3, 0x53, 0xae, 0xaf,
0x46, 0x72, 0x7d, 0xc5, 0x32, 0x74, 0xff, 0x06, 0x19, 0x27, 0x02, 0xc2, 0x3e, 0x87, 0xb2, 0x60,
0x4c, 0xe4, 0x12, 0x99, 0x45, 0xa6, 0x54, 0xb3, 0x94, 0x35, 0x22, 0x8a, 0x4e, 0xe4, 0x63, 0x5a,
0xa0, 0x36, 0x9f, 0x12, 0xa8, 0xd5, 0x16, 0xf0, 0x3e, 0xc0, 0x53, 0x7e, 0x75, 0xe0, 0x0d, 0xd0,
0x24, 0xbe, 0x0d, 0x20, 0x78, 0xf9, 0xd4, 0x1e, 0x3b, 0xd2, 0xa3, 0x53, 0x30, 0xcb, 0xcf, 0xf9,
0xd5, 0x1e, 0x02, 0xc4, 0x44, 0x0a, 0x74, 0xbc, 0x8a, 0x0b, 0x66, 0xe9, 0x39, 0xbf, 0xa2, 0x25,
0x6c, 0x41, 0xed, 0x29, 0xbf, 0xda, 0xe5, 0xa4, 0x85, 0x7a, 0xbe, 0x60, 0x22, 0xdf, 0x7e, 0x21,
0xd4, 0xce, 0x44, 0x90, 0xb5, 0xe2, 0xdb, 0x2f, 0x9e, 0xf2, 0x2b, 0x15, 0xf0, 0x2d, 0x0a, 0xfc,
0xc8, 0x1b, 0xc8, 0x7d, 0x53, 0xa5, 0x8b, 0xc4, 0x9d, 0x32, 0x17, 0x9e, 0xe3, 0x6f, 0xe3, 0x4f,
0x32, 0x50, 0x13, 0xfd, 0x47, 0xb1, 0x2c, 0xa6, 0x4c, 0x65, 0x1d, 0x65, 0xe2, 0xac, 0xa3, 0x87,
0x52, 0xaa, 0x91, 0x8c, 0xcf, 0x5e, 0x2f, 0xe3, 0x71, 0x6e, 0x48, 0xc0, 0x7f, 0x04, 0x65, 0x5a,
0x96, 0x62, 0x9d, 0xe7, 0x12, 0x13, 0x9c, 0x78, 0x21, 0xb3, 0x84, 0x64, 0x4f, 0x29, 0xc9, 0x41,
0xf3, 0x0e, 0xd2, 0x10, 0x97, 0xfd, 0xc8, 0x27, 0x98, 0x32, 0x0d, 0x85, 0x6b, 0x92, 0x1c, 0x74,
0xd7, 0xdb, 0xc2, 0x9c, 0xeb, 0xad, 0x0b, 0x25, 0x31, 0xd5, 0xf8, 0xb2, 0x29, 0x95, 0x66, 0xd2,
0x2a, 0x15, 0x9a, 0x80, 0x2d, 0x36, 0x05, 0x21, 0xe8, 0xb2, 0x52, 0x13, 0xb0, 0x03, 0x7e, 0x84,
0xc2, 0x2e, 0x03, 0x15, 0x6d, 0x05, 0xa0, 0xf7, 0x32, 0x1a, 0x2f, 0x5a, 0x2e, 0x49, 0x16, 0x4f,
0x0c, 0xf8, 0xfe, 0x0d, 0xb3, 0x36, 0x48, 0xcc, 0xc0, 0x96, 0xe4, 0x55, 0x2c, 0x99, 0x4d, 0x24,
0x48, 0xa9, 0x8e, 0x2b, 0x06, 0x15, 0xbf, 0xb7, 0x17, 0x20, 0x2f, 0x48, 0x8d, 0xc7, 0xb0, 0xac,
0x75, 0x83, 0xfc, 0x00, 0xaf, 0xfb, 0x86, 0xc6, 0xaf, 0x47, 0x85, 0x45, 0x1b, 0x14, 0x5f, 0x52,
0x09, 0x23, 0x7c, 0x48, 0x2f, 0x2e, 0x13, 0x53, 0x08, 0x24, 0xc8, 0x5e, 0x3b, 0x89, 0xe1, 0x37,
0x60, 0x45, 0xab, 0x7d, 0xcf, 0x71, 0xed, 0x91, 0xf3, 0x33, 0xdc, 0xf0, 0x03, 0xe7, 0xcc, 0x9d,
0xa9, 0x9f, 0x40, 0xdf, 0xaa, 0xfe, 0xbf, 0x9d, 0x85, 0x55, 0xd9, 0x00, 0xa6, 0x00, 0x3a, 0x42,
0x8b, 0x3b, 0x0c, 0xce, 0xd8, 0xe7, 0x50, 0x13, 0x63, 0x63, 0xf9, 0xfc, 0xcc, 0x09, 0x42, 0xae,
0xe2, 0x5a, 0x29, 0x82, 0x4b, 0x6c, 0xe6, 0x82, 0xd4, 0x94, 0x94, 0xec, 0x31, 0x54, 0xb0, 0x28,
0xf9, 0x59, 0xe4, 0x44, 0x34, 0xe6, 0x0b, 0xd2, 0x40, 0xef, 0xdf, 0x30, 0x21, 0x88, 0x87, 0xfd,
0x31, 0x54, 0x70, 0x0e, 0x2f, 0x70, 0x20, 0x67, 0x44, 0xd5, 0xdc, 0x40, 0x8b, 0xc2, 0x93, 0x78,
0xd8, 0x9b, 0x50, 0x23, 0x61, 0x25, 0xc7, 0x49, 0xa6, 0x16, 0x6d, 0xce, 0x17, 0x57, 0x23, 0x29,
0x3a, 0x3f, 0xd1, 0x9e, 0xb7, 0xcb, 0x50, 0x0c, 0x7d, 0xe7, 0xec, 0x8c, 0xfb, 0xc6, 0x7a, 0x34,
0x34, 0x42, 0x0a, 0xf3, 0x5e, 0xc8, 0x27, 0x42, 0x37, 0x37, 0xfe, 0x6d, 0x06, 0x2a, 0x52, 0xae,
0xfe, 0xc2, 0xc1, 0xb4, 0x4d, 0x2d, 0x37, 0x97, 0x5c, 0x3a, 0x71, 0x2a, 0xee, 0x7b, 0xb0, 0x34,
0x16, 0x7a, 0xba, 0xb0, 0x23, 0x13, 0x91, 0xb4, 0x45, 0x05, 0x96, 0x6a, 0xf2, 0x16, 0xac, 0xa0,
0xd6, 0x1c, 0x58, 0xa1, 0x33, 0xb2, 0x14, 0x52, 0xe6, 0xc1, 0x2e, 0x13, 0xaa, 0xef, 0x8c, 0x0e,
0x25, 0x42, 0x28, 0x8f, 0x41, 0x68, 0x9f, 0x71, 0xb9, 0xb6, 0xe9, 0xc1, 0x68, 0xc0, 0xfa, 0x8c,
0x09, 0xa9, 0xec, 0xe3, 0xff, 0xbd, 0x0c, 0x1b, 0x73, 0x28, 0x69, 0x27, 0x47, 0x11, 0xa4, 0x91,
0x33, 0x3e, 0xf1, 0x22, 0xff, 0x6a, 0x46, 0x8b, 0x20, 0x1d, 0x08, 0x8c, 0xf2, 0xaf, 0x72, 0x58,
0x53, 0x0c, 0x89, 0x0e, 0xd2, 0xc8, 0xca, 0xcc, 0xa2, 0x0d, 0xf4, 0x51, 0x72, 0x13, 0x9b, 0x6d,
0x4e, 0xc1, 0x75, 0xd5, 0x68, 0x65, 0x32, 0x07, 0x0b, 0xd8, 0x9f, 0x85, 0x46, 0xc4, 0xf7, 0x52,
0x6d, 0xd7, 0x4c, 0x66, 0xd1, 0xd2, 0x07, 0xaf, 0x68, 0x29, 0xe1, 0xdc, 0x43, 0xdd, 0x69, 0x5d,
0x2d, 0x19, 0xaa, 0x30, 0x6a, 0xeb, 0x02, 0xde, 0x54, 0x6d, 0xa1, 0x1a, 0x3e, 0xdf, 0x62, 0xfe,
0xb5, 0xde, 0x0d, 0x1d, 0x97, 0x89, 0x66, 0xcd, 0x5b, 0xb2, 0xe2, 0x08, 0xa5, 0xb7, 0x7b, 0x0e,
0xeb, 0x2f, 0x6c, 0x27, 0x54, 0xef, 0xa8, 0x59, 0xec, 0x05, 0x6c, 0xef, 0xe1, 0x2b, 0xda, 0xfb,
0x8a, 0x0a, 0x27, 0x0c, 0x93, 0xd5, 0x17, 0xf3, 0xc0, 0x60, 0xf3, 0x1f, 0xe6, 0x60, 0x31, 0x59,
0x8b, 0x10, 0x2c, 0x72, 0xb3, 0x51, 0xfa, 0xa6, 0x54, 0x82, 0xa5, 0xef, 0xbf, 0x43, 0x7a, 0xe6,
0x7c, 0x54, 0x22, 0x9b, 0x12, 0x95, 0xd0, 0x83, 0x01, 0xb9, 0x57, 0x45, 0x5f, 0xf3, 0xaf, 0x15,
0x7d, 0x2d, 0xa4, 0x45, 0x5f, 0xaf, 0x0f, 0xd9, 0x2d, 0xfc, 0x42, 0x21, 0xbb, 0xe2, 0x4b, 0x43,
0x76, 0x5a, 0xa0, 0xb1, 0x74, 0x8d, 0x0b, 0x5f, 0x0b, 0x3d, 0xa6, 0x84, 0xec, 0xca, 0xdf, 0x22,
0x64, 0xb7, 0xf9, 0x27, 0x19, 0x60, 0xf3, 0xab, 0x83, 0x3d, 0xa1, 0x80, 0x8f, 0xcb, 0x47, 0x52,
0x72, 0xff, 0xe0, 0xf5, 0x56, 0x98, 0x62, 0x08, 0x55, 0x9a, 0x7d, 0x08, 0x2b, 0x7a, 0xb6, 0xbe,
0x6e, 0xb5, 0xd7, 0x4c, 0xa6, 0xa3, 0x62, 0xdf, 0x8e, 0x16, 0xea, 0xce, 0xbf, 0x32, 0xd4, 0x5d,
0x78, 0x65, 0xa8, 0x7b, 0x21, 0x19, 0xea, 0xde, 0xfc, 0x0f, 0x19, 0x58, 0x49, 0x61, 0xe2, 0xef,
0xee, 0x9d, 0x05, 0xef, 0x25, 0xc4, 0x5a, 0x56, 0xf2, 0x9e, 0x2e, 0xd1, 0x0e, 0x94, 0x3f, 0x50,
0x4c, 0x45, 0x20, 0x77, 0xaa, 0xfb, 0xaf, 0x92, 0x2e, 0x71, 0x09, 0x53, 0x2f, 0xbe, 0xf9, 0x3b,
0x59, 0xa8, 0x68, 0x48, 0x31, 0x8a, 0xc4, 0xb2, 0x5a, 0x86, 0x11, 0x69, 0x86, 0xe8, 0x73, 0xb8,
0x03, 0x32, 0xea, 0x41, 0x78, 0x5a, 0x5c, 0x52, 0x0d, 0x44, 0x82, 0x2d, 0x58, 0x51, 0xc1, 0x38,
0x1e, 0x27, 0x1d, 0xca, 0xbd, 0x66, 0x59, 0x86, 0xe4, 0x78, 0x94, 0xc3, 0xc8, 0x3e, 0x54, 0xe6,
0x60, 0x3c, 0x77, 0xc8, 0xea, 0x14, 0x52, 0x58, 0xa6, 0x05, 0xa2, 0x26, 0x51, 0xf0, 0xf9, 0x47,
0xb0, 0xa6, 0x96, 0x47, 0xb2, 0x04, 0x45, 0x19, 0x98, 0x5c, 0x1c, 0x7a, 0x91, 0x9f, 0xc0, 0xed,
0x99, 0x3e, 0xcd, 0x14, 0xa5, 0xec, 0xd8, 0x9b, 0x89, 0xde, 0xe9, 0x35, 0x6c, 0xfe, 0x39, 0xa8,
0x25, 0x04, 0xe5, 0x77, 0x37, 0xe5, 0xb3, 0x7e, 0x1e, 0x1a, 0x51, 0xdd, 0xcf, 0xb3, 0xf9, 0x3f,
0x72, 0xc0, 0xe6, 0x65, 0xf5, 0x2f, 0xb3, 0x0b, 0xf3, 0x8c, 0x99, 0x4b, 0x61, 0xcc, 0xff, 0x67,
0xfa, 0xc3, 0xfb, 0xb0, 0xec, 0xf3, 0x81, 0x77, 0xc1, 0x7d, 0x2d, 0xa2, 0x4a, 0x8b, 0xb3, 0x1e,
0x21, 0x54, 0x2f, 0x3e, 0x9d, 0xcd, 0xec, 0x28, 0x25, 0x0e, 0x9c, 0x68, 0x0a, 0xd4, 0x4c, 0x82,
0xc7, 0x31, 0x2c, 0xd8, 0xee, 0xe0, 0xdc, 0xf3, 0xa5, 0x1c, 0xfc, 0x95, 0x6f, 0xbd, 0x7d, 0x6e,
0x35, 0xb1, 0x3c, 0x6a, 0x6d, 0xa6, 0xac, 0xcc, 0xf8, 0x08, 0x2a, 0x1a, 0x98, 0x95, 0xa1, 0x70,
0xd0, 0x3e, 0xdc, 0xee, 0xd6, 0x6f, 0xb0, 0x1a, 0x94, 0xcd, 0xd6, 0x4e, 0xf7, 0x59, 0xcb, 0x6c,
0xed, 0xd6, 0x33, 0xac, 0x04, 0xf9, 0x83, 0x6e, 0xaf, 0x5f, 0xcf, 0x1a, 0x9b, 0xd0, 0x90, 0x35,
0xce, 0x07, 0x35, 0x7e, 0x2b, 0x1f, 0xb9, 0x0b, 0x11, 0x29, 0x4d, 0xf4, 0x1f, 0x42, 0x55, 0x57,
0x6f, 0x24, 0x47, 0xcc, 0x04, 0xf5, 0x85, 0x71, 0xee, 0x69, 0xb2, 0x7a, 0x07, 0x28, 0xa4, 0x3b,
0x8c, 0x8a, 0x65, 0x13, 0x7a, 0x6b, 0x4a, 0xf8, 0x10, 0x8d, 0x9f, 0x04, 0x1b, 0xfe, 0x7f, 0xb0,
0x98, 0x74, 0xe0, 0x4b, 0x89, 0x94, 0x66, 0x70, 0x8a, 0xd2, 0x09, 0x8f, 0x3e, 0xfb, 0x09, 0xd4,
0x67, 0x03, 0x00, 0x52, 0x79, 0xbe, 0xa6, 0xfc, 0x92, 0x93, 0x8c, 0x09, 0xb0, 0x7d, 0x58, 0x4d,
0x53, 0xf0, 0x90, 0x3f, 0xae, 0x77, 0x52, 0xb0, 0x79, 0x25, 0x8e, 0x7d, 0x26, 0x03, 0x41, 0x05,
0x9c, 0xfe, 0x77, 0x92, 0xed, 0x6b, 0x83, 0xbd, 0x45, 0xff, 0xb4, 0x90, 0xd0, 0x05, 0x40, 0x0c,
0x63, 0x75, 0xa8, 0x76, 0x8f, 0x5a, 0x1d, 0x6b, 0x67, 0xbf, 0xd9, 0xe9, 0xb4, 0x0e, 0xea, 0x37,
0x18, 0x83, 0x45, 0x0c, 0x66, 0xef, 0x46, 0xb0, 0x8c, 0x80, 0xc9, 0x80, 0x9c, 0x82, 0x65, 0xd9,
0x2a, 0xd4, 0xdb, 0x9d, 0x19, 0x68, 0x8e, 0x35, 0x60, 0xf5, 0xa8, 0x45, 0xf1, 0xef, 0x44, 0xbd,
0x79, 0x61, 0x34, 0xc8, 0xd7, 0x15, 0x46, 0xc3, 0x57, 0xf6, 0x68, 0xc4, 0x43, 0xb9, 0x0e, 0x94,
0x2e, 0xfd, 0x77, 0x32, 0xb0, 0x36, 0x83, 0x88, 0xcf, 0x86, 0x90, 0x26, 0x9d, 0xd4, 0xa1, 0xab,
0x08, 0x54, 0xab, 0xe9, 0x7d, 0x58, 0x8e, 0x1c, 0x4f, 0x33, 0xbb, 0x52, 0x3d, 0x42, 0x28, 0xe2,
0x0f, 0x61, 0x45, 0xf3, 0x5f, 0xcd, 0xc8, 0x0a, 0xa6, 0xa1, 0x64, 0x01, 0x63, 0x23, 0xca, 0xc1,
0x9f, 0xe9, 0xf5, 0x10, 0xd6, 0x67, 0x11, 0x71, 0x9c, 0x2c, 0xd9, 0x5f, 0xf5, 0xc8, 0x1e, 0xcc,
0x30, 0x42, 0xb2, 0xb7, 0xfa, 0x84, 0xab, 0xe6, 0x7f, 0x77, 0x01, 0xd8, 0x97, 0x53, 0xee, 0x5f,
0xe1, 0xd9, 0x8f, 0xe0, 0x55, 0x09, 0x8e, 0xca, 0xd3, 0x92, 0x7d, 0xad, 0xf3, 0x5d, 0x69, 0xe7,
0xab, 0xf2, 0xaf, 0x3e, 0x5f, 0x55, 0x78, 0xd5, 0xf9, 0xaa, 0xb7, 0xa1, 0xe6, 0x9c, 0xb9, 0x9e,
0x10, 0x85, 0x42, 0x13, 0x0e, 0x1a, 0x0b, 0x77, 0x73, 0xf7, 0xaa, 0x66, 0x55, 0x02, 0x85, 0x1e,
0x1c, 0xb0, 0xc7, 0x31, 0x11, 0x1f, 0x9e, 0xe1, 0x19, 0x43, 0x5d, 0x08, 0xb6, 0x86, 0x67, 0x5c,
0x3a, 0x96, 0xd0, 0xd2, 0x50, 0x85, 0x05, 0x3c, 0x60, 0xef, 0xc0, 0x62, 0xe0, 0x4d, 0x85, 0x61,
0xa1, 0x86, 0x81, 0x02, 0x65, 0x55, 0x82, 0x1e, 0xa9, 0xb0, 0xe9, 0xca, 0x34, 0xe0, 0xd6, 0xd8,
0x09, 0x02, 0xa1, 0x9e, 0x0d, 0x3c, 0x37, 0xf4, 0xbd, 0x91, 0x8c, 0x7d, 0x2d, 0x4f, 0x03, 0x7e,
0x48, 0x98, 0x1d, 0x42, 0xb0, 0x8f, 0xe3, 0x2e, 0x4d, 0x6c, 0xc7, 0x0f, 0x1a, 0x80, 0x5d, 0x52,
0x6f, 0x8a, 0xfa, 0xbb, 0xed, 0xf8, 0x51, 0x5f, 0xc4, 0x43, 0x30, 0x73, 0xee, 0xab, 0x32, 0x7b,
0xee, 0xeb, 0xcf, 0xa4, 0x9f, 0xfb, 0xaa, 0x61, 0xd5, 0x0f, 0x64, 0xd5, 0xf3, 0x53, 0xfc, 0xad,
0x8e, 0x7f, 0xcd, 0x1f, 0x67, 0x5b, 0xfc, 0x36, 0xc7, 0xd9, 0x96, 0xd2, 0x8e, 0xb3, 0x7d, 0x04,
0x15, 0x3c, 0x68, 0x64, 0x9d, 0x3b, 0x42, 0x87, 0xa3, 0x58, 0x5e, 0x5d, 0x3f, 0x89, 0xb4, 0xef,
0xb8, 0xa1, 0x09, 0xbe, 0xfa, 0x19, 0xcc, 0x9f, 0x2c, 0x5b, 0xfe, 0x25, 0x9e, 0x2c, 0x93, 0x07,
0xa2, 0xb6, 0xa0, 0xa4, 0xe6, 0x89, 0x31, 0xc8, 0x9f, 0xfa, 0xde, 0x58, 0xc5, 0x38, 0xc4, 0x6f,
0xb6, 0x08, 0xd9, 0xd0, 0x93, 0x85, 0xb3, 0xa1, 0x67, 0xfc, 0xff, 0x50, 0xd1, 0x58, 0x8d, 0xbd,
0x45, 0x7e, 0x49, 0x61, 0x9b, 0x49, 0xdd, 0x92, 0x46, 0xb1, 0x2c, 0xa1, 0xed, 0xa1, 0x90, 0x37,
0x43, 0xc7, 0xe7, 0x78, 0x06, 0xd4, 0xf2, 0xf9, 0x05, 0xf7, 0x03, 0x15, 0x73, 0xaa, 0x47, 0x08,
0x93, 0xe0, 0xc6, 0x6f, 0xc0, 0x4a, 0x62, 0x6e, 0xa5, 0x88, 0x78, 0x07, 0x16, 0x70, 0xdc, 0x54,
0xd2, 0x40, 0xf2, 0x84, 0x97, 0xc4, 0xe1, 0x79, 0x57, 0x0a, 0x97, 0x59, 0x13, 0xdf, 0x3b, 0xc1,
0x46, 0x32, 0x66, 0x45, 0xc2, 0x8e, 0x7c, 0xef, 0xc4, 0xf8, 0xc3, 0x1c, 0xe4, 0xf6, 0xbd, 0x89,
0x9e, 0xc4, 0x96, 0x99, 0x4b, 0x62, 0x93, 0x06, 0xa7, 0x15, 0x19, 0x94, 0x52, 0x67, 0xc7, 0x40,
0x91, 0x32, 0x2a, 0xef, 0xc1, 0xa2, 0x90, 0x13, 0xa1, 0x27, 0x2c, 0xf6, 0x17, 0xb6, 0x4f, 0x0a,
0x71, 0x8e, 0x16, 0x9f, 0x3d, 0x0e, 0xfb, 0xde, 0x1e, 0xc1, 0xd9, 0x2a, 0xe4, 0x22, 0xf3, 0x05,
0xd1, 0xe2, 0x91, 0xad, 0xc3, 0x02, 0x66, 0x33, 0x5f, 0xc9, 0xa0, 0xb7, 0x7c, 0x62, 0x3f, 0x80,
0x95, 0x64, 0xbd, 0x24, 0x8a, 0xa4, 0x6e, 0xa4, 0x57, 0x8c, 0x32, 0xe9, 0x26, 0x08, 0x39, 0x42,
0x34, 0x32, 0xb9, 0xe6, 0x94, 0x73, 0x44, 0x69, 0x42, 0xaf, 0x94, 0x10, 0x7a, 0x77, 0xa0, 0x12,
0x8e, 0x2e, 0xac, 0x89, 0x7d, 0x35, 0xf2, 0xec, 0xa1, 0x5c, 0xdf, 0x10, 0x8e, 0x2e, 0x8e, 0x08,
0xc2, 0x3e, 0x04, 0x18, 0x4f, 0x26, 0x72, 0xed, 0x61, 0xf0, 0x23, 0x66, 0xe5, 0xc3, 0xa3, 0x23,
0x62, 0x39, 0xb3, 0x3c, 0x9e, 0x4c, 0xe8, 0x27, 0xdb, 0x85, 0xc5, 0xd4, 0x73, 0x9a, 0xb7, 0x55,
0xf2, 0xad, 0x37, 0xd9, 0x4a, 0x59, 0x9c, 0xb5, 0x81, 0x0e, 0xdb, 0xfc, 0x09, 0xb0, 0x3f, 0xe5,
0x69, 0xc9, 0x3e, 0x94, 0xa3, 0xfe, 0xe9, 0x87, 0x0d, 0x31, 0x9d, 0xbe, 0x92, 0x38, 0x6c, 0xd8,
0x1c, 0x0e, 0x7d, 0x21, 0x17, 0x69, 0xc3, 0x8c, 0x44, 0x3e, 0x68, 0x3b, 0x66, 0x93, 0xe4, 0xbe,
0xf1, 0x5f, 0x33, 0x50, 0xa0, 0x93, 0x8f, 0xef, 0xc2, 0x12, 0xd1, 0x47, 0x09, 0x81, 0x32, 0x54,
0x4e, 0xfb, 0x6e, 0x5f, 0xe6, 0x02, 0x8a, 0x65, 0xa1, 0x9d, 0x06, 0xcf, 0x46, 0x33, 0xaf, 0x9d,
0x08, 0xbf, 0x03, 0xe5, 0xa8, 0x69, 0x8d, 0x75, 0x4a, 0xaa, 0x65, 0xf6, 0x26, 0xe4, 0xcf, 0xbd,
0x89, 0xf2, 0xfc, 0x40, 0x3c, 0x92, 0x26, 0xc2, 0xe3, 0xbe, 0x88, 0x36, 0xa8, 0xf3, 0xd2, 0x63,
0x11, 0x35, 0x82, 0x6c, 0x30, 0xff, 0x8e, 0x0b, 0x29, 0xef, 0x78, 0x0c, 0x4b, 0x42, 0x0e, 0x68,
0x39, 0x2d, 0xd7, 0x6f, 0x9a, 0xdf, 0x17, 0x1a, 0xde, 0x60, 0x34, 0x1d, 0x72, 0xdd, 0xf7, 0x86,
0x09, 0x70, 0x12, 0xae, 0x34, 0x6b, 0xe3, 0x77, 0x33, 0x24, 0x5f, 0x44, 0xbd, 0xec, 0x1e, 0xe4,
0xc5, 0xfe, 0x36, 0xe3, 0x89, 0x8f, 0xce, 0x35, 0x08, 0x3a, 0x13, 0x29, 0xc4, 0xd4, 0x61, 0xd4,
0x5e, 0xaf, 0xbd, 0x66, 0x56, 0xdc, 0xe9, 0x38, 0x72, 0x5d, 0x7d, 0x4f, 0xbd, 0xd6, 0x8c, 0xdb,
0x87, 0xde, 0x3e, 0x5a, 0xa6, 0x5b, 0x5a, 0x26, 0x5d, 0x3e, 0xb1, 0x63, 0x2a, 0x2d, 0x70, 0x78,
0xc6, 0xb5, 0x0c, 0xba, 0xdf, 0xcb, 0x42, 0x2d, 0xd1, 0x23, 0x4c, 0x25, 0x14, 0x1b, 0x00, 0x05,
0x96, 0xe4, 0x7c, 0x83, 0x00, 0x49, 0x45, 0x5d, 0x1b, 0xa7, 0x6c, 0x62, 0x9c, 0xa2, 0xe4, 0x9c,
0x9c, 0x9e, 0x9c, 0xf3, 0x00, 0xca, 0xf1, 0x2d, 0x00, 0xc9, 0x2e, 0x89, 0xf6, 0xd4, 0xe9, 0x8e,
0x98, 0x28, 0x4e, 0xe7, 0x29, 0xe8, 0xe9, 0x3c, 0x5f, 0x68, 0xd9, 0x1f, 0x0b, 0x58, 0x8d, 0x91,
0x36, 0xa2, 0xbf, 0x94, 0xdc, 0x0f, 0xe3, 0x31, 0x54, 0xb4, 0xce, 0xeb, 0x59, 0x1e, 0x99, 0x44,
0x96, 0x47, 0x74, 0x3a, 0x2b, 0x1b, 0x9f, 0xce, 0x32, 0xfe, 0x52, 0x16, 0x6a, 0x62, 0x7d, 0x39,
0xee, 0xd9, 0x91, 0x37, 0x72, 0x06, 0x18, 0x68, 0x8a, 0x56, 0x98, 0x54, 0xb4, 0xd4, 0x3a, 0x93,
0x4b, 0x8c, 0xf4, 0x2c, 0xfd, 0x68, 0x2a, 0x09, 0xe9, 0xe8, 0x68, 0xaa, 0x01, 0x35, 0x21, 0x18,
0x31, 0x64, 0x14, 0xdf, 0x25, 0x60, 0x56, 0x4e, 0x39, 0xdf, 0xb6, 0x03, 0x92, 0x90, 0x3f, 0x80,
0x15, 0x41, 0x83, 0xa7, 0xf2, 0xc6, 0xce, 0x68, 0xe4, 0x10, 0x25, 0x39, 0x9a, 0xea, 0xa7, 0x9c,
0x9b, 0x76, 0xc8, 0x0f, 0x05, 0x42, 0x5e, 0x3d, 0x50, 0x1a, 0x3a, 0x81, 0x7d, 0x12, 0x27, 0x7c,
0x46, 0xcf, 0x18, 0x59, 0xb6, 0x2f, 0xb5, 0xc8, 0x32, 0x39, 0x20, 0x2a, 0x63, 0xfb, 0x32, 0x8a,
0x2c, 0xcf, 0x70, 0x52, 0x71, 0x96, 0x93, 0x8c, 0x7f, 0x9d, 0x85, 0x8a, 0xc6, 0x96, 0xaf, 0xb3,
0xbb, 0xde, 0x9e, 0x0b, 0x0c, 0x96, 0xf5, 0x18, 0xe0, 0xdb, 0xc9, 0x26, 0x31, 0xf7, 0x85, 0x2e,
0x39, 0xd0, 0x18, 0xf8, 0x16, 0x94, 0xc5, 0xaa, 0xfb, 0x08, 0x5d, 0xb0, 0xf2, 0xea, 0x0f, 0x04,
0x1c, 0x4d, 0x4f, 0x14, 0xf2, 0x21, 0x22, 0x0b, 0x31, 0xf2, 0xa1, 0x40, 0xbe, 0x2c, 0x05, 0xfb,
0x53, 0xa8, 0xca, 0x5a, 0x71, 0x4e, 0xf1, 0x75, 0xe3, 0x55, 0x9f, 0x98, 0x6f, 0xb3, 0x42, 0xcd,
0xd1, 0xe4, 0xcb, 0x82, 0x0f, 0x55, 0xc1, 0xd2, 0xab, 0x0a, 0x3e, 0xa4, 0x07, 0x63, 0x2f, 0xca,
0x6a, 0xc7, 0xbc, 0x2b, 0x25, 0xc7, 0x3e, 0x84, 0x15, 0x25, 0xae, 0xa6, 0xae, 0xed, 0xba, 0xde,
0xd4, 0x1d, 0x70, 0x75, 0x40, 0x8b, 0x49, 0xd4, 0x71, 0x8c, 0x31, 0x86, 0xd1, 0x69, 0x5f, 0xca,
0xdf, 0xba, 0x0f, 0x05, 0xd2, 0xcb, 0x49, 0xf9, 0x48, 0x17, 0x5c, 0x44, 0xc2, 0xee, 0x41, 0x81,
0xd4, 0xf3, 0xec, 0xb5, 0xc2, 0x86, 0x08, 0x8c, 0x26, 0x30, 0x51, 0xf0, 0x90, 0x87, 0xbe, 0x33,
0x08, 0xe2, 0xb3, 0x5f, 0x05, 0x61, 0x7f, 0x52, 0x5b, 0xb1, 0xe7, 0x36, 0xa6, 0x44, 0x1b, 0x95,
0x68, 0xc4, 0xc6, 0xb4, 0x92, 0xa8, 0x43, 0xaa, 0x4b, 0x23, 0x58, 0x3f, 0xe1, 0xe1, 0x0b, 0xce,
0x5d, 0x57, 0x28, 0x43, 0x03, 0xee, 0x86, 0xbe, 0x3d, 0x12, 0x93, 0x44, 0x6f, 0xf0, 0x68, 0xae,
0xd6, 0xd8, 0x07, 0xb2, 0x1d, 0x17, 0xdc, 0x89, 0xca, 0x91, 0xec, 0x58, 0x3b, 0x49, 0xc3, 0x6d,
0xfe, 0x3a, 0x6c, 0x5e, 0x5f, 0x28, 0xe5, 0xdc, 0xe7, 0xbd, 0xa4, 0x54, 0x89, 0xe2, 0x80, 0x23,
0xcf, 0x0e, 0xa9, 0x37, 0xba, 0x64, 0xe9, 0x40, 0x45, 0xc3, 0xc4, 0x7b, 0x7f, 0x06, 0x95, 0x3b,
0x7a, 0x10, 0x3b, 0x92, 0xeb, 0xf9, 0x63, 0x8c, 0xbb, 0x0d, 0xad, 0xb8, 0xf6, 0x8c, 0xb9, 0x14,
0xc3, 0xf1, 0xf8, 0xbb, 0xb1, 0x05, 0x4b, 0xa8, 0xd9, 0x6b, 0x1b, 0xdd, 0xcb, 0x94, 0x41, 0x63,
0x15, 0x58, 0x87, 0x64, 0x97, 0x9e, 0xef, 0xf9, 0x9f, 0x72, 0x50, 0xd1, 0xc0, 0x62, 0x37, 0xc2,
0x04, 0x40, 0x6b, 0xe8, 0xd8, 0x63, 0xae, 0x82, 0x9c, 0x35, 0xb3, 0x86, 0xd0, 0x5d, 0x09, 0x14,
0x7b, 0xb1, 0x7d, 0x71, 0x66, 0x79, 0xd3, 0xd0, 0x1a, 0xf2, 0x33, 0x9f, 0xab, 0x5e, 0x56, 0xed,
0x8b, 0xb3, 0xee, 0x34, 0xdc, 0x45, 0x98, 0xa0, 0x12, 0xb2, 0x44, 0xa3, 0x92, 0x39, 0x6b, 0x63,
0xfb, 0x32, 0xa6, 0x92, 0x89, 0x93, 0xc4, 0x99, 0xf9, 0x28, 0x71, 0x92, 0xac, 0xc5, 0xd9, 0x0d,
0xb4, 0x30, 0xbf, 0x81, 0x7e, 0x0c, 0xeb, 0xb4, 0x81, 0x4a, 0xd1, 0x6c, 0xcd, 0xac, 0xe4, 0x55,
0xc4, 0xca, 0x97, 0xd4, 0xd4, 0xde, 0xba, 0x78, 0x03, 0x25, 0x96, 0x02, 0xe7, 0x67, 0x24, 0xc8,
0x32, 0xa6, 0x78, 0x33, 0x59, 0x79, 0xcf, 0xf9, 0x19, 0x17, 0x94, 0x98, 0x1d, 0xa3, 0x53, 0xca,
0x03, 0x16, 0x63, 0xc7, 0x9d, 0xa5, 0xb4, 0x2f, 0x93, 0x94, 0x65, 0x49, 0x69, 0x5f, 0xea, 0x94,
0x8f, 0x60, 0x63, 0xcc, 0x87, 0x8e, 0x9d, 0xac, 0xd6, 0x8a, 0x15, 0xb7, 0x55, 0x42, 0x6b, 0x65,
0x7a, 0x64, 0xb8, 0x8b, 0xd1, 0xf8, 0x99, 0x37, 0x3e, 0x71, 0x48, 0x67, 0xa1, 0x7c, 0x9d, 0xbc,
0xb9, 0xe8, 0x4e, 0xc7, 0xbf, 0x86, 0x60, 0x51, 0x24, 0x30, 0x6a, 0x50, 0xe9, 0x85, 0xde, 0x44,
0x4d, 0xf3, 0x22, 0x54, 0xe9, 0x51, 0x9e, 0x7a, 0xbc, 0x05, 0x37, 0x51, 0x24, 0xf4, 0xbd, 0x89,
0x37, 0xf2, 0xce, 0xae, 0x12, 0x7e, 0xbc, 0x7f, 0x97, 0x81, 0x95, 0x04, 0x56, 0x8a, 0xd7, 0x8f,
0x49, 0x9e, 0x45, 0x47, 0xd7, 0x68, 0x0d, 0x2e, 0x6b, 0x6b, 0x90, 0x08, 0x49, 0x98, 0xa9, 0xe3,
0x6c, 0xcd, 0xf8, 0x7a, 0x06, 0x55, 0x90, 0x44, 0x4a, 0x63, 0x5e, 0xa4, 0xc8, 0xf2, 0xea, 0xe2,
0x06, 0x55, 0xc5, 0xaf, 0xc8, 0x43, 0x30, 0x43, 0xf9, 0xca, 0xb9, 0xe4, 0x49, 0x02, 0xdd, 0xe7,
0xa7, 0x7a, 0x10, 0x3b, 0x02, 0x03, 0xe3, 0x1f, 0x65, 0x00, 0xe2, 0xde, 0xe1, 0x59, 0x86, 0x48,
0x6f, 0xc9, 0x60, 0x1a, 0xaa, 0xa6, 0xa3, 0xbc, 0x05, 0xd5, 0x28, 0x63, 0x39, 0xd6, 0x84, 0x2a,
0x0a, 0x26, 0xd4, 0xa1, 0xf7, 0x60, 0xe9, 0x6c, 0xe4, 0x9d, 0xa0, 0xc6, 0x2a, 0xf5, 0x16, 0xca,
0x57, 0x5b, 0x24, 0xb0, 0xd2, 0x46, 0x62, 0xbd, 0x29, 0x9f, 0x9a, 0xd4, 0xac, 0x6b, 0x41, 0xc6,
0xdf, 0xc8, 0x46, 0xa9, 0x9b, 0xf1, 0x48, 0xbc, 0xdc, 0xbc, 0xfb, 0x45, 0x72, 0x69, 0x5e, 0x16,
0x5e, 0x7c, 0x0c, 0x8b, 0x3e, 0x6d, 0x4a, 0x6a, 0xc7, 0xca, 0xbf, 0x64, 0xc7, 0xaa, 0xf9, 0x09,
0x4d, 0xe7, 0xfb, 0x50, 0xb7, 0x87, 0x17, 0xdc, 0x0f, 0x1d, 0xf4, 0xd6, 0xa3, 0x7e, 0x2c, 0x93,
0x25, 0x35, 0x38, 0x2a, 0xa2, 0xef, 0xc1, 0x92, 0x3c, 0x89, 0x1b, 0x51, 0xca, 0x7b, 0x80, 0x62,
0xb0, 0x20, 0x34, 0xfe, 0xa9, 0xca, 0x15, 0x4d, 0xce, 0xee, 0xcb, 0x47, 0x45, 0x7f, 0xc3, 0xec,
0x7c, 0x00, 0x55, 0x32, 0x92, 0x0c, 0x02, 0x48, 0x79, 0x44, 0x40, 0x19, 0x02, 0x48, 0x0e, 0x6b,
0xfe, 0x75, 0x86, 0xd5, 0xf8, 0xf7, 0x19, 0x28, 0xee, 0x7b, 0x93, 0x7d, 0x87, 0xb2, 0xf9, 0x71,
0x99, 0x44, 0x31, 0xaa, 0x05, 0xf1, 0x88, 0x89, 0x3f, 0x2f, 0x39, 0x70, 0x96, 0xaa, 0xe6, 0xd5,
0x92, 0x6a, 0xde, 0x17, 0x70, 0x0b, 0x43, 0x80, 0xbe, 0x37, 0xf1, 0x7c, 0xb1, 0x54, 0xed, 0x11,
0xa9, 0x7b, 0x9e, 0x1b, 0x9e, 0x2b, 0xd9, 0x79, 0xf3, 0x94, 0xf3, 0x23, 0x8d, 0xe2, 0x30, 0x22,
0xc0, 0x23, 0x9d, 0xa3, 0xf0, 0xc2, 0x22, 0x0b, 0x5d, 0xea, 0xa3, 0x24, 0x51, 0x97, 0x04, 0xa2,
0x85, 0x70, 0xd4, 0x48, 0x8d, 0xcf, 0xa0, 0x1c, 0x39, 0x7b, 0xd8, 0xfb, 0x50, 0x3e, 0xf7, 0x26,
0xd2, 0x23, 0x94, 0x49, 0x1c, 0xca, 0x93, 0x6f, 0x6d, 0x96, 0xce, 0xe9, 0x47, 0x60, 0xfc, 0x61,
0x11, 0x8a, 0x6d, 0xf7, 0xc2, 0x73, 0x06, 0x98, 0x6d, 0x3a, 0xe6, 0x63, 0x4f, 0x5d, 0x07, 0x20,
0x7e, 0x63, 0x6e, 0x56, 0x7c, 0x9b, 0x4f, 0x4e, 0xe6, 0x66, 0x45, 0xf7, 0xf8, 0xac, 0xc1, 0x82,
0xaf, 0x5f, 0xc7, 0x53, 0xf0, 0x31, 0xff, 0x3d, 0xda, 0x2f, 0x0b, 0xda, 0x25, 0x0b, 0xa2, 0x2e,
0xba, 0x26, 0x06, 0x87, 0x8c, 0x8e, 0x67, 0x96, 0x11, 0x82, 0x03, 0xf6, 0x06, 0x14, 0xe5, 0x19,
0x38, 0x3a, 0xb4, 0x44, 0x09, 0xeb, 0x12, 0x84, 0xdc, 0xe0, 0x73, 0x0a, 0xe1, 0x46, 0x8a, 0x6c,
0xce, 0xac, 0x2a, 0xe0, 0xae, 0xe0, 0xb5, 0x3b, 0x50, 0x21, 0x7a, 0x22, 0x29, 0xc9, 0x24, 0x4d,
0x04, 0x21, 0x41, 0xca, 0xad, 0x56, 0xe5, 0xd4, 0x5b, 0xad, 0x30, 0x9d, 0x38, 0x92, 0xb2, 0xf4,
0x8a, 0x40, 0x77, 0x19, 0x69, 0x70, 0x75, 0x55, 0x9c, 0xf4, 0xa9, 0xd0, 0x69, 0x65, 0xe5, 0x53,
0x79, 0x1b, 0x6a, 0xa7, 0xf6, 0x68, 0x74, 0x62, 0x0f, 0x9e, 0x93, 0x2b, 0xa0, 0x4a, 0xde, 0x4f,
0x05, 0x44, 0x5f, 0xc0, 0x1d, 0xa8, 0x68, 0xb3, 0x8c, 0x19, 0x98, 0x79, 0x13, 0xe2, 0xf9, 0x9d,
0xf5, 0xf0, 0x2d, 0xbe, 0x86, 0x87, 0x4f, 0xcb, 0x44, 0x5d, 0x4a, 0x66, 0xa2, 0xde, 0x42, 0x69,
0x2a, 0x53, 0x0e, 0xeb, 0x74, 0x71, 0x8e, 0x3d, 0x1c, 0x62, 0xca, 0x21, 0x3a, 0xb2, 0x68, 0xf0,
0x08, 0xbf, 0x4c, 0xb6, 0x04, 0xc1, 0x88, 0xe4, 0x36, 0xb9, 0xa9, 0x27, 0xb6, 0x33, 0xc4, 0x43,
0x07, 0xe4, 0x3d, 0x28, 0xda, 0xe3, 0xf0, 0xc8, 0x76, 0x86, 0xec, 0x2e, 0x54, 0x15, 0x1a, 0x77,
0xc7, 0x15, 0x1a, 0x7f, 0x89, 0x16, 0x7b, 0xa2, 0x01, 0xb5, 0x88, 0x62, 0x1c, 0x1f, 0x39, 0xae,
0x48, 0x12, 0xe4, 0x83, 0x8f, 0x30, 0xcb, 0x27, 0xe4, 0x78, 0xb0, 0x78, 0xf1, 0xe1, 0xad, 0x28,
0xf9, 0x00, 0xb9, 0x54, 0xfd, 0xa7, 0xe0, 0x18, 0x51, 0x0a, 0xe5, 0x8e, 0x62, 0x74, 0xeb, 0x09,
0xfd, 0x57, 0x92, 0x62, 0x8c, 0x8e, 0x08, 0xd8, 0x67, 0x9a, 0xfd, 0xda, 0x40, 0xe2, 0x37, 0x66,
0xea, 0xbf, 0xee, 0x50, 0xd6, 0x6d, 0x00, 0x27, 0x10, 0xbb, 0x4c, 0xc0, 0xdd, 0x21, 0x9e, 0x11,
0x2e, 0x99, 0x65, 0x27, 0x78, 0x4a, 0x80, 0xef, 0xd6, 0xb0, 0x6d, 0x42, 0x55, 0x7f, 0x4d, 0x56,
0x82, 0x7c, 0xf7, 0xa8, 0xd5, 0xa9, 0xdf, 0x60, 0x15, 0x28, 0xf6, 0x5a, 0xfd, 0xfe, 0x01, 0x46,
0xfa, 0xaa, 0x50, 0x8a, 0x0e, 0x32, 0x66, 0xc5, 0x53, 0x73, 0x67, 0xa7, 0x75, 0xd4, 0x6f, 0xed,
0xd6, 0x73, 0x3f, 0xcd, 0x97, 0xb2, 0xf5, 0x9c, 0xf1, 0x47, 0x39, 0xa8, 0x68, 0xa3, 0xf0, 0x72,
0x61, 0x7c, 0x1b, 0x00, 0x2d, 0xc9, 0x38, 0x23, 0x35, 0x6f, 0x96, 0x05, 0x84, 0x26, 0x5f, 0x8f,
0x51, 0xe4, 0xe8, 0x46, 0x26, 0x15, 0xa3, 0x78, 0x1b, 0x6a, 0x74, 0xb9, 0x91, 0x1e, 0xaf, 0x2d,
0x98, 0x55, 0x02, 0x4a, 0x51, 0x8d, 0x27, 0x9c, 0x91, 0x08, 0x8f, 0xd7, 0xc9, 0x4b, 0x4d, 0x08,
0x84, 0x07, 0xec, 0xf0, 0x74, 0x64, 0xe0, 0x8d, 0x2e, 0x38, 0x51, 0x90, 0x46, 0x58, 0x91, 0xb0,
0xbe, 0x3c, 0xab, 0x2d, 0xe5, 0xa1, 0x76, 0xc4, 0xb6, 0x60, 0x56, 0x09, 0x28, 0x1b, 0xfa, 0x81,
0x62, 0x20, 0xca, 0x5e, 0xd9, 0x98, 0xe7, 0x86, 0x04, 0xf3, 0x1c, 0xcc, 0xb9, 0x11, 0xcb, 0xc8,
0x18, 0xdf, 0x9b, 0x2f, 0xf7, 0x6a, 0x77, 0x22, 0x7b, 0x1f, 0xd8, 0x78, 0x32, 0xb1, 0x52, 0x1c,
0x7c, 0x79, 0x73, 0x69, 0x3c, 0x99, 0xf4, 0x35, 0xff, 0xd7, 0x77, 0xe0, 0x7b, 0xfc, 0x06, 0x58,
0x53, 0x2c, 0x60, 0xec, 0x62, 0x64, 0x8a, 0xc5, 0x62, 0x39, 0xa3, 0x8b, 0xe5, 0x14, 0xe9, 0x97,
0x4d, 0x95, 0x7e, 0x2f, 0x93, 0x13, 0xc6, 0x1e, 0x54, 0x8e, 0xb4, 0xab, 0xd3, 0xee, 0x8a, 0x1d,
0x42, 0x5d, 0x9a, 0x46, 0x7b, 0x07, 0xf9, 0x14, 0x7d, 0x79, 0x57, 0x9a, 0xd6, 0x9b, 0xac, 0xd6,
0x1b, 0xe3, 0x1f, 0x64, 0xe8, 0xaa, 0x99, 0xa8, 0xf3, 0xf1, 0x6d, 0x6d, 0x2a, 0xfc, 0x16, 0x9f,
0x84, 0xaf, 0xa8, 0xb0, 0x9b, 0x3c, 0xc4, 0x8e, 0x5d, 0xb3, 0xbc, 0xd3, 0xd3, 0x80, 0xab, 0x1c,
0x8f, 0x0a, 0xc2, 0xba, 0x08, 0x52, 0xca, 0xb7, 0xd0, 0xf0, 0x1d, 0xaa, 0x3f, 0x90, 0x89, 0x1d,
0x42, 0xf9, 0x3e, 0xb4, 0x2f, 0x65, 0xab, 0x81, 0x50, 0x41, 0x64, 0x7c, 0x40, 0x1d, 0x96, 0x8d,
0x9e, 0x8d, 0xbf, 0x2b, 0x0f, 0xeb, 0xcf, 0x8e, 0xef, 0x7d, 0x28, 0x45, 0xb5, 0x26, 0x77, 0x58,
0x45, 0x19, 0xe1, 0xc5, 0x3e, 0x8e, 0xce, 0x90, 0x44, 0x8f, 0x69, 0x71, 0x61, 0x8c, 0xa7, 0xad,
0xf5, 0xfa, 0x03, 0x60, 0xa7, 0x8e, 0x3f, 0x4b, 0x4c, 0x8b, 0xad, 0x8e, 0x18, 0x8d, 0xda, 0x38,
0x86, 0x15, 0x25, 0x25, 0x34, 0x8b, 0x20, 0x39, 0x79, 0x99, 0x57, 0x08, 0xf9, 0xec, 0x9c, 0x90,
0x37, 0x7e, 0xb3, 0x00, 0x45, 0x75, 0x0d, 0x61, 0xda, 0xd5, 0x79, 0xe5, 0xe4, 0xd5, 0x79, 0x8d,
0xc4, 0x85, 0x4a, 0x38, 0xf5, 0x72, 0xbf, 0x7f, 0x6f, 0x76, 0xcb, 0xd6, 0x62, 0x15, 0x89, 0x6d,
0x5b, 0xc6, 0x2a, 0x0a, 0xc9, 0x58, 0x45, 0xda, 0x75, 0x82, 0xa4, 0x7a, 0xce, 0x5d, 0x27, 0x78,
0x0b, 0x48, 0x8f, 0xd0, 0x92, 0xdb, 0x4a, 0x08, 0x10, 0x7b, 0x4e, 0x52, 0xed, 0x28, 0xcd, 0xaa,
0x1d, 0xaf, 0xad, 0x12, 0x7c, 0x0c, 0x0b, 0x74, 0xbd, 0x86, 0x3c, 0xfc, 0xab, 0x36, 0x0e, 0x39,
0x56, 0xea, 0x3f, 0x9d, 0x78, 0x30, 0x25, 0xad, 0x7e, 0x37, 0x57, 0x25, 0x71, 0x37, 0x97, 0x1e,
0x43, 0xa9, 0x26, 0x63, 0x28, 0xf7, 0xa0, 0x1e, 0x0d, 0x1c, 0x7a, 0x24, 0xdd, 0x40, 0x9e, 0x1c,
0x5c, 0x54, 0x70, 0x21, 0x0d, 0x3b, 0x41, 0xbc, 0xf1, 0x2d, 0x26, 0x36, 0x3e, 0x21, 0xab, 0x9a,
0x61, 0xc8, 0xc7, 0x93, 0x50, 0x6d, 0x7c, 0xda, 0x0d, 0x8e, 0x34, 0xf3, 0x4b, 0x38, 0xf3, 0x6a,
0x7a, 0x89, 0x3b, 0xb6, 0x61, 0xf1, 0xd4, 0x76, 0x46, 0x53, 0x9f, 0x5b, 0x3e, 0xb7, 0x03, 0xcf,
0xc5, 0xc5, 0x1f, 0xef, 0xc1, 0xf2, 0x15, 0xf7, 0x88, 0xc6, 0x44, 0x12, 0xb3, 0x76, 0xaa, 0x3f,
0xe2, 0x21, 0x26, 0x7d, 0x24, 0xc4, 0x96, 0x25, 0xcf, 0x10, 0x53, 0xae, 0x4a, 0xbb, 0x63, 0xed,
0x1d, 0xb4, 0x9f, 0xec, 0xf7, 0xeb, 0x19, 0xf1, 0xd8, 0x3b, 0xde, 0xd9, 0x69, 0xb5, 0x76, 0x71,
0x0b, 0x03, 0x58, 0xd8, 0x6b, 0xb6, 0x0f, 0xe4, 0x06, 0x96, 0xaf, 0x17, 0x8c, 0x7f, 0x99, 0x85,
0x8a, 0xf6, 0x36, 0xec, 0x51, 0x34, 0x09, 0x74, 0x03, 0xd4, 0xed, 0xf9, 0x37, 0xde, 0x52, 0x12,
0x5e, 0x9b, 0x85, 0xe8, 0xae, 0xc6, 0xec, 0xb5, 0x77, 0x35, 0xb2, 0x77, 0x61, 0xc9, 0xa6, 0x1a,
0xa2, 0x41, 0x97, 0xce, 0x7d, 0x09, 0x96, 0x63, 0x8e, 0x19, 0xa4, 0xf1, 0x36, 0x25, 0xe8, 0xf2,
0x2a, 0x69, 0x33, 0xda, 0xa9, 0x70, 0x6e, 0x8a, 0x72, 0x64, 0x64, 0x30, 0x3e, 0xda, 0xf0, 0xe5,
0x78, 0x29, 0xb4, 0x10, 0x41, 0x09, 0x0e, 0xaf, 0x9a, 0xd1, 0xb3, 0xf1, 0x09, 0x40, 0xfc, 0x3e,
0xc9, 0xe1, 0xbb, 0x91, 0x1c, 0xbe, 0x8c, 0x36, 0x7c, 0x59, 0xe3, 0x9f, 0x48, 0xd1, 0x25, 0xe7,
0x22, 0x72, 0xf5, 0xfd, 0x00, 0x94, 0xf3, 0xd1, 0xc2, 0x24, 0xef, 0xc9, 0x88, 0x87, 0xea, 0x32,
0x83, 0x65, 0x89, 0x69, 0x47, 0x88, 0x39, 0x51, 0x9b, 0x9d, 0x17, 0xb5, 0x6f, 0x41, 0x55, 0x88,
0x59, 0xc9, 0x48, 0x81, 0x14, 0x57, 0x95, 0xb1, 0x7d, 0xa9, 0xda, 0x4e, 0xc8, 0xd8, 0xfc, 0x8c,
0x8c, 0xfd, 0x7b, 0x19, 0xba, 0x5b, 0x24, 0xee, 0x68, 0x2c, 0x64, 0xa3, 0x3a, 0x93, 0x42, 0x56,
0x92, 0x9a, 0x11, 0xfe, 0x1a, 0xc1, 0x99, 0x4d, 0x17, 0x9c, 0xe9, 0x22, 0x39, 0x97, 0x2a, 0x92,
0x8d, 0x4d, 0x68, 0xec, 0x72, 0x31, 0x14, 0xcd, 0xd1, 0x68, 0x66, 0x2c, 0x8d, 0x5b, 0x70, 0x33,
0x05, 0x27, 0xbd, 0x36, 0x5f, 0xc2, 0x5a, 0x93, 0x2e, 0x5d, 0xf8, 0xae, 0x0e, 0x4f, 0x1a, 0x0d,
0x58, 0x9f, 0xad, 0x52, 0x36, 0xb6, 0x07, 0xcb, 0xbb, 0xfc, 0x64, 0x7a, 0x76, 0xc0, 0x2f, 0xe2,
0x86, 0x18, 0xe4, 0x83, 0x73, 0xef, 0x85, 0x9c, 0x5c, 0xfc, 0x8d, 0x69, 0x99, 0x82, 0xc6, 0x0a,
0x26, 0x7c, 0xa0, 0x3c, 0xf7, 0x08, 0xe9, 0x4d, 0xf8, 0xc0, 0x78, 0x04, 0x4c, 0xaf, 0x47, 0xce,
0x84, 0x30, 0xab, 0xa6, 0x27, 0x56, 0x70, 0x15, 0x84, 0x7c, 0xac, 0x0e, 0x0d, 0x42, 0x30, 0x3d,
0xe9, 0x11, 0xc4, 0x78, 0x0f, 0xaa, 0x47, 0xf6, 0x95, 0xc9, 0xbf, 0x91, 0x67, 0xf3, 0x36, 0xa0,
0x38, 0xb1, 0xaf, 0x84, 0x3c, 0x8d, 0x82, 0x78, 0x88, 0x36, 0xfe, 0x59, 0x1e, 0x16, 0x88, 0x92,
0xdd, 0xa5, 0x9b, 0x90, 0x1d, 0x17, 0xe5, 0x99, 0xda, 0x59, 0x34, 0xd0, 0xdc, 0xe6, 0x93, 0x9d,
0xdf, 0x7c, 0xa4, 0xc7, 0x51, 0xdd, 0xea, 0xa4, 0xc2, 0x2d, 0xee, 0x74, 0xac, 0xae, 0x72, 0x4a,
0xde, 0x3c, 0x90, 0x8f, 0x6f, 0xd0, 0xa6, 0x53, 0xd7, 0xc9, 0x80, 0x78, 0x6c, 0xbc, 0x51, 0xef,
0xd4, 0x9e, 0x2a, 0xf7, 0x1d, 0x1d, 0x94, 0x6a, 0x21, 0x16, 0xd5, 0x81, 0xd3, 0xa4, 0x85, 0x38,
0x67, 0x09, 0x96, 0x5e, 0x6d, 0x09, 0x92, 0x2b, 0xf2, 0x25, 0x96, 0x20, 0xbc, 0x86, 0x25, 0xf8,
0x1a, 0xc1, 0xe8, 0x9b, 0x50, 0x42, 0x45, 0x49, 0xdb, 0x86, 0x84, 0x82, 0x24, 0xb6, 0xa1, 0x4f,
0x35, 0x5b, 0x89, 0x32, 0x61, 0xb4, 0x7d, 0xc0, 0xe4, 0xdf, 0xfc, 0x72, 0x82, 0x7c, 0x5f, 0x43,
0x51, 0x42, 0x05, 0x43, 0xbb, 0xf6, 0x58, 0x5d, 0x8c, 0x87, 0xbf, 0xc5, 0xb0, 0xe1, 0x6d, 0x5e,
0xdf, 0x4c, 0x1d, 0x9f, 0x0f, 0xd5, 0x8d, 0x47, 0x0e, 0xae, 0x51, 0x01, 0x11, 0x2f, 0x28, 0xec,
0x36, 0xd7, 0x7b, 0xe1, 0x4a, 0xd9, 0x53, 0x74, 0x82, 0xa7, 0xe2, 0xd1, 0x60, 0x50, 0xc7, 0x6b,
0x34, 0x27, 0x9e, 0xaf, 0x76, 0x79, 0xe3, 0xe7, 0x19, 0xa8, 0xcb, 0xd5, 0x15, 0xe1, 0x74, 0xb3,
0xa9, 0x70, 0x5d, 0xe2, 0xc6, 0xcb, 0xef, 0x2f, 0x32, 0xa0, 0x86, 0xde, 0xa2, 0x68, 0xcb, 0x27,
0x6f, 0x57, 0x45, 0x00, 0xf7, 0xe4, 0xb6, 0xff, 0x26, 0x54, 0x54, 0xd2, 0xf8, 0xd8, 0x19, 0xa9,
0xcb, 0xf2, 0x29, 0x6b, 0xfc, 0xd0, 0x19, 0x29, 0x8d, 0xc1, 0xb7, 0xe5, 0x01, 0xe8, 0x0c, 0x6a,
0x0c, 0xa6, 0x1d, 0x72, 0xe3, 0x5f, 0x64, 0x60, 0x59, 0x7b, 0x15, 0xb9, 0x6e, 0x7f, 0x04, 0xd5,
0xe8, 0xfe, 0x5a, 0x1e, 0xa9, 0xaa, 0x1b, 0x49, 0x41, 0x13, 0x17, 0xab, 0x0c, 0x22, 0x48, 0x20,
0x3a, 0x33, 0xb4, 0xaf, 0x28, 0xb3, 0x79, 0x3a, 0x56, 0xd6, 0xe0, 0xd0, 0xbe, 0xda, 0xe3, 0xbc,
0x37, 0x1d, 0x0b, 0x5b, 0xff, 0x05, 0xe7, 0xcf, 0x23, 0x02, 0x12, 0x9f, 0x20, 0x60, 0x92, 0xc2,
0x80, 0xda, 0xd8, 0x73, 0xc3, 0xf3, 0x88, 0x44, 0xaa, 0xe9, 0x08, 0x24, 0x1a, 0xe3, 0x0f, 0xb2,
0xb0, 0x42, 0x3e, 0x49, 0xe9, 0x0b, 0x96, 0xa2, 0xab, 0x01, 0x0b, 0xe4, 0x9e, 0x25, 0xe1, 0xb5,
0x7f, 0xc3, 0x94, 0xcf, 0xec, 0xe3, 0xd7, 0xf4, 0xa3, 0xaa, 0x33, 0xd6, 0xd7, 0x0c, 0x7f, 0x6e,
0x7e, 0xf8, 0xaf, 0x1f, 0xde, 0xb4, 0xc8, 0x70, 0x21, 0x2d, 0x32, 0xfc, 0x3a, 0xf1, 0xd8, 0xb9,
0xd3, 0xc0, 0x45, 0x49, 0xa3, 0x9d, 0x06, 0x7e, 0x04, 0x1b, 0x09, 0x1a, 0x94, 0xd6, 0xce, 0xa9,
0xc3, 0xd5, 0x8d, 0x35, 0xab, 0x1a, 0x75, 0x4f, 0xe1, 0xb6, 0x8b, 0x50, 0x08, 0x06, 0xde, 0x84,
0x1b, 0xeb, 0xb0, 0x9a, 0x1c, 0x55, 0xb9, 0x4d, 0xfc, 0x76, 0x06, 0x1a, 0x32, 0x8f, 0xc7, 0x71,
0xcf, 0xf6, 0x9d, 0x20, 0xf4, 0xfc, 0xe8, 0x9e, 0xd7, 0xdb, 0x00, 0x74, 0x71, 0x3f, 0x1a, 0xdf,
0xf2, 0x8e, 0x16, 0x84, 0xa0, 0xe9, 0x7d, 0x13, 0x4a, 0xdc, 0x1d, 0x12, 0x92, 0xb8, 0xa1, 0xc8,
0xdd, 0xa1, 0x32, 0xdc, 0xe7, 0xb6, 0xd2, 0x5a, 0x52, 0x49, 0x90, 0x37, 0x22, 0x88, 0xd1, 0xe1,
0x17, 0xb8, 0xa5, 0xe7, 0xa3, 0x1b, 0x11, 0x0e, 0xed, 0x4b, 0xcc, 0x8a, 0x0d, 0x8c, 0xbf, 0x99,
0x85, 0xa5, 0xb8, 0x7f, 0x74, 0xdf, 0xca, 0xcb, 0x6f, 0x8e, 0xb9, 0x2b, 0xd9, 0xc1, 0x11, 0x06,
0x8f, 0xe6, 0xa9, 0x2d, 0xd1, 0xe2, 0x6c, 0xbb, 0xcc, 0x80, 0x8a, 0xa2, 0xf0, 0xa6, 0xa1, 0x76,
0x85, 0x62, 0x99, 0x48, 0xba, 0xd3, 0x50, 0x58, 0xa8, 0xc2, 0x54, 0x77, 0x5c, 0x69, 0x23, 0x16,
0xec, 0x71, 0xd8, 0xc6, 0xaf, 0x43, 0x08, 0xb0, 0x28, 0x46, 0x13, 0x29, 0xa8, 0x04, 0x7d, 0x9d,
0x0c, 0x16, 0x9a, 0x39, 0x34, 0x56, 0x74, 0x6d, 0x9e, 0x2e, 0xb4, 0x8e, 0xb4, 0xf9, 0x37, 0xa1,
0x42, 0x95, 0xc7, 0x87, 0xbf, 0xf3, 0x66, 0x19, 0x5b, 0x40, 0xbc, 0xf4, 0x9a, 0x79, 0xd3, 0x84,
0xaf, 0x00, 0xa8, 0x29, 0x4c, 0x93, 0xf9, 0xab, 0x19, 0xb8, 0x99, 0x32, 0x6d, 0x72, 0x95, 0xef,
0xc0, 0xf2, 0x69, 0x84, 0x54, 0xa3, 0x4b, 0x4b, 0x7d, 0x5d, 0x89, 0xd5, 0xe4, 0x98, 0x9a, 0xf5,
0xd3, 0x24, 0x20, 0xb6, 0x52, 0x69, 0x06, 0x13, 0x57, 0x0b, 0xa0, 0x4a, 0x44, 0xd3, 0x48, 0x06,
0xe2, 0x11, 0x6c, 0xb6, 0x2e, 0x85, 0xc4, 0x88, 0x52, 0x6b, 0x07, 0xcf, 0xa7, 0x2a, 0x7a, 0x35,
0xe3, 0x91, 0xcf, 0xbc, 0x96, 0x47, 0x7e, 0x48, 0x67, 0x91, 0xa3, 0xba, 0x7e, 0x91, 0x4a, 0x70,
0x03, 0x15, 0x65, 0x4e, 0xb0, 0x0a, 0x75, 0xc7, 0x80, 0x00, 0x51, 0xa5, 0x46, 0x00, 0x4b, 0x87,
0xd3, 0x51, 0xe8, 0xec, 0x44, 0x20, 0xf6, 0xb1, 0x2c, 0x83, 0xed, 0xa8, 0x51, 0x4b, 0x6d, 0x08,
0xa2, 0x86, 0x70, 0xb0, 0xc6, 0xa2, 0x22, 0x6b, 0xbe, 0xbd, 0xa5, 0x71, 0xb2, 0x05, 0xe3, 0x26,
0x6c, 0xc4, 0x4f, 0x34, 0x6c, 0x6a, 0xab, 0xf9, 0xfb, 0x19, 0x4a, 0xc1, 0x27, 0x5c, 0xcf, 0xb5,
0x27, 0xc1, 0xb9, 0x17, 0xb2, 0x16, 0xac, 0x04, 0x8e, 0x7b, 0x36, 0xe2, 0x7a, 0xf5, 0x81, 0x1c,
0x84, 0xb5, 0x64, 0xdf, 0xa8, 0x68, 0x60, 0x2e, 0x53, 0x89, 0xb8, 0xb6, 0x80, 0x6d, 0x5f, 0xd7,
0xc9, 0x98, 0x2d, 0x66, 0x46, 0x63, 0xbe, 0xf3, 0x6d, 0x58, 0x4c, 0x36, 0xc4, 0x3e, 0x95, 0x47,
0xf8, 0xe3, 0x5e, 0xe5, 0x66, 0xce, 0x37, 0xc7, 0x0c, 0x51, 0x89, 0xc7, 0x3e, 0x30, 0xfe, 0x7a,
0x06, 0x1a, 0x26, 0x17, 0x9c, 0xab, 0xf5, 0x52, 0xf1, 0xcc, 0x8f, 0xe6, 0x6a, 0xbd, 0xfe, 0x5d,
0xd5, 0xcd, 0x00, 0xaa, 0x47, 0x1f, 0x5c, 0x3b, 0x19, 0xfb, 0x37, 0xe6, 0xde, 0x68, 0xbb, 0x04,
0x0b, 0x44, 0x62, 0x6c, 0xc0, 0x9a, 0xec, 0x8f, 0xea, 0x4b, 0x1c, 0x6e, 0x4d, 0xb4, 0x98, 0x08,
0xb7, 0x6e, 0x42, 0x83, 0xce, 0xea, 0xea, 0x2f, 0x21, 0x0b, 0xee, 0x02, 0x3b, 0xb4, 0x07, 0xb6,
0xef, 0x79, 0xee, 0x11, 0xf7, 0x65, 0x42, 0x33, 0x6a, 0x98, 0x18, 0x8d, 0x54, 0xaa, 0x30, 0x3d,
0xa9, 0x8b, 0x63, 0x3d, 0x57, 0xe5, 0x6f, 0xd1, 0x93, 0x61, 0xc2, 0xca, 0xb6, 0xfd, 0x9c, 0xab,
0x9a, 0xd4, 0x10, 0x3d, 0x86, 0xca, 0x24, 0xaa, 0x54, 0x8d, 0xbb, 0xba, 0x62, 0x64, 0xbe, 0x59,
0x53, 0xa7, 0x36, 0x1e, 0xc2, 0x6a, 0xb2, 0x4e, 0x29, 0x3a, 0x36, 0xa1, 0x34, 0x96, 0x30, 0xd9,
0xbb, 0xe8, 0xd9, 0xf8, 0xad, 0x12, 0x14, 0xa5, 0xa5, 0xca, 0xb6, 0x20, 0x3f, 0x50, 0x39, 0x74,
0xf1, 0xd5, 0x56, 0x12, 0xab, 0xfe, 0xef, 0x60, 0x26, 0x9d, 0xa0, 0x63, 0x8f, 0x61, 0x31, 0x19,
0x46, 0x9e, 0xb9, 0x09, 0x20, 0x19, 0xff, 0xad, 0x0d, 0x66, 0x02, 0x86, 0xe5, 0x78, 0x73, 0x24,
0x9d, 0xa1, 0x74, 0xae, 0xed, 0x9e, 0x9e, 0x2b, 0xf4, 0xed, 0xe0, 0xdc, 0xb6, 0x1e, 0x3e, 0xfa,
0x44, 0x5e, 0x05, 0x50, 0x41, 0x60, 0xef, 0xdc, 0x7e, 0xf8, 0xe8, 0x93, 0x59, 0x4d, 0x5a, 0x5e,
0x04, 0xa0, 0x69, 0xd2, 0xab, 0x50, 0xa0, 0x1b, 0x52, 0x29, 0x19, 0x8a, 0x1e, 0xd8, 0x03, 0x58,
0x55, 0xce, 0x0f, 0x99, 0xb6, 0x4e, 0x52, 0xb0, 0x44, 0x27, 0x05, 0x25, 0xae, 0x87, 0x28, 0x72,
0x97, 0xac, 0xc3, 0xc2, 0x79, 0x7c, 0xdd, 0x6d, 0xcd, 0x94, 0x4f, 0xc6, 0x1f, 0x14, 0xa0, 0xa2,
0x0d, 0x0a, 0xab, 0x42, 0xc9, 0x6c, 0xf5, 0x5a, 0xe6, 0xb3, 0xd6, 0x6e, 0xfd, 0x06, 0xbb, 0x07,
0xef, 0xb4, 0x3b, 0x3b, 0x5d, 0xd3, 0x6c, 0xed, 0xf4, 0xad, 0xae, 0x69, 0xa9, 0x0b, 0xd6, 0x8e,
0x9a, 0x5f, 0x1f, 0xb6, 0x3a, 0x7d, 0x6b, 0xb7, 0xd5, 0x6f, 0xb6, 0x0f, 0x7a, 0xf5, 0x0c, 0x7b,
0x03, 0x1a, 0x31, 0xa5, 0x42, 0x37, 0x0f, 0xbb, 0xc7, 0x9d, 0x7e, 0x3d, 0xcb, 0xee, 0xc0, 0xad,
0xbd, 0x76, 0xa7, 0x79, 0x60, 0xc5, 0x34, 0x3b, 0x07, 0xfd, 0x67, 0x56, 0xeb, 0x57, 0x8f, 0xda,
0xe6, 0xd7, 0xf5, 0x5c, 0x1a, 0xc1, 0x7e, 0xff, 0x60, 0x47, 0xd5, 0x90, 0x67, 0x37, 0x61, 0x8d,
0x08, 0xa8, 0x88, 0xd5, 0xef, 0x76, 0xad, 0x5e, 0xb7, 0xdb, 0xa9, 0x17, 0xd8, 0x32, 0xd4, 0xda,
0x9d, 0x67, 0xcd, 0x83, 0xf6, 0xae, 0x65, 0xb6, 0x9a, 0x07, 0x87, 0xf5, 0x05, 0xb6, 0x02, 0x4b,
0xb3, 0x74, 0x45, 0x51, 0x85, 0xa2, 0xeb, 0x76, 0xda, 0xdd, 0x8e, 0xf5, 0xac, 0x65, 0xf6, 0xda,
0xdd, 0x4e, 0xbd, 0xc4, 0xd6, 0x81, 0x25, 0x51, 0xfb, 0x87, 0xcd, 0x9d, 0x7a, 0x99, 0xad, 0xc1,
0x72, 0x12, 0xfe, 0xb4, 0xf5, 0x75, 0x1d, 0x58, 0x03, 0x56, 0xa9, 0x63, 0xd6, 0x76, 0xeb, 0xa0,
0xfb, 0x95, 0x75, 0xd8, 0xee, 0xb4, 0x0f, 0x8f, 0x0f, 0xeb, 0x15, 0xbc, 0xb7, 0xb1, 0xd5, 0xb2,
0xda, 0x9d, 0xde, 0xf1, 0xde, 0x5e, 0x7b, 0xa7, 0xdd, 0xea, 0xf4, 0xeb, 0x55, 0x6a, 0x39, 0xed,
0xc5, 0x6b, 0xa2, 0x80, 0x3c, 0xdb, 0x62, 0xed, 0xb6, 0x7b, 0xcd, 0xed, 0x83, 0xd6, 0x6e, 0x7d,
0x91, 0xdd, 0x86, 0x9b, 0xfd, 0xd6, 0xe1, 0x51, 0xd7, 0x6c, 0x9a, 0x5f, 0xab, 0xb3, 0x2f, 0xd6,
0x5e, 0xb3, 0x7d, 0x70, 0x6c, 0xb6, 0xea, 0x4b, 0xec, 0x2d, 0xb8, 0x6d, 0xb6, 0xbe, 0x3c, 0x6e,
0x9b, 0xad, 0x5d, 0xab, 0xd3, 0xdd, 0x6d, 0x59, 0x7b, 0xad, 0x66, 0xff, 0xd8, 0x6c, 0x59, 0x87,
0xed, 0x5e, 0xaf, 0xdd, 0x79, 0x52, 0xaf, 0xb3, 0x77, 0xe0, 0x6e, 0x44, 0x12, 0x55, 0x30, 0x43,
0xb5, 0x2c, 0xde, 0x4f, 0x4d, 0x69, 0xa7, 0xf5, 0xab, 0x7d, 0xeb, 0xa8, 0xd5, 0x32, 0xeb, 0x8c,
0x6d, 0xc2, 0x7a, 0xdc, 0x3c, 0x35, 0x20, 0xdb, 0x5e, 0x11, 0xb8, 0xa3, 0x96, 0x79, 0xd8, 0xec,
0x88, 0x09, 0x4e, 0xe0, 0x56, 0x45, 0xb7, 0x63, 0xdc, 0x6c, 0xb7, 0xd7, 0x18, 0x83, 0x45, 0x6d,
0x56, 0xf6, 0x9a, 0x66, 0x7d, 0x9d, 0x2d, 0x41, 0xe5, 0xf0, 0xe8, 0xc8, 0xea, 0xb7, 0x0f, 0x5b,
0xdd, 0xe3, 0x7e, 0x7d, 0x83, 0xad, 0x41, 0xbd, 0xdd, 0xe9, 0xb7, 0x4c, 0x31, 0xd7, 0xaa, 0xe8,
0x7f, 0x2b, 0xb2, 0x55, 0x58, 0x52, 0x3d, 0x55, 0xd0, 0x3f, 0x2e, 0xb2, 0x0d, 0x60, 0xc7, 0x1d,
0xb3, 0xd5, 0xdc, 0x15, 0x03, 0x17, 0x21, 0xfe, 0x7b, 0x51, 0x86, 0x94, 0x7e, 0x9e, 0x8b, 0x36,
0xeb, 0x38, 0x47, 0x23, 0x79, 0xf9, 0x79, 0x55, 0xbb, 0xb4, 0xfc, 0x55, 0x9f, 0x30, 0xd1, 0x4c,
0xab, 0xdc, 0x9c, 0x69, 0x35, 0x67, 0xbb, 0xd7, 0x74, 0xdd, 0xef, 0x6d, 0xa8, 0x8d, 0xe9, 0x22,
0x74, 0x79, 0xe1, 0x31, 0xc8, 0x84, 0x25, 0x02, 0xd2, 0x6d, 0xc7, 0x73, 0xdf, 0xf0, 0x28, 0xcc,
0x7f, 0xc3, 0x23, 0x4d, 0xbf, 0x5f, 0x48, 0xd3, 0xef, 0xef, 0xc3, 0x32, 0x89, 0x26, 0xc7, 0x75,
0xc6, 0xca, 0x6a, 0x26, 0x2d, 0x70, 0x09, 0x45, 0x14, 0xc1, 0x95, 0x39, 0xa1, 0x4c, 0x0e, 0x29,
0x42, 0x8a, 0xd2, 0xda, 0x48, 0x58, 0x1a, 0x24, 0x39, 0x22, 0x4b, 0x23, 0x6a, 0xc1, 0xbe, 0x8c,
0x5b, 0xa8, 0x68, 0x2d, 0x10, 0x1c, 0x5b, 0xb8, 0x0f, 0xcb, 0xfc, 0x32, 0xf4, 0x6d, 0xcb, 0x9b,
0xd8, 0xdf, 0x4c, 0x31, 0xe6, 0x6d, 0xa3, 0x0d, 0x5f, 0x35, 0x97, 0x10, 0xd1, 0x45, 0xf8, 0xae,
0x1d, 0xda, 0xf7, 0xff, 0x3c, 0x54, 0xb4, 0x4b, 0xf2, 0xd9, 0x06, 0xac, 0x7c, 0xd5, 0xee, 0x77,
0x5a, 0xbd, 0x9e, 0x75, 0x74, 0xbc, 0xfd, 0xb4, 0xf5, 0xb5, 0xb5, 0xdf, 0xec, 0xed, 0xd7, 0x6f,
0x88, 0x45, 0xdb, 0x69, 0xf5, 0xfa, 0xad, 0xdd, 0x04, 0x3c, 0xc3, 0xde, 0x84, 0xcd, 0xe3, 0xce,
0x71, 0xaf, 0xb5, 0x6b, 0xa5, 0x95, 0xcb, 0x0a, 0x2e, 0x95, 0xf8, 0x94, 0xe2, 0xb9, 0xfb, 0xbf,
0x01, 0x8b, 0xc9, 0x63, 0xe0, 0x0c, 0x60, 0xe1, 0xa0, 0xf5, 0xa4, 0xb9, 0xf3, 0x35, 0xdd, 0xec,
0xda, 0xeb, 0x37, 0xfb, 0xed, 0x1d, 0x4b, 0xde, 0xe4, 0x2a, 0x24, 0x42, 0x86, 0x55, 0xa0, 0xd8,
0xec, 0xec, 0xec, 0x77, 0xcd, 0x5e, 0x3d, 0xcb, 0xde, 0x80, 0x0d, 0xc5, 0xab, 0x3b, 0xdd, 0xc3,
0xc3, 0x76, 0x1f, 0x85, 0x61, 0xff, 0xeb, 0x23, 0xc1, 0x9a, 0xf7, 0x6d, 0x28, 0xc7, 0x57, 0xd1,
0xa2, 0x80, 0x69, 0xf7, 0xdb, 0xcd, 0x7e, 0x2c, 0x5d, 0xeb, 0x37, 0x84, 0xfc, 0x8a, 0xc1, 0x78,
0x93, 0x6c, 0x3d, 0x43, 0x27, 0xe5, 0x14, 0x90, 0x5a, 0xaf, 0x67, 0xc5, 0xa2, 0x8a, 0xa1, 0xdb,
0xdd, 0xbe, 0x78, 0x85, 0xcf, 0x61, 0x31, 0x99, 0x0f, 0x99, 0x74, 0x6c, 0x6f, 0xc2, 0xfa, 0x76,
0xab, 0xff, 0x55, 0xab, 0xd5, 0xc1, 0xd1, 0xd9, 0x69, 0x75, 0xfa, 0x66, 0xf3, 0xa0, 0xdd, 0xff,
0xba, 0x9e, 0xb9, 0xff, 0x18, 0xea, 0xb3, 0xc1, 0xc7, 0x44, 0xb4, 0xf6, 0x65, 0x61, 0xdd, 0xfb,
0xff, 0x39, 0x03, 0xab, 0x69, 0x7e, 0x77, 0x31, 0x87, 0x72, 0x71, 0x0a, 0x11, 0xdd, 0xeb, 0x76,
0xac, 0x4e, 0x17, 0xaf, 0x8e, 0xdc, 0x84, 0xf5, 0x19, 0x84, 0x92, 0x04, 0x19, 0x76, 0x0b, 0x36,
0xe6, 0x0a, 0x59, 0x66, 0xf7, 0x18, 0x5f, 0xbb, 0x01, 0xab, 0x33, 0xc8, 0x96, 0x69, 0x76, 0xcd,
0x7a, 0x8e, 0x7d, 0x00, 0xf7, 0x66, 0x30, 0xf3, 0x1b, 0x93, 0xda, 0xb7, 0xf2, 0xec, 0x3d, 0x78,
0x7b, 0x8e, 0x3a, 0x96, 0xdd, 0xd6, 0x76, 0xf3, 0x40, 0xbc, 0x5e, 0xbd, 0x70, 0xff, 0x1f, 0xe7,
0x00, 0xe2, 0x03, 0x47, 0xa2, 0xfd, 0xdd, 0x66, 0xbf, 0x79, 0xd0, 0x15, 0xec, 0x65, 0x76, 0xfb,
0xa2, 0x76, 0xb3, 0xf5, 0x65, 0xfd, 0x46, 0x2a, 0xa6, 0x7b, 0x24, 0x5e, 0x68, 0x03, 0x56, 0x68,
0xaa, 0x0e, 0xc4, 0x6b, 0xb4, 0x3b, 0x4f, 0xe8, 0x16, 0x52, 0xdc, 0xfd, 0x8e, 0x8f, 0xf6, 0xcc,
0x6e, 0xa7, 0x6f, 0xf5, 0xf6, 0x8f, 0xfb, 0xbb, 0x78, 0x87, 0xe9, 0x8e, 0xd9, 0x3e, 0xa2, 0x3a,
0xf3, 0x2f, 0x23, 0x10, 0x55, 0x17, 0xc4, 0x5a, 0x78, 0xd2, 0xed, 0xf5, 0xda, 0x47, 0xd6, 0x97,
0xc7, 0x2d, 0xb3, 0xdd, 0xea, 0x61, 0xc1, 0x85, 0x14, 0xb8, 0xa0, 0x2f, 0x8a, 0x3d, 0xb3, 0x7f,
0xf0, 0x4c, 0x6e, 0x6a, 0x82, 0xb4, 0x94, 0x04, 0x09, 0xaa, 0xb2, 0x98, 0x1d, 0xb1, 0x2b, 0xa4,
0xd4, 0x0c, 0xd7, 0xe0, 0x44, 0xb9, 0x8a, 0xd8, 0xef, 0xe6, 0x16, 0x09, 0x16, 0xab, 0xa6, 0xa3,
0x44, 0x29, 0xdc, 0x0a, 0x23, 0xc5, 0x61, 0x77, 0xd7, 0xc4, 0x02, 0x8b, 0x73, 0x50, 0x41, 0xbb,
0x24, 0x98, 0x50, 0x6c, 0x1b, 0x82, 0xa4, 0xae, 0x1e, 0x04, 0x66, 0xf9, 0xe1, 0xff, 0x79, 0x13,
0xca, 0x51, 0xe2, 0x31, 0xfb, 0x29, 0xd4, 0x12, 0x27, 0x41, 0x99, 0x72, 0x0b, 0xa6, 0x1d, 0x1c,
0xdd, 0x7c, 0x23, 0x1d, 0x29, 0x35, 0xd0, 0x43, 0xcd, 0xc2, 0xa0, 0xca, 0xde, 0x98, 0xd5, 0xfa,
0x13, 0xb5, 0xdd, 0xbe, 0x06, 0x2b, 0xab, 0x7b, 0x8a, 0x17, 0xa2, 0xea, 0x9f, 0x25, 0x64, 0xb7,
0xe3, 0xdb, 0x29, 0x53, 0x3e, 0x57, 0xb8, 0x79, 0x73, 0xfe, 0x03, 0x82, 0xea, 0x8b, 0x83, 0xbb,
0x50, 0xd1, 0xbe, 0xb6, 0xc3, 0x6e, 0x5e, 0xfb, 0x65, 0xa0, 0xcd, 0xcd, 0x34, 0x94, 0xec, 0xd2,
0x17, 0x50, 0x8e, 0xbe, 0xbc, 0xc2, 0x36, 0xb4, 0xaf, 0xe6, 0xe8, 0xdf, 0x8f, 0xd9, 0x6c, 0xcc,
0x23, 0x64, 0xf9, 0x5d, 0xa8, 0x68, 0x1f, 0x50, 0x89, 0x7a, 0x31, 0xff, 0x91, 0x96, 0xa8, 0x17,
0x69, 0xdf, 0x5b, 0x39, 0x80, 0x35, 0x69, 0xc7, 0x9c, 0xf0, 0x6f, 0x33, 0x3c, 0x29, 0xdf, 0x57,
0x7c, 0x90, 0x61, 0x8f, 0xa1, 0xa4, 0x3e, 0x95, 0xc3, 0xd6, 0xd3, 0x3f, 0x04, 0xb4, 0xb9, 0x31,
0x07, 0x97, 0x5d, 0x69, 0x02, 0xc4, 0x9f, 0x66, 0x61, 0xea, 0xc5, 0xe7, 0x3e, 0xf5, 0x12, 0xcd,
0x4c, 0xca, 0x77, 0x5c, 0x76, 0xa1, 0xa2, 0x7d, 0x85, 0x25, 0x1a, 0x93, 0xf9, 0x2f, 0xb8, 0x44,
0x63, 0x92, 0xf6, 0xd1, 0x96, 0x9f, 0x42, 0x2d, 0xf1, 0x39, 0x95, 0x88, 0x8f, 0xd3, 0x3e, 0xd6,
0x12, 0xf1, 0x71, 0xfa, 0x17, 0x58, 0x76, 0xa1, 0xa2, 0x7d, 0xfc, 0x24, 0xea, 0xd1, 0xfc, 0x77,
0x56, 0xa2, 0x1e, 0xa5, 0x7c, 0x2b, 0x45, 0xac, 0x86, 0xe4, 0x97, 0x4f, 0xa2, 0xd5, 0x90, 0xfa,
0x09, 0x95, 0x68, 0x35, 0xa4, 0x7f, 0x2e, 0x45, 0xb0, 0x5e, 0x74, 0x13, 0x32, 0xdb, 0xd0, 0xb8,
0x43, 0xbf, 0x52, 0x39, 0x62, 0xbd, 0xf9, 0x4b, 0x93, 0x9f, 0xc0, 0x4a, 0xc4, 0x34, 0xd1, 0x3d,
0xc6, 0x41, 0xd4, 0xa7, 0xd4, 0xdb, 0x92, 0x37, 0xeb, 0xb3, 0xd8, 0x07, 0x19, 0xf6, 0x19, 0x14,
0xe5, 0xe5, 0xb0, 0x6c, 0x6d, 0xf6, 0xb2, 0x58, 0xea, 0xc4, 0x7a, 0xfa, 0x1d, 0xb2, 0xec, 0x08,
0x96, 0x66, 0xef, 0x07, 0xbe, 0x7d, 0xdd, 0x7d, 0x0a, 0x54, 0xd3, 0x9b, 0x2f, 0xbf, 0x6e, 0x81,
0x3d, 0x81, 0xaa, 0xfe, 0x29, 0x03, 0xa6, 0xaf, 0x9a, 0xd9, 0xba, 0x6e, 0xa5, 0xe2, 0x64, 0x45,
0xcf, 0x60, 0x3d, 0x1a, 0x1d, 0xfd, 0x70, 0x7f, 0xc0, 0xee, 0xa4, 0x1c, 0xf9, 0x4f, 0x8c, 0xd1,
0xcd, 0x6b, 0xef, 0x04, 0x78, 0x90, 0x41, 0x91, 0x98, 0xb8, 0xa0, 0x3d, 0x16, 0x89, 0x69, 0xf7,
0xd2, 0xc7, 0x22, 0x31, 0xfd, 0x56, 0xf7, 0x26, 0x2c, 0x69, 0x97, 0x13, 0xf4, 0xae, 0xdc, 0x41,
0xc4, 0x9d, 0xf3, 0x17, 0x75, 0x6e, 0xa6, 0xf9, 0xbe, 0xd8, 0x0e, 0x54, 0xf4, 0xfb, 0x0d, 0x5e,
0x52, 0x7c, 0x43, 0x43, 0xe9, 0x57, 0x3f, 0x3e, 0xc8, 0xb0, 0x03, 0xa8, 0xcf, 0xde, 0x46, 0x16,
0x2d, 0xb8, 0xb4, 0x1b, 0xdc, 0x36, 0x67, 0x90, 0x89, 0x3b, 0xcc, 0x04, 0x5f, 0x24, 0xbe, 0xba,
0xe7, 0xf9, 0xb3, 0x1b, 0x47, 0xf2, 0x6b, 0x7c, 0x51, 0x6d, 0x69, 0xdf, 0x61, 0xbc, 0x97, 0x79,
0x90, 0x61, 0x7b, 0x50, 0x4d, 0x5c, 0xc6, 0x93, 0xc8, 0x58, 0x9f, 0x79, 0xcd, 0x86, 0x8e, 0x9b,
0x79, 0xcf, 0x43, 0x58, 0x4c, 0x06, 0x69, 0xa3, 0x8e, 0xa5, 0x86, 0x83, 0xa3, 0xe9, 0x4b, 0x8f,
0xec, 0xb2, 0x1f, 0xd3, 0x37, 0x65, 0x55, 0x42, 0x0e, 0x9b, 0xff, 0x06, 0x69, 0x34, 0x67, 0xfa,
0x17, 0x3b, 0x8d, 0xdc, 0x5f, 0xc9, 0x66, 0xf0, 0xbd, 0x7e, 0x44, 0x5f, 0x74, 0x53, 0x39, 0x19,
0x62, 0xfe, 0x5f, 0xb7, 0x12, 0xb6, 0x47, 0x8d, 0xcb, 0xef, 0x69, 0xc6, 0x72, 0x76, 0xee, 0x1b,
0x9b, 0xaf, 0xe8, 0x43, 0x93, 0xfa, 0x20, 0xcb, 0x24, 0x78, 0xf0, 0x35, 0xeb, 0x62, 0x9f, 0x02,
0xc4, 0x89, 0x6e, 0x6c, 0x26, 0xdd, 0x2a, 0x5a, 0x50, 0x29, 0xb9, 0x70, 0x2d, 0x5a, 0xef, 0x51,
0xbe, 0x97, 0xbe, 0x81, 0x26, 0x53, 0xcf, 0x12, 0x1b, 0xe8, 0x6c, 0x35, 0x3f, 0x84, 0xda, 0x81,
0xe7, 0x3d, 0x9f, 0x4e, 0xa2, 0x6c, 0xe9, 0x64, 0x32, 0x82, 0x30, 0x66, 0x37, 0x67, 0xba, 0xc5,
0x9a, 0xb0, 0x1c, 0x89, 0x88, 0x38, 0xe1, 0x2c, 0x49, 0x94, 0x10, 0x0c, 0x33, 0x15, 0x3c, 0xc8,
0xb0, 0x87, 0x50, 0xdd, 0xe5, 0x03, 0x3c, 0x2c, 0x8f, 0x61, 0xf3, 0x95, 0x44, 0x08, 0x96, 0xe2,
0xed, 0x9b, 0xb5, 0x04, 0x50, 0x89, 0xb8, 0x38, 0xfd, 0x42, 0x97, 0xf0, 0xc9, 0x1c, 0x86, 0x84,
0x88, 0x9b, 0x4b, 0xc1, 0x78, 0x06, 0xcb, 0x73, 0x09, 0x0e, 0x91, 0x74, 0xbb, 0x2e, 0x2d, 0x62,
0xf3, 0xee, 0xf5, 0x04, 0xb2, 0xde, 0x9f, 0x40, 0x8d, 0x6e, 0x02, 0x3d, 0xe1, 0x74, 0xd8, 0x6d,
0xe6, 0xa6, 0x18, 0xfd, 0x24, 0xdd, 0xac, 0x48, 0xa2, 0x02, 0x4f, 0xf0, 0x32, 0x7c, 0xed, 0x28,
0x59, 0x34, 0xaf, 0xf3, 0xc7, 0xdb, 0xa2, 0x79, 0x4d, 0x3b, 0xb5, 0xf6, 0x39, 0x54, 0x9e, 0xf0,
0x50, 0x1d, 0xce, 0x8a, 0xb4, 0x99, 0x99, 0xd3, 0x5a, 0x9b, 0x29, 0x47, 0xea, 0xd8, 0x27, 0x58,
0x34, 0x3a, 0x68, 0xbc, 0xae, 0xb5, 0xa2, 0x17, 0x5d, 0x9a, 0x81, 0x0b, 0x5d, 0x41, 0xbb, 0x6e,
0x20, 0xea, 0xf8, 0xfc, 0xf5, 0x12, 0x51, 0xc7, 0xd3, 0x6e, 0x27, 0xf8, 0x31, 0x8d, 0x80, 0x76,
0x1c, 0x2c, 0x56, 0x98, 0x66, 0x4f, 0x8e, 0x45, 0xdd, 0xd7, 0xc9, 0x1f, 0x01, 0xf4, 0x42, 0x6f,
0xb2, 0x6b, 0xf3, 0xb1, 0xe7, 0xc6, 0x32, 0x21, 0x3e, 0x88, 0x14, 0x2f, 0x44, 0xed, 0x34, 0x12,
0xfb, 0x4a, 0xd3, 0x24, 0x13, 0x53, 0xa2, 0xa6, 0xfd, 0xda, 0xb3, 0x4a, 0xd1, 0xeb, 0xa4, 0x9c,
0x57, 0x42, 0x21, 0x01, 0x71, 0xee, 0x49, 0xa4, 0x17, 0xce, 0xa5, 0xb5, 0x44, 0x6b, 0x3d, 0x25,
0x51, 0xe5, 0x0b, 0x28, 0xc7, 0x41, 0xfb, 0x8d, 0xf8, 0xee, 0x93, 0x44, 0x88, 0x3f, 0x92, 0xde,
0xf3, 0x01, 0xf3, 0x0e, 0xac, 0x50, 0x77, 0xa2, 0xed, 0x0f, 0x8f, 0xcb, 0x44, 0xdf, 0x72, 0x98,
0x8f, 0x54, 0x47, 0xeb, 0x27, 0x2d, 0xde, 0x2a, 0xd6, 0xcf, 0x5c, 0xdc, 0x2e, 0x5a, 0x3f, 0xd7,
0x05, 0x62, 0xa3, 0xf5, 0x73, 0x7d, 0xc8, 0xaf, 0x03, 0x2b, 0x29, 0x11, 0x38, 0xf6, 0x96, 0x32,
0x43, 0xae, 0x8d, 0xce, 0x6d, 0xa6, 0x46, 0x6a, 0x58, 0x1f, 0x36, 0xa8, 0x4c, 0x73, 0x34, 0x9a,
0x09, 0xf8, 0xbc, 0xa9, 0x15, 0x48, 0x09, 0x62, 0x25, 0x54, 0x99, 0x99, 0x40, 0x56, 0x07, 0xea,
0xb3, 0xb1, 0x12, 0x76, 0x3d, 0xf9, 0xe6, 0x9d, 0x84, 0x82, 0x3d, 0x1f, 0x5f, 0x61, 0xcf, 0xa2,
0x88, 0xcd, 0x4c, 0x1f, 0xef, 0x44, 0x17, 0x3a, 0xa7, 0xc7, 0x97, 0x22, 0xdd, 0x3d, 0x35, 0xe0,
0xc3, 0x7e, 0x15, 0x36, 0x66, 0x39, 0x5a, 0xd5, 0x7c, 0x37, 0x6d, 0xb8, 0xae, 0x55, 0xe5, 0x92,
0x2f, 0xf4, 0x20, 0x23, 0x04, 0xb1, 0x1e, 0x77, 0x89, 0x18, 0x29, 0x25, 0xc0, 0x13, 0x31, 0x52,
0x5a, 0xa0, 0x66, 0xfb, 0xbd, 0x5f, 0xfb, 0xde, 0x99, 0x13, 0x9e, 0x4f, 0x4f, 0xb6, 0x06, 0xde,
0xf8, 0xc3, 0x91, 0x32, 0xc5, 0xe5, 0x21, 0xca, 0x0f, 0x47, 0xee, 0xf0, 0x43, 0x2c, 0x7d, 0xb2,
0x30, 0xf1, 0xbd, 0xd0, 0xfb, 0xe1, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xeb, 0x43, 0xf6, 0x73,
0xe4, 0x81, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -13787,6 +13756,176 @@ type LightningServer interface {
BakeMacaroon(context.Context, *BakeMacaroonRequest) (*BakeMacaroonResponse, error)
}
// UnimplementedLightningServer can be embedded to have forward compatible implementations.
type UnimplementedLightningServer struct {
}
func (*UnimplementedLightningServer) WalletBalance(ctx context.Context, req *WalletBalanceRequest) (*WalletBalanceResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method WalletBalance not implemented")
}
func (*UnimplementedLightningServer) ChannelBalance(ctx context.Context, req *ChannelBalanceRequest) (*ChannelBalanceResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ChannelBalance not implemented")
}
func (*UnimplementedLightningServer) GetTransactions(ctx context.Context, req *GetTransactionsRequest) (*TransactionDetails, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetTransactions not implemented")
}
func (*UnimplementedLightningServer) EstimateFee(ctx context.Context, req *EstimateFeeRequest) (*EstimateFeeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method EstimateFee not implemented")
}
func (*UnimplementedLightningServer) SendCoins(ctx context.Context, req *SendCoinsRequest) (*SendCoinsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SendCoins not implemented")
}
func (*UnimplementedLightningServer) ListUnspent(ctx context.Context, req *ListUnspentRequest) (*ListUnspentResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListUnspent not implemented")
}
func (*UnimplementedLightningServer) SubscribeTransactions(req *GetTransactionsRequest, srv Lightning_SubscribeTransactionsServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeTransactions not implemented")
}
func (*UnimplementedLightningServer) SendMany(ctx context.Context, req *SendManyRequest) (*SendManyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SendMany not implemented")
}
func (*UnimplementedLightningServer) NewAddress(ctx context.Context, req *NewAddressRequest) (*NewAddressResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method NewAddress not implemented")
}
func (*UnimplementedLightningServer) SignMessage(ctx context.Context, req *SignMessageRequest) (*SignMessageResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SignMessage not implemented")
}
func (*UnimplementedLightningServer) VerifyMessage(ctx context.Context, req *VerifyMessageRequest) (*VerifyMessageResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method VerifyMessage not implemented")
}
func (*UnimplementedLightningServer) ConnectPeer(ctx context.Context, req *ConnectPeerRequest) (*ConnectPeerResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ConnectPeer not implemented")
}
func (*UnimplementedLightningServer) DisconnectPeer(ctx context.Context, req *DisconnectPeerRequest) (*DisconnectPeerResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DisconnectPeer not implemented")
}
func (*UnimplementedLightningServer) ListPeers(ctx context.Context, req *ListPeersRequest) (*ListPeersResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListPeers not implemented")
}
func (*UnimplementedLightningServer) SubscribePeerEvents(req *PeerEventSubscription, srv Lightning_SubscribePeerEventsServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribePeerEvents not implemented")
}
func (*UnimplementedLightningServer) GetInfo(ctx context.Context, req *GetInfoRequest) (*GetInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetInfo not implemented")
}
func (*UnimplementedLightningServer) PendingChannels(ctx context.Context, req *PendingChannelsRequest) (*PendingChannelsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method PendingChannels not implemented")
}
func (*UnimplementedLightningServer) ListChannels(ctx context.Context, req *ListChannelsRequest) (*ListChannelsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListChannels not implemented")
}
func (*UnimplementedLightningServer) SubscribeChannelEvents(req *ChannelEventSubscription, srv Lightning_SubscribeChannelEventsServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeChannelEvents not implemented")
}
func (*UnimplementedLightningServer) ClosedChannels(ctx context.Context, req *ClosedChannelsRequest) (*ClosedChannelsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ClosedChannels not implemented")
}
func (*UnimplementedLightningServer) OpenChannelSync(ctx context.Context, req *OpenChannelRequest) (*ChannelPoint, error) {
return nil, status.Errorf(codes.Unimplemented, "method OpenChannelSync not implemented")
}
func (*UnimplementedLightningServer) OpenChannel(req *OpenChannelRequest, srv Lightning_OpenChannelServer) error {
return status.Errorf(codes.Unimplemented, "method OpenChannel not implemented")
}
func (*UnimplementedLightningServer) FundingStateStep(ctx context.Context, req *FundingTransitionMsg) (*FundingStateStepResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method FundingStateStep not implemented")
}
func (*UnimplementedLightningServer) ChannelAcceptor(srv Lightning_ChannelAcceptorServer) error {
return status.Errorf(codes.Unimplemented, "method ChannelAcceptor not implemented")
}
func (*UnimplementedLightningServer) CloseChannel(req *CloseChannelRequest, srv Lightning_CloseChannelServer) error {
return status.Errorf(codes.Unimplemented, "method CloseChannel not implemented")
}
func (*UnimplementedLightningServer) AbandonChannel(ctx context.Context, req *AbandonChannelRequest) (*AbandonChannelResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method AbandonChannel not implemented")
}
func (*UnimplementedLightningServer) SendPayment(srv Lightning_SendPaymentServer) error {
return status.Errorf(codes.Unimplemented, "method SendPayment not implemented")
}
func (*UnimplementedLightningServer) SendPaymentSync(ctx context.Context, req *SendRequest) (*SendResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SendPaymentSync not implemented")
}
func (*UnimplementedLightningServer) SendToRoute(srv Lightning_SendToRouteServer) error {
return status.Errorf(codes.Unimplemented, "method SendToRoute not implemented")
}
func (*UnimplementedLightningServer) SendToRouteSync(ctx context.Context, req *SendToRouteRequest) (*SendResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SendToRouteSync not implemented")
}
func (*UnimplementedLightningServer) AddInvoice(ctx context.Context, req *Invoice) (*AddInvoiceResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method AddInvoice not implemented")
}
func (*UnimplementedLightningServer) ListInvoices(ctx context.Context, req *ListInvoiceRequest) (*ListInvoiceResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListInvoices not implemented")
}
func (*UnimplementedLightningServer) LookupInvoice(ctx context.Context, req *PaymentHash) (*Invoice, error) {
return nil, status.Errorf(codes.Unimplemented, "method LookupInvoice not implemented")
}
func (*UnimplementedLightningServer) SubscribeInvoices(req *InvoiceSubscription, srv Lightning_SubscribeInvoicesServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeInvoices not implemented")
}
func (*UnimplementedLightningServer) DecodePayReq(ctx context.Context, req *PayReqString) (*PayReq, error) {
return nil, status.Errorf(codes.Unimplemented, "method DecodePayReq not implemented")
}
func (*UnimplementedLightningServer) ListPayments(ctx context.Context, req *ListPaymentsRequest) (*ListPaymentsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListPayments not implemented")
}
func (*UnimplementedLightningServer) DeleteAllPayments(ctx context.Context, req *DeleteAllPaymentsRequest) (*DeleteAllPaymentsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteAllPayments not implemented")
}
func (*UnimplementedLightningServer) DescribeGraph(ctx context.Context, req *ChannelGraphRequest) (*ChannelGraph, error) {
return nil, status.Errorf(codes.Unimplemented, "method DescribeGraph not implemented")
}
func (*UnimplementedLightningServer) GetNodeMetrics(ctx context.Context, req *NodeMetricsRequest) (*NodeMetricsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetNodeMetrics not implemented")
}
func (*UnimplementedLightningServer) GetChanInfo(ctx context.Context, req *ChanInfoRequest) (*ChannelEdge, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetChanInfo not implemented")
}
func (*UnimplementedLightningServer) GetNodeInfo(ctx context.Context, req *NodeInfoRequest) (*NodeInfo, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetNodeInfo not implemented")
}
func (*UnimplementedLightningServer) QueryRoutes(ctx context.Context, req *QueryRoutesRequest) (*QueryRoutesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method QueryRoutes not implemented")
}
func (*UnimplementedLightningServer) GetNetworkInfo(ctx context.Context, req *NetworkInfoRequest) (*NetworkInfo, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetNetworkInfo not implemented")
}
func (*UnimplementedLightningServer) StopDaemon(ctx context.Context, req *StopRequest) (*StopResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method StopDaemon not implemented")
}
func (*UnimplementedLightningServer) SubscribeChannelGraph(req *GraphTopologySubscription, srv Lightning_SubscribeChannelGraphServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeChannelGraph not implemented")
}
func (*UnimplementedLightningServer) DebugLevel(ctx context.Context, req *DebugLevelRequest) (*DebugLevelResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DebugLevel not implemented")
}
func (*UnimplementedLightningServer) FeeReport(ctx context.Context, req *FeeReportRequest) (*FeeReportResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method FeeReport not implemented")
}
func (*UnimplementedLightningServer) UpdateChannelPolicy(ctx context.Context, req *PolicyUpdateRequest) (*PolicyUpdateResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateChannelPolicy not implemented")
}
func (*UnimplementedLightningServer) ForwardingHistory(ctx context.Context, req *ForwardingHistoryRequest) (*ForwardingHistoryResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ForwardingHistory not implemented")
}
func (*UnimplementedLightningServer) ExportChannelBackup(ctx context.Context, req *ExportChannelBackupRequest) (*ChannelBackup, error) {
return nil, status.Errorf(codes.Unimplemented, "method ExportChannelBackup not implemented")
}
func (*UnimplementedLightningServer) ExportAllChannelBackups(ctx context.Context, req *ChanBackupExportRequest) (*ChanBackupSnapshot, error) {
return nil, status.Errorf(codes.Unimplemented, "method ExportAllChannelBackups not implemented")
}
func (*UnimplementedLightningServer) VerifyChanBackup(ctx context.Context, req *ChanBackupSnapshot) (*VerifyChanBackupResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method VerifyChanBackup not implemented")
}
func (*UnimplementedLightningServer) RestoreChannelBackups(ctx context.Context, req *RestoreChanBackupRequest) (*RestoreBackupResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method RestoreChannelBackups not implemented")
}
func (*UnimplementedLightningServer) SubscribeChannelBackups(req *ChannelBackupSubscription, srv Lightning_SubscribeChannelBackupsServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeChannelBackups not implemented")
}
func (*UnimplementedLightningServer) BakeMacaroon(ctx context.Context, req *BakeMacaroonRequest) (*BakeMacaroonResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BakeMacaroon not implemented")
}
func RegisterLightningServer(s *grpc.Server, srv LightningServer) {
s.RegisterService(&_Lightning_serviceDesc, srv)
}

2503
lnrpc/rpc.pb.gw.go

@ -13,6 +13,7 @@ import (
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
@ -22,11 +23,13 @@ import (
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_Lightning_WalletBalance_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq WalletBalanceRequest
@ -37,6 +40,15 @@ func request_Lightning_WalletBalance_0(ctx context.Context, marshaler runtime.Ma
}
func local_request_Lightning_WalletBalance_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq WalletBalanceRequest
var metadata runtime.ServerMetadata
msg, err := server.WalletBalance(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_ChannelBalance_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChannelBalanceRequest
var metadata runtime.ServerMetadata
@ -46,6 +58,15 @@ func request_Lightning_ChannelBalance_0(ctx context.Context, marshaler runtime.M
}
func local_request_Lightning_ChannelBalance_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChannelBalanceRequest
var metadata runtime.ServerMetadata
msg, err := server.ChannelBalance(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_GetTransactions_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -54,7 +75,10 @@ func request_Lightning_GetTransactions_0(ctx context.Context, marshaler runtime.
var protoReq GetTransactionsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_GetTransactions_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_GetTransactions_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -63,6 +87,19 @@ func request_Lightning_GetTransactions_0(ctx context.Context, marshaler runtime.
}
func local_request_Lightning_GetTransactions_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetTransactionsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_GetTransactions_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetTransactions(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_EstimateFee_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -71,7 +108,10 @@ func request_Lightning_EstimateFee_0(ctx context.Context, marshaler runtime.Mars
var protoReq EstimateFeeRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_EstimateFee_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_EstimateFee_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -80,6 +120,19 @@ func request_Lightning_EstimateFee_0(ctx context.Context, marshaler runtime.Mars
}
func local_request_Lightning_EstimateFee_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq EstimateFeeRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_EstimateFee_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.EstimateFee(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_SendCoins_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendCoinsRequest
var metadata runtime.ServerMetadata
@ -97,6 +150,23 @@ func request_Lightning_SendCoins_0(ctx context.Context, marshaler runtime.Marsha
}
func local_request_Lightning_SendCoins_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendCoinsRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SendCoins(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_ListUnspent_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -105,7 +175,10 @@ func request_Lightning_ListUnspent_0(ctx context.Context, marshaler runtime.Mars
var protoReq ListUnspentRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListUnspent_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_ListUnspent_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -114,6 +187,81 @@ func request_Lightning_ListUnspent_0(ctx context.Context, marshaler runtime.Mars
}
func local_request_Lightning_ListUnspent_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListUnspentRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListUnspent_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListUnspent(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_SubscribeTransactions_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Lightning_SubscribeTransactions_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_SubscribeTransactionsClient, runtime.ServerMetadata, error) {
var protoReq GetTransactionsRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_SubscribeTransactions_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.SubscribeTransactions(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
func request_Lightning_SendMany_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendManyRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SendMany(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_SendMany_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendManyRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SendMany(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_NewAddress_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -122,7 +270,10 @@ func request_Lightning_NewAddress_0(ctx context.Context, marshaler runtime.Marsh
var protoReq NewAddressRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_NewAddress_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_NewAddress_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -131,6 +282,19 @@ func request_Lightning_NewAddress_0(ctx context.Context, marshaler runtime.Marsh
}
func local_request_Lightning_NewAddress_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq NewAddressRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_NewAddress_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.NewAddress(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_SignMessage_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SignMessageRequest
var metadata runtime.ServerMetadata
@ -148,6 +312,23 @@ func request_Lightning_SignMessage_0(ctx context.Context, marshaler runtime.Mars
}
func local_request_Lightning_SignMessage_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SignMessageRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SignMessage(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_VerifyMessage_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq VerifyMessageRequest
var metadata runtime.ServerMetadata
@ -165,6 +346,23 @@ func request_Lightning_VerifyMessage_0(ctx context.Context, marshaler runtime.Ma
}
func local_request_Lightning_VerifyMessage_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq VerifyMessageRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.VerifyMessage(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_ConnectPeer_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ConnectPeerRequest
var metadata runtime.ServerMetadata
@ -182,6 +380,23 @@ func request_Lightning_ConnectPeer_0(ctx context.Context, marshaler runtime.Mars
}
func local_request_Lightning_ConnectPeer_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ConnectPeerRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ConnectPeer(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_DisconnectPeer_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DisconnectPeerRequest
var metadata runtime.ServerMetadata
@ -209,6 +424,33 @@ func request_Lightning_DisconnectPeer_0(ctx context.Context, marshaler runtime.M
}
func local_request_Lightning_DisconnectPeer_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DisconnectPeerRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["pub_key"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
}
protoReq.PubKey, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pub_key", err)
}
msg, err := server.DisconnectPeer(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_ListPeers_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -217,7 +459,10 @@ func request_Lightning_ListPeers_0(ctx context.Context, marshaler runtime.Marsha
var protoReq ListPeersRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListPeers_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_ListPeers_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -226,6 +471,36 @@ func request_Lightning_ListPeers_0(ctx context.Context, marshaler runtime.Marsha
}
func local_request_Lightning_ListPeers_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListPeersRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListPeers_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListPeers(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_SubscribePeerEvents_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_SubscribePeerEventsClient, runtime.ServerMetadata, error) {
var protoReq PeerEventSubscription
var metadata runtime.ServerMetadata
stream, err := client.SubscribePeerEvents(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
func request_Lightning_GetInfo_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetInfoRequest
var metadata runtime.ServerMetadata
@ -235,6 +510,15 @@ func request_Lightning_GetInfo_0(ctx context.Context, marshaler runtime.Marshale
}
func local_request_Lightning_GetInfo_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetInfoRequest
var metadata runtime.ServerMetadata
msg, err := server.GetInfo(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_PendingChannels_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PendingChannelsRequest
var metadata runtime.ServerMetadata
@ -244,6 +528,15 @@ func request_Lightning_PendingChannels_0(ctx context.Context, marshaler runtime.
}
func local_request_Lightning_PendingChannels_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PendingChannelsRequest
var metadata runtime.ServerMetadata
msg, err := server.PendingChannels(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_ListChannels_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -252,7 +545,10 @@ func request_Lightning_ListChannels_0(ctx context.Context, marshaler runtime.Mar
var protoReq ListChannelsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListChannels_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_ListChannels_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -261,15 +557,48 @@ func request_Lightning_ListChannels_0(ctx context.Context, marshaler runtime.Mar
}
var (
filter_Lightning_ClosedChannels_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func local_request_Lightning_ListChannels_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListChannelsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListChannels_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListChannels(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_SubscribeChannelEvents_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_SubscribeChannelEventsClient, runtime.ServerMetadata, error) {
var protoReq ChannelEventSubscription
var metadata runtime.ServerMetadata
stream, err := client.SubscribeChannelEvents(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
var (
filter_Lightning_ClosedChannels_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Lightning_ClosedChannels_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ClosedChannelsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ClosedChannels_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_ClosedChannels_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -278,6 +607,19 @@ func request_Lightning_ClosedChannels_0(ctx context.Context, marshaler runtime.M
}
func local_request_Lightning_ClosedChannels_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ClosedChannelsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ClosedChannels_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ClosedChannels(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_OpenChannelSync_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq OpenChannelRequest
var metadata runtime.ServerMetadata
@ -295,6 +637,82 @@ func request_Lightning_OpenChannelSync_0(ctx context.Context, marshaler runtime.
}
func local_request_Lightning_OpenChannelSync_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq OpenChannelRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.OpenChannelSync(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_OpenChannel_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_OpenChannelClient, runtime.ServerMetadata, error) {
var protoReq OpenChannelRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.OpenChannel(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
func request_Lightning_FundingStateStep_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq FundingTransitionMsg
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.FundingStateStep(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_FundingStateStep_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq FundingTransitionMsg
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.FundingStateStep(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_CloseChannel_0 = &utilities.DoubleArray{Encoding: map[string]int{"channel_point": 0, "funding_txid_str": 1, "output_index": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}}
)
@ -332,7 +750,10 @@ func request_Lightning_CloseChannel_0(ctx context.Context, marshaler runtime.Mar
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_point.output_index", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_CloseChannel_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_CloseChannel_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -386,7 +807,10 @@ func request_Lightning_AbandonChannel_0(ctx context.Context, marshaler runtime.M
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_point.output_index", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_AbandonChannel_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_AbandonChannel_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -395,6 +819,48 @@ func request_Lightning_AbandonChannel_0(ctx context.Context, marshaler runtime.M
}
func local_request_Lightning_AbandonChannel_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AbandonChannelRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["channel_point.funding_txid_str"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_point.funding_txid_str")
}
err = runtime.PopulateFieldFromPath(&protoReq, "channel_point.funding_txid_str", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_point.funding_txid_str", err)
}
val, ok = pathParams["channel_point.output_index"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_point.output_index")
}
err = runtime.PopulateFieldFromPath(&protoReq, "channel_point.output_index", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_point.output_index", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_AbandonChannel_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.AbandonChannel(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_SendPaymentSync_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendRequest
var metadata runtime.ServerMetadata
@ -412,6 +878,23 @@ func request_Lightning_SendPaymentSync_0(ctx context.Context, marshaler runtime.
}
func local_request_Lightning_SendPaymentSync_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SendPaymentSync(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_SendToRouteSync_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendToRouteRequest
var metadata runtime.ServerMetadata
@ -429,6 +912,23 @@ func request_Lightning_SendToRouteSync_0(ctx context.Context, marshaler runtime.
}
func local_request_Lightning_SendToRouteSync_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendToRouteRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SendToRouteSync(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_AddInvoice_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq Invoice
var metadata runtime.ServerMetadata
@ -446,6 +946,23 @@ func request_Lightning_AddInvoice_0(ctx context.Context, marshaler runtime.Marsh
}
func local_request_Lightning_AddInvoice_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq Invoice
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.AddInvoice(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_ListInvoices_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -454,7 +971,10 @@ func request_Lightning_ListInvoices_0(ctx context.Context, marshaler runtime.Mar
var protoReq ListInvoiceRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListInvoices_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_ListInvoices_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -463,6 +983,19 @@ func request_Lightning_ListInvoices_0(ctx context.Context, marshaler runtime.Mar
}
func local_request_Lightning_ListInvoices_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListInvoiceRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListInvoices_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListInvoices(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_LookupInvoice_0 = &utilities.DoubleArray{Encoding: map[string]int{"r_hash_str": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
@ -489,7 +1022,10 @@ func request_Lightning_LookupInvoice_0(ctx context.Context, marshaler runtime.Ma
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "r_hash_str", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_LookupInvoice_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_LookupInvoice_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -498,6 +1034,37 @@ func request_Lightning_LookupInvoice_0(ctx context.Context, marshaler runtime.Ma
}
func local_request_Lightning_LookupInvoice_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PaymentHash
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["r_hash_str"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "r_hash_str")
}
protoReq.RHashStr, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "r_hash_str", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_LookupInvoice_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.LookupInvoice(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_SubscribeInvoices_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -506,7 +1073,10 @@ func request_Lightning_SubscribeInvoices_0(ctx context.Context, marshaler runtim
var protoReq InvoiceSubscription
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_SubscribeInvoices_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_SubscribeInvoices_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -550,19 +1120,62 @@ func request_Lightning_DecodePayReq_0(ctx context.Context, marshaler runtime.Mar
}
var (
filter_Lightning_ListPayments_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Lightning_ListPayments_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListPaymentsRequest
func local_request_Lightning_DecodePayReq_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PayReqString
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListPayments_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListPayments(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["pay_req"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pay_req")
}
protoReq.PayReq, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pay_req", err)
}
msg, err := server.DecodePayReq(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_ListPayments_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Lightning_ListPayments_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListPaymentsRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_ListPayments_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListPayments(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_ListPayments_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListPaymentsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ListPayments_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListPayments(ctx, &protoReq)
return msg, metadata, err
}
@ -576,6 +1189,15 @@ func request_Lightning_DeleteAllPayments_0(ctx context.Context, marshaler runtim
}
func local_request_Lightning_DeleteAllPayments_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DeleteAllPaymentsRequest
var metadata runtime.ServerMetadata
msg, err := server.DeleteAllPayments(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_DescribeGraph_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -584,7 +1206,10 @@ func request_Lightning_DescribeGraph_0(ctx context.Context, marshaler runtime.Ma
var protoReq ChannelGraphRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_DescribeGraph_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_DescribeGraph_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -593,6 +1218,19 @@ func request_Lightning_DescribeGraph_0(ctx context.Context, marshaler runtime.Ma
}
func local_request_Lightning_DescribeGraph_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChannelGraphRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_DescribeGraph_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.DescribeGraph(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_GetNodeMetrics_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
@ -601,7 +1239,10 @@ func request_Lightning_GetNodeMetrics_0(ctx context.Context, marshaler runtime.M
var protoReq NodeMetricsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_GetNodeMetrics_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_GetNodeMetrics_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -610,6 +1251,19 @@ func request_Lightning_GetNodeMetrics_0(ctx context.Context, marshaler runtime.M
}
func local_request_Lightning_GetNodeMetrics_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq NodeMetricsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_GetNodeMetrics_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetNodeMetrics(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_GetChanInfo_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChanInfoRequest
var metadata runtime.ServerMetadata
@ -637,6 +1291,33 @@ func request_Lightning_GetChanInfo_0(ctx context.Context, marshaler runtime.Mars
}
func local_request_Lightning_GetChanInfo_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChanInfoRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["chan_id"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_id")
}
protoReq.ChanId, err = runtime.Uint64(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chan_id", err)
}
msg, err := server.GetChanInfo(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_GetNodeInfo_0 = &utilities.DoubleArray{Encoding: map[string]int{"pub_key": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
@ -663,7 +1344,10 @@ func request_Lightning_GetNodeInfo_0(ctx context.Context, marshaler runtime.Mars
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pub_key", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_GetNodeInfo_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_GetNodeInfo_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -672,6 +1356,37 @@ func request_Lightning_GetNodeInfo_0(ctx context.Context, marshaler runtime.Mars
}
func local_request_Lightning_GetNodeInfo_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq NodeInfoRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["pub_key"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
}
protoReq.PubKey, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pub_key", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_GetNodeInfo_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetNodeInfo(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_QueryRoutes_0 = &utilities.DoubleArray{Encoding: map[string]int{"pub_key": 0, "amt": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}
)
@ -709,7 +1424,10 @@ func request_Lightning_QueryRoutes_0(ctx context.Context, marshaler runtime.Mars
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "amt", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_QueryRoutes_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_QueryRoutes_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -718,6 +1436,48 @@ func request_Lightning_QueryRoutes_0(ctx context.Context, marshaler runtime.Mars
}
func local_request_Lightning_QueryRoutes_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryRoutesRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["pub_key"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pub_key")
}
protoReq.PubKey, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pub_key", err)
}
val, ok = pathParams["amt"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "amt")
}
protoReq.Amt, err = runtime.Int64(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "amt", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_QueryRoutes_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.QueryRoutes(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_GetNetworkInfo_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq NetworkInfoRequest
var metadata runtime.ServerMetadata
@ -727,17 +1487,17 @@ func request_Lightning_GetNetworkInfo_0(ctx context.Context, marshaler runtime.M
}
func request_Lightning_FeeReport_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq FeeReportRequest
func local_request_Lightning_GetNetworkInfo_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq NetworkInfoRequest
var metadata runtime.ServerMetadata
msg, err := client.FeeReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
msg, err := server.GetNetworkInfo(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_UpdateChannelPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PolicyUpdateRequest
func request_Lightning_StopDaemon_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq StopRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
@ -748,13 +1508,13 @@ func request_Lightning_UpdateChannelPolicy_0(ctx context.Context, marshaler runt
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.UpdateChannelPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
msg, err := client.StopDaemon(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func request_Lightning_ForwardingHistory_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ForwardingHistoryRequest
func local_request_Lightning_StopDaemon_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq StopRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
@ -765,68 +1525,47 @@ func request_Lightning_ForwardingHistory_0(ctx context.Context, marshaler runtim
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ForwardingHistory(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
msg, err := server.StopDaemon(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_ExportChannelBackup_0 = &utilities.DoubleArray{Encoding: map[string]int{"chan_point": 0, "funding_txid_str": 1, "output_index": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}}
)
func request_Lightning_ExportChannelBackup_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ExportChannelBackupRequest
func request_Lightning_SubscribeChannelGraph_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_SubscribeChannelGraphClient, runtime.ServerMetadata, error) {
var protoReq GraphTopologySubscription
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["chan_point.funding_txid_str"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_point.funding_txid_str")
stream, err := client.SubscribeChannelGraph(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
err = runtime.PopulateFieldFromPath(&protoReq, "chan_point.funding_txid_str", val)
header, err := stream.Header()
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chan_point.funding_txid_str", err)
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
val, ok = pathParams["chan_point.output_index"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_point.output_index")
}
}
err = runtime.PopulateFieldFromPath(&protoReq, "chan_point.output_index", val)
func request_Lightning_DebugLevel_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DebugLevelRequest
var metadata runtime.ServerMetadata
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chan_point.output_index", err)
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ExportChannelBackup_0); err != nil {
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ExportChannelBackup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func request_Lightning_ExportAllChannelBackups_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChanBackupExportRequest
var metadata runtime.ServerMetadata
msg, err := client.ExportAllChannelBackups(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
msg, err := client.DebugLevel(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func request_Lightning_VerifyChanBackup_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChanBackupSnapshot
func local_request_Lightning_DebugLevel_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DebugLevelRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
@ -837,43 +1576,1267 @@ func request_Lightning_VerifyChanBackup_0(ctx context.Context, marshaler runtime
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.VerifyChanBackup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
msg, err := server.DebugLevel(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_FeeReport_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq FeeReportRequest
var metadata runtime.ServerMetadata
msg, err := client.FeeReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_FeeReport_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq FeeReportRequest
var metadata runtime.ServerMetadata
msg, err := server.FeeReport(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_UpdateChannelPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PolicyUpdateRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.UpdateChannelPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_UpdateChannelPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PolicyUpdateRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.UpdateChannelPolicy(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_ForwardingHistory_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ForwardingHistoryRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ForwardingHistory(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_ForwardingHistory_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ForwardingHistoryRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ForwardingHistory(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Lightning_ExportChannelBackup_0 = &utilities.DoubleArray{Encoding: map[string]int{"chan_point": 0, "funding_txid_str": 1, "output_index": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}}
)
func request_Lightning_ExportChannelBackup_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ExportChannelBackupRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["chan_point.funding_txid_str"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_point.funding_txid_str")
}
err = runtime.PopulateFieldFromPath(&protoReq, "chan_point.funding_txid_str", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chan_point.funding_txid_str", err)
}
val, ok = pathParams["chan_point.output_index"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_point.output_index")
}
err = runtime.PopulateFieldFromPath(&protoReq, "chan_point.output_index", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chan_point.output_index", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Lightning_ExportChannelBackup_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ExportChannelBackup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_ExportChannelBackup_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ExportChannelBackupRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["chan_point.funding_txid_str"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_point.funding_txid_str")
}
err = runtime.PopulateFieldFromPath(&protoReq, "chan_point.funding_txid_str", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chan_point.funding_txid_str", err)
}
val, ok = pathParams["chan_point.output_index"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chan_point.output_index")
}
err = runtime.PopulateFieldFromPath(&protoReq, "chan_point.output_index", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chan_point.output_index", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_Lightning_ExportChannelBackup_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ExportChannelBackup(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_ExportAllChannelBackups_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChanBackupExportRequest
var metadata runtime.ServerMetadata
msg, err := client.ExportAllChannelBackups(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_ExportAllChannelBackups_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChanBackupExportRequest
var metadata runtime.ServerMetadata
msg, err := server.ExportAllChannelBackups(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_VerifyChanBackup_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChanBackupSnapshot
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.VerifyChanBackup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_VerifyChanBackup_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChanBackupSnapshot
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.VerifyChanBackup(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_RestoreChannelBackups_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RestoreChanBackupRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.RestoreChannelBackups(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_RestoreChannelBackups_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RestoreChanBackupRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.RestoreChannelBackups(ctx, &protoReq)
return msg, metadata, err
}
func request_Lightning_SubscribeChannelBackups_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (Lightning_SubscribeChannelBackupsClient, runtime.ServerMetadata, error) {
var protoReq ChannelBackupSubscription
var metadata runtime.ServerMetadata
stream, err := client.SubscribeChannelBackups(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
func request_Lightning_BakeMacaroon_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BakeMacaroonRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.BakeMacaroon(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Lightning_BakeMacaroon_0(ctx context.Context, marshaler runtime.Marshaler, server LightningServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BakeMacaroonRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.BakeMacaroon(ctx, &protoReq)
return msg, metadata, err
}
// RegisterLightningHandlerServer registers the http handlers for service Lightning to "mux".
// UnaryRPC :call LightningServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterLightningHandlerServer(ctx context.Context, mux *runtime.ServeMux, server LightningServer) error {
mux.Handle("GET", pattern_Lightning_WalletBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_WalletBalance_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_WalletBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ChannelBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ChannelBalance_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ChannelBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_GetTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_GetTransactions_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetTransactions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_EstimateFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_EstimateFee_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_EstimateFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_SendCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_SendCoins_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SendCoins_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ListUnspent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ListUnspent_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListUnspent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_SubscribeTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("POST", pattern_Lightning_SendMany_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_SendMany_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SendMany_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_NewAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_NewAddress_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_NewAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_SignMessage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_SignMessage_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SignMessage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_VerifyMessage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_VerifyMessage_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_VerifyMessage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_ConnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ConnectPeer_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ConnectPeer_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_Lightning_DisconnectPeer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_DisconnectPeer_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DisconnectPeer_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ListPeers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ListPeers_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListPeers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_SubscribePeerEvents_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("GET", pattern_Lightning_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_GetInfo_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_PendingChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_PendingChannels_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_PendingChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ListChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ListChannels_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_SubscribeChannelEvents_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("GET", pattern_Lightning_ClosedChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ClosedChannels_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ClosedChannels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_OpenChannelSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_OpenChannelSync_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_OpenChannelSync_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_OpenChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("POST", pattern_Lightning_FundingStateStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_FundingStateStep_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_FundingStateStep_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_Lightning_CloseChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("DELETE", pattern_Lightning_AbandonChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_AbandonChannel_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_AbandonChannel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_SendPaymentSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_SendPaymentSync_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SendPaymentSync_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_SendToRouteSync_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_SendToRouteSync_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SendToRouteSync_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_AddInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_AddInvoice_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_AddInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ListInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ListInvoices_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListInvoices_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_LookupInvoice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_LookupInvoice_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_LookupInvoice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_SubscribeInvoices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("GET", pattern_Lightning_DecodePayReq_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_DecodePayReq_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DecodePayReq_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ListPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ListPayments_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ListPayments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_Lightning_DeleteAllPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_DeleteAllPayments_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DeleteAllPayments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_DescribeGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_DescribeGraph_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DescribeGraph_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_GetNodeMetrics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_GetNodeMetrics_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetNodeMetrics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_GetChanInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_GetChanInfo_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetChanInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_GetNodeInfo_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetNodeInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_QueryRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_QueryRoutes_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_QueryRoutes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_GetNetworkInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_GetNetworkInfo_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_GetNetworkInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_StopDaemon_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_StopDaemon_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_StopDaemon_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_SubscribeChannelGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
mux.Handle("POST", pattern_Lightning_DebugLevel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_DebugLevel_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DebugLevel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_FeeReport_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_FeeReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_UpdateChannelPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_UpdateChannelPolicy_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_UpdateChannelPolicy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_ForwardingHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ForwardingHistory_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ForwardingHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ExportChannelBackup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ExportChannelBackup_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ExportChannelBackup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ExportAllChannelBackups_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_ExportAllChannelBackups_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_ExportAllChannelBackups_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_VerifyChanBackup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_VerifyChanBackup_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_VerifyChanBackup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
}
})
func request_Lightning_RestoreChannelBackups_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RestoreChanBackupRequest
var metadata runtime.ServerMetadata
mux.Handle("POST", pattern_Lightning_RestoreChannelBackups_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_RestoreChannelBackups_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
forward_Lightning_RestoreChannelBackups_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
msg, err := client.RestoreChannelBackups(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
})
}
mux.Handle("GET", pattern_Lightning_SubscribeChannelBackups_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
func request_Lightning_BakeMacaroon_0(ctx context.Context, marshaler runtime.Marshaler, client LightningClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BakeMacaroonRequest
var metadata runtime.ServerMetadata
mux.Handle("POST", pattern_Lightning_BakeMacaroon_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Lightning_BakeMacaroon_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
forward_Lightning_BakeMacaroon_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
msg, err := client.BakeMacaroon(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
})
return nil
}
// RegisterLightningHandlerFromEndpoint is same as RegisterLightningHandler but
@ -1034,6 +2997,46 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("GET", pattern_Lightning_SubscribeTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SubscribeTransactions_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SubscribeTransactions_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_SendMany_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SendMany_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SendMany_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_NewAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1154,6 +3157,26 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("GET", pattern_Lightning_SubscribePeerEvents_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SubscribePeerEvents_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SubscribePeerEvents_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1214,6 +3237,26 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("GET", pattern_Lightning_SubscribeChannelEvents_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SubscribeChannelEvents_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SubscribeChannelEvents_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_ClosedChannels_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1254,6 +3297,46 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("POST", pattern_Lightning_OpenChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_OpenChannel_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_OpenChannel_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_FundingStateStep_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_FundingStateStep_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_FundingStateStep_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_Lightning_CloseChannel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1594,6 +3677,66 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("POST", pattern_Lightning_StopDaemon_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_StopDaemon_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_StopDaemon_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_SubscribeChannelGraph_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SubscribeChannelGraph_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SubscribeChannelGraph_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_DebugLevel_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_DebugLevel_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_DebugLevel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Lightning_FeeReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1734,6 +3877,26 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
})
mux.Handle("GET", pattern_Lightning_SubscribeChannelBackups_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Lightning_SubscribeChannelBackups_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Lightning_SubscribeChannelBackups_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Lightning_BakeMacaroon_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@ -1758,89 +3921,109 @@ func RegisterLightningHandlerClient(ctx context.Context, mux *runtime.ServeMux,
}
var (
pattern_Lightning_WalletBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "balance", "blockchain"}, ""))
pattern_Lightning_WalletBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "balance", "blockchain"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ChannelBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "balance", "channels"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_GetTransactions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "transactions"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_EstimateFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "transactions", "fee"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_SendCoins_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "transactions"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ChannelBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "balance", "channels"}, ""))
pattern_Lightning_ListUnspent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "utxos"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_GetTransactions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "transactions"}, ""))
pattern_Lightning_SubscribeTransactions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "transactions", "subscribe"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_EstimateFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "transactions", "fee"}, ""))
pattern_Lightning_SendMany_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "transactions", "many"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_SendCoins_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "transactions"}, ""))
pattern_Lightning_NewAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "newaddress"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ListUnspent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "utxos"}, ""))
pattern_Lightning_SignMessage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "signmessage"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_NewAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "newaddress"}, ""))
pattern_Lightning_VerifyMessage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "verifymessage"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_SignMessage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "signmessage"}, ""))
pattern_Lightning_ConnectPeer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "peers"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_VerifyMessage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "verifymessage"}, ""))
pattern_Lightning_DisconnectPeer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "peers", "pub_key"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ConnectPeer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "peers"}, ""))
pattern_Lightning_ListPeers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "peers"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_DisconnectPeer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "peers", "pub_key"}, ""))
pattern_Lightning_SubscribePeerEvents_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "peers", "subscribe"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ListPeers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "peers"}, ""))
pattern_Lightning_GetInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getinfo"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_GetInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "getinfo"}, ""))
pattern_Lightning_PendingChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "pending"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_PendingChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "pending"}, ""))
pattern_Lightning_ListChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ListChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, ""))
pattern_Lightning_SubscribeChannelEvents_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "subscribe"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ClosedChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "closed"}, ""))
pattern_Lightning_ClosedChannels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "closed"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_OpenChannelSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, ""))
pattern_Lightning_OpenChannelSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "channels"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_CloseChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "channels", "channel_point.funding_txid_str", "channel_point.output_index"}, ""))
pattern_Lightning_OpenChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "stream"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_AbandonChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "channels", "abandon", "channel_point.funding_txid_str", "channel_point.output_index"}, ""))
pattern_Lightning_FundingStateStep_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "funding", "step"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_SendPaymentSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "transactions"}, ""))
pattern_Lightning_CloseChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "channels", "channel_point.funding_txid_str", "channel_point.output_index"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_SendToRouteSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "channels", "transactions", "route"}, ""))
pattern_Lightning_AbandonChannel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "channels", "abandon", "channel_point.funding_txid_str", "channel_point.output_index"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_AddInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "invoices"}, ""))
pattern_Lightning_SendPaymentSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "transactions"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ListInvoices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "invoices"}, ""))
pattern_Lightning_SendToRouteSync_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "channels", "transactions", "route"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_LookupInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "invoice", "r_hash_str"}, ""))
pattern_Lightning_AddInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "invoices"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_SubscribeInvoices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "invoices", "subscribe"}, ""))
pattern_Lightning_ListInvoices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "invoices"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_DecodePayReq_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "payreq", "pay_req"}, ""))
pattern_Lightning_LookupInvoice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "invoice", "r_hash_str"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ListPayments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "payments"}, ""))
pattern_Lightning_SubscribeInvoices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "invoices", "subscribe"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_DeleteAllPayments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "payments"}, ""))
pattern_Lightning_DecodePayReq_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "payreq", "pay_req"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_DescribeGraph_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "graph"}, ""))
pattern_Lightning_ListPayments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "payments"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_GetNodeMetrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "graph", "nodemetrics"}, ""))
pattern_Lightning_DeleteAllPayments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "payments"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_GetChanInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "graph", "edge", "chan_id"}, ""))
pattern_Lightning_DescribeGraph_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "graph"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_GetNodeInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "graph", "node", "pub_key"}, ""))
pattern_Lightning_GetNodeMetrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "graph", "nodemetrics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_QueryRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "graph", "routes", "pub_key", "amt"}, ""))
pattern_Lightning_GetChanInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "graph", "edge", "chan_id"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_GetNetworkInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "graph", "info"}, ""))
pattern_Lightning_GetNodeInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "graph", "node", "pub_key"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_FeeReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "fees"}, ""))
pattern_Lightning_QueryRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "graph", "routes", "pub_key", "amt"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_UpdateChannelPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "chanpolicy"}, ""))
pattern_Lightning_GetNetworkInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "graph", "info"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ForwardingHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "switch"}, ""))
pattern_Lightning_StopDaemon_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "stop"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ExportChannelBackup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "channels", "backup", "chan_point.funding_txid_str", "chan_point.output_index"}, ""))
pattern_Lightning_SubscribeChannelGraph_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "graph", "subscribe"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ExportAllChannelBackups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "backup"}, ""))
pattern_Lightning_DebugLevel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "debuglevel"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_VerifyChanBackup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "channels", "backup", "verify"}, ""))
pattern_Lightning_FeeReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "fees"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_RestoreChannelBackups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "channels", "backup", "restore"}, ""))
pattern_Lightning_UpdateChannelPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "chanpolicy"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_BakeMacaroon_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "macaroon"}, ""))
pattern_Lightning_ForwardingHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "switch"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ExportChannelBackup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "channels", "backup", "chan_point.funding_txid_str", "chan_point.output_index"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_ExportAllChannelBackups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "channels", "backup"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_VerifyChanBackup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "channels", "backup", "verify"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_RestoreChannelBackups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "channels", "backup", "restore"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_SubscribeChannelBackups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "channels", "backup", "subscribe"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Lightning_BakeMacaroon_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "macaroon"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
@ -1856,6 +4039,10 @@ var (
forward_Lightning_ListUnspent_0 = runtime.ForwardResponseMessage
forward_Lightning_SubscribeTransactions_0 = runtime.ForwardResponseStream
forward_Lightning_SendMany_0 = runtime.ForwardResponseMessage
forward_Lightning_NewAddress_0 = runtime.ForwardResponseMessage
forward_Lightning_SignMessage_0 = runtime.ForwardResponseMessage
@ -1868,16 +4055,24 @@ var (
forward_Lightning_ListPeers_0 = runtime.ForwardResponseMessage
forward_Lightning_SubscribePeerEvents_0 = runtime.ForwardResponseStream
forward_Lightning_GetInfo_0 = runtime.ForwardResponseMessage
forward_Lightning_PendingChannels_0 = runtime.ForwardResponseMessage
forward_Lightning_ListChannels_0 = runtime.ForwardResponseMessage
forward_Lightning_SubscribeChannelEvents_0 = runtime.ForwardResponseStream
forward_Lightning_ClosedChannels_0 = runtime.ForwardResponseMessage
forward_Lightning_OpenChannelSync_0 = runtime.ForwardResponseMessage
forward_Lightning_OpenChannel_0 = runtime.ForwardResponseStream
forward_Lightning_FundingStateStep_0 = runtime.ForwardResponseMessage
forward_Lightning_CloseChannel_0 = runtime.ForwardResponseStream
forward_Lightning_AbandonChannel_0 = runtime.ForwardResponseMessage
@ -1912,6 +4107,12 @@ var (
forward_Lightning_GetNetworkInfo_0 = runtime.ForwardResponseMessage
forward_Lightning_StopDaemon_0 = runtime.ForwardResponseMessage
forward_Lightning_SubscribeChannelGraph_0 = runtime.ForwardResponseStream
forward_Lightning_DebugLevel_0 = runtime.ForwardResponseMessage
forward_Lightning_FeeReport_0 = runtime.ForwardResponseMessage
forward_Lightning_UpdateChannelPolicy_0 = runtime.ForwardResponseMessage
@ -1926,5 +4127,7 @@ var (
forward_Lightning_RestoreChannelBackups_0 = runtime.ForwardResponseMessage
forward_Lightning_SubscribeChannelBackups_0 = runtime.ForwardResponseStream
forward_Lightning_BakeMacaroon_0 = runtime.ForwardResponseMessage
)

274
lnrpc/rpc.proto

@ -1,7 +1,5 @@
syntax = "proto3";
import "google/api/annotations.proto";
package lnrpc;
option go_package = "github.com/lightningnetwork/lnd/lnrpc";
@ -31,42 +29,25 @@ service Lightning {
confirmed unspent outputs and all unconfirmed unspent outputs under control
of the wallet.
*/
rpc WalletBalance (WalletBalanceRequest) returns (WalletBalanceResponse) {
option (google.api.http) = {
get: "/v1/balance/blockchain"
};
}
rpc WalletBalance (WalletBalanceRequest) returns (WalletBalanceResponse);
/* lncli: `channelbalance`
ChannelBalance returns the total funds available across all open channels
in satoshis.
*/
rpc ChannelBalance (ChannelBalanceRequest)
returns (ChannelBalanceResponse) {
option (google.api.http) = {
get: "/v1/balance/channels"
};
}
rpc ChannelBalance (ChannelBalanceRequest) returns (ChannelBalanceResponse);
/* lncli: `listchaintxns`
GetTransactions returns a list describing all the known transactions
relevant to the wallet.
*/
rpc GetTransactions (GetTransactionsRequest) returns (TransactionDetails) {
option (google.api.http) = {
get: "/v1/transactions"
};
}
rpc GetTransactions (GetTransactionsRequest) returns (TransactionDetails);
/* lncli: `estimatefee`
EstimateFee asks the chain backend to estimate the fee rate and total fees
for a transaction that pays to multiple specified outputs.
*/
rpc EstimateFee (EstimateFeeRequest) returns (EstimateFeeResponse) {
option (google.api.http) = {
get: "/v1/transactions/fee"
};
}
rpc EstimateFee (EstimateFeeRequest) returns (EstimateFeeResponse);
/* lncli: `sendcoins`
SendCoins executes a request to send coins to a particular address. Unlike
@ -75,12 +56,7 @@ service Lightning {
consult its fee model to determine a fee for the default confirmation
target.
*/
rpc SendCoins (SendCoinsRequest) returns (SendCoinsResponse) {
option (google.api.http) = {
post: "/v1/transactions"
body: "*"
};
}
rpc SendCoins (SendCoinsRequest) returns (SendCoinsResponse);
/* lncli: `listunspent`
Deprecated, use walletrpc.ListUnspent instead.
@ -88,11 +64,7 @@ service Lightning {
ListUnspent returns a list of all utxos spendable by the wallet with a
number of confirmations between the specified minimum and maximum.
*/
rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse) {
option (google.api.http) = {
get: "/v1/utxos"
};
}
rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse);
/*
SubscribeTransactions creates a uni-directional stream from the server to
@ -113,23 +85,14 @@ service Lightning {
/* lncli: `newaddress`
NewAddress creates a new address under control of the local wallet.
*/
rpc NewAddress (NewAddressRequest) returns (NewAddressResponse) {
option (google.api.http) = {
get: "/v1/newaddress"
};
}
rpc NewAddress (NewAddressRequest) returns (NewAddressResponse);
/* lncli: `signmessage`
SignMessage signs a message with this node's private key. The returned
signature string is `zbase32` encoded and pubkey recoverable, meaning that
only the message digest and signature are needed for verification.
*/
rpc SignMessage (SignMessageRequest) returns (SignMessageResponse) {
option (google.api.http) = {
post: "/v1/signmessage"
body: "*"
};
}
rpc SignMessage (SignMessageRequest) returns (SignMessageResponse);
/* lncli: `verifymessage`
VerifyMessage verifies a signature over a msg. The signature must be
@ -137,45 +100,26 @@ service Lightning {
channel database. In addition to returning the validity of the signature,
VerifyMessage also returns the recovered pubkey from the signature.
*/
rpc VerifyMessage (VerifyMessageRequest) returns (VerifyMessageResponse) {
option (google.api.http) = {
post: "/v1/verifymessage"
body: "*"
};
}
rpc VerifyMessage (VerifyMessageRequest) returns (VerifyMessageResponse);
/* lncli: `connect`
ConnectPeer attempts to establish a connection to a remote peer. This is at
the networking level, and is used for communication between nodes. This is
distinct from establishing a channel with a peer.
*/
rpc ConnectPeer (ConnectPeerRequest) returns (ConnectPeerResponse) {
option (google.api.http) = {
post: "/v1/peers"
body: "*"
};
}
rpc ConnectPeer (ConnectPeerRequest) returns (ConnectPeerResponse);
/* lncli: `disconnect`
DisconnectPeer attempts to disconnect one peer from another identified by a
given pubKey. In the case that we currently have a pending or active channel
with the target peer, then this action will be not be allowed.
*/
rpc DisconnectPeer (DisconnectPeerRequest)
returns (DisconnectPeerResponse) {
option (google.api.http) = {
delete: "/v1/peers/{pub_key}"
};
}
rpc DisconnectPeer (DisconnectPeerRequest) returns (DisconnectPeerResponse);
/* lncli: `listpeers`
ListPeers returns a verbose listing of all currently active peers.
*/
rpc ListPeers (ListPeersRequest) returns (ListPeersResponse) {
option (google.api.http) = {
get: "/v1/peers"
};
}
rpc ListPeers (ListPeersRequest) returns (ListPeersResponse);
/*
SubscribePeerEvents creates a uni-directional stream from the server to
@ -189,11 +133,7 @@ service Lightning {
it's identity pubkey, alias, the chains it is connected to, and information
concerning the number of open+pending channels.
*/
rpc GetInfo (GetInfoRequest) returns (GetInfoResponse) {
option (google.api.http) = {
get: "/v1/getinfo"
};
}
rpc GetInfo (GetInfoRequest) returns (GetInfoResponse);
// TODO(roasbeef): merge with below with bool?
/* lncli: `pendingchannels`
@ -203,21 +143,13 @@ service Lightning {
process of closure, either initiated cooperatively or non-cooperatively.
*/
rpc PendingChannels (PendingChannelsRequest)
returns (PendingChannelsResponse) {
option (google.api.http) = {
get: "/v1/channels/pending"
};
}
returns (PendingChannelsResponse);
/* lncli: `listchannels`
ListChannels returns a description of all the open channels that this node
is a participant in.
*/
rpc ListChannels (ListChannelsRequest) returns (ListChannelsResponse) {
option (google.api.http) = {
get: "/v1/channels"
};
}
rpc ListChannels (ListChannelsRequest) returns (ListChannelsResponse);
/*
SubscribeChannelEvents creates a uni-directional stream from the server to
@ -232,12 +164,7 @@ service Lightning {
ClosedChannels returns a description of all the closed channels that
this node was a participant in.
*/
rpc ClosedChannels (ClosedChannelsRequest)
returns (ClosedChannelsResponse) {
option (google.api.http) = {
get: "/v1/channels/closed"
};
}
rpc ClosedChannels (ClosedChannelsRequest) returns (ClosedChannelsResponse);
/*
OpenChannelSync is a synchronous version of the OpenChannel RPC call. This
@ -245,12 +172,7 @@ service Lightning {
other sync calls, all byte slices are intended to be populated as hex
encoded strings.
*/
rpc OpenChannelSync (OpenChannelRequest) returns (ChannelPoint) {
option (google.api.http) = {
post: "/v1/channels"
body: "*"
};
}
rpc OpenChannelSync (OpenChannelRequest) returns (ChannelPoint);
/* lncli: `openchannel`
OpenChannel attempts to open a singly funded channel specified in the
@ -295,11 +217,7 @@ service Lightning {
closure transaction is confirmed, or a manual fee rate. If neither are
specified, then a default lax, block confirmation target is used.
*/
rpc CloseChannel (CloseChannelRequest) returns (stream CloseStatusUpdate) {
option (google.api.http) = {
delete: "/v1/channels/{channel_point.funding_txid_str}/{channel_point.output_index}"
};
}
rpc CloseChannel (CloseChannelRequest) returns (stream CloseStatusUpdate);
/* lncli: `abandonchannel`
AbandonChannel removes all channel state from the database except for a
@ -307,12 +225,7 @@ service Lightning {
channels due to bugs fixed in newer versions of lnd. Only available
when in debug builds of lnd.
*/
rpc AbandonChannel (AbandonChannelRequest)
returns (AbandonChannelResponse) {
option (google.api.http) = {
delete: "/v1/channels/abandon/{channel_point.funding_txid_str}/{channel_point.output_index}"
};
}
rpc AbandonChannel (AbandonChannelRequest) returns (AbandonChannelResponse);
/* lncli: `sendpayment`
Deprecated, use routerrpc.SendPaymentV2. SendPayment dispatches a
@ -331,12 +244,7 @@ service Lightning {
Additionally, this RPC expects the destination's public key and the payment
hash (if any) to be encoded as hex strings.
*/
rpc SendPaymentSync (SendRequest) returns (SendResponse) {
option (google.api.http) = {
post: "/v1/channels/transactions"
body: "*"
};
}
rpc SendPaymentSync (SendRequest) returns (SendResponse);
/* lncli: `sendtoroute`
Deprecated, use routerrpc.SendToRouteV2. SendToRoute is a bi-directional
@ -353,24 +261,14 @@ service Lightning {
SendToRouteSync is a synchronous version of SendToRoute. It Will block
until the payment either fails or succeeds.
*/
rpc SendToRouteSync (SendToRouteRequest) returns (SendResponse) {
option (google.api.http) = {
post: "/v1/channels/transactions/route"
body: "*"
};
}
rpc SendToRouteSync (SendToRouteRequest) returns (SendResponse);
/* lncli: `addinvoice`
AddInvoice attempts to add a new invoice to the invoice database. Any
duplicated invoices are rejected, therefore all invoices *must* have a
unique payment preimage.
*/
rpc AddInvoice (Invoice) returns (AddInvoiceResponse) {
option (google.api.http) = {
post: "/v1/invoices"
body: "*"
};
}
rpc AddInvoice (Invoice) returns (AddInvoiceResponse);
/* lncli: `listinvoices`
ListInvoices returns a list of all the invoices currently stored within the
@ -381,22 +279,14 @@ service Lightning {
next request. By default, the first 100 invoices created will be returned.
Backwards pagination is also supported through the Reversed flag.
*/
rpc ListInvoices (ListInvoiceRequest) returns (ListInvoiceResponse) {
option (google.api.http) = {
get: "/v1/invoices"
};
}
rpc ListInvoices (ListInvoiceRequest) returns (ListInvoiceResponse);
/* lncli: `lookupinvoice`
LookupInvoice attempts to look up an invoice according to its payment hash.
The passed payment hash *must* be exactly 32 bytes, if not, an error is
returned.
*/
rpc LookupInvoice (PaymentHash) returns (Invoice) {
option (google.api.http) = {
get: "/v1/invoice/{r_hash_str}"
};
}
rpc LookupInvoice (PaymentHash) returns (Invoice);
/*
SubscribeInvoices returns a uni-directional stream (server -> client) for
@ -409,41 +299,25 @@ service Lightning {
of these fields can be set. If no fields are set, then we'll only send out
the latest add/settle events.
*/
rpc SubscribeInvoices (InvoiceSubscription) returns (stream Invoice) {
option (google.api.http) = {
get: "/v1/invoices/subscribe"
};
}
rpc SubscribeInvoices (InvoiceSubscription) returns (stream Invoice);
/* lncli: `decodepayreq`
DecodePayReq takes an encoded payment request string and attempts to decode
it, returning a full description of the conditions encoded within the
payment request.
*/
rpc DecodePayReq (PayReqString) returns (PayReq) {
option (google.api.http) = {
get: "/v1/payreq/{pay_req}"
};
}
rpc DecodePayReq (PayReqString) returns (PayReq);
/* lncli: `listpayments`
ListPayments returns a list of all outgoing payments.
*/
rpc ListPayments (ListPaymentsRequest) returns (ListPaymentsResponse) {
option (google.api.http) = {
get: "/v1/payments"
};
};
rpc ListPayments (ListPaymentsRequest) returns (ListPaymentsResponse);
/*
DeleteAllPayments deletes all outgoing payments from DB.
*/
rpc DeleteAllPayments (DeleteAllPaymentsRequest)
returns (DeleteAllPaymentsResponse) {
option (google.api.http) = {
delete: "/v1/payments"
};
};
returns (DeleteAllPaymentsResponse);
/* lncli: `describegraph`
DescribeGraph returns a description of the latest graph state from the
@ -453,21 +327,13 @@ service Lightning {
the node directional specific routing policy which includes: the time lock
delta, fee information, etc.
*/
rpc DescribeGraph (ChannelGraphRequest) returns (ChannelGraph) {
option (google.api.http) = {
get: "/v1/graph"
};
}
rpc DescribeGraph (ChannelGraphRequest) returns (ChannelGraph);
/* lncli: `getnodemetrics`
GetNodeMetrics returns node metrics calculated from the graph. Currently
the only supported metric is betweenness centrality of individual nodes.
*/
rpc GetNodeMetrics (NodeMetricsRequest) returns (NodeMetricsResponse) {
option (google.api.http) = {
get: "/v1/graph/nodemetrics"
};
}
rpc GetNodeMetrics (NodeMetricsRequest) returns (NodeMetricsResponse);
/* lncli: `getchaninfo`
GetChanInfo returns the latest authenticated network announcement for the
@ -475,21 +341,13 @@ service Lightning {
uniquely identifies the location of transaction's funding output within the
blockchain.
*/
rpc GetChanInfo (ChanInfoRequest) returns (ChannelEdge) {
option (google.api.http) = {
get: "/v1/graph/edge/{chan_id}"
};
}
rpc GetChanInfo (ChanInfoRequest) returns (ChannelEdge);
/* lncli: `getnodeinfo`
GetNodeInfo returns the latest advertised, aggregated, and authenticated
channel information for the specified node identified by its public key.
*/
rpc GetNodeInfo (NodeInfoRequest) returns (NodeInfo) {
option (google.api.http) = {
get: "/v1/graph/node/{pub_key}"
};
}
rpc GetNodeInfo (NodeInfoRequest) returns (NodeInfo);
/* lncli: `queryroutes`
QueryRoutes attempts to query the daemon's Channel Router for a possible
@ -498,21 +356,13 @@ service Lightning {
send an HTLC, also including the necessary information that should be
present within the Sphinx packet encapsulated within the HTLC.
*/
rpc QueryRoutes (QueryRoutesRequest) returns (QueryRoutesResponse) {
option (google.api.http) = {
get: "/v1/graph/routes/{pub_key}/{amt}"
};
}
rpc QueryRoutes (QueryRoutesRequest) returns (QueryRoutesResponse);
/* lncli: `getnetworkinfo`
GetNetworkInfo returns some basic stats about the known channel graph from
the point of view of the node.
*/
rpc GetNetworkInfo (NetworkInfoRequest) returns (NetworkInfo) {
option (google.api.http) = {
get: "/v1/graph/info"
};
}
rpc GetNetworkInfo (NetworkInfoRequest) returns (NetworkInfo);
/* lncli: `stop`
StopDaemon will send a shutdown request to the interrupt handler, triggering
@ -543,23 +393,14 @@ service Lightning {
FeeReport allows the caller to obtain a report detailing the current fee
schedule enforced by the node globally for each channel.
*/
rpc FeeReport (FeeReportRequest) returns (FeeReportResponse) {
option (google.api.http) = {
get: "/v1/fees"
};
}
rpc FeeReport (FeeReportRequest) returns (FeeReportResponse);
/* lncli: `updatechanpolicy`
UpdateChannelPolicy allows the caller to update the fee schedule and
channel policies for all channels globally, or a particular channel.
*/
rpc UpdateChannelPolicy (PolicyUpdateRequest)
returns (PolicyUpdateResponse) {
option (google.api.http) = {
post: "/v1/chanpolicy"
body: "*"
};
}
returns (PolicyUpdateResponse);
/* lncli: `fwdinghistory`
ForwardingHistory allows the caller to query the htlcswitch for a record of
@ -574,12 +415,7 @@ service Lightning {
request to allow the caller to skip a series of records.
*/
rpc ForwardingHistory (ForwardingHistoryRequest)
returns (ForwardingHistoryResponse) {
option (google.api.http) = {
post: "/v1/switch"
body: "*"
};
};
returns (ForwardingHistoryResponse);
/* lncli: `exportchanbackup`
ExportChannelBackup attempts to return an encrypted static channel backup
@ -590,11 +426,7 @@ service Lightning {
from the WalletUnlocker service.
*/
rpc ExportChannelBackup (ExportChannelBackupRequest)
returns (ChannelBackup) {
option (google.api.http) = {
get: "/v1/channels/backup/{chan_point.funding_txid_str}/{chan_point.output_index}"
};
};
returns (ChannelBackup);
/*
ExportAllChannelBackups returns static channel backups for all existing
@ -604,11 +436,7 @@ service Lightning {
each channel.
*/
rpc ExportAllChannelBackups (ChanBackupExportRequest)
returns (ChanBackupSnapshot) {
option (google.api.http) = {
get: "/v1/channels/backup"
};
};
returns (ChanBackupSnapshot);
/*
VerifyChanBackup allows a caller to verify the integrity of a channel backup
@ -616,12 +444,7 @@ service Lightning {
Specifying both will result in an error.
*/
rpc VerifyChanBackup (ChanBackupSnapshot)
returns (VerifyChanBackupResponse) {
option (google.api.http) = {
post: "/v1/channels/backup/verify"
body: "*"
};
};
returns (VerifyChanBackupResponse);
/* lncli: `restorechanbackup`
RestoreChannelBackups accepts a set of singular channel backups, or a
@ -630,12 +453,7 @@ service Lightning {
new channel will be shown under listchannels, as well as pending channels.
*/
rpc RestoreChannelBackups (RestoreChanBackupRequest)
returns (RestoreBackupResponse) {
option (google.api.http) = {
post: "/v1/channels/backup/restore"
body: "*"
};
};
returns (RestoreBackupResponse);
/*
SubscribeChannelBackups allows a client to sub-subscribe to the most up to
@ -647,20 +465,14 @@ service Lightning {
channel(s) removed.
*/
rpc SubscribeChannelBackups (ChannelBackupSubscription)
returns (stream ChanBackupSnapshot) {
};
returns (stream ChanBackupSnapshot);
/* lncli: `bakemacaroon`
BakeMacaroon allows the creation of a new macaroon with custom read and
write permissions. No first-party caveats are added since this can be done
offline.
*/
rpc BakeMacaroon (BakeMacaroonRequest) returns (BakeMacaroonResponse) {
option (google.api.http) = {
post: "/v1/macaroon"
body: "*"
};
};
rpc BakeMacaroon (BakeMacaroonRequest) returns (BakeMacaroonResponse);
}
message Utxo {

836
lnrpc/rpc.swagger.json

@ -4,10 +4,6 @@
"title": "rpc.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
@ -25,6 +21,12 @@
"schema": {
"$ref": "#/definitions/lnrpcWalletBalanceResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
@ -42,6 +44,12 @@
"schema": {
"$ref": "#/definitions/lnrpcChannelBalanceResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
@ -59,6 +67,12 @@
"schema": {
"$ref": "#/definitions/lnrpcListChannelsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -112,6 +126,12 @@
"schema": {
"$ref": "#/definitions/lnrpcChannelPoint"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -139,6 +159,12 @@
"schema": {
"$ref": "#/definitions/lnrpcAbandonChannelResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -181,6 +207,12 @@
"schema": {
"$ref": "#/definitions/lnrpcChanBackupSnapshot"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
@ -198,6 +230,12 @@
"schema": {
"$ref": "#/definitions/lnrpcRestoreBackupResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -215,6 +253,38 @@
]
}
},
"/v1/channels/backup/subscribe": {
"get": {
"summary": "SubscribeChannelBackups allows a client to sub-subscribe to the most up to\ndate information concerning the state of all channel backups. Each time a\nnew channel is added, we return the new set of channels, along with a\nmulti-chan backup containing the backup info for all channels. Each time a\nchannel is closed, we send a new update, which contains new new chan back\nups, but the updated set of encrypted multi-chan backups with the closed\nchannel(s) removed.",
"operationId": "SubscribeChannelBackups",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcChanBackupSnapshot"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcChanBackupSnapshot"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Lightning"
]
}
},
"/v1/channels/backup/verify": {
"post": {
"summary": "VerifyChanBackup allows a caller to verify the integrity of a channel backup\nsnapshot. This method will accept either a packed Single or a packed Multi.\nSpecifying both will result in an error.",
@ -225,6 +295,12 @@
"schema": {
"$ref": "#/definitions/lnrpcVerifyChanBackupResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -252,6 +328,12 @@
"schema": {
"$ref": "#/definitions/lnrpcChannelBackup"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -294,6 +376,12 @@
"schema": {
"$ref": "#/definitions/lnrpcClosedChannelsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -355,6 +443,86 @@
"schema": {
"$ref": "#/definitions/lnrpcPendingChannelsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Lightning"
]
}
},
"/v1/channels/stream": {
"post": {
"summary": "lncli: `openchannel`\nOpenChannel attempts to open a singly funded channel specified in the\nrequest to a remote peer. Users are able to specify a target number of\nblocks that the funding transaction should be confirmed in, or a manual fee\nrate to us for the funding transaction. If neither are specified, then a\nlax block confirmation target is used. Each OpenStatusUpdate will return\nthe pending channel ID of the in-progress channel. Depending on the\narguments specified in the OpenChannelRequest, this pending channel ID can\nthen be used to manually progress the channel funding flow.",
"operationId": "OpenChannel",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcOpenStatusUpdate"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcOpenStatusUpdate"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/lnrpcOpenChannelRequest"
}
}
],
"tags": [
"Lightning"
]
}
},
"/v1/channels/subscribe": {
"get": {
"summary": "SubscribeChannelEvents creates a uni-directional stream from the server to\nthe client in which any updates relevant to the state of the channels are\nsent over. Events include new active channels, inactive channels, and closed\nchannels.",
"operationId": "SubscribeChannelEvents",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcChannelEventUpdate"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcChannelEventUpdate"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
@ -372,6 +540,12 @@
"schema": {
"$ref": "#/definitions/lnrpcSendResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -399,6 +573,12 @@
"schema": {
"$ref": "#/definitions/lnrpcSendResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -424,7 +604,22 @@
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"$ref": "#/x-stream-definitions/lnrpcCloseStatusUpdate"
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcCloseStatusUpdate"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcCloseStatusUpdate"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
@ -499,6 +694,12 @@
"schema": {
"$ref": "#/definitions/lnrpcPolicyUpdateResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -516,6 +717,39 @@
]
}
},
"/v1/debuglevel": {
"post": {
"summary": "lncli: `debuglevel`\nDebugLevel allows a caller to programmatically set the logging verbosity of\nlnd. The logging can be targeted according to a coarse daemon-wide logging\nlevel, or in a granular fashion to specify the logging for a target\nsub-system.",
"operationId": "DebugLevel",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/lnrpcDebugLevelResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/lnrpcDebugLevelRequest"
}
}
],
"tags": [
"Lightning"
]
}
},
"/v1/fees": {
"get": {
"summary": "lncli: `feereport`\nFeeReport allows the caller to obtain a report detailing the current fee\nschedule enforced by the node globally for each channel.",
@ -526,6 +760,12 @@
"schema": {
"$ref": "#/definitions/lnrpcFeeReportResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
@ -533,6 +773,39 @@
]
}
},
"/v1/funding/step": {
"post": {
"summary": "FundingStateStep is an advanced funding related call that allows the caller\nto either execute some preparatory steps for a funding workflow, or\nmanually progress a funding workflow. The primary way a funding flow is\nidentified is via its pending channel ID. As an example, this method can be\nused to specify that we're expecting a funding flow for a particular\npending channel ID, for which we need to use specific parameters.\nAlternatively, this can be used to interactively drive PSBT signing for\nfunding for partially complete funding transactions.",
"operationId": "FundingStateStep",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/lnrpcFundingStateStepResp"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/lnrpcFundingTransitionMsg"
}
}
],
"tags": [
"Lightning"
]
}
},
"/v1/getinfo": {
"get": {
"summary": "lncli: `getinfo`\nGetInfo returns general information concerning the lightning node including\nit's identity pubkey, alias, the chains it is connected to, and information\nconcerning the number of open+pending channels.",
@ -543,6 +816,12 @@
"schema": {
"$ref": "#/definitions/lnrpcGetInfoResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
@ -560,6 +839,12 @@
"schema": {
"$ref": "#/definitions/lnrpcChannelGraph"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -587,6 +872,12 @@
"schema": {
"$ref": "#/definitions/lnrpcChannelEdge"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -614,6 +905,12 @@
"schema": {
"$ref": "#/definitions/lnrpcNetworkInfo"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
@ -631,6 +928,12 @@
"schema": {
"$ref": "#/definitions/lnrpcNodeInfo"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -665,6 +968,12 @@
"schema": {
"$ref": "#/definitions/lnrpcNodeMetricsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -699,6 +1008,12 @@
"schema": {
"$ref": "#/definitions/lnrpcQueryRoutesResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -844,6 +1159,38 @@
]
}
},
"/v1/graph/subscribe": {
"get": {
"summary": "SubscribeChannelGraph launches a streaming RPC that allows the caller to\nreceive notifications upon any changes to the channel graph topology from\nthe point of view of the responding node. Events notified include: new\nnodes coming online, nodes updating their authenticated attributes, new\nchannels being advertised, updates in the routing policy for a directional\nchannel edge, and when channels are closed on-chain.",
"operationId": "SubscribeChannelGraph",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcGraphTopologyUpdate"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcGraphTopologyUpdate"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Lightning"
]
}
},
"/v1/invoice/{r_hash_str}": {
"get": {
"summary": "lncli: `lookupinvoice`\nLookupInvoice attempts to look up an invoice according to its payment hash.\nThe passed payment hash *must* be exactly 32 bytes, if not, an error is\nreturned.",
@ -854,6 +1201,12 @@
"schema": {
"$ref": "#/definitions/lnrpcInvoice"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -888,6 +1241,12 @@
"schema": {
"$ref": "#/definitions/lnrpcListInvoiceResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -937,6 +1296,12 @@
"schema": {
"$ref": "#/definitions/lnrpcAddInvoiceResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -962,7 +1327,22 @@
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"$ref": "#/x-stream-definitions/lnrpcInvoice"
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcInvoice"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcInvoice"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
@ -999,6 +1379,12 @@
"schema": {
"$ref": "#/definitions/lnrpcBakeMacaroonResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1026,6 +1412,12 @@
"schema": {
"$ref": "#/definitions/lnrpcNewAddressResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1059,6 +1451,12 @@
"schema": {
"$ref": "#/definitions/lnrpcListPaymentsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1108,6 +1506,12 @@
"schema": {
"$ref": "#/definitions/lnrpcDeleteAllPaymentsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
@ -1125,6 +1529,12 @@
"schema": {
"$ref": "#/definitions/lnrpcPayReq"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1151,6 +1561,12 @@
"schema": {
"$ref": "#/definitions/lnrpcListPeersResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1176,6 +1592,12 @@
"schema": {
"$ref": "#/definitions/lnrpcConnectPeerResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1193,6 +1615,38 @@
]
}
},
"/v1/peers/subscribe": {
"get": {
"summary": "SubscribePeerEvents creates a uni-directional stream from the server to\nthe client in which any events relevant to the state of peers are sent\nover. Events include peers going online and offline.",
"operationId": "SubscribePeerEvents",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcPeerEvent"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcPeerEvent"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Lightning"
]
}
},
"/v1/peers/{pub_key}": {
"delete": {
"summary": "lncli: `disconnect`\nDisconnectPeer attempts to disconnect one peer from another identified by a\ngiven pubKey. In the case that we currently have a pending or active channel\nwith the target peer, then this action will be not be allowed.",
@ -1203,6 +1657,12 @@
"schema": {
"$ref": "#/definitions/lnrpcDisconnectPeerResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1229,6 +1689,12 @@
"schema": {
"$ref": "#/definitions/lnrpcSignMessageResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1246,6 +1712,39 @@
]
}
},
"/v1/stop": {
"post": {
"summary": "lncli: `stop`\nStopDaemon will send a shutdown request to the interrupt handler, triggering\na graceful shutdown of the daemon.",
"operationId": "StopDaemon",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/lnrpcStopResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/lnrpcStopRequest"
}
}
],
"tags": [
"Lightning"
]
}
},
"/v1/switch": {
"post": {
"summary": "lncli: `fwdinghistory`\nForwardingHistory allows the caller to query the htlcswitch for a record of\nall HTLCs forwarded within the target time range, and integer offset\nwithin that time range. If no time-range is specified, then the first chunk\nof the past 24 hrs of forwarding history are returned.",
@ -1257,6 +1756,12 @@
"schema": {
"$ref": "#/definitions/lnrpcForwardingHistoryResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1284,6 +1789,12 @@
"schema": {
"$ref": "#/definitions/lnrpcTransactionDetails"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1317,6 +1828,12 @@
"schema": {
"$ref": "#/definitions/lnrpcSendCoinsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1344,6 +1861,12 @@
"schema": {
"$ref": "#/definitions/lnrpcEstimateFeeResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1361,6 +1884,89 @@
]
}
},
"/v1/transactions/many": {
"post": {
"summary": "lncli: `sendmany`\nSendMany handles a request for a transaction that creates multiple specified\noutputs in parallel. If neither target_conf, or sat_per_byte are set, then\nthe internal wallet will consult its fee model to determine a fee for the\ndefault confirmation target.",
"operationId": "SendMany",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/lnrpcSendManyResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/lnrpcSendManyRequest"
}
}
],
"tags": [
"Lightning"
]
}
},
"/v1/transactions/subscribe": {
"get": {
"summary": "SubscribeTransactions creates a uni-directional stream from the server to\nthe client in which any newly discovered transactions relevant to the\nwallet are sent over.",
"operationId": "SubscribeTransactions",
"responses": {
"200": {
"description": "A successful response.(streaming responses)",
"schema": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcTransaction"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcTransaction"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "start_height",
"description": "The height from which to list transactions, inclusive. If this value is\ngreater than end_height, transactions will be read in reverse.",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
},
{
"name": "end_height",
"description": "The height until which to list transactions, inclusive. To include\nunconfirmed transactions, this value should be set to -1, which will\nreturn transactions from start_height until the current chain tip and\nunconfirmed transactions. If no end_height is provided, the call will\ndefault to this option.",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Lightning"
]
}
},
"/v1/utxos": {
"get": {
"summary": "lncli: `listunspent`\nDeprecated, use walletrpc.ListUnspent instead.",
@ -1372,6 +1978,12 @@
"schema": {
"$ref": "#/definitions/lnrpcListUnspentResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -1407,6 +2019,12 @@
"schema": {
"$ref": "#/definitions/lnrpcVerifyMessageResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -2446,6 +3064,18 @@
"lnrpcConnectPeerResponse": {
"type": "object"
},
"lnrpcDebugLevelRequest": {
"type": "object",
"properties": {
"show": {
"type": "boolean",
"format": "boolean"
},
"level_spec": {
"type": "string"
}
}
},
"lnrpcDebugLevelResponse": {
"type": "object",
"properties": {
@ -2782,6 +3412,27 @@
"lnrpcFundingStateStepResp": {
"type": "object"
},
"lnrpcFundingTransitionMsg": {
"type": "object",
"properties": {
"shim_register": {
"$ref": "#/definitions/lnrpcFundingShim",
"description": "The funding shim to register. This should be used before any\nchannel funding has began by the remote party, as it is intended as a\npreparatory step for the full channel funding."
},
"shim_cancel": {
"$ref": "#/definitions/lnrpcFundingShimCancel",
"description": "Used to cancel an existing registered funding shim."
},
"psbt_verify": {
"$ref": "#/definitions/lnrpcFundingPsbtVerify",
"description": "Used to continue a funding flow that was initiated to be executed\nthrough a PSBT. This step verifies that the PSBT contains the correct\noutputs to fund the channel."
},
"psbt_finalize": {
"$ref": "#/definitions/lnrpcFundingPsbtFinalize",
"description": "Used to continue a funding flow that was initiated to be executed\nthrough a PSBT. This step finalizes the funded and signed PSBT, finishes\nnegotiation with the peer and finally publishes the resulting funding\ntransaction."
}
}
},
"lnrpcGetInfoResponse": {
"type": "object",
"properties": {
@ -4247,6 +4898,33 @@
}
}
},
"lnrpcSendManyRequest": {
"type": "object",
"properties": {
"AddrToAmount": {
"type": "object",
"additionalProperties": {
"type": "string",
"format": "int64"
},
"title": "The map from addresses to amounts"
},
"target_conf": {
"type": "integer",
"format": "int32",
"description": "The target number of blocks that this transaction should be confirmed\nby."
},
"sat_per_byte": {
"type": "string",
"format": "int64",
"description": "A manual fee rate set in sat/byte that should be used when crafting the\ntransaction."
},
"label": {
"type": "string",
"description": "An optional label for the transaction, limited to 500 characters."
}
}
},
"lnrpcSendManyResponse": {
"type": "object",
"properties": {
@ -4393,6 +5071,9 @@
}
}
},
"lnrpcStopRequest": {
"type": "object"
},
"lnrpcStopResponse": {
"type": "object"
},
@ -4569,23 +5250,19 @@
}
}
},
"runtimeStreamError": {
"runtimeError": {
"type": "object",
"properties": {
"grpc_code": {
"type": "integer",
"format": "int32"
"error": {
"type": "string"
},
"http_code": {
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"http_status": {
"type": "string"
},
"details": {
"type": "array",
"items": {
@ -4593,128 +5270,31 @@
}
}
}
}
},
"x-stream-definitions": {
"lnrpcChanBackupSnapshot": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcChanBackupSnapshot"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcChanBackupSnapshot"
},
"lnrpcChannelAcceptRequest": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcChannelAcceptRequest"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcChannelAcceptRequest"
},
"lnrpcChannelEventUpdate": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcChannelEventUpdate"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcChannelEventUpdate"
},
"lnrpcCloseStatusUpdate": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcCloseStatusUpdate"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcCloseStatusUpdate"
},
"lnrpcGraphTopologyUpdate": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcGraphTopologyUpdate"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcGraphTopologyUpdate"
},
"lnrpcInvoice": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcInvoice"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcInvoice"
},
"lnrpcOpenStatusUpdate": {
"runtimeStreamError": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcOpenStatusUpdate"
"grpc_code": {
"type": "integer",
"format": "int32"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcOpenStatusUpdate"
},
"lnrpcPeerEvent": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcPeerEvent"
"http_code": {
"type": "integer",
"format": "int32"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcPeerEvent"
},
"lnrpcSendResponse": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcSendResponse"
"message": {
"type": "string"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
}
},
"title": "Stream result of lnrpcSendResponse"
},
"lnrpcTransaction": {
"type": "object",
"properties": {
"result": {
"$ref": "#/definitions/lnrpcTransaction"
"http_status": {
"type": "string"
},
"error": {
"$ref": "#/definitions/runtimeStreamError"
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
},
"title": "Stream result of lnrpcTransaction"
}
}
}
}

22
lnrpc/signrpc/signer.pb.go

@ -8,6 +8,8 @@ import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -986,6 +988,26 @@ type SignerServer interface {
DeriveSharedKey(context.Context, *SharedKeyRequest) (*SharedKeyResponse, error)
}
// UnimplementedSignerServer can be embedded to have forward compatible implementations.
type UnimplementedSignerServer struct {
}
func (*UnimplementedSignerServer) SignOutputRaw(ctx context.Context, req *SignReq) (*SignResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method SignOutputRaw not implemented")
}
func (*UnimplementedSignerServer) ComputeInputScript(ctx context.Context, req *SignReq) (*InputScriptResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method ComputeInputScript not implemented")
}
func (*UnimplementedSignerServer) SignMessage(ctx context.Context, req *SignMessageReq) (*SignMessageResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method SignMessage not implemented")
}
func (*UnimplementedSignerServer) VerifyMessage(ctx context.Context, req *VerifyMessageReq) (*VerifyMessageResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method VerifyMessage not implemented")
}
func (*UnimplementedSignerServer) DeriveSharedKey(ctx context.Context, req *SharedKeyRequest) (*SharedKeyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeriveSharedKey not implemented")
}
func RegisterSignerServer(s *grpc.Server, srv SignerServer) {
s.RegisterService(&_Signer_serviceDesc, srv)
}

475
lnrpc/signrpc/signer.pb.gw.go

@ -0,0 +1,475 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: signrpc/signer.proto
/*
Package signrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package signrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_Signer_SignOutputRaw_0(ctx context.Context, marshaler runtime.Marshaler, client SignerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SignReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SignOutputRaw(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Signer_SignOutputRaw_0(ctx context.Context, marshaler runtime.Marshaler, server SignerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SignReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SignOutputRaw(ctx, &protoReq)
return msg, metadata, err
}
func request_Signer_ComputeInputScript_0(ctx context.Context, marshaler runtime.Marshaler, client SignerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SignReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ComputeInputScript(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Signer_ComputeInputScript_0(ctx context.Context, marshaler runtime.Marshaler, server SignerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SignReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ComputeInputScript(ctx, &protoReq)
return msg, metadata, err
}
func request_Signer_SignMessage_0(ctx context.Context, marshaler runtime.Marshaler, client SignerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SignMessageReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SignMessage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Signer_SignMessage_0(ctx context.Context, marshaler runtime.Marshaler, server SignerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SignMessageReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SignMessage(ctx, &protoReq)
return msg, metadata, err
}
func request_Signer_VerifyMessage_0(ctx context.Context, marshaler runtime.Marshaler, client SignerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq VerifyMessageReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.VerifyMessage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Signer_VerifyMessage_0(ctx context.Context, marshaler runtime.Marshaler, server SignerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq VerifyMessageReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.VerifyMessage(ctx, &protoReq)
return msg, metadata, err
}
func request_Signer_DeriveSharedKey_0(ctx context.Context, marshaler runtime.Marshaler, client SignerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SharedKeyRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.DeriveSharedKey(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Signer_DeriveSharedKey_0(ctx context.Context, marshaler runtime.Marshaler, server SignerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SharedKeyRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.DeriveSharedKey(ctx, &protoReq)
return msg, metadata, err
}
// RegisterSignerHandlerServer registers the http handlers for service Signer to "mux".
// UnaryRPC :call SignerServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterSignerHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SignerServer) error {
mux.Handle("POST", pattern_Signer_SignOutputRaw_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Signer_SignOutputRaw_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_SignOutputRaw_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Signer_ComputeInputScript_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Signer_ComputeInputScript_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_ComputeInputScript_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Signer_SignMessage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Signer_SignMessage_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_SignMessage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Signer_VerifyMessage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Signer_VerifyMessage_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_VerifyMessage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Signer_DeriveSharedKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Signer_DeriveSharedKey_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_DeriveSharedKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterSignerHandlerFromEndpoint is same as RegisterSignerHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterSignerHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterSignerHandler(ctx, mux, conn)
}
// RegisterSignerHandler registers the http handlers for service Signer to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterSignerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterSignerHandlerClient(ctx, mux, NewSignerClient(conn))
}
// RegisterSignerHandlerClient registers the http handlers for service Signer
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SignerClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SignerClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "SignerClient" to call the correct interceptors.
func RegisterSignerHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SignerClient) error {
mux.Handle("POST", pattern_Signer_SignOutputRaw_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Signer_SignOutputRaw_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_SignOutputRaw_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Signer_ComputeInputScript_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Signer_ComputeInputScript_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_ComputeInputScript_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Signer_SignMessage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Signer_SignMessage_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_SignMessage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Signer_VerifyMessage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Signer_VerifyMessage_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_VerifyMessage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_Signer_DeriveSharedKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Signer_DeriveSharedKey_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Signer_DeriveSharedKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Signer_SignOutputRaw_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "signer", "signraw"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Signer_ComputeInputScript_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "signer", "inputscript"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Signer_SignMessage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "signer", "signmessage"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Signer_VerifyMessage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "signer", "verifymessage"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Signer_DeriveSharedKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "signer", "sharedkey"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_Signer_SignOutputRaw_0 = runtime.ForwardResponseMessage
forward_Signer_ComputeInputScript_0 = runtime.ForwardResponseMessage
forward_Signer_SignMessage_0 = runtime.ForwardResponseMessage
forward_Signer_VerifyMessage_0 = runtime.ForwardResponseMessage
forward_Signer_DeriveSharedKey_0 = runtime.ForwardResponseMessage
)

274
lnrpc/signrpc/signer.swagger.json

@ -4,18 +4,217 @@
"title": "signrpc/signer.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/signer/inputscript": {
"post": {
"summary": "ComputeInputScript generates a complete InputIndex for the passed\ntransaction with the signature as defined within the passed SignDescriptor.\nThis method should be capable of generating the proper input script for\nboth regular p2wkh output and p2wkh outputs nested within a regular p2sh\noutput.",
"description": "Note that when using this method to sign inputs belonging to the wallet,\nthe only items of the SignDescriptor that need to be populated are pkScript\nin the TxOut field, the value in that same field, and finally the input\nindex.",
"operationId": "ComputeInputScript",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/signrpcInputScriptResp"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/signrpcSignReq"
}
}
],
"tags": [
"Signer"
]
}
},
"/v2/signer/sharedkey": {
"post": {
"summary": "DeriveSharedKey returns a shared secret key by performing Diffie-Hellman key\nderivation between the ephemeral public key in the request and the node's\nkey specified in the key_loc parameter (or the node's identity private key\nif no key locator is specified):\nP_shared = privKeyNode * ephemeralPubkey\nThe resulting shared public key is serialized in the compressed format and\nhashed with sha256, resulting in the final key length of 256bit.",
"operationId": "DeriveSharedKey",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/signrpcSharedKeyResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/signrpcSharedKeyRequest"
}
}
],
"tags": [
"Signer"
]
}
},
"/v2/signer/signmessage": {
"post": {
"summary": "SignMessage signs a message with the key specified in the key locator. The\nreturned signature is fixed-size LN wire format encoded.",
"description": "The main difference to SignMessage in the main RPC is that a specific key is\nused to sign the message instead of the node identity private key.",
"operationId": "SignMessage",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/signrpcSignMessageResp"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/signrpcSignMessageReq"
}
}
],
"tags": [
"Signer"
]
}
},
"/v2/signer/signraw": {
"post": {
"summary": "SignOutputRaw is a method that can be used to generated a signature for a\nset of inputs/outputs to a transaction. Each request specifies details\nconcerning how the outputs should be signed, which keys they should be\nsigned with, and also any optional tweaks. The return value is a fixed\n64-byte signature (the same format as we use on the wire in Lightning).",
"description": "If we are unable to sign using the specified keys, then an error will be\nreturned.",
"operationId": "SignOutputRaw",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/signrpcSignResp"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/signrpcSignReq"
}
}
],
"tags": [
"Signer"
]
}
},
"/v2/signer/verifymessage": {
"post": {
"summary": "VerifyMessage verifies a signature over a message using the public key\nprovided. The signature must be fixed-size LN wire format encoded.",
"description": "The main difference to VerifyMessage in the main RPC is that the public key\nused to sign the message does not have to be a node known to the network.",
"operationId": "VerifyMessage",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/signrpcVerifyMessageResp"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/signrpcVerifyMessageReq"
}
}
],
"tags": [
"Signer"
]
}
}
},
"definitions": {
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"signrpcInputScript": {
"type": "object",
"properties": {
@ -75,6 +274,20 @@
}
}
},
"signrpcSharedKeyRequest": {
"type": "object",
"properties": {
"ephemeral_pubkey": {
"type": "string",
"format": "byte",
"description": "The ephemeral public key to use for the DH key derivation."
},
"key_loc": {
"$ref": "#/definitions/signrpcKeyLocator",
"description": "The optional key locator of the local key that should be used. If this\nparameter is not set then the node's identity private key will be used."
}
}
},
"signrpcSharedKeyResponse": {
"type": "object",
"properties": {
@ -124,6 +337,20 @@
}
}
},
"signrpcSignMessageReq": {
"type": "object",
"properties": {
"msg": {
"type": "string",
"format": "byte",
"description": "The message to be signed."
},
"key_loc": {
"$ref": "#/definitions/signrpcKeyLocator",
"description": "The key locator that identifies which key to use for signing."
}
}
},
"signrpcSignMessageResp": {
"type": "object",
"properties": {
@ -134,6 +361,23 @@
}
}
},
"signrpcSignReq": {
"type": "object",
"properties": {
"raw_tx_bytes": {
"type": "string",
"format": "byte",
"description": "The raw bytes of the transaction to be signed."
},
"sign_descs": {
"type": "array",
"items": {
"$ref": "#/definitions/signrpcSignDescriptor"
},
"description": "A set of sign descriptors, for each input to be signed."
}
}
},
"signrpcSignResp": {
"type": "object",
"properties": {
@ -162,6 +406,26 @@
}
}
},
"signrpcVerifyMessageReq": {
"type": "object",
"properties": {
"msg": {
"type": "string",
"format": "byte",
"description": "The message over which the signature is to be verified."
},
"signature": {
"type": "string",
"format": "byte",
"description": "The fixed-size LN wire encoded signature to be verified over the given\nmessage."
},
"pubkey": {
"type": "string",
"format": "byte",
"description": "The public key the signature has to be valid for."
}
}
},
"signrpcVerifyMessageResp": {
"type": "object",
"properties": {

10
lnrpc/verrpc/verrpc.pb.go

@ -8,6 +8,8 @@ import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -238,6 +240,14 @@ type VersionerServer interface {
GetVersion(context.Context, *VersionRequest) (*Version, error)
}
// UnimplementedVersionerServer can be embedded to have forward compatible implementations.
type UnimplementedVersionerServer struct {
}
func (*UnimplementedVersionerServer) GetVersion(ctx context.Context, req *VersionRequest) (*Version, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetVersion not implemented")
}
func RegisterVersionerServer(s *grpc.Server, srv VersionerServer) {
s.RegisterService(&_Versioner_serviceDesc, srv)
}

147
lnrpc/verrpc/verrpc.pb.gw.go

@ -0,0 +1,147 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: verrpc/verrpc.proto
/*
Package verrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package verrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_Versioner_GetVersion_0(ctx context.Context, marshaler runtime.Marshaler, client VersionerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq VersionRequest
var metadata runtime.ServerMetadata
msg, err := client.GetVersion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Versioner_GetVersion_0(ctx context.Context, marshaler runtime.Marshaler, server VersionerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq VersionRequest
var metadata runtime.ServerMetadata
msg, err := server.GetVersion(ctx, &protoReq)
return msg, metadata, err
}
// RegisterVersionerHandlerServer registers the http handlers for service Versioner to "mux".
// UnaryRPC :call VersionerServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterVersionerHandlerServer(ctx context.Context, mux *runtime.ServeMux, server VersionerServer) error {
mux.Handle("GET", pattern_Versioner_GetVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Versioner_GetVersion_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Versioner_GetVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterVersionerHandlerFromEndpoint is same as RegisterVersionerHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterVersionerHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterVersionerHandler(ctx, mux, conn)
}
// RegisterVersionerHandler registers the http handlers for service Versioner to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterVersionerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterVersionerHandlerClient(ctx, mux, NewVersionerClient(conn))
}
// RegisterVersionerHandlerClient registers the http handlers for service Versioner
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "VersionerClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "VersionerClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "VersionerClient" to call the correct interceptors.
func RegisterVersionerHandlerClient(ctx context.Context, mux *runtime.ServeMux, client VersionerClient) error {
mux.Handle("GET", pattern_Versioner_GetVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Versioner_GetVersion_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Versioner_GetVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Versioner_GetVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "versioner", "version"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_Versioner_GetVersion_0 = runtime.ForwardResponseMessage
)

63
lnrpc/verrpc/verrpc.swagger.json

@ -4,18 +4,71 @@
"title": "verrpc/verrpc.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/versioner/version": {
"get": {
"summary": "lncli: `version`\nGetVersion returns the current version and build information of the running\ndaemon.",
"operationId": "GetVersion",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/verrpcVersion"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Versioner"
]
}
}
},
"definitions": {
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"verrpcVersion": {
"type": "object",
"properties": {

46
lnrpc/walletrpc/walletkit.pb.go

@ -10,6 +10,8 @@ import (
lnrpc "github.com/lightningnetwork/lnd/lnrpc"
signrpc "github.com/lightningnetwork/lnd/lnrpc/signrpc"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -1799,6 +1801,50 @@ type WalletKitServer interface {
LabelTransaction(context.Context, *LabelTransactionRequest) (*LabelTransactionResponse, error)
}
// UnimplementedWalletKitServer can be embedded to have forward compatible implementations.
type UnimplementedWalletKitServer struct {
}
func (*UnimplementedWalletKitServer) ListUnspent(ctx context.Context, req *ListUnspentRequest) (*ListUnspentResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListUnspent not implemented")
}
func (*UnimplementedWalletKitServer) LeaseOutput(ctx context.Context, req *LeaseOutputRequest) (*LeaseOutputResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method LeaseOutput not implemented")
}
func (*UnimplementedWalletKitServer) ReleaseOutput(ctx context.Context, req *ReleaseOutputRequest) (*ReleaseOutputResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ReleaseOutput not implemented")
}
func (*UnimplementedWalletKitServer) DeriveNextKey(ctx context.Context, req *KeyReq) (*signrpc.KeyDescriptor, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeriveNextKey not implemented")
}
func (*UnimplementedWalletKitServer) DeriveKey(ctx context.Context, req *signrpc.KeyLocator) (*signrpc.KeyDescriptor, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeriveKey not implemented")
}
func (*UnimplementedWalletKitServer) NextAddr(ctx context.Context, req *AddrRequest) (*AddrResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method NextAddr not implemented")
}
func (*UnimplementedWalletKitServer) PublishTransaction(ctx context.Context, req *Transaction) (*PublishResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method PublishTransaction not implemented")
}
func (*UnimplementedWalletKitServer) SendOutputs(ctx context.Context, req *SendOutputsRequest) (*SendOutputsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SendOutputs not implemented")
}
func (*UnimplementedWalletKitServer) EstimateFee(ctx context.Context, req *EstimateFeeRequest) (*EstimateFeeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method EstimateFee not implemented")
}
func (*UnimplementedWalletKitServer) PendingSweeps(ctx context.Context, req *PendingSweepsRequest) (*PendingSweepsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method PendingSweeps not implemented")
}
func (*UnimplementedWalletKitServer) BumpFee(ctx context.Context, req *BumpFeeRequest) (*BumpFeeResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BumpFee not implemented")
}
func (*UnimplementedWalletKitServer) ListSweeps(ctx context.Context, req *ListSweepsRequest) (*ListSweepsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListSweeps not implemented")
}
func (*UnimplementedWalletKitServer) LabelTransaction(ctx context.Context, req *LabelTransactionRequest) (*LabelTransactionResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method LabelTransaction not implemented")
}
func RegisterWalletKitServer(s *grpc.Server, srv WalletKitServer) {
s.RegisterService(&_WalletKit_serviceDesc, srv)
}

1102
lnrpc/walletrpc/walletkit.pb.gw.go

@ -0,0 +1,1102 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: walletrpc/walletkit.proto
/*
Package walletrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package walletrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"github.com/lightningnetwork/lnd/lnrpc/signrpc"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
var (
filter_WalletKit_ListUnspent_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_WalletKit_ListUnspent_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListUnspentRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WalletKit_ListUnspent_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListUnspent(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_ListUnspent_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListUnspentRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WalletKit_ListUnspent_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListUnspent(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_LeaseOutput_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq LeaseOutputRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.LeaseOutput(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_LeaseOutput_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq LeaseOutputRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.LeaseOutput(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_ReleaseOutput_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ReleaseOutputRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ReleaseOutput(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_ReleaseOutput_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ReleaseOutputRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ReleaseOutput(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_DeriveNextKey_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq KeyReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.DeriveNextKey(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_DeriveNextKey_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq KeyReq
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.DeriveNextKey(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_DeriveKey_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq signrpc.KeyLocator
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.DeriveKey(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_DeriveKey_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq signrpc.KeyLocator
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.DeriveKey(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_NextAddr_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AddrRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.NextAddr(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_NextAddr_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AddrRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.NextAddr(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_PublishTransaction_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq Transaction
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.PublishTransaction(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_PublishTransaction_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq Transaction
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.PublishTransaction(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_SendOutputs_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendOutputsRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.SendOutputs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_SendOutputs_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq SendOutputsRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.SendOutputs(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_EstimateFee_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq EstimateFeeRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["conf_target"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "conf_target")
}
protoReq.ConfTarget, err = runtime.Int32(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "conf_target", err)
}
msg, err := client.EstimateFee(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_EstimateFee_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq EstimateFeeRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["conf_target"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "conf_target")
}
protoReq.ConfTarget, err = runtime.Int32(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "conf_target", err)
}
msg, err := server.EstimateFee(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_PendingSweeps_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PendingSweepsRequest
var metadata runtime.ServerMetadata
msg, err := client.PendingSweeps(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_PendingSweeps_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PendingSweepsRequest
var metadata runtime.ServerMetadata
msg, err := server.PendingSweeps(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_BumpFee_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BumpFeeRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.BumpFee(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_BumpFee_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq BumpFeeRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.BumpFee(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_WalletKit_ListSweeps_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_WalletKit_ListSweeps_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListSweepsRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WalletKit_ListSweeps_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListSweeps(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_ListSweeps_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListSweepsRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WalletKit_ListSweeps_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListSweeps(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletKit_LabelTransaction_0(ctx context.Context, marshaler runtime.Marshaler, client WalletKitClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq LabelTransactionRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.LabelTransaction(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WalletKit_LabelTransaction_0(ctx context.Context, marshaler runtime.Marshaler, server WalletKitServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq LabelTransactionRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.LabelTransaction(ctx, &protoReq)
return msg, metadata, err
}
// RegisterWalletKitHandlerServer registers the http handlers for service WalletKit to "mux".
// UnaryRPC :call WalletKitServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterWalletKitHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WalletKitServer) error {
mux.Handle("POST", pattern_WalletKit_ListUnspent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_ListUnspent_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_ListUnspent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_LeaseOutput_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_LeaseOutput_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_LeaseOutput_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_ReleaseOutput_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_ReleaseOutput_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_ReleaseOutput_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_DeriveNextKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_DeriveNextKey_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_DeriveNextKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_DeriveKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_DeriveKey_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_DeriveKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_NextAddr_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_NextAddr_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_NextAddr_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_PublishTransaction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_PublishTransaction_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_PublishTransaction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_SendOutputs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_SendOutputs_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_SendOutputs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WalletKit_EstimateFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_EstimateFee_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_EstimateFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WalletKit_PendingSweeps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_PendingSweeps_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_PendingSweeps_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_BumpFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_BumpFee_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_BumpFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WalletKit_ListSweeps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_ListSweeps_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_ListSweeps_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_LabelTransaction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletKit_LabelTransaction_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_LabelTransaction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterWalletKitHandlerFromEndpoint is same as RegisterWalletKitHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterWalletKitHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterWalletKitHandler(ctx, mux, conn)
}
// RegisterWalletKitHandler registers the http handlers for service WalletKit to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterWalletKitHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterWalletKitHandlerClient(ctx, mux, NewWalletKitClient(conn))
}
// RegisterWalletKitHandlerClient registers the http handlers for service WalletKit
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "WalletKitClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WalletKitClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "WalletKitClient" to call the correct interceptors.
func RegisterWalletKitHandlerClient(ctx context.Context, mux *runtime.ServeMux, client WalletKitClient) error {
mux.Handle("POST", pattern_WalletKit_ListUnspent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_ListUnspent_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_ListUnspent_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_LeaseOutput_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_LeaseOutput_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_LeaseOutput_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_ReleaseOutput_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_ReleaseOutput_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_ReleaseOutput_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_DeriveNextKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_DeriveNextKey_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_DeriveNextKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_DeriveKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_DeriveKey_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_DeriveKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_NextAddr_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_NextAddr_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_NextAddr_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_PublishTransaction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_PublishTransaction_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_PublishTransaction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_SendOutputs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_SendOutputs_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_SendOutputs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WalletKit_EstimateFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_EstimateFee_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_EstimateFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WalletKit_PendingSweeps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_PendingSweeps_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_PendingSweeps_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_BumpFee_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_BumpFee_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_BumpFee_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WalletKit_ListSweeps_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_ListSweeps_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_ListSweeps_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletKit_LabelTransaction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WalletKit_LabelTransaction_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletKit_LabelTransaction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_WalletKit_ListUnspent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "wallet", "utxos"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_LeaseOutput_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "utxos", "lease"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_ReleaseOutput_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "utxos", "release"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_DeriveNextKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "key", "next"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_DeriveKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "wallet", "key"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_NextAddr_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "address", "next"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_PublishTransaction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "wallet", "tx"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_SendOutputs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "wallet", "send"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_EstimateFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "wallet", "estimatefee", "conf_target"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_PendingSweeps_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "sweeps", "pending"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_BumpFee_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "wallet", "bumpfee"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_ListSweeps_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "wallet", "sweeps"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletKit_LabelTransaction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "wallet", "tx", "label"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_WalletKit_ListUnspent_0 = runtime.ForwardResponseMessage
forward_WalletKit_LeaseOutput_0 = runtime.ForwardResponseMessage
forward_WalletKit_ReleaseOutput_0 = runtime.ForwardResponseMessage
forward_WalletKit_DeriveNextKey_0 = runtime.ForwardResponseMessage
forward_WalletKit_DeriveKey_0 = runtime.ForwardResponseMessage
forward_WalletKit_NextAddr_0 = runtime.ForwardResponseMessage
forward_WalletKit_PublishTransaction_0 = runtime.ForwardResponseMessage
forward_WalletKit_SendOutputs_0 = runtime.ForwardResponseMessage
forward_WalletKit_EstimateFee_0 = runtime.ForwardResponseMessage
forward_WalletKit_PendingSweeps_0 = runtime.ForwardResponseMessage
forward_WalletKit_BumpFee_0 = runtime.ForwardResponseMessage
forward_WalletKit_ListSweeps_0 = runtime.ForwardResponseMessage
forward_WalletKit_LabelTransaction_0 = runtime.ForwardResponseMessage
)

575
lnrpc/walletrpc/walletkit.swagger.json

@ -4,17 +4,425 @@
"title": "walletrpc/walletkit.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/wallet/address/next": {
"post": {
"summary": "NextAddr returns the next unused address within the wallet.",
"operationId": "NextAddr",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcAddrResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/walletrpcAddrRequest"
}
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/bumpfee": {
"post": {
"summary": "BumpFee bumps the fee of an arbitrary input within a transaction. This RPC\ntakes a different approach than bitcoind's bumpfee command. lnd has a\ncentral batching engine in which inputs with similar fee rates are batched\ntogether to save on transaction fees. Due to this, we cannot rely on\nbumping the fee on a specific transaction, since transactions can change at\nany point with the addition of new inputs. The list of inputs that\ncurrently exist within lnd's central batching engine can be retrieved\nthrough the PendingSweeps RPC.",
"description": "When bumping the fee of an input that currently exists within lnd's central\nbatching engine, a higher fee transaction will be created that replaces the\nlower fee transaction through the Replace-By-Fee (RBF) policy. If it\n\nThis RPC also serves useful when wanting to perform a Child-Pays-For-Parent\n(CPFP), where the child transaction pays for its parent's fee. This can be\ndone by specifying an outpoint within the low fee transaction that is under\nthe control of the wallet.\n\nThe fee preference can be expressed either as a specific fee rate or a delta\nof blocks in which the output should be swept on-chain within. If a fee\npreference is not explicitly specified, then an error is returned.\n\nNote that this RPC currently doesn't perform any validation checks on the\nfee preference being provided. For now, the responsibility of ensuring that\nthe new fee preference is sufficient is delegated to the user.",
"operationId": "BumpFee",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcBumpFeeResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/walletrpcBumpFeeRequest"
}
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/estimatefee/{conf_target}": {
"get": {
"summary": "EstimateFee attempts to query the internal fee estimator of the wallet to\ndetermine the fee (in sat/kw) to attach to a transaction in order to\nachieve the confirmation target.",
"operationId": "EstimateFee",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcEstimateFeeResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "conf_target",
"description": "The number of confirmations to shoot for when estimating the fee.",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/key": {
"post": {
"summary": "DeriveKey attempts to derive an arbitrary key specified by the passed\nKeyLocator.",
"operationId": "DeriveKey",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/signrpcKeyDescriptor"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/signrpcKeyLocator"
}
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/key/next": {
"post": {
"summary": "DeriveNextKey attempts to derive the *next* key within the key family\n(account in BIP43) specified. This method should return the next external\nchild within this branch.",
"operationId": "DeriveNextKey",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/signrpcKeyDescriptor"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/walletrpcKeyReq"
}
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/send": {
"post": {
"summary": "SendOutputs is similar to the existing sendmany call in Bitcoind, and\nallows the caller to create a transaction that sends to several outputs at\nonce. This is ideal when wanting to batch create a set of transactions.",
"operationId": "SendOutputs",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcSendOutputsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/walletrpcSendOutputsRequest"
}
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/sweeps": {
"get": {
"summary": "ListSweeps returns a list of the sweep transactions our node has produced.\nNote that these sweeps may not be confirmed yet, as we record sweeps on\nbroadcast, not confirmation.",
"operationId": "ListSweeps",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcListSweepsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "verbose",
"description": "Retrieve the full sweep transaction details. If false, only the sweep txids\nwill be returned.",
"in": "query",
"required": false,
"type": "boolean",
"format": "boolean"
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/sweeps/pending": {
"get": {
"summary": "PendingSweeps returns lists of on-chain outputs that lnd is currently\nattempting to sweep within its central batching engine. Outputs with similar\nfee rates are batched together in order to sweep them within a single\ntransaction.",
"description": "NOTE: Some of the fields within PendingSweepsRequest are not guaranteed to\nremain supported. This is an advanced API that depends on the internals of\nthe UtxoSweeper, so things may change.",
"operationId": "PendingSweeps",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcPendingSweepsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/tx": {
"post": {
"summary": "PublishTransaction attempts to publish the passed transaction to the\nnetwork. Once this returns without an error, the wallet will continually\nattempt to re-broadcast the transaction on start up, until it enters the\nchain.",
"operationId": "PublishTransaction",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcPublishResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/walletrpcTransaction"
}
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/tx/label": {
"post": {
"summary": "LabelTransaction adds a label to a transaction. If the transaction already\nhas a label the call will fail unless the overwrite bool is set. This will\noverwrite the exiting transaction label. Labels must not be empty, and\ncannot exceed 500 characters.",
"operationId": "LabelTransaction",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcLabelTransactionResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/walletrpcLabelTransactionRequest"
}
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/utxos": {
"post": {
"summary": "ListUnspent returns a list of all utxos spendable by the wallet with a\nnumber of confirmations between the specified minimum and maximum.",
"operationId": "ListUnspent",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcListUnspentResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/utxos/lease": {
"post": {
"summary": "LeaseOutput locks an output to the given ID, preventing it from being\navailable for any future coin selection attempts. The absolute time of the\nlock's expiration is returned. The expiration of the lock can be extended by\nsuccessive invocations of this RPC. Outputs can be unlocked before their\nexpiration through `ReleaseOutput`.",
"operationId": "LeaseOutput",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcLeaseOutputResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/walletrpcLeaseOutputRequest"
}
}
],
"tags": [
"WalletKit"
]
}
},
"/v2/wallet/utxos/release": {
"post": {
"summary": "ReleaseOutput unlocks an output, allowing it to be available for coin\nselection if it remains unspent. The ID should match the one used to\noriginally lock the output.",
"operationId": "ReleaseOutput",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/walletrpcReleaseOutputResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/walletrpcReleaseOutputRequest"
}
}
],
"tags": [
"WalletKit"
]
}
}
},
"definitions": {
"ListSweepsResponseTransactionIDs": {
"type": "object",
@ -155,6 +563,39 @@
}
}
},
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"signrpcKeyDescriptor": {
"type": "object",
"properties": {
@ -199,6 +640,9 @@
}
}
},
"walletrpcAddrRequest": {
"type": "object"
},
"walletrpcAddrResponse": {
"type": "object",
"properties": {
@ -208,6 +652,30 @@
}
}
},
"walletrpcBumpFeeRequest": {
"type": "object",
"properties": {
"outpoint": {
"$ref": "#/definitions/lnrpcOutPoint",
"description": "The input we're attempting to bump the fee of."
},
"target_conf": {
"type": "integer",
"format": "int64",
"description": "The target number of blocks that the input should be spent within."
},
"sat_per_byte": {
"type": "integer",
"format": "int64",
"description": "The fee rate, expressed in sat/byte, that should be used to spend the input\nwith."
},
"force": {
"type": "boolean",
"format": "boolean",
"description": "Whether this input must be force-swept. This means that it is swept even\nif it has a negative yield."
}
}
},
"walletrpcBumpFeeResponse": {
"type": "object"
},
@ -221,9 +689,57 @@
}
}
},
"walletrpcKeyReq": {
"type": "object",
"properties": {
"key_finger_print": {
"type": "integer",
"format": "int32",
"description": "Is the key finger print of the root pubkey that this request is targeting.\nThis allows the WalletKit to possibly serve out keys for multiple HD chains\nvia public derivation."
},
"key_family": {
"type": "integer",
"format": "int32",
"description": "The target key family to derive a key from. In other contexts, this is\nknown as the \"account\"."
}
}
},
"walletrpcLabelTransactionRequest": {
"type": "object",
"properties": {
"txid": {
"type": "string",
"format": "byte",
"description": "The txid of the transaction to label."
},
"label": {
"type": "string",
"description": "The label to add to the transaction, limited to 500 characters."
},
"overwrite": {
"type": "boolean",
"format": "boolean",
"description": "Whether to overwrite the existing label, if it is present."
}
}
},
"walletrpcLabelTransactionResponse": {
"type": "object"
},
"walletrpcLeaseOutputRequest": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "byte",
"description": "An ID of 32 random bytes that must be unique for each distinct application\nusing this RPC which will be used to bound the output lease to."
},
"outpoint": {
"$ref": "#/definitions/lnrpcOutPoint",
"description": "The identifying outpoint of the output being leased."
}
}
},
"walletrpcLeaseOutputResponse": {
"type": "object",
"properties": {
@ -326,9 +842,44 @@
}
}
},
"walletrpcReleaseOutputRequest": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "byte",
"description": "The unique ID that was used to lock the output."
},
"outpoint": {
"$ref": "#/definitions/lnrpcOutPoint",
"description": "The identifying outpoint of the output being released."
}
}
},
"walletrpcReleaseOutputResponse": {
"type": "object"
},
"walletrpcSendOutputsRequest": {
"type": "object",
"properties": {
"sat_per_kw": {
"type": "string",
"format": "int64",
"description": "The number of satoshis per kilo weight that should be used when crafting\nthis transaction."
},
"outputs": {
"type": "array",
"items": {
"$ref": "#/definitions/signrpcTxOut"
},
"description": "A slice of the outputs that should be created in the transaction produced."
},
"label": {
"type": "string",
"description": "An optional label for the transaction, limited to 500 characters."
}
}
},
"walletrpcSendOutputsResponse": {
"type": "object",
"properties": {
@ -339,6 +890,20 @@
}
}
},
"walletrpcTransaction": {
"type": "object",
"properties": {
"tx_hex": {
"type": "string",
"format": "byte",
"description": "The raw serialized transaction."
},
"label": {
"type": "string",
"description": "An optional label to save with the transaction. Limited to 500 characters."
}
}
},
"walletrpcWitnessType": {
"type": "string",
"enum": [

92
lnrpc/walletunlocker.pb.go

@ -7,8 +7,9 @@ import (
context "context"
fmt "fmt"
proto "github.com/golang/protobuf/proto"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -463,45 +464,39 @@ func init() {
func init() { proto.RegisterFile("walletunlocker.proto", fileDescriptor_76e3ed10ed53e4fd) }
var fileDescriptor_76e3ed10ed53e4fd = []byte{
// 595 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdf, 0x4a, 0xdc, 0x4e,
0x14, 0x26, 0xbb, 0x3f, 0x7f, 0xc5, 0xe3, 0x36, 0xd1, 0x71, 0xb5, 0x31, 0x2a, 0xac, 0x81, 0xb2,
0x5b, 0x0b, 0x9b, 0xd6, 0xde, 0x79, 0x69, 0x29, 0xa5, 0x17, 0x82, 0xac, 0x88, 0x50, 0x0a, 0xdb,
0x98, 0x1c, 0x92, 0x60, 0x3c, 0x93, 0x4e, 0x66, 0x0d, 0xf6, 0xb2, 0x57, 0xbd, 0x2d, 0x7d, 0x8c,
0x3e, 0x4e, 0x5f, 0xa1, 0x0f, 0x52, 0x32, 0x33, 0x71, 0xd5, 0xdd, 0x85, 0xb6, 0x77, 0xe1, 0x3b,
0x7f, 0xbe, 0xf3, 0x7d, 0xe7, 0x64, 0xa0, 0x5b, 0x85, 0x79, 0x8e, 0x72, 0x42, 0x39, 0x8f, 0x2e,
0x51, 0x0c, 0x0b, 0xc1, 0x25, 0x67, 0x4b, 0x39, 0x89, 0x22, 0xf2, 0x76, 0x12, 0xce, 0x93, 0x1c,
0x83, 0xb0, 0xc8, 0x82, 0x90, 0x88, 0xcb, 0x50, 0x66, 0x9c, 0x4a, 0x9d, 0xe4, 0x2d, 0x8b, 0x22,
0xd2, 0x9f, 0xfe, 0x47, 0xb0, 0xdf, 0x22, 0x9d, 0x22, 0xc6, 0x23, 0xfc, 0x34, 0xc1, 0x52, 0xb2,
0xe7, 0xb0, 0x16, 0xe2, 0x67, 0xc4, 0x78, 0x5c, 0x84, 0x65, 0x59, 0xa4, 0x22, 0x2c, 0xd1, 0xb5,
0x7a, 0xd6, 0xa0, 0x33, 0x5a, 0xd5, 0x81, 0x93, 0x5b, 0x9c, 0xed, 0x41, 0xa7, 0xac, 0x53, 0x91,
0xa4, 0xe0, 0xc5, 0x8d, 0xdb, 0x52, 0x79, 0x2b, 0x35, 0xf6, 0x46, 0x43, 0x7e, 0x0e, 0xce, 0x2d,
0x43, 0x59, 0x70, 0x2a, 0x91, 0xbd, 0x80, 0x6e, 0x94, 0x15, 0x29, 0x8a, 0xb1, 0x2a, 0xbe, 0x22,
0xbc, 0xe2, 0x94, 0x45, 0xae, 0xd5, 0x6b, 0x0f, 0x96, 0x47, 0x4c, 0xc7, 0xea, 0x8a, 0x63, 0x13,
0x61, 0x7d, 0x70, 0x90, 0x34, 0x8e, 0xb1, 0xaa, 0x32, 0x54, 0xf6, 0x14, 0xae, 0x0b, 0xfc, 0xaf,
0x2d, 0x58, 0x7b, 0x47, 0x99, 0x3c, 0x57, 0xe6, 0x34, 0x9a, 0xfa, 0xe0, 0x68, 0xb7, 0x94, 0xa6,
0x8a, 0x8b, 0xd8, 0x28, 0xb2, 0x35, 0x7c, 0x62, 0xd0, 0x85, 0x93, 0xb5, 0x16, 0x4e, 0x36, 0xd7,
0xae, 0xf6, 0x02, 0xbb, 0xfa, 0xe0, 0x08, 0x8c, 0xf8, 0x35, 0x8a, 0x9b, 0x71, 0x95, 0x51, 0xcc,
0x2b, 0xf7, 0xbf, 0x9e, 0x35, 0x58, 0x1a, 0xd9, 0x0d, 0x7c, 0xae, 0x50, 0x76, 0x04, 0x4e, 0x94,
0x86, 0x44, 0x98, 0x8f, 0x2f, 0xc2, 0xe8, 0x72, 0x52, 0x94, 0xee, 0x52, 0xcf, 0x1a, 0xac, 0x1c,
0x6c, 0x0d, 0xd5, 0x82, 0x87, 0xaf, 0xd3, 0x90, 0x8e, 0x54, 0xe4, 0x94, 0xc2, 0xa2, 0x4c, 0xb9,
0x1c, 0xd9, 0xa6, 0x42, 0xc3, 0xa5, 0xdf, 0x05, 0x76, 0xd7, 0x09, 0xed, 0xbd, 0xff, 0xc3, 0x82,
0xf5, 0x33, 0x75, 0x33, 0xff, 0x68, 0xd1, 0x1c, 0x0d, 0xad, 0x3f, 0xd5, 0xd0, 0xfe, 0x5b, 0x0d,
0x9b, 0xd0, 0xbd, 0x3f, 0xac, 0x51, 0x81, 0xb0, 0x51, 0x57, 0x27, 0xd8, 0x8c, 0xd5, 0xc8, 0x78,
0x06, 0xab, 0xd1, 0x44, 0x08, 0xa4, 0x19, 0x1d, 0x8e, 0xc1, 0x6f, 0x85, 0xec, 0x41, 0x87, 0xb0,
0x9a, 0xa6, 0x99, 0xdb, 0x25, 0xac, 0x9a, 0x14, 0xdf, 0x85, 0xcd, 0x87, 0x34, 0x7a, 0x80, 0x83,
0x6f, 0x6d, 0xb0, 0xf5, 0x4c, 0x67, 0xe6, 0x07, 0x64, 0xc7, 0xf0, 0xc8, 0x1c, 0x3a, 0xdb, 0x30,
0x0a, 0xef, 0xff, 0x5a, 0xde, 0xe6, 0x43, 0xd8, 0xa8, 0x59, 0xff, 0xf2, 0xf3, 0xd7, 0xf7, 0xd6,
0x63, 0xb6, 0x12, 0x5c, 0xbf, 0x0c, 0x12, 0xa4, 0xfa, 0xf6, 0xd8, 0x07, 0x80, 0xe9, 0xfa, 0x98,
0x6b, 0x4a, 0x67, 0x6e, 0xdb, 0xdb, 0x9a, 0x13, 0x31, 0x7d, 0xb7, 0x54, 0xdf, 0x75, 0xdf, 0xae,
0xfb, 0x66, 0x94, 0x49, 0xbd, 0xca, 0x43, 0x6b, 0x9f, 0xc5, 0xd0, 0xb9, 0x6b, 0x2c, 0xf3, 0x4c,
0x97, 0x39, 0xa7, 0xe1, 0x6d, 0xcf, 0x8d, 0x19, 0x8e, 0x6d, 0xc5, 0xb1, 0xe1, 0xaf, 0xd6, 0x1c,
0xfa, 0x31, 0x9a, 0xb2, 0xe4, 0x60, 0xdf, 0xf7, 0x8f, 0xed, 0xdc, 0xd9, 0xfd, 0xcc, 0xf6, 0xbc,
0xdd, 0x05, 0x51, 0xc3, 0xb5, 0xab, 0xb8, 0x9e, 0xf8, 0xac, 0xe6, 0x8a, 0x54, 0x4e, 0xb3, 0xbd,
0x43, 0x6b, 0xff, 0xa8, 0xff, 0xfe, 0x69, 0x92, 0xc9, 0x74, 0x72, 0x31, 0x8c, 0xf8, 0x55, 0x90,
0x67, 0x49, 0x2a, 0x29, 0xa3, 0x84, 0x50, 0x56, 0x5c, 0x5c, 0x06, 0x39, 0xc5, 0x81, 0x6a, 0x7f,
0xf1, 0xbf, 0x7a, 0xfb, 0x5e, 0xfd, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xfa, 0x8d, 0x9e, 0x43,
0x05, 0x00, 0x00,
// 510 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4f, 0x6b, 0xdb, 0x4e,
0x10, 0x45, 0xf6, 0xcf, 0xbf, 0x92, 0x89, 0x91, 0x92, 0xad, 0x63, 0x14, 0xb5, 0x05, 0x47, 0x50,
0xec, 0x52, 0xb0, 0x4b, 0x7a, 0xe9, 0xb5, 0x2e, 0x25, 0xf4, 0x10, 0x08, 0x0e, 0x21, 0xd0, 0x8b,
0x2b, 0x4b, 0x83, 0x25, 0x2c, 0xcf, 0x6e, 0x77, 0xe5, 0x8a, 0xf4, 0x13, 0xf4, 0x8b, 0xf4, 0xd4,
0x2f, 0x59, 0xbc, 0xbb, 0xfe, 0x17, 0xcb, 0xd0, 0xf6, 0xfa, 0xde, 0xbc, 0xdd, 0x79, 0x6f, 0x66,
0x17, 0x5a, 0x65, 0x94, 0xe7, 0x58, 0x2c, 0x28, 0xe7, 0xf1, 0x0c, 0x65, 0x5f, 0x48, 0x5e, 0x70,
0xd6, 0xc8, 0x49, 0x8a, 0x38, 0x38, 0x92, 0x22, 0x36, 0x48, 0xf8, 0x05, 0xdc, 0x2b, 0xa4, 0x5b,
0xc4, 0x64, 0x84, 0x5f, 0x17, 0xa8, 0x0a, 0xf6, 0x1a, 0x4e, 0x23, 0xfc, 0x8e, 0x98, 0x8c, 0x45,
0xa4, 0x94, 0x48, 0x65, 0xa4, 0xd0, 0x77, 0x3a, 0x4e, 0xaf, 0x39, 0x3a, 0x31, 0xc4, 0xcd, 0x1a,
0x67, 0x17, 0xd0, 0x54, 0xcb, 0x52, 0xa4, 0x42, 0x72, 0xf1, 0xe0, 0xd7, 0x74, 0xdd, 0xf1, 0x12,
0xfb, 0x68, 0xa0, 0x30, 0x07, 0x6f, 0x7d, 0x83, 0x12, 0x9c, 0x14, 0xb2, 0x37, 0xd0, 0x8a, 0x33,
0x91, 0xa2, 0x1c, 0x6b, 0xf1, 0x9c, 0x70, 0xce, 0x29, 0x8b, 0x7d, 0xa7, 0x53, 0xef, 0x1d, 0x8d,
0x98, 0xe1, 0x96, 0x8a, 0x6b, 0xcb, 0xb0, 0x2e, 0x78, 0x48, 0x06, 0xc7, 0x44, 0xab, 0xec, 0x55,
0xee, 0x06, 0x5e, 0x0a, 0xc2, 0x1f, 0x35, 0x38, 0xfd, 0x44, 0x59, 0x71, 0xaf, 0xed, 0xaf, 0x3c,
0x75, 0xc1, 0x33, 0x79, 0x68, 0x4f, 0x25, 0x97, 0x89, 0x75, 0xe4, 0x1a, 0xf8, 0xc6, 0xa2, 0x07,
0x3b, 0xab, 0x1d, 0xec, 0xac, 0x32, 0xae, 0xfa, 0x81, 0xb8, 0xba, 0xe0, 0x49, 0x8c, 0xf9, 0x37,
0x94, 0x0f, 0xe3, 0x32, 0xa3, 0x84, 0x97, 0xfe, 0x7f, 0x1d, 0xa7, 0xd7, 0x18, 0xb9, 0x2b, 0xf8,
0x5e, 0xa3, 0x6c, 0x08, 0x5e, 0x9c, 0x46, 0x44, 0x98, 0x8f, 0x27, 0x51, 0x3c, 0x5b, 0x08, 0xe5,
0x37, 0x3a, 0x4e, 0xef, 0xf8, 0xf2, 0xbc, 0xaf, 0x47, 0xd8, 0xff, 0x90, 0x46, 0x34, 0xd4, 0xcc,
0x2d, 0x45, 0x42, 0xa5, 0xbc, 0x18, 0xb9, 0x56, 0x61, 0x60, 0x15, 0xb6, 0x80, 0x6d, 0x27, 0x61,
0xb2, 0x0f, 0x7f, 0x39, 0xf0, 0xf4, 0x4e, 0x6f, 0xc5, 0x3f, 0x46, 0x54, 0xe1, 0xa1, 0xf6, 0xa7,
0x1e, 0xea, 0x7f, 0xeb, 0xa1, 0x0d, 0xad, 0xdd, 0x66, 0xad, 0x0b, 0x84, 0xb3, 0xa5, 0x7a, 0x8a,
0xab, 0xb6, 0x56, 0x36, 0x5e, 0xc1, 0x49, 0xbc, 0x90, 0x12, 0x69, 0xcf, 0x87, 0x67, 0xf1, 0xb5,
0x91, 0x0b, 0x68, 0x12, 0x96, 0x9b, 0x32, 0xbb, 0xbb, 0x84, 0xe5, 0xaa, 0x24, 0xf4, 0xa1, 0xfd,
0xf8, 0x1a, 0xd3, 0xc0, 0xe5, 0xcf, 0x1a, 0xb8, 0xa6, 0xa7, 0x3b, 0xfb, 0xc4, 0xd8, 0x3b, 0x78,
0x62, 0x17, 0x9d, 0x9d, 0x59, 0x87, 0xbb, 0x4f, 0x2b, 0x68, 0x3f, 0x86, 0xed, 0x7b, 0x78, 0x0f,
0xb0, 0x99, 0x14, 0xf3, 0x6d, 0xd5, 0xde, 0x1a, 0x07, 0xe7, 0x15, 0x8c, 0x3d, 0xe2, 0x0a, 0x9a,
0xdb, 0x41, 0xb1, 0xc0, 0x96, 0x56, 0x8c, 0x3a, 0x78, 0x56, 0xc9, 0xd9, 0x83, 0xae, 0xc1, 0xdd,
0xb5, 0xcc, 0x9e, 0x6f, 0x8d, 0x6b, 0x2f, 0xf0, 0xe0, 0xc5, 0x01, 0xd6, 0x1c, 0x37, 0xec, 0x7e,
0x7e, 0x39, 0xcd, 0x8a, 0x74, 0x31, 0xe9, 0xc7, 0x7c, 0x3e, 0xc8, 0xb3, 0x69, 0x5a, 0x50, 0x46,
0x53, 0xc2, 0xa2, 0xe4, 0x72, 0x36, 0xc8, 0x29, 0x19, 0x68, 0xfd, 0xe4, 0x7f, 0xfd, 0x1f, 0xbd,
0xfd, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x94, 0x54, 0xe3, 0x28, 0xb9, 0x04, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -630,6 +625,23 @@ type WalletUnlockerServer interface {
ChangePassword(context.Context, *ChangePasswordRequest) (*ChangePasswordResponse, error)
}
// UnimplementedWalletUnlockerServer can be embedded to have forward compatible implementations.
type UnimplementedWalletUnlockerServer struct {
}
func (*UnimplementedWalletUnlockerServer) GenSeed(ctx context.Context, req *GenSeedRequest) (*GenSeedResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GenSeed not implemented")
}
func (*UnimplementedWalletUnlockerServer) InitWallet(ctx context.Context, req *InitWalletRequest) (*InitWalletResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method InitWallet not implemented")
}
func (*UnimplementedWalletUnlockerServer) UnlockWallet(ctx context.Context, req *UnlockWalletRequest) (*UnlockWalletResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method UnlockWallet not implemented")
}
func (*UnimplementedWalletUnlockerServer) ChangePassword(ctx context.Context, req *ChangePasswordRequest) (*ChangePasswordResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ChangePassword not implemented")
}
func RegisterWalletUnlockerServer(s *grpc.Server, srv WalletUnlockerServer) {
s.RegisterService(&_WalletUnlocker_serviceDesc, srv)
}

168
lnrpc/walletunlocker.pb.gw.go

@ -13,6 +13,7 @@ import (
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
@ -22,11 +23,13 @@ import (
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
var (
filter_WalletUnlocker_GenSeed_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
@ -36,7 +39,10 @@ func request_WalletUnlocker_GenSeed_0(ctx context.Context, marshaler runtime.Mar
var protoReq GenSeedRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WalletUnlocker_GenSeed_0); err != nil {
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WalletUnlocker_GenSeed_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -45,6 +51,19 @@ func request_WalletUnlocker_GenSeed_0(ctx context.Context, marshaler runtime.Mar
}
func local_request_WalletUnlocker_GenSeed_0(ctx context.Context, marshaler runtime.Marshaler, server WalletUnlockerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GenSeedRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WalletUnlocker_GenSeed_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GenSeed(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletUnlocker_InitWallet_0(ctx context.Context, marshaler runtime.Marshaler, client WalletUnlockerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq InitWalletRequest
var metadata runtime.ServerMetadata
@ -62,6 +81,23 @@ func request_WalletUnlocker_InitWallet_0(ctx context.Context, marshaler runtime.
}
func local_request_WalletUnlocker_InitWallet_0(ctx context.Context, marshaler runtime.Marshaler, server WalletUnlockerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq InitWalletRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.InitWallet(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletUnlocker_UnlockWallet_0(ctx context.Context, marshaler runtime.Marshaler, client WalletUnlockerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UnlockWalletRequest
var metadata runtime.ServerMetadata
@ -79,6 +115,23 @@ func request_WalletUnlocker_UnlockWallet_0(ctx context.Context, marshaler runtim
}
func local_request_WalletUnlocker_UnlockWallet_0(ctx context.Context, marshaler runtime.Marshaler, server WalletUnlockerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UnlockWalletRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.UnlockWallet(ctx, &protoReq)
return msg, metadata, err
}
func request_WalletUnlocker_ChangePassword_0(ctx context.Context, marshaler runtime.Marshaler, client WalletUnlockerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChangePasswordRequest
var metadata runtime.ServerMetadata
@ -96,6 +149,111 @@ func request_WalletUnlocker_ChangePassword_0(ctx context.Context, marshaler runt
}
func local_request_WalletUnlocker_ChangePassword_0(ctx context.Context, marshaler runtime.Marshaler, server WalletUnlockerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ChangePasswordRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ChangePassword(ctx, &protoReq)
return msg, metadata, err
}
// RegisterWalletUnlockerHandlerServer registers the http handlers for service WalletUnlocker to "mux".
// UnaryRPC :call WalletUnlockerServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterWalletUnlockerHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WalletUnlockerServer) error {
mux.Handle("GET", pattern_WalletUnlocker_GenSeed_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletUnlocker_GenSeed_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletUnlocker_GenSeed_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletUnlocker_InitWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletUnlocker_InitWallet_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletUnlocker_InitWallet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletUnlocker_UnlockWallet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletUnlocker_UnlockWallet_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletUnlocker_UnlockWallet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WalletUnlocker_ChangePassword_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WalletUnlocker_ChangePassword_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WalletUnlocker_ChangePassword_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterWalletUnlockerHandlerFromEndpoint is same as RegisterWalletUnlockerHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterWalletUnlockerHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
@ -218,13 +376,13 @@ func RegisterWalletUnlockerHandlerClient(ctx context.Context, mux *runtime.Serve
}
var (
pattern_WalletUnlocker_GenSeed_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "genseed"}, ""))
pattern_WalletUnlocker_GenSeed_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "genseed"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletUnlocker_InitWallet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "initwallet"}, ""))
pattern_WalletUnlocker_InitWallet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "initwallet"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletUnlocker_UnlockWallet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "unlockwallet"}, ""))
pattern_WalletUnlocker_UnlockWallet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "unlockwallet"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WalletUnlocker_ChangePassword_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "changepassword"}, ""))
pattern_WalletUnlocker_ChangePassword_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "changepassword"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (

29
lnrpc/walletunlocker.proto

@ -1,6 +1,5 @@
syntax = "proto3";
import "google/api/annotations.proto";
import "rpc.proto";
package lnrpc;
@ -38,11 +37,7 @@ service WalletUnlocker {
method should be used to commit the newly generated seed, and create the
wallet.
*/
rpc GenSeed (GenSeedRequest) returns (GenSeedResponse) {
option (google.api.http) = {
get: "/v1/genseed"
};
}
rpc GenSeed (GenSeedRequest) returns (GenSeedResponse);
/*
InitWallet is used when lnd is starting up for the first time to fully
@ -58,35 +53,19 @@ service WalletUnlocker {
seed, then present it to the user. Once it has been verified by the user,
the seed can be fed into this RPC in order to commit the new wallet.
*/
rpc InitWallet (InitWalletRequest) returns (InitWalletResponse) {
option (google.api.http) = {
post: "/v1/initwallet"
body: "*"
};
}
rpc InitWallet (InitWalletRequest) returns (InitWalletResponse);
/* lncli: `unlock`
UnlockWallet is used at startup of lnd to provide a password to unlock
the wallet database.
*/
rpc UnlockWallet (UnlockWalletRequest) returns (UnlockWalletResponse) {
option (google.api.http) = {
post: "/v1/unlockwallet"
body: "*"
};
}
rpc UnlockWallet (UnlockWalletRequest) returns (UnlockWalletResponse);
/* lncli: `changepassword`
ChangePassword changes the password of the encrypted wallet. This will
automatically unlock the wallet database if successful.
*/
rpc ChangePassword (ChangePasswordRequest)
returns (ChangePasswordResponse) {
option (google.api.http) = {
post: "/v1/changepassword"
body: "*"
};
}
rpc ChangePassword (ChangePasswordRequest) returns (ChangePasswordResponse);
}
message GenSeedRequest {

61
lnrpc/walletunlocker.swagger.json

@ -4,10 +4,6 @@
"title": "walletunlocker.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
@ -25,6 +21,12 @@
"schema": {
"$ref": "#/definitions/lnrpcChangePasswordResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -53,6 +55,12 @@
"schema": {
"$ref": "#/definitions/lnrpcGenSeedResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -89,6 +97,12 @@
"schema": {
"$ref": "#/definitions/lnrpcInitWalletResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -116,6 +130,12 @@
"schema": {
"$ref": "#/definitions/lnrpcUnlockWalletResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
@ -300,6 +320,39 @@
},
"lnrpcUnlockWalletResponse": {
"type": "object"
},
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
}
}
}

10
lnrpc/watchtowerrpc/watchtower.pb.go

@ -8,6 +8,8 @@ import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -181,6 +183,14 @@ type WatchtowerServer interface {
GetInfo(context.Context, *GetInfoRequest) (*GetInfoResponse, error)
}
// UnimplementedWatchtowerServer can be embedded to have forward compatible implementations.
type UnimplementedWatchtowerServer struct {
}
func (*UnimplementedWatchtowerServer) GetInfo(ctx context.Context, req *GetInfoRequest) (*GetInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetInfo not implemented")
}
func RegisterWatchtowerServer(s *grpc.Server, srv WatchtowerServer) {
s.RegisterService(&_Watchtower_serviceDesc, srv)
}

147
lnrpc/watchtowerrpc/watchtower.pb.gw.go

@ -0,0 +1,147 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: watchtowerrpc/watchtower.proto
/*
Package watchtowerrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package watchtowerrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_Watchtower_GetInfo_0(ctx context.Context, marshaler runtime.Marshaler, client WatchtowerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetInfoRequest
var metadata runtime.ServerMetadata
msg, err := client.GetInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Watchtower_GetInfo_0(ctx context.Context, marshaler runtime.Marshaler, server WatchtowerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetInfoRequest
var metadata runtime.ServerMetadata
msg, err := server.GetInfo(ctx, &protoReq)
return msg, metadata, err
}
// RegisterWatchtowerHandlerServer registers the http handlers for service Watchtower to "mux".
// UnaryRPC :call WatchtowerServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterWatchtowerHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WatchtowerServer) error {
mux.Handle("GET", pattern_Watchtower_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Watchtower_GetInfo_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Watchtower_GetInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterWatchtowerHandlerFromEndpoint is same as RegisterWatchtowerHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterWatchtowerHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterWatchtowerHandler(ctx, mux, conn)
}
// RegisterWatchtowerHandler registers the http handlers for service Watchtower to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterWatchtowerHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterWatchtowerHandlerClient(ctx, mux, NewWatchtowerClient(conn))
}
// RegisterWatchtowerHandlerClient registers the http handlers for service Watchtower
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "WatchtowerClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WatchtowerClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "WatchtowerClient" to call the correct interceptors.
func RegisterWatchtowerHandlerClient(ctx context.Context, mux *runtime.ServeMux, client WatchtowerClient) error {
mux.Handle("GET", pattern_Watchtower_GetInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Watchtower_GetInfo_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Watchtower_GetInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_Watchtower_GetInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "watchtower", "server"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_Watchtower_GetInfo_0 = runtime.ForwardResponseMessage
)

63
lnrpc/watchtowerrpc/watchtower.swagger.json

@ -4,18 +4,71 @@
"title": "watchtowerrpc/watchtower.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/watchtower/server": {
"get": {
"summary": "lncli: tower info\nGetInfo returns general information concerning the companion watchtower\nincluding its public key and URIs where the server is currently\nlistening for clients.",
"operationId": "GetInfo",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/watchtowerrpcGetInfoResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"Watchtower"
]
}
}
},
"definitions": {
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"watchtowerrpcGetInfoResponse": {
"type": "object",
"properties": {

25
lnrpc/wtclientrpc/wtclient.pb.go

@ -8,6 +8,8 @@ import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
@ -845,6 +847,29 @@ type WatchtowerClientServer interface {
Policy(context.Context, *PolicyRequest) (*PolicyResponse, error)
}
// UnimplementedWatchtowerClientServer can be embedded to have forward compatible implementations.
type UnimplementedWatchtowerClientServer struct {
}
func (*UnimplementedWatchtowerClientServer) AddTower(ctx context.Context, req *AddTowerRequest) (*AddTowerResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method AddTower not implemented")
}
func (*UnimplementedWatchtowerClientServer) RemoveTower(ctx context.Context, req *RemoveTowerRequest) (*RemoveTowerResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method RemoveTower not implemented")
}
func (*UnimplementedWatchtowerClientServer) ListTowers(ctx context.Context, req *ListTowersRequest) (*ListTowersResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListTowers not implemented")
}
func (*UnimplementedWatchtowerClientServer) GetTowerInfo(ctx context.Context, req *GetTowerInfoRequest) (*Tower, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetTowerInfo not implemented")
}
func (*UnimplementedWatchtowerClientServer) Stats(ctx context.Context, req *StatsRequest) (*StatsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Stats not implemented")
}
func (*UnimplementedWatchtowerClientServer) Policy(ctx context.Context, req *PolicyRequest) (*PolicyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Policy not implemented")
}
func RegisterWatchtowerClientServer(s *grpc.Server, srv WatchtowerClientServer) {
s.RegisterService(&_WatchtowerClient_serviceDesc, srv)
}

590
lnrpc/wtclientrpc/wtclient.pb.gw.go

@ -0,0 +1,590 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: wtclientrpc/wtclient.proto
/*
Package wtclientrpc is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package wtclientrpc
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_WatchtowerClient_AddTower_0(ctx context.Context, marshaler runtime.Marshaler, client WatchtowerClientClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AddTowerRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.AddTower(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WatchtowerClient_AddTower_0(ctx context.Context, marshaler runtime.Marshaler, server WatchtowerClientServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AddTowerRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.AddTower(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_WatchtowerClient_RemoveTower_0 = &utilities.DoubleArray{Encoding: map[string]int{"pubkey": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
func request_WatchtowerClient_RemoveTower_0(ctx context.Context, marshaler runtime.Marshaler, client WatchtowerClientClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RemoveTowerRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["pubkey"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pubkey")
}
protoReq.Pubkey, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pubkey", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WatchtowerClient_RemoveTower_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.RemoveTower(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WatchtowerClient_RemoveTower_0(ctx context.Context, marshaler runtime.Marshaler, server WatchtowerClientServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RemoveTowerRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["pubkey"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pubkey")
}
protoReq.Pubkey, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pubkey", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WatchtowerClient_RemoveTower_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.RemoveTower(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_WatchtowerClient_ListTowers_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_WatchtowerClient_ListTowers_0(ctx context.Context, marshaler runtime.Marshaler, client WatchtowerClientClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListTowersRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WatchtowerClient_ListTowers_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListTowers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WatchtowerClient_ListTowers_0(ctx context.Context, marshaler runtime.Marshaler, server WatchtowerClientServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListTowersRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WatchtowerClient_ListTowers_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListTowers(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_WatchtowerClient_GetTowerInfo_0 = &utilities.DoubleArray{Encoding: map[string]int{"pubkey": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
func request_WatchtowerClient_GetTowerInfo_0(ctx context.Context, marshaler runtime.Marshaler, client WatchtowerClientClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetTowerInfoRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["pubkey"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pubkey")
}
protoReq.Pubkey, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pubkey", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WatchtowerClient_GetTowerInfo_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.GetTowerInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WatchtowerClient_GetTowerInfo_0(ctx context.Context, marshaler runtime.Marshaler, server WatchtowerClientServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetTowerInfoRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["pubkey"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "pubkey")
}
protoReq.Pubkey, err = runtime.Bytes(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "pubkey", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WatchtowerClient_GetTowerInfo_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetTowerInfo(ctx, &protoReq)
return msg, metadata, err
}
func request_WatchtowerClient_Stats_0(ctx context.Context, marshaler runtime.Marshaler, client WatchtowerClientClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq StatsRequest
var metadata runtime.ServerMetadata
msg, err := client.Stats(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WatchtowerClient_Stats_0(ctx context.Context, marshaler runtime.Marshaler, server WatchtowerClientServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq StatsRequest
var metadata runtime.ServerMetadata
msg, err := server.Stats(ctx, &protoReq)
return msg, metadata, err
}
func request_WatchtowerClient_Policy_0(ctx context.Context, marshaler runtime.Marshaler, client WatchtowerClientClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PolicyRequest
var metadata runtime.ServerMetadata
msg, err := client.Policy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WatchtowerClient_Policy_0(ctx context.Context, marshaler runtime.Marshaler, server WatchtowerClientServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PolicyRequest
var metadata runtime.ServerMetadata
msg, err := server.Policy(ctx, &protoReq)
return msg, metadata, err
}
// RegisterWatchtowerClientHandlerServer registers the http handlers for service WatchtowerClient to "mux".
// UnaryRPC :call WatchtowerClientServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterWatchtowerClientHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WatchtowerClientServer) error {
mux.Handle("POST", pattern_WatchtowerClient_AddTower_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WatchtowerClient_AddTower_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_AddTower_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_WatchtowerClient_RemoveTower_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WatchtowerClient_RemoveTower_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_RemoveTower_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WatchtowerClient_ListTowers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WatchtowerClient_ListTowers_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_ListTowers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WatchtowerClient_GetTowerInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WatchtowerClient_GetTowerInfo_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_GetTowerInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WatchtowerClient_Stats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WatchtowerClient_Stats_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_Stats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WatchtowerClient_Policy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WatchtowerClient_Policy_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_Policy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterWatchtowerClientHandlerFromEndpoint is same as RegisterWatchtowerClientHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterWatchtowerClientHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterWatchtowerClientHandler(ctx, mux, conn)
}
// RegisterWatchtowerClientHandler registers the http handlers for service WatchtowerClient to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterWatchtowerClientHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterWatchtowerClientHandlerClient(ctx, mux, NewWatchtowerClientClient(conn))
}
// RegisterWatchtowerClientHandlerClient registers the http handlers for service WatchtowerClient
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "WatchtowerClientClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WatchtowerClientClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "WatchtowerClientClient" to call the correct interceptors.
func RegisterWatchtowerClientHandlerClient(ctx context.Context, mux *runtime.ServeMux, client WatchtowerClientClient) error {
mux.Handle("POST", pattern_WatchtowerClient_AddTower_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WatchtowerClient_AddTower_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_AddTower_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_WatchtowerClient_RemoveTower_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WatchtowerClient_RemoveTower_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_RemoveTower_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WatchtowerClient_ListTowers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WatchtowerClient_ListTowers_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_ListTowers_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WatchtowerClient_GetTowerInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WatchtowerClient_GetTowerInfo_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_GetTowerInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WatchtowerClient_Stats_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WatchtowerClient_Stats_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_Stats_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WatchtowerClient_Policy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WatchtowerClient_Policy_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WatchtowerClient_Policy_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_WatchtowerClient_AddTower_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "watchtower", "client"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WatchtowerClient_RemoveTower_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v2", "watchtower", "client", "pubkey"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WatchtowerClient_ListTowers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v2", "watchtower", "client"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WatchtowerClient_GetTowerInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v2", "watchtower", "client", "info", "pubkey"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WatchtowerClient_Stats_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "watchtower", "client", "stats"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WatchtowerClient_Policy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "watchtower", "client", "policy"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_WatchtowerClient_AddTower_0 = runtime.ForwardResponseMessage
forward_WatchtowerClient_RemoveTower_0 = runtime.ForwardResponseMessage
forward_WatchtowerClient_ListTowers_0 = runtime.ForwardResponseMessage
forward_WatchtowerClient_GetTowerInfo_0 = runtime.ForwardResponseMessage
forward_WatchtowerClient_Stats_0 = runtime.ForwardResponseMessage
forward_WatchtowerClient_Policy_0 = runtime.ForwardResponseMessage
)

245
lnrpc/wtclientrpc/wtclient.swagger.json

@ -4,18 +4,253 @@
"title": "wtclientrpc/wtclient.proto",
"version": "version not set"
},
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {},
"paths": {
"/v2/watchtower/client": {
"get": {
"summary": "ListTowers returns the list of watchtowers registered with the client.",
"operationId": "ListTowers",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/wtclientrpcListTowersResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "include_sessions",
"description": "Whether we should include sessions with the watchtower in the response.",
"in": "query",
"required": false,
"type": "boolean",
"format": "boolean"
}
],
"tags": [
"WatchtowerClient"
]
},
"post": {
"summary": "AddTower adds a new watchtower reachable at the given address and\nconsiders it for new sessions. If the watchtower already exists, then\nany new addresses included will be considered when dialing it for\nsession negotiations and backups.",
"operationId": "AddTower",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/wtclientrpcAddTowerResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/wtclientrpcAddTowerRequest"
}
}
],
"tags": [
"WatchtowerClient"
]
}
},
"/v2/watchtower/client/info/{pubkey}": {
"get": {
"summary": "GetTowerInfo retrieves information for a registered watchtower.",
"operationId": "GetTowerInfo",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/wtclientrpcTower"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "pubkey",
"description": "The identifying public key of the watchtower to retrieve information for.",
"in": "path",
"required": true,
"type": "string",
"format": "byte"
},
{
"name": "include_sessions",
"description": "Whether we should include sessions with the watchtower in the response.",
"in": "query",
"required": false,
"type": "boolean",
"format": "boolean"
}
],
"tags": [
"WatchtowerClient"
]
}
},
"/v2/watchtower/client/policy": {
"get": {
"summary": "Policy returns the active watchtower client policy configuration.",
"operationId": "Policy",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/wtclientrpcPolicyResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"WatchtowerClient"
]
}
},
"/v2/watchtower/client/stats": {
"get": {
"summary": "Stats returns the in-memory statistics of the client since startup.",
"operationId": "Stats",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/wtclientrpcStatsResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"tags": [
"WatchtowerClient"
]
}
},
"/v2/watchtower/client/{pubkey}": {
"delete": {
"summary": "RemoveTower removes a watchtower from being considered for future session\nnegotiations and from being used for any subsequent backups until it's added\nagain. If an address is provided, then this RPC only serves as a way of\nremoving the address from the watchtower instead.",
"operationId": "RemoveTower",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/wtclientrpcRemoveTowerResponse"
}
},
"default": {
"description": "An unexpected error response",
"schema": {
"$ref": "#/definitions/runtimeError"
}
}
},
"parameters": [
{
"name": "pubkey",
"description": "The identifying public key of the watchtower to remove.",
"in": "path",
"required": true,
"type": "string",
"format": "byte"
},
{
"name": "address",
"description": "If set, then the record for this address will be removed, indicating that is\nis stale. Otherwise, the watchtower will no longer be used for future\nsession negotiations and backups.",
"in": "query",
"required": false,
"type": "string"
}
],
"tags": [
"WatchtowerClient"
]
}
}
},
"definitions": {
"protobufAny": {
"type": "object",
"properties": {
"type_url": {
"type": "string"
},
"value": {
"type": "string",
"format": "byte"
}
}
},
"runtimeError": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/definitions/protobufAny"
}
}
}
},
"wtclientrpcAddTowerRequest": {
"type": "object",
"properties": {
"pubkey": {
"type": "string",
"format": "byte",
"description": "The identifying public key of the watchtower to add."
},
"address": {
"type": "string",
"description": "A network address the watchtower is reachable over."
}
}
},
"wtclientrpcAddTowerResponse": {
"type": "object"
},

Loading…
Cancel
Save