diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 4d00a05d096afdfc1122daceaa669054ff1b2974..105d447b8acef5060ab1385239c3367adc9fb123 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -839,7 +839,7 @@ static const yytype_int16 yyrhs[] =
      282,    -1,   268,    -1,   282,    -1,   268,    -1,   282,    -1,
       -1,   133,    71,   187,   268,   188,    -1,    -1,    83,   271,
       -1,    67,   180,   268,   181,     7,   271,     6,    -1,    87,
-      67,   180,   227,   181,     7,   274,     6,    -1,    76,    77,
+      67,   180,   227,   181,   212,   274,     6,    -1,    76,    77,
      274,     7,   268,     6,    -1,    70,   180,   268,   181,     7,
      274,     6,    -1,    92,    70,   274,     6,    -1,    74,   180,
      268,   181,     7,   274,     6,    -1,    68,   180,   268,   181,
@@ -849,7 +849,7 @@ static const yytype_int16 yyrhs[] =
      127,   180,   268,   181,     7,   274,   129,   274,   128,   268,
        6,    -1,    70,     4,   180,   268,   181,     7,   274,     6,
       -1,    88,    70,   180,   268,   181,     7,   274,     6,    -1,
-      87,    70,   180,   228,   181,     7,   274,     6,    -1,    83,
+      87,    70,   180,   228,   181,   212,   274,     6,    -1,    83,
       73,   180,   268,   181,     7,   274,     6,    -1,    84,    73,
      180,   268,   181,     7,   274,   231,     6,    -1,    12,    13,
        6,    -1,    13,    73,   268,     6,    -1,    78,    73,   180,
@@ -859,10 +859,10 @@ static const yytype_int16 yyrhs[] =
      274,     6,    -1,    88,    73,   180,   268,   181,     7,   274,
        6,    -1,    88,    73,   180,   268,   181,     7,   274,     4,
      187,   273,   188,     6,    -1,    87,    73,   180,   229,   181,
-       7,   274,     6,    -1,    86,    75,   180,   268,   181,     7,
+     212,   274,     6,    -1,    86,    75,   180,   268,   181,     7,
      274,     6,    -1,    75,   180,   268,   181,     7,   274,     6,
       -1,    88,    75,   180,   268,   181,     7,   274,     6,    -1,
-      87,    75,   180,   230,   181,     7,   274,     6,    -1,    95,
+      87,    75,   180,   230,   181,   212,   274,     6,    -1,    95,
      271,   187,   235,   188,    -1,    94,   187,   271,   186,   271,
      186,   268,   188,   187,   235,   188,    -1,    96,   271,   187,
      235,   188,    -1,    97,   187,   271,   186,   268,   188,   187,
@@ -1066,42 +1066,42 @@ static const yytype_uint16 yyrline[] =
     1090,  1104,  1104,  1106,  1108,  1117,  1127,  1126,  1138,  1148,
     1147,  1161,  1163,  1171,  1177,  1184,  1185,  1189,  1200,  1215,
     1225,  1226,  1231,  1239,  1248,  1266,  1270,  1279,  1283,  1292,
-    1296,  1305,  1309,  1319,  1322,  1335,  1338,  1348,  1371,  1387,
-    1410,  1428,  1449,  1467,  1497,  1527,  1545,  1563,  1590,  1608,
-    1626,  1645,  1663,  1702,  1708,  1714,  1721,  1746,  1771,  1788,
-    1807,  1841,  1861,  1879,  1896,  1912,  1933,  1938,  1943,  1948,
-    1953,  1958,  1981,  1987,  1998,  1999,  2004,  2007,  2011,  2034,
-    2057,  2080,  2108,  2129,  2155,  2176,  2198,  2218,  2330,  2349,
-    2387,  2496,  2505,  2511,  2526,  2554,  2571,  2580,  2594,  2600,
-    2606,  2615,  2624,  2633,  2647,  2703,  2721,  2738,  2753,  2772,
-    2784,  2808,  2812,  2817,  2824,  2830,  2835,  2841,  2849,  2853,
-    2857,  2862,  2917,  2930,  2947,  2964,  2985,  3006,  3041,  3049,
-    3055,  3062,  3066,  3075,  3083,  3091,  3100,  3099,  3114,  3113,
-    3128,  3127,  3142,  3141,  3155,  3162,  3169,  3176,  3183,  3190,
-    3197,  3204,  3211,  3219,  3218,  3232,  3231,  3245,  3244,  3258,
-    3257,  3271,  3270,  3284,  3283,  3297,  3296,  3310,  3309,  3323,
-    3322,  3339,  3342,  3348,  3360,  3380,  3404,  3408,  3412,  3416,
-    3420,  3426,  3432,  3436,  3440,  3444,  3448,  3467,  3480,  3483,
-    3499,  3502,  3519,  3522,  3528,  3531,  3538,  3541,  3548,  3604,
-    3674,  3679,  3746,  3782,  3790,  3833,  3872,  3892,  3919,  3968,
-    3996,  4024,  4028,  4032,  4060,  4099,  4138,  4159,  4180,  4207,
-    4211,  4221,  4256,  4257,  4258,  4262,  4268,  4280,  4298,  4326,
-    4327,  4328,  4329,  4330,  4331,  4332,  4333,  4334,  4341,  4342,
-    4343,  4344,  4345,  4346,  4347,  4348,  4349,  4350,  4351,  4352,
-    4353,  4354,  4355,  4356,  4357,  4358,  4359,  4360,  4361,  4362,
-    4363,  4364,  4365,  4366,  4367,  4368,  4369,  4370,  4371,  4372,
-    4373,  4382,  4383,  4384,  4385,  4386,  4387,  4388,  4389,  4390,
-    4391,  4396,  4395,  4403,  4420,  4438,  4456,  4461,  4467,  4479,
-    4496,  4514,  4535,  4540,  4545,  4555,  4565,  4570,  4579,  4584,
-    4611,  4615,  4619,  4623,  4627,  4634,  4638,  4642,  4646,  4653,
-    4658,  4665,  4670,  4674,  4679,  4683,  4691,  4702,  4706,  4718,
-    4726,  4734,  4741,  4751,  4780,  4784,  4788,  4792,  4796,  4800,
-    4804,  4808,  4812,  4841,  4870,  4899,  4928,  4941,  4954,  4967,
-    4980,  4990,  5000,  5012,  5024,  5036,  5054,  5075,  5080,  5084,
-    5088,  5100,  5104,  5116,  5123,  5133,  5137,  5152,  5157,  5164,
-    5168,  5181,  5189,  5200,  5204,  5212,  5218,  5226,  5234,  5249,
-    5263,  5277,  5289,  5305,  5316,  5320,  5339,  5347,  5346,  5359,
-    5364,  5370,  5379,  5392,  5395
+    1296,  1305,  1309,  1319,  1322,  1335,  1338,  1348,  1371,  1403,
+    1426,  1444,  1465,  1483,  1513,  1543,  1561,  1579,  1606,  1624,
+    1642,  1677,  1695,  1734,  1740,  1746,  1753,  1778,  1803,  1820,
+    1839,  1873,  1909,  1927,  1944,  1960,  1997,  2002,  2007,  2012,
+    2017,  2022,  2045,  2051,  2062,  2063,  2068,  2071,  2075,  2098,
+    2121,  2144,  2172,  2193,  2219,  2240,  2262,  2282,  2394,  2413,
+    2451,  2560,  2569,  2575,  2590,  2618,  2635,  2644,  2658,  2664,
+    2670,  2679,  2688,  2697,  2711,  2767,  2785,  2802,  2817,  2836,
+    2848,  2872,  2876,  2881,  2888,  2894,  2899,  2905,  2913,  2917,
+    2921,  2926,  2981,  2994,  3011,  3028,  3049,  3070,  3105,  3113,
+    3119,  3126,  3130,  3139,  3147,  3155,  3164,  3163,  3178,  3177,
+    3192,  3191,  3206,  3205,  3219,  3226,  3233,  3240,  3247,  3254,
+    3261,  3268,  3275,  3283,  3282,  3296,  3295,  3309,  3308,  3322,
+    3321,  3335,  3334,  3348,  3347,  3361,  3360,  3374,  3373,  3387,
+    3386,  3403,  3406,  3412,  3424,  3444,  3468,  3472,  3476,  3480,
+    3484,  3490,  3496,  3500,  3504,  3508,  3512,  3531,  3544,  3547,
+    3563,  3566,  3583,  3586,  3592,  3595,  3602,  3605,  3612,  3668,
+    3738,  3743,  3810,  3846,  3854,  3897,  3936,  3956,  3983,  4032,
+    4060,  4088,  4092,  4096,  4124,  4163,  4202,  4223,  4244,  4271,
+    4275,  4285,  4320,  4321,  4322,  4326,  4332,  4344,  4362,  4390,
+    4391,  4392,  4393,  4394,  4395,  4396,  4397,  4398,  4405,  4406,
+    4407,  4408,  4409,  4410,  4411,  4412,  4413,  4414,  4415,  4416,
+    4417,  4418,  4419,  4420,  4421,  4422,  4423,  4424,  4425,  4426,
+    4427,  4428,  4429,  4430,  4431,  4432,  4433,  4434,  4435,  4436,
+    4437,  4446,  4447,  4448,  4449,  4450,  4451,  4452,  4453,  4454,
+    4455,  4460,  4459,  4467,  4484,  4502,  4520,  4525,  4531,  4543,
+    4560,  4578,  4599,  4604,  4609,  4619,  4629,  4634,  4643,  4648,
+    4675,  4679,  4683,  4687,  4691,  4698,  4702,  4706,  4710,  4717,
+    4722,  4729,  4734,  4738,  4743,  4747,  4755,  4766,  4770,  4782,
+    4790,  4798,  4805,  4815,  4844,  4848,  4852,  4856,  4860,  4864,
+    4868,  4872,  4876,  4905,  4934,  4963,  4992,  5005,  5018,  5031,
+    5044,  5054,  5064,  5076,  5088,  5100,  5118,  5139,  5144,  5148,
+    5152,  5164,  5168,  5180,  5187,  5197,  5201,  5216,  5221,  5228,
+    5232,  5245,  5253,  5264,  5268,  5276,  5282,  5290,  5298,  5313,
+    5327,  5341,  5353,  5369,  5380,  5384,  5403,  5411,  5410,  5423,
+    5428,  5434,  5443,  5456,  5459
 };
 #endif
 
