Merge remote-tracking branch 'upstream/dev' into dev

This commit is contained in:
Michael Tryby
2019-02-01 11:41:19 -05:00
13 changed files with 1374 additions and 285 deletions

7
.gitignore vendored
View File

@@ -224,5 +224,10 @@ temp/
nrtestsuite/
tests/data/
#Cmake generated export headers
#Cmake stuff
buildprod*/
*_export.h
# git merge
*.orig

View File

@@ -69,8 +69,8 @@ ENDIF (MSVC)
# configure file groups
file(GLOB EPANET_SOURCES src/*.c)
file(GLOB EPANET_LIB_ALL src/*.c src/*.h)
file(GLOB EPANET_SOURCES src/*.c src/util/*.c)
file(GLOB EPANET_LIB_ALL src/* src/util/*)
source_group("Library" FILES ${EPANET_LIB_ALL})

View File

@@ -80,14 +80,15 @@ Contributors to this version (listed in order of first contribution):
```
ENopenH();
ENopenQ();
ENinitH(0);
ENinitQ(EN_NOSAVE);
do {
ENrunH(&t);
ENrunQ(&qt);
ENnextQ(&qstep);
// collect results
ENnextH(&tstep);
ENnextQ(&qstep);
} while (tstep > 0);
ENcloseQ();
ENcloseH();

View File

@@ -109,8 +109,8 @@ int ENgetdemandmodel(int *modelType, double *pMin, double *pReq, double *pExp);
```
for the legacy API and
```
int EN_setdemandmodel(EN_Project *pr, int modelType, double pMin, double pReq, double pExp);
int EN_getdemandmodel(EN_Project *pr, int *modelType, double *pMin, double *pReq, double *pExp);
int EN_setdemandmodel(EN_Project ph, int modelType, double pMin, double pReq, double pExp);
int EN_getdemandmodel(EN_Project ph, int *modelType, double *pMin, double *pReq, double *pExp);
```
for the thread-safe API. Some additional points regarding the new **PDA** option are:

View File

@@ -1,7 +1,7 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: (ImageMagick)
%%Title: (/srv/www/vhosts/git_exclude/save/processed/f/e/b/feb24f93-0578-4fbd-bacd-cea373ca6d55/01_974b6e74f4a6ddd6b9fc94889edcc782_png_intermediate_eps/DataFlow3.eps)
%%CreationDate: (2019-01-23T17:53:26+01:00)
%%Title: (/srv/www/vhosts/git_exclude/save/processed/5/f/7/5f73a081-3008-4947-be6b-2ae45f4afa5d/01_0631f921834777aef3d754c155093225_png_intermediate_eps/DataFlow.eps)
%%CreationDate: (2019-01-27T17:06:23+01:00)
%%BoundingBox: -0 -0 393 292
%%HiResBoundingBox: 0 0 393.041 292
%%DocumentData: Clean7Bit
@@ -7292,8 +7292,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619E3770B6
407ECA64C1F7FFEBE5647ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC7
3D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFEFEFEFEFEFE
FDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFF
@@ -7333,7 +7333,7 @@ EAEAEA97A4B530619E3770B63A74BD3B77C03D79C43F7CC7407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFD
FEFEFEFEFEFEFCFCFCDBDBDB4646460000005E5E5EFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F080808757575
@@ -7373,8 +7373,8 @@ C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBE5647ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A
4C5F76EAEAEAF8F8F8FCFCFCFCFCFCEAEAEA737373070707000000000000070707F6F6F6FCFCFC
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA
B7B7B7000000000000000000171717929292FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFEFEFE
@@ -7413,8 +7413,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B63A74BD
FFFFF7A694CA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA3F7CC73D78C1
3A74BB3871B7366DB22E5E9A4C5F76E9E9E9F6F6F6F9F9F9929292161616000000000000000000
000000858585EFEFEFF9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFDFDFDF7F7F7EBEBEB454545000000000000000000000000353535C2C2C2FBFBFB
@@ -7453,8 +7453,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA407ECA
407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E994C5F76E6E6E6BCBCBC2D2D2D000000
000000000000000000313131A9A9A9D8D8D8EAEAEAF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF
407ECA407ECA3F7CC73D78C13A74BB3871B7366DB22E5E9A4C5F76EAEAEAF8F8F8FDFDFDFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E5E5E5D3D3D3888888181818000000
@@ -7493,8 +7493,8 @@ FFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B53A74BC3B77BF3D79C33F7CC7407EC9407EC9
407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9
407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9
407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9
407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78C03A74BA3871B6366DB02D5D97435468
4D4D4D0000000000000000000000001818187F7F7FBCBCBCC7C7C7D9D9D9EAEAEAF6F6F6FBFBFB
407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78C03A74B93871B5366CB02E5D984B5E75
E7E7E7F5F5F5FAFAFAFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFAF3F3F3E6E6E6
@@ -7533,8 +7533,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B530619D3770B53A74BC3B76BF
407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9
407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9
407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9
407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78C03A74B9
3870B53368A9162D49020303000000000000000000000000000000000000000000000000000000
407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC9407EC93F7CC63D78BF3973B8
1B3759000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
@@ -7574,7 +7574,7 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA97A4B5
FFFFFFFFFFFFFFFFFFFFFFFFFFFFED857DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9
3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9
3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9
3F7DC93F7BC63C77C03A72B92F609C050A10000000000000000000000000000000000000000000
3F7DC93F7BC63C76BE3870B51A3556000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
@@ -7614,7 +7614,7 @@ FDFDFDF8F8F8EAEAEA96A4B52F609D366FB53974BC3A75BF3C78C33E7BC63F7DC93F7DC93F7DC9
85D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A694C93F7DC93F7DC93F7DC93F7DC9
3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9
3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9
3F7DC93F7DC93F7DC93F7DC93F7DC93E7BC63B77BF3871B7356BAE2750820A1420000000000000
3F7DC93F7DC93F7DC93F7DC93F7DC93E7BC53A75BD366DB1183251000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
@@ -7654,9 +7654,9 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609D366FB53974BC3A75BE3C78C2
3F7DC93F7DC93F7DC93F7DDBC4FFFFE1C1D33F7DC93FAAEDFFFFED857DC93F7DC964C1F6FFD5DB
3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9
3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC9
3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93E7BC53B77BE3870B63469AA
2F5F9B254C7B252E390F0F0F000000000000000000000000444444A3A3A3B4B4B4B8B8B8BABABA
BBBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
3F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93F7DC93E7BC43A74BB356BAE30629E
2A568E234774384657ADADADB7B7B7BBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BBBBBBBBBBBBBBBBBBBABABAB7B7B7B3B3B38C8C8C2A2A2A0000000000000000000000002D2D2D
@@ -7695,8 +7695,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C
857DC83F7DC83F94E4E1FFED857DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3E7BC53B77BD3871B5346AAB2F609D264D7D3947589E9E9E525252050505000000000000000000
0B0B0B676767BCBCBCBFBFBFC0C0C0C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
3E7BC43A75BA366CAE30629F2B59902449763A4859B1B1B1BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEAFAFAF4F4F4F000000000000000000
@@ -7735,8 +7735,8 @@ F8F8F8EAEAEA96A4B52F609C366FB43974BB3A75BE3C78C23E7BC53F7DC83F7DC83F7DC83F7DC8
C4AAC83F7DC83F7DDBC4FFF6A694C83F7DC83FAAEDFFFFED857DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83E7BC53B77BD3872B7356CAF3164A42852863E4E60B2B2B2B1B1B1
969696343434000000000000000000000000202020A9A9A9D4D4D4D6D6D6D6D6D6D7D7D7D7D7D7
3F7DC83F7DC83F7DC83F7DC83E7BC43A76BC376EB23367A72F5F9B275082405063C5C5C5D1D1D1
D5D5D5D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D5D5D5D3D3D38080800C0C0C
@@ -7775,9 +7775,9 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C366FB43974BB3A75BE3C78C23E7BC5
3F7DC83F7DC83F7DC885D5FFFFD5DB3F7DC83F7DD2A6EAFFFFFFFFFFFFFFFFFFFFFFD5DB3F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83E7BC53B77BE3973B8366FB33369AA
2B588F445569C7C7C7C5C5C5BEBEBEB4B4B48383831B1B1B000000000000000000151515E5E5E5
EAEAEAECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83E7BC53B76BD3871B5356CAF3266A6
2B578E47586DD9D9D9E6E6E6EBEBEBEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECEC
E9E9E9B8B8B80000000000000000000000003737379A9A9AB7B7B7C2C2C2CFCFCFDDDDDDE9E9E9
@@ -7816,8 +7816,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B52F609C366FB4
FFFFFFFFFFED857DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC8
3F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83F7DC83E7BC5
3B77BE3973B93770B4356BAF2D5B95495B70D9D9D9DCDCDCD3D3D3C8C8C8BDBDBDB6B6B6666666
0C0C0C000000292929EAEAEAF4F4F4F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
3B77BE3973B8366FB3346AAD2D5B954A5D72E4E4E4F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F7F7F7F2F2F2CACACA0707070000001D1D1D838383B7B7B7C0C0C0CCCCCC
@@ -7856,8 +7856,8 @@ EAEAEA96A4B42F609B366FB33974BA3A75BD3C78C03E7BC43F7DC73F7DC73F7DC73F7DC73F7DC7
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7
3F7DC73F7DC73F7DC73E7BC43B77BE3973B83770B4356CAE2E5D964B5E74E4E4E4EBEBEBE8E8E8
DFDFDFD2D2D2C6C6C6BEBEBEB1B1B1949494CACACAEAEAEAF7F7F7FCFCFCFEFEFEFEFEFEFEFEFE
3F7DC73F7DC73F7DC73E7BC43B77BE3973B83770B3356CAE2E5D964C5F75E9E9E9F7F7F7FCFCFC
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8929292BDBDBD
@@ -7897,8 +7897,8 @@ FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42F609B366FB33974BA3A75BD3C78C03E7BC43F7DC7
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73E7BC43B77BD3973B83770B4356CAF2E5D97
4C5F75E8E8E8F4F4F4F5F5F5F0F0F0E7E7E7DCDCDCD1D1D1CBCBCBCECECEDBDBDBECECECF8F8F8
FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
4C5F75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF5F5F5
E8E8E8D7D7D7CCCCCCCCCCCCD4D4D4DFDFDFEAEAEAF2F2F2F8F8F8FCFCFCFEFEFEFEFEFEFEFEFE
@@ -7937,8 +7937,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E609B366EB33873BA
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC7
3F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73F7DC73D7AC43B76BD
3972B8376FB4356CAF2D5D974C5F75EAEAEAF7F7F7FBFBFBFAFAFAF5F5F5EFEFEFE6E6E6E0E0E0
E0E0E0E8E8E8F2F2F2FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3972B8376FB4356CAF2D5D974C5F75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E5E5E5E0E0E0E2E2E2E9E9E9F0F0F0F7F7F7FBFBFBFDFDFD
@@ -7977,8 +7977,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA
FFFFFFFFFFFFFFFFFFFFFFFFE1C0D03E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7
3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7
3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7
3E7CC73E7CC73D79C43A75BD3872B8366FB4346BAF2D5D974C5E75EAEAEAF8F8F8FDFDFDFEFEFE
FCFCFCF9F9F9F5F5F5F2F2F2F1F1F1F5F5F5F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3E7CC73E7CC73D79C43A75BD3872B8366FB4346BAF2D5D974C5E75EAEAEAF8F8F8FDFDFDFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1F3F3F3F7F7F7
@@ -8018,7 +8018,7 @@ FFD5DA3E7CC73E7CC73E7CC73E7CC73E7CC73E7CD0A5EAFFFFFFF6A593C73E7CC73E7CC73E7CC7
3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7
3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73E7CC7
3E7CC73E7CC73E7CC73E7CC73E7CC73E7CC73D79C33A75BD3872B8366FB4346BAF2D5D974C5E75
EAEAEAF8F8F8FDFDFDFFFFFFFEFEFEFEFEFEFCFCFCFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFF
EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFD
@@ -8058,8 +8058,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA96A4B42E5F9A356EB23873B93974BC
FFD5D93E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6
3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC6
3E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63E7CC63D79C23A75BC3872B7
366FB3346BAE2D5D964C5E75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE
FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
366FB3346BAE2D5D964C5E75EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
@@ -10235,7 +10235,7 @@ A4E9FFE1BDC83B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC
3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC
3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC3B75BC
3B75BC3B75BC3B75BC3B75BC3B75BC3A73B9386FB3366CAE3469AA3165A52B578F4B5C72EAEAEA
F8F8F8FDFDFDFFFFFFFFFFFFFEFEFEFEFEFEFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF
F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
@@ -10275,8 +10275,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B5
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A9
3165A42B578E4B5C71EAEAEAF8F8F8FDFDFDFEFEFEFEFEFEFCFCFCDBDBDB4646460000005E5E5E
FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3165A42B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F080808757575EBEBEBFDFDFDFEFEFE
@@ -10315,8 +10315,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A92
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3A73B8386FB3366CAE3469A93165A42B578E4B5C71EAEAEAF8F8F8FCFCFCFCFCFCEAEAEA737373
070707000000000000070707F6F6F6FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3A73B8386FB3366CAE3469A93165A42B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBBEBEBE000000000000
@@ -10355,8 +10355,8 @@ F8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B53A73B83B75BB3B75BB3B75BB3B75BB
82D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DE6075BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A93165A42B578E4B5C71E9E9E9F6F6F6
F9F9F9929292161616000000000000000000000000858585EFEFEFF9F9F9FEFEFEFFFFFFFFFFFF
3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A93165A42B578E4B5C71EAEAEAF8F8F8
FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD
@@ -10396,8 +10396,8 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A923268A8356CAF376EB23870B53A73B8
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB
3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3B75BB3A73B8386FB3366CAE3469A93165A4
2B578D4B5C71E6E6E6BCBCBC2D2D2D000000000000000000000000313131A9A9A9D8D8D8EAEAEA
F7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
2B578E4B5C71EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E6E6E6D3D3D3888888181818000000000000000000000000
@@ -10436,8 +10436,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B22C5A913268A7
3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9
3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9
3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93A73B7
386FB2366CAD3469A83165A22A568B4252644D4D4D0000000000000000000000001818187F7F7F
BCBCBCC7C7C7D9D9D9EAEAEAF6F6F6FBFBFBFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
386FB2366CAC3469A73164A22B568C4A5B70E7E7E7F5F5F5FAFAFAFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFAF4F4F4E6E6E6D4D4D4C4C4C4B4B4B4
@@ -10476,7 +10476,7 @@ EAEAEA95A2B12C5A913268A7356CAE376EB13870B43A73B73B75B93B75B93B75B93B75B93B75B9
3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9
3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9
3B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B93B75B9
3B75B93B75B93B75B93A73B7386FB2366CAC3468A72E609B142A43020303000000000000000000
3B75B93B75B93B75B93A73B7386FB1356BAB193352000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
@@ -10516,7 +10516,7 @@ FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59913267A7346BAE366DB1376FB43972B73A74B9
5FBCF3FFFFFFFFFFFFFFFFFFE1BCC53A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B7376EB2356AAC2C599004090F000000
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B7376DB13468A818314F000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
@@ -10556,8 +10556,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59913167A7346BAE
3A74B93A74B93A74B95FBCF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D03A74B93A74B93A74B9
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B7376EB1
3469AA3164A1234A7809121E000000000000000000000000000000000000000000000000000000
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93972B6366CAF
3266A4172E4B000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
@@ -10597,8 +10597,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA
FFFFF3A38DB93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9
3A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B93A74B9
3A74B93A74B93972B6376EB03468A830629E2A588F224671232C360F0F0F000000000000000000
000000444444A3A3A3B4B4B4B8B8B8BABABABBBBBBBBBBBBBBBBBBBCBCBCBCBCBCBCBCBCBCBCBC
3A74B93A74B93972B5366BAD3164A12C5B9226508220426B374454ADADADB7B7B7BBBBBBBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBBBBBBBBBBBBBBBBBB
@@ -10637,8 +10637,8 @@ FFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0376FB23972B63A74B83A74B8
3A74B83A74B83A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83972B6376EB03469A930629E2B5990224774374555
9E9E9E5252520505050000000000000000000B0B0B676767BCBCBCBFBFBFC0C0C0C1C1C1C1C1C1
3A74B83A74B83A74B83A74B83A74B83A74B83972B5366CAE3265A22D5B9327528521446D384656
B1B1B1BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
@@ -10677,9 +10677,9 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0
3A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B83A74D0C2FFFFC2A5B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83972B6376EB0346AAA
3165A22D5D97254C7C3D4B5DB2B2B2B1B1B1969696343434000000000000000000000000202020
A9A9A9D4D4D4D6D6D6D6D6D6D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83972B5366DAF3367A5
2F609A2A588F244A793E4E5FC5C5C5D1D1D1D5D5D5D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D3D3D38080800C0C0C000000000000000000
@@ -10718,8 +10718,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B1
FFFFFFFFFFFFFFFFFFFFFFFFFFE9DC5F74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83972B6376EB1356BAB3267A52E619D285284425365C7C7C7C5C5C5BEBEBEB4B4B4838383
1B1B1B000000000000000000151515E5E5E5EAEAEAECECECEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
3A74B83972B6376DB03469A93164A12D5F99275183455669D9D9D9E6E6E6EBEBEBEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECECECECE9E9E9BFBFBF000000
@@ -10758,8 +10758,8 @@ FDFDFDF8F8F8EAEAEA95A2B12B59903167A6346BAD366DB0376FB23972B63A74B83A74B83A74B8
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE78274B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B83A74B8
3A74B83A74B83A74B83A74B83A74B83972B6376EB0356BAC3368A63063A129558947586CD9D9D9
DCDCDCD3D3D3C8C8C8BDBDBDB6B6B66666660C0C0C000000292929EAEAEAF4F4F4F8F8F8F9F9F9
3A74B83A74B83A74B83A74B83A74B83972B6376EB0356BAB3267A52F629F295589485A6EE4E4E4
F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
@@ -10798,9 +10798,9 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B598F3167A5346BAC366DAF376FB1
3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7
3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7
3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7
3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73972B5376EB0356BAB3368A6
3064A02A578B495B6FE4E4E4EBEBEBE8E8E8DFDFDFD2D2D2C6C6C6BEBEBEB1B1B1949494CACACA
EAEAEAF7F7F7FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73972B5376EB0356BAB3368A5
3064A02A578B4A5C70E9E9E9F7F7F7FCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8929292BDBDBDC0C0C0C9C9C9D6D6D6
@@ -10839,8 +10839,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12B598F
3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7
3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7
3A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B73A74B7
3972B5376EAF356BAB3368A63064A12A578C4A5C70E8E8E8F4F4F4F5F5F5F0F0F0E7E7E7DCDCDC
D1D1D1CBCBCBCECECEDBDBDBECECECF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3972B5376EAF356BAB3368A63064A12A578C4A5C70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF6F6F6E8E8E8D7D7D7CCCCCC
@@ -10879,8 +10879,8 @@ F8F8F8EAEAEA95A2B12A598F3166A5336AAC356CAF376EB13871B53973B73973B73973B73973B7
3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7
3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7
3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7
3973B73973B73973B73973B73871B5366EAF346AAB3267A63063A129568C4A5C70EAEAEAF7F7F7
FBFBFBFAFAFAF5F5F5EFEFEFE6E6E6E0E0E0E0E0E0E8E8E8F2F2F2FAFAFAFEFEFEFFFFFFFFFFFF
3973B73973B73973B73973B73871B5366EAF346AAB3267A63063A129568C4A5C70EAEAEAF8F8F8
FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD
@@ -10920,8 +10920,8 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588F3166A5336AAC356CAF366EB13871B5
3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7
3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7
3973B73973B73973B73973B73973B73973B73973B73973B73871B5366DAF346AAB3267A62F63A1
29568C4A5B70EAEAEAF8F8F8FDFDFDFEFEFEFCFCFCF9F9F9F5F5F5F2F2F2F1F1F1F5F5F5F9F9F9
FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
29568C4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1F3F3F3F7F7F7FAFAFAFDFDFDFEFEFE
@@ -10960,8 +10960,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA95A2B12A588F3166A5
3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7
3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B7
3973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73973B73871B4
366DAF346AAA3267A62F63A129568C4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFEFEFEFEFEFEFCFCFC
FBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
366DAF346AAA3267A62F63A129568C4A5B70EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBFBFBFBFCFCFC
@@ -11001,7 +11001,7 @@ EAEAEA95A2B12A588E3166A4336AAB356CAD366EB03871B43973B63973B63973B63973B63973B6
3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6
3973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B63973B6
3973B63973B63973B63871B4366DAE346AAA3267A52F63A029568B4A5B70EAEAEAF8F8F8FDFDFD
FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
@@ -13423,7 +13423,7 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842D5E9830619E3164A13366A4
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFFFFFF
FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B52A89A331A1BE34A8C736ABCA37AECE39B1D13AB3D4
3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4
3AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D43AB3D4
@@ -13463,8 +13463,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE275184
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EB0B42A88A2309FBD33A7C6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEB2F2F2F
080808757575EBEBEBFDFDFDFEFEFEFEFEFEFAFAFAF1F1F1DCDCDC9EB0B42A88A2309FBD33A7C6
35AAC936ADCC38B0D039B2D239B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3
39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3
39B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D339B2D3
@@ -13504,7 +13504,7 @@ FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC
FEFEFEFBFBFBBEBEBE000000000000000000171717929292FBFBFBFCFCFCF9F9F9F1F1F1DCDCDC
9EB0B42987A1309EBC33A6C535A9C836ACCB38AFCF39B1D139B1D139B1D139B1D139B1D139B1D1
39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1
39B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D139B1D1
@@ -13544,8 +13544,8 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842C5D982F619E3064A13266A43368A6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FEFEFEFAFAFAF1F1F1DCDCDC9EB0B42987A0309EBB33A5C334A8C736ABCA38AECD39B1D039B1D0
FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF7F7F7EBEBEB4D4D4D0000000000000000000000002D2D2D
B9B9B9F6F6F6EFEFEFDBDBDB9EB0B42987A0309EBB33A5C334A8C736ABCA38AECD39B1D039B1D0
39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0
39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D0
39B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039B1D039CCF0FFFFF7A3BFD0
@@ -13584,8 +13584,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2751842C5D98
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB429869F2F9DBA32A4C234A7C5
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4E6E6E6D3D3D3888888
181818000000000000000000000000525252D5D5D5D9D9D99DAEB329869F2F9DBA32A4C234A7C5
35AAC937ADCC38AFCF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF
38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF
38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF38B0CF
@@ -13620,13 +13620,13 @@ EAEAEA94A0AE2751842C5D982F619E3063A13265A33368A6356AAA356AAA356AAA356AAA356AAA
356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA
356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA
356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA356AAA
356AAA356AAA356AAA3367A63164A12F619D2D5E982B5B94264F8049596CEAEAEAF8F8F8FDFDFD
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB4
28859E2F9CB931A3C133A6C435A9C836ACCB38AECD38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE
356AAA356AAA356AAA3367A63164A12F619D2D5E972B5B93264E7F48586BE8E8E8F5F5F5FAFAFA
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAFAFA
F4F4F4E6E6E6D4D4D4C4C4C4B4B4B462626206060600000000000000000007070769696996A7AA
28849D2F9BB831A3C133A6C435A9C836ACCB38AECD38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE
38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE
38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE38AFCE
38AFCE38AFCE38AFCE38AFCE38AFCE38CAEFFFFFF7A2BDCE38AFCE38AFCE38CAEFFFFFFFE1D8D6
@@ -13660,13 +13660,13 @@ FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA94A0AE2750832C5D972F609D3063A03265A33367A53569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93367A53163A02F609C2D5D972B5A93264E80
49586CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
FAFAFAF1F1F1DCDCDC9EAFB428849D2E9BB831A2C032A5C334A8C636ABCA37ADCC37ADCC37ADCC
3569A93569A93569A93569A93569A93569A93569A93367A53163A02F609B2C5C95152C48000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000E10101A54642D99B531A1BF32A5C334A8C636ABCA37ADCC37ADCC37ADCC
37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC
37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC
37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC37ADCC36C9EEFFFFFFFFFFFFFFFFFF
@@ -13701,12 +13701,12 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE2750832C5D972F609D
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93367A53163A0
2F609C2D5D972B5A93264E8049586CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB328839C2E9AB631A1BF32A4C234A7C5
2F5F9B2C5A93142A45000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000C2A312E99B632A3C134A7C5
36AAC937ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB
37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB
37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB37ACCB
@@ -13741,13 +13741,13 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93367A53163A02F609C2D5D972B5A93264E8049586CEAEAEAF8F8F8FDFDFDFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB327829B
2D98B5309FBD31A2C133A5C435A8C736ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA
3569A93569A93367A531639F2E5E9A2B588F132842000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000E2E37
257F972E99B630A0BF33A4C335A8C736ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA
36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA
36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA36ABCA
36ABCA36ABCA36ABCA36ABCA36C8EDFFFFF7A2B9CA36ABCA36ABCA5DD6F7FFFFF7A2B9CA36ABCA
@@ -13781,13 +13781,13 @@ FFFFFFFDFDFDF8F8F8EAEAEA949FAE2750832C5C972F609D3062A03265A33367A53569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A93569A9
3569A93569A93569A93569A93569A93569A93367A53163A02F609C2D5D972B5A93264E8049586C
EAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA
F1F1F1DCDCDC9EAFB327829A2D98B4309FBC31A2BF33A4C335A7C636AAC936AAC936AAC936AAC9
3569A93569A93569A93569A93569A93569A93367A531639F2E5E982A578D254E801E3E66374352
ADADADB7B7B7BBBBBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC
BCBCBCBCBCBCBBBBBBBBBBBBBBBBBBBABABAB7B7B7B3B3B38C8C8C2A2A2A000000000000000000
000000222222616B6E206B7F2888A12E98B3309FBC33A3C235A7C636AAC936AAC936AAC936AAC9
36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9
36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC9
36AAC936AAC936AAC936AAC936AAC936AAC936AAC936AAC936C8EDFFFFF6A2B9C936AAC936AAC9
@@ -13821,13 +13821,13 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE2650832C5C972E609D3062A0
3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9
3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9
3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9
3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93367A53163A02F609C
2D5D972B5A93254E8048586CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAFB32781992D97B3309EBB31A1BE33A4C135A7C5
3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93367A531639F2E5E99
2A588E264F811E4069384454B2B2B2BCBCBCBFBFBFC1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1
C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C0C0C0BEBEBEAFAFAF4F4F4F000000
0000000000000000000F0F0F6A6A6A9C9C9C79878A216C802989A22E97B3309FBC33A3C035A7C5
36A9C736AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8
36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC8
36AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836AAC836C8ED
@@ -13862,13 +13862,13 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAE
3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9
3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9
3469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A93469A9
3469A93266A43063A02E609B2C5D972A5992254E7F48586CEAEAEAF8F8F8FDFDFDFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAEB32680982D96B2
2F9DBA31A0BD32A3C034A6C435A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6
3469A93266A430639F2D5F992A59912752872145703E4B5CC5C5C5D1D1D1D5D5D5D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7
D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D6D6D6D6D6D6D3D3D3
8080800C0C0C0000000000000000000505054F4F4FA7A7A7AFAFAFABABAB8491962272872A8DA8
2E99B6319FBC32A3C034A6C435A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6
35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6
35A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C635A8C6
35A8C635A8C635A8C635C6EDFFFFF6A1B8C635A8C635A8C635A8C65CD5F6FFFFFFC1C6C635A8C6
@@ -13902,13 +13902,13 @@ FDFDFDF8F8F8EAEAEA949FAD264F822C5C962E5F9C2F619F3164A13266A43468A83468A83468A8
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3468A83468A83468A83468A83468A83265A430629F2E5F9B2C5C962A5992254D7F48586BEAEAEA
F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1
DCDCDC9EAEB3267F972C95B12F9CB9309FBC32A2BF34A4C235A7C535A7C535A7C535A7C535A7C5
3468A83468A83468A83468A83468A83265A430629F2E5E9A2B5A9329568D234978435264D9D9D9
E6E6E6EBEBEBEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED
ECECECECECECE9E9E9BFBFBF0000000000000000000000003737379A9A9AB6B6B6BEBEBEC4C4C4
BFBFBF909FA424798F2B91AD2F9BB8309EBB32A2BF34A4C235A7C535A7C535A7C535A7C535A7C5
35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5
35A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C535A7C5
35A7C535A7C535A7C535A7C535A7C535A7C535A7C535C5ECFFFFF6A1B6C535A7C535A7C535A7C5
@@ -13942,13 +13942,13 @@ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A1
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3468A83468A83468A83468A83468A83468A83468A83468A83468A83265A430629F2E5F9B2C5C96
2A5992254D7F48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAEB2267F962C95B02F9CB8309EBB32A1BE34A4C135A7C4
3468A83468A83468A83468A83468A83468A83468A83468A83468A83265A430629F2E5F9B2C5C95
2A5890244C7D475669E4E4E4F2F2F2F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F7F7F7F2F2F2D1D1D10707070000001D1D1D838383B7B7B7
C0C0C0CBCBCBD5D5D5D8D8D8CECECE98A8AC257D942C94AF2F9BB7309EBB32A1BE34A4C135A7C4
35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4
35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4
35A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C435A7C4
@@ -13983,12 +13983,12 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F82
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A83468A8
3265A430629F2E5F9B2C5C962A5992254D7F48586BEAEAEAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EAEB2267E952C93AE2E9AB6
3265A430629F2E5F9B2C5C962A5991254D7F48586BE9E9E9F7F7F7FCFCFCFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFDFDFDFBFBFBF4F4F4E5E5E5B8B8B8
929292BDBDBDC0C0C0C9C9C9D6D6D6E1E1E1E8E8E8E7E7E7D8D8D89CACB0267E942C93AE2E9AB6
309DB932A0BD33A3C035A5C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3
35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3
35A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C335A6C3
@@ -14027,9 +14027,9 @@ F8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A13266A43468A83468A83468A83468A8
FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC
9EAEB2257D942B92AD2E99B52F9CB8319FBB33A2BF34A4C134A5C234A5C234A5C234A5C234A5C2
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
FCFCFCF6F6F6E8E8E8D7D7D7CCCCCCCCCCCCD4D4D4DFDFDFEAEAEAF1F1F1F3F3F3EEEEEEDBDBDB
9DADB1257D942B92AD2E99B52F9CB8319FBB33A2BF34A4C134A5C234A5C234A5C234A5C234A5C2
34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2
34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2
34A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C234A5C2
@@ -14068,8 +14068,8 @@ FFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C962E5F9C2F619F3164A13266A4
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FEFEFEFAFAFAF1F1F1DCDCDC9EAEB2257C932B91AD2E98B52F9BB8319EBB33A1BE34A3C134A4C1
FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F0F0F0E6E6E6E0E0E0E2E2E2E9E9E9F0F0F0F7F7F7
FAFAFAF8F8F8F0F0F0DCDCDC9EAEB2257C932B91AD2E98B52F9BB8319EBB33A1BE34A3C134A4C1
34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1
34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1
34A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C134A4C1
@@ -14108,8 +14108,8 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F822B5C95
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9EADB2257B932B90AC2E97B42F9AB7
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F3F3F3F1F1F1
F3F3F3F7F7F7FAFAFAFDFDFDFDFDFDFAFAFAF1F1F1DCDCDC9EADB2257B932B90AC2E97B42F9AB7
319DBA339FBD34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0
34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0
34A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C034A2C0
@@ -14149,7 +14149,7 @@ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB2
FEFEFEFDFDFDFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFEFEFEFAFAFAF1F1F1DCDCDC9DADB2
257A922B8FAB2D96B32F98B6309BB9329EBC33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF
33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF
33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF33A0BF
@@ -14189,7 +14189,7 @@ FFFFFFFFFFFFFDFDFDF8F8F8EAEAEA949FAD264F812B5B952E5F9B2F619E3163A03265A33467A6
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFE
FAFAFAF1F1F1DCDCDC9DADB22479912A8EA92D95B12E97B5309AB8329DBB339FBE339FBE339FBE
339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE
339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE339FBE

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -88,7 +88,7 @@ void changeDiameters(EN_Project ph)
for (i = 1; i <= nLinks; i++)
{
EN_getlinkvalue(ph, i, EN_DIAMETER, &diam);
if (diam == 10) ENsetlinkvalue(i, EN_DIAMETER, 12);
if (diam == 10) EN_setlinkvalue(ph, i, EN_DIAMETER, 12);
}
}
\endcode

View File

@@ -68,7 +68,7 @@ typedef struct Project *EN_Project;
@brief Creates an EPANET project.
@param[out] ph an EPANET project handle that is passed into all other API functions.
@return an error code.
EN_createproject must be called before any other API functions are used.
*/
int DLLEXPORT EN_createproject(EN_Project *ph);
@@ -129,9 +129,9 @@ typedef struct Project *EN_Project;
@param rptFile the name of a report file to be created (or "" if not needed).
@param outFile the name of a binary output file to be created (or "" if not needed).
@return an error code.
This function should be called immediately after ::EN_createproject if an EPANET-formatted
input file will be used to supply network data.
input file will be used to supply network data.
*/
int DLLEXPORT EN_open(EN_Project ph, const char *inpFile, const char *rptFile,
const char *outFile);
@@ -163,19 +163,19 @@ typedef struct Project *EN_Project;
/**
@brief Runs a complete hydraulic simulation with results for all time periods
written to a temporary hydraulics file.
written to a temporary hydraulics file.
@param ph an EPANET project handle.
@return an error code.
Use ::EN_solveH to generate a complete hydraulic solution which can stand alone
or be used as input to a water quality analysis. This function will not allow one to
or be used as input to a water quality analysis. This function will not allow one to
examine intermediate hydraulic results as they are generated. It can also be followed by calls
to ::EN_saveH and ::EN_report to write hydraulic results to the report file.
The sequence ::EN_openH - ::EN_initH - ::EN_runH - ::EN_nextH - ::EN_closeH
The sequence ::EN_openH - ::EN_initH - ::EN_runH - ::EN_nextH - ::EN_closeH
can be used instead to gain access to results at intermediate time periods and
directly adjust link status and control settings as a simulation proceeds.
<b>Example:</b>
\code {.c}
EN_Project ph;
@@ -211,7 +211,7 @@ typedef struct Project *EN_Project;
Call ::EN_openH prior to running the first hydraulic analysis using the
::EN_initH - ::EN_runH - ::EN_nextH sequence. Multiple analyses can be made before
calling ::EN_closeH to close the hydraulic solver.
Do not call this function if ::EN_solveH is being used to run a complete hydraulic
analysis or if hydraulics are being supplied by a previously saved hydraulics file
using ::EN_usehydfile.
@@ -219,14 +219,14 @@ typedef struct Project *EN_Project;
int DLLEXPORT EN_openH(EN_Project ph);
/**
@brief Initializes a network prior to running a hydraulic analysis.
@brief Initializes a network prior to running a hydraulic analysis.
@param ph an EPANET project handle.
@param initFlag a 2-digit initialization flag (see @ref EN_InitHydOption).
@return an error code.
This function initializes storage tank levels, link status and settings, and
the simulation time clock prior to running a hydraulic analysis.
The initialization flag is a two digit number where the 1st (left) digit
indicates if link flows should be re-initialized (1) or not (0), and the
2nd digit indicates if hydraulic results should be saved to a temporary
@@ -239,7 +239,7 @@ typedef struct Project *EN_Project;
- making a subsequent water quality run,
- using ::EN_report to generate a report
- using ::EN_savehydfile to save the binary hydraulics file.
There is no need to save hydraulics if you will be writing custom code to
process hydraulic results as they are generated using the functions ::EN_getnodevalue
and ::EN_getlinkvalue.
@@ -257,7 +257,7 @@ typedef struct Project *EN_Project;
should be treated as a read-only variable.
::EN_initH must have been called prior to running the ::EN_runH - ::EN_nextH loop.
See ::EN_nextH for an example of using this function.
*/
int DLLEXPORT EN_runH(EN_Project ph, long *currentTime);
@@ -280,25 +280,25 @@ typedef struct Project *EN_Project;
- the time interval until the next change in demands occurs
- the time interval until a tank becomes full or empty
- the time interval until a control or rule fires.
<B>Example:</B>
\code {.c}
long t, tstep;
EN_openH(ph);
EN_initH(ph, EN_NOSAVE);
do {
EN_runH(ph, &t);
EN_openH(ph);
EN_initH(ph, EN_NOSAVE);
do {
EN_runH(ph, &t);
// Retrieve hydraulic results for time t
EN_nextH(ph, &tstep);
} while (tstep > 0);
EN_closeH(ph);
EN_nextH(ph, &tstep);
} while (tstep > 0);
EN_closeH(ph);
\endcode
*/
int DLLEXPORT EN_nextH(EN_Project ph, long *tStep);
/**
@brief Transfers a project's hydraulics results from its temporary hydraulics file
to its binary output file, where results are only reported at uniform reporting intervals.
to its binary output file, where results are only reported at uniform reporting intervals.
@param ph an EPANET project handle.
@return an error code.
@@ -316,20 +316,20 @@ typedef struct Project *EN_Project;
Use this function to save the current set of hydraulics results to a file, either for
post-processing or to be used at a later time by calling the ::EN_usehydfile function.
The hydraulics file contains nodal demands and heads and link flows, status, and settings
for all hydraulic time steps, even intermediate ones.
Before calling this function hydraulic results must have been generated and saved by having
called ::EN_solveH or the ::EN_initH - ::EN_runH - ::EN_nextH sequence with the initflag
argument of ::EN_initH set to `EN_SAVE` or `EN_SAVE_AND_INIT`.
argument of ::EN_initH set to `EN_SAVE` or `EN_SAVE_AND_INIT`.
*/
int DLLEXPORT EN_savehydfile(EN_Project ph, char *filename);
/**
@brief Closes the hydraulic solver freeing all of its allocated memory.
@return an error code.
Call ::EN_closeH after all hydraulics analyses have been made using
::EN_initH - ::EN_runH - ::EN_nextH. Do not call this function if ::EN_solveH is being used.
*/
@@ -343,10 +343,10 @@ typedef struct Project *EN_Project;
/**
@brief Runs a complete water quality simulation with results at uniform
reporting intervals written to the project's binary output file.
reporting intervals written to the project's binary output file.
@param ph an EPANET project handle.
@return an error code.
A hydraulic analysis must have been run and saved to a hydraulics file before
calling ::EN_solveQ. This function will not allow one to examine intermediate water
quality results as they are generated. It can be followed by a call to ::EN_report
@@ -355,7 +355,7 @@ typedef struct Project *EN_Project;
One can instead use the ::EN_openQ - ::EN_initQ - ::EN_runQ - ::EN_nextQ - ::EN_closeQ
sequence to gain access to gain access to water quality results at intermediate time
periods.
<b>Example:</b> see ::EN_solveH.
*/
int DLLEXPORT EN_solveQ(EN_Project ph);
@@ -376,7 +376,7 @@ typedef struct Project *EN_Project;
int DLLEXPORT EN_openQ(EN_Project ph);
/**
@brief Initializes a network prior to running a water quality analysis.
@brief Initializes a network prior to running a water quality analysis.
@param ph n EPANET project handle.
@param saveFlag set to `EN_SAVE` (1) if results are to be saved to the project's
binary output file, or to `EN_NOSAVE` (0) if not.
@@ -384,16 +384,16 @@ typedef struct Project *EN_Project;
Call ::EN_initQ prior to running a water quality analysis using ::EN_runQ in
conjunction with either ::EN_nextQ or ::EN_stepQ.
::EN_openQ must have been called prior to calling EN_initQ.
Do not call ::EN_initQ if a complete water quality analysis will be made using ::EN_solveQ.
*/
int DLLEXPORT EN_initQ(EN_Project ph, int saveFlag);
/**
@brief Makes hydraulic and water quality results at the start of the current time
period available to a project's water quality solver.
period available to a project's water quality solver.
@param ph an EPANET project handle.
@param[out] currentTime current simulation time in seconds.
@return an error code.
@@ -402,10 +402,10 @@ typedef struct Project *EN_Project;
start of each hydraulic period in an extended period simulation. Or use it in a loop
with ::EN_stepQ to access results at the start of each water quality time step. See
each of these functions for examples of how to code such loops.
::EN_initQ must have been called prior to running an ::EN_runQ - ::EN_nextQ
(or ::EN_stepQ) loop.
The current time of the simulation is determined from information saved with the
hydraulic analysis that preceded the water quality analysis. Treat it as a read-only
variable.
@@ -415,7 +415,7 @@ typedef struct Project *EN_Project;
/**
@brief Advances a water quality simulation over the time until the next hydraulic event.
@param ph an EPANET project handle.
@param[out] tStep time (in seconds) until the next hydraulic event or 0 if at the end
@param[out] tStep time (in seconds) until the next hydraulic event or 0 if at the end
of the full simulation duration.
@return an error code.
@@ -426,20 +426,20 @@ typedef struct Project *EN_Project;
The value of `tStep` is determined from information produced by the hydraulic analysis
that preceded the water quality analysis. Treat it as a read-only variable.
<b>Example:</b>
\code {.c}
long t, tStep;
EN_solveH(ph); // Generate & save hydraulics
EN_openQ(ph);
EN_initQ(ph, EN_NOSAVE);
do {
EN_runQ(ph, &t);
EN_initQ(ph, EN_NOSAVE);
do {
EN_runQ(ph, &t);
// Monitor results at time t, which
// begins a new hydraulic time period
EN_nextQ(ph, &tStep);
} while (tStep > 0);
EN_closeQ(ph);
EN_nextQ(ph, &tStep);
} while (tStep > 0);
EN_closeQ(ph);
\endcode
*/
int DLLEXPORT EN_nextQ(EN_Project ph, long *tStep);
@@ -454,7 +454,7 @@ typedef struct Project *EN_Project;
quality simulation. It allows one to generate water quality results at each water
quality time step of the simulation, rather than over each hydraulic event period
as with ::EN_nextQ.
Use the argument `timeLeft` to determine when no more calls to ::EN_runQ are needed
because the end of the simulation period has been reached (i.e., when `timeLeft = 0`).
*/
@@ -464,11 +464,11 @@ typedef struct Project *EN_Project;
@brief Closes the water quality solver, freeing all of its allocated memory.
@param ph an EPANET project handle.
@return an error code.
Call ::EN_closeQ after all water quality analyses have been made using the
::EN_initQ - ::EN_runQ - ::EN_nextQ (or ::EN_stepQ) sequence of function calls.
Do not call this function if ::EN_solveQ is being used.
Do not call this function if ::EN_solveQ is being used.
*/
int DLLEXPORT EN_closeQ(EN_Project ph);
@@ -490,12 +490,12 @@ typedef struct Project *EN_Project;
@brief Writes simulation results in a tabular format to a project's report file.
@param ph an EPANET project handle.
@return an error code
Either a full hydraulic analysis or full hydraulic and water quality analysis must
have been run, with results saved to file, before ::EN_report is called. In the
former case, ::EN_saveH must also be called first to transfer results from the
project's intermediate hydraulics file to its output file.
project's intermediate hydraulics file to its output file.
The format of the report is controlled by commands issued with ::EN_setreport.
*/
int DLLEXPORT EN_report(EN_Project ph);
@@ -504,15 +504,15 @@ typedef struct Project *EN_Project;
@brief Resets a project's report options to their default values.
@param ph an EPANET project handle.
@return an error code
After calling this function the default reporting options are in effect. These are:
- no status report
- no energy report
- no nodes reported on
- no links reported on
- node variables reported to 2 decimal places
- link variables reported to 2 decimal places (3 for friction factor)
- node variables reported are elevation, head, pressure, and quality
After calling this function the default reporting options are in effect. These are:
- no status report
- no energy report
- no nodes reported on
- no links reported on
- node variables reported to 2 decimal places
- link variables reported to 2 decimal places (3 for friction factor)
- node variables reported are elevation, head, pressure, and quality
- link variables reported are flow, velocity, and head loss.
*/
int DLLEXPORT EN_resetreport(EN_Project ph);
@@ -522,10 +522,10 @@ typedef struct Project *EN_Project;
@param ph an EPANET project handle.
@param format a report formatting command.
@return an error code
Acceptable report formatting commands are described in Appendix C of the
<a href="https://nepis.epa.gov/Adobe/PDF/P1007WWU.pdf">EPANET 2 Users Manual</a>.
Formatted results of a simulation can be written to a project's report file
using the ::EN_report function.
*/
@@ -536,18 +536,18 @@ typedef struct Project *EN_Project;
@param ph an EPANET project handle.
@param level a status reporting level code (see @ref EN_StatusReport).
@return an error code.
Status reporting writes changes in the hydraulics status of network elements to a
project's report file as a hydraulic simulation unfolds. There are three levels
of reporting: `EN_NO_REPORT` (no status reporting), `EN_NORMAL_REPORT` (normal
reporting) `EN_FULL_REPORT` (full status reporting).
The full status report contains information at each trial of the solution to the
system hydraulic equations at each time step of a simulation. It is useful mainly
for debugging purposes.
for debugging purposes.
If many hydraulic analyses will be run in the application it is recommended that
status reporting be turned off (`level = EN_NO_REPORT`).
status reporting be turned off (`level = EN_NO_REPORT`).
*/
int DLLEXPORT EN_setstatusreport(EN_Project ph, int level);
@@ -576,7 +576,7 @@ typedef struct Project *EN_Project;
@param[out] errmsg the error message generated by the error code
@param maxLen maximum number of characters that errmsg can hold
@return an error code
Error message strings should be at least @ref EN_MAXMSG characters in length.
*/
int DLLEXPORT EN_geterror(int errcode, char *errmsg, int maxLen);
@@ -620,9 +620,9 @@ typedef struct Project *EN_Project;
@param ph an EPANET project handle.
@param[out] units a flow units code (see @ref EN_FlowUnits)
@return an error code.
Flow units in liters or cubic meters implies that SI metric units are used for all
other quantities in addition to flow. Otherwise US Customary units are employed.
other quantities in addition to flow. Otherwise US Customary units are employed.
*/
int DLLEXPORT EN_getflowunits(EN_Project ph, int *units);
@@ -631,9 +631,9 @@ typedef struct Project *EN_Project;
@param ph an EPANET project handle.
@param units a flow units code (see @ref EN_FlowUnits)
@return an error code.
Flow units in liters or cubic meters implies that SI metric units are used for all
other quantities in addition to flow. Otherwise US Customary units are employed.
other quantities in addition to flow. Otherwise US Customary units are employed.
*/
int DLLEXPORT EN_setflowunits(EN_Project ph, int units);
@@ -684,11 +684,11 @@ typedef struct Project *EN_Project;
@param chemUnits the concentration units of the constituent.
@param traceNode the ID name of the node being traced if `qualType = EN_TRACE`.
@return an error code.
Chemical name and units can be an empty string if the analysis is not for a chemical.
The same holds for the trace node if the analysis is not for source tracing.
Note that the trace node is specified by ID name and not by index.
The same holds for the trace node if the analysis is not for source tracing.
Note that the trace node is specified by ID name and not by index.
*/
int DLLEXPORT EN_setqualtype(EN_Project ph, int qualType, char *chemName,
char *chemUnits, char *traceNode);
@@ -705,7 +705,7 @@ typedef struct Project *EN_Project;
@param id the ID name of the node to be added.
@param nodeType the type of node being added (see @ref EN_NodeType)
@return an error code.
When a new node is created all of it's properties (see @ref EN_NodeProperty) are set to 0.
*/
int DLLEXPORT EN_addnode(EN_Project ph, char *id, int nodeType);
@@ -769,10 +769,10 @@ typedef struct Project *EN_Project;
@brief Retrieves a property value for a node.
@param ph an EPANET project handle.
@param index a node's index.
@param property the property to retrieve (see @ref EN_NodeProperty).
@param property the property to retrieve (see @ref EN_NodeProperty).
@param[out] value the current value of the property.
@return an error code.
Values are returned in units that depend on the units used for flow rate
(see @ref Units).
*/
@@ -785,7 +785,7 @@ typedef struct Project *EN_Project;
@param property the property to set (see @ref EN_NodeProperty).
@param value the new value for the property.
@return an error code.
Values are in units that depend on the units used for flow rate (see @ref Units).
*/
int DLLEXPORT EN_setnodevalue(EN_Project ph, int index, int property, double value);
@@ -798,7 +798,7 @@ typedef struct Project *EN_Project;
@param dmnd the value of the junction's primary base demand.
@param dmndpat the ID name of the demand's time pattern ("" for no pattern)
@return an error code.
These properties have units that depend on the units used for flow rate (see @ref Units).
*/
int DLLEXPORT EN_setjuncdata(EN_Project ph, int index, double elev, double dmnd,
@@ -816,7 +816,7 @@ typedef struct Project *EN_Project;
@param minvol the volume of the tank at its minimum water level.
@param volcurve the name of the tank's volume curve ("" for no curve)
@return an error code.
These properties have units that depend on the units used for flow rate (see @ref Units).
*/
int DLLEXPORT EN_settankdata(EN_Project ph, int index, double elev, double initlvl,
@@ -856,7 +856,7 @@ typedef struct Project *EN_Project;
@param[out] preq Pressure required to deliver full demand.
@param[out] pexp Pressure exponent in demand function.
@return an error code.
Parameters `pmin`, `preq`, and `pexp` are only used when the demand model is `EN_PDA`.
*/
int DLLEXPORT EN_getdemandmodel(EN_Project ph, int *type, double *pmin,
@@ -870,13 +870,13 @@ typedef struct Project *EN_Project;
@param preq Pressure required to deliver full demand.
@param pexp Pressure exponent in demand function.
@return an error code.
Set `type` to `EN_DDA` for a traditional demand driven analysis (in which case the
remaining three parameter values are ignored) or to `EN_PDA` for a pressure driven
analysis. In the latter case a node's demand is computed as:
> `Dfull * [ (P - pmin) / (preq - pmin) ] ^ pexp`
where `Dfull` is the full demand and `P` is the current pressure.
Setting `preq` equal to `pmin` will result in a solution with the smallest amount of
demand reductions needed to insure that no node delivers positive demand at a pressure
below `pmin`.
@@ -922,7 +922,7 @@ typedef struct Project *EN_Project;
@param demandIndex the index of a demand category for the node (starting from 1).
@param[out] patIndex the index of the category's time pattern.
@return an error code.
A returned pattern index of 0 indicates that no time pattern has been assigned to the
demand category.
*/
@@ -936,7 +936,7 @@ typedef struct Project *EN_Project;
@param demandIndex the index of one of the node's demand categories (starting from 1).
@param patIndex the index of the time pattern assigned to the category.
@return an error code.
Specifying a pattern index of 0 indicates that no time pattern is assigned to the
demand category.
*/
@@ -949,7 +949,7 @@ typedef struct Project *EN_Project;
@param demandIndex the index of one of the node's demand categories (starting from 1).
@param[out] demandName The name of the selected category.
@return an error code.
`demandName` must be sized to contain at least @ref EN_MAXID characters.
*/
int DLLEXPORT EN_getdemandname(EN_Project ph, int nodeIndex, int demandIndex, char *demandName);
@@ -961,7 +961,7 @@ typedef struct Project *EN_Project;
@param demandIdx the index of one of the node's demand categories (starting from 1).
@param demandName the new name assigned to the category.
@return Error code.
The category name must contain no more than @ref EN_MAXID characters.
*/
int DLLEXPORT EN_setdemandname(EN_Project ph, int nodeIndex, int demandIdx, char *demandName);
@@ -980,15 +980,15 @@ typedef struct Project *EN_Project;
@param fromNode The ID name of the link's starting node.
@param toNode The ID name of the link's ending node.
@return an error code.
A new pipe is assigned a diameter of 10 inches (or 254 mm), a length of 100
feet (or meters), a roughness coefficient of 100 and 0 for all other properties.
A new pump has a status of `EN_OPEN`, a speed setting of 1, and has no pump
curve or power rating assigned to it.
A new valve has a diameter of 10 inches (or 254 mm) and all other properties set to 0.
See @ref EN_LinkProperty.
*/
int DLLEXPORT EN_addlink(EN_Project ph, char *id, int linkType, char *fromNode, char *toNode);
@@ -1088,7 +1088,7 @@ typedef struct Project *EN_Project;
@param property the property to retrieve (see @ref EN_LinkProperty).
@param[out] value the current value of the property.
@return an error code.
Values are returned in units that depend on the units used for flow rate (see @ref Units).
*/
int DLLEXPORT EN_getlinkvalue(EN_Project ph, int index, int property, double *value);
@@ -1100,7 +1100,7 @@ typedef struct Project *EN_Project;
@param property the property to set (see @ref EN_LinkProperty).
@param value the new value for the property.
@return an error code.
Values are in units that depend on the units used for flow rate (see @ref Units).
*/
int DLLEXPORT EN_setlinkvalue(EN_Project ph, int index, int property, double value);
@@ -1114,7 +1114,7 @@ typedef struct Project *EN_Project;
@param rough the pipe's roughness coefficient.
@param mloss the pipe's minor loss coefficient.
@return an error code.
These properties have units that depend on the units used for flow rate (see @ref Units).
*/
int DLLEXPORT EN_setpipedata(EN_Project ph, int index, double length, double diam,
@@ -1165,7 +1165,7 @@ typedef struct Project *EN_Project;
@param ph an EPANET project handle.
@param id the ID name of the pattern to add.
@return an error code.
The new pattern contains a single time period whose factor is 1.0.
*/
int DLLEXPORT EN_addpattern(EN_Project ph, char *id);
@@ -1235,11 +1235,11 @@ typedef struct Project *EN_Project;
@param values an array of new pattern factor values.
@param len the number of factor values supplied.
@return an error code.
`values` is a zero-based array that contains `len` elements.
`values` is a zero-based array that contains `len` elements.
Use this function to redefine (and resize) a time pattern all at once;
use @ref EN_setpatternvalue to revise pattern factors one at a time.
use @ref EN_setpatternvalue to revise pattern factors one at a time.
*/
int DLLEXPORT EN_setpattern(EN_Project ph, int index, double *values, int len);
@@ -1254,7 +1254,7 @@ typedef struct Project *EN_Project;
@param ph an EPANET project handle.
@param id The ID name of the curve to be added.
@return an error code.
The new curve contains a single data point (1.0, 1.0).
*/
int DLLEXPORT EN_addcurve(EN_Project ph, char *id);
@@ -1346,11 +1346,11 @@ typedef struct Project *EN_Project;
@param yValues an array of new y-values for the curve.
@param nPoints the new number of data points for the curve.
@return an error code.
`xValues` and `yValues` are zero-based arrays that contains `nPoints` elements.
`xValues` and `yValues` are zero-based arrays that contains `nPoints` elements.
Use this function to redefine (and resize) a curve all at once;
use @ref EN_setcurvevalue to revise a curve's data points one at a time.
use @ref EN_setcurvevalue to revise a curve's data points one at a time.
*/
int DLLEXPORT EN_setcurve(EN_Project ph, int index, double *xValues,
double *yValues, int nPoints);
@@ -1429,7 +1429,7 @@ typedef struct Project *EN_Project;
@param ph an EPANET project handle.
@param rule text of the rule following the format used in an EPANET input file.
@return an error code.
Consult Appendix C of the <a href="https://nepis.epa.gov/Adobe/PDF/P1007WWU.pdf">EPANET 2 Users Manual</a>
to learn about a rule's format. Each clause of the rule must end with a newline character `\n`.
*/
@@ -1462,8 +1462,8 @@ typedef struct Project *EN_Project;
@param index the rule's index (starting from 1).
@param[out] id the rule's ID name.
@return Error code.
The ID name must be sized to hold at least @ref EN_MAXID characters.
The ID name must be sized to hold at least @ref EN_MAXID characters.
*/
int DLLEXPORT EN_getruleID(EN_Project ph, int index, char* id);

View File

@@ -191,7 +191,7 @@ typedef enum {
EN_PUMP_CLOSED = 2, //!< Pump closed
EN_PUMP_OPEN = 3, //!< Pump open
EN_PUMP_XFLOW = 5 //!< Pump open - cannot supply flow
} EN_PumpStateType;
} EN_PumpStateType;
/// Types of water quality analyses
/**
@@ -249,7 +249,7 @@ typedef enum {
EN_LPM = 6, //!< Liters per minute
EN_MLD = 7, //!< Million liters per day
EN_CMH = 8, //!< Cubic meters per hour
EN_CMD = 9 //!< Cubic meters per day
EN_CMD = 9 //!< Cubic meters per day
} EN_FlowUnits;
/// Types of demand models
@@ -261,7 +261,7 @@ A demand driven analysis requires that a junction's full demand be supplied
in each time period independent of how much pressure is available. A pressure
driven analysis makes demand be a power function of pressure, up to the point
where the full demand is met.
*/
*/
typedef enum {
EN_DDA = 0, //!< Demand driven analysis
EN_PDA = 1 //!< Pressure driven analysis
@@ -272,7 +272,7 @@ typedef enum {
These options specify hydraulic convergence criteria, choice of head loss formula, and
several other parameters applied on a network-wide basis. They are accessed using the
@ref EN_getoption and @ref EN_setoption functions.
*/
*/
typedef enum {
EN_TRIALS = 0, //!< Maximum hydraulic trials allowed
EN_ACCURACY = 1, //!< Maximum total relative flow change for hydraulic convergence
@@ -308,7 +308,7 @@ These options determine what kind of statistical post-processing should be done
the time series of simulation results generated before they are reported using
@ref EN_report. An option can be chosen by using `STATISTIC option` as the argument
to @ref EN_setreport.
*/
*/
typedef enum {
EN_SERIES = 0, //!< Report all time series points
EN_AVERAGE = 1, //!< Report average value over simulation period
@@ -408,7 +408,7 @@ typedef enum {
EN_R_TIME = 9, //!< Elapsed simulation time
EN_R_CLOCKTIME = 10, //!< Time of day
EN_R_FILLTIME = 11, //!< Time to fill a tank
EN_R_DRAINTIME = 12 //!< Time to drain a tank
EN_R_DRAINTIME = 12 //!< Time to drain a tank
} EN_RuleVariable;
/// Comparison operators used in rule-based controls
@@ -422,7 +422,7 @@ typedef enum {
EN_R_IS = 6, //!< Is equal to
EN_R_NOT = 7, //!< Is not equal to
EN_R_BELOW = 8, //!< Is below
EN_R_ABOVE = 9 //!< Is above
EN_R_ABOVE = 9 //!< Is above
} EN_RuleOperator;
/// Link status codes used in rule-based controls

175
include/epanet_py.h Normal file
View File

@@ -0,0 +1,175 @@
/*
******************************************************************************
Project: OWA EPANET
Version: 2.2
Module: epanet_py.h
Description: EPANET API functions for Python SWIG wrap
Authors: see AUTHORS
Copyright: see AUTHORS
License: see LICENSE
Last Updated: 12/10/2018
******************************************************************************
*/
#ifndef EPANET_PY_H
#define EPANET_PY_H
// Opaque pointer to project
typedef void *Handle;
#include "epanet2_enums.h"
#include "epanet2_export.h"
#if defined(__cplusplus)
extern "C" {
#endif
int DLLEXPORT proj_create(Handle *ph_out);
int DLLEXPORT proj_delete(Handle *ph_inout);
int DLLEXPORT proj_run(Handle ph, const char *input_path, const char *report_path, const char *output_path);
int DLLEXPORT proj_init(Handle ph, const char *rptFile, const char *outFile, EN_FlowUnits unitsType, EN_HeadLossType headLossType);
int DLLEXPORT proj_open(Handle ph, const char *inpFile, const char *rptFile, const char *binOutFile);
int DLLEXPORT proj_savefile(Handle ph, const char *inpfilename);
int DLLEXPORT proj_close(Handle ph);
int DLLEXPORT hydr_solve(Handle ph);
int DLLEXPORT hydr_save(Handle ph);
int DLLEXPORT hydr_open(Handle ph);
int DLLEXPORT hydr_init(Handle ph, EN_InitHydOption saveFlag);
int DLLEXPORT hydr_run(Handle ph, long *currentTime);
int DLLEXPORT hydr_next(Handle ph, long *tStep);
int DLLEXPORT hydr_close(Handle ph);
int DLLEXPORT hydr_savefile(Handle ph, char *filename);
int DLLEXPORT hydr_usefile(Handle ph, char *filename);
int DLLEXPORT qual_solve(Handle ph);
int DLLEXPORT qual_open(Handle ph);
int DLLEXPORT qual_init(Handle ph, EN_InitHydOption saveFlag);
int DLLEXPORT qual_run(Handle ph, long *currentTime);
int DLLEXPORT qual_next(Handle ph, long *tStep);
int DLLEXPORT qual_step(Handle ph, long *timeLeft);
int DLLEXPORT qual_close(Handle ph);
int DLLEXPORT rprt_writeline(Handle ph, char *line);
int DLLEXPORT rprt_writeresults(Handle ph);
int DLLEXPORT rprt_reset(Handle ph);
int DLLEXPORT rprt_set(Handle ph, char *reportCommand);
int DLLEXPORT rprt_setlevel(Handle ph, EN_StatusReport code);
int DLLEXPORT rprt_getcount(Handle ph, EN_CountType code, int *count);
int DLLEXPORT rprt_anlysstats(Handle ph, EN_AnalysisStatistic code, double* value);
int DLLEXPORT anlys_getoption(Handle ph, EN_Option code, double *value);
int DLLEXPORT anlys_setoption(Handle ph, EN_Option code, double value);
int DLLEXPORT anlys_getflowunits(Handle ph, int *code);
int DLLEXPORT anlys_setflowunits(Handle ph, EN_FlowUnits code);
int DLLEXPORT anlys_gettimeparam(Handle ph, EN_TimeParameter code, long *value);
int DLLEXPORT anlys_settimeparam(Handle ph, EN_TimeParameter code, long value);
int DLLEXPORT anlys_getqualinfo(Handle ph, int *qualcode, char *chemname, char *chemunits, int *tracenode);
int DLLEXPORT anlys_getqualtype(Handle ph, int *qualcode, int *tracenode);
int DLLEXPORT anlys_setqualtype(Handle ph, EN_QualityType qualcode, char *chemname, char *chemunits, char *tracenode);
int DLLEXPORT node_add(Handle ph, char *id, EN_NodeType nodeType);
int DLLEXPORT node_delete(Handle ph, int index, int actionCode);
int DLLEXPORT node_getindex(Handle ph, char *id, int *index);
int DLLEXPORT node_getid(Handle ph, int index, char *id);
int DLLEXPORT node_setid(Handle ph, int index, char *newid);
int DLLEXPORT node_gettype(Handle ph, int index, int *code);
int DLLEXPORT node_getvalue(Handle ph, int index, EN_NodeProperty code, double *value);
int DLLEXPORT node_setvalue(Handle ph, int index, EN_NodeProperty code, double value);
int DLLEXPORT node_getcoord(Handle ph, int index, double *x, double *y);
int DLLEXPORT node_setcoord(Handle ph, int index, double x, double y);
int DLLEXPORT dmnd_getmodel(Handle ph, int *type, double *pmin, double *preq, double *pexp);
int DLLEXPORT dmnd_setmodel(Handle ph, int type, double pmin, double preq, double pexp);
int DLLEXPORT dmnd_getcount(Handle ph, int nodeIndex, int *numDemands);
int DLLEXPORT dmnd_getbase(Handle ph, int nodeIndex, int demandIndex, double *baseDemand);
int DLLEXPORT dmnd_setbase(Handle ph, int nodeIndex, int demandIndex, double baseDemand);
int DLLEXPORT dmnd_getpattern(Handle ph, int nodeIndex, int demandIndex, int *pattIndex);
int DLLEXPORT dmnd_setpattern(Handle ph, int nodeIndex, int demandIndex, int patIndex);
int DLLEXPORT dmnd_getname(Handle ph, int nodeIndex, int demandIdx, char *demandName);
int DLLEXPORT dmnd_setname(Handle ph, int nodeIndex, int demandIdx, char *demandName);
int DLLEXPORT link_add(Handle ph, char *id, EN_LinkType linkType, char *fromNode, char *toNode);
int DLLEXPORT link_delete(Handle ph, int index, int actionCode);
int DLLEXPORT link_getindex(Handle ph, char *id, int *index);
int DLLEXPORT link_getid(Handle ph, int index, char *id);
int DLLEXPORT link_setid(Handle ph, int index, char *newid);
int DLLEXPORT link_gettype(Handle ph, int index, int *code);
int DLLEXPORT link_settype(Handle ph, int *index, EN_LinkType type, int actionCode);
int DLLEXPORT link_getnodes(Handle ph, int index, int *node1, int *node2);
int DLLEXPORT link_setnodes(Handle ph, int index, int node1, int node2);
int DLLEXPORT link_getvalue(Handle ph, int index, EN_LinkProperty code, double *value);
int DLLEXPORT link_setvalue(Handle ph, int index, int code, double v);
int DLLEXPORT pump_gettype(Handle ph, int linkIndex, int *outType);
int DLLEXPORT pump_getheadcurveindex(Handle ph, int pumpIndex, int *curveIndex);
int DLLEXPORT pump_setheadcurveindex(Handle ph, int pumpIndex, int curveIndex);
int DLLEXPORT ptrn_add(Handle ph, char *id);
int DLLEXPORT ptrn_getindex(Handle ph, char *id, int *index);
int DLLEXPORT ptrn_getid(Handle ph, int index, char *id);
int DLLEXPORT ptrn_getlength(Handle ph, int index, int *len);
int DLLEXPORT ptrn_getvalue(Handle ph, int index, int period, double *value);
int DLLEXPORT ptrn_setvalue(Handle ph, int index, int period, double value);
int DLLEXPORT ptrn_getavgvalue(Handle ph, int index, double *value);
int DLLEXPORT ptrn_set(Handle ph, int index, double *f, int len);
int DLLEXPORT curv_add(Handle ph, char *id);
int DLLEXPORT curv_getindex(Handle ph, char *id, int *index);
int DLLEXPORT curv_getid(Handle ph, int index, char *id);
int DLLEXPORT curv_getlength(Handle ph, int index, int *len);
int DLLEXPORT curv_gettype(Handle ph, int curveIndex, int *outType);
int DLLEXPORT curv_getvalue(Handle ph, int curveIndex, int pointIndex, double *x, double *y);
int DLLEXPORT curv_setvalue(Handle ph, int curveIndex, int pointIndex, double x, double y);
int DLLEXPORT curv_get(Handle ph, int curveIndex, char* id, int *nValues, double **xValues, double **yValues);
int DLLEXPORT curv_set(Handle ph, int index, double *x, double *y, int len);
int DLLEXPORT scntl_add(Handle ph, int type, int linkIndex, double setting, int nodeIndex, double level, int *index);
int DLLEXPORT scntl_delete(Handle ph, int index);
int DLLEXPORT scntl_get(Handle ph, int controlIndex, int *controlType, int *linkIndex, double *setting, int *nodeIndex, double *level);
int DLLEXPORT scntl_set(Handle ph, int cindex, int ctype, int lindex, double setting, int nindex, double level);
int DLLEXPORT rcntl_add(Handle ph, char *rule);
int DLLEXPORT rcntl_delete(Handle ph, int index);
int DLLEXPORT rcntl_get(Handle ph, int index, int *nPremises, int *nThenActions, int *nElseActions, double *priority);
int DLLEXPORT rcntl_getid(Handle ph, int index, char* id);
int DLLEXPORT rcntl_getpremise(Handle ph, int ruleIndex, int premiseIndex, int *logop, int *object, int *objIndex, int *variable, int *relop, int *status, double *value);
int DLLEXPORT rcntl_setpremise(Handle ph, int ruleIndex, int premiseIndex, int logop, int object, int objIndex, int variable, int relop, int status, double value);
int DLLEXPORT rcntl_setpremiseindex(Handle ph, int ruleIndex, int premiseIndex, int objIndex);
int DLLEXPORT rcntl_setpremisestatus(Handle ph, int ruleIndex, int premiseIndex, int status);
int DLLEXPORT rcntl_setpremisevalue(Handle ph, int ruleIndex, int premiseIndex, double value);
int DLLEXPORT rcntl_getthenaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting);
int DLLEXPORT rcntl_setthenaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting);
int DLLEXPORT rcntl_getelseaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting);
int DLLEXPORT rcntl_setelseaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting);
int DLLEXPORT rcntl_setrulepriority(Handle ph, int index, double priority);
void DLLEXPORT err_clear(Handle ph);
int DLLEXPORT err_check(Handle ph, char** msg_buffer);
void DLLEXPORT toolkit_free(void **memory);
int DLLEXPORT toolkit_getversion(int *version);
#if defined(__cplusplus)
}
#endif
#endif //EPANET_PY_H

807
src/epanet_py.c Normal file
View File

@@ -0,0 +1,807 @@
/*
******************************************************************************
Project: OWA EPANET
Version: 2.2
Module: epanet_py.c
Description: EPANET API functions for Python SWIG wrap
Authors: see AUTHORS
Copyright: see AUTHORS
License: see LICENSE
Last Updated: 12/10/2018
******************************************************************************
*/
#include <stdlib.h>
#include <string.h>
#include "epanet_py.h"
#include "util/errormanager.h"
#include "epanet2_2.h"
#include "text.h"
#include "types.h"
typedef struct {
Project *project;
error_handle_t *error;
}handle_t;
// Extern functions
extern char *geterrmsg(int, char *);
// Local functions
void error_lookup(int errcode, char *errmsg, int len);
int DLLEXPORT proj_create(Handle *ph)
{
handle_t *handle = (handle_t *)calloc(1, sizeof(handle_t));
if (handle != NULL)
{
EN_createproject(&handle->project);
handle->error = error_new_manager(&error_lookup);
*ph = handle;
return 0;
}
return -1;
}
int DLLEXPORT proj_delete(Handle *ph)
{
handle_t *handle = (handle_t *)*ph;
if (handle == NULL)
return -1;
else
{
EN_deleteproject(&handle->project);
error_dst_manager(handle->error);
}
free(handle);
*ph = NULL;
return 0;
}
int DLLEXPORT proj_run(Handle ph, const char *input_path,
const char *report_path, const char *output_path)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_runproject(pr->project, input_path, report_path, output_path, NULL));
}
int DLLEXPORT proj_init(Handle ph, const char *rptFile, const char *outFile,
EN_FlowUnits unitsType, EN_HeadLossType headLossType)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_init(pr->project, rptFile, outFile, unitsType, headLossType));
}
int DLLEXPORT proj_open(Handle ph, const char *inpFile, const char *rptFile,
const char *binOutFile)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_open(pr->project, inpFile, rptFile, binOutFile));
}
int DLLEXPORT proj_savefile(Handle ph, const char *filename)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_saveinpfile(pr->project, filename));
}
int DLLEXPORT proj_close(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_close(pr->project));
}
int DLLEXPORT hydr_solve(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_solveH(pr->project));
}
int DLLEXPORT hydr_save(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_saveH(pr->project));
}
int DLLEXPORT hydr_open(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_openH(pr->project));
}
int DLLEXPORT hydr_init(Handle ph, EN_InitHydOption saveFlag)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_initH(pr->project, saveFlag));
}
int DLLEXPORT hydr_run(Handle ph, long *currentTime)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_runH(pr->project, currentTime));
}
int DLLEXPORT hydr_next(Handle ph, long *tStep)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_nextH(pr->project, tStep));
}
int DLLEXPORT hydr_close(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_closeH(pr->project));
}
int DLLEXPORT hydr_savefile(Handle ph, char *filename)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_savehydfile(pr->project, filename));
}
int DLLEXPORT hydr_usefile(Handle ph, char *filename)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_usehydfile(pr->project, filename));
}
int DLLEXPORT qual_solve(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_solveQ(pr->project));
}
int DLLEXPORT qual_open(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_openQ(pr->project));
}
int DLLEXPORT qual_init(Handle ph, EN_InitHydOption saveFlag)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_initQ(pr->project, saveFlag));
}
int DLLEXPORT qual_run(Handle ph, long *currentTime)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_runQ(pr->project, currentTime));
}
int DLLEXPORT qual_next(Handle ph, long *tStep)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_nextQ(pr->project, tStep));
}
int DLLEXPORT qual_step(Handle ph, long *timeLeft)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_stepQ(pr->project, timeLeft));
}
int DLLEXPORT qual_close(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_closeQ(pr->project));
}
int DLLEXPORT rprt_writeline(Handle ph, char *line)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_writeline(pr->project, line));
}
int DLLEXPORT rprt_writeresults(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_report(pr->project));
}
int DLLEXPORT rprt_reset(Handle ph)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_resetreport(pr->project));
}
int DLLEXPORT rprt_set(Handle ph, char *reportCommand)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setreport(pr->project, reportCommand));
}
int DLLEXPORT rprt_setlevel(Handle ph, EN_StatusReport code)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setstatusreport(pr->project, code));
}
int DLLEXPORT rprt_getcount(Handle ph, EN_CountType code, int *count)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcount(pr->project, code, count));
}
int DLLEXPORT rprt_anlysstats(Handle ph, EN_AnalysisStatistic code, double* value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getstatistic(pr->project, code, value));
}
int DLLEXPORT anlys_getoption(Handle ph, EN_Option code, double *value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getoption(pr->project, (int)code, value));
}
int DLLEXPORT anlys_setoption(Handle ph, EN_Option code, double value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setoption(pr->project, (int)code, value));
}
int DLLEXPORT anlys_getflowunits(Handle ph, int *code)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getflowunits(pr->project, code));
}
int DLLEXPORT anlys_setflowunits(Handle ph, EN_FlowUnits code)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setflowunits(pr->project, code));
}
int DLLEXPORT anlys_gettimeparam(Handle ph, EN_TimeParameter code, long *value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_gettimeparam(pr->project, code, value));
}
int DLLEXPORT anlys_settimeparam(Handle ph, EN_TimeParameter code, long value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_settimeparam(pr->project, code, value));
}
int DLLEXPORT anlys_getqualinfo(Handle ph, int *qualcode, char *chemname, char *chemunits, int *tracenode)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getqualinfo(pr->project, qualcode, chemname, chemunits, tracenode));
}
int DLLEXPORT anlys_getqualtype(Handle ph, int *qualcode, int *tracenode)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getqualtype(pr->project, qualcode, tracenode));
}
int DLLEXPORT anlys_setqualtype(Handle ph, EN_QualityType qualcode, char *chemname, char *chemunits, char *tracenode)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setqualtype(pr->project, qualcode, chemname, chemunits, tracenode));
}
int DLLEXPORT node_add(Handle ph, char *id, EN_NodeType nodeType)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_addnode(pr->project, id, nodeType));
}
int DLLEXPORT node_delete(Handle ph, int index, int actionCode)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_deletenode(pr->project, index, actionCode));
}
int DLLEXPORT node_getindex(Handle ph, char *id, int *index)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getnodeindex(pr->project, id, index));
}
int DLLEXPORT node_getid(Handle ph, int index, char *id)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getnodeid(pr->project, index, id));
}
int DLLEXPORT node_setid(Handle ph, int index, char *newid)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getnodeid(pr->project, index, newid));
}
int DLLEXPORT node_gettype(Handle ph, int index, int *code)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getnodetype(pr->project, index, code));
}
int DLLEXPORT node_getvalue(Handle ph, int index, EN_NodeProperty code, double *value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getnodevalue(pr->project, index, (int)code, value));
}
int DLLEXPORT node_setvalue(Handle ph, int index, EN_NodeProperty code, double value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setnodevalue(pr->project, index, (int)code, value));
}
int DLLEXPORT node_getcoord(Handle ph, int index, double *x, double *y)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcoord(pr->project, index, x, y));
}
int DLLEXPORT node_setcoord(Handle ph, int index, double x, double y)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setcoord(pr->project, index, x, y));
}
int DLLEXPORT dmnd_getmodel(Handle ph, int *type, double *pmin, double *preq, double *pexp)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getdemandmodel(pr->project, type, pmin, preq, pexp));
}
int DLLEXPORT dmnd_setmodel(Handle ph, int type, double pmin, double preq, double pexp)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setdemandmodel(pr->project, type, pmin, preq, pexp));
}
int DLLEXPORT dmnd_getcount(Handle ph, int nodeIndex, int *numDemands)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getnumdemands(pr->project, nodeIndex, numDemands));
}
int DLLEXPORT dmnd_getbase(Handle ph, int nodeIndex, int demandIndex, double *baseDemand)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getbasedemand(pr->project, nodeIndex, demandIndex, baseDemand));
}
int DLLEXPORT dmnd_setbase(Handle ph, int nodeIndex, int demandIndex, double baseDemand)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setbasedemand(pr->project, nodeIndex, demandIndex, baseDemand));
}
int DLLEXPORT dmnd_getpattern(Handle ph, int nodeIndex, int demandIndex, int *patIndex)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getdemandpattern(pr->project, nodeIndex, demandIndex, patIndex));
}
int DLLEXPORT dmnd_setpattern(Handle ph, int nodeIndex, int demandIndex, int patIndex)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setdemandpattern(pr->project, nodeIndex, demandIndex, patIndex));
}
int DLLEXPORT dmnd_getname(Handle ph, int nodeIndex, int demandIdx, char *demandName)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getdemandname(pr->project, nodeIndex, demandIdx, demandName));
}
int DLLEXPORT dmnd_setname(Handle ph, int nodeIndex, int demandIdx, char *demandName)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setdemandname(pr->project, nodeIndex, demandIdx, demandName));
}
int DLLEXPORT link_add(Handle ph, char *id, EN_LinkType linkType, char *fromNode, char *toNode)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_addlink(pr->project, id, linkType, fromNode, toNode));
}
int DLLEXPORT link_delete(Handle ph, int index, int actionCode)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_deletelink(pr->project, index, actionCode));
}
int DLLEXPORT link_getindex(Handle ph, char *id, int *index)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getlinkindex(pr->project, id, index));
}
int DLLEXPORT link_getid(Handle ph, int index, char *id)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getlinkid(pr->project, index, id));
}
int DLLEXPORT link_setid(Handle ph, int index, char *newid)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setlinkid(pr->project, index, newid));
}
int DLLEXPORT link_gettype(Handle ph, int index, int *code)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getlinktype(pr->project, index, code));
}
int DLLEXPORT link_settype(Handle ph, int *index, EN_LinkType type, int actionCode)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setlinktype(pr->project, index, type, actionCode));
}
int DLLEXPORT link_getnodes(Handle ph, int index, int *node1, int *node2)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getlinknodes(pr->project, index, node1, node2));
}
int DLLEXPORT link_setnodes(Handle ph, int index, int node1, int node2)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setlinknodes(pr->project, index, node1, node2));
}
int DLLEXPORT link_getvalue(Handle ph, int index, EN_LinkProperty code, double *value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getlinkvalue(pr->project, index, code, value));
}
int DLLEXPORT link_setvalue(Handle ph, int index, int code, double value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setlinkvalue(pr->project, index, code, value));
}
int DLLEXPORT pump_gettype(Handle ph, int linkIndex, int *outType)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getpumptype(pr->project, linkIndex, outType));
}
int DLLEXPORT pump_getheadcurveindex(Handle ph, int pumpIndex, int *curveIndex)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getheadcurveindex(pr->project, pumpIndex, curveIndex));
}
int DLLEXPORT pump_setheadcurveindex(Handle ph, int pumpIndex, int curveIndex)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setheadcurveindex(pr->project, pumpIndex, curveIndex));
}
int DLLEXPORT ptrn_add(Handle ph, char *id)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_addpattern(pr->project, id));
}
int DLLEXPORT ptrn_getindex(Handle ph, char *id, int *index)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getpatternindex(pr->project, id, index));
}
int DLLEXPORT ptrn_getid(Handle ph, int index, char *id)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getpatternid(pr->project, index, id));
}
int DLLEXPORT ptrn_getlength(Handle ph, int index, int *len)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getpatternlen(pr->project, index, len));
}
int DLLEXPORT ptrn_getvalue(Handle ph, int index, int period, double *value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getpatternvalue(pr->project, index, period, value));
}
int DLLEXPORT ptrn_setvalue(Handle ph, int index, int period, double value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setpatternvalue(pr->project, index, period, value));
}
int DLLEXPORT ptrn_getavgvalue(Handle ph, int index, double *value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getaveragepatternvalue(pr->project, index, value));
}
int DLLEXPORT ptrn_set(Handle ph, int index, double *values, int len)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setpattern(pr->project, index, values, len));
}
int DLLEXPORT curv_add(Handle ph, char *id)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_addcurve(pr->project, id));
}
int DLLEXPORT curv_getindex(Handle ph, char *id, int *index)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcurveindex(pr->project, id, index));
}
int DLLEXPORT curv_getid(Handle ph, int index, char *id)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcurveid(pr->project, index, id));
}
int DLLEXPORT curv_getlength(Handle ph, int index, int *len)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcurvelen(pr->project, index, len));
}
int DLLEXPORT curv_gettype(Handle ph, int index, int *type)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcurvetype(pr->project, index, type));
}
int DLLEXPORT curv_getvalue(Handle ph, int curveIndex, int pointIndex, double *x, double *y)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcurvevalue(pr->project, curveIndex, pointIndex, x, y));
}
int DLLEXPORT curv_setvalue(Handle ph, int curveIndex, int pointIndex, double x, double y)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setcurvevalue(pr->project, curveIndex, pointIndex, x, y));
}
int DLLEXPORT curv_get(Handle ph, int curveIndex, char* id, int *nValues, double **xValues, double **yValues)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcurve(pr->project, curveIndex, id, nValues, xValues, yValues));
}
int DLLEXPORT curv_set(Handle ph, int index, double *x, double *y, int len)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setcurve(pr->project, index, x, y, len));
}
int DLLEXPORT scntl_add(Handle ph, int type, int linkIndex, double setting, int nodeIndex, double level, int *index)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_addcontrol(pr->project, type, linkIndex, setting, nodeIndex, level, index));
}
int DLLEXPORT scntl_delete(Handle ph, int index)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_deletecontrol(pr->project, index));
}
int DLLEXPORT scntl_get(Handle ph, int controlIndex, int *controlType, int *linkIndex, double *setting, int *nodeIndex, double *level)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getcontrol(pr->project, controlIndex, controlType, linkIndex, setting, nodeIndex, level));
}
int DLLEXPORT scntl_set(Handle ph, int cindex, int ctype, int lindex, double setting, int nindex, double level)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setcontrol(pr->project, cindex, ctype, lindex, setting, nindex, level));
}
int DLLEXPORT rcntl_add(Handle ph, char *rule)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_addrule(pr->project, rule));
}
int DLLEXPORT rcntl_delete(Handle ph, int index)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_deleterule(pr->project, index));
}
int DLLEXPORT rcntl_get(Handle ph, int index, int *nPremises, int *nThenActions, int *nElseActions, double *priority)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getrule(pr->project, index, nPremises, nThenActions, nElseActions, priority));
}
int DLLEXPORT rcntl_getid(Handle ph, int index, char *id)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getruleID(pr->project, index, id));
}
int DLLEXPORT rcntl_getpremise(Handle ph, int ruleIndex, int premiseIndex, int *logop, int *object, int *objIndex, int *variable, int *relop, int *status, double *value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getpremise(pr->project, ruleIndex, premiseIndex, logop, object, objIndex, variable, relop, status, value));
}
int DLLEXPORT rcntl_setpremise(Handle ph, int ruleIndex, int premiseIndex, int logop, int object, int objIndex, int variable, int relop, int status, double value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setpremise(pr->project, ruleIndex, premiseIndex, logop, object, objIndex, variable, relop, status, value));
}
int DLLEXPORT rcntl_setpremiseindex(Handle ph, int ruleIndex, int premiseIndex, int objIndex)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setpremiseindex(pr->project, ruleIndex, premiseIndex, objIndex));
}
int DLLEXPORT rcntl_setpremisestatus(Handle ph, int ruleIndex, int premiseIndex, int status)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setpremisestatus(pr->project, ruleIndex, premiseIndex, status));
}
int DLLEXPORT rcntl_setpremisevalue(Handle ph, int ruleIndex, int premiseIndex, double value)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setpremisevalue(pr->project, ruleIndex, premiseIndex, value));
}
int DLLEXPORT rcntl_getthenaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getthenaction(pr->project, ruleIndex, actionIndex, linkIndex, status, setting));
}
int DLLEXPORT rcntl_setthenaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setthenaction(pr->project, ruleIndex, actionIndex, linkIndex, status, setting));
}
int DLLEXPORT rcntl_getelseaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, double *setting)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_getelseaction(pr->project, ruleIndex, actionIndex, linkIndex, status, setting));
}
int DLLEXPORT rcntl_setelseaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, double setting)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setelseaction(pr->project, ruleIndex, actionIndex, linkIndex, status, setting));
}
int DLLEXPORT rcntl_setrulepriority(Handle ph, int index, double priority)
{
handle_t *pr = (handle_t *)ph;
return error_set(pr->error, EN_setrulepriority(pr->project, index, priority));
}
void DLLEXPORT err_clear(Handle ph)
{
handle_t *pr = (handle_t *)ph;
error_clear(pr->error);
}
int DLLEXPORT err_check(Handle ph, char** msg_buffer)
//
// Purpose: Returns the error message or NULL.
//
// Note: Caller must free memory allocated by EN_check_error
//
{
int errorcode = 0;
char *temp = NULL;
handle_t *pr = (handle_t *)ph;
if (pr == NULL) return -1;
else
{
errorcode = pr->error->error_status;
if (errorcode)
temp = error_check(pr->error);
*msg_buffer = temp;
}
return errorcode;
}
int DLLEXPORT toolkit_getversion(int *version)
{
return EN_getversion(version);
}
void DLLEXPORT toolkit_free(void **memory)
{
free(*memory);
*memory = NULL;
}
void error_lookup(int errcode, char *dest_msg, int dest_len)
// Purpose: takes error code returns error message
{
char *msg = NULL;
switch (errcode)
{
case 1: msg = WARN1;
break;
case 2: msg = WARN2;
break;
case 3: msg = WARN3;
break;
case 4: msg = WARN4;
break;
case 5: msg = WARN5;
break;
case 6: msg = WARN6;
break;
default:
{
char new_msg[MAXMSG + 1];
msg = geterrmsg(errcode, new_msg);
}
}
strncpy(dest_msg, msg, dest_len);
}

