activeBuildConfigurationName = Debug;
 		activeTarget = D2AAC07D0554694100DB518D /* simplepgp */;
 		addToTargets = (
-			D2AAC07D0554694100DB518D /* simplepgp */,
 		);
 		breakpoints = (
-			69868C9D14618450004C5D9B /* packet.c:9 */,
-			69269F4E14620FC200F69705 /* packet.c:290 */,
+			69868C9D14618450004C5D9B /* packet.c:22 */,
+			69269F4E14620FC200F69705 /* packet.c:241 */,
 		);
 		codeSenseManager = 69868AD51460E35F004C5D9B /* Code sense */;
 		perUserDictionary = {
 			6926AB9D146C950600F69705 /* PBXTextBookmark */ = 6926AB9D146C950600F69705 /* PBXTextBookmark */;
 			6926ABA6146C95C600F69705 /* PBXTextBookmark */ = 6926ABA6146C95C600F69705 /* PBXTextBookmark */;
 			6926ABB1146C965700F69705 /* PBXTextBookmark */ = 6926ABB1146C965700F69705 /* PBXTextBookmark */;
+			6926ABC1146C97B300F69705 /* PBXTextBookmark */ = 6926ABC1146C97B300F69705 /* PBXTextBookmark */;
+			6926ABC2146C97B300F69705 /* PBXTextBookmark */ = 6926ABC2146C97B300F69705 /* PBXTextBookmark */;
+			6926ABC3146C97B300F69705 /* PBXTextBookmark */ = 6926ABC3146C97B300F69705 /* PBXTextBookmark */;
+			6926ABE1146DAA7300F69705 /* PBXTextBookmark */ = 6926ABE1146DAA7300F69705 /* PBXTextBookmark */;
+			6926ABE2146DAA7300F69705 /* PBXTextBookmark */ = 6926ABE2146DAA7300F69705 /* PBXTextBookmark */;
+			6926ABE3146DAA7300F69705 /* PBXTextBookmark */ = 6926ABE3146DAA7300F69705 /* PBXTextBookmark */;
+			6926ABE7146DAAA100F69705 /* PBXTextBookmark */ = 6926ABE7146DAAA100F69705 /* PBXTextBookmark */;
+			6926ABE9146DAAFE00F69705 /* PBXTextBookmark */ = 6926ABE9146DAAFE00F69705 /* PBXTextBookmark */;
+			6926ABEB146DADCD00F69705 /* PBXTextBookmark */ = 6926ABEB146DADCD00F69705 /* PBXTextBookmark */;
+			6926ABF1146DAE1B00F69705 /* PBXTextBookmark */ = 6926ABF1146DAE1B00F69705 /* PBXTextBookmark */;
+			6926ABF5146DAE3A00F69705 /* PBXTextBookmark */ = 6926ABF5146DAE3A00F69705 /* PBXTextBookmark */;
+			6926ABF9146DB0DE00F69705 /* PBXTextBookmark */ = 6926ABF9146DB0DE00F69705 /* PBXTextBookmark */;
+			6926AC0A146DB19400F69705 /* PBXTextBookmark */ = 6926AC0A146DB19400F69705 /* PBXTextBookmark */;
+			6926AC0B146DB19400F69705 /* PBXTextBookmark */ = 6926AC0B146DB19400F69705 /* PBXTextBookmark */;
+			6926AC16146DB28400F69705 /* PBXTextBookmark */ = 6926AC16146DB28400F69705 /* PBXTextBookmark */;
+			6926AC24146DB40000F69705 /* PBXTextBookmark */ = 6926AC24146DB40000F69705 /* PBXTextBookmark */;
+			6926AC2B146DB42200F69705 /* PBXTextBookmark */ = 6926AC2B146DB42200F69705 /* PBXTextBookmark */;
+			6926AC42146DB5D000F69705 /* PBXTextBookmark */ = 6926AC42146DB5D000F69705 /* PBXTextBookmark */;
+			6926AC43146DB5D000F69705 /* PBXTextBookmark */ = 6926AC43146DB5D000F69705 /* PBXTextBookmark */;
+			6926AC44146DB5D000F69705 /* PBXTextBookmark */ = 6926AC44146DB5D000F69705 /* PBXTextBookmark */;
+			6926AC67146DBC9B00F69705 /* PBXTextBookmark */ = 6926AC67146DBC9B00F69705 /* PBXTextBookmark */;
+			6926AC68146DBC9B00F69705 /* PBXTextBookmark */ = 6926AC68146DBC9B00F69705 /* PBXTextBookmark */;
+			6926AC69146DBC9B00F69705 /* PBXTextBookmark */ = 6926AC69146DBC9B00F69705 /* PBXTextBookmark */;
+			6926AC6A146DBC9B00F69705 /* PBXTextBookmark */ = 6926AC6A146DBC9B00F69705 /* PBXTextBookmark */;
+			6926AC6B146DBE2B00F69705 /* PBXTextBookmark */ = 6926AC6B146DBE2B00F69705 /* PBXTextBookmark */;
+			6926AC71146DBFB600F69705 /* PBXTextBookmark */ = 6926AC71146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC72146DBFB600F69705 /* PBXTextBookmark */ = 6926AC72146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC73146DBFB600F69705 /* PBXTextBookmark */ = 6926AC73146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC74146DBFB600F69705 /* PBXTextBookmark */ = 6926AC74146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC75146DBFB600F69705 /* PBXTextBookmark */ = 6926AC75146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC76146DBFB600F69705 /* PBXTextBookmark */ = 6926AC76146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC77146DBFB600F69705 /* PBXTextBookmark */ = 6926AC77146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC78146DBFB600F69705 /* PBXTextBookmark */ = 6926AC78146DBFB600F69705 /* PBXTextBookmark */;
+			6926AC79146DC18500F69705 /* PBXTextBookmark */ = 6926AC79146DC18500F69705 /* PBXTextBookmark */;
+			6926AC7A146DC18500F69705 /* PBXTextBookmark */ = 6926AC7A146DC18500F69705 /* PBXTextBookmark */;
+			6926AC7B146DC18500F69705 /* PBXTextBookmark */ = 6926AC7B146DC18500F69705 /* PBXTextBookmark */;
 			69868BD11460F42D004C5D9B = 69868BD11460F42D004C5D9B /* PBXTextBookmark */;
 			69868BD91460F468004C5D9B = 69868BD91460F468004C5D9B /* PBXTextBookmark */;
 			69868C931460F7C3004C5D9B = 69868C931460F7C3004C5D9B /* PBXTextBookmark */;
 	};
 	69269F2114620D0F00F69705 /* packet_test.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {1030, 780}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRange = "{0, 1356}";
+			sepNavIntBoundsRect = "{{0, 0}, {905, 897}}";
+			sepNavSelRange = "{683, 0}";
+			sepNavVisRange = "{0, 1509}";
 		};
 	};
 	69269F2214620D0F00F69705 /* packet_test.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {905, 618}}";
-			sepNavSelRange = "{0, 0}";
-			sepNavVisRange = "{0, 291}";
+			sepNavSelRange = "{683, 0}";
+			sepNavVisRange = "{0, 839}";
 		};
 	};
 	69269F2314620D0F00F69705 /* packet.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {905, 21450}}";
-			sepNavSelRange = "{7197, 0}";
-			sepNavVisRange = "{6105, 1737}";
+			sepNavIntBoundsRect = "{{0, 0}, {509, 23660}}";
+			sepNavSelRange = "{48986, 0}";
+			sepNavVisRange = "{39463, 248}";
 			sepNavWindowFrame = "{{139, 11}, {1136, 746}}";
 		};
 	};
 	69269F2414620D0F00F69705 /* packet.h */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {905, 2457}}";
-			sepNavSelRange = "{2419, 17}";
-			sepNavVisRange = "{1941, 1104}";
+			sepNavIntBoundsRect = "{{0, 0}, {905, 2691}}";
+			sepNavSelRange = "{80, 0}";
+			sepNavVisRange = "{0, 1540}";
 		};
 	};
