 
 (defn run-code [id raw-code]
   (let [code (.trim raw-code)
-        {:keys [tests restricted]} (get-problem id)
+        {:keys [tests restricted] :as problem} (get-problem id)
         sb-tester (get-tester restricted)]
     (session/flash-put! :code code)
     (try

        (cond
         (not approved) (str "You've solved the unapproved problem. Now you can approve it!")
         user (do
                (when (not-any? #{id} (get-solved user))
                  (update! :users {:user user} {:$addToSet {:solved id}})
                  (update! :problems {:_id id} {:$inc {:times-solved 1}})
                  (send total-solved inc))
                (record-golf-score! user id (code-length code))
                (str "Congratulations, you've solved the problem!"
                     "<br />" (next-problem-link id)))
         :else (str "You've solved the problem! If you "
                    (login-link "log in") " we can track your progress."))]
    (session/session-put! :code [id code])
    (flash-msg (str message " " gist-link) (str "/problem/" id))))

(def restricted-list '[use require in-ns future agent send send-off pmap pcalls])


                 i 0]
            (session/flash-put! :failing-test i)
            (if-not test
              (mark-completed problem code)
              (let [testcase (s/replace test "__" user-forms)]
                (if (sb sb-tester (first (read-string-safely testcase)))
                  (recur more (inc i))