@@ -1503,174 +1503,174 @@ static const yytype_int16 yypact[] =
 {
     5908,    75,    26,  6024, -1250, -1250,  3187,    34,    71,   -66,
      -61,    42,   156,   178,   245,    82,   261,   293,   136,   171,
-    -116,   110,   159,     3,   188,   194,    19,   198,   222,   330,
-     361,   401,   454,   366,   535,   414,   477,   396,   496,   345,
-     479,   -36,   424,   603,   -22,   452,   -64,   -64,   481,   297,
-     239,    85,   601,   615,    14,    16,   627,   606,   168,   701,
-     706,   714,  3919,   720,   529,   551,   583,    27,    -1, -1250,
-     597, -1250,   742,   777,   617, -1250,   783,   790,     9,    30,
+    -116,   110,   159,     3,   188,   194,    19,   198,   222,   357,
+     334,   387,   468,   317,   480,   439,   446,   396,   474,   345,
+     566,   -36,   316,   482,   -22,   418,   -64,   -64,   481,   297,
+     239,    85,   535,   546,    14,    16,   609,   611,   168,   684,
+     693,   715,  3919,   724,   529,   551,   583,    27,    -1, -1250,
+     597, -1250,   742,   777,   605, -1250,   787,   793,     9,    30,
    -1250, -1250, -1250,  5762, -1250, -1250, -1250, -1250, -1250, -1250,
    -1250, -1250, -1250, -1250, -1250, -1250, -1250, -1250, -1250,    43,
    -1250,  -128,   106, -1250,     5, -1250, -1250, -1250, -1250,   -91,
      -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,
      -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,   -91,
-     -91,   -91,   -91,   -91,   622,   629,   645,   660,   671,   -91,
-     679, -1250,   -91, -1250, -1250, -1250, -1250,   -91,   -91,   806,
-     683,   702,   707,   708,   716, -1250, -1250, -1250,  5762,  5762,
-    5762,  5762,  2348,    15,   783,   309,   717,   743,   459, -1250,
-     748,   894,   -72,  -121,   930,  5762,  1107,  1107, -1250,  5762,
+     -91,   -91,   -91,   -91,   622,   629,   633,   645,   656,   -91,
+     668, -1250,   -91, -1250, -1250, -1250, -1250,   -91,   -91,   852,
+     683,   702,   716,   720,   750, -1250, -1250, -1250,  5762,  5762,
+    5762,  5762,  2348,    15,   787,   309,   748,   749,   459, -1250,
+     752,   898,   -72,  -121,   947,  5762,  1107,  1107, -1250,  5762,
    -1250, -1250, -1250,  1107, -1250, -1250, -1250, -1250,  5762,  5537,
-    5762,  5762,   759,  5762,  5537,  5762,  5762,   773,  5537,  5762,
-    5762,  4578,   792,   770, -1250,  5537,  3919,  3919,  3919,   802,
-     841,  3919,  3919,  3919,   846,   849,   850,   852,   853,   854,
-     855,   856,  4578,  5762,  1034,  4578,    27,   859,   862,   -64,
-     -64,   -64,  5762,  5762,   -94, -1250,   -75,   -64,   865,   867,
-     868,  3120,   -67,   221,   860,   877,   878,  3919,  3919,  4578,
-     880,    49,   881, -1250,  1036, -1250,   887,   888,   889,  3919,
-    3919,   882,   883,   895,   462, -1250,   896,    37,    31,    80,
-     104,   426,  4757,  5762,  3554, -1250, -1250,  2925, -1250,  1079,
-   -1250,    98,   108,  1080,  5762,  5762,  5762,   906,  5762,   904,
-     961,  5762,  5762, -1250, -1250,  5762,   907,   908,  1092, -1250,
-    1093, -1250,  1095, -1250,   -30,   491, -1250,  4578,  4578, -1250,
-    5710,   915,   918,  1156, -1250, -1250, -1250, -1250, -1250, -1250,
-    4578,  1102,   928,  5762,  1109, -1250,  5762,  5762,  5762,  5762,
+    5762,  5762,   792,  5762,  5537,  5762,  5762,   802,  5537,  5762,
+    5762,  4578,   836,   770, -1250,  5537,  3919,  3919,  3919,   837,
+     839,  3919,  3919,  3919,   840,   841,   842,   845,   846,   847,
+     849,   850,  4578,  5762,  1010,  4578,    27,   848,   851,   -64,
+     -64,   -64,  5762,  5762,   -94, -1250,   -75,   -64,   853,   855,
+     859,  3120,   -67,   221,   854,   856,   869,  3919,  3919,  4578,
+     872,    49,   873, -1250,  1026, -1250,   867,   870,   871,  3919,
+    3919,   878,   881,   882,   462, -1250,   883,    37,    31,    80,
+     104,   607,  4757,  5762,  3554, -1250, -1250,  2925, -1250,  1027,
+   -1250,    98,   108,  1068,  5762,  5762,  5762,   891,  5762,   889,
+     944,  5762,  5762, -1250, -1250,  5762,   896,   897,  1072, -1250,
+    1084, -1250,  1085, -1250,   -30,   491, -1250,  4578,  4578, -1250,
+    5710,   907,   909,  1156, -1250, -1250, -1250, -1250, -1250, -1250,
+    4578,  1091,   916,  5762,  1095, -1250,  5762,  5762,  5762,  5762,
     5762,  5762,  5762,  5762,  5762,  5762,  5762,  5762,  5762,  5762,
     5762,  5762,  5762,  5762,  5762,  5762,  5762,  5762,  1107,  1107,
     1107,  1107,  1107,  1107,  1107,  1107,  5762,  1107,  1107,  5762,
-    1156,  5762,  1107,  1107,  1107,   783,  1156,   936,   936,   936,
-    8443,    18,  8098,   117,   932,  1111,   937,   933, -1250,   938,
+    1156,  5762,  1107,  1107,  1107,   787,  1156,   922,   922,   922,
+    8443,    18,  8098,   117,   918,  1098,   926,   923, -1250,   925,
     4796,  5762,  5537, -1250,  5762,  5762,  5762,  5762,  5762,  5762,
     5762,  5762,  5762,  5762,  5762,  5762,  5762,  5762,  5762, -1250,
    -1250,  5762, -1250, -1250,   705,   291,    61, -1250, -1250,   157,
     6879, -1250,   196,   -86,   -68,  8464,  5537,  3148, -1250,   128,
-    8485,  8506,  5762,  8527,   300,  8548,  8569,  5762,   331,  8590,
-    8611,  1114,  5762,  5762,   384,  1119,  1121,  1130,  5762,  5762,
-    1131,  1132,  1132,  5762,  5473,  5473,  5473,  5473,  5762,  5762,
-    5762,  1134,  6799,   956,  1136,   957, -1250, -1250,   121, -1250,
+    8485,  8506,  5762,  8527,   300,  8548,  8569,  5762,   353,  8590,
+    8611,  1108,  5762,  5762,   376,  1110,  1112,  1113,  5762,  5762,
+    1114,  1118,  1118,  5762,  5473,  5473,  5473,  5473,  5762,  5762,
+    5762,  1119,  6799,   939,  1121,   949, -1250, -1250,   121, -1250,
    -1250,  6905,  6931,   -64,   -64,   309,   309,   126,  5762,  5762,
     5762,  3120,  3120,  5762,  4796,   170, -1250,  5762,  5762,  5762,
-    5762,  5762,  1138,  1137,  1145,  5762,  1147, -1250,  5762,  5762,
-    1263, -1250,  5537,  5537,  5537,  1152,  1157,  5762,  5762,  5762,
-    5762,  1160,   182,   783, -1250,  1116,  5762, -1250,  1117, -1250,
-    1120, -1250,  1122,    38,    39,    40,    41,  5537,   936, -1250,
-    8632, -1250,   409,  5762,  4936, -1250,  5762,   358, -1250,  8653,
-    8674,  8695,  1038,  6957, -1250,   983,  3499,  8716,  8121, -1250,
-   -1250,  1391, -1250,  1517,  5762, -1250,   991,   507,    18,  8144,
-    5762,  5537,  1168,  1169, -1250,  5762,  8167,    81,  8075,  8075,
+    5762,  5762,  1130,  1132,  1134,  5762,  1136, -1250,  5762,  5762,
+    1263, -1250,  5537,  5537,  5537,  1137,  1138,  5762,  5762,  5762,
+    5762,  1135,   182,   787, -1250,  1096,  5762, -1250,  1103, -1250,
+    1104, -1250,  1109,    38,    39,    40,    41,  5537,   922, -1250,
+    8632, -1250,   385,  5762,  4936, -1250,  5762,   330, -1250,  8653,
+    8674,  8695,  1033,  6957, -1250,   977,  3499,  8716,  8121, -1250,
+   -1250,  1391, -1250,  1517,  5762, -1250,   984,   409,    18,  8144,
+    5762,  5537,  1160,  1162, -1250,  5762,  8167,    81,  8075,  8075,
     8075,  8075,  8075,  8075,  8075,  8075,  8075,  8075,  8075,  6983,
     8075,  8075,  8075,  8075,  8075,  8075,  8075,  7009,  7035,  7061,
-     494,   501,   494,   995,   997,   993,   994,   999,  7087,   235,
-     546,  9157, -1250,   744,  1002,  1008,  1004,  1010,  1013,    18,
-   -1250,  4578,    95,  1156,  5762,  1177,  1197,    28,  1022, -1250,
-     325,    20,    29,   326, -1250,  4368,   549,  3523,  1731,  2790,
-     662,   662,   440,   440,   440,   440,   270,   270,   936,   936,
-     936,   936,    46,  8190, -1250,  5762,  1203,    21,  5537,  1204,
-    5537,  5762,  1207,  1107,  1208, -1250,   783,  1209,  1107,  1212,
-    5537,  5537,  1083,  1213,  1214,  8737,  1218,  1099,  1219,  1227,
-    8758,  1105,  1228,  1232,  5762,  8779,  5498,  1057, -1250, -1250,
-   -1250,  8800,  8821,  5762,  4578,  1241,  1240,  8842,  1070,  9157,
-   -1250,  1081,  9157, -1250,  1082,  9157, -1250,  1084,  9157, -1250,
-    8863,  8884,  8905,  4578,  5537,  1076, -1250, -1250,  2014,  2472,
-     -64,  5762,  5762, -1250, -1250,  1073,  1078,  3120,  7113,  7139,
-    7165,  6853,   598,   -64,  2765,  8926,  5668,  8947,  8968,  8989,
-    5762,  1258, -1250,  5762,  9010, -1250,  8213,  8236, -1250,   554,
-     558,   568, -1250, -1250,  8259,  8282,  7191,  8305,   108, -1250,
-   -1250,  5537, -1250,  1086,  1085,  6015,  1090,  1091,  1096, -1250,
-    5537, -1250,  5537, -1250,  5537, -1250,  5537,   569, -1250, -1250,
-    4126,  5537,   936, -1250,  5537, -1250,  1260,  1264,  1266,  1098,
-    5762,  3413,  5762,  5762, -1250,    51, -1250, -1250,  1100,  4578,
-    1273,  4578,   143,  6043,   574, -1250, -1250,  8328,  1040, -1250,
+     512,   518,   512,   988,   989,   985,   986,   990,  7087,   235,
+     423,  9157, -1250,   744,   992,   993,   994,   998,  1002,    18,
+   -1250,  4578,    95,  1156,  5762,  1169,  1181,    28,  1005, -1250,
+     318,    20,    29,   319, -1250,  4368,   487,  3523,  1731,  2790,
+    1368,  1368,   440,   440,   440,   440,   270,   270,   922,   922,
+     922,   922,    46,  8190, -1250,  5762,  1185,    21,  5537,  1184,
+    5537,  5762,  1188,  1107,  1195, -1250,   787,  1199,  1107,  1200,
+    5537,  5537,  1058,  1203,  1206,  8737,  1207,  1082,  1209,  1212,
+    8758,  1087,  1214,  1218,  5762,  8779,  5498,  1039, -1250, -1250,
+   -1250,  8800,  8821,  5762,  4578,  1228,  1229,  8842,  1053,  9157,
+   -1250,  1057,  9157, -1250,  1063,  9157, -1250,  1064,  9157, -1250,
+    8863,  8884,  8905,  4578,  5537,  1055, -1250, -1250,  2014,  2472,
+     -64,  5762,  5762, -1250, -1250,  1073,  1074,  3120,  7113,  7139,
+    7165,  6853,   393,   -64,  2765,  8926,  5668,  8947,  8968,  8989,
+    5762,  1240, -1250,  5762,  9010, -1250,  8213,  8236, -1250,   499,
+     520,   536, -1250, -1250,  8259,  8282,  7191,  8305,   108, -1250,
+   -1250,  5537, -1250,  1077,  1076,  6015,  1078,  1079,  1080, -1250,
+    5537, -1250,  5537, -1250,  5537, -1250,  5537,   537, -1250, -1250,
+    4126,  5537,   922, -1250,  5537, -1250,  1244,  1257,  1262,  1086,
+    5762,  3413,  5762,  5762, -1250,    51, -1250, -1250,  1090,  4578,
+    1265,  4578,   143,  6043,   541, -1250, -1250,  8328,  1040, -1250,
    -1250, -1250, -1250, -1250, -1250, -1250, -1250, -1250, -1250, -1250,
    -1250,  5762, -1250, -1250, -1250, -1250, -1250, -1250, -1250,  5762,
     5762,  5762, -1250,  5537, -1250, -1250, -1250, -1250,  1107,  1107,
     1107,  1156, -1250, -1250, -1250, -1250, -1250,  5762, -1250,  1107,
-   -1250, -1250,  5762,  1274,    25,  5762,  1279,  1284,   797, -1250,
-    1286,  1088,    27,  1285, -1250,  5537,  5537,  5537,  5537, -1250,
-     546,  5762, -1250,  1115,  1124,  1112, -1250,  1294, -1250, -1250,
-   -1250, -1250, -1250,   108,  8351, -1250, -1250,  1139,  1107,   420,
-   -1250,   455,  7217, -1250, -1250, -1250,  1298, -1250, -1250,   -64,
-    3148, -1250,   659,  4578,  4578,  1301,  4578,   691,  4578,  4578,
-    1302,  1226,  4578,  4578,  1252,  1304,  1305,  5537,  1308,  1309,
-    2906, -1250, -1250,  1311, -1250,  1312,  1315,  1316,  1317,  1318,
-    1319,  1320,  1322,  1334,   581,  1314,  3791, -1250, -1250,   187,
-    7243,  7269, -1250, -1250,  6071,   -83,   -64,   -64,   -64,  1338,
-    1337,  1158,  1342,  1164,    33,    54,    64,   130,  1014, -1250,
-     205, -1250,   598,  1345,  1347,  1349,  1350,  1352,  9157, -1250,
-    1588,  1167,  1354,  1355,  1357,  1291,  5762,  1359,  1360,  5762,
-     131,   582, -1250,  5762, -1250,  5762,  5762,  5762,   586,   596,
-     604,   605, -1250,  5762,   609,   612,  4578,  4578,  4578,  1365,
-    7295, -1250,  4305,   163,  1366,  1367,  4578,  1184, -1250,  1368,
-    5762,  1373, -1250,   546,  1374,  1377, -1250,  1380,  8075,  8075,
-    8075,  8075,   518,  1205,  1211,  1215,  1216,   536,   542,  9031,
-    1217,  1627, -1250,   281,  1221,  1386,  1693, -1250, -1250, -1250,
-      27,  5762, -1250,   619, -1250,   620,   626,   632,   633,    18,
-    9157,  1220,  5762,  5762,  4578,  1222, -1250, -1250,  1223, -1250,
-    1389,    66,  1395,  5762,  4098,    22,  1225,  1243,  1323,  1323,
-    4578,  1402,  1246,  1247,  1404,  1430,  4578,  1250,  1432,  1433,
-   -1250,  1435,  4578,   636,  4578,  4578,  1437,  1436, -1250,  4578,
-    4578,  4578,  4578,  4578,  4578,  4578,  4578, -1250,  1438,   504,
-   -1250,  5762,  5762,  5762,  1256,  1259,  -108,  -102,   -96,  1265,
-   -1250,  4578, -1250,  5762, -1250,  1442, -1250,  1444, -1250,  1446,
-   -1250,  1447, -1250, -1250,  3120,  1133,  4162, -1250,  1267,  1270,
-    5115, -1250,  5537, -1250, -1250, -1250,  1281,  1947, -1250, -1250,
-    8374,  1451,   546,  7321,  7347,  7373,  7399, -1250, -1250, -1250,
-   -1250,  9157, -1250,   546,  1464,  1465,  1343, -1250,  5762,  5762,
-    5762, -1250,  1467,   557,  1295,  1474, -1250,  2006, -1250,    18,
+   -1250, -1250,  5762,  1266,    25,  5762,  1267,  1272,   797, -1250,
+    1273,  1097,    27,  1276, -1250,  5537,  5537,  5537,  5537, -1250,
+     423,  5762, -1250,  1105,  1111,  1100, -1250,  1277, -1250, -1250,
+   -1250, -1250, -1250,   108,  8351, -1250, -1250,  1123,  1107,   301,
+   -1250,   377,  7217, -1250, -1250, -1250,  1286, -1250, -1250,   -64,
+    3148, -1250,   659,  4578,  4578,  1288,  4578,   662,  4578,  4578,
+    1292,  1225,  4578,  4578,  1252,  1294,  1297,  5537,  1298,  1299,
+    2906, -1250, -1250,  1302, -1250,  1304,    18,    18,    18,    18,
+    1305,  1308,  1309,  1303,   554,  1313,  3791, -1250, -1250,   187,
+    7243,  7269, -1250, -1250,  6071,   -83,   -64,   -64,   -64,  1314,
+    1316,  1139,  1317,  1144,    33,    54,    64,   130,  1014, -1250,
+     205, -1250,   393,  1312,  1319,  1320,  1322,  1333,  9157, -1250,
+    1588,  1155,  1337,  1338,  1339,  1275,  5762,  1346,  1347,  5762,
+     131,   558, -1250,  5762, -1250,  5762,  5762,  5762,   568,   569,
+     574,   578, -1250,  5762,   581,   582,  4578,  4578,  4578,  1350,
+    7295, -1250,  4305,   163,  1352,  1353,  4578,  1171, -1250,  1354,
+    5762,  1355, -1250,   423,  1357,  1360, -1250,  1359,  8075,  8075,
+    8075,  8075,   524,  1180,  1189,  1190,  1183,   531,   532,  9031,
+    1191,  1627, -1250,   281,  1196,  1367,  1693, -1250, -1250, -1250,
+      27,  5762, -1250,   586, -1250,   596,   604,   619,   620,    18,
+    9157,  1201,  5762,  5762,  4578,  1192, -1250, -1250,  1202, -1250,
+    1385,    66,  1386,  5762,  4098,    22,  1208,  1211,  1310,  1310,
+    4578,  1390,  1213,  1215,  1395,  1399,  4578,  1219,  1401,  1402,
+   -1250,  1404,  4578,   626,  4578,  4578,  1406,  1424, -1250,  4578,
+    4578,  4578,  4578,  4578,  4578,  4578,  4578, -1250,  1405,   826,
+   -1250,  5762,  5762,  5762,  1246,  1247,  -108,  -102,   -96,  1254,
+   -1250,  4578, -1250,  5762, -1250,  1431, -1250,  1432, -1250,  1433,
+   -1250,  1434, -1250, -1250,  3120,  1133,  4162, -1250,  1255,  1256,
+    5115, -1250,  5537, -1250, -1250, -1250,  1258,  1947, -1250, -1250,
+    8374,  1437,   423,  7321,  7347,  7373,  7399, -1250, -1250, -1250,
+   -1250,  9157, -1250,   423,  1440,  1441,  1321, -1250,  5762,  5762,
+    5762, -1250,  1442,   834,  1269,  1446, -1250,  2006, -1250,    18,
    -1250,    83, -1250, -1250, -1250, -1250, -1250, -1250,  1107, -1250,
-   -1250,  1156,  1478, -1250, -1250,  1480, -1250, -1250, -1250, -1250,
-   -1250,  1156,  5762,  1482,  1489,    28, -1250,  1491,  8397,    27,
-   -1250,  1494,  1498,  1500,  1501,  4578,  5762,  7425,  7451,   651,
-   -1250,  5762,  1504, -1250, -1250,  1107, -1250,  7477,  5473,  9157,
-   -1250, -1250,  5762,  5762,   -64,  1503,  1506,  1507, -1250,  5762,
-    5762, -1250, -1250,  1508,  5762, -1250, -1250,  1481,  1509,  1335,
-    1518,  1362,  5762, -1250,  1525,  1528,  1529,  1530,  1531,  1532,
-     842,  1533,  5762, -1250,  5473,  6099,  9052,  4881,   309,   309,
-     -64,  1534,   -64,  1535,   -64,  1536,  5762,   363,  1324,  9073,
-   -1250, -1250, -1250, -1250,  6127,   210, -1250,  1538,  3374,  1540,
-    4578,   -64,  3374,  1541,   661,  5762, -1250,  1544,   108, -1250,
+   -1250,  1156,  1449, -1250, -1250,  1450, -1250, -1250, -1250, -1250,
+   -1250,  1156,  5762,  1451,  1464,    28, -1250,  1465,  8397,    27,
+   -1250,  1466,  1467,  1474,  1475,  4578,  5762,  7425,  7451,   632,
+   -1250,  5762,  1478, -1250, -1250,  1107, -1250,  7477,  5473,  9157,
+   -1250, -1250,  5762,  5762,   -64,  1480,  1482,  1487, -1250,  5762,
+    5762, -1250, -1250,  1489,  5762, -1250, -1250,  1479,  1491,  1283,
+    1494,  1371,  5762, -1250,  1500,  1501,  1502,  1503,  1504,  1506,
+     815,  1507,  5762, -1250,  5473,  6099,  9052,  4881,   309,   309,
+     -64,  1508,   -64,  1509,   -64,  1516,  5762,   363,  1345,  9073,
+   -1250, -1250, -1250, -1250,  6127,   210, -1250,  1518,  3374,  1538,
+    4578,   -64,  3374,  1540,   636,  5762, -1250,  1544,   108, -1250,
     5762,  5762,  5762,  5762, -1250, -1250, -1250,  4578,  5060,   415,
-    9094, -1250, -1250,  4341,  4578, -1250, -1250,  4578, -1250,  1381,
-     546,  3740,  4399,  1549,  2056, -1250,  1516,  1555, -1250,  1379,
+    9094, -1250, -1250,  4341,  4578, -1250, -1250,  4578, -1250,  1342,
+     423,  3740,  4399,  1549,  2056, -1250,  1554,  1556, -1250,  1379,
    -1250, -1250, -1250, -1250, -1250,  1558,   486,  9157,  5762,  5762,
-    4578,  1378,   664,  9157, -1250,  1560,  5762,  9157, -1250,  6155,
-    6183,   446, -1250, -1250, -1250,  6211,  6239, -1250,  6267,  1562,
+    4578,  1378,   642,  9157, -1250,  1560,  5762,  9157, -1250,  6155,
+    6183,   717, -1250, -1250, -1250,  6211,  6239, -1250,  6267,  1562,
    -1250,  4578, -1250,  1497,  1564,  9157, -1250, -1250, -1250, -1250,
-   -1250, -1250,  1384, -1250, -1250,  6826,  2116,  1566,  1390, -1250,
-    5762, -1250,  1385,  1388,   224, -1250,  1409,   259, -1250,  1410,
-     262, -1250,  1415,  8420,  1572,  4578,  1591,  1419,  5762, -1250,
-    5294,   276, -1250,   670,   284,   286, -1250,  1601,  6295, -1250,
-    7503,  7529,  7555,  7581,  1484,  5762, -1250,  5762, -1250, -1250,
-    5537,  2268,  1602,  1425,  1608, -1250, -1250,  3554, -1250, -1250,
-    1107,  9157, -1250, -1250, -1250,    27, -1250,  1485, -1250, -1250,
-    5762,  7607,  7633, -1250,  4578,  5762,  1609, -1250,  7659, -1250,
-   -1250,  1611,  1612,  1613,  1614,  1615,  1617,   674,  1439, -1250,
-    4578,  5537, -1250, -1250,   309,  5239, -1250, -1250,  3120,   598,
-    3120,   598,  3120,   598,  1618, -1250,   709,  4578, -1250,  6323,
-     -64,  1619,  5537,   -64, -1250, -1250,  5762,  5762,  5762,  5762,
-    5762,  6351,  6379,   713, -1250, -1250,  1621, -1250,   733,  2748,
-     734,  1622, -1250,  1448,  9157,  5762,  5762,   740,  9157, -1250,
-    5762,   746,   756, -1250, -1250, -1250, -1250, -1250, -1250,  1449,
-    5762,   757,   760,  1441,  5762, -1250,  6407,   308,  1268,  6435,
-     312,  1411,  6463,   376,  1443, -1250,  4578,  1628,  1547,  3959,
-    1452,   387, -1250,   761,   421,  7685,  7711,  7737,  7763,  2307,
-   -1250, -1250,  1632, -1250,  5762, -1250,  1156, -1250, -1250,  5762,
-    9115,  7789,    45,  7815, -1250, -1250,  5762,  6491,  1634,  1551,
-   -1250,  6519,  1639,  5762,  1640,  1641,  5762,  1642,  1643,  5762,
-    1650,  1470, -1250,  5762, -1250,   598, -1250,  5537,  1653,  5294,
-    5762,  5762,  5762,  5762, -1250, -1250,  2838, -1250,   764, -1250,
+   -1250, -1250,  1384, -1250, -1250,  6826,  2116,  1566,  1389, -1250,
+    5762, -1250,  1408,  1409,   224, -1250,  1415,   259, -1250,  1419,
+     262, -1250,  1420,  8420,  1567,  4578,  1570,  1421,  5762, -1250,
+    5294,   276, -1250,   643,   284,   286, -1250,  1572,  6295, -1250,
+    7503,  7529,  7555,  7581,  1470,  5762, -1250,  5762, -1250, -1250,
+    5537,  2268,  1606,  1425,  1608, -1250, -1250,  3554, -1250, -1250,
+    1107,  9157, -1250, -1250, -1250,    27, -1250,  1484, -1250, -1250,
+    5762,  7607,  7633, -1250,  4578,  5762,  1610, -1250,  7659, -1250,
+   -1250,  1611,  1612,  1613,  1614,  1615,  1617,   651,  1438, -1250,
+    4578,  5537, -1250, -1250,   309,  5239, -1250, -1250,  3120,   393,
+    3120,   393,  3120,   393,  1618, -1250,   663,  4578, -1250,  6323,
+     -64,  1620,  5537,   -64, -1250, -1250,  5762,  5762,  5762,  5762,
+    5762,  6351,  6379,   664, -1250, -1250,  1621, -1250,   670,  2748,
+     674,  1622, -1250,  1447,  9157,  5762,  5762,   709,  9157, -1250,
+    5762,   713,   733, -1250, -1250, -1250, -1250, -1250, -1250,  1448,
+    5762,   734,   740,  1452,  5762, -1250,  6407,   308,  1268,  6435,
+     384,  1411,  6463,   386,  1443, -1250,  4578,  1623,  1546,  3959,
+    1454,   421, -1250,   746,   429,  7685,  7711,  7737,  7763,  2307,
+   -1250, -1250,  1631, -1250,  5762, -1250,  1156, -1250, -1250,  5762,
+    9115,  7789,    45,  7815, -1250, -1250,  5762,  6491,  1632,  1555,
+   -1250,  6519,  1633,  5762,  1640,  1641,  5762,  1642,  1643,  5762,
+    1650,  1471, -1250,  5762, -1250,   393, -1250,  5537,  1652,  5294,
+    5762,  5762,  5762,  5762, -1250, -1250,  2838, -1250,   756, -1250,
     5762, -1250,  4578,  5762,  7841, -1250, -1250,  4578,  1654, -1250,
-   -1250,  1475,  6547, -1250, -1250,  1476,  6575, -1250, -1250,  1477,
-    6603, -1250,  1655,  2444,  1940,  4618,   768, -1250,   429,   824,
-    7867,  7893,  7919,  7945,  1156,  1659,  1479,  9136,   825,  6631,
-    5762, -1250, -1250,   598,  1663,   598,  1667,   598,  1668, -1250,
-   -1250, -1250, -1250,   598,  1669,  5537,  1670,  5762,  5762,  5762,
-    5762, -1250, -1250,  1107, -1250,  1502,  1672,  6659,  2044, -1250,
-    1513,  2300, -1250,  1514,  2462, -1250,  1515,  2553, -1250,   828,
-   -1250,  7971,  7997,  8023,  8049,   831, -1250,  1520,  4578, -1250,
-    1673,  1687,   598,  1688,   598,  1689,   598, -1250,  1690,  5762,
-    5762,  5762,  5762,  1107,  1697,  1107,   834, -1250, -1250,  2565,
+   -1250,  1476,  6547, -1250, -1250,  1477,  6575, -1250, -1250,  1486,
+    6603, -1250,  1655,  2444,  1940,  4618,   757, -1250,   431,   760,
+    7867,  7893,  7919,  7945,  1156,  1656,  1488,  9136,   761,  6631,
+    5762, -1250, -1250,   393,  1659,   393,  1660,   393,  1663, -1250,
+   -1250, -1250, -1250,   393,  1668,  5537,  1670,  5762,  5762,  5762,
+    5762, -1250, -1250,  1107, -1250,  1513,  1672,  6659,  2044, -1250,
+    1514,  2300, -1250,  1515,  2462, -1250,  1520,  2553, -1250,   764,
+   -1250,  7971,  7997,  8023,  8049,   768, -1250,  1522,  4578, -1250,
+    1673,  1683,   393,  1687,   393,  1688,   393, -1250,  1689,  5762,
+    5762,  5762,  5762,  1107,  1690,  1107,   824, -1250, -1250,  2565,
    -1250,  2603, -1250,  2680, -1250,  6687,  6715,  6743,  6771, -1250,
-   -1250,   839, -1250,  1698,  1703,  1705,  1706, -1250, -1250, -1250,
+   -1250,   825, -1250,  1697,  1698,  1705,  1706, -1250, -1250, -1250,
    -1250,  1107,  1707, -1250, -1250, -1250, -1250, -1250, -1250
 };
 
