new feature (#50)

* test

* new feature : support batch delete services

* 更新yaml文件
diff --git a/server/core/proto/services.pb.go b/server/core/proto/services.pb.go
index 6cf10ee..ae8b4b8 100644
--- a/server/core/proto/services.pb.go
+++ b/server/core/proto/services.pb.go
@@ -1,6 +1,5 @@
-// Code generated by protoc-gen-go.
+// Code generated by protoc-gen-go. DO NOT EDIT.
 // source: services.proto
-// DO NOT EDIT!
 
 /*
 Package proto is a generated protocol buffer package.
@@ -88,6 +87,9 @@
 	SchemaInfos
 	ServiceDetail
 	GetServiceDetailResponse
+	DelServicesRequest
+	DelServicesRspInfo
+	DelServicesResponse
 */
 package proto
 
@@ -2354,6 +2356,81 @@
 	return nil
 }
 
+// 删除服务请求
+type DelServicesRequest struct {
+	ServiceIds []string `protobuf:"bytes,1,rep,name=serviceIds" json:"serviceIds,omitempty"`
+	Force      bool     `protobuf:"varint,2,opt,name=force" json:"force,omitempty"`
+}
+
+func (m *DelServicesRequest) Reset()                    { *m = DelServicesRequest{} }
+func (m *DelServicesRequest) String() string            { return proto1.CompactTextString(m) }
+func (*DelServicesRequest) ProtoMessage()               {}
+func (*DelServicesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} }
+
+func (m *DelServicesRequest) GetServiceIds() []string {
+	if m != nil {
+		return m.ServiceIds
+	}
+	return nil
+}
+
+func (m *DelServicesRequest) GetForce() bool {
+	if m != nil {
+		return m.Force
+	}
+	return false
+}
+
+// 删除服务响应内容
+type DelServicesRspInfo struct {
+	ErrMessage string `protobuf:"bytes,1,opt,name=errMessage" json:"errMessage,omitempty"`
+	ServiceId  string `protobuf:"bytes,2,opt,name=serviceId" json:"serviceId,omitempty"`
+}
+
+func (m *DelServicesRspInfo) Reset()                    { *m = DelServicesRspInfo{} }
+func (m *DelServicesRspInfo) String() string            { return proto1.CompactTextString(m) }
+func (*DelServicesRspInfo) ProtoMessage()               {}
+func (*DelServicesRspInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} }
+
+func (m *DelServicesRspInfo) GetErrMessage() string {
+	if m != nil {
+		return m.ErrMessage
+	}
+	return ""
+}
+
+func (m *DelServicesRspInfo) GetServiceId() string {
+	if m != nil {
+		return m.ServiceId
+	}
+	return ""
+}
+
+// 删除服务响应
+type DelServicesResponse struct {
+	Response *Response             `protobuf:"bytes,1,opt,name=response" json:"response,omitempty"`
+	Services []*DelServicesRspInfo `protobuf:"bytes,2,rep,name=services" json:"services,omitempty"`
+}
+
+func (m *DelServicesResponse) Reset()                    { *m = DelServicesResponse{} }
+func (m *DelServicesResponse) String() string            { return proto1.CompactTextString(m) }
+func (*DelServicesResponse) ProtoMessage()               {}
+func (*DelServicesResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} }
+
+func (m *DelServicesResponse) GetResponse() *Response {
+	if m != nil {
+		return m.Response
+	}
+	return nil
+}
+
+func (m *DelServicesResponse) GetServices() []*DelServicesRspInfo {
+	if m != nil {
+		return m.Services
+	}
+	return nil
+}
+
 func init() {
 	proto1.RegisterType((*HeartbeatSetRequest)(nil), "com.huawei.paas.cse.serviceregistry.api.HeartbeatSetRequest")
 	proto1.RegisterType((*HeartbeatSetElement)(nil), "com.huawei.paas.cse.serviceregistry.api.HeartbeatSetElement")
@@ -2434,6 +2511,9 @@
 	proto1.RegisterType((*SchemaInfos)(nil), "com.huawei.paas.cse.serviceregistry.api.SchemaInfos")
 	proto1.RegisterType((*ServiceDetail)(nil), "com.huawei.paas.cse.serviceregistry.api.ServiceDetail")
 	proto1.RegisterType((*GetServiceDetailResponse)(nil), "com.huawei.paas.cse.serviceregistry.api.GetServiceDetailResponse")
+	proto1.RegisterType((*DelServicesRequest)(nil), "com.huawei.paas.cse.serviceregistry.api.DelServicesRequest")
+	proto1.RegisterType((*DelServicesRspInfo)(nil), "com.huawei.paas.cse.serviceregistry.api.DelServicesRspInfo")
+	proto1.RegisterType((*DelServicesResponse)(nil), "com.huawei.paas.cse.serviceregistry.api.DelServicesResponse")
 	proto1.RegisterEnum("com.huawei.paas.cse.serviceregistry.api.Response_Code", Response_Code_name, Response_Code_value)
 }
 
@@ -2468,6 +2548,7 @@
 	CreateDependenciesForMircServices(ctx context.Context, in *CreateDependenciesRequest, opts ...grpc.CallOption) (*CreateDependenciesResponse, error)
 	GetProviderDependencies(ctx context.Context, in *GetDependenciesRequest, opts ...grpc.CallOption) (*GetProDependenciesResponse, error)
 	GetConsumerDependencies(ctx context.Context, in *GetDependenciesRequest, opts ...grpc.CallOption) (*GetConDependenciesResponse, error)
+	DeleteServices(ctx context.Context, in *DelServicesRequest, opts ...grpc.CallOption) (*DelServicesResponse, error)
 }
 
 type serviceCtrlClient struct {
@@ -2658,6 +2739,15 @@
 	return out, nil
 }
 
