// Code generated by "go run types_generate.go"; DO NOT EDIT.

package dns

import (
	
	
)

// TypeToRR is a map of constructors for each RR type.
var TypeToRR = map[uint16]func() RR{
	TypeA:          func() RR { return new(A) },
	TypeAAAA:       func() RR { return new(AAAA) },
	TypeAFSDB:      func() RR { return new(AFSDB) },
	TypeAMTRELAY:   func() RR { return new(AMTRELAY) },
	TypeANY:        func() RR { return new(ANY) },
	TypeAPL:        func() RR { return new(APL) },
	TypeAVC:        func() RR { return new(AVC) },
	TypeCAA:        func() RR { return new(CAA) },
	TypeCDNSKEY:    func() RR { return new(CDNSKEY) },
	TypeCDS:        func() RR { return new(CDS) },
	TypeCERT:       func() RR { return new(CERT) },
	TypeCNAME:      func() RR { return new(CNAME) },
	TypeCSYNC:      func() RR { return new(CSYNC) },
	TypeDHCID:      func() RR { return new(DHCID) },
	TypeDLV:        func() RR { return new(DLV) },
	TypeDNAME:      func() RR { return new(DNAME) },
	TypeDNSKEY:     func() RR { return new(DNSKEY) },
	TypeDS:         func() RR { return new(DS) },
	TypeEID:        func() RR { return new(EID) },
	TypeEUI48:      func() RR { return new(EUI48) },
	TypeEUI64:      func() RR { return new(EUI64) },
	TypeGID:        func() RR { return new(GID) },
	TypeGPOS:       func() RR { return new(GPOS) },
	TypeHINFO:      func() RR { return new(HINFO) },
	TypeHIP:        func() RR { return new(HIP) },
	TypeHTTPS:      func() RR { return new(HTTPS) },
	TypeIPSECKEY:   func() RR { return new(IPSECKEY) },
	TypeISDN:       func() RR { return new(ISDN) },
	TypeKEY:        func() RR { return new(KEY) },
	TypeKX:         func() RR { return new(KX) },
	TypeL32:        func() RR { return new(L32) },
	TypeL64:        func() RR { return new(L64) },
	TypeLOC:        func() RR { return new(LOC) },
	TypeLP:         func() RR { return new(LP) },
	TypeMB:         func() RR { return new(MB) },
	TypeMD:         func() RR { return new(MD) },
	TypeMF:         func() RR { return new(MF) },
	TypeMG:         func() RR { return new(MG) },
	TypeMINFO:      func() RR { return new(MINFO) },
	TypeMR:         func() RR { return new(MR) },
	TypeMX:         func() RR { return new(MX) },
	TypeNAPTR:      func() RR { return new(NAPTR) },
	TypeNID:        func() RR { return new(NID) },
	TypeNIMLOC:     func() RR { return new(NIMLOC) },
	TypeNINFO:      func() RR { return new(NINFO) },
	TypeNS:         func() RR { return new(NS) },
	TypeNSAPPTR:    func() RR { return new(NSAPPTR) },
	TypeNSEC:       func() RR { return new(NSEC) },
	TypeNSEC3:      func() RR { return new(NSEC3) },
	TypeNSEC3PARAM: func() RR { return new(NSEC3PARAM) },
	TypeNULL:       func() RR { return new(NULL) },
	TypeNXNAME:     func() RR { return new(NXNAME) },
	TypeNXT:        func() RR { return new(NXT) },
	TypeOPENPGPKEY: func() RR { return new(OPENPGPKEY) },
	TypeOPT:        func() RR { return new(OPT) },
	TypePTR:        func() RR { return new(PTR) },
	TypePX:         func() RR { return new(PX) },
	TypeRESINFO:    func() RR { return new(RESINFO) },
	TypeRKEY:       func() RR { return new(RKEY) },
	TypeRP:         func() RR { return new(RP) },
	TypeRRSIG:      func() RR { return new(RRSIG) },
	TypeRT:         func() RR { return new(RT) },
	TypeSIG:        func() RR { return new(SIG) },
	TypeSMIMEA:     func() RR { return new(SMIMEA) },
	TypeSOA:        func() RR { return new(SOA) },
	TypeSPF:        func() RR { return new(SPF) },
	TypeSRV:        func() RR { return new(SRV) },
	TypeSSHFP:      func() RR { return new(SSHFP) },
	TypeSVCB:       func() RR { return new(SVCB) },
	TypeTA:         func() RR { return new(TA) },
	TypeTALINK:     func() RR { return new(TALINK) },
	TypeTKEY:       func() RR { return new(TKEY) },
	TypeTLSA:       func() RR { return new(TLSA) },
	TypeTSIG:       func() RR { return new(TSIG) },
	TypeTXT:        func() RR { return new(TXT) },
	TypeUID:        func() RR { return new(UID) },
	TypeUINFO:      func() RR { return new(UINFO) },
	TypeURI:        func() RR { return new(URI) },
	TypeX25:        func() RR { return new(X25) },
	TypeZONEMD:     func() RR { return new(ZONEMD) },
}

