!7 sclass DialogTree > DynModule { new Node root; class Node { LS text; new LinkedHashMap children; int flags; final static int funny = 1, correctSentence = 2; S language; S correctIf; *() {} *(LS *text) {} toString { ret text == null ? "" : joinWithSpace(text); } Node getOrCreate(LS text) { temp enter(); Node n = children.get(text); if (n == null) { children.put(text, new Node(text)); change(); } ret n; } } void start { addCatLogToRoot(); onSpeechUtterance(voidfunc(S s) { root.getOrCreate(s) }); } JComponent visualize() { ret jDynTree(root, func(Node n) -> L { temp enter(); ret valuesList(n.children); }); } void addCatLogToRoot { for (LS text : catLog_wordLists()) root.getOrCreate(text); } }