github.com/quickfeed/quickfeed@v0.0.0-20240507093252-ed8ca812a09c/qf/types.pb.go (about)

     1  // Code generated by protoc-gen-go. DO NOT EDIT.
     2  // versions:
     3  // 	protoc-gen-go v1.33.0
     4  // 	protoc        (unknown)
     5  // source: qf/types.proto
     6  
     7  package qf
     8  
     9  import (
    10  	_ "github.com/alta/protopatch/patch/gopb"
    11  	score "github.com/quickfeed/quickfeed/kit/score"
    12  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    13  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    14  	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
    15  	reflect "reflect"
    16  	sync "sync"
    17  )
    18  
    19  const (
    20  	// Verify that this generated code is sufficiently up-to-date.
    21  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    22  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    23  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    24  )
    25  
    26  type Group_GroupStatus int32
    27  
    28  const (
    29  	Group_PENDING  Group_GroupStatus = 0
    30  	Group_APPROVED Group_GroupStatus = 1
    31  )
    32  
    33  // Enum value maps for Group_GroupStatus.
    34  var (
    35  	Group_GroupStatus_name = map[int32]string{
    36  		0: "PENDING",
    37  		1: "APPROVED",
    38  	}
    39  	Group_GroupStatus_value = map[string]int32{
    40  		"PENDING":  0,
    41  		"APPROVED": 1,
    42  	}
    43  )
    44  
    45  func (x Group_GroupStatus) Enum() *Group_GroupStatus {
    46  	p := new(Group_GroupStatus)
    47  	*p = x
    48  	return p
    49  }
    50  
    51  func (x Group_GroupStatus) String() string {
    52  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
    53  }
    54  
    55  func (Group_GroupStatus) Descriptor() protoreflect.EnumDescriptor {
    56  	return file_qf_types_proto_enumTypes[0].Descriptor()
    57  }
    58  
    59  func (Group_GroupStatus) Type() protoreflect.EnumType {
    60  	return &file_qf_types_proto_enumTypes[0]
    61  }
    62  
    63  func (x Group_GroupStatus) Number() protoreflect.EnumNumber {
    64  	return protoreflect.EnumNumber(x)
    65  }
    66  
    67  // Deprecated: Use Group_GroupStatus.Descriptor instead.
    68  func (Group_GroupStatus) EnumDescriptor() ([]byte, []int) {
    69  	return file_qf_types_proto_rawDescGZIP(), []int{2, 0}
    70  }
    71  
    72  type Repository_Type int32
    73  
    74  const (
    75  	Repository_NONE        Repository_Type = 0
    76  	Repository_INFO        Repository_Type = 1
    77  	Repository_ASSIGNMENTS Repository_Type = 2
    78  	Repository_TESTS       Repository_Type = 3
    79  	Repository_USER        Repository_Type = 4
    80  	Repository_GROUP       Repository_Type = 5
    81  )
    82  
    83  // Enum value maps for Repository_Type.
    84  var (
    85  	Repository_Type_name = map[int32]string{
    86  		0: "NONE",
    87  		1: "INFO",
    88  		2: "ASSIGNMENTS",
    89  		3: "TESTS",
    90  		4: "USER",
    91  		5: "GROUP",
    92  	}
    93  	Repository_Type_value = map[string]int32{
    94  		"NONE":        0,
    95  		"INFO":        1,
    96  		"ASSIGNMENTS": 2,
    97  		"TESTS":       3,
    98  		"USER":        4,
    99  		"GROUP":       5,
   100  	}
   101  )
   102  
   103  func (x Repository_Type) Enum() *Repository_Type {
   104  	p := new(Repository_Type)
   105  	*p = x
   106  	return p
   107  }
   108  
   109  func (x Repository_Type) String() string {
   110  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   111  }
   112  
   113  func (Repository_Type) Descriptor() protoreflect.EnumDescriptor {
   114  	return file_qf_types_proto_enumTypes[1].Descriptor()
   115  }
   116  
   117  func (Repository_Type) Type() protoreflect.EnumType {
   118  	return &file_qf_types_proto_enumTypes[1]
   119  }
   120  
   121  func (x Repository_Type) Number() protoreflect.EnumNumber {
   122  	return protoreflect.EnumNumber(x)
   123  }
   124  
   125  // Deprecated: Use Repository_Type.Descriptor instead.
   126  func (Repository_Type) EnumDescriptor() ([]byte, []int) {
   127  	return file_qf_types_proto_rawDescGZIP(), []int{6, 0}
   128  }
   129  
   130  type Enrollment_UserStatus int32
   131  
   132  const (
   133  	Enrollment_NONE    Enrollment_UserStatus = 0
   134  	Enrollment_PENDING Enrollment_UserStatus = 1
   135  	Enrollment_STUDENT Enrollment_UserStatus = 2
   136  	Enrollment_TEACHER Enrollment_UserStatus = 3
   137  )
   138  
   139  // Enum value maps for Enrollment_UserStatus.
   140  var (
   141  	Enrollment_UserStatus_name = map[int32]string{
   142  		0: "NONE",
   143  		1: "PENDING",
   144  		2: "STUDENT",
   145  		3: "TEACHER",
   146  	}
   147  	Enrollment_UserStatus_value = map[string]int32{
   148  		"NONE":    0,
   149  		"PENDING": 1,
   150  		"STUDENT": 2,
   151  		"TEACHER": 3,
   152  	}
   153  )
   154  
   155  func (x Enrollment_UserStatus) Enum() *Enrollment_UserStatus {
   156  	p := new(Enrollment_UserStatus)
   157  	*p = x
   158  	return p
   159  }
   160  
   161  func (x Enrollment_UserStatus) String() string {
   162  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   163  }
   164  
   165  func (Enrollment_UserStatus) Descriptor() protoreflect.EnumDescriptor {
   166  	return file_qf_types_proto_enumTypes[2].Descriptor()
   167  }
   168  
   169  func (Enrollment_UserStatus) Type() protoreflect.EnumType {
   170  	return &file_qf_types_proto_enumTypes[2]
   171  }
   172  
   173  func (x Enrollment_UserStatus) Number() protoreflect.EnumNumber {
   174  	return protoreflect.EnumNumber(x)
   175  }
   176  
   177  // Deprecated: Use Enrollment_UserStatus.Descriptor instead.
   178  func (Enrollment_UserStatus) EnumDescriptor() ([]byte, []int) {
   179  	return file_qf_types_proto_rawDescGZIP(), []int{7, 0}
   180  }
   181  
   182  type Enrollment_DisplayState int32
   183  
   184  const (
   185  	Enrollment_UNSET    Enrollment_DisplayState = 0
   186  	Enrollment_HIDDEN   Enrollment_DisplayState = 1
   187  	Enrollment_VISIBLE  Enrollment_DisplayState = 2
   188  	Enrollment_FAVORITE Enrollment_DisplayState = 3
   189  )
   190  
   191  // Enum value maps for Enrollment_DisplayState.
   192  var (
   193  	Enrollment_DisplayState_name = map[int32]string{
   194  		0: "UNSET",
   195  		1: "HIDDEN",
   196  		2: "VISIBLE",
   197  		3: "FAVORITE",
   198  	}
   199  	Enrollment_DisplayState_value = map[string]int32{
   200  		"UNSET":    0,
   201  		"HIDDEN":   1,
   202  		"VISIBLE":  2,
   203  		"FAVORITE": 3,
   204  	}
   205  )
   206  
   207  func (x Enrollment_DisplayState) Enum() *Enrollment_DisplayState {
   208  	p := new(Enrollment_DisplayState)
   209  	*p = x
   210  	return p
   211  }
   212  
   213  func (x Enrollment_DisplayState) String() string {
   214  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   215  }
   216  
   217  func (Enrollment_DisplayState) Descriptor() protoreflect.EnumDescriptor {
   218  	return file_qf_types_proto_enumTypes[3].Descriptor()
   219  }
   220  
   221  func (Enrollment_DisplayState) Type() protoreflect.EnumType {
   222  	return &file_qf_types_proto_enumTypes[3]
   223  }
   224  
   225  func (x Enrollment_DisplayState) Number() protoreflect.EnumNumber {
   226  	return protoreflect.EnumNumber(x)
   227  }
   228  
   229  // Deprecated: Use Enrollment_DisplayState.Descriptor instead.
   230  func (Enrollment_DisplayState) EnumDescriptor() ([]byte, []int) {
   231  	return file_qf_types_proto_rawDescGZIP(), []int{7, 1}
   232  }
   233  
   234  type PullRequest_Stage int32
   235  
   236  const (
   237  	PullRequest_NONE     PullRequest_Stage = 0
   238  	PullRequest_DRAFT    PullRequest_Stage = 1
   239  	PullRequest_REVIEW   PullRequest_Stage = 2
   240  	PullRequest_APPROVED PullRequest_Stage = 3
   241  )
   242  
   243  // Enum value maps for PullRequest_Stage.
   244  var (
   245  	PullRequest_Stage_name = map[int32]string{
   246  		0: "NONE",
   247  		1: "DRAFT",
   248  		2: "REVIEW",
   249  		3: "APPROVED",
   250  	}
   251  	PullRequest_Stage_value = map[string]int32{
   252  		"NONE":     0,
   253  		"DRAFT":    1,
   254  		"REVIEW":   2,
   255  		"APPROVED": 3,
   256  	}
   257  )
   258  
   259  func (x PullRequest_Stage) Enum() *PullRequest_Stage {
   260  	p := new(PullRequest_Stage)
   261  	*p = x
   262  	return p
   263  }
   264  
   265  func (x PullRequest_Stage) String() string {
   266  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   267  }
   268  
   269  func (PullRequest_Stage) Descriptor() protoreflect.EnumDescriptor {
   270  	return file_qf_types_proto_enumTypes[4].Descriptor()
   271  }
   272  
   273  func (PullRequest_Stage) Type() protoreflect.EnumType {
   274  	return &file_qf_types_proto_enumTypes[4]
   275  }
   276  
   277  func (x PullRequest_Stage) Number() protoreflect.EnumNumber {
   278  	return protoreflect.EnumNumber(x)
   279  }
   280  
   281  // Deprecated: Use PullRequest_Stage.Descriptor instead.
   282  func (PullRequest_Stage) EnumDescriptor() ([]byte, []int) {
   283  	return file_qf_types_proto_rawDescGZIP(), []int{13, 0}
   284  }
   285  
   286  type Submission_Status int32
   287  
   288  const (
   289  	Submission_NONE     Submission_Status = 0
   290  	Submission_APPROVED Submission_Status = 1
   291  	Submission_REJECTED Submission_Status = 2
   292  	Submission_REVISION Submission_Status = 3
   293  )
   294  
   295  // Enum value maps for Submission_Status.
   296  var (
   297  	Submission_Status_name = map[int32]string{
   298  		0: "NONE",
   299  		1: "APPROVED",
   300  		2: "REJECTED",
   301  		3: "REVISION",
   302  	}
   303  	Submission_Status_value = map[string]int32{
   304  		"NONE":     0,
   305  		"APPROVED": 1,
   306  		"REJECTED": 2,
   307  		"REVISION": 3,
   308  	}
   309  )
   310  
   311  func (x Submission_Status) Enum() *Submission_Status {
   312  	p := new(Submission_Status)
   313  	*p = x
   314  	return p
   315  }
   316  
   317  func (x Submission_Status) String() string {
   318  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   319  }
   320  
   321  func (Submission_Status) Descriptor() protoreflect.EnumDescriptor {
   322  	return file_qf_types_proto_enumTypes[5].Descriptor()
   323  }
   324  
   325  func (Submission_Status) Type() protoreflect.EnumType {
   326  	return &file_qf_types_proto_enumTypes[5]
   327  }
   328  
   329  func (x Submission_Status) Number() protoreflect.EnumNumber {
   330  	return protoreflect.EnumNumber(x)
   331  }
   332  
   333  // Deprecated: Use Submission_Status.Descriptor instead.
   334  func (Submission_Status) EnumDescriptor() ([]byte, []int) {
   335  	return file_qf_types_proto_rawDescGZIP(), []int{15, 0}
   336  }
   337  
   338  type GradingCriterion_Grade int32
   339  
   340  const (
   341  	GradingCriterion_NONE   GradingCriterion_Grade = 0
   342  	GradingCriterion_FAILED GradingCriterion_Grade = 1
   343  	GradingCriterion_PASSED GradingCriterion_Grade = 2
   344  )
   345  
   346  // Enum value maps for GradingCriterion_Grade.
   347  var (
   348  	GradingCriterion_Grade_name = map[int32]string{
   349  		0: "NONE",
   350  		1: "FAILED",
   351  		2: "PASSED",
   352  	}
   353  	GradingCriterion_Grade_value = map[string]int32{
   354  		"NONE":   0,
   355  		"FAILED": 1,
   356  		"PASSED": 2,
   357  	}
   358  )
   359  
   360  func (x GradingCriterion_Grade) Enum() *GradingCriterion_Grade {
   361  	p := new(GradingCriterion_Grade)
   362  	*p = x
   363  	return p
   364  }
   365  
   366  func (x GradingCriterion_Grade) String() string {
   367  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
   368  }
   369  
   370  func (GradingCriterion_Grade) Descriptor() protoreflect.EnumDescriptor {
   371  	return file_qf_types_proto_enumTypes[6].Descriptor()
   372  }
   373  
   374  func (GradingCriterion_Grade) Type() protoreflect.EnumType {
   375  	return &file_qf_types_proto_enumTypes[6]
   376  }
   377  
   378  func (x GradingCriterion_Grade) Number() protoreflect.EnumNumber {
   379  	return protoreflect.EnumNumber(x)
   380  }
   381  
   382  // Deprecated: Use GradingCriterion_Grade.Descriptor instead.
   383  func (GradingCriterion_Grade) EnumDescriptor() ([]byte, []int) {
   384  	return file_qf_types_proto_rawDescGZIP(), []int{19, 0}
   385  }
   386  
   387  type User struct {
   388  	state         protoimpl.MessageState
   389  	sizeCache     protoimpl.SizeCache
   390  	unknownFields protoimpl.UnknownFields
   391  
   392  	ID           uint64        `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
   393  	IsAdmin      bool          `protobuf:"varint,2,opt,name=IsAdmin,proto3" json:"IsAdmin,omitempty"`
   394  	Name         string        `protobuf:"bytes,3,opt,name=Name,proto3" json:"Name,omitempty"`
   395  	StudentID    string        `protobuf:"bytes,4,opt,name=StudentID,proto3" json:"StudentID,omitempty"`
   396  	Email        string        `protobuf:"bytes,5,opt,name=Email,proto3" json:"Email,omitempty"`
   397  	AvatarURL    string        `protobuf:"bytes,6,opt,name=AvatarURL,proto3" json:"AvatarURL,omitempty"`
   398  	Login        string        `protobuf:"bytes,7,opt,name=Login,proto3" json:"Login,omitempty"`
   399  	UpdateToken  bool          `protobuf:"varint,8,opt,name=UpdateToken,proto3" json:"UpdateToken,omitempty"`   // Filter; True if user's JWT token needs to be updated.
   400  	ScmRemoteID  uint64        `protobuf:"varint,9,opt,name=ScmRemoteID,proto3" json:"ScmRemoteID,omitempty"`   // Filter; The user's ID on the remote provider.
   401  	RefreshToken string        `protobuf:"bytes,10,opt,name=RefreshToken,proto3" json:"RefreshToken,omitempty"` // Filter; The user's refresh token that may be exchanged for an access token.
   402  	Enrollments  []*Enrollment `protobuf:"bytes,11,rep,name=Enrollments,proto3" json:"Enrollments,omitempty"`
   403  }
   404  
   405  func (x *User) Reset() {
   406  	*x = User{}
   407  	if protoimpl.UnsafeEnabled {
   408  		mi := &file_qf_types_proto_msgTypes[0]
   409  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   410  		ms.StoreMessageInfo(mi)
   411  	}
   412  }
   413  
   414  func (x *User) String() string {
   415  	return protoimpl.X.MessageStringOf(x)
   416  }
   417  
   418  func (*User) ProtoMessage() {}
   419  
   420  func (x *User) ProtoReflect() protoreflect.Message {
   421  	mi := &file_qf_types_proto_msgTypes[0]
   422  	if protoimpl.UnsafeEnabled && x != nil {
   423  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   424  		if ms.LoadMessageInfo() == nil {
   425  			ms.StoreMessageInfo(mi)
   426  		}
   427  		return ms
   428  	}
   429  	return mi.MessageOf(x)
   430  }
   431  
   432  // Deprecated: Use User.ProtoReflect.Descriptor instead.
   433  func (*User) Descriptor() ([]byte, []int) {
   434  	return file_qf_types_proto_rawDescGZIP(), []int{0}
   435  }
   436  
   437  func (x *User) GetID() uint64 {
   438  	if x != nil {
   439  		return x.ID
   440  	}
   441  	return 0
   442  }
   443  
   444  func (x *User) GetIsAdmin() bool {
   445  	if x != nil {
   446  		return x.IsAdmin
   447  	}
   448  	return false
   449  }
   450  
   451  func (x *User) GetName() string {
   452  	if x != nil {
   453  		return x.Name
   454  	}
   455  	return ""
   456  }
   457  
   458  func (x *User) GetStudentID() string {
   459  	if x != nil {
   460  		return x.StudentID
   461  	}
   462  	return ""
   463  }
   464  
   465  func (x *User) GetEmail() string {
   466  	if x != nil {
   467  		return x.Email
   468  	}
   469  	return ""
   470  }
   471  
   472  func (x *User) GetAvatarURL() string {
   473  	if x != nil {
   474  		return x.AvatarURL
   475  	}
   476  	return ""
   477  }
   478  
   479  func (x *User) GetLogin() string {
   480  	if x != nil {
   481  		return x.Login
   482  	}
   483  	return ""
   484  }
   485  
   486  func (x *User) GetUpdateToken() bool {
   487  	if x != nil {
   488  		return x.UpdateToken
   489  	}
   490  	return false
   491  }
   492  
   493  func (x *User) GetScmRemoteID() uint64 {
   494  	if x != nil {
   495  		return x.ScmRemoteID
   496  	}
   497  	return 0
   498  }
   499  
   500  func (x *User) GetRefreshToken() string {
   501  	if x != nil {
   502  		return x.RefreshToken
   503  	}
   504  	return ""
   505  }
   506  
   507  func (x *User) GetEnrollments() []*Enrollment {
   508  	if x != nil {
   509  		return x.Enrollments
   510  	}
   511  	return nil
   512  }
   513  
   514  type Users struct {
   515  	state         protoimpl.MessageState
   516  	sizeCache     protoimpl.SizeCache
   517  	unknownFields protoimpl.UnknownFields
   518  
   519  	Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"`
   520  }
   521  
   522  func (x *Users) Reset() {
   523  	*x = Users{}
   524  	if protoimpl.UnsafeEnabled {
   525  		mi := &file_qf_types_proto_msgTypes[1]
   526  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   527  		ms.StoreMessageInfo(mi)
   528  	}
   529  }
   530  
   531  func (x *Users) String() string {
   532  	return protoimpl.X.MessageStringOf(x)
   533  }
   534  
   535  func (*Users) ProtoMessage() {}
   536  
   537  func (x *Users) ProtoReflect() protoreflect.Message {
   538  	mi := &file_qf_types_proto_msgTypes[1]
   539  	if protoimpl.UnsafeEnabled && x != nil {
   540  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   541  		if ms.LoadMessageInfo() == nil {
   542  			ms.StoreMessageInfo(mi)
   543  		}
   544  		return ms
   545  	}
   546  	return mi.MessageOf(x)
   547  }
   548  
   549  // Deprecated: Use Users.ProtoReflect.Descriptor instead.
   550  func (*Users) Descriptor() ([]byte, []int) {
   551  	return file_qf_types_proto_rawDescGZIP(), []int{1}
   552  }
   553  
   554  func (x *Users) GetUsers() []*User {
   555  	if x != nil {
   556  		return x.Users
   557  	}
   558  	return nil
   559  }
   560  
   561  type Group struct {
   562  	state         protoimpl.MessageState
   563  	sizeCache     protoimpl.SizeCache
   564  	unknownFields protoimpl.UnknownFields
   565  
   566  	ID          uint64            `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
   567  	Name        string            `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty" gorm:"uniqueIndex:group"`
   568  	CourseID    uint64            `protobuf:"varint,3,opt,name=courseID,proto3" json:"courseID,omitempty" gorm:"uniqueIndex:group"`
   569  	ScmTeamID   uint64            `protobuf:"varint,4,opt,name=ScmTeamID,proto3" json:"ScmTeamID,omitempty"`
   570  	Status      Group_GroupStatus `protobuf:"varint,5,opt,name=status,proto3,enum=qf.Group_GroupStatus" json:"status,omitempty"`
   571  	Users       []*User           `protobuf:"bytes,6,rep,name=users,proto3" json:"users,omitempty" gorm:"many2many:group_users;"`
   572  	Enrollments []*Enrollment     `protobuf:"bytes,7,rep,name=enrollments,proto3" json:"enrollments,omitempty"`
   573  }
   574  
   575  func (x *Group) Reset() {
   576  	*x = Group{}
   577  	if protoimpl.UnsafeEnabled {
   578  		mi := &file_qf_types_proto_msgTypes[2]
   579  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   580  		ms.StoreMessageInfo(mi)
   581  	}
   582  }
   583  
   584  func (x *Group) String() string {
   585  	return protoimpl.X.MessageStringOf(x)
   586  }
   587  
   588  func (*Group) ProtoMessage() {}
   589  
   590  func (x *Group) ProtoReflect() protoreflect.Message {
   591  	mi := &file_qf_types_proto_msgTypes[2]
   592  	if protoimpl.UnsafeEnabled && x != nil {
   593  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   594  		if ms.LoadMessageInfo() == nil {
   595  			ms.StoreMessageInfo(mi)
   596  		}
   597  		return ms
   598  	}
   599  	return mi.MessageOf(x)
   600  }
   601  
   602  // Deprecated: Use Group.ProtoReflect.Descriptor instead.
   603  func (*Group) Descriptor() ([]byte, []int) {
   604  	return file_qf_types_proto_rawDescGZIP(), []int{2}
   605  }
   606  
   607  func (x *Group) GetID() uint64 {
   608  	if x != nil {
   609  		return x.ID
   610  	}
   611  	return 0
   612  }
   613  
   614  func (x *Group) GetName() string {
   615  	if x != nil {
   616  		return x.Name
   617  	}
   618  	return ""
   619  }
   620  
   621  func (x *Group) GetCourseID() uint64 {
   622  	if x != nil {
   623  		return x.CourseID
   624  	}
   625  	return 0
   626  }
   627  
   628  func (x *Group) GetScmTeamID() uint64 {
   629  	if x != nil {
   630  		return x.ScmTeamID
   631  	}
   632  	return 0
   633  }
   634  
   635  func (x *Group) GetStatus() Group_GroupStatus {
   636  	if x != nil {
   637  		return x.Status
   638  	}
   639  	return Group_PENDING
   640  }
   641  
   642  func (x *Group) GetUsers() []*User {
   643  	if x != nil {
   644  		return x.Users
   645  	}
   646  	return nil
   647  }
   648  
   649  func (x *Group) GetEnrollments() []*Enrollment {
   650  	if x != nil {
   651  		return x.Enrollments
   652  	}
   653  	return nil
   654  }
   655  
   656  type Groups struct {
   657  	state         protoimpl.MessageState
   658  	sizeCache     protoimpl.SizeCache
   659  	unknownFields protoimpl.UnknownFields
   660  
   661  	Groups []*Group `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"`
   662  }
   663  
   664  func (x *Groups) Reset() {
   665  	*x = Groups{}
   666  	if protoimpl.UnsafeEnabled {
   667  		mi := &file_qf_types_proto_msgTypes[3]
   668  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   669  		ms.StoreMessageInfo(mi)
   670  	}
   671  }
   672  
   673  func (x *Groups) String() string {
   674  	return protoimpl.X.MessageStringOf(x)
   675  }
   676  
   677  func (*Groups) ProtoMessage() {}
   678  
   679  func (x *Groups) ProtoReflect() protoreflect.Message {
   680  	mi := &file_qf_types_proto_msgTypes[3]
   681  	if protoimpl.UnsafeEnabled && x != nil {
   682  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   683  		if ms.LoadMessageInfo() == nil {
   684  			ms.StoreMessageInfo(mi)
   685  		}
   686  		return ms
   687  	}
   688  	return mi.MessageOf(x)
   689  }
   690  
   691  // Deprecated: Use Groups.ProtoReflect.Descriptor instead.
   692  func (*Groups) Descriptor() ([]byte, []int) {
   693  	return file_qf_types_proto_rawDescGZIP(), []int{3}
   694  }
   695  
   696  func (x *Groups) GetGroups() []*Group {
   697  	if x != nil {
   698  		return x.Groups
   699  	}
   700  	return nil
   701  }
   702  
   703  type Course struct {
   704  	state         protoimpl.MessageState
   705  	sizeCache     protoimpl.SizeCache
   706  	unknownFields protoimpl.UnknownFields
   707  
   708  	ID                  uint64                `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
   709  	CourseCreatorID     uint64                `protobuf:"varint,2,opt,name=courseCreatorID,proto3" json:"courseCreatorID,omitempty"`
   710  	Name                string                `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
   711  	Code                string                `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty" gorm:"uniqueIndex:course"`
   712  	Year                uint32                `protobuf:"varint,5,opt,name=year,proto3" json:"year,omitempty" gorm:"uniqueIndex:course"`
   713  	Tag                 string                `protobuf:"bytes,6,opt,name=tag,proto3" json:"tag,omitempty"`
   714  	ScmOrganizationID   uint64                `protobuf:"varint,8,opt,name=ScmOrganizationID,proto3" json:"ScmOrganizationID,omitempty"`
   715  	ScmOrganizationName string                `protobuf:"bytes,9,opt,name=ScmOrganizationName,proto3" json:"ScmOrganizationName,omitempty"` // The organization's SCM name, e.g., dat520-2020.
   716  	SlipDays            uint32                `protobuf:"varint,10,opt,name=slipDays,proto3" json:"slipDays,omitempty"`
   717  	DockerfileDigest    string                `protobuf:"bytes,11,opt,name=DockerfileDigest,proto3" json:"DockerfileDigest,omitempty"` // Digest of the dockerfile used to build the course's docker image.
   718  	Enrolled            Enrollment_UserStatus `protobuf:"varint,12,opt,name=enrolled,proto3,enum=qf.Enrollment_UserStatus" json:"enrolled,omitempty" gorm:"-"`
   719  	Enrollments         []*Enrollment         `protobuf:"bytes,13,rep,name=enrollments,proto3" json:"enrollments,omitempty"`
   720  	Assignments         []*Assignment         `protobuf:"bytes,14,rep,name=assignments,proto3" json:"assignments,omitempty"`
   721  	Groups              []*Group              `protobuf:"bytes,15,rep,name=groups,proto3" json:"groups,omitempty"`
   722  }
   723  
   724  func (x *Course) Reset() {
   725  	*x = Course{}
   726  	if protoimpl.UnsafeEnabled {
   727  		mi := &file_qf_types_proto_msgTypes[4]
   728  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   729  		ms.StoreMessageInfo(mi)
   730  	}
   731  }
   732  
   733  func (x *Course) String() string {
   734  	return protoimpl.X.MessageStringOf(x)
   735  }
   736  
   737  func (*Course) ProtoMessage() {}
   738  
   739  func (x *Course) ProtoReflect() protoreflect.Message {
   740  	mi := &file_qf_types_proto_msgTypes[4]
   741  	if protoimpl.UnsafeEnabled && x != nil {
   742  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   743  		if ms.LoadMessageInfo() == nil {
   744  			ms.StoreMessageInfo(mi)
   745  		}
   746  		return ms
   747  	}
   748  	return mi.MessageOf(x)
   749  }
   750  
   751  // Deprecated: Use Course.ProtoReflect.Descriptor instead.
   752  func (*Course) Descriptor() ([]byte, []int) {
   753  	return file_qf_types_proto_rawDescGZIP(), []int{4}
   754  }
   755  
   756  func (x *Course) GetID() uint64 {
   757  	if x != nil {
   758  		return x.ID
   759  	}
   760  	return 0
   761  }
   762  
   763  func (x *Course) GetCourseCreatorID() uint64 {
   764  	if x != nil {
   765  		return x.CourseCreatorID
   766  	}
   767  	return 0
   768  }
   769  
   770  func (x *Course) GetName() string {
   771  	if x != nil {
   772  		return x.Name
   773  	}
   774  	return ""
   775  }
   776  
   777  func (x *Course) GetCode() string {
   778  	if x != nil {
   779  		return x.Code
   780  	}
   781  	return ""
   782  }
   783  
   784  func (x *Course) GetYear() uint32 {
   785  	if x != nil {
   786  		return x.Year
   787  	}
   788  	return 0
   789  }
   790  
   791  func (x *Course) GetTag() string {
   792  	if x != nil {
   793  		return x.Tag
   794  	}
   795  	return ""
   796  }
   797  
   798  func (x *Course) GetScmOrganizationID() uint64 {
   799  	if x != nil {
   800  		return x.ScmOrganizationID
   801  	}
   802  	return 0
   803  }
   804  
   805  func (x *Course) GetScmOrganizationName() string {
   806  	if x != nil {
   807  		return x.ScmOrganizationName
   808  	}
   809  	return ""
   810  }
   811  
   812  func (x *Course) GetSlipDays() uint32 {
   813  	if x != nil {
   814  		return x.SlipDays
   815  	}
   816  	return 0
   817  }
   818  
   819  func (x *Course) GetDockerfileDigest() string {
   820  	if x != nil {
   821  		return x.DockerfileDigest
   822  	}
   823  	return ""
   824  }
   825  
   826  func (x *Course) GetEnrolled() Enrollment_UserStatus {
   827  	if x != nil {
   828  		return x.Enrolled
   829  	}
   830  	return Enrollment_NONE
   831  }
   832  
   833  func (x *Course) GetEnrollments() []*Enrollment {
   834  	if x != nil {
   835  		return x.Enrollments
   836  	}
   837  	return nil
   838  }
   839  
   840  func (x *Course) GetAssignments() []*Assignment {
   841  	if x != nil {
   842  		return x.Assignments
   843  	}
   844  	return nil
   845  }
   846  
   847  func (x *Course) GetGroups() []*Group {
   848  	if x != nil {
   849  		return x.Groups
   850  	}
   851  	return nil
   852  }
   853  
   854  type Courses struct {
   855  	state         protoimpl.MessageState
   856  	sizeCache     protoimpl.SizeCache
   857  	unknownFields protoimpl.UnknownFields
   858  
   859  	Courses []*Course `protobuf:"bytes,1,rep,name=courses,proto3" json:"courses,omitempty"`
   860  }
   861  
   862  func (x *Courses) Reset() {
   863  	*x = Courses{}
   864  	if protoimpl.UnsafeEnabled {
   865  		mi := &file_qf_types_proto_msgTypes[5]
   866  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   867  		ms.StoreMessageInfo(mi)
   868  	}
   869  }
   870  
   871  func (x *Courses) String() string {
   872  	return protoimpl.X.MessageStringOf(x)
   873  }
   874  
   875  func (*Courses) ProtoMessage() {}
   876  
   877  func (x *Courses) ProtoReflect() protoreflect.Message {
   878  	mi := &file_qf_types_proto_msgTypes[5]
   879  	if protoimpl.UnsafeEnabled && x != nil {
   880  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   881  		if ms.LoadMessageInfo() == nil {
   882  			ms.StoreMessageInfo(mi)
   883  		}
   884  		return ms
   885  	}
   886  	return mi.MessageOf(x)
   887  }
   888  
   889  // Deprecated: Use Courses.ProtoReflect.Descriptor instead.
   890  func (*Courses) Descriptor() ([]byte, []int) {
   891  	return file_qf_types_proto_rawDescGZIP(), []int{5}
   892  }
   893  
   894  func (x *Courses) GetCourses() []*Course {
   895  	if x != nil {
   896  		return x.Courses
   897  	}
   898  	return nil
   899  }
   900  
   901  type Repository struct {
   902  	state         protoimpl.MessageState
   903  	sizeCache     protoimpl.SizeCache
   904  	unknownFields protoimpl.UnknownFields
   905  
   906  	ID                uint64          `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
   907  	ScmOrganizationID uint64          `protobuf:"varint,2,opt,name=ScmOrganizationID,proto3" json:"ScmOrganizationID,omitempty" gorm:"uniqueIndex:repository"`
   908  	ScmRepositoryID   uint64          `protobuf:"varint,3,opt,name=ScmRepositoryID,proto3" json:"ScmRepositoryID,omitempty"` // ID of a github repository
   909  	UserID            uint64          `protobuf:"varint,4,opt,name=userID,proto3" json:"userID,omitempty" gorm:"uniqueIndex:repository"`
   910  	GroupID           uint64          `protobuf:"varint,5,opt,name=groupID,proto3" json:"groupID,omitempty" gorm:"uniqueIndex:repository"`
   911  	HTMLURL           string          `protobuf:"bytes,6,opt,name=HTMLURL,proto3" json:"HTMLURL,omitempty"`
   912  	RepoType          Repository_Type `protobuf:"varint,7,opt,name=repoType,proto3,enum=qf.Repository_Type" json:"repoType,omitempty" gorm:"uniqueIndex:repository"`
   913  	Issues            []*Issue        `protobuf:"bytes,8,rep,name=issues,proto3" json:"issues,omitempty"` // Issues associated with this repository
   914  }
   915  
   916  func (x *Repository) Reset() {
   917  	*x = Repository{}
   918  	if protoimpl.UnsafeEnabled {
   919  		mi := &file_qf_types_proto_msgTypes[6]
   920  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   921  		ms.StoreMessageInfo(mi)
   922  	}
   923  }
   924  
   925  func (x *Repository) String() string {
   926  	return protoimpl.X.MessageStringOf(x)
   927  }
   928  
   929  func (*Repository) ProtoMessage() {}
   930  
   931  func (x *Repository) ProtoReflect() protoreflect.Message {
   932  	mi := &file_qf_types_proto_msgTypes[6]
   933  	if protoimpl.UnsafeEnabled && x != nil {
   934  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   935  		if ms.LoadMessageInfo() == nil {
   936  			ms.StoreMessageInfo(mi)
   937  		}
   938  		return ms
   939  	}
   940  	return mi.MessageOf(x)
   941  }
   942  
   943  // Deprecated: Use Repository.ProtoReflect.Descriptor instead.
   944  func (*Repository) Descriptor() ([]byte, []int) {
   945  	return file_qf_types_proto_rawDescGZIP(), []int{6}
   946  }
   947  
   948  func (x *Repository) GetID() uint64 {
   949  	if x != nil {
   950  		return x.ID
   951  	}
   952  	return 0
   953  }
   954  
   955  func (x *Repository) GetScmOrganizationID() uint64 {
   956  	if x != nil {
   957  		return x.ScmOrganizationID
   958  	}
   959  	return 0
   960  }
   961  
   962  func (x *Repository) GetScmRepositoryID() uint64 {
   963  	if x != nil {
   964  		return x.ScmRepositoryID
   965  	}
   966  	return 0
   967  }
   968  
   969  func (x *Repository) GetUserID() uint64 {
   970  	if x != nil {
   971  		return x.UserID
   972  	}
   973  	return 0
   974  }
   975  
   976  func (x *Repository) GetGroupID() uint64 {
   977  	if x != nil {
   978  		return x.GroupID
   979  	}
   980  	return 0
   981  }
   982  
   983  func (x *Repository) GetHTMLURL() string {
   984  	if x != nil {
   985  		return x.HTMLURL
   986  	}
   987  	return ""
   988  }
   989  
   990  func (x *Repository) GetRepoType() Repository_Type {
   991  	if x != nil {
   992  		return x.RepoType
   993  	}
   994  	return Repository_NONE
   995  }
   996  
   997  func (x *Repository) GetIssues() []*Issue {
   998  	if x != nil {
   999  		return x.Issues
  1000  	}
  1001  	return nil
  1002  }
  1003  
  1004  type Enrollment struct {
  1005  	state         protoimpl.MessageState
  1006  	sizeCache     protoimpl.SizeCache
  1007  	unknownFields protoimpl.UnknownFields
  1008  
  1009  	ID                uint64                  `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  1010  	CourseID          uint64                  `protobuf:"varint,2,opt,name=courseID,proto3" json:"courseID,omitempty" gorm:"uniqueIndex:enrollment"`
  1011  	UserID            uint64                  `protobuf:"varint,3,opt,name=userID,proto3" json:"userID,omitempty" gorm:"uniqueIndex:enrollment"`
  1012  	GroupID           uint64                  `protobuf:"varint,4,opt,name=groupID,proto3" json:"groupID,omitempty"`
  1013  	User              *User                   `protobuf:"bytes,5,opt,name=user,proto3" json:"user,omitempty"`
  1014  	Course            *Course                 `protobuf:"bytes,6,opt,name=course,proto3" json:"course,omitempty"`
  1015  	Group             *Group                  `protobuf:"bytes,7,opt,name=group,proto3" json:"group,omitempty"`
  1016  	Status            Enrollment_UserStatus   `protobuf:"varint,8,opt,name=status,proto3,enum=qf.Enrollment_UserStatus" json:"status,omitempty"`
  1017  	State             Enrollment_DisplayState `protobuf:"varint,9,opt,name=state,proto3,enum=qf.Enrollment_DisplayState" json:"state,omitempty"`
  1018  	SlipDaysRemaining uint32                  `protobuf:"varint,10,opt,name=slipDaysRemaining,proto3" json:"slipDaysRemaining,omitempty" gorm:"-"`
  1019  	LastActivityDate  *timestamppb.Timestamp  `protobuf:"bytes,11,opt,name=lastActivityDate,proto3" json:"lastActivityDate,omitempty" gorm:"serializer:timestamp;type:datetime"`
  1020  	TotalApproved     uint64                  `protobuf:"varint,12,opt,name=totalApproved,proto3" json:"totalApproved,omitempty"`
  1021  	UsedSlipDays      []*UsedSlipDays         `protobuf:"bytes,13,rep,name=usedSlipDays,proto3" json:"usedSlipDays,omitempty"`
  1022  }
  1023  
  1024  func (x *Enrollment) Reset() {
  1025  	*x = Enrollment{}
  1026  	if protoimpl.UnsafeEnabled {
  1027  		mi := &file_qf_types_proto_msgTypes[7]
  1028  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1029  		ms.StoreMessageInfo(mi)
  1030  	}
  1031  }
  1032  
  1033  func (x *Enrollment) String() string {
  1034  	return protoimpl.X.MessageStringOf(x)
  1035  }
  1036  
  1037  func (*Enrollment) ProtoMessage() {}
  1038  
  1039  func (x *Enrollment) ProtoReflect() protoreflect.Message {
  1040  	mi := &file_qf_types_proto_msgTypes[7]
  1041  	if protoimpl.UnsafeEnabled && x != nil {
  1042  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1043  		if ms.LoadMessageInfo() == nil {
  1044  			ms.StoreMessageInfo(mi)
  1045  		}
  1046  		return ms
  1047  	}
  1048  	return mi.MessageOf(x)
  1049  }
  1050  
  1051  // Deprecated: Use Enrollment.ProtoReflect.Descriptor instead.
  1052  func (*Enrollment) Descriptor() ([]byte, []int) {
  1053  	return file_qf_types_proto_rawDescGZIP(), []int{7}
  1054  }
  1055  
  1056  func (x *Enrollment) GetID() uint64 {
  1057  	if x != nil {
  1058  		return x.ID
  1059  	}
  1060  	return 0
  1061  }
  1062  
  1063  func (x *Enrollment) GetCourseID() uint64 {
  1064  	if x != nil {
  1065  		return x.CourseID
  1066  	}
  1067  	return 0
  1068  }
  1069  
  1070  func (x *Enrollment) GetUserID() uint64 {
  1071  	if x != nil {
  1072  		return x.UserID
  1073  	}
  1074  	return 0
  1075  }
  1076  
  1077  func (x *Enrollment) GetGroupID() uint64 {
  1078  	if x != nil {
  1079  		return x.GroupID
  1080  	}
  1081  	return 0
  1082  }
  1083  
  1084  func (x *Enrollment) GetUser() *User {
  1085  	if x != nil {
  1086  		return x.User
  1087  	}
  1088  	return nil
  1089  }
  1090  
  1091  func (x *Enrollment) GetCourse() *Course {
  1092  	if x != nil {
  1093  		return x.Course
  1094  	}
  1095  	return nil
  1096  }
  1097  
  1098  func (x *Enrollment) GetGroup() *Group {
  1099  	if x != nil {
  1100  		return x.Group
  1101  	}
  1102  	return nil
  1103  }
  1104  
  1105  func (x *Enrollment) GetStatus() Enrollment_UserStatus {
  1106  	if x != nil {
  1107  		return x.Status
  1108  	}
  1109  	return Enrollment_NONE
  1110  }
  1111  
  1112  func (x *Enrollment) GetState() Enrollment_DisplayState {
  1113  	if x != nil {
  1114  		return x.State
  1115  	}
  1116  	return Enrollment_UNSET
  1117  }
  1118  
  1119  func (x *Enrollment) GetSlipDaysRemaining() uint32 {
  1120  	if x != nil {
  1121  		return x.SlipDaysRemaining
  1122  	}
  1123  	return 0
  1124  }
  1125  
  1126  func (x *Enrollment) GetLastActivityDate() *timestamppb.Timestamp {
  1127  	if x != nil {
  1128  		return x.LastActivityDate
  1129  	}
  1130  	return nil
  1131  }
  1132  
  1133  func (x *Enrollment) GetTotalApproved() uint64 {
  1134  	if x != nil {
  1135  		return x.TotalApproved
  1136  	}
  1137  	return 0
  1138  }
  1139  
  1140  func (x *Enrollment) GetUsedSlipDays() []*UsedSlipDays {
  1141  	if x != nil {
  1142  		return x.UsedSlipDays
  1143  	}
  1144  	return nil
  1145  }
  1146  
  1147  type UsedSlipDays struct {
  1148  	state         protoimpl.MessageState
  1149  	sizeCache     protoimpl.SizeCache
  1150  	unknownFields protoimpl.UnknownFields
  1151  
  1152  	ID           uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  1153  	EnrollmentID uint64 `protobuf:"varint,2,opt,name=enrollmentID,proto3" json:"enrollmentID,omitempty"`
  1154  	AssignmentID uint64 `protobuf:"varint,3,opt,name=assignmentID,proto3" json:"assignmentID,omitempty"`
  1155  	UsedDays     uint32 `protobuf:"varint,4,opt,name=usedDays,proto3" json:"usedDays,omitempty"`
  1156  }
  1157  
  1158  func (x *UsedSlipDays) Reset() {
  1159  	*x = UsedSlipDays{}
  1160  	if protoimpl.UnsafeEnabled {
  1161  		mi := &file_qf_types_proto_msgTypes[8]
  1162  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1163  		ms.StoreMessageInfo(mi)
  1164  	}
  1165  }
  1166  
  1167  func (x *UsedSlipDays) String() string {
  1168  	return protoimpl.X.MessageStringOf(x)
  1169  }
  1170  
  1171  func (*UsedSlipDays) ProtoMessage() {}
  1172  
  1173  func (x *UsedSlipDays) ProtoReflect() protoreflect.Message {
  1174  	mi := &file_qf_types_proto_msgTypes[8]
  1175  	if protoimpl.UnsafeEnabled && x != nil {
  1176  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1177  		if ms.LoadMessageInfo() == nil {
  1178  			ms.StoreMessageInfo(mi)
  1179  		}
  1180  		return ms
  1181  	}
  1182  	return mi.MessageOf(x)
  1183  }
  1184  
  1185  // Deprecated: Use UsedSlipDays.ProtoReflect.Descriptor instead.
  1186  func (*UsedSlipDays) Descriptor() ([]byte, []int) {
  1187  	return file_qf_types_proto_rawDescGZIP(), []int{8}
  1188  }
  1189  
  1190  func (x *UsedSlipDays) GetID() uint64 {
  1191  	if x != nil {
  1192  		return x.ID
  1193  	}
  1194  	return 0
  1195  }
  1196  
  1197  func (x *UsedSlipDays) GetEnrollmentID() uint64 {
  1198  	if x != nil {
  1199  		return x.EnrollmentID
  1200  	}
  1201  	return 0
  1202  }
  1203  
  1204  func (x *UsedSlipDays) GetAssignmentID() uint64 {
  1205  	if x != nil {
  1206  		return x.AssignmentID
  1207  	}
  1208  	return 0
  1209  }
  1210  
  1211  func (x *UsedSlipDays) GetUsedDays() uint32 {
  1212  	if x != nil {
  1213  		return x.UsedDays
  1214  	}
  1215  	return 0
  1216  }
  1217  
  1218  type Enrollments struct {
  1219  	state         protoimpl.MessageState
  1220  	sizeCache     protoimpl.SizeCache
  1221  	unknownFields protoimpl.UnknownFields
  1222  
  1223  	Enrollments []*Enrollment `protobuf:"bytes,1,rep,name=enrollments,proto3" json:"enrollments,omitempty"`
  1224  }
  1225  
  1226  func (x *Enrollments) Reset() {
  1227  	*x = Enrollments{}
  1228  	if protoimpl.UnsafeEnabled {
  1229  		mi := &file_qf_types_proto_msgTypes[9]
  1230  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1231  		ms.StoreMessageInfo(mi)
  1232  	}
  1233  }
  1234  
  1235  func (x *Enrollments) String() string {
  1236  	return protoimpl.X.MessageStringOf(x)
  1237  }
  1238  
  1239  func (*Enrollments) ProtoMessage() {}
  1240  
  1241  func (x *Enrollments) ProtoReflect() protoreflect.Message {
  1242  	mi := &file_qf_types_proto_msgTypes[9]
  1243  	if protoimpl.UnsafeEnabled && x != nil {
  1244  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1245  		if ms.LoadMessageInfo() == nil {
  1246  			ms.StoreMessageInfo(mi)
  1247  		}
  1248  		return ms
  1249  	}
  1250  	return mi.MessageOf(x)
  1251  }
  1252  
  1253  // Deprecated: Use Enrollments.ProtoReflect.Descriptor instead.
  1254  func (*Enrollments) Descriptor() ([]byte, []int) {
  1255  	return file_qf_types_proto_rawDescGZIP(), []int{9}
  1256  }
  1257  
  1258  func (x *Enrollments) GetEnrollments() []*Enrollment {
  1259  	if x != nil {
  1260  		return x.Enrollments
  1261  	}
  1262  	return nil
  1263  }
  1264  
  1265  type Assignment struct {
  1266  	state         protoimpl.MessageState
  1267  	sizeCache     protoimpl.SizeCache
  1268  	unknownFields protoimpl.UnknownFields
  1269  
  1270  	ID                uint64                 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  1271  	CourseID          uint64                 `protobuf:"varint,2,opt,name=CourseID,proto3" json:"CourseID,omitempty"` // foreign key
  1272  	Name              string                 `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
  1273  	Deadline          *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=deadline,proto3" json:"deadline,omitempty" gorm:"serializer:timestamp;type:datetime"`
  1274  	AutoApprove       bool                   `protobuf:"varint,5,opt,name=autoApprove,proto3" json:"autoApprove,omitempty"`
  1275  	Order             uint32                 `protobuf:"varint,6,opt,name=order,proto3" json:"order,omitempty"`
  1276  	IsGroupLab        bool                   `protobuf:"varint,7,opt,name=isGroupLab,proto3" json:"isGroupLab,omitempty"`
  1277  	ScoreLimit        uint32                 `protobuf:"varint,8,opt,name=scoreLimit,proto3" json:"scoreLimit,omitempty"`               // minimal score limit for auto approval
  1278  	Reviewers         uint32                 `protobuf:"varint,9,opt,name=reviewers,proto3" json:"reviewers,omitempty"`                 // number of reviewers that will review submissions for this assignment
  1279  	ContainerTimeout  uint32                 `protobuf:"varint,10,opt,name=containerTimeout,proto3" json:"containerTimeout,omitempty"`  // container timeout for this assignment
  1280  	Submissions       []*Submission          `protobuf:"bytes,11,rep,name=submissions,proto3" json:"submissions,omitempty"`             // submissions produced for this assignment
  1281  	Tasks             []*Task                `protobuf:"bytes,12,rep,name=tasks,proto3" json:"tasks,omitempty"`                         // tasks associated with this assignment
  1282  	GradingBenchmarks []*GradingBenchmark    `protobuf:"bytes,13,rep,name=gradingBenchmarks,proto3" json:"gradingBenchmarks,omitempty"` // grading benchmarks for this assignment
  1283  }
  1284  
  1285  func (x *Assignment) Reset() {
  1286  	*x = Assignment{}
  1287  	if protoimpl.UnsafeEnabled {
  1288  		mi := &file_qf_types_proto_msgTypes[10]
  1289  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1290  		ms.StoreMessageInfo(mi)
  1291  	}
  1292  }
  1293  
  1294  func (x *Assignment) String() string {
  1295  	return protoimpl.X.MessageStringOf(x)
  1296  }
  1297  
  1298  func (*Assignment) ProtoMessage() {}
  1299  
  1300  func (x *Assignment) ProtoReflect() protoreflect.Message {
  1301  	mi := &file_qf_types_proto_msgTypes[10]
  1302  	if protoimpl.UnsafeEnabled && x != nil {
  1303  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1304  		if ms.LoadMessageInfo() == nil {
  1305  			ms.StoreMessageInfo(mi)
  1306  		}
  1307  		return ms
  1308  	}
  1309  	return mi.MessageOf(x)
  1310  }
  1311  
  1312  // Deprecated: Use Assignment.ProtoReflect.Descriptor instead.
  1313  func (*Assignment) Descriptor() ([]byte, []int) {
  1314  	return file_qf_types_proto_rawDescGZIP(), []int{10}
  1315  }
  1316  
  1317  func (x *Assignment) GetID() uint64 {
  1318  	if x != nil {
  1319  		return x.ID
  1320  	}
  1321  	return 0
  1322  }
  1323  
  1324  func (x *Assignment) GetCourseID() uint64 {
  1325  	if x != nil {
  1326  		return x.CourseID
  1327  	}
  1328  	return 0
  1329  }
  1330  
  1331  func (x *Assignment) GetName() string {
  1332  	if x != nil {
  1333  		return x.Name
  1334  	}
  1335  	return ""
  1336  }
  1337  
  1338  func (x *Assignment) GetDeadline() *timestamppb.Timestamp {
  1339  	if x != nil {
  1340  		return x.Deadline
  1341  	}
  1342  	return nil
  1343  }
  1344  
  1345  func (x *Assignment) GetAutoApprove() bool {
  1346  	if x != nil {
  1347  		return x.AutoApprove
  1348  	}
  1349  	return false
  1350  }
  1351  
  1352  func (x *Assignment) GetOrder() uint32 {
  1353  	if x != nil {
  1354  		return x.Order
  1355  	}
  1356  	return 0
  1357  }
  1358  
  1359  func (x *Assignment) GetIsGroupLab() bool {
  1360  	if x != nil {
  1361  		return x.IsGroupLab
  1362  	}
  1363  	return false
  1364  }
  1365  
  1366  func (x *Assignment) GetScoreLimit() uint32 {
  1367  	if x != nil {
  1368  		return x.ScoreLimit
  1369  	}
  1370  	return 0
  1371  }
  1372  
  1373  func (x *Assignment) GetReviewers() uint32 {
  1374  	if x != nil {
  1375  		return x.Reviewers
  1376  	}
  1377  	return 0
  1378  }
  1379  
  1380  func (x *Assignment) GetContainerTimeout() uint32 {
  1381  	if x != nil {
  1382  		return x.ContainerTimeout
  1383  	}
  1384  	return 0
  1385  }
  1386  
  1387  func (x *Assignment) GetSubmissions() []*Submission {
  1388  	if x != nil {
  1389  		return x.Submissions
  1390  	}
  1391  	return nil
  1392  }
  1393  
  1394  func (x *Assignment) GetTasks() []*Task {
  1395  	if x != nil {
  1396  		return x.Tasks
  1397  	}
  1398  	return nil
  1399  }
  1400  
  1401  func (x *Assignment) GetGradingBenchmarks() []*GradingBenchmark {
  1402  	if x != nil {
  1403  		return x.GradingBenchmarks
  1404  	}
  1405  	return nil
  1406  }
  1407  
  1408  type Task struct {
  1409  	state         protoimpl.MessageState
  1410  	sizeCache     protoimpl.SizeCache
  1411  	unknownFields protoimpl.UnknownFields
  1412  
  1413  	ID              uint64   `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  1414  	AssignmentID    uint64   `protobuf:"varint,2,opt,name=assignmentID,proto3" json:"assignmentID,omitempty"` // foreign key
  1415  	AssignmentOrder uint32   `protobuf:"varint,3,opt,name=assignmentOrder,proto3" json:"assignmentOrder,omitempty"`
  1416  	Title           string   `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
  1417  	Body            string   `protobuf:"bytes,5,opt,name=body,proto3" json:"body,omitempty"`
  1418  	Name            string   `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
  1419  	Issues          []*Issue `protobuf:"bytes,7,rep,name=issues,proto3" json:"issues,omitempty"` // Issues that use this task as a benchmark
  1420  }
  1421  
  1422  func (x *Task) Reset() {
  1423  	*x = Task{}
  1424  	if protoimpl.UnsafeEnabled {
  1425  		mi := &file_qf_types_proto_msgTypes[11]
  1426  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1427  		ms.StoreMessageInfo(mi)
  1428  	}
  1429  }
  1430  
  1431  func (x *Task) String() string {
  1432  	return protoimpl.X.MessageStringOf(x)
  1433  }
  1434  
  1435  func (*Task) ProtoMessage() {}
  1436  
  1437  func (x *Task) ProtoReflect() protoreflect.Message {
  1438  	mi := &file_qf_types_proto_msgTypes[11]
  1439  	if protoimpl.UnsafeEnabled && x != nil {
  1440  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1441  		if ms.LoadMessageInfo() == nil {
  1442  			ms.StoreMessageInfo(mi)
  1443  		}
  1444  		return ms
  1445  	}
  1446  	return mi.MessageOf(x)
  1447  }
  1448  
  1449  // Deprecated: Use Task.ProtoReflect.Descriptor instead.
  1450  func (*Task) Descriptor() ([]byte, []int) {
  1451  	return file_qf_types_proto_rawDescGZIP(), []int{11}
  1452  }
  1453  
  1454  func (x *Task) GetID() uint64 {
  1455  	if x != nil {
  1456  		return x.ID
  1457  	}
  1458  	return 0
  1459  }
  1460  
  1461  func (x *Task) GetAssignmentID() uint64 {
  1462  	if x != nil {
  1463  		return x.AssignmentID
  1464  	}
  1465  	return 0
  1466  }
  1467  
  1468  func (x *Task) GetAssignmentOrder() uint32 {
  1469  	if x != nil {
  1470  		return x.AssignmentOrder
  1471  	}
  1472  	return 0
  1473  }
  1474  
  1475  func (x *Task) GetTitle() string {
  1476  	if x != nil {
  1477  		return x.Title
  1478  	}
  1479  	return ""
  1480  }
  1481  
  1482  func (x *Task) GetBody() string {
  1483  	if x != nil {
  1484  		return x.Body
  1485  	}
  1486  	return ""
  1487  }
  1488  
  1489  func (x *Task) GetName() string {
  1490  	if x != nil {
  1491  		return x.Name
  1492  	}
  1493  	return ""
  1494  }
  1495  
  1496  func (x *Task) GetIssues() []*Issue {
  1497  	if x != nil {
  1498  		return x.Issues
  1499  	}
  1500  	return nil
  1501  }
  1502  
  1503  type Issue struct {
  1504  	state         protoimpl.MessageState
  1505  	sizeCache     protoimpl.SizeCache
  1506  	unknownFields protoimpl.UnknownFields
  1507  
  1508  	ID             uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  1509  	RepositoryID   uint64 `protobuf:"varint,2,opt,name=repositoryID,proto3" json:"repositoryID,omitempty"`     // Represents the internal ID of a repository
  1510  	TaskID         uint64 `protobuf:"varint,3,opt,name=taskID,proto3" json:"taskID,omitempty"`                 // Task that this issue draws its content from
  1511  	ScmIssueNumber uint64 `protobuf:"varint,4,opt,name=ScmIssueNumber,proto3" json:"ScmIssueNumber,omitempty"` // Issue number on scm. Needed for associating db issue with scm issue
  1512  }
  1513  
  1514  func (x *Issue) Reset() {
  1515  	*x = Issue{}
  1516  	if protoimpl.UnsafeEnabled {
  1517  		mi := &file_qf_types_proto_msgTypes[12]
  1518  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1519  		ms.StoreMessageInfo(mi)
  1520  	}
  1521  }
  1522  
  1523  func (x *Issue) String() string {
  1524  	return protoimpl.X.MessageStringOf(x)
  1525  }
  1526  
  1527  func (*Issue) ProtoMessage() {}
  1528  
  1529  func (x *Issue) ProtoReflect() protoreflect.Message {
  1530  	mi := &file_qf_types_proto_msgTypes[12]
  1531  	if protoimpl.UnsafeEnabled && x != nil {
  1532  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1533  		if ms.LoadMessageInfo() == nil {
  1534  			ms.StoreMessageInfo(mi)
  1535  		}
  1536  		return ms
  1537  	}
  1538  	return mi.MessageOf(x)
  1539  }
  1540  
  1541  // Deprecated: Use Issue.ProtoReflect.Descriptor instead.
  1542  func (*Issue) Descriptor() ([]byte, []int) {
  1543  	return file_qf_types_proto_rawDescGZIP(), []int{12}
  1544  }
  1545  
  1546  func (x *Issue) GetID() uint64 {
  1547  	if x != nil {
  1548  		return x.ID
  1549  	}
  1550  	return 0
  1551  }
  1552  
  1553  func (x *Issue) GetRepositoryID() uint64 {
  1554  	if x != nil {
  1555  		return x.RepositoryID
  1556  	}
  1557  	return 0
  1558  }
  1559  
  1560  func (x *Issue) GetTaskID() uint64 {
  1561  	if x != nil {
  1562  		return x.TaskID
  1563  	}
  1564  	return 0
  1565  }
  1566  
  1567  func (x *Issue) GetScmIssueNumber() uint64 {
  1568  	if x != nil {
  1569  		return x.ScmIssueNumber
  1570  	}
  1571  	return 0
  1572  }
  1573  
  1574  type PullRequest struct {
  1575  	state         protoimpl.MessageState
  1576  	sizeCache     protoimpl.SizeCache
  1577  	unknownFields protoimpl.UnknownFields
  1578  
  1579  	ID              uint64            `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  1580  	ScmRepositoryID uint64            `protobuf:"varint,2,opt,name=ScmRepositoryID,proto3" json:"ScmRepositoryID,omitempty"` // Represents the scm repository ID
  1581  	TaskID          uint64            `protobuf:"varint,3,opt,name=taskID,proto3" json:"taskID,omitempty"`                   // Foreign key
  1582  	IssueID         uint64            `protobuf:"varint,4,opt,name=issueID,proto3" json:"issueID,omitempty"`                 // Foreign key
  1583  	UserID          uint64            `protobuf:"varint,5,opt,name=userID,proto3" json:"userID,omitempty"`                   // The user who owns this PR
  1584  	ScmCommentID    uint64            `protobuf:"varint,6,opt,name=ScmCommentID,proto3" json:"ScmCommentID,omitempty"`       // Scm ID of the comment used for automatic feedback
  1585  	SourceBranch    string            `protobuf:"bytes,7,opt,name=sourceBranch,proto3" json:"sourceBranch,omitempty"`        // The source branch for this pull request
  1586  	Number          uint64            `protobuf:"varint,8,opt,name=number,proto3" json:"number,omitempty"`                   // Pull request number
  1587  	Stage           PullRequest_Stage `protobuf:"varint,9,opt,name=stage,proto3,enum=qf.PullRequest_Stage" json:"stage,omitempty"`
  1588  }
  1589  
  1590  func (x *PullRequest) Reset() {
  1591  	*x = PullRequest{}
  1592  	if protoimpl.UnsafeEnabled {
  1593  		mi := &file_qf_types_proto_msgTypes[13]
  1594  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1595  		ms.StoreMessageInfo(mi)
  1596  	}
  1597  }
  1598  
  1599  func (x *PullRequest) String() string {
  1600  	return protoimpl.X.MessageStringOf(x)
  1601  }
  1602  
  1603  func (*PullRequest) ProtoMessage() {}
  1604  
  1605  func (x *PullRequest) ProtoReflect() protoreflect.Message {
  1606  	mi := &file_qf_types_proto_msgTypes[13]
  1607  	if protoimpl.UnsafeEnabled && x != nil {
  1608  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1609  		if ms.LoadMessageInfo() == nil {
  1610  			ms.StoreMessageInfo(mi)
  1611  		}
  1612  		return ms
  1613  	}
  1614  	return mi.MessageOf(x)
  1615  }
  1616  
  1617  // Deprecated: Use PullRequest.ProtoReflect.Descriptor instead.
  1618  func (*PullRequest) Descriptor() ([]byte, []int) {
  1619  	return file_qf_types_proto_rawDescGZIP(), []int{13}
  1620  }
  1621  
  1622  func (x *PullRequest) GetID() uint64 {
  1623  	if x != nil {
  1624  		return x.ID
  1625  	}
  1626  	return 0
  1627  }
  1628  
  1629  func (x *PullRequest) GetScmRepositoryID() uint64 {
  1630  	if x != nil {
  1631  		return x.ScmRepositoryID
  1632  	}
  1633  	return 0
  1634  }
  1635  
  1636  func (x *PullRequest) GetTaskID() uint64 {
  1637  	if x != nil {
  1638  		return x.TaskID
  1639  	}
  1640  	return 0
  1641  }
  1642  
  1643  func (x *PullRequest) GetIssueID() uint64 {
  1644  	if x != nil {
  1645  		return x.IssueID
  1646  	}
  1647  	return 0
  1648  }
  1649  
  1650  func (x *PullRequest) GetUserID() uint64 {
  1651  	if x != nil {
  1652  		return x.UserID
  1653  	}
  1654  	return 0
  1655  }
  1656  
  1657  func (x *PullRequest) GetScmCommentID() uint64 {
  1658  	if x != nil {
  1659  		return x.ScmCommentID
  1660  	}
  1661  	return 0
  1662  }
  1663  
  1664  func (x *PullRequest) GetSourceBranch() string {
  1665  	if x != nil {
  1666  		return x.SourceBranch
  1667  	}
  1668  	return ""
  1669  }
  1670  
  1671  func (x *PullRequest) GetNumber() uint64 {
  1672  	if x != nil {
  1673  		return x.Number
  1674  	}
  1675  	return 0
  1676  }
  1677  
  1678  func (x *PullRequest) GetStage() PullRequest_Stage {
  1679  	if x != nil {
  1680  		return x.Stage
  1681  	}
  1682  	return PullRequest_NONE
  1683  }
  1684  
  1685  type Assignments struct {
  1686  	state         protoimpl.MessageState
  1687  	sizeCache     protoimpl.SizeCache
  1688  	unknownFields protoimpl.UnknownFields
  1689  
  1690  	Assignments []*Assignment `protobuf:"bytes,1,rep,name=assignments,proto3" json:"assignments,omitempty"`
  1691  }
  1692  
  1693  func (x *Assignments) Reset() {
  1694  	*x = Assignments{}
  1695  	if protoimpl.UnsafeEnabled {
  1696  		mi := &file_qf_types_proto_msgTypes[14]
  1697  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1698  		ms.StoreMessageInfo(mi)
  1699  	}
  1700  }
  1701  
  1702  func (x *Assignments) String() string {
  1703  	return protoimpl.X.MessageStringOf(x)
  1704  }
  1705  
  1706  func (*Assignments) ProtoMessage() {}
  1707  
  1708  func (x *Assignments) ProtoReflect() protoreflect.Message {
  1709  	mi := &file_qf_types_proto_msgTypes[14]
  1710  	if protoimpl.UnsafeEnabled && x != nil {
  1711  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1712  		if ms.LoadMessageInfo() == nil {
  1713  			ms.StoreMessageInfo(mi)
  1714  		}
  1715  		return ms
  1716  	}
  1717  	return mi.MessageOf(x)
  1718  }
  1719  
  1720  // Deprecated: Use Assignments.ProtoReflect.Descriptor instead.
  1721  func (*Assignments) Descriptor() ([]byte, []int) {
  1722  	return file_qf_types_proto_rawDescGZIP(), []int{14}
  1723  }
  1724  
  1725  func (x *Assignments) GetAssignments() []*Assignment {
  1726  	if x != nil {
  1727  		return x.Assignments
  1728  	}
  1729  	return nil
  1730  }
  1731  
  1732  type Submission struct {
  1733  	state         protoimpl.MessageState
  1734  	sizeCache     protoimpl.SizeCache
  1735  	unknownFields protoimpl.UnknownFields
  1736  
  1737  	ID           uint64                 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  1738  	AssignmentID uint64                 `protobuf:"varint,2,opt,name=AssignmentID,proto3" json:"AssignmentID,omitempty"` // foreign key
  1739  	UserID       uint64                 `protobuf:"varint,3,opt,name=userID,proto3" json:"userID,omitempty"`
  1740  	GroupID      uint64                 `protobuf:"varint,4,opt,name=groupID,proto3" json:"groupID,omitempty"`
  1741  	Score        uint32                 `protobuf:"varint,5,opt,name=score,proto3" json:"score,omitempty"`
  1742  	CommitHash   string                 `protobuf:"bytes,6,opt,name=commitHash,proto3" json:"commitHash,omitempty"`
  1743  	Released     bool                   `protobuf:"varint,7,opt,name=released,proto3" json:"released,omitempty"` // true => feedback is visible to the student or group members
  1744  	Status       Submission_Status      `protobuf:"varint,8,opt,name=status,proto3,enum=qf.Submission_Status" json:"status,omitempty"`
  1745  	ApprovedDate *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=approvedDate,proto3" json:"approvedDate,omitempty" gorm:"serializer:timestamp;type:datetime"`
  1746  	Reviews      []*Review              `protobuf:"bytes,10,rep,name=reviews,proto3" json:"reviews,omitempty"`     // reviews produced for this submission
  1747  	BuildInfo    *score.BuildInfo       `protobuf:"bytes,11,opt,name=BuildInfo,proto3" json:"BuildInfo,omitempty"` // build info for tests
  1748  	Scores       []*score.Score         `protobuf:"bytes,12,rep,name=Scores,proto3" json:"Scores,omitempty"`       // list of scores for different tests
  1749  }
  1750  
  1751  func (x *Submission) Reset() {
  1752  	*x = Submission{}
  1753  	if protoimpl.UnsafeEnabled {
  1754  		mi := &file_qf_types_proto_msgTypes[15]
  1755  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1756  		ms.StoreMessageInfo(mi)
  1757  	}
  1758  }
  1759  
  1760  func (x *Submission) String() string {
  1761  	return protoimpl.X.MessageStringOf(x)
  1762  }
  1763  
  1764  func (*Submission) ProtoMessage() {}
  1765  
  1766  func (x *Submission) ProtoReflect() protoreflect.Message {
  1767  	mi := &file_qf_types_proto_msgTypes[15]
  1768  	if protoimpl.UnsafeEnabled && x != nil {
  1769  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1770  		if ms.LoadMessageInfo() == nil {
  1771  			ms.StoreMessageInfo(mi)
  1772  		}
  1773  		return ms
  1774  	}
  1775  	return mi.MessageOf(x)
  1776  }
  1777  
  1778  // Deprecated: Use Submission.ProtoReflect.Descriptor instead.
  1779  func (*Submission) Descriptor() ([]byte, []int) {
  1780  	return file_qf_types_proto_rawDescGZIP(), []int{15}
  1781  }
  1782  
  1783  func (x *Submission) GetID() uint64 {
  1784  	if x != nil {
  1785  		return x.ID
  1786  	}
  1787  	return 0
  1788  }
  1789  
  1790  func (x *Submission) GetAssignmentID() uint64 {
  1791  	if x != nil {
  1792  		return x.AssignmentID
  1793  	}
  1794  	return 0
  1795  }
  1796  
  1797  func (x *Submission) GetUserID() uint64 {
  1798  	if x != nil {
  1799  		return x.UserID
  1800  	}
  1801  	return 0
  1802  }
  1803  
  1804  func (x *Submission) GetGroupID() uint64 {
  1805  	if x != nil {
  1806  		return x.GroupID
  1807  	}
  1808  	return 0
  1809  }
  1810  
  1811  func (x *Submission) GetScore() uint32 {
  1812  	if x != nil {
  1813  		return x.Score
  1814  	}
  1815  	return 0
  1816  }
  1817  
  1818  func (x *Submission) GetCommitHash() string {
  1819  	if x != nil {
  1820  		return x.CommitHash
  1821  	}
  1822  	return ""
  1823  }
  1824  
  1825  func (x *Submission) GetReleased() bool {
  1826  	if x != nil {
  1827  		return x.Released
  1828  	}
  1829  	return false
  1830  }
  1831  
  1832  func (x *Submission) GetStatus() Submission_Status {
  1833  	if x != nil {
  1834  		return x.Status
  1835  	}
  1836  	return Submission_NONE
  1837  }
  1838  
  1839  func (x *Submission) GetApprovedDate() *timestamppb.Timestamp {
  1840  	if x != nil {
  1841  		return x.ApprovedDate
  1842  	}
  1843  	return nil
  1844  }
  1845  
  1846  func (x *Submission) GetReviews() []*Review {
  1847  	if x != nil {
  1848  		return x.Reviews
  1849  	}
  1850  	return nil
  1851  }
  1852  
  1853  func (x *Submission) GetBuildInfo() *score.BuildInfo {
  1854  	if x != nil {
  1855  		return x.BuildInfo
  1856  	}
  1857  	return nil
  1858  }
  1859  
  1860  func (x *Submission) GetScores() []*score.Score {
  1861  	if x != nil {
  1862  		return x.Scores
  1863  	}
  1864  	return nil
  1865  }
  1866  
  1867  type Submissions struct {
  1868  	state         protoimpl.MessageState
  1869  	sizeCache     protoimpl.SizeCache
  1870  	unknownFields protoimpl.UnknownFields
  1871  
  1872  	Submissions []*Submission `protobuf:"bytes,1,rep,name=submissions,proto3" json:"submissions,omitempty"`
  1873  }
  1874  
  1875  func (x *Submissions) Reset() {
  1876  	*x = Submissions{}
  1877  	if protoimpl.UnsafeEnabled {
  1878  		mi := &file_qf_types_proto_msgTypes[16]
  1879  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1880  		ms.StoreMessageInfo(mi)
  1881  	}
  1882  }
  1883  
  1884  func (x *Submissions) String() string {
  1885  	return protoimpl.X.MessageStringOf(x)
  1886  }
  1887  
  1888  func (*Submissions) ProtoMessage() {}
  1889  
  1890  func (x *Submissions) ProtoReflect() protoreflect.Message {
  1891  	mi := &file_qf_types_proto_msgTypes[16]
  1892  	if protoimpl.UnsafeEnabled && x != nil {
  1893  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1894  		if ms.LoadMessageInfo() == nil {
  1895  			ms.StoreMessageInfo(mi)
  1896  		}
  1897  		return ms
  1898  	}
  1899  	return mi.MessageOf(x)
  1900  }
  1901  
  1902  // Deprecated: Use Submissions.ProtoReflect.Descriptor instead.
  1903  func (*Submissions) Descriptor() ([]byte, []int) {
  1904  	return file_qf_types_proto_rawDescGZIP(), []int{16}
  1905  }
  1906  
  1907  func (x *Submissions) GetSubmissions() []*Submission {
  1908  	if x != nil {
  1909  		return x.Submissions
  1910  	}
  1911  	return nil
  1912  }
  1913  
  1914  type GradingBenchmark struct {
  1915  	state         protoimpl.MessageState
  1916  	sizeCache     protoimpl.SizeCache
  1917  	unknownFields protoimpl.UnknownFields
  1918  
  1919  	ID           uint64              `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  1920  	CourseID     uint64              `protobuf:"varint,2,opt,name=CourseID,proto3" json:"CourseID,omitempty"`         // foreign key
  1921  	AssignmentID uint64              `protobuf:"varint,3,opt,name=AssignmentID,proto3" json:"AssignmentID,omitempty"` // foreign key
  1922  	ReviewID     uint64              `protobuf:"varint,4,opt,name=ReviewID,proto3" json:"ReviewID,omitempty"`         // foreign key
  1923  	Heading      string              `protobuf:"bytes,5,opt,name=heading,proto3" json:"heading,omitempty"`
  1924  	Comment      string              `protobuf:"bytes,6,opt,name=comment,proto3" json:"comment,omitempty"`
  1925  	Criteria     []*GradingCriterion `protobuf:"bytes,7,rep,name=criteria,proto3" json:"criteria,omitempty" gorm:"foreignKey:BenchmarkID"`
  1926  }
  1927  
  1928  func (x *GradingBenchmark) Reset() {
  1929  	*x = GradingBenchmark{}
  1930  	if protoimpl.UnsafeEnabled {
  1931  		mi := &file_qf_types_proto_msgTypes[17]
  1932  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1933  		ms.StoreMessageInfo(mi)
  1934  	}
  1935  }
  1936  
  1937  func (x *GradingBenchmark) String() string {
  1938  	return protoimpl.X.MessageStringOf(x)
  1939  }
  1940  
  1941  func (*GradingBenchmark) ProtoMessage() {}
  1942  
  1943  func (x *GradingBenchmark) ProtoReflect() protoreflect.Message {
  1944  	mi := &file_qf_types_proto_msgTypes[17]
  1945  	if protoimpl.UnsafeEnabled && x != nil {
  1946  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  1947  		if ms.LoadMessageInfo() == nil {
  1948  			ms.StoreMessageInfo(mi)
  1949  		}
  1950  		return ms
  1951  	}
  1952  	return mi.MessageOf(x)
  1953  }
  1954  
  1955  // Deprecated: Use GradingBenchmark.ProtoReflect.Descriptor instead.
  1956  func (*GradingBenchmark) Descriptor() ([]byte, []int) {
  1957  	return file_qf_types_proto_rawDescGZIP(), []int{17}
  1958  }
  1959  
  1960  func (x *GradingBenchmark) GetID() uint64 {
  1961  	if x != nil {
  1962  		return x.ID
  1963  	}
  1964  	return 0
  1965  }
  1966  
  1967  func (x *GradingBenchmark) GetCourseID() uint64 {
  1968  	if x != nil {
  1969  		return x.CourseID
  1970  	}
  1971  	return 0
  1972  }
  1973  
  1974  func (x *GradingBenchmark) GetAssignmentID() uint64 {
  1975  	if x != nil {
  1976  		return x.AssignmentID
  1977  	}
  1978  	return 0
  1979  }
  1980  
  1981  func (x *GradingBenchmark) GetReviewID() uint64 {
  1982  	if x != nil {
  1983  		return x.ReviewID
  1984  	}
  1985  	return 0
  1986  }
  1987  
  1988  func (x *GradingBenchmark) GetHeading() string {
  1989  	if x != nil {
  1990  		return x.Heading
  1991  	}
  1992  	return ""
  1993  }
  1994  
  1995  func (x *GradingBenchmark) GetComment() string {
  1996  	if x != nil {
  1997  		return x.Comment
  1998  	}
  1999  	return ""
  2000  }
  2001  
  2002  func (x *GradingBenchmark) GetCriteria() []*GradingCriterion {
  2003  	if x != nil {
  2004  		return x.Criteria
  2005  	}
  2006  	return nil
  2007  }
  2008  
  2009  type Benchmarks struct {
  2010  	state         protoimpl.MessageState
  2011  	sizeCache     protoimpl.SizeCache
  2012  	unknownFields protoimpl.UnknownFields
  2013  
  2014  	Benchmarks []*GradingBenchmark `protobuf:"bytes,1,rep,name=benchmarks,proto3" json:"benchmarks,omitempty"`
  2015  }
  2016  
  2017  func (x *Benchmarks) Reset() {
  2018  	*x = Benchmarks{}
  2019  	if protoimpl.UnsafeEnabled {
  2020  		mi := &file_qf_types_proto_msgTypes[18]
  2021  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2022  		ms.StoreMessageInfo(mi)
  2023  	}
  2024  }
  2025  
  2026  func (x *Benchmarks) String() string {
  2027  	return protoimpl.X.MessageStringOf(x)
  2028  }
  2029  
  2030  func (*Benchmarks) ProtoMessage() {}
  2031  
  2032  func (x *Benchmarks) ProtoReflect() protoreflect.Message {
  2033  	mi := &file_qf_types_proto_msgTypes[18]
  2034  	if protoimpl.UnsafeEnabled && x != nil {
  2035  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2036  		if ms.LoadMessageInfo() == nil {
  2037  			ms.StoreMessageInfo(mi)
  2038  		}
  2039  		return ms
  2040  	}
  2041  	return mi.MessageOf(x)
  2042  }
  2043  
  2044  // Deprecated: Use Benchmarks.ProtoReflect.Descriptor instead.
  2045  func (*Benchmarks) Descriptor() ([]byte, []int) {
  2046  	return file_qf_types_proto_rawDescGZIP(), []int{18}
  2047  }
  2048  
  2049  func (x *Benchmarks) GetBenchmarks() []*GradingBenchmark {
  2050  	if x != nil {
  2051  		return x.Benchmarks
  2052  	}
  2053  	return nil
  2054  }
  2055  
  2056  type GradingCriterion struct {
  2057  	state         protoimpl.MessageState
  2058  	sizeCache     protoimpl.SizeCache
  2059  	unknownFields protoimpl.UnknownFields
  2060  
  2061  	ID          uint64                 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  2062  	BenchmarkID uint64                 `protobuf:"varint,2,opt,name=BenchmarkID,proto3" json:"BenchmarkID,omitempty"` // foreign key
  2063  	CourseID    uint64                 `protobuf:"varint,3,opt,name=CourseID,proto3" json:"CourseID,omitempty"`       // foreign key
  2064  	Points      uint64                 `protobuf:"varint,4,opt,name=points,proto3" json:"points,omitempty"`
  2065  	Description string                 `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
  2066  	Grade       GradingCriterion_Grade `protobuf:"varint,6,opt,name=grade,proto3,enum=qf.GradingCriterion_Grade" json:"grade,omitempty"`
  2067  	Comment     string                 `protobuf:"bytes,7,opt,name=comment,proto3" json:"comment,omitempty"`
  2068  }
  2069  
  2070  func (x *GradingCriterion) Reset() {
  2071  	*x = GradingCriterion{}
  2072  	if protoimpl.UnsafeEnabled {
  2073  		mi := &file_qf_types_proto_msgTypes[19]
  2074  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2075  		ms.StoreMessageInfo(mi)
  2076  	}
  2077  }
  2078  
  2079  func (x *GradingCriterion) String() string {
  2080  	return protoimpl.X.MessageStringOf(x)
  2081  }
  2082  
  2083  func (*GradingCriterion) ProtoMessage() {}
  2084  
  2085  func (x *GradingCriterion) ProtoReflect() protoreflect.Message {
  2086  	mi := &file_qf_types_proto_msgTypes[19]
  2087  	if protoimpl.UnsafeEnabled && x != nil {
  2088  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2089  		if ms.LoadMessageInfo() == nil {
  2090  			ms.StoreMessageInfo(mi)
  2091  		}
  2092  		return ms
  2093  	}
  2094  	return mi.MessageOf(x)
  2095  }
  2096  
  2097  // Deprecated: Use GradingCriterion.ProtoReflect.Descriptor instead.
  2098  func (*GradingCriterion) Descriptor() ([]byte, []int) {
  2099  	return file_qf_types_proto_rawDescGZIP(), []int{19}
  2100  }
  2101  
  2102  func (x *GradingCriterion) GetID() uint64 {
  2103  	if x != nil {
  2104  		return x.ID
  2105  	}
  2106  	return 0
  2107  }
  2108  
  2109  func (x *GradingCriterion) GetBenchmarkID() uint64 {
  2110  	if x != nil {
  2111  		return x.BenchmarkID
  2112  	}
  2113  	return 0
  2114  }
  2115  
  2116  func (x *GradingCriterion) GetCourseID() uint64 {
  2117  	if x != nil {
  2118  		return x.CourseID
  2119  	}
  2120  	return 0
  2121  }
  2122  
  2123  func (x *GradingCriterion) GetPoints() uint64 {
  2124  	if x != nil {
  2125  		return x.Points
  2126  	}
  2127  	return 0
  2128  }
  2129  
  2130  func (x *GradingCriterion) GetDescription() string {
  2131  	if x != nil {
  2132  		return x.Description
  2133  	}
  2134  	return ""
  2135  }
  2136  
  2137  func (x *GradingCriterion) GetGrade() GradingCriterion_Grade {
  2138  	if x != nil {
  2139  		return x.Grade
  2140  	}
  2141  	return GradingCriterion_NONE
  2142  }
  2143  
  2144  func (x *GradingCriterion) GetComment() string {
  2145  	if x != nil {
  2146  		return x.Comment
  2147  	}
  2148  	return ""
  2149  }
  2150  
  2151  type Review struct {
  2152  	state         protoimpl.MessageState
  2153  	sizeCache     protoimpl.SizeCache
  2154  	unknownFields protoimpl.UnknownFields
  2155  
  2156  	ID                uint64                 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
  2157  	SubmissionID      uint64                 `protobuf:"varint,2,opt,name=SubmissionID,proto3" json:"SubmissionID,omitempty"` // foreign key
  2158  	ReviewerID        uint64                 `protobuf:"varint,3,opt,name=ReviewerID,proto3" json:"ReviewerID,omitempty"`     // UserID of the reviewer
  2159  	Feedback          string                 `protobuf:"bytes,4,opt,name=feedback,proto3" json:"feedback,omitempty"`
  2160  	Ready             bool                   `protobuf:"varint,5,opt,name=ready,proto3" json:"ready,omitempty"`
  2161  	Score             uint32                 `protobuf:"varint,6,opt,name=score,proto3" json:"score,omitempty"`
  2162  	GradingBenchmarks []*GradingBenchmark    `protobuf:"bytes,7,rep,name=gradingBenchmarks,proto3" json:"gradingBenchmarks,omitempty" gorm:"foreignKey:ReviewID"`
  2163  	Edited            *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=edited,proto3" json:"edited,omitempty" gorm:"serializer:timestamp;type:datetime"`
  2164  }
  2165  
  2166  func (x *Review) Reset() {
  2167  	*x = Review{}
  2168  	if protoimpl.UnsafeEnabled {
  2169  		mi := &file_qf_types_proto_msgTypes[20]
  2170  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2171  		ms.StoreMessageInfo(mi)
  2172  	}
  2173  }
  2174  
  2175  func (x *Review) String() string {
  2176  	return protoimpl.X.MessageStringOf(x)
  2177  }
  2178  
  2179  func (*Review) ProtoMessage() {}
  2180  
  2181  func (x *Review) ProtoReflect() protoreflect.Message {
  2182  	mi := &file_qf_types_proto_msgTypes[20]
  2183  	if protoimpl.UnsafeEnabled && x != nil {
  2184  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  2185  		if ms.LoadMessageInfo() == nil {
  2186  			ms.StoreMessageInfo(mi)
  2187  		}
  2188  		return ms
  2189  	}
  2190  	return mi.MessageOf(x)
  2191  }
  2192  
  2193  // Deprecated: Use Review.ProtoReflect.Descriptor instead.
  2194  func (*Review) Descriptor() ([]byte, []int) {
  2195  	return file_qf_types_proto_rawDescGZIP(), []int{20}
  2196  }
  2197  
  2198  func (x *Review) GetID() uint64 {
  2199  	if x != nil {
  2200  		return x.ID
  2201  	}
  2202  	return 0
  2203  }
  2204  
  2205  func (x *Review) GetSubmissionID() uint64 {
  2206  	if x != nil {
  2207  		return x.SubmissionID
  2208  	}
  2209  	return 0
  2210  }
  2211  
  2212  func (x *Review) GetReviewerID() uint64 {
  2213  	if x != nil {
  2214  		return x.ReviewerID
  2215  	}
  2216  	return 0
  2217  }
  2218  
  2219  func (x *Review) GetFeedback() string {
  2220  	if x != nil {
  2221  		return x.Feedback
  2222  	}
  2223  	return ""
  2224  }
  2225  
  2226  func (x *Review) GetReady() bool {
  2227  	if x != nil {
  2228  		return x.Ready
  2229  	}
  2230  	return false
  2231  }
  2232  
  2233  func (x *Review) GetScore() uint32 {
  2234  	if x != nil {
  2235  		return x.Score
  2236  	}
  2237  	return 0
  2238  }
  2239  
  2240  func (x *Review) GetGradingBenchmarks() []*GradingBenchmark {
  2241  	if x != nil {
  2242  		return x.GradingBenchmarks
  2243  	}
  2244  	return nil
  2245  }
  2246  
  2247  func (x *Review) GetEdited() *timestamppb.Timestamp {
  2248  	if x != nil {
  2249  		return x.Edited
  2250  	}
  2251  	return nil
  2252  }
  2253  
  2254  var File_qf_types_proto protoreflect.FileDescriptor
  2255  
  2256  var file_qf_types_proto_rawDesc = []byte{
  2257  	0x0a, 0x0e, 0x71, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
  2258  	0x12, 0x02, 0x71, 0x66, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f,
  2259  	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e,
  2260  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x6b, 0x69, 0x74, 0x2f, 0x73, 0x63, 0x6f, 0x72, 0x65,
  2261  	0x2f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x70, 0x61,
  2262  	0x74, 0x63, 0x68, 0x2f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc6, 0x02, 0x0a,
  2263  	0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28,
  2264  	0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e,
  2265  	0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x49, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12,
  2266  	0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e,
  2267  	0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x75, 0x64, 0x65, 0x6e, 0x74, 0x49, 0x44,
  2268  	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x74, 0x75, 0x64, 0x65, 0x6e, 0x74, 0x49,
  2269  	0x44, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
  2270  	0x52, 0x05, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x76, 0x61, 0x74, 0x61,
  2271  	0x72, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x41, 0x76, 0x61, 0x74,
  2272  	0x61, 0x72, 0x55, 0x52, 0x4c, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x07,
  2273  	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x55,
  2274  	0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08,
  2275  	0x52, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a,
  2276  	0x0b, 0x53, 0x63, 0x6d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01,
  2277  	0x28, 0x04, 0x52, 0x0b, 0x53, 0x63, 0x6d, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x44, 0x12,
  2278  	0x22, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
  2279  	0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f,
  2280  	0x6b, 0x65, 0x6e, 0x12, 0x30, 0x0a, 0x0b, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e,
  2281  	0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x66, 0x2e, 0x45, 0x6e,
  2282  	0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c,
  2283  	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x27, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1e,
  2284  	0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e,
  2285  	0x71, 0x66, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0xf8,
  2286  	0x02, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01,
  2287  	0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x33, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
  2288  	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1f, 0xca, 0xb5, 0x03, 0x1b, 0xa2, 0x01, 0x18, 0x67,
  2289  	0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78,
  2290  	0x3a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a,
  2291  	0x08, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42,
  2292  	0x1f, 0xca, 0xb5, 0x03, 0x1b, 0xa2, 0x01, 0x18, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x75, 0x6e,
  2293  	0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22,
  2294  	0x52, 0x08, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x63,
  2295  	0x6d, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x53,
  2296  	0x63, 0x6d, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x44, 0x12, 0x2d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
  2297  	0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x71, 0x66, 0x2e, 0x47, 0x72,
  2298  	0x6f, 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
  2299  	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x44, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73,
  2300  	0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x71, 0x66, 0x2e, 0x55, 0x73, 0x65, 0x72,
  2301  	0x42, 0x24, 0xca, 0xb5, 0x03, 0x20, 0xa2, 0x01, 0x1d, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x6d,
  2302  	0x61, 0x6e, 0x79, 0x32, 0x6d, 0x61, 0x6e, 0x79, 0x3a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x75,
  2303  	0x73, 0x65, 0x72, 0x73, 0x3b, 0x22, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a,
  2304  	0x0b, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03,
  2305  	0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x66, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65,
  2306  	0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22,
  2307  	0x28, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b,
  2308  	0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41,
  2309  	0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x01, 0x22, 0x2b, 0x0a, 0x06, 0x47, 0x72, 0x6f,
  2310  	0x75, 0x70, 0x73, 0x12, 0x21, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20,
  2311  	0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x71, 0x66, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06,
  2312  	0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xcb, 0x04, 0x0a, 0x06, 0x43, 0x6f, 0x75, 0x72, 0x73,
  2313  	0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49,
  2314  	0x44, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74,
  2315  	0x6f, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x75, 0x72,
  2316  	0x73, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e,
  2317  	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
  2318  	0x34, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0xca,
  2319  	0xb5, 0x03, 0x1c, 0xa2, 0x01, 0x19, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x75, 0x6e, 0x69, 0x71,
  2320  	0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x22, 0x52,
  2321  	0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x79, 0x65, 0x61, 0x72, 0x18, 0x05, 0x20,
  2322  	0x01, 0x28, 0x0d, 0x42, 0x20, 0xca, 0xb5, 0x03, 0x1c, 0xa2, 0x01, 0x19, 0x67, 0x6f, 0x72, 0x6d,
  2323  	0x3a, 0x22, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x63, 0x6f,
  2324  	0x75, 0x72, 0x73, 0x65, 0x22, 0x52, 0x04, 0x79, 0x65, 0x61, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x74,
  2325  	0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x2c, 0x0a,
  2326  	0x11, 0x53, 0x63, 0x6d, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
  2327  	0x49, 0x44, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x53, 0x63, 0x6d, 0x4f, 0x72, 0x67,
  2328  	0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x13, 0x53,
  2329  	0x63, 0x6d, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61,
  2330  	0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x53, 0x63, 0x6d, 0x4f, 0x72, 0x67,
  2331  	0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a,
  2332  	0x08, 0x73, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x79, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52,
  2333  	0x08, 0x73, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x79, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x44, 0x6f, 0x63,
  2334  	0x6b, 0x65, 0x72, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x0b, 0x20,
  2335  	0x01, 0x28, 0x09, 0x52, 0x10, 0x44, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x66, 0x69, 0x6c, 0x65, 0x44,
  2336  	0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x08, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
  2337  	0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x71, 0x66, 0x2e, 0x45, 0x6e, 0x72,
  2338  	0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
  2339  	0x75, 0x73, 0x42, 0x0f, 0xca, 0xb5, 0x03, 0x0b, 0xa2, 0x01, 0x08, 0x67, 0x6f, 0x72, 0x6d, 0x3a,
  2340  	0x22, 0x2d, 0x22, 0x52, 0x08, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x30, 0x0a,
  2341  	0x0b, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x03,
  2342  	0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x66, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65,
  2343  	0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12,
  2344  	0x30, 0x0a, 0x0b, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0e,
  2345  	0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x66, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e,
  2346  	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
  2347  	0x73, 0x12, 0x21, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28,
  2348  	0x0b, 0x32, 0x09, 0x2e, 0x71, 0x66, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72,
  2349  	0x6f, 0x75, 0x70, 0x73, 0x22, 0x2f, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x73, 0x12,
  2350  	0x24, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
  2351  	0x32, 0x0a, 0x2e, 0x71, 0x66, 0x2e, 0x43, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x52, 0x07, 0x63, 0x6f,
  2352  	0x75, 0x72, 0x73, 0x65, 0x73, 0x22, 0xf9, 0x03, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
  2353  	0x74, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04,
  2354  	0x52, 0x02, 0x49, 0x44, 0x12, 0x52, 0x0a, 0x11, 0x53, 0x63, 0x6d, 0x4f, 0x72, 0x67, 0x61, 0x6e,
  2355  	0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42,
  2356  	0x24, 0xca, 0xb5, 0x03, 0x20, 0xa2, 0x01, 0x1d, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x75, 0x6e,
  2357  	0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69,
  2358  	0x74, 0x6f, 0x72, 0x79, 0x22, 0x52, 0x11, 0x53, 0x63, 0x6d, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69,
  2359  	0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x53, 0x63, 0x6d, 0x52,
  2360  	0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28,
  2361  	0x04, 0x52, 0x0f, 0x53, 0x63, 0x6d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
  2362  	0x49, 0x44, 0x12, 0x3c, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01,
  2363  	0x28, 0x04, 0x42, 0x24, 0xca, 0xb5, 0x03, 0x20, 0xa2, 0x01, 0x1d, 0x67, 0x6f, 0x72, 0x6d, 0x3a,
  2364  	0x22, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x65, 0x70,
  2365  	0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44,
  2366  	0x12, 0x3e, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28,
  2367  	0x04, 0x42, 0x24, 0xca, 0xb5, 0x03, 0x20, 0xa2, 0x01, 0x1d, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22,
  2368  	0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x65, 0x70, 0x6f,
  2369  	0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44,
  2370  	0x12, 0x18, 0x0a, 0x07, 0x48, 0x54, 0x4d, 0x4c, 0x55, 0x52, 0x4c, 0x18, 0x06, 0x20, 0x01, 0x28,
  2371  	0x09, 0x52, 0x07, 0x48, 0x54, 0x4d, 0x4c, 0x55, 0x52, 0x4c, 0x12, 0x55, 0x0a, 0x08, 0x72, 0x65,
  2372  	0x70, 0x6f, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x71,
  2373  	0x66, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x54, 0x79, 0x70,
  2374  	0x65, 0x42, 0x24, 0xca, 0xb5, 0x03, 0x20, 0xa2, 0x01, 0x1d, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22,
  2375  	0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x72, 0x65, 0x70, 0x6f,
  2376  	0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x54, 0x79, 0x70,
  2377  	0x65, 0x12, 0x21, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28,
  2378  	0x0b, 0x32, 0x09, 0x2e, 0x71, 0x66, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x06, 0x69, 0x73,
  2379  	0x73, 0x75, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04,
  2380  	0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x01,
  2381  	0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x53, 0x10,
  2382  	0x02, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04,
  2383  	0x55, 0x53, 0x45, 0x52, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10,
  2384  	0x05, 0x22, 0x95, 0x06, 0x0a, 0x0a, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74,
  2385  	0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44,
  2386  	0x12, 0x40, 0x0a, 0x08, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01,
  2387  	0x28, 0x04, 0x42, 0x24, 0xca, 0xb5, 0x03, 0x20, 0xa2, 0x01, 0x1d, 0x67, 0x6f, 0x72, 0x6d, 0x3a,
  2388  	0x22, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x65, 0x6e, 0x72,
  2389  	0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65,
  2390  	0x49, 0x44, 0x12, 0x3c, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01,
  2391  	0x28, 0x04, 0x42, 0x24, 0xca, 0xb5, 0x03, 0x20, 0xa2, 0x01, 0x1d, 0x67, 0x6f, 0x72, 0x6d, 0x3a,
  2392  	0x22, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x65, 0x6e, 0x72,
  2393  	0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44,
  2394  	0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28,
  2395  	0x04, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x73,
  2396  	0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x71, 0x66, 0x2e, 0x55, 0x73,
  2397  	0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x72,
  2398  	0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x66, 0x2e, 0x43, 0x6f,
  2399  	0x75, 0x72, 0x73, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x05,
  2400  	0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x71, 0x66,
  2401  	0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x0a,
  2402  	0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e,
  2403  	0x71, 0x66, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x73,
  2404  	0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
  2405  	0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32,
  2406  	0x1b, 0x2e, 0x71, 0x66, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2e,
  2407  	0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74,
  2408  	0x61, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x11, 0x73, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x79, 0x73, 0x52,
  2409  	0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x0f,
  2410  	0xca, 0xb5, 0x03, 0x0b, 0xa2, 0x01, 0x08, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x2d, 0x22, 0x52,
  2411  	0x11, 0x73, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x79, 0x73, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69,
  2412  	0x6e, 0x67, 0x12, 0x78, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69,
  2413  	0x74, 0x79, 0x44, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
  2414  	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
  2415  	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x30, 0xca, 0xb5, 0x03, 0x2c, 0xa2, 0x01,
  2416  	0x29, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65,
  2417  	0x72, 0x3a, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x3b, 0x74, 0x79, 0x70, 0x65,
  2418  	0x3a, 0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74,
  2419  	0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d,
  2420  	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x0c, 0x20,
  2421  	0x01, 0x28, 0x04, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76,
  2422  	0x65, 0x64, 0x12, 0x34, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x64, 0x53, 0x6c, 0x69, 0x70, 0x44, 0x61,
  2423  	0x79, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x71, 0x66, 0x2e, 0x55, 0x73,
  2424  	0x65, 0x64, 0x53, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x79, 0x73, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x64,
  2425  	0x53, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x79, 0x73, 0x22, 0x3d, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72,
  2426  	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00,
  2427  	0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a,
  2428  	0x07, 0x53, 0x54, 0x55, 0x44, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x45,
  2429  	0x41, 0x43, 0x48, 0x45, 0x52, 0x10, 0x03, 0x22, 0x40, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x70, 0x6c,
  2430  	0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x53, 0x45, 0x54,
  2431  	0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x49, 0x44, 0x44, 0x45, 0x4e, 0x10, 0x01, 0x12, 0x0b,
  2432  	0x0a, 0x07, 0x56, 0x49, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x46,
  2433  	0x41, 0x56, 0x4f, 0x52, 0x49, 0x54, 0x45, 0x10, 0x03, 0x22, 0x82, 0x01, 0x0a, 0x0c, 0x55, 0x73,
  2434  	0x65, 0x64, 0x53, 0x6c, 0x69, 0x70, 0x44, 0x61, 0x79, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44,
  2435  	0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e,
  2436  	0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
  2437  	0x52, 0x0c, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x22,
  2438  	0x0a, 0x0c, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x03,
  2439  	0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
  2440  	0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x64, 0x44, 0x61, 0x79, 0x73, 0x18, 0x04,
  2441  	0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x75, 0x73, 0x65, 0x64, 0x44, 0x61, 0x79, 0x73, 0x22, 0x3f,
  2442  	0x0a, 0x0b, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a,
  2443  	0x0b, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
  2444  	0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x66, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65,
  2445  	0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22,
  2446  	0x8e, 0x04, 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e,
  2447  	0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1a,
  2448  	0x0a, 0x08, 0x43, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
  2449  	0x52, 0x08, 0x43, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
  2450  	0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x68,
  2451  	0x0a, 0x08, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
  2452  	0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
  2453  	0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x30, 0xca, 0xb5,
  2454  	0x03, 0x2c, 0xa2, 0x01, 0x29, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x73, 0x65, 0x72, 0x69, 0x61,
  2455  	0x6c, 0x69, 0x7a, 0x65, 0x72, 0x3a, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x3b,
  2456  	0x74, 0x79, 0x70, 0x65, 0x3a, 0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x52, 0x08,
  2457  	0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x6f,
  2458  	0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61,
  2459  	0x75, 0x74, 0x6f, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72,
  2460  	0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72,
  2461  	0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x61, 0x62, 0x18, 0x07,
  2462  	0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x61, 0x62,
  2463  	0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08,
  2464  	0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74,
  2465  	0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20,
  2466  	0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x12, 0x2a,
  2467  	0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x6f,
  2468  	0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69,
  2469  	0x6e, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x30, 0x0a, 0x0b, 0x73, 0x75,
  2470  	0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32,
  2471  	0x0e, 0x2e, 0x71, 0x66, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52,
  2472  	0x0b, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x05,
  2473  	0x74, 0x61, 0x73, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x71, 0x66,
  2474  	0x2e, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x12, 0x42, 0x0a, 0x11,
  2475  	0x67, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b,
  2476  	0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x71, 0x66, 0x2e, 0x47, 0x72, 0x61,
  2477  	0x64, 0x69, 0x6e, 0x67, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x52, 0x11, 0x67,
  2478  	0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73,
  2479  	0x22, 0xc5, 0x01, 0x0a, 0x04, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18,
  2480  	0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x73, 0x73,
  2481  	0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52,
  2482  	0x0c, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x28, 0x0a,
  2483  	0x0f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72,
  2484  	0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65,
  2485  	0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65,
  2486  	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x12, 0x0a,
  2487  	0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64,
  2488  	0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
  2489  	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18,
  2490  	0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x71, 0x66, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65,
  2491  	0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x05, 0x49, 0x73, 0x73, 0x75,
  2492  	0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49,
  2493  	0x44, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49,
  2494  	0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
  2495  	0x6f, 0x72, 0x79, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18,
  2496  	0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x26, 0x0a,
  2497  	0x0e, 0x53, 0x63, 0x6d, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18,
  2498  	0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x53, 0x63, 0x6d, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4e,
  2499  	0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xd6, 0x02, 0x0a, 0x0b, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65,
  2500  	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28,
  2501  	0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x0f, 0x53, 0x63, 0x6d, 0x52, 0x65, 0x70, 0x6f,
  2502  	0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f,
  2503  	0x53, 0x63, 0x6d, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x44, 0x12,
  2504  	0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52,
  2505  	0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x73, 0x75, 0x65,
  2506  	0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x69, 0x73, 0x73, 0x75, 0x65, 0x49,
  2507  	0x44, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28,
  2508  	0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x63, 0x6d,
  2509  	0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52,
  2510  	0x0c, 0x53, 0x63, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x22, 0x0a,
  2511  	0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x07, 0x20,
  2512  	0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63,
  2513  	0x68, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28,
  2514  	0x04, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x05, 0x73, 0x74, 0x61,
  2515  	0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x71, 0x66, 0x2e, 0x50, 0x75,
  2516  	0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52,
  2517  	0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x22, 0x36, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12,
  2518  	0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x52, 0x41,
  2519  	0x46, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x10, 0x02,
  2520  	0x12, 0x0c, 0x0a, 0x08, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x03, 0x22, 0x3f,
  2521  	0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a,
  2522  	0x0b, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
  2523  	0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x66, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65,
  2524  	0x6e, 0x74, 0x52, 0x0b, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22,
  2525  	0x9f, 0x04, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e,
  2526  	0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x22,
  2527  	0x0a, 0x0c, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02,
  2528  	0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
  2529  	0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01,
  2530  	0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72,
  2531  	0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x72, 0x6f,
  2532  	0x75, 0x70, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20,
  2533  	0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f,
  2534  	0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
  2535  	0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65,
  2536  	0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65,
  2537  	0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
  2538  	0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x71, 0x66, 0x2e, 0x53, 0x75, 0x62, 0x6d,
  2539  	0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73,
  2540  	0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x70, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65,
  2541  	0x64, 0x44, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
  2542  	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69,
  2543  	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x30, 0xca, 0xb5, 0x03, 0x2c, 0xa2, 0x01, 0x29,
  2544  	0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72,
  2545  	0x3a, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x3a,
  2546  	0x64, 0x61, 0x74, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x72, 0x6f,
  2547  	0x76, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65,
  2548  	0x77, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x71, 0x66, 0x2e, 0x52, 0x65,
  2549  	0x76, 0x69, 0x65, 0x77, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x12, 0x2e, 0x0a,
  2550  	0x09, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b,
  2551  	0x32, 0x10, 0x2e, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e,
  2552  	0x66, 0x6f, 0x52, 0x09, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a,
  2553  	0x06, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e,
  2554  	0x73, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x06, 0x53, 0x63, 0x6f,
  2555  	0x72, 0x65, 0x73, 0x22, 0x3c, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a,
  2556  	0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x50, 0x50, 0x52, 0x4f,
  2557  	0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45,
  2558  	0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x10,
  2559  	0x03, 0x22, 0x3f, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73,
  2560  	0x12, 0x30, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
  2561  	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x71, 0x66, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69,
  2562  	0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
  2563  	0x6e, 0x73, 0x22, 0x8a, 0x02, 0x0a, 0x10, 0x47, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x65,
  2564  	0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20,
  2565  	0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f, 0x75, 0x72, 0x73,
  2566  	0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x43, 0x6f, 0x75, 0x72, 0x73,
  2567  	0x65, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e,
  2568  	0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x41, 0x73, 0x73, 0x69, 0x67,
  2569  	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x52, 0x65, 0x76, 0x69, 0x65,
  2570  	0x77, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x52, 0x65, 0x76, 0x69, 0x65,
  2571  	0x77, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05,
  2572  	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a,
  2573  	0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
  2574  	0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x56, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x65,
  2575  	0x72, 0x69, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x71, 0x66, 0x2e, 0x47,
  2576  	0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x6e, 0x42,
  2577  	0x24, 0xca, 0xb5, 0x03, 0x20, 0xa2, 0x01, 0x1d, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x66, 0x6f,
  2578  	0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x3a, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61,
  2579  	0x72, 0x6b, 0x49, 0x44, 0x22, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x22,
  2580  	0x42, 0x0a, 0x0a, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x34, 0x0a,
  2581  	0x0a, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
  2582  	0x0b, 0x32, 0x14, 0x2e, 0x71, 0x66, 0x2e, 0x47, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x65,
  2583  	0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x52, 0x0a, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61,
  2584  	0x72, 0x6b, 0x73, 0x22, 0x91, 0x02, 0x0a, 0x10, 0x47, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43,
  2585  	0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01,
  2586  	0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x42, 0x65, 0x6e, 0x63,
  2587  	0x68, 0x6d, 0x61, 0x72, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x42,
  2588  	0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x6f,
  2589  	0x75, 0x72, 0x73, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x43, 0x6f,
  2590  	0x75, 0x72, 0x73, 0x65, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73,
  2591  	0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x20,
  2592  	0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20,
  2593  	0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
  2594  	0x12, 0x30, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32,
  2595  	0x1a, 0x2e, 0x71, 0x66, 0x2e, 0x47, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x69, 0x74,
  2596  	0x65, 0x72, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x72, 0x61, 0x64, 0x65, 0x52, 0x05, 0x67, 0x72, 0x61,
  2597  	0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20,
  2598  	0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x05,
  2599  	0x47, 0x72, 0x61, 0x64, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12,
  2600  	0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50,
  2601  	0x41, 0x53, 0x53, 0x45, 0x44, 0x10, 0x02, 0x22, 0xf1, 0x02, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x69,
  2602  	0x65, 0x77, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02,
  2603  	0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e,
  2604  	0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73,
  2605  	0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77,
  2606  	0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x52, 0x65, 0x76, 0x69,
  2607  	0x65, 0x77, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x65, 0x65, 0x64, 0x62, 0x61,
  2608  	0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x65, 0x65, 0x64, 0x62, 0x61,
  2609  	0x63, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28,
  2610  	0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72,
  2611  	0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x65,
  2612  	0x0a, 0x11, 0x67, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61,
  2613  	0x72, 0x6b, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x71, 0x66, 0x2e, 0x47,
  2614  	0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x42,
  2615  	0x21, 0xca, 0xb5, 0x03, 0x1d, 0xa2, 0x01, 0x1a, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x66, 0x6f,
  2616  	0x72, 0x65, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x3a, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x49,
  2617  	0x44, 0x22, 0x52, 0x11, 0x67, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x65, 0x6e, 0x63, 0x68,
  2618  	0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x64, 0x0a, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x18,
  2619  	0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
  2620  	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
  2621  	0x70, 0x42, 0x30, 0xca, 0xb5, 0x03, 0x2c, 0xa2, 0x01, 0x29, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22,
  2622  	0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x3a, 0x74, 0x69, 0x6d, 0x65, 0x73,
  2623  	0x74, 0x61, 0x6d, 0x70, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x64, 0x61, 0x74, 0x65, 0x74, 0x69,
  2624  	0x6d, 0x65, 0x22, 0x52, 0x06, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x42, 0x26, 0x5a, 0x21, 0x67,
  2625  	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x66,
  2626  	0x65, 0x65, 0x64, 0x2f, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x66, 0x65, 0x65, 0x64, 0x2f, 0x71, 0x66,
  2627  	0xba, 0x02, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
  2628  }
  2629  
  2630  var (
  2631  	file_qf_types_proto_rawDescOnce sync.Once
  2632  	file_qf_types_proto_rawDescData = file_qf_types_proto_rawDesc
  2633  )
  2634  
  2635  func file_qf_types_proto_rawDescGZIP() []byte {
  2636  	file_qf_types_proto_rawDescOnce.Do(func() {
  2637  		file_qf_types_proto_rawDescData = protoimpl.X.CompressGZIP(file_qf_types_proto_rawDescData)
  2638  	})
  2639  	return file_qf_types_proto_rawDescData
  2640  }
  2641  
  2642  var file_qf_types_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
  2643  var file_qf_types_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
  2644  var file_qf_types_proto_goTypes = []interface{}{
  2645  	(Group_GroupStatus)(0),        // 0: qf.Group.GroupStatus
  2646  	(Repository_Type)(0),          // 1: qf.Repository.Type
  2647  	(Enrollment_UserStatus)(0),    // 2: qf.Enrollment.UserStatus
  2648  	(Enrollment_DisplayState)(0),  // 3: qf.Enrollment.DisplayState
  2649  	(PullRequest_Stage)(0),        // 4: qf.PullRequest.Stage
  2650  	(Submission_Status)(0),        // 5: qf.Submission.Status
  2651  	(GradingCriterion_Grade)(0),   // 6: qf.GradingCriterion.Grade
  2652  	(*User)(nil),                  // 7: qf.User
  2653  	(*Users)(nil),                 // 8: qf.Users
  2654  	(*Group)(nil),                 // 9: qf.Group
  2655  	(*Groups)(nil),                // 10: qf.Groups
  2656  	(*Course)(nil),                // 11: qf.Course
  2657  	(*Courses)(nil),               // 12: qf.Courses
  2658  	(*Repository)(nil),            // 13: qf.Repository
  2659  	(*Enrollment)(nil),            // 14: qf.Enrollment
  2660  	(*UsedSlipDays)(nil),          // 15: qf.UsedSlipDays
  2661  	(*Enrollments)(nil),           // 16: qf.Enrollments
  2662  	(*Assignment)(nil),            // 17: qf.Assignment
  2663  	(*Task)(nil),                  // 18: qf.Task
  2664  	(*Issue)(nil),                 // 19: qf.Issue
  2665  	(*PullRequest)(nil),           // 20: qf.PullRequest
  2666  	(*Assignments)(nil),           // 21: qf.Assignments
  2667  	(*Submission)(nil),            // 22: qf.Submission
  2668  	(*Submissions)(nil),           // 23: qf.Submissions
  2669  	(*GradingBenchmark)(nil),      // 24: qf.GradingBenchmark
  2670  	(*Benchmarks)(nil),            // 25: qf.Benchmarks
  2671  	(*GradingCriterion)(nil),      // 26: qf.GradingCriterion
  2672  	(*Review)(nil),                // 27: qf.Review
  2673  	(*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp
  2674  	(*score.BuildInfo)(nil),       // 29: score.BuildInfo
  2675  	(*score.Score)(nil),           // 30: score.Score
  2676  }
  2677  var file_qf_types_proto_depIdxs = []int32{
  2678  	14, // 0: qf.User.Enrollments:type_name -> qf.Enrollment
  2679  	7,  // 1: qf.Users.users:type_name -> qf.User
  2680  	0,  // 2: qf.Group.status:type_name -> qf.Group.GroupStatus
  2681  	7,  // 3: qf.Group.users:type_name -> qf.User
  2682  	14, // 4: qf.Group.enrollments:type_name -> qf.Enrollment
  2683  	9,  // 5: qf.Groups.groups:type_name -> qf.Group
  2684  	2,  // 6: qf.Course.enrolled:type_name -> qf.Enrollment.UserStatus
  2685  	14, // 7: qf.Course.enrollments:type_name -> qf.Enrollment
  2686  	17, // 8: qf.Course.assignments:type_name -> qf.Assignment
  2687  	9,  // 9: qf.Course.groups:type_name -> qf.Group
  2688  	11, // 10: qf.Courses.courses:type_name -> qf.Course
  2689  	1,  // 11: qf.Repository.repoType:type_name -> qf.Repository.Type
  2690  	19, // 12: qf.Repository.issues:type_name -> qf.Issue
  2691  	7,  // 13: qf.Enrollment.user:type_name -> qf.User
  2692  	11, // 14: qf.Enrollment.course:type_name -> qf.Course
  2693  	9,  // 15: qf.Enrollment.group:type_name -> qf.Group
  2694  	2,  // 16: qf.Enrollment.status:type_name -> qf.Enrollment.UserStatus
  2695  	3,  // 17: qf.Enrollment.state:type_name -> qf.Enrollment.DisplayState
  2696  	28, // 18: qf.Enrollment.lastActivityDate:type_name -> google.protobuf.Timestamp
  2697  	15, // 19: qf.Enrollment.usedSlipDays:type_name -> qf.UsedSlipDays
  2698  	14, // 20: qf.Enrollments.enrollments:type_name -> qf.Enrollment
  2699  	28, // 21: qf.Assignment.deadline:type_name -> google.protobuf.Timestamp
  2700  	22, // 22: qf.Assignment.submissions:type_name -> qf.Submission
  2701  	18, // 23: qf.Assignment.tasks:type_name -> qf.Task
  2702  	24, // 24: qf.Assignment.gradingBenchmarks:type_name -> qf.GradingBenchmark
  2703  	19, // 25: qf.Task.issues:type_name -> qf.Issue
  2704  	4,  // 26: qf.PullRequest.stage:type_name -> qf.PullRequest.Stage
  2705  	17, // 27: qf.Assignments.assignments:type_name -> qf.Assignment
  2706  	5,  // 28: qf.Submission.status:type_name -> qf.Submission.Status
  2707  	28, // 29: qf.Submission.approvedDate:type_name -> google.protobuf.Timestamp
  2708  	27, // 30: qf.Submission.reviews:type_name -> qf.Review
  2709  	29, // 31: qf.Submission.BuildInfo:type_name -> score.BuildInfo
  2710  	30, // 32: qf.Submission.Scores:type_name -> score.Score
  2711  	22, // 33: qf.Submissions.submissions:type_name -> qf.Submission
  2712  	26, // 34: qf.GradingBenchmark.criteria:type_name -> qf.GradingCriterion
  2713  	24, // 35: qf.Benchmarks.benchmarks:type_name -> qf.GradingBenchmark
  2714  	6,  // 36: qf.GradingCriterion.grade:type_name -> qf.GradingCriterion.Grade
  2715  	24, // 37: qf.Review.gradingBenchmarks:type_name -> qf.GradingBenchmark
  2716  	28, // 38: qf.Review.edited:type_name -> google.protobuf.Timestamp
  2717  	39, // [39:39] is the sub-list for method output_type
  2718  	39, // [39:39] is the sub-list for method input_type
  2719  	39, // [39:39] is the sub-list for extension type_name
  2720  	39, // [39:39] is the sub-list for extension extendee
  2721  	0,  // [0:39] is the sub-list for field type_name
  2722  }
  2723  
  2724  func init() { file_qf_types_proto_init() }
  2725  func file_qf_types_proto_init() {
  2726  	if File_qf_types_proto != nil {
  2727  		return
  2728  	}
  2729  	if !protoimpl.UnsafeEnabled {
  2730  		file_qf_types_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
  2731  			switch v := v.(*User); i {
  2732  			case 0:
  2733  				return &v.state
  2734  			case 1:
  2735  				return &v.sizeCache
  2736  			case 2:
  2737  				return &v.unknownFields
  2738  			default:
  2739  				return nil
  2740  			}
  2741  		}
  2742  		file_qf_types_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
  2743  			switch v := v.(*Users); i {
  2744  			case 0:
  2745  				return &v.state
  2746  			case 1:
  2747  				return &v.sizeCache
  2748  			case 2:
  2749  				return &v.unknownFields
  2750  			default:
  2751  				return nil
  2752  			}
  2753  		}
  2754  		file_qf_types_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
  2755  			switch v := v.(*Group); i {
  2756  			case 0:
  2757  				return &v.state
  2758  			case 1:
  2759  				return &v.sizeCache
  2760  			case 2:
  2761  				return &v.unknownFields
  2762  			default:
  2763  				return nil
  2764  			}
  2765  		}
  2766  		file_qf_types_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
  2767  			switch v := v.(*Groups); i {
  2768  			case 0:
  2769  				return &v.state
  2770  			case 1:
  2771  				return &v.sizeCache
  2772  			case 2:
  2773  				return &v.unknownFields
  2774  			default:
  2775  				return nil
  2776  			}
  2777  		}
  2778  		file_qf_types_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
  2779  			switch v := v.(*Course); i {
  2780  			case 0:
  2781  				return &v.state
  2782  			case 1:
  2783  				return &v.sizeCache
  2784  			case 2:
  2785  				return &v.unknownFields
  2786  			default:
  2787  				return nil
  2788  			}
  2789  		}
  2790  		file_qf_types_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
  2791  			switch v := v.(*Courses); i {
  2792  			case 0:
  2793  				return &v.state
  2794  			case 1:
  2795  				return &v.sizeCache
  2796  			case 2:
  2797  				return &v.unknownFields
  2798  			default:
  2799  				return nil
  2800  			}
  2801  		}
  2802  		file_qf_types_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
  2803  			switch v := v.(*Repository); i {
  2804  			case 0:
  2805  				return &v.state
  2806  			case 1:
  2807  				return &v.sizeCache
  2808  			case 2:
  2809  				return &v.unknownFields
  2810  			default:
  2811  				return nil
  2812  			}
  2813  		}
  2814  		file_qf_types_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
  2815  			switch v := v.(*Enrollment); i {
  2816  			case 0:
  2817  				return &v.state
  2818  			case 1:
  2819  				return &v.sizeCache
  2820  			case 2:
  2821  				return &v.unknownFields
  2822  			default:
  2823  				return nil
  2824  			}
  2825  		}
  2826  		file_qf_types_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
  2827  			switch v := v.(*UsedSlipDays); i {
  2828  			case 0:
  2829  				return &v.state
  2830  			case 1:
  2831  				return &v.sizeCache
  2832  			case 2:
  2833  				return &v.unknownFields
  2834  			default:
  2835  				return nil
  2836  			}
  2837  		}
  2838  		file_qf_types_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
  2839  			switch v := v.(*Enrollments); i {
  2840  			case 0:
  2841  				return &v.state
  2842  			case 1:
  2843  				return &v.sizeCache
  2844  			case 2:
  2845  				return &v.unknownFields
  2846  			default:
  2847  				return nil
  2848  			}
  2849  		}
  2850  		file_qf_types_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
  2851  			switch v := v.(*Assignment); i {
  2852  			case 0:
  2853  				return &v.state
  2854  			case 1:
  2855  				return &v.sizeCache
  2856  			case 2:
  2857  				return &v.unknownFields
  2858  			default:
  2859  				return nil
  2860  			}
  2861  		}
  2862  		file_qf_types_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
  2863  			switch v := v.(*Task); i {
  2864  			case 0:
  2865  				return &v.state
  2866  			case 1:
  2867  				return &v.sizeCache
  2868  			case 2:
  2869  				return &v.unknownFields
  2870  			default:
  2871  				return nil
  2872  			}
  2873  		}
  2874  		file_qf_types_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
  2875  			switch v := v.(*Issue); i {
  2876  			case 0:
  2877  				return &v.state
  2878  			case 1:
  2879  				return &v.sizeCache
  2880  			case 2:
  2881  				return &v.unknownFields
  2882  			default:
  2883  				return nil
  2884  			}
  2885  		}
  2886  		file_qf_types_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
  2887  			switch v := v.(*PullRequest); i {
  2888  			case 0:
  2889  				return &v.state
  2890  			case 1:
  2891  				return &v.sizeCache
  2892  			case 2:
  2893  				return &v.unknownFields
  2894  			default:
  2895  				return nil
  2896  			}
  2897  		}
  2898  		file_qf_types_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
  2899  			switch v := v.(*Assignments); i {
  2900  			case 0:
  2901  				return &v.state
  2902  			case 1:
  2903  				return &v.sizeCache
  2904  			case 2:
  2905  				return &v.unknownFields
  2906  			default:
  2907  				return nil
  2908  			}
  2909  		}
  2910  		file_qf_types_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
  2911  			switch v := v.(*Submission); i {
  2912  			case 0:
  2913  				return &v.state
  2914  			case 1:
  2915  				return &v.sizeCache
  2916  			case 2:
  2917  				return &v.unknownFields
  2918  			default:
  2919  				return nil
  2920  			}
  2921  		}
  2922  		file_qf_types_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
  2923  			switch v := v.(*Submissions); i {
  2924  			case 0:
  2925  				return &v.state
  2926  			case 1:
  2927  				return &v.sizeCache
  2928  			case 2:
  2929  				return &v.unknownFields
  2930  			default:
  2931  				return nil
  2932  			}
  2933  		}
  2934  		file_qf_types_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
  2935  			switch v := v.(*GradingBenchmark); i {
  2936  			case 0:
  2937  				return &v.state
  2938  			case 1:
  2939  				return &v.sizeCache
  2940  			case 2:
  2941  				return &v.unknownFields
  2942  			default:
  2943  				return nil
  2944  			}
  2945  		}
  2946  		file_qf_types_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
  2947  			switch v := v.(*Benchmarks); i {
  2948  			case 0:
  2949  				return &v.state
  2950  			case 1:
  2951  				return &v.sizeCache
  2952  			case 2:
  2953  				return &v.unknownFields
  2954  			default:
  2955  				return nil
  2956  			}
  2957  		}
  2958  		file_qf_types_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
  2959  			switch v := v.(*GradingCriterion); i {
  2960  			case 0:
  2961  				return &v.state
  2962  			case 1:
  2963  				return &v.sizeCache
  2964  			case 2:
  2965  				return &v.unknownFields
  2966  			default:
  2967  				return nil
  2968  			}
  2969  		}
  2970  		file_qf_types_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
  2971  			switch v := v.(*Review); i {
  2972  			case 0:
  2973  				return &v.state
  2974  			case 1:
  2975  				return &v.sizeCache
  2976  			case 2:
  2977  				return &v.unknownFields
  2978  			default:
  2979  				return nil
  2980  			}
  2981  		}
  2982  	}
  2983  	type x struct{}
  2984  	out := protoimpl.TypeBuilder{
  2985  		File: protoimpl.DescBuilder{
  2986  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
  2987  			RawDescriptor: file_qf_types_proto_rawDesc,
  2988  			NumEnums:      7,
  2989  			NumMessages:   21,
  2990  			NumExtensions: 0,
  2991  			NumServices:   0,
  2992  		},
  2993  		GoTypes:           file_qf_types_proto_goTypes,
  2994  		DependencyIndexes: file_qf_types_proto_depIdxs,
  2995  		EnumInfos:         file_qf_types_proto_enumTypes,
  2996  		MessageInfos:      file_qf_types_proto_msgTypes,
  2997  	}.Build()
  2998  	File_qf_types_proto = out.File
  2999  	file_qf_types_proto_rawDesc = nil
  3000  	file_qf_types_proto_goTypes = nil
  3001  	file_qf_types_proto_depIdxs = nil
  3002  }