// TypeToString is a map of strings for each RR type.
var TypeToString = map[uint16]string{
	TypeA:          "A",
	TypeAAAA:       "AAAA",
	TypeAFSDB:      "AFSDB",
	TypeAMTRELAY:   "AMTRELAY",
	TypeANY:        "ANY",
	TypeAPL:        "APL",
	TypeATMA:       "ATMA",
	TypeAVC:        "AVC",
	TypeAXFR:       "AXFR",
	TypeCAA:        "CAA",
	TypeCDNSKEY:    "CDNSKEY",
	TypeCDS:        "CDS",
	TypeCERT:       "CERT",
	TypeCNAME:      "CNAME",
	TypeCSYNC:      "CSYNC",
	TypeDHCID:      "DHCID",
	TypeDLV:        "DLV",
	TypeDNAME:      "DNAME",
	TypeDNSKEY:     "DNSKEY",
	TypeDS:         "DS",
	TypeEID:        "EID",
	TypeEUI48:      "EUI48",
	TypeEUI64:      "EUI64",
	TypeGID:        "GID",
	TypeGPOS:       "GPOS",
	TypeHINFO:      "HINFO",
	TypeHIP:        "HIP",
	TypeHTTPS:      "HTTPS",
	TypeIPSECKEY:   "IPSECKEY",
	TypeISDN:       "ISDN",
	TypeIXFR:       "IXFR",
	TypeKEY:        "KEY",
	TypeKX:         "KX",
	TypeL32:        "L32",
	TypeL64:        "L64",
	TypeLOC:        "LOC",
	TypeLP:         "LP",
	TypeMAILA:      "MAILA",
	TypeMAILB:      "MAILB",
	TypeMB:         "MB",
	TypeMD:         "MD",
	TypeMF:         "MF",
	TypeMG:         "MG",
	TypeMINFO:      "MINFO",
	TypeMR:         "MR",
	TypeMX:         "MX",
	TypeNAPTR:      "NAPTR",
	TypeNID:        "NID",
	TypeNIMLOC:     "NIMLOC",
	TypeNINFO:      "NINFO",
	TypeNS:         "NS",
	TypeNSEC:       "NSEC",
	TypeNSEC3:      "NSEC3",
	TypeNSEC3PARAM: "NSEC3PARAM",
	TypeNULL:       "NULL",
	TypeNXNAME:     "NXNAME",
	TypeNXT:        "NXT",
	TypeNone:       "None",
	TypeOPENPGPKEY: "OPENPGPKEY",
	TypeOPT:        "OPT",
	TypePTR:        "PTR",
	TypePX:         "PX",
	TypeRESINFO:    "RESINFO",
	TypeRKEY:       "RKEY",
	TypeRP:         "RP",
	TypeRRSIG:      "RRSIG",
	TypeRT:         "RT",
	TypeReserved:   "Reserved",
	TypeSIG:        "SIG",
	TypeSMIMEA:     "SMIMEA",
	TypeSOA:        "SOA",
	TypeSPF:        "SPF",
	TypeSRV:        "SRV",
	TypeSSHFP:      "SSHFP",
	TypeSVCB:       "SVCB",
	TypeTA:         "TA",
	TypeTALINK:     "TALINK",
	TypeTKEY:       "TKEY",
	TypeTLSA:       "TLSA",
	TypeTSIG:       "TSIG",
	TypeTXT:        "TXT",
	TypeUID:        "UID",
	TypeUINFO:      "UINFO",
	TypeUNSPEC:     "UNSPEC",
	TypeURI:        "URI",
	TypeX25:        "X25",
	TypeZONEMD:     "ZONEMD",
	TypeNSAPPTR:    "NSAP-PTR",
}

