{"action":"created","comment":{"url":"https://api.github.com/repos/mapsme/omim/pulls/comments/207876935","pull_request_review_id":143573923,"id":207876935,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNzg3NjkzNQ==","diff_hunk":"@@ -0,0 +1,195 @@\n+#pragma once\n+\n+#include \"base/logging.hpp\"\n+\n+#include \"coding/file_writer.hpp\"\n+#include \"coding/write_to_sink.hpp\"\n+\n+#include \"generator/osm_element.hpp\"\n+#include \"generator/routing_helpers.hpp\"\n+\n+#include \"geometry/point2d.hpp\"\n+#include \"geometry/segment2d.hpp\"\n+\n+#include \"indexer/data_source.hpp\"\n+#include \"indexer/feature_data.hpp\"\n+#include \"indexer/feature_decl.hpp\"\n+#include \"indexer/scales.hpp\"\n+\n+#include \"routing/base/followed_polyline.hpp\"\n+#include \"routing/routing_helpers.hpp\"\n+\n+#include <algorithm>\n+#include <cstdint>\n+#include <fstream>\n+#include <map>\n+#include <sstream>\n+#include <string>\n+#include <utility>\n+#include <vector>\n+\n+\n+namespace {\n+enum class CameraDirection\n+{\n+  UNKNOWN,\n+  FORWARD,\n+  BACKWARD,\n+  BOTH\n+};\n+\n+constexpr double kEqualityEps = 1e-5;\n+constexpr double kMaxDistFromCameraToClosestSegment = 20; // meters\n+constexpr double kSearchCameraRadius = 10;\n+}\n+\n+class CameraNodeProcessor\n+{\n+public:\n+\n+  explicit CameraNodeProcessor(std::string const & filePath)\n+    : m_fileWriter(filePath, FileWriter::OP_WRITE_TRUNCATE)\n+  {\n+    LOG(LINFO, (\"Saving information about cameras and ways, where they lie on, to: \", filePath));\n+  }\n+\n+  template<typename Cache>\n+  void ProcessAndWrite(OsmElement & p, FeatureParams const & params, Cache cache)\n+  {\n+    std::string maxSpeedString = params.GetMetadata().Get(feature::Metadata::EType::FMD_MAXSPEED);\n+    if (maxSpeedString.empty())\n+      maxSpeedString = \"0\";\n+\n+    uint32_t maxSpeed;\n+    {\n+      std::stringstream ss;\n+      ss << maxSpeedString;\n+      ss >> maxSpeed;\n+    }\n+\n+    m_fileWriter.Write(reinterpret_cast<char * >(&p.lat), sizeof(p.lat));\n+    m_fileWriter.Write(reinterpret_cast<char * >(&p.lon), sizeof(p.lat));\n+    m_fileWriter.Write(reinterpret_cast<char * >(&maxSpeed), sizeof(maxSpeed));\n+\n+    std::vector<uint64_t> ways;\n+    cache.ForEachWayByNode(p.id, [&ways](uint64_t wayId)\n+    {\n+      ways.push_back(wayId);\n+      return false;\n+    });\n+\n+    auto size = static_cast<uint32_t>(ways.size());\n+    m_fileWriter.Write(reinterpret_cast<char * >(&size), sizeof(size));\n+    for (auto wayId : ways)\n+      m_fileWriter.Write(reinterpret_cast<char * >(&wayId), sizeof(wayId));\n+  }\n+\n+private:\n+\n+  FileWriter m_fileWriter;\n+};\n+\n+class CamerasInfoCollector\n+{\n+public:\n+  CamerasInfoCollector(std::string const & dataFilePath, std::string const & camerasInfoPath,\n+                       std::string const & osmIdsToFeatureIdsPath);\n+\n+  bool IsValid() const { return m_valid; }\n+\n+  struct Camera\n+  {\n+    // pair of feature_id and segment_id, where placed camera.\n+    // uint64_t - because we store osm::Id::Way here at first.\n+    using SegmentCoord = std::pair<uint64_t, uint32_t>;\n+\n+    Camera(m2::PointD & center, uint8_t maxSpeed, std::vector<SegmentCoord> & ways)\n+      : m_center(center), m_maxSpeed(maxSpeed), m_ways(std::move(ways)), m_direction(CameraDirection::UNKNOWN)\n+    {}\n+\n+    m2::PointD m_center;\n+    uint8_t m_maxSpeed;\n+    std::vector<SegmentCoord> m_ways;\n+    CameraDirection m_direction;\n+\n+\n+    void parseDirection()\n+    {\n+      // After some research we understood, that camera's direction is a random option.\n+      // This fact was checked with random-choosed cameras and google maps 3d view.\n+      // The real direction and the indicated in the .osm differed.\n+      // So let's this function, space in mwm will be. And implementation won't, until\n+      // well data appeared in .osm\n+    }\n+\n+    // Modify m_ways vector. Set for each way - id of the closest segment.\n+    void findClosestSegment(FrozenDataSource const & dataSource);\n+\n+    // Returns pair:\n+    // 1. id of segment, which starts at camera's center.\n+    // 2. bool - false if current feature is not the road, and we should erase it from vector of ways.\n+    std::pair<uint32_t, bool> findMySelf(uint32_t wayId, FrozenDataSource const & dataSource);\n+\n+    void translateWaysIdFromOsmId(std::map<osm::Id, uint32_t> const & osmIdToFeatureId);\n+\n+    static void Serialize(FileWriter & writer, Camera const & camera)\n+    {\n+      auto waysNumber = static_cast<uint8_t>(camera.m_ways.size());\n+      WriteToSink(writer, waysNumber);\n+\n+      for (auto const & way : camera.m_ways)\n+      {\n+        auto featureId = static_cast<uint32_t>(way.first);\n+        WriteToSink(writer, featureId); // featureId\n+        WriteToSink(writer, way.second); //segmentId\n+      }\n+\n+      auto speed = static_cast<uint8_t>(camera.m_maxSpeed);\n+      WriteToSink(writer, speed);\n+\n+      auto direction = static_cast<uint8_t>(camera.m_direction);\n+      WriteToSink(writer, direction);\n+\n+      // TODO add implementation of this feature\n+      WriteToSink(writer, 0); // Time, from which camera is on\n+      WriteToSink(writer, 0); // Time, from which camera is off\n+    }\n+  };\n+\n+  std::vector<Camera> const & Data() { return m_cameras; }\n+\n+  static void Serialize(FileWriter & writer, std::vector<Camera> const & m_cameras)\n+  {\n+    WriteToSink(writer, kLatestVersion);\n+\n+    auto amount = static_cast<uint32_t>(m_cameras.size());\n+    WriteToSink(writer, amount);\n+\n+    for (auto const & camera : m_cameras)\n+      Camera::Serialize(writer, camera);\n+  }\n+\n+private:\n+\n+  bool ParseIntermediateInfo(string const & camerasInfoPath);\n+\n+  template<typename T>\n+  void Read(FileReader & fileReader, uint64_t & pos, T * pointer)","path":"generator/camera_processor.hpp","position":177,"original_position":177,"commit_id":"d575c29e35a90f0948603120596c3c11787f5865","original_commit_id":"d575c29e35a90f0948603120596c3c11787f5865","user":{"login":"mpimenov","id":10366009,"node_id":"MDQ6VXNlcjEwMzY2MDA5","avatar_url":"https://avatars0.githubusercontent.com/u/10366009?v=4","gravatar_id":"","url":"https://api.github.com/users/mpimenov","html_url":"https://github.com/mpimenov","followers_url":"https://api.github.com/users/mpimenov/followers","following_url":"https://api.github.com/users/mpimenov/following{/other_user}","gists_url":"https://api.github.com/users/mpimenov/gists{/gist_id}","starred_url":"https://api.github.com/users/mpimenov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mpimenov/subscriptions","organizations_url":"https://api.github.com/users/mpimenov/orgs","repos_url":"https://api.github.com/users/mpimenov/repos","events_url":"https://api.github.com/users/mpimenov/events{/privacy}","received_events_url":"https://api.github.com/users/mpimenov/received_events","type":"User","site_admin":false},"body":"А так код получается такой же, только есть ещё одна локальная функция, дублирующая и так имеющийся функционал.\r\nЧто делать, если захочется переписать на varint? Что делать, если код сломается из-за того, что не уследили за pos?","created_at":"2018-08-06T12:41:17Z","updated_at":"2018-08-06T12:41:17Z","html_url":"https://github.com/mapsme/omim/pull/9255#discussion_r207876935","pull_request_url":"https://api.github.com/repos/mapsme/omim/pulls/9255","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/mapsme/omim/pulls/comments/207876935"},"html":{"href":"https://github.com/mapsme/omim/pull/9255#discussion_r207876935"},"pull_request":{"href":"https://api.github.com/repos/mapsme/omim/pulls/9255"}},"in_reply_to_id":207851531},"pull_request":{"url":"https://api.github.com/repos/mapsme/omim/pulls/9255","id":206244466,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2MjQ0NDY2","html_url":"https://github.com/mapsme/omim/pull/9255","diff_url":"https://github.com/mapsme/omim/pull/9255.diff","patch_url":"https://github.com/mapsme/omim/pull/9255.patch","issue_url":"https://api.github.com/repos/mapsme/omim/issues/9255","number":9255,"state":"open","locked":false,"title":"[routing] add section for speed_cam","user":{"login":"gmoryes","id":17534533,"node_id":"MDQ6VXNlcjE3NTM0NTMz","avatar_url":"https://avatars2.githubusercontent.com/u/17534533?v=4","gravatar_id":"","url":"https://api.github.com/users/gmoryes","html_url":"https://github.com/gmoryes","followers_url":"https://api.github.com/users/gmoryes/followers","following_url":"https://api.github.com/users/gmoryes/following{/other_user}","gists_url":"https://api.github.com/users/gmoryes/gists{/gist_id}","starred_url":"https://api.github.com/users/gmoryes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gmoryes/subscriptions","organizations_url":"https://api.github.com/users/gmoryes/orgs","repos_url":"https://api.github.com/users/gmoryes/repos","events_url":"https://api.github.com/users/gmoryes/events{/privacy}","received_events_url":"https://api.github.com/users/gmoryes/received_events","type":"User","site_admin":false},"body":"Код добавляет секцию. \r\nПервый проход - строим соответствия `точка => id way, в котором есть эта точка`\r\nВторой проход - когда парсим точки, если текущая точка - камера, то с помощью данных из 1ого прохода находим все пути, к которых относится точка.\r\nТретий проход - для каждой камеры ищем ее featureId, segmentId, k ([0, 1]) - расположение на этом сегменте. \r\n\r\nВ случае если у камеры есть дороги к которым она привязана, то просто ищем среди точек дороги нашу камеру. Если дорог нет, то ищем ближайшую дорожный сегмент.","created_at":"2018-08-05T15:29:25Z","updated_at":"2018-08-06T12:41:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"57c05fca06919a0120b5fde4b4ac6c203d430f85","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/mapsme/omim/pulls/9255/commits","review_comments_url":"https://api.github.com/repos/mapsme/omim/pulls/9255/comments","review_comment_url":"https://api.github.com/repos/mapsme/omim/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mapsme/omim/issues/9255/comments","statuses_url":"https://api.github.com/repos/mapsme/omim/statuses/d575c29e35a90f0948603120596c3c11787f5865","head":{"label":"gmoryes:MAPSME-8120.speed_cam","ref":"MAPSME-8120.speed_cam","sha":"d575c29e35a90f0948603120596c3c11787f5865","user":{"login":"gmoryes","id":17534533,"node_id":"MDQ6VXNlcjE3NTM0NTMz","avatar_url":"https://avatars2.githubusercontent.com/u/17534533?v=4","gravatar_id":"","url":"https://api.github.com/users/gmoryes","html_url":"https://github.com/gmoryes","followers_url":"https://api.github.com/users/gmoryes/followers","following_url":"https://api.github.com/users/gmoryes/following{/other_user}","gists_url":"https://api.github.com/users/gmoryes/gists{/gist_id}","starred_url":"https://api.github.com/users/gmoryes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gmoryes/subscriptions","organizations_url":"https://api.github.com/users/gmoryes/orgs","repos_url":"https://api.github.com/users/gmoryes/repos","events_url":"https://api.github.com/users/gmoryes/events{/privacy}","received_events_url":"https://api.github.com/users/gmoryes/received_events","type":"User","site_admin":false},"repo":{"id":141252817,"node_id":"MDEwOlJlcG9zaXRvcnkxNDEyNTI4MTc=","name":"omim","full_name":"gmoryes/omim","owner":{"login":"gmoryes","id":17534533,"node_id":"MDQ6VXNlcjE3NTM0NTMz","avatar_url":"https://avatars2.githubusercontent.com/u/17534533?v=4","gravatar_id":"","url":"https://api.github.com/users/gmoryes","html_url":"https://github.com/gmoryes","followers_url":"https://api.github.com/users/gmoryes/followers","following_url":"https://api.github.com/users/gmoryes/following{/other_user}","gists_url":"https://api.github.com/users/gmoryes/gists{/gist_id}","starred_url":"https://api.github.com/users/gmoryes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gmoryes/subscriptions","organizations_url":"https://api.github.com/users/gmoryes/orgs","repos_url":"https://api.github.com/users/gmoryes/repos","events_url":"https://api.github.com/users/gmoryes/events{/privacy}","received_events_url":"https://api.github.com/users/gmoryes/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gmoryes/omim","description":"🗺️ MAPS.ME — Offline OpenStreetMap maps for iOS and Android","fork":true,"url":"https://api.github.com/repos/gmoryes/omim","forks_url":"https://api.github.com/repos/gmoryes/omim/forks","keys_url":"https://api.github.com/repos/gmoryes/omim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gmoryes/omim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gmoryes/omim/teams","hooks_url":"https://api.github.com/repos/gmoryes/omim/hooks","issue_events_url":"https://api.github.com/repos/gmoryes/omim/issues/events{/number}","events_url":"https://api.github.com/repos/gmoryes/omim/events","assignees_url":"https://api.github.com/repos/gmoryes/omim/assignees{/user}","branches_url":"https://api.github.com/repos/gmoryes/omim/branches{/branch}","tags_url":"https://api.github.com/repos/gmoryes/omim/tags","blobs_url":"https://api.github.com/repos/gmoryes/omim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gmoryes/omim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gmoryes/omim/git/refs{/sha}","trees_url":"https://api.github.com/repos/gmoryes/omim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gmoryes/omim/statuses/{sha}","languages_url":"https://api.github.com/repos/gmoryes/omim/languages","stargazers_url":"https://api.github.com/repos/gmoryes/omim/stargazers","contributors_url":"https://api.github.com/repos/gmoryes/omim/contributors","subscribers_url":"https://api.github.com/repos/gmoryes/omim/subscribers","subscription_url":"https://api.github.com/repos/gmoryes/omim/subscription","commits_url":"https://api.github.com/repos/gmoryes/omim/commits{/sha}","git_commits_url":"https://api.github.com/repos/gmoryes/omim/git/commits{/sha}","comments_url":"https://api.github.com/repos/gmoryes/omim/comments{/number}","issue_comment_url":"https://api.github.com/repos/gmoryes/omim/issues/comments{/number}","contents_url":"https://api.github.com/repos/gmoryes/omim/contents/{+path}","compare_url":"https://api.github.com/repos/gmoryes/omim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gmoryes/omim/merges","archive_url":"https://api.github.com/repos/gmoryes/omim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gmoryes/omim/downloads","issues_url":"https://api.github.com/repos/gmoryes/omim/issues{/number}","pulls_url":"https://api.github.com/repos/gmoryes/omim/pulls{/number}","milestones_url":"https://api.github.com/repos/gmoryes/omim/milestones{/number}","notifications_url":"https://api.github.com/repos/gmoryes/omim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gmoryes/omim/labels{/name}","releases_url":"https://api.github.com/repos/gmoryes/omim/releases{/id}","deployments_url":"https://api.github.com/repos/gmoryes/omim/deployments","created_at":"2018-07-17T07:57:11Z","updated_at":"2018-07-24T11:34:49Z","pushed_at":"2018-08-05T15:57:47Z","git_url":"git://github.com/gmoryes/omim.git","ssh_url":"git@github.com:gmoryes/omim.git","clone_url":"https://github.com/gmoryes/omim.git","svn_url":"https://github.com/gmoryes/omim","homepage":"","size":4000518,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"mapsme:master","ref":"master","sha":"c43305029839d5c7c9ab2eeed370e56bd777cc41","user":{"login":"mapsme","id":14185141,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MTg1MTQx","avatar_url":"https://avatars1.githubusercontent.com/u/14185141?v=4","gravatar_id":"","url":"https://api.github.com/users/mapsme","html_url":"https://github.com/mapsme","followers_url":"https://api.github.com/users/mapsme/followers","following_url":"https://api.github.com/users/mapsme/following{/other_user}","gists_url":"https://api.github.com/users/mapsme/gists{/gist_id}","starred_url":"https://api.github.com/users/mapsme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mapsme/subscriptions","organizations_url":"https://api.github.com/users/mapsme/orgs","repos_url":"https://api.github.com/users/mapsme/repos","events_url":"https://api.github.com/users/mapsme/events{/privacy}","received_events_url":"https://api.github.com/users/mapsme/received_events","type":"Organization","site_admin":false},"repo":{"id":42798033,"node_id":"MDEwOlJlcG9zaXRvcnk0Mjc5ODAzMw==","name":"omim","full_name":"mapsme/omim","owner":{"login":"mapsme","id":14185141,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MTg1MTQx","avatar_url":"https://avatars1.githubusercontent.com/u/14185141?v=4","gravatar_id":"","url":"https://api.github.com/users/mapsme","html_url":"https://github.com/mapsme","followers_url":"https://api.github.com/users/mapsme/followers","following_url":"https://api.github.com/users/mapsme/following{/other_user}","gists_url":"https://api.github.com/users/mapsme/gists{/gist_id}","starred_url":"https://api.github.com/users/mapsme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mapsme/subscriptions","organizations_url":"https://api.github.com/users/mapsme/orgs","repos_url":"https://api.github.com/users/mapsme/repos","events_url":"https://api.github.com/users/mapsme/events{/privacy}","received_events_url":"https://api.github.com/users/mapsme/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mapsme/omim","description":"🗺️ MAPS.ME — Offline OpenStreetMap maps for iOS and Android","fork":false,"url":"https://api.github.com/repos/mapsme/omim","forks_url":"https://api.github.com/repos/mapsme/omim/forks","keys_url":"https://api.github.com/repos/mapsme/omim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mapsme/omim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mapsme/omim/teams","hooks_url":"https://api.github.com/repos/mapsme/omim/hooks","issue_events_url":"https://api.github.com/repos/mapsme/omim/issues/events{/number}","events_url":"https://api.github.com/repos/mapsme/omim/events","assignees_url":"https://api.github.com/repos/mapsme/omim/assignees{/user}","branches_url":"https://api.github.com/repos/mapsme/omim/branches{/branch}","tags_url":"https://api.github.com/repos/mapsme/omim/tags","blobs_url":"https://api.github.com/repos/mapsme/omim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mapsme/omim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mapsme/omim/git/refs{/sha}","trees_url":"https://api.github.com/repos/mapsme/omim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mapsme/omim/statuses/{sha}","languages_url":"https://api.github.com/repos/mapsme/omim/languages","stargazers_url":"https://api.github.com/repos/mapsme/omim/stargazers","contributors_url":"https://api.github.com/repos/mapsme/omim/contributors","subscribers_url":"https://api.github.com/repos/mapsme/omim/subscribers","subscription_url":"https://api.github.com/repos/mapsme/omim/subscription","commits_url":"https://api.github.com/repos/mapsme/omim/commits{/sha}","git_commits_url":"https://api.github.com/repos/mapsme/omim/git/commits{/sha}","comments_url":"https://api.github.com/repos/mapsme/omim/comments{/number}","issue_comment_url":"https://api.github.com/repos/mapsme/omim/issues/comments{/number}","contents_url":"https://api.github.com/repos/mapsme/omim/contents/{+path}","compare_url":"https://api.github.com/repos/mapsme/omim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mapsme/omim/merges","archive_url":"https://api.github.com/repos/mapsme/omim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mapsme/omim/downloads","issues_url":"https://api.github.com/repos/mapsme/omim/issues{/number}","pulls_url":"https://api.github.com/repos/mapsme/omim/pulls{/number}","milestones_url":"https://api.github.com/repos/mapsme/omim/milestones{/number}","notifications_url":"https://api.github.com/repos/mapsme/omim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mapsme/omim/labels{/name}","releases_url":"https://api.github.com/repos/mapsme/omim/releases{/id}","deployments_url":"https://api.github.com/repos/mapsme/omim/deployments","created_at":"2015-09-20T02:57:13Z","updated_at":"2018-08-06T11:10:03Z","pushed_at":"2018-08-06T12:03:35Z","git_url":"git://github.com/mapsme/omim.git","ssh_url":"git@github.com:mapsme/omim.git","clone_url":"https://github.com/mapsme/omim.git","svn_url":"https://github.com/mapsme/omim","homepage":"","size":4018798,"stargazers_count":2734,"watchers_count":2734,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":595,"mirror_url":null,"archived":false,"open_issues_count":723,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":595,"open_issues":723,"watchers":2734,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mapsme/omim/pulls/9255"},"html":{"href":"https://github.com/mapsme/omim/pull/9255"},"issue":{"href":"https://api.github.com/repos/mapsme/omim/issues/9255"},"comments":{"href":"https://api.github.com/repos/mapsme/omim/issues/9255/comments"},"review_comments":{"href":"https://api.github.com/repos/mapsme/omim/pulls/9255/comments"},"review_comment":{"href":"https://api.github.com/repos/mapsme/omim/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mapsme/omim/pulls/9255/commits"},"statuses":{"href":"https://api.github.com/repos/mapsme/omim/statuses/d575c29e35a90f0948603120596c3c11787f5865"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"mpimenov"}}