protected void parseFont(byte[] font, int start, int len) {
        name2width = new HashMap<String,FlPoint>();

        byte data[] = null;

        if (isASCII(font, start)) {
            byte[] bData = readASCII(font, start, start + len);
            data = decrypt(bData, 0, bData.length, 55665, 4);
        } else {
            data = decrypt(font, start, start + len, 55665, 4);
        }

        // encoding is in cleartext area
        chr2name = readEncoding(font);
        int lenIVLoc = findSlashName(data, "lenIV");
        PSParser psp = new PSParser(data, 0);
        if (lenIVLoc < 0) {
            lenIV = 4;
        } else {
            psp.setLoc(lenIVLoc + 6);
            lenIV = Integer.parseInt(psp.readThing());
        }
        password = 4330;
        int matrixloc = findSlashName(font, "FontMatrix");
        if (matrixloc < 0) {
            System.out.println("No FontMatrix!");
            at = new AffineTransform(0.001f, 0, 0, 0.001f, 0, 0);
        } else {
            PSParser psp2 = new PSParser(font, matrixloc + 11);
            // read [num num num num num num]
            float xf[] = psp2.readArray(6);
            //	    System.out.println("FONT MATRIX: "+xf);
            at = new AffineTransform(xf);
        }

        subrs = readSubrs(data);
        name2outline = new TreeMap<String,Object>(readChars(data));
    // at this point, name2outline holds name -> byte[].
    }