func ( *A) () *RR_Header          { return &.Hdr }
func ( *AAAA) () *RR_Header       { return &.Hdr }
func ( *AFSDB) () *RR_Header      { return &.Hdr }
func ( *AMTRELAY) () *RR_Header   { return &.Hdr }
func ( *ANY) () *RR_Header        { return &.Hdr }
func ( *APL) () *RR_Header        { return &.Hdr }
func ( *AVC) () *RR_Header        { return &.Hdr }
func ( *CAA) () *RR_Header        { return &.Hdr }
func ( *CDNSKEY) () *RR_Header    { return &.Hdr }
func ( *CDS) () *RR_Header        { return &.Hdr }
func ( *CERT) () *RR_Header       { return &.Hdr }
func ( *CNAME) () *RR_Header      { return &.Hdr }
func ( *CSYNC) () *RR_Header      { return &.Hdr }
func ( *DHCID) () *RR_Header      { return &.Hdr }
func ( *DLV) () *RR_Header        { return &.Hdr }
func ( *DNAME) () *RR_Header      { return &.Hdr }
func ( *DNSKEY) () *RR_Header     { return &.Hdr }
func ( *DS) () *RR_Header         { return &.Hdr }
func ( *EID) () *RR_Header        { return &.Hdr }
func ( *EUI48) () *RR_Header      { return &.Hdr }
func ( *EUI64) () *RR_Header      { return &.Hdr }
func ( *GID) () *RR_Header        { return &.Hdr }
func ( *GPOS) () *RR_Header       { return &.Hdr }
func ( *HINFO) () *RR_Header      { return &.Hdr }
func ( *HIP) () *RR_Header        { return &.Hdr }
func ( *HTTPS) () *RR_Header      { return &.Hdr }
func ( *IPSECKEY) () *RR_Header   { return &.Hdr }
func ( *ISDN) () *RR_Header       { return &.Hdr }
func ( *KEY) () *RR_Header        { return &.Hdr }
func ( *KX) () *RR_Header         { return &.Hdr }
func ( *L32) () *RR_Header        { return &.Hdr }
func ( *L64) () *RR_Header        { return &.Hdr }
func ( *LOC) () *RR_Header        { return &.Hdr }
func ( *LP) () *RR_Header         { return &.Hdr }
func ( *MB) () *RR_Header         { return &.Hdr }
func ( *MD) () *RR_Header         { return &.Hdr }
func ( *MF) () *RR_Header         { return &.Hdr }
func ( *MG) () *RR_Header         { return &.Hdr }
func ( *MINFO) () *RR_Header      { return &.Hdr }
func ( *MR) () *RR_Header         { return &.Hdr }
func ( *MX) () *RR_Header         { return &.Hdr }
func ( *NAPTR) () *RR_Header      { return &.Hdr }
func ( *NID) () *RR_Header        { return &.Hdr }
func ( *NIMLOC) () *RR_Header     { return &.Hdr }
func ( *NINFO) () *RR_Header      { return &.Hdr }
func ( *NS) () *RR_Header         { return &.Hdr }
func ( *NSAPPTR) () *RR_Header    { return &.Hdr }
func ( *NSEC) () *RR_Header       { return &.Hdr }
func ( *NSEC3) () *RR_Header      { return &.Hdr }
func ( *NSEC3PARAM) () *RR_Header { return &.Hdr }
func ( *NULL) () *RR_Header       { return &.Hdr }
func ( *NXNAME) () *RR_Header     { return &.Hdr }
func ( *NXT) () *RR_Header        { return &.Hdr }
func ( *OPENPGPKEY) () *RR_Header { return &.Hdr }
func ( *OPT) () *RR_Header        { return &.Hdr }
func ( *PTR) () *RR_Header        { return &.Hdr }
func ( *PX) () *RR_Header         { return &.Hdr }
func ( *RESINFO) () *RR_Header    { return &.Hdr }
func ( *RFC3597) () *RR_Header    { return &.Hdr }
func ( *RKEY) () *RR_Header       { return &.Hdr }
func ( *RP) () *RR_Header         { return &.Hdr }
func ( *RRSIG) () *RR_Header      { return &.Hdr }
func ( *RT) () *RR_Header         { return &.Hdr }
func ( *SIG) () *RR_Header        { return &.Hdr }
func ( *SMIMEA) () *RR_Header     { return &.Hdr }
func ( *SOA) () *RR_Header        { return &.Hdr }
func ( *SPF) () *RR_Header        { return &.Hdr }
func ( *SRV) () *RR_Header        { return &.Hdr }
func ( *SSHFP) () *RR_Header      { return &.Hdr }
func ( *SVCB) () *RR_Header       { return &.Hdr }
func ( *TA) () *RR_Header         { return &.Hdr }
func ( *TALINK) () *RR_Header     { return &.Hdr }
func ( *TKEY) () *RR_Header       { return &.Hdr }
func ( *TLSA) () *RR_Header       { return &.Hdr }
func ( *TSIG) () *RR_Header       { return &.Hdr }
func ( *TXT) () *RR_Header        { return &.Hdr }
func ( *UID) () *RR_Header        { return &.Hdr }
func ( *UINFO) () *RR_Header      { return &.Hdr }
func ( *URI) () *RR_Header        { return &.Hdr }
func ( *X25) () *RR_Header        { return &.Hdr }
func ( *ZONEMD) () *RR_Header     { return &.Hdr }

