class C{ const N=10; var [const] buckets=(1).pump(N,List).copy(), //(1,2,3...) pipe = Thread.Pipe(), cnt=Atomic.Int(); fcn init{ pipe.write(buckets); "Initial sum: ".println(values().sum()); } fcn transferArb{ // transfer arbitary amount from 1 bucket to another b1:=(0).random(N); b2:=(0).random(N); v:=pipe.read(); t:=(0).random(v[b1]); v[b1]=v[b1]-t; v[b2]=v[b2]+t; pipe.write(v); cnt.inc(); } fcn transferEq{ // try to make two buckets equal b1:=(0).random(N); b2:=(0).random(N); v:=pipe.read(); v1:=v[b1]; v2:=v[b2]; t:=(v1-v2).abs()/2; if (v1