code: private boolean shouldMergeTo(Address thisAddress, Address targetAddress) {
          String thisAddressStr = "[" + thisAddress.getHost() + "]:" + thisAddress.getPort();
          String targetAddressStr = "[" + targetAddress.getHost() + "]:" + targetAddress.getPort();
  
          if (thisAddressStr.equals(targetAddressStr)) {
              throw new IllegalArgumentException("Addresses should be different! This: "
                      + thisAddress + ", Target: " + targetAddress);
          }
  
          // Since strings are guaranteed to be different, result will always be non-zero.
          int result = thisAddressStr.compareTo(targetAddressStr);
          return result > 0;
      }
docs: Determines whether this address should merge to target address and called when two sides are equal on all aspects.
  This is a pure function that must produce always the same output when called with the same parameters.
  This logic should not be changed, otherwise compatibility will be broken.
  
  @param thisAddress this address
  @param targetAddress target address
  @return true if this address should merge to target, false otherwise