// Generated by the protocol buffer compiler.  DO NOT EDIT!
// clang-format off
// source: keyapis/access_management/v1/keyapis_access_management_template_v1.proto

// This CPP symbol can be defined to use imports that match up to the framework
// imports needed when using CocoaPods.
#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS)
 #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0
#endif

#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
 #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h>
#else
 #import "GPBProtocolBuffers_RuntimeSupport.h"
#endif

#if GOOGLE_PROTOBUF_OBJC_VERSION < 30007
#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.
#endif
#if 30007 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION
#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources.
#endif

#import <stdatomic.h>

#import "keyapis/access_management/v1/KeyapisAccessManagementTemplateV1.pbobjc.h"
#import "google/api/Annotations.pbobjc.h"
#import "google/api/FieldBehavior.pbobjc.h"
#import "keyapis/access_management/v1/KeyapisAccessManagementGroupV1.pbobjc.h"
// @@protoc_insertion_point(imports)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#pragma clang diagnostic ignored "-Wdirect-ivar-access"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"

#pragma mark - Objective-C Class declarations
// Forward declarations of Objective-C classes that we can use as
// static values in struct initializers.
// We don't use [Foo class] because it is not a static value.
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1Claim);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GroupTemplate);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachResponse);
GPBObjCClassDeclaration(KEYAPISACCESSMANAGEMENTV1ValidationError);

#pragma mark - KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root

@implementation KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root

+ (GPBExtensionRegistry*)extensionRegistry {
  // This is called by +initialize so there is no need to worry
  // about thread safety and initialization of registry.
  static GPBExtensionRegistry* registry = nil;
  if (!registry) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    registry = [[GPBExtensionRegistry alloc] init];
    // Merge in the imports (direct or indirect) that defined extensions.
    [registry addExtensions:[GAPIAnnotationsRoot extensionRegistry]];
    [registry addExtensions:[GAPIFieldBehaviorRoot extensionRegistry]];
  }
  return registry;
}

@end

static GPBFileDescription KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription = {
  .package = "keyapis.access_management.v1",
  .prefix = "KEYAPISACCESSMANAGEMENTV1",
  .syntax = GPBFileSyntaxProto3
};

#pragma mark - Enum KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType

GPBEnumDescriptor *KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "OrderByTypeUnknown\000GroupId\000GroupTemplate"
        "Id\000";
    static const int32_t values[] = {
        KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_OrderByTypeUnknown,
        KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_GroupId,
        KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_GroupTemplateId,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_OrderByTypeUnknown:
    case KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_GroupId:
    case KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_GroupTemplateId:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType

GPBEnumDescriptor *KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "DirectionTypeUnknown\000Desc\000Asc\000";
    static const int32_t values[] = {
        KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_DirectionTypeUnknown,
        KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_Desc,
        KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_Asc,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_DirectionTypeUnknown:
    case KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_Desc:
    case KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_Asc:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType

GPBEnumDescriptor *KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "OrderByTypeUnknown\000Id\000Title\000";
    static const int32_t values[] = {
        KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_OrderByTypeUnknown,
        KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_Id,
        KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_Title,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_OrderByTypeUnknown:
    case KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_Id:
    case KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_Title:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType

GPBEnumDescriptor *KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "DirectionTypeUnknown\000Desc\000Asc\000";
    static const int32_t values[] = {
        KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_DirectionTypeUnknown,
        KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_Desc,
        KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_Asc,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_DirectionTypeUnknown:
    case KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_Desc:
    case KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_Asc:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - KEYAPISACCESSMANAGEMENTV1GroupTemplate

@implementation KEYAPISACCESSMANAGEMENTV1GroupTemplate

@dynamic id_p;
@dynamic title;
@dynamic groupTitleSuffix;
@dynamic description_p;
@dynamic claimsArray, claimsArray_Count;
@dynamic requirementsArray, requirementsArray_Count;
@dynamic tagsArray, tagsArray_Count;

typedef struct KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_ {
  uint32_t _has_storage_[1];
  NSString *id_p;
  NSString *title;
  NSString *groupTitleSuffix;
  NSString *description_p;
  NSMutableArray *claimsArray;
  NSMutableArray *requirementsArray;
  NSMutableArray *tagsArray;
} KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplate_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "title",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplate_FieldNumber_Title,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_, title),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "groupTitleSuffix",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplate_FieldNumber_GroupTitleSuffix,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_, groupTitleSuffix),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "description_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplate_FieldNumber_Description_p,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_, description_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "claimsArray",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1Claim),
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplate_FieldNumber_ClaimsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_, claimsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "requirementsArray",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1Claim),
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplate_FieldNumber_RequirementsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_, requirementsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "tagsArray",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplate_FieldNumber_TagsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_, tagsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplate)
                                   messageName:@"GroupTemplate"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GroupTemplate__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest

