úÎIŠD[      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZNoneNone -5<=DIRTéThe length should be between 0 and 32. These bounds are inclusive. This expectation is not in any way enforced by this library because it does not cause errors. A mask length greater than 32 will be treated as if it were 32.#A 32-bit Internet Protocol address.  Normalize an (. The first result of this is that the  inside the H is changed so that the insignificant bits are zeroed out. For example:<prRange $ normalize $ IPv4Range (fromOctets 192 168 1 19) 24192.168.1.0/24=prRange $ normalize $ IPv4Range (fromOctets 192 168 1 163) 28192.168.1.160/28`The second effect of this is that the mask length is lowered to be 32 or smaller. Working with ±s that have not been normalized does not cause any issues for this library, although other applications may reject such ranges (especially those with a mask length above 32). Note that   is idempotent, that is:(normalize r == (normalize . normalize) r[Checks to see if an  address belongs in the .let ip = fromOctets 10 10 1 92/contains (IPv4Range (fromOctets 10 0 0 0) 8) ipTrue1contains (IPv4Range (fromOctets 10 11 0 0) 16) ipFalseÿ/Typically, element-testing functions are written to take the element as the first argument and the set as the second argument. This is intentionally written the other way for better performance when iterating over a collection. For example, you might test elements in a list for membership like this:,let r = IPv4Range (fromOctets 10 10 10 6) 31JmapM_ (print . contains r) (take 5 $ iterate succ $ fromOctets 10 10 10 5)FalseTrueTrueFalseFalseThe implementation of [— ensures that (with GHC), the bitmask creation and range normalization only occur once in the above example. They are reused as the list is iterated. 5This is provided to mirror the interface provided by Data.Set. It behaves just like [ but with flipped arguments.member ip r == contains r ip'The RFC1918 24-bit block. Subnet mask:  10.0.0.0/8'The RFC1918 20-bit block. Subnet mask:  172.16.0.0/12'The RFC1918 16-bit block. Subnet mask: 192.168.0.0/16^This does not do an endOfInput check because it is reused in the range parser implementation. Create an ~ address from four octets. The first argument is the most significant octet. The last argument is the least significant. Since the \ and ] instances for N are not generally usefully, this function is the recommened way to create  addresses. For example:fromOctets 192 168 1 1IPv4 {getIPv4 = 3232235777}„This is sort of a misnomer. It takes Word32 to make dotDecimalParser probably perform better. This is mostly for internal use. Convert an  address into a quadruple of octets. The first element in the quadruple is the most significant octet. The last element is the least significant octet.ˆ$internal Everything below here is not part of the stable API. Many of these functions must live here because they are needed for the ^ and _M instances. Hopefully, at some point, these can be removed from this module.-This only exists for doctests. Do not use it.-This only exists for doctests. Do not use it.`ôI think that this function can be improved. Right now, it always allocates enough space for a fifteen-character text rendering of an IP address. I think that it should be possible to do more of the math upfront and allocate less space.-a [ b`cdefgh !"#$  ' [ b`cdefgha !"#$None23456234562435623456None789789789789None:'This should be rewritten to not create Text as an intermediate step.;This should also be rewritten:ijk;<=:;<=:;<=:ijk;<=None5IF$This does not do an endOfInput check>?@ABCDEFGHIJKL >?@ABCDEFGHI>?@ALKJBCDEFGHI >?@ABCDEFGHIJKLNoneRSTUVRSTUVRTSUVRSTUVNoneW5This is a bad implementation that should be rewrittenX5This is a bad implementation that should be rewrittenWXYZWXYZWXYZWXYZl       !"#$%&'()*+,-./0123456789:;<=9;:9;<=>>?@ABCDEFGHIJKLMN9:;<=9;<=OPQRPSTUVWUVXYZ[\]^_`ab_`cip-0.7-7yBoAFAa1Q77CKvp7MdxXp Net.InternalNet.IPv4 Net.IPv4.TextNet.IPv4.StringNet.IPv4.ByteString.Char8Net.Mac Net.Mac.TextNet.Mac.ByteString.Char8attoparsecParseJSON rightToMaybe IPv4Range ipv4RangeBaseipv4RangeLengthIPv4getIPv4mask normalizememberlowerInclusiveupperInclusive private24 private20 private16fromDotDecimalText'fromDotDecimalTextrangeFromDotDecimalText'dotDecimalRangeParserdotDecimalParser fromOctets fromOctets'toOctetsprAddrprRangetoDotDecimalTexttoDotDecimalBuilderrangeToDotDecimalTextrangeToDotDecimalBuilder$fMVectorMVectorIPv4$fFromJSONIPv4Range$fToJSONIPv4Range$fFromJSONIPv4 $fToJSONIPv4$fHashableIPv4Range$fEqIPv4 $fOrdIPv4 $fShowIPv4 $fReadIPv4 $fEnumIPv4 $fBoundedIPv4$fHashableIPv4 $fGenericIPv4 $fEqIPv4Range$fOrdIPv4Range$fShowIPv4Range$fReadIPv4Range$fGenericIPv4Rangeencode decodeEitherdecodebuilderparserMacmacAmacBtoTextfromText fromText' toTextBuilder textParserbytestringParser $fFromJSONMac $fToJSONMac $fHashableMac$fEqMac$fOrdMac $fShowMac $fReadMac $fGenericMaccontainsbaseGHC.ShowShowGHC.ReadRead$aeson-0.11.2.0-3X9fosglKxPExrq4VGxduData.Aeson.Types.ClassToJSONFromJSONtoTextPreAllocatedMV_IPv4rangeFromDotDecimalText putAndCountzeroi2w twoDigits threeDigitsD:R:MVectorsIPv40toBSPreAllocated