function* mergeSortGenerators(gens, accessor) {
let nexts = gens.map((g) => g.next());
let budget = 1000;
while (nexts.some((d) => !d.done)) {
let idx = d3.minIndex(nexts, (d) => (d.done ? null : accessor(d.value)));
if (idx < 0 || nexts[idx].done) break;
yield nexts[idx].value;
nexts[idx] = gens[idx].next();
}
}