code: private static List<Object> splitOnSemiColonHandlingBackslashEscaping(final String in) {
          final List<Object> result = new LinkedList<>();
  
          int i = 1;
          String prefix = "";
          final String[] splitStringArr = in.split(";");
          for (final String s : splitStringArr) {
              final String s2 = s.replaceFirst("\\\\$", ";");
              if (s.equals(s2) || i == splitStringArr.length) {
                  result.add(prefix + s2);
                  prefix = "";
              } else {
                  prefix += s2;
              }
              i++;
          }
          return result;
      }
docs: /* transforms "a;b\;" into list { "a", "b;" }