webclient,service: Additional work on TriggerAction Load&Store

This commit is contained in:
MaMe82 2018-10-12 13:51:58 +02:00
parent 0b32635a5e
commit d7f0b8ca98
10 changed files with 769 additions and 380 deletions

View File

@ -5141,11 +5141,14 @@ type P4WNP1Client interface {
StoreDeployedWifiSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error)
ListStoredWifiSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error)
// TriggerActions
ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error)
StoreTriggerActionSet(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*Empty, error)
GetTriggerActionsState(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
GetDeployedTriggerActionSet(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
DeployTriggerActionSetReplace(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
DeployTriggerActionSetAdd(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
DeployTriggerActionSetRemove(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error)
StoreTriggerActionSet(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*Empty, error)
DeployStoredTriggerActionSetReplace(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
DeployStoredTriggerActionSetAdd(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*TriggerActionSet, error)
}
type p4WNP1Client struct {
@ -5461,26 +5464,8 @@ func (c *p4WNP1Client) ListStoredWifiSettings(ctx context.Context, in *Empty, op
return new(StringMessageArray).Unmarshal(resp)
}
func (c *p4WNP1Client) ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error) {
resp, err := c.client.RPCCall(ctx, "ListStoredTriggerActionSets", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(StringMessageArray).Unmarshal(resp)
}
func (c *p4WNP1Client) StoreTriggerActionSet(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*Empty, error) {
resp, err := c.client.RPCCall(ctx, "StoreTriggerActionSet", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) GetTriggerActionsState(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*TriggerActionSet, error) {
resp, err := c.client.RPCCall(ctx, "GetTriggerActionsState", in.Marshal(), opts...)
func (c *p4WNP1Client) GetDeployedTriggerActionSet(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*TriggerActionSet, error) {
resp, err := c.client.RPCCall(ctx, "GetDeployedTriggerActionSet", in.Marshal(), opts...)
if err != nil {
return nil, err
}
@ -5505,3 +5490,48 @@ func (c *p4WNP1Client) DeployTriggerActionSetAdd(ctx context.Context, in *Trigge
return new(TriggerActionSet).Unmarshal(resp)
}
func (c *p4WNP1Client) DeployTriggerActionSetRemove(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*TriggerActionSet, error) {
resp, err := c.client.RPCCall(ctx, "DeployTriggerActionSetRemove", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(TriggerActionSet).Unmarshal(resp)
}
func (c *p4WNP1Client) ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error) {
resp, err := c.client.RPCCall(ctx, "ListStoredTriggerActionSets", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(StringMessageArray).Unmarshal(resp)
}
func (c *p4WNP1Client) StoreTriggerActionSet(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*Empty, error) {
resp, err := c.client.RPCCall(ctx, "StoreTriggerActionSet", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) DeployStoredTriggerActionSetReplace(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*TriggerActionSet, error) {
resp, err := c.client.RPCCall(ctx, "DeployStoredTriggerActionSetReplace", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(TriggerActionSet).Unmarshal(resp)
}
func (c *p4WNP1Client) DeployStoredTriggerActionSetAdd(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*TriggerActionSet, error) {
resp, err := c.client.RPCCall(ctx, "DeployStoredTriggerActionSetAdd", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(TriggerActionSet).Unmarshal(resp)
}

View File

@ -2523,11 +2523,14 @@ type P4WNP1Client interface {
StoreDeployedWifiSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error)
ListStoredWifiSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error)
// TriggerActions
ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error)
StoreTriggerActionSet(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*Empty, error)
GetTriggerActionsState(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TriggerActionSet, error)
GetDeployedTriggerActionSet(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TriggerActionSet, error)
DeployTriggerActionSetReplace(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*TriggerActionSet, error)
DeployTriggerActionSetAdd(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*TriggerActionSet, error)
DeployTriggerActionSetRemove(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*TriggerActionSet, error)
ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error)
StoreTriggerActionSet(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*Empty, error)
DeployStoredTriggerActionSetReplace(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*TriggerActionSet, error)
DeployStoredTriggerActionSetAdd(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*TriggerActionSet, error)
}
type p4WNP1Client struct {
@ -2840,27 +2843,9 @@ func (c *p4WNP1Client) ListStoredWifiSettings(ctx context.Context, in *Empty, op
return out, nil
}
func (c *p4WNP1Client) ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error) {
out := new(StringMessageArray)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/ListStoredTriggerActionSets", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) StoreTriggerActionSet(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*Empty, error) {
out := new(Empty)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StoreTriggerActionSet", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetTriggerActionsState(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TriggerActionSet, error) {
func (c *p4WNP1Client) GetDeployedTriggerActionSet(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TriggerActionSet, error) {
out := new(TriggerActionSet)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetTriggerActionsState", in, out, c.cc, opts...)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetDeployedTriggerActionSet", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
@ -2885,6 +2870,51 @@ func (c *p4WNP1Client) DeployTriggerActionSetAdd(ctx context.Context, in *Trigge
return out, nil
}
func (c *p4WNP1Client) DeployTriggerActionSetRemove(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*TriggerActionSet, error) {
out := new(TriggerActionSet)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployTriggerActionSetRemove", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error) {
out := new(StringMessageArray)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/ListStoredTriggerActionSets", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) StoreTriggerActionSet(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*Empty, error) {
out := new(Empty)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StoreTriggerActionSet", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) DeployStoredTriggerActionSetReplace(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*TriggerActionSet, error) {
out := new(TriggerActionSet)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployStoredTriggerActionSetReplace", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) DeployStoredTriggerActionSetAdd(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*TriggerActionSet, error) {
out := new(TriggerActionSet)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployStoredTriggerActionSetAdd", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for P4WNP1 service
type P4WNP1Server interface {
@ -2928,11 +2958,14 @@ type P4WNP1Server interface {
StoreDeployedWifiSettings(context.Context, *StringMessage) (*Empty, error)
ListStoredWifiSettings(context.Context, *Empty) (*StringMessageArray, error)
// TriggerActions
ListStoredTriggerActionSets(context.Context, *Empty) (*StringMessageArray, error)
StoreTriggerActionSet(context.Context, *TriggerActionSet) (*Empty, error)
GetTriggerActionsState(context.Context, *Empty) (*TriggerActionSet, error)
GetDeployedTriggerActionSet(context.Context, *Empty) (*TriggerActionSet, error)
DeployTriggerActionSetReplace(context.Context, *TriggerActionSet) (*TriggerActionSet, error)
DeployTriggerActionSetAdd(context.Context, *TriggerActionSet) (*TriggerActionSet, error)
DeployTriggerActionSetRemove(context.Context, *TriggerActionSet) (*TriggerActionSet, error)
ListStoredTriggerActionSets(context.Context, *Empty) (*StringMessageArray, error)
StoreTriggerActionSet(context.Context, *TriggerActionSet) (*Empty, error)
DeployStoredTriggerActionSetReplace(context.Context, *StringMessage) (*TriggerActionSet, error)
DeployStoredTriggerActionSetAdd(context.Context, *StringMessage) (*TriggerActionSet, error)
}
func RegisterP4WNP1Server(s *grpc.Server, srv P4WNP1Server) {
@ -3500,56 +3533,20 @@ func _P4WNP1_ListStoredWifiSettings_Handler(srv interface{}, ctx context.Context
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_ListStoredTriggerActionSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
func _P4WNP1_GetDeployedTriggerActionSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).ListStoredTriggerActionSets(ctx, in)
return srv.(P4WNP1Server).GetDeployedTriggerActionSet(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/ListStoredTriggerActionSets",
FullMethod: "/P4wnP1_grpc.P4WNP1/GetDeployedTriggerActionSet",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).ListStoredTriggerActionSets(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_StoreTriggerActionSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(TriggerActionSet)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).StoreTriggerActionSet(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/StoreTriggerActionSet",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).StoreTriggerActionSet(ctx, req.(*TriggerActionSet))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetTriggerActionsState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetTriggerActionsState(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetTriggerActionsState",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetTriggerActionsState(ctx, req.(*Empty))
return srv.(P4WNP1Server).GetDeployedTriggerActionSet(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
@ -3590,6 +3587,96 @@ func _P4WNP1_DeployTriggerActionSetAdd_Handler(srv interface{}, ctx context.Cont
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_DeployTriggerActionSetRemove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(TriggerActionSet)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).DeployTriggerActionSetRemove(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/DeployTriggerActionSetRemove",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).DeployTriggerActionSetRemove(ctx, req.(*TriggerActionSet))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_ListStoredTriggerActionSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).ListStoredTriggerActionSets(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/ListStoredTriggerActionSets",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).ListStoredTriggerActionSets(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_StoreTriggerActionSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(TriggerActionSet)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).StoreTriggerActionSet(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/StoreTriggerActionSet",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).StoreTriggerActionSet(ctx, req.(*TriggerActionSet))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_DeployStoredTriggerActionSetReplace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).DeployStoredTriggerActionSetReplace(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/DeployStoredTriggerActionSetReplace",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).DeployStoredTriggerActionSetReplace(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_DeployStoredTriggerActionSetAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).DeployStoredTriggerActionSetAdd(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/DeployStoredTriggerActionSetAdd",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).DeployStoredTriggerActionSetAdd(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
var _P4WNP1_serviceDesc = grpc.ServiceDesc{
ServiceName: "P4wnP1_grpc.P4WNP1",
HandlerType: (*P4WNP1Server)(nil),
@ -3715,16 +3802,8 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
Handler: _P4WNP1_ListStoredWifiSettings_Handler,
},
{
MethodName: "ListStoredTriggerActionSets",
Handler: _P4WNP1_ListStoredTriggerActionSets_Handler,
},
{
MethodName: "StoreTriggerActionSet",
Handler: _P4WNP1_StoreTriggerActionSet_Handler,
},
{
MethodName: "GetTriggerActionsState",
Handler: _P4WNP1_GetTriggerActionsState_Handler,
MethodName: "GetDeployedTriggerActionSet",
Handler: _P4WNP1_GetDeployedTriggerActionSet_Handler,
},
{
MethodName: "DeployTriggerActionSetReplace",
@ -3734,6 +3813,26 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
MethodName: "DeployTriggerActionSetAdd",
Handler: _P4WNP1_DeployTriggerActionSetAdd_Handler,
},
{
MethodName: "DeployTriggerActionSetRemove",
Handler: _P4WNP1_DeployTriggerActionSetRemove_Handler,
},
{
MethodName: "ListStoredTriggerActionSets",
Handler: _P4WNP1_ListStoredTriggerActionSets_Handler,
},
{
MethodName: "StoreTriggerActionSet",
Handler: _P4WNP1_StoreTriggerActionSet_Handler,
},
{
MethodName: "DeployStoredTriggerActionSetReplace",
Handler: _P4WNP1_DeployStoredTriggerActionSetReplace_Handler,
},
{
MethodName: "DeployStoredTriggerActionSetAdd",
Handler: _P4WNP1_DeployStoredTriggerActionSetAdd_Handler,
},
},
Streams: []grpc.StreamDesc{
{
@ -3748,222 +3847,223 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("grpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 3463 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x5a, 0x5b, 0x77, 0xe3, 0x46,
0x72, 0xe6, 0x45, 0x12, 0xc9, 0xe2, 0x0d, 0xea, 0x99, 0xd1, 0x70, 0x34, 0x17, 0x8f, 0x11, 0xaf,
0x77, 0xa2, 0xcd, 0xca, 0x63, 0x59, 0x1e, 0x7b, 0x7d, 0x76, 0x8f, 0x97, 0x77, 0x72, 0x86, 0xb7,
0xd3, 0x20, 0xad, 0x24, 0x7b, 0x4e, 0xb8, 0x10, 0xd0, 0xa2, 0xb0, 0x43, 0x02, 0x0c, 0xd0, 0xd0,
0x58, 0x79, 0xd8, 0x9c, 0x93, 0x3f, 0x91, 0x7f, 0x91, 0xc7, 0xe4, 0x9f, 0xe4, 0x1f, 0xe4, 0x3d,
0x2f, 0x79, 0xce, 0x9e, 0xee, 0x06, 0x40, 0x00, 0x02, 0xa9, 0xb1, 0xf7, 0xad, 0xba, 0xba, 0xea,
0xeb, 0x46, 0x75, 0x55, 0x75, 0x75, 0x91, 0x00, 0x0b, 0x7b, 0xad, 0x9d, 0xae, 0x6d, 0x8b, 0x5a,
0xa8, 0x38, 0x39, 0xff, 0x60, 0x4e, 0xbe, 0x9c, 0x33, 0x96, 0xfc, 0x27, 0x90, 0xa6, 0xb6, 0xb1,
0x58, 0x10, 0xbb, 0xae, 0x51, 0xc3, 0x32, 0x15, 0x42, 0x51, 0x03, 0x2a, 0x11, 0x9e, 0x53, 0x4b,
0xbf, 0xcc, 0xbe, 0x2a, 0x9e, 0x1d, 0x9f, 0x86, 0x34, 0x4f, 0x23, 0x22, 0x38, 0xa6, 0x81, 0x10,
0xec, 0x8d, 0xd4, 0x15, 0xa9, 0x65, 0x5e, 0xa6, 0x5f, 0x15, 0x30, 0xa7, 0xe5, 0xff, 0x04, 0x28,
0x47, 0xc4, 0x50, 0x05, 0x32, 0x86, 0x5e, 0x4b, 0xbf, 0x4c, 0xbf, 0x2a, 0xe3, 0x8c, 0xa1, 0xa3,
0x1a, 0xe4, 0x2c, 0x93, 0x28, 0xd7, 0x16, 0xe5, 0x8a, 0x79, 0xec, 0x0f, 0xd1, 0x31, 0xe4, 0x0d,
0x87, 0x69, 0xdd, 0x90, 0x5a, 0x96, 0x4f, 0x05, 0x63, 0xf4, 0x0c, 0x0a, 0xc6, 0x6a, 0xe5, 0x52,
0xf5, 0x72, 0x49, 0x6a, 0x7b, 0x7c, 0x72, 0xc3, 0x40, 0x03, 0xa8, 0x38, 0xc4, 0xbe, 0x31, 0x34,
0xa2, 0x50, 0xd5, 0xa6, 0x44, 0xaf, 0xed, 0xbf, 0x4c, 0xbf, 0x2a, 0x9e, 0xc9, 0x49, 0x5f, 0xa3,
0x44, 0x24, 0x7b, 0x29, 0x1c, 0xd3, 0x45, 0x7f, 0x0f, 0xc8, 0x75, 0x2e, 0xbb, 0xaa, 0xbe, 0x20,
0xb4, 0x69, 0x99, 0x26, 0xd1, 0x18, 0xe2, 0x01, 0x47, 0xfc, 0x3c, 0x09, 0x71, 0xa6, 0x34, 0x62,
0xd2, 0xbd, 0x14, 0x4e, 0xc0, 0x40, 0x2a, 0x3c, 0x0a, 0xb8, 0x2d, 0xc3, 0xd1, 0x02, 0xf0, 0x1c,
0x07, 0xff, 0xdb, 0x9d, 0xe0, 0x61, 0x85, 0x5e, 0x0a, 0x27, 0x23, 0xa1, 0x3e, 0x94, 0x3f, 0x18,
0x57, 0x46, 0x7d, 0xe2, 0x5b, 0x22, 0xcf, 0xa1, 0x3f, 0x4d, 0x82, 0xbe, 0x08, 0x0b, 0xf6, 0x52,
0x38, 0xaa, 0xc9, 0xec, 0xc0, 0x18, 0xc1, 0xf6, 0xeb, 0x8e, 0x42, 0xd5, 0x5a, 0x61, 0xbb, 0x1d,
0x2e, 0xee, 0x48, 0x33, 0x3b, 0xdc, 0xc5, 0x40, 0xdf, 0x41, 0xde, 0x71, 0xae, 0x07, 0xd6, 0xc2,
0x30, 0x6b, 0xc0, 0xf1, 0x9e, 0x25, 0x9e, 0x94, 0xd2, 0xe3, 0x32, 0xbd, 0x14, 0x0e, 0xe4, 0x11,
0x06, 0x49, 0xbf, 0xd6, 0xd6, 0x03, 0xa2, 0x3a, 0xa4, 0x6b, 0xab, 0x26, 0xfb, 0xc6, 0x22, 0xc7,
0xf8, 0x2c, 0x09, 0xa3, 0xd5, 0x6b, 0x4e, 0xc2, 0xb2, 0xbd, 0x14, 0xbe, 0xa3, 0x8f, 0x3a, 0x50,
0x5a, 0xd8, 0x96, 0xbb, 0xc6, 0x44, 0x23, 0xcc, 0xfb, 0x4a, 0x1c, 0xef, 0x65, 0x12, 0x5e, 0x37,
0x24, 0xd7, 0x4b, 0xe1, 0x88, 0x1e, 0xfa, 0x27, 0x78, 0x18, 0x1e, 0x2b, 0xe4, 0x9f, 0x5d, 0x62,
0x6a, 0xa4, 0x56, 0xe6, 0x78, 0xaf, 0xee, 0xc3, 0xf3, 0xe5, 0x7b, 0x29, 0x9c, 0x88, 0x83, 0xce,
0xe1, 0x60, 0xb1, 0x36, 0xac, 0xbe, 0x59, 0xab, 0x70, 0xc4, 0xc4, 0x68, 0xed, 0x4e, 0xfa, 0xe3,
0x3e, 0xb3, 0x99, 0x27, 0x8b, 0x5a, 0x00, 0x97, 0xaa, 0x73, 0xad, 0x68, 0xb6, 0xb1, 0xa6, 0xb5,
0x6a, 0x42, 0x64, 0x78, 0x79, 0x81, 0x9d, 0x7b, 0x23, 0x90, 0xec, 0xa5, 0x71, 0x48, 0x0f, 0xd5,
0xa1, 0x70, 0x6d, 0xe8, 0x1e, 0x88, 0x94, 0xe0, 0x54, 0x21, 0x90, 0x5e, 0xbf, 0x15, 0x60, 0x6c,
0xb4, 0x90, 0x06, 0x47, 0x3a, 0x59, 0x2f, 0xad, 0x5b, 0x85, 0x50, 0x6a, 0x98, 0x0b, 0x67, 0x4a,
0x56, 0xeb, 0xa5, 0x4a, 0x49, 0xed, 0x30, 0xc1, 0xff, 0x05, 0x5e, 0x2b, 0x51, 0xa1, 0x97, 0xc6,
0x5b, 0xa0, 0xd0, 0x09, 0x64, 0x97, 0xd6, 0xa2, 0x86, 0x38, 0xe2, 0x51, 0x02, 0xe2, 0xc0, 0x5a,
0xf4, 0xd2, 0x98, 0x09, 0xa1, 0x37, 0x90, 0x63, 0x36, 0x1a, 0xbb, 0xb4, 0xf6, 0x20, 0xc1, 0xa0,
0x42, 0x9e, 0xd9, 0x73, 0xec, 0xb2, 0x4f, 0xf1, 0x85, 0xd1, 0x6f, 0xa1, 0xc0, 0xcf, 0x47, 0x21,
0xa6, 0x5e, 0x7b, 0x98, 0xe0, 0xc0, 0x9e, 0xa6, 0x2f, 0xc3, 0xcc, 0x10, 0x28, 0x34, 0x0a, 0x90,
0xf3, 0x8e, 0xaa, 0x91, 0x87, 0x03, 0x21, 0x2a, 0x3f, 0x86, 0x47, 0x89, 0xf9, 0x49, 0x7e, 0x0a,
0x4f, 0xb6, 0xa6, 0x19, 0xf9, 0x05, 0x3c, 0xdb, 0x95, 0x26, 0xe4, 0x23, 0x78, 0x98, 0x14, 0xeb,
0x21, 0xd0, 0xbb, 0x31, 0x2b, 0x7f, 0x01, 0xd5, 0x58, 0x00, 0xb2, 0xf4, 0xbb, 0x64, 0xc4, 0xcc,
0x21, 0x36, 0xcf, 0xe5, 0x05, 0xbc, 0x61, 0xc8, 0x4f, 0xe0, 0xf1, 0x96, 0x68, 0x93, 0xfb, 0xf0,
0x20, 0xc1, 0xd1, 0x19, 0x1e, 0xb7, 0x07, 0xbf, 0x3f, 0x3c, 0xbc, 0x80, 0x81, 0x1e, 0xc2, 0xfe,
0x8d, 0xba, 0x74, 0xc5, 0xcd, 0xb2, 0x8f, 0xc5, 0x40, 0xfe, 0x57, 0x78, 0xba, 0x23, 0x66, 0xee,
0x81, 0x3c, 0x01, 0xa9, 0xbf, 0x30, 0x2d, 0x9b, 0x8c, 0x5d, 0x3a, 0xbe, 0x1a, 0xdb, 0x3a, 0xb1,
0xbd, 0xeb, 0xe7, 0x0e, 0x1f, 0x1d, 0xc1, 0x01, 0x5f, 0xd1, 0xa9, 0x65, 0x5f, 0x66, 0x5f, 0xed,
0x63, 0x6f, 0x24, 0xff, 0x57, 0x3a, 0xb8, 0xdb, 0x44, 0x8c, 0xa1, 0x53, 0xe1, 0x3f, 0x23, 0x77,
0xc5, 0x57, 0xac, 0x9c, 0x3d, 0x8c, 0x78, 0x01, 0x93, 0x1a, 0xb9, 0x2b, 0xec, 0x0b, 0xa1, 0xdf,
0x01, 0xac, 0xdd, 0xe5, 0x72, 0xb6, 0x6e, 0x59, 0x1f, 0x4c, 0xbe, 0x7e, 0xe5, 0xec, 0xf9, 0x1d,
0x95, 0xbe, 0x39, 0x09, 0x84, 0x70, 0x48, 0x01, 0x7d, 0x03, 0x20, 0x42, 0xba, 0xad, 0x2f, 0xc4,
0x15, 0x59, 0x39, 0x7b, 0x9c, 0xa0, 0xce, 0xa6, 0x71, 0x48, 0x54, 0xfe, 0x06, 0x1e, 0x25, 0x86,
0x38, 0x7a, 0x01, 0xe0, 0x70, 0x2a, 0x64, 0xb5, 0x10, 0x47, 0x7e, 0x03, 0x0f, 0x93, 0xc2, 0xfa,
0x5e, 0xbd, 0xff, 0x4b, 0xc3, 0xb3, 0x5d, 0xf1, 0x8b, 0x64, 0x28, 0x51, 0x8f, 0x0e, 0x41, 0x44,
0x78, 0xe8, 0x2d, 0xec, 0xd1, 0xdb, 0x35, 0xf1, 0xec, 0xf4, 0xe6, 0xa3, 0x93, 0xc3, 0xa9, 0x4f,
0x4c, 0x6f, 0xd7, 0x04, 0x73, 0x0c, 0x99, 0x40, 0x29, 0xcc, 0x45, 0x87, 0x50, 0xee, 0xcc, 0x06,
0x83, 0xb9, 0xd2, 0x9e, 0x4e, 0xfb, 0xa3, 0xae, 0x22, 0xa5, 0x50, 0x11, 0x72, 0xa3, 0xf6, 0xf4,
0x62, 0x8c, 0xdf, 0x49, 0x69, 0x94, 0x87, 0xbd, 0x8b, 0x7e, 0xa7, 0x2f, 0x65, 0x50, 0x0e, 0xb2,
0x33, 0xa5, 0x21, 0x65, 0x51, 0x19, 0x0a, 0x8d, 0xc1, 0xac, 0x3d, 0x1d, 0x8f, 0xa7, 0x3d, 0x69,
0x0f, 0x3d, 0x80, 0xea, 0x14, 0xf7, 0xbb, 0xdd, 0x36, 0x9e, 0xd7, 0x9b, 0xd3, 0xfe, 0x78, 0xa4,
0x48, 0xfb, 0x72, 0x11, 0x0a, 0x41, 0x92, 0x91, 0xd7, 0x50, 0x8e, 0x64, 0x90, 0x9f, 0xec, 0x2e,
0x5f, 0x84, 0xe3, 0xa0, 0x72, 0xf6, 0xe4, 0x8e, 0xf4, 0xd8, 0xa5, 0x3f, 0x30, 0x01, 0x3f, 0x44,
0xda, 0x50, 0x8d, 0x65, 0x9e, 0x9f, 0x15, 0x69, 0x1f, 0xe0, 0x98, 0xa5, 0x05, 0xcc, 0x42, 0xcb,
0xa1, 0xbe, 0x79, 0x15, 0x6a, 0xd9, 0xea, 0x82, 0x1f, 0xdd, 0x34, 0xe1, 0xe8, 0xc2, 0x3c, 0xf4,
0x35, 0xe4, 0x1d, 0x4f, 0x8d, 0x43, 0x17, 0x63, 0x9b, 0xbf, 0x30, 0x3a, 0x86, 0x8f, 0x8b, 0x03,
0x51, 0xf9, 0xdf, 0xb3, 0x50, 0x0a, 0x4f, 0xb1, 0x12, 0xd3, 0xdc, 0xac, 0xc1, 0x69, 0x56, 0x26,
0xea, 0x86, 0xc3, 0xea, 0x3e, 0xdd, 0x0b, 0xe1, 0x60, 0xcc, 0xfc, 0xd2, 0x26, 0x0b, 0x77, 0xa9,
0x52, 0xcb, 0xbe, 0xe5, 0x11, 0x52, 0xc0, 0x21, 0x0e, 0xfa, 0x1e, 0x4a, 0x1f, 0x2c, 0xfb, 0xbd,
0x61, 0x2e, 0xe6, 0x2b, 0x4b, 0x17, 0x95, 0x64, 0x25, 0x96, 0xbb, 0xd9, 0x06, 0x2e, 0x84, 0xd0,
0xd0, 0xd2, 0x09, 0x2e, 0x7e, 0xd8, 0x0c, 0xd0, 0x1b, 0x28, 0xa8, 0x2e, 0xbd, 0x16, 0xda, 0xfb,
0x09, 0xc7, 0xc2, 0xb4, 0xeb, 0x2e, 0xbd, 0xe6, 0xaa, 0x79, 0xd5, 0xa3, 0x58, 0xd5, 0xab, 0x5d,
0xab, 0xa6, 0x49, 0x96, 0xbc, 0x90, 0x2c, 0x63, 0x7f, 0x88, 0x4e, 0xe1, 0x40, 0x5d, 0xcf, 0x1b,
0x8a, 0xe2, 0x15, 0x81, 0x8f, 0xef, 0xc0, 0x35, 0x14, 0xa5, 0x79, 0xb5, 0xc0, 0xfb, 0xea, 0xba,
0xa1, 0x28, 0xe8, 0x7b, 0xa8, 0x6a, 0x4b, 0x83, 0x98, 0x94, 0xe9, 0xcc, 0x97, 0x86, 0x43, 0x6b,
0x79, 0x5e, 0xba, 0x6f, 0x55, 0x2c, 0x0b, 0xf9, 0x86, 0xa2, 0x0c, 0x0c, 0x87, 0xa2, 0xa7, 0xfc,
0x22, 0x27, 0x73, 0xc7, 0x31, 0x74, 0x5e, 0xcd, 0xe5, 0x71, 0x9e, 0x31, 0x14, 0xc7, 0xd0, 0x59,
0xee, 0x33, 0xc9, 0x8f, 0x2b, 0xcb, 0xe4, 0x35, 0x4b, 0x1e, 0x7b, 0x23, 0xf9, 0x3f, 0xd2, 0x50,
0xe0, 0x27, 0x43, 0x59, 0xf4, 0x9e, 0xc2, 0x1e, 0x37, 0x80, 0xf0, 0xe2, 0xe3, 0xbb, 0x47, 0xcb,
0xa4, 0xb8, 0x05, 0xb8, 0x5c, 0xf8, 0xeb, 0x33, 0xd1, 0xaf, 0x47, 0xb0, 0xc7, 0xf7, 0x21, 0x8e,
0x8a, 0xd3, 0xa8, 0x09, 0x55, 0xcd, 0xb5, 0x6d, 0x62, 0x06, 0xae, 0xc7, 0xcf, 0x69, 0xa7, 0x0f,
0xc5, 0x35, 0xe4, 0x33, 0x80, 0x8d, 0x09, 0xd8, 0x32, 0x8a, 0xd2, 0x6f, 0xf9, 0x7e, 0xc4, 0x68,
0x24, 0x41, 0x76, 0xa2, 0xbc, 0xf3, 0x5e, 0x2f, 0x8c, 0x94, 0x3f, 0x85, 0xb2, 0x42, 0x6d, 0x76,
0xd4, 0xc4, 0x71, 0x98, 0xab, 0x4b, 0x90, 0x5d, 0x39, 0x0b, 0x4f, 0x8b, 0x91, 0xf2, 0x6b, 0x40,
0x11, 0x91, 0xba, 0x6d, 0xab, 0xb7, 0xcc, 0x25, 0x57, 0xce, 0x82, 0xd3, 0xfc, 0x1d, 0x55, 0xc0,
0xc1, 0x58, 0x3e, 0x85, 0x52, 0xfb, 0x86, 0x98, 0xd4, 0x8b, 0x26, 0xe6, 0xa2, 0xec, 0xd0, 0x88,
0xc9, 0xf2, 0x10, 0x87, 0xce, 0xe2, 0x10, 0x47, 0x56, 0x01, 0xb8, 0x3c, 0x0f, 0x6c, 0x74, 0x0c,
0x39, 0xea, 0xf0, 0x05, 0xc5, 0x2e, 0x7a, 0x29, 0xec, 0x33, 0xd0, 0x11, 0xec, 0xd3, 0x4b, 0xcb,
0x12, 0x36, 0xcd, 0xf7, 0x52, 0x58, 0x0c, 0x51, 0x0d, 0x0e, 0xa8, 0x61, 0xd2, 0x37, 0xe7, 0xdc,
0xaa, 0x59, 0x56, 0x09, 0x8a, 0x71, 0x63, 0x1f, 0xb2, 0x37, 0xea, 0x52, 0x1e, 0xc0, 0x3e, 0x5f,
0x82, 0x99, 0x85, 0x6e, 0x76, 0xc1, 0x69, 0xf4, 0x45, 0x70, 0xfb, 0x65, 0x12, 0xdc, 0x6a, 0xb3,
0xb5, 0xe0, 0x5a, 0xfc, 0x23, 0x3c, 0x64, 0xb1, 0xdf, 0x32, 0xec, 0xb1, 0xdd, 0x31, 0x96, 0xc4,
0xff, 0x50, 0x09, 0xb2, 0xba, 0xe1, 0x57, 0x0b, 0x8c, 0x64, 0xce, 0xb5, 0xb6, 0xc9, 0x95, 0xf1,
0xa3, 0x67, 0x74, 0x6f, 0xc4, 0x4c, 0x62, 0x99, 0xcb, 0xdb, 0x8e, 0xb5, 0x64, 0xd7, 0xb2, 0x78,
0xfa, 0x85, 0x38, 0xec, 0xfa, 0x8a, 0xad, 0xe0, 0xac, 0x2d, 0xd3, 0x21, 0x22, 0xdc, 0x1d, 0x77,
0x49, 0x27, 0x2a, 0xbd, 0xf6, 0xaf, 0xa1, 0x0d, 0x47, 0x1e, 0x43, 0x15, 0x13, 0x55, 0x0f, 0xef,
0x0a, 0xc1, 0xde, 0x7a, 0x23, 0xcc, 0x69, 0x96, 0x05, 0x1d, 0x76, 0xbf, 0xf1, 0x6d, 0x65, 0xb1,
0x18, 0x30, 0x49, 0x5d, 0xa5, 0x2a, 0xdf, 0x4f, 0x09, 0x73, 0x5a, 0x7e, 0x0d, 0xd2, 0x06, 0xd0,
0xdb, 0xc4, 0x33, 0x28, 0xd8, 0x44, 0xd5, 0x9b, 0x96, 0x6b, 0x52, 0xcf, 0x92, 0x1b, 0x86, 0x7c,
0x03, 0xd2, 0x85, 0x6d, 0x50, 0x72, 0xdf, 0x1e, 0x8e, 0x58, 0x1a, 0x58, 0xb3, 0x7a, 0x52, 0xe4,
0x34, 0x6f, 0xc4, 0xb2, 0xed, 0xca, 0x75, 0xe8, 0xc8, 0xa2, 0xed, 0x1f, 0x59, 0xac, 0x0b, 0xeb,
0x44, 0x78, 0xc1, 0x4e, 0xf7, 0x42, 0x3b, 0xfd, 0x05, 0x54, 0xd9, 0x92, 0x7d, 0xf3, 0xca, 0xda,
0xb1, 0xac, 0xfc, 0x67, 0x90, 0x36, 0x62, 0xde, 0x07, 0x25, 0x25, 0x5d, 0x16, 0xa7, 0xc6, 0xbf,
0x10, 0xcf, 0x42, 0x9c, 0x66, 0x3c, 0x9e, 0x05, 0xb2, 0x3c, 0xa4, 0x83, 0x48, 0x5f, 0x59, 0xfa,
0xd4, 0x58, 0x89, 0xdc, 0x9a, 0xc5, 0xfe, 0x90, 0x19, 0xd9, 0x70, 0x5a, 0x86, 0xcd, 0xb3, 0x66,
0x1e, 0x8b, 0x81, 0xfc, 0x8f, 0x20, 0x05, 0x55, 0x45, 0x28, 0x42, 0x44, 0x29, 0x11, 0x3e, 0xd5,
0x0d, 0x07, 0x7d, 0x0e, 0x15, 0x6a, 0xac, 0x88, 0xe5, 0x52, 0x85, 0x68, 0x96, 0xa9, 0x3b, 0x5e,
0x52, 0x89, 0x71, 0xe5, 0x17, 0x50, 0x0a, 0xb0, 0xdf, 0x5a, 0x97, 0xf1, 0x4e, 0x84, 0xfc, 0x59,
0x68, 0xed, 0xb7, 0xd6, 0x25, 0x4f, 0x8e, 0x12, 0x64, 0x0d, 0x5d, 0x34, 0x43, 0xca, 0x98, 0x91,
0xf2, 0x0f, 0x50, 0xeb, 0xf5, 0x5b, 0xd8, 0x35, 0x4d, 0xc3, 0x5c, 0xbc, 0xb5, 0x2e, 0x79, 0x6e,
0xc3, 0xdc, 0xc7, 0x42, 0x88, 0x59, 0xde, 0xdb, 0x40, 0xb0, 0x77, 0xb3, 0xea, 0xeb, 0xbe, 0x95,
0x18, 0xcd, 0x0e, 0xd6, 0xb1, 0x5c, 0x5b, 0x23, 0x5e, 0x8e, 0xf3, 0x46, 0xf2, 0x9f, 0xa1, 0x1a,
0xfa, 0x72, 0x0e, 0xf7, 0x2b, 0xc8, 0xfe, 0xc9, 0xba, 0xe4, 0x78, 0xf1, 0x64, 0x17, 0xde, 0x28,
0x66, 0x52, 0xcc, 0x4a, 0x86, 0xd3, 0x31, 0x4c, 0xc3, 0xb9, 0x0e, 0x2e, 0xc2, 0x10, 0x67, 0x13,
0x1b, 0x6f, 0x1d, 0xcb, 0xdc, 0x5c, 0x85, 0x3e, 0x47, 0x3e, 0x85, 0xe2, 0xa0, 0xdd, 0x0a, 0x6e,
0xda, 0x4f, 0xa0, 0x78, 0xb9, 0x34, 0xcc, 0xf7, 0x73, 0x2d, 0xf0, 0xe3, 0x32, 0x06, 0xce, 0x12,
0x8e, 0xfc, 0x3f, 0x7b, 0x50, 0x11, 0x2f, 0x8c, 0x40, 0xa7, 0x06, 0x39, 0x62, 0x8a, 0x8b, 0x38,
0x2d, 0x5a, 0x39, 0xde, 0x90, 0x99, 0xf1, 0xc6, 0xd0, 0xfd, 0xdc, 0x7a, 0x63, 0x70, 0xce, 0x3a,
0xc8, 0xf3, 0x8c, 0xe4, 0x9e, 0xad, 0x9a, 0xee, 0x95, 0xaa, 0x51, 0xd7, 0x26, 0x36, 0xf7, 0x97,
0x02, 0x8e, 0xf0, 0xd8, 0x0a, 0x6b, 0xdb, 0xd2, 0x5d, 0x8d, 0x72, 0xb7, 0x29, 0x60, 0x7f, 0xc8,
0xcd, 0x4a, 0x6c, 0x43, 0x15, 0xf7, 0x29, 0x33, 0x2b, 0x1f, 0xa1, 0x17, 0x50, 0x74, 0x1d, 0x32,
0x6f, 0xb6, 0x9a, 0xf3, 0x76, 0x73, 0xc8, 0xef, 0xd4, 0x3c, 0x2e, 0xb8, 0x0e, 0x69, 0xb6, 0x9a,
0xed, 0xe6, 0x90, 0xdd, 0x7e, 0x6c, 0x1e, 0x8f, 0x5a, 0x7d, 0x85, 0xf7, 0x46, 0xf2, 0x38, 0xef,
0x3a, 0x84, 0x8f, 0xd1, 0x2b, 0x90, 0xd8, 0x64, 0xaf, 0xdf, 0x9a, 0xbf, 0x6b, 0xff, 0x43, 0x63,
0x5c, 0xc7, 0x2d, 0xef, 0x86, 0xac, 0xb8, 0x0e, 0xe9, 0xf5, 0x5b, 0x3e, 0x17, 0xc9, 0x50, 0xf6,
0x25, 0x87, 0xe3, 0x99, 0xd2, 0xe6, 0x6d, 0x8c, 0x3c, 0x2e, 0x0a, 0x31, 0xce, 0xf2, 0xb7, 0xc2,
0x64, 0x70, 0xfd, 0x82, 0x37, 0x29, 0xc4, 0x56, 0x98, 0x3f, 0xd5, 0x2f, 0xd0, 0x63, 0xc8, 0xb1,
0xf9, 0xd9, 0x50, 0xe1, 0x0d, 0x87, 0x3c, 0x3e, 0x70, 0x1d, 0x32, 0x1b, 0x2a, 0xe8, 0x39, 0x00,
0x9b, 0x50, 0xda, 0xb8, 0x5f, 0x1f, 0x78, 0x17, 0x31, 0xd3, 0x13, 0x0c, 0xf4, 0x16, 0x2a, 0xb6,
0xa9, 0x1b, 0xce, 0x3c, 0x28, 0xb1, 0x44, 0x37, 0xe0, 0x6f, 0xa2, 0xf5, 0x61, 0xe4, 0xac, 0xda,
0xf4, 0x9a, 0xd8, 0x26, 0xa1, 0xb8, 0xcc, 0x55, 0x83, 0x23, 0x1c, 0x82, 0xa4, 0xe9, 0xda, 0x9c,
0x68, 0xab, 0x0d, 0x5a, 0xf5, 0xe3, 0xd1, 0x2a, 0x9a, 0xae, 0xb5, 0xb5, 0x55, 0x00, 0x57, 0x87,
0x92, 0xbb, 0x0a, 0x6d, 0x4c, 0xf4, 0x09, 0x5e, 0xec, 0x80, 0x9a, 0x0d, 0x15, 0x5c, 0x74, 0x57,
0xc1, 0x8e, 0xe4, 0x09, 0x1c, 0x25, 0x2f, 0xc6, 0x0b, 0x17, 0xcb, 0xa1, 0x73, 0x55, 0xd7, 0xfd,
0x6b, 0x25, 0xcf, 0x18, 0x75, 0x5d, 0xb7, 0xd1, 0x13, 0xc8, 0xeb, 0xe4, 0x46, 0xcc, 0x09, 0xb7,
0xcb, 0xe9, 0xe4, 0x86, 0x4d, 0xc9, 0xbf, 0x83, 0xc3, 0x3b, 0x6b, 0xb2, 0x74, 0xa4, 0xe9, 0xb6,
0xb5, 0xf2, 0x3c, 0x57, 0x0c, 0x58, 0x00, 0x5f, 0x19, 0xcb, 0xa0, 0xa5, 0xc9, 0x68, 0x79, 0x0e,
0x9f, 0x8a, 0x77, 0x06, 0xd1, 0xfd, 0xad, 0xf4, 0x4d, 0x4a, 0xec, 0x2b, 0x55, 0x23, 0xc1, 0x87,
0x7f, 0x07, 0x7b, 0xbc, 0x14, 0x13, 0x5d, 0xd4, 0x68, 0x77, 0x6c, 0xab, 0x16, 0xe6, 0x3a, 0xf2,
0xbf, 0x65, 0xe1, 0xc9, 0x76, 0xe4, 0xa4, 0x6c, 0xfc, 0xbd, 0x97, 0x79, 0xc5, 0xbb, 0xe0, 0x57,
0x1f, 0xb7, 0xda, 0x69, 0xa8, 0x20, 0x63, 0xc9, 0x63, 0xcd, 0x8c, 0x43, 0x1c, 0xe7, 0xdc, 0x4f,
0x0e, 0x1b, 0x0e, 0x2b, 0x68, 0x4c, 0x42, 0x57, 0xaa, 0xf3, 0xfe, 0xdc, 0x8b, 0xcb, 0x60, 0x1c,
0x8e, 0xfa, 0xfd, 0x68, 0xd4, 0x8f, 0x01, 0xe9, 0xd7, 0xda, 0x5a, 0x21, 0xf6, 0x0d, 0xb1, 0x83,
0xda, 0x4d, 0x34, 0x4e, 0x3f, 0x89, 0x6c, 0xb2, 0xd5, 0x6b, 0x4e, 0xa2, 0x62, 0x38, 0x41, 0x15,
0x7d, 0x06, 0x65, 0xdf, 0x95, 0xfa, 0xe6, 0xcc, 0x21, 0x5e, 0x38, 0x47, 0x99, 0x72, 0x13, 0xf6,
0x78, 0x8d, 0x0d, 0x70, 0x30, 0xac, 0x8f, 0x66, 0xf5, 0x81, 0x94, 0x42, 0x55, 0x28, 0xb2, 0x35,
0xe6, 0xcd, 0x41, 0xbf, 0x3d, 0x9a, 0x4a, 0xe9, 0x80, 0xa1, 0xb4, 0xf1, 0x0f, 0x6d, 0x2c, 0x65,
0xd8, 0x73, 0x6e, 0x36, 0x1a, 0xd6, 0x47, 0xf5, 0x6e, 0xbb, 0x25, 0x65, 0xe5, 0xff, 0xcf, 0x02,
0xba, 0xbb, 0xab, 0x4d, 0xb5, 0x36, 0xb1, 0xec, 0x20, 0x2b, 0x6e, 0x38, 0xe8, 0x15, 0x54, 0xc5,
0x28, 0x30, 0xb7, 0xe7, 0x3b, 0x71, 0x36, 0x6f, 0xa1, 0x10, 0xd5, 0xe1, 0x85, 0x80, 0x67, 0xf1,
0x0d, 0x03, 0x9d, 0x80, 0x64, 0x5a, 0x94, 0x3d, 0x1c, 0x2c, 0xdb, 0xa0, 0x2a, 0xef, 0x81, 0x8b,
0x36, 0xf7, 0x1d, 0x3e, 0x3a, 0x05, 0xa4, 0x5b, 0x23, 0x8b, 0x36, 0x0c, 0x53, 0xdf, 0x2c, 0x2b,
0xce, 0x22, 0x61, 0x86, 0xdd, 0x97, 0x9a, 0xba, 0x5c, 0x5e, 0xaa, 0xda, 0x7b, 0xaf, 0x7d, 0x27,
0x52, 0x66, 0x8c, 0x8b, 0xce, 0xe1, 0xc0, 0x56, 0xcd, 0x05, 0x71, 0x6a, 0x39, 0xee, 0xc5, 0xcf,
0xb6, 0x1c, 0x19, 0x66, 0x42, 0xd8, 0x93, 0x45, 0x1d, 0xc8, 0x59, 0x6b, 0xf1, 0x13, 0x82, 0x78,
0x87, 0xfc, 0xdd, 0x3d, 0x27, 0x7d, 0x3a, 0x16, 0xe2, 0x6d, 0x93, 0xda, 0xb7, 0xd8, 0x57, 0x46,
0x4d, 0x28, 0x3a, 0xec, 0x03, 0xb5, 0x9e, 0xe5, 0x50, 0xa7, 0x56, 0xe0, 0x58, 0x9f, 0x6e, 0xc3,
0x0a, 0x24, 0x71, 0x58, 0xeb, 0xf8, 0x3b, 0x28, 0x85, 0xd1, 0xd9, 0xad, 0xf3, 0x9e, 0xdc, 0x7a,
0xe7, 0xc6, 0xc8, 0xe8, 0x8b, 0xb7, 0xe0, 0xbd, 0x78, 0xbf, 0xcb, 0x7c, 0x9b, 0x96, 0x2d, 0xa8,
0xc6, 0xbe, 0x91, 0xdf, 0xa1, 0x8c, 0x18, 0x58, 0x1f, 0x82, 0xbe, 0x57, 0x88, 0x13, 0xcc, 0xcf,
0xd6, 0x6b, 0xe2, 0xa7, 0x9d, 0x10, 0x27, 0x38, 0x73, 0x5e, 0x0f, 0x85, 0xcf, 0x9c, 0x31, 0xe4,
0x6f, 0xe1, 0x61, 0xd2, 0x17, 0xf1, 0x57, 0x87, 0xaa, 0x05, 0xaf, 0x0e, 0x55, 0xe3, 0x75, 0xc6,
0xda, 0xc3, 0xcf, 0x18, 0x6b, 0x39, 0x07, 0xfb, 0xed, 0xd5, 0x9a, 0xde, 0x9e, 0xfc, 0x1a, 0xa4,
0x78, 0xc7, 0x08, 0x1d, 0x40, 0x66, 0x36, 0x91, 0x52, 0x28, 0x0f, 0x7b, 0xad, 0xf1, 0xc5, 0x48,
0x4a, 0xa3, 0x1c, 0x64, 0xc7, 0x9d, 0x8e, 0x94, 0x39, 0xf9, 0x02, 0x60, 0xd3, 0x21, 0x62, 0xf1,
0x82, 0xfb, 0x4a, 0x7f, 0xd4, 0x15, 0xcd, 0x8f, 0x4e, 0x7d, 0x30, 0x60, 0x03, 0xde, 0xfc, 0x68,
0x8c, 0xa7, 0x3d, 0x29, 0x73, 0xf2, 0xbf, 0x69, 0xc8, 0x79, 0x6d, 0x09, 0x54, 0x80, 0xfd, 0xd1,
0x6c, 0x38, 0xff, 0x52, 0x4a, 0xf9, 0xe4, 0x99, 0x94, 0xf6, 0xc9, 0xaf, 0xa4, 0x8c, 0x4f, 0x9e,
0x4b, 0x59, 0x9f, 0xfc, 0x5a, 0xda, 0xf3, 0xc9, 0x37, 0xd2, 0xbe, 0x4f, 0x7e, 0x23, 0x1d, 0xf8,
0xe4, 0xb7, 0x52, 0xce, 0x27, 0x7f, 0x23, 0xe5, 0xd9, 0x8e, 0xf8, 0x12, 0xaf, 0xa5, 0x42, 0x40,
0x7f, 0x29, 0x41, 0x40, 0x9f, 0x49, 0xc5, 0x80, 0xfe, 0x4a, 0x2a, 0x05, 0xf4, 0xb9, 0x54, 0x0e,
0xe8, 0xaf, 0xa5, 0x4a, 0x40, 0xbf, 0x91, 0xaa, 0x01, 0xfd, 0x8d, 0x24, 0x05, 0xf4, 0xb7, 0xd2,
0x61, 0x40, 0xff, 0x46, 0x42, 0x3e, 0x7d, 0xf6, 0x5a, 0x7a, 0x70, 0xf2, 0x6b, 0x28, 0x85, 0x5b,
0x2b, 0xcc, 0x78, 0x83, 0xf1, 0x85, 0xb0, 0x67, 0xaf, 0xdf, 0xed, 0x49, 0x69, 0x26, 0x3e, 0x1d,
0x77, 0xbb, 0x83, 0xb6, 0x94, 0x39, 0x69, 0x41, 0x35, 0xd6, 0x30, 0x60, 0xb6, 0x9c, 0x8d, 0xde,
0x8d, 0x98, 0xed, 0x53, 0xec, 0x34, 0xea, 0x13, 0x71, 0x06, 0xca, 0xb4, 0x2e, 0x65, 0xd0, 0x03,
0xa8, 0x2a, 0xd3, 0xfa, 0xbc, 0x53, 0xef, 0x0f, 0xc6, 0x3f, 0xb4, 0xf1, 0xbc, 0x3e, 0x91, 0xb2,
0x27, 0x2d, 0x28, 0x47, 0xde, 0xcd, 0xe8, 0x11, 0x1c, 0x32, 0xa9, 0xd1, 0x78, 0x3a, 0x6f, 0x8e,
0x47, 0xa3, 0x76, 0x73, 0xda, 0x6e, 0x09, 0xc3, 0xd7, 0x27, 0xf3, 0x19, 0x03, 0x3c, 0x84, 0x32,
0x93, 0xd8, 0xcc, 0x66, 0x4e, 0x3e, 0x17, 0xdd, 0x13, 0xbf, 0xfd, 0x80, 0x4a, 0x90, 0xbf, 0x98,
0xd4, 0xcf, 0xe6, 0x13, 0xe5, 0x9d, 0xd8, 0xff, 0x78, 0xd2, 0x1e, 0x49, 0xe9, 0xb3, 0xff, 0x3e,
0x82, 0x83, 0xc9, 0xf9, 0xc5, 0x68, 0xf2, 0x25, 0x1a, 0x42, 0xad, 0x4b, 0xa8, 0x7f, 0xbf, 0x45,
0xae, 0x49, 0x84, 0xa2, 0xf7, 0x0a, 0x73, 0xb8, 0xe3, 0xa7, 0x3b, 0xae, 0x72, 0x39, 0x85, 0x7a,
0xf0, 0x40, 0x60, 0xfd, 0xd5, 0x48, 0x1d, 0x38, 0xec, 0x12, 0x1a, 0x2b, 0x38, 0x7f, 0x06, 0xce,
0x18, 0x0e, 0x95, 0x3b, 0x38, 0xbb, 0x74, 0xee, 0x03, 0xfc, 0x3d, 0x54, 0xba, 0x84, 0x86, 0x4b,
0xe7, 0xa4, 0x5d, 0xd5, 0x22, 0xbc, 0x90, 0xb4, 0x40, 0x50, 0xa2, 0x08, 0x5b, 0xa5, 0x8f, 0x13,
0xb0, 0xe5, 0x14, 0x6a, 0x41, 0x69, 0xc8, 0x8a, 0xf2, 0xd9, 0x50, 0xe1, 0xb7, 0xc7, 0x3d, 0x05,
0xd6, 0x16, 0x94, 0x39, 0x7c, 0x22, 0x0e, 0x6b, 0x7b, 0xf1, 0xf1, 0x91, 0x85, 0xcc, 0x96, 0x05,
0x2c, 0xf8, 0x65, 0x97, 0xd0, 0xfa, 0x72, 0x79, 0x7f, 0xfd, 0x94, 0x64, 0xc3, 0xd3, 0x68, 0xf2,
0xbf, 0x0f, 0x43, 0x4e, 0xa1, 0x25, 0x7c, 0x16, 0xf2, 0xe6, 0xed, 0xab, 0x45, 0x3b, 0x56, 0x91,
0x86, 0xce, 0xf1, 0x47, 0x7e, 0xb2, 0x9c, 0x42, 0x43, 0xfe, 0xbe, 0xc4, 0xae, 0xe9, 0xdd, 0x9f,
0xcf, 0x93, 0x5f, 0x6c, 0xde, 0xb3, 0xf6, 0xf8, 0xd9, 0xb6, 0x69, 0xf6, 0x24, 0xe3, 0x70, 0xd5,
0x30, 0x1c, 0x7b, 0xb1, 0xde, 0x83, 0xb8, 0xfd, 0x89, 0x28, 0xa7, 0x10, 0x86, 0x47, 0xbd, 0x7e,
0xab, 0x4b, 0xe8, 0xe6, 0xdd, 0x28, 0x5e, 0x99, 0xdb, 0xb5, 0xee, 0xdd, 0x62, 0x1b, 0x50, 0xaf,
0xdf, 0x6a, 0xaa, 0xa6, 0x46, 0x96, 0x9b, 0x5d, 0xee, 0x00, 0x4c, 0xf6, 0x8b, 0x11, 0x3c, 0x16,
0x5b, 0xf3, 0x5e, 0xd5, 0x81, 0x7c, 0xb2, 0x1f, 0x3c, 0xdf, 0x8a, 0xcf, 0x9e, 0xec, 0x72, 0x0a,
0x35, 0xe0, 0x28, 0xd8, 0x56, 0x7d, 0xb9, 0xbc, 0x07, 0x2e, 0x79, 0x4f, 0x7f, 0xf0, 0xcd, 0x15,
0x7b, 0xe9, 0xef, 0xfa, 0xba, 0x5f, 0xc4, 0xa7, 0x12, 0xbb, 0x04, 0x7c, 0x83, 0xc5, 0x8e, 0x12,
0xb4, 0x81, 0x62, 0xc7, 0x1a, 0x6f, 0x0f, 0x6d, 0xd9, 0xe0, 0x3b, 0x80, 0x8e, 0xe2, 0x37, 0x9f,
0x50, 0xf4, 0xa4, 0x62, 0x4d, 0xae, 0x98, 0xc5, 0xe2, 0x1d, 0x2b, 0x7e, 0x02, 0xe5, 0x8e, 0xd2,
0x25, 0xd4, 0xef, 0xfd, 0xc4, 0xf0, 0x62, 0x9d, 0xa3, 0x18, 0x5e, 0xbc, 0x61, 0x24, 0xa7, 0xd0,
0x1f, 0xe1, 0x51, 0x47, 0x69, 0xda, 0x44, 0xa5, 0x24, 0xd2, 0xa9, 0x43, 0xb1, 0xff, 0x1d, 0x24,
0xf4, 0x09, 0x8f, 0xe5, 0x5d, 0x22, 0xc1, 0x0a, 0xbf, 0x87, 0x22, 0xef, 0x3d, 0x0e, 0x78, 0x59,
0x1d, 0x3b, 0x95, 0x70, 0x83, 0x35, 0x6e, 0x3e, 0x36, 0x25, 0xa7, 0x5e, 0xa7, 0x51, 0x17, 0x8a,
0x6d, 0xed, 0x3a, 0xe8, 0x86, 0xed, 0xca, 0x01, 0x3b, 0xe6, 0xe4, 0x14, 0xea, 0x03, 0x12, 0x29,
0x26, 0xf2, 0x53, 0xc5, 0xf6, 0xe6, 0xf4, 0xf1, 0x51, 0x72, 0x83, 0x5c, 0x4e, 0xa1, 0xdf, 0x42,
0xa9, 0x4b, 0xe8, 0xa6, 0xb1, 0x9e, 0xe4, 0xaf, 0xdb, 0xb5, 0x3b, 0x70, 0x24, 0xcc, 0x11, 0x30,
0x9b, 0xd7, 0xa2, 0x28, 0xff, 0x69, 0x38, 0x18, 0x0e, 0x15, 0x6a, 0xd9, 0xe4, 0xc2, 0xb8, 0xda,
0x7c, 0xcf, 0x2f, 0x63, 0xe2, 0xdb, 0x7e, 0x0f, 0xda, 0xe2, 0xae, 0x13, 0x78, 0xc4, 0x72, 0x0f,
0x83, 0xd5, 0x23, 0xb8, 0xbb, 0xec, 0xbe, 0xdd, 0x86, 0x1c, 0xb1, 0xe6, 0xfd, 0xde, 0xf7, 0xd3,
0x40, 0xb7, 0x7f, 0xf7, 0x10, 0x9e, 0x70, 0x2c, 0xff, 0xc2, 0xf8, 0x68, 0xc8, 0xe4, 0x4f, 0x1e,
0x8b, 0xe3, 0x48, 0xd8, 0x5e, 0xd2, 0x71, 0x7c, 0xb2, 0x1d, 0x5f, 0xfc, 0x70, 0x90, 0x42, 0x53,
0x78, 0xba, 0x01, 0x8c, 0xff, 0x85, 0xeb, 0x67, 0xa3, 0x0e, 0xe0, 0x11, 0x47, 0xbc, 0xf3, 0x9f,
0xb0, 0xe7, 0xdb, 0xff, 0xfb, 0xa5, 0x90, 0x6d, 0x69, 0x69, 0x08, 0x47, 0x5d, 0x42, 0xa3, 0xff,
0x0c, 0xdb, 0xee, 0xcb, 0xbb, 0x97, 0xe0, 0x35, 0xc9, 0x73, 0x71, 0x1a, 0xf1, 0x39, 0x4c, 0xd6,
0x4b, 0xf6, 0x98, 0xbd, 0x67, 0x93, 0xf7, 0x2e, 0xf0, 0x07, 0x78, 0x92, 0xbc, 0x40, 0x5d, 0xd7,
0xff, 0x5a, 0xf0, 0xcb, 0x03, 0xfe, 0xef, 0xbb, 0xaf, 0xfe, 0x12, 0x00, 0x00, 0xff, 0xff, 0x2c,
0xc4, 0x91, 0xab, 0x8b, 0x27, 0x00, 0x00,
// 3487 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x5a, 0xdd, 0x73, 0xe3, 0xc8,
0x71, 0x27, 0x45, 0x49, 0x24, 0x9b, 0x5f, 0xd0, 0xec, 0xae, 0x96, 0xab, 0xfd, 0x3c, 0xf8, 0x7c,
0x56, 0xe4, 0x58, 0xb7, 0xa7, 0xd3, 0xed, 0x9d, 0xaf, 0xec, 0x3a, 0xf3, 0x9b, 0xdc, 0xe5, 0x57,
0x0d, 0xc8, 0x53, 0x12, 0x57, 0x99, 0x86, 0x80, 0x11, 0x05, 0x2f, 0x09, 0x30, 0xc0, 0x40, 0x7b,
0xca, 0x83, 0x53, 0x95, 0x7f, 0x22, 0xff, 0x45, 0x1e, 0x93, 0xbf, 0x28, 0xef, 0x79, 0xc9, 0xb3,
0x5d, 0x33, 0x03, 0x80, 0x00, 0x04, 0x52, 0x7b, 0x77, 0x6f, 0x3d, 0x3d, 0xdd, 0xbf, 0x19, 0x74,
0xf7, 0xf4, 0xf4, 0x34, 0x09, 0x30, 0xb7, 0x57, 0xda, 0xe9, 0xca, 0xb6, 0xa8, 0x85, 0x0a, 0xe3,
0xf3, 0x0f, 0xe6, 0xf8, 0x8b, 0x19, 0x63, 0xc9, 0x7f, 0x01, 0x69, 0x62, 0x1b, 0xf3, 0x39, 0xb1,
0x6b, 0x1a, 0x35, 0x2c, 0x53, 0x21, 0x14, 0xd5, 0xa1, 0x1c, 0xe1, 0x39, 0xd5, 0xf4, 0xab, 0xcc,
0x71, 0xe1, 0xec, 0xe8, 0x34, 0xa4, 0x79, 0x1a, 0x11, 0xc1, 0x31, 0x0d, 0x84, 0x60, 0x77, 0xa8,
0x2e, 0x49, 0x75, 0xe7, 0x55, 0xfa, 0x38, 0x8f, 0x39, 0x2d, 0xff, 0x37, 0x40, 0x29, 0x22, 0x86,
0xca, 0xb0, 0x63, 0xe8, 0xd5, 0xf4, 0xab, 0xf4, 0x71, 0x09, 0xef, 0x18, 0x3a, 0xaa, 0x42, 0xd6,
0x32, 0x89, 0x72, 0x6d, 0x51, 0xae, 0x98, 0xc3, 0xfe, 0x10, 0x1d, 0x41, 0xce, 0x70, 0x98, 0xd6,
0x0d, 0xa9, 0x66, 0xf8, 0x54, 0x30, 0x46, 0xcf, 0x20, 0x6f, 0x2c, 0x97, 0x2e, 0x55, 0x2f, 0x17,
0xa4, 0xba, 0xcb, 0x27, 0xd7, 0x0c, 0xd4, 0x87, 0xb2, 0x43, 0xec, 0x1b, 0x43, 0x23, 0x0a, 0x55,
0x6d, 0x4a, 0xf4, 0xea, 0xde, 0xab, 0xf4, 0x71, 0xe1, 0x4c, 0x4e, 0xfa, 0x1a, 0x25, 0x22, 0xd9,
0x4d, 0xe1, 0x98, 0x2e, 0xfa, 0x27, 0x40, 0xae, 0x73, 0xd9, 0x51, 0xf5, 0x39, 0xa1, 0x0d, 0xcb,
0x34, 0x89, 0xc6, 0x10, 0xf7, 0x39, 0xe2, 0x67, 0x49, 0x88, 0x53, 0xa5, 0x1e, 0x93, 0xee, 0xa6,
0x70, 0x02, 0x06, 0x52, 0xe1, 0x51, 0xc0, 0x6d, 0x1a, 0x8e, 0x16, 0x80, 0x67, 0x39, 0xf8, 0x3f,
0x6c, 0x05, 0x0f, 0x2b, 0x74, 0x53, 0x38, 0x19, 0x09, 0xf5, 0xa0, 0xf4, 0xc1, 0xb8, 0x32, 0x6a,
0x63, 0xdf, 0x12, 0x39, 0x0e, 0xfd, 0x49, 0x12, 0xf4, 0x45, 0x58, 0xb0, 0x9b, 0xc2, 0x51, 0x4d,
0x66, 0x07, 0xc6, 0x08, 0xb6, 0x5f, 0x73, 0x14, 0xaa, 0x56, 0xf3, 0x9b, 0xed, 0x70, 0x71, 0x47,
0x9a, 0xd9, 0xe1, 0x2e, 0x06, 0xfa, 0x16, 0x72, 0x8e, 0x73, 0xdd, 0xb7, 0xe6, 0x86, 0x59, 0x05,
0x8e, 0xf7, 0x2c, 0xd1, 0x53, 0x4a, 0x97, 0xcb, 0x74, 0x53, 0x38, 0x90, 0x47, 0x18, 0x24, 0xfd,
0x5a, 0x5b, 0xf5, 0x89, 0xea, 0x90, 0x8e, 0xad, 0x9a, 0xec, 0x1b, 0x0b, 0x1c, 0xe3, 0xd3, 0x24,
0x8c, 0x66, 0xb7, 0x31, 0x0e, 0xcb, 0x76, 0x53, 0xf8, 0x8e, 0x3e, 0x6a, 0x43, 0x71, 0x6e, 0x5b,
0xee, 0x0a, 0x13, 0x8d, 0xb0, 0xe8, 0x2b, 0x72, 0xbc, 0x57, 0x49, 0x78, 0x9d, 0x90, 0x5c, 0x37,
0x85, 0x23, 0x7a, 0xe8, 0x4f, 0xf0, 0x30, 0x3c, 0x56, 0xc8, 0xbf, 0xba, 0xc4, 0xd4, 0x48, 0xb5,
0xc4, 0xf1, 0x8e, 0xef, 0xc3, 0xf3, 0xe5, 0xbb, 0x29, 0x9c, 0x88, 0x83, 0xce, 0x61, 0x7f, 0xbe,
0x32, 0xac, 0x9e, 0x59, 0x2d, 0x73, 0xc4, 0xc4, 0xd3, 0xda, 0x19, 0xf7, 0x46, 0x3d, 0x66, 0x33,
0x4f, 0x16, 0x35, 0x01, 0x2e, 0x55, 0xe7, 0x5a, 0xd1, 0x6c, 0x63, 0x45, 0xab, 0x95, 0x84, 0x93,
0xe1, 0xe5, 0x05, 0xe6, 0xf7, 0x7a, 0x20, 0xd9, 0x4d, 0xe3, 0x90, 0x1e, 0xaa, 0x41, 0xfe, 0xda,
0xd0, 0x3d, 0x10, 0x29, 0x21, 0xa8, 0x42, 0x20, 0xdd, 0x5e, 0x33, 0xc0, 0x58, 0x6b, 0x21, 0x0d,
0x0e, 0x75, 0xb2, 0x5a, 0x58, 0xb7, 0x0a, 0xa1, 0xd4, 0x30, 0xe7, 0xce, 0x84, 0x2c, 0x57, 0x0b,
0x95, 0x92, 0xea, 0x41, 0x42, 0xfc, 0x0b, 0xbc, 0x66, 0xa2, 0x42, 0x37, 0x8d, 0x37, 0x40, 0xa1,
0x13, 0xc8, 0x2c, 0xac, 0x79, 0x15, 0x71, 0xc4, 0xc3, 0x04, 0xc4, 0xbe, 0x35, 0xef, 0xa6, 0x31,
0x13, 0x42, 0x6f, 0x20, 0xcb, 0x6c, 0x34, 0x72, 0x69, 0xf5, 0x41, 0x82, 0x41, 0x85, 0x3c, 0xb3,
0xe7, 0xc8, 0x65, 0x9f, 0xe2, 0x0b, 0xa3, 0xdf, 0x41, 0x9e, 0xfb, 0x47, 0x21, 0xa6, 0x5e, 0x7d,
0x98, 0x10, 0xc0, 0x9e, 0xa6, 0x2f, 0xc3, 0xcc, 0x10, 0x28, 0xd4, 0xf3, 0x90, 0xf5, 0x5c, 0x55,
0xcf, 0xc1, 0xbe, 0x10, 0x95, 0x1f, 0xc3, 0xa3, 0xc4, 0xfc, 0x24, 0x3f, 0x85, 0x27, 0x1b, 0xd3,
0x8c, 0xfc, 0x02, 0x9e, 0x6d, 0x4b, 0x13, 0xf2, 0x21, 0x3c, 0x4c, 0x3a, 0xeb, 0x21, 0xd0, 0xbb,
0x67, 0x56, 0xfe, 0x1c, 0x2a, 0xb1, 0x03, 0xc8, 0xd2, 0xef, 0x82, 0x11, 0x53, 0x87, 0xd8, 0x3c,
0x97, 0xe7, 0xf1, 0x9a, 0x21, 0x3f, 0x81, 0xc7, 0x1b, 0x4e, 0x9b, 0xdc, 0x83, 0x07, 0x09, 0x81,
0xce, 0xf0, 0xb8, 0x3d, 0xf8, 0xfd, 0xe1, 0xe1, 0x05, 0x0c, 0xf4, 0x10, 0xf6, 0x6e, 0xd4, 0x85,
0x2b, 0x6e, 0x96, 0x3d, 0x2c, 0x06, 0xf2, 0xbf, 0xc3, 0xd3, 0x2d, 0x67, 0xe6, 0x1e, 0xc8, 0x13,
0x90, 0x7a, 0x73, 0xd3, 0xb2, 0xc9, 0xc8, 0xa5, 0xa3, 0xab, 0x91, 0xad, 0x13, 0xdb, 0xbb, 0x7e,
0xee, 0xf0, 0xd1, 0x21, 0xec, 0xf3, 0x15, 0x9d, 0x6a, 0xe6, 0x55, 0xe6, 0x78, 0x0f, 0x7b, 0x23,
0xf9, 0x7f, 0xd2, 0xc1, 0xdd, 0x26, 0xce, 0x18, 0x3a, 0x15, 0xf1, 0x33, 0x74, 0x97, 0x7c, 0xc5,
0xf2, 0xd9, 0xc3, 0x48, 0x14, 0x30, 0xa9, 0xa1, 0xbb, 0xc4, 0xbe, 0x10, 0xfa, 0x3d, 0xc0, 0xca,
0x5d, 0x2c, 0xa6, 0xab, 0xa6, 0xf5, 0xc1, 0xe4, 0xeb, 0x97, 0xcf, 0x9e, 0xdf, 0x51, 0xe9, 0x99,
0xe3, 0x40, 0x08, 0x87, 0x14, 0xd0, 0xd7, 0x00, 0xe2, 0x48, 0xb7, 0xf4, 0xb9, 0xb8, 0x22, 0xcb,
0x67, 0x8f, 0x13, 0xd4, 0xd9, 0x34, 0x0e, 0x89, 0xca, 0x5f, 0xc3, 0xa3, 0xc4, 0x23, 0x8e, 0x5e,
0x00, 0x38, 0x9c, 0x0a, 0x59, 0x2d, 0xc4, 0x91, 0xdf, 0xc0, 0xc3, 0xa4, 0x63, 0x7d, 0xaf, 0xde,
0xff, 0xa7, 0xe1, 0xd9, 0xb6, 0xf3, 0x8b, 0x64, 0x28, 0x52, 0x8f, 0x0e, 0x41, 0x44, 0x78, 0xe8,
0x2d, 0xec, 0xd2, 0xdb, 0x15, 0xf1, 0xec, 0xf4, 0xe6, 0xa3, 0x93, 0xc3, 0xa9, 0x4f, 0x4c, 0x6e,
0x57, 0x04, 0x73, 0x0c, 0x99, 0x40, 0x31, 0xcc, 0x45, 0x07, 0x50, 0x6a, 0x4f, 0xfb, 0xfd, 0x99,
0xd2, 0x9a, 0x4c, 0x7a, 0xc3, 0x8e, 0x22, 0xa5, 0x50, 0x01, 0xb2, 0xc3, 0xd6, 0xe4, 0x62, 0x84,
0xdf, 0x49, 0x69, 0x94, 0x83, 0xdd, 0x8b, 0x5e, 0xbb, 0x27, 0xed, 0xa0, 0x2c, 0x64, 0xa6, 0x4a,
0x5d, 0xca, 0xa0, 0x12, 0xe4, 0xeb, 0xfd, 0x69, 0x6b, 0x32, 0x1a, 0x4d, 0xba, 0xd2, 0x2e, 0x7a,
0x00, 0x95, 0x09, 0xee, 0x75, 0x3a, 0x2d, 0x3c, 0xab, 0x35, 0x26, 0xbd, 0xd1, 0x50, 0x91, 0xf6,
0xe4, 0x02, 0xe4, 0x83, 0x24, 0x23, 0xaf, 0xa0, 0x14, 0xc9, 0x20, 0x3f, 0x3a, 0x5c, 0x3e, 0x0f,
0x9f, 0x83, 0xf2, 0xd9, 0x93, 0x3b, 0xd2, 0x23, 0x97, 0x7e, 0xcf, 0x04, 0xfc, 0x23, 0xd2, 0x82,
0x4a, 0x2c, 0xf3, 0xfc, 0xa4, 0x93, 0xf6, 0x01, 0x8e, 0x58, 0x5a, 0xc0, 0xec, 0x68, 0x39, 0xd4,
0x37, 0xaf, 0x42, 0x2d, 0x5b, 0x9d, 0x73, 0xd7, 0x4d, 0x12, 0x5c, 0x17, 0xe6, 0xa1, 0xaf, 0x20,
0xe7, 0x78, 0x6a, 0x1c, 0xba, 0x10, 0xdb, 0xfc, 0x85, 0xd1, 0x36, 0x7c, 0x5c, 0x1c, 0x88, 0xca,
0xff, 0x99, 0x81, 0x62, 0x78, 0x8a, 0x95, 0x98, 0xe6, 0x7a, 0x0d, 0x4e, 0xb3, 0x32, 0x51, 0x37,
0x1c, 0x56, 0xf7, 0xe9, 0xde, 0x11, 0x0e, 0xc6, 0x2c, 0x2e, 0x6d, 0x32, 0x77, 0x17, 0x2a, 0xb5,
0xec, 0x5b, 0x7e, 0x42, 0xf2, 0x38, 0xc4, 0x41, 0xdf, 0x41, 0xf1, 0x83, 0x65, 0xbf, 0x37, 0xcc,
0xf9, 0x6c, 0x69, 0xe9, 0xa2, 0x92, 0x2c, 0xc7, 0x72, 0x37, 0xdb, 0xc0, 0x85, 0x10, 0x1a, 0x58,
0x3a, 0xc1, 0x85, 0x0f, 0xeb, 0x01, 0x7a, 0x03, 0x79, 0xd5, 0xa5, 0xd7, 0x42, 0x7b, 0x2f, 0xc1,
0x2d, 0x4c, 0xbb, 0xe6, 0xd2, 0x6b, 0xae, 0x9a, 0x53, 0x3d, 0x8a, 0x55, 0xbd, 0xda, 0xb5, 0x6a,
0x9a, 0x64, 0xc1, 0x0b, 0xc9, 0x12, 0xf6, 0x87, 0xe8, 0x14, 0xf6, 0xd5, 0xd5, 0xac, 0xae, 0x28,
0x5e, 0x11, 0xf8, 0xf8, 0x0e, 0x5c, 0x5d, 0x51, 0x1a, 0x57, 0x73, 0xbc, 0xa7, 0xae, 0xea, 0x8a,
0x82, 0xbe, 0x83, 0x8a, 0xb6, 0x30, 0x88, 0x49, 0x99, 0xce, 0x6c, 0x61, 0x38, 0xb4, 0x9a, 0xe3,
0xa5, 0xfb, 0x46, 0xc5, 0x92, 0x90, 0xaf, 0x2b, 0x4a, 0xdf, 0x70, 0x28, 0x7a, 0xca, 0x2f, 0x72,
0x32, 0x73, 0x1c, 0x43, 0xe7, 0xd5, 0x5c, 0x0e, 0xe7, 0x18, 0x43, 0x71, 0x0c, 0x9d, 0xe5, 0x3e,
0x93, 0xfc, 0xb0, 0xb4, 0x4c, 0x5e, 0xb3, 0xe4, 0xb0, 0x37, 0x92, 0xff, 0x2b, 0x0d, 0x79, 0xee,
0x19, 0xca, 0x4e, 0xef, 0x29, 0xec, 0x72, 0x03, 0x88, 0x28, 0x3e, 0xba, 0xeb, 0x5a, 0x26, 0xc5,
0x2d, 0xc0, 0xe5, 0xc2, 0x5f, 0xbf, 0x13, 0xfd, 0x7a, 0x04, 0xbb, 0x7c, 0x1f, 0xc2, 0x55, 0x9c,
0x46, 0x0d, 0xa8, 0x68, 0xae, 0x6d, 0x13, 0x33, 0x08, 0x3d, 0xee, 0xa7, 0xad, 0x31, 0x14, 0xd7,
0x90, 0xcf, 0x00, 0xd6, 0x26, 0x60, 0xcb, 0x28, 0x4a, 0xaf, 0xe9, 0xc7, 0x11, 0xa3, 0x91, 0x04,
0x99, 0xb1, 0xf2, 0xce, 0x7b, 0xbd, 0x30, 0x52, 0xfe, 0x04, 0x4a, 0x0a, 0xb5, 0x99, 0xab, 0x89,
0xe3, 0xb0, 0x50, 0x97, 0x20, 0xb3, 0x74, 0xe6, 0x9e, 0x16, 0x23, 0xe5, 0xd7, 0x80, 0x22, 0x22,
0x35, 0xdb, 0x56, 0x6f, 0x59, 0x48, 0x2e, 0x9d, 0x39, 0xa7, 0xf9, 0x3b, 0x2a, 0x8f, 0x83, 0xb1,
0x7c, 0x0a, 0xc5, 0xd6, 0x0d, 0x31, 0xa9, 0x77, 0x9a, 0x58, 0x88, 0x32, 0xa7, 0x11, 0x93, 0xe5,
0x21, 0x0e, 0x9d, 0xc1, 0x21, 0x8e, 0xac, 0x02, 0x70, 0x79, 0x7e, 0xb0, 0xd1, 0x11, 0x64, 0xa9,
0xc3, 0x17, 0x14, 0xbb, 0xe8, 0xa6, 0xb0, 0xcf, 0x40, 0x87, 0xb0, 0x47, 0x2f, 0x2d, 0x4b, 0xd8,
0x34, 0xd7, 0x4d, 0x61, 0x31, 0x44, 0x55, 0xd8, 0xa7, 0x86, 0x49, 0xdf, 0x9c, 0x73, 0xab, 0x66,
0x58, 0x25, 0x28, 0xc6, 0xf5, 0x3d, 0xc8, 0xdc, 0xa8, 0x0b, 0xb9, 0x0f, 0x7b, 0x7c, 0x09, 0x66,
0x16, 0xba, 0xde, 0x05, 0xa7, 0xd1, 0xe7, 0xc1, 0xed, 0xb7, 0x93, 0x10, 0x56, 0xeb, 0xad, 0x05,
0xd7, 0xe2, 0x9f, 0xe1, 0x21, 0x3b, 0xfb, 0x4d, 0xc3, 0x1e, 0xd9, 0x6d, 0x63, 0x41, 0xfc, 0x0f,
0x95, 0x20, 0xa3, 0x1b, 0x7e, 0xb5, 0xc0, 0x48, 0x16, 0x5c, 0x2b, 0x9b, 0x5c, 0x19, 0x3f, 0x78,
0x46, 0xf7, 0x46, 0xcc, 0x24, 0x96, 0xb9, 0xb8, 0x6d, 0x5b, 0x0b, 0x76, 0x2d, 0x8b, 0xa7, 0x5f,
0x88, 0xc3, 0xae, 0xaf, 0xd8, 0x0a, 0xce, 0xca, 0x32, 0x1d, 0x22, 0x8e, 0xbb, 0xe3, 0x2e, 0xe8,
0x58, 0xa5, 0xd7, 0xfe, 0x35, 0xb4, 0xe6, 0xc8, 0x23, 0xa8, 0x60, 0xa2, 0xea, 0xe1, 0x5d, 0x21,
0xd8, 0x5d, 0xad, 0x85, 0x39, 0xcd, 0xb2, 0xa0, 0xc3, 0xee, 0x37, 0xbe, 0xad, 0x0c, 0x16, 0x03,
0x26, 0xa9, 0xab, 0x54, 0xe5, 0xfb, 0x29, 0x62, 0x4e, 0xcb, 0xaf, 0x41, 0x5a, 0x03, 0x7a, 0x9b,
0x78, 0x06, 0x79, 0x9b, 0xa8, 0x7a, 0xc3, 0x72, 0x4d, 0xea, 0x59, 0x72, 0xcd, 0x90, 0x6f, 0x40,
0xba, 0xb0, 0x0d, 0x4a, 0xee, 0xdb, 0xc3, 0x21, 0x4b, 0x03, 0x2b, 0x56, 0x4f, 0x8a, 0x9c, 0xe6,
0x8d, 0x58, 0xb6, 0x5d, 0xba, 0x0e, 0x1d, 0x5a, 0xb4, 0xf5, 0x03, 0x3b, 0xeb, 0xc2, 0x3a, 0x11,
0x5e, 0xb0, 0xd3, 0xdd, 0xd0, 0x4e, 0x7f, 0x09, 0x15, 0xb6, 0x64, 0xcf, 0xbc, 0xb2, 0xb6, 0x2c,
0x2b, 0xff, 0x15, 0xa4, 0xb5, 0x98, 0xf7, 0x41, 0x49, 0x49, 0x97, 0x9d, 0x53, 0xe3, 0xdf, 0x88,
0x67, 0x21, 0x4e, 0x33, 0x1e, 0xcf, 0x02, 0x19, 0x7e, 0xa4, 0x83, 0x93, 0xbe, 0xb4, 0xf4, 0x89,
0xb1, 0x14, 0xb9, 0x35, 0x83, 0xfd, 0x21, 0x33, 0xb2, 0xe1, 0x34, 0x0d, 0x9b, 0x67, 0xcd, 0x1c,
0x16, 0x03, 0xf9, 0x5f, 0x40, 0x0a, 0xaa, 0x8a, 0xd0, 0x09, 0x11, 0xa5, 0x44, 0xd8, 0xab, 0x6b,
0x0e, 0xfa, 0x0c, 0xca, 0xd4, 0x58, 0x12, 0xcb, 0xa5, 0x0a, 0xd1, 0x2c, 0x53, 0x77, 0xbc, 0xa4,
0x12, 0xe3, 0xca, 0x2f, 0xa0, 0x18, 0x60, 0xbf, 0xb5, 0x2e, 0xe3, 0x9d, 0x08, 0xf9, 0xd3, 0xd0,
0xda, 0x6f, 0xad, 0x4b, 0x9e, 0x1c, 0x25, 0xc8, 0x18, 0xba, 0x68, 0x86, 0x94, 0x30, 0x23, 0xe5,
0xef, 0xa1, 0xda, 0xed, 0x35, 0xb1, 0x6b, 0x9a, 0x86, 0x39, 0x7f, 0x6b, 0x5d, 0xf2, 0xdc, 0x86,
0x79, 0x8c, 0x85, 0x10, 0x33, 0xbc, 0xb7, 0x81, 0x60, 0xf7, 0x66, 0xd9, 0xd3, 0x7d, 0x2b, 0x31,
0x9a, 0x39, 0xd6, 0xb1, 0x5c, 0x5b, 0x23, 0x5e, 0x8e, 0xf3, 0x46, 0xf2, 0x5f, 0xa1, 0x12, 0xfa,
0x72, 0x0e, 0xf7, 0x6b, 0xc8, 0xfc, 0xc5, 0xba, 0xe4, 0x78, 0xf1, 0x64, 0x17, 0xde, 0x28, 0x66,
0x52, 0xcc, 0x4a, 0x86, 0xd3, 0x36, 0x4c, 0xc3, 0xb9, 0x0e, 0x2e, 0xc2, 0x10, 0x67, 0x7d, 0x36,
0xde, 0x3a, 0x96, 0xb9, 0xbe, 0x0a, 0x7d, 0x8e, 0x7c, 0x0a, 0x85, 0x7e, 0xab, 0x19, 0xdc, 0xb4,
0x2f, 0xa1, 0x70, 0xb9, 0x30, 0xcc, 0xf7, 0x33, 0x2d, 0x88, 0xe3, 0x12, 0x06, 0xce, 0x12, 0x81,
0xfc, 0xbf, 0xbb, 0x50, 0x16, 0x2f, 0x8c, 0x40, 0xa7, 0x0a, 0x59, 0x62, 0x8a, 0x8b, 0x38, 0x2d,
0x5a, 0x39, 0xde, 0x90, 0x99, 0xf1, 0xc6, 0xd0, 0xfd, 0xdc, 0x7a, 0x63, 0x70, 0xce, 0x2a, 0xc8,
0xf3, 0x8c, 0xe4, 0x91, 0xad, 0x9a, 0xee, 0x95, 0xaa, 0x51, 0xd7, 0x26, 0x36, 0x8f, 0x97, 0x3c,
0x8e, 0xf0, 0xd8, 0x0a, 0x2b, 0xdb, 0xd2, 0x5d, 0x8d, 0xf2, 0xb0, 0xc9, 0x63, 0x7f, 0xc8, 0xcd,
0x4a, 0x6c, 0x43, 0x15, 0xf7, 0x29, 0x33, 0x2b, 0x1f, 0xa1, 0x17, 0x50, 0x70, 0x1d, 0x32, 0x6b,
0x34, 0x1b, 0xb3, 0x56, 0x63, 0xc0, 0xef, 0xd4, 0x1c, 0xce, 0xbb, 0x0e, 0x69, 0x34, 0x1b, 0xad,
0xc6, 0x80, 0xdd, 0x7e, 0x6c, 0x1e, 0x0f, 0x9b, 0x3d, 0x85, 0xf7, 0x46, 0x72, 0x38, 0xe7, 0x3a,
0x84, 0x8f, 0xd1, 0x31, 0x48, 0x6c, 0xb2, 0xdb, 0x6b, 0xce, 0xde, 0xb5, 0xfe, 0xb9, 0x3e, 0xaa,
0xe1, 0xa6, 0x77, 0x43, 0x96, 0x5d, 0x87, 0x74, 0x7b, 0x4d, 0x9f, 0x8b, 0x64, 0x28, 0xf9, 0x92,
0x83, 0xd1, 0x54, 0x69, 0xf1, 0x36, 0x46, 0x0e, 0x17, 0x84, 0x18, 0x67, 0xf9, 0x5b, 0x61, 0x32,
0xb8, 0x76, 0xc1, 0x9b, 0x14, 0x62, 0x2b, 0x2c, 0x9e, 0x6a, 0x17, 0xe8, 0x31, 0x64, 0xd9, 0xfc,
0x74, 0xa0, 0xf0, 0x86, 0x43, 0x0e, 0xef, 0xbb, 0x0e, 0x99, 0x0e, 0x14, 0xf4, 0x1c, 0x80, 0x4d,
0x28, 0x2d, 0xdc, 0xab, 0xf5, 0xbd, 0x8b, 0x98, 0xe9, 0x09, 0x06, 0x7a, 0x0b, 0x65, 0xdb, 0xd4,
0x0d, 0x67, 0x16, 0x94, 0x58, 0xa2, 0x1b, 0xf0, 0x8b, 0x68, 0x7d, 0x18, 0xf1, 0x55, 0x8b, 0x5e,
0x13, 0xdb, 0x24, 0x14, 0x97, 0xb8, 0x6a, 0xe0, 0xc2, 0x01, 0x48, 0x9a, 0xae, 0xcd, 0x88, 0xb6,
0x5c, 0xa3, 0x55, 0x3e, 0x1e, 0xad, 0xac, 0xe9, 0x5a, 0x4b, 0x5b, 0x06, 0x70, 0x35, 0x28, 0xba,
0xcb, 0xd0, 0xc6, 0x44, 0x9f, 0xe0, 0xc5, 0x16, 0xa8, 0xe9, 0x40, 0xc1, 0x05, 0x77, 0x19, 0xec,
0x48, 0x1e, 0xc3, 0x61, 0xf2, 0x62, 0xbc, 0x70, 0xb1, 0x1c, 0x3a, 0x53, 0x75, 0xdd, 0xbf, 0x56,
0x72, 0x8c, 0x51, 0xd3, 0x75, 0x1b, 0x3d, 0x81, 0x9c, 0x4e, 0x6e, 0xc4, 0x9c, 0x08, 0xbb, 0xac,
0x4e, 0x6e, 0xd8, 0x94, 0xfc, 0x7b, 0x38, 0xb8, 0xb3, 0x26, 0x4b, 0x47, 0x9a, 0x6e, 0x5b, 0x4b,
0x2f, 0x72, 0xc5, 0x80, 0x1d, 0xe0, 0x2b, 0x63, 0x11, 0xb4, 0x34, 0x19, 0x2d, 0xcf, 0xe0, 0x13,
0xf1, 0xce, 0x20, 0xba, 0xbf, 0x95, 0x9e, 0x49, 0x89, 0x7d, 0xa5, 0x6a, 0x24, 0xf8, 0xf0, 0x6f,
0x61, 0x97, 0x97, 0x62, 0xa2, 0x8b, 0x1a, 0xed, 0x8e, 0x6d, 0xd4, 0xc2, 0x5c, 0x47, 0xfe, 0x8f,
0x0c, 0x3c, 0xd9, 0x8c, 0x9c, 0x94, 0x8d, 0xbf, 0xf3, 0x32, 0xaf, 0x78, 0x17, 0xfc, 0xfa, 0xe3,
0x56, 0x3b, 0x0d, 0x15, 0x64, 0x2c, 0x79, 0xac, 0x98, 0x71, 0x88, 0xe3, 0x9c, 0xfb, 0xc9, 0x61,
0xcd, 0x61, 0x05, 0x8d, 0x49, 0xe8, 0x52, 0x75, 0xde, 0x9f, 0x7b, 0xe7, 0x32, 0x18, 0x87, 0x4f,
0xfd, 0x5e, 0xf4, 0xd4, 0x8f, 0x00, 0xe9, 0xd7, 0xda, 0x4a, 0x21, 0xf6, 0x0d, 0xb1, 0x83, 0xda,
0x4d, 0x34, 0x4e, 0x5f, 0x46, 0x36, 0xd9, 0xec, 0x36, 0xc6, 0x51, 0x31, 0x9c, 0xa0, 0x8a, 0x3e,
0x85, 0x92, 0x1f, 0x4a, 0x3d, 0x73, 0xea, 0x10, 0xef, 0x38, 0x47, 0x99, 0x72, 0x03, 0x76, 0x79,
0x8d, 0x0d, 0xb0, 0x3f, 0xa8, 0x0d, 0xa7, 0xb5, 0xbe, 0x94, 0x42, 0x15, 0x28, 0xb0, 0x35, 0x66,
0x8d, 0x7e, 0xaf, 0x35, 0x9c, 0x48, 0xe9, 0x80, 0xa1, 0xb4, 0xf0, 0xf7, 0x2d, 0x2c, 0xed, 0xb0,
0xe7, 0xdc, 0x74, 0x38, 0xa8, 0x0d, 0x6b, 0x9d, 0x56, 0x53, 0xca, 0xc8, 0x7f, 0xcb, 0x00, 0xba,
0xbb, 0xab, 0x75, 0xb5, 0x36, 0xb6, 0xec, 0x20, 0x2b, 0xae, 0x39, 0xe8, 0x18, 0x2a, 0x62, 0x14,
0x98, 0xdb, 0x8b, 0x9d, 0x38, 0x9b, 0xb7, 0x50, 0x88, 0xea, 0xf0, 0x42, 0xc0, 0xb3, 0xf8, 0x9a,
0x81, 0x4e, 0x40, 0x32, 0x2d, 0xca, 0x1e, 0x0e, 0x96, 0x6d, 0x50, 0x95, 0xf7, 0xc0, 0x45, 0x9b,
0xfb, 0x0e, 0x1f, 0x9d, 0x02, 0xd2, 0xad, 0xa1, 0x45, 0xeb, 0x86, 0xa9, 0xaf, 0x97, 0x15, 0xbe,
0x48, 0x98, 0x61, 0xf7, 0xa5, 0xa6, 0x2e, 0x16, 0x97, 0xaa, 0xf6, 0xde, 0x6b, 0xdf, 0x89, 0x94,
0x19, 0xe3, 0xa2, 0x73, 0xd8, 0xb7, 0x55, 0x73, 0x4e, 0x9c, 0x6a, 0x96, 0x47, 0xf1, 0xb3, 0x0d,
0x2e, 0xc3, 0x4c, 0x08, 0x7b, 0xb2, 0xa8, 0x0d, 0x59, 0x6b, 0x25, 0x7e, 0x42, 0x10, 0xef, 0x90,
0x7f, 0xbc, 0xc7, 0xd3, 0xa7, 0x23, 0x21, 0xde, 0x32, 0xa9, 0x7d, 0x8b, 0x7d, 0x65, 0xd4, 0x80,
0x82, 0xc3, 0x3e, 0x50, 0xeb, 0x5a, 0x0e, 0x75, 0xaa, 0x79, 0x8e, 0xf5, 0xc9, 0x26, 0xac, 0x40,
0x12, 0x87, 0xb5, 0x8e, 0xbe, 0x85, 0x62, 0x18, 0x9d, 0xdd, 0x3a, 0xef, 0xc9, 0xad, 0xe7, 0x37,
0x46, 0x46, 0x5f, 0xbc, 0x79, 0xef, 0xc5, 0xfb, 0xed, 0xce, 0x37, 0x69, 0xd9, 0x82, 0x4a, 0xec,
0x1b, 0xf9, 0x1d, 0xca, 0x88, 0xbe, 0xf5, 0x21, 0xe8, 0x7b, 0x85, 0x38, 0xc1, 0xfc, 0x74, 0xb5,
0x22, 0x7e, 0xda, 0x09, 0x71, 0x02, 0x9f, 0xf3, 0x7a, 0x28, 0xec, 0x73, 0xc6, 0x90, 0xbf, 0x81,
0x87, 0x49, 0x5f, 0xc4, 0x5f, 0x1d, 0xaa, 0x16, 0xbc, 0x3a, 0x54, 0x8d, 0xd7, 0x19, 0x2b, 0x0f,
0x7f, 0xc7, 0x58, 0xc9, 0x59, 0xd8, 0x6b, 0x2d, 0x57, 0xf4, 0xf6, 0xe4, 0x37, 0x20, 0xc5, 0x3b,
0x46, 0x68, 0x1f, 0x76, 0xa6, 0x63, 0x29, 0x85, 0x72, 0xb0, 0xdb, 0x1c, 0x5d, 0x0c, 0xa5, 0x34,
0xca, 0x42, 0x66, 0xd4, 0x6e, 0x4b, 0x3b, 0x27, 0x9f, 0x03, 0xac, 0x3b, 0x44, 0xec, 0xbc, 0xe0,
0x9e, 0xd2, 0x1b, 0x76, 0x44, 0xf3, 0xa3, 0x5d, 0xeb, 0xf7, 0xd9, 0x80, 0x37, 0x3f, 0xea, 0xa3,
0x49, 0x57, 0xda, 0x39, 0xf9, 0xbf, 0x34, 0x64, 0xbd, 0xb6, 0x04, 0xca, 0xc3, 0xde, 0x70, 0x3a,
0x98, 0x7d, 0x21, 0xa5, 0x7c, 0xf2, 0x4c, 0x4a, 0xfb, 0xe4, 0x97, 0xd2, 0x8e, 0x4f, 0x9e, 0x4b,
0x19, 0x9f, 0xfc, 0x4a, 0xda, 0xf5, 0xc9, 0x37, 0xd2, 0x9e, 0x4f, 0x7e, 0x2d, 0xed, 0xfb, 0xe4,
0x37, 0x52, 0xd6, 0x27, 0x7f, 0x2b, 0xe5, 0xd8, 0x8e, 0xf8, 0x12, 0xaf, 0xa5, 0x7c, 0x40, 0x7f,
0x21, 0x41, 0x40, 0x9f, 0x49, 0x85, 0x80, 0xfe, 0x52, 0x2a, 0x06, 0xf4, 0xb9, 0x54, 0x0a, 0xe8,
0xaf, 0xa4, 0x72, 0x40, 0xbf, 0x91, 0x2a, 0x01, 0xfd, 0xb5, 0x24, 0x05, 0xf4, 0x37, 0xd2, 0x41,
0x40, 0xff, 0x56, 0x42, 0x3e, 0x7d, 0xf6, 0x5a, 0x7a, 0x70, 0xf2, 0x1b, 0x28, 0x86, 0x5b, 0x2b,
0xcc, 0x78, 0xfd, 0xd1, 0x85, 0xb0, 0x67, 0xb7, 0xd7, 0xe9, 0x4a, 0x69, 0x26, 0x3e, 0x19, 0x75,
0x3a, 0xfd, 0x96, 0xb4, 0x73, 0xd2, 0x84, 0x4a, 0xac, 0x61, 0xc0, 0x6c, 0x39, 0x1d, 0xbe, 0x1b,
0x32, 0xdb, 0xa7, 0x98, 0x37, 0x6a, 0x63, 0xe1, 0x03, 0x65, 0x52, 0x93, 0x76, 0xd0, 0x03, 0xa8,
0x28, 0x93, 0xda, 0xac, 0x5d, 0xeb, 0xf5, 0x47, 0xdf, 0xb7, 0xf0, 0xac, 0x36, 0x96, 0x32, 0x27,
0x4d, 0x28, 0x45, 0xde, 0xcd, 0xe8, 0x11, 0x1c, 0x30, 0xa9, 0xe1, 0x68, 0x32, 0x6b, 0x8c, 0x86,
0xc3, 0x56, 0x63, 0xd2, 0x6a, 0x0a, 0xc3, 0xd7, 0xc6, 0xb3, 0x29, 0x03, 0x3c, 0x80, 0x12, 0x93,
0x58, 0xcf, 0xee, 0x9c, 0x7c, 0x26, 0xba, 0x27, 0x7e, 0xfb, 0x01, 0x15, 0x21, 0x77, 0x31, 0xae,
0x9d, 0xcd, 0xc6, 0xca, 0x3b, 0xb1, 0xff, 0xd1, 0xb8, 0x35, 0x94, 0xd2, 0x67, 0x7f, 0xab, 0xc2,
0xfe, 0xf8, 0xfc, 0x62, 0x38, 0xfe, 0x02, 0x0d, 0xa0, 0xda, 0x21, 0xd4, 0xbf, 0xdf, 0x22, 0xd7,
0x24, 0x42, 0xd1, 0x7b, 0x85, 0x05, 0xdc, 0xd1, 0xd3, 0x2d, 0x57, 0xb9, 0x9c, 0x42, 0x5d, 0x78,
0x20, 0xb0, 0x7e, 0x36, 0x52, 0x1b, 0x0e, 0x3a, 0x84, 0xc6, 0x0a, 0xce, 0x9f, 0x80, 0x33, 0x82,
0x03, 0xe5, 0x0e, 0xce, 0x36, 0x9d, 0xfb, 0x00, 0xff, 0x00, 0xe5, 0x0e, 0xa1, 0xe1, 0xd2, 0x39,
0x69, 0x57, 0xd5, 0x08, 0x2f, 0x24, 0x2d, 0x10, 0x94, 0x28, 0xc2, 0x46, 0xe9, 0xa3, 0x04, 0x6c,
0x39, 0x85, 0x9a, 0x50, 0x1c, 0xb0, 0xa2, 0x7c, 0x3a, 0x50, 0xf8, 0xed, 0x71, 0x4f, 0x81, 0xb5,
0x01, 0x65, 0x06, 0x2f, 0x85, 0xb3, 0x36, 0x17, 0x1f, 0x1f, 0x59, 0xc8, 0x6c, 0x58, 0xc0, 0x82,
0x5f, 0x75, 0x08, 0xad, 0x2d, 0x16, 0xf7, 0xd7, 0x4f, 0x49, 0x36, 0x3c, 0x8d, 0x26, 0xff, 0xfb,
0x30, 0xe4, 0x14, 0x5a, 0xc0, 0xa7, 0xa1, 0x68, 0xde, 0xbc, 0x5a, 0xb4, 0x63, 0x15, 0x69, 0xe8,
0x1c, 0x7d, 0xe4, 0x27, 0xcb, 0x29, 0x34, 0xe0, 0xef, 0x4b, 0xec, 0x9a, 0xde, 0xfd, 0xf9, 0x3c,
0xf9, 0xc5, 0xe6, 0x3d, 0x6b, 0x8f, 0x9e, 0x6d, 0x9a, 0x66, 0x4f, 0x32, 0x0e, 0x57, 0x09, 0xc3,
0xb1, 0x17, 0xeb, 0x3d, 0x88, 0x9b, 0x9f, 0x88, 0x72, 0x0a, 0x61, 0x78, 0xd4, 0xed, 0x35, 0x3b,
0x84, 0xae, 0xdf, 0x8d, 0xe2, 0x95, 0xb9, 0x59, 0xeb, 0xde, 0x2d, 0xb6, 0x00, 0x75, 0x7b, 0xcd,
0x86, 0x6a, 0x6a, 0x64, 0xb1, 0xde, 0xe5, 0x16, 0xc0, 0xe4, 0xb8, 0x18, 0xc2, 0x63, 0xb1, 0x35,
0xef, 0x55, 0x1d, 0xc8, 0x27, 0xc7, 0xc1, 0xf3, 0x8d, 0xf8, 0xec, 0xc9, 0x2e, 0xa7, 0x50, 0x1d,
0x0e, 0x83, 0x6d, 0xd5, 0x16, 0x8b, 0x7b, 0xe0, 0x92, 0xf7, 0xf4, 0x47, 0xdf, 0x5c, 0xb1, 0x97,
0xfe, 0xb6, 0xaf, 0xfb, 0x65, 0x7c, 0x2a, 0xb1, 0x4b, 0xc0, 0x37, 0x58, 0x68, 0x2b, 0x41, 0x1b,
0x28, 0xe6, 0xd6, 0x78, 0x7b, 0x68, 0xc3, 0x06, 0xdf, 0x01, 0xb4, 0x15, 0xbf, 0xf9, 0x84, 0xa2,
0x9e, 0x8a, 0x35, 0xb9, 0x62, 0x16, 0x8b, 0x77, 0xac, 0xb8, 0x07, 0x4a, 0x6d, 0xa5, 0x43, 0xa8,
0xdf, 0xfb, 0x89, 0xe1, 0xc5, 0x3a, 0x47, 0x31, 0xbc, 0x78, 0xc3, 0x48, 0x4e, 0xa1, 0x3f, 0xc3,
0xa3, 0xb6, 0xd2, 0xb0, 0x89, 0x4a, 0x49, 0xa4, 0x53, 0x87, 0x62, 0xff, 0x3b, 0x48, 0xe8, 0x13,
0x1e, 0xc9, 0xdb, 0x44, 0x82, 0x15, 0xfe, 0x00, 0x05, 0xde, 0x7b, 0xec, 0xf3, 0xb2, 0x3a, 0xe6,
0x95, 0x70, 0x83, 0x35, 0x6e, 0x3e, 0x36, 0x25, 0xa7, 0x5e, 0xa7, 0x51, 0x07, 0x0a, 0x2d, 0xed,
0x3a, 0xe8, 0x86, 0x6d, 0xcb, 0x01, 0x5b, 0xe6, 0xe4, 0x14, 0xea, 0x01, 0x12, 0x29, 0x26, 0xf2,
0x53, 0xc5, 0xe6, 0xe6, 0xf4, 0xd1, 0x61, 0x72, 0x83, 0x5c, 0x4e, 0xa1, 0xdf, 0x41, 0xb1, 0x43,
0xe8, 0xba, 0xb1, 0x9e, 0x14, 0xaf, 0x9b, 0xb5, 0xdb, 0x70, 0x28, 0xcc, 0x11, 0x30, 0x1b, 0xd7,
0xa2, 0x28, 0xff, 0x71, 0x38, 0x18, 0x0e, 0x14, 0x6a, 0xd9, 0xe4, 0xc2, 0xb8, 0x5a, 0x7f, 0xcf,
0xaf, 0x62, 0xe2, 0x9b, 0x7e, 0x0f, 0xda, 0x10, 0xae, 0x63, 0x78, 0xc4, 0x72, 0x0f, 0x83, 0xd5,
0x23, 0xb8, 0xdb, 0xec, 0xbe, 0xd9, 0x86, 0x1c, 0xb1, 0xea, 0xfd, 0xde, 0xf7, 0xe3, 0x40, 0x37,
0x7f, 0xf7, 0x00, 0x9e, 0x70, 0x2c, 0xff, 0xc2, 0xf8, 0x68, 0xc8, 0xe4, 0x4f, 0x1e, 0x09, 0x77,
0x24, 0x6c, 0x2f, 0xc9, 0x1d, 0x2f, 0x37, 0xe3, 0x8b, 0x1f, 0x0e, 0x98, 0x5f, 0x9e, 0x86, 0xae,
0xb3, 0x3b, 0xff, 0xe1, 0xba, 0x3f, 0x57, 0xc6, 0x55, 0xf8, 0xa5, 0xff, 0x5c, 0x00, 0xc6, 0xe7,
0x30, 0x59, 0x2d, 0xd8, 0x6b, 0x71, 0x3b, 0xc2, 0xfd, 0x0b, 0xfc, 0x11, 0x9e, 0x24, 0x2f, 0x50,
0xd3, 0xf5, 0x9f, 0x0d, 0xfe, 0x27, 0x78, 0xb6, 0x69, 0xf7, 0x4b, 0xeb, 0xe6, 0xe7, 0x6f, 0x7e,
0x02, 0x4f, 0xd7, 0x2e, 0x8c, 0xcf, 0xff, 0x64, 0x3f, 0xf6, 0xe1, 0x11, 0x47, 0xbc, 0xe3, 0xc1,
0x7b, 0xb6, 0x9b, 0x1c, 0x66, 0x97, 0xf0, 0x8b, 0xf0, 0x39, 0xd8, 0xe4, 0xc7, 0x6d, 0xf1, 0xfb,
0x11, 0x76, 0x7e, 0xb9, 0x6d, 0x0d, 0xe6, 0xca, 0x9f, 0x83, 0x7f, 0xb9, 0xcf, 0xff, 0xa6, 0xf8,
0xe5, 0xdf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x28, 0xa1, 0xe9, 0x7d, 0xb4, 0x28, 0x00, 0x00,
}

View File

@ -50,11 +50,15 @@ service P4WNP1 {
rpc ListStoredWifiSettings(Empty) returns (StringMessageArray) {}
// TriggerActions
rpc GetDeployedTriggerActionSet(Empty) returns (TriggerActionSet) {}
rpc DeployTriggerActionSetReplace(TriggerActionSet) returns (TriggerActionSet) {} // Replaces registered TriggerActions with given set, returns a set ONLY OF ADDED TriggerActions (with assigned IDs)
rpc DeployTriggerActionSetAdd(TriggerActionSet) returns (TriggerActionSet) {} // Adds a set of additional TriggerActions, returns a set of all Triggeractions registered afterwards
rpc DeployTriggerActionSetRemove(TriggerActionSet) returns (TriggerActionSet) {} // Removes registered TriggerActions from given set, returns a set ONLY OF REMOVED TriggerActions (with assigned IDs)
rpc ListStoredTriggerActionSets(Empty) returns (StringMessageArray) {}
rpc StoreTriggerActionSet(TriggerActionSet) returns (Empty) {}
rpc GetTriggerActionsState(Empty) returns (TriggerActionSet) {}
rpc DeployTriggerActionSetReplace(TriggerActionSet) returns (TriggerActionSet) {} // Adds a set of additional TriggerActions, returns a set of all Triggeractions registered afterwards
rpc DeployTriggerActionSetAdd(TriggerActionSet) returns (TriggerActionSet) {} // Replaces registered TriggerActions with given set, returns a set ONLY OF ADDED TriggerActions (with assigned IDs)
rpc DeployStoredTriggerActionSetReplace(StringMessage) returns (TriggerActionSet) {} // Adds a set of additional TriggerActions, returns a set of all Triggeractions registered afterwards
rpc DeployStoredTriggerActionSetAdd(StringMessage) returns (TriggerActionSet) {} // Replaces registered TriggerActions with given set, returns a set ONLY OF ADDED TriggerActions (with assigned IDs)
}
/* Triggers, Actions and resulting TriggerActions */

View File

@ -39,6 +39,24 @@ type server struct {
listenAddrWeb string
}
func (s *server) DeployStoredTriggerActionSetReplace(ctx context.Context, msg *pb.StringMessage) (tas *pb.TriggerActionSet, err error) {
// load set from store
tas = &pb.TriggerActionSet{}
err = s.rootSvc.SubSysDataStore.Get(cSTORE_PREFIX_TRIGGER_ACTION_SET + msg.Msg, tas)
if err != nil { return }
return s.DeployTriggerActionSetReplace(ctx,tas)
}
func (s *server) DeployStoredTriggerActionSetAdd(ctx context.Context, msg *pb.StringMessage) (tas *pb.TriggerActionSet, err error) {
// load set from store
tas = &pb.TriggerActionSet{}
err = s.rootSvc.SubSysDataStore.Get(cSTORE_PREFIX_TRIGGER_ACTION_SET + msg.Msg, tas)
if err != nil { return }
return s.DeployTriggerActionSetAdd(ctx,tas)
}
func (s *server) StoreTriggerActionSet(ctx context.Context, set *pb.TriggerActionSet) (e *pb.Empty, err error) {
e = &pb.Empty{}
err = s.rootSvc.SubSysDataStore.Put(cSTORE_PREFIX_TRIGGER_ACTION_SET+ set.Name, set, true)
@ -56,7 +74,7 @@ func (s *server) ListStoredTriggerActionSets(ctx context.Context, e *pb.Empty) (
return
}
func (s *server) GetTriggerActionsState(context.Context, *pb.Empty) (*pb.TriggerActionSet, error) {
func (s *server) GetDeployedTriggerActionSet(context.Context, *pb.Empty) (*pb.TriggerActionSet, error) {
return s.rootSvc.SubSysTriggerActions.GetCurrentTriggerActionSet(), nil
}
@ -66,7 +84,7 @@ func (s *server) DeployTriggerActionSetReplace(ctx context.Context, tas *pb.Trig
// Add the new set
_,err = s.DeployTriggerActionSetAdd(ctx, tas)
if err != nil { return s.rootSvc.SubSysTriggerActions.GetCurrentTriggerActionSet(),err }
return s.GetTriggerActionsState(ctx, &pb.Empty{})
return s.GetDeployedTriggerActionSet(ctx, &pb.Empty{})
}
func (s *server) DeployTriggerActionSetAdd(ctx context.Context, tas *pb.TriggerActionSet) (resTas *pb.TriggerActionSet, err error) {
@ -76,9 +94,24 @@ func (s *server) DeployTriggerActionSetAdd(ctx context.Context, tas *pb.TriggerA
if err != nil { return s.rootSvc.SubSysTriggerActions.GetCurrentTriggerActionSet(),err }
}
return &pb.TriggerActionSet{TriggerActions:addedTA},nil
resTas = &pb.TriggerActionSet{TriggerActions:addedTA, Name: "Added TriggerActions"}
return
}
func (s *server) DeployTriggerActionSetRemove(ctx context.Context, removeTas *pb.TriggerActionSet) (removedTas *pb.TriggerActionSet, err error) {
removedOnes := make([]*pb.TriggerAction,0)
for _,removeTa := range removeTas.TriggerActions {
removed,err := s.rootSvc.SubSysTriggerActions.RemoveTriggerAction(removeTa)
if err != nil { return s.rootSvc.SubSysTriggerActions.GetCurrentTriggerActionSet(),err }
removedOnes = append(removedOnes, removed)
}
removedTas = &pb.TriggerActionSet{TriggerActions:removedOnes, Name:"removed TriggerActions"}
return
}
func NewRpcServerService(root *Service) *server {
return &server{
rootSvc:root,

View File

@ -14,7 +14,8 @@ type TriggerActionManager struct {
evtRcv *EventReceiver
registeredTriggerActionMutex *sync.Mutex
registeredTriggerAction []*pb.TriggerAction
//registeredTriggerAction []*pb.TriggerAction
registeredTriggerActions pb.TriggerActionSet
nextID uint32
}
@ -192,7 +193,7 @@ func (tam *TriggerActionManager) dispatchTriggerEvent(evt *pb.Event) {
tam.registeredTriggerActionMutex.Lock()
defer tam.registeredTriggerActionMutex.Unlock()
markedForRemoval := []int{}
for _,ta := range tam.registeredTriggerAction {
for _,ta := range tam.registeredTriggerActions.TriggerActions {
// ToDo: handle errors of fireAction* methods
// ToDo: fire action methods have to return an additional int, indicating if the action has really fired (filter function in action could prevent this, which would cause wrong behavior for OneShot riggerActions)
@ -235,8 +236,8 @@ func (tam *TriggerActionManager) dispatchTriggerEvent(evt *pb.Event) {
//fmt.Println("Indexes of TriggerActions to remove, because thy are OneShots and have fired", markedForRemoval)
for _,delIdx := range markedForRemoval {
// doesn't preserve order
tam.registeredTriggerAction[delIdx] = tam.registeredTriggerAction[len(tam.registeredTriggerAction)-1]
tam.registeredTriggerAction = tam.registeredTriggerAction[:len(tam.registeredTriggerAction)-1]
tam.registeredTriggerActions.TriggerActions[delIdx] = tam.registeredTriggerActions.TriggerActions[len(tam.registeredTriggerActions.TriggerActions)-1]
tam.registeredTriggerActions.TriggerActions = tam.registeredTriggerActions.TriggerActions[:len(tam.registeredTriggerActions.TriggerActions)-1]
}
return
}
@ -247,18 +248,37 @@ func (tam *TriggerActionManager) AddTriggerAction(ta *pb.TriggerAction) (taAdded
defer tam.registeredTriggerActionMutex.Unlock()
ta.Id = tam.nextID
tam.nextID++
tam.registeredTriggerAction = append(tam.registeredTriggerAction, ta)
tam.registeredTriggerActions.TriggerActions = append(tam.registeredTriggerActions.TriggerActions, ta)
taAdded = ta
return taAdded,nil
}
// removes the given TriggerAction
// ToDo: for now only the ID is compared, to assure we don't remove a TriggerAction which has been changed meanwhile, we should deep-compare the whole object
func (tam *TriggerActionManager) RemoveTriggerAction(removeTa *pb.TriggerAction) (taRemoved *pb.TriggerAction, err error) {
tam.registeredTriggerActionMutex.Lock()
defer tam.registeredTriggerActionMutex.Unlock()
for idx,ta := range tam.registeredTriggerActions.TriggerActions {
if ta.Id == removeTa.Id {
// remove element (not a problem for running `for`-loop, as it is interrupted here)
tam.registeredTriggerActions.TriggerActions = append(tam.registeredTriggerActions.TriggerActions[:idx], tam.registeredTriggerActions.TriggerActions[idx+1:]...)
return ta, nil
}
}
return nil, ErrTaNotFound
}
var (
ErrTaNotFound = errors.New("Couldn't find given TriggerAction")
ErrTaImmutable = errors.New("Not allowed to change immutable TriggerAction")
)
func (tam *TriggerActionManager) GetTriggerActionByID(Id uint32) (ta *pb.TriggerAction ,err error) {
for _,ta = range tam.registeredTriggerAction {
for _,ta = range tam.registeredTriggerActions.TriggerActions {
if ta.Id == Id {
return ta, nil
}
@ -294,27 +314,30 @@ func (tam *TriggerActionManager) ClearTriggerActions(keepImmutable bool) (err er
defer tam.registeredTriggerActionMutex.Unlock()
if !keepImmutable {
tam.registeredTriggerAction = []*pb.TriggerAction{}
tam.registeredTriggerActions.TriggerActions = []*pb.TriggerAction{}
return
}
newTas := []*pb.TriggerAction{}
for _,ta := range tam.registeredTriggerAction {
for _,ta := range tam.registeredTriggerActions.TriggerActions {
if ta.Immutable {
newTas = append(newTas, ta)
}
}
tam.registeredTriggerAction = newTas
tam.registeredTriggerActions.TriggerActions = newTas
return nil
}
func (tam *TriggerActionManager) GetCurrentTriggerActionSet() (ta *pb.TriggerActionSet) {
/*
tam.registeredTriggerActionMutex.Lock()
resTAs := make([]*pb.TriggerAction, len(tam.registeredTriggerAction))
copy(resTAs, tam.registeredTriggerAction)
resTAs := make([]*pb.TriggerAction, len(tam.registeredTriggerActions.TriggerActions))
copy(resTAs, tam.registeredTriggerActions.TriggerActions)
tam.registeredTriggerActionMutex.Unlock()
return &pb.TriggerActionSet{ TriggerActions: resTAs }
*/
return &tam.registeredTriggerActions
}
func (tam *TriggerActionManager) Start() {
@ -328,7 +351,10 @@ func (tam *TriggerActionManager) Stop() {
func NewTriggerActionManager(rootService *Service) (tam *TriggerActionManager) {
tam = &TriggerActionManager{
registeredTriggerAction: []*pb.TriggerAction{},
registeredTriggerActions: pb.TriggerActionSet{
Name: "DeployedTriggerActions",
TriggerActions: []*pb.TriggerAction{},
},
registeredTriggerActionMutex: &sync.Mutex{},
rootSvc: rootService,
}

View File

@ -53,6 +53,50 @@ func InitComponentsDialog() {
hvue.Types(hvue.PString),
),
)
hvue.NewComponent(
"modal-string-input",
hvue.Template(templateInputStringModal),
hvue.DataFunc(func(vm *hvue.VM) interface{} {
data := struct {
*js.Object
Text string `js:"text"`
}{Object:O()}
data.Text = ""
return &data
}),
hvue.ComputedWithGetSet(
"visible",
func(vm *hvue.VM) interface{} {
return vm.Get("value")
},
func(vm *hvue.VM, newValue *js.Object) {
vm.Call("$emit", "input", newValue)
},
),
hvue.Method(
"onSavePressed",
func(vm *hvue.VM) {
if vm.Get("text") == js.Undefined || vm.Get("text").String() == "" {
QuasarNotifyError("Can't store to empty template name", "", QUASAR_NOTIFICATION_POSITION_TOP)
return
}
vm.Call("$emit", "save", vm.Get("text"))
println(vm.Get("text"))
},
),
hvue.PropObj(
"title",
hvue.Types(hvue.PString),
),
hvue.PropObj(
"value",
hvue.Required,
hvue.Types(hvue.PBoolean),
),
)
}
const templateSelectStringModal = `
@ -84,4 +128,36 @@ const templateSelectStringModal = `
</q-list>
</q-modal-layout>
</q-modal>
`
const templateInputStringModal = `
<div>
<q-modal v-model="visible">
<q-modal-layout>
<q-toolbar slot="header">
<q-toolbar-title>
{{ title }}
</q-toolbar-title>
</q-toolbar>
<q-list>
<q-item tag="label">
<q-item-main>
<q-item-tile label>Name</q-item-tile>
<q-item-tile>
<q-input v-model="text" inverted></q-input>
</q-item-tile>
</q-item-main>
</q-item>
<q-item tag="label">
<q-item-main>
<q-item-tile>
<q-btn color="primary" v-show="text != undefined && text.length > 0" @click="onSavePressed(); visible=false" label="store" />
<q-btn color="secondary" v-close-overlay label="close" />
</q-item-tile>
</q-item-main>
</q-item>
</q-list>
</q-modal-layout>
</q-modal>
</div>
`

View File

@ -148,10 +148,12 @@ func InitComponentsTriggerActions() {
*js.Object
ShowReplaceTASModal bool `js:"showReplaceTASModal"`
ShowAddTASModal bool `js:"showAddTASModal"`
ShowStoreTASModal bool `js:"showStoreTASModal"`
TemplateName string `js:"templateName"`
}{Object: O()}
data.ShowReplaceTASModal = false
data.ShowAddTASModal = false
data.ShowStoreTASModal = false
data.TemplateName = ""
return &data
}),
@ -160,24 +162,38 @@ func InitComponentsTriggerActions() {
vm.Get("$store").Call("dispatch", VUEX_ACTION_ADD_NEW_TRIGGER_ACTION)
}),
hvue.Method("storeTAS",
func(vm *hvue.VM) {
tas := vm.Get("$store").Get("state").Get("triggerActionList")
vm.Get("$store").Call("dispatch", VUEX_ACTION_STORE_TRIGGER_ACTION_SET, tas)
func(vm *hvue.VM, name *js.Object) {
tas_obj := vm.Get("$store").Get("state").Get("triggerActionList")
current_tas := jsTriggerActionSet{Object:tas_obj}.toGo()
store_tas := NewTriggerActionSet()
store_tas.Name = name.String()
for _,ta := range current_tas.TriggerActions {
if ta.IsActive && !ta.Immutable {
jsTa := &jsTriggerAction{Object:O()}
jsTa.fromGo(ta)
store_tas.UpdateEntry(jsTa)
}
}
vm.Get("$store").Call("dispatch", VUEX_ACTION_STORE_TRIGGER_ACTION_SET, store_tas)
}),
hvue.Method("replaceCurrentTAS",
func(vm *hvue.VM, newTASName *js.Object) {
vm.Get("$q").Call("notify", "Replacing TAS with '" + newTASName.String() +"'")
func(vm *hvue.VM, storedTASName *js.Object) {
//vm.Get("$q").Call("notify", "Replacing TAS with '" + storedTASName.String() +"'")
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_REPLACE, storedTASName)
}),
hvue.Method("addToCurrentTAS",
func(vm *hvue.VM, newTASName *js.Object) {
vm.Get("$q").Call("notify", "Add '" + newTASName.String() +"' to current TAS")
func(vm *hvue.VM, storedTASName *js.Object) {
//vm.Get("$q").Call("notify", "Add '" + storedTASName.String() +"' to current TAS")
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_ADD, storedTASName)
}),
hvue.Method("updateStoredTriggerActionSetsList",
func(vm *hvue.VM) {
vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_STORED_TRIGGER_ACTION_SETS_LIST)
}),
hvue.Mounted(func(vm *hvue.VM) {
vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_TRIGGER_ACTIONS)
vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_CURRENT_TRIGGER_ACTIONS_FROM_SERVER)
}),
)
@ -296,12 +312,34 @@ func InitComponentsTriggerActions() {
data := TriggerActionCompData{Object: vm.Data}
data.EditMode = true
}),
hvue.Method(
"updateTA",
func(vm *hvue.VM) {
println("update ta: ", vm.Get("ta"))
}),
hvue.Method(
"cancelUpdateTA",
func(vm *hvue.VM) {
println("cancel update ta: ", vm.Get("ta"))
}),
hvue.Method(
"deleteTA",
func(vm *hvue.VM) {
ta_obj := vm.Get("ta")
println("delete ta: ", ta_obj)
delTas := NewTriggerActionSet()
delTas.UpdateEntry(&jsTriggerAction{Object: ta_obj})
vm.Get("$store").Call("dispatch", VUEX_ACTION_REMOVE_TRIGGER_ACTIONS, delTas)
}),
)
hvue.NewComponent(
"TriggerActionEdit",
hvue.Template(templateTriggerActionEdit),
hvue.PropObj("ta"),
)
hvue.NewComponent(
"trigger",
hvue.Props("ta"),
@ -444,11 +482,11 @@ const templateTriggerAction = `
`
const templateTriggerActionOverview = `
<div>
<q-modal v-model="EditMode">
<q-modal v-model="EditMode" no-route-dismiss no-esc-dismiss no-backdrop-dismiss>
<TriggerActionEdit :ta="ta">
<span slot="actions">
<q-btn color="secondary" v-close-overlay label="close" />
<q-btn color="primary" v-close-overlay label="close" />
<q-btn color="primary" @click="updateTA(); EditMode=false" label="update" />
<q-btn color="secondary" @click="cancelUpdateTA(); EditMode=false" label="close" />
</span>
</TriggerActionEdit>
@ -469,7 +507,7 @@ const templateTriggerActionOverview = `
<div slot="right" v-if="!ta.Immutable">
<q-btn color="primary" icon="edit" @click="enableEditMode" flat></q-btn>
<q-btn color="negative" icon="delete" flat></q-btn>
<q-btn color="negative" icon="delete" @click="deleteTA" flat></q-btn>
</div>
</q-card-title>
</q-card>
@ -704,9 +742,7 @@ const templateAction = `
const templateTriggerActionManager = `
<q-page padding>
<modal-string-input v-model="showStoreTASModal" title="Store selected TriggerActions" @save="storeTAS($event)"></modal-string-input>
<select-string-from-array :values="this.$store.state.StoredTriggerActionSetsList" v-model="showReplaceTASModal" title="Replace current Trigger Actions with stored set" @load="replaceCurrentTAS($event)"></select-string-from-array>
<select-string-from-array :values="this.$store.state.StoredTriggerActionSetsList" v-model="showAddTASModal" title="Add stored set to current Trigger Actions" @load="addToCurrentTAS($event)"></select-string-from-array>
@ -714,10 +750,10 @@ const templateTriggerActionManager = `
<div class="col-12">
<q-card>
<q-card-actions>
<q-btn label="add single TriggerAction" @click="addTA" icon="note_add" />
<q-btn label="store current set" @click="storeTAS" icon="save" />
<q-btn label="replace with stored set" @click="updateStoredTriggerActionSetsList(); showReplaceTASModal=true" icon="settings_backup_restore" />
<q-btn label="insert stored set" @click="updateStoredTriggerActionSetsList(); showAddTASModal=true" icon="add_to_photos" />
<q-btn label="add TriggerAction" @click="addTA" icon="note_add" />
<q-btn label="store template" @click="showStoreTASModal=true" icon="save" />
<q-btn label="load template" @click="updateStoredTriggerActionSetsList(); showReplaceTASModal=true" icon="settings_backup_restore" />
<q-btn label="insert template" @click="updateStoredTriggerActionSetsList(); showAddTASModal=true" icon="add_to_photos" />
</q-card-actions>
</q-card>
</div>

View File

@ -631,7 +631,7 @@ type jsTriggerActionSet struct {
TriggerActions *js.Object `js:"TriggerActions"`
}
func NewTriggerActionList() *jsTriggerActionSet {
func NewTriggerActionSet() *jsTriggerActionSet {
tal := &jsTriggerActionSet{Object: O()}
tal.TriggerActions = O()
tal.Name = "default_ta_set"
@ -667,6 +667,11 @@ func (tal *jsTriggerActionSet) DeleteEntry(id uint32) {
//delete(jl.Jobs, strconv.Itoa(int(id)))
}
func (tas *jsTriggerActionSet) Flush() {
tas.TriggerActions = O()
//delete(jl.Jobs, strconv.Itoa(int(id)))
}
func (src jsTriggerActionSet) toGo() (target *pb.TriggerActionSet) {
js_ta_array := js.Global.Get("Object").Call("values", src.TriggerActions)
count := js_ta_array.Length()

View File

@ -23,10 +23,13 @@ const (
VUEX_ACTION_DEPLOY_WIFI_SETTINGS = "deployWifiSettings"
VUEX_ACTION_UPDATE_TRIGGER_ACTIONS = "updateTriggerActions"
VUEX_ACTION_ADD_NEW_TRIGGER_ACTION = "addTriggerAction"
VUEX_ACTION_STORE_TRIGGER_ACTION_SET = "storeTriggerActionSet"
VUEX_ACTION_UPDATE_STORED_TRIGGER_ACTION_SETS_LIST = "updateStoredTriggerActionSetsList"
VUEX_ACTION_UPDATE_CURRENT_TRIGGER_ACTIONS_FROM_SERVER = "updateCurrentTriggerActionsFromServer"
VUEX_ACTION_ADD_NEW_TRIGGER_ACTION = "addTriggerAction"
VUEX_ACTION_REMOVE_TRIGGER_ACTIONS = "removeTriggerActions"
VUEX_ACTION_STORE_TRIGGER_ACTION_SET = "storeTriggerActionSet"
VUEX_ACTION_UPDATE_STORED_TRIGGER_ACTION_SETS_LIST = "updateStoredTriggerActionSetsList"
VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_REPLACE = "deployStoredTriggerActionSetReplace"
VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_ADD = "deployStoredTriggerActionSetAdd"
VUEX_ACTION_UPDATE_STORED_WIFI_SETTINGS_LIST = "updateStoredWifiSettingsList"
VUEX_ACTION_STORE_WIFI_SETTINGS = "storeWifiSettings"
@ -63,6 +66,10 @@ for (var i = 3; i < 10; i++) {
type("and left\n");
moveStepped(-500,0);
}`
defaultTimeoutShort = time.Second * 5
defaultTimeout = time.Second * 10
defaultTimeoutMid = time.Second * 30
)
type GlobalState struct {
@ -93,7 +100,7 @@ func createGlobalStateStruct() GlobalState {
state.CurrentGadgetSettings = NewUSBGadgetSettings()
state.CurrentlyDeployingWifiSettings = false
state.HidJobList = NewHIDJobStateList()
state.TriggerActionList = NewTriggerActionList()
state.TriggerActionList = NewTriggerActionSet()
state.EventReceiver = NewEventReceiver(maxLogEntries, state.HidJobList)
state.IsConnected = false
state.IsModalEnabled = false
@ -123,7 +130,7 @@ func createGlobalStateStruct() GlobalState {
func actionUpdateGadgetSettingsFromDeployed(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
//fetch deployed gadget settings
dGS, err := RpcClient.RpcGetDeployedGadgetSettings(time.Second * 5)
dGS, err := RpcClient.RpcGetDeployedGadgetSettings(defaultTimeoutShort)
if err != nil {
println("Couldn't retrieve deployed gadget settings")
return
@ -142,7 +149,7 @@ func actionUpdateGadgetSettingsFromDeployed(store *mvuex.Store, context *mvuex.A
func actionUpdateWifiState(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
//fetch deployed gadget settings
state, err := RpcClient.GetWifiState(time.Second * 5)
state, err := RpcClient.GetWifiState(defaultTimeout)
if err != nil {
println("Couldn't retrieve deployed WiFi settings")
return
@ -159,7 +166,7 @@ func actionUpdateStoredWifiSettingsList(store *mvuex.Store, context *mvuex.Actio
go func() {
println("Trying to fetch wsList")
//fetch deployed gadget settings
wsList, err := RpcClient.GetStoredWifiSettingsList(time.Second * 10)
wsList, err := RpcClient.GetStoredWifiSettingsList(defaultTimeout)
if err != nil {
println("Couldn't retrieve WifiSettingsList")
return
@ -178,7 +185,7 @@ func actionStoreWifiSettings(store *mvuex.Store, context *mvuex.ActionContext, s
go func() {
println("Vuex dispatch store WiFi settings: ", req.TemplateName)
// convert to Go type
err := RpcClient.StoreWifiSettings(time.Second*30, req.toGo())
err := RpcClient.StoreWifiSettings(defaultTimeout, req.toGo())
if err != nil {
QuasarNotifyError("Error storing WiFi Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
@ -196,7 +203,7 @@ func actionDeployWifiSettings(store *mvuex.Store, context *mvuex.ActionContext,
// convert to Go type
goSettings := settings.toGo()
wstate, err := RpcClient.DeployWifiSettings(time.Second*30, goSettings)
wstate, err := RpcClient.DeployWifiSettings(defaultTimeoutMid, goSettings)
if err != nil {
QuasarNotifyError("Error deploying WiFi Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
@ -208,7 +215,7 @@ func actionDeployWifiSettings(store *mvuex.Store, context *mvuex.ActionContext,
func actionUpdateRunningHidJobs(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
//fetch deployed gadget settings
jobstates, err := RpcClient.RpcGetRunningHidJobStates(time.Second * 10)
jobstates, err := RpcClient.RpcGetRunningHidJobStates(defaultTimeout)
if err != nil {
println("Couldn't retrieve stateof running HID jobs", err)
return
@ -227,7 +234,7 @@ func actionUpdateStoredTriggerActionSetsList(store *mvuex.Store, context *mvuex.
go func() {
println("Trying to fetch TriggerActionSetList")
//fetch deployed gadget settings
tasList, err := RpcClient.ListStoredTriggerActionSets(time.Second * 10)
tasList, err := RpcClient.ListStoredTriggerActionSets(defaultTimeout)
if err != nil {
println("Couldn't retrieve WifiSettingsList")
return
@ -243,15 +250,16 @@ func actionUpdateStoredTriggerActionSetsList(store *mvuex.Store, context *mvuex.
}
func actionUpdateTriggerActions(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
func actionUpdateCurrentTriggerActionsFromServer(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
tastate,err := RpcClient.GetTriggerActionsState(time.Second * 10)
tastate,err := RpcClient.GetDeployedTriggerActionSet(defaultTimeout)
if err != nil {
QuasarNotifyError("Error fetching deployed TriggerActions", err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
return
}
// ToDo: Clear list berfore adding back elements
state.TriggerActionList.Flush()
for _,ta := range tastate.TriggerActions {
@ -268,9 +276,19 @@ func actionAddNewTriggerAction(store *mvuex.Store, context *mvuex.ActionContext,
go func() {
newTA := NewTriggerAction()
newTA.IsActive = false // don't activate by default
RpcClient.DeployTriggerActionsSetAdd(time.Second*10, &pb.TriggerActionSet{TriggerActions:[]*pb.TriggerAction{newTA.toGo()}})
RpcClient.DeployTriggerActionsSetAdd(defaultTimeout, &pb.TriggerActionSet{TriggerActions:[]*pb.TriggerAction{newTA.toGo()}})
actionUpdateTriggerActions(store, context, state)
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
}()
return
}
func actionRemoveTriggerActions(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, jsTas *jsTriggerActionSet) {
go func() {
RpcClient.DeployTriggerActionsSetRemove(defaultTimeout,jsTas.toGo())
actionUpdateCurrentTriggerActionsFromServer(store, context, state)
}()
return
@ -279,10 +297,9 @@ func actionAddNewTriggerAction(store *mvuex.Store, context *mvuex.ActionContext,
func actionStoreTriggerActionSet(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, req *jsTriggerActionSet) {
go func() {
println("Vuex dispatch store TriggerAction list: ", req.Name)
req.toGo()
// convert to Go type
tas := req.toGo()
err := RpcClient.StoreTriggerActionSet(time.Second*30, req.toGo())
err := RpcClient.StoreTriggerActionSet(defaultTimeout, tas)
if err != nil {
QuasarNotifyError("Error storing TriggerActionSet", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
return
@ -292,6 +309,44 @@ func actionStoreTriggerActionSet(store *mvuex.Store, context *mvuex.ActionContex
}()
}
func actionDeployStoredTriggerActionSetReplace(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, jsName *js.Object) {
go func() {
name := jsName.String()
println("Vuex dispatch deploy stored TriggerActionSet as replacement: ", name)
// convert to Go type
msg := &pb.StringMessage{Msg:name}
_,err := RpcClient.DeployStoredTriggerActionsSetReplace(defaultTimeout, msg)
if err != nil {
QuasarNotifyError("Error replacing TriggerActionSet with stored set", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
return
}
QuasarNotifySuccess("Replaced TriggerActionSet by stored set", name, QUASAR_NOTIFICATION_POSITION_TOP)
actionUpdateCurrentTriggerActionsFromServer(store,context,state)
}()
}
func actionDeployStoredTriggerActionSetAdd(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, jsName *js.Object) {
go func() {
name := jsName.String()
println("Vuex dispatch deploy stored TriggerActionSet as addition: ", name)
// convert to Go type
msg := &pb.StringMessage{Msg:name}
_,err := RpcClient.DeployStoredTriggerActionsSetAdd(defaultTimeout, msg)
if err != nil {
QuasarNotifyError("Error adding TriggerActionSet from store", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
return
}
QuasarNotifySuccess("Added TriggerActionSet from store", name, QUASAR_NOTIFICATION_POSITION_TOP)
actionUpdateCurrentTriggerActionsFromServer(store,context,state)
}()
}
func actionDeployCurrentGadgetSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
@ -304,14 +359,14 @@ func actionDeployCurrentGadgetSettings(store *mvuex.Store, context *mvuex.Action
curGS := state.CurrentGadgetSettings.toGS()
//try to set them via gRPC (the server holds an internal state, setting != deploying)
err := RpcClient.RpcSetRemoteGadgetSettings(curGS, time.Second)
err := RpcClient.RpcSetRemoteGadgetSettings(curGS, defaultTimeoutShort)
if err != nil {
QuasarNotifyError("Error in pre-check of new USB gadget settings", err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
return
}
//try to deploy the, now set, remote GadgetSettings via gRPC
_, err = RpcClient.RpcDeployRemoteGadgetSettings(time.Second * 10)
_, err = RpcClient.RpcDeployRemoteGadgetSettings(defaultTimeout)
if err != nil {
QuasarNotifyError("Error while deploying new USB gadget settings", err.Error(), QUASAR_NOTIFICATION_POSITION_TOP)
return
@ -335,7 +390,7 @@ func actionDeployEthernetInterfaceSettings(store *mvuex.Store, context *mvuex.Ac
// convert to Go type
goSettings := settings.toGo()
err := RpcClient.DeployedEthernetInterfaceSettings(time.Second*3, goSettings)
err := RpcClient.DeployedEthernetInterfaceSettings(defaultTimeoutShort, goSettings)
if err != nil {
Alert(err)
}
@ -389,10 +444,13 @@ func initMVuex() *mvuex.Store {
mvuex.Action(VUEX_ACTION_UPDATE_STORED_WIFI_SETTINGS_LIST, actionUpdateStoredWifiSettingsList),
mvuex.Action(VUEX_ACTION_STORE_WIFI_SETTINGS, actionStoreWifiSettings),
mvuex.Action(VUEX_ACTION_UPDATE_TRIGGER_ACTIONS, actionUpdateTriggerActions),
mvuex.Action(VUEX_ACTION_UPDATE_CURRENT_TRIGGER_ACTIONS_FROM_SERVER, actionUpdateCurrentTriggerActionsFromServer),
mvuex.Action(VUEX_ACTION_ADD_NEW_TRIGGER_ACTION, actionAddNewTriggerAction),
mvuex.Action(VUEX_ACTION_REMOVE_TRIGGER_ACTIONS, actionRemoveTriggerActions),
mvuex.Action(VUEX_ACTION_STORE_TRIGGER_ACTION_SET, actionStoreTriggerActionSet),
mvuex.Action(VUEX_ACTION_UPDATE_STORED_TRIGGER_ACTION_SETS_LIST, actionUpdateStoredTriggerActionSetsList),
mvuex.Action(VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_REPLACE, actionDeployStoredTriggerActionSetReplace),
mvuex.Action(VUEX_ACTION_DEPLOY_STORED_TRIGGER_ACTION_SET_ADD, actionDeployStoredTriggerActionSetAdd),
mvuex.Getter("triggerActions", func(state *GlobalState) interface{} {
return state.TriggerActionList.TriggerActions

View File

@ -158,11 +158,11 @@ func (rpc *Rpc) StoreTriggerActionSet(timeout time.Duration, set *pb.TriggerActi
return err
}
func (rpc *Rpc) GetTriggerActionsState(timeout time.Duration) (res *pb.TriggerActionSet, err error) {
func (rpc *Rpc) GetDeployedTriggerActionSet(timeout time.Duration) (res *pb.TriggerActionSet, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
return rpc.Client.GetTriggerActionsState(ctx, &pb.Empty{})
return rpc.Client.GetDeployedTriggerActionSet(ctx, &pb.Empty{})
}
func (rpc *Rpc) DeployTriggerActionsSetReplace(timeout time.Duration, set *pb.TriggerActionSet) (res *pb.TriggerActionSet, err error) {
@ -172,6 +172,13 @@ func (rpc *Rpc) DeployTriggerActionsSetReplace(timeout time.Duration, set *pb.Tr
return rpc.Client.DeployTriggerActionSetReplace(ctx, set)
}
func (rpc *Rpc) DeployTriggerActionsSetRemove(timeout time.Duration, set *pb.TriggerActionSet) (res *pb.TriggerActionSet, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
return rpc.Client.DeployTriggerActionSetRemove(ctx, set)
}
func (rpc *Rpc) DeployTriggerActionsSetAdd(timeout time.Duration, set *pb.TriggerActionSet) (res *pb.TriggerActionSet, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
@ -179,6 +186,20 @@ func (rpc *Rpc) DeployTriggerActionsSetAdd(timeout time.Duration, set *pb.Trigge
return rpc.Client.DeployTriggerActionSetAdd(ctx, set)
}
func (rpc *Rpc) DeployStoredTriggerActionsSetReplace(timeout time.Duration, name *pb.StringMessage) (res *pb.TriggerActionSet, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
return rpc.Client.DeployStoredTriggerActionSetReplace(ctx, name)
}
func (rpc *Rpc) DeployStoredTriggerActionsSetAdd(timeout time.Duration, name *pb.StringMessage) (res *pb.TriggerActionSet, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
return rpc.Client.DeployStoredTriggerActionSetAdd(ctx, name)
}
func (rpc *Rpc) RpcGetDeployedGadgetSettings(timeout time.Duration) (*pb.GadgetSettings, error) {