{"action":"created","comment":{"url":"https://api.github.com/repos/GafferHQ/gaffer/pulls/comments/237282228","pull_request_review_id":179543084,"id":237282228,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNzI4MjIyOA==","diff_hunk":"@@ -0,0 +1,256 @@\n+//////////////////////////////////////////////////////////////////////////\n+//\n+//  Copyright (c) 2018, John Haddon. All rights reserved.\n+//\n+//  Redistribution and use in source and binary forms, with or without\n+//  modification, are permitted provided that the following conditions are\n+//  met:\n+//\n+//      * Redistributions of source code must retain the above\n+//        copyright notice, this list of conditions and the following\n+//        disclaimer.\n+//\n+//      * Redistributions in binary form must reproduce the above\n+//        copyright notice, this list of conditions and the following\n+//        disclaimer in the documentation and/or other materials provided with\n+//        the distribution.\n+//\n+//      * Neither the name of John Haddon nor the names of\n+//        any other contributors to this software may be used to endorse or\n+//        promote products derived from this software without specific prior\n+//        written permission.\n+//\n+//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n+//  IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n+//  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n+//  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n+//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n+//  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n+//  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n+//  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n+//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n+//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n+//  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+//\n+//////////////////////////////////////////////////////////////////////////\n+\n+#include \"GafferScene/Wireframe.h\"\n+\n+#include \"Gaffer/StringPlug.h\"\n+\n+#include \"IECoreScene/MeshPrimitive.h\"\n+#include \"IECoreScene/CurvesPrimitive.h\"\n+\n+#include \"IECore/DataAlgo.h\"\n+\n+#include \"boost/functional/hash.hpp\"\n+\n+#include <unordered_set>\n+\n+using namespace std;\n+using namespace Imath;\n+using namespace IECore;\n+using namespace IECoreScene;\n+using namespace Gaffer;\n+using namespace GafferScene;\n+\n+//////////////////////////////////////////////////////////////////////////\n+// Internal utilities\n+//////////////////////////////////////////////////////////////////////////\n+\n+namespace\n+{\n+\n+struct MakeWireframe\n+{\n+\n+\tCurvesPrimitivePtr operator() ( const V2fVectorData *positions, const vector<int> &verticesPerFace, const vector<int> &vertexIds )\n+\t{\n+\t\treturn makeWireframe( positions->baseReadable(), 2, verticesPerFace, vertexIds );\n+\t}\n+\n+\tCurvesPrimitivePtr operator() ( const V3fVectorData *positions, const vector<int> &verticesPerFace, const vector<int> &vertexIds )\n+\t{\n+\t\treturn makeWireframe( positions->baseReadable(), 3, verticesPerFace, vertexIds );\n+\t}\n+\n+\tCurvesPrimitivePtr operator() ( const Data *positions, const vector<int> &verticesPerFace, const vector<int> &vertexIds )\n+\t{\n+\t\tthrow IECore::Exception( boost::str(\n+\t\t\tboost::format( \"Position has unsupported type \\\"%1%\\\"\" ) % positions->typeName()\n+\t\t) );\n+\t}\n+\n+\tprivate :\n+\n+\t\tV3f position( const float *positions, int dimensions, int index )\n+\t\t{\n+\t\t\tV3f result( 0.0f );\n+\t\t\tfor( int i = 0; i < dimensions; ++i )\n+\t\t\t{\n+\t\t\t\tresult[i] = positions[index*dimensions+i];\n+\t\t\t}\n+\t\t\treturn result;\n+\t\t}\n+\n+\t\tCurvesPrimitivePtr makeWireframe( const float *positions, int dimensions, const vector<int> &verticesPerFace, const vector<int> &vertexIds )\n+\t\t{\n+\t\t\tIECore::V3fVectorDataPtr pData = new V3fVectorData;\n+\t\t\tpData->setInterpretation( GeometricData::Point );\n+\t\t\tvector<V3f> &p = pData->writable();\n+\n+\t\t\tusing Edge = std::pair<int, int>;\n+\t\t\tusing EdgeSet = unordered_set<Edge, boost::hash<Edge>>;\n+\t\t\tEdgeSet edgesVisited;\n+\n+\t\t\tint vertexIdsIndex = 0;\n+\t\t\tfor( int numVertices : verticesPerFace )\n+\t\t\t{\n+\t\t\t\tfor( int i = 0; i < numVertices; ++i )\n+\t\t\t\t{\n+\t\t\t\t\tint index0 = vertexIds[vertexIdsIndex + i];\n+\t\t\t\t\tint index1 = vertexIds[vertexIdsIndex + (i + 1) % numVertices];\n+\t\t\t\t\tEdge edge( min( index0, index1 ), max( index0, index1 ) );\n+\t\t\t\t\tif( edgesVisited.insert( edge ).second )","path":"src/GafferScene/Wireframe.cpp","position":131,"original_position":114,"commit_id":"97bca829bc53f00e85bac22cb1710f4bf0601711","original_commit_id":"13124fe5b254858553f2e2dabba410a6699be554","user":{"login":"johnhaddon","id":1133871,"node_id":"MDQ6VXNlcjExMzM4NzE=","avatar_url":"https://avatars0.githubusercontent.com/u/1133871?v=4","gravatar_id":"","url":"https://api.github.com/users/johnhaddon","html_url":"https://github.com/johnhaddon","followers_url":"https://api.github.com/users/johnhaddon/followers","following_url":"https://api.github.com/users/johnhaddon/following{/other_user}","gists_url":"https://api.github.com/users/johnhaddon/gists{/gist_id}","starred_url":"https://api.github.com/users/johnhaddon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnhaddon/subscriptions","organizations_url":"https://api.github.com/users/johnhaddon/orgs","repos_url":"https://api.github.com/users/johnhaddon/repos","events_url":"https://api.github.com/users/johnhaddon/events{/privacy}","received_events_url":"https://api.github.com/users/johnhaddon/received_events","type":"User","site_admin":false},"body":"Do you really mean a list? Whatever it is, the nested structure is going to need to support quick membership queries - consider how many edges connect to the vertex at the pole of a highly tessellated sphere.","created_at":"2018-11-28T22:12:30Z","updated_at":"2018-11-28T22:12:30Z","html_url":"https://github.com/GafferHQ/gaffer/pull/2914#discussion_r237282228","pull_request_url":"https://api.github.com/repos/GafferHQ/gaffer/pulls/2914","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/GafferHQ/gaffer/pulls/comments/237282228"},"html":{"href":"https://github.com/GafferHQ/gaffer/pull/2914#discussion_r237282228"},"pull_request":{"href":"https://api.github.com/repos/GafferHQ/gaffer/pulls/2914"}},"in_reply_to_id":236364014},"pull_request":{"url":"https://api.github.com/repos/GafferHQ/gaffer/pulls/2914","id":233515374,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMzNTE1Mzc0","html_url":"https://github.com/GafferHQ/gaffer/pull/2914","diff_url":"https://github.com/GafferHQ/gaffer/pull/2914.diff","patch_url":"https://github.com/GafferHQ/gaffer/pull/2914.patch","issue_url":"https://api.github.com/repos/GafferHQ/gaffer/issues/2914","number":2914,"state":"open","locked":false,"title":"Wireframe node","user":{"login":"johnhaddon","id":1133871,"node_id":"MDQ6VXNlcjExMzM4NzE=","avatar_url":"https://avatars0.githubusercontent.com/u/1133871?v=4","gravatar_id":"","url":"https://api.github.com/users/johnhaddon","html_url":"https://github.com/johnhaddon","followers_url":"https://api.github.com/users/johnhaddon/followers","following_url":"https://api.github.com/users/johnhaddon/following{/other_user}","gists_url":"https://api.github.com/users/johnhaddon/gists{/gist_id}","starred_url":"https://api.github.com/users/johnhaddon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnhaddon/subscriptions","organizations_url":"https://api.github.com/users/johnhaddon/orgs","repos_url":"https://api.github.com/users/johnhaddon/repos","events_url":"https://api.github.com/users/johnhaddon/events{/privacy}","received_events_url":"https://api.github.com/users/johnhaddon/received_events","type":"User","site_admin":false},"body":"This add a new Wireframe node, which converts an input mesh into a CurvesPrimitive containing all the edges. It supports the generation of wireframes for UVs as well as 3D positions.","created_at":"2018-11-26T10:57:29Z","updated_at":"2018-11-28T22:12:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e52cbb95860efdab9ff663aecf1985d339c2ba92","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/GafferHQ/gaffer/pulls/2914/commits","review_comments_url":"https://api.github.com/repos/GafferHQ/gaffer/pulls/2914/comments","review_comment_url":"https://api.github.com/repos/GafferHQ/gaffer/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GafferHQ/gaffer/issues/2914/comments","statuses_url":"https://api.github.com/repos/GafferHQ/gaffer/statuses/97bca829bc53f00e85bac22cb1710f4bf0601711","head":{"label":"johnhaddon:wireframe","ref":"wireframe","sha":"97bca829bc53f00e85bac22cb1710f4bf0601711","user":{"login":"johnhaddon","id":1133871,"node_id":"MDQ6VXNlcjExMzM4NzE=","avatar_url":"https://avatars0.githubusercontent.com/u/1133871?v=4","gravatar_id":"","url":"https://api.github.com/users/johnhaddon","html_url":"https://github.com/johnhaddon","followers_url":"https://api.github.com/users/johnhaddon/followers","following_url":"https://api.github.com/users/johnhaddon/following{/other_user}","gists_url":"https://api.github.com/users/johnhaddon/gists{/gist_id}","starred_url":"https://api.github.com/users/johnhaddon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnhaddon/subscriptions","organizations_url":"https://api.github.com/users/johnhaddon/orgs","repos_url":"https://api.github.com/users/johnhaddon/repos","events_url":"https://api.github.com/users/johnhaddon/events{/privacy}","received_events_url":"https://api.github.com/users/johnhaddon/received_events","type":"User","site_admin":false},"repo":{"id":9043150,"node_id":"MDEwOlJlcG9zaXRvcnk5MDQzMTUw","name":"gaffer","full_name":"johnhaddon/gaffer","private":false,"owner":{"login":"johnhaddon","id":1133871,"node_id":"MDQ6VXNlcjExMzM4NzE=","avatar_url":"https://avatars0.githubusercontent.com/u/1133871?v=4","gravatar_id":"","url":"https://api.github.com/users/johnhaddon","html_url":"https://github.com/johnhaddon","followers_url":"https://api.github.com/users/johnhaddon/followers","following_url":"https://api.github.com/users/johnhaddon/following{/other_user}","gists_url":"https://api.github.com/users/johnhaddon/gists{/gist_id}","starred_url":"https://api.github.com/users/johnhaddon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnhaddon/subscriptions","organizations_url":"https://api.github.com/users/johnhaddon/orgs","repos_url":"https://api.github.com/users/johnhaddon/repos","events_url":"https://api.github.com/users/johnhaddon/events{/privacy}","received_events_url":"https://api.github.com/users/johnhaddon/received_events","type":"User","site_admin":false},"html_url":"https://github.com/johnhaddon/gaffer","description":"My day-to-day development","fork":true,"url":"https://api.github.com/repos/johnhaddon/gaffer","forks_url":"https://api.github.com/repos/johnhaddon/gaffer/forks","keys_url":"https://api.github.com/repos/johnhaddon/gaffer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/johnhaddon/gaffer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/johnhaddon/gaffer/teams","hooks_url":"https://api.github.com/repos/johnhaddon/gaffer/hooks","issue_events_url":"https://api.github.com/repos/johnhaddon/gaffer/issues/events{/number}","events_url":"https://api.github.com/repos/johnhaddon/gaffer/events","assignees_url":"https://api.github.com/repos/johnhaddon/gaffer/assignees{/user}","branches_url":"https://api.github.com/repos/johnhaddon/gaffer/branches{/branch}","tags_url":"https://api.github.com/repos/johnhaddon/gaffer/tags","blobs_url":"https://api.github.com/repos/johnhaddon/gaffer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/johnhaddon/gaffer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/johnhaddon/gaffer/git/refs{/sha}","trees_url":"https://api.github.com/repos/johnhaddon/gaffer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/johnhaddon/gaffer/statuses/{sha}","languages_url":"https://api.github.com/repos/johnhaddon/gaffer/languages","stargazers_url":"https://api.github.com/repos/johnhaddon/gaffer/stargazers","contributors_url":"https://api.github.com/repos/johnhaddon/gaffer/contributors","subscribers_url":"https://api.github.com/repos/johnhaddon/gaffer/subscribers","subscription_url":"https://api.github.com/repos/johnhaddon/gaffer/subscription","commits_url":"https://api.github.com/repos/johnhaddon/gaffer/commits{/sha}","git_commits_url":"https://api.github.com/repos/johnhaddon/gaffer/git/commits{/sha}","comments_url":"https://api.github.com/repos/johnhaddon/gaffer/comments{/number}","issue_comment_url":"https://api.github.com/repos/johnhaddon/gaffer/issues/comments{/number}","contents_url":"https://api.github.com/repos/johnhaddon/gaffer/contents/{+path}","compare_url":"https://api.github.com/repos/johnhaddon/gaffer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/johnhaddon/gaffer/merges","archive_url":"https://api.github.com/repos/johnhaddon/gaffer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/johnhaddon/gaffer/downloads","issues_url":"https://api.github.com/repos/johnhaddon/gaffer/issues{/number}","pulls_url":"https://api.github.com/repos/johnhaddon/gaffer/pulls{/number}","milestones_url":"https://api.github.com/repos/johnhaddon/gaffer/milestones{/number}","notifications_url":"https://api.github.com/repos/johnhaddon/gaffer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/johnhaddon/gaffer/labels{/name}","releases_url":"https://api.github.com/repos/johnhaddon/gaffer/releases{/id}","deployments_url":"https://api.github.com/repos/johnhaddon/gaffer/deployments","created_at":"2013-03-27T00:06:40Z","updated_at":"2018-11-27T18:45:00Z","pushed_at":"2018-11-28T22:02:08Z","git_url":"git://github.com/johnhaddon/gaffer.git","ssh_url":"git@github.com:johnhaddon/gaffer.git","clone_url":"https://github.com/johnhaddon/gaffer.git","svn_url":"https://github.com/johnhaddon/gaffer","homepage":"","size":36974,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GafferHQ:master","ref":"master","sha":"8faab849b8f43752238ccf0be809f30f73d88b39","user":{"login":"GafferHQ","id":20556043,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIwNTU2MDQz","avatar_url":"https://avatars1.githubusercontent.com/u/20556043?v=4","gravatar_id":"","url":"https://api.github.com/users/GafferHQ","html_url":"https://github.com/GafferHQ","followers_url":"https://api.github.com/users/GafferHQ/followers","following_url":"https://api.github.com/users/GafferHQ/following{/other_user}","gists_url":"https://api.github.com/users/GafferHQ/gists{/gist_id}","starred_url":"https://api.github.com/users/GafferHQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GafferHQ/subscriptions","organizations_url":"https://api.github.com/users/GafferHQ/orgs","repos_url":"https://api.github.com/users/GafferHQ/repos","events_url":"https://api.github.com/users/GafferHQ/events{/privacy}","received_events_url":"https://api.github.com/users/GafferHQ/received_events","type":"Organization","site_admin":false},"repo":{"id":9043124,"node_id":"MDEwOlJlcG9zaXRvcnk5MDQzMTI0","name":"gaffer","full_name":"GafferHQ/gaffer","private":false,"owner":{"login":"GafferHQ","id":20556043,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIwNTU2MDQz","avatar_url":"https://avatars1.githubusercontent.com/u/20556043?v=4","gravatar_id":"","url":"https://api.github.com/users/GafferHQ","html_url":"https://github.com/GafferHQ","followers_url":"https://api.github.com/users/GafferHQ/followers","following_url":"https://api.github.com/users/GafferHQ/following{/other_user}","gists_url":"https://api.github.com/users/GafferHQ/gists{/gist_id}","starred_url":"https://api.github.com/users/GafferHQ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GafferHQ/subscriptions","organizations_url":"https://api.github.com/users/GafferHQ/orgs","repos_url":"https://api.github.com/users/GafferHQ/repos","events_url":"https://api.github.com/users/GafferHQ/events{/privacy}","received_events_url":"https://api.github.com/users/GafferHQ/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/GafferHQ/gaffer","description":"Gaffer is an open source application framework designed specifically for creating tools for use in visual effects production.","fork":false,"url":"https://api.github.com/repos/GafferHQ/gaffer","forks_url":"https://api.github.com/repos/GafferHQ/gaffer/forks","keys_url":"https://api.github.com/repos/GafferHQ/gaffer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GafferHQ/gaffer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GafferHQ/gaffer/teams","hooks_url":"https://api.github.com/repos/GafferHQ/gaffer/hooks","issue_events_url":"https://api.github.com/repos/GafferHQ/gaffer/issues/events{/number}","events_url":"https://api.github.com/repos/GafferHQ/gaffer/events","assignees_url":"https://api.github.com/repos/GafferHQ/gaffer/assignees{/user}","branches_url":"https://api.github.com/repos/GafferHQ/gaffer/branches{/branch}","tags_url":"https://api.github.com/repos/GafferHQ/gaffer/tags","blobs_url":"https://api.github.com/repos/GafferHQ/gaffer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GafferHQ/gaffer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GafferHQ/gaffer/git/refs{/sha}","trees_url":"https://api.github.com/repos/GafferHQ/gaffer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GafferHQ/gaffer/statuses/{sha}","languages_url":"https://api.github.com/repos/GafferHQ/gaffer/languages","stargazers_url":"https://api.github.com/repos/GafferHQ/gaffer/stargazers","contributors_url":"https://api.github.com/repos/GafferHQ/gaffer/contributors","subscribers_url":"https://api.github.com/repos/GafferHQ/gaffer/subscribers","subscription_url":"https://api.github.com/repos/GafferHQ/gaffer/subscription","commits_url":"https://api.github.com/repos/GafferHQ/gaffer/commits{/sha}","git_commits_url":"https://api.github.com/repos/GafferHQ/gaffer/git/commits{/sha}","comments_url":"https://api.github.com/repos/GafferHQ/gaffer/comments{/number}","issue_comment_url":"https://api.github.com/repos/GafferHQ/gaffer/issues/comments{/number}","contents_url":"https://api.github.com/repos/GafferHQ/gaffer/contents/{+path}","compare_url":"https://api.github.com/repos/GafferHQ/gaffer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GafferHQ/gaffer/merges","archive_url":"https://api.github.com/repos/GafferHQ/gaffer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GafferHQ/gaffer/downloads","issues_url":"https://api.github.com/repos/GafferHQ/gaffer/issues{/number}","pulls_url":"https://api.github.com/repos/GafferHQ/gaffer/pulls{/number}","milestones_url":"https://api.github.com/repos/GafferHQ/gaffer/milestones{/number}","notifications_url":"https://api.github.com/repos/GafferHQ/gaffer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GafferHQ/gaffer/labels{/name}","releases_url":"https://api.github.com/repos/GafferHQ/gaffer/releases{/id}","deployments_url":"https://api.github.com/repos/GafferHQ/gaffer/deployments","created_at":"2013-03-27T00:04:53Z","updated_at":"2018-11-27T20:46:19Z","pushed_at":"2018-11-28T22:02:11Z","git_url":"git://github.com/GafferHQ/gaffer.git","ssh_url":"git@github.com:GafferHQ/gaffer.git","clone_url":"https://github.com/GafferHQ/gaffer.git","svn_url":"https://github.com/GafferHQ/gaffer","homepage":"http://www.gafferhq.org","size":37135,"stargazers_count":415,"watchers_count":415,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":127,"mirror_url":null,"archived":false,"open_issues_count":257,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":127,"open_issues":257,"watchers":415,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GafferHQ/gaffer/pulls/2914"},"html":{"href":"https://github.com/GafferHQ/gaffer/pull/2914"},"issue":{"href":"https://api.github.com/repos/GafferHQ/gaffer/issues/2914"},"comments":{"href":"https://api.github.com/repos/GafferHQ/gaffer/issues/2914/comments"},"review_comments":{"href":"https://api.github.com/repos/GafferHQ/gaffer/pulls/2914/comments"},"review_comment":{"href":"https://api.github.com/repos/GafferHQ/gaffer/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GafferHQ/gaffer/pulls/2914/commits"},"statuses":{"href":"https://api.github.com/repos/GafferHQ/gaffer/statuses/97bca829bc53f00e85bac22cb1710f4bf0601711"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"johnhaddon"}}