@      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe v      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijNone1dyOptional resource data.Client subnet (RFC7871)Unknown optional typeEDNS0 Option Code (RFC 6891).From option code to number.&EDNS0 infromation defined in RFC 6891.UDP payload size.Extended RCODE. Is DNSSEC OK? EDNS0 option data. Raw data format for each type.  IPv4 address An authoritative name serve The canonical name for an alias&Marks the start of a zone of authority]A null RR (EXPERIMENTAL). Anything can be in a NULL record, for now we just drop this data.A domain name pointer Mail exchange Text strings IPv6 AddressServer Selection (RFC2782)DNAME (RFC6672) OPT (RFC6891),Delegation Signer (RFC4034) RD_RRSIG RD_NSECDNSKEY (RFC4034) RD_NSEC3)TLSA (RFC6698) RD_CDS RD_CDNSKEY RD_CSYNCUnknown resource data%Raw data format for resource records.NameResource record type Resource record class! Time to live" Resource data#Time to live in second.$Resource record class.%"Raw data format for DNS questions.' A domain name(The type of the query)+Response code including EDNS0's 12bit ones.*From rcode to number.+Kind of query.,A standard query.-An inverse query..A server status request./Query or response.0Query.1 Response.28Raw data format for the flags of DNS Query and Response.4Query or response.5Kind of query.6Authoritative Answer - this bit is valid in responses, and specifies that the responding name server is an authority for the domain name in question section.7TrunCation - specifies that this message was truncated due to length greater than that permitted on the transmission channel.8Recursion Desired - this bit may be set in a query and is copied into the response. If RD is set, it directs the name server to pursue the query recursively. Recursive query support is optional.9Recursion Available - this be is set or cleared in a response, and denotes whether recursive query support is available in the name server.:Response code.;Authentic Data (RFC4035).<9Raw data format for the header of DNS Query and Response.>An identifier.?The second 16bit word.@JAn identifier assigned by the program that generates any kind of query.AFor backward compatibility.B+Raw data format for DNS Query and Response.DHeaderE The question for the name serverFRRs answering the questionG RRs pointing toward an authorityH"RRs holding additional informationI9An enumeration of all possible DNS errors that can occur.J\The sequence number of the answer doesn't match our query. This could indicate foul play.K3The number of retries for the request was exceeded.LTCP fallback request timed out.MWThe answer has the correct sequence number, but returned an unexpected RDATA format.N The domain for query is illegal.O2The name server was unable to interpret the query.PZThe name server was unable to process this query due to a problem with the name server.QSThis code signifies that the domain name referenced in the query does not exist.R=The name server does not support the requested kind of query.S)The name server refuses to perform the specified operation for policy reasons. For example, a name server may not wish to provide the information to the particular requester, or a name server may not wish to perform a particular operation (e.g., zone transfer) for particular data.T'The server detected a malformed OPT RR.UConfiguration is wrong.VNetwork failure.WError is unknownYTypes for resource records.ZFrom type to number.[Type for a mailbox encoded on the wire as a DNS name, but the first label is conceptually the user name, and sometimes has contains internal periods that are not label separators. Therefore, in mailboxes @ is used as the separator between the first and second labels.\Type for domain.]Client subnet (RFC7871)^?Bad OPT Version (RFC 6891) or TSIG Signature Failure (RFC2845)._NotZone - Dynamic update response, a name used in the Prerequisite or Update Section is not within the zone denoted by the Zone Section.`kNotAuth - Dynamic update response, the server is not authoritative for the zone named in the Zone Section.a\NXRRSet - Dynamic update response, a pre-requisite RRSet that should exist, does not exist.b\YXRRSet - Dynamic update response, a pre-requisite RRSet that should not exist, does exist.c^YXDomain - Dynamic update response, a pre-requisite domain that should not exist, does exist.d9Refused - The name server refuses to perform the specified operation for policy reasons. For example, a name server may not wish to provide the information to the particular requester, or a name server may not wish to perform a particular operation (e.g., zone transfer) for particular data.eRNot Implemented - The name server does not support the requested kind of query.fName Error - Meaningful only for responses from an authoritative name server, this code signifies that the domain name referenced in the query does not exist.gnServer failure - The name server was unable to process this query due to a problem with the name server.hDFormat error - The name server was unable to interpret the query.iNo error condition.j8A request for all records the server/cache has availablek)Child-To-Parent Synchronization (RFC7477)l3DNSKEY(s) the Child wants reflected in DS (RFC7344)mChild DS (RFC7344)nTLSA (RFC6698)oNSEC3PARAM (RFC5155)pNSEC3 (RFC5155)qDNSKEY (RFC4034)rNSEC (RFC4034)sRRSIG (RFC4034)tDelegation Signer (RFC4034)u OPT (RFC6891)vDNAME (RFC6672)wServer Selection (RFC2782)x IPv6 Addressy Text stringsz Mail exchange{A domain name pointer|A null RR (EXPERIMENTAL)}&Marks the start of a zone of authority~The canonical name for an aliasAn authoritative name serve IPv4 addressFrom number to type.From number to rcode.-From rcode to number for header (4bits only).,From number in header to rcode (4bits only).'Resource record class for the Internet.Default query.Default response.Default information for EDNS0. defaultEDNS0JEDNS0 {udpSize = 4096, extRCODE = NoError, dnssecOk = False, options = []}Maximum UDP size. If  of  is larger than this,  uses this value instead. maxUdpSize16384Minimum UDP size. If  of  is smaller than this,  uses this value instead. minUdpSize512IGenerating a resource record for the additional section based on EDNS0. 2& is not generated. Just set the same ) to 2.-Generating EDNS0 information from the OPT RR.From number to option code.Use  /https://tools.ietf.org/html/rfc2929#section-2.3 names for DNS RCODEs4Provide an Enum instance for backwards compatibility]   !"#$%&'()ihgfedcba`_^*+,-./0123456789:;<=>?@ABCDEFGHIWJKLMNOPQRSTUVXY~}|{zyxwvutsrqponmlkjZ[\ !"\$#YZ~}|{zyxwvutsrqponmlkjZ BCDEFGHA<=>?@/0123456789:;+,-.)*ihgfedcba`_^*%&'(IJKLMNOPQRSTUVWX  ][kl   !"%&'()m*+,-./012 3456789:;<=>?BCDEFGHIJKLMNOPQRSTUVWXYnZ]) ihgfedcba`_^Y~}|{zyxwvutsrqponmlkj None;="opqrstuvwxyz{|}~opqrsu NoneNone"#@Encoding DNS query or response.Encoding DNS flags.Encoding DNS header.Encoding domain.Encoding mailbox.Encoding resource record. None(Get a domain name, using sep1 as the separate between the 1st and 2nd label. Subsequent labels (and always the trailing label) are terminated with a ".".NoneDecoding DNS query or response.EParse many length-encoded DNS records, for example, from TCP traffic.Decoding DNS flags.Decoding DNS header.Decoding domain.Decoding mailbox.Decoding resource record.None Receiving DNS data from  and parse it.Receive and parse a single virtual-circuit (TCP) query or response. It is up to the caller to implement any desired timeout.&Sending composed query or response to .ESending composed query or response to a single virtual-circuit (TCP).Encoding for virtual circuit.Creating query.Composing query without EDNS0.;Composing query with authentic data flag set without EDNS0.(Composing a response from IPv4 addresses(Composing a response from IPv6 addressesAdditional RRs for EDNS.Authentication NoneAbstract data type of DNS Resolver. This includes newly seeded identifier generators for all specified DNS servers and a cache database.uIntermediate abstract data type for resolvers. IP address information of DNS servers is generated according to 4 internally. This value can be safely reused for  withResolver./The naming is confusing for historical reasons.'Type for resolver configuration. Use  to create a new value.CAn example to use Google's public DNS cache instead of resolv.conf:Blet conf = defaultResolvConf { resolvInfo = RCHostName "8.8.8.8" }BAn example to use multiple Google's public DNS cache concurrently:hlet conf = defaultResolvConf { resolvInfo = RCHostNames ["8.8.8.8","8.8.4.4"], resolvConcurrent = True }An example to disable EDNS0:0let conf = defaultResolvConf { resolvEDNS = [] }5An example to enable EDNS0 with a 1,280-bytes buffer:Ylet conf = defaultResolvConf { resolvEDNS = [fromEDNS0 defaultEDNS0 { udpSize = 1280 }] }An example to enable cache:Dlet conf = defaultResolvConf { resolvCache = Just defaultCacheConf }Server information.Timeout in micro seconds..The number of retries including the first try.,Additional resource records to specify EDNS.9Concurrent queries if multiple DNS servers are specified.Cache configuration."Cache configuration for responses.BIf RR's TTL is higher than this value, this value is used instead."Cache pruning interval in seconds.#The type to specify a cache server.A path for "resolv.conf" where one or more IP addresses of DNS servers should be found on Unix. Default DNS servers are automatically detected on Windows regardless of the value of the file name.A numeric IP address. Warning: host names are invalid.Numeric IP addresses. Warning: host names are invalid.&A numeric IP address and port number. Warning: host names are invalid.Default cache configuration.defaultCacheConf/CacheConf {maximumTTL = 300, pruningDelay = 10}Return a default : is  "/etc/resolv.conf". is 3,000,000 micro seconds. is 3.$ is EDNS0 with a 4,096-bytes buffer. is False. is Nothing.None1Check response for a matching identifier. If we ever do pipelined TCP, we'll also need to match the QNAME, CLASS and QTYPE. See: -https://tools.ietf.org/html/rfc7766#section-7NoneMake a  from a . Examples:&rs <- makeResolvSeed defaultResolvConfGiving a thread-safe + to the function of the second argument.Giving thread-safe 7s to the function of the second argument. For each 2, multiple lookups must be done sequentially. s can be used concurrently.None"#RLook up resource records of a specified type for a domain, collecting the results from the ANSWER section of the response. See manual the manual of = to understand the concrete behavior. Cache is used if  is =.Example:&rs <- makeResolvSeed defaultResolvConfBwithResolver rs $ \resolver -> lookup resolver "www.example.com" ARight [93.184.216.34]Look up resource records of a specified type for a domain, collecting the results from the AUTHORITY section of the response. See manual the manual of B to understand the concrete behavior. Cache is used even if  is =.eLooking up resource records of a domain. The first parameter is one of the field accessors of the B type -- this allows you to choose which section (answer, authority, or additional) you would like to inspect for the result.1Look up a name and return the entire DNS Response-For a given DNS server, the queries are done:A new UDP socket bound to a new local port is created and a new identifier is created atomically from the cryptographically secure pseudo random number generator for the target DNS server. Then UDP queries are tried with the limitation of  (use EDNS0 if specifiecd). If it appear that the target DNS server does not support EDNS0, it falls back to traditional queries.If the response is truncated, a new TCP socket bound to a new locla port is created. Then exactly one TCP query is retried.%If multiple DNS server are specified  ('RCHostNames ') or found (A), either sequential lookup or concurrent lookup is carried out:In sequential lookup ( is False), the query procedure above is processed in the order of the DNS servers sequentially until a successful response is received.In concurrent lookup ( is True), the query procedure above is processed for each DNS server concurrently. The first received response is accepted even if it is an error.Cache is not used even if  is =.The example code: s rs <- makeResolvSeed defaultResolvConf withResolver rs $ \resolver -> lookupRaw resolver "www.example.com" A $And the (formatted) expected output: H Right (DNSMessage { header = DNSHeader { identifier = 1, flags = DNSFlags { qOrR = QR_Response, opcode = OP_STD, authAnswer = False, trunCation = False, recDesired = True, recAvailable = True, rcode = NoErr, authenData = False }, }, question = [Question { qname = "www.example.com.", qtype = A}], answer = [ResourceRecord {rrname = "www.example.com.", rrtype = A, rrttl = 800, rdlen = 4, rdata = 93.184.216.119}], authority = [], additional = []}) Same as Q but the query sets the AD bit, which solicits the the authentication status in the server reply. In most applications (other than diagnostic tools) that want authenticated data It is unwise to trust the AD bit in the responses of non-local servers, this interface should in most cases only be used with a loopback resolver.#Extract necessary information from BFor backward compatibility.None\ /Look up all 'A' records for the given hostname.A straightforward example:&rs <- makeResolvSeed defaultResolvConf=withResolver rs $ \resolver -> lookupA resolver "www.mew.org"Right [210.130.207.72]hThis function will also follow a CNAME and resolve its target if one exists for the queries hostname:&rs <- makeResolvSeed defaultResolvConf>withResolver rs $ \resolver -> lookupA resolver "www.kame.net"Right [203.178.141.194]9Look up all (IPv6) 'AAAA' records for the given hostname. Examples:&rs <- makeResolvSeed defaultResolvConfCwithResolver rs $ \resolver -> lookupAAAA resolver "www.wide.ad.jp",Right [2001:200:dff:fff1:216:3eff:fe4b:651c]Look up all 'MX' records for the given hostname. Two parts constitute an MX record: a hostname , and an integer priority. We therefore return each record as a (\, Int).In this first example, we look up the MX for the domain "example.com". It has no MX (to prevent a deluge of spam from examples posted on the internet). But remember, "no results" is still a successful result.&rs <- makeResolvSeed defaultResolvConf>withResolver rs $ \resolver -> lookupMX resolver "example.com"Right []3The domain "mew.org" does however have a single MX:&rs <- makeResolvSeed defaultResolvConf:withResolver rs $ \resolver -> lookupMX resolver "mew.org"Right [("mail.mew.org.",10)]ZAlso note that all hostnames are returned with a trailing dot to indicate the DNS root.uLook up all 'MX' records for the given hostname, and then resolve their hostnames to IPv4 addresses by calling ". The priorities are not retained. Examples:import Data.List (sort)&rs <- makeResolvSeed defaultResolvConfHips <- withResolver rs $ \resolver -> lookupAviaMX resolver "wide.ad.jp" fmap sort ips$Right [133.138.10.39,203.178.136.30]hSince there is more than one result, it is necessary to sort the list in order to check for equality.uLook up all 'MX' records for the given hostname, and then resolve their hostnames to IPv6 addresses by calling ". The priorities are not retained..This function performs the real work for both  and >. The only difference between those two is which function,  or S, is used to perform the lookup. We take either of those as our first parameter.Look up all 'NS' records for the given hostname. The results are taken from the ANSWER section of the response (as opposed to AUTHORITY). For details, see e.g.  %http://www.zytrax.com/books/dns/ch15/.There will typically be more than one name server for a domain. It is therefore extra important to sort the results if you prefer them to be at all deterministic. Examples:import Data.List (sort)&rs <- makeResolvSeed defaultResolvConf@ns <- withResolver rs $ \resolver -> lookupNS resolver "mew.org" fmap sort ns%Right ["ns1.mew.org.","ns2.mew.org."]Look up all 'NS' records for the given hostname. The results are taken from the AUTHORITY section of the response and not the usual ANSWER (use % for that). For details, see e.g.  %http://www.zytrax.com/books/dns/ch15/.There will typically be more than one name server for a domain. It is therefore extra important to sort the results if you prefer them to be at all deterministic.For an example, we can look up the nameservers for "example.com" from one of the root servers, a.gtld-servers.net, the IP address of which was found beforehand:import Data.List (sort)6let ri = RCHostName "192.5.6.30" -- a.gtld-servers.net.let rc = defaultResolvConf { resolvInfo = ri }rs <- makeResolvSeed rcHns <- withResolver rs $ \resolver -> lookupNSAuth resolver "example.com" fmap sort ns3Right ["a.iana-servers.net.","b.iana-servers.net."]OLook up all 'TXT' records for the given hostname. The results are free-form Hs.)Two common uses for 'TXT' records are  4http://en.wikipedia.org/wiki/Sender_Policy_Framework and  7http://en.wikipedia.org/wiki/DomainKeys_Identified_Mail9. As an example, we find the SPF record for "mew.org":&rs <- makeResolvSeed defaultResolvConf;withResolver rs $ \resolver -> lookupTXT resolver "mew.org"Right ["v=spf1 +mx -all"]Look up the 'SOA' record for the given domain. The result 7-tuple consists of the 'mname', 'rname', 'serial', 'refresh', 'retry', 'expire' and 'minimum' fields of the SOA record.An @ separator is used between the first and second labels of the 'rname' field. Since 'rname' is an email address, it often contains periods within its first label. Presently, the trailing period is not removed from the domain part of the 'rname', but this may change in the future. Users should be prepared to remove any trailing period before using the 'rname` as a contact email address.&rs <- makeResolvSeed defaultResolvConf;withResolver rs $ \resolver -> lookupSOA resolver "mew.org"HRight [("ns1.mew.org.","kazu@mew.org.",201406240,3600,300,3600000,3600)]Look up all 'PTR' records for the given hostname. To perform a reverse lookup on an IP address, you must first reverse its octets and then append the suffix ".in-addr.arpa."gWe look up the PTR associated with the IP address 210.130.137.80, i.e., 80.137.130.210.in-addr.arpa:&rs <- makeResolvSeed defaultResolvConfNwithResolver rs $ \resolver -> lookupPTR resolver "164.2.232.202.in-addr.arpa"Right ["www.iij.ad.jp."]The 1 function is more suited to this particular task.Convenient wrapper around 7 to perform a reverse lookup on a single IP address.We repeat the example from 0, except now we pass the IP address directly:&rs <- makeResolvSeed defaultResolvConfBwithResolver rs $ \resolver -> lookupRDNS resolver "202.232.2.164"Right ["www.iij.ad.jp."]NLook up all 'SRV' records for the given hostname. SRV records consist (see  #https://tools.ietf.org/html/rfc2782") of the following four fields:"Priority (lower is more-preferred)kWeight (relative frequency with which to use this record amongst all results with the same priority)/Port (the port on which the service is offered)5Target (the hostname on which the service is offered)mThe first three are integral, and the target is another DNS hostname. We therefore return a four-tuple  (Int,Int,Int,\). Examples:&rs <- makeResolvSeed defaultResolvConfUwithResolver rs $ \resolver -> lookupSRV resolver "_xmpp-server._tcp.jabber.ietf.org"%Right [(5,0,5269,"jabber.ietf.org.")] None Perform both  and  on the given \i. When comparing DNS names taken from user input, this is often necessary to avoid unexpected results.Examples:#let domain1 = BS.pack "ExAmPlE.COM"$let domain2 = BS.pack "example.com."domain1 == domain2False&normalize domain1 == normalize domain2TrueThe  function should be idempotent:2normalize (normalize domain1) == normalize domain1True(Ensure that we don't crash on the empty \:6import qualified Data.ByteString.Char8 as BS ( empty )normalize BS.empty"."9Normalize the case of the given DNS name for comparisons.YAccording to RFC #1035, "For all parts of the DNS that are part of the official protocol, all comparisons between character strings (e.g., labels, domain names, etc.) are done in a case-insensitive manner." This function chooses to lowercase its argument, but that should be treated as an implementation detail if at all possible.Examples:#let domain1 = BS.pack "ExAmPlE.COM"#let domain2 = BS.pack "exAMPle.com"domain1 == domain2False.normalizeCase domain1 == normalizeCase domain2TrueThe  function should be idempotent:>normalizeCase (normalizeCase domain2) == normalizeCase domain2True(Ensure that we don't crash on the empty \:6import qualified Data.ByteString.Char8 as BS ( empty )normalizeCase BS.empty""eNormalize the given name by appending a trailing dot (the DNS root) if one does not already exist.Warning: this does not produce an equivalent DNS name! However, users are often unaware of the effect that the absence of the root will have. In user interface design, it may therefore be wise to act as if the user supplied the trailing dot during comparisons.Per RFC #1034,"Since a complete domain name ends with the root label, this leads to a printed form which ends in a dot. We use this property to distinguish between:za character string which represents a complete domain name (often called 'absolute'). For example, 'poneria.ISI.EDU.' a character string that represents the starting labels of a domain name which is incomplete, and should be completed by local software using knowledge of the local domain (often called 'relative'). For example, 'poneria' used in the ISI.EDU domain.FRelative names are either taken relative to a well known origin, or to a list of domains used as a search list. Relative names appear mostly at the user interface, where their interpretation varies from implementation to implementation, and in master files, where they are relative to a single origin domain name."Examples:#let domain1 = BS.pack "example.com"$let domain2 = BS.pack "example.com."domain1 == domain2False.normalizeRoot domain1 == normalizeRoot domain2TrueThe  function should be idempotent:>normalizeRoot (normalizeRoot domain1) == normalizeRoot domain1True(Ensure that we don't crash on the empty \:6import qualified Data.ByteString.Char8 as BS ( empty )normalizeRoot BS.empty"."None]  !"#$%&'()ihgfedcba`_^*+,-./0123456789:;<=>?@ABCDEFGHIWJKLMNOPQRSTUVXY~}|{zyxwvutsrqponmlkjZ[\ !"#$%&'()*+,,-./01234456789:;<=>?@@ABCDEFGHIIJKLMNNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                      !"#$%&'()*+,*+-*+.*+/*+0*+1*+2*+3456789:;<=<><?<@<A<B<C<D<E<F<G<HIJIKLMNOPQR*ST*SU*SV*SW*SXYZY[Y\Y]*S^_`abcdefghijklmnmopqrstuvwxyz{|}~III44444<<<<<<<<<<<<<<     YYY !"#$%&'()*+,-. / 0 1232425262728292:2;2<2=2>2?2@2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2QcRSTUVWXYZ[\]^_`abcdefghijklmnopqrsrtrurvrwrxryrzr{|}~7d                                                                     dns-3.0.3-8BqgLe5NPHn8nhZ4C0e5rDNetwork.DNS.TypesNetwork.DNS.EncodeNetwork.DNS.DecodeNetwork.DNS.IONetwork.DNS.ResolverNetwork.DNS.LookupRawNetwork.DNS.LookupNetwork.DNS.UtilsNetwork.DNS.ImportsNetwork.DNS.StateBinaryNetwork.DNS.MemoNetwork.DNS.Decode.InternalNetwork.DNS.Types.InternalNetwork.DNS.Transport Network.DNSODataOD_ClientSubnet UnknownODataOptCode fromOptCodeEDNS0udpSizeextRCODEdnssecOkoptionsRDataRD_ARD_NSRD_CNAMERD_SOARD_NULLRD_PTRRD_MXRD_TXTRD_AAAARD_SRVRD_DNAMERD_OPTRD_DS RD_DNSKEY RD_NSEC3PARAMRD_TLSA UnknownRDataResourceRecordrrnamerrtyperrclassrrttlrdataTTLCLASSQuestionqnameqtypeRCODE fromRCODEOPCODEOP_STDOP_INVOP_SSRQorRQR_Query QR_ResponseDNSFlagsqOrRopcode authAnswer trunCation recDesired recAvailablercode authenData DNSHeader identifierflags Identifier DNSFormat DNSMessageheaderquestionanswer authority additionalDNSErrorSequenceNumberMismatchRetryLimitExceededTimeoutExpiredUnexpectedRDATA IllegalDomain FormatError ServerFailure NameErrorNotImplementedOperationRefused BadOptRecordBadConfigurationNetworkFailure DecodeErrorUnknownDNSErrorTYPEfromTYPEMailboxDomain ClientSubnetBadOptNotZoneNotAuthNXRRSetYXRRSetYXDomainRefusedNotImplNameErrServFail FormatErrNoErrANYCSYNCCDNSKEYCDSTLSA NSEC3PARAMNSEC3DNSKEYNSECRRSIGDSOPTDNAMESRVAAAATXTMXPTRNULLSOACNAMENSAtoTYPEtoRCODEfromRCODEforHeadertoRCODEforHeaderclassIN defaultQuerydefaultResponse defaultEDNS0 maxUdpSize minUdpSize fromEDNS0toEDNS0 toOptCode $fShowTYPE$fExceptionDNSError $fShowRCODE $fEnumRCODE $fShowOptCode $fShowRData$fEqTYPE $fOrdTYPE $fEqDNSError$fShowDNSError$fEqQorR $fShowQorR $fEnumQorR $fBoundedQorR $fEqOPCODE $fShowOPCODE $fEnumOPCODE$fBoundedOPCODE $fEqRCODE $fEqDNSFlags$fShowDNSFlags $fEqDNSHeader$fShowDNSHeader $fEqQuestion$fShowQuestion $fEqOptCode $fOrdOptCode $fEqOData $fShowOData $fOrdOData $fEqEDNS0 $fShowEDNS0 $fEqRData $fOrdRData$fEqResourceRecord$fShowResourceRecord$fEqDNSMessage$fShowDNSMessageencodeencodeDNSFlagsencodeDNSHeader encodeDomain encodeMailboxencodeResourceRecorddecode decodeManydecodeDNSFlagsdecodeDNSHeader decodeDomain decodeMailboxdecodeResourceRecordreceive receiveVCsendsendVCencodeQuestions composeQuerycomposeQueryAD responseA responseAAAAResolver ResolvSeed ResolvConf resolvInfo resolvTimeout resolvRetry resolvEDNSresolvConcurrent resolvCache CacheConf maximumTTL pruningDelayFileOrNumericHost RCFilePath RCHostName RCHostNames RCHostPortdefaultCacheConfdefaultResolvConfmakeResolvSeed withResolver withResolverslookup lookupAuth lookupRaw lookupRawADfromDNSMessage fromDNSFormatlookupA lookupAAAAlookupMX lookupAviaMXlookupAAAAviaMXlookupNS lookupNSAuth lookupTXT lookupSOA lookupPTR lookupRDNS lookupSRV normalize normalizeCase normalizeRootbaseGHC.Base++GHC.Listfilterzipmap Control.Monadguardjoin GHC.FloatFloatingpiexplogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanhlog1pexpm1log1pexplog1mexpMonad>>=>>returnfailFunctorfmap<$ghc-prim GHC.ClassesOrd>=minmax><<=compareData.Typeable.InternalTypeable Applicative<*>pure*><*liftA2 Data.Foldablefoldrlengthnullfoldlfoldl'foldl1sumproductfoldr1maximumminimumelemData.TraversablemapMsequenceMonoidmemptymappendmconcatMaybeNothingJust GHC.TypesOrderingLTEQGTWordGHC.WordWord8Word16Word32Word64TyConbytestring-0.10.8.2Data.ByteString.Internal ByteString<**> Data.Functor<$> Alternativemanysome<|>empty MonadPlusmzeromplusData.List.NonEmptyNonEmpty:|mfilter<$!>unless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterM Data.ListisSubsequenceOf mapAccumR mapAccumLforMControl.Applicativeoptional WrappedMonad WrapMonad unwrapMonad WrappedArrow WrapArrow unwrapArrowZipList getZipList Data.TypeabletypeOf7typeOf6typeOf5typeOf4typeOf3typeOf2typeOf1 rnfTypeReptypeRepFingerprint typeRepTyCon typeRepArgs splitTyConAppmkFunTy funResultTygcast2gcast1gcasteqTcast showsTypeReptypeReptypeOfTypeRep Typeable1 Typeable2 Typeable3 Typeable4 Typeable5 Typeable6 Typeable7rnfTyContyConFingerprint tyConName tyConModule tyConPackageData.Functor.ConstConstgetConstfindnotElem minimumBy maximumByallanyorand concatMapconcatmsum sequence_forM_mapM_ Data.Monoid<>DualgetDualEndoappEndoAllgetAllAnygetAnySumgetSumProduct getProductFirstgetFirstLastgetLastAltgetAlt Data.OldListunwordswordsunlineslinesunfoldrsortOnsortBysort permutations subsequencestailsinitsgroupBygroupdeleteFirstsByunzip7unzip6unzip5unzip4zipWith7zipWith6zipWith5zipWith4zip7zip6zip5zip4genericReplicate genericIndexgenericSplitAt genericDrop genericTake genericLengthinsertByinsert partition transpose intercalate intersperse intersectBy intersectunionByunion\\deleteBydeletenubBynub isInfixOf isSuffixOf isPrefixOf findIndices findIndex elemIndices elemIndex stripPrefix dropWhileEndData.Ord comparingDown Data.ProxyProxyData.Type.Equality:~:Refl:~~:HRefl byteSwap64 byteSwap32 byteSwap16NumericshowOctshowHex showIntAtBase showGFloatAlt showFFloatAlt showGFloat showFFloat showEFloatshowInt readSigned readFloatreadHexreadDecreadOctreadIntGHC.Read lexDigitsfromRat floatToDigits showFloat Data.BitstoIntegralSizedpopCountDefaulttestBitDefault bitDefaultBits.&..|.xor complementshiftrotatezeroBitsbitsetBitclearBit complementBittestBit bitSizeMaybebitSizeisSignedshiftL unsafeShiftLshiftR unsafeShiftRrotateLrotateRpopCount FiniteBits finiteBitSizecountLeadingZeroscountTrailingZerosvoidGHC.Real showSignedunzip3unzipzipWith3zipWithzip3!!reversebreakspansplitAtdroptake dropWhile takeWhilecycle replicaterepeatiteratescanr1scanrscanl'scanl1scanlfoldl1'initlasttailunconshead Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybefromJust isNothingisJustmaybeapliftM5liftM4liftM3liftM2liftMwhen=<<liftA3liftAPStatepsDomain psPositionpsInputSGet wsPositionSPutput8put16put32putInt8putInt16putInt32 putByteString addPositionWwsPopwsPush getPositiongetInputpushpopget8get16get32getInt8getInt16getInt32 getNBytesgetNByteString initialStaterunSGetrunSGetWithLeftoversrunSPutWStatewsDomainCacheDBEntryPrioKeySection AuthorityAnswernewCache lookupCache insertCacheprunecopy copyOData getDomain' getResponse getDNSFlags getHeadergetResourceRecordsgetResourceRecord getDomain getMailbox&network-2.6.3.2-Elf6Dxkfz0iKjb1zv5eBTPNetwork.Socket.TypesSocketencodeVCcachegenIds resolvseed nameservers resolvconf checkRespresolve TCPFallback lookupSection lookupNSImpl