+func (c *serviceCtrlClient) DeleteServices(ctx context.Context, in *DelServicesRequest, opts ...grpc.CallOption) (*DelServicesResponse, error) {
+	out := new(DelServicesResponse)
+	err := grpc.Invoke(ctx, "/com.huawei.paas.cse.serviceregistry.api.ServiceCtrl/deleteServices", in, out, c.cc, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // Server API for ServiceCtrl service
 
 type ServiceCtrlServer interface {
@@ -2681,6 +2771,7 @@
 	CreateDependenciesForMircServices(context.Context, *CreateDependenciesRequest) (*CreateDependenciesResponse, error)
 	GetProviderDependencies(context.Context, *GetDependenciesRequest) (*GetProDependenciesResponse, error)
 	GetConsumerDependencies(context.Context, *GetDependenciesRequest) (*GetConDependenciesResponse, error)
+	DeleteServices(context.Context, *DelServicesRequest) (*DelServicesResponse, error)
 }
 
 func RegisterServiceCtrlServer(s *grpc.Server, srv ServiceCtrlServer) {
@@ -3047,6 +3138,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _ServiceCtrl_DeleteServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DelServicesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(ServiceCtrlServer).DeleteServices(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/com.huawei.paas.cse.serviceregistry.api.ServiceCtrl/DeleteServices",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(ServiceCtrlServer).DeleteServices(ctx, req.(*DelServicesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _ServiceCtrl_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "com.huawei.paas.cse.serviceregistry.api.ServiceCtrl",
 	HandlerType: (*ServiceCtrlServer)(nil),
@@ -3131,6 +3240,10 @@
 			MethodName: "getConsumerDependencies",
 			Handler:    _ServiceCtrl_GetConsumerDependencies_Handler,
 		},
+		{
+			MethodName: "deleteServices",
+			Handler:    _ServiceCtrl_DeleteServices_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "services.proto",
@@ -3625,188 +3738,193 @@
 func init() { proto1.RegisterFile("services.proto", fileDescriptor0) }
 
 var fileDescriptor0 = []byte{
-	// 2922 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x5c, 0xdf, 0x8f, 0xdb, 0xc6,
-	0xf1, 0xff, 0xae, 0x7e, 0xdc, 0x49, 0x23, 0x9f, 0x7d, 0xa6, 0x65, 0x1f, 0xad, 0x6f, 0x50, 0xb8,
-	0x44, 0x80, 0x06, 0x45, 0x20, 0x24, 0xd7, 0xe6, 0x47, 0x13, 0x3b, 0xf6, 0x9d, 0xec, 0xd8, 0x67,
-	0xfb, 0x6c, 0x97, 0x3a, 0x27, 0x48, 0x9a, 0x26, 0xe0, 0x89, 0x7b, 0x12, 0x63, 0x89, 0x54, 0xc8,
-	0xd5, 0x25, 0xea, 0x5b, 0x82, 0xf4, 0x77, 0x9b, 0x36, 0x68, 0xfa, 0x94, 0x02, 0x79, 0xf2, 0x5b,
-	0x1f, 0x5b, 0x14, 0x45, 0x80, 0xa0, 0x69, 0x5f, 0xfa, 0xd0, 0xf4, 0xb5, 0x45, 0xff, 0x86, 0xfe,
-	0x09, 0x05, 0x5a, 0xec, 0x0f, 0x92, 0x4b, 0x8a, 0x27, 0x8b, 0xa4, 0x98, 0x20, 0x4f, 0xe2, 0x2e,
-	0xb5, 0xb3, 0x9f, 0x9d, 0x99, 0x9d, 0x9d, 0x9d, 0x19, 0x10, 0x8e, 0x7b, 0xd8, 0x3d, 0xb4, 0x7a,
-	0xd8, 0x6b, 0x8f, 0x5d, 0x87, 0x38, 0xca, 0xd7, 0x7a, 0xce, 0xa8, 0x3d, 0x98, 0x18, 0x6f, 0x62,
-	0xab, 0x3d, 0x36, 0x0c, 0xaf, 0xdd, 0xf3, 0x70, 0x5b, 0xfc, 0xc7, 0xc5, 0x7d, 0xcb, 0x23, 0xee,
-	0xb4, 0x6d, 0x8c, 0x2d, 0xed, 0x0d, 0x38, 0x75, 0x0d, 0x1b, 0x2e, 0xd9, 0xc7, 0x06, 0xe9, 0x62,
-	0xa2, 0xe3, 0x37, 0x26, 0xd8, 0x23, 0xca, 0xcb, 0x50, 0xb7, 0x6c, 0x8f, 0x18, 0x76, 0x0f, 0x7b,
-	0x2a, 0x3a, 0x57, 0x7e, 0xa4, 0xb1, 0x79, 0xbe, 0xbd, 0x20, 0xcd, 0xb6, 0x4c, 0xf0, 0xca, 0x10,
-	0x8f, 0xb0, 0x4d, 0xf4, 0x90, 0x9c, 0xd6, 0x8d, 0x4e, 0x29, 0xfe, 0xa1, 0x3c, 0x04, 0x75, 0x41,
-	0x6c, 0xc7, 0x54, 0xd1, 0x39, 0xf4, 0x48, 0x5d, 0x0f, 0x3b, 0x94, 0xaf, 0x00, 0xf8, 0x14, 0x76,
-	0x4c, 0xb5, 0xc4, 0x5e, 0x4b, 0x3d, 0xda, 0xc7, 0x08, 0x9a, 0xd1, 0x85, 0x78, 0x63, 0xc7, 0xf6,
-	0xb0, 0xb2, 0x0b, 0x35, 0x57, 0x3c, 0x33, 0xaa, 0x8d, 0xcd, 0xc7, 0x17, 0x5e, 0x88, 0x4f, 0x44,
-	0x0f, 0x48, 0x28, 0x7b, 0x32, 0x63, 0x4a, 0x8c, 0x31, 0x4f, 0x2e, 0x4c, 0x6f, 0x47, 0x8c, 0xbc,
-	0xb6, 0xaf, 0x7b, 0x11, 0x96, 0x8c, 0x60, 0x2d, 0xf2, 0x2e, 0x1f, 0x33, 0xe8, 0x7b, 0xec, 0xba,
-	0xbb, 0xd8, 0xf3, 0x8c, 0x3e, 0x56, 0xcb, 0xfc, 0x7d, 0xd8, 0xa3, 0x6d, 0xc2, 0x99, 0xab, 0x98,
-	0x74, 0x85, 0xca, 0xec, 0xd8, 0x07, 0x8e, 0x2f, 0x77, 0x15, 0x56, 0x9d, 0x31, 0xb1, 0x1c, 0x9b,
-	0x4b, 0xbd, 0xae, 0xfb, 0x4d, 0xed, 0xef, 0x08, 0x36, 0x66, 0x06, 0x15, 0xc3, 0x63, 0x13, 0x4e,
-	0x1a, 0xc3, 0xa1, 0x3f, 0xd3, 0x65, 0x4c, 0x0c, 0x6b, 0x98, 0x9a, 0xd7, 0x62, 0x38, 0x1f, 0xad,
-	0xcf, 0x12, 0xd4, 0x3e, 0x45, 0x70, 0x62, 0xd7, 0xea, 0xb9, 0x8e, 0xe8, 0xbf, 0x81, 0xa7, 0xca,
-	0x19, 0x58, 0x21, 0xd8, 0x36, 0x6c, 0x22, 0x78, 0x2e, 0x5a, 0x94, 0x2d, 0x63, 0xd7, 0x79, 0x1d,
-	0xf7, 0x88, 0xe0, 0xb6, 0xdf, 0x54, 0x9a, 0x50, 0x35, 0xc6, 0xe3, 0x1d, 0x53, 0x70, 0x99, 0x37,
-	0x94, 0x73, 0xd0, 0x10, 0x98, 0x6e, 0x19, 0x23, 0xac, 0x56, 0xd8, 0x3b, 0xb9, 0x8b, 0x52, 0x3c,
-	0xc4, 0xae, 0x67, 0x39, 0xb6, 0x5a, 0xe5, 0x14, 0x45, 0x93, 0x52, 0xf4, 0x08, 0x95, 0xdb, 0x0a,
-	0xa7, 0xc8, 0x1a, 0x6c, 0x9e, 0xa1, 0x65, 0x78, 0xea, 0xaa, 0x98, 0x87, 0x36, 0xb4, 0x0f, 0x56,
-	0xe0, 0x98, 0xbc, 0x86, 0x07, 0xe8, 0x4d, 0x00, 0xb6, 0x34, 0x07, 0x6c, 0x79, 0x2e, 0xd8, 0x4a,
-	0x14, 0xec, 0x39, 0x68, 0x98, 0xd8, 0xeb, 0xb9, 0x16, 0xd3, 0x12, 0xb1, 0x14, 0xb9, 0x8b, 0xce,
-	0x39, 0xc4, 0x87, 0x78, 0xe8, 0x2f, 0x87, 0x35, 0x28, 0x45, 0xaf, 0x37, 0xc0, 0x23, 0xb6, 0x20,
-	0xa6, 0x67, 0xa2, 0xa9, 0x5c, 0x87, 0xea, 0xd8, 0x20, 0x03, 0x4f, 0x05, 0x26, 0xf0, 0x6f, 0xa6,
-	0x15, 0xf8, 0x1d, 0x83, 0x0c, 0x74, 0x4e, 0x82, 0x8a, 0xd3, 0x23, 0x06, 0x99, 0x78, 0x6a, 0x8d,
-	0x8b, 0x93, 0xb7, 0x14, 0x0c, 0x30, 0x76, 0x9d, 0x31, 0x76, 0x89, 0x85, 0x3d, 0xb5, 0xce, 0x26,
-	0xba, 0xb2, 0xf0, 0x44, 0x32, 0xc3, 0xdb, 0x77, 0x02, 0x3a, 0x57, 0x6c, 0xe2, 0x4e, 0x75, 0x89,
-	0x30, 0x15, 0x06, 0xb1, 0x46, 0xd8, 0x23, 0xc6, 0x68, 0xac, 0x36, 0xb8, 0x30, 0x82, 0x0e, 0xe5,
-	0x55, 0xa8, 0x8f, 0x5d, 0xe7, 0xd0, 0x32, 0xb1, 0xeb, 0xa9, 0xc7, 0x18, 0x86, 0x4b, 0x0b, 0x63,
-	0xb8, 0x8c, 0xc7, 0xd8, 0x36, 0xb1, 0xdd, 0x9b, 0xee, 0x5a, 0x6e, 0x08, 0x47, 0x0f, 0x49, 0x86,
-	0x1a, 0xb3, 0x26, 0x69, 0x0c, 0x5d, 0xfa, 0xcd, 0xed, 0x2e, 0x71, 0x0d, 0x82, 0xfb, 0x53, 0xf5,
-	0x78, 0x9e, 0xa5, 0x87, 0x74, 0xc4, 0xd2, 0xc3, 0x8e, 0xd6, 0x05, 0x38, 0x11, 0xe3, 0x8c, 0xb2,
-	0x0e, 0xe5, 0x7b, 0x78, 0x2a, 0x94, 0x92, 0x3e, 0x52, 0x84, 0x87, 0xc6, 0x70, 0x82, 0x7d, 0x75,
-	0x64, 0x8d, 0x67, 0x4a, 0x4f, 0x23, 0x3a, 0x3c, 0x46, 0x3d, 0xcd, 0x70, 0xed, 0x8f, 0x08, 0x1a,
-	0x3e, 0x47, 0x26, 0x43, 0x4c, 0xf5, 0xc0, 0x9d, 0x0c, 0xc3, 0x2d, 0x21, 0x5a, 0x4a, 0x0b, 0x6a,
-	0xf4, 0x69, 0x6f, 0x3a, 0xf6, 0x89, 0x04, 0x6d, 0x2a, 0x3c, 0x83, 0x10, 0xd7, 0xda, 0x9f, 0x10,
-	0x7f, 0x4f, 0x84, 0x1d, 0xcc, 0x20, 0x18, 0x84, 0x60, 0x37, 0xd8, 0x11, 0xa2, 0xb9, 0xc0, 0x8e,
-	0x88, 0xa8, 0xc5, 0x4a, 0x4c, 0x2d, 0xb4, 0xf7, 0x10, 0x9c, 0xd9, 0x32, 0xcd, 0xdb, 0xee, 0xdd,
-	0xb1, 0x69, 0x10, 0x2c, 0x2f, 0x43, 0x86, 0x8b, 0xe6, 0xc1, 0x2d, 0xcd, 0x81, 0x5b, 0x9e, 0x0b,
-	0xb7, 0x32, 0x03, 0x57, 0xfb, 0x24, 0x64, 0x26, 0xdd, 0x5b, 0x8a, 0x02, 0x15, 0xba, 0xbb, 0x04,
-	0x02, 0xf6, 0xac, 0xbc, 0x0a, 0x35, 0xa1, 0xf7, 0x53, 0x61, 0xa8, 0xb7, 0xb3, 0xec, 0x5b, 0x7f,
-	0x37, 0x09, 0x85, 0x0a, 0x68, 0xb6, 0x9e, 0x85, 0xb5, 0xc8, 0xab, 0x54, 0xda, 0xf0, 0x1b, 0x04,
-	0xb5, 0xe0, 0xa8, 0xba, 0x0e, 0x95, 0x9e, 0x63, 0x72, 0xfe, 0x1d, 0x4f, 0x71, 0x9c, 0xf8, 0x04,
-	0xda, 0x1d, 0xc7, 0xc4, 0x3a, 0xa3, 0x41, 0xb9, 0x3a, 0x12, 0x67, 0xac, 0x38, 0x15, 0x44, 0x53,
-	0xfb, 0x3a, 0x54, 0xe8, 0xff, 0x94, 0x06, 0xac, 0xde, 0xbd, 0x75, 0xe3, 0xd6, 0xed, 0x17, 0x6f,
-	0xad, 0xff, 0x1f, 0x6d, 0x74, 0xef, 0x76, 0x3a, 0x57, 0xba, 0xdd, 0x75, 0xa4, 0xd4, 0xa0, 0xf2,
-	0xfc, 0xd6, 0xce, 0xcd, 0xf5, 0x92, 0xf6, 0x7b, 0x04, 0xa7, 0xae, 0x62, 0x72, 0xe5, 0x2d, 0xcb,
-	0x23, 0xd8, 0xee, 0x61, 0xff, 0x28, 0x56, 0xa0, 0x42, 0x42, 0x49, 0xb3, 0xe7, 0x02, 0x0c, 0x78,
-	0xe4, 0xc0, 0xa8, 0xc6, 0x0f, 0x8c, 0x16, 0xd4, 0xb8, 0x5d, 0xde, 0x31, 0x85, 0xa6, 0x06, 0x6d,
-	0xed, 0x23, 0x04, 0xcd, 0x28, 0xee, 0x62, 0xbc, 0x81, 0x08, 0xc2, 0xd2, 0x3c, 0x84, 0xe5, 0x18,
-	0xc2, 0x3e, 0x34, 0x3b, 0x2e, 0x96, 0x36, 0x91, 0xe0, 0xec, 0x6d, 0x58, 0x15, 0x04, 0x04, 0xbe,
-	0x27, 0x32, 0x19, 0x40, 0xdd, 0xa7, 0xa2, 0xbd, 0x8b, 0xe0, 0x74, 0x6c, 0xa6, 0x2f, 0x80, 0x17,
-	0xda, 0x75, 0x68, 0x5e, 0xc6, 0x43, 0x3c, 0xb3, 0xde, 0x07, 0x3a, 0x05, 0x07, 0x8e, 0xdb, 0xe3,
-	0x3a, 0x5c, 0xd3, 0x79, 0x43, 0x3b, 0x80, 0xd3, 0x31, 0x5a, 0x85, 0xac, 0x48, 0x7b, 0x1c, 0x4e,
-	0x86, 0x5e, 0xe5, 0x42, 0x80, 0xb5, 0xdf, 0x21, 0x50, 0xe4, 0x31, 0xc5, 0xb0, 0x5a, 0x52, 0x92,
-	0xd2, 0x52, 0x94, 0xa4, 0x29, 0xa3, 0xf6, 0xc4, 0x52, 0xb5, 0x3f, 0xf0, 0xdd, 0x1f, 0x76, 0x17,
-	0xb3, 0x9a, 0x6f, 0x43, 0xcd, 0xbf, 0x21, 0x0a, 0x03, 0x9d, 0x71, 0x39, 0x01, 0x19, 0xed, 0xdf,
-	0x08, 0xce, 0x46, 0xce, 0x28, 0x6a, 0xa1, 0xbd, 0xc5, 0x74, 0xce, 0x8d, 0x38, 0x60, 0x1c, 0x90,
-	0xbe, 0x30, 0xa0, 0x23, 0x67, 0x9d, 0xe7, 0x8d, 0xe5, 0x74, 0x49, 0xb4, 0x7b, 0xd0, 0x4a, 0x9a,
-	0xb7, 0x98, 0x5d, 0xf1, 0xa4, 0x7c, 0x41, 0xa3, 0x67, 0xbf, 0xb7, 0xf0, 0xd6, 0xd8, 0x98, 0x19,
-	0x58, 0x8c, 0x46, 0x5d, 0x87, 0x2a, 0x75, 0x3e, 0x7c, 0xe9, 0xa5, 0xf6, 0xd3, 0x29, 0x38, 0x9d,
-	0x93, 0xd0, 0xee, 0x23, 0x50, 0x67, 0xdc, 0x9d, 0xc5, 0x34, 0x29, 0x74, 0xed, 0x4a, 0x11, 0xd7,
-	0xae, 0x0b, 0x15, 0xfa, 0xc4, 0xce, 0x84, 0xc6, 0xe6, 0xc5, 0x85, 0xd1, 0x25, 0xbb, 0x5e, 0x3a,
-	0x23, 0xa6, 0xbd, 0x1e, 0xd3, 0x78, 0x0e, 0xb3, 0x18, 0x15, 0xf8, 0x39, 0xf7, 0x03, 0x53, 0xeb,
-	0x80, 0x72, 0x37, 0x2a, 0x98, 0xdc, 0x4b, 0x17, 0x32, 0x7a, 0x07, 0xc1, 0xc6, 0x0c, 0x9e, 0x62,
-	0x54, 0x4b, 0x85, 0x55, 0x9d, 0x49, 0x91, 0xaf, 0xa1, 0xae, 0xfb, 0x4d, 0xad, 0x0b, 0x67, 0xa3,
-	0xa7, 0xd2, 0xe2, 0x6c, 0x51, 0x61, 0xd5, 0x8d, 0x12, 0x15, 0x4d, 0xba, 0xb3, 0x93, 0x88, 0x16,
-	0x23, 0xd6, 0x27, 0xe0, 0x74, 0xb8, 0x41, 0xf7, 0x8c, 0xfe, 0x82, 0x1b, 0xfb, 0xbf, 0x48, 0xb6,
-	0x08, 0x7c, 0x5c, 0x31, 0xcc, 0xff, 0x2e, 0x54, 0x88, 0xd1, 0xf7, 0xb5, 0x67, 0x67, 0x61, 0x52,
-	0xc9, 0xe8, 0xda, 0xb4, 0xc1, 0x6d, 0x31, 0x23, 0xdb, 0x7a, 0x0a, 0xea, 0x41, 0x57, 0x2a, 0xfb,
-	0xfb, 0x1a, 0x6c, 0x44, 0x74, 0x73, 0xcf, 0xe8, 0x2f, 0x26, 0x78, 0x31, 0x49, 0x29, 0x61, 0x92,
-	0xb2, 0x34, 0x89, 0x66, 0xc5, 0x6c, 0x10, 0x9b, 0xa0, 0x18, 0x25, 0xf8, 0x1b, 0x82, 0xd3, 0xe1,
-	0x5e, 0x5a, 0x58, 0x0b, 0x94, 0x57, 0x22, 0xb2, 0xb9, 0x96, 0x66, 0x67, 0xcf, 0xce, 0xb5, 0x3c,
-	0xd1, 0xf4, 0x65, 0x4b, 0x55, 0xa0, 0x6e, 0x6a, 0x37, 0x41, 0x8d, 0xec, 0xd4, 0xc5, 0x39, 0xa7,
-	0x40, 0xe5, 0x1e, 0x9e, 0xfa, 0x5b, 0x9f, 0x3d, 0x53, 0x6b, 0x9e, 0x40, 0xad, 0x18, 0xe4, 0x53,
-	0x68, 0x5c, 0xc3, 0xc6, 0x90, 0x0c, 0x3a, 0x03, 0xdc, 0xbb, 0x47, 0xe1, 0x8c, 0xfc, 0x5b, 0x68,
-	0x5d, 0x67, 0xcf, 0xec, 0x5e, 0xed, 0xb8, 0x3c, 0xc0, 0x58, 0xd5, 0xd9, 0x33, 0xbd, 0xdd, 0x58,
-	0x36, 0xc1, 0xee, 0xa1, 0x31, 0x64, 0xca, 0x5a, 0xd5, 0x83, 0x36, 0x95, 0x07, 0x8b, 0x1a, 0xb0,
-	0x1b, 0x5d, 0x55, 0xe7, 0x0d, 0x2a, 0xb7, 0x89, 0x3b, 0x14, 0x37, 0x39, 0xfa, 0xa8, 0x7d, 0x5a,
-	0x81, 0xa6, 0xec, 0xc2, 0xf9, 0x81, 0xe6, 0x58, 0x14, 0x19, 0xcd, 0x44, 0x91, 0xe7, 0x5f, 0xbc,
-	0x1e, 0x82, 0x3a, 0xb6, 0xcd, 0xb1, 0x63, 0xd9, 0xc4, 0x53, 0xcb, 0x8c, 0xad, 0x61, 0x07, 0x05,
-	0x3e, 0x70, 0x3c, 0x22, 0x45, 0x3f, 0x83, 0xb6, 0x14, 0x95, 0xab, 0x46, 0xa2, 0x72, 0xa3, 0x88,
-	0x53, 0xb8, 0xc2, 0x74, 0x7c, 0x37, 0x93, 0x97, 0xea, 0x2f, 0x71, 0x6e, 0x74, 0xee, 0x05, 0x68,
-	0x0c, 0x42, 0x91, 0xb0, 0xb8, 0x6a, 0x1a, 0x37, 0x46, 0x12, 0xa7, 0x2e, 0x13, 0x8a, 0x86, 0x77,
-	0x6a, 0xf1, 0xa8, 0xdf, 0x6b, 0x70, 0xdc, 0x34, 0x88, 0xd1, 0xc1, 0x54, 0x8c, 0x3b, 0xf6, 0x81,
-	0xa3, 0xd6, 0xd9, 0xc4, 0x4f, 0x2d, 0x1e, 0xfa, 0x8b, 0x0c, 0xd7, 0x63, 0xe4, 0xc2, 0xf0, 0x31,
-	0x48, 0xe1, 0xe3, 0xbc, 0xce, 0xef, 0x3e, 0x1c, 0x8f, 0x4e, 0x4b, 0xb5, 0xd5, 0xa6, 0xc2, 0x15,
-	0x1a, 0x6c, 0x0b, 0xc1, 0x52, 0xa4, 0x8e, 0x1d, 0xf8, 0x62, 0xac, 0xa5, 0x3c, 0x0c, 0x6b, 0xc6,
-	0xa1, 0x61, 0x0d, 0x8d, 0xfd, 0x21, 0x7e, 0xd9, 0xb1, 0x7d, 0xbb, 0x1b, 0xed, 0xd4, 0x5e, 0x84,
-	0x8d, 0x24, 0x19, 0xde, 0xc0, 0xd3, 0x7c, 0x9a, 0xaa, 0x11, 0xd8, 0xd0, 0x19, 0x03, 0x29, 0x74,
-	0x3e, 0xc6, 0x37, 0x1a, 0x2f, 0xd1, 0xfd, 0xc5, 0xbb, 0xc4, 0x2e, 0xbf, 0x90, 0x4b, 0xe1, 0xf4,
-	0x80, 0x9c, 0xf6, 0x63, 0x04, 0xea, 0xec, 0xb4, 0xc5, 0x9c, 0xd9, 0x0f, 0x4a, 0x8e, 0xbd, 0x04,
-	0x67, 0xef, 0xda, 0xee, 0x11, 0x3c, 0xc8, 0x97, 0x77, 0xa3, 0xd7, 0xa2, 0x04, 0xd2, 0xc5, 0x58,
-	0xd1, 0x3b, 0xb0, 0x1e, 0xe4, 0xf8, 0x96, 0x03, 0x7f, 0x1f, 0x4e, 0x4a, 0x14, 0x8b, 0x41, 0xfd,
-	0x57, 0x04, 0xcd, 0xe7, 0x2d, 0xdb, 0xf4, 0xb9, 0x13, 0x1c, 0x59, 0x8f, 0xc2, 0xc9, 0x9e, 0x63,
-	0x7b, 0x93, 0x11, 0x76, 0xbb, 0xb1, 0x25, 0xcc, 0xbe, 0xc8, 0x1c, 0xfb, 0x3b, 0x07, 0x0d, 0x11,
-	0xec, 0xa3, 0x8e, 0xad, 0x1f, 0xe1, 0x95, 0xba, 0x58, 0xa4, 0x91, 0xba, 0x15, 0x55, 0x7e, 0x38,
-	0xd2, 0xe7, 0xe4, 0x2c, 0x94, 0xf6, 0x17, 0x04, 0xa7, 0x63, 0x4b, 0x29, 0x46, 0xa3, 0xbf, 0x33,
-	0x9b, 0x66, 0xcd, 0xb9, 0x33, 0xa5, 0x6c, 0xeb, 0x67, 0x88, 0x39, 0xe1, 0xb7, 0x6d, 0x1c, 0xdf,
-	0x0b, 0xe9, 0x24, 0xf2, 0x28, 0x9c, 0xf4, 0xd3, 0x2d, 0xdd, 0x98, 0xf9, 0x99, 0x7d, 0xa1, 0xb4,
-	0x41, 0xf1, 0x3b, 0x77, 0x42, 0x95, 0xe4, 0x02, 0x4b, 0x78, 0x13, 0x48, 0xa5, 0x92, 0x24, 0x95,
-	0xaa, 0x2c, 0x95, 0x3f, 0xf3, 0xcb, 0x41, 0x64, 0x3d, 0xc5, 0x88, 0x45, 0xb6, 0x97, 0xa5, 0xe5,
-	0xda, 0xcb, 0x0f, 0x79, 0x20, 0x2c, 0xe7, 0x26, 0x49, 0x27, 0x12, 0x9f, 0xc5, 0xe5, 0x24, 0x16,
-	0x57, 0x62, 0x2c, 0x6e, 0x46, 0xd1, 0x7d, 0x09, 0xf5, 0xde, 0x83, 0xff, 0xe7, 0x37, 0x1c, 0xff,
-	0x65, 0x97, 0x39, 0x5e, 0x4b, 0xb1, 0xa4, 0x92, 0x57, 0x57, 0x96, 0xbd, 0x3a, 0x6d, 0x04, 0x0f,
-	0x25, 0x4f, 0x5a, 0x8c, 0xb1, 0x7d, 0xaf, 0xe4, 0xc7, 0xe9, 0xfc, 0xf9, 0x52, 0x84, 0x25, 0x1f,
-	0xb4, 0x46, 0x2f, 0xe2, 0xa1, 0x96, 0x99, 0x78, 0xba, 0x29, 0xc3, 0x96, 0x49, 0xb0, 0x8a, 0x8c,
-	0x5b, 0x0e, 0xe3, 0x42, 0x2f, 0x34, 0x70, 0x79, 0x1e, 0x9a, 0x2f, 0x1a, 0xa4, 0x37, 0x88, 0x1b,
-	0xd6, 0x87, 0x61, 0xcd, 0xc3, 0xc3, 0x83, 0xf8, 0x0e, 0x8e, 0x76, 0x6a, 0xf7, 0x4b, 0x70, 0x3a,
-	0x36, 0xbc, 0x98, 0x6d, 0x76, 0x06, 0x56, 0x8c, 0x1e, 0x91, 0x3c, 0x55, 0xde, 0x52, 0xae, 0x73,
-	0xc6, 0xf2, 0xa0, 0xe1, 0xd3, 0x99, 0x36, 0xde, 0x0d, 0x3c, 0xe5, 0x22, 0x91, 0x6d, 0x65, 0x65,
-	0xb9, 0xb6, 0xf2, 0x26, 0xac, 0x5f, 0xc5, 0xa4, 0xcb, 0xf2, 0x5c, 0x8b, 0x69, 0xb6, 0x9c, 0x26,
-	0x2b, 0xc5, 0xd2, 0x64, 0xdf, 0xe3, 0x29, 0x18, 0x41, 0xad, 0x30, 0x86, 0xf3, 0xf9, 0x7c, 0x86,
-	0xf3, 0x96, 0x76, 0x1b, 0x4e, 0x89, 0x3b, 0xf8, 0x92, 0x16, 0x83, 0x83, 0x1c, 0x58, 0x91, 0xeb,
-	0xd1, 0xfa, 0x70, 0x6a, 0xd7, 0x31, 0xad, 0x83, 0xe9, 0x92, 0x70, 0x4b, 0x0c, 0x2a, 0x47, 0x18,
-	0x84, 0xa1, 0x19, 0x9d, 0xa8, 0x98, 0xf5, 0xbc, 0x8d, 0xe0, 0x2c, 0xcf, 0x60, 0x06, 0x95, 0x25,
-	0x56, 0x78, 0x06, 0x9b, 0x70, 0xcc, 0x94, 0xba, 0x45, 0x41, 0xe0, 0xa5, 0x14, 0xea, 0x2c, 0xd5,
-	0xa8, 0x84, 0xa5, 0x2b, 0x7a, 0x84, 0x2a, 0xc5, 0xb0, 0x71, 0x44, 0x5d, 0x4b, 0xe8, 0xfc, 0xa2,
-	0x39, 0xce, 0x6f, 0x69, 0x6e, 0xe2, 0xbb, 0x7c, 0x44, 0x99, 0x55, 0xe4, 0x9c, 0xff, 0x07, 0xa2,
-	0xb7, 0xd0, 0x44, 0xb4, 0xca, 0x2b, 0x50, 0xf3, 0x1d, 0x0e, 0xc1, 0xf2, 0xfc, 0xf5, 0x3a, 0x01,
-	0xc5, 0x68, 0x39, 0x50, 0x69, 0xe9, 0xe5, 0x40, 0xf4, 0xa2, 0x96, 0x24, 0xe0, 0x22, 0xf3, 0x57,
-	0x49, 0xaa, 0x34, 0x3f, 0xcc, 0xfd, 0x27, 0x04, 0xad, 0xab, 0x98, 0x74, 0x1c, 0xfb, 0x73, 0x40,
-	0xa9, 0x74, 0x67, 0x59, 0x9e, 0x31, 0x2b, 0x2a, 0xf1, 0x59, 0x2c, 0xe1, 0x8e, 0xeb, 0x7c, 0x4e,
-	0x4b, 0xf0, 0x35, 0x28, 0xef, 0x12, 0x02, 0x3a, 0xda, 0xbf, 0x4a, 0x70, 0x42, 0x74, 0xdf, 0x3e,
-	0xa4, 0xbf, 0xf8, 0x4d, 0xe5, 0x25, 0x38, 0x36, 0x12, 0x7f, 0xb7, 0x0e, 0xf3, 0x16, 0x4e, 0x44,
-	0x48, 0x15, 0xea, 0xf3, 0x2a, 0x2f, 0x48, 0x2e, 0x7e, 0x86, 0xaa, 0x24, 0x7f, 0xfd, 0xcb, 0x0b,
-	0x96, 0x6f, 0x41, 0x83, 0x9b, 0xf2, 0x1d, 0xfb, 0xc0, 0xf1, 0x22, 0x67, 0x02, 0x3a, 0xf2, 0x4c,
-	0x88, 0x1e, 0x9a, 0xff, 0xac, 0xc2, 0x5a, 0xa4, 0xbc, 0xf5, 0x4b, 0x2c, 0x9d, 0x86, 0x17, 0x32,
-	0x43, 0x08, 0x29, 0x45, 0x2a, 0x39, 0x1c, 0xab, 0xcb, 0x84, 0xc2, 0xe4, 0x74, 0x25, 0x77, 0x72,
-	0x3a, 0x6a, 0x25, 0xaa, 0xcb, 0xb1, 0x12, 0xd1, 0x7d, 0xbb, 0xb2, 0x9c, 0x7d, 0xab, 0xec, 0x09,
-	0x5d, 0x5f, 0x4d, 0x79, 0x7a, 0x44, 0x74, 0x29, 0xae, 0xe9, 0xca, 0x26, 0x34, 0x47, 0xd2, 0x84,
-	0x2f, 0xf0, 0xf3, 0xd3, 0x53, 0x6b, 0xec, 0xd2, 0x9c, 0xf8, 0x2e, 0xfb, 0xee, 0xf8, 0x18, 0x81,
-	0x1a, 0x66, 0x12, 0x45, 0xf1, 0x76, 0x41, 0xb6, 0xf3, 0x4e, 0xbc, 0xc2, 0x27, 0x6b, 0x71, 0xb9,
-	0x4f, 0x66, 0xf3, 0x3f, 0x67, 0x82, 0x52, 0xc9, 0x0e, 0x71, 0x87, 0xca, 0xbb, 0x08, 0xaa, 0xf8,
-	0x2d, 0xcb, 0x23, 0xca, 0xf9, 0x34, 0x79, 0xd4, 0x78, 0x29, 0x60, 0xeb, 0x42, 0xc6, 0xd1, 0x62,
-	0xa1, 0x3f, 0x44, 0xb0, 0xd2, 0x63, 0x67, 0xbf, 0xb2, 0x38, 0xa5, 0xa4, 0xca, 0xb9, 0xd6, 0x73,
-	0x59, 0x87, 0x4b, 0x48, 0x4c, 0xe6, 0x9e, 0xa7, 0x40, 0x92, 0x54, 0xd3, 0x96, 0x02, 0x49, 0x72,
-	0x19, 0xdb, 0xdb, 0x08, 0x56, 0xfa, 0x2c, 0x66, 0xa6, 0x3c, 0x93, 0x21, 0xc7, 0xed, 0xc3, 0x78,
-	0x36, 0xd3, 0x58, 0x81, 0xe1, 0x47, 0x08, 0x1a, 0xfd, 0xb0, 0xf6, 0x4b, 0xc9, 0x42, 0xcc, 0x77,
-	0xac, 0x5a, 0xe7, 0xb3, 0x0d, 0x16, 0x50, 0x3e, 0x44, 0xb0, 0x3e, 0x61, 0x61, 0x82, 0x30, 0xd6,
-	0xa0, 0x6c, 0xe7, 0xaf, 0xc8, 0x6a, 0x75, 0x72, 0xd1, 0x10, 0xe8, 0x7e, 0x86, 0x60, 0xd5, 0x30,
-	0x4d, 0x16, 0xac, 0xbe, 0x98, 0x21, 0xeb, 0x2d, 0x97, 0x89, 0xb4, 0x2e, 0x65, 0x27, 0x20, 0xc1,
-	0xe9, 0x63, 0x92, 0x12, 0x4e, 0x72, 0x41, 0x57, 0x0a, 0x38, 0x47, 0x15, 0x76, 0xfd, 0x0a, 0x01,
-	0x70, 0xd9, 0x31, 0x44, 0x5b, 0xd9, 0x38, 0x2e, 0x95, 0x5c, 0xb5, 0xb6, 0xf3, 0x90, 0x10, 0xa8,
-	0x7e, 0x8d, 0x00, 0xf8, 0x56, 0x67, 0xa8, 0xb6, 0x33, 0xee, 0x57, 0x99, 0x55, 0x9d, 0x5c, 0x34,
-	0x04, 0xae, 0x9f, 0x70, 0x5d, 0xa2, 0xc7, 0x93, 0xf2, 0x5c, 0xbe, 0x0a, 0x8a, 0xd6, 0xc5, 0xcc,
-	0xe3, 0x25, 0x30, 0x7d, 0x4c, 0x52, 0x82, 0x49, 0x2c, 0x20, 0x6a, 0x5d, 0xcc, 0x59, 0xaa, 0xa3,
-	0xfc, 0x12, 0x41, 0x9d, 0xeb, 0xd1, 0x9e, 0xd1, 0x57, 0x2e, 0x65, 0xd3, 0x81, 0xb0, 0x2c, 0xa7,
-	0xb5, 0x95, 0x83, 0x82, 0xa4, 0xda, 0x5c, 0x89, 0x18, 0x8b, 0xb6, 0xb2, 0x29, 0x80, 0xcc, 0xa5,
-	0xed, 0x3c, 0x24, 0x04, 0xaa, 0x1f, 0x20, 0x58, 0xeb, 0xfb, 0x11, 0x33, 0x96, 0x0d, 0xff, 0x56,
-	0x2a, 0xde, 0xcb, 0x21, 0xa3, 0xd6, 0x33, 0x59, 0x86, 0x0a, 0x20, 0x3f, 0x45, 0x70, 0xcc, 0x94,
-	0xa2, 0x5d, 0x29, 0xdc, 0x8c, 0x84, 0xa8, 0x5b, 0xeb, 0x42, 0xc6, 0xd1, 0x12, 0x9a, 0x91, 0x14,
-	0xab, 0x4a, 0x81, 0x26, 0x21, 0x96, 0x96, 0x02, 0x4d, 0x62, 0x80, 0xec, 0xb7, 0x08, 0xbe, 0xda,
-	0x9b, 0x09, 0x78, 0x3c, 0xef, 0xb8, 0xbb, 0x96, 0xdb, 0x0b, 0x8e, 0xdc, 0xed, 0x94, 0x0e, 0x4d,
-	0x42, 0x48, 0x23, 0x85, 0x59, 0x9a, 0x13, 0x80, 0xf9, 0x08, 0xc1, 0x46, 0x9f, 0x85, 0x0d, 0xd8,
-	0x0d, 0x41, 0xfe, 0x4f, 0xba, 0x33, 0x26, 0x1f, 0xc2, 0x39, 0x91, 0x0b, 0x81, 0xb0, 0x23, 0xae,
-	0x1b, 0x5f, 0x20, 0xc2, 0x23, 0xc2, 0x43, 0x9b, 0x9f, 0x35, 0xe0, 0x54, 0xec, 0xb2, 0xc9, 0xdc,
-	0xf0, 0x5f, 0x20, 0x7a, 0x71, 0xe0, 0x25, 0x0a, 0x29, 0xec, 0xda, 0x11, 0x45, 0x23, 0x29, 0xec,
-	0xda, 0x91, 0xf5, 0x1f, 0xf4, 0x70, 0x9c, 0x04, 0x65, 0x13, 0x69, 0x1c, 0xad, 0xa3, 0xca, 0x38,
-	0xd2, 0x38, 0x5a, 0x47, 0xd7, 0x6b, 0xbc, 0x83, 0xa0, 0x3e, 0xf0, 0xeb, 0x21, 0x52, 0x58, 0xb5,
-	0x78, 0x55, 0x46, 0x0a, 0xab, 0x36, 0x5b, 0x7e, 0xf1, 0x7d, 0x04, 0x95, 0x03, 0xcb, 0x36, 0x53,
-	0x5c, 0x11, 0x92, 0xca, 0x2b, 0x52, 0x5c, 0x11, 0x92, 0x4b, 0x1a, 0xa8, 0x3d, 0xeb, 0x4b, 0x39,
-	0xdf, 0x74, 0x97, 0xb8, 0x19, 0x38, 0x17, 0x32, 0x8e, 0x16, 0x68, 0xde, 0x47, 0x70, 0xbc, 0x1f,
-	0x49, 0xf2, 0xa7, 0xf3, 0x18, 0x66, 0xab, 0x1d, 0xd2, 0x79, 0x0c, 0x49, 0xd5, 0x05, 0x1f, 0x22,
-	0x38, 0xc6, 0x3d, 0x06, 0x9e, 0xd4, 0x55, 0x2e, 0x67, 0x4c, 0x86, 0x46, 0x12, 0xd1, 0xad, 0x2b,
-	0x39, 0xa9, 0x08, 0x74, 0xf7, 0x11, 0xa8, 0x93, 0x99, 0xd4, 0xa7, 0xb8, 0xdb, 0x74, 0x96, 0x90,
-	0xb6, 0x6d, 0x5d, 0xce, 0x47, 0x24, 0xbc, 0x06, 0x56, 0xdf, 0x34, 0x48, 0x6f, 0x90, 0x42, 0xe1,
-	0x93, 0x92, 0xac, 0x29, 0x14, 0x3e, 0x31, 0xc9, 0xfa, 0x18, 0x62, 0x2a, 0x3f, 0x90, 0xbe, 0xa2,
-	0xa0, 0x64, 0xfb, 0xe8, 0x43, 0x7a, 0x95, 0x4f, 0xfa, 0x74, 0xc3, 0xe6, 0x27, 0x25, 0x38, 0x79,
-	0xd5, 0x39, 0xc4, 0xae, 0x2d, 0x07, 0x55, 0xde, 0x47, 0xb0, 0xde, 0x8f, 0x85, 0x88, 0x72, 0xdd,
-	0xe1, 0xb7, 0x32, 0x8c, 0x8d, 0x45, 0xa6, 0x3e, 0x40, 0x70, 0xa2, 0x1f, 0xfd, 0x38, 0x42, 0xa6,
-	0x9b, 0xa1, 0xfc, 0x2d, 0x86, 0x4c, 0x37, 0xc3, 0xc8, 0x77, 0x19, 0xb6, 0x1f, 0x83, 0x45, 0xbf,
-	0x03, 0xf2, 0x72, 0x95, 0x7d, 0x37, 0x64, 0x7f, 0x85, 0xfd, 0x7c, 0xe3, 0x7f, 0x01, 0x00, 0x00,
-	0xff, 0xff, 0xd5, 0xe7, 0xc0, 0xb1, 0x50, 0x44, 0x00, 0x00,
+	// 2997 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5c, 0x5b, 0x8f, 0xdb, 0xc6,
+	0xf5, 0xff, 0x8f, 0x2e, 0xbb, 0xab, 0x23, 0xef, 0x7a, 0x4d, 0xaf, 0xbd, 0xb4, 0xfe, 0x41, 0xe1,
+	0x12, 0x01, 0x1a, 0x14, 0x81, 0x90, 0x6c, 0x9b, 0x4b, 0x13, 0x3b, 0xf6, 0xae, 0xec, 0xd8, 0x6b,
+	0x7b, 0x6d, 0x97, 0x5a, 0xc7, 0x48, 0x9a, 0x26, 0xe0, 0x8a, 0xb3, 0x12, 0x63, 0x89, 0x54, 0xc8,
+	0xd1, 0x26, 0xea, 0x5b, 0x82, 0xf4, 0x96, 0xb4, 0x69, 0x83, 0xa6, 0x4f, 0x29, 0x90, 0x27, 0xbf,
+	0xf5, 0xb1, 0x45, 0x51, 0x04, 0x0d, 0x9a, 0xf6, 0xa5, 0x0f, 0x4d, 0x5f, 0x5b, 0xf4, 0x33, 0xf4,
+	0x3b, 0xb4, 0x98, 0x0b, 0xc9, 0x21, 0x45, 0xc9, 0x22, 0x29, 0x26, 0xc8, 0x93, 0x38, 0x43, 0xcd,
+	0x99, 0xdf, 0x9c, 0xdb, 0x9c, 0x39, 0x73, 0x40, 0x58, 0xf3, 0xb0, 0x7b, 0x64, 0x75, 0xb0, 0xd7,
+	0x1c, 0xba, 0x0e, 0x71, 0x94, 0x6f, 0x74, 0x9c, 0x41, 0xb3, 0x37, 0x32, 0xde, 0xc0, 0x56, 0x73,
+	0x68, 0x18, 0x5e, 0xb3, 0xe3, 0xe1, 0xa6, 0xf8, 0x8f, 0x8b, 0xbb, 0x96, 0x47, 0xdc, 0x71, 0xd3,
+	0x18, 0x5a, 0xda, 0xeb, 0x70, 0xf2, 0x2a, 0x36, 0x5c, 0x72, 0x80, 0x0d, 0xd2, 0xc6, 0x44, 0xc7,
+	0xaf, 0x8f, 0xb0, 0x47, 0x94, 0x97, 0xa0, 0x66, 0xd9, 0x1e, 0x31, 0xec, 0x0e, 0xf6, 0x54, 0x74,
+	0xb6, 0xfc, 0x48, 0x7d, 0xeb, 0x5c, 0x73, 0x4e, 0x9a, 0x4d, 0x99, 0xe0, 0xe5, 0x3e, 0x1e, 0x60,
+	0x9b, 0xe8, 0x21, 0x39, 0xad, 0x1d, 0x9d, 0x52, 0xfc, 0x43, 0x79, 0x08, 0x6a, 0x82, 0xd8, 0xae,
+	0xa9, 0xa2, 0xb3, 0xe8, 0x91, 0x9a, 0x1e, 0x76, 0x28, 0x5f, 0x03, 0xf0, 0x29, 0xec, 0x9a, 0x6a,
+	0x89, 0xbd, 0x96, 0x7a, 0xb4, 0x4f, 0x10, 0x6c, 0x44, 0x17, 0xe2, 0x0d, 0x1d, 0xdb, 0xc3, 0xca,
+	0x1e, 0xac, 0xb8, 0xe2, 0x99, 0x51, 0xad, 0x6f, 0x3d, 0x3e, 0xf7, 0x42, 0x7c, 0x22, 0x7a, 0x40,
+	0x42, 0xd9, 0x97, 0x19, 0x53, 0x62, 0x8c, 0x79, 0x72, 0x6e, 0x7a, 0xbb, 0x62, 0xe4, 0xd5, 0x03,
+	0xdd, 0x8b, 0xb0, 0x64, 0x00, 0xab, 0x91, 0x77, 0xf9, 0x98, 0x41, 0xdf, 0x63, 0xd7, 0xdd, 0xc3,
+	0x9e, 0x67, 0x74, 0xb1, 0x5a, 0xe6, 0xef, 0xc3, 0x1e, 0x6d, 0x0b, 0x4e, 0x5f, 0xc1, 0xa4, 0x2d,
+	0x54, 0x66, 0xd7, 0x3e, 0x74, 0x7c, 0xb9, 0xab, 0xb0, 0xec, 0x0c, 0x89, 0xe5, 0xd8, 0x5c, 0xea,
+	0x35, 0xdd, 0x6f, 0x6a, 0xff, 0x40, 0xb0, 0x39, 0x31, 0xa8, 0x18, 0x1e, 0x9b, 0x70, 0xc2, 0xe8,
+	0xf7, 0xfd, 0x99, 0x2e, 0x61, 0x62, 0x58, 0xfd, 0xd4, 0xbc, 0x16, 0xc3, 0xf9, 0x68, 0x7d, 0x92,
+	0xa0, 0xf6, 0x19, 0x82, 0xe3, 0x7b, 0x56, 0xc7, 0x75, 0x44, 0xff, 0x75, 0x3c, 0x56, 0x4e, 0xc3,
+	0x12, 0xc1, 0xb6, 0x61, 0x13, 0xc1, 0x73, 0xd1, 0xa2, 0x6c, 0x19, 0xba, 0xce, 0x6b, 0xb8, 0x43,
+	0x04, 0xb7, 0xfd, 0xa6, 0xb2, 0x01, 0x55, 0x63, 0x38, 0xdc, 0x35, 0x05, 0x97, 0x79, 0x43, 0x39,
+	0x0b, 0x75, 0x81, 0xe9, 0xa6, 0x31, 0xc0, 0x6a, 0x85, 0xbd, 0x93, 0xbb, 0x28, 0xc5, 0x23, 0xec,
+	0x7a, 0x96, 0x63, 0xab, 0x55, 0x4e, 0x51, 0x34, 0x29, 0x45, 0x8f, 0x50, 0xb9, 0x2d, 0x71, 0x8a,
+	0xac, 0xc1, 0xe6, 0xe9, 0x5b, 0x86, 0xa7, 0x2e, 0x8b, 0x79, 0x68, 0x43, 0xfb, 0x70, 0x09, 0x8e,
+	0xc9, 0x6b, 0x78, 0x80, 0xde, 0x04, 0x60, 0x4b, 0x33, 0xc0, 0x96, 0x67, 0x82, 0xad, 0x44, 0xc1,
+	0x9e, 0x85, 0xba, 0x89, 0xbd, 0x8e, 0x6b, 0x31, 0x2d, 0x11, 0x4b, 0x91, 0xbb, 0xe8, 0x9c, 0x7d,
+	0x7c, 0x84, 0xfb, 0xfe, 0x72, 0x58, 0x83, 0x52, 0xf4, 0x3a, 0x3d, 0x3c, 0x60, 0x0b, 0x62, 0x7a,
+	0x26, 0x9a, 0xca, 0x35, 0xa8, 0x0e, 0x0d, 0xd2, 0xf3, 0x54, 0x60, 0x02, 0xff, 0x76, 0x5a, 0x81,
+	0xdf, 0x36, 0x48, 0x4f, 0xe7, 0x24, 0xa8, 0x38, 0x3d, 0x62, 0x90, 0x91, 0xa7, 0xae, 0x70, 0x71,
+	0xf2, 0x96, 0x82, 0x01, 0x86, 0xae, 0x33, 0xc4, 0x2e, 0xb1, 0xb0, 0xa7, 0xd6, 0xd8, 0x44, 0x97,
+	0xe7, 0x9e, 0x48, 0x66, 0x78, 0xf3, 0x76, 0x40, 0xe7, 0xb2, 0x4d, 0xdc, 0xb1, 0x2e, 0x11, 0xa6,
+	0xc2, 0x20, 0xd6, 0x00, 0x7b, 0xc4, 0x18, 0x0c, 0xd5, 0x3a, 0x17, 0x46, 0xd0, 0xa1, 0xbc, 0x02,
+	0xb5, 0xa1, 0xeb, 0x1c, 0x59, 0x26, 0x76, 0x3d, 0xf5, 0x18, 0xc3, 0x70, 0x71, 0x6e, 0x0c, 0x97,
+	0xf0, 0x10, 0xdb, 0x26, 0xb6, 0x3b, 0xe3, 0x3d, 0xcb, 0x0d, 0xe1, 0xe8, 0x21, 0xc9, 0x50, 0x63,
+	0x56, 0x25, 0x8d, 0xa1, 0x4b, 0xbf, 0xb1, 0xd3, 0x26, 0xae, 0x41, 0x70, 0x77, 0xac, 0xae, 0xe5,
+	0x59, 0x7a, 0x48, 0x47, 0x2c, 0x3d, 0xec, 0x68, 0x9c, 0x87, 0xe3, 0x31, 0xce, 0x28, 0xeb, 0x50,
+	0xbe, 0x87, 0xc7, 0x42, 0x29, 0xe9, 0x23, 0x45, 0x78, 0x64, 0xf4, 0x47, 0xd8, 0x57, 0x47, 0xd6,
+	0x78, 0xa6, 0xf4, 0x34, 0xa2, 0xc3, 0x63, 0xd4, 0xd3, 0x0c, 0xd7, 0xfe, 0x88, 0xa0, 0xee, 0x73,
+	0x64, 0xd4, 0xc7, 0x54, 0x0f, 0xdc, 0x51, 0x3f, 0x34, 0x09, 0xd1, 0x52, 0x1a, 0xb0, 0x42, 0x9f,
+	0xf6, 0xc7, 0x43, 0x9f, 0x48, 0xd0, 0xa6, 0xc2, 0x33, 0x08, 0x71, 0xad, 0x83, 0x11, 0xf1, 0x6d,
+	0x22, 0xec, 0x60, 0x0e, 0xc1, 0x20, 0x04, 0xbb, 0x81, 0x45, 0x88, 0xe6, 0x1c, 0x16, 0x11, 0x51,
+	0x8b, 0xa5, 0x98, 0x5a, 0x68, 0xef, 0x23, 0x38, 0xbd, 0x6d, 0x9a, 0xb7, 0xdc, 0x3b, 0x43, 0xd3,
+	0x20, 0x58, 0x5e, 0x86, 0x0c, 0x17, 0xcd, 0x82, 0x5b, 0x9a, 0x01, 0xb7, 0x3c, 0x13, 0x6e, 0x65,
+	0x02, 0xae, 0xf6, 0x69, 0xc8, 0x4c, 0x6a, 0x5b, 0x8a, 0x02, 0x15, 0x6a, 0x5d, 0x02, 0x01, 0x7b,
+	0x56, 0x5e, 0x81, 0x15, 0xa1, 0xf7, 0x63, 0xe1, 0xa8, 0x77, 0xb2, 0xd8, 0xad, 0x6f, 0x4d, 0x42,
+	0xa1, 0x02, 0x9a, 0x8d, 0x67, 0x61, 0x35, 0xf2, 0x2a, 0x95, 0x36, 0xfc, 0x06, 0xc1, 0x4a, 0xb0,
+	0x55, 0x5d, 0x83, 0x4a, 0xc7, 0x31, 0x39, 0xff, 0xd6, 0x52, 0x6c, 0x27, 0x3e, 0x81, 0x66, 0xcb,
+	0x31, 0xb1, 0xce, 0x68, 0x50, 0xae, 0x0e, 0xc4, 0x1e, 0x2b, 0x76, 0x05, 0xd1, 0xd4, 0xbe, 0x09,
+	0x15, 0xfa, 0x3f, 0xa5, 0x0e, 0xcb, 0x77, 0x6e, 0x5e, 0xbf, 0x79, 0xeb, 0xee, 0xcd, 0xf5, 0xff,
+	0xa3, 0x8d, 0xf6, 0x9d, 0x56, 0xeb, 0x72, 0xbb, 0xbd, 0x8e, 0x94, 0x15, 0xa8, 0x3c, 0xbf, 0xbd,
+	0x7b, 0x63, 0xbd, 0xa4, 0xfd, 0x1e, 0xc1, 0xc9, 0x2b, 0x98, 0x5c, 0x7e, 0xd3, 0xf2, 0x08, 0xb6,
+	0x3b, 0xd8, 0xdf, 0x8a, 0x15, 0xa8, 0x90, 0x50, 0xd2, 0xec, 0xb9, 0x00, 0x07, 0x1e, 0xd9, 0x30,
+	0xaa, 0xf1, 0x0d, 0xa3, 0x01, 0x2b, 0xdc, 0x2f, 0xef, 0x9a, 0x42, 0x53, 0x83, 0xb6, 0xf6, 0x31,
+	0x82, 0x8d, 0x28, 0xee, 0x62, 0xa2, 0x81, 0x08, 0xc2, 0xd2, 0x2c, 0x84, 0xe5, 0x18, 0xc2, 0x2e,
+	0x6c, 0xb4, 0x5c, 0x2c, 0x19, 0x91, 0xe0, 0xec, 0x2d, 0x58, 0x16, 0x04, 0x04, 0xbe, 0x27, 0x32,
+	0x39, 0x40, 0xdd, 0xa7, 0xa2, 0xbd, 0x83, 0xe0, 0x54, 0x6c, 0xa6, 0x2f, 0x81, 0x17, 0xda, 0x35,
+	0xd8, 0xb8, 0x84, 0xfb, 0x78, 0x62, 0xbd, 0x0f, 0x0c, 0x0a, 0x0e, 0x1d, 0xb7, 0xc3, 0x75, 0x78,
+	0x45, 0xe7, 0x0d, 0xed, 0x10, 0x4e, 0xc5, 0x68, 0x15, 0xb2, 0x22, 0xed, 0x71, 0x38, 0x11, 0x46,
+	0x95, 0x73, 0x01, 0xd6, 0x7e, 0x87, 0x40, 0x91, 0xc7, 0x14, 0xc3, 0x6a, 0x49, 0x49, 0x4a, 0x0b,
+	0x51, 0x92, 0x0d, 0x19, 0xb5, 0x27, 0x96, 0xaa, 0xfd, 0x81, 0x5b, 0x7f, 0xd8, 0x5d, 0xcc, 0x6a,
+	0xbe, 0x0b, 0x2b, 0xfe, 0x09, 0x51, 0x38, 0xe8, 0x8c, 0xcb, 0x09, 0xc8, 0x68, 0xff, 0x41, 0x70,
+	0x26, 0xb2, 0x47, 0x51, 0x0f, 0xed, 0xcd, 0xa7, 0x73, 0x6e, 0x24, 0x00, 0xe3, 0x80, 0xf4, 0xb9,
+	0x01, 0x4d, 0x9d, 0x75, 0x56, 0x34, 0x96, 0x33, 0x24, 0xd1, 0xee, 0x41, 0x23, 0x69, 0xde, 0x62,
+	0xac, 0xe2, 0x49, 0xf9, 0x80, 0x46, 0xf7, 0x7e, 0x6f, 0x6e, 0xd3, 0xd8, 0x9c, 0x18, 0x58, 0x8c,
+	0x46, 0x5d, 0x83, 0x2a, 0x0d, 0x3e, 0x7c, 0xe9, 0xa5, 0x8e, 0xd3, 0x29, 0x38, 0x9d, 0x93, 0xd0,
+	0xee, 0x23, 0x50, 0x27, 0xc2, 0x9d, 0xf9, 0x34, 0x29, 0x0c, 0xed, 0x4a, 0x91, 0xd0, 0xae, 0x0d,
+	0x15, 0xfa, 0xc4, 0xf6, 0x84, 0xfa, 0xd6, 0x85, 0xb9, 0xd1, 0x25, 0x87, 0x5e, 0x3a, 0x23, 0xa6,
+	0xbd, 0x16, 0xd3, 0x78, 0x0e, 0xb3, 0x18, 0x15, 0xf8, 0x39, 0x8f, 0x03, 0x53, 0xeb, 0x80, 0x72,
+	0x27, 0x2a, 0x98, 0xdc, 0x4b, 0x17, 0x32, 0x7a, 0x1b, 0xc1, 0xe6, 0x04, 0x9e, 0x62, 0x54, 0x4b,
+	0x85, 0x65, 0x9d, 0x49, 0x91, 0xaf, 0xa1, 0xa6, 0xfb, 0x4d, 0xad, 0x0d, 0x67, 0xa2, 0xbb, 0xd2,
+	0xfc, 0x6c, 0x51, 0x61, 0xd9, 0x8d, 0x12, 0x15, 0x4d, 0x6a, 0xd9, 0x49, 0x44, 0x8b, 0x11, 0xeb,
+	0x13, 0x70, 0x2a, 0x34, 0xd0, 0x7d, 0xa3, 0x3b, 0xa7, 0x61, 0xff, 0x17, 0xc9, 0x1e, 0x81, 0x8f,
+	0x2b, 0x86, 0xf9, 0xdf, 0x87, 0x0a, 0x31, 0xba, 0xbe, 0xf6, 0xec, 0xce, 0x4d, 0x2a, 0x19, 0x5d,
+	0x93, 0x36, 0xb8, 0x2f, 0x66, 0x64, 0x1b, 0x4f, 0x41, 0x2d, 0xe8, 0x4a, 0xe5, 0x7f, 0x5f, 0x85,
+	0xcd, 0x88, 0x6e, 0xee, 0x1b, 0xdd, 0xf9, 0x04, 0x2f, 0x26, 0x29, 0x25, 0x4c, 0x52, 0x96, 0x26,
+	0xd1, 0xac, 0x98, 0x0f, 0x62, 0x13, 0x14, 0xa3, 0x04, 0x7f, 0x47, 0x70, 0x2a, 0xb4, 0xa5, 0xb9,
+	0xb5, 0x40, 0x79, 0x39, 0x22, 0x9b, 0xab, 0x69, 0x2c, 0x7b, 0x72, 0xae, 0xc5, 0x89, 0xa6, 0x2b,
+	0x7b, 0xaa, 0x02, 0x75, 0x53, 0xbb, 0x01, 0x6a, 0xc4, 0x52, 0xe7, 0xe7, 0x9c, 0x02, 0x95, 0x7b,
+	0x78, 0xec, 0x9b, 0x3e, 0x7b, 0xa6, 0xde, 0x3c, 0x81, 0x5a, 0x31, 0xc8, 0xc7, 0x50, 0xbf, 0x8a,
+	0x8d, 0x3e, 0xe9, 0xb5, 0x7a, 0xb8, 0x73, 0x8f, 0xc2, 0x19, 0xf8, 0xa7, 0xd0, 0x9a, 0xce, 0x9e,
+	0xd9, 0xb9, 0xda, 0x71, 0x79, 0x82, 0xb1, 0xaa, 0xb3, 0x67, 0x7a, 0xba, 0xb1, 0x6c, 0x82, 0xdd,
+	0x23, 0xa3, 0xcf, 0x94, 0xb5, 0xaa, 0x07, 0x6d, 0x2a, 0x0f, 0x96, 0x35, 0x60, 0x27, 0xba, 0xaa,
+	0xce, 0x1b, 0x54, 0x6e, 0x23, 0xb7, 0x2f, 0x4e, 0x72, 0xf4, 0x51, 0xfb, 0xac, 0x02, 0x1b, 0x72,
+	0x08, 0xe7, 0x27, 0x9a, 0x63, 0x59, 0x64, 0x34, 0x91, 0x45, 0x9e, 0x7d, 0xf0, 0x7a, 0x08, 0x6a,
+	0xd8, 0x36, 0x87, 0x8e, 0x65, 0x13, 0x4f, 0x2d, 0x33, 0xb6, 0x86, 0x1d, 0x14, 0x78, 0xcf, 0xf1,
+	0x88, 0x94, 0xfd, 0x0c, 0xda, 0x52, 0x56, 0xae, 0x1a, 0xc9, 0xca, 0x0d, 0x22, 0x41, 0xe1, 0x12,
+	0xd3, 0xf1, 0xbd, 0x4c, 0x51, 0xaa, 0xbf, 0xc4, 0x99, 0xd9, 0xb9, 0x17, 0xa0, 0xde, 0x0b, 0x45,
+	0xc2, 0xf2, 0xaa, 0x69, 0xc2, 0x18, 0x49, 0x9c, 0xba, 0x4c, 0x28, 0x9a, 0xde, 0x59, 0x89, 0x67,
+	0xfd, 0x5e, 0x85, 0x35, 0xd3, 0x20, 0x46, 0x0b, 0x53, 0x31, 0xee, 0xda, 0x87, 0x8e, 0x5a, 0x63,
+	0x13, 0x3f, 0x35, 0x7f, 0xea, 0x2f, 0x32, 0x5c, 0x8f, 0x91, 0x0b, 0xd3, 0xc7, 0x20, 0xa5, 0x8f,
+	0xf3, 0x06, 0xbf, 0x07, 0xb0, 0x16, 0x9d, 0x96, 0x6a, 0xab, 0x4d, 0x85, 0x2b, 0x34, 0xd8, 0x16,
+	0x82, 0xa5, 0x48, 0x1d, 0x3b, 0x88, 0xc5, 0x58, 0x4b, 0x79, 0x18, 0x56, 0x8d, 0x23, 0xc3, 0xea,
+	0x1b, 0x07, 0x7d, 0xfc, 0x92, 0x63, 0xfb, 0x7e, 0x37, 0xda, 0xa9, 0xdd, 0x85, 0xcd, 0x24, 0x19,
+	0x5e, 0xc7, 0xe3, 0x7c, 0x9a, 0xaa, 0x11, 0xd8, 0xd4, 0x19, 0x03, 0x29, 0x74, 0x3e, 0xc6, 0x77,
+	0x1a, 0x2f, 0x52, 0xfb, 0xe2, 0x5d, 0xc2, 0xca, 0xcf, 0xe7, 0x52, 0x38, 0x3d, 0x20, 0xa7, 0xfd,
+	0x14, 0x81, 0x3a, 0x39, 0x6d, 0x31, 0x7b, 0xf6, 0x83, 0x2e, 0xc7, 0x5e, 0x84, 0x33, 0x77, 0x6c,
+	0x77, 0x0a, 0x0f, 0xf2, 0xdd, 0xbb, 0xd1, 0x63, 0x51, 0x02, 0xe9, 0x62, 0xbc, 0xe8, 0x6d, 0x58,
+	0x0f, 0xee, 0xf8, 0x16, 0x03, 0xff, 0x00, 0x4e, 0x48, 0x14, 0x8b, 0x41, 0xfd, 0x37, 0x04, 0x1b,
+	0xcf, 0x5b, 0xb6, 0xe9, 0x73, 0x27, 0xd8, 0xb2, 0x1e, 0x85, 0x13, 0x1d, 0xc7, 0xf6, 0x46, 0x03,
+	0xec, 0xb6, 0x63, 0x4b, 0x98, 0x7c, 0x91, 0x39, 0xf7, 0x77, 0x16, 0xea, 0x22, 0xd9, 0x47, 0x03,
+	0x5b, 0x3f, 0xc3, 0x2b, 0x75, 0xb1, 0x4c, 0x23, 0x0d, 0x2b, 0xaa, 0x7c, 0x73, 0xa4, 0xcf, 0xc9,
+	0xb7, 0x50, 0xda, 0x5f, 0x11, 0x9c, 0x8a, 0x2d, 0xa5, 0x18, 0x8d, 0xfe, 0xde, 0xe4, 0x35, 0x6b,
+	0x4e, 0xcb, 0x94, 0x6e, 0x5b, 0x3f, 0x47, 0x2c, 0x08, 0xbf, 0x65, 0xe3, 0xb8, 0x2d, 0xa4, 0x93,
+	0xc8, 0xa3, 0x70, 0xc2, 0xbf, 0x6e, 0x69, 0xc7, 0xdc, 0xcf, 0xe4, 0x0b, 0xa5, 0x09, 0x8a, 0xdf,
+	0xb9, 0x1b, 0xaa, 0x24, 0x17, 0x58, 0xc2, 0x9b, 0x40, 0x2a, 0x95, 0x24, 0xa9, 0x54, 0x65, 0xa9,
+	0xfc, 0x85, 0x1f, 0x0e, 0x22, 0xeb, 0x29, 0x46, 0x2c, 0xb2, 0xbf, 0x2c, 0x2d, 0xd6, 0x5f, 0x7e,
+	0xc4, 0x13, 0x61, 0x39, 0x8d, 0x24, 0x9d, 0x48, 0x7c, 0x16, 0x97, 0x93, 0x58, 0x5c, 0x89, 0xb1,
+	0x78, 0x23, 0x8a, 0xee, 0x2b, 0xa8, 0xf7, 0x1e, 0xfc, 0x3f, 0x3f, 0xe1, 0xf8, 0x2f, 0xdb, 0x2c,
+	0xf0, 0x5a, 0x88, 0x27, 0x95, 0xa2, 0xba, 0xb2, 0x1c, 0xd5, 0x69, 0x03, 0x78, 0x28, 0x79, 0xd2,
+	0x62, 0x9c, 0xed, 0xfb, 0x25, 0x3f, 0x4f, 0xe7, 0xcf, 0x97, 0x22, 0x2d, 0xf9, 0xa0, 0x35, 0x7a,
+	0x91, 0x08, 0xb5, 0xcc, 0xc4, 0xd3, 0x4e, 0x99, 0xb6, 0x4c, 0x82, 0x55, 0x64, 0xde, 0xb2, 0x1f,
+	0x17, 0x7a, 0xa1, 0x89, 0xcb, 0x73, 0xb0, 0x71, 0xd7, 0x20, 0x9d, 0x5e, 0xdc, 0xb1, 0x3e, 0x0c,
+	0xab, 0x1e, 0xee, 0x1f, 0xc6, 0x2d, 0x38, 0xda, 0xa9, 0xdd, 0x2f, 0xc1, 0xa9, 0xd8, 0xf0, 0x62,
+	0xcc, 0xec, 0x34, 0x2c, 0x19, 0x1d, 0x22, 0x45, 0xaa, 0xbc, 0xa5, 0x5c, 0xe3, 0x8c, 0xe5, 0x49,
+	0xc3, 0xa7, 0x33, 0x19, 0xde, 0x75, 0x3c, 0xe6, 0x22, 0x91, 0x7d, 0x65, 0x65, 0xb1, 0xbe, 0xf2,
+	0x06, 0xac, 0x5f, 0xc1, 0xa4, 0xcd, 0xee, 0xb9, 0xe6, 0xd3, 0x6c, 0xf9, 0x9a, 0xac, 0x14, 0xbb,
+	0x26, 0xfb, 0x01, 0xbf, 0x82, 0x11, 0xd4, 0x0a, 0x63, 0x38, 0x9f, 0xcf, 0x67, 0x38, 0x6f, 0x69,
+	0xb7, 0xe0, 0xa4, 0x38, 0x83, 0x2f, 0x68, 0x31, 0x38, 0xb8, 0x03, 0x2b, 0x72, 0x3d, 0x5a, 0x17,
+	0x4e, 0xee, 0x39, 0xa6, 0x75, 0x38, 0x5e, 0x10, 0x6e, 0x89, 0x41, 0xe5, 0x08, 0x83, 0x30, 0x6c,
+	0x44, 0x27, 0x2a, 0x66, 0x3d, 0x6f, 0x21, 0x38, 0xc3, 0x6f, 0x30, 0x83, 0xca, 0x12, 0x2b, 0xdc,
+	0x83, 0x4d, 0x38, 0x66, 0x4a, 0xdd, 0xa2, 0x20, 0xf0, 0x62, 0x0a, 0x75, 0x96, 0x6a, 0x54, 0xc2,
+	0xd2, 0x15, 0x3d, 0x42, 0x95, 0x62, 0xd8, 0x9c, 0x52, 0xd7, 0x12, 0x06, 0xbf, 0x68, 0x46, 0xf0,
+	0x5b, 0x9a, 0x79, 0xf1, 0x5d, 0x9e, 0x52, 0x66, 0x15, 0xd9, 0xe7, 0xff, 0x89, 0xe8, 0x29, 0x34,
+	0x11, 0xad, 0xf2, 0x32, 0xac, 0xf8, 0x01, 0x87, 0x60, 0x79, 0xfe, 0x7a, 0x9d, 0x80, 0x62, 0xb4,
+	0x1c, 0xa8, 0xb4, 0xf0, 0x72, 0x20, 0x7a, 0x50, 0x4b, 0x12, 0x70, 0x91, 0xf7, 0x57, 0x49, 0xaa,
+	0x34, 0x3b, 0xcd, 0xfd, 0x67, 0x04, 0x8d, 0x2b, 0x98, 0xb4, 0x1c, 0xfb, 0x0b, 0x40, 0xa9, 0xb4,
+	0x27, 0x59, 0x9e, 0xf1, 0x56, 0x54, 0xe2, 0xb3, 0x58, 0xc2, 0x6d, 0xd7, 0xf9, 0x82, 0x96, 0xe0,
+	0x6b, 0x50, 0xde, 0x25, 0x04, 0x74, 0xb4, 0x7f, 0x97, 0xe0, 0xb8, 0xe8, 0xbe, 0x75, 0x44, 0x7f,
+	0xf1, 0x1b, 0xca, 0x8b, 0x70, 0x6c, 0x20, 0xfe, 0x6e, 0x1d, 0xe5, 0x2d, 0x9c, 0x88, 0x90, 0x2a,
+	0x34, 0xe6, 0x55, 0x5e, 0x90, 0x42, 0xfc, 0x0c, 0x55, 0x49, 0xfe, 0xfa, 0x17, 0x97, 0x2c, 0xdf,
+	0x86, 0x3a, 0x77, 0xe5, 0xbb, 0xf6, 0xa1, 0xe3, 0x45, 0xf6, 0x04, 0x34, 0x75, 0x4f, 0x88, 0x6e,
+	0x9a, 0xff, 0xaa, 0xc2, 0x6a, 0xa4, 0xbc, 0xf5, 0x2b, 0x2c, 0x9d, 0xba, 0x17, 0x32, 0x43, 0x08,
+	0x29, 0xc5, 0x55, 0x72, 0x38, 0x56, 0x97, 0x09, 0x85, 0x97, 0xd3, 0x95, 0xdc, 0x97, 0xd3, 0x51,
+	0x2f, 0x51, 0x5d, 0x8c, 0x97, 0x88, 0xda, 0xed, 0xd2, 0x62, 0xec, 0x56, 0xd9, 0x17, 0xba, 0xbe,
+	0x9c, 0x72, 0xf7, 0x88, 0xe8, 0x52, 0x5c, 0xd3, 0x95, 0x2d, 0xd8, 0x18, 0x48, 0x13, 0xbe, 0xc0,
+	0xf7, 0x4f, 0x4f, 0x5d, 0x61, 0x87, 0xe6, 0xc4, 0x77, 0xd9, 0xad, 0xe3, 0x13, 0x04, 0x6a, 0x78,
+	0x93, 0x28, 0x8a, 0xb7, 0x0b, 0xf2, 0x9d, 0xb7, 0xe3, 0x15, 0x3e, 0x59, 0x8b, 0xcb, 0x83, 0x12,
+	0x9f, 0x6b, 0xa0, 0x5c, 0xc2, 0xfd, 0x58, 0x89, 0x0f, 0x3d, 0x55, 0x06, 0x3b, 0x9c, 0x5f, 0x56,
+	0x2f, 0xf5, 0x4c, 0x29, 0xc0, 0xd2, 0xa3, 0xb4, 0xbc, 0x21, 0x4b, 0xbb, 0x47, 0x2b, 0xfb, 0x51,
+	0xbc, 0xb2, 0xff, 0x01, 0x99, 0xf0, 0x3f, 0x21, 0x16, 0x6e, 0x17, 0x5d, 0x6c, 0x74, 0x77, 0xa2,
+	0xd8, 0xe8, 0xd9, 0x14, 0x91, 0x4c, 0x7c, 0xcd, 0x61, 0xc9, 0xd1, 0xd6, 0xbb, 0x6a, 0x50, 0x8a,
+	0xda, 0x22, 0x6e, 0x5f, 0x79, 0x07, 0x41, 0x15, 0xbf, 0x69, 0x79, 0x44, 0x39, 0x97, 0xe6, 0x9e,
+	0x3a, 0x5e, 0x6a, 0xd9, 0x38, 0x9f, 0x71, 0xb4, 0x58, 0xef, 0x8f, 0x11, 0x2c, 0x75, 0x58, 0x6c,
+	0xa5, 0xcc, 0x4f, 0x29, 0xa9, 0x32, 0xb1, 0xf1, 0x5c, 0xd6, 0xe1, 0x12, 0x12, 0x93, 0x1d, 0x7f,
+	0x52, 0x20, 0x49, 0xaa, 0x19, 0x4c, 0x81, 0x24, 0xb9, 0x4c, 0xf0, 0x2d, 0x04, 0x4b, 0x5d, 0x96,
+	0x93, 0x54, 0x9e, 0xc9, 0x50, 0x43, 0xe0, 0xc3, 0x78, 0x36, 0xd3, 0x58, 0x81, 0xe1, 0x27, 0x08,
+	0xea, 0xdd, 0xb0, 0xb6, 0x4e, 0xc9, 0x42, 0xcc, 0xb7, 0xe2, 0xc6, 0xb9, 0x6c, 0x83, 0x05, 0x94,
+	0x8f, 0x10, 0xac, 0x8f, 0x58, 0x1a, 0x26, 0xcc, 0xe5, 0x28, 0x3b, 0xf9, 0x2b, 0xde, 0x1a, 0xad,
+	0x5c, 0x34, 0x04, 0xba, 0x9f, 0x21, 0x58, 0x36, 0x4c, 0x93, 0x5d, 0x06, 0x5c, 0xc8, 0x50, 0x55,
+	0x20, 0x97, 0xe1, 0x34, 0x2e, 0x66, 0x27, 0x20, 0xc1, 0xe9, 0x62, 0x92, 0x12, 0x4e, 0x72, 0xc1,
+	0x5c, 0x0a, 0x38, 0xd3, 0x0a, 0xe7, 0x7e, 0x85, 0x00, 0xb8, 0xec, 0x18, 0xa2, 0xed, 0x6c, 0x1c,
+	0x97, 0x4a, 0xda, 0x1a, 0x3b, 0x79, 0x48, 0x08, 0x54, 0xbf, 0x46, 0x00, 0xdc, 0xd4, 0x19, 0xaa,
+	0x9d, 0x8c, 0xf6, 0x2a, 0xb3, 0xaa, 0x95, 0x8b, 0x86, 0xc0, 0xf5, 0x2e, 0xd7, 0x25, 0xba, 0xfd,
+	0x2b, 0xcf, 0xe5, 0xab, 0x50, 0x69, 0x5c, 0xc8, 0x3c, 0x5e, 0x02, 0xd3, 0xc5, 0x24, 0x25, 0x98,
+	0xc4, 0x02, 0xad, 0xc6, 0x85, 0x9c, 0xa5, 0x50, 0xca, 0x2f, 0x11, 0xd4, 0xb8, 0x1e, 0xed, 0x1b,
+	0x5d, 0xe5, 0x62, 0x36, 0x1d, 0x08, 0xcb, 0x9e, 0x1a, 0xdb, 0x39, 0x28, 0x48, 0xaa, 0xcd, 0x95,
+	0x88, 0xb1, 0x68, 0x3b, 0x9b, 0x02, 0xc8, 0x5c, 0xda, 0xc9, 0x43, 0x42, 0xa0, 0xfa, 0x11, 0x82,
+	0xd5, 0xae, 0x9f, 0x91, 0x64, 0x61, 0xcf, 0x77, 0x52, 0xf1, 0x5e, 0x4e, 0xc9, 0x35, 0x9e, 0xc9,
+	0x32, 0x54, 0x00, 0x79, 0x0f, 0xc1, 0x31, 0x53, 0xca, 0x26, 0xa6, 0x08, 0x33, 0x12, 0xb2, 0x9a,
+	0x8d, 0xf3, 0x19, 0x47, 0x4b, 0x68, 0x06, 0x52, 0x2e, 0x30, 0x05, 0x9a, 0x84, 0x5c, 0x65, 0x0a,
+	0x34, 0x89, 0x09, 0xc8, 0xdf, 0x22, 0xf8, 0x7a, 0x67, 0x22, 0xa1, 0xf4, 0xbc, 0xe3, 0xee, 0x59,
+	0x6e, 0x27, 0xd8, 0x72, 0x77, 0x52, 0x06, 0x34, 0x09, 0x29, 0xa3, 0x14, 0x6e, 0x69, 0x46, 0x82,
+	0xeb, 0x63, 0x04, 0x9b, 0x5d, 0x96, 0x96, 0x61, 0x27, 0x30, 0xf9, 0x3f, 0xe9, 0xf6, 0x98, 0x7c,
+	0x08, 0x67, 0x64, 0x86, 0x04, 0xc2, 0x96, 0x38, 0xce, 0x7d, 0x89, 0x08, 0xa7, 0xa5, 0xdf, 0xde,
+	0x43, 0xb0, 0x66, 0xca, 0x56, 0x9b, 0x26, 0xa4, 0x9a, 0x3c, 0x18, 0x35, 0xce, 0x65, 0x1b, 0xcc,
+	0xd1, 0x6c, 0x7d, 0x5e, 0x87, 0x93, 0xb1, 0xd4, 0x02, 0x3b, 0x14, 0xfc, 0x02, 0xd1, 0xd3, 0x0c,
+	0x2f, 0x48, 0x49, 0xe1, 0x65, 0xa7, 0x94, 0x08, 0xa5, 0xf0, 0xb2, 0x53, 0xab, 0x7d, 0xe8, 0x56,
+	0x3d, 0x0a, 0x8a, 0x64, 0xd2, 0x84, 0x7d, 0xd3, 0x8a, 0x76, 0xd2, 0x84, 0x7d, 0xd3, 0xab, 0x73,
+	0xde, 0x46, 0x50, 0xeb, 0xf9, 0xd5, 0x2f, 0x29, 0x7c, 0x6c, 0xbc, 0x06, 0x27, 0x85, 0x8f, 0x9d,
+	0x2c, 0xb6, 0xf9, 0x21, 0x82, 0xca, 0xa1, 0x65, 0x9b, 0x29, 0x0e, 0x2c, 0x49, 0xc5, 0x34, 0x29,
+	0x0e, 0x2c, 0xc9, 0x05, 0x2c, 0xd4, 0xbb, 0x76, 0xa5, 0x1b, 0xfe, 0x74, 0x47, 0xca, 0x09, 0x38,
+	0xe7, 0x33, 0x8e, 0x16, 0x68, 0x3e, 0x40, 0xb0, 0xd6, 0x8d, 0x94, 0x74, 0xa4, 0x8b, 0x5f, 0x26,
+	0x6b, 0x5b, 0xd2, 0xc5, 0x2f, 0x49, 0xb5, 0x24, 0x1f, 0x21, 0x38, 0xc6, 0xe3, 0x17, 0x7e, 0x85,
+	0xaf, 0x5c, 0xca, 0x78, 0xf5, 0x1d, 0x29, 0x3b, 0x68, 0x5c, 0xce, 0x49, 0x45, 0xa0, 0xbb, 0x8f,
+	0x40, 0x1d, 0x4d, 0x5c, 0x74, 0x8b, 0x93, 0x56, 0x6b, 0x01, 0x97, 0xf4, 0x8d, 0x4b, 0xf9, 0x88,
+	0x84, 0x87, 0xd2, 0xea, 0x1b, 0x06, 0xe9, 0xf4, 0x52, 0x28, 0x7c, 0xd2, 0x95, 0x7a, 0x0a, 0x85,
+	0x4f, 0xbc, 0x52, 0x7f, 0x0c, 0x31, 0x95, 0xef, 0x49, 0xdf, 0xcc, 0x50, 0xb2, 0x7d, 0xe2, 0x23,
+	0xbd, 0xca, 0x27, 0x7d, 0xa8, 0x63, 0xeb, 0xd3, 0x12, 0x9c, 0xb8, 0xe2, 0x1c, 0x61, 0xd7, 0x96,
+	0x53, 0x3c, 0x1f, 0x20, 0x58, 0xef, 0xc6, 0x12, 0x82, 0xb9, 0x32, 0x0a, 0xdb, 0x19, 0xc6, 0xc6,
+	0xf2, 0x90, 0x1f, 0x22, 0x38, 0xde, 0x8d, 0x7e, 0x0a, 0x23, 0xd3, 0x39, 0x55, 0xfe, 0xf2, 0x46,
+	0xa6, 0x73, 0x6a, 0xe4, 0x2b, 0x1c, 0x3b, 0x8f, 0xc1, 0xbc, 0x5f, 0x7d, 0x79, 0xa9, 0xca, 0xbe,
+	0x12, 0x73, 0xb0, 0xc4, 0x7e, 0xbe, 0xf5, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x66, 0xb0, 0xdd,
+	0xeb, 0x3e, 0x46, 0x00, 0x00,
 }
diff --git a/server/core/proto/services.proto b/server/core/proto/services.proto
index fe0a31d..164af71 100644
--- a/server/core/proto/services.proto
+++ b/server/core/proto/services.proto
@@ -30,6 +30,7 @@
     rpc createDependenciesForMircServices (CreateDependenciesRequest) returns (CreateDependenciesResponse);
     rpc getProviderDependencies (GetDependenciesRequest) returns (GetProDependenciesResponse);
     rpc getConsumerDependencies (GetDependenciesRequest) returns (GetConDependenciesResponse);
+    rpc deleteServices (DelServicesRequest) returns (DelServicesResponse);
 }
 
 service ServiceInstanceCtrl {
@@ -506,3 +507,23 @@
     Response response = 1;
     ServiceDetail service = 2;
 }
+
+
+
+//删除服务请求
+message DelServicesRequest {
+    repeated string serviceIds = 1;
+    bool  force = 2;
+}
+//删除服务响应内容
+message DelServicesRspInfo {
+    string  errMessage = 1;
+    string  serviceId = 2;
+}
+
+//删除服务响应
+message DelServicesResponse {
+    Response response = 1;
+    repeated DelServicesRspInfo  services = 2;
+}
+
diff --git a/server/core/swagger/services.yaml b/server/core/swagger/services.yaml
index bc1f24d..979627c 100644
--- a/server/core/swagger/services.yaml
+++ b/server/core/swagger/services.yaml
@@ -170,6 +170,30 @@
           description: 内部错误
           schema:
             type: string
+    delete:
+      description: |
+        批量删除指定的微服务定义及其相关信息,同时注销其所有实例信息。
+      operationId: deleteServices
+      parameters:
+        - name: serviceIds
+          in: body
+          description: 批量删除服务的服务ID列表
+          required: true
+          schema:
+            $ref: '#/definitions/DelServicesRequest'
+      tags:
+        - microservices
+      responses:
+        200:
+          description: 更新成功
+        400:
+          description: 错误的请求
+          schema:
+            $ref: '#/definitions/DelServicesResponse'
+        500:
+          description: 内部错误
+          schema:
+            type: string
   /registry/v3/microservices/{serviceId}/properties:
     put:
       description: |
@@ -1571,4 +1595,33 @@
         type: string
       errMessage:
         description: 错误信息,成功为空,不成功,则为错误,在部分成功的场景使用
+        type: string
+        
+  DelServicesRequest:
+    type: object
+    properties:
+      serviceIds:
+        type: array
+        items:
+          type: string
+      force:
+        description: 不传即默认为false。 强制删除,则与该服务相关的信息删除,非强制删除: 如果作为该被依赖(作为provider,提供服务,且不是只存在自依赖)或者存在实例,则不能删除,其它均删除。
+        type: string
+        
+  DelServicesResponse:
+    type: object
+    properties:
+      services:
+        type: array
+        items:
+          $ref: "#/definitions/DelServicesRspInfo"
+        
+  DelServicesRspInfo:
+    type: object
+    properties:
+      serviceId:
+        description: 微服务id
+        type: string
+      errMessage:
+        description: 错误信息,成功为空,不成功,则为错误,在部分成功的场景使用
         type: string
\ No newline at end of file
diff --git a/server/rest/microservice_controller.go b/server/rest/microservice_controller.go
index a8b8434..ae0f0f6 100644
--- a/server/rest/microservice_controller.go
+++ b/server/rest/microservice_controller.go
@@ -42,6 +42,7 @@
 		{rest.HTTP_METHOD_PUT, "/registry/v3/dependencies", this.CreateDependenciesForMicroServices},
 		{rest.HTTP_METHOD_GET, "/registry/v3/microservices/:consumerId/providers", this.GetConProDependencies},
 		{rest.HTTP_METHOD_GET, "/registry/v3/microservices/:providerId/consumers", this.GetProConDependencies},
+		{rest.HTTP_METHOD_DELETE, "/registry/v3/microservices", this.UnregisterServices},
 	}
 }
 
@@ -278,3 +279,41 @@
 	resp.Response = nil
 	WriteJsonObject(http.StatusOK, resp, w)
 }
