From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933850Ab1KCRt7 (ORCPT ); Thu, 3 Nov 2011 13:49:59 -0400 Received: from mail-wy0-f174.google.com ([74.125.82.174]:41908 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933174Ab1KCRt6 (ORCPT ); Thu, 3 Nov 2011 13:49:58 -0400 Subject: Re: [PATCH 0/1] remap-log: fix map generator From: Artem Bityutskiy Reply-To: dedekind1@gmail.com To: Al Viro Cc: "Kirill A. Shutemov" , linux-kernel@vger.kernel.org Date: Thu, 03 Nov 2011 19:49:57 +0200 In-Reply-To: <1320328912-15148-1-git-send-email-dedekind1@gmail.com> References: <1320328912-15148-1-git-send-email-dedekind1@gmail.com> Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-LcrVTrNlswiaeFmgXrun" X-Mailer: Evolution 3.0.3 (3.0.3-1.fc15) Message-ID: <1320342604.14310.40.camel@sauron.fi.intel.com> Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-LcrVTrNlswiaeFmgXrun Content-Type: multipart/mixed; boundary="=-V4vBe+DBxU5RWsXfcwFt" --=-V4vBe+DBxU5RWsXfcwFt Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 2011-11-03 at 16:01 +0200, Artem Bityutskiy wrote: > [1] http://thread.gmane.org/gmane.linux.kernel/409379 For reference, here is the sources of remap-log that we are using. --=20 Best Regards, Artem Bityutskiy --=-V4vBe+DBxU5RWsXfcwFt Content-Disposition: attachment; filename="remap-log.c" Content-Transfer-Encoding: base64 Content-Type: text/x-csrc; name="remap-log.c"; charset="UTF-8" LyoNCiAqIENvcHlyaWdodCAoYykgMjAwNiwgQWwgVmlyby4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu DQogKiANCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0KICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQNCiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4NCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLg0KICoNCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFO RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRQ0KICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVH RU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQogKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KICog REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMNCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QNCiAq IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkNCiAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YNCiAqIFNVQ0ggREFNQUdFLg0KICov DQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGludC5oPg0KI2luY2x1ZGUgPHN0 ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KDQpjaGFy ICpwcmVmaXgxID0gImEvIiwgKnByZWZpeDIgPSAiYi8iOw0KY2hhciAqZnJvbV9wcmVmaXggPSAi IiwgKm9sZF9wcmVmaXggPSAiTzoiLCAqbmV3X3ByZWZpeCA9ICIiOw0Kc2l6ZV90IGZyb21fbGVu ID0gMDsNCg0KY2hhciAqbGluZTsNCnNpemVfdCBzaXplOw0KDQp2b2lkIGRpZShjaGFyICpzKQ0K ew0KCWZwcmludGYoc3RkZXJyLCAicmVtYXA6ICVzXG4iLCBzKTsNCglleGl0KDEpOw0KfQ0KDQp2 b2lkIEVub21lbSh2b2lkKQ0Kew0KCWRpZSgib3V0IG9mIG1lbW9yeSIpOw0KfQ0KDQp2b2lkIEVp byh2b2lkKQ0Kew0KCWRpZSgiSU8gZXJyb3IiKTsNCn0NCg0KaW50IF9nZXRsaW5lKEZJTEUgKmYp DQp7DQoJY2hhciAqczsNCglpZiAoIWZnZXRzKGxpbmUsIHNpemUsIGYpKSB7DQoJCWlmICghZmVv ZihmKSkNCgkJCUVpbygpOw0KCQlyZXR1cm4gMDsNCgl9DQoJZm9yIChzID0gbGluZSArIHN0cmxl bihsaW5lKTsgc1stMV0gIT0gJ1xuJzsgcyA9IHMgKyBzdHJsZW4ocykpIHsNCgkJaWYgKHMgPT0g bGluZSArIHNpemUgLSAxKSB7DQoJCQlsaW5lID0gcmVhbGxvYyhsaW5lLCAyICogc2l6ZSk7DQoJ CQlpZiAoIWxpbmUpDQoJCQkJRW5vbWVtKCk7DQoJCQlzID0gbGluZSArIHNpemUgLSAxOw0KCQkJ c2l6ZSAqPSAyOw0KCQl9DQoJCWlmICghZmdldHMocywgc2l6ZSAtIChzIC0gbGluZSksIGYpKSB7 DQoJCQlpZiAoIWZlb2YoZikpDQoJCQkJRWlvKCk7DQoJCQlyZXR1cm4gMTsNCgkJfQ0KCX0NCglz Wy0xXSA9ICdcMCc7DQoJcmV0dXJuIDE7DQp9DQoNCi8qIHRvID09IDAgLT4gZGVsZXRpb24gKi8N CnN0cnVjdCByYW5nZV9tYXAgew0KCWludCBmcm9tLCB0bzsNCn07DQoNCnN0cnVjdCBmaWxlX21h cCB7DQoJY2hhciAqbmFtZTsNCglzdHJ1Y3QgZmlsZV9tYXAgKm5leHQ7DQoJY2hhciAqbmV3X25h bWU7DQoJaW50IGNvdW50Ow0KCWludCBhbGxvY2F0ZWQ7DQoJaW50IGxhc3Q7DQoJc3RydWN0IHJh bmdlX21hcCByYW5nZXNbXTsNCn07DQoNCnN0cnVjdCBmaWxlX21hcCAqYWxsb2NfbWFwKGNoYXIg Km5hbWUpDQp7DQoJc3RydWN0IGZpbGVfbWFwICptYXA7DQoNCgltYXAgPSBtYWxsb2Moc2l6ZW9m KHN0cnVjdCBmaWxlX21hcCkgKyAxNiAqIHNpemVvZihzdHJ1Y3QgcmFuZ2VfbWFwKSk7DQoJaWYg KCFtYXApDQoJCUVub21lbSgpOw0KCW1hcC0+bmFtZSA9IG1hcC0+bmV3X25hbWUgPSBzdHJkdXAo bmFtZSk7DQoJaWYgKCFtYXAtPm5hbWUpDQoJCUVub21lbSgpOw0KCW1hcC0+Y291bnQgPSAwOw0K CW1hcC0+YWxsb2NhdGVkID0gMTY7DQoJbWFwLT5uZXh0ID0gTlVMTDsNCgltYXAtPmxhc3QgPSAw Ow0KCXJldHVybiBtYXA7DQp9DQoNCi8qIHRoaXMgaXMgMzJiaXQgRk5WMSAqLw0KdWludDMyX3Qg Rk5WX2hhc2goY2hhciAqbmFtZSkNCnsNCgl1aW50MzJfdCBuID0gMHg4MTFjOWRjNTsNCgl3aGls ZSAoKm5hbWUpIHsNCgkJdW5zaWduZWQgY2hhciBjID0gKm5hbWUrKzsNCgkJbiAqPSAweDAxMDAw MTkzOw0KCQluIF49IGM7DQoJfQ0KCXJldHVybiBuOw0KfQ0KDQpzdHJ1Y3QgZmlsZV9tYXAgKmhh c2hbMTAyNF07DQoNCmludCBoYXNoX21hcChzdHJ1Y3QgZmlsZV9tYXAgKm1hcCkNCnsNCglpbnQg biA9IEZOVl9oYXNoKG1hcC0+bmFtZSkgJSAxMDI0Ow0KCXN0cnVjdCBmaWxlX21hcCAqKnAgPSAm aGFzaFtuXTsNCg0KCXdoaWxlICgqcCkgew0KCQlpZiAoIXN0cmNtcCgoKnApLT5uYW1lLCBtYXAt Pm5hbWUpKQ0KCQkJcmV0dXJuIDA7DQoJCXAgPSAmKCpwKS0+bmV4dDsNCgl9DQoJKnAgPSBtYXA7 DQoJaWYgKG1hcC0+bmV3X25hbWUgJiYgIW1hcC0+Y291bnQpDQoJCXJldHVybiAwOw0KCWlmICht YXAtPm5ld19uYW1lICYmIG1hcC0+cmFuZ2VzWzBdLmZyb20gIT0gMSkNCgkJcmV0dXJuIDA7DQoJ cmV0dXJuIDE7DQp9DQoNCnN0cnVjdCBmaWxlX21hcCAqZmluZF9tYXAoY2hhciAqbmFtZSkNCnsN CglzdGF0aWMgc3RydWN0IGZpbGVfbWFwICpsYXN0ID0gTlVMTDsNCglpbnQgbiA9IEZOVl9oYXNo KG5hbWUpICUgMTAyNDsNCglzdHJ1Y3QgZmlsZV9tYXAgKnA7DQoNCglpZiAobGFzdCAmJiAhc3Ry Y21wKGxhc3QtPm5hbWUsIG5hbWUpKQ0KCQlyZXR1cm4gbGFzdDsNCg0KCWZvciAocCA9IGhhc2hb bl07IHAgJiYgc3RyY21wKHAtPm5hbWUsIG5hbWUpOyBwID0gcC0+bmV4dCkNCgkJOw0KCWlmIChw KQ0KCQlsYXN0ID0gcDsNCglyZXR1cm4gcDsNCn0NCg0Kdm9pZCBwYXJzZV9tYXAoY2hhciAqbmFt ZSkNCnsNCglzdHJ1Y3QgZmlsZV9tYXAgKm1hcCA9IE5VTEw7DQoJc3RydWN0IHJhbmdlX21hcCAq cmFuZ2U7DQoJY2hhciAqczsNCglGSUxFICpmOw0KDQoJZiA9IGZvcGVuKG5hbWUsICJyIik7DQoJ aWYgKCFmKQ0KCQlkaWUoImNhbid0IG9wZW4gbWFwIik7DQoJd2hpbGUgKF9nZXRsaW5lKGYpKSB7 DQoJCWlmIChsaW5lWzBdID09ICdEJykgew0KCQkJaWYgKG1hcCAmJiAhaGFzaF9tYXAobWFwKSkN CgkJCQlnb3RvIEViYWRtYXA7DQoJCQlpZiAobGluZVsxXSAhPSAnICcpDQoJCQkJZ290byBFYmFk bWFwOw0KCQkJaWYgKHN0cmNocihsaW5lICsgMiwgJyAnKSkNCgkJCQlnb3RvIEViYWRtYXA7DQoJ CQltYXAgPSBhbGxvY19tYXAobGluZSArIDIpOw0KCQkJbWFwLT5uZXdfbmFtZSA9IE5VTEw7DQoJ CQljb250aW51ZTsNCgkJfQ0KCQlpZiAobGluZVswXSA9PSAnTScpIHsNCgkJCWlmIChtYXAgJiYg IWhhc2hfbWFwKG1hcCkpDQoJCQkJZ290byBFYmFkbWFwOw0KCQkJaWYgKGxpbmVbMV0gIT0gJyAn KQ0KCQkJCWdvdG8gRWJhZG1hcDsNCgkJCXMgPSBzdHJjaHIobGluZSArIDIsICcgJyk7DQoJCQlp ZiAoIXMpDQoJCQkJZ290byBFYmFkbWFwOw0KCQkJKnMrKyA9ICdcMCc7DQoJCQlpZiAoc3RyY2hy KHMsICcgJykpDQoJCQkJZ290byBFYmFkbWFwOw0KCQkJbWFwID0gYWxsb2NfbWFwKGxpbmUgKyAy KTsNCgkJCWlmIChzdHJjbXAobGluZSArIDIsIHMpKSB7DQoJCQkJbWFwLT5uZXdfbmFtZSA9IHN0 cmR1cChzKTsNCgkJCQlpZiAoIW1hcC0+bmV3X25hbWUpDQoJCQkJCUVub21lbSgpOw0KCQkJfQ0K CQkJY29udGludWU7DQoJCX0NCgkJaWYgKCFtYXAgfHwgIW1hcC0+bmV3X25hbWUpDQoJCQlnb3Rv IEViYWRtYXA7DQoJCWlmIChtYXAtPmNvdW50ID09IG1hcC0+YWxsb2NhdGVkKSB7DQoJCQlpbnQg biA9IDIgKiBtYXAtPmFsbG9jYXRlZDsNCgkJCW1hcCA9IHJlYWxsb2MobWFwLCBzaXplb2Yoc3Ry dWN0IGZpbGVfbWFwKSArDQoJCQkJCSAgIG4gKiBzaXplb2Yoc3RydWN0IHJhbmdlX21hcCkpOw0K CQkJaWYgKCFtYXApDQoJCQkJRW5vbWVtKCk7DQoJCQltYXAtPmFsbG9jYXRlZCA9IG47DQoJCX0N CgkJcmFuZ2UgPSAmbWFwLT5yYW5nZXNbbWFwLT5jb3VudCsrXTsNCgkJaWYgKHNzY2FuZihsaW5l LCAiJWQgJWQlKmMiLCAmcmFuZ2UtPmZyb20sICZyYW5nZS0+dG8pICE9IDIpDQoJCQlnb3RvIEVi YWRtYXA7DQoJCWlmIChyYW5nZSA+IG1hcC0+cmFuZ2VzICYmIHJhbmdlLT5mcm9tIDw9IHJhbmdl Wy0xXS5mcm9tKQ0KCQkJZ290byBFYmFkbWFwOw0KCX0NCglpZiAobWFwICYmICFoYXNoX21hcCht YXApKQ0KCQlnb3RvIEViYWRtYXA7DQoJZmNsb3NlKGYpOw0KCXJldHVybjsNCkViYWRtYXA6DQoJ ZGllKCJiYWQgbWFwIik7DQp9DQoNCnN0cnVjdCByYW5nZV9tYXAgKmZpbmRfcmFuZ2Uoc3RydWN0 IGZpbGVfbWFwICptYXAsIGludCBsKQ0Kew0KCXN0cnVjdCByYW5nZV9tYXAgKnJhbmdlID0gJm1h cC0+cmFuZ2VzW21hcC0+bGFzdF07DQoJc3RydWN0IHJhbmdlX21hcCAqcDsNCg0KCWlmIChyYW5n ZS0+ZnJvbSA8PSBsKSB7DQoJCXAgPSAmbWFwLT5yYW5nZXNbbWFwLT5jb3VudCAtIDFdOw0KCQlp ZiAocC0+ZnJvbSA+IGwpIHsNCgkJCWZvciAocCA9IHJhbmdlOyBwLT5mcm9tIDw9IGw7IHArKykN CgkJCQk7DQoJCQlwLS07DQoJCX0NCgl9IGVsc2Ugew0KCQlmb3IgKHAgPSBtYXAtPnJhbmdlczsg cC0+ZnJvbSA8PSBsOyBwKyspDQoJCQk7DQoJCXAtLTsNCgl9DQoJbWFwLT5sYXN0ID0gcCAtIG1h cC0+cmFuZ2VzOw0KCXJldHVybiBwOw0KfQ0KDQp2b2lkIG1hcGxpbmUodm9pZCkNCnsNCglzdHJ1 Y3QgZmlsZV9tYXAgKm1hcDsNCglzdHJ1Y3QgcmFuZ2VfbWFwICpyYW5nZTsNCgl1bnNpZ25lZCBs b25nIGw7DQoJY2hhciAqczEsICpzMjsNCgljaGFyICpuYW1lOw0KDQoJaWYgKHN0cm5jbXAobGlu ZSwgZnJvbV9wcmVmaXgsIGZyb21fbGVuKSkNCgkJZ290byBub2lzZTsNCglzMSA9IHN0cmNocihs aW5lICsgZnJvbV9sZW4sICc6Jyk7DQoJaWYgKCFzMSkNCgkJZ290byBub2lzZTsNCglzMiA9IHN0 cmNocihsaW5lICsgZnJvbV9sZW4sICcgJyk7DQoJaWYgKHMyICYmIHMyIDwgczEpDQoJCWdvdG8g bm9pc2U7DQoJbCA9IHN0cnRvdWwoczEgKyAxLCAmczIsIDEwKTsNCglpZiAoczIgPT0gczEgKyAx IHx8ICpzMiAhPSAnOicgfHwgIWwgfHwgbCA+IElOVF9NQVgpDQoJCWdvdG8gbm9pc2U7DQoJKnMx KysgPSAqczIrKyA9ICdcMCc7DQoJbmFtZSA9IGxpbmUgKyBmcm9tX2xlbjsNCgltYXAgPSBmaW5k X21hcChuYW1lKTsNCglpZiAoIW1hcCkNCgkJZ290byBuZXc7DQoJaWYgKCFtYXAtPm5ld19uYW1l KQ0KCQlnb3RvIG9sZDsNCgluYW1lID0gbWFwLT5uZXdfbmFtZTsNCglyYW5nZSA9IGZpbmRfcmFu Z2UobWFwLCBsKTsNCglpZiAoIXJhbmdlLT50bykNCgkJZ290byBvbGQ7DQoJbCArPSByYW5nZS0+ dG8gLSByYW5nZS0+ZnJvbTsNCm5ldzoNCglwcmludGYoIiVzJXM6JWx1OiVzXG4iLCBuZXdfcHJl Zml4LCBuYW1lLCBsLCBzMik7DQoJcmV0dXJuOw0Kb2xkOg0KCXMxWy0xXSA9IHMyWy0xXSA9ICc6 JzsNCglwcmludGYoIiVzJXNcbiIsIG9sZF9wcmVmaXgsIGxpbmUgKyBmcm9tX2xlbik7DQoJcmV0 dXJuOw0Kbm9pc2U6DQoJcHJpbnRmKCIlc1xuIiwgbGluZSk7DQp9DQoNCmludCBwYXJzZV9odW5r KGludCAqbDEsIGludCAqbDIsIGludCAqbjEsIGludCAqbjIpDQp7DQoJdW5zaWduZWQgbG9uZyBu Ow0KCWNoYXIgKnMsICpwOw0KCWlmIChsaW5lWzNdICE9ICctJykNCgkJcmV0dXJuIDA7DQoJbiA9 IHN0cnRvdWwobGluZSArIDQsICZzLCAxMCk7DQoJaWYgKHMgPT0gbGluZSArIDQgfHwgbiA+IElO VF9NQVgpDQoJCXJldHVybiAwOw0KCSpsMSA9IG47DQoJaWYgKCpzID09ICcsJykgew0KCQluID0g c3RydG91bChzICsgMSwgJnAsIDEwKTsNCgkJaWYgKHAgPT0gcyArIDEgfHwgbiA+IElOVF9NQVgp DQoJCQlyZXR1cm4gMDsNCgkJKm4xID0gbjsNCgkJaWYgKCFuKQ0KCQkJKCpsMSkrKzsNCgl9IGVs c2Ugew0KCQlwID0gczsNCgkJKm4xID0gMTsNCgl9DQoJaWYgKCpwICE9ICcgJyB8fCBwWzFdICE9 ICcrJykNCgkJcmV0dXJuIDA7DQoJbiA9IHN0cnRvdWwocCArIDIsICZzLCAxMCk7DQoJaWYgKHMg PT0gcCArIDIgfHwgbiA+IElOVF9NQVgpDQoJCXJldHVybiAwOw0KCSpsMiA9IG47DQoJaWYgKCpz ID09ICcsJykgew0KCQluID0gc3RydG91bChzICsgMSwgJnAsIDEwKTsNCgkJaWYgKHAgPT0gcyAr IDEgfHwgbiA+IElOVF9NQVgpDQoJCQlyZXR1cm4gMDsNCgkJKm4yID0gbjsNCgkJaWYgKCFuKQ0K CQkJKCpsMikrKzsNCgl9IGVsc2Ugew0KCQlwID0gczsNCgkJKm4yID0gMTsNCgl9DQoJcmV0dXJu IDE7DQp9DQoNCnZvaWQgcGFyc2VfZGlmZih2b2lkKQ0Kew0KCWludCBza2lwcGluZyA9IC0xLCBz dXBwcmVzcyA9IDE7DQoJY2hhciAqbmFtZTEgPSBOVUxMLCAqbmFtZTIgPSBOVUxMOw0KCWludCBm cm9tID0gMSwgdG8gPSAxOw0KCWludCBsMSwgbDIsIG4xLCBuMjsNCgllbnVtIGNtZCB7DQoJCURp ZmYsIEh1bmssIE5ldywgRGVsLCBDb3B5LCBSZW5hbWUsIEp1bmsNCgl9IGNtZDsNCglzdGF0aWMg c3RydWN0IHsgY29uc3QgY2hhciAqczsgc2l6ZV90IGxlbjsgfSBwcmVmW10gPSB7DQoJCVtIdW5r XSA9IHsiQEAgIiwgM30sDQoJCVtEaWZmXSA9IHsiZGlmZiAiLCA1fSwNCgkJW05ld10gPSB7Im5l dyBmaWxlICIsIDl9LA0KCQlbRGVsXSA9IHsiZGVsZXRlZCBmaWxlICIsIDEyfSwNCgkJW0NvcHld ID0geyJjb3B5IGZyb20gIiwgMTB9LA0KCQlbUmVuYW1lXSA9IHsicmVuYW1lIGZyb20gIiwgMTF9 LA0KCQlbSnVua10gPSB7IiIsIDB9LA0KCX07DQoJc2l6ZV90IGxlbjEgPSBzdHJsZW4ocHJlZml4 MSksIGxlbjIgPSBzdHJsZW4ocHJlZml4Mik7DQoNCgl3aGlsZSAoX2dldGxpbmUoc3RkaW4pKSB7 DQoJCWlmIChza2lwcGluZyA+IDApIHsNCgkJCXN3aXRjaCAobGluZVswXSkgew0KCQkJY2FzZSAn Kyc6DQoJCQljYXNlICctJzoNCgkJCWNhc2UgJ1xcJzoNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJ fQ0KCQlmb3IgKGNtZCA9IDA7IHN0cm5jbXAobGluZSwgcHJlZltjbWRdLnMsIHByZWZbY21kXS5s ZW4pOyBjbWQrKykNCgkJCTsNCgkJc3dpdGNoIChjbWQpIHsNCgkJY2FzZSBIdW5rOg0KCQkJaWYg KHNraXBwaW5nIDwgMCkNCgkJCQlnb3RvIEVkaWZmOw0KCQkJaWYgKCFzdXBwcmVzcykgew0KCQkJ CWlmICghc2tpcHBpbmcpDQoJCQkJCXByaW50ZigiTSAlcyAlc1xuIiwgbmFtZTEsIG5hbWUyKTsN CgkJCQlpZiAoIXBhcnNlX2h1bmsoJmwxLCAmbDIsICZuMSwgJm4yKSkNCgkJCQkJZ290byBFZGlm ZjsNCgkJCQlpZiAobDEgPiBmcm9tKQ0KCQkJCQlwcmludGYoIiVkICVkXG4iLCBmcm9tLCB0byk7 DQoJCQkJaWYgKG4xKQ0KCQkJCQlwcmludGYoIiVkIDBcbiIsIGwxKTsNCgkJCQlmcm9tID0gbDEg KyBuMTsNCgkJCQl0byA9IGwyICsgbjI7DQoJCQl9DQoJCQlza2lwcGluZyA9IDE7DQoJCQlicmVh azsNCgkJY2FzZSBEaWZmOg0KCQkJaWYgKCFzdXBwcmVzcykgew0KCQkJCWlmICghc2tpcHBpbmcp DQoJCQkJCXByaW50ZigiTSAlcyAlc1xuIiwgbmFtZTEsIG5hbWUyKTsNCgkJCQlwcmludGYoIiVk ICVkXG4iLCBmcm9tLCB0byk7DQoJCQl9DQoJCQlmcmVlKG5hbWUxKTsNCgkJCWZyZWUobmFtZTIp Ow0KCQkJbmFtZTIgPSBzdHJyY2hyKGxpbmUsICcgJyk7DQoJCQlpZiAoIW5hbWUyKQ0KCQkJCWdv dG8gRWRpZmY7DQoJCQkqbmFtZTIgPSAnXDAnOw0KCQkJbmFtZTEgPSBzdHJyY2hyKGxpbmUsICcg Jyk7DQoJCQlpZiAoIW5hbWUxKQ0KCQkJCWdvdG8gRWRpZmY7DQoJCQlpZiAoc3RybmNtcChuYW1l MSArIDEsIHByZWZpeDEsIGxlbjEpKQ0KCQkJCWdvdG8gRWRpZmY7DQoJCQlpZiAoc3RybmNtcChu YW1lMiArIDEsIHByZWZpeDIsIGxlbjIpKQ0KCQkJCWdvdG8gRWRpZmY7DQoJCQluYW1lMSA9IHN0 cmR1cChuYW1lMSArIGxlbjEgKyAxKTsNCgkJCW5hbWUyID0gc3RyZHVwKG5hbWUyICsgbGVuMiAr IDEpOw0KCQkJaWYgKCFuYW1lMSB8fCAhbmFtZTIpDQoJCQkJZ290byBFZGlmZjsNCgkJCXNraXBw aW5nID0gMDsNCgkJCXN1cHByZXNzID0gMDsNCgkJCWZyb20gPSB0byA9IDE7DQoJCQlicmVhazsN CgkJY2FzZSBOZXc6DQoJCQlpZiAoc2tpcHBpbmcpDQoJCQkJZ290byBFZGlmZjsNCgkJCXN1cHBy ZXNzID0gMTsNCgkJCWJyZWFrOw0KCQljYXNlIERlbDoNCgkJY2FzZSBDb3B5Og0KCQkJaWYgKHNr aXBwaW5nKQ0KCQkJCWdvdG8gRWRpZmY7DQoJCQlwcmludGYoIkQgJXNcbiIsIG5hbWUyKTsNCgkJ CXN1cHByZXNzID0gMTsNCgkJCWJyZWFrOw0KCQljYXNlIFJlbmFtZToNCgkJCWlmIChza2lwcGlu ZykNCgkJCQlnb3RvIEVkaWZmOw0KCQkJcHJpbnRmKCJEICVzXG4iLCBuYW1lMik7DQoJCQlicmVh azsNCgkJZGVmYXVsdDoNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KCXJldHVybjsNCkVkaWZmOg0KCWRp ZSgib2RkIGRpZmYiKTsNCn0NCg0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0Kew0K CWNoYXIgKm1hcF9uYW1lID0gTlVMTDsNCgljaGFyIG9wdDsNCgljaGFyICphcmc7DQoJc2l6ZV90 IGxlbjsNCglzaXplID0gMjU2Ow0KCWxpbmUgPSBtYWxsb2Moc2l6ZSk7DQoJaWYgKCFsaW5lKQ0K CQlFbm9tZW0oKTsNCglmb3IgKGFyZ2MtLSwgYXJndisrOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykg ew0KCQlpZiAoYXJndlswXVswXSAhPSAnLScpIHsNCgkJCW1hcF9uYW1lID0gYXJndlswXTsNCgkJ CWNvbnRpbnVlOw0KCQl9DQoJCW9wdCA9IGFyZ3ZbMF1bMV07DQoJCWlmICghb3B0KQ0KCQkJZ290 byBFYXJnczsNCgkJYXJnID0gYXJndlswXSArIDI7DQoJCWlmICghKmFyZykgew0KCQkJaWYgKCEt LWFyZ2MpDQoJCQkJZ290byBFYXJnczsNCgkJCWFyZyA9ICorK2FyZ3Y7DQoJCX0NCgkJbGVuID0g c3RybGVuKGFyZyk7DQoJCXN3aXRjaCAob3B0KSB7DQoJCWNhc2UgJ08nOg0KCQkJcHJlZml4MSA9 IG1hbGxvYyhsZW4gKyAyKTsNCgkJCWlmICghcHJlZml4MSkNCgkJCQlFbm9tZW0oKTsNCgkJCW1l bWNweShwcmVmaXgxLCBhcmcsIGxlbik7DQoJCQlwcmVmaXgxW2xlbl0gPSAnLyc7DQoJCQlwcmVm aXgxW2xlbiArIDFdID0gJ1wwJzsNCgkJCWJyZWFrOw0KCQljYXNlICdOJzoNCgkJCXByZWZpeDIg PSBtYWxsb2MobGVuICsgMik7DQoJCQlpZiAoIXByZWZpeDIpDQoJCQkJRW5vbWVtKCk7DQoJCQlt ZW1jcHkocHJlZml4MiwgYXJnLCBsZW4pOw0KCQkJcHJlZml4MltsZW5dID0gJy8nOw0KCQkJcHJl Zml4MltsZW4gKyAxXSA9ICdcMCc7DQoJCQlicmVhazsNCgkJY2FzZSAncCc6DQoJCQlmcm9tX3By ZWZpeCA9IGFyZzsNCgkJCWZyb21fbGVuID0gbGVuOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ28nOg0K CQkJb2xkX3ByZWZpeCA9IGFyZzsNCgkJCWJyZWFrOw0KCQljYXNlICduJzoNCgkJCW5ld19wcmVm aXggPSBhcmc7DQoJCQlicmVhazsNCgkJZGVmYXVsdDoNCgkJRWFyZ3M6DQoJCQlkaWUoImJhZCBh cmd1bWVudHMiKTsNCgkJfQ0KCX0NCg0KCWlmICghbWFwX25hbWUpIHsNCgkJcGFyc2VfZGlmZigp Ow0KCX0gZWxzZSB7DQoJCXBhcnNlX21hcChtYXBfbmFtZSk7DQoJCXdoaWxlIChfZ2V0bGluZShz dGRpbikpDQoJCQltYXBsaW5lKCk7DQoJfQ0KCXJldHVybiAwOw0KDQp9DQo= --=-V4vBe+DBxU5RWsXfcwFt-- --=-LcrVTrNlswiaeFmgXrun Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJOstRFAAoJECmIfjd9wqK0DawP/RitE99Gn1jE8gIPvdQ1tFzl qbKnAFQfcnyahDmgtvXarpAFZ0CRGO+9JCx9HxvD1Vth3BQRJYxrEsmMxeK172Ra 0M7VKC0tiVVT8lkLN+34SK/3SkBeY8kExVZ+tk9jDVyZFXnht/KdQodIcDzu5fuw oO/hEf+rtgk9DK0xWYZ0P16IpkXXn0BTTEtHz39lykutfEX9RT5yuMi+6R5CNSg0 lQXLoujVkf4hW2HXZb+zDunm07ISsxbIapvwsznyR87Q2aFvde84nxtifooSsqRm X2HNCjk/+Dx/kwBmZvo0kUWc9/Bg4b1u3OhcwQe903bagP3akFcMYTj2qcsEuY3N pt9VsFRhSYcbyd6KFQ1eJoWOjMDfKUf3+xQ1YmiIEDXMmX4J0LVg4JIorOLYfl3Z abo1xYixTfiXduS873vNCQ8OWLpxoUZC1W5VhxZvtnN7R5ILKYI0otGeWYW42T6c LQdiJgQLl7Pi/iRXWnV3QnTJEEwiDtrdGc6+u9bg3eK6iIzhHRHErUCdn/1B7NxR yV0MShOLG6Jw351Ta1w4KukjJ3UsWeWcA/Vg6vGZoXSJJTbnRqfk18zIJlkd4At/ SygJ89idIDyoj1z1F3fOzCcbFQwwm4tUR1XSF7u6awX7ao2okYJAn5k9QTYb4ya2 axW9sl8JxUBZQI9We7+z =M/QH -----END PGP SIGNATURE----- --=-LcrVTrNlswiaeFmgXrun--