anchor.diff:              nextPage:int; 
               boundaryPage:int; 
               //children:(int32*byte[]); 
  -            //overflows:Map<byte[],int32>;
  +            overflows:Map<int,int32>;
           }
   
       let Create(fs:Stream, pageManager:IPages, csr:ICursor) :int32 = 
  
positive.code:                     // note loop bounds
                      for q in start .. (stop-1) do
                          let k = snd children.[q]
                          if ((overflows <> null) && overflows.ContainsKey (q)) then
                              pb.PutByte(FLAG_OVERFLOW)
                              pb.PutVarint(int64 k.Length)
                              pb.PutInt32(overflows.[q])
                          else
                              putKeyWithLength k
  
                  let folder st (pagenum,k:byte[]) =
  
negative.code:                             pb.Flush(fs)
                              if nextN <> (thisPageNumber+1) then utils.SeekPage(fs, pageSize, nextN)
                              nextGeneration.Add(thisPageNumber, snd children.[i-1])
                              {sofar=0; first=0; nextPage=nextN; boundaryPage=nextB; overflows=Map.empty}
                          else
                              args
  
                      let initParent args = 
                          if isLastChild then 
                              args
                          else
                              let sofar = args.sofar
                              if sofar = 0 then
                                  {args with sofar=PARENT_PAGE_OVERHEAD; first=i; }
                              else
                                  args
  
                      let addKeyToParent args = 
                          if isLastChild then 
                              args
                          else
                              let {sofar=sofar; nextPage=nextPageNumber; boundaryPage=boundaryPageNumber; overflows=overflows} = args
                              if calcAvailable sofar (nextGeneration.Count = 0) >= neededForInline then
                                  {args with sofar=sofar + neededForInline}
                              else
                                  let keyOverflowFirstPage = nextPageNumber
                                  let kRange = writeOverflow nextPageNumber boundaryPageNumber (new MemoryStream(k))
                                  {args with sofar=sofar + neededForOverflow; nextPage=fst kRange; boundaryPage=snd kRange; overflows=overflows.Add(i,keyOverflowFirstPage)}
  
  
                      // this is the body of the folder function
                      let (_,args) = st
                      let args' = maybeFlush args |> initParent |> addKeyToParent
                      (i+1,args') 
  
                  // TODO this would be much happier if children were already an F# list
                  let fsChildren = List.ofSeq children
                  let initialArgs = {sofar=0;first=0;nextPage=startingPageNumber;boundaryPage=startingBoundaryPageNumber;overflows=Map.empty}
                  let initialState = (0,initialArgs)
                  let finalState = List.fold folder initialState fsChildren
                  let (_,{sofar=_;first=_;nextPage=n;boundaryPage=b}) = finalState
  