public List<String> getDatacentersBySubnet(InetAddress address) throws IllegalArgumentException {
    if(address instanceof Inet4Address) {
      for(Map.Entry<Integer, Map<Integer, List<String>>> t:  this.ipv4Map.descendingMap().entrySet()) {
        int maskedIp = CidrBlock.IpV4CidrBlock.maskToSize((Inet4Address) address, t.getKey());
        if(t.getValue().containsKey(maskedIp)) {
          return t.getValue().get(maskedIp);
        }
      }
    } else if (address instanceof  Inet6Address) {
      for(Map.Entry<Integer, Map<BigInteger, List<String>>> t:  this.ipv6Map.descendingMap().entrySet()) {
        BigInteger maskedIp = CidrBlock.IpV6CidrBlock.maskToSize((Inet6Address) address, t.getKey());
        if(t.getValue().containsKey(maskedIp)) {
          return t.getValue().get(maskedIp);
        }
      }
    } else {
      throw new IllegalArgumentException("Expected either an Inet4Address or Inet6Address");
    }

    return Collections.emptyList();
  }
@Test
  void testGetFastestDataCentersBySubnetOverlappingTable() throws UnknownHostException {
    var v4address = Inet4Address.getByName("1.123.123.1");
    var actualV4 = overlappingTable.getDatacentersBySubnet(v4address);
    assertThat(actualV4).isEqualTo(List.of("datacenter-4"));

    var v6address = Inet6Address.getByName("2001:db8:b0ac:aaaa:aaaa:aaaa:aaaa:0001");
    var actualV6 = overlappingTable.getDatacentersBySubnet(v6address);
    assertThat(actualV6).isEqualTo(List.of("datacenter-3", "datacenter-1", "datacenter-2"));
  }