public static string Run(ConsoleSystem.Option options, string strCommand, params object[] args)
    {
        ConsoleSystem.LastError = null;
        string str = ConsoleSystem.BuildCommand(strCommand, args);

        ConsoleSystem.Arg arg = new ConsoleSystem.Arg(options, str);
        bool flag             = arg.HasPermission();

        if (!arg.Invalid & flag)
        {
            ConsoleSystem.Arg currentArgs = ConsoleSystem.CurrentArgs;
            ConsoleSystem.CurrentArgs = arg;
            bool flag1 = ConsoleSystem.Internal(arg);
            ConsoleSystem.CurrentArgs = currentArgs;
            if (options.PrintOutput & flag1 && arg.Reply != null && arg.Reply.Length > 0)
            {
                DebugEx.Log(arg.Reply, StackTraceLogType.None);
            }
            return(arg.Reply);
        }
        ConsoleSystem.LastError = "Command not found";
        if (!flag)
        {
            ConsoleSystem.LastError = "Permission denied";
        }
        if (options.IsServer || options.ForwardtoServerOnMissing && ConsoleSystem.SendToServer(str))
        {
            if (options.IsServer && options.PrintOutput)
            {
                ConsoleSystem.LastError = string.Concat("Command '", strCommand, "' not found");
                DebugEx.Log(ConsoleSystem.LastError, StackTraceLogType.None);
            }
            return(null);
        }
        ConsoleSystem.LastError = string.Concat("Command '", strCommand, "' not found");
        if (options.PrintOutput)
        {
            DebugEx.Log(ConsoleSystem.LastError, StackTraceLogType.None);
        }
        return(null);
    }