-	69269F4E14620FC200F69705 /* packet.c:290 */ = {
+	69269F4E14620FC200F69705 /* packet.c:241 */ = {
 		isa = PBXFileBreakpoint;
 		actions = (
 		);
 		functionName = "spgp_decode_message()";
 		hitCount = 0;
 		ignoreCount = 0;
-		lineNumber = 290;
+		lineNumber = 241;
 		location = duckdog;
-		modificationTime = 342660550.99514;
+		modificationTime = 342734490.62607;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 76";
 		rLen = 0;
-		rLoc = 2176;
+		rLoc = 2933;
 		rType = 0;
 		vrLen = 902;
 		vrLoc = 1034;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 816";
 		rLen = 0;
-		rLoc = 28405;
+		rLoc = 30811;
 		rType = 0;
 		vrLen = 1446;
 		vrLoc = 24434;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 820";
 		rLen = 0;
-		rLoc = 28573;
+		rLoc = 30979;
 		rType = 0;
 		vrLen = 1479;
 		vrLoc = 24016;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 791";
 		rLen = 0;
-		rLoc = 27572;
+		rLoc = 29978;
 		rType = 0;
 		vrLen = 1529;
 		vrLoc = 27306;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 179";
 		rLen = 0;
-		rLoc = 9021;
+		rLoc = 7446;
 		rType = 0;
 		vrLen = 1966;
 		vrLoc = 4084;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 960";
 		rLen = 0;
-		rLoc = 48348;
+		rLoc = 52644;
 		rType = 0;
 		vrLen = 1655;
 		vrLoc = 28491;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 975";
 		rLen = 0;
-		rLoc = 48820;
+		rLoc = 53116;
 		rType = 0;
 		vrLen = 1799;
 		vrLoc = 28668;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 974";
 		rLen = 0;
-		rLoc = 48766;
+		rLoc = 53062;
 		rType = 0;
 		vrLen = 1802;
 		vrLoc = 28668;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 672";
 		rLen = 0;
-		rLoc = 23340;
+		rLoc = 25746;
 		rType = 0;
 		vrLen = 2232;
 		vrLoc = 19150;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 672";
 		rLen = 0;
-		rLoc = 23340;
+		rLoc = 25746;
 		rType = 0;
 		vrLen = 2232;
 		vrLoc = 19150;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 671";
 		rLen = 0;
-		rLoc = 23298;
+		rLoc = 25704;
 		rType = 0;
 		vrLen = 2244;
 		vrLoc = 19150;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 729";
 		rLen = 0;
-		rLoc = 25261;
+		rLoc = 27667;
 		rType = 0;
 		vrLen = 2063;
 		vrLoc = 21499;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 251";
 		rLen = 0;
-		rLoc = 11326;
+		rLoc = 9751;
 		rType = 0;
 		vrLen = 1791;
 		vrLoc = 6607;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 144";
 		rLen = 0;
-		rLoc = 4030;
+		rLoc = 4787;
 		rType = 0;
 		vrLen = 1408;
 		vrLoc = 1952;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 233";
 		rLen = 0;
-		rLoc = 10615;
+		rLoc = 9040;
 		rType = 0;
 		vrLen = 1575;
 		vrLoc = 6539;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 233";
 		rLen = 0;
-		rLoc = 10615;
+		rLoc = 9040;
 		rType = 0;
 		vrLen = 1575;
 		vrLoc = 6539;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 147";
 		rLen = 0;
-		rLoc = 4139;
+		rLoc = 4896;
 		rType = 0;
 		vrLen = 1402;
 		vrLoc = 1936;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 325";
 		rLen = 0;
-		rLoc = 13722;
+		rLoc = 13424;
 		rType = 0;
 		vrLen = 1425;
 		vrLoc = 8435;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 243";
 		rLen = 0;
-		rLoc = 11474;
+		rLoc = 9899;
 		rType = 0;
 		vrLen = 1663;
 		vrLoc = 6777;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 226";
 		rLen = 0;
-		rLoc = 10826;
+		rLoc = 9251;
 		rType = 0;
 		vrLen = 1673;
 		vrLoc = 6472;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 96";
 		rLen = 16;
-		rLoc = 2535;
+		rLoc = 3292;
 		rType = 0;
 		vrLen = 1315;
 		vrLoc = 1627;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 181";
 		rLen = 1;
-		rLoc = 9373;
+		rLoc = 7798;
 		rType = 0;
 		vrLen = 1900;
 		vrLoc = 4533;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 959";
 		rLen = 0;
-		rLoc = 42262;
+		rLoc = 46558;
 		rType = 0;
 		vrLen = 1765;
 		vrLoc = 29422;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 969";
 		rLen = 0;
-		rLoc = 42744;
+		rLoc = 47040;
 		rType = 0;
 		vrLen = 1684;
 		vrLoc = 29422;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 55";
 		rLen = 0;
-		rLoc = 1438;
+		rLoc = 2195;
 		rType = 0;
 		vrLen = 1225;
 		vrLoc = 539;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 977";
 		rLen = 0;
-		rLoc = 43046;
+		rLoc = 47342;
 		rType = 0;
 		vrLen = 1601;
 		vrLoc = 29516;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 977";
 		rLen = 0;
-		rLoc = 43046;
+		rLoc = 47342;
 		rType = 0;
 		vrLen = 1598;
 		vrLoc = 29516;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 959";
 		rLen = 0;
-		rLoc = 42223;
+		rLoc = 46519;
 		rType = 0;
 		vrLen = 1633;
 		vrLoc = 29516;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 974";
 		rLen = 0;
-		rLoc = 42712;
+		rLoc = 47008;
 		rType = 0;
 		vrLen = 1643;
 		vrLoc = 29261;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 984";
 		rLen = 0;
-		rLoc = 43022;
+		rLoc = 47318;
 		rType = 0;
 		vrLen = 1637;
 		vrLoc = 29261;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 993";
 		rLen = 0;
-		rLoc = 43772;
+		rLoc = 48068;
 		rType = 0;
 		vrLen = 1784;
 		vrLoc = 30278;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 55";
 		rLen = 0;
-		rLoc = 1438;
+		rLoc = 2195;
 		rType = 0;
 		vrLen = 1429;
 		vrLoc = 1284;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 993";
 		rLen = 0;
-		rLoc = 43772;
+		rLoc = 48068;
 		rType = 0;
 		vrLen = 1784;
 		vrLoc = 30278;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 993";
 		rLen = 0;
-		rLoc = 43772;
+		rLoc = 48068;
 		rType = 0;
 		vrLen = 1847;
 		vrLoc = 30172;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 55";
 		rLen = 0;
-		rLoc = 1438;
+		rLoc = 2195;
 		rType = 0;
 		vrLen = 1357;
 		vrLoc = 1744;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 990";
 		rLen = 0;
-		rLoc = 43137;
+		rLoc = 47433;
 		rType = 0;
 		vrLen = 1796;
 		vrLoc = 29921;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1025";
 		rLen = 0;
-		rLoc = 46754;
+		rLoc = 51050;
 		rType = 0;
 		vrLen = 1708;
 		vrLoc = 30610;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 55";
 		rLen = 0;
-		rLoc = 1438;
+		rLoc = 2195;
 		rType = 0;
 		vrLen = 1318;
 		vrLoc = 1099;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1025";
 		rLen = 0;
-		rLoc = 46730;
+		rLoc = 51026;
 		rType = 0;
 		vrLen = 1740;
 		vrLoc = 30610;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1002";
 		rLen = 0;
-		rLoc = 43447;
+		rLoc = 47743;
 		rType = 0;
 		vrLen = 1864;
 		vrLoc = 29944;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 154";
 		rLen = 56;
-		rLoc = 3840;
+		rLoc = 4597;
 		rType = 0;
 		vrLen = 1515;
 		vrLoc = 2213;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1001";
 		rLen = 0;
-		rLoc = 43446;
+		rLoc = 47742;
 		rType = 0;
 		vrLen = 1801;
 		vrLoc = 30007;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 249";
 		rLen = 0;
-		rLoc = 11275;
+		rLoc = 9700;
 		rType = 0;
 		vrLen = 1363;
 		vrLoc = 6644;
 	};
 	6926A660146B38F200F69705 /* keychain.c */ = {
 		uiCtxt = {
-			sepNavIntBoundsRect = "{{0, 0}, {905, 1300}}";
-			sepNavSelRange = "{1871, 0}";
-			sepNavVisRange = "{1048, 1035}";
+			sepNavIntBoundsRect = "{{0, 0}, {905, 1482}}";
+			sepNavSelRange = "{117, 563}";
+			sepNavVisRange = "{0, 1255}";
 		};
 	};
 	6926A661146B38F200F69705 /* keychain.h */ = {
 		uiCtxt = {
 			sepNavIntBoundsRect = "{{0, 0}, {905, 618}}";
-			sepNavSelRange = "{330, 0}";
-			sepNavVisRange = "{0, 659}";
+			sepNavSelRange = "{680, 0}";
+			sepNavVisRange = "{0, 1207}";
 		};
 	};
 	6926A671146B39B700F69705 /* PBXTextBookmark */ = {
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 50";
 		rLen = 0;
-		rLoc = 921;
+		rLoc = 1469;
 		rType = 0;
 		vrLen = 1332;
 		vrLoc = 30243;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 153";
 		rLen = 0;
-		rLoc = 3793;
+		rLoc = 4550;
 		rType = 0;
 		vrLen = 1139;
 		vrLoc = 2589;
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 37";
 		rLen = 0;
-		rLoc = 742;
+		rLoc = 1290;
 		rType = 0;
 		vrLen = 1008;
 		vrLoc = 0;
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 17";
 		rLen = 18;
-		rLoc = 233;
+		rLoc = 781;
 		rType = 0;
 		vrLen = 621;
 		vrLoc = 0;
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 17";
 		rLen = 18;
-		rLoc = 233;
+		rLoc = 781;
 		rType = 0;
 		vrLen = 621;
 		vrLoc = 0;
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 16";
 		rLen = 0;
-		rLoc = 224;
+		rLoc = 772;
 		rType = 0;
 		vrLen = 621;
 		vrLoc = 0;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 49";
 		rLen = 25;
-		rLoc = 1001;
+		rLoc = 1549;
 		rType = 0;
 		vrLen = 1196;
 		vrLoc = 262;
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 9";
 		rLen = 0;
-		rLoc = 140;
+		rLoc = 688;
 		rType = 0;
 		vrLen = 1020;
 		vrLoc = 35;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 20";
 		rLen = 0;
-		rLoc = 423;
+		rLoc = 971;
 		rType = 0;
 		vrLen = 1201;
 		vrLoc = 0;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 12";
 		rLen = 0;
-		rLoc = 180;
+		rLoc = 728;
 		rType = 0;
 		vrLen = 1217;
 		vrLoc = 0;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 12";
 		rLen = 0;
-		rLoc = 180;
+		rLoc = 728;
 		rType = 0;
 		vrLen = 1217;
 		vrLoc = 0;
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 16";
 		rLen = 0;
-		rLoc = 224;
+		rLoc = 772;
 		rType = 0;
 		vrLen = 621;
 		vrLoc = 0;
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 9";
 		rLen = 0;
-		rLoc = 140;
+		rLoc = 688;
 		rType = 0;
 		vrLen = 989;
 		vrLoc = 164;
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 9";
 		rLen = 0;
-		rLoc = 140;
+		rLoc = 688;
 		rType = 0;
 		vrLen = 989;
 		vrLoc = 164;
 		fRef = 6926A661146B38F200F69705 /* keychain.h */;
 		name = "keychain.h: 19";
 		rLen = 0;
-		rLoc = 330;
+		rLoc = 878;
 		rType = 0;
 		vrLen = 659;
 		vrLoc = 0;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 108";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1088;
 		vrLoc = 2043;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 90";
 		rLen = 0;
-		rLoc = 3412;
+		rLoc = 4429;
 		rType = 0;
 		vrLen = 1411;
 		vrLoc = 30330;
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 41";
 		rLen = 36;
-		rLoc = 779;
+		rLoc = 1327;
 		rType = 0;
 		vrLen = 1036;
 		vrLoc = 1048;
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 88";
 		rLen = 0;
-		rLoc = 1871;
+		rLoc = 2419;
 		rType = 0;
 		vrLen = 1069;
 		vrLoc = 1014;
 		fRef = 6926A660146B38F200F69705 /* keychain.c */;
 		name = "keychain.c: 88";
 		rLen = 0;
-		rLoc = 1871;
+		rLoc = 2419;
 		rType = 0;
 		vrLen = 1035;
 		vrLoc = 1048;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 90";
 		rLen = 0;
-		rLoc = 3412;
+		rLoc = 4429;
 		rType = 0;
 		vrLen = 1432;
 		vrLoc = 31262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 90";
 		rLen = 0;
-		rLoc = 3412;
+		rLoc = 4429;
 		rType = 0;
 		vrLen = 1432;
 		vrLoc = 31262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1444;
 		vrLoc = 31262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1444;
 		vrLoc = 31262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1444;
 		vrLoc = 31262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1453;
 		vrLoc = 31262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1453;
 		vrLoc = 31262;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 108";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1217;
 		vrLoc = 0;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 21";
 		rLen = 0;
-		rLoc = 423;
+		rLoc = 971;
 		rType = 0;
 		vrLen = 1217;
 		vrLoc = 0;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1046";
 		rLen = 0;
-		rLoc = 46611;
+		rLoc = 50907;
 		rType = 0;
 		vrLen = 1450;
 		vrLoc = 31285;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 46534;
+		rLoc = 50830;
 		rType = 0;
 		vrLen = 1450;
 		vrLoc = 31285;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 46534;
+		rLoc = 50830;
 		rType = 0;
 		vrLen = 1450;
 		vrLoc = 31285;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1048";
 		rLen = 0;
-		rLoc = 46503;
+		rLoc = 50799;
 		rType = 0;
 		vrLen = 1333;
 		vrLoc = 31285;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 67";
 		rLen = 0;
-		rLoc = 1598;
+		rLoc = 2355;
 		rType = 0;
 		vrLen = 895;
 		vrLoc = 993;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1226";
 		rLen = 74;
-		rLoc = 51163;
+		rLoc = 55459;
 		rType = 0;
 		vrLen = 1307;
 		vrLoc = 36795;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1034";
 		rLen = 0;
-		rLoc = 44499;
+		rLoc = 48795;
 		rType = 0;
 		vrLen = 1205;
 		vrLoc = 30973;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 44311;
+		rLoc = 48607;
 		rType = 0;
 		vrLen = 1408;
 		vrLoc = 30775;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 67";
 		rLen = 0;
-		rLoc = 1598;
+		rLoc = 2355;
 		rType = 0;
 		vrLen = 895;
 		vrLoc = 993;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 43930;
+		rLoc = 48226;
 		rType = 0;
 		vrLen = 1492;
 		vrLoc = 31248;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 44406;
+		rLoc = 48702;
 		rType = 0;
 		vrLen = 1462;
 		vrLoc = 31147;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1048";
 		rLen = 0;
-		rLoc = 44628;
+		rLoc = 48924;
 		rType = 0;
 		vrLen = 1462;
 		vrLoc = 31147;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1049";
 		rLen = 0;
-		rLoc = 44572;
+		rLoc = 48868;
 		rType = 0;
 		vrLen = 1394;
 		vrLoc = 31415;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1049";
 		rLen = 0;
-		rLoc = 44572;
+		rLoc = 48868;
 		rType = 0;
 		vrLen = 1394;
 		vrLoc = 31415;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1029";
 		rLen = 0;
-		rLoc = 43797;
+		rLoc = 48093;
 		rType = 0;
 		vrLen = 1498;
 		vrLoc = 30842;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 43874;
+		rLoc = 48170;
 		rType = 0;
 		vrLen = 1502;
 		vrLoc = 30842;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 43874;
+		rLoc = 48170;
 		rType = 0;
 		vrLen = 1508;
 		vrLoc = 30842;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 51";
 		rLen = 15;
-		rLoc = 1271;
+		rLoc = 1914;
 		rType = 0;
 		vrLen = 955;
 		vrLoc = 1025;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 970";
 		rLen = 119;
-		rLoc = 41860;
+		rLoc = 46156;
 		rType = 0;
 		vrLen = 1389;
 		vrLoc = 31415;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1250";
 		rLen = 0;
-		rLoc = 51446;
+		rLoc = 55742;
 		rType = 0;
 		vrLen = 1185;
 		vrLoc = 37615;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1250";
 		rLen = 0;
-		rLoc = 51446;
+		rLoc = 55742;
 		rType = 0;
 		vrLen = 1185;
 		vrLoc = 37619;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1039";
 		rLen = 0;
-		rLoc = 44158;
+		rLoc = 48454;
 		rType = 0;
 		vrLen = 1356;
 		vrLoc = 31419;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1064";
 		rLen = 0;
-		rLoc = 45010;
+		rLoc = 49306;
 		rType = 0;
 		vrLen = 1461;
 		vrLoc = 31857;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1062";
 		rLen = 0;
-		rLoc = 44870;
+		rLoc = 49166;
 		rType = 0;
 		vrLen = 1476;
 		vrLoc = 31764;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		fallbackIsa = XCBuildMessageTextBookmark;
 		rLen = 1;
-		rLoc = 1424;
+		rLoc = 1553;
 		rType = 1;
 	};
 	6926A7E1146B59BC00F69705 /* PBXTextBookmark */ = {
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 978";
 		rLen = 0;
-		rLoc = 42194;
+		rLoc = 46490;
 		rType = 0;
 		vrLen = 1540;
 		vrLoc = 31881;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1064";
 		rLen = 0;
-		rLoc = 45010;
+		rLoc = 49306;
 		rType = 0;
 		vrLen = 1532;
 		vrLoc = 31881;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 108";
 		rLen = 14;
-		rLoc = 2440;
+		rLoc = 3197;
 		rType = 0;
 		vrLen = 1072;
 		vrLoc = 2099;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1065";
 		rLen = 0;
-		rLoc = 44997;
+		rLoc = 49293;
 		rType = 0;
 		vrLen = 1532;
 		vrLoc = 31881;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 45286;
+		rLoc = 49582;
 		rType = 0;
 		vrLen = 1453;
 		vrLoc = 31881;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1071";
 		rLen = 0;
-		rLoc = 45322;
+		rLoc = 49618;
 		rType = 0;
 		vrLen = 1532;
 		vrLoc = 31881;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 45161;
+		rLoc = 49457;
 		rType = 0;
 		vrLen = 1612;
 		vrLoc = 31913;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 67";
 		rLen = 0;
-		rLoc = 1559;
+		rLoc = 2316;
 		rType = 0;
 		vrLen = 959;
 		vrLoc = 1262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1067";
 		rLen = 0;
-		rLoc = 45052;
+		rLoc = 49348;
 		rType = 0;
 		vrLen = 1555;
 		vrLoc = 31987;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1067";
 		rLen = 0;
-		rLoc = 45052;
+		rLoc = 49348;
 		rType = 0;
 		vrLen = 1555;
 		vrLoc = 31987;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1073";
 		rLen = 0;
-		rLoc = 45328;
+		rLoc = 49624;
 		rType = 0;
 		vrLen = 1560;
 		vrLoc = 31987;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 68";
 		rLen = 0;
-		rLoc = 1559;
+		rLoc = 2316;
 		rType = 0;
 		vrLen = 945;
 		vrLoc = 1262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1073";
 		rLen = 0;
-		rLoc = 45328;
+		rLoc = 49624;
 		rType = 0;
 		vrLen = 1560;
 		vrLoc = 31987;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1075";
 		rLen = 0;
-		rLoc = 45402;
+		rLoc = 49698;
 		rType = 0;
 		vrLen = 1486;
 		vrLoc = 31987;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1086";
 		rLen = 0;
-		rLoc = 45762;
+		rLoc = 50058;
 		rType = 0;
 		vrLen = 1581;
 		vrLoc = 32939;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1088";
 		rLen = 0;
-		rLoc = 45762;
+		rLoc = 50058;
 		rType = 0;
 		vrLen = 1636;
 		vrLoc = 32363;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1088";
 		rLen = 0;
-		rLoc = 45762;
+		rLoc = 50058;
 		rType = 0;
 		vrLen = 1637;
 		vrLoc = 32362;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1089";
 		rLen = 0;
-		rLoc = 45762;
+		rLoc = 50058;
 		rType = 0;
 		vrLen = 1647;
 		vrLoc = 32362;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1651;
 		vrLoc = 32366;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1651;
 		vrLoc = 32366;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1658;
 		vrLoc = 32366;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1658;
 		vrLoc = 32366;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 45816;
+		rLoc = 50112;
 		rType = 0;
 		vrLen = 1543;
 		vrLoc = 32544;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1096";
 		rLen = 0;
-		rLoc = 45969;
+		rLoc = 50265;
 		rType = 0;
 		vrLen = 1484;
 		vrLoc = 32775;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 438";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1856;
 		vrLoc = 11348;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 438";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1886;
 		vrLoc = 11348;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 438";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1864;
 		vrLoc = 11538;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 438";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1858;
 		vrLoc = 11538;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 470";
 		rLen = 0;
-		rLoc = 17258;
+		rLoc = 19664;
 		rType = 0;
 		vrLen = 1250;
 		vrLoc = 13332;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 38";
 		rLen = 0;
-		rLoc = 1013;
+		rLoc = 1623;
 		rType = 0;
 		vrLen = 1096;
 		vrLoc = 485;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 444";
 		rLen = 0;
-		rLoc = 16148;
+		rLoc = 18554;
 		rType = 0;
 		vrLen = 1464;
 		vrLoc = 12557;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1528;
 		vrLoc = 12678;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1528;
 		vrLoc = 12678;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1529;
 		vrLoc = 12678;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1530;
 		vrLoc = 12679;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 68";
 		rLen = 0;
-		rLoc = 1532;
+		rLoc = 2295;
 		rType = 0;
 		vrLen = 1530;
 		vrLoc = 12679;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 38";
 		rLen = 0;
-		rLoc = 1013;
+		rLoc = 1623;
 		rType = 0;
 		vrLen = 1093;
 		vrLoc = 485;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 127";
 		rLen = 25;
-		rLoc = 2841;
+		rLoc = 3598;
 		rType = 0;
 		vrLen = 1088;
 		vrLoc = 2155;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 139";
 		rLen = 54;
-		rLoc = 7705;
+		rLoc = 6130;
 		rType = 0;
 		vrLen = 1692;
 		vrLoc = 5114;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1012";
 		rLen = 0;
-		rLoc = 41503;
+		rLoc = 43990;
 		rType = 0;
 		vrLen = 1382;
 		vrLoc = 30008;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1007";
 		rLen = 0;
-		rLoc = 37601;
+		rLoc = 40088;
 		rType = 0;
 		vrLen = 1403;
 		vrLoc = 30374;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1017";
 		rLen = 0;
-		rLoc = 37986;
+		rLoc = 40473;
 		rType = 0;
 		vrLen = 1491;
 		vrLoc = 30915;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 108";
 		rLen = 18;
-		rLoc = 2364;
+		rLoc = 3121;
 		rType = 0;
 		vrLen = 1072;
 		vrLoc = 2171;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1017";
 		rLen = 0;
-		rLoc = 38018;
+		rLoc = 40505;
 		rType = 0;
 		vrLen = 1495;
 		vrLoc = 30915;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1012";
 		rLen = 0;
-		rLoc = 37764;
+		rLoc = 40251;
 		rType = 0;
 		vrLen = 1481;
 		vrLoc = 30905;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1040";
 		rLen = 0;
-		rLoc = 38977;
+		rLoc = 41464;
 		rType = 0;
 		vrLen = 1427;
 		vrLoc = 30905;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 50";
 		rLen = 0;
-		rLoc = 1259;
+		rLoc = 1902;
 		rType = 0;
 		vrLen = 1066;
 		vrLoc = 534;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 41503;
+		rLoc = 43990;
 		rType = 0;
 		vrLen = 1420;
 		vrLoc = 30908;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1050";
 		rLen = 119;
-		rLoc = 41860;
+		rLoc = 46156;
 		rType = 0;
 		vrLen = 1509;
 		vrLoc = 31655;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 50";
 		rLen = 0;
-		rLoc = 1259;
+		rLoc = 1902;
 		rType = 0;
 		vrLen = 906;
 		vrLoc = 823;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1058";
 		rLen = 0;
-		rLoc = 41694;
+		rLoc = 45990;
 		rType = 0;
 		vrLen = 1317;
 		vrLoc = 32232;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1062";
 		rLen = 0;
-		rLoc = 41841;
+		rLoc = 46137;
 		rType = 0;
 		vrLen = 1285;
 		vrLoc = 32232;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1030";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1417;
 		vrLoc = 31218;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1030";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1417;
 		vrLoc = 31218;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1392;
 		vrLoc = 31253;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1392;
 		vrLoc = 31253;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1032";
 		rLen = 0;
-		rLoc = 38168;
+		rLoc = 40655;
 		rType = 0;
 		vrLen = 1451;
 		vrLoc = 31194;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 436";
 		rLen = 0;
-		rLoc = 16365;
+		rLoc = 18771;
 		rType = 0;
 		vrLen = 1818;
 		vrLoc = 11735;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 436";
 		rLen = 0;
-		rLoc = 16365;
+		rLoc = 18771;
 		rType = 0;
 		vrLen = 1451;
 		vrLoc = 12773;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 437";
 		rLen = 0;
-		rLoc = 16371;
+		rLoc = 18777;
 		rType = 0;
 		vrLen = 1519;
 		vrLoc = 12550;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 437";
 		rLen = 0;
-		rLoc = 16371;
+		rLoc = 18777;
 		rType = 0;
 		vrLen = 1523;
 		vrLoc = 12550;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 437";
 		rLen = 0;
-		rLoc = 16371;
+		rLoc = 18777;
 		rType = 0;
 		vrLen = 1519;
 		vrLoc = 12550;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 437";
 		rLen = 0;
-		rLoc = 16371;
+		rLoc = 18777;
 		rType = 0;
 		vrLen = 1519;
 		vrLoc = 12550;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1529;
 		vrLoc = 31834;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1529;
 		vrLoc = 31834;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1635;
 		vrLoc = 31881;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1635;
 		vrLoc = 31881;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1074";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1634;
 		vrLoc = 31881;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 454";
 		rLen = 0;
-		rLoc = 16808;
+		rLoc = 19214;
 		rType = 0;
 		vrLen = 1502;
 		vrLoc = 12734;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1076";
 		rLen = 0;
-		rLoc = 39649;
+		rLoc = 42136;
 		rType = 0;
 		vrLen = 1580;
 		vrLoc = 32022;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 50";
 		rLen = 0;
-		rLoc = 1259;
+		rLoc = 1902;
 		rType = 0;
 		vrLen = 887;
 		vrLoc = 823;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 40897;
+		rLoc = 43384;
 		rType = 0;
 		vrLen = 1776;
 		vrLoc = 32146;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 177";
 		rLen = 0;
-		rLoc = 8411;
+		rLoc = 6836;
 		rType = 0;
 		vrLen = 1558;
 		vrLoc = 5039;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 210";
 		rLen = 0;
-		rLoc = 9443;
+		rLoc = 7868;
 		rType = 0;
 		vrLen = 1859;
 		vrLoc = 5449;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1020";
 		rLen = 211;
-		rLoc = 37297;
+		rLoc = 39784;
 		rType = 0;
 		vrLen = 1580;
 		vrLoc = 33567;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1020";
 		rLen = 211;
-		rLoc = 37297;
+		rLoc = 39784;
 		rType = 0;
 		vrLen = 1580;
 		vrLoc = 33567;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1119";
 		rLen = 0;
-		rLoc = 41284;
+		rLoc = 43771;
 		rType = 0;
 		vrLen = 1634;
 		vrLoc = 33895;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1070";
 		rLen = 0;
-		rLoc = 38977;
+		rLoc = 41464;
 		rType = 0;
 		vrLen = 1725;
 		vrLoc = 32525;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 16";
 		rLen = 0;
-		rLoc = 281;
+		rLoc = 829;
 		rType = 0;
 		vrLen = 975;
 		vrLoc = 0;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1037";
 		rLen = 0;
-		rLoc = 37268;
+		rLoc = 39755;
 		rType = 0;
 		vrLen = 1329;
 		vrLoc = 31486;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1041";
 		rLen = 0;
-		rLoc = 36921;
+		rLoc = 39372;
 		rType = 0;
 		vrLen = 1193;
 		vrLoc = 32102;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1035";
 		rLen = 0;
-		rLoc = 36142;
+		rLoc = 38548;
 		rType = 0;
 		vrLen = 1145;
 		vrLoc = 32098;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1052";
 		rLen = 0;
-		rLoc = 36910;
+		rLoc = 39316;
 		rType = 0;
 		vrLen = 1164;
 		vrLoc = 32098;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 50";
 		rLen = 0;
-		rLoc = 1259;
+		rLoc = 1902;
 		rType = 0;
 		vrLen = 887;
 		vrLoc = 823;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1052";
 		rLen = 0;
-		rLoc = 36910;
+		rLoc = 39316;
 		rType = 0;
 		vrLen = 1164;
 		vrLoc = 32098;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1031";
 		rLen = 0;
-		rLoc = 34297;
+		rLoc = 36703;
 		rType = 0;
 		vrLen = 1078;
 		vrLoc = 32098;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 35894;
+		rLoc = 38300;
 		rType = 0;
 		vrLen = 1055;
 		vrLoc = 32098;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		fallbackIsa = XCBuildMessageTextBookmark;
 		rLen = 1;
-		rLoc = 1424;
+		rLoc = 1553;
 		rType = 1;
 	};
 	6926A9D2146C759700F69705 /* PBXTextBookmark */ = {
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1287";
 		rLen = 0;
-		rLoc = 44690;
+		rLoc = 48986;
 		rType = 0;
 		vrLen = 193;
 		vrLoc = 37053;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1139";
 		rLen = 0;
-		rLoc = 39343;
+		rLoc = 41830;
 		rType = 0;
 		vrLen = 1815;
 		vrLoc = 34704;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1147";
 		rLen = 899;
-		rLoc = 39698;
+		rLoc = 42185;
 		rType = 0;
 		vrLen = 1908;
 		vrLoc = 34706;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1153";
 		rLen = 0;
-		rLoc = 40020;
+		rLoc = 42507;
 		rType = 0;
 		vrLen = 2044;
 		vrLoc = 35207;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1178";
 		rLen = 0;
-		rLoc = 41022;
+		rLoc = 43509;
 		rType = 0;
 		vrLen = 2065;
 		vrLoc = 35634;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 34996;
+		rLoc = 37402;
 		rType = 0;
 		vrLen = 1109;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1037";
 		rLen = 0;
-		rLoc = 34838;
+		rLoc = 37244;
 		rType = 0;
 		vrLen = 1119;
 		vrLoc = 32174;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 116";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1083;
 		vrLoc = 1859;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 10;
-		rLoc = 35035;
+		rLoc = 37441;
 		rType = 0;
 		vrLen = 1150;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1043";
 		rLen = 0;
-		rLoc = 35018;
+		rLoc = 37424;
 		rType = 0;
 		vrLen = 1147;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1052";
 		rLen = 0;
-		rLoc = 35802;
+		rLoc = 38208;
 		rType = 0;
 		vrLen = 1124;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1050";
 		rLen = 0;
-		rLoc = 35018;
+		rLoc = 37424;
 		rType = 0;
 		vrLen = 1104;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1053";
 		rLen = 0;
-		rLoc = 35233;
+		rLoc = 37639;
 		rType = 0;
 		vrLen = 1137;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1055";
 		rLen = 0;
-		rLoc = 35741;
+		rLoc = 38147;
 		rType = 0;
 		vrLen = 1142;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1036";
 		rLen = 0;
-		rLoc = 34574;
+		rLoc = 36980;
 		rType = 0;
 		vrLen = 1150;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1061";
 		rLen = 0;
-		rLoc = 35456;
+		rLoc = 37862;
 		rType = 0;
 		vrLen = 1122;
 		vrLoc = 32174;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1090";
 		rLen = 0;
-		rLoc = 36585;
+		rLoc = 38991;
 		rType = 0;
 		vrLen = 1297;
 		vrLoc = 32706;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 441";
 		rLen = 0;
-		rLoc = 15761;
+		rLoc = 18167;
 		rType = 0;
 		vrLen = 1908;
 		vrLoc = 12417;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 442";
 		rLen = 0;
-		rLoc = 15667;
+		rLoc = 18073;
 		rType = 0;
 		vrLen = 1779;
 		vrLoc = 12746;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1099";
 		rLen = 0;
-		rLoc = 36875;
+		rLoc = 39281;
 		rType = 0;
 		vrLen = 1295;
 		vrLoc = 33118;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 445";
 		rLen = 0;
-		rLoc = 15761;
+		rLoc = 18167;
 		rType = 0;
 		vrLen = 1757;
 		vrLoc = 12940;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1059";
 		rLen = 0;
-		rLoc = 35242;
+		rLoc = 37648;
 		rType = 0;
 		vrLen = 1177;
 		vrLoc = 32255;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1072";
 		rLen = 0;
-		rLoc = 35791;
+		rLoc = 38197;
 		rType = 0;
 		vrLen = 1182;
 		vrLoc = 32235;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1072";
 		rLen = 0;
-		rLoc = 35783;
+		rLoc = 38189;
 		rType = 0;
 		vrLen = 1192;
 		vrLoc = 32235;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1072";
 		rLen = 0;
-		rLoc = 35783;
+		rLoc = 38189;
 		rType = 0;
 		vrLen = 1192;
 		vrLoc = 32235;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 35688;
+		rLoc = 38094;
 		rType = 0;
 		vrLen = 1206;
 		vrLoc = 32235;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 35650;
+		rLoc = 38056;
 		rType = 0;
 		vrLen = 1234;
 		vrLoc = 32235;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1069";
 		rLen = 0;
-		rLoc = 35650;
+		rLoc = 38056;
 		rType = 0;
 		vrLen = 1234;
 		vrLoc = 32235;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1045";
 		rLen = 0;
-		rLoc = 34723;
+		rLoc = 37129;
 		rType = 0;
 		vrLen = 1271;
 		vrLoc = 32235;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1058";
 		rLen = 0;
-		rLoc = 34990;
+		rLoc = 37396;
 		rType = 0;
 		vrLen = 1327;
 		vrLoc = 32262;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 116";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1083;
 		vrLoc = 1859;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 116";
 		rLen = 0;
-		rLoc = 2501;
+		rLoc = 3258;
 		rType = 0;
 		vrLen = 1109;
 		vrLoc = 2600;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 164";
 		rLen = 15;
-		rLoc = 3559;
+		rLoc = 4316;
 		rType = 0;
 		vrLen = 1015;
 		vrLoc = 2734;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1058";
 		rLen = 0;
-		rLoc = 34990;
+		rLoc = 37396;
 		rType = 0;
 		vrLen = 1327;
 		vrLoc = 32262;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 212";
 		rLen = 0;
-		rLoc = 7686;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1596;
 		vrLoc = 4866;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 298";
 		rLen = 0;
-		rLoc = 10327;
+		rLoc = 8752;
 		rType = 0;
 		vrLen = 1521;
 		vrLoc = 9063;
 		fRef = 69269F2414620D0F00F69705 /* packet.h */;
 		name = "packet.h: 112";
 		rLen = 17;
-		rLoc = 2419;
+		rLoc = 3176;
 		rType = 0;
 		vrLen = 1104;
 		vrLoc = 1941;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1173";
 		rLen = 0;
-		rLoc = 37081;
+		rLoc = 39532;
 		rType = 0;
 		vrLen = 1361;
 		vrLoc = 35270;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 217";
 		rLen = 0;
-		rLoc = 7793;
+		rLoc = 6218;
 		rType = 0;
 		vrLen = 1216;
 		vrLoc = 7015;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 189";
 		rLen = 0;
-		rLoc = 6526;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1764;
 		vrLoc = 5299;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 189";
 		rLen = 0;
-		rLoc = 6526;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1764;
 		vrLoc = 5299;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 184";
 		rLen = 0;
-		rLoc = 6339;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1764;
 		vrLoc = 5299;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 189";
 		rLen = 0;
-		rLoc = 6522;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1756;
 		vrLoc = 5299;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 190";
 		rLen = 0;
-		rLoc = 6526;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1786;
 		vrLoc = 5299;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1134";
 		rLen = 0;
-		rLoc = 35650;
+		rLoc = 38056;
 		rType = 0;
 		vrLen = 1423;
 		vrLoc = 34344;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1104";
 		rLen = 0;
-		rLoc = 34719;
+		rLoc = 37125;
 		rType = 0;
 		vrLen = 1485;
 		vrLoc = 35523;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1104";
 		rLen = 0;
-		rLoc = 34719;
+		rLoc = 37125;
 		rType = 0;
 		vrLen = 1485;
 		vrLoc = 35523;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1104";
 		rLen = 0;
-		rLoc = 34719;
+		rLoc = 37125;
 		rType = 0;
 		vrLen = 1381;
 		vrLoc = 34415;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1121";
 		rLen = 0;
-		rLoc = 35091;
+		rLoc = 37497;
 		rType = 0;
 		vrLen = 1375;
 		vrLoc = 34119;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1144";
 		rLen = 0;
-		rLoc = 35879;
+		rLoc = 38285;
 		rType = 0;
 		vrLen = 1413;
 		vrLoc = 34544;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1127";
 		rLen = 0;
-		rLoc = 35354;
+		rLoc = 37760;
 		rType = 0;
 		vrLen = 1413;
 		vrLoc = 34544;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1124";
 		rLen = 0;
-		rLoc = 35208;
+		rLoc = 37614;
 		rType = 0;
 		vrLen = 1411;
 		vrLoc = 34544;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1277";
 		rLen = 0;
-		rLoc = 40567;
+		rLoc = 43054;
 		rType = 0;
 		vrLen = 1880;
 		vrLoc = 39504;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1277";
 		rLen = 0;
-		rLoc = 40594;
+		rLoc = 43081;
 		rType = 0;
 		vrLen = 1884;
 		vrLoc = 39504;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1278";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 1881;
 		vrLoc = 39504;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1281";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 2087;
 		vrLoc = 38355;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1281";
 		rLen = 0;
-		rLoc = 40626;
+		rLoc = 43113;
 		rType = 0;
 		vrLen = 2087;
 		vrLoc = 38355;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1277";
 		rLen = 0;
-		rLoc = 40594;
+		rLoc = 43081;
 		rType = 0;
 		vrLen = 2091;
 		vrLoc = 38355;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 183";
 		rLen = 0;
-		rLoc = 6312;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1879;
 		vrLoc = 5538;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 183";
 		rLen = 0;
-		rLoc = 6322;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1879;
 		vrLoc = 5538;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 1184";
 		rLen = 0;
-		rLoc = 37264;
+		rLoc = 39751;
 		rType = 0;
 		vrLen = 1433;
 		vrLoc = 35814;
 		fRef = 69269F2314620D0F00F69705 /* packet.c */;
 		name = "packet.c: 204";
 		rLen = 0;
-		rLoc = 7197;
+		rLoc = 6114;
 		rType = 0;
 		vrLen = 1737;
 		vrLoc = 6105;
 	};
+	6926ABC1146C97B300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1198";
+		rLen = 0;
+		rLoc = 39668;
+		rType = 0;
+		vrLen = 1219;
+		vrLoc = 36144;
+	};
+	6926ABC2146C97B300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 112";
+		rLen = 17;
+		rLoc = 3176;
+		rType = 0;
+		vrLen = 1104;
+		vrLoc = 1941;
+	};
+	6926ABC3146C97B300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 30";
+		rLen = 0;
+		rLoc = 1424;
+		rType = 0;
+		vrLen = 1204;
+		vrLoc = 375;
+	};
+	6926ABE1146DAA7300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 66";
+		rLen = 0;
+		rLoc = 2113;
+		rType = 0;
+		vrLen = 1087;
+		vrLoc = 577;
+	};
+	6926ABE2146DAA7300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1344";
+		rLen = 0;
+		rLoc = 44841;
+		rType = 0;
+		vrLen = 1542;
+		vrLoc = 41396;
+	};
+	6926ABE3146DAA7300F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1344";
+		rLen = 0;
+		rLoc = 44841;
+		rType = 0;
+		vrLen = 1542;
+		vrLoc = 41396;
+	};
+	6926ABE7146DAAA100F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1346";
+		rLen = 0;
+		rLoc = 44828;
+		rType = 0;
+		vrLen = 1602;
+		vrLoc = 41258;
+	};
+	6926ABE9146DAAFE00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1349";
+		rLen = 0;
+		rLoc = 44954;
+		rType = 0;
+		vrLen = 1653;
+		vrLoc = 41258;
+	};
+	6926ABEB146DADCD00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1352";
+		rLen = 0;
+		rLoc = 45238;
+		rType = 0;
+		vrLen = 1725;
+		vrLoc = 41258;
+	};
+	6926ABF1146DAE1B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1354";
+		rLen = 0;
+		rLoc = 45238;
+		rType = 0;
+		vrLen = 1698;
+		vrLoc = 41258;
+	};
+	6926ABF5146DAE3A00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1354";
+		rLen = 0;
+		rLoc = 45182;
+		rType = 0;
+		vrLen = 1699;
+		vrLoc = 41258;
+	};
+	6926ABF9146DB0DE00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1356";
+		rLen = 0;
+		rLoc = 45240;
+		rType = 0;
+		vrLen = 1472;
+		vrLoc = 42122;
+	};
+	6926AC0A146DB19400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1346";
+		rLen = 0;
+		rLoc = 44784;
+		rType = 0;
+		vrLen = 1629;
+		vrLoc = 41950;
+	};
+	6926AC0B146DB19400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1346";
+		rLen = 0;
+		rLoc = 44784;
+		rType = 0;
+		vrLen = 1629;
+		vrLoc = 41950;
+	};
+	6926AC16146DB28400F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1371";
+		rLen = 0;
+		rLoc = 45519;
+		rType = 0;
+		vrLen = 1666;
+		vrLoc = 41950;
+	};
+	6926AC24146DB40000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1339";
+		rLen = 0;
+		rLoc = 44359;
+		rType = 0;
+		vrLen = 1625;
+		vrLoc = 41950;
+	};
+	6926AC2B146DB42200F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 1379";
+		rLen = 0;
+		rLoc = 45753;
+		rType = 0;
+		vrLen = 1393;
+		vrLoc = 42689;
+	};
+	6926AC42146DB5D000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 63";
+		rLen = 29;
+		rLoc = 2043;
+		rType = 0;
+		vrLen = 863;
+		vrLoc = 1205;
+	};
+	6926AC43146DB5D000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 347";
+		rLen = 0;
+		rLoc = 11458;
+		rType = 0;
+		vrLen = 1144;
+		vrLoc = 10747;
+	};
+	6926AC44146DB5D000F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 335";
+		rLen = 0;
+		rLoc = 11002;
+		rType = 0;
+		vrLen = 1083;
+		vrLoc = 11237;
+	};
+	6926AC66146DBC7D00F69705 /* README */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {905, 618}}";
+			sepNavSelRange = "{236, 0}";
+			sepNavVisRange = "{0, 1100}";
+		};
+	};
+	6926AC67146DBC9B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A660146B38F200F69705 /* keychain.c */;
+		name = "keychain.c: 88";
+		rLen = 0;
+		rLoc = 2419;
+		rType = 0;
+		vrLen = 1032;
+		vrLoc = 201;
+	};
+	6926AC68146DBC9B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 335";
+		rLen = 0;
+		rLoc = 11002;
+		rType = 0;
+		vrLen = 1083;
+		vrLoc = 11237;
+	};
+	6926AC69146DBC9B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 1";
+		rLen = 0;
+		rLoc = 1100;
+		rType = 0;
+		vrLen = 0;
+		vrLoc = 0;
+	};
+	6926AC6A146DBC9B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 1";
+		rLen = 0;
+		rLoc = 1100;
+		rType = 0;
+		vrLen = 0;
+		vrLoc = 0;
+	};
+	6926AC6B146DBE2B00F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 25";
+		rLen = 0;
+		rLoc = 1074;
+		rType = 0;
+		vrLen = 921;
+		vrLoc = 0;
+	};
+	6926AC71146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 5";
+		rLen = 0;
+		rLoc = 238;
+		rType = 0;
+		vrLen = 953;
+		vrLoc = 0;
+	};
+	6926AC72146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2414620D0F00F69705 /* packet.h */;
+		name = "packet.h: 6";
+		rLen = 0;
+		rLoc = 80;
+		rType = 0;
+		vrLen = 1540;
+		vrLoc = 0;
+	};
+	6926AC73146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2314620D0F00F69705 /* packet.c */;
+		name = "packet.c: 7";
+		rLen = 600;
+		rLoc = 81;
+		rType = 0;
+		vrLen = 1246;
+		vrLoc = 0;
+	};
+	6926AC74146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2214620D0F00F69705 /* packet_test.h */;
+		name = "packet_test.h: 19";
+		rLen = 0;
+		rLoc = 683;
+		rType = 0;
+		vrLen = 839;
+		vrLoc = 0;
+	};
+	6926AC75146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 69269F2114620D0F00F69705 /* packet_test.c */;
+		name = "packet_test.c: 19";
+		rLen = 0;
+		rLoc = 683;
+		rType = 0;
+		vrLen = 1509;
+		vrLoc = 0;
+	};
+	6926AC76146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A661146B38F200F69705 /* keychain.h */;
+		name = "keychain.h: 19";
+		rLen = 0;
+		rLoc = 680;
+		rType = 0;
+		vrLen = 1207;
+		vrLoc = 0;
+	};
+	6926AC77146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A660146B38F200F69705 /* keychain.c */;
+		name = "keychain.c: 88";
+		rLen = 0;
+		rLoc = 2419;
+		rType = 0;
+		vrLen = 1032;
+		vrLoc = 201;
+	};
+	6926AC78146DBFB600F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A660146B38F200F69705 /* keychain.c */;
+		name = "keychain.c: 19";
+		rLen = 0;
+		rLoc = 680;
+		rType = 0;
+		vrLen = 1255;
+		vrLoc = 0;
+	};
+	6926AC79146DC18500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926A660146B38F200F69705 /* keychain.c */;
+		name = "keychain.c: 9";
+		rLen = 563;
+		rLoc = 117;
+		rType = 0;
+		vrLen = 1255;
+		vrLoc = 0;
+	};
+	6926AC7A146DC18500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 5";
+		rLen = 0;
+		rLoc = 238;
+		rType = 0;
+		vrLen = 953;
+		vrLoc = 0;
+	};
+	6926AC7B146DC18500F69705 /* PBXTextBookmark */ = {
+		isa = PBXTextBookmark;
+		fRef = 6926AC66146DBC7D00F69705 /* README */;
+		name = "README: 7";
+		rLen = 0;
+		rLoc = 236;
+		rType = 0;
+		vrLen = 1100;
+		vrLoc = 0;
+	};
 	69868AD41460E35F004C5D9B /* Source Control */ = {
 		isa = PBXSourceControlManager;
 		fallbackIsa = XCSourceControlManager;
 		vrLen = 824;
 		vrLoc = 0;
 	};
