Add Pokestop farm routine

FeroxRev [2016-07-19 03:16:08]
Add Pokestop farm routine
Filename
PokemonGo/RocketAPI/Client.cs
PokemonGo/RocketAPI/Console/Program.cs
PokemonGo/RocketAPI/Enums/MiscEnums.cs
PokemonGo/RocketAPI/Enums/RequestType.cs
PokemonGo/RocketAPI/GeneratedCode/EncounterRequest.cs
PokemonGo/RocketAPI/GeneratedCode/FortDetailResponse.cs
PokemonGo/RocketAPI/GeneratedCode/FortSearchResponse.cs
PokemonGo/RocketAPI/GeneratedCode/EncounterResponse.cs
PokemonGo/RocketAPI/GeneratedCode/PlayerUpdateResponse.cs
PokemonGo/RocketAPI/GeneratedCode/Request.cs
PokemonGo/RocketAPI/Helpers/Utils.cs
PokemonGo/RocketAPI/PokemonGo.RocketAPI.csproj
PokemonGo/RocketAPI/Proto/EncounterRequest.proto
PokemonGo/RocketAPI/Proto/FortDetailResponse.proto
PokemonGo/RocketAPI/Proto/FortSearchResponse.proto
PokemonGo/RocketAPI/Proto/EncounterResponse.proto
PokemonGo/RocketAPI/Proto/PlayerUpdateResponse.proto
PokemonGo/RocketAPI/Proto/Request.proto
diff --git a/PokemonGo/RocketAPI/Client.cs b/PokemonGo/RocketAPI/Client.cs
index 19bee0a..a1d5ce4 100644
--- a/PokemonGo/RocketAPI/Client.cs
+++ b/PokemonGo/RocketAPI/Client.cs
@@ -30,8 +30,13 @@ namespace PokemonGo.RocketAPI
         private string _apiUrl;
         private Request.Types.UnknownAuth _unknownAuth;

-        public Client()
+        private double _currentLat;
+        private double _currentLng;
+
+        public Client(double lat, double lng)
         {
+            SetCoordinates(lat, lng);
+
             //Setup HttpClient and create default headers
             HttpClientHandler handler = new HttpClientHandler()
             {
@@ -46,6 +51,12 @@ namespace PokemonGo.RocketAPI
             _httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded");
         }

+        private void SetCoordinates(double lat, double lng)
+        {
+            _currentLat = lat;
+            _currentLng = lng;
+        }
+
         public async Task LoginGoogle(string deviceId, string email, string refreshToken)
         {
             var handler = new HttpClientHandler()
@@ -126,10 +137,22 @@ namespace PokemonGo.RocketAPI
             _accessToken = HttpUtility.ParseQueryString(tokenData)["access_token"];
             _authType = AuthType.Ptc;
         }
+        public async Task<PlayerUpdateResponse> UpdatePlayerLocation(double lat, double lng)
+        {
+            this.SetCoordinates(lat, lng);
+            var customRequest = new Request.Types.PlayerUpdateProto()
+            {
+                Lat = Utils.FloatAsUlong(_currentLat),
+                Lng = Utils.FloatAsUlong(_currentLng)
+            };

+            var updateRequest = RequestBuilder.GetRequest(_unknownAuth, _currentLat, _currentLng, 10, new Request.Types.Requests() { Type = (int)RequestType.PLAYER_UPDATE, Message = customRequest.ToByteString()});
+            var updateResponse = await _httpClient.PostProto<Request, PlayerUpdateResponse>($"https://{_apiUrl}/rpc", updateRequest);
+            return updateResponse;
+        }
         public async Task<ProfileResponse> GetServer()
         {
-            var serverRequest = RequestBuilder.GetInitialRequest(_accessToken, _authType, Settings.DefaultLatitude, Settings.DefaultLongitude, 30, RequestType.Profile, RequestType.Unknown126, RequestType.Time, RequestType.Unknown129, RequestType.Settings);
+            var serverRequest = RequestBuilder.GetInitialRequest(_accessToken, _authType, _currentLat, _currentLng, 10, RequestType.GET_PLAYER, RequestType.GET_HATCHED_OBJECTS, RequestType.GET_INVENTORY, RequestType.CHECK_AWARDED_BADGES, RequestType.DOWNLOAD_SETTINGS);
             var serverResponse = await _httpClient.PostProto<Request, ProfileResponse>(Resources.RpcUrl, serverRequest);
             _apiUrl = serverResponse.ApiUrl;
             return serverResponse;
@@ -137,7 +160,7 @@ namespace PokemonGo.RocketAPI

         public async Task<ProfileResponse> GetProfile()
         {
-            var profileRequest = RequestBuilder.GetInitialRequest(_accessToken, _authType, Settings.DefaultLatitude, Settings.DefaultLongitude, 30, new Request.Types.Requests() { Type = (int)RequestType.Profile });
+            var profileRequest = RequestBuilder.GetInitialRequest(_accessToken, _authType, _currentLat, _currentLng, 10, new Request.Types.Requests() { Type = (int)RequestType.GET_PLAYER });
             var profileResponse = await _httpClient.PostProto<Request, ProfileResponse>($"https://{_apiUrl}/rpc", profileRequest);
             _unknownAuth = new Request.Types.UnknownAuth()
             {
@@ -150,30 +173,65 @@ namespace PokemonGo.RocketAPI

         public async Task<SettingsResponse> GetSettings()
         {
-            var settingsRequest = RequestBuilder.GetRequest(_unknownAuth, Settings.DefaultLatitude, Settings.DefaultLongitude, 30, RequestType.Settings);
+            var settingsRequest = RequestBuilder.GetRequest(_unknownAuth, _currentLat, _currentLng, 10, RequestType.DOWNLOAD_SETTINGS);
             return await _httpClient.PostProto<Request, SettingsResponse>($"https://{_apiUrl}/rpc", settingsRequest);
         }
-        public async Task<EncounterResponse> GetEncounters()
+        public async Task<MapObjectsResponse> GetMapObjects()
         {
-            var customRequest = new EncounterRequest.Types.RequestsMessage()
+            var customRequest = new Request.Types.MapObjectsRequest()
             {
                 CellIds =
                     ByteString.CopyFrom(
-                        ProtoHelper.EncodeUlongList(S2Helper.GetNearbyCellIds(Settings.DefaultLongitude,
-                            Settings.DefaultLatitude))),
-                Latitude = Utils.FloatAsUlong(Settings.DefaultLatitude),
-                Longitude = Utils.FloatAsUlong(Settings.DefaultLongitude),
+                        ProtoHelper.EncodeUlongList(S2Helper.GetNearbyCellIds(_currentLng,
+                            _currentLat))),
+                Latitude = Utils.FloatAsUlong(_currentLat),
+                Longitude = Utils.FloatAsUlong(_currentLng),
                 Unknown14 = ByteString.CopyFromUtf8("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")
             };

-            var encounterRequest = RequestBuilder.GetRequest(_unknownAuth, Settings.DefaultLatitude, Settings.DefaultLongitude, 30,
-                new Request.Types.Requests() { Type = (int)RequestType.Encounters, Message = customRequest.ToByteString() },
-                new Request.Types.Requests() { Type = (int)RequestType.Unknown126 },
-                new Request.Types.Requests() { Type = (int)RequestType.Time, Message = new EncounterRequest.Types.Time() { Time_ = DateTime.UtcNow.ToUnixTime() }.ToByteString() },
-                new Request.Types.Requests() { Type = (int)RequestType.Unknown129 },
-                new Request.Types.Requests() { Type = (int)RequestType.Settings, Message = new EncounterRequest.Types.SettingsGuid() { Guid = ByteString.CopyFromUtf8("4a2e9bc330dae60e7b74fc85b98868ab4700802e")}.ToByteString() });
+            var mapRequest = RequestBuilder.GetRequest(_unknownAuth, _currentLat, _currentLng, 10,
+                new Request.Types.Requests() { Type = (int)RequestType.GET_MAP_OBJECTS, Message = customRequest.ToByteString() },
+                new Request.Types.Requests() { Type = (int)RequestType.GET_HATCHED_OBJECTS },
+                new Request.Types.Requests() { Type = (int)RequestType.GET_INVENTORY, Message = new Request.Types.Time() { Time_ = DateTime.UtcNow.ToUnixTime() }.ToByteString() },
+                new Request.Types.Requests() { Type = (int)RequestType.CHECK_AWARDED_BADGES },
+                new Request.Types.Requests() { Type = (int)RequestType.DOWNLOAD_SETTINGS, Message = new Request.Types.SettingsGuid() { Guid = ByteString.CopyFromUtf8("4a2e9bc330dae60e7b74fc85b98868ab4700802e")}.ToByteString() });
+
+            return await _httpClient.PostProto<Request, MapObjectsResponse>($"https://{_apiUrl}/rpc", mapRequest);
+        }
+
+        public async Task<FortDetailResponse> GetFort(string fortId, double fortLat, double fortLng)
+        {
+            var customRequest = new Request.Types.FortDetailsRequest()
+            {
+                Id = ByteString.CopyFromUtf8(fortId),
+                Latitude = Utils.FloatAsUlong(fortLat),
+                Longitude = Utils.FloatAsUlong(fortLng),
+            };
+
+            var fortDetailRequest = RequestBuilder.GetRequest(_unknownAuth, _currentLat, _currentLng, 10, new Request.Types.Requests() { Type = (int)RequestType.FORT_DETAILS, Message = customRequest.ToByteString() });
+            return await _httpClient.PostProto<Request, FortDetailResponse>($"https://{_apiUrl}/rpc", fortDetailRequest);
+        }
+
+        /*num Holoholo.Rpc.Types.FortSearchOutProto.Result {
+         NO_RESULT_SET = 0;
+         SUCCESS = 1;
+         OUT_OF_RANGE = 2;
+         IN_COOLDOWN_PERIOD = 3;
+         INVENTORY_FULL = 4;
+        }*/
+        public async Task<FortSearchResponse> SearchFort(string fortId, double fortLat, double fortLng)
+        {
+            var customRequest = new Request.Types.FortSearchRequest()
+            {
+                Id = ByteString.CopyFromUtf8(fortId),
+                FortLatDegrees = Utils.FloatAsUlong(fortLat),
+                FortLngDegrees = Utils.FloatAsUlong(fortLng),
+                PlayerLatDegrees = Utils.FloatAsUlong(_currentLat),
+                PlayerLngDegrees = Utils.FloatAsUlong(_currentLng)
+            };

-            return await _httpClient.PostProto<Request, EncounterResponse>($"https://{_apiUrl}/rpc", encounterRequest);
+            var fortDetailRequest = RequestBuilder.GetRequest(_unknownAuth, _currentLat, _currentLng, 30, new Request.Types.Requests() { Type = (int)RequestType.FORT_SEARCH, Message = customRequest.ToByteString() });
+            return await _httpClient.PostProto<Request, FortSearchResponse>($"https://{_apiUrl}/rpc", fortDetailRequest);
         }

     }
diff --git a/PokemonGo/RocketAPI/Console/Program.cs b/PokemonGo/RocketAPI/Console/Program.cs
index c7b4541..68a23a9 100644
--- a/PokemonGo/RocketAPI/Console/Program.cs
+++ b/PokemonGo/RocketAPI/Console/Program.cs
@@ -1,10 +1,12 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Net.Http;
 using System.Text;
 using System.Threading.Tasks;
 using Google.Protobuf;
 using PokemonGo.RocketAPI.Enums;
+using PokemonGo.RocketAPI.Extensions;
 using PokemonGo.RocketAPI.GeneratedCode;
 using PokemonGo.RocketAPI.Helpers;

@@ -20,14 +22,43 @@ namespace PokemonGo.RocketAPI.Console

         static async void Execute()
         {
-            var client = new Client();
+            var client = new Client(Settings.DefaultLatitude, Settings.DefaultLongitude);

-            await client.LoginPtc("Sekret-username", "Sekret-password");
-            //await client.LoginGoogle(Settings.DeviceId, Settings.Email, Settings.LongDurationToken);
+            //await client.LoginPtc("FeroxRev", "Sekret");
+            await client.LoginGoogle(Settings.DeviceId, Settings.Email, Settings.LongDurationToken);
             var serverResponse = await client.GetServer();
             var profile = await client.GetProfile();
             var settings = await client.GetSettings();
-            var encounters = await client.GetEncounters();
+            var mapObjects = await client.GetMapObjects();
+
+            await ExecuteFarmingPokestops(client);
+        }
+
+        private static async Task ExecuteFarmingPokestops(Client client)
+        {
+            var mapObjects = await client.GetMapObjects();
+
+            var pokeStops = mapObjects.Payload[0].Profile.SelectMany(i => i.Fort).Where(i => i.FortType == (int)MiscEnums.FortType.CHECKPOINT && i.CooldownCompleteMs < DateTime.UtcNow.ToUnixTime());
+
+            foreach (var pokeStop in pokeStops)
+            {
+                var update = await client.UpdatePlayerLocation(pokeStop.Latitude, pokeStop.Longitude);
+                var fortInfo = await client.GetFort(pokeStop.FortId, pokeStop.Latitude, pokeStop.Longitude);
+                var fortSearch = await client.SearchFort(pokeStop.FortId, pokeStop.Latitude, pokeStop.Longitude);
+                var bag = fortSearch.Payload[0];
+
+                System.Console.WriteLine($"Farmed XP: {bag.XpAwarded}, Gems: { bag.GemsAwarded}, Eggs: {bag.EggPokemon} Items: {GetFriendlyItemsString(bag.Items)}");
+                await Task.Delay(15000);
+            }
+        }
+
+        private static string GetFriendlyItemsString(IEnumerable<FortSearchResponse.Types.Item> items)
+        {
+            var sb = new StringBuilder();
+            foreach(var item in items)
+                sb.Append($"{item.ItemCount} x {(MiscEnums.Item)item.Item_}, ");
+
+            return sb.ToString();
         }
     }
 }
diff --git a/PokemonGo/RocketAPI/Enums/MiscEnums.cs b/PokemonGo/RocketAPI/Enums/MiscEnums.cs
new file mode 100644
index 0000000..8cb2890
--- /dev/null
+++ b/PokemonGo/RocketAPI/Enums/MiscEnums.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PokemonGo.RocketAPI.Enums
+{
+    public class MiscEnums
+    {
+        public enum FortType
+        {
+            GYM = 0,
+            CHECKPOINT = 1
+        }
+
+        public enum Item
+        {
+            ITEM_UNKNOWN = 0,
+            ITEM_POKE_BALL = 1,
+            ITEM_GREAT_BALL = 2,
+            ITEM_ULTRA_BALL = 3,
+            ITEM_MASTER_BALL = 4,
+            ITEM_POTION = 101,
+            ITEM_SUPER_POTION = 102,
+            ITEM_HYPER_POTION = 103,
+            ITEM_MAX_POTION = 104,
+            ITEM_REVIVE = 201,
+            ITEM_MAX_REVIVE = 202,
+            ITEM_LUCKY_EGG = 301,
+            ITEM_INCENSE_ORDINARY = 401,
+            ITEM_INCENSE_SPICY = 402,
+            ITEM_INCENSE_COOL = 403,
+            ITEM_INCENSE_FLORAL = 404,
+            ITEM_TROY_DISK = 501,
+            ITEM_X_ATTACK = 602,
+            ITEM_X_DEFENSE = 603,
+            ITEM_X_MIRACLE = 604,
+            ITEM_RAZZ_BERRY = 701,
+            ITEM_BLUK_BERRY = 702,
+            ITEM_NANAB_BERRY = 703,
+            ITEM_WEPAR_BERRY = 704,
+            ITEM_PINAP_BERRY = 705,
+            ITEM_SPECIAL_CAMERA = 801,
+            ITEM_INCUBATOR_BASIC_UNLIMITED = 901,
+            ITEM_INCUBATOR_BASIC = 902,
+            ITEM_POKEMON_STORAGE_UPGRADE = 1001,
+            ITEM_ITEM_STORAGE_UPGRADE = 1002
+        }
+    }
+}
\ No newline at end of file
diff --git a/PokemonGo/RocketAPI/Enums/RequestType.cs b/PokemonGo/RocketAPI/Enums/RequestType.cs
index e08fc87..9446697 100644
--- a/PokemonGo/RocketAPI/Enums/RequestType.cs
+++ b/PokemonGo/RocketAPI/Enums/RequestType.cs
@@ -8,11 +8,76 @@ namespace PokemonGo.RocketAPI.Enums
 {
     public enum RequestType
     {
-        Profile = 2,
-        Time = 4,
-        Settings = 5,
-        Encounters = 106,
-        Unknown126 = 126,
-        Unknown129 = 129
+        METHOD_UNSET = 0,
+        PLAYER_UPDATE = 1,
+        GET_PLAYER = 2,
+        GET_INVENTORY = 4,
+        DOWNLOAD_SETTINGS = 5,
+        DOWNLOAD_ITEM_TEMPLATES = 6,
+        DOWNLOAD_REMOTE_CONFIG_VERSION = 7,
+        FORT_SEARCH = 101,
+        ENCOUNTER = 102,
+        CATCH_POKEMON = 103,
+        FORT_DETAILS = 104,
+        ITEM_USE = 105,
+        GET_MAP_OBJECTS = 106,
+        FORT_DEPLOY_POKEMON = 110,
+        FORT_RECALL_POKEMON = 111,
+        RELEASE_POKEMON = 112,
+        USE_ITEM_POTION = 113,
+        USE_ITEM_CAPTURE = 114,
+        USE_ITEM_FLEE = 115,
+        USE_ITEM_REVIVE = 116,
+        TRADE_SEARCH = 117,
+        TRADE_OFFER = 118,
+        TRADE_RESPONSE = 119,
+        TRADE_RESULT = 120,
+        GET_PLAYER_PROFILE = 121,
+        GET_ITEM_PACK = 122,
+        BUY_ITEM_PACK = 123,
+        BUY_GEM_PACK = 124,
+        EVOLVE_POKEMON = 125,
+        GET_HATCHED_OBJECTS = 126,
+        ENCOUNTER_TUTORIAL_COMPLETE = 127,
+        LEVEL_UP_REWARDS = 128,
+        CHECK_AWARDED_BADGES = 129,
+        USE_ITEM_GYM = 133,
+        GET_GYM_DETAILS = 134,
+        START_GYM_BATTLE = 135,
+        ATTACK_GYM = 136,
+        RECYCLE_INVENTORY_ITEM = 137,
+        COLLECT_DAILY_BONUS = 138,
+        USE_ITEM_XP_BOOST = 139,
+        USE_ITEM_EGG_INCUBATOR = 140,
+        USE_INCENSE = 141,
+        GET_INCENSE_POKEMON = 142,
+        INCENSE_ENCOUNTER = 143,
+        ADD_FORT_MODIFIER = 144,
+        DISK_ENCOUNTER = 145,
+        COLLECT_DAILY_DEFENDER_BONUS = 146,
+        UPGRADE_POKEMON = 147,
+        SET_FAVORITE_POKEMON = 148,
+        NICKNAME_POKEMON = 149,
+        EQUIP_BADGE = 150,
+        SET_CONTACT_SETTINGS = 151,
+        GET_ASSET_DIGEST = 300,
+        GET_DOWNLOAD_URLS = 301,
+        GET_SUGGESTED_CODENAMES = 401,
+        CHECK_CODENAME_AVAILABLE = 402,
+        CLAIM_CODENAME = 403,
+        SET_AVATAR = 404,
+        SET_PLAYER_TEAM = 405,
+        MARK_TUTORIAL_COMPLETE = 406,
+        LOAD_SPAWN_POINTS = 500,
+        ECHO = 666,
+        DEBUG_UPDATE_INVENTORY = 700,
+        DEBUG_DELETE_PLAYER = 701,
+        SFIDA_REGISTRATION = 800,
+        SFIDA_ACTION_LOG = 801,
+        SFIDA_CERTIFICATION = 802,
+        SFIDA_UPDATE = 803,
+        SFIDA_ACTION = 804,
+        SFIDA_DOWSER = 805,
+        SFIDA_CAPTURE = 806,
     }
 }