@@ -1679,13 +1679,13 @@ static const yytype_int16 yypgoto[] =
 {
    -1250, -1250, -1250, -1250,   673, -1250, -1250, -1250, -1250,   190,
    -1250, -1250, -1250, -1250, -1250, -1250, -1250, -1250, -1250, -1250,
-   -1250, -1250,  -363,   -62,   876,  -433, -1250,  1303, -1250, -1250,
-   -1250, -1250, -1250,   301, -1250,   302, -1250, -1250, -1250, -1250,
-   -1250, -1250,   667,  1718,    -2,  -450,  -236, -1250, -1250, -1250,
+   -1250, -1250,  -363,   -62,   876,  -433, -1250,  1306, -1250, -1250,
+   -1250, -1250, -1250,   298, -1250,   296, -1250, -1250, -1250, -1250,
+   -1250, -1250,   672,  1719,    -2,  -450,  -236, -1250, -1250, -1250,
    -1250, -1250, -1250,  1720, -1250, -1250, -1250, -1250, -1250, -1250,
    -1250, -1250, -1250, -1250, -1250, -1250, -1250,  -921,  -908, -1250,
-   -1250,  1287, -1250, -1250, -1250, -1250, -1250, -1250,  1492, -1250,
-   -1250,    52, -1250, -1249,  1753,   296,   287,   735,  -224,   552,
+   -1250,  1284, -1250, -1250, -1250, -1250, -1250, -1250,  1492, -1250,
+   -1250,    52, -1250, -1249,  1753,   587,   287,   735,  -224,   552,
    -1250,    73,     6, -1250,  -344,    -3,    35
 };
 
@@ -1735,139 +1735,139 @@ static const yytype_int16 yytable[] =
      240,   523,   598,  1081,   196,   463,   464,   642,   199,   281,
      463,   464,   643,   408,   408,   408,   408,   408,   408,   408,
      408,  1104,   408,   408,   463,   464,  1368,   408,   408,   408,
-     597,   477,   200,    45,    46,    47,    48,   201,   478,  1676,
+     597,   477,   200,    45,    46,    47,    48,   202,   478,  1676,
     1438,    53,   215,   281,    56,   216,   822,  1029,   217,   990,
      218,   643,   581,  1387,   583,   584,   585,   586,   587,   463,
-     464,   590,   463,   464,   202,   594,   595,   596,   314,   315,
+     464,   590,   463,   464,   201,   594,   595,   596,   314,   315,
      316,   317,   395,   396,   397,  1440,   463,   464,  1442,   398,
      680,   683,   686,   689,   463,   464,   463,   464,   318,   319,
-     204,   916,  1450,   378,   378,   383,   211,   230,   231,   212,
-    1452,   213,  1453,   635,   203,   636,   418,   232,   463,   464,
-     166,   418,   463,   464,   241,   418,   651,   209,   657,   281,
-     281,   281,   418,   513,  1543,   789,   514,   545,  1546,   515,
-     297,   516,   435,   436,   437,   188,   200,   440,   441,   442,
-    1233,  1234,   845,   848,   281,   703,   704,   651,  1498,   661,
+     203,   916,  1450,   378,   378,   383,   211,   230,   231,   212,
+    1452,   213,  1453,   635,   204,   636,   418,   232,   463,   464,
+     166,   418,  1041,   929,   241,   418,   651,   651,   657,   281,
+     281,   281,   418,   930,  1543,   789,   224,   545,   188,   200,
+     297,   931,   932,   933,   205,   845,   848,   934,   935,   936,
+     937,   739,   209,   740,   281,   703,   704,   764,  1498,   210,
     1501,   281,  1504,   459,   384,   385,   386,   387,   388,   389,
-     390,   391,   392,   393,   394,   524,   396,   397,   743,   739,
-     836,   740,   398,   482,   483,   764,   463,   464,   281,   219,
-     210,  1364,   220,   205,   221,   495,   496,   463,   464,   519,
-    1149,   418,  1549,  1282,  1283,  1153,  1154,  1155,  1156,  1157,
-     651,   214,   667,  1557,  1163,  1166,   384,   385,   386,   387,
+     390,   391,   392,   393,   394,   524,   396,   397,   743,   651,
+     836,   661,   398,  1070,  1071,  1072,  1073,   206,   281,   214,
+     207,  1364,   225,   208,   463,   464,   463,   464,  1042,   519,
+    1149,   418,   651,   651,   667,  1153,  1154,  1155,  1156,  1157,
+    1546,   651,  1549,   759,  1163,  1166,   384,   385,   386,   387,
      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
-    1103,   463,   464,  1103,   398,   651,  1103,   759,   281,   463,
-     464,  1041,   206,  1388,   224,   207,   651,  1559,   208,   837,
-     393,   394,   395,   396,   397,  1625,   463,   464,  1022,   398,
+    1103,   463,   464,  1103,   398,   779,  1103,   780,   281,   463,
+     464,   463,   464,  1388,   739,   229,   740,  1557,   249,   837,
+     393,   394,   395,   396,   397,  1559,   250,  1625,  1022,   398,
      384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,   397,  1594,   281,  1042,   281,   398,   229,
-     297,   651,   309,   297,   500,   297,   501,   281,   281,   165,
+     394,   395,   396,   397,  1594,   281,   219,   281,   398,   220,
+     297,   221,   309,   297,   500,   297,   501,   281,   281,   165,
     1172,   166,   384,   385,   386,   387,   388,   389,   390,   391,
      392,   393,   394,   395,   396,   397,  1185,  1409,   237,   418,
-     398,   281,  1410,   225,   249,   739,   789,   740,   408,   258,
-     643,   876,   739,   408,   740,   250,  1103,   813,   929,  1269,
-     281,   281,  1638,   779,  1641,   780,  1644,   257,   930,   739,
-    1274,   740,  1647,   519,   651,   261,   931,   932,   933,   284,
-     262,   634,   934,   935,   936,   937,   874,   739,   263,   740,
-     991,   878,  1162,   739,   283,   740,   996,   739,  1165,   740,
-    1103,   285,  1046,  1103,  1047,   651,  1103,   850,   281,  1103,
-     651,  1679,   954,  1681,   651,  1683,   955,   281,   293,   281,
-     826,   281,   919,   281,   651,   651,   956,   972,   281,   925,
-     651,   281,   993,   286,  1052,   940,  1053,   651,   651,  1078,
-    1122,  1103,   651,  1103,  1127,  1103,   281,   292,   281,   418,
-     418,   418,   651,   294,  1128,   297,  1287,   296,  1352,  1353,
-     651,   651,  1129,  1130,   299,   651,  1177,  1132,   651,   295,
-    1133,  1037,   351,  1019,   418,  1179,   651,  1180,  1181,   352,
-     281,   763,   651,   361,  1182,   297,   297,   297,   651,   651,
-    1183,  1184,   651,   408,  1219,   353,   297,  1006,   389,   390,
-     391,   392,   393,   394,   395,   396,   397,  1310,   418,  1311,
-     354,   398,   281,   281,   281,   281,  1342,   651,  1343,  1377,
-    1415,   355,  1416,   408,   408,   408,  1310,  1396,  1451,   357,
-    1310,   997,  1489,   362,   408,   297,   384,   385,   386,   387,
+     398,   281,  1410,   651,   513,   850,   789,   514,   408,   257,
+     515,   876,   516,   408,   258,   651,  1103,   954,   261,  1269,
+     281,   281,  1638,   739,  1641,   740,  1644,   262,   643,   739,
+    1274,   740,  1647,   519,   813,   739,   651,   740,   955,   284,
+     651,   634,   739,   739,   740,   740,   874,  1162,  1165,   263,
+     991,   878,   651,   651,   956,   972,   996,   651,   283,   993,
+    1103,   285,  1046,  1103,  1047,  1052,  1103,  1053,   281,  1103,
+     651,  1679,  1078,  1681,   651,  1683,  1122,   281,   293,   281,
+     826,   281,   919,   281,   651,   651,  1127,  1128,   281,   925,
+     651,   281,  1129,   286,   651,   940,  1130,   651,   651,  1132,
+    1133,  1103,  1179,  1103,  1180,  1103,   281,   292,   281,   418,
+     418,   418,   651,   294,  1181,   297,  1287,   295,  1352,  1353,
+     651,   296,  1182,   435,   436,   437,  1177,   299,   440,   441,
+     442,  1037,   351,  1019,   418,   651,   651,  1183,  1184,   352,
+     281,   763,   651,   353,  1219,   297,   297,   297,  1310,  1342,
+    1311,  1343,   651,   408,  1377,   354,   297,  1006,  1415,  1310,
+    1416,  1451,  1233,  1234,   482,   483,   355,  1310,   418,  1489,
+    1282,  1283,   281,   281,   281,   281,   495,   496,   357,  1506,
+     651,  1507,  1522,   408,   408,   408,  1524,  1396,  1525,   361,
+     643,   997,  1527,   362,   408,   297,   384,   385,   386,   387,
      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
-     281,   281,   363,   281,   398,   281,   281,   364,   365,   281,
-     281,  1003,  1004,  1005,   281,  1506,   366,  1507,   996,   651,
-     400,  1522,  1010,   408,   381,   384,   385,   386,   387,   388,
-     389,   390,   391,   392,   393,   394,   395,   396,   397,  1524,
-     643,  1525,  1527,   398,   419,   418,  1310,   418,  1532,   424,
-     382,  1045,  1162,   428,  1534,   399,   403,   763,   881,   422,
-     434,  1040,  1165,  1310,  1535,  1538,   651,   651,  1539,  1558,
-    1415,  1173,  1605,   427,   651,  1300,  1624,   433,   384,   385,
+     281,   281,   363,   281,   398,   281,   281,   463,   464,   281,
+     281,  1003,  1004,  1005,   281,  1310,   364,  1532,   996,  1162,
+     365,  1534,  1010,   408,   400,   384,   385,   386,   387,   388,
+     389,   390,   391,   392,   393,   394,   395,   396,   397,  1165,
+    1310,  1535,  1538,   398,   419,   418,   651,   418,  1539,   424,
+     366,  1045,   651,   428,  1558,   381,   382,   763,   881,   399,
+     434,  1040,  1415,   651,  1605,  1624,   651,  1310,  1626,  1635,
+     651,  1173,  1668,   403,  1673,  1300,  1674,   433,   384,   385,
      386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     396,   397,   432,   281,   281,   281,   398,   312,  1086,  1087,
-    1088,   418,   438,   281,  1493,   326,   327,   328,   329,   330,
+     396,   397,   422,   281,   281,   281,   398,   312,  1086,  1087,
+    1088,   418,   427,   281,  1493,   326,   327,   328,   329,   330,
      331,   332,   333,   334,   335,   336,   337,   338,   339,   340,
      341,   342,   343,   344,   345,   346,   347,   348,   349,   350,
-     651,  1310,  1626,  1635,   651,   356,  1668,  1673,   358,  1674,
-    1310,   439,  1693,   359,   360,  1701,   443,  1702,   418,   444,
-     445,   281,   446,   447,   448,   449,   450,   418,   453,   418,
-     479,   418,   491,   418,   405,   105,   456,   281,   418,   457,
-    1200,   418,   468,   281,   469,   470,  1470,   480,   481,   281,
-     485,   281,   281,   489,   497,   498,   281,   281,   281,   281,
-     281,   281,   281,   281,   492,   493,   494,   499,   503,   131,
-     132,   133,   134,   135,   136,   525,   528,   139,   281,  1288,
-     532,   534,   141,   142,   535,   143,   166,   311,   539,   540,
-     418,   542,   550,   281,   929,   551,   148,   281,   554,   281,
-     555,   405,   105,   557,   930,   398,   606,   616,   607,   608,
-     165,   664,   931,   932,   933,   668,   609,   669,   934,   935,
-     936,   937,   418,   418,   418,   418,   670,   695,   673,   674,
-     502,   693,   696,   722,   697,   720,   131,   132,   133,   134,
-     135,   136,   723,   725,   139,   297,  1255,   527,   732,   141,
-     142,   105,   143,   733,   738,   744,   746,  1290,   769,   747,
-     772,   748,   778,   148,   785,   786,   816,  1293,   817,   818,
-     819,  1471,   281,   839,   418,   820,   151,   152,   827,   828,
-     829,   830,   297,   408,   831,   131,   132,   133,   134,   135,
-     136,   840,  1102,   139,  1318,   844,  1288,   865,   141,   142,
-     870,   143,  1509,   873,   875,   877,   882,   318,   319,   879,
-     883,   884,   148,   929,   995,   886,   888,   729,   730,   731,
-     408,  1289,   887,   930,   889,   892,   378,   378,   891,   893,
-    1347,   931,   932,   933,   897,   902,   904,   934,   935,   936,
-     937,   906,   757,   151,   152,   281,  1321,   281,  1060,   281,
-     915,   922,   907,   908,   949,   909,   923,   976,  1315,   962,
-    1021,   977,   963,   978,   281,     7,     8,   965,   966,   988,
-    1012,   281,   979,   967,   281,  1017,   784,   986,   281,  1392,
-    1018,  1024,  1354,  1020,  1357,  1032,  1360,  1399,  1402,  1034,
-    1036,  1057,   151,   152,  1033,  1044,  1039,   281,  1050,  1056,
-    1371,  1061,  1062,  1374,  1375,  1064,  1065,  1068,  1079,  1069,
-    1595,  1256,  1070,  1071,  1072,  1073,  1074,  1075,   281,  1076,
+    1310,  1701,  1693,  1702,   453,   356,   432,   438,   358,   439,
+     443,   444,   445,   359,   360,   446,   447,   448,   418,   449,
+     450,   281,   491,   525,   479,   456,   480,   418,   457,   418,
+     468,   418,   469,   418,   405,   105,   470,   281,   418,   481,
+    1200,   418,   485,   281,   492,   489,  1470,   493,   494,   281,
+     497,   281,   281,   498,   499,   503,   281,   281,   281,   281,
+     281,   281,   281,   281,   528,   532,   534,   535,   539,   131,
+     132,   133,   134,   135,   136,   166,   311,   139,   281,  1288,
+     540,   542,   141,   142,   550,   143,   551,   554,   555,   557,
+     418,   398,   606,   281,   929,   607,   148,   281,   608,   281,
+     165,   405,   105,   609,   930,   664,   668,   616,   669,   670,
+     695,   673,   931,   932,   933,   674,   693,   696,   934,   935,
+     936,   937,   418,   418,   418,   418,   697,   720,   722,   738,
+     502,   723,   725,   732,   733,   744,   131,   132,   133,   134,
+     135,   136,   746,   747,   139,   297,  1255,   527,   748,   141,
+     142,   105,   143,   769,   772,   778,   785,  1290,   786,   816,
+     817,   818,   819,   148,   828,   839,   820,  1293,   827,   830,
+     829,  1471,   281,   831,   418,   840,   151,   152,   844,   865,
+     870,   882,   297,   408,   873,   131,   132,   133,   134,   135,
+     136,   875,  1102,   139,  1318,   877,  1288,   879,   141,   142,
+     883,   143,  1509,   884,   886,   887,   888,   318,   319,   889,
+     891,   892,   148,   929,   995,   893,   897,   729,   730,   731,
+     408,  1289,   902,   930,   906,   904,   378,   378,   907,   915,
+    1347,   931,   932,   933,   908,   909,   949,   934,   935,   936,
+     937,   976,   757,   151,   152,   281,  1321,   281,  1060,   281,
+     962,   922,   923,   963,   977,   965,   966,   967,  1315,   978,
+     979,   988,  1012,  1017,   281,     7,     8,   986,  1018,  1021,
+    1020,   281,  1024,  1036,   281,  1032,   784,  1034,   281,  1392,
+    1039,  1033,  1354,  1044,  1357,  1050,  1360,  1399,  1402,  1056,
+    1057,  1061,   151,   152,  1062,  1064,  1065,   281,  1068,  1077,
+    1371,  1069,  1074,  1374,  1375,  1075,  1076,  1079,  1089,  1106,
+    1595,  1256,  1090,  1092,  1093,  1107,  1091,  1108,   281,  1109,
      610,    21,    22,   611,    24,    25,   612,    27,   613,    29,
-    1077,    30,  1089,  1090,  1093,  1091,    35,    36,  1092,    38,
-      39,    40,  1106,  1107,  1112,    43,  1108,  1109,   929,  1110,
-    1113,  1114,   281,  1115,  1116,  1118,  1119,   281,   930,  1137,
-    1142,  1143,  1145,   869,  1146,   871,   931,   932,   933,  1148,
-    1150,  1151,   934,   935,   936,   937,  1152,   281,    64,    65,
-      66,  1158,  1159,  1175,   281,  1193,  1160,   297,  1169,   418,
-    1186,  1196,  1161,     7,     8,  1174,  1204,  1192,  1208,  1191,
-    1211,   281,  1202,   384,   385,   386,   387,   388,   389,   390,
+    1110,    30,  1112,  1113,  1114,  1115,    35,    36,  1116,    38,
+      39,    40,  1118,  1119,  1137,    43,  1142,  1143,   929,  1145,
+    1146,  1148,   281,  1150,  1151,  1152,  1158,   281,   930,  1161,
+    1159,  1160,  1169,   869,  1175,   871,   931,   932,   933,  1191,
+    1174,  1186,   934,   935,   936,   937,  1192,   281,    64,    65,
+      66,  1193,  1196,  1204,   281,  1202,  1208,   297,  1203,   418,
+    1209,  1211,  1210,     7,     8,  1212,  1214,  1215,  1216,  1217,
+    1222,   281,  1232,   384,   385,   386,   387,   388,   389,   390,
      391,   392,   393,   394,   395,   396,   397,   281,   281,   914,