// len() functions
func ( *A) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	if len(.A) != 0 {
		 += net.IPv4len
	}
	return 
}

func ( *AAAA) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	if len(.AAAA) != 0 {
		 += net.IPv6len
	}
	return 
}

func ( *AFSDB) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Subtype
	 += domainNameLen(.Hostname, +, , false)
	return 
}

func ( *AMTRELAY) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++ // Precedence
	++ // GatewayType
	switch .GatewayType {
	case AMTRELAYIPv4:
		 += net.IPv4len
	case AMTRELAYIPv6:
		 += net.IPv6len
	case AMTRELAYHost:
		 += len(.GatewayHost) + 1
	}
	return 
}

func ( *ANY) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	return 
}

func ( *APL) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	for ,  := range .Prefixes {
		 += .len()
	}
	return 
}

func ( *AVC) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	for ,  := range .Txt {
		 += len() + 1
	}
	return 
}

func ( *CAA) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++ // Flag
	 += len(.Tag) + 1
	 += len(.Value)
	return 
}

func ( *CERT) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Type
	 += 2 // KeyTag
	++    // Algorithm
	 += base64.StdEncoding.DecodedLen(len(.Certificate))
	return 
}

func ( *CNAME) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Target, +, , true)
	return 
}

func ( *DHCID) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += base64.StdEncoding.DecodedLen(len(.Digest))
	return 
}

func ( *DNAME) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Target, +, , false)
	return 
}

func ( *DNSKEY) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Flags
	++    // Protocol
	++    // Algorithm
	 += base64.StdEncoding.DecodedLen(len(.PublicKey))
	return 
}

func ( *DS) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // KeyTag
	++    // Algorithm
	++    // DigestType
	 += len(.Digest) / 2
	return 
}

func ( *EID) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.Endpoint) / 2
	return 
}

func ( *EUI48) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 6 // Address
	return 
}

func ( *EUI64) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 8 // Address
	return 
}

func ( *GID) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 4 // Gid
	return 
}

func ( *GPOS) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.Longitude) + 1
	 += len(.Latitude) + 1
	 += len(.Altitude) + 1
	return 
}

func ( *HINFO) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.Cpu) + 1
	 += len(.Os) + 1
	return 
}

func ( *HIP) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++    // HitLength
	++    // PublicKeyAlgorithm
	 += 2 // PublicKeyLength
	 += len(.Hit) / 2
	 += base64.StdEncoding.DecodedLen(len(.PublicKey))
	for ,  := range .RendezvousServers {
		 += domainNameLen(, +, , false)
	}
	return 
}

func ( *IPSECKEY) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++ // Precedence
	++ // GatewayType
	++ // Algorithm
	switch .GatewayType {
	case IPSECGatewayIPv4:
		 += net.IPv4len
	case IPSECGatewayIPv6:
		 += net.IPv6len
	case IPSECGatewayHost:
		 += len(.GatewayHost) + 1
	}
	 += base64.StdEncoding.DecodedLen(len(.PublicKey))
	return 
}

