From 8b60f336a5385b8d8b617fc2aeb74252a0ab78e3 Mon Sep 17 00:00:00 2001 From: Fei Han Date: Sat, 7 Mar 2020 19:07:17 +0800 Subject: [PATCH 01/12] add hint for bc join --- hintparser.go | 2 ++ hintparser.y | 1 + misc.go | 2 ++ 3 files changed, 5 insertions(+) diff --git a/hintparser.go b/hintparser.go index 5d18f6834..298847299 100644 --- a/hintparser.go +++ b/hintparser.go @@ -104,6 +104,7 @@ const ( hintUseIndexMerge = 57391 hintUsePlanCache = 57393 hintUseToja = 57394 + hintBCJoin = 57395 yyhintMaxDepth = 200 yyhintTabOfs = -156 @@ -258,6 +259,7 @@ var ( "hintSetVar", "hintSkipScan", "hintSMJoin", + "hintBCJoin", "hintStreamAgg", "hintSwapJoinInputs", "hintTimeRange", diff --git a/hintparser.y b/hintparser.y index aa267c304..014748ebf 100644 --- a/hintparser.y +++ b/hintparser.y @@ -90,6 +90,7 @@ import ( hintReadConsistentReplica "READ_CONSISTENT_REPLICA" hintReadFromStorage "READ_FROM_STORAGE" hintSMJoin "SM_JOIN" + hintBCJoin "BC_JOIN" hintStreamAgg "STREAM_AGG" hintSwapJoinInputs "SWAP_JOIN_INPUTS" hintUseIndexMerge "USE_INDEX_MERGE" diff --git a/misc.go b/misc.go index c6a732b35..0b8a456d6 100644 --- a/misc.go +++ b/misc.go @@ -831,6 +831,7 @@ var hintTokenMap = map[string]int{ "READ_CONSISTENT_REPLICA": hintReadConsistentReplica, "READ_FROM_STORAGE": hintReadFromStorage, "SM_JOIN": hintSMJoin, + "BC_JOIN": hintBCJoin, "STREAM_AGG": hintStreamAgg, "SWAP_JOIN_INPUTS": hintSwapJoinInputs, "USE_INDEX_MERGE": hintUseIndexMerge, @@ -843,6 +844,7 @@ var hintTokenMap = map[string]int{ "TIDB_HJ": hintHashJoin, "TIDB_INLJ": hintInlJoin, "TIDB_SMJ": hintSMJoin, + "TIDB_BCJ": hintBCJoin, // Other keywords "OLAP": hintOLAP, From fda93fd3e4615dabd987b0ef95c85597327c368c Mon Sep 17 00:00:00 2001 From: Fei Han Date: Sat, 7 Mar 2020 21:52:51 +0800 Subject: [PATCH 02/12] refine --- hintparser.go | 990 +++++++++++++++++++++++++------------------------- hintparser.y | 2 + 2 files changed, 500 insertions(+), 492 deletions(-) diff --git a/hintparser.go b/hintparser.go index 298847299..ba7c99305 100644 --- a/hintparser.go +++ b/hintparser.go @@ -39,17 +39,18 @@ type yyhintXError struct { } const ( - yyhintDefault = 57408 + yyhintDefault = 57409 yyhintEOFCode = 57344 yyhintErrCode = 57345 hintAggToCop = 57376 + hintBCJoin = 57389 hintBKA = 57354 hintBNL = 57356 - hintDupsWeedOut = 57404 + hintDupsWeedOut = 57405 hintEnablePlanCache = 57377 - hintFalse = 57400 - hintFirstMatch = 57405 - hintGB = 57403 + hintFalse = 57401 + hintFirstMatch = 57406 + hintGB = 57404 hintHashAgg = 57378 hintHashJoin = 57358 hintIdentifier = 57347 @@ -63,10 +64,10 @@ const ( hintJoinOrder = 57351 hintJoinPrefix = 57352 hintJoinSuffix = 57353 - hintLooseScan = 57406 - hintMB = 57402 + hintLooseScan = 57407 + hintMB = 57403 hintMRR = 57364 - hintMaterialization = 57407 + hintMaterialization = 57408 hintMaxExecutionTime = 57372 hintMemoryQuota = 57383 hintMerge = 57360 @@ -81,8 +82,8 @@ const ( hintNoSemijoin = 57371 hintNoSkipScan = 57369 hintNoSwapJoinInputs = 57384 - hintOLAP = 57396 - hintOLTP = 57397 + hintOLAP = 57397 + hintOLTP = 57398 hintQBName = 57375 hintQueryType = 57385 hintReadConsistentReplica = 57386 @@ -93,134 +94,135 @@ const ( hintSetVar = 57373 hintSingleAtIdentifier = 57348 hintSkipScan = 57368 - hintStreamAgg = 57389 + hintStreamAgg = 57390 hintStringLit = 57349 - hintSwapJoinInputs = 57390 - hintTiFlash = 57399 - hintTiKV = 57398 - hintTimeRange = 57395 - hintTrue = 57401 - hintUseIndex = 57392 - hintUseIndexMerge = 57391 - hintUsePlanCache = 57393 - hintUseToja = 57394 - hintBCJoin = 57395 + hintSwapJoinInputs = 57391 + hintTiFlash = 57400 + hintTiKV = 57399 + hintTimeRange = 57396 + hintTrue = 57402 + hintUseIndex = 57393 + hintUseIndexMerge = 57392 + hintUsePlanCache = 57394 + hintUseToja = 57395 yyhintMaxDepth = 200 - yyhintTabOfs = -156 + yyhintTabOfs = -158 ) var ( yyhintXLAT = map[int]int{ - 41: 0, // ')' (117x) - 44: 1, // ',' (107x) - 57376: 2, // hintAggToCop (107x) - 57354: 3, // hintBKA (107x) - 57356: 4, // hintBNL (107x) - 57377: 5, // hintEnablePlanCache (107x) - 57378: 6, // hintHashAgg (107x) - 57358: 7, // hintHashJoin (107x) - 57379: 8, // hintIgnoreIndex (107x) - 57362: 9, // hintIndexMerge (107x) - 57380: 10, // hintInlHashJoin (107x) - 57381: 11, // hintInlJoin (107x) - 57382: 12, // hintInlMergeJoin (107x) - 57350: 13, // hintJoinFixedOrder (107x) - 57351: 14, // hintJoinOrder (107x) - 57352: 15, // hintJoinPrefix (107x) - 57353: 16, // hintJoinSuffix (107x) - 57372: 17, // hintMaxExecutionTime (107x) - 57383: 18, // hintMemoryQuota (107x) - 57360: 19, // hintMerge (107x) - 57364: 20, // hintMRR (107x) - 57355: 21, // hintNoBKA (107x) - 57357: 22, // hintNoBNL (107x) - 57359: 23, // hintNoHashJoin (107x) - 57366: 24, // hintNoICP (107x) - 57363: 25, // hintNoIndexMerge (107x) - 57361: 26, // hintNoMerge (107x) - 57365: 27, // hintNoMRR (107x) - 57367: 28, // hintNoRangeOptimization (107x) - 57371: 29, // hintNoSemijoin (107x) - 57369: 30, // hintNoSkipScan (107x) - 57384: 31, // hintNoSwapJoinInputs (107x) - 57375: 32, // hintQBName (107x) - 57385: 33, // hintQueryType (107x) - 57386: 34, // hintReadConsistentReplica (107x) - 57387: 35, // hintReadFromStorage (107x) - 57374: 36, // hintResourceGroup (107x) - 57370: 37, // hintSemijoin (107x) - 57373: 38, // hintSetVar (107x) - 57368: 39, // hintSkipScan (107x) - 57388: 40, // hintSMJoin (107x) - 57389: 41, // hintStreamAgg (107x) - 57390: 42, // hintSwapJoinInputs (107x) - 57395: 43, // hintTimeRange (107x) - 57392: 44, // hintUseIndex (107x) - 57391: 45, // hintUseIndexMerge (107x) - 57393: 46, // hintUsePlanCache (107x) - 57394: 47, // hintUseToja (107x) - 57404: 48, // hintDupsWeedOut (86x) - 57405: 49, // hintFirstMatch (86x) - 57406: 50, // hintLooseScan (86x) - 57407: 51, // hintMaterialization (86x) - 57399: 52, // hintTiFlash (86x) - 57398: 53, // hintTiKV (86x) - 57400: 54, // hintFalse (85x) - 57396: 55, // hintOLAP (85x) - 57397: 56, // hintOLTP (85x) - 57401: 57, // hintTrue (85x) - 57403: 58, // hintGB (84x) - 57402: 59, // hintMB (84x) - 57347: 60, // hintIdentifier (83x) - 57348: 61, // hintSingleAtIdentifier (75x) - 93: 62, // ']' (67x) - 46: 63, // '.' (60x) - 61: 64, // '=' (60x) - 40: 65, // '(' (54x) - 57344: 66, // $end (23x) - 57426: 67, // QueryBlockOpt (16x) - 57420: 68, // Identifier (11x) - 57346: 69, // hintIntLit (6x) - 57349: 70, // hintStringLit (5x) - 57416: 71, // HintTable (4x) - 57417: 72, // HintTableList (4x) - 91: 73, // '[' (3x) - 57410: 74, // CommaOpt (3x) - 57409: 75, // BooleanHintName (2x) - 57411: 76, // HintIndexList (2x) - 57413: 77, // HintStorageType (2x) - 57414: 78, // HintStorageTypeAndTable (2x) - 57418: 79, // HintTableListOpt (2x) - 57423: 80, // JoinOrderOptimizerHintName (2x) - 57424: 81, // NullaryHintName (2x) - 57428: 82, // StorageOptimizerHintOpt (2x) - 57429: 83, // SubqueryOptimizerHintName (2x) - 57432: 84, // SubqueryStrategy (2x) - 57433: 85, // SupportedIndexLevelOptimizerHintName (2x) - 57434: 86, // SupportedTableLevelOptimizerHintName (2x) - 57435: 87, // TableOptimizerHintOpt (2x) - 57437: 88, // UnsupportedIndexLevelOptimizerHintName (2x) - 57438: 89, // UnsupportedTableLevelOptimizerHintName (2x) - 57412: 90, // HintQueryType (1x) - 57415: 91, // HintStorageTypeAndTableList (1x) - 57419: 92, // HintTrueOrFalse (1x) - 57421: 93, // IndexNameList (1x) - 57422: 94, // IndexNameListOpt (1x) - 57425: 95, // OptimizerHintList (1x) - 57427: 96, // Start (1x) - 57430: 97, // SubqueryStrategies (1x) - 57431: 98, // SubqueryStrategiesOpt (1x) - 57436: 99, // UnitOfBytes (1x) - 57439: 100, // Value (1x) - 57408: 101, // $default (0x) - 57345: 102, // error (0x) + 41: 0, // ')' (118x) + 44: 1, // ',' (108x) + 57376: 2, // hintAggToCop (108x) + 57389: 3, // hintBCJoin (108x) + 57354: 4, // hintBKA (108x) + 57356: 5, // hintBNL (108x) + 57377: 6, // hintEnablePlanCache (108x) + 57378: 7, // hintHashAgg (108x) + 57358: 8, // hintHashJoin (108x) + 57379: 9, // hintIgnoreIndex (108x) + 57362: 10, // hintIndexMerge (108x) + 57380: 11, // hintInlHashJoin (108x) + 57381: 12, // hintInlJoin (108x) + 57382: 13, // hintInlMergeJoin (108x) + 57350: 14, // hintJoinFixedOrder (108x) + 57351: 15, // hintJoinOrder (108x) + 57352: 16, // hintJoinPrefix (108x) + 57353: 17, // hintJoinSuffix (108x) + 57372: 18, // hintMaxExecutionTime (108x) + 57383: 19, // hintMemoryQuota (108x) + 57360: 20, // hintMerge (108x) + 57364: 21, // hintMRR (108x) + 57355: 22, // hintNoBKA (108x) + 57357: 23, // hintNoBNL (108x) + 57359: 24, // hintNoHashJoin (108x) + 57366: 25, // hintNoICP (108x) + 57363: 26, // hintNoIndexMerge (108x) + 57361: 27, // hintNoMerge (108x) + 57365: 28, // hintNoMRR (108x) + 57367: 29, // hintNoRangeOptimization (108x) + 57371: 30, // hintNoSemijoin (108x) + 57369: 31, // hintNoSkipScan (108x) + 57384: 32, // hintNoSwapJoinInputs (108x) + 57375: 33, // hintQBName (108x) + 57385: 34, // hintQueryType (108x) + 57386: 35, // hintReadConsistentReplica (108x) + 57387: 36, // hintReadFromStorage (108x) + 57374: 37, // hintResourceGroup (108x) + 57370: 38, // hintSemijoin (108x) + 57373: 39, // hintSetVar (108x) + 57368: 40, // hintSkipScan (108x) + 57388: 41, // hintSMJoin (108x) + 57390: 42, // hintStreamAgg (108x) + 57391: 43, // hintSwapJoinInputs (108x) + 57396: 44, // hintTimeRange (108x) + 57393: 45, // hintUseIndex (108x) + 57392: 46, // hintUseIndexMerge (108x) + 57394: 47, // hintUsePlanCache (108x) + 57395: 48, // hintUseToja (108x) + 57405: 49, // hintDupsWeedOut (87x) + 57406: 50, // hintFirstMatch (87x) + 57407: 51, // hintLooseScan (87x) + 57408: 52, // hintMaterialization (87x) + 57400: 53, // hintTiFlash (87x) + 57399: 54, // hintTiKV (87x) + 57401: 55, // hintFalse (86x) + 57397: 56, // hintOLAP (86x) + 57398: 57, // hintOLTP (86x) + 57402: 58, // hintTrue (86x) + 57404: 59, // hintGB (85x) + 57403: 60, // hintMB (85x) + 57347: 61, // hintIdentifier (84x) + 57348: 62, // hintSingleAtIdentifier (76x) + 93: 63, // ']' (68x) + 46: 64, // '.' (61x) + 61: 65, // '=' (61x) + 40: 66, // '(' (55x) + 57344: 67, // $end (23x) + 57427: 68, // QueryBlockOpt (16x) + 57421: 69, // Identifier (11x) + 57346: 70, // hintIntLit (6x) + 57349: 71, // hintStringLit (5x) + 57417: 72, // HintTable (4x) + 57418: 73, // HintTableList (4x) + 91: 74, // '[' (3x) + 57411: 75, // CommaOpt (3x) + 57410: 76, // BooleanHintName (2x) + 57412: 77, // HintIndexList (2x) + 57414: 78, // HintStorageType (2x) + 57415: 79, // HintStorageTypeAndTable (2x) + 57419: 80, // HintTableListOpt (2x) + 57424: 81, // JoinOrderOptimizerHintName (2x) + 57425: 82, // NullaryHintName (2x) + 57429: 83, // StorageOptimizerHintOpt (2x) + 57430: 84, // SubqueryOptimizerHintName (2x) + 57433: 85, // SubqueryStrategy (2x) + 57434: 86, // SupportedIndexLevelOptimizerHintName (2x) + 57435: 87, // SupportedTableLevelOptimizerHintName (2x) + 57436: 88, // TableOptimizerHintOpt (2x) + 57438: 89, // UnsupportedIndexLevelOptimizerHintName (2x) + 57439: 90, // UnsupportedTableLevelOptimizerHintName (2x) + 57413: 91, // HintQueryType (1x) + 57416: 92, // HintStorageTypeAndTableList (1x) + 57420: 93, // HintTrueOrFalse (1x) + 57422: 94, // IndexNameList (1x) + 57423: 95, // IndexNameListOpt (1x) + 57426: 96, // OptimizerHintList (1x) + 57428: 97, // Start (1x) + 57431: 98, // SubqueryStrategies (1x) + 57432: 99, // SubqueryStrategiesOpt (1x) + 57437: 100, // UnitOfBytes (1x) + 57440: 101, // Value (1x) + 57409: 102, // $default (0x) + 57345: 103, // error (0x) } yyhintSymNames = []string{ "')'", "','", "hintAggToCop", + "hintBCJoin", "hintBKA", "hintBNL", "hintEnablePlanCache", @@ -259,7 +261,6 @@ var ( "hintSetVar", "hintSkipScan", "hintSMJoin", - "hintBCJoin", "hintStreamAgg", "hintSwapJoinInputs", "hintTimeRange", @@ -326,60 +327,75 @@ var ( yyhintReductions = []struct{ xsym, components int }{ {0, 1}, + {97, 1}, {96, 1}, - {95, 1}, - {95, 3}, - {95, 1}, - {95, 3}, - {87, 4}, - {87, 4}, - {87, 4}, - {87, 4}, - {87, 4}, - {87, 4}, - {87, 5}, - {87, 5}, - {87, 6}, - {87, 4}, - {87, 4}, - {87, 6}, - {87, 6}, - {87, 5}, - {87, 4}, - {87, 5}, - {82, 5}, - {91, 1}, - {91, 3}, - {78, 4}, - {67, 0}, - {67, 1}, - {74, 0}, - {74, 1}, - {79, 1}, - {79, 1}, + {96, 3}, + {96, 1}, + {96, 3}, + {88, 4}, + {88, 4}, + {88, 4}, + {88, 4}, + {88, 4}, + {88, 4}, + {88, 5}, + {88, 5}, + {88, 6}, + {88, 4}, + {88, 4}, + {88, 6}, + {88, 6}, + {88, 5}, + {88, 4}, + {88, 5}, + {83, 5}, + {92, 1}, + {92, 3}, + {79, 4}, + {68, 0}, + {68, 1}, + {75, 0}, + {75, 1}, + {80, 1}, + {80, 1}, + {73, 2}, + {73, 3}, {72, 2}, - {72, 3}, - {71, 2}, - {71, 4}, - {76, 4}, - {94, 0}, + {72, 4}, + {77, 4}, + {95, 0}, + {95, 1}, {94, 1}, - {93, 1}, - {93, 3}, - {98, 0}, + {94, 3}, + {99, 0}, + {99, 1}, {98, 1}, - {97, 1}, - {97, 3}, - {100, 1}, + {98, 3}, + {101, 1}, + {101, 1}, + {101, 1}, {100, 1}, {100, 1}, - {99, 1}, - {99, 1}, - {92, 1}, - {92, 1}, - {80, 1}, - {80, 1}, - {80, 1}, + {93, 1}, + {93, 1}, + {81, 1}, + {81, 1}, + {81, 1}, + {90, 1}, + {90, 1}, + {90, 1}, + {90, 1}, + {90, 1}, + {90, 1}, + {90, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, + {87, 1}, {89, 1}, {89, 1}, {89, 1}, @@ -390,378 +406,368 @@ var ( {86, 1}, {86, 1}, {86, 1}, - {86, 1}, - {86, 1}, - {86, 1}, - {86, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, + {84, 1}, + {84, 1}, {85, 1}, {85, 1}, {85, 1}, - {83, 1}, - {83, 1}, - {84, 1}, - {84, 1}, - {84, 1}, - {84, 1}, - {75, 1}, - {75, 1}, - {81, 1}, - {81, 1}, - {81, 1}, - {81, 1}, - {81, 1}, - {81, 1}, - {90, 1}, - {90, 1}, - {77, 1}, - {77, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, - {68, 1}, + {85, 1}, + {76, 1}, + {76, 1}, + {82, 1}, + {82, 1}, + {82, 1}, + {82, 1}, + {82, 1}, + {82, 1}, + {91, 1}, + {91, 1}, + {78, 1}, + {78, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, + {69, 1}, } yyhintXErrors = map[yyhintXError]string{} - yyhintParseTab = [230][]uint16{ + yyhintParseTab = [232][]uint16{ // 0 - {2: 212, 181, 183, 208, 210, 194, 203, 195, 190, 189, 193, 161, 178, 179, 180, 168, 172, 186, 196, 182, 184, 185, 198, 213, 187, 197, 199, 206, 201, 192, 171, 176, 214, 177, 170, 205, 169, 200, 188, 211, 191, 173, 202, 204, 209, 207, 75: 174, 80: 162, 175, 160, 167, 85: 166, 164, 159, 165, 163, 95: 158, 157}, - {66: 156}, - {1: 315, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 66: 155, 74: 383}, - {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 66: 154}, - {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 66: 152}, + {2: 215, 191, 183, 185, 211, 213, 197, 206, 198, 193, 192, 196, 163, 180, 181, 182, 170, 174, 188, 199, 184, 186, 187, 201, 216, 189, 200, 202, 209, 204, 195, 173, 178, 217, 179, 172, 208, 171, 203, 190, 214, 194, 175, 205, 207, 212, 210, 76: 176, 81: 164, 177, 162, 169, 86: 168, 166, 161, 167, 165, 96: 160, 159}, + {67: 158}, + {1: 319, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 67: 157, 75: 387}, + {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 67: 156}, + {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 67: 154}, // 5 - {65: 380}, - {65: 377}, - {65: 374}, - {65: 369}, - {65: 366}, + {66: 384}, + {66: 381}, + {66: 378}, + {66: 373}, + {66: 370}, // 10 - {65: 355}, - {65: 343}, - {65: 339}, - {65: 331}, - {65: 328}, + {66: 359}, + {66: 347}, + {66: 343}, + {66: 335}, + {66: 332}, // 15 - {65: 325}, - {65: 318}, - {65: 312}, - {65: 306}, - {65: 303}, + {66: 329}, + {66: 322}, + {66: 316}, + {66: 310}, + {66: 307}, // 20 - {65: 297}, - {65: 215}, - {65: 104}, - {65: 103}, - {65: 102}, + {66: 301}, + {66: 218}, + {66: 106}, + {66: 105}, + {66: 104}, // 25 - {65: 101}, - {65: 100}, - {65: 99}, - {65: 98}, - {65: 97}, + {66: 103}, + {66: 102}, + {66: 101}, + {66: 100}, + {66: 99}, // 30 - {65: 96}, - {65: 95}, - {65: 94}, - {65: 93}, - {65: 92}, + {66: 98}, + {66: 97}, + {66: 96}, + {66: 95}, + {66: 94}, // 35 - {65: 91}, - {65: 90}, - {65: 89}, - {65: 88}, - {65: 87}, + {66: 93}, + {66: 92}, + {66: 91}, + {66: 90}, + {66: 89}, // 40 - {65: 86}, - {65: 85}, - {65: 84}, - {65: 83}, - {65: 82}, + {66: 88}, + {66: 87}, + {66: 86}, + {66: 85}, + {66: 84}, // 45 - {65: 81}, - {65: 80}, - {65: 79}, - {65: 78}, - {65: 77}, + {66: 83}, + {66: 82}, + {66: 81}, + {66: 80}, + {66: 79}, // 50 - {65: 76}, - {65: 71}, - {65: 70}, - {65: 69}, - {65: 68}, + {66: 78}, + {66: 77}, + {66: 72}, + {66: 71}, + {66: 70}, // 55 - {65: 67}, - {65: 66}, - {65: 65}, - {65: 64}, - {52: 130, 130, 61: 217, 67: 216}, + {66: 69}, + {66: 68}, + {66: 67}, + {66: 66}, + {66: 65}, // 60 - {52: 222, 221, 77: 220, 219, 91: 218}, - {129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 62: 129, 69: 129}, - {294, 295}, - {133, 133}, - {73: 223}, + {53: 132, 132, 62: 220, 68: 219}, + {53: 225, 224, 78: 223, 222, 92: 221}, + {131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 63: 131, 70: 131}, + {298, 299}, + {135, 135}, // 65 - {73: 61}, - {73: 60}, - {2: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 217, 67: 225, 72: 224}, - {1: 292, 62: 291}, - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 227, 71: 226}, + {74: 226}, + {74: 62}, + {74: 61}, + {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 228, 73: 227}, + {1: 296, 63: 295}, // 70 - {124, 124, 62: 124}, - {130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 217, 130, 288, 67: 287}, - {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, - {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, - {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 229}, + {126, 126, 63: 126}, + {132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 132, 292, 68: 291}, + {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, + {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, // 75 - {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, - {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, - {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, - {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, - {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, + {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, + {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, + {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, + {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, + {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, // 80 - {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, - {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, - {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, - {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, - {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, + {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, + {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, + {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, + {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, + {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, // 85 - {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, - {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, - {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, - {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, - {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, + {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, + {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, + {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, + {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, + {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, // 90 - {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, - {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, - {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, - {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, - {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, + {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, + {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, + {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, + {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, + {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, // 95 - {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, - {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, - {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, - {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, - {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, + {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, + {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, + {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, + {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, + {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, // 100 - {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, - {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, - {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, - {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, - {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, + {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, + {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, + {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, + {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, + {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, // 105 - {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, - {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, - {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, - {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, - {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, + {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, + {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, + {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, + {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, + {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, // 110 - {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, - {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, - {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, - {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, - {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, + {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, + {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, + {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, + {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, + {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, // 115 - {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, - {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, - {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, - {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, - {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, + {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, + {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, + {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, + {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, + {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, // 120 - {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, - {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, - {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, - {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, + {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, + {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, + {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, + {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, + {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, // 125 - {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, - {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, + {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, + {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, + {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, // 130 - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - {122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 62: 122}, - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 289}, - {130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 217, 130, 67: 290}, - {121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 62: 121}, + {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, + {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 63: 124}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 293}, // 135 - {131, 131}, - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 227, 71: 293}, - {123, 123, 62: 123}, - {1: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 66: 134}, - {52: 222, 221, 77: 220, 296}, + {132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 132, 68: 294}, + {123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 63: 123}, + {133, 133}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 297}, + {125, 125, 63: 125}, // 140 - {132, 132}, - {55: 130, 130, 61: 217, 67: 298}, - {55: 300, 301, 90: 299}, - {302}, - {63}, + {1: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 67: 136}, + {53: 225, 224, 78: 223, 300}, + {134, 134}, + {56: 132, 132, 62: 220, 68: 302}, + {56: 304, 305, 91: 303}, // 145 - {62}, - {1: 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 66: 135}, - {130, 61: 217, 67: 304}, - {305}, - {1: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 66: 136}, + {306}, + {64}, + {63}, + {1: 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 67: 137}, + {132, 62: 220, 68: 308}, // 150 - {54: 130, 57: 130, 61: 217, 67: 307}, - {54: 310, 57: 309, 92: 308}, - {311}, - {106}, - {105}, + {309}, + {1: 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 67: 138}, + {55: 132, 58: 132, 62: 220, 68: 311}, + {55: 314, 58: 313, 93: 312}, + {315}, // 155 - {1: 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 66: 137}, - {70: 313}, - {1: 315, 70: 128, 74: 314}, - {70: 316}, - {127, 2: 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 70: 127}, - // 160 - {317}, - {1: 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 66: 138}, - {61: 217, 67: 319, 69: 130}, - {69: 320}, - {58: 323, 322, 99: 321}, - // 165 - {324}, {108}, {107}, - {1: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 66: 139}, - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 326}, + {1: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 67: 139}, + {71: 317}, + {1: 319, 71: 130, 75: 318}, + // 160 + {71: 320}, + {129, 2: 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 71: 129}, + {321}, + {1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 67: 140}, + {62: 220, 68: 323, 70: 132}, + // 165 + {70: 324}, + {59: 327, 326, 100: 325}, + {328}, + {110}, + {109}, // 170 - {327}, - {1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 66: 140}, - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 329}, - {330}, - {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 66: 141}, + {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 67: 141}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 330}, + {331}, + {1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 67: 142}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 333}, // 175 - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 332}, - {64: 333}, - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 336, 337, 335, 100: 334}, - {338}, - {111}, + {334}, + {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 67: 143}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 336}, + {65: 337}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 340, 341, 339, 101: 338}, // 180 - {110}, - {109}, - {1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 66: 142}, - {61: 217, 67: 340, 69: 130}, - {69: 341}, - // 185 {342}, - {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 66: 143}, - {130, 48: 130, 130, 130, 130, 61: 217, 67: 344}, - {115, 48: 348, 349, 350, 351, 84: 347, 97: 346, 345}, - {354}, + {113}, + {112}, + {111}, + {1: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 67: 144}, + // 185 + {62: 220, 68: 344, 70: 132}, + {70: 345}, + {346}, + {1: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 67: 145}, + {132, 49: 132, 132, 132, 132, 62: 220, 68: 348}, // 190 - {114, 352}, - {113, 113}, + {117, 49: 352, 353, 354, 355, 85: 351, 98: 350, 349}, + {358}, + {116, 356}, + {115, 115}, + {76, 76}, + // 195 {75, 75}, {74, 74}, {73, 73}, - // 195 - {72, 72}, - {48: 348, 349, 350, 351, 84: 353}, - {112, 112}, - {1: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 66: 144}, - {2: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 217, 67: 357, 76: 356}, + {49: 352, 353, 354, 355, 85: 357}, + {114, 114}, // 200 - {365}, - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 227, 71: 358}, - {128, 315, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 74: 359}, - {119, 2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 362, 93: 361, 360}, - {120}, + {1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 67: 146}, + {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 361, 77: 360}, + {369}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 362}, + {130, 319, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 75: 363}, // 205 - {118, 363}, - {117, 117}, - {2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 364}, - {116, 116}, - {1: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 66: 145}, + {121, 2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 366, 94: 365, 364}, + {122}, + {120, 367}, + {119, 119}, + {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 368}, // 210 - {2: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 217, 67: 357, 76: 367}, - {368}, - {1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 66: 146}, - {130, 2: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 217, 67: 372, 72: 371, 79: 370}, - {373}, + {118, 118}, + {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 67: 147}, + {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 361, 77: 371}, + {372}, + {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 67: 148}, // 215 - {126, 292}, - {125, 2: 255, 233, 235, 256, 257, 237, 258, 241, 259, 260, 261, 229, 230, 231, 232, 251, 262, 239, 243, 234, 236, 238, 245, 242, 240, 244, 246, 250, 248, 263, 254, 264, 265, 266, 253, 249, 252, 247, 267, 268, 269, 274, 271, 270, 272, 273, 283, 284, 285, 286, 278, 277, 279, 275, 276, 280, 282, 281, 228, 68: 227, 71: 226}, - {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 66: 147}, - {130, 2: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 217, 67: 372, 72: 371, 79: 375}, - {376}, + {132, 2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 376, 73: 375, 80: 374}, + {377}, + {128, 296}, + {127, 2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 229}, + {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 67: 149}, // 220 - {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 66: 148}, - {2: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 217, 67: 225, 72: 378}, - {379, 292}, - {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 66: 149}, - {130, 61: 217, 67: 381}, + {132, 2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 376, 73: 375, 80: 379}, + {380}, + {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 67: 150}, + {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 228, 73: 382}, + {383, 296}, // 225 - {382}, - {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 66: 150}, - {2: 212, 181, 183, 208, 210, 194, 203, 195, 190, 189, 193, 161, 178, 179, 180, 168, 172, 186, 196, 182, 184, 185, 198, 213, 187, 197, 199, 206, 201, 192, 171, 176, 214, 177, 170, 205, 169, 200, 188, 211, 191, 173, 202, 204, 209, 207, 75: 174, 80: 162, 175, 385, 167, 85: 166, 164, 384, 165, 163}, - {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 66: 153}, - {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 66: 151}, + {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 67: 151}, + {132, 62: 220, 68: 385}, + {386}, + {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 67: 152}, + {2: 215, 191, 183, 185, 211, 213, 197, 206, 198, 193, 192, 196, 163, 180, 181, 182, 170, 174, 188, 199, 184, 186, 187, 201, 216, 189, 200, 202, 209, 204, 195, 173, 178, 217, 179, 172, 208, 171, 203, 190, 214, 194, 175, 205, 207, 212, 210, 76: 176, 81: 164, 177, 389, 169, 86: 168, 166, 388, 167, 165}, + // 230 + {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 67: 155}, + {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 67: 153}, } ) @@ -800,7 +806,7 @@ func yyhintlex1(yylex yyhintLexer, lval *yyhintSymType) (n int) { } func yyhintParse(yylex yyhintLexer, parser *hintParser) int { - const yyError = 102 + const yyError = 103 yyEx, _ := yylex.(yyhintLexerEx) var yyn int diff --git a/hintparser.y b/hintparser.y index 014748ebf..622144253 100644 --- a/hintparser.y +++ b/hintparser.y @@ -485,6 +485,7 @@ UnsupportedTableLevelOptimizerHintName: SupportedTableLevelOptimizerHintName: "SM_JOIN" +| "BC_JOIN" | "INL_JOIN" | "INL_HASH_JOIN" | "SWAP_JOIN_INPUTS" @@ -580,6 +581,7 @@ Identifier: | "READ_CONSISTENT_REPLICA" | "READ_FROM_STORAGE" | "SM_JOIN" +| "BC_JOIN" | "STREAM_AGG" | "SWAP_JOIN_INPUTS" | "USE_INDEX_MERGE" From 4aebfbd048ada0b46eb609ed24c1eb2731a09df2 Mon Sep 17 00:00:00 2001 From: Fei Han Date: Sat, 7 Mar 2020 19:07:17 +0800 Subject: [PATCH 03/12] add hint for bc join --- hintparser.go | 149 +++++++++++++++++++++++++------------------------- hintparser.y | 1 + misc.go | 2 + 3 files changed, 79 insertions(+), 73 deletions(-) diff --git a/hintparser.go b/hintparser.go index cb827d8ee..46f095a73 100644 --- a/hintparser.go +++ b/hintparser.go @@ -39,16 +39,17 @@ type yyhintXError struct { } const ( - yyhintDefault = 57409 + yyhintDefault = 57410 yyhintEOFCode = 57344 yyhintErrCode = 57345 hintAggToCop = 57376 + hintBCJoin = 57389 hintBKA = 57354 hintBNL = 57356 - hintDupsWeedOut = 57405 - hintFalse = 57401 - hintFirstMatch = 57406 - hintGB = 57404 + hintDupsWeedOut = 57406 + hintFalse = 57402 + hintFirstMatch = 57407 + hintGB = 57405 hintHashAgg = 57378 hintHashJoin = 57358 hintIdentifier = 57347 @@ -63,10 +64,10 @@ const ( hintJoinOrder = 57351 hintJoinPrefix = 57352 hintJoinSuffix = 57353 - hintLooseScan = 57407 - hintMB = 57403 + hintLooseScan = 57408 + hintMB = 57404 hintMRR = 57364 - hintMaterialization = 57408 + hintMaterialization = 57409 hintMaxExecutionTime = 57372 hintMemoryQuota = 57383 hintMerge = 57360 @@ -81,8 +82,8 @@ const ( hintNoSemijoin = 57371 hintNoSkipScan = 57369 hintNoSwapJoinInputs = 57384 - hintOLAP = 57397 - hintOLTP = 57398 + hintOLAP = 57398 + hintOLTP = 57399 hintQBName = 57375 hintQueryType = 57385 hintReadConsistentReplica = 57386 @@ -93,18 +94,18 @@ const ( hintSetVar = 57373 hintSingleAtIdentifier = 57348 hintSkipScan = 57368 - hintStreamAgg = 57389 + hintStreamAgg = 57390 hintStringLit = 57349 - hintSwapJoinInputs = 57390 - hintTiFlash = 57400 - hintTiKV = 57399 - hintTimeRange = 57395 - hintTrue = 57402 - hintUseCascades = 57396 - hintUseIndex = 57392 - hintUseIndexMerge = 57391 - hintUsePlanCache = 57393 - hintUseToja = 57394 + hintSwapJoinInputs = 57391 + hintTiFlash = 57401 + hintTiKV = 57400 + hintTimeRange = 57396 + hintTrue = 57403 + hintUseCascades = 57397 + hintUseIndex = 57393 + hintUseIndexMerge = 57392 + hintUsePlanCache = 57394 + hintUseToja = 57395 yyhintMaxDepth = 200 yyhintTabOfs = -158 @@ -153,26 +154,26 @@ var ( 57373: 38, // hintSetVar (108x) 57368: 39, // hintSkipScan (108x) 57388: 40, // hintSMJoin (108x) - 57389: 41, // hintStreamAgg (108x) - 57390: 42, // hintSwapJoinInputs (108x) - 57395: 43, // hintTimeRange (108x) - 57396: 44, // hintUseCascades (108x) - 57392: 45, // hintUseIndex (108x) - 57391: 46, // hintUseIndexMerge (108x) - 57393: 47, // hintUsePlanCache (108x) - 57394: 48, // hintUseToja (108x) - 57405: 49, // hintDupsWeedOut (87x) - 57406: 50, // hintFirstMatch (87x) - 57407: 51, // hintLooseScan (87x) - 57408: 52, // hintMaterialization (87x) - 57400: 53, // hintTiFlash (87x) - 57399: 54, // hintTiKV (87x) - 57401: 55, // hintFalse (86x) - 57397: 56, // hintOLAP (86x) - 57398: 57, // hintOLTP (86x) - 57402: 58, // hintTrue (86x) - 57404: 59, // hintGB (85x) - 57403: 60, // hintMB (85x) + 57390: 41, // hintStreamAgg (108x) + 57391: 42, // hintSwapJoinInputs (108x) + 57396: 43, // hintTimeRange (108x) + 57397: 44, // hintUseCascades (108x) + 57393: 45, // hintUseIndex (108x) + 57392: 46, // hintUseIndexMerge (108x) + 57394: 47, // hintUsePlanCache (108x) + 57395: 48, // hintUseToja (108x) + 57406: 49, // hintDupsWeedOut (87x) + 57407: 50, // hintFirstMatch (87x) + 57408: 51, // hintLooseScan (87x) + 57409: 52, // hintMaterialization (87x) + 57401: 53, // hintTiFlash (87x) + 57400: 54, // hintTiKV (87x) + 57402: 55, // hintFalse (86x) + 57398: 56, // hintOLAP (86x) + 57399: 57, // hintOLTP (86x) + 57403: 58, // hintTrue (86x) + 57405: 59, // hintGB (85x) + 57404: 60, // hintMB (85x) 57347: 61, // hintIdentifier (84x) 57348: 62, // hintSingleAtIdentifier (76x) 93: 63, // ']' (68x) @@ -180,42 +181,43 @@ var ( 61: 65, // '=' (61x) 40: 66, // '(' (55x) 57344: 67, // $end (23x) - 57427: 68, // QueryBlockOpt (16x) - 57421: 69, // Identifier (11x) + 57428: 68, // QueryBlockOpt (16x) + 57422: 69, // Identifier (11x) 57346: 70, // hintIntLit (6x) 57349: 71, // hintStringLit (5x) - 57417: 72, // HintTable (4x) - 57418: 73, // HintTableList (4x) + 57418: 72, // HintTable (4x) + 57419: 73, // HintTableList (4x) 91: 74, // '[' (3x) - 57411: 75, // CommaOpt (3x) - 57410: 76, // BooleanHintName (2x) - 57412: 77, // HintIndexList (2x) - 57414: 78, // HintStorageType (2x) - 57415: 79, // HintStorageTypeAndTable (2x) - 57419: 80, // HintTableListOpt (2x) - 57424: 81, // JoinOrderOptimizerHintName (2x) - 57425: 82, // NullaryHintName (2x) - 57429: 83, // StorageOptimizerHintOpt (2x) - 57430: 84, // SubqueryOptimizerHintName (2x) - 57433: 85, // SubqueryStrategy (2x) - 57434: 86, // SupportedIndexLevelOptimizerHintName (2x) - 57435: 87, // SupportedTableLevelOptimizerHintName (2x) - 57436: 88, // TableOptimizerHintOpt (2x) - 57438: 89, // UnsupportedIndexLevelOptimizerHintName (2x) - 57439: 90, // UnsupportedTableLevelOptimizerHintName (2x) - 57413: 91, // HintQueryType (1x) - 57416: 92, // HintStorageTypeAndTableList (1x) - 57420: 93, // HintTrueOrFalse (1x) - 57422: 94, // IndexNameList (1x) - 57423: 95, // IndexNameListOpt (1x) - 57426: 96, // OptimizerHintList (1x) - 57428: 97, // Start (1x) - 57431: 98, // SubqueryStrategies (1x) - 57432: 99, // SubqueryStrategiesOpt (1x) - 57437: 100, // UnitOfBytes (1x) - 57440: 101, // Value (1x) - 57409: 102, // $default (0x) + 57412: 75, // CommaOpt (3x) + 57411: 76, // BooleanHintName (2x) + 57413: 77, // HintIndexList (2x) + 57415: 78, // HintStorageType (2x) + 57416: 79, // HintStorageTypeAndTable (2x) + 57420: 80, // HintTableListOpt (2x) + 57425: 81, // JoinOrderOptimizerHintName (2x) + 57426: 82, // NullaryHintName (2x) + 57430: 83, // StorageOptimizerHintOpt (2x) + 57431: 84, // SubqueryOptimizerHintName (2x) + 57434: 85, // SubqueryStrategy (2x) + 57435: 86, // SupportedIndexLevelOptimizerHintName (2x) + 57436: 87, // SupportedTableLevelOptimizerHintName (2x) + 57437: 88, // TableOptimizerHintOpt (2x) + 57439: 89, // UnsupportedIndexLevelOptimizerHintName (2x) + 57440: 90, // UnsupportedTableLevelOptimizerHintName (2x) + 57414: 91, // HintQueryType (1x) + 57417: 92, // HintStorageTypeAndTableList (1x) + 57421: 93, // HintTrueOrFalse (1x) + 57423: 94, // IndexNameList (1x) + 57424: 95, // IndexNameListOpt (1x) + 57427: 96, // OptimizerHintList (1x) + 57429: 97, // Start (1x) + 57432: 98, // SubqueryStrategies (1x) + 57433: 99, // SubqueryStrategiesOpt (1x) + 57438: 100, // UnitOfBytes (1x) + 57441: 101, // Value (1x) + 57410: 102, // $default (0x) 57345: 103, // error (0x) + 57389: 104, // hintBCJoin (0x) } yyhintSymNames = []string{ @@ -323,6 +325,7 @@ var ( "Value", "$default", "error", + "hintBCJoin", } yyhintReductions = []struct{ xsym, components int }{ diff --git a/hintparser.y b/hintparser.y index bcafe53dc..edef77547 100644 --- a/hintparser.y +++ b/hintparser.y @@ -90,6 +90,7 @@ import ( hintReadConsistentReplica "READ_CONSISTENT_REPLICA" hintReadFromStorage "READ_FROM_STORAGE" hintSMJoin "MERGE_JOIN" + hintBCJoin "BC_JOIN" hintStreamAgg "STREAM_AGG" hintSwapJoinInputs "SWAP_JOIN_INPUTS" hintUseIndexMerge "USE_INDEX_MERGE" diff --git a/misc.go b/misc.go index 320d0e80c..d293786e5 100644 --- a/misc.go +++ b/misc.go @@ -857,6 +857,7 @@ var hintTokenMap = map[string]int{ "READ_CONSISTENT_REPLICA": hintReadConsistentReplica, "READ_FROM_STORAGE": hintReadFromStorage, "MERGE_JOIN": hintSMJoin, + "BC_JOIN": hintBCJoin, "STREAM_AGG": hintStreamAgg, "SWAP_JOIN_INPUTS": hintSwapJoinInputs, "USE_INDEX_MERGE": hintUseIndexMerge, @@ -870,6 +871,7 @@ var hintTokenMap = map[string]int{ "TIDB_HJ": hintHashJoin, "TIDB_INLJ": hintInlJoin, "TIDB_SMJ": hintSMJoin, + "TIDB_BCJ": hintBCJoin, // Other keywords "OLAP": hintOLAP, From cc2bee1a36331483cf7fb855758ff048b7823570 Mon Sep 17 00:00:00 2001 From: Fei Han Date: Sat, 7 Mar 2020 21:52:51 +0800 Subject: [PATCH 04/12] refine --- hintparser.go | 956 +++++++++++++++++++++++++------------------------- hintparser.y | 2 + 2 files changed, 482 insertions(+), 476 deletions(-) diff --git a/hintparser.go b/hintparser.go index 46f095a73..421b4f89c 100644 --- a/hintparser.go +++ b/hintparser.go @@ -108,122 +108,123 @@ const ( hintUseToja = 57395 yyhintMaxDepth = 200 - yyhintTabOfs = -158 + yyhintTabOfs = -160 ) var ( yyhintXLAT = map[int]int{ - 41: 0, // ')' (118x) - 44: 1, // ',' (108x) - 57376: 2, // hintAggToCop (108x) - 57354: 3, // hintBKA (108x) - 57356: 4, // hintBNL (108x) - 57378: 5, // hintHashAgg (108x) - 57358: 6, // hintHashJoin (108x) - 57379: 7, // hintIgnoreIndex (108x) - 57377: 8, // hintIgnorePlanCache (108x) - 57362: 9, // hintIndexMerge (108x) - 57380: 10, // hintInlHashJoin (108x) - 57381: 11, // hintInlJoin (108x) - 57382: 12, // hintInlMergeJoin (108x) - 57350: 13, // hintJoinFixedOrder (108x) - 57351: 14, // hintJoinOrder (108x) - 57352: 15, // hintJoinPrefix (108x) - 57353: 16, // hintJoinSuffix (108x) - 57372: 17, // hintMaxExecutionTime (108x) - 57383: 18, // hintMemoryQuota (108x) - 57360: 19, // hintMerge (108x) - 57364: 20, // hintMRR (108x) - 57355: 21, // hintNoBKA (108x) - 57357: 22, // hintNoBNL (108x) - 57359: 23, // hintNoHashJoin (108x) - 57366: 24, // hintNoICP (108x) - 57363: 25, // hintNoIndexMerge (108x) - 57361: 26, // hintNoMerge (108x) - 57365: 27, // hintNoMRR (108x) - 57367: 28, // hintNoRangeOptimization (108x) - 57371: 29, // hintNoSemijoin (108x) - 57369: 30, // hintNoSkipScan (108x) - 57384: 31, // hintNoSwapJoinInputs (108x) - 57375: 32, // hintQBName (108x) - 57385: 33, // hintQueryType (108x) - 57386: 34, // hintReadConsistentReplica (108x) - 57387: 35, // hintReadFromStorage (108x) - 57374: 36, // hintResourceGroup (108x) - 57370: 37, // hintSemijoin (108x) - 57373: 38, // hintSetVar (108x) - 57368: 39, // hintSkipScan (108x) - 57388: 40, // hintSMJoin (108x) - 57390: 41, // hintStreamAgg (108x) - 57391: 42, // hintSwapJoinInputs (108x) - 57396: 43, // hintTimeRange (108x) - 57397: 44, // hintUseCascades (108x) - 57393: 45, // hintUseIndex (108x) - 57392: 46, // hintUseIndexMerge (108x) - 57394: 47, // hintUsePlanCache (108x) - 57395: 48, // hintUseToja (108x) - 57406: 49, // hintDupsWeedOut (87x) - 57407: 50, // hintFirstMatch (87x) - 57408: 51, // hintLooseScan (87x) - 57409: 52, // hintMaterialization (87x) - 57401: 53, // hintTiFlash (87x) - 57400: 54, // hintTiKV (87x) - 57402: 55, // hintFalse (86x) - 57398: 56, // hintOLAP (86x) - 57399: 57, // hintOLTP (86x) - 57403: 58, // hintTrue (86x) - 57405: 59, // hintGB (85x) - 57404: 60, // hintMB (85x) - 57347: 61, // hintIdentifier (84x) - 57348: 62, // hintSingleAtIdentifier (76x) - 93: 63, // ']' (68x) - 46: 64, // '.' (61x) - 61: 65, // '=' (61x) - 40: 66, // '(' (55x) - 57344: 67, // $end (23x) - 57428: 68, // QueryBlockOpt (16x) - 57422: 69, // Identifier (11x) - 57346: 70, // hintIntLit (6x) - 57349: 71, // hintStringLit (5x) - 57418: 72, // HintTable (4x) - 57419: 73, // HintTableList (4x) - 91: 74, // '[' (3x) - 57412: 75, // CommaOpt (3x) - 57411: 76, // BooleanHintName (2x) - 57413: 77, // HintIndexList (2x) - 57415: 78, // HintStorageType (2x) - 57416: 79, // HintStorageTypeAndTable (2x) - 57420: 80, // HintTableListOpt (2x) - 57425: 81, // JoinOrderOptimizerHintName (2x) - 57426: 82, // NullaryHintName (2x) - 57430: 83, // StorageOptimizerHintOpt (2x) - 57431: 84, // SubqueryOptimizerHintName (2x) - 57434: 85, // SubqueryStrategy (2x) - 57435: 86, // SupportedIndexLevelOptimizerHintName (2x) - 57436: 87, // SupportedTableLevelOptimizerHintName (2x) - 57437: 88, // TableOptimizerHintOpt (2x) - 57439: 89, // UnsupportedIndexLevelOptimizerHintName (2x) - 57440: 90, // UnsupportedTableLevelOptimizerHintName (2x) - 57414: 91, // HintQueryType (1x) - 57417: 92, // HintStorageTypeAndTableList (1x) - 57421: 93, // HintTrueOrFalse (1x) - 57423: 94, // IndexNameList (1x) - 57424: 95, // IndexNameListOpt (1x) - 57427: 96, // OptimizerHintList (1x) - 57429: 97, // Start (1x) - 57432: 98, // SubqueryStrategies (1x) - 57433: 99, // SubqueryStrategiesOpt (1x) - 57438: 100, // UnitOfBytes (1x) - 57441: 101, // Value (1x) - 57410: 102, // $default (0x) - 57345: 103, // error (0x) - 57389: 104, // hintBCJoin (0x) + 41: 0, // ')' (119x) + 44: 1, // ',' (109x) + 57376: 2, // hintAggToCop (109x) + 57389: 3, // hintBCJoin (109x) + 57354: 4, // hintBKA (109x) + 57356: 5, // hintBNL (109x) + 57378: 6, // hintHashAgg (109x) + 57358: 7, // hintHashJoin (109x) + 57379: 8, // hintIgnoreIndex (109x) + 57377: 9, // hintIgnorePlanCache (109x) + 57362: 10, // hintIndexMerge (109x) + 57380: 11, // hintInlHashJoin (109x) + 57381: 12, // hintInlJoin (109x) + 57382: 13, // hintInlMergeJoin (109x) + 57350: 14, // hintJoinFixedOrder (109x) + 57351: 15, // hintJoinOrder (109x) + 57352: 16, // hintJoinPrefix (109x) + 57353: 17, // hintJoinSuffix (109x) + 57372: 18, // hintMaxExecutionTime (109x) + 57383: 19, // hintMemoryQuota (109x) + 57360: 20, // hintMerge (109x) + 57364: 21, // hintMRR (109x) + 57355: 22, // hintNoBKA (109x) + 57357: 23, // hintNoBNL (109x) + 57359: 24, // hintNoHashJoin (109x) + 57366: 25, // hintNoICP (109x) + 57363: 26, // hintNoIndexMerge (109x) + 57361: 27, // hintNoMerge (109x) + 57365: 28, // hintNoMRR (109x) + 57367: 29, // hintNoRangeOptimization (109x) + 57371: 30, // hintNoSemijoin (109x) + 57369: 31, // hintNoSkipScan (109x) + 57384: 32, // hintNoSwapJoinInputs (109x) + 57375: 33, // hintQBName (109x) + 57385: 34, // hintQueryType (109x) + 57386: 35, // hintReadConsistentReplica (109x) + 57387: 36, // hintReadFromStorage (109x) + 57374: 37, // hintResourceGroup (109x) + 57370: 38, // hintSemijoin (109x) + 57373: 39, // hintSetVar (109x) + 57368: 40, // hintSkipScan (109x) + 57388: 41, // hintSMJoin (109x) + 57390: 42, // hintStreamAgg (109x) + 57391: 43, // hintSwapJoinInputs (109x) + 57396: 44, // hintTimeRange (109x) + 57397: 45, // hintUseCascades (109x) + 57393: 46, // hintUseIndex (109x) + 57392: 47, // hintUseIndexMerge (109x) + 57394: 48, // hintUsePlanCache (109x) + 57395: 49, // hintUseToja (109x) + 57406: 50, // hintDupsWeedOut (88x) + 57407: 51, // hintFirstMatch (88x) + 57408: 52, // hintLooseScan (88x) + 57409: 53, // hintMaterialization (88x) + 57401: 54, // hintTiFlash (88x) + 57400: 55, // hintTiKV (88x) + 57402: 56, // hintFalse (87x) + 57398: 57, // hintOLAP (87x) + 57399: 58, // hintOLTP (87x) + 57403: 59, // hintTrue (87x) + 57405: 60, // hintGB (86x) + 57404: 61, // hintMB (86x) + 57347: 62, // hintIdentifier (85x) + 57348: 63, // hintSingleAtIdentifier (77x) + 93: 64, // ']' (69x) + 46: 65, // '.' (62x) + 61: 66, // '=' (62x) + 40: 67, // '(' (56x) + 57344: 68, // $end (23x) + 57428: 69, // QueryBlockOpt (16x) + 57422: 70, // Identifier (11x) + 57346: 71, // hintIntLit (6x) + 57349: 72, // hintStringLit (5x) + 57418: 73, // HintTable (4x) + 57419: 74, // HintTableList (4x) + 91: 75, // '[' (3x) + 57412: 76, // CommaOpt (3x) + 57411: 77, // BooleanHintName (2x) + 57413: 78, // HintIndexList (2x) + 57415: 79, // HintStorageType (2x) + 57416: 80, // HintStorageTypeAndTable (2x) + 57420: 81, // HintTableListOpt (2x) + 57425: 82, // JoinOrderOptimizerHintName (2x) + 57426: 83, // NullaryHintName (2x) + 57430: 84, // StorageOptimizerHintOpt (2x) + 57431: 85, // SubqueryOptimizerHintName (2x) + 57434: 86, // SubqueryStrategy (2x) + 57435: 87, // SupportedIndexLevelOptimizerHintName (2x) + 57436: 88, // SupportedTableLevelOptimizerHintName (2x) + 57437: 89, // TableOptimizerHintOpt (2x) + 57439: 90, // UnsupportedIndexLevelOptimizerHintName (2x) + 57440: 91, // UnsupportedTableLevelOptimizerHintName (2x) + 57414: 92, // HintQueryType (1x) + 57417: 93, // HintStorageTypeAndTableList (1x) + 57421: 94, // HintTrueOrFalse (1x) + 57423: 95, // IndexNameList (1x) + 57424: 96, // IndexNameListOpt (1x) + 57427: 97, // OptimizerHintList (1x) + 57429: 98, // Start (1x) + 57432: 99, // SubqueryStrategies (1x) + 57433: 100, // SubqueryStrategiesOpt (1x) + 57438: 101, // UnitOfBytes (1x) + 57441: 102, // Value (1x) + 57410: 103, // $default (0x) + 57345: 104, // error (0x) } yyhintSymNames = []string{ "')'", "','", "hintAggToCop", + "hintBCJoin", "hintBKA", "hintBNL", "hintHashAgg", @@ -325,65 +326,79 @@ var ( "Value", "$default", "error", - "hintBCJoin", } yyhintReductions = []struct{ xsym, components int }{ {0, 1}, + {98, 1}, {97, 1}, - {96, 1}, - {96, 3}, - {96, 1}, - {96, 3}, - {88, 4}, - {88, 4}, - {88, 4}, - {88, 4}, - {88, 4}, - {88, 4}, - {88, 5}, - {88, 5}, - {88, 6}, - {88, 4}, - {88, 4}, - {88, 6}, - {88, 6}, - {88, 5}, - {88, 4}, - {88, 5}, - {83, 5}, - {92, 1}, - {92, 3}, - {79, 4}, - {68, 0}, - {68, 1}, - {75, 0}, - {75, 1}, - {80, 1}, - {80, 1}, + {97, 3}, + {97, 1}, + {97, 3}, + {89, 4}, + {89, 4}, + {89, 4}, + {89, 4}, + {89, 4}, + {89, 4}, + {89, 5}, + {89, 5}, + {89, 6}, + {89, 4}, + {89, 4}, + {89, 6}, + {89, 6}, + {89, 5}, + {89, 4}, + {89, 5}, + {84, 5}, + {93, 1}, + {93, 3}, + {80, 4}, + {69, 0}, + {69, 1}, + {76, 0}, + {76, 1}, + {81, 1}, + {81, 1}, + {74, 2}, + {74, 3}, {73, 2}, - {73, 3}, - {72, 2}, - {72, 4}, - {77, 4}, - {95, 0}, + {73, 4}, + {78, 4}, + {96, 0}, + {96, 1}, {95, 1}, - {94, 1}, - {94, 3}, - {99, 0}, + {95, 3}, + {100, 0}, + {100, 1}, {99, 1}, - {98, 1}, - {98, 3}, - {101, 1}, + {99, 3}, + {102, 1}, + {102, 1}, + {102, 1}, {101, 1}, {101, 1}, - {100, 1}, - {100, 1}, - {93, 1}, - {93, 1}, - {81, 1}, - {81, 1}, - {81, 1}, + {94, 1}, + {94, 1}, + {82, 1}, + {82, 1}, + {82, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, {90, 1}, {90, 1}, {90, 1}, @@ -394,383 +409,372 @@ var ( {87, 1}, {87, 1}, {87, 1}, - {87, 1}, - {87, 1}, - {87, 1}, - {87, 1}, - {89, 1}, - {89, 1}, - {89, 1}, - {89, 1}, - {89, 1}, - {89, 1}, - {89, 1}, + {85, 1}, + {85, 1}, {86, 1}, {86, 1}, {86, 1}, - {84, 1}, - {84, 1}, - {85, 1}, - {85, 1}, - {85, 1}, - {85, 1}, - {76, 1}, - {76, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {91, 1}, - {91, 1}, - {78, 1}, - {78, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, + {86, 1}, + {77, 1}, + {77, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {92, 1}, + {92, 1}, + {79, 1}, + {79, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, } yyhintXErrors = map[yyhintXError]string{} - yyhintParseTab = [232][]uint16{ + yyhintParseTab = [234][]uint16{ // 0 - {2: 214, 183, 185, 212, 196, 205, 217, 197, 192, 191, 195, 163, 180, 181, 182, 170, 174, 188, 198, 184, 186, 187, 200, 215, 189, 199, 201, 208, 203, 194, 173, 178, 216, 179, 172, 207, 171, 202, 190, 213, 193, 175, 210, 204, 206, 211, 209, 76: 176, 81: 164, 177, 162, 169, 86: 168, 166, 161, 167, 165, 96: 160, 159}, - {67: 158}, - {1: 319, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 67: 157, 75: 387}, - {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 67: 156}, - {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 67: 154}, + {2: 217, 193, 185, 187, 215, 199, 208, 220, 200, 195, 194, 198, 165, 182, 183, 184, 172, 176, 190, 201, 186, 188, 189, 203, 218, 191, 202, 204, 211, 206, 197, 175, 180, 219, 181, 174, 210, 173, 205, 192, 216, 196, 177, 213, 207, 209, 214, 212, 77: 178, 82: 166, 179, 164, 171, 87: 170, 168, 163, 169, 167, 97: 162, 161}, + {68: 160}, + {1: 323, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 68: 159, 76: 391}, + {1: 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 68: 158}, + {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 68: 156}, // 5 - {66: 384}, - {66: 381}, - {66: 378}, - {66: 373}, - {66: 370}, + {67: 388}, + {67: 385}, + {67: 382}, + {67: 377}, + {67: 374}, // 10 - {66: 359}, - {66: 347}, - {66: 343}, - {66: 335}, - {66: 332}, + {67: 363}, + {67: 351}, + {67: 347}, + {67: 339}, + {67: 336}, // 15 - {66: 329}, - {66: 322}, - {66: 316}, - {66: 310}, - {66: 307}, + {67: 333}, + {67: 326}, + {67: 320}, + {67: 314}, + {67: 311}, // 20 - {66: 301}, - {66: 218}, - {66: 106}, - {66: 105}, - {66: 104}, + {67: 305}, + {67: 221}, + {67: 108}, + {67: 107}, + {67: 106}, // 25 - {66: 103}, - {66: 102}, - {66: 101}, - {66: 100}, - {66: 99}, + {67: 105}, + {67: 104}, + {67: 103}, + {67: 102}, + {67: 101}, // 30 - {66: 98}, - {66: 97}, - {66: 96}, - {66: 95}, - {66: 94}, + {67: 100}, + {67: 99}, + {67: 98}, + {67: 97}, + {67: 96}, // 35 - {66: 93}, - {66: 92}, - {66: 91}, - {66: 90}, - {66: 89}, + {67: 95}, + {67: 94}, + {67: 93}, + {67: 92}, + {67: 91}, // 40 - {66: 88}, - {66: 87}, - {66: 86}, - {66: 85}, - {66: 84}, + {67: 90}, + {67: 89}, + {67: 88}, + {67: 87}, + {67: 86}, // 45 - {66: 83}, - {66: 82}, - {66: 81}, - {66: 80}, - {66: 79}, + {67: 85}, + {67: 84}, + {67: 83}, + {67: 82}, + {67: 81}, // 50 - {66: 78}, - {66: 73}, - {66: 72}, - {66: 71}, - {66: 70}, + {67: 80}, + {67: 79}, + {67: 74}, + {67: 73}, + {67: 72}, // 55 - {66: 69}, - {66: 68}, - {66: 67}, - {66: 66}, - {66: 65}, + {67: 71}, + {67: 70}, + {67: 69}, + {67: 68}, + {67: 67}, // 60 - {53: 132, 132, 62: 220, 68: 219}, - {53: 225, 224, 78: 223, 222, 92: 221}, - {131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 63: 131, 70: 131}, - {298, 299}, - {135, 135}, + {67: 66}, + {54: 134, 134, 63: 223, 69: 222}, + {54: 228, 227, 79: 226, 225, 93: 224}, + {133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 64: 133, 71: 133}, + {302, 303}, // 65 - {74: 226}, - {74: 62}, - {74: 61}, - {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 228, 73: 227}, - {1: 296, 63: 295}, + {137, 137}, + {75: 229}, + {75: 63}, + {75: 62}, + {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 231, 74: 230}, // 70 - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 229}, - {126, 126, 63: 126}, - {132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 132, 292, 68: 291}, - {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, - {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, + {1: 300, 64: 299}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 232}, + {128, 128, 64: 128}, + {134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 134, 296, 69: 295}, + {61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61}, // 75 - {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, - {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, - {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, - {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, - {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, + {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, + {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, + {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, + {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, + {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, // 80 - {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, - {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, - {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, - {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, - {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, + {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, + {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, + {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, + {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, + {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, // 85 - {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, - {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, - {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, - {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, - {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, + {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, + {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, + {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, + {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, + {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, // 90 - {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, - {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, - {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, - {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, - {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, + {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, + {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, + {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, + {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, + {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, // 95 - {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, - {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, - {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, - {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, - {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, + {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, + {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, + {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, + {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, + {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, // 100 - {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, - {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, - {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, - {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, - {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, + {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, + {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, + {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, + {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, + {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, // 105 - {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, - {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, - {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, - {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, - {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, + {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, + {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, + {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, + {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, + {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, // 110 - {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, - {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, - {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, - {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, - {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, + {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, + {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, + {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, + {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, + {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, // 115 - {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, - {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, - {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, - {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, - {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, + {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, + {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, + {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, + {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, + {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, // 120 - {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, - {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, - {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, - {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, + {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, + {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, + {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, + {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, + {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, // 125 - {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, - {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, - {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, - {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, + {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, + {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, + {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, + {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, // 130 - {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - {124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 63: 124}, - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 293}, + {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, + {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 135 - {132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 132, 68: 294}, - {123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 63: 123}, - {133, 133}, - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 297}, - {125, 125, 63: 125}, + {126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 64: 126}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 297}, + {134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 134, 69: 298}, + {125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 64: 125}, + {135, 135}, // 140 - {1: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 67: 136}, - {53: 225, 224, 78: 223, 300}, - {134, 134}, - {56: 132, 132, 62: 220, 68: 302}, - {56: 304, 305, 91: 303}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 301}, + {127, 127, 64: 127}, + {1: 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 68: 138}, + {54: 228, 227, 79: 226, 304}, + {136, 136}, // 145 - {306}, + {57: 134, 134, 63: 223, 69: 306}, + {57: 308, 309, 92: 307}, + {310}, + {65}, {64}, - {63}, - {1: 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 67: 137}, - {132, 62: 220, 68: 308}, // 150 - {309}, - {1: 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 67: 138}, - {55: 132, 58: 132, 62: 220, 68: 311}, - {55: 314, 58: 313, 93: 312}, - {315}, + {1: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 68: 139}, + {134, 63: 223, 69: 312}, + {313}, + {1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 68: 140}, + {56: 134, 59: 134, 63: 223, 69: 315}, // 155 - {108}, - {107}, - {1: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 67: 139}, - {71: 317}, - {1: 319, 71: 130, 75: 318}, - // 160 - {71: 320}, - {129, 2: 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 71: 129}, - {321}, - {1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 67: 140}, - {62: 220, 68: 323, 70: 132}, - // 165 - {70: 324}, - {59: 327, 326, 100: 325}, - {328}, + {56: 318, 59: 317, 94: 316}, + {319}, {110}, {109}, + {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 68: 141}, + // 160 + {72: 321}, + {1: 323, 72: 132, 76: 322}, + {72: 324}, + {131, 2: 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 72: 131}, + {325}, + // 165 + {1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 68: 142}, + {63: 223, 69: 327, 71: 134}, + {71: 328}, + {60: 331, 330, 101: 329}, + {332}, // 170 - {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 67: 141}, - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 330}, - {331}, - {1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 67: 142}, - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 333}, - // 175 - {334}, - {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 67: 143}, - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 336}, - {65: 337}, - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 340, 341, 339, 101: 338}, - // 180 - {342}, - {113}, {112}, {111}, - {1: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 67: 144}, - // 185 - {62: 220, 68: 344, 70: 132}, - {70: 345}, + {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 68: 143}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 334}, + {335}, + // 175 + {1: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 68: 144}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 337}, + {338}, + {1: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 68: 145}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 340}, + // 180 + {66: 341}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 344, 345, 343, 102: 342}, {346}, - {1: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 67: 145}, - {132, 49: 132, 132, 132, 132, 62: 220, 68: 348}, + {115}, + {114}, + // 185 + {113}, + {1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 68: 146}, + {63: 223, 69: 348, 71: 134}, + {71: 349}, + {350}, // 190 - {117, 49: 352, 353, 354, 355, 85: 351, 98: 350, 349}, - {358}, - {116, 356}, - {115, 115}, - {77, 77}, + {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 68: 147}, + {134, 50: 134, 134, 134, 134, 63: 223, 69: 352}, + {119, 50: 356, 357, 358, 359, 86: 355, 99: 354, 353}, + {362}, + {118, 360}, // 195 + {117, 117}, + {78, 78}, + {77, 77}, {76, 76}, {75, 75}, - {74, 74}, - {49: 352, 353, 354, 355, 85: 357}, - {114, 114}, // 200 - {1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 67: 146}, - {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 361, 77: 360}, - {369}, - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 362}, - {130, 319, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 75: 363}, + {50: 356, 357, 358, 359, 86: 361}, + {116, 116}, + {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 68: 148}, + {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 365, 78: 364}, + {373}, // 205 - {121, 2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 366, 94: 365, 364}, - {122}, - {120, 367}, - {119, 119}, - {2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 368}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 366}, + {132, 323, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 76: 367}, + {123, 2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 370, 95: 369, 368}, + {124}, + {122, 371}, // 210 - {118, 118}, - {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 67: 147}, - {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 361, 77: 371}, - {372}, - {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 67: 148}, + {121, 121}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 372}, + {120, 120}, + {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 68: 149}, + {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 365, 78: 375}, // 215 - {132, 2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 376, 73: 375, 80: 374}, - {377}, - {128, 296}, - {127, 2: 258, 236, 238, 260, 240, 261, 259, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 271, 272, 277, 278, 274, 273, 275, 276, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 229}, - {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 67: 149}, + {376}, + {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 68: 150}, + {134, 2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 380, 74: 379, 81: 378}, + {381}, + {130, 300}, // 220 - {132, 2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 376, 73: 375, 80: 379}, - {380}, - {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 67: 150}, - {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 228, 73: 382}, - {383, 296}, + {129, 2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 232}, + {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 68: 151}, + {134, 2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 380, 74: 379, 81: 383}, + {384}, + {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 68: 152}, // 225 - {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 67: 151}, - {132, 62: 220, 68: 385}, - {386}, - {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 67: 152}, - {2: 214, 183, 185, 212, 196, 205, 217, 197, 192, 191, 195, 163, 180, 181, 182, 170, 174, 188, 198, 184, 186, 187, 200, 215, 189, 199, 201, 208, 203, 194, 173, 178, 216, 179, 172, 207, 171, 202, 190, 213, 193, 175, 210, 204, 206, 211, 209, 76: 176, 81: 164, 177, 389, 169, 86: 168, 166, 388, 167, 165}, + {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 231, 74: 386}, + {387, 300}, + {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 68: 153}, + {134, 63: 223, 69: 389}, + {390}, // 230 - {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 67: 155}, - {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 67: 153}, + {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 68: 154}, + {2: 217, 193, 185, 187, 215, 199, 208, 220, 200, 195, 194, 198, 165, 182, 183, 184, 172, 176, 190, 201, 186, 188, 189, 203, 218, 191, 202, 204, 211, 206, 197, 175, 180, 219, 181, 174, 210, 173, 205, 192, 216, 196, 177, 213, 207, 209, 214, 212, 77: 178, 82: 166, 179, 393, 171, 87: 170, 168, 392, 169, 167}, + {1: 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 68: 157}, + {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 68: 155}, } ) @@ -809,7 +813,7 @@ func yyhintlex1(yylex yyhintLexer, lval *yyhintSymType) (n int) { } func yyhintParse(yylex yyhintLexer, parser *hintParser) int { - const yyError = 103 + const yyError = 104 yyEx, _ := yylex.(yyhintLexerEx) var yyn int diff --git a/hintparser.y b/hintparser.y index edef77547..20a7ae876 100644 --- a/hintparser.y +++ b/hintparser.y @@ -486,6 +486,7 @@ UnsupportedTableLevelOptimizerHintName: SupportedTableLevelOptimizerHintName: "MERGE_JOIN" +| "BC_JOIN" | "INL_JOIN" | "INL_HASH_JOIN" | "SWAP_JOIN_INPUTS" @@ -582,6 +583,7 @@ Identifier: | "READ_CONSISTENT_REPLICA" | "READ_FROM_STORAGE" | "MERGE_JOIN" +| "BC_JOIN" | "STREAM_AGG" | "SWAP_JOIN_INPUTS" | "USE_INDEX_MERGE" From ee0ed272f078cf76566e9e91de047c47063c783b Mon Sep 17 00:00:00 2001 From: Fei Han Date: Sat, 7 Mar 2020 21:52:51 +0800 Subject: [PATCH 05/12] refine --- hintparser.go | 987 +++++++++++++++++++++++++------------------------- hintparser.y | 15 +- 2 files changed, 506 insertions(+), 496 deletions(-) diff --git a/hintparser.go b/hintparser.go index ba7c99305..421b4f89c 100644 --- a/hintparser.go +++ b/hintparser.go @@ -39,22 +39,22 @@ type yyhintXError struct { } const ( - yyhintDefault = 57409 + yyhintDefault = 57410 yyhintEOFCode = 57344 yyhintErrCode = 57345 hintAggToCop = 57376 hintBCJoin = 57389 hintBKA = 57354 hintBNL = 57356 - hintDupsWeedOut = 57405 - hintEnablePlanCache = 57377 - hintFalse = 57401 - hintFirstMatch = 57406 - hintGB = 57404 + hintDupsWeedOut = 57406 + hintFalse = 57402 + hintFirstMatch = 57407 + hintGB = 57405 hintHashAgg = 57378 hintHashJoin = 57358 hintIdentifier = 57347 hintIgnoreIndex = 57379 + hintIgnorePlanCache = 57377 hintIndexMerge = 57362 hintInlHashJoin = 57380 hintInlJoin = 57381 @@ -64,10 +64,10 @@ const ( hintJoinOrder = 57351 hintJoinPrefix = 57352 hintJoinSuffix = 57353 - hintLooseScan = 57407 - hintMB = 57403 + hintLooseScan = 57408 + hintMB = 57404 hintMRR = 57364 - hintMaterialization = 57408 + hintMaterialization = 57409 hintMaxExecutionTime = 57372 hintMemoryQuota = 57383 hintMerge = 57360 @@ -82,8 +82,8 @@ const ( hintNoSemijoin = 57371 hintNoSkipScan = 57369 hintNoSwapJoinInputs = 57384 - hintOLAP = 57397 - hintOLTP = 57398 + hintOLAP = 57398 + hintOLTP = 57399 hintQBName = 57375 hintQueryType = 57385 hintReadConsistentReplica = 57386 @@ -97,125 +97,127 @@ const ( hintStreamAgg = 57390 hintStringLit = 57349 hintSwapJoinInputs = 57391 - hintTiFlash = 57400 - hintTiKV = 57399 + hintTiFlash = 57401 + hintTiKV = 57400 hintTimeRange = 57396 - hintTrue = 57402 + hintTrue = 57403 + hintUseCascades = 57397 hintUseIndex = 57393 hintUseIndexMerge = 57392 hintUsePlanCache = 57394 hintUseToja = 57395 yyhintMaxDepth = 200 - yyhintTabOfs = -158 + yyhintTabOfs = -160 ) var ( yyhintXLAT = map[int]int{ - 41: 0, // ')' (118x) - 44: 1, // ',' (108x) - 57376: 2, // hintAggToCop (108x) - 57389: 3, // hintBCJoin (108x) - 57354: 4, // hintBKA (108x) - 57356: 5, // hintBNL (108x) - 57377: 6, // hintEnablePlanCache (108x) - 57378: 7, // hintHashAgg (108x) - 57358: 8, // hintHashJoin (108x) - 57379: 9, // hintIgnoreIndex (108x) - 57362: 10, // hintIndexMerge (108x) - 57380: 11, // hintInlHashJoin (108x) - 57381: 12, // hintInlJoin (108x) - 57382: 13, // hintInlMergeJoin (108x) - 57350: 14, // hintJoinFixedOrder (108x) - 57351: 15, // hintJoinOrder (108x) - 57352: 16, // hintJoinPrefix (108x) - 57353: 17, // hintJoinSuffix (108x) - 57372: 18, // hintMaxExecutionTime (108x) - 57383: 19, // hintMemoryQuota (108x) - 57360: 20, // hintMerge (108x) - 57364: 21, // hintMRR (108x) - 57355: 22, // hintNoBKA (108x) - 57357: 23, // hintNoBNL (108x) - 57359: 24, // hintNoHashJoin (108x) - 57366: 25, // hintNoICP (108x) - 57363: 26, // hintNoIndexMerge (108x) - 57361: 27, // hintNoMerge (108x) - 57365: 28, // hintNoMRR (108x) - 57367: 29, // hintNoRangeOptimization (108x) - 57371: 30, // hintNoSemijoin (108x) - 57369: 31, // hintNoSkipScan (108x) - 57384: 32, // hintNoSwapJoinInputs (108x) - 57375: 33, // hintQBName (108x) - 57385: 34, // hintQueryType (108x) - 57386: 35, // hintReadConsistentReplica (108x) - 57387: 36, // hintReadFromStorage (108x) - 57374: 37, // hintResourceGroup (108x) - 57370: 38, // hintSemijoin (108x) - 57373: 39, // hintSetVar (108x) - 57368: 40, // hintSkipScan (108x) - 57388: 41, // hintSMJoin (108x) - 57390: 42, // hintStreamAgg (108x) - 57391: 43, // hintSwapJoinInputs (108x) - 57396: 44, // hintTimeRange (108x) - 57393: 45, // hintUseIndex (108x) - 57392: 46, // hintUseIndexMerge (108x) - 57394: 47, // hintUsePlanCache (108x) - 57395: 48, // hintUseToja (108x) - 57405: 49, // hintDupsWeedOut (87x) - 57406: 50, // hintFirstMatch (87x) - 57407: 51, // hintLooseScan (87x) - 57408: 52, // hintMaterialization (87x) - 57400: 53, // hintTiFlash (87x) - 57399: 54, // hintTiKV (87x) - 57401: 55, // hintFalse (86x) - 57397: 56, // hintOLAP (86x) - 57398: 57, // hintOLTP (86x) - 57402: 58, // hintTrue (86x) - 57404: 59, // hintGB (85x) - 57403: 60, // hintMB (85x) - 57347: 61, // hintIdentifier (84x) - 57348: 62, // hintSingleAtIdentifier (76x) - 93: 63, // ']' (68x) - 46: 64, // '.' (61x) - 61: 65, // '=' (61x) - 40: 66, // '(' (55x) - 57344: 67, // $end (23x) - 57427: 68, // QueryBlockOpt (16x) - 57421: 69, // Identifier (11x) - 57346: 70, // hintIntLit (6x) - 57349: 71, // hintStringLit (5x) - 57417: 72, // HintTable (4x) - 57418: 73, // HintTableList (4x) - 91: 74, // '[' (3x) - 57411: 75, // CommaOpt (3x) - 57410: 76, // BooleanHintName (2x) - 57412: 77, // HintIndexList (2x) - 57414: 78, // HintStorageType (2x) - 57415: 79, // HintStorageTypeAndTable (2x) - 57419: 80, // HintTableListOpt (2x) - 57424: 81, // JoinOrderOptimizerHintName (2x) - 57425: 82, // NullaryHintName (2x) - 57429: 83, // StorageOptimizerHintOpt (2x) - 57430: 84, // SubqueryOptimizerHintName (2x) - 57433: 85, // SubqueryStrategy (2x) - 57434: 86, // SupportedIndexLevelOptimizerHintName (2x) - 57435: 87, // SupportedTableLevelOptimizerHintName (2x) - 57436: 88, // TableOptimizerHintOpt (2x) - 57438: 89, // UnsupportedIndexLevelOptimizerHintName (2x) - 57439: 90, // UnsupportedTableLevelOptimizerHintName (2x) - 57413: 91, // HintQueryType (1x) - 57416: 92, // HintStorageTypeAndTableList (1x) - 57420: 93, // HintTrueOrFalse (1x) - 57422: 94, // IndexNameList (1x) - 57423: 95, // IndexNameListOpt (1x) - 57426: 96, // OptimizerHintList (1x) - 57428: 97, // Start (1x) - 57431: 98, // SubqueryStrategies (1x) - 57432: 99, // SubqueryStrategiesOpt (1x) - 57437: 100, // UnitOfBytes (1x) - 57440: 101, // Value (1x) - 57409: 102, // $default (0x) - 57345: 103, // error (0x) + 41: 0, // ')' (119x) + 44: 1, // ',' (109x) + 57376: 2, // hintAggToCop (109x) + 57389: 3, // hintBCJoin (109x) + 57354: 4, // hintBKA (109x) + 57356: 5, // hintBNL (109x) + 57378: 6, // hintHashAgg (109x) + 57358: 7, // hintHashJoin (109x) + 57379: 8, // hintIgnoreIndex (109x) + 57377: 9, // hintIgnorePlanCache (109x) + 57362: 10, // hintIndexMerge (109x) + 57380: 11, // hintInlHashJoin (109x) + 57381: 12, // hintInlJoin (109x) + 57382: 13, // hintInlMergeJoin (109x) + 57350: 14, // hintJoinFixedOrder (109x) + 57351: 15, // hintJoinOrder (109x) + 57352: 16, // hintJoinPrefix (109x) + 57353: 17, // hintJoinSuffix (109x) + 57372: 18, // hintMaxExecutionTime (109x) + 57383: 19, // hintMemoryQuota (109x) + 57360: 20, // hintMerge (109x) + 57364: 21, // hintMRR (109x) + 57355: 22, // hintNoBKA (109x) + 57357: 23, // hintNoBNL (109x) + 57359: 24, // hintNoHashJoin (109x) + 57366: 25, // hintNoICP (109x) + 57363: 26, // hintNoIndexMerge (109x) + 57361: 27, // hintNoMerge (109x) + 57365: 28, // hintNoMRR (109x) + 57367: 29, // hintNoRangeOptimization (109x) + 57371: 30, // hintNoSemijoin (109x) + 57369: 31, // hintNoSkipScan (109x) + 57384: 32, // hintNoSwapJoinInputs (109x) + 57375: 33, // hintQBName (109x) + 57385: 34, // hintQueryType (109x) + 57386: 35, // hintReadConsistentReplica (109x) + 57387: 36, // hintReadFromStorage (109x) + 57374: 37, // hintResourceGroup (109x) + 57370: 38, // hintSemijoin (109x) + 57373: 39, // hintSetVar (109x) + 57368: 40, // hintSkipScan (109x) + 57388: 41, // hintSMJoin (109x) + 57390: 42, // hintStreamAgg (109x) + 57391: 43, // hintSwapJoinInputs (109x) + 57396: 44, // hintTimeRange (109x) + 57397: 45, // hintUseCascades (109x) + 57393: 46, // hintUseIndex (109x) + 57392: 47, // hintUseIndexMerge (109x) + 57394: 48, // hintUsePlanCache (109x) + 57395: 49, // hintUseToja (109x) + 57406: 50, // hintDupsWeedOut (88x) + 57407: 51, // hintFirstMatch (88x) + 57408: 52, // hintLooseScan (88x) + 57409: 53, // hintMaterialization (88x) + 57401: 54, // hintTiFlash (88x) + 57400: 55, // hintTiKV (88x) + 57402: 56, // hintFalse (87x) + 57398: 57, // hintOLAP (87x) + 57399: 58, // hintOLTP (87x) + 57403: 59, // hintTrue (87x) + 57405: 60, // hintGB (86x) + 57404: 61, // hintMB (86x) + 57347: 62, // hintIdentifier (85x) + 57348: 63, // hintSingleAtIdentifier (77x) + 93: 64, // ']' (69x) + 46: 65, // '.' (62x) + 61: 66, // '=' (62x) + 40: 67, // '(' (56x) + 57344: 68, // $end (23x) + 57428: 69, // QueryBlockOpt (16x) + 57422: 70, // Identifier (11x) + 57346: 71, // hintIntLit (6x) + 57349: 72, // hintStringLit (5x) + 57418: 73, // HintTable (4x) + 57419: 74, // HintTableList (4x) + 91: 75, // '[' (3x) + 57412: 76, // CommaOpt (3x) + 57411: 77, // BooleanHintName (2x) + 57413: 78, // HintIndexList (2x) + 57415: 79, // HintStorageType (2x) + 57416: 80, // HintStorageTypeAndTable (2x) + 57420: 81, // HintTableListOpt (2x) + 57425: 82, // JoinOrderOptimizerHintName (2x) + 57426: 83, // NullaryHintName (2x) + 57430: 84, // StorageOptimizerHintOpt (2x) + 57431: 85, // SubqueryOptimizerHintName (2x) + 57434: 86, // SubqueryStrategy (2x) + 57435: 87, // SupportedIndexLevelOptimizerHintName (2x) + 57436: 88, // SupportedTableLevelOptimizerHintName (2x) + 57437: 89, // TableOptimizerHintOpt (2x) + 57439: 90, // UnsupportedIndexLevelOptimizerHintName (2x) + 57440: 91, // UnsupportedTableLevelOptimizerHintName (2x) + 57414: 92, // HintQueryType (1x) + 57417: 93, // HintStorageTypeAndTableList (1x) + 57421: 94, // HintTrueOrFalse (1x) + 57423: 95, // IndexNameList (1x) + 57424: 96, // IndexNameListOpt (1x) + 57427: 97, // OptimizerHintList (1x) + 57429: 98, // Start (1x) + 57432: 99, // SubqueryStrategies (1x) + 57433: 100, // SubqueryStrategiesOpt (1x) + 57438: 101, // UnitOfBytes (1x) + 57441: 102, // Value (1x) + 57410: 103, // $default (0x) + 57345: 104, // error (0x) } yyhintSymNames = []string{ @@ -225,10 +227,10 @@ var ( "hintBCJoin", "hintBKA", "hintBNL", - "hintEnablePlanCache", "hintHashAgg", "hintHashJoin", "hintIgnoreIndex", + "hintIgnorePlanCache", "hintIndexMerge", "hintInlHashJoin", "hintInlJoin", @@ -264,6 +266,7 @@ var ( "hintStreamAgg", "hintSwapJoinInputs", "hintTimeRange", + "hintUseCascades", "hintUseIndex", "hintUseIndexMerge", "hintUsePlanCache", @@ -327,60 +330,75 @@ var ( yyhintReductions = []struct{ xsym, components int }{ {0, 1}, + {98, 1}, {97, 1}, - {96, 1}, - {96, 3}, - {96, 1}, - {96, 3}, - {88, 4}, - {88, 4}, - {88, 4}, - {88, 4}, - {88, 4}, - {88, 4}, - {88, 5}, - {88, 5}, - {88, 6}, - {88, 4}, - {88, 4}, - {88, 6}, - {88, 6}, - {88, 5}, - {88, 4}, - {88, 5}, - {83, 5}, - {92, 1}, - {92, 3}, - {79, 4}, - {68, 0}, - {68, 1}, - {75, 0}, - {75, 1}, - {80, 1}, - {80, 1}, + {97, 3}, + {97, 1}, + {97, 3}, + {89, 4}, + {89, 4}, + {89, 4}, + {89, 4}, + {89, 4}, + {89, 4}, + {89, 5}, + {89, 5}, + {89, 6}, + {89, 4}, + {89, 4}, + {89, 6}, + {89, 6}, + {89, 5}, + {89, 4}, + {89, 5}, + {84, 5}, + {93, 1}, + {93, 3}, + {80, 4}, + {69, 0}, + {69, 1}, + {76, 0}, + {76, 1}, + {81, 1}, + {81, 1}, + {74, 2}, + {74, 3}, {73, 2}, - {73, 3}, - {72, 2}, - {72, 4}, - {77, 4}, - {95, 0}, + {73, 4}, + {78, 4}, + {96, 0}, + {96, 1}, {95, 1}, - {94, 1}, - {94, 3}, - {99, 0}, + {95, 3}, + {100, 0}, + {100, 1}, {99, 1}, - {98, 1}, - {98, 3}, - {101, 1}, + {99, 3}, + {102, 1}, + {102, 1}, + {102, 1}, {101, 1}, {101, 1}, - {100, 1}, - {100, 1}, - {93, 1}, - {93, 1}, - {81, 1}, - {81, 1}, - {81, 1}, + {94, 1}, + {94, 1}, + {82, 1}, + {82, 1}, + {82, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {91, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, + {88, 1}, {90, 1}, {90, 1}, {90, 1}, @@ -391,383 +409,372 @@ var ( {87, 1}, {87, 1}, {87, 1}, - {87, 1}, - {87, 1}, - {87, 1}, - {87, 1}, - {87, 1}, - {89, 1}, - {89, 1}, - {89, 1}, - {89, 1}, - {89, 1}, - {89, 1}, - {89, 1}, + {85, 1}, + {85, 1}, {86, 1}, {86, 1}, {86, 1}, - {84, 1}, - {84, 1}, - {85, 1}, - {85, 1}, - {85, 1}, - {85, 1}, - {76, 1}, - {76, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {82, 1}, - {91, 1}, - {91, 1}, - {78, 1}, - {78, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, - {69, 1}, + {86, 1}, + {77, 1}, + {77, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {92, 1}, + {92, 1}, + {79, 1}, + {79, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, + {70, 1}, } yyhintXErrors = map[yyhintXError]string{} - yyhintParseTab = [232][]uint16{ + yyhintParseTab = [234][]uint16{ // 0 - {2: 215, 191, 183, 185, 211, 213, 197, 206, 198, 193, 192, 196, 163, 180, 181, 182, 170, 174, 188, 199, 184, 186, 187, 201, 216, 189, 200, 202, 209, 204, 195, 173, 178, 217, 179, 172, 208, 171, 203, 190, 214, 194, 175, 205, 207, 212, 210, 76: 176, 81: 164, 177, 162, 169, 86: 168, 166, 161, 167, 165, 96: 160, 159}, - {67: 158}, - {1: 319, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 67: 157, 75: 387}, - {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 67: 156}, - {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 67: 154}, + {2: 217, 193, 185, 187, 215, 199, 208, 220, 200, 195, 194, 198, 165, 182, 183, 184, 172, 176, 190, 201, 186, 188, 189, 203, 218, 191, 202, 204, 211, 206, 197, 175, 180, 219, 181, 174, 210, 173, 205, 192, 216, 196, 177, 213, 207, 209, 214, 212, 77: 178, 82: 166, 179, 164, 171, 87: 170, 168, 163, 169, 167, 97: 162, 161}, + {68: 160}, + {1: 323, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 68: 159, 76: 391}, + {1: 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 68: 158}, + {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 68: 156}, // 5 - {66: 384}, - {66: 381}, - {66: 378}, - {66: 373}, - {66: 370}, + {67: 388}, + {67: 385}, + {67: 382}, + {67: 377}, + {67: 374}, // 10 - {66: 359}, - {66: 347}, - {66: 343}, - {66: 335}, - {66: 332}, + {67: 363}, + {67: 351}, + {67: 347}, + {67: 339}, + {67: 336}, // 15 - {66: 329}, - {66: 322}, - {66: 316}, - {66: 310}, - {66: 307}, + {67: 333}, + {67: 326}, + {67: 320}, + {67: 314}, + {67: 311}, // 20 - {66: 301}, - {66: 218}, - {66: 106}, - {66: 105}, - {66: 104}, + {67: 305}, + {67: 221}, + {67: 108}, + {67: 107}, + {67: 106}, // 25 - {66: 103}, - {66: 102}, - {66: 101}, - {66: 100}, - {66: 99}, + {67: 105}, + {67: 104}, + {67: 103}, + {67: 102}, + {67: 101}, // 30 - {66: 98}, - {66: 97}, - {66: 96}, - {66: 95}, - {66: 94}, + {67: 100}, + {67: 99}, + {67: 98}, + {67: 97}, + {67: 96}, // 35 - {66: 93}, - {66: 92}, - {66: 91}, - {66: 90}, - {66: 89}, + {67: 95}, + {67: 94}, + {67: 93}, + {67: 92}, + {67: 91}, // 40 - {66: 88}, - {66: 87}, - {66: 86}, - {66: 85}, - {66: 84}, + {67: 90}, + {67: 89}, + {67: 88}, + {67: 87}, + {67: 86}, // 45 - {66: 83}, - {66: 82}, - {66: 81}, - {66: 80}, - {66: 79}, + {67: 85}, + {67: 84}, + {67: 83}, + {67: 82}, + {67: 81}, // 50 - {66: 78}, - {66: 77}, - {66: 72}, - {66: 71}, - {66: 70}, + {67: 80}, + {67: 79}, + {67: 74}, + {67: 73}, + {67: 72}, // 55 - {66: 69}, - {66: 68}, - {66: 67}, - {66: 66}, - {66: 65}, + {67: 71}, + {67: 70}, + {67: 69}, + {67: 68}, + {67: 67}, // 60 - {53: 132, 132, 62: 220, 68: 219}, - {53: 225, 224, 78: 223, 222, 92: 221}, - {131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 63: 131, 70: 131}, - {298, 299}, - {135, 135}, + {67: 66}, + {54: 134, 134, 63: 223, 69: 222}, + {54: 228, 227, 79: 226, 225, 93: 224}, + {133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 64: 133, 71: 133}, + {302, 303}, // 65 - {74: 226}, - {74: 62}, - {74: 61}, - {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 228, 73: 227}, - {1: 296, 63: 295}, + {137, 137}, + {75: 229}, + {75: 63}, + {75: 62}, + {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 231, 74: 230}, // 70 - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 229}, - {126, 126, 63: 126}, - {132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 132, 292, 68: 291}, - {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, - {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, + {1: 300, 64: 299}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 232}, + {128, 128, 64: 128}, + {134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 134, 296, 69: 295}, + {61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61}, // 75 - {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, - {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, - {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, - {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, - {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, + {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, + {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, + {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, + {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, + {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, // 80 - {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, - {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, - {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, - {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, - {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, + {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, + {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, + {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, + {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, + {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, // 85 - {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, - {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, - {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, - {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, - {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, + {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, + {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, + {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, + {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, + {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, // 90 - {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, - {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, - {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, - {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, - {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, + {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, + {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, + {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, + {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, + {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, // 95 - {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, - {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, - {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, - {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, - {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, + {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, + {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, + {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, + {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, + {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, // 100 - {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, - {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, - {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, - {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, - {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, + {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, + {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, + {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, + {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, + {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, // 105 - {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, - {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, - {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, - {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, - {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, + {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, + {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, + {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, + {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, + {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, // 110 - {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, - {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, - {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, - {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, - {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, + {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, + {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, + {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, + {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, + {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, // 115 - {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, - {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, - {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, - {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, - {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, + {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, + {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, + {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, + {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, + {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, // 120 - {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, - {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, - {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, - {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, + {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, + {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, + {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, + {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, + {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, // 125 - {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, - {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, - {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, - {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, + {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, + {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, + {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, + {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, // 130 - {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - {124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 63: 124}, - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 293}, + {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, + {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 135 - {132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 132, 68: 294}, - {123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 63: 123}, - {133, 133}, - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 297}, - {125, 125, 63: 125}, + {126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 64: 126}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 297}, + {134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 134, 69: 298}, + {125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 64: 125}, + {135, 135}, // 140 - {1: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 67: 136}, - {53: 225, 224, 78: 223, 300}, - {134, 134}, - {56: 132, 132, 62: 220, 68: 302}, - {56: 304, 305, 91: 303}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 301}, + {127, 127, 64: 127}, + {1: 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 68: 138}, + {54: 228, 227, 79: 226, 304}, + {136, 136}, // 145 - {306}, + {57: 134, 134, 63: 223, 69: 306}, + {57: 308, 309, 92: 307}, + {310}, + {65}, {64}, - {63}, - {1: 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 67: 137}, - {132, 62: 220, 68: 308}, // 150 - {309}, - {1: 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 67: 138}, - {55: 132, 58: 132, 62: 220, 68: 311}, - {55: 314, 58: 313, 93: 312}, - {315}, + {1: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 68: 139}, + {134, 63: 223, 69: 312}, + {313}, + {1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 68: 140}, + {56: 134, 59: 134, 63: 223, 69: 315}, // 155 - {108}, - {107}, - {1: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 67: 139}, - {71: 317}, - {1: 319, 71: 130, 75: 318}, - // 160 - {71: 320}, - {129, 2: 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 71: 129}, - {321}, - {1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 67: 140}, - {62: 220, 68: 323, 70: 132}, - // 165 - {70: 324}, - {59: 327, 326, 100: 325}, - {328}, + {56: 318, 59: 317, 94: 316}, + {319}, {110}, {109}, + {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 68: 141}, + // 160 + {72: 321}, + {1: 323, 72: 132, 76: 322}, + {72: 324}, + {131, 2: 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 72: 131}, + {325}, + // 165 + {1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 68: 142}, + {63: 223, 69: 327, 71: 134}, + {71: 328}, + {60: 331, 330, 101: 329}, + {332}, // 170 - {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 67: 141}, - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 330}, - {331}, - {1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 67: 142}, - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 333}, - // 175 - {334}, - {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 67: 143}, - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 336}, - {65: 337}, - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 340, 341, 339, 101: 338}, - // 180 - {342}, - {113}, {112}, {111}, - {1: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 67: 144}, - // 185 - {62: 220, 68: 344, 70: 132}, - {70: 345}, + {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 68: 143}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 334}, + {335}, + // 175 + {1: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 68: 144}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 337}, + {338}, + {1: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 68: 145}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 340}, + // 180 + {66: 341}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 344, 345, 343, 102: 342}, {346}, - {1: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 67: 145}, - {132, 49: 132, 132, 132, 132, 62: 220, 68: 348}, + {115}, + {114}, + // 185 + {113}, + {1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 68: 146}, + {63: 223, 69: 348, 71: 134}, + {71: 349}, + {350}, // 190 - {117, 49: 352, 353, 354, 355, 85: 351, 98: 350, 349}, - {358}, - {116, 356}, - {115, 115}, - {76, 76}, + {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 68: 147}, + {134, 50: 134, 134, 134, 134, 63: 223, 69: 352}, + {119, 50: 356, 357, 358, 359, 86: 355, 99: 354, 353}, + {362}, + {118, 360}, // 195 + {117, 117}, + {78, 78}, + {77, 77}, + {76, 76}, {75, 75}, - {74, 74}, - {73, 73}, - {49: 352, 353, 354, 355, 85: 357}, - {114, 114}, // 200 - {1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 67: 146}, - {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 361, 77: 360}, - {369}, - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 362}, - {130, 319, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 75: 363}, + {50: 356, 357, 358, 359, 86: 361}, + {116, 116}, + {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 68: 148}, + {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 365, 78: 364}, + {373}, // 205 - {121, 2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 366, 94: 365, 364}, - {122}, - {120, 367}, - {119, 119}, - {2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 368}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 366}, + {132, 323, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 76: 367}, + {123, 2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 370, 95: 369, 368}, + {124}, + {122, 371}, // 210 - {118, 118}, - {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 67: 147}, - {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 361, 77: 371}, - {372}, - {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 67: 148}, + {121, 121}, + {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 372}, + {120, 120}, + {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 68: 149}, + {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 365, 78: 375}, // 215 - {132, 2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 376, 73: 375, 80: 374}, - {377}, - {128, 296}, - {127, 2: 258, 271, 236, 238, 259, 260, 240, 261, 244, 262, 263, 264, 232, 233, 234, 235, 254, 265, 242, 246, 237, 239, 241, 248, 245, 243, 247, 249, 253, 251, 266, 257, 267, 268, 269, 256, 252, 255, 250, 270, 272, 273, 278, 275, 274, 276, 277, 287, 288, 289, 290, 282, 281, 283, 279, 280, 284, 286, 285, 231, 69: 230, 72: 229}, - {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 67: 149}, + {376}, + {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 68: 150}, + {134, 2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 380, 74: 379, 81: 378}, + {381}, + {130, 300}, // 220 - {132, 2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 376, 73: 375, 80: 379}, - {380}, - {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 67: 150}, - {2: 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 220, 68: 228, 73: 382}, - {383, 296}, + {129, 2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 232}, + {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 68: 151}, + {134, 2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 380, 74: 379, 81: 383}, + {384}, + {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 68: 152}, // 225 - {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 67: 151}, - {132, 62: 220, 68: 385}, - {386}, - {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 67: 152}, - {2: 215, 191, 183, 185, 211, 213, 197, 206, 198, 193, 192, 196, 163, 180, 181, 182, 170, 174, 188, 199, 184, 186, 187, 201, 216, 189, 200, 202, 209, 204, 195, 173, 178, 217, 179, 172, 208, 171, 203, 190, 214, 194, 175, 205, 207, 212, 210, 76: 176, 81: 164, 177, 389, 169, 86: 168, 166, 388, 167, 165}, + {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 231, 74: 386}, + {387, 300}, + {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 68: 153}, + {134, 63: 223, 69: 389}, + {390}, // 230 - {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 67: 155}, - {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 67: 153}, + {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 68: 154}, + {2: 217, 193, 185, 187, 215, 199, 208, 220, 200, 195, 194, 198, 165, 182, 183, 184, 172, 176, 190, 201, 186, 188, 189, 203, 218, 191, 202, 204, 211, 206, 197, 175, 180, 219, 181, 174, 210, 173, 205, 192, 216, 196, 177, 213, 207, 209, 214, 212, 77: 178, 82: 166, 179, 393, 171, 87: 170, 168, 392, 169, 167}, + {1: 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 68: 157}, + {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 68: 155}, } ) @@ -806,7 +813,7 @@ func yyhintlex1(yylex yyhintLexer, lval *yyhintSymType) (n int) { } func yyhintParse(yylex yyhintLexer, parser *hintParser) int { - const yyError = 103 + const yyError = 104 yyEx, _ := yylex.(yyhintLexerEx) var yyn int diff --git a/hintparser.y b/hintparser.y index 622144253..20a7ae876 100644 --- a/hintparser.y +++ b/hintparser.y @@ -78,7 +78,7 @@ import ( /* TiDB hint names */ hintAggToCop "AGG_TO_COP" - hintEnablePlanCache "ENABLE_PLAN_CACHE" + hintIgnorePlanCache "IGNORE_PLAN_CACHE" hintHashAgg "HASH_AGG" hintIgnoreIndex "IGNORE_INDEX" hintInlHashJoin "INL_HASH_JOIN" @@ -89,7 +89,7 @@ import ( hintQueryType "QUERY_TYPE" hintReadConsistentReplica "READ_CONSISTENT_REPLICA" hintReadFromStorage "READ_FROM_STORAGE" - hintSMJoin "SM_JOIN" + hintSMJoin "MERGE_JOIN" hintBCJoin "BC_JOIN" hintStreamAgg "STREAM_AGG" hintSwapJoinInputs "SWAP_JOIN_INPUTS" @@ -98,6 +98,7 @@ import ( hintUsePlanCache "USE_PLAN_CACHE" hintUseToja "USE_TOJA" hintTimeRange "TIME_RANGE" + hintUseCascades "USE_CASCADES" /* Other keywords */ hintOLAP "OLAP" @@ -484,7 +485,7 @@ UnsupportedTableLevelOptimizerHintName: | "NO_MERGE" SupportedTableLevelOptimizerHintName: - "SM_JOIN" + "MERGE_JOIN" | "BC_JOIN" | "INL_JOIN" | "INL_HASH_JOIN" @@ -520,7 +521,7 @@ SubqueryStrategy: BooleanHintName: "USE_TOJA" -| "ENABLE_PLAN_CACHE" +| "USE_CASCADES" NullaryHintName: "USE_PLAN_CACHE" @@ -529,6 +530,7 @@ NullaryHintName: | "AGG_TO_COP" | "NO_INDEX_MERGE" | "READ_CONSISTENT_REPLICA" +| "IGNORE_PLAN_CACHE" HintQueryType: "OLAP" @@ -569,7 +571,7 @@ Identifier: | "QB_NAME" /* TiDB hint names */ | "AGG_TO_COP" -| "ENABLE_PLAN_CACHE" +| "IGNORE_PLAN_CACHE" | "HASH_AGG" | "IGNORE_INDEX" | "INL_HASH_JOIN" @@ -580,7 +582,7 @@ Identifier: | "QUERY_TYPE" | "READ_CONSISTENT_REPLICA" | "READ_FROM_STORAGE" -| "SM_JOIN" +| "MERGE_JOIN" | "BC_JOIN" | "STREAM_AGG" | "SWAP_JOIN_INPUTS" @@ -589,6 +591,7 @@ Identifier: | "USE_PLAN_CACHE" | "USE_TOJA" | "TIME_RANGE" +| "USE_CASCADES" /* other keywords */ | "OLAP" | "OLTP" From f4bcaaa96aa8f072ee5ac64e243558f6c2e9972d Mon Sep 17 00:00:00 2001 From: Fei Han Date: Mon, 20 Apr 2020 17:56:48 +0800 Subject: [PATCH 06/12] refine --- ast/misc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ast/misc.go b/ast/misc.go index 3b114e168..a526ed874 100755 --- a/ast/misc.go +++ b/ast/misc.go @@ -2299,7 +2299,7 @@ func (n *TableOptimizerHint) Restore(ctx *format.RestoreCtx) error { switch n.HintName.L { case "max_execution_time": ctx.WritePlainf("%d", n.HintData.(uint64)) - case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "sm_join", "inl_join": + case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "sm_join", "inl_join", "bc_join": for i, table := range n.Tables { if i != 0 { ctx.WritePlain(", ") From 3c139eb8290885483322c06220dad7fe776cabbc Mon Sep 17 00:00:00 2001 From: Fei Han Date: Mon, 20 Apr 2020 18:10:07 +0800 Subject: [PATCH 07/12] refine again --- ast/misc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ast/misc.go b/ast/misc.go index a526ed874..58f73338b 100755 --- a/ast/misc.go +++ b/ast/misc.go @@ -2299,7 +2299,7 @@ func (n *TableOptimizerHint) Restore(ctx *format.RestoreCtx) error { switch n.HintName.L { case "max_execution_time": ctx.WritePlainf("%d", n.HintData.(uint64)) - case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "sm_join", "inl_join", "bc_join": + case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "sm_join", "inl_join", "bc_join", "tidb_bcj": for i, table := range n.Tables { if i != 0 { ctx.WritePlain(", ") From f9d90d7d6bc33514070c027b668687917bca11d6 Mon Sep 17 00:00:00 2001 From: Fei Han Date: Mon, 20 Apr 2020 22:16:05 +0800 Subject: [PATCH 08/12] pass test --- ast/misc_test.go | 2 ++ parser_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/ast/misc_test.go b/ast/misc_test.go index c5306ff48..99845015f 100644 --- a/ast/misc_test.go +++ b/ast/misc_test.go @@ -228,7 +228,9 @@ func (ts *testMiscSuite) TestTableOptimizerHintRestore(c *C) { {"TIDB_HJ(t1,t2)", "TIDB_HJ(`t1`, `t2`)"}, {"TIDB_HJ(@sel1 t1,t2)", "TIDB_HJ(@`sel1` `t1`, `t2`)"}, {"TIDB_HJ(t1@sel1,t2@sel2)", "TIDB_HJ(`t1`@`sel1`, `t2`@`sel2`)"}, + {"TIDB_BCJ(t1,t2)", "TIDB_BCJ(`t1`, `t2`)"}, {"MERGE_JOIN(t1,t2)", "MERGE_JOIN(`t1`, `t2`)"}, + {"BC_JOIN(t1,t2)", "BC_JOIN(`t1`, `t2`)"}, {"INL_JOIN(t1,t2)", "INL_JOIN(`t1`, `t2`)"}, {"HASH_JOIN(t1,t2)", "HASH_JOIN(`t1`, `t2`)"}, {"MAX_EXECUTION_TIME(3000)", "MAX_EXECUTION_TIME(3000)"}, diff --git a/parser_test.go b/parser_test.go index 222bf732b..3991aa261 100644 --- a/parser_test.go +++ b/parser_test.go @@ -3108,6 +3108,23 @@ func (s *testParserSuite) TestOptimizerHints(c *C) { c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") + // Test TIDB_BCJ + stmt, _, err = parser.Parse("select /*+ TIDB_BCJ(T1,t2), tidb_bcj(T3,t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") + c.Assert(err, IsNil) + selectStmt = stmt[0].(*ast.SelectStmt) + + hints = selectStmt.TableHints + c.Assert(hints, HasLen, 2) + c.Assert(hints[0].HintName.L, Equals, "tidb_bcj") + c.Assert(hints[0].Tables, HasLen, 2) + c.Assert(hints[0].Tables[0].TableName.L, Equals, "t1") + c.Assert(hints[0].Tables[1].TableName.L, Equals, "t2") + + c.Assert(hints[1].HintName.L, Equals, "tidb_bcj") + c.Assert(hints[1].Tables, HasLen, 2) + c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") + c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") + // Test MERGE_JOIN stmt, _, err = parser.Parse("select /*+ MERGE_JOIN(t1, T2), merge_join(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") c.Assert(err, IsNil) @@ -3125,6 +3142,23 @@ func (s *testParserSuite) TestOptimizerHints(c *C) { c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") + // TEST BC_JOIN + stmt, _, err = parser.Parse("select /*+ BC_JOIN(t1, T2), bc_join(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") + c.Assert(err, IsNil) + selectStmt = stmt[0].(*ast.SelectStmt) + + hints = selectStmt.TableHints + c.Assert(hints, HasLen, 2) + c.Assert(hints[0].HintName.L, Equals, "bc_join") + c.Assert(hints[0].Tables, HasLen, 2) + c.Assert(hints[0].Tables[0].TableName.L, Equals, "t1") + c.Assert(hints[0].Tables[1].TableName.L, Equals, "t2") + + c.Assert(hints[1].HintName.L, Equals, "bc_join") + c.Assert(hints[1].Tables, HasLen, 2) + c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") + c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") + // Test TIDB_INLJ stmt, _, err = parser.Parse("select /*+ TIDB_INLJ(t1, T2), tidb_inlj(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") c.Assert(err, IsNil) From b02b990855a6203bac4d761214d426125ceadec7 Mon Sep 17 00:00:00 2001 From: xufei Date: Wed, 6 May 2020 18:23:38 +0800 Subject: [PATCH 09/12] fix compile error --- misc.go | 1 - 1 file changed, 1 deletion(-) diff --git a/misc.go b/misc.go index 8a64b192a..1f5563163 100644 --- a/misc.go +++ b/misc.go @@ -840,7 +840,6 @@ var hintTokenMap = map[string]int{ "READ_FROM_STORAGE": hintReadFromStorage, "BC_JOIN": hintBCJoin, "MERGE_JOIN": hintSMJoin, - "BC_JOIN": hintBCJoin, "STREAM_AGG": hintStreamAgg, "SWAP_JOIN_INPUTS": hintSwapJoinInputs, "USE_INDEX_MERGE": hintUseIndexMerge, From 6a681e8c91100e446b320485caccd5184f3cdca5 Mon Sep 17 00:00:00 2001 From: ichn-hu Date: Fri, 8 May 2020 16:28:27 +0800 Subject: [PATCH 10/12] add prefer local --- ast/misc.go | 2 +- hintparser.go | 1010 ++++++++++++++++++++++++------------------------ hintparser.y | 3 + misc.go | 1 + parser_test.go | 8 +- 5 files changed, 520 insertions(+), 504 deletions(-) diff --git a/ast/misc.go b/ast/misc.go index 58386062c..b93fbe95e 100755 --- a/ast/misc.go +++ b/ast/misc.go @@ -2539,7 +2539,7 @@ func (n *TableOptimizerHint) Restore(ctx *format.RestoreCtx) error { switch n.HintName.L { case "max_execution_time": ctx.WritePlainf("%d", n.HintData.(uint64)) - case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "merge_join", "inl_join", "bc_join", "tidb_bcj": + case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "merge_join", "inl_join", "bc_join", "bc_join_prefer_local", "tidb_bcj": for i, table := range n.Tables { if i != 0 { ctx.WritePlain(", ") diff --git a/hintparser.go b/hintparser.go index 421b4f89c..7a233c4c9 100644 --- a/hintparser.go +++ b/hintparser.go @@ -39,17 +39,18 @@ type yyhintXError struct { } const ( - yyhintDefault = 57410 + yyhintDefault = 57411 yyhintEOFCode = 57344 yyhintErrCode = 57345 hintAggToCop = 57376 hintBCJoin = 57389 + hintBCJoinPreferLocal = 57390 hintBKA = 57354 hintBNL = 57356 - hintDupsWeedOut = 57406 - hintFalse = 57402 - hintFirstMatch = 57407 - hintGB = 57405 + hintDupsWeedOut = 57407 + hintFalse = 57403 + hintFirstMatch = 57408 + hintGB = 57406 hintHashAgg = 57378 hintHashJoin = 57358 hintIdentifier = 57347 @@ -64,10 +65,10 @@ const ( hintJoinOrder = 57351 hintJoinPrefix = 57352 hintJoinSuffix = 57353 - hintLooseScan = 57408 - hintMB = 57404 + hintLooseScan = 57409 + hintMB = 57405 hintMRR = 57364 - hintMaterialization = 57409 + hintMaterialization = 57410 hintMaxExecutionTime = 57372 hintMemoryQuota = 57383 hintMerge = 57360 @@ -82,8 +83,8 @@ const ( hintNoSemijoin = 57371 hintNoSkipScan = 57369 hintNoSwapJoinInputs = 57384 - hintOLAP = 57398 - hintOLTP = 57399 + hintOLAP = 57399 + hintOLTP = 57400 hintQBName = 57375 hintQueryType = 57385 hintReadConsistentReplica = 57386 @@ -94,130 +95,131 @@ const ( hintSetVar = 57373 hintSingleAtIdentifier = 57348 hintSkipScan = 57368 - hintStreamAgg = 57390 + hintStreamAgg = 57391 hintStringLit = 57349 - hintSwapJoinInputs = 57391 - hintTiFlash = 57401 - hintTiKV = 57400 - hintTimeRange = 57396 - hintTrue = 57403 - hintUseCascades = 57397 - hintUseIndex = 57393 - hintUseIndexMerge = 57392 - hintUsePlanCache = 57394 - hintUseToja = 57395 + hintSwapJoinInputs = 57392 + hintTiFlash = 57402 + hintTiKV = 57401 + hintTimeRange = 57397 + hintTrue = 57404 + hintUseCascades = 57398 + hintUseIndex = 57394 + hintUseIndexMerge = 57393 + hintUsePlanCache = 57395 + hintUseToja = 57396 yyhintMaxDepth = 200 - yyhintTabOfs = -160 + yyhintTabOfs = -162 ) var ( yyhintXLAT = map[int]int{ - 41: 0, // ')' (119x) - 44: 1, // ',' (109x) - 57376: 2, // hintAggToCop (109x) - 57389: 3, // hintBCJoin (109x) - 57354: 4, // hintBKA (109x) - 57356: 5, // hintBNL (109x) - 57378: 6, // hintHashAgg (109x) - 57358: 7, // hintHashJoin (109x) - 57379: 8, // hintIgnoreIndex (109x) - 57377: 9, // hintIgnorePlanCache (109x) - 57362: 10, // hintIndexMerge (109x) - 57380: 11, // hintInlHashJoin (109x) - 57381: 12, // hintInlJoin (109x) - 57382: 13, // hintInlMergeJoin (109x) - 57350: 14, // hintJoinFixedOrder (109x) - 57351: 15, // hintJoinOrder (109x) - 57352: 16, // hintJoinPrefix (109x) - 57353: 17, // hintJoinSuffix (109x) - 57372: 18, // hintMaxExecutionTime (109x) - 57383: 19, // hintMemoryQuota (109x) - 57360: 20, // hintMerge (109x) - 57364: 21, // hintMRR (109x) - 57355: 22, // hintNoBKA (109x) - 57357: 23, // hintNoBNL (109x) - 57359: 24, // hintNoHashJoin (109x) - 57366: 25, // hintNoICP (109x) - 57363: 26, // hintNoIndexMerge (109x) - 57361: 27, // hintNoMerge (109x) - 57365: 28, // hintNoMRR (109x) - 57367: 29, // hintNoRangeOptimization (109x) - 57371: 30, // hintNoSemijoin (109x) - 57369: 31, // hintNoSkipScan (109x) - 57384: 32, // hintNoSwapJoinInputs (109x) - 57375: 33, // hintQBName (109x) - 57385: 34, // hintQueryType (109x) - 57386: 35, // hintReadConsistentReplica (109x) - 57387: 36, // hintReadFromStorage (109x) - 57374: 37, // hintResourceGroup (109x) - 57370: 38, // hintSemijoin (109x) - 57373: 39, // hintSetVar (109x) - 57368: 40, // hintSkipScan (109x) - 57388: 41, // hintSMJoin (109x) - 57390: 42, // hintStreamAgg (109x) - 57391: 43, // hintSwapJoinInputs (109x) - 57396: 44, // hintTimeRange (109x) - 57397: 45, // hintUseCascades (109x) - 57393: 46, // hintUseIndex (109x) - 57392: 47, // hintUseIndexMerge (109x) - 57394: 48, // hintUsePlanCache (109x) - 57395: 49, // hintUseToja (109x) - 57406: 50, // hintDupsWeedOut (88x) - 57407: 51, // hintFirstMatch (88x) - 57408: 52, // hintLooseScan (88x) - 57409: 53, // hintMaterialization (88x) - 57401: 54, // hintTiFlash (88x) - 57400: 55, // hintTiKV (88x) - 57402: 56, // hintFalse (87x) - 57398: 57, // hintOLAP (87x) - 57399: 58, // hintOLTP (87x) - 57403: 59, // hintTrue (87x) - 57405: 60, // hintGB (86x) - 57404: 61, // hintMB (86x) - 57347: 62, // hintIdentifier (85x) - 57348: 63, // hintSingleAtIdentifier (77x) - 93: 64, // ']' (69x) - 46: 65, // '.' (62x) - 61: 66, // '=' (62x) - 40: 67, // '(' (56x) - 57344: 68, // $end (23x) - 57428: 69, // QueryBlockOpt (16x) - 57422: 70, // Identifier (11x) - 57346: 71, // hintIntLit (6x) - 57349: 72, // hintStringLit (5x) - 57418: 73, // HintTable (4x) - 57419: 74, // HintTableList (4x) - 91: 75, // '[' (3x) - 57412: 76, // CommaOpt (3x) - 57411: 77, // BooleanHintName (2x) - 57413: 78, // HintIndexList (2x) - 57415: 79, // HintStorageType (2x) - 57416: 80, // HintStorageTypeAndTable (2x) - 57420: 81, // HintTableListOpt (2x) - 57425: 82, // JoinOrderOptimizerHintName (2x) - 57426: 83, // NullaryHintName (2x) - 57430: 84, // StorageOptimizerHintOpt (2x) - 57431: 85, // SubqueryOptimizerHintName (2x) - 57434: 86, // SubqueryStrategy (2x) - 57435: 87, // SupportedIndexLevelOptimizerHintName (2x) - 57436: 88, // SupportedTableLevelOptimizerHintName (2x) - 57437: 89, // TableOptimizerHintOpt (2x) - 57439: 90, // UnsupportedIndexLevelOptimizerHintName (2x) - 57440: 91, // UnsupportedTableLevelOptimizerHintName (2x) - 57414: 92, // HintQueryType (1x) - 57417: 93, // HintStorageTypeAndTableList (1x) - 57421: 94, // HintTrueOrFalse (1x) - 57423: 95, // IndexNameList (1x) - 57424: 96, // IndexNameListOpt (1x) - 57427: 97, // OptimizerHintList (1x) - 57429: 98, // Start (1x) - 57432: 99, // SubqueryStrategies (1x) - 57433: 100, // SubqueryStrategiesOpt (1x) - 57438: 101, // UnitOfBytes (1x) - 57441: 102, // Value (1x) - 57410: 103, // $default (0x) - 57345: 104, // error (0x) + 41: 0, // ')' (120x) + 44: 1, // ',' (110x) + 57376: 2, // hintAggToCop (110x) + 57389: 3, // hintBCJoin (110x) + 57390: 4, // hintBCJoinPreferLocal (110x) + 57354: 5, // hintBKA (110x) + 57356: 6, // hintBNL (110x) + 57378: 7, // hintHashAgg (110x) + 57358: 8, // hintHashJoin (110x) + 57379: 9, // hintIgnoreIndex (110x) + 57377: 10, // hintIgnorePlanCache (110x) + 57362: 11, // hintIndexMerge (110x) + 57380: 12, // hintInlHashJoin (110x) + 57381: 13, // hintInlJoin (110x) + 57382: 14, // hintInlMergeJoin (110x) + 57350: 15, // hintJoinFixedOrder (110x) + 57351: 16, // hintJoinOrder (110x) + 57352: 17, // hintJoinPrefix (110x) + 57353: 18, // hintJoinSuffix (110x) + 57372: 19, // hintMaxExecutionTime (110x) + 57383: 20, // hintMemoryQuota (110x) + 57360: 21, // hintMerge (110x) + 57364: 22, // hintMRR (110x) + 57355: 23, // hintNoBKA (110x) + 57357: 24, // hintNoBNL (110x) + 57359: 25, // hintNoHashJoin (110x) + 57366: 26, // hintNoICP (110x) + 57363: 27, // hintNoIndexMerge (110x) + 57361: 28, // hintNoMerge (110x) + 57365: 29, // hintNoMRR (110x) + 57367: 30, // hintNoRangeOptimization (110x) + 57371: 31, // hintNoSemijoin (110x) + 57369: 32, // hintNoSkipScan (110x) + 57384: 33, // hintNoSwapJoinInputs (110x) + 57375: 34, // hintQBName (110x) + 57385: 35, // hintQueryType (110x) + 57386: 36, // hintReadConsistentReplica (110x) + 57387: 37, // hintReadFromStorage (110x) + 57374: 38, // hintResourceGroup (110x) + 57370: 39, // hintSemijoin (110x) + 57373: 40, // hintSetVar (110x) + 57368: 41, // hintSkipScan (110x) + 57388: 42, // hintSMJoin (110x) + 57391: 43, // hintStreamAgg (110x) + 57392: 44, // hintSwapJoinInputs (110x) + 57397: 45, // hintTimeRange (110x) + 57398: 46, // hintUseCascades (110x) + 57394: 47, // hintUseIndex (110x) + 57393: 48, // hintUseIndexMerge (110x) + 57395: 49, // hintUsePlanCache (110x) + 57396: 50, // hintUseToja (110x) + 57407: 51, // hintDupsWeedOut (89x) + 57408: 52, // hintFirstMatch (89x) + 57409: 53, // hintLooseScan (89x) + 57410: 54, // hintMaterialization (89x) + 57402: 55, // hintTiFlash (89x) + 57401: 56, // hintTiKV (89x) + 57403: 57, // hintFalse (88x) + 57399: 58, // hintOLAP (88x) + 57400: 59, // hintOLTP (88x) + 57404: 60, // hintTrue (88x) + 57406: 61, // hintGB (87x) + 57405: 62, // hintMB (87x) + 57347: 63, // hintIdentifier (86x) + 57348: 64, // hintSingleAtIdentifier (78x) + 93: 65, // ']' (70x) + 46: 66, // '.' (63x) + 61: 67, // '=' (63x) + 40: 68, // '(' (57x) + 57344: 69, // $end (23x) + 57429: 70, // QueryBlockOpt (16x) + 57423: 71, // Identifier (11x) + 57346: 72, // hintIntLit (6x) + 57349: 73, // hintStringLit (5x) + 57419: 74, // HintTable (4x) + 57420: 75, // HintTableList (4x) + 91: 76, // '[' (3x) + 57413: 77, // CommaOpt (3x) + 57412: 78, // BooleanHintName (2x) + 57414: 79, // HintIndexList (2x) + 57416: 80, // HintStorageType (2x) + 57417: 81, // HintStorageTypeAndTable (2x) + 57421: 82, // HintTableListOpt (2x) + 57426: 83, // JoinOrderOptimizerHintName (2x) + 57427: 84, // NullaryHintName (2x) + 57431: 85, // StorageOptimizerHintOpt (2x) + 57432: 86, // SubqueryOptimizerHintName (2x) + 57435: 87, // SubqueryStrategy (2x) + 57436: 88, // SupportedIndexLevelOptimizerHintName (2x) + 57437: 89, // SupportedTableLevelOptimizerHintName (2x) + 57438: 90, // TableOptimizerHintOpt (2x) + 57440: 91, // UnsupportedIndexLevelOptimizerHintName (2x) + 57441: 92, // UnsupportedTableLevelOptimizerHintName (2x) + 57415: 93, // HintQueryType (1x) + 57418: 94, // HintStorageTypeAndTableList (1x) + 57422: 95, // HintTrueOrFalse (1x) + 57424: 96, // IndexNameList (1x) + 57425: 97, // IndexNameListOpt (1x) + 57428: 98, // OptimizerHintList (1x) + 57430: 99, // Start (1x) + 57433: 100, // SubqueryStrategies (1x) + 57434: 101, // SubqueryStrategiesOpt (1x) + 57439: 102, // UnitOfBytes (1x) + 57442: 103, // Value (1x) + 57411: 104, // $default (0x) + 57345: 105, // error (0x) } yyhintSymNames = []string{ @@ -225,6 +227,7 @@ var ( "','", "hintAggToCop", "hintBCJoin", + "hintBCJoinPreferLocal", "hintBKA", "hintBNL", "hintHashAgg", @@ -330,60 +333,76 @@ var ( yyhintReductions = []struct{ xsym, components int }{ {0, 1}, + {99, 1}, {98, 1}, - {97, 1}, - {97, 3}, - {97, 1}, - {97, 3}, - {89, 4}, - {89, 4}, - {89, 4}, - {89, 4}, - {89, 4}, - {89, 4}, - {89, 5}, - {89, 5}, - {89, 6}, - {89, 4}, - {89, 4}, - {89, 6}, - {89, 6}, - {89, 5}, - {89, 4}, - {89, 5}, - {84, 5}, - {93, 1}, - {93, 3}, - {80, 4}, - {69, 0}, - {69, 1}, - {76, 0}, - {76, 1}, - {81, 1}, - {81, 1}, + {98, 3}, + {98, 1}, + {98, 3}, + {90, 4}, + {90, 4}, + {90, 4}, + {90, 4}, + {90, 4}, + {90, 4}, + {90, 5}, + {90, 5}, + {90, 6}, + {90, 4}, + {90, 4}, + {90, 6}, + {90, 6}, + {90, 5}, + {90, 4}, + {90, 5}, + {85, 5}, + {94, 1}, + {94, 3}, + {81, 4}, + {70, 0}, + {70, 1}, + {77, 0}, + {77, 1}, + {82, 1}, + {82, 1}, + {75, 2}, + {75, 3}, {74, 2}, - {74, 3}, - {73, 2}, - {73, 4}, - {78, 4}, - {96, 0}, + {74, 4}, + {79, 4}, + {97, 0}, + {97, 1}, {96, 1}, - {95, 1}, - {95, 3}, - {100, 0}, + {96, 3}, + {101, 0}, + {101, 1}, {100, 1}, - {99, 1}, - {99, 3}, + {100, 3}, + {103, 1}, + {103, 1}, + {103, 1}, {102, 1}, {102, 1}, - {102, 1}, - {101, 1}, - {101, 1}, - {94, 1}, - {94, 1}, - {82, 1}, - {82, 1}, - {82, 1}, + {95, 1}, + {95, 1}, + {83, 1}, + {83, 1}, + {83, 1}, + {92, 1}, + {92, 1}, + {92, 1}, + {92, 1}, + {92, 1}, + {92, 1}, + {92, 1}, + {89, 1}, + {89, 1}, + {89, 1}, + {89, 1}, + {89, 1}, + {89, 1}, + {89, 1}, + {89, 1}, + {89, 1}, {91, 1}, {91, 1}, {91, 1}, @@ -394,387 +413,376 @@ var ( {88, 1}, {88, 1}, {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {88, 1}, - {90, 1}, - {90, 1}, - {90, 1}, - {90, 1}, - {90, 1}, - {90, 1}, - {90, 1}, + {86, 1}, + {86, 1}, {87, 1}, {87, 1}, {87, 1}, - {85, 1}, - {85, 1}, - {86, 1}, - {86, 1}, - {86, 1}, - {86, 1}, - {77, 1}, - {77, 1}, - {83, 1}, - {83, 1}, - {83, 1}, - {83, 1}, - {83, 1}, - {83, 1}, - {83, 1}, - {92, 1}, - {92, 1}, - {79, 1}, - {79, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, - {70, 1}, + {87, 1}, + {78, 1}, + {78, 1}, + {84, 1}, + {84, 1}, + {84, 1}, + {84, 1}, + {84, 1}, + {84, 1}, + {84, 1}, + {93, 1}, + {93, 1}, + {80, 1}, + {80, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, + {71, 1}, } yyhintXErrors = map[yyhintXError]string{} - yyhintParseTab = [234][]uint16{ + yyhintParseTab = [236][]uint16{ // 0 - {2: 217, 193, 185, 187, 215, 199, 208, 220, 200, 195, 194, 198, 165, 182, 183, 184, 172, 176, 190, 201, 186, 188, 189, 203, 218, 191, 202, 204, 211, 206, 197, 175, 180, 219, 181, 174, 210, 173, 205, 192, 216, 196, 177, 213, 207, 209, 214, 212, 77: 178, 82: 166, 179, 164, 171, 87: 170, 168, 163, 169, 167, 97: 162, 161}, - {68: 160}, - {1: 323, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 68: 159, 76: 391}, - {1: 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 68: 158}, - {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 68: 156}, + {2: 220, 195, 196, 187, 189, 218, 202, 211, 223, 203, 198, 197, 201, 167, 184, 185, 186, 174, 178, 192, 204, 188, 190, 191, 206, 221, 193, 205, 207, 214, 209, 200, 177, 182, 222, 183, 176, 213, 175, 208, 194, 219, 199, 179, 216, 210, 212, 217, 215, 78: 180, 83: 168, 181, 166, 173, 88: 172, 170, 165, 171, 169, 98: 164, 163}, + {69: 162}, + {1: 327, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 69: 161, 77: 395}, + {1: 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 69: 160}, + {1: 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 69: 158}, // 5 - {67: 388}, - {67: 385}, - {67: 382}, - {67: 377}, - {67: 374}, + {68: 392}, + {68: 389}, + {68: 386}, + {68: 381}, + {68: 378}, // 10 - {67: 363}, - {67: 351}, - {67: 347}, - {67: 339}, - {67: 336}, + {68: 367}, + {68: 355}, + {68: 351}, + {68: 343}, + {68: 340}, // 15 - {67: 333}, - {67: 326}, - {67: 320}, - {67: 314}, - {67: 311}, + {68: 337}, + {68: 330}, + {68: 324}, + {68: 318}, + {68: 315}, // 20 - {67: 305}, - {67: 221}, - {67: 108}, - {67: 107}, - {67: 106}, + {68: 309}, + {68: 224}, + {68: 110}, + {68: 109}, + {68: 108}, // 25 - {67: 105}, - {67: 104}, - {67: 103}, - {67: 102}, - {67: 101}, + {68: 107}, + {68: 106}, + {68: 105}, + {68: 104}, + {68: 103}, // 30 - {67: 100}, - {67: 99}, - {67: 98}, - {67: 97}, - {67: 96}, + {68: 102}, + {68: 101}, + {68: 100}, + {68: 99}, + {68: 98}, // 35 - {67: 95}, - {67: 94}, - {67: 93}, - {67: 92}, - {67: 91}, + {68: 97}, + {68: 96}, + {68: 95}, + {68: 94}, + {68: 93}, // 40 - {67: 90}, - {67: 89}, - {67: 88}, - {67: 87}, - {67: 86}, + {68: 92}, + {68: 91}, + {68: 90}, + {68: 89}, + {68: 88}, // 45 - {67: 85}, - {67: 84}, - {67: 83}, - {67: 82}, - {67: 81}, + {68: 87}, + {68: 86}, + {68: 85}, + {68: 84}, + {68: 83}, // 50 - {67: 80}, - {67: 79}, - {67: 74}, - {67: 73}, - {67: 72}, + {68: 82}, + {68: 81}, + {68: 80}, + {68: 75}, + {68: 74}, // 55 - {67: 71}, - {67: 70}, - {67: 69}, - {67: 68}, - {67: 67}, + {68: 73}, + {68: 72}, + {68: 71}, + {68: 70}, + {68: 69}, // 60 - {67: 66}, - {54: 134, 134, 63: 223, 69: 222}, - {54: 228, 227, 79: 226, 225, 93: 224}, - {133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 64: 133, 71: 133}, - {302, 303}, + {68: 68}, + {68: 67}, + {55: 136, 136, 64: 226, 70: 225}, + {55: 231, 230, 80: 229, 228, 94: 227}, + {135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 65: 135, 72: 135}, // 65 - {137, 137}, - {75: 229}, - {75: 63}, - {75: 62}, - {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 231, 74: 230}, + {306, 307}, + {139, 139}, + {76: 232}, + {76: 64}, + {76: 63}, // 70 - {1: 300, 64: 299}, - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 232}, - {128, 128, 64: 128}, - {134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 134, 296, 69: 295}, - {61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61}, + {2: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 226, 70: 234, 75: 233}, + {1: 304, 65: 303}, + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 236, 74: 235}, + {130, 130, 65: 130}, + {136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 226, 136, 300, 70: 299}, // 75 - {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, - {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, - {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, - {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, - {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, + {62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62}, + {61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61}, + {60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60}, + {59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59}, + {58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58}, // 80 - {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, - {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, - {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, - {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, - {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, + {57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57}, + {56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56}, + {55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55}, + {54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54}, + {53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53}, // 85 - {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, - {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, - {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, - {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, - {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, + {52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52}, + {51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51}, + {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}, + {49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49}, + {48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48}, // 90 - {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, - {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, - {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, - {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, - {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, + {47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47}, + {46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46}, + {45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45}, + {44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44}, + {43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43}, // 95 - {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, - {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, - {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, - {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, - {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, + {42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}, + {41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41}, + {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40}, + {39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39}, + {38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38}, // 100 - {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, - {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, - {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, - {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, - {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, + {37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37}, + {36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36}, + {35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35}, + {34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}, + {33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33}, // 105 - {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, - {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, - {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, - {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, - {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, + {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32}, + {31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31}, + {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, + {29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}, + {28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, // 110 - {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, - {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, - {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, - {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, - {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, + {27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, + {26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26}, + {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25}, + {24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24}, + {23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23}, // 115 - {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, - {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, - {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, - {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, - {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, + {22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22}, + {21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21}, + {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20}, + {19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}, + {18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18}, // 120 - {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, - {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, - {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, - {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, - {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, + {17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17}, + {16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}, + {15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}, + {14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14}, + {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, // 125 - {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, - {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, - {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, - {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, - {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, + {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12}, + {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}, + {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}, + {9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, + {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, // 130 - {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, - {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, - {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7}, + {6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}, + {5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}, + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, // 135 - {126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 64: 126}, - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 297}, - {134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 134, 69: 298}, - {125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 64: 125}, - {135, 135}, + {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + {128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 65: 128}, + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 301}, + {136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 226, 136, 70: 302}, // 140 - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 301}, - {127, 127, 64: 127}, - {1: 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 68: 138}, - {54: 228, 227, 79: 226, 304}, - {136, 136}, + {127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 65: 127}, + {137, 137}, + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 236, 74: 305}, + {129, 129, 65: 129}, + {1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 69: 140}, // 145 - {57: 134, 134, 63: 223, 69: 306}, - {57: 308, 309, 92: 307}, - {310}, - {65}, - {64}, + {55: 231, 230, 80: 229, 308}, + {138, 138}, + {58: 136, 136, 64: 226, 70: 310}, + {58: 312, 313, 93: 311}, + {314}, // 150 - {1: 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 68: 139}, - {134, 63: 223, 69: 312}, - {313}, - {1: 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 68: 140}, - {56: 134, 59: 134, 63: 223, 69: 315}, + {66}, + {65}, + {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 69: 141}, + {136, 64: 226, 70: 316}, + {317}, // 155 - {56: 318, 59: 317, 94: 316}, - {319}, - {110}, - {109}, - {1: 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 68: 141}, + {1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 69: 142}, + {57: 136, 60: 136, 64: 226, 70: 319}, + {57: 322, 60: 321, 95: 320}, + {323}, + {112}, // 160 - {72: 321}, - {1: 323, 72: 132, 76: 322}, - {72: 324}, - {131, 2: 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 72: 131}, - {325}, + {111}, + {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 69: 143}, + {73: 325}, + {1: 327, 73: 134, 77: 326}, + {73: 328}, // 165 - {1: 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 68: 142}, - {63: 223, 69: 327, 71: 134}, - {71: 328}, - {60: 331, 330, 101: 329}, - {332}, + {133, 2: 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 73: 133}, + {329}, + {1: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 69: 144}, + {64: 226, 70: 331, 72: 136}, + {72: 332}, // 170 - {112}, - {111}, - {1: 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 68: 143}, - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 334}, - {335}, - // 175 - {1: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 68: 144}, - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 337}, - {338}, - {1: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 68: 145}, - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 340}, - // 180 - {66: 341}, - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 344, 345, 343, 102: 342}, - {346}, - {115}, + {61: 335, 334, 102: 333}, + {336}, {114}, - // 185 {113}, - {1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 68: 146}, - {63: 223, 69: 348, 71: 134}, - {71: 349}, + {1: 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 69: 145}, + // 175 + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 338}, + {339}, + {1: 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 69: 146}, + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 341}, + {342}, + // 180 + {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 69: 147}, + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 344}, + {67: 345}, + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 348, 349, 347, 103: 346}, {350}, + // 185 + {117}, + {116}, + {115}, + {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 69: 148}, + {64: 226, 70: 352, 72: 136}, // 190 - {1: 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 68: 147}, - {134, 50: 134, 134, 134, 134, 63: 223, 69: 352}, - {119, 50: 356, 357, 358, 359, 86: 355, 99: 354, 353}, - {362}, - {118, 360}, + {72: 353}, + {354}, + {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 69: 149}, + {136, 51: 136, 136, 136, 136, 64: 226, 70: 356}, + {121, 51: 360, 361, 362, 363, 87: 359, 100: 358, 357}, // 195 - {117, 117}, + {366}, + {120, 364}, + {119, 119}, + {79, 79}, {78, 78}, + // 200 {77, 77}, {76, 76}, - {75, 75}, - // 200 - {50: 356, 357, 358, 359, 86: 361}, - {116, 116}, - {1: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 68: 148}, - {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 365, 78: 364}, - {373}, + {51: 360, 361, 362, 363, 87: 365}, + {118, 118}, + {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 69: 150}, // 205 - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 366}, - {132, 323, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 76: 367}, - {123, 2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 370, 95: 369, 368}, - {124}, - {122, 371}, + {2: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 226, 70: 369, 79: 368}, + {377}, + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 236, 74: 370}, + {134, 327, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 77: 371}, + {125, 2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 374, 96: 373, 372}, // 210 - {121, 121}, - {2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 372}, - {120, 120}, - {1: 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 68: 149}, - {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 365, 78: 375}, + {126}, + {124, 375}, + {123, 123}, + {2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 376}, + {122, 122}, // 215 - {376}, - {1: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 68: 150}, - {134, 2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 380, 74: 379, 81: 378}, - {381}, - {130, 300}, + {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 69: 151}, + {2: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 226, 70: 369, 79: 379}, + {380}, + {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 69: 152}, + {136, 2: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 226, 70: 384, 75: 383, 82: 382}, // 220 - {129, 2: 261, 274, 239, 241, 263, 243, 264, 262, 247, 265, 266, 267, 235, 236, 237, 238, 257, 268, 245, 249, 240, 242, 244, 251, 248, 246, 250, 252, 256, 254, 269, 260, 270, 271, 272, 259, 255, 258, 253, 273, 275, 276, 281, 282, 278, 277, 279, 280, 291, 292, 293, 294, 286, 285, 287, 283, 284, 288, 290, 289, 234, 70: 233, 73: 232}, - {1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 68: 151}, - {134, 2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 380, 74: 379, 81: 383}, - {384}, - {1: 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 68: 152}, + {385}, + {132, 304}, + {131, 2: 264, 277, 278, 242, 244, 266, 246, 267, 265, 250, 268, 269, 270, 238, 239, 240, 241, 260, 271, 248, 252, 243, 245, 247, 254, 251, 249, 253, 255, 259, 257, 272, 263, 273, 274, 275, 262, 258, 261, 256, 276, 279, 280, 285, 286, 282, 281, 283, 284, 295, 296, 297, 298, 290, 289, 291, 287, 288, 292, 294, 293, 237, 71: 236, 74: 235}, + {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 69: 153}, + {136, 2: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 226, 70: 384, 75: 383, 82: 387}, // 225 - {2: 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 223, 69: 231, 74: 386}, - {387, 300}, - {1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 68: 153}, - {134, 63: 223, 69: 389}, - {390}, + {388}, + {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 69: 154}, + {2: 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 226, 70: 234, 75: 390}, + {391, 304}, + {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 69: 155}, // 230 - {1: 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 68: 154}, - {2: 217, 193, 185, 187, 215, 199, 208, 220, 200, 195, 194, 198, 165, 182, 183, 184, 172, 176, 190, 201, 186, 188, 189, 203, 218, 191, 202, 204, 211, 206, 197, 175, 180, 219, 181, 174, 210, 173, 205, 192, 216, 196, 177, 213, 207, 209, 214, 212, 77: 178, 82: 166, 179, 393, 171, 87: 170, 168, 392, 169, 167}, - {1: 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 68: 157}, - {1: 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 68: 155}, + {136, 64: 226, 70: 393}, + {394}, + {1: 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 69: 156}, + {2: 220, 195, 196, 187, 189, 218, 202, 211, 223, 203, 198, 197, 201, 167, 184, 185, 186, 174, 178, 192, 204, 188, 190, 191, 206, 221, 193, 205, 207, 214, 209, 200, 177, 182, 222, 183, 176, 213, 175, 208, 194, 219, 199, 179, 216, 210, 212, 217, 215, 78: 180, 83: 168, 181, 397, 173, 88: 172, 170, 396, 171, 169}, + {1: 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 69: 159}, + // 235 + {1: 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 69: 157}, } ) @@ -813,7 +821,7 @@ func yyhintlex1(yylex yyhintLexer, lval *yyhintSymType) (n int) { } func yyhintParse(yylex yyhintLexer, parser *hintParser) int { - const yyError = 104 + const yyError = 105 yyEx, _ := yylex.(yyhintLexerEx) var yyn int diff --git a/hintparser.y b/hintparser.y index 20a7ae876..a292341be 100644 --- a/hintparser.y +++ b/hintparser.y @@ -91,6 +91,7 @@ import ( hintReadFromStorage "READ_FROM_STORAGE" hintSMJoin "MERGE_JOIN" hintBCJoin "BC_JOIN" + hintBCJoinPreferLocal "BC_JOIN_PREFER_LOCAL" hintStreamAgg "STREAM_AGG" hintSwapJoinInputs "SWAP_JOIN_INPUTS" hintUseIndexMerge "USE_INDEX_MERGE" @@ -487,6 +488,7 @@ UnsupportedTableLevelOptimizerHintName: SupportedTableLevelOptimizerHintName: "MERGE_JOIN" | "BC_JOIN" +| "BC_JOIN_PREFER_LOCAL" | "INL_JOIN" | "INL_HASH_JOIN" | "SWAP_JOIN_INPUTS" @@ -584,6 +586,7 @@ Identifier: | "READ_FROM_STORAGE" | "MERGE_JOIN" | "BC_JOIN" +| "BC_JOIN_PREFER_LOCAL" | "STREAM_AGG" | "SWAP_JOIN_INPUTS" | "USE_INDEX_MERGE" diff --git a/misc.go b/misc.go index 1f5563163..516f124f6 100644 --- a/misc.go +++ b/misc.go @@ -839,6 +839,7 @@ var hintTokenMap = map[string]int{ "READ_CONSISTENT_REPLICA": hintReadConsistentReplica, "READ_FROM_STORAGE": hintReadFromStorage, "BC_JOIN": hintBCJoin, + "BC_JOIN_PREFER_LOCAL": hintBCJoinPreferLocal, "MERGE_JOIN": hintSMJoin, "STREAM_AGG": hintStreamAgg, "SWAP_JOIN_INPUTS": hintSwapJoinInputs, diff --git a/parser_test.go b/parser_test.go index c5eb1f98b..6881f0830 100644 --- a/parser_test.go +++ b/parser_test.go @@ -3162,12 +3162,12 @@ func (s *testParserSuite) TestOptimizerHints(c *C) { c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") // TEST BC_JOIN - stmt, _, err = parser.Parse("select /*+ BC_JOIN(t1, T2), bc_join(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") + stmt, _, err = parser.Parse("select /*+ BC_JOIN(t1, T2), bc_join(t3, t4), BC_JOIN_PREFER_LOCAL(t2) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") c.Assert(err, IsNil) selectStmt = stmt[0].(*ast.SelectStmt) hints = selectStmt.TableHints - c.Assert(hints, HasLen, 2) + c.Assert(hints, HasLen, 3) c.Assert(hints[0].HintName.L, Equals, "bc_join") c.Assert(hints[0].Tables, HasLen, 2) c.Assert(hints[0].Tables[0].TableName.L, Equals, "t1") @@ -3178,6 +3178,10 @@ func (s *testParserSuite) TestOptimizerHints(c *C) { c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") + c.Assert(hints[2].HintName.L, Equals, "bc_join_prefer_local") + c.Assert(hints[2].Tables, HasLen, 1) + c.Assert(hints[2].Tables[0].TableName.L, Equals, "t2") + // Test TIDB_INLJ stmt, _, err = parser.Parse("select /*+ TIDB_INLJ(t1, T2), tidb_inlj(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") c.Assert(err, IsNil) From 73e0eaaee304f849da51bcc3056a67c6802f89c7 Mon Sep 17 00:00:00 2001 From: ichn-hu Date: Mon, 11 May 2020 12:13:37 +0800 Subject: [PATCH 11/12] use bcj_local --- ast/misc.go | 2 +- hintparser.y | 6 +++--- misc.go | 2 +- parser_test.go | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/ast/misc.go b/ast/misc.go index b93fbe95e..bdff8c887 100755 --- a/ast/misc.go +++ b/ast/misc.go @@ -2539,7 +2539,7 @@ func (n *TableOptimizerHint) Restore(ctx *format.RestoreCtx) error { switch n.HintName.L { case "max_execution_time": ctx.WritePlainf("%d", n.HintData.(uint64)) - case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "merge_join", "inl_join", "bc_join", "bc_join_prefer_local", "tidb_bcj": + case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "merge_join", "inl_join", "bc_join", "bcj_local", "tidb_bcj": for i, table := range n.Tables { if i != 0 { ctx.WritePlain(", ") diff --git a/hintparser.y b/hintparser.y index a292341be..a161abf19 100644 --- a/hintparser.y +++ b/hintparser.y @@ -91,7 +91,7 @@ import ( hintReadFromStorage "READ_FROM_STORAGE" hintSMJoin "MERGE_JOIN" hintBCJoin "BC_JOIN" - hintBCJoinPreferLocal "BC_JOIN_PREFER_LOCAL" + hintBCJoinPreferLocal "BCJ_LOCAL" hintStreamAgg "STREAM_AGG" hintSwapJoinInputs "SWAP_JOIN_INPUTS" hintUseIndexMerge "USE_INDEX_MERGE" @@ -488,7 +488,7 @@ UnsupportedTableLevelOptimizerHintName: SupportedTableLevelOptimizerHintName: "MERGE_JOIN" | "BC_JOIN" -| "BC_JOIN_PREFER_LOCAL" +| "BCJ_LOCAL" | "INL_JOIN" | "INL_HASH_JOIN" | "SWAP_JOIN_INPUTS" @@ -586,7 +586,7 @@ Identifier: | "READ_FROM_STORAGE" | "MERGE_JOIN" | "BC_JOIN" -| "BC_JOIN_PREFER_LOCAL" +| "BCJ_LOCAL" | "STREAM_AGG" | "SWAP_JOIN_INPUTS" | "USE_INDEX_MERGE" diff --git a/misc.go b/misc.go index 516f124f6..4a864bb43 100644 --- a/misc.go +++ b/misc.go @@ -839,7 +839,7 @@ var hintTokenMap = map[string]int{ "READ_CONSISTENT_REPLICA": hintReadConsistentReplica, "READ_FROM_STORAGE": hintReadFromStorage, "BC_JOIN": hintBCJoin, - "BC_JOIN_PREFER_LOCAL": hintBCJoinPreferLocal, + "BCJ_LOCAL": hintBCJoinPreferLocal, "MERGE_JOIN": hintSMJoin, "STREAM_AGG": hintStreamAgg, "SWAP_JOIN_INPUTS": hintSwapJoinInputs, diff --git a/parser_test.go b/parser_test.go index 6881f0830..7d1b7b4a5 100644 --- a/parser_test.go +++ b/parser_test.go @@ -3162,7 +3162,7 @@ func (s *testParserSuite) TestOptimizerHints(c *C) { c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") // TEST BC_JOIN - stmt, _, err = parser.Parse("select /*+ BC_JOIN(t1, T2), bc_join(t3, t4), BC_JOIN_PREFER_LOCAL(t2) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") + stmt, _, err = parser.Parse("select /*+ BC_JOIN(t1, T2), bc_join(t3, t4), BCJ_LOCAL(t2) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") c.Assert(err, IsNil) selectStmt = stmt[0].(*ast.SelectStmt) @@ -3178,7 +3178,7 @@ func (s *testParserSuite) TestOptimizerHints(c *C) { c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") - c.Assert(hints[2].HintName.L, Equals, "bc_join_prefer_local") + c.Assert(hints[2].HintName.L, Equals, "bcj_local") c.Assert(hints[2].Tables, HasLen, 1) c.Assert(hints[2].Tables[0].TableName.L, Equals, "t2") From 444a49f9c68e7ce4e952e818d2fcdbceb70be719 Mon Sep 17 00:00:00 2001 From: Han Fei Date: Wed, 17 Jun 2020 16:24:22 +0800 Subject: [PATCH 12/12] change bc_join to broadcast_join --- ast/misc.go | 2 +- ast/misc_test.go | 3 +-- hintparser.y | 12 ++++++------ misc.go | 5 ++--- parser_test.go | 27 +++++---------------------- 5 files changed, 15 insertions(+), 34 deletions(-) diff --git a/ast/misc.go b/ast/misc.go index 9ae1be7c1..33974c96e 100755 --- a/ast/misc.go +++ b/ast/misc.go @@ -2597,7 +2597,7 @@ func (n *TableOptimizerHint) Restore(ctx *format.RestoreCtx) error { ctx.WritePlainf("%d", n.HintData.(uint64)) case "nth_plan": ctx.WritePlainf("%d", n.HintData.(int64)) - case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "merge_join", "inl_join", "bc_join", "bcj_local", "tidb_bcj": + case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "merge_join", "inl_join", "broadcast_join", "broadcast_join_local": for i, table := range n.Tables { if i != 0 { ctx.WritePlain(", ") diff --git a/ast/misc_test.go b/ast/misc_test.go index 2234c82d7..7d5dde881 100644 --- a/ast/misc_test.go +++ b/ast/misc_test.go @@ -231,9 +231,8 @@ func (ts *testMiscSuite) TestTableOptimizerHintRestore(c *C) { {"TIDB_HJ(t1,t2)", "TIDB_HJ(`t1`, `t2`)"}, {"TIDB_HJ(@sel1 t1,t2)", "TIDB_HJ(@`sel1` `t1`, `t2`)"}, {"TIDB_HJ(t1@sel1,t2@sel2)", "TIDB_HJ(`t1`@`sel1`, `t2`@`sel2`)"}, - {"TIDB_BCJ(t1,t2)", "TIDB_BCJ(`t1`, `t2`)"}, {"MERGE_JOIN(t1,t2)", "MERGE_JOIN(`t1`, `t2`)"}, - {"BC_JOIN(t1,t2)", "BC_JOIN(`t1`, `t2`)"}, + {"BROADCAST_JOIN(t1,t2)", "BROADCAST_JOIN(`t1`, `t2`)"}, {"INL_JOIN(t1,t2)", "INL_JOIN(`t1`, `t2`)"}, {"HASH_JOIN(t1,t2)", "HASH_JOIN(`t1`, `t2`)"}, {"MAX_EXECUTION_TIME(3000)", "MAX_EXECUTION_TIME(3000)"}, diff --git a/hintparser.y b/hintparser.y index f207e7185..dcd3e4ae9 100644 --- a/hintparser.y +++ b/hintparser.y @@ -91,8 +91,8 @@ import ( hintReadConsistentReplica "READ_CONSISTENT_REPLICA" hintReadFromStorage "READ_FROM_STORAGE" hintSMJoin "MERGE_JOIN" - hintBCJoin "BC_JOIN" - hintBCJoinPreferLocal "BCJ_LOCAL" + hintBCJoin "BROADCAST_JOIN" + hintBCJoinPreferLocal "BROADCAST_JOIN_LOCAL" hintStreamAgg "STREAM_AGG" hintSwapJoinInputs "SWAP_JOIN_INPUTS" hintUseIndexMerge "USE_INDEX_MERGE" @@ -524,8 +524,8 @@ UnsupportedTableLevelOptimizerHintName: SupportedTableLevelOptimizerHintName: "MERGE_JOIN" -| "BC_JOIN" -| "BCJ_LOCAL" +| "BROADCAST_JOIN" +| "BROADCAST_JOIN_LOCAL" | "INL_JOIN" | "INL_HASH_JOIN" | "SWAP_JOIN_INPUTS" @@ -622,8 +622,8 @@ Identifier: | "READ_CONSISTENT_REPLICA" | "READ_FROM_STORAGE" | "MERGE_JOIN" -| "BC_JOIN" -| "BCJ_LOCAL" +| "BROADCAST_JOIN" +| "BROADCAST_JOIN_LOCAL" | "STREAM_AGG" | "SWAP_JOIN_INPUTS" | "USE_INDEX_MERGE" diff --git a/misc.go b/misc.go index 1b70ed570..e9829b390 100644 --- a/misc.go +++ b/misc.go @@ -847,8 +847,8 @@ var hintTokenMap = map[string]int{ "QUERY_TYPE": hintQueryType, "READ_CONSISTENT_REPLICA": hintReadConsistentReplica, "READ_FROM_STORAGE": hintReadFromStorage, - "BC_JOIN": hintBCJoin, - "BCJ_LOCAL": hintBCJoinPreferLocal, + "BROADCAST_JOIN": hintBCJoin, + "BROADCAST_JOIN_LOCAL": hintBCJoinPreferLocal, "MERGE_JOIN": hintSMJoin, "STREAM_AGG": hintStreamAgg, "SWAP_JOIN_INPUTS": hintSwapJoinInputs, @@ -864,7 +864,6 @@ var hintTokenMap = map[string]int{ "TIDB_HJ": hintHashJoin, "TIDB_INLJ": hintInlJoin, "TIDB_SMJ": hintSMJoin, - "TIDB_BCJ": hintBCJoin, // Other keywords "OLAP": hintOLAP, diff --git a/parser_test.go b/parser_test.go index e5b94353c..3a8278eab 100644 --- a/parser_test.go +++ b/parser_test.go @@ -3153,23 +3153,6 @@ func (s *testParserSuite) TestOptimizerHints(c *C) { c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") - // Test TIDB_BCJ - stmt, _, err = parser.Parse("select /*+ TIDB_BCJ(T1,t2), tidb_bcj(T3,t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") - c.Assert(err, IsNil) - selectStmt = stmt[0].(*ast.SelectStmt) - - hints = selectStmt.TableHints - c.Assert(hints, HasLen, 2) - c.Assert(hints[0].HintName.L, Equals, "tidb_bcj") - c.Assert(hints[0].Tables, HasLen, 2) - c.Assert(hints[0].Tables[0].TableName.L, Equals, "t1") - c.Assert(hints[0].Tables[1].TableName.L, Equals, "t2") - - c.Assert(hints[1].HintName.L, Equals, "tidb_bcj") - c.Assert(hints[1].Tables, HasLen, 2) - c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") - c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") - // Test MERGE_JOIN stmt, _, err = parser.Parse("select /*+ MERGE_JOIN(t1, T2), merge_join(t3, t4) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") c.Assert(err, IsNil) @@ -3187,24 +3170,24 @@ func (s *testParserSuite) TestOptimizerHints(c *C) { c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") - // TEST BC_JOIN - stmt, _, err = parser.Parse("select /*+ BC_JOIN(t1, T2), bc_join(t3, t4), BCJ_LOCAL(t2) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") + // TEST BROADCAST_JOIN + stmt, _, err = parser.Parse("select /*+ BROADCAST_JOIN(t1, T2), broadcast_join(t3, t4), BROADCAST_JOIN_LOCAL(t2) */ c1, c2 from t1, t2 where t1.c1 = t2.c1", "", "") c.Assert(err, IsNil) selectStmt = stmt[0].(*ast.SelectStmt) hints = selectStmt.TableHints c.Assert(hints, HasLen, 3) - c.Assert(hints[0].HintName.L, Equals, "bc_join") + c.Assert(hints[0].HintName.L, Equals, "broadcast_join") c.Assert(hints[0].Tables, HasLen, 2) c.Assert(hints[0].Tables[0].TableName.L, Equals, "t1") c.Assert(hints[0].Tables[1].TableName.L, Equals, "t2") - c.Assert(hints[1].HintName.L, Equals, "bc_join") + c.Assert(hints[1].HintName.L, Equals, "broadcast_join") c.Assert(hints[1].Tables, HasLen, 2) c.Assert(hints[1].Tables[0].TableName.L, Equals, "t3") c.Assert(hints[1].Tables[1].TableName.L, Equals, "t4") - c.Assert(hints[2].HintName.L, Equals, "bcj_local") + c.Assert(hints[2].HintName.L, Equals, "broadcast_join_local") c.Assert(hints[2].Tables, HasLen, 1) c.Assert(hints[2].Tables[0].TableName.L, Equals, "t2")