-    1203,   398,   378,  1209,  1210,   408,  1212,  1214,  1215,  1216,
-    1217,  1222,  1223,  1238,   281,  1232,  1239,  1246,  1250,   281,
-    1251,   728,  1252,  1253,  1260,  1268,  1544,  1261,   610,    21,
-      22,   611,    24,    25,   612,    27,   613,    29,  1265,    30,
-    1275,  1276,  1277,  1281,    35,    36,   961,    38,    39,    40,
-    1285,  1284,  1291,    43,  1292,   968,  1329,   969,  1295,   970,
-    1497,   971,  1500,  1296,  1503,  1333,   974,  1298,   168,   975,
-    1301,   929,  1511,   281,  1302,  1514,  1303,  1304,  1314,  1322,
-    1365,   930,  1323,  1324,  1327,  1330,    64,    65,    66,   931,
-     932,   933,  1331,  1405,  1332,   934,   935,   936,   937,     7,
-       8,  1336,  1567,   929,  1337,  1338,  1339,  1340,  1341,  1344,
-    1355,  1358,  1361,   930,  1369,   418,  1372,  1376,  1002,   418,
+    1223,   398,   378,  1238,  1239,   408,  1246,  1250,  1251,  1252,
+    1253,  1268,  1260,  1261,   281,  1265,  1275,  1276,  1281,   281,
+    1277,   728,  1285,  1291,  1292,  1284,  1544,  1295,   610,    21,
+      22,   611,    24,    25,   612,    27,   613,    29,  1296,    30,
+    1331,  1298,  1301,  1302,    35,    36,   961,    38,    39,    40,
+    1303,  1304,  1314,    43,  1329,   968,  1322,   969,  1323,   970,
+    1497,   971,  1500,  1324,  1503,  1327,   974,  1330,   168,   975,
+    1332,   929,  1511,   281,  1333,  1514,  1336,  1337,  1338,  1339,
+    1340,   930,  1341,  1344,  1355,  1358,    64,    65,    66,   931,
+     932,   933,  1361,  1395,  1369,   934,   935,   936,   937,     7,
+       8,  1365,  1567,   929,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   930,  1372,   418,  1376,   398,  1002,   418,
     1379,   931,   932,   933,   281,  1403,   281,   934,   935,   936,
-     937,  1406,  1395,  1407,  1408,  1414,  1417,  1426,  1428,   281,
-    1429,  1430,  1433,  1436,   281,   305,  1437,  1434,  1445,   776,
+     937,  1405,  1406,  1407,  1408,  1414,  1417,  1426,  1428,   281,
+    1429,  1430,  1433,  1445,   281,   305,  1434,  1447,  1454,   776,
     1025,  1026,  1027,  1028,   610,    21,    22,   611,    24,    25,
-     612,    27,   613,    29,  1111,    30,  1439,  1441,  1447,  1547,
-      35,    36,  1443,    38,    39,    40,  1448,  1454,  1465,    43,
-    1631,  1598,  1460,  1466,  1467,  1479,  1472,  1483,  1484,  1485,
-    1486,  1487,   281,  1488,  1505,  1512,  1490,  1523,  1528,  1540,
-     297,  1550,  1063,  1170,  1552,  1529,  1536,  1553,  1565,  1556,
-    1576,  1577,    64,    65,    66,  1580,  1583,  1584,  1587,  1588,
-     367,   368,   369,   370,   372,   281,  1591,   519,  1592,  1597,
-    1612,  1619,  1613,  1615,  1617,  1632,  1633,   404,   408,  1639,
-     297,   410,   297,  1642,  1645,  1648,  1650,   418,  1659,  1677,
-     415,   417,   420,   421,   418,   423,   417,   425,   426,  1658,
-     417,   429,   430,  1678,  1680,  1682,  1684,   417,   297,  1176,
-    1662,  1664,  1666,  1690,  1703,   777,  1656,  1675,   408,  1704,
-     408,  1705,  1706,  1708,  1195,   452,  1206,   648,   418,  1568,
-    1481,    88,  1482,    96,   461,   462,     0,  1297,     0,   676,
+     612,    27,   613,    29,  1111,    30,  1436,  1437,  1460,  1547,
+      35,    36,  1439,    38,    39,    40,  1441,  1443,  1448,    43,
+    1631,  1598,  1465,  1466,  1467,  1472,  1479,  1483,  1484,  1485,
+    1486,  1487,   281,  1488,  1505,  1490,  1512,  1523,  1528,  1552,
+     297,  1550,  1063,  1170,  1529,  1536,  1553,  1565,  1576,  1580,
+    1540,  1556,    64,    65,    66,  1577,  1583,  1584,  1587,  1588,
+     367,   368,   369,   370,   372,   281,  1591,   519,  1597,  1592,
+    1612,  1619,  1632,  1613,  1615,  1639,  1642,   404,   408,  1645,
+     297,   410,   297,  1617,  1648,  1633,  1650,   418,  1659,  1677,
+     415,   417,   420,   421,   418,   423,   417,   425,   426,  1678,
+     417,   429,   430,  1680,  1682,  1684,  1690,   417,   297,  1176,
+    1658,  1662,  1664,  1703,  1704,   777,  1656,  1666,   408,  1675,
+     408,  1705,  1706,  1708,  1195,   452,  1482,  1481,   418,  1568,
+     648,  1206,    88,    96,   461,   462,   676,  1297,     0,     0,
        0,     0,     0,   462,     0,     0,   408,     0,     0,   418,
        0,     0,     0,     0,     0,     0,  1689,     0,  1692,   384,
      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
@@ -2679,139 +2679,139 @@ static const yytype_int16 yycheck[] =
       73,     8,   366,   186,   180,   170,   171,   181,   180,   382,
      170,   171,   186,   348,   349,   350,   351,   352,   353,   354,
      355,   186,   357,   358,   170,   171,   186,   362,   363,   364,
-     365,   180,   180,    94,    95,    96,    97,    77,   187,  1658,
+     365,   180,   180,    94,    95,    96,    97,    73,   187,  1658,
      186,   102,    67,   416,   105,    70,   181,   850,    73,   782,
       75,   186,   349,     8,   351,   352,   353,   354,   355,   170,
-     171,   358,   170,   171,    73,   362,   363,   364,   157,   158,
+     171,   358,   170,   171,    77,   362,   363,   364,   157,   158,
      159,   160,   172,   173,   174,   186,   170,   171,   186,   179,
      444,   445,   446,   447,   170,   171,   170,   171,   177,   178,
-       6,   697,   186,   465,   466,     6,    70,   170,   171,    73,
-     186,    75,   186,   182,    73,   184,   189,   180,   170,   171,
-     189,   194,   170,   171,   187,   198,   186,    73,   188,   492,
-     493,   494,   205,    67,   186,   557,    70,     6,   186,    73,
-     503,    75,   206,   207,   208,   180,   180,   211,   212,   213,
-       6,     7,   187,   187,   517,   463,   464,   186,  1439,   188,
+      73,   697,   186,   465,   466,     6,    70,   170,   171,    73,
+     186,    75,   186,   182,     6,   184,   189,   180,   170,   171,
+     189,   194,   181,    90,   187,   198,   186,   186,   188,   492,
+     493,   494,   205,   100,   186,   557,   180,     6,   180,   180,
+     503,   108,   109,   110,   187,   187,   187,   114,   115,   116,
+     117,   181,    73,   183,   517,   463,   464,   187,  1439,    73,
     1441,   524,  1443,   471,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   503,   181,
-     602,   183,   179,   247,   248,   187,   170,   171,   551,    70,
-      73,   188,    73,   187,    75,   259,   260,   170,   171,   272,
-     993,   274,   186,     6,     7,   998,   999,  1000,  1001,  1002,
-     186,    75,   188,   186,  1007,  1008,   161,   162,   163,   164,
+     167,   168,   169,   170,   171,   172,   173,   174,   503,   186,
+     602,   188,   179,   906,   907,   908,   909,    67,   551,    75,
+      70,   188,    70,    73,   170,   171,   170,   171,   181,   272,
+     993,   274,   186,   186,   188,   998,   999,  1000,  1001,  1002,
+     186,   186,   186,   188,  1007,  1008,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
     1498,   170,   171,  1501,   179,   186,  1504,   188,   601,   170,
-     171,   181,    67,   188,   180,    70,   186,   186,    73,   603,
-     170,   171,   172,   173,   174,   186,   170,   171,   842,   179,
+     171,   170,   171,   188,   181,   187,   183,   186,    73,   603,
+     170,   171,   172,   173,   174,   186,    70,   186,   842,   179,
      161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,  1555,   638,   181,   640,   179,   187,
-     643,   186,   180,   646,   182,   648,   184,   650,   651,   187,
+     171,   172,   173,   174,  1555,   638,    70,   640,   179,    73,
+     643,    75,   180,   646,   182,   648,   184,   650,   651,   187,
     1013,   189,   161,   162,   163,   164,   165,   166,   167,   168,
      169,   170,   171,   172,   173,   174,  1029,   181,   187,   382,
-     179,   674,   186,    70,    73,   181,   738,   183,   643,    73,
-     186,   646,   181,   648,   183,    70,  1594,   186,    90,  1122,
-     693,   694,  1613,   186,  1615,   188,  1617,    70,   100,   181,
-    1133,   183,  1623,   416,   186,     4,   108,   109,   110,   180,
-       4,     6,   114,   115,   116,   117,   643,   181,     4,   183,
-     782,   648,   186,   181,     4,   183,   788,   181,   186,   183,
-    1638,   180,    73,  1641,    75,   186,  1644,   188,   741,  1647,
+     179,   674,   186,   186,    67,   188,   738,    70,   643,    70,
+      73,   646,    75,   648,    73,   186,  1594,   188,     4,  1122,
+     693,   694,  1613,   181,  1615,   183,  1617,     4,   186,   181,
+    1133,   183,  1623,   416,   186,   181,   186,   183,   188,   180,
+     186,     6,   181,   181,   183,   183,   643,   186,   186,     4,
+     782,   648,   186,   186,   188,   188,   788,   186,     4,   188,
+    1638,   180,    73,  1641,    75,    73,  1644,    75,   741,  1647,
      186,  1662,   188,  1664,   186,  1666,   188,   750,     6,   752,
        6,   754,   700,   756,   186,   186,   188,   188,   761,   707,
-     186,   764,   188,   180,    73,   713,    75,   186,   186,   188,
+     186,   764,   188,   180,   186,   713,   188,   186,   186,   188,
      188,  1679,   186,  1681,   188,  1683,   779,   180,   781,   492,
-     493,   494,   186,     6,   188,   788,  1149,     4,  1238,  1239,
-     186,   186,   188,   188,     4,   186,  1020,   188,   186,   182,
-     188,   863,   180,     6,   517,   186,   186,   188,   188,   180,
-     813,   524,   186,     7,   188,   818,   819,   820,   186,   186,
-     188,   188,   186,   788,   188,   180,   829,   821,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   186,   551,   188,
-     180,   179,   845,   846,   847,   848,     4,   186,     6,   188,
-     186,   180,   188,   818,   819,   820,   186,  1290,   188,   180,
+     493,   494,   186,     6,   188,   788,  1149,   182,  1238,  1239,
+     186,     4,   188,   206,   207,   208,  1020,     4,   211,   212,
+     213,   863,   180,     6,   517,   186,   186,   188,   188,   180,
+     813,   524,   186,   180,   188,   818,   819,   820,   186,     4,
+     188,     6,   186,   788,   188,   180,   829,   821,   186,   186,
+     188,   188,     6,     7,   247,   248,   180,   186,   551,   188,
+       6,     7,   845,   846,   847,   848,   259,   260,   180,   186,
+     186,   188,   188,   818,   819,   820,   186,  1290,   188,     7,
      186,   788,   188,   180,   829,   868,   161,   162,   163,   164,
      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     883,   884,   180,   886,   179,   888,   889,   180,   180,   892,
+     883,   884,   180,   886,   179,   888,   889,   170,   171,   892,
      893,   818,   819,   820,   897,   186,   180,   188,   960,   186,
-       6,   188,   829,   868,   187,   161,   162,   163,   164,   165,
+     180,   188,   829,   868,     6,   161,   162,   163,   164,   165,
      166,   167,   168,   169,   170,   171,   172,   173,   174,   186,
      186,   188,   188,   179,   189,   638,   186,   640,   188,   194,
-     187,   879,   186,   198,   188,   187,     6,   650,   651,   180,
+     180,   879,   186,   198,   188,   187,   187,   650,   651,   187,
      205,   868,   186,   186,   188,   188,   186,   186,   188,   188,
-     186,  1013,   188,   180,   186,  1179,   188,   187,   161,   162,
+     186,  1013,   188,     6,   186,  1179,   188,   187,   161,   162,
      163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
      173,   174,   180,   976,   977,   978,   179,   101,   926,   927,
      928,   694,   180,   986,  1434,   109,   110,   111,   112,   113,
      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     186,   186,   188,   188,   186,   139,   188,   186,   142,   188,
-     186,   180,   188,   147,   148,   186,   180,   188,   741,   180,
-     180,  1034,   180,   180,   180,   180,   180,   750,     4,   752,
-     180,   754,     6,   756,     4,     5,   187,  1050,   761,   187,
-    1044,   764,   187,  1056,   187,   187,  1400,   180,   180,  1062,
-     180,  1064,  1065,   182,   182,   182,  1069,  1070,  1071,  1072,
-    1073,  1074,  1075,  1076,   187,   187,   187,   182,   182,    39,
-      40,    41,    42,    43,    44,     6,     6,    47,  1091,  1151,
-     184,   187,    52,    53,   133,    55,   189,   189,     6,     6,
-     813,     6,   187,  1106,    90,   187,    66,  1110,     6,  1112,
-     182,     4,     5,     4,   100,   179,   184,   382,     7,   182,
-     187,     7,   108,   109,   110,     6,   188,     6,   114,   115,
-     116,   117,   845,   846,   847,   848,     6,   181,     7,     7,
-     264,     7,     6,     6,   187,     7,    39,    40,    41,    42,
-      43,    44,     7,     6,    47,  1158,  1104,   281,     6,    52,
-      53,     5,    55,     6,     4,    49,    49,  1161,   130,    49,
-     187,    49,   181,    66,     6,     6,   181,  1171,   181,   186,
-     186,  1405,  1185,     6,   897,   186,   146,   147,   186,   181,
-     186,   181,  1195,  1158,   181,    39,    40,    41,    42,    43,
-      44,     4,   188,    47,  1198,   183,  1268,     4,    52,    53,
-       6,    55,  1448,     6,     6,     6,   133,   177,   178,     7,
-       7,     7,    66,    90,   184,     7,     7,   492,   493,   494,
-    1195,  1158,   133,   100,     7,     7,  1238,  1239,   133,     7,
-    1234,   108,   109,   110,   187,     4,     6,   114,   115,   116,
-     117,   181,   517,   146,   147,  1258,  1204,  1260,     6,  1262,
-     184,   188,   181,   181,     6,   181,   188,     7,  1195,   183,
-     182,     7,   187,     7,  1277,    12,    13,   187,   187,     6,
-       6,  1284,   184,   187,  1287,     6,   551,   187,  1291,  1283,
-       6,     6,  1240,     7,  1242,   180,  1244,  1291,  1292,   187,
-       6,    75,   146,   147,   180,     7,   167,  1310,     7,     7,
-    1258,     7,     7,  1261,  1262,     7,     7,     6,     4,     7,
-    1556,   188,     7,     7,     7,     7,     7,     7,  1331,     7,
+     186,   186,   188,   188,     4,   139,   180,   180,   142,   180,
+     180,   180,   180,   147,   148,   180,   180,   180,   741,   180,
+     180,  1034,     6,     6,   180,   187,   180,   750,   187,   752,
+     187,   754,   187,   756,     4,     5,   187,  1050,   761,   180,
+    1044,   764,   180,  1056,   187,   182,  1400,   187,   187,  1062,
+     182,  1064,  1065,   182,   182,   182,  1069,  1070,  1071,  1072,
+    1073,  1074,  1075,  1076,     6,   184,   187,   133,     6,    39,
+      40,    41,    42,    43,    44,   189,   189,    47,  1091,  1151,
+       6,     6,    52,    53,   187,    55,   187,     6,   182,     4,
+     813,   179,   184,  1106,    90,     7,    66,  1110,   182,  1112,
+     187,     4,     5,   188,   100,     7,     6,   382,     6,     6,
+     181,     7,   108,   109,   110,     7,     7,     6,   114,   115,
+     116,   117,   845,   846,   847,   848,   187,     7,     6,     4,
+     264,     7,     6,     6,     6,    49,    39,    40,    41,    42,
+      43,    44,    49,    49,    47,  1158,  1104,   281,    49,    52,
+      53,     5,    55,   130,   187,   181,     6,  1161,     6,   181,
+     181,   186,   186,    66,   181,     6,   186,  1171,   186,   181,
+     186,  1405,  1185,   181,   897,     4,   146,   147,   183,     4,
+       6,   133,  1195,  1158,     6,    39,    40,    41,    42,    43,
+      44,     6,   188,    47,  1198,     6,  1268,     7,    52,    53,
+       7,    55,  1448,     7,     7,   133,     7,   177,   178,     7,
+     133,     7,    66,    90,   184,     7,   187,   492,   493,   494,
+    1195,  1158,     4,   100,   181,     6,  1238,  1239,   181,   184,
+    1234,   108,   109,   110,   181,   181,     6,   114,   115,   116,
+     117,     7,   517,   146,   147,  1258,  1204,  1260,     6,  1262,
+     183,   188,   188,   187,     7,   187,   187,   187,  1195,     7,
+     184,     6,     6,     6,  1277,    12,    13,   187,     6,   182,
+       7,  1284,     6,     6,  1287,   180,   551,   187,  1291,  1283,
+     167,   180,  1240,     7,  1242,     7,  1244,  1291,  1292,     7,
+      75,     7,   146,   147,     7,     7,     7,  1310,     6,     6,
+    1258,     7,     7,  1261,  1262,     7,     7,     4,     4,     7,
+    1556,   188,     6,     6,   180,     6,   187,     7,  1331,     7,
       67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-       6,    78,     4,     6,   180,   187,    83,    84,     6,    86,
-      87,    88,     7,     6,   187,    92,     7,     7,    90,     7,
-       6,     6,  1365,     6,    73,     6,     6,  1370,   100,     4,
-       4,     4,   188,   638,     6,   640,   108,   109,   110,     6,
-       6,     4,   114,   115,   116,   117,     6,  1390,   125,   126,
-     127,   186,   181,     7,  1397,     6,   181,  1400,   181,  1112,
-     180,     6,   186,    12,    13,   184,    83,   184,     6,   187,
-       6,  1414,   187,   161,   162,   163,   164,   165,   166,   167,
+       7,    78,   187,     6,     6,     6,    83,    84,    73,    86,
+      87,    88,     6,     6,     4,    92,     4,     4,    90,   188,
+       6,     6,  1365,     6,     4,     6,   186,  1370,   100,   186,
+     181,   181,   181,   638,     7,   640,   108,   109,   110,   187,
+     184,   180,   114,   115,   116,   117,   184,  1390,   125,   126,
+     127,     6,     6,    83,  1397,   187,     6,  1400,   187,  1112,
+     187,     6,   187,    12,    13,     6,   187,     6,     6,     5,
+       4,  1414,     7,   161,   162,   163,   164,   165,   166,   167,
      168,   169,   170,   171,   172,   173,   174,  1430,  1431,   694,
-     187,   179,  1434,   187,   187,  1400,     6,   187,     6,     6,
-       5,     4,     6,   187,  1447,     7,   187,   182,     6,  1452,
-       6,   188,     6,     6,   187,     4,   188,   187,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,   187,    78,
-       6,     6,   129,     6,    83,    84,   741,    86,    87,    88,
-       6,   186,     4,    92,     4,   750,     5,   752,     6,   754,
-    1438,   756,  1440,     4,  1442,   133,   761,     6,     6,   764,
-       6,    90,  1450,  1506,     6,  1453,     6,     6,     4,     6,
-     186,   100,     6,     6,     6,     6,   125,   126,   127,   108,
-     109,   110,   187,     7,     6,   114,   115,   116,   117,    12,
-      13,     6,  1526,    90,     6,     6,     6,     6,     6,     6,
-       6,     6,     6,   100,     6,  1258,     6,     6,   813,  1262,
+       6,   179,  1434,   187,   187,  1400,   182,     6,     6,     6,
+       6,     4,   187,   187,  1447,   187,     6,     6,     6,  1452,
+     129,   188,     6,     4,     4,   186,   188,     6,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,     4,    78,
+     187,     6,     6,     6,    83,    84,   741,    86,    87,    88,
+       6,     6,     4,    92,     5,   750,     6,   752,     6,   754,
+    1438,   756,  1440,     6,  1442,     6,   761,     6,     6,   764,
+       6,    90,  1450,  1506,   133,  1453,     6,     6,     6,     6,
+       6,   100,     6,     6,     6,     6,   125,   126,   127,   108,
+     109,   110,     6,   181,     6,   114,   115,   116,   117,    12,
+      13,   186,  1526,    90,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   100,     6,  1258,     6,   179,   813,  1262,
        6,   108,   109,   110,  1557,     6,  1559,   114,   115,   116,