func ( *ISDN) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.Address) + 1
	 += len(.SubAddress) + 1
	return 
}

func ( *KX) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Preference
	 += domainNameLen(.Exchanger, +, , false)
	return 
}

func ( *L32) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Preference
	if len(.Locator32) != 0 {
		 += net.IPv4len
	}
	return 
}

func ( *L64) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Preference
	 += 8 // Locator64
	return 
}

func ( *LOC) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++    // Version
	++    // Size
	++    // HorizPre
	++    // VertPre
	 += 4 // Latitude
	 += 4 // Longitude
	 += 4 // Altitude
	return 
}

func ( *LP) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Preference
	 += domainNameLen(.Fqdn, +, , false)
	return 
}

func ( *MB) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Mb, +, , true)
	return 
}

func ( *MD) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Md, +, , true)
	return 
}

func ( *MF) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Mf, +, , true)
	return 
}

func ( *MG) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Mg, +, , true)
	return 
}

func ( *MINFO) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Rmail, +, , true)
	 += domainNameLen(.Email, +, , true)
	return 
}

func ( *MR) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Mr, +, , true)
	return 
}

func ( *MX) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Preference
	 += domainNameLen(.Mx, +, , true)
	return 
}

func ( *NAPTR) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Order
	 += 2 // Preference
	 += len(.Flags) + 1
	 += len(.Service) + 1
	 += len(.Regexp) + 1
	 += domainNameLen(.Replacement, +, , false)
	return 
}

func ( *NID) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Preference
	 += 8 // NodeID
	return 
}

func ( *NIMLOC) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.Locator) / 2
	return 
}

func ( *NINFO) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	for ,  := range .ZSData {
		 += len() + 1
	}
	return 
}

func ( *NS) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Ns, +, , true)
	return 
}

func ( *NSAPPTR) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Ptr, +, , false)
	return 
}

func ( *NSEC3PARAM) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++    // Hash
	++    // Flags
	 += 2 // Iterations
	++    // SaltLength
	 += len(.Salt) / 2
	return 
}

func ( *NULL) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.Data)
	return 
}

func ( *NXNAME) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	return 
}

func ( *OPENPGPKEY) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += base64.StdEncoding.DecodedLen(len(.PublicKey))
	return 
}

func ( *PTR) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Ptr, +, , true)
	return 
}

func ( *PX) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Preference
	 += domainNameLen(.Map822, +, , false)
	 += domainNameLen(.Mapx400, +, , false)
	return 
}

func ( *RESINFO) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	for ,  := range .Txt {
		 += len() + 1
	}
	return 
}

func ( *RFC3597) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.Rdata) / 2
	return 
}

func ( *RKEY) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Flags
	++    // Protocol
	++    // Algorithm
	 += base64.StdEncoding.DecodedLen(len(.PublicKey))
	return 
}

func ( *RP) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Mbox, +, , false)
	 += domainNameLen(.Txt, +, , false)
	return 
}

func ( *RRSIG) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // TypeCovered
	++    // Algorithm
	++    // Labels
	 += 4 // OrigTtl
	 += 4 // Expiration
	 += 4 // Inception
	 += 2 // KeyTag
	 += domainNameLen(.SignerName, +, , false)
	 += base64.StdEncoding.DecodedLen(len(.Signature))
	return 
}

func ( *RT) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Preference
	 += domainNameLen(.Host, +, , false)
	return 
}

func ( *SMIMEA) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++ // Usage
	++ // Selector
	++ // MatchingType
	 += len(.Certificate) / 2
	return 
}

func ( *SOA) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Ns, +, , true)
	 += domainNameLen(.Mbox, +, , true)
	 += 4 // Serial
	 += 4 // Refresh
	 += 4 // Retry
	 += 4 // Expire
	 += 4 // Minttl
	return 
}

func ( *SPF) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	for ,  := range .Txt {
		 += len() + 1
	}
	return 
}

func ( *SRV) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Priority
	 += 2 // Weight
	 += 2 // Port
	 += domainNameLen(.Target, +, , false)
	return 
}

