From 8702ea03cbd634189925ddc37231ee92093f20ec Mon Sep 17 00:00:00 2001 From: rsercano Date: Sun, 8 Nov 2020 23:06:09 +0300 Subject: [PATCH] feat: new grpc call for subscribring alerts such as low balance (#864) --- docs/api.md | 41 ++ lib/cli/commands/subscribealerts.ts | 62 ++ lib/constants/enums.ts | 4 + lib/grpc/GrpcService.ts | 18 + lib/proto/annotations_grpc_pb.js | 2 +- lib/proto/xudp2p_grpc_pb.js | 2 +- lib/proto/xudrpc.swagger.json | 49 ++ lib/proto/xudrpc_grpc_pb.d.ts | 15 + lib/proto/xudrpc_grpc_pb.js | 34 ++ lib/proto/xudrpc_pb.d.ts | 47 ++ lib/proto/xudrpc_pb.js | 295 ++++++++++ lib/service/Service.ts | 11 +- proto/xudrpc.proto | 20 + test/simulation/xudrpc/xudrpc.pb.go | 844 +++++++++++++++++----------- 14 files changed, 1105 insertions(+), 339 deletions(-) create mode 100644 lib/cli/commands/subscribealerts.ts diff --git a/docs/api.md b/docs/api.md index d5ecc2be7..293663c1d 100644 --- a/docs/api.md +++ b/docs/api.md @@ -7,6 +7,7 @@ - [AddCurrencyResponse](#xudrpc.AddCurrencyResponse) - [AddPairRequest](#xudrpc.AddPairRequest) - [AddPairResponse](#xudrpc.AddPairResponse) + - [Alert](#xudrpc.Alert) - [Balance](#xudrpc.Balance) - [BanRequest](#xudrpc.BanRequest) - [BanResponse](#xudrpc.BanResponse) @@ -71,6 +72,7 @@ - [SetLogLevelResponse](#xudrpc.SetLogLevelResponse) - [ShutdownRequest](#xudrpc.ShutdownRequest) - [ShutdownResponse](#xudrpc.ShutdownResponse) + - [SubscribeAlertsRequest](#xudrpc.SubscribeAlertsRequest) - [SubscribeOrdersRequest](#xudrpc.SubscribeOrdersRequest) - [SubscribeSwapsAcceptedRequest](#xudrpc.SubscribeSwapsAcceptedRequest) - [SubscribeSwapsRequest](#xudrpc.SubscribeSwapsRequest) @@ -91,6 +93,7 @@ - [WithdrawRequest](#xudrpc.WithdrawRequest) - [WithdrawResponse](#xudrpc.WithdrawResponse) + - [Alert.AlertType](#xudrpc.Alert.AlertType) - [Currency.SwapClient](#xudrpc.Currency.SwapClient) - [ListOrdersRequest.Owner](#xudrpc.ListOrdersRequest.Owner) - [LogLevel](#xudrpc.LogLevel) @@ -147,6 +150,22 @@ + + +### Alert + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| type | [Alert.AlertType](#xudrpc.Alert.AlertType) | | | +| message | [string](#string) | | The message of the alert. | + + + + + + ### Balance @@ -1143,6 +1162,16 @@ + + +### SubscribeAlertsRequest + + + + + + + ### SubscribeOrdersRequest @@ -1465,6 +1494,17 @@ + + +### Alert.AlertType +The type of the alert. + +| Name | Number | Description | +| ---- | ------ | ----------- | +| NO_BALANCE | 0 | | + + + ### Currency.SwapClient @@ -1569,6 +1609,7 @@ The primary service for interacting with a running xud node. | SetLogLevel | [SetLogLevelRequest](#xudrpc.SetLogLevelRequest) | [SetLogLevelResponse](#xudrpc.SetLogLevelResponse) | Set the logging level. shell: xucli loglevel <level> | | Shutdown | [ShutdownRequest](#xudrpc.ShutdownRequest) | [ShutdownResponse](#xudrpc.ShutdownResponse) | Begin gracefully shutting down xud. shell: xucli shutdown | | SubscribeOrders | [SubscribeOrdersRequest](#xudrpc.SubscribeOrdersRequest) | [OrderUpdate](#xudrpc.OrderUpdate) stream | Subscribes to orders being added to and removed from the order book. This call allows the client to maintain an up-to-date view of the order book. For example, an exchange that wants to show its users a real time view of the orders available to them would subscribe to this streaming call to be alerted as new orders are added and expired orders are removed. | +| SubscribeAlerts | [SubscribeAlertsRequest](#xudrpc.SubscribeAlertsRequest) | [Alert](#xudrpc.Alert) stream | Subscribes to alerts such as low balance. | | SubscribeSwapFailures | [SubscribeSwapsRequest](#xudrpc.SubscribeSwapsRequest) | [SwapFailure](#xudrpc.SwapFailure) stream | Subscribes to failed swaps. By default, only swaps that are initiated by a remote peer are transmitted unless a flag is set to include swaps initiated by the local node. This call allows the client to get real-time notifications when swap attempts are failing. It can be used for status monitoring, debugging, and testing purposes. | | SubscribeSwaps | [SubscribeSwapsRequest](#xudrpc.SubscribeSwapsRequest) | [SwapSuccess](#xudrpc.SwapSuccess) stream | Subscribes to completed swaps. By default, only swaps that are initiated by a remote peer are transmitted unless a flag is set to include swaps initiated by the local node. This call allows the client to get real-time notifications when its orders are filled by a peer. It can be used for tracking order executions, updating balances, and informing a trader when one of their orders is settled through the Exchange Union network. | | SubscribeSwapsAccepted | [SubscribeSwapsAcceptedRequest](#xudrpc.SubscribeSwapsAcceptedRequest) | [SwapAccepted](#xudrpc.SwapAccepted) stream | Subscribes to accepted swaps. This stream emits a message when the local xud node accepts a swap request from a peer, but before the swap has actually succeeded. | diff --git a/lib/cli/commands/subscribealerts.ts b/lib/cli/commands/subscribealerts.ts new file mode 100644 index 000000000..efdebc1a0 --- /dev/null +++ b/lib/cli/commands/subscribealerts.ts @@ -0,0 +1,62 @@ +import { ServiceError, status } from 'grpc'; +import { Arguments } from 'yargs'; +import { XudClient } from '../../proto/xudrpc_grpc_pb'; +import * as xudrpc from '../../proto/xudrpc_pb'; +import { setTimeoutPromise } from '../../utils/utils'; +import { loadXudClient } from '../command'; + +export const command = 'subscribealerts'; + +export const describe = 'subscribe alerts such as low balance'; + +export const builder = {}; + +export const handler = async (argv: Arguments) => { + await ensureConnection(argv, true); +}; + +let client: XudClient; + +const ensureConnection = async (argv: Arguments, printError?: boolean) => { + if (!client) { + client = await loadXudClient(argv); + } + client.waitForReady(Date.now() + 3000, (error: Error | null) => { + if (error) { + if (error.message === 'Failed to connect before the deadline') { + console.error(`could not connect to xud at ${argv.rpchost}:${argv.rpcport}, is xud running?`); + process.exit(1); + } + + if (printError) console.error(`${error.name}: ${error.message}`); + setTimeout(ensureConnection.bind(undefined, argv, printError), 3000); + } else { + console.log('Successfully connected, subscribing for alerts'); + subscribeAlerts(argv); + } + }); +}; + +const subscribeAlerts = (argv: Arguments) => { + const request = new xudrpc.SubscribeAlertsRequest(); + const alertsSubscription = client.subscribeAlerts(request); + + alertsSubscription.on('data', (alert: xudrpc.Alert) => { + console.log(`${alert.getType()}: ${alert.getMessage()}`); + }); + alertsSubscription.on('end', reconnect.bind(undefined, argv)); + alertsSubscription.on('error', async (err: ServiceError) => { + if (err.code === status.UNIMPLEMENTED) { + console.error("xud is locked, run 'xucli unlock', 'xucli create', or 'xucli restore' then try again"); + process.exit(1); + } + console.warn(`Unexpected error occured: ${err.message}, reconnecting in 1 second`); + await setTimeoutPromise(1000); + await ensureConnection(argv); + }); +}; + +const reconnect = async (argv: Arguments) => { + console.log('Stream has closed, trying to reconnect'); + await ensureConnection(argv, false); +}; diff --git a/lib/constants/enums.ts b/lib/constants/enums.ts index e86a12080..2cc07fb79 100644 --- a/lib/constants/enums.ts +++ b/lib/constants/enums.ts @@ -180,3 +180,7 @@ export enum DisconnectionReason { AuthFailureInvalidSignature = 12, WireProtocolErr = 13, } + +export enum AlertType { + NoBalance = 0, +} diff --git a/lib/grpc/GrpcService.ts b/lib/grpc/GrpcService.ts index ea20c455b..75762fafa 100644 --- a/lib/grpc/GrpcService.ts +++ b/lib/grpc/GrpcService.ts @@ -870,6 +870,24 @@ class GrpcService { } } + /* + * See [[Service.subscribeAlerts]] + */ + public subscribeAlerts: grpc.handleServerStreamingCall = (call) => { + if (!this.isReady(this.service, call)) { + return; + } + + const cancelled$ = getCancelled$(call); + this.service.subscribeAlerts((type, message) => { + const alert = new xudrpc.Alert(); + alert.setType(type as number); + alert.setMessage(message); + call.write(alert); + }, + cancelled$); + } + /* * See [[Service.subscribeOrders]] */ diff --git a/lib/proto/annotations_grpc_pb.js b/lib/proto/annotations_grpc_pb.js index 97b3a2461..51b4d6959 100644 --- a/lib/proto/annotations_grpc_pb.js +++ b/lib/proto/annotations_grpc_pb.js @@ -1 +1 @@ -// GENERATED CODE -- NO SERVICES IN PROTO \ No newline at end of file +// GENERATED CODE -- NO SERVICES IN PROTO diff --git a/lib/proto/xudp2p_grpc_pb.js b/lib/proto/xudp2p_grpc_pb.js index 97b3a2461..51b4d6959 100644 --- a/lib/proto/xudp2p_grpc_pb.js +++ b/lib/proto/xudp2p_grpc_pb.js @@ -1 +1 @@ -// GENERATED CODE -- NO SERVICES IN PROTO \ No newline at end of file +// GENERATED CODE -- NO SERVICES IN PROTO diff --git a/lib/proto/xudrpc.swagger.json b/lib/proto/xudrpc.swagger.json index 6acc4205c..ad33ed49e 100644 --- a/lib/proto/xudrpc.swagger.json +++ b/lib/proto/xudrpc.swagger.json @@ -602,6 +602,23 @@ ] } }, + "/v1/subscribealerts": { + "get": { + "summary": "Subscribes to alerts such as low balance.", + "operationId": "SubscribeAlerts", + "responses": { + "200": { + "description": "A successful response.(streaming responses)", + "schema": { + "$ref": "#/x-stream-definitions/xudrpcAlert" + } + } + }, + "tags": [ + "Xud" + ] + } + }, "/v1/subscribeorders": { "get": { "summary": "Subscribes to orders being added to and removed from the order book. This call allows the client\nto maintain an up-to-date view of the order book. For example, an exchange that wants to show\nits users a real time view of the orders available to them would subscribe to this streaming\ncall to be alerted as new orders are added and expired orders are removed.", @@ -836,6 +853,14 @@ } }, "definitions": { + "AlertAlertType": { + "type": "string", + "enum": [ + "NO_BALANCE" + ], + "default": "NO_BALANCE", + "description": "The type of the alert." + }, "CurrencySwapClient": { "type": "string", "enum": [ @@ -909,6 +934,18 @@ "xudrpcAddPairResponse": { "type": "object" }, + "xudrpcAlert": { + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/AlertAlertType" + }, + "message": { + "type": "string", + "description": "The message of the alert." + } + } + }, "xudrpcBalance": { "type": "object", "properties": { @@ -2038,6 +2075,18 @@ } }, "x-stream-definitions": { + "xudrpcAlert": { + "type": "object", + "properties": { + "result": { + "$ref": "#/definitions/xudrpcAlert" + }, + "error": { + "$ref": "#/definitions/runtimeStreamError" + } + }, + "title": "Stream result of xudrpcAlert" + }, "xudrpcOrderUpdate": { "type": "object", "properties": { diff --git a/lib/proto/xudrpc_grpc_pb.d.ts b/lib/proto/xudrpc_grpc_pb.d.ts index 4a888d1b2..728b430fe 100644 --- a/lib/proto/xudrpc_grpc_pb.d.ts +++ b/lib/proto/xudrpc_grpc_pb.d.ts @@ -100,6 +100,7 @@ interface IXudService extends grpc.ServiceDefinition; responseDeserialize: grpc.deserialize; } +interface IXudService_ISubscribeAlerts extends grpc.MethodDefinition { + path: string; // "/xudrpc.Xud/SubscribeAlerts" + requestStream: boolean; // false + responseStream: boolean; // true + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} interface IXudService_ISubscribeSwapFailures extends grpc.MethodDefinition { path: string; // "/xudrpc.Xud/SubscribeSwapFailures" requestStream: boolean; // false @@ -426,6 +436,7 @@ export interface IXudServer { setLogLevel: grpc.handleUnaryCall; shutdown: grpc.handleUnaryCall; subscribeOrders: grpc.handleServerStreamingCall; + subscribeAlerts: grpc.handleServerStreamingCall; subscribeSwapFailures: grpc.handleServerStreamingCall; subscribeSwaps: grpc.handleServerStreamingCall; subscribeSwapsAccepted: grpc.handleServerStreamingCall; @@ -509,6 +520,8 @@ export interface IXudClient { shutdown(request: xudrpc_pb.ShutdownRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: xudrpc_pb.ShutdownResponse) => void): grpc.ClientUnaryCall; subscribeOrders(request: xudrpc_pb.SubscribeOrdersRequest, options?: Partial): grpc.ClientReadableStream; subscribeOrders(request: xudrpc_pb.SubscribeOrdersRequest, metadata?: grpc.Metadata, options?: Partial): grpc.ClientReadableStream; + subscribeAlerts(request: xudrpc_pb.SubscribeAlertsRequest, options?: Partial): grpc.ClientReadableStream; + subscribeAlerts(request: xudrpc_pb.SubscribeAlertsRequest, metadata?: grpc.Metadata, options?: Partial): grpc.ClientReadableStream; subscribeSwapFailures(request: xudrpc_pb.SubscribeSwapsRequest, options?: Partial): grpc.ClientReadableStream; subscribeSwapFailures(request: xudrpc_pb.SubscribeSwapsRequest, metadata?: grpc.Metadata, options?: Partial): grpc.ClientReadableStream; subscribeSwaps(request: xudrpc_pb.SubscribeSwapsRequest, options?: Partial): grpc.ClientReadableStream; @@ -604,6 +617,8 @@ export class XudClient extends grpc.Client implements IXudClient { public shutdown(request: xudrpc_pb.ShutdownRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: xudrpc_pb.ShutdownResponse) => void): grpc.ClientUnaryCall; public subscribeOrders(request: xudrpc_pb.SubscribeOrdersRequest, options?: Partial): grpc.ClientReadableStream; public subscribeOrders(request: xudrpc_pb.SubscribeOrdersRequest, metadata?: grpc.Metadata, options?: Partial): grpc.ClientReadableStream; + public subscribeAlerts(request: xudrpc_pb.SubscribeAlertsRequest, options?: Partial): grpc.ClientReadableStream; + public subscribeAlerts(request: xudrpc_pb.SubscribeAlertsRequest, metadata?: grpc.Metadata, options?: Partial): grpc.ClientReadableStream; public subscribeSwapFailures(request: xudrpc_pb.SubscribeSwapsRequest, options?: Partial): grpc.ClientReadableStream; public subscribeSwapFailures(request: xudrpc_pb.SubscribeSwapsRequest, metadata?: grpc.Metadata, options?: Partial): grpc.ClientReadableStream; public subscribeSwaps(request: xudrpc_pb.SubscribeSwapsRequest, options?: Partial): grpc.ClientReadableStream; diff --git a/lib/proto/xudrpc_grpc_pb.js b/lib/proto/xudrpc_grpc_pb.js index d7d8d3997..7c04fe4fb 100644 --- a/lib/proto/xudrpc_grpc_pb.js +++ b/lib/proto/xudrpc_grpc_pb.js @@ -59,6 +59,17 @@ function deserialize_xudrpc_AddPairResponse(buffer_arg) { return xudrpc_pb.AddPairResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_xudrpc_Alert(arg) { + if (!(arg instanceof xudrpc_pb.Alert)) { + throw new Error('Expected argument of type xudrpc.Alert'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_xudrpc_Alert(buffer_arg) { + return xudrpc_pb.Alert.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_xudrpc_BanRequest(arg) { if (!(arg instanceof xudrpc_pb.BanRequest)) { throw new Error('Expected argument of type xudrpc.BanRequest'); @@ -587,6 +598,17 @@ function deserialize_xudrpc_ShutdownResponse(buffer_arg) { return xudrpc_pb.ShutdownResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_xudrpc_SubscribeAlertsRequest(arg) { + if (!(arg instanceof xudrpc_pb.SubscribeAlertsRequest)) { + throw new Error('Expected argument of type xudrpc.SubscribeAlertsRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_xudrpc_SubscribeAlertsRequest(buffer_arg) { + return xudrpc_pb.SubscribeAlertsRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_xudrpc_SubscribeOrdersRequest(arg) { if (!(arg instanceof xudrpc_pb.SubscribeOrdersRequest)) { throw new Error('Expected argument of type xudrpc.SubscribeOrdersRequest'); @@ -1157,6 +1179,18 @@ var XudService = exports.XudService = { responseSerialize: serialize_xudrpc_OrderUpdate, responseDeserialize: deserialize_xudrpc_OrderUpdate, }, + // Subscribes to alerts such as low balance. + subscribeAlerts: { + path: '/xudrpc.Xud/SubscribeAlerts', + requestStream: false, + responseStream: true, + requestType: xudrpc_pb.SubscribeAlertsRequest, + responseType: xudrpc_pb.Alert, + requestSerialize: serialize_xudrpc_SubscribeAlertsRequest, + requestDeserialize: deserialize_xudrpc_SubscribeAlertsRequest, + responseSerialize: serialize_xudrpc_Alert, + responseDeserialize: deserialize_xudrpc_Alert, + }, // Subscribes to failed swaps. By default, only swaps that are initiated by a remote peer are // transmitted unless a flag is set to include swaps initiated by the local node. This call allows // the client to get real-time notifications when swap attempts are failing. It can be used for diff --git a/lib/proto/xudrpc_pb.d.ts b/lib/proto/xudrpc_pb.d.ts index 880e1960d..a90672c4c 100644 --- a/lib/proto/xudrpc_pb.d.ts +++ b/lib/proto/xudrpc_pb.d.ts @@ -65,6 +65,36 @@ export namespace AddPairResponse { } } +export class Alert extends jspb.Message { + getType(): Alert.AlertType; + setType(value: Alert.AlertType): void; + + getMessage(): string; + setMessage(value: string): void; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): Alert.AsObject; + static toObject(includeInstance: boolean, msg: Alert): Alert.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: Alert, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): Alert; + static deserializeBinaryFromReader(message: Alert, reader: jspb.BinaryReader): Alert; +} + +export namespace Alert { + export type AsObject = { + type: Alert.AlertType, + message: string, + } + + export enum AlertType { + NO_BALANCE = 0, + } + +} + export class Balance extends jspb.Message { getTotalBalance(): number; setTotalBalance(value: number): void; @@ -1767,6 +1797,23 @@ export namespace SubscribeOrdersRequest { } } +export class SubscribeAlertsRequest extends jspb.Message { + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): SubscribeAlertsRequest.AsObject; + static toObject(includeInstance: boolean, msg: SubscribeAlertsRequest): SubscribeAlertsRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: SubscribeAlertsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): SubscribeAlertsRequest; + static deserializeBinaryFromReader(message: SubscribeAlertsRequest, reader: jspb.BinaryReader): SubscribeAlertsRequest; +} + +export namespace SubscribeAlertsRequest { + export type AsObject = { + } +} + export class SubscribeSwapsAcceptedRequest extends jspb.Message { serializeBinary(): Uint8Array; diff --git a/lib/proto/xudrpc_pb.js b/lib/proto/xudrpc_pb.js index f2f59ddde..a183c9e01 100644 --- a/lib/proto/xudrpc_pb.js +++ b/lib/proto/xudrpc_pb.js @@ -16,6 +16,8 @@ goog.object.extend(proto, annotations_pb); goog.exportSymbol('proto.xudrpc.AddCurrencyResponse', null, global); goog.exportSymbol('proto.xudrpc.AddPairRequest', null, global); goog.exportSymbol('proto.xudrpc.AddPairResponse', null, global); +goog.exportSymbol('proto.xudrpc.Alert', null, global); +goog.exportSymbol('proto.xudrpc.Alert.AlertType', null, global); goog.exportSymbol('proto.xudrpc.Balance', null, global); goog.exportSymbol('proto.xudrpc.BanRequest', null, global); goog.exportSymbol('proto.xudrpc.BanResponse', null, global); @@ -80,6 +82,7 @@ goog.exportSymbol('proto.xudrpc.SetLogLevelRequest', null, global); goog.exportSymbol('proto.xudrpc.SetLogLevelResponse', null, global); goog.exportSymbol('proto.xudrpc.ShutdownRequest', null, global); goog.exportSymbol('proto.xudrpc.ShutdownResponse', null, global); +goog.exportSymbol('proto.xudrpc.SubscribeAlertsRequest', null, global); goog.exportSymbol('proto.xudrpc.SubscribeOrdersRequest', null, global); goog.exportSymbol('proto.xudrpc.SubscribeSwapsAcceptedRequest', null, global); goog.exportSymbol('proto.xudrpc.SubscribeSwapsRequest', null, global); @@ -500,6 +503,182 @@ proto.xudrpc.AddPairResponse.serializeBinaryToWriter = function(message, writer) +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.xudrpc.Alert = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.xudrpc.Alert, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.xudrpc.Alert.displayName = 'proto.xudrpc.Alert'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.xudrpc.Alert.prototype.toObject = function(opt_includeInstance) { + return proto.xudrpc.Alert.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.xudrpc.Alert} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.xudrpc.Alert.toObject = function(includeInstance, msg) { + var f, obj = { + type: jspb.Message.getFieldWithDefault(msg, 1, 0), + message: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.xudrpc.Alert} + */ +proto.xudrpc.Alert.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.xudrpc.Alert; + return proto.xudrpc.Alert.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.xudrpc.Alert} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.xudrpc.Alert} + */ +proto.xudrpc.Alert.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!proto.xudrpc.Alert.AlertType} */ (reader.readEnum()); + msg.setType(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.xudrpc.Alert.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.xudrpc.Alert.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.xudrpc.Alert} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.xudrpc.Alert.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getType(); + if (f !== 0.0) { + writer.writeEnum( + 1, + f + ); + } + f = message.getMessage(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * @enum {number} + */ +proto.xudrpc.Alert.AlertType = { + NO_BALANCE: 0 +}; + +/** + * optional AlertType type = 1; + * @return {!proto.xudrpc.Alert.AlertType} + */ +proto.xudrpc.Alert.prototype.getType = function() { + return /** @type {!proto.xudrpc.Alert.AlertType} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** @param {!proto.xudrpc.Alert.AlertType} value */ +proto.xudrpc.Alert.prototype.setType = function(value) { + jspb.Message.setProto3EnumField(this, 1, value); +}; + + +/** + * optional string message = 2; + * @return {string} + */ +proto.xudrpc.Alert.prototype.getMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** @param {string} value */ +proto.xudrpc.Alert.prototype.setMessage = function(value) { + jspb.Message.setProto3StringField(this, 2, value); +}; + + + /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -11888,6 +12067,122 @@ proto.xudrpc.SubscribeOrdersRequest.prototype.setExisting = function(value) { +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.xudrpc.SubscribeAlertsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.xudrpc.SubscribeAlertsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.xudrpc.SubscribeAlertsRequest.displayName = 'proto.xudrpc.SubscribeAlertsRequest'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.xudrpc.SubscribeAlertsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.xudrpc.SubscribeAlertsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.xudrpc.SubscribeAlertsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.xudrpc.SubscribeAlertsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.xudrpc.SubscribeAlertsRequest} + */ +proto.xudrpc.SubscribeAlertsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.xudrpc.SubscribeAlertsRequest; + return proto.xudrpc.SubscribeAlertsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.xudrpc.SubscribeAlertsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.xudrpc.SubscribeAlertsRequest} + */ +proto.xudrpc.SubscribeAlertsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.xudrpc.SubscribeAlertsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.xudrpc.SubscribeAlertsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.xudrpc.SubscribeAlertsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.xudrpc.SubscribeAlertsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a diff --git a/lib/service/Service.ts b/lib/service/Service.ts index 1b09ad706..cfc02e6ee 100644 --- a/lib/service/Service.ts +++ b/lib/service/Service.ts @@ -2,7 +2,7 @@ import { EventEmitter } from 'events'; import { fromEvent, merge, Observable } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { ProvidePreimageEvent, TransferReceivedEvent } from '../connextclient/types'; -import { OrderSide, Owner, SwapClientType, SwapRole } from '../constants/enums'; +import { OrderSide, Owner, SwapClientType, SwapRole, AlertType } from '../constants/enums'; import { OrderAttributes, TradeInstance } from '../db/types'; import Logger, { Level, LevelPriority } from '../Logger'; import OrderBook from '../orderbook/OrderBook'; @@ -693,6 +693,15 @@ class Service extends EventEmitter { const nodePubKey = isNodePubKey(args.nodeIdentifier) ? args.nodeIdentifier : this.pool.resolveAlias(args.nodeIdentifier); return this.pool.discoverNodes(nodePubKey); } + /* + * Subscribe to alerts. + */ + public subscribeAlerts = ( + callback: (type: AlertType, message: string) => void, + cancelled$: Observable, + ) => { + // TODO merge incoming alert events such as; low balance event from swap clients + } /* * Subscribe to orders being added to the order book. diff --git a/proto/xudrpc.proto b/proto/xudrpc.proto index cc18bba6a..6d422581b 100644 --- a/proto/xudrpc.proto +++ b/proto/xudrpc.proto @@ -279,6 +279,13 @@ service Xud { }; } + /* Subscribes to alerts such as low balance. */ + rpc SubscribeAlerts(SubscribeAlertsRequest) returns (stream Alert) { + option (google.api.http) = { + get: "/v1/subscribealerts" + }; + } + /* Subscribes to failed swaps. By default, only swaps that are initiated by a remote peer are * transmitted unless a flag is set to include swaps initiated by the local node. This call allows * the client to get real-time notifications when swap attempts are failing. It can be used for @@ -376,6 +383,16 @@ message AddPairRequest { } message AddPairResponse {} +message Alert { + // The type of the alert. + enum AlertType { + NO_BALANCE = 0; + } + AlertType type = 1 [json_name = "type"]; + // The message of the alert. + string message = 2 [json_name = "message"]; +} + message Balance { // Total balance denominated in satoshis. uint64 total_balance = 1 [json_name = "total_balance"]; @@ -818,6 +835,9 @@ message SubscribeOrdersRequest { bool existing = 1 [json_name = "existing"]; } +message SubscribeAlertsRequest { +} + message SubscribeSwapsAcceptedRequest { } message SubscribeSwapsRequest { diff --git a/test/simulation/xudrpc/xudrpc.pb.go b/test/simulation/xudrpc/xudrpc.pb.go index c2964e9d8..5602dcb29 100644 --- a/test/simulation/xudrpc/xudrpc.pb.go +++ b/test/simulation/xudrpc/xudrpc.pb.go @@ -119,6 +119,29 @@ func (LogLevel) EnumDescriptor() ([]byte, []int) { return fileDescriptor_6960a02cc0a63cf6, []int{2} } +// The type of the alert. +type Alert_AlertType int32 + +const ( + Alert_NO_BALANCE Alert_AlertType = 0 +) + +var Alert_AlertType_name = map[int32]string{ + 0: "NO_BALANCE", +} + +var Alert_AlertType_value = map[string]int32{ + "NO_BALANCE": 0, +} + +func (x Alert_AlertType) String() string { + return proto.EnumName(Alert_AlertType_name, int32(x)) +} + +func (Alert_AlertType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_6960a02cc0a63cf6, []int{3, 0} +} + type Currency_SwapClient int32 const ( @@ -141,7 +164,7 @@ func (x Currency_SwapClient) String() string { } func (Currency_SwapClient) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{14, 0} + return fileDescriptor_6960a02cc0a63cf6, []int{15, 0} } type ListOrdersRequest_Owner int32 @@ -169,7 +192,7 @@ func (x ListOrdersRequest_Owner) String() string { } func (ListOrdersRequest_Owner) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{28, 0} + return fileDescriptor_6960a02cc0a63cf6, []int{29, 0} } type AddCurrencyResponse struct { @@ -283,6 +306,54 @@ func (m *AddPairResponse) XXX_DiscardUnknown() { var xxx_messageInfo_AddPairResponse proto.InternalMessageInfo +type Alert struct { + Type Alert_AlertType `protobuf:"varint,1,opt,name=type,proto3,enum=xudrpc.Alert_AlertType" json:"type,omitempty"` + // The message of the alert. + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Alert) Reset() { *m = Alert{} } +func (m *Alert) String() string { return proto.CompactTextString(m) } +func (*Alert) ProtoMessage() {} +func (*Alert) Descriptor() ([]byte, []int) { + return fileDescriptor_6960a02cc0a63cf6, []int{3} +} + +func (m *Alert) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Alert.Unmarshal(m, b) +} +func (m *Alert) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Alert.Marshal(b, m, deterministic) +} +func (m *Alert) XXX_Merge(src proto.Message) { + xxx_messageInfo_Alert.Merge(m, src) +} +func (m *Alert) XXX_Size() int { + return xxx_messageInfo_Alert.Size(m) +} +func (m *Alert) XXX_DiscardUnknown() { + xxx_messageInfo_Alert.DiscardUnknown(m) +} + +var xxx_messageInfo_Alert proto.InternalMessageInfo + +func (m *Alert) GetType() Alert_AlertType { + if m != nil { + return m.Type + } + return Alert_NO_BALANCE +} + +func (m *Alert) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + type Balance struct { // Total balance denominated in satoshis. TotalBalance uint64 `protobuf:"varint,1,opt,name=total_balance,proto3" json:"total_balance,omitempty"` @@ -305,7 +376,7 @@ func (m *Balance) Reset() { *m = Balance{} } func (m *Balance) String() string { return proto.CompactTextString(m) } func (*Balance) ProtoMessage() {} func (*Balance) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{3} + return fileDescriptor_6960a02cc0a63cf6, []int{4} } func (m *Balance) XXX_Unmarshal(b []byte) error { @@ -380,7 +451,7 @@ func (m *BanRequest) Reset() { *m = BanRequest{} } func (m *BanRequest) String() string { return proto.CompactTextString(m) } func (*BanRequest) ProtoMessage() {} func (*BanRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{4} + return fileDescriptor_6960a02cc0a63cf6, []int{5} } func (m *BanRequest) XXX_Unmarshal(b []byte) error { @@ -418,7 +489,7 @@ func (m *BanResponse) Reset() { *m = BanResponse{} } func (m *BanResponse) String() string { return proto.CompactTextString(m) } func (*BanResponse) ProtoMessage() {} func (*BanResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{5} + return fileDescriptor_6960a02cc0a63cf6, []int{6} } func (m *BanResponse) XXX_Unmarshal(b []byte) error { @@ -453,7 +524,7 @@ func (m *Chain) Reset() { *m = Chain{} } func (m *Chain) String() string { return proto.CompactTextString(m) } func (*Chain) ProtoMessage() {} func (*Chain) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{6} + return fileDescriptor_6960a02cc0a63cf6, []int{7} } func (m *Chain) XXX_Unmarshal(b []byte) error { @@ -506,7 +577,7 @@ func (m *Channels) Reset() { *m = Channels{} } func (m *Channels) String() string { return proto.CompactTextString(m) } func (*Channels) ProtoMessage() {} func (*Channels) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{7} + return fileDescriptor_6960a02cc0a63cf6, []int{8} } func (m *Channels) XXX_Unmarshal(b []byte) error { @@ -580,7 +651,7 @@ func (m *CloseChannelRequest) Reset() { *m = CloseChannelRequest{} } func (m *CloseChannelRequest) String() string { return proto.CompactTextString(m) } func (*CloseChannelRequest) ProtoMessage() {} func (*CloseChannelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{8} + return fileDescriptor_6960a02cc0a63cf6, []int{9} } func (m *CloseChannelRequest) XXX_Unmarshal(b []byte) error { @@ -655,7 +726,7 @@ func (m *CloseChannelResponse) Reset() { *m = CloseChannelResponse{} } func (m *CloseChannelResponse) String() string { return proto.CompactTextString(m) } func (*CloseChannelResponse) ProtoMessage() {} func (*CloseChannelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{9} + return fileDescriptor_6960a02cc0a63cf6, []int{10} } func (m *CloseChannelResponse) XXX_Unmarshal(b []byte) error { @@ -695,7 +766,7 @@ func (m *ConnectRequest) Reset() { *m = ConnectRequest{} } func (m *ConnectRequest) String() string { return proto.CompactTextString(m) } func (*ConnectRequest) ProtoMessage() {} func (*ConnectRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{10} + return fileDescriptor_6960a02cc0a63cf6, []int{11} } func (m *ConnectRequest) XXX_Unmarshal(b []byte) error { @@ -733,7 +804,7 @@ func (m *ConnectResponse) Reset() { *m = ConnectResponse{} } func (m *ConnectResponse) String() string { return proto.CompactTextString(m) } func (*ConnectResponse) ProtoMessage() {} func (*ConnectResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{11} + return fileDescriptor_6960a02cc0a63cf6, []int{12} } func (m *ConnectResponse) XXX_Unmarshal(b []byte) error { @@ -767,7 +838,7 @@ func (m *CreateNodeRequest) Reset() { *m = CreateNodeRequest{} } func (m *CreateNodeRequest) String() string { return proto.CompactTextString(m) } func (*CreateNodeRequest) ProtoMessage() {} func (*CreateNodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{12} + return fileDescriptor_6960a02cc0a63cf6, []int{13} } func (m *CreateNodeRequest) XXX_Unmarshal(b []byte) error { @@ -811,7 +882,7 @@ func (m *CreateNodeResponse) Reset() { *m = CreateNodeResponse{} } func (m *CreateNodeResponse) String() string { return proto.CompactTextString(m) } func (*CreateNodeResponse) ProtoMessage() {} func (*CreateNodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{13} + return fileDescriptor_6960a02cc0a63cf6, []int{14} } func (m *CreateNodeResponse) XXX_Unmarshal(b []byte) error { @@ -875,7 +946,7 @@ func (m *Currency) Reset() { *m = Currency{} } func (m *Currency) String() string { return proto.CompactTextString(m) } func (*Currency) ProtoMessage() {} func (*Currency) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{14} + return fileDescriptor_6960a02cc0a63cf6, []int{15} } func (m *Currency) XXX_Unmarshal(b []byte) error { @@ -936,7 +1007,7 @@ func (m *DepositRequest) Reset() { *m = DepositRequest{} } func (m *DepositRequest) String() string { return proto.CompactTextString(m) } func (*DepositRequest) ProtoMessage() {} func (*DepositRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{15} + return fileDescriptor_6960a02cc0a63cf6, []int{16} } func (m *DepositRequest) XXX_Unmarshal(b []byte) error { @@ -976,7 +1047,7 @@ func (m *DepositResponse) Reset() { *m = DepositResponse{} } func (m *DepositResponse) String() string { return proto.CompactTextString(m) } func (*DepositResponse) ProtoMessage() {} func (*DepositResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{16} + return fileDescriptor_6960a02cc0a63cf6, []int{17} } func (m *DepositResponse) XXX_Unmarshal(b []byte) error { @@ -1016,7 +1087,7 @@ func (m *DiscoverNodesRequest) Reset() { *m = DiscoverNodesRequest{} } func (m *DiscoverNodesRequest) String() string { return proto.CompactTextString(m) } func (*DiscoverNodesRequest) ProtoMessage() {} func (*DiscoverNodesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{17} + return fileDescriptor_6960a02cc0a63cf6, []int{18} } func (m *DiscoverNodesRequest) XXX_Unmarshal(b []byte) error { @@ -1055,7 +1126,7 @@ func (m *DiscoverNodesResponse) Reset() { *m = DiscoverNodesResponse{} } func (m *DiscoverNodesResponse) String() string { return proto.CompactTextString(m) } func (*DiscoverNodesResponse) ProtoMessage() {} func (*DiscoverNodesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{18} + return fileDescriptor_6960a02cc0a63cf6, []int{19} } func (m *DiscoverNodesResponse) XXX_Unmarshal(b []byte) error { @@ -1101,7 +1172,7 @@ func (m *ExecuteSwapRequest) Reset() { *m = ExecuteSwapRequest{} } func (m *ExecuteSwapRequest) String() string { return proto.CompactTextString(m) } func (*ExecuteSwapRequest) ProtoMessage() {} func (*ExecuteSwapRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{19} + return fileDescriptor_6960a02cc0a63cf6, []int{20} } func (m *ExecuteSwapRequest) XXX_Unmarshal(b []byte) error { @@ -1163,7 +1234,7 @@ func (m *GetBalanceRequest) Reset() { *m = GetBalanceRequest{} } func (m *GetBalanceRequest) String() string { return proto.CompactTextString(m) } func (*GetBalanceRequest) ProtoMessage() {} func (*GetBalanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{20} + return fileDescriptor_6960a02cc0a63cf6, []int{21} } func (m *GetBalanceRequest) XXX_Unmarshal(b []byte) error { @@ -1203,7 +1274,7 @@ func (m *GetBalanceResponse) Reset() { *m = GetBalanceResponse{} } func (m *GetBalanceResponse) String() string { return proto.CompactTextString(m) } func (*GetBalanceResponse) ProtoMessage() {} func (*GetBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{21} + return fileDescriptor_6960a02cc0a63cf6, []int{22} } func (m *GetBalanceResponse) XXX_Unmarshal(b []byte) error { @@ -1241,7 +1312,7 @@ func (m *GetInfoRequest) Reset() { *m = GetInfoRequest{} } func (m *GetInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetInfoRequest) ProtoMessage() {} func (*GetInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{22} + return fileDescriptor_6960a02cc0a63cf6, []int{23} } func (m *GetInfoRequest) XXX_Unmarshal(b []byte) error { @@ -1291,7 +1362,7 @@ func (m *GetInfoResponse) Reset() { *m = GetInfoResponse{} } func (m *GetInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetInfoResponse) ProtoMessage() {} func (*GetInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{23} + return fileDescriptor_6960a02cc0a63cf6, []int{24} } func (m *GetInfoResponse) XXX_Unmarshal(b []byte) error { @@ -1401,7 +1472,7 @@ func (m *GetNodeInfoRequest) Reset() { *m = GetNodeInfoRequest{} } func (m *GetNodeInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetNodeInfoRequest) ProtoMessage() {} func (*GetNodeInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{24} + return fileDescriptor_6960a02cc0a63cf6, []int{25} } func (m *GetNodeInfoRequest) XXX_Unmarshal(b []byte) error { @@ -1444,7 +1515,7 @@ func (m *GetNodeInfoResponse) Reset() { *m = GetNodeInfoResponse{} } func (m *GetNodeInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetNodeInfoResponse) ProtoMessage() {} func (*GetNodeInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{25} + return fileDescriptor_6960a02cc0a63cf6, []int{26} } func (m *GetNodeInfoResponse) XXX_Unmarshal(b []byte) error { @@ -1489,7 +1560,7 @@ func (m *ListCurrenciesRequest) Reset() { *m = ListCurrenciesRequest{} } func (m *ListCurrenciesRequest) String() string { return proto.CompactTextString(m) } func (*ListCurrenciesRequest) ProtoMessage() {} func (*ListCurrenciesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{26} + return fileDescriptor_6960a02cc0a63cf6, []int{27} } func (m *ListCurrenciesRequest) XXX_Unmarshal(b []byte) error { @@ -1522,7 +1593,7 @@ func (m *ListCurrenciesResponse) Reset() { *m = ListCurrenciesResponse{} func (m *ListCurrenciesResponse) String() string { return proto.CompactTextString(m) } func (*ListCurrenciesResponse) ProtoMessage() {} func (*ListCurrenciesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{27} + return fileDescriptor_6960a02cc0a63cf6, []int{28} } func (m *ListCurrenciesResponse) XXX_Unmarshal(b []byte) error { @@ -1568,7 +1639,7 @@ func (m *ListOrdersRequest) Reset() { *m = ListOrdersRequest{} } func (m *ListOrdersRequest) String() string { return proto.CompactTextString(m) } func (*ListOrdersRequest) ProtoMessage() {} func (*ListOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{28} + return fileDescriptor_6960a02cc0a63cf6, []int{29} } func (m *ListOrdersRequest) XXX_Unmarshal(b []byte) error { @@ -1629,7 +1700,7 @@ func (m *ListOrdersResponse) Reset() { *m = ListOrdersResponse{} } func (m *ListOrdersResponse) String() string { return proto.CompactTextString(m) } func (*ListOrdersResponse) ProtoMessage() {} func (*ListOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{29} + return fileDescriptor_6960a02cc0a63cf6, []int{30} } func (m *ListOrdersResponse) XXX_Unmarshal(b []byte) error { @@ -1667,7 +1738,7 @@ func (m *ListPairsRequest) Reset() { *m = ListPairsRequest{} } func (m *ListPairsRequest) String() string { return proto.CompactTextString(m) } func (*ListPairsRequest) ProtoMessage() {} func (*ListPairsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{30} + return fileDescriptor_6960a02cc0a63cf6, []int{31} } func (m *ListPairsRequest) XXX_Unmarshal(b []byte) error { @@ -1700,7 +1771,7 @@ func (m *ListPairsResponse) Reset() { *m = ListPairsResponse{} } func (m *ListPairsResponse) String() string { return proto.CompactTextString(m) } func (*ListPairsResponse) ProtoMessage() {} func (*ListPairsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{31} + return fileDescriptor_6960a02cc0a63cf6, []int{32} } func (m *ListPairsResponse) XXX_Unmarshal(b []byte) error { @@ -1738,7 +1809,7 @@ func (m *ListPeersRequest) Reset() { *m = ListPeersRequest{} } func (m *ListPeersRequest) String() string { return proto.CompactTextString(m) } func (*ListPeersRequest) ProtoMessage() {} func (*ListPeersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{32} + return fileDescriptor_6960a02cc0a63cf6, []int{33} } func (m *ListPeersRequest) XXX_Unmarshal(b []byte) error { @@ -1771,7 +1842,7 @@ func (m *ListPeersResponse) Reset() { *m = ListPeersResponse{} } func (m *ListPeersResponse) String() string { return proto.CompactTextString(m) } func (*ListPeersResponse) ProtoMessage() {} func (*ListPeersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{33} + return fileDescriptor_6960a02cc0a63cf6, []int{34} } func (m *ListPeersResponse) XXX_Unmarshal(b []byte) error { @@ -1816,7 +1887,7 @@ func (m *LndInfo) Reset() { *m = LndInfo{} } func (m *LndInfo) String() string { return proto.CompactTextString(m) } func (*LndInfo) ProtoMessage() {} func (*LndInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{34} + return fileDescriptor_6960a02cc0a63cf6, []int{35} } func (m *LndInfo) XXX_Unmarshal(b []byte) error { @@ -1900,7 +1971,7 @@ func (m *NodeIdentifier) Reset() { *m = NodeIdentifier{} } func (m *NodeIdentifier) String() string { return proto.CompactTextString(m) } func (*NodeIdentifier) ProtoMessage() {} func (*NodeIdentifier) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{35} + return fileDescriptor_6960a02cc0a63cf6, []int{36} } func (m *NodeIdentifier) XXX_Unmarshal(b []byte) error { @@ -1955,7 +2026,7 @@ func (m *OpenChannelRequest) Reset() { *m = OpenChannelRequest{} } func (m *OpenChannelRequest) String() string { return proto.CompactTextString(m) } func (*OpenChannelRequest) ProtoMessage() {} func (*OpenChannelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{36} + return fileDescriptor_6960a02cc0a63cf6, []int{37} } func (m *OpenChannelRequest) XXX_Unmarshal(b []byte) error { @@ -2023,7 +2094,7 @@ func (m *OpenChannelResponse) Reset() { *m = OpenChannelResponse{} } func (m *OpenChannelResponse) String() string { return proto.CompactTextString(m) } func (*OpenChannelResponse) ProtoMessage() {} func (*OpenChannelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{37} + return fileDescriptor_6960a02cc0a63cf6, []int{38} } func (m *OpenChannelResponse) XXX_Unmarshal(b []byte) error { @@ -2081,7 +2152,7 @@ func (m *Order) Reset() { *m = Order{} } func (m *Order) String() string { return proto.CompactTextString(m) } func (*Order) ProtoMessage() {} func (*Order) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{38} + return fileDescriptor_6960a02cc0a63cf6, []int{39} } func (m *Order) XXX_Unmarshal(b []byte) error { @@ -2192,7 +2263,7 @@ func (m *OrderRemoval) Reset() { *m = OrderRemoval{} } func (m *OrderRemoval) String() string { return proto.CompactTextString(m) } func (*OrderRemoval) ProtoMessage() {} func (*OrderRemoval) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{39} + return fileDescriptor_6960a02cc0a63cf6, []int{40} } func (m *OrderRemoval) XXX_Unmarshal(b []byte) error { @@ -2262,7 +2333,7 @@ func (m *Orders) Reset() { *m = Orders{} } func (m *Orders) String() string { return proto.CompactTextString(m) } func (*Orders) ProtoMessage() {} func (*Orders) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{40} + return fileDescriptor_6960a02cc0a63cf6, []int{41} } func (m *Orders) XXX_Unmarshal(b []byte) error { @@ -2311,7 +2382,7 @@ func (m *OrdersCount) Reset() { *m = OrdersCount{} } func (m *OrdersCount) String() string { return proto.CompactTextString(m) } func (*OrdersCount) ProtoMessage() {} func (*OrdersCount) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{41} + return fileDescriptor_6960a02cc0a63cf6, []int{42} } func (m *OrdersCount) XXX_Unmarshal(b []byte) error { @@ -2360,7 +2431,7 @@ func (m *OrderUpdate) Reset() { *m = OrderUpdate{} } func (m *OrderUpdate) String() string { return proto.CompactTextString(m) } func (*OrderUpdate) ProtoMessage() {} func (*OrderUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{42} + return fileDescriptor_6960a02cc0a63cf6, []int{43} } func (m *OrderUpdate) XXX_Unmarshal(b []byte) error { @@ -2452,7 +2523,7 @@ func (m *Peer) Reset() { *m = Peer{} } func (m *Peer) String() string { return proto.CompactTextString(m) } func (*Peer) ProtoMessage() {} func (*Peer) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{43} + return fileDescriptor_6960a02cc0a63cf6, []int{44} } func (m *Peer) XXX_Unmarshal(b []byte) error { @@ -2554,7 +2625,7 @@ func (m *PlaceOrderRequest) Reset() { *m = PlaceOrderRequest{} } func (m *PlaceOrderRequest) String() string { return proto.CompactTextString(m) } func (*PlaceOrderRequest) ProtoMessage() {} func (*PlaceOrderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{44} + return fileDescriptor_6960a02cc0a63cf6, []int{45} } func (m *PlaceOrderRequest) XXX_Unmarshal(b []byte) error { @@ -2642,7 +2713,7 @@ func (m *PlaceOrderResponse) Reset() { *m = PlaceOrderResponse{} } func (m *PlaceOrderResponse) String() string { return proto.CompactTextString(m) } func (*PlaceOrderResponse) ProtoMessage() {} func (*PlaceOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{45} + return fileDescriptor_6960a02cc0a63cf6, []int{46} } func (m *PlaceOrderResponse) XXX_Unmarshal(b []byte) error { @@ -2707,7 +2778,7 @@ func (m *PlaceOrderEvent) Reset() { *m = PlaceOrderEvent{} } func (m *PlaceOrderEvent) String() string { return proto.CompactTextString(m) } func (*PlaceOrderEvent) ProtoMessage() {} func (*PlaceOrderEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{46} + return fileDescriptor_6960a02cc0a63cf6, []int{47} } func (m *PlaceOrderEvent) XXX_Unmarshal(b []byte) error { @@ -2815,7 +2886,7 @@ func (m *ConnextInfo) Reset() { *m = ConnextInfo{} } func (m *ConnextInfo) String() string { return proto.CompactTextString(m) } func (*ConnextInfo) ProtoMessage() {} func (*ConnextInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{47} + return fileDescriptor_6960a02cc0a63cf6, []int{48} } func (m *ConnextInfo) XXX_Unmarshal(b []byte) error { @@ -2876,7 +2947,7 @@ func (m *RemoveCurrencyRequest) Reset() { *m = RemoveCurrencyRequest{} } func (m *RemoveCurrencyRequest) String() string { return proto.CompactTextString(m) } func (*RemoveCurrencyRequest) ProtoMessage() {} func (*RemoveCurrencyRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{48} + return fileDescriptor_6960a02cc0a63cf6, []int{49} } func (m *RemoveCurrencyRequest) XXX_Unmarshal(b []byte) error { @@ -2914,7 +2985,7 @@ func (m *RemoveCurrencyResponse) Reset() { *m = RemoveCurrencyResponse{} func (m *RemoveCurrencyResponse) String() string { return proto.CompactTextString(m) } func (*RemoveCurrencyResponse) ProtoMessage() {} func (*RemoveCurrencyResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{49} + return fileDescriptor_6960a02cc0a63cf6, []int{50} } func (m *RemoveCurrencyResponse) XXX_Unmarshal(b []byte) error { @@ -2950,7 +3021,7 @@ func (m *RemoveOrderRequest) Reset() { *m = RemoveOrderRequest{} } func (m *RemoveOrderRequest) String() string { return proto.CompactTextString(m) } func (*RemoveOrderRequest) ProtoMessage() {} func (*RemoveOrderRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{50} + return fileDescriptor_6960a02cc0a63cf6, []int{51} } func (m *RemoveOrderRequest) XXX_Unmarshal(b []byte) error { @@ -2998,7 +3069,7 @@ func (m *RemoveOrderResponse) Reset() { *m = RemoveOrderResponse{} } func (m *RemoveOrderResponse) String() string { return proto.CompactTextString(m) } func (*RemoveOrderResponse) ProtoMessage() {} func (*RemoveOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{51} + return fileDescriptor_6960a02cc0a63cf6, []int{52} } func (m *RemoveOrderResponse) XXX_Unmarshal(b []byte) error { @@ -3036,7 +3107,7 @@ func (m *RemoveAllOrdersRequest) Reset() { *m = RemoveAllOrdersRequest{} func (m *RemoveAllOrdersRequest) String() string { return proto.CompactTextString(m) } func (*RemoveAllOrdersRequest) ProtoMessage() {} func (*RemoveAllOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{52} + return fileDescriptor_6960a02cc0a63cf6, []int{53} } func (m *RemoveAllOrdersRequest) XXX_Unmarshal(b []byte) error { @@ -3071,7 +3142,7 @@ func (m *RemoveAllOrdersResponse) Reset() { *m = RemoveAllOrdersResponse func (m *RemoveAllOrdersResponse) String() string { return proto.CompactTextString(m) } func (*RemoveAllOrdersResponse) ProtoMessage() {} func (*RemoveAllOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{53} + return fileDescriptor_6960a02cc0a63cf6, []int{54} } func (m *RemoveAllOrdersResponse) XXX_Unmarshal(b []byte) error { @@ -3118,7 +3189,7 @@ func (m *RemovePairRequest) Reset() { *m = RemovePairRequest{} } func (m *RemovePairRequest) String() string { return proto.CompactTextString(m) } func (*RemovePairRequest) ProtoMessage() {} func (*RemovePairRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{54} + return fileDescriptor_6960a02cc0a63cf6, []int{55} } func (m *RemovePairRequest) XXX_Unmarshal(b []byte) error { @@ -3156,7 +3227,7 @@ func (m *RemovePairResponse) Reset() { *m = RemovePairResponse{} } func (m *RemovePairResponse) String() string { return proto.CompactTextString(m) } func (*RemovePairResponse) ProtoMessage() {} func (*RemovePairResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{55} + return fileDescriptor_6960a02cc0a63cf6, []int{56} } func (m *RemovePairResponse) XXX_Unmarshal(b []byte) error { @@ -3196,7 +3267,7 @@ func (m *RestoreNodeRequest) Reset() { *m = RestoreNodeRequest{} } func (m *RestoreNodeRequest) String() string { return proto.CompactTextString(m) } func (*RestoreNodeRequest) ProtoMessage() {} func (*RestoreNodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{56} + return fileDescriptor_6960a02cc0a63cf6, []int{57} } func (m *RestoreNodeRequest) XXX_Unmarshal(b []byte) error { @@ -3259,7 +3330,7 @@ func (m *RestoreNodeResponse) Reset() { *m = RestoreNodeResponse{} } func (m *RestoreNodeResponse) String() string { return proto.CompactTextString(m) } func (*RestoreNodeResponse) ProtoMessage() {} func (*RestoreNodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{57} + return fileDescriptor_6960a02cc0a63cf6, []int{58} } func (m *RestoreNodeResponse) XXX_Unmarshal(b []byte) error { @@ -3305,7 +3376,7 @@ func (m *SetLogLevelRequest) Reset() { *m = SetLogLevelRequest{} } func (m *SetLogLevelRequest) String() string { return proto.CompactTextString(m) } func (*SetLogLevelRequest) ProtoMessage() {} func (*SetLogLevelRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{58} + return fileDescriptor_6960a02cc0a63cf6, []int{59} } func (m *SetLogLevelRequest) XXX_Unmarshal(b []byte) error { @@ -3343,7 +3414,7 @@ func (m *SetLogLevelResponse) Reset() { *m = SetLogLevelResponse{} } func (m *SetLogLevelResponse) String() string { return proto.CompactTextString(m) } func (*SetLogLevelResponse) ProtoMessage() {} func (*SetLogLevelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{59} + return fileDescriptor_6960a02cc0a63cf6, []int{60} } func (m *SetLogLevelResponse) XXX_Unmarshal(b []byte) error { @@ -3374,7 +3445,7 @@ func (m *ShutdownRequest) Reset() { *m = ShutdownRequest{} } func (m *ShutdownRequest) String() string { return proto.CompactTextString(m) } func (*ShutdownRequest) ProtoMessage() {} func (*ShutdownRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{60} + return fileDescriptor_6960a02cc0a63cf6, []int{61} } func (m *ShutdownRequest) XXX_Unmarshal(b []byte) error { @@ -3405,7 +3476,7 @@ func (m *ShutdownResponse) Reset() { *m = ShutdownResponse{} } func (m *ShutdownResponse) String() string { return proto.CompactTextString(m) } func (*ShutdownResponse) ProtoMessage() {} func (*ShutdownResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{61} + return fileDescriptor_6960a02cc0a63cf6, []int{62} } func (m *ShutdownResponse) XXX_Unmarshal(b []byte) error { @@ -3438,7 +3509,7 @@ func (m *SubscribeOrdersRequest) Reset() { *m = SubscribeOrdersRequest{} func (m *SubscribeOrdersRequest) String() string { return proto.CompactTextString(m) } func (*SubscribeOrdersRequest) ProtoMessage() {} func (*SubscribeOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{62} + return fileDescriptor_6960a02cc0a63cf6, []int{63} } func (m *SubscribeOrdersRequest) XXX_Unmarshal(b []byte) error { @@ -3466,6 +3537,37 @@ func (m *SubscribeOrdersRequest) GetExisting() bool { return false } +type SubscribeAlertsRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SubscribeAlertsRequest) Reset() { *m = SubscribeAlertsRequest{} } +func (m *SubscribeAlertsRequest) String() string { return proto.CompactTextString(m) } +func (*SubscribeAlertsRequest) ProtoMessage() {} +func (*SubscribeAlertsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_6960a02cc0a63cf6, []int{64} +} + +func (m *SubscribeAlertsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SubscribeAlertsRequest.Unmarshal(m, b) +} +func (m *SubscribeAlertsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SubscribeAlertsRequest.Marshal(b, m, deterministic) +} +func (m *SubscribeAlertsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubscribeAlertsRequest.Merge(m, src) +} +func (m *SubscribeAlertsRequest) XXX_Size() int { + return xxx_messageInfo_SubscribeAlertsRequest.Size(m) +} +func (m *SubscribeAlertsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_SubscribeAlertsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_SubscribeAlertsRequest proto.InternalMessageInfo + type SubscribeSwapsAcceptedRequest struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -3476,7 +3578,7 @@ func (m *SubscribeSwapsAcceptedRequest) Reset() { *m = SubscribeSwapsAcc func (m *SubscribeSwapsAcceptedRequest) String() string { return proto.CompactTextString(m) } func (*SubscribeSwapsAcceptedRequest) ProtoMessage() {} func (*SubscribeSwapsAcceptedRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{63} + return fileDescriptor_6960a02cc0a63cf6, []int{65} } func (m *SubscribeSwapsAcceptedRequest) XXX_Unmarshal(b []byte) error { @@ -3510,7 +3612,7 @@ func (m *SubscribeSwapsRequest) Reset() { *m = SubscribeSwapsRequest{} } func (m *SubscribeSwapsRequest) String() string { return proto.CompactTextString(m) } func (*SubscribeSwapsRequest) ProtoMessage() {} func (*SubscribeSwapsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{64} + return fileDescriptor_6960a02cc0a63cf6, []int{66} } func (m *SubscribeSwapsRequest) XXX_Unmarshal(b []byte) error { @@ -3570,7 +3672,7 @@ func (m *SwapAccepted) Reset() { *m = SwapAccepted{} } func (m *SwapAccepted) String() string { return proto.CompactTextString(m) } func (*SwapAccepted) ProtoMessage() {} func (*SwapAccepted) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{65} + return fileDescriptor_6960a02cc0a63cf6, []int{67} } func (m *SwapAccepted) XXX_Unmarshal(b []byte) error { @@ -3688,7 +3790,7 @@ func (m *SwapFailure) Reset() { *m = SwapFailure{} } func (m *SwapFailure) String() string { return proto.CompactTextString(m) } func (*SwapFailure) ProtoMessage() {} func (*SwapFailure) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{66} + return fileDescriptor_6960a02cc0a63cf6, []int{68} } func (m *SwapFailure) XXX_Unmarshal(b []byte) error { @@ -3780,7 +3882,7 @@ func (m *SwapSuccess) Reset() { *m = SwapSuccess{} } func (m *SwapSuccess) String() string { return proto.CompactTextString(m) } func (*SwapSuccess) ProtoMessage() {} func (*SwapSuccess) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{67} + return fileDescriptor_6960a02cc0a63cf6, []int{69} } func (m *SwapSuccess) XXX_Unmarshal(b []byte) error { @@ -3924,7 +4026,7 @@ func (m *Trade) Reset() { *m = Trade{} } func (m *Trade) String() string { return proto.CompactTextString(m) } func (*Trade) ProtoMessage() {} func (*Trade) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{68} + return fileDescriptor_6960a02cc0a63cf6, []int{70} } func (m *Trade) XXX_Unmarshal(b []byte) error { @@ -4027,7 +4129,7 @@ func (m *TradeHistoryRequest) Reset() { *m = TradeHistoryRequest{} } func (m *TradeHistoryRequest) String() string { return proto.CompactTextString(m) } func (*TradeHistoryRequest) ProtoMessage() {} func (*TradeHistoryRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{69} + return fileDescriptor_6960a02cc0a63cf6, []int{71} } func (m *TradeHistoryRequest) XXX_Unmarshal(b []byte) error { @@ -4066,7 +4168,7 @@ func (m *TradeHistoryResponse) Reset() { *m = TradeHistoryResponse{} } func (m *TradeHistoryResponse) String() string { return proto.CompactTextString(m) } func (*TradeHistoryResponse) ProtoMessage() {} func (*TradeHistoryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{70} + return fileDescriptor_6960a02cc0a63cf6, []int{72} } func (m *TradeHistoryResponse) XXX_Unmarshal(b []byte) error { @@ -4112,7 +4214,7 @@ func (m *TradingLimits) Reset() { *m = TradingLimits{} } func (m *TradingLimits) String() string { return proto.CompactTextString(m) } func (*TradingLimits) ProtoMessage() {} func (*TradingLimits) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{71} + return fileDescriptor_6960a02cc0a63cf6, []int{73} } func (m *TradingLimits) XXX_Unmarshal(b []byte) error { @@ -4174,7 +4276,7 @@ func (m *TradingLimitsRequest) Reset() { *m = TradingLimitsRequest{} } func (m *TradingLimitsRequest) String() string { return proto.CompactTextString(m) } func (*TradingLimitsRequest) ProtoMessage() {} func (*TradingLimitsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{72} + return fileDescriptor_6960a02cc0a63cf6, []int{74} } func (m *TradingLimitsRequest) XXX_Unmarshal(b []byte) error { @@ -4214,7 +4316,7 @@ func (m *TradingLimitsResponse) Reset() { *m = TradingLimitsResponse{} } func (m *TradingLimitsResponse) String() string { return proto.CompactTextString(m) } func (*TradingLimitsResponse) ProtoMessage() {} func (*TradingLimitsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{73} + return fileDescriptor_6960a02cc0a63cf6, []int{75} } func (m *TradingLimitsResponse) XXX_Unmarshal(b []byte) error { @@ -4256,7 +4358,7 @@ func (m *UnbanRequest) Reset() { *m = UnbanRequest{} } func (m *UnbanRequest) String() string { return proto.CompactTextString(m) } func (*UnbanRequest) ProtoMessage() {} func (*UnbanRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{74} + return fileDescriptor_6960a02cc0a63cf6, []int{76} } func (m *UnbanRequest) XXX_Unmarshal(b []byte) error { @@ -4301,7 +4403,7 @@ func (m *UnbanResponse) Reset() { *m = UnbanResponse{} } func (m *UnbanResponse) String() string { return proto.CompactTextString(m) } func (*UnbanResponse) ProtoMessage() {} func (*UnbanResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{75} + return fileDescriptor_6960a02cc0a63cf6, []int{77} } func (m *UnbanResponse) XXX_Unmarshal(b []byte) error { @@ -4335,7 +4437,7 @@ func (m *UnlockNodeRequest) Reset() { *m = UnlockNodeRequest{} } func (m *UnlockNodeRequest) String() string { return proto.CompactTextString(m) } func (*UnlockNodeRequest) ProtoMessage() {} func (*UnlockNodeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{76} + return fileDescriptor_6960a02cc0a63cf6, []int{78} } func (m *UnlockNodeRequest) XXX_Unmarshal(b []byte) error { @@ -4377,7 +4479,7 @@ func (m *UnlockNodeResponse) Reset() { *m = UnlockNodeResponse{} } func (m *UnlockNodeResponse) String() string { return proto.CompactTextString(m) } func (*UnlockNodeResponse) ProtoMessage() {} func (*UnlockNodeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{77} + return fileDescriptor_6960a02cc0a63cf6, []int{79} } func (m *UnlockNodeResponse) XXX_Unmarshal(b []byte) error { @@ -4433,7 +4535,7 @@ func (m *WithdrawRequest) Reset() { *m = WithdrawRequest{} } func (m *WithdrawRequest) String() string { return proto.CompactTextString(m) } func (*WithdrawRequest) ProtoMessage() {} func (*WithdrawRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{78} + return fileDescriptor_6960a02cc0a63cf6, []int{80} } func (m *WithdrawRequest) XXX_Unmarshal(b []byte) error { @@ -4501,7 +4603,7 @@ func (m *WithdrawResponse) Reset() { *m = WithdrawResponse{} } func (m *WithdrawResponse) String() string { return proto.CompactTextString(m) } func (*WithdrawResponse) ProtoMessage() {} func (*WithdrawResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6960a02cc0a63cf6, []int{79} + return fileDescriptor_6960a02cc0a63cf6, []int{81} } func (m *WithdrawResponse) XXX_Unmarshal(b []byte) error { @@ -4533,11 +4635,13 @@ func init() { proto.RegisterEnum("xudrpc.OrderSide", OrderSide_name, OrderSide_value) proto.RegisterEnum("xudrpc.Role", Role_name, Role_value) proto.RegisterEnum("xudrpc.LogLevel", LogLevel_name, LogLevel_value) + proto.RegisterEnum("xudrpc.Alert_AlertType", Alert_AlertType_name, Alert_AlertType_value) proto.RegisterEnum("xudrpc.Currency_SwapClient", Currency_SwapClient_name, Currency_SwapClient_value) proto.RegisterEnum("xudrpc.ListOrdersRequest_Owner", ListOrdersRequest_Owner_name, ListOrdersRequest_Owner_value) proto.RegisterType((*AddCurrencyResponse)(nil), "xudrpc.AddCurrencyResponse") proto.RegisterType((*AddPairRequest)(nil), "xudrpc.AddPairRequest") proto.RegisterType((*AddPairResponse)(nil), "xudrpc.AddPairResponse") + proto.RegisterType((*Alert)(nil), "xudrpc.Alert") proto.RegisterType((*Balance)(nil), "xudrpc.Balance") proto.RegisterType((*BanRequest)(nil), "xudrpc.BanRequest") proto.RegisterType((*BanResponse)(nil), "xudrpc.BanResponse") @@ -4603,6 +4707,7 @@ func init() { proto.RegisterType((*ShutdownRequest)(nil), "xudrpc.ShutdownRequest") proto.RegisterType((*ShutdownResponse)(nil), "xudrpc.ShutdownResponse") proto.RegisterType((*SubscribeOrdersRequest)(nil), "xudrpc.SubscribeOrdersRequest") + proto.RegisterType((*SubscribeAlertsRequest)(nil), "xudrpc.SubscribeAlertsRequest") proto.RegisterType((*SubscribeSwapsAcceptedRequest)(nil), "xudrpc.SubscribeSwapsAcceptedRequest") proto.RegisterType((*SubscribeSwapsRequest)(nil), "xudrpc.SubscribeSwapsRequest") proto.RegisterType((*SwapAccepted)(nil), "xudrpc.SwapAccepted") @@ -4626,260 +4731,265 @@ func init() { func init() { proto.RegisterFile("xudrpc.proto", fileDescriptor_6960a02cc0a63cf6) } var fileDescriptor_6960a02cc0a63cf6 = []byte{ - // 4034 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3b, 0xcf, 0x6f, 0x1c, 0xc9, - 0x5a, 0xee, 0x19, 0x8f, 0x67, 0xfc, 0xcd, 0x4f, 0x97, 0x7f, 0x64, 0x32, 0x9b, 0xdd, 0xcd, 0x2b, - 0x36, 0xab, 0xac, 0x77, 0xd7, 0x09, 0x5e, 0x96, 0x7d, 0x1b, 0xc8, 0x6a, 0x6d, 0xc7, 0x2f, 0xc9, - 0xae, 0x9f, 0x1d, 0xb5, 0x93, 0x4d, 0x78, 0x82, 0xd7, 0xea, 0xe9, 0xae, 0xd8, 0x4d, 0xda, 0xdd, - 0xb3, 0xfd, 0xc3, 0x8e, 0xe1, 0x82, 0x9e, 0x38, 0xc1, 0x01, 0x21, 0xc4, 0x19, 0x4e, 0x08, 0x09, - 0xc4, 0x95, 0x13, 0x12, 0x67, 0xae, 0x1c, 0x90, 0x80, 0x0b, 0x12, 0x7f, 0x01, 0xe2, 0x8a, 0x84, - 0xea, 0x57, 0x57, 0x55, 0x77, 0x8f, 0x5f, 0xf2, 0x04, 0xef, 0x36, 0xf5, 0xd5, 0xd7, 0x5f, 0x55, - 0x7d, 0xbf, 0xbf, 0xaf, 0x6a, 0xa0, 0xf7, 0x3a, 0xf7, 0x93, 0x99, 0xb7, 0x35, 0x4b, 0xe2, 0x2c, - 0x46, 0x4b, 0x7c, 0x34, 0x59, 0x71, 0xa3, 0x28, 0xce, 0xdc, 0x2c, 0x88, 0xa3, 0x94, 0x4f, 0xe1, - 0x75, 0x58, 0xdd, 0xf1, 0xfd, 0xbd, 0x3c, 0x49, 0x48, 0xe4, 0x5d, 0xda, 0x24, 0x9d, 0xc5, 0x51, - 0x4a, 0xf0, 0x4f, 0x61, 0xb0, 0xe3, 0xfb, 0x4f, 0xdc, 0x20, 0xb1, 0xc9, 0xf7, 0x39, 0x49, 0x33, - 0xf4, 0x01, 0xf4, 0xa7, 0x6e, 0x4a, 0x1c, 0x4f, 0xa0, 0x8e, 0xad, 0x9b, 0xd6, 0xed, 0x65, 0xdb, - 0x04, 0xa2, 0x0f, 0x61, 0xf0, 0x7d, 0x1e, 0x67, 0x1a, 0x5a, 0x83, 0xa1, 0x95, 0xa0, 0x78, 0x05, - 0x86, 0x05, 0x7d, 0xb1, 0xe4, 0xdf, 0x37, 0xa0, 0xbd, 0xeb, 0x86, 0x6e, 0xe4, 0x11, 0xba, 0x58, - 0x16, 0x67, 0x6e, 0xe8, 0x4c, 0x39, 0x80, 0x2d, 0xb6, 0x68, 0x9b, 0x40, 0x74, 0x1b, 0x86, 0xde, - 0xa9, 0x1b, 0x45, 0x44, 0xe1, 0x35, 0x18, 0x5e, 0x19, 0x8c, 0x7e, 0x08, 0xd7, 0x66, 0x24, 0xf2, - 0x83, 0xe8, 0xc4, 0x29, 0x7f, 0xd1, 0x64, 0x5f, 0xcc, 0x9b, 0x46, 0xf7, 0x60, 0x1c, 0x44, 0xae, - 0x97, 0x05, 0xe7, 0xa4, 0xf2, 0xe9, 0x22, 0xfb, 0x74, 0xee, 0x3c, 0x65, 0xc6, 0x85, 0x1b, 0x86, - 0x24, 0x2b, 0xbe, 0x68, 0xb1, 0x2f, 0x4a, 0x50, 0xf4, 0x15, 0x4c, 0xf2, 0xc8, 0x8b, 0xa3, 0x97, - 0x41, 0x72, 0x46, 0x7c, 0xa7, 0xf4, 0xcd, 0x12, 0xfb, 0xe6, 0x0a, 0x0c, 0xfc, 0xeb, 0x00, 0xbb, - 0x6e, 0x24, 0x05, 0x75, 0x1b, 0x86, 0x51, 0xec, 0x13, 0x27, 0xf0, 0x49, 0x94, 0x05, 0x2f, 0x03, - 0x92, 0x08, 0x51, 0x95, 0xc1, 0xb8, 0x0f, 0x5d, 0xf6, 0x9d, 0x10, 0xc0, 0x17, 0xd0, 0xda, 0x3b, - 0x75, 0x83, 0x08, 0xad, 0x41, 0xcb, 0xa3, 0x3f, 0xc4, 0x77, 0x7c, 0x80, 0xc6, 0xd0, 0x8e, 0x48, - 0x76, 0x11, 0x27, 0xaf, 0x84, 0x4c, 0xe5, 0x10, 0xcf, 0xa0, 0xb3, 0xc7, 0x8f, 0x9e, 0xa2, 0x0d, - 0x58, 0xe2, 0xdc, 0x60, 0x1f, 0xf7, 0x6d, 0x31, 0x42, 0x13, 0xe8, 0x48, 0x3e, 0xb1, 0xcf, 0xfb, - 0x76, 0x31, 0xa6, 0x94, 0x05, 0xfb, 0x99, 0x34, 0xfa, 0xb6, 0x1c, 0x52, 0x6a, 0x5e, 0x18, 0xa7, - 0xc4, 0x67, 0xbc, 0xee, 0xdb, 0x62, 0x84, 0xff, 0xc1, 0x82, 0xd5, 0x3d, 0xfa, 0x53, 0xac, 0xfb, - 0xd6, 0x67, 0xa7, 0xfb, 0x29, 0xa9, 0x68, 0x31, 0xa6, 0xe7, 0x7f, 0x19, 0x27, 0x42, 0x37, 0x3a, - 0x36, 0x1f, 0xa0, 0x9b, 0xd0, 0xf5, 0x49, 0x9a, 0x05, 0x11, 0xb3, 0x1f, 0xb6, 0xa1, 0x65, 0x5b, - 0x07, 0xb1, 0xb3, 0x9f, 0xc5, 0x79, 0x94, 0x09, 0x39, 0x8b, 0x11, 0x1a, 0x41, 0xf3, 0x25, 0x91, - 0x82, 0xa4, 0x3f, 0xf1, 0xd7, 0xb0, 0x66, 0x6e, 0x9f, 0x8b, 0x80, 0xee, 0x3f, 0x4b, 0xdc, 0x28, - 0xa5, 0x8c, 0x89, 0x23, 0x27, 0xf0, 0xd3, 0xb1, 0x75, 0xb3, 0x49, 0xf7, 0x5f, 0x02, 0xe3, 0x4f, - 0x60, 0xb0, 0x17, 0x47, 0x11, 0xf1, 0x32, 0x79, 0xf6, 0x09, 0x74, 0xd8, 0x21, 0xf3, 0x24, 0x10, - 0x87, 0x2e, 0xc6, 0xd4, 0xdc, 0x0a, 0x6c, 0x21, 0xed, 0x3b, 0xb0, 0xb2, 0x97, 0x10, 0x37, 0x23, - 0x87, 0xb1, 0x4f, 0x34, 0x1a, 0x33, 0x37, 0x4d, 0x2f, 0xe2, 0xc4, 0x97, 0x34, 0xe4, 0x18, 0xff, - 0xb9, 0x05, 0x48, 0xff, 0x42, 0x6c, 0xf9, 0x57, 0xa0, 0x9f, 0x12, 0xe2, 0x3b, 0x67, 0x11, 0x39, - 0x8b, 0xa3, 0xc0, 0x13, 0x1b, 0xee, 0x51, 0xe0, 0x8f, 0x05, 0x0c, 0x7d, 0x04, 0xa3, 0x20, 0x0a, - 0xb2, 0xc0, 0x0d, 0x83, 0xdf, 0x23, 0xbe, 0x13, 0x46, 0x7e, 0x3a, 0x6e, 0xf0, 0x83, 0x69, 0xf0, - 0x83, 0xc8, 0x4f, 0xd1, 0x1d, 0x58, 0xd5, 0x51, 0x3d, 0xba, 0xed, 0xd7, 0x99, 0x10, 0x05, 0xd2, - 0xa6, 0xf6, 0xf8, 0x0c, 0xfe, 0x17, 0x0b, 0x3a, 0xd2, 0x7f, 0x19, 0x62, 0xb5, 0x4a, 0x62, 0xbd, - 0x0f, 0xdd, 0xf4, 0xc2, 0x9d, 0x39, 0x5e, 0x18, 0x90, 0x28, 0x63, 0x52, 0x1f, 0x6c, 0xbf, 0xb3, - 0x25, 0x3c, 0xa5, 0x24, 0xb1, 0x75, 0x7c, 0xe1, 0xce, 0xf6, 0x18, 0x8a, 0xad, 0xe3, 0x73, 0x9f, - 0xf4, 0x8a, 0x44, 0x8e, 0xeb, 0xfb, 0x09, 0x49, 0x53, 0xb6, 0xa5, 0x65, 0xdb, 0x04, 0x52, 0x9b, - 0xf7, 0x89, 0x17, 0x9c, 0xb9, 0xa1, 0x33, 0x0b, 0x5d, 0x8f, 0xa4, 0x42, 0x73, 0x4b, 0x50, 0x8c, - 0x01, 0xd4, 0x42, 0xa8, 0x0d, 0xcd, 0x83, 0xc3, 0x07, 0xa3, 0x05, 0xd4, 0x85, 0xf6, 0xde, 0xd1, - 0xe1, 0xe1, 0xfe, 0x8b, 0xa7, 0xa3, 0x06, 0x95, 0xf1, 0x03, 0x32, 0x8b, 0xd3, 0x40, 0x97, 0xf1, - 0xbc, 0xe3, 0xe1, 0x8f, 0x61, 0x58, 0x60, 0x0b, 0xd9, 0x8c, 0xa1, 0x2d, 0x37, 0xcb, 0xb1, 0xe5, - 0x90, 0x2a, 0xe0, 0x83, 0x20, 0xf5, 0xe2, 0x73, 0x92, 0x50, 0x69, 0xa6, 0x6f, 0xef, 0x3c, 0x3e, - 0x87, 0xf5, 0x12, 0x05, 0xb1, 0xe8, 0x0d, 0x58, 0x8e, 0xf2, 0x33, 0x87, 0xe2, 0xa7, 0xc2, 0x09, - 0x28, 0x00, 0xfe, 0x23, 0x0b, 0xd0, 0xfe, 0x6b, 0xe2, 0xe5, 0x19, 0xa1, 0xe7, 0xd7, 0x0e, 0x16, - 0x27, 0x3e, 0x49, 0x9c, 0xa0, 0x50, 0x3c, 0x39, 0x66, 0xee, 0xc1, 0x0d, 0xd8, 0x94, 0x70, 0x3c, - 0x62, 0x88, 0x30, 0xf4, 0x66, 0x84, 0x24, 0xce, 0x2c, 0x9f, 0x3a, 0xaf, 0xc8, 0xa5, 0x90, 0x88, - 0x01, 0xa3, 0x94, 0xbf, 0xcf, 0xdd, 0x28, 0x0b, 0xb2, 0x4b, 0xe1, 0xb0, 0x8b, 0x31, 0xb5, 0x81, - 0x87, 0x24, 0x13, 0x41, 0xe7, 0x4d, 0x78, 0xfc, 0xd7, 0x16, 0x20, 0xfd, 0x0b, 0x71, 0xe4, 0x07, - 0xd0, 0x11, 0xbe, 0x98, 0xdb, 0x6b, 0x77, 0xfb, 0xb6, 0x54, 0xab, 0x2a, 0xf6, 0x96, 0x18, 0xa7, - 0xfb, 0x51, 0x96, 0x5c, 0xda, 0xc5, 0x97, 0x93, 0x03, 0xe8, 0x1b, 0x53, 0xd4, 0x6f, 0xd0, 0x53, - 0xf1, 0x4d, 0xd0, 0x9f, 0xe8, 0x16, 0xb4, 0xce, 0xdd, 0x30, 0xe7, 0x2e, 0xb4, 0xbb, 0x3d, 0x94, - 0xab, 0xc8, 0x25, 0xf8, 0xec, 0xbd, 0xc6, 0x0f, 0x2d, 0x3c, 0x82, 0xc1, 0x43, 0x92, 0x3d, 0x8e, - 0x5e, 0xc6, 0xe2, 0x60, 0xf8, 0x5f, 0x9b, 0x30, 0x2c, 0x40, 0x4a, 0x43, 0xce, 0x49, 0x92, 0x52, - 0x87, 0x26, 0x34, 0x44, 0x0c, 0x29, 0x6f, 0x99, 0xc8, 0x25, 0x6f, 0x39, 0xeb, 0x0d, 0x18, 0x42, - 0xb0, 0x98, 0x27, 0x01, 0xb5, 0x04, 0x6a, 0xca, 0xec, 0xb7, 0x14, 0x3f, 0x95, 0x81, 0xd4, 0x7d, - 0x05, 0x28, 0x66, 0xdd, 0x20, 0x49, 0x99, 0x97, 0x94, 0xb3, 0x14, 0x80, 0x3e, 0x86, 0x25, 0x26, - 0xf5, 0x94, 0xf9, 0xca, 0xee, 0xf6, 0xaa, 0x3c, 0xdf, 0x11, 0x83, 0xee, 0x51, 0x6f, 0x6a, 0x0b, - 0x14, 0xb4, 0x0d, 0xcd, 0x30, 0xf2, 0xc7, 0x6d, 0xc6, 0xef, 0x9b, 0x1a, 0xbf, 0xf5, 0x03, 0x6e, - 0x1d, 0x44, 0x3e, 0xe7, 0x33, 0x45, 0xa6, 0x9e, 0xdd, 0x0d, 0x03, 0x37, 0x1d, 0x2f, 0xf3, 0xc8, - 0xc6, 0x06, 0x7a, 0x64, 0x03, 0x23, 0xb2, 0xa1, 0xbb, 0xb0, 0x2a, 0x13, 0x03, 0xe6, 0x0a, 0x4e, - 0xdd, 0xf4, 0x94, 0xa4, 0xe3, 0x2e, 0x3b, 0x6f, 0xdd, 0x14, 0xfa, 0x14, 0xda, 0xd2, 0x65, 0xf5, - 0xcc, 0x33, 0x08, 0x7f, 0xc5, 0x76, 0x27, 0x71, 0x26, 0x0f, 0xa1, 0x23, 0x77, 0xf8, 0x16, 0xe2, - 0x3e, 0x88, 0x7c, 0x46, 0x46, 0x13, 0xf7, 0x57, 0x4c, 0x31, 0xa9, 0x25, 0x6a, 0x22, 0x7f, 0x0b, - 0x73, 0xb6, 0x61, 0xd5, 0xf8, 0xbe, 0xf0, 0xee, 0xc3, 0x84, 0xcc, 0x72, 0x9e, 0x33, 0x1e, 0x7b, - 0x71, 0xc2, 0xe3, 0xfa, 0x8a, 0x0d, 0x0a, 0x4c, 0xe3, 0xde, 0x94, 0xc6, 0x31, 0x6e, 0x9f, 0x1d, - 0x5b, 0x8c, 0xf0, 0x35, 0x58, 0x3f, 0x08, 0xd2, 0x4c, 0x78, 0xd6, 0xa0, 0xf0, 0x32, 0xf8, 0x1b, - 0xd8, 0x28, 0x4f, 0x88, 0xf5, 0xee, 0x02, 0x78, 0x05, 0x54, 0xd8, 0xd2, 0xa8, 0xec, 0xa2, 0x6d, - 0x0d, 0x07, 0xff, 0x93, 0x05, 0x2b, 0x94, 0x18, 0x57, 0x11, 0x79, 0x70, 0xcd, 0x67, 0x58, 0xa6, - 0xcf, 0xf8, 0x1c, 0x5a, 0xf1, 0x45, 0x44, 0x12, 0xe1, 0xff, 0xdf, 0x2f, 0x78, 0x5a, 0xa6, 0xb1, - 0x75, 0x44, 0xd1, 0x6c, 0x8e, 0x4d, 0x35, 0x27, 0x0c, 0xce, 0x82, 0x4c, 0x64, 0x28, 0x7c, 0x40, - 0xf9, 0x1b, 0x44, 0x5e, 0x98, 0xfb, 0xc4, 0x61, 0xaa, 0x24, 0xdc, 0x7d, 0xc7, 0x2e, 0x83, 0xf1, - 0x07, 0xd0, 0x62, 0xf4, 0x50, 0x07, 0x16, 0x77, 0x8f, 0x9e, 0x3e, 0x1a, 0x2d, 0x50, 0xa7, 0x7f, - 0xf4, 0xfc, 0x70, 0x64, 0x51, 0xd0, 0x93, 0xfd, 0x7d, 0x7b, 0xd4, 0xc0, 0x7f, 0x61, 0x01, 0xd2, - 0x37, 0x22, 0xb8, 0xf2, 0x55, 0x61, 0x17, 0x9c, 0x23, 0x1f, 0xd6, 0x6d, 0x5a, 0x28, 0x3c, 0x1f, - 0x72, 0x9d, 0x17, 0x5f, 0x4d, 0x1e, 0x43, 0x57, 0x03, 0xd7, 0x28, 0xda, 0x07, 0xa6, 0xa2, 0x0d, - 0x4c, 0xbb, 0xd3, 0xf5, 0x0c, 0xc1, 0x88, 0x2e, 0x4a, 0x33, 0xf7, 0x42, 0x9c, 0x1f, 0x71, 0x09, - 0x08, 0x98, 0xd8, 0xf3, 0x1a, 0xb4, 0xb8, 0x95, 0xf3, 0x7c, 0x80, 0x0f, 0x8a, 0xcf, 0x89, 0xe2, - 0x33, 0xfe, 0x42, 0x7c, 0x4e, 0xf4, 0x23, 0x63, 0x68, 0x71, 0x17, 0xc2, 0x4f, 0xdc, 0x93, 0x3b, - 0xa2, 0x58, 0x36, 0x9f, 0xc2, 0xff, 0x6e, 0x41, 0x5b, 0x98, 0x02, 0xd5, 0xc1, 0x34, 0x73, 0xb3, - 0x5c, 0x46, 0x3a, 0x31, 0x42, 0x9f, 0x40, 0x47, 0xa4, 0xe5, 0xa9, 0x38, 0x9c, 0x52, 0x27, 0x01, - 0xb7, 0x0b, 0x0c, 0x74, 0x0b, 0x96, 0x58, 0xb2, 0xcb, 0x5d, 0x5a, 0x77, 0xbb, 0xaf, 0xe1, 0x06, - 0x91, 0x2d, 0x26, 0x69, 0x2a, 0x38, 0x0d, 0x63, 0xef, 0xd5, 0x29, 0x09, 0x4e, 0x4e, 0x33, 0xe1, - 0xe5, 0x74, 0x50, 0xe1, 0x19, 0x5b, 0x9a, 0x67, 0xd4, 0x7c, 0xed, 0x92, 0xe9, 0x6b, 0x0b, 0xb7, - 0xd4, 0xd6, 0xdc, 0x12, 0xfe, 0x06, 0x06, 0xcc, 0x1e, 0x55, 0xd2, 0x5a, 0xf6, 0xc9, 0x56, 0x8d, - 0x4f, 0x2e, 0x68, 0x35, 0x74, 0x5a, 0x7f, 0x65, 0x01, 0x3a, 0x9a, 0x91, 0xe8, 0xff, 0x25, 0x5f, - 0x56, 0x79, 0x6f, 0xd3, 0xc8, 0x7b, 0x6f, 0x42, 0x77, 0x96, 0xa7, 0xa7, 0x8e, 0x98, 0xe4, 0xd1, - 0x57, 0x07, 0xc9, 0xcc, 0xb8, 0xa5, 0x32, 0xe3, 0xfb, 0xb0, 0x6a, 0xec, 0x53, 0xa8, 0xc3, 0x87, - 0x30, 0x30, 0x33, 0x60, 0xb1, 0xcf, 0x12, 0x14, 0xff, 0x63, 0x03, 0x5a, 0x4c, 0x69, 0x99, 0xfe, - 0x25, 0x81, 0x28, 0x1d, 0x2d, 0x9b, 0x0f, 0x8c, 0x6c, 0xa0, 0x61, 0x66, 0x03, 0xba, 0xcf, 0x68, - 0x9a, 0x3e, 0x63, 0x00, 0x8d, 0xc0, 0x17, 0x19, 0x7f, 0x23, 0xf0, 0xd1, 0xd7, 0x55, 0xb6, 0xb5, - 0x98, 0x6e, 0x6d, 0x48, 0x7d, 0x31, 0x05, 0x57, 0xcb, 0xce, 0x30, 0xf6, 0xdc, 0x90, 0x2e, 0xc6, - 0x95, 0xa1, 0x18, 0xa3, 0xf7, 0x00, 0x3c, 0x96, 0x67, 0xfb, 0x8e, 0x9b, 0x31, 0x95, 0x58, 0xb4, - 0x35, 0x08, 0xba, 0x05, 0x8b, 0x69, 0xe0, 0x93, 0x71, 0x87, 0x39, 0xb0, 0x15, 0xc3, 0x56, 0x8f, - 0x03, 0x9f, 0xd8, 0x6c, 0x9a, 0x2a, 0x4b, 0x90, 0x3a, 0xf1, 0x45, 0xe4, 0x30, 0x2f, 0xc0, 0x42, - 0x5e, 0xc7, 0x36, 0x60, 0x54, 0x4d, 0x4f, 0xe3, 0xd0, 0x67, 0x61, 0x6f, 0xd1, 0x66, 0xbf, 0xf1, - 0x5f, 0x5a, 0xd0, 0x63, 0xb4, 0x6c, 0x72, 0x16, 0x9f, 0xbb, 0xa1, 0xc1, 0x33, 0x6b, 0x3e, 0xcf, - 0x4a, 0xb9, 0x99, 0x9e, 0xd1, 0x35, 0x4b, 0x19, 0x9d, 0x7e, 0xfa, 0xc5, 0xd2, 0xe9, 0xcb, 0xdb, - 0x6e, 0x55, 0xb7, 0x8d, 0x4f, 0x61, 0x89, 0x7b, 0x26, 0xf4, 0x29, 0xc0, 0x34, 0xbf, 0x74, 0x0c, - 0xef, 0xd8, 0x37, 0x38, 0x62, 0x6b, 0x08, 0xe8, 0x0e, 0x74, 0x53, 0x12, 0x86, 0x12, 0xbf, 0x51, - 0x87, 0xaf, 0x63, 0xe0, 0xcf, 0xa4, 0xe7, 0x64, 0xb9, 0x07, 0xe5, 0x17, 0x75, 0x3d, 0x22, 0xad, - 0x65, 0xbf, 0xa9, 0x0e, 0xc7, 0x17, 0x91, 0x28, 0x6a, 0xe9, 0x4f, 0xfc, 0x33, 0x4b, 0x7c, 0xf5, - 0x6c, 0xe6, 0xbb, 0x19, 0xa1, 0x61, 0x9c, 0x9f, 0xc5, 0x62, 0x4a, 0x62, 0xae, 0xf7, 0x68, 0xc1, - 0xe6, 0xb3, 0xe8, 0x37, 0xa1, 0xcf, 0x39, 0x94, 0x70, 0xc6, 0x0b, 0x7f, 0xb5, 0x66, 0x6e, 0x8f, - 0xcf, 0x3d, 0x5a, 0xb0, 0x4d, 0xe4, 0xdd, 0x01, 0xf4, 0x38, 0x20, 0x67, 0x8b, 0xe2, 0x7f, 0x6b, - 0xc0, 0x22, 0x75, 0x96, 0xf3, 0x8b, 0x80, 0x37, 0x4a, 0xf1, 0xbe, 0x86, 0x5e, 0x18, 0xf9, 0x72, - 0x28, 0xfd, 0xe2, 0x0d, 0xdd, 0x1d, 0xd3, 0x74, 0xe4, 0x49, 0x3e, 0xfd, 0x96, 0x5c, 0x8a, 0xb0, - 0x63, 0x7c, 0x41, 0xd7, 0x0f, 0xa2, 0x69, 0x9c, 0x47, 0xbe, 0x88, 0x8d, 0x72, 0xa8, 0x42, 0x44, - 0x4b, 0x0b, 0x11, 0xd4, 0x6b, 0xbc, 0xce, 0x7d, 0xc7, 0x74, 0x95, 0x3a, 0x08, 0x7d, 0x02, 0x2b, - 0x29, 0xf1, 0xe2, 0xc8, 0x4f, 0x79, 0x79, 0xe8, 0x65, 0xc4, 0x67, 0x76, 0xd2, 0xb7, 0xab, 0x13, - 0xf5, 0x39, 0xdf, 0xe4, 0x3e, 0x0c, 0x4b, 0xdb, 0xae, 0x09, 0x8b, 0x6b, 0x7a, 0x58, 0x5c, 0xd6, - 0xc3, 0xe0, 0x1f, 0x34, 0x60, 0xe5, 0x09, 0xad, 0xe4, 0x84, 0x50, 0xb8, 0x3b, 0xfd, 0xbf, 0xf4, - 0x39, 0xba, 0xfd, 0x2c, 0x96, 0xec, 0x47, 0x7a, 0x80, 0xd6, 0xd5, 0x1e, 0x60, 0x13, 0x46, 0x09, - 0x61, 0xf5, 0xa6, 0x53, 0x90, 0xe2, 0xec, 0xac, 0xc0, 0x69, 0xa6, 0x1b, 0x9c, 0x9d, 0x11, 0x3f, - 0x70, 0x33, 0x0a, 0x75, 0x3c, 0x5a, 0x4f, 0x84, 0x8c, 0xab, 0x1d, 0xbb, 0x6e, 0x8a, 0xb2, 0x00, - 0xe9, 0x2c, 0x10, 0x9e, 0xfa, 0x4b, 0x5a, 0xea, 0x67, 0x24, 0x89, 0xdc, 0xd0, 0x39, 0x73, 0x33, - 0xef, 0x94, 0xcc, 0xb1, 0xcb, 0x0a, 0x1a, 0xfa, 0x0d, 0x18, 0xb0, 0x54, 0x3a, 0xcd, 0x3d, 0x8f, - 0xa4, 0x34, 0x99, 0xe2, 0x06, 0x5a, 0xa4, 0xd0, 0xb4, 0x62, 0x3c, 0xe6, 0x93, 0x76, 0x09, 0x15, - 0x7d, 0x41, 0x33, 0xd5, 0x33, 0x37, 0x88, 0x68, 0x46, 0xce, 0xcd, 0xad, 0x59, 0x63, 0x6e, 0x76, - 0x19, 0x0b, 0x7d, 0x09, 0x7d, 0x46, 0xea, 0xa5, 0x1b, 0x84, 0x79, 0xc2, 0x32, 0xb8, 0xca, 0xa2, - 0x3f, 0xe2, 0x73, 0xb6, 0x89, 0x89, 0xff, 0xcb, 0x82, 0xa1, 0x62, 0xc1, 0xfe, 0x39, 0x2d, 0xe5, - 0x6f, 0x41, 0x8b, 0x9d, 0x67, 0xae, 0xb1, 0xb3, 0x59, 0xf4, 0x25, 0xf4, 0xf4, 0x03, 0x08, 0x5b, - 0xaf, 0x3b, 0xe9, 0xa3, 0x05, 0xdb, 0x40, 0x45, 0x5f, 0xbe, 0xd9, 0x49, 0x1f, 0x2d, 0xd4, 0x9d, - 0xb5, 0xa7, 0x9f, 0x80, 0x29, 0x56, 0xfd, 0x51, 0x8b, 0x55, 0x05, 0xea, 0x6e, 0x1b, 0x5a, 0x84, - 0x1e, 0x10, 0xc7, 0xd0, 0xd5, 0x4a, 0x99, 0xb9, 0x89, 0x97, 0xe6, 0x76, 0x1a, 0xa6, 0xdb, 0xd1, - 0xf2, 0xa0, 0xc5, 0x4a, 0x1e, 0xc4, 0x1b, 0x8f, 0x2d, 0xad, 0xf1, 0x88, 0x3f, 0x83, 0x75, 0xe6, - 0xf5, 0x88, 0xea, 0x52, 0xff, 0xfc, 0x4a, 0x7d, 0x0c, 0x1b, 0xe5, 0x8f, 0x44, 0xe3, 0xeb, 0x00, - 0x10, 0x9f, 0x31, 0x4c, 0xf7, 0xaa, 0x06, 0xc4, 0x15, 0x06, 0x8c, 0x3f, 0x87, 0x55, 0x83, 0x9a, - 0xb0, 0x82, 0xf7, 0x60, 0x24, 0x51, 0x9c, 0x38, 0x72, 0x58, 0x90, 0xb5, 0xb4, 0x20, 0x5b, 0x6c, - 0x6f, 0x27, 0x0c, 0x8d, 0xaa, 0x03, 0xe7, 0x70, 0xad, 0x32, 0x23, 0x88, 0x7e, 0x02, 0x2b, 0xcc, - 0xdb, 0x13, 0xbf, 0xb0, 0x5b, 0x99, 0x5e, 0x57, 0x27, 0x28, 0xb6, 0x58, 0x59, 0xc3, 0xe6, 0x4d, - 0xb7, 0xea, 0x04, 0xfe, 0x14, 0x56, 0xf8, 0xb2, 0x7a, 0xcf, 0x7f, 0x6e, 0x15, 0x85, 0xd7, 0x24, - 0x13, 0x8d, 0x16, 0xfe, 0x1f, 0x36, 0x28, 0x38, 0xcd, 0xe2, 0xc4, 0xe8, 0x2a, 0xbe, 0x51, 0x8b, - 0x50, 0x6f, 0x3d, 0x36, 0xcc, 0xd6, 0x23, 0xfa, 0x16, 0xba, 0x34, 0xa4, 0x4c, 0x5d, 0xef, 0x55, - 0x3e, 0x93, 0x31, 0x68, 0x53, 0x6a, 0x6d, 0x75, 0x45, 0x1a, 0x91, 0x76, 0x39, 0x32, 0x8f, 0x48, - 0x10, 0x16, 0x00, 0xf4, 0x03, 0x76, 0x39, 0xe2, 0xf8, 0x6e, 0xe6, 0x4e, 0xdd, 0x94, 0xb7, 0x65, - 0x7b, 0x2c, 0xc0, 0x3c, 0x10, 0x20, 0x11, 0x1c, 0x74, 0x0a, 0x3f, 0x2f, 0x38, 0xf4, 0xf4, 0xe0, - 0x40, 0xa8, 0x4e, 0x68, 0x7b, 0x52, 0x9d, 0xd2, 0x84, 0x83, 0x45, 0x07, 0x54, 0xb0, 0x41, 0x02, - 0x59, 0xfb, 0xf3, 0x23, 0xea, 0xb3, 0x05, 0x92, 0x6c, 0x24, 0xf0, 0xaa, 0x7a, 0x28, 0xe1, 0xb2, - 0xf1, 0xf9, 0x00, 0xd0, 0x31, 0xc9, 0x0e, 0xe2, 0x93, 0x03, 0x72, 0xae, 0x52, 0xfa, 0x2d, 0x58, - 0x0e, 0xe3, 0x13, 0x27, 0xa4, 0x30, 0xb6, 0xdd, 0x81, 0xaa, 0x78, 0x0a, 0x5c, 0x85, 0x82, 0xd7, - 0x61, 0xd5, 0xa0, 0x22, 0x44, 0xb9, 0x02, 0xc3, 0xe3, 0xd3, 0x3c, 0xf3, 0xe3, 0x0b, 0x79, 0xb1, - 0x40, 0x6b, 0x37, 0x05, 0x12, 0x68, 0xbf, 0x06, 0x1b, 0xc7, 0xf9, 0x34, 0xf5, 0x92, 0x60, 0x4a, - 0xcc, 0x0a, 0x7c, 0x02, 0x1d, 0xf2, 0x3a, 0x48, 0xb3, 0x20, 0x3a, 0x61, 0xdb, 0xe8, 0xd8, 0xc5, - 0x18, 0xbf, 0x0f, 0xef, 0x16, 0x5f, 0x51, 0x9f, 0x93, 0xee, 0x78, 0x1e, 0x99, 0x65, 0xc4, 0x97, - 0x4b, 0xdd, 0x87, 0x75, 0x13, 0x41, 0xbb, 0x85, 0x92, 0x95, 0x75, 0xe6, 0xbe, 0x12, 0x29, 0x55, - 0xc7, 0x36, 0x81, 0xf8, 0x7f, 0x1a, 0xd0, 0xa3, 0x9f, 0x49, 0xb2, 0xe8, 0x7a, 0xc5, 0xba, 0xdb, - 0x6c, 0xfc, 0xd8, 0xcc, 0x45, 0x1b, 0xa5, 0x5c, 0xf4, 0xca, 0xe8, 0x3c, 0xaf, 0xab, 0xa8, 0xb2, - 0x80, 0x96, 0x9e, 0x05, 0x94, 0x7b, 0x95, 0x4b, 0x35, 0xbd, 0xca, 0x0d, 0x58, 0x4a, 0x58, 0x23, - 0x49, 0x14, 0x82, 0x62, 0x44, 0x03, 0x39, 0x2f, 0x98, 0x9c, 0x84, 0x78, 0x24, 0x38, 0xa7, 0x3c, - 0xed, 0xb0, 0x55, 0x2b, 0x70, 0x5a, 0x29, 0x09, 0x58, 0x2a, 0xee, 0x54, 0x96, 0xf9, 0xa5, 0x93, - 0x09, 0x45, 0x5b, 0x80, 0xa4, 0xb3, 0xd4, 0xa8, 0xf2, 0xfe, 0x57, 0xcd, 0x0c, 0xdd, 0x43, 0x01, - 0x95, 0x94, 0xbb, 0x3c, 0x99, 0x28, 0xc3, 0xf1, 0xdf, 0x58, 0xd0, 0xd5, 0x62, 0xc9, 0x2f, 0xd8, - 0xdd, 0xd5, 0x79, 0xdc, 0x2c, 0xf1, 0xb8, 0xcc, 0xcd, 0xc5, 0x1a, 0x6e, 0x7e, 0x08, 0x03, 0x11, - 0xbc, 0x9c, 0x84, 0xb8, 0x69, 0x2c, 0xc3, 0x4a, 0x09, 0x8a, 0xff, 0xae, 0xc9, 0x77, 0x2b, 0xe2, - 0xed, 0x2f, 0x57, 0x59, 0x94, 0xc8, 0x5b, 0x86, 0xc8, 0x6f, 0xc3, 0xd0, 0x10, 0x2d, 0xf1, 0x85, - 0xc4, 0xcb, 0x60, 0x9a, 0x2f, 0x2b, 0xd1, 0x66, 0x42, 0xda, 0x3a, 0xa8, 0xc2, 0x2c, 0xa8, 0x61, - 0xd6, 0x4d, 0x58, 0x4c, 0xe2, 0x90, 0x30, 0x91, 0x0e, 0x54, 0xbb, 0xc5, 0x8e, 0x43, 0x62, 0xb3, - 0x19, 0x1a, 0x4f, 0x4a, 0x6a, 0x41, 0x7c, 0xd6, 0xe3, 0x5c, 0xb6, 0xab, 0x13, 0xd4, 0x50, 0x75, - 0xb5, 0xc8, 0xc6, 0x7d, 0x7e, 0x5b, 0x62, 0x00, 0x69, 0xa9, 0x9b, 0x38, 0xb3, 0x84, 0x04, 0x67, - 0xee, 0x09, 0x19, 0x0f, 0x18, 0x8a, 0x06, 0x51, 0xa6, 0x34, 0xd4, 0x4c, 0x09, 0xff, 0x77, 0x03, - 0x5a, 0x4f, 0x13, 0xd7, 0x27, 0xb4, 0x9e, 0x3b, 0xa3, 0x16, 0xef, 0xcc, 0xaf, 0xaf, 0x6c, 0x1d, - 0x83, 0x7e, 0x90, 0x69, 0x1f, 0x34, 0x6a, 0x3f, 0xd0, 0x30, 0x34, 0xf9, 0x34, 0x0d, 0xf9, 0x5c, - 0x25, 0x53, 0x4d, 0x13, 0x5a, 0xa6, 0x26, 0x14, 0xe7, 0x59, 0xd2, 0x5d, 0x83, 0xe4, 0x7d, 0x7b, - 0x2e, 0xef, 0x6f, 0x42, 0x97, 0xf0, 0x4b, 0x13, 0xd6, 0x13, 0xe0, 0x9a, 0xa0, 0x83, 0x8a, 0x92, - 0x60, 0xf9, 0xea, 0x92, 0xe0, 0x1e, 0xf4, 0x3c, 0xaa, 0x18, 0x24, 0x99, 0xb9, 0x49, 0xc6, 0x55, - 0x61, 0x7e, 0xdb, 0xc2, 0xc0, 0xc5, 0x1f, 0xc3, 0x2a, 0xe3, 0xfa, 0xa3, 0x80, 0xc6, 0xa1, 0x4b, - 0xad, 0xe8, 0xe1, 0x9d, 0x51, 0x4b, 0xeb, 0x8c, 0xe2, 0xfb, 0xb0, 0x66, 0x22, 0x8b, 0x20, 0x78, - 0x0b, 0x96, 0x32, 0x0a, 0xaf, 0x14, 0x05, 0x0c, 0xdb, 0x16, 0x93, 0xf8, 0x4f, 0x2c, 0xe8, 0x53, - 0x48, 0x10, 0x9d, 0x1c, 0x50, 0x7a, 0x29, 0x65, 0xf8, 0x99, 0xfb, 0xda, 0xa1, 0xc5, 0xb9, 0xec, - 0x42, 0xc8, 0x31, 0x65, 0x38, 0xfd, 0x3d, 0xcd, 0x65, 0x7e, 0x26, 0x87, 0x54, 0x0d, 0x13, 0x92, - 0x92, 0x84, 0xa6, 0x46, 0xec, 0x53, 0xee, 0x48, 0x4c, 0x20, 0x35, 0x90, 0x02, 0x40, 0x89, 0x70, - 0x81, 0x1a, 0x30, 0xbc, 0xcd, 0x0f, 0x54, 0x6c, 0xe8, 0x4d, 0x92, 0xd0, 0xbf, 0xb5, 0x60, 0xbd, - 0xf4, 0x91, 0x60, 0xc3, 0x0e, 0x2c, 0x31, 0x3e, 0x49, 0x36, 0x7c, 0xa4, 0xb3, 0xa1, 0x82, 0xbe, - 0xc5, 0x87, 0xa2, 0xa9, 0xcb, 0x3f, 0x9c, 0x3c, 0x81, 0xae, 0x06, 0xae, 0x49, 0x50, 0x3e, 0x36, - 0x9b, 0xba, 0xeb, 0xf5, 0x4b, 0x68, 0x79, 0xcb, 0x77, 0xd0, 0x7b, 0x16, 0x4d, 0x7f, 0x81, 0x97, - 0x04, 0xe8, 0x06, 0x2c, 0x27, 0x44, 0x94, 0xdc, 0x22, 0x5d, 0x51, 0x00, 0x3c, 0x84, 0xbe, 0xa0, - 0xab, 0xee, 0x9e, 0x9f, 0x45, 0x61, 0xec, 0xbd, 0x7a, 0xd3, 0xbb, 0xe7, 0x9f, 0x00, 0xd2, 0x3f, - 0x50, 0x09, 0x55, 0xce, 0xa0, 0xa5, 0x84, 0x4a, 0x02, 0x59, 0x42, 0xf5, 0x3e, 0x74, 0x75, 0x14, - 0x7e, 0x55, 0x05, 0x0a, 0x01, 0xff, 0xb1, 0x05, 0xc3, 0xe7, 0x41, 0x76, 0xea, 0x27, 0xee, 0xc5, - 0x1b, 0x08, 0xb5, 0xfc, 0x0e, 0xa0, 0x71, 0xd5, 0x3b, 0x80, 0x66, 0xf9, 0x1d, 0x80, 0x1b, 0x86, - 0xa2, 0x0b, 0x42, 0x7f, 0xea, 0xfd, 0xcf, 0x3e, 0xef, 0x7f, 0xde, 0x83, 0x91, 0xda, 0xcc, 0xdb, - 0x35, 0x3f, 0x37, 0x6f, 0xc3, 0x72, 0x61, 0xef, 0xa8, 0x0d, 0xcd, 0xdd, 0x67, 0xbf, 0x35, 0x5a, - 0x40, 0x1d, 0x58, 0x3c, 0xde, 0x3f, 0x38, 0xe0, 0xf7, 0x0c, 0xec, 0xea, 0xa1, 0xb1, 0xb9, 0x09, - 0x8b, 0xd4, 0xbb, 0xa0, 0x65, 0x68, 0x3d, 0xdd, 0xf9, 0x76, 0xdf, 0x1e, 0x2d, 0xd0, 0x9f, 0x3f, - 0x66, 0x3f, 0x2d, 0xd4, 0x83, 0xce, 0xe3, 0xc3, 0xa7, 0xfb, 0xf6, 0xe1, 0xce, 0xc1, 0xa8, 0xb1, - 0xf9, 0x1c, 0x3a, 0x32, 0x3b, 0xa4, 0x48, 0x3b, 0x07, 0xfb, 0xf6, 0x53, 0x8e, 0xbf, 0x6f, 0xdb, - 0x47, 0x36, 0xa7, 0xfb, 0x7c, 0xc7, 0x3e, 0x1c, 0x35, 0xe8, 0xaf, 0xc7, 0x87, 0x3f, 0x3a, 0x1a, - 0x35, 0x51, 0x17, 0xda, 0xdf, 0xed, 0xdb, 0xbb, 0x47, 0xc7, 0xfb, 0xa3, 0x45, 0x8a, 0xfb, 0x60, - 0x7f, 0xf7, 0xd9, 0xc3, 0x51, 0x8b, 0xad, 0x68, 0xef, 0xec, 0xed, 0x8f, 0x96, 0xb6, 0xff, 0xc3, - 0x82, 0xf6, 0x8b, 0xdc, 0x7f, 0x1c, 0x05, 0x19, 0xda, 0x07, 0x50, 0x6f, 0x0b, 0xd0, 0xf5, 0xa2, - 0xed, 0x5e, 0x7e, 0xa1, 0x30, 0x99, 0xd4, 0x4d, 0x09, 0xb5, 0x5a, 0x40, 0x8f, 0xa0, 0xab, 0x65, - 0xde, 0x68, 0x32, 0xbf, 0x44, 0x98, 0xbc, 0x53, 0x3b, 0x57, 0x50, 0xda, 0x07, 0x50, 0x1a, 0xa7, - 0x36, 0x54, 0x51, 0x5b, 0xb5, 0xa1, 0xaa, 0x82, 0xe2, 0x85, 0xed, 0x3f, 0x1d, 0x43, 0xf3, 0x45, - 0xee, 0xa3, 0x17, 0xd0, 0xd5, 0x9e, 0x59, 0xa1, 0xca, 0x95, 0x96, 0xda, 0x4e, 0xdd, 0x6b, 0xac, - 0xc9, 0xcf, 0xfe, 0xf9, 0x3f, 0xff, 0xac, 0xb1, 0x86, 0x87, 0x77, 0xce, 0x7f, 0xf5, 0x8e, 0xeb, - 0xfb, 0x52, 0x17, 0xef, 0x59, 0x9b, 0xc8, 0x86, 0xb6, 0x78, 0x49, 0x85, 0x36, 0x34, 0x1a, 0x5a, - 0x19, 0x37, 0xb9, 0x56, 0x81, 0x0b, 0xba, 0x1b, 0x8c, 0xee, 0x08, 0x77, 0x05, 0x5d, 0x1a, 0xa6, - 0x28, 0xcd, 0x5d, 0x68, 0xee, 0xba, 0x11, 0x42, 0xea, 0x7a, 0x59, 0xfa, 0x84, 0xc9, 0xaa, 0x01, - 0x13, 0x74, 0x10, 0xa3, 0xd3, 0xc3, 0x6d, 0x4a, 0x67, 0xea, 0x46, 0x94, 0x86, 0x07, 0x3d, 0xfd, - 0x89, 0x0b, 0x52, 0x0f, 0x2d, 0xaa, 0xef, 0x76, 0x26, 0x37, 0xea, 0x27, 0x05, 0xf9, 0x31, 0x23, - 0x8f, 0xf0, 0x88, 0x92, 0x67, 0x2f, 0x80, 0xc4, 0x85, 0x0d, 0x3d, 0xbc, 0x78, 0xd7, 0xa2, 0x0e, - 0x6f, 0x3e, 0x8b, 0x51, 0x87, 0x2f, 0x3f, 0x80, 0x31, 0x0e, 0x2f, 0x5c, 0x15, 0xdd, 0xf8, 0x4f, - 0xa1, 0xff, 0x9c, 0xbd, 0xaf, 0x12, 0xaf, 0x29, 0x14, 0x65, 0xf3, 0x31, 0x86, 0xa2, 0x5c, 0x7a, - 0x76, 0x81, 0x6f, 0x30, 0xca, 0x1b, 0x78, 0x85, 0x52, 0xe6, 0x6f, 0xb5, 0x7c, 0x8e, 0x42, 0xe9, - 0xff, 0x2e, 0xf4, 0x8d, 0x87, 0x13, 0xa8, 0x38, 0x7c, 0xdd, 0x8b, 0x8c, 0xc9, 0xbb, 0x73, 0x66, - 0xeb, 0xd6, 0xf2, 0x05, 0x0a, 0x7b, 0x6a, 0x41, 0xd7, 0x7a, 0x01, 0xa0, 0x1e, 0x20, 0x28, 0x2d, - 0xae, 0x3c, 0x7a, 0x50, 0x5a, 0x5c, 0x7d, 0xaf, 0x80, 0x57, 0xd9, 0x12, 0x7d, 0xd4, 0xe5, 0xd2, - 0xe5, 0xb4, 0x0e, 0xa0, 0x2d, 0xae, 0xda, 0x15, 0x7f, 0xcc, 0xf7, 0x06, 0x8a, 0x3f, 0xa5, 0x3b, - 0x79, 0x3c, 0x62, 0x04, 0x01, 0x75, 0x28, 0xc1, 0x80, 0x92, 0xf8, 0x6d, 0xe8, 0x6a, 0xb7, 0xcf, - 0x48, 0xdf, 0x4d, 0xe9, 0x4a, 0x5b, 0x19, 0x4a, 0xcd, 0x75, 0x35, 0x5e, 0x63, 0x94, 0x07, 0xa8, - 0x47, 0x29, 0x53, 0x2e, 0x30, 0xea, 0xcf, 0x01, 0xd4, 0x45, 0xa9, 0xe2, 0x42, 0xe5, 0xc6, 0x57, - 0x71, 0xa1, 0x7a, 0xaf, 0x2a, 0x75, 0x1c, 0x01, 0x25, 0x2d, 0xae, 0x13, 0x4e, 0x60, 0x60, 0xde, - 0x63, 0xa3, 0x77, 0x75, 0x0a, 0x95, 0x8b, 0xef, 0xc9, 0x7b, 0xf3, 0xa6, 0x4d, 0x9d, 0x44, 0x03, - 0xa6, 0x93, 0x8a, 0xec, 0x31, 0x2c, 0x17, 0x37, 0xac, 0x68, 0xac, 0x13, 0xd1, 0x2f, 0x62, 0x27, - 0xd7, 0x6b, 0x66, 0x64, 0x3d, 0xcf, 0x28, 0x77, 0xd1, 0x32, 0xa5, 0xcc, 0x1b, 0xed, 0x92, 0x28, - 0x7b, 0x98, 0x61, 0x12, 0xd5, 0xae, 0x67, 0x4b, 0x44, 0xf5, 0x4b, 0xda, 0x12, 0x51, 0x46, 0xc7, - 0x81, 0xae, 0x76, 0x7f, 0xa7, 0x24, 0x59, 0xbd, 0x7c, 0x54, 0x92, 0xac, 0xb9, 0xf0, 0xc3, 0xd7, - 0x18, 0xe9, 0x15, 0xee, 0xf2, 0xe2, 0x19, 0x89, 0xa4, 0xc9, 0xff, 0x0e, 0x80, 0x6a, 0xb9, 0x2a, - 0x61, 0x56, 0x9a, 0xf1, 0x4a, 0xfd, 0x4a, 0x1d, 0x5a, 0x7c, 0x9d, 0x91, 0x5e, 0xc5, 0x8c, 0xc9, - 0xac, 0x0d, 0xce, 0xc4, 0x79, 0xcf, 0xda, 0xbc, 0x6b, 0xa1, 0x97, 0x30, 0x50, 0xf8, 0xc7, 0x97, - 0x91, 0x77, 0xd5, 0x12, 0x93, 0xba, 0x29, 0x71, 0x80, 0x77, 0xd9, 0x2a, 0xd7, 0x30, 0x32, 0x57, - 0x49, 0x2f, 0x23, 0x8f, 0x5a, 0xe6, 0x4f, 0xa0, 0xab, 0x3d, 0x83, 0x52, 0x7c, 0xaa, 0xbe, 0x8d, - 0x9a, 0xd4, 0x35, 0x85, 0xcd, 0x90, 0x20, 0x0a, 0x81, 0xf4, 0xc2, 0x9d, 0x51, 0xda, 0x11, 0x0c, - 0xcc, 0xde, 0xa7, 0x52, 0xcb, 0xda, 0x46, 0xaa, 0x52, 0xcb, 0x39, 0x2d, 0x53, 0xe3, 0x2c, 0xbc, - 0xd3, 0xa8, 0x87, 0xa0, 0x29, 0x8d, 0xba, 0x45, 0x0f, 0x54, 0x8f, 0xba, 0xe5, 0x36, 0xab, 0x1e, - 0x75, 0x2b, 0x4d, 0x53, 0xf3, 0x4c, 0x7c, 0x19, 0x29, 0x19, 0x94, 0xc0, 0xb0, 0xd4, 0x16, 0x45, - 0xa5, 0x5d, 0x97, 0x3b, 0xa9, 0x93, 0xf7, 0xe7, 0xce, 0x8b, 0xf5, 0xde, 0x63, 0xeb, 0x8d, 0xf1, - 0xaa, 0x5a, 0xcf, 0x0d, 0x43, 0x2e, 0x26, 0x1e, 0x09, 0x40, 0x35, 0x39, 0x95, 0x1e, 0x54, 0xfa, - 0xa4, 0x93, 0x49, 0xdd, 0x94, 0x58, 0xc4, 0xd0, 0x36, 0xbe, 0x88, 0x0c, 0xb3, 0x53, 0xe8, 0x6a, - 0xad, 0x37, 0xc5, 0xb7, 0x6a, 0x57, 0x4f, 0xf1, 0xad, 0xae, 0x57, 0x67, 0xf0, 0x2d, 0x25, 0x59, - 0x18, 0x9f, 0xb0, 0xde, 0x1e, 0x5d, 0xe3, 0x3b, 0xe8, 0xc8, 0xa6, 0x1d, 0x2a, 0x2c, 0xa2, 0xd4, - 0xd9, 0x9b, 0x8c, 0xab, 0x13, 0x25, 0x33, 0x64, 0x0e, 0x35, 0x15, 0xb3, 0x94, 0x2e, 0x81, 0x61, - 0xa9, 0xf1, 0xa7, 0xe4, 0x51, 0xdf, 0x11, 0x9c, 0x98, 0xaf, 0xb9, 0xf8, 0xdd, 0x28, 0x7e, 0x87, - 0x2d, 0xb0, 0x8e, 0x98, 0x0c, 0x52, 0xf9, 0x21, 0x97, 0xc1, 0x5d, 0x0b, 0xcd, 0x4a, 0x8d, 0x40, - 0xd1, 0x51, 0xd2, 0x1c, 0x6d, 0x6d, 0x9f, 0x70, 0x52, 0x77, 0xa5, 0x81, 0x7f, 0xc0, 0xd6, 0x7a, - 0x07, 0x5d, 0x37, 0xd6, 0xa2, 0x56, 0x23, 0x6f, 0x74, 0xee, 0x5a, 0x68, 0x0a, 0x03, 0x93, 0xe4, - 0x5b, 0x2d, 0x55, 0x32, 0x4f, 0x84, 0x2a, 0x4b, 0xd1, 0x35, 0x7e, 0x5f, 0xeb, 0x9a, 0x1a, 0xfd, - 0x4f, 0x74, 0xab, 0x7e, 0xad, 0x52, 0x7f, 0x74, 0xb2, 0xa6, 0xaf, 0x29, 0x27, 0x31, 0x66, 0x8b, - 0xde, 0x40, 0x93, 0xea, 0xa2, 0xae, 0xc0, 0x61, 0x1e, 0xae, 0xa7, 0x57, 0xe6, 0x2a, 0x31, 0xab, - 0x29, 0xee, 0x55, 0x62, 0x56, 0x57, 0xcc, 0x4b, 0xe1, 0xf1, 0xc4, 0x8c, 0x55, 0xee, 0xa7, 0x1c, - 0x83, 0x6a, 0xc8, 0x49, 0xb9, 0x82, 0xbf, 0x31, 0xa7, 0xc6, 0x2d, 0xe5, 0x39, 0xb5, 0x15, 0xb0, - 0x34, 0x23, 0xb4, 0x22, 0x97, 0x0a, 0xa2, 0x13, 0x5e, 0x08, 0xa3, 0x6f, 0xa0, 0xc5, 0xca, 0x4b, - 0xb4, 0xa6, 0x52, 0x71, 0x55, 0xc5, 0x4e, 0xd6, 0x4b, 0x50, 0x33, 0x55, 0xc0, 0x2c, 0x76, 0xe5, - 0x91, 0xc8, 0x5a, 0xa7, 0x30, 0xe0, 0xc9, 0x9f, 0x2c, 0xc2, 0x94, 0xd1, 0x94, 0x6a, 0x44, 0x65, - 0x34, 0xe5, 0x7a, 0xcd, 0x74, 0x97, 0x3c, 0xff, 0xbb, 0x10, 0x38, 0xf7, 0xac, 0xcd, 0xe9, 0x12, - 0xfb, 0xe7, 0xc5, 0x67, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xc4, 0x0b, 0x0f, 0xf4, 0xa4, 0x31, - 0x00, 0x00, + // 4127 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x3b, 0x4d, 0x6f, 0x1c, 0x47, + 0x76, 0xec, 0xf9, 0xe0, 0x0c, 0xdf, 0x7c, 0xb2, 0xf8, 0xa1, 0xf1, 0x48, 0xb6, 0xb5, 0x15, 0xcb, + 0x90, 0x29, 0x9b, 0x52, 0xe8, 0x38, 0x5e, 0x2b, 0x91, 0x61, 0x92, 0x9a, 0xb5, 0x64, 0x73, 0x49, + 0xa1, 0x29, 0x59, 0xca, 0x22, 0xd9, 0x46, 0x4f, 0x77, 0x89, 0xec, 0xa8, 0xd9, 0x3d, 0xee, 0xee, + 0x21, 0xc5, 0xe4, 0x12, 0x2c, 0x72, 0x4a, 0x0e, 0x39, 0x04, 0x39, 0x27, 0xa7, 0x20, 0x40, 0x82, + 0x5c, 0x73, 0x0a, 0x90, 0x73, 0xae, 0x39, 0x04, 0x48, 0x72, 0x09, 0x90, 0x5f, 0xb0, 0xc8, 0x35, + 0x40, 0x50, 0x5f, 0x5d, 0x55, 0xdd, 0x3d, 0x5c, 0x69, 0x91, 0xec, 0x85, 0x98, 0x7a, 0xf5, 0xfa, + 0xbd, 0xaa, 0xf7, 0x5d, 0xaf, 0x8a, 0xd0, 0x7d, 0x3d, 0xf7, 0x93, 0x99, 0xb7, 0x3d, 0x4b, 0xe2, + 0x2c, 0x46, 0xcb, 0x7c, 0x34, 0x5e, 0x75, 0xa3, 0x28, 0xce, 0xdc, 0x2c, 0x88, 0xa3, 0x94, 0x4f, + 0xe1, 0x0d, 0x58, 0xdb, 0xf5, 0xfd, 0xfd, 0x79, 0x92, 0x90, 0xc8, 0xbb, 0xb4, 0x49, 0x3a, 0x8b, + 0xa3, 0x94, 0xe0, 0x9f, 0x42, 0x7f, 0xd7, 0xf7, 0x9f, 0xb8, 0x41, 0x62, 0x93, 0xef, 0xe7, 0x24, + 0xcd, 0xd0, 0x07, 0xd0, 0x9b, 0xba, 0x29, 0x71, 0x3c, 0x81, 0x3a, 0xb2, 0x6e, 0x5a, 0xb7, 0x57, + 0x6c, 0x13, 0x88, 0x3e, 0x84, 0xfe, 0xf7, 0xf3, 0x38, 0xd3, 0xd0, 0x6a, 0x0c, 0xad, 0x00, 0xc5, + 0xab, 0x30, 0xc8, 0xe9, 0x0b, 0x96, 0xaf, 0xa0, 0xb9, 0x1b, 0x92, 0x24, 0x43, 0x77, 0xa0, 0x91, + 0x5d, 0xce, 0x08, 0x63, 0xd0, 0xdf, 0xb9, 0xb6, 0x2d, 0xb6, 0xc2, 0x26, 0xf9, 0xdf, 0xa7, 0x97, + 0x33, 0x62, 0x33, 0x24, 0x34, 0x82, 0xd6, 0x19, 0x49, 0x53, 0xf7, 0x84, 0x08, 0x4e, 0x72, 0x88, + 0xaf, 0xc3, 0x4a, 0x8e, 0x8c, 0xfa, 0x00, 0x87, 0x47, 0xce, 0xde, 0xee, 0xc1, 0xee, 0xe1, 0xfe, + 0x64, 0xb8, 0x84, 0xff, 0xa1, 0x06, 0xad, 0x3d, 0x37, 0x74, 0x23, 0x8f, 0xd0, 0x9d, 0x65, 0x71, + 0xe6, 0x86, 0xce, 0x94, 0x03, 0x18, 0xe3, 0x86, 0x6d, 0x02, 0xd1, 0x6d, 0x18, 0x78, 0xa7, 0x6e, + 0x14, 0x11, 0x85, 0x57, 0x63, 0x78, 0x45, 0x30, 0xfa, 0x21, 0x5c, 0x9b, 0x91, 0xc8, 0x0f, 0xa2, + 0x13, 0xa7, 0xf8, 0x45, 0x9d, 0x7d, 0xb1, 0x68, 0x1a, 0xdd, 0x87, 0x51, 0x10, 0xb9, 0x5e, 0x16, + 0x9c, 0x93, 0xd2, 0xa7, 0x0d, 0xf6, 0xe9, 0xc2, 0x79, 0x2a, 0xf9, 0x0b, 0x37, 0x0c, 0x49, 0x96, + 0x7f, 0xd1, 0x64, 0x5f, 0x14, 0xa0, 0xe8, 0x4b, 0x18, 0xcf, 0x23, 0x2f, 0x8e, 0x5e, 0x06, 0xc9, + 0x19, 0xf1, 0x9d, 0xc2, 0x37, 0xcb, 0xec, 0x9b, 0x2b, 0x30, 0xf0, 0x6f, 0x02, 0xec, 0xb9, 0x91, + 0xb4, 0x8a, 0xdb, 0x30, 0x88, 0x62, 0x9f, 0x38, 0x81, 0x4f, 0xa2, 0x2c, 0x78, 0x19, 0x90, 0x44, + 0xd8, 0x45, 0x11, 0x8c, 0x7b, 0xd0, 0x61, 0xdf, 0x09, 0x6d, 0x7f, 0x0e, 0xcd, 0xfd, 0x53, 0x37, + 0x88, 0xd0, 0x3a, 0x34, 0x3d, 0xfa, 0x43, 0x7c, 0xc7, 0x07, 0x54, 0xad, 0x11, 0xc9, 0x2e, 0xe2, + 0xe4, 0x95, 0x54, 0xab, 0x18, 0xe2, 0x19, 0xb4, 0xf7, 0xf9, 0xd6, 0x53, 0xb4, 0x09, 0xcb, 0x5c, + 0x1a, 0xec, 0xe3, 0x9e, 0x2d, 0x46, 0x68, 0x0c, 0x6d, 0x29, 0x27, 0xf6, 0x79, 0xcf, 0xce, 0xc7, + 0x94, 0xb2, 0x10, 0x3f, 0xd3, 0x46, 0xcf, 0x96, 0x43, 0x4a, 0xcd, 0x0b, 0xe3, 0x94, 0xf8, 0x4c, + 0xd6, 0x3d, 0x5b, 0x8c, 0xf0, 0x3f, 0x5a, 0xb0, 0xb6, 0x4f, 0x7f, 0x0a, 0xbe, 0x6f, 0xbd, 0x77, + 0xba, 0x9e, 0x82, 0x3f, 0xe4, 0x63, 0xba, 0xff, 0x97, 0x71, 0x22, 0x6c, 0xa3, 0x6d, 0xf3, 0x01, + 0xba, 0x09, 0x1d, 0x9f, 0xa4, 0x59, 0x10, 0x31, 0x67, 0x65, 0x0b, 0x5a, 0xb1, 0x75, 0x10, 0xdb, + 0xfb, 0x59, 0x3c, 0x8f, 0x32, 0xa1, 0x67, 0x31, 0x42, 0x43, 0xa8, 0xbf, 0x24, 0x52, 0x91, 0xf4, + 0x27, 0xfe, 0x0a, 0xd6, 0xcd, 0xe5, 0x73, 0x15, 0xd0, 0xf5, 0x67, 0x89, 0x1b, 0xa5, 0x54, 0x30, + 0x71, 0xe4, 0x04, 0x7e, 0x3a, 0xb2, 0x6e, 0xd6, 0xe9, 0xfa, 0x0b, 0x60, 0xfc, 0x31, 0xf4, 0xf7, + 0xe3, 0x28, 0x22, 0x5e, 0x26, 0xf7, 0x3e, 0x86, 0x36, 0xdb, 0xe4, 0x3c, 0x09, 0xc4, 0xa6, 0xf3, + 0x31, 0xf5, 0xed, 0x1c, 0x5b, 0x68, 0xfb, 0x2e, 0xac, 0xee, 0x27, 0xc4, 0xcd, 0xc8, 0x61, 0xec, + 0x13, 0x8d, 0xc6, 0xcc, 0x4d, 0xd3, 0x8b, 0x38, 0xf1, 0x25, 0x0d, 0x39, 0xc6, 0x7f, 0x61, 0x01, + 0xd2, 0xbf, 0x10, 0x4b, 0xfe, 0x35, 0xe8, 0xa5, 0x84, 0xf8, 0xce, 0x59, 0x44, 0xce, 0xe2, 0x28, + 0xf0, 0xc4, 0x82, 0xbb, 0x14, 0xf8, 0x63, 0x01, 0x43, 0x1f, 0xc1, 0x30, 0x88, 0x82, 0x2c, 0x70, + 0xc3, 0xe0, 0x0f, 0x88, 0xef, 0x84, 0x91, 0x9f, 0x8e, 0x6a, 0x7c, 0x63, 0x1a, 0xfc, 0x20, 0xf2, + 0x53, 0x74, 0x17, 0xd6, 0x74, 0x54, 0x8f, 0x2e, 0xfb, 0x75, 0x26, 0x54, 0x81, 0xb4, 0xa9, 0x7d, + 0x3e, 0x83, 0xff, 0xd5, 0x82, 0xb6, 0x0c, 0x96, 0x86, 0x5a, 0xad, 0x82, 0x5a, 0x1f, 0x40, 0x27, + 0xbd, 0x70, 0x67, 0x8e, 0x17, 0x06, 0x24, 0xca, 0x98, 0xd6, 0xfb, 0x3b, 0xd7, 0x65, 0x2c, 0x93, + 0x24, 0xb6, 0x8f, 0x2f, 0xdc, 0xd9, 0x3e, 0x43, 0xb1, 0x75, 0x7c, 0x1e, 0x93, 0x5e, 0x91, 0xc8, + 0x71, 0x7d, 0x3f, 0x21, 0x69, 0xca, 0x96, 0xb4, 0x62, 0x9b, 0x40, 0xea, 0xf3, 0x3e, 0xf1, 0x82, + 0x33, 0x37, 0x74, 0x66, 0xa1, 0xeb, 0x91, 0x54, 0x58, 0x6e, 0x01, 0x8a, 0x31, 0x80, 0x62, 0x84, + 0x5a, 0x50, 0x3f, 0x38, 0x7c, 0x38, 0x5c, 0x42, 0x1d, 0x68, 0xed, 0x1f, 0x1d, 0x1e, 0x4e, 0x5e, + 0x3c, 0x1d, 0xd6, 0xa8, 0x8e, 0x1f, 0x92, 0x59, 0x9c, 0x06, 0xba, 0x8e, 0x17, 0x6d, 0x0f, 0xdf, + 0x81, 0x41, 0x8e, 0x2d, 0x74, 0x33, 0x82, 0x96, 0x5c, 0x2c, 0xc7, 0x96, 0x43, 0x6a, 0x80, 0x0f, + 0x83, 0xd4, 0x8b, 0xcf, 0x49, 0x42, 0xb5, 0x99, 0xbe, 0x7d, 0xf0, 0xf8, 0x0c, 0x36, 0x0a, 0x14, + 0x04, 0xd3, 0x1b, 0xb0, 0x12, 0xcd, 0xcf, 0x1c, 0x8a, 0x9f, 0x8a, 0x20, 0xa0, 0x00, 0xf8, 0x4f, + 0x2c, 0x40, 0x93, 0xd7, 0xc4, 0x9b, 0x67, 0x84, 0xee, 0x5f, 0xdb, 0x58, 0x9c, 0xf8, 0x24, 0x71, + 0x82, 0xdc, 0xf0, 0xe4, 0x98, 0x85, 0x07, 0x37, 0x60, 0x53, 0x22, 0xf0, 0x88, 0x21, 0xc2, 0xd0, + 0x9d, 0x11, 0x92, 0x38, 0xb3, 0xf9, 0xd4, 0x79, 0x45, 0x2e, 0x85, 0x46, 0x0c, 0x18, 0xa5, 0xfc, + 0xfd, 0xdc, 0x8d, 0xb2, 0x20, 0xbb, 0x14, 0x01, 0x3b, 0x1f, 0x53, 0x1f, 0xf8, 0x9a, 0x64, 0x22, + 0xe9, 0xbc, 0x89, 0x8c, 0xff, 0xc6, 0x02, 0xa4, 0x7f, 0x21, 0xb6, 0xfc, 0x10, 0xda, 0x22, 0x16, + 0x73, 0x7f, 0xed, 0xec, 0xdc, 0x96, 0x66, 0x55, 0xc6, 0xde, 0x16, 0xe3, 0x74, 0x12, 0x65, 0xc9, + 0xa5, 0x9d, 0x7f, 0x39, 0x3e, 0x80, 0x9e, 0x31, 0x45, 0xe3, 0x06, 0xdd, 0x15, 0x5f, 0x04, 0xfd, + 0x89, 0x6e, 0x41, 0xf3, 0xdc, 0x0d, 0xe7, 0x3c, 0x84, 0x76, 0x76, 0x06, 0x92, 0x8b, 0x64, 0xc1, + 0x67, 0xef, 0xd7, 0x7e, 0x68, 0xe1, 0x21, 0xf4, 0xbf, 0x26, 0xd9, 0xe3, 0xe8, 0x65, 0x2c, 0x36, + 0x86, 0xff, 0xad, 0x0e, 0x83, 0x1c, 0xa4, 0x2c, 0xe4, 0x9c, 0x24, 0x29, 0x0d, 0x68, 0xc2, 0x42, + 0xc4, 0x90, 0xca, 0x96, 0xa9, 0x5c, 0xca, 0x96, 0x8b, 0xde, 0x80, 0x21, 0x04, 0x8d, 0x79, 0x12, + 0x50, 0x4f, 0xa0, 0xae, 0xcc, 0x7e, 0x4b, 0xf5, 0x53, 0x1d, 0x48, 0xdb, 0x57, 0x80, 0x7c, 0xd6, + 0x0d, 0x92, 0x94, 0x45, 0x49, 0x39, 0x4b, 0x01, 0xe8, 0x0e, 0x2c, 0x33, 0xad, 0xa7, 0x2c, 0x56, + 0x76, 0x76, 0xd6, 0xe4, 0xfe, 0x8e, 0x18, 0x74, 0x9f, 0x46, 0x53, 0x5b, 0xa0, 0xa0, 0x1d, 0xa8, + 0x87, 0x91, 0x3f, 0x6a, 0x31, 0x79, 0xdf, 0xd4, 0xe4, 0xad, 0x6f, 0x70, 0xfb, 0x20, 0xf2, 0xb9, + 0x9c, 0x29, 0x32, 0x8d, 0xec, 0x6e, 0x18, 0xb8, 0xe9, 0x68, 0x85, 0x67, 0x36, 0x36, 0xd0, 0x33, + 0x1b, 0x18, 0x99, 0x0d, 0xdd, 0x83, 0x35, 0x59, 0x18, 0xb0, 0x50, 0x70, 0xea, 0xa6, 0xa7, 0x24, + 0x1d, 0x75, 0xd8, 0x7e, 0xab, 0xa6, 0xd0, 0x27, 0xd0, 0x92, 0x21, 0xab, 0x6b, 0xee, 0x41, 0xc4, + 0x2b, 0xb6, 0x3a, 0x89, 0x33, 0xfe, 0x1a, 0xda, 0x72, 0x85, 0x6f, 0xa1, 0xee, 0x83, 0xc8, 0x67, + 0x64, 0x34, 0x75, 0x7f, 0xc9, 0x0c, 0x93, 0x7a, 0xa2, 0xa6, 0xf2, 0xb7, 0x70, 0x67, 0x1b, 0xd6, + 0x8c, 0xef, 0xf3, 0xe8, 0x3e, 0x48, 0xc8, 0x6c, 0xce, 0x0b, 0xd4, 0x63, 0x2f, 0x4e, 0x78, 0x5e, + 0x5f, 0xb5, 0x41, 0x81, 0x69, 0xde, 0x9b, 0xd2, 0x3c, 0xc6, 0xfd, 0xb3, 0x6d, 0x8b, 0x11, 0xbe, + 0x06, 0x1b, 0x07, 0x41, 0x9a, 0x89, 0xc8, 0x1a, 0xe4, 0x51, 0x06, 0x7f, 0x03, 0x9b, 0xc5, 0x09, + 0xc1, 0xef, 0x1e, 0x80, 0x97, 0x43, 0x85, 0x2f, 0x0d, 0x8b, 0x21, 0xda, 0xd6, 0x70, 0xf0, 0x3f, + 0x5b, 0xb0, 0x4a, 0x89, 0x71, 0x13, 0x91, 0x1b, 0xd7, 0x62, 0x86, 0x65, 0xc6, 0x8c, 0xcf, 0xa0, + 0x19, 0x5f, 0x44, 0x24, 0x11, 0xf1, 0xff, 0xfd, 0x5c, 0xa6, 0x45, 0x1a, 0xdb, 0x47, 0x14, 0xcd, + 0xe6, 0xd8, 0xd4, 0x72, 0xc2, 0xe0, 0x2c, 0xc8, 0x44, 0x85, 0xc2, 0x07, 0x54, 0xbe, 0x41, 0xe4, + 0x85, 0x73, 0x9f, 0x38, 0xcc, 0x94, 0x44, 0xb8, 0x6f, 0xdb, 0x45, 0x30, 0xfe, 0x00, 0x9a, 0x8c, + 0x1e, 0x6a, 0x43, 0x63, 0xef, 0xe8, 0xe9, 0xa3, 0xe1, 0x12, 0x0d, 0xfa, 0x47, 0xcf, 0x0f, 0x87, + 0x16, 0x05, 0x3d, 0x99, 0x4c, 0xec, 0x61, 0x0d, 0xff, 0xa5, 0x05, 0x48, 0x5f, 0x88, 0x90, 0xca, + 0x97, 0xb9, 0x5f, 0x70, 0x89, 0x7c, 0x58, 0xb5, 0x68, 0x61, 0xf0, 0x7c, 0xc8, 0x6d, 0x5e, 0x7c, + 0x35, 0x7e, 0x0c, 0x1d, 0x0d, 0x5c, 0x61, 0x68, 0x1f, 0x98, 0x86, 0xd6, 0x37, 0xfd, 0x4e, 0xb7, + 0x33, 0x04, 0x43, 0xca, 0x94, 0x1e, 0x13, 0x72, 0x75, 0x7e, 0xc4, 0x35, 0x20, 0x60, 0x62, 0xcd, + 0xeb, 0xd0, 0xe4, 0x5e, 0xce, 0xeb, 0x01, 0x3e, 0xc8, 0x3f, 0x27, 0x4a, 0xce, 0xf8, 0x73, 0xf1, + 0x39, 0xd1, 0xb7, 0x8c, 0xa1, 0xc9, 0x43, 0x08, 0xdf, 0x71, 0x57, 0xae, 0x88, 0x62, 0xd9, 0x7c, + 0x0a, 0xff, 0x87, 0x05, 0x2d, 0xe1, 0x0a, 0xd4, 0x06, 0xd3, 0xcc, 0xcd, 0xe6, 0x32, 0xd3, 0x89, + 0x11, 0xfa, 0x18, 0xda, 0xa2, 0x2c, 0x4f, 0xc5, 0xe6, 0x94, 0x39, 0x09, 0xb8, 0x9d, 0x63, 0xa0, + 0x5b, 0xb0, 0xcc, 0x8a, 0x5d, 0x1e, 0xd2, 0x3a, 0x3b, 0x3d, 0x0d, 0x37, 0x88, 0x6c, 0x31, 0x49, + 0x4b, 0xc1, 0x69, 0x18, 0x7b, 0xaf, 0x4e, 0x49, 0x70, 0x72, 0x9a, 0x89, 0x28, 0xa7, 0x83, 0xf2, + 0xc8, 0xd8, 0xd4, 0x22, 0xa3, 0x16, 0x6b, 0x97, 0xcd, 0x58, 0x9b, 0x87, 0xa5, 0x96, 0x16, 0x96, + 0xf0, 0x37, 0xd0, 0x67, 0xfe, 0xa8, 0x8a, 0xd6, 0x62, 0x4c, 0xb6, 0x2a, 0x62, 0x72, 0x4e, 0xab, + 0xa6, 0xd3, 0xfa, 0x6b, 0x0b, 0xd0, 0xd1, 0x8c, 0x44, 0xff, 0x2f, 0xf5, 0xb2, 0xaa, 0x7b, 0xeb, + 0x46, 0xdd, 0x7b, 0x13, 0x3a, 0xb3, 0x79, 0x7a, 0xea, 0x88, 0x49, 0x9e, 0x7d, 0x75, 0x90, 0xac, + 0x8c, 0x9b, 0xaa, 0x32, 0x7e, 0x00, 0x6b, 0xc6, 0x3a, 0x85, 0x39, 0x7c, 0x08, 0x7d, 0xb3, 0x02, + 0x16, 0xeb, 0x2c, 0x40, 0xf1, 0x3f, 0xd5, 0xa0, 0xc9, 0x8c, 0x96, 0xd9, 0x5f, 0x12, 0x88, 0xa3, + 0xa3, 0x65, 0xf3, 0x81, 0x51, 0x0d, 0xd4, 0xcc, 0x6a, 0x40, 0x8f, 0x19, 0x75, 0x33, 0x66, 0xf4, + 0xa1, 0x16, 0xf8, 0xa2, 0xe2, 0xaf, 0x05, 0x3e, 0xfa, 0xaa, 0x2c, 0xb6, 0x26, 0xb3, 0xad, 0x4d, + 0x69, 0x2f, 0xa6, 0xe2, 0x2a, 0xc5, 0x19, 0xc6, 0x9e, 0x1b, 0x52, 0x66, 0xdc, 0x18, 0xf2, 0x31, + 0x7a, 0x0f, 0xc0, 0x63, 0x75, 0xb6, 0xef, 0xb8, 0x19, 0x33, 0x89, 0x86, 0xad, 0x41, 0xd0, 0x2d, + 0x68, 0xa4, 0x81, 0x4f, 0x46, 0x6d, 0x16, 0xc0, 0x56, 0x0d, 0x5f, 0x3d, 0x0e, 0x7c, 0x62, 0xb3, + 0x69, 0x6a, 0x2c, 0x41, 0xea, 0xc4, 0x17, 0x91, 0xc3, 0xa2, 0x00, 0x4b, 0x79, 0x6d, 0xdb, 0x80, + 0x51, 0x33, 0x3d, 0x8d, 0x43, 0x9f, 0xa5, 0xbd, 0x86, 0xcd, 0x7e, 0xe3, 0xbf, 0xb2, 0xa0, 0xcb, + 0x68, 0xd9, 0xe4, 0x2c, 0x3e, 0x77, 0x43, 0x43, 0x66, 0xd6, 0x62, 0x99, 0x15, 0x6a, 0x33, 0xbd, + 0xa2, 0xab, 0x17, 0x2a, 0x3a, 0x7d, 0xf7, 0x8d, 0xc2, 0xee, 0x8b, 0xcb, 0x6e, 0x96, 0x97, 0x8d, + 0x4f, 0x61, 0x99, 0x47, 0x26, 0xf4, 0x09, 0xc0, 0x74, 0x7e, 0xe9, 0x18, 0xd1, 0xb1, 0x67, 0x48, + 0xc4, 0xd6, 0x10, 0xd0, 0x5d, 0xe8, 0xa4, 0x24, 0x0c, 0x25, 0x7e, 0xad, 0x0a, 0x5f, 0xc7, 0xc0, + 0x9f, 0xca, 0xc8, 0xc9, 0x6a, 0x0f, 0x2a, 0x2f, 0x1a, 0x7a, 0x44, 0x59, 0xcb, 0x7e, 0x53, 0x1b, + 0x8e, 0x2f, 0x22, 0x71, 0xa8, 0xa5, 0x3f, 0xf1, 0xcf, 0x2c, 0xf1, 0xd5, 0xb3, 0x99, 0xef, 0x66, + 0x84, 0xa6, 0x71, 0xbe, 0x17, 0x8b, 0x19, 0x89, 0xc9, 0xef, 0xd1, 0x92, 0xcd, 0x67, 0xd1, 0x6f, + 0x43, 0x8f, 0x4b, 0x28, 0xe1, 0x82, 0x17, 0xf1, 0x6a, 0xdd, 0x5c, 0x1e, 0x9f, 0x7b, 0xb4, 0x64, + 0x9b, 0xc8, 0x7b, 0x7d, 0xe8, 0x72, 0xc0, 0x9c, 0x31, 0xc5, 0xff, 0x5e, 0x83, 0x06, 0x0d, 0x96, + 0x8b, 0x0f, 0x01, 0x6f, 0x54, 0xe2, 0x7d, 0x05, 0xdd, 0x30, 0xf2, 0xe5, 0x50, 0xc6, 0xc5, 0x1b, + 0x7a, 0x38, 0xa6, 0xe5, 0xc8, 0x93, 0xf9, 0xf4, 0x5b, 0x72, 0x29, 0xd2, 0x8e, 0xf1, 0x05, 0xe5, + 0x1f, 0x44, 0xd3, 0x78, 0x1e, 0xf9, 0x22, 0x37, 0xca, 0xa1, 0x4a, 0x11, 0x4d, 0x2d, 0x45, 0xd0, + 0xa8, 0xf1, 0x7a, 0xee, 0x3b, 0x66, 0xa8, 0xd4, 0x41, 0xe8, 0x63, 0x58, 0x4d, 0x89, 0x17, 0x47, + 0x7e, 0xca, 0x8f, 0x87, 0x5e, 0x46, 0x7c, 0xe6, 0x27, 0x3d, 0xbb, 0x3c, 0x51, 0x5d, 0xf3, 0x8d, + 0x1f, 0xc0, 0xa0, 0xb0, 0xec, 0x8a, 0xb4, 0xb8, 0xae, 0xa7, 0xc5, 0x15, 0x3d, 0x0d, 0xfe, 0x51, + 0x0d, 0x56, 0x9f, 0xd0, 0x93, 0x9c, 0x50, 0x0a, 0x0f, 0xa7, 0xff, 0x97, 0x31, 0x47, 0xf7, 0x9f, + 0x46, 0xc1, 0x7f, 0x64, 0x04, 0x68, 0x5e, 0x1d, 0x01, 0xb6, 0x60, 0x98, 0x10, 0x76, 0xde, 0x74, + 0x72, 0x52, 0x5c, 0x9c, 0x25, 0x38, 0xad, 0x74, 0x83, 0xb3, 0x33, 0xe2, 0x07, 0x6e, 0x46, 0xa1, + 0x8e, 0x47, 0xcf, 0x13, 0x21, 0x93, 0x6a, 0xdb, 0xae, 0x9a, 0xa2, 0x22, 0x40, 0xba, 0x08, 0x44, + 0xa4, 0xfe, 0x82, 0x1e, 0xf5, 0x33, 0x92, 0x44, 0x6e, 0xe8, 0x9c, 0xb9, 0x99, 0x77, 0x4a, 0x16, + 0xf8, 0x65, 0x09, 0x0d, 0xfd, 0x16, 0xf4, 0x59, 0x29, 0x9d, 0xce, 0x3d, 0x8f, 0xa4, 0xb4, 0x98, + 0xe2, 0x0e, 0x9a, 0x97, 0xd0, 0xf4, 0xc4, 0x78, 0xcc, 0x27, 0xed, 0x02, 0x2a, 0xfa, 0x9c, 0x56, + 0xaa, 0x67, 0x6e, 0x10, 0xd1, 0x8a, 0x9c, 0xbb, 0x5b, 0xbd, 0xc2, 0xdd, 0xec, 0x22, 0x16, 0xfa, + 0x02, 0x7a, 0x8c, 0xd4, 0x4b, 0x37, 0x08, 0xe7, 0x09, 0xab, 0xe0, 0x4a, 0x4c, 0x7f, 0xc4, 0xe7, + 0x6c, 0x13, 0x13, 0xff, 0xdc, 0x82, 0x81, 0x12, 0xc1, 0xe4, 0x9c, 0x1e, 0xe5, 0x6f, 0x41, 0x93, + 0xed, 0x67, 0xa1, 0xb3, 0xb3, 0x59, 0xf4, 0x05, 0x74, 0xf5, 0x0d, 0x08, 0x5f, 0xaf, 0xda, 0xe9, + 0xa3, 0x25, 0xdb, 0x40, 0x45, 0x5f, 0xbc, 0xd9, 0x4e, 0x1f, 0x2d, 0x55, 0xed, 0xb5, 0xab, 0xef, + 0x80, 0x19, 0x56, 0xf5, 0x56, 0x73, 0xae, 0x02, 0x75, 0xaf, 0x05, 0x4d, 0x42, 0x37, 0x88, 0x63, + 0xe8, 0x68, 0x47, 0x99, 0x85, 0x85, 0x97, 0x16, 0x76, 0x6a, 0x66, 0xd8, 0xd1, 0xea, 0xa0, 0x46, + 0xa9, 0x0e, 0xe2, 0x8d, 0xc7, 0xa6, 0xd6, 0x78, 0xc4, 0x9f, 0xc2, 0x06, 0x8b, 0x7a, 0x44, 0xb5, + 0xc4, 0x7f, 0xf1, 0x49, 0x7d, 0x04, 0x9b, 0xc5, 0x8f, 0x44, 0xe3, 0xeb, 0x00, 0x10, 0x9f, 0x31, + 0x5c, 0xf7, 0xaa, 0x06, 0xc4, 0x15, 0x0e, 0x8c, 0x3f, 0x83, 0x35, 0x83, 0x9a, 0xf0, 0x82, 0xf7, + 0x60, 0x28, 0x51, 0x9c, 0x38, 0x72, 0x58, 0x92, 0xb5, 0xb4, 0x24, 0x9b, 0x2f, 0x6f, 0x37, 0x0c, + 0x8d, 0x53, 0x07, 0x9e, 0xc3, 0xb5, 0xd2, 0x8c, 0x20, 0xfa, 0x31, 0xac, 0xb2, 0x68, 0x4f, 0xfc, + 0xdc, 0x6f, 0x65, 0x79, 0x5d, 0x9e, 0xa0, 0xd8, 0x82, 0xb3, 0x86, 0xcd, 0x9b, 0x6e, 0xe5, 0x09, + 0xfc, 0x09, 0xac, 0x72, 0xb6, 0xfa, 0x05, 0xc3, 0xc2, 0x53, 0x14, 0x5e, 0x97, 0x42, 0x34, 0xee, + 0x0b, 0xfe, 0xb8, 0x46, 0xc1, 0x69, 0x16, 0x27, 0x46, 0x57, 0xf1, 0x8d, 0x5a, 0x84, 0x7a, 0xeb, + 0xb1, 0x66, 0xb6, 0x1e, 0xd1, 0xb7, 0xd0, 0xa1, 0x29, 0x65, 0xea, 0x7a, 0xaf, 0xe6, 0x33, 0x99, + 0x83, 0xb6, 0xa4, 0xd5, 0x96, 0x39, 0xd2, 0x8c, 0xb4, 0xc7, 0x91, 0x79, 0x46, 0x82, 0x30, 0x07, + 0xa0, 0x1f, 0xb0, 0x9b, 0x18, 0xc7, 0x77, 0x33, 0x77, 0xea, 0xa6, 0xbc, 0x2d, 0xdb, 0x65, 0x09, + 0xe6, 0xa1, 0x00, 0x89, 0xe4, 0xa0, 0x53, 0xf8, 0x45, 0xc9, 0xa1, 0xab, 0x27, 0x07, 0x42, 0x6d, + 0x42, 0x5b, 0x93, 0xea, 0x94, 0x26, 0x1c, 0x2c, 0x3a, 0xa0, 0x42, 0x0c, 0x12, 0xc8, 0xda, 0x9f, + 0x1f, 0xd1, 0x98, 0x2d, 0x90, 0x64, 0x23, 0x81, 0x9f, 0xaa, 0x07, 0x12, 0x2e, 0x1b, 0x9f, 0x0f, + 0x01, 0x1d, 0x93, 0xec, 0x20, 0x3e, 0x39, 0x20, 0xe7, 0xaa, 0xa4, 0xdf, 0x86, 0x95, 0x30, 0x3e, + 0x71, 0x42, 0x0a, 0x13, 0xf7, 0x35, 0xf9, 0x89, 0x27, 0xc7, 0x55, 0x28, 0x78, 0x03, 0xd6, 0x0c, + 0x2a, 0x42, 0x95, 0xab, 0x30, 0x38, 0x3e, 0x9d, 0x67, 0x7e, 0x7c, 0x21, 0x2f, 0x16, 0xe8, 0xd9, + 0x4d, 0x81, 0x04, 0xda, 0x6f, 0xc0, 0xe6, 0xf1, 0x7c, 0x9a, 0x7a, 0x49, 0x30, 0x25, 0xe6, 0x09, + 0x7c, 0x0c, 0x6d, 0xf2, 0x3a, 0x48, 0xb3, 0x20, 0x3a, 0x61, 0xcb, 0x68, 0xdb, 0xf9, 0x98, 0x5a, + 0x7f, 0xfe, 0x15, 0xbb, 0x10, 0xca, 0xad, 0xff, 0x7d, 0x78, 0x37, 0x9f, 0xa1, 0xd1, 0x28, 0xdd, + 0xf5, 0x3c, 0x32, 0xcb, 0x88, 0x2f, 0x11, 0x1e, 0xc0, 0x86, 0x89, 0xa0, 0x5d, 0x86, 0xc9, 0x33, + 0x77, 0xe6, 0xbe, 0x12, 0xc5, 0x56, 0xdb, 0x36, 0x81, 0xf8, 0x7f, 0x6a, 0xd0, 0xa5, 0x9f, 0x49, + 0xb2, 0xe8, 0x9d, 0x92, 0xdf, 0xb7, 0xd8, 0xf8, 0xb1, 0x59, 0xa5, 0xd6, 0x0a, 0x55, 0xea, 0x95, + 0x79, 0x7b, 0x51, 0xbf, 0x51, 0xd5, 0x07, 0x4d, 0xbd, 0x3e, 0x28, 0x76, 0x31, 0x97, 0x2b, 0xba, + 0x98, 0x9b, 0xb0, 0x9c, 0xb0, 0x16, 0x93, 0x38, 0x22, 0x8a, 0x11, 0x4d, 0xf1, 0xfc, 0x28, 0xe5, + 0x24, 0xc4, 0x23, 0xc1, 0x39, 0x95, 0x76, 0x9b, 0x71, 0x2d, 0xc1, 0xe9, 0x19, 0x4a, 0xc0, 0x52, + 0x71, 0xdb, 0xb2, 0xc2, 0xaf, 0xa3, 0x4c, 0x28, 0xda, 0x06, 0x24, 0xc3, 0xa8, 0x46, 0x95, 0x77, + 0xc6, 0x2a, 0x66, 0xe8, 0x1a, 0x72, 0xa8, 0xa4, 0xdc, 0xe1, 0x65, 0x46, 0x11, 0x8e, 0xff, 0xd6, + 0x82, 0x8e, 0x96, 0x65, 0x7e, 0xc9, 0xbe, 0xaf, 0x2e, 0xe3, 0x7a, 0x41, 0xc6, 0x45, 0x69, 0x36, + 0x2a, 0xa4, 0xf9, 0x21, 0xf4, 0x45, 0x5a, 0x73, 0x12, 0xe2, 0xa6, 0xb1, 0x4c, 0x38, 0x05, 0x28, + 0xfe, 0xfb, 0x3a, 0x5f, 0xad, 0xc8, 0xc4, 0xbf, 0x5a, 0x63, 0x51, 0x2a, 0x6f, 0x1a, 0x2a, 0xbf, + 0x0d, 0x03, 0x43, 0xb5, 0xc4, 0x17, 0x1a, 0x2f, 0x82, 0x69, 0x25, 0xad, 0x54, 0x9b, 0x09, 0x6d, + 0xeb, 0xa0, 0x92, 0xb0, 0xa0, 0x42, 0x58, 0x37, 0xa1, 0x91, 0xc4, 0x21, 0x61, 0x2a, 0xed, 0xab, + 0x46, 0x8c, 0x1d, 0x87, 0xc4, 0x66, 0x33, 0x34, 0xd3, 0x14, 0xcc, 0x82, 0xf8, 0xac, 0xfb, 0xb9, + 0x62, 0x97, 0x27, 0xa8, 0xa3, 0xea, 0x66, 0x91, 0x8d, 0x7a, 0xfc, 0x1e, 0xc5, 0x00, 0xd2, 0x43, + 0x70, 0xe2, 0xcc, 0x12, 0x12, 0x9c, 0xb9, 0x27, 0x64, 0xd4, 0x67, 0x28, 0x1a, 0x44, 0xb9, 0xd2, + 0x40, 0x73, 0x25, 0xfc, 0xdf, 0x35, 0x68, 0x3e, 0x4d, 0x5c, 0x9f, 0xd0, 0x93, 0xde, 0x19, 0xf5, + 0x78, 0x67, 0xf1, 0xc9, 0xcb, 0xd6, 0x31, 0xe8, 0x07, 0x99, 0xf6, 0x41, 0xad, 0xf2, 0x03, 0x0d, + 0x43, 0xd3, 0x4f, 0xdd, 0xd0, 0xcf, 0x55, 0x3a, 0xd5, 0x2c, 0xa1, 0x69, 0x5a, 0x42, 0xbe, 0x9f, + 0x65, 0x3d, 0x34, 0x48, 0xd9, 0xb7, 0x16, 0xca, 0xfe, 0x26, 0x74, 0x08, 0xbf, 0x4e, 0x61, 0xdd, + 0x02, 0x6e, 0x09, 0x3a, 0x28, 0x3f, 0x2c, 0xac, 0x5c, 0x7d, 0x58, 0xb8, 0x0f, 0x5d, 0x8f, 0x1a, + 0x06, 0x49, 0x66, 0x6e, 0x92, 0x71, 0x53, 0x58, 0xdc, 0xd0, 0x30, 0x70, 0xf1, 0x1d, 0x58, 0x63, + 0x52, 0x7f, 0x14, 0xd0, 0x0c, 0x75, 0xa9, 0x1d, 0x87, 0x78, 0xcf, 0xd4, 0xd2, 0x7a, 0xa6, 0xf8, + 0x01, 0xac, 0x9b, 0xc8, 0x22, 0x3d, 0xde, 0x82, 0xe5, 0x8c, 0xc2, 0x4b, 0xc7, 0x05, 0x86, 0x6d, + 0x8b, 0x49, 0xfc, 0x67, 0x16, 0xf4, 0x28, 0x24, 0x88, 0x4e, 0x0e, 0x28, 0xbd, 0x94, 0x0a, 0xfc, + 0xcc, 0x7d, 0xed, 0xd0, 0x63, 0xbb, 0xec, 0x4f, 0xc8, 0x31, 0x7b, 0x8b, 0xe0, 0xbe, 0x76, 0xa6, + 0x73, 0x59, 0xb9, 0xc9, 0x21, 0x35, 0xc3, 0x84, 0xa4, 0x24, 0xa1, 0x45, 0x13, 0xfb, 0x94, 0x07, + 0x12, 0x13, 0x48, 0x1d, 0x24, 0x07, 0x50, 0x22, 0x5c, 0xa1, 0x06, 0x0c, 0xef, 0xf0, 0x0d, 0xe5, + 0x0b, 0x7a, 0x93, 0xf2, 0xf4, 0xef, 0x2c, 0xd8, 0x28, 0x7c, 0x24, 0xc4, 0xb0, 0x0b, 0xcb, 0x4c, + 0x4e, 0x52, 0x0c, 0x1f, 0xe9, 0x62, 0x28, 0xa1, 0x6f, 0xf3, 0xa1, 0x68, 0xf7, 0xf2, 0x0f, 0xc7, + 0x4f, 0xa0, 0xa3, 0x81, 0x2b, 0x4a, 0x97, 0x3b, 0x66, 0xbb, 0x77, 0xa3, 0x9a, 0x85, 0x56, 0xd1, + 0x7c, 0x07, 0xdd, 0x67, 0xd1, 0xf4, 0x97, 0x78, 0x63, 0x80, 0x6e, 0xc0, 0x4a, 0x42, 0xc4, 0x61, + 0x5c, 0x14, 0x32, 0x0a, 0x80, 0x07, 0xd0, 0x13, 0x74, 0xd5, 0xad, 0xf4, 0xb3, 0x28, 0x8c, 0xbd, + 0x57, 0x6f, 0x7a, 0x2b, 0xfd, 0x13, 0x40, 0xfa, 0x07, 0xaa, 0xd4, 0x9a, 0x33, 0x68, 0xa1, 0xd4, + 0x92, 0x40, 0x56, 0x6a, 0xbd, 0x0f, 0x1d, 0x1d, 0x85, 0x5f, 0x62, 0x81, 0x42, 0xc0, 0x7f, 0x6a, + 0xc1, 0xe0, 0x79, 0x90, 0x9d, 0xfa, 0x89, 0x7b, 0xf1, 0x06, 0x4a, 0x2d, 0xbe, 0x10, 0xa8, 0x5d, + 0xf5, 0x42, 0xa0, 0x5e, 0x7c, 0x21, 0xe0, 0x86, 0xa1, 0xe8, 0x8f, 0xd0, 0x9f, 0x7a, 0x67, 0xb4, + 0xc7, 0x3b, 0xa3, 0xf7, 0x61, 0xa8, 0x16, 0xf3, 0x76, 0x6d, 0xd1, 0xad, 0xdb, 0xb0, 0x92, 0xfb, + 0x3b, 0x6a, 0x41, 0x7d, 0xef, 0xd9, 0xef, 0x0c, 0x97, 0x50, 0x1b, 0x1a, 0xc7, 0x93, 0x83, 0x03, + 0x7e, 0x03, 0xc1, 0x2e, 0x25, 0x6a, 0x5b, 0x5b, 0xd0, 0xa0, 0xd1, 0x05, 0xad, 0x40, 0xf3, 0xe9, + 0xee, 0xb7, 0x13, 0x7b, 0xb8, 0x44, 0x7f, 0xfe, 0x98, 0xfd, 0xb4, 0x50, 0x17, 0xda, 0x8f, 0x0f, + 0x9f, 0x4e, 0xec, 0xc3, 0xdd, 0x83, 0x61, 0x6d, 0xeb, 0x39, 0xb4, 0x65, 0xdd, 0x48, 0x91, 0x76, + 0x0f, 0x26, 0xf6, 0x53, 0x8e, 0x3f, 0xb1, 0xed, 0x23, 0x9b, 0xd3, 0x7d, 0xbe, 0x6b, 0x1f, 0x0e, + 0x6b, 0xf4, 0xd7, 0xe3, 0xc3, 0x1f, 0x1d, 0x0d, 0xeb, 0xa8, 0x03, 0xad, 0xef, 0x26, 0xf6, 0xde, + 0xd1, 0xf1, 0x64, 0xd8, 0xa0, 0xb8, 0x0f, 0x27, 0x7b, 0xcf, 0xbe, 0x1e, 0x36, 0x19, 0x47, 0x7b, + 0x77, 0x7f, 0x32, 0x5c, 0xde, 0xf9, 0x4f, 0x0b, 0x5a, 0x2f, 0xe6, 0xfe, 0xe3, 0x28, 0xc8, 0xd0, + 0x04, 0x40, 0xbd, 0x3a, 0x40, 0xef, 0xe4, 0x0d, 0xf9, 0xe2, 0xdb, 0x85, 0xf1, 0xb8, 0x6a, 0x4a, + 0x98, 0xd5, 0x12, 0x7a, 0x04, 0x1d, 0xad, 0x26, 0x47, 0xe3, 0xc5, 0x87, 0x87, 0xf1, 0xf5, 0xca, + 0xb9, 0x9c, 0xd2, 0x04, 0x40, 0x59, 0x9c, 0x5a, 0x50, 0xc9, 0x6c, 0xd5, 0x82, 0xca, 0x06, 0x8a, + 0x97, 0x76, 0x7e, 0x3e, 0x82, 0xfa, 0x8b, 0xb9, 0x8f, 0x5e, 0x40, 0x47, 0x7b, 0xed, 0x85, 0x4a, + 0x97, 0x5d, 0x6a, 0x39, 0x55, 0x8f, 0xc2, 0xc6, 0x3f, 0xfb, 0x97, 0xff, 0xfa, 0xf3, 0xda, 0x3a, + 0x1e, 0xdc, 0x3d, 0xff, 0xf5, 0xbb, 0xae, 0xef, 0x4b, 0x5b, 0xbc, 0x6f, 0x6d, 0x21, 0x1b, 0x5a, + 0xe2, 0x41, 0x17, 0xda, 0xd4, 0x68, 0x68, 0x07, 0xbc, 0xf1, 0xb5, 0x12, 0x5c, 0xd0, 0xdd, 0x64, + 0x74, 0x87, 0xb8, 0x23, 0xe8, 0xd2, 0x34, 0x45, 0x69, 0xee, 0x41, 0x7d, 0xcf, 0x8d, 0x10, 0x52, + 0x17, 0xcf, 0x32, 0x26, 0x8c, 0xd7, 0x0c, 0x98, 0xa0, 0x83, 0x18, 0x9d, 0x2e, 0x6e, 0x51, 0x3a, + 0x53, 0x37, 0xa2, 0x34, 0x3c, 0xe8, 0xea, 0x8f, 0x5f, 0x90, 0x7a, 0x82, 0x51, 0x7e, 0xd1, 0x33, + 0xbe, 0x51, 0x3d, 0x29, 0xc8, 0x8f, 0x18, 0x79, 0x84, 0x87, 0x94, 0x3c, 0x7b, 0x1b, 0x24, 0xae, + 0x72, 0xe8, 0xe6, 0xc5, 0x8b, 0x17, 0xb5, 0x79, 0xf3, 0xc1, 0x8c, 0xda, 0x7c, 0xf1, 0x69, 0x8c, + 0xb1, 0x79, 0x11, 0xaa, 0xe8, 0xc2, 0x7f, 0x0a, 0xbd, 0xe7, 0xec, 0xe5, 0x95, 0x78, 0x67, 0xa1, + 0x28, 0x9b, 0xcf, 0x34, 0x14, 0xe5, 0xc2, 0x83, 0x0c, 0x7c, 0x83, 0x51, 0xde, 0xc4, 0xab, 0x94, + 0x32, 0x7f, 0xc5, 0xe5, 0x73, 0x14, 0x4a, 0xff, 0xf7, 0xa1, 0x67, 0x3c, 0xa9, 0x40, 0xf9, 0xe6, + 0xab, 0xde, 0x6a, 0x8c, 0xdf, 0x5d, 0x30, 0x5b, 0xc5, 0xcb, 0x17, 0x28, 0xec, 0x11, 0x06, 0xe5, + 0xf5, 0x02, 0x40, 0x3d, 0x4d, 0x50, 0x56, 0x5c, 0x7a, 0x0e, 0xa1, 0xac, 0xb8, 0xfc, 0x92, 0x01, + 0xaf, 0x31, 0x16, 0x3d, 0xd4, 0xe1, 0xda, 0xe5, 0xb4, 0x0e, 0xa0, 0x25, 0x2e, 0xe1, 0x95, 0x7c, + 0xcc, 0x97, 0x08, 0x4a, 0x3e, 0x85, 0xdb, 0x7a, 0x3c, 0x64, 0x04, 0x01, 0xb5, 0x29, 0xc1, 0x80, + 0x92, 0xf8, 0x5d, 0xe8, 0x68, 0xf7, 0xd2, 0x48, 0x5f, 0x4d, 0xe1, 0xb2, 0x5b, 0x39, 0x4a, 0xc5, + 0x45, 0x36, 0x5e, 0x67, 0x94, 0xfb, 0xa8, 0x4b, 0x29, 0x53, 0x29, 0x30, 0xea, 0xcf, 0x01, 0xd4, + 0x15, 0xaa, 0x92, 0x42, 0xe9, 0x2e, 0x58, 0x49, 0xa1, 0x7c, 0xe3, 0x2a, 0x6d, 0x1c, 0x01, 0x25, + 0x2d, 0x2e, 0x1a, 0x4e, 0xa0, 0x6f, 0xde, 0x70, 0xa3, 0x77, 0x75, 0x0a, 0xa5, 0x2b, 0xf1, 0xf1, + 0x7b, 0x8b, 0xa6, 0x4d, 0x9b, 0x44, 0x7d, 0x66, 0x93, 0x8a, 0xec, 0x31, 0xac, 0xe4, 0x77, 0xaf, + 0x68, 0xa4, 0x13, 0xd1, 0xaf, 0x68, 0xc7, 0xef, 0x54, 0xcc, 0xc8, 0x93, 0x3e, 0xa3, 0xdc, 0x41, + 0x2b, 0x94, 0x32, 0x6f, 0xc1, 0x4b, 0xa2, 0xec, 0xc9, 0x86, 0x49, 0x54, 0xbb, 0xb8, 0x2d, 0x10, + 0xd5, 0xaf, 0x6f, 0x0b, 0x44, 0x19, 0x1d, 0x07, 0x3a, 0xda, 0xcd, 0x9e, 0xd2, 0x64, 0xf9, 0x5a, + 0x52, 0x69, 0xb2, 0xe2, 0x2a, 0x10, 0x5f, 0x63, 0xa4, 0x57, 0x79, 0xc8, 0x8b, 0x67, 0x24, 0x92, + 0x2e, 0xff, 0x7b, 0x00, 0xaa, 0x19, 0xab, 0x94, 0x59, 0x6a, 0xd3, 0x2b, 0xf3, 0x2b, 0xf4, 0x6e, + 0xf1, 0x3b, 0x8c, 0xf4, 0x1a, 0x66, 0x42, 0x66, 0x0d, 0x72, 0xa6, 0xce, 0xfb, 0xd6, 0xd6, 0x3d, + 0x0b, 0xbd, 0x84, 0xbe, 0xc2, 0x3f, 0xbe, 0x8c, 0xbc, 0xab, 0x58, 0x8c, 0xab, 0xa6, 0xc4, 0x06, + 0xde, 0x65, 0x5c, 0xae, 0x61, 0x64, 0x72, 0x49, 0x2f, 0x23, 0x8f, 0x7a, 0xe6, 0x4f, 0xa0, 0xa3, + 0x3d, 0x90, 0x52, 0x72, 0x2a, 0xbf, 0x9a, 0x1a, 0x57, 0xb5, 0x8b, 0xcd, 0x94, 0x20, 0x0e, 0x02, + 0xe9, 0x85, 0x3b, 0xa3, 0xb4, 0x23, 0xe8, 0x9b, 0x5d, 0x51, 0x65, 0x96, 0x95, 0x2d, 0x56, 0x65, + 0x96, 0x0b, 0x9a, 0xa9, 0xc6, 0x5e, 0x78, 0x0f, 0x52, 0x4f, 0x41, 0x53, 0x9a, 0x75, 0xf3, 0xee, + 0xa8, 0x9e, 0x75, 0x8b, 0x0d, 0x58, 0x3d, 0xeb, 0x96, 0xda, 0xa9, 0xe6, 0x9e, 0x38, 0x1b, 0xa9, + 0x19, 0x94, 0xc0, 0xa0, 0xd0, 0x30, 0x45, 0x85, 0x55, 0x17, 0x7b, 0xac, 0xe3, 0xf7, 0x17, 0xce, + 0x0b, 0x7e, 0xef, 0x31, 0x7e, 0x23, 0xbc, 0xa6, 0xf8, 0xb9, 0x61, 0xc8, 0xd5, 0xc4, 0x33, 0x01, + 0xa8, 0xf6, 0xa7, 0xb2, 0x83, 0x52, 0x07, 0x75, 0x3c, 0xae, 0x9a, 0x12, 0x4c, 0x0c, 0x6b, 0xe3, + 0x4c, 0x64, 0x9a, 0x9d, 0x42, 0x47, 0x6b, 0xca, 0x29, 0xb9, 0x95, 0xfb, 0x7d, 0x4a, 0x6e, 0x55, + 0x5d, 0x3c, 0x43, 0x6e, 0x29, 0xc9, 0xc2, 0xf8, 0x84, 0x75, 0xfd, 0x28, 0x8f, 0xef, 0xa0, 0x2d, + 0xdb, 0x79, 0x28, 0xf7, 0x88, 0x42, 0xcf, 0x6f, 0x3c, 0x2a, 0x4f, 0x14, 0xdc, 0x90, 0x05, 0xd4, + 0x54, 0xcc, 0x52, 0xba, 0x04, 0x06, 0x85, 0x96, 0xa0, 0xd2, 0x47, 0x75, 0xaf, 0x70, 0x6c, 0xbe, + 0xf3, 0xe2, 0xb7, 0xa6, 0xf8, 0x3a, 0x63, 0xb0, 0x81, 0x98, 0x0e, 0x52, 0xf9, 0x21, 0xd7, 0xc1, + 0x3d, 0x0b, 0x39, 0x1a, 0x1b, 0xde, 0x43, 0xac, 0x60, 0x63, 0x34, 0x17, 0xc7, 0x3d, 0xe3, 0xdd, + 0xfa, 0x02, 0x06, 0x2e, 0xfb, 0xe4, 0x9e, 0x85, 0x66, 0x85, 0x4e, 0xa3, 0x68, 0x59, 0x69, 0x91, + 0xbc, 0xb2, 0x11, 0x39, 0xae, 0xba, 0x4d, 0xc1, 0x3f, 0x60, 0xbc, 0xae, 0xa3, 0x77, 0x0c, 0x5e, + 0xd4, 0x2d, 0xe5, 0x65, 0xd2, 0x3d, 0x0b, 0x4d, 0xa1, 0x6f, 0x92, 0x7c, 0x2b, 0x56, 0x05, 0xff, + 0x47, 0xa8, 0xc4, 0x8a, 0xf2, 0xf8, 0x43, 0xad, 0xf5, 0x6a, 0x34, 0x58, 0xd1, 0xad, 0x6a, 0x5e, + 0x85, 0x06, 0xec, 0x78, 0x5d, 0xe7, 0x29, 0x27, 0x31, 0x66, 0x4c, 0x6f, 0xa0, 0x71, 0x99, 0xa9, + 0x2b, 0x70, 0x58, 0x08, 0xed, 0xea, 0x47, 0x7f, 0x55, 0xf9, 0x55, 0x74, 0x0f, 0x54, 0xe5, 0x57, + 0xd5, 0x2d, 0x90, 0xca, 0xe3, 0x95, 0x1f, 0x6b, 0x0d, 0x9c, 0x72, 0x0c, 0x6a, 0x82, 0x27, 0xc5, + 0x16, 0xc1, 0x8d, 0x05, 0x87, 0xe8, 0x42, 0x21, 0x55, 0x79, 0xc4, 0x96, 0x7e, 0x8a, 0x56, 0x25, + 0xab, 0x20, 0x3a, 0xe1, 0x27, 0x6d, 0xf4, 0x0d, 0x34, 0xd9, 0xf9, 0x15, 0xad, 0xab, 0x5a, 0x5f, + 0x1d, 0x93, 0xc7, 0x1b, 0x05, 0xa8, 0x59, 0x8b, 0x60, 0x96, 0x1c, 0xe7, 0x91, 0x28, 0x8b, 0xa7, + 0xd0, 0xe7, 0xd5, 0xa5, 0x3c, 0xe5, 0x29, 0xaf, 0x2c, 0x1c, 0x42, 0x95, 0x57, 0x16, 0x0f, 0x84, + 0x66, 0x3c, 0xe6, 0x05, 0xe6, 0x85, 0xc0, 0xb9, 0x6f, 0x6d, 0x4d, 0x97, 0xd9, 0x7f, 0x98, 0x7c, + 0xfa, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x2e, 0xd9, 0x46, 0x8c, 0x32, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -5135,6 +5245,8 @@ type XudClient interface { // its users a real time view of the orders available to them would subscribe to this streaming // call to be alerted as new orders are added and expired orders are removed. SubscribeOrders(ctx context.Context, in *SubscribeOrdersRequest, opts ...grpc.CallOption) (Xud_SubscribeOrdersClient, error) + // Subscribes to alerts such as low balance. + SubscribeAlerts(ctx context.Context, in *SubscribeAlertsRequest, opts ...grpc.CallOption) (Xud_SubscribeAlertsClient, error) // Subscribes to failed swaps. By default, only swaps that are initiated by a remote peer are // transmitted unless a flag is set to include swaps initiated by the local node. This call allows // the client to get real-time notifications when swap attempts are failing. It can be used for @@ -5442,8 +5554,40 @@ func (x *xudSubscribeOrdersClient) Recv() (*OrderUpdate, error) { return m, nil } +func (c *xudClient) SubscribeAlerts(ctx context.Context, in *SubscribeAlertsRequest, opts ...grpc.CallOption) (Xud_SubscribeAlertsClient, error) { + stream, err := c.cc.NewStream(ctx, &_Xud_serviceDesc.Streams[2], "/xudrpc.Xud/SubscribeAlerts", opts...) + if err != nil { + return nil, err + } + x := &xudSubscribeAlertsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Xud_SubscribeAlertsClient interface { + Recv() (*Alert, error) + grpc.ClientStream +} + +type xudSubscribeAlertsClient struct { + grpc.ClientStream +} + +func (x *xudSubscribeAlertsClient) Recv() (*Alert, error) { + m := new(Alert) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + func (c *xudClient) SubscribeSwapFailures(ctx context.Context, in *SubscribeSwapsRequest, opts ...grpc.CallOption) (Xud_SubscribeSwapFailuresClient, error) { - stream, err := c.cc.NewStream(ctx, &_Xud_serviceDesc.Streams[2], "/xudrpc.Xud/SubscribeSwapFailures", opts...) + stream, err := c.cc.NewStream(ctx, &_Xud_serviceDesc.Streams[3], "/xudrpc.Xud/SubscribeSwapFailures", opts...) if err != nil { return nil, err } @@ -5475,7 +5619,7 @@ func (x *xudSubscribeSwapFailuresClient) Recv() (*SwapFailure, error) { } func (c *xudClient) SubscribeSwaps(ctx context.Context, in *SubscribeSwapsRequest, opts ...grpc.CallOption) (Xud_SubscribeSwapsClient, error) { - stream, err := c.cc.NewStream(ctx, &_Xud_serviceDesc.Streams[3], "/xudrpc.Xud/SubscribeSwaps", opts...) + stream, err := c.cc.NewStream(ctx, &_Xud_serviceDesc.Streams[4], "/xudrpc.Xud/SubscribeSwaps", opts...) if err != nil { return nil, err } @@ -5507,7 +5651,7 @@ func (x *xudSubscribeSwapsClient) Recv() (*SwapSuccess, error) { } func (c *xudClient) SubscribeSwapsAccepted(ctx context.Context, in *SubscribeSwapsAcceptedRequest, opts ...grpc.CallOption) (Xud_SubscribeSwapsAcceptedClient, error) { - stream, err := c.cc.NewStream(ctx, &_Xud_serviceDesc.Streams[4], "/xudrpc.Xud/SubscribeSwapsAccepted", opts...) + stream, err := c.cc.NewStream(ctx, &_Xud_serviceDesc.Streams[5], "/xudrpc.Xud/SubscribeSwapsAccepted", opts...) if err != nil { return nil, err } @@ -5671,6 +5815,8 @@ type XudServer interface { // its users a real time view of the orders available to them would subscribe to this streaming // call to be alerted as new orders are added and expired orders are removed. SubscribeOrders(*SubscribeOrdersRequest, Xud_SubscribeOrdersServer) error + // Subscribes to alerts such as low balance. + SubscribeAlerts(*SubscribeAlertsRequest, Xud_SubscribeAlertsServer) error // Subscribes to failed swaps. By default, only swaps that are initiated by a remote peer are // transmitted unless a flag is set to include swaps initiated by the local node. This call allows // the client to get real-time notifications when swap attempts are failing. It can be used for @@ -6159,6 +6305,27 @@ func (x *xudSubscribeOrdersServer) Send(m *OrderUpdate) error { return x.ServerStream.SendMsg(m) } +func _Xud_SubscribeAlerts_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SubscribeAlertsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(XudServer).SubscribeAlerts(m, &xudSubscribeAlertsServer{stream}) +} + +type Xud_SubscribeAlertsServer interface { + Send(*Alert) error + grpc.ServerStream +} + +type xudSubscribeAlertsServer struct { + grpc.ServerStream +} + +func (x *xudSubscribeAlertsServer) Send(m *Alert) error { + return x.ServerStream.SendMsg(m) +} + func _Xud_SubscribeSwapFailures_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(SubscribeSwapsRequest) if err := stream.RecvMsg(m); err != nil { @@ -6418,6 +6585,11 @@ var _Xud_serviceDesc = grpc.ServiceDesc{ Handler: _Xud_SubscribeOrders_Handler, ServerStreams: true, }, + { + StreamName: "SubscribeAlerts", + Handler: _Xud_SubscribeAlerts_Handler, + ServerStreams: true, + }, { StreamName: "SubscribeSwapFailures", Handler: _Xud_SubscribeSwapFailures_Handler,