-     117,     6,   181,   184,     6,   187,     6,     5,    71,  1572,
-       6,   187,     6,   188,  1577,    83,   188,   187,     6,   188,
+     117,     7,     6,   184,     6,   187,     6,     5,    71,  1572,
+       6,   187,     6,     6,  1577,    83,   187,     7,     6,   188,
      845,   846,   847,   848,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,     6,    78,   187,   187,     7,   188,
-      83,    84,   187,    86,    87,    88,   187,     6,     6,    92,
-    1604,  1559,   128,   188,     6,     6,   131,     6,     6,     6,
-       6,     6,  1625,     6,     6,     6,   187,     6,     6,   188,
-    1633,   188,   897,     6,     6,   187,   187,    90,     6,   187,
-       6,    90,   125,   126,   127,     6,     6,     6,     6,     6,
-     158,   159,   160,   161,   162,  1658,     6,  1370,   188,     6,
-       6,     6,   187,   187,   187,     6,   187,   175,  1633,     6,
-    1673,   179,  1675,     6,     6,     6,     6,  1390,     6,     6,
-     188,   189,   190,   191,  1397,   193,   194,   195,   196,   187,
+      73,    74,    75,    76,     6,    78,   188,   188,   128,   188,
+      83,    84,   187,    86,    87,    88,   187,   187,   187,    92,
+    1604,  1559,     6,   188,     6,   131,     6,     6,     6,     6,
+       6,     6,  1625,     6,     6,   187,     6,     6,     6,     6,
+    1633,   188,   897,     6,   187,   187,    90,     6,     6,     6,
+     188,   187,   125,   126,   127,    90,     6,     6,     6,     6,
+     158,   159,   160,   161,   162,  1658,     6,  1370,     6,   188,
+       6,     6,     6,   187,   187,     6,     6,   175,  1633,     6,
+    1673,   179,  1675,   187,     6,   187,     6,  1390,     6,     6,
+     188,   189,   190,   191,  1397,   193,   194,   195,   196,     6,
      198,   199,   200,     6,     6,     6,     6,   205,  1701,     6,
-     187,   187,   187,     6,     6,   188,  1633,   187,  1673,     6,
-    1675,     6,     6,     6,  1041,   223,  1049,   414,  1431,  1529,
-    1419,     3,  1420,     3,   232,   233,    -1,  1175,    -1,   442,
+     187,   187,   187,     6,     6,   188,  1633,   187,  1673,   187,
+    1675,     6,     6,     6,  1041,   223,  1420,  1419,  1431,  1529,
+     414,  1049,     3,     3,   232,   233,   442,  1175,    -1,    -1,
       -1,    -1,    -1,   241,    -1,    -1,  1701,    -1,    -1,  1452,
       -1,    -1,    -1,    -1,    -1,    -1,  1673,    -1,  1675,   161,
      162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
@@ -3686,7 +3686,7 @@ static const yytype_uint16 yystos[] =
      281,   181,   181,   186,     7,   271,    73,    75,   274,   274,
        7,   274,    73,    75,   274,   274,     7,    75,   274,   274,
        6,     7,     7,   277,     7,     7,    90,   259,     6,     7,
-       7,     7,     7,     7,     7,     7,     7,     6,   188,     4,
+     212,   212,   212,   212,     7,     7,     7,     6,   188,     4,
      188,   186,   186,   186,   188,   188,   271,   271,   271,     4,
        6,   187,     6,   180,     6,   118,     6,   118,     6,   118,
        6,   118,   188,   258,   186,   257,     7,     6,     7,     7,
@@ -6079,15 +6079,31 @@ yyreduce:
 #line 1372 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
-      if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
+      int op = (yyvsp[(6) - (8)].i);
+      PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_POINT);
+      if(p && op == 0){
 	yymsg(0, "Physical point %d already exists", num);
       }
