digraph {
  {
     node [shape=plaintext];
     "level 1" -> "level 2" -> "level 3";
  }

  node [shape=box;style="rounded,filled";color=AntiqueWhite;];
  c1 [ label="crash A\nid 1\ncrash root" ];
  c2 [ label="crash B\nid 2" ];
  c3 [ label="crash C\nid 3\ncrash leaf" ];
  c4 [ label="crash D\nid 4\ncrash leaf" ];
  { rank = same; "level 1"; c1;}
  { rank = same; "level 2"; c2; c4;}
  { rank = same; "level 3"; c3;}

  node [shape=box;style="rounded,dashed";];
  exp1 [ label="crash B matches fail\nmatch for the next child\nof crash A"];
  exp2 [ label="crash D matches successfully\nreturn crash D"];

  node [shape=box;style="invis";];
  "channel" -> c1 [ label="trigger" ]
  c1 -> {exp1 exp2}
  exp1 -> c2 -> c3 [ style=dashed dir=none]
  exp2 -> c4
}

