{"action":"created","comment":{"url":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/comments/49209770","id":49209770,"diff_hunk":"@@ -0,0 +1,586 @@\n+<?php\n+\n+/**\n+ * @file\n+ * Contains \\Drupal\\Tests\\decoupled_auth\\Kernel\\AcquisitionApiTest.\n+ */\n+\n+namespace Drupal\\Tests\\decoupled_auth\\Kernel;\n+\n+use Drupal\\KernelTests\\KernelTestBase;\n+use Drupal\\decoupled_auth\\Tests\\DecoupledAuthUserCreationTrait;\n+use Drupal\\simpletest\\UserCreationTrait;\n+\n+/**\n+ * Tests the Migration entity.\n+ *\n+ * @coversDefaultClass \\Drupal\\decoupled_auth\\Plugin\\Validation\\Constraint\\DecoupledAuthUserMailUniqueValidator\n+ * @group decoupled_auth\n+ */\n+class UniqueEmailTest extends KernelTestBase {\n+\n+  use DecoupledAuthUserCreationTrait;\n+  use UserCreationTrait;\n+\n+  /**\n+   * {@inheritdoc}\n+   */\n+  public static $modules = ['decoupled_auth', 'user', 'system'];\n+\n+  /**\n+   * {@inheritdoc}\n+   */\n+  protected function setUp() {\n+    parent::setUp();\n+\n+    $this->installConfig(['decoupled_auth']);\n+    $this->installEntitySchema('user');\n+    $this->installSchema('system', 'sequences');\n+  }\n+\n+  /**\n+   * Set the configuration for unique emails.\n+   *\n+   * @param string $mode\n+   *   The mode. Can be one of 'all', 'none', 'include' or 'exclude'.\n+   * @param array $roles\n+   *   The array of role IDs if in 'include' or 'exclude' mode.\n+   */\n+  protected function setUniqueEmailsConfig($mode, $roles = []) {\n+    $this->config('decoupled_auth.settings')\n+      ->set('unique_emails.mode', $mode)\n+      ->set('unique_emails.roles', $roles)\n+      ->save();\n+  }\n+\n+  /**\n+   * Test the unique email validator in 'all' mode with no existing users.\n+   *\n+   * @covers ::validate\n+   */\n+  public function testModeAllNone() {\n+    $this->setUniqueEmailsConfig('all');\n+\n+    // Test validating a decoupled user.\n+    // Expected result: No violations\n+    $user = $this->createUnsavedUser();\n+    $violations = $user->validate();\n+    $this->assertEmpty($violations, 'Decoupled user passes validation.');\n+\n+    // Test validating a coupled user.\n+    // Expected result: No violations\n+    $user = $this->createUnsavedUser(FALSE);\n+    $violations = $user->validate();\n+    $this->assertEmpty($violations, 'Coupled user passes validation.');\n+  }\n+\n+  /**\n+   * Test the unique email validator in 'all' mode with an existing decoupled\n+   * user.\n+   *\n+   * @covers ::validate\n+   */\n+  public function testModeAllDecoupled() {\n+    $this->setUniqueEmailsConfig('all');\n+\n+    $existing_user = $this->createDecoupledUser();\n+\n+    // Test validating a decoupled user.\n+    // Expected result: Violations\n+    $user = $this->createUnsavedUser(TRUE, $existing_user->email_prefix);\n+    $violations = $user->validate();\n+    $this->assertNotEmpty($violations, 'Decoupled user fails validation.');\n+\n+    // Test validating a coupled user.\n+    // Expected result: Violations\n+    $user = $this->createUnsavedUser(FALSE, $existing_user->email_prefix);\n+    $violations = $user->validate();\n+    $this->assertNotEmpty($violations, 'Coupled user fails validation.');\n+  }\n+\n+  /**\n+   * Test the unique email validator in 'all' mode with an existing coupled\n+   * user.\n+   *\n+   * @covers ::validate\n+   */\n+  public function testModeAllCoupled() {\n+    $this->setUniqueEmailsConfig('all');\n+\n+    $existing_user = $this->createUser();\n+\n+    // Test validating a decoupled user.\n+    // Expected result: Violations\n+    $user = $this->createUnsavedUser(TRUE, $existing_user->getAccountName());\n+    $violations = $user->validate();\n+    $this->assertNotEmpty($violations, 'Decoupled user fails validation.');\n+\n+    // Test validating a coupled user.\n+    // Expected result: Violations\n+    $user = $this->createUnsavedUser(FALSE, $existing_user->getAccountName());\n+    $violations = $user->validate();\n+    $this->assertNotEmpty($violations, 'Coupled user fails validation.');\n+  }\n+\n+  /**\n+   * Test the unique email validator in 'none' mode with no existing users.\n+   *\n+   * @covers ::validate\n+   */\n+  public function testModeNoneNone() {\n+    $this->setUniqueEmailsConfig('none');\n+\n+    // Test validating a decoupled user.\n+    // Expected result: No violations\n+    $user = $this->createUnsavedUser();\n+    $violations = $user->validate();\n+    $this->assertEmpty($violations, 'Decoupled user passes validation.');\n+\n+    // Test validating a coupled user.\n+    // Expected result: No violations\n+    $user = $this->createUnsavedUser(FALSE);\n+    $violations = $user->validate();\n+    $this->assertEmpty($violations, 'Coupled user passes validation.');\n+  }\n+\n+  /**\n+   * Test the unique email validator in 'none' mode with an existing decoupled\n+   * user.\n+   *\n+   * @covers ::validate\n+   */\n+  public function testModeNoneDecoupled() {\n+    $this->setUniqueEmailsConfig('none');\n+\n+    $existing_user = $this->createDecoupledUser();\n+\n+    // Test validating a decoupled user.\n+    // Expected result: No violations\n+    $user = $this->createUnsavedUser(TRUE, $existing_user->email_prefix);\n+    $violations = $user->validate();\n+    $this->assertEmpty($violations, 'Decoupled user passes validation.');\n+\n+    // Test validating a coupled user.\n+    // Expected result: No violations\n+    $user = $this->createUnsavedUser(FALSE, $existing_user->email_prefix);\n+    $violations = $user->validate();\n+    $this->assertEmpty($violations, 'Coupled user passes validation.');\n+  }\n+\n+  /**\n+   * Test the unique email validator in 'none' mode with an existing coupled\n+   * user.\n+   *\n+   * @covers ::validate\n+   */\n+  public function testModeNoneCoupled() {\n+    $this->setUniqueEmailsConfig('none');\n+\n+    $existing_user = $this->createUser();\n+\n+    // Test validating a decoupled user.\n+    // Expected result: Violations\n+    $user = $this->createUnsavedUser(TRUE, $existing_user->getAccountName());\n+    $violations = $user->validate();\n+    $this->assertNotEmpty($violations, 'Decoupled user fails validation.');","path":"tests/src/Kernel/UniqueEmailTest.php","position":185,"original_position":185,"commit_id":"18560b8ac4e40fa330c191e9d5905f69f27eaba4","original_commit_id":"18560b8ac4e40fa330c191e9d5905f69f27eaba4","user":{"login":"rlmumford","id":879407,"avatar_url":"https://avatars.githubusercontent.com/u/879407?v=3","gravatar_id":"","url":"https://api.github.com/users/rlmumford","html_url":"https://github.com/rlmumford","followers_url":"https://api.github.com/users/rlmumford/followers","following_url":"https://api.github.com/users/rlmumford/following{/other_user}","gists_url":"https://api.github.com/users/rlmumford/gists{/gist_id}","starred_url":"https://api.github.com/users/rlmumford/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rlmumford/subscriptions","organizations_url":"https://api.github.com/users/rlmumford/orgs","repos_url":"https://api.github.com/users/rlmumford/repos","events_url":"https://api.github.com/users/rlmumford/events{/privacy}","received_events_url":"https://api.github.com/users/rlmumford/received_events","type":"User","site_admin":false},"body":"Shouldn't this be asserting empty? If the mode is none, then a decoupled user can have the same email address as a coupled user.","created_at":"2016-01-08T16:52:20Z","updated_at":"2016-01-08T16:52:20Z","html_url":"https://github.com/FreelyGive/decoupled_auth/pull/17#discussion_r49209770","pull_request_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/17","_links":{"self":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/comments/49209770"},"html":{"href":"https://github.com/FreelyGive/decoupled_auth/pull/17#discussion_r49209770"},"pull_request":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/17"}}},"pull_request":{"url":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/17","id":55481967,"html_url":"https://github.com/FreelyGive/decoupled_auth/pull/17","diff_url":"https://github.com/FreelyGive/decoupled_auth/pull/17.diff","patch_url":"https://github.com/FreelyGive/decoupled_auth/pull/17.patch","issue_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/issues/17","number":17,"state":"open","locked":false,"title":"Issue #2630366 by andrewbelcher: Optionally Unique E-mails","user":{"login":"andrewbelcher","id":7072329,"avatar_url":"https://avatars.githubusercontent.com/u/7072329?v=3","gravatar_id":"","url":"https://api.github.com/users/andrewbelcher","html_url":"https://github.com/andrewbelcher","followers_url":"https://api.github.com/users/andrewbelcher/followers","following_url":"https://api.github.com/users/andrewbelcher/following{/other_user}","gists_url":"https://api.github.com/users/andrewbelcher/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewbelcher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewbelcher/subscriptions","organizations_url":"https://api.github.com/users/andrewbelcher/orgs","repos_url":"https://api.github.com/users/andrewbelcher/repos","events_url":"https://api.github.com/users/andrewbelcher/events{/privacy}","received_events_url":"https://api.github.com/users/andrewbelcher/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-01-08T16:38:12Z","updated_at":"2016-01-08T16:52:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7396e3ef1bdda504f40686a8195272df843eb5df","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/17/commits","review_comments_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/17/comments","review_comment_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/comments{/number}","comments_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/issues/17/comments","statuses_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/statuses/18560b8ac4e40fa330c191e9d5905f69f27eaba4","head":{"label":"andrewbelcher:issue/2630366","ref":"issue/2630366","sha":"18560b8ac4e40fa330c191e9d5905f69f27eaba4","user":{"login":"andrewbelcher","id":7072329,"avatar_url":"https://avatars.githubusercontent.com/u/7072329?v=3","gravatar_id":"","url":"https://api.github.com/users/andrewbelcher","html_url":"https://github.com/andrewbelcher","followers_url":"https://api.github.com/users/andrewbelcher/followers","following_url":"https://api.github.com/users/andrewbelcher/following{/other_user}","gists_url":"https://api.github.com/users/andrewbelcher/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewbelcher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewbelcher/subscriptions","organizations_url":"https://api.github.com/users/andrewbelcher/orgs","repos_url":"https://api.github.com/users/andrewbelcher/repos","events_url":"https://api.github.com/users/andrewbelcher/events{/privacy}","received_events_url":"https://api.github.com/users/andrewbelcher/received_events","type":"User","site_admin":false},"repo":{"id":47628286,"name":"decoupled_auth","full_name":"andrewbelcher/decoupled_auth","owner":{"login":"andrewbelcher","id":7072329,"avatar_url":"https://avatars.githubusercontent.com/u/7072329?v=3","gravatar_id":"","url":"https://api.github.com/users/andrewbelcher","html_url":"https://github.com/andrewbelcher","followers_url":"https://api.github.com/users/andrewbelcher/followers","following_url":"https://api.github.com/users/andrewbelcher/following{/other_user}","gists_url":"https://api.github.com/users/andrewbelcher/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewbelcher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewbelcher/subscriptions","organizations_url":"https://api.github.com/users/andrewbelcher/orgs","repos_url":"https://api.github.com/users/andrewbelcher/repos","events_url":"https://api.github.com/users/andrewbelcher/events{/privacy}","received_events_url":"https://api.github.com/users/andrewbelcher/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/andrewbelcher/decoupled_auth","description":"","fork":true,"url":"https://api.github.com/repos/andrewbelcher/decoupled_auth","forks_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/forks","keys_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/keys{/key_id}","collaborators_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/teams","hooks_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/hooks","issue_events_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/issues/events{/number}","events_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/events","assignees_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/assignees{/user}","branches_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/branches{/branch}","tags_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/tags","blobs_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/git/refs{/sha}","trees_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/git/trees{/sha}","statuses_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/statuses/{sha}","languages_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/languages","stargazers_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/stargazers","contributors_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/contributors","subscribers_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/subscribers","subscription_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/subscription","commits_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/commits{/sha}","git_commits_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/git/commits{/sha}","comments_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/comments{/number}","issue_comment_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/issues/comments{/number}","contents_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/contents/{+path}","compare_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/compare/{base}...{head}","merges_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/merges","archive_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/downloads","issues_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/issues{/number}","pulls_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/pulls{/number}","milestones_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/milestones{/number}","notifications_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/labels{/name}","releases_url":"https://api.github.com/repos/andrewbelcher/decoupled_auth/releases{/id}","created_at":"2015-12-08T14:46:24Z","updated_at":"2015-12-08T14:49:56Z","pushed_at":"2016-01-08T16:37:38Z","git_url":"git://github.com/andrewbelcher/decoupled_auth.git","ssh_url":"git@github.com:andrewbelcher/decoupled_auth.git","clone_url":"https://github.com/andrewbelcher/decoupled_auth.git","svn_url":"https://github.com/andrewbelcher/decoupled_auth","homepage":null,"size":74,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"8.x-1.x"}},"base":{"label":"FreelyGive:8.x-1.x","ref":"8.x-1.x","sha":"ead5617aa269d8f342f8c5f01152b9b3e84f202a","user":{"login":"FreelyGive","id":11229203,"avatar_url":"https://avatars.githubusercontent.com/u/11229203?v=3","gravatar_id":"","url":"https://api.github.com/users/FreelyGive","html_url":"https://github.com/FreelyGive","followers_url":"https://api.github.com/users/FreelyGive/followers","following_url":"https://api.github.com/users/FreelyGive/following{/other_user}","gists_url":"https://api.github.com/users/FreelyGive/gists{/gist_id}","starred_url":"https://api.github.com/users/FreelyGive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FreelyGive/subscriptions","organizations_url":"https://api.github.com/users/FreelyGive/orgs","repos_url":"https://api.github.com/users/FreelyGive/repos","events_url":"https://api.github.com/users/FreelyGive/events{/privacy}","received_events_url":"https://api.github.com/users/FreelyGive/received_events","type":"Organization","site_admin":false},"repo":{"id":47558314,"name":"decoupled_auth","full_name":"FreelyGive/decoupled_auth","owner":{"login":"FreelyGive","id":11229203,"avatar_url":"https://avatars.githubusercontent.com/u/11229203?v=3","gravatar_id":"","url":"https://api.github.com/users/FreelyGive","html_url":"https://github.com/FreelyGive","followers_url":"https://api.github.com/users/FreelyGive/followers","following_url":"https://api.github.com/users/FreelyGive/following{/other_user}","gists_url":"https://api.github.com/users/FreelyGive/gists{/gist_id}","starred_url":"https://api.github.com/users/FreelyGive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FreelyGive/subscriptions","organizations_url":"https://api.github.com/users/FreelyGive/orgs","repos_url":"https://api.github.com/users/FreelyGive/repos","events_url":"https://api.github.com/users/FreelyGive/events{/privacy}","received_events_url":"https://api.github.com/users/FreelyGive/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/FreelyGive/decoupled_auth","description":"","fork":false,"url":"https://api.github.com/repos/FreelyGive/decoupled_auth","forks_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/forks","keys_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/keys{/key_id}","collaborators_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/teams","hooks_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/hooks","issue_events_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/issues/events{/number}","events_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/events","assignees_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/assignees{/user}","branches_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/branches{/branch}","tags_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/tags","blobs_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/git/refs{/sha}","trees_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/git/trees{/sha}","statuses_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/statuses/{sha}","languages_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/languages","stargazers_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/stargazers","contributors_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/contributors","subscribers_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/subscribers","subscription_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/subscription","commits_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/commits{/sha}","git_commits_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/git/commits{/sha}","comments_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/comments{/number}","issue_comment_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/issues/comments{/number}","contents_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/contents/{+path}","compare_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/compare/{base}...{head}","merges_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/merges","archive_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/downloads","issues_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/issues{/number}","pulls_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls{/number}","milestones_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/milestones{/number}","notifications_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/labels{/name}","releases_url":"https://api.github.com/repos/FreelyGive/decoupled_auth/releases{/id}","created_at":"2015-12-07T14:52:20Z","updated_at":"2015-12-08T14:58:35Z","pushed_at":"2016-01-08T16:38:12Z","git_url":"git://github.com/FreelyGive/decoupled_auth.git","ssh_url":"git@github.com:FreelyGive/decoupled_auth.git","clone_url":"https://github.com/FreelyGive/decoupled_auth.git","svn_url":"https://github.com/FreelyGive/decoupled_auth","homepage":null,"size":107,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":1,"forks":3,"open_issues":1,"watchers":0,"default_branch":"8.x-1.x"}},"_links":{"self":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/17"},"html":{"href":"https://github.com/FreelyGive/decoupled_auth/pull/17"},"issue":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/issues/17"},"comments":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/issues/17/comments"},"review_comments":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/17/comments"},"review_comment":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/pulls/17/commits"},"statuses":{"href":"https://api.github.com/repos/FreelyGive/decoupled_auth/statuses/18560b8ac4e40fa330c191e9d5905f69f27eaba4"}}}}