Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
34c26a39
Commit
34c26a39
authored
Jan 11, 2025
by
johnnyjoy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: implement user stats endpoint
parent
5ff8ab9a
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
843 additions
and
249 deletions
+843
-249
user_service.proto
proto/api/v1/user_service.proto
+39
-0
user_service.pb.go
proto/gen/api/v1/user_service.pb.go
+525
-245
user_service.pb.gw.go
proto/gen/api/v1/user_service.pb.gw.go
+75
-0
user_service_grpc.pb.go
proto/gen/api/v1/user_service_grpc.pb.go
+38
-0
apidocs.swagger.yaml
proto/gen/apidocs.swagger.yaml
+70
-0
acl_config.go
server/router/api/v1/acl_config.go
+1
-0
user_service.go
server/router/api/v1/user_service.go
+93
-0
memo_test.go
test/store/memo_test.go
+2
-4
No files found.
proto/api/v1/user_service.proto
View file @
34c26a39
...
@@ -53,6 +53,12 @@ service UserService {
...
@@ -53,6 +53,12 @@ service UserService {
option
(
google.api.http
)
=
{
delete
:
"/api/v1/{name=users/*}"
};
option
(
google.api.http
)
=
{
delete
:
"/api/v1/{name=users/*}"
};
option
(
google.api.method_signature
)
=
"name"
;
option
(
google.api.method_signature
)
=
"name"
;
}
}
// ListUserStats returns the stats of a user.
// Use `users/-` to list all users.
rpc
ListUserStats
(
ListUserStatsRequest
)
returns
(
ListUserStatsResponse
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v1/{name=users/*}/stats"
};
option
(
google.api.method_signature
)
=
"name"
;
}
// GetUserSetting gets the setting of a user.
// GetUserSetting gets the setting of a user.
rpc
GetUserSetting
(
GetUserSettingRequest
)
returns
(
UserSetting
)
{
rpc
GetUserSetting
(
GetUserSettingRequest
)
returns
(
UserSetting
)
{
option
(
google.api.http
)
=
{
get
:
"/api/v1/{name=users/*}/setting"
};
option
(
google.api.http
)
=
{
get
:
"/api/v1/{name=users/*}/setting"
};
...
@@ -165,6 +171,39 @@ message DeleteUserRequest {
...
@@ -165,6 +171,39 @@ message DeleteUserRequest {
string
name
=
1
;
string
name
=
1
;
}
}
message
UserStats
{
// The name of the user.
// Format: users/{user}
string
name
=
1
;
// The timestamps when the memos were displayed.
// We should return raw data to the client, and let the client format the data with the user's timezone.
repeated
google.protobuf.Timestamp
memo_display_timestamps
=
2
;
// The stats of memo types.
MemoTypeStats
memo_type_stats
=
3
;
// The count of tags.
// Format: "tag1": 1, "tag2": 2
map
<
string
,
int32
>
tag_count
=
4
;
message
MemoTypeStats
{
int32
link_count
=
1
;
int32
task_count
=
2
;
int32
code_count
=
3
;
}
}
message
ListUserStatsRequest
{
// The name of the user.
// Format: users/{user}. Use "-" to list all users.
string
name
=
1
;
}
message
ListUserStatsResponse
{
repeated
UserStats
user_stats
=
1
;
}
message
UserSetting
{
message
UserSetting
{
// The name of the user.
// The name of the user.
// Format: users/{user}
// Format: users/{user}
...
...
proto/gen/api/v1/user_service.pb.go
View file @
34c26a39
...
@@ -616,6 +616,171 @@ func (x *DeleteUserRequest) GetName() string {
...
@@ -616,6 +616,171 @@ func (x *DeleteUserRequest) GetName() string {
return
""
return
""
}
}
type
UserStats
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
// The name of the user.
// Format: users/{user}
Name
string
`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
// The timestamps when the memos were displayed.
// We should return raw data to the client, and let the client format the data with the user's timezone.
MemoDisplayTimestamps
[]
*
timestamppb
.
Timestamp
`protobuf:"bytes,2,rep,name=memo_display_timestamps,json=memoDisplayTimestamps,proto3" json:"memo_display_timestamps,omitempty"`
// The stats of memo types.
MemoTypeStats
*
UserStats_MemoTypeStats
`protobuf:"bytes,3,opt,name=memo_type_stats,json=memoTypeStats,proto3" json:"memo_type_stats,omitempty"`
// The count of tags.
// Format: "tag1": 1, "tag2": 2
TagCount
map
[
string
]
int32
`protobuf:"bytes,4,rep,name=tag_count,json=tagCount,proto3" json:"tag_count,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
UserStats
)
Reset
()
{
*
x
=
UserStats
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
10
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
func
(
x
*
UserStats
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
UserStats
)
ProtoMessage
()
{}
func
(
x
*
UserStats
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
10
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
ms
.
StoreMessageInfo
(
mi
)
}
return
ms
}
return
mi
.
MessageOf
(
x
)
}
// Deprecated: Use UserStats.ProtoReflect.Descriptor instead.
func
(
*
UserStats
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
10
}
}
func
(
x
*
UserStats
)
GetName
()
string
{
if
x
!=
nil
{
return
x
.
Name
}
return
""
}
func
(
x
*
UserStats
)
GetMemoDisplayTimestamps
()
[]
*
timestamppb
.
Timestamp
{
if
x
!=
nil
{
return
x
.
MemoDisplayTimestamps
}
return
nil
}
func
(
x
*
UserStats
)
GetMemoTypeStats
()
*
UserStats_MemoTypeStats
{
if
x
!=
nil
{
return
x
.
MemoTypeStats
}
return
nil
}
func
(
x
*
UserStats
)
GetTagCount
()
map
[
string
]
int32
{
if
x
!=
nil
{
return
x
.
TagCount
}
return
nil
}
type
ListUserStatsRequest
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
// The name of the user.
// Format: users/{user}. Use "-" to list all users.
Name
string
`protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
ListUserStatsRequest
)
Reset
()
{
*
x
=
ListUserStatsRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
11
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
func
(
x
*
ListUserStatsRequest
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
ListUserStatsRequest
)
ProtoMessage
()
{}
func
(
x
*
ListUserStatsRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
11
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
ms
.
StoreMessageInfo
(
mi
)
}
return
ms
}
return
mi
.
MessageOf
(
x
)
}
// Deprecated: Use ListUserStatsRequest.ProtoReflect.Descriptor instead.
func
(
*
ListUserStatsRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
11
}
}
func
(
x
*
ListUserStatsRequest
)
GetName
()
string
{
if
x
!=
nil
{
return
x
.
Name
}
return
""
}
type
ListUserStatsResponse
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
UserStats
[]
*
UserStats
`protobuf:"bytes,1,rep,name=user_stats,json=userStats,proto3" json:"user_stats,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
ListUserStatsResponse
)
Reset
()
{
*
x
=
ListUserStatsResponse
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
12
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
func
(
x
*
ListUserStatsResponse
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
ListUserStatsResponse
)
ProtoMessage
()
{}
func
(
x
*
ListUserStatsResponse
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
12
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
ms
.
StoreMessageInfo
(
mi
)
}
return
ms
}
return
mi
.
MessageOf
(
x
)
}
// Deprecated: Use ListUserStatsResponse.ProtoReflect.Descriptor instead.
func
(
*
ListUserStatsResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
12
}
}
func
(
x
*
ListUserStatsResponse
)
GetUserStats
()
[]
*
UserStats
{
if
x
!=
nil
{
return
x
.
UserStats
}
return
nil
}
type
UserSetting
struct
{
type
UserSetting
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
state
protoimpl
.
MessageState
`protogen:"open.v1"`
// The name of the user.
// The name of the user.
...
@@ -633,7 +798,7 @@ type UserSetting struct {
...
@@ -633,7 +798,7 @@ type UserSetting struct {
func
(
x
*
UserSetting
)
Reset
()
{
func
(
x
*
UserSetting
)
Reset
()
{
*
x
=
UserSetting
{}
*
x
=
UserSetting
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
0
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
3
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -645,7 +810,7 @@ func (x *UserSetting) String() string {
...
@@ -645,7 +810,7 @@ func (x *UserSetting) String() string {
func
(
*
UserSetting
)
ProtoMessage
()
{}
func
(
*
UserSetting
)
ProtoMessage
()
{}
func
(
x
*
UserSetting
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
UserSetting
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
0
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
3
]
if
x
!=
nil
{
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -658,7 +823,7 @@ func (x *UserSetting) ProtoReflect() protoreflect.Message {
...
@@ -658,7 +823,7 @@ func (x *UserSetting) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserSetting.ProtoReflect.Descriptor instead.
// Deprecated: Use UserSetting.ProtoReflect.Descriptor instead.
func
(
*
UserSetting
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
UserSetting
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
0
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
3
}
}
}
func
(
x
*
UserSetting
)
GetName
()
string
{
func
(
x
*
UserSetting
)
GetName
()
string
{
...
@@ -700,7 +865,7 @@ type GetUserSettingRequest struct {
...
@@ -700,7 +865,7 @@ type GetUserSettingRequest struct {
func
(
x
*
GetUserSettingRequest
)
Reset
()
{
func
(
x
*
GetUserSettingRequest
)
Reset
()
{
*
x
=
GetUserSettingRequest
{}
*
x
=
GetUserSettingRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
1
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
4
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -712,7 +877,7 @@ func (x *GetUserSettingRequest) String() string {
...
@@ -712,7 +877,7 @@ func (x *GetUserSettingRequest) String() string {
func
(
*
GetUserSettingRequest
)
ProtoMessage
()
{}
func
(
*
GetUserSettingRequest
)
ProtoMessage
()
{}
func
(
x
*
GetUserSettingRequest
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
GetUserSettingRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
1
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
4
]
if
x
!=
nil
{
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -725,7 +890,7 @@ func (x *GetUserSettingRequest) ProtoReflect() protoreflect.Message {
...
@@ -725,7 +890,7 @@ func (x *GetUserSettingRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetUserSettingRequest.ProtoReflect.Descriptor instead.
// Deprecated: Use GetUserSettingRequest.ProtoReflect.Descriptor instead.
func
(
*
GetUserSettingRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
GetUserSettingRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
1
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
4
}
}
}
func
(
x
*
GetUserSettingRequest
)
GetName
()
string
{
func
(
x
*
GetUserSettingRequest
)
GetName
()
string
{
...
@@ -745,7 +910,7 @@ type UpdateUserSettingRequest struct {
...
@@ -745,7 +910,7 @@ type UpdateUserSettingRequest struct {
func
(
x
*
UpdateUserSettingRequest
)
Reset
()
{
func
(
x
*
UpdateUserSettingRequest
)
Reset
()
{
*
x
=
UpdateUserSettingRequest
{}
*
x
=
UpdateUserSettingRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
2
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
5
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -757,7 +922,7 @@ func (x *UpdateUserSettingRequest) String() string {
...
@@ -757,7 +922,7 @@ func (x *UpdateUserSettingRequest) String() string {
func
(
*
UpdateUserSettingRequest
)
ProtoMessage
()
{}
func
(
*
UpdateUserSettingRequest
)
ProtoMessage
()
{}
func
(
x
*
UpdateUserSettingRequest
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
UpdateUserSettingRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
2
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
5
]
if
x
!=
nil
{
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -770,7 +935,7 @@ func (x *UpdateUserSettingRequest) ProtoReflect() protoreflect.Message {
...
@@ -770,7 +935,7 @@ func (x *UpdateUserSettingRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UpdateUserSettingRequest.ProtoReflect.Descriptor instead.
// Deprecated: Use UpdateUserSettingRequest.ProtoReflect.Descriptor instead.
func
(
*
UpdateUserSettingRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
UpdateUserSettingRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
2
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
5
}
}
}
func
(
x
*
UpdateUserSettingRequest
)
GetSetting
()
*
UserSetting
{
func
(
x
*
UpdateUserSettingRequest
)
GetSetting
()
*
UserSetting
{
...
@@ -799,7 +964,7 @@ type UserAccessToken struct {
...
@@ -799,7 +964,7 @@ type UserAccessToken struct {
func
(
x
*
UserAccessToken
)
Reset
()
{
func
(
x
*
UserAccessToken
)
Reset
()
{
*
x
=
UserAccessToken
{}
*
x
=
UserAccessToken
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
3
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
6
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -811,7 +976,7 @@ func (x *UserAccessToken) String() string {
...
@@ -811,7 +976,7 @@ func (x *UserAccessToken) String() string {
func
(
*
UserAccessToken
)
ProtoMessage
()
{}
func
(
*
UserAccessToken
)
ProtoMessage
()
{}
func
(
x
*
UserAccessToken
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
UserAccessToken
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
3
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
6
]
if
x
!=
nil
{
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -824,7 +989,7 @@ func (x *UserAccessToken) ProtoReflect() protoreflect.Message {
...
@@ -824,7 +989,7 @@ func (x *UserAccessToken) ProtoReflect() protoreflect.Message {
// Deprecated: Use UserAccessToken.ProtoReflect.Descriptor instead.
// Deprecated: Use UserAccessToken.ProtoReflect.Descriptor instead.
func
(
*
UserAccessToken
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
UserAccessToken
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
3
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
6
}
}
}
func
(
x
*
UserAccessToken
)
GetAccessToken
()
string
{
func
(
x
*
UserAccessToken
)
GetAccessToken
()
string
{
...
@@ -866,7 +1031,7 @@ type ListUserAccessTokensRequest struct {
...
@@ -866,7 +1031,7 @@ type ListUserAccessTokensRequest struct {
func
(
x
*
ListUserAccessTokensRequest
)
Reset
()
{
func
(
x
*
ListUserAccessTokensRequest
)
Reset
()
{
*
x
=
ListUserAccessTokensRequest
{}
*
x
=
ListUserAccessTokensRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
4
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
7
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -878,7 +1043,7 @@ func (x *ListUserAccessTokensRequest) String() string {
...
@@ -878,7 +1043,7 @@ func (x *ListUserAccessTokensRequest) String() string {
func
(
*
ListUserAccessTokensRequest
)
ProtoMessage
()
{}
func
(
*
ListUserAccessTokensRequest
)
ProtoMessage
()
{}
func
(
x
*
ListUserAccessTokensRequest
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
ListUserAccessTokensRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
4
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
7
]
if
x
!=
nil
{
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -891,7 +1056,7 @@ func (x *ListUserAccessTokensRequest) ProtoReflect() protoreflect.Message {
...
@@ -891,7 +1056,7 @@ func (x *ListUserAccessTokensRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListUserAccessTokensRequest.ProtoReflect.Descriptor instead.
// Deprecated: Use ListUserAccessTokensRequest.ProtoReflect.Descriptor instead.
func
(
*
ListUserAccessTokensRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ListUserAccessTokensRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
4
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
7
}
}
}
func
(
x
*
ListUserAccessTokensRequest
)
GetName
()
string
{
func
(
x
*
ListUserAccessTokensRequest
)
GetName
()
string
{
...
@@ -910,7 +1075,7 @@ type ListUserAccessTokensResponse struct {
...
@@ -910,7 +1075,7 @@ type ListUserAccessTokensResponse struct {
func
(
x
*
ListUserAccessTokensResponse
)
Reset
()
{
func
(
x
*
ListUserAccessTokensResponse
)
Reset
()
{
*
x
=
ListUserAccessTokensResponse
{}
*
x
=
ListUserAccessTokensResponse
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
5
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
8
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -922,7 +1087,7 @@ func (x *ListUserAccessTokensResponse) String() string {
...
@@ -922,7 +1087,7 @@ func (x *ListUserAccessTokensResponse) String() string {
func
(
*
ListUserAccessTokensResponse
)
ProtoMessage
()
{}
func
(
*
ListUserAccessTokensResponse
)
ProtoMessage
()
{}
func
(
x
*
ListUserAccessTokensResponse
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
ListUserAccessTokensResponse
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
5
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
8
]
if
x
!=
nil
{
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -935,7 +1100,7 @@ func (x *ListUserAccessTokensResponse) ProtoReflect() protoreflect.Message {
...
@@ -935,7 +1100,7 @@ func (x *ListUserAccessTokensResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListUserAccessTokensResponse.ProtoReflect.Descriptor instead.
// Deprecated: Use ListUserAccessTokensResponse.ProtoReflect.Descriptor instead.
func
(
*
ListUserAccessTokensResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ListUserAccessTokensResponse
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
5
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
8
}
}
}
func
(
x
*
ListUserAccessTokensResponse
)
GetAccessTokens
()
[]
*
UserAccessToken
{
func
(
x
*
ListUserAccessTokensResponse
)
GetAccessTokens
()
[]
*
UserAccessToken
{
...
@@ -958,7 +1123,7 @@ type CreateUserAccessTokenRequest struct {
...
@@ -958,7 +1123,7 @@ type CreateUserAccessTokenRequest struct {
func
(
x
*
CreateUserAccessTokenRequest
)
Reset
()
{
func
(
x
*
CreateUserAccessTokenRequest
)
Reset
()
{
*
x
=
CreateUserAccessTokenRequest
{}
*
x
=
CreateUserAccessTokenRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
6
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
9
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -970,7 +1135,7 @@ func (x *CreateUserAccessTokenRequest) String() string {
...
@@ -970,7 +1135,7 @@ func (x *CreateUserAccessTokenRequest) String() string {
func
(
*
CreateUserAccessTokenRequest
)
ProtoMessage
()
{}
func
(
*
CreateUserAccessTokenRequest
)
ProtoMessage
()
{}
func
(
x
*
CreateUserAccessTokenRequest
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
CreateUserAccessTokenRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
6
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
1
9
]
if
x
!=
nil
{
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -983,7 +1148,7 @@ func (x *CreateUserAccessTokenRequest) ProtoReflect() protoreflect.Message {
...
@@ -983,7 +1148,7 @@ func (x *CreateUserAccessTokenRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use CreateUserAccessTokenRequest.ProtoReflect.Descriptor instead.
// Deprecated: Use CreateUserAccessTokenRequest.ProtoReflect.Descriptor instead.
func
(
*
CreateUserAccessTokenRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
CreateUserAccessTokenRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
6
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
1
9
}
}
}
func
(
x
*
CreateUserAccessTokenRequest
)
GetName
()
string
{
func
(
x
*
CreateUserAccessTokenRequest
)
GetName
()
string
{
...
@@ -1020,7 +1185,7 @@ type DeleteUserAccessTokenRequest struct {
...
@@ -1020,7 +1185,7 @@ type DeleteUserAccessTokenRequest struct {
func
(
x
*
DeleteUserAccessTokenRequest
)
Reset
()
{
func
(
x
*
DeleteUserAccessTokenRequest
)
Reset
()
{
*
x
=
DeleteUserAccessTokenRequest
{}
*
x
=
DeleteUserAccessTokenRequest
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
17
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
20
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
ms
.
StoreMessageInfo
(
mi
)
}
}
...
@@ -1032,7 +1197,7 @@ func (x *DeleteUserAccessTokenRequest) String() string {
...
@@ -1032,7 +1197,7 @@ func (x *DeleteUserAccessTokenRequest) String() string {
func
(
*
DeleteUserAccessTokenRequest
)
ProtoMessage
()
{}
func
(
*
DeleteUserAccessTokenRequest
)
ProtoMessage
()
{}
func
(
x
*
DeleteUserAccessTokenRequest
)
ProtoReflect
()
protoreflect
.
Message
{
func
(
x
*
DeleteUserAccessTokenRequest
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
17
]
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
20
]
if
x
!=
nil
{
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
if
ms
.
LoadMessageInfo
()
==
nil
{
...
@@ -1045,7 +1210,7 @@ func (x *DeleteUserAccessTokenRequest) ProtoReflect() protoreflect.Message {
...
@@ -1045,7 +1210,7 @@ func (x *DeleteUserAccessTokenRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use DeleteUserAccessTokenRequest.ProtoReflect.Descriptor instead.
// Deprecated: Use DeleteUserAccessTokenRequest.ProtoReflect.Descriptor instead.
func
(
*
DeleteUserAccessTokenRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
DeleteUserAccessTokenRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
17
}
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
20
}
}
}
func
(
x
*
DeleteUserAccessTokenRequest
)
GetName
()
string
{
func
(
x
*
DeleteUserAccessTokenRequest
)
GetName
()
string
{
...
@@ -1062,6 +1227,66 @@ func (x *DeleteUserAccessTokenRequest) GetAccessToken() string {
...
@@ -1062,6 +1227,66 @@ func (x *DeleteUserAccessTokenRequest) GetAccessToken() string {
return
""
return
""
}
}
type
UserStats_MemoTypeStats
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
LinkCount
int32
`protobuf:"varint,1,opt,name=link_count,json=linkCount,proto3" json:"link_count,omitempty"`
TaskCount
int32
`protobuf:"varint,2,opt,name=task_count,json=taskCount,proto3" json:"task_count,omitempty"`
CodeCount
int32
`protobuf:"varint,3,opt,name=code_count,json=codeCount,proto3" json:"code_count,omitempty"`
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
}
func
(
x
*
UserStats_MemoTypeStats
)
Reset
()
{
*
x
=
UserStats_MemoTypeStats
{}
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
22
]
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
ms
.
StoreMessageInfo
(
mi
)
}
func
(
x
*
UserStats_MemoTypeStats
)
String
()
string
{
return
protoimpl
.
X
.
MessageStringOf
(
x
)
}
func
(
*
UserStats_MemoTypeStats
)
ProtoMessage
()
{}
func
(
x
*
UserStats_MemoTypeStats
)
ProtoReflect
()
protoreflect
.
Message
{
mi
:=
&
file_api_v1_user_service_proto_msgTypes
[
22
]
if
x
!=
nil
{
ms
:=
protoimpl
.
X
.
MessageStateOf
(
protoimpl
.
Pointer
(
x
))
if
ms
.
LoadMessageInfo
()
==
nil
{
ms
.
StoreMessageInfo
(
mi
)
}
return
ms
}
return
mi
.
MessageOf
(
x
)
}
// Deprecated: Use UserStats_MemoTypeStats.ProtoReflect.Descriptor instead.
func
(
*
UserStats_MemoTypeStats
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
file_api_v1_user_service_proto_rawDescGZIP
(),
[]
int
{
10
,
1
}
}
func
(
x
*
UserStats_MemoTypeStats
)
GetLinkCount
()
int32
{
if
x
!=
nil
{
return
x
.
LinkCount
}
return
0
}
func
(
x
*
UserStats_MemoTypeStats
)
GetTaskCount
()
int32
{
if
x
!=
nil
{
return
x
.
TaskCount
}
return
0
}
func
(
x
*
UserStats_MemoTypeStats
)
GetCodeCount
()
int32
{
if
x
!=
nil
{
return
x
.
CodeCount
}
return
0
}
var
File_api_v1_user_service_proto
protoreflect
.
FileDescriptor
var
File_api_v1_user_service_proto
protoreflect
.
FileDescriptor
var
file_api_v1_user_service_proto_rawDesc
=
[]
byte
{
var
file_api_v1_user_service_proto_rawDesc
=
[]
byte
{
...
@@ -1147,176 +1372,220 @@ var file_api_v1_user_service_proto_rawDesc = []byte{
...
@@ -1147,176 +1372,220 @@ var file_api_v1_user_service_proto_rawDesc = []byte{
0x64
,
0x61
,
0x74
,
0x65
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x22
,
0x27
,
0x0a
,
0x11
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x64
,
0x61
,
0x74
,
0x65
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x22
,
0x27
,
0x0a
,
0x11
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x82
,
0x01
,
0x0a
,
0x0b
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x65
,
0x22
,
0xb1
,
0x03
,
0x0a
,
0x09
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x67
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x16
,
0x0a
,
0x06
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x6c
,
0x65
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x06
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x6c
,
0x65
,
0x12
,
0x1e
,
0x0a
,
0x0a
,
0x61
,
0x70
,
0x70
,
0x65
,
0x61
,
0x72
,
0x61
,
0x6e
,
0x63
,
0x65
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0a
,
0x61
,
0x70
,
0x70
,
0x65
,
0x61
,
0x72
,
0x61
,
0x6e
,
0x63
,
0x65
,
0x12
,
0x27
,
0x0a
,
0x0f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x76
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x79
,
0x18
,
0x04
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x56
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x79
,
0x22
,
0x2b
,
0x0a
,
0x15
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x92
,
0x01
,
0x0a
,
0x18
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x52
,
0x0a
,
0x17
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x64
,
0x69
,
0x73
,
0x70
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x6c
,
0x61
,
0x79
,
0x5f
,
0x74
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x73
,
0x18
,
0x02
,
0x12
,
0x39
,
0x0a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x1a
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x0b
,
0x32
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x42
,
0x04
,
0xe2
,
0x41
,
0x01
,
0x02
,
0x52
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x3b
,
0x0a
,
0x0b
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1a
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x46
,
0x69
,
0x65
,
0x6c
,
0x64
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x52
,
0x0a
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x22
,
0xca
,
0x01
,
0x0a
,
0x0f
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x21
,
0x0a
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x20
,
0x0a
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x12
,
0x37
,
0x0a
,
0x09
,
0x69
,
0x73
,
0x73
,
0x75
,
0x65
,
0x64
,
0x5f
,
0x61
,
0x74
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1a
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x52
,
0x08
,
0x69
,
0x73
,
0x73
,
0x75
,
0x65
,
0x64
,
0x41
,
0x74
,
0x12
,
0x39
,
0x0a
,
0x0a
,
0x65
,
0x78
,
0x52
,
0x15
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x44
,
0x69
,
0x73
,
0x70
,
0x6c
,
0x61
,
0x79
,
0x54
,
0x69
,
0x6d
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
0x18
,
0x04
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1a
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x73
,
0x12
,
0x4d
,
0x0a
,
0x0f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x74
,
0x79
,
0x70
,
0x65
,
0x5f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x2e
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x52
,
0x09
,
0x65
,
0x78
,
0x70
,
0x69
,
0x32
,
0x25
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x72
,
0x65
,
0x73
,
0x41
,
0x74
,
0x22
,
0x31
,
0x0a
,
0x1b
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x2e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x79
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x70
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x0d
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x79
,
0x70
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x42
,
0x0a
,
0x09
,
0x74
,
0x61
,
0x67
,
0x5f
,
0x63
,
0x6f
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x62
,
0x0a
,
0x1c
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x04
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x25
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x42
,
0x0a
,
0x0d
,
0x61
,
0x63
,
0x63
,
0x65
,
0x74
,
0x73
,
0x2e
,
0x54
,
0x61
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x45
,
0x6e
,
0x74
,
0x72
,
0x79
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x52
,
0x08
,
0x74
,
0x61
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x1a
,
0x3b
,
0x0a
,
0x0d
,
0x54
,
0x61
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x67
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x45
,
0x6e
,
0x74
,
0x72
,
0x79
,
0x12
,
0x10
,
0x0a
,
0x03
,
0x6b
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x0c
,
0x65
,
0x79
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x03
,
0x6b
,
0x65
,
0x79
,
0x12
,
0x14
,
0x0a
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x22
,
0xa3
,
0x01
,
0x0a
,
0x05
,
0x76
,
0x61
,
0x6c
,
0x75
,
0x65
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x05
,
0x76
,
0x61
,
0x1c
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x6c
,
0x75
,
0x65
,
0x3a
,
0x02
,
0x38
,
0x01
,
0x1a
,
0x6c
,
0x0a
,
0x0d
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x54
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x79
,
0x70
,
0x65
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x6c
,
0x69
,
0x6e
,
0x6b
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x6c
,
0x69
,
0x6e
,
0x6b
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x74
,
0x61
,
0x73
,
0x6b
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x74
,
0x61
,
0x73
,
0x6b
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x12
,
0x1d
,
0x0a
,
0x0a
,
0x63
,
0x6f
,
0x64
,
0x65
,
0x5f
,
0x63
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x05
,
0x52
,
0x09
,
0x63
,
0x6f
,
0x64
,
0x65
,
0x43
,
0x6f
,
0x75
,
0x6e
,
0x74
,
0x22
,
0x2a
,
0x0a
,
0x14
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x20
,
0x0a
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x65
,
0x22
,
0x4f
,
0x0a
,
0x15
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x74
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x36
,
0x0a
,
0x0a
,
0x75
,
0x73
,
0x69
,
0x6f
,
0x6e
,
0x12
,
0x3e
,
0x0a
,
0x0a
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x65
,
0x72
,
0x5f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x17
,
0x74
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1a
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x09
,
0x75
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x61
,
0x6d
,
0x70
,
0x48
,
0x00
,
0x52
,
0x09
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x41
,
0x74
,
0x74
,
0x73
,
0x22
,
0x82
,
0x01
,
0x0a
,
0x0b
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x88
,
0x01
,
0x01
,
0x42
,
0x0d
,
0x0a
,
0x0b
,
0x5f
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x6e
,
0x67
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x61
,
0x74
,
0x22
,
0x55
,
0x0a
,
0x1c
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x16
,
0x0a
,
0x06
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x6c
,
0x65
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x06
,
0x6c
,
0x6f
,
0x63
,
0x61
,
0x6c
,
0x65
,
0x12
,
0x1e
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x0a
,
0x0a
,
0x61
,
0x70
,
0x70
,
0x65
,
0x61
,
0x72
,
0x61
,
0x6e
,
0x63
,
0x65
,
0x18
,
0x03
,
0x20
,
0x01
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x21
,
0x0a
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x28
,
0x09
,
0x52
,
0x0a
,
0x61
,
0x70
,
0x70
,
0x65
,
0x61
,
0x72
,
0x61
,
0x6e
,
0x63
,
0x65
,
0x12
,
0x27
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x61
,
0x63
,
0x0a
,
0x0f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x5f
,
0x76
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x32
,
0xbc
,
0x0c
,
0x0a
,
0x0b
,
0x55
,
0x73
,
0x79
,
0x18
,
0x04
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x56
,
0x69
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x12
,
0x63
,
0x0a
,
0x09
,
0x4c
,
0x69
,
0x73
,
0x69
,
0x62
,
0x69
,
0x6c
,
0x69
,
0x74
,
0x79
,
0x22
,
0x2b
,
0x0a
,
0x15
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x92
,
0x01
,
0x0a
,
0x18
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x15
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x0f
,
0x12
,
0x74
,
0x12
,
0x39
,
0x0a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x18
,
0x01
,
0x20
,
0x01
,
0x0d
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x70
,
0x28
,
0x0b
,
0x32
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x0a
,
0x0b
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x20
,
0x2e
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x42
,
0x04
,
0xe2
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x53
,
0x65
,
0x61
,
0x41
,
0x01
,
0x02
,
0x52
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x3b
,
0x0a
,
0x0b
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x21
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x53
,
0x0b
,
0x32
,
0x1a
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x46
,
0x69
,
0x65
,
0x6c
,
0x64
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x52
,
0x0a
,
0x75
,
0x73
,
0x65
,
0x22
,
0x1c
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x16
,
0x12
,
0x14
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x4d
,
0x61
,
0x73
,
0x6b
,
0x22
,
0xca
,
0x01
,
0x0a
,
0x0f
,
0x55
,
0x73
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x3a
,
0x73
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x21
,
0x0a
,
0x12
,
0x62
,
0x0a
,
0x07
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1c
,
0x2e
,
0x6d
,
0x65
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x18
,
0x01
,
0x20
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x12
,
0x20
,
0x0a
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x18
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x25
,
0xda
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x12
,
0x16
,
0x2f
,
0x61
,
0x6f
,
0x6e
,
0x12
,
0x37
,
0x0a
,
0x09
,
0x69
,
0x73
,
0x73
,
0x75
,
0x65
,
0x64
,
0x5f
,
0x61
,
0x74
,
0x18
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x03
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1a
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x81
,
0x01
,
0x0a
,
0x13
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x12
,
0x28
,
0x2e
,
0x6d
,
0x70
,
0x52
,
0x08
,
0x69
,
0x73
,
0x73
,
0x75
,
0x65
,
0x64
,
0x41
,
0x74
,
0x12
,
0x39
,
0x0a
,
0x0a
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
0x18
,
0x04
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1a
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x52
,
0x09
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x41
,
0x74
,
0x22
,
0x31
,
0x0a
,
0x1b
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x22
,
0x62
,
0x0a
,
0x1c
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x12
,
0x42
,
0x0a
,
0x0d
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x18
,
0x01
,
0x20
,
0x03
,
0x28
,
0x0b
,
0x32
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x22
,
0xa3
,
0x01
,
0x0a
,
0x1c
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x20
,
0x0a
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x64
,
0x65
,
0x73
,
0x63
,
0x72
,
0x69
,
0x70
,
0x74
,
0x69
,
0x6f
,
0x6e
,
0x12
,
0x3e
,
0x0a
,
0x0a
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
0x18
,
0x03
,
0x20
,
0x01
,
0x28
,
0x0b
,
0x32
,
0x1a
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x54
,
0x69
,
0x6d
,
0x65
,
0x73
,
0x74
,
0x61
,
0x6d
,
0x70
,
0x48
,
0x00
,
0x52
,
0x09
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x41
,
0x74
,
0x88
,
0x01
,
0x01
,
0x42
,
0x0d
,
0x0a
,
0x0b
,
0x5f
,
0x65
,
0x78
,
0x70
,
0x69
,
0x72
,
0x65
,
0x73
,
0x5f
,
0x61
,
0x74
,
0x22
,
0x55
,
0x0a
,
0x1c
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x12
,
0x12
,
0x0a
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x18
,
0x01
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x12
,
0x21
,
0x0a
,
0x0c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x18
,
0x02
,
0x20
,
0x01
,
0x28
,
0x09
,
0x52
,
0x0b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x32
,
0xc4
,
0x0d
,
0x0a
,
0x0b
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x12
,
0x63
,
0x0a
,
0x09
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x1e
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x15
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x0f
,
0x12
,
0x0d
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x70
,
0x0a
,
0x0b
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x20
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x21
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x53
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x55
,
0x73
,
0x65
,
0x72
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x1c
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x16
,
0x12
,
0x14
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x3a
,
0x73
,
0x65
,
0x61
,
0x72
,
0x63
,
0x68
,
0x12
,
0x62
,
0x0a
,
0x07
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1c
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x52
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x14
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x25
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x48
,
0x74
,
0x74
,
0x70
,
0x42
,
0x6f
,
0x64
,
0x79
,
0x22
,
0x2a
,
0xda
,
0x41
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x12
,
0x16
,
0x2f
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x1d
,
0x12
,
0x1b
,
0x2f
,
0x66
,
0x69
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x6c
,
0x65
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x81
,
0x01
,
0x0a
,
0x13
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x7d
,
0x2f
,
0x61
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x12
,
0x65
,
0x0a
,
0x0a
,
0x43
,
0x72
,
0x65
,
0x61
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x12
,
0x28
,
0x2e
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x42
,
0x69
,
0x6e
,
0x61
,
0x72
,
0x79
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x14
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x22
,
0xda
,
0x41
,
0x04
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x48
,
0x74
,
0x74
,
0x70
,
0x42
,
0x6f
,
0x64
,
0x79
,
0x22
,
0x2a
,
0xda
,
0x75
,
0x73
,
0x65
,
0x72
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x15
,
0x3a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x1d
,
0x12
,
0x1b
,
0x2f
,
0x66
,
0x22
,
0x0d
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x69
,
0x6c
,
0x65
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x7f
,
0x0a
,
0x0a
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x76
,
0x61
,
0x74
,
0x61
,
0x72
,
0x12
,
0x65
,
0x0a
,
0x0a
,
0x43
,
0x72
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x22
,
0xda
,
0x41
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x15
,
0x3a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x22
,
0x0d
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x12
,
0x7f
,
0x0a
,
0x0a
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x12
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x3c
,
0xda
,
0x41
,
0x10
,
0x75
,
0x73
,
0x65
,
0x72
,
0x2c
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x23
,
0x3a
,
0x04
,
0x75
,
0x73
,
0x65
,
0x72
,
0x32
,
0x1b
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x75
,
0x73
,
0x65
,
0x72
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x6c
,
0x0a
,
0x0a
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x16
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x45
,
0x6d
,
0x70
,
0x74
,
0x79
,
0x22
,
0x25
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x2a
,
0x16
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x85
,
0x01
,
0x0a
,
0x0d
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x22
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x23
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x74
,
0x61
,
0x74
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x2b
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x1e
,
0x12
,
0x1c
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x73
,
0x74
,
0x61
,
0x74
,
0x73
,
0x12
,
0x7f
,
0x0a
,
0x0e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x23
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x22
,
0x3c
,
0xda
,
0x41
,
0x10
,
0x75
,
0x73
,
0x65
,
0x72
,
0x2c
,
0x75
,
0x70
,
0x64
,
0x61
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x2d
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x23
,
0x3a
,
0x04
,
0x75
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x20
,
0x12
,
0x1e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x73
,
0x65
,
0x72
,
0x32
,
0x1b
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x75
,
0x73
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x65
,
0x72
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0xa5
,
0x01
,
0x0a
,
0x11
,
0x55
,
0x70
,
0x64
,
0x12
,
0x6c
,
0x0a
,
0x0a
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x12
,
0x1f
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x26
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x44
,
0x65
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x70
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x16
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x66
,
0x2e
,
0x45
,
0x6d
,
0x70
,
0x74
,
0x79
,
0x22
,
0x25
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x18
,
0x2a
,
0x16
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x67
,
0x22
,
0x4d
,
0xda
,
0x41
,
0x13
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2c
,
0x75
,
0x70
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x12
,
0x7f
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x31
,
0x3a
,
0x0a
,
0x0e
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x32
,
0x26
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x12
,
0x23
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x31
,
0x2f
,
0x7b
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x47
,
0x65
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x2f
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x7d
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x19
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x12
,
0xa2
,
0x01
,
0x0a
,
0x14
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0x29
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x22
,
0x2d
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x20
,
0x12
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x1e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0xa5
,
0x01
,
0x0a
,
0x11
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x12
,
0x26
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x22
,
0x33
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x26
,
0x12
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x19
,
0x2e
,
0x24
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x72
,
0x53
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x22
,
0x4d
,
0xda
,
0x41
,
0x13
,
0x73
,
0x65
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0x9a
,
0x01
,
0x0a
,
0x15
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x2c
,
0x75
,
0x70
,
0x64
,
0x61
,
0x74
,
0x65
,
0x5f
,
0x6d
,
0x61
,
0x73
,
0x6b
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x31
,
0x3a
,
0x07
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x32
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x43
,
0x26
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x73
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x67
,
0x2e
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x2f
,
0x73
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x65
,
0x74
,
0x74
,
0x69
,
0x6e
,
0x67
,
0x7d
,
0x12
,
0xa2
,
0x01
,
0x0a
,
0x14
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x22
,
0x36
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x12
,
0x29
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x29
,
0x3a
,
0x01
,
0x2a
,
0x22
,
0x24
,
0x2f
,
0x61
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x4c
,
0x69
,
0x73
,
0x74
,
0x55
,
0x6e
,
0x73
,
0x12
,
0xac
,
0x01
,
0x0a
,
0x15
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x52
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x73
,
0x70
,
0x6f
,
0x6e
,
0x73
,
0x65
,
0x22
,
0x33
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x26
,
0x12
,
0x24
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x16
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0x9a
,
0x01
,
0x0a
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x66
,
0x2e
,
0x45
,
0x6d
,
0x70
,
0x74
,
0x79
,
0x15
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x22
,
0x4f
,
0xda
,
0x41
,
0x11
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x2c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x35
,
0x2a
,
0x33
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x2e
,
0x43
,
0x72
,
0x65
,
0x61
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x73
,
0x74
,
0x1a
,
0x1d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x6e
,
0x73
,
0x2f
,
0x7b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x31
,
0x2e
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x7d
,
0x42
,
0xa8
,
0x01
,
0x0a
,
0x10
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x6e
,
0x22
,
0x36
,
0xda
,
0x41
,
0x04
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x82
,
0xd3
,
0xe4
,
0x93
,
0x02
,
0x29
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x42
,
0x10
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x72
,
0x76
,
0x3a
,
0x01
,
0x2a
,
0x22
,
0x24
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x69
,
0x63
,
0x65
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x30
,
0x67
,
0x69
,
0x74
,
0x68
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x12
,
0xac
,
0x01
,
0x0a
,
0x15
,
0x44
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x3b
,
0x61
,
0x70
,
0x69
,
0x76
,
0x31
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x6b
,
0x65
,
0x6e
,
0x12
,
0x2a
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x41
,
0x58
,
0xaa
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x41
,
0x70
,
0x69
,
0x2e
,
0x56
,
0x76
,
0x31
,
0x2e
,
0x44
,
0x65
,
0x6c
,
0x65
,
0x74
,
0x65
,
0x55
,
0x73
,
0x65
,
0x72
,
0x41
,
0x63
,
0x63
,
0x31
,
0xca
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0x65
,
0x73
,
0x73
,
0x54
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x52
,
0x65
,
0x71
,
0x75
,
0x65
,
0x73
,
0x74
,
0x1a
,
0xe2
,
0x02
,
0x18
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0x5c
,
0x16
,
0x2e
,
0x67
,
0x6f
,
0x6f
,
0x67
,
0x6c
,
0x65
,
0x2e
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x62
,
0x75
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0e
,
0x4d
,
0x65
,
0x66
,
0x2e
,
0x45
,
0x6d
,
0x70
,
0x74
,
0x79
,
0x22
,
0x4f
,
0xda
,
0x41
,
0x11
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x41
,
0x70
,
0x69
,
0x3a
,
0x3a
,
0x56
,
0x31
,
0x62
,
0x06
,
0x70
,
0x72
,
0x2c
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x82
,
0xd3
,
0xe4
,
0x6f
,
0x74
,
0x6f
,
0x33
,
0x93
,
0x02
,
0x35
,
0x2a
,
0x33
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x2f
,
0x7b
,
0x6e
,
0x61
,
0x6d
,
0x65
,
0x3d
,
0x75
,
0x73
,
0x65
,
0x72
,
0x73
,
0x2f
,
0x2a
,
0x7d
,
0x2f
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x73
,
0x2f
,
0x7b
,
0x61
,
0x63
,
0x63
,
0x65
,
0x73
,
0x73
,
0x5f
,
0x74
,
0x6f
,
0x6b
,
0x65
,
0x6e
,
0x7d
,
0x42
,
0xa8
,
0x01
,
0x0a
,
0x10
,
0x63
,
0x6f
,
0x6d
,
0x2e
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x61
,
0x70
,
0x69
,
0x2e
,
0x76
,
0x31
,
0x42
,
0x10
,
0x55
,
0x73
,
0x65
,
0x72
,
0x53
,
0x65
,
0x72
,
0x76
,
0x69
,
0x63
,
0x65
,
0x50
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x50
,
0x01
,
0x5a
,
0x30
,
0x67
,
0x69
,
0x74
,
0x68
,
0x75
,
0x62
,
0x2e
,
0x63
,
0x6f
,
0x6d
,
0x2f
,
0x75
,
0x73
,
0x65
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x6d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2f
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x2f
,
0x67
,
0x65
,
0x6e
,
0x2f
,
0x61
,
0x70
,
0x69
,
0x2f
,
0x76
,
0x31
,
0x3b
,
0x61
,
0x70
,
0x69
,
0x76
,
0x31
,
0xa2
,
0x02
,
0x03
,
0x4d
,
0x41
,
0x58
,
0xaa
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x2e
,
0x41
,
0x70
,
0x69
,
0x2e
,
0x56
,
0x31
,
0xca
,
0x02
,
0x0c
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0xe2
,
0x02
,
0x18
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x5c
,
0x41
,
0x70
,
0x69
,
0x5c
,
0x56
,
0x31
,
0x5c
,
0x47
,
0x50
,
0x42
,
0x4d
,
0x65
,
0x74
,
0x61
,
0x64
,
0x61
,
0x74
,
0x61
,
0xea
,
0x02
,
0x0e
,
0x4d
,
0x65
,
0x6d
,
0x6f
,
0x73
,
0x3a
,
0x3a
,
0x41
,
0x70
,
0x69
,
0x3a
,
0x3a
,
0x56
,
0x31
,
0x62
,
0x06
,
0x70
,
0x72
,
0x6f
,
0x74
,
0x6f
,
0x33
,
}
}
var
(
var
(
...
@@ -1332,7 +1601,7 @@ func file_api_v1_user_service_proto_rawDescGZIP() []byte {
...
@@ -1332,7 +1601,7 @@ func file_api_v1_user_service_proto_rawDescGZIP() []byte {
}
}
var
file_api_v1_user_service_proto_enumTypes
=
make
([]
protoimpl
.
EnumInfo
,
1
)
var
file_api_v1_user_service_proto_enumTypes
=
make
([]
protoimpl
.
EnumInfo
,
1
)
var
file_api_v1_user_service_proto_msgTypes
=
make
([]
protoimpl
.
MessageInfo
,
18
)
var
file_api_v1_user_service_proto_msgTypes
=
make
([]
protoimpl
.
MessageInfo
,
23
)
var
file_api_v1_user_service_proto_goTypes
=
[]
any
{
var
file_api_v1_user_service_proto_goTypes
=
[]
any
{
(
User_Role
)(
0
),
// 0: memos.api.v1.User.Role
(
User_Role
)(
0
),
// 0: memos.api.v1.User.Role
(
*
User
)(
nil
),
// 1: memos.api.v1.User
(
*
User
)(
nil
),
// 1: memos.api.v1.User
...
@@ -1345,66 +1614,77 @@ var file_api_v1_user_service_proto_goTypes = []any{
...
@@ -1345,66 +1614,77 @@ var file_api_v1_user_service_proto_goTypes = []any{
(
*
CreateUserRequest
)(
nil
),
// 8: memos.api.v1.CreateUserRequest
(
*
CreateUserRequest
)(
nil
),
// 8: memos.api.v1.CreateUserRequest
(
*
UpdateUserRequest
)(
nil
),
// 9: memos.api.v1.UpdateUserRequest
(
*
UpdateUserRequest
)(
nil
),
// 9: memos.api.v1.UpdateUserRequest
(
*
DeleteUserRequest
)(
nil
),
// 10: memos.api.v1.DeleteUserRequest
(
*
DeleteUserRequest
)(
nil
),
// 10: memos.api.v1.DeleteUserRequest
(
*
UserSetting
)(
nil
),
// 11: memos.api.v1.UserSetting
(
*
UserStats
)(
nil
),
// 11: memos.api.v1.UserStats
(
*
GetUserSettingRequest
)(
nil
),
// 12: memos.api.v1.GetUserSettingRequest
(
*
ListUserStatsRequest
)(
nil
),
// 12: memos.api.v1.ListUserStatsRequest
(
*
UpdateUserSettingRequest
)(
nil
),
// 13: memos.api.v1.UpdateUserSettingRequest
(
*
ListUserStatsResponse
)(
nil
),
// 13: memos.api.v1.ListUserStatsResponse
(
*
UserAccessToken
)(
nil
),
// 14: memos.api.v1.UserAccessToken
(
*
UserSetting
)(
nil
),
// 14: memos.api.v1.UserSetting
(
*
ListUserAccessTokensRequest
)(
nil
),
// 15: memos.api.v1.ListUserAccessTokensRequest
(
*
GetUserSettingRequest
)(
nil
),
// 15: memos.api.v1.GetUserSettingRequest
(
*
ListUserAccessTokensResponse
)(
nil
),
// 16: memos.api.v1.ListUserAccessTokensResponse
(
*
UpdateUserSettingRequest
)(
nil
),
// 16: memos.api.v1.UpdateUserSettingRequest
(
*
CreateUserAccessTokenRequest
)(
nil
),
// 17: memos.api.v1.CreateUserAccessTokenRequest
(
*
UserAccessToken
)(
nil
),
// 17: memos.api.v1.UserAccessToken
(
*
DeleteUserAccessTokenRequest
)(
nil
),
// 18: memos.api.v1.DeleteUserAccessTokenRequest
(
*
ListUserAccessTokensRequest
)(
nil
),
// 18: memos.api.v1.ListUserAccessTokensRequest
(
State
)(
0
),
// 19: memos.api.v1.State
(
*
ListUserAccessTokensResponse
)(
nil
),
// 19: memos.api.v1.ListUserAccessTokensResponse
(
*
timestamppb
.
Timestamp
)(
nil
),
// 20: google.protobuf.Timestamp
(
*
CreateUserAccessTokenRequest
)(
nil
),
// 20: memos.api.v1.CreateUserAccessTokenRequest
(
*
httpbody
.
HttpBody
)(
nil
),
// 21: google.api.HttpBody
(
*
DeleteUserAccessTokenRequest
)(
nil
),
// 21: memos.api.v1.DeleteUserAccessTokenRequest
(
*
fieldmaskpb
.
FieldMask
)(
nil
),
// 22: google.protobuf.FieldMask
nil
,
// 22: memos.api.v1.UserStats.TagCountEntry
(
*
emptypb
.
Empty
)(
nil
),
// 23: google.protobuf.Empty
(
*
UserStats_MemoTypeStats
)(
nil
),
// 23: memos.api.v1.UserStats.MemoTypeStats
(
State
)(
0
),
// 24: memos.api.v1.State
(
*
timestamppb
.
Timestamp
)(
nil
),
// 25: google.protobuf.Timestamp
(
*
httpbody
.
HttpBody
)(
nil
),
// 26: google.api.HttpBody
(
*
fieldmaskpb
.
FieldMask
)(
nil
),
// 27: google.protobuf.FieldMask
(
*
emptypb
.
Empty
)(
nil
),
// 28: google.protobuf.Empty
}
}
var
file_api_v1_user_service_proto_depIdxs
=
[]
int32
{
var
file_api_v1_user_service_proto_depIdxs
=
[]
int32
{
0
,
// 0: memos.api.v1.User.role:type_name -> memos.api.v1.User.Role
0
,
// 0: memos.api.v1.User.role:type_name -> memos.api.v1.User.Role
19
,
// 1: memos.api.v1.User.state:type_name -> memos.api.v1.State
24
,
// 1: memos.api.v1.User.state:type_name -> memos.api.v1.State
2
0
,
// 2: memos.api.v1.User.create_time:type_name -> google.protobuf.Timestamp
2
5
,
// 2: memos.api.v1.User.create_time:type_name -> google.protobuf.Timestamp
2
0
,
// 3: memos.api.v1.User.update_time:type_name -> google.protobuf.Timestamp
2
5
,
// 3: memos.api.v1.User.update_time:type_name -> google.protobuf.Timestamp
1
,
// 4: memos.api.v1.ListUsersResponse.users:type_name -> memos.api.v1.User
1
,
// 4: memos.api.v1.ListUsersResponse.users:type_name -> memos.api.v1.User
1
,
// 5: memos.api.v1.SearchUsersResponse.users:type_name -> memos.api.v1.User
1
,
// 5: memos.api.v1.SearchUsersResponse.users:type_name -> memos.api.v1.User
2
1
,
// 6: memos.api.v1.GetUserAvatarBinaryRequest.http_body:type_name -> google.api.HttpBody
2
6
,
// 6: memos.api.v1.GetUserAvatarBinaryRequest.http_body:type_name -> google.api.HttpBody
1
,
// 7: memos.api.v1.CreateUserRequest.user:type_name -> memos.api.v1.User
1
,
// 7: memos.api.v1.CreateUserRequest.user:type_name -> memos.api.v1.User
1
,
// 8: memos.api.v1.UpdateUserRequest.user:type_name -> memos.api.v1.User
1
,
// 8: memos.api.v1.UpdateUserRequest.user:type_name -> memos.api.v1.User
22
,
// 9: memos.api.v1.UpdateUserRequest.update_mask:type_name -> google.protobuf.FieldMask
27
,
// 9: memos.api.v1.UpdateUserRequest.update_mask:type_name -> google.protobuf.FieldMask
11
,
// 10: memos.api.v1.UpdateUserSettingRequest.setting:type_name -> memos.api.v1.UserSetting
25
,
// 10: memos.api.v1.UserStats.memo_display_timestamps:type_name -> google.protobuf.Timestamp
22
,
// 11: memos.api.v1.UpdateUserSettingRequest.update_mask:type_name -> google.protobuf.FieldMask
23
,
// 11: memos.api.v1.UserStats.memo_type_stats:type_name -> memos.api.v1.UserStats.MemoTypeStats
20
,
// 12: memos.api.v1.UserAccessToken.issued_at:type_name -> google.protobuf.Timestamp
22
,
// 12: memos.api.v1.UserStats.tag_count:type_name -> memos.api.v1.UserStats.TagCountEntry
20
,
// 13: memos.api.v1.UserAccessToken.expires_at:type_name -> google.protobuf.Timestamp
11
,
// 13: memos.api.v1.ListUserStatsResponse.user_stats:type_name -> memos.api.v1.UserStats
14
,
// 14: memos.api.v1.ListUserAccessTokensResponse.access_tokens:type_name -> memos.api.v1.UserAccessToken
14
,
// 14: memos.api.v1.UpdateUserSettingRequest.setting:type_name -> memos.api.v1.UserSetting
20
,
// 15: memos.api.v1.CreateUserAccessTokenRequest.expires_at:type_name -> google.protobuf.Timestamp
27
,
// 15: memos.api.v1.UpdateUserSettingRequest.update_mask:type_name -> google.protobuf.FieldMask
2
,
// 16: memos.api.v1.UserService.ListUsers:input_type -> memos.api.v1.ListUsersRequest
25
,
// 16: memos.api.v1.UserAccessToken.issued_at:type_name -> google.protobuf.Timestamp
4
,
// 17: memos.api.v1.UserService.SearchUsers:input_type -> memos.api.v1.SearchUsersRequest
25
,
// 17: memos.api.v1.UserAccessToken.expires_at:type_name -> google.protobuf.Timestamp
6
,
// 18: memos.api.v1.UserService.GetUser:input_type -> memos.api.v1.GetUserRequest
17
,
// 18: memos.api.v1.ListUserAccessTokensResponse.access_tokens:type_name -> memos.api.v1.UserAccessToken
7
,
// 19: memos.api.v1.UserService.GetUserAvatarBinary:input_type -> memos.api.v1.GetUserAvatarBinaryRequest
25
,
// 19: memos.api.v1.CreateUserAccessTokenRequest.expires_at:type_name -> google.protobuf.Timestamp
8
,
// 20: memos.api.v1.UserService.CreateUser:input_type -> memos.api.v1.CreateUserRequest
2
,
// 20: memos.api.v1.UserService.ListUsers:input_type -> memos.api.v1.ListUsersRequest
9
,
// 21: memos.api.v1.UserService.UpdateUser:input_type -> memos.api.v1.UpdateUserRequest
4
,
// 21: memos.api.v1.UserService.SearchUsers:input_type -> memos.api.v1.SearchUsersRequest
10
,
// 22: memos.api.v1.UserService.DeleteUser:input_type -> memos.api.v1.DeleteUserRequest
6
,
// 22: memos.api.v1.UserService.GetUser:input_type -> memos.api.v1.GetUserRequest
12
,
// 23: memos.api.v1.UserService.GetUserSetting:input_type -> memos.api.v1.GetUserSettingRequest
7
,
// 23: memos.api.v1.UserService.GetUserAvatarBinary:input_type -> memos.api.v1.GetUserAvatarBinaryRequest
13
,
// 24: memos.api.v1.UserService.UpdateUserSetting:input_type -> memos.api.v1.UpdateUserSettingRequest
8
,
// 24: memos.api.v1.UserService.CreateUser:input_type -> memos.api.v1.CreateUserRequest
15
,
// 25: memos.api.v1.UserService.ListUserAccessTokens:input_type -> memos.api.v1.ListUserAccessTokensRequest
9
,
// 25: memos.api.v1.UserService.UpdateUser:input_type -> memos.api.v1.UpdateUserRequest
17
,
// 26: memos.api.v1.UserService.CreateUserAccessToken:input_type -> memos.api.v1.CreateUserAccessTokenRequest
10
,
// 26: memos.api.v1.UserService.DeleteUser:input_type -> memos.api.v1.DeleteUserRequest
18
,
// 27: memos.api.v1.UserService.DeleteUserAccessToken:input_type -> memos.api.v1.DeleteUserAccessTokenRequest
12
,
// 27: memos.api.v1.UserService.ListUserStats:input_type -> memos.api.v1.ListUserStatsRequest
3
,
// 28: memos.api.v1.UserService.ListUsers:output_type -> memos.api.v1.ListUsersResponse
15
,
// 28: memos.api.v1.UserService.GetUserSetting:input_type -> memos.api.v1.GetUserSettingRequest
5
,
// 29: memos.api.v1.UserService.SearchUsers:output_type -> memos.api.v1.SearchUsersResponse
16
,
// 29: memos.api.v1.UserService.UpdateUserSetting:input_type -> memos.api.v1.UpdateUserSettingRequest
1
,
// 30: memos.api.v1.UserService.GetUser:output_type -> memos.api.v1.User
18
,
// 30: memos.api.v1.UserService.ListUserAccessTokens:input_type -> memos.api.v1.ListUserAccessTokensRequest
21
,
// 31: memos.api.v1.UserService.GetUserAvatarBinary:output_type -> google.api.HttpBody
20
,
// 31: memos.api.v1.UserService.CreateUserAccessToken:input_type -> memos.api.v1.CreateUserAccessTokenRequest
1
,
// 32: memos.api.v1.UserService.CreateUser:output_type -> memos.api.v1.User
21
,
// 32: memos.api.v1.UserService.DeleteUserAccessToken:input_type -> memos.api.v1.DeleteUserAccessTokenRequest
1
,
// 33: memos.api.v1.UserService.UpdateUser:output_type -> memos.api.v1.User
3
,
// 33: memos.api.v1.UserService.ListUsers:output_type -> memos.api.v1.ListUsersResponse
23
,
// 34: memos.api.v1.UserService.DeleteUser:output_type -> google.protobuf.Empty
5
,
// 34: memos.api.v1.UserService.SearchUsers:output_type -> memos.api.v1.SearchUsersResponse
11
,
// 35: memos.api.v1.UserService.GetUserSetting:output_type -> memos.api.v1.UserSetting
1
,
// 35: memos.api.v1.UserService.GetUser:output_type -> memos.api.v1.User
11
,
// 36: memos.api.v1.UserService.UpdateUserSetting:output_type -> memos.api.v1.UserSetting
26
,
// 36: memos.api.v1.UserService.GetUserAvatarBinary:output_type -> google.api.HttpBody
16
,
// 37: memos.api.v1.UserService.ListUserAccessTokens:output_type -> memos.api.v1.ListUserAccessTokensResponse
1
,
// 37: memos.api.v1.UserService.CreateUser:output_type -> memos.api.v1.User
14
,
// 38: memos.api.v1.UserService.CreateUserAccessToken:output_type -> memos.api.v1.UserAccessToken
1
,
// 38: memos.api.v1.UserService.UpdateUser:output_type -> memos.api.v1.User
23
,
// 39: memos.api.v1.UserService.DeleteUserAccessToken:output_type -> google.protobuf.Empty
28
,
// 39: memos.api.v1.UserService.DeleteUser:output_type -> google.protobuf.Empty
28
,
// [28:40] is the sub-list for method output_type
13
,
// 40: memos.api.v1.UserService.ListUserStats:output_type -> memos.api.v1.ListUserStatsResponse
16
,
// [16:28] is the sub-list for method input_type
14
,
// 41: memos.api.v1.UserService.GetUserSetting:output_type -> memos.api.v1.UserSetting
16
,
// [16:16] is the sub-list for extension type_name
14
,
// 42: memos.api.v1.UserService.UpdateUserSetting:output_type -> memos.api.v1.UserSetting
16
,
// [16:16] is the sub-list for extension extendee
19
,
// 43: memos.api.v1.UserService.ListUserAccessTokens:output_type -> memos.api.v1.ListUserAccessTokensResponse
0
,
// [0:16] is the sub-list for field type_name
17
,
// 44: memos.api.v1.UserService.CreateUserAccessToken:output_type -> memos.api.v1.UserAccessToken
28
,
// 45: memos.api.v1.UserService.DeleteUserAccessToken:output_type -> google.protobuf.Empty
33
,
// [33:46] is the sub-list for method output_type
20
,
// [20:33] is the sub-list for method input_type
20
,
// [20:20] is the sub-list for extension type_name
20
,
// [20:20] is the sub-list for extension extendee
0
,
// [0:20] is the sub-list for field type_name
}
}
func
init
()
{
file_api_v1_user_service_proto_init
()
}
func
init
()
{
file_api_v1_user_service_proto_init
()
}
...
@@ -1413,14 +1693,14 @@ func file_api_v1_user_service_proto_init() {
...
@@ -1413,14 +1693,14 @@ func file_api_v1_user_service_proto_init() {
return
return
}
}
file_api_v1_common_proto_init
()
file_api_v1_common_proto_init
()
file_api_v1_user_service_proto_msgTypes
[
1
6
]
.
OneofWrappers
=
[]
any
{}
file_api_v1_user_service_proto_msgTypes
[
1
9
]
.
OneofWrappers
=
[]
any
{}
type
x
struct
{}
type
x
struct
{}
out
:=
protoimpl
.
TypeBuilder
{
out
:=
protoimpl
.
TypeBuilder
{
File
:
protoimpl
.
DescBuilder
{
File
:
protoimpl
.
DescBuilder
{
GoPackagePath
:
reflect
.
TypeOf
(
x
{})
.
PkgPath
(),
GoPackagePath
:
reflect
.
TypeOf
(
x
{})
.
PkgPath
(),
RawDescriptor
:
file_api_v1_user_service_proto_rawDesc
,
RawDescriptor
:
file_api_v1_user_service_proto_rawDesc
,
NumEnums
:
1
,
NumEnums
:
1
,
NumMessages
:
18
,
NumMessages
:
23
,
NumExtensions
:
0
,
NumExtensions
:
0
,
NumServices
:
1
,
NumServices
:
1
,
},
},
...
...
proto/gen/api/v1/user_service.pb.gw.go
View file @
34c26a39
...
@@ -309,6 +309,42 @@ func local_request_UserService_DeleteUser_0(ctx context.Context, marshaler runti
...
@@ -309,6 +309,42 @@ func local_request_UserService_DeleteUser_0(ctx context.Context, marshaler runti
return
msg
,
metadata
,
err
return
msg
,
metadata
,
err
}
}
func
request_UserService_ListUserStats_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
UserServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
ListUserStatsRequest
metadata
runtime
.
ServerMetadata
err
error
)
val
,
ok
:=
pathParams
[
"name"
]
if
!
ok
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"missing parameter %s"
,
"name"
)
}
protoReq
.
Name
,
err
=
runtime
.
String
(
val
)
if
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"type mismatch, parameter: %s, error: %v"
,
"name"
,
err
)
}
msg
,
err
:=
client
.
ListUserStats
(
ctx
,
&
protoReq
,
grpc
.
Header
(
&
metadata
.
HeaderMD
),
grpc
.
Trailer
(
&
metadata
.
TrailerMD
))
return
msg
,
metadata
,
err
}
func
local_request_UserService_ListUserStats_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
server
UserServiceServer
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
protoReq
ListUserStatsRequest
metadata
runtime
.
ServerMetadata
err
error
)
val
,
ok
:=
pathParams
[
"name"
]
if
!
ok
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"missing parameter %s"
,
"name"
)
}
protoReq
.
Name
,
err
=
runtime
.
String
(
val
)
if
err
!=
nil
{
return
nil
,
metadata
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"type mismatch, parameter: %s, error: %v"
,
"name"
,
err
)
}
msg
,
err
:=
server
.
ListUserStats
(
ctx
,
&
protoReq
)
return
msg
,
metadata
,
err
}
func
request_UserService_GetUserSetting_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
UserServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
func
request_UserService_GetUserSetting_0
(
ctx
context
.
Context
,
marshaler
runtime
.
Marshaler
,
client
UserServiceClient
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
(
proto
.
Message
,
runtime
.
ServerMetadata
,
error
)
{
var
(
var
(
protoReq
GetUserSettingRequest
protoReq
GetUserSettingRequest
...
@@ -699,6 +735,26 @@ func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
...
@@ -699,6 +735,26 @@ func RegisterUserServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
}
}
forward_UserService_DeleteUser_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
forward_UserService_DeleteUser_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_ListUserStats_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
var
stream
runtime
.
ServerTransportStream
ctx
=
grpc
.
NewContextWithServerTransportStream
(
ctx
,
&
stream
)
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
annotatedContext
,
err
:=
runtime
.
AnnotateIncomingContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/ListUserStats"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=users/*}/stats"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
local_request_UserService_ListUserStats_0
(
annotatedContext
,
inboundMarshaler
,
server
,
req
,
pathParams
)
md
.
HeaderMD
,
md
.
TrailerMD
=
metadata
.
Join
(
md
.
HeaderMD
,
stream
.
Header
()),
metadata
.
Join
(
md
.
TrailerMD
,
stream
.
Trailer
())
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_UserService_ListUserStats_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUserSetting_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUserSetting_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
defer
cancel
()
...
@@ -958,6 +1014,23 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
...
@@ -958,6 +1014,23 @@ func RegisterUserServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
}
}
forward_UserService_DeleteUser_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
forward_UserService_DeleteUser_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_ListUserStats_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
inboundMarshaler
,
outboundMarshaler
:=
runtime
.
MarshalerForRequest
(
mux
,
req
)
annotatedContext
,
err
:=
runtime
.
AnnotateContext
(
ctx
,
mux
,
req
,
"/memos.api.v1.UserService/ListUserStats"
,
runtime
.
WithHTTPPathPattern
(
"/api/v1/{name=users/*}/stats"
))
if
err
!=
nil
{
runtime
.
HTTPError
(
ctx
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
resp
,
md
,
err
:=
request_UserService_ListUserStats_0
(
annotatedContext
,
inboundMarshaler
,
client
,
req
,
pathParams
)
annotatedContext
=
runtime
.
NewServerMetadataContext
(
annotatedContext
,
md
)
if
err
!=
nil
{
runtime
.
HTTPError
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
err
)
return
}
forward_UserService_ListUserStats_0
(
annotatedContext
,
mux
,
outboundMarshaler
,
w
,
req
,
resp
,
mux
.
GetForwardResponseOptions
()
...
)
})
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUserSetting_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
mux
.
Handle
(
http
.
MethodGet
,
pattern_UserService_GetUserSetting_0
,
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
,
pathParams
map
[
string
]
string
)
{
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
ctx
,
cancel
:=
context
.
WithCancel
(
req
.
Context
())
defer
cancel
()
defer
cancel
()
...
@@ -1054,6 +1127,7 @@ var (
...
@@ -1054,6 +1127,7 @@ var (
pattern_UserService_CreateUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"users"
},
""
))
pattern_UserService_CreateUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
},
[]
string
{
"api"
,
"v1"
,
"users"
},
""
))
pattern_UserService_UpdateUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"user.name"
},
""
))
pattern_UserService_UpdateUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"user.name"
},
""
))
pattern_UserService_DeleteUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"name"
},
""
))
pattern_UserService_DeleteUser_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"name"
},
""
))
pattern_UserService_ListUserStats_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"name"
,
"stats"
},
""
))
pattern_UserService_GetUserSetting_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"name"
,
"setting"
},
""
))
pattern_UserService_GetUserSetting_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"name"
,
"setting"
},
""
))
pattern_UserService_UpdateUserSetting_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
2
,
3
,
4
,
3
,
5
,
4
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"setting"
,
"setting.name"
},
""
))
pattern_UserService_UpdateUserSetting_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
2
,
3
,
4
,
3
,
5
,
4
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"setting"
,
"setting.name"
},
""
))
pattern_UserService_ListUserAccessTokens_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"name"
,
"access_tokens"
},
""
))
pattern_UserService_ListUserAccessTokens_0
=
runtime
.
MustPattern
(
runtime
.
NewPattern
(
1
,
[]
int
{
2
,
0
,
2
,
1
,
2
,
2
,
1
,
0
,
4
,
2
,
5
,
3
,
2
,
4
},
[]
string
{
"api"
,
"v1"
,
"users"
,
"name"
,
"access_tokens"
},
""
))
...
@@ -1069,6 +1143,7 @@ var (
...
@@ -1069,6 +1143,7 @@ var (
forward_UserService_CreateUser_0
=
runtime
.
ForwardResponseMessage
forward_UserService_CreateUser_0
=
runtime
.
ForwardResponseMessage
forward_UserService_UpdateUser_0
=
runtime
.
ForwardResponseMessage
forward_UserService_UpdateUser_0
=
runtime
.
ForwardResponseMessage
forward_UserService_DeleteUser_0
=
runtime
.
ForwardResponseMessage
forward_UserService_DeleteUser_0
=
runtime
.
ForwardResponseMessage
forward_UserService_ListUserStats_0
=
runtime
.
ForwardResponseMessage
forward_UserService_GetUserSetting_0
=
runtime
.
ForwardResponseMessage
forward_UserService_GetUserSetting_0
=
runtime
.
ForwardResponseMessage
forward_UserService_UpdateUserSetting_0
=
runtime
.
ForwardResponseMessage
forward_UserService_UpdateUserSetting_0
=
runtime
.
ForwardResponseMessage
forward_UserService_ListUserAccessTokens_0
=
runtime
.
ForwardResponseMessage
forward_UserService_ListUserAccessTokens_0
=
runtime
.
ForwardResponseMessage
...
...
proto/gen/api/v1/user_service_grpc.pb.go
View file @
34c26a39
...
@@ -28,6 +28,7 @@ const (
...
@@ -28,6 +28,7 @@ const (
UserService_CreateUser_FullMethodName
=
"/memos.api.v1.UserService/CreateUser"
UserService_CreateUser_FullMethodName
=
"/memos.api.v1.UserService/CreateUser"
UserService_UpdateUser_FullMethodName
=
"/memos.api.v1.UserService/UpdateUser"
UserService_UpdateUser_FullMethodName
=
"/memos.api.v1.UserService/UpdateUser"
UserService_DeleteUser_FullMethodName
=
"/memos.api.v1.UserService/DeleteUser"
UserService_DeleteUser_FullMethodName
=
"/memos.api.v1.UserService/DeleteUser"
UserService_ListUserStats_FullMethodName
=
"/memos.api.v1.UserService/ListUserStats"
UserService_GetUserSetting_FullMethodName
=
"/memos.api.v1.UserService/GetUserSetting"
UserService_GetUserSetting_FullMethodName
=
"/memos.api.v1.UserService/GetUserSetting"
UserService_UpdateUserSetting_FullMethodName
=
"/memos.api.v1.UserService/UpdateUserSetting"
UserService_UpdateUserSetting_FullMethodName
=
"/memos.api.v1.UserService/UpdateUserSetting"
UserService_ListUserAccessTokens_FullMethodName
=
"/memos.api.v1.UserService/ListUserAccessTokens"
UserService_ListUserAccessTokens_FullMethodName
=
"/memos.api.v1.UserService/ListUserAccessTokens"
...
@@ -53,6 +54,7 @@ type UserServiceClient interface {
...
@@ -53,6 +54,7 @@ type UserServiceClient interface {
UpdateUser
(
ctx
context
.
Context
,
in
*
UpdateUserRequest
,
opts
...
grpc
.
CallOption
)
(
*
User
,
error
)
UpdateUser
(
ctx
context
.
Context
,
in
*
UpdateUserRequest
,
opts
...
grpc
.
CallOption
)
(
*
User
,
error
)
// DeleteUser deletes a user.
// DeleteUser deletes a user.
DeleteUser
(
ctx
context
.
Context
,
in
*
DeleteUserRequest
,
opts
...
grpc
.
CallOption
)
(
*
emptypb
.
Empty
,
error
)
DeleteUser
(
ctx
context
.
Context
,
in
*
DeleteUserRequest
,
opts
...
grpc
.
CallOption
)
(
*
emptypb
.
Empty
,
error
)
ListUserStats
(
ctx
context
.
Context
,
in
*
ListUserStatsRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListUserStatsResponse
,
error
)
// GetUserSetting gets the setting of a user.
// GetUserSetting gets the setting of a user.
GetUserSetting
(
ctx
context
.
Context
,
in
*
GetUserSettingRequest
,
opts
...
grpc
.
CallOption
)
(
*
UserSetting
,
error
)
GetUserSetting
(
ctx
context
.
Context
,
in
*
GetUserSettingRequest
,
opts
...
grpc
.
CallOption
)
(
*
UserSetting
,
error
)
// UpdateUserSetting updates the setting of a user.
// UpdateUserSetting updates the setting of a user.
...
@@ -143,6 +145,16 @@ func (c *userServiceClient) DeleteUser(ctx context.Context, in *DeleteUserReques
...
@@ -143,6 +145,16 @@ func (c *userServiceClient) DeleteUser(ctx context.Context, in *DeleteUserReques
return
out
,
nil
return
out
,
nil
}
}
func
(
c
*
userServiceClient
)
ListUserStats
(
ctx
context
.
Context
,
in
*
ListUserStatsRequest
,
opts
...
grpc
.
CallOption
)
(
*
ListUserStatsResponse
,
error
)
{
cOpts
:=
append
([]
grpc
.
CallOption
{
grpc
.
StaticMethod
()},
opts
...
)
out
:=
new
(
ListUserStatsResponse
)
err
:=
c
.
cc
.
Invoke
(
ctx
,
UserService_ListUserStats_FullMethodName
,
in
,
out
,
cOpts
...
)
if
err
!=
nil
{
return
nil
,
err
}
return
out
,
nil
}
func
(
c
*
userServiceClient
)
GetUserSetting
(
ctx
context
.
Context
,
in
*
GetUserSettingRequest
,
opts
...
grpc
.
CallOption
)
(
*
UserSetting
,
error
)
{
func
(
c
*
userServiceClient
)
GetUserSetting
(
ctx
context
.
Context
,
in
*
GetUserSettingRequest
,
opts
...
grpc
.
CallOption
)
(
*
UserSetting
,
error
)
{
cOpts
:=
append
([]
grpc
.
CallOption
{
grpc
.
StaticMethod
()},
opts
...
)
cOpts
:=
append
([]
grpc
.
CallOption
{
grpc
.
StaticMethod
()},
opts
...
)
out
:=
new
(
UserSetting
)
out
:=
new
(
UserSetting
)
...
@@ -211,6 +223,7 @@ type UserServiceServer interface {
...
@@ -211,6 +223,7 @@ type UserServiceServer interface {
UpdateUser
(
context
.
Context
,
*
UpdateUserRequest
)
(
*
User
,
error
)
UpdateUser
(
context
.
Context
,
*
UpdateUserRequest
)
(
*
User
,
error
)
// DeleteUser deletes a user.
// DeleteUser deletes a user.
DeleteUser
(
context
.
Context
,
*
DeleteUserRequest
)
(
*
emptypb
.
Empty
,
error
)
DeleteUser
(
context
.
Context
,
*
DeleteUserRequest
)
(
*
emptypb
.
Empty
,
error
)
ListUserStats
(
context
.
Context
,
*
ListUserStatsRequest
)
(
*
ListUserStatsResponse
,
error
)
// GetUserSetting gets the setting of a user.
// GetUserSetting gets the setting of a user.
GetUserSetting
(
context
.
Context
,
*
GetUserSettingRequest
)
(
*
UserSetting
,
error
)
GetUserSetting
(
context
.
Context
,
*
GetUserSettingRequest
)
(
*
UserSetting
,
error
)
// UpdateUserSetting updates the setting of a user.
// UpdateUserSetting updates the setting of a user.
...
@@ -252,6 +265,9 @@ func (UnimplementedUserServiceServer) UpdateUser(context.Context, *UpdateUserReq
...
@@ -252,6 +265,9 @@ func (UnimplementedUserServiceServer) UpdateUser(context.Context, *UpdateUserReq
func
(
UnimplementedUserServiceServer
)
DeleteUser
(
context
.
Context
,
*
DeleteUserRequest
)
(
*
emptypb
.
Empty
,
error
)
{
func
(
UnimplementedUserServiceServer
)
DeleteUser
(
context
.
Context
,
*
DeleteUserRequest
)
(
*
emptypb
.
Empty
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method DeleteUser not implemented"
)
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method DeleteUser not implemented"
)
}
}
func
(
UnimplementedUserServiceServer
)
ListUserStats
(
context
.
Context
,
*
ListUserStatsRequest
)
(
*
ListUserStatsResponse
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method ListUserStats not implemented"
)
}
func
(
UnimplementedUserServiceServer
)
GetUserSetting
(
context
.
Context
,
*
GetUserSettingRequest
)
(
*
UserSetting
,
error
)
{
func
(
UnimplementedUserServiceServer
)
GetUserSetting
(
context
.
Context
,
*
GetUserSettingRequest
)
(
*
UserSetting
,
error
)
{
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method GetUserSetting not implemented"
)
return
nil
,
status
.
Errorf
(
codes
.
Unimplemented
,
"method GetUserSetting not implemented"
)
}
}
...
@@ -414,6 +430,24 @@ func _UserService_DeleteUser_Handler(srv interface{}, ctx context.Context, dec f
...
@@ -414,6 +430,24 @@ func _UserService_DeleteUser_Handler(srv interface{}, ctx context.Context, dec f
return
interceptor
(
ctx
,
in
,
info
,
handler
)
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
}
func
_UserService_ListUserStats_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
ListUserStatsRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
return
nil
,
err
}
if
interceptor
==
nil
{
return
srv
.
(
UserServiceServer
)
.
ListUserStats
(
ctx
,
in
)
}
info
:=
&
grpc
.
UnaryServerInfo
{
Server
:
srv
,
FullMethod
:
UserService_ListUserStats_FullMethodName
,
}
handler
:=
func
(
ctx
context
.
Context
,
req
interface
{})
(
interface
{},
error
)
{
return
srv
.
(
UserServiceServer
)
.
ListUserStats
(
ctx
,
req
.
(
*
ListUserStatsRequest
))
}
return
interceptor
(
ctx
,
in
,
info
,
handler
)
}
func
_UserService_GetUserSetting_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
func
_UserService_GetUserSetting_Handler
(
srv
interface
{},
ctx
context
.
Context
,
dec
func
(
interface
{})
error
,
interceptor
grpc
.
UnaryServerInterceptor
)
(
interface
{},
error
)
{
in
:=
new
(
GetUserSettingRequest
)
in
:=
new
(
GetUserSettingRequest
)
if
err
:=
dec
(
in
);
err
!=
nil
{
if
err
:=
dec
(
in
);
err
!=
nil
{
...
@@ -539,6 +573,10 @@ var UserService_ServiceDesc = grpc.ServiceDesc{
...
@@ -539,6 +573,10 @@ var UserService_ServiceDesc = grpc.ServiceDesc{
MethodName
:
"DeleteUser"
,
MethodName
:
"DeleteUser"
,
Handler
:
_UserService_DeleteUser_Handler
,
Handler
:
_UserService_DeleteUser_Handler
,
},
},
{
MethodName
:
"ListUserStats"
,
Handler
:
_UserService_ListUserStats_Handler
,
},
{
{
MethodName
:
"GetUserSetting"
,
MethodName
:
"GetUserSetting"
,
Handler
:
_UserService_GetUserSetting_Handler
,
Handler
:
_UserService_GetUserSetting_Handler
,
...
...
proto/gen/apidocs.swagger.yaml
View file @
34c26a39
...
@@ -1464,6 +1464,29 @@ paths:
...
@@ -1464,6 +1464,29 @@ paths:
pattern: users/[^/]+
pattern: users/[^/]+
tags
:
tags
:
-
UserService
-
UserService
/api/v1/{name}/stats
:
get
:
operationId
:
UserService_ListUserStats
responses
:
"
200"
:
description
:
A successful response.
schema
:
$ref
:
'
#/definitions/v1ListUserStatsResponse'
default
:
description
:
An unexpected error response.
schema
:
$ref
:
'
#/definitions/googlerpcStatus'
parameters
:
-
name
:
name
description
:
|-
The name of the user.
Format: users/{user}. Use "-" to list all users.
in: path
required: true
type: string
pattern: users/[^/]+
tags
:
-
UserService
/api/v1/{parent}/tags/{tag}
:
/api/v1/{parent}/tags/{tag}
:
delete
:
delete
:
summary
:
DeleteMemoTag deletes a tag for a memo.
summary
:
DeleteMemoTag deletes a tag for a memo.
...
@@ -1808,6 +1831,18 @@ definitions:
...
@@ -1808,6 +1831,18 @@ definitions:
expiresAt
:
expiresAt
:
type
:
string
type
:
string
format
:
date-time
format
:
date-time
UserStatsMemoTypeStats
:
type
:
object
properties
:
linkCount
:
type
:
integer
format
:
int32
taskCount
:
type
:
integer
format
:
int32
codeCount
:
type
:
integer
format
:
int32
WorkspaceStorageSettingS3Config
:
WorkspaceStorageSettingS3Config
:
type
:
object
type
:
object
properties
:
properties
:
...
@@ -2635,6 +2670,14 @@ definitions:
...
@@ -2635,6 +2670,14 @@ definitions:
items
:
items
:
type
:
object
type
:
object
$ref
:
'
#/definitions/v1UserAccessToken'
$ref
:
'
#/definitions/v1UserAccessToken'
v1ListUserStatsResponse
:
type
:
object
properties
:
userStats
:
type
:
array
items
:
type
:
object
$ref
:
'
#/definitions/v1UserStats'
v1ListUsersResponse
:
v1ListUsersResponse
:
type
:
object
type
:
object
properties
:
properties
:
...
@@ -3074,6 +3117,33 @@ definitions:
...
@@ -3074,6 +3117,33 @@ definitions:
expiresAt
:
expiresAt
:
type
:
string
type
:
string
format
:
date-time
format
:
date-time
v1UserStats
:
type
:
object
properties
:
name
:
type
:
string
title
:
|-
The name of the user.
Format: users/{user}
memoDisplayTimestamps
:
type
:
array
items
:
type
:
string
format
:
date-time
description
:
|-
The timestamps when the memos were displayed.
We should return raw data to the client, and let the client format the data with the user's timezone.
memoTypeStats
:
$ref
:
'
#/definitions/UserStatsMemoTypeStats'
description
:
The stats of memo types.
tagCount
:
type
:
object
additionalProperties
:
type
:
integer
format
:
int32
title
:
|-
The count of tags.
Format: "tag1": 1, "tag2": 2
v1Visibility
:
v1Visibility
:
type
:
string
type
:
string
enum
:
enum
:
...
...
server/router/api/v1/acl_config.go
View file @
34c26a39
...
@@ -13,6 +13,7 @@ var authenticationAllowlistMethods = map[string]bool{
...
@@ -13,6 +13,7 @@ var authenticationAllowlistMethods = map[string]bool{
"/memos.api.v1.AuthService/SignUp"
:
true
,
"/memos.api.v1.AuthService/SignUp"
:
true
,
"/memos.api.v1.UserService/GetUser"
:
true
,
"/memos.api.v1.UserService/GetUser"
:
true
,
"/memos.api.v1.UserService/GetUserAvatarBinary"
:
true
,
"/memos.api.v1.UserService/GetUserAvatarBinary"
:
true
,
"/memos.api.v1.UserService/ListUserStats"
:
true
,
"/memos.api.v1.UserService/SearchUsers"
:
true
,
"/memos.api.v1.UserService/SearchUsers"
:
true
,
"/memos.api.v1.MemoService/GetMemo"
:
true
,
"/memos.api.v1.MemoService/GetMemo"
:
true
,
"/memos.api.v1.MemoService/GetMemoByUid"
:
true
,
"/memos.api.v1.MemoService/GetMemoByUid"
:
true
,
...
...
server/router/api/v1/user_service.go
View file @
34c26a39
...
@@ -275,6 +275,99 @@ func (s *APIV1Service) DeleteUser(ctx context.Context, request *v1pb.DeleteUserR
...
@@ -275,6 +275,99 @@ func (s *APIV1Service) DeleteUser(ctx context.Context, request *v1pb.DeleteUserR
return
&
emptypb
.
Empty
{},
nil
return
&
emptypb
.
Empty
{},
nil
}
}
func
(
s
*
APIV1Service
)
ListUserStats
(
ctx
context
.
Context
,
request
*
v1pb
.
ListUserStatsRequest
)
(
*
v1pb
.
ListUserStatsResponse
,
error
)
{
currentUser
,
err
:=
s
.
GetCurrentUser
(
ctx
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get user: %v"
,
err
)
}
// For unauthenticated users, only public memos are visible.
defaultVisibilities
:=
[]
store
.
Visibility
{
store
.
Public
}
if
currentUser
!=
nil
{
// For authenticated users, protected memos are also visible.
defaultVisibilities
=
append
(
defaultVisibilities
,
store
.
Protected
)
}
users
:=
[]
*
store
.
User
{}
if
request
.
Name
==
"users/-"
{
users
,
err
=
s
.
Store
.
ListUsers
(
ctx
,
&
store
.
FindUser
{})
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to list users: %v"
,
err
)
}
}
else
{
userID
,
err
:=
ExtractUserIDFromName
(
request
.
Name
)
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"invalid user name: %v"
,
err
)
}
if
userID
==
currentUser
.
ID
{
users
=
append
(
users
,
currentUser
)
}
else
{
user
,
err
:=
s
.
Store
.
GetUser
(
ctx
,
&
store
.
FindUser
{
ID
:
&
userID
})
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get user: %v"
,
err
)
}
if
user
==
nil
{
return
nil
,
status
.
Errorf
(
codes
.
NotFound
,
"user not found"
)
}
users
=
append
(
users
,
user
)
}
}
workspaceMemoRelatedSetting
,
err
:=
s
.
Store
.
GetWorkspaceMemoRelatedSetting
(
ctx
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"failed to get workspace memo related setting"
)
}
userStatsList
:=
[]
*
v1pb
.
UserStats
{}
for
_
,
user
:=
range
users
{
userStats
:=
&
v1pb
.
UserStats
{
Name
:
fmt
.
Sprintf
(
"%s%d"
,
UserNamePrefix
,
user
.
ID
),
MemoDisplayTimestamps
:
[]
*
timestamppb
.
Timestamp
{},
MemoTypeStats
:
&
v1pb
.
UserStats_MemoTypeStats
{},
TagCount
:
map
[
string
]
int32
{},
}
var
visibilities
[]
store
.
Visibility
=
defaultVisibilities
// For the current user, show all memos including private ones.
if
user
.
ID
==
currentUser
.
ID
{
visibilities
=
[]
store
.
Visibility
{
store
.
Public
,
store
.
Protected
,
store
.
Private
}
}
memos
,
err
:=
s
.
Store
.
ListMemos
(
ctx
,
&
store
.
FindMemo
{
// Exclude comments by default.
ExcludeComments
:
true
,
ExcludeContent
:
true
,
CreatorID
:
&
user
.
ID
,
VisibilityList
:
visibilities
,
})
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to list memos: %v"
,
err
)
}
for
_
,
memo
:=
range
memos
{
displayTs
:=
memo
.
CreatedTs
if
workspaceMemoRelatedSetting
.
DisplayWithUpdateTime
{
displayTs
=
memo
.
UpdatedTs
}
userStats
.
MemoDisplayTimestamps
=
append
(
userStats
.
MemoDisplayTimestamps
,
timestamppb
.
New
(
time
.
Unix
(
displayTs
,
0
)))
// Handle duplicated tags.
for
_
,
tag
:=
range
memo
.
Payload
.
Tags
{
userStats
.
TagCount
[
tag
]
++
}
if
memo
.
Payload
.
Property
.
GetHasLink
()
{
userStats
.
MemoTypeStats
.
LinkCount
++
}
if
memo
.
Payload
.
Property
.
GetHasTaskList
()
{
userStats
.
MemoTypeStats
.
TaskCount
++
}
if
memo
.
Payload
.
Property
.
GetHasCode
()
{
userStats
.
MemoTypeStats
.
CodeCount
++
}
}
userStatsList
=
append
(
userStatsList
,
userStats
)
}
return
&
v1pb
.
ListUserStatsResponse
{
UserStats
:
userStatsList
,
},
nil
}
func
getDefaultUserSetting
(
workspaceMemoRelatedSetting
*
storepb
.
WorkspaceMemoRelatedSetting
)
*
v1pb
.
UserSetting
{
func
getDefaultUserSetting
(
workspaceMemoRelatedSetting
*
storepb
.
WorkspaceMemoRelatedSetting
)
*
v1pb
.
UserSetting
{
defaultVisibility
:=
"PRIVATE"
defaultVisibility
:=
"PRIVATE"
if
workspaceMemoRelatedSetting
.
DefaultVisibility
!=
""
{
if
workspaceMemoRelatedSetting
.
DefaultVisibility
!=
""
{
...
...
test/store/memo_test.go
View file @
34c26a39
...
@@ -54,10 +54,8 @@ func TestMemoStore(t *testing.T) {
...
@@ -54,10 +54,8 @@ func TestMemoStore(t *testing.T) {
require
.
Equal
(
t
,
0
,
len
(
memoList
))
require
.
Equal
(
t
,
0
,
len
(
memoList
))
memoList
,
err
=
ts
.
ListMemos
(
ctx
,
&
store
.
FindMemo
{
memoList
,
err
=
ts
.
ListMemos
(
ctx
,
&
store
.
FindMemo
{
CreatorID
:
&
user
.
ID
,
CreatorID
:
&
user
.
ID
,
VisibilityList
:
[]
store
.
Visibility
{
VisibilityList
:
[]
store
.
Visibility
{
store
.
Public
},
store
.
Public
,
},
})
})
require
.
NoError
(
t
,
err
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
0
,
len
(
memoList
))
require
.
Equal
(
t
,
0
,
len
(
memoList
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment