.theide: .upp format docs (RM #207)

git-svn-id: svn://ultimatepp.org/upp/trunk@5019 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
dolik 2012-05-29 17:28:53 +00:00
parent 256d593755
commit e148bae3d9
3 changed files with 275 additions and 0 deletions

View file

@ -102,3 +102,7 @@ TOPIC("umk$en-us")
#include "umk$en-us.tppi"
END_TOPIC
TOPIC("upp$en-us")
#include "upp$en-us.tppi"
END_TOPIC

View file

@ -0,0 +1,253 @@
topic "U++ package file format";
[2 $$0,0#00000000000000000000000000000000:Default]
[l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param]
[a83;*R6 $$2,5#31310162474203024125188417583966:caption]
[b83;*4 $$3,5#07864147445237544204411237157677:title]
[i288;O9;C2 $$4,6#40027414424643823182269349404212:item]
[b42;a42;2 $$5,5#45413000475342174754091244180557:text]
[l288;b17;a17;2 $$6,6#27521748481378242620020725143825:desc]
[l321;C@5;1 $$7,7#20902679421464641399138805415013:code]
[b2503;2 $$8,0#65142375456100023862071332075487:separator]
[*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base]
[C2 $$10,0#37138531426314131251341829483380:class]
[l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement]
[i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam]
[b167;C2 $$13,13#92430459443460461911108080531343:item1]
[i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2]
[*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate]
[l321;*C$7;2 $$16,16#03451589433145915344929335295360:result]
[l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line]
[l160;*C+117 $$18,5#88603949442205825958800053222425:package`-title]
[2 $$19,0#53580023442335529039900623488521:gap]
[C2 $$20,20#70211524482531209251820423858195:class`-nested]
[b50;2 $$21,21#03324558446220344731010354752573:Par]
[{_}%EN-US
[s2; U`+`+ package file format&]
[s0; All the information about packages is stored in a text file
with the same name as the package and .upp extension. This file
stores list of files that belong into the package and also all
the settings that are set in Package organizer. This article
aims to document the syntax of the .upp file.&]
[s0; &]
[s0; Each section of .upp file begins with a keyword and ends with
semicolon. The recognized section keywords are:&]
[ {{2500:2500:2500:2500f0;FNg0;GN [s7;l160; [2 acceptflags]&]
[s7;l160; [2 charset]&]
[s7;l160; [2 custom]&]
[s7;l160; [2 description]]
:: [s7;l160; [2 file]&]
[s7;l160; [2 flags]&]
[s7;l160; [2 include]&]
[s7;l160; [2 library]]
:: [s7;l160; [2 link]&]
[s7;l160; [2 optimize`_size]&]
[s7;l160; [2 optimize`_speed]&]
[s7;l160; [2 options]]
:: [s7;l160; [2 mainconfig]&]
[s7;l160; [2 noblitz]&]
[s7;l160; [2 target]&]
[s7;l160; [2 uses]]}}&]
[s3; &]
[s3; Accepted flags&]
[s5; Each package can specify a list of flags that it can use to
provide special or optimized functionality. Such flags can be
then passed with dot prefix and will be only applied to main
package and all packages that list it among the accepted flags.
This provides a way how to minimize the number of packages that
need to be rebuilt when the flags are changed.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 acceptflags <flag`_name> `[,<flagname>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 acceptflags NOGTK, GUI;]]}}&]
[s5; &]
[s3; Encoding&]
[s5; The default encoding for all the files in the package can be
specified using [C@5 charset] keyword. &]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 charset <charset`_name>;]]
:: [s5; Example:]
:: [s5; [C@5 charset `"UTF`-8`";]]}}&]
[s5; &]
[s3; Custom build steps&]
[s5; Each package can invoke so called `"custom build steps`" which
are invoked either at compile time on all file with given extension
or when linking, if the extension is one of the special values
pre`-link or post`-link. The build step consists of command to
execute and specification of output files, which might be further
processed by TheIDE. This can be used for example to generate
sources on the fly or to apply some post`-processing on the final
executables. The command and output may contain a number of variables
enclosed in `'`$(...)`' that are replaced upon evaluation:&]
[ {{2833:7167<448;>640;f0;g0;h3; [s5;b17;a17; [C@5 FILE]]
:: [s5;b17;a17; current file name]
:: [s5;b17;a17; [C@5 TITLE]]
:: [s5;b17;a17; current file name without extension]
:: [s5;b17;a17; [C@5 PATH]]
:: [s5;b17;a17; current file path]
:: [s5;b17;a17; [C@5 RELPATH]]
:: [s5;b17;a17; relative path to current file]
:: [s5;b17;a17; [C@5 FILEDIR]]
:: [s5;b17;a17; current file directory]
:: [s5;b17;a17; [C@5 DIR]]
:: [s5;b17;a17; package directory]
:: [s5;b17;a17; [C@5 PACKAGE]]
:: [s5;b17;a17; package name]
:: [s5;b17;a17; [C@5 OUTDIR]]
:: [s5;b17;a17; package output directory]
:: [s5;b17;a17; [C@5 INCLUDE]]
:: [s5;b17;a17; list of all include paths]
:: [s5;b17;a17; [C@5 EXEPATH]]
:: [s5;b17;a17; executable path]
:: [s5;b17;a17; [C@5 EXEDIR]]
:: [s5;b17;a17; executable directory]
:: [s5;b17;a17; [C@5 EXEFILE]]
:: [s5;b17;a17; executable file name]
:: [s5;b17;a17; [C@5 EXETITLE]]
:: [s5;b17;a17; executable file name without extension]}}&]
[s5; &]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 custom(<when>) <extension>, <command>, <output>;]]
:: [s5; Example:]
:: [s5; [C@5 custom `".rc`", `"rc /fo`$(OUTDIR)`\`\`$(TITLE)`_rc.obj `$(PATH)`",
`"`$(OUTDIR)`\`\`$(TITLE)`_rc.obj`";]&]
[s5; [C@5 custom(POSIX PROTECT) `"post`-link`", `"ProtectEncrypt `$(OUTPATH)
AABBCCDDEEFF00112233445566778899`", `"`";]]}}&]
[s5; &]
[s3; Description&]
[s5; Description of package as it appears in Package selection dialogs
is set using the [C@5 description] keyword. The description string
can also include formatting portion, that determines the color
and style of the package name in the package list in TheIDE.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 description <description`_string>;]&]
[s5; where&]
[s5; [C@5 <description`_string> `= <actual`_description> `[`\377 `[B`]
`[I`] `[<R>,<G>,<B>`]`]]&]
[s5; [C@5 B ]makes the text bold&]
[s5; [C@5 I ]makes the text italic&]
[s5; [C@5 <R>,<G>,<B> ]are integers in range from 0 to 255 specifying
the color]
:: [s5; Example:]
:: [s5; [C@5 description `"Non`-GUI code. Streams, NTL containers, concrete
types, Value, XML, C parsing etc...`\377B128,0,0`";]]}}&]
[s5; &]
[s3; Files&]
[s5; Possibly the most important part of package is the list of files
that belong to it. Each file in the list can have set several
options which specify how it is handled and displayed.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 file <file`_name> `[<file`_options>`]`* `[,<file`_name> `[<file`_options>`]`*
`]`*;]&]
[s5; where&]
[s5; [C@5 <file`_options> `= options(<when>) <option> `| depends(<when>)
<dependency> `| optimize`_speed `| optimize`_size `| readonly
`| separator `| charset <charset`_name> `| tabsize <num 1`-20>
`| font <num 0`-3> `| highlight <highlighter`_name>]]
:: [s5; Example:]
:: [s5; [C@5 file ]&]
[s5; [C@5 -|FindInFiles.cpp optimize`_speed,]&]
[s5; [C@5 -|idefile.cpp charset `"iso8859`-1`",]&]
[s5; [C@5 -|Resources readonly separator,]&]
[s5; [C@5 -|ide.rc depends() ide.ico;]]}}&]
[s5; &]
[s3; Add/Remove flags&]
[s5; It is possible to automatically add or remove flags, based on
other flags. This is can be handy for example for platform dependent
flag switching.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 flags(<when>) `[!`]<flag`_name> `[`[!`]<flag`_name>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 flags(POSIX) `"ALSA OSS`";]]}}&]
[s5; &]
[s3; Additional includes&]
[s5; If the package requires some special include paths, they can
be added using [C@5 include] keyword.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 include`[(<when>)`] <path> `[, <path>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 include ../lib;]&]
[s5; [C@5 include(POSIX) /opt/someapp/include;]]}}&]
[s5; &]
[s3; Libraries&]
[s5; If the package requires to be linked with a shared or static
library, those can be added using [C@5 library] keyword.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 library`[(<when>)`] <lib`_name> `[, <lib`_name>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 library png;]&]
[s5; [C@5 include(POSIX) jpeg;]]}}&]
[s5; &]
[s3; Linking options&]
[s5; Each package can specify special options to be passed to the
linker command. Note that since each platform can have different
linker, you should provide link option for each supported platform.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 link`[(<when>)`] <lib`_name> `[, <lib`_name>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 link(MSC DEBUG) /nodefaultlib:msvcrt.lib;]]}}&]
[s5; &]
[s3; Size optimization&]
[s5; The [C@5 optimize`_size] keyword can be used to tell compiler
that the entire package should be optimized for smaller size
of resulting binary. It takes no parameters.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 optimize`_size;]]
:: [s5; Example:]
:: [s5; [C@5 optimize`_size;]]}}&]
[s5; &]
[s3; Speed optimization&]
[s5; The [C@5 optimize`_speed] keyword can be used to tell compiler
that the entire package should be optimized for faster execution.
It takes no parameters.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 optimize`_speed;]]
:: [s5; Example:]
:: [s5; [C@5 optimize`_speed;]]}}&]
[s5; &]
[s3; Compiler options&]
[s5; Any special options necessary for the package compilation may
be added with [C@5 options] keyword. They will be passed to the
compiler command only when compiling given package.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 options`[(<when>)`] <lib`_name> `[, <lib`_name>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 options(MSC) `"/D PSAPI`_VERSION`=1`";]]}}&]
[s5; &]
[s3; Main configuration&]
[s5; The set of flags that are available in the Main configuration
droplist in TheIDE are stored using the [C@5 mainconfig] keyword.
The name part is optional `- if the flags combination doesn`'t
have a name it is represented as an empty string.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 mainconfig <name> `= <flags> `[,<name> `= <flags>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 mainconfig `"`" `= `"GUI`", `"Without gtk`" `= `".NOGTK GUI`";]]}}&]
[s5; &]
[s3; No BLITZ&]
[s5; The [C@5 noblitz] keyword allows to prohibit BLITZ for entire
package. It takes no parameters.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 noblitz;]]
:: [s5; Example:]
:: [s5; [C@5 noblitz;]]}}&]
[s5; &]
[s3; Target&]
[s5; The section [C@5 target] can specify the name and/or path to the
resulting executable. The value can optionally depend on the
flags used.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 target`[(<when>)`] <package`_name> `[, <package`_name>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 target calc.ocx;]&]
[s5; [C@5 target(TEST) ld`-test.exe;]]}}&]
[s5; &]
[s3; Used packages&]
[s5; Each package specifies a list of packages which it depends on.
The dependency specified in [C@5 uses] section can be either conditional
(based on flags) or unconditional.&]
[ {{1914:8086f0;g0;h1; [s5; Syntax:]
:: [s5; [C@5 uses`[(<when>)`] <package`_name> `[, <package`_name>`]`*;]]
:: [s5; Example:]
:: [s5; [C@5 uses CtrlCore;]&]
[s5; [C@5 uses(POSIX `| LINUX `| FREEBSD) PdfDraw;]]}}&]
[s5; ]

View file

@ -0,0 +1,18 @@
TITLE("U++ package file format")
COMPRESSED
120,156,181,90,11,115,219,54,18,254,43,184,36,119,141,83,89,33,248,16,73,201,205,212,15,37,231,169,235,120,252,232,117,206,231,9,41,18,150,89,83,36,143,164,236,168,175,223,126,223,2,32,69,201,74,156,250,218,102,44,203,36,118,177,216,253,246,137,94,154,236,197,11,163,103,60,55,30,249,111,120,32,174,195,121,90,95,93,166,166,231,141,18,206,77,99,20,114,119,244,222,31,253,254,251,239,125,110,27,222,136,152,113,48,227,134,109,113,147,227,153,97,155,46,119,124,195,119,60,238,25,150,107,155,142,107,56,195,34,44,195,217,213,101,232,89,163,87,167,3,80,153,61,231,185,197,45,110,240,129,105,99,149,97,25,166,205,77,135,123,158,205,93,199,179,252,193,96,24,133,69,157,228,217,213,229,132,232,108,144,89,32,51,92,111,96,115,16,217,142,105,185,142,13,98,219,134,120,22,54,118,7,174,59,172,147,58,21,87,151,9,201,13,105,247,73,74,187,55,120,14,233,76,23,148,182,105,15,108,203,51,45,238,153,230,192,183,108,223,134,216,220,28,38,181,128,
144,19,219,28,133,248,33,50,7,251,217,142,205,45,104,196,118,29,11,203,92,252,182,13,159,155,216,212,51,28,7,251,137,143,141,154,38,80,16,41,137,104,7,216,210,116,29,162,240,108,143,91,174,103,218,230,192,132,16,134,139,131,146,4,206,48,22,85,4,90,203,228,163,253,111,157,17,7,157,219,115,159,155,134,111,152,3,215,199,126,144,21,199,181,124,159,91,30,246,179,185,99,112,107,24,229,49,142,56,49,29,195,146,155,121,176,194,0,76,165,70,156,1,135,188,166,229,97,55,151,91,22,62,29,219,115,135,149,32,59,212,121,121,117,249,234,219,151,70,223,232,155,142,179,69,228,62,200,61,203,182,44,123,224,219,220,176,176,13,120,216,164,174,129,1,75,114,199,244,134,147,176,194,158,82,157,156,32,4,133,91,158,99,97,211,1,62,96,76,156,202,130,82,76,223,246,44,203,51,134,81,26,86,149,214,12,105,229,21,29,143,243,30,231,207,93,82,168,99,153,182,79,26,177,76,104,214,28,56,62,135,106,157,129,109,152,195,82,252,119,158,148,98,38,50,232,
54,1,38,70,141,93,52,0,33,153,194,159,217,227,38,16,232,12,6,6,105,202,1,10,76,203,129,150,13,238,217,144,8,255,96,219,90,67,112,194,7,174,130,4,183,122,220,122,238,155,182,5,73,124,219,198,217,193,128,251,156,115,195,195,63,156,12,26,145,160,224,26,77,122,123,69,110,247,184,253,220,5,118,97,35,223,166,237,125,139,52,103,66,241,230,192,112,96,1,83,145,155,164,111,243,5,52,206,77,143,126,164,206,185,211,227,112,2,136,200,29,7,231,182,160,100,211,195,217,29,104,221,146,184,230,174,55,60,22,247,213,65,88,11,141,146,87,251,47,20,188,248,160,199,7,207,13,162,119,60,31,166,227,54,233,207,178,109,223,244,45,203,49,125,199,26,24,208,99,165,188,152,136,201,143,164,15,182,76,220,30,119,225,81,56,171,227,224,244,146,12,39,119,57,137,98,122,254,128,180,160,153,4,219,105,146,145,28,192,4,88,124,205,185,75,44,60,248,136,231,13,12,203,135,26,112,122,195,1,176,225,255,30,76,12,11,155,64,61,5,128,232,54,156,138,96,
91,59,167,220,156,80,231,88,142,71,88,5,37,132,198,246,224,227,27,198,0,79,60,15,206,51,156,134,133,6,157,105,244,76,3,200,65,160,113,224,125,216,5,144,51,124,10,26,8,1,208,58,98,142,239,40,212,5,219,153,168,106,17,195,224,142,33,143,106,242,158,201,161,47,96,206,113,60,219,30,64,82,236,234,82,12,34,179,193,83,29,215,26,158,132,240,142,95,62,252,246,247,241,241,246,197,25,187,172,204,17,99,23,193,215,193,215,76,159,129,93,39,41,62,242,114,22,214,255,184,186,172,140,17,219,77,83,86,223,8,150,100,234,49,130,22,11,39,249,188,110,104,42,150,84,172,130,231,137,24,139,88,200,40,102,40,70,247,73,125,35,137,171,112,38,88,70,31,97,37,31,52,251,133,89,204,250,243,162,96,160,17,89,5,230,125,118,126,3,134,146,94,114,173,88,154,84,53,203,175,229,51,34,15,107,54,17,105,158,77,177,95,157,63,224,23,166,85,142,15,37,118,37,234,58,201,166,154,44,44,229,19,146,243,68,83,228,229,52,204,146,159,69,169,55,14,
203,58,137,176,119,152,204,64,148,179,56,143,230,228,169,138,219,34,171,195,143,36,11,253,37,5,39,161,250,90,87,250,215,56,140,110,176,77,36,117,133,181,237,58,136,61,77,178,74,233,37,100,183,98,113,159,151,177,20,90,100,177,126,94,137,89,18,229,169,210,132,96,165,136,242,41,9,24,183,44,53,29,201,42,134,216,147,253,242,11,130,165,49,92,253,184,54,70,111,143,167,198,232,221,49,44,237,142,36,178,25,192,25,70,145,40,234,235,52,156,86,87,36,112,231,85,116,19,150,80,207,131,199,115,24,98,182,254,148,194,123,153,168,44,118,53,28,174,110,66,167,93,39,216,184,101,146,69,233,60,126,176,54,77,38,101,88,46,30,50,134,155,222,174,47,206,33,196,12,26,10,62,84,248,252,204,219,66,192,107,54,188,206,179,234,225,78,179,16,178,229,217,117,50,93,39,201,242,73,154,212,63,175,63,174,195,114,250,80,121,243,74,128,249,111,191,209,99,75,65,4,191,118,165,17,96,83,169,20,122,232,104,220,52,72,142,194,140,65,224,40,185,94,0,42,173,
11,208,114,133,229,164,150,107,192,159,96,90,148,249,93,18,11,69,18,166,128,117,123,112,108,50,207,36,114,66,136,189,232,179,179,57,246,81,156,136,195,68,16,154,51,236,92,85,88,44,65,24,231,240,239,82,92,39,31,37,58,239,19,184,19,214,229,89,10,105,138,34,77,176,16,187,146,142,214,124,47,93,198,5,41,166,148,28,178,134,51,114,88,114,155,112,229,236,218,237,180,252,192,52,187,15,23,236,38,191,151,252,147,76,30,65,210,101,243,217,68,148,164,133,213,29,50,161,132,153,144,179,76,230,73,90,179,123,58,15,209,168,83,146,219,3,219,217,84,196,125,229,47,72,133,246,16,153,112,0,47,129,143,220,112,216,138,76,112,38,29,124,168,192,128,191,47,81,185,116,61,134,237,208,175,224,3,197,178,55,44,184,236,201,191,229,95,193,85,240,106,116,213,82,142,63,134,179,34,21,159,97,117,252,254,221,249,119,61,246,238,226,112,212,0,196,105,1,50,6,246,98,4,46,253,148,34,65,172,170,86,132,10,245,138,226,116,27,231,84,108,76,178,149,104,168,
173,171,96,68,38,155,87,68,39,37,105,124,189,137,38,125,246,4,205,104,38,108,71,127,209,138,121,84,13,13,93,240,236,226,252,109,176,237,5,207,54,168,96,95,134,29,70,22,69,236,171,69,241,73,63,73,178,187,252,22,231,204,241,87,154,226,156,193,179,232,1,113,240,12,176,72,64,73,104,80,20,8,187,0,59,48,5,20,69,249,172,160,16,13,159,33,156,75,197,46,147,216,52,185,3,162,218,36,69,238,37,49,70,225,8,42,237,177,68,165,132,229,10,96,58,207,68,147,42,26,183,188,11,211,185,32,180,11,89,113,220,18,163,34,175,84,253,113,171,34,254,82,102,8,5,102,85,93,17,27,8,56,35,23,3,210,197,71,17,205,107,229,113,218,184,81,216,100,27,164,230,98,174,18,112,213,211,71,158,37,211,27,74,154,136,4,165,60,48,220,45,18,210,221,39,11,218,244,240,96,172,29,81,99,102,78,239,8,96,66,25,144,182,157,138,76,160,198,38,69,207,75,144,147,154,148,147,45,232,28,88,65,161,97,129,215,80,161,58,149,222,135,80,215,44,78,
16,134,244,9,194,9,100,84,135,110,78,71,63,250,4,51,196,1,40,160,14,101,85,177,244,254,187,176,76,36,37,121,66,154,87,170,238,8,190,10,94,188,236,247,251,91,193,87,203,92,95,138,34,13,35,2,126,129,237,5,105,95,234,169,201,154,168,229,135,46,170,230,29,148,92,163,55,40,206,71,26,245,150,66,125,211,243,40,212,190,61,60,26,183,200,110,95,69,243,178,164,250,64,130,133,224,255,96,133,36,62,63,60,255,34,106,137,55,42,175,90,40,109,230,119,178,123,254,207,71,216,21,97,125,179,153,248,116,124,180,153,190,20,41,20,116,167,104,201,162,93,134,155,121,145,86,14,14,79,31,145,37,70,195,19,161,156,91,108,102,178,145,65,227,226,143,208,158,236,238,127,183,251,110,131,110,27,250,79,27,229,253,197,249,103,119,214,72,124,68,128,195,227,253,163,139,131,13,2,52,89,155,98,137,46,116,164,98,171,205,124,198,63,142,55,91,101,233,45,159,177,41,168,55,158,165,67,252,200,57,192,97,51,196,59,44,30,65,57,88,124,2,232,155,120,108,
192,122,55,9,252,225,108,36,99,254,203,29,138,204,111,182,216,78,203,245,77,15,25,74,5,24,250,170,172,250,5,89,74,229,144,224,89,191,140,130,103,61,124,41,35,246,250,58,71,160,81,192,217,10,254,131,127,47,94,202,35,111,5,31,202,168,159,79,126,98,120,66,118,220,82,52,143,172,166,212,167,143,220,61,196,201,251,179,195,31,217,201,233,251,243,241,254,249,22,216,44,179,132,98,123,82,230,53,140,137,58,161,92,20,53,83,187,200,109,217,238,238,222,222,254,254,193,193,120,252,246,173,97,112,244,187,22,186,65,7,109,188,235,122,158,239,107,185,54,229,220,131,101,81,175,95,116,158,116,74,47,234,227,168,168,43,10,129,76,222,237,167,42,145,234,54,37,70,194,203,167,170,61,68,174,87,181,7,165,0,121,206,110,251,176,172,65,84,157,179,220,177,170,75,162,162,164,36,219,186,198,139,84,47,74,157,29,18,77,73,75,123,42,234,199,162,22,37,202,70,161,250,76,106,164,74,149,39,235,69,218,166,227,110,100,88,47,154,84,193,154,53,89,241,9,56,
236,30,96,167,243,7,58,16,121,156,55,173,197,129,212,82,116,173,191,113,57,11,190,97,59,97,84,207,195,52,248,208,89,64,5,104,240,31,203,117,241,123,47,184,194,231,161,252,220,57,125,211,219,121,135,159,61,42,74,175,86,224,181,199,174,102,225,173,214,142,236,212,39,121,26,119,87,28,62,88,145,212,104,28,162,21,49,151,59,176,43,85,79,213,98,42,20,18,74,42,180,217,117,9,215,49,40,133,152,142,211,116,50,13,2,164,89,30,241,190,174,22,131,103,199,208,199,54,74,101,70,211,65,180,48,117,41,194,25,234,155,227,243,163,166,72,192,246,61,250,30,149,192,0,171,23,5,213,63,63,80,193,213,99,63,126,127,212,99,251,176,113,41,81,40,234,8,165,130,212,221,30,55,189,158,209,51,54,186,195,91,42,162,244,163,147,28,117,204,4,229,13,29,96,150,19,72,102,132,189,48,163,81,72,89,119,189,35,81,218,251,244,224,2,106,73,234,190,170,100,101,56,212,32,148,20,132,246,155,240,78,141,42,42,113,135,162,43,109,250,84,93,208,53,157,33,
245,73,240,67,236,135,246,38,166,210,151,176,30,39,21,234,158,197,211,186,29,41,206,14,125,46,219,28,253,167,150,65,182,58,170,249,121,108,149,106,138,62,137,246,85,2,194,185,254,190,12,226,121,3,245,95,129,136,130,198,36,203,119,234,1,170,192,133,124,191,214,233,175,61,162,54,18,79,128,155,88,182,177,248,222,14,141,233,143,79,244,50,244,10,105,75,146,239,160,8,101,60,216,54,13,249,248,26,184,83,207,140,96,219,146,143,110,80,104,167,178,216,222,105,191,138,82,179,122,44,223,72,205,175,120,235,246,175,111,147,44,62,204,36,14,251,81,81,172,159,177,183,182,28,45,180,28,72,209,210,101,147,149,84,185,231,57,126,176,205,17,250,215,40,78,69,83,205,183,154,105,213,178,129,59,82,97,107,135,45,70,15,146,40,223,224,57,187,113,252,250,84,204,242,59,177,50,226,56,148,88,45,148,43,201,166,34,156,35,221,161,230,164,206,109,193,194,56,166,86,162,236,80,246,24,13,231,99,234,31,114,217,187,116,199,6,203,134,133,240,191,88,233,88,232,59,
220,160,166,92,193,26,168,212,146,156,85,168,60,162,27,132,130,39,121,8,9,208,162,48,184,252,91,112,181,54,22,120,240,236,139,134,3,138,175,204,252,148,241,119,143,206,118,217,251,179,179,141,145,9,250,77,212,72,167,201,137,173,138,87,83,156,190,108,168,84,87,214,244,161,43,213,40,165,78,177,104,20,9,19,172,78,10,154,17,93,155,165,159,160,50,205,35,184,108,212,134,68,181,67,155,203,33,138,254,250,69,74,106,36,239,247,95,167,201,100,181,118,210,239,26,21,190,134,179,188,166,99,163,76,121,173,223,109,80,229,145,156,53,38,143,42,80,141,152,168,2,107,166,100,33,171,224,99,66,66,182,170,9,196,205,224,146,84,138,206,244,147,58,109,230,155,255,143,78,53,143,85,157,226,97,103,58,213,253,251,139,180,171,121,178,34,155,126,86,181,63,21,98,186,81,149,114,28,210,68,241,199,230,154,237,176,82,231,54,165,97,61,135,212,147,125,169,239,178,153,15,244,217,113,78,201,157,82,41,180,25,9,38,36,243,198,205,219,212,25,39,215,215,66,182,159,
138,65,143,45,242,57,204,149,207,211,184,29,150,170,9,140,42,49,100,228,144,131,251,121,65,105,29,18,52,92,159,102,28,20,234,127,174,101,178,219,151,223,159,237,179,131,241,222,197,59,128,59,203,245,64,16,140,134,179,234,46,42,235,190,244,136,7,86,57,163,220,165,19,71,216,41,237,207,155,90,124,109,128,222,94,76,116,103,65,100,14,129,62,86,207,201,74,101,3,57,243,202,106,248,71,107,96,173,227,137,232,14,160,201,65,102,52,155,195,111,41,205,53,83,23,111,132,150,73,146,1,115,125,74,14,181,172,60,179,156,201,43,77,170,229,171,167,104,127,245,64,143,234,246,193,242,7,26,148,245,196,23,170,80,222,50,252,53,58,188,14,43,168,68,247,210,242,178,236,47,209,25,157,224,143,40,77,175,127,48,192,109,142,185,26,14,118,179,135,158,159,9,26,19,82,228,161,99,174,204,176,37,19,53,221,164,137,96,27,77,101,4,110,37,161,43,156,149,54,114,209,94,90,172,198,147,86,247,205,196,81,150,60,114,152,171,94,17,34,213,184,87,139,240,84,101,
66,164,63,53,2,52,165,49,130,0,149,7,175,15,216,201,217,238,201,97,240,225,135,241,233,217,225,251,227,224,27,190,177,84,248,158,6,168,234,38,107,94,174,131,151,10,196,213,123,37,106,231,194,187,16,58,159,44,251,146,135,60,88,92,230,197,106,175,172,174,87,213,77,240,90,183,223,185,76,91,109,246,101,7,46,219,39,26,152,23,186,164,9,182,155,129,186,190,166,202,103,20,36,212,190,185,168,178,224,171,90,197,249,80,247,240,146,190,20,5,162,10,124,137,250,160,10,173,16,19,179,162,94,232,41,194,83,236,184,148,27,133,190,178,220,55,234,14,168,82,215,63,235,15,191,200,146,29,174,52,135,33,242,224,25,154,91,53,152,249,151,30,138,77,235,219,230,93,95,222,21,49,185,100,131,133,143,115,182,119,116,120,254,239,245,160,212,92,84,46,111,154,211,52,191,175,244,125,225,77,50,129,218,36,161,202,126,43,49,232,207,12,45,90,142,71,245,178,92,183,126,194,115,121,183,186,130,91,53,100,146,116,250,230,117,165,182,168,27,112,193,199,95,83,39,160,
7,218,181,188,83,111,82,207,114,42,169,224,40,239,103,36,159,6,139,8,14,170,119,88,222,118,16,34,41,158,63,69,21,74,212,245,58,88,253,15,36,221,216,176,250,236,139,80,165,88,211,21,88,212,207,163,143,171,245,155,122,249,242,124,124,118,190,197,210,56,216,174,69,85,247,113,252,13,202,190,160,112,217,220,177,110,170,225,154,11,197,170,115,51,221,222,201,170,1,69,82,55,109,34,107,254,79,134,101,183,222,185,145,76,180,9,229,53,121,107,85,157,52,245,237,28,92,165,109,118,94,182,205,160,180,195,22,149,222,243,172,179,226,41,70,161,205,255,18,147,16,99,182,95,151,233,62,130,226,170,65,232,149,158,242,6,191,178,163,195,227,11,249,229,237,233,120,188,119,118,176,197,78,226,235,131,50,188,239,154,231,234,127,121,15,10,165,