func ( *SSHFP) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++ // Algorithm
	++ // Type
	 += len(.FingerPrint) / 2
	return 
}

func ( *SVCB) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Priority
	 += domainNameLen(.Target, +, , false)
	for ,  := range .Value {
		 += 4 + int(.len())
	}
	return 
}

func ( *TA) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // KeyTag
	++    // Algorithm
	++    // DigestType
	 += len(.Digest) / 2
	return 
}

func ( *TALINK) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.PreviousName, +, , false)
	 += domainNameLen(.NextName, +, , false)
	return 
}

func ( *TKEY) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Algorithm, +, , false)
	 += 4 // Inception
	 += 4 // Expiration
	 += 2 // Mode
	 += 2 // Error
	 += 2 // KeySize
	 += len(.Key) / 2
	 += 2 // OtherLen
	 += len(.OtherData) / 2
	return 
}

func ( *TLSA) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	++ // Usage
	++ // Selector
	++ // MatchingType
	 += len(.Certificate) / 2
	return 
}

func ( *TSIG) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += domainNameLen(.Algorithm, +, , false)
	 += 6 // TimeSigned
	 += 2 // Fudge
	 += 2 // MACSize
	 += len(.MAC) / 2
	 += 2 // OrigId
	 += 2 // Error
	 += 2 // OtherLen
	 += len(.OtherData) / 2
	return 
}

func ( *TXT) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	for ,  := range .Txt {
		 += len() + 1
	}
	return 
}

func ( *UID) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 4 // Uid
	return 
}

func ( *UINFO) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.Uinfo) + 1
	return 
}

func ( *URI) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 2 // Priority
	 += 2 // Weight
	 += len(.Target)
	return 
}

func ( *X25) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += len(.PSDNAddress) + 1
	return 
}

func ( *ZONEMD) ( int,  map[string]struct{}) int {
	 := .Hdr.len(, )
	 += 4 // Serial
	++    // Scheme
	++    // Hash
	 += len(.Digest) / 2
	return 
}

// copy() functions
func ( *A) () RR {
	return &A{.Hdr, cloneSlice(.A)}
}

func ( *AAAA) () RR {
	return &AAAA{.Hdr, cloneSlice(.AAAA)}
}

func ( *AFSDB) () RR {
	return &AFSDB{.Hdr, .Subtype, .Hostname}
}

func ( *AMTRELAY) () RR {
	return &AMTRELAY{
		.Hdr,
		.Precedence,
		.GatewayType,
		cloneSlice(.GatewayAddr),
		.GatewayHost,
	}
}

func ( *ANY) () RR {
	return &ANY{.Hdr}
}

func ( *APL) () RR {
	 := make([]APLPrefix, len(.Prefixes))
	for ,  := range .Prefixes {
		[] = .copy()
	}
	return &APL{.Hdr, }
}

func ( *AVC) () RR {
	return &AVC{.Hdr, cloneSlice(.Txt)}
}

func ( *CAA) () RR {
	return &CAA{
		.Hdr,
		.Flag,
		.Tag,
		.Value,
	}
}

func ( *CDNSKEY) () RR {
	return &CDNSKEY{*.DNSKEY.copy().(*DNSKEY)}
}

func ( *CDS) () RR {
	return &CDS{*.DS.copy().(*DS)}
}

func ( *CERT) () RR {
	return &CERT{
		.Hdr,
		.Type,
		.KeyTag,
		.Algorithm,
		.Certificate,
	}
}

func ( *CNAME) () RR {
	return &CNAME{.Hdr, .Target}
}

func ( *CSYNC) () RR {
	return &CSYNC{
		.Hdr,
		.Serial,
		.Flags,
		cloneSlice(.TypeBitMap),
	}
}

func ( *DHCID) () RR {
	return &DHCID{.Hdr, .Digest}
}

func ( *DLV) () RR {
	return &DLV{*.DS.copy().(*DS)}
}

func ( *DNAME) () RR {
	return &DNAME{.Hdr, .Target}
}

func ( *DNSKEY) () RR {
	return &DNSKEY{
		.Hdr,
		.Flags,
		.Protocol,
		.Algorithm,
		.PublicKey,
	}
}

func ( *DS) () RR {
	return &DS{
		.Hdr,
		.KeyTag,
		.Algorithm,
		.DigestType,
		.Digest,
	}
}