+
+func (this *MicroServiceService) UnregisterServices(w http.ResponseWriter, r *http.Request) {
+	request_body,err := ioutil.ReadAll(r.Body)
+	if err != nil{
+		util.LOGGER.Error("body ,err",err)
+		WriteText(http.StatusBadRequest, err.Error(), w)
+		return
+	}
+
+	request := &pb.DelServicesRequest{}
+
+	err = json.Unmarshal(request_body, request)
+	if err  != nil {
+		util.LOGGER.Error("unmarshal ,err ", err)
+		WriteText(http.StatusBadRequest, err.Error(), w)
+		return
+	}
+
+	resp, err := ServiceAPI.DeleteServices(r.Context(), request)
+
+	if resp.Response.Code == pb.Response_SUCCESS {
+		WriteText(http.StatusOK, "", w)
+		return
+	}
+	if resp.Services == nil || len(resp.Services) == 0 {
+		WriteText(http.StatusBadRequest, resp.Response.Message, w)
+		return
+	}
+	resp.Response = nil
+	objJson, err := json.Marshal(resp)
+	if err != nil {
+		WriteText(http.StatusInternalServerError, err.Error(), w)
+		return
+	}
+	WriteJson(http.StatusBadRequest, objJson, w)
+	return
+}
+
diff --git a/server/service/microservices.go b/server/service/microservices.go
index 211be5c..26cf1bf 100644
--- a/server/service/microservices.go
+++ b/server/service/microservices.go
@@ -184,6 +184,154 @@
 	}, nil
 }
 
