From: Sascha Steinbiss <satta@debian.org>
Date: Tue, 14 Mar 2017 17:42:02 +0100
Subject: remove benchmark code

---
 benchmark/benchmark.go                     |  181 --
 benchmark/benchmark_codecgen.go            | 3170 ----------------------------
 benchmark/benchmark_easyjson.go            |  701 ------
 benchmark/benchmark_ffjson.go              | 3141 ---------------------------
 benchmark/benchmark_large_payload_test.go  |  131 --
 benchmark/benchmark_medium_payload_test.go |  339 ---
 benchmark/benchmark_small_payload_test.go  |  293 ---
 7 files changed, 7956 deletions(-)
 delete mode 100644 benchmark/benchmark.go
 delete mode 100644 benchmark/benchmark_codecgen.go
 delete mode 100644 benchmark/benchmark_easyjson.go
 delete mode 100644 benchmark/benchmark_ffjson.go
 delete mode 100644 benchmark/benchmark_large_payload_test.go
 delete mode 100644 benchmark/benchmark_medium_payload_test.go
 delete mode 100644 benchmark/benchmark_small_payload_test.go

--- a/benchmark/benchmark.go
+++ /dev/null
@@ -1,181 +0,0 @@
-package benchmark
-
-/*
-   Small paylod, http log like structure. Size: 190 bytes
-*/
-var smallFixture []byte = []byte(`{
-    "st": 1,
-    "sid": 486,
-    "tt": "active",
-    "gr": 0,
-    "uuid": "de305d54-75b4-431b-adb2-eb6b9e546014",
-    "ip": "127.0.0.1",
-    "ua": "user_agent",
-    "tz": -6,
-    "v": 1
-}`)
-
-type SmallPayload struct {
-	St   int
-	Sid  int
-	Tt   string
-	Gr   int
-	Uuid string
-	Ip   string
-	Ua   string
-	Tz   int
-	V    int
-}
-
-/*
-   Medium payload (based on Clearbit API response)
-*/
-type CBAvatar struct {
-	Url string
-}
-
-type CBGravatar struct {
-	Avatars []*CBAvatar
-}
-
-type CBGithub struct {
-	Followers int
-}
-
-type CBName struct {
-	FullName string
-}
-
-type CBPerson struct {
-	Name     *CBName
-	Github   *CBGithub
-	Gravatar *CBGravatar
-}
-
-type MediumPayload struct {
-	Person  *CBPerson
-	Company map[string]interface{}
-}
-
-// Reponse from Clearbit API. Size: 2.4kb
-var mediumFixture []byte = []byte(`{
-  "person": {
-    "id": "d50887ca-a6ce-4e59-b89f-14f0b5d03b03",
-    "name": {
-      "fullName": "Leonid Bugaev",
-      "givenName": "Leonid",
-      "familyName": "Bugaev"
-    },
-    "email": "leonsbox@gmail.com",
-    "gender": "male",
-    "location": "Saint Petersburg, Saint Petersburg, RU",
-    "geo": {
-      "city": "Saint Petersburg",
-      "state": "Saint Petersburg",
-      "country": "Russia",
-      "lat": 59.9342802,
-      "lng": 30.3350986
-    },
-    "bio": "Senior engineer at Granify.com",
-    "site": "http://flickfaver.com",
-    "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/d50887ca-a6ce-4e59-b89f-14f0b5d03b03",
-    "employment": {
-      "name": "www.latera.ru",
-      "title": "Software Engineer",
-      "domain": "gmail.com"
-    },
-    "facebook": {
-      "handle": "leonid.bugaev"
-    },
-    "github": {
-      "handle": "buger",
-      "id": 14009,
-      "avatar": "https://avatars.githubusercontent.com/u/14009?v=3",
-      "company": "Granify",
-      "blog": "http://leonsbox.com",
-      "followers": 95,
-      "following": 10
-    },
-    "twitter": {
-      "handle": "flickfaver",
-      "id": 77004410,
-      "bio": null,
-      "followers": 2,
-      "following": 1,
-      "statuses": 5,
-      "favorites": 0,
-      "location": "",
-      "site": "http://flickfaver.com",
-      "avatar": null
-    },
-    "linkedin": {
-      "handle": "in/leonidbugaev"
-    },
-    "googleplus": {
-      "handle": null
-    },
-    "angellist": {
-      "handle": "leonid-bugaev",
-      "id": 61541,
-      "bio": "Senior engineer at Granify.com",
-      "blog": "http://buger.github.com",
-      "site": "http://buger.github.com",
-      "followers": 41,
-      "avatar": "https://d1qb2nb5cznatu.cloudfront.net/users/61541-medium_jpg?1405474390"
-    },
-    "klout": {
-      "handle": null,
-      "score": null
-    },
-    "foursquare": {
-      "handle": null
-    },
-    "aboutme": {
-      "handle": "leonid.bugaev",
-      "bio": null,
-      "avatar": null
-    },
-    "gravatar": {
-      "handle": "buger",
-      "urls": [
-
-      ],
-      "avatar": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510",
-      "avatars": [
-        {
-          "url": "http://1.gravatar.com/avatar/f7c8edd577d13b8930d5522f28123510",
-          "type": "thumbnail"
-        }
-      ]
-    },
-    "fuzzy": false
-  },
-  "company": null
-}`)
-
-/*
-   Large payload, based on Discourse API. Size: 28kb
-*/
-
-type DSUser struct {
-	Username string
-}
-
-type DSTopic struct {
-	Id   int
-	Slug string
-}
-
-type DSTopicsList struct {
-	Topics        []*DSTopic
-	MoreTopicsUrl string
-}
-
-type LargePayload struct {
-	Users  []*DSUser
-	Topics *DSTopicsList
-}
-
-var largeFixture []byte = []byte(`
-    {"users":[{"id":-1,"username":"system","avatar_template":"/user_avatar/discourse.metabase.com/system/{size}/6_1.png"},{"id":89,"username":"zergot","avatar_template":"https://avatars.discourse.org/v2/letter/z/0ea827/{size}.png"},{"id":1,"username":"sameer","avatar_template":"https://avatars.discourse.org/v2/letter/s/bbce88/{size}.png"},{"id":84,"username":"HenryMirror","avatar_template":"https://avatars.discourse.org/v2/letter/h/ecd19e/{size}.png"},{"id":73,"username":"fimp","avatar_template":"https://avatars.discourse.org/v2/letter/f/ee59a6/{size}.png"},{"id":14,"username":"agilliland","avatar_template":"/user_avatar/discourse.metabase.com/agilliland/{size}/26_1.png"},{"id":87,"username":"amir","avatar_template":"https://avatars.discourse.org/v2/letter/a/c37758/{size}.png"},{"id":82,"username":"waseem","avatar_template":"https://avatars.discourse.org/v2/letter/w/9dc877/{size}.png"},{"id":78,"username":"tovenaar","avatar_template":"https://avatars.discourse.org/v2/letter/t/9de0a6/{size}.png"},{"id":74,"username":"Ben","avatar_template":"https://avatars.discourse.org/v2/letter/b/df788c/{size}.png"},{"id":71,"username":"MarkLaFay","avatar_template":"https://avatars.discourse.org/v2/letter/m/3bc359/{size}.png"},{"id":72,"username":"camsaul","avatar_template":"/user_avatar/discourse.metabase.com/camsaul/{size}/70_1.png"},{"id":53,"username":"mhjb","avatar_template":"/user_avatar/discourse.metabase.com/mhjb/{size}/54_1.png"},{"id":58,"username":"jbwiv","avatar_template":"https://avatars.discourse.org/v2/letter/j/6bbea6/{size}.png"},{"id":70,"username":"Maggs","avatar_template":"https://avatars.discourse.org/v2/letter/m/bbce88/{size}.png"},{"id":69,"username":"andrefaria","avatar_template":"/user_avatar/discourse.metabase.com/andrefaria/{size}/65_1.png"},{"id":60,"username":"bencarter78","avatar_template":"/user_avatar/discourse.metabase.com/bencarter78/{size}/59_1.png"},{"id":55,"username":"vikram","avatar_template":"https://avatars.discourse.org/v2/letter/v/e47774/{size}.png"},{"id":68,"username":"edchan77","avatar_template":"/user_avatar/discourse.metabase.com/edchan77/{size}/66_1.png"},{"id":9,"username":"karthikd","avatar_template":"https://avatars.discourse.org/v2/letter/k/cab0a1/{size}.png"},{"id":23,"username":"arthurz","avatar_template":"/user_avatar/discourse.metabase.com/arthurz/{size}/32_1.png"},{"id":3,"username":"tom","avatar_template":"/user_avatar/discourse.metabase.com/tom/{size}/21_1.png"},{"id":50,"username":"LeoNogueira","avatar_template":"/user_avatar/discourse.metabase.com/leonogueira/{size}/52_1.png"},{"id":66,"username":"ss06vi","avatar_template":"https://avatars.discourse.org/v2/letter/s/3ab097/{size}.png"},{"id":34,"username":"mattcollins","avatar_template":"/user_avatar/discourse.metabase.com/mattcollins/{size}/41_1.png"},{"id":51,"username":"krmmalik","avatar_template":"/user_avatar/discourse.metabase.com/krmmalik/{size}/53_1.png"},{"id":46,"username":"odysseas","avatar_template":"https://avatars.discourse.org/v2/letter/o/5f8ce5/{size}.png"},{"id":5,"username":"jonthewayne","avatar_template":"/user_avatar/discourse.metabase.com/jonthewayne/{size}/18_1.png"},{"id":11,"username":"anandiyer","avatar_template":"/user_avatar/discourse.metabase.com/anandiyer/{size}/23_1.png"},{"id":25,"username":"alnorth","avatar_template":"/user_avatar/discourse.metabase.com/alnorth/{size}/34_1.png"},{"id":52,"username":"j_at_svg","avatar_template":"https://avatars.discourse.org/v2/letter/j/96bed5/{size}.png"},{"id":42,"username":"styts","avatar_template":"/user_avatar/discourse.metabase.com/styts/{size}/47_1.png"}],"topics":{"can_create_topic":false,"more_topics_url":"/c/uncategorized/l/latest?page=1","draft":null,"draft_key":"new_topic","draft_sequence":null,"per_page":30,"topics":[{"id":8,"title":"Welcome to Metabase's Discussion Forum","fancy_title":"Welcome to Metabase&rsquo;s Discussion Forum","slug":"welcome-to-metabases-discussion-forum","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"/images/welcome/discourse-edit-post-animated.gif","created_at":"2015-10-17T00:14:49.526Z","last_posted_at":"2015-10-17T00:14:49.557Z","bumped":true,"bumped_at":"2015-10-21T02:32:22.486Z","unseen":false,"pinned":true,"unpinned":null,"excerpt":"Welcome to Metabase&#39;s discussion forum. This is a place to get help on installation, setting up as well as sharing tips and tricks.","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":197,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"system","category_id":1,"pinned_globally":true,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":-1}]},{"id":169,"title":"Formatting Dates","fancy_title":"Formatting Dates","slug":"formatting-dates","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2016-01-14T06:30:45.311Z","last_posted_at":"2016-01-14T06:30:45.397Z","bumped":true,"bumped_at":"2016-01-14T06:30:45.397Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":11,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"zergot","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":89}]},{"id":168,"title":"Setting for google api key","fancy_title":"Setting for google api key","slug":"setting-for-google-api-key","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2016-01-13T17:14:31.799Z","last_posted_at":"2016-01-14T06:24:03.421Z","bumped":true,"bumped_at":"2016-01-14T06:24:03.421Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":16,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"zergot","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":89}]},{"id":167,"title":"Cannot see non-US timezones on the admin","fancy_title":"Cannot see non-US timezones on the admin","slug":"cannot-see-non-us-timezones-on-the-admin","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2016-01-13T17:07:36.764Z","last_posted_at":"2016-01-13T17:07:36.831Z","bumped":true,"bumped_at":"2016-01-13T17:07:36.831Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":11,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"zergot","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":89}]},{"id":164,"title":"External (Metabase level) linkages in data schema","fancy_title":"External (Metabase level) linkages in data schema","slug":"external-metabase-level-linkages-in-data-schema","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":null,"created_at":"2016-01-11T13:51:02.286Z","last_posted_at":"2016-01-12T11:06:37.259Z","bumped":true,"bumped_at":"2016-01-12T11:06:37.259Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":32,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"zergot","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":89},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":155,"title":"Query working on \"Questions\" but not in \"Pulses\"","fancy_title":"Query working on &ldquo;Questions&rdquo; but not in &ldquo;Pulses&rdquo;","slug":"query-working-on-questions-but-not-in-pulses","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2016-01-01T14:06:10.083Z","last_posted_at":"2016-01-08T22:37:51.772Z","bumped":true,"bumped_at":"2016-01-08T22:37:51.772Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":72,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"agilliland","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":84},{"extras":null,"description":"Frequent Poster","user_id":73},{"extras":"latest","description":"Most Recent Poster","user_id":14}]},{"id":161,"title":"Pulses posted to Slack don't show question output","fancy_title":"Pulses posted to Slack don&rsquo;t show question output","slug":"pulses-posted-to-slack-dont-show-question-output","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":"/uploads/default/original/1X/9d2806517bf3598b10be135b2c58923b47ba23e7.png","created_at":"2016-01-08T22:09:58.205Z","last_posted_at":"2016-01-08T22:28:44.685Z","bumped":true,"bumped_at":"2016-01-08T22:28:44.685Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":34,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":87},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":152,"title":"Should we build Kafka connecter or Kafka plugin","fancy_title":"Should we build Kafka connecter or Kafka plugin","slug":"should-we-build-kafka-connecter-or-kafka-plugin","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":null,"created_at":"2015-12-28T20:37:23.501Z","last_posted_at":"2015-12-31T18:16:45.477Z","bumped":true,"bumped_at":"2015-12-31T18:16:45.477Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":84,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":82},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":147,"title":"Change X and Y on graph","fancy_title":"Change X and Y on graph","slug":"change-x-and-y-on-graph","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2015-12-21T17:52:46.581Z","last_posted_at":"2015-12-21T17:52:46.684Z","bumped":true,"bumped_at":"2015-12-21T18:19:13.003Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":68,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"tovenaar","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":78}]},{"id":142,"title":"Issues sending mail via office365 relay","fancy_title":"Issues sending mail via office365 relay","slug":"issues-sending-mail-via-office365-relay","posts_count":5,"reply_count":2,"highest_post_number":5,"image_url":null,"created_at":"2015-12-16T10:38:47.315Z","last_posted_at":"2015-12-21T09:26:27.167Z","bumped":true,"bumped_at":"2015-12-21T09:26:27.167Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":122,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"Ben","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":74},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":137,"title":"I see triplicates of my mongoDB collections","fancy_title":"I see triplicates of my mongoDB collections","slug":"i-see-triplicates-of-my-mongodb-collections","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2015-12-14T13:33:03.426Z","last_posted_at":"2015-12-17T18:40:05.487Z","bumped":true,"bumped_at":"2015-12-17T18:40:05.487Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":97,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"MarkLaFay","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":71},{"extras":null,"description":"Frequent Poster","user_id":14}]},{"id":140,"title":"Google Analytics plugin","fancy_title":"Google Analytics plugin","slug":"google-analytics-plugin","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2015-12-15T13:00:55.644Z","last_posted_at":"2015-12-15T13:00:55.705Z","bumped":true,"bumped_at":"2015-12-15T13:00:55.705Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":105,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"fimp","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":73}]},{"id":138,"title":"With-mongo-connection failed: bad connection details:","fancy_title":"With-mongo-connection failed: bad connection details:","slug":"with-mongo-connection-failed-bad-connection-details","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2015-12-14T17:28:11.041Z","last_posted_at":"2015-12-14T17:28:11.111Z","bumped":true,"bumped_at":"2015-12-14T17:28:11.111Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":56,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"MarkLaFay","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":71}]},{"id":133,"title":"\"We couldn't understand your question.\" when I query mongoDB","fancy_title":"&ldquo;We couldn&rsquo;t understand your question.&rdquo; when I query mongoDB","slug":"we-couldnt-understand-your-question-when-i-query-mongodb","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2015-12-11T17:38:30.576Z","last_posted_at":"2015-12-14T13:31:26.395Z","bumped":true,"bumped_at":"2015-12-14T13:31:26.395Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":107,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"MarkLaFay","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":71},{"extras":null,"description":"Frequent Poster","user_id":72}]},{"id":129,"title":"My bar charts are all thin","fancy_title":"My bar charts are all thin","slug":"my-bar-charts-are-all-thin","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":"/uploads/default/original/1X/41bcf3b2a00dc7cfaff01cb3165d35d32a85bf1d.png","created_at":"2015-12-09T22:09:56.394Z","last_posted_at":"2015-12-11T19:00:45.289Z","bumped":true,"bumped_at":"2015-12-11T19:00:45.289Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":116,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"mhjb","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":53},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":106,"title":"What is the expected return order of columns for graphing results when using raw SQL?","fancy_title":"What is the expected return order of columns for graphing results when using raw SQL?","slug":"what-is-the-expected-return-order-of-columns-for-graphing-results-when-using-raw-sql","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2015-11-24T19:07:14.561Z","last_posted_at":"2015-12-11T17:04:14.149Z","bumped":true,"bumped_at":"2015-12-11T17:04:14.149Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":153,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"jbwiv","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":58},{"extras":null,"description":"Frequent Poster","user_id":14}]},{"id":131,"title":"Set site url from admin panel","fancy_title":"Set site url from admin panel","slug":"set-site-url-from-admin-panel","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2015-12-10T06:22:46.042Z","last_posted_at":"2015-12-10T19:12:57.449Z","bumped":true,"bumped_at":"2015-12-10T19:12:57.449Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":77,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":70},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":127,"title":"Internationalization (i18n)","fancy_title":"Internationalization (i18n)","slug":"internationalization-i18n","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2015-12-08T16:55:37.397Z","last_posted_at":"2015-12-09T16:49:55.816Z","bumped":true,"bumped_at":"2015-12-09T16:49:55.816Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":85,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"agilliland","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":69},{"extras":"latest","description":"Most Recent Poster","user_id":14}]},{"id":109,"title":"Returning raw data with no filters always returns We couldn't understand your question","fancy_title":"Returning raw data with no filters always returns We couldn&rsquo;t understand your question","slug":"returning-raw-data-with-no-filters-always-returns-we-couldnt-understand-your-question","posts_count":3,"reply_count":1,"highest_post_number":3,"image_url":null,"created_at":"2015-11-25T21:35:01.315Z","last_posted_at":"2015-12-09T10:26:12.255Z","bumped":true,"bumped_at":"2015-12-09T10:26:12.255Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":133,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"bencarter78","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":60},{"extras":null,"description":"Frequent Poster","user_id":14}]},{"id":103,"title":"Support for Cassandra?","fancy_title":"Support for Cassandra?","slug":"support-for-cassandra","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":null,"created_at":"2015-11-20T06:45:31.741Z","last_posted_at":"2015-12-09T03:18:51.274Z","bumped":true,"bumped_at":"2015-12-09T03:18:51.274Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":169,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"vikram","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":55},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":128,"title":"Mongo query with Date breaks [solved: Mongo 3.0 required]","fancy_title":"Mongo query with Date breaks [solved: Mongo 3.0 required]","slug":"mongo-query-with-date-breaks-solved-mongo-3-0-required","posts_count":5,"reply_count":0,"highest_post_number":5,"image_url":null,"created_at":"2015-12-08T18:30:56.562Z","last_posted_at":"2015-12-08T21:03:02.421Z","bumped":true,"bumped_at":"2015-12-08T21:03:02.421Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":102,"like_count":1,"has_summary":false,"archetype":"regular","last_poster_username":"edchan77","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":68},{"extras":null,"description":"Frequent Poster","user_id":1}]},{"id":23,"title":"Can this connect to MS SQL Server?","fancy_title":"Can this connect to MS SQL Server?","slug":"can-this-connect-to-ms-sql-server","posts_count":7,"reply_count":1,"highest_post_number":7,"image_url":null,"created_at":"2015-10-21T18:52:37.987Z","last_posted_at":"2015-12-07T17:41:51.609Z","bumped":true,"bumped_at":"2015-12-07T17:41:51.609Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":367,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":9},{"extras":null,"description":"Frequent Poster","user_id":23},{"extras":null,"description":"Frequent Poster","user_id":3},{"extras":null,"description":"Frequent Poster","user_id":50},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":121,"title":"Cannot restart metabase in docker","fancy_title":"Cannot restart metabase in docker","slug":"cannot-restart-metabase-in-docker","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":null,"created_at":"2015-12-04T21:28:58.137Z","last_posted_at":"2015-12-04T23:02:00.488Z","bumped":true,"bumped_at":"2015-12-04T23:02:00.488Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":96,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":66},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":85,"title":"Edit Max Rows Count","fancy_title":"Edit Max Rows Count","slug":"edit-max-rows-count","posts_count":4,"reply_count":2,"highest_post_number":4,"image_url":null,"created_at":"2015-11-11T23:46:52.917Z","last_posted_at":"2015-11-24T01:01:14.569Z","bumped":true,"bumped_at":"2015-11-24T01:01:14.569Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":169,"like_count":1,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":34},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":96,"title":"Creating charts by querying more than one table at a time","fancy_title":"Creating charts by querying more than one table at a time","slug":"creating-charts-by-querying-more-than-one-table-at-a-time","posts_count":6,"reply_count":4,"highest_post_number":6,"image_url":null,"created_at":"2015-11-17T11:20:18.442Z","last_posted_at":"2015-11-21T02:12:25.995Z","bumped":true,"bumped_at":"2015-11-21T02:12:25.995Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":217,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":51},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":90,"title":"Trying to add RDS postgresql as the database fails silently","fancy_title":"Trying to add RDS postgresql as the database fails silently","slug":"trying-to-add-rds-postgresql-as-the-database-fails-silently","posts_count":4,"reply_count":2,"highest_post_number":4,"image_url":null,"created_at":"2015-11-14T23:45:02.967Z","last_posted_at":"2015-11-21T01:08:45.915Z","bumped":true,"bumped_at":"2015-11-21T01:08:45.915Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":162,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":46},{"extras":"latest","description":"Most Recent Poster, Frequent Poster","user_id":1}]},{"id":17,"title":"Deploy to Heroku isn't working","fancy_title":"Deploy to Heroku isn&rsquo;t working","slug":"deploy-to-heroku-isnt-working","posts_count":9,"reply_count":3,"highest_post_number":9,"image_url":null,"created_at":"2015-10-21T16:42:03.096Z","last_posted_at":"2015-11-20T18:34:14.044Z","bumped":true,"bumped_at":"2015-11-20T18:34:14.044Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":332,"like_count":2,"has_summary":false,"archetype":"regular","last_poster_username":"agilliland","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":5},{"extras":null,"description":"Frequent Poster","user_id":3},{"extras":null,"description":"Frequent Poster","user_id":11},{"extras":null,"description":"Frequent Poster","user_id":25},{"extras":"latest","description":"Most Recent Poster","user_id":14}]},{"id":100,"title":"Can I use DATEPART() in SQL queries?","fancy_title":"Can I use DATEPART() in SQL queries?","slug":"can-i-use-datepart-in-sql-queries","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2015-11-17T23:15:58.033Z","last_posted_at":"2015-11-18T00:19:48.763Z","bumped":true,"bumped_at":"2015-11-18T00:19:48.763Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":112,"like_count":1,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":53},{"extras":"latest","description":"Most Recent Poster","user_id":1}]},{"id":98,"title":"Feature Request: LDAP Authentication","fancy_title":"Feature Request: LDAP Authentication","slug":"feature-request-ldap-authentication","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2015-11-17T17:22:44.484Z","last_posted_at":"2015-11-17T17:22:44.577Z","bumped":true,"bumped_at":"2015-11-17T17:22:44.577Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":97,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"j_at_svg","category_id":1,"pinned_globally":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":52}]},{"id":87,"title":"Migrating from internal H2 to Postgres","fancy_title":"Migrating from internal H2 to Postgres","slug":"migrating-from-internal-h2-to-postgres","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2015-11-12T14:36:06.745Z","last_posted_at":"2015-11-12T18:05:10.796Z","bumped":true,"bumped_at":"2015-11-12T18:05:10.796Z","unseen":false,"pinned":false,"unpinned":null,"visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"views":111,"like_count":0,"has_summary":false,"archetype":"regular","last_poster_username":"sameer","category_id":1,"pinned_globally":false,"posters":[{"extras":null,"description":"Original Poster","user_id":42},{"extras":"latest","description":"Most Recent Poster","user_id":1}]}]}}
-`)
--- a/benchmark/benchmark_codecgen.go
+++ /dev/null
@@ -1,2862 +0,0 @@
-// ************************************************************
-// DO NOT EDIT.
-// THIS FILE IS AUTO-GENERATED BY codecgen.
-// ************************************************************
-
-package benchmark
-
-import (
-	"errors"
-	codec1978 "github.com/ugorji/go/codec"
-	"runtime"
-	"strconv"
-)
-
-const (
-	// ----- content types ----
-	codecSelferCcUTF86617 = 1
-	codecSelferCcRAW6617  = 255
-	// ----- value types used ----
-	codecSelferValueTypeArray6617  = 10
-	codecSelferValueTypeMap6617    = 9
-	codecSelferValueTypeString6617 = 6
-	codecSelferValueTypeInt6617    = 2
-	codecSelferValueTypeUint6617   = 3
-	codecSelferValueTypeFloat6617  = 4
-	codecSelferBitsize6617         = uint8(32 << (^uint(0) >> 63))
-)
-
-var (
-	errCodecSelferOnlyMapOrArrayEncodeToStruct6617 = errors.New(`only encoded map or array can be decoded into a struct`)
-)
-
-type codecSelfer6617 struct{}
-
-func init() {
-	if codec1978.GenVersion != 10 {
-		_, file, _, _ := runtime.Caller(0)
-		panic("codecgen version mismatch: current: 10, need " + strconv.FormatInt(int64(codec1978.GenVersion), 10) + ". Re-generate file: " + file)
-	}
-	if false {
-		var _ byte = 0 // reference the types, but skip this branch at build/run time
-	}
-}
-
-func (x *SmallPayload) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(9)
-			} else {
-				r.WriteMapStart(9)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.St))
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"St\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `St`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.St))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Sid))
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Sid\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Sid`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Sid))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Tt)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Tt))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Tt\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Tt`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Tt)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Tt))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Gr))
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Gr\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Gr`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Gr))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Uuid)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Uuid))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Uuid\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Uuid`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Uuid)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Uuid))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Ip)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Ip))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Ip\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Ip`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Ip)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Ip))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Ua)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Ua))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Ua\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Ua`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Ua)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Ua))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Tz))
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Tz\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Tz`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Tz))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.V))
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"V\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `V`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.V))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *SmallPayload) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *SmallPayload) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "St":
-			if r.TryDecodeAsNil() {
-				x.St = 0
-			} else {
-				x.St = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-			}
-		case "Sid":
-			if r.TryDecodeAsNil() {
-				x.Sid = 0
-			} else {
-				x.Sid = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-			}
-		case "Tt":
-			if r.TryDecodeAsNil() {
-				x.Tt = ""
-			} else {
-				x.Tt = (string)(r.DecodeString())
-			}
-		case "Gr":
-			if r.TryDecodeAsNil() {
-				x.Gr = 0
-			} else {
-				x.Gr = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-			}
-		case "Uuid":
-			if r.TryDecodeAsNil() {
-				x.Uuid = ""
-			} else {
-				x.Uuid = (string)(r.DecodeString())
-			}
-		case "Ip":
-			if r.TryDecodeAsNil() {
-				x.Ip = ""
-			} else {
-				x.Ip = (string)(r.DecodeString())
-			}
-		case "Ua":
-			if r.TryDecodeAsNil() {
-				x.Ua = ""
-			} else {
-				x.Ua = (string)(r.DecodeString())
-			}
-		case "Tz":
-			if r.TryDecodeAsNil() {
-				x.Tz = 0
-			} else {
-				x.Tz = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-			}
-		case "V":
-			if r.TryDecodeAsNil() {
-				x.V = 0
-			} else {
-				x.V = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *SmallPayload) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj13 int
-	var yyb13 bool
-	var yyhl13 bool = l >= 0
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.St = 0
-	} else {
-		x.St = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-	}
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Sid = 0
-	} else {
-		x.Sid = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-	}
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Tt = ""
-	} else {
-		x.Tt = (string)(r.DecodeString())
-	}
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Gr = 0
-	} else {
-		x.Gr = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-	}
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Uuid = ""
-	} else {
-		x.Uuid = (string)(r.DecodeString())
-	}
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Ip = ""
-	} else {
-		x.Ip = (string)(r.DecodeString())
-	}
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Ua = ""
-	} else {
-		x.Ua = (string)(r.DecodeString())
-	}
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Tz = 0
-	} else {
-		x.Tz = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-	}
-	yyj13++
-	if yyhl13 {
-		yyb13 = yyj13 > l
-	} else {
-		yyb13 = r.CheckBreak()
-	}
-	if yyb13 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.V = 0
-	} else {
-		x.V = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-	}
-	for {
-		yyj13++
-		if yyhl13 {
-			yyb13 = yyj13 > l
-		} else {
-			yyb13 = r.CheckBreak()
-		}
-		if yyb13 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj13-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *CBAvatar) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(1)
-			} else {
-				r.WriteMapStart(1)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Url)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Url))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Url\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Url`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Url)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Url))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *CBAvatar) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *CBAvatar) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Url":
-			if r.TryDecodeAsNil() {
-				x.Url = ""
-			} else {
-				x.Url = (string)(r.DecodeString())
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *CBAvatar) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj5 int
-	var yyb5 bool
-	var yyhl5 bool = l >= 0
-	yyj5++
-	if yyhl5 {
-		yyb5 = yyj5 > l
-	} else {
-		yyb5 = r.CheckBreak()
-	}
-	if yyb5 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Url = ""
-	} else {
-		x.Url = (string)(r.DecodeString())
-	}
-	for {
-		yyj5++
-		if yyhl5 {
-			yyb5 = yyj5 > l
-		} else {
-			yyb5 = r.CheckBreak()
-		}
-		if yyb5 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj5-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *CBGravatar) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(1)
-			} else {
-				r.WriteMapStart(1)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if x.Avatars == nil {
-					r.EncodeNil()
-				} else {
-					if false {
-					} else {
-						h.encSlicePtrtoCBAvatar(([]*CBAvatar)(x.Avatars), e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Avatars\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Avatars`)
-				}
-				r.WriteMapElemValue()
-				if x.Avatars == nil {
-					r.EncodeNil()
-				} else {
-					if false {
-					} else {
-						h.encSlicePtrtoCBAvatar(([]*CBAvatar)(x.Avatars), e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *CBGravatar) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *CBGravatar) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Avatars":
-			if r.TryDecodeAsNil() {
-				x.Avatars = nil
-			} else {
-				if false {
-				} else {
-					h.decSlicePtrtoCBAvatar((*[]*CBAvatar)(&x.Avatars), d)
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *CBGravatar) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj6 int
-	var yyb6 bool
-	var yyhl6 bool = l >= 0
-	yyj6++
-	if yyhl6 {
-		yyb6 = yyj6 > l
-	} else {
-		yyb6 = r.CheckBreak()
-	}
-	if yyb6 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Avatars = nil
-	} else {
-		if false {
-		} else {
-			h.decSlicePtrtoCBAvatar((*[]*CBAvatar)(&x.Avatars), d)
-		}
-	}
-	for {
-		yyj6++
-		if yyhl6 {
-			yyb6 = yyj6 > l
-		} else {
-			yyb6 = r.CheckBreak()
-		}
-		if yyb6 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj6-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *CBGithub) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(1)
-			} else {
-				r.WriteMapStart(1)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Followers))
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Followers\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Followers`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Followers))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *CBGithub) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *CBGithub) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Followers":
-			if r.TryDecodeAsNil() {
-				x.Followers = 0
-			} else {
-				x.Followers = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *CBGithub) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj5 int
-	var yyb5 bool
-	var yyhl5 bool = l >= 0
-	yyj5++
-	if yyhl5 {
-		yyb5 = yyj5 > l
-	} else {
-		yyb5 = r.CheckBreak()
-	}
-	if yyb5 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Followers = 0
-	} else {
-		x.Followers = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-	}
-	for {
-		yyj5++
-		if yyhl5 {
-			yyb5 = yyj5 > l
-		} else {
-			yyb5 = r.CheckBreak()
-		}
-		if yyb5 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj5-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *CBName) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(1)
-			} else {
-				r.WriteMapStart(1)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.FullName)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.FullName))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"FullName\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `FullName`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.FullName)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.FullName))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *CBName) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *CBName) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "FullName":
-			if r.TryDecodeAsNil() {
-				x.FullName = ""
-			} else {
-				x.FullName = (string)(r.DecodeString())
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *CBName) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj5 int
-	var yyb5 bool
-	var yyhl5 bool = l >= 0
-	yyj5++
-	if yyhl5 {
-		yyb5 = yyj5 > l
-	} else {
-		yyb5 = r.CheckBreak()
-	}
-	if yyb5 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.FullName = ""
-	} else {
-		x.FullName = (string)(r.DecodeString())
-	}
-	for {
-		yyj5++
-		if yyhl5 {
-			yyb5 = yyj5 > l
-		} else {
-			yyb5 = r.CheckBreak()
-		}
-		if yyb5 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj5-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *CBPerson) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(3)
-			} else {
-				r.WriteMapStart(3)
-			}
-			var yyn3 bool
-			if x.Name == nil {
-				yyn3 = true
-				goto LABEL3
-			}
-		LABEL3:
-			if yyr2 || yy2arr2 {
-				if yyn3 {
-					r.WriteArrayElem()
-					r.EncodeNil()
-				} else {
-					r.WriteArrayElem()
-					if x.Name == nil {
-						r.EncodeNil()
-					} else {
-						x.Name.CodecEncodeSelf(e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Name\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Name`)
-				}
-				r.WriteMapElemValue()
-				if yyn3 {
-					r.EncodeNil()
-				} else {
-					if x.Name == nil {
-						r.EncodeNil()
-					} else {
-						x.Name.CodecEncodeSelf(e)
-					}
-				}
-			}
-			var yyn6 bool
-			if x.Github == nil {
-				yyn6 = true
-				goto LABEL6
-			}
-		LABEL6:
-			if yyr2 || yy2arr2 {
-				if yyn6 {
-					r.WriteArrayElem()
-					r.EncodeNil()
-				} else {
-					r.WriteArrayElem()
-					if x.Github == nil {
-						r.EncodeNil()
-					} else {
-						x.Github.CodecEncodeSelf(e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Github\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Github`)
-				}
-				r.WriteMapElemValue()
-				if yyn6 {
-					r.EncodeNil()
-				} else {
-					if x.Github == nil {
-						r.EncodeNil()
-					} else {
-						x.Github.CodecEncodeSelf(e)
-					}
-				}
-			}
-			var yyn9 bool
-			if x.Gravatar == nil {
-				yyn9 = true
-				goto LABEL9
-			}
-		LABEL9:
-			if yyr2 || yy2arr2 {
-				if yyn9 {
-					r.WriteArrayElem()
-					r.EncodeNil()
-				} else {
-					r.WriteArrayElem()
-					if x.Gravatar == nil {
-						r.EncodeNil()
-					} else {
-						x.Gravatar.CodecEncodeSelf(e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Gravatar\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Gravatar`)
-				}
-				r.WriteMapElemValue()
-				if yyn9 {
-					r.EncodeNil()
-				} else {
-					if x.Gravatar == nil {
-						r.EncodeNil()
-					} else {
-						x.Gravatar.CodecEncodeSelf(e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *CBPerson) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *CBPerson) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Name":
-			if r.TryDecodeAsNil() {
-				if true && x.Name != nil {
-					x.Name = nil
-				}
-			} else {
-				if x.Name == nil {
-					x.Name = new(CBName)
-				}
-
-				x.Name.CodecDecodeSelf(d)
-			}
-		case "Github":
-			if r.TryDecodeAsNil() {
-				if true && x.Github != nil {
-					x.Github = nil
-				}
-			} else {
-				if x.Github == nil {
-					x.Github = new(CBGithub)
-				}
-
-				x.Github.CodecDecodeSelf(d)
-			}
-		case "Gravatar":
-			if r.TryDecodeAsNil() {
-				if true && x.Gravatar != nil {
-					x.Gravatar = nil
-				}
-			} else {
-				if x.Gravatar == nil {
-					x.Gravatar = new(CBGravatar)
-				}
-
-				x.Gravatar.CodecDecodeSelf(d)
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *CBPerson) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj7 int
-	var yyb7 bool
-	var yyhl7 bool = l >= 0
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		if true && x.Name != nil {
-			x.Name = nil
-		}
-	} else {
-		if x.Name == nil {
-			x.Name = new(CBName)
-		}
-
-		x.Name.CodecDecodeSelf(d)
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		if true && x.Github != nil {
-			x.Github = nil
-		}
-	} else {
-		if x.Github == nil {
-			x.Github = new(CBGithub)
-		}
-
-		x.Github.CodecDecodeSelf(d)
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		if true && x.Gravatar != nil {
-			x.Gravatar = nil
-		}
-	} else {
-		if x.Gravatar == nil {
-			x.Gravatar = new(CBGravatar)
-		}
-
-		x.Gravatar.CodecDecodeSelf(d)
-	}
-	for {
-		yyj7++
-		if yyhl7 {
-			yyb7 = yyj7 > l
-		} else {
-			yyb7 = r.CheckBreak()
-		}
-		if yyb7 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj7-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *MediumPayload) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(2)
-			} else {
-				r.WriteMapStart(2)
-			}
-			var yyn3 bool
-			if x.Person == nil {
-				yyn3 = true
-				goto LABEL3
-			}
-		LABEL3:
-			if yyr2 || yy2arr2 {
-				if yyn3 {
-					r.WriteArrayElem()
-					r.EncodeNil()
-				} else {
-					r.WriteArrayElem()
-					if x.Person == nil {
-						r.EncodeNil()
-					} else {
-						x.Person.CodecEncodeSelf(e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Person\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Person`)
-				}
-				r.WriteMapElemValue()
-				if yyn3 {
-					r.EncodeNil()
-				} else {
-					if x.Person == nil {
-						r.EncodeNil()
-					} else {
-						x.Person.CodecEncodeSelf(e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if x.Company == nil {
-					r.EncodeNil()
-				} else {
-					if false {
-					} else {
-						z.F.EncMapStringIntfV(x.Company, e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Company\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Company`)
-				}
-				r.WriteMapElemValue()
-				if x.Company == nil {
-					r.EncodeNil()
-				} else {
-					if false {
-					} else {
-						z.F.EncMapStringIntfV(x.Company, e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *MediumPayload) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *MediumPayload) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Person":
-			if r.TryDecodeAsNil() {
-				if true && x.Person != nil {
-					x.Person = nil
-				}
-			} else {
-				if x.Person == nil {
-					x.Person = new(CBPerson)
-				}
-
-				x.Person.CodecDecodeSelf(d)
-			}
-		case "Company":
-			if r.TryDecodeAsNil() {
-				x.Company = nil
-			} else {
-				if false {
-				} else {
-					z.F.DecMapStringIntfX(&x.Company, d)
-				}
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *MediumPayload) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj7 int
-	var yyb7 bool
-	var yyhl7 bool = l >= 0
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		if true && x.Person != nil {
-			x.Person = nil
-		}
-	} else {
-		if x.Person == nil {
-			x.Person = new(CBPerson)
-		}
-
-		x.Person.CodecDecodeSelf(d)
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Company = nil
-	} else {
-		if false {
-		} else {
-			z.F.DecMapStringIntfX(&x.Company, d)
-		}
-	}
-	for {
-		yyj7++
-		if yyhl7 {
-			yyb7 = yyj7 > l
-		} else {
-			yyb7 = r.CheckBreak()
-		}
-		if yyb7 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj7-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *DSUser) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(1)
-			} else {
-				r.WriteMapStart(1)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Username)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Username))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Username\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Username`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Username)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Username))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *DSUser) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *DSUser) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Username":
-			if r.TryDecodeAsNil() {
-				x.Username = ""
-			} else {
-				x.Username = (string)(r.DecodeString())
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *DSUser) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj5 int
-	var yyb5 bool
-	var yyhl5 bool = l >= 0
-	yyj5++
-	if yyhl5 {
-		yyb5 = yyj5 > l
-	} else {
-		yyb5 = r.CheckBreak()
-	}
-	if yyb5 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Username = ""
-	} else {
-		x.Username = (string)(r.DecodeString())
-	}
-	for {
-		yyj5++
-		if yyhl5 {
-			yyb5 = yyj5 > l
-		} else {
-			yyb5 = r.CheckBreak()
-		}
-		if yyb5 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj5-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *DSTopic) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(2)
-			} else {
-				r.WriteMapStart(2)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Id))
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Id\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Id`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					r.EncodeInt(int64(x.Id))
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Slug)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Slug))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Slug\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Slug`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.Slug)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.Slug))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *DSTopic) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *DSTopic) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Id":
-			if r.TryDecodeAsNil() {
-				x.Id = 0
-			} else {
-				x.Id = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-			}
-		case "Slug":
-			if r.TryDecodeAsNil() {
-				x.Slug = ""
-			} else {
-				x.Slug = (string)(r.DecodeString())
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *DSTopic) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj6 int
-	var yyb6 bool
-	var yyhl6 bool = l >= 0
-	yyj6++
-	if yyhl6 {
-		yyb6 = yyj6 > l
-	} else {
-		yyb6 = r.CheckBreak()
-	}
-	if yyb6 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Id = 0
-	} else {
-		x.Id = (int)(z.C.IntV(r.DecodeInt64(), codecSelferBitsize6617))
-	}
-	yyj6++
-	if yyhl6 {
-		yyb6 = yyj6 > l
-	} else {
-		yyb6 = r.CheckBreak()
-	}
-	if yyb6 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Slug = ""
-	} else {
-		x.Slug = (string)(r.DecodeString())
-	}
-	for {
-		yyj6++
-		if yyhl6 {
-			yyb6 = yyj6 > l
-		} else {
-			yyb6 = r.CheckBreak()
-		}
-		if yyb6 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj6-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *DSTopicsList) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(2)
-			} else {
-				r.WriteMapStart(2)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if x.Topics == nil {
-					r.EncodeNil()
-				} else {
-					if false {
-					} else {
-						h.encSlicePtrtoDSTopic(([]*DSTopic)(x.Topics), e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Topics\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Topics`)
-				}
-				r.WriteMapElemValue()
-				if x.Topics == nil {
-					r.EncodeNil()
-				} else {
-					if false {
-					} else {
-						h.encSlicePtrtoDSTopic(([]*DSTopic)(x.Topics), e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.MoreTopicsUrl)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.MoreTopicsUrl))
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"MoreTopicsUrl\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `MoreTopicsUrl`)
-				}
-				r.WriteMapElemValue()
-				if false {
-				} else {
-					if z.EncBasicHandle().StringToRaw {
-						r.EncodeStringBytesRaw(z.BytesView(string(x.MoreTopicsUrl)))
-					} else {
-						r.EncodeStringEnc(codecSelferCcUTF86617, string(x.MoreTopicsUrl))
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *DSTopicsList) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *DSTopicsList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Topics":
-			if r.TryDecodeAsNil() {
-				x.Topics = nil
-			} else {
-				if false {
-				} else {
-					h.decSlicePtrtoDSTopic((*[]*DSTopic)(&x.Topics), d)
-				}
-			}
-		case "MoreTopicsUrl":
-			if r.TryDecodeAsNil() {
-				x.MoreTopicsUrl = ""
-			} else {
-				x.MoreTopicsUrl = (string)(r.DecodeString())
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *DSTopicsList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj7 int
-	var yyb7 bool
-	var yyhl7 bool = l >= 0
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Topics = nil
-	} else {
-		if false {
-		} else {
-			h.decSlicePtrtoDSTopic((*[]*DSTopic)(&x.Topics), d)
-		}
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.MoreTopicsUrl = ""
-	} else {
-		x.MoreTopicsUrl = (string)(r.DecodeString())
-	}
-	for {
-		yyj7++
-		if yyhl7 {
-			yyb7 = yyj7 > l
-		} else {
-			yyb7 = r.CheckBreak()
-		}
-		if yyb7 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj7-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x *LargePayload) CodecEncodeSelf(e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	if x == nil {
-		r.EncodeNil()
-	} else {
-		if false {
-		} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-			z.EncExtension(x, yyxt1)
-		} else if !z.EncBinary() && z.IsJSONHandle() {
-			z.EncJSONMarshal(x)
-		} else {
-			yysep2 := !z.EncBinary()
-			yy2arr2 := z.EncBasicHandle().StructToArray
-			_, _ = yysep2, yy2arr2
-			const yyr2 bool = false // struct tag has 'toArray'
-			if yyr2 || yy2arr2 {
-				r.WriteArrayStart(2)
-			} else {
-				r.WriteMapStart(2)
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayElem()
-				if x.Users == nil {
-					r.EncodeNil()
-				} else {
-					if false {
-					} else {
-						h.encSlicePtrtoDSUser(([]*DSUser)(x.Users), e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Users\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Users`)
-				}
-				r.WriteMapElemValue()
-				if x.Users == nil {
-					r.EncodeNil()
-				} else {
-					if false {
-					} else {
-						h.encSlicePtrtoDSUser(([]*DSUser)(x.Users), e)
-					}
-				}
-			}
-			var yyn6 bool
-			if x.Topics == nil {
-				yyn6 = true
-				goto LABEL6
-			}
-		LABEL6:
-			if yyr2 || yy2arr2 {
-				if yyn6 {
-					r.WriteArrayElem()
-					r.EncodeNil()
-				} else {
-					r.WriteArrayElem()
-					if x.Topics == nil {
-						r.EncodeNil()
-					} else {
-						x.Topics.CodecEncodeSelf(e)
-					}
-				}
-			} else {
-				r.WriteMapElemKey()
-				if z.IsJSONHandle() {
-					z.WriteStr("\"Topics\"")
-				} else {
-					r.EncodeStringEnc(codecSelferCcUTF86617, `Topics`)
-				}
-				r.WriteMapElemValue()
-				if yyn6 {
-					r.EncodeNil()
-				} else {
-					if x.Topics == nil {
-						r.EncodeNil()
-					} else {
-						x.Topics.CodecEncodeSelf(e)
-					}
-				}
-			}
-			if yyr2 || yy2arr2 {
-				r.WriteArrayEnd()
-			} else {
-				r.WriteMapEnd()
-			}
-		}
-	}
-}
-
-func (x *LargePayload) CodecDecodeSelf(d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	if false {
-	} else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil {
-		z.DecExtension(x, yyxt1)
-	} else if !z.DecBinary() && z.IsJSONHandle() {
-		z.DecJSONUnmarshal(x)
-	} else {
-		yyct2 := r.ContainerType()
-		if yyct2 == codecSelferValueTypeMap6617 {
-			yyl2 := r.ReadMapStart()
-			if yyl2 == 0 {
-				r.ReadMapEnd()
-			} else {
-				x.codecDecodeSelfFromMap(yyl2, d)
-			}
-		} else if yyct2 == codecSelferValueTypeArray6617 {
-			yyl2 := r.ReadArrayStart()
-			if yyl2 == 0 {
-				r.ReadArrayEnd()
-			} else {
-				x.codecDecodeSelfFromArray(yyl2, d)
-			}
-		} else {
-			panic(errCodecSelferOnlyMapOrArrayEncodeToStruct6617)
-		}
-	}
-}
-
-func (x *LargePayload) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyhl3 bool = l >= 0
-	for yyj3 := 0; ; yyj3++ {
-		if yyhl3 {
-			if yyj3 >= l {
-				break
-			}
-		} else {
-			if r.CheckBreak() {
-				break
-			}
-		}
-		r.ReadMapElemKey()
-		yys3 := z.StringView(r.DecodeStringAsBytes())
-		r.ReadMapElemValue()
-		switch yys3 {
-		case "Users":
-			if r.TryDecodeAsNil() {
-				x.Users = nil
-			} else {
-				if false {
-				} else {
-					h.decSlicePtrtoDSUser((*[]*DSUser)(&x.Users), d)
-				}
-			}
-		case "Topics":
-			if r.TryDecodeAsNil() {
-				if true && x.Topics != nil {
-					x.Topics = nil
-				}
-			} else {
-				if x.Topics == nil {
-					x.Topics = new(DSTopicsList)
-				}
-
-				x.Topics.CodecDecodeSelf(d)
-			}
-		default:
-			z.DecStructFieldNotFound(-1, yys3)
-		} // end switch yys3
-	} // end for yyj3
-	r.ReadMapEnd()
-}
-
-func (x *LargePayload) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-	var yyj7 int
-	var yyb7 bool
-	var yyhl7 bool = l >= 0
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		x.Users = nil
-	} else {
-		if false {
-		} else {
-			h.decSlicePtrtoDSUser((*[]*DSUser)(&x.Users), d)
-		}
-	}
-	yyj7++
-	if yyhl7 {
-		yyb7 = yyj7 > l
-	} else {
-		yyb7 = r.CheckBreak()
-	}
-	if yyb7 {
-		r.ReadArrayEnd()
-		return
-	}
-	r.ReadArrayElem()
-	if r.TryDecodeAsNil() {
-		if true && x.Topics != nil {
-			x.Topics = nil
-		}
-	} else {
-		if x.Topics == nil {
-			x.Topics = new(DSTopicsList)
-		}
-
-		x.Topics.CodecDecodeSelf(d)
-	}
-	for {
-		yyj7++
-		if yyhl7 {
-			yyb7 = yyj7 > l
-		} else {
-			yyb7 = r.CheckBreak()
-		}
-		if yyb7 {
-			break
-		}
-		r.ReadArrayElem()
-		z.DecStructFieldNotFound(yyj7-1, "")
-	}
-	r.ReadArrayEnd()
-}
-
-func (x codecSelfer6617) encSlicePtrtoCBAvatar(v []*CBAvatar, e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	r.WriteArrayStart(len(v))
-	for _, yyv1 := range v {
-		r.WriteArrayElem()
-		if yyv1 == nil {
-			r.EncodeNil()
-		} else {
-			yyv1.CodecEncodeSelf(e)
-		}
-	}
-	r.WriteArrayEnd()
-}
-
-func (x codecSelfer6617) decSlicePtrtoCBAvatar(v *[]*CBAvatar, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-
-	yyv1 := *v
-	yyh1, yyl1 := z.DecSliceHelperStart()
-	var yyc1 bool
-	_ = yyc1
-	if yyl1 == 0 {
-		if yyv1 == nil {
-			yyv1 = []*CBAvatar{}
-			yyc1 = true
-		} else if len(yyv1) != 0 {
-			yyv1 = yyv1[:0]
-			yyc1 = true
-		}
-	} else {
-		yyhl1 := yyl1 > 0
-		var yyrl1 int
-		_ = yyrl1
-		if yyhl1 {
-			if yyl1 > cap(yyv1) {
-				yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-				if yyrl1 <= cap(yyv1) {
-					yyv1 = yyv1[:yyrl1]
-				} else {
-					yyv1 = make([]*CBAvatar, yyrl1)
-				}
-				yyc1 = true
-			} else if yyl1 != len(yyv1) {
-				yyv1 = yyv1[:yyl1]
-				yyc1 = true
-			}
-		}
-		var yyj1 int
-		// var yydn1 bool
-		for yyj1 = 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || r.CheckBreak()); yyj1++ { // bounds-check-elimination
-			if yyj1 == 0 && yyv1 == nil {
-				if yyhl1 {
-					yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-				} else {
-					yyrl1 = 8
-				}
-				yyv1 = make([]*CBAvatar, yyrl1)
-				yyc1 = true
-			}
-			yyh1.ElemContainerState(yyj1)
-
-			var yydb1 bool
-			if yyj1 >= len(yyv1) {
-				yyv1 = append(yyv1, nil)
-				yyc1 = true
-
-			}
-			if yydb1 {
-				z.DecSwallow()
-			} else {
-				if r.TryDecodeAsNil() {
-					yyv1[yyj1] = nil
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(CBAvatar)
-					}
-					yyv1[yyj1].CodecDecodeSelf(d)
-				}
-
-			}
-
-		}
-		if yyj1 < len(yyv1) {
-			yyv1 = yyv1[:yyj1]
-			yyc1 = true
-		} else if yyj1 == 0 && yyv1 == nil {
-			yyv1 = make([]*CBAvatar, 0)
-			yyc1 = true
-		}
-	}
-	yyh1.End()
-	if yyc1 {
-		*v = yyv1
-	}
-}
-
-func (x codecSelfer6617) encSlicePtrtoDSTopic(v []*DSTopic, e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	r.WriteArrayStart(len(v))
-	for _, yyv1 := range v {
-		r.WriteArrayElem()
-		if yyv1 == nil {
-			r.EncodeNil()
-		} else {
-			yyv1.CodecEncodeSelf(e)
-		}
-	}
-	r.WriteArrayEnd()
-}
-
-func (x codecSelfer6617) decSlicePtrtoDSTopic(v *[]*DSTopic, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-
-	yyv1 := *v
-	yyh1, yyl1 := z.DecSliceHelperStart()
-	var yyc1 bool
-	_ = yyc1
-	if yyl1 == 0 {
-		if yyv1 == nil {
-			yyv1 = []*DSTopic{}
-			yyc1 = true
-		} else if len(yyv1) != 0 {
-			yyv1 = yyv1[:0]
-			yyc1 = true
-		}
-	} else {
-		yyhl1 := yyl1 > 0
-		var yyrl1 int
-		_ = yyrl1
-		if yyhl1 {
-			if yyl1 > cap(yyv1) {
-				yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-				if yyrl1 <= cap(yyv1) {
-					yyv1 = yyv1[:yyrl1]
-				} else {
-					yyv1 = make([]*DSTopic, yyrl1)
-				}
-				yyc1 = true
-			} else if yyl1 != len(yyv1) {
-				yyv1 = yyv1[:yyl1]
-				yyc1 = true
-			}
-		}
-		var yyj1 int
-		// var yydn1 bool
-		for yyj1 = 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || r.CheckBreak()); yyj1++ { // bounds-check-elimination
-			if yyj1 == 0 && yyv1 == nil {
-				if yyhl1 {
-					yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-				} else {
-					yyrl1 = 8
-				}
-				yyv1 = make([]*DSTopic, yyrl1)
-				yyc1 = true
-			}
-			yyh1.ElemContainerState(yyj1)
-
-			var yydb1 bool
-			if yyj1 >= len(yyv1) {
-				yyv1 = append(yyv1, nil)
-				yyc1 = true
-
-			}
-			if yydb1 {
-				z.DecSwallow()
-			} else {
-				if r.TryDecodeAsNil() {
-					yyv1[yyj1] = nil
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(DSTopic)
-					}
-					yyv1[yyj1].CodecDecodeSelf(d)
-				}
-
-			}
-
-		}
-		if yyj1 < len(yyv1) {
-			yyv1 = yyv1[:yyj1]
-			yyc1 = true
-		} else if yyj1 == 0 && yyv1 == nil {
-			yyv1 = make([]*DSTopic, 0)
-			yyc1 = true
-		}
-	}
-	yyh1.End()
-	if yyc1 {
-		*v = yyv1
-	}
-}
-
-func (x codecSelfer6617) encSlicePtrtoDSUser(v []*DSUser, e *codec1978.Encoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperEncoder(e)
-	_, _, _ = h, z, r
-	r.WriteArrayStart(len(v))
-	for _, yyv1 := range v {
-		r.WriteArrayElem()
-		if yyv1 == nil {
-			r.EncodeNil()
-		} else {
-			yyv1.CodecEncodeSelf(e)
-		}
-	}
-	r.WriteArrayEnd()
-}
-
-func (x codecSelfer6617) decSlicePtrtoDSUser(v *[]*DSUser, d *codec1978.Decoder) {
-	var h codecSelfer6617
-	z, r := codec1978.GenHelperDecoder(d)
-	_, _, _ = h, z, r
-
-	yyv1 := *v
-	yyh1, yyl1 := z.DecSliceHelperStart()
-	var yyc1 bool
-	_ = yyc1
-	if yyl1 == 0 {
-		if yyv1 == nil {
-			yyv1 = []*DSUser{}
-			yyc1 = true
-		} else if len(yyv1) != 0 {
-			yyv1 = yyv1[:0]
-			yyc1 = true
-		}
-	} else {
-		yyhl1 := yyl1 > 0
-		var yyrl1 int
-		_ = yyrl1
-		if yyhl1 {
-			if yyl1 > cap(yyv1) {
-				yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-				if yyrl1 <= cap(yyv1) {
-					yyv1 = yyv1[:yyrl1]
-				} else {
-					yyv1 = make([]*DSUser, yyrl1)
-				}
-				yyc1 = true
-			} else if yyl1 != len(yyv1) {
-				yyv1 = yyv1[:yyl1]
-				yyc1 = true
-			}
-		}
-		var yyj1 int
-		// var yydn1 bool
-		for yyj1 = 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || r.CheckBreak()); yyj1++ { // bounds-check-elimination
-			if yyj1 == 0 && yyv1 == nil {
-				if yyhl1 {
-					yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8)
-				} else {
-					yyrl1 = 8
-				}
-				yyv1 = make([]*DSUser, yyrl1)
-				yyc1 = true
-			}
-			yyh1.ElemContainerState(yyj1)
-
-			var yydb1 bool
-			if yyj1 >= len(yyv1) {
-				yyv1 = append(yyv1, nil)
-				yyc1 = true
-
-			}
-			if yydb1 {
-				z.DecSwallow()
-			} else {
-				if r.TryDecodeAsNil() {
-					yyv1[yyj1] = nil
-				} else {
-					if yyv1[yyj1] == nil {
-						yyv1[yyj1] = new(DSUser)
-					}
-					yyv1[yyj1].CodecDecodeSelf(d)
-				}
-
-			}
-
-		}
-		if yyj1 < len(yyv1) {
-			yyv1 = yyv1[:yyj1]
-			yyc1 = true
-		} else if yyj1 == 0 && yyv1 == nil {
-			yyv1 = make([]*DSUser, 0)
-			yyc1 = true
-		}
-	}
-	yyh1.End()
-	if yyc1 {
-		*v = yyv1
-	}
-}
--- a/benchmark/benchmark_easyjson.go
+++ /dev/null
@@ -1,701 +0,0 @@
-package benchmark
-
-import (
-	json "encoding/json"
-	jlexer "github.com/mailru/easyjson/jlexer"
-	jwriter "github.com/mailru/easyjson/jwriter"
-)
-
-var _ = json.RawMessage{} // suppress unused package warning
-
-func easyjson_decode_github_com_buger_jsonparser_benchmark_LargePayload(in *jlexer.Lexer, out *LargePayload) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "users":
-			in.Delim('[')
-			if !in.IsDelim(']') {
-				out.Users = make([]*DSUser, 0, 8)
-			} else {
-				out.Users = nil
-			}
-			for !in.IsDelim(']') {
-				var v1 *DSUser
-				if in.IsNull() {
-					in.Skip()
-					v1 = nil
-				} else {
-					v1 = new(DSUser)
-					(*v1).UnmarshalEasyJSON(in)
-				}
-				out.Users = append(out.Users, v1)
-				in.WantComma()
-			}
-			in.Delim(']')
-		case "topics":
-			if in.IsNull() {
-				in.Skip()
-				out.Topics = nil
-			} else {
-				out.Topics = new(DSTopicsList)
-				(*out.Topics).UnmarshalEasyJSON(in)
-			}
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_LargePayload(out *jwriter.Writer, in *LargePayload) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"users\":")
-	out.RawByte('[')
-	for v2, v3 := range in.Users {
-		if v2 > 0 {
-			out.RawByte(',')
-		}
-		if v3 == nil {
-			out.RawString("null")
-		} else {
-			(*v3).MarshalEasyJSON(out)
-		}
-	}
-	out.RawByte(']')
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"topics\":")
-	if in.Topics == nil {
-		out.RawString("null")
-	} else {
-		(*in.Topics).MarshalEasyJSON(out)
-	}
-	out.RawByte('}')
-}
-func (v *LargePayload) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_LargePayload(w, v)
-}
-func (v *LargePayload) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_LargePayload(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_DSTopicsList(in *jlexer.Lexer, out *DSTopicsList) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "topics":
-			in.Delim('[')
-			if !in.IsDelim(']') {
-				out.Topics = make([]*DSTopic, 0, 8)
-			} else {
-				out.Topics = nil
-			}
-			for !in.IsDelim(']') {
-				var v4 *DSTopic
-				if in.IsNull() {
-					in.Skip()
-					v4 = nil
-				} else {
-					v4 = new(DSTopic)
-					(*v4).UnmarshalEasyJSON(in)
-				}
-				out.Topics = append(out.Topics, v4)
-				in.WantComma()
-			}
-			in.Delim(']')
-		case "more_topics_url":
-			out.MoreTopicsUrl = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_DSTopicsList(out *jwriter.Writer, in *DSTopicsList) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"topics\":")
-	out.RawByte('[')
-	for v5, v6 := range in.Topics {
-		if v5 > 0 {
-			out.RawByte(',')
-		}
-		if v6 == nil {
-			out.RawString("null")
-		} else {
-			(*v6).MarshalEasyJSON(out)
-		}
-	}
-	out.RawByte(']')
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"more_topics_url\":")
-	out.String(in.MoreTopicsUrl)
-	out.RawByte('}')
-}
-func (v *DSTopicsList) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_DSTopicsList(w, v)
-}
-func (v *DSTopicsList) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_DSTopicsList(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_DSTopic(in *jlexer.Lexer, out *DSTopic) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "id":
-			out.Id = in.Int()
-		case "slug":
-			out.Slug = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_DSTopic(out *jwriter.Writer, in *DSTopic) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"id\":")
-	out.Int(in.Id)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"slug\":")
-	out.String(in.Slug)
-	out.RawByte('}')
-}
-func (v *DSTopic) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_DSTopic(w, v)
-}
-func (v *DSTopic) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_DSTopic(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_DSUser(in *jlexer.Lexer, out *DSUser) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "username":
-			out.Username = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_DSUser(out *jwriter.Writer, in *DSUser) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"username\":")
-	out.String(in.Username)
-	out.RawByte('}')
-}
-func (v *DSUser) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_DSUser(w, v)
-}
-func (v *DSUser) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_DSUser(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_MediumPayload(in *jlexer.Lexer, out *MediumPayload) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "person":
-			if in.IsNull() {
-				in.Skip()
-				out.Person = nil
-			} else {
-				out.Person = new(CBPerson)
-				(*out.Person).UnmarshalEasyJSON(in)
-			}
-		case "company":
-			in.Delim('{')
-			if !in.IsDelim('}') {
-				out.Company = make(map[string]interface{})
-			} else {
-				out.Company = nil
-			}
-			for !in.IsDelim('}') {
-				key := in.String()
-				in.WantColon()
-				var v7 interface{}
-				v7 = in.Interface()
-				(out.Company)[key] = v7
-				in.WantComma()
-			}
-			in.Delim('}')
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_MediumPayload(out *jwriter.Writer, in *MediumPayload) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"person\":")
-	if in.Person == nil {
-		out.RawString("null")
-	} else {
-		(*in.Person).MarshalEasyJSON(out)
-	}
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"company\":")
-	out.RawByte('{')
-	v8_first := true
-	for v8_name, v8_value := range in.Company {
-		if !v8_first {
-			out.RawByte(',')
-		}
-		v8_first = false
-		out.String(v8_name)
-		out.Raw(json.Marshal(v8_value))
-	}
-	out.RawByte('}')
-	out.RawByte('}')
-}
-func (v *MediumPayload) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_MediumPayload(w, v)
-}
-func (v *MediumPayload) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_MediumPayload(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBPerson(in *jlexer.Lexer, out *CBPerson) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "name":
-			if in.IsNull() {
-				in.Skip()
-				out.Name = nil
-			} else {
-				out.Name = new(CBName)
-				(*out.Name).UnmarshalEasyJSON(in)
-			}
-		case "github":
-			if in.IsNull() {
-				in.Skip()
-				out.Github = nil
-			} else {
-				out.Github = new(CBGithub)
-				(*out.Github).UnmarshalEasyJSON(in)
-			}
-		case "gravatar":
-			if in.IsNull() {
-				in.Skip()
-				out.Gravatar = nil
-			} else {
-				out.Gravatar = new(CBGravatar)
-				(*out.Gravatar).UnmarshalEasyJSON(in)
-			}
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBPerson(out *jwriter.Writer, in *CBPerson) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"name\":")
-	if in.Name == nil {
-		out.RawString("null")
-	} else {
-		(*in.Name).MarshalEasyJSON(out)
-	}
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"github\":")
-	if in.Github == nil {
-		out.RawString("null")
-	} else {
-		(*in.Github).MarshalEasyJSON(out)
-	}
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"gravatar\":")
-	if in.Gravatar == nil {
-		out.RawString("null")
-	} else {
-		(*in.Gravatar).MarshalEasyJSON(out)
-	}
-	out.RawByte('}')
-}
-func (v *CBPerson) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBPerson(w, v)
-}
-func (v *CBPerson) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBPerson(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBName(in *jlexer.Lexer, out *CBName) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "full_name":
-			out.FullName = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBName(out *jwriter.Writer, in *CBName) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"full_name\":")
-	out.String(in.FullName)
-	out.RawByte('}')
-}
-func (v *CBName) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBName(w, v)
-}
-func (v *CBName) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBName(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBGithub(in *jlexer.Lexer, out *CBGithub) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "followers":
-			out.Followers = in.Int()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBGithub(out *jwriter.Writer, in *CBGithub) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"followers\":")
-	out.Int(in.Followers)
-	out.RawByte('}')
-}
-func (v *CBGithub) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBGithub(w, v)
-}
-func (v *CBGithub) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBGithub(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBGravatar(in *jlexer.Lexer, out *CBGravatar) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "avatars":
-			in.Delim('[')
-			if !in.IsDelim(']') {
-				out.Avatars = make([]*CBAvatar, 0, 8)
-			} else {
-				out.Avatars = nil
-			}
-			for !in.IsDelim(']') {
-				var v9 *CBAvatar
-				if in.IsNull() {
-					in.Skip()
-					v9 = nil
-				} else {
-					v9 = new(CBAvatar)
-					(*v9).UnmarshalEasyJSON(in)
-				}
-				out.Avatars = append(out.Avatars, v9)
-				in.WantComma()
-			}
-			in.Delim(']')
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBGravatar(out *jwriter.Writer, in *CBGravatar) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"avatars\":")
-	out.RawByte('[')
-	for v10, v11 := range in.Avatars {
-		if v10 > 0 {
-			out.RawByte(',')
-		}
-		if v11 == nil {
-			out.RawString("null")
-		} else {
-			(*v11).MarshalEasyJSON(out)
-		}
-	}
-	out.RawByte(']')
-	out.RawByte('}')
-}
-func (v *CBGravatar) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBGravatar(w, v)
-}
-func (v *CBGravatar) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBGravatar(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_CBAvatar(in *jlexer.Lexer, out *CBAvatar) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "url":
-			out.Url = in.String()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_CBAvatar(out *jwriter.Writer, in *CBAvatar) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"url\":")
-	out.String(in.Url)
-	out.RawByte('}')
-}
-func (v *CBAvatar) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_CBAvatar(w, v)
-}
-func (v *CBAvatar) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_CBAvatar(l, v)
-}
-func easyjson_decode_github_com_buger_jsonparser_benchmark_SmallPayload(in *jlexer.Lexer, out *SmallPayload) {
-	in.Delim('{')
-	for !in.IsDelim('}') {
-		key := in.UnsafeString()
-		in.WantColon()
-		if in.IsNull() {
-			in.Skip()
-			in.WantComma()
-			continue
-		}
-		switch key {
-		case "st":
-			out.St = in.Int()
-		case "sid":
-			out.Sid = in.Int()
-		case "tt":
-			out.Tt = in.String()
-		case "gr":
-			out.Gr = in.Int()
-		case "uuid":
-			out.Uuid = in.String()
-		case "ip":
-			out.Ip = in.String()
-		case "ua":
-			out.Ua = in.String()
-		case "tz":
-			out.Tz = in.Int()
-		case "v":
-			out.V = in.Int()
-		default:
-			in.SkipRecursive()
-		}
-		in.WantComma()
-	}
-	in.Delim('}')
-}
-func easyjson_encode_github_com_buger_jsonparser_benchmark_SmallPayload(out *jwriter.Writer, in *SmallPayload) {
-	out.RawByte('{')
-	first := true
-	_ = first
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"st\":")
-	out.Int(in.St)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"sid\":")
-	out.Int(in.Sid)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"tt\":")
-	out.String(in.Tt)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"gr\":")
-	out.Int(in.Gr)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"uuid\":")
-	out.String(in.Uuid)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"ip\":")
-	out.String(in.Ip)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"ua\":")
-	out.String(in.Ua)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"tz\":")
-	out.Int(in.Tz)
-	if !first {
-		out.RawByte(',')
-	}
-	first = false
-	out.RawString("\"v\":")
-	out.Int(in.V)
-	out.RawByte('}')
-}
-func (v *SmallPayload) MarshalEasyJSON(w *jwriter.Writer) {
-	easyjson_encode_github_com_buger_jsonparser_benchmark_SmallPayload(w, v)
-}
-func (v *SmallPayload) UnmarshalEasyJSON(l *jlexer.Lexer) {
-	easyjson_decode_github_com_buger_jsonparser_benchmark_SmallPayload(l, v)
-}
--- a/benchmark/benchmark_ffjson.go
+++ /dev/null
@@ -1,3141 +0,0 @@
-// DO NOT EDIT!
-// Code generated by ffjson <https://github.com/pquerna/ffjson>
-// source: benchmark.go
-// DO NOT EDIT!
-
-package benchmark
-
-import (
-	"bytes"
-	"encoding/json"
-	"fmt"
-	fflib "github.com/pquerna/ffjson/fflib/v1"
-)
-
-func (mj *CBAvatar) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBAvatar) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Url":`)
-	fflib.WriteJsonString(buf, string(mj.Url))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBAvatarbase = iota
-	ffj_t_CBAvatarno_such_key
-
-	ffj_t_CBAvatar_Url
-)
-
-var ffj_key_CBAvatar_Url = []byte("Url")
-
-func (uj *CBAvatar) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBAvatar) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBAvatarbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBAvatarno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'U':
-
-					if bytes.Equal(ffj_key_CBAvatar_Url, kn) {
-						currentKey = ffj_t_CBAvatar_Url
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBAvatar_Url, kn) {
-					currentKey = ffj_t_CBAvatar_Url
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBAvatarno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBAvatar_Url:
-					goto handle_Url
-
-				case ffj_t_CBAvatarno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Url:
-
-	/* handler: uj.Url type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Url = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *CBGithub) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBGithub) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Followers":`)
-	fflib.FormatBits2(buf, uint64(mj.Followers), 10, mj.Followers < 0)
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBGithubbase = iota
-	ffj_t_CBGithubno_such_key
-
-	ffj_t_CBGithub_Followers
-)
-
-var ffj_key_CBGithub_Followers = []byte("Followers")
-
-func (uj *CBGithub) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBGithub) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBGithubbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBGithubno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'F':
-
-					if bytes.Equal(ffj_key_CBGithub_Followers, kn) {
-						currentKey = ffj_t_CBGithub_Followers
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_CBGithub_Followers, kn) {
-					currentKey = ffj_t_CBGithub_Followers
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBGithubno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBGithub_Followers:
-					goto handle_Followers
-
-				case ffj_t_CBGithubno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Followers:
-
-	/* handler: uj.Followers type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Followers = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *CBGravatar) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBGravatar) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Avatars":`)
-	if mj.Avatars != nil {
-		buf.WriteString(`[`)
-		for i, v := range mj.Avatars {
-			if i != 0 {
-				buf.WriteString(`,`)
-			}
-
-			{
-
-				if v == nil {
-					buf.WriteString("null")
-					return nil
-				}
-
-				err = v.MarshalJSONBuf(buf)
-				if err != nil {
-					return err
-				}
-
-			}
-		}
-		buf.WriteString(`]`)
-	} else {
-		buf.WriteString(`null`)
-	}
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBGravatarbase = iota
-	ffj_t_CBGravatarno_such_key
-
-	ffj_t_CBGravatar_Avatars
-)
-
-var ffj_key_CBGravatar_Avatars = []byte("Avatars")
-
-func (uj *CBGravatar) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBGravatar) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBGravatarbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBGravatarno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'A':
-
-					if bytes.Equal(ffj_key_CBGravatar_Avatars, kn) {
-						currentKey = ffj_t_CBGravatar_Avatars
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_CBGravatar_Avatars, kn) {
-					currentKey = ffj_t_CBGravatar_Avatars
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBGravatarno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBGravatar_Avatars:
-					goto handle_Avatars
-
-				case ffj_t_CBGravatarno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Avatars:
-
-	/* handler: uj.Avatars type=[]*benchmark.CBAvatar kind=slice quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-			uj.Avatars = nil
-		} else {
-
-			uj.Avatars = make([]*CBAvatar, 0)
-
-			wantVal := true
-
-			for {
-
-				var tmp_uj__Avatars *CBAvatar
-
-				tok = fs.Scan()
-				if tok == fflib.FFTok_error {
-					goto tokerror
-				}
-				if tok == fflib.FFTok_right_brace {
-					break
-				}
-
-				if tok == fflib.FFTok_comma {
-					if wantVal == true {
-						// TODO(pquerna): this isn't an ideal error message, this handles
-						// things like [,,,] as an array value.
-						return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-					}
-					continue
-				} else {
-					wantVal = true
-				}
-
-				/* handler: tmp_uj__Avatars type=*benchmark.CBAvatar kind=ptr quoted=false*/
-
-				{
-					if tok == fflib.FFTok_null {
-
-						tmp_uj__Avatars = nil
-
-						state = fflib.FFParse_after_value
-						goto mainparse
-					}
-
-					if tmp_uj__Avatars == nil {
-						tmp_uj__Avatars = new(CBAvatar)
-					}
-
-					err = tmp_uj__Avatars.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-					if err != nil {
-						return err
-					}
-					state = fflib.FFParse_after_value
-				}
-
-				uj.Avatars = append(uj.Avatars, tmp_uj__Avatars)
-				wantVal = false
-			}
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *CBName) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBName) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"FullName":`)
-	fflib.WriteJsonString(buf, string(mj.FullName))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBNamebase = iota
-	ffj_t_CBNameno_such_key
-
-	ffj_t_CBName_FullName
-)
-
-var ffj_key_CBName_FullName = []byte("FullName")
-
-func (uj *CBName) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBName) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBNamebase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBNameno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'F':
-
-					if bytes.Equal(ffj_key_CBName_FullName, kn) {
-						currentKey = ffj_t_CBName_FullName
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBName_FullName, kn) {
-					currentKey = ffj_t_CBName_FullName
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBNameno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBName_FullName:
-					goto handle_FullName
-
-				case ffj_t_CBNameno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_FullName:
-
-	/* handler: uj.FullName type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.FullName = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *CBPerson) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *CBPerson) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	if mj.Name != nil {
-		buf.WriteString(`{"Name":`)
-
-		{
-
-			err = mj.Name.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`{"Name":null`)
-	}
-	if mj.Github != nil {
-		buf.WriteString(`,"Github":`)
-
-		{
-
-			err = mj.Github.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`,"Github":null`)
-	}
-	if mj.Gravatar != nil {
-		buf.WriteString(`,"Gravatar":`)
-
-		{
-
-			err = mj.Gravatar.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`,"Gravatar":null`)
-	}
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_CBPersonbase = iota
-	ffj_t_CBPersonno_such_key
-
-	ffj_t_CBPerson_Name
-
-	ffj_t_CBPerson_Github
-
-	ffj_t_CBPerson_Gravatar
-)
-
-var ffj_key_CBPerson_Name = []byte("Name")
-
-var ffj_key_CBPerson_Github = []byte("Github")
-
-var ffj_key_CBPerson_Gravatar = []byte("Gravatar")
-
-func (uj *CBPerson) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *CBPerson) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_CBPersonbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_CBPersonno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'G':
-
-					if bytes.Equal(ffj_key_CBPerson_Github, kn) {
-						currentKey = ffj_t_CBPerson_Github
-						state = fflib.FFParse_want_colon
-						goto mainparse
-
-					} else if bytes.Equal(ffj_key_CBPerson_Gravatar, kn) {
-						currentKey = ffj_t_CBPerson_Gravatar
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'N':
-
-					if bytes.Equal(ffj_key_CBPerson_Name, kn) {
-						currentKey = ffj_t_CBPerson_Name
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBPerson_Gravatar, kn) {
-					currentKey = ffj_t_CBPerson_Gravatar
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBPerson_Github, kn) {
-					currentKey = ffj_t_CBPerson_Github
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_CBPerson_Name, kn) {
-					currentKey = ffj_t_CBPerson_Name
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_CBPersonno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_CBPerson_Name:
-					goto handle_Name
-
-				case ffj_t_CBPerson_Github:
-					goto handle_Github
-
-				case ffj_t_CBPerson_Gravatar:
-					goto handle_Gravatar
-
-				case ffj_t_CBPersonno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Name:
-
-	/* handler: uj.Name type=benchmark.CBName kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Name = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Name == nil {
-			uj.Name = new(CBName)
-		}
-
-		err = uj.Name.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Github:
-
-	/* handler: uj.Github type=benchmark.CBGithub kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Github = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Github == nil {
-			uj.Github = new(CBGithub)
-		}
-
-		err = uj.Github.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Gravatar:
-
-	/* handler: uj.Gravatar type=benchmark.CBGravatar kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Gravatar = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Gravatar == nil {
-			uj.Gravatar = new(CBGravatar)
-		}
-
-		err = uj.Gravatar.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *DSTopic) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *DSTopic) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Id":`)
-	fflib.FormatBits2(buf, uint64(mj.Id), 10, mj.Id < 0)
-	buf.WriteString(`,"Slug":`)
-	fflib.WriteJsonString(buf, string(mj.Slug))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_DSTopicbase = iota
-	ffj_t_DSTopicno_such_key
-
-	ffj_t_DSTopic_Id
-
-	ffj_t_DSTopic_Slug
-)
-
-var ffj_key_DSTopic_Id = []byte("Id")
-
-var ffj_key_DSTopic_Slug = []byte("Slug")
-
-func (uj *DSTopic) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *DSTopic) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_DSTopicbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_DSTopicno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'I':
-
-					if bytes.Equal(ffj_key_DSTopic_Id, kn) {
-						currentKey = ffj_t_DSTopic_Id
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'S':
-
-					if bytes.Equal(ffj_key_DSTopic_Slug, kn) {
-						currentKey = ffj_t_DSTopic_Slug
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_DSTopic_Slug, kn) {
-					currentKey = ffj_t_DSTopic_Slug
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_DSTopic_Id, kn) {
-					currentKey = ffj_t_DSTopic_Id
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_DSTopicno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_DSTopic_Id:
-					goto handle_Id
-
-				case ffj_t_DSTopic_Slug:
-					goto handle_Slug
-
-				case ffj_t_DSTopicno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Id:
-
-	/* handler: uj.Id type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Id = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Slug:
-
-	/* handler: uj.Slug type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Slug = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *DSTopicsList) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *DSTopicsList) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Topics":`)
-	if mj.Topics != nil {
-		buf.WriteString(`[`)
-		for i, v := range mj.Topics {
-			if i != 0 {
-				buf.WriteString(`,`)
-			}
-
-			{
-
-				if v == nil {
-					buf.WriteString("null")
-					return nil
-				}
-
-				err = v.MarshalJSONBuf(buf)
-				if err != nil {
-					return err
-				}
-
-			}
-		}
-		buf.WriteString(`]`)
-	} else {
-		buf.WriteString(`null`)
-	}
-	buf.WriteString(`,"MoreTopicsUrl":`)
-	fflib.WriteJsonString(buf, string(mj.MoreTopicsUrl))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_DSTopicsListbase = iota
-	ffj_t_DSTopicsListno_such_key
-
-	ffj_t_DSTopicsList_Topics
-
-	ffj_t_DSTopicsList_MoreTopicsUrl
-)
-
-var ffj_key_DSTopicsList_Topics = []byte("Topics")
-
-var ffj_key_DSTopicsList_MoreTopicsUrl = []byte("MoreTopicsUrl")
-
-func (uj *DSTopicsList) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *DSTopicsList) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_DSTopicsListbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_DSTopicsListno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'M':
-
-					if bytes.Equal(ffj_key_DSTopicsList_MoreTopicsUrl, kn) {
-						currentKey = ffj_t_DSTopicsList_MoreTopicsUrl
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'T':
-
-					if bytes.Equal(ffj_key_DSTopicsList_Topics, kn) {
-						currentKey = ffj_t_DSTopicsList_Topics
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_DSTopicsList_MoreTopicsUrl, kn) {
-					currentKey = ffj_t_DSTopicsList_MoreTopicsUrl
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_DSTopicsList_Topics, kn) {
-					currentKey = ffj_t_DSTopicsList_Topics
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_DSTopicsListno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_DSTopicsList_Topics:
-					goto handle_Topics
-
-				case ffj_t_DSTopicsList_MoreTopicsUrl:
-					goto handle_MoreTopicsUrl
-
-				case ffj_t_DSTopicsListno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Topics:
-
-	/* handler: uj.Topics type=[]*benchmark.DSTopic kind=slice quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-			uj.Topics = nil
-		} else {
-
-			uj.Topics = make([]*DSTopic, 0)
-
-			wantVal := true
-
-			for {
-
-				var tmp_uj__Topics *DSTopic
-
-				tok = fs.Scan()
-				if tok == fflib.FFTok_error {
-					goto tokerror
-				}
-				if tok == fflib.FFTok_right_brace {
-					break
-				}
-
-				if tok == fflib.FFTok_comma {
-					if wantVal == true {
-						// TODO(pquerna): this isn't an ideal error message, this handles
-						// things like [,,,] as an array value.
-						return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-					}
-					continue
-				} else {
-					wantVal = true
-				}
-
-				/* handler: tmp_uj__Topics type=*benchmark.DSTopic kind=ptr quoted=false*/
-
-				{
-					if tok == fflib.FFTok_null {
-
-						tmp_uj__Topics = nil
-
-						state = fflib.FFParse_after_value
-						goto mainparse
-					}
-
-					if tmp_uj__Topics == nil {
-						tmp_uj__Topics = new(DSTopic)
-					}
-
-					err = tmp_uj__Topics.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-					if err != nil {
-						return err
-					}
-					state = fflib.FFParse_after_value
-				}
-
-				uj.Topics = append(uj.Topics, tmp_uj__Topics)
-				wantVal = false
-			}
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_MoreTopicsUrl:
-
-	/* handler: uj.MoreTopicsUrl type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.MoreTopicsUrl = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *DSUser) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *DSUser) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Username":`)
-	fflib.WriteJsonString(buf, string(mj.Username))
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_DSUserbase = iota
-	ffj_t_DSUserno_such_key
-
-	ffj_t_DSUser_Username
-)
-
-var ffj_key_DSUser_Username = []byte("Username")
-
-func (uj *DSUser) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *DSUser) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_DSUserbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_DSUserno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'U':
-
-					if bytes.Equal(ffj_key_DSUser_Username, kn) {
-						currentKey = ffj_t_DSUser_Username
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_DSUser_Username, kn) {
-					currentKey = ffj_t_DSUser_Username
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_DSUserno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_DSUser_Username:
-					goto handle_Username
-
-				case ffj_t_DSUserno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Username:
-
-	/* handler: uj.Username type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Username = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *LargePayload) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *LargePayload) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"Users":`)
-	if mj.Users != nil {
-		buf.WriteString(`[`)
-		for i, v := range mj.Users {
-			if i != 0 {
-				buf.WriteString(`,`)
-			}
-
-			{
-
-				if v == nil {
-					buf.WriteString("null")
-					return nil
-				}
-
-				err = v.MarshalJSONBuf(buf)
-				if err != nil {
-					return err
-				}
-
-			}
-		}
-		buf.WriteString(`]`)
-	} else {
-		buf.WriteString(`null`)
-	}
-	if mj.Topics != nil {
-		buf.WriteString(`,"Topics":`)
-
-		{
-
-			err = mj.Topics.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`,"Topics":null`)
-	}
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_LargePayloadbase = iota
-	ffj_t_LargePayloadno_such_key
-
-	ffj_t_LargePayload_Users
-
-	ffj_t_LargePayload_Topics
-)
-
-var ffj_key_LargePayload_Users = []byte("Users")
-
-var ffj_key_LargePayload_Topics = []byte("Topics")
-
-func (uj *LargePayload) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *LargePayload) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_LargePayloadbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_LargePayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'T':
-
-					if bytes.Equal(ffj_key_LargePayload_Topics, kn) {
-						currentKey = ffj_t_LargePayload_Topics
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'U':
-
-					if bytes.Equal(ffj_key_LargePayload_Users, kn) {
-						currentKey = ffj_t_LargePayload_Users
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.EqualFoldRight(ffj_key_LargePayload_Topics, kn) {
-					currentKey = ffj_t_LargePayload_Topics
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_LargePayload_Users, kn) {
-					currentKey = ffj_t_LargePayload_Users
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_LargePayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_LargePayload_Users:
-					goto handle_Users
-
-				case ffj_t_LargePayload_Topics:
-					goto handle_Topics
-
-				case ffj_t_LargePayloadno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Users:
-
-	/* handler: uj.Users type=[]*benchmark.DSUser kind=slice quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_left_brace && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-			uj.Users = nil
-		} else {
-
-			uj.Users = make([]*DSUser, 0)
-
-			wantVal := true
-
-			for {
-
-				var tmp_uj__Users *DSUser
-
-				tok = fs.Scan()
-				if tok == fflib.FFTok_error {
-					goto tokerror
-				}
-				if tok == fflib.FFTok_right_brace {
-					break
-				}
-
-				if tok == fflib.FFTok_comma {
-					if wantVal == true {
-						// TODO(pquerna): this isn't an ideal error message, this handles
-						// things like [,,,] as an array value.
-						return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-					}
-					continue
-				} else {
-					wantVal = true
-				}
-
-				/* handler: tmp_uj__Users type=*benchmark.DSUser kind=ptr quoted=false*/
-
-				{
-					if tok == fflib.FFTok_null {
-
-						tmp_uj__Users = nil
-
-						state = fflib.FFParse_after_value
-						goto mainparse
-					}
-
-					if tmp_uj__Users == nil {
-						tmp_uj__Users = new(DSUser)
-					}
-
-					err = tmp_uj__Users.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-					if err != nil {
-						return err
-					}
-					state = fflib.FFParse_after_value
-				}
-
-				uj.Users = append(uj.Users, tmp_uj__Users)
-				wantVal = false
-			}
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Topics:
-
-	/* handler: uj.Topics type=benchmark.DSTopicsList kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Topics = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Topics == nil {
-			uj.Topics = new(DSTopicsList)
-		}
-
-		err = uj.Topics.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *MediumPayload) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *MediumPayload) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	if mj.Person != nil {
-		buf.WriteString(`{"Person":`)
-
-		{
-
-			err = mj.Person.MarshalJSONBuf(buf)
-			if err != nil {
-				return err
-			}
-
-		}
-	} else {
-		buf.WriteString(`{"Person":null`)
-	}
-	buf.WriteString(`,"Company":`)
-	/* Falling back. type=map[string]interface {} kind=map */
-	err = buf.Encode(mj.Company)
-	if err != nil {
-		return err
-	}
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_MediumPayloadbase = iota
-	ffj_t_MediumPayloadno_such_key
-
-	ffj_t_MediumPayload_Person
-
-	ffj_t_MediumPayload_Company
-)
-
-var ffj_key_MediumPayload_Person = []byte("Person")
-
-var ffj_key_MediumPayload_Company = []byte("Company")
-
-func (uj *MediumPayload) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *MediumPayload) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_MediumPayloadbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_MediumPayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'C':
-
-					if bytes.Equal(ffj_key_MediumPayload_Company, kn) {
-						currentKey = ffj_t_MediumPayload_Company
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'P':
-
-					if bytes.Equal(ffj_key_MediumPayload_Person, kn) {
-						currentKey = ffj_t_MediumPayload_Person
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_MediumPayload_Company, kn) {
-					currentKey = ffj_t_MediumPayload_Company
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_MediumPayload_Person, kn) {
-					currentKey = ffj_t_MediumPayload_Person
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_MediumPayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_MediumPayload_Person:
-					goto handle_Person
-
-				case ffj_t_MediumPayload_Company:
-					goto handle_Company
-
-				case ffj_t_MediumPayloadno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_Person:
-
-	/* handler: uj.Person type=benchmark.CBPerson kind=struct quoted=false*/
-
-	{
-		if tok == fflib.FFTok_null {
-
-			uj.Person = nil
-
-			state = fflib.FFParse_after_value
-			goto mainparse
-		}
-
-		if uj.Person == nil {
-			uj.Person = new(CBPerson)
-		}
-
-		err = uj.Person.UnmarshalJSONFFLexer(fs, fflib.FFParse_want_key)
-		if err != nil {
-			return err
-		}
-		state = fflib.FFParse_after_value
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Company:
-
-	/* handler: uj.Company type=map[string]interface {} kind=map quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_left_bracket && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-			uj.Company = nil
-		} else {
-
-			uj.Company = make(map[string]interface{}, 0)
-
-			wantVal := true
-
-			for {
-
-				var k string
-
-				var tmp_uj__Company interface{}
-
-				tok = fs.Scan()
-				if tok == fflib.FFTok_error {
-					goto tokerror
-				}
-				if tok == fflib.FFTok_right_bracket {
-					break
-				}
-
-				if tok == fflib.FFTok_comma {
-					if wantVal == true {
-						// TODO(pquerna): this isn't an ideal error message, this handles
-						// things like [,,,] as an array value.
-						return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-					}
-					continue
-				} else {
-					wantVal = true
-				}
-
-				/* handler: k type=string kind=string quoted=false*/
-
-				{
-
-					{
-						if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-							return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-						}
-					}
-
-					if tok == fflib.FFTok_null {
-
-					} else {
-
-						outBuf := fs.Output.Bytes()
-
-						k = string(string(outBuf))
-
-					}
-				}
-
-				// Expect ':' after key
-				tok = fs.Scan()
-				if tok != fflib.FFTok_colon {
-					return fs.WrapErr(fmt.Errorf("wanted colon token, but got token: %v", tok))
-				}
-
-				tok = fs.Scan()
-				/* handler: tmp_uj__Company type=interface {} kind=interface quoted=false*/
-
-				{
-					/* Falling back. type=interface {} kind=interface */
-					tbuf, err := fs.CaptureField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-
-					err = json.Unmarshal(tbuf, &tmp_uj__Company)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-				}
-
-				uj.Company[k] = tmp_uj__Company
-
-				wantVal = false
-			}
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
-
-func (mj *SmallPayload) MarshalJSON() ([]byte, error) {
-	var buf fflib.Buffer
-	if mj == nil {
-		buf.WriteString("null")
-		return buf.Bytes(), nil
-	}
-	err := mj.MarshalJSONBuf(&buf)
-	if err != nil {
-		return nil, err
-	}
-	return buf.Bytes(), nil
-}
-func (mj *SmallPayload) MarshalJSONBuf(buf fflib.EncodingBuffer) error {
-	if mj == nil {
-		buf.WriteString("null")
-		return nil
-	}
-	var err error
-	var obj []byte
-	_ = obj
-	_ = err
-	buf.WriteString(`{"St":`)
-	fflib.FormatBits2(buf, uint64(mj.St), 10, mj.St < 0)
-	buf.WriteString(`,"Sid":`)
-	fflib.FormatBits2(buf, uint64(mj.Sid), 10, mj.Sid < 0)
-	buf.WriteString(`,"Tt":`)
-	fflib.WriteJsonString(buf, string(mj.Tt))
-	buf.WriteString(`,"Gr":`)
-	fflib.FormatBits2(buf, uint64(mj.Gr), 10, mj.Gr < 0)
-	buf.WriteString(`,"Uuid":`)
-	fflib.WriteJsonString(buf, string(mj.Uuid))
-	buf.WriteString(`,"Ip":`)
-	fflib.WriteJsonString(buf, string(mj.Ip))
-	buf.WriteString(`,"Ua":`)
-	fflib.WriteJsonString(buf, string(mj.Ua))
-	buf.WriteString(`,"Tz":`)
-	fflib.FormatBits2(buf, uint64(mj.Tz), 10, mj.Tz < 0)
-	buf.WriteString(`,"V":`)
-	fflib.FormatBits2(buf, uint64(mj.V), 10, mj.V < 0)
-	buf.WriteByte('}')
-	return nil
-}
-
-const (
-	ffj_t_SmallPayloadbase = iota
-	ffj_t_SmallPayloadno_such_key
-
-	ffj_t_SmallPayload_St
-
-	ffj_t_SmallPayload_Sid
-
-	ffj_t_SmallPayload_Tt
-
-	ffj_t_SmallPayload_Gr
-
-	ffj_t_SmallPayload_Uuid
-
-	ffj_t_SmallPayload_Ip
-
-	ffj_t_SmallPayload_Ua
-
-	ffj_t_SmallPayload_Tz
-
-	ffj_t_SmallPayload_V
-)
-
-var ffj_key_SmallPayload_St = []byte("St")
-
-var ffj_key_SmallPayload_Sid = []byte("Sid")
-
-var ffj_key_SmallPayload_Tt = []byte("Tt")
-
-var ffj_key_SmallPayload_Gr = []byte("Gr")
-
-var ffj_key_SmallPayload_Uuid = []byte("Uuid")
-
-var ffj_key_SmallPayload_Ip = []byte("Ip")
-
-var ffj_key_SmallPayload_Ua = []byte("Ua")
-
-var ffj_key_SmallPayload_Tz = []byte("Tz")
-
-var ffj_key_SmallPayload_V = []byte("V")
-
-func (uj *SmallPayload) UnmarshalJSON(input []byte) error {
-	fs := fflib.NewFFLexer(input)
-	return uj.UnmarshalJSONFFLexer(fs, fflib.FFParse_map_start)
-}
-
-func (uj *SmallPayload) UnmarshalJSONFFLexer(fs *fflib.FFLexer, state fflib.FFParseState) error {
-	var err error = nil
-	currentKey := ffj_t_SmallPayloadbase
-	_ = currentKey
-	tok := fflib.FFTok_init
-	wantedTok := fflib.FFTok_init
-
-mainparse:
-	for {
-		tok = fs.Scan()
-		//	println(fmt.Sprintf("debug: tok: %v  state: %v", tok, state))
-		if tok == fflib.FFTok_error {
-			goto tokerror
-		}
-
-		switch state {
-
-		case fflib.FFParse_map_start:
-			if tok != fflib.FFTok_left_bracket {
-				wantedTok = fflib.FFTok_left_bracket
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_key
-			continue
-
-		case fflib.FFParse_after_value:
-			if tok == fflib.FFTok_comma {
-				state = fflib.FFParse_want_key
-			} else if tok == fflib.FFTok_right_bracket {
-				goto done
-			} else {
-				wantedTok = fflib.FFTok_comma
-				goto wrongtokenerror
-			}
-
-		case fflib.FFParse_want_key:
-			// json {} ended. goto exit. woo.
-			if tok == fflib.FFTok_right_bracket {
-				goto done
-			}
-			if tok != fflib.FFTok_string {
-				wantedTok = fflib.FFTok_string
-				goto wrongtokenerror
-			}
-
-			kn := fs.Output.Bytes()
-			if len(kn) <= 0 {
-				// "" case. hrm.
-				currentKey = ffj_t_SmallPayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			} else {
-				switch kn[0] {
-
-				case 'G':
-
-					if bytes.Equal(ffj_key_SmallPayload_Gr, kn) {
-						currentKey = ffj_t_SmallPayload_Gr
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'I':
-
-					if bytes.Equal(ffj_key_SmallPayload_Ip, kn) {
-						currentKey = ffj_t_SmallPayload_Ip
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'S':
-
-					if bytes.Equal(ffj_key_SmallPayload_St, kn) {
-						currentKey = ffj_t_SmallPayload_St
-						state = fflib.FFParse_want_colon
-						goto mainparse
-
-					} else if bytes.Equal(ffj_key_SmallPayload_Sid, kn) {
-						currentKey = ffj_t_SmallPayload_Sid
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'T':
-
-					if bytes.Equal(ffj_key_SmallPayload_Tt, kn) {
-						currentKey = ffj_t_SmallPayload_Tt
-						state = fflib.FFParse_want_colon
-						goto mainparse
-
-					} else if bytes.Equal(ffj_key_SmallPayload_Tz, kn) {
-						currentKey = ffj_t_SmallPayload_Tz
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'U':
-
-					if bytes.Equal(ffj_key_SmallPayload_Uuid, kn) {
-						currentKey = ffj_t_SmallPayload_Uuid
-						state = fflib.FFParse_want_colon
-						goto mainparse
-
-					} else if bytes.Equal(ffj_key_SmallPayload_Ua, kn) {
-						currentKey = ffj_t_SmallPayload_Ua
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				case 'V':
-
-					if bytes.Equal(ffj_key_SmallPayload_V, kn) {
-						currentKey = ffj_t_SmallPayload_V
-						state = fflib.FFParse_want_colon
-						goto mainparse
-					}
-
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_V, kn) {
-					currentKey = ffj_t_SmallPayload_V
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Tz, kn) {
-					currentKey = ffj_t_SmallPayload_Tz
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Ua, kn) {
-					currentKey = ffj_t_SmallPayload_Ua
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Ip, kn) {
-					currentKey = ffj_t_SmallPayload_Ip
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Uuid, kn) {
-					currentKey = ffj_t_SmallPayload_Uuid
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Gr, kn) {
-					currentKey = ffj_t_SmallPayload_Gr
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.SimpleLetterEqualFold(ffj_key_SmallPayload_Tt, kn) {
-					currentKey = ffj_t_SmallPayload_Tt
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_SmallPayload_Sid, kn) {
-					currentKey = ffj_t_SmallPayload_Sid
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				if fflib.EqualFoldRight(ffj_key_SmallPayload_St, kn) {
-					currentKey = ffj_t_SmallPayload_St
-					state = fflib.FFParse_want_colon
-					goto mainparse
-				}
-
-				currentKey = ffj_t_SmallPayloadno_such_key
-				state = fflib.FFParse_want_colon
-				goto mainparse
-			}
-
-		case fflib.FFParse_want_colon:
-			if tok != fflib.FFTok_colon {
-				wantedTok = fflib.FFTok_colon
-				goto wrongtokenerror
-			}
-			state = fflib.FFParse_want_value
-			continue
-		case fflib.FFParse_want_value:
-
-			if tok == fflib.FFTok_left_brace || tok == fflib.FFTok_left_bracket || tok == fflib.FFTok_integer || tok == fflib.FFTok_double || tok == fflib.FFTok_string || tok == fflib.FFTok_bool || tok == fflib.FFTok_null {
-				switch currentKey {
-
-				case ffj_t_SmallPayload_St:
-					goto handle_St
-
-				case ffj_t_SmallPayload_Sid:
-					goto handle_Sid
-
-				case ffj_t_SmallPayload_Tt:
-					goto handle_Tt
-
-				case ffj_t_SmallPayload_Gr:
-					goto handle_Gr
-
-				case ffj_t_SmallPayload_Uuid:
-					goto handle_Uuid
-
-				case ffj_t_SmallPayload_Ip:
-					goto handle_Ip
-
-				case ffj_t_SmallPayload_Ua:
-					goto handle_Ua
-
-				case ffj_t_SmallPayload_Tz:
-					goto handle_Tz
-
-				case ffj_t_SmallPayload_V:
-					goto handle_V
-
-				case ffj_t_SmallPayloadno_such_key:
-					err = fs.SkipField(tok)
-					if err != nil {
-						return fs.WrapErr(err)
-					}
-					state = fflib.FFParse_after_value
-					goto mainparse
-				}
-			} else {
-				goto wantedvalue
-			}
-		}
-	}
-
-handle_St:
-
-	/* handler: uj.St type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.St = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Sid:
-
-	/* handler: uj.Sid type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Sid = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Tt:
-
-	/* handler: uj.Tt type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Tt = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Gr:
-
-	/* handler: uj.Gr type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Gr = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Uuid:
-
-	/* handler: uj.Uuid type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Uuid = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Ip:
-
-	/* handler: uj.Ip type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Ip = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Ua:
-
-	/* handler: uj.Ua type=string kind=string quoted=false*/
-
-	{
-
-		{
-			if tok != fflib.FFTok_string && tok != fflib.FFTok_null {
-				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for string", tok))
-			}
-		}
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			outBuf := fs.Output.Bytes()
-
-			uj.Ua = string(string(outBuf))
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_Tz:
-
-	/* handler: uj.Tz type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.Tz = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-handle_V:
-
-	/* handler: uj.V type=int kind=int quoted=false*/
-
-	{
-		if tok != fflib.FFTok_integer && tok != fflib.FFTok_null {
-			return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for int", tok))
-		}
-	}
-
-	{
-
-		if tok == fflib.FFTok_null {
-
-		} else {
-
-			tval, err := fflib.ParseInt(fs.Output.Bytes(), 10, 64)
-
-			if err != nil {
-				return fs.WrapErr(err)
-			}
-
-			uj.V = int(tval)
-
-		}
-	}
-
-	state = fflib.FFParse_after_value
-	goto mainparse
-
-wantedvalue:
-	return fs.WrapErr(fmt.Errorf("wanted value token, but got token: %v", tok))
-wrongtokenerror:
-	return fs.WrapErr(fmt.Errorf("ffjson: wanted token: %v, but got token: %v output=%s", wantedTok, tok, fs.Output.String()))
-tokerror:
-	if fs.BigError != nil {
-		return fs.WrapErr(fs.BigError)
-	}
-	err = fs.Error.ToError()
-	if err != nil {
-		return fs.WrapErr(err)
-	}
-	panic("ffjson-generated: unreachable, please report bug.")
-done:
-	return nil
-}
--- a/benchmark/benchmark_large_payload_test.go
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-   Each test should process 24kb json record (based on Discourse API)
-   It should read 2 arrays, and for each item in array get few fields.
-   Basically it means processing full JSON file.
-*/
-package benchmark
-
-import (
-	"github.com/buger/jsonparser"
-	"testing"
-	// "github.com/Jeffail/gabs"
-	// "github.com/bitly/go-simplejson"
-	"encoding/json"
-	"github.com/a8m/djson"
-	jlexer "github.com/mailru/easyjson/jlexer"
-	"github.com/pquerna/ffjson/ffjson"
-	// "github.com/antonholmquist/jason"
-	// "fmt"
-)
-
-/*
-   github.com/buger/jsonparser
-*/
-func BenchmarkJsonParserLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		jsonparser.ArrayEach(largeFixture, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
-			jsonparser.Get(value, "username")
-			nothing()
-		}, "users")
-
-		jsonparser.ArrayEach(largeFixture, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
-			jsonparser.GetInt(value, "id")
-			jsonparser.Get(value, "slug")
-			nothing()
-		}, "topics", "topics")
-	}
-}
-
-/*
-   encoding/json
-*/
-func BenchmarkEncodingJsonStructLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data LargePayload
-		json.Unmarshal(largeFixture, &data)
-
-		for _, u := range data.Users {
-			nothing(u.Username)
-		}
-
-		for _, t := range data.Topics.Topics {
-			nothing(t.Id, t.Slug)
-		}
-	}
-}
-
-func BenchmarkEncodingJsonInterfaceLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data interface{}
-		json.Unmarshal(largeFixture, &data)
-		m := data.(map[string]interface{})
-
-		users := m["users"].([]interface{})
-		for _, u := range users {
-			nothing(u.(map[string]interface{})["username"].(string))
-		}
-
-		topics := m["topics"].(map[string]interface{})["topics"].([]interface{})
-		for _, t := range topics {
-			tI := t.(map[string]interface{})
-			nothing(tI["id"].(float64), tI["slug"].(string))
-		}
-	}
-}
-
-/*
-   github.com/pquerna/ffjson
-*/
-
-func BenchmarkFFJsonLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data LargePayload
-		ffjson.Unmarshal(largeFixture, &data)
-
-		for _, u := range data.Users {
-			nothing(u.Username)
-		}
-
-		for _, t := range data.Topics.Topics {
-			nothing(t.Id, t.Slug)
-		}
-	}
-}
-
-/*
-   github.com/mailru/easyjson
-*/
-func BenchmarkEasyJsonLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		lexer := &jlexer.Lexer{Data: largeFixture}
-		data := new(LargePayload)
-		data.UnmarshalEasyJSON(lexer)
-
-		for _, u := range data.Users {
-			nothing(u.Username)
-		}
-
-		for _, t := range data.Topics.Topics {
-			nothing(t.Id, t.Slug)
-		}
-	}
-}
-
-/*
-   github.com/a8m/djson
-*/
-func BenchmarkDjsonLarge(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		m, _ := djson.DecodeObject(largeFixture)
-		users := m["users"].([]interface{})
-		for _, u := range users {
-			nothing(u.(map[string]interface{})["username"].(string))
-		}
-
-		topics := m["topics"].(map[string]interface{})["topics"].([]interface{})
-		for _, t := range topics {
-			tI := t.(map[string]interface{})
-			nothing(tI["id"].(float64), tI["slug"].(string))
-		}
-	}
-}
--- a/benchmark/benchmark_medium_payload_test.go
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
-   Each test should process 2.4kb json record (based on Clearbit API)
-   It should read multiple nested fields and 1 array
-*/
-package benchmark
-
-import (
-	"encoding/json"
-	"testing"
-
-	"github.com/Jeffail/gabs"
-	"github.com/a8m/djson"
-	"github.com/antonholmquist/jason"
-	"github.com/bitly/go-simplejson"
-	"github.com/buger/jsonparser"
-	jlexer "github.com/mailru/easyjson/jlexer"
-	"github.com/mreiferson/go-ujson"
-	"github.com/pquerna/ffjson/ffjson"
-	"github.com/ugorji/go/codec"
-	// "fmt"
-	"bytes"
-	"errors"
-)
-
-/*
-   github.com/buger/jsonparser
-*/
-func BenchmarkJsonParserMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		jsonparser.Get(mediumFixture, "person", "name", "fullName")
-		jsonparser.GetInt(mediumFixture, "person", "github", "followers")
-		jsonparser.Get(mediumFixture, "company")
-
-		jsonparser.ArrayEach(mediumFixture, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
-			jsonparser.Get(value, "url")
-			nothing()
-		}, "person", "gravatar", "avatars")
-	}
-}
-
-func BenchmarkJsonParserDeleteMedium(b *testing.B) {
-	fixture := make([]byte, 0, len(mediumFixture))
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		fixture = append(fixture[:0], mediumFixture...)
-		fixture = jsonparser.Delete(fixture, "person", "name", "fullName")
-		fixture = jsonparser.Delete(fixture, "person", "github", "followers")
-		fixture = jsonparser.Delete(fixture, "company")
-
-		nothing()
-	}
-}
-
-func BenchmarkJsonParserEachKeyManualMedium(b *testing.B) {
-	paths := [][]string{
-		[]string{"person", "name", "fullName"},
-		[]string{"person", "github", "followers"},
-		[]string{"company"},
-		[]string{"person", "gravatar", "avatars"},
-	}
-
-	for i := 0; i < b.N; i++ {
-		jsonparser.EachKey(mediumFixture, func(idx int, value []byte, vt jsonparser.ValueType, err error) {
-			switch idx {
-			case 0:
-			// jsonparser.ParseString(value)
-			case 1:
-				jsonparser.ParseInt(value)
-			case 2:
-			// jsonparser.ParseString(value)
-			case 3:
-				jsonparser.ArrayEach(value, func(avalue []byte, dataType jsonparser.ValueType, offset int, err error) {
-					jsonparser.Get(avalue, "url")
-				})
-			}
-		}, paths...)
-	}
-}
-
-func BenchmarkJsonParserEachKeyStructMedium(b *testing.B) {
-	paths := [][]string{
-		[]string{"person", "name", "fullName"},
-		[]string{"person", "github", "followers"},
-		[]string{"company"},
-		[]string{"person", "gravatar", "avatars"},
-	}
-
-	for i := 0; i < b.N; i++ {
-		data := MediumPayload{
-			Person: &CBPerson{
-				Name:     &CBName{},
-				Github:   &CBGithub{},
-				Gravatar: &CBGravatar{},
-			},
-		}
-
-		jsonparser.EachKey(mediumFixture, func(idx int, value []byte, vt jsonparser.ValueType, err error) {
-			switch idx {
-			case 0:
-				data.Person.Name.FullName, _ = jsonparser.ParseString(value)
-			case 1:
-				v, _ := jsonparser.ParseInt(value)
-				data.Person.Github.Followers = int(v)
-			case 2:
-				json.Unmarshal(value, &data.Company) // we don't have a JSON -> map[string]interface{} function yet, so use standard encoding/json here
-			case 3:
-				var avatars []*CBAvatar
-				jsonparser.ArrayEach(value, func(avalue []byte, dataType jsonparser.ValueType, offset int, err error) {
-					url, _ := jsonparser.ParseString(avalue)
-					avatars = append(avatars, &CBAvatar{Url: url})
-				})
-				data.Person.Gravatar.Avatars = avatars
-			}
-		}, paths...)
-	}
-}
-
-func BenchmarkJsonParserObjectEachStructMedium(b *testing.B) {
-	nameKey, githubKey, gravatarKey := []byte("name"), []byte("github"), []byte("gravatar")
-	errStop := errors.New("stop")
-
-	for i := 0; i < b.N; i++ {
-		data := MediumPayload{
-			Person: &CBPerson{
-				Name:     &CBName{},
-				Github:   &CBGithub{},
-				Gravatar: &CBGravatar{},
-			},
-		}
-
-		missing := 3
-
-		jsonparser.ObjectEach(mediumFixture, func(k, v []byte, vt jsonparser.ValueType, o int) error {
-			switch {
-			case bytes.Equal(k, nameKey):
-				data.Person.Name.FullName, _ = jsonparser.GetString(v, "fullName")
-				missing--
-			case bytes.Equal(k, githubKey):
-				x, _ := jsonparser.GetInt(v, "followers")
-				data.Person.Github.Followers = int(x)
-				missing--
-			case bytes.Equal(k, gravatarKey):
-				var avatars []*CBAvatar
-				jsonparser.ArrayEach(v, func(avalue []byte, dataType jsonparser.ValueType, offset int, err error) {
-					url, _ := jsonparser.ParseString(avalue)
-					avatars = append(avatars, &CBAvatar{Url: url})
-				}, "avatars")
-				data.Person.Gravatar.Avatars = avatars
-				missing--
-			}
-
-			if missing == 0 {
-				return errStop
-			} else {
-				return nil
-			}
-		}, "person")
-
-		cv, _, _, _ := jsonparser.Get(mediumFixture, "company")
-		json.Unmarshal(cv, &data.Company)
-	}
-}
-
-/*
-   encoding/json
-*/
-func BenchmarkEncodingJsonStructMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data MediumPayload
-		json.Unmarshal(mediumFixture, &data)
-
-		nothing(data.Person.Name.FullName, data.Person.Github.Followers, data.Company)
-
-		for _, el := range data.Person.Gravatar.Avatars {
-			nothing(el.Url)
-		}
-	}
-}
-
-func BenchmarkEncodingJsonInterfaceMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data interface{}
-		json.Unmarshal(mediumFixture, &data)
-		m := data.(map[string]interface{})
-
-		person := m["person"].(map[string]interface{})
-		name := person["name"].(map[string]interface{})
-		github := person["github"].(map[string]interface{})
-		company := m["company"]
-		gravatar := person["gravatar"].(map[string]interface{})
-		avatars := gravatar["avatars"].([]interface{})
-
-		nothing(name["fullName"].(string), github["followers"].(float64), company)
-		for _, a := range avatars {
-			nothing(a.(map[string]interface{})["url"])
-		}
-	}
-}
-
-/*
-   github.com/Jeffail/gabs
-*/
-func BenchmarkGabsMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := gabs.ParseJSON(mediumFixture)
-		person := json.Path("person")
-		nothing(
-			person.Path("name.fullName").Data().(string),
-			person.Path("github.followers").Data().(float64),
-		)
-
-		json.Path("company").ChildrenMap()
-
-		arr, _ := person.Path("gravatar.avatars.url").Children()
-		for _, el := range arr {
-			nothing(el.String())
-		}
-	}
-}
-
-/*
-   github.com/bitly/go-simplejson
-*/
-func BenchmarkGoSimpleJsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := simplejson.NewJson(mediumFixture)
-		person := json.Get("person")
-		person.Get("name").Get("fullName").String()
-		person.Get("github").Get("followers").Float64()
-		json.Get("company")
-		arr, _ := person.Get("gravatar").Get("avatars").Array()
-
-		for _, el := range arr {
-			nothing(el.(map[string]interface{})["url"])
-		}
-	}
-}
-
-/*
-   github.com/pquerna/ffjson
-*/
-
-func BenchmarkFFJsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data MediumPayload
-		ffjson.Unmarshal(mediumFixture, &data)
-
-		nothing(data.Person.Name.FullName, data.Person.Github.Followers, data.Company)
-
-		for _, el := range data.Person.Gravatar.Avatars {
-			nothing(el.Url)
-		}
-	}
-}
-
-/*
-   github.com/bitly/go-simplejson
-*/
-
-func BenchmarkJasonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := jason.NewObjectFromBytes(mediumFixture)
-
-		json.GetString("person.name.fullName")
-		json.GetFloat64("person.github.followers")
-		json.GetObject("company")
-		arr, _ := json.GetObjectArray("person.gravatar.avatars")
-
-		for _, el := range arr {
-			el.GetString("url")
-		}
-
-		nothing()
-	}
-}
-
-/*
-   github.com/mreiferson/go-ujson
-*/
-
-func BenchmarkUjsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := ujson.NewFromBytes(mediumFixture)
-
-		person := json.Get("person")
-
-		person.Get("name").Get("fullName").String()
-		person.Get("github").Get("followers").Float64()
-		json.Get("company").String()
-
-		arr := person.Get("gravatar").Get("avatars").Array()
-		for _, el := range arr {
-			el.Get("url").String()
-		}
-
-		nothing()
-	}
-}
-
-/*
-   github.com/a8m/djson
-*/
-func BenchmarkDjsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		m, _ := djson.DecodeObject(mediumFixture)
-		person := m["person"].(map[string]interface{})
-		name := person["name"].(map[string]interface{})
-		github := person["github"].(map[string]interface{})
-		company := m["company"]
-		gravatar := person["gravatar"].(map[string]interface{})
-		avatars := gravatar["avatars"].([]interface{})
-
-		nothing(name["fullName"].(string), github["followers"].(float64), company)
-		for _, a := range avatars {
-			nothing(a.(map[string]interface{})["url"])
-		}
-	}
-}
-
-/*
-   github.com/ugorji/go/codec
-*/
-func BenchmarkUgirjiMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		decoder := codec.NewDecoderBytes(mediumFixture, new(codec.JsonHandle))
-		data := new(MediumPayload)
-		json.Unmarshal(mediumFixture, &data)
-		data.CodecDecodeSelf(decoder)
-
-		nothing(data.Person.Name.FullName, data.Person.Github.Followers, data.Company)
-
-		for _, el := range data.Person.Gravatar.Avatars {
-			nothing(el.Url)
-		}
-	}
-}
-
-/*
-   github.com/mailru/easyjson
-*/
-func BenchmarkEasyJsonMedium(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		lexer := &jlexer.Lexer{Data: mediumFixture}
-		data := new(MediumPayload)
-		data.UnmarshalEasyJSON(lexer)
-
-		nothing(data.Person.Name.FullName, data.Person.Github.Followers, data.Company)
-
-		for _, el := range data.Person.Gravatar.Avatars {
-			nothing(el.Url)
-		}
-	}
-}
--- a/benchmark/benchmark_small_payload_test.go
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
-   Each test should process 190 byte http log like json record
-   It should read multiple fields
-*/
-package benchmark
-
-import (
-	"encoding/json"
-	"testing"
-
-	"github.com/Jeffail/gabs"
-	"github.com/a8m/djson"
-	"github.com/antonholmquist/jason"
-	"github.com/bitly/go-simplejson"
-	"github.com/buger/jsonparser"
-	jlexer "github.com/mailru/easyjson/jlexer"
-	"github.com/mreiferson/go-ujson"
-	"github.com/pquerna/ffjson/ffjson"
-	"github.com/ugorji/go/codec"
-	// "fmt"
-	"bytes"
-	"errors"
-)
-
-// Just for emulating field access, so it will not throw "evaluated but not used"
-func nothing(_ ...interface{}) {}
-
-/*
-   github.com/buger/jsonparser
-*/
-func BenchmarkJsonParserSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		jsonparser.Get(smallFixture, "uuid")
-		jsonparser.GetInt(smallFixture, "tz")
-		jsonparser.Get(smallFixture, "ua")
-		jsonparser.GetInt(smallFixture, "st")
-
-		nothing()
-	}
-}
-
-func BenchmarkJsonParserEachKeyManualSmall(b *testing.B) {
-	paths := [][]string{
-		[]string{"uuid"},
-		[]string{"tz"},
-		[]string{"ua"},
-		[]string{"st"},
-	}
-
-	for i := 0; i < b.N; i++ {
-		jsonparser.EachKey(smallFixture, func(idx int, value []byte, vt jsonparser.ValueType, err error) {
-			switch idx {
-			case 0:
-				// jsonparser.ParseString(value)
-			case 1:
-				jsonparser.ParseInt(value)
-			case 2:
-				// jsonparser.ParseString(value)
-			case 3:
-				jsonparser.ParseInt(value)
-			}
-		}, paths...)
-	}
-}
-
-func BenchmarkJsonParserEachKeyStructSmall(b *testing.B) {
-	paths := [][]string{
-		[]string{"uuid"},
-		[]string{"tz"},
-		[]string{"ua"},
-		[]string{"st"},
-	}
-
-	for i := 0; i < b.N; i++ {
-		var data SmallPayload
-
-		jsonparser.EachKey(smallFixture, func(idx int, value []byte, vt jsonparser.ValueType, err error) {
-			switch idx {
-			case 0:
-				data.Uuid, _ = jsonparser.ParseString(value)
-			case 1:
-				v, _ := jsonparser.ParseInt(value)
-				data.Tz = int(v)
-			case 2:
-				data.Ua, _ = jsonparser.ParseString(value)
-			case 3:
-				v, _ := jsonparser.ParseInt(value)
-				data.St = int(v)
-			}
-		}, paths...)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-func BenchmarkJsonParserObjectEachStructSmall(b *testing.B) {
-	uuidKey, tzKey, uaKey, stKey := []byte("uuid"), []byte("tz"), []byte("ua"), []byte("st")
-	errStop := errors.New("stop")
-
-	for i := 0; i < b.N; i++ {
-		var data SmallPayload
-
-		missing := 4
-
-		jsonparser.ObjectEach(smallFixture, func(key, value []byte, vt jsonparser.ValueType, off int) error {
-			switch {
-			case bytes.Equal(key, uuidKey):
-				data.Uuid, _ = jsonparser.ParseString(value)
-				missing--
-			case bytes.Equal(key, tzKey):
-				v, _ := jsonparser.ParseInt(value)
-				data.Tz = int(v)
-				missing--
-			case bytes.Equal(key, uaKey):
-				data.Ua, _ = jsonparser.ParseString(value)
-				missing--
-			case bytes.Equal(key, stKey):
-				v, _ := jsonparser.ParseInt(value)
-				data.St = int(v)
-				missing--
-			}
-
-			if missing == 0 {
-				return errStop
-			} else {
-				return nil
-			}
-		})
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-func BenchmarkJsonParserSetSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		jsonparser.Set(smallFixture, []byte(`"c90927dd-1588-4fe7-a14f-8a8950cfcbd8"`), "uuid")
-		jsonparser.Set(smallFixture, []byte("-3"), "tz")
-		jsonparser.Set(smallFixture, []byte(`"server_agent"`), "ua")
-		jsonparser.Set(smallFixture, []byte("3"), "st")
-
-		nothing()
-	}
-}
-
-func BenchmarkJsonParserDelSmall(b *testing.B) {
-	fixture := make([]byte, 0, len(smallFixture))
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		fixture = append(fixture[:0], smallFixture...)
-		fixture = jsonparser.Delete(fixture, "uuid")
-		fixture = jsonparser.Delete(fixture, "tz")
-		fixture = jsonparser.Delete(fixture, "ua")
-		fixture = jsonparser.Delete(fixture, "stt")
-
-		nothing()
-	}
-}
-
-/*
-   encoding/json
-*/
-func BenchmarkEncodingJsonStructSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data SmallPayload
-		json.Unmarshal(smallFixture, &data)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-func BenchmarkEncodingJsonInterfaceSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data interface{}
-		json.Unmarshal(smallFixture, &data)
-		m := data.(map[string]interface{})
-
-		nothing(m["uuid"].(string), m["tz"].(float64), m["ua"].(string), m["st"].(float64))
-	}
-}
-
-/*
-   github.com/Jeffail/gabs
-*/
-
-func BenchmarkGabsSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := gabs.ParseJSON(smallFixture)
-
-		nothing(
-			json.Path("uuid").Data().(string),
-			json.Path("tz").Data().(float64),
-			json.Path("ua").Data().(string),
-			json.Path("st").Data().(float64),
-		)
-	}
-}
-
-/*
-   github.com/bitly/go-simplejson
-*/
-
-func BenchmarkGoSimplejsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := simplejson.NewJson(smallFixture)
-
-		json.Get("uuid").String()
-		json.Get("tz").Float64()
-		json.Get("ua").String()
-		json.Get("st").Float64()
-
-		nothing()
-	}
-}
-
-func BenchmarkGoSimplejsonSetSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := simplejson.NewJson(smallFixture)
-
-		json.SetPath([]string{"uuid"}, "c90927dd-1588-4fe7-a14f-8a8950cfcbd8")
-		json.SetPath([]string{"tz"}, -3)
-		json.SetPath([]string{"ua"}, "server_agent")
-		json.SetPath([]string{"st"}, 3)
-
-		nothing()
-	}
-}
-
-/*
-   github.com/pquerna/ffjson
-*/
-
-func BenchmarkFFJsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		var data SmallPayload
-		ffjson.Unmarshal(smallFixture, &data)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-/*
-   github.com/bitly/go-simplejson
-*/
-
-func BenchmarkJasonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := jason.NewObjectFromBytes(smallFixture)
-
-		json.GetString("uuid")
-		json.GetFloat64("tz")
-		json.GetString("ua")
-		json.GetFloat64("st")
-
-		nothing()
-	}
-}
-
-/*
-   github.com/mreiferson/go-ujson
-*/
-func BenchmarkUjsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		json, _ := ujson.NewFromBytes(smallFixture)
-
-		json.Get("uuid").String()
-		json.Get("tz").Float64()
-		json.Get("ua").String()
-		json.Get("st").Float64()
-
-		nothing()
-	}
-}
-
-/*
-   github.com/a8m/djson
-*/
-func BenchmarkDjsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		m, _ := djson.DecodeObject(smallFixture)
-		nothing(m["uuid"].(string), m["tz"].(float64), m["ua"].(string), m["st"].(float64))
-	}
-}
-
-/*
-   github.com/ugorji/go/codec
-*/
-func BenchmarkUgirjiSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		decoder := codec.NewDecoderBytes(smallFixture, new(codec.JsonHandle))
-		data := new(SmallPayload)
-		data.CodecDecodeSelf(decoder)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
-
-/*
-   github.com/mailru/easyjson
-*/
-func BenchmarkEasyJsonSmall(b *testing.B) {
-	for i := 0; i < b.N; i++ {
-		lexer := &jlexer.Lexer{Data: smallFixture}
-		data := new(SmallPayload)
-		data.UnmarshalEasyJSON(lexer)
-
-		nothing(data.Uuid, data.Tz, data.Ua, data.St)
-	}
-}
--- a/benchmark/benchmark_delete_test.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package benchmark
-
-import (
-	"testing"
-
-	"github.com/buger/jsonparser"
-)
-
-func BenchmarkDeleteSmall(b *testing.B) {
-	b.ReportAllocs()
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		data1 := []byte(`{ "instanceId": 1, "ip": "10.10.10.10", "services": [ { "id": 1, "name": "srv1" } ] }`)
-		_ = jsonparser.Delete(data1, "services")
-	}
-}
-
-func BenchmarkDeleteNested(b *testing.B) {
-	b.ReportAllocs()
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		data1 := []byte(`{ "instanceId": 1, "ip": "10.10.10.10", "services": [ { "id": 1, "name": "srv1" } ] }`)
-		_ = jsonparser.Delete(data1, "services", "id")
-	}
-}
-
-func BenchmarkDeleteLarge(b *testing.B) {
-	b.ReportAllocs()
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		data1 := []byte(`{"adsEnabled":true,"assetGroup":{"id":"4131","logoURL":"https://www.gannett-cdn.com/sites/usatoday/images/blogs/talkingtech/logo_front_v2.png","name":"talkingtech","siteCode":"USAT","siteId":"1","siteName":"USA TODAY","sstsId":"c67ad92a-3c9b-4817-9030-9357a9c2a86e","type":"blog","URL":"/tech/talkingtech"},"authoringBehavior":"text","authoringTypeCode":"blog","awsPath":"tech/talkingtech","backfillDate":"2018-10-30T14:56:31.522Z","byline":"Mike Snider","contentProtectionState":"free","contentSourceCode":"USAT","contributors":[{"id":"1071","name":"Mike Snider"}],"createDate":"2018-10-30T13:58:41.194Z","createSystem":"Presto Next","createUser":"msnider","eventDate":"2018-10-30T15:09:50.43Z","excludeFromMobile":false,"fronts":[{"id":"206","name":"tech","recommendedDate":"2018-10-30T15:09:50.399Z","type":"section-front"},{"id":"1012186","name":"tech_talkingtech","recommendedDate":"2018-10-30T15:09:50.399Z","type":"section-front"},{"id":"196","name":"money","recommendedDate":"2018-10-30T15:09:50.399Z","type":"section-front"},{"id":"156","name":"home","recommendedDate":"2018-10-30T15:09:50.399Z","type":"section-front"},{"id":"156","name":"home","recommendedDate":"2018-10-30T15:09:50.399Z","type":"section-front"}],"geoTag":{"attributes":{"lat":"","long":""},"id":""},"headline":"'Red Dead Redemption 2' rakes in $725M for Rockstar Games in blockbuster weekend debut","id":"1817435002","initialPublishDate":"2018-10-30T14:56:31.522Z","isEvergreen":false,"links":{"assets":[{"id":"1763879002","overrides":{},"position":1,"relationshipTypeFlags":"PromoImage"},{"id":"1764652002","overrides":{},"position":2,"relationshipTypeFlags":"Undefined"},{"id":"1765924002","overrides":{},"position":3,"relationshipTypeFlags":"Undefined"}],"photoId":"1763879002"},"pageURL":{"long":"http://www.usatoday.com/story/tech/talkingtech/2018/10/30/red-dead-redemption-2-makes-725-million-debut-rockstar-games/1817435002/","short":"http://www.usatoday.com/story/tech/talkingtech/2018/10/30/red-dead-redemption-2-makes-725-million-debut-rockstar-games/1817435002/"},"promoBrief":"Video game \"Red Dead Redemption 2\" corralled blockbuster sales of $725 million in its first three days, according to publisher Rockstar Games.","propertyDisplayName":"USA TODAY","propertyId":"1","propertyName":"USATODAY","publication":"USA TODAY","publishDate":"2018-10-30T15:09:50.399Z","publishSystem":"authoring","publishUser":"geronimo-publish-handler","readerCommentsEnabled":false,"schemaVersion":"0.11.20","shortHeadline":"'Red Dead Redemption 2' corrals $725M in sales","source":"USA TODAY","ssts":{"leafName":"talkingtech","path":"tech/talkingtech","section":"tech","subsection":"talkingtech","taxonomyEntityDisplayName":"Talking Tech","topic":"","subtopic":""},"statusName":"published","tags":[{"id":"855b0686-b2d8-4d98-b5f4-fcacf713047b","isPrimary":true,"name":"Talking Tech","path":"USAT TOPICS/USAT Science and technology/Talking Tech","taggingStatus":"UserTagged","vocabulary":"Topics"},{"id":"5dd5b5f2-9594-4aae-83c8-1ebb8aa50767","name":"Rockstar Games","path":"Candidates/Rockstar Games","taggingStatus":"UserTagged","vocabulary":"Companies"},{"id":"ceff0ffa-451d-46ae-8c4f-f958264b165e","name":"Video Games","path":"Consumer Products/Video Games","taggingStatus":"UserTagged","vocabulary":"Subjects"},{"id":"d59ddfbc-2afe-40e3-a9a2-5debe530dc5f","name":"Redemption","path":"Religious Organizations/Redemption","taggingStatus":"AutoTagged","vocabulary":"Organizations"},{"id":"09f4e1a7-50e7-4fc5-b318-d300acc4718f","name":"Success","path":"Emotions/Success","taggingStatus":"AutoTagged","vocabulary":"SubjectCodes"},{"id":"7095bb07-b172-434b-a4eb-8856263ad949","name":"Overall Positive","path":"Emotions/Overall Positive","taggingStatus":"AutoTagged","vocabulary":"SubjectCodes"},{"id":"d2cb2465-3a24-4104-8569-31785b515f62","name":"Sony","path":"Corporations/Sony","taggingStatus":"AutoTagged","vocabulary":"Companies"},{"id":"9b993d1c-2a6d-4279-acb3-ecac95d77320","name":"Amusement","path":"Emotions/Amusement","taggingStatus":"AutoTagged","vocabulary":"SubjectCodes"}],"title":"Red Dead Redemption 2 makes $725 million in debut for Rockstar Games","updateDate":"2018-10-30T15:09:50.43Z","updateUser":"mhayes","aggregateId":"acba765c-c573-42af-929f-26ea5920b932","body":{"desktop":[{"type":"asset","value":"1763879002"},{"type":"text","value":"<p>Rockstar Games has another hard-boiled hit on its hands.</p>"},{"type":"text","value":"<p>Old West adventure game &quot;Red Dead Redemption 2,&quot; which landed Friday, lassoed $725 million in sales worldwide in its first three days.</p>"},{"type":"text","value":"<p>That places the massive explorable open-world game&nbsp;as the&nbsp;No. 2 game out of the gate, just behind Rockstar&#39;s &quot;Grand Theft Auto V,&quot; the biggest seller of all time, which took in $1 billion in its first three days when it launched  on Sept. 17, 2013.</p>"},{"type":"text","value":"<p>&quot;GTA V&quot; has gone on to make more money than any other single game title, selling nearly 100 million copies and reaping $6 billion in revenue, according to <a href=\"https://www.marketwatch.com/story/this-violent-videogame-has-made-more-money-than-any-movie-ever-2018-04-06\">MarketWatch</a>.</p>"},{"type":"text","value":"<p>The&nbsp;three-day start makes &quot;Red Dead Redemption 2&quot; the single-biggest opening weekend in &quot;the history of entertainment,&quot; Rockstar said&nbsp;in a press release detailing the game&#39;s achievements. That means the three-day sales for the game, prices of which start at $59.99 (rated Mature for those 17-up), surpasses opening weekends for blockbuster movies such as &quot;Avengers: Infinity War&quot; and &quot;Star Wars: The Force Awakens.&quot;</p>"},{"type":"text","value":"<p><span class=\"exclude-from-newsgate\"><strong style=\"margin-right:3px;\">More: </strong><a href=\"http://www.usatoday.com/story/tech/gaming/2018/10/26/red-dead-redemption-2-rockstar-games-western-classic/1650295002/\">&#39;Red Dead Redemption 2&#39;: First impressions from once upon a time in the West</a></span><br/>\n<br/>\n<span class=\"exclude-from-newsgate\"><strong style=\"margin-right:3px;\">More: </strong><a href=\"http://www.usatoday.com/story/tech/talkingtech/2018/10/30/sony-playstation-classic-games-list/1816900002/\">Sony lists the 20 games coming to PlayStation Classic retro video game console</a></span></p>"},{"type":"text","value":"<p>&quot;Red Dead Redemption 2&quot; also tallied the biggest full game sales marks for one and for three days on Sony&#39;s PlayStation Network, Rockstar said. It was also the most preordered game on Sony&#39;s online network.</p>"},{"type":"text","value":"<p>Reviews for the game have rated it&nbsp;among the best&nbsp;ever. It&nbsp;earned a 97 on Metacritic, earning it a tie for No. 6 all-time, along with games such as &quot;Super Mario Galaxy&quot; and &quot;GTA V.&quot;&nbsp;&nbsp;</p>"},{"type":"text","value":"<p>Piper Jaffray &amp; Co.&nbsp;senior research analyst&nbsp;Michael Olson estimated Rockstar sold about 11 million copies in its first three days. That means Olson&#39;s initial&nbsp;estimate of Rockstar selling 15.5 million copies of &quot;Red Dead 2&quot; in its fiscal year, which ends in March 2019, &quot;appears conservative,&quot; he said in a note to investors Tuesday.</p>"},{"type":"text","value":"<p>&quot;Clearly, with RDR2 first weekend sell-through exceeding CoD: Black Ops 4, it now appears RDR2 estimates may have been overly conservative,&quot; Olson wrote.</p>"},{"type":"text","value":"<p>Shares of Rockstar&rsquo;s parent company Take-Two Interactive (<a href=\"https://www.usatoday.com/money/lookup/stocks/TTWO/\">TTWO</a>) rose about 8 percent in early trading Tuesday to $120.55.</p>"},{"type":"asset","value":"1765924002"},{"type":"text","value":"<p><em>Follow USA TODAY reporter Mike Snider on Twitter: <a href=\"http://twitter.com/MikeSnider\">@MikeSnider</a>.</em></p>"}],"mobile":[{"type":"asset","value":"1763879002"},{"type":"text","value":"<p>Rockstar Games has another hard-boiled hit on its hands.</p>"},{"type":"text","value":"<p>Old West adventure game &quot;Red Dead Redemption 2,&quot; which landed Friday, lassoed $725 million in sales worldwide in its first three days.</p>"},{"type":"text","value":"<p>That places the massive explorable open-world game&nbsp;as the&nbsp;No. 2 game out of the gate, just behind Rockstar&#39;s &quot;Grand Theft Auto V,&quot; the biggest seller of all time, which took in $1 billion in its first three days when it launched  on Sept. 17, 2013.</p>"},{"type":"text","value":"<p>&quot;GTA V&quot; has gone on to make more money than any other single game title, selling nearly 100 million copies and reaping $6 billion in revenue, according to <a href=\"https://www.marketwatch.com/story/this-violent-videogame-has-made-more-money-than-any-movie-ever-2018-04-06\">MarketWatch</a>.</p>"},{"type":"text","value":"<p>The&nbsp;three-day start makes &quot;Red Dead Redemption 2&quot; the single-biggest opening weekend in &quot;the history of entertainment,&quot; Rockstar said&nbsp;in a press release detailing the game&#39;s achievements. That means the three-day sales for the game, prices of which start at $59.99 (rated Mature for those 17-up), surpasses opening weekends for blockbuster movies such as &quot;Avengers: Infinity War&quot; and &quot;Star Wars: The Force Awakens.&quot;</p>"},{"type":"text","value":"<p><span class=\"exclude-from-newsgate\"><strong style=\"margin-right:3px;\">More: </strong><a href=\"http://www.usatoday.com/story/tech/gaming/2018/10/26/red-dead-redemption-2-rockstar-games-western-classic/1650295002/\">&#39;Red Dead Redemption 2&#39;: First impressions from once upon a time in the West</a></span><br/>\n<br/>\n<span class=\"exclude-from-newsgate\"><strong style=\"margin-right:3px;\">More: </strong><a href=\"http://www.usatoday.com/story/tech/talkingtech/2018/10/30/sony-playstation-classic-games-list/1816900002/\">Sony lists the 20 games coming to PlayStation Classic retro video game console</a></span></p>"},{"type":"text","value":"<p>&quot;Red Dead Redemption 2&quot; also tallied the biggest full game sales marks for one and for three days on Sony&#39;s PlayStation Network, Rockstar said. It was also the most preordered game on Sony&#39;s online network.</p>"},{"type":"text","value":"<p>Reviews for the game have rated it&nbsp;among the best&nbsp;ever. It&nbsp;earned a 97 on Metacritic, earning it a tie for No. 6 all-time, along with games such as &quot;Super Mario Galaxy&quot; and &quot;GTA V.&quot;&nbsp;&nbsp;</p>"},{"type":"text","value":"<p>Piper Jaffray &amp; Co.&nbsp;senior research analyst&nbsp;Michael Olson estimated Rockstar sold about 11 million copies in its first three days. That means Olson&#39;s initial&nbsp;estimate of Rockstar selling 15.5 million copies of &quot;Red Dead 2&quot; in its fiscal year, which ends in March 2019, &quot;appears conservative,&quot; he said in a note to investors Tuesday.</p>"},{"type":"text","value":"<p>&quot;Clearly, with RDR2 first weekend sell-through exceeding CoD: Black Ops 4, it now appears RDR2 estimates may have been overly conservative,&quot; Olson wrote.</p>"},{"type":"text","value":"<p>Shares of Rockstar&rsquo;s parent company Take-Two Interactive (<a href=\"https://www.usatoday.com/money/lookup/stocks/TTWO/\">TTWO</a>) rose about 8 percent in early trading Tuesday to $120.55.</p>"},{"type":"asset","value":"1765924002"},{"type":"text","value":"<p><em>Follow USA TODAY reporter Mike Snider on Twitter: <a href=\"http://twitter.com/MikeSnider\">@MikeSnider</a>.</em></p>"}]},"fullText":"<p><img assetid=\"1763879002\" assettype=\"image\"/></p>\n\n<p>Rockstar Games has another hard-boiled hit on its hands.</p>\n\n<p>Old West adventure game &quot;Red Dead Redemption 2,&quot; which landed Friday, lassoed $725 million in sales worldwide in its first three days.</p>\n\n<p>That places the massive explorable open-world game&nbsp;as the&nbsp;No. 2 game out of the gate, just behind Rockstar&#39;s &quot;Grand Theft Auto V,&quot; the biggest seller of all time, which took in $1 billion in its first three days when it launched  on Sept. 17, 2013.</p>\n\n<p>&quot;GTA V&quot; has gone on to make more money than any other single game title, selling nearly 100 million copies and reaping $6 billion in revenue, according to <a href=\"https://www.marketwatch.com/story/this-violent-videogame-has-made-more-money-than-any-movie-ever-2018-04-06\">MarketWatch</a>.</p>\n\n<p>The&nbsp;three-day start makes &quot;Red Dead Redemption 2&quot; the single-biggest opening weekend in &quot;the history of entertainment,&quot; Rockstar said&nbsp;in a press release detailing the game&#39;s achievements. That means the three-day sales for the game, prices of which start at $59.99 (rated Mature for those 17-up), surpasses opening weekends for blockbuster movies such as &quot;Avengers: Infinity War&quot; and &quot;Star Wars: The Force Awakens.&quot;</p>\n\n<p><span class=\"exclude-from-newsgate\"><strong style=\"margin-right:3px;\">More: </strong><a href=\"http://www.usatoday.com/story/tech/gaming/2018/10/26/red-dead-redemption-2-rockstar-games-western-classic/1650295002/\">&#39;Red Dead Redemption 2&#39;: First impressions from once upon a time in the West</a></span><br/>\n<br/>\n<span class=\"exclude-from-newsgate\"><strong style=\"margin-right:3px;\">More: </strong><a href=\"http://www.usatoday.com/story/tech/talkingtech/2018/10/30/sony-playstation-classic-games-list/1816900002/\">Sony lists the 20 games coming to PlayStation Classic retro video game console</a></span></p>\n\n<p>&quot;Red Dead Redemption 2&quot; also tallied the biggest full game sales marks for one and for three days on Sony&#39;s PlayStation Network, Rockstar said. It was also the most preordered game on Sony&#39;s online network.</p>\n\n<p>Reviews for the game have rated it&nbsp;among the best&nbsp;ever. It&nbsp;earned a 97 on Metacritic, earning it a tie for No. 6 all-time, along with games such as &quot;Super Mario Galaxy&quot; and &quot;GTA V.&quot;&nbsp;&nbsp;</p>\n\n<p>Piper Jaffray &amp; Co.&nbsp;senior research analyst&nbsp;Michael Olson estimated Rockstar sold about 11 million copies in its first three days. That means Olson&#39;s initial&nbsp;estimate of Rockstar selling 15.5 million copies of &quot;Red Dead 2&quot; in its fiscal year, which ends in March 2019, &quot;appears conservative,&quot; he said in a note to investors Tuesday.</p>\n\n<p>&quot;Clearly, with RDR2 first weekend sell-through exceeding CoD: Black Ops 4, it now appears RDR2 estimates may have been overly conservative,&quot; Olson wrote.</p>\n\n<p>Shares of Rockstar&rsquo;s parent company Take-Two Interactive (<a href=\"https://www.usatoday.com/money/lookup/stocks/TTWO/\">TTWO</a>) rose about 8 percent in early trading Tuesday to $120.55.</p>\n\n<p><img assetid=\"1765924002\" assettype=\"embed\"/></p>\n\n<p><em>Follow USA TODAY reporter Mike Snider on Twitter: <a href=\"http://twitter.com/MikeSnider\">@MikeSnider</a>.</em></p>\n","layoutPriorityAssetId":"1763879002","seoTitle":"Red Dead Redemption 2 makes $725 million in debut for Rockstar Games","type":"text","versionHash":"fe60306b2e7574a8d65e690753deb666"}`)
-		_ = jsonparser.Delete(data1, "body")
-	}
-}
--- a/benchmark/benchmark_set_test.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package benchmark
-
-import (
-	"github.com/buger/jsonparser"
-	"strconv"
-	"testing"
-)
-
-func BenchmarkSetLarge(b *testing.B) {
-	b.ReportAllocs()
-
-	keyPath := make([]string, 20000)
-	for i := range keyPath {
-		keyPath[i] = "keyPath" + strconv.Itoa(i)
-	}
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		_, _ = jsonparser.Set(largeFixture, largeFixture, keyPath...)
-	}
-}
