{"action":"created","comment":{"url":"https://api.github.com/repos/dreamstalker/rehlds/pulls/comments/113240611","pull_request_review_id":34612006,"id":113240611,"diff_hunk":"@@ -0,0 +1,1188 @@\n+/*\n+*\n+*    This program is free software; you can redistribute it and/or modify it\n+*    under the terms of the GNU General Public License as published by the\n+*    Free Software Foundation; either version 2 of the License, or (at\n+*    your option) any later version.\n+*\n+*    This program is distributed in the hope that it will be useful, but\n+*    WITHOUT ANY WARRANTY; without even the implied warranty of\n+*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+*    General Public License for more details.\n+*\n+*    You should have received a copy of the GNU General Public License\n+*    along with this program; if not, write to the Free Software Foundation,\n+*    Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n+*\n+*    In addition, as a special exception, the author gives permission to\n+*    link the code of this program with the Half-Life Game Engine (\"HL\n+*    Engine\") and Modified Game Libraries (\"MODs\") developed by Valve,\n+*    L.L.C (\"Valve\").  You must obey the GNU General Public License in all\n+*    respects for all of the code used other than the HL Engine and MODs\n+*    from Valve.  If you modify this file, you may extend this exception\n+*    to your version of the file, but you are not obligated to do so.  If\n+*    you do not wish to do so, delete this exception statement from your\n+*    version.\n+*\n+*/\n+\n+#include \"precompiled.h\"\n+\n+System gSystem;\n+\n+#ifdef _WIN32\n+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)\n+#else\n+\n+char g_szEXEName[256];\n+int main(int argc, char *argv[])\n+#endif // _WIN32\n+{\n+#ifdef _WIN32\n+\tgSystem.BuildCommandLine(lpCmdLine);\n+#else\n+\tgSystem.BuildCommandLine(argc, argv);\n+\t_snprintf(g_szEXEName, sizeof(g_szEXEName), \"%s\", argv[0]);\n+#endif // _WIN32\n+\n+\tif (!gSystem.Init(&gSystem, 0, \"Console\"))\n+\t{\n+\t\tgSystem.Sleep(2000);\n+\t\treturn 0;\n+\t}\n+\n+\tgSystem.RunFrame(0);\n+\tgSystem.ShutDown();\n+\treturn 0;\n+}\n+\n+char *System::COM_GetBaseDir()\n+{\n+\tstatic char basedir[MAX_PATH];\n+\tbasedir[0] = '\\0';\n+\n+#ifdef _WIN32\n+\tif (GetModuleFileName((HMODULE)nullptr, basedir, sizeof(basedir)))\n+#endif // _WIN32\n+\t{\n+#ifdef _WIN32\n+\t\tchar *pBuffer = strrchr(basedir, '\\\\');\n+#else\n+\t\tchar *pBuffer = strrchr(basedir, '/');\n+#endif // _WIN32\n+\n+\t\tif (pBuffer && *pBuffer)\n+\t\t\tpBuffer[1] = '\\0';\n+\n+\t\tint j = strlen(basedir);\n+\t\tif (j > 0 && (basedir[j - 1] == '\\\\' || basedir[j - 1] == '/'))\n+\t\t\tbasedir[j - 1] = '\\0';\n+\t}\n+\n+\treturn basedir;\n+}\n+\n+void COM_FixSlashes(char *pname)\n+{\n+\twhile (*pname)\n+\t{\n+#ifdef _WIN32\n+\t\tif (*pname == '/')\n+\t\t{\n+\t\t\t*pname = '\\\\';\n+\t\t}\n+#else\n+\t\tif (*pname == '\\\\')\n+\t\t{\n+\t\t\t*pname = '/';\n+\t\t}\n+#endif\n+\n+\t\tpname++;\n+\t}\n+}\n+\n+void Sys_Printf(char *fmt, ...)\n+{\n+\t// Dump text to debugging console.\n+\tva_list argptr;\n+\tstatic char string[8192];\n+\n+\tva_start(argptr, fmt);\n+\t_vsnprintf(string, sizeof(string), fmt, argptr);\n+\tva_end(argptr);\n+\n+\t// Get Current text and append it.\n+\tgSystem.Printf(\"%s\", string);\n+}\n+\n+double System::GetTime()\n+{\n+\treturn m_SystemTime;\n+}\n+\n+void System::SetFPS(float fps)\n+{\n+\tm_MaxFPS = fps > 0 ? (1 / fps) : 0;\n+}\n+\n+void System::RedirectOutput(char *buffer, int maxSize)\n+{\n+\tm_RedirectBuffer = buffer;\n+\tm_RedirectSize = maxSize;\n+\n+\tif (m_RedirectBuffer)\n+\t\tmemset(m_RedirectBuffer, 0, m_RedirectSize);\n+}\n+\n+void System::Printf(char *fmt, ...)\n+{\n+\tva_list argptr;\n+\tstatic char string[8192];\n+\n+\tva_start(argptr, fmt);\n+\t_vsnprintf(string, sizeof(string), fmt, argptr);\n+\tva_end(argptr);\n+\n+\tLog(string);\n+\n+\tif (m_RedirectBuffer && strlen(string) + strlen(m_RedirectBuffer) + 1 < m_RedirectSize)\n+\t\tstrcat(m_RedirectBuffer, string);\n+\n+\tm_Console.Print(string);\n+}\n+\n+void System::DPrintf(char *fmt, ...)\n+{\n+\tva_list argptr;\n+\tstatic char string[8192];\n+\tva_start(argptr, fmt);\n+\tif (m_Developer)\n+\t{\n+\t\t_vsnprintf(string, sizeof(string), fmt, argptr);\n+\t\tLog(string);\n+\n+\t\tif (m_RedirectBuffer && strlen(string) + strlen(m_RedirectBuffer) + 1 < m_RedirectSize)\n+\t\t\tstrcat(m_RedirectBuffer, string);\n+\n+\t\tm_Console.Print(string);\n+\t}\n+\n+\tva_end(argptr);\n+}\n+\n+void System::FreeFile(unsigned char *fileHandle)\n+{\n+\tif (!fileHandle)\n+\t\treturn;\n+\n+\tfree(fileHandle);\n+}\n+\n+bool System::RegisterCommand(char *name, ISystemModule *module, int commandID)\n+{\n+\tcommand_t *cmd = (command_t *)m_Commands.GetFirst();\n+\twhile (cmd)\n+\t{\n+\t\tif (_stricmp(cmd->name, name) == 0) {\n+\t\t\tPrintf(\"WARNING! System::RegisterCommand: command \\\"%s\\\" already exists.\\n\", name);\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\tcmd = (command_t *)m_Commands.GetNext();\n+\t}\n+\n+\tcmd = (command_t *)malloc(sizeof(command_t));\n+\n+\tstrcopy(cmd->name, name);\n+\tcmd->module = module;\n+\tcmd->commandID = commandID;\n+\n+\tm_Commands.Add(cmd);\n+\treturn true;\n+}\n+\n+void System::ExecuteString(char *commands)\n+{\n+\tif (!commands || !commands[0])\n+\t\treturn;\n+\n+\tchar *c = commands;\n+\twhile (c && *c)\n+\t{\n+\t\tif (*c < ' ' || *c > '~' || *c == '%')\n+\t\t\t*c = ' ';\n+\t\tc++;\n+\t}\n+\n+\tint size = 0;\n+\tchar singleCmd[256] = \"\";\n+\tbool quotes = false;\n+\tchar *p = singleCmd;\n+\n+\twhile (true)\n+\t{\n+\t\t*p = *commands;\n+\n+\t\tif (++size >= sizeof(singleCmd))\n+\t\t{\n+\t\t\tDPrintf(\"WARNING! System::ExecuteString: Command token too long.\\n\");\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\tif (*commands == '\"')\n+\t\t\tquotes = !quotes;\n+\n+\t\tif ((*commands != ';' || quotes) && *commands)\n+\t\t{\n+\t\t\t++p;\n+\t\t}\n+\t\telse\n+\t\t{\n+\t\t\t*p = '\\0';\n+\n+\t\t\tchar *cmd = singleCmd;\n+\t\t\twhile (*cmd == ' ') { cmd++; }\n+\n+\t\t\tDispatchCommand(cmd);\n+\t\t\tp = singleCmd;\n+\t\t\tsize = 0;\n+\t\t}\n+\n+\t\tif (!*commands++)\n+\t\t\tbreak;\n+\t}\n+}\n+\n+void System::Errorf(char *fmt, ...)\n+{\n+\tva_list argptr;\n+\tstatic char string[1024];\n+\tva_start(argptr, fmt);\n+\t_vsnprintf(string, sizeof(string), fmt, argptr);\n+\tva_end(argptr);\n+\n+\tPrintf(\"***** FATAL ERROR *****\\n\");\n+\tPrintf(string);\n+\tPrintf(\"*** STOPPING SYSTEM ***\\n\");\n+\n+\tStop();\n+}\n+\n+char *System::CheckParam(char *param)\n+{\n+\treturn m_Parameters.CheckToken(param);\n+}\n+\n+ISystemModule *System::FindModule(char *type, char *name)\n+{\n+\tif (!type || !type[0])\n+\t\treturn nullptr;\n+\n+\tISystemModule *module = (ISystemModule *)m_Modules.GetFirst();\n+\twhile (module)\n+\t{\n+\t\tif (_stricmp(type, module->GetType()) == 0\n+\t\t&& (!name || _stricmp(name, module->GetType()) == 0)) {\n+\t\t\treturn module;\n+\t\t}\n+\n+\t\tmodule = (ISystemModule *)m_Modules.GetNext();\n+\t}\n+\n+\treturn nullptr;\n+}\n+\n+bool System::AddModule(ISystemModule *module, char *name)\n+{\n+\tif (!module)\n+\t\treturn false;\n+\n+\tif (!module->Init(this, m_SerialCounter, name))\n+\t{\n+\t\tPrintf(\"ERROR! System::AddModule: couldn't initialize module %s.\\n\", name);\n+\t\treturn false;\n+\t}\n+\n+\tm_Modules.Add(module);\n+\tm_SerialCounter++;\n+\treturn true;\n+}\n+\n+ISystemModule *System::GetModule(char *interfacename, char *library, char *instancename)\n+{\n+\tISystemModule *module = FindModule(interfacename, instancename);\n+\tif (module) {\n+\t\treturn module;\n+\t}\n+\n+\tlibrary_t *lib = GetLibrary(library);\n+\tif (!lib) {\n+\t\treturn nullptr;\n+\t}\n+\n+\tmodule = (ISystemModule *)lib->createInterfaceFn(interfacename, nullptr);\n+\tif (!module) {\n+\t\tDPrintf(\"ERROR! System::GetModule: interface \\\"%s\\\" not found in library %s.\\n\", interfacename, lib->name);\n+\t\treturn nullptr;\n+\t}\n+\n+\tAddModule(module, instancename);\n+\treturn module;\n+}\n+\n+void System::Stop()\n+{\n+\tm_State = MODULE_DISCONNECTED;\n+}\n+\n+bool System::RemoveModule(ISystemModule *module)\n+{\n+\tmodule->ShutDown();\n+\n+\tcommand_t *cmd = (command_t *)m_Commands.GetFirst();\n+\twhile (cmd)\n+\t{\n+\t\tif (cmd->module->GetSerial() == module->GetSerial()) {\n+\t\t\tm_Commands.Remove(cmd);\n+\t\t\tfree(cmd);\n+\t\t}\n+\n+\t\tcmd = (command_t *)m_Commands.GetNext();\n+\t}\n+\n+\tISystemModule *mod = (ISystemModule *)m_Modules.GetFirst();\n+\twhile (mod)\n+\t{\n+\t\tif (mod->GetSerial() == module->GetSerial()) {\n+\t\t\tm_Modules.Remove(mod);\n+\t\t\treturn true;\n+\t\t}\n+\n+\t\tmod = (ISystemModule *)m_Modules.GetNext();\n+\t}\n+\n+\treturn false;\n+}\n+\n+void System::GetCommandMatches(char *string, ObjectList *pMatchList)\n+{\n+\tint len = strlen(string);\n+\tcommand_t *cmd = (command_t *)m_Commands.GetFirst();\n+\twhile (cmd)\n+\t{\n+\t\tif (!strncmp(cmd->name, string, len)) {\n+\t\t\tpMatchList->AddTail(cmd);\n+\t\t}\n+\n+\t\tcmd = (command_t *)m_Commands.GetNext();\n+\t}\n+}\n+\n+System::LocalCommandID_s System::m_LocalCmdReg[] = {\n+\t{ \"developer\",     CMD_ID_DEVELOPER,     &System::CMD_Developer },\n+\t{ \"exec\",          CMD_ID_EXEC,          &System::CMD_Exec },\n+\t{ \"modules\",       CMD_ID_MODULES,       &System::CMD_Modules },\n+\t{ \"cmdlist\",       CMD_ID_CMDLIST,       &System::CMD_CmdList },\n+\t{ \"help\",          CMD_ID_CMDLIST,       &System::CMD_CmdList },\n+\t{ \"logfile\",       CMD_ID_LOGFILE,       &System::CMD_Logfile },\n+\t{ \"quit\",          CMD_ID_QUIT,          &System::CMD_Quit },\n+\t{ \"exit\",          CMD_ID_QUIT,          &System::CMD_Quit },\n+\t{ \"loadmodule\",    CMD_ID_LOADMODULE,    &System::CMD_LoadModule },\n+\t{ \"unloadmodule\",  CMD_ID_UNLOADMODULE,  &System::CMD_UnloadModule },\n+\t{ \"title\",         CMD_ID_TITLE,         &System::CMD_Title },\n+\t{ \"showcon\",       CMD_ID_SHOWCON,       &System::CMD_ShowCon },\n+\t{ \"echo\",          CMD_ID_ECHO,          &System::CMD_Echo },\n+};\n+\n+bool System::Init(IBaseSystem *system, int serial, char *name)\n+{\n+\tif (!BaseSystemModule::Init(system, serial, name))\n+\t\treturn false;\n+\n+\tm_State = serial;\n+\tm_SerialCounter = serial + 1;\n+\n+\tif (!name) {\n+\t\tSetName(\"system\");\n+\t}\n+\n+\tstrcopy(m_BaseDir, COM_GetBaseDir());\n+\n+\tm_Developer = CheckParam(\"-dev\") ? true : false;\n+\tif (!m_Console.Init(this))\n+\t{\n+\t\tError();\n+\t\treturn false;\n+\t}\n+\n+\tm_SystemTime = 0;\n+\tm_LastTime = 0;\n+\n+\tif (!InitTimer() || !InitFileSystem())\n+\t\treturn false;\n+\n+\tm_Commands.Init();\n+\tm_Modules.Init();\n+\tm_Libraries.Init();\n+\n+\tm_LogFile = nullptr;\n+\tmemset(m_LogFileName, 0, sizeof(m_LogFileName));\n+\tmemset(m_Factorylist, 0, sizeof(m_Factorylist));\n+\n+\tm_RedirectBuffer = nullptr;\n+\tm_RedirectSize = 0;\n+\tm_Tick = 0;\n+\tm_SleepMSecs = 1;\n+\tm_VGUIModule = nullptr;\n+\tm_VGUIStarted = false;\n+\tSeedRandomNumberGenerator();\n+\n+\tif (CheckParam(\"-highpriority\"))\n+\t{\n+\t\tm_SleepMSecs = 0;\n+#ifdef _WIN32\n+\t\tSetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);\n+#endif // _WIN32\n+\t}\n+\n+\tauto pszValue = CheckParam(\"-maxfps\");\n+\tSetFPS(pszValue ? (float)atof(pszValue) : 100);\n+\n+\tfor (auto& cmd : m_LocalCmdReg) {\n+\t\tRegisterCommand(cmd.name, this, cmd.id);\n+\t}\n+\n+\tSetTitle(\"Console\");\n+\tGetModule(PROXY_INTERFACE_VERSION, \"proxy\");\n+\tSetTitle(\"HLTV\");\n+\tm_State = MODULE_RUNNING;\n+\n+\tDPrintf(\"System initialized.\\n\");\n+\tExecuteCommandLine();\n+\tPrintf(\"Type 'help' for a list of commands.\\n\");\n+\n+\treturn true;\n+}\n+\n+bool System::StartVGUI()\n+{\n+#ifndef _WIN32\n+\treturn false;\n+#else\n+\t/*if (!m_FileSystemModule) {\n+\t\tPrintf(\"System::StartVGUI: filesystem not loaded.\\n\");\n+\t\treturn false;\n+\t}\n+\n+\tif (CheckParam(\"-novgui\")) {\n+\t\treturn false;\n+\t}\n+\n+\tm_VGUIModule = Sys_LoadModule(VGUI2_LIB);\n+\n+\tm_Factorylist[0] = Sys_GetFactoryThis();\n+\tm_Factorylist[1] = Sys_GetFactory(m_VGUIModule);\n+\tm_Factorylist[2] = Sys_GetFactory(m_FileSystemModule);\n+\n+\tif (vgui2::VGuiControls_Init(\"HLTV\", m_Factorylist, ARRAYSIZE(m_Factorylist)))\n+\t{\n+\t\tvgui2::filesystem()->AddSearchPath(\"platform\", \"PLATFORM\");\n+\t\tvgui2::localize()->AddFile(vgui2::filesystem(), \"Resource/platform_%language%.txt\");\n+\t\tvgui2::localize()->AddFile(vgui2::filesystem(), \"Resource/vgui_%language%.txt\");\n+\n+\t\tm_MainPanel = new Panel(nullptr, \"MainPanel\");\n+\t\tvgui2::surface()->SetEmbeddedPanel(m_MainPanel->GetVPanel());\n+\n+\t\tif (!vgui2::scheme()->LoadSchemeFromFile(\"platform/Resource/TrackerScheme.res\", \"DEFAULT\")) {\n+\t\t\tPrintf(\"System::StartVGUI: Could not load TrackerScheme.res\\n\");\n+\t\t\treturn false;\n+\t\t}\n+\n+\t\t// Start vgui\n+\t\tvgui2::ivgui()->Start();\n+\t\tm_VGUIStarted = true;\n+\t\tPrintf(\"VGUI initialized.\\n\");\n+\t\treturn true;\n+\t}\n+\telse\n+\t{\n+\t\tPrintf(\"System::StartVGUI: Could not initialize vgui.\\n\");\n+\t\treturn false;\n+\t}*/\n+\n+\treturn false;\n+#endif // _WIN32\n+}\n+\n+void System::StopVGUI()\n+{\n+\tif (!m_VGUIStarted)\n+\t\treturn;\n+\n+\t/*vgui2::surface()->Shutdown();\n+\tif (m_MainPanel) {\n+\t\tdelete m_MainPanel;\n+\t\tm_MainPanel = nullptr;\n+\t}\n+\n+\tSys_UnloadModule(m_VGUIModule);*/\n+\tPrintf(\"VGUI shutdown.\\n\");\n+}\n+\n+void System::SetName(char *newName)\n+{\n+\tstrcopy(m_Name, newName);\n+}\n+\n+void System::RunFrame(double time)\n+{\n+\tfloat fps = 0.0f;\n+\tfloat nextConsoleUpdate = 0.0f;\n+\n+\tBaseSystemModule::RunFrame(time);\n+\twhile ((m_State == MODULE_RUNNING || m_State == MODULE_CONNECTING))\n+\t{\n+\t\tUpdateTime();\n+\t\tdouble timeDiff = m_SystemTime - m_LastTime;\n+\t\tif (m_LastTime > 0 && timeDiff <= 0) {\n+\t\t\tPrintf(\"WARNING! System::RunFrame: system time difference <= 0.\\n\");","path":"rehlds/HLTV/Console/src/System.cpp","position":549,"original_position":549,"commit_id":"19f3b365a7ca17e35913e90b422df4f63a6d3d92","original_commit_id":"19f3b365a7ca17e35913e90b422df4f63a6d3d92","user":{"login":"In-line","id":19331496,"avatar_url":"https://avatars2.githubusercontent.com/u/19331496?v=3","gravatar_id":"","url":"https://api.github.com/users/In-line","html_url":"https://github.com/In-line","followers_url":"https://api.github.com/users/In-line/followers","following_url":"https://api.github.com/users/In-line/following{/other_user}","gists_url":"https://api.github.com/users/In-line/gists{/gist_id}","starred_url":"https://api.github.com/users/In-line/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/In-line/subscriptions","organizations_url":"https://api.github.com/users/In-line/orgs","repos_url":"https://api.github.com/users/In-line/repos","events_url":"https://api.github.com/users/In-line/events{/privacy}","received_events_url":"https://api.github.com/users/In-line/received_events","type":"User","site_admin":false},"body":"Maybe we can use something like c++11 steady_clock ? (For example CLOCK_MONOTONIC in linux)","created_at":"2017-04-25T16:10:20Z","updated_at":"2017-04-25T16:10:20Z","html_url":"https://github.com/dreamstalker/rehlds/pull/440#discussion_r113240611","pull_request_url":"https://api.github.com/repos/dreamstalker/rehlds/pulls/440","_links":{"self":{"href":"https://api.github.com/repos/dreamstalker/rehlds/pulls/comments/113240611"},"html":{"href":"https://github.com/dreamstalker/rehlds/pull/440#discussion_r113240611"},"pull_request":{"href":"https://api.github.com/repos/dreamstalker/rehlds/pulls/440"}}},"pull_request":{"url":"https://api.github.com/repos/dreamstalker/rehlds/pulls/440","id":117516435,"html_url":"https://github.com/dreamstalker/rehlds/pull/440","diff_url":"https://github.com/dreamstalker/rehlds/pull/440.diff","patch_url":"https://github.com/dreamstalker/rehlds/pull/440.patch","issue_url":"https://api.github.com/repos/dreamstalker/rehlds/issues/440","number":440,"state":"open","locked":false,"title":"Add project HLTV","user":{"login":"s1lentq","id":5860435,"avatar_url":"https://avatars1.githubusercontent.com/u/5860435?v=3","gravatar_id":"","url":"https://api.github.com/users/s1lentq","html_url":"https://github.com/s1lentq","followers_url":"https://api.github.com/users/s1lentq/followers","following_url":"https://api.github.com/users/s1lentq/following{/other_user}","gists_url":"https://api.github.com/users/s1lentq/gists{/gist_id}","starred_url":"https://api.github.com/users/s1lentq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s1lentq/subscriptions","organizations_url":"https://api.github.com/users/s1lentq/orgs","repos_url":"https://api.github.com/users/s1lentq/repos","events_url":"https://api.github.com/users/s1lentq/events{/privacy}","received_events_url":"https://api.github.com/users/s1lentq/received_events","type":"User","site_admin":false},"body":"HLTV includes 5 projects that:\r\n- [x] Console\r\n- [x] Core\r\n- [x] Proxy\r\n- [x] DemoPlayer\r\n- [x] Director","created_at":"2017-04-25T15:39:44Z","updated_at":"2017-04-25T16:10:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7f9a2258d0cb0777792f6b8dbeba8d760a6edc30","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/dreamstalker/rehlds/pulls/440/commits","review_comments_url":"https://api.github.com/repos/dreamstalker/rehlds/pulls/440/comments","review_comment_url":"https://api.github.com/repos/dreamstalker/rehlds/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dreamstalker/rehlds/issues/440/comments","statuses_url":"https://api.github.com/repos/dreamstalker/rehlds/statuses/19f3b365a7ca17e35913e90b422df4f63a6d3d92","head":{"label":"s1lentq:hltv","ref":"hltv","sha":"19f3b365a7ca17e35913e90b422df4f63a6d3d92","user":{"login":"s1lentq","id":5860435,"avatar_url":"https://avatars1.githubusercontent.com/u/5860435?v=3","gravatar_id":"","url":"https://api.github.com/users/s1lentq","html_url":"https://github.com/s1lentq","followers_url":"https://api.github.com/users/s1lentq/followers","following_url":"https://api.github.com/users/s1lentq/following{/other_user}","gists_url":"https://api.github.com/users/s1lentq/gists{/gist_id}","starred_url":"https://api.github.com/users/s1lentq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s1lentq/subscriptions","organizations_url":"https://api.github.com/users/s1lentq/orgs","repos_url":"https://api.github.com/users/s1lentq/repos","events_url":"https://api.github.com/users/s1lentq/events{/privacy}","received_events_url":"https://api.github.com/users/s1lentq/received_events","type":"User","site_admin":false},"repo":{"id":35369013,"name":"rehlds","full_name":"s1lentq/rehlds","owner":{"login":"s1lentq","id":5860435,"avatar_url":"https://avatars1.githubusercontent.com/u/5860435?v=3","gravatar_id":"","url":"https://api.github.com/users/s1lentq","html_url":"https://github.com/s1lentq","followers_url":"https://api.github.com/users/s1lentq/followers","following_url":"https://api.github.com/users/s1lentq/following{/other_user}","gists_url":"https://api.github.com/users/s1lentq/gists{/gist_id}","starred_url":"https://api.github.com/users/s1lentq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s1lentq/subscriptions","organizations_url":"https://api.github.com/users/s1lentq/orgs","repos_url":"https://api.github.com/users/s1lentq/repos","events_url":"https://api.github.com/users/s1lentq/events{/privacy}","received_events_url":"https://api.github.com/users/s1lentq/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/s1lentq/rehlds","description":"Reverse-engineered HLDS","fork":true,"url":"https://api.github.com/repos/s1lentq/rehlds","forks_url":"https://api.github.com/repos/s1lentq/rehlds/forks","keys_url":"https://api.github.com/repos/s1lentq/rehlds/keys{/key_id}","collaborators_url":"https://api.github.com/repos/s1lentq/rehlds/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/s1lentq/rehlds/teams","hooks_url":"https://api.github.com/repos/s1lentq/rehlds/hooks","issue_events_url":"https://api.github.com/repos/s1lentq/rehlds/issues/events{/number}","events_url":"https://api.github.com/repos/s1lentq/rehlds/events","assignees_url":"https://api.github.com/repos/s1lentq/rehlds/assignees{/user}","branches_url":"https://api.github.com/repos/s1lentq/rehlds/branches{/branch}","tags_url":"https://api.github.com/repos/s1lentq/rehlds/tags","blobs_url":"https://api.github.com/repos/s1lentq/rehlds/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/s1lentq/rehlds/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/s1lentq/rehlds/git/refs{/sha}","trees_url":"https://api.github.com/repos/s1lentq/rehlds/git/trees{/sha}","statuses_url":"https://api.github.com/repos/s1lentq/rehlds/statuses/{sha}","languages_url":"https://api.github.com/repos/s1lentq/rehlds/languages","stargazers_url":"https://api.github.com/repos/s1lentq/rehlds/stargazers","contributors_url":"https://api.github.com/repos/s1lentq/rehlds/contributors","subscribers_url":"https://api.github.com/repos/s1lentq/rehlds/subscribers","subscription_url":"https://api.github.com/repos/s1lentq/rehlds/subscription","commits_url":"https://api.github.com/repos/s1lentq/rehlds/commits{/sha}","git_commits_url":"https://api.github.com/repos/s1lentq/rehlds/git/commits{/sha}","comments_url":"https://api.github.com/repos/s1lentq/rehlds/comments{/number}","issue_comment_url":"https://api.github.com/repos/s1lentq/rehlds/issues/comments{/number}","contents_url":"https://api.github.com/repos/s1lentq/rehlds/contents/{+path}","compare_url":"https://api.github.com/repos/s1lentq/rehlds/compare/{base}...{head}","merges_url":"https://api.github.com/repos/s1lentq/rehlds/merges","archive_url":"https://api.github.com/repos/s1lentq/rehlds/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/s1lentq/rehlds/downloads","issues_url":"https://api.github.com/repos/s1lentq/rehlds/issues{/number}","pulls_url":"https://api.github.com/repos/s1lentq/rehlds/pulls{/number}","milestones_url":"https://api.github.com/repos/s1lentq/rehlds/milestones{/number}","notifications_url":"https://api.github.com/repos/s1lentq/rehlds/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/s1lentq/rehlds/labels{/name}","releases_url":"https://api.github.com/repos/s1lentq/rehlds/releases{/id}","deployments_url":"https://api.github.com/repos/s1lentq/rehlds/deployments","created_at":"2015-05-10T11:56:00Z","updated_at":"2017-01-29T01:05:51Z","pushed_at":"2017-04-25T15:59:02Z","git_url":"git://github.com/s1lentq/rehlds.git","ssh_url":"git@github.com:s1lentq/rehlds.git","clone_url":"https://github.com/s1lentq/rehlds.git","svn_url":"https://github.com/s1lentq/rehlds","homepage":"","size":3051,"stargazers_count":1,"watchers_count":1,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"dreamstalker:master","ref":"master","sha":"c895428d1df52e88c76e7a291662ac5286b00347","user":{"login":"dreamstalker","id":12196021,"avatar_url":"https://avatars0.githubusercontent.com/u/12196021?v=3","gravatar_id":"","url":"https://api.github.com/users/dreamstalker","html_url":"https://github.com/dreamstalker","followers_url":"https://api.github.com/users/dreamstalker/followers","following_url":"https://api.github.com/users/dreamstalker/following{/other_user}","gists_url":"https://api.github.com/users/dreamstalker/gists{/gist_id}","starred_url":"https://api.github.com/users/dreamstalker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dreamstalker/subscriptions","organizations_url":"https://api.github.com/users/dreamstalker/orgs","repos_url":"https://api.github.com/users/dreamstalker/repos","events_url":"https://api.github.com/users/dreamstalker/events{/privacy}","received_events_url":"https://api.github.com/users/dreamstalker/received_events","type":"User","site_admin":false},"repo":{"id":35051548,"name":"rehlds","full_name":"dreamstalker/rehlds","owner":{"login":"dreamstalker","id":12196021,"avatar_url":"https://avatars0.githubusercontent.com/u/12196021?v=3","gravatar_id":"","url":"https://api.github.com/users/dreamstalker","html_url":"https://github.com/dreamstalker","followers_url":"https://api.github.com/users/dreamstalker/followers","following_url":"https://api.github.com/users/dreamstalker/following{/other_user}","gists_url":"https://api.github.com/users/dreamstalker/gists{/gist_id}","starred_url":"https://api.github.com/users/dreamstalker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dreamstalker/subscriptions","organizations_url":"https://api.github.com/users/dreamstalker/orgs","repos_url":"https://api.github.com/users/dreamstalker/repos","events_url":"https://api.github.com/users/dreamstalker/events{/privacy}","received_events_url":"https://api.github.com/users/dreamstalker/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dreamstalker/rehlds","description":"Reverse-engineered HLDS","fork":false,"url":"https://api.github.com/repos/dreamstalker/rehlds","forks_url":"https://api.github.com/repos/dreamstalker/rehlds/forks","keys_url":"https://api.github.com/repos/dreamstalker/rehlds/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dreamstalker/rehlds/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dreamstalker/rehlds/teams","hooks_url":"https://api.github.com/repos/dreamstalker/rehlds/hooks","issue_events_url":"https://api.github.com/repos/dreamstalker/rehlds/issues/events{/number}","events_url":"https://api.github.com/repos/dreamstalker/rehlds/events","assignees_url":"https://api.github.com/repos/dreamstalker/rehlds/assignees{/user}","branches_url":"https://api.github.com/repos/dreamstalker/rehlds/branches{/branch}","tags_url":"https://api.github.com/repos/dreamstalker/rehlds/tags","blobs_url":"https://api.github.com/repos/dreamstalker/rehlds/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dreamstalker/rehlds/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dreamstalker/rehlds/git/refs{/sha}","trees_url":"https://api.github.com/repos/dreamstalker/rehlds/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dreamstalker/rehlds/statuses/{sha}","languages_url":"https://api.github.com/repos/dreamstalker/rehlds/languages","stargazers_url":"https://api.github.com/repos/dreamstalker/rehlds/stargazers","contributors_url":"https://api.github.com/repos/dreamstalker/rehlds/contributors","subscribers_url":"https://api.github.com/repos/dreamstalker/rehlds/subscribers","subscription_url":"https://api.github.com/repos/dreamstalker/rehlds/subscription","commits_url":"https://api.github.com/repos/dreamstalker/rehlds/commits{/sha}","git_commits_url":"https://api.github.com/repos/dreamstalker/rehlds/git/commits{/sha}","comments_url":"https://api.github.com/repos/dreamstalker/rehlds/comments{/number}","issue_comment_url":"https://api.github.com/repos/dreamstalker/rehlds/issues/comments{/number}","contents_url":"https://api.github.com/repos/dreamstalker/rehlds/contents/{+path}","compare_url":"https://api.github.com/repos/dreamstalker/rehlds/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dreamstalker/rehlds/merges","archive_url":"https://api.github.com/repos/dreamstalker/rehlds/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dreamstalker/rehlds/downloads","issues_url":"https://api.github.com/repos/dreamstalker/rehlds/issues{/number}","pulls_url":"https://api.github.com/repos/dreamstalker/rehlds/pulls{/number}","milestones_url":"https://api.github.com/repos/dreamstalker/rehlds/milestones{/number}","notifications_url":"https://api.github.com/repos/dreamstalker/rehlds/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dreamstalker/rehlds/labels{/name}","releases_url":"https://api.github.com/repos/dreamstalker/rehlds/releases{/id}","deployments_url":"https://api.github.com/repos/dreamstalker/rehlds/deployments","created_at":"2015-05-04T18:21:48Z","updated_at":"2017-04-11T13:21:24Z","pushed_at":"2017-04-25T15:59:04Z","git_url":"git://github.com/dreamstalker/rehlds.git","ssh_url":"git@github.com:dreamstalker/rehlds.git","clone_url":"https://github.com/dreamstalker/rehlds.git","svn_url":"https://github.com/dreamstalker/rehlds","homepage":null,"size":3009,"stargazers_count":115,"watchers_count":115,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":45,"mirror_url":null,"open_issues_count":71,"forks":45,"open_issues":71,"watchers":115,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dreamstalker/rehlds/pulls/440"},"html":{"href":"https://github.com/dreamstalker/rehlds/pull/440"},"issue":{"href":"https://api.github.com/repos/dreamstalker/rehlds/issues/440"},"comments":{"href":"https://api.github.com/repos/dreamstalker/rehlds/issues/440/comments"},"review_comments":{"href":"https://api.github.com/repos/dreamstalker/rehlds/pulls/440/comments"},"review_comment":{"href":"https://api.github.com/repos/dreamstalker/rehlds/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dreamstalker/rehlds/pulls/440/commits"},"statuses":{"href":"https://api.github.com/repos/dreamstalker/rehlds/statuses/19f3b365a7ca17e35913e90b422df4f63a6d3d92"}}}}
{"actor":{"display_login":"In-line"}}