+func (s *ServiceController) DeleteServicePri(ctx context.Context, ServiceId string, force bool) (*pb.Response, error) {
+	tenant := util.ParseTenantProject(ctx)
+
+	service, err := ms.GetServiceByServiceId(ctx, tenant, ServiceId)
+	if err != nil {
+		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: get service failed.", ServiceId)
+		return pb.CreateResponse(pb.Response_FAIL, err.Error()), err
+	}
+
+	if service == nil {
+		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: service not exist.", ServiceId)
+		return  pb.CreateResponse(pb.Response_FAIL, "service not exist"), nil
+	}
+
+	util.LOGGER.Infof("start delete service %s", ServiceId)
+
+	// 强制删除,则与该服务相关的信息删除,非强制删除: 如果作为该被依赖(作为provider,提供服务,且不是只存在自依赖)或者存在实例,则不能删除
+	if !force {
+		keyConDependency := apt.GenerateProviderDependencyKey(tenant, ServiceId, "")
+		services, err := dependency.GetDependencies(ctx, keyConDependency, tenant)
+		if err != nil {
+			util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s:(unforce) inner err, get service dependency failed.", ServiceId)
+			return  pb.CreateResponse(pb.Response_FAIL, "Get dependency info failed."), err
+		}
+		if len(services) > 1 || (len(services) == 1 && services[0].ServiceId != ServiceId) {
+			util.LOGGER.Errorf(nil, "delete microservice failed, serviceId is %s:(unforce) can't delete, other services rely it.", ServiceId)
+			return  pb.CreateResponse(pb.Response_FAIL, "Can not delete this service, other service rely it."), err
+		}
+
+		instancesKey := apt.GenerateInstanceKey(tenant, ServiceId, "")
+		rsp, err := store.Store().Instance().Search(ctx, &registry.PluginOp{
+			Action:     registry.GET,
+			Key:        []byte(instancesKey),
+			WithPrefix: true,
+			CountOnly:  true,
+		})
+		if err != nil {
+			util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s:(unforce) inner err,get instances failed.", ServiceId)
+			return  pb.CreateResponse(pb.Response_FAIL, "Get instance failed."), err
+		}
+
+		if rsp.Count > 0 {
+			util.LOGGER.Errorf(nil, "delete microservice failed, serviceId is %s:(unforce) can't delete, exist instance.", ServiceId)
+			return  pb.CreateResponse(pb.Response_FAIL, "Can not delete this service, exist instance."), err
+		}
+	}
+
+	consumer := &pb.MicroServiceKey{
+		AppId:       service.AppId,
+		ServiceName: service.ServiceName,
+		Version:     service.Version,
+		Alias:       service.Alias,
+		Tenant:      tenant,
+	}
+
+	//refresh msCache consumerCache, ensure that watch can notify consumers when no cache.
+	err = dependency.RefreshDependencyCache(tenant, ServiceId, service)
+	if err != nil {
+		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: inner err, refresh service dependency cache failed.", ServiceId)
+		return  pb.CreateResponse(pb.Response_FAIL, "Refresh dependency cache failed."), err
+	}
+
+	opts := []*registry.PluginOp{
+		{
+			Action: registry.DELETE,
+			Key:    []byte(apt.GenerateServiceIndexKey(consumer)),
+		},
+		{
+			Action: registry.DELETE,
+			Key:    []byte(apt.GenerateServiceAliasKey(consumer)),
+		},
+		{
+			Action: registry.DELETE,
+			Key:    []byte(apt.GenerateServiceKey(tenant, ServiceId)),
+		},
+		{
+			Action: registry.DELETE,
+			Key: []byte(strings.Join([]string{
+				apt.GetServiceRuleRootKey(tenant),
+				ServiceId,
+				"",
+			}, "/")),
+		},
+	}
+
+	//删除依赖规则
+	lock, err := mux.Lock(mux.GLOBAL_LOCK)
+	if err != nil {
+		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: inner err, create lock failed.", ServiceId)
+		return  pb.CreateResponse(pb.Response_FAIL, err.Error()), err
+	}
+	optsTmp, err := dependency.DeleteDependencyForService(ctx, consumer, ServiceId)
+	lock.Unlock()
+	if err != nil {
+		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: inner err, delete dependency failed.", ServiceId)
+		return  pb.CreateResponse(pb.Response_FAIL, err.Error()), err
+	}
+	opts = append(opts, optsTmp...)
+
+	//删除黑白名单
+	rulekey := apt.GenerateServiceRuleKey(tenant, ServiceId, "")
+	opt := &registry.PluginOp{
+		Action:     registry.DELETE,
+		Key:        []byte(rulekey),
+		WithPrefix: true,
+	}
+	opts = append(opts, opt)
+	indexKey := apt.GenerateRuleIndexKey(tenant, ServiceId, "", "")
+	opts = append(opts, &registry.PluginOp{
+		Action: registry.DELETE,
+		Key:    []byte(indexKey),
+	})
+	opts = append(opts, opt)
+
+	//删除shemas
+	schemaKey := apt.GenerateServiceSchemaKey(tenant, ServiceId, "")
+	opt = &registry.PluginOp{
+		Action:     registry.DELETE,
+		Key:        []byte(schemaKey),
+		WithPrefix: true,
+	}
+	opts = append(opts, opt)
+
+	//删除tags
+	tagsKey := apt.GenerateServiceTagKey(tenant, ServiceId)
+	opt = &registry.PluginOp{
+		Action: registry.DELETE,
+		Key:    []byte(tagsKey),
+	}
+	opts = append(opts, opt)
+
+	//删除实例
+	err = serviceUtil.DeleteServiceAllInstances(ctx, ServiceId)
+	if err != nil {
+		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: delete all instances failed.", ServiceId)
+		return  pb.CreateResponse(pb.Response_FAIL, "Delete all instances failed for service."), err
+	}
+
+	_, err = registry.GetRegisterCenter().Txn(ctx, opts)
+	if err != nil {
+		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: commit data into etcd failed.", ServiceId)
+		return  pb.CreateResponse(pb.Response_FAIL, "commit operations failed"), nil
+	}
+
+	util.LOGGER.Infof("delete microservice successful: serviceid is %s,operator is %s.", ServiceId, util.GetIPFromContext(ctx))
+	return pb.CreateResponse(pb.Response_SUCCESS, "unregister service successfully"), nil
+}
+
 func (s *ServiceController) Delete(ctx context.Context, in *pb.DeleteServiceRequest) (*pb.DeleteServiceResponse, error) {
 	if in == nil || len(in.ServiceId) == 0 || in.ServiceId == apt.Service.ServiceId {
 		util.LOGGER.Errorf(nil, "delete microservice failed: service empty.")
@@ -199,176 +347,88 @@
 		}, nil
 	}
 