-      else{
+      else if(!p && op > 0){
+	yymsg(0, "Physical point %d does not exists", num);
+      }
+      else if(op == 0){
 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
-	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
+	p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
 	List_Delete(temp);
 	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
+      else if(op == 1){
+        for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
+          double d;
+          List_Read((yyvsp[(7) - (8)].l), i, &d);
+          int j = (int)d;
+          List_Add(p->Entities, &j);
+        }
+      }
+      else{
+	yymsg(0, "Unsupported operation on physical point %d", num);
+      }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_PHYSICAL_POINT;
       (yyval.s).Num = num;
@@ -6096,7 +6112,7 @@ yyreduce:
 
   case 139:
 /* Line 1787 of yacc.c  */
-#line 1388 "Gmsh.y"
+#line 1404 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6120,7 +6136,7 @@ yyreduce:
 
   case 140:
 /* Line 1787 of yacc.c  */
-#line 1411 "Gmsh.y"
+#line 1427 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -6142,7 +6158,7 @@ yyreduce:
 
   case 141:
 /* Line 1787 of yacc.c  */
-#line 1429 "Gmsh.y"
+#line 1445 "Gmsh.y"
     {
       for (int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double dnum;
@@ -6167,7 +6183,7 @@ yyreduce:
 
   case 142:
 /* Line 1787 of yacc.c  */
-#line 1450 "Gmsh.y"
+#line 1466 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -6189,7 +6205,7 @@ yyreduce:
 
   case 143:
 /* Line 1787 of yacc.c  */
-#line 1468 "Gmsh.y"
+#line 1484 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
@@ -6223,7 +6239,7 @@ yyreduce:
 
   case 144:
 /* Line 1787 of yacc.c  */
-#line 1498 "Gmsh.y"
+#line 1514 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
@@ -6257,7 +6273,7 @@ yyreduce:
 
   case 145:
 /* Line 1787 of yacc.c  */
-#line 1528 "Gmsh.y"
+#line 1544 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -6279,7 +6295,7 @@ yyreduce:
 
   case 146:
 /* Line 1787 of yacc.c  */
-#line 1546 "Gmsh.y"
+#line 1562 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -6301,7 +6317,7 @@ yyreduce:
 
   case 147:
 /* Line 1787 of yacc.c  */
-#line 1565 "Gmsh.y"
+#line 1581 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
@@ -6331,7 +6347,7 @@ yyreduce:
 
   case 148:
 /* Line 1787 of yacc.c  */
-#line 1591 "Gmsh.y"
+#line 1607 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindEdgeLoop(num)){
@@ -6353,7 +6369,7 @@ yyreduce:
 
   case 149:
 /* Line 1787 of yacc.c  */
-#line 1609 "Gmsh.y"
+#line 1625 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindCurve(num)){
@@ -6375,18 +6391,34 @@ yyreduce:
 
   case 150:
 /* Line 1787 of yacc.c  */
-#line 1627 "Gmsh.y"
+#line 1643 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
-      if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
+      int op = (yyvsp[(6) - (8)].i);
+      PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_LINE);
+      if(p && op == 0){
 	yymsg(0, "Physical line %d already exists", num);
       }
-      else{
+      else if(!p && op > 0){
+	yymsg(0, "Physical line %d does not exists", num);
+      }
+      else if(op == 0){
 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
-	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
+	p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
 	List_Delete(temp);
 	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
+      else if(op == 1){
+        for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
+          double d;
+          List_Read((yyvsp[(7) - (8)].l), i, &d);
+          int j = (int)d;
+          List_Add(p->Entities, &j);
+        }
+      }
+      else{
+	yymsg(0, "Unsupported operation on physical line %d", num);
+      }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_PHYSICAL_LINE;
       (yyval.s).Num = num;
@@ -6395,7 +6427,7 @@ yyreduce:
 
   case 151:
 /* Line 1787 of yacc.c  */
-#line 1646 "Gmsh.y"
+#line 1678 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -6417,7 +6449,7 @@ yyreduce:
 
   case 152:
 /* Line 1787 of yacc.c  */
-#line 1664 "Gmsh.y"
+#line 1696 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
       if(FindSurface(num)){
@@ -6460,7 +6492,7 @@ yyreduce:
 
   case 153:
 /* Line 1787 of yacc.c  */
-#line 1703 "Gmsh.y"
+#line 1735 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -6470,7 +6502,7 @@ yyreduce:
 
   case 154:
 /* Line 1787 of yacc.c  */
-#line 1709 "Gmsh.y"
+#line 1741 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -6480,7 +6512,7 @@ yyreduce:
 
   case 155:
 /* Line 1787 of yacc.c  */
-#line 1715 "Gmsh.y"
+#line 1747 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
@@ -6491,7 +6523,7 @@ yyreduce:
 
   case 156:
 /* Line 1787 of yacc.c  */
-#line 1722 "Gmsh.y"
+#line 1754 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -6520,7 +6552,7 @@ yyreduce:
 
   case 157:
 /* Line 1787 of yacc.c  */
-#line 1747 "Gmsh.y"
+#line 1779 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -6549,7 +6581,7 @@ yyreduce:
 
   case 158:
 /* Line 1787 of yacc.c  */
-#line 1772 "Gmsh.y"
+#line 1804 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurfaceLoop(num)){
@@ -6570,7 +6602,7 @@ yyreduce:
 
   case 159:
 /* Line 1787 of yacc.c  */
-#line 1789 "Gmsh.y"
+#line 1821 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -6593,7 +6625,7 @@ yyreduce:
 
   case 160:
 /* Line 1787 of yacc.c  */
-#line 1809 "Gmsh.y"
+#line 1841 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (12)].d);
       if(FindSurface(num)){
@@ -6630,18 +6662,34 @@ yyreduce:
 
   case 161:
 /* Line 1787 of yacc.c  */
-#line 1842 "Gmsh.y"
+#line 1874 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
-      if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
+      int op = (yyvsp[(6) - (8)].i);
+      PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE);
+      if(p && op == 0){
 	yymsg(0, "Physical surface %d already exists", num);
       }
-      else{
+      else if(!p && op > 0){
+	yymsg(0, "Physical surface %d does not exists", num);
+      }
+      else if(op == 0){
 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
-	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
+	p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
 	List_Delete(temp);
 	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
+      else if(op == 1){
+        for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
+          double d;
+          List_Read((yyvsp[(7) - (8)].l), i, &d);
+          int j = (int)d;
+          List_Add(p->Entities, &j);
+        }
+      }
+      else{
+	yymsg(0, "Unsupported operation on physical surface %d", num);
+      }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_PHYSICAL_SURFACE;
       (yyval.s).Num = num;
@@ -6650,7 +6698,7 @@ yyreduce:
 
   case 162:
 /* Line 1787 of yacc.c  */
-#line 1862 "Gmsh.y"
+#line 1910 "Gmsh.y"
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -6672,7 +6720,7 @@ yyreduce:
 
   case 163:
 /* Line 1787 of yacc.c  */
-#line 1880 "Gmsh.y"
+#line 1928 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -6693,7 +6741,7 @@ yyreduce:
 
   case 164:
 /* Line 1787 of yacc.c  */
-#line 1897 "Gmsh.y"
+#line 1945 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindVolume(num)){
@@ -6713,18 +6761,34 @@ yyreduce:
 
   case 165:
 /* Line 1787 of yacc.c  */
-#line 1913 "Gmsh.y"
+#line 1961 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
-      if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
+      int op = (yyvsp[(6) - (8)].i);
+      PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME);
+      if(p && op == 0){
 	yymsg(0, "Physical volume %d already exists", num);
       }
-      else{
+      else if(!p && op > 0){
+	yymsg(0, "Physical volume %d does not exists", num);
+      }
+      else if(op == 0){
 	List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (8)].l));
-	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
+	p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
 	List_Delete(temp);
 	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
+      else if(op == 1){
+        for(int i = 0; i < List_Nbr((yyvsp[(7) - (8)].l)); i++){
+          double d;
+          List_Read((yyvsp[(7) - (8)].l), i, &d);
+          int j = (int)d;
+          List_Add(p->Entities, &j);
+        }
+      }
+      else{
+	yymsg(0, "Unsupported operation on physical volume %d", num);
+      }
       List_Delete((yyvsp[(7) - (8)].l));
       (yyval.s).Type = MSH_PHYSICAL_VOLUME;
       (yyval.s).Num = num;
@@ -6733,7 +6797,7 @@ yyreduce:
 
   case 166:
 /* Line 1787 of yacc.c  */
-#line 1934 "Gmsh.y"
+#line 1998 "Gmsh.y"
     {
       TranslateShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -6742,7 +6806,7 @@ yyreduce:
 
   case 167:
 /* Line 1787 of yacc.c  */
-#line 1939 "Gmsh.y"
+#line 2003 "Gmsh.y"
     {
       RotateShapes((yyvsp[(3) - (11)].v)[0], (yyvsp[(3) - (11)].v)[1], (yyvsp[(3) - (11)].v)[2], (yyvsp[(5) - (11)].v)[0], (yyvsp[(5) - (11)].v)[1], (yyvsp[(5) - (11)].v)[2], (yyvsp[(7) - (11)].d), (yyvsp[(10) - (11)].l));
       (yyval.l) = (yyvsp[(10) - (11)].l);
@@ -6751,7 +6815,7 @@ yyreduce:
 
   case 168:
 /* Line 1787 of yacc.c  */
-#line 1944 "Gmsh.y"
+#line 2008 "Gmsh.y"
     {
       SymmetryShapes((yyvsp[(2) - (5)].v)[0], (yyvsp[(2) - (5)].v)[1], (yyvsp[(2) - (5)].v)[2], (yyvsp[(2) - (5)].v)[3], (yyvsp[(4) - (5)].l));
       (yyval.l) = (yyvsp[(4) - (5)].l);
@@ -6760,7 +6824,7 @@ yyreduce:
 
   case 169:
 /* Line 1787 of yacc.c  */
-#line 1949 "Gmsh.y"
+#line 2013 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].d), (yyvsp[(5) - (9)].d), (yyvsp[(5) - (9)].d), (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -6769,7 +6833,7 @@ yyreduce:
 
   case 170:
 /* Line 1787 of yacc.c  */
-#line 1954 "Gmsh.y"
+#line 2018 "Gmsh.y"
     {
       DilatShapes((yyvsp[(3) - (9)].v)[0], (yyvsp[(3) - (9)].v)[1], (yyvsp[(3) - (9)].v)[2], (yyvsp[(5) - (9)].v)[0], (yyvsp[(5) - (9)].v)[1], (yyvsp[(5) - (9)].v)[2], (yyvsp[(8) - (9)].l));
       (yyval.l) = (yyvsp[(8) - (9)].l);
@@ -6778,7 +6842,7 @@ yyreduce:
 
   case 171:
 /* Line 1787 of yacc.c  */
-#line 1959 "Gmsh.y"
+#line 2023 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
@@ -6805,7 +6869,7 @@ yyreduce:
 
   case 172:
 /* Line 1787 of yacc.c  */
-#line 1982 "Gmsh.y"
+#line 2046 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[(4) - (9)].l), (int)(yyvsp[(8) - (9)].d), (yyval.l));
@@ -6815,7 +6879,7 @@ yyreduce:
 
   case 173:
 /* Line 1787 of yacc.c  */
-#line 1988 "Gmsh.y"
+#line 2052 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       List_T *tmp = ListOfDouble2ListOfInt((yyvsp[(7) - (9)].l));
@@ -6827,19 +6891,19 @@ yyreduce:
 
   case 174:
 /* Line 1787 of yacc.c  */
-#line 1998 "Gmsh.y"
+#line 2062 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); }
     break;
 
   case 175:
 /* Line 1787 of yacc.c  */
-#line 1999 "Gmsh.y"
+#line 2063 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); }
     break;
 
   case 176:
 /* Line 1787 of yacc.c  */
-#line 2004 "Gmsh.y"
+#line 2068 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     }
@@ -6847,7 +6911,7 @@ yyreduce:
 
   case 177:
 /* Line 1787 of yacc.c  */
-#line 2008 "Gmsh.y"
+#line 2072 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     }
@@ -6855,7 +6919,7 @@ yyreduce:
 
   case 178:
 /* Line 1787 of yacc.c  */
-#line 2012 "Gmsh.y"
+#line 2076 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -6882,7 +6946,7 @@ yyreduce:
 
   case 179:
 /* Line 1787 of yacc.c  */
-#line 2035 "Gmsh.y"
+#line 2099 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -6909,7 +6973,7 @@ yyreduce:
 
   case 180:
 /* Line 1787 of yacc.c  */
-#line 2058 "Gmsh.y"
+#line 2122 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -6936,7 +7000,7 @@ yyreduce:
 
   case 181:
 /* Line 1787 of yacc.c  */
-#line 2081 "Gmsh.y"
+#line 2145 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -6963,7 +7027,7 @@ yyreduce:
 
   case 182:
 /* Line 1787 of yacc.c  */
-#line 2109 "Gmsh.y"
+#line 2173 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
@@ -6988,7 +7052,7 @@ yyreduce:
 
   case 183:
 /* Line 1787 of yacc.c  */
-#line 2130 "Gmsh.y"
+#line 2194 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       int t = (int)(yyvsp[(4) - (10)].d);
@@ -7018,7 +7082,7 @@ yyreduce:
 
   case 184:
 /* Line 1787 of yacc.c  */
-#line 2157 "Gmsh.y"
+#line 2221 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
@@ -7042,7 +7106,7 @@ yyreduce:
 
   case 185:
 /* Line 1787 of yacc.c  */
-#line 2178 "Gmsh.y"
+#line 2242 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
@@ -7067,7 +7131,7 @@ yyreduce:
 
   case 186:
 /* Line 1787 of yacc.c  */
-#line 2199 "Gmsh.y"
+#line 2263 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
@@ -7091,7 +7155,7 @@ yyreduce:
 
   case 187:
 /* Line 1787 of yacc.c  */
-#line 2219 "Gmsh.y"
+#line 2283 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
@@ -7207,7 +7271,7 @@ yyreduce:
 
   case 188:
 /* Line 1787 of yacc.c  */
-#line 2331 "Gmsh.y"
+#line 2395 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
@@ -7230,7 +7294,7 @@ yyreduce:
 
   case 189:
 /* Line 1787 of yacc.c  */
-#line 2350 "Gmsh.y"
+#line 2414 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
@@ -7272,7 +7336,7 @@ yyreduce:
 
   case 190:
 /* Line 1787 of yacc.c  */
-#line 2389 "Gmsh.y"
+#line 2453 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -7379,7 +7443,7 @@ yyreduce:
 
   case 191:
 /* Line 1787 of yacc.c  */
-#line 2497 "Gmsh.y"
+#line 2561 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -7392,7 +7456,7 @@ yyreduce:
 
   case 192:
 /* Line 1787 of yacc.c  */
-#line 2506 "Gmsh.y"
+#line 2570 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
@@ -7402,7 +7466,7 @@ yyreduce:
 
   case 193:
 /* Line 1787 of yacc.c  */
-#line 2512 "Gmsh.y"
+#line 2576 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -7421,7 +7485,7 @@ yyreduce:
 
   case 194:
 /* Line 1787 of yacc.c  */
-#line 2527 "Gmsh.y"
+#line 2591 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         ClearProject();
@@ -7453,7 +7517,7 @@ yyreduce:
 
   case 195:
 /* Line 1787 of yacc.c  */
-#line 2555 "Gmsh.y"
+#line 2619 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -7469,7 +7533,7 @@ yyreduce:
 
   case 196:
 /* Line 1787 of yacc.c  */
-#line 2572 "Gmsh.y"
+#line 2636 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -7482,7 +7546,7 @@ yyreduce:
 
   case 197:
 /* Line 1787 of yacc.c  */
-#line 2581 "Gmsh.y"
+#line 2645 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
 	Shape TheShape;
@@ -7495,7 +7559,7 @@ yyreduce:
 
   case 198:
 /* Line 1787 of yacc.c  */
-#line 2595 "Gmsh.y"
+#line 2659 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1, false);
@@ -7505,7 +7569,7 @@ yyreduce:
 
   case 199:
 /* Line 1787 of yacc.c  */
-#line 2601 "Gmsh.y"
+#line 2665 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0, false);
@@ -7515,7 +7579,7 @@ yyreduce:
 
   case 200:
 /* Line 1787 of yacc.c  */
-#line 2607 "Gmsh.y"
+#line 2671 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -7528,7 +7592,7 @@ yyreduce:
 
   case 201:
 /* Line 1787 of yacc.c  */
-#line 2616 "Gmsh.y"
+#line 2680 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -7541,7 +7605,7 @@ yyreduce:
 
   case 202:
 /* Line 1787 of yacc.c  */
-#line 2625 "Gmsh.y"
+#line 2689 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -7554,7 +7618,7 @@ yyreduce:
 
   case 203:
 /* Line 1787 of yacc.c  */
-#line 2634 "Gmsh.y"
+#line 2698 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -7567,7 +7631,7 @@ yyreduce:
 
   case 204:
 /* Line 1787 of yacc.c  */
-#line 2648 "Gmsh.y"
+#line 2712 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
@@ -7627,7 +7691,7 @@ yyreduce:
 
   case 205:
 /* Line 1787 of yacc.c  */
-#line 2704 "Gmsh.y"
+#line 2768 "Gmsh.y"
     {
       int n = List_Nbr((yyvsp[(3) - (5)].l));
       if(n == 1){
@@ -7649,7 +7713,7 @@ yyreduce:
 
   case 206:
 /* Line 1787 of yacc.c  */
-#line 2722 "Gmsh.y"
+#line 2786 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -7670,7 +7734,7 @@ yyreduce:
 
   case 207:
 /* Line 1787 of yacc.c  */
-#line 2739 "Gmsh.y"
+#line 2803 "Gmsh.y"
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -7689,7 +7753,7 @@ yyreduce:
 
   case 208:
 /* Line 1787 of yacc.c  */
-#line 2754 "Gmsh.y"
+#line 2818 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -7712,7 +7776,7 @@ yyreduce:
 
   case 209:
 /* Line 1787 of yacc.c  */
-#line 2773 "Gmsh.y"
+#line 2837 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -7728,7 +7792,7 @@ yyreduce:
 
   case 210:
 /* Line 1787 of yacc.c  */
-#line 2785 "Gmsh.y"
+#line 2849 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -7756,7 +7820,7 @@ yyreduce:
 
   case 211:
 /* Line 1787 of yacc.c  */
-#line 2809 "Gmsh.y"
+#line 2873 "Gmsh.y"
     {
       Msg::Exit(0);
     }
@@ -7764,7 +7828,7 @@ yyreduce:
 
   case 212:
 /* Line 1787 of yacc.c  */
-#line 2813 "Gmsh.y"
+#line 2877 "Gmsh.y"
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
@@ -7773,7 +7837,7 @@ yyreduce:
 
   case 213:
 /* Line 1787 of yacc.c  */
-#line 2818 "Gmsh.y"
+#line 2882 "Gmsh.y"
     {
       // FIXME: this is a hack to force a transfer from the old DB to
       // the new DB. This will become unnecessary if/when we fill the
@@ -7784,7 +7848,7 @@ yyreduce:
 
   case 214:
 /* Line 1787 of yacc.c  */
-#line 2825 "Gmsh.y"
+#line 2889 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -7794,7 +7858,7 @@ yyreduce:
 
   case 215:
 /* Line 1787 of yacc.c  */
-#line 2831 "Gmsh.y"
+#line 2895 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -7803,7 +7867,7 @@ yyreduce:
 
   case 216:
 /* Line 1787 of yacc.c  */
-#line 2836 "Gmsh.y"
+#line 2900 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -7813,7 +7877,7 @@ yyreduce:
 
   case 217:
 /* Line 1787 of yacc.c  */
-#line 2842 "Gmsh.y"
+#line 2906 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
      CTX::instance()->mesh.changed = ENT_ALL;
@@ -7825,7 +7889,7 @@ yyreduce:
 
   case 218:
 /* Line 1787 of yacc.c  */
-#line 2850 "Gmsh.y"
+#line 2914 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     }
@@ -7833,7 +7897,7 @@ yyreduce:
 
   case 219:
 /* Line 1787 of yacc.c  */
-#line 2854 "Gmsh.y"
+#line 2918 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     }
@@ -7841,7 +7905,7 @@ yyreduce:
 
   case 220:
 /* Line 1787 of yacc.c  */
-#line 2858 "Gmsh.y"
+#line 2922 "Gmsh.y"
     {
       GModel::current()->importGEOInternals();
       GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
@@ -7850,7 +7914,7 @@ yyreduce:
 
   case 221:
 /* Line 1787 of yacc.c  */
-#line 2864 "Gmsh.y"
+#line 2928 "Gmsh.y"
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -7908,7 +7972,7 @@ yyreduce:
 
   case 222:
 /* Line 1787 of yacc.c  */
-#line 2918 "Gmsh.y"
+#line 2982 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       SetOrderN(GModel::current(), (yyvsp[(2) - (3)].d), CTX::instance()->mesh.secondOrderLinear,
@@ -7920,7 +7984,7 @@ yyreduce:
 
   case 223:
 /* Line 1787 of yacc.c  */
-#line 2931 "Gmsh.y"
+#line 2995 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -7941,7 +8005,7 @@ yyreduce:
 
   case 224:
 /* Line 1787 of yacc.c  */
-#line 2948 "Gmsh.y"
+#line 3012 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -7962,7 +8026,7 @@ yyreduce:
 
   case 225:
 /* Line 1787 of yacc.c  */
-#line 2965 "Gmsh.y"
+#line 3029 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -7987,7 +8051,7 @@ yyreduce:
 
   case 226:
 /* Line 1787 of yacc.c  */
-#line 2986 "Gmsh.y"
+#line 3050 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -8012,7 +8076,7 @@ yyreduce:
 
   case 227:
 /* Line 1787 of yacc.c  */
-#line 3007 "Gmsh.y"
+#line 3071 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -8051,7 +8115,7 @@ yyreduce:
 
   case 228:
 /* Line 1787 of yacc.c  */
-#line 3042 "Gmsh.y"
+#line 3106 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -8063,7 +8127,7 @@ yyreduce:
 
   case 229:
 /* Line 1787 of yacc.c  */
-#line 3050 "Gmsh.y"
+#line 3114 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -8073,7 +8137,7 @@ yyreduce:
 
   case 230:
 /* Line 1787 of yacc.c  */
-#line 3056 "Gmsh.y"
+#line 3120 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -8084,7 +8148,7 @@ yyreduce:
 
   case 231:
 /* Line 1787 of yacc.c  */
-#line 3063 "Gmsh.y"
+#line 3127 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     }
@@ -8092,14 +8156,14 @@ yyreduce:
 
   case 232:
 /* Line 1787 of yacc.c  */
-#line 3067 "Gmsh.y"
+#line 3131 "Gmsh.y"
     {
     }
     break;
 
   case 233:
 /* Line 1787 of yacc.c  */
-#line 3076 "Gmsh.y"
+#line 3140 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l),
@@ -8111,7 +8175,7 @@ yyreduce:
 
   case 234:
 /* Line 1787 of yacc.c  */
-#line 3084 "Gmsh.y"
+#line 3148 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l),
@@ -8123,7 +8187,7 @@ yyreduce:
 
   case 235:
 /* Line 1787 of yacc.c  */
-#line 3092 "Gmsh.y"
+#line 3156 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
@@ -8135,7 +8199,7 @@ yyreduce:
 
   case 236:
 /* Line 1787 of yacc.c  */
-#line 3100 "Gmsh.y"
+#line 3164 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8145,7 +8209,7 @@ yyreduce:
 
   case 237:
 /* Line 1787 of yacc.c  */
-#line 3106 "Gmsh.y"
+#line 3170 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
@@ -8157,7 +8221,7 @@ yyreduce:
 
   case 238:
 /* Line 1787 of yacc.c  */
-#line 3114 "Gmsh.y"
+#line 3178 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8167,7 +8231,7 @@ yyreduce:
 
   case 239:
 /* Line 1787 of yacc.c  */
-#line 3120 "Gmsh.y"
+#line 3184 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
@@ -8179,7 +8243,7 @@ yyreduce:
 
   case 240:
 /* Line 1787 of yacc.c  */
-#line 3128 "Gmsh.y"
+#line 3192 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8189,7 +8253,7 @@ yyreduce:
 
   case 241:
 /* Line 1787 of yacc.c  */
-#line 3134 "Gmsh.y"
+#line 3198 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
@@ -8201,7 +8265,7 @@ yyreduce:
 
   case 242:
 /* Line 1787 of yacc.c  */
-#line 3142 "Gmsh.y"
+#line 3206 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8211,7 +8275,7 @@ yyreduce:
 
   case 243:
 /* Line 1787 of yacc.c  */
-#line 3148 "Gmsh.y"
+#line 3212 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -8222,7 +8286,7 @@ yyreduce:
 
   case 244:
 /* Line 1787 of yacc.c  */
-#line 3156 "Gmsh.y"
+#line 3220 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
@@ -8233,7 +8297,7 @@ yyreduce:
 
   case 245:
 /* Line 1787 of yacc.c  */
-#line 3163 "Gmsh.y"
+#line 3227 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
@@ -8244,7 +8308,7 @@ yyreduce:
 
   case 246:
 /* Line 1787 of yacc.c  */
-#line 3170 "Gmsh.y"
+#line 3234 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
@@ -8255,7 +8319,7 @@ yyreduce:
 
   case 247:
 /* Line 1787 of yacc.c  */
-#line 3177 "Gmsh.y"
+#line 3241 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -8266,7 +8330,7 @@ yyreduce:
 
   case 248:
 /* Line 1787 of yacc.c  */
-#line 3184 "Gmsh.y"
+#line 3248 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -8277,7 +8341,7 @@ yyreduce:
 
   case 249:
 /* Line 1787 of yacc.c  */
-#line 3191 "Gmsh.y"
+#line 3255 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -8288,7 +8352,7 @@ yyreduce:
 
   case 250:
 /* Line 1787 of yacc.c  */
-#line 3198 "Gmsh.y"
+#line 3262 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
@@ -8299,7 +8363,7 @@ yyreduce:
 
   case 251:
 /* Line 1787 of yacc.c  */
-#line 3205 "Gmsh.y"
+#line 3269 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
@@ -8310,7 +8374,7 @@ yyreduce:
 
   case 252:
 /* Line 1787 of yacc.c  */
-#line 3212 "Gmsh.y"
+#line 3276 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
@@ -8321,7 +8385,7 @@ yyreduce:
 
   case 253:
 /* Line 1787 of yacc.c  */
-#line 3219 "Gmsh.y"
+#line 3283 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8331,7 +8395,7 @@ yyreduce:
 
   case 254:
 /* Line 1787 of yacc.c  */
-#line 3225 "Gmsh.y"
+#line 3289 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -8342,7 +8406,7 @@ yyreduce:
 
   case 255:
 /* Line 1787 of yacc.c  */
-#line 3232 "Gmsh.y"
+#line 3296 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8352,7 +8416,7 @@ yyreduce:
 
   case 256:
 /* Line 1787 of yacc.c  */
-#line 3238 "Gmsh.y"
+#line 3302 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -8363,7 +8427,7 @@ yyreduce:
 
   case 257:
 /* Line 1787 of yacc.c  */
-#line 3245 "Gmsh.y"
+#line 3309 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8373,7 +8437,7 @@ yyreduce:
 
   case 258:
 /* Line 1787 of yacc.c  */
-#line 3251 "Gmsh.y"
+#line 3315 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -8384,7 +8448,7 @@ yyreduce:
 
   case 259:
 /* Line 1787 of yacc.c  */
-#line 3258 "Gmsh.y"
+#line 3322 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8394,7 +8458,7 @@ yyreduce:
 
   case 260:
 /* Line 1787 of yacc.c  */
-#line 3264 "Gmsh.y"
+#line 3328 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
@@ -8405,7 +8469,7 @@ yyreduce:
 
   case 261:
 /* Line 1787 of yacc.c  */
-#line 3271 "Gmsh.y"
+#line 3335 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8415,7 +8479,7 @@ yyreduce:
 
   case 262:
 /* Line 1787 of yacc.c  */
-#line 3277 "Gmsh.y"
+#line 3341 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
@@ -8426,7 +8490,7 @@ yyreduce:
 
   case 263:
 /* Line 1787 of yacc.c  */
-#line 3284 "Gmsh.y"
+#line 3348 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8436,7 +8500,7 @@ yyreduce:
 
   case 264:
 /* Line 1787 of yacc.c  */
-#line 3290 "Gmsh.y"
+#line 3354 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
@@ -8447,7 +8511,7 @@ yyreduce:
 
   case 265:
 /* Line 1787 of yacc.c  */
-#line 3297 "Gmsh.y"
+#line 3361 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8457,7 +8521,7 @@ yyreduce:
 
   case 266:
 /* Line 1787 of yacc.c  */
-#line 3303 "Gmsh.y"
+#line 3367 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
@@ -8468,7 +8532,7 @@ yyreduce:
 
   case 267:
 /* Line 1787 of yacc.c  */
-#line 3310 "Gmsh.y"
+#line 3374 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8478,7 +8542,7 @@ yyreduce:
 
   case 268:
 /* Line 1787 of yacc.c  */
-#line 3316 "Gmsh.y"
+#line 3380 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
@@ -8489,7 +8553,7 @@ yyreduce:
 
   case 269:
 /* Line 1787 of yacc.c  */
-#line 3323 "Gmsh.y"
+#line 3387 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8499,7 +8563,7 @@ yyreduce:
 
   case 270:
 /* Line 1787 of yacc.c  */
-#line 3329 "Gmsh.y"
+#line 3393 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
@@ -8510,21 +8574,21 @@ yyreduce:
 
   case 271:
 /* Line 1787 of yacc.c  */
-#line 3340 "Gmsh.y"
+#line 3404 "Gmsh.y"
     {
     }
     break;
 
   case 272:
 /* Line 1787 of yacc.c  */
-#line 3343 "Gmsh.y"
+#line 3407 "Gmsh.y"
     {
     }
     break;
 
   case 273:
 /* Line 1787 of yacc.c  */
-#line 3349 "Gmsh.y"
+#line 3413 "Gmsh.y"
     {
       int n = (int)fabs((yyvsp[(3) - (5)].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -8540,7 +8604,7 @@ yyreduce:
 
   case 274:
 /* Line 1787 of yacc.c  */
-#line 3361 "Gmsh.y"
+#line 3425 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -8564,7 +8628,7 @@ yyreduce:
 
   case 275:
 /* Line 1787 of yacc.c  */
-#line 3381 "Gmsh.y"
+#line 3445 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -8591,7 +8655,7 @@ yyreduce:
 
   case 276:
 /* Line 1787 of yacc.c  */
-#line 3405 "Gmsh.y"
+#line 3469 "Gmsh.y"
     {
       extr.mesh.ScaleLast = true;
     }
@@ -8599,7 +8663,7 @@ yyreduce:
 
   case 277:
 /* Line 1787 of yacc.c  */
-#line 3409 "Gmsh.y"
+#line 3473 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     }
@@ -8607,7 +8671,7 @@ yyreduce:
 
   case 278:
 /* Line 1787 of yacc.c  */
-#line 3413 "Gmsh.y"
+#line 3477 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     }
@@ -8615,7 +8679,7 @@ yyreduce:
 
   case 279:
 /* Line 1787 of yacc.c  */
-#line 3417 "Gmsh.y"
+#line 3481 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     }
@@ -8623,7 +8687,7 @@ yyreduce:
 
   case 280:
 /* Line 1787 of yacc.c  */
-#line 3421 "Gmsh.y"
+#line 3485 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -8633,7 +8697,7 @@ yyreduce:
 
   case 281:
 /* Line 1787 of yacc.c  */
-#line 3427 "Gmsh.y"
+#line 3491 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -8643,7 +8707,7 @@ yyreduce:
 
   case 282:
 /* Line 1787 of yacc.c  */
-#line 3433 "Gmsh.y"
+#line 3497 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     }
@@ -8651,7 +8715,7 @@ yyreduce:
 
   case 283:
 /* Line 1787 of yacc.c  */
-#line 3437 "Gmsh.y"
+#line 3501 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
     }
@@ -8659,7 +8723,7 @@ yyreduce:
 
   case 284:
 /* Line 1787 of yacc.c  */
-#line 3441 "Gmsh.y"
+#line 3505 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
     }
@@ -8667,7 +8731,7 @@ yyreduce:
 
   case 285:
 /* Line 1787 of yacc.c  */
-#line 3445 "Gmsh.y"
+#line 3509 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     }
@@ -8675,7 +8739,7 @@ yyreduce:
 
   case 286:
 /* Line 1787 of yacc.c  */
-#line 3449 "Gmsh.y"
+#line 3513 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -8698,7 +8762,7 @@ yyreduce:
 
   case 287:
 /* Line 1787 of yacc.c  */
-#line 3468 "Gmsh.y"
+#line 3532 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -8710,7 +8774,7 @@ yyreduce:
 
   case 288:
 /* Line 1787 of yacc.c  */
-#line 3480 "Gmsh.y"
+#line 3544 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     }
@@ -8718,7 +8782,7 @@ yyreduce:
 
   case 289:
 /* Line 1787 of yacc.c  */
-#line 3484 "Gmsh.y"
+#line 3548 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -8735,7 +8799,7 @@ yyreduce:
 
   case 290:
 /* Line 1787 of yacc.c  */
-#line 3499 "Gmsh.y"
+#line 3563 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     }
@@ -8743,7 +8807,7 @@ yyreduce:
 
   case 291:
 /* Line 1787 of yacc.c  */
-#line 3503 "Gmsh.y"
+#line 3567 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -8761,7 +8825,7 @@ yyreduce:
 
   case 292:
 /* Line 1787 of yacc.c  */
-#line 3519 "Gmsh.y"
+#line 3583 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    }
@@ -8769,7 +8833,7 @@ yyreduce:
 
   case 293:
 /* Line 1787 of yacc.c  */
-#line 3523 "Gmsh.y"
+#line 3587 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    }
@@ -8777,7 +8841,7 @@ yyreduce:
 
   case 294:
 /* Line 1787 of yacc.c  */
-#line 3528 "Gmsh.y"
+#line 3592 "Gmsh.y"
     {
       (yyval.i) = 45;
     }
@@ -8785,7 +8849,7 @@ yyreduce:
 
   case 295:
 /* Line 1787 of yacc.c  */
-#line 3532 "Gmsh.y"
+#line 3596 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     }
@@ -8793,7 +8857,7 @@ yyreduce:
 
   case 296:
 /* Line 1787 of yacc.c  */
-#line 3538 "Gmsh.y"
+#line 3602 "Gmsh.y"
     {
       (yyval.l) = List_Create(1, 1, sizeof(double));
     }
@@ -8801,7 +8865,7 @@ yyreduce:
 
   case 297:
 /* Line 1787 of yacc.c  */
-#line 3542 "Gmsh.y"
+#line 3606 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
     }
@@ -8809,7 +8873,7 @@ yyreduce:
 
   case 298:
 /* Line 1787 of yacc.c  */
-#line 3549 "Gmsh.y"
+#line 3613 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -8869,7 +8933,7 @@ yyreduce:
 
   case 299:
 /* Line 1787 of yacc.c  */
-#line 3605 "Gmsh.y"
+#line 3669 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -8943,7 +9007,7 @@ yyreduce:
 
   case 300:
 /* Line 1787 of yacc.c  */
-#line 3675 "Gmsh.y"
+#line 3739 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -8952,7 +9016,7 @@ yyreduce:
 
   case 301:
 /* Line 1787 of yacc.c  */
-#line 3680 "Gmsh.y"
+#line 3744 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -9023,7 +9087,7 @@ yyreduce:
 
   case 302:
 /* Line 1787 of yacc.c  */
-#line 3747 "Gmsh.y"
+#line 3811 "Gmsh.y"
     {
       if(!(yyvsp[(2) - (3)].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -9063,7 +9127,7 @@ yyreduce:
 
   case 303:
 /* Line 1787 of yacc.c  */
-#line 3783 "Gmsh.y"
+#line 3847 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (7)].l)); i++){
 	double d;
@@ -9075,7 +9139,7 @@ yyreduce:
 
   case 304:
 /* Line 1787 of yacc.c  */
-#line 3791 "Gmsh.y"
+#line 3855 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -9122,7 +9186,7 @@ yyreduce:
 
   case 305:
 /* Line 1787 of yacc.c  */
-#line 3834 "Gmsh.y"
+#line 3898 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -9165,7 +9229,7 @@ yyreduce:
 
   case 306:
 /* Line 1787 of yacc.c  */
-#line 3873 "Gmsh.y"
+#line 3937 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -9189,7 +9253,7 @@ yyreduce:
 
   case 307:
 /* Line 1787 of yacc.c  */
-#line 3893 "Gmsh.y"
+#line 3957 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(5) - (6)].l)) != List_Nbr((yyvsp[(3) - (6)].l))){
 	yymsg(0, "Number of master (%d) different from number of slave (%d) lines",
@@ -9220,7 +9284,7 @@ yyreduce:
 
   case 308:
 /* Line 1787 of yacc.c  */
-#line 3921 "Gmsh.y"
+#line 3985 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(5) - (13)].l)) != List_Nbr((yyvsp[(10) - (13)].l))){
 	yymsg(0, "Number of master surface edges (%d) different from number of "
@@ -9272,7 +9336,7 @@ yyreduce:
 
   case 309:
 /* Line 1787 of yacc.c  */
-#line 3969 "Gmsh.y"
+#line 4033 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -9304,7 +9368,7 @@ yyreduce:
 
   case 310:
 /* Line 1787 of yacc.c  */
-#line 3997 "Gmsh.y"
+#line 4061 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -9336,7 +9400,7 @@ yyreduce:
 
   case 311:
 /* Line 1787 of yacc.c  */
-#line 4025 "Gmsh.y"
+#line 4089 "Gmsh.y"
     {
       Msg::Error("Point in Volume not implemented yet");
     }
@@ -9344,7 +9408,7 @@ yyreduce:
 
   case 312:
 /* Line 1787 of yacc.c  */
-#line 4029 "Gmsh.y"
+#line 4093 "Gmsh.y"
     {
       Msg::Error("Line in Volume not implemented yet");
     }
@@ -9352,7 +9416,7 @@ yyreduce:
 
   case 313:
 /* Line 1787 of yacc.c  */
-#line 4033 "Gmsh.y"
+#line 4097 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -9384,7 +9448,7 @@ yyreduce:
 
   case 314:
 /* Line 1787 of yacc.c  */
-#line 4061 "Gmsh.y"
+#line 4125 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -9427,7 +9491,7 @@ yyreduce:
 
   case 315:
 /* Line 1787 of yacc.c  */
-#line 4100 "Gmsh.y"
+#line 4164 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -9470,7 +9534,7 @@ yyreduce:
 
   case 316:
 /* Line 1787 of yacc.c  */
-#line 4139 "Gmsh.y"
+#line 4203 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::viter it = GModel::current()->firstVertex();
@@ -9495,7 +9559,7 @@ yyreduce:
 
   case 317:
 /* Line 1787 of yacc.c  */
-#line 4160 "Gmsh.y"
+#line 4224 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::eiter it = GModel::current()->firstEdge();
@@ -9520,7 +9584,7 @@ yyreduce:
 
   case 318:
 /* Line 1787 of yacc.c  */
-#line 4181 "Gmsh.y"
+#line 4245 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::fiter it = GModel::current()->firstFace();
@@ -9545,7 +9609,7 @@ yyreduce:
 
   case 319:
 /* Line 1787 of yacc.c  */
-#line 4208 "Gmsh.y"
+#line 4272 "Gmsh.y"
     {
       ReplaceAllDuplicates();
     }
@@ -9553,7 +9617,7 @@ yyreduce:
 
   case 320:
 /* Line 1787 of yacc.c  */
-#line 4212 "Gmsh.y"
+#line 4276 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -9567,7 +9631,7 @@ yyreduce:
 
   case 321:
 /* Line 1787 of yacc.c  */
-#line 4222 "Gmsh.y"
+#line 4286 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
         double d;
@@ -9601,25 +9665,25 @@ yyreduce:
 
   case 322:
 /* Line 1787 of yacc.c  */
-#line 4256 "Gmsh.y"
+#line 4320 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; }
     break;
 
   case 323:
 /* Line 1787 of yacc.c  */
-#line 4257 "Gmsh.y"
+#line 4321 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; }
     break;
 
   case 324:
 /* Line 1787 of yacc.c  */
-#line 4258 "Gmsh.y"
+#line 4322 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; }
     break;
 
   case 325:
 /* Line 1787 of yacc.c  */
-#line 4263 "Gmsh.y"
+#line 4327 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -9629,7 +9693,7 @@ yyreduce:
 
   case 326:
 /* Line 1787 of yacc.c  */
-#line 4269 "Gmsh.y"
+#line 4333 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -9645,7 +9709,7 @@ yyreduce:
 
   case 327:
 /* Line 1787 of yacc.c  */
-#line 4281 "Gmsh.y"
+#line 4345 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -9667,7 +9731,7 @@ yyreduce:
 
   case 328:
 /* Line 1787 of yacc.c  */
-#line 4299 "Gmsh.y"
+#line 4363 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -9694,55 +9758,55 @@ yyreduce:
 
   case 329:
 /* Line 1787 of yacc.c  */
-#line 4326 "Gmsh.y"
+#line 4390 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           }
     break;
 
   case 330:
 /* Line 1787 of yacc.c  */
-#line 4327 "Gmsh.y"
+#line 4391 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           }
     break;
 
   case 331:
 /* Line 1787 of yacc.c  */
-#line 4328 "Gmsh.y"
+#line 4392 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          }
     break;
 
   case 332:
 /* Line 1787 of yacc.c  */
-#line 4329 "Gmsh.y"
+#line 4393 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           }
     break;
 
   case 333:
 /* Line 1787 of yacc.c  */
-#line 4330 "Gmsh.y"
+#line 4394 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          }
     break;
 
   case 334:
 /* Line 1787 of yacc.c  */
-#line 4331 "Gmsh.y"
+#line 4395 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      }
     break;
 
   case 335:
 /* Line 1787 of yacc.c  */
-#line 4332 "Gmsh.y"
+#line 4396 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      }
     break;
 
   case 336:
 /* Line 1787 of yacc.c  */
-#line 4333 "Gmsh.y"
+#line 4397 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      }
     break;
 
   case 337:
 /* Line 1787 of yacc.c  */
-#line 4335 "Gmsh.y"
+#line 4399 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -9753,271 +9817,271 @@ yyreduce:
 
   case 338:
 /* Line 1787 of yacc.c  */
-#line 4341 "Gmsh.y"
+#line 4405 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  }
     break;
 
   case 339:
 /* Line 1787 of yacc.c  */
-#line 4342 "Gmsh.y"
+#line 4406 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  }
     break;
 
   case 340:
 /* Line 1787 of yacc.c  */
-#line 4343 "Gmsh.y"
+#line 4407 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      }
     break;
 
   case 341:
 /* Line 1787 of yacc.c  */
-#line 4344 "Gmsh.y"
+#line 4408 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      }
     break;
 
   case 342:
 /* Line 1787 of yacc.c  */
-#line 4345 "Gmsh.y"
+#line 4409 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     }
     break;
 
   case 343:
 /* Line 1787 of yacc.c  */
-#line 4346 "Gmsh.y"
+#line 4410 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     }
     break;
 
   case 344:
 /* Line 1787 of yacc.c  */
-#line 4347 "Gmsh.y"
+#line 4411 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     }
     break;
 
   case 345:
 /* Line 1787 of yacc.c  */
-#line 4348 "Gmsh.y"
+#line 4412 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     }
     break;
 
   case 346:
 /* Line 1787 of yacc.c  */
-#line 4349 "Gmsh.y"
+#line 4413 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     }
     break;
 
   case 347:
 /* Line 1787 of yacc.c  */
-#line 4350 "Gmsh.y"
+#line 4414 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     }
     break;
 
   case 348:
 /* Line 1787 of yacc.c  */
-#line 4351 "Gmsh.y"
+#line 4415 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); }
     break;
 
   case 349:
 /* Line 1787 of yacc.c  */
-#line 4352 "Gmsh.y"
+#line 4416 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      }
     break;
 
   case 350:
 /* Line 1787 of yacc.c  */
-#line 4353 "Gmsh.y"
+#line 4417 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      }
     break;
 
   case 351:
 /* Line 1787 of yacc.c  */
-#line 4354 "Gmsh.y"
+#line 4418 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    }
     break;
 
   case 352:
 /* Line 1787 of yacc.c  */
-#line 4355 "Gmsh.y"
+#line 4419 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     }
     break;
 
   case 353:
 /* Line 1787 of yacc.c  */
-#line 4356 "Gmsh.y"
+#line 4420 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      }
     break;
 
   case 354:
 /* Line 1787 of yacc.c  */
-#line 4357 "Gmsh.y"
+#line 4421 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     }
     break;
 
   case 355:
 /* Line 1787 of yacc.c  */
-#line 4358 "Gmsh.y"
+#line 4422 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      }
     break;
 
   case 356:
 /* Line 1787 of yacc.c  */
-#line 4359 "Gmsh.y"
+#line 4423 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     }
     break;
 
   case 357:
 /* Line 1787 of yacc.c  */
-#line 4360 "Gmsh.y"
+#line 4424 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      }
     break;
 
   case 358:
 /* Line 1787 of yacc.c  */
-#line 4361 "Gmsh.y"
+#line 4425 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     }
     break;
 
   case 359:
 /* Line 1787 of yacc.c  */
-#line 4362 "Gmsh.y"
+#line 4426 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));}
     break;
 
   case 360:
 /* Line 1787 of yacc.c  */
-#line 4363 "Gmsh.y"
+#line 4427 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 361:
 /* Line 1787 of yacc.c  */
-#line 4364 "Gmsh.y"
+#line 4428 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 362:
 /* Line 1787 of yacc.c  */
-#line 4365 "Gmsh.y"
+#line 4429 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 363:
 /* Line 1787 of yacc.c  */
-#line 4366 "Gmsh.y"
+#line 4430 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     }
     break;
 
   case 364:
 /* Line 1787 of yacc.c  */
-#line 4367 "Gmsh.y"
+#line 4431 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    }
     break;
 
   case 365:
 /* Line 1787 of yacc.c  */
-#line 4368 "Gmsh.y"
+#line 4432 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     }
     break;
 
   case 366:
 /* Line 1787 of yacc.c  */
-#line 4369 "Gmsh.y"
+#line 4433 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); }
     break;
 
   case 367:
 /* Line 1787 of yacc.c  */
-#line 4370 "Gmsh.y"
+#line 4434 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); }
     break;
 
   case 368:
 /* Line 1787 of yacc.c  */
-#line 4371 "Gmsh.y"
+#line 4435 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); }
     break;
 
   case 369:
 /* Line 1787 of yacc.c  */
-#line 4372 "Gmsh.y"
+#line 4436 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); }
     break;
 
   case 370:
 /* Line 1787 of yacc.c  */
-#line 4373 "Gmsh.y"
+#line 4437 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; }
     break;
 
   case 371:
 /* Line 1787 of yacc.c  */
-#line 4382 "Gmsh.y"
+#line 4446 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); }
     break;
 
   case 372:
 /* Line 1787 of yacc.c  */
-#line 4383 "Gmsh.y"
+#line 4447 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; }
     break;
 
   case 373:
 /* Line 1787 of yacc.c  */
-#line 4384 "Gmsh.y"
+#line 4448 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); }
     break;
 
   case 374:
 /* Line 1787 of yacc.c  */
-#line 4385 "Gmsh.y"
+#line 4449 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); }
     break;
 
   case 375:
 /* Line 1787 of yacc.c  */
-#line 4386 "Gmsh.y"
+#line 4450 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); }
     break;
 
   case 376:
 /* Line 1787 of yacc.c  */
-#line 4387 "Gmsh.y"
+#line 4451 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); }
     break;
 
   case 377:
 /* Line 1787 of yacc.c  */
-#line 4388 "Gmsh.y"
+#line 4452 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); }
     break;
 
   case 378:
 /* Line 1787 of yacc.c  */
-#line 4389 "Gmsh.y"
+#line 4453 "Gmsh.y"
     { (yyval.d) = Cpu(); }
     break;
 
   case 379:
 /* Line 1787 of yacc.c  */
-#line 4390 "Gmsh.y"
+#line 4454 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; }
     break;
 
   case 380:
 /* Line 1787 of yacc.c  */
-#line 4391 "Gmsh.y"
+#line 4455 "Gmsh.y"
     { (yyval.d) = TotalRam(); }
     break;
 
   case 381:
 /* Line 1787 of yacc.c  */
-#line 4396 "Gmsh.y"
+#line 4460 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); }
     break;
 
   case 382:
 /* Line 1787 of yacc.c  */
-#line 4398 "Gmsh.y"
+#line 4462 "Gmsh.y"
     {
       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -10027,7 +10091,7 @@ yyreduce:
 
   case 383:
 /* Line 1787 of yacc.c  */
-#line 4404 "Gmsh.y"
+#line 4468 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -10048,7 +10112,7 @@ yyreduce:
 
   case 384:
 /* Line 1787 of yacc.c  */
-#line 4421 "Gmsh.y"
+#line 4485 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -10070,7 +10134,7 @@ yyreduce:
 
   case 385:
 /* Line 1787 of yacc.c  */
-#line 4439 "Gmsh.y"
+#line 4503 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -10092,7 +10156,7 @@ yyreduce:
 
   case 386:
 /* Line 1787 of yacc.c  */
-#line 4457 "Gmsh.y"
+#line 4521 "Gmsh.y"
     {
       (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -10101,7 +10165,7 @@ yyreduce:
 
   case 387:
 /* Line 1787 of yacc.c  */
-#line 4462 "Gmsh.y"
+#line 4526 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.d) = !StatFile(tmp);
@@ -10111,7 +10175,7 @@ yyreduce:
 
   case 388:
 /* Line 1787 of yacc.c  */
-#line 4468 "Gmsh.y"
+#line 4532 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -10127,7 +10191,7 @@ yyreduce:
 
   case 389:
 /* Line 1787 of yacc.c  */
-#line 4480 "Gmsh.y"
+#line 4544 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -10148,7 +10212,7 @@ yyreduce:
 
   case 390:
 /* Line 1787 of yacc.c  */
-#line 4497 "Gmsh.y"
+#line 4561 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -10170,7 +10234,7 @@ yyreduce:
 
   case 391:
 /* Line 1787 of yacc.c  */
-#line 4515 "Gmsh.y"
+#line 4579 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -10192,7 +10256,7 @@ yyreduce:
 
   case 392:
 /* Line 1787 of yacc.c  */
-#line 4536 "Gmsh.y"
+#line 4600 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -10201,7 +10265,7 @@ yyreduce:
 
   case 393:
 /* Line 1787 of yacc.c  */
-#line 4541 "Gmsh.y"
+#line 4605 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -10210,7 +10274,7 @@ yyreduce:
 
   case 394:
 /* Line 1787 of yacc.c  */
-#line 4546 "Gmsh.y"
+#line 4610 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -10224,7 +10288,7 @@ yyreduce:
 
   case 395:
 /* Line 1787 of yacc.c  */
-#line 4556 "Gmsh.y"
+#line 4620 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -10238,7 +10302,7 @@ yyreduce:
 
   case 396:
 /* Line 1787 of yacc.c  */
-#line 4566 "Gmsh.y"
+#line 4630 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -10247,7 +10311,7 @@ yyreduce:
 
   case 397:
 /* Line 1787 of yacc.c  */
-#line 4571 "Gmsh.y"
+#line 4635 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -10260,7 +10324,7 @@ yyreduce:
 
   case 398:
 /* Line 1787 of yacc.c  */
-#line 4580 "Gmsh.y"
+#line 4644 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
@@ -10269,7 +10333,7 @@ yyreduce:
 
   case 399:
 /* Line 1787 of yacc.c  */
-#line 4585 "Gmsh.y"
+#line 4649 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -10297,7 +10361,7 @@ yyreduce:
 
   case 400:
 /* Line 1787 of yacc.c  */
-#line 4612 "Gmsh.y"
+#line 4676 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     }
@@ -10305,7 +10369,7 @@ yyreduce:
 
   case 401:
 /* Line 1787 of yacc.c  */
-#line 4616 "Gmsh.y"
+#line 4680 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     }
@@ -10313,7 +10377,7 @@ yyreduce:
 
   case 402:
 /* Line 1787 of yacc.c  */
-#line 4620 "Gmsh.y"
+#line 4684 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     }
@@ -10321,7 +10385,7 @@ yyreduce:
 
   case 403:
 /* Line 1787 of yacc.c  */
-#line 4624 "Gmsh.y"
+#line 4688 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     }
@@ -10329,7 +10393,7 @@ yyreduce:
 
   case 404:
 /* Line 1787 of yacc.c  */
-#line 4628 "Gmsh.y"
+#line 4692 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     }
@@ -10337,7 +10401,7 @@ yyreduce:
 
   case 405:
 /* Line 1787 of yacc.c  */
-#line 4635 "Gmsh.y"
+#line 4699 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     }
@@ -10345,7 +10409,7 @@ yyreduce:
 
   case 406:
 /* Line 1787 of yacc.c  */
-#line 4639 "Gmsh.y"
+#line 4703 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     }
@@ -10353,7 +10417,7 @@ yyreduce:
 
   case 407:
 /* Line 1787 of yacc.c  */
-#line 4643 "Gmsh.y"
+#line 4707 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     }
@@ -10361,7 +10425,7 @@ yyreduce:
 
   case 408:
 /* Line 1787 of yacc.c  */
-#line 4647 "Gmsh.y"
+#line 4711 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     }
@@ -10369,7 +10433,7 @@ yyreduce:
 
   case 409:
 /* Line 1787 of yacc.c  */
-#line 4654 "Gmsh.y"
+#line 4718 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -10378,7 +10442,7 @@ yyreduce:
 
   case 410:
 /* Line 1787 of yacc.c  */
-#line 4659 "Gmsh.y"
+#line 4723 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     }
@@ -10386,7 +10450,7 @@ yyreduce:
 
   case 411:
 /* Line 1787 of yacc.c  */
-#line 4666 "Gmsh.y"
+#line 4730 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -10395,7 +10459,7 @@ yyreduce:
 
   case 412:
 /* Line 1787 of yacc.c  */
-#line 4671 "Gmsh.y"
+#line 4735 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -10403,7 +10467,7 @@ yyreduce:
 
   case 413:
 /* Line 1787 of yacc.c  */
-#line 4675 "Gmsh.y"
+#line 4739 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -10412,7 +10476,7 @@ yyreduce:
 
   case 414:
 /* Line 1787 of yacc.c  */
-#line 4680 "Gmsh.y"
+#line 4744 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     }
@@ -10420,7 +10484,7 @@ yyreduce:
 
   case 415:
 /* Line 1787 of yacc.c  */
-#line 4684 "Gmsh.y"
+#line 4748 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -10432,7 +10496,7 @@ yyreduce:
 
   case 416:
 /* Line 1787 of yacc.c  */
-#line 4692 "Gmsh.y"
+#line 4756 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -10444,7 +10508,7 @@ yyreduce:
 
   case 417:
 /* Line 1787 of yacc.c  */
-#line 4703 "Gmsh.y"
+#line 4767 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -10452,7 +10516,7 @@ yyreduce:
 
   case 418:
 /* Line 1787 of yacc.c  */
-#line 4707 "Gmsh.y"
+#line 4771 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -10465,7 +10529,7 @@ yyreduce:
 
   case 419:
 /* Line 1787 of yacc.c  */
-#line 4719 "Gmsh.y"
+#line 4783 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -10477,7 +10541,7 @@ yyreduce:
 
   case 420:
 /* Line 1787 of yacc.c  */
-#line 4727 "Gmsh.y"
+#line 4791 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -10489,7 +10553,7 @@ yyreduce:
 
   case 421:
 /* Line 1787 of yacc.c  */
-#line 4735 "Gmsh.y"
+#line 4799 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d));
@@ -10500,7 +10564,7 @@ yyreduce:
 
   case 422:
 /* Line 1787 of yacc.c  */
-#line 4742 "Gmsh.y"
+#line 4806 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -10514,7 +10578,7 @@ yyreduce:
 
   case 423:
 /* Line 1787 of yacc.c  */
-#line 4752 "Gmsh.y"
+#line 4816 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -10547,7 +10611,7 @@ yyreduce:
 
   case 424:
 /* Line 1787 of yacc.c  */
-#line 4781 "Gmsh.y"
+#line 4845 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(0);
     }
@@ -10555,7 +10619,7 @@ yyreduce:
 
   case 425:
 /* Line 1787 of yacc.c  */
-#line 4785 "Gmsh.y"
+#line 4849 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(1);
     }
@@ -10563,7 +10627,7 @@ yyreduce:
 
   case 426:
 /* Line 1787 of yacc.c  */
-#line 4789 "Gmsh.y"
+#line 4853 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(2);
     }
@@ -10571,7 +10635,7 @@ yyreduce:
 
   case 427:
 /* Line 1787 of yacc.c  */
-#line 4793 "Gmsh.y"
+#line 4857 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(3);
     }
@@ -10579,7 +10643,7 @@ yyreduce:
 
   case 428:
 /* Line 1787 of yacc.c  */
-#line 4797 "Gmsh.y"
+#line 4861 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(0);
     }
@@ -10587,7 +10651,7 @@ yyreduce:
 
   case 429:
 /* Line 1787 of yacc.c  */
-#line 4801 "Gmsh.y"
+#line 4865 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(1);
     }
@@ -10595,7 +10659,7 @@ yyreduce:
 
   case 430:
 /* Line 1787 of yacc.c  */
-#line 4805 "Gmsh.y"
+#line 4869 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(2);
     }
@@ -10603,7 +10667,7 @@ yyreduce:
 
   case 431:
 /* Line 1787 of yacc.c  */
-#line 4809 "Gmsh.y"
+#line 4873 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(3);
     }
@@ -10611,7 +10675,7 @@ yyreduce:
 
   case 432:
 /* Line 1787 of yacc.c  */
-#line 4813 "Gmsh.y"
+#line 4877 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10644,7 +10708,7 @@ yyreduce:
 
   case 433:
 /* Line 1787 of yacc.c  */
-#line 4842 "Gmsh.y"
+#line 4906 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10677,7 +10741,7 @@ yyreduce:
 
   case 434:
 /* Line 1787 of yacc.c  */
-#line 4871 "Gmsh.y"
+#line 4935 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10710,7 +10774,7 @@ yyreduce:
 
   case 435:
 /* Line 1787 of yacc.c  */
-#line 4900 "Gmsh.y"
+#line 4964 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10743,7 +10807,7 @@ yyreduce:
 
   case 436:
 /* Line 1787 of yacc.c  */
-#line 4930 "Gmsh.y"
+#line 4994 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -10759,7 +10823,7 @@ yyreduce:
 
   case 437:
 /* Line 1787 of yacc.c  */
-#line 4943 "Gmsh.y"
+#line 5007 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -10775,7 +10839,7 @@ yyreduce:
 
   case 438:
 /* Line 1787 of yacc.c  */
-#line 4956 "Gmsh.y"
+#line 5020 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -10791,7 +10855,7 @@ yyreduce:
 
   case 439:
 /* Line 1787 of yacc.c  */
-#line 4969 "Gmsh.y"
+#line 5033 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -10807,7 +10871,7 @@ yyreduce:
 
   case 440:
 /* Line 1787 of yacc.c  */
-#line 4981 "Gmsh.y"
+#line 5045 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -10821,7 +10885,7 @@ yyreduce:
 
   case 441:
 /* Line 1787 of yacc.c  */
-#line 4991 "Gmsh.y"
+#line 5055 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -10835,7 +10899,7 @@ yyreduce:
 
   case 442:
 /* Line 1787 of yacc.c  */
-#line 5001 "Gmsh.y"
+#line 5065 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -10851,7 +10915,7 @@ yyreduce:
 
   case 443:
 /* Line 1787 of yacc.c  */
-#line 5013 "Gmsh.y"
+#line 5077 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -10867,7 +10931,7 @@ yyreduce:
 
   case 444:
 /* Line 1787 of yacc.c  */
-#line 5025 "Gmsh.y"
+#line 5089 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -10883,7 +10947,7 @@ yyreduce:
 
   case 445:
 /* Line 1787 of yacc.c  */
-#line 5037 "Gmsh.y"
+#line 5101 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -10905,7 +10969,7 @@ yyreduce:
 
   case 446:
 /* Line 1787 of yacc.c  */
-#line 5055 "Gmsh.y"
+#line 5119 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -10927,7 +10991,7 @@ yyreduce:
 
   case 447:
 /* Line 1787 of yacc.c  */
-#line 5076 "Gmsh.y"
+#line 5140 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -10936,7 +11000,7 @@ yyreduce:
 
   case 448:
 /* Line 1787 of yacc.c  */
-#line 5081 "Gmsh.y"
+#line 5145 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -10944,7 +11008,7 @@ yyreduce:
 
   case 449:
 /* Line 1787 of yacc.c  */
-#line 5085 "Gmsh.y"
+#line 5149 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     }
@@ -10952,7 +11016,7 @@ yyreduce:
 
   case 450:
 /* Line 1787 of yacc.c  */
-#line 5089 "Gmsh.y"
+#line 5153 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -10965,7 +11029,7 @@ yyreduce:
 
   case 451:
 /* Line 1787 of yacc.c  */
-#line 5101 "Gmsh.y"
+#line 5165 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     }
@@ -10973,7 +11037,7 @@ yyreduce:
 
   case 452:
 /* Line 1787 of yacc.c  */
-#line 5105 "Gmsh.y"
+#line 5169 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     }
@@ -10981,7 +11045,7 @@ yyreduce:
 
   case 453:
 /* Line 1787 of yacc.c  */
-#line 5117 "Gmsh.y"
+#line 5181 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(-1, (yyvsp[(1) - (1)].c), &flag);
@@ -10992,7 +11056,7 @@ yyreduce:
 
   case 454:
 /* Line 1787 of yacc.c  */
-#line 5124 "Gmsh.y"
+#line 5188 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -11003,7 +11067,7 @@ yyreduce:
 
   case 455:
 /* Line 1787 of yacc.c  */
-#line 5134 "Gmsh.y"
+#line 5198 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     }
@@ -11011,7 +11075,7 @@ yyreduce:
 
   case 456:
 /* Line 1787 of yacc.c  */
-#line 5138 "Gmsh.y"
+#line 5202 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -11027,7 +11091,7 @@ yyreduce:
 
   case 457:
 /* Line 1787 of yacc.c  */
-#line 5153 "Gmsh.y"
+#line 5217 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -11036,7 +11100,7 @@ yyreduce:
 
   case 458:
 /* Line 1787 of yacc.c  */
-#line 5158 "Gmsh.y"
+#line 5222 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     }
@@ -11044,7 +11108,7 @@ yyreduce:
 
   case 459:
 /* Line 1787 of yacc.c  */
-#line 5165 "Gmsh.y"
+#line 5229 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     }
@@ -11052,7 +11116,7 @@ yyreduce:
 
   case 460:
 /* Line 1787 of yacc.c  */
-#line 5169 "Gmsh.y"
+#line 5233 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -11069,7 +11133,7 @@ yyreduce:
 
   case 461:
 /* Line 1787 of yacc.c  */
-#line 5182 "Gmsh.y"
+#line 5246 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -11081,7 +11145,7 @@ yyreduce:
 
   case 462:
 /* Line 1787 of yacc.c  */
-#line 5190 "Gmsh.y"
+#line 5254 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -11093,7 +11157,7 @@ yyreduce:
 
   case 463:
 /* Line 1787 of yacc.c  */
-#line 5201 "Gmsh.y"
+#line 5265 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     }
@@ -11101,7 +11165,7 @@ yyreduce:
 
   case 464:
 /* Line 1787 of yacc.c  */
-#line 5205 "Gmsh.y"
+#line 5269 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -11113,7 +11177,7 @@ yyreduce:
 
   case 465:
 /* Line 1787 of yacc.c  */
-#line 5213 "Gmsh.y"
+#line 5277 "Gmsh.y"
     {
       std::string action = Msg::GetGmshOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
@@ -11123,7 +11187,7 @@ yyreduce:
 
   case 466:
 /* Line 1787 of yacc.c  */
-#line 5219 "Gmsh.y"
+#line 5283 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -11135,7 +11199,7 @@ yyreduce:
 
   case 467:
 /* Line 1787 of yacc.c  */
-#line 5227 "Gmsh.y"
+#line 5291 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -11147,7 +11211,7 @@ yyreduce:
 
   case 468:
 /* Line 1787 of yacc.c  */
-#line 5235 "Gmsh.y"
+#line 5299 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -11166,7 +11230,7 @@ yyreduce:
 
   case 469:
 /* Line 1787 of yacc.c  */
-#line 5250 "Gmsh.y"
+#line 5314 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -11184,7 +11248,7 @@ yyreduce:
 
   case 470:
 /* Line 1787 of yacc.c  */
-#line 5264 "Gmsh.y"
+#line 5328 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -11202,7 +11266,7 @@ yyreduce:
 
   case 471:
 /* Line 1787 of yacc.c  */
-#line 5278 "Gmsh.y"
+#line 5342 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -11218,7 +11282,7 @@ yyreduce:
 
   case 472:
 /* Line 1787 of yacc.c  */
-#line 5290 "Gmsh.y"
+#line 5354 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -11238,7 +11302,7 @@ yyreduce:
 
   case 473:
 /* Line 1787 of yacc.c  */
-#line 5306 "Gmsh.y"
+#line 5370 "Gmsh.y"
     {
       if((yyvsp[(3) - (8)].d)){
         (yyval.c) = (yyvsp[(5) - (8)].c);
@@ -11253,7 +11317,7 @@ yyreduce:
 
   case 474:
 /* Line 1787 of yacc.c  */
-#line 5317 "Gmsh.y"
+#line 5381 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     }
@@ -11261,7 +11325,7 @@ yyreduce:
 
   case 475:
 /* Line 1787 of yacc.c  */
-#line 5321 "Gmsh.y"
+#line 5385 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -11284,7 +11348,7 @@ yyreduce:
 
   case 476:
 /* Line 1787 of yacc.c  */
-#line 5340 "Gmsh.y"
+#line 5404 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -11295,13 +11359,13 @@ yyreduce:
 
   case 477:
 /* Line 1787 of yacc.c  */
-#line 5347 "Gmsh.y"
+#line 5411 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); }
     break;
 
   case 478:
 /* Line 1787 of yacc.c  */
-#line 5349 "Gmsh.y"
+#line 5413 "Gmsh.y"
     {
       std::string val((yyvsp[(3) - (6)].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -11313,7 +11377,7 @@ yyreduce:
 
   case 479:
 /* Line 1787 of yacc.c  */
-#line 5360 "Gmsh.y"
+#line 5424 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
@@ -11322,13 +11386,13 @@ yyreduce:
 
   case 480:
 /* Line 1787 of yacc.c  */
-#line 5365 "Gmsh.y"
+#line 5429 "Gmsh.y"
     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); }
     break;
 
   case 481:
 /* Line 1787 of yacc.c  */
-#line 5371 "Gmsh.y"
+#line 5435 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -11340,7 +11404,7 @@ yyreduce:
 
   case 482:
 /* Line 1787 of yacc.c  */
-#line 5380 "Gmsh.y"
+#line 5444 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -11352,19 +11416,19 @@ yyreduce:
 
   case 483:
 /* Line 1787 of yacc.c  */
-#line 5393 "Gmsh.y"
+#line 5457 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); }
     break;
 
   case 484:
 /* Line 1787 of yacc.c  */
-#line 5396 "Gmsh.y"
+#line 5460 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); }
     break;
 
 
 /* Line 1787 of yacc.c  */
-#line 11368 "Gmsh.tab.cpp"
+#line 11432 "Gmsh.tab.cpp"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -11596,7 +11660,7 @@ yyreturn:
 
 
 /* Line 2050 of yacc.c  */
-#line 5400 "Gmsh.y"
+#line 5464 "Gmsh.y"
 
 
 void assignVariable(const std::string &name, int index, int assignType,
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 9c2a70342b1096e1e214c011409b384b846ca1a5..a8a1c87445cdef13c26a8b2f6d865b19ebd6bc83 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1368,18 +1368,34 @@ Shape :
       $$.Type = MSH_POINT;
       $$.Num = num;
     }
-  | tPhysical tPoint '(' PhysicalId0 ')' tAFFECT ListOfDouble tEND
+  | tPhysical tPoint '(' PhysicalId0 ')' NumericAffectation ListOfDouble tEND
     {
       int num = (int)$4;
-      if(FindPhysicalGroup(num, MSH_PHYSICAL_POINT)){
+      int op = $6;
+      PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_POINT);
+      if(p && op == 0){
 	yymsg(0, "Physical point %d already exists", num);
       }
-      else{
+      else if(!p && op > 0){
+	yymsg(0, "Physical point %d does not exists", num);
+      }
+      else if(op == 0){
 	List_T *temp = ListOfDouble2ListOfInt($7);
-	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
+	p = Create_PhysicalGroup(num, MSH_PHYSICAL_POINT, temp);
 	List_Delete(temp);
 	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
+      else if(op == 1){
+        for(int i = 0; i < List_Nbr($7); i++){
+          double d;
+          List_Read($7, i, &d);
+          int j = (int)d;
+          List_Add(p->Entities, &j);
+        }
+      }
+      else{
+	yymsg(0, "Unsupported operation on physical point %d", num);
+      }
       List_Delete($7);
       $$.Type = MSH_PHYSICAL_POINT;
       $$.Num = num;
@@ -1623,18 +1639,34 @@ Shape :
       $$.Type = MSH_SEGM_COMPOUND;
       $$.Num = num;
     }
-  | tPhysical tLine '(' PhysicalId1 ')' tAFFECT ListOfDouble tEND
+  | tPhysical tLine '(' PhysicalId1 ')' NumericAffectation ListOfDouble tEND
     {
       int num = (int)$4;
-      if(FindPhysicalGroup(num, MSH_PHYSICAL_LINE)){
+      int op = $6;
+      PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_LINE);
+      if(p && op == 0){
 	yymsg(0, "Physical line %d already exists", num);
       }
-      else{
+      else if(!p && op > 0){
+	yymsg(0, "Physical line %d does not exists", num);
+      }
+      else if(op == 0){
 	List_T *temp = ListOfDouble2ListOfInt($7);
-	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
+	p = Create_PhysicalGroup(num, MSH_PHYSICAL_LINE, temp);
 	List_Delete(temp);
 	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
+      else if(op == 1){
+        for(int i = 0; i < List_Nbr($7); i++){
+          double d;
+          List_Read($7, i, &d);
+          int j = (int)d;
+          List_Add(p->Entities, &j);
+        }
+      }
+      else{
+	yymsg(0, "Unsupported operation on physical line %d", num);
+      }
       List_Delete($7);
       $$.Type = MSH_PHYSICAL_LINE;
       $$.Num = num;
@@ -1838,18 +1870,34 @@ Shape :
       $$.Type = MSH_SURF_COMPOUND;
       $$.Num = num;
     }
-  | tPhysical tSurface '(' PhysicalId2 ')' tAFFECT ListOfDouble tEND
+  | tPhysical tSurface '(' PhysicalId2 ')' NumericAffectation ListOfDouble tEND
     {
       int num = (int)$4;
-      if(FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE)){
+      int op = $6;
+      PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE);
+      if(p && op == 0){
 	yymsg(0, "Physical surface %d already exists", num);
       }
-      else{
+      else if(!p && op > 0){
+	yymsg(0, "Physical surface %d does not exists", num);
+      }
+      else if(op == 0){
 	List_T *temp = ListOfDouble2ListOfInt($7);
-	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
+	p = Create_PhysicalGroup(num, MSH_PHYSICAL_SURFACE, temp);
 	List_Delete(temp);
 	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
+      else if(op == 1){
+        for(int i = 0; i < List_Nbr($7); i++){
+          double d;
+          List_Read($7, i, &d);
+          int j = (int)d;
+          List_Add(p->Entities, &j);
+        }
+      }
+      else{
+	yymsg(0, "Unsupported operation on physical surface %d", num);
+      }
       List_Delete($7);
       $$.Type = MSH_PHYSICAL_SURFACE;
       $$.Num = num;
@@ -1909,18 +1957,34 @@ Shape :
       $$.Type = MSH_VOLUME_COMPOUND;
       $$.Num = num;
     }
-  | tPhysical tVolume '(' PhysicalId3 ')' tAFFECT ListOfDouble tEND
+  | tPhysical tVolume '(' PhysicalId3 ')' NumericAffectation ListOfDouble tEND
     {
       int num = (int)$4;
-      if(FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME)){
+      int op = $6;
+      PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME);
+      if(p && op == 0){
 	yymsg(0, "Physical volume %d already exists", num);
       }
-      else{
+      else if(!p && op > 0){
+	yymsg(0, "Physical volume %d does not exists", num);
+      }
+      else if(op == 0){
 	List_T *temp = ListOfDouble2ListOfInt($7);
-	PhysicalGroup *p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
+	p = Create_PhysicalGroup(num, MSH_PHYSICAL_VOLUME, temp);
 	List_Delete(temp);
 	List_Add(GModel::current()->getGEOInternals()->PhysicalGroups, &p);
       }
+      else if(op == 1){
+        for(int i = 0; i < List_Nbr($7); i++){
+          double d;
+          List_Read($7, i, &d);
+          int j = (int)d;
+          List_Add(p->Entities, &j);
+        }
+      }
+      else{
+	yymsg(0, "Unsupported operation on physical volume %d", num);
+      }
       List_Delete($7);
       $$.Type = MSH_PHYSICAL_VOLUME;
       $$.Num = num;