static Pair lastVoiceOutputEndBeforeTimestamp(long timestamp) null on exception { temp ReversedLinesFileReader reader = reversedLinesFileReader(cereprocLog()); S s; while ((s = reader.readLine()) != null) { if (!isProperlyQuoted(s)) continue; s = unquote(s); Map map = safeUnstructMap(dropUntilSpace(s)); if (!eq(map.get("action"), "End talking")) continue; long timestamp2 = parseLong(beforeSpace(s)); if (timestamp2 > timestamp) continue; S textSaid = (S) map.get("text"); ret pair(timestamp-timestamp2, textSaid); } null; }