ELF>AA@H@8@@@@@o@ @QQ``C8XhahaCPdd88@<<o/usr/lib/amd64/ld.so.1!;<@`XLxLQW0TPܘ$x ̙@ `tȚpě  l@ `  h  ԝ ( | О@ $` x    X p @ ܠ`   d   h @ ` h  أ $ |  @ Ȥ`    p ĥ l@`,DDP@xP@  @`8 `(h8`\d((Hhl4(Hh4| 0@PTp`\8X(x(t( H p  4 P   0|Xxt @`(<(H,hl < ! !@T#h$$$ %h%%P<)p)****  +@+h,--d2H383X44666 7(t7H7h9$:@::0; ;8 <` = = > @ D!D0!EP!\Ep!E!F!zRx   $$,: AC ABBBBzRx   $E AC DE AC ABdJAC AB$P(AC ABBBBx@AC AB$}TAC ABBBzRx   $$1AC ABBzRx   $EAC DSAC dPSAC SAC SAC SAC  SAC TSAC $SAC DSAC dSAC $SAC XSAC SAC SAC AC $SAC D SAC dTSAC SAC SAC AC VAC  AC $VAC DPAC dHAC @SAC tAC pAC hSAC UAC $ԕVAC D QAC d@VAC xQAC SAC UAC AC KAC $<VAC DtAC dlAC dAC `AC \AC XAC TQAC $SAC DSAC dSAC $QAC XSAC AC AC zRx   $$\AC ABBBB$L4@AC ABBBBzRx   $$,AC ABBBB$L AC ABBBtfAC A)AC AAC A{AC AAC wAC 40AC zRx   $AC $DAC ABBB$l>AC ABBBB${AC ABBB$@AC ABBBBAC $AC ABBBB,AC $LAC ABBB$tpAC ABBBBhAC $PAC ABBBB$AC AC zRx   $$AC ABBLlAC lTAC ABrAC LhAC eAC #AC  AC zRx   $AC ABDxAC dAC ABAC $TAC ABB AC A|GAC AB %AC ,EAC AL1AC AlAC AC $AC ABBHwAC AB<AC AC AB4\AAC T/AC tAC ABDAC AByAC ABqAC AB$XAC ABBBB@IAC <lAC AB$\AC ABBB$l$AC ABBBhAC dAC `AC  \AC ,XMAC LXAC $lAC ABBBBAC AC ADAC $AC ABBBBzRx   $lAC ABDAC ABdAC  AC AC AC KAC @AC $$4AC ABBLCAC l#AC $=AC ABB$AC ABB4(AC <AC $<zAC ABBBBDAC $dAC ABB$bAC ABBBB AC  AC  AC  [AC 4P _AC zRx   $p sAC AB$D ^AC ABB$l AC ABBBB 0AC AB  AC   AC  TAC A$ AC ABBB$<T0AC ABBB$d\AC ABBkAC ABzRx   $oAC ABDDAC ABdAC $AC ABBBB0AC $$AC ABBAC AC 4AC TgAC At$!AC $(FAC ABBHCAC lAC $hAC ABB$HAC ADxAC A$dh7AC ABBBxAC AAC AC AB$5AC ABBBB$ AC ABBBB<#AC \#AC |#[AC #_AC zRx   $$AC AB$D$AC ABBBB     !"$%&'(+,-.0123578:<>?@ADEGHILNOPQRTW[\]_`acefghjlnorstvyz{|}~  #)*/469;=BCFJKMSUVXYZ^bdikmpquwx&-9JRSA[PYA(eLA@o{AEAAAlAPAA&A<lAGMA%aAEt$A1XAxAA AwB<BBAB/B4BW`ByvBqPB`BIB`B B$4 Ba4 BP Bl B BM BX0 BBHBlBDB0B,"B(T"B BB-BMBjBC@B#dB=t"Bz#B$BBK"`BCtB`%Bbz&B$'B'B'B_D'B[ 5B4B!,6B<6B =BHh=Bx=B78B- 9BM(9Bj \AV A# ,B p@ ,0Bo PB! иC 8A9 h?A? /BkO ` @Ai BA n ?Av A haC A{ `AS xA  LA NA  AS A B ?A' xA8 AH -B0R ?AY LAQg X@An AS h@A  AA: X?A @A t+B^ AK QB ,/B DA A AQ% LAS@ AY  Ao 8@Aw @A~ LAS A HAS dC A TAQ AV |A@ A dCAU&.NA @AUAfkASCH8hCH?Aa ?AASdC!HdCFGHLMONQPUTVWm[\]def^_`XYZabcghjilkorztxh`C@`CV`CqaCH`C`C`CX `C=(`C8`C1``Cyp`C x`CB`C`C`CQ`CM`C(`C)`C`Cd`C`CS`CUaC aC%(aC0aCe@aC@HaCPaC`aCY    S44Pm2PrPP61-/.5]nl  $ kf !SZXthVdbBqs0WWWW:??:cccZ\cppx|_I3XYwzTNQPRVYopq[\]^_`agi{}mn#&"%)uvyzLNMOxw +,efghi'*( ;<@>=~sljbdR[WSTUe78Q^`ac|AjCDEFGJKHkortuvy{UOv",$&s[ WYMR%(NWZ]kr}"N(QRI!\^3TJPS|z!L1IIING`oB~IB:vIIIIII    -0/3568 ;<A !%'EJKF9=&('II{`5DXY=4?F/Q;M-hZ\_rq''eDEE$)*.+#44G7G7IIILI__III4444O4$4$444[ X[,+f"1?CMP|Tz{  !&")'89EFGHJKLMNOPQRSTNO*+IJKLMNOPQRST:<=>?@ABCDEFGHJKLMNOPQRSTXXn\JKLMNOPQRST*+.NOPQRSTXY|}~<=>?@ABCDEFGHJKLMNOPQRST*+,PQRSTT<=>?@ABCDEFGHnJKLMNOPQRST{:ӓ\ذNOg*+NOXY䴵XXbc\<=>?@ABCDEFGHJKLMNOPQRST*+N|}~ЩXY<=>?@ABCDEFGHJKLMNOPQRST*+STҡ<=>?@ABCDEFGHJKLMNOPQRSTȓXYZ]^_ܓhT*+Z[\]^_`g<=>?@ABCDEFGHJKLMNOPQRSTT [\]^_`Z]^_gԽ2*+h"+ʵ1<=>?@ABCDEFGHJKLMNOPQRSTӓ fؐ)bcdeg*+%n'1<=>?@ABCDEFGHJKLMNOPQRSTZ]^_;h*+*+jlm?@<=>?@ABCDEFGHJKLMNOPQRST\;7  jlm*+XYj\lm%'^<=>?@ABCDEFGHJKLMNOPQRST*+PXYXYXY<=>?@ABCDEFGHrJKLMNOPQRST*+ʓ46<=>?@ABCDEFGHJKLMNOPQRST*+jlmcde=>?@ABCDEFGHJKLMNOPQRST*+cde>?@ABCDEFGHJKLMNOPQRST+XYX0Y:0r46|}:NOrWXY\bNOP[WXY\nynDP|}~p{Щk0o|}~k:o [\NOWXY#\a/q158|}~Xcde;in驪ߡ’¬yvwtxpޘbsba(T⫭īūƳ<̘̘͘&˜¸!pppp\ k pruu,,`g,b$--3bzfqqsfz{DD9$|L====????@@AAABD????@@AAAB<;)>>====????@@AAAB$RCE????@@AAABCE>:@@AAAB$<;)>>=====????@@AAAB^AAAB"8*<;)>>====????@@AAAB$t '<q K=T;:)89$<;)>>=====????@@AAABMk+)n7$<;)>>====????@@AAAB, B <;)>>====????@@AAAB=M$,7#Y\]CES #^rCvWXBP<;)>>====????@@AAAB$&a=vWX=Y\]^" "R%C<;)>>====????@@AAAB$O<.K==Jj&u  ;M11/J~~<;)>>====????@@AAAB$=Y\]rG45L^N~?J}} @<;)>>====????@@AAAB$Gv] -CE@HPi@F#G>"$<;)>>====????@@AAAB99$<;)>>====????@@AAAB0$<F)>>===={????@@AAAB/12@01h$;)>>====s????@@AAABo7{)>>=====????@@AAABHD==(==AHD=w( AF54=b===Fz==`KJefpI;<r&KJ}=I;<HD=(=TUAc o|3!aF =h===KJII;<=6s=t%==u==H== $%=&'(====y I*%=`=+,!=)=-.=*=[4=[=E"e/0 mpq 23,6BE(3:TN[SL9O}UQV-i b ydfX$lx+w62?@ADdpqg GxQ \_~oVZjzkWlc_g8 m!'.5YZ=nKh&'*)"I$_,ZmY !nbY0l4`^wvd<Y8 ?B\*gT :c#re+/{7xy91=[a@ Y::]o>i%qY*uz.-fAt2YY 3js56(k !%(/7:=?AFGLUV[_cfkq{~ #(.49=@FJQSZ\^gkqw              $'+453.:B [U^J>#ei?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Usage: %s [-i inputFile] [-h outputHeaderFile] [-o outputFile] [-t testOutputFile] [-d] [-v verificationOutputFile] [-x] .parsing error at end of file: %s parsing error at line %d : %s %s: line %d is too longCan't produce verify when streaming to stdout Can't produce test when streaming to stdout hwcrextra argument %s after switch arguments i:t:o:h:dv:xdb_sqlnear "%T": syntax errorindextoo many arguments on function %Tset listparser stack overflownear "%T": syntax errorReindexAnalyzeVtabFinishParseAddDefaultValueDeleteTriggerDeleteTableVtabBeginParseVtabArgInitVtabArgExtendVacuumUpdateTriggerUpdateStepTriggerSelectStepTriggerInsertStepTriggerDeleteStepSrcListShiftJoinTypeSrcListDeleteSrcListAppendFromTermSelectDeleteSelectRollbackTransactionRegisterExprPragmaPExprJoinTypeInsertIdListDeleteIdListAppendFinishTriggerExprSpanExprSetHeightExprSetCollExprListDeleteExprFunctionExprDeleteExprAssignVarNumberDropTriggerDropTableDropIndexDetachDeleteTriggerStepDeleteFromCreateViewCommitTransactionBeginTriggerBeginTransactionAttachAlterRenameTableAlterFinishAddColumnAlterBeginAddColumnAddNotNullAddCollateTypeAddCheckConstraintUnsupported SQL syntax (%s) unrecognized token: "%T"InfNaN.(NULL)NULL+Inf-Inf%intbitbinnumericdecimalintegertinyintvarcharMalloc failure The index named %s on line %d has the same name as the table at line %d. This is not allowed.Found two declarations of an index named %s, at lines %d and %dIndex %s names unknown column %s in table %sIndex %s names unknown table %sForeign Key Constraint not implemented: FromTable %s FromCol %s ToTable %s ToCol %s Extracting name from a null or empty token Warning: dimension of string "%s %s" is too small to hold a null-terminated string.Zero dimension not allowed for %sUnsupported type %s numberdoublefloatreallongbigintshortsmallintvarchar2varbincharUnexpected value for second parameter in type expression %s Non-numeric or zero size parameter in type expression %s Missing right parenthesis in type expression %s The table %s contains two columns with the same name %s; this is not allowed.The entity named %s on line %d has the same name as the index at line %d. This is not allowed.Found two declarations of a table named %s, at lines %d and %dThe table name must be simple: %s.%sPlease specify CREATE DATABASE before CREATE TABLEEncountered two CREATE DATABASE statements; only one is allowedDB_BTREEMalloc failedExtracting name from a null or empty tokenunknown errorfile is encrypted or is not a databasebind or column index out of rangeauxiliary database format errorauthorization deniedlarge file support is disabledlibrary routine called out of sequencedatatype mismatchconstraint failedString or BLOB exceeded size limitdatabase schema has changedtable contains no dataunable to open database filedatabase or disk is fulldatabase disk image is malformeddisk I/O errorinterruptedattempt to write a readonly databaseout of memorydatabase table is lockeddatabase is lockedcallback requested query abortaccess permission deniedSQL logic error or missing databasenot an error} ); %s0) txn_txnp, %s %s%s%s %s; #include "%s" #include #include #include #include #include #include #include "db.h" Header file for a Berkeley DB implementation generated from SQL DDL by db_sqlThe table "%s" (defined near line %d) lacks a primary key, which is not allowed. All tables must have a designated primary key. fprintf(stderr, "Stopping initialization because of error\n"); return -1; exit_error: return 0; %s_envp->txn_begin(%s_envp, NULL, &%s_txnp, 0); int initialize_%s_environment() { if (create_%s_env(&%s_envp) != 0) goto exit_error; DB_TXN * %s_txnp = NULL; DB_ENV * %s_envp = NULL; extern DB_TXN * %s_txnp; extern DB_ENV * %s_envp; int initialize_%s_environment(); This convenience method invokes all of the environment and database creation methods necessary to initialize the complete BDB environment. It uses the global environment and database pointers declared below. You may bypass this function and use your own environment and database pointers, if you wish.Functions for doing iterations over an entire primary databaseint %s_full_iteration(DB *dbp, %s %s_iteration_callback user_func, void *user_data); assert(data_dbt.size == 0); deserialize_%s_data(data_dbt.data, &deserialized_data); (*user_func)(user_data, &deserialized_data); } if (ret != DB_NOTFOUND) { dbp->err(dbp, ret, "Full iteration"); cursorp->close(cursorp); return ret; } cursorp->close(cursorp); return 0; } int %s_full_iteration(DB *dbp, %s %s_iteration_callback user_func, void *user_data) { DBT key_dbt, data_dbt; DBC *cursorp; %s_data deserialized_data; int ret; memset(&key_dbt, 0, sizeof(key_dbt)); memset(&data_dbt, 0, sizeof(data_dbt)); if ((ret = dbp->cursor(dbp, %s, &cursorp, 0)) != 0) { dbp->err(dbp, ret, "creating cursor"); return ret; } while ((ret = cursorp->get(cursorp, &key_dbt, &data_dbt, DB_NEXT)) == 0) { memcpy(&deserialized_data.%s, key_dbt.data, sizeof(deserialized_data.%s)); These typedefs are prototypes for the user-written iteration callback functions, which are invoked during full iteration and secondary index queriestypedef void (*%s_iteration_callback)(void *, %s_data *); Index creation and removal functionsint %s_query_iteration(DB *secondary_dbp, %s %s %s%s_key, %s_iteration_callback user_func, void *user_data); int %s_query_iteration(DB *secondary_dbp, %s %s %s%s_key, %s_iteration_callback user_func, void *user_data) { DBT key_dbt, pkey_dbt, data_dbt; DBC *cursorp; %s_data deserialized_data; int flag = DB_SET; int ret; memset(&key_dbt, 0, sizeof(key_dbt)); memset(&pkey_dbt, 0, sizeof(pkey_dbt)); memset(&data_dbt, 0, sizeof(data_dbt)); if ((ret = secondary_dbp->cursor(secondary_dbp, %s, &cursorp, 0)) != 0) { secondary_dbp->err(secondary_dbp, ret, "creating cursor"); return ret; } key_dbt.data = %s%s_key; key_dbt.size = %s(%s_key)%s; while ((ret = cursorp->pget(cursorp, &key_dbt, &pkey_dbt, &data_dbt, flag)) == 0) { memcpy(&deserialized_data.%s, pkey_dbt.data, sizeof(deserialized_data.%s)); deserialize_%s_data(data_dbt.data, &deserialized_data); (*user_func)(user_data, &deserialized_data); if (flag == DB_SET) flag = DB_NEXT_DUP; } if (ret != DB_NOTFOUND) { secondary_dbp->err(secondary_dbp, ret, "Querying secondary"); return ret; } cursorp->close(cursorp); return 0; } int remove_%s_index(DB_ENV * envp%s); int remove_%s_index(DB_ENV *envp%s) { return envp->dbremove(envp, %s, "%s.db", NULL, 0); } int create_%s_secondary(DB_ENV *envp, %sDB *dbpp, DB **secondary_dbpp); int create_%s_secondary(DB_ENV *envp, %s DB *primary_dbp, DB **secondary_dbpp) { int ret; char * secondary_name = "%s.db"; if ((ret = create_database(envp, %s, secondary_name, secondary_dbpp, DB_CREATE, %s, DB_DUPSORT, %s)) != 0) return ret; if ((ret = primary_dbp->associate(primary_dbp, %s, *secondary_dbpp, &%s_callback, DB_CREATE)) != 0) { (*secondary_dbpp)->err(*secondary_dbpp, ret, "DB->associate: %%s.db", secondary_name); return ret; } return 0; } int %s_callback(DB *dbp, const DBT *key_dbt, const DBT *data_dbt, DBT *secondary_key_dbt) { int ret; %s_data deserialized_data; memcpy(&deserialized_data.%s, key_dbt->data, key_dbt->size); deserialize_%s_data(data_dbt->data, &deserialized_data); memset(secondary_key_dbt, 0, sizeof(DBT)); secondary_key_dbt->size = %s(deserialized_data.%s)%s; secondary_key_dbt->data = malloc(secondary_key_dbt->size); memcpy(secondary_key_dbt->data, %sdeserialized_data.%s, secondary_key_dbt->size); /* tell the caller to free memory referenced by secondary_key_dbt */ secondary_key_dbt->flags = DB_DBT_APPMALLOC; return 0; } if (create_%s_secondary(%s_envp, %s%s%s_dbp, &%s_dbp) != 0) goto exit_error; if (create_%s_database(%s_envp, %s%s&%s_dbp) != 0) goto exit_error; DB *%s_dbp = NULL; extern DB *%s_dbp; Functions for deleting records by keyint delete_%s_key(DB *dbp, %s%s %s%s_key); if ((ret = dbp->del(dbp, %s, &key_dbt, 0)) != 0) { dbp->err(dbp, ret, "deleting key %s", %s_key); return ret; } return 0; } int delete_%s_key(DB *dbp, %s%s %s%s_key) { DBT key_dbt; int ret; %s %scanonical_key = %s_key; memset(&key_dbt, 0, sizeof(key_dbt)); key_dbt.data = %scanonical_key; key_dbt.size = Functions for retrieving records by keyint get_%s_data(DB *dbp, %s%s %s%s_key, %s_data *data); return 0; } assert(data_dbt.size == 0); deserialize_%s_data(data_dbt.data, data); %s(canonical_key)%sDB_TXN *txn, if ((ret = dbp->get(dbp, %s, &key_dbt, &data_dbt, 0)) != 0) { dbp->err(dbp, ret, "Retrieving key %s", %s_key); return ret; } assert(data_dbt.size <= %s); memcpy(&data->%s, key_dbt.data, sizeof(data->%s)); int get_%s_data(DB *dbp, %s %s %s%s_key, %s_data *data) { DBT key_dbt, data_dbt; int ret; %s %scanonical_key = %s_key; memset(&key_dbt, 0, sizeof(key_dbt)); memset(&data_dbt, 0, sizeof(data_dbt)); memset(data, 0, sizeof(%s_data)); key_dbt.data = %scanonical_key; key_dbt.size = Functions for inserting records by providing each field value as a separate argumentFunctions for inserting records by providing the full corresponding data structuredata.%s = %s; memcpy(data.%s, %s, %s); strncpy(data.%s, %s, %s); assert(strlen(%s) < %s); txn, return %s_insert_struct(dbp, %s&data); %s_data data; { ); int %s_insert_fields(DB *dbp%s, int %s_insert_fields(DB * dbp%s, ) , int %s_insert_struct(DB *dbp, %s%s_data *%sp); %d%s, serialized_data, &data_dbt* char serialized_data[%s]; DB_TXN *txn, if ((ret = dbp->put(dbp, %s, &key_dbt, &data_dbt, 0)) != 0) { dbp->err(dbp, ret, "Inserting key %s", %s_key); return -1; } return 0; } int ret; %s %s%s_key = %sp->%s; memset(&key_dbt, 0, sizeof(key_dbt)); memset(&data_dbt, 0, sizeof(data_dbt)); serialize_%s_data(%sp, &key_dbt int %s_insert_struct( DB *dbp, %s%s_data *%sp) { DBT key_dbt, data_dbt; buffer += sizeof(%sp->%s); memcpy(%s%sp->%s, buffer, sizeof(%sp->%s)); len = strlen(buffer) + 1; assert(len <= %s); memcpy(%sp->%s, buffer, len); buffer += len; void deserialize_%s_data(char *buffer, %s_data *%sp) { size_t len; p += sizeof(%sp->%s); memcpy(p, %s%sp->%s, sizeof(%sp->%s)); len = strlen(%sp->%s) + 1; assert(len <= %s); memcpy(p, %sp->%s, len); p += len; } data_dbt->data = buffer; data_dbt->size = p - buffer; memset(buffer, 0, %s); p = buffer; ; + 1sizeofstrlen%s(%sp->%s)%s&) { , char *buffer, DBT *data_dbt) { size_t len; char *p; key_dbt->data = %s%sp->%s; key_dbt->size = int serialize_%s_data(%s_data *%sp, DBT *key_dbtMacros for the maximum length of the records after serialization. This is the maximum size of the data that is storedData structures representing the record layoutsArray size constants. + \ %ssizeof(%s_data_specimen.%s)#define %s (%s_data %s_data_specimen; } %s_data; typedef struct _%s_data { #define %s %d Database removal functionsint remove_%s_database(DB_ENV *envp%s); txn, DB_TXN *txn int remove_%s_database(DB_ENV *envp%s) { return envp->dbremove(envp,%s, "%s.db", NULL, 0); } Database creation/initialization functionsint create_database(DB_ENV *envp, DB_TXN *txn, char *db_name, DB **dbpp, int flags, DBTYPE type, int moreflags, int (*comparator)(DB *, const DBT *, const DBT *)) { int ret; FILE *errfilep; if ((ret = db_create(dbpp, envp, 0)) != 0) { envp->err(envp, ret, "db_create"); return ret; } if (moreflags != 0) (*dbpp)->set_flags(*dbpp, moreflags); if (comparator != NULL) (*dbpp)->set_bt_compare(*dbpp, comparator); envp->get_errfile(envp, &errfilep); (*dbpp)->set_errfile(*dbpp, errfilep); if ((ret = (*dbpp)->open(*dbpp, txn, db_name, NULL, type, flags, 0644)) != 0) (*dbpp)->err(*dbpp, ret, "DB->open: %%s", db_name); return ret; } A generic function for creating and opening a databasestatic int compare_int(DB *dbp, const DBT *a, const DBT *b) { int ai, bi; memcpy(&ai, a->data, sizeof(int)); memcpy(&bi, b->data, sizeof(int)); return (ai - bi); } int compare_long(DB *dbp, const DBT *a, const DBT *b) { long ai, bi; memcpy(&ai, a->data, sizeof(long)); memcpy(&bi, b->data, sizeof(long)); return (ai - bi); } These are custom comparator functions for integer keys. They are needed to make integers sort well on little-endian architectures, such as x86. cf. discussion of btree comparators in 'Getting Started with Data Storage' manual.int create_%s_database(DB_ENV *envp,%s DB **dbpp); DB_BTREENULL DB_TXN *txn,int create_%s_database(DB_ENV *envp,%s DB **dbpp) { return create_database(envp, %s, "%s.db", dbpp, DB_CREATE, %s, 0, %s); } int create_%s_env(DB_ENV **envpp); The environment creation/initialization function | DB_INIT_LOG | DB_INIT_TXN (*envpp)->set_cachesize(*envpp, %s_CACHE_SIZE_GIGA, %s_CACHE_SIZE_BYTES, 1); if ((ret = (*envpp)->open(*envpp, env_name, flags, 0)) != 0) { (*envpp)->err(*envpp, ret, "DB_ENV->open: %%s", env_name); return 1; } return 0; } int create_%s_env(DB_ENV **envpp) { int ret, flags; char *env_name = "./%s"; if ((ret = db_env_create(envpp, 0)) != 0) { fprintf(stderr, "db_env_create: %%s", db_strerror(ret)); return 1; } (*envpp)->set_errfile(*envpp, stderr); flags = DB_CREATE | DB_INIT_MPOOL %s; #define %s_CACHE_SIZE_BYTES %lu #define %s_CACHE_SIZE_GIGA %lu Cache size constants, specified in a hint comment in the original DDL} ); "n"%lf%ldint_txnp, printf("%s.%s: %s_dbp = NULL; remove_%s_index(%s_envp%s%s%s); _txnpremove_%s_database(%s_envp%s%s%s); if (%s_dbp != NULL) %s_dbp->close(%s_dbp, 0); if (%s_dbp != NULL) %s_dbp->close(%s_dbp, 0); if (ret != 0) { printf("Delete error\n"); goto exit_error; } ret = delete_%s_key( %s_dbp, %s%s%s); \n", %s_record.%s); \n", compare_binary(%s_record.%s, %s)); if (ret != 0) { printf("Retrieve error\n"); goto exit_error; } ret = get_%s_data( %s_dbp, %s%s%s, &%s_record); printf("Retrieval of %s record by key\n"); void %s_iteration_callback_test(void *msg, %s_data *%s_record) { printf("In iteration callback, message is: %%s\n", (char *)msg); \n", %s_record->%s); \n", compare_binary(%s_record->%s, %s)); printf("%s->%s: , if (ret != 0) { printf("Insert error\n"); goto exit_error; } ret = %s_insert_fields(%s_dbp, %s%s, &%s_iteration_callback_test, "retrieval of %s record through %s query"); %s_query_iteration(%s_dbp, %s%sif (ret != 0) { printf("Full Iteration Error\n"); goto exit_error; } ret = %s_full_iteration(%s_dbp, %s%s&%s_iteration_callback_test, "retrieval of %s record through full iteration"); %s_data %s_record; 99.599binary_data"ninety-nine"Unexpected C type in schema: %sdouble%ffloatlong%dshortchar%s} return ret; %s_envp->close(%s_envp, 0); Finally, close the environment if (ret != 0) %s_txnp->abort(%s_txnp); else %s_txnp->commit(%s_txnp, 0); Delete the primary databasesDelete the secondary index databasesClose the primary databasesClose the secondary index databasesexit_error: Now delete a record from each database using its primary key.For the secondary indexes, query for the known keys. This also results in the ...iteration_callback_test function's being called for each record found.Now try iterating over every record, using the ...full_iteration functions for each database. For each record found, the appropriate ...iteration_callback_test function will be invoked (these are defined above).Next, retrieve the records just inserted, looking them up by their key valuesNow that everything is initialized, insert a single record into each database, using the ...insert_fields functions. These functions take each field of the record as a separate argumentret = initialize_%s_environment(); if (ret != 0) { printf("Initialize error"); goto exit_error; } Use the convenience method to initialize the environment. The initializations for each entity and environment can be done discretely if you prefer, but this is the easy way.for (i = 0; i < MAXBINSZ; i++) binary_data[i] = rand(); Fill the binary test data with random values main(int argc, char **argv) { int i; int ret; These are the iteration callback functions. One is defined per database(table). They are used for both full iterations and for secondary index queries. When a retrieval returns multiple records, as in full iteration over an entire database, one of these functions is called for each record foundchar * compare_binary(char *p, int len) { if (memcmp(p, binary_data, len) == 0) return "*binary values match*"; return "*binary values don't match*"; } A very simple binary comparison functionchar binary_data[MAXBINSZ]; #define MAXBINSZ %d Test data for raw binary types #include "%s" Simple test for a Berkeley DB implementation generated from SQL DDL by db_sql int%s_data_serialized_length%s[%s]%s_data_%s_lengthNULL&compare_longlong&compare_int&& ); , } {0}int"I""H""G""F""E""D""C""B""A"9.9"9"8.8"8"7.7"7"6.6"6"5.5"5"4.4"4"3.3"3"2.2"2"1.1"1""0"assert(_txnp, "eight""seven""three"occurence = 0; %s_dbp = NULL; "seventy-seven"remove_%s_index(%s_envp%s%s%s); _txnpremove_%s_database(%s_envp%s%s%s); if (%s_dbp != NULL) %s_dbp->close(%s_dbp, 0); if (ret == %s) ret = 0; else { printf("ERROR IN DELETE NO.%d record in %s_dbp\n"); goto exit_error; } DB_NOTFOUNDret = delete_%s_key( %s_dbp, %s%s%s); %s_record.%s == %s_record_array[i].%s); (fabs(%s_record.%s - %s_record_array[i].%s) <= 0.00001)); strcmp(%s_record.%s, %s_record_array[i].%s) == 0); compare_binary(%s_record.%s, %s, i) == 0); if (ret != 0) { printf("ERROR IN RETRIEVE NO.%%d record in %s_dbp\n", i); goto exit_error; } &%s_record); %s_record_array[i].%s, binary_data[i], %s_txnp, ret = get_%s_data( %s_dbp, (%s_record->%s == %s_record_array[i].%s) (fabs(%s_record->%s - %s_record_array[i].%s) <= 0.00001) (strcmp(%s_record->%s, %s_record_array[i].%s) == 0) (compare_binary(%s_record->%s, %s, i) == 0) if (if (same == 0) assert(0); else count_iteration++; same = 1; break; ) { int i; int same = 0; for (i = 0; i < %d; i++) { void %s_iteration_callback_test(void *msg, %s_data *%s_record) { binary_data[i]if (ret != 0) { printf("ERROR IN INSERT NO.%%d record in %s_dbp\n", i); goto exit_error; } ret = %s_insert_fields( %s_dbp, %s%sassert(count_iteration == occurence); occurence++; if (%s_record_array[j].%s == %s_record_array[i].%s) { if (fabs(%s_record_array[j].%s - %s_record_array[i].%s) <= 0.00001) { if (strcmp(%s_record_array[j].%s, %s_record_array[i].%s) == 0) { for (j = 0; j < %d; j++) { assert(count_iteration == 1); printf("%s_record_array[%%d].%s: %%d\n", i, count_iteration); , &%s_iteration_callback_test, "retrieval of %s record through %s query"); %s_record_array[i].%s%s_query_iteration(%s_dbp, %s%sif (ret != 0) { printf("Full Iteration Error\n"); goto exit_error; } printf("%s full iteration: %%d\n", count_iteration); assert(count_iteration == %d); ret = %s_full_iteration(%s_dbp, %s%s&%s_iteration_callback_test, "retrieval of %s record through full iteration"); count_iteration = 0; %s_data %s_record; , }; ,}{%s_data %s_record_array[] = { Unexpected C type in schema: %sdoublefloatlongshortchar%s%d%cbinary_data[return ret; if (ret == 0) printf("*****WELL DONE!*****\n"); if (ret = %s_envp->close(%s_envp, 0)) return ret; Finally, close the environment if (ret != 0) %s_txnp->abort(%s_txnp); else %s_txnp->commit(%s_txnp, 0); Delete the primary databasesDelete the secondary index databasesClose the primary databasesClose the secondary index databasesexit_error: Now delete a record from each database using its primary key.For the secondary indexes, query for the known keys. This also results in the ...iteration_callback_test function's being called for each record found.Now try iterating over every record, using the ...full_iteration functions for each database. For each record found, the appropriate ...iteration_callback_test function will be invoked (these are defined above).} Next, retrieve the records just inserted, looking them up by their key valuesFirst, insert some records into each database using the ...insert_fields functions. These functions take each field of the record as a separate argumentfor (i = 0; i < %d; i++) { Now that everything is initialized, insert some records into each database, retrieve and verify themret = initialize_%s_environment(); if (ret != 0) { printf("Initialize error"); return ret; } Use the convenience method to initialize the environment. The initializations for each entity and environment can be done discretely if you prefer, but this is the easy way.for (i = 0; i < %d; i++) for (j = 0; j < MAXBINSZ; j++) binary_data[i][j] = rand(); Fill the binary test data with random values main(int argc, char **argv) { int i; int j; int ret; int occurence; These are the iteration callback functions. One is defined per database(table). They are used for both full iterations and for secondary index queries. When a retrieval returns multiple records, as in full iteration over an entire database, one of these functions is called for each record foundint compare_binary(char *p, int len, int dem) { if (memcmp(p, binary_data[dem], len) == 0) { return 0; } else { return 1; } } A very simple binary comparison functionTest data for input recordint count_iteration; char binary_data[%d][MAXBINSZ]; #define MAXBINSZ %d Test data for raw binary types #include "%s" #include #include Simple test for a Berkeley DB implementation generated from SQL DDL by db_sql 99.999"ninety-nine"88.888"eighty-eight"77.77766.666"sixty-six"55.555"fifty-five"44.444"forty-four"33.333"thirty-three"22.222"twenty-two"11.111"eleven"9"nine"876"six"5"five"4"four"32"two"1"one"0"zero"DB_HASH, near line %d Warning: incorrect hint comment syntax with property %sNo value specified for property %s Property setting (%s) with no antecedent SQL statementUnrecognized index property %sUnrecognized entity property %sDBTYPEUnrecognized entity value %sWrong entity value %sunknown DBTYPE %s for antecedent %s, using default of DB_BTREEhashDB_BTREEbtreeUnrecognized environment property %sUnrecognized environment value %sNONTRANSACTIONALTRANSACTIONALMODECACHESIZEunrecognized characters in integer string %scannot parse integer string %sWarning: 5 % % h% h% h% h% h% h% h% hp% h`% h P% h @% h 0% h % h % h%z h%r h%r h% h% h% h% h% h%z hp%r h`%r hPjjHHHhaCHt]HPBQHEH %HdCHu HL H %HdCHRHUH%hdCQRP U_^ZY`PPH__HAAAtf<$EAAtdC $At$$EA`tA D3Af$$fD $AtAAf$$fD $,$A$EAAAtdCAt%%!$EAA@D3A$$D $EAD $At $t $@$HUH3HHH#H<$$L$t @tH]ÐUHSATAUAVAWHLIHAHHHDIM3M3xHHPHHHHH HHH BHH HH HH HL5qCH > HcH H^HHHKHHH3H5=HrHHH3HcHHH3HH3HxHDžHHHM3HHHHHhH=HHH`L5 H=HH3H3LH$H=IA6H3HO4HLcJ-uA 3A< 3A/u 3AvAh*ucAU*uAB3A7*uA$-uA/u Au<;uHHDŽHHH+HXHAHHt Mt I)LH(LIHHIHT`IH+HIHLHXHIH>J\#MtIHLHHLIHIHHHBHSHHHhHH3~H`HHHhHH3vSMtXIHtHI7_u I.H=HH5:HH3!HHHHxM[t HPttI}3HgHH5:HH3H5w9H0HHH3HHcH!HH5:IHH3\H5-9HHHH3@HĈA_A^A]A\[IHHH 8HHHHH3HPHHHH 8H\HHHH3nHHZH;HH ^8HHHHH3n)HHHHH 8HHHHH3)IHHH 7HHHHH3d2NPPP".PPPPPPPPPPPUHHHǐ H3HtUHSATHLHP6HcHTeS H *HcH(H|RH|PH|RH| SH|PH|\RH|RH|>RH|/RrH|RcH|RTH|SEH|cR6H|TR'H|QH|6R H|7SH|UH|SH|QH|VH|pVH|QH|QH|?QH|QvH|$QjH|V^H||QRH|HUFH|U:H|XQ.H|LQ"H|PH|P H|UȉHH3MA\[AA\[Ð~rfZK<-yj[L=.UHSATHߋdLcȉHcHt eSXHHcH(H| M3H| K"H| pMH| NH| KH| =MH| MH| MH|  MH| iMH| XMH| WNxH| 6MgH| %MVH| LEH| M4H| N#H| PH| MH| OLH| BQH| 1QH| LH| {LH| KH| YLH| K|H| PnH| ,L`H| ORH| PDH| L6H| K(H| vKH| hK H| OȉH5 1IH3&AD$Lc)HcHtTH1HQHtHT HIHL(A\[ÜrdVH:, tcRA0udUHSATAUAVAWHLDMcuIK\5HHHJH`HhHBHpA8HIcHI}Hs4NI}zNI}HsHSHKNI}HsNI}H3NI}Kt5BzI}HsBhI}Kt5HSCQI}HsHSCC;I}H3H3/C'I}HsHSiJI}H3H3UJI}Kt5VEI}Kt5KT5KL5)CI}Kt5CT5FDž`Dž`I}LC0H3H3HH`HoCL5HLH`HhHSSGKI}0H3H3M3HH`H$@LH`HsHS GIEKt5H8jKH`IEKT5H8HsKH`IEKT5H8GL5OD5HsH3JH`IEKT5H8G58KL5HhM3JH`dIEKT5H8GD5KL5HsJH`9HDž`)KD5HtHKKT5H@HHP@KD5HKKD5KD5H HHHKD5H`KD5H`HDž`Dž`dKD5HhCD5`HDžhDž`){Dž`lDž`]I}C5C5PC5xGD5OL5RCt5H(HHCt5AH C5`tK5XK5`HEHMK58K5@HEHMHEHMH`HhI}KD5HEMKD5CT5 K+D5HHHHH ʉMKt5HUDnI}HsHSH3E3ERI}HsHSHKE3E5I}HsHSHKAEI}HsHSHKE3EI}HsHSHKE3EI}HI}Kt5CT5uAHDž`hHhM}CD5 H3HX,IH3H3M3DHXHSIHBHKIH3HXH`H'IHvH`HCD5 HcHRH IDM}CD5 H3HX,IH3H3M3DHXHSIH>BKt5HKIHXNH`H'IHьH`HjCD5 HcHRH IDMDž`>Dž`/M}I?HSH3H3xHC58PjHCHHHhPOD5HG5PIH M}KT5IH3H3vH`KT5IHH3\H`M}Kt5KT5IH37H`KT5IHH3H`VI}KT5KL5M3BH`HtKL5HH H`A K|5@H`HsHS@I}H3H3M3-BH`Ht*KL5HsHH`HSH@H`@K|5CM}I?HSHXHKHHH3ӊHPKT5I@H3M3AH`Ht@jjjjIH3HPH3M3M3CH H`HA`H`? HP DC|5t!H`IH3M3*AH`K|5uHXHHH`Kt5H8HH?M}KT5I@H3M3@H`HtKL5HH`H`K? K|5BC|5t!H`IH3M3@H`H`Kt5H8HS? I}nH3H3M3E@H`HtKL5HH`H`> K|5BH`HsHS>M}KT5I@H3M3?H`HtKL5HH H`^> K|5=C|5t!H`IH3M3?H`H`Kt5H8HS(> M}KT5IH3H3ĆKT5IHH3豆HXKT5I?H3M3&?H`Ht HXHH HX-=C|5t!H`IH3M3>H`H`Kt5KT5H8H8n=fI}KT5VH3M3>H`HsKT5H8H4=,I}KT5UH3M3b>H`HsKT5H8H<I}Ct5KT5H3M3(>H`HsKT5H8H<I}KT5BH3M3=H`Kt5H8HSH<~I}KT5ؾBH3M3=H`Kt5H8HSHL<DI}KT5ؾAH3M3z=H`Kt5H8HSH< I}Ct5KT5H3M3@=H`Kt5H8HSH;M}KT5IH3H3tKT5IHH3aKT5HtIHH3IHSIH:H`C|5t!H`IH3M3<H`H`Kt5KT5H8H84;H`H!A fAKD5KL5 H`HhDžpKD5KL5 H`HhDžpI}Ct5KT5KL5M3;H`I}HSH39H`HzH`KL5KT5 HH8HP@YI}LsH3Ii9H`HSHI3:+IEHXKt5L{Ht >dHXI9H`HSHI9C|5H`HAfAI}KT5LCH3:H`HhHSH9I}Kt5HS9H`aMuLCIH3H3:H`IH7/I}Hs;H`MuLCIH3H3J:LLCIH3H30:HXLCIH3H3:IpHXHM39IpIHM39H` MuLCIH3H39LLCIH3H39IpIHM39H`0 I}LCH3H3g9H` I}Ct5LCH3H3C9H` K|5H`HsHS7 IEH8HSH3&8H` IEKt5H8HS8H` I}KT5H3H31H`j I}Kt5KT5H3H`H I}Kt5OD5G5xH3H37" I}Kt5KL5OD5GL5H37 I}K5xKT5OD5G58H3z7 I}KT5HKH3xH` I}Kt5KT5HKUH` M}Kt5HAÌKt5KT5KL5GD5I ;U I}Kt5KT5=3= KD5HhKD5H` KD5H`KD5Hh KD5H`HDžh H3H`Hh Dž` Dž` I}KT5H3H3Z~H`H HHH CD5Au I}Kt5KT5H3~H`HO CL5HcH@HRL2 KD5H`! HDž` KD5H` HDž` KD5H` I}HsHSHK5` I}HsHSH35` I}HsH3H35` Dž`s IEH8HSHKH3~H`P HDž`hHh0 M}K|5I8KT5jjjjIH3H3M3M3l7H H`I}K5XOL5Ct5Ct5LCH3H3~7HH`I}K5xCt5Ct5HSHKLCM3D7HH`}HDž`mKT5H`HX MCD5HcHkHD 16K|5H`L7 IEH8P2H`hHhM}IkH3H3M3#4HXLCIH3H34IpHHXM33Kt5IHH3D{H`}M}IkH3H3M33Kt5IHH3 {H`DI}CD5 uH3HKKt5KT5zH`HDž`KD5H`I}K5XK5xKL5OD5OL5Ct5 Ct5C58PCt55H H`Dž`kKL5HtCD5AKD5KL5HA8 K|54KD5H`TKD5H`CI}HUHHH@HMHEHKt5jH3E3M34HK|5Q4I}Kt5CL5.I}HCD5OD5G5XH(HSPHKT-HI}Kt5CL53.Dž`{Dž`lDž`c]M}K5XGD5KL5HSI6|Ct5II})I}Kt5(I}jjjOD5GL5jH3H3H3}H I}Kt5CT5CL5E3mxKD5KL5H`HhhHhHDž`CD5`|Dž`mDž` ^Dž`ODž`@CD5`Džd#CD5`DždCD5`Džd3`dCD5C#D5C D5`Dž`I}Hs'I}Ct5{I}GD5KL5HSH3lzlI}Kt5'YI}jjjGL5jH3H3H3M3Z{H .I}CT5CL5GD5H3vI}Ct5'MuLCIXH3H3//IH4'M}KT5IUH3M3/IH'I}Kt5&I}Kt5&~KD5H`hCD5 KT5K+T5HHHHH ʉh<K5xH`hCD5 KD5K+5xHH%HH hKD5H`hCD5 KD5K+D5HH%HH hKD5KL5 H`HhI}HsnKD5KL5 H`HhnI}HslKD5KL5 H`HhDIUKD5H`hHK+D5HHHHH ʉhI}KL5H3H3|K|50/I}HsHSH3{Dž`Dž`I}HCD5CL5PHsHSE3E3hHuI}.jI}'_CD5`RDž`FI}Ct5&6I}sg&I}cgI}3Vg I}3{H|Ic|HHAE+AEH5LHcHHc A HHc4NM}Pt;OAEHcHH+؉3SH`HhHCHKHpHCH`IyI HĘA_A^A]A\[H HHIH3%~Kt5ff!!!!! !!!!qbbqI&!!!g)g!!!!!!}Q&!qqbbH5qbquX!!!!8 q}bqE(1bqq 3ggj0gbB1!n1_P_!1:!1pO$vW19 i````````991!Qi//qbqbq,O1!1! /glgTFF) gggg!!h||a!!Q@[:{lT7$Q@!!!!qW!!I!777!7UHSATHߋ3LcHcHTeSXH fHcH(H|33H|F3"H|3H| ` 3H|3H|3H|3H|3H|3H|3H|3H|3xH|3gH|3VH|%3EH|34H|3#H|:"3H|a3H|3H|"3H|"3H| 3H|3H|{3H|3H|Y3|H|O"3nH|3`H|w!3RH|%"3DH|36H|u3(H|3H|3 H|#!3Ή3LcA\[}oaP?. sbQ@/ UHSATAUAVHPLHUHMA<$}3A$AD$AD$AD$HMHEHMHEMD$ Ic$HALLcÁHB BH5wL Bs HcA:tVvDHHsHt σt?ă;>sHcA<;u H 4A'HB4@H4P HuB4@M}ƳIzA<$DIc$HALLcÁHB BH5lL Bs HcA:tVvDHHsHt σt?ă;>sHcA<;u H 4A'HB4@H4P HjB4@MuDA|$AD$ˍeSH HcH(H}H}H}pH}H}H}F~H}pH}*bH}TH}~FH}p8H}r*H}TH}FH}H}*H},H}H}H}H}xH}jH}H}H}<wH}lH}&aH}VH}KH}M@H}5H}_*H}TH}H} H} EI\$A$;HcHATeS H  HcH(I|oI|I|QI| I|wI|$I|I|I|rI|XcI|ITI|JEI|+6I|'I|I| I|I|I|I|RI|GI|8I|I|I|I|hvI|jI|^I|DRI|FI|:I| .I|"I|I| I|A$A$I\$]ƳIHPA^A]A\[A$A$dI\$A$A$HcHAt eSHOHcH(I| A$|I| A$iI| A$VI| /A$CI| A$0I| A$I| A$ I| cA$I| PA$I| A$I| A$I| A$I| tA$I| aA$I| A$rI| ;A$_I| 8A$LI| A$9I| A$&I| A$I| pA$I| ]A$I| A$I| A$I|  A$I| }A$I| A$I| A$~I| GA$nI| A$^I| A$NI| A$>I| A$.I| A$I| wA$I| A$A$3H5HH3/eCI\$,HcHAtA\HMHUILIT HMIL(AL$HPA^A]A\[HEHMHUHMHUHMHMMt$H BIHHH3dAFMt$f?MMMMMMMMMMMMM/MMMMMMMMMMMMMMMMMsM`MM:M'MM|iMVMMC0MMMMMMM MMMDMMMMMMMMMMMMM9.MMM#MMMMMMMMMMMM MMMMMwiM[M?1#MMMMMMMMMMMMMM{zn_PA2#~o`QB3$UHSATAUHLDHUHMIHu2A u IAHHLTuPA!urI HHLIAHHL0uAu0H}HIDu Au3HA]A\[HHMHHHH3[CH HEHHHH3[C뱐UHHHu"H=HHH0H3XHoHHH3E[ffUHHu)H=HH>H0HH3 H#HH iHHH3ZݐUHHu)H=HHH0H H3踣HHH HHH3ZݐUHHu)H=,HHH0HH3dH{HH HHH3GZݐUHHu)H=HHBH0HhH3H'HH MHHH3YݐUHHu)H=HHH0HH3輢HHH HHH3YݐUHHu)H=0HHH0HH3hHHH uHHH3KYݐUHHu)H=HHFH0H$H3H+HH HHH3XݐUHHu)H=HHH0HH3HHH HHH3XݐUHHu)H=4HHH0HtH3lHHH YHHH3OXݐUHHu)H=HHJH0HH3H/HH HHH3WݐUHHu)H=HHH0HH3ĠHHH HHH3WݐUHHu)H=8HHH0H8H3pHHH HHH3SWݐUHHu)H=HHNH0HH3H3HH HHH3VݐUHHu)H=HHH0HpH3ȟHHH UHHH3VݐUHH5!3H3 ÐUHHu)H=$HHH0HH3\HsHH HHH3?VݐUHHu)H=пHH:H0HH3HHH eHHH3UݐUHHu)H=|HHH0HH3贞HHH HHH3UݐUHHu)H=(HHH0HH3`HwHH HHH3CUݐUHHu)H=ԾHH>H0HLH3 H#HH 1HHH3TݐUHH53H3OÐUHHu,H=hHHH0HH3蠝H3HHH HHH3TfUHH5u3H3ÐUHHu,H=HHbH0H0H30H3HDHH HHH3TfUHH53H3oÐUHH53H3VfUHHu)H=pHHH0HxH3訜HHH ]HHH3SݐUHH513H3H3fUHH53H3ÐUHHu)H=HHRH0HH3 H7HH HHH3SݐUHHu+H=HHH0HdH3̛3HHH GHHH3RffUHHu,H=<HHH0HH3tH3HHH HHH3TRfUHHu(H=HHNH0HH3H4HH HHH3QffUHHu,H=HHH0H@H3ȚH3HܿHH "HHH3QfUHHu(H=8HHH0HH3oHHH nHHH3SQffUHHu)H=HHNH0H|H3H3HH aHHH3PݐUHHu+H=HHH0H H3ș3HݾHH HHH3PffUHH53H3ÐUHHu(H= HHH0H3H3\H3HpHHH3H3CPUHHu,H=ԹHH>H0H

;uHEJtEAMAHAAD$=t:>t%IAFAN AVAFJ;A~HcANHHcH;~!ANHcHH;|IAFAFHcvH`Ht3IvIcVHjIjH`IFAVDž`/AFIBDAF+ȉ`~1 `HcI~Hc`H~`AFJt+IrE33H3H`.H(~HQHBHAHHQHЃHHtH0Ht PIE33H3H`TATDOH(~HQHBHAHHQHЃL"MtLt H3H`L`H3L H`|33ۅJA<$?IH@;.H8u!I}HcTATDO能L t IA1H(~HQHBHAHHQHЃp}!~NHqH;~LpHDž`uTATDOƅp%H3LpH`CH(~HQHBHAHHQHЃAFH E33HDž` TLA@ATDO=~IPHBI@LIPHЃA@۽ LظOw)u@ DX&+Xۭ ۽ -XLuh6h~ pYȅ⃽Luۭ݅ ۽ ۭ ݝ4ۭ w3|ۭ ۭ3r/ۭ ۭ۽ ۭr^~ۭ ۭr7^/ۭ ۭ۽ ۭr^~ۭ ۭr6^.ۭ ۭ۽ ۭr^~ۭۭ v5|-ۭ ۭ۽ ۭv}ۭۭ v4|,ۭ ۭ۽ ۭv}ԍ^=Lƒt:ۭ݅ ۽ ۭrۭ ۭ۽ ƃLt 3P3`P|;~ L +޸LLtQ ` T`XDu HpXpHq}H0L@3 ` T`XE3ɄtpHqHpAyIcLDE3A}RH<$ $ fL$l$ۭ T$,$L$Hۅ0ۭ۽ 0HAAE}`tA.IAy~AH@A0Iy˃|vMHcMD}QH<$$ fD$l$ۭ T$,$L$Hۅ0ۭ۽ 0A I˅}vAH@Gϋ|0OH<$$ fD$l$ۭ T$,$L$Hۅ0ۭ۽ ACIۋPtG`t>A@0uAHIAA@0t.uTu IAA0IuLH@H@H@A| A@+I A@-Iރd|&Q+ȃ0A+kdI+gfff++k 0A+F0A@IAHpIH+Hcـ8LpHH`&<LpA;LpA+D;|'IcH pHcHH+A͊HH;}t[H}+XHHpH@0QHɋu(|$X+HcƄp0Ʌ}ALpH3H`YX-tX+HLDHLELItHcH3H`LxH3H`ATATEOL@E@Auziu7H(~HQHBHAHHQHЃD`H(~HQHBHAHHQHЃL)u7H(~LBI@HBHLBLMcH(~LBI@HBHLBLMTTATDOH@@t^H(~LBI@HBHLBLMM|u@ EE+>Iؿ-4H(~HQHBHAHHQHЃL3MD`D#Ȁ8t@A+;LLtLeuHIHHk IH+ʃ}1IIILIIIHHk IH+Hu3ɍ HcHH MHc MLeH@HALYL@LAL$IM;Ir H3IIA II A $H tH3IIL 3AADMwHpI+H]Hc+~)HcML+I HH+MH0H΅@tIA<$EtEH@H@t5H8HA$;ttAL$I@IA$HuHpI+H]HcH3H`YLtjH(~HQHBHAHHQHЃH HXHHDžT'uxL uaHXHX_H(~HQHBHAHHQHЃH HXHHDžT"uH`HXHX33t#DTI@DOA;ADHƅuu L taD7=^%TATDO3H3LpH`-HcoLL`MTATDO33rD>=^(TATDOH3LpH`0Hc9oLL`MTATDOTA$HXtIHcITHXO@;uHHXHHXHuątHcˋTA HcA<]D+E7AAFAN AVAFJ;A~HcANHHcH;~"ANHcHH;|I*AFAFHcmHXHt3IvIcVHmIHXIFAVDžX/AFIDAF+ȉX~1 XHcI~HcXH(mXAFIMcAE~IH(AfIIT~ IID+E7AAFAN AVAFJ;A~HcANHHcH;~"ANHcHH;|IAFAFHclHXHt3IvIcVHlIHXIFAVDžX/AFIXDAF+ȉX~1 XHcI~HcXH(lXAFIMcAE~IH(ArH`Ht1lMoAO(!IICIHP-HA_A^A]A\[ffs $ NNNNNNNN+N2NNUHSATAUAVLLAMAE } IjH؅A}AE ;A}HcKAUHcHHcH;~!AUHcHcHH;|IAEqAEHciLMt"IuIcUIiIMuA}#AEIA^A]A\[AE+ǍX~HcI}HcIpiA]A^A]A\[ffUHSHHHCHtJHcKHC{t8H;u3CHciHCHtH3KHcH iHCCH[fUHSHHH{H;;t >iHCH[ffUHSHHLHHHHpHpHx3Dž^ChƅƅƅI)HxHtjHcHxtOH;puFHchHxHt#HpHcHgHxƅC*HHpHpHx3Dž^Džʚ;ƅƅƅICHxHtjHcHxtOH;puFHcgHxHt#HpHcH gHxƅHĈ[ffUHSHXHLHHHHLLt8)))))) )0)@HDžPDžT0HMHXH`HHHpHpHx3Dž^ChƅƅƅIHPHxHtjHcHxtOH;puFHceHxHt#HpHcHxeHxƅC*HHpHpHx3Dž^Džʚ;ƅƅƅIHPHxHtjHcHxtOH;puFHcdHxHt#HpHcHdHxƅHX[ÐUHHHHHHHH3Dž^Džʚ;ƅƅƅ3HHtjHcHtOH;uFHccHHt#HHcHcHƅffUHHPLHHHHLLt8))))) )0)@)PHH`Dž`Džd0HUHhHpHHHH3Dž^Džʚ;ƅƅƅ3IeHHtjHcHtOH;uFHcAbHHt#HHcH+bHƅÐUHHHHH H(L0L8t,)@)P)`)p)e)m)u)}HEHuHu3ɉMЉ}ԉMEEEHMEE0HuHuHHuH3-HuHtRHcEHuȀ}t@H;uu:EHcaHHuHtHEMHcHHaHuEHÐUHfUHSATAUAVLHL%I<$MAEHcH`LMtxIuAUI`IM4$Mt2H+AD$ID$H̀AD$ HvA^A]A\[HȰHHH3XHHHH3HHHH3I$ffUHSATAUAVAWHHLLL-I}MAG HcH_LMI7AWI{_IMMAD$MHcHp_LMI4$AT$I_IH52HIIH3II_MIHA_A^A]A\[*_Me(MtIt$ItM$$MuM3MHL`8MtIt$IhtM$$MuM3M9HHH^HLpH ~ H0H HH8H CI H@Ht4H 9HAH HQ0Ht HHA0 HA(HA0IHA_A^A]A\[.^HA_A^A]A\[HHHH3^H3L,HHHH3>H3L HXHHH3M3YHKHHH3M3u 3EI,TZHu$HzIDt I@ZEdH5H}IH39M33E?M3H Z؅t3E%M3H5H}IH333EA$t#ILAN@YAINAFuH5ԤIYtH5iIYu5HVHEH z;Lú3UuH5)HuI]Yt*H5IJYtH5I7Y~`|MEH=xHH5ĥHUyH@0H@HPIH3WEEDH5H}IH3M3^H5IXu33ɉMEH5I|Xu33ɉMEH5IZXuHߥHE33ɉMEH5]I-XuH"HE33ɉMEH5HuIWu33ɉMEbH5jIWuHOHE33ɉME5H5-IWuHHE33ɉMEL5II}Wu33LuMEH5ϤHuISWu33LuMEH5UI-Wu33LuMEH5'IWu33LuMElH5LIV}t)}33HUHUME633LuME& } 33ɉMEHHE33ɉMEHH ULMtYM.HEIFA^EAFEAFIUMwH(A_A^A]A\[HuHMHHIM3H3 H,HMHHH3 M3H6HMHHIM3H3 HHMHHH3 M3lH̥HMHHH3H(A_A^A]A\[ HHMHHH3H(A_A^A]A\[Y UHHuH@0HHHH ffUHSATAUAVAWHH}HLLHuHHTHH3C;-D$EH{IcH4@HSTHHCDcMuMtH HcLcH@HEI<3H`TMtAF~uHcHTLMtAI6AVISI HEM|MtM, HHA_A^A]A\[HPHMHHH3 HEHMHHH3 HEIDH HMHHH3 H3HHHMHHH3 H3HfffUHfUHSATAUAVLLMu'HHPRLM:fAD$fA$AD$;|1HcHkHfAD$HPIRLMfA$HHkHI|3HHRMAE~}HcHeRLMtBIuAUI RMtIDAD4AD0fA$ffA$H=,rHH5ƝH3nQM3dH= rHH5H3LQM3BH=qHH5H3*QM3 H=qHH5`H3QM3IA^A]A\[ÐUHSATAUAVAWHLLLHHq8MAGHcH3QLMI7AWIPIFMtUH=qHH5HqH@0IMLCHPHIMHMH3:PIHA_A^A]A\[PHA_A^A]A\[H>IHH3M3zH1IHH3M3]ffUHfUHSATAUAVAWHH}HHCIPLiLbHcHPLMUH3SIOI)McHpLx(MtIwIxt M?MuM3MI_HtHsIIt HHuH3HH\pL`8MtIt$ItM$$MuM3MH$pL`(MtIt$ItM$$MuM3MHH0OHLpLxHXH \o H H hHH(Ht4H oHAH oHQ@Ht HHA@ HA8HA@IHA_A^A]A\[NHA_A^A]A\[HHMHHH3H$H n ED$0HUHHIH3HXAL$ HnDHUHHIH3xdHhHMHHIIMH3Q=HqHMHHIIH3-HMHMHHH3HA_A^A]A\[H6HMHHH3HA_A^A]A\[fUHHAnÐUHÐUHSATAUHLHHH H(L0L8t,)@)P)`)p)e)m)u)}LEE0HEHELmЋEH(~HMHAHE HMHȃEH9Ht3#LH؋E(~HMHAHE HMHȃEH9HuI<$lLHKHI$HEE0HEHELmЋE(~HMHAHE HMHȃEL!MtGIKLHIIKI݋E(~HMHAHE HMHȃEL!MuHA]A\[UH@@HHcHH[HwHHHHǜHHHHH+H7HNvHemHdH[HRHIH@Hϝ7Hޝ.H%H @dt@eu HHFvj^RF:." UHSATHHLH H(H0H8L@LHt))P)`)p)])e)m)u)}CHH{5IHUEE0HEHEH HEH;IHC{uCHA\[UHHtg"t't[u]`uILOGt=3HDD;t HIA;uHIAuHcfUHHLhHA AtA;u=N@O@HHHƅtA HA;tHhH6 2+UHDB~5H hN@O@HtH:uHA@HEDE|H OhHH +3ffUHHEMf. ÐUHHMGUHSATHH H(H0H8L@LHt))P)`)p)])e)m)u)}H|k;u3 Hpk03.LHUEE0HEHEH HEHnH8IGI%FA| HA\[ffUHHH0H8H@HHLPLXt&)`)p)U)])e)m)u)}Hj0-HUEE0HMHMH0HMH mH9HOFÐUHSATHH H(H0H8L@LHt))P)`)p)])e)m)u)}Hi;u3 Hi03-LHUEE0HEHEH HEH@mH8IEIDA| HA\[ffUHHH0H8H@HHLPLXt&)`)p)U)])e)m)u)}Hi0>,HUEE0HMHMH0HMH rlH9HDÐUHSATAUHLA|$@uHuL-fHmL-֗I|$8H5:eDt H:ID$ Hx0It$HH *iH9ML$8PHILH3THHkHH kH;t,A|$@u HHH=It$H3HA]A\[ffUHSHH߃{@uH3H H+H HsHYhH8LH3H4kHH "kH;t){@u HHH=HsH3H[ÐUHSATLHH{j/t(IH/H= HKQHH3A\[A\[ÐUHHHwHH3HfffUHSHHHfH=HsH3hHSH=YHH3RH[ffUHSHH/H=HKHqHH3H[ffUH0H=HH3ffUHH=}H3UHSATAUHLHDID$ HsHxAt:Eu H5dH5SHfH8IT$HKH3HA]A\[zEu H5*H5)H=H3HA]A\[LUHSATHHKH+fH8HHH3HCH;CuH;C tH=H3wH=H3fHC Hxi-u H5H5HeHK H8HSHIH3'HC Hx*-tHC Hx%-tbHC Hx-u L%)L%(HC Hx,u LLH=HC HSHHIH3Hs H-HH3H=H3}HCH;CuH;C tH.H=HH3SH8dA\[ÐUHH%dHGH;GuH;G tH=H3H=H3UHSATLHID$ HsHx?H{+uWH{+u H5H5IT$HKH={LLH3H=FIt$HSH3A\[}IH+It$HSH cH9HLLH3NA\[ÐUHHGH;GuH;G t+HOHcH8HHLLH3HbffUHHGH;GuH;G tHbH=dH3ÐUHSATLHIL$ID$ I;L$u H;HxHsl>H{*uWH{*u H5H5zIT$HKH=rLLH3PH=5It$HSH3A\[4IH*H bH9IT$HKHH3A\[A\[fUHSATH߃{@u H%H$HKH1bH8HLH3HCH;Cu HK H;tH+H=HH3HK Hy)u HHHC HKH5aL@QH>IpLHQLH3KHHCH;CuH;C tH=H3(H=5H3{@u L%L%/HC Hx)u HHH'aH8HKIH3HFdHH 4dH;t/{@u HBHHKH=6HLH3A\[ffUHSATLHcHH cH;tRI|$`(u HHPH=qID$IL$HpH3uH=H3A\[A\[ffUHSATLI|$'u HcHH= ID$IL$HpH3tH=*H3A\[H='H3A\[ffUHSATAUAVAWHLHbHL-bI;Et,A|$@u HHH=It$H3A|$@u HBHqH=:It$H3 L5^AL=^AH5pI|%HI;EtH=H3\AAH5IM%AH=H3AH=It$H3HA_A^A]A\[ÐUH@u H/H.H/HwHH3LH1^H=HH33ffUHSATLHH{6&uOH{&uHSH=RHH3A\[IH`&HSH==HHH3A\[IH8&H=YHsHH3IH&HSH=HHH3A\[~fUHSATAUAVH߃{@u L% L% HC Hx[%u L-L-KHC Hx:%u L5L5*HC Hx%u HZHHsHK HIHIH"]PVVAVQH:VIMLH3H0HC Hx$tHC Hx$tVHC Hx$u L%L%HC Hx$u HHH=IH3IHs H$HH30H=MH3!{@u L%L%7HC Hx$u L-L-H2&HK LIHH \H9HKAQIILH3HHCH;CuH;C tH=޿HsH3H=H3}H=H3nH^HH ^H;te{@u L%wL%HC HxE#u LNL5HsHH=FHC H@VHHILH3HA^A]A\[fUHSATAUAVH߃{@u L%1L%HC Hx"u L-L-HC Hx"u L5߸L5HC Hx"u HHHsHK HIHIH~ZPVAVH:QIMLH31H HC Hx0"tHC Hx+"tVHC Hx"u L%/L%.HC Hx!u HHH=>IH3Hs H%"HH3H=H3{@u L%.L%HC Hx|!u H=HAUHsHHAPLMH3H HCx@uL%)L-L%L-HCHxHKHHVQAUH:LK(PHIMH3H L%ZI$L-YI;Et-HCx@u HUHH=MHsH3HCx@uHH HH QHsH=LH3I$I;Et-HCx@u H(H?H= HsH3hHCx@u L5L5rHCHxu L=L=HCx@u H8HE HHEHCHx~u HHE H2HEHCHxau HvHE HqHEHCHx8u HHPHLH3HHCH;CuH;C tH=oHsH3H=:H3~H{SH8H3lHVHH VH;t,{@u HEHHKH=9HH3H[ffUHH tHpNHH HWDG0HHAH3-X-UHSATAUAVAWHHULIL->VI}L%+VI4$H=H3H3IEI;$tHRH8H3HjRH8H3IEI;$tH=HH3OL=tNItpHSH8H3H=TNH}H=HMHQHHH3H=&NH}H=VHMQH?HH3aH=H36HKH3H3H=H3H=rH5HH=H3H=H5HVH=H3H= H3H35A u H H HQH8IHH3It5H=,MHEH=MH QH9HuHH3HQH8H3IEI;$t!H=#H3H=I7H3%HBQH8H3gH(QH8H3qHQH8H3CHPH8H3MH=H3H=WH3H3$H=H3H=H3H3H=HH5HH=H5HIEI;$tH=H32H=H3H3IEI;$tH=H3H=H5 HNqIEI;$tH=dH3H=H3H3FIEI;$tH=H3H=FH3H3IEI;$tH=H3~H=H3H3IEI;$tH=H3SH=,IEI;$t!H=H3.H=oI7H38H==I7H3&A tH=I7H3 H=H3H3cH=I7H3YA tH=I7H3@H=H3H3&H=H=H=ÁIHHH3L%MA$A tH=aIHHH3H=yH3H3H=H=H3A $H=H3A$H=H3A $H=H3nH}HtH-MtIHHA_A^A]A\[HA_A^A]A\[UHSATHHPH8H=H3EH=HH3OHPI;tMH=H3H=m3H3#H= H5kI H5LI tzH5AI tgH5I tTH5I t8H5I t%H= @HH5IH3LH3H5PH5OH5NH=H3uH=H3HA]A\[HA]A\[ffUHSATAUHLHH=It$HSH3aH{Lo H5=IH5IH5ItyH5Itt]H5IatAH5INt%H=>HH5eIH3H3+H5"H5mH5H5sH5H={H3sH{& t=H{% u0IHv H=WIt$HSHH3HA]A\[)H=It$HSH3HA]A\[ffUHHOH=HHH3HtCUHHeCH=H3ffUHSATAUAVAWHLH=9IuH3A}@uHL=HO>HL=mIE LpMfI! tA~ } L 'L I H5IH5IxtzH5IetgH5IRtTH5I?t8H5I,t%H=<HH5CIH3M3L L L IUHH=RHHMH3QHA_A^A]A\[fUHH=H3,UHSATAUHLHH=It$HSH3H{LoH5IUH5I>H5I'tyH5It]H5iItAH5FIt%H={;HH5IH3H3+H5."H5 H5$H5H5"H=H3H{t=H{u0IHH=wIt$HSHH3HA]A\[H=:It$HSH3HA]A\[ffUHSATAUAVAWHLA}@uHL%HJ;HL%hIE LxMwItA } L "L IH5IH5IstzH5I`tgH5IMtTH5I:t8H5I't%H=9HH5>IH3M3L L L IUH=HHMH3QHA_A^A]A\[fUHH=5H3,UHHOH=uHHH3ÐUHHOH=HHH3ÐUH@uH [L H3H=H3 H=H3H[UHSATAUAVHLDDEtH=H3I}tI}I}unIEHxH5^t7IEHxH5FtHKIUH=SHLH3fHKIUH=dHLH3GHKIUH=HLH3(HIIUH=HsHLH3EuH=H3Et H&A^A]A\[ÐUHSHHHSH=yHH3b{@tH=QH!H0H3CHC Hxt"HC HxuH=H3H=HC HsHPH3H=HsH3H=WHsH3H[UHH=H3UHSATLHH=H3H{tH{H{upHCHxH5et8HCHxH5Mt IL$HSH=HLH3jIL$HSH=HLH3JIL$HSH=HLH3*IHH=It$HSHH3A\[A\[fUHSATAUAVAWHLA~@uHL%HHL%IF LxMoItDA }H  Hw$HcHL,H HY$HcHLloI\H1$A~gfff+AŅH=LIcL|ILI3IwHH H#DIIA]H3H5IwH5I`H5IItzH5I6tgH5sI#t8H5XIt%H=HH5IH3M36H H#HcHLlH tH"HcHLlIVH=HHMMH3HA_A^A]A\[ffUHSATAUAVAWHH}Lg Ml$I]ItDA} }H He"HcHHH HG"HcHH\mIJH"~gfff+ÅH=ILxMA$uH}IH3@AN@A^@Ap@n@A}@CиC~@A@A@A@AC@A@A@AeC@A; PB PBWW&@E@ fx6@ `+@```Z@`poo(Y@op^@^@ o0$@oo`@o``>#``C@ @8@X@@(@Ш@(@@H@@@@x@0@ @@ @X@@0@h@8@@@@@(@0@@@@@@A/ AA~sh]RD6( rdVH:,AA:FFFFFFFFFFFFF,FFFFFFFFFFFFFFFFFFxFgVFE4#FFFFFyhWFFFFFFFFF5F$F YAxAwK<--<~aaaaaO22n[H[aN<<--p``<-<@#<````qbH-<[L-<<o22o52yjL- w9**^;`bbA"em4R++++++++   n 4 <- <-< O SWbW272~2222a3qbGG, T&UF7 r_N<"TAVA:FFFFFFFFFFFFF,FFFFFFFFFFFFFFFFFFxFgVFE4#FFFFFyhWFFFFFFFFF5F$FNAQAyj[L=.zk\M>/ A@AAAxA VAQANAQA aAQAanotate8A1A1 anotateAg(AE \AS AS AS XAS AS AS TAS AS AS PAS AS AS LAS AS A AS `AS AS AS \AS A ȡAV A 8AV A A AS A 0A HAS AU AV LAQ AV AQ LAS AU A AK \AV A ̦A A A A 8A TAQ AS AS PAS AQ AS LA dA HAxAA$ADAAAШAAanotate anotate|A@|A  |A@ĵA AĵAe1edt1x81DeĵAanotate anotateA3%xA  Af A) A A{ xA XAw A  A]A BA`A 88"(  AA)SSSSSSSS0S7SS0`AA SAanotateAPA A A> AoAAAAanotate anotateAA A `Ar Ah 2&A AanotateHAA A lA PA A A lAG A% AE $A1 XA xA A Aw B< B BA B/ B B `By Bq PB `BI B `B B$  B 4 B P B l B BM BX 0 B B B BD B APAAAABZBBBBB5BHBBBBYBBanotate anotateBS@B 0B B B B B BK `B tB BC @B# dB= B ,"B( T"B t"Bz #B $B %Bb &B 'B $'B D'B[ 'B_ X+BoB^B B"B$"Bl"B#Bb%B%B&Banotate anotatex(B+(Bs t+B^ +B ,B0 ,B ,B -BT X-B -B0 ,/B /Bk H+B,B<,BS,Bo,Bx,B,B,B,Banotate anotate,0B,0Bo 4B 5B ,6B 6B 7B 8B 9B (9B D9Bg 9B! 9BF  @r b\ o