node ssm(i1: bool; i2: bool; i3: bool; i4: bool)
  returns (o1: bool; o2: bool; o3: bool; o4: bool)
let
  automaton
    state State1
      do o1 = false; o2 = false; o3 = false; o4 = false
      until i1 then TMP12
      unless i2 then TMP11
    state TMP11
      do o1 = false; o2 = true; o3 = false; o4 = false;
      until true then State3
    state TMP12
      do o1 = true; o2 = true; o3 = false; o4 = false;
      until true then State2

    state State3
      var last end1: bool = false; last end2: bool = false;
      do o1 = false; o2 = false; o3 = false; o4 = false;
         automaton
           state State1_1
             do until i3 then State2_1
           state State2_1
             do end1 = true;
         end;
         automaton
           state State1_2
             do unless i4 then State2_2
           state State2_2
             do end2 = true
         end
       until end1 & end2 then State1
       unless i1 then State4
          |   i2 then State2
    state State2
       var l1: bool;
       do o1 = false; o2 = false; o3 = false; o4 = l1; l1 = true;
       until i4 then State4
    state State4
       var l2: bool;
       do o1 = false; o2 = false; o3 = l2; o4 = false; l2 = true;
       until i4 then State4
    end
tel