protected Floor decodeFloor(VorbisStream vorbis, BitInputStream source) throws VorbisFormatException, IOException {

   //System.out.println("decodeFloor");
      if(!source.getBit()) {
         //System.out.println("null");
         return null;
      }

      Floor1 clone=(Floor1)clone();

      clone.yList=new int[xList.length];

      int range=RANGES[multiplier-1];

      clone.yList[0]=source.getInt(Util.ilog(range-1));
      clone.yList[1]=source.getInt(Util.ilog(range-1));

      int offset=2;

      for(int i=0; i<partitionClassList.length; i++) {
         int cls=partitionClassList[i];
         int cdim=classDimensions[cls];
         int cbits=classSubclasses[cls];
         int csub=(1<<cbits)-1;
         int cval=0;
         if(cbits>0) {
            cval=source.getInt(vorbis.getSetupHeader().getCodeBooks()[classMasterbooks[cls]].getHuffmanRoot());
            //cval=vorbis.getSetupHeader().getCodeBooks()[classMasterbooks[cls]].readInt(source);
            //System.out.println("cval: "+cval);
         }
         //System.out.println("0: "+cls+" "+cdim+" "+cbits+" "+csub+" "+cval);
         for(int j=0; j<cdim; j++) {
            //System.out.println("a: "+cls+" "+cval+" "+csub);
            int book=subclassBooks[cls][cval&csub];
            cval>>>=cbits;
            if(book>=0) {
               clone.yList[j+offset]=source.getInt(vorbis.getSetupHeader().getCodeBooks()[book].getHuffmanRoot());
               //clone.yList[j+offset]=vorbis.getSetupHeader().getCodeBooks()[book].readInt(source);
               //System.out.println("b: "+(j+offset)+" "+book+" "+clone.yList[j+offset]);
               //System.out.println("");
            }
            else {
               clone.yList[j+offset]=0;
            }
         }
         offset+=cdim;
      }

      //System.out.println("");
      //for(int i=0; i<clone.xList.length; i++) {
      //   System.out.println(i+" = "+clone.xList[i]);
      //}

      //System.out.println("");
      //for(int i=0; i<clone.yList.length; i++) {
      //   System.out.println(i+" = "+clone.yList[i]);
      //}

      //System.out.println("offset: "+offset);
      //System.out.println("yList.length: "+clone.yList.length);

      //System.exit(0);

      return clone;
   }