-	69868C9D14618450004C5D9B /* packet.c:9 */ = {
+	69868C9D14618450004C5D9B /* packet.c:22 */ = {
 		isa = PBXFileBreakpoint;
 		actions = (
 		);
 		fileReference = 69269F2314620D0F00F69705 /* packet.c */;
 		hitCount = 0;
 		ignoreCount = 0;
-		lineNumber = 9;
+		lineNumber = 22;
 		location = duckdog;
-		modificationTime = 342660550.994715;
+		modificationTime = 342734490.624816;
 		originalNumberOfMultipleMatches = 1;
 		state = 2;
 	};
    
  *  simplepgp
  *
  *  Created by Trevor Bentley on 11/8/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
 
    
  *  simplepgp
  *
  *  Created by Trevor Bentley on 11/8/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
 
    
  *  libsimplepgp
  *
  *  Created by Trevor Bentley on 11/1/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
 
 **
 ***********************************************************************/
 
+static spgp_packet_t* spgp_packet_decode_loop(uint8_t *message, 
+																							uint32_t *idx, 
+                                              uint32_t length);
+                                              
 static uint8_t spgp_parse_header(uint8_t *msg, uint32_t *idx, 
 														uint32_t length, spgp_packet_t *pkt);
 
                                            uint32_t *idx, 
           														 		 uint32_t *length, 
                                            spgp_packet_t *pkt);