diff --git a/PokemonGo/RocketAPI/GeneratedCode/EncounterRequest.cs b/PokemonGo/RocketAPI/GeneratedCode/EncounterRequest.cs
deleted file mode 100644
index b6c5cc3..0000000
--- a/PokemonGo/RocketAPI/GeneratedCode/EncounterRequest.cs
+++ /dev/null
@@ -1,1425 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: EncounterRequest.proto
-#pragma warning disable 1591, 0612, 3021
-#region Designer generated code
-
-using pb = global::Google.Protobuf;
-using pbc = global::Google.Protobuf.Collections;
-using pbr = global::Google.Protobuf.Reflection;
-using scg = global::System.Collections.Generic;
-namespace PokemonGo.RocketAPI.GeneratedCode {
-
-  /// <summary>Holder for reflection information generated from EncounterRequest.proto</summary>
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class EncounterRequestReflection {
-
-    #region Descriptor
-    /// <summary>File descriptor for EncounterRequest.proto</summary>
-    public static pbr::FileDescriptor Descriptor {
-      get { return descriptor; }
-    }
-    private static pbr::FileDescriptor descriptor;
-
-    static EncounterRequestReflection() {
-      byte[] descriptorData = global::System.Convert.FromBase64String(
-          string.Concat(
-            "ChZFbmNvdW50ZXJSZXF1ZXN0LnByb3RvEiFQb2tlbW9uR28uUm9ja2V0QVBJ",
-            "LkdlbmVyYXRlZENvZGUilgYKEEVuY291bnRlclJlcXVlc3QSEAoIdW5rbm93",
-            "bjEYASABKAUSDgoGcnBjX2lkGAMgASgDEk4KCHJlcXVlc3RzGAQgAygLMjwu",
-            "UG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLkVuY291bnRlclJl",
-            "cXVlc3QuUmVxdWVzdHMSTgoIdW5rbm93bjYYBiABKAsyPC5Qb2tlbW9uR28u",
-            "Um9ja2V0QVBJLkdlbmVyYXRlZENvZGUuRW5jb3VudGVyUmVxdWVzdC5Vbmtu",
-            "b3duNhIQCghsYXRpdHVkZRgHIAEoBhIRCglsb25naXR1ZGUYCCABKAYSEAoI",
-            "YWx0aXR1ZGUYCSABKAYSRgoEYXV0aBgLIAEoCzI4LlBva2Vtb25Hby5Sb2Nr",
-            "ZXRBUEkuR2VuZXJhdGVkQ29kZS5FbmNvdW50ZXJSZXF1ZXN0LkF1dGgSEQoJ",
-            "dW5rbm93bjEyGAwgASgDGikKCFJlcXVlc3RzEgwKBHR5cGUYASABKAUSDwoH",
-            "bWVzc2FnZRgCIAEoDBpaCg9SZXF1ZXN0c01lc3NhZ2USDwoHY2VsbElkcxgB",
-            "IAEoDBIRCgl1bmtub3duMTQYAiABKAwSEAoIbGF0aXR1ZGUYAyABKAYSEQoJ",
-            "bG9uZ2l0dWRlGAQgASgGGhwKDFNldHRpbmdzR3VpZBIMCgRndWlkGAEgASgM",
-            "GhQKBFRpbWUSDAoEdGltZRgBIAEoAxocCghVbmtub3duMxIQCgh1bmtub3du",
-            "NBgBIAEoCRqTAQoIVW5rbm93bjYSEAoIdW5rbm93bjEYASABKAUSVwoIdW5r",
-            "bm93bjIYAiABKAsyRS5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENv",
-            "ZGUuRW5jb3VudGVyUmVxdWVzdC5Vbmtub3duNi5Vbmtub3duMhocCghVbmtu",
-            "b3duMhIQCgh1bmtub3duMRgBIAEoDBo/CgRBdXRoEhEKCXVua25vd243MRgB",
-            "IAEoDBIRCgl0aW1lc3RhbXAYAiABKAMSEQoJdW5rbm93bjczGAMgASgMYgZw",
-            "cm90bzM="));
-      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
-          new pbr::FileDescriptor[] { },
-          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Parser, new[]{ "Unknown1", "RpcId", "Requests", "Unknown6", "Latitude", "Longitude", "Altitude", "Auth", "Unknown12" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Requests), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Requests.Parser, new[]{ "Type", "Message" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.RequestsMessage), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.RequestsMessage.Parser, new[]{ "CellIds", "Unknown14", "Latitude", "Longitude" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.SettingsGuid), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.SettingsGuid.Parser, new[]{ "Guid" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Time), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Time.Parser, new[]{ "Time_" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown3), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown3.Parser, new[]{ "Unknown4" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6.Parser, new[]{ "Unknown1", "Unknown2" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6.Types.Unknown2), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6.Types.Unknown2.Parser, new[]{ "Unknown1" }, null, null, null)}),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Auth), global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Auth.Parser, new[]{ "Unknown71", "Timestamp", "Unknown73" }, null, null, null)})
-          }));
-    }
-    #endregion
-
-  }
-  #region Messages
-  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class EncounterRequest : pb::IMessage<EncounterRequest> {
-    private static readonly pb::MessageParser<EncounterRequest> _parser = new pb::MessageParser<EncounterRequest>(() => new EncounterRequest());
-    public static pb::MessageParser<EncounterRequest> Parser { get { return _parser; } }
-
-    public static pbr::MessageDescriptor Descriptor {
-      get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequestReflection.Descriptor.MessageTypes[0]; }
-    }
-
-    pbr::MessageDescriptor pb::IMessage.Descriptor {
-      get { return Descriptor; }
-    }
-
-    public EncounterRequest() {
-      OnConstruction();
-    }
-
-    partial void OnConstruction();
-
-    public EncounterRequest(EncounterRequest other) : this() {
-      unknown1_ = other.unknown1_;
-      rpcId_ = other.rpcId_;
-      requests_ = other.requests_.Clone();
-      Unknown6 = other.unknown6_ != null ? other.Unknown6.Clone() : null;
-      latitude_ = other.latitude_;
-      longitude_ = other.longitude_;
-      altitude_ = other.altitude_;
-      Auth = other.auth_ != null ? other.Auth.Clone() : null;
-      unknown12_ = other.unknown12_;
-    }
-
-    public EncounterRequest Clone() {
-      return new EncounterRequest(this);
-    }
-
-    /// <summary>Field number for the "unknown1" field.</summary>
-    public const int Unknown1FieldNumber = 1;
-    private int unknown1_;
-    public int Unknown1 {
-      get { return unknown1_; }
-      set {
-        unknown1_ = value;
-      }
-    }
-
-    /// <summary>Field number for the "rpc_id" field.</summary>
-    public const int RpcIdFieldNumber = 3;
-    private long rpcId_;
-    public long RpcId {
-      get { return rpcId_; }
-      set {
-        rpcId_ = value;
-      }
-    }
-
-    /// <summary>Field number for the "requests" field.</summary>
-    public const int RequestsFieldNumber = 4;
-    private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Requests> _repeated_requests_codec
-        = pb::FieldCodec.ForMessage(34, global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Requests.Parser);
-    private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Requests> requests_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Requests>();
-    public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Requests> Requests {
-      get { return requests_; }
-    }
-
-    /// <summary>Field number for the "unknown6" field.</summary>
-    public const int Unknown6FieldNumber = 6;
-    private global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6 unknown6_;
-    public global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6 Unknown6 {
-      get { return unknown6_; }
-      set {
-        unknown6_ = value;
-      }
-    }
-
-    /// <summary>Field number for the "latitude" field.</summary>
-    public const int LatitudeFieldNumber = 7;
-    private ulong latitude_;
-    public ulong Latitude {
-      get { return latitude_; }
-      set {
-        latitude_ = value;
-      }
-    }
-
-    /// <summary>Field number for the "longitude" field.</summary>
-    public const int LongitudeFieldNumber = 8;
-    private ulong longitude_;
-    public ulong Longitude {
-      get { return longitude_; }
-      set {
-        longitude_ = value;
-      }
-    }
-
-    /// <summary>Field number for the "altitude" field.</summary>
-    public const int AltitudeFieldNumber = 9;
-    private ulong altitude_;
-    public ulong Altitude {
-      get { return altitude_; }
-      set {
-        altitude_ = value;
-      }
-    }
-
-    /// <summary>Field number for the "auth" field.</summary>
-    public const int AuthFieldNumber = 11;
-    private global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Auth auth_;
-    /// <summary>
-    /// AuthInfo auth = 10;
-    /// </summary>
-    public global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Auth Auth {
-      get { return auth_; }
-      set {
-        auth_ = value;
-      }
-    }
-
-    /// <summary>Field number for the "unknown12" field.</summary>
-    public const int Unknown12FieldNumber = 12;
-    private long unknown12_;
-    public long Unknown12 {
-      get { return unknown12_; }
-      set {
-        unknown12_ = value;
-      }
-    }
-
-    public override bool Equals(object other) {
-      return Equals(other as EncounterRequest);
-    }
-
-    public bool Equals(EncounterRequest other) {
-      if (ReferenceEquals(other, null)) {
-        return false;
-      }
-      if (ReferenceEquals(other, this)) {
-        return true;
-      }
-      if (Unknown1 != other.Unknown1) return false;
-      if (RpcId != other.RpcId) return false;
-      if(!requests_.Equals(other.requests_)) return false;
-      if (!object.Equals(Unknown6, other.Unknown6)) return false;
-      if (Latitude != other.Latitude) return false;
-      if (Longitude != other.Longitude) return false;
-      if (Altitude != other.Altitude) return false;
-      if (!object.Equals(Auth, other.Auth)) return false;
-      if (Unknown12 != other.Unknown12) return false;
-      return true;
-    }
-
-    public override int GetHashCode() {
-      int hash = 1;
-      if (Unknown1 != 0) hash ^= Unknown1.GetHashCode();
-      if (RpcId != 0L) hash ^= RpcId.GetHashCode();
-      hash ^= requests_.GetHashCode();
-      if (unknown6_ != null) hash ^= Unknown6.GetHashCode();
-      if (Latitude != 0UL) hash ^= Latitude.GetHashCode();
-      if (Longitude != 0UL) hash ^= Longitude.GetHashCode();
-      if (Altitude != 0UL) hash ^= Altitude.GetHashCode();
-      if (auth_ != null) hash ^= Auth.GetHashCode();
-      if (Unknown12 != 0L) hash ^= Unknown12.GetHashCode();
-      return hash;
-    }
-
-    public override string ToString() {
-      return pb::JsonFormatter.ToDiagnosticString(this);
-    }
-
-    public void WriteTo(pb::CodedOutputStream output) {
-      if (Unknown1 != 0) {
-        output.WriteRawTag(8);
-        output.WriteInt32(Unknown1);
-      }
-      if (RpcId != 0L) {
-        output.WriteRawTag(24);
-        output.WriteInt64(RpcId);
-      }
-      requests_.WriteTo(output, _repeated_requests_codec);
-      if (unknown6_ != null) {
-        output.WriteRawTag(50);
-        output.WriteMessage(Unknown6);
-      }
-      if (Latitude != 0UL) {
-        output.WriteRawTag(57);
-        output.WriteFixed64(Latitude);
-      }
-      if (Longitude != 0UL) {
-        output.WriteRawTag(65);
-        output.WriteFixed64(Longitude);
-      }
-      if (Altitude != 0UL) {
-        output.WriteRawTag(73);
-        output.WriteFixed64(Altitude);
-      }
-      if (auth_ != null) {
-        output.WriteRawTag(90);
-        output.WriteMessage(Auth);
-      }
-      if (Unknown12 != 0L) {
-        output.WriteRawTag(96);
-        output.WriteInt64(Unknown12);
-      }
-    }
-
-    public int CalculateSize() {
-      int size = 0;
-      if (Unknown1 != 0) {
-        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Unknown1);
-      }
-      if (RpcId != 0L) {
-        size += 1 + pb::CodedOutputStream.ComputeInt64Size(RpcId);
-      }
-      size += requests_.CalculateSize(_repeated_requests_codec);
-      if (unknown6_ != null) {
-        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Unknown6);
-      }
-      if (Latitude != 0UL) {
-        size += 1 + 8;
-      }
-      if (Longitude != 0UL) {
-        size += 1 + 8;
-      }
-      if (Altitude != 0UL) {
-        size += 1 + 8;
-      }
-      if (auth_ != null) {
-        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Auth);
-      }
-      if (Unknown12 != 0L) {
-        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Unknown12);
-      }
-      return size;
-    }
-
-    public void MergeFrom(EncounterRequest other) {
-      if (other == null) {
-        return;
-      }
-      if (other.Unknown1 != 0) {
-        Unknown1 = other.Unknown1;
-      }
-      if (other.RpcId != 0L) {
-        RpcId = other.RpcId;
-      }
-      requests_.Add(other.requests_);
-      if (other.unknown6_ != null) {
-        if (unknown6_ == null) {
-          unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6();
-        }
-        Unknown6.MergeFrom(other.Unknown6);
-      }
-      if (other.Latitude != 0UL) {
-        Latitude = other.Latitude;
-      }
-      if (other.Longitude != 0UL) {
-        Longitude = other.Longitude;
-      }
-      if (other.Altitude != 0UL) {
-        Altitude = other.Altitude;
-      }
-      if (other.auth_ != null) {
-        if (auth_ == null) {
-          auth_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Auth();
-        }
-        Auth.MergeFrom(other.Auth);
-      }
-      if (other.Unknown12 != 0L) {
-        Unknown12 = other.Unknown12;
-      }
-    }
-
-    public void MergeFrom(pb::CodedInputStream input) {
-      uint tag;
-      while ((tag = input.ReadTag()) != 0) {
-        switch(tag) {
-          default:
-            input.SkipLastField();
-            break;
-          case 8: {
-            Unknown1 = input.ReadInt32();
-            break;
-          }
-          case 24: {
-            RpcId = input.ReadInt64();
-            break;
-          }
-          case 34: {
-            requests_.AddEntriesFrom(input, _repeated_requests_codec);
-            break;
-          }
-          case 50: {
-            if (unknown6_ == null) {
-              unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6();
-            }
-            input.ReadMessage(unknown6_);
-            break;
-          }
-          case 57: {
-            Latitude = input.ReadFixed64();
-            break;
-          }
-          case 65: {
-            Longitude = input.ReadFixed64();
-            break;
-          }
-          case 73: {
-            Altitude = input.ReadFixed64();
-            break;
-          }
-          case 90: {
-            if (auth_ == null) {
-              auth_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Auth();
-            }
-            input.ReadMessage(auth_);
-            break;
-          }
-          case 96: {
-            Unknown12 = input.ReadInt64();
-            break;
-          }
-        }
-      }
-    }
-
-    #region Nested types
-    /// <summary>Container for nested types declared in the EncounterRequest message type.</summary>
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    public static partial class Types {
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Requests : pb::IMessage<Requests> {
-        private static readonly pb::MessageParser<Requests> _parser = new pb::MessageParser<Requests>(() => new Requests());
-        public static pb::MessageParser<Requests> Parser { get { return _parser; } }
-
-        public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Descriptor.NestedTypes[0]; }
-        }
-
-        pbr::MessageDescriptor pb::IMessage.Descriptor {
-          get { return Descriptor; }
-        }
-
-        public Requests() {
-          OnConstruction();
-        }
-
-        partial void OnConstruction();
-
-        public Requests(Requests other) : this() {
-          type_ = other.type_;
-          message_ = other.message_;
-        }
-
-        public Requests Clone() {
-          return new Requests(this);
-        }
-
-        /// <summary>Field number for the "type" field.</summary>
-        public const int TypeFieldNumber = 1;
-        private int type_;
-        public int Type {
-          get { return type_; }
-          set {
-            type_ = value;
-          }
-        }
-
-        /// <summary>Field number for the "message" field.</summary>
-        public const int MessageFieldNumber = 2;
-        private pb::ByteString message_ = pb::ByteString.Empty;
-        public pb::ByteString Message {
-          get { return message_; }
-          set {
-            message_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
-          }
-        }
-
-        public override bool Equals(object other) {
-          return Equals(other as Requests);
-        }
-
-        public bool Equals(Requests other) {
-          if (ReferenceEquals(other, null)) {
-            return false;
-          }
-          if (ReferenceEquals(other, this)) {
-            return true;
-          }
-          if (Type != other.Type) return false;
-          if (Message != other.Message) return false;
-          return true;
-        }
-
-        public override int GetHashCode() {
-          int hash = 1;
-          if (Type != 0) hash ^= Type.GetHashCode();
-          if (Message.Length != 0) hash ^= Message.GetHashCode();
-          return hash;
-        }
-
-        public override string ToString() {
-          return pb::JsonFormatter.ToDiagnosticString(this);
-        }
-
-        public void WriteTo(pb::CodedOutputStream output) {
-          if (Type != 0) {
-            output.WriteRawTag(8);
-            output.WriteInt32(Type);
-          }
-          if (Message.Length != 0) {
-            output.WriteRawTag(18);
-            output.WriteBytes(Message);
-          }
-        }
-
-        public int CalculateSize() {
-          int size = 0;
-          if (Type != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Type);
-          }
-          if (Message.Length != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Message);
-          }
-          return size;
-        }
-
-        public void MergeFrom(Requests other) {
-          if (other == null) {
-            return;
-          }
-          if (other.Type != 0) {
-            Type = other.Type;
-          }
-          if (other.Message.Length != 0) {
-            Message = other.Message;
-          }
-        }
-
-        public void MergeFrom(pb::CodedInputStream input) {
-          uint tag;
-          while ((tag = input.ReadTag()) != 0) {
-            switch(tag) {
-              default:
-                input.SkipLastField();
-                break;
-              case 8: {
-                Type = input.ReadInt32();
-                break;
-              }
-              case 18: {
-                Message = input.ReadBytes();
-                break;
-              }
-            }
-          }
-        }
-
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class RequestsMessage : pb::IMessage<RequestsMessage> {
-        private static readonly pb::MessageParser<RequestsMessage> _parser = new pb::MessageParser<RequestsMessage>(() => new RequestsMessage());
-        public static pb::MessageParser<RequestsMessage> Parser { get { return _parser; } }
-
-        public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Descriptor.NestedTypes[1]; }
-        }
-
-        pbr::MessageDescriptor pb::IMessage.Descriptor {
-          get { return Descriptor; }
-        }
-
-        public RequestsMessage() {
-          OnConstruction();
-        }
-
-        partial void OnConstruction();
-
-        public RequestsMessage(RequestsMessage other) : this() {
-          cellIds_ = other.cellIds_;
-          unknown14_ = other.unknown14_;
-          latitude_ = other.latitude_;
-          longitude_ = other.longitude_;
-        }
-
-        public RequestsMessage Clone() {
-          return new RequestsMessage(this);
-        }
-
-        /// <summary>Field number for the "cellIds" field.</summary>
-        public const int CellIdsFieldNumber = 1;
-        private pb::ByteString cellIds_ = pb::ByteString.Empty;
-        public pb::ByteString CellIds {
-          get { return cellIds_; }
-          set {
-            cellIds_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
-          }
-        }
-
-        /// <summary>Field number for the "unknown14" field.</summary>
-        public const int Unknown14FieldNumber = 2;
-        private pb::ByteString unknown14_ = pb::ByteString.Empty;
-        public pb::ByteString Unknown14 {
-          get { return unknown14_; }
-          set {
-            unknown14_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
-          }
-        }
-
-        /// <summary>Field number for the "latitude" field.</summary>
-        public const int LatitudeFieldNumber = 3;
-        private ulong latitude_;
-        public ulong Latitude {
-          get { return latitude_; }
-          set {
-            latitude_ = value;
-          }
-        }
-
-        /// <summary>Field number for the "longitude" field.</summary>
-        public const int LongitudeFieldNumber = 4;
-        private ulong longitude_;
-        public ulong Longitude {
-          get { return longitude_; }
-          set {
-            longitude_ = value;
-          }
-        }
-
-        public override bool Equals(object other) {
-          return Equals(other as RequestsMessage);
-        }
-
-        public bool Equals(RequestsMessage other) {
-          if (ReferenceEquals(other, null)) {
-            return false;
-          }
-          if (ReferenceEquals(other, this)) {
-            return true;
-          }
-          if (CellIds != other.CellIds) return false;
-          if (Unknown14 != other.Unknown14) return false;
-          if (Latitude != other.Latitude) return false;
-          if (Longitude != other.Longitude) return false;
-          return true;
-        }
-
-        public override int GetHashCode() {
-          int hash = 1;
-          if (CellIds.Length != 0) hash ^= CellIds.GetHashCode();
-          if (Unknown14.Length != 0) hash ^= Unknown14.GetHashCode();
-          if (Latitude != 0UL) hash ^= Latitude.GetHashCode();
-          if (Longitude != 0UL) hash ^= Longitude.GetHashCode();
-          return hash;
-        }
-
-        public override string ToString() {
-          return pb::JsonFormatter.ToDiagnosticString(this);
-        }
-
-        public void WriteTo(pb::CodedOutputStream output) {
-          if (CellIds.Length != 0) {
-            output.WriteRawTag(10);
-            output.WriteBytes(CellIds);
-          }
-          if (Unknown14.Length != 0) {
-            output.WriteRawTag(18);
-            output.WriteBytes(Unknown14);
-          }
-          if (Latitude != 0UL) {
-            output.WriteRawTag(25);
-            output.WriteFixed64(Latitude);
-          }
-          if (Longitude != 0UL) {
-            output.WriteRawTag(33);
-            output.WriteFixed64(Longitude);
-          }
-        }
-
-        public int CalculateSize() {
-          int size = 0;
-          if (CellIds.Length != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeBytesSize(CellIds);
-          }
-          if (Unknown14.Length != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown14);
-          }
-          if (Latitude != 0UL) {
-            size += 1 + 8;
-          }
-          if (Longitude != 0UL) {
-            size += 1 + 8;
-          }
-          return size;
-        }
-
-        public void MergeFrom(RequestsMessage other) {
-          if (other == null) {
-            return;
-          }
-          if (other.CellIds.Length != 0) {
-            CellIds = other.CellIds;
-          }
-          if (other.Unknown14.Length != 0) {
-            Unknown14 = other.Unknown14;
-          }
-          if (other.Latitude != 0UL) {
-            Latitude = other.Latitude;
-          }
-          if (other.Longitude != 0UL) {
-            Longitude = other.Longitude;
-          }
-        }
-
-        public void MergeFrom(pb::CodedInputStream input) {
-          uint tag;
-          while ((tag = input.ReadTag()) != 0) {
-            switch(tag) {
-              default:
-                input.SkipLastField();
-                break;
-              case 10: {
-                CellIds = input.ReadBytes();
-                break;
-              }
-              case 18: {
-                Unknown14 = input.ReadBytes();
-                break;
-              }
-              case 25: {
-                Latitude = input.ReadFixed64();
-                break;
-              }
-              case 33: {
-                Longitude = input.ReadFixed64();
-                break;
-              }
-            }
-          }
-        }
-
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class SettingsGuid : pb::IMessage<SettingsGuid> {
-        private static readonly pb::MessageParser<SettingsGuid> _parser = new pb::MessageParser<SettingsGuid>(() => new SettingsGuid());
-        public static pb::MessageParser<SettingsGuid> Parser { get { return _parser; } }
-
-        public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Descriptor.NestedTypes[2]; }
-        }
-
-        pbr::MessageDescriptor pb::IMessage.Descriptor {
-          get { return Descriptor; }
-        }
-
-        public SettingsGuid() {
-          OnConstruction();
-        }
-
-        partial void OnConstruction();
-
-        public SettingsGuid(SettingsGuid other) : this() {
-          guid_ = other.guid_;
-        }
-
-        public SettingsGuid Clone() {
-          return new SettingsGuid(this);
-        }
-
-        /// <summary>Field number for the "guid" field.</summary>
-        public const int GuidFieldNumber = 1;
-        private pb::ByteString guid_ = pb::ByteString.Empty;
-        public pb::ByteString Guid {
-          get { return guid_; }
-          set {
-            guid_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
-          }
-        }
-
-        public override bool Equals(object other) {
-          return Equals(other as SettingsGuid);
-        }
-
-        public bool Equals(SettingsGuid other) {
-          if (ReferenceEquals(other, null)) {
-            return false;
-          }
-          if (ReferenceEquals(other, this)) {
-            return true;
-          }
-          if (Guid != other.Guid) return false;
-          return true;
-        }
-
-        public override int GetHashCode() {
-          int hash = 1;
-          if (Guid.Length != 0) hash ^= Guid.GetHashCode();
-          return hash;
-        }
-
-        public override string ToString() {
-          return pb::JsonFormatter.ToDiagnosticString(this);
-        }
-
-        public void WriteTo(pb::CodedOutputStream output) {
-          if (Guid.Length != 0) {
-            output.WriteRawTag(10);
-            output.WriteBytes(Guid);
-          }
-        }
-
-        public int CalculateSize() {
-          int size = 0;
-          if (Guid.Length != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Guid);
-          }
-          return size;
-        }
-
-        public void MergeFrom(SettingsGuid other) {
-          if (other == null) {
-            return;
-          }
-          if (other.Guid.Length != 0) {
-            Guid = other.Guid;
-          }
-        }
-
-        public void MergeFrom(pb::CodedInputStream input) {
-          uint tag;
-          while ((tag = input.ReadTag()) != 0) {
-            switch(tag) {
-              default:
-                input.SkipLastField();
-                break;
-              case 10: {
-                Guid = input.ReadBytes();
-                break;
-              }
-            }
-          }
-        }
-
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Time : pb::IMessage<Time> {
-        private static readonly pb::MessageParser<Time> _parser = new pb::MessageParser<Time>(() => new Time());
-        public static pb::MessageParser<Time> Parser { get { return _parser; } }
-
-        public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Descriptor.NestedTypes[3]; }
-        }
-
-        pbr::MessageDescriptor pb::IMessage.Descriptor {
-          get { return Descriptor; }
-        }
-
-        public Time() {
-          OnConstruction();
-        }
-
-        partial void OnConstruction();
-
-        public Time(Time other) : this() {
-          time_ = other.time_;
-        }
-
-        public Time Clone() {
-          return new Time(this);
-        }
-
-        /// <summary>Field number for the "time" field.</summary>
-        public const int Time_FieldNumber = 1;
-        private long time_;
-        public long Time_ {
-          get { return time_; }
-          set {
-            time_ = value;
-          }
-        }
-
-        public override bool Equals(object other) {
-          return Equals(other as Time);
-        }
-
-        public bool Equals(Time other) {
-          if (ReferenceEquals(other, null)) {
-            return false;
-          }
-          if (ReferenceEquals(other, this)) {
-            return true;
-          }
-          if (Time_ != other.Time_) return false;
-          return true;
-        }
-
-        public override int GetHashCode() {
-          int hash = 1;
-          if (Time_ != 0L) hash ^= Time_.GetHashCode();
-          return hash;
-        }
-
-        public override string ToString() {
-          return pb::JsonFormatter.ToDiagnosticString(this);
-        }
-
-        public void WriteTo(pb::CodedOutputStream output) {
-          if (Time_ != 0L) {
-            output.WriteRawTag(8);
-            output.WriteInt64(Time_);
-          }
-        }
-
-        public int CalculateSize() {
-          int size = 0;
-          if (Time_ != 0L) {
-            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Time_);
-          }
-          return size;
-        }
-
-        public void MergeFrom(Time other) {
-          if (other == null) {
-            return;
-          }
-          if (other.Time_ != 0L) {
-            Time_ = other.Time_;
-          }
-        }
-
-        public void MergeFrom(pb::CodedInputStream input) {
-          uint tag;
-          while ((tag = input.ReadTag()) != 0) {
-            switch(tag) {
-              default:
-                input.SkipLastField();
-                break;
-              case 8: {
-                Time_ = input.ReadInt64();
-                break;
-              }
-            }
-          }
-        }
-
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Unknown3 : pb::IMessage<Unknown3> {
-        private static readonly pb::MessageParser<Unknown3> _parser = new pb::MessageParser<Unknown3>(() => new Unknown3());
-        public static pb::MessageParser<Unknown3> Parser { get { return _parser; } }
-
-        public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Descriptor.NestedTypes[4]; }
-        }
-
-        pbr::MessageDescriptor pb::IMessage.Descriptor {
-          get { return Descriptor; }
-        }
-
-        public Unknown3() {
-          OnConstruction();
-        }
-
-        partial void OnConstruction();
-
-        public Unknown3(Unknown3 other) : this() {
-          unknown4_ = other.unknown4_;
-        }
-
-        public Unknown3 Clone() {
-          return new Unknown3(this);
-        }
-
-        /// <summary>Field number for the "unknown4" field.</summary>
-        public const int Unknown4FieldNumber = 1;
-        private string unknown4_ = "";
-        public string Unknown4 {
-          get { return unknown4_; }
-          set {
-            unknown4_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
-          }
-        }
-
-        public override bool Equals(object other) {
-          return Equals(other as Unknown3);
-        }
-
-        public bool Equals(Unknown3 other) {
-          if (ReferenceEquals(other, null)) {
-            return false;
-          }
-          if (ReferenceEquals(other, this)) {
-            return true;
-          }
-          if (Unknown4 != other.Unknown4) return false;
-          return true;
-        }
-
-        public override int GetHashCode() {
-          int hash = 1;
-          if (Unknown4.Length != 0) hash ^= Unknown4.GetHashCode();
-          return hash;
-        }
-
-        public override string ToString() {
-          return pb::JsonFormatter.ToDiagnosticString(this);
-        }
-
-        public void WriteTo(pb::CodedOutputStream output) {
-          if (Unknown4.Length != 0) {
-            output.WriteRawTag(10);
-            output.WriteString(Unknown4);
-          }
-        }
-
-        public int CalculateSize() {
-          int size = 0;
-          if (Unknown4.Length != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeStringSize(Unknown4);
-          }
-          return size;
-        }
-
-        public void MergeFrom(Unknown3 other) {
-          if (other == null) {
-            return;
-          }
-          if (other.Unknown4.Length != 0) {
-            Unknown4 = other.Unknown4;
-          }
-        }
-
-        public void MergeFrom(pb::CodedInputStream input) {
-          uint tag;
-          while ((tag = input.ReadTag()) != 0) {
-            switch(tag) {
-              default:
-                input.SkipLastField();
-                break;
-              case 10: {
-                Unknown4 = input.ReadString();
-                break;
-              }
-            }
-          }
-        }
-
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Unknown6 : pb::IMessage<Unknown6> {
-        private static readonly pb::MessageParser<Unknown6> _parser = new pb::MessageParser<Unknown6>(() => new Unknown6());
-        public static pb::MessageParser<Unknown6> Parser { get { return _parser; } }
-
-        public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Descriptor.NestedTypes[5]; }
-        }
-
-        pbr::MessageDescriptor pb::IMessage.Descriptor {
-          get { return Descriptor; }
-        }
-
-        public Unknown6() {
-          OnConstruction();
-        }
-
-        partial void OnConstruction();
-
-        public Unknown6(Unknown6 other) : this() {
-          unknown1_ = other.unknown1_;
-          Unknown2 = other.unknown2_ != null ? other.Unknown2.Clone() : null;
-        }
-
-        public Unknown6 Clone() {
-          return new Unknown6(this);
-        }
-
-        /// <summary>Field number for the "unknown1" field.</summary>
-        public const int Unknown1FieldNumber = 1;
-        private int unknown1_;
-        public int Unknown1 {
-          get { return unknown1_; }
-          set {
-            unknown1_ = value;
-          }
-        }
-
-        /// <summary>Field number for the "unknown2" field.</summary>
-        public const int Unknown2FieldNumber = 2;
-        private global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6.Types.Unknown2 unknown2_;
-        public global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6.Types.Unknown2 Unknown2 {
-          get { return unknown2_; }
-          set {
-            unknown2_ = value;
-          }
-        }
-
-        public override bool Equals(object other) {
-          return Equals(other as Unknown6);
-        }
-
-        public bool Equals(Unknown6 other) {
-          if (ReferenceEquals(other, null)) {
-            return false;
-          }
-          if (ReferenceEquals(other, this)) {
-            return true;
-          }
-          if (Unknown1 != other.Unknown1) return false;
-          if (!object.Equals(Unknown2, other.Unknown2)) return false;
-          return true;
-        }
-
-        public override int GetHashCode() {
-          int hash = 1;
-          if (Unknown1 != 0) hash ^= Unknown1.GetHashCode();
-          if (unknown2_ != null) hash ^= Unknown2.GetHashCode();
-          return hash;
-        }
-
-        public override string ToString() {
-          return pb::JsonFormatter.ToDiagnosticString(this);
-        }
-
-        public void WriteTo(pb::CodedOutputStream output) {
-          if (Unknown1 != 0) {
-            output.WriteRawTag(8);
-            output.WriteInt32(Unknown1);
-          }
-          if (unknown2_ != null) {
-            output.WriteRawTag(18);
-            output.WriteMessage(Unknown2);
-          }
-        }
-
-        public int CalculateSize() {
-          int size = 0;
-          if (Unknown1 != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Unknown1);
-          }
-          if (unknown2_ != null) {
-            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Unknown2);
-          }
-          return size;
-        }
-
-        public void MergeFrom(Unknown6 other) {
-          if (other == null) {
-            return;
-          }
-          if (other.Unknown1 != 0) {
-            Unknown1 = other.Unknown1;
-          }
-          if (other.unknown2_ != null) {
-            if (unknown2_ == null) {
-              unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6.Types.Unknown2();
-            }
-            Unknown2.MergeFrom(other.Unknown2);
-          }
-        }
-
-        public void MergeFrom(pb::CodedInputStream input) {
-          uint tag;
-          while ((tag = input.ReadTag()) != 0) {
-            switch(tag) {
-              default:
-                input.SkipLastField();
-                break;
-              case 8: {
-                Unknown1 = input.ReadInt32();
-                break;
-              }
-              case 18: {
-                if (unknown2_ == null) {
-                  unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6.Types.Unknown2();
-                }
-                input.ReadMessage(unknown2_);
-                break;
-              }
-            }
-          }
-        }
-
-        #region Nested types
-        /// <summary>Container for nested types declared in the Unknown6 message type.</summary>
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        public static partial class Types {
-          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-          public sealed partial class Unknown2 : pb::IMessage<Unknown2> {
-            private static readonly pb::MessageParser<Unknown2> _parser = new pb::MessageParser<Unknown2>(() => new Unknown2());
-            public static pb::MessageParser<Unknown2> Parser { get { return _parser; } }
-
-            public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Types.Unknown6.Descriptor.NestedTypes[0]; }
-            }
-
-            pbr::MessageDescriptor pb::IMessage.Descriptor {
-              get { return Descriptor; }
-            }
-
-            public Unknown2() {
-              OnConstruction();
-            }
-
-            partial void OnConstruction();
-
-            public Unknown2(Unknown2 other) : this() {
-              unknown1_ = other.unknown1_;
-            }
-
-            public Unknown2 Clone() {
-              return new Unknown2(this);
-            }
-
-            /// <summary>Field number for the "unknown1" field.</summary>
-            public const int Unknown1FieldNumber = 1;
-            private pb::ByteString unknown1_ = pb::ByteString.Empty;
-            public pb::ByteString Unknown1 {
-              get { return unknown1_; }
-              set {
-                unknown1_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
-              }
-            }
-
-            public override bool Equals(object other) {
-              return Equals(other as Unknown2);
-            }
-
-            public bool Equals(Unknown2 other) {
-              if (ReferenceEquals(other, null)) {
-                return false;
-              }
-              if (ReferenceEquals(other, this)) {
-                return true;
-              }
-              if (Unknown1 != other.Unknown1) return false;
-              return true;
-            }
-
-            public override int GetHashCode() {
-              int hash = 1;
-              if (Unknown1.Length != 0) hash ^= Unknown1.GetHashCode();
-              return hash;
-            }
-
-            public override string ToString() {
-              return pb::JsonFormatter.ToDiagnosticString(this);
-            }
-
-            public void WriteTo(pb::CodedOutputStream output) {
-              if (Unknown1.Length != 0) {
-                output.WriteRawTag(10);
-                output.WriteBytes(Unknown1);
-              }
-            }
-
-            public int CalculateSize() {
-              int size = 0;
-              if (Unknown1.Length != 0) {
-                size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown1);
-              }
-              return size;
-            }
-
-            public void MergeFrom(Unknown2 other) {
-              if (other == null) {
-                return;
-              }
-              if (other.Unknown1.Length != 0) {
-                Unknown1 = other.Unknown1;
-              }
-            }
-
-            public void MergeFrom(pb::CodedInputStream input) {
-              uint tag;
-              while ((tag = input.ReadTag()) != 0) {
-                switch(tag) {
-                  default:
-                    input.SkipLastField();
-                    break;
-                  case 10: {
-                    Unknown1 = input.ReadBytes();
-                    break;
-                  }
-                }
-              }
-            }
-
-          }
-
-        }
-        #endregion
-
-      }
-
-      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-      public sealed partial class Auth : pb::IMessage<Auth> {
-        private static readonly pb::MessageParser<Auth> _parser = new pb::MessageParser<Auth>(() => new Auth());
-        public static pb::MessageParser<Auth> Parser { get { return _parser; } }
-
-        public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterRequest.Descriptor.NestedTypes[6]; }
-        }
-
-        pbr::MessageDescriptor pb::IMessage.Descriptor {
-          get { return Descriptor; }
-        }
-
-        public Auth() {
-          OnConstruction();
-        }
-
-        partial void OnConstruction();
-
-        public Auth(Auth other) : this() {
-          unknown71_ = other.unknown71_;
-          timestamp_ = other.timestamp_;
-          unknown73_ = other.unknown73_;
-        }
-
-        public Auth Clone() {
-          return new Auth(this);
-        }
-
-        /// <summary>Field number for the "unknown71" field.</summary>
-        public const int Unknown71FieldNumber = 1;
-        private pb::ByteString unknown71_ = pb::ByteString.Empty;
-        public pb::ByteString Unknown71 {
-          get { return unknown71_; }
-          set {
-            unknown71_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
-          }
-        }
-
-        /// <summary>Field number for the "timestamp" field.</summary>
-        public const int TimestampFieldNumber = 2;
-        private long timestamp_;
-        public long Timestamp {
-          get { return timestamp_; }
-          set {
-            timestamp_ = value;
-          }
-        }
-
-        /// <summary>Field number for the "unknown73" field.</summary>
-        public const int Unknown73FieldNumber = 3;
-        private pb::ByteString unknown73_ = pb::ByteString.Empty;
-        public pb::ByteString Unknown73 {
-          get { return unknown73_; }
-          set {
-            unknown73_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
-          }
-        }
-
-        public override bool Equals(object other) {
-          return Equals(other as Auth);
-        }
-
-        public bool Equals(Auth other) {
-          if (ReferenceEquals(other, null)) {
-            return false;
-          }
-          if (ReferenceEquals(other, this)) {
-            return true;
-          }
-          if (Unknown71 != other.Unknown71) return false;
-          if (Timestamp != other.Timestamp) return false;
-          if (Unknown73 != other.Unknown73) return false;
-          return true;
-        }
-
-        public override int GetHashCode() {
-          int hash = 1;
-          if (Unknown71.Length != 0) hash ^= Unknown71.GetHashCode();
-          if (Timestamp != 0L) hash ^= Timestamp.GetHashCode();
-          if (Unknown73.Length != 0) hash ^= Unknown73.GetHashCode();
-          return hash;
-        }
-
-        public override string ToString() {
-          return pb::JsonFormatter.ToDiagnosticString(this);
-        }
-
-        public void WriteTo(pb::CodedOutputStream output) {
-          if (Unknown71.Length != 0) {
-            output.WriteRawTag(10);
-            output.WriteBytes(Unknown71);
-          }
-          if (Timestamp != 0L) {
-            output.WriteRawTag(16);
-            output.WriteInt64(Timestamp);
-          }
-          if (Unknown73.Length != 0) {
-            output.WriteRawTag(26);
-            output.WriteBytes(Unknown73);
-          }
-        }
-
-        public int CalculateSize() {
-          int size = 0;
-          if (Unknown71.Length != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown71);
-          }
-          if (Timestamp != 0L) {
-            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Timestamp);
-          }
-          if (Unknown73.Length != 0) {
-            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown73);
-          }
-          return size;
-        }
-
-        public void MergeFrom(Auth other) {
-          if (other == null) {
-            return;
-          }
-          if (other.Unknown71.Length != 0) {
-            Unknown71 = other.Unknown71;
-          }
-          if (other.Timestamp != 0L) {
-            Timestamp = other.Timestamp;
-          }
-          if (other.Unknown73.Length != 0) {
-            Unknown73 = other.Unknown73;
-          }
-        }
-
-        public void MergeFrom(pb::CodedInputStream input) {
-          uint tag;
-          while ((tag = input.ReadTag()) != 0) {
-            switch(tag) {
-              default:
-                input.SkipLastField();
-                break;
-              case 10: {
-                Unknown71 = input.ReadBytes();
-                break;
-              }
-              case 16: {
-                Timestamp = input.ReadInt64();
-                break;
-              }
-              case 26: {
-                Unknown73 = input.ReadBytes();
-                break;
-              }
-            }
-          }
-        }
-
-      }
-
-    }
-    #endregion
-
-  }
-
-  #endregion
-
-}
-
-#endregion Designer generated code
diff --git a/PokemonGo/RocketAPI/GeneratedCode/FortDetailResponse.cs b/PokemonGo/RocketAPI/GeneratedCode/FortDetailResponse.cs
new file mode 100644
index 0000000..4fdab1d
--- /dev/null
+++ b/PokemonGo/RocketAPI/GeneratedCode/FortDetailResponse.cs
@@ -0,0 +1,1171 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: FortDetailResponse.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace PokemonGo.RocketAPI.GeneratedCode {
+
+  /// <summary>Holder for reflection information generated from FortDetailResponse.proto</summary>
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public static partial class FortDetailResponseReflection {
+
+    #region Descriptor
+    /// <summary>File descriptor for FortDetailResponse.proto</summary>
+    public static pbr::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbr::FileDescriptor descriptor;
+
+    static FortDetailResponseReflection() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          string.Concat(
+            "ChhGb3J0RGV0YWlsUmVzcG9uc2UucHJvdG8SIVBva2Vtb25Hby5Sb2NrZXRB",
+            "UEkuR2VuZXJhdGVkQ29kZSKWBgoSRm9ydERldGFpbFJlc3BvbnNlEhAKCHVu",
+            "a25vd24xGAEgASgFEhAKCHVua25vd24yGAIgASgDEg8KB2FwaV91cmwYAyAB",
+            "KAkSUAoIdW5rbm93bjYYBiABKAsyPi5Qb2tlbW9uR28uUm9ja2V0QVBJLkdl",
+            "bmVyYXRlZENvZGUuRm9ydERldGFpbFJlc3BvbnNlLlVua25vd242ElAKCHVu",
+            "a25vd243GAcgASgLMj4uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRD",
+            "b2RlLkZvcnREZXRhaWxSZXNwb25zZS5Vbmtub3duNxJOCgdwYXlsb2FkGGQg",
+            "AygLMj0uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLkZvcnRE",
+            "ZXRhaWxSZXNwb25zZS5QYXlsb2FkEhQKDGVycm9yTWVzc2FnZRhlIAEoCRqV",
+            "AQoIVW5rbm93bjYSEAoIdW5rbm93bjEYASABKAUSWQoIdW5rbm93bjIYAiAB",
+            "KAsyRy5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENvZGUuRm9ydERl",
+            "dGFpbFJlc3BvbnNlLlVua25vd242LlVua25vd24yGhwKCFVua25vd24yEhAK",
+            "CHVua25vd24xGAEgASgMGkMKCFVua25vd243EhEKCXVua25vd243MRgBIAEo",
+            "DBIRCgl1bmtub3duNzIYAiABKAMSEQoJdW5rbm93bjczGAMgASgMGuMBCgdQ",
+            "YXlsb2FkEgoKAklkGAEgASgJEgwKBFRlYW0YAiABKAUSDwoHUG9rZW1vbhgD",
+            "IAEoBRIMCgROYW1lGAQgASgJEhAKCEltYWdlVXJsGAUgASgJEgoKAkZwGAYg",
+            "ASgFEg8KB1N0YW1pbmEYByABKAUSEgoKTWF4U3RhbWluYRgIIAEoBRIQCghG",
+            "b3J0VHlwZRgJIAEoBRIQCghMYXRpdHVkZRgKIAEoAxIRCglMb25naXR1ZGUY",
+            "CyABKAMSEwoLRGVzY3JpcHRpb24YDCABKAkSEAoITW9kaWZpZXIYDSABKAVi",
+            "BnByb3RvMw=="));
+      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+          new pbr::FileDescriptor[] { },
+          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse), global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Parser, new[]{ "Unknown1", "Unknown2", "ApiUrl", "Unknown6", "Unknown7", "Payload", "ErrorMessage" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6), global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6.Parser, new[]{ "Unknown1", "Unknown2" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6.Types.Unknown2), global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6.Types.Unknown2.Parser, new[]{ "Unknown1" }, null, null, null)}),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown7), global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown7.Parser, new[]{ "Unknown71", "Unknown72", "Unknown73" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Payload), global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Payload.Parser, new[]{ "Id", "Team", "Pokemon", "Name", "ImageUrl", "Fp", "Stamina", "MaxStamina", "FortType", "Latitude", "Longitude", "Description", "Modifier" }, null, null, null)})
+          }));
+    }
+    #endregion
+
+  }
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class FortDetailResponse : pb::IMessage<FortDetailResponse> {
+    private static readonly pb::MessageParser<FortDetailResponse> _parser = new pb::MessageParser<FortDetailResponse>(() => new FortDetailResponse());
+    public static pb::MessageParser<FortDetailResponse> Parser { get { return _parser; } }
+
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponseReflection.Descriptor.MessageTypes[0]; }
+    }
+
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    public FortDetailResponse() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    public FortDetailResponse(FortDetailResponse other) : this() {
+      unknown1_ = other.unknown1_;
+      unknown2_ = other.unknown2_;
+      apiUrl_ = other.apiUrl_;
+      Unknown6 = other.unknown6_ != null ? other.Unknown6.Clone() : null;
+      Unknown7 = other.unknown7_ != null ? other.Unknown7.Clone() : null;
+      payload_ = other.payload_.Clone();
+      errorMessage_ = other.errorMessage_;
+    }
+
+    public FortDetailResponse Clone() {
+      return new FortDetailResponse(this);
+    }
+
+    /// <summary>Field number for the "unknown1" field.</summary>
+    public const int Unknown1FieldNumber = 1;
+    private int unknown1_;
+    public int Unknown1 {
+      get { return unknown1_; }
+      set {
+        unknown1_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "unknown2" field.</summary>
+    public const int Unknown2FieldNumber = 2;
+    private long unknown2_;
+    public long Unknown2 {
+      get { return unknown2_; }
+      set {
+        unknown2_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "api_url" field.</summary>
+    public const int ApiUrlFieldNumber = 3;
+    private string apiUrl_ = "";
+    public string ApiUrl {
+      get { return apiUrl_; }
+      set {
+        apiUrl_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "unknown6" field.</summary>
+    public const int Unknown6FieldNumber = 6;
+    private global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6 unknown6_;
+    public global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6 Unknown6 {
+      get { return unknown6_; }
+      set {
+        unknown6_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "unknown7" field.</summary>
+    public const int Unknown7FieldNumber = 7;
+    private global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown7 unknown7_;
+    public global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown7 Unknown7 {
+      get { return unknown7_; }
+      set {
+        unknown7_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "payload" field.</summary>
+    public const int PayloadFieldNumber = 100;
+    private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Payload> _repeated_payload_codec
+        = pb::FieldCodec.ForMessage(802, global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Payload.Parser);
+    private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Payload> payload_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Payload>();
+    public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Payload> Payload {
+      get { return payload_; }
+    }
+
+    /// <summary>Field number for the "errorMessage" field.</summary>
+    public const int ErrorMessageFieldNumber = 101;
+    private string errorMessage_ = "";
+    /// <summary>
+    /// Should be moved to an error-proto file if error is always 101 field
+    /// </summary>
+    public string ErrorMessage {
+      get { return errorMessage_; }
+      set {
+        errorMessage_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as FortDetailResponse);
+    }
+
+    public bool Equals(FortDetailResponse other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Unknown1 != other.Unknown1) return false;
+      if (Unknown2 != other.Unknown2) return false;
+      if (ApiUrl != other.ApiUrl) return false;
+      if (!object.Equals(Unknown6, other.Unknown6)) return false;
+      if (!object.Equals(Unknown7, other.Unknown7)) return false;
+      if(!payload_.Equals(other.payload_)) return false;
+      if (ErrorMessage != other.ErrorMessage) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Unknown1 != 0) hash ^= Unknown1.GetHashCode();
+      if (Unknown2 != 0L) hash ^= Unknown2.GetHashCode();
+      if (ApiUrl.Length != 0) hash ^= ApiUrl.GetHashCode();
+      if (unknown6_ != null) hash ^= Unknown6.GetHashCode();
+      if (unknown7_ != null) hash ^= Unknown7.GetHashCode();
+      hash ^= payload_.GetHashCode();
+      if (ErrorMessage.Length != 0) hash ^= ErrorMessage.GetHashCode();
+      return hash;
+    }
+
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Unknown1 != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Unknown1);
+      }
+      if (Unknown2 != 0L) {
+        output.WriteRawTag(16);
+        output.WriteInt64(Unknown2);
+      }
+      if (ApiUrl.Length != 0) {
+        output.WriteRawTag(26);
+        output.WriteString(ApiUrl);
+      }
+      if (unknown6_ != null) {
+        output.WriteRawTag(50);
+        output.WriteMessage(Unknown6);
+      }
+      if (unknown7_ != null) {
+        output.WriteRawTag(58);
+        output.WriteMessage(Unknown7);
+      }
+      payload_.WriteTo(output, _repeated_payload_codec);
+      if (ErrorMessage.Length != 0) {
+        output.WriteRawTag(170, 6);
+        output.WriteString(ErrorMessage);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Unknown1 != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Unknown1);
+      }
+      if (Unknown2 != 0L) {
+        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Unknown2);
+      }
+      if (ApiUrl.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(ApiUrl);
+      }
+      if (unknown6_ != null) {
+        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Unknown6);
+      }
+      if (unknown7_ != null) {
+        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Unknown7);
+      }
+      size += payload_.CalculateSize(_repeated_payload_codec);
+      if (ErrorMessage.Length != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeStringSize(ErrorMessage);
+      }
+      return size;
+    }
+
+    public void MergeFrom(FortDetailResponse other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Unknown1 != 0) {
+        Unknown1 = other.Unknown1;
+      }
+      if (other.Unknown2 != 0L) {
+        Unknown2 = other.Unknown2;
+      }
+      if (other.ApiUrl.Length != 0) {
+        ApiUrl = other.ApiUrl;
+      }
+      if (other.unknown6_ != null) {
+        if (unknown6_ == null) {
+          unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6();
+        }
+        Unknown6.MergeFrom(other.Unknown6);
+      }
+      if (other.unknown7_ != null) {
+        if (unknown7_ == null) {
+          unknown7_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown7();
+        }
+        Unknown7.MergeFrom(other.Unknown7);
+      }
+      payload_.Add(other.payload_);
+      if (other.ErrorMessage.Length != 0) {
+        ErrorMessage = other.ErrorMessage;
+      }
+    }
+
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Unknown1 = input.ReadInt32();
+            break;
+          }
+          case 16: {
+            Unknown2 = input.ReadInt64();
+            break;
+          }
+          case 26: {
+            ApiUrl = input.ReadString();
+            break;
+          }
+          case 50: {
+            if (unknown6_ == null) {
+              unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6();
+            }
+            input.ReadMessage(unknown6_);
+            break;
+          }
+          case 58: {
+            if (unknown7_ == null) {
+              unknown7_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown7();
+            }
+            input.ReadMessage(unknown7_);
+            break;
+          }
+          case 802: {
+            payload_.AddEntriesFrom(input, _repeated_payload_codec);
+            break;
+          }
+          case 810: {
+            ErrorMessage = input.ReadString();
+            break;
+          }
+        }
+      }
+    }
+
+    #region Nested types
+    /// <summary>Container for nested types declared in the FortDetailResponse message type.</summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    public static partial class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class Unknown6 : pb::IMessage<Unknown6> {
+        private static readonly pb::MessageParser<Unknown6> _parser = new pb::MessageParser<Unknown6>(() => new Unknown6());
+        public static pb::MessageParser<Unknown6> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Descriptor.NestedTypes[0]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public Unknown6() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public Unknown6(Unknown6 other) : this() {
+          unknown1_ = other.unknown1_;
+          Unknown2 = other.unknown2_ != null ? other.Unknown2.Clone() : null;
+        }
+
+        public Unknown6 Clone() {
+          return new Unknown6(this);
+        }
+
+        /// <summary>Field number for the "unknown1" field.</summary>
+        public const int Unknown1FieldNumber = 1;
+        private int unknown1_;
+        public int Unknown1 {
+          get { return unknown1_; }
+          set {
+            unknown1_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "unknown2" field.</summary>
+        public const int Unknown2FieldNumber = 2;
+        private global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6.Types.Unknown2 unknown2_;
+        public global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6.Types.Unknown2 Unknown2 {
+          get { return unknown2_; }
+          set {
+            unknown2_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as Unknown6);
+        }
+
+        public bool Equals(Unknown6 other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Unknown1 != other.Unknown1) return false;
+          if (!object.Equals(Unknown2, other.Unknown2)) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Unknown1 != 0) hash ^= Unknown1.GetHashCode();
+          if (unknown2_ != null) hash ^= Unknown2.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Unknown1 != 0) {
+            output.WriteRawTag(8);
+            output.WriteInt32(Unknown1);
+          }
+          if (unknown2_ != null) {
+            output.WriteRawTag(18);
+            output.WriteMessage(Unknown2);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Unknown1 != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Unknown1);
+          }
+          if (unknown2_ != null) {
+            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Unknown2);
+          }
+          return size;
+        }
+
+        public void MergeFrom(Unknown6 other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Unknown1 != 0) {
+            Unknown1 = other.Unknown1;
+          }
+          if (other.unknown2_ != null) {
+            if (unknown2_ == null) {
+              unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6.Types.Unknown2();
+            }
+            Unknown2.MergeFrom(other.Unknown2);
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 8: {
+                Unknown1 = input.ReadInt32();
+                break;
+              }
+              case 18: {
+                if (unknown2_ == null) {
+                  unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6.Types.Unknown2();
+                }
+                input.ReadMessage(unknown2_);
+                break;
+              }
+            }
+          }
+        }
+
+        #region Nested types
+        /// <summary>Container for nested types declared in the Unknown6 message type.</summary>
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public static partial class Types {
+          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+          public sealed partial class Unknown2 : pb::IMessage<Unknown2> {
+            private static readonly pb::MessageParser<Unknown2> _parser = new pb::MessageParser<Unknown2>(() => new Unknown2());
+            public static pb::MessageParser<Unknown2> Parser { get { return _parser; } }
+
+            public static pbr::MessageDescriptor Descriptor {
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Types.Unknown6.Descriptor.NestedTypes[0]; }
+            }
+
+            pbr::MessageDescriptor pb::IMessage.Descriptor {
+              get { return Descriptor; }
+            }
+
+            public Unknown2() {
+              OnConstruction();
+            }
+
+            partial void OnConstruction();
+
+            public Unknown2(Unknown2 other) : this() {
+              unknown1_ = other.unknown1_;
+            }
+
+            public Unknown2 Clone() {
+              return new Unknown2(this);
+            }
+
+            /// <summary>Field number for the "unknown1" field.</summary>
+            public const int Unknown1FieldNumber = 1;
+            private pb::ByteString unknown1_ = pb::ByteString.Empty;
+            public pb::ByteString Unknown1 {
+              get { return unknown1_; }
+              set {
+                unknown1_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+              }
+            }
+
+            public override bool Equals(object other) {
+              return Equals(other as Unknown2);
+            }
+
+            public bool Equals(Unknown2 other) {
+              if (ReferenceEquals(other, null)) {
+                return false;
+              }
+              if (ReferenceEquals(other, this)) {
+                return true;
+              }
+              if (Unknown1 != other.Unknown1) return false;
+              return true;
+            }
+
+            public override int GetHashCode() {
+              int hash = 1;
+              if (Unknown1.Length != 0) hash ^= Unknown1.GetHashCode();
+              return hash;
+            }
+
+            public override string ToString() {
+              return pb::JsonFormatter.ToDiagnosticString(this);
+            }
+
+            public void WriteTo(pb::CodedOutputStream output) {
+              if (Unknown1.Length != 0) {
+                output.WriteRawTag(10);
+                output.WriteBytes(Unknown1);
+              }
+            }
+
+            public int CalculateSize() {
+              int size = 0;
+              if (Unknown1.Length != 0) {
+                size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown1);
+              }
+              return size;
+            }
+
+            public void MergeFrom(Unknown2 other) {
+              if (other == null) {
+                return;
+              }
+              if (other.Unknown1.Length != 0) {
+                Unknown1 = other.Unknown1;
+              }
+            }
+
+            public void MergeFrom(pb::CodedInputStream input) {
+              uint tag;
+              while ((tag = input.ReadTag()) != 0) {
+                switch(tag) {
+                  default:
+                    input.SkipLastField();
+                    break;
+                  case 10: {
+                    Unknown1 = input.ReadBytes();
+                    break;
+                  }
+                }
+              }
+            }
+
+          }
+
+        }
+        #endregion
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class Unknown7 : pb::IMessage<Unknown7> {
+        private static readonly pb::MessageParser<Unknown7> _parser = new pb::MessageParser<Unknown7>(() => new Unknown7());
+        public static pb::MessageParser<Unknown7> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Descriptor.NestedTypes[1]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public Unknown7() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public Unknown7(Unknown7 other) : this() {
+          unknown71_ = other.unknown71_;
+          unknown72_ = other.unknown72_;
+          unknown73_ = other.unknown73_;
+        }
+
+        public Unknown7 Clone() {
+          return new Unknown7(this);
+        }
+
+        /// <summary>Field number for the "unknown71" field.</summary>
+        public const int Unknown71FieldNumber = 1;
+        private pb::ByteString unknown71_ = pb::ByteString.Empty;
+        public pb::ByteString Unknown71 {
+          get { return unknown71_; }
+          set {
+            unknown71_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "unknown72" field.</summary>
+        public const int Unknown72FieldNumber = 2;
+        private long unknown72_;
+        public long Unknown72 {
+          get { return unknown72_; }
+          set {
+            unknown72_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "unknown73" field.</summary>
+        public const int Unknown73FieldNumber = 3;
+        private pb::ByteString unknown73_ = pb::ByteString.Empty;
+        public pb::ByteString Unknown73 {
+          get { return unknown73_; }
+          set {
+            unknown73_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as Unknown7);
+        }
+
+        public bool Equals(Unknown7 other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Unknown71 != other.Unknown71) return false;
+          if (Unknown72 != other.Unknown72) return false;
+          if (Unknown73 != other.Unknown73) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Unknown71.Length != 0) hash ^= Unknown71.GetHashCode();
+          if (Unknown72 != 0L) hash ^= Unknown72.GetHashCode();
+          if (Unknown73.Length != 0) hash ^= Unknown73.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Unknown71.Length != 0) {
+            output.WriteRawTag(10);
+            output.WriteBytes(Unknown71);
+          }
+          if (Unknown72 != 0L) {
+            output.WriteRawTag(16);
+            output.WriteInt64(Unknown72);
+          }
+          if (Unknown73.Length != 0) {
+            output.WriteRawTag(26);
+            output.WriteBytes(Unknown73);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Unknown71.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown71);
+          }
+          if (Unknown72 != 0L) {
+            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Unknown72);
+          }
+          if (Unknown73.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown73);
+          }
+          return size;
+        }
+
+        public void MergeFrom(Unknown7 other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Unknown71.Length != 0) {
+            Unknown71 = other.Unknown71;
+          }
+          if (other.Unknown72 != 0L) {
+            Unknown72 = other.Unknown72;
+          }
+          if (other.Unknown73.Length != 0) {
+            Unknown73 = other.Unknown73;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 10: {
+                Unknown71 = input.ReadBytes();
+                break;
+              }
+              case 16: {
+                Unknown72 = input.ReadInt64();
+                break;
+              }
+              case 26: {
+                Unknown73 = input.ReadBytes();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class Payload : pb::IMessage<Payload> {
+        private static readonly pb::MessageParser<Payload> _parser = new pb::MessageParser<Payload>(() => new Payload());
+        public static pb::MessageParser<Payload> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.FortDetailResponse.Descriptor.NestedTypes[2]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public Payload() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public Payload(Payload other) : this() {
+          id_ = other.id_;
+          team_ = other.team_;
+          pokemon_ = other.pokemon_;
+          name_ = other.name_;
+          imageUrl_ = other.imageUrl_;
+          fp_ = other.fp_;
+          stamina_ = other.stamina_;
+          maxStamina_ = other.maxStamina_;
+          fortType_ = other.fortType_;
+          latitude_ = other.latitude_;
+          longitude_ = other.longitude_;
+          description_ = other.description_;
+          modifier_ = other.modifier_;
+        }
+
+        public Payload Clone() {
+          return new Payload(this);
+        }
+
+        /// <summary>Field number for the "Id" field.</summary>
+        public const int IdFieldNumber = 1;
+        private string id_ = "";
+        public string Id {
+          get { return id_; }
+          set {
+            id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "Team" field.</summary>
+        public const int TeamFieldNumber = 2;
+        private int team_;
+        public int Team {
+          get { return team_; }
+          set {
+            team_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Pokemon" field.</summary>
+        public const int PokemonFieldNumber = 3;
+        private int pokemon_;
+        public int Pokemon {
+          get { return pokemon_; }
+          set {
+            pokemon_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Name" field.</summary>
+        public const int NameFieldNumber = 4;
+        private string name_ = "";
+        public string Name {
+          get { return name_; }
+          set {
+            name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "ImageUrl" field.</summary>
+        public const int ImageUrlFieldNumber = 5;
+        private string imageUrl_ = "";
+        public string ImageUrl {
+          get { return imageUrl_; }
+          set {
+            imageUrl_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "Fp" field.</summary>
+        public const int FpFieldNumber = 6;
+        private int fp_;
+        public int Fp {
+          get { return fp_; }
+          set {
+            fp_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Stamina" field.</summary>
+        public const int StaminaFieldNumber = 7;
+        private int stamina_;
+        public int Stamina {
+          get { return stamina_; }
+          set {
+            stamina_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "MaxStamina" field.</summary>
+        public const int MaxStaminaFieldNumber = 8;
+        private int maxStamina_;
+        public int MaxStamina {
+          get { return maxStamina_; }
+          set {
+            maxStamina_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "FortType" field.</summary>
+        public const int FortTypeFieldNumber = 9;
+        private int fortType_;
+        public int FortType {
+          get { return fortType_; }
+          set {
+            fortType_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Latitude" field.</summary>
+        public const int LatitudeFieldNumber = 10;
+        private long latitude_;
+        public long Latitude {
+          get { return latitude_; }
+          set {
+            latitude_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Longitude" field.</summary>
+        public const int LongitudeFieldNumber = 11;
+        private long longitude_;
+        public long Longitude {
+          get { return longitude_; }
+          set {
+            longitude_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Description" field.</summary>
+        public const int DescriptionFieldNumber = 12;
+        private string description_ = "";
+        public string Description {
+          get { return description_; }
+          set {
+            description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "Modifier" field.</summary>
+        public const int ModifierFieldNumber = 13;
+        private int modifier_;
+        public int Modifier {
+          get { return modifier_; }
+          set {
+            modifier_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as Payload);
+        }
+
+        public bool Equals(Payload other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Id != other.Id) return false;
+          if (Team != other.Team) return false;
+          if (Pokemon != other.Pokemon) return false;
+          if (Name != other.Name) return false;
+          if (ImageUrl != other.ImageUrl) return false;
+          if (Fp != other.Fp) return false;
+          if (Stamina != other.Stamina) return false;
+          if (MaxStamina != other.MaxStamina) return false;
+          if (FortType != other.FortType) return false;
+          if (Latitude != other.Latitude) return false;
+          if (Longitude != other.Longitude) return false;
+          if (Description != other.Description) return false;
+          if (Modifier != other.Modifier) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Id.Length != 0) hash ^= Id.GetHashCode();
+          if (Team != 0) hash ^= Team.GetHashCode();
+          if (Pokemon != 0) hash ^= Pokemon.GetHashCode();
+          if (Name.Length != 0) hash ^= Name.GetHashCode();
+          if (ImageUrl.Length != 0) hash ^= ImageUrl.GetHashCode();
+          if (Fp != 0) hash ^= Fp.GetHashCode();
+          if (Stamina != 0) hash ^= Stamina.GetHashCode();
+          if (MaxStamina != 0) hash ^= MaxStamina.GetHashCode();
+          if (FortType != 0) hash ^= FortType.GetHashCode();
+          if (Latitude != 0L) hash ^= Latitude.GetHashCode();
+          if (Longitude != 0L) hash ^= Longitude.GetHashCode();
+          if (Description.Length != 0) hash ^= Description.GetHashCode();
+          if (Modifier != 0) hash ^= Modifier.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Id.Length != 0) {
+            output.WriteRawTag(10);
+            output.WriteString(Id);
+          }
+          if (Team != 0) {
+            output.WriteRawTag(16);
+            output.WriteInt32(Team);
+          }
+          if (Pokemon != 0) {
+            output.WriteRawTag(24);
+            output.WriteInt32(Pokemon);
+          }
+          if (Name.Length != 0) {
+            output.WriteRawTag(34);
+            output.WriteString(Name);
+          }
+          if (ImageUrl.Length != 0) {
+            output.WriteRawTag(42);
+            output.WriteString(ImageUrl);
+          }
+          if (Fp != 0) {
+            output.WriteRawTag(48);
+            output.WriteInt32(Fp);
+          }
+          if (Stamina != 0) {
+            output.WriteRawTag(56);
+            output.WriteInt32(Stamina);
+          }
+          if (MaxStamina != 0) {
+            output.WriteRawTag(64);
+            output.WriteInt32(MaxStamina);
+          }
+          if (FortType != 0) {
+            output.WriteRawTag(72);
+            output.WriteInt32(FortType);
+          }
+          if (Latitude != 0L) {
+            output.WriteRawTag(80);
+            output.WriteInt64(Latitude);
+          }
+          if (Longitude != 0L) {
+            output.WriteRawTag(88);
+            output.WriteInt64(Longitude);
+          }
+          if (Description.Length != 0) {
+            output.WriteRawTag(98);
+            output.WriteString(Description);
+          }
+          if (Modifier != 0) {
+            output.WriteRawTag(104);
+            output.WriteInt32(Modifier);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Id.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
+          }
+          if (Team != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Team);
+          }
+          if (Pokemon != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Pokemon);
+          }
+          if (Name.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+          }
+          if (ImageUrl.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeStringSize(ImageUrl);
+          }
+          if (Fp != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Fp);
+          }
+          if (Stamina != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Stamina);
+          }
+          if (MaxStamina != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(MaxStamina);
+          }
+          if (FortType != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(FortType);
+          }
+          if (Latitude != 0L) {
+            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Latitude);
+          }
+          if (Longitude != 0L) {
+            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Longitude);
+          }
+          if (Description.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
+          }
+          if (Modifier != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Modifier);
+          }
+          return size;
+        }
+
+        public void MergeFrom(Payload other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Id.Length != 0) {
+            Id = other.Id;
+          }
+          if (other.Team != 0) {
+            Team = other.Team;
+          }
+          if (other.Pokemon != 0) {
+            Pokemon = other.Pokemon;
+          }
+          if (other.Name.Length != 0) {
+            Name = other.Name;
+          }
+          if (other.ImageUrl.Length != 0) {
+            ImageUrl = other.ImageUrl;
+          }
+          if (other.Fp != 0) {
+            Fp = other.Fp;
+          }
+          if (other.Stamina != 0) {
+            Stamina = other.Stamina;
+          }
+          if (other.MaxStamina != 0) {
+            MaxStamina = other.MaxStamina;
+          }
+          if (other.FortType != 0) {
+            FortType = other.FortType;
+          }
+          if (other.Latitude != 0L) {
+            Latitude = other.Latitude;
+          }
+          if (other.Longitude != 0L) {
+            Longitude = other.Longitude;
+          }
+          if (other.Description.Length != 0) {
+            Description = other.Description;
+          }
+          if (other.Modifier != 0) {
+            Modifier = other.Modifier;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 10: {
+                Id = input.ReadString();
+                break;
+              }
+              case 16: {
+                Team = input.ReadInt32();
+                break;
+              }
+              case 24: {
+                Pokemon = input.ReadInt32();
+                break;
+              }
+              case 34: {
+                Name = input.ReadString();
+                break;
+              }
+              case 42: {
+                ImageUrl = input.ReadString();
+                break;
+              }
+              case 48: {
+                Fp = input.ReadInt32();
+                break;
+              }
+              case 56: {
+                Stamina = input.ReadInt32();
+                break;
+              }
+              case 64: {
+                MaxStamina = input.ReadInt32();
+                break;
+              }
+              case 72: {
+                FortType = input.ReadInt32();
+                break;
+              }
+              case 80: {
+                Latitude = input.ReadInt64();
+                break;
+              }
+              case 88: {
+                Longitude = input.ReadInt64();
+                break;
+              }
+              case 98: {
+                Description = input.ReadString();
+                break;
+              }
+              case 104: {
+                Modifier = input.ReadInt32();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+    }
+    #endregion
+
+  }
+
+  #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/PokemonGo/RocketAPI/GeneratedCode/FortSearchResponse.cs b/PokemonGo/RocketAPI/GeneratedCode/FortSearchResponse.cs
new file mode 100644
index 0000000..31acdb1
--- /dev/null
+++ b/PokemonGo/RocketAPI/GeneratedCode/FortSearchResponse.cs
@@ -0,0 +1,1132 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: FortSearchResponse.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace PokemonGo.RocketAPI.GeneratedCode {
+
+  /// <summary>Holder for reflection information generated from FortSearchResponse.proto</summary>
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public static partial class FortSearchResponseReflection {
+
+    #region Descriptor
+    /// <summary>File descriptor for FortSearchResponse.proto</summary>
+    public static pbr::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbr::FileDescriptor descriptor;
+
+    static FortSearchResponseReflection() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          string.Concat(
+            "ChhGb3J0U2VhcmNoUmVzcG9uc2UucHJvdG8SIVBva2Vtb25Hby5Sb2NrZXRB",
+            "UEkuR2VuZXJhdGVkQ29kZSK3BgoSRm9ydFNlYXJjaFJlc3BvbnNlEhAKCHVu",
+            "a25vd24xGAEgASgFEhAKCHVua25vd24yGAIgASgDEg8KB2FwaV91cmwYAyAB",
+            "KAkSUAoIdW5rbm93bjYYBiABKAsyPi5Qb2tlbW9uR28uUm9ja2V0QVBJLkdl",
+            "bmVyYXRlZENvZGUuRm9ydFNlYXJjaFJlc3BvbnNlLlVua25vd242ElAKCHVu",
+            "a25vd243GAcgASgLMj4uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRD",
+            "b2RlLkZvcnRTZWFyY2hSZXNwb25zZS5Vbmtub3duNxJOCgdwYXlsb2FkGGQg",
+            "AygLMj0uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLkZvcnRT",
+            "ZWFyY2hSZXNwb25zZS5QYXlsb2FkEhQKDGVycm9yTWVzc2FnZRhlIAEoCRqV",
+            "AQoIVW5rbm93bjYSEAoIdW5rbm93bjEYASABKAUSWQoIdW5rbm93bjIYAiAB",
+            "KAsyRy5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENvZGUuRm9ydFNl",
+            "YXJjaFJlc3BvbnNlLlVua25vd242LlVua25vd24yGhwKCFVua25vd24yEhAK",
+            "CHVua25vd24xGAEgASgMGkMKCFVua25vd243EhEKCXVua25vd243MRgBIAEo",
+            "DBIRCgl1bmtub3duNzIYAiABKAMSEQoJdW5rbm93bjczGAMgASgMGtsBCgdQ",
+            "YXlsb2FkEg4KBlJlc3VsdBgBIAEoBRJJCgVJdGVtcxgCIAMoCzI6LlBva2Vt",
+            "b25Hby5Sb2NrZXRBUEkuR2VuZXJhdGVkQ29kZS5Gb3J0U2VhcmNoUmVzcG9u",
+            "c2UuSXRlbRITCgtHZW1zQXdhcmRlZBgDIAEoBRISCgpFZ2dQb2tlbW9uGAQg",
+            "ASgFEhEKCVhwQXdhcmRlZBgFIAEoBRIYChBDb29sZG93bkNvbXBsZXRlGAYg",
+            "ASgDEh8KF0NoYWluSGFja1NlcXVlbmNlTnVtYmVyGAcgASgFGicKBEl0ZW0S",
+            "DAoESXRlbRgBIAEoBRIRCglJdGVtQ291bnQYAiABKAViBnByb3RvMw=="));
+      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+          new pbr::FileDescriptor[] { },
+          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse), global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Parser, new[]{ "Unknown1", "Unknown2", "ApiUrl", "Unknown6", "Unknown7", "Payload", "ErrorMessage" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6), global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6.Parser, new[]{ "Unknown1", "Unknown2" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6.Types.Unknown2), global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6.Types.Unknown2.Parser, new[]{ "Unknown1" }, null, null, null)}),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown7), global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown7.Parser, new[]{ "Unknown71", "Unknown72", "Unknown73" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Payload), global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Payload.Parser, new[]{ "Result", "Items", "GemsAwarded", "EggPokemon", "XpAwarded", "CooldownComplete", "ChainHackSequenceNumber" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Item), global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Item.Parser, new[]{ "Item_", "ItemCount" }, null, null, null)})
+          }));
+    }
+    #endregion
+
+  }
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class FortSearchResponse : pb::IMessage<FortSearchResponse> {
+    private static readonly pb::MessageParser<FortSearchResponse> _parser = new pb::MessageParser<FortSearchResponse>(() => new FortSearchResponse());
+    public static pb::MessageParser<FortSearchResponse> Parser { get { return _parser; } }
+
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponseReflection.Descriptor.MessageTypes[0]; }
+    }
+
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    public FortSearchResponse() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    public FortSearchResponse(FortSearchResponse other) : this() {
+      unknown1_ = other.unknown1_;
+      unknown2_ = other.unknown2_;
+      apiUrl_ = other.apiUrl_;
+      Unknown6 = other.unknown6_ != null ? other.Unknown6.Clone() : null;
+      Unknown7 = other.unknown7_ != null ? other.Unknown7.Clone() : null;
+      payload_ = other.payload_.Clone();
+      errorMessage_ = other.errorMessage_;
+    }
+
+    public FortSearchResponse Clone() {
+      return new FortSearchResponse(this);
+    }
+
+    /// <summary>Field number for the "unknown1" field.</summary>
+    public const int Unknown1FieldNumber = 1;
+    private int unknown1_;
+    public int Unknown1 {
+      get { return unknown1_; }
+      set {
+        unknown1_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "unknown2" field.</summary>
+    public const int Unknown2FieldNumber = 2;
+    private long unknown2_;
+    public long Unknown2 {
+      get { return unknown2_; }
+      set {
+        unknown2_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "api_url" field.</summary>
+    public const int ApiUrlFieldNumber = 3;
+    private string apiUrl_ = "";
+    public string ApiUrl {
+      get { return apiUrl_; }
+      set {
+        apiUrl_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    /// <summary>Field number for the "unknown6" field.</summary>
+    public const int Unknown6FieldNumber = 6;
+    private global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6 unknown6_;
+    public global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6 Unknown6 {
+      get { return unknown6_; }
+      set {
+        unknown6_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "unknown7" field.</summary>
+    public const int Unknown7FieldNumber = 7;
+    private global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown7 unknown7_;
+    public global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown7 Unknown7 {
+      get { return unknown7_; }
+      set {
+        unknown7_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "payload" field.</summary>
+    public const int PayloadFieldNumber = 100;
+    private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Payload> _repeated_payload_codec
+        = pb::FieldCodec.ForMessage(802, global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Payload.Parser);
+    private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Payload> payload_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Payload>();
+    public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Payload> Payload {
+      get { return payload_; }
+    }
+
+    /// <summary>Field number for the "errorMessage" field.</summary>
+    public const int ErrorMessageFieldNumber = 101;
+    private string errorMessage_ = "";
+    /// <summary>
+    /// Should be moved to an error-proto file if error is always 101 field
+    /// </summary>
+    public string ErrorMessage {
+      get { return errorMessage_; }
+      set {
+        errorMessage_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+      }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as FortSearchResponse);
+    }
+
+    public bool Equals(FortSearchResponse other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (Unknown1 != other.Unknown1) return false;
+      if (Unknown2 != other.Unknown2) return false;
+      if (ApiUrl != other.ApiUrl) return false;
+      if (!object.Equals(Unknown6, other.Unknown6)) return false;
+      if (!object.Equals(Unknown7, other.Unknown7)) return false;
+      if(!payload_.Equals(other.payload_)) return false;
+      if (ErrorMessage != other.ErrorMessage) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 1;
+      if (Unknown1 != 0) hash ^= Unknown1.GetHashCode();
+      if (Unknown2 != 0L) hash ^= Unknown2.GetHashCode();
+      if (ApiUrl.Length != 0) hash ^= ApiUrl.GetHashCode();
+      if (unknown6_ != null) hash ^= Unknown6.GetHashCode();
+      if (unknown7_ != null) hash ^= Unknown7.GetHashCode();
+      hash ^= payload_.GetHashCode();
+      if (ErrorMessage.Length != 0) hash ^= ErrorMessage.GetHashCode();
+      return hash;
+    }
+
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (Unknown1 != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(Unknown1);
+      }
+      if (Unknown2 != 0L) {
+        output.WriteRawTag(16);
+        output.WriteInt64(Unknown2);
+      }
+      if (ApiUrl.Length != 0) {
+        output.WriteRawTag(26);
+        output.WriteString(ApiUrl);
+      }
+      if (unknown6_ != null) {
+        output.WriteRawTag(50);
+        output.WriteMessage(Unknown6);
+      }
+      if (unknown7_ != null) {
+        output.WriteRawTag(58);
+        output.WriteMessage(Unknown7);
+      }
+      payload_.WriteTo(output, _repeated_payload_codec);
+      if (ErrorMessage.Length != 0) {
+        output.WriteRawTag(170, 6);
+        output.WriteString(ErrorMessage);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (Unknown1 != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Unknown1);
+      }
+      if (Unknown2 != 0L) {
+        size += 1 + pb::CodedOutputStream.ComputeInt64Size(Unknown2);
+      }
+      if (ApiUrl.Length != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeStringSize(ApiUrl);
+      }
+      if (unknown6_ != null) {
+        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Unknown6);
+      }
+      if (unknown7_ != null) {
+        size += 1 + pb::CodedOutputStream.ComputeMessageSize(Unknown7);
+      }
+      size += payload_.CalculateSize(_repeated_payload_codec);
+      if (ErrorMessage.Length != 0) {
+        size += 2 + pb::CodedOutputStream.ComputeStringSize(ErrorMessage);
+      }
+      return size;
+    }
+
+    public void MergeFrom(FortSearchResponse other) {
+      if (other == null) {
+        return;
+      }
+      if (other.Unknown1 != 0) {
+        Unknown1 = other.Unknown1;
+      }
+      if (other.Unknown2 != 0L) {
+        Unknown2 = other.Unknown2;
+      }
+      if (other.ApiUrl.Length != 0) {
+        ApiUrl = other.ApiUrl;
+      }
+      if (other.unknown6_ != null) {
+        if (unknown6_ == null) {
+          unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6();
+        }
+        Unknown6.MergeFrom(other.Unknown6);
+      }
+      if (other.unknown7_ != null) {
+        if (unknown7_ == null) {
+          unknown7_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown7();
+        }
+        Unknown7.MergeFrom(other.Unknown7);
+      }
+      payload_.Add(other.payload_);
+      if (other.ErrorMessage.Length != 0) {
+        ErrorMessage = other.ErrorMessage;
+      }
+    }
+
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            Unknown1 = input.ReadInt32();
+            break;
+          }
+          case 16: {
+            Unknown2 = input.ReadInt64();
+            break;
+          }
+          case 26: {
+            ApiUrl = input.ReadString();
+            break;
+          }
+          case 50: {
+            if (unknown6_ == null) {
+              unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6();
+            }
+            input.ReadMessage(unknown6_);
+            break;
+          }
+          case 58: {
+            if (unknown7_ == null) {
+              unknown7_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown7();
+            }
+            input.ReadMessage(unknown7_);
+            break;
+          }
+          case 802: {
+            payload_.AddEntriesFrom(input, _repeated_payload_codec);
+            break;
+          }
+          case 810: {
+            ErrorMessage = input.ReadString();
+            break;
+          }
+        }
+      }
+    }
+
+    #region Nested types
+    /// <summary>Container for nested types declared in the FortSearchResponse message type.</summary>
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    public static partial class Types {
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class Unknown6 : pb::IMessage<Unknown6> {
+        private static readonly pb::MessageParser<Unknown6> _parser = new pb::MessageParser<Unknown6>(() => new Unknown6());
+        public static pb::MessageParser<Unknown6> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Descriptor.NestedTypes[0]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public Unknown6() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public Unknown6(Unknown6 other) : this() {
+          unknown1_ = other.unknown1_;
+          Unknown2 = other.unknown2_ != null ? other.Unknown2.Clone() : null;
+        }
+
+        public Unknown6 Clone() {
+          return new Unknown6(this);
+        }
+
+        /// <summary>Field number for the "unknown1" field.</summary>
+        public const int Unknown1FieldNumber = 1;
+        private int unknown1_;
+        public int Unknown1 {
+          get { return unknown1_; }
+          set {
+            unknown1_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "unknown2" field.</summary>
+        public const int Unknown2FieldNumber = 2;
+        private global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6.Types.Unknown2 unknown2_;
+        public global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6.Types.Unknown2 Unknown2 {
+          get { return unknown2_; }
+          set {
+            unknown2_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as Unknown6);
+        }
+
+        public bool Equals(Unknown6 other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Unknown1 != other.Unknown1) return false;
+          if (!object.Equals(Unknown2, other.Unknown2)) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Unknown1 != 0) hash ^= Unknown1.GetHashCode();
+          if (unknown2_ != null) hash ^= Unknown2.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Unknown1 != 0) {
+            output.WriteRawTag(8);
+            output.WriteInt32(Unknown1);
+          }
+          if (unknown2_ != null) {
+            output.WriteRawTag(18);
+            output.WriteMessage(Unknown2);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Unknown1 != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Unknown1);
+          }
+          if (unknown2_ != null) {
+            size += 1 + pb::CodedOutputStream.ComputeMessageSize(Unknown2);
+          }
+          return size;
+        }
+
+        public void MergeFrom(Unknown6 other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Unknown1 != 0) {
+            Unknown1 = other.Unknown1;
+          }
+          if (other.unknown2_ != null) {
+            if (unknown2_ == null) {
+              unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6.Types.Unknown2();
+            }
+            Unknown2.MergeFrom(other.Unknown2);
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 8: {
+                Unknown1 = input.ReadInt32();
+                break;
+              }
+              case 18: {
+                if (unknown2_ == null) {
+                  unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6.Types.Unknown2();
+                }
+                input.ReadMessage(unknown2_);
+                break;
+              }
+            }
+          }
+        }
+
+        #region Nested types
+        /// <summary>Container for nested types declared in the Unknown6 message type.</summary>
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public static partial class Types {
+          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+          public sealed partial class Unknown2 : pb::IMessage<Unknown2> {
+            private static readonly pb::MessageParser<Unknown2> _parser = new pb::MessageParser<Unknown2>(() => new Unknown2());
+            public static pb::MessageParser<Unknown2> Parser { get { return _parser; } }
+
+            public static pbr::MessageDescriptor Descriptor {
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Unknown6.Descriptor.NestedTypes[0]; }
+            }
+
+            pbr::MessageDescriptor pb::IMessage.Descriptor {
+              get { return Descriptor; }
+            }
+
+            public Unknown2() {
+              OnConstruction();
+            }
+
+            partial void OnConstruction();
+
+            public Unknown2(Unknown2 other) : this() {
+              unknown1_ = other.unknown1_;
+            }
+
+            public Unknown2 Clone() {
+              return new Unknown2(this);
+            }
+
+            /// <summary>Field number for the "unknown1" field.</summary>
+            public const int Unknown1FieldNumber = 1;
+            private pb::ByteString unknown1_ = pb::ByteString.Empty;
+            public pb::ByteString Unknown1 {
+              get { return unknown1_; }
+              set {
+                unknown1_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+              }
+            }
+
+            public override bool Equals(object other) {
+              return Equals(other as Unknown2);
+            }
+
+            public bool Equals(Unknown2 other) {
+              if (ReferenceEquals(other, null)) {
+                return false;
+              }
+              if (ReferenceEquals(other, this)) {
+                return true;
+              }
+              if (Unknown1 != other.Unknown1) return false;
+              return true;
+            }
+
+            public override int GetHashCode() {
+              int hash = 1;
+              if (Unknown1.Length != 0) hash ^= Unknown1.GetHashCode();
+              return hash;
+            }
+
+            public override string ToString() {
+              return pb::JsonFormatter.ToDiagnosticString(this);
+            }
+
+            public void WriteTo(pb::CodedOutputStream output) {
+              if (Unknown1.Length != 0) {
+                output.WriteRawTag(10);
+                output.WriteBytes(Unknown1);
+              }
+            }
+
+            public int CalculateSize() {
+              int size = 0;
+              if (Unknown1.Length != 0) {
+                size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown1);
+              }
+              return size;
+            }
+
+            public void MergeFrom(Unknown2 other) {
+              if (other == null) {
+                return;
+              }
+              if (other.Unknown1.Length != 0) {
+                Unknown1 = other.Unknown1;
+              }
+            }
+
+            public void MergeFrom(pb::CodedInputStream input) {
+              uint tag;
+              while ((tag = input.ReadTag()) != 0) {
+                switch(tag) {
+                  default:
+                    input.SkipLastField();
+                    break;
+                  case 10: {
+                    Unknown1 = input.ReadBytes();
+                    break;
+                  }
+                }
+              }
+            }
+
+          }
+
+        }
+        #endregion
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class Unknown7 : pb::IMessage<Unknown7> {
+        private static readonly pb::MessageParser<Unknown7> _parser = new pb::MessageParser<Unknown7>(() => new Unknown7());
+        public static pb::MessageParser<Unknown7> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Descriptor.NestedTypes[1]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public Unknown7() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public Unknown7(Unknown7 other) : this() {
+          unknown71_ = other.unknown71_;
+          unknown72_ = other.unknown72_;
+          unknown73_ = other.unknown73_;
+        }
+
+        public Unknown7 Clone() {
+          return new Unknown7(this);
+        }
+
+        /// <summary>Field number for the "unknown71" field.</summary>
+        public const int Unknown71FieldNumber = 1;
+        private pb::ByteString unknown71_ = pb::ByteString.Empty;
+        public pb::ByteString Unknown71 {
+          get { return unknown71_; }
+          set {
+            unknown71_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "unknown72" field.</summary>
+        public const int Unknown72FieldNumber = 2;
+        private long unknown72_;
+        public long Unknown72 {
+          get { return unknown72_; }
+          set {
+            unknown72_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "unknown73" field.</summary>
+        public const int Unknown73FieldNumber = 3;
+        private pb::ByteString unknown73_ = pb::ByteString.Empty;
+        public pb::ByteString Unknown73 {
+          get { return unknown73_; }
+          set {
+            unknown73_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as Unknown7);
+        }
+
+        public bool Equals(Unknown7 other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Unknown71 != other.Unknown71) return false;
+          if (Unknown72 != other.Unknown72) return false;
+          if (Unknown73 != other.Unknown73) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Unknown71.Length != 0) hash ^= Unknown71.GetHashCode();
+          if (Unknown72 != 0L) hash ^= Unknown72.GetHashCode();
+          if (Unknown73.Length != 0) hash ^= Unknown73.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Unknown71.Length != 0) {
+            output.WriteRawTag(10);
+            output.WriteBytes(Unknown71);
+          }
+          if (Unknown72 != 0L) {
+            output.WriteRawTag(16);
+            output.WriteInt64(Unknown72);
+          }
+          if (Unknown73.Length != 0) {
+            output.WriteRawTag(26);
+            output.WriteBytes(Unknown73);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Unknown71.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown71);
+          }
+          if (Unknown72 != 0L) {
+            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Unknown72);
+          }
+          if (Unknown73.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown73);
+          }
+          return size;
+        }
+
+        public void MergeFrom(Unknown7 other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Unknown71.Length != 0) {
+            Unknown71 = other.Unknown71;
+          }
+          if (other.Unknown72 != 0L) {
+            Unknown72 = other.Unknown72;
+          }
+          if (other.Unknown73.Length != 0) {
+            Unknown73 = other.Unknown73;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 10: {
+                Unknown71 = input.ReadBytes();
+                break;
+              }
+              case 16: {
+                Unknown72 = input.ReadInt64();
+                break;
+              }
+              case 26: {
+                Unknown73 = input.ReadBytes();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class Payload : pb::IMessage<Payload> {
+        private static readonly pb::MessageParser<Payload> _parser = new pb::MessageParser<Payload>(() => new Payload());
+        public static pb::MessageParser<Payload> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Descriptor.NestedTypes[2]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public Payload() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public Payload(Payload other) : this() {
+          result_ = other.result_;
+          items_ = other.items_.Clone();
+          gemsAwarded_ = other.gemsAwarded_;
+          eggPokemon_ = other.eggPokemon_;
+          xpAwarded_ = other.xpAwarded_;
+          cooldownComplete_ = other.cooldownComplete_;
+          chainHackSequenceNumber_ = other.chainHackSequenceNumber_;
+        }
+
+        public Payload Clone() {
+          return new Payload(this);
+        }
+
+        /// <summary>Field number for the "Result" field.</summary>
+        public const int ResultFieldNumber = 1;
+        private int result_;
+        public int Result {
+          get { return result_; }
+          set {
+            result_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Items" field.</summary>
+        public const int ItemsFieldNumber = 2;
+        private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Item> _repeated_items_codec
+            = pb::FieldCodec.ForMessage(18, global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Item.Parser);
+        private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Item> items_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Item>();
+        public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Types.Item> Items {
+          get { return items_; }
+        }
+
+        /// <summary>Field number for the "GemsAwarded" field.</summary>
+        public const int GemsAwardedFieldNumber = 3;
+        private int gemsAwarded_;
+        public int GemsAwarded {
+          get { return gemsAwarded_; }
+          set {
+            gemsAwarded_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "EggPokemon" field.</summary>
+        public const int EggPokemonFieldNumber = 4;
+        private int eggPokemon_;
+        public int EggPokemon {
+          get { return eggPokemon_; }
+          set {
+            eggPokemon_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "XpAwarded" field.</summary>
+        public const int XpAwardedFieldNumber = 5;
+        private int xpAwarded_;
+        public int XpAwarded {
+          get { return xpAwarded_; }
+          set {
+            xpAwarded_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "CooldownComplete" field.</summary>
+        public const int CooldownCompleteFieldNumber = 6;
+        private long cooldownComplete_;
+        public long CooldownComplete {
+          get { return cooldownComplete_; }
+          set {
+            cooldownComplete_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "ChainHackSequenceNumber" field.</summary>
+        public const int ChainHackSequenceNumberFieldNumber = 7;
+        private int chainHackSequenceNumber_;
+        public int ChainHackSequenceNumber {
+          get { return chainHackSequenceNumber_; }
+          set {
+            chainHackSequenceNumber_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as Payload);
+        }
+
+        public bool Equals(Payload other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Result != other.Result) return false;
+          if(!items_.Equals(other.items_)) return false;
+          if (GemsAwarded != other.GemsAwarded) return false;
+          if (EggPokemon != other.EggPokemon) return false;
+          if (XpAwarded != other.XpAwarded) return false;
+          if (CooldownComplete != other.CooldownComplete) return false;
+          if (ChainHackSequenceNumber != other.ChainHackSequenceNumber) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Result != 0) hash ^= Result.GetHashCode();
+          hash ^= items_.GetHashCode();
+          if (GemsAwarded != 0) hash ^= GemsAwarded.GetHashCode();
+          if (EggPokemon != 0) hash ^= EggPokemon.GetHashCode();
+          if (XpAwarded != 0) hash ^= XpAwarded.GetHashCode();
+          if (CooldownComplete != 0L) hash ^= CooldownComplete.GetHashCode();
+          if (ChainHackSequenceNumber != 0) hash ^= ChainHackSequenceNumber.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Result != 0) {
+            output.WriteRawTag(8);
+            output.WriteInt32(Result);
+          }
+          items_.WriteTo(output, _repeated_items_codec);
+          if (GemsAwarded != 0) {
+            output.WriteRawTag(24);
+            output.WriteInt32(GemsAwarded);
+          }
+          if (EggPokemon != 0) {
+            output.WriteRawTag(32);
+            output.WriteInt32(EggPokemon);
+          }
+          if (XpAwarded != 0) {
+            output.WriteRawTag(40);
+            output.WriteInt32(XpAwarded);
+          }
+          if (CooldownComplete != 0L) {
+            output.WriteRawTag(48);
+            output.WriteInt64(CooldownComplete);
+          }
+          if (ChainHackSequenceNumber != 0) {
+            output.WriteRawTag(56);
+            output.WriteInt32(ChainHackSequenceNumber);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Result != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Result);
+          }
+          size += items_.CalculateSize(_repeated_items_codec);
+          if (GemsAwarded != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(GemsAwarded);
+          }
+          if (EggPokemon != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(EggPokemon);
+          }
+          if (XpAwarded != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(XpAwarded);
+          }
+          if (CooldownComplete != 0L) {
+            size += 1 + pb::CodedOutputStream.ComputeInt64Size(CooldownComplete);
+          }
+          if (ChainHackSequenceNumber != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(ChainHackSequenceNumber);
+          }
+          return size;
+        }
+
+        public void MergeFrom(Payload other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Result != 0) {
+            Result = other.Result;
+          }
+          items_.Add(other.items_);
+          if (other.GemsAwarded != 0) {
+            GemsAwarded = other.GemsAwarded;
+          }
+          if (other.EggPokemon != 0) {
+            EggPokemon = other.EggPokemon;
+          }
+          if (other.XpAwarded != 0) {
+            XpAwarded = other.XpAwarded;
+          }
+          if (other.CooldownComplete != 0L) {
+            CooldownComplete = other.CooldownComplete;
+          }
+          if (other.ChainHackSequenceNumber != 0) {
+            ChainHackSequenceNumber = other.ChainHackSequenceNumber;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 8: {
+                Result = input.ReadInt32();
+                break;
+              }
+              case 18: {
+                items_.AddEntriesFrom(input, _repeated_items_codec);
+                break;
+              }
+              case 24: {
+                GemsAwarded = input.ReadInt32();
+                break;
+              }
+              case 32: {
+                EggPokemon = input.ReadInt32();
+                break;
+              }
+              case 40: {
+                XpAwarded = input.ReadInt32();
+                break;
+              }
+              case 48: {
+                CooldownComplete = input.ReadInt64();
+                break;
+              }
+              case 56: {
+                ChainHackSequenceNumber = input.ReadInt32();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class Item : pb::IMessage<Item> {
+        private static readonly pb::MessageParser<Item> _parser = new pb::MessageParser<Item>(() => new Item());
+        public static pb::MessageParser<Item> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.FortSearchResponse.Descriptor.NestedTypes[3]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public Item() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public Item(Item other) : this() {
+          item_ = other.item_;
+          itemCount_ = other.itemCount_;
+        }
+
+        public Item Clone() {
+          return new Item(this);
+        }
+
+        /// <summary>Field number for the "Item" field.</summary>
+        public const int Item_FieldNumber = 1;
+        private int item_;
+        public int Item_ {
+          get { return item_; }
+          set {
+            item_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "ItemCount" field.</summary>
+        public const int ItemCountFieldNumber = 2;
+        private int itemCount_;
+        public int ItemCount {
+          get { return itemCount_; }
+          set {
+            itemCount_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as Item);
+        }
+
+        public bool Equals(Item other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Item_ != other.Item_) return false;
+          if (ItemCount != other.ItemCount) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Item_ != 0) hash ^= Item_.GetHashCode();
+          if (ItemCount != 0) hash ^= ItemCount.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Item_ != 0) {
+            output.WriteRawTag(8);
+            output.WriteInt32(Item_);
+          }
+          if (ItemCount != 0) {
+            output.WriteRawTag(16);
+            output.WriteInt32(ItemCount);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Item_ != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(Item_);
+          }
+          if (ItemCount != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeInt32Size(ItemCount);
+          }
+          return size;
+        }
+
+        public void MergeFrom(Item other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Item_ != 0) {
+            Item_ = other.Item_;
+          }
+          if (other.ItemCount != 0) {
+            ItemCount = other.ItemCount;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 8: {
+                Item_ = input.ReadInt32();
+                break;
+              }
+              case 16: {
+                ItemCount = input.ReadInt32();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+    }
+    #endregion
+
+  }
+
+  #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/PokemonGo/RocketAPI/GeneratedCode/EncounterResponse.cs b/PokemonGo/RocketAPI/GeneratedCode/MapObjectsResponse.cs
similarity index 85%
rename from PokemonGo/RocketAPI/GeneratedCode/EncounterResponse.cs
rename to PokemonGo/RocketAPI/GeneratedCode/MapObjectsResponse.cs
index 5038084..bfbfd10 100644
--- a/PokemonGo/RocketAPI/GeneratedCode/EncounterResponse.cs
+++ b/PokemonGo/RocketAPI/GeneratedCode/MapObjectsResponse.cs
@@ -1,5 +1,5 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: EncounterResponse.proto
+// source: MapObjectsResponse.proto
 #pragma warning disable 1591, 0612, 3021
 #region Designer generated code

@@ -9,96 +9,97 @@ using pbr = global::Google.Protobuf.Reflection;
 using scg = global::System.Collections.Generic;
 namespace PokemonGo.RocketAPI.GeneratedCode {

-  /// <summary>Holder for reflection information generated from EncounterResponse.proto</summary>
+  /// <summary>Holder for reflection information generated from MapObjectsResponse.proto</summary>
   [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public static partial class EncounterResponseReflection {
+  public static partial class MapObjectsResponseReflection {

     #region Descriptor
-    /// <summary>File descriptor for EncounterResponse.proto</summary>
+    /// <summary>File descriptor for MapObjectsResponse.proto</summary>
     public static pbr::FileDescriptor Descriptor {
       get { return descriptor; }
     }
     private static pbr::FileDescriptor descriptor;

-    static EncounterResponseReflection() {
+    static MapObjectsResponseReflection() {
       byte[] descriptorData = global::System.Convert.FromBase64String(
           string.Concat(
-            "ChdFbmNvdW50ZXJSZXNwb25zZS5wcm90bxIhUG9rZW1vbkdvLlJvY2tldEFQ",
-            "SS5HZW5lcmF0ZWRDb2RlIr0VChFFbmNvdW50ZXJSZXNwb25zZRIQCgh1bmtu",
-            "b3duMRgBIAEoBRIQCgh1bmtub3duMhgCIAEoAxIPCgdhcGlfdXJsGAMgASgJ",
-            "Ek8KCHVua25vd242GAYgASgLMj0uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5l",
-            "cmF0ZWRDb2RlLkVuY291bnRlclJlc3BvbnNlLlVua25vd242Ek8KCHVua25v",
-            "d243GAcgASgLMj0uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2Rl",
-            "LkVuY291bnRlclJlc3BvbnNlLlVua25vd243Ek0KB3BheWxvYWQYZCADKAsy",
-            "PC5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENvZGUuRW5jb3VudGVy",
-            "UmVzcG9uc2UuUGF5bG9hZBIUCgxlcnJvck1lc3NhZ2UYZSABKAkalAEKCFVu",
-            "a25vd242EhAKCHVua25vd24xGAEgASgFElgKCHVua25vd24yGAIgASgLMkYu",
-            "UG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLkVuY291bnRlclJl",
-            "c3BvbnNlLlVua25vd242LlVua25vd24yGhwKCFVua25vd24yEhAKCHVua25v",
-            "d24xGAEgASgMGkMKCFVua25vd243EhEKCXVua25vd243MRgBIAEoDBIRCgl1",
-            "bmtub3duNzIYAiABKAMSEQoJdW5rbm93bjczGAMgASgMGo8RCgdQYXlsb2Fk",
-            "ElsKB3Byb2ZpbGUYASADKAsySi5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVy",
-            "YXRlZENvZGUuRW5jb3VudGVyUmVzcG9uc2UuUGF5bG9hZC5DbGllbnRNYXBD",
-            "ZWxsEhUKDXVua25vd25udW1iZXIYAiABKAUanQYKDUNsaWVudE1hcENlbGwS",
-            "EAoIUzJDZWxsSWQYASABKAQSEgoKQXNPZlRpbWVNcxgCIAEoAxJbCgRGb3J0",
-            "GAMgAygLMk0uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLkVu",
-            "Y291bnRlclJlc3BvbnNlLlBheWxvYWQuUG9rZW1vbkZvcnRQcm90bxJmCgpT",
-            "cGF3blBvaW50GAQgAygLMlIuUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0",
-            "ZWRDb2RlLkVuY291bnRlclJlc3BvbnNlLlBheWxvYWQuQ2xpZW50U3Bhd25Q",
-            "b2ludFByb3RvEmIKC1dpbGRQb2tlbW9uGAUgAygLMk0uUG9rZW1vbkdvLlJv",
-            "Y2tldEFQSS5HZW5lcmF0ZWRDb2RlLkVuY291bnRlclJlc3BvbnNlLlBheWxv",
-            "YWQuV2lsZFBva2Vtb25Qcm90bxIXCg9Jc1RydW5jYXRlZExpc3QYByABKAgS",
-            "aQoLRm9ydFN1bW1hcnkYCCADKAsyVC5Qb2tlbW9uR28uUm9ja2V0QVBJLkdl",
-            "bmVyYXRlZENvZGUuRW5jb3VudGVyUmVzcG9uc2UuUGF5bG9hZC5Qb2tlbW9u",
-            "U3VtbWFyeUZvcnRQcm90bxJvChNEZWNpbWF0ZWRTcGF3blBvaW50GAkgAygL",
-            "MlIuUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLkVuY291bnRl",
-            "clJlc3BvbnNlLlBheWxvYWQuQ2xpZW50U3Bhd25Qb2ludFByb3RvEmAKCk1h",
-            "cFBva2Vtb24YCiADKAsyTC5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRl",
-            "ZENvZGUuRW5jb3VudGVyUmVzcG9uc2UuUGF5bG9hZC5NYXBQb2tlbW9uUHJv",
-            "dG8SZgoNTmVhcmJ5UG9rZW1vbhgLIAMoCzJPLlBva2Vtb25Hby5Sb2NrZXRB",
-            "UEkuR2VuZXJhdGVkQ29kZS5FbmNvdW50ZXJSZXNwb25zZS5QYXlsb2FkLk5l",
-            "YXJieVBva2Vtb25Qcm90bxqUAQoLV2lsZFBva2Vtb24SEAoIVW5pcXVlSWQY",
-            "ASABKAkSEQoJUG9rZW1vbklkGAIgASgJEmAKB3Bva2Vtb24YCyADKAsyTy5Q",
-            "b2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENvZGUuRW5jb3VudGVyUmVz",
-            "cG9uc2UuUGF5bG9hZC5OZWFyYnlQb2tlbW9uUHJvdG8akgEKD01hcFBva2Vt",
-            "b25Qcm90bxIUCgxTcGF3bnBvaW50SWQYASABKAkSEwoLRW5jb3VudGVySWQY",
-            "AiABKAQSFQoNUG9rZWRleFR5cGVJZBgDIAEoBRIYChBFeHBpcmF0aW9uVGlt",
-            "ZU1zGAQgASgDEhAKCExhdGl0dWRlGAUgASgBEhEKCUxvbmdpdHVkZRgGIAEo",
-            "ARqTAwoQUG9rZW1vbkZvcnRQcm90bxIOCgZGb3J0SWQYASABKAkSFgoOTGFz",
-            "dE1vZGlmaWVkTXMYAiABKAMSEAoITGF0aXR1ZGUYAyABKAESEQoJTG9uZ2l0",
-            "dWRlGAQgASgBEgwKBFRlYW0YBSABKAUSFgoOR3VhcmRQb2tlbW9uSWQYBiAB",
-            "KAUSGQoRR3VhcmRQb2tlbW9uTGV2ZWwYByABKAUSDwoHRW5hYmxlZBgIIAEo",
-            "CBIQCghGb3J0VHlwZRgJIAEoBRIRCglHeW1Qb2ludHMYCiABKAMSEgoKSXNJ",
-            "bkJhdHRsZRgLIAEoCBJjCg1BY3RpdmVQb2tlbW9uGA0gASgLMkwuUG9rZW1v",
-            "bkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLkVuY291bnRlclJlc3BvbnNl",
-            "LlBheWxvYWQuTWFwUG9rZW1vblByb3RvEhoKEkNvb2xkb3duQ29tcGxldGVN",
-            "cxgOIAEoAxIPCgdTcG9uc29yGA8gASgFEhUKDVJlbmRlcmluZ1R5cGUYECAB",
-            "KAUabQoXUG9rZW1vblN1bW1hcnlGb3J0UHJvdG8SFQoNRm9ydFN1bW1hcnlJ",
-            "ZBgBIAEoCRIWCg5MYXN0TW9kaWZpZWRNcxgCIAEoAxIQCghMYXRpdHVkZRgD",
-            "IAEoARIRCglMb25naXR1ZGUYBCABKAEaPAoVQ2xpZW50U3Bhd25Qb2ludFBy",
-            "b3RvEhAKCExhdGl0dWRlGAIgASgBEhEKCUxvbmdpdHVkZRgDIAEoARqmAgoQ",
-            "V2lsZFBva2Vtb25Qcm90bxITCgtFbmNvdW50ZXJJZBgBIAEoBBIWCg5MYXN0",
-            "TW9kaWZpZWRNcxgCIAEoAxIQCghMYXRpdHVkZRgDIAEoARIRCglMb25naXR1",
-            "ZGUYBCABKAESFAoMU3Bhd25Qb2ludElkGAUgASgJEmYKB3Bva2Vtb24YByAB",
-            "KAsyVS5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENvZGUuRW5jb3Vu",
-            "dGVyUmVzcG9uc2UuUGF5bG9hZC5XaWxkUG9rZW1vblByb3RvLlBva2Vtb24S",
-            "GAoQVGltZVRpbGxIaWRkZW5NcxgLIAEoBRooCgdQb2tlbW9uEgoKAklkGAEg",
-            "ASgEEhEKCVBva2Vtb25JZBgCIAEoBRpYChJOZWFyYnlQb2tlbW9uUHJvdG8S",
-            "FQoNUG9rZWRleE51bWJlchgBIAEoBRIWCg5EaXN0YW5jZU1ldGVycxgCIAEo",
-            "AhITCgtFbmNvdW50ZXJJZBgDIAEoBGIGcHJvdG8z"));
+            "ChhNYXBPYmplY3RzUmVzcG9uc2UucHJvdG8SIVBva2Vtb25Hby5Sb2NrZXRB",
+            "UEkuR2VuZXJhdGVkQ29kZSLNFQoSTWFwT2JqZWN0c1Jlc3BvbnNlEhAKCHVu",
+            "a25vd24xGAEgASgFEhAKCHVua25vd24yGAIgASgDEg8KB2FwaV91cmwYAyAB",
+            "KAkSUAoIdW5rbm93bjYYBiABKAsyPi5Qb2tlbW9uR28uUm9ja2V0QVBJLkdl",
+            "bmVyYXRlZENvZGUuTWFwT2JqZWN0c1Jlc3BvbnNlLlVua25vd242ElAKCHVu",
+            "a25vd243GAcgASgLMj4uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRD",
+            "b2RlLk1hcE9iamVjdHNSZXNwb25zZS5Vbmtub3duNxJOCgdwYXlsb2FkGGQg",
+            "AygLMj0uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLk1hcE9i",
+            "amVjdHNSZXNwb25zZS5QYXlsb2FkEhQKDGVycm9yTWVzc2FnZRhlIAEoCRqV",
+            "AQoIVW5rbm93bjYSEAoIdW5rbm93bjEYASABKAUSWQoIdW5rbm93bjIYAiAB",
+            "KAsyRy5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENvZGUuTWFwT2Jq",
+            "ZWN0c1Jlc3BvbnNlLlVua25vd242LlVua25vd24yGhwKCFVua25vd24yEhAK",
+            "CHVua25vd24xGAEgASgMGkMKCFVua25vd243EhEKCXVua25vd243MRgBIAEo",
+            "DBIRCgl1bmtub3duNzIYAiABKAMSEQoJdW5rbm93bjczGAMgASgMGpoRCgdQ",
+            "YXlsb2FkElwKB3Byb2ZpbGUYASADKAsySy5Qb2tlbW9uR28uUm9ja2V0QVBJ",
+            "LkdlbmVyYXRlZENvZGUuTWFwT2JqZWN0c1Jlc3BvbnNlLlBheWxvYWQuQ2xp",
+            "ZW50TWFwQ2VsbBIVCg11bmtub3dubnVtYmVyGAIgASgFGqQGCg1DbGllbnRN",
+            "YXBDZWxsEhAKCFMyQ2VsbElkGAEgASgEEhIKCkFzT2ZUaW1lTXMYAiABKAMS",
+            "XAoERm9ydBgDIAMoCzJOLlBva2Vtb25Hby5Sb2NrZXRBUEkuR2VuZXJhdGVk",
+            "Q29kZS5NYXBPYmplY3RzUmVzcG9uc2UuUGF5bG9hZC5Qb2tlbW9uRm9ydFBy",
+            "b3RvEmcKClNwYXduUG9pbnQYBCADKAsyUy5Qb2tlbW9uR28uUm9ja2V0QVBJ",
+            "LkdlbmVyYXRlZENvZGUuTWFwT2JqZWN0c1Jlc3BvbnNlLlBheWxvYWQuQ2xp",
+            "ZW50U3Bhd25Qb2ludFByb3RvEmMKC1dpbGRQb2tlbW9uGAUgAygLMk4uUG9r",
+            "ZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLk1hcE9iamVjdHNSZXNw",
+            "b25zZS5QYXlsb2FkLldpbGRQb2tlbW9uUHJvdG8SFwoPSXNUcnVuY2F0ZWRM",
+            "aXN0GAcgASgIEmoKC0ZvcnRTdW1tYXJ5GAggAygLMlUuUG9rZW1vbkdvLlJv",
+            "Y2tldEFQSS5HZW5lcmF0ZWRDb2RlLk1hcE9iamVjdHNSZXNwb25zZS5QYXls",
+            "b2FkLlBva2Vtb25TdW1tYXJ5Rm9ydFByb3RvEnAKE0RlY2ltYXRlZFNwYXdu",
+            "UG9pbnQYCSADKAsyUy5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENv",
+            "ZGUuTWFwT2JqZWN0c1Jlc3BvbnNlLlBheWxvYWQuQ2xpZW50U3Bhd25Qb2lu",
+            "dFByb3RvEmEKCk1hcFBva2Vtb24YCiADKAsyTS5Qb2tlbW9uR28uUm9ja2V0",
+            "QVBJLkdlbmVyYXRlZENvZGUuTWFwT2JqZWN0c1Jlc3BvbnNlLlBheWxvYWQu",
+            "TWFwUG9rZW1vblByb3RvEmcKDU5lYXJieVBva2Vtb24YCyADKAsyUC5Qb2tl",
+            "bW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENvZGUuTWFwT2JqZWN0c1Jlc3Bv",
+            "bnNlLlBheWxvYWQuTmVhcmJ5UG9rZW1vblByb3RvGpUBCgtXaWxkUG9rZW1v",
+            "bhIQCghVbmlxdWVJZBgBIAEoCRIRCglQb2tlbW9uSWQYAiABKAkSYQoHcG9r",
+            "ZW1vbhgLIAMoCzJQLlBva2Vtb25Hby5Sb2NrZXRBUEkuR2VuZXJhdGVkQ29k",
+            "ZS5NYXBPYmplY3RzUmVzcG9uc2UuUGF5bG9hZC5OZWFyYnlQb2tlbW9uUHJv",
+            "dG8akgEKD01hcFBva2Vtb25Qcm90bxIUCgxTcGF3bnBvaW50SWQYASABKAkS",
+            "EwoLRW5jb3VudGVySWQYAiABKAQSFQoNUG9rZWRleFR5cGVJZBgDIAEoBRIY",
+            "ChBFeHBpcmF0aW9uVGltZU1zGAQgASgDEhAKCExhdGl0dWRlGAUgASgBEhEK",
+            "CUxvbmdpdHVkZRgGIAEoARqUAwoQUG9rZW1vbkZvcnRQcm90bxIOCgZGb3J0",
+            "SWQYASABKAkSFgoOTGFzdE1vZGlmaWVkTXMYAiABKAMSEAoITGF0aXR1ZGUY",
+            "AyABKAESEQoJTG9uZ2l0dWRlGAQgASgBEgwKBFRlYW0YBSABKAUSFgoOR3Vh",
+            "cmRQb2tlbW9uSWQYBiABKAUSGQoRR3VhcmRQb2tlbW9uTGV2ZWwYByABKAUS",
+            "DwoHRW5hYmxlZBgIIAEoCBIQCghGb3J0VHlwZRgJIAEoBRIRCglHeW1Qb2lu",
+            "dHMYCiABKAMSEgoKSXNJbkJhdHRsZRgLIAEoCBJkCg1BY3RpdmVQb2tlbW9u",
+            "GA0gASgLMk0uUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5lcmF0ZWRDb2RlLk1h",
+            "cE9iamVjdHNSZXNwb25zZS5QYXlsb2FkLk1hcFBva2Vtb25Qcm90bxIaChJD",
+            "b29sZG93bkNvbXBsZXRlTXMYDiABKAMSDwoHU3BvbnNvchgPIAEoBRIVCg1S",
+            "ZW5kZXJpbmdUeXBlGBAgASgFGm0KF1Bva2Vtb25TdW1tYXJ5Rm9ydFByb3Rv",
+            "EhUKDUZvcnRTdW1tYXJ5SWQYASABKAkSFgoOTGFzdE1vZGlmaWVkTXMYAiAB",
+            "KAMSEAoITGF0aXR1ZGUYAyABKAESEQoJTG9uZ2l0dWRlGAQgASgBGjwKFUNs",
+            "aWVudFNwYXduUG9pbnRQcm90bxIQCghMYXRpdHVkZRgCIAEoARIRCglMb25n",
+            "aXR1ZGUYAyABKAEapwIKEFdpbGRQb2tlbW9uUHJvdG8SEwoLRW5jb3VudGVy",
+            "SWQYASABKAQSFgoOTGFzdE1vZGlmaWVkTXMYAiABKAMSEAoITGF0aXR1ZGUY",
+            "AyABKAESEQoJTG9uZ2l0dWRlGAQgASgBEhQKDFNwYXduUG9pbnRJZBgFIAEo",
+            "CRJnCgdwb2tlbW9uGAcgASgLMlYuUG9rZW1vbkdvLlJvY2tldEFQSS5HZW5l",
+            "cmF0ZWRDb2RlLk1hcE9iamVjdHNSZXNwb25zZS5QYXlsb2FkLldpbGRQb2tl",
+            "bW9uUHJvdG8uUG9rZW1vbhIYChBUaW1lVGlsbEhpZGRlbk1zGAsgASgFGigK",
+            "B1Bva2Vtb24SCgoCSWQYASABKAQSEQoJUG9rZW1vbklkGAIgASgFGlgKEk5l",
+            "YXJieVBva2Vtb25Qcm90bxIVCg1Qb2tlZGV4TnVtYmVyGAEgASgFEhYKDkRp",
+            "c3RhbmNlTWV0ZXJzGAIgASgCEhMKC0VuY291bnRlcklkGAMgASgEYgZwcm90",
+            "bzM="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { },
           new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Parser, new[]{ "Unknown1", "Unknown2", "ApiUrl", "Unknown6", "Unknown7", "Payload", "ErrorMessage" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6.Parser, new[]{ "Unknown1", "Unknown2" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6.Types.Unknown2), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6.Types.Unknown2.Parser, new[]{ "Unknown1" }, null, null, null)}),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown7), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown7.Parser, new[]{ "Unknown71", "Unknown72", "Unknown73" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Parser, new[]{ "Profile", "Unknownnumber" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientMapCell), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientMapCell.Parser, new[]{ "S2CellId", "AsOfTimeMs", "Fort", "SpawnPoint", "WildPokemon", "IsTruncatedList", "FortSummary", "DecimatedSpawnPoint", "MapPokemon", "NearbyPokemon" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemon), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemon.Parser, new[]{ "UniqueId", "PokemonId", "Pokemon" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto.Parser, new[]{ "SpawnpointId", "EncounterId", "PokedexTypeId", "ExpirationTimeMs", "Latitude", "Longitude" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonFortProto), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonFortProto.Parser, new[]{ "FortId", "LastModifiedMs", "Latitude", "Longitude", "Team", "GuardPokemonId", "GuardPokemonLevel", "Enabled", "FortType", "GymPoints", "IsInBattle", "ActivePokemon", "CooldownCompleteMs", "Sponsor", "RenderingType" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonSummaryFortProto), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonSummaryFortProto.Parser, new[]{ "FortSummaryId", "LastModifiedMs", "Latitude", "Longitude" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto.Parser, new[]{ "Latitude", "Longitude" }, null, null, null),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Parser, new[]{ "EncounterId", "LastModifiedMs", "Latitude", "Longitude", "SpawnPointId", "Pokemon", "TimeTillHiddenMs" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon.Parser, new[]{ "Id", "PokemonId" }, null, null, null)}),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto), global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto.Parser, new[]{ "PokedexNumber", "DistanceMeters", "EncounterId" }, null, null, null)})})
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Parser, new[]{ "Unknown1", "Unknown2", "ApiUrl", "Unknown6", "Unknown7", "Payload", "ErrorMessage" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6.Parser, new[]{ "Unknown1", "Unknown2" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6.Types.Unknown2), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6.Types.Unknown2.Parser, new[]{ "Unknown1" }, null, null, null)}),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown7), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown7.Parser, new[]{ "Unknown71", "Unknown72", "Unknown73" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Parser, new[]{ "Profile", "Unknownnumber" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientMapCell), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientMapCell.Parser, new[]{ "S2CellId", "AsOfTimeMs", "Fort", "SpawnPoint", "WildPokemon", "IsTruncatedList", "FortSummary", "DecimatedSpawnPoint", "MapPokemon", "NearbyPokemon" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemon), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemon.Parser, new[]{ "UniqueId", "PokemonId", "Pokemon" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto.Parser, new[]{ "SpawnpointId", "EncounterId", "PokedexTypeId", "ExpirationTimeMs", "Latitude", "Longitude" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonFortProto), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonFortProto.Parser, new[]{ "FortId", "LastModifiedMs", "Latitude", "Longitude", "Team", "GuardPokemonId", "GuardPokemonLevel", "Enabled", "FortType", "GymPoints", "IsInBattle", "ActivePokemon", "CooldownCompleteMs", "Sponsor", "RenderingType" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonSummaryFortProto), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonSummaryFortProto.Parser, new[]{ "FortSummaryId", "LastModifiedMs", "Latitude", "Longitude" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto.Parser, new[]{ "Latitude", "Longitude" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Parser, new[]{ "EncounterId", "LastModifiedMs", "Latitude", "Longitude", "SpawnPointId", "Pokemon", "TimeTillHiddenMs" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon.Parser, new[]{ "Id", "PokemonId" }, null, null, null)}),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto), global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto.Parser, new[]{ "PokedexNumber", "DistanceMeters", "EncounterId" }, null, null, null)})})
           }));
     }
     #endregion