func ( *EID) () RR {
	return &EID{.Hdr, .Endpoint}
}

func ( *EUI48) () RR {
	return &EUI48{.Hdr, .Address}
}

func ( *EUI64) () RR {
	return &EUI64{.Hdr, .Address}
}

func ( *GID) () RR {
	return &GID{.Hdr, .Gid}
}

func ( *GPOS) () RR {
	return &GPOS{
		.Hdr,
		.Longitude,
		.Latitude,
		.Altitude,
	}
}

func ( *HINFO) () RR {
	return &HINFO{.Hdr, .Cpu, .Os}
}

func ( *HIP) () RR {
	return &HIP{
		.Hdr,
		.HitLength,
		.PublicKeyAlgorithm,
		.PublicKeyLength,
		.Hit,
		.PublicKey,
		cloneSlice(.RendezvousServers),
	}
}

func ( *HTTPS) () RR {
	return &HTTPS{*.SVCB.copy().(*SVCB)}
}

func ( *IPSECKEY) () RR {
	return &IPSECKEY{
		.Hdr,
		.Precedence,
		.GatewayType,
		.Algorithm,
		cloneSlice(.GatewayAddr),
		.GatewayHost,
		.PublicKey,
	}
}

func ( *ISDN) () RR {
	return &ISDN{.Hdr, .Address, .SubAddress}
}

func ( *KEY) () RR {
	return &KEY{*.DNSKEY.copy().(*DNSKEY)}
}

func ( *KX) () RR {
	return &KX{.Hdr, .Preference, .Exchanger}
}

func ( *L32) () RR {
	return &L32{.Hdr, .Preference, cloneSlice(.Locator32)}
}

func ( *L64) () RR {
	return &L64{.Hdr, .Preference, .Locator64}
}

func ( *LOC) () RR {
	return &LOC{
		.Hdr,
		.Version,
		.Size,
		.HorizPre,
		.VertPre,
		.Latitude,
		.Longitude,
		.Altitude,
	}
}

func ( *LP) () RR {
	return &LP{.Hdr, .Preference, .Fqdn}
}

func ( *MB) () RR {
	return &MB{.Hdr, .Mb}
}

func ( *MD) () RR {
	return &MD{.Hdr, .Md}
}

func ( *MF) () RR {
	return &MF{.Hdr, .Mf}
}

func ( *MG) () RR {
	return &MG{.Hdr, .Mg}
}

func ( *MINFO) () RR {
	return &MINFO{.Hdr, .Rmail, .Email}
}

func ( *MR) () RR {
	return &MR{.Hdr, .Mr}
}

func ( *MX) () RR {
	return &MX{.Hdr, .Preference, .Mx}
}

func ( *NAPTR) () RR {
	return &NAPTR{
		.Hdr,
		.Order,
		.Preference,
		.Flags,
		.Service,
		.Regexp,
		.Replacement,
	}
}

func ( *NID) () RR {
	return &NID{.Hdr, .Preference, .NodeID}
}

func ( *NIMLOC) () RR {
	return &NIMLOC{.Hdr, .Locator}
}

func ( *NINFO) () RR {
	return &NINFO{.Hdr, cloneSlice(.ZSData)}
}

func ( *NS) () RR {
	return &NS{.Hdr, .Ns}
}

func ( *NSAPPTR) () RR {
	return &NSAPPTR{.Hdr, .Ptr}
}

func ( *NSEC) () RR {
	return &NSEC{.Hdr, .NextDomain, cloneSlice(.TypeBitMap)}
}

func ( *NSEC3) () RR {
	return &NSEC3{
		.Hdr,
		.Hash,
		.Flags,
		.Iterations,
		.SaltLength,
		.Salt,
		.HashLength,
		.NextDomain,
		cloneSlice(.TypeBitMap),
	}
}

func ( *NSEC3PARAM) () RR {
	return &NSEC3PARAM{
		.Hdr,
		.Hash,
		.Flags,
		.Iterations,
		.SaltLength,
		.Salt,
	}
}

func ( *NULL) () RR {
	return &NULL{.Hdr, .Data}
}

func ( *NXNAME) () RR {
	return &NXNAME{.Hdr}
}

