From 96ab49944c9a36c5b17b6089a7990adc8dc3e748 Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Wed, 6 Jul 2022 15:43:00 +0100 Subject: [PATCH] Add IFTTT integration. --- api/go/api/application.pb.go | 2119 ++++++++++------- api/go/api/application_grpc.pb.go | 152 ++ api/grpc-web/api/application_grpc_web_pb.d.ts | 48 + api/grpc-web/api/application_grpc_web_pb.js | 320 +++ api/grpc-web/api/application_pb.d.ts | 131 + api/grpc-web/api/application_pb.js | 1124 ++++++++- api/js/api/application_grpc_pb.d.ts | 20 + api/js/api/application_grpc_pb.js | 103 + api/js/api/application_pb.d.ts | 143 ++ api/js/api/application_pb.js | 1129 ++++++++- api/proto/api/application.proto | 65 + .../proto/chirpstack/api/application.proto | 65 + chirpstack/src/api/application.rs | 257 ++ chirpstack/src/integration/ifttt.rs | 231 ++ chirpstack/src/integration/mod.rs | 4 + chirpstack/src/storage/application.rs | 43 + ui/public/integrations/ifttt.png | Bin 0 -> 7507 bytes ui/src/components/CodeEditor.tsx | 7 +- ui/src/stores/ApplicationStore.ts | 68 + .../views/applications/ApplicationLayout.tsx | 17 + .../views/applications/ApplicationLoader.tsx | 18 +- .../views/applications/ListIntegrations.tsx | 8 + .../integrations/CreateIftttIntegration.tsx | 46 + .../integrations/EditIftttIntegration.tsx | 71 + .../applications/integrations/IftttCard.tsx | 58 + .../integrations/IftttIntegrationForm.tsx | 67 + ui/src/views/gateways/GatewayForm.tsx | 11 +- ui/yarn.lock | 2 +- 28 files changed, 5495 insertions(+), 832 deletions(-) create mode 100644 chirpstack/src/integration/ifttt.rs create mode 100644 ui/public/integrations/ifttt.png create mode 100644 ui/src/views/applications/integrations/CreateIftttIntegration.tsx create mode 100644 ui/src/views/applications/integrations/EditIftttIntegration.tsx create mode 100644 ui/src/views/applications/integrations/IftttCard.tsx create mode 100644 ui/src/views/applications/integrations/IftttIntegrationForm.tsx diff --git a/api/go/api/application.pb.go b/api/go/api/application.pb.go index c5688a91..a4146f4f 100644 --- a/api/go/api/application.pb.go +++ b/api/go/api/application.pb.go @@ -81,21 +81,23 @@ const ( IntegrationKind_AZURE_SERVICE_BUS IntegrationKind = 7 IntegrationKind_PILOT_THINGS IntegrationKind = 8 IntegrationKind_MQTT_GLOBAL IntegrationKind = 9 + IntegrationKind_IFTTT IntegrationKind = 10 ) // Enum value maps for IntegrationKind. var ( IntegrationKind_name = map[int32]string{ - 0: "HTTP", - 1: "INFLUX_DB", - 2: "THINGS_BOARD", - 3: "MY_DEVICES", - 4: "LORA_CLOUD", - 5: "GCP_PUB_SUB", - 6: "AWS_SNS", - 7: "AZURE_SERVICE_BUS", - 8: "PILOT_THINGS", - 9: "MQTT_GLOBAL", + 0: "HTTP", + 1: "INFLUX_DB", + 2: "THINGS_BOARD", + 3: "MY_DEVICES", + 4: "LORA_CLOUD", + 5: "GCP_PUB_SUB", + 6: "AWS_SNS", + 7: "AZURE_SERVICE_BUS", + 8: "PILOT_THINGS", + 9: "MQTT_GLOBAL", + 10: "IFTTT", } IntegrationKind_value = map[string]int32{ "HTTP": 0, @@ -108,6 +110,7 @@ var ( "AZURE_SERVICE_BUS": 7, "PILOT_THINGS": 8, "MQTT_GLOBAL": 9, + "IFTTT": 10, } ) @@ -557,6 +560,10 @@ type GetApplicationResponse struct { CreatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Last update timestamp. UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + // Measurement keys. + // This contains the measurement keys from all the device-profiles that + // are used by the devices under this application. + MeasurementKeys []string `protobuf:"bytes,4,rep,name=measurement_keys,json=measurementKeys,proto3" json:"measurement_keys,omitempty"` } func (x *GetApplicationResponse) Reset() { @@ -612,6 +619,13 @@ func (x *GetApplicationResponse) GetUpdatedAt() *timestamppb.Timestamp { return nil } +func (x *GetApplicationResponse) GetMeasurementKeys() []string { + if x != nil { + return x.MeasurementKeys + } + return nil +} + type UpdateApplicationRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4058,6 +4072,323 @@ func (x *DeletePilotThingsIntegrationRequest) GetApplicationId() string { return "" } +type IftttIntegration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Application ID (UUID). + ApplicationId string `protobuf:"bytes,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + // Key. + // This key can be obtained from the IFTTT Webhooks documentation page. + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + // Values. + // Up to 2 values can be forwarded to IFTTT. These values must map to the + // decoded payload keys. For example: + // { + // "batteryLevel": 75.3, + // "buttons": [{"pressed": false}, {"pressed": true}] + // } + // You would specify the following fields: + // uplink_values = ["batteryLevel", "buttons_0_pressed"] + // + // Note: The first value is always used for the DevEUI. + UplinkValues []string `protobuf:"bytes,3,rep,name=uplink_values,json=uplinkValues,proto3" json:"uplink_values,omitempty"` +} + +func (x *IftttIntegration) Reset() { + *x = IftttIntegration{} + if protoimpl.UnsafeEnabled { + mi := &file_api_application_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IftttIntegration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IftttIntegration) ProtoMessage() {} + +func (x *IftttIntegration) ProtoReflect() protoreflect.Message { + mi := &file_api_application_proto_msgTypes[68] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IftttIntegration.ProtoReflect.Descriptor instead. +func (*IftttIntegration) Descriptor() ([]byte, []int) { + return file_api_application_proto_rawDescGZIP(), []int{68} +} + +func (x *IftttIntegration) GetApplicationId() string { + if x != nil { + return x.ApplicationId + } + return "" +} + +func (x *IftttIntegration) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *IftttIntegration) GetUplinkValues() []string { + if x != nil { + return x.UplinkValues + } + return nil +} + +type CreateIftttIntegrationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Integration object. + Integration *IftttIntegration `protobuf:"bytes,1,opt,name=integration,proto3" json:"integration,omitempty"` +} + +func (x *CreateIftttIntegrationRequest) Reset() { + *x = CreateIftttIntegrationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_application_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateIftttIntegrationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateIftttIntegrationRequest) ProtoMessage() {} + +func (x *CreateIftttIntegrationRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_application_proto_msgTypes[69] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateIftttIntegrationRequest.ProtoReflect.Descriptor instead. +func (*CreateIftttIntegrationRequest) Descriptor() ([]byte, []int) { + return file_api_application_proto_rawDescGZIP(), []int{69} +} + +func (x *CreateIftttIntegrationRequest) GetIntegration() *IftttIntegration { + if x != nil { + return x.Integration + } + return nil +} + +type GetIftttIntegrationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Application ID (UUID). + ApplicationId string `protobuf:"bytes,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` +} + +func (x *GetIftttIntegrationRequest) Reset() { + *x = GetIftttIntegrationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_application_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIftttIntegrationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIftttIntegrationRequest) ProtoMessage() {} + +func (x *GetIftttIntegrationRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_application_proto_msgTypes[70] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetIftttIntegrationRequest.ProtoReflect.Descriptor instead. +func (*GetIftttIntegrationRequest) Descriptor() ([]byte, []int) { + return file_api_application_proto_rawDescGZIP(), []int{70} +} + +func (x *GetIftttIntegrationRequest) GetApplicationId() string { + if x != nil { + return x.ApplicationId + } + return "" +} + +type GetIftttIntegrationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Integration object. + Integration *IftttIntegration `protobuf:"bytes,1,opt,name=integration,proto3" json:"integration,omitempty"` +} + +func (x *GetIftttIntegrationResponse) Reset() { + *x = GetIftttIntegrationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_application_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetIftttIntegrationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIftttIntegrationResponse) ProtoMessage() {} + +func (x *GetIftttIntegrationResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_application_proto_msgTypes[71] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetIftttIntegrationResponse.ProtoReflect.Descriptor instead. +func (*GetIftttIntegrationResponse) Descriptor() ([]byte, []int) { + return file_api_application_proto_rawDescGZIP(), []int{71} +} + +func (x *GetIftttIntegrationResponse) GetIntegration() *IftttIntegration { + if x != nil { + return x.Integration + } + return nil +} + +type UpdateIftttIntegrationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Integration object to update. + Integration *IftttIntegration `protobuf:"bytes,1,opt,name=integration,proto3" json:"integration,omitempty"` +} + +func (x *UpdateIftttIntegrationRequest) Reset() { + *x = UpdateIftttIntegrationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_application_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateIftttIntegrationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateIftttIntegrationRequest) ProtoMessage() {} + +func (x *UpdateIftttIntegrationRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_application_proto_msgTypes[72] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateIftttIntegrationRequest.ProtoReflect.Descriptor instead. +func (*UpdateIftttIntegrationRequest) Descriptor() ([]byte, []int) { + return file_api_application_proto_rawDescGZIP(), []int{72} +} + +func (x *UpdateIftttIntegrationRequest) GetIntegration() *IftttIntegration { + if x != nil { + return x.Integration + } + return nil +} + +type DeleteIftttIntegrationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Application ID (UUID). + ApplicationId string `protobuf:"bytes,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` +} + +func (x *DeleteIftttIntegrationRequest) Reset() { + *x = DeleteIftttIntegrationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_application_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteIftttIntegrationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteIftttIntegrationRequest) ProtoMessage() {} + +func (x *DeleteIftttIntegrationRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_application_proto_msgTypes[73] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteIftttIntegrationRequest.ProtoReflect.Descriptor instead. +func (*DeleteIftttIntegrationRequest) Descriptor() ([]byte, []int) { + return file_api_application_proto_rawDescGZIP(), []int{73} +} + +func (x *DeleteIftttIntegrationRequest) GetApplicationId() string { + if x != nil { + return x.ApplicationId + } + return "" +} + type GenerateMqttIntegrationClientCertificateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4070,7 +4401,7 @@ type GenerateMqttIntegrationClientCertificateRequest struct { func (x *GenerateMqttIntegrationClientCertificateRequest) Reset() { *x = GenerateMqttIntegrationClientCertificateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_application_proto_msgTypes[68] + mi := &file_api_application_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4083,7 +4414,7 @@ func (x *GenerateMqttIntegrationClientCertificateRequest) String() string { func (*GenerateMqttIntegrationClientCertificateRequest) ProtoMessage() {} func (x *GenerateMqttIntegrationClientCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_application_proto_msgTypes[68] + mi := &file_api_application_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4096,7 +4427,7 @@ func (x *GenerateMqttIntegrationClientCertificateRequest) ProtoReflect() protore // Deprecated: Use GenerateMqttIntegrationClientCertificateRequest.ProtoReflect.Descriptor instead. func (*GenerateMqttIntegrationClientCertificateRequest) Descriptor() ([]byte, []int) { - return file_api_application_proto_rawDescGZIP(), []int{68} + return file_api_application_proto_rawDescGZIP(), []int{74} } func (x *GenerateMqttIntegrationClientCertificateRequest) GetApplicationId() string { @@ -4124,7 +4455,7 @@ type GenerateMqttIntegrationClientCertificateResponse struct { func (x *GenerateMqttIntegrationClientCertificateResponse) Reset() { *x = GenerateMqttIntegrationClientCertificateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_application_proto_msgTypes[69] + mi := &file_api_application_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4137,7 +4468,7 @@ func (x *GenerateMqttIntegrationClientCertificateResponse) String() string { func (*GenerateMqttIntegrationClientCertificateResponse) ProtoMessage() {} func (x *GenerateMqttIntegrationClientCertificateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_application_proto_msgTypes[69] + mi := &file_api_application_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4150,7 +4481,7 @@ func (x *GenerateMqttIntegrationClientCertificateResponse) ProtoReflect() protor // Deprecated: Use GenerateMqttIntegrationClientCertificateResponse.ProtoReflect.Descriptor instead. func (*GenerateMqttIntegrationClientCertificateResponse) Descriptor() ([]byte, []int) { - return file_api_application_proto_rawDescGZIP(), []int{69} + return file_api_application_proto_rawDescGZIP(), []int{75} } func (x *GenerateMqttIntegrationClientCertificateResponse) GetTlsCert() string { @@ -4220,7 +4551,7 @@ var file_api_application_proto_rawDesc = []byte{ 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x27, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xed, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x70, 0x70, @@ -4232,752 +4563,811 @@ var file_api_application_proto_rawDesc = []byte{ 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x4e, 0x0a, 0x18, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x18, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x7c, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x6d, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x22, 0x40, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x3f, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x28, 0x0a, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, - 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x6d, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x0f, 0x48, 0x74, 0x74, 0x70, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6d, + 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x4e, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2a, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x7c, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, + 0x22, 0x6d, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x40, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x29, - 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, - 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x55, 0x72, 0x6c, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x56, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, + 0x64, 0x22, 0x3f, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x22, 0x6d, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x30, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x8a, 0x02, 0x0a, 0x0f, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x08, 0x65, 0x6e, 0x63, + 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x55, + 0x72, 0x6c, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x56, + 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, + 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, - 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x19, 0x47, - 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x54, 0x0a, 0x1a, 0x47, 0x65, + 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x56, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x45, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, - 0x54, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, - 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x56, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, - 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x45, 0x0a, - 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, - 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x8c, 0x03, 0x0a, 0x13, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, - 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x64, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x64, 0x62, 0x12, - 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x74, 0x65, 0x6e, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x50, 0x72, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, - 0x62, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x62, - 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x22, 0x5e, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, + 0x8c, 0x03, 0x0a, 0x13, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x62, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x64, 0x62, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x09, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x5e, + 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, + 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x46, + 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, - 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x1e, 0x47, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, - 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, - 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5e, 0x0a, 0x20, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, - 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, - 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x20, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, - 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x16, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, - 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, - 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x64, 0x0a, - 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5e, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, + 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, + 0x57, 0x0a, 0x16, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x64, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, + 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x49, + 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x21, 0x47, 0x65, 0x74, + 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, + 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, + 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x64, 0x0a, + 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x62, - 0x0a, 0x21, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, - 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x64, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, - 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x23, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x14, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, - 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x22, 0x60, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x1f, - 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x79, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x60, 0x0a, 0x21, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, + 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x68, 0x69, + 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x22, 0x59, 0x0a, 0x14, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x60, 0x0a, 0x21, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4a, - 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x14, 0x4c, - 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x64, 0x0a, 0x1a, 0x6d, 0x6f, - 0x64, 0x65, 0x6d, 0x5f, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x6f, - 0x64, 0x65, 0x6d, 0x47, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x18, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x47, 0x65, 0x6f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x22, 0xcb, 0x05, 0x0a, 0x21, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x6f, - 0x64, 0x65, 0x6d, 0x47, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x50, 0x6f, 0x72, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x6e, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x08, 0x67, 0x6e, 0x73, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x27, 0x0a, - 0x10, 0x67, 0x6e, 0x73, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x78, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x67, 0x6e, 0x73, 0x73, 0x55, 0x73, 0x65, - 0x52, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, - 0x74, 0x6c, 0x76, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x61, 0x72, 0x73, 0x65, - 0x54, 0x6c, 0x76, 0x12, 0x34, 0x0a, 0x16, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x14, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x54, 0x74, 0x6c, 0x12, 0x3d, 0x0a, 0x1b, 0x67, 0x65, 0x6f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x18, - 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x42, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6f, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x64, 0x6f, 0x61, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0f, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x64, 0x6f, 0x61, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, - 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x73, 0x73, 0x69, 0x12, 0x29, - 0x0a, 0x10, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x6e, - 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x6e, 0x73, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x67, 0x65, 0x6f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x6e, 0x73, 0x73, 0x5f, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x1b, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x6e, - 0x73, 0x73, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3e, - 0x0a, 0x1c, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x6e, - 0x73, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x47, 0x6e, 0x73, 0x73, 0x55, 0x73, 0x65, 0x52, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x29, - 0x0a, 0x10, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, - 0x66, 0x69, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x66, 0x69, 0x12, 0x43, 0x0a, 0x1e, 0x67, 0x65, 0x6f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x1b, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, - 0x66, 0x69, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x60, - 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, - 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x47, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x1f, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, + 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, + 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4d, 0x79, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x60, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, - 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x60, 0x0a, 0x21, 0x55, 0x70, 0x64, + 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x21, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, + 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x14, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, + 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x64, 0x0a, 0x1a, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x5f, 0x67, + 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x6d, 0x47, 0x65, + 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x52, 0x18, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x47, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xcb, 0x05, 0x0a, 0x21, + 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x6d, 0x47, 0x65, + 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, 0x65, 0x6d, + 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x67, + 0x6e, 0x73, 0x73, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x67, 0x6e, 0x73, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x27, 0x0a, 0x10, 0x67, 0x6e, 0x73, 0x73, + 0x5f, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x67, 0x6e, 0x73, 0x73, 0x55, 0x73, 0x65, 0x52, 0x78, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x74, 0x6c, 0x76, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x6c, 0x76, 0x12, 0x34, + 0x0a, 0x16, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, + 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x65, + 0x72, 0x54, 0x74, 0x6c, 0x12, 0x3d, 0x0a, 0x1b, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x18, 0x67, 0x65, 0x6f, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x64, 0x6f, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, + 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x64, 0x6f, 0x61, 0x12, 0x29, + 0x0a, 0x10, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x73, + 0x73, 0x69, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x73, 0x73, 0x69, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6f, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x6e, 0x73, 0x73, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x47, 0x6e, 0x73, 0x73, 0x12, 0x43, 0x0a, 0x1e, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x6e, 0x73, 0x73, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x67, 0x65, + 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x6e, 0x73, 0x73, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3e, 0x0a, 0x1c, 0x67, 0x65, 0x6f, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x6e, 0x73, 0x73, 0x5f, 0x75, 0x73, + 0x65, 0x5f, 0x72, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x18, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x6e, 0x73, 0x73, + 0x55, 0x73, 0x65, 0x52, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x67, 0x65, 0x6f, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0f, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x57, 0x69, 0x66, 0x69, 0x12, 0x43, 0x0a, 0x1e, 0x67, 0x65, 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x66, 0x69, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x67, 0x65, + 0x6f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x66, 0x69, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x60, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x21, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xd1, 0x01, 0x0a, 0x14, 0x47, 0x63, 0x70, 0x50, - 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, - 0x6e, 0x67, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x60, 0x0a, 0x21, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x63, 0x70, 0x50, - 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, - 0x1e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, - 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x1e, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, + 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x60, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, + 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x60, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x22, 0xd1, 0x01, 0x0a, 0x14, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x29, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, + 0x10, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x60, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, - 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xea, 0x01, 0x0a, 0x11, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x47, + 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x29, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, - 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x61, 0x72, - 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x41, 0x72, - 0x6e, 0x22, 0x5a, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, - 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x64, 0x22, 0x5e, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, + 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x60, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, + 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, + 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, + 0xea, 0x01, 0x0a, 0x11, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x08, + 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x65, + 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, + 0x22, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, + 0x79, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, + 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x61, 0x72, 0x6e, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x41, 0x72, 0x6e, 0x22, 0x5a, 0x0a, 0x1e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, + 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x44, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x44, 0x0a, - 0x1b, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x58, + 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5a, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0b, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77, + 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xbe, 0x01, + 0x0a, 0x1a, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, - 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5a, 0x0a, - 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x38, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x77, 0x73, 0x53, 0x6e, - 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x1e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x22, 0xbe, 0x01, 0x0a, 0x1a, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4e, - 0x61, 0x6d, 0x65, 0x22, 0x6c, 0x0a, 0x27, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, - 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, - 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x4d, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, + 0x6e, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2b, + 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6c, + 0x0a, 0x27, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x22, 0x6a, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x69, 0x6e, 0x74, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6c, 0x0a, 0x27, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, - 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x27, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x6d, 0x0a, 0x16, + 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x24, + 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, + 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x25, 0x47, + 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6c, 0x0a, 0x27, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x41, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x7a, + 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x27, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x6d, 0x0a, 0x16, 0x50, 0x69, 0x6c, 0x6f, 0x74, + 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x64, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x64, 0x0a, 0x23, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, + 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, + 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x20, + 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, 0x69, + 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0b, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, + 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x64, 0x0a, 0x23, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x49, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, - 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x21, - 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x69, 0x6c, - 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x64, 0x0a, 0x23, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, - 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, + 0x6e, 0x22, 0x4c, 0x0a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, + 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, + 0x70, 0x0a, 0x10, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, + 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x22, 0x58, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x66, + 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x43, 0x0a, 0x1a, 0x47, + 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x22, 0x56, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x37, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x66, 0x74, 0x74, 0x74, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x58, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x69, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x46, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, + 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x2f, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x2f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xba, - 0x01, 0x0a, 0x30, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6c, 0x73, 0x43, 0x65, 0x72, 0x74, 0x12, 0x17, - 0x0a, 0x07, 0x74, 0x6c, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x74, 0x6c, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x61, 0x5f, 0x63, 0x65, - 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, - 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x2a, 0x22, 0x0a, 0x08, 0x45, - 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, - 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x42, 0x55, 0x46, 0x10, 0x01, 0x2a, - 0xb4, 0x01, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, - 0x69, 0x6e, 0x64, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x00, 0x12, 0x0d, 0x0a, - 0x09, 0x49, 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x5f, 0x44, 0x42, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, - 0x54, 0x48, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0e, - 0x0a, 0x0a, 0x4d, 0x59, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x03, 0x12, 0x0e, - 0x0a, 0x0a, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x04, 0x12, 0x0f, - 0x0a, 0x0b, 0x47, 0x43, 0x50, 0x5f, 0x50, 0x55, 0x42, 0x5f, 0x53, 0x55, 0x42, 0x10, 0x05, 0x12, - 0x0b, 0x0a, 0x07, 0x41, 0x57, 0x53, 0x5f, 0x53, 0x4e, 0x53, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, - 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x42, 0x55, - 0x53, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x49, 0x4c, 0x4f, 0x54, 0x5f, 0x54, 0x48, 0x49, - 0x4e, 0x47, 0x53, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x51, 0x54, 0x54, 0x5f, 0x47, 0x4c, - 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x09, 0x2a, 0x3f, 0x0a, 0x11, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, - 0x44, 0x62, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x06, 0x0a, 0x02, 0x4e, - 0x53, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x55, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4d, 0x53, - 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01, 0x53, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x4d, 0x10, 0x04, - 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, 0x05, 0x2a, 0x31, 0x0a, 0x0f, 0x49, 0x6e, 0x66, 0x6c, 0x75, - 0x78, 0x44, 0x62, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, - 0x46, 0x4c, 0x55, 0x58, 0x44, 0x42, 0x5f, 0x31, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, - 0x46, 0x4c, 0x55, 0x58, 0x44, 0x42, 0x5f, 0x32, 0x10, 0x01, 0x32, 0xae, 0x20, 0x0a, 0x12, 0x41, - 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x49, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, 0x03, - 0x47, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x00, 0x12, 0x41, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x10, 0x4c, - 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, - 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, - 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x74, 0x74, - 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x19, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, 0x6e, - 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, 0x75, - 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, - 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x19, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x19, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x19, - 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, - 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x62, - 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, - 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, - 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x66, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x17, 0x47, 0x65, - 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, - 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, - 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x72, - 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, - 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, - 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x22, 0x00, 0x12, 0x66, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, - 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, - 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x17, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, - 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, - 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, - 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x58, 0x0a, - 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x7a, - 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, - 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x7a, - 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x20, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, - 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, - 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, - 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, - 0x99, 0x01, 0x0a, 0x28, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xba, 0x01, 0x0a, 0x30, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x57, 0x0a, 0x11, 0x69, - 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, - 0x42, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, - 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, - 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6c, 0x73, + 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6c, 0x73, + 0x43, 0x65, 0x72, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6c, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6c, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x17, 0x0a, + 0x07, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, + 0x74, 0x2a, 0x22, 0x0a, 0x08, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x08, 0x0a, + 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x42, 0x55, 0x46, 0x10, 0x01, 0x2a, 0xbf, 0x01, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, + 0x50, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x5f, 0x44, 0x42, + 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x48, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x42, 0x4f, 0x41, + 0x52, 0x44, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, 0x59, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, + 0x45, 0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x43, 0x4c, 0x4f, + 0x55, 0x44, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x43, 0x50, 0x5f, 0x50, 0x55, 0x42, 0x5f, + 0x53, 0x55, 0x42, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x57, 0x53, 0x5f, 0x53, 0x4e, 0x53, + 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, + 0x49, 0x43, 0x45, 0x5f, 0x42, 0x55, 0x53, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x49, 0x4c, + 0x4f, 0x54, 0x5f, 0x54, 0x48, 0x49, 0x4e, 0x47, 0x53, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, + 0x51, 0x54, 0x54, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x09, 0x12, 0x09, 0x0a, 0x05, + 0x49, 0x46, 0x54, 0x54, 0x54, 0x10, 0x0a, 0x2a, 0x3f, 0x0a, 0x11, 0x49, 0x6e, 0x66, 0x6c, 0x75, + 0x78, 0x44, 0x62, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x06, 0x0a, 0x02, + 0x4e, 0x53, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x55, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4d, + 0x53, 0x10, 0x02, 0x12, 0x05, 0x0a, 0x01, 0x53, 0x10, 0x03, 0x12, 0x05, 0x0a, 0x01, 0x4d, 0x10, + 0x04, 0x12, 0x05, 0x0a, 0x01, 0x48, 0x10, 0x05, 0x2a, 0x31, 0x0a, 0x0f, 0x49, 0x6e, 0x66, 0x6c, + 0x75, 0x78, 0x44, 0x62, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x49, + 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x44, 0x42, 0x5f, 0x31, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x49, + 0x4e, 0x46, 0x4c, 0x55, 0x58, 0x44, 0x42, 0x5f, 0x32, 0x10, 0x01, 0x32, 0x92, 0x23, 0x0a, 0x12, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x40, 0x0a, + 0x03, 0x47, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x41, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x10, + 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x54, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, + 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x74, + 0x74, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x74, 0x74, 0x70, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x19, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6c, + 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, + 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, + 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x19, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6c, 0x75, 0x78, 0x44, 0x62, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, + 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6c, 0x0a, + 0x19, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, + 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, 0x6f, + 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, + 0x62, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x42, + 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x68, 0x69, 0x6e, + 0x67, 0x73, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x79, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x79, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x79, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x17, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, + 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x72, + 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, + 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, 0x72, + 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x6f, + 0x72, 0x61, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, + 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x63, + 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, + 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, + 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x63, 0x70, + 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x1a, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x63, 0x70, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x17, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, + 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x77, + 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, + 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x58, + 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x77, 0x73, 0x53, 0x6e, 0x73, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, + 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, + 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x20, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x19, 0x47, 0x65, + 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, + 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, 0x73, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x1c, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, 0x69, 0x6e, 0x67, + 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x69, 0x6c, 0x6f, 0x74, 0x54, 0x68, + 0x69, 0x6e, 0x67, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, + 0x12, 0x56, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x49, + 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x66, + 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x16, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x49, 0x66, 0x74, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x00, 0x12, 0x99, 0x01, 0x0a, 0x28, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x12, 0x34, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x71, 0x74, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0x57, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, + 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, + 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -4993,7 +5383,7 @@ func file_api_application_proto_rawDescGZIP() []byte { } var file_api_application_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_api_application_proto_msgTypes = make([]protoimpl.MessageInfo, 71) +var file_api_application_proto_msgTypes = make([]protoimpl.MessageInfo, 77) var file_api_application_proto_goTypes = []interface{}{ (Encoding)(0), // 0: api.Encoding (IntegrationKind)(0), // 1: api.IntegrationKind @@ -5067,24 +5457,30 @@ var file_api_application_proto_goTypes = []interface{}{ (*GetPilotThingsIntegrationResponse)(nil), // 69: api.GetPilotThingsIntegrationResponse (*UpdatePilotThingsIntegrationRequest)(nil), // 70: api.UpdatePilotThingsIntegrationRequest (*DeletePilotThingsIntegrationRequest)(nil), // 71: api.DeletePilotThingsIntegrationRequest - (*GenerateMqttIntegrationClientCertificateRequest)(nil), // 72: api.GenerateMqttIntegrationClientCertificateRequest - (*GenerateMqttIntegrationClientCertificateResponse)(nil), // 73: api.GenerateMqttIntegrationClientCertificateResponse - nil, // 74: api.HttpIntegration.HeadersEntry - (*timestamppb.Timestamp)(nil), // 75: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 76: google.protobuf.Empty + (*IftttIntegration)(nil), // 72: api.IftttIntegration + (*CreateIftttIntegrationRequest)(nil), // 73: api.CreateIftttIntegrationRequest + (*GetIftttIntegrationRequest)(nil), // 74: api.GetIftttIntegrationRequest + (*GetIftttIntegrationResponse)(nil), // 75: api.GetIftttIntegrationResponse + (*UpdateIftttIntegrationRequest)(nil), // 76: api.UpdateIftttIntegrationRequest + (*DeleteIftttIntegrationRequest)(nil), // 77: api.DeleteIftttIntegrationRequest + (*GenerateMqttIntegrationClientCertificateRequest)(nil), // 78: api.GenerateMqttIntegrationClientCertificateRequest + (*GenerateMqttIntegrationClientCertificateResponse)(nil), // 79: api.GenerateMqttIntegrationClientCertificateResponse + nil, // 80: api.HttpIntegration.HeadersEntry + (*timestamppb.Timestamp)(nil), // 81: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 82: google.protobuf.Empty } var file_api_application_proto_depIdxs = []int32{ - 75, // 0: api.ApplicationListItem.created_at:type_name -> google.protobuf.Timestamp - 75, // 1: api.ApplicationListItem.updated_at:type_name -> google.protobuf.Timestamp + 81, // 0: api.ApplicationListItem.created_at:type_name -> google.protobuf.Timestamp + 81, // 1: api.ApplicationListItem.updated_at:type_name -> google.protobuf.Timestamp 4, // 2: api.CreateApplicationRequest.application:type_name -> api.Application 4, // 3: api.GetApplicationResponse.application:type_name -> api.Application - 75, // 4: api.GetApplicationResponse.created_at:type_name -> google.protobuf.Timestamp - 75, // 5: api.GetApplicationResponse.updated_at:type_name -> google.protobuf.Timestamp + 81, // 4: api.GetApplicationResponse.created_at:type_name -> google.protobuf.Timestamp + 81, // 5: api.GetApplicationResponse.updated_at:type_name -> google.protobuf.Timestamp 4, // 6: api.UpdateApplicationRequest.application:type_name -> api.Application 5, // 7: api.ListApplicationsResponse.result:type_name -> api.ApplicationListItem 1, // 8: api.IntegrationListItem.kind:type_name -> api.IntegrationKind 15, // 9: api.ListIntegrationsResponse.result:type_name -> api.IntegrationListItem - 74, // 10: api.HttpIntegration.headers:type_name -> api.HttpIntegration.HeadersEntry + 80, // 10: api.HttpIntegration.headers:type_name -> api.HttpIntegration.HeadersEntry 0, // 11: api.HttpIntegration.encoding:type_name -> api.Encoding 17, // 12: api.CreateHttpIntegrationRequest.integration:type_name -> api.HttpIntegration 17, // 13: api.GetHttpIntegrationResponse.integration:type_name -> api.HttpIntegration @@ -5119,98 +5515,109 @@ var file_api_application_proto_depIdxs = []int32{ 66, // 42: api.CreatePilotThingsIntegrationRequest.integration:type_name -> api.PilotThingsIntegration 66, // 43: api.GetPilotThingsIntegrationResponse.integration:type_name -> api.PilotThingsIntegration 66, // 44: api.UpdatePilotThingsIntegrationRequest.integration:type_name -> api.PilotThingsIntegration - 75, // 45: api.GenerateMqttIntegrationClientCertificateResponse.expires_at:type_name -> google.protobuf.Timestamp - 6, // 46: api.ApplicationService.Create:input_type -> api.CreateApplicationRequest - 8, // 47: api.ApplicationService.Get:input_type -> api.GetApplicationRequest - 10, // 48: api.ApplicationService.Update:input_type -> api.UpdateApplicationRequest - 11, // 49: api.ApplicationService.Delete:input_type -> api.DeleteApplicationRequest - 12, // 50: api.ApplicationService.List:input_type -> api.ListApplicationsRequest - 14, // 51: api.ApplicationService.ListIntegrations:input_type -> api.ListIntegrationsRequest - 18, // 52: api.ApplicationService.CreateHttpIntegration:input_type -> api.CreateHttpIntegrationRequest - 19, // 53: api.ApplicationService.GetHttpIntegration:input_type -> api.GetHttpIntegrationRequest - 21, // 54: api.ApplicationService.UpdateHttpIntegration:input_type -> api.UpdateHttpIntegrationRequest - 22, // 55: api.ApplicationService.DeleteHttpIntegration:input_type -> api.DeleteHttpIntegrationRequest - 24, // 56: api.ApplicationService.CreateInfluxDbIntegration:input_type -> api.CreateInfluxDbIntegrationRequest - 25, // 57: api.ApplicationService.GetInfluxDbIntegration:input_type -> api.GetInfluxDbIntegrationRequest - 27, // 58: api.ApplicationService.UpdateInfluxDbIntegration:input_type -> api.UpdateInfluxDbIntegrationRequest - 28, // 59: api.ApplicationService.DeleteInfluxDbIntegration:input_type -> api.DeleteInfluxDbIntegrationRequest - 30, // 60: api.ApplicationService.CreateThingsBoardIntegration:input_type -> api.CreateThingsBoardIntegrationRequest - 31, // 61: api.ApplicationService.GetThingsBoardIntegration:input_type -> api.GetThingsBoardIntegrationRequest - 33, // 62: api.ApplicationService.UpdateThingsBoardIntegration:input_type -> api.UpdateThingsBoardIntegrationRequest - 34, // 63: api.ApplicationService.DeleteThingsBoardIntegration:input_type -> api.DeleteThingsBoardIntegrationRequest - 36, // 64: api.ApplicationService.CreateMyDevicesIntegration:input_type -> api.CreateMyDevicesIntegrationRequest - 37, // 65: api.ApplicationService.GetMyDevicesIntegration:input_type -> api.GetMyDevicesIntegrationRequest - 39, // 66: api.ApplicationService.UpdateMyDevicesIntegration:input_type -> api.UpdateMyDevicesIntegrationRequest - 40, // 67: api.ApplicationService.DeleteMyDevicesIntegration:input_type -> api.DeleteMyDevicesIntegrationRequest - 43, // 68: api.ApplicationService.CreateLoraCloudIntegration:input_type -> api.CreateLoraCloudIntegrationRequest - 44, // 69: api.ApplicationService.GetLoraCloudIntegration:input_type -> api.GetLoraCloudIntegrationRequest - 46, // 70: api.ApplicationService.UpdateLoraCloudIntegration:input_type -> api.UpdateLoraCloudIntegrationRequest - 47, // 71: api.ApplicationService.DeleteLoraCloudIntegration:input_type -> api.DeleteLoraCloudIntegrationRequest - 49, // 72: api.ApplicationService.CreateGcpPubSubIntegration:input_type -> api.CreateGcpPubSubIntegrationRequest - 50, // 73: api.ApplicationService.GetGcpPubSubIntegration:input_type -> api.GetGcpPubSubIntegrationRequest - 52, // 74: api.ApplicationService.UpdateGcpPubSubIntegration:input_type -> api.UpdateGcpPubSubIntegrationRequest - 53, // 75: api.ApplicationService.DeleteGcpPubSubIntegration:input_type -> api.DeleteGcpPubSubIntegrationRequest - 55, // 76: api.ApplicationService.CreateAwsSnsIntegration:input_type -> api.CreateAwsSnsIntegrationRequest - 56, // 77: api.ApplicationService.GetAwsSnsIntegration:input_type -> api.GetAwsSnsIntegrationRequest - 58, // 78: api.ApplicationService.UpdateAwsSnsIntegration:input_type -> api.UpdateAwsSnsIntegrationRequest - 59, // 79: api.ApplicationService.DeleteAwsSnsIntegration:input_type -> api.DeleteAwsSnsIntegrationRequest - 61, // 80: api.ApplicationService.CreateAzureServiceBusIntegration:input_type -> api.CreateAzureServiceBusIntegrationRequest - 62, // 81: api.ApplicationService.GetAzureServiceBusIntegration:input_type -> api.GetAzureServiceBusIntegrationRequest - 64, // 82: api.ApplicationService.UpdateAzureServiceBusIntegration:input_type -> api.UpdateAzureServiceBusIntegrationRequest - 65, // 83: api.ApplicationService.DeleteAzureServiceBusIntegration:input_type -> api.DeleteAzureServiceBusIntegrationRequest - 67, // 84: api.ApplicationService.CreatePilotThingsIntegration:input_type -> api.CreatePilotThingsIntegrationRequest - 68, // 85: api.ApplicationService.GetPilotThingsIntegration:input_type -> api.GetPilotThingsIntegrationRequest - 70, // 86: api.ApplicationService.UpdatePilotThingsIntegration:input_type -> api.UpdatePilotThingsIntegrationRequest - 71, // 87: api.ApplicationService.DeletePilotThingsIntegration:input_type -> api.DeletePilotThingsIntegrationRequest - 72, // 88: api.ApplicationService.GenerateMqttIntegrationClientCertificate:input_type -> api.GenerateMqttIntegrationClientCertificateRequest - 7, // 89: api.ApplicationService.Create:output_type -> api.CreateApplicationResponse - 9, // 90: api.ApplicationService.Get:output_type -> api.GetApplicationResponse - 76, // 91: api.ApplicationService.Update:output_type -> google.protobuf.Empty - 76, // 92: api.ApplicationService.Delete:output_type -> google.protobuf.Empty - 13, // 93: api.ApplicationService.List:output_type -> api.ListApplicationsResponse - 16, // 94: api.ApplicationService.ListIntegrations:output_type -> api.ListIntegrationsResponse - 76, // 95: api.ApplicationService.CreateHttpIntegration:output_type -> google.protobuf.Empty - 20, // 96: api.ApplicationService.GetHttpIntegration:output_type -> api.GetHttpIntegrationResponse - 76, // 97: api.ApplicationService.UpdateHttpIntegration:output_type -> google.protobuf.Empty - 76, // 98: api.ApplicationService.DeleteHttpIntegration:output_type -> google.protobuf.Empty - 76, // 99: api.ApplicationService.CreateInfluxDbIntegration:output_type -> google.protobuf.Empty - 26, // 100: api.ApplicationService.GetInfluxDbIntegration:output_type -> api.GetInfluxDbIntegrationResponse - 76, // 101: api.ApplicationService.UpdateInfluxDbIntegration:output_type -> google.protobuf.Empty - 76, // 102: api.ApplicationService.DeleteInfluxDbIntegration:output_type -> google.protobuf.Empty - 76, // 103: api.ApplicationService.CreateThingsBoardIntegration:output_type -> google.protobuf.Empty - 32, // 104: api.ApplicationService.GetThingsBoardIntegration:output_type -> api.GetThingsBoardIntegrationResponse - 76, // 105: api.ApplicationService.UpdateThingsBoardIntegration:output_type -> google.protobuf.Empty - 76, // 106: api.ApplicationService.DeleteThingsBoardIntegration:output_type -> google.protobuf.Empty - 76, // 107: api.ApplicationService.CreateMyDevicesIntegration:output_type -> google.protobuf.Empty - 38, // 108: api.ApplicationService.GetMyDevicesIntegration:output_type -> api.GetMyDevicesIntegrationResponse - 76, // 109: api.ApplicationService.UpdateMyDevicesIntegration:output_type -> google.protobuf.Empty - 76, // 110: api.ApplicationService.DeleteMyDevicesIntegration:output_type -> google.protobuf.Empty - 76, // 111: api.ApplicationService.CreateLoraCloudIntegration:output_type -> google.protobuf.Empty - 45, // 112: api.ApplicationService.GetLoraCloudIntegration:output_type -> api.GetLoraCloudIntegrationResponse - 76, // 113: api.ApplicationService.UpdateLoraCloudIntegration:output_type -> google.protobuf.Empty - 76, // 114: api.ApplicationService.DeleteLoraCloudIntegration:output_type -> google.protobuf.Empty - 76, // 115: api.ApplicationService.CreateGcpPubSubIntegration:output_type -> google.protobuf.Empty - 51, // 116: api.ApplicationService.GetGcpPubSubIntegration:output_type -> api.GetGcpPubSubIntegrationResponse - 76, // 117: api.ApplicationService.UpdateGcpPubSubIntegration:output_type -> google.protobuf.Empty - 76, // 118: api.ApplicationService.DeleteGcpPubSubIntegration:output_type -> google.protobuf.Empty - 76, // 119: api.ApplicationService.CreateAwsSnsIntegration:output_type -> google.protobuf.Empty - 57, // 120: api.ApplicationService.GetAwsSnsIntegration:output_type -> api.GetAwsSnsIntegrationResponse - 76, // 121: api.ApplicationService.UpdateAwsSnsIntegration:output_type -> google.protobuf.Empty - 76, // 122: api.ApplicationService.DeleteAwsSnsIntegration:output_type -> google.protobuf.Empty - 76, // 123: api.ApplicationService.CreateAzureServiceBusIntegration:output_type -> google.protobuf.Empty - 63, // 124: api.ApplicationService.GetAzureServiceBusIntegration:output_type -> api.GetAzureServiceBusIntegrationResponse - 76, // 125: api.ApplicationService.UpdateAzureServiceBusIntegration:output_type -> google.protobuf.Empty - 76, // 126: api.ApplicationService.DeleteAzureServiceBusIntegration:output_type -> google.protobuf.Empty - 76, // 127: api.ApplicationService.CreatePilotThingsIntegration:output_type -> google.protobuf.Empty - 69, // 128: api.ApplicationService.GetPilotThingsIntegration:output_type -> api.GetPilotThingsIntegrationResponse - 76, // 129: api.ApplicationService.UpdatePilotThingsIntegration:output_type -> google.protobuf.Empty - 76, // 130: api.ApplicationService.DeletePilotThingsIntegration:output_type -> google.protobuf.Empty - 73, // 131: api.ApplicationService.GenerateMqttIntegrationClientCertificate:output_type -> api.GenerateMqttIntegrationClientCertificateResponse - 89, // [89:132] is the sub-list for method output_type - 46, // [46:89] is the sub-list for method input_type - 46, // [46:46] is the sub-list for extension type_name - 46, // [46:46] is the sub-list for extension extendee - 0, // [0:46] is the sub-list for field type_name + 72, // 45: api.CreateIftttIntegrationRequest.integration:type_name -> api.IftttIntegration + 72, // 46: api.GetIftttIntegrationResponse.integration:type_name -> api.IftttIntegration + 72, // 47: api.UpdateIftttIntegrationRequest.integration:type_name -> api.IftttIntegration + 81, // 48: api.GenerateMqttIntegrationClientCertificateResponse.expires_at:type_name -> google.protobuf.Timestamp + 6, // 49: api.ApplicationService.Create:input_type -> api.CreateApplicationRequest + 8, // 50: api.ApplicationService.Get:input_type -> api.GetApplicationRequest + 10, // 51: api.ApplicationService.Update:input_type -> api.UpdateApplicationRequest + 11, // 52: api.ApplicationService.Delete:input_type -> api.DeleteApplicationRequest + 12, // 53: api.ApplicationService.List:input_type -> api.ListApplicationsRequest + 14, // 54: api.ApplicationService.ListIntegrations:input_type -> api.ListIntegrationsRequest + 18, // 55: api.ApplicationService.CreateHttpIntegration:input_type -> api.CreateHttpIntegrationRequest + 19, // 56: api.ApplicationService.GetHttpIntegration:input_type -> api.GetHttpIntegrationRequest + 21, // 57: api.ApplicationService.UpdateHttpIntegration:input_type -> api.UpdateHttpIntegrationRequest + 22, // 58: api.ApplicationService.DeleteHttpIntegration:input_type -> api.DeleteHttpIntegrationRequest + 24, // 59: api.ApplicationService.CreateInfluxDbIntegration:input_type -> api.CreateInfluxDbIntegrationRequest + 25, // 60: api.ApplicationService.GetInfluxDbIntegration:input_type -> api.GetInfluxDbIntegrationRequest + 27, // 61: api.ApplicationService.UpdateInfluxDbIntegration:input_type -> api.UpdateInfluxDbIntegrationRequest + 28, // 62: api.ApplicationService.DeleteInfluxDbIntegration:input_type -> api.DeleteInfluxDbIntegrationRequest + 30, // 63: api.ApplicationService.CreateThingsBoardIntegration:input_type -> api.CreateThingsBoardIntegrationRequest + 31, // 64: api.ApplicationService.GetThingsBoardIntegration:input_type -> api.GetThingsBoardIntegrationRequest + 33, // 65: api.ApplicationService.UpdateThingsBoardIntegration:input_type -> api.UpdateThingsBoardIntegrationRequest + 34, // 66: api.ApplicationService.DeleteThingsBoardIntegration:input_type -> api.DeleteThingsBoardIntegrationRequest + 36, // 67: api.ApplicationService.CreateMyDevicesIntegration:input_type -> api.CreateMyDevicesIntegrationRequest + 37, // 68: api.ApplicationService.GetMyDevicesIntegration:input_type -> api.GetMyDevicesIntegrationRequest + 39, // 69: api.ApplicationService.UpdateMyDevicesIntegration:input_type -> api.UpdateMyDevicesIntegrationRequest + 40, // 70: api.ApplicationService.DeleteMyDevicesIntegration:input_type -> api.DeleteMyDevicesIntegrationRequest + 43, // 71: api.ApplicationService.CreateLoraCloudIntegration:input_type -> api.CreateLoraCloudIntegrationRequest + 44, // 72: api.ApplicationService.GetLoraCloudIntegration:input_type -> api.GetLoraCloudIntegrationRequest + 46, // 73: api.ApplicationService.UpdateLoraCloudIntegration:input_type -> api.UpdateLoraCloudIntegrationRequest + 47, // 74: api.ApplicationService.DeleteLoraCloudIntegration:input_type -> api.DeleteLoraCloudIntegrationRequest + 49, // 75: api.ApplicationService.CreateGcpPubSubIntegration:input_type -> api.CreateGcpPubSubIntegrationRequest + 50, // 76: api.ApplicationService.GetGcpPubSubIntegration:input_type -> api.GetGcpPubSubIntegrationRequest + 52, // 77: api.ApplicationService.UpdateGcpPubSubIntegration:input_type -> api.UpdateGcpPubSubIntegrationRequest + 53, // 78: api.ApplicationService.DeleteGcpPubSubIntegration:input_type -> api.DeleteGcpPubSubIntegrationRequest + 55, // 79: api.ApplicationService.CreateAwsSnsIntegration:input_type -> api.CreateAwsSnsIntegrationRequest + 56, // 80: api.ApplicationService.GetAwsSnsIntegration:input_type -> api.GetAwsSnsIntegrationRequest + 58, // 81: api.ApplicationService.UpdateAwsSnsIntegration:input_type -> api.UpdateAwsSnsIntegrationRequest + 59, // 82: api.ApplicationService.DeleteAwsSnsIntegration:input_type -> api.DeleteAwsSnsIntegrationRequest + 61, // 83: api.ApplicationService.CreateAzureServiceBusIntegration:input_type -> api.CreateAzureServiceBusIntegrationRequest + 62, // 84: api.ApplicationService.GetAzureServiceBusIntegration:input_type -> api.GetAzureServiceBusIntegrationRequest + 64, // 85: api.ApplicationService.UpdateAzureServiceBusIntegration:input_type -> api.UpdateAzureServiceBusIntegrationRequest + 65, // 86: api.ApplicationService.DeleteAzureServiceBusIntegration:input_type -> api.DeleteAzureServiceBusIntegrationRequest + 67, // 87: api.ApplicationService.CreatePilotThingsIntegration:input_type -> api.CreatePilotThingsIntegrationRequest + 68, // 88: api.ApplicationService.GetPilotThingsIntegration:input_type -> api.GetPilotThingsIntegrationRequest + 70, // 89: api.ApplicationService.UpdatePilotThingsIntegration:input_type -> api.UpdatePilotThingsIntegrationRequest + 71, // 90: api.ApplicationService.DeletePilotThingsIntegration:input_type -> api.DeletePilotThingsIntegrationRequest + 73, // 91: api.ApplicationService.CreateIftttIntegration:input_type -> api.CreateIftttIntegrationRequest + 74, // 92: api.ApplicationService.GetIftttIntegration:input_type -> api.GetIftttIntegrationRequest + 76, // 93: api.ApplicationService.UpdateIftttIntegration:input_type -> api.UpdateIftttIntegrationRequest + 77, // 94: api.ApplicationService.DeleteIftttIntegration:input_type -> api.DeleteIftttIntegrationRequest + 78, // 95: api.ApplicationService.GenerateMqttIntegrationClientCertificate:input_type -> api.GenerateMqttIntegrationClientCertificateRequest + 7, // 96: api.ApplicationService.Create:output_type -> api.CreateApplicationResponse + 9, // 97: api.ApplicationService.Get:output_type -> api.GetApplicationResponse + 82, // 98: api.ApplicationService.Update:output_type -> google.protobuf.Empty + 82, // 99: api.ApplicationService.Delete:output_type -> google.protobuf.Empty + 13, // 100: api.ApplicationService.List:output_type -> api.ListApplicationsResponse + 16, // 101: api.ApplicationService.ListIntegrations:output_type -> api.ListIntegrationsResponse + 82, // 102: api.ApplicationService.CreateHttpIntegration:output_type -> google.protobuf.Empty + 20, // 103: api.ApplicationService.GetHttpIntegration:output_type -> api.GetHttpIntegrationResponse + 82, // 104: api.ApplicationService.UpdateHttpIntegration:output_type -> google.protobuf.Empty + 82, // 105: api.ApplicationService.DeleteHttpIntegration:output_type -> google.protobuf.Empty + 82, // 106: api.ApplicationService.CreateInfluxDbIntegration:output_type -> google.protobuf.Empty + 26, // 107: api.ApplicationService.GetInfluxDbIntegration:output_type -> api.GetInfluxDbIntegrationResponse + 82, // 108: api.ApplicationService.UpdateInfluxDbIntegration:output_type -> google.protobuf.Empty + 82, // 109: api.ApplicationService.DeleteInfluxDbIntegration:output_type -> google.protobuf.Empty + 82, // 110: api.ApplicationService.CreateThingsBoardIntegration:output_type -> google.protobuf.Empty + 32, // 111: api.ApplicationService.GetThingsBoardIntegration:output_type -> api.GetThingsBoardIntegrationResponse + 82, // 112: api.ApplicationService.UpdateThingsBoardIntegration:output_type -> google.protobuf.Empty + 82, // 113: api.ApplicationService.DeleteThingsBoardIntegration:output_type -> google.protobuf.Empty + 82, // 114: api.ApplicationService.CreateMyDevicesIntegration:output_type -> google.protobuf.Empty + 38, // 115: api.ApplicationService.GetMyDevicesIntegration:output_type -> api.GetMyDevicesIntegrationResponse + 82, // 116: api.ApplicationService.UpdateMyDevicesIntegration:output_type -> google.protobuf.Empty + 82, // 117: api.ApplicationService.DeleteMyDevicesIntegration:output_type -> google.protobuf.Empty + 82, // 118: api.ApplicationService.CreateLoraCloudIntegration:output_type -> google.protobuf.Empty + 45, // 119: api.ApplicationService.GetLoraCloudIntegration:output_type -> api.GetLoraCloudIntegrationResponse + 82, // 120: api.ApplicationService.UpdateLoraCloudIntegration:output_type -> google.protobuf.Empty + 82, // 121: api.ApplicationService.DeleteLoraCloudIntegration:output_type -> google.protobuf.Empty + 82, // 122: api.ApplicationService.CreateGcpPubSubIntegration:output_type -> google.protobuf.Empty + 51, // 123: api.ApplicationService.GetGcpPubSubIntegration:output_type -> api.GetGcpPubSubIntegrationResponse + 82, // 124: api.ApplicationService.UpdateGcpPubSubIntegration:output_type -> google.protobuf.Empty + 82, // 125: api.ApplicationService.DeleteGcpPubSubIntegration:output_type -> google.protobuf.Empty + 82, // 126: api.ApplicationService.CreateAwsSnsIntegration:output_type -> google.protobuf.Empty + 57, // 127: api.ApplicationService.GetAwsSnsIntegration:output_type -> api.GetAwsSnsIntegrationResponse + 82, // 128: api.ApplicationService.UpdateAwsSnsIntegration:output_type -> google.protobuf.Empty + 82, // 129: api.ApplicationService.DeleteAwsSnsIntegration:output_type -> google.protobuf.Empty + 82, // 130: api.ApplicationService.CreateAzureServiceBusIntegration:output_type -> google.protobuf.Empty + 63, // 131: api.ApplicationService.GetAzureServiceBusIntegration:output_type -> api.GetAzureServiceBusIntegrationResponse + 82, // 132: api.ApplicationService.UpdateAzureServiceBusIntegration:output_type -> google.protobuf.Empty + 82, // 133: api.ApplicationService.DeleteAzureServiceBusIntegration:output_type -> google.protobuf.Empty + 82, // 134: api.ApplicationService.CreatePilotThingsIntegration:output_type -> google.protobuf.Empty + 69, // 135: api.ApplicationService.GetPilotThingsIntegration:output_type -> api.GetPilotThingsIntegrationResponse + 82, // 136: api.ApplicationService.UpdatePilotThingsIntegration:output_type -> google.protobuf.Empty + 82, // 137: api.ApplicationService.DeletePilotThingsIntegration:output_type -> google.protobuf.Empty + 82, // 138: api.ApplicationService.CreateIftttIntegration:output_type -> google.protobuf.Empty + 75, // 139: api.ApplicationService.GetIftttIntegration:output_type -> api.GetIftttIntegrationResponse + 82, // 140: api.ApplicationService.UpdateIftttIntegration:output_type -> google.protobuf.Empty + 82, // 141: api.ApplicationService.DeleteIftttIntegration:output_type -> google.protobuf.Empty + 79, // 142: api.ApplicationService.GenerateMqttIntegrationClientCertificate:output_type -> api.GenerateMqttIntegrationClientCertificateResponse + 96, // [96:143] is the sub-list for method output_type + 49, // [49:96] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name } func init() { file_api_application_proto_init() } @@ -6036,7 +6443,7 @@ func file_api_application_proto_init() { } } file_api_application_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateMqttIntegrationClientCertificateRequest); i { + switch v := v.(*IftttIntegration); i { case 0: return &v.state case 1: @@ -6048,6 +6455,78 @@ func file_api_application_proto_init() { } } file_api_application_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateIftttIntegrationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_application_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetIftttIntegrationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_application_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetIftttIntegrationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_application_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateIftttIntegrationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_application_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteIftttIntegrationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_application_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateMqttIntegrationClientCertificateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_application_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenerateMqttIntegrationClientCertificateResponse); i { case 0: return &v.state @@ -6066,7 +6545,7 @@ func file_api_application_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_application_proto_rawDesc, NumEnums: 4, - NumMessages: 71, + NumMessages: 77, NumExtensions: 0, NumServices: 1, }, diff --git a/api/go/api/application_grpc.pb.go b/api/go/api/application_grpc.pb.go index 9a533d30..fa9218df 100644 --- a/api/go/api/application_grpc.pb.go +++ b/api/go/api/application_grpc.pb.go @@ -107,6 +107,14 @@ type ApplicationServiceClient interface { UpdatePilotThingsIntegration(ctx context.Context, in *UpdatePilotThingsIntegrationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Delete Pilot Things integration. DeletePilotThingsIntegration(ctx context.Context, in *DeletePilotThingsIntegrationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // Create IFTTT integration. + CreateIftttIntegration(ctx context.Context, in *CreateIftttIntegrationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // Get IFTTT integration. + GetIftttIntegration(ctx context.Context, in *GetIftttIntegrationRequest, opts ...grpc.CallOption) (*GetIftttIntegrationResponse, error) + // Update IFTTT integration. + UpdateIftttIntegration(ctx context.Context, in *UpdateIftttIntegrationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // Delete IFTTT integration. + DeleteIftttIntegration(ctx context.Context, in *DeleteIftttIntegrationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Generates application ID specific client-certificate. GenerateMqttIntegrationClientCertificate(ctx context.Context, in *GenerateMqttIntegrationClientCertificateRequest, opts ...grpc.CallOption) (*GenerateMqttIntegrationClientCertificateResponse, error) } @@ -497,6 +505,42 @@ func (c *applicationServiceClient) DeletePilotThingsIntegration(ctx context.Cont return out, nil } +func (c *applicationServiceClient) CreateIftttIntegration(ctx context.Context, in *CreateIftttIntegrationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/api.ApplicationService/CreateIftttIntegration", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *applicationServiceClient) GetIftttIntegration(ctx context.Context, in *GetIftttIntegrationRequest, opts ...grpc.CallOption) (*GetIftttIntegrationResponse, error) { + out := new(GetIftttIntegrationResponse) + err := c.cc.Invoke(ctx, "/api.ApplicationService/GetIftttIntegration", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *applicationServiceClient) UpdateIftttIntegration(ctx context.Context, in *UpdateIftttIntegrationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/api.ApplicationService/UpdateIftttIntegration", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *applicationServiceClient) DeleteIftttIntegration(ctx context.Context, in *DeleteIftttIntegrationRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/api.ApplicationService/DeleteIftttIntegration", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *applicationServiceClient) GenerateMqttIntegrationClientCertificate(ctx context.Context, in *GenerateMqttIntegrationClientCertificateRequest, opts ...grpc.CallOption) (*GenerateMqttIntegrationClientCertificateResponse, error) { out := new(GenerateMqttIntegrationClientCertificateResponse) err := c.cc.Invoke(ctx, "/api.ApplicationService/GenerateMqttIntegrationClientCertificate", in, out, opts...) @@ -594,6 +638,14 @@ type ApplicationServiceServer interface { UpdatePilotThingsIntegration(context.Context, *UpdatePilotThingsIntegrationRequest) (*emptypb.Empty, error) // Delete Pilot Things integration. DeletePilotThingsIntegration(context.Context, *DeletePilotThingsIntegrationRequest) (*emptypb.Empty, error) + // Create IFTTT integration. + CreateIftttIntegration(context.Context, *CreateIftttIntegrationRequest) (*emptypb.Empty, error) + // Get IFTTT integration. + GetIftttIntegration(context.Context, *GetIftttIntegrationRequest) (*GetIftttIntegrationResponse, error) + // Update IFTTT integration. + UpdateIftttIntegration(context.Context, *UpdateIftttIntegrationRequest) (*emptypb.Empty, error) + // Delete IFTTT integration. + DeleteIftttIntegration(context.Context, *DeleteIftttIntegrationRequest) (*emptypb.Empty, error) // Generates application ID specific client-certificate. GenerateMqttIntegrationClientCertificate(context.Context, *GenerateMqttIntegrationClientCertificateRequest) (*GenerateMqttIntegrationClientCertificateResponse, error) mustEmbedUnimplementedApplicationServiceServer() @@ -729,6 +781,18 @@ func (UnimplementedApplicationServiceServer) UpdatePilotThingsIntegration(contex func (UnimplementedApplicationServiceServer) DeletePilotThingsIntegration(context.Context, *DeletePilotThingsIntegrationRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeletePilotThingsIntegration not implemented") } +func (UnimplementedApplicationServiceServer) CreateIftttIntegration(context.Context, *CreateIftttIntegrationRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateIftttIntegration not implemented") +} +func (UnimplementedApplicationServiceServer) GetIftttIntegration(context.Context, *GetIftttIntegrationRequest) (*GetIftttIntegrationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetIftttIntegration not implemented") +} +func (UnimplementedApplicationServiceServer) UpdateIftttIntegration(context.Context, *UpdateIftttIntegrationRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateIftttIntegration not implemented") +} +func (UnimplementedApplicationServiceServer) DeleteIftttIntegration(context.Context, *DeleteIftttIntegrationRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteIftttIntegration not implemented") +} func (UnimplementedApplicationServiceServer) GenerateMqttIntegrationClientCertificate(context.Context, *GenerateMqttIntegrationClientCertificateRequest) (*GenerateMqttIntegrationClientCertificateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GenerateMqttIntegrationClientCertificate not implemented") } @@ -1501,6 +1565,78 @@ func _ApplicationService_DeletePilotThingsIntegration_Handler(srv interface{}, c return interceptor(ctx, in, info, handler) } +func _ApplicationService_CreateIftttIntegration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateIftttIntegrationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ApplicationServiceServer).CreateIftttIntegration(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.ApplicationService/CreateIftttIntegration", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ApplicationServiceServer).CreateIftttIntegration(ctx, req.(*CreateIftttIntegrationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ApplicationService_GetIftttIntegration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetIftttIntegrationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ApplicationServiceServer).GetIftttIntegration(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.ApplicationService/GetIftttIntegration", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ApplicationServiceServer).GetIftttIntegration(ctx, req.(*GetIftttIntegrationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ApplicationService_UpdateIftttIntegration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateIftttIntegrationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ApplicationServiceServer).UpdateIftttIntegration(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.ApplicationService/UpdateIftttIntegration", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ApplicationServiceServer).UpdateIftttIntegration(ctx, req.(*UpdateIftttIntegrationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ApplicationService_DeleteIftttIntegration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteIftttIntegrationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ApplicationServiceServer).DeleteIftttIntegration(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.ApplicationService/DeleteIftttIntegration", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ApplicationServiceServer).DeleteIftttIntegration(ctx, req.(*DeleteIftttIntegrationRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ApplicationService_GenerateMqttIntegrationClientCertificate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GenerateMqttIntegrationClientCertificateRequest) if err := dec(in); err != nil { @@ -1694,6 +1830,22 @@ var ApplicationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeletePilotThingsIntegration", Handler: _ApplicationService_DeletePilotThingsIntegration_Handler, }, + { + MethodName: "CreateIftttIntegration", + Handler: _ApplicationService_CreateIftttIntegration_Handler, + }, + { + MethodName: "GetIftttIntegration", + Handler: _ApplicationService_GetIftttIntegration_Handler, + }, + { + MethodName: "UpdateIftttIntegration", + Handler: _ApplicationService_UpdateIftttIntegration_Handler, + }, + { + MethodName: "DeleteIftttIntegration", + Handler: _ApplicationService_DeleteIftttIntegration_Handler, + }, { MethodName: "GenerateMqttIntegrationClientCertificate", Handler: _ApplicationService_GenerateMqttIntegrationClientCertificate_Handler, diff --git a/api/grpc-web/api/application_grpc_web_pb.d.ts b/api/grpc-web/api/application_grpc_web_pb.d.ts index 6d903322..0cc12d91 100644 --- a/api/grpc-web/api/application_grpc_web_pb.d.ts +++ b/api/grpc-web/api/application_grpc_web_pb.d.ts @@ -303,6 +303,34 @@ export class ApplicationServiceClient { response: google_protobuf_empty_pb.Empty) => void ): grpcWeb.ClientReadableStream; + createIftttIntegration( + request: api_application_pb.CreateIftttIntegrationRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: google_protobuf_empty_pb.Empty) => void + ): grpcWeb.ClientReadableStream; + + getIftttIntegration( + request: api_application_pb.GetIftttIntegrationRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: api_application_pb.GetIftttIntegrationResponse) => void + ): grpcWeb.ClientReadableStream; + + updateIftttIntegration( + request: api_application_pb.UpdateIftttIntegrationRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: google_protobuf_empty_pb.Empty) => void + ): grpcWeb.ClientReadableStream; + + deleteIftttIntegration( + request: api_application_pb.DeleteIftttIntegrationRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: google_protobuf_empty_pb.Empty) => void + ): grpcWeb.ClientReadableStream; + generateMqttIntegrationClientCertificate( request: api_application_pb.GenerateMqttIntegrationClientCertificateRequest, metadata: grpcWeb.Metadata | undefined, @@ -527,6 +555,26 @@ export class ApplicationServicePromiseClient { metadata?: grpcWeb.Metadata ): Promise; + createIftttIntegration( + request: api_application_pb.CreateIftttIntegrationRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + getIftttIntegration( + request: api_application_pb.GetIftttIntegrationRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + updateIftttIntegration( + request: api_application_pb.UpdateIftttIntegrationRequest, + metadata?: grpcWeb.Metadata + ): Promise; + + deleteIftttIntegration( + request: api_application_pb.DeleteIftttIntegrationRequest, + metadata?: grpcWeb.Metadata + ): Promise; + generateMqttIntegrationClientCertificate( request: api_application_pb.GenerateMqttIntegrationClientCertificateRequest, metadata?: grpcWeb.Metadata diff --git a/api/grpc-web/api/application_grpc_web_pb.js b/api/grpc-web/api/application_grpc_web_pb.js index accd14e3..bdfac562 100644 --- a/api/grpc-web/api/application_grpc_web_pb.js +++ b/api/grpc-web/api/application_grpc_web_pb.js @@ -3434,6 +3434,326 @@ proto.api.ApplicationServicePromiseClient.prototype.deletePilotThingsIntegration }; +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.api.CreateIftttIntegrationRequest, + * !proto.google.protobuf.Empty>} + */ +const methodDescriptor_ApplicationService_CreateIftttIntegration = new grpc.web.MethodDescriptor( + '/api.ApplicationService/CreateIftttIntegration', + grpc.web.MethodType.UNARY, + proto.api.CreateIftttIntegrationRequest, + google_protobuf_empty_pb.Empty, + /** + * @param {!proto.api.CreateIftttIntegrationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + google_protobuf_empty_pb.Empty.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.api.CreateIftttIntegrationRequest, + * !proto.google.protobuf.Empty>} + */ +const methodInfo_ApplicationService_CreateIftttIntegration = new grpc.web.AbstractClientBase.MethodInfo( + google_protobuf_empty_pb.Empty, + /** + * @param {!proto.api.CreateIftttIntegrationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + google_protobuf_empty_pb.Empty.deserializeBinary +); + + +/** + * @param {!proto.api.CreateIftttIntegrationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.google.protobuf.Empty)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.api.ApplicationServiceClient.prototype.createIftttIntegration = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/api.ApplicationService/CreateIftttIntegration', + request, + metadata || {}, + methodDescriptor_ApplicationService_CreateIftttIntegration, + callback); +}; + + +/** + * @param {!proto.api.CreateIftttIntegrationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.api.ApplicationServicePromiseClient.prototype.createIftttIntegration = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/api.ApplicationService/CreateIftttIntegration', + request, + metadata || {}, + methodDescriptor_ApplicationService_CreateIftttIntegration); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.api.GetIftttIntegrationRequest, + * !proto.api.GetIftttIntegrationResponse>} + */ +const methodDescriptor_ApplicationService_GetIftttIntegration = new grpc.web.MethodDescriptor( + '/api.ApplicationService/GetIftttIntegration', + grpc.web.MethodType.UNARY, + proto.api.GetIftttIntegrationRequest, + proto.api.GetIftttIntegrationResponse, + /** + * @param {!proto.api.GetIftttIntegrationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.api.GetIftttIntegrationResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.api.GetIftttIntegrationRequest, + * !proto.api.GetIftttIntegrationResponse>} + */ +const methodInfo_ApplicationService_GetIftttIntegration = new grpc.web.AbstractClientBase.MethodInfo( + proto.api.GetIftttIntegrationResponse, + /** + * @param {!proto.api.GetIftttIntegrationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.api.GetIftttIntegrationResponse.deserializeBinary +); + + +/** + * @param {!proto.api.GetIftttIntegrationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.api.GetIftttIntegrationResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.api.ApplicationServiceClient.prototype.getIftttIntegration = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/api.ApplicationService/GetIftttIntegration', + request, + metadata || {}, + methodDescriptor_ApplicationService_GetIftttIntegration, + callback); +}; + + +/** + * @param {!proto.api.GetIftttIntegrationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.api.ApplicationServicePromiseClient.prototype.getIftttIntegration = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/api.ApplicationService/GetIftttIntegration', + request, + metadata || {}, + methodDescriptor_ApplicationService_GetIftttIntegration); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.api.UpdateIftttIntegrationRequest, + * !proto.google.protobuf.Empty>} + */ +const methodDescriptor_ApplicationService_UpdateIftttIntegration = new grpc.web.MethodDescriptor( + '/api.ApplicationService/UpdateIftttIntegration', + grpc.web.MethodType.UNARY, + proto.api.UpdateIftttIntegrationRequest, + google_protobuf_empty_pb.Empty, + /** + * @param {!proto.api.UpdateIftttIntegrationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + google_protobuf_empty_pb.Empty.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.api.UpdateIftttIntegrationRequest, + * !proto.google.protobuf.Empty>} + */ +const methodInfo_ApplicationService_UpdateIftttIntegration = new grpc.web.AbstractClientBase.MethodInfo( + google_protobuf_empty_pb.Empty, + /** + * @param {!proto.api.UpdateIftttIntegrationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + google_protobuf_empty_pb.Empty.deserializeBinary +); + + +/** + * @param {!proto.api.UpdateIftttIntegrationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.google.protobuf.Empty)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.api.ApplicationServiceClient.prototype.updateIftttIntegration = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/api.ApplicationService/UpdateIftttIntegration', + request, + metadata || {}, + methodDescriptor_ApplicationService_UpdateIftttIntegration, + callback); +}; + + +/** + * @param {!proto.api.UpdateIftttIntegrationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.api.ApplicationServicePromiseClient.prototype.updateIftttIntegration = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/api.ApplicationService/UpdateIftttIntegration', + request, + metadata || {}, + methodDescriptor_ApplicationService_UpdateIftttIntegration); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.api.DeleteIftttIntegrationRequest, + * !proto.google.protobuf.Empty>} + */ +const methodDescriptor_ApplicationService_DeleteIftttIntegration = new grpc.web.MethodDescriptor( + '/api.ApplicationService/DeleteIftttIntegration', + grpc.web.MethodType.UNARY, + proto.api.DeleteIftttIntegrationRequest, + google_protobuf_empty_pb.Empty, + /** + * @param {!proto.api.DeleteIftttIntegrationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + google_protobuf_empty_pb.Empty.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.api.DeleteIftttIntegrationRequest, + * !proto.google.protobuf.Empty>} + */ +const methodInfo_ApplicationService_DeleteIftttIntegration = new grpc.web.AbstractClientBase.MethodInfo( + google_protobuf_empty_pb.Empty, + /** + * @param {!proto.api.DeleteIftttIntegrationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + google_protobuf_empty_pb.Empty.deserializeBinary +); + + +/** + * @param {!proto.api.DeleteIftttIntegrationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.google.protobuf.Empty)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.api.ApplicationServiceClient.prototype.deleteIftttIntegration = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/api.ApplicationService/DeleteIftttIntegration', + request, + metadata || {}, + methodDescriptor_ApplicationService_DeleteIftttIntegration, + callback); +}; + + +/** + * @param {!proto.api.DeleteIftttIntegrationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.api.ApplicationServicePromiseClient.prototype.deleteIftttIntegration = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/api.ApplicationService/DeleteIftttIntegration', + request, + metadata || {}, + methodDescriptor_ApplicationService_DeleteIftttIntegration); +}; + + /** * @const * @type {!grpc.web.MethodDescriptor< diff --git a/api/grpc-web/api/application_pb.d.ts b/api/grpc-web/api/application_pb.d.ts index b2945d5f..e963e8cd 100644 --- a/api/grpc-web/api/application_pb.d.ts +++ b/api/grpc-web/api/application_pb.d.ts @@ -144,6 +144,11 @@ export class GetApplicationResponse extends jspb.Message { hasUpdatedAt(): boolean; clearUpdatedAt(): GetApplicationResponse; + getMeasurementKeysList(): Array; + setMeasurementKeysList(value: Array): GetApplicationResponse; + clearMeasurementKeysList(): GetApplicationResponse; + addMeasurementKeys(value: string, index?: number): GetApplicationResponse; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetApplicationResponse.AsObject; static toObject(includeInstance: boolean, msg: GetApplicationResponse): GetApplicationResponse.AsObject; @@ -157,6 +162,7 @@ export namespace GetApplicationResponse { application?: Application.AsObject, createdAt?: google_protobuf_timestamp_pb.Timestamp.AsObject, updatedAt?: google_protobuf_timestamp_pb.Timestamp.AsObject, + measurementKeysList: Array, } } @@ -1534,6 +1540,130 @@ export namespace DeletePilotThingsIntegrationRequest { } } +export class IftttIntegration extends jspb.Message { + getApplicationId(): string; + setApplicationId(value: string): IftttIntegration; + + getKey(): string; + setKey(value: string): IftttIntegration; + + getUplinkValuesList(): Array; + setUplinkValuesList(value: Array): IftttIntegration; + clearUplinkValuesList(): IftttIntegration; + addUplinkValues(value: string, index?: number): IftttIntegration; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): IftttIntegration.AsObject; + static toObject(includeInstance: boolean, msg: IftttIntegration): IftttIntegration.AsObject; + static serializeBinaryToWriter(message: IftttIntegration, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): IftttIntegration; + static deserializeBinaryFromReader(message: IftttIntegration, reader: jspb.BinaryReader): IftttIntegration; +} + +export namespace IftttIntegration { + export type AsObject = { + applicationId: string, + key: string, + uplinkValuesList: Array, + } +} + +export class CreateIftttIntegrationRequest extends jspb.Message { + getIntegration(): IftttIntegration | undefined; + setIntegration(value?: IftttIntegration): CreateIftttIntegrationRequest; + hasIntegration(): boolean; + clearIntegration(): CreateIftttIntegrationRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): CreateIftttIntegrationRequest.AsObject; + static toObject(includeInstance: boolean, msg: CreateIftttIntegrationRequest): CreateIftttIntegrationRequest.AsObject; + static serializeBinaryToWriter(message: CreateIftttIntegrationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): CreateIftttIntegrationRequest; + static deserializeBinaryFromReader(message: CreateIftttIntegrationRequest, reader: jspb.BinaryReader): CreateIftttIntegrationRequest; +} + +export namespace CreateIftttIntegrationRequest { + export type AsObject = { + integration?: IftttIntegration.AsObject, + } +} + +export class GetIftttIntegrationRequest extends jspb.Message { + getApplicationId(): string; + setApplicationId(value: string): GetIftttIntegrationRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetIftttIntegrationRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetIftttIntegrationRequest): GetIftttIntegrationRequest.AsObject; + static serializeBinaryToWriter(message: GetIftttIntegrationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetIftttIntegrationRequest; + static deserializeBinaryFromReader(message: GetIftttIntegrationRequest, reader: jspb.BinaryReader): GetIftttIntegrationRequest; +} + +export namespace GetIftttIntegrationRequest { + export type AsObject = { + applicationId: string, + } +} + +export class GetIftttIntegrationResponse extends jspb.Message { + getIntegration(): IftttIntegration | undefined; + setIntegration(value?: IftttIntegration): GetIftttIntegrationResponse; + hasIntegration(): boolean; + clearIntegration(): GetIftttIntegrationResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetIftttIntegrationResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetIftttIntegrationResponse): GetIftttIntegrationResponse.AsObject; + static serializeBinaryToWriter(message: GetIftttIntegrationResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetIftttIntegrationResponse; + static deserializeBinaryFromReader(message: GetIftttIntegrationResponse, reader: jspb.BinaryReader): GetIftttIntegrationResponse; +} + +export namespace GetIftttIntegrationResponse { + export type AsObject = { + integration?: IftttIntegration.AsObject, + } +} + +export class UpdateIftttIntegrationRequest extends jspb.Message { + getIntegration(): IftttIntegration | undefined; + setIntegration(value?: IftttIntegration): UpdateIftttIntegrationRequest; + hasIntegration(): boolean; + clearIntegration(): UpdateIftttIntegrationRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): UpdateIftttIntegrationRequest.AsObject; + static toObject(includeInstance: boolean, msg: UpdateIftttIntegrationRequest): UpdateIftttIntegrationRequest.AsObject; + static serializeBinaryToWriter(message: UpdateIftttIntegrationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): UpdateIftttIntegrationRequest; + static deserializeBinaryFromReader(message: UpdateIftttIntegrationRequest, reader: jspb.BinaryReader): UpdateIftttIntegrationRequest; +} + +export namespace UpdateIftttIntegrationRequest { + export type AsObject = { + integration?: IftttIntegration.AsObject, + } +} + +export class DeleteIftttIntegrationRequest extends jspb.Message { + getApplicationId(): string; + setApplicationId(value: string): DeleteIftttIntegrationRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DeleteIftttIntegrationRequest.AsObject; + static toObject(includeInstance: boolean, msg: DeleteIftttIntegrationRequest): DeleteIftttIntegrationRequest.AsObject; + static serializeBinaryToWriter(message: DeleteIftttIntegrationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DeleteIftttIntegrationRequest; + static deserializeBinaryFromReader(message: DeleteIftttIntegrationRequest, reader: jspb.BinaryReader): DeleteIftttIntegrationRequest; +} + +export namespace DeleteIftttIntegrationRequest { + export type AsObject = { + applicationId: string, + } +} + export class GenerateMqttIntegrationClientCertificateRequest extends jspb.Message { getApplicationId(): string; setApplicationId(value: string): GenerateMqttIntegrationClientCertificateRequest; @@ -1599,6 +1729,7 @@ export enum IntegrationKind { AZURE_SERVICE_BUS = 7, PILOT_THINGS = 8, MQTT_GLOBAL = 9, + IFTTT = 10, } export enum InfluxDbPrecision { NS = 0, diff --git a/api/grpc-web/api/application_pb.js b/api/grpc-web/api/application_pb.js index 394a4dd0..5ab4fbfd 100644 --- a/api/grpc-web/api/application_pb.js +++ b/api/grpc-web/api/application_pb.js @@ -29,6 +29,7 @@ goog.exportSymbol('proto.api.CreateAwsSnsIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateAzureServiceBusIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateGcpPubSubIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateHttpIntegrationRequest', null, global); +goog.exportSymbol('proto.api.CreateIftttIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateInfluxDbIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateLoraCloudIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateMyDevicesIntegrationRequest', null, global); @@ -39,6 +40,7 @@ goog.exportSymbol('proto.api.DeleteAwsSnsIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteAzureServiceBusIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteGcpPubSubIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteHttpIntegrationRequest', null, global); +goog.exportSymbol('proto.api.DeleteIftttIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteInfluxDbIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteLoraCloudIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteMyDevicesIntegrationRequest', null, global); @@ -58,6 +60,8 @@ goog.exportSymbol('proto.api.GetGcpPubSubIntegrationRequest', null, global); goog.exportSymbol('proto.api.GetGcpPubSubIntegrationResponse', null, global); goog.exportSymbol('proto.api.GetHttpIntegrationRequest', null, global); goog.exportSymbol('proto.api.GetHttpIntegrationResponse', null, global); +goog.exportSymbol('proto.api.GetIftttIntegrationRequest', null, global); +goog.exportSymbol('proto.api.GetIftttIntegrationResponse', null, global); goog.exportSymbol('proto.api.GetInfluxDbIntegrationRequest', null, global); goog.exportSymbol('proto.api.GetInfluxDbIntegrationResponse', null, global); goog.exportSymbol('proto.api.GetLoraCloudIntegrationRequest', null, global); @@ -69,6 +73,7 @@ goog.exportSymbol('proto.api.GetPilotThingsIntegrationResponse', null, global); goog.exportSymbol('proto.api.GetThingsBoardIntegrationRequest', null, global); goog.exportSymbol('proto.api.GetThingsBoardIntegrationResponse', null, global); goog.exportSymbol('proto.api.HttpIntegration', null, global); +goog.exportSymbol('proto.api.IftttIntegration', null, global); goog.exportSymbol('proto.api.InfluxDbIntegration', null, global); goog.exportSymbol('proto.api.InfluxDbPrecision', null, global); goog.exportSymbol('proto.api.InfluxDbVersion', null, global); @@ -88,6 +93,7 @@ goog.exportSymbol('proto.api.UpdateAwsSnsIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateAzureServiceBusIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateGcpPubSubIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateHttpIntegrationRequest', null, global); +goog.exportSymbol('proto.api.UpdateIftttIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateInfluxDbIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateLoraCloudIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateMyDevicesIntegrationRequest', null, global); @@ -209,7 +215,7 @@ if (goog.DEBUG && !COMPILED) { * @constructor */ proto.api.GetApplicationResponse = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.api.GetApplicationResponse.repeatedFields_, null); }; goog.inherits(proto.api.GetApplicationResponse, jspb.Message); if (goog.DEBUG && !COMPILED) { @@ -1521,6 +1527,132 @@ if (goog.DEBUG && !COMPILED) { */ proto.api.DeletePilotThingsIntegrationRequest.displayName = 'proto.api.DeletePilotThingsIntegrationRequest'; } +/** + * 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.api.IftttIntegration = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.api.IftttIntegration.repeatedFields_, null); +}; +goog.inherits(proto.api.IftttIntegration, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.IftttIntegration.displayName = 'proto.api.IftttIntegration'; +} +/** + * 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.api.CreateIftttIntegrationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.CreateIftttIntegrationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.CreateIftttIntegrationRequest.displayName = 'proto.api.CreateIftttIntegrationRequest'; +} +/** + * 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.api.GetIftttIntegrationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.GetIftttIntegrationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.GetIftttIntegrationRequest.displayName = 'proto.api.GetIftttIntegrationRequest'; +} +/** + * 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.api.GetIftttIntegrationResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.GetIftttIntegrationResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.GetIftttIntegrationResponse.displayName = 'proto.api.GetIftttIntegrationResponse'; +} +/** + * 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.api.UpdateIftttIntegrationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.UpdateIftttIntegrationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.UpdateIftttIntegrationRequest.displayName = 'proto.api.UpdateIftttIntegrationRequest'; +} +/** + * 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.api.DeleteIftttIntegrationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.DeleteIftttIntegrationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.DeleteIftttIntegrationRequest.displayName = 'proto.api.DeleteIftttIntegrationRequest'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -2487,6 +2619,13 @@ proto.api.GetApplicationRequest.prototype.setId = function(value) { +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.api.GetApplicationResponse.repeatedFields_ = [4]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -2520,7 +2659,8 @@ proto.api.GetApplicationResponse.toObject = function(includeInstance, msg) { var f, obj = { application: (f = msg.getApplication()) && proto.api.Application.toObject(includeInstance, f), createdAt: (f = msg.getCreatedAt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), - updatedAt: (f = msg.getUpdatedAt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f) + updatedAt: (f = msg.getUpdatedAt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), + measurementKeysList: (f = jspb.Message.getRepeatedField(msg, 4)) == null ? undefined : f }; if (includeInstance) { @@ -2572,6 +2712,10 @@ proto.api.GetApplicationResponse.deserializeBinaryFromReader = function(msg, rea reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader); msg.setUpdatedAt(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.addMeasurementKeys(value); + break; default: reader.skipField(); break; @@ -2625,6 +2769,13 @@ proto.api.GetApplicationResponse.serializeBinaryToWriter = function(message, wri google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter ); } + f = message.getMeasurementKeysList(); + if (f.length > 0) { + writer.writeRepeatedString( + 4, + f + ); + } }; @@ -2739,6 +2890,43 @@ proto.api.GetApplicationResponse.prototype.hasUpdatedAt = function() { }; +/** + * repeated string measurement_keys = 4; + * @return {!Array} + */ +proto.api.GetApplicationResponse.prototype.getMeasurementKeysList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.api.GetApplicationResponse} returns this + */ +proto.api.GetApplicationResponse.prototype.setMeasurementKeysList = function(value) { + return jspb.Message.setField(this, 4, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.api.GetApplicationResponse} returns this + */ +proto.api.GetApplicationResponse.prototype.addMeasurementKeys = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 4, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.api.GetApplicationResponse} returns this + */ +proto.api.GetApplicationResponse.prototype.clearMeasurementKeysList = function() { + return this.setMeasurementKeysList([]); +}; + + @@ -12942,6 +13130,935 @@ proto.api.DeletePilotThingsIntegrationRequest.prototype.setApplicationId = funct +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.api.IftttIntegration.repeatedFields_ = [3]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.IftttIntegration.prototype.toObject = function(opt_includeInstance) { + return proto.api.IftttIntegration.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.IftttIntegration} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.IftttIntegration.toObject = function(includeInstance, msg) { + var f, obj = { + applicationId: jspb.Message.getFieldWithDefault(msg, 1, ""), + key: jspb.Message.getFieldWithDefault(msg, 2, ""), + uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.IftttIntegration} + */ +proto.api.IftttIntegration.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.IftttIntegration; + return proto.api.IftttIntegration.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.IftttIntegration} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.IftttIntegration} + */ +proto.api.IftttIntegration.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setApplicationId(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setKey(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.addUplinkValues(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.IftttIntegration.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.IftttIntegration.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.IftttIntegration} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.IftttIntegration.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getApplicationId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getKey(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getUplinkValuesList(); + if (f.length > 0) { + writer.writeRepeatedString( + 3, + f + ); + } +}; + + +/** + * optional string application_id = 1; + * @return {string} + */ +proto.api.IftttIntegration.prototype.getApplicationId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api.IftttIntegration} returns this + */ +proto.api.IftttIntegration.prototype.setApplicationId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string key = 2; + * @return {string} + */ +proto.api.IftttIntegration.prototype.getKey = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api.IftttIntegration} returns this + */ +proto.api.IftttIntegration.prototype.setKey = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * repeated string uplink_values = 3; + * @return {!Array} + */ +proto.api.IftttIntegration.prototype.getUplinkValuesList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 3)); +}; + + +/** + * @param {!Array} value + * @return {!proto.api.IftttIntegration} returns this + */ +proto.api.IftttIntegration.prototype.setUplinkValuesList = function(value) { + return jspb.Message.setField(this, 3, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.api.IftttIntegration} returns this + */ +proto.api.IftttIntegration.prototype.addUplinkValues = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 3, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.api.IftttIntegration} returns this + */ +proto.api.IftttIntegration.prototype.clearUplinkValuesList = function() { + return this.setUplinkValuesList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.CreateIftttIntegrationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.CreateIftttIntegrationRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.CreateIftttIntegrationRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.CreateIftttIntegrationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + integration: (f = msg.getIntegration()) && proto.api.IftttIntegration.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.CreateIftttIntegrationRequest} + */ +proto.api.CreateIftttIntegrationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.CreateIftttIntegrationRequest; + return proto.api.CreateIftttIntegrationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.CreateIftttIntegrationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.CreateIftttIntegrationRequest} + */ +proto.api.CreateIftttIntegrationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.api.IftttIntegration; + reader.readMessage(value,proto.api.IftttIntegration.deserializeBinaryFromReader); + msg.setIntegration(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.CreateIftttIntegrationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.CreateIftttIntegrationRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.CreateIftttIntegrationRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.CreateIftttIntegrationRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getIntegration(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.api.IftttIntegration.serializeBinaryToWriter + ); + } +}; + + +/** + * optional IftttIntegration integration = 1; + * @return {?proto.api.IftttIntegration} + */ +proto.api.CreateIftttIntegrationRequest.prototype.getIntegration = function() { + return /** @type{?proto.api.IftttIntegration} */ ( + jspb.Message.getWrapperField(this, proto.api.IftttIntegration, 1)); +}; + + +/** + * @param {?proto.api.IftttIntegration|undefined} value + * @return {!proto.api.CreateIftttIntegrationRequest} returns this +*/ +proto.api.CreateIftttIntegrationRequest.prototype.setIntegration = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.api.CreateIftttIntegrationRequest} returns this + */ +proto.api.CreateIftttIntegrationRequest.prototype.clearIntegration = function() { + return this.setIntegration(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.api.CreateIftttIntegrationRequest.prototype.hasIntegration = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.GetIftttIntegrationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.GetIftttIntegrationRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.GetIftttIntegrationRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.GetIftttIntegrationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + applicationId: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.GetIftttIntegrationRequest} + */ +proto.api.GetIftttIntegrationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.GetIftttIntegrationRequest; + return proto.api.GetIftttIntegrationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.GetIftttIntegrationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.GetIftttIntegrationRequest} + */ +proto.api.GetIftttIntegrationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setApplicationId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.GetIftttIntegrationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.GetIftttIntegrationRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.GetIftttIntegrationRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.GetIftttIntegrationRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getApplicationId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string application_id = 1; + * @return {string} + */ +proto.api.GetIftttIntegrationRequest.prototype.getApplicationId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api.GetIftttIntegrationRequest} returns this + */ +proto.api.GetIftttIntegrationRequest.prototype.setApplicationId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.GetIftttIntegrationResponse.prototype.toObject = function(opt_includeInstance) { + return proto.api.GetIftttIntegrationResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.GetIftttIntegrationResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.GetIftttIntegrationResponse.toObject = function(includeInstance, msg) { + var f, obj = { + integration: (f = msg.getIntegration()) && proto.api.IftttIntegration.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.GetIftttIntegrationResponse} + */ +proto.api.GetIftttIntegrationResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.GetIftttIntegrationResponse; + return proto.api.GetIftttIntegrationResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.GetIftttIntegrationResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.GetIftttIntegrationResponse} + */ +proto.api.GetIftttIntegrationResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.api.IftttIntegration; + reader.readMessage(value,proto.api.IftttIntegration.deserializeBinaryFromReader); + msg.setIntegration(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.GetIftttIntegrationResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.GetIftttIntegrationResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.GetIftttIntegrationResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.GetIftttIntegrationResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getIntegration(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.api.IftttIntegration.serializeBinaryToWriter + ); + } +}; + + +/** + * optional IftttIntegration integration = 1; + * @return {?proto.api.IftttIntegration} + */ +proto.api.GetIftttIntegrationResponse.prototype.getIntegration = function() { + return /** @type{?proto.api.IftttIntegration} */ ( + jspb.Message.getWrapperField(this, proto.api.IftttIntegration, 1)); +}; + + +/** + * @param {?proto.api.IftttIntegration|undefined} value + * @return {!proto.api.GetIftttIntegrationResponse} returns this +*/ +proto.api.GetIftttIntegrationResponse.prototype.setIntegration = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.api.GetIftttIntegrationResponse} returns this + */ +proto.api.GetIftttIntegrationResponse.prototype.clearIntegration = function() { + return this.setIntegration(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.api.GetIftttIntegrationResponse.prototype.hasIntegration = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.UpdateIftttIntegrationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.UpdateIftttIntegrationRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.UpdateIftttIntegrationRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.UpdateIftttIntegrationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + integration: (f = msg.getIntegration()) && proto.api.IftttIntegration.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.UpdateIftttIntegrationRequest} + */ +proto.api.UpdateIftttIntegrationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.UpdateIftttIntegrationRequest; + return proto.api.UpdateIftttIntegrationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.UpdateIftttIntegrationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.UpdateIftttIntegrationRequest} + */ +proto.api.UpdateIftttIntegrationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.api.IftttIntegration; + reader.readMessage(value,proto.api.IftttIntegration.deserializeBinaryFromReader); + msg.setIntegration(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.UpdateIftttIntegrationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.UpdateIftttIntegrationRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.UpdateIftttIntegrationRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.UpdateIftttIntegrationRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getIntegration(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.api.IftttIntegration.serializeBinaryToWriter + ); + } +}; + + +/** + * optional IftttIntegration integration = 1; + * @return {?proto.api.IftttIntegration} + */ +proto.api.UpdateIftttIntegrationRequest.prototype.getIntegration = function() { + return /** @type{?proto.api.IftttIntegration} */ ( + jspb.Message.getWrapperField(this, proto.api.IftttIntegration, 1)); +}; + + +/** + * @param {?proto.api.IftttIntegration|undefined} value + * @return {!proto.api.UpdateIftttIntegrationRequest} returns this +*/ +proto.api.UpdateIftttIntegrationRequest.prototype.setIntegration = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.api.UpdateIftttIntegrationRequest} returns this + */ +proto.api.UpdateIftttIntegrationRequest.prototype.clearIntegration = function() { + return this.setIntegration(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.api.UpdateIftttIntegrationRequest.prototype.hasIntegration = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.DeleteIftttIntegrationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.DeleteIftttIntegrationRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.DeleteIftttIntegrationRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.DeleteIftttIntegrationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + applicationId: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.DeleteIftttIntegrationRequest} + */ +proto.api.DeleteIftttIntegrationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.DeleteIftttIntegrationRequest; + return proto.api.DeleteIftttIntegrationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.DeleteIftttIntegrationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.DeleteIftttIntegrationRequest} + */ +proto.api.DeleteIftttIntegrationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setApplicationId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.DeleteIftttIntegrationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.DeleteIftttIntegrationRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.DeleteIftttIntegrationRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.DeleteIftttIntegrationRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getApplicationId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string application_id = 1; + * @return {string} + */ +proto.api.DeleteIftttIntegrationRequest.prototype.getApplicationId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api.DeleteIftttIntegrationRequest} returns this + */ +proto.api.DeleteIftttIntegrationRequest.prototype.setApplicationId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -13333,7 +14450,8 @@ proto.api.IntegrationKind = { AWS_SNS: 6, AZURE_SERVICE_BUS: 7, PILOT_THINGS: 8, - MQTT_GLOBAL: 9 + MQTT_GLOBAL: 9, + IFTTT: 10 }; /** diff --git a/api/js/api/application_grpc_pb.d.ts b/api/js/api/application_grpc_pb.d.ts index 9ef3074b..95b6abe1 100644 --- a/api/js/api/application_grpc_pb.d.ts +++ b/api/js/api/application_grpc_pb.d.ts @@ -50,6 +50,10 @@ interface IApplicationServiceService extends grpc.ServiceDefinition; updatePilotThingsIntegration: grpc.MethodDefinition; deletePilotThingsIntegration: grpc.MethodDefinition; + createIftttIntegration: grpc.MethodDefinition; + getIftttIntegration: grpc.MethodDefinition; + updateIftttIntegration: grpc.MethodDefinition; + deleteIftttIntegration: grpc.MethodDefinition; generateMqttIntegrationClientCertificate: grpc.MethodDefinition; } @@ -98,6 +102,10 @@ export interface IApplicationServiceServer extends grpc.UntypedServiceImplementa getPilotThingsIntegration: grpc.handleUnaryCall; updatePilotThingsIntegration: grpc.handleUnaryCall; deletePilotThingsIntegration: grpc.handleUnaryCall; + createIftttIntegration: grpc.handleUnaryCall; + getIftttIntegration: grpc.handleUnaryCall; + updateIftttIntegration: grpc.handleUnaryCall; + deleteIftttIntegration: grpc.handleUnaryCall; generateMqttIntegrationClientCertificate: grpc.handleUnaryCall; } @@ -229,6 +237,18 @@ export class ApplicationServiceClient extends grpc.Client { deletePilotThingsIntegration(argument: api_application_pb.DeletePilotThingsIntegrationRequest, callback: grpc.requestCallback): grpc.ClientUnaryCall; deletePilotThingsIntegration(argument: api_application_pb.DeletePilotThingsIntegrationRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; deletePilotThingsIntegration(argument: api_application_pb.DeletePilotThingsIntegrationRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + createIftttIntegration(argument: api_application_pb.CreateIftttIntegrationRequest, callback: grpc.requestCallback): grpc.ClientUnaryCall; + createIftttIntegration(argument: api_application_pb.CreateIftttIntegrationRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + createIftttIntegration(argument: api_application_pb.CreateIftttIntegrationRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + getIftttIntegration(argument: api_application_pb.GetIftttIntegrationRequest, callback: grpc.requestCallback): grpc.ClientUnaryCall; + getIftttIntegration(argument: api_application_pb.GetIftttIntegrationRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + getIftttIntegration(argument: api_application_pb.GetIftttIntegrationRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + updateIftttIntegration(argument: api_application_pb.UpdateIftttIntegrationRequest, callback: grpc.requestCallback): grpc.ClientUnaryCall; + updateIftttIntegration(argument: api_application_pb.UpdateIftttIntegrationRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + updateIftttIntegration(argument: api_application_pb.UpdateIftttIntegrationRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + deleteIftttIntegration(argument: api_application_pb.DeleteIftttIntegrationRequest, callback: grpc.requestCallback): grpc.ClientUnaryCall; + deleteIftttIntegration(argument: api_application_pb.DeleteIftttIntegrationRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + deleteIftttIntegration(argument: api_application_pb.DeleteIftttIntegrationRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; generateMqttIntegrationClientCertificate(argument: api_application_pb.GenerateMqttIntegrationClientCertificateRequest, callback: grpc.requestCallback): grpc.ClientUnaryCall; generateMqttIntegrationClientCertificate(argument: api_application_pb.GenerateMqttIntegrationClientCertificateRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; generateMqttIntegrationClientCertificate(argument: api_application_pb.GenerateMqttIntegrationClientCertificateRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; diff --git a/api/js/api/application_grpc_pb.js b/api/js/api/application_grpc_pb.js index 7ab3feb1..14295dba 100644 --- a/api/js/api/application_grpc_pb.js +++ b/api/js/api/application_grpc_pb.js @@ -72,6 +72,17 @@ function deserialize_api_CreateHttpIntegrationRequest(buffer_arg) { return api_application_pb.CreateHttpIntegrationRequest.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_api_CreateIftttIntegrationRequest(arg) { + if (!(arg instanceof api_application_pb.CreateIftttIntegrationRequest)) { + throw new Error('Expected argument of type api.CreateIftttIntegrationRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_api_CreateIftttIntegrationRequest(buffer_arg) { + return api_application_pb.CreateIftttIntegrationRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_api_CreateInfluxDbIntegrationRequest(arg) { if (!(arg instanceof api_application_pb.CreateInfluxDbIntegrationRequest)) { throw new Error('Expected argument of type api.CreateInfluxDbIntegrationRequest'); @@ -182,6 +193,17 @@ function deserialize_api_DeleteHttpIntegrationRequest(buffer_arg) { return api_application_pb.DeleteHttpIntegrationRequest.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_api_DeleteIftttIntegrationRequest(arg) { + if (!(arg instanceof api_application_pb.DeleteIftttIntegrationRequest)) { + throw new Error('Expected argument of type api.DeleteIftttIntegrationRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_api_DeleteIftttIntegrationRequest(buffer_arg) { + return api_application_pb.DeleteIftttIntegrationRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_api_DeleteInfluxDbIntegrationRequest(arg) { if (!(arg instanceof api_application_pb.DeleteInfluxDbIntegrationRequest)) { throw new Error('Expected argument of type api.DeleteInfluxDbIntegrationRequest'); @@ -369,6 +391,28 @@ function deserialize_api_GetHttpIntegrationResponse(buffer_arg) { return api_application_pb.GetHttpIntegrationResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_api_GetIftttIntegrationRequest(arg) { + if (!(arg instanceof api_application_pb.GetIftttIntegrationRequest)) { + throw new Error('Expected argument of type api.GetIftttIntegrationRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_api_GetIftttIntegrationRequest(buffer_arg) { + return api_application_pb.GetIftttIntegrationRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_api_GetIftttIntegrationResponse(arg) { + if (!(arg instanceof api_application_pb.GetIftttIntegrationResponse)) { + throw new Error('Expected argument of type api.GetIftttIntegrationResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_api_GetIftttIntegrationResponse(buffer_arg) { + return api_application_pb.GetIftttIntegrationResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_api_GetInfluxDbIntegrationRequest(arg) { if (!(arg instanceof api_application_pb.GetInfluxDbIntegrationRequest)) { throw new Error('Expected argument of type api.GetInfluxDbIntegrationRequest'); @@ -578,6 +622,17 @@ function deserialize_api_UpdateHttpIntegrationRequest(buffer_arg) { return api_application_pb.UpdateHttpIntegrationRequest.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_api_UpdateIftttIntegrationRequest(arg) { + if (!(arg instanceof api_application_pb.UpdateIftttIntegrationRequest)) { + throw new Error('Expected argument of type api.UpdateIftttIntegrationRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_api_UpdateIftttIntegrationRequest(buffer_arg) { + return api_application_pb.UpdateIftttIntegrationRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_api_UpdateInfluxDbIntegrationRequest(arg) { if (!(arg instanceof api_application_pb.UpdateInfluxDbIntegrationRequest)) { throw new Error('Expected argument of type api.UpdateInfluxDbIntegrationRequest'); @@ -1151,6 +1206,54 @@ deletePilotThingsIntegration: { responseSerialize: serialize_google_protobuf_Empty, responseDeserialize: deserialize_google_protobuf_Empty, }, + // Create IFTTT integration. +createIftttIntegration: { + path: '/api.ApplicationService/CreateIftttIntegration', + requestStream: false, + responseStream: false, + requestType: api_application_pb.CreateIftttIntegrationRequest, + responseType: google_protobuf_empty_pb.Empty, + requestSerialize: serialize_api_CreateIftttIntegrationRequest, + requestDeserialize: deserialize_api_CreateIftttIntegrationRequest, + responseSerialize: serialize_google_protobuf_Empty, + responseDeserialize: deserialize_google_protobuf_Empty, + }, + // Get IFTTT integration. +getIftttIntegration: { + path: '/api.ApplicationService/GetIftttIntegration', + requestStream: false, + responseStream: false, + requestType: api_application_pb.GetIftttIntegrationRequest, + responseType: api_application_pb.GetIftttIntegrationResponse, + requestSerialize: serialize_api_GetIftttIntegrationRequest, + requestDeserialize: deserialize_api_GetIftttIntegrationRequest, + responseSerialize: serialize_api_GetIftttIntegrationResponse, + responseDeserialize: deserialize_api_GetIftttIntegrationResponse, + }, + // Update IFTTT integration. +updateIftttIntegration: { + path: '/api.ApplicationService/UpdateIftttIntegration', + requestStream: false, + responseStream: false, + requestType: api_application_pb.UpdateIftttIntegrationRequest, + responseType: google_protobuf_empty_pb.Empty, + requestSerialize: serialize_api_UpdateIftttIntegrationRequest, + requestDeserialize: deserialize_api_UpdateIftttIntegrationRequest, + responseSerialize: serialize_google_protobuf_Empty, + responseDeserialize: deserialize_google_protobuf_Empty, + }, + // Delete IFTTT integration. +deleteIftttIntegration: { + path: '/api.ApplicationService/DeleteIftttIntegration', + requestStream: false, + responseStream: false, + requestType: api_application_pb.DeleteIftttIntegrationRequest, + responseType: google_protobuf_empty_pb.Empty, + requestSerialize: serialize_api_DeleteIftttIntegrationRequest, + requestDeserialize: deserialize_api_DeleteIftttIntegrationRequest, + responseSerialize: serialize_google_protobuf_Empty, + responseDeserialize: deserialize_google_protobuf_Empty, + }, // Generates application ID specific client-certificate. generateMqttIntegrationClientCertificate: { path: '/api.ApplicationService/GenerateMqttIntegrationClientCertificate', diff --git a/api/js/api/application_pb.d.ts b/api/js/api/application_pb.d.ts index a18e0b72..f16af430 100644 --- a/api/js/api/application_pb.d.ts +++ b/api/js/api/application_pb.d.ts @@ -155,6 +155,11 @@ export class GetApplicationResponse extends jspb.Message { getUpdatedAt(): google_protobuf_timestamp_pb.Timestamp | undefined; setUpdatedAt(value?: google_protobuf_timestamp_pb.Timestamp): void; + clearMeasurementKeysList(): void; + getMeasurementKeysList(): Array; + setMeasurementKeysList(value: Array): void; + addMeasurementKeys(value: string, index?: number): string; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): GetApplicationResponse.AsObject; static toObject(includeInstance: boolean, msg: GetApplicationResponse): GetApplicationResponse.AsObject; @@ -170,6 +175,7 @@ export namespace GetApplicationResponse { application?: Application.AsObject, createdAt?: google_protobuf_timestamp_pb.Timestamp.AsObject, updatedAt?: google_protobuf_timestamp_pb.Timestamp.AsObject, + measurementKeysList: Array, } } @@ -1670,6 +1676,142 @@ export namespace DeletePilotThingsIntegrationRequest { } } +export class IftttIntegration extends jspb.Message { + getApplicationId(): string; + setApplicationId(value: string): void; + + getKey(): string; + setKey(value: string): void; + + clearUplinkValuesList(): void; + getUplinkValuesList(): Array; + setUplinkValuesList(value: Array): void; + addUplinkValues(value: string, index?: number): string; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): IftttIntegration.AsObject; + static toObject(includeInstance: boolean, msg: IftttIntegration): IftttIntegration.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: IftttIntegration, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): IftttIntegration; + static deserializeBinaryFromReader(message: IftttIntegration, reader: jspb.BinaryReader): IftttIntegration; +} + +export namespace IftttIntegration { + export type AsObject = { + applicationId: string, + key: string, + uplinkValuesList: Array, + } +} + +export class CreateIftttIntegrationRequest extends jspb.Message { + hasIntegration(): boolean; + clearIntegration(): void; + getIntegration(): IftttIntegration | undefined; + setIntegration(value?: IftttIntegration): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): CreateIftttIntegrationRequest.AsObject; + static toObject(includeInstance: boolean, msg: CreateIftttIntegrationRequest): CreateIftttIntegrationRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: CreateIftttIntegrationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): CreateIftttIntegrationRequest; + static deserializeBinaryFromReader(message: CreateIftttIntegrationRequest, reader: jspb.BinaryReader): CreateIftttIntegrationRequest; +} + +export namespace CreateIftttIntegrationRequest { + export type AsObject = { + integration?: IftttIntegration.AsObject, + } +} + +export class GetIftttIntegrationRequest extends jspb.Message { + getApplicationId(): string; + setApplicationId(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetIftttIntegrationRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetIftttIntegrationRequest): GetIftttIntegrationRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetIftttIntegrationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetIftttIntegrationRequest; + static deserializeBinaryFromReader(message: GetIftttIntegrationRequest, reader: jspb.BinaryReader): GetIftttIntegrationRequest; +} + +export namespace GetIftttIntegrationRequest { + export type AsObject = { + applicationId: string, + } +} + +export class GetIftttIntegrationResponse extends jspb.Message { + hasIntegration(): boolean; + clearIntegration(): void; + getIntegration(): IftttIntegration | undefined; + setIntegration(value?: IftttIntegration): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetIftttIntegrationResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetIftttIntegrationResponse): GetIftttIntegrationResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetIftttIntegrationResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetIftttIntegrationResponse; + static deserializeBinaryFromReader(message: GetIftttIntegrationResponse, reader: jspb.BinaryReader): GetIftttIntegrationResponse; +} + +export namespace GetIftttIntegrationResponse { + export type AsObject = { + integration?: IftttIntegration.AsObject, + } +} + +export class UpdateIftttIntegrationRequest extends jspb.Message { + hasIntegration(): boolean; + clearIntegration(): void; + getIntegration(): IftttIntegration | undefined; + setIntegration(value?: IftttIntegration): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): UpdateIftttIntegrationRequest.AsObject; + static toObject(includeInstance: boolean, msg: UpdateIftttIntegrationRequest): UpdateIftttIntegrationRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: UpdateIftttIntegrationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): UpdateIftttIntegrationRequest; + static deserializeBinaryFromReader(message: UpdateIftttIntegrationRequest, reader: jspb.BinaryReader): UpdateIftttIntegrationRequest; +} + +export namespace UpdateIftttIntegrationRequest { + export type AsObject = { + integration?: IftttIntegration.AsObject, + } +} + +export class DeleteIftttIntegrationRequest extends jspb.Message { + getApplicationId(): string; + setApplicationId(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DeleteIftttIntegrationRequest.AsObject; + static toObject(includeInstance: boolean, msg: DeleteIftttIntegrationRequest): DeleteIftttIntegrationRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DeleteIftttIntegrationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DeleteIftttIntegrationRequest; + static deserializeBinaryFromReader(message: DeleteIftttIntegrationRequest, reader: jspb.BinaryReader): DeleteIftttIntegrationRequest; +} + +export namespace DeleteIftttIntegrationRequest { + export type AsObject = { + applicationId: string, + } +} + export class GenerateMqttIntegrationClientCertificateRequest extends jspb.Message { getApplicationId(): string; setApplicationId(value: string): void; @@ -1742,6 +1884,7 @@ export interface IntegrationKindMap { AZURE_SERVICE_BUS: 7; PILOT_THINGS: 8; MQTT_GLOBAL: 9; + IFTTT: 10; } export const IntegrationKind: IntegrationKindMap; diff --git a/api/js/api/application_pb.js b/api/js/api/application_pb.js index e7b50c4f..1bbac9aa 100644 --- a/api/js/api/application_pb.js +++ b/api/js/api/application_pb.js @@ -21,6 +21,7 @@ goog.exportSymbol('proto.api.CreateAwsSnsIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateAzureServiceBusIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateGcpPubSubIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateHttpIntegrationRequest', null, global); +goog.exportSymbol('proto.api.CreateIftttIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateInfluxDbIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateLoraCloudIntegrationRequest', null, global); goog.exportSymbol('proto.api.CreateMyDevicesIntegrationRequest', null, global); @@ -31,6 +32,7 @@ goog.exportSymbol('proto.api.DeleteAwsSnsIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteAzureServiceBusIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteGcpPubSubIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteHttpIntegrationRequest', null, global); +goog.exportSymbol('proto.api.DeleteIftttIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteInfluxDbIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteLoraCloudIntegrationRequest', null, global); goog.exportSymbol('proto.api.DeleteMyDevicesIntegrationRequest', null, global); @@ -50,6 +52,8 @@ goog.exportSymbol('proto.api.GetGcpPubSubIntegrationRequest', null, global); goog.exportSymbol('proto.api.GetGcpPubSubIntegrationResponse', null, global); goog.exportSymbol('proto.api.GetHttpIntegrationRequest', null, global); goog.exportSymbol('proto.api.GetHttpIntegrationResponse', null, global); +goog.exportSymbol('proto.api.GetIftttIntegrationRequest', null, global); +goog.exportSymbol('proto.api.GetIftttIntegrationResponse', null, global); goog.exportSymbol('proto.api.GetInfluxDbIntegrationRequest', null, global); goog.exportSymbol('proto.api.GetInfluxDbIntegrationResponse', null, global); goog.exportSymbol('proto.api.GetLoraCloudIntegrationRequest', null, global); @@ -61,6 +65,7 @@ goog.exportSymbol('proto.api.GetPilotThingsIntegrationResponse', null, global); goog.exportSymbol('proto.api.GetThingsBoardIntegrationRequest', null, global); goog.exportSymbol('proto.api.GetThingsBoardIntegrationResponse', null, global); goog.exportSymbol('proto.api.HttpIntegration', null, global); +goog.exportSymbol('proto.api.IftttIntegration', null, global); goog.exportSymbol('proto.api.InfluxDbIntegration', null, global); goog.exportSymbol('proto.api.InfluxDbPrecision', null, global); goog.exportSymbol('proto.api.InfluxDbVersion', null, global); @@ -80,6 +85,7 @@ goog.exportSymbol('proto.api.UpdateAwsSnsIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateAzureServiceBusIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateGcpPubSubIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateHttpIntegrationRequest', null, global); +goog.exportSymbol('proto.api.UpdateIftttIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateInfluxDbIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateLoraCloudIntegrationRequest', null, global); goog.exportSymbol('proto.api.UpdateMyDevicesIntegrationRequest', null, global); @@ -1132,12 +1138,19 @@ proto.api.GetApplicationRequest.prototype.setId = function(value) { * @constructor */ proto.api.GetApplicationResponse = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); + jspb.Message.initialize(this, opt_data, 0, -1, proto.api.GetApplicationResponse.repeatedFields_, null); }; goog.inherits(proto.api.GetApplicationResponse, jspb.Message); if (goog.DEBUG && !COMPILED) { proto.api.GetApplicationResponse.displayName = 'proto.api.GetApplicationResponse'; } +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.api.GetApplicationResponse.repeatedFields_ = [4]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -1168,7 +1181,8 @@ proto.api.GetApplicationResponse.toObject = function(includeInstance, msg) { var f, obj = { application: (f = msg.getApplication()) && proto.api.Application.toObject(includeInstance, f), createdAt: (f = msg.getCreatedAt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), - updatedAt: (f = msg.getUpdatedAt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f) + updatedAt: (f = msg.getUpdatedAt()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f), + measurementKeysList: jspb.Message.getField(msg, 4) }; if (includeInstance) { @@ -1220,6 +1234,11 @@ proto.api.GetApplicationResponse.deserializeBinaryFromReader = function(msg, rea reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader); msg.setUpdatedAt(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.getMeasurementKeysList().push(value); + msg.setMeasurementKeysList(msg.getMeasurementKeysList()); + break; default: reader.skipField(); break; @@ -1282,6 +1301,13 @@ proto.api.GetApplicationResponse.prototype.serializeBinaryToWriter = function (w google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter ); } + f = this.getMeasurementKeysList(); + if (f.length > 0) { + writer.writeRepeatedString( + 4, + f + ); + } }; @@ -1384,6 +1410,28 @@ proto.api.GetApplicationResponse.prototype.hasUpdatedAt = function() { }; +/** + * repeated string measurement_keys = 4; + * If you change this array by adding, removing or replacing elements, or if you + * replace the array itself, then you must call the setter to update it. + * @return {!Array.} + */ +proto.api.GetApplicationResponse.prototype.getMeasurementKeysList = function() { + return /** @type {!Array.} */ (jspb.Message.getField(this, 4)); +}; + + +/** @param {Array.} value */ +proto.api.GetApplicationResponse.prototype.setMeasurementKeysList = function(value) { + jspb.Message.setField(this, 4, value || []); +}; + + +proto.api.GetApplicationResponse.prototype.clearMeasurementKeysList = function() { + jspb.Message.setField(this, 4, []); +}; + + /** * Generated by JsPbCodeGenerator. @@ -13110,6 +13158,1080 @@ proto.api.DeletePilotThingsIntegrationRequest.prototype.setApplicationId = funct +/** + * 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.api.IftttIntegration = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.api.IftttIntegration.repeatedFields_, null); +}; +goog.inherits(proto.api.IftttIntegration, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.IftttIntegration.displayName = 'proto.api.IftttIntegration'; +} +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.api.IftttIntegration.repeatedFields_ = [3]; + + + +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.api.IftttIntegration.prototype.toObject = function(opt_includeInstance) { + return proto.api.IftttIntegration.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.api.IftttIntegration} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.IftttIntegration.toObject = function(includeInstance, msg) { + var f, obj = { + applicationId: msg.getApplicationId(), + key: msg.getKey(), + uplinkValuesList: jspb.Message.getField(msg, 3) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.IftttIntegration} + */ +proto.api.IftttIntegration.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.IftttIntegration; + return proto.api.IftttIntegration.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.IftttIntegration} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.IftttIntegration} + */ +proto.api.IftttIntegration.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setApplicationId(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setKey(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.getUplinkValuesList().push(value); + msg.setUplinkValuesList(msg.getUplinkValuesList()); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.IftttIntegration} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.IftttIntegration.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.IftttIntegration.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.IftttIntegration.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getApplicationId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = this.getKey(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = this.getUplinkValuesList(); + if (f.length > 0) { + writer.writeRepeatedString( + 3, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.IftttIntegration} The clone. + */ +proto.api.IftttIntegration.prototype.cloneMessage = function() { + return /** @type {!proto.api.IftttIntegration} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string application_id = 1; + * @return {string} + */ +proto.api.IftttIntegration.prototype.getApplicationId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.api.IftttIntegration.prototype.setApplicationId = function(value) { + jspb.Message.setField(this, 1, value); +}; + + +/** + * optional string key = 2; + * @return {string} + */ +proto.api.IftttIntegration.prototype.getKey = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 2, "")); +}; + + +/** @param {string} value */ +proto.api.IftttIntegration.prototype.setKey = function(value) { + jspb.Message.setField(this, 2, value); +}; + + +/** + * repeated string uplink_values = 3; + * If you change this array by adding, removing or replacing elements, or if you + * replace the array itself, then you must call the setter to update it. + * @return {!Array.} + */ +proto.api.IftttIntegration.prototype.getUplinkValuesList = function() { + return /** @type {!Array.} */ (jspb.Message.getField(this, 3)); +}; + + +/** @param {Array.} value */ +proto.api.IftttIntegration.prototype.setUplinkValuesList = function(value) { + jspb.Message.setField(this, 3, value || []); +}; + + +proto.api.IftttIntegration.prototype.clearUplinkValuesList = function() { + jspb.Message.setField(this, 3, []); +}; + + + +/** + * 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.api.CreateIftttIntegrationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.CreateIftttIntegrationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.CreateIftttIntegrationRequest.displayName = 'proto.api.CreateIftttIntegrationRequest'; +} + + +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.api.CreateIftttIntegrationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.CreateIftttIntegrationRequest.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.api.CreateIftttIntegrationRequest} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.CreateIftttIntegrationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + integration: (f = msg.getIntegration()) && proto.api.IftttIntegration.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.CreateIftttIntegrationRequest} + */ +proto.api.CreateIftttIntegrationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.CreateIftttIntegrationRequest; + return proto.api.CreateIftttIntegrationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.CreateIftttIntegrationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.CreateIftttIntegrationRequest} + */ +proto.api.CreateIftttIntegrationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.api.IftttIntegration; + reader.readMessage(value,proto.api.IftttIntegration.deserializeBinaryFromReader); + msg.setIntegration(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.CreateIftttIntegrationRequest} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.CreateIftttIntegrationRequest.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.CreateIftttIntegrationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.CreateIftttIntegrationRequest.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getIntegration(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.api.IftttIntegration.serializeBinaryToWriter + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.CreateIftttIntegrationRequest} The clone. + */ +proto.api.CreateIftttIntegrationRequest.prototype.cloneMessage = function() { + return /** @type {!proto.api.CreateIftttIntegrationRequest} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional IftttIntegration integration = 1; + * @return {proto.api.IftttIntegration} + */ +proto.api.CreateIftttIntegrationRequest.prototype.getIntegration = function() { + return /** @type{proto.api.IftttIntegration} */ ( + jspb.Message.getWrapperField(this, proto.api.IftttIntegration, 1)); +}; + + +/** @param {proto.api.IftttIntegration|undefined} value */ +proto.api.CreateIftttIntegrationRequest.prototype.setIntegration = function(value) { + jspb.Message.setWrapperField(this, 1, value); +}; + + +proto.api.CreateIftttIntegrationRequest.prototype.clearIntegration = function() { + this.setIntegration(undefined); +}; + + +/** + * Returns whether this field is set. + * @return{!boolean} + */ +proto.api.CreateIftttIntegrationRequest.prototype.hasIntegration = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * 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.api.GetIftttIntegrationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.GetIftttIntegrationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.GetIftttIntegrationRequest.displayName = 'proto.api.GetIftttIntegrationRequest'; +} + + +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.api.GetIftttIntegrationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.GetIftttIntegrationRequest.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.api.GetIftttIntegrationRequest} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.GetIftttIntegrationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + applicationId: msg.getApplicationId() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.GetIftttIntegrationRequest} + */ +proto.api.GetIftttIntegrationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.GetIftttIntegrationRequest; + return proto.api.GetIftttIntegrationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.GetIftttIntegrationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.GetIftttIntegrationRequest} + */ +proto.api.GetIftttIntegrationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setApplicationId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.GetIftttIntegrationRequest} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.GetIftttIntegrationRequest.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.GetIftttIntegrationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.GetIftttIntegrationRequest.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getApplicationId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.GetIftttIntegrationRequest} The clone. + */ +proto.api.GetIftttIntegrationRequest.prototype.cloneMessage = function() { + return /** @type {!proto.api.GetIftttIntegrationRequest} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string application_id = 1; + * @return {string} + */ +proto.api.GetIftttIntegrationRequest.prototype.getApplicationId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.api.GetIftttIntegrationRequest.prototype.setApplicationId = function(value) { + jspb.Message.setField(this, 1, 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.api.GetIftttIntegrationResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.GetIftttIntegrationResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.GetIftttIntegrationResponse.displayName = 'proto.api.GetIftttIntegrationResponse'; +} + + +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.api.GetIftttIntegrationResponse.prototype.toObject = function(opt_includeInstance) { + return proto.api.GetIftttIntegrationResponse.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.api.GetIftttIntegrationResponse} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.GetIftttIntegrationResponse.toObject = function(includeInstance, msg) { + var f, obj = { + integration: (f = msg.getIntegration()) && proto.api.IftttIntegration.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.GetIftttIntegrationResponse} + */ +proto.api.GetIftttIntegrationResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.GetIftttIntegrationResponse; + return proto.api.GetIftttIntegrationResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.GetIftttIntegrationResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.GetIftttIntegrationResponse} + */ +proto.api.GetIftttIntegrationResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.api.IftttIntegration; + reader.readMessage(value,proto.api.IftttIntegration.deserializeBinaryFromReader); + msg.setIntegration(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.GetIftttIntegrationResponse} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.GetIftttIntegrationResponse.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.GetIftttIntegrationResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.GetIftttIntegrationResponse.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getIntegration(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.api.IftttIntegration.serializeBinaryToWriter + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.GetIftttIntegrationResponse} The clone. + */ +proto.api.GetIftttIntegrationResponse.prototype.cloneMessage = function() { + return /** @type {!proto.api.GetIftttIntegrationResponse} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional IftttIntegration integration = 1; + * @return {proto.api.IftttIntegration} + */ +proto.api.GetIftttIntegrationResponse.prototype.getIntegration = function() { + return /** @type{proto.api.IftttIntegration} */ ( + jspb.Message.getWrapperField(this, proto.api.IftttIntegration, 1)); +}; + + +/** @param {proto.api.IftttIntegration|undefined} value */ +proto.api.GetIftttIntegrationResponse.prototype.setIntegration = function(value) { + jspb.Message.setWrapperField(this, 1, value); +}; + + +proto.api.GetIftttIntegrationResponse.prototype.clearIntegration = function() { + this.setIntegration(undefined); +}; + + +/** + * Returns whether this field is set. + * @return{!boolean} + */ +proto.api.GetIftttIntegrationResponse.prototype.hasIntegration = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * 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.api.UpdateIftttIntegrationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.UpdateIftttIntegrationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.UpdateIftttIntegrationRequest.displayName = 'proto.api.UpdateIftttIntegrationRequest'; +} + + +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.api.UpdateIftttIntegrationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.UpdateIftttIntegrationRequest.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.api.UpdateIftttIntegrationRequest} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.UpdateIftttIntegrationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + integration: (f = msg.getIntegration()) && proto.api.IftttIntegration.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.UpdateIftttIntegrationRequest} + */ +proto.api.UpdateIftttIntegrationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.UpdateIftttIntegrationRequest; + return proto.api.UpdateIftttIntegrationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.UpdateIftttIntegrationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.UpdateIftttIntegrationRequest} + */ +proto.api.UpdateIftttIntegrationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.api.IftttIntegration; + reader.readMessage(value,proto.api.IftttIntegration.deserializeBinaryFromReader); + msg.setIntegration(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.UpdateIftttIntegrationRequest} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.UpdateIftttIntegrationRequest.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.UpdateIftttIntegrationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.UpdateIftttIntegrationRequest.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getIntegration(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.api.IftttIntegration.serializeBinaryToWriter + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.UpdateIftttIntegrationRequest} The clone. + */ +proto.api.UpdateIftttIntegrationRequest.prototype.cloneMessage = function() { + return /** @type {!proto.api.UpdateIftttIntegrationRequest} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional IftttIntegration integration = 1; + * @return {proto.api.IftttIntegration} + */ +proto.api.UpdateIftttIntegrationRequest.prototype.getIntegration = function() { + return /** @type{proto.api.IftttIntegration} */ ( + jspb.Message.getWrapperField(this, proto.api.IftttIntegration, 1)); +}; + + +/** @param {proto.api.IftttIntegration|undefined} value */ +proto.api.UpdateIftttIntegrationRequest.prototype.setIntegration = function(value) { + jspb.Message.setWrapperField(this, 1, value); +}; + + +proto.api.UpdateIftttIntegrationRequest.prototype.clearIntegration = function() { + this.setIntegration(undefined); +}; + + +/** + * Returns whether this field is set. + * @return{!boolean} + */ +proto.api.UpdateIftttIntegrationRequest.prototype.hasIntegration = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + +/** + * 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.api.DeleteIftttIntegrationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.DeleteIftttIntegrationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.DeleteIftttIntegrationRequest.displayName = 'proto.api.DeleteIftttIntegrationRequest'; +} + + +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.api.DeleteIftttIntegrationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.DeleteIftttIntegrationRequest.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.api.DeleteIftttIntegrationRequest} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.DeleteIftttIntegrationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + applicationId: msg.getApplicationId() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.DeleteIftttIntegrationRequest} + */ +proto.api.DeleteIftttIntegrationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.DeleteIftttIntegrationRequest; + return proto.api.DeleteIftttIntegrationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.DeleteIftttIntegrationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.DeleteIftttIntegrationRequest} + */ +proto.api.DeleteIftttIntegrationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setApplicationId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.DeleteIftttIntegrationRequest} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.DeleteIftttIntegrationRequest.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.DeleteIftttIntegrationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.DeleteIftttIntegrationRequest.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getApplicationId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.DeleteIftttIntegrationRequest} The clone. + */ +proto.api.DeleteIftttIntegrationRequest.prototype.cloneMessage = function() { + return /** @type {!proto.api.DeleteIftttIntegrationRequest} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string application_id = 1; + * @return {string} + */ +proto.api.DeleteIftttIntegrationRequest.prototype.getApplicationId = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.api.DeleteIftttIntegrationRequest.prototype.setApplicationId = function(value) { + jspb.Message.setField(this, 1, value); +}; + + + /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -13546,7 +14668,8 @@ proto.api.IntegrationKind = { AWS_SNS: 6, AZURE_SERVICE_BUS: 7, PILOT_THINGS: 8, - MQTT_GLOBAL: 9 + MQTT_GLOBAL: 9, + IFTTT: 10 }; /** diff --git a/api/proto/api/application.proto b/api/proto/api/application.proto index 661da591..72650d39 100644 --- a/api/proto/api/application.proto +++ b/api/proto/api/application.proto @@ -138,6 +138,18 @@ service ApplicationService { // Delete Pilot Things integration. rpc DeletePilotThingsIntegration(DeletePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {} + // Create IFTTT integration. + rpc CreateIftttIntegration(CreateIftttIntegrationRequest) returns (google.protobuf.Empty) {} + + // Get IFTTT integration. + rpc GetIftttIntegration(GetIftttIntegrationRequest) returns (GetIftttIntegrationResponse) {} + + // Update IFTTT integration. + rpc UpdateIftttIntegration(UpdateIftttIntegrationRequest) returns (google.protobuf.Empty) {} + + // Delete IFTTT integration. + rpc DeleteIftttIntegration(DeleteIftttIntegrationRequest) returns (google.protobuf.Empty) {} + // Generates application ID specific client-certificate. rpc GenerateMqttIntegrationClientCertificate(GenerateMqttIntegrationClientCertificateRequest) returns (GenerateMqttIntegrationClientCertificateResponse) {} } @@ -158,6 +170,7 @@ enum IntegrationKind { AZURE_SERVICE_BUS = 7; PILOT_THINGS = 8; MQTT_GLOBAL = 9; + IFTTT = 10; } message Application { @@ -216,6 +229,11 @@ message GetApplicationResponse { // Last update timestamp. google.protobuf.Timestamp updated_at = 3; + + // Measurement keys. + // This contains the measurement keys from all the device-profiles that + // are used by the devices under this application. + repeated string measurement_keys = 4; } message UpdateApplicationRequest { @@ -718,6 +736,53 @@ message DeletePilotThingsIntegrationRequest { string application_id = 1; } +message IftttIntegration { + // Application ID (UUID). + string application_id = 1; + + // Key. + // This key can be obtained from the IFTTT Webhooks documentation page. + string key = 2; + + // Values. + // Up to 2 values can be forwarded to IFTTT. These values must map to the + // decoded payload keys. For example: + // { + // "batteryLevel": 75.3, + // "buttons": [{"pressed": false}, {"pressed": true}] + // } + // You would specify the following fields: + // uplink_values = ["batteryLevel", "buttons_0_pressed"] + // + // Note: The first value is always used for the DevEUI. + repeated string uplink_values = 3; +} + +message CreateIftttIntegrationRequest { + // Integration object. + IftttIntegration integration = 1; +} + +message GetIftttIntegrationRequest { + // Application ID (UUID). + string application_id = 1; +} + +message GetIftttIntegrationResponse { + // Integration object. + IftttIntegration integration = 1; +} + +message UpdateIftttIntegrationRequest { + // Integration object to update. + IftttIntegration integration = 1; +} + +message DeleteIftttIntegrationRequest { + // Application ID (UUID). + string application_id = 1; +} + message GenerateMqttIntegrationClientCertificateRequest { // Application ID (UUID). string application_id = 1; diff --git a/api/rust/proto/chirpstack/api/application.proto b/api/rust/proto/chirpstack/api/application.proto index 661da591..72650d39 100644 --- a/api/rust/proto/chirpstack/api/application.proto +++ b/api/rust/proto/chirpstack/api/application.proto @@ -138,6 +138,18 @@ service ApplicationService { // Delete Pilot Things integration. rpc DeletePilotThingsIntegration(DeletePilotThingsIntegrationRequest) returns (google.protobuf.Empty) {} + // Create IFTTT integration. + rpc CreateIftttIntegration(CreateIftttIntegrationRequest) returns (google.protobuf.Empty) {} + + // Get IFTTT integration. + rpc GetIftttIntegration(GetIftttIntegrationRequest) returns (GetIftttIntegrationResponse) {} + + // Update IFTTT integration. + rpc UpdateIftttIntegration(UpdateIftttIntegrationRequest) returns (google.protobuf.Empty) {} + + // Delete IFTTT integration. + rpc DeleteIftttIntegration(DeleteIftttIntegrationRequest) returns (google.protobuf.Empty) {} + // Generates application ID specific client-certificate. rpc GenerateMqttIntegrationClientCertificate(GenerateMqttIntegrationClientCertificateRequest) returns (GenerateMqttIntegrationClientCertificateResponse) {} } @@ -158,6 +170,7 @@ enum IntegrationKind { AZURE_SERVICE_BUS = 7; PILOT_THINGS = 8; MQTT_GLOBAL = 9; + IFTTT = 10; } message Application { @@ -216,6 +229,11 @@ message GetApplicationResponse { // Last update timestamp. google.protobuf.Timestamp updated_at = 3; + + // Measurement keys. + // This contains the measurement keys from all the device-profiles that + // are used by the devices under this application. + repeated string measurement_keys = 4; } message UpdateApplicationRequest { @@ -718,6 +736,53 @@ message DeletePilotThingsIntegrationRequest { string application_id = 1; } +message IftttIntegration { + // Application ID (UUID). + string application_id = 1; + + // Key. + // This key can be obtained from the IFTTT Webhooks documentation page. + string key = 2; + + // Values. + // Up to 2 values can be forwarded to IFTTT. These values must map to the + // decoded payload keys. For example: + // { + // "batteryLevel": 75.3, + // "buttons": [{"pressed": false}, {"pressed": true}] + // } + // You would specify the following fields: + // uplink_values = ["batteryLevel", "buttons_0_pressed"] + // + // Note: The first value is always used for the DevEUI. + repeated string uplink_values = 3; +} + +message CreateIftttIntegrationRequest { + // Integration object. + IftttIntegration integration = 1; +} + +message GetIftttIntegrationRequest { + // Application ID (UUID). + string application_id = 1; +} + +message GetIftttIntegrationResponse { + // Integration object. + IftttIntegration integration = 1; +} + +message UpdateIftttIntegrationRequest { + // Integration object to update. + IftttIntegration integration = 1; +} + +message DeleteIftttIntegrationRequest { + // Application ID (UUID). + string application_id = 1; +} + message GenerateMqttIntegrationClientCertificateRequest { // Application ID (UUID). string application_id = 1; diff --git a/chirpstack/src/api/application.rs b/chirpstack/src/api/application.rs index d8bc17dc..d7eaf31b 100644 --- a/chirpstack/src/api/application.rs +++ b/chirpstack/src/api/application.rs @@ -72,6 +72,9 @@ impl ApplicationService for Application { .await?; let a = application::get(&app_id).await.map_err(|e| e.status())?; + let measurement_keys = application::get_measurement_keys(&app_id) + .await + .map_err(|e| e.status())?; Ok(Response::new(api::GetApplicationResponse { application: Some(api::Application { @@ -82,6 +85,7 @@ impl ApplicationService for Application { }), created_at: Some(helpers::datetime_to_prost_timestamp(&a.created_at)), updated_at: Some(helpers::datetime_to_prost_timestamp(&a.updated_at)), + measurement_keys, })) } @@ -213,6 +217,7 @@ impl ApplicationService for Application { api::IntegrationKind::AzureServiceBus } application::IntegrationKind::PilotThings => api::IntegrationKind::PilotThings, + application::IntegrationKind::Ifttt => api::IntegrationKind::Ifttt, } .into(), }) @@ -1486,6 +1491,136 @@ impl ApplicationService for Application { Ok(Response::new(())) } + async fn create_ifttt_integration( + &self, + request: Request, + ) -> Result, Status> { + let req_int = match &request.get_ref().integration { + Some(v) => v, + None => { + return Err(Status::invalid_argument("integration is missing")); + } + }; + let app_id = Uuid::from_str(&req_int.application_id).map_err(|e| e.status())?; + + self.validator + .validate( + request.extensions(), + validator::ValidateApplicationAccess::new(validator::Flag::Update, app_id), + ) + .await?; + + let _ = application::create_integration(application::Integration { + application_id: app_id, + kind: application::IntegrationKind::Ifttt, + configuration: application::IntegrationConfiguration::Ifttt( + application::IftttConfiguration { + key: req_int.key.clone(), + uplink_values: [ + req_int.uplink_values.get(0).cloned().unwrap_or_default(), + req_int.uplink_values.get(1).cloned().unwrap_or_default(), + ], + }, + ), + ..Default::default() + }) + .await + .map_err(|e| e.status())?; + + Ok(Response::new(())) + } + + async fn get_ifttt_integration( + &self, + request: Request, + ) -> Result, Status> { + let req = request.get_ref(); + let app_id = Uuid::from_str(&req.application_id).map_err(|e| e.status())?; + + self.validator + .validate( + request.extensions(), + validator::ValidateApplicationAccess::new(validator::Flag::Read, app_id), + ) + .await?; + + let i = application::get_integration(&app_id, application::IntegrationKind::Ifttt) + .await + .map_err(|e| e.status())?; + + if let application::IntegrationConfiguration::Ifttt(conf) = &i.configuration { + Ok(Response::new(api::GetIftttIntegrationResponse { + integration: Some(api::IftttIntegration { + application_id: app_id.to_string(), + key: conf.key.clone(), + uplink_values: conf.uplink_values.to_vec(), + }), + })) + } else { + Err(Status::internal("Integration has no Ifttt configuration")) + } + } + + async fn update_ifttt_integration( + &self, + request: Request, + ) -> Result, Status> { + let req_int = match &request.get_ref().integration { + Some(v) => v, + None => { + return Err(Status::invalid_argument("integration is missing")); + } + }; + let app_id = Uuid::from_str(&req_int.application_id).map_err(|e| e.status())?; + + self.validator + .validate( + request.extensions(), + validator::ValidateApplicationAccess::new(validator::Flag::Update, app_id), + ) + .await?; + + let _ = application::update_integration(application::Integration { + application_id: app_id, + kind: application::IntegrationKind::Ifttt, + configuration: application::IntegrationConfiguration::Ifttt( + application::IftttConfiguration { + key: req_int.key.clone(), + uplink_values: [ + req_int.uplink_values.get(0).cloned().unwrap_or_default(), + req_int.uplink_values.get(1).cloned().unwrap_or_default(), + ], + }, + ), + ..Default::default() + }) + .await + .map_err(|e| e.status())?; + + Ok(Response::new(())) + } + + async fn delete_ifttt_integration( + &self, + request: Request, + ) -> Result, Status> { + let req = request.get_ref(); + let app_id = Uuid::from_str(&req.application_id).map_err(|e| e.status())?; + + self.validator + .validate( + request.extensions(), + validator::ValidateApplicationAccess::new(validator::Flag::Update, app_id), + ) + .await?; + + application::delete_integration(&app_id, application::IntegrationKind::Ifttt) + .await + .map_err(|e| e.status())?; + + Ok(Response::new(())) + } + async fn generate_mqtt_integration_client_certificate( &self, request: Request, @@ -2974,4 +3109,126 @@ pub mod test { list_resp ); } + + #[tokio::test] + async fn test_ifttt_integration() { + let _guard = test::prepare().await; + let app = get_application().await; + let u = get_user().await; + let service = Application::new(RequestValidator::new()); + + // create + let create_req = get_request( + &u.id, + api::CreateIftttIntegrationRequest { + integration: Some(api::IftttIntegration { + application_id: app.id.to_string(), + key: "verysecret".into(), + uplink_values: vec!["value_1".into(), "value_2".into()], + }), + }, + ); + let _ = service.create_ifttt_integration(create_req).await.unwrap(); + + // get + let get_req = get_request( + &u.id, + api::GetIftttIntegrationRequest { + application_id: app.id.to_string(), + }, + ); + let get_resp = service.get_ifttt_integration(get_req).await.unwrap(); + let get_resp = get_resp.get_ref(); + assert_eq!( + Some(api::IftttIntegration { + application_id: app.id.to_string(), + key: "verysecret".into(), + uplink_values: vec!["value_1".into(), "value_2".into()], + }), + get_resp.integration + ); + + // update + let update_req = get_request( + &u.id, + api::UpdateIftttIntegrationRequest { + integration: Some(api::IftttIntegration { + application_id: app.id.to_string(), + key: "verysecrettoo".into(), + uplink_values: vec!["value_4".into(), "value_5".into()], + }), + }, + ); + let _ = service.update_ifttt_integration(update_req).await.unwrap(); + + // get + let get_req = get_request( + &u.id, + api::GetIftttIntegrationRequest { + application_id: app.id.to_string(), + }, + ); + let get_resp = service.get_ifttt_integration(get_req).await.unwrap(); + let get_resp = get_resp.get_ref(); + assert_eq!( + Some(api::IftttIntegration { + application_id: app.id.to_string(), + key: "verysecrettoo".into(), + uplink_values: vec!["value_4".into(), "value_5".into()], + }), + get_resp.integration + ); + + // list + let list_req = get_request( + &u.id, + api::ListIntegrationsRequest { + application_id: app.id.to_string(), + }, + ); + let list_resp = service.list_integrations(list_req).await.unwrap(); + let list_resp = list_resp.get_ref(); + assert_eq!( + &api::ListIntegrationsResponse { + total_count: 2, + result: vec![ + api::IntegrationListItem { + kind: api::IntegrationKind::Ifttt.into(), + }, + api::IntegrationListItem { + kind: api::IntegrationKind::MqttGlobal.into(), + } + ], + }, + list_resp + ); + + // delete + let del_req = get_request( + &u.id, + api::DeleteIftttIntegrationRequest { + application_id: app.id.to_string(), + }, + ); + let _ = service.delete_ifttt_integration(del_req).await.unwrap(); + + // list + let list_req = get_request( + &u.id, + api::ListIntegrationsRequest { + application_id: app.id.to_string(), + }, + ); + let list_resp = service.list_integrations(list_req).await.unwrap(); + let list_resp = list_resp.get_ref(); + assert_eq!( + &api::ListIntegrationsResponse { + total_count: 1, + result: vec![api::IntegrationListItem { + kind: api::IntegrationKind::MqttGlobal.into(), + },], + }, + list_resp + ); + } } diff --git a/chirpstack/src/integration/ifttt.rs b/chirpstack/src/integration/ifttt.rs new file mode 100644 index 00000000..f184e04a --- /dev/null +++ b/chirpstack/src/integration/ifttt.rs @@ -0,0 +1,231 @@ +use std::collections::HashMap; +use std::time::Duration; + +use anyhow::Result; +use async_trait::async_trait; +use reqwest::header::{HeaderMap, CONTENT_TYPE}; +use reqwest::Client; +use serde::{Deserialize, Serialize}; +use tracing::{error, info, trace}; + +use super::Integration as IntegrationTrait; +use crate::codec; +use crate::storage::application::IftttConfiguration; +use chirpstack_api::integration; + +#[derive(Serialize, Deserialize)] +struct Values { + #[serde(skip_serializing_if = "String::is_empty")] + pub value1: String, + #[serde(skip_serializing_if = "String::is_empty")] + pub value2: String, + #[serde(skip_serializing_if = "String::is_empty")] + pub value3: String, +} + +pub struct Integration { + key: String, + uplink_values: [String; 2], + server: String, +} + +impl Integration { + pub fn new(conf: &IftttConfiguration) -> Integration { + trace!("Initializing ifttt integration"); + + Integration { + key: conf.key.clone(), + uplink_values: conf.uplink_values.clone(), + server: "https://maker.ifttt.com".to_string(), + } + } + + async fn post(&self, event: &str, v: Values) -> Result<()> { + let url = format!("{}/trigger/{}/with/key/{}", self.server, event, self.key); + let client = Client::builder().timeout(Duration::from_secs(5)).build()?; + let mut headers = HeaderMap::new(); + headers.insert(CONTENT_TYPE, "application/json".parse().unwrap()); + + info!(event = %event, "Sending event to IFTTT"); + let res = client.post(url).json(&v).headers(headers).send().await?; + match res.error_for_status() { + Ok(_) => Ok(()), + Err(e) => { + error!(event = %event, error = %e, "Sending event to IFTTT failed"); + Err(anyhow::Error::new(e)) + } + } + } +} + +#[async_trait] +impl IntegrationTrait for Integration { + async fn uplink_event( + &self, + _vars: &HashMap, + pl: &integration::UplinkEvent, + ) -> Result<()> { + let data_measurements: HashMap = match &pl.object { + None => { + trace!("object is None, nothing to send"); + return Ok(()); + } + Some(v) => codec::get_measurements(v), + }; + + let v = Values { + value1: pl.device_info.as_ref().unwrap().dev_eui.clone(), + value2: match data_measurements.get(&self.uplink_values[0]) { + Some(v) => kind_to_string(v), + None => "".to_string(), + }, + value3: match data_measurements.get(&self.uplink_values[1]) { + Some(v) => kind_to_string(v), + None => "".to_string(), + }, + }; + + // Nothing to do. + if v.value1.is_empty() && v.value2.is_empty() && v.value3.is_empty() { + trace!("All values are empty, nothing to send"); + return Ok(()); + } + + self.post("up", v).await + } + + async fn join_event( + &self, + _vars: &HashMap, + _pl: &integration::JoinEvent, + ) -> Result<()> { + Ok(()) + } + + async fn status_event( + &self, + _vars: &HashMap, + _pl: &integration::StatusEvent, + ) -> Result<()> { + Ok(()) + } + + async fn ack_event( + &self, + _vars: &HashMap, + _pl: &integration::AckEvent, + ) -> Result<()> { + Ok(()) + } + + async fn txack_event( + &self, + _vars: &HashMap, + _pl: &integration::TxAckEvent, + ) -> Result<()> { + Ok(()) + } + + async fn log_event( + &self, + _vars: &HashMap, + _pl: &integration::LogEvent, + ) -> Result<()> { + Ok(()) + } + + async fn location_event( + &self, + _vars: &HashMap, + _pl: &integration::LocationEvent, + ) -> Result<()> { + Ok(()) + } + + async fn integration_event( + &self, + _vars: &HashMap, + _pl: &integration::IntegrationEvent, + ) -> Result<()> { + Ok(()) + } +} + +fn kind_to_string(k: &pbjson_types::value::Kind) -> String { + match k { + pbjson_types::value::Kind::NullValue(_) => "".to_string(), + pbjson_types::value::Kind::NumberValue(v) => v.to_string(), + pbjson_types::value::Kind::StringValue(v) => v.clone(), + pbjson_types::value::Kind::BoolValue(v) => v.to_string(), + pbjson_types::value::Kind::StructValue(_) | pbjson_types::value::Kind::ListValue(_) => { + // this should not happen + "".to_string() + } + } +} + +#[cfg(test)] +pub mod test { + use super::*; + use httpmock::prelude::*; + + #[tokio::test] + async fn test_ifttt() { + let server = MockServer::start(); + + let i = Integration { + key: "verysecret".into(), + uplink_values: ["temp".to_string(), "door_open".to_string()], + server: server.url(""), + }; + + // uplink event + let pl = integration::UplinkEvent { + device_info: Some(integration::DeviceInfo { + dev_eui: "0102030405060708".to_string(), + ..Default::default() + }), + object: Some(pbjson_types::Struct { + fields: [ + ( + "temp".to_string(), + pbjson_types::Value { + kind: Some(pbjson_types::value::Kind::NumberValue(23.5)), + }, + ), + ( + "door_open".to_string(), + pbjson_types::Value { + kind: Some(pbjson_types::value::Kind::StringValue( + "closed".to_string(), + )), + }, + ), + ] + .iter() + .cloned() + .collect(), + }), + ..Default::default() + }; + let mut mock = server.mock(|when, then| { + when.method(POST) + .path("/trigger/up/with/key/verysecret") + .header("Content-Type", "application/json") + .body( + serde_json::to_string(&Values { + value1: "0102030405060708".to_string(), + value2: "23.5".to_string(), + value3: "closed".to_string(), + }) + .unwrap(), + ); + + then.status(200); + }); + + i.uplink_event(&HashMap::new(), &pl).await.unwrap(); + mock.assert(); + mock.delete(); + } +} diff --git a/chirpstack/src/integration/mod.rs b/chirpstack/src/integration/mod.rs index db2047ca..5e02b070 100644 --- a/chirpstack/src/integration/mod.rs +++ b/chirpstack/src/integration/mod.rs @@ -17,6 +17,7 @@ mod aws_sns; mod azure_service_bus; mod gcp_pub_sub; mod http; +mod ifttt; mod influxdb; mod loracloud; #[cfg(test)] @@ -162,6 +163,9 @@ async fn for_application_id(id: &Uuid) -> Result { Box::new(thingsboard::Integration::new(conf)) } + application::IntegrationConfiguration::Ifttt(conf) => { + Box::new(ifttt::Integration::new(conf)) + } _ => { continue; } diff --git a/chirpstack/src/storage/application.rs b/chirpstack/src/storage/application.rs index 1b51cce2..faee7dfa 100644 --- a/chirpstack/src/storage/application.rs +++ b/chirpstack/src/storage/application.rs @@ -85,6 +85,7 @@ pub enum IntegrationKind { AwsSns, AzureServiceBus, PilotThings, + Ifttt, } impl fmt::Display for IntegrationKind { @@ -107,6 +108,7 @@ impl FromStr for IntegrationKind { "AwsSns" => IntegrationKind::AwsSns, "AzureServiceBus" => IntegrationKind::AzureServiceBus, "PilotThings" => IntegrationKind::PilotThings, + "Ifttt" => IntegrationKind::Ifttt, _ => { return Err(anyhow!("Unexpected IntegrationKind: {}", s)); } @@ -148,6 +150,7 @@ pub enum IntegrationConfiguration { AwsSns(AwsSnsConfiguration), AzureServiceBus(AzureServiceBusConfiguration), PilotThings(PilotThingsConfiguration), + Ifttt(IftttConfiguration), } impl deserialize::FromSql for IntegrationConfiguration { @@ -249,6 +252,12 @@ pub struct PilotThingsConfiguration { pub token: String, } +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct IftttConfiguration { + pub key: String, + pub uplink_values: [String; 2], // The first value is reserved for the DevEUI +} + #[derive(Clone, Queryable, Insertable, AsChangeset, PartialEq, Debug)] #[table_name = "application_integration"] pub struct Integration { @@ -542,6 +551,40 @@ pub async fn get_integrations_for_application( .await? } +pub async fn get_measurement_keys(application_id: &Uuid) -> Result, Error> { + #[derive(QueryableByName)] + struct Measurement { + #[sql_type = "diesel::sql_types::Text"] + pub key: String, + } + + task::spawn_blocking({ + let application_id = *application_id; + move || -> Result, Error> { + let c = get_db_conn()?; + let keys: Vec = diesel::sql_query( + r#" + select + distinct jsonb_object_keys(dp.measurements) as key + from + device_profile dp + inner join device d + on d.device_profile_id = dp.id + where + d.application_id = $1 + order by + key + "#, + ) + .bind::(application_id) + .load(&c) + .map_err(|e| Error::from_diesel(e, application_id.to_string()))?; + Ok(keys.iter().map(|k| k.key.clone()).collect()) + } + }) + .await? +} + #[cfg(test)] pub mod test { use super::*; diff --git a/ui/public/integrations/ifttt.png b/ui/public/integrations/ifttt.png new file mode 100644 index 0000000000000000000000000000000000000000..24e89abf2c06feae5f39888fdb91b6943121c262 GIT binary patch literal 7507 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{Cz!=BD1{4unZ@Lu7$9;2vKIPK=|!nAX#&vf*;h@67Vkz*4UC5lTKSDRo_3>%)|9WN9ev7}|U+2UMyc6dW|D^i&xy>sz zUCH9KsI28@^kjrwIu}e_cEqT%i^t1Ub@Q!#3-j-bXg|96G(Yf|nESLj73?m$p4WRq zoWJzcRG!lMzQ5Ay*oh6-_o_1S@~``SiMvtv$C@4QjyJxplWY1fckaxpde;> zR}WPSM72-;ylUFLw#&RPc5DtRdlmiZ^cP7s8+qr~GFxIDFE>rUdfv)?`-GUu>bqLz z#=e;Rci~a}^S{%-B+a*b1dIXB0*}aI1_o{+5N5n|x9$%EgLIdti(^Pd+}qoGyXK~f zus#TM7dFi>eW076UctR=gP6Cp;Ck1KPSMsMnOrsmd1NlU!FuGB)0Pdh4yn05s;)Bp zJlE2``t4sHpQ-QD->2_2KIx?6ece{06;cc0!rjk3Fb_xi7B z>CLtN>jZbc+w|43!GXCkUHVM|D{50hK!3r4 zj;0XYxnoY~gQCZ`%lE&x+5Ay%`uw;D@8s6+*?inK&vNg9Yxciw%YO;(od|5w7qf2r zcQ9++l(U=y3LEAhFn_)6{zW=)*_W#La z)qJHtvtK*Dmw%P0UU829we0>m4{YNcAw3Eak%~=eUO)H5ZH|*Y@uBX*z1=nUEHB)X zE3R(5yIUI${HoY>z}tWSk}IOW z|6HFC#4XXr(D<2KD38Grl(DaT6wbRwe#KcwADA0pujh-M#*?~aTxJdu~ zRuJ^R+;?ynS}bd5s`H6GuLe|i^r$%Z!^=qm{MT&Wi_Jc10rhX=M<%Xc zKa?377#fwi?^u8O{Jrwe>fd*s$id3##>ZSg>|Y%J`n3co5+YI&Q>bAq2(@7uFzhb- zH~a;rAcW%ti!~f5VPviS#ks*AB@Ctr1YGbwlE4A83oJQ9Z@~h8d&Y0- z2qS@x69R@orvwi)=|IiC%qsHbrTT$?C~+6y1PoTeW<``>P1x1YWcQcl#(b2%tQRn* zRFe!?P#onW9&lm#e1_k`NPcQ?-~>j#3r`!e7(?SrVAy>TPN+w5zlP$11=BkY3ZOX3 zAlAWgejU>rf0WL&DvQV$Aw!8K6i1B)>Ie+ff}log_1f9fVL6NAj>m&fZs9vSKuP19 zXvK!SKehK~_m|v1tZaKd8J^$rfNAYM)A_Z)w6>%1K>F)h@AC@gdc#wG8}|>v?+@7z z{9@sdiGA?y;{6A#@KmV_OnYL6QK)I}5->x3VL6MMN=H?Wh7vqU4V4rEckn0!rFKK9 zl~L-Q(SRBaDC8#BXlRUv#%P&9axUl*`ynn{yMOAvkb9?rQ*{iUu6{1-oD!M<8}aW_ literal 0 HcmV?d00001 diff --git a/ui/src/components/CodeEditor.tsx b/ui/src/components/CodeEditor.tsx index d3141b7b..e8b2026f 100644 --- a/ui/src/components/CodeEditor.tsx +++ b/ui/src/components/CodeEditor.tsx @@ -78,7 +78,12 @@ class CodeEditor extends Component { return (
- +
); diff --git a/ui/src/stores/ApplicationStore.ts b/ui/src/stores/ApplicationStore.ts index 2cdce963..7fddba6c 100644 --- a/ui/src/stores/ApplicationStore.ts +++ b/ui/src/stores/ApplicationStore.ts @@ -57,6 +57,11 @@ import { GetThingsBoardIntegrationResponse, UpdateThingsBoardIntegrationRequest, DeleteThingsBoardIntegrationRequest, + CreateIftttIntegrationRequest, + GetIftttIntegrationRequest, + GetIftttIntegrationResponse, + UpdateIftttIntegrationRequest, + DeleteIftttIntegrationRequest, GenerateMqttIntegrationClientCertificateRequest, GenerateMqttIntegrationClientCertificateResponse, } from "@chirpstack/chirpstack-api-grpc-web/api/application_pb"; @@ -717,6 +722,69 @@ class ApplicationStore extends EventEmitter { }); }; + createIftttIntegration = (req: CreateIftttIntegrationRequest, callbackFunc: () => void) => { + this.client.createIftttIntegration(req, SessionStore.getMetadata(), err => { + if (err !== null) { + HandleError(err); + return; + } + + notification.success({ + message: "IFTTT integration created", + duration: 3, + }); + + callbackFunc(); + }); + }; + + getIftttIntegration = ( + req: GetIftttIntegrationRequest, + callbackFunc: (resp: GetIftttIntegrationResponse) => void, + ) => { + this.client.getIftttIntegration(req, SessionStore.getMetadata(), (err, resp) => { + if (err !== null) { + HandleError(err); + return; + } + + callbackFunc(resp); + }); + }; + + updateIftttIntegration = (req: UpdateIftttIntegrationRequest, callbackFunc: () => void) => { + this.client.updateIftttIntegration(req, SessionStore.getMetadata(), err => { + if (err !== null) { + HandleError(err); + return; + } + + notification.success({ + message: "IFTTT integration updated", + duration: 3, + }); + + callbackFunc(); + }); + }; + + deleteIftttIntegration = (req: DeleteIftttIntegrationRequest, callbackFunc: () => void) => { + this.client.deleteIftttIntegration(req, SessionStore.getMetadata(), err => { + if (err !== null) { + HandleError(err); + return; + } + + notification.success({ + message: "IFTTT integration deleted", + duration: 3, + }); + + this.emit("integration.delete"); + callbackFunc(); + }); + }; + generateMqttIntegrationClientCertificate = ( req: GenerateMqttIntegrationClientCertificateRequest, callbackFunc: (resp: GenerateMqttIntegrationClientCertificateResponse) => void, diff --git a/ui/src/views/applications/ApplicationLayout.tsx b/ui/src/views/applications/ApplicationLayout.tsx index 1e9a2fa3..1c8f1bd0 100644 --- a/ui/src/views/applications/ApplicationLayout.tsx +++ b/ui/src/views/applications/ApplicationLayout.tsx @@ -34,10 +34,13 @@ import EditLoRaCloudIntegration from "./integrations/EditLoRaCloudIntegration"; import CreateThingsBoardIntegration from "./integrations/CreateThingsBoardIntegration"; import EditThingsBoardIntegration from "./integrations/EditThingsBoardIntegration"; import GenerateMqttCertificate from "./integrations/GenerateMqttCertificate"; +import CreateIftttIntegration from "./integrations/CreateIftttIntegration"; +import EditIftttIntegration from "./integrations/EditIftttIntegration"; interface IProps extends RouteComponentProps { tenant: Tenant; application: Application; + measurementKeys: string[]; } class ApplicationLayout extends Component { @@ -243,6 +246,20 @@ class ApplicationLayout extends Component { path={`${this.props.match.path}/integrations/mqtt/certificate`} render={props => } /> + ( + + )} + /> + ( + + )} + /> diff --git a/ui/src/views/applications/ApplicationLoader.tsx b/ui/src/views/applications/ApplicationLoader.tsx index c0630dab..3a1699d4 100644 --- a/ui/src/views/applications/ApplicationLoader.tsx +++ b/ui/src/views/applications/ApplicationLoader.tsx @@ -25,12 +25,15 @@ interface IProps extends RouteComponentProps { interface IState { application?: Application; + measurementKeys: string[]; } class ApplicationLoader extends Component { constructor(props: IProps) { super(props); - this.state = {}; + this.state = { + measurementKeys: [], + }; } componentDidMount() { @@ -44,6 +47,7 @@ class ApplicationLoader extends Component { ApplicationStore.get(req, (resp: GetApplicationResponse) => { this.setState({ application: resp.getApplication(), + measurementKeys: resp.getMeasurementKeysList(), }); }); }; @@ -77,7 +81,17 @@ class ApplicationLoader extends Component { path={`${path}/devices/:devEui([0-9a-f]{16})`} component={(props: any) => } /> - } /> + ( + + )} + /> ); } diff --git a/ui/src/views/applications/ListIntegrations.tsx b/ui/src/views/applications/ListIntegrations.tsx index 8b74f9d7..3da4834b 100644 --- a/ui/src/views/applications/ListIntegrations.tsx +++ b/ui/src/views/applications/ListIntegrations.tsx @@ -21,6 +21,7 @@ import InfluxdbCard from "./integrations/InfluxdbCard"; import PilotThingsCard from "./integrations/PilotThingsCard"; import LoRaCloudCard from "./integrations/LoRaCloudCard"; import ThingsBoardCard from "./integrations/ThingsBoardCard"; +import IftttCard from "./integrations/IftttCard"; interface IProps { application: Application; @@ -95,6 +96,13 @@ class ListIntegrations extends Component { available.push(); } + // IFTTT + if (includes(resp.getResultList(), IntegrationKind.IFTTT)) { + configured.push(); + } else { + available.push(); + } + // InfluxDB if (includes(resp.getResultList(), IntegrationKind.INFLUX_DB)) { configured.push(); diff --git a/ui/src/views/applications/integrations/CreateIftttIntegration.tsx b/ui/src/views/applications/integrations/CreateIftttIntegration.tsx new file mode 100644 index 00000000..1fb8e226 --- /dev/null +++ b/ui/src/views/applications/integrations/CreateIftttIntegration.tsx @@ -0,0 +1,46 @@ +import React, { Component } from "react"; +import { RouteComponentProps } from "react-router-dom"; + +import { Card } from "antd"; + +import { + Application, + IftttIntegration, + CreateIftttIntegrationRequest, +} from "@chirpstack/chirpstack-api-grpc-web/api/application_pb"; + +import IftttIntegrationForm from "./IftttIntegrationForm"; +import ApplicationStore from "../../../stores/ApplicationStore"; + +interface IProps extends RouteComponentProps { + application: Application; + measurementKeys: string[]; +} + +class CreateIftttIntegration extends Component { + onFinish = (obj: IftttIntegration) => { + obj.setApplicationId(this.props.application.getId()); + + let req = new CreateIftttIntegrationRequest(); + req.setIntegration(obj); + + ApplicationStore.createIftttIntegration(req, () => { + this.props.history.push( + `/tenants/${this.props.application.getTenantId()}/applications/${this.props.application.getId()}/integrations`, + ); + }); + }; + + render() { + const i = new IftttIntegration(); + i.setUplinkValuesList(["", ""]); + + return ( + + + + ); + } +} + +export default CreateIftttIntegration; diff --git a/ui/src/views/applications/integrations/EditIftttIntegration.tsx b/ui/src/views/applications/integrations/EditIftttIntegration.tsx new file mode 100644 index 00000000..ab6b6af0 --- /dev/null +++ b/ui/src/views/applications/integrations/EditIftttIntegration.tsx @@ -0,0 +1,71 @@ +import React, { Component } from "react"; +import { RouteComponentProps } from "react-router-dom"; + +import { Card } from "antd"; + +import { + Application, + IftttIntegration, + GetIftttIntegrationRequest, + GetIftttIntegrationResponse, + UpdateIftttIntegrationRequest, +} from "@chirpstack/chirpstack-api-grpc-web/api/application_pb"; + +import IftttIntegrationForm from "./IftttIntegrationForm"; +import ApplicationStore from "../../../stores/ApplicationStore"; + +interface IProps extends RouteComponentProps { + application: Application; + measurementKeys: string[]; +} + +interface IState { + integration?: IftttIntegration; +} + +class EditIftttIntegration extends Component { + constructor(props: IProps) { + super(props); + this.state = {}; + } + + componentDidMount() { + let req = new GetIftttIntegrationRequest(); + req.setApplicationId(this.props.application.getId()); + + ApplicationStore.getIftttIntegration(req, (resp: GetIftttIntegrationResponse) => { + this.setState({ + integration: resp.getIntegration(), + }); + }); + } + + onFinish = (obj: IftttIntegration) => { + let req = new UpdateIftttIntegrationRequest(); + req.setIntegration(obj); + + ApplicationStore.updateIftttIntegration(req, () => { + this.props.history.push( + `/tenants/${this.props.application.getTenantId()}/applications/${this.props.application.getId()}/integrations`, + ); + }); + }; + + render() { + if (this.state.integration === undefined) { + return null; + } + + return ( + + + + ); + } +} + +export default EditIftttIntegration; diff --git a/ui/src/views/applications/integrations/IftttCard.tsx b/ui/src/views/applications/integrations/IftttCard.tsx new file mode 100644 index 00000000..fc6ac4db --- /dev/null +++ b/ui/src/views/applications/integrations/IftttCard.tsx @@ -0,0 +1,58 @@ +import React, { Component } from "react"; +import { Link } from "react-router-dom"; + +import { Col, Card, Popconfirm } from "antd"; +import { PlusOutlined, EditOutlined, DeleteOutlined } from "@ant-design/icons"; + +import { Application, DeleteIftttIntegrationRequest } from "@chirpstack/chirpstack-api-grpc-web/api/application_pb"; + +import ApplicationStore from "../../../stores/ApplicationStore"; + +interface IProps { + application: Application; + add?: boolean; +} + +class IftttCard extends Component { + onDelete = () => { + let req = new DeleteIftttIntegrationRequest(); + req.setApplicationId(this.props.application.getId()); + ApplicationStore.deleteIftttIntegration(req, () => {}); + }; + + render() { + let actions: any[] = []; + + if (!!this.props.add) { + actions = [ + + + , + ]; + } else { + actions = [ + + + , + + + , + ]; + } + + return ( + + } + actions={actions} + > + + + + ); + } +} + +export default IftttCard; diff --git a/ui/src/views/applications/integrations/IftttIntegrationForm.tsx b/ui/src/views/applications/integrations/IftttIntegrationForm.tsx new file mode 100644 index 00000000..da4b7076 --- /dev/null +++ b/ui/src/views/applications/integrations/IftttIntegrationForm.tsx @@ -0,0 +1,67 @@ +import React, { Component } from "react"; + +import { Form, Input, AutoComplete, Button } from "antd"; + +import { IftttIntegration } from "@chirpstack/chirpstack-api-grpc-web/api/application_pb"; + +interface IProps { + measurementKeys: string[]; + initialValues: IftttIntegration; + onFinish: (obj: IftttIntegration) => void; +} + +class IftttIntegrationForm extends Component { + onFinish = (values: IftttIntegration.AsObject) => { + const v = Object.assign(this.props.initialValues.toObject(), values); + let i = new IftttIntegration(); + + i.setApplicationId(v.applicationId); + i.setKey(v.key); + i.setUplinkValuesList(v.uplinkValuesList); + + this.props.onFinish(i); + }; + + render() { + const options: { + value: string; + }[] = this.props.measurementKeys.map(v => { + return { value: v }; + }); + + return ( +
+ + + + + {fields => ( +
+ {fields.map((field, i) => ( + + + + ))} +
+ )} +
+ + + +
+ ); + } +} + +export default IftttIntegrationForm; diff --git a/ui/src/views/gateways/GatewayForm.tsx b/ui/src/views/gateways/GatewayForm.tsx index 32ed99b6..0a37d5b1 100644 --- a/ui/src/views/gateways/GatewayForm.tsx +++ b/ui/src/views/gateways/GatewayForm.tsx @@ -64,7 +64,7 @@ class GatewayForm extends Component { this.setLocationFields, ); }); - } + }; onFinish = (values: Gateway.AsObject) => { const v = Object.assign(this.props.initialValues.toObject(), values); @@ -154,7 +154,14 @@ class GatewayForm extends Component { eventHandlers={{ dragend: this.updateLocation }} /> - + diff --git a/ui/yarn.lock b/ui/yarn.lock index 9daaabb0..be2696d8 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -1881,7 +1881,7 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@chirpstack/chirpstack-api-grpc-web@file:../api/grpc-web": - version "4.0.0-test.6" + version "4.0.0-test.7" dependencies: "@types/google-protobuf" "^3.15.2" google-protobuf "^3.17.3"