@dynamic paginationOneOfCase;
@dynamic hasFilter, filter;
@dynamic paging;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter *filter;
  KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging *paging;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "filter",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest_FieldNumber_Filter,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest__storage_, filter),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "paging",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest_FieldNumber_Paging,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest__storage_, paging),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest)
                                   messageName:@"GetGroupTemplateGroupListRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "pagination",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest_ClearPaginationOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListRequest descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest

@dynamic hasFilter, filter;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter *filter;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "filter",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest_FieldNumber_Filter,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest__storage_, filter),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest)
                                   messageName:@"GetGroupTemplateGroupCountRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse

@dynamic typeOneOfCase;
@dynamic data_p;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse__storage_ {
  uint32_t _has_storage_[2];
  int32_t data_p;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse)
                                   messageName:@"GetGroupTemplateGroupCountResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse_ClearTypeOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupCountResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging

@implementation KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging

@dynamic orderByType;
@dynamic directionType;
@dynamic limit;
@dynamic offset;

typedef struct KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType orderByType;
  KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType directionType;
  int32_t limit;
  int32_t offset;
} KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "orderByType",
        .dataTypeSpecific.enumDescFunc = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_EnumDescriptor,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_FieldNumber_OrderByType,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging__storage_, orderByType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "directionType",
        .dataTypeSpecific.enumDescFunc = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_EnumDescriptor,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_FieldNumber_DirectionType,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging__storage_, directionType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "limit",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_FieldNumber_Limit,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging__storage_, limit),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "offset",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_FieldNumber_Offset,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging__storage_, offset),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging)
                                   messageName:@"GroupTemplateGroupPaging"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_RawValue(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_FieldNumber_OrderByType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_OrderByType_RawValue(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_FieldNumber_OrderByType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_RawValue(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_FieldNumber_DirectionType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_DirectionType_RawValue(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupPaging_FieldNumber_DirectionType];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse

@dynamic typeOneOfCase;
@dynamic data_p;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup *data_p;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse)
                                   messageName:@"GetGroupTemplateGroupListResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse_ClearTypeOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateGroupListResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest

@implementation KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest

@dynamic hasGroupTemplateGroup, groupTemplateGroup;

typedef struct KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup *groupTemplateGroup;
} KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "groupTemplateGroup",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup),
        .number = KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest_FieldNumber_GroupTemplateGroup,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest__storage_, groupTemplateGroup),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest)
                                   messageName:@"PutGroupTemplateGroupAttachRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachResponse

@implementation KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachResponse


typedef struct KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachResponse__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachResponse)
                                   messageName:@"PutGroupTemplateGroupAttachResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupAttachResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest

@implementation KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest

@dynamic hasGroupTemplateGroup, groupTemplateGroup;

typedef struct KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup *groupTemplateGroup;
} KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "groupTemplateGroup",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup),
        .number = KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest_FieldNumber_GroupTemplateGroup,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest__storage_, groupTemplateGroup),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest)
                                   messageName:@"PutGroupTemplateGroupDetachRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup

@implementation KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup

@dynamic groupId;
@dynamic groupTemplateId;

typedef struct KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup__storage_ {
  uint32_t _has_storage_[1];
  NSString *groupId;
  NSString *groupTemplateId;
} KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "groupId",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup_FieldNumber_GroupId,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup__storage_, groupId),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "groupTemplateId",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup_FieldNumber_GroupTemplateId,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup__storage_, groupTemplateId),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup)
                                   messageName:@"GroupTemplateGroup"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroup__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter

@implementation KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter

@dynamic groupIdsArray, groupIdsArray_Count;
@dynamic groupTemplateIdsArray, groupTemplateIdsArray_Count;

typedef struct KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter__storage_ {
  uint32_t _has_storage_[1];
  NSMutableArray *groupIdsArray;
  NSMutableArray *groupTemplateIdsArray;
} KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "groupIdsArray",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter_FieldNumber_GroupIdsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter__storage_, groupIdsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeString,
      },
      {
        .name = "groupTemplateIdsArray",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter_FieldNumber_GroupTemplateIdsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter__storage_, groupTemplateIdsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter)
                                   messageName:@"GroupTemplateGroupFilter"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GroupTemplateGroupFilter__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachResponse

@implementation KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachResponse


typedef struct KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachResponse__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachResponse)
                                   messageName:@"PutGroupTemplateGroupDetachResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1PutGroupTemplateGroupDetachResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest

