From 2dc61a346314c2926f3a93a8038e758f6f39c0a0 Mon Sep 17 00:00:00 2001 From: niamtokik Date: Thu, 4 Jan 2018 22:11:17 +0100 Subject: [PATCH] first commit --- .gitignore | 4 + LICENSE | 45 +- README.md | 40 + c_src/Makefile | 0 doc/README.md | 26 + doc/notes.md | 126 ++ doc/resources.md | 25 + rebar.config | 2 + src/dmu.erl | 48 + src/drr.erl | 812 +++++++++++++ src/fletcher.erl | 154 +++ src/zfs.app.src | 14 + src/zfs.erl | 512 ++++++++ src/zfs.hrl | 63 + src/zfs_lib.erl | 298 +++++ src/zpool.erl | 1 + src/zpool.hrl | 0 src/zpool_test.erl | 1 + test/README.md | 1 + test/pool@test.zfs | Bin 0 -> 48008 bytes test/zstreamdump.return | 2454 +++++++++++++++++++++++++++++++++++++++ 21 files changed, 4603 insertions(+), 23 deletions(-) create mode 100644 README.md create mode 100644 c_src/Makefile create mode 100644 doc/README.md create mode 100644 doc/notes.md create mode 100644 doc/resources.md create mode 100644 rebar.config create mode 100644 src/dmu.erl create mode 100644 src/drr.erl create mode 100644 src/fletcher.erl create mode 100644 src/zfs.app.src create mode 100644 src/zfs.erl create mode 100644 src/zfs.hrl create mode 100644 src/zfs_lib.erl create mode 100644 src/zpool.erl create mode 100644 src/zpool.hrl create mode 100644 src/zpool_test.erl create mode 100644 test/README.md create mode 100644 test/pool@test.zfs create mode 100644 test/zstreamdump.return diff --git a/.gitignore b/.gitignore index 3826c85..b5bff0e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,7 @@ ebin/*.beam rel/example_project .concrete/DEV_MODE .rebar +*.fossil +*~ +_build +.rebar.lock diff --git a/LICENSE b/LICENSE index d079534..1b262e8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,29 +1,28 @@ -BSD 3-Clause License +Copyright (c) 2017 Mathieu Kerjouan -Copyright (c) 2018, -All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e9e57f9 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# zfs + +Erlang ZFS High and Low Level implementation. + +## Usage + +This is an Erlang Library, you can use it on any project +based on Licensing. + +## Documentation + +This project is born from one idea, reverse engineering ZFS +as gray box, from the hard way. We want to document every +ZFS aspect and offer a high level implementation to check if +specification and current existing documentation fit well. + +You can find more documentation in doc directory at the root +of this project. + +## Build + + $ rebar3 compile + +## Test + +Erlang ZFS implementation is also a test battery for ZFS, you +can run different test to check if our implementation is well +supported on your hardware, but also directly on your OS. + +For running unit test: + + $ rebar3 eunit + +For running common_test: + + $ rebar3 ct + +For running local low level test: + + $ cd c_src && make test diff --git a/c_src/Makefile b/c_src/Makefile new file mode 100644 index 0000000..e69de29 diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 0000000..467c2d4 --- /dev/null +++ b/doc/README.md @@ -0,0 +1,26 @@ +# Documentation + +## Why implement ZFS in Erlang? + +Erlang is natively distributed, high level and stable language. +ZFS is complexe file-system requiring lot of knowledge. This +file-system is also an old-one, developped in the 2000's, it +wasn't developped with security in mind. ZFS stream for example +should be trusted. + +Erlang is particularly efficient to parse binary string, ZFS +is a binary data-structure... + +## What can we do with this library? + +Currently, this library is only used to parse and check +ZFS stream send from `zfs send` command. + +## Some idea of concrete work? + + * authenticated flow from external customers + * authenticated flow from internal servers + * zfs stream split + * zfs stream fuzzing + * zfs stream distributed check + * and much more... diff --git a/doc/notes.md b/doc/notes.md new file mode 100644 index 0000000..5bfc941 --- /dev/null +++ b/doc/notes.md @@ -0,0 +1,126 @@ +# Notes + +This is a kind of specification documentation +base on what I need and how to use it. + +## ZFS Stream Parsing + +First thing first. ZFS library for Erlang was made +to easily parse ZFS send/receive stream and split +it in small piece. + +Parsing a zfs stream should be simple and return +standard and comprehensible data-structure. + + zfs_stream:parse(Stream). + +Sometime, our ZFS stream is a bit larger than expected, +so, we can filter it. This filtering will be done with +Erlang Match syntax. + + zfs_stream:parse(Stream, [{'object', '_'}]). + +### Specific Stream Parsing Feature + + zfs_stream:parse(Stream, []). + +ZFS Stream is a complex data-structure containing +different type of objects. We can parse it independantly +of each others. + + % dmu replay record is a full + % zfs stream sent from zfs send command + dmu_replay_record:parse(Stream). + dmu_replay_record:parse(Stream, _Opts). + + % drr_begin is the first data structure + % used in ZFS Stream and contain common + % information about this stream + drr_begin:parse(Stream). + drr_begin:parse(Stream; _Opts). + + % drr_end + drr_end:parse(Stream). + drr_end:parse(Stream, _Opts). + + % drr_object + drr_object:parse(Stream). + drr_object:parse(Stream, _Opts). + + % drr_freeobjects + drr_freeobjects:parse(Stream). + drr_freeobjects:parse(Stream, _Opts). + + % drr_write + drr_write:parse(Stream). + drr_write:parse(Stream, _Opts). + + % drr_write_byref + drr_write_byref:parse(Stream). + drr_write_byref:parse(Stream, _Opts). + + % drr_free + drr_free:parse(Stream). + drr_free:parse(Stream, _Opts). + + % drr_spill + drr_spill:parse(Stream). + drr_spill:parse(Stream, _Opts). + +Those functions return erlang map data-structure only +if the stream or part of the stream is the right object. +dmu_replay_record:parse/1 parse an entire ZFS stream and is +equivalent with zfs_stream:parse/1 function. + +## ZFS Stream Splitting + +A ZFS Stream is a range of ordered transactional ZFS objects. +This library is made to split stream in small pieces. + + zfs_stream:split(Stream). + zfs_stream:split(Stream, _Opts). + +You can split it in different way, just split all logical part +in bitstring or parse each part with erlang abstraction. + + zfs_stream:split(Stream, [bitstring]). + zfs_stream:split(Stream, [map]). + +## ZFS Stream Analysing + +All ZFS data-structure are delivered with checksum, analyzing it +give us the change to validate every piece of a stream based +on checksum. + + zfs_stream:analyze(Stream). + zfs_stream:analyze(Stream, _Opts). + +## ZFS Stream Crafting + +If we have the possibility to analyze or read a stream, we have +also the possibility to craft any kind of ZFS stream from scratch. + + zfs_stream:craft(Type, Content). + +## ZFS Stream Fuzzing + +ZFS is executed in Kernel Land, if something goes wrong, in the +best case, system crash, in the worst case, an attacker can +install a rootkit or gain privilege access to our server. Fuzzing +is a technique used widely on security to check program inputs. + +This high level library give us the possibility to randomly craft +ZFS stream and check them but also alterate an existing one. + + % create a totally random zfs stream from scratch + zfs_stream:fuzz(). + + % generete an object stream based on Type + zfs_stream:fuzz(Type). + + % extra options + zfs_stream:fuzz(Type, _Opts). + zfs_stream:fuzz(Type, [{destination, Destination} + ,{source, Source} + ,{alter, []} + ,{format, Format}]). diff --git a/doc/resources.md b/doc/resources.md new file mode 100644 index 0000000..da3937e --- /dev/null +++ b/doc/resources.md @@ -0,0 +1,25 @@ +# Resources + +== Video + + * https://www.youtube.com/channel/UC0IK6Y4Go2KtRueHDiQcxow + +== Website + + * http://www.open-zfs.org/ + +== Papers + + * http://www.giis.co.in/Zfs_ondiskformat.pdf + * https://www.usenix.org/legacy/events/fast10/tech/full_papers/zhang.pdf + * https://www.usenix.org/legacy/event/lisa07/htgr_files/bonwick_htgr.pdf + * https://www.usenix.org/system/files/conference/inflow14/inflow14-zuck.pdf + * http://supertech.csail.mit.edu/papers/YuanZhJa16.pdf + * https://cs.uwaterloo.ca/~mashti/cs854-f17/papers/zfs.pdf + * http://www.usenix.net/legacy/events/fast10/tech/full_papers/zhang.pdf + +== Source code + + * http://bxr.su/FreeBSD/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h + * http://bxr.su/FreeBSD/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h + * http://bxr.su/FreeBSD/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c diff --git a/rebar.config b/rebar.config new file mode 100644 index 0000000..f618f3e --- /dev/null +++ b/rebar.config @@ -0,0 +1,2 @@ +{erl_opts, [debug_info]}. +{deps, []}. \ No newline at end of file diff --git a/src/dmu.erl b/src/dmu.erl new file mode 100644 index 0000000..8ac8c81 --- /dev/null +++ b/src/dmu.erl @@ -0,0 +1,48 @@ +%%%=================================================================== +%%% +%%%=================================================================== +-module(dmu). +-export([replay_record/0, replay_record/1, replay_record/2]). +-include("zfs.hrl"). +-include_lib("eunit/include/eunit.hrl"). +-ifdef(debug). +-compile(export_all). +-endif. + +%%%=================================================================== +%%% API SECTION - EXPORTED FUNCTION +%%%=================================================================== +-spec replay_record() -> list(). +replay_record() -> + [drr_type, drr_payloadlen, drr_begin]. + +-spec replay_record(bitstring()) -> {ok, map(), bitstring()}. +replay_record(Bitstring) -> + replay_record(Bitstring, []). + +-spec replay_record(bitstring(), list()) -> {ok, map(), bitstring()}. +replay_record(<<0:32, PayloadLen:32, Rest/bitstring>>, _Opts) -> + << Begin:(304*8)/bitstring, _/bitstring>> = Rest, + {ok, Struct, <<>>} = drr:struct_begin(Begin), + Init = #{ drr_type => 'begin' + , drr_payloadlen => PayloadLen + , content => Struct }, + {ok, Init, Rest}; +replay_record(<<1:32, PayloadLen:32, Rest/bitstring>>, _Opts) -> + ok. + +%%%=================================================================== +%%% PRIVATE SECTION +%%%=================================================================== +-spec drr_payloadlen(bitstring()) -> {ok, map(), bitstring()}. +drr_payloadlen(<>) -> + {ok, #{ payloadlen => PayloadLen }, Rest}. + +drr_payloadlen_test() -> + [ drr_payloadlen_test(X) || X <- lists:seq(1,1) ]. + +drr_payloadlen_test(1) -> + IN = <<1,0,0,0>>, + OUT = {ok, #{ payloadlen => 1 }, <<>>}, + ?assertEqual(OUT, drr_payloadlen(IN)). + diff --git a/src/drr.erl b/src/drr.erl new file mode 100644 index 0000000..1325300 --- /dev/null +++ b/src/drr.erl @@ -0,0 +1,812 @@ +%%%=================================================================== +%%% @author Mathieu Kerjouan +%%% @copyright 2017 +%%% @version 0.1.0 +%%% @title drr data structure implementation +%%% @doc +%%% @end +%%%=================================================================== +-module(drr). +-export([struct_begin/0, struct_begin/1, struct_begin/2]). +-export([struct_end/0, struct_end/1, struct_end/2]). +-export([struct_object/0]). +-export([struct_freeobjects/0]). +-export([struct_write/0]). +-export([struct_free/0]). +-export([struct_write_byref/0]). +-export([struct_spill/0]). +-include("zfs.hrl"). +-include_lib("eunit/include/eunit.hrl"). + +-ifdef(debug). +-compile(export_all). +-endif. + +%%%=================================================================== +%%% API SECTION - EXPORTED FUNCTION +%%%=================================================================== + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec struct_begin() -> list(). +struct_begin() -> + [ drr_magic, drr_versioninfo, drr_creation_time, drr_type + , drr_flags, drr_toguid, drr_fromguid, drr_toname ]. + +-spec struct_begin(bitstring()) + -> {ok, map()} | + {ok, map(), bitstring()} | + {error, term()}. +struct_begin(Bitstring) -> + struct_begin(Bitstring, []). + +-spec struct_begin(bitstring(), list()) + -> {ok, map()} | + {ok, map(), bitstring()} | + {error, term()}. +struct_begin(Bitstring, _Opts) -> + Return = #{}, + + {ok, Magic, MagicRest} = drr_magic(Bitstring), + Return1 = maps:merge(Return, Magic), + + {ok, VersionInfo, VersionInfoRest} = drr_versioninfo(MagicRest), + Return2 = maps:merge(Return1, VersionInfo), + + {ok, CreationTime, CreationTimeRest} = drr_creation_time(VersionInfoRest), + Return3 = maps:merge(Return2, CreationTime), + + {ok, Type, TypeRest} = objset_type(CreationTimeRest), + Return4 = maps:merge(Return3, Type), + + {ok, Flags, FlagsRest} = drr_flags(TypeRest), + Return5 = maps:merge(Return4, Flags), + + {ok, ToGuid, ToGuidRest} = drr_toguid(FlagsRest), + Return6 = maps:merge(Return5, ToGuid), + + {ok, FromGuid, FromGuidRest} = drr_fromguid(ToGuidRest), + Return7 = maps:merge(Return6, FromGuid), + + {ok, ToName, ToNameRest} = drr_toname(FromGuidRest), + Return8 = maps:merge(Return7, ToName), + + {ok, Return8, ToNameRest}. + +struct_begin_test() -> + [ struct_begin_test(X) || X <- [1] ]. +struct_begin_test(1) -> + IN = <<172, 203, 186, 245, 2, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 102, + 47, 41, 90, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 54, 80, 15, + 33, 249, 114, 233, 135, 0, 0, 0, 0, 0, 0, 0, 0, 112, 111, + 111, 108, 64, 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 >>, + OUT = {ok + , #{ magic => <<16#2F5bacbac:64/little>> + , creation_time => 16#5a292f66 + , type => zfs + , featuresflags => 4 + , flags => <<4,0,0,0>> + , hdrtype => substream + , toguid => <<54,80,15,33,249,114,233,135>> + , fromguid => <<0,0,0,0,0,0,0,0>> + , toname => <<"pool@test">> + % , versioninfo => <<17,0,0,0,0,0,0,0>> + } + , <<>> + }, + ?assertEqual(OUT, struct_begin(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec struct_end() -> list(). +struct_end() -> + [ drr_checksum, drr_toguid ]. + +-spec struct_end(bitstring()) + -> {ok, map()} | + {ok, map(), bitstring()} | + {error, term()}. +struct_end(Bitstring) -> + struct_end(Bitstring, []). + +-spec struct_end(bitstring(), list()) + -> {ok, map()} | + {ok, map(), bitstring()} | + {error, term()}. +struct_end(Bitstring, _Opts) -> + Init = #{}, + + {ok, Checksum, ChecksumRest} = drr_checksum(Bitstring), + Return1 = maps:merge(Checksum, Init), + + {ok, ToGuid, ToGuidRest} = drr_toguid(ChecksumRest), + Return2 = maps:merge(ToGuid, Return1), + + {ok, Return2, ToGuidRest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec struct_object() -> list(). +struct_object() -> + [ drr_object, drr_type, drr_bonustype, drr_blksz, drr_bonuslen + , drr_checksumtype, drr_compress, {drr_pad, 6}, drr_toguid ]. + +% -spec object(bitstring()) +% -> {ok, drr_object()} | +% {ok, drr_object(), bitstring()} | +% {error, term()}. +% -spec object(bitstring(), list()) +% -> {ok, drr_object()} | +% {ok, drr_object(), bitstring()} | +% {error, term()}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec struct_freeobjects() -> list(). +struct_freeobjects() -> + [ drr_firstobj, drr_numobjs, drr_toguid ]. + +-spec struct_freeobjects(bitstring()) + -> {ok, map()} | + {ok, map(), bitstring()} | + {error, term()}. +struct_freeobjects(Bitstring) -> + struct_freeobjects(Bitstring, []). + +-spec struct_freeobjects(bitstring(), list()) + -> {ok, map()} | + {ok, map(), bitstring()} | + {error, term()}. +struct_freeobjects(Bitstring, _Opts) -> + {wip, Bitstring}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec struct_write() -> list(). +struct_write() -> + [ drr_object, drr_type, {drr_pad, 4}, drr_offset, drr_length + , drr_toguid, drr_checksumtype, drr_checksumflags, {drr_pad, 2} + , drr_key ]. + +% -spec write(bitstring()) +% -> {ok, drr_write()} | +% {ok, drr_write(), bitstring()} | +% {error, term()}. +% -spec write(bitstring(), list()) +% -> {ok, drr_write()} | +% {ok, drr_write(), bitstring()} | +% {error, term()}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec struct_free() -> list(). +struct_free() -> + [ drr_object, drr_offset, drr_length, drr_toguid ]. + +% -spec free(bitstring()) +% -> {ok, drr_free()} | +% {ok, drr_free(), bitstring()} | +% {error, term()}. +% -spec free(bitstring(), list()) +% -> {ok, drr_free()} | +% {ok, drr_free(), bitstring()} | +% {error, term()}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec struct_write_byref() -> list(). +struct_write_byref() -> + [ drr_object, drr_offset, drr_length, drr_toguid, drr_refguid + , drr_refobject, drr_refoffset, drr_checksumtype, drr_checksumflags + , {drr_pad, 6}, drr_key ]. + +% -spec byref(bitstring()) +% -> {ok, drr_byref()} | +% {ok, drr_byref(), bitstring()} | +% {error, term()}. +% -spec byref(bitstring(), list()) +% -> {ok, drr_byref()} | +% {ok, drr_byref(), bitstring()} | +% {error, term()}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec struct_spill() -> list(). +struct_spill() -> + [ drr_object, drr_length, drr_toguid, {drr_pad, 4} ]. + +% -spec struct_spill(bitstring()) +% -> {ok, map()} | +% {ok, map(), bitstring()} | +% {error, term()}. +% -spec struct_spill(bitstring(), list()) +% -> {ok, map()} | +% {ok, map(), bitstring()} | +% {error, term()}. + +%%%=================================================================== +%%% INTERNAL SECTION - PRIVATE FUNCTION +%%%=================================================================== + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_blksz(bitstring()) + -> {ok, map(), bitstring()}. +drr_blksz(<>) -> + {ok, #{ blksz => BlkSz }, Rest}. + +drr_blksz_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_bonuslen(bitstring()) + -> {ok, map(), bitstring()}. +drr_bonuslen(<>) -> + {ok, #{bonuslen => BonusLen}, Rest}. + +drr_bonuslen_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_bonustype(bitstring()) + -> {ok, atom(), bitstring()}. +drr_bonustype(<>) -> + {ok, bonustype(BonusType), Rest/bitstring}. + +drr_bonustype_test() -> + [ drr_bonustype_test(X) || X <- lists:seq(1,1) ]. +drr_bonustype_test(1) -> + ?assertEqual(ok, ok). + +% http://bxr.su/FreeBSD/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h#126 +-define(BONUSTYPE(X,A), bonustype(X) when is_integer(X) -> A; + bonustype(A) when is_atom(A) -> X). +?BONUSTYPE(0, none); +?BONUSTYPE(1, object_directory); +?BONUSTYPE(2, object_array); +?BONUSTYPE(3, packed_nvlist); +?BONUSTYPE(4, packed_nvlist_size); +?BONUSTYPE(5, pbobj); +?BONUSTYPE(6, pbobj_hdr); +?BONUSTYPE(7, space_map_header); +?BONUSTYPE(8, space_map); +?BONUSTYPE(9, intent_log); +?BONUSTYPE(10, dnode); +?BONUSTYPE(11, objset); +?BONUSTYPE(12, dsl_dir); +?BONUSTYPE(13, dsl_dir_child_map); +?BONUSTYPE(14, dsl_ds_snap_map); +?BONUSTYPE(15, dsl_ds_props); +?BONUSTYPE(16, dsl_dataset); +?BONUSTYPE(17, znode); +?BONUSTYPE(18, oldacl); +?BONUSTYPE(19, plain_file_contents); +?BONUSTYPE(20, directory_contents); +?BONUSTYPE(21, master_node); +?BONUSTYPE(22, unlinked_set); +?BONUSTYPE(23, zvol); +?BONUSTYPE(25, zvol_prop); +?BONUSTYPE(26, plain_other); +?BONUSTYPE(27, uint64_other); +?BONUSTYPE(28, zap_other); +?BONUSTYPE(29, error_log); +?BONUSTYPE(30, spa_history); +?BONUSTYPE(31, spa_history_offsets); +?BONUSTYPE(32, pool_props); +?BONUSTYPE(33, dsl_perms); +?BONUSTYPE(34, acl); +?BONUSTYPE(35, sysacl); +?BONUSTYPE(36, fuid); +?BONUSTYPE(37, fuid_size); +?BONUSTYPE(38, next_clones); +?BONUSTYPE(39, scan_queue); +?BONUSTYPE(40, usergroup_used); +?BONUSTYPE(41, usergroup_quota); +?BONUSTYPE(42, userrefs); +?BONUSTYPE(43, ddt_zap); +?BONUSTYPE(44, ddt_stats); +?BONUSTYPE(45, sa); +?BONUSTYPE(46, sa_master_node); +?BONUSTYPE(47, sa_attr_registration); +?BONUSTYPE(48, sa_attr_layouts); +?BONUSTYPE(49, scan_xlate); +?BONUSTYPE(50, dedup); +?BONUSTYPE(51, deadlist); +?BONUSTYPE(52, deadlist_hdr); +?BONUSTYPE(53, dsl_clones); +?BONUSTYPE(54, bpobj_subobj); +?BONUSTYPE(55, numtypes). +% DMU_OTN_UINT8_DATA = DMU_OT(DMU_BSWAP_UINT8, B_FALSE), +% DMU_OTN_UINT8_METADATA = DMU_OT(DMU_BSWAP_UINT8, B_TRUE), +% DMU_OTN_UINT16_DATA = DMU_OT(DMU_BSWAP_UINT16, B_FALSE), +% DMU_OTN_UINT16_METADATA = DMU_OT(DMU_BSWAP_UINT16, B_TRUE), +% DMU_OTN_UINT32_DATA = DMU_OT(DMU_BSWAP_UINT32, B_FALSE), +% DMU_OTN_UINT32_METADATA = DMU_OT(DMU_BSWAP_UINT32, B_TRUE), +% DMU_OTN_UINT64_DATA = DMU_OT(DMU_BSWAP_UINT64, B_FALSE), +% DMU_OTN_UINT64_METADATA = DMU_OT(DMU_BSWAP_UINT64, B_TRUE), +% DMU_OTN_ZAP_DATA = DMU_OT(DMU_BSWAP_ZAP, B_FALSE), +% DMU_OTN_ZAP_METADATA = DMU_OT(DMU_BSWAP_ZAP, B_TRUE), + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%% @todo check data checksum +%%-------------------------------------------------------------------- +-spec drr_checksum(bitstring) + -> {ok, bitstring(), bitstring}. +drr_checksum(<>) -> + ?debugFmt("drr_checksum: ~p", [Checksum]), + {ok, Checksum, Rest}. + +drr_checksum_test() -> + [ drr_checksum_test(X) || X <- [1] ]. + +drr_checksum_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_checksumflags(bitstring()) -> {ok, bitstring(), bitstring}. +drr_checksumflags(<>) -> + ?debugFmt("drr_checksumflags: ~p", [ChecksumFlags]), + {ok, ChecksumFlags, Rest}. + +drr_checksumflags_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_checksumtype(bitstring()) -> {ok, atom(), bitstring()}. +drr_checksumtype(<>) -> + ?debugFmt("drr_checksumtype: ~p", [ChecksumType]), + {ok, ChecksumType, Rest}. + +drr_checksumtype_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_compress(bitstring()) -> {ok, atom(), bitstring()}. +drr_compress(<>) -> + ?debugFmt("drr_compress: ~p", [Compress]), + {ok, Compress, Rest}. + +drr_compress_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_creation_time(bitstring()) + -> {ok, map(), bitstring()}. +drr_creation_time(<>) -> + ?debugFmt("drr_creation_time: ~p", [CreationTime]), + {ok, #{ creation_time => CreationTime }, Rest}. + +drr_creation_time_test() -> + [drr_creation_time_test(X) || X <- [1] ]. +drr_creation_time_test(1) -> + IN = <<16#66, 16#2f, 16#29, 16#5a,0,0,0,0>>, + OUT = {ok, #{ creation_time => 16#5a292f66 }, <<>>}, + ?assertEqual(OUT, drr_creation_time(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_firstobj(bitstring()) + -> {ok, bitstring(), bitstring()}. +drr_firstobj(<>) -> + ?debugFmt("drr_firstobj: ~p", [FirstObj]), + {ok, FirstObj, Rest}. + +drr_firstobj_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_flags(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_flags(<>) -> + ?debugFmt("drr_flags: ~p", [Flags]), + {ok, #{ flags => Flags }, Rest}. + +drr_flags_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_fromguid(bitstring()) -> {ok, map(), bitstring()}. +drr_fromguid(<>) -> + ?debugFmt("drr_fromguid: ~p", [FromGuid]), + {ok, #{ fromguid => FromGuid }, Rest}. + +drr_fromguid_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_key(bitstring()) -> {ok, map(), bitstring()}. +drr_key(<>) -> + ?debugFmt("drr_key: ~p, ~p", [CkSum, Prop]), + {ok, #{cksum => CkSum, prop => Prop}, Rest}. + +drr_key_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_length(bitstring()) -> {ok, map(), bitstring()}. +drr_length(<>) -> + ?debugFmt("drr_length: ~p", [Length]), + {ok, #{ length => Length }, Rest}. + +drr_length_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_magic(bitstring()) + -> {ok, map(), bitstring()} | + {error, term()}. +drr_magic(<<16#2F5bacbac:64/little, Rest/bitstring>>) -> + ?debugFmt("drr_magic: ok", []), + {ok, #{ magic => <<16#2F5bacbac:64/little>> }, Rest}; +drr_magic(<<_:64, _/bitstring>>) -> + {error, magic}. + +drr_magic_test() -> + [ drr_magic_test(X) || X <- lists:seq(1,2) ]. + +drr_magic_test(1) -> + IN = <<172,203,186,245,2,0,0,0>>, + OUT = {ok, #{magic => <<16#2F5bacbac:64/little>>}, <<>>}, + ?assertEqual(OUT, drr_magic(IN)); +drr_magic_test(2) -> + IN = <<1,2,3,4, 5,6,7,8>>, + OUT = {error, magic}, + ?assertEqual(OUT, drr_magic(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_numobjs(bitstring()) -> {ok, non_neg_integer(), bitstring()}. +drr_numobjs(<>) -> + ?debugFmt("drr_numobjs: ~p", [NumObjs]), + {ok, NumObjs, Rest}. + +drr_numobjs_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_object(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_object(<>) -> + {ok, Object, Rest}. + +drr_object_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_offset(bitstring()) -> {ok, non_neg_integer(), bitstring()}. +drr_offset(<>) -> + {ok, Offset, Rest}. + +drr_offset_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_pad(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_pad(<>) -> + {ok, Pad, Rest}. + +drr_pad_test(1) -> + ?assertEqual(ok, ok). + +-spec drr_pad2(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_pad2(<>) -> + {ok, Pad, Rest}. + +drr_pad2_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%% +%%-------------------------------------------------------------------- +-spec drr_refguid(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_refguid(<>) -> + {ok, RefGuid, Rest}. + +drr_refguid_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%% +%%-------------------------------------------------------------------- +-spec drr_refobject(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_refobject(<>) -> + {ok, RefObject, Rest}. + +drr_refobject_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%% +%%-------------------------------------------------------------------- +-spec drr_refoffset(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_refoffset(<>) -> + {ok, RefOffset, Rest}. + +drr_refoffset_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%% +%%-------------------------------------------------------------------- +-spec drr_toguid(bitstring()) + -> {ok, map(), bitstring()}. +drr_toguid(<>) -> + {ok, #{ toguid => ToGuid }, Rest}. + +drr_toguid_test() -> + [ drr_toguid_test(X) || X <- [1] ]. + +drr_toguid_test(1) -> + IN = <<16#36, 16#50, 16#0f, 16#21, 16#f9, 16#72, 16#e9, 16#87>>, + OUT = {ok, #{ toguid => <<54,80,15,33,249,114,233,135>>}, <<>>}, + ?assertEqual(OUT, drr_toguid(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%% @todo check snapshot name. +%%-------------------------------------------------------------------- +-spec drr_toname(bitstring()) + -> {ok, map(), bitstring()}. +drr_toname(<>) -> + ?debugFmt("drr_toname: ~p", [ToName]), + {ok, #{ toname => zfs_lib:null_clean(ToName) }, Rest}. + +drr_toname_test() -> + [drr_toname_test(X) || X <- lists:seq(1, 2) ]. + +drr_toname_test(1) -> + IN = <<>>, + ?assertException(error, _, drr_toname(IN)); +drr_toname_test(2) -> + IN = <<"pool@test", 0:(256*8-72)>>, + OUT = {ok, #{ toname => <<"pool@test">> }, <<>>}, + ?assertEqual(OUT, drr_toname(IN)); +drr_toname_test(3) -> + IN = <<"zpooltest", 0:(256*8-72)>>, + OUT = {error, not_snapshot}, + ?assertEqual(OUT, drr_toname(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_type(bitstring()) + -> {ok, map(), bitstring()}. +drr_type(<>) -> + ?debugFmt("drr_type: ~p", [Type]), + {ok, #{ type => type(Type) }, Rest}. + +drr_type_test() -> + [ drr_type_test(X) || X <- lists:seq(1,9) ]. + +drr_type_test(1) -> + IN = <<0,0,0,0 >>, + OUT = {ok, #{ type => drr_begin }, <<>>}, + ?assertEqual(OUT, drr_type(IN)); +drr_type_test(2) -> + IN = <<1,0,0,0>>, + OUT = {ok, #{ type => drr_object }, <<>>}, + ?assertEqual(OUT, drr_type(IN)); +drr_type_test(3) -> + IN = <<2,0,0,0>>, + OUT = {ok, #{ type => drr_freeobjects }, <<>>}, + ?assertEqual(OUT, drr_type(IN)); +drr_type_test(4) -> + IN = <<3,0,0,0>>, + OUT = {ok, #{ type => drr_write}, <<>>}, + ?assertEqual(OUT, drr_type(IN)); +drr_type_test(5) -> + IN = <<4,0,0,0>>, + OUT = {ok, #{ type => drr_free }, <<>>}, + ?assertEqual(OUT, drr_type(IN)); +drr_type_test(6) -> + IN = <<5,0,0,0>>, + OUT = {ok, #{ type => drr_end }, <<>>}, + ?assertEqual(OUT, drr_type(IN)); +drr_type_test(7) -> + IN = <<6,0,0,0>>, + OUT = {ok, #{ type => drr_write_byref }, <<>>}, + ?assertEqual(OUT, drr_type(IN)); +drr_type_test(8) -> + IN = <<7,0,0,0>>, + OUT = {ok, #{ type => drr_spill }, <<>>}, + ?assertEqual(OUT, drr_type(IN)); +drr_type_test(9) -> + IN = <<8,0,0,0>>, + OUT = {ok, #{ type => drr_umtypes }, <<>>}, + ?assertEqual(OUT, drr_type(IN)). + +-define(TYPE(X,A), type(X) when is_integer(X) -> A; + type(A) when is_atom(A) -> X ). +?TYPE(0, drr_begin); +?TYPE(1, drr_object); +?TYPE(2, drr_freeobjects); +?TYPE(3, drr_write); +?TYPE(4, drr_free); +?TYPE(5, drr_end); +?TYPE(6, drr_write_byref); +?TYPE(7, drr_spill); +?TYPE(8, drr_umtypes). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_versioninfo(bitstring()) -> {ok, map(), bitstring()}. +drr_versioninfo(<>) -> + ?debugFmt("drr_versioninfo: ~p", [<>]), + <<_:32, Features:30, HdrType:2>> = <>, + {ok, #{ hdrtype => hdrtype(HdrType) + , featuresflags => Features + }, Rest}. + +drr_versioninfo_test() -> + drr_versioninfo_test(1), + drr_versioninfo_test(2). +drr_versioninfo_test(1) -> + IN = <<17,0,0,0,0,0,0,0>>, + OUT = {ok, #{ hdrtype => substream + , featuresflags => 4 }, <<>>}, + ?assertEqual(OUT, drr_versioninfo(IN)); +drr_versioninfo_test(2) -> + IN = <<16,0,0,0,0,0,0,0>>, + OUT = {ok, #{ hdrtype => compoundstream + , featuresflags => 4 }, <<>>}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-define(HDRTYPE(X,A), hdrtype(X) -> A; hdrtype(A) -> X). +-spec hdrtype(integer()) -> atom(). +?HDRTYPE(1, substream); +?HDRTYPE(2, compoundstream). + +hdrtype_test() -> + [ hdrtype_test(X) || X <- [1,2] ]. + +hdrtype_test(1) -> + IN = 1, + OUT = substream, + ?assertEqual(OUT, hdrtype(1)); +hdrtype_test(2) -> + IN = 2, + OUT = compoundstream, + ?assertEqual(OUT, hdrtype(2)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%% @see http://bxr.su/FreeBSD/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h#58 +%%-------------------------------------------------------------------- +-define(OBJSET_TYPE(X,A), dmu_objset_type(X) -> A; + dmu_objset_type(A) -> X). +?OBJSET_TYPE(0, none); +?OBJSET_TYPE(1, meta); +?OBJSET_TYPE(2, zfs); +?OBJSET_TYPE(3, zvol); +?OBJSET_TYPE(4, other); +?OBJSET_TYPE(5, any); +?OBJSET_TYPE(6, numtypes). + +%% +%% +%% +-spec objset_type(bitstring()) -> {ok, atom(), bitstring()}. +objset_type(<>) -> + {ok, #{ type => dmu_objset_type(ObjsetType) }, Rest}. + +objset_type_test() -> + [ objset_type_test(X) || X <- lists:seq(1,1) ]. +objset_type_test(1) -> + IN = <<0,0,0,0>>, + OUT = {ok, #{ type => none }, <<>>}, + ?assertEqual(OUT, objset_type(IN)); +objset_type_test(2) -> + IN = <<1,0,0,0>>, + OUT = {ok, #{ type => meta }, <<>>}, + ?assertEqual(OUT, objset_type(IN)); +objset_type_test(3) -> + IN = <<2,0,0,0>>, + OUT = {ok, #{ type => zfs}, <<>>}, + ?assertEqual(OUT, objset_type(IN)). + +%%-------------------------------------------------------------------- +%% +%%-------------------------------------------------------------------- +-define(DMU_BSWAP_UINT8, 0). +-define(DMU_BSWAP_UINT16, 1). +-define(DMU_BSWAP_UINT32, 2). +-define(DMU_BSWAP_UINT64, 3). +-define(DMU_BSWAP_ZAP, 4). +-define(DMU_BSWAP_DNODE, 5). +-define(DMU_BSWAP_OBJSET, 6). +-define(DMU_BSWAP_ZNODE, 7). +-define(DMU_BSWAP_OLDACL, 8). +-define(DMU_BSWAP_ACL, 9). +-define(DMU_BSWAP_NUMFUNCS, 10). diff --git a/src/fletcher.erl b/src/fletcher.erl new file mode 100644 index 0000000..a84ab24 --- /dev/null +++ b/src/fletcher.erl @@ -0,0 +1,154 @@ +%%%=================================================================== +%%% @author Mathieu Kerjouan +%%% @copyright 2017 +%%% @title Fletcher Checksums Implementation +%%% @doc fletcher checksum naive implementation. All this code +%%% is not optimized and was made only for testing purpose. +%%% @end +%%% @see sys/cddl/contrib/opensolaris/common/zfs/zfs_fletcher.c +%%%=================================================================== +-module(fletcher). +-export([fletcher16/1]). +-export([fletcher32/1]). +-export([fletcher64/1]). +-export([adler32/1]). +-include_lib("eunit/include/eunit.hrl"). +-define(ENDIANESS, little). + +%%-------------------------------------------------------------------- +%% @doc naive fletcher16 implementation +%% @end +%%-------------------------------------------------------------------- +-spec fletcher16(bitstring()) -> integer(). +fletcher16(Bitstring) -> + fletcher16(Bitstring, {0, 0}). + +-spec fletcher16(bitstring(), {integer(), integer()}) -> integer(). +fletcher16(<<>>, {Sum1, Sum2}) -> + (Sum2 bsl 8) bor Sum1; +fletcher16(<>, {Sum1, Sum2}) -> + S1 = (Sum1 + Char) rem 255, + S2 = (Sum2 + S1) rem 255, + fletcher16(Rest, {S1, S2}). + +fletcher16_test() -> + [ fletcher16_test(X) || X <- lists:seq(1,3) ]. + +fletcher16_test(1) -> + IN = <<"abcde">>, + OUT = 51440, + ?assertEqual(OUT, fletcher16(IN)); +fletcher16_test(2) -> + IN = <<"abcdef">>, + OUT = 8279, + ?assertEqual(OUT, fletcher16(IN)); +fletcher16_test(3) -> + IN = <<"abcdefgh">>, + OUT = 1575, + ?assertEqual(OUT, fletcher16(IN)). + +%%-------------------------------------------------------------------- +%% @doc naive fletcher32 implementation +%% @end +%%-------------------------------------------------------------------- +fletcher32(Bitstring) -> + fletcher32(Bitstring, {0, 0}). + +fletcher32(<<>>, {Sum1, Sum2}) -> + S1 = Sum1 rem 65535, + S2 = Sum2 rem 65535, + (S2 bsl 16) bor S1; +fletcher32(<>, {Sum1, Sum2}) -> + S1 = (Sum1 + Char), + S2 = (Sum2 + S1), + fletcher32(Rest, {S1, S2}); +fletcher32(<>, {Sum1, Sum2}) -> + S1 = (Sum1 + Char), + S2 = (Sum2 + S1), + fletcher32(Rest, {S1, S2}). + +fletcher32_test() -> + [ fletcher32_test(X) || X <- lists:seq(1,3) ]. + +fletcher32_test(1) -> + IN = <<"abcde">>, + OUT = 4031760169, + ?assertEqual(OUT, fletcher32(IN)); +fletcher32_test(2) -> + IN = <<"abcdef">>, + OUT = 1448095018, + ?assertEqual(OUT, fletcher32(IN)); +fletcher32_test(3) -> + IN = <<"abcdefgh">>, + OUT = 3957429649, + ?assertEqual(OUT, fletcher32(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +fletcher64(Bitstring) -> + fletcher64(Bitstring, {0, 0}). + +fletcher64(<<>>, {Sum1, Sum2}) -> + S1 = Sum1 rem 4294967295, + S2 = Sum2 rem 4294967295, + (S2 bsl 32) bor S1; +fletcher64(<>, {Sum1, Sum2}) -> + S1 = Sum1 + Char, + S2 = Sum2 + S1, + fletcher64(Rest, {S1, S2}); +fletcher64(<>, {Sum1, Sum2}) -> + S1 = Sum1 + Char, + S2 = Sum2 + S1, + fletcher64(Rest, {S1, S2}); +fletcher64(<>, {Sum1, Sum2}) -> + S1 = Sum1 + Char, + S2 = Sum2 + S1, + fletcher64(Rest, {S1, S2}). + +fletcher64_test() -> + [ fletcher64_test(X) || X <- lists:seq(1,3) ]. + +fletcher64_test(1) -> + IN = <<"abcde">>, + OUT = 14467467625952928454, + ?assertEqual(OUT, fletcher64(IN)); +fletcher64_test(2) -> + IN = <<"abcdef">>, + OUT = 14467579776138987718, + ?assertEqual(OUT, fletcher64(IN)); +fletcher64_test(3) -> + IN = <<"abcdefgh">>, + OUT = 3543817411021686982, + ?assertEqual(OUT, fletcher64(IN)). + +%%-------------------------------------------------------------------- +%% @doc naive adler32 implementation. Erlang is delivered with its +%% own adler implementation, see erlang:adler32/1 function. +%% @end +%%-------------------------------------------------------------------- +adler32(Bitstring) -> + adler32(Bitstring, {1, 0}). + +adler32(<<>>, {C1, C2}) -> + (C2 bsl 16) bor C1; +adler32(<>, {C1, C2}) -> + S1 = C1 + Char rem 65521, + S2 = C2 + S1 rem 65521, + adler32(Rest, {S1, S2}). + +adler32_test() -> + [ adler32_test(X) || X <- lists:seq(1,3) ]. +adler32_test(1) -> + IN = <<"abcde">>, + OUT = 16#05C801F0, + ?assertEqual(OUT, adler32(IN)); +adler32_test(2) -> + IN = <<"abcdef">>, + OUT = 16#081E0256, + ?assertEqual(OUT, adler32(IN)); +adler32_test(3) -> + IN = <<"abcdefgh">>, + OUT = 16#0E000325, + ?assertEqual(OUT, adler32(IN)). diff --git a/src/zfs.app.src b/src/zfs.app.src new file mode 100644 index 0000000..39745b7 --- /dev/null +++ b/src/zfs.app.src @@ -0,0 +1,14 @@ +{application, zfs, + [{description, "Erlang ZFS Implementation"}, + {vsn, "0.1.0"}, + {registered, []}, + {applications, + [kernel, + stdlib + ]}, + {env,[]}, + {modules, []}, + {maintainers, ["contact@steepath.eu"]}, + {licenses, ["ISC/OpenBSD"]}, + {links, []} + ]}. diff --git a/src/zfs.erl b/src/zfs.erl new file mode 100644 index 0000000..ac405ca --- /dev/null +++ b/src/zfs.erl @@ -0,0 +1,512 @@ +%%%------------------------------------------------------------------- +%%% @title Erlang ZFS High Level Implementation +%%% @author Mathieu Kerjouan +%%% @copyright 2017 +%%% @version 0.1.0 +%%% @doc This module is the first step of Erlang ZFS Implementation +%%% and contain all required functions for parsing ZFS streams. +%%% @end +%%% @see http://bxr.su/FreeBSD/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h +%%%------------------------------------------------------------------- +-module(zfs). +-compile(export_all). +-include("zfs.hrl"). +-include_lib("eunit/include/eunit.hrl"). + +%%-------------------------------------------------------------------- +%% @doc clean function remove null char from bitstring. +%% @end +%%-------------------------------------------------------------------- +clean(Bitstring) -> + clean(Bitstring, <<>>). +clean(<>, Buf) + when A =/= 0 -> + clean(Rest, <>); +clean(_, Buf) -> + Buf. + +%%-------------------------------------------------------------------- +%% @doc generic automaton handler function, take a list of action in +%% multiple form. Each action should take at least one argument +%% wich is next action to do after executing the first one. +%% @end +%%-------------------------------------------------------------------- +-spec next(list(), list()) -> {ok, list()} | term(). +next([], Args) -> + {ok, Args}; +next([Function|T], Args) + when is_atom(Function) -> + ?debugFmt("Function: ~p", [Function]), + ?debugFmt("Rest: ~p", [T]), + ?debugFmt("Args: ~p", [Args]), + erlang:apply(?MODULE, Function, [T|Args]); +next([Function|T], Args) + when is_function(Function) -> + ?debugFmt("Function: ~p", [Function]), + ?debugFmt("Rest: ~p", [T]), + ?debugFmt("Args: ~p", [Args]), + erlang:apply(Function, [T|Args]); +next([{Module, Function}|T], Args) + when is_atom(Module), is_atom(Function) -> + ?debugFmt("Module: ~p", [Module]), + ?debugFmt("Function: ~p", [Function]), + ?debugFmt("Rest: ~p", [T]), + ?debugFmt("Args: ~p", [Args]), + erlang:apply(Module, Function, [T|Args]). + +%%-------------------------------------------------------------------- +%% @doc simple function to put value in different structure like +%% map and proplist. +%% @end +%%-------------------------------------------------------------------- +put(Key, Value, Proplist) + when is_list(Proplist) -> + [{Key, Value}|Proplist]; +put(Key, Value, Map) + when is_map(Map) -> + maps:put(Key, Value, Map). + +%%-------------------------------------------------------------------- +%% @doc main function to parse zfs stream. This function accept list +%% or bitstring. +%% @end +%%-------------------------------------------------------------------- +-spec dmu(bitstring() | list()) -> tuple(). +dmu(List) + when is_list(List) -> + dmu(erlang:list_to_bitstring(List)); +dmu(Bitstring) + when is_bitstring(Bitstring) -> + drr_header(Bitstring, #{}). + +%%-------------------------------------------------------------------- +%% @doc drr_end/0. +%% @end +%%-------------------------------------------------------------------- +-spec drr_end() -> [atom(), ...]. +drr_end() -> + [ drr_checksum, drr_toguid, return ]. + +%%-------------------------------------------------------------------- +%% @doc drr_object/0. +%% @end +%%-------------------------------------------------------------------- +-spec drr_object() -> [atom(), ...]. +drr_object() -> + [ drr_object, drr_type, drr_bonustype, drr_blksz + , drr_bonuslen, drr_checksumtype, drr_compress + , drr_pad, drr_toguid, return ]. + +%%-------------------------------------------------------------------- +%% @doc drr_freeobjects/0. +%% @end +%%-------------------------------------------------------------------- +-spec drr_freeobjects() -> [atom(), ...]. +drr_freeobjects() -> + [ drr_firstobj, drr_numobjs, drr_toguid, return ]. + +%%-------------------------------------------------------------------- +%% @doc drr_write/0. +%% @end +%%-------------------------------------------------------------------- +-spec drr_write() -> [atom(), ...]. +drr_write() -> + [ drr_object, drr_type, drr_pad, drr_offset, drr_length + , drr_toguid, drr_checksumtype, drr_checksumflags + , drr_pad2, drr_key, return ]. + +%%-------------------------------------------------------------------- +%% @doc drr_free/0. +%% @end +%%-------------------------------------------------------------------- +-spec drr_free() -> [atom(), ...]. +drr_free() -> + [ drr_object, drr_offset, drr_length, drr_toguid ]. + +%%-------------------------------------------------------------------- +%% @doc drr_write_byref/0. +%% @end +%%-------------------------------------------------------------------- +-spec drr_write_byref() -> [atom(), ...]. +drr_write_byref() -> + [ drr_object, drr_offset, drr_length, drr_toguid + , drr_refguid, drr_refobject, drr_refoffset + , drr_checksumtype, drr_checksumflags, drr_pad2 + , drr_key, return ]. + +%%-------------------------------------------------------------------- +%% @doc drr_spill/0. +%% @end +%%-------------------------------------------------------------------- +-spec drr_spill() -> [atom(), ...]. +drr_spill() -> + [ drr_object, drr_length, drr_toguid, drr_pad, return ]. + +%%-------------------------------------------------------------------- +%% @doc drr_header function will route type based on first 64bits of +%% ZFS stream from send function. First 32bits define ZFS DRR, +%% following 32bits define DRR payload length. +%% Objects has defined size: 312bytes. This is the size of +%% the dmu_replay_record structure from zfs_ioctl header. So, +%% we can retrieve all information with recursive call, but +%% if our structure isn't well sized, we'll need to ensure +%% to remove remaining data. Another method, more imperative, +%% is to extract directly 312bytes from current stream and +%% parse it after. Current implementation use pattern +%% matching method. +%% @end +%%-------------------------------------------------------------------- +drr_header(<>, DmuHeader) -> + ?debugFmt("type: ~p", [DrrType]), + ?debugFmt("payload: ~p", [DrrPayloadLen]), + DmuUpdate1 = maps:put(type, DrrType, DmuHeader), + DmuUpdate2 = maps:put(payloadlen, DrrPayloadLen, DmuUpdate1), + case DrrType of + ?DRR_BEGIN -> + drr_begin(Rest, drr_begin(), #{}, DmuUpdate2); + ?DRR_OBJECT -> + wip; % drr_object(Rest, drr_object(), #{}, DmuHeader); + ?DRR_FREEOBJECTS -> + drr_freeobjects(Rest, drr_freeobjects(), #{}); + ?DRR_WRITE -> + wip; % drr_write(Rest, drr_write(), #{}, DmuHeader); + ?DRR_FREE -> + wip; % drr_free(Rest, drr_free(), #{}, DmuHeader); + ?DRR_END -> + wip; % drr_end(Rest, drr_end(), #{}, DmuHeader); + ?DRR_WRITE_BYREF -> + wip; % drr_write_byref(Rest, drr_write_byref(), #{}, DmuHeader); + ?DRR_SPILL -> + wip; % drr_spill(Rest, drr_spill(), #{}, DmuHeader); + ?DRR_NUMTYPES -> + wip; % drr_numtypes(Rest, drr_numtypes(), #{}, DmuHeader) + _ -> + {error, "unsupported type"} + end. + +%%-------------------------------------------------------------------- +%% @doc drr_begin/0 function return a list of all function to parse +%% a begin ZFS stream. +%% @end +%%-------------------------------------------------------------------- +-spec drr_begin() -> [atom(), ...]. +drr_begin() -> + [ drr_magic, drr_versioninfo, drr_creation_time, drr_type + , drr_flags, drr_toguid, drr_fromguid, drr_toname, return ]. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +drr_begin(Bitstring, Order, Buf, DmuHeader) -> + ?debugMsg("drr_begin function"), + next(Order, [Bitstring, Buf, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc drr_magic function extract magic ZFS value following and +%% check if this value is well configured. +%% @end +%%-------------------------------------------------------------------- +-spec drr_magic(bitstring()) -> {ok, list(), bitstring()}. +drr_magic(<>) -> + ?debugFmt("magic: ~p", [Magic]), + M = erlang:integer_to_binary(Magic, 16), + case M =:= <<"2F5BACBAC">> of + true -> + ?debugFmt("magic: ~p", [M]), + {ok, M, Rest} + end. + +-spec drr_magic(list(), bitstring(), map(), map()) -> tuple(). +drr_magic(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, Magic, Rest} = drr_magic(Bitstring), + Return = maps:put(magic, Magic, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc drr_versioninfo extract a 64bits from current bitstring and +%% split it in 2 value: hdrtype and features flags. +%% @end +%%-------------------------------------------------------------------- +-spec drr_versioninfo(bitstring) -> {ok, bitstring(), bitstring()}. +drr_versioninfo(<>) -> + ?debugFmt("versioninfo: ~p", [VersionInfo]), + {ok, VersionInfo, Rest}. + +-spec drr_versioninfo(list(), bitstring(), map(), map()) -> tuple(). +drr_versioninfo(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + % we need to extract feature and hdrtype + % but this thing currently doesn't work as expected... + % <> = VersionInfo, + % <> = VersionInfo, + % ?debugFmt("feature: ~p:~p", [HdrType, Features]), + % Return1 = maps:put(features, Features, Buf), + % Return2 = maps:put(hdrtype, undef, Return1), + {ok, VersionInfo, Rest} = drr_versioninfo(Bitstring), + Return = maps:put(versioninfo, VersionInfo, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc drr_creation_time extract a 64bits value from current +%% bitstring. +%% @end +%%-------------------------------------------------------------------- +-spec drr_creation_time(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_creation_time(<>) -> + ?debugFmt("creation_time: ~p", [CreationTime]), + {ok, CreationTime, Rest}. + +-spec drr_creation_time(list(), bitstring(), map(), map()) -> tuple(). +drr_creation_time(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, CreationTime, Rest} = drr_creation_time(Bitstring), + Return = maps:put(creation_time, CreationTime, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc drr_type extract 32bits value from current bitstring. +%% @end +%%-------------------------------------------------------------------- +-spec drr_type(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_type(<>) -> + ?debugFmt("type: ~p", [Type]), + {ok, Type, Rest}. + +-spec drr_type(list(), bitstring(), map(), map()) -> tuple(). +drr_type(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, Type, Rest} = drr_type(Bitstring), + Return = maps:put(type, Type, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc drr_flags function extract flags from current bitstring. +%% @end +%%-------------------------------------------------------------------- +-spec drr_flags(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_flags(<>) -> + ?debugFmt("flags: ~p", [Flags]), + {ok, Flags, Rest}. + +-spec drr_flags(list(), bitstring(), map(), map()) -> tuple(). +drr_flags(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, Flags, Rest} = drr_flags(Bitstring), + Return = maps:put(flags, Flags, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc drr_toguid extract 64bits as bitstring from current +%% bitstring. +%% @end +%%-------------------------------------------------------------------- +-spec drr_toguid(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_toguid(<>) -> + ?debugFmt("toguid: ~p", [ToGuid]), + {ok, ToGuid, Rest}. + +drr_toguid(Order, Bitstring, Buf) + when is_bitstring(Bitstring) -> + {ok, ToGuid, Rest} = drr_toguid(Bitstring), + Return = maps:put(toguid, ToGuid, Buf), + next(Order, [Rest, Return]). + +-spec drr_toguid(list(), bitstring(), map(), map()) -> tuple(). +drr_toguid(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, ToGuid, Rest} = drr_toguid(Bitstring), + Return = maps:put(toguid, ToGuid, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_fromguid(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_fromguid(<>) -> + ?debugFmt("fromguid: ~p", [FromGuid]), + {ok, FromGuid, Rest}. + +drr_fromguid(Order,Bitstring, Buf) + when is_bitstring(Bitstring) -> + {ok, FromGuid, Rest} = drr_fromguid(Bitstring), + Return = maps:put(fromguid, FromGuid, Buf), + next(Order, [Rest, Return]). + +-spec drr_fromguid(list(), bitstring(), map(), map()) -> tuple(). +drr_fromguid(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, FromGuid, Rest} = drr_fromguid(Bitstring), + Return = maps:put(fromguid, FromGuid, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_toname(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_toname(<>) -> + ?debugFmt("toname: ~p", [clean(ToName)]), + {ok, ToName, Rest}. + +-spec drr_toname(list(), bitstring(), map(), map()) -> tuple(). +drr_toname(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, ToName, Rest} = drr_toname(Bitstring), + Return = maps:put(toname, clean(ToName), Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +return([], Rest, Buf ) -> + {ok, Buf, Rest}. +return([], Rest, Buf, DmuHeader) -> + {ok, maps:put(drr, Buf, DmuHeader), Rest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +drr_end(Bitstring, Order, DmuHeader) -> + next(Order, [Bitstring, #{}, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_checksum(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_checksum(<>) -> + ?debugFmt("Checksum: ~p", [Checksum]), + {ok, Checksum, Rest}. + +-spec drr_checksum(list(), bitstring(), map(), map()) -> tuple(). +drr_checksum(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, Checksum, Rest} = drr_checksum(Bitstring), + Return = maps:put(checksum, Checksum, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_object(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_object(<>) -> + ?debugFmt("Object: ~p", [Object]), + {ok, Object, Rest}. + +-spec drr_object(list(), bitstring(), map(), map()) -> tuple(). +drr_object(Order, Bitstring, Buf, DmuHeader) + when is_bitstring(Bitstring) -> + {ok, Object, Rest} = drr_object(Bitstring), + Return = maps:put(object, Object, Buf), + next(Order, [Rest, Return, DmuHeader]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_bonustype(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_bonustype(<>) -> + {ok, BonusType, Rest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_blksz(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_blksz(<>) -> + {ok, BlkSz, Rest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_bonuslen(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_bonuslen(<>) -> + {ok, BonusLen, Rest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_checksumtype(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_checksumtype(<>) -> + {ok, ChecksumType, Rest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_compress(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_compress(<>) -> + {ok, Compress, Rest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_pad(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_pad(<>) -> + {ok, Pad, Rest}. + +-spec drr_pad(bitstring(), non_neg_integer()) + -> {ok, bitstring(), bitstring()}. +drr_pad(Bitstring, Length) -> + L = Length*8, + <> = Bitstring, + {ok, Pad, Rest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +drr_freeobjects(Bitstring, Order, Buf) -> + ?debugMsg("drr_freeobjects function"), + next(Order, [Bitstring, Buf]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_firstobj(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_firstobj(<>) -> + {ok, FirstObj, Rest}. + +drr_firstobj(Order, Bitstring, Buf) -> + {ok, FirstObj, Rest} = drr_firstobj(Bitstring), + Return = maps:put(firstobj, FirstObj, Buf), + next(Order, [Rest, Return]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_numobjs(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_numobjs(<>) -> + {ok, NumObjs, Rest}. + +drr_numobjs(Order, Bitstring, Buf) -> + {ok, NumObjs, Rest} = drr_numobjs(Bitstring), + Return = maps:put(numobjs, NumObjs, Buf), + next(Order, [Rest, Return]). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_offset(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_offset(<>) -> + {ok, Offset, Rest}. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec drr_length(bitstring()) -> {ok, bitstring(), bitstring()}. +drr_length(<>) -> + {ok, Length, Rest}. diff --git a/src/zfs.hrl b/src/zfs.hrl new file mode 100644 index 0000000..1b8da2d --- /dev/null +++ b/src/zfs.hrl @@ -0,0 +1,63 @@ +%%%------------------------------------------------------------------- +%%% +%%%------------------------------------------------------------------- +-define(MAXNAMELEN, 256). + +-define(DRR_BEGIN, 0). +-define(DRR_OBJECT, 1). +-define(DRR_FREEOBJECTS, 2). +-define(DRR_WRITE, 3). +-define(DRR_FREE, 4). +-define(DRR_END, 5). +-define(DRR_WRITE_BYREF, 6). +-define(DRR_SPILL, 7). +-define(DRR_NUMTYPES, 8). + +% drr_begin +% http://bxr.su/FreeBSD/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h#128 +-define(DRR_MAGIC_SIZE, 64). +-define(DRR_MAGIC, ?DRR_MAGIC_SIZE/bitstring). + +-define(DRR_VERSIONINFO_SIZE, 64). +-define(DRR_VERSIONINFO, ?DRR_VERSIONINFO_SIZE/bitstring). + +-define(DRR_CREATIONTIME_SIZE, 64). +-define(DRR_CREATIONTIME, ?DRR_CREATIONTIME_SIZE/bitstring). + +-define(DRR_TYPE_SIZE, 32). +-define(DRR_TYPE, ?DRR_TYPE_SIZE/bitstring). + +-define(DRR_FLAGS_SIZE, 32). +-define(DRR_FLAGS, ?DRR_FLAGS_SIZE/bitstring). + +-define(DRR_TOGUID_SIZE, 64). +-define(DRR_TOGUID, ?DRR_TOGUID_SIZE/bitstring). + +-define(DRR_FROMGUID_SIZE, 64). +-define(DRR_FROMGUID, ?DRR_FROMGUID_SIZE/bitstring). + +-define(DRR_TONAME_SIZE, ?MAXNAMELEN). +-define(DRR_TONAME, ?MAXNAMELEN/bitstring). + + +% drr_end +% http://bxr.su/FreeBSD/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h#139 +-define(DRR_CHECKSUM_SIZE, 64). + +% drr_object +% http://bxr.su/FreeBSD/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h#144 +-define(DRR_OBJECT_SIZE, 64). +-define(DRR_BLKSZ_SIZE, 32). +-define(DRR_BONUSLEN_SIZE, 32). +-define(DRR_CHECKSUMTYPE_SIZE, 8). +-define(DRR_COMPRESS_SIZE, 8). +-define(DRR_PAD_SIZE, 8). + +% drr_freeobjects +% http://bxr.su/FreeBSD/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_ioctl.h#157 + +% drr_write + +% drr_free + +% drr_write_byref diff --git a/src/zfs_lib.erl b/src/zfs_lib.erl new file mode 100644 index 0000000..6a12ca2 --- /dev/null +++ b/src/zfs_lib.erl @@ -0,0 +1,298 @@ +%%%=================================================================== +%%% @doc +%%% @end +%%% @see sys/cddl/contrib/opensolaris/common/zfs +%%%=================================================================== +-module(zfs_lib). +-include("zfs.hrl"). +-include_lib("eunit/include/eunit.hrl"). +-compile(export_all). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec valid_char(integer()) -> integer(). +valid_char(Char) + when (Char >= $0 andalso Char =< $9) orelse + (Char >= $a andalso Char =< $z) orelse + (Char >= $A andalso Char =< $Z) orelse + Char =:= $_ orelse Char =:= $- orelse + Char =:= $: orelse Char =:= $. orelse Char =:= $ -> + Char. + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec zfs_name(list() | bitstring()) + -> {ok, atom(), bitstring()} | + {error, term()}. +zfs_name(List) when is_list(List) -> + zfs_name(erlang:list_to_bitstring(List)); +zfs_name(Bitstring) -> + zfs_name(Bitstring, <<>>). + +-spec zfs_name(bitstring(), bitstring(), atom()) + -> {ok, atom(), bitstring()} | + {error, term()}. +zfs_name(Bitstring, Buf) -> + zfs_name(Bitstring, <<>>, pool). + +% pool +zfs_name(<<>>, PoolName, pool) -> + {ok, pool, PoolName}; +zfs_name(<<"/", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"@", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"_", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"c", Char:8, Rest/bitstring>>, <<>>, pool) + when Char >= $0 andalso Char =< $9 -> + {error, badname}; +zfs_name(<<"log", Rest/bitstring>>, Buf, pool) -> + {error, badname}; +zfs_name(<<"mirror", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"raidz", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"raidz1", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"raidz2", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"raidz3", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"spare", Rest/bitstring>>, <<>>, pool) -> + {error, badname}; +zfs_name(<<"@", Rest/bitstring>>, Buf, pool) -> + {error, badname}; +zfs_name(<<"%", Rest/bitstring>>, Buf, pool) -> + {error, badname}; +zfs_name(<<"/", Rest/bitstring>>, Buf, pool) -> + zfs_name(Rest, <>, dataset); +zfs_name(<>, Buf, pool) + when (Char >= $0 andalso Char =< $9) orelse + (Char >= $a andalso Char =< $z) orelse + (Char >= $A andalso Char =< $Z) orelse + Char =:= $_ orelse Char =:= $- orelse + Char =:= $: orelse Char =:= $. -> + zfs_name(Rest, <>, pool); + +% dataset +zfs_name(<<>>, DatasetName, dataset) -> + {ok, dataset, DatasetName}; +zfs_name(<<"%", Rest/bitstring>>, Buf, dataset) -> + {error, badname}; +zfs_name(<<"@", Rest/bitstring>>, Buf, dataset) -> + zfs_name(Rest, <>, snapshot); +zfs_name(<>, Buf, dataset) + when (Char >= $0 andalso Char =< $9) orelse + (Char >= $a andalso Char =< $z) orelse + (Char >= $A andalso Char =< $Z) orelse + Char =:= $_ orelse Char =:= $- orelse + Char =:= $: orelse Char =:= $. orelse + Char =:= $/ -> + zfs_name(Rest, <>, dataset); + +% snapshot +zfs_name(<<>>, Buf, snapshot) -> + {ok, snapshot, Buf}; +zfs_name(<>, Buf, snapshot) + when (Char >= $0 andalso Char =< $9) orelse + (Char >= $a andalso Char =< $z) orelse + (Char >= $A andalso Char =< $Z) orelse + Char =:= $_ orelse Char =:= $- orelse + Char =:= $: orelse Char =:= $. orelse + Char =:= $/ -> + zfs_name(Rest, <>, snapshot); + +zfs_name(_, _, _) -> + {error, badname}. + +zfs_name_test() -> + [ zfs_name_test(X) || X <- lists:seq(1,14) ]. + +zfs_name_test(1) -> + IN = <<"pool">>, + OUT = {ok, pool, IN}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(2) -> + IN = <<"pool/test/toto">>, + OUT = {ok, dataset, IN}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(3) -> + IN = <<"pool/test/toto@snap1">>, + OUT = {ok, snapshot, IN}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(4) -> + IN = <<"/pool/test">>, + OUT = {error, badname}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(5) -> + IN = <<"@pool/test">>, + OUT = {error, badname}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(6) -> + IN = <<"pool@test@1">>, + OUT = {error, badname}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(7) -> + IN = <<"_pool/test">>, + OUT = {error, badname}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(8) -> + IN = <<"%OFDATA">>, + OUT = {error, badname}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(9) -> + IN = <<"ROOT">>, + OUT = {ok, pool, IN}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(10) -> + IN = <<"R_:0/level4-4">>, + OUT = {ok, dataset, IN}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(11) -> + IN = <<" test">>, + OUT = {error, badname}, + ?assertEqual(OUT, zfs_name(IN)); +zfs_name_test(12) -> + IN = [ <<"c012test">>, <<"c1">>, <<"c2">> + , <<"c3">>, <<"c4">>, <<"c5">>, <<"c6">> + , <<"c7">>, <<"c8">>, <<"c9">> + ], + OUT = {error, badname}, + [ ?assertEqual(OUT, zfs_name(X)) || X <- IN ]; +zfs_name_test(13) -> + IN = [ <<"log">>, <<"mirror">>, <<"raidz">> + , <<"raidz1">>, <<"raidz2">>, <<"raidz3">> + , <<"spare">> + ], + OUT = {error, badname}, + [ ?assertEqual(OUT, zfs_name(X)) || X <- IN ]; +zfs_name_test(14) -> + IN = <<"mypool/test%/1">>, + OUT = {error, badname}, + ?assertEqual(OUT, zfs_name(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec is_pool(bitstring()) -> true | false. +is_pool(Bitstring) -> + is_pool(Bitstring, <<>>). + +-spec is_pool(bitstring(), bitstring()) -> true | false. +is_pool(<<>>, Buf) + when Buf =/= <<>> -> + true; +is_pool(<>, Buf) + when Char >= $0 andalso Char =< $9 orelse + Char >= $A andalso Char =< $Z orelse + Char >= $a andalso Char =< $z -> + is_pool(Rest, <>); +is_pool(_, _) -> + false. + +is_pool_test() -> + [ is_pool_test(X) || X <- [1] ]. +is_pool_test(1) -> + IN = <<"test">>, + OUT = true, + ?assertEqual(OUT, is_pool(IN)); +is_pool_test(2) -> + IN = <<"/test">>, + OUT = false, + ?assertEqual(OUT, is_pool(IN)); +is_pool_test(3) -> + IN = <<"@test">>, + OUT = false, + ?assertEqual(OUT, is_pool(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec is_dataset(bitstring()) -> true | false. +is_dataset(Bitstring) -> + is_dataset(Bitstring, <<>>). + +-spec is_dataset(bitstring(), bitstring()) -> true | false. +is_dataset(<<$/, _/bitstring>>, <<>>) -> + false; +is_dataset(<<>>, Buf) + when Buf =/= <<>> -> + true; +is_dataset(<<$/, $/, Rest/bitstring>>, _) -> + false; +is_dataset(<>, Buf) + when Char >= $0 andalso Char =< $9 orelse + Char >= $A andalso Char =< $Z orelse + Char >= $a andalso Char =< $z orelse + Char =:= $/ -> + is_dataset(Rest, <>); +is_dataset(_, _) -> + false. + +is_dataset_test() -> + [ is_dataset_test(X) || X <- [1] ]. + +is_dataset_test(1) -> + IN = <<"test/test">>, + OUT = true, + ?assertEqual(OUT, is_dataset(IN)); +is_dataset_test(2) -> + IN = <<"/test/test">>, + OUT = false, + ?assertEqual(OUT, is_dataset(IN)); +is_dataset_test(3) -> + IN = <<"test//test">>, + OUT = false, + ?assertEqual(OUT, is_dataset(IN)). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +-spec is_snapshot(bitstring()) -> true | false. +is_snapshot(Bitstring) -> + is_snapshot(Bitstring, <<>>). + +-spec is_snapshot(bitstring(), bitstring()) -> true | false. +is_snapshot(<<>>, Buf) + when Buf =/= <<>> -> + true; +is_snapshot(<>, Buf) -> + ok. + +is_snapshot_test() -> + [ is_snapshot_test(X) || X <- [1] ]. + +is_snapshot_test(1) -> + ?assertEqual(ok, ok). + +%%-------------------------------------------------------------------- +%% @doc +%% @end +%%-------------------------------------------------------------------- +null_clean(Bitstring) -> + null_clean(Bitstring, <<>>). +null_clean(<>, Buf) + when A =/= 0 -> + null_clean(Rest, <>); +null_clean(_, Buf) -> + Buf. + +null_clean_test() -> + [ null_clean_test(X) || X <- lists:seq(1,2) ]. + +null_clean_test(1) -> + IN = <<"thisisatest",0,0,0,0>>, + OUT = <<"thisisatest">>, + ?assertEqual(OUT, null_clean(IN)); +null_clean_test(2) -> + IN = <<"thisis",0,"atest">>, + OUT = <<"thisis">>, + ?assertEqual(OUT, null_clean(IN)). diff --git a/src/zpool.erl b/src/zpool.erl new file mode 100644 index 0000000..e41117e --- /dev/null +++ b/src/zpool.erl @@ -0,0 +1 @@ +-module(zpool). diff --git a/src/zpool.hrl b/src/zpool.hrl new file mode 100644 index 0000000..e69de29 diff --git a/src/zpool_test.erl b/src/zpool_test.erl new file mode 100644 index 0000000..9495d82 --- /dev/null +++ b/src/zpool_test.erl @@ -0,0 +1 @@ +-module(zpool_test). diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..8ae0569 --- /dev/null +++ b/test/README.md @@ -0,0 +1 @@ +# Test diff --git a/test/pool@test.zfs b/test/pool@test.zfs new file mode 100644 index 0000000000000000000000000000000000000000..b649cd33f6b8729e8f9ddf6ca227bde664ef40fe GIT binary patch literal 48008 zcmeI*d3+4_AII_UMkH~>k%+j(ecy3L$VwtYF4@FQ5J4P?=5iBl9rbfn(JDe6b>IBl zl~(&}6fLUtL#uU`qC}~?`F$t5--xuY3jO2v(4BcaWM-Z_-<_TJe&;i@v&j&`Jghsk z`>u_gENYqWU#~_tZBjE^`L9Vx;R+Apu1?lW8-~Tk4)IEeicc`lTHQ}Am+XVVGLti> z?8{ig^roma6Y|In^_g?7!VVcqnW*xKQ{sdeylBeE)Ro1A%1Mn~R47^}%QjeBj`6Z5xesdbsN57}SO#m$OLdj;c6ojB%bBoU z4}b1rC&ZPTiDmn3vJp2UPL7MacquC{wZGO;4Ha1Ctu4RQq(-|6%54uGP;_}U8DQMJ zF+Lj`!#s=WL^P$E=tv6V~3}DvnICagw=JPF-l5P*{kEUUkmiDxOcA9#kgL z;e1nDwSQ_gP#cPyN9F^mnwDd0>u-5#_sm~RZuh%Bj}Y%`V+S>Ioa$ z65@u@9FVGWDo2%@8Y}mafjh{VyBn%!o*(ZFpD*7PA!^L8nmM1k&r~-z^J;xr{auJ6 z`wit}Q!lsGLaQ*sOB<{8st-mH>%&RrZW>;r;q+4O zRfY?ZW`|fWL=k2 z&tTa>RF0}&-tnF5u3djw)cw}#&T^TsJE@bJ-WI~Q+}U3b-mjE-{Y8FEer1O#<5H4* z<*R>k_}$=-cMIWKuG(p*LY)m8FM9VIA6f96CAZ|k!#uJ+>c9NP#>B=A?K32LRG)OZP(W_@6{9Dr24d?h#TZ@lO;k1I!o$o5lQ`|Nt)W)NTIDd4nb z#x$E0QEAw8<6Aw{eyjHXtn2b>ot6hwerh@O@IQ4t{qPk>t$;+HU%t@2g+UZM{AljA zF;{GQmy8(goZhv8I^MXv_HxIYXX|ySub;muEVOIx)6Dvumf0l0*flsjOfPu3&+qRp zsp?JE{-7o-52*d+@2=-nYwz4-){xHfMGpx%UgO?)gGg=RQZ8el!FK-&k72zGp1-Mj zqsD(YS+ml5lP_?LyLREaZ<70j9t#Y@l$2iOokgQ;4{h|>e%@H!sOruB@h?|zUbTLt zzuspPQ1wRbH|jcsI?u7zdb9nZNBf>KDm%x=vkjLG!o#jrThIL$^12pZu&$8pk!Y2d z%1^sK_sn3W^=8NP`we@`AhxYp-OnSBjkwok`LRgT7`pDCdh<+w zv630J->CD{tncmA_FGOsRozjazYAWf?NUfC^XuvN&ux%9-7Vv=#2?Pc@5?W)IW*U) zY-ZVdm9In9c744{f4O}-19taVX|fUPHmFqaomWJCG+H%I%x7iurdVUG6RFVtRcf6n%yFY*Mk%cx7na%;5h_w#*` z>sYeC=4c-n?34TWw69rnv^V*8dx7?HKgiKOL|%#t%JtPO**Hi00RNy4x&LIB?+@*} zXjk%{cB$t~$!o|t)*tHQ+vz!tvOQej5AE9q82xhp`sMG!wh7}7g>K{kw<>Jss^onw;0G;7YYgH{a)~DSHn$Sx zejhIt< z`cwN(@XrRz$DYjZ1+~Z3b@T8MFMZzfXRFaoPe4yVPe4yVPe4yVPe4yVPe4yVPe4yV zPe4yVPe4yVPe4yVPe4yVPe4yVPe4yVPe4yVPe4yVPe4x~7YV5E?e(!aEIkK32Q2}; zAL#u+?+5yRpw|Jt4(N42uLF7=(CdI+2lP6i*8#l_=ygD^19~0M>wsPd^g5u|0lg0B zbwIBJdL7W~fL;gmI`FF10laU5mwA5{mT}JeCafB}V?}~oq-X7M6{~zN?`PEb3sagf z80@ZHiK*UX^V#z9PB^dfeG^hjMwgo?x9^uH6;3RfSwK_?U%IlZf04<44pZOwKE8i@ zOFGGxan@*KxwSTC3iXj~9sJ+mJHU5>?*iWqz6X3S_&)HD!1sfvf`1JD3HSl6%aUx6P5KL&mr{A=(N;NO6M3w{#(zu>39PlKNU{|@|n@U!4Q zfd2@74*Wd$1@MdDm%uNB{{(&o{3`g*;Mc&fgWmxE1^g!XE%0>k+u*-~-vPf1{u}r` z@cZBoz#oD?0)Gtt1pIgK3~*ui^Xu>ia2xPE;I`m-!R^59!5zT!f#(M=0A3K>5xfw1 zVelg0MZulGoxzKNyMPx5cLgs2UJ|?%cxmu5;AO$fftLq&1FryH5xf$3W$-HCRl%!) zR|l^FUK6|)cx~`H;B~?4f!7Cb0NxP15x6^eWAG;6O~IRiHwSM4?g8Es+!MSNcx!Mk za3gpdaBpxQa9{AY;C|rk!2QA7gLeQA01pHY0uKfc0q+PN3T^@q0}lu91l}3E3wT%X zZs6U)dw}-@?*$$K-W$9Rcwg{H@P6P?;Qhe|fDZ(Z1|I}I7<>r$Q1BS=Sny%suYt#b z$Ac$;CxRz|4+kFsJ`#Ks_-ODk;A6qZfsY4I2A=@_I`|vlZ-P$*p9DS`d z1wIXYI`|Cmnc%a)-v*xz{toyY@VVggz~2Rb4}3oO```<}7lJPWPXS*Hz6AUO@TK6( zz?Xxs0RIqtCHN}v)!=Ku*MhGDUk|`z_)^L1K$q*Z}1)9JHdB>?*`uk zz88ES_($OT!BfFM2LA;70QjfipMn1e{B!U$@PpuAfFA-s41NUsOYpD2kAfcqKMwvi z_zCcDz`q4Q3I1R3Q{bn;&wzgi{yq3v@E^c`1V0CU9{d9MMes}Dm%)DmzXE<0{AciM z;Mc)#fd2x16Z{r*Y!0Uq71FsL>0K6f1BXD={ z#^6oBn}Rn3Zw}r9+ylHNxF>ik@Ydj7;70H^;NIXq;J)B(!TrG7f%}8E2k!tL03HY) z1Re|?0^Sik6x;+J1|AOH3A{6S7x1p&-N3tp_Wn*t@kAHKI!#{50^$mJ%0%|{Svn=^z=4}(k3$>p-_X+-?3k>uQZ8l%-H{*)btX|?_ z6;Z9t$TFaiv;5^H=K}{U9%F4eu08g# i+cKF)bj)E-k9$?cV(%FzS4<0R*JA(K3n8l)eEmO2guF`t literal 0 HcmV?d00001 diff --git a/test/zstreamdump.return b/test/zstreamdump.return new file mode 100644 index 0000000..21da389 --- /dev/null +++ b/test/zstreamdump.return @@ -0,0 +1,2454 @@ +BEGIN record + hdrtype = 1 + features = 4 + magic = 2f5bacbac + creation_time = 5a292f66 + type = 2 + flags = 0x4 + toguid = 87e972f9210f5036 + fromguid = 0 + toname = pool@test + +FREEOBJECTS firstobj = 0 numobjs = 1 + checksum = 381aa65b0/1b721e19444/7288751f651c/14a7c079889d6b +OBJECT object = 1 type = 21 bonustype = 0 blksz = 1024 bonuslen = 0 + checksum = 5bcec4573/3655670126f/13892301ff29f/52b5419a4fbe1c +FREE object = 1 offset = 1024 length = -1 + checksum = a4405067f/658eafab954/2b0641d75efe8/e5e4727ed75fef +OBJECT object = 2 type = 45 bonustype = 0 blksz = 512 bonuslen = 0 + checksum = cb93376c0/a27a411674f/533af447c9672/213476dfc98435f +FREE object = 2 offset = 512 length = -1 + checksum = 12029e7922/f74049cc024/916f0de2d40fa/437e208751c6ada +OBJECT object = 3 type = 22 bonustype = 0 blksz = 512 bonuslen = 0 + checksum = 140a5d2c03/157c654b0af7/eb83d2275f11d/7cf3b6f97724bc2 +FREE object = 3 offset = 512 length = -1 + checksum = 17e4c46e4c/1c96e99ecd65/1657163026571e/d6a1d7d38bdedeb +OBJECT object = 4 type = 20 bonustype = 44 blksz = 512 bonuslen = 168 + 5a 50 2f 00 02 04 18 00 ed 41 00 00 00 00 00 00 ZP/. .... .A.. .... + 02 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 04 00 00 00 00 00 00 00 44 01 00 00 08 04 00 00 .... .... D... .... + f5 ae 28 5a 00 00 00 00 b8 55 99 1c 00 00 00 00 ..(Z .... .U.. .... + 29 99 26 5a 00 00 00 00 c0 bd 53 2e 00 00 00 00 ).&Z .... ..S. .... + 29 99 26 5a 00 00 00 00 c0 bd 53 2e 00 00 00 00 ).&Z .... ..S. .... + 29 99 26 5a 00 00 00 00 c0 bd 53 2e 00 00 00 00 ).&Z .... ..S. .... + 02 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 10 bf 01 1e 00 00 00 40 20 a9 00 12 00 .... .... ..@ .... + 00 00 00 40 a9 00 12 00 ...@ .... + checksum = 1ad2854662/24b25e318750/204b40652ead86/15b1b32b123eae21 +FREE object = 4 offset = 512 length = -1 + checksum = 21ba6f0044/339261c980b2/34e17525ef6802/296c18f8b20d0ed0 +OBJECT object = 5 type = 46 bonustype = 0 blksz = 1536 bonuslen = 0 + checksum = 24813def8f/3e9eaea45067/464a13f1a8f4ef/3c227958c386d7ec +FREE object = 5 offset = 1536 length = -1 + checksum = 2a4bb1c7c3/4b4e47f23bdc/5b4cfa614d6950/54b1a27317a7e0ff +OBJECT object = 6 type = 47 bonustype = 0 blksz = 16384 bonuslen = 0 + checksum = 2c565153fb/58bf35a0ec8a/744f9da03bfdae/74444ec839a45355 +FREE object = 6 offset = 32768 length = -1 + checksum = 30d9d6200a/6772073285b2/91987d17faf04e/9c1bfe6eb4bcc831 +OBJECT object = 7 type = 20 bonustype = 44 blksz = 512 bonuslen = 168 + 5a 50 2f 00 02 04 18 00 6d 41 00 00 00 00 00 00 ZP/. .... mA.. .... + 02 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 07 00 00 00 00 00 00 00 44 01 00 00 08 04 00 00 .... .... D... .... + 29 99 26 5a 00 00 00 00 e8 c8 57 2e 00 00 00 00 ).&Z .... ..W. .... + 29 99 26 5a 00 00 00 00 e8 c8 57 2e 00 00 00 00 ).&Z .... ..W. .... + 29 99 26 5a 00 00 00 00 e8 c8 57 2e 00 00 00 00 ).&Z .... ..W. .... + 29 99 26 5a 00 00 00 00 e8 c8 57 2e 00 00 00 00 ).&Z .... ..W. .... + 02 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 10 b9 01 1e 00 00 00 40 20 a9 00 12 00 .... .... ..@ .... + 00 00 00 40 a9 00 12 00 ...@ .... + checksum = 33cd3d42f1/7725341af1cc/b386b0f7c91376/cd958663a577bd12 +FREE object = 7 offset = 512 length = -1 + checksum = 3c75dbb84f/9280d0386e54/f1b347b8fc152a/2fed2204a2f8bf9e +FREEOBJECTS firstobj = 8 numobjs = 24 + checksum = 3ff1bcdf12/a5e907d46f86/121528592f5b527/80c44b637431ecbd +WRITE object = 1 type = 21 checksum type = 7 + offset = 0 length = 1024 props = f00000001 + 03 00 00 00 00 00 00 80 6b 70 3b 16 00 00 00 00 .... .... kp;. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6e 6f .... .... .... ..no + 72 6d 61 6c 69 7a 61 74 69 6f 6e 00 00 00 00 00 rmal izat ion. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 75 74 .... .... .... ..ut + 66 38 6f 6e 6c 79 00 00 00 00 00 00 00 00 00 00 f8on ly.. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 61 .... .... .... ..ca + 73 65 73 65 6e 73 69 74 69 76 69 74 79 00 00 00 sese nsit ivit y... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 05 00 00 00 00 00 00 00 00 00 00 00 00 00 56 45 .... .... .... ..VE + 52 53 49 4f 4e 00 00 00 00 00 00 00 00 00 00 00 RSIO N... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 02 00 00 00 00 00 00 00 00 00 00 00 00 00 53 41 .... .... .... ..SA + 5f 41 54 54 52 53 00 00 00 00 00 00 00 00 00 00 _ATT RS.. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 03 00 00 00 00 00 00 00 00 00 00 00 00 00 44 45 .... .... .... ..DE + 4c 45 54 45 5f 51 55 45 55 45 00 00 00 00 00 00 LETE _QUE UE.. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 04 00 00 00 00 00 00 00 00 00 00 00 00 00 52 4f .... .... .... ..RO + 4f 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 OT.. .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 07 00 00 00 00 00 00 00 00 00 00 00 00 00 53 48 .... .... .... ..SH + 41 52 45 53 00 00 00 00 00 00 00 00 00 00 00 00 ARES .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + checksum = 45769e7e88/bac14f97ccfd/1570e12da271e17/e10c637f6443e4af +FREE object = 1 offset = 1024 length = 2048 + checksum = 506524fcdb/120f9b9611788/28c8eaa120b03ce/5c89418d7023009e +WRITE object = 2 type = 45 checksum type = 2 + offset = 0 length = 512 props = 0 + 03 00 00 00 00 00 00 80 15 71 3b 16 00 00 00 00 .... .... .q;. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 05 00 00 00 00 00 00 00 00 00 00 00 00 00 52 45 .... .... .... ..RE + 47 49 53 54 52 59 00 00 00 00 00 00 00 00 00 00 GIST RY.. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 06 00 00 00 00 00 00 00 00 00 00 00 00 00 4c 41 .... .... .... ..LA + 59 4f 55 54 53 00 00 00 00 00 00 00 00 00 00 00 YOUT S... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + checksum = 530de8cc8d/13a349ca4e263/2e87ceb95fbcc14/3159f1137b5f1960 +FREE object = 2 offset = 512 length = 1024 + checksum = 576c903613/17ff729d2506c/40168ff1e153ac0/f63d015e703ba5bf +WRITE object = 3 type = 22 checksum type = 2 + offset = 0 length = 512 props = 0 + 03 00 00 00 00 00 00 80 bf 7f 3b 16 00 00 00 00 .... .... ..;. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + checksum = 5a347c4d09/19b5c81347662/47a9d9325f17653/412841e2b544afcb +FREE object = 3 offset = 512 length = 1024 + checksum = 5d4a3bfab5/1e60192fc0d06/5e3bf3d463e063b/69cd040eac9b1617 +WRITE object = 4 type = 20 checksum type = 2 + offset = 0 length = 512 props = 0 + 03 00 00 00 00 00 00 80 69 7c 3b 16 00 00 00 00 .... .... i|;. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + checksum = 6032f88db7/2033b64a9aab4/67c5363d1a458f7/4c822be4bf0d560b +WRITE object = 5 type = 46 checksum type = 7 + offset = 0 length = 1536 props = f00000002 + 03 00 00 00 00 00 00 80 bb 7b 3b 16 00 00 00 00 .... .... .{;. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 10 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 41 54 49 4d 45 00 00 00 00 00 00 00 00 00 L_AT IME. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 10 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 4d 54 49 4d 45 00 00 00 00 00 00 00 00 00 L_MT IME. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 02 00 00 10 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 43 54 49 4d 45 00 00 00 00 00 00 00 00 00 L_CT IME. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 03 00 00 10 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 43 52 54 49 4d 45 00 00 00 00 00 00 00 00 L_CR TIME .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 04 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 47 45 4e 00 00 00 00 00 00 00 00 00 00 00 L_GE N... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 05 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 4d 4f 44 45 00 00 00 00 00 00 00 00 00 00 L_MO DE.. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 06 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 53 49 5a 45 00 00 00 00 00 00 00 00 00 00 L_SI ZE.. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 07 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 50 41 52 45 4e 54 00 00 00 00 00 00 00 00 L_PA RENT .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 08 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 4c 49 4e 4b 53 00 00 00 00 00 00 00 00 00 L_LI NKS. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 09 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 58 41 54 54 52 00 00 00 00 00 00 00 00 00 L_XA TTR. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 0a 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 52 44 45 56 00 00 00 00 00 00 00 00 00 00 L_RD EV.. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 0b 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 46 4c 41 47 53 00 00 00 00 00 00 00 00 00 L_FL AGS. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 0c 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 55 49 44 00 00 00 00 00 00 00 00 00 00 00 L_UI D... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 0d 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 47 49 44 00 00 00 00 00 00 00 00 00 00 00 L_GI D... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 0e 00 00 20 00 00 00 00 00 00 00 00 00 00 5a 50 ... .... .... ..ZP + 4c 5f 50 41 44 00 00 00 00 00 00 00 00 00 00 00 L_PA D... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 0f 00 03 58 00 00 00 00 00 00 00 00 00 00 5a 50 ...X .... .... ..ZP + 4c 5f 5a 4e 4f 44 45 5f 41 43 4c 00 00 00 00 00 L_ZN ODE_ ACL. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 10 00 00 08 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 44 41 43 4c 5f 43 4f 55 4e 54 00 00 00 00 L_DA CL_C OUNT .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 11 00 03 00 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 53 59 4d 4c 49 4e 4b 00 00 00 00 00 00 00 L_SY MLIN K... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 12 00 03 20 00 00 00 00 00 00 00 00 00 00 5a 50 ... .... .... ..ZP + 4c 5f 53 43 41 4e 53 54 41 4d 50 00 00 00 00 00 L_SC ANST AMP. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 13 00 04 00 00 00 00 00 00 00 00 00 00 00 5a 50 .... .... .... ..ZP + 4c 5f 44 41 43 4c 5f 41 43 45 53 00 00 00 00 00 L_DA CL_A CES. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + checksum = 662582172c/253a75cba4cb8/83b3c9028adafac/34e7afeea59c41ad +FREE object = 5 offset = 1536 length = 3072 + checksum = 78abbd52bb/320a68f5e30f0/d224e0dd3b3632a/46ff54d96fd28804 +WRITE object = 6 type = 47 checksum type = 7 + offset = 0 length = 16384 props = f0000001f + 01 00 00 00 00 00 00 80 ab b2 2a f5 02 00 00 00 .... .... ..*. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 55 78 3b 16 00 00 00 00 00 00 00 00 00 00 00 00 Ux;. .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 .... .... .... .... + checksum = 7dfb7ef1e6/346c850a66cff/e1c1bae876bd248/6db2a21534859f8a +WRITE object = 6 type = 47 checksum type = 7 + offset = 16384 length = 16384 props = f0006001f + 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 af 1e ab 02 7a 02 01 00 .... .... .... z... + 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 00 .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff .... .... .... .... + fc 02 ff ff 01 00 02 00 02 00 0e 00 00 00 00 00 .... .... .... .... + 00 00 00 00 d0 d0 fb a3 fb 32 00 00 00 00 00 00 .... .... .2.. .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff .... .... .... .... + fb 00 05 00 06 00 04 00 0c 00 0d 00 07 00 0b 00 .... .... .... .... + 00 00 01 00 02 00 03 00 fb 03 00 08 00 10 00 13 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 05 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 07 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 09 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0a 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0b 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0d 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0f 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 11 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 13 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 15 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 16 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 17 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 19 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1a 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1b 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1c 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1d 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1e 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1f 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 .... .... .... .. . + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 21 00 fd 00 00 00 00 00 00 00 .... ..!. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 00 .... .... .... ..". + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 23 00 fd 00 00 00 00 00 00 00 .... ..#. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 00 .... .... .... ..$. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 25 00 fd 00 00 00 00 00 00 00 .... ..%. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 00 .... .... .... ..&. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 27 00 fd 00 00 00 00 00 00 00 .... ..'. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 00 .... .... .... ..(. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 29 00 fd 00 00 00 00 00 00 00 .... ..). .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2a 00 .... .... .... ..*. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2b 00 fd 00 00 00 00 00 00 00 .... ..+. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2c 00 .... .... .... ..,. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2d 00 fd 00 00 00 00 00 00 00 .... ..-. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2e 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2f 00 fd 00 00 00 00 00 00 00 .... ../. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 .... .... .... ..0. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 31 00 fd 00 00 00 00 00 00 00 .... ..1. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 00 .... .... .... ..2. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 33 00 fd 00 00 00 00 00 00 00 .... ..3. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 00 .... .... .... ..4. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 35 00 fd 00 00 00 00 00 00 00 .... ..5. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 00 .... .... .... ..6. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 37 00 fd 00 00 00 00 00 00 00 .... ..7. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 00 .... .... .... ..8. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 39 00 fd 00 00 00 00 00 00 00 .... ..9. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 .... .... .... ..:. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3b 00 fd 00 00 00 00 00 00 00 .... ..;. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3c 00 .... .... .... ..<. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3d 00 fd 00 00 00 00 00 00 00 .... ..=. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3e 00 .... .... .... ..>. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3f 00 fd 00 00 00 00 00 00 00 .... ..?. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 .... .... .... ..@. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 41 00 fd 00 00 00 00 00 00 00 .... ..A. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 00 .... .... .... ..B. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 43 00 fd 00 00 00 00 00 00 00 .... ..C. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 00 .... .... .... ..D. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 45 00 fd 00 00 00 00 00 00 00 .... ..E. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 46 00 .... .... .... ..F. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 47 00 fd 00 00 00 00 00 00 00 .... ..G. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 00 .... .... .... ..H. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 49 00 fd 00 00 00 00 00 00 00 .... ..I. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4a 00 .... .... .... ..J. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4b 00 fd 00 00 00 00 00 00 00 .... ..K. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4c 00 .... .... .... ..L. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4d 00 fd 00 00 00 00 00 00 00 .... ..M. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4e 00 .... .... .... ..N. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4f 00 fd 00 00 00 00 00 00 00 .... ..O. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 00 .... .... .... ..P. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 51 00 fd 00 00 00 00 00 00 00 .... ..Q. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 00 .... .... .... ..R. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 53 00 fd 00 00 00 00 00 00 00 .... ..S. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 .... .... .... ..T. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 55 00 fd 00 00 00 00 00 00 00 .... ..U. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 00 .... .... .... ..V. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 57 00 fd 00 00 00 00 00 00 00 .... ..W. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 58 00 .... .... .... ..X. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 59 00 fd 00 00 00 00 00 00 00 .... ..Y. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5a 00 .... .... .... ..Z. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5b 00 fd 00 00 00 00 00 00 00 .... ..[. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5c 00 .... .... .... ..\. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5d 00 fd 00 00 00 00 00 00 00 .... ..]. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5e 00 .... .... .... ..^. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5f 00 fd 00 00 00 00 00 00 00 .... .._. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 00 .... .... .... ..`. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 61 00 fd 00 00 00 00 00 00 00 .... ..a. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 00 .... .... .... ..b. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 63 00 fd 00 00 00 00 00 00 00 .... ..c. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 .... .... .... ..d. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 65 00 fd 00 00 00 00 00 00 00 .... ..e. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 66 00 .... .... .... ..f. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 67 00 fd 00 00 00 00 00 00 00 .... ..g. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 68 00 .... .... .... ..h. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 69 00 fd 00 00 00 00 00 00 00 .... ..i. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 00 .... .... .... ..j. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6b 00 fd 00 00 00 00 00 00 00 .... ..k. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 00 .... .... .... ..l. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6d 00 fd 00 00 00 00 00 00 00 .... ..m. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6e 00 .... .... .... ..n. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6f 00 fd 00 00 00 00 00 00 00 .... ..o. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 00 .... .... .... ..p. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 71 00 fd 00 00 00 00 00 00 00 .... ..q. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 00 .... .... .... ..r. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 73 00 fd 00 00 00 00 00 00 00 .... ..s. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74 00 .... .... .... ..t. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 75 00 fd 00 00 00 00 00 00 00 .... ..u. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 00 .... .... .... ..v. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 77 00 fd 00 00 00 00 00 00 00 .... ..w. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 78 00 .... .... .... ..x. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 79 00 fd 00 00 00 00 00 00 00 .... ..y. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7a 00 .... .... .... ..z. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 7b 00 fd 00 00 00 00 00 00 00 .... ..{. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7c 00 .... .... .... ..|. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 7d 00 fd 00 00 00 00 00 00 00 .... ..}. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 00 .... .... .... ..~. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 7f 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 81 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 82 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 83 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 84 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 85 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 86 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 87 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 88 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 89 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 8b 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8c 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 8d 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8e 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 8f 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 91 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 92 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 93 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 94 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 95 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 96 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 97 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 98 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 99 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9a 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 9b 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9c 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 9d 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9e 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 9f 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a1 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a2 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a3 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a4 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a5 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a6 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a7 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a8 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a9 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 aa 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ab 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ac 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ad 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ae 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 af 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b0 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b1 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b2 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b3 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b4 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b5 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b6 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b7 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b8 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b9 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ba 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 bb 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bc 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 bd 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 be 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 bf 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c1 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c2 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c3 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c4 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c5 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c6 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c7 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c8 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c9 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ca 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 cb 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 cc 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 cd 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ce 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 cf 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d0 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d1 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d2 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d3 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d4 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d5 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d6 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d7 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d9 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 da 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 db 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 dc 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 dd 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 de 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 df 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e1 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e2 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e3 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e4 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e5 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e6 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e7 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e8 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e9 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ea 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 eb 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ec 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ed 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ee 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ef 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f1 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f2 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f3 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f4 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f5 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f6 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f7 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f8 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f9 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fa 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 fb 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fc 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 fd 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fe 00 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ff 00 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 01 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 03 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 05 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 07 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 09 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0b 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0d 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0f 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 11 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 13 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 15 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 16 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 17 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 19 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1a 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1b 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1c 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1d 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1e 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1f 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 01 .... .... .... .. . + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 21 01 fd 00 00 00 00 00 00 00 .... ..!. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 01 .... .... .... ..". + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 23 01 fd 00 00 00 00 00 00 00 .... ..#. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 01 .... .... .... ..$. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 25 01 fd 00 00 00 00 00 00 00 .... ..%. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 01 .... .... .... ..&. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 27 01 fd 00 00 00 00 00 00 00 .... ..'. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 01 .... .... .... ..(. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 29 01 fd 00 00 00 00 00 00 00 .... ..). .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2a 01 .... .... .... ..*. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2b 01 fd 00 00 00 00 00 00 00 .... ..+. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2c 01 .... .... .... ..,. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2d 01 fd 00 00 00 00 00 00 00 .... ..-. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2e 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2f 01 fd 00 00 00 00 00 00 00 .... ../. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 01 .... .... .... ..0. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 31 01 fd 00 00 00 00 00 00 00 .... ..1. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 01 .... .... .... ..2. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 33 01 fd 00 00 00 00 00 00 00 .... ..3. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 01 .... .... .... ..4. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 35 01 fd 00 00 00 00 00 00 00 .... ..5. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 01 .... .... .... ..6. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 37 01 fd 00 00 00 00 00 00 00 .... ..7. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 01 .... .... .... ..8. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 39 01 fd 00 00 00 00 00 00 00 .... ..9. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 01 .... .... .... ..:. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3b 01 fd 00 00 00 00 00 00 00 .... ..;. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3c 01 .... .... .... ..<. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3d 01 fd 00 00 00 00 00 00 00 .... ..=. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3e 01 .... .... .... ..>. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3f 01 fd 00 00 00 00 00 00 00 .... ..?. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 01 .... .... .... ..@. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 41 01 fd 00 00 00 00 00 00 00 .... ..A. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 01 .... .... .... ..B. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 43 01 fd 00 00 00 00 00 00 00 .... ..C. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 01 .... .... .... ..D. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 45 01 fd 00 00 00 00 00 00 00 .... ..E. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 46 01 .... .... .... ..F. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 47 01 fd 00 00 00 00 00 00 00 .... ..G. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 01 .... .... .... ..H. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 49 01 fd 00 00 00 00 00 00 00 .... ..I. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4a 01 .... .... .... ..J. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4b 01 fd 00 00 00 00 00 00 00 .... ..K. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4c 01 .... .... .... ..L. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4d 01 fd 00 00 00 00 00 00 00 .... ..M. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4e 01 .... .... .... ..N. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4f 01 fd 00 00 00 00 00 00 00 .... ..O. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 01 .... .... .... ..P. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 51 01 fd 00 00 00 00 00 00 00 .... ..Q. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 01 .... .... .... ..R. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 53 01 fd 00 00 00 00 00 00 00 .... ..S. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 01 .... .... .... ..T. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 55 01 fd 00 00 00 00 00 00 00 .... ..U. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 01 .... .... .... ..V. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 57 01 fd 00 00 00 00 00 00 00 .... ..W. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 58 01 .... .... .... ..X. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 59 01 fd 00 00 00 00 00 00 00 .... ..Y. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5a 01 .... .... .... ..Z. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5b 01 fd 00 00 00 00 00 00 00 .... ..[. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5c 01 .... .... .... ..\. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5d 01 fd 00 00 00 00 00 00 00 .... ..]. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5e 01 .... .... .... ..^. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5f 01 fd 00 00 00 00 00 00 00 .... .._. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 01 .... .... .... ..`. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 61 01 fd 00 00 00 00 00 00 00 .... ..a. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 01 .... .... .... ..b. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 63 01 fd 00 00 00 00 00 00 00 .... ..c. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 01 .... .... .... ..d. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 65 01 fd 00 00 00 00 00 00 00 .... ..e. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 66 01 .... .... .... ..f. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 67 01 fd 00 00 00 00 00 00 00 .... ..g. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 68 01 .... .... .... ..h. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 69 01 fd 00 00 00 00 00 00 00 .... ..i. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 01 .... .... .... ..j. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6b 01 fd 00 00 00 00 00 00 00 .... ..k. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 01 .... .... .... ..l. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6d 01 fd 00 00 00 00 00 00 00 .... ..m. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6e 01 .... .... .... ..n. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6f 01 fd 00 00 00 00 00 00 00 .... ..o. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 01 .... .... .... ..p. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 71 01 fd 00 00 00 00 00 00 00 .... ..q. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 01 .... .... .... ..r. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 73 01 fd 00 00 00 00 00 00 00 .... ..s. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74 01 .... .... .... ..t. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 75 01 fd 00 00 00 00 00 00 00 .... ..u. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 01 .... .... .... ..v. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 77 01 fd 00 00 00 00 00 00 00 .... ..w. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 78 01 .... .... .... ..x. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 79 01 fd 00 00 00 00 00 00 00 .... ..y. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7a 01 .... .... .... ..z. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 7b 01 fd 00 00 00 00 00 00 00 .... ..{. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7c 01 .... .... .... ..|. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 7d 01 fd 00 00 00 00 00 00 00 .... ..}. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7e 01 .... .... .... ..~. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 7f 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 81 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 82 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 83 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 84 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 85 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 86 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 87 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 88 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 89 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8a 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 8b 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8c 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 8d 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8e 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 8f 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 91 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 92 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 93 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 94 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 95 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 96 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 97 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 98 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 99 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9a 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 9b 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9c 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 9d 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 9e 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 9f 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a0 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a1 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a2 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a3 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a4 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a5 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a6 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a7 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a8 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 a9 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 aa 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ab 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ac 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ad 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ae 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 af 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b0 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b1 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b2 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b3 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b4 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b5 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b6 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b7 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b8 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 b9 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ba 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 bb 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bc 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 bd 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 be 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 bf 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c1 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c2 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c3 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c4 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c5 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c6 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c7 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c8 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 c9 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ca 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 cb 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 cc 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 cd 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ce 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 cf 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d0 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d1 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d2 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d3 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d4 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d5 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d6 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d7 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 d9 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 da 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 db 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 dc 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 dd 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 de 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 df 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e1 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e2 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e3 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e4 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e5 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e6 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e7 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e8 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 e9 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ea 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 eb 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ec 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ed 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ee 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ef 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f1 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f2 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f3 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f4 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f5 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f6 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f7 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f8 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 f9 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fa 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 fb 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fc 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 fd 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fe 01 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 ff 01 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 01 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 03 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 05 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 07 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 09 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0a 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0b 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0d 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0e 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 0f 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 11 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 13 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 15 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 16 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 17 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 19 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1a 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1b 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1c 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1d 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1e 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 1f 02 fd 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 02 .... .... .... .. . + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 21 02 fd 00 00 00 00 00 00 00 .... ..!. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 02 .... .... .... ..". + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 23 02 fd 00 00 00 00 00 00 00 .... ..#. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 02 .... .... .... ..$. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 25 02 fd 00 00 00 00 00 00 00 .... ..%. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 02 .... .... .... ..&. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 27 02 fd 00 00 00 00 00 00 00 .... ..'. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 02 .... .... .... ..(. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 29 02 fd 00 00 00 00 00 00 00 .... ..). .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2a 02 .... .... .... ..*. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2b 02 fd 00 00 00 00 00 00 00 .... ..+. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2c 02 .... .... .... ..,. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2d 02 fd 00 00 00 00 00 00 00 .... ..-. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2e 02 .... .... .... .... + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 2f 02 fd 00 00 00 00 00 00 00 .... ../. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 02 .... .... .... ..0. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 31 02 fd 00 00 00 00 00 00 00 .... ..1. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 02 .... .... .... ..2. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 33 02 fd 00 00 00 00 00 00 00 .... ..3. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 02 .... .... .... ..4. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 35 02 fd 00 00 00 00 00 00 00 .... ..5. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 02 .... .... .... ..6. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 37 02 fd 00 00 00 00 00 00 00 .... ..7. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 02 .... .... .... ..8. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 39 02 fd 00 00 00 00 00 00 00 .... ..9. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 02 .... .... .... ..:. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3b 02 fd 00 00 00 00 00 00 00 .... ..;. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3c 02 .... .... .... ..<. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3d 02 fd 00 00 00 00 00 00 00 .... ..=. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3e 02 .... .... .... ..>. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 3f 02 fd 00 00 00 00 00 00 00 .... ..?. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 02 .... .... .... ..@. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 41 02 fd 00 00 00 00 00 00 00 .... ..A. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 02 .... .... .... ..B. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 43 02 fd 00 00 00 00 00 00 00 .... ..C. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 02 .... .... .... ..D. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 45 02 fd 00 00 00 00 00 00 00 .... ..E. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 46 02 .... .... .... ..F. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 47 02 fd 00 00 00 00 00 00 00 .... ..G. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 02 .... .... .... ..H. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 49 02 fd 00 00 00 00 00 00 00 .... ..I. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4a 02 .... .... .... ..J. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4b 02 fd 00 00 00 00 00 00 00 .... ..K. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4c 02 .... .... .... ..L. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4d 02 fd 00 00 00 00 00 00 00 .... ..M. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4e 02 .... .... .... ..N. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 4f 02 fd 00 00 00 00 00 00 00 .... ..O. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 02 .... .... .... ..P. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 51 02 fd 00 00 00 00 00 00 00 .... ..Q. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 02 .... .... .... ..R. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 53 02 fd 00 00 00 00 00 00 00 .... ..S. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 02 .... .... .... ..T. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 55 02 fd 00 00 00 00 00 00 00 .... ..U. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 02 .... .... .... ..V. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 57 02 fd 00 00 00 00 00 00 00 .... ..W. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 58 02 .... .... .... ..X. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 59 02 fd 00 00 00 00 00 00 00 .... ..Y. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5a 02 .... .... .... ..Z. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5b 02 fd 00 00 00 00 00 00 00 .... ..[. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5c 02 .... .... .... ..\. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5d 02 fd 00 00 00 00 00 00 00 .... ..]. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5e 02 .... .... .... ..^. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 5f 02 fd 00 00 00 00 00 00 00 .... .._. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 02 .... .... .... ..`. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 61 02 fd 00 00 00 00 00 00 00 .... ..a. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 02 .... .... .... ..b. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 63 02 fd 00 00 00 00 00 00 00 .... ..c. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 02 .... .... .... ..d. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 65 02 fd 00 00 00 00 00 00 00 .... ..e. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 66 02 .... .... .... ..f. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 67 02 fd 00 00 00 00 00 00 00 .... ..g. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 68 02 .... .... .... ..h. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 69 02 fd 00 00 00 00 00 00 00 .... ..i. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 02 .... .... .... ..j. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6b 02 fd 00 00 00 00 00 00 00 .... ..k. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6c 02 .... .... .... ..l. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6d 02 fd 00 00 00 00 00 00 00 .... ..m. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6e 02 .... .... .... ..n. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 6f 02 fd 00 00 00 00 00 00 00 .... ..o. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 02 .... .... .... ..p. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 71 02 fd 00 00 00 00 00 00 00 .... ..q. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 02 .... .... .... ..r. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 73 02 fd 00 00 00 00 00 00 00 .... ..s. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 74 02 .... .... .... ..t. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 75 02 fd 00 00 00 00 00 00 00 .... ..u. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 02 .... .... .... ..v. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 77 02 fd 00 00 00 00 00 00 00 .... ..w. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 78 02 .... .... .... ..x. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 79 02 fd 00 00 00 00 00 00 00 .... ..y. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7a 02 .... .... .... ..z. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 7b 02 fd 00 00 00 00 00 00 00 .... ..{. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7c 02 .... .... .... ..|. + fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 7d 02 fd 00 00 00 00 00 00 00 .... ..}. .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff .... .... .... .... + checksum = 851e69199e/b8fa0d421fdee/87104959a7a25525/4a6673dd838a0847 +FREE object = 6 offset = 32768 length = 16384 + checksum = 19012360dc0/2436c5d401768e/7b48838de8cccf2/9ec34c32efd58631 +WRITE object = 7 type = 20 checksum type = 2 + offset = 0 length = 512 props = 0 + 03 00 00 00 00 00 00 80 7f 84 bb 08 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .... .... .... .... + checksum = 1941664b73f/24b1c8fdc853a4/12d02fe3798cc563/ad95739fa1751d53 +FREEOBJECTS firstobj = 32 numobjs = 36028797018963936 + checksum = 19938524368/25fa18282a107e/30dbd70b94794227/e51b83bae556a347 +FREEOBJECTS firstobj = 0 numobjs = 0 + checksum = 19cd1b49663/2677c70ced089d/3c816b8ad9e2c3c0/932a70fd2b925f39 +END checksum = 19f859dae46/2684b97de385af/3db563fa518df47e/7c9f674de2a0e61f + checksum = 1a320c1d1ab/26f73b3dcc6e69/484d8ca5d78e439f/d39ba950e3debf3a +SUMMARY: + Total DRR_BEGIN records = 1 + Total DRR_END records = 1 + Total DRR_OBJECT records = 7 + Total DRR_FREEOBJECTS records = 4 + Total DRR_WRITE records = 8 + Total DRR_WRITE_BYREF records = 0 + Total DRR_WRITE_EMBEDDED records = 0 + Total DRR_FREE records = 12 + Total DRR_SPILL records = 0 + Total records = 33 + Total write size = 37376 (0x9200) + Total stream length = 48008 (0xbb88)