-	force := in.Force
-	tenant := util.ParseTenantProject(ctx)
+	resp, err := s.DeleteServicePri(ctx, in.ServiceId,in.Force)
 
-	service, err := ms.GetServiceByServiceId(ctx, tenant, in.ServiceId)
-	if err != nil {
-		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: get service failed.", in.ServiceId)
-		return &pb.DeleteServiceResponse{
-			Response: pb.CreateResponse(pb.Response_FAIL, err.Error()),
-		}, err
-	}
-
-	if service == nil {
-		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: service not exist.", in.ServiceId)
-		return &pb.DeleteServiceResponse{
-			Response: pb.CreateResponse(pb.Response_FAIL, "service not exist"),
-		}, nil
-	}
-
-	util.LOGGER.Infof("start delete service %s", in.ServiceId)
-
-	// 强制删除,则与该服务相关的信息删除,非强制删除: 如果作为该被依赖(作为provider,提供服务,且不是只存在自依赖)或者存在实例,则不能删除
-	if !force {
-		keyConDependency := apt.GenerateProviderDependencyKey(tenant, in.ServiceId, "")
-		services, err := dependency.GetDependencies(ctx, keyConDependency, tenant)
-		if err != nil {
-			util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s:(unforce) inner err, get service dependency failed.", in.ServiceId)
-			return &pb.DeleteServiceResponse{
-				Response: pb.CreateResponse(pb.Response_FAIL, "Get dependency info failed."),
-			}, err
-		}
-		if len(services) > 1 || (len(services) == 1 && services[0].ServiceId != in.ServiceId) {
-			util.LOGGER.Errorf(nil, "delete microservice failed, serviceId is %s:(unforce) can't delete, other services rely it.", in.ServiceId)
-			return &pb.DeleteServiceResponse{
-				Response: pb.CreateResponse(pb.Response_FAIL, "Can not delete this service, other service rely it."),
-			}, err
-		}
-
-		instancesKey := apt.GenerateInstanceKey(tenant, in.ServiceId, "")
-		rsp, err := store.Store().Instance().Search(ctx, &registry.PluginOp{
-			Action:     registry.GET,
-			Key:        []byte(instancesKey),
-			WithPrefix: true,
-			CountOnly:  true,
-		})
-		if err != nil {
-			util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s:(unforce) inner err,get instances failed.", in.ServiceId)
-			return &pb.DeleteServiceResponse{
-				Response: pb.CreateResponse(pb.Response_FAIL, "Get instance failed."),
-			}, err
-		}
-
-		if rsp.Count > 0 {
-			util.LOGGER.Errorf(nil, "delete microservice failed, serviceId is %s:(unforce) can't delete, exist instance.", in.ServiceId)
-			return &pb.DeleteServiceResponse{
-				Response: pb.CreateResponse(pb.Response_FAIL, "Can not delete this service, exist instance."),
-			}, err
-		}
-	}
-
-	consumer := &pb.MicroServiceKey{
-		AppId:       service.AppId,
-		ServiceName: service.ServiceName,
-		Version:     service.Version,
-		Alias:       service.Alias,
-		Tenant:      tenant,
-	}
-
-	//refresh msCache consumerCache, ensure that watch can notify consumers when no cache.
-	err = dependency.RefreshDependencyCache(tenant, in.ServiceId, service)
-	if err != nil {
-		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: inner err, refresh service dependency cache failed.", in.ServiceId)
-		return &pb.DeleteServiceResponse{
-			Response: pb.CreateResponse(pb.Response_FAIL, "Refresh dependency cache failed."),
-		}, err
-	}
-
-	opts := []*registry.PluginOp{
-		{
-			Action: registry.DELETE,
-			Key:    []byte(apt.GenerateServiceIndexKey(consumer)),
-		},
-		{
-			Action: registry.DELETE,
-			Key:    []byte(apt.GenerateServiceAliasKey(consumer)),
-		},
-		{
-			Action: registry.DELETE,
-			Key:    []byte(apt.GenerateServiceKey(tenant, in.ServiceId)),
-		},
-		{
-			Action: registry.DELETE,
-			Key: []byte(strings.Join([]string{
-				apt.GetServiceRuleRootKey(tenant),
-				in.ServiceId,
-				"",
-			}, "/")),
-		},
-	}
-
-	//删除依赖规则
-	lock, err := mux.Lock(mux.GLOBAL_LOCK)
-	if err != nil {
-		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: inner err, create lock failed.", in.ServiceId)
-		return &pb.DeleteServiceResponse{
-			Response: pb.CreateResponse(pb.Response_FAIL, err.Error()),
-		}, err
-	}
-	optsTmp, err := dependency.DeleteDependencyForService(ctx, consumer, in.ServiceId)
-	lock.Unlock()
-	if err != nil {
-		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: inner err, delete dependency failed.", in.ServiceId)
-		return &pb.DeleteServiceResponse{
-			Response: pb.CreateResponse(pb.Response_FAIL, err.Error()),
-		}, err
-	}
-	opts = append(opts, optsTmp...)
-
-	//删除黑白名单
-	rulekey := apt.GenerateServiceRuleKey(tenant, in.ServiceId, "")
-	opt := &registry.PluginOp{
-		Action:     registry.DELETE,
-		Key:        []byte(rulekey),
-		WithPrefix: true,
-	}
-	opts = append(opts, opt)
-	indexKey := apt.GenerateRuleIndexKey(tenant, in.ServiceId, "", "")
-	opts = append(opts, &registry.PluginOp{
-		Action: registry.DELETE,
-		Key:    []byte(indexKey),
-	})
-	opts = append(opts, opt)
-
-	//删除shemas
-	schemaKey := apt.GenerateServiceSchemaKey(tenant, in.ServiceId, "")
-	opt = &registry.PluginOp{
-		Action:     registry.DELETE,
-		Key:        []byte(schemaKey),
-		WithPrefix: true,
-	}
-	opts = append(opts, opt)
-
-	//删除tags
-	tagsKey := apt.GenerateServiceTagKey(tenant, in.ServiceId)
-	opt = &registry.PluginOp{
-		Action: registry.DELETE,
-		Key:    []byte(tagsKey),
-	}
-	opts = append(opts, opt)
-
-	//删除实例
-	err = serviceUtil.DeleteServiceAllInstances(ctx, in)
-	if err != nil {
-		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: delete all instances failed.", in.ServiceId)
-		return &pb.DeleteServiceResponse{
-			Response: pb.CreateResponse(pb.Response_FAIL, "Delete all instances failed for service."),
-		}, err
-	}
-
-	_, err = registry.GetRegisterCenter().Txn(ctx, opts)
-	if err != nil {
-		util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: commit data into etcd failed.", in.ServiceId)
-		return &pb.DeleteServiceResponse{
-			Response: pb.CreateResponse(pb.Response_FAIL, "commit operations failed"),
-		}, nil
-	}
-
-	util.LOGGER.Infof("delete microservice successful: serviceid is %s,operator is %s.", in.ServiceId, util.GetIPFromContext(ctx))
 	return &pb.DeleteServiceResponse{
-		Response: pb.CreateResponse(pb.Response_SUCCESS, "unregister service successfully"),
-	}, nil
+		Response:resp,
+	},err
+}
+
+func (s *ServiceController)DeleteServices(ctx context.Context, request *pb.DelServicesRequest)(*pb.DelServicesResponse, error){
+	// 合法性检查
+	if request == nil || request.ServiceIds == nil || len(request.ServiceIds) == 0 {
+		return &pb.DelServicesResponse{
+			Response: pb.CreateResponse(pb.Response_FAIL, "Invalid request param"),
+			Services:nil,
+		},nil
+	}
+
+	existFlag := map[string]bool{}
+	nuoMultilCount := 0
+	// 批量删除服务
+	serviceRespChan := make(chan *pb.DelServicesRspInfo , len(request.ServiceIds))
+	for _, serviceId := range request.ServiceIds{
+		//ServiceId重复性检查
+		if _ ,ok := existFlag[serviceId]; ok {
+			util.LOGGER.Warnf(nil, "delete microservice %s , multiple.", serviceId)
+			continue
+		} else {
+			existFlag[serviceId] = true
+			nuoMultilCount++
+		}
+
+	        serviceRst := &pb.DelServicesRspInfo{
+			ServiceId : serviceId,
+			ErrMessage:"",
+		}
+
+		//检查服务ID合法性
+		in := &pb.DeleteServiceRequest{
+			ServiceId : serviceId,
+			Force : request.Force,
+		}
+		err := apt.Validate(in)
+		if err != nil {
+			util.LOGGER.Errorf(err, "delete microservice failed, serviceId is %s: invalid parameters.", in.ServiceId)
+			serviceRst.ErrMessage = err.Error()
+			serviceRespChan <- serviceRst
+			continue
+		}
+
+		//执行删除服务操作
+		go func(serviceItem string){
+			 resp , err := s.DeleteServicePri(ctx, serviceItem, request.Force)
+			if err != nil {
+				serviceRst.ErrMessage = err.Error()
+			}else if resp.Code != pb.Response_SUCCESS{
+				serviceRst.ErrMessage  = resp.Message
+			}
+
+			serviceRespChan <- serviceRst
+		}(serviceId)
+	}
+
+	//获取批量删除服务的结果
+	count := 0
+	responseCode  := pb.Response_SUCCESS
+        delServiceRspInfo := []*pb.DelServicesRspInfo{}
+	for serviceRespItem := range serviceRespChan{
+		count++
+		if len(serviceRespItem.ErrMessage) != 0{
+			responseCode = pb.Response_FAIL
+		}
+		delServiceRspInfo = append(delServiceRspInfo, serviceRespItem)
+		//结果收集over,关闭通道
+		if count == nuoMultilCount{
+			close(serviceRespChan)
+		}
+	}
+
+	util.LOGGER.Infof("Batch DeleteServices servicid = %v , result = %d, ", request.ServiceIds, responseCode)
+        return &pb.DelServicesResponse{
+		Response: pb.CreateResponse(responseCode, "Delservices"),
+		Services: delServiceRspInfo,
+	},nil
 }
 
 func (s *ServiceController) GetOne(ctx context.Context, in *pb.GetServiceRequest) (*pb.GetServiceResponse, error) {
diff --git a/server/service/microservices_test.go b/server/service/microservices_test.go
index 4a10e28..efa8453 100644
--- a/server/service/microservices_test.go
+++ b/server/service/microservices_test.go
@@ -670,4 +670,158 @@
 			})
 		})
 	})