@@ -106,25 +107,25 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
   }
   #region Messages
   [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-  public sealed partial class EncounterResponse : pb::IMessage<EncounterResponse> {
-    private static readonly pb::MessageParser<EncounterResponse> _parser = new pb::MessageParser<EncounterResponse>(() => new EncounterResponse());
-    public static pb::MessageParser<EncounterResponse> Parser { get { return _parser; } }
+  public sealed partial class MapObjectsResponse : pb::IMessage<MapObjectsResponse> {
+    private static readonly pb::MessageParser<MapObjectsResponse> _parser = new pb::MessageParser<MapObjectsResponse>(() => new MapObjectsResponse());
+    public static pb::MessageParser<MapObjectsResponse> Parser { get { return _parser; } }

     public static pbr::MessageDescriptor Descriptor {
-      get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponseReflection.Descriptor.MessageTypes[0]; }
+      get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponseReflection.Descriptor.MessageTypes[0]; }
     }

     pbr::MessageDescriptor pb::IMessage.Descriptor {
       get { return Descriptor; }
     }

-    public EncounterResponse() {
+    public MapObjectsResponse() {
       OnConstruction();
     }

     partial void OnConstruction();

-    public EncounterResponse(EncounterResponse other) : this() {
+    public MapObjectsResponse(MapObjectsResponse other) : this() {
       unknown1_ = other.unknown1_;
       unknown2_ = other.unknown2_;
       apiUrl_ = other.apiUrl_;
@@ -134,8 +135,8 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
       errorMessage_ = other.errorMessage_;
     }

-    public EncounterResponse Clone() {
-      return new EncounterResponse(this);
+    public MapObjectsResponse Clone() {
+      return new MapObjectsResponse(this);
     }

     /// <summary>Field number for the "unknown1" field.</summary>
@@ -170,8 +171,8 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

     /// <summary>Field number for the "unknown6" field.</summary>
     public const int Unknown6FieldNumber = 6;
-    private global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6 unknown6_;
-    public global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6 Unknown6 {
+    private global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6 unknown6_;
+    public global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6 Unknown6 {
       get { return unknown6_; }
       set {
         unknown6_ = value;
@@ -180,8 +181,8 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

     /// <summary>Field number for the "unknown7" field.</summary>
     public const int Unknown7FieldNumber = 7;
-    private global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown7 unknown7_;
-    public global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown7 Unknown7 {
+    private global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown7 unknown7_;
+    public global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown7 Unknown7 {
       get { return unknown7_; }
       set {
         unknown7_ = value;
@@ -190,10 +191,10 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

     /// <summary>Field number for the "payload" field.</summary>
     public const int PayloadFieldNumber = 100;
-    private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload> _repeated_payload_codec
-        = pb::FieldCodec.ForMessage(802, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Parser);
-    private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload> payload_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload>();
-    public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload> Payload {
+    private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload> _repeated_payload_codec
+        = pb::FieldCodec.ForMessage(802, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Parser);
+    private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload> payload_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload>();
+    public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload> Payload {
       get { return payload_; }
     }

@@ -211,10 +212,10 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
     }

     public override bool Equals(object other) {
-      return Equals(other as EncounterResponse);
+      return Equals(other as MapObjectsResponse);
     }

-    public bool Equals(EncounterResponse other) {
+    public bool Equals(MapObjectsResponse other) {
       if (ReferenceEquals(other, null)) {
         return false;
       }
@@ -299,7 +300,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
       return size;
     }

-    public void MergeFrom(EncounterResponse other) {
+    public void MergeFrom(MapObjectsResponse other) {
       if (other == null) {
         return;
       }
@@ -314,13 +315,13 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
       }
       if (other.unknown6_ != null) {
         if (unknown6_ == null) {
-          unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6();
+          unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6();
         }
         Unknown6.MergeFrom(other.Unknown6);
       }
       if (other.unknown7_ != null) {
         if (unknown7_ == null) {
-          unknown7_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown7();
+          unknown7_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown7();
         }
         Unknown7.MergeFrom(other.Unknown7);
       }
@@ -351,14 +352,14 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
           }
           case 50: {
             if (unknown6_ == null) {
-              unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6();
+              unknown6_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6();
             }
             input.ReadMessage(unknown6_);
             break;
           }
           case 58: {
             if (unknown7_ == null) {
-              unknown7_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown7();
+              unknown7_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown7();
             }
             input.ReadMessage(unknown7_);
             break;
@@ -376,7 +377,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
     }

     #region Nested types
-    /// <summary>Container for nested types declared in the EncounterResponse message type.</summary>
+    /// <summary>Container for nested types declared in the MapObjectsResponse message type.</summary>
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     public static partial class Types {
       [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
@@ -385,7 +386,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
         public static pb::MessageParser<Unknown6> Parser { get { return _parser; } }

         public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Descriptor.NestedTypes[0]; }
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Descriptor.NestedTypes[0]; }
         }

         pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -419,8 +420,8 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

         /// <summary>Field number for the "unknown2" field.</summary>
         public const int Unknown2FieldNumber = 2;
-        private global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6.Types.Unknown2 unknown2_;
-        public global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6.Types.Unknown2 Unknown2 {
+        private global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6.Types.Unknown2 unknown2_;
+        public global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6.Types.Unknown2 Unknown2 {
           get { return unknown2_; }
           set {
             unknown2_ = value;
@@ -485,7 +486,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
           }
           if (other.unknown2_ != null) {
             if (unknown2_ == null) {
-              unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6.Types.Unknown2();
+              unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6.Types.Unknown2();
             }
             Unknown2.MergeFrom(other.Unknown2);
           }
@@ -504,7 +505,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
               }
               case 18: {
                 if (unknown2_ == null) {
-                  unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6.Types.Unknown2();
+                  unknown2_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6.Types.Unknown2();
                 }
                 input.ReadMessage(unknown2_);
                 break;
@@ -523,7 +524,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<Unknown2> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Unknown6.Descriptor.NestedTypes[0]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Unknown6.Descriptor.NestedTypes[0]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -631,7 +632,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
         public static pb::MessageParser<Unknown7> Parser { get { return _parser; } }

         public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Descriptor.NestedTypes[1]; }
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Descriptor.NestedTypes[1]; }
         }

         pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -788,7 +789,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
         public static pb::MessageParser<Payload> Parser { get { return _parser; } }

         public static pbr::MessageDescriptor Descriptor {
-          get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Descriptor.NestedTypes[2]; }
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Descriptor.NestedTypes[2]; }
         }

         pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -812,10 +813,10 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

         /// <summary>Field number for the "profile" field.</summary>
         public const int ProfileFieldNumber = 1;
-        private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientMapCell> _repeated_profile_codec
-            = pb::FieldCodec.ForMessage(10, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientMapCell.Parser);
-        private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientMapCell> profile_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientMapCell>();
-        public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientMapCell> Profile {
+        private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientMapCell> _repeated_profile_codec
+            = pb::FieldCodec.ForMessage(10, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientMapCell.Parser);
+        private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientMapCell> profile_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientMapCell>();
+        public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientMapCell> Profile {
           get { return profile_; }
         }

@@ -912,7 +913,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<ClientMapCell> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Descriptor.NestedTypes[0]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Descriptor.NestedTypes[0]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -964,28 +965,28 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

             /// <summary>Field number for the "Fort" field.</summary>
             public const int FortFieldNumber = 3;
-            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonFortProto> _repeated_fort_codec
-                = pb::FieldCodec.ForMessage(26, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonFortProto.Parser);
-            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonFortProto> fort_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonFortProto>();
-            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonFortProto> Fort {
+            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonFortProto> _repeated_fort_codec
+                = pb::FieldCodec.ForMessage(26, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonFortProto.Parser);
+            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonFortProto> fort_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonFortProto>();
+            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonFortProto> Fort {
               get { return fort_; }
             }

             /// <summary>Field number for the "SpawnPoint" field.</summary>
             public const int SpawnPointFieldNumber = 4;
-            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto> _repeated_spawnPoint_codec
-                = pb::FieldCodec.ForMessage(34, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto.Parser);
-            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto> spawnPoint_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto>();
-            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto> SpawnPoint {
+            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto> _repeated_spawnPoint_codec
+                = pb::FieldCodec.ForMessage(34, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto.Parser);
+            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto> spawnPoint_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto>();
+            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto> SpawnPoint {
               get { return spawnPoint_; }
             }

             /// <summary>Field number for the "WildPokemon" field.</summary>
             public const int WildPokemonFieldNumber = 5;
-            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto> _repeated_wildPokemon_codec
-                = pb::FieldCodec.ForMessage(42, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Parser);
-            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto> wildPokemon_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto>();
-            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto> WildPokemon {
+            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto> _repeated_wildPokemon_codec
+                = pb::FieldCodec.ForMessage(42, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Parser);
+            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto> wildPokemon_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto>();
+            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto> WildPokemon {
               get { return wildPokemon_; }
             }

@@ -1004,37 +1005,37 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

             /// <summary>Field number for the "FortSummary" field.</summary>
             public const int FortSummaryFieldNumber = 8;
-            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonSummaryFortProto> _repeated_fortSummary_codec
-                = pb::FieldCodec.ForMessage(66, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonSummaryFortProto.Parser);
-            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonSummaryFortProto> fortSummary_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonSummaryFortProto>();
-            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.PokemonSummaryFortProto> FortSummary {
+            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonSummaryFortProto> _repeated_fortSummary_codec
+                = pb::FieldCodec.ForMessage(66, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonSummaryFortProto.Parser);
+            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonSummaryFortProto> fortSummary_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonSummaryFortProto>();
+            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.PokemonSummaryFortProto> FortSummary {
               get { return fortSummary_; }
             }

             /// <summary>Field number for the "DecimatedSpawnPoint" field.</summary>
             public const int DecimatedSpawnPointFieldNumber = 9;
-            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto> _repeated_decimatedSpawnPoint_codec
-                = pb::FieldCodec.ForMessage(74, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto.Parser);
-            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto> decimatedSpawnPoint_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto>();
-            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.ClientSpawnPointProto> DecimatedSpawnPoint {
+            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto> _repeated_decimatedSpawnPoint_codec
+                = pb::FieldCodec.ForMessage(74, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto.Parser);
+            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto> decimatedSpawnPoint_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto>();
+            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.ClientSpawnPointProto> DecimatedSpawnPoint {
               get { return decimatedSpawnPoint_; }
             }

             /// <summary>Field number for the "MapPokemon" field.</summary>
             public const int MapPokemonFieldNumber = 10;
-            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto> _repeated_mapPokemon_codec
-                = pb::FieldCodec.ForMessage(82, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto.Parser);
-            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto> mapPokemon_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto>();
-            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto> MapPokemon {
+            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto> _repeated_mapPokemon_codec
+                = pb::FieldCodec.ForMessage(82, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto.Parser);
+            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto> mapPokemon_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto>();
+            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto> MapPokemon {
               get { return mapPokemon_; }
             }

             /// <summary>Field number for the "NearbyPokemon" field.</summary>
             public const int NearbyPokemonFieldNumber = 11;
-            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto> _repeated_nearbyPokemon_codec
-                = pb::FieldCodec.ForMessage(90, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto.Parser);
-            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto> nearbyPokemon_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto>();
-            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto> NearbyPokemon {
+            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto> _repeated_nearbyPokemon_codec
+                = pb::FieldCodec.ForMessage(90, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto.Parser);
+            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto> nearbyPokemon_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto>();
+            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto> NearbyPokemon {
               get { return nearbyPokemon_; }
             }

@@ -1205,7 +1206,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<WildPokemon> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Descriptor.NestedTypes[1]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Descriptor.NestedTypes[1]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -1250,16 +1251,16 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

             /// <summary>Field number for the "pokemon" field.</summary>
             public const int PokemonFieldNumber = 11;
-            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto> _repeated_pokemon_codec
-                = pb::FieldCodec.ForMessage(90, global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto.Parser);
-            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto> pokemon_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto>();
+            private static readonly pb::FieldCodec<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto> _repeated_pokemon_codec
+                = pb::FieldCodec.ForMessage(90, global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto.Parser);
+            private readonly pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto> pokemon_ = new pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto>();
             /// <summary>
             ///  int64 three = 3;
             ///  float four = 4;
             ///  int32 five = 5;
             ///  unknown six = 6;
             /// </summary>
-            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.NearbyPokemonProto> Pokemon {
+            public pbc::RepeatedField<global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.NearbyPokemonProto> Pokemon {
               get { return pokemon_; }
             }

@@ -1360,7 +1361,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<MapPokemonProto> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Descriptor.NestedTypes[2]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Descriptor.NestedTypes[2]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -1598,7 +1599,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<PokemonFortProto> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Descriptor.NestedTypes[3]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Descriptor.NestedTypes[3]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -1748,11 +1749,11 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

             /// <summary>Field number for the "ActivePokemon" field.</summary>
             public const int ActivePokemonFieldNumber = 13;
-            private global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto activePokemon_;
+            private global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto activePokemon_;
             /// <summary>
             /// unknown ActiveFortModifier = 12;
             /// </summary>
-            public global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto ActivePokemon {
+            public global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto ActivePokemon {
               get { return activePokemon_; }
               set {
                 activePokemon_ = value;
@@ -2000,7 +2001,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
               }
               if (other.activePokemon_ != null) {
                 if (activePokemon_ == null) {
-                  activePokemon_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto();
+                  activePokemon_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto();
                 }
                 ActivePokemon.MergeFrom(other.ActivePokemon);
               }
@@ -2068,7 +2069,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
                   }
                   case 106: {
                     if (activePokemon_ == null) {
-                      activePokemon_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.MapPokemonProto();
+                      activePokemon_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.MapPokemonProto();
                     }
                     input.ReadMessage(activePokemon_);
                     break;
@@ -2097,7 +2098,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<PokemonSummaryFortProto> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Descriptor.NestedTypes[4]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Descriptor.NestedTypes[4]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -2281,7 +2282,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<ClientSpawnPointProto> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Descriptor.NestedTypes[5]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Descriptor.NestedTypes[5]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -2411,7 +2412,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<WildPokemonProto> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Descriptor.NestedTypes[6]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Descriptor.NestedTypes[6]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -2490,8 +2491,8 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

             /// <summary>Field number for the "pokemon" field.</summary>
             public const int PokemonFieldNumber = 7;
-            private global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon pokemon_;
-            public global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon Pokemon {
+            private global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon pokemon_;
+            public global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon Pokemon {
               get { return pokemon_; }
               set {
                 pokemon_ = value;
@@ -2623,7 +2624,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
               }
               if (other.pokemon_ != null) {
                 if (pokemon_ == null) {
-                  pokemon_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon();
+                  pokemon_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon();
                 }
                 Pokemon.MergeFrom(other.Pokemon);
               }
@@ -2661,7 +2662,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
                   }
                   case 58: {
                     if (pokemon_ == null) {
-                      pokemon_ = new global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon();
+                      pokemon_ = new global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Types.Pokemon();
                     }
                     input.ReadMessage(pokemon_);
                     break;
@@ -2684,7 +2685,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
                 public static pb::MessageParser<Pokemon> Parser { get { return _parser; } }

                 public static pbr::MessageDescriptor Descriptor {
-                  get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Types.WildPokemonProto.Descriptor.NestedTypes[0]; }
+                  get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Types.WildPokemonProto.Descriptor.NestedTypes[0]; }
                 }

                 pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -2819,7 +2820,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             public static pb::MessageParser<NearbyPokemonProto> Parser { get { return _parser; } }

             public static pbr::MessageDescriptor Descriptor {
-              get { return global::PokemonGo.RocketAPI.GeneratedCode.EncounterResponse.Types.Payload.Descriptor.NestedTypes[7]; }
+              get { return global::PokemonGo.RocketAPI.GeneratedCode.MapObjectsResponse.Types.Payload.Descriptor.NestedTypes[7]; }
             }

             pbr::MessageDescriptor pb::IMessage.Descriptor {
diff --git a/PokemonGo/RocketAPI/GeneratedCode/PlayerUpdateResponse.cs b/PokemonGo/RocketAPI/GeneratedCode/PlayerUpdateResponse.cs
new file mode 100644
index 0000000..17a5d2c
--- /dev/null
+++ b/PokemonGo/RocketAPI/GeneratedCode/PlayerUpdateResponse.cs
@@ -0,0 +1,201 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: PlayerUpdateResponse.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace PokemonGo.RocketAPI.GeneratedCode {
+
+  /// <summary>Holder for reflection information generated from PlayerUpdateResponse.proto</summary>
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public static partial class PlayerUpdateResponseReflection {
+
+    #region Descriptor
+    /// <summary>File descriptor for PlayerUpdateResponse.proto</summary>
+    public static pbr::FileDescriptor Descriptor {
+      get { return descriptor; }
+    }
+    private static pbr::FileDescriptor descriptor;
+
+    static PlayerUpdateResponseReflection() {
+      byte[] descriptorData = global::System.Convert.FromBase64String(
+          string.Concat(
+            "ChpQbGF5ZXJVcGRhdGVSZXNwb25zZS5wcm90bxIhUG9rZW1vbkdvLlJvY2tl",
+            "dEFQSS5HZW5lcmF0ZWRDb2RlIk4KFFBsYXllclVwZGF0ZVJlc3BvbnNlEhMK",
+            "C1dpbGRQb2tlbW9uGAEgASgFEgwKBEZvcnQYAiABKAUSEwoLRm9ydHNOZWFy",
+            "YnkYAyABKAViBnByb3RvMw=="));
+      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
+          new pbr::FileDescriptor[] { },
+          new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.PlayerUpdateResponse), global::PokemonGo.RocketAPI.GeneratedCode.PlayerUpdateResponse.Parser, new[]{ "WildPokemon", "Fort", "FortsNearby" }, null, null, null)
+          }));
+    }
+    #endregion
+
+  }
+  #region Messages
+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+  public sealed partial class PlayerUpdateResponse : pb::IMessage<PlayerUpdateResponse> {
+    private static readonly pb::MessageParser<PlayerUpdateResponse> _parser = new pb::MessageParser<PlayerUpdateResponse>(() => new PlayerUpdateResponse());
+    public static pb::MessageParser<PlayerUpdateResponse> Parser { get { return _parser; } }
+
+    public static pbr::MessageDescriptor Descriptor {
+      get { return global::PokemonGo.RocketAPI.GeneratedCode.PlayerUpdateResponseReflection.Descriptor.MessageTypes[0]; }
+    }
+
+    pbr::MessageDescriptor pb::IMessage.Descriptor {
+      get { return Descriptor; }
+    }
+
+    public PlayerUpdateResponse() {
+      OnConstruction();
+    }
+
+    partial void OnConstruction();
+
+    public PlayerUpdateResponse(PlayerUpdateResponse other) : this() {
+      wildPokemon_ = other.wildPokemon_;
+      fort_ = other.fort_;
+      fortsNearby_ = other.fortsNearby_;
+    }
+
+    public PlayerUpdateResponse Clone() {
+      return new PlayerUpdateResponse(this);
+    }
+
+    /// <summary>Field number for the "WildPokemon" field.</summary>
+    public const int WildPokemonFieldNumber = 1;
+    private int wildPokemon_;
+    public int WildPokemon {
+      get { return wildPokemon_; }
+      set {
+        wildPokemon_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "Fort" field.</summary>
+    public const int FortFieldNumber = 2;
+    private int fort_;
+    public int Fort {
+      get { return fort_; }
+      set {
+        fort_ = value;
+      }
+    }
+
+    /// <summary>Field number for the "FortsNearby" field.</summary>
+    public const int FortsNearbyFieldNumber = 3;
+    private int fortsNearby_;
+    public int FortsNearby {
+      get { return fortsNearby_; }
+      set {
+        fortsNearby_ = value;
+      }
+    }
+
+    public override bool Equals(object other) {
+      return Equals(other as PlayerUpdateResponse);
+    }
+
+    public bool Equals(PlayerUpdateResponse other) {
+      if (ReferenceEquals(other, null)) {
+        return false;
+      }
+      if (ReferenceEquals(other, this)) {
+        return true;
+      }
+      if (WildPokemon != other.WildPokemon) return false;
+      if (Fort != other.Fort) return false;
+      if (FortsNearby != other.FortsNearby) return false;
+      return true;
+    }
+
+    public override int GetHashCode() {
+      int hash = 1;
+      if (WildPokemon != 0) hash ^= WildPokemon.GetHashCode();
+      if (Fort != 0) hash ^= Fort.GetHashCode();
+      if (FortsNearby != 0) hash ^= FortsNearby.GetHashCode();
+      return hash;
+    }
+
+    public override string ToString() {
+      return pb::JsonFormatter.ToDiagnosticString(this);
+    }
+
+    public void WriteTo(pb::CodedOutputStream output) {
+      if (WildPokemon != 0) {
+        output.WriteRawTag(8);
+        output.WriteInt32(WildPokemon);
+      }
+      if (Fort != 0) {
+        output.WriteRawTag(16);
+        output.WriteInt32(Fort);
+      }
+      if (FortsNearby != 0) {
+        output.WriteRawTag(24);
+        output.WriteInt32(FortsNearby);
+      }
+    }
+
+    public int CalculateSize() {
+      int size = 0;
+      if (WildPokemon != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(WildPokemon);
+      }
+      if (Fort != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(Fort);
+      }
+      if (FortsNearby != 0) {
+        size += 1 + pb::CodedOutputStream.ComputeInt32Size(FortsNearby);
+      }
+      return size;
+    }
+
+    public void MergeFrom(PlayerUpdateResponse other) {
+      if (other == null) {
+        return;
+      }
+      if (other.WildPokemon != 0) {
+        WildPokemon = other.WildPokemon;
+      }
+      if (other.Fort != 0) {
+        Fort = other.Fort;
+      }
+      if (other.FortsNearby != 0) {
+        FortsNearby = other.FortsNearby;
+      }
+    }
+
+    public void MergeFrom(pb::CodedInputStream input) {
+      uint tag;
+      while ((tag = input.ReadTag()) != 0) {
+        switch(tag) {
+          default:
+            input.SkipLastField();
+            break;
+          case 8: {
+            WildPokemon = input.ReadInt32();
+            break;
+          }
+          case 16: {
+            Fort = input.ReadInt32();
+            break;
+          }
+          case 24: {
+            FortsNearby = input.ReadInt32();
+            break;
+          }
+        }
+      }
+    }
+
+  }
+
+  #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/PokemonGo/RocketAPI/GeneratedCode/Request.cs b/PokemonGo/RocketAPI/GeneratedCode/Request.cs
index 790cd0d..fc703b9 100644
--- a/PokemonGo/RocketAPI/GeneratedCode/Request.cs
+++ b/PokemonGo/RocketAPI/GeneratedCode/Request.cs
@@ -24,7 +24,7 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
       byte[] descriptorData = global::System.Convert.FromBase64String(
           string.Concat(
             "Cg1SZXF1ZXN0LnByb3RvEiFQb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRl",
-            "ZENvZGUixAYKB1JlcXVlc3QSEAoIdW5rbm93bjEYASABKAUSDgoGcnBjX2lk",
+            "ZENvZGUi0gkKB1JlcXVlc3QSEAoIdW5rbm93bjEYASABKAUSDgoGcnBjX2lk",
             "GAMgASgDEkUKCHJlcXVlc3RzGAQgAygLMjMuUG9rZW1vbkdvLlJvY2tldEFQ",
             "SS5HZW5lcmF0ZWRDb2RlLlJlcXVlc3QuUmVxdWVzdHMSRQoIdW5rbm93bjYY",
             "BiABKAsyMy5Qb2tlbW9uR28uUm9ja2V0QVBJLkdlbmVyYXRlZENvZGUuUmVx",
@@ -42,7 +42,16 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             "b3duMhIQCgh1bmtub3duMRgBIAEoDBqQAQoIQXV0aEluZm8SEAoIcHJvdmlk",
             "ZXIYASABKAkSRgoFdG9rZW4YAiABKAsyNy5Qb2tlbW9uR28uUm9ja2V0QVBJ",
             "LkdlbmVyYXRlZENvZGUuUmVxdWVzdC5BdXRoSW5mby5KV1QaKgoDSldUEhAK",
-            "CGNvbnRlbnRzGAEgASgJEhEKCXVua25vd24xMxgCIAEoBWIGcHJvdG8z"));
+            "CGNvbnRlbnRzGAEgASgJEhEKCXVua25vd24xMxgCIAEoBRotChFQbGF5ZXJV",
+            "cGRhdGVQcm90bxILCgNMYXQYASABKAYSCwoDTG5nGAIgASgGGlwKEU1hcE9i",
+            "amVjdHNSZXF1ZXN0Eg8KB2NlbGxJZHMYASABKAwSEQoJdW5rbm93bjE0GAIg",
+            "ASgMEhAKCGxhdGl0dWRlGAMgASgGEhEKCWxvbmdpdHVkZRgEIAEoBhqDAQoR",
+            "Rm9ydFNlYXJjaFJlcXVlc3QSCgoCSWQYASABKAwSGAoQUGxheWVyTGF0RGVn",
+            "cmVlcxgCIAEoBhIYChBQbGF5ZXJMbmdEZWdyZWVzGAMgASgGEhYKDkZvcnRM",
+            "YXREZWdyZWVzGAQgASgGEhYKDkZvcnRMbmdEZWdyZWVzGAUgASgGGkUKEkZv",
+            "cnREZXRhaWxzUmVxdWVzdBIKCgJJZBgBIAEoDBIQCghMYXRpdHVkZRgCIAEo",
+            "BhIRCglMb25naXR1ZGUYAyABKAYaHAoMU2V0dGluZ3NHdWlkEgwKBGd1aWQY",
+            "ASABKAwaFAoEVGltZRIMCgR0aW1lGAEgASgDYgZwcm90bzM="));
       descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
           new pbr::FileDescriptor[] { },
           new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
@@ -50,7 +59,13 @@ namespace PokemonGo.RocketAPI.GeneratedCode {
             new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Requests), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Requests.Parser, new[]{ "Type", "Message" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Unknown3), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Unknown3.Parser, new[]{ "Unknown4" }, null, null, null),
             new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Unknown6), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Unknown6.Parser, new[]{ "Unknown1", "Unknown2" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Unknown6.Types.Unknown2), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Unknown6.Types.Unknown2.Parser, new[]{ "Unknown1" }, null, null, null)}),
-            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.AuthInfo), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.AuthInfo.Parser, new[]{ "Provider", "Token" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.AuthInfo.Types.JWT), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.AuthInfo.Types.JWT.Parser, new[]{ "Contents", "Unknown13" }, null, null, null)})})
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.AuthInfo), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.AuthInfo.Parser, new[]{ "Provider", "Token" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.AuthInfo.Types.JWT), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.AuthInfo.Types.JWT.Parser, new[]{ "Contents", "Unknown13" }, null, null, null)}),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.PlayerUpdateProto), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.PlayerUpdateProto.Parser, new[]{ "Lat", "Lng" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.MapObjectsRequest), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.MapObjectsRequest.Parser, new[]{ "CellIds", "Unknown14", "Latitude", "Longitude" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.FortSearchRequest), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.FortSearchRequest.Parser, new[]{ "Id", "PlayerLatDegrees", "PlayerLngDegrees", "FortLatDegrees", "FortLngDegrees" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.FortDetailsRequest), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.FortDetailsRequest.Parser, new[]{ "Id", "Latitude", "Longitude" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.SettingsGuid), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.SettingsGuid.Parser, new[]{ "Guid" }, null, null, null),
+            new pbr::GeneratedClrTypeInfo(typeof(global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Time), global::PokemonGo.RocketAPI.GeneratedCode.Request.Types.Time.Parser, new[]{ "Time_" }, null, null, null)})
           }));
     }
     #endregion
