// <auto-generated>
//     Generated by the protocol buffer compiler.  DO NOT EDIT!
//     source: api/device_profile.proto
// </auto-generated>
#pragma warning disable 1591, 0612, 3021, 8981
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Chirpstack.Api {

  /// <summary>Holder for reflection information generated from api/device_profile.proto</summary>
  public static partial class DeviceProfileReflection {

    #region Descriptor
    /// <summary>File descriptor for api/device_profile.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static DeviceProfileReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "ChhhcGkvZGV2aWNlX3Byb2ZpbGUucHJvdG8SA2FwaRocZ29vZ2xlL2FwaS9h",
            "bm5vdGF0aW9ucy5wcm90bxofZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5w",
            "cm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvGhNjb21tb24vY29t",
            "bW9uLnByb3RvIukHCg1EZXZpY2VQcm9maWxlEgoKAmlkGAEgASgJEhEKCXRl",
            "bmFudF9pZBgCIAEoCRIMCgRuYW1lGAMgASgJEhMKC2Rlc2NyaXB0aW9uGBog",
            "ASgJEh4KBnJlZ2lvbhgEIAEoDjIOLmNvbW1vbi5SZWdpb24SJwoLbWFjX3Zl",
            "cnNpb24YBSABKA4yEi5jb21tb24uTWFjVmVyc2lvbhI2ChNyZWdfcGFyYW1z",
            "X3JldmlzaW9uGAYgASgOMhkuY29tbW9uLlJlZ1BhcmFtc1JldmlzaW9uEhgK",
            "EGFkcl9hbGdvcml0aG1faWQYByABKAkSMAoVcGF5bG9hZF9jb2RlY19ydW50",
            "aW1lGAggASgOMhEuYXBpLkNvZGVjUnVudGltZRIcChRwYXlsb2FkX2NvZGVj",
            "X3NjcmlwdBgJIAEoCRIfChdmbHVzaF9xdWV1ZV9vbl9hY3RpdmF0ZRgKIAEo",
            "CBIXCg91cGxpbmtfaW50ZXJ2YWwYCyABKA0SIgoaZGV2aWNlX3N0YXR1c19y",
            "ZXFfaW50ZXJ2YWwYDCABKA0SFQoNc3VwcG9ydHNfb3RhYRgNIAEoCBIYChBz",
            "dXBwb3J0c19jbGFzc19iGA4gASgIEhgKEHN1cHBvcnRzX2NsYXNzX2MYDyAB",
            "KAgSFwoPY2xhc3NfYl90aW1lb3V0GBAgASgNEh4KFmNsYXNzX2JfcGluZ19z",
            "bG90X25iX2sYESABKA0SHAoUY2xhc3NfYl9waW5nX3Nsb3RfZHIYEiABKA0S",
            "HgoWY2xhc3NfYl9waW5nX3Nsb3RfZnJlcRgTIAEoDRIXCg9jbGFzc19jX3Rp",
            "bWVvdXQYFCABKA0SFQoNYWJwX3J4MV9kZWxheRgVIAEoDRIZChFhYnBfcngx",
            "X2RyX29mZnNldBgWIAEoDRISCgphYnBfcngyX2RyGBcgASgNEhQKDGFicF9y",
            "eDJfZnJlcRgYIAEoDRIqCgR0YWdzGBkgAygLMhwuYXBpLkRldmljZVByb2Zp",
            "bGUuVGFnc0VudHJ5EjoKDG1lYXN1cmVtZW50cxgbIAMoCzIkLmFwaS5EZXZp",
            "Y2VQcm9maWxlLk1lYXN1cmVtZW50c0VudHJ5EiAKGGF1dG9fZGV0ZWN0X21l",
            "YXN1cmVtZW50cxgcIAEoCBIYChByZWdpb25fY29uZmlnX2lkGB0gASgJGisK",
            "CVRhZ3NFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGkUK",
            "EU1lYXN1cmVtZW50c0VudHJ5EgsKA2tleRgBIAEoCRIfCgV2YWx1ZRgCIAEo",
            "CzIQLmFwaS5NZWFzdXJlbWVudDoCOAEiPwoLTWVhc3VyZW1lbnQSDAoEbmFt",
            "ZRgCIAEoCRIiCgRraW5kGAMgASgOMhQuYXBpLk1lYXN1cmVtZW50S2luZCLd",
            "AgoVRGV2aWNlUHJvZmlsZUxpc3RJdGVtEgoKAmlkGAEgASgJEi4KCmNyZWF0",
            "ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVw",
            "ZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgwK",
            "BG5hbWUYBCABKAkSHgoGcmVnaW9uGAUgASgOMg4uY29tbW9uLlJlZ2lvbhIn",
            "CgttYWNfdmVyc2lvbhgGIAEoDjISLmNvbW1vbi5NYWNWZXJzaW9uEjYKE3Jl",
            "Z19wYXJhbXNfcmV2aXNpb24YByABKA4yGS5jb21tb24uUmVnUGFyYW1zUmV2",
            "aXNpb24SFQoNc3VwcG9ydHNfb3RhYRgIIAEoCBIYChBzdXBwb3J0c19jbGFz",
            "c19iGAkgASgIEhgKEHN1cHBvcnRzX2NsYXNzX2MYCiABKAgiSAoaQ3JlYXRl",
            "RGV2aWNlUHJvZmlsZVJlcXVlc3QSKgoOZGV2aWNlX3Byb2ZpbGUYASABKAsy",
            "Ei5hcGkuRGV2aWNlUHJvZmlsZSIpChtDcmVhdGVEZXZpY2VQcm9maWxlUmVz",
            "cG9uc2USCgoCaWQYASABKAkiJQoXR2V0RGV2aWNlUHJvZmlsZVJlcXVlc3QS",
            "CgoCaWQYASABKAkipgEKGEdldERldmljZVByb2ZpbGVSZXNwb25zZRIqCg5k",
            "ZXZpY2VfcHJvZmlsZRgBIAEoCzISLmFwaS5EZXZpY2VQcm9maWxlEi4KCmNy",
            "ZWF0ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4K",
            "CnVwZGF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1w",
            "IkgKGlVwZGF0ZURldmljZVByb2ZpbGVSZXF1ZXN0EioKDmRldmljZV9wcm9m",
            "aWxlGAEgASgLMhIuYXBpLkRldmljZVByb2ZpbGUiKAoaRGVsZXRlRGV2aWNl",
            "UHJvZmlsZVJlcXVlc3QSCgoCaWQYASABKAkiXQoZTGlzdERldmljZVByb2Zp",
            "bGVzUmVxdWVzdBINCgVsaW1pdBgBIAEoDRIOCgZvZmZzZXQYAiABKA0SDgoG",
            "c2VhcmNoGAMgASgJEhEKCXRlbmFudF9pZBgEIAEoCSJdChpMaXN0RGV2aWNl",
            "UHJvZmlsZXNSZXNwb25zZRITCgt0b3RhbF9jb3VudBgBIAEoDRIqCgZyZXN1",
            "bHQYAiADKAsyGi5hcGkuRGV2aWNlUHJvZmlsZUxpc3RJdGVtImgKJkxpc3RE",
            "ZXZpY2VQcm9maWxlQWRyQWxnb3JpdGhtc1Jlc3BvbnNlEhMKC3RvdGFsX2Nv",
            "dW50GAEgASgNEikKBnJlc3VsdBgCIAMoCzIZLmFwaS5BZHJBbGdvcml0aG1M",
            "aXN0SXRlbSIwChRBZHJBbGdvcml0aG1MaXN0SXRlbRIKCgJpZBgBIAEoCRIM",
            "CgRuYW1lGAIgASgJKjEKDENvZGVjUnVudGltZRIICgROT05FEAASDwoLQ0FZ",
            "RU5ORV9MUFAQARIGCgJKUxACKlAKD01lYXN1cmVtZW50S2luZBILCgdVTktO",
            "T1dOEAASCwoHQ09VTlRFUhABEgwKCEFCU09MVVRFEAISCQoFR0FVR0UQAxIK",
            "CgZTVFJJTkcQBDK4BQoURGV2aWNlUHJvZmlsZVNlcnZpY2USbAoGQ3JlYXRl",
            "Eh8uYXBpLkNyZWF0ZURldmljZVByb2ZpbGVSZXF1ZXN0GiAuYXBpLkNyZWF0",
            "ZURldmljZVByb2ZpbGVSZXNwb25zZSIfgtPkkwIZIhQvYXBpL2RldmljZS1w",
            "cm9maWxlczoBKhJlCgNHZXQSHC5hcGkuR2V0RGV2aWNlUHJvZmlsZVJlcXVl",
            "c3QaHS5hcGkuR2V0RGV2aWNlUHJvZmlsZVJlc3BvbnNlIiGC0+STAhsSGS9h",
            "cGkvZGV2aWNlLXByb2ZpbGVzL3tpZH0SdgoGVXBkYXRlEh8uYXBpLlVwZGF0",
            "ZURldmljZVByb2ZpbGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5",
            "IjOC0+STAi0aKC9hcGkvZGV2aWNlLXByb2ZpbGVzL3tkZXZpY2VfcHJvZmls",
            "ZS5pZH06ASoSZAoGRGVsZXRlEh8uYXBpLkRlbGV0ZURldmljZVByb2ZpbGVS",
            "ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiGC0+STAhsqGS9hcGkv",
            "ZGV2aWNlLXByb2ZpbGVzL3tpZH0SZQoETGlzdBIeLmFwaS5MaXN0RGV2aWNl",
            "UHJvZmlsZXNSZXF1ZXN0Gh8uYXBpLkxpc3REZXZpY2VQcm9maWxlc1Jlc3Bv",
            "bnNlIhyC0+STAhYSFC9hcGkvZGV2aWNlLXByb2ZpbGVzEoUBChFMaXN0QWRy",
            "QWxnb3JpdGhtcxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRorLmFwaS5MaXN0",
            "RGV2aWNlUHJvZmlsZUFkckFsZ29yaXRobXNSZXNwb25zZSIrgtPkkwIlEiMv",
            "YXBpL2RldmljZS1wcm9maWxlcy9hZHItYWxnb3JpdGhtc0JqChFpby5jaGly",
            "cHN0YWNrLmFwaUISRGV2aWNlUHJvZmlsZVByb3RvUAFaLmdpdGh1Yi5jb20v",
            "Y2hpcnBzdGFjay9jaGlycHN0YWNrL2FwaS9nby92NC9hcGmqAg5DaGlycHN0",
            "YWNrLkFwaWIGcHJvdG8z"));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Chirpstack.Common.CommonReflection.Descriptor, },
          new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.CodecRuntime), typeof(global::Chirpstack.Api.MeasurementKind), }, null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeviceProfile), global::Chirpstack.Api.DeviceProfile.Parser, new[]{ "Id", "TenantId", "Name", "Description", "Region", "MacVersion", "RegParamsRevision", "AdrAlgorithmId", "PayloadCodecRuntime", "PayloadCodecScript", "FlushQueueOnActivate", "UplinkInterval", "DeviceStatusReqInterval", "SupportsOtaa", "SupportsClassB", "SupportsClassC", "ClassBTimeout", "ClassBPingSlotNbK", "ClassBPingSlotDr", "ClassBPingSlotFreq", "ClassCTimeout", "AbpRx1Delay", "AbpRx1DrOffset", "AbpRx2Dr", "AbpRx2Freq", "Tags", "Measurements", "AutoDetectMeasurements", "RegionConfigId" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.Measurement), global::Chirpstack.Api.Measurement.Parser, new[]{ "Name", "Kind" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeviceProfileListItem), global::Chirpstack.Api.DeviceProfileListItem.Parser, new[]{ "Id", "CreatedAt", "UpdatedAt", "Name", "Region", "MacVersion", "RegParamsRevision", "SupportsOtaa", "SupportsClassB", "SupportsClassC" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateDeviceProfileRequest), global::Chirpstack.Api.CreateDeviceProfileRequest.Parser, new[]{ "DeviceProfile" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateDeviceProfileResponse), global::Chirpstack.Api.CreateDeviceProfileResponse.Parser, new[]{ "Id" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetDeviceProfileRequest), global::Chirpstack.Api.GetDeviceProfileRequest.Parser, new[]{ "Id" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetDeviceProfileResponse), global::Chirpstack.Api.GetDeviceProfileResponse.Parser, new[]{ "DeviceProfile", "CreatedAt", "UpdatedAt" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.UpdateDeviceProfileRequest), global::Chirpstack.Api.UpdateDeviceProfileRequest.Parser, new[]{ "DeviceProfile" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeleteDeviceProfileRequest), global::Chirpstack.Api.DeleteDeviceProfileRequest.Parser, new[]{ "Id" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.ListDeviceProfilesRequest), global::Chirpstack.Api.ListDeviceProfilesRequest.Parser, new[]{ "Limit", "Offset", "Search", "TenantId" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.ListDeviceProfilesResponse), global::Chirpstack.Api.ListDeviceProfilesResponse.Parser, new[]{ "TotalCount", "Result" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.ListDeviceProfileAdrAlgorithmsResponse), global::Chirpstack.Api.ListDeviceProfileAdrAlgorithmsResponse.Parser, new[]{ "TotalCount", "Result" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.AdrAlgorithmListItem), global::Chirpstack.Api.AdrAlgorithmListItem.Parser, new[]{ "Id", "Name" }, null, null, null, null)
          }));
    }
    #endregion

  }
  #region Enums
  public enum CodecRuntime {
    /// <summary>
    /// None.
    /// </summary>
    [pbr::OriginalName("NONE")] None = 0,
    /// <summary>
    /// Cayenne LPP.
    /// </summary>
    [pbr::OriginalName("CAYENNE_LPP")] CayenneLpp = 1,
    /// <summary>
    /// JavaScript.
    /// </summary>
    [pbr::OriginalName("JS")] Js = 2,
  }

  public enum MeasurementKind {
    /// <summary>
    /// Unknown (in which case it is not tracked).
    /// </summary>
    [pbr::OriginalName("UNKNOWN")] Unknown = 0,
    /// <summary>
    /// Incrementing counters that never decrease (these are not reset on each reading).
    /// </summary>
    [pbr::OriginalName("COUNTER")] Counter = 1,
    /// <summary>
    /// Counters that do get reset upon reading.
    /// </summary>
    [pbr::OriginalName("ABSOLUTE")] Absolute = 2,
    /// <summary>
    /// E.g. a temperature value.
    /// </summary>
    [pbr::OriginalName("GAUGE")] Gauge = 3,
    /// <summary>
    /// E.g. a firmware version, true / false value.
    /// </summary>
    [pbr::OriginalName("STRING")] String = 4,
  }

  #endregion

  #region Messages
  public sealed partial class DeviceProfile : pb::IMessage<DeviceProfile>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<DeviceProfile> _parser = new pb::MessageParser<DeviceProfile>(() => new DeviceProfile());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<DeviceProfile> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeviceProfile() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeviceProfile(DeviceProfile other) : this() {
      id_ = other.id_;
      tenantId_ = other.tenantId_;
      name_ = other.name_;
      description_ = other.description_;
      region_ = other.region_;
      macVersion_ = other.macVersion_;
      regParamsRevision_ = other.regParamsRevision_;
      adrAlgorithmId_ = other.adrAlgorithmId_;
      payloadCodecRuntime_ = other.payloadCodecRuntime_;
      payloadCodecScript_ = other.payloadCodecScript_;
      flushQueueOnActivate_ = other.flushQueueOnActivate_;
      uplinkInterval_ = other.uplinkInterval_;
      deviceStatusReqInterval_ = other.deviceStatusReqInterval_;
      supportsOtaa_ = other.supportsOtaa_;
      supportsClassB_ = other.supportsClassB_;
      supportsClassC_ = other.supportsClassC_;
      classBTimeout_ = other.classBTimeout_;
      classBPingSlotNbK_ = other.classBPingSlotNbK_;
      classBPingSlotDr_ = other.classBPingSlotDr_;
      classBPingSlotFreq_ = other.classBPingSlotFreq_;
      classCTimeout_ = other.classCTimeout_;
      abpRx1Delay_ = other.abpRx1Delay_;
      abpRx1DrOffset_ = other.abpRx1DrOffset_;
      abpRx2Dr_ = other.abpRx2Dr_;
      abpRx2Freq_ = other.abpRx2Freq_;
      tags_ = other.tags_.Clone();
      measurements_ = other.measurements_.Clone();
      autoDetectMeasurements_ = other.autoDetectMeasurements_;
      regionConfigId_ = other.regionConfigId_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeviceProfile Clone() {
      return new DeviceProfile(this);
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private string id_ = "";
    /// <summary>
    /// Device-profile ID (UUID).
    /// Note: on create this will be automatically generated.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "tenant_id" field.</summary>
    public const int TenantIdFieldNumber = 2;
    private string tenantId_ = "";
    /// <summary>
    /// Tenant ID (UUID).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string TenantId {
      get { return tenantId_; }
      set {
        tenantId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 3;
    private string name_ = "";
    /// <summary>
    /// Name.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "description" field.</summary>
    public const int DescriptionFieldNumber = 26;
    private string description_ = "";
    /// <summary>
    /// Description.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Description {
      get { return description_; }
      set {
        description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "region" field.</summary>
    public const int RegionFieldNumber = 4;
    private global::Chirpstack.Common.Region region_ = global::Chirpstack.Common.Region.Eu868;
    /// <summary>
    /// Region.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Common.Region Region {
      get { return region_; }
      set {
        region_ = value;
      }
    }

    /// <summary>Field number for the "mac_version" field.</summary>
    public const int MacVersionFieldNumber = 5;
    private global::Chirpstack.Common.MacVersion macVersion_ = global::Chirpstack.Common.MacVersion.Lorawan100;
    /// <summary>
    /// LoRaWAN mac-version.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Common.MacVersion MacVersion {
      get { return macVersion_; }
      set {
        macVersion_ = value;
      }
    }

    /// <summary>Field number for the "reg_params_revision" field.</summary>
    public const int RegParamsRevisionFieldNumber = 6;
    private global::Chirpstack.Common.RegParamsRevision regParamsRevision_ = global::Chirpstack.Common.RegParamsRevision.A;
    /// <summary>
    /// Regional parameters revision.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Common.RegParamsRevision RegParamsRevision {
      get { return regParamsRevision_; }
      set {
        regParamsRevision_ = value;
      }
    }

    /// <summary>Field number for the "adr_algorithm_id" field.</summary>
    public const int AdrAlgorithmIdFieldNumber = 7;
    private string adrAlgorithmId_ = "";
    /// <summary>
    /// ADR algorithm ID.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string AdrAlgorithmId {
      get { return adrAlgorithmId_; }
      set {
        adrAlgorithmId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "payload_codec_runtime" field.</summary>
    public const int PayloadCodecRuntimeFieldNumber = 8;
    private global::Chirpstack.Api.CodecRuntime payloadCodecRuntime_ = global::Chirpstack.Api.CodecRuntime.None;
    /// <summary>
    /// Payload codec runtime.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Api.CodecRuntime PayloadCodecRuntime {
      get { return payloadCodecRuntime_; }
      set {
        payloadCodecRuntime_ = value;
      }
    }

    /// <summary>Field number for the "payload_codec_script" field.</summary>
    public const int PayloadCodecScriptFieldNumber = 9;
    private string payloadCodecScript_ = "";
    /// <summary>
    /// Payload codec script.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string PayloadCodecScript {
      get { return payloadCodecScript_; }
      set {
        payloadCodecScript_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "flush_queue_on_activate" field.</summary>
    public const int FlushQueueOnActivateFieldNumber = 10;
    private bool flushQueueOnActivate_;
    /// <summary>
    /// Flush queue on device activation.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool FlushQueueOnActivate {
      get { return flushQueueOnActivate_; }
      set {
        flushQueueOnActivate_ = value;
      }
    }

    /// <summary>Field number for the "uplink_interval" field.</summary>
    public const int UplinkIntervalFieldNumber = 11;
    private uint uplinkInterval_;
    /// <summary>
    /// Uplink interval (seconds).
    /// This defines the expected uplink interval which the device uses for
    /// communication. If the uplink interval has expired and no uplink has
    /// been received, the device is considered inactive.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint UplinkInterval {
      get { return uplinkInterval_; }
      set {
        uplinkInterval_ = value;
      }
    }

    /// <summary>Field number for the "device_status_req_interval" field.</summary>
    public const int DeviceStatusReqIntervalFieldNumber = 12;
    private uint deviceStatusReqInterval_;
    /// <summary>
    /// Device-status request interval (times / day).
    /// This defines the times per day that ChirpStack will request the device-status
    /// from the device.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint DeviceStatusReqInterval {
      get { return deviceStatusReqInterval_; }
      set {
        deviceStatusReqInterval_ = value;
      }
    }

    /// <summary>Field number for the "supports_otaa" field.</summary>
    public const int SupportsOtaaFieldNumber = 13;
    private bool supportsOtaa_;
    /// <summary>
    /// Supports OTAA.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool SupportsOtaa {
      get { return supportsOtaa_; }
      set {
        supportsOtaa_ = value;
      }
    }

    /// <summary>Field number for the "supports_class_b" field.</summary>
    public const int SupportsClassBFieldNumber = 14;
    private bool supportsClassB_;
    /// <summary>
    /// Supports Class B.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool SupportsClassB {
      get { return supportsClassB_; }
      set {
        supportsClassB_ = value;
      }
    }

    /// <summary>Field number for the "supports_class_c" field.</summary>
    public const int SupportsClassCFieldNumber = 15;
    private bool supportsClassC_;
    /// <summary>
    /// Supports Class-C.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool SupportsClassC {
      get { return supportsClassC_; }
      set {
        supportsClassC_ = value;
      }
    }

    /// <summary>Field number for the "class_b_timeout" field.</summary>
    public const int ClassBTimeoutFieldNumber = 16;
    private uint classBTimeout_;
    /// <summary>
    /// Class-B timeout (seconds).
    /// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint ClassBTimeout {
      get { return classBTimeout_; }
      set {
        classBTimeout_ = value;
      }
    }

    /// <summary>Field number for the "class_b_ping_slot_nb_k" field.</summary>
    public const int ClassBPingSlotNbKFieldNumber = 17;
    private uint classBPingSlotNbK_;
    /// <summary>
    /// Class-B ping-slots per beacon period.
    /// Valid options are: 0 - 7.
    ///
    /// The actual number of ping-slots per beacon period equals to 2^k.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint ClassBPingSlotNbK {
      get { return classBPingSlotNbK_; }
      set {
        classBPingSlotNbK_ = value;
      }
    }

    /// <summary>Field number for the "class_b_ping_slot_dr" field.</summary>
    public const int ClassBPingSlotDrFieldNumber = 18;
    private uint classBPingSlotDr_;
    /// <summary>
    /// Class-B ping-slot DR.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint ClassBPingSlotDr {
      get { return classBPingSlotDr_; }
      set {
        classBPingSlotDr_ = value;
      }
    }

    /// <summary>Field number for the "class_b_ping_slot_freq" field.</summary>
    public const int ClassBPingSlotFreqFieldNumber = 19;
    private uint classBPingSlotFreq_;
    /// <summary>
    /// Class-B ping-slot freq (Hz).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint ClassBPingSlotFreq {
      get { return classBPingSlotFreq_; }
      set {
        classBPingSlotFreq_ = value;
      }
    }

    /// <summary>Field number for the "class_c_timeout" field.</summary>
    public const int ClassCTimeoutFieldNumber = 20;
    private uint classCTimeout_;
    /// <summary>
    /// Class-C timeout (seconds).
    /// This is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint ClassCTimeout {
      get { return classCTimeout_; }
      set {
        classCTimeout_ = value;
      }
    }

    /// <summary>Field number for the "abp_rx1_delay" field.</summary>
    public const int AbpRx1DelayFieldNumber = 21;
    private uint abpRx1Delay_;
    /// <summary>
    /// RX1 delay (for ABP).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint AbpRx1Delay {
      get { return abpRx1Delay_; }
      set {
        abpRx1Delay_ = value;
      }
    }

    /// <summary>Field number for the "abp_rx1_dr_offset" field.</summary>
    public const int AbpRx1DrOffsetFieldNumber = 22;
    private uint abpRx1DrOffset_;
    /// <summary>
    /// RX1 DR offset (for ABP).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint AbpRx1DrOffset {
      get { return abpRx1DrOffset_; }
      set {
        abpRx1DrOffset_ = value;
      }
    }

    /// <summary>Field number for the "abp_rx2_dr" field.</summary>
    public const int AbpRx2DrFieldNumber = 23;
    private uint abpRx2Dr_;
    /// <summary>
    /// RX2 DR (for ABP).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint AbpRx2Dr {
      get { return abpRx2Dr_; }
      set {
        abpRx2Dr_ = value;
      }
    }

    /// <summary>Field number for the "abp_rx2_freq" field.</summary>
    public const int AbpRx2FreqFieldNumber = 24;
    private uint abpRx2Freq_;
    /// <summary>
    /// RX2 frequency (for ABP, Hz).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint AbpRx2Freq {
      get { return abpRx2Freq_; }
      set {
        abpRx2Freq_ = value;
      }
    }

    /// <summary>Field number for the "tags" field.</summary>
    public const int TagsFieldNumber = 25;
    private static readonly pbc::MapField<string, string>.Codec _map_tags_codec
        = new pbc::MapField<string, string>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForString(18, ""), 202);
    private readonly pbc::MapField<string, string> tags_ = new pbc::MapField<string, string>();
    /// <summary>
    /// User defined tags.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, string> Tags {
      get { return tags_; }
    }

    /// <summary>Field number for the "measurements" field.</summary>
    public const int MeasurementsFieldNumber = 27;
    private static readonly pbc::MapField<string, global::Chirpstack.Api.Measurement>.Codec _map_measurements_codec
        = new pbc::MapField<string, global::Chirpstack.Api.Measurement>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForMessage(18, global::Chirpstack.Api.Measurement.Parser), 218);
    private readonly pbc::MapField<string, global::Chirpstack.Api.Measurement> measurements_ = new pbc::MapField<string, global::Chirpstack.Api.Measurement>();
    /// <summary>
    /// Measurements.
    /// If defined, ChirpStack will visualize these metrics in the web-interface.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, global::Chirpstack.Api.Measurement> Measurements {
      get { return measurements_; }
    }

    /// <summary>Field number for the "auto_detect_measurements" field.</summary>
    public const int AutoDetectMeasurementsFieldNumber = 28;
    private bool autoDetectMeasurements_;
    /// <summary>
    /// Auto-detect measurements.
    /// If set to true, measurements will be automatically added based on the
    /// keys of the decoded payload. In cases where the decoded payload contains
    /// random keys in the data, you want to set this to false.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool AutoDetectMeasurements {
      get { return autoDetectMeasurements_; }
      set {
        autoDetectMeasurements_ = value;
      }
    }

    /// <summary>Field number for the "region_config_id" field.</summary>
    public const int RegionConfigIdFieldNumber = 29;
    private string regionConfigId_ = "";
    /// <summary>
    /// Region configuration ID.
    /// If set, devices will only use the associated region. If let blank, then
    /// devices will use all regions matching the selected common-name. Note
    /// that multiple region configurations can exist for the same common-name,
    /// e.g. to provide an 8 channel and 16 channel configuration for the US915
    /// band.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string RegionConfigId {
      get { return regionConfigId_; }
      set {
        regionConfigId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as DeviceProfile);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(DeviceProfile other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Id != other.Id) return false;
      if (TenantId != other.TenantId) return false;
      if (Name != other.Name) return false;
      if (Description != other.Description) return false;
      if (Region != other.Region) return false;
      if (MacVersion != other.MacVersion) return false;
      if (RegParamsRevision != other.RegParamsRevision) return false;
      if (AdrAlgorithmId != other.AdrAlgorithmId) return false;
      if (PayloadCodecRuntime != other.PayloadCodecRuntime) return false;
      if (PayloadCodecScript != other.PayloadCodecScript) return false;
      if (FlushQueueOnActivate != other.FlushQueueOnActivate) return false;
      if (UplinkInterval != other.UplinkInterval) return false;
      if (DeviceStatusReqInterval != other.DeviceStatusReqInterval) return false;
      if (SupportsOtaa != other.SupportsOtaa) return false;
      if (SupportsClassB != other.SupportsClassB) return false;
      if (SupportsClassC != other.SupportsClassC) return false;
      if (ClassBTimeout != other.ClassBTimeout) return false;
      if (ClassBPingSlotNbK != other.ClassBPingSlotNbK) return false;
      if (ClassBPingSlotDr != other.ClassBPingSlotDr) return false;
      if (ClassBPingSlotFreq != other.ClassBPingSlotFreq) return false;
      if (ClassCTimeout != other.ClassCTimeout) return false;
      if (AbpRx1Delay != other.AbpRx1Delay) return false;
      if (AbpRx1DrOffset != other.AbpRx1DrOffset) return false;
      if (AbpRx2Dr != other.AbpRx2Dr) return false;
      if (AbpRx2Freq != other.AbpRx2Freq) return false;
      if (!Tags.Equals(other.Tags)) return false;
      if (!Measurements.Equals(other.Measurements)) return false;
      if (AutoDetectMeasurements != other.AutoDetectMeasurements) return false;
      if (RegionConfigId != other.RegionConfigId) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (TenantId.Length != 0) hash ^= TenantId.GetHashCode();
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (Description.Length != 0) hash ^= Description.GetHashCode();
      if (Region != global::Chirpstack.Common.Region.Eu868) hash ^= Region.GetHashCode();
      if (MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) hash ^= MacVersion.GetHashCode();
      if (RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) hash ^= RegParamsRevision.GetHashCode();
      if (AdrAlgorithmId.Length != 0) hash ^= AdrAlgorithmId.GetHashCode();
      if (PayloadCodecRuntime != global::Chirpstack.Api.CodecRuntime.None) hash ^= PayloadCodecRuntime.GetHashCode();
      if (PayloadCodecScript.Length != 0) hash ^= PayloadCodecScript.GetHashCode();
      if (FlushQueueOnActivate != false) hash ^= FlushQueueOnActivate.GetHashCode();
      if (UplinkInterval != 0) hash ^= UplinkInterval.GetHashCode();
      if (DeviceStatusReqInterval != 0) hash ^= DeviceStatusReqInterval.GetHashCode();
      if (SupportsOtaa != false) hash ^= SupportsOtaa.GetHashCode();
      if (SupportsClassB != false) hash ^= SupportsClassB.GetHashCode();
      if (SupportsClassC != false) hash ^= SupportsClassC.GetHashCode();
      if (ClassBTimeout != 0) hash ^= ClassBTimeout.GetHashCode();
      if (ClassBPingSlotNbK != 0) hash ^= ClassBPingSlotNbK.GetHashCode();
      if (ClassBPingSlotDr != 0) hash ^= ClassBPingSlotDr.GetHashCode();
      if (ClassBPingSlotFreq != 0) hash ^= ClassBPingSlotFreq.GetHashCode();
      if (ClassCTimeout != 0) hash ^= ClassCTimeout.GetHashCode();
      if (AbpRx1Delay != 0) hash ^= AbpRx1Delay.GetHashCode();
      if (AbpRx1DrOffset != 0) hash ^= AbpRx1DrOffset.GetHashCode();
      if (AbpRx2Dr != 0) hash ^= AbpRx2Dr.GetHashCode();
      if (AbpRx2Freq != 0) hash ^= AbpRx2Freq.GetHashCode();
      hash ^= Tags.GetHashCode();
      hash ^= Measurements.GetHashCode();
      if (AutoDetectMeasurements != false) hash ^= AutoDetectMeasurements.GetHashCode();
      if (RegionConfigId.Length != 0) hash ^= RegionConfigId.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (TenantId.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(TenantId);
      }
      if (Name.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Name);
      }
      if (Region != global::Chirpstack.Common.Region.Eu868) {
        output.WriteRawTag(32);
        output.WriteEnum((int) Region);
      }
      if (MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) {
        output.WriteRawTag(40);
        output.WriteEnum((int) MacVersion);
      }
      if (RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) {
        output.WriteRawTag(48);
        output.WriteEnum((int) RegParamsRevision);
      }
      if (AdrAlgorithmId.Length != 0) {
        output.WriteRawTag(58);
        output.WriteString(AdrAlgorithmId);
      }
      if (PayloadCodecRuntime != global::Chirpstack.Api.CodecRuntime.None) {
        output.WriteRawTag(64);
        output.WriteEnum((int) PayloadCodecRuntime);
      }
      if (PayloadCodecScript.Length != 0) {
        output.WriteRawTag(74);
        output.WriteString(PayloadCodecScript);
      }
      if (FlushQueueOnActivate != false) {
        output.WriteRawTag(80);
        output.WriteBool(FlushQueueOnActivate);
      }
      if (UplinkInterval != 0) {
        output.WriteRawTag(88);
        output.WriteUInt32(UplinkInterval);
      }
      if (DeviceStatusReqInterval != 0) {
        output.WriteRawTag(96);
        output.WriteUInt32(DeviceStatusReqInterval);
      }
      if (SupportsOtaa != false) {
        output.WriteRawTag(104);
        output.WriteBool(SupportsOtaa);
      }
      if (SupportsClassB != false) {
        output.WriteRawTag(112);
        output.WriteBool(SupportsClassB);
      }
      if (SupportsClassC != false) {
        output.WriteRawTag(120);
        output.WriteBool(SupportsClassC);
      }
      if (ClassBTimeout != 0) {
        output.WriteRawTag(128, 1);
        output.WriteUInt32(ClassBTimeout);
      }
      if (ClassBPingSlotNbK != 0) {
        output.WriteRawTag(136, 1);
        output.WriteUInt32(ClassBPingSlotNbK);
      }
      if (ClassBPingSlotDr != 0) {
        output.WriteRawTag(144, 1);
        output.WriteUInt32(ClassBPingSlotDr);
      }
      if (ClassBPingSlotFreq != 0) {
        output.WriteRawTag(152, 1);
        output.WriteUInt32(ClassBPingSlotFreq);
      }
      if (ClassCTimeout != 0) {
        output.WriteRawTag(160, 1);
        output.WriteUInt32(ClassCTimeout);
      }
      if (AbpRx1Delay != 0) {
        output.WriteRawTag(168, 1);
        output.WriteUInt32(AbpRx1Delay);
      }
      if (AbpRx1DrOffset != 0) {
        output.WriteRawTag(176, 1);
        output.WriteUInt32(AbpRx1DrOffset);
      }
      if (AbpRx2Dr != 0) {
        output.WriteRawTag(184, 1);
        output.WriteUInt32(AbpRx2Dr);
      }
      if (AbpRx2Freq != 0) {
        output.WriteRawTag(192, 1);
        output.WriteUInt32(AbpRx2Freq);
      }
      tags_.WriteTo(output, _map_tags_codec);
      if (Description.Length != 0) {
        output.WriteRawTag(210, 1);
        output.WriteString(Description);
      }
      measurements_.WriteTo(output, _map_measurements_codec);
      if (AutoDetectMeasurements != false) {
        output.WriteRawTag(224, 1);
        output.WriteBool(AutoDetectMeasurements);
      }
      if (RegionConfigId.Length != 0) {
        output.WriteRawTag(234, 1);
        output.WriteString(RegionConfigId);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (TenantId.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(TenantId);
      }
      if (Name.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Name);
      }
      if (Region != global::Chirpstack.Common.Region.Eu868) {
        output.WriteRawTag(32);
        output.WriteEnum((int) Region);
      }
      if (MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) {
        output.WriteRawTag(40);
        output.WriteEnum((int) MacVersion);
      }
      if (RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) {
        output.WriteRawTag(48);
        output.WriteEnum((int) RegParamsRevision);
      }
      if (AdrAlgorithmId.Length != 0) {
        output.WriteRawTag(58);
        output.WriteString(AdrAlgorithmId);
      }
      if (PayloadCodecRuntime != global::Chirpstack.Api.CodecRuntime.None) {
        output.WriteRawTag(64);
        output.WriteEnum((int) PayloadCodecRuntime);
      }
      if (PayloadCodecScript.Length != 0) {
        output.WriteRawTag(74);
        output.WriteString(PayloadCodecScript);
      }
      if (FlushQueueOnActivate != false) {
        output.WriteRawTag(80);
        output.WriteBool(FlushQueueOnActivate);
      }
      if (UplinkInterval != 0) {
        output.WriteRawTag(88);
        output.WriteUInt32(UplinkInterval);
      }
      if (DeviceStatusReqInterval != 0) {
        output.WriteRawTag(96);
        output.WriteUInt32(DeviceStatusReqInterval);
      }
      if (SupportsOtaa != false) {
        output.WriteRawTag(104);
        output.WriteBool(SupportsOtaa);
      }
      if (SupportsClassB != false) {
        output.WriteRawTag(112);
        output.WriteBool(SupportsClassB);
      }
      if (SupportsClassC != false) {
        output.WriteRawTag(120);
        output.WriteBool(SupportsClassC);
      }
      if (ClassBTimeout != 0) {
        output.WriteRawTag(128, 1);
        output.WriteUInt32(ClassBTimeout);
      }
      if (ClassBPingSlotNbK != 0) {
        output.WriteRawTag(136, 1);
        output.WriteUInt32(ClassBPingSlotNbK);
      }
      if (ClassBPingSlotDr != 0) {
        output.WriteRawTag(144, 1);
        output.WriteUInt32(ClassBPingSlotDr);
      }
      if (ClassBPingSlotFreq != 0) {
        output.WriteRawTag(152, 1);
        output.WriteUInt32(ClassBPingSlotFreq);
      }
      if (ClassCTimeout != 0) {
        output.WriteRawTag(160, 1);
        output.WriteUInt32(ClassCTimeout);
      }
      if (AbpRx1Delay != 0) {
        output.WriteRawTag(168, 1);
        output.WriteUInt32(AbpRx1Delay);
      }
      if (AbpRx1DrOffset != 0) {
        output.WriteRawTag(176, 1);
        output.WriteUInt32(AbpRx1DrOffset);
      }
      if (AbpRx2Dr != 0) {
        output.WriteRawTag(184, 1);
        output.WriteUInt32(AbpRx2Dr);
      }
      if (AbpRx2Freq != 0) {
        output.WriteRawTag(192, 1);
        output.WriteUInt32(AbpRx2Freq);
      }
      tags_.WriteTo(ref output, _map_tags_codec);
      if (Description.Length != 0) {
        output.WriteRawTag(210, 1);
        output.WriteString(Description);
      }
      measurements_.WriteTo(ref output, _map_measurements_codec);
      if (AutoDetectMeasurements != false) {
        output.WriteRawTag(224, 1);
        output.WriteBool(AutoDetectMeasurements);
      }
      if (RegionConfigId.Length != 0) {
        output.WriteRawTag(234, 1);
        output.WriteString(RegionConfigId);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (TenantId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(TenantId);
      }
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (Description.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(Description);
      }
      if (Region != global::Chirpstack.Common.Region.Eu868) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Region);
      }
      if (MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) MacVersion);
      }
      if (RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) RegParamsRevision);
      }
      if (AdrAlgorithmId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(AdrAlgorithmId);
      }
      if (PayloadCodecRuntime != global::Chirpstack.Api.CodecRuntime.None) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) PayloadCodecRuntime);
      }
      if (PayloadCodecScript.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(PayloadCodecScript);
      }
      if (FlushQueueOnActivate != false) {
        size += 1 + 1;
      }
      if (UplinkInterval != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(UplinkInterval);
      }
      if (DeviceStatusReqInterval != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(DeviceStatusReqInterval);
      }
      if (SupportsOtaa != false) {
        size += 1 + 1;
      }
      if (SupportsClassB != false) {
        size += 1 + 1;
      }
      if (SupportsClassC != false) {
        size += 1 + 1;
      }
      if (ClassBTimeout != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(ClassBTimeout);
      }
      if (ClassBPingSlotNbK != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(ClassBPingSlotNbK);
      }
      if (ClassBPingSlotDr != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(ClassBPingSlotDr);
      }
      if (ClassBPingSlotFreq != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(ClassBPingSlotFreq);
      }
      if (ClassCTimeout != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(ClassCTimeout);
      }
      if (AbpRx1Delay != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(AbpRx1Delay);
      }
      if (AbpRx1DrOffset != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(AbpRx1DrOffset);
      }
      if (AbpRx2Dr != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(AbpRx2Dr);
      }
      if (AbpRx2Freq != 0) {
        size += 2 + pb::CodedOutputStream.ComputeUInt32Size(AbpRx2Freq);
      }
      size += tags_.CalculateSize(_map_tags_codec);
      size += measurements_.CalculateSize(_map_measurements_codec);
      if (AutoDetectMeasurements != false) {
        size += 2 + 1;
      }
      if (RegionConfigId.Length != 0) {
        size += 2 + pb::CodedOutputStream.ComputeStringSize(RegionConfigId);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(DeviceProfile other) {
      if (other == null) {
        return;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      if (other.TenantId.Length != 0) {
        TenantId = other.TenantId;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.Description.Length != 0) {
        Description = other.Description;
      }
      if (other.Region != global::Chirpstack.Common.Region.Eu868) {
        Region = other.Region;
      }
      if (other.MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) {
        MacVersion = other.MacVersion;
      }
      if (other.RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) {
        RegParamsRevision = other.RegParamsRevision;
      }
      if (other.AdrAlgorithmId.Length != 0) {
        AdrAlgorithmId = other.AdrAlgorithmId;
      }
      if (other.PayloadCodecRuntime != global::Chirpstack.Api.CodecRuntime.None) {
        PayloadCodecRuntime = other.PayloadCodecRuntime;
      }
      if (other.PayloadCodecScript.Length != 0) {
        PayloadCodecScript = other.PayloadCodecScript;
      }
      if (other.FlushQueueOnActivate != false) {
        FlushQueueOnActivate = other.FlushQueueOnActivate;
      }
      if (other.UplinkInterval != 0) {
        UplinkInterval = other.UplinkInterval;
      }
      if (other.DeviceStatusReqInterval != 0) {
        DeviceStatusReqInterval = other.DeviceStatusReqInterval;
      }
      if (other.SupportsOtaa != false) {
        SupportsOtaa = other.SupportsOtaa;
      }
      if (other.SupportsClassB != false) {
        SupportsClassB = other.SupportsClassB;
      }
      if (other.SupportsClassC != false) {
        SupportsClassC = other.SupportsClassC;
      }
      if (other.ClassBTimeout != 0) {
        ClassBTimeout = other.ClassBTimeout;
      }
      if (other.ClassBPingSlotNbK != 0) {
        ClassBPingSlotNbK = other.ClassBPingSlotNbK;
      }
      if (other.ClassBPingSlotDr != 0) {
        ClassBPingSlotDr = other.ClassBPingSlotDr;
      }
      if (other.ClassBPingSlotFreq != 0) {
        ClassBPingSlotFreq = other.ClassBPingSlotFreq;
      }
      if (other.ClassCTimeout != 0) {
        ClassCTimeout = other.ClassCTimeout;
      }
      if (other.AbpRx1Delay != 0) {
        AbpRx1Delay = other.AbpRx1Delay;
      }
      if (other.AbpRx1DrOffset != 0) {
        AbpRx1DrOffset = other.AbpRx1DrOffset;
      }
      if (other.AbpRx2Dr != 0) {
        AbpRx2Dr = other.AbpRx2Dr;
      }
      if (other.AbpRx2Freq != 0) {
        AbpRx2Freq = other.AbpRx2Freq;
      }
      tags_.Add(other.tags_);
      measurements_.Add(other.measurements_);
      if (other.AutoDetectMeasurements != false) {
        AutoDetectMeasurements = other.AutoDetectMeasurements;
      }
      if (other.RegionConfigId.Length != 0) {
        RegionConfigId = other.RegionConfigId;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
          case 18: {
            TenantId = input.ReadString();
            break;
          }
          case 26: {
            Name = input.ReadString();
            break;
          }
          case 32: {
            Region = (global::Chirpstack.Common.Region) input.ReadEnum();
            break;
          }
          case 40: {
            MacVersion = (global::Chirpstack.Common.MacVersion) input.ReadEnum();
            break;
          }
          case 48: {
            RegParamsRevision = (global::Chirpstack.Common.RegParamsRevision) input.ReadEnum();
            break;
          }
          case 58: {
            AdrAlgorithmId = input.ReadString();
            break;
          }
          case 64: {
            PayloadCodecRuntime = (global::Chirpstack.Api.CodecRuntime) input.ReadEnum();
            break;
          }
          case 74: {
            PayloadCodecScript = input.ReadString();
            break;
          }
          case 80: {
            FlushQueueOnActivate = input.ReadBool();
            break;
          }
          case 88: {
            UplinkInterval = input.ReadUInt32();
            break;
          }
          case 96: {
            DeviceStatusReqInterval = input.ReadUInt32();
            break;
          }
          case 104: {
            SupportsOtaa = input.ReadBool();
            break;
          }
          case 112: {
            SupportsClassB = input.ReadBool();
            break;
          }
          case 120: {
            SupportsClassC = input.ReadBool();
            break;
          }
          case 128: {
            ClassBTimeout = input.ReadUInt32();
            break;
          }
          case 136: {
            ClassBPingSlotNbK = input.ReadUInt32();
            break;
          }
          case 144: {
            ClassBPingSlotDr = input.ReadUInt32();
            break;
          }
          case 152: {
            ClassBPingSlotFreq = input.ReadUInt32();
            break;
          }
          case 160: {
            ClassCTimeout = input.ReadUInt32();
            break;
          }
          case 168: {
            AbpRx1Delay = input.ReadUInt32();
            break;
          }
          case 176: {
            AbpRx1DrOffset = input.ReadUInt32();
            break;
          }
          case 184: {
            AbpRx2Dr = input.ReadUInt32();
            break;
          }
          case 192: {
            AbpRx2Freq = input.ReadUInt32();
            break;
          }
          case 202: {
            tags_.AddEntriesFrom(input, _map_tags_codec);
            break;
          }
          case 210: {
            Description = input.ReadString();
            break;
          }
          case 218: {
            measurements_.AddEntriesFrom(input, _map_measurements_codec);
            break;
          }
          case 224: {
            AutoDetectMeasurements = input.ReadBool();
            break;
          }
          case 234: {
            RegionConfigId = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
          case 18: {
            TenantId = input.ReadString();
            break;
          }
          case 26: {
            Name = input.ReadString();
            break;
          }
          case 32: {
            Region = (global::Chirpstack.Common.Region) input.ReadEnum();
            break;
          }
          case 40: {
            MacVersion = (global::Chirpstack.Common.MacVersion) input.ReadEnum();
            break;
          }
          case 48: {
            RegParamsRevision = (global::Chirpstack.Common.RegParamsRevision) input.ReadEnum();
            break;
          }
          case 58: {
            AdrAlgorithmId = input.ReadString();
            break;
          }
          case 64: {
            PayloadCodecRuntime = (global::Chirpstack.Api.CodecRuntime) input.ReadEnum();
            break;
          }
          case 74: {
            PayloadCodecScript = input.ReadString();
            break;
          }
          case 80: {
            FlushQueueOnActivate = input.ReadBool();
            break;
          }
          case 88: {
            UplinkInterval = input.ReadUInt32();
            break;
          }
          case 96: {
            DeviceStatusReqInterval = input.ReadUInt32();
            break;
          }
          case 104: {
            SupportsOtaa = input.ReadBool();
            break;
          }
          case 112: {
            SupportsClassB = input.ReadBool();
            break;
          }
          case 120: {
            SupportsClassC = input.ReadBool();
            break;
          }
          case 128: {
            ClassBTimeout = input.ReadUInt32();
            break;
          }
          case 136: {
            ClassBPingSlotNbK = input.ReadUInt32();
            break;
          }
          case 144: {
            ClassBPingSlotDr = input.ReadUInt32();
            break;
          }
          case 152: {
            ClassBPingSlotFreq = input.ReadUInt32();
            break;
          }
          case 160: {
            ClassCTimeout = input.ReadUInt32();
            break;
          }
          case 168: {
            AbpRx1Delay = input.ReadUInt32();
            break;
          }
          case 176: {
            AbpRx1DrOffset = input.ReadUInt32();
            break;
          }
          case 184: {
            AbpRx2Dr = input.ReadUInt32();
            break;
          }
          case 192: {
            AbpRx2Freq = input.ReadUInt32();
            break;
          }
          case 202: {
            tags_.AddEntriesFrom(ref input, _map_tags_codec);
            break;
          }
          case 210: {
            Description = input.ReadString();
            break;
          }
          case 218: {
            measurements_.AddEntriesFrom(ref input, _map_measurements_codec);
            break;
          }
          case 224: {
            AutoDetectMeasurements = input.ReadBool();
            break;
          }
          case 234: {
            RegionConfigId = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class Measurement : pb::IMessage<Measurement>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<Measurement> _parser = new pb::MessageParser<Measurement>(() => new Measurement());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<Measurement> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Measurement() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Measurement(Measurement other) : this() {
      name_ = other.name_;
      kind_ = other.kind_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Measurement Clone() {
      return new Measurement(this);
    }

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 2;
    private string name_ = "";
    /// <summary>
    /// Name (user defined).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "kind" field.</summary>
    public const int KindFieldNumber = 3;
    private global::Chirpstack.Api.MeasurementKind kind_ = global::Chirpstack.Api.MeasurementKind.Unknown;
    /// <summary>
    /// Kind.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Api.MeasurementKind Kind {
      get { return kind_; }
      set {
        kind_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as Measurement);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(Measurement other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Name != other.Name) return false;
      if (Kind != other.Kind) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (Kind != global::Chirpstack.Api.MeasurementKind.Unknown) hash ^= Kind.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Name.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(Name);
      }
      if (Kind != global::Chirpstack.Api.MeasurementKind.Unknown) {
        output.WriteRawTag(24);
        output.WriteEnum((int) Kind);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Name.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(Name);
      }
      if (Kind != global::Chirpstack.Api.MeasurementKind.Unknown) {
        output.WriteRawTag(24);
        output.WriteEnum((int) Kind);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (Kind != global::Chirpstack.Api.MeasurementKind.Unknown) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Kind);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(Measurement other) {
      if (other == null) {
        return;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.Kind != global::Chirpstack.Api.MeasurementKind.Unknown) {
        Kind = other.Kind;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 18: {
            Name = input.ReadString();
            break;
          }
          case 24: {
            Kind = (global::Chirpstack.Api.MeasurementKind) input.ReadEnum();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 18: {
            Name = input.ReadString();
            break;
          }
          case 24: {
            Kind = (global::Chirpstack.Api.MeasurementKind) input.ReadEnum();
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class DeviceProfileListItem : pb::IMessage<DeviceProfileListItem>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<DeviceProfileListItem> _parser = new pb::MessageParser<DeviceProfileListItem>(() => new DeviceProfileListItem());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<DeviceProfileListItem> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[2]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeviceProfileListItem() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeviceProfileListItem(DeviceProfileListItem other) : this() {
      id_ = other.id_;
      createdAt_ = other.createdAt_ != null ? other.createdAt_.Clone() : null;
      updatedAt_ = other.updatedAt_ != null ? other.updatedAt_.Clone() : null;
      name_ = other.name_;
      region_ = other.region_;
      macVersion_ = other.macVersion_;
      regParamsRevision_ = other.regParamsRevision_;
      supportsOtaa_ = other.supportsOtaa_;
      supportsClassB_ = other.supportsClassB_;
      supportsClassC_ = other.supportsClassC_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeviceProfileListItem Clone() {
      return new DeviceProfileListItem(this);
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private string id_ = "";
    /// <summary>
    /// Device-profile ID (UUID).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "created_at" field.</summary>
    public const int CreatedAtFieldNumber = 2;
    private global::Google.Protobuf.WellKnownTypes.Timestamp createdAt_;
    /// <summary>
    /// Created at timestamp.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp CreatedAt {
      get { return createdAt_; }
      set {
        createdAt_ = value;
      }
    }

    /// <summary>Field number for the "updated_at" field.</summary>
    public const int UpdatedAtFieldNumber = 3;
    private global::Google.Protobuf.WellKnownTypes.Timestamp updatedAt_;
    /// <summary>
    /// Last update timestamp.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp UpdatedAt {
      get { return updatedAt_; }
      set {
        updatedAt_ = value;
      }
    }

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 4;
    private string name_ = "";
    /// <summary>
    /// Name.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "region" field.</summary>
    public const int RegionFieldNumber = 5;
    private global::Chirpstack.Common.Region region_ = global::Chirpstack.Common.Region.Eu868;
    /// <summary>
    /// Region.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Common.Region Region {
      get { return region_; }
      set {
        region_ = value;
      }
    }

    /// <summary>Field number for the "mac_version" field.</summary>
    public const int MacVersionFieldNumber = 6;
    private global::Chirpstack.Common.MacVersion macVersion_ = global::Chirpstack.Common.MacVersion.Lorawan100;
    /// <summary>
    /// LoRaWAN mac-version.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Common.MacVersion MacVersion {
      get { return macVersion_; }
      set {
        macVersion_ = value;
      }
    }

    /// <summary>Field number for the "reg_params_revision" field.</summary>
    public const int RegParamsRevisionFieldNumber = 7;
    private global::Chirpstack.Common.RegParamsRevision regParamsRevision_ = global::Chirpstack.Common.RegParamsRevision.A;
    /// <summary>
    /// Regional parameters revision.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Common.RegParamsRevision RegParamsRevision {
      get { return regParamsRevision_; }
      set {
        regParamsRevision_ = value;
      }
    }

    /// <summary>Field number for the "supports_otaa" field.</summary>
    public const int SupportsOtaaFieldNumber = 8;
    private bool supportsOtaa_;
    /// <summary>
    /// Supports OTAA.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool SupportsOtaa {
      get { return supportsOtaa_; }
      set {
        supportsOtaa_ = value;
      }
    }

    /// <summary>Field number for the "supports_class_b" field.</summary>
    public const int SupportsClassBFieldNumber = 9;
    private bool supportsClassB_;
    /// <summary>
    /// Supports Class-B.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool SupportsClassB {
      get { return supportsClassB_; }
      set {
        supportsClassB_ = value;
      }
    }

    /// <summary>Field number for the "supports_class_c" field.</summary>
    public const int SupportsClassCFieldNumber = 10;
    private bool supportsClassC_;
    /// <summary>
    /// Supports Class-C.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool SupportsClassC {
      get { return supportsClassC_; }
      set {
        supportsClassC_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as DeviceProfileListItem);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(DeviceProfileListItem other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Id != other.Id) return false;
      if (!object.Equals(CreatedAt, other.CreatedAt)) return false;
      if (!object.Equals(UpdatedAt, other.UpdatedAt)) return false;
      if (Name != other.Name) return false;
      if (Region != other.Region) return false;
      if (MacVersion != other.MacVersion) return false;
      if (RegParamsRevision != other.RegParamsRevision) return false;
      if (SupportsOtaa != other.SupportsOtaa) return false;
      if (SupportsClassB != other.SupportsClassB) return false;
      if (SupportsClassC != other.SupportsClassC) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (createdAt_ != null) hash ^= CreatedAt.GetHashCode();
      if (updatedAt_ != null) hash ^= UpdatedAt.GetHashCode();
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (Region != global::Chirpstack.Common.Region.Eu868) hash ^= Region.GetHashCode();
      if (MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) hash ^= MacVersion.GetHashCode();
      if (RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) hash ^= RegParamsRevision.GetHashCode();
      if (SupportsOtaa != false) hash ^= SupportsOtaa.GetHashCode();
      if (SupportsClassB != false) hash ^= SupportsClassB.GetHashCode();
      if (SupportsClassC != false) hash ^= SupportsClassC.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (createdAt_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(CreatedAt);
      }
      if (updatedAt_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(UpdatedAt);
      }
      if (Name.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Name);
      }
      if (Region != global::Chirpstack.Common.Region.Eu868) {
        output.WriteRawTag(40);
        output.WriteEnum((int) Region);
      }
      if (MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) {
        output.WriteRawTag(48);
        output.WriteEnum((int) MacVersion);
      }
      if (RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) {
        output.WriteRawTag(56);
        output.WriteEnum((int) RegParamsRevision);
      }
      if (SupportsOtaa != false) {
        output.WriteRawTag(64);
        output.WriteBool(SupportsOtaa);
      }
      if (SupportsClassB != false) {
        output.WriteRawTag(72);
        output.WriteBool(SupportsClassB);
      }
      if (SupportsClassC != false) {
        output.WriteRawTag(80);
        output.WriteBool(SupportsClassC);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (createdAt_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(CreatedAt);
      }
      if (updatedAt_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(UpdatedAt);
      }
      if (Name.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(Name);
      }
      if (Region != global::Chirpstack.Common.Region.Eu868) {
        output.WriteRawTag(40);
        output.WriteEnum((int) Region);
      }
      if (MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) {
        output.WriteRawTag(48);
        output.WriteEnum((int) MacVersion);
      }
      if (RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) {
        output.WriteRawTag(56);
        output.WriteEnum((int) RegParamsRevision);
      }
      if (SupportsOtaa != false) {
        output.WriteRawTag(64);
        output.WriteBool(SupportsOtaa);
      }
      if (SupportsClassB != false) {
        output.WriteRawTag(72);
        output.WriteBool(SupportsClassB);
      }
      if (SupportsClassC != false) {
        output.WriteRawTag(80);
        output.WriteBool(SupportsClassC);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (createdAt_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CreatedAt);
      }
      if (updatedAt_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(UpdatedAt);
      }
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (Region != global::Chirpstack.Common.Region.Eu868) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Region);
      }
      if (MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) MacVersion);
      }
      if (RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) RegParamsRevision);
      }
      if (SupportsOtaa != false) {
        size += 1 + 1;
      }
      if (SupportsClassB != false) {
        size += 1 + 1;
      }
      if (SupportsClassC != false) {
        size += 1 + 1;
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(DeviceProfileListItem other) {
      if (other == null) {
        return;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      if (other.createdAt_ != null) {
        if (createdAt_ == null) {
          CreatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        CreatedAt.MergeFrom(other.CreatedAt);
      }
      if (other.updatedAt_ != null) {
        if (updatedAt_ == null) {
          UpdatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        UpdatedAt.MergeFrom(other.UpdatedAt);
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.Region != global::Chirpstack.Common.Region.Eu868) {
        Region = other.Region;
      }
      if (other.MacVersion != global::Chirpstack.Common.MacVersion.Lorawan100) {
        MacVersion = other.MacVersion;
      }
      if (other.RegParamsRevision != global::Chirpstack.Common.RegParamsRevision.A) {
        RegParamsRevision = other.RegParamsRevision;
      }
      if (other.SupportsOtaa != false) {
        SupportsOtaa = other.SupportsOtaa;
      }
      if (other.SupportsClassB != false) {
        SupportsClassB = other.SupportsClassB;
      }
      if (other.SupportsClassC != false) {
        SupportsClassC = other.SupportsClassC;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
          case 18: {
            if (createdAt_ == null) {
              CreatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(CreatedAt);
            break;
          }
          case 26: {
            if (updatedAt_ == null) {
              UpdatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(UpdatedAt);
            break;
          }
          case 34: {
            Name = input.ReadString();
            break;
          }
          case 40: {
            Region = (global::Chirpstack.Common.Region) input.ReadEnum();
            break;
          }
          case 48: {
            MacVersion = (global::Chirpstack.Common.MacVersion) input.ReadEnum();
            break;
          }
          case 56: {
            RegParamsRevision = (global::Chirpstack.Common.RegParamsRevision) input.ReadEnum();
            break;
          }
          case 64: {
            SupportsOtaa = input.ReadBool();
            break;
          }
          case 72: {
            SupportsClassB = input.ReadBool();
            break;
          }
          case 80: {
            SupportsClassC = input.ReadBool();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
          case 18: {
            if (createdAt_ == null) {
              CreatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(CreatedAt);
            break;
          }
          case 26: {
            if (updatedAt_ == null) {
              UpdatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(UpdatedAt);
            break;
          }
          case 34: {
            Name = input.ReadString();
            break;
          }
          case 40: {
            Region = (global::Chirpstack.Common.Region) input.ReadEnum();
            break;
          }
          case 48: {
            MacVersion = (global::Chirpstack.Common.MacVersion) input.ReadEnum();
            break;
          }
          case 56: {
            RegParamsRevision = (global::Chirpstack.Common.RegParamsRevision) input.ReadEnum();
            break;
          }
          case 64: {
            SupportsOtaa = input.ReadBool();
            break;
          }
          case 72: {
            SupportsClassB = input.ReadBool();
            break;
          }
          case 80: {
            SupportsClassC = input.ReadBool();
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class CreateDeviceProfileRequest : pb::IMessage<CreateDeviceProfileRequest>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<CreateDeviceProfileRequest> _parser = new pb::MessageParser<CreateDeviceProfileRequest>(() => new CreateDeviceProfileRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<CreateDeviceProfileRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[3]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public CreateDeviceProfileRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public CreateDeviceProfileRequest(CreateDeviceProfileRequest other) : this() {
      deviceProfile_ = other.deviceProfile_ != null ? other.deviceProfile_.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public CreateDeviceProfileRequest Clone() {
      return new CreateDeviceProfileRequest(this);
    }

    /// <summary>Field number for the "device_profile" field.</summary>
    public const int DeviceProfileFieldNumber = 1;
    private global::Chirpstack.Api.DeviceProfile deviceProfile_;
    /// <summary>
    /// Object to create.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Api.DeviceProfile DeviceProfile {
      get { return deviceProfile_; }
      set {
        deviceProfile_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as CreateDeviceProfileRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(CreateDeviceProfileRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(DeviceProfile, other.DeviceProfile)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (deviceProfile_ != null) hash ^= DeviceProfile.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (deviceProfile_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(DeviceProfile);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (deviceProfile_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(DeviceProfile);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (deviceProfile_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DeviceProfile);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(CreateDeviceProfileRequest other) {
      if (other == null) {
        return;
      }
      if (other.deviceProfile_ != null) {
        if (deviceProfile_ == null) {
          DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
        }
        DeviceProfile.MergeFrom(other.DeviceProfile);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (deviceProfile_ == null) {
              DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
            }
            input.ReadMessage(DeviceProfile);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (deviceProfile_ == null) {
              DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
            }
            input.ReadMessage(DeviceProfile);
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class CreateDeviceProfileResponse : pb::IMessage<CreateDeviceProfileResponse>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<CreateDeviceProfileResponse> _parser = new pb::MessageParser<CreateDeviceProfileResponse>(() => new CreateDeviceProfileResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<CreateDeviceProfileResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[4]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public CreateDeviceProfileResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public CreateDeviceProfileResponse(CreateDeviceProfileResponse other) : this() {
      id_ = other.id_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public CreateDeviceProfileResponse Clone() {
      return new CreateDeviceProfileResponse(this);
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private string id_ = "";
    /// <summary>
    /// ID (UUID).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as CreateDeviceProfileResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(CreateDeviceProfileResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Id != other.Id) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(CreateDeviceProfileResponse other) {
      if (other == null) {
        return;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class GetDeviceProfileRequest : pb::IMessage<GetDeviceProfileRequest>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<GetDeviceProfileRequest> _parser = new pb::MessageParser<GetDeviceProfileRequest>(() => new GetDeviceProfileRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<GetDeviceProfileRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[5]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public GetDeviceProfileRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public GetDeviceProfileRequest(GetDeviceProfileRequest other) : this() {
      id_ = other.id_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public GetDeviceProfileRequest Clone() {
      return new GetDeviceProfileRequest(this);
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private string id_ = "";
    /// <summary>
    /// ID (UUID).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as GetDeviceProfileRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(GetDeviceProfileRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Id != other.Id) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(GetDeviceProfileRequest other) {
      if (other == null) {
        return;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class GetDeviceProfileResponse : pb::IMessage<GetDeviceProfileResponse>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<GetDeviceProfileResponse> _parser = new pb::MessageParser<GetDeviceProfileResponse>(() => new GetDeviceProfileResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<GetDeviceProfileResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[6]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public GetDeviceProfileResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public GetDeviceProfileResponse(GetDeviceProfileResponse other) : this() {
      deviceProfile_ = other.deviceProfile_ != null ? other.deviceProfile_.Clone() : null;
      createdAt_ = other.createdAt_ != null ? other.createdAt_.Clone() : null;
      updatedAt_ = other.updatedAt_ != null ? other.updatedAt_.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public GetDeviceProfileResponse Clone() {
      return new GetDeviceProfileResponse(this);
    }

    /// <summary>Field number for the "device_profile" field.</summary>
    public const int DeviceProfileFieldNumber = 1;
    private global::Chirpstack.Api.DeviceProfile deviceProfile_;
    /// <summary>
    /// Device-profile object.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Api.DeviceProfile DeviceProfile {
      get { return deviceProfile_; }
      set {
        deviceProfile_ = value;
      }
    }

    /// <summary>Field number for the "created_at" field.</summary>
    public const int CreatedAtFieldNumber = 2;
    private global::Google.Protobuf.WellKnownTypes.Timestamp createdAt_;
    /// <summary>
    /// Created at timestamp.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp CreatedAt {
      get { return createdAt_; }
      set {
        createdAt_ = value;
      }
    }

    /// <summary>Field number for the "updated_at" field.</summary>
    public const int UpdatedAtFieldNumber = 3;
    private global::Google.Protobuf.WellKnownTypes.Timestamp updatedAt_;
    /// <summary>
    /// Last update timestamp.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp UpdatedAt {
      get { return updatedAt_; }
      set {
        updatedAt_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as GetDeviceProfileResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(GetDeviceProfileResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(DeviceProfile, other.DeviceProfile)) return false;
      if (!object.Equals(CreatedAt, other.CreatedAt)) return false;
      if (!object.Equals(UpdatedAt, other.UpdatedAt)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (deviceProfile_ != null) hash ^= DeviceProfile.GetHashCode();
      if (createdAt_ != null) hash ^= CreatedAt.GetHashCode();
      if (updatedAt_ != null) hash ^= UpdatedAt.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (deviceProfile_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(DeviceProfile);
      }
      if (createdAt_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(CreatedAt);
      }
      if (updatedAt_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(UpdatedAt);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (deviceProfile_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(DeviceProfile);
      }
      if (createdAt_ != null) {
        output.WriteRawTag(18);
        output.WriteMessage(CreatedAt);
      }
      if (updatedAt_ != null) {
        output.WriteRawTag(26);
        output.WriteMessage(UpdatedAt);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (deviceProfile_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DeviceProfile);
      }
      if (createdAt_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(CreatedAt);
      }
      if (updatedAt_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(UpdatedAt);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(GetDeviceProfileResponse other) {
      if (other == null) {
        return;
      }
      if (other.deviceProfile_ != null) {
        if (deviceProfile_ == null) {
          DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
        }
        DeviceProfile.MergeFrom(other.DeviceProfile);
      }
      if (other.createdAt_ != null) {
        if (createdAt_ == null) {
          CreatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        CreatedAt.MergeFrom(other.CreatedAt);
      }
      if (other.updatedAt_ != null) {
        if (updatedAt_ == null) {
          UpdatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        UpdatedAt.MergeFrom(other.UpdatedAt);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (deviceProfile_ == null) {
              DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
            }
            input.ReadMessage(DeviceProfile);
            break;
          }
          case 18: {
            if (createdAt_ == null) {
              CreatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(CreatedAt);
            break;
          }
          case 26: {
            if (updatedAt_ == null) {
              UpdatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(UpdatedAt);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (deviceProfile_ == null) {
              DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
            }
            input.ReadMessage(DeviceProfile);
            break;
          }
          case 18: {
            if (createdAt_ == null) {
              CreatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(CreatedAt);
            break;
          }
          case 26: {
            if (updatedAt_ == null) {
              UpdatedAt = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(UpdatedAt);
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class UpdateDeviceProfileRequest : pb::IMessage<UpdateDeviceProfileRequest>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<UpdateDeviceProfileRequest> _parser = new pb::MessageParser<UpdateDeviceProfileRequest>(() => new UpdateDeviceProfileRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<UpdateDeviceProfileRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[7]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public UpdateDeviceProfileRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public UpdateDeviceProfileRequest(UpdateDeviceProfileRequest other) : this() {
      deviceProfile_ = other.deviceProfile_ != null ? other.deviceProfile_.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public UpdateDeviceProfileRequest Clone() {
      return new UpdateDeviceProfileRequest(this);
    }

    /// <summary>Field number for the "device_profile" field.</summary>
    public const int DeviceProfileFieldNumber = 1;
    private global::Chirpstack.Api.DeviceProfile deviceProfile_;
    /// <summary>
    /// Device-profile object.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Chirpstack.Api.DeviceProfile DeviceProfile {
      get { return deviceProfile_; }
      set {
        deviceProfile_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as UpdateDeviceProfileRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(UpdateDeviceProfileRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (!object.Equals(DeviceProfile, other.DeviceProfile)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (deviceProfile_ != null) hash ^= DeviceProfile.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (deviceProfile_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(DeviceProfile);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (deviceProfile_ != null) {
        output.WriteRawTag(10);
        output.WriteMessage(DeviceProfile);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (deviceProfile_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DeviceProfile);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(UpdateDeviceProfileRequest other) {
      if (other == null) {
        return;
      }
      if (other.deviceProfile_ != null) {
        if (deviceProfile_ == null) {
          DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
        }
        DeviceProfile.MergeFrom(other.DeviceProfile);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            if (deviceProfile_ == null) {
              DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
            }
            input.ReadMessage(DeviceProfile);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            if (deviceProfile_ == null) {
              DeviceProfile = new global::Chirpstack.Api.DeviceProfile();
            }
            input.ReadMessage(DeviceProfile);
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class DeleteDeviceProfileRequest : pb::IMessage<DeleteDeviceProfileRequest>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<DeleteDeviceProfileRequest> _parser = new pb::MessageParser<DeleteDeviceProfileRequest>(() => new DeleteDeviceProfileRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<DeleteDeviceProfileRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[8]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeleteDeviceProfileRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeleteDeviceProfileRequest(DeleteDeviceProfileRequest other) : this() {
      id_ = other.id_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public DeleteDeviceProfileRequest Clone() {
      return new DeleteDeviceProfileRequest(this);
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private string id_ = "";
    /// <summary>
    /// ID (UUID).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as DeleteDeviceProfileRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(DeleteDeviceProfileRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Id != other.Id) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(DeleteDeviceProfileRequest other) {
      if (other == null) {
        return;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class ListDeviceProfilesRequest : pb::IMessage<ListDeviceProfilesRequest>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ListDeviceProfilesRequest> _parser = new pb::MessageParser<ListDeviceProfilesRequest>(() => new ListDeviceProfilesRequest());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ListDeviceProfilesRequest> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[9]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfilesRequest() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfilesRequest(ListDeviceProfilesRequest other) : this() {
      limit_ = other.limit_;
      offset_ = other.offset_;
      search_ = other.search_;
      tenantId_ = other.tenantId_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfilesRequest Clone() {
      return new ListDeviceProfilesRequest(this);
    }

    /// <summary>Field number for the "limit" field.</summary>
    public const int LimitFieldNumber = 1;
    private uint limit_;
    /// <summary>
    /// Max number of device-profiles to return in the result-set.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint Limit {
      get { return limit_; }
      set {
        limit_ = value;
      }
    }

    /// <summary>Field number for the "offset" field.</summary>
    public const int OffsetFieldNumber = 2;
    private uint offset_;
    /// <summary>
    /// Offset in the result-set (for pagination).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint Offset {
      get { return offset_; }
      set {
        offset_ = value;
      }
    }

    /// <summary>Field number for the "search" field.</summary>
    public const int SearchFieldNumber = 3;
    private string search_ = "";
    /// <summary>
    /// If set, the given string will be used to search on name.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Search {
      get { return search_; }
      set {
        search_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "tenant_id" field.</summary>
    public const int TenantIdFieldNumber = 4;
    private string tenantId_ = "";
    /// <summary>
    /// Tenant ID to list the device-profiles for.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string TenantId {
      get { return tenantId_; }
      set {
        tenantId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as ListDeviceProfilesRequest);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ListDeviceProfilesRequest other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Limit != other.Limit) return false;
      if (Offset != other.Offset) return false;
      if (Search != other.Search) return false;
      if (TenantId != other.TenantId) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Limit != 0) hash ^= Limit.GetHashCode();
      if (Offset != 0) hash ^= Offset.GetHashCode();
      if (Search.Length != 0) hash ^= Search.GetHashCode();
      if (TenantId.Length != 0) hash ^= TenantId.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Limit != 0) {
        output.WriteRawTag(8);
        output.WriteUInt32(Limit);
      }
      if (Offset != 0) {
        output.WriteRawTag(16);
        output.WriteUInt32(Offset);
      }
      if (Search.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Search);
      }
      if (TenantId.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(TenantId);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Limit != 0) {
        output.WriteRawTag(8);
        output.WriteUInt32(Limit);
      }
      if (Offset != 0) {
        output.WriteRawTag(16);
        output.WriteUInt32(Offset);
      }
      if (Search.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(Search);
      }
      if (TenantId.Length != 0) {
        output.WriteRawTag(34);
        output.WriteString(TenantId);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Limit != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Limit);
      }
      if (Offset != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Offset);
      }
      if (Search.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Search);
      }
      if (TenantId.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(TenantId);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ListDeviceProfilesRequest other) {
      if (other == null) {
        return;
      }
      if (other.Limit != 0) {
        Limit = other.Limit;
      }
      if (other.Offset != 0) {
        Offset = other.Offset;
      }
      if (other.Search.Length != 0) {
        Search = other.Search;
      }
      if (other.TenantId.Length != 0) {
        TenantId = other.TenantId;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 8: {
            Limit = input.ReadUInt32();
            break;
          }
          case 16: {
            Offset = input.ReadUInt32();
            break;
          }
          case 26: {
            Search = input.ReadString();
            break;
          }
          case 34: {
            TenantId = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 8: {
            Limit = input.ReadUInt32();
            break;
          }
          case 16: {
            Offset = input.ReadUInt32();
            break;
          }
          case 26: {
            Search = input.ReadString();
            break;
          }
          case 34: {
            TenantId = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class ListDeviceProfilesResponse : pb::IMessage<ListDeviceProfilesResponse>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ListDeviceProfilesResponse> _parser = new pb::MessageParser<ListDeviceProfilesResponse>(() => new ListDeviceProfilesResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ListDeviceProfilesResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[10]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfilesResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfilesResponse(ListDeviceProfilesResponse other) : this() {
      totalCount_ = other.totalCount_;
      result_ = other.result_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfilesResponse Clone() {
      return new ListDeviceProfilesResponse(this);
    }

    /// <summary>Field number for the "total_count" field.</summary>
    public const int TotalCountFieldNumber = 1;
    private uint totalCount_;
    /// <summary>
    /// Total number of device-profiles.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint TotalCount {
      get { return totalCount_; }
      set {
        totalCount_ = value;
      }
    }

    /// <summary>Field number for the "result" field.</summary>
    public const int ResultFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Chirpstack.Api.DeviceProfileListItem> _repeated_result_codec
        = pb::FieldCodec.ForMessage(18, global::Chirpstack.Api.DeviceProfileListItem.Parser);
    private readonly pbc::RepeatedField<global::Chirpstack.Api.DeviceProfileListItem> result_ = new pbc::RepeatedField<global::Chirpstack.Api.DeviceProfileListItem>();
    /// <summary>
    /// Result-set.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Chirpstack.Api.DeviceProfileListItem> Result {
      get { return result_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as ListDeviceProfilesResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ListDeviceProfilesResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (TotalCount != other.TotalCount) return false;
      if(!result_.Equals(other.result_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (TotalCount != 0) hash ^= TotalCount.GetHashCode();
      hash ^= result_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (TotalCount != 0) {
        output.WriteRawTag(8);
        output.WriteUInt32(TotalCount);
      }
      result_.WriteTo(output, _repeated_result_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (TotalCount != 0) {
        output.WriteRawTag(8);
        output.WriteUInt32(TotalCount);
      }
      result_.WriteTo(ref output, _repeated_result_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (TotalCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(TotalCount);
      }
      size += result_.CalculateSize(_repeated_result_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ListDeviceProfilesResponse other) {
      if (other == null) {
        return;
      }
      if (other.TotalCount != 0) {
        TotalCount = other.TotalCount;
      }
      result_.Add(other.result_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 8: {
            TotalCount = input.ReadUInt32();
            break;
          }
          case 18: {
            result_.AddEntriesFrom(input, _repeated_result_codec);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 8: {
            TotalCount = input.ReadUInt32();
            break;
          }
          case 18: {
            result_.AddEntriesFrom(ref input, _repeated_result_codec);
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class ListDeviceProfileAdrAlgorithmsResponse : pb::IMessage<ListDeviceProfileAdrAlgorithmsResponse>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<ListDeviceProfileAdrAlgorithmsResponse> _parser = new pb::MessageParser<ListDeviceProfileAdrAlgorithmsResponse>(() => new ListDeviceProfileAdrAlgorithmsResponse());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<ListDeviceProfileAdrAlgorithmsResponse> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[11]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfileAdrAlgorithmsResponse() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfileAdrAlgorithmsResponse(ListDeviceProfileAdrAlgorithmsResponse other) : this() {
      totalCount_ = other.totalCount_;
      result_ = other.result_.Clone();
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public ListDeviceProfileAdrAlgorithmsResponse Clone() {
      return new ListDeviceProfileAdrAlgorithmsResponse(this);
    }

    /// <summary>Field number for the "total_count" field.</summary>
    public const int TotalCountFieldNumber = 1;
    private uint totalCount_;
    /// <summary>
    /// Total number of algorithms.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public uint TotalCount {
      get { return totalCount_; }
      set {
        totalCount_ = value;
      }
    }

    /// <summary>Field number for the "result" field.</summary>
    public const int ResultFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Chirpstack.Api.AdrAlgorithmListItem> _repeated_result_codec
        = pb::FieldCodec.ForMessage(18, global::Chirpstack.Api.AdrAlgorithmListItem.Parser);
    private readonly pbc::RepeatedField<global::Chirpstack.Api.AdrAlgorithmListItem> result_ = new pbc::RepeatedField<global::Chirpstack.Api.AdrAlgorithmListItem>();
    /// <summary>
    /// Result-set.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Chirpstack.Api.AdrAlgorithmListItem> Result {
      get { return result_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as ListDeviceProfileAdrAlgorithmsResponse);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(ListDeviceProfileAdrAlgorithmsResponse other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (TotalCount != other.TotalCount) return false;
      if(!result_.Equals(other.result_)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (TotalCount != 0) hash ^= TotalCount.GetHashCode();
      hash ^= result_.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (TotalCount != 0) {
        output.WriteRawTag(8);
        output.WriteUInt32(TotalCount);
      }
      result_.WriteTo(output, _repeated_result_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (TotalCount != 0) {
        output.WriteRawTag(8);
        output.WriteUInt32(TotalCount);
      }
      result_.WriteTo(ref output, _repeated_result_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (TotalCount != 0) {
        size += 1 + pb::CodedOutputStream.ComputeUInt32Size(TotalCount);
      }
      size += result_.CalculateSize(_repeated_result_codec);
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(ListDeviceProfileAdrAlgorithmsResponse other) {
      if (other == null) {
        return;
      }
      if (other.TotalCount != 0) {
        TotalCount = other.TotalCount;
      }
      result_.Add(other.result_);
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 8: {
            TotalCount = input.ReadUInt32();
            break;
          }
          case 18: {
            result_.AddEntriesFrom(input, _repeated_result_codec);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 8: {
            TotalCount = input.ReadUInt32();
            break;
          }
          case 18: {
            result_.AddEntriesFrom(ref input, _repeated_result_codec);
            break;
          }
        }
      }
    }
    #endif

  }

  public sealed partial class AdrAlgorithmListItem : pb::IMessage<AdrAlgorithmListItem>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<AdrAlgorithmListItem> _parser = new pb::MessageParser<AdrAlgorithmListItem>(() => new AdrAlgorithmListItem());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<AdrAlgorithmListItem> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Chirpstack.Api.DeviceProfileReflection.Descriptor.MessageTypes[12]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdrAlgorithmListItem() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdrAlgorithmListItem(AdrAlgorithmListItem other) : this() {
      id_ = other.id_;
      name_ = other.name_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdrAlgorithmListItem Clone() {
      return new AdrAlgorithmListItem(this);
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 1;
    private string id_ = "";
    /// <summary>
    /// Algorithm ID.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 2;
    private string name_ = "";
    /// <summary>
    /// Algorithm name.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as AdrAlgorithmListItem);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(AdrAlgorithmListItem other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Id != other.Id) return false;
      if (Name != other.Name) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (Name.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(Name);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Id.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Id);
      }
      if (Name.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(Name);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(AdrAlgorithmListItem other) {
      if (other == null) {
        return;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
          case 18: {
            Name = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Id = input.ReadString();
            break;
          }
          case 18: {
            Name = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  #endregion

}

#endregion Designer generated code
