Doc: Added table of contents to Assist++ parser directives article.

git-svn-id: svn://ultimatepp.org/upp/trunk@15102 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
klugier 2020-09-19 23:48:16 +00:00
parent 0fc3c03949
commit 55b56af5fa
2 changed files with 95 additions and 81 deletions

View file

@ -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 <objidl.h>&]
[s12; #include <winnetwk.h>&]
[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 <objidl.h>&]
[s12;l576; #include <winnetwk.h>&]
[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 `"<meta>`" 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:&]

View file

@ -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,