@@ -1324,6 +1339,894 @@ namespace PokemonGo.RocketAPI.GeneratedCode {

       }

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class PlayerUpdateProto : pb::IMessage<PlayerUpdateProto> {
+        private static readonly pb::MessageParser<PlayerUpdateProto> _parser = new pb::MessageParser<PlayerUpdateProto>(() => new PlayerUpdateProto());
+        public static pb::MessageParser<PlayerUpdateProto> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.Request.Descriptor.NestedTypes[5]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public PlayerUpdateProto() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public PlayerUpdateProto(PlayerUpdateProto other) : this() {
+          lat_ = other.lat_;
+          lng_ = other.lng_;
+        }
+
+        public PlayerUpdateProto Clone() {
+          return new PlayerUpdateProto(this);
+        }
+
+        /// <summary>Field number for the "Lat" field.</summary>
+        public const int LatFieldNumber = 1;
+        private ulong lat_;
+        public ulong Lat {
+          get { return lat_; }
+          set {
+            lat_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Lng" field.</summary>
+        public const int LngFieldNumber = 2;
+        private ulong lng_;
+        public ulong Lng {
+          get { return lng_; }
+          set {
+            lng_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as PlayerUpdateProto);
+        }
+
+        public bool Equals(PlayerUpdateProto other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Lat != other.Lat) return false;
+          if (Lng != other.Lng) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Lat != 0UL) hash ^= Lat.GetHashCode();
+          if (Lng != 0UL) hash ^= Lng.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Lat != 0UL) {
+            output.WriteRawTag(9);
+            output.WriteFixed64(Lat);
+          }
+          if (Lng != 0UL) {
+            output.WriteRawTag(17);
+            output.WriteFixed64(Lng);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Lat != 0UL) {
+            size += 1 + 8;
+          }
+          if (Lng != 0UL) {
+            size += 1 + 8;
+          }
+          return size;
+        }
+
+        public void MergeFrom(PlayerUpdateProto other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Lat != 0UL) {
+            Lat = other.Lat;
+          }
+          if (other.Lng != 0UL) {
+            Lng = other.Lng;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 9: {
+                Lat = input.ReadFixed64();
+                break;
+              }
+              case 17: {
+                Lng = input.ReadFixed64();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class MapObjectsRequest : pb::IMessage<MapObjectsRequest> {
+        private static readonly pb::MessageParser<MapObjectsRequest> _parser = new pb::MessageParser<MapObjectsRequest>(() => new MapObjectsRequest());
+        public static pb::MessageParser<MapObjectsRequest> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.Request.Descriptor.NestedTypes[6]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public MapObjectsRequest() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public MapObjectsRequest(MapObjectsRequest other) : this() {
+          cellIds_ = other.cellIds_;
+          unknown14_ = other.unknown14_;
+          latitude_ = other.latitude_;
+          longitude_ = other.longitude_;
+        }
+
+        public MapObjectsRequest Clone() {
+          return new MapObjectsRequest(this);
+        }
+
+        /// <summary>Field number for the "cellIds" field.</summary>
+        public const int CellIdsFieldNumber = 1;
+        private pb::ByteString cellIds_ = pb::ByteString.Empty;
+        public pb::ByteString CellIds {
+          get { return cellIds_; }
+          set {
+            cellIds_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "unknown14" field.</summary>
+        public const int Unknown14FieldNumber = 2;
+        private pb::ByteString unknown14_ = pb::ByteString.Empty;
+        public pb::ByteString Unknown14 {
+          get { return unknown14_; }
+          set {
+            unknown14_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "latitude" field.</summary>
+        public const int LatitudeFieldNumber = 3;
+        private ulong latitude_;
+        public ulong Latitude {
+          get { return latitude_; }
+          set {
+            latitude_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "longitude" field.</summary>
+        public const int LongitudeFieldNumber = 4;
+        private ulong longitude_;
+        public ulong Longitude {
+          get { return longitude_; }
+          set {
+            longitude_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as MapObjectsRequest);
+        }
+
+        public bool Equals(MapObjectsRequest other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (CellIds != other.CellIds) return false;
+          if (Unknown14 != other.Unknown14) return false;
+          if (Latitude != other.Latitude) return false;
+          if (Longitude != other.Longitude) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (CellIds.Length != 0) hash ^= CellIds.GetHashCode();
+          if (Unknown14.Length != 0) hash ^= Unknown14.GetHashCode();
+          if (Latitude != 0UL) hash ^= Latitude.GetHashCode();
+          if (Longitude != 0UL) hash ^= Longitude.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (CellIds.Length != 0) {
+            output.WriteRawTag(10);
+            output.WriteBytes(CellIds);
+          }
+          if (Unknown14.Length != 0) {
+            output.WriteRawTag(18);
+            output.WriteBytes(Unknown14);
+          }
+          if (Latitude != 0UL) {
+            output.WriteRawTag(25);
+            output.WriteFixed64(Latitude);
+          }
+          if (Longitude != 0UL) {
+            output.WriteRawTag(33);
+            output.WriteFixed64(Longitude);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (CellIds.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(CellIds);
+          }
+          if (Unknown14.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Unknown14);
+          }
+          if (Latitude != 0UL) {
+            size += 1 + 8;
+          }
+          if (Longitude != 0UL) {
+            size += 1 + 8;
+          }
+          return size;
+        }
+
+        public void MergeFrom(MapObjectsRequest other) {
+          if (other == null) {
+            return;
+          }
+          if (other.CellIds.Length != 0) {
+            CellIds = other.CellIds;
+          }
+          if (other.Unknown14.Length != 0) {
+            Unknown14 = other.Unknown14;
+          }
+          if (other.Latitude != 0UL) {
+            Latitude = other.Latitude;
+          }
+          if (other.Longitude != 0UL) {
+            Longitude = other.Longitude;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 10: {
+                CellIds = input.ReadBytes();
+                break;
+              }
+              case 18: {
+                Unknown14 = input.ReadBytes();
+                break;
+              }
+              case 25: {
+                Latitude = input.ReadFixed64();
+                break;
+              }
+              case 33: {
+                Longitude = input.ReadFixed64();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class FortSearchRequest : pb::IMessage<FortSearchRequest> {
+        private static readonly pb::MessageParser<FortSearchRequest> _parser = new pb::MessageParser<FortSearchRequest>(() => new FortSearchRequest());
+        public static pb::MessageParser<FortSearchRequest> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.Request.Descriptor.NestedTypes[7]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public FortSearchRequest() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public FortSearchRequest(FortSearchRequest other) : this() {
+          id_ = other.id_;
+          playerLatDegrees_ = other.playerLatDegrees_;
+          playerLngDegrees_ = other.playerLngDegrees_;
+          fortLatDegrees_ = other.fortLatDegrees_;
+          fortLngDegrees_ = other.fortLngDegrees_;
+        }
+
+        public FortSearchRequest Clone() {
+          return new FortSearchRequest(this);
+        }
+
+        /// <summary>Field number for the "Id" field.</summary>
+        public const int IdFieldNumber = 1;
+        private pb::ByteString id_ = pb::ByteString.Empty;
+        public pb::ByteString Id {
+          get { return id_; }
+          set {
+            id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "PlayerLatDegrees" field.</summary>
+        public const int PlayerLatDegreesFieldNumber = 2;
+        private ulong playerLatDegrees_;
+        public ulong PlayerLatDegrees {
+          get { return playerLatDegrees_; }
+          set {
+            playerLatDegrees_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "PlayerLngDegrees" field.</summary>
+        public const int PlayerLngDegreesFieldNumber = 3;
+        private ulong playerLngDegrees_;
+        public ulong PlayerLngDegrees {
+          get { return playerLngDegrees_; }
+          set {
+            playerLngDegrees_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "FortLatDegrees" field.</summary>
+        public const int FortLatDegreesFieldNumber = 4;
+        private ulong fortLatDegrees_;
+        public ulong FortLatDegrees {
+          get { return fortLatDegrees_; }
+          set {
+            fortLatDegrees_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "FortLngDegrees" field.</summary>
+        public const int FortLngDegreesFieldNumber = 5;
+        private ulong fortLngDegrees_;
+        public ulong FortLngDegrees {
+          get { return fortLngDegrees_; }
+          set {
+            fortLngDegrees_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as FortSearchRequest);
+        }
+
+        public bool Equals(FortSearchRequest other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Id != other.Id) return false;
+          if (PlayerLatDegrees != other.PlayerLatDegrees) return false;
+          if (PlayerLngDegrees != other.PlayerLngDegrees) return false;
+          if (FortLatDegrees != other.FortLatDegrees) return false;
+          if (FortLngDegrees != other.FortLngDegrees) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Id.Length != 0) hash ^= Id.GetHashCode();
+          if (PlayerLatDegrees != 0UL) hash ^= PlayerLatDegrees.GetHashCode();
+          if (PlayerLngDegrees != 0UL) hash ^= PlayerLngDegrees.GetHashCode();
+          if (FortLatDegrees != 0UL) hash ^= FortLatDegrees.GetHashCode();
+          if (FortLngDegrees != 0UL) hash ^= FortLngDegrees.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Id.Length != 0) {
+            output.WriteRawTag(10);
+            output.WriteBytes(Id);
+          }
+          if (PlayerLatDegrees != 0UL) {
+            output.WriteRawTag(17);
+            output.WriteFixed64(PlayerLatDegrees);
+          }
+          if (PlayerLngDegrees != 0UL) {
+            output.WriteRawTag(25);
+            output.WriteFixed64(PlayerLngDegrees);
+          }
+          if (FortLatDegrees != 0UL) {
+            output.WriteRawTag(33);
+            output.WriteFixed64(FortLatDegrees);
+          }
+          if (FortLngDegrees != 0UL) {
+            output.WriteRawTag(41);
+            output.WriteFixed64(FortLngDegrees);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Id.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Id);
+          }
+          if (PlayerLatDegrees != 0UL) {
+            size += 1 + 8;
+          }
+          if (PlayerLngDegrees != 0UL) {
+            size += 1 + 8;
+          }
+          if (FortLatDegrees != 0UL) {
+            size += 1 + 8;
+          }
+          if (FortLngDegrees != 0UL) {
+            size += 1 + 8;
+          }
+          return size;
+        }
+
+        public void MergeFrom(FortSearchRequest other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Id.Length != 0) {
+            Id = other.Id;
+          }
+          if (other.PlayerLatDegrees != 0UL) {
+            PlayerLatDegrees = other.PlayerLatDegrees;
+          }
+          if (other.PlayerLngDegrees != 0UL) {
+            PlayerLngDegrees = other.PlayerLngDegrees;
+          }
+          if (other.FortLatDegrees != 0UL) {
+            FortLatDegrees = other.FortLatDegrees;
+          }
+          if (other.FortLngDegrees != 0UL) {
+            FortLngDegrees = other.FortLngDegrees;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 10: {
+                Id = input.ReadBytes();
+                break;
+              }
+              case 17: {
+                PlayerLatDegrees = input.ReadFixed64();
+                break;
+              }
+              case 25: {
+                PlayerLngDegrees = input.ReadFixed64();
+                break;
+              }
+              case 33: {
+                FortLatDegrees = input.ReadFixed64();
+                break;
+              }
+              case 41: {
+                FortLngDegrees = input.ReadFixed64();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class FortDetailsRequest : pb::IMessage<FortDetailsRequest> {
+        private static readonly pb::MessageParser<FortDetailsRequest> _parser = new pb::MessageParser<FortDetailsRequest>(() => new FortDetailsRequest());
+        public static pb::MessageParser<FortDetailsRequest> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.Request.Descriptor.NestedTypes[8]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public FortDetailsRequest() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public FortDetailsRequest(FortDetailsRequest other) : this() {
+          id_ = other.id_;
+          latitude_ = other.latitude_;
+          longitude_ = other.longitude_;
+        }
+
+        public FortDetailsRequest Clone() {
+          return new FortDetailsRequest(this);
+        }
+
+        /// <summary>Field number for the "Id" field.</summary>
+        public const int IdFieldNumber = 1;
+        private pb::ByteString id_ = pb::ByteString.Empty;
+        public pb::ByteString Id {
+          get { return id_; }
+          set {
+            id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        /// <summary>Field number for the "Latitude" field.</summary>
+        public const int LatitudeFieldNumber = 2;
+        private ulong latitude_;
+        public ulong Latitude {
+          get { return latitude_; }
+          set {
+            latitude_ = value;
+          }
+        }
+
+        /// <summary>Field number for the "Longitude" field.</summary>
+        public const int LongitudeFieldNumber = 3;
+        private ulong longitude_;
+        public ulong Longitude {
+          get { return longitude_; }
+          set {
+            longitude_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as FortDetailsRequest);
+        }
+
+        public bool Equals(FortDetailsRequest other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Id != other.Id) return false;
+          if (Latitude != other.Latitude) return false;
+          if (Longitude != other.Longitude) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Id.Length != 0) hash ^= Id.GetHashCode();
+          if (Latitude != 0UL) hash ^= Latitude.GetHashCode();
+          if (Longitude != 0UL) hash ^= Longitude.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Id.Length != 0) {
+            output.WriteRawTag(10);
+            output.WriteBytes(Id);
+          }
+          if (Latitude != 0UL) {
+            output.WriteRawTag(17);
+            output.WriteFixed64(Latitude);
+          }
+          if (Longitude != 0UL) {
+            output.WriteRawTag(25);
+            output.WriteFixed64(Longitude);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Id.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Id);
+          }
+          if (Latitude != 0UL) {
+            size += 1 + 8;
+          }
+          if (Longitude != 0UL) {
+            size += 1 + 8;
+          }
+          return size;
+        }
+
+        public void MergeFrom(FortDetailsRequest other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Id.Length != 0) {
+            Id = other.Id;
+          }
+          if (other.Latitude != 0UL) {
+            Latitude = other.Latitude;
+          }
+          if (other.Longitude != 0UL) {
+            Longitude = other.Longitude;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 10: {
+                Id = input.ReadBytes();
+                break;
+              }
+              case 17: {
+                Latitude = input.ReadFixed64();
+                break;
+              }
+              case 25: {
+                Longitude = input.ReadFixed64();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class SettingsGuid : pb::IMessage<SettingsGuid> {
+        private static readonly pb::MessageParser<SettingsGuid> _parser = new pb::MessageParser<SettingsGuid>(() => new SettingsGuid());
+        public static pb::MessageParser<SettingsGuid> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.Request.Descriptor.NestedTypes[9]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public SettingsGuid() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public SettingsGuid(SettingsGuid other) : this() {
+          guid_ = other.guid_;
+        }
+
+        public SettingsGuid Clone() {
+          return new SettingsGuid(this);
+        }
+
+        /// <summary>Field number for the "guid" field.</summary>
+        public const int GuidFieldNumber = 1;
+        private pb::ByteString guid_ = pb::ByteString.Empty;
+        public pb::ByteString Guid {
+          get { return guid_; }
+          set {
+            guid_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as SettingsGuid);
+        }
+
+        public bool Equals(SettingsGuid other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Guid != other.Guid) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Guid.Length != 0) hash ^= Guid.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Guid.Length != 0) {
+            output.WriteRawTag(10);
+            output.WriteBytes(Guid);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Guid.Length != 0) {
+            size += 1 + pb::CodedOutputStream.ComputeBytesSize(Guid);
+          }
+          return size;
+        }
+
+        public void MergeFrom(SettingsGuid other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Guid.Length != 0) {
+            Guid = other.Guid;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 10: {
+                Guid = input.ReadBytes();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+      public sealed partial class Time : pb::IMessage<Time> {
+        private static readonly pb::MessageParser<Time> _parser = new pb::MessageParser<Time>(() => new Time());
+        public static pb::MessageParser<Time> Parser { get { return _parser; } }
+
+        public static pbr::MessageDescriptor Descriptor {
+          get { return global::PokemonGo.RocketAPI.GeneratedCode.Request.Descriptor.NestedTypes[10]; }
+        }
+
+        pbr::MessageDescriptor pb::IMessage.Descriptor {
+          get { return Descriptor; }
+        }
+
+        public Time() {
+          OnConstruction();
+        }
+
+        partial void OnConstruction();
+
+        public Time(Time other) : this() {
+          time_ = other.time_;
+        }
+
+        public Time Clone() {
+          return new Time(this);
+        }
+
+        /// <summary>Field number for the "time" field.</summary>
+        public const int Time_FieldNumber = 1;
+        private long time_;
+        public long Time_ {
+          get { return time_; }
+          set {
+            time_ = value;
+          }
+        }
+
+        public override bool Equals(object other) {
+          return Equals(other as Time);
+        }
+
+        public bool Equals(Time other) {
+          if (ReferenceEquals(other, null)) {
+            return false;
+          }
+          if (ReferenceEquals(other, this)) {
+            return true;
+          }
+          if (Time_ != other.Time_) return false;
+          return true;
+        }
+
+        public override int GetHashCode() {
+          int hash = 1;
+          if (Time_ != 0L) hash ^= Time_.GetHashCode();
+          return hash;
+        }
+
+        public override string ToString() {
+          return pb::JsonFormatter.ToDiagnosticString(this);
+        }
+
+        public void WriteTo(pb::CodedOutputStream output) {
+          if (Time_ != 0L) {
+            output.WriteRawTag(8);
+            output.WriteInt64(Time_);
+          }
+        }
+
+        public int CalculateSize() {
+          int size = 0;
+          if (Time_ != 0L) {
+            size += 1 + pb::CodedOutputStream.ComputeInt64Size(Time_);
+          }
+          return size;
+        }
+
+        public void MergeFrom(Time other) {
+          if (other == null) {
+            return;
+          }
+          if (other.Time_ != 0L) {
+            Time_ = other.Time_;
+          }
+        }
+
+        public void MergeFrom(pb::CodedInputStream input) {
+          uint tag;
+          while ((tag = input.ReadTag()) != 0) {
+            switch(tag) {
+              default:
+                input.SkipLastField();
+                break;
+              case 8: {
+                Time_ = input.ReadInt64();
+                break;
+              }
+            }
+          }
+        }
+
+      }
+
     }
     #endregion

diff --git a/PokemonGo/RocketAPI/Helpers/Utils.cs b/PokemonGo/RocketAPI/Helpers/Utils.cs
index 7ad1ca2..94f91d2 100644
--- a/PokemonGo/RocketAPI/Helpers/Utils.cs
+++ b/PokemonGo/RocketAPI/Helpers/Utils.cs
@@ -10,7 +10,7 @@ namespace PokemonGo.RocketAPI.Helpers
     {
         public static ulong FloatAsUlong(double value)
         {
-            var bytes = BitConverter.GetBytes((double)(float)value);
+            var bytes = BitConverter.GetBytes(value);
             return BitConverter.ToUInt64(bytes, 0);
         }

diff --git a/PokemonGo/RocketAPI/PokemonGo.RocketAPI.csproj b/PokemonGo/RocketAPI/PokemonGo.RocketAPI.csproj
index 5d3f6eb..ac38e10 100644
--- a/PokemonGo/RocketAPI/PokemonGo.RocketAPI.csproj
+++ b/PokemonGo/RocketAPI/PokemonGo.RocketAPI.csproj
@@ -76,10 +76,13 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Enums\AuthType.cs" />
+    <Compile Include="Enums\MiscEnums.cs" />
     <Compile Include="Enums\RequestType.cs" />
     <Compile Include="Extensions\DateTimeExtensions.cs" />
-    <Compile Include="GeneratedCode\EncounterRequest.cs" />
-    <Compile Include="GeneratedCode\EncounterResponse.cs" />
+    <Compile Include="GeneratedCode\FortDetailResponse.cs" />
+    <Compile Include="GeneratedCode\FortSearchResponse.cs" />
+    <Compile Include="GeneratedCode\MapObjectsResponse.cs" />
+    <Compile Include="GeneratedCode\PlayerUpdateResponse.cs" />
     <Compile Include="GeneratedCode\Request.cs" />
     <Compile Include="GeneratedCode\SettingsResponse.cs" />
     <Compile Include="Helpers\JsonHelper.cs" />
@@ -99,8 +102,10 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="packages.config" />
-    <None Include="Proto\EncounterResponse.proto" />
-    <None Include="Proto\EncounterRequest.proto" />
+    <None Include="Proto\FortDetailResponse.proto" />
+    <None Include="Proto\FortSearchResponse.proto" />
+    <None Include="Proto\PlayerUpdateResponse.proto" />
+    <None Include="Proto\MapObjectsResponse.proto" />
     <None Include="Proto\SettingsResponse.proto" />
     <None Include="Proto\Request.proto" />
   </ItemGroup>
diff --git a/PokemonGo/RocketAPI/Proto/EncounterRequest.proto b/PokemonGo/RocketAPI/Proto/EncounterRequest.proto
deleted file mode 100644
index 6dd1358..0000000
--- a/PokemonGo/RocketAPI/Proto/EncounterRequest.proto
+++ /dev/null
@@ -1,72 +0,0 @@
- syntax = "proto3";
-
-package PokemonGo.RocketAPI.GeneratedCode;
-
-message EncounterRequest {
-  int32 unknown1 = 1;
-  int64 rpc_id = 3;
-  repeated Requests requests = 4;
-  Unknown6 unknown6 = 6;
-  fixed64 latitude = 7;
-  fixed64 longitude = 8;
-  fixed64 altitude = 9;
-  //AuthInfo auth = 10;
-  Auth auth = 11;
-
-  int64 unknown12 = 12;
-
-  message Requests {
-    int32 type = 1;
-    bytes message = 2;
-  }
-
-  message RequestsMessage
-  {
-	bytes cellIds = 1;
-	bytes unknown14 = 2;
-	fixed64 latitude = 3;
-	fixed64 longitude = 4;
-  }
-
-	message SettingsGuid
-	{
-		bytes guid = 1;
-	}
-
-	message Time
-	{
-		int64 time = 1;
-	}
-
-  message Unknown3 {
-    string unknown4 = 1;
-  }
-
-  message Unknown6 {
-    int32 unknown1 = 1;
-    Unknown2 unknown2 = 2;
-
-    message Unknown2 {
-      bytes unknown1 = 1;
-    }
-
-  }
-
-
-  message Auth {
-    bytes unknown71 = 1;
-    int64 timestamp = 2;
-    bytes unknown73 = 3;
-  }
-
- /* message AuthInfo {
-    string provider = 1;
-    JWT token = 2;
-
-    message JWT {
-      string contents = 1;
-      int32 unknown13  = 2;
-    }
-  }
-  */
-}
\ No newline at end of file
diff --git a/PokemonGo/RocketAPI/Proto/FortDetailResponse.proto b/PokemonGo/RocketAPI/Proto/FortDetailResponse.proto
new file mode 100644
index 0000000..79dfced
--- /dev/null
+++ b/PokemonGo/RocketAPI/Proto/FortDetailResponse.proto
@@ -0,0 +1,46 @@
+syntax = "proto3";
+
+package PokemonGo.RocketAPI.GeneratedCode;
+
+message FortDetailResponse {
+  int32 unknown1 = 1;
+  int64 unknown2 = 2;
+  string api_url = 3;
+  Unknown6 unknown6 = 6;
+  Unknown7 unknown7 = 7;
+  repeated Payload payload = 100;
+  string errorMessage = 101; //Should be moved to an error-proto file if error is always 101 field
+
+  message Unknown6 {
+    int32 unknown1 = 1;
+    Unknown2 unknown2 = 2;
+
+    message Unknown2 {
+      bytes unknown1 = 1;
+    }
+
+  }
+
+  message Unknown7 {
+    bytes unknown71 = 1;
+    int64 unknown72 = 2;
+    bytes unknown73 = 3;
+  }
+
+  message Payload {
+	string Id = 1;
+	int32 Team = 2;
+	int32 Pokemon = 3;
+	string Name = 4;
+	string ImageUrl = 5;
+	int32 Fp = 6;
+	int32 Stamina = 7;
+	int32 MaxStamina = 8;
+	int32 FortType = 9;
+	int64 Latitude = 10;
+	int64 Longitude = 11;
+	string Description = 12;
+	int32 Modifier = 13;
+}
+
+  }
\ No newline at end of file
diff --git a/PokemonGo/RocketAPI/Proto/FortSearchResponse.proto b/PokemonGo/RocketAPI/Proto/FortSearchResponse.proto
new file mode 100644
index 0000000..c0e55e1
--- /dev/null
+++ b/PokemonGo/RocketAPI/Proto/FortSearchResponse.proto
@@ -0,0 +1,46 @@
+syntax = "proto3";
+
+package PokemonGo.RocketAPI.GeneratedCode;
+
+message FortSearchResponse {
+  int32 unknown1 = 1;
+  int64 unknown2 = 2;
+  string api_url = 3;
+  Unknown6 unknown6 = 6;
+  Unknown7 unknown7 = 7;
+  repeated Payload payload = 100;
+  string errorMessage = 101; //Should be moved to an error-proto file if error is always 101 field
+
+  message Unknown6 {
+    int32 unknown1 = 1;
+    Unknown2 unknown2 = 2;
+
+    message Unknown2 {
+      bytes unknown1 = 1;
+    }
+
+  }
+
+  message Unknown7 {
+    bytes unknown71 = 1;
+    int64 unknown72 = 2;
+    bytes unknown73 = 3;
+  }
+
+  message Payload {
+	int32 Result = 1;
+	repeated Item Items = 2;
+	int32 GemsAwarded = 3;
+	int32 EggPokemon = 4;
+	int32 XpAwarded = 5;
+	int64 CooldownComplete = 6;
+	int32 ChainHackSequenceNumber = 7;
+}
+
+	message Item
+	{
+		int32 Item = 1;
+		int32 ItemCount = 2;
+	}
+
+  }
\ No newline at end of file
diff --git a/PokemonGo/RocketAPI/Proto/EncounterResponse.proto b/PokemonGo/RocketAPI/Proto/MapObjectsResponse.proto
similarity index 99%
rename from PokemonGo/RocketAPI/Proto/EncounterResponse.proto
rename to PokemonGo/RocketAPI/Proto/MapObjectsResponse.proto
index 28c7088..735efab 100644
--- a/PokemonGo/RocketAPI/Proto/EncounterResponse.proto
+++ b/PokemonGo/RocketAPI/Proto/MapObjectsResponse.proto
@@ -2,7 +2,7 @@

 package PokemonGo.RocketAPI.GeneratedCode;

-message EncounterResponse {
+message MapObjectsResponse {
   int32 unknown1 = 1;
   int64 unknown2 = 2;
   string api_url = 3;
diff --git a/PokemonGo/RocketAPI/Proto/PlayerUpdateResponse.proto b/PokemonGo/RocketAPI/Proto/PlayerUpdateResponse.proto
new file mode 100644
index 0000000..7da2151
--- /dev/null
+++ b/PokemonGo/RocketAPI/Proto/PlayerUpdateResponse.proto
@@ -0,0 +1,9 @@
+syntax = "proto3";
+
+package PokemonGo.RocketAPI.GeneratedCode;
+
+message PlayerUpdateResponse {
+	int32 WildPokemon = 1;
+	int32 Fort = 2;
+	int32 FortsNearby = 3;
+ }
\ No newline at end of file
diff --git a/PokemonGo/RocketAPI/Proto/Request.proto b/PokemonGo/RocketAPI/Proto/Request.proto
index 3ac2283..bc0b8a6 100644
--- a/PokemonGo/RocketAPI/Proto/Request.proto
+++ b/PokemonGo/RocketAPI/Proto/Request.proto
@@ -49,4 +49,43 @@ message Request {
       int32 unknown13  = 2;
     }
   }
+	message PlayerUpdateProto {
+	fixed64 Lat = 1;
+	fixed64 Lng = 2;
+	}
+
+	message MapObjectsRequest
+	{
+		bytes cellIds = 1;
+		bytes unknown14 = 2;
+		fixed64 latitude = 3;
+		fixed64 longitude = 4;
+	}
+
+	 message FortSearchRequest
+	{
+		bytes Id = 1;
+		fixed64 PlayerLatDegrees = 2;
+		fixed64 PlayerLngDegrees = 3;
+		fixed64 FortLatDegrees = 4;
+		fixed64 FortLngDegrees = 5;
+	}
+
+	message FortDetailsRequest
+	{
+  		bytes Id = 1;
+		fixed64 Latitude = 2;
+		fixed64 Longitude = 3;
+	}
+
+	message SettingsGuid
+	{
+		bytes guid = 1;
+	}
+
+	message Time
+	{
+		int64 time = 1;
+	}
+
 }
\ No newline at end of file
You may download the files in Public Git.