Re: undelete?

Kurt Huwig (kurt@huwig.de)
Sun, 27 Jul 1997 15:42:25 +0200 (CEST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---1463807743-1257943967-870010945=:331
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Sun, 27 Jul 1997, Rogier Wolff wrote:
> Kurt Huwig wrote:
> > On Sat, 26 Jul 1997, Rogier Wolff wrote:
> > > About a year ago, I implemented the "undelete feature" as a move to
> > > /.deleted. Unlink xyz calls get changed into a mv xyz /.deleted .
> > > The rest is user-space. For example: reclaiming the disk space can
> > > be done by a deamon that watches the .deleted directory. Any fancy
> > > algorithms you want can be implemented there.
> > >
> > > Implementing it myself did shut up the thread back then, but doesn't
> > > prevent the thread to reappear month after month later....

I looked through dejanews and found Rogier's patch. It did not patch in
directly, because the sources have changed a little bit, so I did it by
hand, together with minor changes:

- replaced spaces by tabs
- put all 'printk' in '#ifdef' (I don't want my messages to fill up with
every deleted file
- updated the call to 'do_ext2_rename' to have the new additional
parameter
- made it a part of the configure-script

The patch is quite long, because 'ext2_unlink' had to move below
'do_ext2_rename'. The actual patch is very short - it is between '#ifdef
CONFIG_EXT2_UNDELETE' and the corresponding '#endif'.

The patch is against 2.0.30, because I'm not on the bleeding edge. Some
additions I might think about is to include the directory of the original
file in the deleted one, because this way you can find these files easier.

Now, figure out how to clean up the directory regulary. I don't know how
to get the time when the file was moved into the directory and I don't
want the time to be modified. A quick'n'dirty solution would be to make
subdirs 0, 1, 2, 3,... Now delete the directory with the highest number
and rename the others. Then create a new directory called '0' and move all
the files of '.wastebasket' into it. Then sleep for some time. Everything
certainly in userspace.

Maybe I'm blind for something, so please comment on this idea.

Kurt

----------------------------------------------------------------
Let me make myself perfectly clear: Step 1: Find plan!
Step 2: Save world!
Let's get crackin'... Step 3: Get outta my house!

---1463807743-1257943967-870010945=:331
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="undelete.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.970727154225.331B@TittyTwister.huwig.de>
Content-Description: ext2-undelete.patch

LS0tIGxpbnV4L0RvY3VtZW50YXRpb24vQ29uZmlndXJlLmhlbHAub3JpZwlT
dW4gSnVsIDI3IDE0OjI3OjQ1IDE5OTcNCisrKyBsaW51eC9Eb2N1bWVudGF0
aW9uL0NvbmZpZ3VyZS5oZWxwCVN1biBKdWwgMjcgMTQ6MjU6MjYgMTk5Nw0K
QEAgLTI5ODcsNiArMjk4NywyMyBAQA0KICAgc3Vuc2l0ZS51bmMuZWR1Oi9w
dWIvTGludXgvZG9jcy9mYXFzLiBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2Ug
eW91cg0KICAga2VybmVsIGJ5IGFib3V0IDQxIGtCLiBEZWZhdWx0IGlzIFku
DQogDQordW5kZWxldGUgc3VwcG9ydCBmb3IgZXh0MiBmaWxlc3lzdGVtcw0K
K0NPTkZJR19FWFQyX1VOREVMRVRFDQorICBUaGlzIGVuYWJsZXMgYW4gdW5k
ZWxldGUgZmVhdHVyZSBmb3IgZXh0Mi1wYXJ0aXRpb25zLiBFdmVyeSBjYWxs
IHRvDQorICAndW5saW5rJyBpcyB0cmFuc2xhdGVkIGludG8gYSBtb3ZlIGlu
dG8gdGhlIGRpcmVjdG9yeSAnLndhc3RlYmFza2V0Jw0KKyAgaW4gdGhlIHJv
b3Qgb2YgdGhlIHBhcnRpdGlvbiAod2hlcmUgJ2xvc3QrZm91bmQnIGlzIGxv
Y2F0ZWQpLg0KKyAgQ0FWRUFUUzoNCisgICAgLSBPbmx5IHdvcmtzIGlmIGEg
ZGlyZWN0b3J5ICcud2FzdGViYXNrZXQnIGlzIGluIHRoZSByb290IG9mIHRo
ZQ0KKyAgICAgIHBhcnRpdGlvbi4gVGhpcyBjYW4gYmUgdXNlZCB0byBkaXNh
YmxlIHRoaXMgZmVhdHVyZSBmb3IgY2VydGFpbg0KKyAgICAgIHBhcnRpdGlv
bnMuDQorICAgIC0gT25seSAncm9vdCcgY2FuIG5vdyBkZWxldGUgZmlsZXMu
IA0KKyAgICAtIElmIGEgdXNlciBoYXMgdGhlIHJpZ2h0IHRvIGRlbGV0ZSBh
IGZpbGUsIGl0IHdpbGwgYmUgbW92ZWQNCisgICAgICB0byB0aGUgd2FzdGVi
YXNrZXQgcmVnYXJkbGVzcyBvZiB0aGUgcGVybWlzc2lvbnMgb2YgdGhlDQor
ICAgICAgd2FzdGViYXNrZXQuIElmIHlvdSBkb24ndCB3YW50IHNlY3VyaXR5
IGhvbGVzIHRvIG90aGVycywgeW91DQorICAgICAgc2hvdWxkIG1ha2UgdGhl
IHdhc3RlYmFza2V0IG1vZGUgNzAwLg0KKyAgICAtIFlvdSBoYXZlIHRvIG1h
a2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgaXMgZW1wdGllZCBvciB5b3Vy
DQorICAgICAgaGFyZGRpc2sgd2lsbCBiZSBmdWxsIHZlcnkgc29vbiENCisN
CiB4aWFmcyBmaWxlc3lzdGVtIHN1cHBvcnQNCiBDT05GSUdfWElBX0ZTDQog
ICBUaGlzIGlzIGFuIG9sZCBmaWxlc3lzdGVtICg9IG1ldGhvZCB0byBvcmdh
bml6ZSBmaWxlcyBvbiBhIGhhcmRkaXNrDQotLS0gbGludXgvZnMvQ29uZmln
LmluLm9yaWcJVGh1IEp1bCAxNyAwMTowMjozNyAxOTk3DQorKysgbGludXgv
ZnMvQ29uZmlnLmluCVN1biBKdWwgMjcgMTQ6MTU6NTEgMTk5Nw0KQEAgLTEx
LDYgKzExLDcgQEANCiB0cmlzdGF0ZSAnU2Vjb25kIGV4dGVuZGVkIGZzIHN1
cHBvcnQnIENPTkZJR19FWFQyX0ZTDQogaWYgWyAiJENPTkZJR19FWFQyX0ZT
IiA9ICJ5IiBdOyB0aGVuDQogCWJvb2wgJwlOT19BVElNRSBzdXBwb3J0IGZv
ciBleHQyIGZpbGVzeXN0ZW1zJyBDT05GSUdfRVhUMl9OT0FUSU1FDQorCWJv
b2wgJyAgdW5kZWxldGUgc3VwcG9ydCBmb3IgZXh0MiBmaWxlc3lzdGVtcycg
Q09ORklHX0VYVDJfVU5ERUxFVEUNCiBmaQ0KIHRyaXN0YXRlICd4aWFmcyBm
aWxlc3lzdGVtIHN1cHBvcnQnIENPTkZJR19YSUFfRlMNCiANCi0tLSBsaW51
eC9mcy9leHQyL25hbWVpLmMub3JpZwlTYXQgTm92IDMwIDExOjIxOjIwIDE5
OTYNCisrKyBsaW51eC9mcy9leHQyL25hbWVpLmMJU3VuIEp1bCAyNyAxNTow
NzozNCAxOTk3DQpAQCAtNjk1LDczICs2OTUsNiBAQA0KIAlyZXR1cm4gcmV0
dmFsOw0KIH0NCiANCi1pbnQgZXh0Ml91bmxpbmsgKHN0cnVjdCBpbm9kZSAq
IGRpciwgY29uc3QgY2hhciAqIG5hbWUsIGludCBsZW4pDQotew0KLQlpbnQg
cmV0dmFsOw0KLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsNCi0Jc3RydWN0IGJ1
ZmZlcl9oZWFkICogYmg7DQotCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqIGRl
Ow0KLQ0KLXJlcGVhdDoNCi0JaWYgKCFkaXIpDQotCQlyZXR1cm4gLUVOT0VO
VDsNCi0JcmV0dmFsID0gLUVOT0VOVDsNCi0JaW5vZGUgPSBOVUxMOw0KLQlp
ZiAobGVuID4gRVhUMl9OQU1FX0xFTikgew0KLQkJaXB1dCAoZGlyKTsNCi0J
CXJldHVybiAtRU5BTUVUT09MT05HOw0KLQl9DQotCWJoID0gZXh0Ml9maW5k
X2VudHJ5IChkaXIsIG5hbWUsIGxlbiwgJmRlKTsNCi0JaWYgKCFiaCkNCi0J
CWdvdG8gZW5kX3VubGluazsNCi0JaWYgKCEoaW5vZGUgPSBpZ2V0IChkaXIt
Pmlfc2IsIGRlLT5pbm9kZSkpKQ0KLQkJZ290byBlbmRfdW5saW5rOw0KLQlp
ZiAoaW5vZGUtPmlfc2ItPmRxX29wKQ0KLQkJaW5vZGUtPmlfc2ItPmRxX29w
LT5pbml0aWFsaXplIChpbm9kZSwgLTEpOw0KLQlyZXR2YWwgPSAtRVBFUk07
DQotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQ0KLQkJZ290byBlbmRf
dW5saW5rOw0KLQlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFC
TEUoaW5vZGUpKQ0KLQkJZ290byBlbmRfdW5saW5rOw0KLQlpZiAoZGUtPmlu
b2RlICE9IGlub2RlLT5pX2lubykgew0KLQkJaXB1dChpbm9kZSk7DQotCQli
cmVsc2UoYmgpOw0KLQkJY3VycmVudC0+Y291bnRlciA9IDA7DQotCQlzY2hl
ZHVsZSgpOw0KLQkJZ290byByZXBlYXQ7DQotCX0NCi0JaWYgKChkaXItPmlf
bW9kZSAmIFNfSVNWVFgpICYmICFmc3VzZXIoKSAmJg0KLQkgICAgY3VycmVu
dC0+ZnN1aWQgIT0gaW5vZGUtPmlfdWlkICYmDQotCSAgICBjdXJyZW50LT5m
c3VpZCAhPSBkaXItPmlfdWlkKQ0KLQkJZ290byBlbmRfdW5saW5rOw0KLQlp
ZiAoIWlub2RlLT5pX25saW5rKSB7DQotCQlleHQyX3dhcm5pbmcgKGlub2Rl
LT5pX3NiLCAiZXh0Ml91bmxpbmsiLA0KLQkJCSAgICAgICJEZWxldGluZyBu
b25leGlzdGVudCBmaWxlICglbHUpLCAlZCIsDQotCQkJICAgICAgaW5vZGUt
PmlfaW5vLCBpbm9kZS0+aV9ubGluayk7DQotCQlpbm9kZS0+aV9ubGluayA9
IDE7DQotCX0NCi0JcmV0dmFsID0gZXh0Ml9kZWxldGVfZW50cnkgKGRlLCBi
aCk7DQotCWlmIChyZXR2YWwpDQotCQlnb3RvIGVuZF91bmxpbms7DQotCWRp
ci0+aV92ZXJzaW9uID0gKytldmVudDsNCi0JbWFya19idWZmZXJfZGlydHko
YmgsIDEpOw0KLQlpZiAoSVNfU1lOQyhkaXIpKSB7DQotCQlsbF9yd19ibG9j
ayAoV1JJVEUsIDEsICZiaCk7DQotCQl3YWl0X29uX2J1ZmZlciAoYmgpOw0K
LQl9DQotCWRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IENVUlJFTlRf
VElNRTsNCi0JZGlyLT5pX2RpcnQgPSAxOw0KLQlpbm9kZS0+aV9ubGluay0t
Ow0KLQlpbm9kZS0+aV9kaXJ0ID0gMTsNCi0JaW5vZGUtPmlfY3RpbWUgPSBk
aXItPmlfY3RpbWU7DQotCXJldHZhbCA9IDA7DQotZW5kX3VubGluazoNCi0J
YnJlbHNlIChiaCk7DQotCWlwdXQgKGlub2RlKTsNCi0JaXB1dCAoZGlyKTsN
Ci0JcmV0dXJuIHJldHZhbDsNCi19DQotDQogaW50IGV4dDJfc3ltbGluayAo
c3RydWN0IGlub2RlICogZGlyLCBjb25zdCBjaGFyICogbmFtZSwgaW50IGxl
biwNCiAJCSAgY29uc3QgY2hhciAqIHN5bW5hbWUpDQogew0KQEAgLTExMDEs
NiArMTAzNCwxMjYgQEANCiAJaXB1dCAobmV3X2lub2RlKTsNCiAJaXB1dCAo
b2xkX2Rpcik7DQogCWlwdXQgKG5ld19kaXIpOw0KKwlyZXR1cm4gcmV0dmFs
Ow0KK30NCisNCitpbnQgZXh0Ml91bmxpbmsgKHN0cnVjdCBpbm9kZSAqIGRp
ciwgY29uc3QgY2hhciAqIG5hbWUsIGludCBsZW4pDQorew0KKwlpbnQgcmV0
dmFsOw0KKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsNCisJc3RydWN0IGJ1ZmZl
cl9oZWFkICogYmg7DQorCXN0cnVjdCBleHQyX2Rpcl9lbnRyeSAqIGRlOw0K
Kw0KK3JlcGVhdDoNCisJaWYgKCFkaXIpDQorCQlyZXR1cm4gLUVOT0VOVDsN
CisJcmV0dmFsID0gLUVOT0VOVDsNCisJaW5vZGUgPSBOVUxMOw0KKwlpZiAo
bGVuID4gRVhUMl9OQU1FX0xFTikgew0KKwkJaXB1dCAoZGlyKTsNCisJCXJl
dHVybiAtRU5BTUVUT09MT05HOw0KKwl9DQorCWJoID0gZXh0Ml9maW5kX2Vu
dHJ5IChkaXIsIG5hbWUsIGxlbiwgJmRlKTsNCisJaWYgKCFiaCkNCisJCWdv
dG8gZW5kX3VubGluazsNCisJaWYgKCEoaW5vZGUgPSBpZ2V0IChkaXItPmlf
c2IsIGRlLT5pbm9kZSkpKQ0KKwkJZ290byBlbmRfdW5saW5rOw0KKwlpZiAo
aW5vZGUtPmlfc2ItPmRxX29wKQ0KKwkJaW5vZGUtPmlfc2ItPmRxX29wLT5p
bml0aWFsaXplIChpbm9kZSwgLTEpOw0KKwlyZXR2YWwgPSAtRVBFUk07DQor
CWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQ0KKwkJZ290byBlbmRfdW5s
aW5rOw0KKwlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUo
aW5vZGUpKQ0KKwkJZ290byBlbmRfdW5saW5rOw0KKwlpZiAoZGUtPmlub2Rl
ICE9IGlub2RlLT5pX2lubykgew0KKwkJaXB1dChpbm9kZSk7DQorCQlicmVs
c2UoYmgpOw0KKwkJY3VycmVudC0+Y291bnRlciA9IDA7DQorCQlzY2hlZHVs
ZSgpOw0KKwkJZ290byByZXBlYXQ7DQorCX0NCisJaWYgKChkaXItPmlfbW9k
ZSAmIFNfSVNWVFgpICYmICFmc3VzZXIoKSAmJg0KKwkgICAgY3VycmVudC0+
ZnN1aWQgIT0gaW5vZGUtPmlfdWlkICYmDQorCSAgICBjdXJyZW50LT5mc3Vp
ZCAhPSBkaXItPmlfdWlkKQ0KKwkJZ290byBlbmRfdW5saW5rOw0KKwlpZiAo
IWlub2RlLT5pX25saW5rKSB7DQorCQlleHQyX3dhcm5pbmcgKGlub2RlLT5p
X3NiLCAiZXh0Ml91bmxpbmsiLA0KKwkJCSAgICAgICJEZWxldGluZyBub25l
eGlzdGVudCBmaWxlICglbHUpLCAlZCIsDQorCQkJICAgICAgaW5vZGUtPmlf
aW5vLCBpbm9kZS0+aV9ubGluayk7DQorCQlpbm9kZS0+aV9ubGluayA9IDE7
DQorCX0NCisjaWZkZWYgQ09ORklHX0VYVDJfVU5ERUxFVEUNCisJaWYgKCFm
c3VzZXIgKCkpIHsgLyogJ3Jvb3QnIHVzZXMgdGhlIG9sZCB1bmxpbmsgKi8N
CisJCWlmIChpbm9kZS0+aV9zYikgew0KKwkJCXN0cnVjdCBpbm9kZSAqd2Is
KnRtcDsNCisJCQljb25zdCBjaGFyICpuZXdfbmFtZTsNCisJCQljaGFyIGJ1
ZltFWFQyX05BTUVfTEVOXTsNCisJCQlpbnQgbmV3X2xlbjsNCisJCQlpbnQg
dmVyc2lvbjsNCisNCisJCQlpbm9kZS0+aV9zYi0+c19tb3VudGVkLT5pX2Nv
dW50Kys7DQorCQkJaWYgKGV4dDJfbG9va3VwIChpbm9kZS0+aV9zYi0+c19t
b3VudGVkLCIud2FzdGViYXNrZXQiLDEyLCZ3YikgPT0gMCkgew0KKyNpZmRl
ZiBERUJVR19VTkRFTEVURQ0KKwkJCQlwcmludGsgKCJpbm9kZV9jPSVkLCBk
aXJfYz0lZCx3Yl9jPSVkXG4iLGlub2RlLT5pX2NvdW50LGRpci0+aV9jb3Vu
dCx3Yi0+aV9jb3VudCk7IA0KKyNlbmRpZg0KKwkJCQluZXdfbmFtZT1uYW1l
Ow0KKwkJCQluZXdfbGVuID0gbGVuOw0KKwkJCQl2ZXJzaW9uID0gMDsNCisJ
CQkJd2ItPmlfY291bnQrKzsNCisJCQkJd2hpbGUgKGV4dDJfbG9va3VwICh3
YixuZXdfbmFtZSxuZXdfbGVuLCZ0bXApID09IDApIHsNCisJCQkJCWlwdXQg
KHRtcCk7DQorCQkJCQlzcHJpbnRmIChidWYsIiVzXyVkIixuYW1lLHZlcnNp
b24rKyk7DQorCQkJCQluZXdfbmFtZSA9IGJ1ZjsNCisJCQkJCW5ld19sZW4g
PSBzdHJsZW4gKGJ1Zik7DQorCQkJCQl3Yi0+aV9jb3VudCsrOw0KKwkJCQl9
DQorI2lmZGVmIERFQlVHX1VOREVMRVRFDQorCQkJCXByaW50ayAoIm1vdmVp
bmcgJXMgdG8gd2FzdGViYXNrZXQgYXMgJXMuXG4iLG5hbWUsbmV3X25hbWUp
Ow0KKyNlbmRpZg0KKwkJCQl3aGlsZSAoZGlyLT5pX3NiLT51LmV4dDJfc2Iu
c19yZW5hbWVfbG9jaykNCisJCQkJCXNsZWVwX29uICgmZGlyLT5pX3NiLT51
LmV4dDJfc2Iuc19yZW5hbWVfd2FpdCk7DQorCQkJCWRpci0+aV9zYi0+dS5l
eHQyX3NiLnNfcmVuYW1lX2xvY2sgPSAxOw0KKw0KKwkJCQlyZXR2YWwgPSBk
b19leHQyX3JlbmFtZSAoZGlyLCBuYW1lLCBsZW4sIHdiLCBuZXdfbmFtZSwg
bmV3X2xlbiwgMCk7DQorDQorCQkJCWRpci0+aV9zYi0+dS5leHQyX3NiLnNf
cmVuYW1lX2xvY2sgPSAwOw0KKwkJCQl3YWtlX3VwICgmZGlyLT5pX3NiLT51
LmV4dDJfc2Iuc19yZW5hbWVfd2FpdCk7DQorI2lmZGVmIERFQlVHX1VOREVM
RVRFDQorCQkJCXByaW50ayAoImlub2RlX2M9JWQsIGRpcl9jPSVkLHdiX2M9
JWRcbiIsaW5vZGUtPmlfY291bnQsZGlyLT5pX2NvdW50LHdiLT5pX2NvdW50
KTsgDQorI2VuZGlmDQorCQkJCWJyZWxzZSAoYmgpOw0KKwkJCQlpcHV0IChp
bm9kZSk7DQorCQkJCXJldHVybiByZXR2YWw7DQorI2lmZGVmIERFQlVHX1VO
REVMRVRFDQorCQkJfSBlbHNlIHsNCisJCQkJcHJpbnRrICgiTm8gd2FzdGVi
YXNrZXQuIE9sZCB1bmxpbmsgZm9yICVzLi4uLlxuIixuYW1lKTsNCisjZW5k
aWYNCisJCQl9DQorCQl9IGVsc2Ugew0KKwkJCXByaW50ayAoIldhcm5pbmc6
IFVuZGVsZXRlIGNhbid0IGZpbmQgYSBzdXBlcmJsb2NrIGZvciBpbm9kZSAl
bGRcbiINCisJCQkJIkRlbGV0aW5nIGZpbGUgbm9ybWFsbHkuXG4iLGlub2Rl
LT5pX2lubyk7DQorCQl9DQorCX0NCisjZW5kaWYNCisJcmV0dmFsID0gZXh0
Ml9kZWxldGVfZW50cnkgKGRlLCBiaCk7DQorCWlmIChyZXR2YWwpDQorCQln
b3RvIGVuZF91bmxpbms7DQorCWRpci0+aV92ZXJzaW9uID0gKytldmVudDsN
CisJbWFya19idWZmZXJfZGlydHkoYmgsIDEpOw0KKwlpZiAoSVNfU1lOQyhk
aXIpKSB7DQorCQlsbF9yd19ibG9jayAoV1JJVEUsIDEsICZiaCk7DQorCQl3
YWl0X29uX2J1ZmZlciAoYmgpOw0KKwl9DQorCWRpci0+aV9jdGltZSA9IGRp
ci0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsNCisJZGlyLT5pX2RpcnQgPSAx
Ow0KKwlpbm9kZS0+aV9ubGluay0tOw0KKwlpbm9kZS0+aV9kaXJ0ID0gMTsN
CisJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWU7DQorCXJldHZhbCA9
IDA7DQorZW5kX3VubGluazoNCisJYnJlbHNlIChiaCk7DQorCWlwdXQgKGlu
b2RlKTsNCisJaXB1dCAoZGlyKTsNCiAJcmV0dXJuIHJldHZhbDsNCiB9DQog
DQotLS0gL2Rldi9udWxsCVN1biBKdW4gMjkgMTc6MTA6MjAgMTk5Nw0KKysr
IGxpbnV4L2luaXQvcGF0Y2hlcy9leHQyLXVuZGVsZXRlLTIuMC4zMAlTdW4g
SnVsIDI3IDE0OjMwOjIzIDE5OTcNCkBAIC0wLDAgKzEgQEANCitleHQyIHVu
ZGVsZXRlIHN1cHBvcnQgKFJvZ2llciBXb2xmZiA8Ui5FLldvbGZmQEJpdFdp
emFyZC5ubD4pDQo=
---1463807743-1257943967-870010945=:331--