From b2b0af666f5f798c3fdb7f8e15032d62cc72f612 Mon Sep 17 00:00:00 2001 From: a0666660 <69061030+a0666660@users.noreply.github.com> Date: Fri, 2 Oct 2026 20:49:23 +0800 Subject: [PATCH] test(ipv6-subnet-calculator): differential suite vs CPython ipaddress; fix /128 netmask MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fix: netmask formula special case was inverted — /128 produced an all-zero mask instead of ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff - add 124-case differential fixture generated with CPython ipaddress (random 128-bit values x prefix set + classic edge cases), comparing expanded/network/first/last/total/netmask against the implementation --- ...pv6-subnet-calculator.differential.test.ts | 39 + .../ipv6-subnet-calculator.models.ts | 8 +- .../ipv6-subnet-calculator/ipv6.fixture.json | 1242 +++++++++++++++++ 3 files changed, 1286 insertions(+), 3 deletions(-) create mode 100644 src/tools/ipv6-subnet-calculator/ipv6-subnet-calculator.differential.test.ts create mode 100644 src/tools/ipv6-subnet-calculator/ipv6.fixture.json diff --git a/src/tools/ipv6-subnet-calculator/ipv6-subnet-calculator.differential.test.ts b/src/tools/ipv6-subnet-calculator/ipv6-subnet-calculator.differential.test.ts new file mode 100644 index 00000000..2d6fcf11 --- /dev/null +++ b/src/tools/ipv6-subnet-calculator/ipv6-subnet-calculator.differential.test.ts @@ -0,0 +1,39 @@ +// Differential test: the IPv6 calculator must agree with Python's `ipaddress` +// stdlib on 124 random + hand-picked cases (fixture generated by CPython). +import { readFileSync } from 'node:fs'; +import { describe, expect, it } from 'vitest'; +import { describeIpv6 } from './ipv6-subnet-calculator.models'; + +interface FixtureCase { + input: string + expanded: string + compressed: string + network: string + first: string + last: string + total: string + netmask: string +} + +const cases: FixtureCase[] = JSON.parse( + readFileSync(new URL('./ipv6.fixture.json', import.meta.url), 'utf8'), +); + +// Python's ipaddress uses lowercase hex for IPv6 str(); my implementation is +// lowercase per RFC 5952 §4.3 recommendation. Normalize for comparison. +const lower = (s: string) => s.toLowerCase(); + +describe('ipv6-subnet-calculator: differential vs CPython ipaddress', () => { + it.each(cases.map(c => [c.input, c]))('case %s', (_input, c) => { + const info = describeIpv6(c.input); + expect(lower(info.expanded)).toBe(lower(c.expanded)); + // compression: compare the network VALUE (Python may pick a different + // zero-run on ties; the address itself must match) plus the prefix + expect(lower(info.network.split('/')[0])).toBe(lower(c.network.split('/')[0])); + expect(info.network.endsWith(`/${c.network.split('/')[1]}`)).toBe(true); + expect(lower(info.firstAddress)).toBe(lower(c.first)); + expect(lower(info.lastAddress)).toBe(lower(c.last)); + expect(info.totalAddresses).toBe(c.total); + expect(lower(info.mask)).toBe(lower(c.netmask)); + }); +}); diff --git a/src/tools/ipv6-subnet-calculator/ipv6-subnet-calculator.models.ts b/src/tools/ipv6-subnet-calculator/ipv6-subnet-calculator.models.ts index c0385d6a..b29f9d4f 100644 --- a/src/tools/ipv6-subnet-calculator/ipv6-subnet-calculator.models.ts +++ b/src/tools/ipv6-subnet-calculator/ipv6-subnet-calculator.models.ts @@ -135,12 +135,14 @@ export function describeIpv6(cidr: string): Ipv6Info { const hostBits = 128 - prefix; const networkValue = prefix === 0 ? 0n : (addressValue >> BigInt(hostBits)) << BigInt(hostBits); - const total = hostBits >= 0 ? (1n << BigInt(hostBits)) : 0n; + const total = 1n << BigInt(hostBits); const firstValue = networkValue; const lastValue = networkValue + total - 1n; - const maskHostBits = BigInt(hostBits); - const maskValue = hostBits === 0 ? 0n : ((1n << (128n - maskHostBits)) - 1n) << maskHostBits; + // Top `prefix` bits set. (2^p - 1) << (128 - p) is exact for every p in + // 0..128 — the old special case for hostBits === 0 was inverted and + // produced an all-zero netmask for /128 (#differential fixture). + const maskValue = ((1n << BigInt(prefix)) - 1n) << BigInt(128 - prefix); const { type, scope } = describeType(address); diff --git a/src/tools/ipv6-subnet-calculator/ipv6.fixture.json b/src/tools/ipv6-subnet-calculator/ipv6.fixture.json new file mode 100644 index 00000000..0bba7744 --- /dev/null +++ b/src/tools/ipv6-subnet-calculator/ipv6.fixture.json @@ -0,0 +1,1242 @@ +[ + { + "input": "9417:7dc:8770:f0b6:d75d:f7ee:5c1f:aa9f/64", + "expanded": "9417:07dc:8770:f0b6:d75d:f7ee:5c1f:aa9f", + "compressed": "9417:7dc:8770:f0b6::", + "network": "9417:7dc:8770:f0b6::/64", + "first": "9417:7dc:8770:f0b6::", + "last": "9417:7dc:8770:f0b6:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "d2ed:d018:cbf9:952f:e408:726b:6455:1fdf/128", + "expanded": "d2ed:d018:cbf9:952f:e408:726b:6455:1fdf", + "compressed": "d2ed:d018:cbf9:952f:e408:726b:6455:1fdf", + "network": "d2ed:d018:cbf9:952f:e408:726b:6455:1fdf/128", + "first": "d2ed:d018:cbf9:952f:e408:726b:6455:1fdf", + "last": "d2ed:d018:cbf9:952f:e408:726b:6455:1fdf", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "bbb0:d683:c286:c20e:302f:ae0:2661:ddfe/127", + "expanded": "bbb0:d683:c286:c20e:302f:0ae0:2661:ddfe", + "compressed": "bbb0:d683:c286:c20e:302f:ae0:2661:ddfe", + "network": "bbb0:d683:c286:c20e:302f:ae0:2661:ddfe/127", + "first": "bbb0:d683:c286:c20e:302f:ae0:2661:ddfe", + "last": "bbb0:d683:c286:c20e:302f:ae0:2661:ddff", + "total": "2", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe" + }, + { + "input": "2fcb:5832:e466:e705:98a:4df0:22e3:f570/128", + "expanded": "2fcb:5832:e466:e705:098a:4df0:22e3:f570", + "compressed": "2fcb:5832:e466:e705:98a:4df0:22e3:f570", + "network": "2fcb:5832:e466:e705:98a:4df0:22e3:f570/128", + "first": "2fcb:5832:e466:e705:98a:4df0:22e3:f570", + "last": "2fcb:5832:e466:e705:98a:4df0:22e3:f570", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "9091:3a1f:3106:4483:572d:2d7e:36bf:7fec/96", + "expanded": "9091:3a1f:3106:4483:572d:2d7e:36bf:7fec", + "compressed": "9091:3a1f:3106:4483:572d:2d7e::", + "network": "9091:3a1f:3106:4483:572d:2d7e::/96", + "first": "9091:3a1f:3106:4483:572d:2d7e::", + "last": "9091:3a1f:3106:4483:572d:2d7e:ffff:ffff", + "total": "4294967296", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff::" + }, + { + "input": "ce0b:d65b:6406:d27d:d0c9:5e2c:411b:ff12/48", + "expanded": "ce0b:d65b:6406:d27d:d0c9:5e2c:411b:ff12", + "compressed": "ce0b:d65b:6406::", + "network": "ce0b:d65b:6406::/48", + "first": "ce0b:d65b:6406::", + "last": "ce0b:d65b:6406:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "3b22:e7de:dc4b:cc23:697:b18c:5006:e38/32", + "expanded": "3b22:e7de:dc4b:cc23:0697:b18c:5006:0e38", + "compressed": "3b22:e7de::", + "network": "3b22:e7de::/32", + "first": "3b22:e7de::", + "last": "3b22:e7de:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "79228162514264337593543950336", + "netmask": "ffff:ffff::" + }, + { + "input": "7ad9:3428:4356:2f72:bf9b:4438:3f98:f1bb/120", + "expanded": "7ad9:3428:4356:2f72:bf9b:4438:3f98:f1bb", + "compressed": "7ad9:3428:4356:2f72:bf9b:4438:3f98:f100", + "network": "7ad9:3428:4356:2f72:bf9b:4438:3f98:f100/120", + "first": "7ad9:3428:4356:2f72:bf9b:4438:3f98:f100", + "last": "7ad9:3428:4356:2f72:bf9b:4438:3f98:f1ff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "b213:3a63:80f9:1ecf:6362:8ff7:5c31:d441/16", + "expanded": "b213:3a63:80f9:1ecf:6362:8ff7:5c31:d441", + "compressed": "b213::", + "network": "b213::/16", + "first": "b213::", + "last": "b213:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "9780:2716:63b2:5992:7314:4f18:e87:7968/105", + "expanded": "9780:2716:63b2:5992:7314:4f18:0e87:7968", + "compressed": "9780:2716:63b2:5992:7314:4f18:e80:0", + "network": "9780:2716:63b2:5992:7314:4f18:e80:0/105", + "first": "9780:2716:63b2:5992:7314:4f18:e80:0", + "last": "9780:2716:63b2:5992:7314:4f18:eff:ffff", + "total": "8388608", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ff80:0" + }, + { + "input": "ad4f:23b9:d437:df60:1b91:e6b0:1f49:1554/112", + "expanded": "ad4f:23b9:d437:df60:1b91:e6b0:1f49:1554", + "compressed": "ad4f:23b9:d437:df60:1b91:e6b0:1f49:0", + "network": "ad4f:23b9:d437:df60:1b91:e6b0:1f49:0/112", + "first": "ad4f:23b9:d437:df60:1b91:e6b0:1f49:0", + "last": "ad4f:23b9:d437:df60:1b91:e6b0:1f49:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "6c5f:e71b:2d0a:56c:ffc8:3d74:61ad:5f4b/112", + "expanded": "6c5f:e71b:2d0a:056c:ffc8:3d74:61ad:5f4b", + "compressed": "6c5f:e71b:2d0a:56c:ffc8:3d74:61ad:0", + "network": "6c5f:e71b:2d0a:56c:ffc8:3d74:61ad:0/112", + "first": "6c5f:e71b:2d0a:56c:ffc8:3d74:61ad:0", + "last": "6c5f:e71b:2d0a:56c:ffc8:3d74:61ad:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "48ed:81e7:86ba:40f1:ba9b:6711:a1e3:e16/16", + "expanded": "48ed:81e7:86ba:40f1:ba9b:6711:a1e3:0e16", + "compressed": "48ed::", + "network": "48ed::/16", + "first": "48ed::", + "last": "48ed:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "e555:9766:f57c:b482:42a:39bb:71a3:4991/112", + "expanded": "e555:9766:f57c:b482:042a:39bb:71a3:4991", + "compressed": "e555:9766:f57c:b482:42a:39bb:71a3:0", + "network": "e555:9766:f57c:b482:42a:39bb:71a3:0/112", + "first": "e555:9766:f57c:b482:42a:39bb:71a3:0", + "last": "e555:9766:f57c:b482:42a:39bb:71a3:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "abc2:4062:f12b:e2a9:7035:85e3:3da9:4211/127", + "expanded": "abc2:4062:f12b:e2a9:7035:85e3:3da9:4211", + "compressed": "abc2:4062:f12b:e2a9:7035:85e3:3da9:4210", + "network": "abc2:4062:f12b:e2a9:7035:85e3:3da9:4210/127", + "first": "abc2:4062:f12b:e2a9:7035:85e3:3da9:4210", + "last": "abc2:4062:f12b:e2a9:7035:85e3:3da9:4211", + "total": "2", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe" + }, + { + "input": "bbd2:aef0:794c:6dcc:2215:207b:73ad:86d2/120", + "expanded": "bbd2:aef0:794c:6dcc:2215:207b:73ad:86d2", + "compressed": "bbd2:aef0:794c:6dcc:2215:207b:73ad:8600", + "network": "bbd2:aef0:794c:6dcc:2215:207b:73ad:8600/120", + "first": "bbd2:aef0:794c:6dcc:2215:207b:73ad:8600", + "last": "bbd2:aef0:794c:6dcc:2215:207b:73ad:86ff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "178d:1501:3f49:b96b:3907:7d6a:94fc:f4a/48", + "expanded": "178d:1501:3f49:b96b:3907:7d6a:94fc:0f4a", + "compressed": "178d:1501:3f49::", + "network": "178d:1501:3f49::/48", + "first": "178d:1501:3f49::", + "last": "178d:1501:3f49:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "54eb:2a62:91a8:9407:d20:e53b:358f:bdc1/32", + "expanded": "54eb:2a62:91a8:9407:0d20:e53b:358f:bdc1", + "compressed": "54eb:2a62::", + "network": "54eb:2a62::/32", + "first": "54eb:2a62::", + "last": "54eb:2a62:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "79228162514264337593543950336", + "netmask": "ffff:ffff::" + }, + { + "input": "5ec4:90ff:1d67:7adb:ff67:a2f0:7025:e6b3/32", + "expanded": "5ec4:90ff:1d67:7adb:ff67:a2f0:7025:e6b3", + "compressed": "5ec4:90ff::", + "network": "5ec4:90ff::/32", + "first": "5ec4:90ff::", + "last": "5ec4:90ff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "79228162514264337593543950336", + "netmask": "ffff:ffff::" + }, + { + "input": "25e7:2d19:14de:550:a739:d0a9:c49e:d36/127", + "expanded": "25e7:2d19:14de:0550:a739:d0a9:c49e:0d36", + "compressed": "25e7:2d19:14de:550:a739:d0a9:c49e:d36", + "network": "25e7:2d19:14de:550:a739:d0a9:c49e:d36/127", + "first": "25e7:2d19:14de:550:a739:d0a9:c49e:d36", + "last": "25e7:2d19:14de:550:a739:d0a9:c49e:d37", + "total": "2", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe" + }, + { + "input": "faff:5682:776e:b9f9:a6e1:e81:d2bf:8f1a/112", + "expanded": "faff:5682:776e:b9f9:a6e1:0e81:d2bf:8f1a", + "compressed": "faff:5682:776e:b9f9:a6e1:e81:d2bf:0", + "network": "faff:5682:776e:b9f9:a6e1:e81:d2bf:0/112", + "first": "faff:5682:776e:b9f9:a6e1:e81:d2bf:0", + "last": "faff:5682:776e:b9f9:a6e1:e81:d2bf:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "8977:335b:43d1:494f:7fca:59fa:5f46:c048/120", + "expanded": "8977:335b:43d1:494f:7fca:59fa:5f46:c048", + "compressed": "8977:335b:43d1:494f:7fca:59fa:5f46:c000", + "network": "8977:335b:43d1:494f:7fca:59fa:5f46:c000/120", + "first": "8977:335b:43d1:494f:7fca:59fa:5f46:c000", + "last": "8977:335b:43d1:494f:7fca:59fa:5f46:c0ff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "ae77:2a0e:ac28:37fd:310c:23ec:255f:40a9/120", + "expanded": "ae77:2a0e:ac28:37fd:310c:23ec:255f:40a9", + "compressed": "ae77:2a0e:ac28:37fd:310c:23ec:255f:4000", + "network": "ae77:2a0e:ac28:37fd:310c:23ec:255f:4000/120", + "first": "ae77:2a0e:ac28:37fd:310c:23ec:255f:4000", + "last": "ae77:2a0e:ac28:37fd:310c:23ec:255f:40ff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "77be:3105:c3c:2a77:f102:3e57:71d5:77b5/64", + "expanded": "77be:3105:0c3c:2a77:f102:3e57:71d5:77b5", + "compressed": "77be:3105:c3c:2a77::", + "network": "77be:3105:c3c:2a77::/64", + "first": "77be:3105:c3c:2a77::", + "last": "77be:3105:c3c:2a77:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "82cb:c6bb:e13:1eae:8b36:5edc:3a41:8cb1/32", + "expanded": "82cb:c6bb:0e13:1eae:8b36:5edc:3a41:8cb1", + "compressed": "82cb:c6bb::", + "network": "82cb:c6bb::/32", + "first": "82cb:c6bb::", + "last": "82cb:c6bb:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "79228162514264337593543950336", + "netmask": "ffff:ffff::" + }, + { + "input": "3bd3:d84f:11ca:205b:21cd:3df5:72eb:411b/96", + "expanded": "3bd3:d84f:11ca:205b:21cd:3df5:72eb:411b", + "compressed": "3bd3:d84f:11ca:205b:21cd:3df5::", + "network": "3bd3:d84f:11ca:205b:21cd:3df5::/96", + "first": "3bd3:d84f:11ca:205b:21cd:3df5::", + "last": "3bd3:d84f:11ca:205b:21cd:3df5:ffff:ffff", + "total": "4294967296", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff::" + }, + { + "input": "b07d:e339:fcf6:3f58:ccc8:c0c3:7843:5b2d/16", + "expanded": "b07d:e339:fcf6:3f58:ccc8:c0c3:7843:5b2d", + "compressed": "b07d::", + "network": "b07d::/16", + "first": "b07d::", + "last": "b07d:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "325d:34f5:2fe2:69cd:3820:b09e:4f20:1ad2/71", + "expanded": "325d:34f5:2fe2:69cd:3820:b09e:4f20:1ad2", + "compressed": "325d:34f5:2fe2:69cd:3800::", + "network": "325d:34f5:2fe2:69cd:3800::/71", + "first": "325d:34f5:2fe2:69cd:3800::", + "last": "325d:34f5:2fe2:69cd:39ff:ffff:ffff:ffff", + "total": "144115188075855872", + "netmask": "ffff:ffff:ffff:ffff:fe00::" + }, + { + "input": "5cab:94ea:da11:7fb:f0b9:498a:f3d4:9b6/64", + "expanded": "5cab:94ea:da11:07fb:f0b9:498a:f3d4:09b6", + "compressed": "5cab:94ea:da11:7fb::", + "network": "5cab:94ea:da11:7fb::/64", + "first": "5cab:94ea:da11:7fb::", + "last": "5cab:94ea:da11:7fb:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "34ed:765a:8f61:5618:cfca:16d7:8b80:d0b1/128", + "expanded": "34ed:765a:8f61:5618:cfca:16d7:8b80:d0b1", + "compressed": "34ed:765a:8f61:5618:cfca:16d7:8b80:d0b1", + "network": "34ed:765a:8f61:5618:cfca:16d7:8b80:d0b1/128", + "first": "34ed:765a:8f61:5618:cfca:16d7:8b80:d0b1", + "last": "34ed:765a:8f61:5618:cfca:16d7:8b80:d0b1", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "198f:ceaf:2969:8004:471a:b649:b13c:2bc6/16", + "expanded": "198f:ceaf:2969:8004:471a:b649:b13c:2bc6", + "compressed": "198f::", + "network": "198f::/16", + "first": "198f::", + "last": "198f:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "2ee8:62e0:c166:83e0:2e98:d91e:7978:f0df/112", + "expanded": "2ee8:62e0:c166:83e0:2e98:d91e:7978:f0df", + "compressed": "2ee8:62e0:c166:83e0:2e98:d91e:7978:0", + "network": "2ee8:62e0:c166:83e0:2e98:d91e:7978:0/112", + "first": "2ee8:62e0:c166:83e0:2e98:d91e:7978:0", + "last": "2ee8:62e0:c166:83e0:2e98:d91e:7978:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "d39e:bc2d:ae60:33c5:b14e:60af:2de7:bfdf/128", + "expanded": "d39e:bc2d:ae60:33c5:b14e:60af:2de7:bfdf", + "compressed": "d39e:bc2d:ae60:33c5:b14e:60af:2de7:bfdf", + "network": "d39e:bc2d:ae60:33c5:b14e:60af:2de7:bfdf/128", + "first": "d39e:bc2d:ae60:33c5:b14e:60af:2de7:bfdf", + "last": "d39e:bc2d:ae60:33c5:b14e:60af:2de7:bfdf", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "eede:2813:52ee:6543:ed90:916d:889e:9b1f/16", + "expanded": "eede:2813:52ee:6543:ed90:916d:889e:9b1f", + "compressed": "eede::", + "network": "eede::/16", + "first": "eede::", + "last": "eede:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "a1b4:89e6:916:9ffd:ca1b:3df9:4073:88aa/96", + "expanded": "a1b4:89e6:0916:9ffd:ca1b:3df9:4073:88aa", + "compressed": "a1b4:89e6:916:9ffd:ca1b:3df9::", + "network": "a1b4:89e6:916:9ffd:ca1b:3df9::/96", + "first": "a1b4:89e6:916:9ffd:ca1b:3df9::", + "last": "a1b4:89e6:916:9ffd:ca1b:3df9:ffff:ffff", + "total": "4294967296", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff::" + }, + { + "input": "9e24:7801:e1c7:5423:430:85b3:381d:c887/32", + "expanded": "9e24:7801:e1c7:5423:0430:85b3:381d:c887", + "compressed": "9e24:7801::", + "network": "9e24:7801::/32", + "first": "9e24:7801::", + "last": "9e24:7801:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "79228162514264337593543950336", + "netmask": "ffff:ffff::" + }, + { + "input": "c480:401c:b3e6:c357:3760:a7a2:a271:9a30/0", + "expanded": "c480:401c:b3e6:c357:3760:a7a2:a271:9a30", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "ff15:610d:b112:508d:def1:f844:2642:3b52/120", + "expanded": "ff15:610d:b112:508d:def1:f844:2642:3b52", + "compressed": "ff15:610d:b112:508d:def1:f844:2642:3b00", + "network": "ff15:610d:b112:508d:def1:f844:2642:3b00/120", + "first": "ff15:610d:b112:508d:def1:f844:2642:3b00", + "last": "ff15:610d:b112:508d:def1:f844:2642:3bff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "e346:ecf7:dd96:791f:8aed:8606:d446:6c73/16", + "expanded": "e346:ecf7:dd96:791f:8aed:8606:d446:6c73", + "compressed": "e346::", + "network": "e346::/16", + "first": "e346::", + "last": "e346:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "501e:616d:55f7:4ad1:8220:442b:8197:dbca/8", + "expanded": "501e:616d:55f7:4ad1:8220:442b:8197:dbca", + "compressed": "5000::", + "network": "5000::/8", + "first": "5000::", + "last": "50ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "1329227995784915872903807060280344576", + "netmask": "ff00::" + }, + { + "input": "655b:b1c9:a105:6ef0:8b57:d9f7:4ad3:c1de/48", + "expanded": "655b:b1c9:a105:6ef0:8b57:d9f7:4ad3:c1de", + "compressed": "655b:b1c9:a105::", + "network": "655b:b1c9:a105::/48", + "first": "655b:b1c9:a105::", + "last": "655b:b1c9:a105:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "3e34:d1e8:efaa:2482:ccb5:ccd7:a3b3:e98d/64", + "expanded": "3e34:d1e8:efaa:2482:ccb5:ccd7:a3b3:e98d", + "compressed": "3e34:d1e8:efaa:2482::", + "network": "3e34:d1e8:efaa:2482::/64", + "first": "3e34:d1e8:efaa:2482::", + "last": "3e34:d1e8:efaa:2482:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "e5c5:f401:5367:5b10:ba14:7595:f9b6:9fee/0", + "expanded": "e5c5:f401:5367:5b10:ba14:7595:f9b6:9fee", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "a150:bd4:e6a9:d736:dede:da1a:c018:6f1a/112", + "expanded": "a150:0bd4:e6a9:d736:dede:da1a:c018:6f1a", + "compressed": "a150:bd4:e6a9:d736:dede:da1a:c018:0", + "network": "a150:bd4:e6a9:d736:dede:da1a:c018:0/112", + "first": "a150:bd4:e6a9:d736:dede:da1a:c018:0", + "last": "a150:bd4:e6a9:d736:dede:da1a:c018:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "7ee1:59b1:968b:634e:6a55:76e9:c4f7:fcc9/128", + "expanded": "7ee1:59b1:968b:634e:6a55:76e9:c4f7:fcc9", + "compressed": "7ee1:59b1:968b:634e:6a55:76e9:c4f7:fcc9", + "network": "7ee1:59b1:968b:634e:6a55:76e9:c4f7:fcc9/128", + "first": "7ee1:59b1:968b:634e:6a55:76e9:c4f7:fcc9", + "last": "7ee1:59b1:968b:634e:6a55:76e9:c4f7:fcc9", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "927c:8dce:5f64:413f:54fa:395f:cafd:6bf4/120", + "expanded": "927c:8dce:5f64:413f:54fa:395f:cafd:6bf4", + "compressed": "927c:8dce:5f64:413f:54fa:395f:cafd:6b00", + "network": "927c:8dce:5f64:413f:54fa:395f:cafd:6b00/120", + "first": "927c:8dce:5f64:413f:54fa:395f:cafd:6b00", + "last": "927c:8dce:5f64:413f:54fa:395f:cafd:6bff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "28e3:e05d:978a:c29d:4404:ff5c:5aaa:b3de/16", + "expanded": "28e3:e05d:978a:c29d:4404:ff5c:5aaa:b3de", + "compressed": "28e3::", + "network": "28e3::/16", + "first": "28e3::", + "last": "28e3:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "2702:49f8:9a68:1906:9e54:f8e2:6098:a5a7/0", + "expanded": "2702:49f8:9a68:1906:9e54:f8e2:6098:a5a7", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "f18e:e9e2:40ce:d139:5d5a:e2c6:28c1:cbef/127", + "expanded": "f18e:e9e2:40ce:d139:5d5a:e2c6:28c1:cbef", + "compressed": "f18e:e9e2:40ce:d139:5d5a:e2c6:28c1:cbee", + "network": "f18e:e9e2:40ce:d139:5d5a:e2c6:28c1:cbee/127", + "first": "f18e:e9e2:40ce:d139:5d5a:e2c6:28c1:cbee", + "last": "f18e:e9e2:40ce:d139:5d5a:e2c6:28c1:cbef", + "total": "2", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe" + }, + { + "input": "bd73:90d9:98f3:5cda:162f:bef0:2915:7ee9/32", + "expanded": "bd73:90d9:98f3:5cda:162f:bef0:2915:7ee9", + "compressed": "bd73:90d9::", + "network": "bd73:90d9::/32", + "first": "bd73:90d9::", + "last": "bd73:90d9:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "79228162514264337593543950336", + "netmask": "ffff:ffff::" + }, + { + "input": "a9b1:76a8:d95b:dd70:1aa5:4781:a6a5:df81/112", + "expanded": "a9b1:76a8:d95b:dd70:1aa5:4781:a6a5:df81", + "compressed": "a9b1:76a8:d95b:dd70:1aa5:4781:a6a5:0", + "network": "a9b1:76a8:d95b:dd70:1aa5:4781:a6a5:0/112", + "first": "a9b1:76a8:d95b:dd70:1aa5:4781:a6a5:0", + "last": "a9b1:76a8:d95b:dd70:1aa5:4781:a6a5:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "40f3:9e7:a2c6:ed:579c:8abc:abb2:b433/16", + "expanded": "40f3:09e7:a2c6:00ed:579c:8abc:abb2:b433", + "compressed": "40f3::", + "network": "40f3::/16", + "first": "40f3::", + "last": "40f3:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "4fea:b48:81fb:fa8b:ecbe:3d27:fc85:9246/0", + "expanded": "4fea:0b48:81fb:fa8b:ecbe:3d27:fc85:9246", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "475f:94b8:c186:78ee:d2fd:fec:e11f:218/19", + "expanded": "475f:94b8:c186:78ee:d2fd:0fec:e11f:0218", + "compressed": "475f:8000::", + "network": "475f:8000::/19", + "first": "475f:8000::", + "last": "475f:9fff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "649037107316853453566312041152512", + "netmask": "ffff:e000::" + }, + { + "input": "e1b9:546d:b494:48f0:d40b:878:e166:75a1/96", + "expanded": "e1b9:546d:b494:48f0:d40b:0878:e166:75a1", + "compressed": "e1b9:546d:b494:48f0:d40b:878::", + "network": "e1b9:546d:b494:48f0:d40b:878::/96", + "first": "e1b9:546d:b494:48f0:d40b:878::", + "last": "e1b9:546d:b494:48f0:d40b:878:ffff:ffff", + "total": "4294967296", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff::" + }, + { + "input": "260c:59d9:221c:b082:3049:62f2:d58e:117c/128", + "expanded": "260c:59d9:221c:b082:3049:62f2:d58e:117c", + "compressed": "260c:59d9:221c:b082:3049:62f2:d58e:117c", + "network": "260c:59d9:221c:b082:3049:62f2:d58e:117c/128", + "first": "260c:59d9:221c:b082:3049:62f2:d58e:117c", + "last": "260c:59d9:221c:b082:3049:62f2:d58e:117c", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "e09c:707b:2a37:d5a0:7168:61f5:ae74:f180/48", + "expanded": "e09c:707b:2a37:d5a0:7168:61f5:ae74:f180", + "compressed": "e09c:707b:2a37::", + "network": "e09c:707b:2a37::/48", + "first": "e09c:707b:2a37::", + "last": "e09c:707b:2a37:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "9598:4315:18aa:2a2f:2e66:ed88:9c73:68f4/112", + "expanded": "9598:4315:18aa:2a2f:2e66:ed88:9c73:68f4", + "compressed": "9598:4315:18aa:2a2f:2e66:ed88:9c73:0", + "network": "9598:4315:18aa:2a2f:2e66:ed88:9c73:0/112", + "first": "9598:4315:18aa:2a2f:2e66:ed88:9c73:0", + "last": "9598:4315:18aa:2a2f:2e66:ed88:9c73:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "dfe:cf73:2e0d:44f8:4d2:5a12:9d46:6102/8", + "expanded": "0dfe:cf73:2e0d:44f8:04d2:5a12:9d46:6102", + "compressed": "d00::", + "network": "d00::/8", + "first": "d00::", + "last": "dff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "1329227995784915872903807060280344576", + "netmask": "ff00::" + }, + { + "input": "3f85:4cc6:a23c:3b83:a3fa:2956:9aab:badf/96", + "expanded": "3f85:4cc6:a23c:3b83:a3fa:2956:9aab:badf", + "compressed": "3f85:4cc6:a23c:3b83:a3fa:2956::", + "network": "3f85:4cc6:a23c:3b83:a3fa:2956::/96", + "first": "3f85:4cc6:a23c:3b83:a3fa:2956::", + "last": "3f85:4cc6:a23c:3b83:a3fa:2956:ffff:ffff", + "total": "4294967296", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff::" + }, + { + "input": "8336:8aef:af2f:c97b:5082:2850:9640:34a/128", + "expanded": "8336:8aef:af2f:c97b:5082:2850:9640:034a", + "compressed": "8336:8aef:af2f:c97b:5082:2850:9640:34a", + "network": "8336:8aef:af2f:c97b:5082:2850:9640:34a/128", + "first": "8336:8aef:af2f:c97b:5082:2850:9640:34a", + "last": "8336:8aef:af2f:c97b:5082:2850:9640:34a", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "3e90:6fe:f57e:4fe7:ee99:20cd:38bb:b09b/67", + "expanded": "3e90:06fe:f57e:4fe7:ee99:20cd:38bb:b09b", + "compressed": "3e90:6fe:f57e:4fe7:e000::", + "network": "3e90:6fe:f57e:4fe7:e000::/67", + "first": "3e90:6fe:f57e:4fe7:e000::", + "last": "3e90:6fe:f57e:4fe7:ffff:ffff:ffff:ffff", + "total": "2305843009213693952", + "netmask": "ffff:ffff:ffff:ffff:e000::" + }, + { + "input": "1b34:c4e5:afe9:ea28:5ec6:31e:b3bf:397d/0", + "expanded": "1b34:c4e5:afe9:ea28:5ec6:031e:b3bf:397d", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "b99d:74f2:613:53ab:8a8e:b637:25b4:7ac9/0", + "expanded": "b99d:74f2:0613:53ab:8a8e:b637:25b4:7ac9", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "c20b:288c:ca0e:d457:b3da:5a41:2ec8:d178/64", + "expanded": "c20b:288c:ca0e:d457:b3da:5a41:2ec8:d178", + "compressed": "c20b:288c:ca0e:d457::", + "network": "c20b:288c:ca0e:d457::/64", + "first": "c20b:288c:ca0e:d457::", + "last": "c20b:288c:ca0e:d457:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "e357:2ec:a639:a585:66a9:2ec5:7242:15bc/96", + "expanded": "e357:02ec:a639:a585:66a9:2ec5:7242:15bc", + "compressed": "e357:2ec:a639:a585:66a9:2ec5::", + "network": "e357:2ec:a639:a585:66a9:2ec5::/96", + "first": "e357:2ec:a639:a585:66a9:2ec5::", + "last": "e357:2ec:a639:a585:66a9:2ec5:ffff:ffff", + "total": "4294967296", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff::" + }, + { + "input": "7290:b736:fc98:cac9:7ee4:9a13:599c:9217/48", + "expanded": "7290:b736:fc98:cac9:7ee4:9a13:599c:9217", + "compressed": "7290:b736:fc98::", + "network": "7290:b736:fc98::/48", + "first": "7290:b736:fc98::", + "last": "7290:b736:fc98:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "1140:a84:ee48:1be4:b8b2:5aa:a179:9913/48", + "expanded": "1140:0a84:ee48:1be4:b8b2:05aa:a179:9913", + "compressed": "1140:a84:ee48::", + "network": "1140:a84:ee48::/48", + "first": "1140:a84:ee48::", + "last": "1140:a84:ee48:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "c2b6:366e:66ca:a6d8:bf0c:a9e7:506f:2859/120", + "expanded": "c2b6:366e:66ca:a6d8:bf0c:a9e7:506f:2859", + "compressed": "c2b6:366e:66ca:a6d8:bf0c:a9e7:506f:2800", + "network": "c2b6:366e:66ca:a6d8:bf0c:a9e7:506f:2800/120", + "first": "c2b6:366e:66ca:a6d8:bf0c:a9e7:506f:2800", + "last": "c2b6:366e:66ca:a6d8:bf0c:a9e7:506f:28ff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "c0c4:21d6:aaf8:70be:623e:e0d8:d9de:29d4/64", + "expanded": "c0c4:21d6:aaf8:70be:623e:e0d8:d9de:29d4", + "compressed": "c0c4:21d6:aaf8:70be::", + "network": "c0c4:21d6:aaf8:70be::/64", + "first": "c0c4:21d6:aaf8:70be::", + "last": "c0c4:21d6:aaf8:70be:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "4c86:a104:ae41:cdc6:46da:61c1:1471:5d8d/17", + "expanded": "4c86:a104:ae41:cdc6:46da:61c1:1471:5d8d", + "compressed": "4c86:8000::", + "network": "4c86:8000::/17", + "first": "4c86:8000::", + "last": "4c86:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "2596148429267413814265248164610048", + "netmask": "ffff:8000::" + }, + { + "input": "9b36:36a1:370:e3a1:19d8:1335:7e27:ed8c/8", + "expanded": "9b36:36a1:0370:e3a1:19d8:1335:7e27:ed8c", + "compressed": "9b00::", + "network": "9b00::/8", + "first": "9b00::", + "last": "9bff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "1329227995784915872903807060280344576", + "netmask": "ff00::" + }, + { + "input": "dcc8:d464:e187:60c2:9575:b959:9460:8eba/112", + "expanded": "dcc8:d464:e187:60c2:9575:b959:9460:8eba", + "compressed": "dcc8:d464:e187:60c2:9575:b959:9460:0", + "network": "dcc8:d464:e187:60c2:9575:b959:9460:0/112", + "first": "dcc8:d464:e187:60c2:9575:b959:9460:0", + "last": "dcc8:d464:e187:60c2:9575:b959:9460:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "958f:af5f:15d6:37d3:dad1:9a2e:8ed7:a7de/16", + "expanded": "958f:af5f:15d6:37d3:dad1:9a2e:8ed7:a7de", + "compressed": "958f::", + "network": "958f::/16", + "first": "958f::", + "last": "958f:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "4d78:4cf6:56e7:f631:c5fa:f642:a42e:9862/128", + "expanded": "4d78:4cf6:56e7:f631:c5fa:f642:a42e:9862", + "compressed": "4d78:4cf6:56e7:f631:c5fa:f642:a42e:9862", + "network": "4d78:4cf6:56e7:f631:c5fa:f642:a42e:9862/128", + "first": "4d78:4cf6:56e7:f631:c5fa:f642:a42e:9862", + "last": "4d78:4cf6:56e7:f631:c5fa:f642:a42e:9862", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "4b37:4243:e505:cfb8:12f8:672c:1bee:b052/112", + "expanded": "4b37:4243:e505:cfb8:12f8:672c:1bee:b052", + "compressed": "4b37:4243:e505:cfb8:12f8:672c:1bee:0", + "network": "4b37:4243:e505:cfb8:12f8:672c:1bee:0/112", + "first": "4b37:4243:e505:cfb8:12f8:672c:1bee:0", + "last": "4b37:4243:e505:cfb8:12f8:672c:1bee:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "be7b:4e4a:50b4:e754:fd9a:fe4:1b77:c003/72", + "expanded": "be7b:4e4a:50b4:e754:fd9a:0fe4:1b77:c003", + "compressed": "be7b:4e4a:50b4:e754:fd00::", + "network": "be7b:4e4a:50b4:e754:fd00::/72", + "first": "be7b:4e4a:50b4:e754:fd00::", + "last": "be7b:4e4a:50b4:e754:fdff:ffff:ffff:ffff", + "total": "72057594037927936", + "netmask": "ffff:ffff:ffff:ffff:ff00::" + }, + { + "input": "558b:3eab:135e:f5b4:6443:f696:5850:59cc/8", + "expanded": "558b:3eab:135e:f5b4:6443:f696:5850:59cc", + "compressed": "5500::", + "network": "5500::/8", + "first": "5500::", + "last": "55ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "1329227995784915872903807060280344576", + "netmask": "ff00::" + }, + { + "input": "90ee:d86c:be7e:bba3:ac67:9c31:ade3:9e76/128", + "expanded": "90ee:d86c:be7e:bba3:ac67:9c31:ade3:9e76", + "compressed": "90ee:d86c:be7e:bba3:ac67:9c31:ade3:9e76", + "network": "90ee:d86c:be7e:bba3:ac67:9c31:ade3:9e76/128", + "first": "90ee:d86c:be7e:bba3:ac67:9c31:ade3:9e76", + "last": "90ee:d86c:be7e:bba3:ac67:9c31:ade3:9e76", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "26f2:2878:8083:1b41:fbd9:43cc:de84:39f8/112", + "expanded": "26f2:2878:8083:1b41:fbd9:43cc:de84:39f8", + "compressed": "26f2:2878:8083:1b41:fbd9:43cc:de84:0", + "network": "26f2:2878:8083:1b41:fbd9:43cc:de84:0/112", + "first": "26f2:2878:8083:1b41:fbd9:43cc:de84:0", + "last": "26f2:2878:8083:1b41:fbd9:43cc:de84:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "3eb5:191a:5ce5:d005:65d9:297a:d6d:83a8/16", + "expanded": "3eb5:191a:5ce5:d005:65d9:297a:0d6d:83a8", + "compressed": "3eb5::", + "network": "3eb5::/16", + "first": "3eb5::", + "last": "3eb5:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "f447:80d9:165d:e1d0:3349:d7df:2967:6032/112", + "expanded": "f447:80d9:165d:e1d0:3349:d7df:2967:6032", + "compressed": "f447:80d9:165d:e1d0:3349:d7df:2967:0", + "network": "f447:80d9:165d:e1d0:3349:d7df:2967:0/112", + "first": "f447:80d9:165d:e1d0:3349:d7df:2967:0", + "last": "f447:80d9:165d:e1d0:3349:d7df:2967:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "8b84:b1a6:5ec2:f1c4:3665:d7f:81a2:b9ef/64", + "expanded": "8b84:b1a6:5ec2:f1c4:3665:0d7f:81a2:b9ef", + "compressed": "8b84:b1a6:5ec2:f1c4::", + "network": "8b84:b1a6:5ec2:f1c4::/64", + "first": "8b84:b1a6:5ec2:f1c4::", + "last": "8b84:b1a6:5ec2:f1c4:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "5ce0:2425:9b97:8600:97c4:46d2:af01:a32e/64", + "expanded": "5ce0:2425:9b97:8600:97c4:46d2:af01:a32e", + "compressed": "5ce0:2425:9b97:8600::", + "network": "5ce0:2425:9b97:8600::/64", + "first": "5ce0:2425:9b97:8600::", + "last": "5ce0:2425:9b97:8600:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "913e:f412:115a:2519:9bff:41fb:565b:d076/128", + "expanded": "913e:f412:115a:2519:9bff:41fb:565b:d076", + "compressed": "913e:f412:115a:2519:9bff:41fb:565b:d076", + "network": "913e:f412:115a:2519:9bff:41fb:565b:d076/128", + "first": "913e:f412:115a:2519:9bff:41fb:565b:d076", + "last": "913e:f412:115a:2519:9bff:41fb:565b:d076", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "59ae:9d25:7937:7e1d:4c9d:17:4111:dc92/48", + "expanded": "59ae:9d25:7937:7e1d:4c9d:0017:4111:dc92", + "compressed": "59ae:9d25:7937::", + "network": "59ae:9d25:7937::/48", + "first": "59ae:9d25:7937::", + "last": "59ae:9d25:7937:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "cc18:3f1d:2ccc:4ea1:76f:f2e3:6dfc:c8c3/64", + "expanded": "cc18:3f1d:2ccc:4ea1:076f:f2e3:6dfc:c8c3", + "compressed": "cc18:3f1d:2ccc:4ea1::", + "network": "cc18:3f1d:2ccc:4ea1::/64", + "first": "cc18:3f1d:2ccc:4ea1::", + "last": "cc18:3f1d:2ccc:4ea1:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "a60a:1728:772c:9eb4:ebb8:b295:cd1d:dcf2/48", + "expanded": "a60a:1728:772c:9eb4:ebb8:b295:cd1d:dcf2", + "compressed": "a60a:1728:772c::", + "network": "a60a:1728:772c::/48", + "first": "a60a:1728:772c::", + "last": "a60a:1728:772c:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "2fe0:6b3f:47c4:b01d:b6c7:ba64:10e0:9a9e/16", + "expanded": "2fe0:6b3f:47c4:b01d:b6c7:ba64:10e0:9a9e", + "compressed": "2fe0::", + "network": "2fe0::/16", + "first": "2fe0::", + "last": "2fe0:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "8d74:b745:dc63:e395:1386:f436:4145:a0d/8", + "expanded": "8d74:b745:dc63:e395:1386:f436:4145:0a0d", + "compressed": "8d00::", + "network": "8d00::/8", + "first": "8d00::", + "last": "8dff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "1329227995784915872903807060280344576", + "netmask": "ff00::" + }, + { + "input": "497d:2804:3bf4:d14e:5a62:879a:ceb1:a861/120", + "expanded": "497d:2804:3bf4:d14e:5a62:879a:ceb1:a861", + "compressed": "497d:2804:3bf4:d14e:5a62:879a:ceb1:a800", + "network": "497d:2804:3bf4:d14e:5a62:879a:ceb1:a800/120", + "first": "497d:2804:3bf4:d14e:5a62:879a:ceb1:a800", + "last": "497d:2804:3bf4:d14e:5a62:879a:ceb1:a8ff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "4b0:a9f9:dcf5:1c22:f3a4:2e40:ef77:39d8/128", + "expanded": "04b0:a9f9:dcf5:1c22:f3a4:2e40:ef77:39d8", + "compressed": "4b0:a9f9:dcf5:1c22:f3a4:2e40:ef77:39d8", + "network": "4b0:a9f9:dcf5:1c22:f3a4:2e40:ef77:39d8/128", + "first": "4b0:a9f9:dcf5:1c22:f3a4:2e40:ef77:39d8", + "last": "4b0:a9f9:dcf5:1c22:f3a4:2e40:ef77:39d8", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "236:9ae8:8988:94a8:d7c:5347:3992:5d80/48", + "expanded": "0236:9ae8:8988:94a8:0d7c:5347:3992:5d80", + "compressed": "236:9ae8:8988::", + "network": "236:9ae8:8988::/48", + "first": "236:9ae8:8988::", + "last": "236:9ae8:8988:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "25a6:7c98:3ecb:ea8f:8a7b:d164:9ffa:4b06/128", + "expanded": "25a6:7c98:3ecb:ea8f:8a7b:d164:9ffa:4b06", + "compressed": "25a6:7c98:3ecb:ea8f:8a7b:d164:9ffa:4b06", + "network": "25a6:7c98:3ecb:ea8f:8a7b:d164:9ffa:4b06/128", + "first": "25a6:7c98:3ecb:ea8f:8a7b:d164:9ffa:4b06", + "last": "25a6:7c98:3ecb:ea8f:8a7b:d164:9ffa:4b06", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "1b7e:1f1:1c52:1ced:d6b5:c135:fdf:f6b0/0", + "expanded": "1b7e:01f1:1c52:1ced:d6b5:c135:0fdf:f6b0", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "f6c9:6c5d:5764:60fa:5afe:c2ac:3e56:a9c/112", + "expanded": "f6c9:6c5d:5764:60fa:5afe:c2ac:3e56:0a9c", + "compressed": "f6c9:6c5d:5764:60fa:5afe:c2ac:3e56:0", + "network": "f6c9:6c5d:5764:60fa:5afe:c2ac:3e56:0/112", + "first": "f6c9:6c5d:5764:60fa:5afe:c2ac:3e56:0", + "last": "f6c9:6c5d:5764:60fa:5afe:c2ac:3e56:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "2024:574d:ad9d:301c:247b:c9df:f1f8:21ac/127", + "expanded": "2024:574d:ad9d:301c:247b:c9df:f1f8:21ac", + "compressed": "2024:574d:ad9d:301c:247b:c9df:f1f8:21ac", + "network": "2024:574d:ad9d:301c:247b:c9df:f1f8:21ac/127", + "first": "2024:574d:ad9d:301c:247b:c9df:f1f8:21ac", + "last": "2024:574d:ad9d:301c:247b:c9df:f1f8:21ad", + "total": "2", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe" + }, + { + "input": "2606:a34f:f9ba:8bdf:d202:9ef2:da0d:3062/64", + "expanded": "2606:a34f:f9ba:8bdf:d202:9ef2:da0d:3062", + "compressed": "2606:a34f:f9ba:8bdf::", + "network": "2606:a34f:f9ba:8bdf::/64", + "first": "2606:a34f:f9ba:8bdf::", + "last": "2606:a34f:f9ba:8bdf:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "c211:c8fc:87ae:8263:6863:a2f2:4c86:608/112", + "expanded": "c211:c8fc:87ae:8263:6863:a2f2:4c86:0608", + "compressed": "c211:c8fc:87ae:8263:6863:a2f2:4c86:0", + "network": "c211:c8fc:87ae:8263:6863:a2f2:4c86:0/112", + "first": "c211:c8fc:87ae:8263:6863:a2f2:4c86:0", + "last": "c211:c8fc:87ae:8263:6863:a2f2:4c86:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "f0a:9ec9:a88f:f088:912d:6fbf:5229:532/112", + "expanded": "0f0a:9ec9:a88f:f088:912d:6fbf:5229:0532", + "compressed": "f0a:9ec9:a88f:f088:912d:6fbf:5229:0", + "network": "f0a:9ec9:a88f:f088:912d:6fbf:5229:0/112", + "first": "f0a:9ec9:a88f:f088:912d:6fbf:5229:0", + "last": "f0a:9ec9:a88f:f088:912d:6fbf:5229:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "a495:c942:eb61:c7e5:6fea:edb6:3963:5737/127", + "expanded": "a495:c942:eb61:c7e5:6fea:edb6:3963:5737", + "compressed": "a495:c942:eb61:c7e5:6fea:edb6:3963:5736", + "network": "a495:c942:eb61:c7e5:6fea:edb6:3963:5736/127", + "first": "a495:c942:eb61:c7e5:6fea:edb6:3963:5736", + "last": "a495:c942:eb61:c7e5:6fea:edb6:3963:5737", + "total": "2", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe" + }, + { + "input": "ba33:4f18:7d1f:2df3:57d7:f904:7ff9:5325/120", + "expanded": "ba33:4f18:7d1f:2df3:57d7:f904:7ff9:5325", + "compressed": "ba33:4f18:7d1f:2df3:57d7:f904:7ff9:5300", + "network": "ba33:4f18:7d1f:2df3:57d7:f904:7ff9:5300/120", + "first": "ba33:4f18:7d1f:2df3:57d7:f904:7ff9:5300", + "last": "ba33:4f18:7d1f:2df3:57d7:f904:7ff9:53ff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "4c90:ba63:1a47:a1e0:a46a:4d18:2201:45c/16", + "expanded": "4c90:ba63:1a47:a1e0:a46a:4d18:2201:045c", + "compressed": "4c90::", + "network": "4c90::/16", + "first": "4c90::", + "last": "4c90:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "5192296858534827628530496329220096", + "netmask": "ffff::" + }, + { + "input": "c5e5:66ec:57c8:8d64:deaf:b009:86de:8608/32", + "expanded": "c5e5:66ec:57c8:8d64:deaf:b009:86de:8608", + "compressed": "c5e5:66ec::", + "network": "c5e5:66ec::/32", + "first": "c5e5:66ec::", + "last": "c5e5:66ec:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "79228162514264337593543950336", + "netmask": "ffff:ffff::" + }, + { + "input": "292b:2dd5:e721:3ad6:84d6:3863:94f4:3c38/0", + "expanded": "292b:2dd5:e721:3ad6:84d6:3863:94f4:3c38", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "d27:58c0:d3c4:be41:b3c3:939a:852f:daaa/96", + "expanded": "0d27:58c0:d3c4:be41:b3c3:939a:852f:daaa", + "compressed": "d27:58c0:d3c4:be41:b3c3:939a::", + "network": "d27:58c0:d3c4:be41:b3c3:939a::/96", + "first": "d27:58c0:d3c4:be41:b3c3:939a::", + "last": "d27:58c0:d3c4:be41:b3c3:939a:ffff:ffff", + "total": "4294967296", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff::" + }, + { + "input": "6120:efc2:f931:5bd9:b479:6767:9bfd:1be8/78", + "expanded": "6120:efc2:f931:5bd9:b479:6767:9bfd:1be8", + "compressed": "6120:efc2:f931:5bd9:b478::", + "network": "6120:efc2:f931:5bd9:b478::/78", + "first": "6120:efc2:f931:5bd9:b478::", + "last": "6120:efc2:f931:5bd9:b47b:ffff:ffff:ffff", + "total": "1125899906842624", + "netmask": "ffff:ffff:ffff:ffff:fffc::" + }, + { + "input": "67d4:783f:2550:6155:5381:a20c:2cc6:a7c9/112", + "expanded": "67d4:783f:2550:6155:5381:a20c:2cc6:a7c9", + "compressed": "67d4:783f:2550:6155:5381:a20c:2cc6:0", + "network": "67d4:783f:2550:6155:5381:a20c:2cc6:0/112", + "first": "67d4:783f:2550:6155:5381:a20c:2cc6:0", + "last": "67d4:783f:2550:6155:5381:a20c:2cc6:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "27fe:1b8d:931d:6f52:2189:83b4:443:9a74/32", + "expanded": "27fe:1b8d:931d:6f52:2189:83b4:0443:9a74", + "compressed": "27fe:1b8d::", + "network": "27fe:1b8d::/32", + "first": "27fe:1b8d::", + "last": "27fe:1b8d:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "79228162514264337593543950336", + "netmask": "ffff:ffff::" + }, + { + "input": "ec12:91fb:d418:ec30:25ee:efdf:41c9:2450/48", + "expanded": "ec12:91fb:d418:ec30:25ee:efdf:41c9:2450", + "compressed": "ec12:91fb:d418::", + "network": "ec12:91fb:d418::/48", + "first": "ec12:91fb:d418::", + "last": "ec12:91fb:d418:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "4955:71af:6f48:a7a4:ca95:6fb5:da62:a5ec/64", + "expanded": "4955:71af:6f48:a7a4:ca95:6fb5:da62:a5ec", + "compressed": "4955:71af:6f48:a7a4::", + "network": "4955:71af:6f48:a7a4::/64", + "first": "4955:71af:6f48:a7a4::", + "last": "4955:71af:6f48:a7a4:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "5d74:a6d0:6a1b:8f59:b668:2ddf:4eaa:dd3d/0", + "expanded": "5d74:a6d0:6a1b:8f59:b668:2ddf:4eaa:dd3d", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + }, + { + "input": "33a3:4fc4:95fd:6371:5900:fcbf:7396:1976/8", + "expanded": "33a3:4fc4:95fd:6371:5900:fcbf:7396:1976", + "compressed": "3300::", + "network": "3300::/8", + "first": "3300::", + "last": "33ff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "1329227995784915872903807060280344576", + "netmask": "ff00::" + }, + { + "input": "1323:5c54:9cab:29f0:fefc:1c78:8469:63b3/78", + "expanded": "1323:5c54:9cab:29f0:fefc:1c78:8469:63b3", + "compressed": "1323:5c54:9cab:29f0:fefc::", + "network": "1323:5c54:9cab:29f0:fefc::/78", + "first": "1323:5c54:9cab:29f0:fefc::", + "last": "1323:5c54:9cab:29f0:feff:ffff:ffff:ffff", + "total": "1125899906842624", + "netmask": "ffff:ffff:ffff:ffff:fffc::" + }, + { + "input": "e4aa:a90a:8e91:69bf:666f:b767:c446:5154/112", + "expanded": "e4aa:a90a:8e91:69bf:666f:b767:c446:5154", + "compressed": "e4aa:a90a:8e91:69bf:666f:b767:c446:0", + "network": "e4aa:a90a:8e91:69bf:666f:b767:c446:0/112", + "first": "e4aa:a90a:8e91:69bf:666f:b767:c446:0", + "last": "e4aa:a90a:8e91:69bf:666f:b767:c446:ffff", + "total": "65536", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:0" + }, + { + "input": "a8e0:8be9:c459:69b4:1639:a42c:2b0f:4eb0/127", + "expanded": "a8e0:8be9:c459:69b4:1639:a42c:2b0f:4eb0", + "compressed": "a8e0:8be9:c459:69b4:1639:a42c:2b0f:4eb0", + "network": "a8e0:8be9:c459:69b4:1639:a42c:2b0f:4eb0/127", + "first": "a8e0:8be9:c459:69b4:1639:a42c:2b0f:4eb0", + "last": "a8e0:8be9:c459:69b4:1639:a42c:2b0f:4eb1", + "total": "2", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe" + }, + { + "input": "6873:aebd:568d:f472:1b15:f2eb:e795:c2bb/64", + "expanded": "6873:aebd:568d:f472:1b15:f2eb:e795:c2bb", + "compressed": "6873:aebd:568d:f472::", + "network": "6873:aebd:568d:f472::/64", + "first": "6873:aebd:568d:f472::", + "last": "6873:aebd:568d:f472:ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "57be:4b91:1b6:504e:bc58:db82:4991:1f5c/127", + "expanded": "57be:4b91:01b6:504e:bc58:db82:4991:1f5c", + "compressed": "57be:4b91:1b6:504e:bc58:db82:4991:1f5c", + "network": "57be:4b91:1b6:504e:bc58:db82:4991:1f5c/127", + "first": "57be:4b91:1b6:504e:bc58:db82:4991:1f5c", + "last": "57be:4b91:1b6:504e:bc58:db82:4991:1f5d", + "total": "2", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe" + }, + { + "input": "1809:f938:aeed:f7ef:b74b:8ba3:e23a:c71d/48", + "expanded": "1809:f938:aeed:f7ef:b74b:8ba3:e23a:c71d", + "compressed": "1809:f938:aeed::", + "network": "1809:f938:aeed::/48", + "first": "1809:f938:aeed::", + "last": "1809:f938:aeed:ffff:ffff:ffff:ffff:ffff", + "total": "1208925819614629174706176", + "netmask": "ffff:ffff:ffff::" + }, + { + "input": "9526:b027:caa9:4081:c0c9:dd10:1c2c:6dc4/120", + "expanded": "9526:b027:caa9:4081:c0c9:dd10:1c2c:6dc4", + "compressed": "9526:b027:caa9:4081:c0c9:dd10:1c2c:6d00", + "network": "9526:b027:caa9:4081:c0c9:dd10:1c2c:6d00/120", + "first": "9526:b027:caa9:4081:c0c9:dd10:1c2c:6d00", + "last": "9526:b027:caa9:4081:c0c9:dd10:1c2c:6dff", + "total": "256", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00" + }, + { + "input": "2001:db8::1/64", + "expanded": "2001:0db8:0000:0000:0000:0000:0000:0001", + "compressed": "2001:db8::", + "network": "2001:db8::/64", + "first": "2001:db8::", + "last": "2001:db8::ffff:ffff:ffff:ffff", + "total": "18446744073709551616", + "netmask": "ffff:ffff:ffff:ffff::" + }, + { + "input": "fe80::1/10", + "expanded": "fe80:0000:0000:0000:0000:0000:0000:0001", + "compressed": "fe80::", + "network": "fe80::/10", + "first": "fe80::", + "last": "febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "332306998946228968225951765070086144", + "netmask": "ffc0::" + }, + { + "input": "::1/128", + "expanded": "0000:0000:0000:0000:0000:0000:0000:0001", + "compressed": "::1", + "network": "::1/128", + "first": "::1", + "last": "::1", + "total": "1", + "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" + }, + { + "input": "::/0", + "expanded": "0000:0000:0000:0000:0000:0000:0000:0000", + "compressed": "::", + "network": "::/0", + "first": "::", + "last": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + "total": "340282366920938463463374607431768211456", + "netmask": "::" + } +] \ No newline at end of file