public byte[] Rebuild(bool checksumAdjustment)
        {
            // create a Motorola Byte Order buffer for the new table
            WoffBuffer headBuffer = new WoffBuffer(SizeOfTable);

            // populate the buffer
            headBuffer.SetFixed(this.TableVersionNumber, (uint)FieldOffsets.TableVersionNumber);
            headBuffer.SetFixed(this.FontRevision, (uint)FieldOffsets.FontRevision);
            headBuffer.SetUInt(this.CheckSumAdjustment, (uint)FieldOffsets.CheckSumAdjustment);
            headBuffer.SetUInt(this.MagicNumber, (uint)FieldOffsets.MagicNumber);
            headBuffer.SetUShort(this.Flags, (uint)FieldOffsets.Flags);
            headBuffer.SetUShort(this.UnitsPerEm, (uint)FieldOffsets.UnitsPerEm);
            headBuffer.SetLong(this.Created, (uint)FieldOffsets.Created);
            headBuffer.SetLong(this.Modified, (uint)FieldOffsets.Modified);
            headBuffer.SetShort(this.XMin, (uint)FieldOffsets.XMin);
            headBuffer.SetShort(this.YMin, (uint)FieldOffsets.YMin);
            headBuffer.SetShort(this.XMax, (uint)FieldOffsets.XMax);
            headBuffer.SetShort(this.YMax, (uint)FieldOffsets.YMax);
            headBuffer.SetUShort(this.MacStyle, (uint)FieldOffsets.MacStyle);
            headBuffer.SetUShort(this.LowestRecPPEM, (uint)FieldOffsets.LowestRecPPEM);
            headBuffer.SetShort(this.FontDirectionHint, (uint)FieldOffsets.FontDirectionHint);
            headBuffer.SetShort(this.IndexToLocFormat, (uint)FieldOffsets.IndexToLocFormat);
            headBuffer.SetShort(this.GlyphDataFormat, (uint)FieldOffsets.GlyphDataFormat);

            if (checksumAdjustment)
            {
                // For checksum adjustment, we set this value to 0
                headBuffer.SetUInt(0, (uint)FieldOffsets.CheckSumAdjustment);
            }

            return(headBuffer.GetBuffer());
        }