-                                 
+             
+static uint8_t spgp_parse_literal_packet(uint8_t *msg, 
+                                         uint32_t *idx, 
+          													 		 uint32_t length, 
+                                         spgp_packet_t *pkt);
+                                                     
 static spgp_packet_t *spgp_find_session_packet(spgp_packet_t *chain);
          
 static uint8_t spgp_parse_session_packet(uint8_t *msg, uint32_t *idx, 
 ***********************************************************************/
 #pragma mark External Function Definitions
 
-static spgp_packet_t* spgp_packet_decode_loop(uint8_t *message, uint32_t *idx, uint32_t length) {
-	spgp_packet_t *head = NULL;
-  spgp_packet_t *pkt = NULL;
-
-  // There must be at least one packet, yeah?
-  head = malloc(sizeof(*head));
-  if (NULL == head) RAISE(OUT_OF_MEMORY);
-  memset(head, 0, sizeof(*head));
-  pkt = head;
-  
-  // Loop to decode every packet in message
-  while (*idx < length-1) {
-   	// Every packet starts with a header
-    spgp_parse_header(message, idx, length, pkt);
-    if (!pkt->header) RAISE(FORMAT_UNSUPPORTED);
-    
-    // Decode packet contents based on the type marked in its header
-    switch (pkt->header->type) {
-    	case PKT_TYPE_USER_ID:
-      	spgp_parse_user_id(message, idx, length, pkt);
-        break;
-      case PKT_TYPE_PUBLIC_KEY:
-      case PKT_TYPE_PUBLIC_SUBKEY:
-      	spgp_parse_public_key(message, idx, length, pkt);
-        break;
-      case PKT_TYPE_SECRET_KEY:
-      case PKT_TYPE_SECRET_SUBKEY:
-        spgp_parse_secret_key(message, idx, length, pkt);
-        break;
-      case PKT_TYPE_SESSION:
-      	spgp_parse_session_packet(message, idx, length, pkt);
-      	break;
-      case PKT_TYPE_SYM_ENC_INT_DATA:
-      	spgp_parse_encrypted_packet(message, idx, &length, pkt);
-      	break;
-      case PKT_TYPE_COMPRESSED_DATA:
-      	spgp_parse_compressed_packet(message, idx, length, pkt);
-        break;
-      case PKT_TYPE_LITERAL_DATA:
-      	LOG_PRINT("Literal data\n");
-      default:
-        LOG_PRINT("WARNING: Unsupported packet type %u\n", pkt->header->type);
-        // Increment to next packet.  We add the contentLength, but subtract
-        // one parse_header() left us on the first byte of content.
-        if (*idx + pkt->header->contentLength - 1 < length)
-          *idx = *idx + pkt->header->contentLength - 1;
-        break;
-    }
-    
-    // If we're at the end of the buffer, we're done
-    if (*idx >= length-1) break;
-        
-    // A packet can contain other packets -- if such a thing was just decoded,
-    // new packets have already been added to the list.  Progress until we
-    // get to the end of the packet list.
-    while (pkt->next != NULL) pkt = pkt->next;
-        
-    // Allocate space for another packet
-    pkt->next = malloc(sizeof(*pkt->next));
-    if (NULL == pkt->next) RAISE(OUT_OF_MEMORY);
-    memset(pkt->next, 0, sizeof(*pkt->next));
-    pkt->next->prev = pkt; // make backwards pointer
-    pkt = pkt->next;
-    
-    // Packet parser increments to it's own last byte.  Need one more to get
-    // to the next packet's first byte. 
-    SAFE_IDX_INCREMENT(*idx, length);
-	}
-
-	return head;
-}
 
 spgp_packet_t *spgp_decode_message(uint8_t *message, uint32_t length) {
 	spgp_packet_t *head = NULL;
     free((*pkt)->c.secret);
     (*pkt)->c.secret = NULL;
   }
+  
+  else if (((*pkt)->header->type == PKT_TYPE_PUBLIC_KEY ||
+            (*pkt)->header->type == PKT_TYPE_PUBLIC_SUBKEY) &&
+            (*pkt)->c.pub != NULL) {
+  	if ((*pkt)->c.pub->mpiCount > 0) {
+    	curMpi = (*pkt)->c.pub->mpiHead;
+      while (curMpi->next) {
+      	nextMpi = curMpi->next;
+        if (curMpi->data) free(curMpi->data);
+        free(curMpi);
+        curMpi = nextMpi;
+      }
+      (*pkt)->c.pub->mpiHead = NULL;
+      (*pkt)->c.pub->mpiCount = 0;
+    }            
+  }
+  
   else if ((*pkt)->header->type == PKT_TYPE_USER_ID &&
   				 (*pkt)->c.userid->data != NULL) {
   	free((*pkt)->c.userid->data);
     (*pkt)->c.userid = NULL;
   }
   
+  else if ((*pkt)->header->type == PKT_TYPE_SESSION &&
+  				 (*pkt)->c.session != NULL) {
+  	if ((*pkt)->c.session->key) {
+    	free((*pkt)->c.session->key);
+      (*pkt)->c.session->key = NULL;
+    }
+  	if ((*pkt)->c.session->mpi1) {
+    	free((*pkt)->c.session->mpi1);
+      (*pkt)->c.session->mpi1 = NULL;
+    }
+  	if ((*pkt)->c.session->mpi2) {
+    	free((*pkt)->c.session->mpi2);
+      (*pkt)->c.session->mpi2 = NULL;
+    }
+  }
+  
+  else if ((*pkt)->header->type == PKT_TYPE_LITERAL_DATA &&
+  				 (*pkt)->c.literal != NULL) {
+  	if ((*pkt)->c.literal->filename) {
+    	free((*pkt)->c.literal->filename);
+      (*pkt)->c.literal->filename = NULL;
+    }
+  	if ((*pkt)->c.literal->data) {
+    	free((*pkt)->c.literal->data);
+      (*pkt)->c.literal->data = NULL;
+    }
+  }
+  
   // release header
   if ((*pkt)->header) {
 	  free((*pkt)->header);
 #pragma mark Static Function Definitions
 
 
+static spgp_packet_t* spgp_packet_decode_loop(uint8_t *message, 
+																							uint32_t *idx, 
+                                              uint32_t length) {
+	spgp_packet_t *head = NULL;
+  spgp_packet_t *pkt = NULL;
+
+  // There must be at least one packet, yeah?
+  head = malloc(sizeof(*head));
+  if (NULL == head) RAISE(OUT_OF_MEMORY);
+  memset(head, 0, sizeof(*head));
+  pkt = head;
+  
+  // Loop to decode every packet in message
+  while (*idx < length-1) {
+   	// Every packet starts with a header
+    spgp_parse_header(message, idx, length, pkt);
+    if (!pkt->header) RAISE(FORMAT_UNSUPPORTED);
+    
+    // Decode packet contents based on the type marked in its header
+    switch (pkt->header->type) {
+    	case PKT_TYPE_USER_ID:
+      	spgp_parse_user_id(message, idx, length, pkt);
+        break;
+      case PKT_TYPE_PUBLIC_KEY:
+      case PKT_TYPE_PUBLIC_SUBKEY:
+      	spgp_parse_public_key(message, idx, length, pkt);
+        break;
+      case PKT_TYPE_SECRET_KEY:
+      case PKT_TYPE_SECRET_SUBKEY:
+        spgp_parse_secret_key(message, idx, length, pkt);
+        break;
+      case PKT_TYPE_SESSION:
+      	spgp_parse_session_packet(message, idx, length, pkt);
+      	break;
+      case PKT_TYPE_SYM_ENC_INT_DATA:
+      	spgp_parse_encrypted_packet(message, idx, &length, pkt);
+      	break;
+      case PKT_TYPE_COMPRESSED_DATA:
+      	spgp_parse_compressed_packet(message, idx, length, pkt);
+        break;
+      case PKT_TYPE_LITERAL_DATA:
+      	spgp_parse_literal_packet(message, idx, length, pkt);
+        break;
+      default:
+        LOG_PRINT("WARNING: Unsupported packet type %u\n", pkt->header->type);
+        // Increment to next packet.  We add the contentLength, but subtract
+        // one parse_header() left us on the first byte of content.
+        if (*idx + pkt->header->contentLength - 1 < length)
+          *idx = *idx + pkt->header->contentLength - 1;
+        break;
+    }
+    
+    // If we're at the end of the buffer, we're done
+    if (*idx >= length-1) break;
+        
+    // A packet can contain other packets -- if such a thing was just decoded,
+    // new packets have already been added to the list.  Progress until we
+    // get to the end of the packet list.
+    while (pkt->next != NULL) pkt = pkt->next;
+        
+    // Allocate space for another packet
+    pkt->next = malloc(sizeof(*pkt->next));
+    if (NULL == pkt->next) RAISE(OUT_OF_MEMORY);
+    memset(pkt->next, 0, sizeof(*pkt->next));
+    pkt->next->prev = pkt; // make backwards pointer
+    pkt = pkt->next;
+    
+    // Packet parser increments to it's own last byte.  Need one more to get
+    // to the next packet's first byte. 
+    SAFE_IDX_INCREMENT(*idx, length);
+	}
+
+	return head;
+}
+
 static uint8_t spgp_parse_header(uint8_t *msg, uint32_t *idx, 
 														uint32_t length, spgp_packet_t *pkt) {
 	uint8_t i;
       RAISE(FORMAT_UNSUPPORTED);
   }
   
+  if (NULL == decomp) RAISE(DECRYPT_FAILED);
   
   // Decode all the packets in this compressed packet        
 	didx = 0;
   pkt->next = pkts;
   pkts->prev = pkt;
   
+  free(decomp);
+  decomp = NULL;
+  
   // Progress index through current chain
   *idx += pkt->header->contentLength;
  
 	return 0;
 }
 
+static uint8_t spgp_parse_literal_packet(uint8_t *msg, 
+                                         uint32_t *idx, 
+          													 		 uint32_t length, 
+                                         spgp_packet_t *pkt) {
+	spgp_literal_pkt_t *literal = NULL;
+  uint32_t date;
+  uint32_t startidx;
+  uint8_t format;
+  
+  LOG_PRINT("Parsing literal packet\n");
+
+	if (NULL == msg || NULL == idx || NULL == pkt || length == 0)                              
+  	RAISE(INVALID_ARGS);
+
+	startidx = *idx;
+
+  pkt->c.literal = malloc(sizeof(*(pkt->c.literal)));
+  if (NULL == pkt->c.literal) RAISE(OUT_OF_MEMORY);
+  memset(pkt->c.literal, 0, sizeof(*(pkt->c.literal)));
+  literal = pkt->c.literal;                                       
+
+	// Read the format of the message.  This is ignored.
+	format = msg[*idx];
+  SAFE_IDX_INCREMENT(*idx, length);
+
+	// Read the length byte of the fylename
+	literal->filenameLen = msg[*idx];
+  SAFE_IDX_INCREMENT(*idx, length);
+  
+  // Read the filename
+  literal->filename = malloc(literal->filenameLen + 1);
+  if (NULL == literal->filename) RAISE(OUT_OF_MEMORY);
+  memcpy(literal->filename, msg+*idx, literal->filenameLen);
+  literal->filename[literal->filenameLen] = '\0';
+  *idx += literal->filenameLen - 1;
+	SAFE_IDX_INCREMENT(*idx, length);
+  
+  // Read the timestamp.  This is ignored.
+  memcpy(&date, msg+*idx, sizeof(date));
+  *idx += 3;
+  SAFE_IDX_INCREMENT(*idx, length);
+  
+  // Read the actual data in to buffer
+  literal->dataLen = pkt->header->contentLength - (*idx - startidx);
+  literal->data = malloc(literal->dataLen);
+  if (NULL == literal->data) RAISE(OUT_OF_MEMORY);
+  memcpy(literal->data, msg+*idx, literal->dataLen);
+  *idx += literal->dataLen - 1;
+  
+  LOG_PRINT("Stored %u bytes\n", literal->dataLen);
+  
+	return 0;
+}
+                                         
 static spgp_packet_t *spgp_find_session_packet(spgp_packet_t *chain) {
 	spgp_packet_t *cur;
   
    
  *  libsimplepgp
  *
  *  Created by Trevor Bentley on 11/1/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
  
 typedef struct spgp_secret_packet_struct  spgp_secret_pkt_t;
 typedef struct spgp_userid_packet_struct  spgp_userid_pkt_t;
 typedef struct spgp_session_packet_struct spgp_session_pkt_t;
+typedef struct spgp_literal_packet_struct spgp_literal_pkt_t;
 
 struct spgp_packet_header_struct {
 	spgp_packet_t *parent;
   	spgp_secret_pkt_t  *secret;
     spgp_userid_pkt_t  *userid;
     spgp_session_pkt_t *session;
+    spgp_literal_pkt_t *literal;
   } c;
 	spgp_packet_t *next;
   spgp_packet_t *prev;
 	spgp_mpi_t *next;
 }; 
 
+struct spgp_literal_packet_struct {
+	char *filename;
+	char *data;
+  uint32_t dataLen;
+  uint32_t filenameLen;
+};
+
 struct spgp_userid_packet_struct {
 	uint8_t *data;
 };
    
  *  simplepgp
  *
  *  Created by Trevor Bentley on 11/2/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */
 
    
  *  simplepgp
  *
  *  Created by Trevor Bentley on 11/2/11.
- *  Copyright 2011 Trevor Bentley. All rights reserved.
+ *
+ *  Copyright 2011 Trevor Bentley
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
  *
  */