diff --git a/locale/gen_combined/grilledham_map_gen/data/template.lua b/locale/gen_combined/grilledham_map_gen/data/template.lua index 829cb205..dcb4e273 100644 --- a/locale/gen_combined/grilledham_map_gen/data/template.lua +++ b/locale/gen_combined/grilledham_map_gen/data/template.lua @@ -1,27 +1,193 @@ +-- data is pairs of (tile number, count) the tile numbers are stored in tile_map in builders.lua. + return { -height = 20, -width = 20, -data = - { - {6,10,14,10}, - {6,10,14,10}, - {6,10,14,10}, - {6,10,14,10}, - {6,10,14,10}, - {6,10,14,10}, - {6,10,14,10}, - {6,10,14,10}, - {6,10,14,10}, - {6,10,14,10}, - {23,10,27,10}, - {23,10,27,10}, - {23,10,27,10}, - {23,10,27,10}, - {23,10,27,10}, - {23,10,27,10}, - {23,10,27,10}, - {23,10,27,10}, - {23,10,27,10}, - {23,10,27,10}, - } +height = 185, +width = 272, +data = { + {28,1,27,53,28,16,27,133,28,15,27,54,}, + {28,1,27,53,28,17,27,132,28,15,27,54,}, + {28,2,27,51,28,17,27,133,28,13,27,56,}, + {28,2,27,50,28,19,27,111,28,2,27,19,28,13,27,1,28,2,27,21,28,1,27,31,}, + {28,3,27,47,28,5,29,1,28,16,27,108,28,7,27,16,28,13,27,1,28,2,27,24,28,1,27,28,}, + {28,3,27,45,28,6,29,4,28,24,27,94,28,12,27,15,28,16,27,24,28,3,29,1,27,25,}, + {28,3,27,44,28,5,29,8,28,23,27,93,28,14,27,13,28,17,27,23,28,1,27,1,28,1,29,1,27,25,}, + {28,3,27,43,28,6,29,8,28,23,27,93,28,15,27,12,28,13,29,1,28,1,27,1,28,3,27,23,28,1,26,1,27,25,}, + {29,1,28,2,27,43,28,6,29,8,28,24,27,89,28,24,27,11,28,5,27,59,}, + {28,3,27,44,28,5,29,8,28,24,27,89,28,25,27,10,28,4,27,1,28,1,27,58,}, + {28,3,27,44,28,7,29,4,28,26,27,88,28,28,27,8,28,3,27,61,}, + {28,3,27,45,28,6,29,2,28,22,29,2,28,4,27,87,28,29,27,10,28,1,27,13,28,1,27,47,}, + {28,3,27,45,28,6,29,2,28,20,29,6,28,3,27,85,28,10,29,4,28,16,27,72,}, + {28,3,27,45,28,25,29,9,28,4,27,74,28,18,29,8,28,14,27,72,}, + {27,1,28,1,27,3,28,1,27,1,28,5,27,36,28,21,29,14,28,3,27,74,28,14,29,13,28,13,27,72,}, + {27,4,28,1,27,1,28,9,27,33,28,20,29,15,28,4,27,73,28,14,29,13,28,19,27,1,28,1,27,64,}, + {27,3,28,11,29,1,28,7,27,26,28,8,29,1,28,2,27,2,29,2,27,1,29,1,28,2,29,2,28,1,29,1,6,1,29,12,28,4,27,69,28,17,29,19,28,11,27,68,}, + {27,4,28,10,29,1,28,7,27,26,28,8,29,1,28,3,27,1,28,2,27,1,29,1,28,2,29,2,28,1,29,16,28,2,27,72,28,14,29,20,28,11,27,67,}, + {27,3,28,10,29,4,28,7,27,25,28,12,27,2,28,3,29,22,28,1,27,74,28,12,29,19,28,10,27,68,}, + {27,3,28,9,29,6,28,6,27,24,28,9,29,4,27,2,29,1,28,1,29,23,28,3,27,74,28,3,27,2,28,6,29,19,28,9,27,68,}, + {27,3,28,8,29,8,28,5,27,25,28,8,29,4,27,2,29,27,28,2,27,78,28,6,29,19,28,9,27,68,}, + {27,3,28,7,29,10,28,4,27,27,28,1,27,1,28,4,29,4,28,1,27,1,28,1,29,27,28,1,27,79,28,6,29,19,28,8,27,68,}, + {27,4,28,5,29,12,28,3,27,30,28,4,29,5,27,1,29,2,28,1,27,2,29,3,6,8,29,12,28,2,27,77,28,7,29,18,28,8,27,68,}, + {27,4,28,4,29,14,28,2,27,31,28,3,29,5,27,1,28,1,29,1,27,3,28,1,29,3,6,7,29,12,28,2,27,78,28,6,29,19,28,7,27,68,}, + {27,4,28,5,29,13,28,2,27,29,28,5,29,5,27,2,29,1,27,4,28,1,27,1,29,1,13,1,29,1,6,2,13,1,6,3,29,2,6,2,29,10,28,2,27,76,28,11,29,8,28,1,29,4,28,2,29,1,28,1,29,2,27,1,28,1,27,2,28,1,27,64,}, + {27,4,28,4,29,14,28,3,27,28,28,3,29,7,27,10,29,1,6,1,29,1,6,1,29,1,6,3,29,5,6,3,29,7,27,79,28,9,29,8,26,1,29,2,28,1,29,1,28,1,29,1,28,3,29,1,27,1,28,1,27,67,}, + {27,4,28,4,29,16,28,2,27,27,28,3,29,2,28,2,29,1,27,1,29,2,27,12,29,5,6,2,13,2,6,2,29,9,27,80,28,10,29,7,28,1,29,1,28,1,29,3,28,1,27,1,28,1,27,2,28,1,27,67,}, + {27,4,28,3,29,17,28,3,27,26,28,3,29,5,27,18,13,1,27,1,6,1,29,1,6,2,29,1,6,1,29,1,6,1,29,7,27,82,28,10,29,7,26,1,27,1,29,1,28,2,27,1,29,1,27,70,}, + {27,3,28,5,29,8,6,2,29,6,28,5,27,24,28,3,29,2,6,3,27,20,6,3,29,4,6,2,29,6,27,84,28,12,29,1,28,1,29,2,27,1,29,3,27,72,}, + {27,4,28,3,29,7,6,5,29,7,28,4,27,23,28,3,29,5,28,1,29,1,27,4,28,1,27,1,6,2,29,2,6,1,13,1,27,8,6,2,13,1,29,2,6,2,29,6,27,85,28,11,29,1,28,1,6,1,28,1,27,1,28,1,27,74,}, + {27,4,28,3,29,6,6,7,29,7,28,4,27,22,28,3,29,2,6,2,29,1,27,5,28,1,29,1,6,2,13,2,6,1,13,2,29,2,28,1,27,7,6,1,29,1,6,4,29,5,27,85,28,11,29,1,28,1,6,1,27,77,}, + {27,3,28,4,29,5,6,8,29,7,28,5,27,21,28,3,29,1,27,1,29,2,27,5,28,1,29,1,13,1,9,1,13,1,6,1,13,3,29,1,9,1,13,1,9,1,13,1,27,1,6,1,27,6,13,1,6,2,29,6,27,85,28,11,27,80,}, + {27,3,28,3,29,4,6,13,29,5,28,6,27,17,28,1,29,5,13,1,29,1,6,1,28,1,27,4,29,1,13,1,9,2,16,2,9,5,13,6,27,7,29,2,28,1,29,3,27,1,28,1,27,1,28,1,27,23,29,1,27,1,13,1,28,1,29,6,28,1,27,54,29,1,27,25,28,1,27,42,28,2,27,14,}, + {27,3,28,2,29,5,6,8,13,2,6,4,29,6,28,5,27,16,28,1,29,7,6,1,29,1,27,4,6,1,9,2,11,1,17,2,11,4,9,6,13,1,6,1,29,1,27,6,29,1,27,3,29,2,27,24,28,1,27,1,29,3,6,1,29,1,27,1,13,1,29,4,27,50,28,3,27,14,28,1,27,55,28,2,27,14,}, + {27,3,28,2,29,5,6,2,13,3,6,2,13,4,6,3,29,8,28,4,27,15,28,1,29,7,13,1,29,1,27,3,29,1,13,1,11,3,17,4,16,4,11,3,13,5,27,31,28,1,29,1,27,2,29,1,27,1,29,2,28,1,6,2,27,1,13,1,29,1,27,1,29,2,27,123,28,2,27,3,28,1,27,10,}, + {27,1,28,3,29,5,6,2,13,10,6,4,29,7,28,5,27,13,28,1,29,7,6,2,29,1,27,3,13,1,9,1,16,3,17,7,16,4,9,3,13,1,9,2,29,1,27,29,28,1,29,2,27,1,29,1,27,5,29,1,27,1,29,1,27,63,28,1,27,4,28,1,29,1,27,2,28,1,27,1,28,1,27,53,28,1,27,3,28,1,27,10,}, + {28,3,29,5,6,2,13,12,6,5,29,8,28,3,27,10,28,2,29,8,13,1,6,1,29,2,27,2,9,1,11,1,16,3,17,7,16,4,17,1,9,1,13,1,11,1,9,1,13,2,9,1,29,1,27,29,28,1,27,9,29,2,27,65,28,1,29,1,28,1,29,1,9,1,29,1,28,1,27,55,28,2,27,1,28,2,27,10,}, + {28,1,29,7,6,2,13,13,6,6,29,8,28,3,27,7,28,2,29,8,6,1,13,1,6,1,29,2,27,2,11,1,16,1,17,9,16,6,9,2,16,1,9,1,13,3,17,1,29,1,27,38,29,2,27,58,29,1,6,1,29,1,27,2,29,3,6,1,29,1,27,1,29,3,27,55,28,2,27,1,28,2,27,10,}, + {29,8,6,1,13,14,6,6,29,10,28,1,27,7,28,1,29,9,6,1,13,1,6,1,29,1,28,1,27,1,29,1,11,1,16,1,17,3,16,1,17,5,16,5,11,2,17,2,11,1,16,1,11,1,9,1,11,1,9,1,13,1,27,96,28,1,6,1,13,1,29,1,28,1,29,1,13,2,29,3,28,1,27,6,28,2,27,50,28,5,27,10,}, + {29,7,6,2,13,16,6,5,29,10,27,6,28,2,29,8,6,3,13,1,29,1,27,2,6,1,11,1,16,1,17,3,16,3,17,4,16,4,17,1,11,2,16,4,11,1,9,1,11,1,9,2,27,95,29,4,6,1,13,3,29,2,13,1,9,1,6,1,13,2,7,1,13,1,29,1,28,1,27,51,28,5,27,10,}, + {29,4,6,4,13,19,6,5,29,11,28,3,27,1,28,1,29,8,6,4,29,1,27,2,6,1,9,1,11,1,16,1,17,6,16,4,17,4,16,2,17,2,11,2,16,3,17,1,11,1,9,1,6,1,27,90,6,1,13,3,6,3,13,1,29,1,28,2,29,4,28,1,8,1,6,3,28,2,29,1,27,7,28,1,27,42,28,4,27,11,}, + {29,3,6,5,13,20,6,4,29,11,28,5,29,8,6,3,13,1,29,1,27,2,6,1,16,2,17,4,16,2,11,1,16,1,17,4,16,2,17,1,16,2,17,1,16,1,9,3,11,2,16,2,11,1,9,1,29,1,27,87,28,1,29,6,28,1,29,4,13,6,27,2,28,1,29,1,28,1,29,1,6,1,29,1,27,49,28,4,27,11,}, + {29,3,6,3,13,22,6,4,29,22,6,2,29,1,6,1,13,2,6,1,29,1,27,1,6,1,16,2,17,5,16,2,11,2,9,2,11,1,16,2,17,3,16,2,11,1,9,3,11,5,9,1,13,1,27,85,29,1,9,1,16,1,13,4,29,4,6,1,29,4,13,1,8,1,9,1,10,1,8,1,13,1,6,1,28,3,27,50,28,5,27,10,}, + {6,5,13,24,6,3,29,22,6,4,13,3,29,1,27,1,13,1,11,1,16,2,17,5,16,2,17,4,16,3,17,6,16,1,11,1,16,1,9,3,11,1,17,1,11,1,9,1,29,1,27,76,28,1,29,1,27,3,29,1,28,1,6,1,13,2,6,8,9,4,8,1,13,2,6,2,29,5,6,1,29,1,27,20,28,7,27,22,28,6,27,9,}, + {6,2,13,26,6,4,29,21,6,4,13,3,6,1,29,1,27,1,13,1,16,4,17,4,16,2,17,3,16,4,17,2,16,2,17,2,16,1,17,2,9,2,11,1,16,1,17,1,9,1,17,1,9,1,29,1,27,2,13,2,29,1,6,2,29,2,28,1,27,24,28,1,27,37,28,2,29,2,6,1,27,1,28,2,29,1,6,1,13,1,29,1,6,4,13,5,28,1,29,1,6,1,13,2,7,1,6,1,7,1,29,1,28,2,27,5,28,1,27,15,28,12,27,22,28,6,27,8,}, + {13,27,6,5,29,21,6,3,13,4,6,1,29,1,27,1,13,1,17,5,16,3,17,1,16,1,11,2,9,1,11,2,16,2,17,2,16,4,11,1,17,4,16,3,9,1,16,1,17,1,11,1,6,1,28,1,29,1,6,2,8,1,13,2,6,1,29,1,28,2,27,57,28,1,27,2,29,3,28,1,27,2,6,1,29,2,6,1,13,1,29,1,9,1,6,2,29,2,6,2,29,2,13,2,6,4,29,1,28,1,29,2,28,1,27,4,29,1,27,16,28,16,27,18,28,2,29,2,28,2,27,8,}, + {13,25,6,4,29,3,6,1,29,19,6,4,13,4,6,1,29,1,27,1,13,1,17,8,16,1,17,5,16,1,11,1,16,1,17,2,16,4,11,2,17,3,16,3,17,1,11,1,16,2,11,1,13,1,28,1,29,1,13,1,8,1,13,1,9,1,6,1,13,1,29,1,6,1,29,1,27,1,28,1,27,9,28,1,27,16,28,1,27,21,28,2,29,3,28,1,29,1,28,1,27,1,29,2,27,3,6,1,13,1,8,1,9,1,13,2,29,2,6,2,29,1,6,1,13,3,6,1,13,1,29,2,6,1,9,2,6,1,28,1,6,1,29,1,27,5,29,1,27,16,28,16,27,18,28,1,29,3,28,2,27,8,}, + {13,24,6,5,29,3,6,2,29,18,6,5,13,4,29,1,27,1,6,1,17,12,16,2,17,2,16,2,17,6,11,1,9,1,11,1,9,1,11,1,17,5,11,2,16,1,9,1,6,2,8,1,13,1,12,1,6,1,8,1,29,1,6,1,29,1,28,1,29,1,27,7,28,1,27,1,29,2,27,13,28,4,27,6,28,1,27,2,29,1,27,9,28,1,29,2,6,1,13,1,6,1,29,5,28,1,27,1,29,1,6,1,10,1,13,2,9,1,13,1,9,1,13,1,6,2,29,4,6,1,29,2,13,1,6,1,29,2,13,1,8,1,13,1,7,1,6,1,29,1,27,3,28,1,27,18,28,16,27,18,28,1,29,5,27,8,}, + {13,14,6,2,13,4,6,8,29,23,6,5,13,5,29,1,27,1,29,1,17,2,16,2,17,6,16,2,11,2,16,2,9,9,11,7,17,2,16,3,17,2,29,2,9,2,6,2,9,1,13,1,6,1,29,1,6,1,29,1,27,5,28,1,6,1,28,1,29,1,27,11,29,1,27,3,29,3,27,4,29,1,27,4,29,1,27,8,28,1,6,2,13,1,6,1,13,2,29,5,27,1,6,1,8,1,13,2,9,1,11,1,9,1,13,5,9,1,13,1,29,1,9,1,13,3,8,2,13,1,8,1,9,2,13,2,6,2,29,1,27,10,28,1,27,8,28,8,29,2,28,8,27,16,28,7,29,1,27,8,}, + {13,14,6,2,13,3,6,8,29,24,6,5,13,5,29,1,27,1,29,1,16,1,17,10,16,1,11,1,9,2,11,1,9,8,11,8,17,4,16,1,11,1,17,1,11,1,13,1,29,1,13,2,29,2,13,2,29,1,6,1,29,1,27,2,28,2,27,2,29,2,27,4,28,1,27,5,28,1,29,2,27,2,28,1,6,2,29,1,28,1,27,3,29,1,27,4,29,1,27,8,28,1,13,6,29,1,6,2,27,2,6,1,9,1,13,1,8,1,11,1,9,1,13,4,8,2,13,1,9,2,13,1,9,3,11,1,16,3,11,1,9,2,8,1,13,1,9,1,8,1,13,2,6,1,7,1,29,1,27,15,28,8,29,2,28,8,27,16,28,7,29,1,27,8,}, + {13,14,6,2,13,2,6,9,29,24,6,5,13,5,6,1,27,2,11,1,17,8,16,1,11,2,9,3,11,5,9,4,11,8,16,3,17,2,11,1,16,1,17,1,11,1,29,1,6,3,29,1,8,1,13,1,6,2,29,1,28,2,29,1,28,1,27,1,28,3,27,9,28,1,29,3,27,2,28,1,6,2,29,1,27,2,29,1,27,1,28,1,27,7,29,1,27,1,28,1,27,1,29,2,28,1,13,2,9,2,6,1,29,1,6,1,29,1,27,1,28,1,29,1,13,1,9,3,13,1,6,1,29,4,6,2,29,1,6,1,13,1,9,2,16,1,10,1,9,3,10,1,9,4,10,1,6,2,8,1,9,2,8,1,29,1,27,14,28,9,29,2,28,8,27,16,28,6,29,2,28,1,27,7,}, + {13,14,6,12,29,26,6,5,13,5,29,1,27,1,9,1,16,1,17,7,16,2,11,3,16,2,11,6,9,4,11,3,16,3,17,1,16,1,11,1,17,3,16,1,17,1,11,1,9,1,6,1,29,1,13,5,6,1,29,5,27,1,28,1,27,7,28,1,29,2,28,2,29,2,28,1,27,1,28,1,29,1,6,1,13,1,29,1,27,2,6,1,27,1,29,1,27,6,28,1,6,1,28,1,29,1,27,1,29,3,13,1,9,1,13,1,9,1,29,3,27,2,13,1,9,2,13,1,11,1,8,1,13,8,6,2,13,1,6,2,13,1,9,6,8,2,9,2,17,1,12,1,10,1,9,1,8,1,9,1,8,1,29,1,27,6,28,1,27,1,28,1,27,3,28,10,29,3,28,1,29,1,28,5,27,15,28,7,29,3,27,7,}, + {13,14,6,12,29,26,6,5,13,5,6,1,27,1,9,1,16,1,17,11,16,3,11,5,9,5,11,2,16,1,17,3,16,1,17,5,16,1,17,1,9,1,17,1,9,1,29,2,13,1,6,1,29,1,6,1,29,6,27,4,29,1,27,4,28,1,29,2,28,2,29,2,28,1,29,2,6,1,13,2,6,1,29,3,28,2,27,5,28,1,29,1,7,1,29,2,28,1,29,3,9,2,6,1,13,1,6,1,29,1,27,2,13,1,9,1,13,1,16,1,9,1,13,1,9,2,13,1,6,1,13,2,9,2,13,1,6,1,29,1,13,1,29,1,6,1,29,1,13,1,29,1,6,1,29,3,6,4,13,3,8,2,13,1,29,1,27,6,28,19,29,2,28,9,27,11,28,7,29,4,27,7,}, + {9,2,13,12,6,10,29,28,6,5,13,6,27,1,9,1,16,1,17,5,11,1,17,4,16,4,11,4,9,6,11,2,16,1,17,6,16,1,17,2,16,3,11,1,9,2,28,1,13,1,6,1,27,1,29,7,28,1,27,3,29,2,27,4,28,1,29,6,6,1,29,1,13,1,8,1,13,1,29,3,28,3,27,1,28,1,27,1,28,1,29,3,6,1,29,6,13,1,8,2,13,1,27,2,29,2,9,2,13,1,9,4,13,8,9,1,13,1,11,1,13,1,9,1,13,1,9,1,29,1,13,1,6,3,13,1,9,3,7,1,6,1,7,1,6,1,29,3,27,6,28,19,29,3,28,9,27,9,28,8,29,4,27,7,}, + {9,2,13,12,6,8,29,2,6,1,29,28,6,6,13,4,28,1,6,1,16,1,17,4,16,2,11,3,16,5,11,3,9,8,11,2,16,2,17,4,16,1,17,2,16,2,17,1,11,1,9,1,10,1,29,1,6,2,28,2,29,3,6,2,29,2,28,2,27,1,28,1,29,1,28,1,27,2,28,3,29,6,28,1,13,1,9,1,6,1,29,2,28,1,27,1,29,2,28,1,29,1,28,2,29,1,28,1,29,1,6,1,29,6,6,1,13,1,11,1,6,1,27,2,13,1,9,1,8,1,10,1,9,1,6,1,9,1,16,1,9,1,13,1,9,4,13,1,9,2,10,1,9,1,13,1,29,2,6,1,13,8,6,2,29,1,13,1,9,2,6,1,29,1,28,1,27,6,28,18,29,4,28,11,27,6,28,9,29,4,28,1,27,6,}, + {9,3,13,11,6,7,29,31,6,7,13,4,29,2,11,1,17,4,16,1,17,6,16,3,11,3,9,3,13,2,9,4,11,4,17,1,16,1,17,6,9,1,16,1,9,1,13,1,29,2,28,1,29,1,28,2,29,1,6,5,27,1,29,2,27,1,29,1,27,1,28,1,29,2,28,1,29,3,28,1,27,1,28,1,29,1,28,1,13,1,11,1,6,1,29,2,27,1,28,1,6,2,29,1,6,1,27,2,28,1,27,1,29,6,6,1,29,1,13,3,29,1,6,3,9,1,11,1,13,1,8,1,9,1,11,1,9,1,11,1,13,2,6,4,13,2,9,2,11,1,16,1,11,2,9,1,13,1,29,2,6,2,29,4,8,1,13,2,6,1,29,1,28,1,27,6,28,1,27,1,28,17,29,4,28,12,27,4,28,9,29,6,27,6,}, + {9,3,13,11,6,5,29,33,6,5,13,2,6,1,13,2,6,1,29,1,27,1,16,1,17,9,16,1,11,4,17,2,11,1,13,2,9,3,13,2,9,1,11,1,16,1,17,4,16,1,11,1,17,3,16,1,11,2,13,1,9,1,13,1,6,1,27,1,29,1,28,1,29,1,28,1,29,1,13,2,6,2,29,1,28,1,29,1,28,3,27,1,28,1,29,1,27,1,28,1,27,1,29,2,27,1,29,1,6,1,29,2,13,1,8,1,29,1,6,1,29,1,6,1,28,1,29,2,6,1,13,1,29,2,28,1,27,1,29,1,6,2,29,1,13,1,29,1,13,1,29,1,6,2,13,1,6,1,13,3,9,3,11,3,9,1,13,1,6,2,13,1,11,1,13,1,6,1,29,3,13,1,9,2,13,3,9,1,8,1,13,1,6,2,29,4,13,1,6,1,13,1,6,1,29,1,27,9,28,16,29,2,28,24,29,10,27,6,}, + {9,3,13,11,6,6,29,32,6,5,13,2,6,1,13,2,6,1,29,1,27,1,9,1,17,5,16,1,11,3,16,2,17,4,11,1,13,3,9,2,13,2,9,2,11,1,16,4,17,6,16,1,11,1,9,2,13,2,6,1,29,3,6,1,29,2,6,1,13,2,6,1,29,4,28,2,27,1,28,1,29,1,27,2,29,2,28,2,29,1,13,1,29,4,28,1,29,1,27,2,29,3,6,1,13,1,6,1,13,2,28,1,29,1,13,1,6,1,8,1,13,1,6,1,29,1,6,3,13,5,9,2,10,1,11,2,16,1,17,3,16,1,11,1,9,1,13,2,9,3,13,1,29,1,13,1,11,1,17,2,11,3,10,1,9,1,13,1,6,1,13,2,7,1,29,1,6,1,29,3,27,7,28,18,29,1,28,24,29,8,28,1,29,2,27,5,}, + {9,3,13,11,6,6,29,19,6,2,29,11,6,6,13,1,6,1,13,2,6,1,29,1,27,1,13,1,17,2,16,1,17,3,16,4,17,5,9,1,6,1,13,2,9,3,11,3,16,5,11,2,16,1,11,1,17,1,11,1,16,1,11,1,9,2,13,5,6,2,29,2,6,1,13,2,29,2,6,1,29,3,6,2,29,1,27,1,28,1,29,1,13,1,29,1,27,1,29,2,6,1,29,6,27,1,29,5,6,1,29,1,13,2,29,1,13,2,6,1,9,1,6,2,29,1,13,2,6,1,13,9,9,1,11,1,17,2,9,1,13,1,9,1,13,1,9,1,13,1,10,1,13,1,28,1,6,1,13,1,29,1,27,2,6,1,10,1,17,4,9,3,12,1,11,1,9,1,8,1,6,2,29,1,27,7,28,18,29,1,28,24,29,8,28,1,29,2,27,5,}, + {13,7,9,1,13,7,6,6,29,14,6,10,29,6,6,9,13,2,6,1,29,1,27,1,28,1,16,1,17,1,16,1,17,7,16,3,17,1,11,1,9,1,13,3,9,2,11,1,9,2,11,2,16,3,17,5,16,2,11,2,9,1,11,1,13,3,9,1,13,3,6,1,29,2,13,2,29,4,6,2,9,1,13,1,28,1,27,1,29,1,6,1,13,1,29,1,28,1,29,4,13,1,6,1,29,4,13,1,29,1,6,1,29,3,6,1,13,1,7,1,6,1,9,1,13,1,9,1,7,1,6,3,8,1,13,2,8,1,13,3,9,5,11,3,9,3,16,1,9,1,8,2,9,1,13,2,8,2,9,2,6,1,29,1,27,1,28,1,29,1,13,1,9,5,13,3,29,1,28,1,27,8,28,2,27,1,28,2,27,1,28,13,29,2,28,5,29,1,28,1,29,1,28,14,29,8,28,1,29,2,27,5,}, + {13,5,9,3,13,8,6,5,29,12,6,14,29,3,6,11,13,1,6,1,29,1,27,2,9,1,17,9,16,3,17,1,13,2,9,1,13,2,9,2,11,4,9,5,11,1,17,1,16,1,17,1,11,1,17,1,11,1,16,1,11,1,16,1,9,3,13,1,6,1,9,1,13,2,29,2,13,1,6,1,29,2,28,1,29,1,10,1,13,1,8,1,6,1,29,2,28,1,29,5,6,1,29,2,13,1,6,1,29,4,13,1,29,1,13,2,29,2,9,2,13,1,29,1,9,1,13,1,9,1,13,1,6,1,29,2,9,3,13,2,9,4,11,1,16,3,11,3,17,2,16,2,10,1,17,1,16,1,9,2,11,1,9,1,13,2,6,1,9,2,28,2,27,1,28,1,29,1,6,1,13,1,9,1,8,1,13,1,6,1,29,1,27,16,28,19,29,5,28,12,29,10,28,1,29,1,27,4,}, + {13,4,9,5,13,7,6,6,29,10,6,29,13,1,6,1,29,1,27,2,6,1,17,8,16,5,13,1,9,1,11,1,9,1,11,1,16,2,11,1,17,2,16,1,11,1,9,2,13,3,9,1,13,1,17,1,9,1,17,1,11,1,16,3,11,1,16,1,9,1,13,2,9,1,13,2,6,4,29,1,6,1,29,1,6,1,9,1,13,2,29,2,6,1,27,3,28,1,29,2,13,1,29,1,13,1,8,1,6,1,29,1,6,1,29,3,28,1,6,1,13,1,29,1,6,1,10,1,9,1,13,4,6,1,8,1,29,1,6,2,9,2,13,1,6,1,9,1,11,2,13,3,9,3,11,1,16,2,17,1,11,1,13,1,9,2,17,2,11,1,9,1,10,1,13,1,11,2,9,1,11,1,9,1,11,1,9,1,13,1,29,3,6,1,13,1,8,1,6,1,29,1,28,1,27,17,28,11,29,14,28,6,29,14,28,1,29,2,27,3,}, + {13,4,9,5,8,1,13,6,6,12,29,4,6,24,29,1,6,5,29,2,27,2,28,1,16,1,17,7,16,1,11,1,9,4,11,2,16,1,17,4,16,2,11,1,9,6,11,1,13,1,16,1,11,1,17,1,11,2,16,1,11,1,16,1,11,1,9,1,13,4,6,3,29,2,6,1,13,4,29,1,9,1,6,2,29,1,27,3,29,5,13,1,8,1,6,1,29,1,13,1,29,3,28,1,29,1,6,2,29,1,9,1,8,1,9,2,13,2,29,1,13,1,6,1,13,1,9,1,10,1,13,2,6,1,9,1,10,1,16,1,9,3,13,1,9,1,11,1,16,2,11,1,17,1,11,1,9,1,13,3,11,1,16,2,17,1,13,1,9,1,13,3,6,1,13,3,9,3,13,1,6,2,29,2,27,18,28,11,29,34,28,1,29,2,27,3,}, + {13,4,9,5,13,7,6,12,29,3,6,25,29,1,6,5,29,2,27,3,9,1,17,6,16,1,11,2,9,3,11,1,9,1,11,1,16,1,17,1,16,1,17,3,16,1,11,1,9,1,13,1,6,3,13,2,6,1,9,2,17,1,11,2,16,1,9,1,11,1,9,3,11,1,13,2,6,1,13,2,29,2,13,5,6,1,9,1,6,1,13,1,29,1,28,1,27,1,29,3,6,1,29,1,6,1,29,1,13,1,6,1,29,1,6,1,28,1,29,2,6,3,13,1,6,1,9,1,13,1,9,1,13,4,6,1,13,1,6,1,16,1,9,1,13,3,9,2,11,2,16,3,11,1,9,4,13,2,16,2,9,1,13,1,9,1,16,1,10,1,11,1,13,1,9,1,17,1,11,1,16,1,13,2,6,1,29,2,13,1,9,3,27,1,28,2,27,20,28,10,29,1,28,1,29,1,28,1,29,1,28,1,29,30,28,1,29,2,}, + {6,1,13,4,9,3,13,8,6,39,29,1,6,1,29,2,6,4,29,1,28,1,27,2,29,1,11,1,17,5,16,1,11,1,9,2,11,4,16,1,17,7,9,2,13,1,29,1,27,2,29,1,6,1,11,1,17,1,11,2,17,2,11,1,9,1,11,2,17,1,9,2,13,2,11,1,29,1,6,3,13,2,6,1,9,2,13,1,29,4,28,1,27,1,29,1,6,1,27,1,28,1,13,1,29,1,6,1,13,2,29,2,27,1,29,1,6,2,29,3,13,1,9,1,13,4,9,2,13,3,10,1,13,1,8,1,29,1,6,1,9,1,16,1,9,1,11,1,17,1,11,2,9,1,16,1,9,1,11,1,9,1,17,1,16,1,9,2,17,5,9,1,16,1,17,1,13,2,9,2,11,1,8,1,13,2,6,1,29,2,6,2,13,1,29,1,27,25,28,8,29,36,}, + {6,1,13,4,9,2,13,9,6,41,29,2,6,3,29,2,27,2,29,1,13,1,11,1,17,3,16,1,17,3,11,1,9,2,11,1,9,3,11,2,16,1,17,4,9,1,13,1,29,1,27,1,29,1,6,1,13,3,9,3,11,2,16,1,11,2,9,2,13,1,9,1,10,1,13,1,9,1,6,1,13,5,9,2,13,1,6,1,29,1,6,2,29,1,28,1,27,1,29,1,6,1,27,1,28,1,6,1,27,1,6,1,13,1,6,2,29,1,27,1,29,1,6,1,29,1,28,1,27,1,29,1,6,1,9,1,13,1,8,1,13,1,8,2,13,4,8,1,6,1,13,1,9,2,13,2,9,1,11,1,9,2,11,1,9,1,16,1,9,1,11,1,9,1,6,1,9,1,16,1,17,3,16,1,17,2,16,1,17,1,16,1,13,1,9,1,16,1,10,1,9,3,13,1,6,1,29,1,28,1,27,2,28,1,27,26,28,8,29,36,}, + {6,1,13,15,6,1,13,2,6,34,29,1,6,3,29,3,6,2,29,2,27,2,29,1,9,1,16,4,17,3,16,1,11,1,9,3,11,2,16,1,17,6,11,1,9,2,13,1,29,1,6,2,9,1,11,2,17,3,11,1,9,1,16,1,11,2,9,2,13,1,9,1,11,1,13,1,9,1,13,1,9,3,13,1,8,3,13,4,6,1,29,1,6,1,29,3,27,2,6,1,29,2,6,1,27,1,13,1,28,2,29,3,27,2,29,2,13,1,6,1,8,1,13,1,9,1,13,4,9,1,6,1,13,2,9,2,6,1,13,1,9,4,11,1,16,2,11,2,9,2,11,2,17,5,9,1,16,1,17,1,16,1,9,1,11,1,17,1,11,1,9,1,13,1,6,1,29,2,6,1,29,1,27,1,29,1,28,1,27,27,28,7,29,36,}, + {6,2,13,16,6,39,29,3,6,2,29,2,27,3,13,1,16,5,11,1,9,2,16,1,17,3,16,2,17,7,11,2,17,1,16,1,10,1,9,1,13,2,9,1,8,1,13,1,9,3,11,1,16,1,9,3,11,1,9,1,13,2,9,1,13,1,9,2,13,2,6,1,13,1,6,1,13,2,9,1,13,2,29,1,6,1,13,1,29,4,27,1,29,3,6,1,27,1,8,1,29,1,28,1,29,1,28,1,29,1,28,2,29,2,13,1,6,1,13,8,6,1,13,6,9,2,16,1,11,2,16,3,9,1,13,1,16,1,17,2,16,1,17,1,16,1,11,1,16,3,9,4,17,2,16,1,9,1,6,1,29,2,13,1,8,1,13,1,6,1,29,1,27,28,28,7,29,35,}, + {6,2,13,16,6,39,29,6,28,1,27,3,6,1,9,2,11,1,17,1,9,3,11,1,17,13,11,3,9,5,11,1,9,2,11,2,9,1,11,2,9,2,11,2,9,1,13,2,11,1,13,1,9,1,13,3,6,1,13,1,6,1,13,3,29,3,13,1,27,2,28,1,29,2,27,1,29,1,27,1,29,2,28,1,13,1,29,1,28,2,27,1,29,1,28,1,29,2,6,2,13,3,6,1,13,5,9,1,29,1,13,1,9,3,13,2,16,1,17,1,16,1,11,1,16,3,11,1,9,2,17,5,16,1,17,1,11,1,9,1,13,1,11,1,17,1,9,1,11,2,9,2,13,1,29,1,27,2,29,1,6,1,28,1,27,30,28,6,29,35,}, + {6,2,13,16,6,15,13,7,6,17,29,6,28,1,27,3,29,1,9,1,11,1,16,2,11,1,16,1,17,15,9,2,13,2,9,1,13,1,9,4,11,1,17,2,9,1,13,1,9,3,11,1,9,1,13,2,9,2,6,1,13,3,6,2,13,4,8,1,6,1,29,3,27,1,29,2,27,1,29,3,27,1,29,4,28,1,27,3,6,1,27,1,28,1,27,1,6,2,8,1,9,1,13,1,29,1,6,1,29,1,6,1,13,2,16,1,28,1,13,1,9,1,13,1,9,1,13,2,17,1,16,1,11,1,16,1,11,1,16,4,17,3,11,2,13,1,6,2,13,1,9,2,17,3,9,1,13,1,9,1,11,2,13,1,29,1,28,1,27,34,28,5,29,35,}, + {29,1,6,2,13,16,6,12,13,9,6,17,29,6,27,4,28,1,13,1,16,3,17,11,16,2,11,1,16,2,17,1,11,2,9,1,11,2,13,1,9,1,11,1,9,3,11,1,16,1,11,1,9,1,11,2,9,1,11,1,13,3,9,2,6,1,13,3,6,2,13,4,9,1,13,1,6,1,29,3,6,1,29,1,27,1,29,3,28,1,29,2,6,1,28,2,29,1,27,2,29,1,27,3,6,1,13,4,6,1,29,2,6,1,13,2,9,1,6,1,13,1,8,1,13,3,9,1,11,1,9,2,16,1,9,1,16,1,9,1,16,1,11,1,9,1,16,1,17,1,16,1,11,1,9,1,11,1,17,1,11,5,17,1,16,1,11,1,9,2,13,4,29,1,27,33,28,6,29,34,}, + {29,1,6,2,13,17,6,9,13,1,6,2,13,8,6,17,29,5,28,1,27,4,28,1,6,1,9,1,17,12,16,1,11,7,17,1,9,1,13,2,6,1,9,1,29,2,13,1,11,1,9,3,13,1,11,1,9,1,13,1,11,1,9,2,13,2,9,1,13,1,9,3,29,1,6,1,29,1,9,1,8,1,13,1,9,1,13,1,6,1,29,1,6,2,29,1,28,1,27,1,13,1,27,2,28,1,27,1,29,2,27,2,29,1,27,2,28,1,27,2,29,1,13,2,29,2,13,2,29,1,6,1,13,2,9,1,29,1,6,2,9,2,13,2,9,1,13,1,11,1,9,1,11,1,9,1,17,1,9,2,13,1,17,2,9,1,11,1,17,2,11,1,9,1,11,1,9,1,17,8,9,1,13,2,11,1,13,1,27,33,28,6,29,34,}, + {6,4,13,10,6,1,13,1,6,11,13,14,6,13,29,8,27,6,29,1,13,1,11,1,17,11,16,1,9,1,11,1,17,1,16,1,13,1,9,1,16,2,9,1,13,3,6,1,9,1,13,1,29,1,13,1,6,1,9,1,13,1,9,3,16,1,29,1,16,1,17,1,13,2,11,1,13,2,17,1,11,1,13,2,6,1,9,2,17,1,29,4,9,1,29,1,28,1,29,2,6,1,29,1,27,1,13,1,27,1,29,2,28,1,27,3,29,2,27,2,7,1,13,2,27,1,29,1,13,1,29,1,27,1,29,1,9,1,13,1,6,1,13,1,6,1,13,4,6,1,11,1,9,1,6,1,13,1,11,1,9,1,17,1,9,1,13,1,17,2,16,1,9,2,17,2,9,1,17,1,11,1,17,2,13,1,29,1,13,1,11,1,16,1,17,4,8,2,16,1,29,1,27,34,28,3,29,35,}, + {6,5,13,9,6,15,13,11,6,1,13,1,6,13,29,7,27,5,28,1,29,1,13,1,9,1,11,1,17,10,16,2,17,3,11,2,16,1,17,1,11,1,9,1,13,5,6,1,9,2,17,1,13,1,29,1,11,1,13,1,17,1,29,1,16,1,9,2,13,1,11,1,13,2,11,2,9,2,13,3,11,1,6,1,29,1,6,2,9,1,29,3,27,1,6,1,27,1,28,1,6,1,29,1,6,1,29,2,27,4,29,1,27,1,29,1,6,1,9,1,28,1,27,2,6,1,27,2,29,1,9,1,6,2,8,1,13,2,29,1,13,2,9,1,29,1,13,1,6,2,29,1,9,1,11,1,9,2,17,2,16,2,17,1,9,1,13,1,9,1,13,4,9,3,11,1,17,4,9,2,12,1,13,1,27,35,28,4,29,34,}, + {29,1,6,4,13,7,6,17,13,12,6,14,29,7,27,6,29,1,13,2,9,1,11,1,16,1,17,12,16,1,11,1,17,1,16,1,11,1,9,2,11,1,9,2,13,1,9,7,13,2,16,1,9,1,13,1,17,1,16,2,11,1,13,1,9,1,11,2,9,2,11,1,13,2,9,1,13,1,29,1,13,3,6,2,29,1,27,1,29,1,27,1,29,1,6,1,28,1,29,3,28,1,29,1,28,2,29,1,28,1,29,2,13,1,27,1,28,1,29,5,8,1,29,2,6,3,9,2,13,1,29,1,17,1,27,1,13,2,27,1,16,1,6,1,11,1,9,1,17,1,13,2,9,1,13,1,9,1,11,1,13,1,9,2,13,3,9,3,11,1,9,1,16,1,9,1,13,1,11,2,28,1,27,36,28,3,29,34,}, + {29,2,6,3,13,6,6,19,13,13,6,13,29,6,27,7,29,1,13,3,11,1,17,12,16,1,11,1,16,1,17,1,16,1,9,2,16,2,9,5,13,2,9,1,17,1,13,2,11,1,9,1,13,3,11,1,9,1,13,1,9,1,11,1,16,1,11,1,13,1,16,1,17,1,9,1,13,2,29,1,13,1,6,1,29,1,13,1,8,1,29,2,27,2,28,1,29,2,6,1,29,2,28,2,27,2,28,1,29,3,6,1,27,1,29,1,6,1,27,1,29,1,13,2,9,1,6,1,29,3,6,1,13,1,29,1,6,1,11,1,29,1,28,1,11,1,13,2,29,1,13,2,17,1,9,2,17,1,13,1,9,1,17,1,11,1,9,1,13,3,9,6,11,1,17,1,9,1,11,1,9,1,29,1,27,37,28,5,29,32,}, + {29,2,6,4,13,3,6,7,29,1,6,15,13,12,6,12,29,6,27,7,28,1,29,1,6,1,29,1,9,1,17,9,16,2,17,2,16,1,9,1,16,1,17,1,11,1,9,2,11,1,17,1,9,3,16,1,9,2,13,1,11,1,17,2,9,1,17,1,13,1,9,1,29,1,17,1,13,1,6,1,13,1,9,1,16,1,17,1,9,1,16,1,17,1,16,1,9,1,13,1,29,1,6,2,29,1,8,1,9,1,29,1,6,1,28,1,27,2,29,1,6,2,29,2,28,2,27,2,29,1,13,1,29,3,27,3,28,1,6,1,13,1,11,1,9,1,6,1,29,1,6,1,29,1,13,1,28,1,13,1,9,1,29,2,13,2,6,1,9,2,13,1,16,1,11,1,13,1,17,1,13,1,17,1,16,1,9,1,11,1,13,2,9,1,13,2,16,2,9,2,17,1,16,1,17,2,16,1,6,1,27,39,28,4,29,32,}, + {29,3,6,3,13,2,6,8,29,8,6,8,13,13,6,11,29,1,6,1,29,4,27,8,29,3,13,1,9,1,16,1,17,7,16,5,11,1,9,1,11,1,17,1,11,1,13,1,9,1,17,1,11,2,13,3,9,4,11,1,17,1,9,1,16,1,13,1,9,1,16,1,28,1,29,1,9,1,11,2,17,5,9,1,13,1,28,1,29,1,6,1,13,1,9,1,13,2,6,1,29,1,27,2,28,1,13,1,6,1,29,4,27,2,6,1,13,1,29,1,27,1,29,1,27,3,13,1,9,1,13,1,17,1,13,1,29,1,28,1,13,1,9,1,29,1,9,1,6,1,13,1,29,2,13,2,28,1,9,1,13,1,9,1,13,4,9,2,17,1,13,1,29,1,9,5,16,1,17,4,16,1,17,2,13,1,28,1,27,39,28,4,29,32,}, + {29,3,6,4,13,1,6,6,29,10,6,8,13,14,6,12,29,4,28,1,27,6,28,1,29,3,6,1,13,2,11,1,17,8,11,1,9,1,11,1,16,1,9,2,17,2,9,2,16,1,11,1,9,1,13,1,29,2,13,1,9,2,13,1,16,2,9,1,13,1,9,1,16,1,13,1,29,1,6,1,13,1,16,3,17,4,11,1,6,1,29,2,6,2,13,3,6,1,29,4,8,1,13,1,6,1,13,1,29,1,28,1,27,2,29,1,13,1,29,1,27,2,29,1,27,1,29,1,8,1,9,1,8,1,10,1,13,1,6,1,29,1,10,1,6,2,27,1,29,1,6,2,27,1,29,1,9,1,6,1,28,1,29,1,28,1,6,1,13,1,11,1,13,1,11,1,17,1,9,3,13,1,11,1,29,1,9,1,16,1,17,4,9,1,17,2,16,1,29,1,27,41,28,4,29,31,}, + {29,3,6,10,29,11,6,8,13,15,6,11,29,4,28,1,27,6,28,1,29,1,6,1,29,1,6,3,13,1,16,1,17,7,16,1,11,1,17,1,9,1,16,1,17,1,16,3,11,2,17,1,9,3,17,1,16,1,9,1,13,1,9,1,29,1,6,1,9,1,13,1,29,1,13,1,29,1,17,1,6,1,29,1,17,2,16,1,17,1,16,1,17,2,9,1,29,1,13,1,29,3,6,1,13,1,6,2,27,1,13,1,29,1,6,1,13,3,8,1,6,1,29,1,27,1,28,1,27,1,6,1,28,1,27,2,29,1,27,1,29,1,13,1,16,2,13,2,6,3,29,1,27,1,29,1,6,1,27,2,28,1,13,1,27,1,29,3,9,1,13,1,9,1,13,1,11,1,9,3,13,1,9,1,16,1,6,1,11,1,16,2,9,1,13,1,6,1,13,1,9,2,11,1,13,1,27,1,28,1,27,40,28,3,29,27,6,5,}, + {29,3,6,6,29,18,6,6,13,21,6,2,29,7,28,1,27,5,29,5,6,1,11,1,9,1,6,1,9,1,17,4,9,1,11,1,17,1,11,1,13,1,9,1,11,1,17,1,16,1,11,3,9,1,13,2,6,1,13,1,9,1,16,1,17,1,11,1,13,2,17,1,13,2,9,1,13,1,29,1,13,1,9,1,6,1,29,1,17,2,16,1,17,1,16,1,17,1,16,1,29,1,6,1,13,2,28,1,13,2,6,1,29,1,28,1,29,2,13,2,9,1,13,1,29,3,28,2,29,1,28,1,29,1,27,1,28,1,27,1,29,3,16,1,13,1,9,2,13,1,6,1,28,1,29,4,27,1,28,1,29,1,13,1,28,1,6,2,29,1,11,1,6,1,13,1,9,1,13,3,11,1,13,1,11,1,13,1,9,1,16,1,9,1,13,1,9,1,11,3,16,2,9,1,29,1,27,45,28,4,29,18,6,2,29,1,6,7,}, + {29,3,6,5,29,19,6,6,13,23,6,4,29,4,27,4,28,1,29,1,6,3,29,1,6,1,13,1,8,1,13,1,9,1,17,1,16,1,11,1,9,1,13,1,9,1,16,1,9,1,13,2,9,1,11,1,16,3,9,1,13,1,9,2,13,4,9,2,29,1,13,1,9,3,13,3,6,4,13,1,11,1,16,1,17,2,16,1,11,1,13,3,6,1,27,1,13,3,6,1,29,3,6,1,9,1,13,1,6,2,13,1,29,6,27,3,29,2,11,1,17,1,6,1,13,1,8,1,13,1,6,1,29,1,28,1,27,1,29,1,6,1,27,1,28,1,29,2,27,2,13,2,9,1,6,3,29,1,6,1,17,1,29,1,16,1,10,1,6,1,13,1,9,1,11,1,16,2,9,5,13,1,29,1,27,45,28,5,29,15,6,12,}, + {29,3,6,5,29,9,28,1,29,9,6,6,13,23,6,6,29,2,27,5,29,1,13,1,9,1,13,6,9,3,8,1,6,2,13,2,9,1,13,3,9,4,13,2,9,1,13,2,9,2,13,3,9,1,6,1,13,3,9,1,6,1,9,1,13,1,29,2,13,2,11,1,17,1,16,1,17,1,16,1,9,1,13,1,9,1,13,1,6,1,28,1,29,1,13,3,29,1,13,1,6,2,8,1,13,2,29,1,13,1,6,2,29,3,27,1,28,1,27,2,28,1,13,1,10,1,16,1,9,2,13,1,29,1,28,1,13,1,27,1,28,1,29,1,28,1,6,1,13,1,29,3,28,1,13,1,28,1,27,1,6,2,29,1,13,1,6,1,13,1,11,1,9,1,6,1,13,2,9,1,11,1,10,1,13,1,29,2,6,1,13,2,6,1,29,1,28,1,27,44,28,5,29,15,6,12,}, + {6,8,29,8,28,3,29,9,6,5,13,28,6,2,29,1,27,5,29,1,10,1,17,1,11,1,9,1,13,5,6,1,13,1,6,1,29,1,6,2,29,1,13,4,9,2,13,3,9,3,13,2,11,2,9,1,11,1,9,1,13,1,28,1,9,1,16,2,9,1,29,1,11,1,6,1,29,1,13,2,11,1,17,3,16,1,9,1,13,2,6,2,29,2,13,3,6,1,9,1,13,2,9,1,11,2,6,1,13,1,29,1,13,1,6,1,29,1,13,1,29,1,27,3,29,2,9,1,13,1,8,2,13,1,6,1,27,1,29,2,27,4,29,2,27,3,29,3,9,2,29,2,28,1,13,1,9,1,27,1,9,1,13,1,9,1,8,1,9,2,13,1,29,2,28,1,27,1,6,1,29,2,28,1,27,44,28,5,29,15,6,12,}, + {6,2,29,12,28,7,29,8,6,4,13,29,6,2,27,5,29,1,9,3,13,1,6,2,13,2,29,1,28,1,29,2,28,1,6,2,29,1,6,1,13,1,6,1,13,1,9,3,13,4,11,1,9,1,13,4,9,1,11,1,13,3,9,1,17,1,9,2,13,2,6,2,13,2,9,1,17,3,16,1,13,2,6,4,13,3,6,1,9,1,13,2,17,1,11,1,9,1,13,2,29,1,13,1,9,1,13,2,6,1,27,3,29,2,6,1,8,1,17,1,9,1,29,1,27,2,6,1,27,4,9,1,13,1,29,1,6,1,13,1,6,1,27,1,29,2,28,2,27,2,29,1,28,1,29,1,13,1,6,1,10,1,9,2,13,2,6,1,29,1,28,1,27,2,28,2,27,46,28,5,29,15,6,12,}, + {6,3,29,10,28,11,29,5,6,4,13,29,6,2,29,1,27,4,28,1,29,7,28,2,29,1,28,2,29,1,6,1,29,3,13,5,9,1,13,3,6,1,13,1,9,1,13,1,6,1,13,1,29,2,13,1,16,1,6,2,29,1,6,1,16,1,11,1,13,1,9,1,6,2,13,1,9,2,17,1,16,1,17,2,9,1,13,1,6,2,29,1,9,2,13,2,6,1,9,1,13,2,9,3,13,1,11,1,13,3,9,1,28,1,27,1,29,1,6,1,27,1,6,1,9,1,16,1,9,2,6,3,28,1,27,1,29,3,27,3,29,1,27,2,28,2,6,1,9,1,29,3,6,1,27,1,28,1,27,1,13,3,9,1,11,1,13,1,29,3,27,2,28,1,27,48,28,6,29,14,6,10,13,2,}, + {6,3,29,9,28,12,29,6,6,3,13,29,6,2,29,1,27,5,29,1,28,1,29,4,27,3,28,1,27,1,28,1,29,2,28,2,29,1,13,1,9,1,13,1,29,1,13,5,29,2,13,4,6,1,29,1,13,1,9,2,13,1,29,1,6,1,13,2,9,2,13,2,9,1,11,2,16,1,17,3,9,1,13,1,6,2,29,1,13,5,9,1,13,1,9,1,13,1,9,1,11,1,9,1,16,1,11,1,13,1,29,1,13,1,29,1,28,2,29,1,13,1,16,1,13,1,9,2,16,1,13,1,6,1,29,3,27,1,13,2,29,2,13,1,29,1,27,1,29,1,6,2,29,3,6,1,13,1,29,2,27,3,6,1,9,1,29,1,13,2,6,3,29,1,28,1,27,49,28,6,29,16,6,7,13,3,}, + {6,3,29,9,28,12,29,6,6,3,13,16,9,3,13,10,6,3,28,1,27,4,29,2,13,1,29,1,27,3,28,1,27,4,29,1,28,1,27,1,28,1,29,1,13,2,6,2,13,3,6,2,13,2,9,2,13,3,11,1,9,2,13,2,9,1,13,1,9,1,6,1,13,1,9,2,13,2,9,1,16,2,17,2,16,1,13,2,6,1,13,1,6,1,13,1,29,2,13,2,11,1,9,1,11,3,9,1,11,1,9,1,13,1,6,1,13,1,16,1,6,1,28,1,29,1,27,1,13,1,11,1,6,1,13,3,6,1,29,1,28,1,29,2,6,1,29,1,27,2,29,1,13,1,6,1,13,1,29,1,27,1,29,1,27,1,29,1,27,1,28,1,6,1,27,1,28,1,27,2,6,2,29,1,8,1,13,1,6,1,28,1,27,1,28,1,29,1,28,1,27,49,28,6,29,17,6,6,13,3,}, + {6,2,29,7,28,16,29,5,6,3,13,17,9,8,13,5,6,1,29,1,27,6,29,2,27,5,28,2,27,1,28,1,29,1,28,1,27,2,28,1,13,1,29,1,6,2,13,2,6,2,13,1,9,1,13,2,6,2,13,2,6,2,13,1,9,3,11,1,16,2,13,3,9,2,13,1,11,1,17,3,16,1,13,1,11,1,13,2,6,1,29,1,6,1,13,2,9,4,11,1,16,3,9,1,13,4,29,2,28,1,29,1,6,1,13,3,9,1,13,2,29,2,27,1,29,1,27,1,28,1,29,1,28,1,29,1,28,1,27,1,29,1,27,5,29,3,28,1,27,3,29,2,27,2,29,1,28,1,27,3,28,1,29,2,27,47,28,8,29,14,6,7,13,4,}, + {6,2,29,6,28,17,29,4,26,1,6,4,13,16,9,8,13,5,6,1,29,1,27,6,28,1,27,7,29,1,28,1,27,3,28,1,27,1,28,1,6,1,29,2,6,5,13,9,9,4,13,2,9,1,11,1,9,1,16,1,9,1,13,1,9,1,11,2,13,1,16,1,11,1,17,1,9,2,13,1,6,2,13,3,6,1,9,3,11,1,9,1,16,1,9,1,17,1,13,1,9,1,13,1,11,1,9,1,13,2,29,2,6,1,13,1,10,1,16,1,9,1,13,1,29,2,28,1,29,2,27,1,6,1,8,1,13,1,29,1,28,1,29,1,13,1,29,4,27,5,28,1,29,1,27,4,29,1,27,7,28,1,27,47,28,8,29,14,6,7,13,4,}, + {6,2,29,6,28,17,29,4,26,1,6,4,13,16,9,7,13,6,6,1,29,1,27,14,28,1,27,4,28,3,29,1,6,1,13,3,6,1,13,3,6,1,29,2,6,1,13,1,9,3,13,3,9,6,16,1,11,3,9,1,11,1,13,1,11,1,9,1,17,1,9,2,13,7,9,2,11,1,16,1,11,1,16,1,13,1,16,1,13,1,16,1,9,2,13,1,29,1,13,1,29,3,13,1,9,1,11,1,13,1,6,2,9,1,8,1,13,1,29,1,9,1,6,1,29,4,6,1,29,1,28,2,27,3,29,5,28,1,27,60,28,7,29,15,6,7,13,4,}, + {6,2,29,6,28,17,29,5,6,5,13,15,9,7,13,6,6,1,29,1,27,19,28,3,6,1,29,1,6,1,13,2,29,1,13,2,6,1,13,1,6,1,29,2,6,1,13,3,11,2,9,1,11,2,9,2,13,1,9,1,16,2,17,1,11,1,9,2,11,1,16,1,9,2,13,2,11,1,13,1,9,1,29,1,13,1,9,5,11,1,17,1,11,1,9,3,11,1,9,2,13,1,29,1,6,2,29,1,13,2,6,2,29,3,6,1,13,2,6,1,29,1,27,1,28,1,29,2,13,3,8,1,13,1,28,2,27,1,28,3,27,2,28,1,29,2,27,58,28,7,29,15,6,7,13,4,}, + {29,8,28,17,29,5,6,6,13,14,9,7,13,6,6,1,29,1,27,19,28,3,6,1,29,2,13,2,6,1,13,1,9,1,13,1,11,1,9,1,13,1,6,3,13,3,9,1,11,1,9,1,13,2,11,1,17,1,13,1,11,1,9,1,13,2,9,1,16,1,9,2,13,4,9,1,13,2,29,1,13,3,9,2,13,1,9,1,11,2,16,1,9,2,13,1,9,1,11,1,10,1,13,1,6,3,13,1,29,2,13,1,29,4,13,1,6,1,29,3,6,2,29,2,6,4,29,2,28,1,29,3,27,1,28,2,29,1,27,59,28,6,29,18,6,6,13,3,}, + {29,8,28,17,29,5,6,6,13,14,9,7,13,6,6,1,29,1,27,19,29,2,28,1,29,3,13,4,9,3,13,1,6,3,13,1,9,2,11,1,17,3,16,2,17,2,16,1,17,4,16,2,11,1,13,2,9,3,13,5,6,1,13,1,9,1,11,1,9,5,11,1,13,1,11,1,9,1,11,1,9,1,13,1,6,3,13,1,6,2,13,1,6,1,28,1,6,1,13,1,9,1,13,1,29,1,13,1,6,2,13,1,9,2,13,1,6,3,29,2,27,3,28,1,29,2,28,1,27,2,28,1,27,56,28,7,29,18,6,6,13,3,}, + {29,8,28,6,27,2,28,9,29,5,6,6,13,14,9,7,13,6,6,1,27,19,28,1,29,1,28,2,29,3,6,1,13,5,6,3,13,1,9,1,11,1,16,1,17,1,11,1,16,1,17,13,16,1,13,1,9,3,11,1,13,1,9,1,13,3,6,1,13,2,9,5,13,1,9,2,16,1,9,1,13,2,9,1,13,3,9,1,6,1,13,1,29,4,6,1,9,1,16,1,17,6,11,1,13,1,29,1,13,2,6,1,29,1,27,3,28,1,27,1,29,2,27,59,28,7,29,19,6,6,13,2,}, + {29,8,28,6,27,2,28,9,29,5,6,8,13,12,9,7,13,6,6,1,27,17,28,1,29,3,27,1,28,1,6,1,29,1,6,2,13,1,8,1,13,2,9,1,13,3,9,1,16,1,17,7,9,1,13,1,6,2,16,1,17,1,9,1,13,1,11,1,17,2,16,1,13,1,9,1,13,2,9,1,6,1,11,1,13,1,29,1,13,3,6,1,13,1,6,1,13,1,11,1,9,2,13,1,11,1,9,1,13,1,6,1,13,1,9,1,13,1,6,1,13,2,27,1,28,1,29,3,6,1,17,7,16,1,17,6,9,1,8,1,7,1,6,1,28,1,27,1,29,1,28,1,27,60,28,6,29,20,6,6,13,2,}, + {29,8,28,18,29,5,6,5,13,27,6,1,27,21,29,1,6,1,13,3,9,2,13,1,9,5,16,1,11,1,13,1,17,3,23,1,26,1,29,1,7,1,29,3,11,1,17,3,13,1,29,2,23,1,17,2,29,1,6,1,9,1,6,1,9,1,13,1,29,1,6,1,29,1,6,1,29,1,13,3,9,1,11,1,13,1,9,1,6,1,9,1,13,1,9,2,13,1,11,1,13,1,6,1,13,1,28,1,6,2,27,1,6,1,8,1,17,2,9,1,13,1,17,4,28,1,27,1,28,1,27,2,26,1,29,1,17,2,6,2,13,2,29,1,6,3,29,3,27,54,28,9,29,18,6,8,}, + {29,8,28,18,29,5,6,8,13,1,6,1,13,21,6,2,29,1,27,16,28,3,29,1,13,1,9,1,13,1,9,1,11,1,16,1,11,1,9,4,17,1,9,2,13,1,6,1,17,1,9,1,13,1,29,1,26,1,29,1,28,1,27,1,6,1,17,6,29,2,25,1,23,1,14,1,9,1,28,1,11,1,6,1,13,1,29,1,13,1,29,1,6,2,29,1,13,3,9,2,13,1,16,1,9,2,13,1,9,1,11,1,6,1,9,1,6,1,29,1,28,2,29,1,27,2,12,1,17,1,23,1,29,2,9,1,17,5,27,2,28,1,27,3,7,1,17,1,29,1,27,1,28,1,29,1,6,1,13,2,6,3,29,1,28,1,29,1,27,52,28,10,29,17,6,8,}, + {29,8,28,18,29,5,6,10,13,21,6,2,29,1,27,11,28,4,27,1,28,1,27,1,28,1,6,1,10,2,13,1,9,1,11,1,16,1,11,1,9,2,13,2,8,1,13,4,17,2,6,1,26,2,28,2,29,2,13,1,17,5,6,1,27,1,29,1,24,1,23,1,17,1,29,1,13,1,29,1,13,1,29,1,6,3,29,2,6,1,11,1,13,2,9,1,13,1,17,1,9,2,13,2,11,1,13,2,29,2,27,1,29,1,27,2,9,1,17,1,15,1,28,1,27,2,10,1,17,5,23,1,27,5,29,1,17,1,13,1,27,3,28,1,29,3,6,3,29,2,28,1,27,51,28,13,29,14,6,8,}, + {29,10,28,16,29,5,6,11,13,19,6,3,29,1,27,11,28,5,29,3,13,1,16,1,11,1,13,1,11,1,16,2,11,1,9,3,13,1,6,1,13,1,6,1,13,2,17,2,7,1,26,1,29,1,26,1,29,1,27,4,17,4,9,1,27,1,26,1,7,1,9,1,17,1,11,1,27,1,29,1,13,1,6,1,29,1,6,1,29,3,6,1,9,1,13,2,9,1,13,1,9,1,13,6,6,1,28,1,29,1,27,3,6,1,17,2,23,1,27,4,17,6,27,5,23,1,17,1,13,1,28,1,27,5,28,1,29,1,6,2,29,2,28,1,27,51,28,15,29,15,6,5,}, + {29,11,28,15,29,6,6,11,13,18,6,2,29,1,28,1,27,12,28,3,29,4,13,1,9,2,13,1,9,3,8,1,13,1,9,2,13,1,6,1,29,1,28,1,6,1,13,1,16,1,17,1,29,1,28,2,29,2,8,1,17,1,9,2,17,5,27,1,29,1,7,1,17,3,29,2,6,1,29,4,6,1,29,1,6,2,13,1,9,2,13,2,6,1,13,1,9,2,13,1,6,1,29,1,27,2,28,1,27,2,16,1,17,2,28,1,27,2,23,1,17,7,27,5,17,1,10,1,13,1,29,1,27,6,28,1,29,2,28,1,29,2,28,1,27,50,28,16,29,2,28,1,29,12,6,4,}, + {29,12,28,14,29,5,6,2,29,1,6,10,13,16,6,2,29,2,27,13,28,3,29,5,6,3,13,7,6,1,28,1,27,2,29,1,13,1,9,1,17,1,13,1,6,1,26,1,25,1,28,1,29,1,17,8,28,2,6,1,15,1,16,1,17,1,9,1,27,1,6,1,29,2,6,1,27,1,29,2,6,2,13,4,9,1,13,2,9,1,13,1,6,1,29,1,6,1,28,1,27,1,28,1,27,1,6,1,17,3,27,3,26,1,17,7,27,1,28,1,27,3,17,1,6,1,7,1,28,1,27,7,28,2,27,2,28,2,27,50,28,19,29,12,6,4,}, + {29,13,28,14,29,8,6,10,13,11,6,2,13,1,6,3,29,2,27,12,28,1,29,3,6,2,29,2,6,3,13,1,6,1,13,3,9,2,13,1,29,2,27,3,6,2,17,1,8,1,29,4,6,1,17,7,8,1,29,1,28,1,6,1,9,1,17,3,27,1,29,1,13,1,28,1,29,1,27,2,28,1,29,1,13,1,6,1,29,1,6,1,29,1,13,3,9,1,13,2,29,1,6,1,29,1,27,1,29,1,28,1,17,4,27,4,17,7,27,1,28,1,27,2,28,1,17,1,29,1,6,1,27,8,28,2,27,54,28,20,29,13,6,2,}, + {29,13,28,14,29,9,6,9,13,11,6,5,29,3,27,11,28,1,29,4,13,1,29,5,6,1,13,1,29,1,6,1,13,2,9,1,13,1,6,1,27,1,29,1,27,3,6,2,17,1,8,1,29,1,26,3,29,1,13,1,17,6,29,1,27,1,28,1,29,1,9,1,17,3,13,1,27,1,13,1,27,3,29,2,27,1,29,1,6,3,28,1,29,1,6,1,13,2,6,1,13,1,29,1,28,1,27,1,28,3,17,3,9,1,29,1,27,3,23,1,17,5,12,1,28,1,27,2,29,1,15,1,12,1,6,1,9,1,27,64,28,21,29,12,6,2,}, + {29,2,6,2,29,18,28,1,29,8,6,1,29,8,28,1,29,1,6,5,13,5,6,6,29,7,27,12,28,1,29,3,13,2,29,3,6,1,29,3,13,1,6,2,13,3,29,1,6,1,27,3,9,3,29,1,6,1,29,3,6,1,16,1,17,4,6,1,28,2,29,1,23,1,17,3,16,1,13,1,29,1,6,3,27,2,28,1,29,4,28,1,29,2,6,1,9,1,13,2,6,1,13,1,28,1,7,1,27,2,6,1,17,4,8,1,27,3,29,1,14,1,17,4,28,1,27,1,28,1,29,2,17,1,29,3,27,6,28,3,27,55,28,8,27,3,28,12,29,12,}, + {29,2,6,3,29,27,6,2,29,4,28,3,29,1,6,4,13,5,6,5,29,9,27,9,28,1,29,12,28,1,29,1,13,1,9,1,13,2,9,1,13,2,29,3,27,2,29,1,9,1,16,1,9,1,29,5,6,1,17,3,8,1,28,1,27,1,28,1,29,1,9,1,17,3,28,1,9,1,28,1,29,1,6,1,29,1,28,1,27,2,29,2,27,1,28,1,27,1,29,1,28,1,13,1,29,1,6,1,29,1,6,1,28,1,6,1,29,1,27,1,28,1,8,1,17,5,27,5,9,1,17,2,29,1,27,2,29,2,17,1,12,1,29,1,6,1,27,7,28,2,29,1,28,1,27,55,28,7,27,3,28,13,29,11,}, + {29,1,6,9,29,22,6,2,29,3,28,1,27,2,28,1,29,1,6,2,13,1,6,1,13,4,6,4,29,11,27,7,28,2,29,3,6,1,29,2,13,1,6,1,29,6,6,1,13,1,11,1,9,2,10,1,9,1,13,1,6,1,29,2,27,1,29,1,27,1,13,1,16,1,23,1,17,1,8,1,29,1,28,2,29,2,6,1,28,1,27,2,28,1,6,1,23,1,17,5,9,1,29,2,28,1,27,1,28,1,27,2,29,1,27,3,29,4,6,1,29,1,6,1,13,1,27,1,6,1,27,1,25,1,28,1,6,1,16,1,17,4,24,1,27,3,28,1,27,4,28,1,29,2,17,1,12,1,29,1,6,1,29,1,27,6,28,1,27,59,28,9,27,4,28,2,27,5,28,4,29,10,}, + {29,1,6,10,29,5,28,1,29,11,6,1,13,1,6,4,29,2,28,1,27,4,29,2,6,3,13,3,6,3,29,13,27,6,28,1,29,5,6,2,13,2,6,1,29,1,28,1,27,1,28,1,29,1,13,1,6,1,13,1,8,1,13,4,6,1,13,1,29,1,28,1,29,1,27,2,28,1,6,1,17,3,7,1,28,2,27,1,29,1,28,2,27,2,29,1,12,1,17,5,11,1,17,1,29,1,28,1,29,1,27,1,29,1,27,2,29,1,27,3,13,1,6,2,29,1,13,1,6,1,13,2,29,2,27,1,14,1,27,2,9,1,17,5,23,1,27,6,29,1,26,1,6,1,17,1,15,1,6,1,29,1,6,1,27,4,29,1,27,1,28,1,29,4,27,57,28,5,27,4,28,3,27,7,28,4,29,10,}, + {28,1,29,1,6,4,13,1,6,4,29,5,28,1,29,10,6,1,13,1,8,1,13,1,6,3,29,1,28,1,27,4,28,1,29,1,6,5,13,1,6,3,29,5,28,2,29,7,28,1,27,5,29,6,6,2,13,2,6,1,29,1,27,2,28,1,29,1,13,2,6,2,13,2,6,3,13,2,6,1,13,1,28,1,27,3,6,1,17,1,9,1,12,1,9,1,6,1,13,1,6,1,29,3,24,1,17,4,11,1,9,1,11,1,6,1,8,1,29,2,28,2,29,7,13,2,29,1,13,1,6,1,13,3,6,2,27,1,8,1,27,2,13,2,27,1,28,1,6,1,23,3,8,1,29,2,26,1,23,1,8,1,12,1,17,1,23,1,13,1,29,2,27,11,28,2,27,65,28,4,27,7,28,5,29,8,}, + {27,1,29,4,6,1,13,1,6,4,29,3,28,5,29,5,6,1,29,2,6,1,9,1,14,1,9,1,13,1,6,1,29,2,27,5,29,2,6,6,29,17,28,1,27,5,28,1,27,1,28,1,29,2,6,4,13,1,6,1,29,1,28,1,29,2,6,1,29,1,8,1,13,1,29,1,13,2,6,1,13,7,6,1,29,1,27,2,6,1,12,1,9,1,17,3,14,2,15,2,17,2,23,1,6,1,28,2,13,1,29,2,13,2,28,1,6,1,28,1,29,1,13,2,6,2,13,1,6,2,13,1,6,1,13,4,9,2,10,1,29,1,6,2,29,1,13,1,9,1,27,4,28,1,29,1,6,1,29,1,15,1,23,1,8,1,17,1,12,1,29,2,27,7,29,1,27,1,28,1,29,1,28,1,27,2,29,3,27,65,28,1,27,15,28,2,29,5,}, + {27,1,28,1,29,3,6,2,29,1,6,2,29,3,28,6,29,5,6,1,29,2,13,1,14,3,9,1,6,1,29,2,27,5,29,2,6,4,29,19,27,8,28,1,29,2,6,2,13,2,6,1,29,1,28,2,29,4,13,2,6,1,13,6,6,2,13,1,16,1,9,1,13,1,29,1,27,3,28,1,6,2,8,1,15,1,23,1,8,1,24,1,8,1,29,1,27,1,29,1,28,1,6,1,27,1,6,1,29,1,6,1,29,1,8,1,6,1,28,1,6,1,13,2,6,1,29,4,6,2,29,1,13,1,29,1,8,2,9,1,13,1,28,1,29,2,27,2,29,1,27,19,29,2,28,1,7,1,29,3,28,1,27,89,28,4,}, + {27,2,29,1,28,2,29,1,6,1,29,1,6,2,29,3,28,2,27,1,28,3,29,5,6,1,29,2,13,1,14,3,9,1,29,2,28,1,27,5,29,2,6,3,29,16,6,3,29,1,27,7,29,5,6,1,13,3,29,4,27,1,29,1,13,3,6,1,13,1,9,1,13,6,9,2,13,1,29,3,6,1,13,1,29,3,28,1,29,1,28,1,29,1,28,2,27,2,29,1,27,2,13,3,8,1,13,1,28,2,29,1,9,1,13,1,28,2,27,4,29,1,27,1,29,2,6,1,29,1,6,1,9,2,13,1,29,1,27,2,28,1,27,16,29,1,28,1,27,1,28,1,27,1,29,1,28,1,29,1,28,1,27,1,29,5,27,10,29,1,27,79,}, + {27,6,6,1,13,1,29,4,27,7,28,1,29,3,6,2,29,2,13,1,14,4,29,2,27,6,29,3,6,2,29,5,28,1,29,3,6,2,13,6,6,2,29,1,27,5,28,1,27,1,29,4,6,1,13,1,6,1,29,1,13,1,29,1,27,2,28,1,27,1,28,1,29,3,6,2,13,3,9,1,13,4,6,2,13,5,6,1,28,1,29,3,27,5,29,1,27,2,6,1,29,2,6,1,13,1,6,1,29,2,13,2,6,1,29,1,27,12,13,4,6,1,27,1,28,1,27,2,28,1,27,15,29,1,27,3,28,1,27,1,28,1,29,2,28,2,27,89,28,1,27,2,}, + {27,6,6,1,9,1,6,1,29,3,27,8,28,2,29,5,6,1,9,1,14,3,29,2,27,6,29,14,6,1,13,7,6,2,29,2,27,4,28,2,27,1,28,1,29,2,6,5,29,1,27,2,28,1,27,1,28,1,29,1,6,2,13,5,6,1,29,1,6,1,13,5,8,1,13,1,6,1,13,2,6,3,29,1,28,1,29,1,13,1,6,2,13,1,29,1,13,1,29,2,28,1,29,8,28,1,27,4,28,2,27,6,29,1,13,3,6,1,27,20,28,1,27,1,28,1,29,2,28,1,29,1,28,3,27,3,28,2,27,8,28,1,27,79,}, + {27,6,28,1,14,1,23,1,29,1,28,2,27,8,28,1,27,1,28,3,29,3,6,1,14,2,9,1,29,1,28,1,27,6,29,13,6,1,13,4,9,1,13,5,6,1,29,1,28,1,27,3,28,1,29,4,6,6,29,1,27,2,28,3,29,2,6,1,13,2,9,1,13,3,6,2,13,3,6,4,29,2,13,2,6,3,9,1,13,2,29,2,13,1,29,1,13,1,6,1,29,2,28,1,29,3,27,1,29,3,27,13,29,2,6,1,8,1,6,1,27,22,28,1,29,1,28,2,27,1,29,3,28,2,27,91,}, + {27,7,13,1,14,1,29,1,27,13,28,1,27,1,28,1,29,3,9,1,14,1,9,1,29,1,28,1,27,6,28,3,29,8,6,1,13,3,9,6,13,3,29,3,27,4,29,5,6,2,29,4,27,2,28,1,29,5,6,1,13,2,6,2,29,5,6,1,13,4,29,3,6,2,13,1,6,1,29,1,6,1,8,1,13,1,29,2,28,1,6,1,29,5,6,1,29,1,27,1,29,2,28,1,27,13,28,1,29,2,13,2,27,23,28,1,27,1,28,1,27,1,28,3,27,12,28,1,27,80,}, + {27,7,29,1,14,1,6,1,27,16,29,2,28,1,13,1,16,1,9,1,29,1,28,1,27,5,28,1,27,3,28,1,29,4,13,4,9,4,11,3,9,2,13,3,6,1,29,2,27,4,29,5,6,1,13,1,6,1,29,2,28,1,27,2,28,1,29,3,28,1,29,2,6,1,13,1,6,3,13,3,6,1,29,4,13,1,6,4,13,2,6,1,9,1,6,1,28,1,27,1,29,1,6,1,29,3,27,2,29,4,28,3,27,5,29,1,27,8,28,1,29,2,13,2,28,1,27,20,28,1,27,1,29,2,6,1,29,2,28,1,27,5,28,1,27,8,28,2,27,78,}, + {28,1,27,7,23,1,6,1,28,1,27,13,28,1,27,2,29,3,13,2,29,1,28,1,27,4,28,1,29,1,28,3,29,3,6,1,13,2,9,2,11,2,16,6,11,1,9,1,13,3,6,2,29,1,28,1,27,3,29,3,6,6,28,2,27,2,28,1,29,6,6,1,13,3,9,1,29,9,6,3,29,1,6,2,29,2,6,2,29,1,6,1,28,1,27,1,28,1,6,1,28,2,29,1,28,2,29,3,28,2,27,4,28,1,27,8,28,1,29,1,28,1,29,1,6,1,28,1,27,19,28,2,27,1,29,4,28,4,27,92,}, + {29,1,28,1,27,6,6,1,8,1,29,1,27,8,28,2,27,3,28,1,27,2,29,3,6,1,13,1,29,2,27,1,28,3,29,6,6,1,13,3,11,1,16,10,11,1,9,1,13,2,6,2,29,2,28,1,27,3,29,9,27,4,28,1,29,3,6,2,29,4,6,1,13,1,6,1,29,5,28,1,27,1,29,3,6,1,29,4,6,1,29,2,27,1,6,1,29,3,6,1,29,3,27,2,29,1,28,1,29,3,28,1,27,13,29,1,28,3,27,20,28,1,27,2,28,2,27,5,28,2,27,91,}, + {29,2,27,3,28,1,6,1,29,2,23,1,29,1,27,6,28,1,29,1,6,2,29,1,27,2,28,1,27,2,29,4,6,1,29,2,28,2,29,1,28,1,29,1,6,1,29,2,6,2,13,2,9,1,11,1,16,2,17,5,16,4,11,1,9,1,13,2,6,1,29,2,27,5,29,5,6,1,13,1,6,1,29,1,27,4,28,1,29,3,13,1,6,1,29,1,27,1,28,1,29,1,13,3,6,4,13,2,6,1,29,3,6,1,29,3,6,1,29,1,6,1,13,1,6,1,7,1,29,3,27,2,28,2,27,2,29,1,28,2,29,2,28,1,27,3,28,1,27,1,28,1,27,7,29,1,28,1,27,25,28,2,27,2,29,1,28,1,27,94,}, + {6,1,13,2,29,4,6,1,29,1,13,1,23,1,29,1,27,4,29,1,27,1,29,1,14,2,13,1,29,1,28,2,27,1,28,2,6,2,29,1,6,2,29,1,27,1,29,2,6,2,13,1,9,1,13,1,6,1,13,2,14,1,17,1,16,1,29,1,16,1,17,5,16,1,11,1,16,2,9,3,13,2,6,1,29,4,28,1,27,2,29,4,6,2,29,2,27,2,28,3,29,1,6,1,13,2,6,1,29,5,13,2,6,1,13,2,6,1,13,1,29,1,27,1,28,1,29,3,6,2,29,1,28,1,8,1,6,1,29,2,13,1,29,1,6,1,27,9,13,1,29,1,27,1,29,3,28,2,27,9,29,1,27,22,29,1,27,1,28,1,29,1,28,1,27,1,28,3,29,1,28,1,27,3,28,1,27,89,}, + {13,1,9,1,8,1,6,1,29,2,6,2,29,1,6,1,14,1,29,1,28,1,27,1,29,1,27,1,29,2,13,1,14,2,9,1,6,1,29,5,13,1,6,1,27,1,29,3,28,1,29,1,6,1,13,3,9,2,13,1,16,1,14,2,17,1,10,1,29,1,17,6,16,1,11,1,16,2,11,1,9,1,13,3,6,1,29,3,28,1,27,3,28,2,29,5,28,1,27,2,29,7,6,1,13,3,29,2,6,2,29,4,6,3,13,2,29,2,6,1,29,2,6,1,29,1,27,1,29,3,28,1,6,1,27,8,28,1,29,3,13,1,29,2,27,2,28,1,29,2,27,4,28,1,27,1,29,3,27,23,29,4,28,1,27,2,28,1,27,2,28,3,27,88,}, + {9,1,14,2,8,1,6,4,29,1,6,1,14,2,29,1,28,1,6,1,29,3,9,1,14,3,9,1,13,1,6,1,29,2,6,1,13,1,29,1,27,2,29,1,28,1,29,1,6,1,9,4,14,1,16,2,14,1,17,1,14,1,17,1,13,2,17,7,16,3,11,1,9,1,13,3,29,5,28,1,27,4,28,1,29,2,28,1,27,2,29,6,6,1,13,1,6,1,13,1,9,3,13,1,29,1,6,1,13,4,29,1,6,3,13,1,6,1,29,1,28,1,29,3,6,1,29,1,6,1,28,1,29,1,6,1,29,1,28,2,27,6,28,1,13,1,9,2,13,1,9,1,13,2,29,2,6,1,13,1,29,1,28,1,13,1,28,1,27,1,29,1,27,1,13,1,17,1,27,23,29,2,28,1,27,2,28,2,27,6,28,1,27,1,29,1,28,1,27,85,}, + {13,1,14,3,9,1,13,2,29,1,13,1,29,1,6,1,14,2,29,2,6,3,9,1,14,2,9,1,14,2,13,1,29,2,13,1,6,1,27,5,29,1,6,1,14,3,16,1,14,7,6,1,9,1,17,7,16,2,11,1,9,3,13,1,6,1,29,6,27,4,28,3,27,1,28,1,29,1,28,1,29,1,13,3,6,3,13,2,6,1,13,3,6,1,29,1,13,1,29,1,13,3,9,2,13,1,6,1,13,1,29,3,13,1,6,2,13,1,29,3,27,2,29,1,27,7,28,1,9,3,13,1,9,1,16,1,17,3,16,2,9,1,13,1,16,1,13,1,6,1,13,2,17,1,29,1,27,15,29,1,27,9,29,2,28,1,27,3,29,2,6,1,7,1,28,1,29,2,28,1,27,86,}, + {13,1,15,1,14,2,9,1,13,1,9,1,6,1,13,1,29,1,6,1,14,2,29,2,13,1,6,1,13,1,14,3,15,1,14,3,9,1,13,2,29,1,27,5,28,1,6,1,14,5,16,1,14,4,9,1,29,1,16,1,17,7,16,1,9,5,13,1,6,1,29,6,28,1,27,4,28,2,29,2,6,3,29,4,13,2,9,2,13,2,11,2,9,1,13,1,9,1,13,4,9,1,13,2,9,1,13,1,6,1,29,1,6,2,29,1,13,1,29,1,13,1,29,1,27,10,29,1,28,1,6,1,11,1,16,2,17,1,16,1,17,1,16,2,11,1,9,2,13,2,6,1,9,2,17,1,29,2,27,15,13,2,9,1,29,2,6,1,13,1,9,2,13,1,6,1,29,2,28,1,29,1,27,1,28,1,29,2,7,1,29,1,13,1,29,1,27,75,28,2,27,10,}, + {9,1,14,3,13,2,14,1,13,1,29,1,6,1,29,1,6,1,13,3,9,2,14,10,13,1,29,1,27,6,29,1,14,5,16,1,17,2,14,2,13,1,6,1,14,1,17,7,16,1,9,1,13,1,9,2,13,1,6,2,29,6,28,1,27,4,28,1,29,2,6,1,13,1,29,1,6,2,13,1,6,3,13,2,9,1,13,2,9,1,11,1,9,2,6,1,13,1,9,2,13,1,9,2,11,1,16,1,13,2,9,1,11,1,13,1,6,1,9,1,13,1,6,1,29,2,28,3,27,6,28,2,29,2,13,1,9,1,17,5,16,1,9,1,16,1,9,2,16,1,17,1,10,1,27,1,13,1,27,10,28,1,29,1,27,2,29,1,27,1,29,2,6,1,29,5,27,2,29,1,6,1,28,1,27,1,29,1,27,1,29,1,6,1,13,1,6,1,28,2,29,1,27,56,28,4,27,15,28,2,27,10,}, + {14,4,13,2,14,1,9,1,29,1,6,1,29,1,6,1,29,1,14,14,13,1,29,1,27,6,29,1,14,4,16,1,14,1,17,3,14,1,6,1,13,1,17,7,16,1,11,1,9,3,13,1,6,1,29,8,28,1,27,4,28,1,29,1,6,2,13,1,6,6,13,1,9,1,13,1,11,1,16,1,9,1,11,4,9,2,16,1,9,1,13,1,6,3,29,1,28,2,6,1,13,1,29,1,28,1,6,1,13,2,29,2,13,1,28,1,27,9,29,2,13,2,11,1,16,1,17,2,16,2,11,2,13,1,16,1,17,1,16,1,28,1,29,1,27,12,29,1,28,1,27,7,29,3,13,2,29,3,6,1,13,2,6,1,29,2,13,4,29,1,27,54,28,1,29,3,28,2,27,14,28,3,27,10,}, + {14,4,13,2,14,1,9,1,13,1,29,1,6,2,9,1,17,2,14,2,17,3,14,4,13,1,14,1,9,1,6,1,29,1,27,6,29,1,14,4,16,1,14,3,17,1,9,1,13,2,17,7,16,1,11,3,9,1,13,1,29,1,28,1,29,9,27,3,28,1,29,1,6,3,29,2,6,1,13,6,11,1,9,1,13,2,9,3,16,1,9,1,11,1,9,1,13,1,9,3,6,2,29,6,28,2,29,1,28,1,29,1,27,12,29,1,6,1,9,2,17,3,16,1,17,1,16,1,13,1,11,1,16,1,13,1,27,16,29,1,27,7,29,1,27,1,29,4,13,1,8,1,10,1,8,1,13,1,6,1,13,3,7,1,29,1,6,1,27,54,29,1,6,1,29,1,28,1,27,17,28,2,27,10,}, + {16,1,17,2,14,1,13,2,14,1,13,2,29,1,6,1,29,1,13,1,14,4,17,2,14,4,29,1,9,1,14,1,6,1,14,1,29,1,27,6,29,1,14,2,17,2,14,1,16,1,14,3,13,1,8,1,13,1,17,6,16,1,9,1,11,1,9,1,10,1,8,1,13,1,28,2,29,6,28,2,29,1,27,4,29,1,13,1,6,1,27,1,29,1,6,1,13,4,9,15,13,3,6,1,28,1,27,1,29,2,27,4,6,1,29,1,28,1,29,1,28,2,27,8,28,1,27,1,28,1,29,1,6,1,8,1,17,3,11,1,17,2,13,1,16,1,13,1,27,18,29,1,28,3,29,4,27,1,13,3,9,1,13,1,9,1,6,1,13,1,9,1,13,1,6,4,8,1,13,1,29,1,27,53,28,2,27,19,29,1,27,11,}, + {5,1,14,3,9,1,13,1,14,1,13,2,29,1,6,1,29,2,14,6,17,1,14,1,9,1,13,1,29,1,14,2,9,1,14,1,6,1,28,1,27,5,29,1,14,2,16,4,14,2,9,1,6,1,13,1,14,1,17,6,16,2,11,1,9,2,13,1,6,1,28,1,27,1,29,1,6,1,29,8,27,2,29,5,13,6,9,1,16,1,9,3,11,1,16,2,17,1,16,1,11,1,9,4,13,4,6,1,29,1,6,2,29,1,28,1,27,1,29,6,27,3,29,1,27,7,29,1,27,3,6,1,11,1,17,1,9,1,17,1,14,1,17,1,11,1,13,1,27,13,28,2,29,1,28,1,27,1,29,1,28,1,27,3,28,1,29,2,6,1,29,2,13,1,8,1,6,1,23,1,8,1,6,1,13,1,6,2,13,1,29,1,28,4,27,53,28,1,27,19,28,2,27,1,29,1,28,1,27,8,}, + {13,1,17,2,14,2,9,2,6,1,29,2,6,2,29,2,6,2,14,5,9,3,14,4,6,1,28,1,27,5,29,1,14,4,16,2,14,2,13,1,6,1,13,1,14,1,17,3,16,1,17,2,16,1,11,2,9,1,8,1,6,1,29,1,27,2,29,1,13,2,6,2,29,3,6,1,13,1,29,5,6,1,13,7,9,4,13,3,6,3,13,8,28,1,29,4,28,1,29,1,6,2,29,3,6,1,29,1,27,1,29,1,6,2,13,1,29,1,27,11,17,1,9,1,17,1,14,1,17,1,28,1,27,12,29,1,28,1,27,1,29,1,6,1,28,1,27,9,29,1,13,1,17,1,16,1,13,1,14,1,9,1,27,1,13,3,6,2,29,1,27,57,28,1,27,16,28,1,27,1,28,2,29,1,28,1,29,2,28,1,27,1,28,1,27,5,}, + {13,1,14,4,9,1,13,1,6,1,14,1,9,1,6,1,29,3,13,1,9,1,17,2,14,1,9,2,14,1,9,1,13,1,14,4,6,1,28,1,27,4,28,1,29,1,14,3,17,1,14,4,13,1,9,1,6,1,9,1,14,1,17,1,14,1,16,1,17,3,16,1,11,1,9,1,13,1,6,1,29,1,27,2,29,1,8,1,13,1,8,1,13,1,6,1,29,2,6,3,29,1,27,1,29,1,6,1,13,1,8,1,13,1,6,2,13,4,9,1,13,1,9,1,11,1,16,2,11,1,17,2,11,1,16,6,11,1,13,1,6,1,29,2,13,1,9,2,13,1,29,4,6,1,29,1,28,1,6,1,29,1,28,1,29,2,27,11,29,1,16,1,17,2,10,1,27,13,29,1,28,1,27,7,28,4,29,2,8,1,6,1,13,3,15,1,28,1,27,1,13,3,29,2,27,58,28,1,27,16,28,1,29,1,28,1,27,1,29,4,28,1,27,7,}, + {6,1,9,1,13,1,29,1,13,2,6,2,14,1,9,1,6,1,29,3,13,1,14,3,6,1,29,1,14,2,6,1,13,1,14,1,9,1,14,2,6,1,28,1,27,4,28,1,29,1,8,1,14,7,13,2,29,3,14,1,17,1,14,1,17,3,16,1,11,1,9,1,6,1,29,1,6,1,29,1,27,1,6,1,9,1,13,2,9,1,13,1,6,2,29,1,6,2,29,2,6,3,13,2,29,3,13,2,9,2,11,1,16,1,11,1,16,2,11,1,16,3,17,3,16,1,11,1,9,1,13,1,29,1,6,3,29,3,6,1,29,2,27,1,29,4,6,1,29,1,27,2,28,1,27,5,29,1,27,6,17,3,13,1,27,12,29,3,27,4,28,1,27,2,28,4,29,2,13,1,9,3,8,1,6,1,27,2,23,1,8,1,13,1,6,1,29,1,27,56,28,1,29,1,28,1,27,15,28,1,29,1,28,2,29,1,28,1,6,2,27,6,28,1,27,2,}, + {29,1,13,1,6,1,29,1,6,2,29,2,6,4,29,3,13,2,14,1,13,1,29,1,9,1,14,1,6,1,13,3,14,1,23,1,6,1,28,1,27,5,29,1,8,1,14,3,17,1,14,3,6,2,29,2,27,1,9,1,14,2,16,1,17,2,16,1,9,1,13,1,29,2,13,2,28,1,6,1,15,1,6,2,13,4,29,1,13,1,6,2,13,1,6,1,28,2,6,1,13,1,29,2,13,3,6,1,13,1,9,2,13,1,9,1,16,2,17,1,11,2,16,2,9,1,13,1,9,1,13,2,9,1,13,1,29,1,6,1,13,2,29,1,27,1,29,1,13,1,28,2,29,1,27,1,29,1,28,2,29,1,28,3,29,2,28,1,6,1,29,1,27,2,13,1,29,1,27,1,6,1,17,2,14,1,13,1,29,1,6,1,29,1,27,5,28,1,6,1,29,3,28,2,27,7,28,4,29,1,6,2,10,1,29,2,15,1,23,1,27,2,8,1,29,1,27,60,28,3,27,14,29,2,26,1,29,1,28,1,29,1,6,1,27,4,28,1,27,5,}, + {29,1,13,2,6,2,29,1,28,1,29,1,6,2,13,1,29,4,14,1,9,1,14,2,6,1,13,1,9,1,13,2,9,1,14,1,13,2,29,1,28,1,27,5,29,1,13,1,14,1,17,1,14,5,13,1,6,2,29,2,13,1,9,2,14,2,17,1,14,1,13,1,6,1,27,1,29,1,8,1,9,1,29,1,6,1,9,1,6,1,29,1,6,2,13,1,9,1,13,2,6,1,13,1,9,1,6,1,27,1,28,1,6,1,13,1,6,2,9,2,6,1,29,2,9,2,13,1,9,1,11,2,16,1,9,2,11,1,9,1,13,2,9,2,13,6,29,3,13,2,29,1,27,1,28,1,27,3,29,3,28,1,29,1,6,1,29,3,13,1,29,1,27,1,28,1,29,2,13,1,11,1,17,1,14,1,9,1,13,1,6,1,29,2,28,1,29,1,27,1,29,1,27,1,13,1,29,2,28,1,27,5,28,1,27,4,28,3,29,1,6,1,8,2,27,2,15,1,27,3,8,1,28,1,27,60,28,1,27,1,28,1,27,11,28,1,27,2,6,1,27,1,7,1,28,2,6,1,29,1,27,2,29,1,27,7,}, + {28,1,29,1,6,1,29,1,28,2,29,1,6,1,29,1,6,1,14,1,6,3,29,1,9,1,14,1,13,2,6,1,13,3,14,3,6,1,29,1,28,1,27,7,6,1,14,7,9,1,29,2,27,1,28,1,29,2,6,1,29,1,13,1,14,2,7,1,29,1,27,1,28,1,23,1,15,1,29,2,9,1,29,1,6,2,29,1,6,1,9,1,15,1,6,2,9,2,6,1,29,2,6,2,29,1,6,1,13,1,9,1,13,3,9,1,16,3,9,1,13,1,9,2,11,1,17,3,16,1,17,1,11,1,13,1,11,1,13,4,29,2,13,2,6,1,29,1,27,1,28,1,29,1,27,1,29,1,13,1,28,1,29,1,27,1,29,2,27,1,6,1,29,2,27,1,28,1,29,1,28,1,29,1,11,1,17,3,10,1,17,1,29,1,28,1,29,1,27,1,29,1,28,1,29,3,6,1,28,1,27,2,28,1,27,3,29,1,27,4,28,1,29,4,13,1,6,1,27,1,28,1,14,1,27,3,29,1,27,61,29,1,28,1,29,1,27,7,28,1,27,1,28,1,27,1,29,1,28,1,29,1,13,1,27,3,29,2,28,1,27,1,28,1,29,1,27,6,28,1,}, + {29,3,27,3,29,2,6,2,14,2,6,2,28,1,6,1,14,1,15,1,13,2,6,1,13,2,14,2,8,1,6,1,29,1,27,9,29,1,13,1,6,1,13,1,29,1,13,1,14,3,29,1,28,2,27,2,28,2,29,1,13,1,14,1,27,1,28,2,29,1,15,1,8,1,29,3,13,1,29,2,14,1,9,1,14,1,13,1,29,1,13,1,15,1,8,1,6,1,29,5,9,2,6,2,13,1,9,1,16,1,9,1,17,1,16,1,9,1,28,1,6,1,16,1,17,1,16,2,17,4,27,1,13,1,11,1,6,1,13,1,9,1,8,1,11,1,13,1,29,2,6,1,29,1,27,2,6,2,13,1,6,1,27,2,29,1,28,1,27,1,28,1,27,1,6,1,28,1,27,1,28,2,13,1,16,1,17,1,13,1,28,1,27,1,29,1,6,2,13,1,28,1,29,4,28,3,29,1,27,3,28,1,27,1,28,1,27,2,28,1,27,1,29,1,27,1,29,3,14,1,27,2,14,2,27,65,28,2,27,10,29,1,27,1,29,3,14,1,29,1,27,1,6,1,27,2,29,2,28,1,29,1,27,1,28,1,27,2,28,1,27,2,}, + {29,1,28,2,27,3,29,3,9,1,14,2,13,1,29,3,14,2,13,2,6,1,13,1,6,1,9,1,14,1,9,1,6,1,28,1,27,9,29,1,14,1,9,2,6,1,29,1,13,2,14,1,8,1,27,7,29,1,7,1,27,1,28,1,27,1,26,1,14,1,13,1,29,3,9,1,8,1,6,1,13,1,14,2,6,1,29,1,6,1,13,1,9,1,13,1,6,2,13,1,6,1,29,1,13,1,9,5,16,4,13,1,29,2,6,1,13,1,17,2,13,1,17,3,13,2,17,1,16,1,13,2,6,1,9,2,27,1,28,1,29,3,27,2,29,1,13,1,29,1,27,6,28,1,29,1,28,1,27,3,16,1,17,2,29,1,27,3,29,2,6,3,29,2,28,2,27,1,28,2,27,3,29,1,26,1,29,1,27,2,28,1,27,1,28,1,27,3,29,1,14,1,27,2,26,1,25,1,27,78,29,4,14,1,27,5,29,2,28,2,27,1,28,1,27,2,28,1,27,2,}, + {28,1,27,5,28,1,29,1,8,1,14,1,13,1,14,1,13,1,6,1,29,1,27,1,14,3,13,2,9,1,13,1,14,1,9,1,6,1,29,1,28,1,27,8,29,2,14,2,9,1,13,1,6,1,13,1,29,1,14,2,28,1,27,6,29,1,28,1,27,1,28,2,26,1,14,1,6,1,29,2,6,1,9,1,14,1,13,1,6,1,9,1,8,1,6,2,29,2,13,1,9,2,13,1,9,1,6,1,29,1,13,3,9,2,16,1,17,2,14,2,9,1,13,1,6,1,13,1,29,2,10,1,6,1,13,1,16,2,17,1,13,1,17,1,16,1,6,1,29,2,13,1,15,1,28,1,29,2,6,1,9,1,28,1,27,1,29,1,13,1,29,1,27,4,28,1,27,3,29,1,27,3,14,1,17,2,6,1,27,3,29,1,17,1,14,1,13,1,6,1,29,1,27,6,28,1,29,2,27,1,29,1,28,1,27,2,28,1,27,2,28,1,27,3,26,1,27,82,29,1,28,3,14,1,27,10,28,1,27,2,28,1,27,2,}, + {27,6,28,1,29,1,14,1,17,1,13,2,6,3,29,1,13,1,14,5,9,1,14,2,13,1,27,9,28,1,29,1,27,1,14,3,9,1,13,2,29,1,9,1,14,1,29,1,27,6,28,1,27,2,26,3,8,1,29,1,6,2,14,1,13,1,14,2,29,1,13,1,6,1,13,1,6,4,13,1,14,2,9,1,6,2,13,1,6,1,29,2,13,1,14,3,17,1,14,2,13,4,27,1,13,1,8,1,29,1,9,1,17,1,14,1,13,1,9,1,16,1,6,1,27,1,29,2,13,1,29,1,28,2,29,1,8,1,29,1,28,1,27,1,6,1,29,1,27,8,6,1,29,1,27,1,29,1,15,1,14,2,8,1,27,4,17,2,9,1,13,1,29,1,27,5,28,1,29,2,28,1,27,1,6,1,27,8,29,1,27,1,29,1,27,82,6,1,28,3,23,1,27,9,28,1,27,6,}, + {27,6,28,1,6,1,9,1,17,1,14,1,13,1,6,1,29,1,6,1,13,1,29,1,14,7,6,1,27,10,28,1,8,1,6,1,8,1,14,2,29,1,13,3,14,1,9,1,6,1,27,9,29,2,26,1,6,1,29,1,13,1,9,1,14,1,13,1,14,2,29,1,6,1,29,1,9,1,6,1,13,4,15,2,9,1,14,1,13,1,29,1,28,1,27,1,29,1,6,1,9,1,14,5,13,3,9,2,13,1,29,2,10,1,14,1,9,1,6,1,13,1,14,1,9,1,29,1,28,1,27,1,29,6,6,2,27,1,29,2,27,7,28,1,29,2,28,1,29,1,6,1,15,1,14,1,15,1,27,4,9,1,13,1,8,1,6,1,28,1,27,5,28,1,27,2,28,1,29,1,6,1,27,10,28,1,27,81,29,1,26,1,27,3,6,1,27,9,28,2,27,5,}, + {27,6,29,1,13,1,6,1,14,2,9,1,13,2,29,1,6,1,29,1,14,4,8,1,14,2,27,11,29,1,14,2,8,1,14,1,6,1,27,1,13,2,14,2,6,1,29,1,27,10,28,1,26,1,7,1,6,1,13,1,14,2,13,1,14,1,9,1,6,1,13,2,8,1,13,1,6,1,13,1,9,2,13,2,9,1,14,1,13,1,29,1,27,2,29,2,13,1,14,1,9,1,13,1,14,3,13,3,14,1,6,1,27,1,29,1,13,1,9,1,15,1,13,1,6,1,9,2,13,1,6,1,28,1,27,1,29,1,6,1,9,1,6,1,29,2,8,1,29,3,27,2,28,1,27,6,29,1,27,1,28,1,27,1,13,1,9,1,14,1,27,5,28,1,29,1,27,9,29,1,6,3,27,12,28,1,27,79,29,1,26,1,27,3,28,3,27,7,28,1,29,1,27,5,}, + {27,6,29,1,6,2,13,5,6,1,29,2,13,1,9,1,13,1,8,1,13,1,14,2,13,1,6,1,28,1,27,8,28,1,14,2,9,1,15,1,27,1,29,1,9,2,14,1,9,1,6,1,29,1,27,10,29,4,6,1,14,1,9,1,13,1,14,1,9,1,13,1,9,2,13,1,6,2,13,1,9,1,14,1,9,1,13,2,9,1,13,1,29,1,27,4,29,1,13,1,6,1,29,1,8,1,16,1,14,1,16,1,13,3,6,1,13,1,29,2,8,1,14,1,9,1,29,2,6,1,13,1,23,1,6,1,28,1,27,1,6,1,14,1,13,1,29,1,28,1,6,2,25,1,28,1,27,2,28,1,27,6,29,1,27,1,28,1,27,2,6,1,15,1,27,16,28,1,6,1,14,1,13,1,27,12,29,1,28,1,27,79,26,1,28,1,27,3,28,1,29,1,27,8,28,1,27,5,}, + {27,5,28,1,29,1,6,2,13,1,29,2,6,2,13,4,6,2,13,2,14,1,9,1,13,1,29,1,27,10,14,1,8,2,9,1,6,1,9,1,13,1,6,1,13,1,9,1,13,1,28,1,27,10,8,1,29,1,27,1,28,1,29,1,14,1,13,2,14,2,9,1,8,1,14,1,8,1,29,1,6,1,13,2,9,1,14,1,9,1,6,2,29,1,28,1,27,5,13,4,14,3,9,1,6,1,13,1,9,1,14,1,6,1,29,2,13,1,8,1,6,1,29,1,6,2,13,1,6,1,27,2,13,1,14,1,9,1,8,1,29,2,23,2,27,9,28,1,29,1,27,1,28,1,29,1,27,1,13,1,14,1,27,17,28,1,23,1,6,1,27,12,25,1,29,1,27,79,29,1,28,1,27,19,}, + {27,6,29,3,6,5,13,1,9,1,14,1,29,2,9,1,8,1,13,3,6,1,29,1,27,9,28,1,14,1,23,1,9,2,15,1,6,1,29,1,6,1,13,2,29,2,27,9,26,1,27,4,28,1,29,1,28,1,6,1,14,1,15,1,13,3,14,2,13,1,6,1,13,1,14,2,6,1,29,1,28,2,27,6,29,1,9,1,13,2,14,3,9,2,13,1,9,1,16,1,13,1,28,1,27,1,29,1,13,1,6,1,27,2,13,2,29,1,28,2,29,1,13,2,6,1,23,1,14,1,28,1,26,1,28,1,27,8,29,1,6,1,29,1,27,2,29,1,6,2,27,19,28,2,27,10,26,1,29,1,27,2,28,1,27,51,28,1,27,30,28,1,27,15,}, + {27,6,28,1,29,3,6,3,13,2,14,2,29,1,6,1,8,1,6,1,29,1,6,2,29,2,27,9,28,1,14,1,13,1,14,2,9,1,6,1,29,2,6,2,29,1,28,1,27,9,28,1,27,1,6,1,13,1,28,1,27,1,29,1,13,2,8,1,14,1,9,1,8,1,29,1,9,1,14,1,9,1,6,2,23,2,29,1,27,9,29,1,8,1,13,3,8,1,9,2,16,1,9,3,13,1,29,1,27,1,28,1,6,1,29,1,27,2,6,1,13,1,29,1,28,1,29,2,6,2,29,1,8,1,14,1,23,1,29,1,27,9,28,1,6,1,29,1,27,3,29,1,6,1,27,31,23,1,8,1,28,1,27,80,28,2,27,2,28,1,27,15,}, + {27,6,28,1,29,1,28,1,29,1,6,3,13,1,9,1,14,2,6,2,13,1,29,1,27,1,29,4,27,9,28,1,13,1,6,1,15,1,14,1,9,1,13,1,29,1,28,1,29,2,28,1,27,10,13,1,14,1,6,1,28,1,29,1,28,1,27,1,13,1,8,1,15,1,14,1,9,1,14,1,29,1,6,1,14,2,6,2,13,2,29,1,27,10,29,1,6,1,29,3,13,1,9,5,13,1,6,1,28,1,27,1,29,1,27,3,28,1,29,3,6,3,29,2,6,1,14,2,28,1,27,10,29,2,27,3,29,2,27,31,25,1,8,1,27,81,28,1,29,1,28,1,27,1,28,1,27,15,}, + {27,7,28,1,27,1,29,2,6,2,13,1,14,3,6,1,29,2,28,1,27,1,28,1,29,3,27,10,29,2,14,3,13,1,29,1,28,2,27,12,29,1,23,1,6,1,29,5,13,1,14,3,23,1,28,1,29,1,14,1,23,1,6,1,29,1,6,2,29,1,28,1,27,10,29,1,28,1,27,1,28,1,6,1,8,1,9,4,13,1,6,1,29,1,27,7,29,1,6,1,13,1,6,1,29,2,28,1,29,1,7,1,6,1,27,11,28,1,29,1,27,4,28,1,27,16,29,1,28,1,27,97,28,1,27,18,}, + {27,9,28,1,29,2,6,1,13,1,14,3,26,1,29,2,28,3,29,4,27,9,29,1,13,1,14,3,13,1,29,2,27,14,29,1,6,1,8,1,13,1,6,1,29,1,6,2,14,3,29,1,27,1,29,1,14,1,8,1,6,1,29,5,27,10,28,1,27,3,29,2,9,1,14,2,9,1,13,1,6,1,29,1,27,7,29,1,13,1,29,2,27,1,28,3,6,1,26,1,27,30,28,1,27,3,29,2,27,116,}, + {27,9,28,1,29,3,6,1,8,1,14,1,8,1,29,1,27,2,28,3,29,4,28,1,27,8,29,1,23,1,14,3,13,1,29,2,28,1,27,13,28,1,29,1,13,1,14,1,8,1,27,1,29,1,6,1,8,1,14,1,8,1,13,1,27,1,28,1,8,1,13,1,6,1,29,1,28,5,27,14,29,1,14,3,23,1,13,1,6,1,29,1,28,1,27,6,29,3,28,1,27,3,28,1,29,2,28,1,27,8,28,1,27,20,28,1,27,3,29,1,26,1,28,1,27,115,}, + {27,9,28,1,29,4,13,1,23,1,26,1,29,1,27,5,28,1,29,1,6,2,29,1,27,9,13,1,14,3,9,1,13,1,6,1,28,1,27,14,28,1,6,2,8,1,6,1,27,1,29,1,6,1,14,1,13,1,23,1,6,1,28,1,13,1,6,1,29,2,28,1,27,18,29,1,13,2,6,1,26,1,29,1,6,1,29,2,28,1,27,7,29,2,28,1,27,1,28,2,29,3,27,10,28,1,27,18,29,1,28,1,27,2,28,1,29,1,28,1,27,115,}, + {27,9,28,1,29,4,6,1,8,1,29,1,28,1,27,5,28,1,29,1,6,2,29,1,28,1,27,8,29,1,14,4,8,1,6,1,28,1,27,15,29,1,28,1,6,1,29,3,13,1,14,2,6,1,13,1,28,1,6,1,26,1,29,1,28,2,27,13,29,1,28,1,27,3,28,1,29,1,28,1,27,2,29,5,27,7,29,1,6,1,29,7,27,10,29,1,28,1,27,17,29,1,28,1,27,3,29,2,28,2,27,1,28,1,27,111,}, + {27,9,29,2,26,1,29,4,28,2,27,4,28,1,29,1,6,1,14,1,23,1,6,1,29,1,27,9,6,1,14,2,23,1,13,1,6,1,28,1,27,15,28,1,6,2,29,1,27,2,29,1,23,1,8,1,6,1,29,2,28,1,29,2,27,15,28,1,29,1,28,1,27,8,29,4,27,6,28,1,29,3,28,1,27,1,29,3,28,1,27,3,28,2,27,5,28,2,27,23,28,3,27,3,28,2,27,108,}, + {27,10,29,3,28,1,27,8,28,1,29,1,7,1,14,1,23,1,6,1,29,1,27,8,28,1,29,1,13,1,6,2,29,1,28,1,27,17,29,3,27,2,29,1,13,2,6,1,29,2,28,1,29,2,27,16,28,2,27,9,29,3,27,8,28,2,27,3,29,2,28,1,27,3,28,1,27,32,28,1,27,114,}, + {27,11,28,1,27,11,26,1,8,1,14,2,13,1,6,1,28,1,27,8,28,2,27,21,29,2,28,1,27,3,29,1,6,2,29,1,6,1,29,3,27,28,29,2,27,13,28,1,29,1,28,2,27,35,28,1,27,2,28,1,27,111,}, + {27,23,29,1,23,1,14,2,8,1,6,1,29,1,27,32,29,1,27,5,29,3,6,2,26,1,29,1,27,28,28,2,27,14,28,1,27,1,28,1,27,150,}, + {27,23,29,1,8,1,14,2,8,1,13,1,29,1,27,32,28,1,27,6,28,2,6,3,29,1,27,46,28,1,27,38,28,1,27,111,}, + {27,24,6,1,23,1,8,1,13,2,6,1,28,1,27,40,29,1,6,2,29,1,27,46,28,1,27,38,28,1,27,111,}, + {27,24,29,1,13,1,6,2,13,1,6,1,29,1,27,40,28,1,6,1,29,1,27,45,28,3,27,38,28,1,27,111,}, + {27,25,6,3,13,1,6,1,29,1,27,39,28,1,27,1,29,1,27,45,28,1,29,1,28,1,27,29,28,2,27,107,28,2,27,11,}, + {27,25,29,1,6,1,13,2,29,2,27,40,29,2,28,1,27,42,28,2,29,2,28,1,27,28,29,2,27,106,28,1,29,2,28,1,27,11,}, + {27,25,28,1,6,1,13,2,6,1,29,1,27,40,29,2,28,1,27,42,28,2,29,2,28,1,27,28,29,1,28,1,27,106,29,3,28,2,27,10,}, + {27,25,28,1,29,1,13,2,6,1,29,1,28,1,27,39,29,3,27,21,28,3,27,19,28,1,29,2,28,1,27,27,28,1,29,1,28,2,27,105,29,5,28,1,27,9,}, + {27,26,29,1,7,1,13,1,6,2,29,1,27,39,28,1,29,2,27,21,28,1,29,2,28,2,27,17,28,2,29,1,28,1,27,27,28,1,29,2,28,1,27,105,29,7,27,8,}, + {27,26,29,1,6,1,13,1,6,2,29,1,27,40,28,3,27,21,29,4,28,1,27,16,28,4,27,5,28,2,27,20,29,4,28,1,27,104,28,1,29,3,26,2,29,1,28,1,27,4,28,1,27,2,}, + {27,26,28,1,26,1,6,2,29,1,28,1,27,64,29,4,28,1,27,16,28,4,27,4,29,3,27,20,29,5,27,6,28,1,27,98,29,3,26,2,29,1,28,1,27,4,28,3,}, + {27,26,28,1,29,1,26,1,29,2,27,65,29,5,28,1,27,15,28,4,27,4,29,3,27,19,28,2,29,1,6,1,29,2,28,1,27,5,28,1,27,98,29,6,28,1,27,3,28,4,}, + {27,26,28,1,29,1,26,1,29,2,27,65,28,1,29,4,28,2,27,15,28,3,27,4,29,1,6,1,29,1,28,1,27,18,28,2,29,1,6,1,29,2,28,1,27,5,28,1,27,1,28,2,27,2,28,1,27,92,29,2,28,1,29,1,28,3,27,3,28,4,}, + {27,27,29,3,28,1,27,35,28,1,27,30,29,5,28,2,27,16,29,1,28,4,29,3,27,20,28,1,29,3,28,3,27,5,28,1,27,5,28,2,27,91,28,5,27,2,28,6,}, + {27,27,29,3,27,36,28,1,27,30,29,5,28,2,27,15,28,5,29,4,27,21,29,3,28,3,27,10,28,4,27,90,28,1,29,1,28,3,27,2,28,6,}, + {27,27,28,1,29,1,28,1,27,36,28,2,27,29,29,6,28,1,27,14,28,2,27,1,28,2,29,4,28,1,27,21,28,1,29,2,28,3,27,10,28,3,29,1,28,2,27,88,28,1,29,2,28,2,27,4,28,4,}, + {27,27,28,1,29,1,28,1,27,36,28,2,27,29,29,3,28,2,29,1,28,3,27,12,28,5,29,4,28,1,27,21,28,2,29,2,28,2,27,10,28,2,29,4,28,1,27,87,28,1,29,3,28,1,27,6,28,2,}, + {27,28,28,1,27,37,28,2,27,29,28,1,29,1,28,3,29,1,28,4,27,10,28,2,29,1,28,1,29,7,27,21,28,1,29,4,28,1,27,11,28,2,29,3,28,1,27,78,28,1,27,7,28,1,29,4,28,1,27,7,28,1,}, + {27,66,28,2,27,29,28,1,29,1,28,1,27,1,28,1,29,1,28,1,29,1,28,3,27,8,28,2,29,10,27,20,28,1,29,6,28,1,27,12,29,4,28,1,27,77,28,1,27,3,28,1,27,1,28,2,29,4,28,2,27,7,28,1,}, + {27,97,28,2,27,2,28,1,29,4,28,2,27,8,28,2,29,5,26,1,29,4,27,20,29,3,6,1,29,4,27,12,28,3,29,1,28,3,27,25,28,1,27,50,28,5,29,6,28,1,27,9,}, + {27,97,28,2,27,2,28,1,29,4,28,2,27,3,28,1,27,4,28,1,29,5,6,3,29,2,28,2,27,18,28,1,29,2,6,4,29,2,28,1,27,13,28,6,27,24,28,1,27,50,29,2,28,3,29,5,28,1,27,10,}, + {27,99,28,3,29,2,28,1,29,5,28,1,27,4,28,2,29,6,6,1,13,1,6,1,29,1,28,3,27,16,28,1,29,3,6,1,13,3,6,1,29,2,28,1,27,12,28,2,29,1,28,1,27,2,28,1,27,4,28,3,27,16,28,1,27,27,28,2,27,3,28,3,27,14,28,1,6,2,29,3,6,4,29,2,28,1,27,9,}, + {27,2,28,2,27,94,28,3,29,9,28,1,27,4,28,2,29,5,6,1,13,2,6,1,29,1,28,3,27,16,28,1,29,3,6,1,13,4,6,1,29,2,28,1,27,12,28,4,27,1,28,1,27,4,28,3,27,44,28,2,27,2,28,4,27,15,29,1,6,2,29,2,6,4,29,2,27,10,}, + {28,3,27,93,28,3,29,11,28,1,27,3,28,3,29,4,6,1,13,1,8,2,13,1,29,1,28,3,27,16,29,4,6,1,13,1,8,3,13,2,6,1,29,2,28,1,27,11,28,6,27,2,28,4,27,44,28,3,27,1,28,1,29,2,28,1,27,15,29,1,13,2,6,2,13,3,6,1,29,2,27,10,}, + {28,4,27,87,28,5,29,8,6,4,29,2,28,1,27,2,28,4,29,4,6,1,13,1,14,2,13,1,29,1,28,3,27,15,28,1,29,4,6,1,13,1,9,4,8,1,13,1,6,2,29,1,27,11,28,6,27,2,28,4,27,43,28,2,29,1,28,4,29,1,28,2,27,14,29,1,13,1,9,1,13,2,9,1,13,2,6,1,29,2,27,10,}, + {28,4,27,80,28,8,29,12,6,5,29,2,28,6,29,3,6,1,13,1,23,1,14,2,13,1,29,1,28,3,27,14,28,1,29,4,6,2,13,1,8,1,9,1,14,2,9,1,8,1,13,1,6,1,29,1,28,1,27,11,28,1,29,3,28,3,29,2,28,1,27,44,28,2,29,2,28,3,29,1,28,2,27,15,13,1,14,4,9,1,13,2,6,1,29,1,27,10,}, + {28,4,27,26,28,2,27,34,28,1,27,16,28,3,29,10,6,10,13,2,6,1,29,3,28,5,29,3,6,1,13,1,23,1,14,1,8,1,6,1,29,2,28,2,27,14,28,1,29,4,6,2,13,1,8,1,9,1,14,3,9,1,13,2,29,2,27,11,29,9,28,1,27,45,28,1,29,1,28,2,27,1,28,4,27,15,6,1,9,1,14,3,9,1,13,2,6,1,29,1,27,10,}, + {28,4,27,26,28,5,27,30,28,2,27,16,28,2,29,11,6,10,13,2,6,2,29,2,28,5,29,3,6,1,13,1,23,1,14,1,13,1,6,1,29,2,28,2,27,13,28,1,29,3,6,4,13,1,8,1,9,1,14,4,9,2,6,1,29,1,28,1,27,10,29,9,28,1,27,45,28,4,27,1,28,3,27,16,29,1,13,1,14,3,9,1,13,2,6,1,29,1,27,10,}, + {28,3,27,21,28,1,27,5,28,10,27,25,28,3,27,14,28,3,29,9,6,12,13,3,6,2,29,1,28,5,29,3,6,1,13,1,23,2,13,1,29,3,28,2,27,13,28,1,29,2,6,4,13,2,9,2,14,6,6,1,29,1,28,1,27,9,28,1,29,9,28,1,27,45,28,4,27,2,28,2,27,5,28,2,27,9,28,1,13,1,14,3,9,1,13,3,29,1,27,10,}, + {26,1,29,1,28,3,27,18,28,2,27,5,28,8,29,2,28,3,27,22,28,1,29,1,28,5,27,9,28,1,29,5,6,7,13,6,6,6,13,4,6,2,29,6,26,1,6,2,13,1,23,1,8,1,6,1,29,3,28,2,27,12,28,1,29,3,6,3,13,3,9,1,14,7,13,1,29,1,28,1,27,9,28,1,29,5,6,3,29,3,27,44,28,2,27,11,28,3,27,8,28,1,6,1,14,2,9,2,13,2,6,1,29,1,27,10,}, +} } \ No newline at end of file diff --git a/locale/gen_combined/grilledham_map_gen/map_gen.lua b/locale/gen_combined/grilledham_map_gen/map_gen.lua index 3a5d4fa3..a36827a8 100644 --- a/locale/gen_combined/grilledham_map_gen/map_gen.lua +++ b/locale/gen_combined/grilledham_map_gen/map_gen.lua @@ -3,79 +3,83 @@ require("locale.utils.poisson_rng") local Thread = require "locale.utils.Thread" +map_gen_rows_per_tick = map_gen_rows_per_tick or 4 +map_gen_rows_per_tick = math.min(32, math.max(1, map_gen_rows_per_tick)) -function run_init(params) - global._tiles_hold = {} - global._decoratives_hold = {} - global._entities_hold = {} -end +local function do_row(row, data) + local y = data.top_y + row + local top_x = data.top_x -function run_place_tiles(params) - local surface = params.surface - surface.set_tiles(global._tiles_hold, true) -end + for x = top_x, top_x + 31 do -function run_place_items(params) - local surface = params.surface - for _,deco in pairs(global._decoratives_hold) do - surface.create_decoratives{check_collision=false, decoratives={deco}} - end - for _, entity in ipairs(global._entities_hold) do - if surface.can_place_entity {name=entity.name, position=entity.position} then - surface.create_entity {name=entity.name, position=entity.position} + -- local coords need to be 'centered' to allow for correct rotation and scaling. + local tile, entity = MAP_GEN(x + 0.5, y + 0.5, x, y) + + if type(tile) == "boolean" and not tile then + table.insert(data.tiles, {name = "out-of-map", position = {x, y}}) + elseif type(tile) == "string" then + table.insert(data.tiles, {name = tile, position = {x, y}}) + + if tile == "water" or tile == "deepwater" or tile == "water-green" or tile == "deepwater-green" then + local a = x + 1 + table.insert(data.tiles, {name = tile, position = {a, y}}) + local a =row + 1 + table.insert(data.tiles, {name = tile, position = {x, a}}) + local a = x - 1 + table.insert(data.tiles, {name = tile, position = {a, y}}) + local a =row - 1 + table.insert(data.tiles, {name = tile, position = {x, a}}) end - end -end - -function run_calc_items(params) - local top_x = params.top_x - local top_y = params.top_y - - for y = top_y, top_y + 31 do - for x = top_x, top_x + 31 do - - -- local coords need to be 'centered' to allow for correct rotation and scaling. - local tile, entity = MAP_GEN(x + 0.5, y + 0.5, x, y) - - if type(tile) == "boolean" and not tile then - table.insert( global._tiles_hold, {name = "out-of-map", position = {x, y}} ) - elseif type(tile) == "string" then - table.insert( global._tiles_hold, {name = tile, position = {x, y}} ) - - if tile == "water" or tile == "deepwater" or tile == "water-green" or tile == "deepwater-green" then - local a = x + 1 - table.insert(global._tiles_hold, {name = tile, position = {a,y}}) - local a = y + 1 - table.insert(global._tiles_hold, {name = tile, position = {x,a}}) - local a = x - 1 - table.insert(global._tiles_hold, {name = tile, position = {a,y}}) - local a = y - 1 - table.insert(global._tiles_hold, {name = tile, position = {x,a}}) - end - - if map_gen_decoratives then - tile_decoratives = check_decorative(tile, x, y) - for _,tbl in ipairs(tile_decoratives) do - table.insert(global._decoratives_hold, tbl) - end - - - tile_entities = check_entities(tile, x, y) - for _,entity in ipairs(tile_entities) do - table.insert(global._entities_hold, entity) - end - end - end - - if entity then - table.insert(global._entities_hold, entity) - end + end + if map_gen_decoratives then + tile_decoratives = check_decorative(tile, x, y) + for _,tbl in ipairs(tile_decoratives) do + table.insert(data.decoratives, tbl) end - end + + tile_entities = check_entities(tile, x, y) + for _,entity in ipairs(tile_entities) do + table.insert(data.entities, entity) + end + end + + if entity then + table.insert(data.entities, entity) + end + end end -function run_chart_update(params) +local function do_place_tiles(data) + data.surface.set_tiles(data.tiles, true) +end + +local function do_place_decoratives(data) + if not map_gen_decoratives then return end + + for _, e in pairs(surface.find_entities_filtered{area=area, type="decorative"}) do + e.destroy() + end + for _, e in pairs(surface.find_entities_filtered{area=area, type="simple-entity"}) do + e.destroy() + end + + local surface = data.surface + for _,d in pairs(data.decoratives) do + surface.create_decoratives{check_collision=false, decoratives={d}} + end +end + +local function do_place_entities(data) + local surface = data.surface + for _, e in ipairs(data.entities) do + if surface.can_place_entity(e) then + surface.create_entity(e) + end + end +end + +local function run_chart_update(params) local x = params.area.left_top.x / 32 local y = params.area.left_top.y / 32 if game.forces.player.is_chunk_charted(params.surface, {x,y} ) then @@ -84,6 +88,31 @@ function run_chart_update(params) end end +function map_gen_action(data) + local state = data.state + if state < 32 then + local count = 1 + repeat + do_row(state, data) + state = state + 1 + count = count + 1 + until state == 32 or count >= map_gen_rows_per_tick + data.state = state + return true + elseif state == 32 then + do_place_tiles(data) + data.state = 33 + return true + elseif state == 33 then + do_place_decoratives(data) + data.state = 34 + return true + elseif state == 34 then + do_place_entities(data) + return false + end +end + function run_combined_module(event) if MAP_GEN == nil then @@ -93,32 +122,19 @@ function run_combined_module(event) local area = event.area local surface = event.surface - MAP_GEN_SURFACE = surface - - - local top_x = area.left_top.x - local top_y = area.left_top.y - - if map_gen_decoratives then - for _, e in pairs(surface.find_entities_filtered{area=area, type="decorative"}) do - e.destroy() - end - for _, e in pairs(surface.find_entities_filtered{area=area, type="tree"}) do - -- e.destroy() -- Leaving the trees/forests - end - for _, e in pairs(surface.find_entities_filtered{area=area, type="simple-entity"}) do - e.destroy() - end - end - - Thread.queue_action("run_init", {} ) - - Thread.queue_action("run_calc_items", {surface = event.surface, top_x = top_x, top_y = top_y}) - - Thread.queue_action("run_place_tiles", {surface = event.surface}) - Thread.queue_action("run_place_items", {surface = event.surface}) - Thread.queue_action("run_chart_update", {area = event.area, surface = event.surface} ) + MAP_GEN_SURFACE = surface + local data = + { + state = 0, + top_x = area.left_top.x, + top_y = area.left_top.y , + surface = surface, + tiles = {}, + entities = {}, + decoratives = {} + } + Thread.queue_action("map_gen_action", data) end local decorative_options = { @@ -209,7 +225,7 @@ local decorative_options = { ["out-of-map"] = {}, } -function check_decorative(tile, x, y) +local function check_decorative(tile, x, y) local options = decorative_options[tile] local tile_decoratives = {} diff --git a/locale/gen_combined/grilledham_map_gen/map_gen_not_threaded.lua b/locale/gen_combined/grilledham_map_gen/map_gen_not_threaded.lua new file mode 100644 index 00000000..9b466cdd --- /dev/null +++ b/locale/gen_combined/grilledham_map_gen/map_gen_not_threaded.lua @@ -0,0 +1,316 @@ +require("locale.gen_combined.grilledham_map_gen.builders") +require("locale.utils.poisson_rng") + +local function do_row(row, data) + local y = data.top_y + row + local top_x = data.top_x + + for x = top_x, top_x + 31 do + + -- local coords need to be 'centered' to allow for correct rotation and scaling. + local tile, entity = MAP_GEN(x + 0.5, y + 0.5, x, y) + + if type(tile) == "boolean" and not tile then + table.insert(data.tiles, {name = "out-of-map", position = {x, y}}) + elseif type(tile) == "string" then + table.insert(data.tiles, {name = tile, position = {x, y}}) + + if tile == "water" or tile == "deepwater" or tile == "water-green" or tile == "deepwater-green" then + local a = x + 1 + table.insert(data.tiles, {name = tile, position = {a, y}}) + local a =row + 1 + table.insert(data.tiles, {name = tile, position = {x, a}}) + local a = x - 1 + table.insert(data.tiles, {name = tile, position = {a, y}}) + local a =row - 1 + table.insert(data.tiles, {name = tile, position = {x, a}}) + end + end + + if map_gen_decoratives then + tile_decoratives = check_decorative(tile, x, y) + for _,tbl in ipairs(tile_decoratives) do + table.insert(data.decoratives, tbl) + end + + tile_entities = check_entities(tile, x, y) + for _,entity in ipairs(tile_entities) do + table.insert(data.entities, entity) + end + end + + if entity then + table.insert(data.entities, entity) + end + end +end + +local function do_place_tiles(data) + data.surface.set_tiles(data.tiles, true) +end + +local function do_place_decoratives(data) + if not map_gen_decoratives then return end + + for _, e in pairs(surface.find_entities_filtered{area=area, type="decorative"}) do + e.destroy() + end + for _, e in pairs(surface.find_entities_filtered{area=area, type="simple-entity"}) do + e.destroy() + end + + local surface = data.surface + for _,d in pairs(data.decoratives) do + surface.create_decoratives{check_collision=false, decoratives={d}} + end +end + +local function do_place_entities(data) + local surface = data.surface + for _, e in ipairs(data.entities) do + if surface.can_place_entity(e) then + surface.create_entity(e) + end + end +end + +function run_combined_module(event) + + if MAP_GEN == nil then + game.print("MAP_GEN not set") + return + end + + local area = event.area + local surface = event.surface + MAP_GEN_SURFACE = surface + + local data = + { + top_x = area.left_top.x, + top_y = area.left_top.y , + surface = surface, + tiles = {}, + entities = {}, + decoratives = {} + } + + for row = 0, 31 do + do_row(row, data) + end + + do_place_tiles(data) + do_place_decoratives(data) + do_place_entities(data) + +end + +local decorative_options = { + ["concrete"] = {}, + ["deepwater"] = {}, + ["deepwater-green"] = { + {"brown-carpet-grass", 100}, + {"brown-cane-cluster", 500}, + }, + ["dirt-3"] = { + {"brown-carpet-grass", 100}, + {"brown-cane-cluster", 200}, + {"sand-rock-small", 150}, + }, + ["dirt-6"] = { + {"sand-rock-small", 150}, + {"red-asterisk", 45}, + {"red-desert-bush", 12}, + {"rock-medium", 375}, + + + }, + ["grass-1"] = { + {"green-carpet-grass-1", 3}, + {"green-hairy-grass-1", 7}, + {"green-bush-mini", 10}, + {"green-pita", 6}, + {"green-small-grass-1", 12}, + {"green-asterisk", 25}, + {"green-bush-mini", 7}, + {"garballo", 20}, + }, + ["grass-3"] = { + {"green-carpet-grass-1", 12}, + {"green-hairy-grass-1", 28}, + {"green-bush-mini", 40}, + {"green-pita", 24}, + {"green-small-grass-1", 48}, + {"green-asterisk", 100}, + {"green-bush-mini", 28}, + }, + ["grass-2"] = { + {"green-hairy-grass-1", 56}, + {"green-bush-mini", 80}, + {"green-pita", 48}, + {"green-small-grass-1", 96}, + {"green-asterisk", 200}, + {"green-bush-mini", 56}, + {"brown-cane-cluster", 100}, + {"brown-carpet-grass", 100}, + }, + ["hazard-concrete-left"] = {}, + ["hazard-concrete-right"] = {}, + ["lab-dark-1"] = {}, + ["lab-dark-2"] = {}, + ["red-desert"] = { + {"brown-carpet-grass", 35}, + {"orange-coral-mini", 45}, + {"red-asterisk", 45}, + {"red-desert-bush", 12}, + {"rock-medium", 375}, + {"sand-rock-small", 200}, + {"sand-rock-small", 30}, + }, + ["red-desert-dark"] = { + {"brown-carpet-grass", 70}, + {"orange-coral-mini", 90}, + {"red-asterisk", 90}, + {"red-desert-bush", 35}, + {"rock-medium", 375}, + {"sand-rock-small", 200}, + {"sand-rock-small", 150}, + }, + ["sand-1"] = { + {"brown-carpet-grass", 35}, + {"orange-coral-mini", 45}, + {"red-asterisk", 45}, + {"brown-asterisk", 45}, + }, + ["sand-3"] = { + {"brown-carpet-grass", 35}, + {"orange-coral-mini", 45}, + {"brown-asterisk", 45}, + }, + ["stone-path"] = {}, + ["water"] = {}, + ["water-green"] = {}, + ["out-of-map"] = {}, +} + +local function check_decorative(tile, x, y) + local options = decorative_options[tile] + local tile_decoratives = {} + + for _,e in ipairs(options) do + name = e[1] + high_roll = e[2] + if poisson_rng_next(high_roll / 2 ) == 1 then + table.insert(tile_decoratives, {name=name, amount=1, position={x,y}}) + end + end + + return tile_decoratives +end + +local entity_options = { + ["concrete"] = {}, + ["deepwater"] = {}, + ["deepwater-green"] = {}, + ["water"] = {}, + ["water-green"] = {}, + ["dirt-3"] = { + {"tree-01", 500}, + {"tree-06", 300}, + {"tree-07", 800}, + {"tree-09", 2000}, + {"rock-big", 400}, + }, + ["dirt-6"] = { + {"tree-06", 150}, + {"tree-07", 400}, + {"tree-09", 1000}, + {"rock-big", 300}, + }, + ["grass-1"] = { + {"tree-01", 150}, + {"tree-04", 400}, + {"tree-06", 400}, + {"tree-07", 400}, + {"tree-09", 1000}, + {"rock-big", 400}, + {"green-coral", 10000}, + }, + ["grass-3"] = { + {"tree-02", 400}, + {"tree-03", 400}, + {"tree-04", 800}, + {"tree-06", 300}, + {"tree-07", 800}, + {"tree-08", 400}, + {"tree-09", 2000}, + {"rock-big", 400}, + }, + ["grass-2"] = { + {"tree-04", 800}, + {"tree-06", 300}, + {"tree-07", 400}, + {"tree-09", 1000}, + {"dry-tree", 1000}, + {"rock-big", 200}, + }, + ["hazard-concrete-left"] = {}, + ["hazard-concrete-right"] = {}, + ["lab-dark-1"] = {}, + ["lab-dark-2"] = {}, + ["red-desert"] = { + {"dry-tree", 400}, + {"dry-hairy-tree", 400}, + {"tree-06", 500}, + {"tree-06", 500}, + {"tree-01", 500}, + {"tree-02", 500}, + {"tree-03", 500}, + {"sand-rock-big", 200}, + {"sand-rock-big", 400}, + {"red-desert-rock-huge-02", 400}, + }, + ["red-desert-dark"] = { + {"dry-tree", 400}, + {"dry-hairy-tree", 400}, + {"tree-06", 500}, + {"tree-06", 500}, + {"tree-01", 500}, + {"tree-02", 500}, + {"tree-03", 500}, + {"sand-rock-big", 200}, + {"sand-rock-big", 400}, + {"red-desert-rock-huge-02", 400}, + }, + ["sand-1"] = { + {"dry-tree", 1000}, + {"dry-hairy-tree", 1000}, + {"dead-tree", 1000}, + {"rock-big", 150}, + + }, + ["sand-3"] = { + {"dead-tree", 1000}, + {"dry-tree", 1000}, + {"dry-hairy-tree", 1000}, + {"rock-big", 150}, + + }, + ["stone-path"] = {}, + ["out-of-map"] = {}, +} + +function check_entities(tile, x, y) + local options = entity_options[tile] + local tile_entity_list = {} + + for _,e in ipairs(options) do + name = e[1] + high_roll = e[2] + if poisson_rng_next( high_roll / 2 ) == 1 then + table.insert(tile_entity_list, {name=name, position={x,y}}) + end + end + + return tile_entity_list +end diff --git a/locale/gen_combined/grilledham_map_gen/presets/template.lua b/locale/gen_combined/grilledham_map_gen/presets/template.lua index 78ba25d3..e4167014 100644 --- a/locale/gen_combined/grilledham_map_gen/presets/template.lua +++ b/locale/gen_combined/grilledham_map_gen/presets/template.lua @@ -1,4 +1,8 @@ ---require "locale.gen_combined.grilledham_map_gen.map_gen_no_thread" +map_gen_decoratives = false -- Generate our own decoratives +map_gen_rows_per_tick = 4 -- Inclusive integer between 1 and 32. Used for map_gen_threaded, higher numbers will generate map quicker but cause more lag. + +-- Recommend to use map_gen, but map_gen_not_threaded may be useful for testing / debugging. +--require "locale.gen_combined.grilledham_map_gen.map_gen_not_threaded" require "locale.gen_combined.grilledham_map_gen.map_gen" local pic = require "locale.gen_combined.grilledham_map_gen.data.template" diff --git a/locale/utils/Thread.lua b/locale/utils/Thread.lua index d5e16f77..6349b82b 100644 --- a/locale/utils/Thread.lua +++ b/locale/utils/Thread.lua @@ -21,12 +21,20 @@ global.next_async_callback_time = -1 global.actions_queue_n = 0 local function on_tick() for action = 1, get_actions_per_tick() do - if global.actions_queue[1] then + if global.actions_queue[1] then + local callback = global.actions_queue[1] + function call(params) + return _G[callback.action](params) + end + local success, result = pcall(call, callback.params) -- result is error if not success else result is a boolean for if the action should stay in the queue. + if not success then + log(result) global.actions_queue_n = global.actions_queue_n - 1 - local callback = global.actions_queue[1] - local _, err = pcall(_G[callback.action], callback.params) - if err then log(err) end - table.remove(global.actions_queue, 1) + table.remove(global.actions_queue, 1) + elseif not result then + global.actions_queue_n = global.actions_queue_n - 1 + table.remove(global.actions_queue, 1) + end end end if game.tick == global.next_async_callback_time then