Subject: scan_ffs from OpenBSD ported and improved.
To: None <tech-userlevel@netbsd.org>
From: Juan RP <juan@xtrarom.org>
List: tech-userlevel
Date: 06/06/2005 13:44:01
This is a multi-part message in MIME format.
--Multipart=_Mon__6_Jun_2005_13_44_01_+0200_hmEPe4=MspT6ruDy
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Hi, finally I've fixed all problems I had reported in my previous email
"Porting scan_ffs from OpenBSD", the following is the example of
this utility to find FFSv2 partitions with different blocksizes:
disklabel output:
6 partitions:
# size offset fstype [fsize bsize cpg/sgs]
a: 20480 0 4.2BSD 512 4096 5120 # (Cyl. 0 - 9)
b: 1208320 20480 4.2BSD 1024 8192 46480 # (Cyl. 10 - 599)
c: 2097152 1228800 4.2BSD 2048 16384 21848 # (Cyl. 600 - 1623)
d: 8388608 0 unused 0 0 # (Cyl. 0 - 4095)
e: 2097152 3325952 4.2BSD 4096 32768 0 # (Cyl. 1624 - 2647)
f: 2965504 5423104 4.2BSD 8192 65536 46336 # (Cyl. 2648 - 4095)
scanffs output (scanffs -l sd0):
Disk: mydisk
Total sectors on disk: 8388608
# size offset fstype [fsize bsize cpg]
X: 20480 0 4.2BSD 512 4096 0 # /mnt/scsia [FFSv2]
X: 1208320 20480 4.2BSD 1024 8192 0 # /mnt/scsib [FFSv2]
X: 2097152 1228800 4.2BSD 2048 16384 0 # /mnt/scsic [FFSv2]
X: 2097152 3325952 4.2BSD 4096 32768 0 # /mnt/scsie [FFSv2]
X: 2965504 5423104 4.2BSD 8192 65536 0 # /mnt/scsif [FFSv2]
Please test and review, I'd want to commit this on the next days if there isn't
any objection.
Thanks.
--Multipart=_Mon__6_Jun_2005_13_44_01_+0200_hmEPe4=MspT6ruDy
Content-Type: application/octet-stream;
name="scanffs.c"
Content-Disposition: attachment;
filename="scanffs.c"
Content-Transfer-Encoding: base64
LyogICAgICBPcGVuQlNEOiBzY2FuX2Zmcy5jLHYgMS4xMSAyMDA0LzAyLzE2IDE5OjEzOjAzIGRl
cmFhZHQgRXhwCSovCi8qCSROZXRCU0QkCSovCgovKgogKiBDb3B5cmlnaHQgKGMpIDIwMDUgSnVh
biBSb21lcm8gUGFyZGluZXMKICogQ29weXJpZ2h0IChjKSAxOTk4IE5pa2xhcyBIYWxscXZpc3Qs
IFRvYmlhcyBXZWluZ2FydG5lcgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCiAqIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKICog
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCiAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwoKLyoKICogQ3VycmVu
dGx5IGl0IGNhbiBkZXRlY3Q6CiAqIAlvIEZGU3YxIHdpdGggZnJhZ3NpemUvYmxvY2tzaXplOiA1
MTIvNDA5NiwgMTAyNC84MTkyLCAyMDQ4LzE2Mzg0LgogKglvIEZGU3YyIHdpdGggZnJhZ3NpemUv
YmxvY2tzaXplOiA1MTIvNDA5NiwgMTAyNC84MTkyLCAyMDQ4LzE2Mzg0LAogKgkgIAkJCQkgNDA5
Ni8zMjc2OCwgODE5Mi82NTUzNi4KICogVE9ETzoKICoJbyBEZXRlY3QgRkZTdjEgcGFydGl0aW9u
cyB3aXRoIGZzaXplL2JzaXplID4gMjA0OC8xNjM4NC4KICoJbyBEZXRlY3QgRkZTdjIgcGFydGl0
aW9ucyB3aXRoIGZzaXplL2JzaXplID4gODE5Mi82NTUzNi4KICovCiAKI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPgojaWZuZGVmIGxpbnQKX19SQ1NJRCgiJE5ldEJTRCQiKTsKI2VuZGlmIC8qIG5vdCBs
aW50ICovCgojaW5jbHVkZSA8c3lzL2Rpc2tsYWJlbC5oPgojaW5jbHVkZSA8c3lzL2RraW8uaD4K
I2luY2x1ZGUgPHN5cy9pb2N0bC5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KI2luY2x1ZGUgPHN5cy9mY250bC5oPgojaW5jbHVkZSA8dWZzL2Zmcy9mcy5o
PgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0ZGlv
Lmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPGVyci5o
PgojaW5jbHVkZSA8dXRpbC5oPgoKI2RlZmluZSBWRVJCT1NFCTEKI2RlZmluZSBMQUJFTFMJMgoj
ZGVmaW5lIFNCQ09VTlQJNjQgLyogWFhYIHNob3VsZCBiZSBjb25maWd1cmFibGUgKi8KCnZvaWQJ
cHJpbnRwYXJ0KGludCwgaW50KTsKdm9pZAl1ZnNtYWdpYyh2b2lkKTsKdm9pZAl1c2FnZSh2b2lk
KTsKaW50CWNoZWNrZnN0eXBlKHZvaWQpOwppbnQJdWZzc2NhbihpbnQsIGRhZGRyX3QsIGRhZGRy
X3QsIGludCk7CgpjaGFyCWxhc3Rtb3VudFtNQVhNTlRMRU5dOwpjaGFyCWRldmljZVtNQVhQQVRI
TEVOXTsKY29uc3QJY2hhciAqZnN0eXBlID0gTlVMTDsKCmludCAJZWZsYWcgPSAwOwppbnQJZmxh
Z3MgPSAwOwppbnQJZnNpemU7CmludAlmc3J2ID0gMDsKaW50CW47CgpkYWRkcl90CWJsaywgbGFz
dGJsazsKCnN0cnVjdCBmcyAqc2I7CgppbnQgY2hlY2tmc3R5cGUodm9pZCkKewoJaW50IHJ2YWw7
CgoJc3dpdGNoIChzYi0+ZnNfbWFnaWMpIHsKCQljYXNlIEZTX1VGUzFfTUFHSUM6CgkJY2FzZSBG
U19VRlMxX01BR0lDX1NXQVBQRUQ6CgkJCXNiLT5mc19zaXplID0gc2ItPmZzX29sZF9zaXplOwoJ
CQlydmFsID0gMTsKCQkJZnN0eXBlID0gIkZGU3YxIjsKCQkJYnJlYWs7CgkJY2FzZSBGU19VRlMy
X01BR0lDOgoJCWNhc2UgRlNfVUZTMl9NQUdJQ19TV0FQUEVEOgoJCQlydmFsID0gMjsKCQkJZnN0
eXBlID0gIkZGU3YyIjsKCQkJYnJlYWs7CgkJZGVmYXVsdDoKCQkJcnZhbCA9IC0xOwoJCQkvKiBO
T1RSRUFDSEVEICovCgl9CglyZXR1cm4gcnZhbDsKfQoKdm9pZApwcmludHBhcnQoaW50IGZsYWcs
IGludCBmZnNpemUpCnsKCglpZiAoZmxhZyA9PSBWRVJCT1NFKSB7CgkJcHJpbnRmKCJibG9jazog
JSIgUFJJdTY0IiAiCgkJCSJpZCAleCwleCBzaXplICUiIFBSSXU2NCJcbiIsCgkJCWJsaysobi81
MTIpLCBzYi0+ZnNfaWRbMF0sCgkJCXNiLT5mc19pZFsxXSwgc2ItPmZzX3NpemUpOwoJfSBlbHNl
IGlmIChmbGFnID09IExBQkVMUykgewoJCXByaW50ZigiWDogICU5IiBQUkl1NjQgIiIsCgkJCShk
YWRkcl90KSgob2ZmX3Qpc2ItPmZzX3NpemUqc2ItPmZzX2ZzaXplLzUxMikpOwoJCWlmIChmc3J2
ID09IDEpCS8qIEZGU3YxICovCgkJCXByaW50ZigiICU5IiBQUkl1NjQgIiIsCgkJCQlibGsrKG4v
NTEyKS0oMipTQkxPQ0tTSVpFLzUxMikpOwoJCWVsc2UgaWYgKGZzcnYgPT0gMikJLyogRkZTdjIg
Ki8KCQkJcHJpbnRmKCIgJTkiIFBSSXU2NCAiIiwKCQkJCWJsaysobi81MTIpLShmZnNpemUqU0JM
T0NLU0laRS81MTIrMTI4KSk7CgkJcHJpbnRmKCIgNC4yQlNEICU2ZCAlNWQlNGQgIyAlcyBbJXNd
XG4iLAoJCQlzYi0+ZnNfZnNpemUsIHNiLT5mc19ic2l6ZSwKCQkJc2ItPmZzX29sZF9jcGcsIGxh
c3Rtb3VudCwgZnN0eXBlKTsKCX0gZWxzZSB7CgkJcHJpbnRmKCIlcyAiLCBmc3R5cGUpOwoJCWlm
IChmc3J2ID09IDEpCS8qIEZGU3YxICovCgkJCXByaW50ZigiYXQgJSIgUFJJdTY0ICIiLAoJCQkJ
YmxrKyhuLzUxMiktKDIqU0JMT0NLU0laRS81MTIpKTsKCQllbHNlIGlmIChmc3J2ID09IDIpCS8q
IEZGU3YyICovCgkJCXByaW50ZigiYXQgJSIgUFJJdTY0ICIiLAoJCQkJYmxrKyhuLzUxMiktKGZm
c2l6ZSpTQkxPQ0tTSVpFLzUxMisxMjgpKTsKCQlwcmludGYoIiBzaXplICUiIFBSSXU2NCAiLCBs
YXN0IG1vdW50ZWQgb24gJXNcbiIsCgkJCShkYWRkcl90KSgob2ZmX3Qpc2ItPmZzX3NpemUqc2It
PmZzX2ZzaXplLzUxMiksCgkJCWxhc3Rtb3VudCk7Cgl9Cn0KCnZvaWQKdWZzbWFnaWModm9pZCkK
ewoJLyogCgkgKiBGSVhNRToKCSAqIEl0IGNhbm5vdCBmaW5kIEZGU3YxIHBhcnRpdGlvbnMgd2l0
aCBmc2l6ZS9ic2l6ZSA+IDIwNDgvMTYzODQsCgkgKiBzYW1lIHByb2JsZW0gZm91bmQgaW4gdGhl
IG9yaWdpbmFsIHByb2dyYW0gdGhhdCBjb21lcyBmcm9tCgkgKiBPcGVuQlNEIChzY2FuX2Zmcygx
KSkuCgkgKi8KCWlmIChmbGFncyAmIFZFUkJPU0UpCgkJcHJpbnRwYXJ0KFZFUkJPU0UsIDApOwoJ
aWYgKGZzcnYgPT0gMSkgewkvKiBGRlN2MSAqLwoJCWlmICgoKGJsaysobi81MTIpKS1sYXN0Ymxr
KSA9PSAoU0JMT0NLU0laRS81MTIpKSB7CgkJCWlmIChmbGFncyAmIExBQkVMUykKCQkJCXByaW50
cGFydChMQUJFTFMsIDApOwoJCQllbHNlCgkJCQlwcmludHBhcnQoMCwgMCk7CgkJfQoJfSBlbHNl
IGlmIChmc3J2ID09IDIpIHsJLyogRkZTdjIgKi8KCS8qCgkgKiBUaGF0IGNoZWNrcyBmb3IgRkZT
djIgcGFydGl0aW9ucyB3aXRoIGZyYWdzaXplL2Jsb2Nrc2l6ZToKCSAqIDUxMi80MDk2LCAxMDI0
LzgxOTIsIDIwNDgvMTYzODQsIDQwOTYvMzI3NjggYW5kIDgxOTIvNjU1MzYuCgkgKiBSZWFsbHkg
ZW5vdWdoIGZvciBub3cuCgkgKi8KCQlpZiAoKChibGsrKG4vNTEyKSktbGFzdGJsaykgPT0gKDEq
U0JMT0NLU0laRS81MTIpKSB7CgkJCWlmIChmbGFncyAmIExBQkVMUykKCQkJCXByaW50cGFydChM
QUJFTFMsIDEpOwoJCQllbHNlCgkJCQlwcmludHBhcnQoMCwgMSk7CgkJfSBlbHNlIGlmICgoKGJs
aysobi81MTIpKS1sYXN0YmxrKSA9PSAoMipTQkxPQ0tTSVpFLzUxMikpIHsKCQkJaWYgKGZsYWdz
ICYgTEFCRUxTKQoJCQkJcHJpbnRwYXJ0KExBQkVMUywgMik7CgkJCWVsc2UKCQkJCXByaW50cGFy
dCgwLCAyKTsKCQl9IGVsc2UgaWYgKCgoYmxrKyhuLzUxMikpLWxhc3RibGspID09ICg0KlNCTE9D
S1NJWkUvNTEyKSkgewoJCQlpZiAoZmxhZ3MgJiBMQUJFTFMpCgkJCQlwcmludHBhcnQoTEFCRUxT
LCA0KTsKCQkJZWxzZQoJCQkJcHJpbnRwYXJ0KDAsIDQpOwoJCX0gZWxzZSBpZiAoKChibGsrKG4v
NTEyKSktbGFzdGJsaykgPT0gKDgqU0JMT0NLU0laRS81MTIpKSB7CgkJCWlmIChmbGFncyAmIExB
QkVMUykKCQkJCXByaW50cGFydChMQUJFTFMsIDgpOwoJCQllbHNlCgkJCQlwcmludHBhcnQoMCwg
OCk7CgkJfQoJfQp9CgppbnQKdWZzc2NhbihpbnQgZmQsIGRhZGRyX3QgYmVnLCBkYWRkcl90IGVu
ZCwgaW50IGZmbGFncykKewoJdV9pbnQ4X3QgYnVmW1NCTE9DS1NJWkUgKiBTQkNPVU5UXTsKCWxh
c3RibGsgPSAtMTsKCW1lbXNldChsYXN0bW91bnQsIDAsIE1BWE1OVExFTik7CgoJaWYgKGZmbGFn
cyAmIExBQkVMUykKCQlwcmludGYoIiMgICAgICAgIHNpemUgICAgb2Zmc2V0IGZzdHlwZSBbZnNp
emUgYnNpemUgY3BnXVxuIik7CgogICAgICAgIGZvciAoYmxrID0gYmVnOyBibGsgPD0gKChlbmQg
PCAwKSA/IGJsazogZW5kKTsKCSAgICAgYmxrICs9IChTQkNPVU5UKlNCTE9DS1NJWkUvNTEyKSkg
ewoJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKCgkJaWYgKGxzZWVrKGZkLCAob2ZmX3Qp
YmxrKjUxMiwgU0VFS19TRVQpIDwgMCkKCQkJZXJyKDEsICJsc2VlayIpOwoKCQlpZiAocmVhZChm
ZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwKQoJCQllcnIoMSwgInJlYWQiKTsKCgkJZm9yIChuID0g
MDsgbiA8IChTQkxPQ0tTSVpFKlNCQ09VTlQpOyBuICs9IDUxMikgewoJCQlzYiA9IChzdHJ1Y3Qg
ZnMqKSgmYnVmW25dKTsKCQkJZnNydiA9IGNoZWNrZnN0eXBlKCk7CgkJCWlmIChmc3J2ID49IDEp
IHsgLyogZm91bmQhICovCgkJCQl1ZnNtYWdpYygpOwoJCQkJLyogVXBkYXRlIGxhc3QgcG90ZW50
aWFsIEZTIFNCcyBzZWVuICovCgkJCQlsYXN0YmxrID0gYmxrICsgKG4vNTEyKTsKCQkJCW1lbWNw
eShsYXN0bW91bnQsIHNiLT5mc19mc21udCwgTUFYTU5UTEVOKTsKCQkJfQoJCX0KCX0KCXJldHVy
biAwOwp9CgoKdm9pZAp1c2FnZSh2b2lkKQp7CiAgICAgICAgKHZvaWQpZnByaW50ZihzdGRlcnIs
InVzYWdlOiAlcyBbLWxodl0iLCBnZXRwcm9nbmFtZSgpKTsKCSh2b2lkKWZwcmludGYoc3RkZXJy
LCIgWy1zIHN0YXJ0XSBbLWUgZW5kXSBkZXZpY2VcbiIpOwogICAgICAgIGV4aXQoMSk7Cn0KCgpp
bnQKbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCXN0cnVjdCBkaXNrbGFiZWwgZGw7Cgog
ICAgICAgIGludCBjaCwgZmQ7CiAgICAgICAgZGFkZHJfdCBlbmQsIGJlZyA9IDA7CgoJc2V0cHJv
Z25hbWUoYXJndlswXSk7CgogICAgICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwg
Imx2czplOmgiKSkgIT0gLTEpCiAgICAgICAgICAgICAgICBzd2l0Y2goY2gpIHsKICAgICAgICAg
ICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgICAgICAgICBiZWcgPSBhdG9pKG9wdGFy
Zyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn
ZSc6CgkJCWVmbGFnID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gYXRvaShvcHRh
cmcpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J3YnOgogICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBWRVJCT1NFOwogICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2wnOgogICAgICAgICAg
ICAgICAgICAgICAgICBmbGFncyB8PSBMQUJFTFM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwoJCWNhc2UgJ2gnOgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgICAgdXNhZ2UoKTsKCQkJLyogTk9UUkVBQ0hFRCAqLwogICAgICAgIH0KICAgICAgICBh
cmdjIC09IG9wdGluZDsKICAgICAgICBhcmd2ICs9IG9wdGluZDsKCiAgICAgICAgaWYgKGFyZ2Mg
IT0gMSkKICAgICAgICAgICAgICAgIHVzYWdlKCk7CgogICAgICAgIGZkID0gb3BlbmRpc2soYXJn
dlswXSwgT19SRE9OTFksIGRldmljZSwgc2l6ZW9mKGRldmljZSksIDApOwoKICAgICAgICBpZiAo
ZmQgPCAwKQogICAgICAgICAgICAgICAgZXJyKDEsICIlcyIsIGRldmljZSk7CgoJaWYgKGlvY3Rs
KGZkLCBESU9DR0RJTkZPLCAmZGwpID09IC0xKSB7CgkJd2FybngoImNvdWxkbid0IHJldHJpZXZl
IGRpc2tsYWJlbC5cbiIpOwoJCWVuZCA9IC0xOwoJfSBlbHNlIHsKCQlwcmludGYoIkRpc2s6ICVz
XG4iLCBkbC5kX3R5cGVuYW1lKTsKCQlwcmludGYoIlRvdGFsIHNlY3RvcnMgb24gZGlzazogJSIg
UFJJdTMyICJcblxuIiwKCQkJZGwuZF9zZWNwZXJ1bml0KTsKCX0KCQoJaWYgKCFlZmxhZykKCQll
bmQgPSBkbC5kX3NlY3BlcnVuaXQ7IC8qIGRlZmF1bHQgdG8gbWF4IHNlY3RvcnMgKi8KCiAgICAg
ICAgcmV0dXJuICh1ZnNzY2FuKGZkLCBiZWcsIGVuZCwgZmxhZ3MpKTsKfQo=
--Multipart=_Mon__6_Jun_2005_13_44_01_+0200_hmEPe4=MspT6ruDy--