docs: public static Throwable recreateThrowable(final String type, final String message, final List<String> backtrace)
              throws ParseException, ClassNotFoundException, NoSuchConstructorException,
              AmbiguousConstructorException, ReflectiveOperationException {
          final LinkedList<String> bTrace = new LinkedList<String>(backtrace);
          Throwable cause = null;
          StackTraceElement[] stes = null;
          while (!bTrace.isEmpty()) {
              stes = recreateStackTrace(bTrace);
              if (!bTrace.isEmpty()) {
                  final String line = bTrace.removeLast().substring(BT_CAUSED_BY_PREFIX.length());
                  final String[] classNameAndMsg = COLON_SPACE_PATTERN.split(line, 2);
                  final String msg = (classNameAndMsg.length == 2) ? classNameAndMsg[1] : null;
                  cause = instantiateThrowable(classNameAndMsg[0], msg, cause, stes);
              }
          }
          return instantiateThrowable(type, message, cause, stes);
      }