public static boolean handleMultipleEntryExceptionRanges(ControlFlowGraph graph) {
    GenericDominatorEngine engine = new GenericDominatorEngine(new IGraph() {
      @Override
      public List<? extends IGraphNode> getReversePostOrderList() {
        return graph.getReversePostOrder();
      }

      @Override
      public Set<? extends IGraphNode> getRoots() {
        return new HashSet<>(Collections.singletonList(graph.getFirst()));
      }
    });

    engine.initialize();

    boolean found;

    while (true) {
      found = false;
      boolean splitted = false;

      for (ExceptionRangeCFG range : graph.getExceptions()) {
        Set<BasicBlock> setEntries = getRangeEntries(range);

        if (setEntries.size() > 1) { // multiple-entry protected range
          found = true;

          if (splitExceptionRange(range, setEntries, graph, engine)) {
            splitted = true;
            break;
          }
        }
      }

      if (!splitted) {
        break;
      }
    }

    return !found;
  }
public static boolean handleMultipleEntryExceptionRanges(ControlFlowGraph graph)