                      :reqs    {}   ; { opaque-ts => [req, [[reply-ts reply] ...] }.
                      :net     {}}) ; The :loop-state of the net-actx.
   (reset! prog-evts []))
+
+; ------------------------------------------------
+
+(defn render-net [target-el-id net prev-addrs]
+  (let [[addrs h] (cbfg.world.net/render-net-html net prev-addrs)]
+    (set-el-innerHTML target-el-id (apply str (flatten h)))
+    addrs))
 
 ; -------------------------------------------------------------------
 

                     (when-let [net (get-in vis [:actxs @net-actx :loop-state])]
                       (when (not= net (:net @prog-curr))
                         (swap! prog-curr #(assoc % :net net))
                         (let [[addrs h] (cbfg.world.net/render-net-html net @net-addrs)]
                           (reset! net-addrs addrs)
                           (set-el-innerHTML "net-main" (apply str (flatten h)))))))]
        (prog-init world)
        (cbfg.vis/process-events vis event-delay cbfg.vis/vis-event-handlers
                                 event-ch step-ch event-run-ch)

    (ago-restore (actx-agw (:world @prog-base)) ago-ss)
    (reset! prog-curr prog-frame)
    (swap! prog-evts #(vec (filter (fn [[s & _]] (<= s ts)) %)))
    (swap! prog-ss #(into {} (filter (fn [[s _]] (<= s ts)) %)))
    (set-el-innerHTML "reqs" (render-reqs-html (:reqs prog-frame)))
    (render-net "net-main" (:net prog-frame) {})
    (on-prog-frame-blur)))

; -------------------------------------------------------------------

