{"action":"created","comment":{"url":"https://api.github.com/repos/prometheus/client_golang/pulls/comments/213891521","pull_request_review_id":150818060,"id":213891521,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMzg5MTUyMQ==","diff_hunk":"@@ -0,0 +1,167 @@\n+// Copyright 2018 The Prometheus Authors\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+package testutil\n+\n+import (\n+\t\"bytes\"\n+\t\"fmt\"\n+\t\"io\"\n+\t\"reflect\"\n+\t\"sort\"\n+\n+\t\"github.com/prometheus/common/expfmt\"\n+\n+\tdto \"github.com/prometheus/client_model/go\"\n+\n+\t\"github.com/prometheus/client_golang/prometheus\"\n+)\n+\n+// CollectAndCompare registers the provided Collector with a newly created\n+// pedantic Registry. It then does the same as GatherAndCompare, gathering the\n+// metrics from the pedantic Registry.\n+func CollectAndCompare(c prometheus.Collector, expected io.Reader, metricNames ...string) error {\n+\treg := prometheus.NewPedanticRegistry()\n+\tif err := reg.Register(c); err != nil {\n+\t\treturn fmt.Errorf(\"registering collector failed: %s\", err)\n+\t}\n+\treturn GatherAndCompare(reg, expected, metricNames...)\n+}\n+\n+// GatherAndCompare gathers all metrics from the provided Gatherer and compares\n+// it to an expected output read from the provided Reader in the Prometheus text\n+// exposition format. If any metricNames are provided, only metrics with those\n+// names are compared.\n+func GatherAndCompare(g prometheus.Gatherer, expected io.Reader, metricNames ...string) error {\n+\tmetrics, err := g.Gather()\n+\tif err != nil {\n+\t\treturn fmt.Errorf(\"gathering metrics failed: %s\", err)\n+\t}\n+\tif metricNames != nil {\n+\t\tmetrics = filterMetrics(metrics, metricNames)\n+\t}\n+\tvar tp expfmt.TextParser\n+\texpectedMetrics, err := tp.TextToMetricFamilies(expected)\n+\tif err != nil {\n+\t\treturn fmt.Errorf(\"parsing expected metrics failed: %s\", err)\n+\t}\n+\n+\tif !reflect.DeepEqual(metrics, normalizeMetricFamilies(expectedMetrics)) {\n+\t\t// Encode the gathered output to the readable text format for comparison.\n+\t\tvar buf1 bytes.Buffer\n+\t\tenc := expfmt.NewEncoder(&buf1, expfmt.FmtText)\n+\t\tfor _, mf := range metrics {\n+\t\t\tif err := enc.Encode(mf); err != nil {\n+\t\t\t\treturn fmt.Errorf(\"encoding result failed: %s\", err)\n+\t\t\t}\n+\t\t}\n+\t\t// Encode normalized expected metrics again to generate them in the same ordering\n+\t\t// the registry does to spot differences more easily.\n+\t\tvar buf2 bytes.Buffer\n+\t\tenc = expfmt.NewEncoder(&buf2, expfmt.FmtText)\n+\t\tfor _, mf := range normalizeMetricFamilies(expectedMetrics) {\n+\t\t\tif err := enc.Encode(mf); err != nil {\n+\t\t\t\treturn fmt.Errorf(\"encoding result failed: %s\", err)\n+\t\t\t}\n+\t\t}\n+\n+\t\treturn fmt.Errorf(`\n+metric output does not match expectation; want:\n+\n+%s\n+\n+got:\n+\n+%s\n+`, buf2.String(), buf1.String())\n+\t}\n+\treturn nil\n+}\n+\n+func filterMetrics(metrics []*dto.MetricFamily, names []string) []*dto.MetricFamily {\n+\tvar filtered []*dto.MetricFamily\n+\tfor _, m := range metrics {\n+\t\tdrop := true\n+\t\tfor _, name := range names {\n+\t\t\tif m.GetName() == name {\n+\t\t\t\tdrop = false\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\tif !drop {","path":"prometheus/testutil/testutil.go","position":101,"original_position":101,"commit_id":"1d2faee5cd9dbe2dc5d03c6647cb74ee28096c08","original_commit_id":"1d2faee5cd9dbe2dc5d03c6647cb74ee28096c08","user":{"login":"cbandy","id":106560,"node_id":"MDQ6VXNlcjEwNjU2MA==","avatar_url":"https://avatars0.githubusercontent.com/u/106560?v=4","gravatar_id":"","url":"https://api.github.com/users/cbandy","html_url":"https://github.com/cbandy","followers_url":"https://api.github.com/users/cbandy/followers","following_url":"https://api.github.com/users/cbandy/following{/other_user}","gists_url":"https://api.github.com/users/cbandy/gists{/gist_id}","starred_url":"https://api.github.com/users/cbandy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cbandy/subscriptions","organizations_url":"https://api.github.com/users/cbandy/orgs","repos_url":"https://api.github.com/users/cbandy/repos","events_url":"https://api.github.com/users/cbandy/events{/privacy}","received_events_url":"https://api.github.com/users/cbandy/received_events","type":"User","site_admin":false},"body":"These loops make more sense to me without any boolean var:\r\n\r\n```go\r\nif m.GetName() == name {\r\n  filtered = append(filtered, m)\r\n  break\r\n}\r\n```","created_at":"2018-08-30T03:03:30Z","updated_at":"2018-08-30T03:16:05Z","html_url":"https://github.com/prometheus/client_golang/pull/445#discussion_r213891521","pull_request_url":"https://api.github.com/repos/prometheus/client_golang/pulls/445","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/prometheus/client_golang/pulls/comments/213891521"},"html":{"href":"https://github.com/prometheus/client_golang/pull/445#discussion_r213891521"},"pull_request":{"href":"https://api.github.com/repos/prometheus/client_golang/pulls/445"}}},"pull_request":{"url":"https://api.github.com/repos/prometheus/client_golang/pulls/445","id":210282268,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEwMjgyMjY4","html_url":"https://github.com/prometheus/client_golang/pull/445","diff_url":"https://github.com/prometheus/client_golang/pull/445.diff","patch_url":"https://github.com/prometheus/client_golang/pull/445.patch","issue_url":"https://api.github.com/repos/prometheus/client_golang/issues/445","number":445,"state":"open","locked":false,"title":"Add testutil package","user":{"login":"beorn7","id":5609886,"node_id":"MDQ6VXNlcjU2MDk4ODY=","avatar_url":"https://avatars3.githubusercontent.com/u/5609886?v=4","gravatar_id":"","url":"https://api.github.com/users/beorn7","html_url":"https://github.com/beorn7","followers_url":"https://api.github.com/users/beorn7/followers","following_url":"https://api.github.com/users/beorn7/following{/other_user}","gists_url":"https://api.github.com/users/beorn7/gists{/gist_id}","starred_url":"https://api.github.com/users/beorn7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/beorn7/subscriptions","organizations_url":"https://api.github.com/users/beorn7/orgs","repos_url":"https://api.github.com/users/beorn7/repos","events_url":"https://api.github.com/users/beorn7/events{/privacy}","received_events_url":"https://api.github.com/users/beorn7/received_events","type":"User","site_admin":false},"body":"This is derived from #423. I recreated it so that it is pulling from a branch I can push to...\r\n\r\nChanges to #423 are based on the review that has already happened. I packaged it nicely in commits with messages, so you can follow along.\r\n\r\nI will add more documentation and the single-value retrieval helpers (cf. #230) in a separate repo. Same with the creation of an internal package for the duplicated code. Don't want to put too many things into this one PR.\r\n\r\n@grobie @brancz ","created_at":"2018-08-22T22:26:43Z","updated_at":"2018-08-30T03:16:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0d7eec6be86ef288f0db552eb33bdf86fe9f5a86","assignee":null,"assignees":[],"requested_reviewers":[{"login":"grobie","id":3432,"node_id":"MDQ6VXNlcjM0MzI=","avatar_url":"https://avatars3.githubusercontent.com/u/3432?v=4","gravatar_id":"","url":"https://api.github.com/users/grobie","html_url":"https://github.com/grobie","followers_url":"https://api.github.com/users/grobie/followers","following_url":"https://api.github.com/users/grobie/following{/other_user}","gists_url":"https://api.github.com/users/grobie/gists{/gist_id}","starred_url":"https://api.github.com/users/grobie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grobie/subscriptions","organizations_url":"https://api.github.com/users/grobie/orgs","repos_url":"https://api.github.com/users/grobie/repos","events_url":"https://api.github.com/users/grobie/events{/privacy}","received_events_url":"https://api.github.com/users/grobie/received_events","type":"User","site_admin":false},{"login":"brancz","id":4546722,"node_id":"MDQ6VXNlcjQ1NDY3MjI=","avatar_url":"https://avatars3.githubusercontent.com/u/4546722?v=4","gravatar_id":"","url":"https://api.github.com/users/brancz","html_url":"https://github.com/brancz","followers_url":"https://api.github.com/users/brancz/followers","following_url":"https://api.github.com/users/brancz/following{/other_user}","gists_url":"https://api.github.com/users/brancz/gists{/gist_id}","starred_url":"https://api.github.com/users/brancz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brancz/subscriptions","organizations_url":"https://api.github.com/users/brancz/orgs","repos_url":"https://api.github.com/users/brancz/repos","events_url":"https://api.github.com/users/brancz/events{/privacy}","received_events_url":"https://api.github.com/users/brancz/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/prometheus/client_golang/pulls/445/commits","review_comments_url":"https://api.github.com/repos/prometheus/client_golang/pulls/445/comments","review_comment_url":"https://api.github.com/repos/prometheus/client_golang/pulls/comments{/number}","comments_url":"https://api.github.com/repos/prometheus/client_golang/issues/445/comments","statuses_url":"https://api.github.com/repos/prometheus/client_golang/statuses/1d2faee5cd9dbe2dc5d03c6647cb74ee28096c08","head":{"label":"prometheus:beorn7/testing","ref":"beorn7/testing","sha":"1d2faee5cd9dbe2dc5d03c6647cb74ee28096c08","user":{"login":"prometheus","id":3380462,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMzODA0NjI=","avatar_url":"https://avatars3.githubusercontent.com/u/3380462?v=4","gravatar_id":"","url":"https://api.github.com/users/prometheus","html_url":"https://github.com/prometheus","followers_url":"https://api.github.com/users/prometheus/followers","following_url":"https://api.github.com/users/prometheus/following{/other_user}","gists_url":"https://api.github.com/users/prometheus/gists{/gist_id}","starred_url":"https://api.github.com/users/prometheus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prometheus/subscriptions","organizations_url":"https://api.github.com/users/prometheus/orgs","repos_url":"https://api.github.com/users/prometheus/repos","events_url":"https://api.github.com/users/prometheus/events{/privacy}","received_events_url":"https://api.github.com/users/prometheus/received_events","type":"Organization","site_admin":false},"repo":{"id":7823926,"node_id":"MDEwOlJlcG9zaXRvcnk3ODIzOTI2","name":"client_golang","full_name":"prometheus/client_golang","owner":{"login":"prometheus","id":3380462,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMzODA0NjI=","avatar_url":"https://avatars3.githubusercontent.com/u/3380462?v=4","gravatar_id":"","url":"https://api.github.com/users/prometheus","html_url":"https://github.com/prometheus","followers_url":"https://api.github.com/users/prometheus/followers","following_url":"https://api.github.com/users/prometheus/following{/other_user}","gists_url":"https://api.github.com/users/prometheus/gists{/gist_id}","starred_url":"https://api.github.com/users/prometheus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prometheus/subscriptions","organizations_url":"https://api.github.com/users/prometheus/orgs","repos_url":"https://api.github.com/users/prometheus/repos","events_url":"https://api.github.com/users/prometheus/events{/privacy}","received_events_url":"https://api.github.com/users/prometheus/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/prometheus/client_golang","description":"Prometheus instrumentation library for Go applications","fork":false,"url":"https://api.github.com/repos/prometheus/client_golang","forks_url":"https://api.github.com/repos/prometheus/client_golang/forks","keys_url":"https://api.github.com/repos/prometheus/client_golang/keys{/key_id}","collaborators_url":"https://api.github.com/repos/prometheus/client_golang/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/prometheus/client_golang/teams","hooks_url":"https://api.github.com/repos/prometheus/client_golang/hooks","issue_events_url":"https://api.github.com/repos/prometheus/client_golang/issues/events{/number}","events_url":"https://api.github.com/repos/prometheus/client_golang/events","assignees_url":"https://api.github.com/repos/prometheus/client_golang/assignees{/user}","branches_url":"https://api.github.com/repos/prometheus/client_golang/branches{/branch}","tags_url":"https://api.github.com/repos/prometheus/client_golang/tags","blobs_url":"https://api.github.com/repos/prometheus/client_golang/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/prometheus/client_golang/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/prometheus/client_golang/git/refs{/sha}","trees_url":"https://api.github.com/repos/prometheus/client_golang/git/trees{/sha}","statuses_url":"https://api.github.com/repos/prometheus/client_golang/statuses/{sha}","languages_url":"https://api.github.com/repos/prometheus/client_golang/languages","stargazers_url":"https://api.github.com/repos/prometheus/client_golang/stargazers","contributors_url":"https://api.github.com/repos/prometheus/client_golang/contributors","subscribers_url":"https://api.github.com/repos/prometheus/client_golang/subscribers","subscription_url":"https://api.github.com/repos/prometheus/client_golang/subscription","commits_url":"https://api.github.com/repos/prometheus/client_golang/commits{/sha}","git_commits_url":"https://api.github.com/repos/prometheus/client_golang/git/commits{/sha}","comments_url":"https://api.github.com/repos/prometheus/client_golang/comments{/number}","issue_comment_url":"https://api.github.com/repos/prometheus/client_golang/issues/comments{/number}","contents_url":"https://api.github.com/repos/prometheus/client_golang/contents/{+path}","compare_url":"https://api.github.com/repos/prometheus/client_golang/compare/{base}...{head}","merges_url":"https://api.github.com/repos/prometheus/client_golang/merges","archive_url":"https://api.github.com/repos/prometheus/client_golang/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/prometheus/client_golang/downloads","issues_url":"https://api.github.com/repos/prometheus/client_golang/issues{/number}","pulls_url":"https://api.github.com/repos/prometheus/client_golang/pulls{/number}","milestones_url":"https://api.github.com/repos/prometheus/client_golang/milestones{/number}","notifications_url":"https://api.github.com/repos/prometheus/client_golang/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/prometheus/client_golang/labels{/name}","releases_url":"https://api.github.com/repos/prometheus/client_golang/releases{/id}","deployments_url":"https://api.github.com/repos/prometheus/client_golang/deployments","created_at":"2013-01-25T16:32:46Z","updated_at":"2018-08-29T02:58:53Z","pushed_at":"2018-08-28T20:48:16Z","git_url":"git://github.com/prometheus/client_golang.git","ssh_url":"git@github.com:prometheus/client_golang.git","clone_url":"https://github.com/prometheus/client_golang.git","svn_url":"https://github.com/prometheus/client_golang","homepage":"","size":1405,"stargazers_count":877,"watchers_count":877,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":289,"mirror_url":null,"archived":false,"open_issues_count":28,"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":289,"open_issues":28,"watchers":877,"default_branch":"master"}},"base":{"label":"prometheus:master","ref":"master","sha":"ebce7d0078c0109cbb4de5d50a2b799920b0f0d0","user":{"login":"prometheus","id":3380462,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMzODA0NjI=","avatar_url":"https://avatars3.githubusercontent.com/u/3380462?v=4","gravatar_id":"","url":"https://api.github.com/users/prometheus","html_url":"https://github.com/prometheus","followers_url":"https://api.github.com/users/prometheus/followers","following_url":"https://api.github.com/users/prometheus/following{/other_user}","gists_url":"https://api.github.com/users/prometheus/gists{/gist_id}","starred_url":"https://api.github.com/users/prometheus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prometheus/subscriptions","organizations_url":"https://api.github.com/users/prometheus/orgs","repos_url":"https://api.github.com/users/prometheus/repos","events_url":"https://api.github.com/users/prometheus/events{/privacy}","received_events_url":"https://api.github.com/users/prometheus/received_events","type":"Organization","site_admin":false},"repo":{"id":7823926,"node_id":"MDEwOlJlcG9zaXRvcnk3ODIzOTI2","name":"client_golang","full_name":"prometheus/client_golang","owner":{"login":"prometheus","id":3380462,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMzODA0NjI=","avatar_url":"https://avatars3.githubusercontent.com/u/3380462?v=4","gravatar_id":"","url":"https://api.github.com/users/prometheus","html_url":"https://github.com/prometheus","followers_url":"https://api.github.com/users/prometheus/followers","following_url":"https://api.github.com/users/prometheus/following{/other_user}","gists_url":"https://api.github.com/users/prometheus/gists{/gist_id}","starred_url":"https://api.github.com/users/prometheus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/prometheus/subscriptions","organizations_url":"https://api.github.com/users/prometheus/orgs","repos_url":"https://api.github.com/users/prometheus/repos","events_url":"https://api.github.com/users/prometheus/events{/privacy}","received_events_url":"https://api.github.com/users/prometheus/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/prometheus/client_golang","description":"Prometheus instrumentation library for Go applications","fork":false,"url":"https://api.github.com/repos/prometheus/client_golang","forks_url":"https://api.github.com/repos/prometheus/client_golang/forks","keys_url":"https://api.github.com/repos/prometheus/client_golang/keys{/key_id}","collaborators_url":"https://api.github.com/repos/prometheus/client_golang/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/prometheus/client_golang/teams","hooks_url":"https://api.github.com/repos/prometheus/client_golang/hooks","issue_events_url":"https://api.github.com/repos/prometheus/client_golang/issues/events{/number}","events_url":"https://api.github.com/repos/prometheus/client_golang/events","assignees_url":"https://api.github.com/repos/prometheus/client_golang/assignees{/user}","branches_url":"https://api.github.com/repos/prometheus/client_golang/branches{/branch}","tags_url":"https://api.github.com/repos/prometheus/client_golang/tags","blobs_url":"https://api.github.com/repos/prometheus/client_golang/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/prometheus/client_golang/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/prometheus/client_golang/git/refs{/sha}","trees_url":"https://api.github.com/repos/prometheus/client_golang/git/trees{/sha}","statuses_url":"https://api.github.com/repos/prometheus/client_golang/statuses/{sha}","languages_url":"https://api.github.com/repos/prometheus/client_golang/languages","stargazers_url":"https://api.github.com/repos/prometheus/client_golang/stargazers","contributors_url":"https://api.github.com/repos/prometheus/client_golang/contributors","subscribers_url":"https://api.github.com/repos/prometheus/client_golang/subscribers","subscription_url":"https://api.github.com/repos/prometheus/client_golang/subscription","commits_url":"https://api.github.com/repos/prometheus/client_golang/commits{/sha}","git_commits_url":"https://api.github.com/repos/prometheus/client_golang/git/commits{/sha}","comments_url":"https://api.github.com/repos/prometheus/client_golang/comments{/number}","issue_comment_url":"https://api.github.com/repos/prometheus/client_golang/issues/comments{/number}","contents_url":"https://api.github.com/repos/prometheus/client_golang/contents/{+path}","compare_url":"https://api.github.com/repos/prometheus/client_golang/compare/{base}...{head}","merges_url":"https://api.github.com/repos/prometheus/client_golang/merges","archive_url":"https://api.github.com/repos/prometheus/client_golang/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/prometheus/client_golang/downloads","issues_url":"https://api.github.com/repos/prometheus/client_golang/issues{/number}","pulls_url":"https://api.github.com/repos/prometheus/client_golang/pulls{/number}","milestones_url":"https://api.github.com/repos/prometheus/client_golang/milestones{/number}","notifications_url":"https://api.github.com/repos/prometheus/client_golang/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/prometheus/client_golang/labels{/name}","releases_url":"https://api.github.com/repos/prometheus/client_golang/releases{/id}","deployments_url":"https://api.github.com/repos/prometheus/client_golang/deployments","created_at":"2013-01-25T16:32:46Z","updated_at":"2018-08-29T02:58:53Z","pushed_at":"2018-08-28T20:48:16Z","git_url":"git://github.com/prometheus/client_golang.git","ssh_url":"git@github.com:prometheus/client_golang.git","clone_url":"https://github.com/prometheus/client_golang.git","svn_url":"https://github.com/prometheus/client_golang","homepage":"","size":1405,"stargazers_count":877,"watchers_count":877,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":289,"mirror_url":null,"archived":false,"open_issues_count":28,"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":289,"open_issues":28,"watchers":877,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/prometheus/client_golang/pulls/445"},"html":{"href":"https://github.com/prometheus/client_golang/pull/445"},"issue":{"href":"https://api.github.com/repos/prometheus/client_golang/issues/445"},"comments":{"href":"https://api.github.com/repos/prometheus/client_golang/issues/445/comments"},"review_comments":{"href":"https://api.github.com/repos/prometheus/client_golang/pulls/445/comments"},"review_comment":{"href":"https://api.github.com/repos/prometheus/client_golang/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/prometheus/client_golang/pulls/445/commits"},"statuses":{"href":"https://api.github.com/repos/prometheus/client_golang/statuses/1d2faee5cd9dbe2dc5d03c6647cb74ee28096c08"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"cbandy"}}