[m-rev.] diff: Make future_wait/2 impure.

Paul Bone pbone at csse.unimelb.edu.au
Tue May 31 17:10:28 AEST 2011


When pushing signals and waits into callees during the dependant parallel
conjunction transformation we may push a wait into a callee that doesn't
actually make use of it's argument on some paths.  In these cases we insert
a wait signal at the end of the procedure so that the caller can assume that
any future passed in an argument is waited on (and therefore it doesn't need
to use the wait operation).  This can be a problem with the wait that was
inserted is optimised away because it is a pure, deterministic goal that
does not bind any variables.

This change makes the future_wait/2 operation impure to prevent this.

compiler/dep_par_conj.m:
    Make all calls to wait_future/2 impure, preventing them from being
    optimized away.

library/par_builtin.m:
    Make wait_future/2 impure.

tests/par_conj/impure_wait.m:
tests/par_conj/impure_wait.exp:
tests/par_conj/Mmakefile:
    Add a test case for this problem.

Index: compiler/dep_par_conj.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/dep_par_conj.m,v
retrieving revision 1.54
diff -u -p -b -r1.54 dep_par_conj.m
--- compiler/dep_par_conj.m	31 May 2011 03:14:20 -0000	1.54
+++ compiler/dep_par_conj.m	31 May 2011 06:40:44 -0000
@@ -3116,10 +3116,12 @@ make_wait_or_get(ModuleInfo, VarTypes, F
     (
         WaitOrGetPred = wait_pred,
         PredName = wait_future_pred_name,
+        Purity = purity_impure,
         Code = "MR_par_builtin_wait_future(Future, Value);"
     ;
         WaitOrGetPred = get_pred,
         PredName = get_future_pred_name,
+        Purity = purity_pure,
         Code = "MR_par_builtin_get_future(Future, Value);"
     ),
     Features = [],
@@ -3130,11 +3132,11 @@ make_wait_or_get(ModuleInfo, VarTypes, F
         ShouldInline = no,
         ArgVars = [FutureVar, ConsumedVar],
         generate_simple_call(ModuleName, PredName, pf_predicate,
-            only_mode, detism_det, purity_pure, ArgVars, Features,
+            only_mode, detism_det, Purity, ArgVars, Features,
             InstMapDelta, ModuleInfo, Context, WaitGoal)
     ;
         ShouldInline = yes,
-        ForeignAttrs = par_builtin_foreign_proc_attributes(purity_pure, no),
+        ForeignAttrs = par_builtin_foreign_proc_attributes(Purity, no),
         Arg1 = foreign_arg(FutureVar, yes("Future" - in_mode),
             map.lookup(VarTypes, FutureVar), native_if_possible),
         Arg2 = foreign_arg(ConsumedVar, yes("Value" - out_mode),
@@ -3142,7 +3144,7 @@ make_wait_or_get(ModuleInfo, VarTypes, F
         Args = [Arg1, Arg2],
         ExtraArgs = [],
         generate_foreign_proc(ModuleName, PredName, pf_predicate,
-            only_mode, detism_det, purity_pure, ForeignAttrs, Args, ExtraArgs,
+            only_mode, detism_det, Purity, ForeignAttrs, Args, ExtraArgs,
             no, Code, Features, InstMapDelta, ModuleInfo, Context, WaitGoal)
     ).
 
Index: library/par_builtin.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/par_builtin.m,v
retrieving revision 1.25
diff -u -p -b -r1.25 par_builtin.m
--- library/par_builtin.m	31 May 2011 03:14:21 -0000	1.25
+++ library/par_builtin.m	31 May 2011 06:40:44 -0000
@@ -43,7 +43,12 @@
     % Wait until Future is signalled, blocking if necessary. Then set Var
     % to the value bound to the variable associated with the future.
     %
-:- pred wait_future(future(T)::in, T::out) is det.
+    % wait_future/2 doesn't actually have a side effect.  However once it has
+    % returned get_future/2 is guaranteed to be safe.  Therefore it must be
+    % impure to prevent it from being optimized away, especially in (valid)
+    % cases where its output occurs only once in a procedure.
+    %
+:- impure pred wait_future(future(T)::in, T::out) is det.
 
     % get_future(Future, Var):
     %
@@ -129,7 +134,7 @@
 
 :- pragma foreign_proc("C",
     wait_future(Future::in, Var::out),
-    [will_not_call_mercury, promise_pure, thread_safe, will_not_modify_trail,
+    [will_not_call_mercury, thread_safe, will_not_modify_trail,
         may_not_duplicate],
 "
     MR_par_builtin_wait_future(Future, Var);
Index: tests/par_conj/Mercury.options
===================================================================
RCS file: /home/mercury1/repository/tests/par_conj/Mercury.options,v
retrieving revision 1.5
diff -u -p -b -r1.5 Mercury.options
--- tests/par_conj/Mercury.options	16 Jul 2009 02:50:51 -0000	1.5
+++ tests/par_conj/Mercury.options	31 May 2011 03:23:44 -0000
@@ -7,3 +7,7 @@ MCFLAGS-par_ddeath_2 = --trace deep
 
 MCFLAGS-dg_fib = --parallel --distance-granularity 10
 MCFLAGS-dg_fib_func = --parallel --distance-granularity 10
+
+# With --intermod-opt the call to impure_wait will be optimized away.
+MCFLAGS-impure_wait = --intermod-opt -O3
+
Index: tests/par_conj/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/tests/par_conj/Mmakefile,v
retrieving revision 1.22
diff -u -p -b -r1.22 Mmakefile
--- tests/par_conj/Mmakefile	8 Feb 2011 03:48:10 -0000	1.22
+++ tests/par_conj/Mmakefile	31 May 2011 03:23:44 -0000
@@ -52,6 +52,7 @@ DEP_PAR_CONJ_PROGS= \
 	dep_par_27 \
 	dep_par_28 \
 	dep_par_29 \
+	impure_wait \
 	pathological_right_recursion \
 	produce_in_nondet_disj
 
@@ -175,6 +176,11 @@ pathological_right_recursion.out: pathol
 	./pathological_right_recursion 2>&1 > pathological_right_recursion.out || \
 	{ grep . $@ /dev/null; exit 1; }
 
+impure_wait.out: impure_wait
+	MERCURY_OPTIONS="--thread-pinning" \
+	./impure_wait 2>&1 > impure_wait.out || \
+	{ grep . $@ /dev/null; exit 1; }
+
 endif
 
 #-----------------------------------------------------------------------------#
Index: tests/par_conj/impure_wait.exp
===================================================================
RCS file: tests/par_conj/impure_wait.exp
diff -N tests/par_conj/impure_wait.exp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/par_conj/impure_wait.exp	31 May 2011 03:23:44 -0000
@@ -0,0 +1,101 @@
+    343400    348450    353500    358550    363600    368650    373700    378750    383800    388850    393900    398950    404000    409050    414100    419150    424200    429250    434300    439350    444400    449450    454500    459550    464600    469650    474700    479750    484800    489850    494900    499950    505000    510050    515100    520150    525200    530250    535300    540350    545400    550450    555500    560550    565600    570650    575700    580750    585800    590850    595900    600950    606000    611050    616100    621150    626200    631250    636300    641350    646400    651450    656500    661550    666600    671650    676700    681750    686800    691850    696900    701950    707000    712050    717100    722150    727200    732250    737300    742350    747400    752450    757500    762550    767600    772650    777700    782750    787800    792850    797900    802950    808000    813050    818100    823150    828200    833250    838300    843350
+    348550    353700    358850    364000    369150    374300    379450    384600    389750    394900    400050    405200    410350    415500    420650    425800    430950    436100    441250    446400    451550    456700    461850    467000    472150    477300    482450    487600    492750    497900    503050    508200    513350    518500    523650    528800    533950    539100    544250    549400    554550    559700    564850    570000    575150    580300    585450    590600    595750    600900    606050    611200    616350    621500    626650    631800    636950    642100    647250    652400    657550    662700    667850    673000    678150    683300    688450    693600    698750    703900    709050    714200    719350    724500    729650    734800    739950    745100    750250    755400    760550    765700    770850    776000    781150    786300    791450    796600    801750    806900    812050    817200    822350    827500    832650    837800    842950    848100    853250    858400
+    353700    358950    364200    369450    374700    379950    385200    390450    395700    400950    406200    411450    416700    421950    427200    432450    437700    442950    448200    453450    458700    463950    469200    474450    479700    484950    490200    495450    500700    505950    511200    516450    521700    526950    532200    537450    542700    547950    553200    558450    563700    568950    574200    579450    584700    589950    595200    600450    605700    610950    616200    621450    626700    631950    637200    642450    647700    652950    658200    663450    668700    673950    679200    684450    689700    694950    700200    705450    710700    715950    721200    726450    731700    736950    742200    747450    752700    757950    763200    768450    773700    778950    784200    789450    794700    799950    805200    810450    815700    820950    826200    831450    836700    841950    847200    852450    857700    862950    868200    873450
+    358850    364200    369550    374900    380250    385600    390950    396300    401650    407000    412350    417700    423050    428400    433750    439100    444450    449800    455150    460500    465850    471200    476550    481900    487250    492600    497950    503300    508650    514000    519350    524700    530050    535400    540750    546100    551450    556800    562150    567500    572850    578200    583550    588900    594250    599600    604950    610300    615650    621000    626350    631700    637050    642400    647750    653100    658450    663800    669150    674500    679850    685200    690550    695900    701250    706600    711950    717300    722650    728000    733350    738700    744050    749400    754750    760100    765450    770800    776150    781500    786850    792200    797550    802900    808250    813600    818950    824300    829650    835000    840350    845700    851050    856400    861750    867100    872450    877800    883150    888500
+    364000    369450    374900    380350    385800    391250    396700    402150    407600    413050    418500    423950    429400    434850    440300    445750    451200    456650    462100    467550    473000    478450    483900    489350    494800    500250    505700    511150    516600    522050    527500    532950    538400    543850    549300    554750    560200    565650    571100    576550    582000    587450    592900    598350    603800    609250    614700    620150    625600    631050    636500    641950    647400    652850    658300    663750    669200    674650    680100    685550    691000    696450    701900    707350    712800    718250    723700    729150    734600    740050    745500    750950    756400    761850    767300    772750    778200    783650    789100    794550    800000    805450    810900    816350    821800    827250    832700    838150    843600    849050    854500    859950    865400    870850    876300    881750    887200    892650    898100    903550
+    369150    374700    380250    385800    391350    396900    402450    408000    413550    419100    424650    430200    435750    441300    446850    452400    457950    463500    469050    474600    480150    485700    491250    496800    502350    507900    513450    519000    524550    530100    535650    541200    546750    552300    557850    563400    568950    574500    580050    585600    591150    596700    602250    607800    613350    618900    624450    630000    635550    641100    646650    652200    657750    663300    668850    674400    679950    685500    691050    696600    702150    707700    713250    718800    724350    729900    735450    741000    746550    752100    757650    763200    768750    774300    779850    785400    790950    796500    802050    807600    813150    818700    824250    829800    835350    840900    846450    852000    857550    863100    868650    874200    879750    885300    890850    896400    901950    907500    913050    918600
+    374300    379950    385600    391250    396900    402550    408200    413850    419500    425150    430800    436450    442100    447750    453400    459050    464700    470350    476000    481650    487300    492950    498600    504250    509900    515550    521200    526850    532500    538150    543800    549450    555100    560750    566400    572050    577700    583350    589000    594650    600300    605950    611600    617250    622900    628550    634200    639850    645500    651150    656800    662450    668100    673750    679400    685050    690700    696350    702000    707650    713300    718950    724600    730250    735900    741550    747200    752850    758500    764150    769800    775450    781100    786750    792400    798050    803700    809350    815000    820650    826300    831950    837600    843250    848900    854550    860200    865850    871500    877150    882800    888450    894100    899750    905400    911050    916700    922350    928000    933650
+    379450    385200    390950    396700    402450    408200    413950    419700    425450    431200    436950    442700    448450    454200    459950    465700    471450    477200    482950    488700    494450    500200    505950    511700    517450    523200    528950    534700    540450    546200    551950    557700    563450    569200    574950    580700    586450    592200    597950    603700    609450    615200    620950    626700    632450    638200    643950    649700    655450    661200    666950    672700    678450    684200    689950    695700    701450    707200    712950    718700    724450    730200    735950    741700    747450    753200    758950    764700    770450    776200    781950    787700    793450    799200    804950    810700    816450    822200    827950    833700    839450    845200    850950    856700    862450    868200    873950    879700    885450    891200    896950    902700    908450    914200    919950    925700    931450    937200    942950    948700
+    384600    390450    396300    402150    408000    413850    419700    425550    431400    437250    443100    448950    454800    460650    466500    472350    478200    484050    489900    495750    501600    507450    513300    519150    525000    530850    536700    542550    548400    554250    560100    565950    571800    577650    583500    589350    595200    601050    606900    612750    618600    624450    630300    636150    642000    647850    653700    659550    665400    671250    677100    682950    688800    694650    700500    706350    712200    718050    723900    729750    735600    741450    747300    753150    759000    764850    770700    776550    782400    788250    794100    799950    805800    811650    817500    823350    829200    835050    840900    846750    852600    858450    864300    870150    876000    881850    887700    893550    899400    905250    911100    916950    922800    928650    934500    940350    946200    952050    957900    963750
+    389750    395700    401650    407600    413550    419500    425450    431400    437350    443300    449250    455200    461150    467100    473050    479000    484950    490900    496850    502800    508750    514700    520650    526600    532550    538500    544450    550400    556350    562300    568250    574200    580150    586100    592050    598000    603950    609900    615850    621800    627750    633700    639650    645600    651550    657500    663450    669400    675350    681300    687250    693200    699150    705100    711050    717000    722950    728900    734850    740800    746750    752700    758650    764600    770550    776500    782450    788400    794350    800300    806250    812200    818150    824100    830050    836000    841950    847900    853850    859800    865750    871700    877650    883600    889550    895500    901450    907400    913350    919300    925250    931200    937150    943100    949050    955000    960950    966900    972850    978800
+    394900    400950    407000    413050    419100    425150    431200    437250    443300    449350    455400    461450    467500    473550    479600    485650    491700    497750    503800    509850    515900    521950    528000    534050    540100    546150    552200    558250    564300    570350    576400    582450    588500    594550    600600    606650    612700    618750    624800    630850    636900    642950    649000    655050    661100    667150    673200    679250    685300    691350    697400    703450    709500    715550    721600    727650    733700    739750    745800    751850    757900    763950    770000    776050    782100    788150    794200    800250    806300    812350    818400    824450    830500    836550    842600    848650    854700    860750    866800    872850    878900    884950    891000    897050    903100    909150    915200    921250    927300    933350    939400    945450    951500    957550    963600    969650    975700    981750    987800    993850
+    400050    406200    412350    418500    424650    430800    436950    443100    449250    455400    461550    467700    473850    480000    486150    492300    498450    504600    510750    516900    523050    529200    535350    541500    547650    553800    559950    566100    572250    578400    584550    590700    596850    603000    609150    615300    621450    627600    633750    639900    646050    652200    658350    664500    670650    676800    682950    689100    695250    701400    707550    713700    719850    726000    732150    738300    744450    750600    756750    762900    769050    775200    781350    787500    793650    799800    805950    812100    818250    824400    830550    836700    842850    849000    855150    861300    867450    873600    879750    885900    892050    898200    904350    910500    916650    922800    928950    935100    941250    947400    953550    959700    965850    972000    978150    984300    990450    996600   1002750   1008900
+    405200    411450    417700    423950    430200    436450    442700    448950    455200    461450    467700    473950    480200    486450    492700    498950    505200    511450    517700    523950    530200    536450    542700    548950    555200    561450    567700    573950    580200    586450    592700    598950    605200    611450    617700    623950    630200    636450    642700    648950    655200    661450    667700    673950    680200    686450    692700    698950    705200    711450    717700    723950    730200    736450    742700    748950    755200    761450    767700    773950    780200    786450    792700    798950    805200    811450    817700    823950    830200    836450    842700    848950    855200    861450    867700    873950    880200    886450    892700    898950    905200    911450    917700    923950    930200    936450    942700    948950    955200    961450    967700    973950    980200    986450    992700    998950   1005200   1011450   1017700   1023950
+    410350    416700    423050    429400    435750    442100    448450    454800    461150    467500    473850    480200    486550    492900    499250    505600    511950    518300    524650    531000    537350    543700    550050    556400    562750    569100    575450    581800    588150    594500    600850    607200    613550    619900    626250    632600    638950    645300    651650    658000    664350    670700    677050    683400    689750    696100    702450    708800    715150    721500    727850    734200    740550    746900    753250    759600    765950    772300    778650    785000    791350    797700    804050    810400    816750    823100    829450    835800    842150    848500    854850    861200    867550    873900    880250    886600    892950    899300    905650    912000    918350    924700    931050    937400    943750    950100    956450    962800    969150    975500    981850    988200    994550   1000900   1007250   1013600   1019950   1026300   1032650   1039000
+    415500    421950    428400    434850    441300    447750    454200    460650    467100    473550    480000    486450    492900    499350    505800    512250    518700    525150    531600    538050    544500    550950    557400    563850    570300    576750    583200    589650    596100    602550    609000    615450    621900    628350    634800    641250    647700    654150    660600    667050    673500    679950    686400    692850    699300    705750    712200    718650    725100    731550    738000    744450    750900    757350    763800    770250    776700    783150    789600    796050    802500    808950    815400    821850    828300    834750    841200    847650    854100    860550    867000    873450    879900    886350    892800    899250    905700    912150    918600    925050    931500    937950    944400    950850    957300    963750    970200    976650    983100    989550    996000   1002450   1008900   1015350   1021800   1028250   1034700   1041150   1047600   1054050
+    420650    427200    433750    440300    446850    453400    459950    466500    473050    479600    486150    492700    499250    505800    512350    518900    525450    532000    538550    545100    551650    558200    564750    571300    577850    584400    590950    597500    604050    610600    617150    623700    630250    636800    643350    649900    656450    663000    669550    676100    682650    689200    695750    702300    708850    715400    721950    728500    735050    741600    748150    754700    761250    767800    774350    780900    787450    794000    800550    807100    813650    820200    826750    833300    839850    846400    852950    859500    866050    872600    879150    885700    892250    898800    905350    911900    918450    925000    931550    938100    944650    951200    957750    964300    970850    977400    983950    990500    997050   1003600   1010150   1016700   1023250   1029800   1036350   1042900   1049450   1056000   1062550   1069100
+    425800    432450    439100    445750    452400    459050    465700    472350    479000    485650    492300    498950    505600    512250    518900    525550    532200    538850    545500    552150    558800    565450    572100    578750    585400    592050    598700    605350    612000    618650    625300    631950    638600    645250    651900    658550    665200    671850    678500    685150    691800    698450    705100    711750    718400    725050    731700    738350    745000    751650    758300    764950    771600    778250    784900    791550    798200    804850    811500    818150    824800    831450    838100    844750    851400    858050    864700    871350    878000    884650    891300    897950    904600    911250    917900    924550    931200    937850    944500    951150    957800    964450    971100    977750    984400    991050    997700   1004350   1011000   1017650   1024300   1030950   1037600   1044250   1050900   1057550   1064200   1070850   1077500   1084150
+    430950    437700    444450    451200    457950    464700    471450    478200    484950    491700    498450    505200    511950    518700    525450    532200    538950    545700    552450    559200    565950    572700    579450    586200    592950    599700    606450    613200    619950    626700    633450    640200    646950    653700    660450    667200    673950    680700    687450    694200    700950    707700    714450    721200    727950    734700    741450    748200    754950    761700    768450    775200    781950    788700    795450    802200    808950    815700    822450    829200    835950    842700    849450    856200    862950    869700    876450    883200    889950    896700    903450    910200    916950    923700    930450    937200    943950    950700    957450    964200    970950    977700    984450    991200    997950   1004700   1011450   1018200   1024950   1031700   1038450   1045200   1051950   1058700   1065450   1072200   1078950   1085700   1092450   1099200
+    436100    442950    449800    456650    463500    470350    477200    484050    490900    497750    504600    511450    518300    525150    532000    538850    545700    552550    559400    566250    573100    579950    586800    593650    600500    607350    614200    621050    627900    634750    641600    648450    655300    662150    669000    675850    682700    689550    696400    703250    710100    716950    723800    730650    737500    744350    751200    758050    764900    771750    778600    785450    792300    799150    806000    812850    819700    826550    833400    840250    847100    853950    860800    867650    874500    881350    888200    895050    901900    908750    915600    922450    929300    936150    943000    949850    956700    963550    970400    977250    984100    990950    997800   1004650   1011500   1018350   1025200   1032050   1038900   1045750   1052600   1059450   1066300   1073150   1080000   1086850   1093700   1100550   1107400   1114250
+    441250    448200    455150    462100    469050    476000    482950    489900    496850    503800    510750    517700    524650    531600    538550    545500    552450    559400    566350    573300    580250    587200    594150    601100    608050    615000    621950    628900    635850    642800    649750    656700    663650    670600    677550    684500    691450    698400    705350    712300    719250    726200    733150    740100    747050    754000    760950    767900    774850    781800    788750    795700    802650    809600    816550    823500    830450    837400    844350    851300    858250    865200    872150    879100    886050    893000    899950    906900    913850    920800    927750    934700    941650    948600    955550    962500    969450    976400    983350    990300    997250   1004200   1011150   1018100   1025050   1032000   1038950   1045900   1052850   1059800   1066750   1073700   1080650   1087600   1094550   1101500   1108450   1115400   1122350   1129300
+    446400    453450    460500    467550    474600    481650    488700    495750    502800    509850    516900    523950    531000    538050    545100    552150    559200    566250    573300    580350    587400    594450    601500    608550    615600    622650    629700    636750    643800    650850    657900    664950    672000    679050    686100    693150    700200    707250    714300    721350    728400    735450    742500    749550    756600    763650    770700    777750    784800    791850    798900    805950    813000    820050    827100    834150    841200    848250    855300    862350    869400    876450    883500    890550    897600    904650    911700    918750    925800    932850    939900    946950    954000    961050    968100    975150    982200    989250    996300   1003350   1010400   1017450   1024500   1031550   1038600   1045650   1052700   1059750   1066800   1073850   1080900   1087950   1095000   1102050   1109100   1116150   1123200   1130250   1137300   1144350
+    451550    458700    465850    473000    480150    487300    494450    501600    508750    515900    523050    530200    537350    544500    551650    558800    565950    573100    580250    587400    594550    601700    608850    616000    623150    630300    637450    644600    651750    658900    666050    673200    680350    687500    694650    701800    708950    716100    723250    730400    737550    744700    751850    759000    766150    773300    780450    787600    794750    801900    809050    816200    823350    830500    837650    844800    851950    859100    866250    873400    880550    887700    894850    902000    909150    916300    923450    930600    937750    944900    952050    959200    966350    973500    980650    987800    994950   1002100   1009250   1016400   1023550   1030700   1037850   1045000   1052150   1059300   1066450   1073600   1080750   1087900   1095050   1102200   1109350   1116500   1123650   1130800   1137950   1145100   1152250   1159400
+    456700    463950    471200    478450    485700    492950    500200    507450    514700    521950    529200    536450    543700    550950    558200    565450    572700    579950    587200    594450    601700    608950    616200    623450    630700    637950    645200    652450    659700    666950    674200    681450    688700    695950    703200    710450    717700    724950    732200    739450    746700    753950    761200    768450    775700    782950    790200    797450    804700    811950    819200    826450    833700    840950    848200    855450    862700    869950    877200    884450    891700    898950    906200    913450    920700    927950    935200    942450    949700    956950    964200    971450    978700    985950    993200   1000450   1007700   1014950   1022200   1029450   1036700   1043950   1051200   1058450   1065700   1072950   1080200   1087450   1094700   1101950   1109200   1116450   1123700   1130950   1138200   1145450   1152700   1159950   1167200   1174450
+    461850    469200    476550    483900    491250    498600    505950    513300    520650    528000    535350    542700    550050    557400    564750    572100    579450    586800    594150    601500    608850    616200    623550    630900    638250    645600    652950    660300    667650    675000    682350    689700    697050    704400    711750    719100    726450    733800    741150    748500    755850    763200    770550    777900    785250    792600    799950    807300    814650    822000    829350    836700    844050    851400    858750    866100    873450    880800    888150    895500    902850    910200    917550    924900    932250    939600    946950    954300    961650    969000    976350    983700    991050    998400   1005750   1013100   1020450   1027800   1035150   1042500   1049850   1057200   1064550   1071900   1079250   1086600   1093950   1101300   1108650   1116000   1123350   1130700   1138050   1145400   1152750   1160100   1167450   1174800   1182150   1189500
+    467000    474450    481900    489350    496800    504250    511700    519150    526600    534050    541500    548950    556400    563850    571300    578750    586200    593650    601100    608550    616000    623450    630900    638350    645800    653250    660700    668150    675600    683050    690500    697950    705400    712850    720300    727750    735200    742650    750100    757550    765000    772450    779900    787350    794800    802250    809700    817150    824600    832050    839500    846950    854400    861850    869300    876750    884200    891650    899100    906550    914000    921450    928900    936350    943800    951250    958700    966150    973600    981050    988500    995950   1003400   1010850   1018300   1025750   1033200   1040650   1048100   1055550   1063000   1070450   1077900   1085350   1092800   1100250   1107700   1115150   1122600   1130050   1137500   1144950   1152400   1159850   1167300   1174750   1182200   1189650   1197100   1204550
+    472150    479700    487250    494800    502350    509900    517450    525000    532550    540100    547650    555200    562750    570300    577850    585400    592950    600500    608050    615600    623150    630700    638250    645800    653350    660900    668450    676000    683550    691100    698650    706200    713750    721300    728850    736400    743950    751500    759050    766600    774150    781700    789250    796800    804350    811900    819450    827000    834550    842100    849650    857200    864750    872300    879850    887400    894950    902500    910050    917600    925150    932700    940250    947800    955350    962900    970450    978000    985550    993100   1000650   1008200   1015750   1023300   1030850   1038400   1045950   1053500   1061050   1068600   1076150   1083700   1091250   1098800   1106350   1113900   1121450   1129000   1136550   1144100   1151650   1159200   1166750   1174300   1181850   1189400   1196950   1204500   1212050   1219600
+    477300    484950    492600    500250    507900    515550    523200    530850    538500    546150    553800    561450    569100    576750    584400    592050    599700    607350    615000    622650    630300    637950    645600    653250    660900    668550    676200    683850    691500    699150    706800    714450    722100    729750    737400    745050    752700    760350    768000    775650    783300    790950    798600    806250    813900    821550    829200    836850    844500    852150    859800    867450    875100    882750    890400    898050    905700    913350    921000    928650    936300    943950    951600    959250    966900    974550    982200    989850    997500   1005150   1012800   1020450   1028100   1035750   1043400   1051050   1058700   1066350   1074000   1081650   1089300   1096950   1104600   1112250   1119900   1127550   1135200   1142850   1150500   1158150   1165800   1173450   1181100   1188750   1196400   1204050   1211700   1219350   1227000   1234650
+    482450    490200    497950    505700    513450    521200    528950    536700    544450    552200    559950    567700    575450    583200    590950    598700    606450    614200    621950    629700    637450    645200    652950    660700    668450    676200    683950    691700    699450    707200    714950    722700    730450    738200    745950    753700    761450    769200    776950    784700    792450    800200    807950    815700    823450    831200    838950    846700    854450    862200    869950    877700    885450    893200    900950    908700    916450    924200    931950    939700    947450    955200    962950    970700    978450    986200    993950   1001700   1009450   1017200   1024950   1032700   1040450   1048200   1055950   1063700   1071450   1079200   1086950   1094700   1102450   1110200   1117950   1125700   1133450   1141200   1148950   1156700   1164450   1172200   1179950   1187700   1195450   1203200   1210950   1218700   1226450   1234200   1241950   1249700
+    487600    495450    503300    511150    519000    526850    534700    542550    550400    558250    566100    573950    581800    589650    597500    605350    613200    621050    628900    636750    644600    652450    660300    668150    676000    683850    691700    699550    707400    715250    723100    730950    738800    746650    754500    762350    770200    778050    785900    793750    801600    809450    817300    825150    833000    840850    848700    856550    864400    872250    880100    887950    895800    903650    911500    919350    927200    935050    942900    950750    958600    966450    974300    982150    990000    997850   1005700   1013550   1021400   1029250   1037100   1044950   1052800   1060650   1068500   1076350   1084200   1092050   1099900   1107750   1115600   1123450   1131300   1139150   1147000   1154850   1162700   1170550   1178400   1186250   1194100   1201950   1209800   1217650   1225500   1233350   1241200   1249050   1256900   1264750
+    492750    500700    508650    516600    524550    532500    540450    548400    556350    564300    572250    580200    588150    596100    604050    612000    619950    627900    635850    643800    651750    659700    667650    675600    683550    691500    699450    707400    715350    723300    731250    739200    747150    755100    763050    771000    778950    786900    794850    802800    810750    818700    826650    834600    842550    850500    858450    866400    874350    882300    890250    898200    906150    914100    922050    930000    937950    945900    953850    961800    969750    977700    985650    993600   1001550   1009500   1017450   1025400   1033350   1041300   1049250   1057200   1065150   1073100   1081050   1089000   1096950   1104900   1112850   1120800   1128750   1136700   1144650   1152600   1160550   1168500   1176450   1184400   1192350   1200300   1208250   1216200   1224150   1232100   1240050   1248000   1255950   1263900   1271850   1279800
+    497900    505950    514000    522050    530100    538150    546200    554250    562300    570350    578400    586450    594500    602550    610600    618650    626700    634750    642800    650850    658900    666950    675000    683050    691100    699150    707200    715250    723300    731350    739400    747450    755500    763550    771600    779650    787700    795750    803800    811850    819900    827950    836000    844050    852100    860150    868200    876250    884300    892350    900400    908450    916500    924550    932600    940650    948700    956750    964800    972850    980900    988950    997000   1005050   1013100   1021150   1029200   1037250   1045300   1053350   1061400   1069450   1077500   1085550   1093600   1101650   1109700   1117750   1125800   1133850   1141900   1149950   1158000   1166050   1174100   1182150   1190200   1198250   1206300   1214350   1222400   1230450   1238500   1246550   1254600   1262650   1270700   1278750   1286800   1294850
+    503050    511200    519350    527500    535650    543800    551950    560100    568250    576400    584550    592700    600850    609000    617150    625300    633450    641600    649750    657900    666050    674200    682350    690500    698650    706800    714950    723100    731250    739400    747550    755700    763850    772000    780150    788300    796450    804600    812750    820900    829050    837200    845350    853500    861650    869800    877950    886100    894250    902400    910550    918700    926850    935000    943150    951300    959450    967600    975750    983900    992050   1000200   1008350   1016500   1024650   1032800   1040950   1049100   1057250   1065400   1073550   1081700   1089850   1098000   1106150   1114300   1122450   1130600   1138750   1146900   1155050   1163200   1171350   1179500   1187650   1195800   1203950   1212100   1220250   1228400   1236550   1244700   1252850   1261000   1269150   1277300   1285450   1293600   1301750   1309900
+    508200    516450    524700    532950    541200    549450    557700    565950    574200    582450    590700    598950    607200    615450    623700    631950    640200    648450    656700    664950    673200    681450    689700    697950    706200    714450    722700    730950    739200    747450    755700    763950    772200    780450    788700    796950    805200    813450    821700    829950    838200    846450    854700    862950    871200    879450    887700    895950    904200    912450    920700    928950    937200    945450    953700    961950    970200    978450    986700    994950   1003200   1011450   1019700   1027950   1036200   1044450   1052700   1060950   1069200   1077450   1085700   1093950   1102200   1110450   1118700   1126950   1135200   1143450   1151700   1159950   1168200   1176450   1184700   1192950   1201200   1209450   1217700   1225950   1234200   1242450   1250700   1258950   1267200   1275450   1283700   1291950   1300200   1308450   1316700   1324950
+    513350    521700    530050    538400    546750    555100    563450    571800    580150    588500    596850    605200    613550    621900    630250    638600    646950    655300    663650    672000    680350    688700    697050    705400    713750    722100    730450    738800    747150    755500    763850    772200    780550    788900    797250    805600    813950    822300    830650    839000    847350    855700    864050    872400    880750    889100    897450    905800    914150    922500    930850    939200    947550    955900    964250    972600    980950    989300    997650   1006000   1014350   1022700   1031050   1039400   1047750   1056100   1064450   1072800   1081150   1089500   1097850   1106200   1114550   1122900   1131250   1139600   1147950   1156300   1164650   1173000   1181350   1189700   1198050   1206400   1214750   1223100   1231450   1239800   1248150   1256500   1264850   1273200   1281550   1289900   1298250   1306600   1314950   1323300   1331650   1340000
+    518500    526950    535400    543850    552300    560750    569200    577650    586100    594550    603000    611450    619900    628350    636800    645250    653700    662150    670600    679050    687500    695950    704400    712850    721300    729750    738200    746650    755100    763550    772000    780450    788900    797350    805800    814250    822700    831150    839600    848050    856500    864950    873400    881850    890300    898750    907200    915650    924100    932550    941000    949450    957900    966350    974800    983250    991700   1000150   1008600   1017050   1025500   1033950   1042400   1050850   1059300   1067750   1076200   1084650   1093100   1101550   1110000   1118450   1126900   1135350   1143800   1152250   1160700   1169150   1177600   1186050   1194500   1202950   1211400   1219850   1228300   1236750   1245200   1253650   1262100   1270550   1279000   1287450   1295900   1304350   1312800   1321250   1329700   1338150   1346600   1355050
+    523650    532200    540750    549300    557850    566400    574950    583500    592050    600600    609150    617700    626250    634800    643350    651900    660450    669000    677550    686100    694650    703200    711750    720300    728850    737400    745950    754500    763050    771600    780150    788700    797250    805800    814350    822900    831450    840000    848550    857100    865650    874200    882750    891300    899850    908400    916950    925500    934050    942600    951150    959700    968250    976800    985350    993900   1002450   1011000   1019550   1028100   1036650   1045200   1053750   1062300   1070850   1079400   1087950   1096500   1105050   1113600   1122150   1130700   1139250   1147800   1156350   1164900   1173450   1182000   1190550   1199100   1207650   1216200   1224750   1233300   1241850   1250400   1258950   1267500   1276050   1284600   1293150   1301700   1310250   1318800   1327350   1335900   1344450   1353000   1361550   1370100
+    528800    537450    546100    554750    563400    572050    580700    589350    598000    606650    615300    623950    632600    641250    649900    658550    667200    675850    684500    693150    701800    710450    719100    727750    736400    745050    753700    762350    771000    779650    788300    796950    805600    814250    822900    831550    840200    848850    857500    866150    874800    883450    892100    900750    909400    918050    926700    935350    944000    952650    961300    969950    978600    987250    995900   1004550   1013200   1021850   1030500   1039150   1047800   1056450   1065100   1073750   1082400   1091050   1099700   1108350   1117000   1125650   1134300   1142950   1151600   1160250   1168900   1177550   1186200   1194850   1203500   1212150   1220800   1229450   1238100   1246750   1255400   1264050   1272700   1281350   1290000   1298650   1307300   1315950   1324600   1333250   1341900   1350550   1359200   1367850   1376500   1385150
+    533950    542700    551450    560200    568950    577700    586450    595200    603950    612700    621450    630200    638950    647700    656450    665200    673950    682700    691450    700200    708950    717700    726450    735200    743950    752700    761450    770200    778950    787700    796450    805200    813950    822700    831450    840200    848950    857700    866450    875200    883950    892700    901450    910200    918950    927700    936450    945200    953950    962700    971450    980200    988950    997700   1006450   1015200   1023950   1032700   1041450   1050200   1058950   1067700   1076450   1085200   1093950   1102700   1111450   1120200   1128950   1137700   1146450   1155200   1163950   1172700   1181450   1190200   1198950   1207700   1216450   1225200   1233950   1242700   1251450   1260200   1268950   1277700   1286450   1295200   1303950   1312700   1321450   1330200   1338950   1347700   1356450   1365200   1373950   1382700   1391450   1400200
+    539100    547950    556800    565650    574500    583350    592200    601050    609900    618750    627600    636450    645300    654150    663000    671850    680700    689550    698400    707250    716100    724950    733800    742650    751500    760350    769200    778050    786900    795750    804600    813450    822300    831150    840000    848850    857700    866550    875400    884250    893100    901950    910800    919650    928500    937350    946200    955050    963900    972750    981600    990450    999300   1008150   1017000   1025850   1034700   1043550   1052400   1061250   1070100   1078950   1087800   1096650   1105500   1114350   1123200   1132050   1140900   1149750   1158600   1167450   1176300   1185150   1194000   1202850   1211700   1220550   1229400   1238250   1247100   1255950   1264800   1273650   1282500   1291350   1300200   1309050   1317900   1326750   1335600   1344450   1353300   1362150   1371000   1379850   1388700   1397550   1406400   1415250
+    544250    553200    562150    571100    580050    589000    597950    606900    615850    624800    633750    642700    651650    660600    669550    678500    687450    696400    705350    714300    723250    732200    741150    750100    759050    768000    776950    785900    794850    803800    812750    821700    830650    839600    848550    857500    866450    875400    884350    893300    902250    911200    920150    929100    938050    947000    955950    964900    973850    982800    991750   1000700   1009650   1018600   1027550   1036500   1045450   1054400   1063350   1072300   1081250   1090200   1099150   1108100   1117050   1126000   1134950   1143900   1152850   1161800   1170750   1179700   1188650   1197600   1206550   1215500   1224450   1233400   1242350   1251300   1260250   1269200   1278150   1287100   1296050   1305000   1313950   1322900   1331850   1340800   1349750   1358700   1367650   1376600   1385550   1394500   1403450   1412400   1421350   1430300
+    549400    558450    567500    576550    585600    594650    603700    612750    621800    630850    639900    648950    658000    667050    676100    685150    694200    703250    712300    721350    730400    739450    748500    757550    766600    775650    784700    793750    802800    811850    820900    829950    839000    848050    857100    866150    875200    884250    893300    902350    911400    920450    929500    938550    947600    956650    965700    974750    983800    992850   1001900   1010950   1020000   1029050   1038100   1047150   1056200   1065250   1074300   1083350   1092400   1101450   1110500   1119550   1128600   1137650   1146700   1155750   1164800   1173850   1182900   1191950   1201000   1210050   1219100   1228150   1237200   1246250   1255300   1264350   1273400   1282450   1291500   1300550   1309600   1318650   1327700   1336750   1345800   1354850   1363900   1372950   1382000   1391050   1400100   1409150   1418200   1427250   1436300   1445350
+    554550    563700    572850    582000    591150    600300    609450    618600    627750    636900    646050    655200    664350    673500    682650    691800    700950    710100    719250    728400    737550    746700    755850    765000    774150    783300    792450    801600    810750    819900    829050    838200    847350    856500    865650    874800    883950    893100    902250    911400    920550    929700    938850    948000    957150    966300    975450    984600    993750   1002900   1012050   1021200   1030350   1039500   1048650   1057800   1066950   1076100   1085250   1094400   1103550   1112700   1121850   1131000   1140150   1149300   1158450   1167600   1176750   1185900   1195050   1204200   1213350   1222500   1231650   1240800   1249950   1259100   1268250   1277400   1286550   1295700   1304850   1314000   1323150   1332300   1341450   1350600   1359750   1368900   1378050   1387200   1396350   1405500   1414650   1423800   1432950   1442100   1451250   1460400
+    559700    568950    578200    587450    596700    605950    615200    624450    633700    642950    652200    661450    670700    679950    689200    698450    707700    716950    726200    735450    744700    753950    763200    772450    781700    790950    800200    809450    818700    827950    837200    846450    855700    864950    874200    883450    892700    901950    911200    920450    929700    938950    948200    957450    966700    975950    985200    994450   1003700   1012950   1022200   1031450   1040700   1049950   1059200   1068450   1077700   1086950   1096200   1105450   1114700   1123950   1133200   1142450   1151700   1160950   1170200   1179450   1188700   1197950   1207200   1216450   1225700   1234950   1244200   1253450   1262700   1271950   1281200   1290450   1299700   1308950   1318200   1327450   1336700   1345950   1355200   1364450   1373700   1382950   1392200   1401450   1410700   1419950   1429200   1438450   1447700   1456950   1466200   1475450
+    564850    574200    583550    592900    602250    611600    620950    630300    639650    649000    658350    667700    677050    686400    695750    705100    714450    723800    733150    742500    751850    761200    770550    779900    789250    798600    807950    817300    826650    836000    845350    854700    864050    873400    882750    892100    901450    910800    920150    929500    938850    948200    957550    966900    976250    985600    994950   1004300   1013650   1023000   1032350   1041700   1051050   1060400   1069750   1079100   1088450   1097800   1107150   1116500   1125850   1135200   1144550   1153900   1163250   1172600   1181950   1191300   1200650   1210000   1219350   1228700   1238050   1247400   1256750   1266100   1275450   1284800   1294150   1303500   1312850   1322200   1331550   1340900   1350250   1359600   1368950   1378300   1387650   1397000   1406350   1415700   1425050   1434400   1443750   1453100   1462450   1471800   1481150   1490500
+    570000    579450    588900    598350    607800    617250    626700    636150    645600    655050    664500    673950    683400    692850    702300    711750    721200    730650    740100    749550    759000    768450    777900    787350    796800    806250    815700    825150    834600    844050    853500    862950    872400    881850    891300    900750    910200    919650    929100    938550    948000    957450    966900    976350    985800    995250   1004700   1014150   1023600   1033050   1042500   1051950   1061400   1070850   1080300   1089750   1099200   1108650   1118100   1127550   1137000   1146450   1155900   1165350   1174800   1184250   1193700   1203150   1212600   1222050   1231500   1240950   1250400   1259850   1269300   1278750   1288200   1297650   1307100   1316550   1326000   1335450   1344900   1354350   1363800   1373250   1382700   1392150   1401600   1411050   1420500   1429950   1439400   1448850   1458300   1467750   1477200   1486650   1496100   1505550
+    575150    584700    594250    603800    613350    622900    632450    642000    651550    661100    670650    680200    689750    699300    708850    718400    727950    737500    747050    756600    766150    775700    785250    794800    804350    813900    823450    833000    842550    852100    861650    871200    880750    890300    899850    909400    918950    928500    938050    947600    957150    966700    976250    985800    995350   1004900   1014450   1024000   1033550   1043100   1052650   1062200   1071750   1081300   1090850   1100400   1109950   1119500   1129050   1138600   1148150   1157700   1167250   1176800   1186350   1195900   1205450   1215000   1224550   1234100   1243650   1253200   1262750   1272300   1281850   1291400   1300950   1310500   1320050   1329600   1339150   1348700   1358250   1367800   1377350   1386900   1396450   1406000   1415550   1425100   1434650   1444200   1453750   1463300   1472850   1482400   1491950   1501500   1511050   1520600
+    580300    589950    599600    609250    618900    628550    638200    647850    657500    667150    676800    686450    696100    705750    715400    725050    734700    744350    754000    763650    773300    782950    792600    802250    811900    821550    831200    840850    850500    860150    869800    879450    889100    898750    908400    918050    927700    937350    947000    956650    966300    975950    985600    995250   1004900   1014550   1024200   1033850   1043500   1053150   1062800   1072450   1082100   1091750   1101400   1111050   1120700   1130350   1140000   1149650   1159300   1168950   1178600   1188250   1197900   1207550   1217200   1226850   1236500   1246150   1255800   1265450   1275100   1284750   1294400   1304050   1313700   1323350   1333000   1342650   1352300   1361950   1371600   1381250   1390900   1400550   1410200   1419850   1429500   1439150   1448800   1458450   1468100   1477750   1487400   1497050   1506700   1516350   1526000   1535650
+    585450    595200    604950    614700    624450    634200    643950    653700    663450    673200    682950    692700    702450    712200    721950    731700    741450    751200    760950    770700    780450    790200    799950    809700    819450    829200    838950    848700    858450    868200    877950    887700    897450    907200    916950    926700    936450    946200    955950    965700    975450    985200    994950   1004700   1014450   1024200   1033950   1043700   1053450   1063200   1072950   1082700   1092450   1102200   1111950   1121700   1131450   1141200   1150950   1160700   1170450   1180200   1189950   1199700   1209450   1219200   1228950   1238700   1248450   1258200   1267950   1277700   1287450   1297200   1306950   1316700   1326450   1336200   1345950   1355700   1365450   1375200   1384950   1394700   1404450   1414200   1423950   1433700   1443450   1453200   1462950   1472700   1482450   1492200   1501950   1511700   1521450   1531200   1540950   1550700
+    590600    600450    610300    620150    630000    639850    649700    659550    669400    679250    689100    698950    708800    718650    728500    738350    748200    758050    767900    777750    787600    797450    807300    817150    827000    836850    846700    856550    866400    876250    886100    895950    905800    915650    925500    935350    945200    955050    964900    974750    984600    994450   1004300   1014150   1024000   1033850   1043700   1053550   1063400   1073250   1083100   1092950   1102800   1112650   1122500   1132350   1142200   1152050   1161900   1171750   1181600   1191450   1201300   1211150   1221000   1230850   1240700   1250550   1260400   1270250   1280100   1289950   1299800   1309650   1319500   1329350   1339200   1349050   1358900   1368750   1378600   1388450   1398300   1408150   1418000   1427850   1437700   1447550   1457400   1467250   1477100   1486950   1496800   1506650   1516500   1526350   1536200   1546050   1555900   1565750
+    595750    605700    615650    625600    635550    645500    655450    665400    675350    685300    695250    705200    715150    725100    735050    745000    754950    764900    774850    784800    794750    804700    814650    824600    834550    844500    854450    864400    874350    884300    894250    904200    914150    924100    934050    944000    953950    963900    973850    983800    993750   1003700   1013650   1023600   1033550   1043500   1053450   1063400   1073350   1083300   1093250   1103200   1113150   1123100   1133050   1143000   1152950   1162900   1172850   1182800   1192750   1202700   1212650   1222600   1232550   1242500   1252450   1262400   1272350   1282300   1292250   1302200   1312150   1322100   1332050   1342000   1351950   1361900   1371850   1381800   1391750   1401700   1411650   1421600   1431550   1441500   1451450   1461400   1471350   1481300   1491250   1501200   1511150   1521100   1531050   1541000   1550950   1560900   1570850   1580800
+    600900    610950    621000    631050    641100    651150    661200    671250    681300    691350    701400    711450    721500    731550    741600    751650    761700    771750    781800    791850    801900    811950    822000    832050    842100    852150    862200    872250    882300    892350    902400    912450    922500    932550    942600    952650    962700    972750    982800    992850   1002900   1012950   1023000   1033050   1043100   1053150   1063200   1073250   1083300   1093350   1103400   1113450   1123500   1133550   1143600   1153650   1163700   1173750   1183800   1193850   1203900   1213950   1224000   1234050   1244100   1254150   1264200   1274250   1284300   1294350   1304400   1314450   1324500   1334550   1344600   1354650   1364700   1374750   1384800   1394850   1404900   1414950   1425000   1435050   1445100   1455150   1465200   1475250   1485300   1495350   1505400   1515450   1525500   1535550   1545600   1555650   1565700   1575750   1585800   1595850
+    606050    616200    626350    636500    646650    656800    666950    677100    687250    697400    707550    717700    727850    738000    748150    758300    768450    778600    788750    798900    809050    819200    829350    839500    849650    859800    869950    880100    890250    900400    910550    920700    930850    941000    951150    961300    971450    981600    991750   1001900   1012050   1022200   1032350   1042500   1052650   1062800   1072950   1083100   1093250   1103400   1113550   1123700   1133850   1144000   1154150   1164300   1174450   1184600   1194750   1204900   1215050   1225200   1235350   1245500   1255650   1265800   1275950   1286100   1296250   1306400   1316550   1326700   1336850   1347000   1357150   1367300   1377450   1387600   1397750   1407900   1418050   1428200   1438350   1448500   1458650   1468800   1478950   1489100   1499250   1509400   1519550   1529700   1539850   1550000   1560150   1570300   1580450   1590600   1600750   1610900
+    611200    621450    631700    641950    652200    662450    672700    682950    693200    703450    713700    723950    734200    744450    754700    764950    775200    785450    795700    805950    816200    826450    836700    846950    857200    867450    877700    887950    898200    908450    918700    928950    939200    949450    959700    969950    980200    990450   1000700   1010950   1021200   1031450   1041700   1051950   1062200   1072450   1082700   1092950   1103200   1113450   1123700   1133950   1144200   1154450   1164700   1174950   1185200   1195450   1205700   1215950   1226200   1236450   1246700   1256950   1267200   1277450   1287700   1297950   1308200   1318450   1328700   1338950   1349200   1359450   1369700   1379950   1390200   1400450   1410700   1420950   1431200   1441450   1451700   1461950   1472200   1482450   1492700   1502950   1513200   1523450   1533700   1543950   1554200   1564450   1574700   1584950   1595200   1605450   1615700   1625950
+    616350    626700    637050    647400    657750    668100    678450    688800    699150    709500    719850    730200    740550    750900    761250    771600    781950    792300    802650    813000    823350    833700    844050    854400    864750    875100    885450    895800    906150    916500    926850    937200    947550    957900    968250    978600    988950    999300   1009650   1020000   1030350   1040700   1051050   1061400   1071750   1082100   1092450   1102800   1113150   1123500   1133850   1144200   1154550   1164900   1175250   1185600   1195950   1206300   1216650   1227000   1237350   1247700   1258050   1268400   1278750   1289100   1299450   1309800   1320150   1330500   1340850   1351200   1361550   1371900   1382250   1392600   1402950   1413300   1423650   1434000   1444350   1454700   1465050   1475400   1485750   1496100   1506450   1516800   1527150   1537500   1547850   1558200   1568550   1578900   1589250   1599600   1609950   1620300   1630650   1641000
+    621500    631950    642400    652850    663300    673750    684200    694650    705100    715550    726000    736450    746900    757350    767800    778250    788700    799150    809600    820050    830500    840950    851400    861850    872300    882750    893200    903650    914100    924550    935000    945450    955900    966350    976800    987250    997700   1008150   1018600   1029050   1039500   1049950   1060400   1070850   1081300   1091750   1102200   1112650   1123100   1133550   1144000   1154450   1164900   1175350   1185800   1196250   1206700   1217150   1227600   1238050   1248500   1258950   1269400   1279850   1290300   1300750   1311200   1321650   1332100   1342550   1353000   1363450   1373900   1384350   1394800   1405250   1415700   1426150   1436600   1447050   1457500   1467950   1478400   1488850   1499300   1509750   1520200   1530650   1541100   1551550   1562000   1572450   1582900   1593350   1603800   1614250   1624700   1635150   1645600   1656050
+    626650    637200    647750    658300    668850    679400    689950    700500    711050    721600    732150    742700    753250    763800    774350    784900    795450    806000    816550    827100    837650    848200    858750    869300    879850    890400    900950    911500    922050    932600    943150    953700    964250    974800    985350    995900   1006450   1017000   1027550   1038100   1048650   1059200   1069750   1080300   1090850   1101400   1111950   1122500   1133050   1143600   1154150   1164700   1175250   1185800   1196350   1206900   1217450   1228000   1238550   1249100   1259650   1270200   1280750   1291300   1301850   1312400   1322950   1333500   1344050   1354600   1365150   1375700   1386250   1396800   1407350   1417900   1428450   1439000   1449550   1460100   1470650   1481200   1491750   1502300   1512850   1523400   1533950   1544500   1555050   1565600   1576150   1586700   1597250   1607800   1618350   1628900   1639450   1650000   1660550   1671100
+    631800    642450    653100    663750    674400    685050    695700    706350    717000    727650    738300    748950    759600    770250    780900    791550    802200    812850    823500    834150    844800    855450    866100    876750    887400    898050    908700    919350    930000    940650    951300    961950    972600    983250    993900   1004550   1015200   1025850   1036500   1047150   1057800   1068450   1079100   1089750   1100400   1111050   1121700   1132350   1143000   1153650   1164300   1174950   1185600   1196250   1206900   1217550   1228200   1238850   1249500   1260150   1270800   1281450   1292100   1302750   1313400   1324050   1334700   1345350   1356000   1366650   1377300   1387950   1398600   1409250   1419900   1430550   1441200   1451850   1462500   1473150   1483800   1494450   1505100   1515750   1526400   1537050   1547700   1558350   1569000   1579650   1590300   1600950   1611600   1622250   1632900   1643550   1654200   1664850   1675500   1686150
+    636950    647700    658450    669200    679950    690700    701450    712200    722950    733700    744450    755200    765950    776700    787450    798200    808950    819700    830450    841200    851950    862700    873450    884200    894950    905700    916450    927200    937950    948700    959450    970200    980950    991700   1002450   1013200   1023950   1034700   1045450   1056200   1066950   1077700   1088450   1099200   1109950   1120700   1131450   1142200   1152950   1163700   1174450   1185200   1195950   1206700   1217450   1228200   1238950   1249700   1260450   1271200   1281950   1292700   1303450   1314200   1324950   1335700   1346450   1357200   1367950   1378700   1389450   1400200   1410950   1421700   1432450   1443200   1453950   1464700   1475450   1486200   1496950   1507700   1518450   1529200   1539950   1550700   1561450   1572200   1582950   1593700   1604450   1615200   1625950   1636700   1647450   1658200   1668950   1679700   1690450   1701200
+    642100    652950    663800    674650    685500    696350    707200    718050    728900    739750    750600    761450    772300    783150    794000    804850    815700    826550    837400    848250    859100    869950    880800    891650    902500    913350    924200    935050    945900    956750    967600    978450    989300   1000150   1011000   1021850   1032700   1043550   1054400   1065250   1076100   1086950   1097800   1108650   1119500   1130350   1141200   1152050   1162900   1173750   1184600   1195450   1206300   1217150   1228000   1238850   1249700   1260550   1271400   1282250   1293100   1303950   1314800   1325650   1336500   1347350   1358200   1369050   1379900   1390750   1401600   1412450   1423300   1434150   1445000   1455850   1466700   1477550   1488400   1499250   1510100   1520950   1531800   1542650   1553500   1564350   1575200   1586050   1596900   1607750   1618600   1629450   1640300   1651150   1662000   1672850   1683700   1694550   1705400   1716250
+    647250    658200    669150    680100    691050    702000    712950    723900    734850    745800    756750    767700    778650    789600    800550    811500    822450    833400    844350    855300    866250    877200    888150    899100    910050    921000    931950    942900    953850    964800    975750    986700    997650   1008600   1019550   1030500   1041450   1052400   1063350   1074300   1085250   1096200   1107150   1118100   1129050   1140000   1150950   1161900   1172850   1183800   1194750   1205700   1216650   1227600   1238550   1249500   1260450   1271400   1282350   1293300   1304250   1315200   1326150   1337100   1348050   1359000   1369950   1380900   1391850   1402800   1413750   1424700   1435650   1446600   1457550   1468500   1479450   1490400   1501350   1512300   1523250   1534200   1545150   1556100   1567050   1578000   1588950   1599900   1610850   1621800   1632750   1643700   1654650   1665600   1676550   1687500   1698450   1709400   1720350   1731300
+    652400    663450    674500    685550    696600    707650    718700    729750    740800    751850    762900    773950    785000    796050    807100    818150    829200    840250    851300    862350    873400    884450    895500    906550    917600    928650    939700    950750    961800    972850    983900    994950   1006000   1017050   1028100   1039150   1050200   1061250   1072300   1083350   1094400   1105450   1116500   1127550   1138600   1149650   1160700   1171750   1182800   1193850   1204900   1215950   1227000   1238050   1249100   1260150   1271200   1282250   1293300   1304350   1315400   1326450   1337500   1348550   1359600   1370650   1381700   1392750   1403800   1414850   1425900   1436950   1448000   1459050   1470100   1481150   1492200   1503250   1514300   1525350   1536400   1547450   1558500   1569550   1580600   1591650   1602700   1613750   1624800   1635850   1646900   1657950   1669000   1680050   1691100   1702150   1713200   1724250   1735300   1746350
+    657550    668700    679850    691000    702150    713300    724450    735600    746750    757900    769050    780200    791350    802500    813650    824800    835950    847100    858250    869400    880550    891700    902850    914000    925150    936300    947450    958600    969750    980900    992050   1003200   1014350   1025500   1036650   1047800   1058950   1070100   1081250   1092400   1103550   1114700   1125850   1137000   1148150   1159300   1170450   1181600   1192750   1203900   1215050   1226200   1237350   1248500   1259650   1270800   1281950   1293100   1304250   1315400   1326550   1337700   1348850   1360000   1371150   1382300   1393450   1404600   1415750   1426900   1438050   1449200   1460350   1471500   1482650   1493800   1504950   1516100   1527250   1538400   1549550   1560700   1571850   1583000   1594150   1605300   1616450   1627600   1638750   1649900   1661050   1672200   1683350   1694500   1705650   1716800   1727950   1739100   1750250   1761400
+    662700    673950    685200    696450    707700    718950    730200    741450    752700    763950    775200    786450    797700    808950    820200    831450    842700    853950    865200    876450    887700    898950    910200    921450    932700    943950    955200    966450    977700    988950   1000200   1011450   1022700   1033950   1045200   1056450   1067700   1078950   1090200   1101450   1112700   1123950   1135200   1146450   1157700   1168950   1180200   1191450   1202700   1213950   1225200   1236450   1247700   1258950   1270200   1281450   1292700   1303950   1315200   1326450   1337700   1348950   1360200   1371450   1382700   1393950   1405200   1416450   1427700   1438950   1450200   1461450   1472700   1483950   1495200   1506450   1517700   1528950   1540200   1551450   1562700   1573950   1585200   1596450   1607700   1618950   1630200   1641450   1652700   1663950   1675200   1686450   1697700   1708950   1720200   1731450   1742700   1753950   1765200   1776450
+    667850    679200    690550    701900    713250    724600    735950    747300    758650    770000    781350    792700    804050    815400    826750    838100    849450    860800    872150    883500    894850    906200    917550    928900    940250    951600    962950    974300    985650    997000   1008350   1019700   1031050   1042400   1053750   1065100   1076450   1087800   1099150   1110500   1121850   1133200   1144550   1155900   1167250   1178600   1189950   1201300   1212650   1224000   1235350   1246700   1258050   1269400   1280750   1292100   1303450   1314800   1326150   1337500   1348850   1360200   1371550   1382900   1394250   1405600   1416950   1428300   1439650   1451000   1462350   1473700   1485050   1496400   1507750   1519100   1530450   1541800   1553150   1564500   1575850   1587200   1598550   1609900   1621250   1632600   1643950   1655300   1666650   1678000   1689350   1700700   1712050   1723400   1734750   1746100   1757450   1768800   1780150   1791500
+    673000    684450    695900    707350    718800    730250    741700    753150    764600    776050    787500    798950    810400    821850    833300    844750    856200    867650    879100    890550    902000    913450    924900    936350    947800    959250    970700    982150    993600   1005050   1016500   1027950   1039400   1050850   1062300   1073750   1085200   1096650   1108100   1119550   1131000   1142450   1153900   1165350   1176800   1188250   1199700   1211150   1222600   1234050   1245500   1256950   1268400   1279850   1291300   1302750   1314200   1325650   1337100   1348550   1360000   1371450   1382900   1394350   1405800   1417250   1428700   1440150   1451600   1463050   1474500   1485950   1497400   1508850   1520300   1531750   1543200   1554650   1566100   1577550   1589000   1600450   1611900   1623350   1634800   1646250   1657700   1669150   1680600   1692050   1703500   1714950   1726400   1737850   1749300   1760750   1772200   1783650   1795100   1806550
+    678150    689700    701250    712800    724350    735900    747450    759000    770550    782100    793650    805200    816750    828300    839850    851400    862950    874500    886050    897600    909150    920700    932250    943800    955350    966900    978450    990000   1001550   1013100   1024650   1036200   1047750   1059300   1070850   1082400   1093950   1105500   1117050   1128600   1140150   1151700   1163250   1174800   1186350   1197900   1209450   1221000   1232550   1244100   1255650   1267200   1278750   1290300   1301850   1313400   1324950   1336500   1348050   1359600   1371150   1382700   1394250   1405800   1417350   1428900   1440450   1452000   1463550   1475100   1486650   1498200   1509750   1521300   1532850   1544400   1555950   1567500   1579050   1590600   1602150   1613700   1625250   1636800   1648350   1659900   1671450   1683000   1694550   1706100   1717650   1729200   1740750   1752300   1763850   1775400   1786950   1798500   1810050   1821600
+    683300    694950    706600    718250    729900    741550    753200    764850    776500    788150    799800    811450    823100    834750    846400    858050    869700    881350    893000    904650    916300    927950    939600    951250    962900    974550    986200    997850   1009500   1021150   1032800   1044450   1056100   1067750   1079400   1091050   1102700   1114350   1126000   1137650   1149300   1160950   1172600   1184250   1195900   1207550   1219200   1230850   1242500   1254150   1265800   1277450   1289100   1300750   1312400   1324050   1335700   1347350   1359000   1370650   1382300   1393950   1405600   1417250   1428900   1440550   1452200   1463850   1475500   1487150   1498800   1510450   1522100   1533750   1545400   1557050   1568700   1580350   1592000   1603650   1615300   1626950   1638600   1650250   1661900   1673550   1685200   1696850   1708500   1720150   1731800   1743450   1755100   1766750   1778400   1790050   1801700   1813350   1825000   1836650
+    688450    700200    711950    723700    735450    747200    758950    770700    782450    794200    805950    817700    829450    841200    852950    864700    876450    888200    899950    911700    923450    935200    946950    958700    970450    982200    993950   1005700   1017450   1029200   1040950   1052700   1064450   1076200   1087950   1099700   1111450   1123200   1134950   1146700   1158450   1170200   1181950   1193700   1205450   1217200   1228950   1240700   1252450   1264200   1275950   1287700   1299450   1311200   1322950   1334700   1346450   1358200   1369950   1381700   1393450   1405200   1416950   1428700   1440450   1452200   1463950   1475700   1487450   1499200   1510950   1522700   1534450   1546200   1557950   1569700   1581450   1593200   1604950   1616700   1628450   1640200   1651950   1663700   1675450   1687200   1698950   1710700   1722450   1734200   1745950   1757700   1769450   1781200   1792950   1804700   1816450   1828200   1839950   1851700
+    693600    705450    717300    729150    741000    752850    764700    776550    788400    800250    812100    823950    835800    847650    859500    871350    883200    895050    906900    918750    930600    942450    954300    966150    978000    989850   1001700   1013550   1025400   1037250   1049100   1060950   1072800   1084650   1096500   1108350   1120200   1132050   1143900   1155750   1167600   1179450   1191300   1203150   1215000   1226850   1238700   1250550   1262400   1274250   1286100   1297950   1309800   1321650   1333500   1345350   1357200   1369050   1380900   1392750   1404600   1416450   1428300   1440150   1452000   1463850   1475700   1487550   1499400   1511250   1523100   1534950   1546800   1558650   1570500   1582350   1594200   1606050   1617900   1629750   1641600   1653450   1665300   1677150   1689000   1700850   1712700   1724550   1736400   1748250   1760100   1771950   1783800   1795650   1807500   1819350   1831200   1843050   1854900   1866750
+    698750    710700    722650    734600    746550    758500    770450    782400    794350    806300    818250    830200    842150    854100    866050    878000    889950    901900    913850    925800    937750    949700    961650    973600    985550    997500   1009450   1021400   1033350   1045300   1057250   1069200   1081150   1093100   1105050   1117000   1128950   1140900   1152850   1164800   1176750   1188700   1200650   1212600   1224550   1236500   1248450   1260400   1272350   1284300   1296250   1308200   1320150   1332100   1344050   1356000   1367950   1379900   1391850   1403800   1415750   1427700   1439650   1451600   1463550   1475500   1487450   1499400   1511350   1523300   1535250   1547200   1559150   1571100   1583050   1595000   1606950   1618900   1630850   1642800   1654750   1666700   1678650   1690600   1702550   1714500   1726450   1738400   1750350   1762300   1774250   1786200   1798150   1810100   1822050   1834000   1845950   1857900   1869850   1881800
+    703900    715950    728000    740050    752100    764150    776200    788250    800300    812350    824400    836450    848500    860550    872600    884650    896700    908750    920800    932850    944900    956950    969000    981050    993100   1005150   1017200   1029250   1041300   1053350   1065400   1077450   1089500   1101550   1113600   1125650   1137700   1149750   1161800   1173850   1185900   1197950   1210000   1222050   1234100   1246150   1258200   1270250   1282300   1294350   1306400   1318450   1330500   1342550   1354600   1366650   1378700   1390750   1402800   1414850   1426900   1438950   1451000   1463050   1475100   1487150   1499200   1511250   1523300   1535350   1547400   1559450   1571500   1583550   1595600   1607650   1619700   1631750   1643800   1655850   1667900   1679950   1692000   1704050   1716100   1728150   1740200   1752250   1764300   1776350   1788400   1800450   1812500   1824550   1836600   1848650   1860700   1872750   1884800   1896850
+    709050    721200    733350    745500    757650    769800    781950    794100    806250    818400    830550    842700    854850    867000    879150    891300    903450    915600    927750    939900    952050    964200    976350    988500   1000650   1012800   1024950   1037100   1049250   1061400   1073550   1085700   1097850   1110000   1122150   1134300   1146450   1158600   1170750   1182900   1195050   1207200   1219350   1231500   1243650   1255800   1267950   1280100   1292250   1304400   1316550   1328700   1340850   1353000   1365150   1377300   1389450   1401600   1413750   1425900   1438050   1450200   1462350   1474500   1486650   1498800   1510950   1523100   1535250   1547400   1559550   1571700   1583850   1596000   1608150   1620300   1632450   1644600   1656750   1668900   1681050   1693200   1705350   1717500   1729650   1741800   1753950   1766100   1778250   1790400   1802550   1814700   1826850   1839000   1851150   1863300   1875450   1887600   1899750   1911900
+    714200    726450    738700    750950    763200    775450    787700    799950    812200    824450    836700    848950    861200    873450    885700    897950    910200    922450    934700    946950    959200    971450    983700    995950   1008200   1020450   1032700   1044950   1057200   1069450   1081700   1093950   1106200   1118450   1130700   1142950   1155200   1167450   1179700   1191950   1204200   1216450   1228700   1240950   1253200   1265450   1277700   1289950   1302200   1314450   1326700   1338950   1351200   1363450   1375700   1387950   1400200   1412450   1424700   1436950   1449200   1461450   1473700   1485950   1498200   1510450   1522700   1534950   1547200   1559450   1571700   1583950   1596200   1608450   1620700   1632950   1645200   1657450   1669700   1681950   1694200   1706450   1718700   1730950   1743200   1755450   1767700   1779950   1792200   1804450   1816700   1828950   1841200   1853450   1865700   1877950   1890200   1902450   1914700   1926950
+    719350    731700    744050    756400    768750    781100    793450    805800    818150    830500    842850    855200    867550    879900    892250    904600    916950    929300    941650    954000    966350    978700    991050   1003400   1015750   1028100   1040450   1052800   1065150   1077500   1089850   1102200   1114550   1126900   1139250   1151600   1163950   1176300   1188650   1201000   1213350   1225700   1238050   1250400   1262750   1275100   1287450   1299800   1312150   1324500   1336850   1349200   1361550   1373900   1386250   1398600   1410950   1423300   1435650   1448000   1460350   1472700   1485050   1497400   1509750   1522100   1534450   1546800   1559150   1571500   1583850   1596200   1608550   1620900   1633250   1645600   1657950   1670300   1682650   1695000   1707350   1719700   1732050   1744400   1756750   1769100   1781450   1793800   1806150   1818500   1830850   1843200   1855550   1867900   1880250   1892600   1904950   1917300   1929650   1942000
+    724500    736950    749400    761850    774300    786750    799200    811650    824100    836550    849000    861450    873900    886350    898800    911250    923700    936150    948600    961050    973500    985950    998400   1010850   1023300   1035750   1048200   1060650   1073100   1085550   1098000   1110450   1122900   1135350   1147800   1160250   1172700   1185150   1197600   1210050   1222500   1234950   1247400   1259850   1272300   1284750   1297200   1309650   1322100   1334550   1347000   1359450   1371900   1384350   1396800   1409250   1421700   1434150   1446600   1459050   1471500   1483950   1496400   1508850   1521300   1533750   1546200   1558650   1571100   1583550   1596000   1608450   1620900   1633350   1645800   1658250   1670700   1683150   1695600   1708050   1720500   1732950   1745400   1757850   1770300   1782750   1795200   1807650   1820100   1832550   1845000   1857450   1869900   1882350   1894800   1907250   1919700   1932150   1944600   1957050
+    729650    742200    754750    767300    779850    792400    804950    817500    830050    842600    855150    867700    880250    892800    905350    917900    930450    943000    955550    968100    980650    993200   1005750   1018300   1030850   1043400   1055950   1068500   1081050   1093600   1106150   1118700   1131250   1143800   1156350   1168900   1181450   1194000   1206550   1219100   1231650   1244200   1256750   1269300   1281850   1294400   1306950   1319500   1332050   1344600   1357150   1369700   1382250   1394800   1407350   1419900   1432450   1445000   1457550   1470100   1482650   1495200   1507750   1520300   1532850   1545400   1557950   1570500   1583050   1595600   1608150   1620700   1633250   1645800   1658350   1670900   1683450   1696000   1708550   1721100   1733650   1746200   1758750   1771300   1783850   1796400   1808950   1821500   1834050   1846600   1859150   1871700   1884250   1896800   1909350   1921900   1934450   1947000   1959550   1972100
+    734800    747450    760100    772750    785400    798050    810700    823350    836000    848650    861300    873950    886600    899250    911900    924550    937200    949850    962500    975150    987800   1000450   1013100   1025750   1038400   1051050   1063700   1076350   1089000   1101650   1114300   1126950   1139600   1152250   1164900   1177550   1190200   1202850   1215500   1228150   1240800   1253450   1266100   1278750   1291400   1304050   1316700   1329350   1342000   1354650   1367300   1379950   1392600   1405250   1417900   1430550   1443200   1455850   1468500   1481150   1493800   1506450   1519100   1531750   1544400   1557050   1569700   1582350   1595000   1607650   1620300   1632950   1645600   1658250   1670900   1683550   1696200   1708850   1721500   1734150   1746800   1759450   1772100   1784750   1797400   1810050   1822700   1835350   1848000   1860650   1873300   1885950   1898600   1911250   1923900   1936550   1949200   1961850   1974500   1987150
+    739950    752700    765450    778200    790950    803700    816450    829200    841950    854700    867450    880200    892950    905700    918450    931200    943950    956700    969450    982200    994950   1007700   1020450   1033200   1045950   1058700   1071450   1084200   1096950   1109700   1122450   1135200   1147950   1160700   1173450   1186200   1198950   1211700   1224450   1237200   1249950   1262700   1275450   1288200   1300950   1313700   1326450   1339200   1351950   1364700   1377450   1390200   1402950   1415700   1428450   1441200   1453950   1466700   1479450   1492200   1504950   1517700   1530450   1543200   1555950   1568700   1581450   1594200   1606950   1619700   1632450   1645200   1657950   1670700   1683450   1696200   1708950   1721700   1734450   1747200   1759950   1772700   1785450   1798200   1810950   1823700   1836450   1849200   1861950   1874700   1887450   1900200   1912950   1925700   1938450   1951200   1963950   1976700   1989450   2002200
+    745100    757950    770800    783650    796500    809350    822200    835050    847900    860750    873600    886450    899300    912150    925000    937850    950700    963550    976400    989250   1002100   1014950   1027800   1040650   1053500   1066350   1079200   1092050   1104900   1117750   1130600   1143450   1156300   1169150   1182000   1194850   1207700   1220550   1233400   1246250   1259100   1271950   1284800   1297650   1310500   1323350   1336200   1349050   1361900   1374750   1387600   1400450   1413300   1426150   1439000   1451850   1464700   1477550   1490400   1503250   1516100   1528950   1541800   1554650   1567500   1580350   1593200   1606050   1618900   1631750   1644600   1657450   1670300   1683150   1696000   1708850   1721700   1734550   1747400   1760250   1773100   1785950   1798800   1811650   1824500   1837350   1850200   1863050   1875900   1888750   1901600   1914450   1927300   1940150   1953000   1965850   1978700   1991550   2004400   2017250
+    750250    763200    776150    789100    802050    815000    827950    840900    853850    866800    879750    892700    905650    918600    931550    944500    957450    970400    983350    996300   1009250   1022200   1035150   1048100   1061050   1074000   1086950   1099900   1112850   1125800   1138750   1151700   1164650   1177600   1190550   1203500   1216450   1229400   1242350   1255300   1268250   1281200   1294150   1307100   1320050   1333000   1345950   1358900   1371850   1384800   1397750   1410700   1423650   1436600   1449550   1462500   1475450   1488400   1501350   1514300   1527250   1540200   1553150   1566100   1579050   1592000   1604950   1617900   1630850   1643800   1656750   1669700   1682650   1695600   1708550   1721500   1734450   1747400   1760350   1773300   1786250   1799200   1812150   1825100   1838050   1851000   1863950   1876900   1889850   1902800   1915750   1928700   1941650   1954600   1967550   1980500   1993450   2006400   2019350   2032300
+    755400    768450    781500    794550    807600    820650    833700    846750    859800    872850    885900    898950    912000    925050    938100    951150    964200    977250    990300   1003350   1016400   1029450   1042500   1055550   1068600   1081650   1094700   1107750   1120800   1133850   1146900   1159950   1173000   1186050   1199100   1212150   1225200   1238250   1251300   1264350   1277400   1290450   1303500   1316550   1329600   1342650   1355700   1368750   1381800   1394850   1407900   1420950   1434000   1447050   1460100   1473150   1486200   1499250   1512300   1525350   1538400   1551450   1564500   1577550   1590600   1603650   1616700   1629750   1642800   1655850   1668900   1681950   1695000   1708050   1721100   1734150   1747200   1760250   1773300   1786350   1799400   1812450   1825500   1838550   1851600   1864650   1877700   1890750   1903800   1916850   1929900   1942950   1956000   1969050   1982100   1995150   2008200   2021250   2034300   2047350
+    760550    773700    786850    800000    813150    826300    839450    852600    865750    878900    892050    905200    918350    931500    944650    957800    970950    984100    997250   1010400   1023550   1036700   1049850   1063000   1076150   1089300   1102450   1115600   1128750   1141900   1155050   1168200   1181350   1194500   1207650   1220800   1233950   1247100   1260250   1273400   1286550   1299700   1312850   1326000   1339150   1352300   1365450   1378600   1391750   1404900   1418050   1431200   1444350   1457500   1470650   1483800   1496950   1510100   1523250   1536400   1549550   1562700   1575850   1589000   1602150   1615300   1628450   1641600   1654750   1667900   1681050   1694200   1707350   1720500   1733650   1746800   1759950   1773100   1786250   1799400   1812550   1825700   1838850   1852000   1865150   1878300   1891450   1904600   1917750   1930900   1944050   1957200   1970350   1983500   1996650   2009800   2022950   2036100   2049250   2062400
+    765700    778950    792200    805450    818700    831950    845200    858450    871700    884950    898200    911450    924700    937950    951200    964450    977700    990950   1004200   1017450   1030700   1043950   1057200   1070450   1083700   1096950   1110200   1123450   1136700   1149950   1163200   1176450   1189700   1202950   1216200   1229450   1242700   1255950   1269200   1282450   1295700   1308950   1322200   1335450   1348700   1361950   1375200   1388450   1401700   1414950   1428200   1441450   1454700   1467950   1481200   1494450   1507700   1520950   1534200   1547450   1560700   1573950   1587200   1600450   1613700   1626950   1640200   1653450   1666700   1679950   1693200   1706450   1719700   1732950   1746200   1759450   1772700   1785950   1799200   1812450   1825700   1838950   1852200   1865450   1878700   1891950   1905200   1918450   1931700   1944950   1958200   1971450   1984700   1997950   2011200   2024450   2037700   2050950   2064200   2077450
+    770850    784200    797550    810900    824250    837600    850950    864300    877650    891000    904350    917700    931050    944400    957750    971100    984450    997800   1011150   1024500   1037850   1051200   1064550   1077900   1091250   1104600   1117950   1131300   1144650   1158000   1171350   1184700   1198050   1211400   1224750   1238100   1251450   1264800   1278150   1291500   1304850   1318200   1331550   1344900   1358250   1371600   1384950   1398300   1411650   1425000   1438350   1451700   1465050   1478400   1491750   1505100   1518450   1531800   1545150   1558500   1571850   1585200   1598550   1611900   1625250   1638600   1651950   1665300   1678650   1692000   1705350   1718700   1732050   1745400   1758750   1772100   1785450   1798800   1812150   1825500   1838850   1852200   1865550   1878900   1892250   1905600   1918950   1932300   1945650   1959000   1972350   1985700   1999050   2012400   2025750   2039100   2052450   2065800   2079150   2092500
+    776000    789450    802900    816350    829800    843250    856700    870150    883600    897050    910500    923950    937400    950850    964300    977750    991200   1004650   1018100   1031550   1045000   1058450   1071900   1085350   1098800   1112250   1125700   1139150   1152600   1166050   1179500   1192950   1206400   1219850   1233300   1246750   1260200   1273650   1287100   1300550   1314000   1327450   1340900   1354350   1367800   1381250   1394700   1408150   1421600   1435050   1448500   1461950   1475400   1488850   1502300   1515750   1529200   1542650   1556100   1569550   1583000   1596450   1609900   1623350   1636800   1650250   1663700   1677150   1690600   1704050   1717500   1730950   1744400   1757850   1771300   1784750   1798200   1811650   1825100   1838550   1852000   1865450   1878900   1892350   1905800   1919250   1932700   1946150   1959600   1973050   1986500   1999950   2013400   2026850   2040300   2053750   2067200   2080650   2094100   2107550
+    781150    794700    808250    821800    835350    848900    862450    876000    889550    903100    916650    930200    943750    957300    970850    984400    997950   1011500   1025050   1038600   1052150   1065700   1079250   1092800   1106350   1119900   1133450   1147000   1160550   1174100   1187650   1201200   1214750   1228300   1241850   1255400   1268950   1282500   1296050   1309600   1323150   1336700   1350250   1363800   1377350   1390900   1404450   1418000   1431550   1445100   1458650   1472200   1485750   1499300   1512850   1526400   1539950   1553500   1567050   1580600   1594150   1607700   1621250   1634800   1648350   1661900   1675450   1689000   1702550   1716100   1729650   1743200   1756750   1770300   1783850   1797400   1810950   1824500   1838050   1851600   1865150   1878700   1892250   1905800   1919350   1932900   1946450   1960000   1973550   1987100   2000650   2014200   2027750   2041300   2054850   2068400   2081950   2095500   2109050   2122600
+    786300    799950    813600    827250    840900    854550    868200    881850    895500    909150    922800    936450    950100    963750    977400    991050   1004700   1018350   1032000   1045650   1059300   1072950   1086600   1100250   1113900   1127550   1141200   1154850   1168500   1182150   1195800   1209450   1223100   1236750   1250400   1264050   1277700   1291350   1305000   1318650   1332300   1345950   1359600   1373250   1386900   1400550   1414200   1427850   1441500   1455150   1468800   1482450   1496100   1509750   1523400   1537050   1550700   1564350   1578000   1591650   1605300   1618950   1632600   1646250   1659900   1673550   1687200   1700850   1714500   1728150   1741800   1755450   1769100   1782750   1796400   1810050   1823700   1837350   1851000   1864650   1878300   1891950   1905600   1919250   1932900   1946550   1960200   1973850   1987500   2001150   2014800   2028450   2042100   2055750   2069400   2083050   2096700   2110350   2124000   2137650
+    791450    805200    818950    832700    846450    860200    873950    887700    901450    915200    928950    942700    956450    970200    983950    997700   1011450   1025200   1038950   1052700   1066450   1080200   1093950   1107700   1121450   1135200   1148950   1162700   1176450   1190200   1203950   1217700   1231450   1245200   1258950   1272700   1286450   1300200   1313950   1327700   1341450   1355200   1368950   1382700   1396450   1410200   1423950   1437700   1451450   1465200   1478950   1492700   1506450   1520200   1533950   1547700   1561450   1575200   1588950   1602700   1616450   1630200   1643950   1657700   1671450   1685200   1698950   1712700   1726450   1740200   1753950   1767700   1781450   1795200   1808950   1822700   1836450   1850200   1863950   1877700   1891450   1905200   1918950   1932700   1946450   1960200   1973950   1987700   2001450   2015200   2028950   2042700   2056450   2070200   2083950   2097700   2111450   2125200   2138950   2152700
+    796600    810450    824300    838150    852000    865850    879700    893550    907400    921250    935100    948950    962800    976650    990500   1004350   1018200   1032050   1045900   1059750   1073600   1087450   1101300   1115150   1129000   1142850   1156700   1170550   1184400   1198250   1212100   1225950   1239800   1253650   1267500   1281350   1295200   1309050   1322900   1336750   1350600   1364450   1378300   1392150   1406000   1419850   1433700   1447550   1461400   1475250   1489100   1502950   1516800   1530650   1544500   1558350   1572200   1586050   1599900   1613750   1627600   1641450   1655300   1669150   1683000   1696850   1710700   1724550   1738400   1752250   1766100   1779950   1793800   1807650   1821500   1835350   1849200   1863050   1876900   1890750   1904600   1918450   1932300   1946150   1960000   1973850   1987700   2001550   2015400   2029250   2043100   2056950   2070800   2084650   2098500   2112350   2126200   2140050   2153900   2167750
+    801750    815700    829650    843600    857550    871500    885450    899400    913350    927300    941250    955200    969150    983100    997050   1011000   1024950   1038900   1052850   1066800   1080750   1094700   1108650   1122600   1136550   1150500   1164450   1178400   1192350   1206300   1220250   1234200   1248150   1262100   1276050   1290000   1303950   1317900   1331850   1345800   1359750   1373700   1387650   1401600   1415550   1429500   1443450   1457400   1471350   1485300   1499250   1513200   1527150   1541100   1555050   1569000   1582950   1596900   1610850   1624800   1638750   1652700   1666650   1680600   1694550   1708500   1722450   1736400   1750350   1764300   1778250   1792200   1806150   1820100   1834050   1848000   1861950   1875900   1889850   1903800   1917750   1931700   1945650   1959600   1973550   1987500   2001450   2015400   2029350   2043300   2057250   2071200   2085150   2099100   2113050   2127000   2140950   2154900   2168850   2182800
+    806900    820950    835000    849050    863100    877150    891200    905250    919300    933350    947400    961450    975500    989550   1003600   1017650   1031700   1045750   1059800   1073850   1087900   1101950   1116000   1130050   1144100   1158150   1172200   1186250   1200300   1214350   1228400   1242450   1256500   1270550   1284600   1298650   1312700   1326750   1340800   1354850   1368900   1382950   1397000   1411050   1425100   1439150   1453200   1467250   1481300   1495350   1509400   1523450   1537500   1551550   1565600   1579650   1593700   1607750   1621800   1635850   1649900   1663950   1678000   1692050   1706100   1720150   1734200   1748250   1762300   1776350   1790400   1804450   1818500   1832550   1846600   1860650   1874700   1888750   1902800   1916850   1930900   1944950   1959000   1973050   1987100   2001150   2015200   2029250   2043300   2057350   2071400   2085450   2099500   2113550   2127600   2141650   2155700   2169750   2183800   2197850
+    812050    826200    840350    854500    868650    882800    896950    911100    925250    939400    953550    967700    981850    996000   1010150   1024300   1038450   1052600   1066750   1080900   1095050   1109200   1123350   1137500   1151650   1165800   1179950   1194100   1208250   1222400   1236550   1250700   1264850   1279000   1293150   1307300   1321450   1335600   1349750   1363900   1378050   1392200   1406350   1420500   1434650   1448800   1462950   1477100   1491250   1505400   1519550   1533700   1547850   1562000   1576150   1590300   1604450   1618600   1632750   1646900   1661050   1675200   1689350   1703500   1717650   1731800   1745950   1760100   1774250   1788400   1802550   1816700   1830850   1845000   1859150   1873300   1887450   1901600   1915750   1929900   1944050   1958200   1972350   1986500   2000650   2014800   2028950   2043100   2057250   2071400   2085550   2099700   2113850   2128000   2142150   2156300   2170450   2184600   2198750   2212900
+    817200    831450    845700    859950    874200    888450    902700    916950    931200    945450    959700    973950    988200   1002450   1016700   1030950   1045200   1059450   1073700   1087950   1102200   1116450   1130700   1144950   1159200   1173450   1187700   1201950   1216200   1230450   1244700   1258950   1273200   1287450   1301700   1315950   1330200   1344450   1358700   1372950   1387200   1401450   1415700   1429950   1444200   1458450   1472700   1486950   1501200   1515450   1529700   1543950   1558200   1572450   1586700   1600950   1615200   1629450   1643700   1657950   1672200   1686450   1700700   1714950   1729200   1743450   1757700   1771950   1786200   1800450   1814700   1828950   1843200   1857450   1871700   1885950   1900200   1914450   1928700   1942950   1957200   1971450   1985700   1999950   2014200   2028450   2042700   2056950   2071200   2085450   2099700   2113950   2128200   2142450   2156700   2170950   2185200   2199450   2213700   2227950
+    822350    836700    851050    865400    879750    894100    908450    922800    937150    951500    965850    980200    994550   1008900   1023250   1037600   1051950   1066300   1080650   1095000   1109350   1123700   1138050   1152400   1166750   1181100   1195450   1209800   1224150   1238500   1252850   1267200   1281550   1295900   1310250   1324600   1338950   1353300   1367650   1382000   1396350   1410700   1425050   1439400   1453750   1468100   1482450   1496800   1511150   1525500   1539850   1554200   1568550   1582900   1597250   1611600   1625950   1640300   1654650   1669000   1683350   1697700   1712050   1726400   1740750   1755100   1769450   1783800   1798150   1812500   1826850   1841200   1855550   1869900   1884250   1898600   1912950   1927300   1941650   1956000   1970350   1984700   1999050   2013400   2027750   2042100   2056450   2070800   2085150   2099500   2113850   2128200   2142550   2156900   2171250   2185600   2199950   2214300   2228650   2243000
+    827500    841950    856400    870850    885300    899750    914200    928650    943100    957550    972000    986450   1000900   1015350   1029800   1044250   1058700   1073150   1087600   1102050   1116500   1130950   1145400   1159850   1174300   1188750   1203200   1217650   1232100   1246550   1261000   1275450   1289900   1304350   1318800   1333250   1347700   1362150   1376600   1391050   1405500   1419950   1434400   1448850   1463300   1477750   1492200   1506650   1521100   1535550   1550000   1564450   1578900   1593350   1607800   1622250   1636700   1651150   1665600   1680050   1694500   1708950   1723400   1737850   1752300   1766750   1781200   1795650   1810100   1824550   1839000   1853450   1867900   1882350   1896800   1911250   1925700   1940150   1954600   1969050   1983500   1997950   2012400   2026850   2041300   2055750   2070200   2084650   2099100   2113550   2128000   2142450   2156900   2171350   2185800   2200250   2214700   2229150   2243600   2258050
+    832650    847200    861750    876300    890850    905400    919950    934500    949050    963600    978150    992700   1007250   1021800   1036350   1050900   1065450   1080000   1094550   1109100   1123650   1138200   1152750   1167300   1181850   1196400   1210950   1225500   1240050   1254600   1269150   1283700   1298250   1312800   1327350   1341900   1356450   1371000   1385550   1400100   1414650   1429200   1443750   1458300   1472850   1487400   1501950   1516500   1531050   1545600   1560150   1574700   1589250   1603800   1618350   1632900   1647450   1662000   1676550   1691100   1705650   1720200   1734750   1749300   1763850   1778400   1792950   1807500   1822050   1836600   1851150   1865700   1880250   1894800   1909350   1923900   1938450   1953000   1967550   1982100   1996650   2011200   2025750   2040300   2054850   2069400   2083950   2098500   2113050   2127600   2142150   2156700   2171250   2185800   2200350   2214900   2229450   2244000   2258550   2273100
+    837800    852450    867100    881750    896400    911050    925700    940350    955000    969650    984300    998950   1013600   1028250   1042900   1057550   1072200   1086850   1101500   1116150   1130800   1145450   1160100   1174750   1189400   1204050   1218700   1233350   1248000   1262650   1277300   1291950   1306600   1321250   1335900   1350550   1365200   1379850   1394500   1409150   1423800   1438450   1453100   1467750   1482400   1497050   1511700   1526350   1541000   1555650   1570300   1584950   1599600   1614250   1628900   1643550   1658200   1672850   1687500   1702150   1716800   1731450   1746100   1760750   1775400   1790050   1804700   1819350   1834000   1848650   1863300   1877950   1892600   1907250   1921900   1936550   1951200   1965850   1980500   1995150   2009800   2024450   2039100   2053750   2068400   2083050   2097700   2112350   2127000   2141650   2156300   2170950   2185600   2200250   2214900   2229550   2244200   2258850   2273500   2288150
+    842950    857700    872450    887200    901950    916700    931450    946200    960950    975700    990450   1005200   1019950   1034700   1049450   1064200   1078950   1093700   1108450   1123200   1137950   1152700   1167450   1182200   1196950   1211700   1226450   1241200   1255950   1270700   1285450   1300200   1314950   1329700   1344450   1359200   1373950   1388700   1403450   1418200   1432950   1447700   1462450   1477200   1491950   1506700   1521450   1536200   1550950   1565700   1580450   1595200   1609950   1624700   1639450   1654200   1668950   1683700   1698450   1713200   1727950   1742700   1757450   1772200   1786950   1801700   1816450   1831200   1845950   1860700   1875450   1890200   1904950   1919700   1934450   1949200   1963950   1978700   1993450   2008200   2022950   2037700   2052450   2067200   2081950   2096700   2111450   2126200   2140950   2155700   2170450   2185200   2199950   2214700   2229450   2244200   2258950   2273700   2288450   2303200
+    848100    862950    877800    892650    907500    922350    937200    952050    966900    981750    996600   1011450   1026300   1041150   1056000   1070850   1085700   1100550   1115400   1130250   1145100   1159950   1174800   1189650   1204500   1219350   1234200   1249050   1263900   1278750   1293600   1308450   1323300   1338150   1353000   1367850   1382700   1397550   1412400   1427250   1442100   1456950   1471800   1486650   1501500   1516350   1531200   1546050   1560900   1575750   1590600   1605450   1620300   1635150   1650000   1664850   1679700   1694550   1709400   1724250   1739100   1753950   1768800   1783650   1798500   1813350   1828200   1843050   1857900   1872750   1887600   1902450   1917300   1932150   1947000   1961850   1976700   1991550   2006400   2021250   2036100   2050950   2065800   2080650   2095500   2110350   2125200   2140050   2154900   2169750   2184600   2199450   2214300   2229150   2244000   2258850   2273700   2288550   2303400   2318250
+    853250    868200    883150    898100    913050    928000    942950    957900    972850    987800   1002750   1017700   1032650   1047600   1062550   1077500   1092450   1107400   1122350   1137300   1152250   1167200   1182150   1197100   1212050   1227000   1241950   1256900   1271850   1286800   1301750   1316700   1331650   1346600   1361550   1376500   1391450   1406400   1421350   1436300   1451250   1466200   1481150   1496100   1511050   1526000   1540950   1555900   1570850   1585800   1600750   1615700   1630650   1645600   1660550   1675500   1690450   1705400   1720350   1735300   1750250   1765200   1780150   1795100   1810050   1825000   1839950   1854900   1869850   1884800   1899750   1914700   1929650   1944600   1959550   1974500   1989450   2004400   2019350   2034300   2049250   2064200   2079150   2094100   2109050   2124000   2138950   2153900   2168850   2183800   2198750   2213700   2228650   2243600   2258550   2273500   2288450   2303400   2318350   2333300
+
Index: tests/par_conj/impure_wait.m
===================================================================
RCS file: tests/par_conj/impure_wait.m
diff -N tests/par_conj/impure_wait.m
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/par_conj/impure_wait.m	31 May 2011 03:23:44 -0000
@@ -0,0 +1,115 @@
+% vim: ts=4 sw=4 et ft=mercury
+
+% Authors : schachte (Peter Schachte)
+% Purpose : Matrix multiply using a list encoding
+%
+% Transliterated from Ciao Prolog
+% Origin:  http://www.ciaohome.org/ciao_html/ciao_111.html#SEC458
+%
+% Adopted into a test case by Paul Bone.
+
+:- module impure_wait.
+:- interface.
+
+:- import_module io.
+
+:- pred main(io::di, io::uo) is det.
+
+:- implementation.
+
+:- import_module list, int.
+:- import_module require.
+:- import_module string.
+
+main(!IO) :-
+    Size = 100,
+    matrix(1, Size, M1),
+    matrix(2, Size, M2),
+    mmultiply(M1, M2, M),
+    print_matrix(M, !IO).
+
+:- type matrix == list(list(int)).
+
+:- pred matrix(int::in, int::in, matrix::out) is det.
+
+matrix(M, N, Matrix) :-
+    matrix_rows(M, N, N, Matrix).
+
+:- pred matrix_rows(int::in, int::in, int::in, matrix::out) is det.
+
+matrix_rows(M, N, R, Matrix) :-
+    ( R =< 0 ->
+        Matrix = []
+    ;
+        matrix_row(M, N, Row),
+        matrix_rows(M+1, N, R-1, Rows),
+        Matrix = [Row | Rows]
+    ).
+
+:- pred matrix_row(int::in, int::in, list(int)::out) is det.
+
+matrix_row(M, N, Row) :-
+    ( N = 0 ->
+        Row = []
+    ;
+        matrix_row(M+1, N-1, Ms),
+        Row = [M | Ms]
+    ).
+
+:- pred print_matrix(matrix::in, io::di, io::uo) is det.
+
+print_matrix([], !IO) :-
+    nl(!IO).
+print_matrix([Row | Rows], !IO) :-
+    print_row(Row, !IO),
+    print_matrix(Rows, !IO).
+
+:- pred print_row(list(int)::in, io::di, io::uo) is det.
+
+print_row([], !IO) :-
+    nl(!IO).
+print_row([N | Ns], !IO) :-
+    format("  %8d", [i(N)], !IO),
+    print_row(Ns, !IO).
+
+:- pred mmultiply(matrix::in, matrix::in, matrix::out) is det.
+
+    % One of the auto-parallelisations expands mmultiply in this way.  V0
+    % becomes a shared variable and it's wait is pushed into the call to
+    % mutiply, where it is not used by the base case and used by the recursive
+    % case only after the recursive call.  Therefore a wait is inserted at the
+    % end of the procedure but optimised out later on.
+mmultiply(L0, V1, L) :-
+    (
+        L0 = [],
+        L = []
+    ; 
+        L0 = [_ | Rest],
+        (
+            (
+                mmultiply(Rest, V1, Others),
+                V0 = det_head(L0)
+            )
+        &
+            multiply(V1, V0, Result)
+        ),
+        L = [Result | Others]
+    ).
+            
+:- pred multiply(matrix::in, list(int)::in, list(int)::out) is det.
+
+multiply([], _, []).
+multiply([V0 | Rest], V1, [Result | Others]):-
+    multiply(Rest, V1, Others),
+    vmul(V0, V1, Result).
+
+:- pred vmul(list(int)::in, list(int)::in, int::out) is det.
+
+vmul([], [], 0).
+vmul([], [_ | _], _) :-
+    error("mmultiply: incompatible matrix sizes").
+vmul([H1 | T1], [H2 | T2], Result):-
+    vmul(T1, T2, Newresult),
+    Result = H1 * H2 + Newresult.
+vmul([_ | _], [], _) :-
+    error("mmultiply: incompatible matrix sizes").
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 489 bytes
Desc: Digital signature
URL: <http://lists.mercurylang.org/archives/reviews/attachments/20110531/fb4d739f/attachment.sig>


More information about the reviews mailing list