public virtual void Load(Stream stream)
        {
            var reader = new DataReader(stream);

            reader.Position = 0;

            // read the header
            var  ident             = reader.ReadUInt32();
            var  flags             = reader.ReadUInt32();
            uint virtualPageFlags  = reader.ReadUInt32();
            uint physicalPageFlags = reader.ReadUInt32();

            ResourceFileHeader = new DatResourceFileHeader(ident, flags, virtualPageFlags, physicalPageFlags);
            Version            = (int)ResourceFileHeader.Flags & 0xFF;

            var virtualSize  = ((ResourceChunkFlags)virtualPageFlags).Size;
            var physicalSize = ((ResourceChunkFlags)physicalPageFlags).Size;

            VirtualData  = new byte[virtualSize];
            PhysicalData = new byte[physicalSize];

            var deflateStream = new DeflateStream(stream, CompressionMode.Decompress, true);

            deflateStream.Read(VirtualData, 0, (int)virtualSize);
            deflateStream.Read(PhysicalData, 0, (int)physicalSize);
            deflateStream.Close();
        }
        public virtual void Load(Stream stream)
        {
            var reader = new DataReader(stream);

            reader.Position = 0;

            // read the header
            var  ident             = reader.ReadUInt32();
            var  flags             = reader.ReadUInt32();
            uint virtualPageFlags  = reader.ReadUInt32();
            uint physicalPageFlags = reader.ReadUInt32();

            ResourceFileHeader = new DatResourceFileHeader()
            {
                Id    = ident,
                Flags = flags,

                ResourceInfo = new DatResourceInfo()
                {
                    VirtualFlags  = virtualPageFlags,
                    PhysicalFlags = physicalPageFlags
                },
            };

            Version = (int)ResourceFileHeader.Flags & 0xFF;

            if (((ResourceFileHeader.Flags >> 24) & 1) != 1 || ((ResourceFileHeader.Flags >> 8 & 0xF)) != 0)
            {
                throw new Exception("oodle compression isn't supported!");
            }

            var virtualSize  = virtualPageFlags & 0x7FFFFFF0;
            var physicalSize = physicalPageFlags & 0x7FFFFFF0;

            VirtualData  = new byte[virtualSize];
            PhysicalData = new byte[physicalSize];

            var deflateStream = new DeflateStream(stream, CompressionMode.Decompress, true);

            deflateStream.Read(VirtualData, 0, (int)virtualSize);
            deflateStream.Read(PhysicalData, 0, (int)physicalSize);
            deflateStream.Close();
        }