From 55b56af5faaa20ccae459b2d90c6121dc9b7fd34 Mon Sep 17 00:00:00 2001 From: klugier Date: Sat, 19 Sep 2020 23:48:16 +0000 Subject: [PATCH] Doc: Added table of contents to Assist++ parser directives article. git-svn-id: svn://ultimatepp.org/upp/trunk@15102 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- .../app.tpp/AssistParserDirectives_en-us.tpp | 153 ++++++++++-------- .../app.tpp/AssistParserDirectives_en-us.tppi | 23 +-- 2 files changed, 95 insertions(+), 81 deletions(-) diff --git a/uppsrc/ide/app.tpp/AssistParserDirectives_en-us.tpp b/uppsrc/ide/app.tpp/AssistParserDirectives_en-us.tpp index 9fbcee527..c8f02e26d 100644 --- a/uppsrc/ide/app.tpp/AssistParserDirectives_en-us.tpp +++ b/uppsrc/ide/app.tpp/AssistParserDirectives_en-us.tpp @@ -8,97 +8,110 @@ topic "Assist++ - C++ parser directives"; [l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param] [i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam] [b42;2 $$9,9#13035079074754324216151401829390:normal] -[b83;*4 $$10,11#07864147445237544204411237157677:title] +[H4;b83;*4 $$10,11#07864147445237544204411237157677:title] [b42;a42;ph2 $$11,11#45413000475342174754091244180557:text] [l321;t246;C@5;1 $$12,12#20902679421464641399138805415013:code] [a83;*R6 $$13,11#31310162474203024125188417583966:caption] [2 $$0,0#00000000000000000000000000000000:Default] [{_}%EN-US [s13; Assist`+`+ `- parser directives&] -[s10; 1. Introduction&] +[s10; Table of contents&] +[s0; &] +[s0; [^topic`:`/`/ide`/app`/AssistParserDirectives`_en`-us`#1^ 1. Introduction]&] +[s0; [^topic`:`/`/ide`/app`/AssistParserDirectives`_en`-us`#2^ 2. Handling +of source files, headers, macros and namespaces]&] +[s0; [^topic`:`/`/ide`/app`/AssistParserDirectives`_en`-us`#3^ 3. Macro +overrides, namespace macros]&] +[s0; [^topic`:`/`/ide`/app`/AssistParserDirectives`_en`-us`#4^ 4. Grounding +heuristics]&] +[s0; [^topic`:`/`/ide`/app`/AssistParserDirectives`_en`-us`#5^ 5. Assist`+`+ +C`+`+ parser directives]&] +[s0; &] +[s10;:1: 1. Introduction&] [s11; Assist`+`+ C`+`+ parser does not follow C/C`+`+ standards exactly, for performance and practical reasons. This documents provides information about deviations, heuristics and tricks that we use to make the machinery fast and highly error resistant.&] -[s10; 2. Handling of source files, headers, macros and namespaces&] +[s10;:2: 2. Handling of source files, headers, macros and namespaces&] [s11; The main difference between C`+`+ compiler and theide C`+`+ parser is that theide is handling any source file separately. This is an absolute performance requirement if global database is to be maintained while editing files.&] [s11; For this reason, declaration and definition must be be in single file. For example&] -[s11; [* File1.h]&] -[s12; struct Foo `{&] -[s12; &] -[s11; [* File2.h]&] -[s12; #include `"File1.h`"&] -[s12; -|int bar;&] -[s12; `};&] +[s11;l288; [* File1.h]&] +[s12;l288; struct Foo `{&] +[s12;l288; &] +[s11;l288; [* File2.h]&] +[s12;l288; #include `"File1.h`"&] +[s12;l288; -|int bar;&] +[s12;l288; `};&] [s11; is [*/ NOT] supported.&] [s11; Parser preprocessor rules:&] -[s11;i150;O0; All #if/#ifdef conditions are considered true. This -is useful e.g. when there is platform specific code `- parser -is then able to pick all variants. #else parts are excluded. +[s11;l160;i150;O0; All #if/#ifdef conditions are considered true. +This is useful e.g. when there is platform specific code `- +parser is then able to pick all variants. #else parts are excluded. For example&] -[s12; #ifdef PLATFORM`_WIN32&] -[s12; void CloseWindow(void `*handle) `{&] -[s12; ....&] -[s12; `}&] -[s12; #endif&] -[s12; #ifdef PLATFORM`_GTK&] -[s12; void CloseWindow(void `*handle) `{&] -[s12; .....&] -[s12; `}&] -[s12; #endif&] -[s11; both CloseWindow definitions will be in the codebase.&] -[s11;i150;O0; When expanding macro, last #define directive is used.&] -[s12; #define FOO 1&] -[s12; #define FOO 2&] -[s12; FOO&] -[s11; the last line will be expanded to `"2`".&] -[s11;i150;O0; #undef cancels the last definition of the same macro, -if it is defined in the same file. This is useful to handle special -defines used for handling name clashes when including external -libraries:&] -[s12; #define byte win32`_byte`_ // RpcNdr defines byte `-> class +[s12;l576; #ifdef PLATFORM`_WIN32&] +[s12;l576; void CloseWindow(void `*handle) `{&] +[s12;l576; ....&] +[s12;l576; `}&] +[s12;l576; #endif&] +[s12;l576; #ifdef PLATFORM`_GTK&] +[s12;l576; void CloseWindow(void `*handle) `{&] +[s12;l576; .....&] +[s12;l576; `}&] +[s12;l576; #endif&] +[s11;l288; both CloseWindow definitions will be in the codebase.&] +[s11;l160;i150;O0; When expanding macro, last #define directive is +used.&] +[s12;l576; #define FOO 1&] +[s12;l576; #define FOO 2&] +[s12;l576; FOO&] +[s11;l288; the last line will be expanded to `"2`".&] +[s11;l160;i150;O0; #undef cancels the last definition of the same +macro, if it is defined in the same file. This is useful to handle +special defines used for handling name clashes when including +external libraries:&] +[s12;l576; #define byte win32`_byte`_ // RpcNdr defines byte `-> class with Upp`::byte&] -[s12; #define CY win32`_CY`_&] -[s12; #include &] -[s12; #include &] -[s12; #undef byte&] -[s12; #undef CY&] -[s11;i150;O0; #include in file adds all macros that are (recursively) +[s12;l576; #define CY win32`_CY`_&] +[s12;l576; #include &] +[s12;l576; #include &] +[s12;l576; #undef byte&] +[s12;l576; #undef CY&] +[s11;l160;i150;O0; #include in file adds all macros that are (recursively) defined by included file and also all `"using namespace`" directives. It [* DOES NOT] use namespace block definitions, for example this abomination is not supported:&] -[s11; [* StartNamespace.h]&] -[s12; namespace MyNamespace `{&] -[s12; &] -[s11; [* EndNamespace.h]&] -[s12; `};&] -[s12; &] -[s11; [* File.cpp]&] -[s12; #include `"StartNamespace.h`"&] -[s12; void Foo();&] -[s12; #include `"EndNamespace.h`"&] -[s11; is [*/ NOT] supported.&] -[s11;i150;O0; However, if file gets into the project through #include, -all macros, usings and namespace block definitions are correctly -included/used. Consider&] -[s11; [* MasterHeader.h]&] -[s12; #define FOO 1&] -[s12; using namespace Bar;&] -[s12; namespace Foo `{&] -[s12; #include `"SubHeader.h`"&] -[s12; `};&] -[s12; &] -[s11; [* SubHeader.h]&] -[s12; &] -[s12; void Fn() `{ return FOO; `}&] -[s12; &] -[s11; This [* IS] supported: Fn will be in Foo namespace and will return -1.&] -[s10; 3. Macro overrides, namespace macros&] +[s11;l576; [* StartNamespace.h]&] +[s12;l576; namespace MyNamespace `{&] +[s12;l576; &] +[s11;l576; [* EndNamespace.h]&] +[s12;l576; `};&] +[s12;l576; &] +[s11;l576; [* File.cpp]&] +[s12;l576; #include `"StartNamespace.h`"&] +[s12;l576; void Foo();&] +[s12;l576; #include `"EndNamespace.h`"&] +[s11;l320;~~~192; is [*/ NOT] supported.&] +[s11;l160;i150;O0; However, if file gets into the project through +#include, all macros, usings and namespace block definitions +are correctly included/used. Consider&] +[s11;l576; [* MasterHeader.h]&] +[s12;l576; #define FOO 1&] +[s12;l576; using namespace Bar;&] +[s12;l576; namespace Foo `{&] +[s12;l576; #include `"SubHeader.h`"&] +[s12;l576; `};&] +[s12;l576; &] +[s11;l576; [* SubHeader.h]&] +[s12;l576; &] +[s12;l576; void Fn() `{ return FOO; `}&] +[s12;l576; &] +[s11;l352; This [* IS] supported: Fn will be in Foo namespace and will +return 1.&] +[s10;:3: 3. Macro overrides, namespace macros&] [s11; It is possible to tell TheIDE overriding definition of specific macros in special .defs files. One global.defs file resides in TheIDE configuration and is accessible through `"`" package. @@ -127,7 +140,7 @@ meaning of NAMESPACE`_UPP/END`_UPP`_NAMESPACE when extracting macros from File.h). The solution is simple, putting those #defines into .defs file fixes the issue, as such macros are detected by special code and used when handling File.h.&] -[s10; 4. Grounding heuristics&] +[s10;:4: 4. Grounding heuristics&] [s11; It is a good idea to make parser highly resistant to bugs, including code that it does not understand. For this reason parser is using somewhat strange but very effective simple heuristics: If a line @@ -146,7 +159,7 @@ on `'global`' level. Consider&] miss the rest of file (because all would be considered to be part of Fn1 body). However Fn2 definition invokes grounding heuristics and parsing restarts at that point, not missing Fn2.&] -[s10; 5. Assist`+`+ C`+`+ parser directives&] +[s10;:5: 5. Assist`+`+ C`+`+ parser directives&] [s11; Assist supports simple directives that are passed to it via `'//`' comments that can be used in cases that original code is confusing:&] diff --git a/uppsrc/ide/app.tpp/AssistParserDirectives_en-us.tppi b/uppsrc/ide/app.tpp/AssistParserDirectives_en-us.tppi index dba0f5dc6..8aa5781ce 100644 --- a/uppsrc/ide/app.tpp/AssistParserDirectives_en-us.tppi +++ b/uppsrc/ide/app.tpp/AssistParserDirectives_en-us.tppi @@ -1,14 +1,15 @@ TITLE("Assist++ - C++ parser directives") COMPRESSED -120,156,157,88,9,115,211,74,18,254,43,83,9,251,72,192,113,52,58,44,31,44,245,178,38,60,168,183,36,20,71,81,84,202,21,201,210,216,158,23,89,163,213,145,144,229,248,237,251,245,140,36,203,142,89,182,22,72,176,53,211,119,247,215,221,186,146,174,59,156,132,182,55,185,249,243,114,52,177,217,163,71,188,103,29,58,62,119,134,158,195,93,123,128,95,220,225,182,103,59,46,31,218,35,119,232,56,67,107,28,37,97,81,204,174,18,123,56,212,68,118,207,62,180,125,207,230,190,59,116,135,220,241,135,54,104,109,203,178,45,223,246,184,235,12,109,111,28,139,34,154,93,89,184,238,64,198,104,224,140,44,110,89,62,231,150,99,251,150,227,185,156,59,54,88,216,190,205,45,111,44,210,120,118,245,106,48,33,2,23,4,150,55,176,44,107,0,110,174,107,129,59,145,185,14,119,44,219,241,248,200,27,140,231,98,41,211,217,213,67,147,188,95,154,228,91,99,89,138,117,109,81,232,78,158,252,238,77,56,72,7,189,193,161,15,177,174,7,97,35,178,200,1,153,109,15, -188,17,247,92,168,228,90,246,56,23,255,170,100,46,214,34,45,107,14,146,115,155,79,230,220,159,64,133,31,63,126,244,185,107,25,79,249,208,133,91,208,219,230,120,6,59,124,238,141,172,145,55,228,67,203,241,93,219,243,97,122,22,230,225,186,182,100,238,218,147,218,142,97,111,120,56,224,3,120,212,26,66,127,111,4,6,22,140,192,255,112,164,135,127,206,112,92,214,196,68,71,68,163,222,232,16,78,114,60,203,31,89,190,235,123,46,44,177,249,128,195,145,22,217,143,48,140,83,149,175,195,4,68,67,103,242,196,165,44,176,122,156,31,90,254,112,224,114,215,119,93,56,11,148,174,109,185,136,18,62,115,207,31,248,254,184,148,101,34,140,172,16,63,217,74,103,16,39,90,23,241,116,200,115,190,7,135,113,45,217,26,113,27,12,134,150,231,129,86,124,33,119,57,112,84,105,187,131,201,180,118,57,183,123,28,217,100,141,44,123,224,143,64,234,14,240,151,59,163,17,34,8,82,151,123,22,119,198,145,138,33,57,36,133,223,13,136,204,33,169,200,7,110,241,129,13, -157,109,11,169,225,194,79,124,56,116,185,239,13,157,209,96,48,142,194,172,148,10,105,66,154,90,148,86,191,248,51,126,33,22,97,149,64,213,175,215,223,255,118,126,113,242,241,61,187,42,184,51,97,103,69,33,139,50,120,26,60,101,193,9,131,219,11,145,179,24,137,16,149,242,86,20,191,205,112,205,154,48,222,103,175,211,50,87,113,21,145,100,253,152,111,81,79,245,239,134,129,18,5,75,85,201,22,42,73,212,29,155,158,154,227,162,12,211,56,204,227,130,137,47,97,84,38,247,61,220,200,89,38,242,5,5,47,141,4,195,5,150,229,56,148,81,152,176,92,132,133,74,139,62,251,176,146,5,216,70,21,37,104,129,27,234,86,162,22,153,76,53,37,41,197,194,185,170,74,22,139,91,169,191,23,61,182,18,85,14,5,101,84,104,190,101,46,163,155,130,149,171,176,100,119,130,85,133,96,165,98,235,240,6,255,175,4,62,68,43,153,138,252,158,45,194,162,212,20,43,185,92,37,247,76,228,57,212,204,5,89,27,166,101,191,113,139,221,103,175,112,45,145,233,146,169, -5,43,84,149,195,132,133,76,132,22,30,198,34,199,7,240,205,149,209,32,13,215,162,200,194,168,246,44,92,248,65,11,150,41,156,190,88,136,92,144,15,230,162,188,19,34,173,125,26,169,117,6,142,185,49,97,37,96,247,182,183,101,109,82,125,134,175,171,70,169,48,189,239,106,197,10,65,149,85,138,228,190,118,169,36,189,224,185,66,37,85,41,182,34,209,65,4,38,23,108,153,168,57,34,18,135,101,56,15,11,45,6,206,155,27,237,75,252,136,152,221,173,72,136,136,101,73,194,181,31,250,141,161,47,225,193,146,68,154,152,246,16,40,32,112,94,135,14,166,197,98,33,83,169,191,174,43,248,127,78,142,64,128,89,1,102,137,49,160,175,217,32,121,214,89,34,26,206,87,79,216,75,156,241,254,106,166,31,217,19,36,90,142,76,197,101,197,130,175,205,195,157,251,118,231,254,161,76,163,164,130,243,130,131,154,85,112,208,156,157,124,131,125,108,30,230,147,230,73,240,125,210,240,130,61,87,79,78,217,197,229,135,25,43,170,44,83,121,41,226,214,230,183,38,64,89, -46,144,176,8,122,65,89,84,193,43,227,250,134,4,14,76,46,145,73,103,73,2,37,22,167,248,129,31,16,243,52,214,174,64,120,114,65,95,11,132,54,23,148,195,149,216,196,14,41,188,168,18,38,250,203,62,156,143,148,65,14,228,58,54,89,18,150,20,74,86,100,34,146,11,25,49,2,27,214,169,114,157,54,130,130,159,232,58,200,80,28,44,132,30,183,97,46,145,229,168,186,67,145,32,210,184,95,26,61,196,23,237,165,248,97,24,180,15,181,234,111,255,121,246,225,229,229,187,55,193,245,167,215,23,142,221,156,222,42,25,179,105,162,10,241,73,166,177,186,59,210,15,130,39,58,85,197,113,39,76,125,252,217,120,186,229,142,86,42,23,63,149,245,199,135,63,255,63,73,255,93,20,98,56,87,229,170,203,174,147,167,5,187,147,240,151,201,82,66,16,114,49,21,71,127,55,188,159,200,209,226,75,6,21,168,50,52,34,244,88,66,48,115,168,249,137,13,232,214,113,141,91,205,154,27,47,47,47,25,223,247,176,117,50,190,52,106,147,58,154,127,66,183,26,61,141, -10,148,70,40,140,3,59,56,120,160,233,97,149,234,4,36,8,72,138,13,155,78,117,2,233,232,113,1,44,107,44,1,62,200,146,20,55,90,197,141,67,244,29,83,184,59,41,11,5,76,64,76,130,18,178,104,82,99,187,110,11,45,138,17,106,50,26,215,86,56,214,105,110,202,149,206,208,128,69,158,130,60,145,243,28,137,219,212,86,199,69,243,251,146,60,144,58,118,112,77,159,131,107,118,122,202,222,101,209,69,156,183,82,245,165,224,228,185,150,67,129,69,212,63,102,89,48,30,211,201,46,203,233,231,134,225,244,115,112,253,0,69,158,169,249,95,50,78,250,171,231,15,143,64,151,2,223,111,186,135,198,231,91,130,204,163,233,231,7,241,105,24,193,195,26,210,195,24,237,148,202,182,110,51,186,21,80,177,30,33,159,170,188,64,70,37,247,199,109,96,230,247,181,243,200,201,154,30,208,27,38,133,210,60,130,131,170,104,60,174,251,84,112,208,153,6,48,4,148,132,158,47,46,207,223,27,200,163,22,218,222,101,243,68,1,66,58,245,97,218,123,141,19,6,253,209, -164,215,50,53,168,47,205,144,208,226,230,184,131,208,239,75,160,206,69,195,186,3,213,27,113,111,238,219,243,253,40,127,158,198,251,56,52,240,253,176,37,244,163,44,219,215,19,118,149,217,52,7,141,45,104,51,71,199,147,61,116,219,10,212,84,191,234,26,109,168,95,169,59,113,43,114,93,93,58,84,75,81,210,196,131,210,161,218,66,75,249,11,129,193,231,92,85,203,85,43,183,215,201,134,30,211,241,220,25,62,30,6,170,238,50,57,69,58,217,100,200,169,198,33,54,173,219,79,199,91,111,128,9,34,127,165,71,156,110,31,221,7,85,59,41,197,254,209,105,165,155,167,219,189,186,235,252,106,222,200,217,248,125,127,12,59,87,103,91,199,109,164,210,35,106,0,152,65,202,42,79,73,205,46,240,111,102,50,29,32,246,250,125,39,60,99,16,119,241,158,244,221,104,79,254,213,135,53,103,222,206,136,78,31,206,66,44,152,66,44,115,26,90,123,29,58,19,166,70,240,107,141,161,153,194,88,93,55,101,140,106,9,205,136,175,95,156,55,12,200,153,219,104,220,182,248, -26,2,104,102,170,65,181,143,155,69,61,137,177,75,68,198,140,113,155,199,122,170,53,147,116,35,7,211,198,66,46,171,206,104,70,117,27,209,252,98,212,170,19,46,56,120,182,22,101,248,28,24,1,91,110,194,37,80,254,12,72,210,235,74,165,78,66,30,203,48,154,235,212,173,175,18,152,44,140,194,59,125,163,67,220,163,174,210,250,77,231,181,138,0,106,122,76,46,154,70,132,179,180,132,253,52,211,164,250,82,132,30,188,153,60,47,84,41,106,88,92,32,105,89,132,198,178,36,47,110,36,245,234,246,149,10,178,50,196,10,0,77,225,25,82,190,105,236,45,191,174,117,84,55,26,61,117,215,2,17,34,11,135,169,148,218,120,81,213,114,87,33,33,29,205,245,36,95,207,218,26,255,12,243,5,118,93,113,167,242,155,135,149,166,65,105,181,167,40,166,42,223,194,161,139,179,55,231,239,223,158,77,207,131,235,143,111,223,238,33,40,170,249,234,65,21,157,95,188,208,247,131,235,150,126,183,22,238,244,64,185,205,94,231,196,30,90,237,141,38,146,133,130,81,102,26, -197,38,163,213,101,97,177,91,149,13,96,236,8,216,20,8,122,112,23,22,234,235,251,132,239,129,132,143,180,29,150,85,170,55,158,158,110,234,20,247,122,0,78,212,18,53,131,69,112,21,98,234,50,235,106,69,221,208,236,127,119,225,61,91,97,222,67,80,99,81,18,210,146,217,72,10,149,220,214,205,172,144,101,101,170,228,8,108,98,165,153,220,164,32,90,139,48,173,183,194,109,211,78,247,169,126,103,198,195,82,239,189,205,124,136,20,203,213,186,78,129,227,190,222,20,55,169,67,194,169,171,246,168,178,52,81,185,194,140,218,120,168,238,19,157,58,95,200,47,194,204,115,58,49,209,37,192,162,138,86,237,122,170,99,71,118,154,41,161,65,16,189,54,144,229,58,195,181,166,237,96,102,116,107,161,206,237,179,63,114,114,33,157,109,118,239,109,116,11,217,82,169,152,138,54,108,183,239,58,32,245,182,221,238,217,122,193,172,150,4,3,237,188,167,213,209,69,133,138,109,223,51,208,180,148,235,183,11,253,221,69,179,179,238,152,70,100,18,19,12,176,36,2,8,208,13, -1,77,183,180,246,11,108,224,102,4,55,190,237,216,48,38,180,10,205,48,93,148,122,33,58,2,11,64,9,197,12,236,255,45,114,117,108,198,198,14,30,97,33,134,135,101,247,101,72,237,93,179,211,6,143,199,193,227,14,151,35,88,92,47,89,24,187,231,152,192,143,27,104,10,183,64,63,5,169,129,114,208,39,24,19,146,29,240,216,116,60,126,212,221,121,78,190,161,36,142,104,163,149,44,248,59,67,212,36,123,198,40,122,146,222,41,108,95,61,249,54,85,85,9,250,103,207,152,236,172,191,63,233,173,246,150,164,125,125,181,94,78,215,72,65,10,69,240,56,248,14,253,169,155,166,188,87,123,235,78,85,73,12,79,223,160,102,183,210,131,168,116,2,35,65,74,170,44,157,215,71,115,17,133,52,135,18,240,27,218,249,246,198,172,223,82,208,18,75,52,16,132,149,46,190,71,65,213,243,21,41,222,245,173,76,111,213,13,242,106,185,39,149,205,235,41,168,67,143,73,13,179,26,151,38,35,51,5,191,246,116,172,27,11,193,187,45,15,175,255,243,23,102,219,111,220, -218,87,107,205,248,209,84,123,231,226,102,208,207,176,176,24,59,145,41,183,50,132,91,79,79,41,173,212,218,188,45,211,55,235,62,172,171,24,14,215,45,210,156,168,92,162,29,54,165,142,240,208,0,160,107,133,6,114,246,245,171,51,244,172,241,0,99,41,211,241,76,28,155,166,173,167,190,135,61,42,120,20,156,204,102,227,49,51,106,79,137,69,70,240,169,75,112,179,212,234,225,136,134,94,120,103,102,2,210,104,109,124,208,175,153,60,228,255,244,127,230,191,135,45,59,42,74,149,209,56,55,253,221,235,168,124,252,83,121,215,51,168,73,95,244,219,217,58,135,205,157,179,223,45,58,168,23,154,241,204,16,105,170,205,38,128,241,54,248,237,120,87,231,159,235,167,23,184,14,172,25,176,104,242,181,126,251,23,215,175,241,138,227,217,119,93,87,200,167,217,236,63,9,69,16,252, +120,156,165,89,13,115,211,70,26,254,43,59,9,215,38,224,56,90,125,88,182,204,117,154,51,161,48,61,18,166,192,116,58,25,19,201,210,218,222,70,150,124,210,42,38,71,233,111,191,231,221,149,100,217,73,14,102,0,242,97,105,223,239,231,253,90,174,164,235,14,199,145,237,141,111,126,189,28,141,109,246,228,9,239,89,135,142,207,157,161,231,112,215,30,224,27,119,184,237,217,142,203,135,246,200,29,58,206,208,10,226,52,42,203,233,85,106,15,135,154,200,238,217,135,182,239,217,220,119,135,238,144,59,254,208,6,173,109,89,182,229,219,30,119,157,161,237,5,137,40,227,233,149,133,227,14,100,140,6,206,200,226,150,229,115,110,57,182,111,57,158,203,185,99,131,133,237,219,220,242,2,145,37,211,171,87,131,49,17,184,32,176,188,129,101,89,3,112,115,93,11,220,137,204,117,184,99,217,142,199,71,222,32,152,137,133,204,166,87,247,77,242,190,106,146,111,5,82,137,85,109,81,228,142,159,254,236,141,57,72,7,189,193,161,15,177,174,7,97,35,178,200,1,153,109,15, +188,17,247,92,168,228,90,118,80,136,255,84,178,16,43,145,169,154,131,228,220,230,227,25,247,199,80,225,239,191,255,238,115,215,50,158,242,161,11,183,160,183,205,241,12,118,248,220,27,89,35,111,200,135,150,227,187,182,231,195,244,117,84,68,171,218,146,153,107,143,107,59,134,189,225,225,128,15,224,81,107,8,253,189,17,24,88,48,2,63,225,72,15,255,156,97,160,106,98,162,35,162,81,111,116,8,39,57,158,229,143,44,223,245,61,23,150,216,124,192,225,72,139,236,71,24,130,44,47,86,81,10,119,187,227,217,208,25,63,117,9,8,86,143,243,67,203,31,14,92,238,250,174,11,127,129,216,181,45,23,129,194,239,220,243,7,190,31,40,169,82,97,196,69,248,90,47,53,136,56,209,186,8,169,67,206,243,61,248,140,107,225,214,136,219,96,48,180,60,15,180,226,19,121,204,129,175,148,237,14,198,147,218,235,220,238,113,0,202,26,89,246,192,31,129,212,29,224,47,119,70,35,4,17,164,46,247,44,238,4,113,158,64,114,68,10,255,54,32,50,135,164,2,18,220,226, +3,27,58,219,22,208,225,194,85,124,56,116,185,239,13,157,209,96,16,196,209,90,201,28,72,33,77,45,66,214,87,254,4,47,196,60,170,82,168,250,249,250,203,63,206,47,78,62,188,99,87,37,119,198,236,172,44,101,169,194,103,225,51,22,158,48,120,190,20,5,75,128,133,88,201,91,81,254,48,197,49,107,204,222,71,179,84,176,124,206,226,60,83,64,137,126,129,231,245,143,171,143,42,95,203,56,12,194,211,240,84,38,34,60,141,214,235,240,212,48,127,171,153,190,104,121,134,215,34,11,79,170,50,60,228,31,25,239,179,215,153,42,242,164,138,181,73,223,199,208,254,200,236,62,123,21,101,73,42,179,5,233,91,230,85,17,11,54,151,169,40,123,108,41,162,68,20,248,101,21,197,69,94,50,28,100,89,180,18,229,58,138,69,249,157,194,157,143,204,233,179,55,196,153,229,183,162,40,64,10,81,45,255,90,232,119,74,113,63,50,183,207,126,41,242,42,75,200,198,165,168,10,16,200,248,123,25,123,31,153,215,239,226,97,162,191,223,131,196,180,19,122,64,35,224,193, +126,16,245,27,62,126,156,87,46,74,150,229,138,205,243,52,205,55,108,114,106,94,151,10,241,136,138,164,100,226,83,20,171,244,174,135,19,5,91,139,98,78,217,157,193,133,20,176,117,129,151,50,142,82,86,136,168,204,179,178,207,222,47,101,9,182,113,69,21,172,196,137,252,150,156,207,100,166,41,73,41,22,205,242,74,177,68,220,74,253,89,163,161,113,157,230,171,10,25,223,148,76,45,35,197,54,130,85,165,96,42,71,208,110,240,115,169,163,183,148,153,40,238,216,60,42,149,166,88,202,197,50,189,99,8,53,212,44,4,89,27,101,170,223,120,198,14,190,7,141,141,23,223,107,217,50,67,8,230,115,81,8,114,195,76,168,141,16,89,237,214,56,95,173,193,177,48,86,44,5,76,223,117,184,172,173,170,223,225,227,178,81,42,202,238,186,90,177,82,80,245,85,34,189,171,189,42,73,47,56,175,204,211,74,137,157,96,116,186,6,147,115,182,72,243,25,130,146,68,42,154,69,165,22,3,255,205,140,246,10,95,34,97,155,37,9,17,137,84,36,92,251,161,223,24,250, +18,78,84,36,210,132,181,135,88,161,75,23,117,244,96,90,34,230,50,147,250,227,170,66,8,102,228,8,196,152,149,96,150,26,3,250,154,13,240,179,90,167,162,230,172,27,26,187,122,202,94,226,0,239,47,53,130,185,93,63,47,85,1,216,130,44,103,225,231,157,55,15,145,219,251,228,135,50,139,211,10,94,13,15,106,246,225,193,206,129,147,191,96,61,155,69,197,120,231,113,248,101,220,24,14,147,175,158,158,178,139,203,247,83,86,86,235,117,94,40,145,180,110,49,25,11,76,11,192,26,184,40,9,107,21,28,23,52,250,241,129,133,126,237,89,227,75,164,229,89,154,66,167,249,41,190,224,47,170,215,137,118,25,194,88,8,250,88,2,2,133,32,184,87,98,27,99,160,125,94,165,76,244,23,125,4,9,208,2,86,10,29,195,117,26,41,10,57,43,215,34,150,115,25,51,234,90,172,211,46,52,188,4,129,36,213,41,131,226,115,195,34,232,113,27,21,18,9,129,4,61,20,41,16,129,243,202,232,33,62,105,167,37,247,195,5,255,160,45,147,95,181,254,111,255,125, +246,254,229,229,111,111,194,235,223,95,95,56,246,206,145,219,92,38,108,146,230,165,248,93,102,73,190,57,210,15,194,167,26,220,226,184,19,78,125,188,143,63,59,15,194,47,187,18,49,175,201,249,255,87,226,151,247,191,126,175,10,223,170,67,3,188,89,174,150,93,17,157,52,40,217,70,194,205,38,9,168,70,81,100,40,247,250,15,66,227,119,10,146,248,180,142,76,231,208,85,167,199,82,170,102,135,154,169,216,150,249,26,19,201,174,182,205,177,151,151,151,140,63,250,102,55,74,120,178,99,15,233,169,101,166,116,190,49,192,168,69,176,68,26,30,216,225,193,195,38,28,162,235,17,170,169,254,164,229,150,87,167,52,160,204,210,227,18,133,180,49,17,197,73,42,178,200,40,153,52,238,210,103,76,213,216,203,3,104,97,66,104,80,79,101,77,147,26,167,232,182,212,150,80,42,217,140,246,137,37,94,235,220,49,37,129,222,97,60,20,69,6,242,84,206,10,100,67,147,181,251,110,155,221,41,242,69,230,216,225,53,253,30,94,179,211,83,246,219,58,190,72,138,86,180,62, +20,158,252,164,133,81,236,1,140,15,104,237,65,64,111,30,228,59,249,163,225,58,249,35,188,222,195,118,93,184,158,231,179,63,101,146,246,151,63,61,242,30,28,50,52,156,155,123,39,76,48,238,11,55,207,39,127,60,28,194,134,47,130,160,91,78,148,160,227,83,185,168,219,160,110,85,84,36,142,128,197,170,40,129,198,244,238,184,141,221,236,174,246,47,197,65,211,163,53,68,105,153,107,30,225,65,85,54,65,209,125,52,60,232,204,46,152,83,20,85,242,23,151,231,239,76,189,165,46,191,157,208,102,105,142,210,213,73,48,51,129,212,245,201,116,39,204,17,43,153,153,174,36,205,28,211,22,237,182,36,107,63,64,208,59,133,146,119,209,240,239,244,14,125,96,43,248,205,93,123,104,191,102,236,179,60,207,146,71,25,54,77,229,49,90,234,80,253,120,189,158,62,28,233,240,96,95,223,109,47,219,150,59,116,202,163,227,241,99,28,118,213,171,233,161,130,99,91,180,71,242,145,253,149,134,183,139,150,87,249,70,96,150,214,57,172,163,189,16,138,230,58,36,40,101,48, +90,226,159,136,45,126,199,64,188,88,182,138,244,58,128,234,49,13,137,189,249,234,126,172,235,6,89,16,88,210,45,200,78,117,25,100,147,186,115,238,187,244,13,202,143,40,94,233,81,110,63,28,143,151,203,61,144,178,127,117,198,131,61,104,236,14,38,247,2,86,205,26,217,123,177,250,26,22,58,148,211,251,7,119,35,158,29,81,43,195,96,166,170,34,35,115,238,53,174,54,204,158,61,54,197,20,34,94,191,235,196,55,0,155,110,191,34,187,182,86,82,108,244,203,90,6,111,167,104,39,248,166,181,170,25,151,94,235,66,191,206,177,123,212,227,8,134,217,148,166,232,215,47,206,27,6,228,252,221,150,209,14,55,117,17,162,169,178,174,252,125,156,44,235,89,149,93,34,156,102,208,221,62,214,163,191,89,55,26,57,152,179,230,114,81,117,134,87,170,28,49,141,111,70,173,26,175,225,193,243,149,80,209,79,168,82,176,229,38,90,160,21,157,161,150,245,186,82,169,221,145,211,214,216,95,52,242,235,163,84,206,230,70,225,189,230,214,33,238,81,235,107,253,166,211,34, +143,81,86,245,34,81,54,221,18,239,50,5,251,105,154,203,244,161,24,99,196,118,54,191,200,149,168,11,243,28,112,103,49,186,223,130,188,184,149,212,171,123,108,38,200,202,8,123,18,52,133,103,72,249,102,54,105,249,117,173,163,180,211,245,91,183,86,16,33,178,112,88,158,209,16,82,86,181,220,101,68,181,150,54,31,146,175,183,17,93,129,13,243,121,1,162,77,94,220,220,75,84,83,243,150,53,88,187,169,51,201,139,110,133,99,23,103,111,206,223,189,61,155,156,135,215,31,222,190,125,128,160,172,102,203,253,92,99,231,23,47,244,249,240,186,165,111,94,53,26,108,244,40,189,203,94,99,226,1,90,237,141,38,146,101,14,163,204,28,142,93,79,171,203,162,114,135,189,189,173,50,123,2,182,9,130,25,97,91,65,218,227,15,9,223,214,140,86,249,15,180,66,171,42,211,59,97,79,15,29,20,247,122,244,79,243,5,114,6,219,242,50,194,204,104,118,250,138,250,177,89,146,55,209,29,91,98,100,69,80,19,161,168,80,147,217,0,69,158,222,214,237,180,148,170,50, +89,114,4,54,73,174,153,220,100,32,90,137,40,171,247,230,93,211,78,31,82,125,99,134,91,165,47,7,154,233,22,16,43,242,85,13,129,227,190,222,165,183,208,33,225,212,215,123,148,89,154,72,45,49,102,55,30,170,219,76,39,207,231,242,147,48,67,167,6,38,154,12,88,84,241,178,93,224,117,236,200,78,51,167,52,21,68,47,76,100,185,70,184,214,180,157,30,141,110,109,181,115,131,199,174,119,118,11,92,196,22,121,158,80,222,70,237,45,69,29,147,250,86,162,189,143,208,91,120,181,160,74,208,206,165,90,35,157,87,72,218,246,62,134,230,182,66,223,194,244,247,183,241,206,174,103,122,151,193,38,24,96,127,70,45,64,63,69,117,186,165,235,17,49,159,215,59,132,113,111,199,134,128,10,86,100,38,255,82,233,109,240,8,44,80,77,40,108,96,255,95,81,228,199,102,178,237,148,164,205,82,194,201,178,123,105,84,59,216,44,254,225,143,65,248,99,135,203,17,44,174,55,76,172,7,51,108,10,199,77,117,138,118,234,126,6,82,83,205,65,159,98,208,72,247,234, +135,221,118,64,126,212,217,230,176,212,35,43,142,104,177,151,44,252,39,195,160,34,217,115,70,55,165,146,46,94,118,143,158,252,53,201,43,5,250,231,207,153,108,19,172,109,160,108,79,146,189,35,105,239,152,185,16,50,155,249,10,40,164,80,132,63,134,95,160,63,245,212,140,247,106,111,109,242,42,77,224,233,27,164,237,14,60,136,74,99,24,0,81,148,92,26,218,71,51,17,71,52,12,83,237,55,180,179,221,235,2,125,149,67,27,60,209,64,16,22,211,228,14,57,85,79,104,164,120,215,183,50,187,205,111,128,171,197,3,80,54,215,120,80,135,30,147,26,230,94,64,25,68,174,115,248,181,167,99,221,88,8,222,109,134,120,193,183,221,83,238,222,66,54,115,72,147,243,157,131,219,133,99,141,181,202,152,10,176,220,202,8,158,61,61,37,100,229,43,115,177,168,79,214,221,88,231,50,124,174,27,165,121,147,23,18,77,177,73,120,68,136,198,0,157,46,180,24,176,207,159,157,161,103,5,3,204,182,204,140,78,142,77,163,216,51,223,195,182,23,62,9,79,166,211,32, +96,70,237,9,177,88,83,17,213,89,184,93,204,245,148,68,227,51,28,52,53,49,105,180,54,62,232,215,76,238,243,127,246,205,252,31,96,203,142,74,149,175,105,174,155,252,236,117,84,62,126,84,222,245,20,106,210,7,253,223,28,205,184,168,207,156,253,108,209,139,122,177,10,166,134,72,83,109,151,12,12,197,225,15,199,251,58,63,174,159,94,36,59,149,205,212,139,6,178,245,45,105,82,95,119,150,199,211,47,95,234,171,236,233,244,127,165,145,29,146,