Index: main/utils.c
===================================================================
--- main/utils.c	(revision 359706)
+++ main/utils.c	(revision 359707)
@@ -1989,10 +1989,29 @@
  * pedantic arg can be set to nonzero if we need to do addition Digest check.
  */
 int ast_parse_digest(const char *digest, struct ast_http_digest *d, int request, int pedantic) {
-	int i;
-	char *c, key[512], val[512];
+	char *c;
 	struct ast_str *str = ast_str_create(16);
 
+	/* table of recognised keywords, and places where they should be copied */
+	const struct x {
+		const char *key;
+		const ast_string_field *field;
+	} *i, keys[] = {
+		{ "username=", &d->username },
+		{ "realm=", &d->realm },
+		{ "nonce=", &d->nonce },
+		{ "uri=", &d->uri },
+		{ "domain=", &d->domain },
+		{ "response=", &d->response },
+		{ "cnonce=", &d->cnonce },
+		{ "opaque=", &d->opaque },
+		/* Special cases that cannot be directly copied */
+		{ "algorithm=", NULL },
+		{ "qop=", NULL },
+		{ "nc=", NULL },
+		{ NULL, 0 },
+	};
+
 	if (ast_strlen_zero(digest) || !d || !str) {
 		ast_free(str);
 		return -1;
@@ -2010,73 +2029,56 @@
 	c += strlen("Digest ");
 
 	/* lookup for keys/value pair */
-	while (*c && *(c = ast_skip_blanks(c))) {
+	while (c && *c && *(c = ast_skip_blanks(c))) {
 		/* find key */
-		i = 0;
-		while (*c && *c != '=' && *c != ',' && !isspace(*c)) {
-			key[i++] = *c++;
-		}
-		key[i] = '\0';
-		c = ast_skip_blanks(c);
-		if (*c == '=') {
-			c = ast_skip_blanks(++c);
-			i = 0;
-			if (*c == '\"') {
-				/* in quotes. Skip first and look for last */
-				c++;
-				while (*c && *c != '\"') {
-					if (*c == '\\' && c[1] != '\0') { /* unescape chars */
-						c++;
+		for (i = keys; i->key != NULL; i++) {
+			char *src, *separator;
+			int unescape = 0;
+			if (strncasecmp(c, i->key, strlen(i->key)) != 0) {
+				continue;
+			}
+
+			/* Found. Skip keyword, take text in quotes or up to the separator. */
+			c += strlen(i->key);
+			if (*c == '"') {
+				src = ++c;
+				separator = "\"";
+				unescape = 1;
+			} else {
+				src = c;
+				separator = ",";
+			}
+			strsep(&c, separator); /* clear separator and move ptr */
+			if (unescape) {
+				ast_unescape_c(src);
+			}
+			if (i->field) {
+				ast_string_field_ptr_set(d, i->field, src);
+			} else {
+				/* Special cases that require additional procesing */
+				if (!strcasecmp(i->key, "algorithm=")) {
+					if (strcasecmp(src, "MD5")) {
+						ast_log(LOG_WARNING, "Digest algorithm: \"%s\" not supported.\n", src);
+						ast_free(str);
+						return -1;
 					}
-					val[i++] = *c++;
+				} else if (!strcasecmp(i->key, "qop=") && !strcasecmp(src, "auth")) {
+					d->qop = 1;
+				} else if (!strcasecmp(i->key, "nc=")) {
+					unsigned long u;
+					if (sscanf(src, "%30lx", &u) != 1) {
+						ast_log(LOG_WARNING, "Incorrect Digest nc value: \"%s\".\n", src);
+						ast_free(str);
+						return -1;
+					}
+					ast_string_field_set(d, nc, src);
 				}
-			} else {
-				/* token */
-				while (*c && *c != ',' && !isspace(*c)) {
-					val[i++] = *c++;
-				}
 			}
-			val[i] = '\0';
+			break;
 		}
-
-		while (*c && *c != ',') {
-			c++;
+		if (i->key == NULL) { /* not found, try ',' */
+			strsep(&c, ",");
 		}
-		if (*c) {
-			c++;
-		}
-
-		if (!strcasecmp(key, "username")) {
-			ast_string_field_set(d, username, val);
-		} else if (!strcasecmp(key, "realm")) {
-			ast_string_field_set(d, realm, val);
-		} else if (!strcasecmp(key, "nonce")) {
-			ast_string_field_set(d, nonce, val);
-		} else if (!strcasecmp(key, "uri")) {
-			ast_string_field_set(d, uri, val);
-		} else if (!strcasecmp(key, "domain")) {
-			ast_string_field_set(d, domain, val);
-		} else if (!strcasecmp(key, "response")) {
-			ast_string_field_set(d, response, val);
-		} else if (!strcasecmp(key, "algorithm")) {
-			if (strcasecmp(val, "MD5")) {
-				ast_log(LOG_WARNING, "Digest algorithm: \"%s\" not supported.\n", val);
-				return -1;
-			}
-		} else if (!strcasecmp(key, "cnonce")) {
-			ast_string_field_set(d, cnonce, val);
-		} else if (!strcasecmp(key, "opaque")) {
-			ast_string_field_set(d, opaque, val);
-		} else if (!strcasecmp(key, "qop") && !strcasecmp(val, "auth")) {
-			d->qop = 1;
-		} else if (!strcasecmp(key, "nc")) {
-			unsigned long u;
-			if (sscanf(val, "%30lx", &u) != 1) {
-				ast_log(LOG_WARNING, "Incorrect Digest nc value: \"%s\".\n", val);
-				return -1;
-			}
-			ast_string_field_set(d, nc, val);
-		}
 	}
 	ast_free(str);
 

Property changes on: .
___________________________________________________________________
Modified: branch-1.8-merged
   - /branches/1.8:1-279056,279113,279227,279273,279280,279314,279390,279410,279442,279472,279502,279504,279562,279566,279568,279598,279601,279619,279636-279815,279817,279850,279887,279916,279949,279953,280023,280058,280090,280161,280195,280225,280233,280235,280269,280302,280307,280343,280346,280391,280414,280446,280450,280519,280549,280552,280557,280624,280628,280672,280740,280742,280777-280778,280809,280879,280909,280984,281052,281085,281294,281325,281356,281358,281429,281432,281466,281529,281532,281568,281575,281650,281687,281723,281760,281764,281870,281874-281875,281913,281982,282015,282047,282066,282098,282131,282200-282201,282236,282269,282271,282302,282334,282366,282468,282470,282543,282545,282577,282608,282638-282639,282671-282672,282740,282826,282860,282891,282895,282979,283013,283050,283173,283175,283177,283207,283209,283230,283241,283319,283350,283382,283457,283493,283527,283559,283561,283595,283627,283629,283659,283692,283770,283882,283951,284032,284065,284096,284127,284158,284281,284318,284415,284473,284477,284561,284597,284610,284632,284666,284696,284698,284701,284705,284779-284780,284849-284850,284852,284921,284950,284952,284967,285006,285017,285057,285090,285161-285162,285195,285197,285268,285336,285367,285369,285371,285373,285386,285455,285484,285527,285530,285533,285564,285568,285640,285711,285745,285819,285931,285962,286112,286118,286120,286189,286270,286426,286457,286528,286558,286588,286617,286647,286682,286758,286834,286868,286904-286905,286931,287015,287017,287020,287056,287116,287120,287193,287195,287269-287271,287309,287388,287471,287559,287639,287643,287645,287647,287661,287683,287701,287757,287760,287833,287863,287893,287895,287897,287929,287931,287935,288007,288079-288080,288082,288157,288159,288194,288268,288341,288345,288418,288507,288572,288606,288638,288640,288713,288748,288821,288852,288925,288927,292740-292741,292787,292794,292825,292868,292906,292969,293119,293159,293197,293305,293341,293418,293496,293530,293611,293648,293724,293803,293807,293887,293924,293970,294047,294049,294084,294125,294207,294243,294278,294313,294349,294430,294466,294501,294535,294569,294605,294734,294740,294745,294823,294905,294911,294989,295078,295164,295201,295278,295282,295361,295404,295441,295477,295516,295670,295673,295711,295747,295866,295869,295949,296002,296084,296167,296230,296352,296354,296391,296429,296467,296534,296582,296628,296673,296787,296870,296951,296992,297075,297157-297495,297535,297607,297733,297821,297825,297909,297952,297957,297965,298051,298054,298195,298394,298478,298482,298539,298598,298685,298773,298818,298827,298960,299088,299131,299138,299248,299312,299353,299405,299449,299583,299626,299752,299794,299820,299865,299907,299948,299989,300082,300166,300214,300301,300384,300430,300433,300521,300575,300623,300714,300798,300955,301047,301090,301134,301177,301221,301263,301308,301311,301402,301446,301504,301595,301683,302462,302505,302549,302552,302555,302600,302634,302680,302713,302785,302789,302831,302834,302837,302918,302921,303009,303107,303153,303467,303549,303678,303771,303860,303907,303962,304007,304097,304150,304186,304245,304251,304339,304462,304466,304554,304638,304683,304727,304730,304774,304777,304866,304908,304950,304985,305040,305083,305603,305692,305753,305798,305838,305844,305923,306124,306127,306215,306324,306356,306575,306619,306674,306866,306962,306967,306979,306999,307065,307092,307142,307228,307273,307467,307536,307750,307793,307837,307879,307962,308010,308098,308150,308242,308288,308416,308622,308679,308723,308815,308903,308945,308991,309035,309084,309126,309170,309204,309256,309403,309445,309448,309495,309542,309585,309678,309720,309765,309808,309858,309994,310039,310088,310142,310231,310240,310287,310415,310462,310587,310636,310734,310781,310834,310902,310993,310999,311050,311141,311197,311295,311297,311342,311352,311497,311558,311612,311615,311687,311751,311799,311874,311930,312022,312117,312211,312286-312288,312461,312509,312575,312766,312866,312889,312949,313001,313048,313142,313190,313279,313366,313368-313369,313434,313517,313588,313615,313658,313700,313780,313860,314017,314067-314069,314203,314206,314251,314358,314417,314550,314628,314732,314779-314780,314959,315001,315053,315213,315259,315349,315394,315446,315452,315503,315645,315673,315765,315810,315894,316094,316193,316206,316215,316217,316224,316265,316330-316331,316334,316336,316429,316476,316617,316650,316663,316709,316831,316917-316919,317058,317104,317196,317281,317283,317336,317370,317425,317427,317429,317474,317476,317478,317480,317484,317486,317530,317584,317670,317805,317837,317865,317867,317917-317918,317967,317969,318055,318057,318142,318148,318231,318233,318282,318337,318351,318436,318499,318549-318550,318671,318720,318783,318868,318917,318919,318921,319083,319085,319142,319145,319204,319259,319365,319367,319469,319529,319552,319654,319758,319812,319866,319938,319997,320007,320057,320059,320162,320180,320237,320338,320445,320504,320560,320568,320573,320650,320716,320796,320823,320883,320947,321042,321044,321100,321155,321211,321273,321330,321333,321337,321392,321436,321511,321515,321517,321528,321537,321547,321685,321812-321813,321871,321924,321926,322069,322189,322322,322425,322484,322749,322807,322865,322923,322981,323040,323154,323213,323370-323371,323392-323394,323456,323608,323610,323669-323670,323672,323754,323859,323863,323866,323932,323990,324048,324115,324174,324176,324178,324237,324241,324364,324479,324481,324484,324491,324557,324652,324678,324685,324768,324849,324914,324955,325091,325152,325212,325339,325416,325537,325545,325610,325614,325673,325740,325821,325877,325935,326144,326209,326291,326411,326484,326681,326683,326689,326830,326985,327044,327046,327106,327211,327411,327512,327682,327793,327852,327888,327890,327950,328014,328205,328209,328302,328427,328540,328593,328608,328663,328716,328770,328823,328878,328935,328987,329027,329144,329199,329203,329299,329333,329471,329527,329529,329613,329709,329767,329895,329991,329994,330050,330107,330203,330213,330311,330368,330433,330575,330578,330581,330648,330705,330762,330827,330843,331038,331142,331146,331248,331315,331461,331517,331575,331578,331635,331649,331658,331714,331771,331774,331867,331886,331955,332021,332026,332100,332118,332176,332264,332320,332355,332446,332503,332559,332699,332759,332816-332817,332874,332876,332939,333010,333201,333265,333267,333339,333378,333569,333630,333784-333785,333836,333947,334006,334009,334012,334156,334229,334234,334296,334355,334453,334616,334620,334682,334840,334843,334953,335064,335319,335341,335433,335497,335618,335655,335720,335790,335851,335911,335978,336093,336166,336234,336294,336312,336314,336378,336440,336499,336501,336569,336572,336658,336716,336733,336791,336877,336977,337007,337061,337115,337118,337325,337344,337353,337430,337486,337541,337720,337774,337839,337898,337973,338084,338224,338227,338235,338322,338416,338492,338551,338555,338663,338718,338800,339086-339087,339144,339147,339244,339297,339352,339406,339504-339506,339511,339566,339625,339719,339776,339830,339884,339938,340108,340164,340263,340279,340284,340365,340418,340470,340522,340534,340576,340662,340715,340809,340863,340878,340970,341022,341074,341088,341108-341112,341189,341254,341312,341314,341366,341379,341435,341529,341664,341704,341717,341806,341809,342061,342223,342276,342328,342380,342383,342435,342484,342487,342545,342602,342661,342769,342869,342927,342990,343047,343102,343157,343181,343220,343276,343281,343336,343375,343577,343621,343637,343690,343791,343851,343936,344048,344102,344157-344158,344215,344268,344330,344385,344439,344536,344539,344608,344661,344715,344769,344823,344835,344837,344843,344899,344965,345062-345063,345160,345163,345219,345273,345285,345370,345431,345487,345546,345682,345828-345829,345923,345976,346030,346086,346144,346147,346239,346292,346472,346564,346697,346700,346762,346899,346951,346954,347006,347058,347111,347131,347166,347239,347292,347369,347438,347531,347595,347718,347811,347995,348101,348154,348157,348212,348310,348362,348401,348464,348516,348647,348735,348833,348888,348940,348992,349044,349144,349194,349289,349339,349450,349482,349504,349529,349558,349672,349728,349731,349819,349872,349968,350023,350679,350730,350733,350736,350788-350789,350837,350885,350888,350975,351027,351080,351130,351182,351233,351284,351287,351306,351396,351450,351504,351559,351611,351618,351707,351759,351858,351860,352014,352016,352029,352090,352144,352199,352230,352291,352367,352424,352511,352514,352551,352612,352643,352704,352755,352807,352862,352955,352959,353077,353126,353175,353260,353320,353368,353371,353454,353502,353550,353598,353720,353769-353770,353867,353915,353999,354116,354216,354263,354348,354492,354495,354542,354545,354547,354655,354702,354749,354835,354889,354953,355009,355056,355136,355182,355228,355268,355319,355365,355448,355458,355529,355574,355608,355622,355732,355746,355793,355850,355901,355904,355949,355952,355997,356107,356214,356290-356337,356430,356475,356521,356604,356650,356677,356797,356917,356963,357093,357212,357266,357352,357356,357386,357407,357416,357455,357490,357575,357665,357761,357809,357811,357894,357940,357986,358011,358029,358115,358162,358214,358260,358278,358377,358435,358438,358484,358530,358643,358810,358859,358943,358978,359050,359053,359056,359059,359069,359088,359110,359116,359157,359211,359259,359344,359356,359451-359452,359457,359486,359508,359558,359609,359656
   + /branches/1.8:1-279056,279113,279227,279273,279280,279314,279390,279410,279442,279472,279502,279504,279562,279566,279568,279598,279601,279619,279636-279815,279817,279850,279887,279916,279949,279953,280023,280058,280090,280161,280195,280225,280233,280235,280269,280302,280307,280343,280346,280391,280414,280446,280450,280519,280549,280552,280557,280624,280628,280672,280740,280742,280777-280778,280809,280879,280909,280984,281052,281085,281294,281325,281356,281358,281429,281432,281466,281529,281532,281568,281575,281650,281687,281723,281760,281764,281870,281874-281875,281913,281982,282015,282047,282066,282098,282131,282200-282201,282236,282269,282271,282302,282334,282366,282468,282470,282543,282545,282577,282608,282638-282639,282671-282672,282740,282826,282860,282891,282895,282979,283013,283050,283173,283175,283177,283207,283209,283230,283241,283319,283350,283382,283457,283493,283527,283559,283561,283595,283627,283629,283659,283692,283770,283882,283951,284032,284065,284096,284127,284158,284281,284318,284415,284473,284477,284561,284597,284610,284632,284666,284696,284698,284701,284705,284779-284780,284849-284850,284852,284921,284950,284952,284967,285006,285017,285057,285090,285161-285162,285195,285197,285268,285336,285367,285369,285371,285373,285386,285455,285484,285527,285530,285533,285564,285568,285640,285711,285745,285819,285931,285962,286112,286118,286120,286189,286270,286426,286457,286528,286558,286588,286617,286647,286682,286758,286834,286868,286904-286905,286931,287015,287017,287020,287056,287116,287120,287193,287195,287269-287271,287309,287388,287471,287559,287639,287643,287645,287647,287661,287683,287701,287757,287760,287833,287863,287893,287895,287897,287929,287931,287935,288007,288079-288080,288082,288157,288159,288194,288268,288341,288345,288418,288507,288572,288606,288638,288640,288713,288748,288821,288852,288925,288927,292740-292741,292787,292794,292825,292868,292906,292969,293119,293159,293197,293305,293341,293418,293496,293530,293611,293648,293724,293803,293807,293887,293924,293970,294047,294049,294084,294125,294207,294243,294278,294313,294349,294430,294466,294501,294535,294569,294605,294734,294740,294745,294823,294905,294911,294989,295078,295164,295201,295278,295282,295361,295404,295441,295477,295516,295670,295673,295711,295747,295866,295869,295949,296002,296084,296167,296230,296352,296354,296391,296429,296467,296534,296582,296628,296673,296787,296870,296951,296992,297075,297157-297495,297535,297607,297733,297821,297825,297909,297952,297957,297965,298051,298054,298195,298394,298478,298482,298539,298598,298685,298773,298818,298827,298960,299088,299131,299138,299248,299312,299353,299405,299449,299583,299626,299752,299794,299820,299865,299907,299948,299989,300082,300166,300214,300301,300384,300430,300433,300521,300575,300623,300714,300798,300955,301047,301090,301134,301177,301221,301263,301308,301311,301402,301446,301504,301595,301683,302462,302505,302549,302552,302555,302600,302634,302680,302713,302785,302789,302831,302834,302837,302918,302921,303009,303107,303153,303467,303549,303678,303771,303860,303907,303962,304007,304097,304150,304186,304245,304251,304339,304462,304466,304554,304638,304683,304727,304730,304774,304777,304866,304908,304950,304985,305040,305083,305603,305692,305753,305798,305838,305844,305923,306124,306127,306215,306324,306356,306575,306619,306674,306866,306962,306967,306979,306999,307065,307092,307142,307228,307273,307467,307536,307750,307793,307837,307879,307962,308010,308098,308150,308242,308288,308416,308622,308679,308723,308815,308903,308945,308991,309035,309084,309126,309170,309204,309256,309403,309445,309448,309495,309542,309585,309678,309720,309765,309808,309858,309994,310039,310088,310142,310231,310240,310287,310415,310462,310587,310636,310734,310781,310834,310902,310993,310999,311050,311141,311197,311295,311297,311342,311352,311497,311558,311612,311615,311687,311751,311799,311874,311930,312022,312117,312211,312286-312288,312461,312509,312575,312766,312866,312889,312949,313001,313048,313142,313190,313279,313366,313368-313369,313434,313517,313588,313615,313658,313700,313780,313860,314017,314067-314069,314203,314206,314251,314358,314417,314550,314628,314732,314779-314780,314959,315001,315053,315213,315259,315349,315394,315446,315452,315503,315645,315673,315765,315810,315894,316094,316193,316206,316215,316217,316224,316265,316330-316331,316334,316336,316429,316476,316617,316650,316663,316709,316831,316917-316919,317058,317104,317196,317281,317283,317336,317370,317425,317427,317429,317474,317476,317478,317480,317484,317486,317530,317584,317670,317805,317837,317865,317867,317917-317918,317967,317969,318055,318057,318142,318148,318231,318233,318282,318337,318351,318436,318499,318549-318550,318671,318720,318783,318868,318917,318919,318921,319083,319085,319142,319145,319204,319259,319365,319367,319469,319529,319552,319654,319758,319812,319866,319938,319997,320007,320057,320059,320162,320180,320237,320338,320445,320504,320560,320568,320573,320650,320716,320796,320823,320883,320947,321042,321044,321100,321155,321211,321273,321330,321333,321337,321392,321436,321511,321515,321517,321528,321537,321547,321685,321812-321813,321871,321924,321926,322069,322189,322322,322425,322484,322749,322807,322865,322923,322981,323040,323154,323213,323370-323371,323392-323394,323456,323608,323610,323669-323670,323672,323754,323859,323863,323866,323932,323990,324048,324115,324174,324176,324178,324237,324241,324364,324479,324481,324484,324491,324557,324652,324678,324685,324768,324849,324914,324955,325091,325152,325212,325339,325416,325537,325545,325610,325614,325673,325740,325821,325877,325935,326144,326209,326291,326411,326484,326681,326683,326689,326830,326985,327044,327046,327106,327211,327411,327512,327682,327793,327852,327888,327890,327950,328014,328205,328209,328302,328427,328540,328593,328608,328663,328716,328770,328823,328878,328935,328987,329027,329144,329199,329203,329299,329333,329471,329527,329529,329613,329709,329767,329895,329991,329994,330050,330107,330203,330213,330311,330368,330433,330575,330578,330581,330648,330705,330762,330827,330843,331038,331142,331146,331248,331315,331461,331517,331575,331578,331635,331649,331658,331714,331771,331774,331867,331886,331955,332021,332026,332100,332118,332176,332264,332320,332355,332446,332503,332559,332699,332759,332816-332817,332874,332876,332939,333010,333201,333265,333267,333339,333378,333569,333630,333784-333785,333836,333947,334006,334009,334012,334156,334229,334234,334296,334355,334453,334616,334620,334682,334840,334843,334953,335064,335319,335341,335433,335497,335618,335655,335720,335790,335851,335911,335978,336093,336166,336234,336294,336312,336314,336378,336440,336499,336501,336569,336572,336658,336716,336733,336791,336877,336977,337007,337061,337115,337118,337325,337344,337353,337430,337486,337541,337720,337774,337839,337898,337973,338084,338224,338227,338235,338322,338416,338492,338551,338555,338663,338718,338800,339086-339087,339144,339147,339244,339297,339352,339406,339504-339506,339511,339566,339625,339719,339776,339830,339884,339938,340108,340164,340263,340279,340284,340365,340418,340470,340522,340534,340576,340662,340715,340809,340863,340878,340970,341022,341074,341088,341108-341112,341189,341254,341312,341314,341366,341379,341435,341529,341664,341704,341717,341806,341809,342061,342223,342276,342328,342380,342383,342435,342484,342487,342545,342602,342661,342769,342869,342927,342990,343047,343102,343157,343181,343220,343276,343281,343336,343375,343577,343621,343637,343690,343791,343851,343936,344048,344102,344157-344158,344215,344268,344330,344385,344439,344536,344539,344608,344661,344715,344769,344823,344835,344837,344843,344899,344965,345062-345063,345160,345163,345219,345273,345285,345370,345431,345487,345546,345682,345828-345829,345923,345976,346030,346086,346144,346147,346239,346292,346472,346564,346697,346700,346762,346899,346951,346954,347006,347058,347111,347131,347166,347239,347292,347369,347438,347531,347595,347718,347811,347995,348101,348154,348157,348212,348310,348362,348401,348464,348516,348647,348735,348833,348888,348940,348992,349044,349144,349194,349289,349339,349450,349482,349504,349529,349558,349672,349728,349731,349819,349872,349968,350023,350679,350730,350733,350736,350788-350789,350837,350885,350888,350975,351027,351080,351130,351182,351233,351284,351287,351306,351396,351450,351504,351559,351611,351618,351707,351759,351858,351860,352014,352016,352029,352090,352144,352199,352230,352291,352367,352424,352511,352514,352551,352612,352643,352704,352755,352807,352862,352955,352959,353077,353126,353175,353260,353320,353368,353371,353454,353502,353550,353598,353720,353769-353770,353867,353915,353999,354116,354216,354263,354348,354492,354495,354542,354545,354547,354655,354702,354749,354835,354889,354953,355009,355056,355136,355182,355228,355268,355319,355365,355448,355458,355529,355574,355608,355622,355732,355746,355793,355850,355901,355904,355949,355952,355997,356107,356214,356290-356337,356430,356475,356521,356604,356650,356677,356797,356917,356963,357093,357212,357266,357352,357356,357386,357407,357416,357455,357490,357575,357665,357761,357809,357811,357894,357940,357986,358011,358029,358115,358162,358214,358260,358278,358377,358435,358438,358484,358530,358643,358810,358859,358943,358978,359050,359053,359056,359059,359069,359088,359110,359116,359157,359211,359259,359344,359356,359451-359452,359457,359486,359508,359558,359609,359656,359706