@dynamic id_p;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest__storage_ {
  uint32_t _has_storage_[1];
  NSString *id_p;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest)
                                   messageName:@"GetGroupTemplateRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1GroupTemplate *data_p;
  KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error *error;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplate),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse)
                                   messageName:@"GetGroupTemplateResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_ClearTypeOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1ValidationError *validation;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1ValidationError),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error_ClearReasonOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest

@dynamic paginationOneOfCase;
@dynamic hasFilter, filter;
@dynamic paging;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter *filter;
  KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging *paging;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "filter",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest_FieldNumber_Filter,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest__storage_, filter),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "paging",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest_FieldNumber_Paging,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest__storage_, paging),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest)
                                   messageName:@"GetGroupTemplateListRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "pagination",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest_ClearPaginationOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListRequest descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1GroupTemplate *data_p;
  KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error *error;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplate),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse)
                                   messageName:@"GetGroupTemplateListResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_ClearTypeOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1ValidationError *validation;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1ValidationError),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error_ClearReasonOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateListResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest

@dynamic hasFilter, filter;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter *filter;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "filter",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest_FieldNumber_Filter,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest__storage_, filter),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest)
                                   messageName:@"GetGroupTemplateCountRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse__storage_ {
  uint32_t _has_storage_[2];
  int32_t data_p;
  KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error *error;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse)
                                   messageName:@"GetGroupTemplateCountResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_ClearTypeOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error

@implementation KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1ValidationError *validation;
} KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1ValidationError),
        .number = KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error_ClearReasonOneOfCase(KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GetGroupTemplateCountResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter

@implementation KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter

@dynamic text;
@dynamic tagsArray, tagsArray_Count;

typedef struct KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter__storage_ {
  uint32_t _has_storage_[1];
  NSString *text;
  NSMutableArray *tagsArray;
} KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "text",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter_FieldNumber_Text,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter__storage_, text),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "tagsArray",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter_FieldNumber_TagsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter__storage_, tagsArray),
        .flags = GPBFieldRepeated,
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter)
                                   messageName:@"GroupTemplateFilter"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GroupTemplateFilter__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging

@implementation KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging

@dynamic orderByType;
@dynamic directionType;
@dynamic limit;
@dynamic offset;

typedef struct KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType orderByType;
  KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType directionType;
  int32_t limit;
  int32_t offset;
} KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "orderByType",
        .dataTypeSpecific.enumDescFunc = KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_EnumDescriptor,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_FieldNumber_OrderByType,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging__storage_, orderByType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "directionType",
        .dataTypeSpecific.enumDescFunc = KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_EnumDescriptor,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_FieldNumber_DirectionType,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging__storage_, directionType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "limit",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_FieldNumber_Limit,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging__storage_, limit),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "offset",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_FieldNumber_Offset,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging__storage_, offset),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging)
                                   messageName:@"GroupTemplatePaging"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_RawValue(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_FieldNumber_OrderByType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_OrderByType_RawValue(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_FieldNumber_OrderByType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_RawValue(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_FieldNumber_DirectionType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_DirectionType_RawValue(KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISACCESSMANAGEMENTV1GroupTemplatePaging_FieldNumber_DirectionType];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest

@implementation KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest

@dynamic hasData_p, data_p;

typedef struct KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISACCESSMANAGEMENTV1GroupTemplate *data_p;
} KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplate),
        .number = KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest_FieldNumber_Data_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest)
                                   messageName:@"PostGroupTemplateRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse

@implementation KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1GroupTemplate *data_p;
  KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error *error;
} KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1GroupTemplate),
        .number = KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error),
        .number = KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse)
                                   messageName:@"PostGroupTemplateResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_ClearTypeOneOfCase(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error

@implementation KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISACCESSMANAGEMENTV1ValidationError *validation;
} KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISACCESSMANAGEMENTV1ValidationError),
        .number = KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error_ClearReasonOneOfCase(KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISACCESSMANAGEMENTV1PostGroupTemplateResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest

@implementation KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest

@dynamic id_p;

typedef struct KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest__storage_ {
  uint32_t _has_storage_[1];
  NSString *id_p;
} KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest)
                                   messageName:@"DeleteGroupTemplateRequest"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateResponse

@implementation KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateResponse


typedef struct KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateResponse__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateResponse)
                                   messageName:@"DeleteGroupTemplateResponse"
                               fileDescription:&KEYAPISACCESSMANAGEMENTV1KeyapisAccessManagementTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISACCESSMANAGEMENTV1DeleteGroupTemplateResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end


#pragma clang diagnostic pop

// @@protoc_insertion_point(global_scope)

// clang-format on