+
+	Describe("DeleteServices", func() {
+		Context("normal", func() {
+			var serviceId3 string
+			var serviceId4 string
+			var serviceId5 string
+			var serviceId6 string
+			var instanceId6 string
+			// 创建服务4,服务5,服务6,其中服务6创建了实例关系
+			It("批量删除服务,创建依赖的服务4", func() {
+				resp, err := serviceResource.Create(getContext(), &pb.CreateServiceRequest{
+					Service: &pb.MicroService{
+						ServiceName: "test-services-03",
+						Alias:       "ts_03",
+						AppId:       "default_03",
+						Version:     "1.0.0",
+						Level:       "FRONT",
+						Schemas: []string{
+							"xxxxxxxxxx",
+						},
+						Status: "UP",
+					},
+				})
+				Expect(err).To(BeNil())
+				serviceId3 = resp.ServiceId
+				fmt.Println("UT=========ServiceId" + serviceId3)
+				Expect(resp.GetResponse().Code).To(Equal(pb.Response_SUCCESS))
+			})
+
+			It("批量删除服务,创建依赖的服务4", func() {
+				resp, err := serviceResource.Create(getContext(), &pb.CreateServiceRequest{
+					Service: &pb.MicroService{
+						ServiceName: "test-services-04",
+						Alias:       "ts_04",
+						AppId:       "default_04",
+						Version:     "1.0.0",
+						Level:       "FRONT",
+						Schemas: []string{
+							"xxxxxxxxxx",
+						},
+						Status: "UP",
+					},
+				})
+				Expect(err).To(BeNil())
+				serviceId4 = resp.ServiceId
+				fmt.Println("UT=========ServiceId" + serviceId4)
+				Expect(resp.GetResponse().Code).To(Equal(pb.Response_SUCCESS))
+			})
+			It("批量删除服务,创建依赖的服务5", func() {
+				resp, err := serviceResource.Create(getContext(), &pb.CreateServiceRequest{
+					Service: &pb.MicroService{
+						ServiceName: "test-services-05",
+						Alias:       "ts_05",
+						AppId:       "default_05",
+						Version:     "1.0.0",
+						Level:       "FRONT",
+						Schemas: []string{
+							"xxxxxxxx11",
+						},
+						Status: "UP",
+					},
+				})
+				Expect(err).To(BeNil())
+				serviceId5 = resp.ServiceId
+				fmt.Println("UT=========ServiceId5 " + serviceId5)
+				fmt.Printf("TEST CREATE service %d", resp.GetResponse().Code)
+				Expect(resp.GetResponse().Code).To(Equal(pb.Response_SUCCESS))
+			})
+			It("批量删除服务,创建依赖的服务6", func() {
+				resp, err := serviceResource.Create(getContext(), &pb.CreateServiceRequest{
+					Service: &pb.MicroService{
+						ServiceName: "test-services-06",
+						Alias:       "ts_06",
+						AppId:       "default_06",
+						Version:     "1.0.0",
+						Level:       "FRONT",
+						Schemas: []string{
+							"xxxxxxxxxxxxx",
+						},
+						Status: "UP",
+					},
+				})
+				Expect(err).To(BeNil())
+				serviceId6 = resp.ServiceId
+				fmt.Println("UT=========ServiceId" + serviceId6)
+				Expect(resp.GetResponse().Code).To(Equal(pb.Response_SUCCESS))
+			})
+
+			It("批量删除服务,创建依赖的服务6", func() {
+				respReg, err := insResource.Register(getContext(), &pb.RegisterInstanceRequest{
+					Instance: &pb.MicroServiceInstance{
+						ServiceId: serviceId6,
+						Endpoints: []string{
+							"rest:127.0.0.1:8081",
+						},
+						HostName: "UT-HOST",
+						Status:   pb.MSI_UP,
+						Stage:    "prod",
+					},
+				})
+				instanceId6  = respReg.InstanceId
+				Expect(err).To(BeNil())
+				fmt.Println("UT============" + respReg.GetResponse().Message)
+				Expect(respReg.GetResponse().Code).To(Equal(pb.Response_SUCCESS))
+			})
+
+			It("批量删除服务3和服务4", func() {
+				resp, err := serviceResource.DeleteServices(getContext(), &pb.DelServicesRequest{
+					ServiceIds: []string{serviceId3,serviceId4},
+					Force: false ,
+					},
+				)
+				Expect(err).To(BeNil())
+				fmt.Println("UT============" + resp.GetResponse().Message)
+				Expect(resp.GetResponse().Code).To(Equal(pb.Response_SUCCESS))
+			})
+
+			It("批量删除服务5和服务6", func() {
+				resp, err := serviceResource.DeleteServices(getContext(), &pb.DelServicesRequest{
+					ServiceIds: []string{serviceId5,serviceId6},
+					Force: false ,
+				},
+				)
+				Expect(err).To(BeNil())
+				//期待结果失败
+				fmt.Println("UT============" + resp.GetResponse().Message)
+				Expect(resp.GetResponse().Code).To(Equal(pb.Response_FAIL))
+			})
+
+			It("删除服务6的实例,删除服务5和服务6", func() {
+
+				respReg, err := insResource.Unregister(getContext(), &pb.UnregisterInstanceRequest{
+						ServiceId: serviceId6,
+					        InstanceId:instanceId6,
+				})
+
+				Expect(err).To(BeNil())
+				Expect(respReg.GetResponse().Code).To(Equal(pb.Response_SUCCESS))
+
+				resp, err := serviceResource.DeleteServices(getContext(), &pb.DelServicesRequest{
+					ServiceIds: []string{serviceId6},
+					Force: false ,
+				},
+				)
+				Expect(err).To(BeNil())
+				//期待结果失败
+				fmt.Println("UT============" + resp.GetResponse().Message)
+				Expect(resp.GetResponse().Code).To(Equal(pb.Response_SUCCESS))
+			})
+
+
+
+		})
+	})
 })
diff --git a/server/service/util/instance_util.go b/server/service/util/instance_util.go
index 3c6c439..43452d7 100644
--- a/server/service/util/instance_util.go
+++ b/server/service/util/instance_util.go
@@ -136,10 +136,10 @@
 	return false
 }
 
-func DeleteServiceAllInstances(ctx context.Context, in *pb.DeleteServiceRequest) error {
+func DeleteServiceAllInstances(ctx context.Context, ServiceId string) error {
 	tenant := util.ParseTenantProject(ctx)
 
-	instanceLeaseKey := apt.GenerateInstanceLeaseKey(tenant, in.ServiceId, "")
+	instanceLeaseKey := apt.GenerateInstanceLeaseKey(tenant, ServiceId, "")
 	resp, err := store.Store().Lease().Search(ctx, &registry.PluginOp{
 		Action:      registry.GET,
 		Key:         []byte(instanceLeaseKey),