{"action":"created","comment":{"url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/comments/197321328","pull_request_review_id":131044916,"id":197321328,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NzMyMTMyOA==","diff_hunk":"@@ -0,0 +1,805 @@\n+﻿/* Original work:\n+ *   Copyright 2017 Tom Bentley\n+ * \n+ *   Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *   you may not use this file except in compliance with the License.\n+ *   You may obtain a copy of the License at\n+ *   \n+ *   http://www.apache.org/licenses/LICENSE-2.0\n+ *   \n+ *   Unless required by applicable law or agreed to in writing, software\n+ *   distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *   See the License for the specific language governing permissions and\n+ *   limitations under the License.\n+ * \n+ * Modified work: \n+ *   Copyright 2018–present MongoDB Inc.\n+ *\n+ *   Licensed under the Apache License, Version 2.0 (the \"License\");\n+ *   you may not use this file except in compliance with the License.\n+ *   You may obtain a copy of the License at\n+ *   \n+ *   http://www.apache.org/licenses/LICENSE-2.0\n+ *   \n+ *   Unless required by applicable law or agreed to in writing, software\n+ *   distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *   See the License for the specific language governing permissions and\n+ *   limitations under the License.\n+ */\n+\n+using System;\n+using System.Collections.Generic;\n+using System.Globalization;\n+using System.Linq;\n+using System.Runtime.CompilerServices;\n+using System.Text;\n+\n+namespace MongoDB.Driver.Core.Authentication\n+{\n+    /// <summary>\n+    /// Utility class for Sasl string preparation.\n+    /// </summary>\n+    internal static class SaslPrepHelper\n+    {\n+        internal const int MinCodepoint = 0x00;\n+        internal const int MaxCodepoint = 0x10FFFF;\n+        internal const int SurrogateMinCodepoint = 0x00d800;\n+        internal const int SurrogateMaxCodePoint = 0x00dfff;\n+        \n+        /// <summary>\n+        /// Return the SASLPrep-canonicalised version of the given <paramref name=\"str\"/> for use as a query string.                          \n+        /// This implements the {@code SASLPrep} algorithm defined in <a href=\"https://tools.ietf.org/html/rfc4013\">RFC 4013</a>.          \n+        /// See <a href=\"https://tools.ietf.org/html/rfc3454#section-7\">RFC 3454, Section 7</a> for discussion of what a\n+        /// query string is.\n+        /// String normalization step in the .NET Standard version of the driver is skipped due to a lack of a string\n+        /// normalization function.\n+        /// </summary>\n+        /// <param name=\"str\">The string to canonicalise.</param>\n+        /// <returns>The canonicalised string.</returns>\n+        internal static string SaslPrepQuery(string str)\n+        {\n+            return SaslPrep(str, true);\n+        }\n+\n+        /// <summary>\n+        /// Return the SASLPrep-canonicalised version of the given <paramref name=\"str\"/> for use as a stored string.                          \n+        /// This implements the SASLPrep algorithm defined in <a href=\"https://tools.ietf.org/html/rfc4013\">RFC 4013</a>.\n+        /// See <a href=\"https://tools.ietf.org/html/rfc3454#section-7\">RFC 3454, Section 7</a> for discussion of what a\n+        /// stored string is.\n+        /// String normalization step in the .NET Standard version of the driver is skipped due to a lack of a string\n+        /// normalization function.\n+        /// </summary>\n+        ///<param name=\"str\">The string to canonicalise.</param>\n+        ///<returns>The canonicalised string.</returns>\n+        internal static string SaslPrepStored(string str)\n+        {\n+            return SaslPrep(str, false);\n+        }\n+\n+        private static string SaslPrep(string str, bool allowUnassigned) {\n+            var chars = str.ToCharArray();\n+\n+            // 1. Map\n+            // non-ASCII space chars mapped to space\n+            for (var i = 0; i < str.Length; i++)\n+            {\n+                var ch = str[i];\n+                if (NonAsciiSpace(ch)) \n+                {\n+                    chars[i] = ' ';\n+                }\n+            }\n+\n+            var length = 0;\n+            for (var i = 0; i < str.Length; i++)\n+            {\n+                var ch = chars[i];\n+                if (!MappedToNothing(ch))\n+                {\n+                    chars[length++] = ch;\n+                }\n+            }\n+\n+            // 2. Normalize\n+#if NET45\n+            var normalized = new string(chars.Take(length).ToArray()).Normalize(NormalizationForm.FormKC);\n+#else\n+            // String normalization step in the .NET Standard version of the driver is skipped due to a lack of a string\n+            // normalization function.\n+            var normalized = new string(chars.Take(length).ToArray());\n+#endif\n+            var containsRandALCat = false;\n+            var containsLCat = false;\n+            var initialRandALCat = false;\n+            for (var i = 0; i < normalized.Length;)\n+            {\n+                int codepoint = char.ConvertToUtf32(normalized, i);\n+                // 3. Prohibit\n+                if (Prohibited(codepoint))\n+                {\n+                    throw new ArgumentException(\"Prohibited character at position \" + i);\n+                }\n+\n+                // 4. Check bidi\n+                var isRandALcat = IsRandALcat(codepoint);\n+                containsRandALCat |= isRandALcat;\n+                containsLCat |= IsLCat(codepoint);\n+\n+                initialRandALCat |= i == 0 && isRandALcat;\n+                if (!allowUnassigned && !IsDefined(codepoint))\n+                {\n+                    throw new ArgumentException(\"Character at position \" + i + \" is unassigned\");\n+                }   \n+\n+                i += CharCount(codepoint);\n+\n+                if (initialRandALCat && i >= normalized.Length && !isRandALcat)\n+                {\n+                    throw new ArgumentException(\"First character is RandALCat, but last character is not\");\n+                }      \n+            }\n+\n+            if (containsRandALCat && containsLCat)\n+            {\n+                throw new ArgumentException(\"Contains both RandALCat characters and LCat characters\");\n+            }\n+                \n+            return normalized;\n+        }\n+        \n+        /// <summary>\n+        /// Return true if the given <paramref name=\"ch\"/> is an ASCII control character as defined by\n+        /// <a href=\"https://tools.ietf.org/html/rfc3454#appendix-C.2.1\">RFC 3454, Appendix C.2.1</a>. \n+        /// </summary>\n+        /// <param name=\"ch\">The character.</param>\n+        /// <returns>Whether the given character is an ASCII control character.</returns>\n+        private static bool AsciiControl(char ch)\n+        {\n+            return ch <= '\\u001F' || ch == '\\u007F';\n+        }\n+        \n+        /// <summary>\n+        /// Return true if the given <paramref name=\"codepoint\"/> is a \"change display properties\" or a deprecated\n+        /// character as defined by <a href=\"https://tools.ietf.org/html/rfc3454#appendix-C.8\">RFC 3454, Appendix C.8</a>.\n+        /// </summary>\n+        /// <param name=\"codepoint\">The Unicode character's codepoint.</param>\n+        /// <returns>Whether the codepoint is a \"change display properties\" or a deprecated character.</returns>\n+        private static bool ChangeDisplayProperties(int codepoint)\n+        {\n+            return codepoint == 0x0340\n+                || codepoint == 0x0341\n+                || codepoint == 0x200E\n+                || codepoint == 0x200F\n+                || codepoint == 0x202A\n+                || codepoint == 0x202B\n+                || codepoint == 0x202C\n+                || codepoint == 0x202D\n+                || codepoint == 0x202E\n+                || codepoint == 0x206A\n+                || codepoint == 0x206B\n+                || codepoint == 0x206C\n+                || codepoint == 0x206D\n+                || codepoint == 0x206E\n+                || codepoint == 0x206F;\n+        }\n+\n+        /// <summary>\n+        /// Returns the number of characters required to represent a specified Unicode character.\n+        /// </summary>\n+        /// <param name=\"codepoint\">The Unicode character's codepoint.</param>\n+        /// <returns>Number of characters required to represent a specified Unicode character.</returns>\n+        private static int CharCount(int codepoint)\n+        {\n+            return codepoint >= 0x10000 ? 2 : 1;\n+        }\n+        \n+        /// <summary>\n+        /// Return true if the given <paramref name=\"codepoint\"/> is inappropriate for canonical representation\n+        /// characters as defined by <a href=\"https://tools.ietf.org/html/rfc3454#appendix-C.7\">RFC 3454, Appendix C.7</a>. \n+        /// </summary>\n+        /// <param name=\"codepoint\">The Unicode character's codepoint.</param>\n+        /// <returns></returns>\n+        private static bool InappropriateForCanonical(int codepoint)\n+        {\n+            return 0x2FF0 <= codepoint && codepoint <= 0x2FFB;\n+        }\n+\n+        /// <summary>\n+        /// Return true if the given <paramref name=\"codepoint\"/> is inappropriate for plain text characters as defined\n+        /// by <a href=\"https://tools.ietf.org/html/rfc3454#appendix-C.6\">RFC 3454, Appendix C.6</a>.\n+        /// </summary>\n+        /// <param name=\"codepoint\">The Unicode character's codepoint.</param>\n+        /// <returns></returns>\n+        private static bool InappropriateForPlainText(int codepoint)\n+        {\n+            return codepoint == 0xFFF9\n+                || codepoint == 0xFFFA\n+                || codepoint == 0xFFFB\n+                || codepoint == 0xFFFC\n+                || codepoint == 0xFFFD;\n+        }\n+\n+        /// <summary>\n+        /// Returns whether or not a Unicode character represented by a codepoint is defined in Unicode.\n+        /// See <a href=\"https://tools.ietf.org/html/rfc5137\">RFC 5137</a> for more details.\n+        /// </summary>\n+        /// <param name=\"codepoint\">The Unicode character's codepoint.</param>\n+        /// <returns>Whether or not the Unicode character represnted by codepoint is defined in Unicode.</returns>\n+        private static bool IsDefined(int codepoint)\n+        {   \n+            return IsSurrogateCodepoint(codepoint) || ","path":"src/MongoDB.Driver.Core/Core/Authentication/SaslPrepHelper.cs","position":233,"original_position":232,"commit_id":"f1a4b34fc6ec47b8b8b2e35a78c07ef961d7ea42","original_commit_id":"4d3600c9c23d3194a8674e3b3b0a3504200a6e61","user":{"login":"vincentkam","id":33040432,"node_id":"MDQ6VXNlcjMzMDQwNDMy","avatar_url":"https://avatars0.githubusercontent.com/u/33040432?v=4","gravatar_id":"","url":"https://api.github.com/users/vincentkam","html_url":"https://github.com/vincentkam","followers_url":"https://api.github.com/users/vincentkam/followers","following_url":"https://api.github.com/users/vincentkam/following{/other_user}","gists_url":"https://api.github.com/users/vincentkam/gists{/gist_id}","starred_url":"https://api.github.com/users/vincentkam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vincentkam/subscriptions","organizations_url":"https://api.github.com/users/vincentkam/orgs","repos_url":"https://api.github.com/users/vincentkam/repos","events_url":"https://api.github.com/users/vincentkam/events{/privacy}","received_events_url":"https://api.github.com/users/vincentkam/received_events","type":"User","site_admin":false},"body":"See offline discussion for proof of correctness.","created_at":"2018-06-22T01:46:31Z","updated_at":"2018-06-22T02:02:30Z","html_url":"https://github.com/vincentkam/mongo-csharp-driver/pull/8#discussion_r197321328","pull_request_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/8","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/comments/197321328"},"html":{"href":"https://github.com/vincentkam/mongo-csharp-driver/pull/8#discussion_r197321328"},"pull_request":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/8"}}},"pull_request":{"url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/8","id":196308173,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk2MzA4MTcz","html_url":"https://github.com/vincentkam/mongo-csharp-driver/pull/8","diff_url":"https://github.com/vincentkam/mongo-csharp-driver/pull/8.diff","patch_url":"https://github.com/vincentkam/mongo-csharp-driver/pull/8.patch","issue_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues/8","number":8,"state":"open","locked":false,"title":"CSHARP-2160: Implement SASLPrep","user":{"login":"vincentkam","id":33040432,"node_id":"MDQ6VXNlcjMzMDQwNDMy","avatar_url":"https://avatars0.githubusercontent.com/u/33040432?v=4","gravatar_id":"","url":"https://api.github.com/users/vincentkam","html_url":"https://github.com/vincentkam","followers_url":"https://api.github.com/users/vincentkam/followers","following_url":"https://api.github.com/users/vincentkam/following{/other_user}","gists_url":"https://api.github.com/users/vincentkam/gists{/gist_id}","starred_url":"https://api.github.com/users/vincentkam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vincentkam/subscriptions","organizations_url":"https://api.github.com/users/vincentkam/orgs","repos_url":"https://api.github.com/users/vincentkam/repos","events_url":"https://api.github.com/users/vincentkam/events{/privacy}","received_events_url":"https://api.github.com/users/vincentkam/received_events","type":"User","site_admin":false},"body":"Green in evergreen except for latest (needs geoNear changes).","created_at":"2018-06-21T00:41:52Z","updated_at":"2018-06-22T02:02:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7667494e7fd42d715a7b02a8d1e9ccb7f9e42a06","assignee":null,"assignees":[],"requested_reviewers":[{"login":"rstam","id":275022,"node_id":"MDQ6VXNlcjI3NTAyMg==","avatar_url":"https://avatars0.githubusercontent.com/u/275022?v=4","gravatar_id":"","url":"https://api.github.com/users/rstam","html_url":"https://github.com/rstam","followers_url":"https://api.github.com/users/rstam/followers","following_url":"https://api.github.com/users/rstam/following{/other_user}","gists_url":"https://api.github.com/users/rstam/gists{/gist_id}","starred_url":"https://api.github.com/users/rstam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rstam/subscriptions","organizations_url":"https://api.github.com/users/rstam/orgs","repos_url":"https://api.github.com/users/rstam/repos","events_url":"https://api.github.com/users/rstam/events{/privacy}","received_events_url":"https://api.github.com/users/rstam/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/8/commits","review_comments_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/8/comments","review_comment_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/comments{/number}","comments_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues/8/comments","statuses_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/statuses/f1a4b34fc6ec47b8b8b2e35a78c07ef961d7ea42","head":{"label":"vincentkam:CSHARP-2160","ref":"CSHARP-2160","sha":"f1a4b34fc6ec47b8b8b2e35a78c07ef961d7ea42","user":{"login":"vincentkam","id":33040432,"node_id":"MDQ6VXNlcjMzMDQwNDMy","avatar_url":"https://avatars0.githubusercontent.com/u/33040432?v=4","gravatar_id":"","url":"https://api.github.com/users/vincentkam","html_url":"https://github.com/vincentkam","followers_url":"https://api.github.com/users/vincentkam/followers","following_url":"https://api.github.com/users/vincentkam/following{/other_user}","gists_url":"https://api.github.com/users/vincentkam/gists{/gist_id}","starred_url":"https://api.github.com/users/vincentkam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vincentkam/subscriptions","organizations_url":"https://api.github.com/users/vincentkam/orgs","repos_url":"https://api.github.com/users/vincentkam/repos","events_url":"https://api.github.com/users/vincentkam/events{/privacy}","received_events_url":"https://api.github.com/users/vincentkam/received_events","type":"User","site_admin":false},"repo":{"id":111023834,"node_id":"MDEwOlJlcG9zaXRvcnkxMTEwMjM4MzQ=","name":"mongo-csharp-driver","full_name":"vincentkam/mongo-csharp-driver","owner":{"login":"vincentkam","id":33040432,"node_id":"MDQ6VXNlcjMzMDQwNDMy","avatar_url":"https://avatars0.githubusercontent.com/u/33040432?v=4","gravatar_id":"","url":"https://api.github.com/users/vincentkam","html_url":"https://github.com/vincentkam","followers_url":"https://api.github.com/users/vincentkam/followers","following_url":"https://api.github.com/users/vincentkam/following{/other_user}","gists_url":"https://api.github.com/users/vincentkam/gists{/gist_id}","starred_url":"https://api.github.com/users/vincentkam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vincentkam/subscriptions","organizations_url":"https://api.github.com/users/vincentkam/orgs","repos_url":"https://api.github.com/users/vincentkam/repos","events_url":"https://api.github.com/users/vincentkam/events{/privacy}","received_events_url":"https://api.github.com/users/vincentkam/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vincentkam/mongo-csharp-driver","description":".NET Driver for MongoDB","fork":true,"url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver","forks_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/forks","keys_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/teams","hooks_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/hooks","issue_events_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues/events{/number}","events_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/events","assignees_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/assignees{/user}","branches_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/branches{/branch}","tags_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/tags","blobs_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/refs{/sha}","trees_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/statuses/{sha}","languages_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/languages","stargazers_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/stargazers","contributors_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/contributors","subscribers_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/subscribers","subscription_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/subscription","commits_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/commits{/sha}","git_commits_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/commits{/sha}","comments_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/comments{/number}","issue_comment_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues/comments{/number}","contents_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/contents/{+path}","compare_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/merges","archive_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/downloads","issues_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues{/number}","pulls_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls{/number}","milestones_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/milestones{/number}","notifications_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/labels{/name}","releases_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/releases{/id}","deployments_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/deployments","created_at":"2017-11-16T21:22:46Z","updated_at":"2018-06-21T13:48:31Z","pushed_at":"2018-06-22T02:01:17Z","git_url":"git://github.com/vincentkam/mongo-csharp-driver.git","ssh_url":"git@github.com:vincentkam/mongo-csharp-driver.git","clone_url":"https://github.com/vincentkam/mongo-csharp-driver.git","svn_url":"https://github.com/vincentkam/mongo-csharp-driver","homepage":"http://mongodb.github.io/mongo-csharp-driver/","size":57682,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"vincentkam:master","ref":"master","sha":"4277ce025e4a5eeea62f0c1481791d5d764a9631","user":{"login":"vincentkam","id":33040432,"node_id":"MDQ6VXNlcjMzMDQwNDMy","avatar_url":"https://avatars0.githubusercontent.com/u/33040432?v=4","gravatar_id":"","url":"https://api.github.com/users/vincentkam","html_url":"https://github.com/vincentkam","followers_url":"https://api.github.com/users/vincentkam/followers","following_url":"https://api.github.com/users/vincentkam/following{/other_user}","gists_url":"https://api.github.com/users/vincentkam/gists{/gist_id}","starred_url":"https://api.github.com/users/vincentkam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vincentkam/subscriptions","organizations_url":"https://api.github.com/users/vincentkam/orgs","repos_url":"https://api.github.com/users/vincentkam/repos","events_url":"https://api.github.com/users/vincentkam/events{/privacy}","received_events_url":"https://api.github.com/users/vincentkam/received_events","type":"User","site_admin":false},"repo":{"id":111023834,"node_id":"MDEwOlJlcG9zaXRvcnkxMTEwMjM4MzQ=","name":"mongo-csharp-driver","full_name":"vincentkam/mongo-csharp-driver","owner":{"login":"vincentkam","id":33040432,"node_id":"MDQ6VXNlcjMzMDQwNDMy","avatar_url":"https://avatars0.githubusercontent.com/u/33040432?v=4","gravatar_id":"","url":"https://api.github.com/users/vincentkam","html_url":"https://github.com/vincentkam","followers_url":"https://api.github.com/users/vincentkam/followers","following_url":"https://api.github.com/users/vincentkam/following{/other_user}","gists_url":"https://api.github.com/users/vincentkam/gists{/gist_id}","starred_url":"https://api.github.com/users/vincentkam/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vincentkam/subscriptions","organizations_url":"https://api.github.com/users/vincentkam/orgs","repos_url":"https://api.github.com/users/vincentkam/repos","events_url":"https://api.github.com/users/vincentkam/events{/privacy}","received_events_url":"https://api.github.com/users/vincentkam/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vincentkam/mongo-csharp-driver","description":".NET Driver for MongoDB","fork":true,"url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver","forks_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/forks","keys_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/teams","hooks_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/hooks","issue_events_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues/events{/number}","events_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/events","assignees_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/assignees{/user}","branches_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/branches{/branch}","tags_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/tags","blobs_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/refs{/sha}","trees_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/statuses/{sha}","languages_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/languages","stargazers_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/stargazers","contributors_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/contributors","subscribers_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/subscribers","subscription_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/subscription","commits_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/commits{/sha}","git_commits_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/git/commits{/sha}","comments_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/comments{/number}","issue_comment_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues/comments{/number}","contents_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/contents/{+path}","compare_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/merges","archive_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/downloads","issues_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues{/number}","pulls_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls{/number}","milestones_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/milestones{/number}","notifications_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/labels{/name}","releases_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/releases{/id}","deployments_url":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/deployments","created_at":"2017-11-16T21:22:46Z","updated_at":"2018-06-21T13:48:31Z","pushed_at":"2018-06-22T02:01:17Z","git_url":"git://github.com/vincentkam/mongo-csharp-driver.git","ssh_url":"git@github.com:vincentkam/mongo-csharp-driver.git","clone_url":"https://github.com/vincentkam/mongo-csharp-driver.git","svn_url":"https://github.com/vincentkam/mongo-csharp-driver","homepage":"http://mongodb.github.io/mongo-csharp-driver/","size":57682,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/8"},"html":{"href":"https://github.com/vincentkam/mongo-csharp-driver/pull/8"},"issue":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues/8"},"comments":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/issues/8/comments"},"review_comments":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/8/comments"},"review_comment":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/pulls/8/commits"},"statuses":{"href":"https://api.github.com/repos/vincentkam/mongo-csharp-driver/statuses/f1a4b34fc6ec47b8b8b2e35a78c07ef961d7ea42"}},"author_association":"OWNER"}}
{"actor":{"display_login":"vincentkam"}}