From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: [RFC] position caches Date: Tue, 12 Mar 2013 11:56:26 +0400 Message-ID: <513EDFAA.8030803@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060106070107010402000802" X-Trace: ger.gmane.org 1363075008 19543 80.91.229.3 (12 Mar 2013 07:56:48 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 12 Mar 2013 07:56:48 +0000 (UTC) Cc: Eli Zaretskii To: Emacs development discussions Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Mar 12 08:57:13 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UFK54-0007XL-7Q for ged-emacs-devel@m.gmane.org; Tue, 12 Mar 2013 08:57:06 +0100 Original-Received: from localhost ([::1]:41704 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UFK4h-0007oM-QG for ged-emacs-devel@m.gmane.org; Tue, 12 Mar 2013 03:56:43 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:43745) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UFK4e-0007oF-1x for emacs-devel@gnu.org; Tue, 12 Mar 2013 03:56:41 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UFK4b-0004oj-FN for emacs-devel@gnu.org; Tue, 12 Mar 2013 03:56:39 -0400 Original-Received: from forward20.mail.yandex.net ([95.108.253.145]:48616) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UFK4W-0004lm-FW; Tue, 12 Mar 2013 03:56:33 -0400 Original-Received: from smtp17.mail.yandex.net (smtp17.mail.yandex.net [95.108.252.17]) by forward20.mail.yandex.net (Yandex) with ESMTP id 3DD651041131; Tue, 12 Mar 2013 11:56:27 +0400 (MSK) Original-Received: from smtp17.mail.yandex.net (localhost [127.0.0.1]) by smtp17.mail.yandex.net (Yandex) with ESMTP id 0E81519003E6; Tue, 12 Mar 2013 11:56:27 +0400 (MSK) Original-Received: from unknown (unknown [37.139.80.10]) by smtp17.mail.yandex.net (nwsmtp/Yandex) with ESMTP id uQBa1O7O-uQB0Sp1Y; Tue, 12 Mar 2013 11:56:26 +0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1363074987; bh=uc2Nt1vrOSLTQh4smdaDzMumQzCyQvFBItOO5TABZl4=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject: Content-Type; b=E2BEr1t/RyoqBXhEV0Mqg4Wvf0sCf0RpVgqluOxMAiOFemaXXF6x/A4cypjCOCimb sgrS6OhWj6MIyt3j+GTgTiMgGYD2PqyaBecytNJeJ5HewCGKQqpXqLz9yK8sHgkDkv lhAlNjzHp7IEQMzU8k+3aAVdxi40TK4ZTYpUEMy0= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130215 Thunderbird/17.0.3 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 95.108.253.145 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:157761 Archived-At: This is a multi-part message in MIME format. --------------060106070107010402000802 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This was designed in attempt to avoid long buffer scans in bidi_find_paragraph_start. The same stuff may be used to implement simple per-buffer charpos <-> bytepos cache. Caching the result of bidi_find_paragraph_start may improve the speed of backward scrolling/movement (I've seen ~6x speedup for 60M buffer with average string of 5K characters). Comments are highly appreciated. Dmitry --------------060106070107010402000802 Content-Type: text/plain; charset=UTF-8; name="pos_cache.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pos_cache.patch" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9iaWRpLmMnCi0tLSBzcmMvYmlkaS5jCTIwMTMtMDMt MDggMDk6MzQ6MzUgKzAwMDAKKysrIHNyYy9iaWRpLmMJMjAxMy0wMy0xMiAwNzozOToyNyAr MDAwMApAQCAtMTA5NywyNCArMTA5NywzMyBAQAogc3RhdGljIHB0cmRpZmZfdAogYmlkaV9m aW5kX3BhcmFncmFwaF9zdGFydCAocHRyZGlmZl90IHBvcywgcHRyZGlmZl90IHBvc19ieXRl KQogewotICBMaXNwX09iamVjdCByZSA9IHBhcmFncmFwaF9zdGFydF9yZTsKLSAgcHRyZGlm Zl90IGxpbWl0ID0gWlYsIGxpbWl0X2J5dGUgPSBaVl9CWVRFOwotICBwdHJkaWZmX3QgbiA9 IDA7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBjdXJyZW50X2J1ZmZlcjsKIAotICB3aGlsZSAo cG9zX2J5dGUgPiBCRUdWX0JZVEUKLQkgJiYgbisrIDwgTUFYX1BBUkFHUkFQSF9TRUFSQ0gK LQkgJiYgZmFzdF9sb29raW5nX2F0IChyZSwgcG9zLCBwb3NfYnl0ZSwgbGltaXQsIGxpbWl0 X2J5dGUsIFFuaWwpIDwgMCkKKyAgaWYgKHZhbGlkX3Bvc19jYWNoZSAoYiwgJmItPmJpZGlf cGFyYWdyYXBoX2NhY2hlKQorICAgICAgJiYgYi0+YmlkaV9wYXJhZ3JhcGhfY2FjaGUuYnVm cG9zID09IHBvc19ieXRlKQorICAgIHJldHVybiBiLT5iaWRpX3BhcmFncmFwaF9jYWNoZS5w b3N2YWw7CisgIGVsc2UKICAgICB7Ci0gICAgICAvKiBGSVhNRTogV2hhdCBpZiB0aGUgcGFy YWdyYXBoIGJlZ2lubmluZyBpcyBjb3ZlcmVkIGJ5IGEKLQkgZGlzcGxheSBzdHJpbmc/ICBB bmQgd2hhdCBpZiBhIGRpc3BsYXkgc3RyaW5nIGNvdmVyaW5nIHNvbWUKLQkgb2YgdGhlIHRl eHQgb3ZlciB3aGljaCB3ZSBzY2FuIGJhY2sgaW5jbHVkZXMKLQkgcGFyYWdyYXBoX3N0YXJ0 X3JlPyAgKi8KLSAgICAgIERFQ19CT1RIIChwb3MsIHBvc19ieXRlKTsKLSAgICAgIHBvcyA9 IGZpbmRfbmV3bGluZV9ub19xdWl0IChwb3MsIHBvc19ieXRlLCAtMSwgJnBvc19ieXRlKTsK KyAgICAgIHB0cmRpZmZfdCBuID0gMCwgc2F2ZWRwb3MgPSBwb3NfYnl0ZTsKKworICAgICAg d2hpbGUgKHBvc19ieXRlID4gQkVHVl9CWVRFCisJICAgICAmJiBuKysgPCBNQVhfUEFSQUdS QVBIX1NFQVJDSAorCSAgICAgJiYgZmFzdF9sb29raW5nX2F0IChwYXJhZ3JhcGhfc3RhcnRf cmUsIHBvcywgcG9zX2J5dGUsCisJCQkJIFpWLCBaVl9CWVRFLCBRbmlsKSA8IDApCisJewor CSAgLyogRklYTUU6IFdoYXQgaWYgdGhlIHBhcmFncmFwaCBiZWdpbm5pbmcgaXMgY292ZXJl ZCBieSBhCisJICAgICBkaXNwbGF5IHN0cmluZz8gIEFuZCB3aGF0IGlmIGEgZGlzcGxheSBz dHJpbmcgY292ZXJpbmcgc29tZQorCSAgICAgb2YgdGhlIHRleHQgb3ZlciB3aGljaCB3ZSBz Y2FuIGJhY2sgaW5jbHVkZXMKKwkgICAgIHBhcmFncmFwaF9zdGFydF9yZT8gICovCisJICBE RUNfQk9USCAocG9zLCBwb3NfYnl0ZSk7CisJICBwb3MgPSBmaW5kX25ld2xpbmVfbm9fcXVp dCAocG9zLCBwb3NfYnl0ZSwgLTEsICZwb3NfYnl0ZSk7CisJfQorICAgICAgaWYgKG4gPj0g TUFYX1BBUkFHUkFQSF9TRUFSQ0gpCisJcG9zX2J5dGUgPSBCRUdWX0JZVEU7CisKKyAgICAg IHVwZGF0ZV9wb3NfY2FjaGUgKGIsICZiLT5iaWRpX3BhcmFncmFwaF9jYWNoZSwgc2F2ZWRw b3MsIHBvc19ieXRlKTsKKyAgICAgIHJldHVybiBwb3NfYnl0ZTsKICAgICB9Ci0gIGlmIChu ID49IE1BWF9QQVJBR1JBUEhfU0VBUkNIKQotICAgIHBvc19ieXRlID0gQkVHVl9CWVRFOwot ICByZXR1cm4gcG9zX2J5dGU7CiB9CiAKIC8qIE9uIGEgMy40IEdIeiBtYWNoaW5lLCBzZWFy Y2hpbmcgZm9yd2FyZCBmb3IgYSBzdHJvbmcgZGlyZWN0aW9uYWwKCj09PSBtb2RpZmllZCBm aWxlICdzcmMvYnVmZmVyLmMnCi0tLSBzcmMvYnVmZmVyLmMJMjAxMy0wMS0xOSAyMDowNDoz MyArMDAwMAorKysgc3JjL2J1ZmZlci5jCTIwMTMtMDMtMTIgMDc6Mzk6MzcgKzAwMDAKQEAg LTkzMSw2ICs5MzEsOCBAQAogewogICBic2V0X2ZpbGVuYW1lIChiLCBRbmlsKTsKICAgYnNl dF9maWxlX3RydWVuYW1lIChiLCBRbmlsKTsKKyAgaW5pdF9wb3NfY2FjaGUgKCZiLT5jaGFy X2J5dGVfY2FjaGUpOworICBpbml0X3Bvc19jYWNoZSAoJmItPmJpZGlfcGFyYWdyYXBoX2Nh Y2hlKTsKICAgYnNldF9kaXJlY3RvcnkgKGIsIGN1cnJlbnRfYnVmZmVyID8gQlZBUiAoY3Vy cmVudF9idWZmZXIsIGRpcmVjdG9yeSkgOiBRbmlsKTsKICAgYi0+bW9kdGltZSA9IG1ha2Vf ZW1hY3NfdGltZSAoMCwgVU5LTk9XTl9NT0RUSU1FX05TRUNTKTsKICAgYi0+bW9kdGltZV9z aXplID0gLTE7CkBAIC0xODQ0LDggKzE4NDYsNiBAQAogICAgICBpbnNpc3RlZCBvbiBjaXJj dWxhciBsaXN0cykgc28gYWxsb3cgcXVpdHRpbmcgaGVyZS4gICovCiAgIGZyYW1lc19kaXNj YXJkX2J1ZmZlciAoYnVmZmVyKTsKIAotICBjbGVhcl9jaGFycG9zX2NhY2hlIChiKTsKLQog ICB0ZW0gPSBWaW5oaWJpdF9xdWl0OwogICBWaW5oaWJpdF9xdWl0ID0gUXQ7CiAgIC8qIFJl bW92ZSB0aGUgYnVmZmVyIGZyb20gdGhlIGxpc3Qgb2YgYWxsIGJ1ZmZlcnMuICAqLwpAQCAt MjM1Miw2ICsyMzUyLDggQEAKICAgY3VycmVudF9idWZmZXItPmNsaXBfY2hhbmdlZCA9IDE7 CW90aGVyX2J1ZmZlci0+Y2xpcF9jaGFuZ2VkID0gMTsKICAgc3dhcGZpZWxkIChuZXdsaW5l X2NhY2hlLCBzdHJ1Y3QgcmVnaW9uX2NhY2hlICopOwogICBzd2FwZmllbGQgKHdpZHRoX3J1 bl9jYWNoZSwgc3RydWN0IHJlZ2lvbl9jYWNoZSAqKTsKKyAgc3dhcGZpZWxkIChjaGFyX2J5 dGVfY2FjaGUsIHN0cnVjdCBwb3NfY2FjaGUpOworICBzd2FwZmllbGQgKGJpZGlfcGFyYWdy YXBoX2NhY2hlLCBzdHJ1Y3QgcG9zX2NhY2hlKTsKICAgY3VycmVudF9idWZmZXItPnByZXZl bnRfcmVkaXNwbGF5X29wdGltaXphdGlvbnNfcCA9IDE7CiAgIG90aGVyX2J1ZmZlci0+cHJl dmVudF9yZWRpc3BsYXlfb3B0aW1pemF0aW9uc19wID0gMTsKICAgc3dhcGZpZWxkIChvdmVy bGF5c19iZWZvcmUsIHN0cnVjdCBMaXNwX092ZXJsYXkgKik7CkBAIC0yNDU5LDkgKzI0NjEs NiBAQAogICAgICBpbnN0ZWFkLiAgKi8KICAgYnNldF91bmRvX2xpc3QgKGN1cnJlbnRfYnVm ZmVyLCBRdCk7CiAKLSAgLyogSWYgdGhlIGNhY2hlZCBwb3NpdGlvbiBpcyBmb3IgdGhpcyBi dWZmZXIsIGNsZWFyIGl0IG91dC4gICovCi0gIGNsZWFyX2NoYXJwb3NfY2FjaGUgKGN1cnJl bnRfYnVmZmVyKTsKLQogICBpZiAoTklMUCAoZmxhZykpCiAgICAgYmVndiA9IEJFR1ZfQllU RSwgenYgPSBaVl9CWVRFOwogICBlbHNlCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2J1ZmZl ci5oJwotLS0gc3JjL2J1ZmZlci5oCTIwMTMtMDEtMTcgMDU6NTI6MTMgKzAwMDAKKysrIHNy Yy9idWZmZXIuaAkyMDEzLTAzLTEyIDA3OjM5OjU0ICswMDAwCkBAIC00MTIsNyArNDEyLDE4 IEBACiAKICNkZWZpbmUgQlVGX0ZFVENIX0JZVEUoYnVmLCBuKSBcCiAgICooQlVGX0JZVEVf QUREUkVTUyAoKGJ1ZiksIChuKSkpCi0MCisKKy8qIENvbnZlbmllbnQgbWV0aG9kIHRvIGNh Y2hlIHRoZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIHR3bworICAgYnVmZmVyIHBvc2l0aW9u cy4gIFVubGlrZSBtYXJrZXJzLCB0aGUgY2FjaGUgaXMgbm90IHVwZGF0ZWQKKyAgIHdoZW4g dGhlIGJ1ZmZlciB0ZXh0IGlzIGNoYW5nZWQgYnV0IGp1c3QgaW52YWxpZGF0ZWQuICAqLwor CitzdHJ1Y3QgcG9zX2NhY2hlCisgIHsKKyAgICBFTUFDU19JTlQgbW9kaWZmOworICAgIHB0 cmRpZmZfdCBidWZwb3M7CisgICAgcHRyZGlmZl90IHBvc3ZhbDsKKyAgfTsKKwogLyogRGVm aW5lIHRoZSBhY3R1YWwgYnVmZmVyIGRhdGEgc3RydWN0dXJlcy4gICovCiAKIC8qIFRoaXMg ZGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBhY3R1YWwgdGV4dCBjb250ZW50cyBvZiBh IGJ1ZmZlci4KQEAgLTg2MSw2ICs4NzIsMTQgQEAKICAgLyogUG9zaXRpb24gd2hlcmUgdGhl IG92ZXJsYXkgbGlzdHMgYXJlIGNlbnRlcmVkLiAgKi8KICAgcHRyZGlmZl90IG92ZXJsYXlf Y2VudGVyOwogCisgIC8qIFVzZWQgYnkgYnVmX2NoYXJwb3NfdG9fYnl0ZXBvcyBhbmQgYnVm X2J5dGVwb3NfdG9fY2hhcnBvcy4KKyAgICAgQWxzbyB1cGRhdGVkIHdpdGggSU5DX0JPVEgg YW5kIERFQ19CT1RIIG1hY3Jvcy4gICovCisgIHN0cnVjdCBwb3NfY2FjaGUgY2hhcl9ieXRl X2NhY2hlOworCisgIC8qIFVzZWQgYnkgYmlkaV9maW5kX3BhcmFncmFwaF9zdGFydCBpbiBh dHRlbXB0IHRvIGF2b2lkCisgICAgIGxvbmcgYnVmZmVyIHNjYW5zLiAgKi8KKyAgc3RydWN0 IHBvc19jYWNoZSBiaWRpX3BhcmFncmFwaF9jYWNoZTsKKwogICAvKiBDaGFuZ2VzIGluIHRo ZSBidWZmZXIgYXJlIHJlY29yZGVkIGhlcmUgZm9yIHVuZG8sIGFuZCB0IG1lYW5zCiAgICAg IGRvbid0IHJlY29yZCBhbnl0aGluZy4gIFRoaXMgaW5mb3JtYXRpb24gYmVsb25ncyB0byB0 aGUgYmFzZQogICAgICBidWZmZXIgb2YgYW4gaW5kaXJlY3QgYnVmZmVyLiAgQnV0IHdlIGNh bid0IHN0b3JlIGl0IGluIHRoZQpAQCAtODY5LDYgKzg4OCwzMCBAQAogICBMaXNwX09iamVj dCBJTlRFUk5BTF9GSUVMRCAodW5kb19saXN0KTsKIH07CiAKKy8qIFNpbXBsZSBwb3NpdGlv biBjYWNoZSBBUEkuICAqLworCitCVUZGRVJfSU5MSU5FIHZvaWQKK2luaXRfcG9zX2NhY2hl IChzdHJ1Y3QgcG9zX2NhY2hlICpwYykKK3sKKyAgcGMtPm1vZGlmZiA9IDE7CisgIHBjLT5i dWZwb3MgPSBwYy0+cG9zdmFsID0gMDsKK30KKworQlVGRkVSX0lOTElORSBib29sCit2YWxp ZF9wb3NfY2FjaGUgKHN0cnVjdCBidWZmZXIgKmIsIHN0cnVjdCBwb3NfY2FjaGUgKnBjKQor eworICByZXR1cm4gQlVGX01PRElGRiAoYikgPT0gcGMtPm1vZGlmZjsKK30KKworQlVGRkVS X0lOTElORSB2b2lkCit1cGRhdGVfcG9zX2NhY2hlIChzdHJ1Y3QgYnVmZmVyICpiLCBzdHJ1 Y3QgcG9zX2NhY2hlICpwYywKKwkJICBwdHJkaWZmX3QgcG9zLCBwdHJkaWZmX3QgdmFsKQor eworICBwYy0+bW9kaWZmID0gQlVGX01PRElGRiAoYik7CisgIHBjLT5idWZwb3MgPSBwb3M7 CisgIHBjLT5wb3N2YWwgPSB2YWw7Cit9CisKIC8qIE1vc3QgY29kZSBzaG91bGQgdXNlIHRo ZXNlIGZ1bmN0aW9ucyB0byBzZXQgTGlzcCBmaWVsZHMgaW4gc3RydWN0CiAgICBidWZmZXIu ICAqLwogQlVGRkVSX0lOTElORSB2b2lkCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2NoYXJh Y3Rlci5oJwotLS0gc3JjL2NoYXJhY3Rlci5oCTIwMTItMDktMjYgMjA6MDA6MjkgKzAwMDAK KysrIHNyYy9jaGFyYWN0ZXIuaAkyMDEzLTAzLTEyIDA3OjQwOjA5ICswMDAwCkBAIC01MDEs MTAgKzUwMSwxNCBAQAogICBkbwkJCQkJCQkJXAogICAgIHsJCQkJCQkJCVwKICAgICAgIChj aGFycG9zKSsrOwkJCQkJCVwKLSAgICAgIGlmIChOSUxQIChCVkFSIChjdXJyZW50X2J1ZmZl ciwgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCVwKKyAgICAgIGlmIChOSUxQIChC VkFSIChjdXJyZW50X2J1ZmZlciwJCQkJXAorCQkgICAgICBlbmFibGVfbXVsdGlieXRlX2No YXJhY3RlcnMpKSkJCVwKIAkoYnl0ZXBvcykrKzsJCQkJCQlcCiAgICAgICBlbHNlCQkJCQkJ CVwKIAlJTkNfUE9TICgoYnl0ZXBvcykpOwkJCQkJXAorICAgICAgdXBkYXRlX3Bvc19jYWNo ZSAoY3VycmVudF9idWZmZXIsCQkJCVwKKwkJCSZjdXJyZW50X2J1ZmZlci0+Y2hhcl9ieXRl X2NhY2hlLAlcCisJCQljaGFycG9zLCBieXRlcG9zKTsJCQlcCiAgICAgfQkJCQkJCQkJXAog ICB3aGlsZSAoMCkKIApAQCAtNTE1LDEwICs1MTksMTQgQEAKICAgZG8JCQkJCQkJCVwKICAg ICB7CQkJCQkJCQlcCiAgICAgICAoY2hhcnBvcyktLTsJCQkJCQlcCi0gICAgICBpZiAoTklM UCAoQlZBUiAoY3VycmVudF9idWZmZXIsIGVuYWJsZV9tdWx0aWJ5dGVfY2hhcmFjdGVycykp KQlcCisgICAgICBpZiAoTklMUCAoQlZBUiAoY3VycmVudF9idWZmZXIsCQkJCVwKKwkJICAg ICAgZW5hYmxlX211bHRpYnl0ZV9jaGFyYWN0ZXJzKSkpCQlcCiAJKGJ5dGVwb3MpLS07CQkJ CQkJXAogICAgICAgZWxzZQkJCQkJCQlcCiAJREVDX1BPUyAoKGJ5dGVwb3MpKTsJCQkJCVwK KyAgICAgIHVwZGF0ZV9wb3NfY2FjaGUgKGN1cnJlbnRfYnVmZmVyLAkJCQlcCisJCQkmY3Vy cmVudF9idWZmZXItPmNoYXJfYnl0ZV9jYWNoZSwJXAorCQkJY2hhcnBvcywgYnl0ZXBvcyk7 CQkJXAogICAgIH0JCQkJCQkJCVwKICAgd2hpbGUgKDApCiAKCj09PSBtb2RpZmllZCBmaWxl ICdzcmMvbGlzcC5oJwotLS0gc3JjL2xpc3AuaAkyMDEzLTAzLTExIDA0OjAyOjA2ICswMDAw CisrKyBzcmMvbGlzcC5oCTIwMTMtMDMtMTIgMDc6MTQ6MjIgKzAwMDAKQEAgLTMzMTksNyAr MzMxOSw2IEBACiAKIGV4dGVybiBwdHJkaWZmX3QgbWFya2VyX3Bvc2l0aW9uIChMaXNwX09i amVjdCk7CiBleHRlcm4gcHRyZGlmZl90IG1hcmtlcl9ieXRlX3Bvc2l0aW9uIChMaXNwX09i amVjdCk7Ci1leHRlcm4gdm9pZCBjbGVhcl9jaGFycG9zX2NhY2hlIChzdHJ1Y3QgYnVmZmVy ICopOwogZXh0ZXJuIHB0cmRpZmZfdCBidWZfY2hhcnBvc190b19ieXRlcG9zIChzdHJ1Y3Qg YnVmZmVyICosIHB0cmRpZmZfdCk7CiBleHRlcm4gcHRyZGlmZl90IGJ1Zl9ieXRlcG9zX3Rv X2NoYXJwb3MgKHN0cnVjdCBidWZmZXIgKiwgcHRyZGlmZl90KTsKIGV4dGVybiB2b2lkIHVu Y2hhaW5fbWFya2VyIChzdHJ1Y3QgTGlzcF9NYXJrZXIgKm1hcmtlcik7Cgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL21hcmtlci5jJwotLS0gc3JjL21hcmtlci5jCTIwMTMtMDItMTkgMTQ6 NDQ6MDMgKzAwMDAKKysrIHNyYy9tYXJrZXIuYwkyMDEzLTAzLTEyIDA3OjQwOjQzICswMDAw CkBAIC0yNCwxNCArMjQsNiBAQAogI2luY2x1ZGUgImNoYXJhY3Rlci5oIgogI2luY2x1ZGUg ImJ1ZmZlci5oIgogCi0vKiBSZWNvcmQgb25lIGNhY2hlZCBwb3NpdGlvbiBmb3VuZCByZWNl bnRseSBieQotICAgYnVmX2NoYXJwb3NfdG9fYnl0ZXBvcyBvciBidWZfYnl0ZXBvc190b19j aGFycG9zLiAgKi8KLQotc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRfY2hhcnBvczsKLXN0YXRp YyBwdHJkaWZmX3QgY2FjaGVkX2J5dGVwb3M7Ci1zdGF0aWMgc3RydWN0IGJ1ZmZlciAqY2Fj aGVkX2J1ZmZlcjsKLXN0YXRpYyBFTUFDU19JTlQgY2FjaGVkX21vZGlmZjsKLQogLyogSnVh bm1hIEJhcnJhbnF1ZXJvIDxsZWtrdHVAZ21haWwuY29tPiByZXBvcnRlZCB+M3ggaW5jcmVh c2VkCiAgICBib290c3RyYXAgdGltZSB3aGVuIGJ5dGVfY2hhcl9kZWJ1Z19jaGVjayBpcyBl bmFibGVkOyBzbyB0aGlzCiAgICBpcyBuZXZlciB0dXJuZWQgb24gYnkgLS1lbmFibGUtY2hl Y2tpbmcgY29uZmlndXJlIG9wdGlvbi4gICovCkBAIC02OSwxMyArNjEsNiBAQAogCiAjZW5k aWYgLyogTUFSS0VSX0RFQlVHICovCiAKLXZvaWQKLWNsZWFyX2NoYXJwb3NfY2FjaGUgKHN0 cnVjdCBidWZmZXIgKmIpCi17Ci0gIGlmIChjYWNoZWRfYnVmZmVyID09IGIpCi0gICAgY2Fj aGVkX2J1ZmZlciA9IDA7Ci19Ci0MCiAvKiBDb252ZXJ0aW5nIGJldHdlZW4gY2hhcmFjdGVy IHBvc2l0aW9ucyBhbmQgYnl0ZSBwb3NpdGlvbnMuICAqLwogCiAvKiBUaGVyZSBhcmUgc2V2 ZXJhbCBwbGFjZXMgaW4gdGhlIGJ1ZmZlciB3aGVyZSB3ZSBrbm93CkBAIC0xNjQsOCArMTQ5 LDggQEAKICAgQ09OU0lERVIgKEJVRl9CRUdWIChiKSwgQlVGX0JFR1ZfQllURSAoYikpOwog ICBDT05TSURFUiAoQlVGX1pWIChiKSwgQlVGX1pWX0JZVEUgKGIpKTsKIAotICBpZiAoYiA9 PSBjYWNoZWRfYnVmZmVyICYmIEJVRl9NT0RJRkYgKGIpID09IGNhY2hlZF9tb2RpZmYpCi0g ICAgQ09OU0lERVIgKGNhY2hlZF9jaGFycG9zLCBjYWNoZWRfYnl0ZXBvcyk7CisgIGlmICh2 YWxpZF9wb3NfY2FjaGUgKGIsICZiLT5jaGFyX2J5dGVfY2FjaGUpKQorICAgIENPTlNJREVS IChiLT5jaGFyX2J5dGVfY2FjaGUuYnVmcG9zLCBiLT5jaGFyX2J5dGVfY2FjaGUucG9zdmFs KTsKIAogICBmb3IgKHRhaWwgPSBCVUZfTUFSS0VSUyAoYik7IHRhaWw7IHRhaWwgPSB0YWls LT5uZXh0KQogICAgIHsKQEAgLTE5OSwxMSArMTg0LDcgQEAKIAlidWlsZF9tYXJrZXIgKGIs IGJlc3RfYmVsb3csIGJlc3RfYmVsb3dfYnl0ZSk7CiAKICAgICAgIGJ5dGVfY2hhcl9kZWJ1 Z19jaGVjayAoYiwgYmVzdF9iZWxvdywgYmVzdF9iZWxvd19ieXRlKTsKLQotICAgICAgY2Fj aGVkX2J1ZmZlciA9IGI7Ci0gICAgICBjYWNoZWRfbW9kaWZmID0gQlVGX01PRElGRiAoYik7 Ci0gICAgICBjYWNoZWRfY2hhcnBvcyA9IGJlc3RfYmVsb3c7Ci0gICAgICBjYWNoZWRfYnl0 ZXBvcyA9IGJlc3RfYmVsb3dfYnl0ZTsKKyAgICAgIHVwZGF0ZV9wb3NfY2FjaGUgKGIsICZi LT5jaGFyX2J5dGVfY2FjaGUsIGJlc3RfYmVsb3csIGJlc3RfYmVsb3dfYnl0ZSk7CiAKICAg ICAgIHJldHVybiBiZXN0X2JlbG93X2J5dGU7CiAgICAgfQpAQCAtMjI0LDExICsyMDUsNyBA QAogCWJ1aWxkX21hcmtlciAoYiwgYmVzdF9hYm92ZSwgYmVzdF9hYm92ZV9ieXRlKTsKIAog ICAgICAgYnl0ZV9jaGFyX2RlYnVnX2NoZWNrIChiLCBiZXN0X2Fib3ZlLCBiZXN0X2Fib3Zl X2J5dGUpOwotCi0gICAgICBjYWNoZWRfYnVmZmVyID0gYjsKLSAgICAgIGNhY2hlZF9tb2Rp ZmYgPSBCVUZfTU9ESUZGIChiKTsKLSAgICAgIGNhY2hlZF9jaGFycG9zID0gYmVzdF9hYm92 ZTsKLSAgICAgIGNhY2hlZF9ieXRlcG9zID0gYmVzdF9hYm92ZV9ieXRlOworICAgICAgdXBk YXRlX3Bvc19jYWNoZSAoYiwgJmItPmNoYXJfYnl0ZV9jYWNoZSwgYmVzdF9hYm92ZSwgYmVz dF9hYm92ZV9ieXRlKTsKIAogICAgICAgcmV0dXJuIGJlc3RfYWJvdmVfYnl0ZTsKICAgICB9 CkBAIC0zMDcsOCArMjg0LDggQEAKICAgQ09OU0lERVIgKEJVRl9CRUdWX0JZVEUgKGIpLCBC VUZfQkVHViAoYikpOwogICBDT05TSURFUiAoQlVGX1pWX0JZVEUgKGIpLCBCVUZfWlYgKGIp KTsKIAotICBpZiAoYiA9PSBjYWNoZWRfYnVmZmVyICYmIEJVRl9NT0RJRkYgKGIpID09IGNh Y2hlZF9tb2RpZmYpCi0gICAgQ09OU0lERVIgKGNhY2hlZF9ieXRlcG9zLCBjYWNoZWRfY2hh cnBvcyk7CisgIGlmICh2YWxpZF9wb3NfY2FjaGUgKGIsICZiLT5jaGFyX2J5dGVfY2FjaGUp KQorICAgIENPTlNJREVSIChiLT5jaGFyX2J5dGVfY2FjaGUucG9zdmFsLCBiLT5jaGFyX2J5 dGVfY2FjaGUuYnVmcG9zKTsKIAogICBmb3IgKHRhaWwgPSBCVUZfTUFSS0VSUyAoYik7IHRh aWw7IHRhaWwgPSB0YWlsLT5uZXh0KQogICAgIHsKQEAgLTM0NCwxMSArMzIxLDcgQEAKIAli dWlsZF9tYXJrZXIgKGIsIGJlc3RfYmVsb3csIGJlc3RfYmVsb3dfYnl0ZSk7CiAKICAgICAg IGJ5dGVfY2hhcl9kZWJ1Z19jaGVjayAoYiwgYmVzdF9iZWxvdywgYmVzdF9iZWxvd19ieXRl KTsKLQotICAgICAgY2FjaGVkX2J1ZmZlciA9IGI7Ci0gICAgICBjYWNoZWRfbW9kaWZmID0g QlVGX01PRElGRiAoYik7Ci0gICAgICBjYWNoZWRfY2hhcnBvcyA9IGJlc3RfYmVsb3c7Ci0g ICAgICBjYWNoZWRfYnl0ZXBvcyA9IGJlc3RfYmVsb3dfYnl0ZTsKKyAgICAgIHVwZGF0ZV9w b3NfY2FjaGUgKGIsICZiLT5jaGFyX2J5dGVfY2FjaGUsIGJlc3RfYmVsb3csIGJlc3RfYmVs b3dfYnl0ZSk7CiAKICAgICAgIHJldHVybiBiZXN0X2JlbG93OwogICAgIH0KQEAgLTM3MSwx MSArMzQ0LDcgQEAKIAlidWlsZF9tYXJrZXIgKGIsIGJlc3RfYWJvdmUsIGJlc3RfYWJvdmVf Ynl0ZSk7CiAKICAgICAgIGJ5dGVfY2hhcl9kZWJ1Z19jaGVjayAoYiwgYmVzdF9hYm92ZSwg YmVzdF9hYm92ZV9ieXRlKTsKLQotICAgICAgY2FjaGVkX2J1ZmZlciA9IGI7Ci0gICAgICBj YWNoZWRfbW9kaWZmID0gQlVGX01PRElGRiAoYik7Ci0gICAgICBjYWNoZWRfY2hhcnBvcyA9 IGJlc3RfYWJvdmU7Ci0gICAgICBjYWNoZWRfYnl0ZXBvcyA9IGJlc3RfYWJvdmVfYnl0ZTsK KyAgICAgIHVwZGF0ZV9wb3NfY2FjaGUgKGIsICZiLT5jaGFyX2J5dGVfY2FjaGUsIGJlc3Rf YWJvdmUsIGJlc3RfYWJvdmVfYnl0ZSk7CiAKICAgICAgIHJldHVybiBiZXN0X2Fib3ZlOwog ICAgIH0KCg== --------------060106070107010402000802--