74
src/util/errormanager.c Normal file
View File

@@ -0,0 +1,74 @@
//-----------------------------------------------------------------------------
//
// errormanager.c
//
// Purpose: Provides a simple interface for managing runtime error messages.
//
// Date: 08/25/2017
//
// Author: Michael E. Tryby
// US EPA - ORD/NRMRL
//-----------------------------------------------------------------------------
#include <stdlib.h>
#include <string.h>
#include "errormanager.h"
error_handle_t* error_new_manager(void (*p_error_message)(int, char*, int))
//
// Purpose: Constructs a new error handle.
//
{
error_handle_t* error_handle;
error_handle = (error_handle_t*)calloc(1, sizeof(error_handle_t));
error_handle->p_msg_lookup = p_error_message;
return error_handle;
}
void error_dst_manager(error_handle_t* error_handle)
//
// Purpose: Destroys the error handle.
//
{
free(error_handle);
}
int error_set(error_handle_t* error_handle, int errorcode)
//
// Purpose: Sets an error code in the handle.
//
{
// If the error code is 0 no action is taken and 0 is returned.
// This is a feature not a bug.
if (errorcode)
error_handle->error_status = errorcode;
return errorcode;
}
char* error_check(error_handle_t* error_handle)
//
// Purpose: Returns the error message or NULL.
//
// Note: Caller must free memory allocated by check_error
//
{
char* temp = NULL;
if (error_handle->error_status != 0) {
temp = (char*) calloc(ERR_MAXMSG, sizeof(char));
if (temp)
error_handle->p_msg_lookup(error_handle->error_status, temp, ERR_MAXMSG);
}
return temp;
}
void error_clear(error_handle_t* error_handle)
//
// Purpose: Clears the error from the handle.
//
{
error_handle->error_status = 0;
}

27
src/util/errormanager.h Normal file
View File

@@ -0,0 +1,27 @@
/*
* errormanager.h
*
* Created on: Aug 25, 2017
*
* Author: Michael E. Tryby
* US EPA - ORD/NRMRL
*/
#ifndef ERRORMANAGER_H_
#define ERRORMANAGER_H_
#define ERR_MAXMSG 256
typedef struct error_s {
int error_status;
void (*p_msg_lookup)(int, char*, int);
} error_handle_t;
error_handle_t* error_new_manager(void (*p_error_message)(int, char*, int));
void error_dst_manager(error_handle_t* error_handle);
int error_set(error_handle_t* error_handle, int errorcode);
char* error_check(error_handle_t* error_handle);
void error_clear(error_handle_t* error_handle);
#endif /* ERRORMANAGER_H_ */