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