func ( *NXT) () RR {
	return &NXT{*.NSEC.copy().(*NSEC)}
}

func ( *OPENPGPKEY) () RR {
	return &OPENPGPKEY{.Hdr, .PublicKey}
}

func ( *OPT) () RR {
	 := make([]EDNS0, len(.Option))
	for ,  := range .Option {
		[] = .copy()
	}
	return &OPT{.Hdr, }
}

func ( *PTR) () RR {
	return &PTR{.Hdr, .Ptr}
}

func ( *PX) () RR {
	return &PX{
		.Hdr,
		.Preference,
		.Map822,
		.Mapx400,
	}
}

func ( *RESINFO) () RR {
	return &RESINFO{.Hdr, cloneSlice(.Txt)}
}

func ( *RFC3597) () RR {
	return &RFC3597{.Hdr, .Rdata}
}

func ( *RKEY) () RR {
	return &RKEY{
		.Hdr,
		.Flags,
		.Protocol,
		.Algorithm,
		.PublicKey,
	}
}

func ( *RP) () RR {
	return &RP{.Hdr, .Mbox, .Txt}
}

func ( *RRSIG) () RR {
	return &RRSIG{
		.Hdr,
		.TypeCovered,
		.Algorithm,
		.Labels,
		.OrigTtl,
		.Expiration,
		.Inception,
		.KeyTag,
		.SignerName,
		.Signature,
	}
}

func ( *RT) () RR {
	return &RT{.Hdr, .Preference, .Host}
}

func ( *SIG) () RR {
	return &SIG{*.RRSIG.copy().(*RRSIG)}
}

func ( *SMIMEA) () RR {
	return &SMIMEA{
		.Hdr,
		.Usage,
		.Selector,
		.MatchingType,
		.Certificate,
	}
}

func ( *SOA) () RR {
	return &SOA{
		.Hdr,
		.Ns,
		.Mbox,
		.Serial,
		.Refresh,
		.Retry,
		.Expire,
		.Minttl,
	}
}

func ( *SPF) () RR {
	return &SPF{.Hdr, cloneSlice(.Txt)}
}

func ( *SRV) () RR {
	return &SRV{
		.Hdr,
		.Priority,
		.Weight,
		.Port,
		.Target,
	}
}

func ( *SSHFP) () RR {
	return &SSHFP{
		.Hdr,
		.Algorithm,
		.Type,
		.FingerPrint,
	}
}

func ( *SVCB) () RR {
	 := make([]SVCBKeyValue, len(.Value))
	for ,  := range .Value {
		[] = .copy()
	}
	return &SVCB{
		.Hdr,
		.Priority,
		.Target,
		,
	}
}

func ( *TA) () RR {
	return &TA{
		.Hdr,
		.KeyTag,
		.Algorithm,
		.DigestType,
		.Digest,
	}
}

func ( *TALINK) () RR {
	return &TALINK{.Hdr, .PreviousName, .NextName}
}

func ( *TKEY) () RR {
	return &TKEY{
		.Hdr,
		.Algorithm,
		.Inception,
		.Expiration,
		.Mode,
		.Error,
		.KeySize,
		.Key,
		.OtherLen,
		.OtherData,
	}
}

func ( *TLSA) () RR {
	return &TLSA{
		.Hdr,
		.Usage,
		.Selector,
		.MatchingType,
		.Certificate,
	}
}

func ( *TSIG) () RR {
	return &TSIG{
		.Hdr,
		.Algorithm,
		.TimeSigned,
		.Fudge,
		.MACSize,
		.MAC,
		.OrigId,
		.Error,
		.OtherLen,
		.OtherData,
	}
}

func ( *TXT) () RR {
	return &TXT{.Hdr, cloneSlice(.Txt)}
}

func ( *UID) () RR {
	return &UID{.Hdr, .Uid}
}

func ( *UINFO) () RR {
	return &UINFO{.Hdr, .Uinfo}
}

func ( *URI) () RR {
	return &URI{
		.Hdr,
		.Priority,
		.Weight,
		.Target,
	}
}

func ( *X25) () RR {
	return &X25{.Hdr, .PSDNAddress}
}

func ( *ZONEMD) () RR {
	return &ZONEMD{
		.Hdr,
		.Serial,
		.Scheme,
		.Hash,
		.Digest,
	}
}