             (.search this new-var)))))
   (down [this old-var old-key]
         ;; assumes prefixes all equal, nothing at end
-        (prn :down old-var old-key)
+        (prn :down old-var old-key seek-key)
         (if (== old-var (- (alength var->iterators) 1))
           (aset seek-key old-var old-key) ;; done
           (let [new-var (+ old-var 1)

                          (recur min-key (mod (+ current 1) num-iterators)))))))))))
  (up [this old-var]
      ;; assumes prefixes and keys all equal, nothing at end
      (prn :up old-var)
      (if (== old-var 0)
        (set! end? true)
        (let [new-var (- old-var 1)
              iterators (aget var->iterators new-var)
              iterator (aget iterators (- (alength iterators) 1))]
          (when (< old-var (- (alength var->iterators) 1))
            (aset seek-key old-var least))
          (.next iterator)
          (if (.end? iterator)

                num-iterators (alength iterators)]
            (loop [max-key (.key-at (aget iterators (- num-iterators 1)) var)
                   current 0]
              (prn :search max-key current seek-key)
              (let [iterator (aget iterators current)
                    min-key (.key-at iterator var)]
                (aset seek-key var max-key)
