Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v1nc4-00Ckwk-JM for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Sep 2025 15:10:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v1nby-003Rrs-8J for pgsql-hackers@arkaria.postgresql.org; Thu, 25 Sep 2025 15:10:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v1nbx-003Rre-MB for pgsql-hackers@lists.postgresql.org; Thu, 25 Sep 2025 15:10:21 +0000 Received: from forward100a.mail.yandex.net ([178.154.239.83]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v1nbu-0002ew-11 for pgsql-hackers@postgresql.org; Thu, 25 Sep 2025 15:10:21 +0000 Received: from mail-nwsmtp-smtp-production-main-92.iva.yp-c.yandex.net (mail-nwsmtp-smtp-production-main-92.iva.yp-c.yandex.net [IPv6:2a02:6b8:c0c:7501:0:640:380f:0]) by forward100a.mail.yandex.net (Yandex) with ESMTPS id A9679C007A; Thu, 25 Sep 2025 18:10:16 +0300 (MSK) Received: by mail-nwsmtp-smtp-production-main-92.iva.yp-c.yandex.net (smtp/Yandex) with ESMTPSA id CAbf9HSM1Ko0-DThQ9wUi; Thu, 25 Sep 2025 18:10:15 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1758813016; bh=Wq8PCVgqHrfo1LkT42gcdGR7byzb+83AOWpzK9u9X/w=; h=In-Reply-To:Cc:Date:References:To:Subject:Message-ID:From; b=nGctOf0r/7m9Ja2KmyFAJBRuyU62Cy8bDkROBn8qPY1ALyUf++QKGEQSAyKZt4eJG NuFbHfw65Ekb6i/1hBfWfWxpHoTEZS98DVrBFHcwf70FpuQSI/w0NjVdEYRBYpo10I zqToWsYcyM1FqwrLbpcCWHm5dtoLl7LluflQ+hj8= Authentication-Results: mail-nwsmtp-smtp-production-main-92.iva.yp-c.yandex.net; dkim=pass header.i=@yandex.ru Content-Type: multipart/mixed; boundary="------------hNwPRI2u6N2cJ2mNncngU2PE" Message-ID: <74fcdd4c-5fcc-411b-8667-87a798d762e1@yandex.ru> Date: Thu, 25 Sep 2025 18:10:12 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Vacuum statistics To: Bharath Rupireddy , Amit Kapila , Alexander Korotkov Cc: pgsql-hackers , Jim Nasby , Bertrand Drouvot , Ilia Evdokimov , Kirill Reshke , Andrei Zubkov , Masahiko Sawada , Melanie Plageman , jian he , a.lepikhov@postgrespro.ru, Sami Imseih , vignesh C References: <86f76aa5-1ab5-4e2e-9b15-405051852a2a@postgrespro.ru> <1e81a0a1-a63b-48fb-905a-d6495f89ab73@postgrespro.ru> <0b4eefc7-4c38-4caa-b2ca-a4c75dd7dd12@postgrespro.ru> <333c2306-c401-4959-9f0c-a44c670a11a9@postgrespro.ru> <513f0188-b093-4cc8-98cf-4c324570d525@postgrespro.ru> <47a7b784-5218-43f2-96e3-65f9a729c5a5@tantorlabs.com> <5583261b-eede-4341-b3b1-91650fefc1cf@postgrespro.ru> <2a04ad18-5572-4633-848b-eb57209e7ac0@postgrespro.ru> Content-Language: en-US From: Alena Rybakina In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------hNwPRI2u6N2cJ2mNncngU2PE Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi all, I’ve prepared an extension that adds vacuum statistics [0] (master branch), and it’s working stably. The attached patch is a core patch that enables this extension to work. Right now, I’m experimenting with a core patch. Specifically, in load_file I can detect whether vacuum_statistics is listed in shared_preload_libraries and, if so, start collecting vacuum statistics in the core. However, I think it would be more reliable to simply add a dedicated hook for vacuum statistics collection in the core. In my view, an extension may be loaded but disabled for vacuum statistics collection - and in that case we shouldn’t gather them. In general, I’m not entirely happy with the current organization. One issue that bothers me is having to scan the entire hash table to provide vacuum statistics for a database, with aggregation. At the moment, the hash table uses (dboid, reloid, type) as the key. This could be improved by introducing another hash table keyed by dboid, with entries containing arrays of the first table’s keys (dboid, reloid, type) (where dboid is either kept or omitted). The idea is that we find the relevant array for a given database and then aggregate its statistics by iterating over the first table using those keys. I’ve started implementing this approach in the main branch of the same repository, but I’m still working out the issues with dynamic memory management. I also have an idea for effectively splitting statistics into “core” and “extra.” Core statistics: For databases (also collected for tables and indexes): delay_time, total_time For tables: pages_scanned, pages_removed, tuples_deleted, vm_new_frozen_pages, vm_new_visible_pages For indexes: tuples_deleted, pages_deleted Extra statistics: For databases (also collected for tables and indexes): total_blks_read, total_blks_dirtied, total_blks_written, blks_fetched, blks_hit, blk_read_time, blk_write_time For tables: recently_dead_tuples, missed_dead_tuples, vm_new_visible_frozen_pages, missed_dead_pages, tuples_frozen WAL statistics (separately for databases and relations):wal_records, wal_fpi, wal_bytes I’ve already started drafting the first implementation, but I still need to carefully handle memory allocation. Additionally, I’m considering letting users define which databases, schemas, or tables/relations should have vacuum statistics collected. I believe this could be valuable for large, high-load systems. For example, the core statistics might show that a particular database is frequently vacuumed - so we could then focus on tracking only that one. Similarly, if certain tables are heavily updated by backends and vacuumed often, we could target those specifically. Conceptually, this would act like a filter, but at this point, it’s just an idea for a future improvement. This is the direction I’m planning to take with the patch. If you have alternative ideas about how to organize the code, I’d be glad to hear them! On 25.09.2025 03:03, Bharath Rupireddy wrote: > Hi, > > On Mon, May 12, 2025 at 5:30 AM Amit Kapila wrote: >> On Fri, May 9, 2025 at 5:34 PM Alena Rybakina wrote: >>> I did a rebase and finished the part with storing statistics separately from the relation statistics - now it is possible to disable the collection of statistics for relationsh using gucs and >>> this allows us to solve the problem with the memory consumed. >>> >> I think this patch is trying to collect data similar to what we do for >> pg_stat_statements for SQL statements. So, can't we follow a similar >> idea such that these additional statistics will be collected once some >> external module like pg_stat_statements is enabled? That module should >> be responsible for accumulating and resetting the data, so we won't >> have this memory consumption issue. >> >> BTW, how will these new statistics be used to autotune a vacuum? And >> do we need all the statistics proposed by this patch? > Thanks for working on this. I agree with the general idea of having > minimal changes to the core. I think a simple approach would be to > have a hook in heap_vacuum_rel at the end, where vacuum stats are > prepared in a buffer for emitting LOG messages. External modules can > then handle storing, rotating, interpreting, aggregating (per > relation/per database), and exposing the stats to end-users via SQL. > The core can define a common data structure, fill it, and send it to > external modules. I haven't had a chance to read the whole thread or > review the patches; I'm sure this has been discussed. > As for how this may help databases in practice, I think it deserves a separate thread once the vacuum statistics patch is pushed. In short, such statistics are essential to understand the real impact of vacuum on system load. For example: If vacuum runs very frequently on a table or index, this might point to table or index bloat, or to overly aggressive configuration. Conversely, if vacuum freezes or removes very few tuples, it may suggest that vacuum is not aggressive enough, or that delays are set too high. If missed_dead_pages and missed_dead_tuples are high compared to tuples_deleted, that may indicate vacuum can’t obtain a INDEX CLEANUP LOCK or doesn’t retry due to long delays. Statistics related to wraparound activity can also hint that autovacuum settings require adjustment. It’s also possible that this system could be made more automatic in the future, but I haven’t fully worked out how yet. I think that discussion belongs in a separate thread once vacuum statistics themselves are committed. [0] https://github.com/Alena0704/vacuum_statistics/tree/master ------------- Best regards, Alena Rybakina Postgres Professional --------------hNwPRI2u6N2cJ2mNncngU2PE Content-Type: text/x-patch; charset=UTF-8; name="vacuum_statistics.patch" Content-Disposition: attachment; filename="vacuum_statistics.patch" Content-Transfer-Encoding: base64 RnJvbSA4MWVmZjExYTA0NWQxNWE0NWY0MTgwNWFlYTVhYzM2NDM4YWNhZmE2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0 Z3Jlc3Byby5ydT4KRGF0ZTogVGh1LCA0IFNlcCAyMDI1IDE4OjE2OjUyICswMzAwClN1Ympl Y3Q6IENvcmUgcGF0Y2guCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxh enkuYyAgICAgICAgIHwgMzA4ICsrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyAgICAgIHwgIDEwICsKIHNyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9j b21tYW5kcy92YWN1dW0uYyAgICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9j b21tYW5kcy92YWN1dW1wYXJhbGxlbC5jICAgICAgICB8ICAxMiArCiBzcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYyB8ICAzNiArKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jICAgICAgICAgIHwgICA2ICsKIHNyYy9iYWNrZW5k L3V0aWxzL2Vycm9yL2Vsb2cuYyAgICAgICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgIHwgICA4ICsKIHNyYy9pbmNsdWRl L2NvbW1hbmRzL3ZhY3V1bS5oICAgICAgICAgICAgICAgIHwgIDI2ICsrCiBzcmMvaW5jbHVk ZS9wZ3N0YXQuaCAgICAgICAgICAgICAgICAgICAgICAgICB8IDExOCArKysrKystCiBzcmMv aW5jbHVkZS91dGlscy9lbG9nLmggICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgICB8ICAxMiArLQogMTMg ZmlsZXMgY2hhbmdlZCwgNTQ2IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwppbmRleCA5MzI3MDFkODQyMC4uYTU2 Y2IwMjIyZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxh enkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKQEAgLTI4 OSw2ICsyODksOCBAQCB0eXBlZGVmIHN0cnVjdCBMVlJlbFN0YXRlCiAJLyogRXJyb3IgcmVw b3J0aW5nIHN0YXRlICovCiAJY2hhcgkgICAqZGJuYW1lOwogCWNoYXIJICAgKnJlbG5hbWVz cGFjZTsKKwlPaWQJCQlyZWxvaWQ7CisJT2lkCQkJaW5kb2lkOwogCWNoYXIJICAgKnJlbG5h bWU7CiAJY2hhcgkgICAqaW5kbmFtZTsJCS8qIEN1cnJlbnQgaW5kZXggbmFtZSAqLwogCUJs b2NrTnVtYmVyIGJsa25vOwkJCS8qIHVzZWQgb25seSBmb3IgaGVhcCBvcGVyYXRpb25zICov CkBAIC00MDcsNiArNDA5LDEwIEBAIHR5cGVkZWYgc3RydWN0IExWUmVsU3RhdGUKIAkgKiBi ZWVuIHBlcm1hbmVudGx5IGRpc2FibGVkLgogCSAqLwogCUJsb2NrTnVtYmVyIGVhZ2VyX3Nj YW5fcmVtYWluaW5nX2ZhaWxzOworCisJaW50MzIJCXdyYXBhcm91bmRfZmFpbHNhZmVfY291 bnQ7IC8qIG51bWJlciBvZiBlbWVyZ2VuY3kgdmFjdXVtcyB0byBwcmV2ZW50IGFudGktd3Jh cGFyb3VuZCBzaHV0ZG93biAqLworCisJUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzIGV4 dFZhY1JlcG9ydElkeDsKIH0gTFZSZWxTdGF0ZTsKIAogCkBAIC00NzQsNiArNDgwLDIwOCBA QCBzdGF0aWMgdm9pZCB1cGRhdGVfdmFjdXVtX2Vycm9yX2luZm8oTFZSZWxTdGF0ZSAqdmFj cmVsLAogc3RhdGljIHZvaWQgcmVzdG9yZV92YWN1dW1fZXJyb3JfaW5mbyhMVlJlbFN0YXRl ICp2YWNyZWwsCiAJCQkJCQkJCQkgIGNvbnN0IExWU2F2ZWRFcnJJbmZvICpzYXZlZF92YWNy ZWwpOwogCisvKiAtLS0tLS0tLS0tCisgKiBleHR2YWNfc3RhdHNfc3RhcnQoKSAtCisgKgor ICogU2F2ZSBjdXQtb2ZmIHZhbHVlcyBvZiBleHRlbmRlZCB2YWN1dW0gY291bnRlcnMgYmVm b3JlIHN0YXJ0IG9mIGEgcmVsYXRpb24KKyAqIHByb2Nlc3NpbmcuCisgKiAtLS0tLS0tLS0t CisgKi8KK3N0YXRpYyB2b2lkCitleHR2YWNfc3RhdHNfc3RhcnQoUmVsYXRpb24gcmVsLCBM VkV4dFN0YXRDb3VudGVycyAqY291bnRlcnMpCit7CisJVGltZXN0YW1wVHoJc3RhcnR0aW1l OworCisJbWVtc2V0KGNvdW50ZXJzLCAwLCBzaXplb2YoTFZFeHRTdGF0Q291bnRlcnMpKTsK KworCXN0YXJ0dGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKworCWNvdW50ZXJzLT5z dGFydHRpbWUgPSBzdGFydHRpbWU7CisJY291bnRlcnMtPndhbHVzYWdlID0gcGdXYWxVc2Fn ZTsKKwljb3VudGVycy0+YnVmdXNhZ2UgPSBwZ0J1ZmZlclVzYWdlOworCWNvdW50ZXJzLT5W YWN1dW1EZWxheVRpbWUgPSBWYWN1dW1EZWxheVRpbWU7CisJY291bnRlcnMtPmJsb2Nrc19m ZXRjaGVkID0gMDsKKwljb3VudGVycy0+YmxvY2tzX2hpdCA9IDA7CisKKwlpZiAoIXJlbC0+ cGdzdGF0X2luZm8gfHwgIXBnc3RhdF90cmFja19jb3VudHMpCisJCS8qCisJCSAqIGlmIHNv bWV0aGluZyBnb2VzIHdyb25nIG9yIHVzZXIgZG9lc24ndCB3YW50IHRvIHRyYWNrIGEgZGF0 YWJhc2UKKwkJICogYWN0aXZpdHkgLSBqdXN0IHN1cHByZXNzIGl0LgorCQkgKi8KKwkJcmV0 dXJuOworCisJY291bnRlcnMtPmJsb2Nrc19mZXRjaGVkID0gcmVsLT5wZ3N0YXRfaW5mby0+ Y291bnRzLmJsb2Nrc19mZXRjaGVkOworCWNvdW50ZXJzLT5ibG9ja3NfaGl0ID0gcmVsLT5w Z3N0YXRfaW5mby0+Y291bnRzLmJsb2Nrc19oaXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0KKyAq IGV4dHZhY19zdGF0c19lbmQoKSAtCisgKgorICoJQ2FsbGVkIHRvIGZpbmlzaCBhbiBleHRl bmRlZCB2YWN1dW0gc3RhdGlzdGljIGdhdGhlcmluZyBhbmQgZm9ybSBhIHJlcG9ydC4KKyAq IC0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQKK2V4dHZhY19zdGF0c19lbmQoUmVsYXRp b24gcmVsLCBMVkV4dFN0YXRDb3VudGVycyAqY291bnRlcnMsCisJCQkJICBQZ1N0YXRfVmFj dXVtUmVsYXRpb25Db3VudHMgKnJlcG9ydCkKK3sKKwlXYWxVc2FnZQl3YWx1c2FnZTsKKwlC dWZmZXJVc2FnZQlidWZ1c2FnZTsKKwlUaW1lc3RhbXBUeiBlbmR0aW1lOworCWxvbmcJCXNl Y3M7CisJaW50CQkJdXNlY3M7CisKKwkvKiBDYWxjdWxhdGUgZGlmZnMgb2YgZ2xvYmFsIHN0 YXQgcGFyYW1ldGVycyBvbiBXQUwgYW5kIGJ1ZmZlciB1c2FnZS4gKi8KKwltZW1zZXQoJndh bHVzYWdlLCAwLCBzaXplb2YoV2FsVXNhZ2UpKTsKKwlXYWxVc2FnZUFjY3VtRGlmZigmd2Fs dXNhZ2UsICZwZ1dhbFVzYWdlLCAmY291bnRlcnMtPndhbHVzYWdlKTsKKworCW1lbXNldCgm YnVmdXNhZ2UsIDAsIHNpemVvZihCdWZmZXJVc2FnZSkpOworCUJ1ZmZlclVzYWdlQWNjdW1E aWZmKCZidWZ1c2FnZSwgJnBnQnVmZmVyVXNhZ2UsICZjb3VudGVycy0+YnVmdXNhZ2UpOwor CisJZW5kdGltZSA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwlUaW1lc3RhbXBEaWZmZXJl bmNlKGNvdW50ZXJzLT5zdGFydHRpbWUsIGVuZHRpbWUsICZzZWNzLCAmdXNlY3MpOworCisJ LyoKKwkgKiBGaWxsIGFkZGl0aW9uYWwgc3RhdGlzdGljcyBvbiBhIHZhY3V1bSBwcm9jZXNz aW5nIG9wZXJhdGlvbi4KKwkgKi8KKwlyZXBvcnQtPmNvbW1vbi50b3RhbF9ibGtzX3JlYWQg Kz0gYnVmdXNhZ2UubG9jYWxfYmxrc19yZWFkICsgYnVmdXNhZ2Uuc2hhcmVkX2Jsa3NfcmVh ZDsKKwlyZXBvcnQtPmNvbW1vbi50b3RhbF9ibGtzX2hpdCArPSBidWZ1c2FnZS5sb2NhbF9i bGtzX2hpdCArIGJ1ZnVzYWdlLnNoYXJlZF9ibGtzX2hpdDsKKwlyZXBvcnQtPmNvbW1vbi50 b3RhbF9ibGtzX2RpcnRpZWQgKz0gYnVmdXNhZ2UubG9jYWxfYmxrc19kaXJ0aWVkICsgYnVm dXNhZ2Uuc2hhcmVkX2Jsa3NfZGlydGllZDsKKwlyZXBvcnQtPmNvbW1vbi50b3RhbF9ibGtz X3dyaXR0ZW4gKz0gYnVmdXNhZ2Uuc2hhcmVkX2Jsa3Nfd3JpdHRlbjsKKworCXJlcG9ydC0+ Y29tbW9uLndhbF9yZWNvcmRzICs9IHdhbHVzYWdlLndhbF9yZWNvcmRzOworCXJlcG9ydC0+ Y29tbW9uLndhbF9mcGkgKz0gd2FsdXNhZ2Uud2FsX2ZwaTsKKwlyZXBvcnQtPmNvbW1vbi53 YWxfYnl0ZXMgKz0gd2FsdXNhZ2Uud2FsX2J5dGVzOworCisJcmVwb3J0LT5jb21tb24uYmxr X3JlYWRfdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhidWZ1c2FnZS5sb2NhbF9i bGtfcmVhZF90aW1lKTsKKwlyZXBvcnQtPmNvbW1vbi5ibGtfcmVhZF90aW1lICs9IElOU1RS X1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVzYWdlLnNoYXJlZF9ibGtfcmVhZF90aW1lKTsKKwly ZXBvcnQtPmNvbW1vbi5ibGtfd3JpdGVfdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNF QyhidWZ1c2FnZS5sb2NhbF9ibGtfd3JpdGVfdGltZSk7CisJcmVwb3J0LT5jb21tb24uYmxr X3dyaXRlX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYnVmdXNhZ2Uuc2hhcmVk X2Jsa193cml0ZV90aW1lKTsKKwlyZXBvcnQtPmNvbW1vbi5kZWxheV90aW1lICs9IFZhY3V1 bURlbGF5VGltZSAtIGNvdW50ZXJzLT5WYWN1dW1EZWxheVRpbWU7CisKKwlyZXBvcnQtPmNv bW1vbi50b3RhbF90aW1lICs9IHNlY3MgKiAxMDAwLiArIHVzZWNzIC8gMTAwMC47CisKKwlp ZiAoIXJlbC0+cGdzdGF0X2luZm8gfHwgIXBnc3RhdF90cmFja19jb3VudHMpCisJCS8qCisJ CSAqIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIG9yIGFuIHVzZXIgZG9lc24ndCB3YW50IHRv IHRyYWNrIGEgZGF0YWJhc2UKKwkJICogYWN0aXZpdHkgLSBqdXN0IHN1cHByZXNzIGl0Lgor CQkgKi8KKwkJcmV0dXJuOworCisJcmVwb3J0LT5jb21tb24uYmxrc19mZXRjaGVkICs9CisJ CXJlbC0+cGdzdGF0X2luZm8tPmNvdW50cy5ibG9ja3NfZmV0Y2hlZCAtIGNvdW50ZXJzLT5i bG9ja3NfZmV0Y2hlZDsKKwlyZXBvcnQtPmNvbW1vbi5ibGtzX2hpdCArPQorCQlyZWwtPnBn c3RhdF9pbmZvLT5jb3VudHMuYmxvY2tzX2hpdCAtIGNvdW50ZXJzLT5ibG9ja3NfaGl0Owor fQorCit2b2lkCitleHR2YWNfc3RhdHNfc3RhcnRfaWR4KFJlbGF0aW9uIHJlbCwgSW5kZXhC dWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKKwkJCQkJICAgTFZFeHRTdGF0Q291bnRlcnNJZHgg KmNvdW50ZXJzKQoreworCS8qIFNldCBpbml0aWFsIHZhbHVlcyBmb3IgY29tbW9uIGhlYXAg YW5kIGluZGV4IHN0YXRpc3RpY3MqLworCWV4dHZhY19zdGF0c19zdGFydChyZWwsICZjb3Vu dGVycy0+Y29tbW9uKTsKKwljb3VudGVycy0+cGFnZXNfZGVsZXRlZCA9IGNvdW50ZXJzLT50 dXBsZXNfcmVtb3ZlZCA9IDA7CisKKwlpZiAoc3RhdHMgIT0gTlVMTCkKKwl7CisJCS8qCisJ CSAqIFhYWDogV2h5IGRvIHdlIG5lZWQgdGhpcyBjb2RlIGhlcmU/IElmIGl0IGlzIG5lZWRl ZCwgSSBmZWVsIGxhY2sgb2YKKwkJICogY29tbWVudHMsIGRlc2NyaWJpbmcgdGhlIHJlYXNv bi4KKwkJICovCisJCWNvdW50ZXJzLT50dXBsZXNfcmVtb3ZlZCA9IHN0YXRzLT50dXBsZXNf cmVtb3ZlZDsKKwkJY291bnRlcnMtPnBhZ2VzX2RlbGV0ZWQgPSBzdGF0cy0+cGFnZXNfZGVs ZXRlZDsKKwl9Cit9CisKK3ZvaWQKK2V4dHZhY19zdGF0c19lbmRfaWR4KFJlbGF0aW9uIHJl bCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKKwkJCQkJIExWRXh0U3RhdENvdW50 ZXJzSWR4ICpjb3VudGVycywgUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzICpyZXBvcnQp Cit7CisJbWVtc2V0KHJlcG9ydCwgMCwgc2l6ZW9mKFBnU3RhdF9WYWN1dW1SZWxhdGlvbkNv dW50cykpOworCisJZXh0dmFjX3N0YXRzX2VuZChyZWwsICZjb3VudGVycy0+Y29tbW9uLCBy ZXBvcnQpOworCXJlcG9ydC0+dHlwZSA9IFBHU1RBVF9FWFRWQUNfSU5ERVg7CisKKwlpZiAo c3RhdHMgIT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIGlmIHNvbWV0aGluZyBnb2VzIHdyb25n IG9yIGFuIHVzZXIgZG9lc24ndCB3YW50IHRvIHRyYWNrIGEgZGF0YWJhc2UKKwkJICogYWN0 aXZpdHkgLSBqdXN0IHN1cHByZXNzIGl0LgorCQkgKi8KKworCQkvKiBGaWxsIGluZGV4LXNw ZWNpZmljIGV4dGVuZGVkIHN0YXRzIGZpZWxkcyAqLworCQlyZXBvcnQtPmluZGV4LnR1cGxl c19kZWxldGVkID0KKwkJCQkJCQlzdGF0cy0+dHVwbGVzX3JlbW92ZWQgLSBjb3VudGVycy0+ dHVwbGVzX3JlbW92ZWQ7CisJCXJlcG9ydC0+aW5kZXgucGFnZXNfZGVsZXRlZCA9CisJCQkJ CQkJc3RhdHMtPnBhZ2VzX2RlbGV0ZWQgLSBjb3VudGVycy0+cGFnZXNfZGVsZXRlZDsKKwl9 Cit9CisKKy8qIEFjY3VtdWxhdGUgdmFjdXVtIHN0YXRpc3RpY3MgZm9yIGhlYXAuCisgKgor ICAqIEJlY2F1c2Ugb2YgY29tcGxleGl0eSBvZiB2YWN1dW0gcHJvY2Vzc2luZzogaXQgc3dp dGNoIHByb2Nlc2luZyBiZXR3ZWVuCisgICogdGhlIGhlYXAgcmVsYXRpb24gdG8gaW5kZXgg cmVsYXRpb25zIGFuZCB2aXNhIHZlcnNhLCB3ZSBuZWVkIHRvIHN0b3JlCisgICogZ2F0aGVy ZWQgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiBmb3IgaGVhcCByZWxhdGlvbnMgc2V2ZXJhbCB0 aW1lcyBiZWZvcmUKKyAgKiB0aGUgdmFjdXVtIHN0YXJ0cyBwcm9jZXNzaW5nIHRoZSBpbmRl eGVzIGFnYWluLgorICAqCisgICogSXQgaXMgbmVjZXNzYXJ5IHRvIGdhdGhlciBjb3JyZWN0 IHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gZm9yIGhlYXAgYW5kIGluZGV4ZXMKKyAgKiBvdGhl cndpY2UgdGhlIGluZGV4IHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gd291bGQgYmUgYWRkZWQg dG8gaGlzIHBhcmVudCBoZWFwCisgICogc3RhdGlzdGljcyBpbmZvcm1hdGlvbiBhbmQgaXQg d291bGQgYmUgZGlmZmljdWx0IHRvIGFuYWx5emUgaXQgbGF0ZXIuCisgICoKKyAgKiBXZSBj YW4ndCBzdWJ0cmFjdCB1bmlvbiB2YWN1dW0gc3RhdGlzdGljcyBpbmZvcm1hdGlvbiBmb3Ig aW5kZXggZnJvbSB0aGUgaGVhcCByZWxhdGlvbnMKKyAgKiBiZWNhdXNlIG9mIHRvdGFsIGFu ZCBkZWxheSB0aW1lIHRpbWUgc3RhdGlzdGljcyBjb2xsZWN0aW5nIGR1cmluZyBwYXJhbGxl bCB2YWN1dW0KKyAgKiBwcm9jdWR1cmUuCisqLworc3RhdGljIHZvaWQKK2FjY3VtdWxhdGVf aGVhcF92YWN1dW1fc3RhdGlzdGljcyhMVlJlbFN0YXRlICp2YWNyZWwsIFBnU3RhdF9WYWN1 dW1SZWxhdGlvbkNvdW50cyAqZXh0VmFjU3RhdHMpCit7CisJLyogRmlsbCBoZWFwLXNwZWNp ZmljIGV4dGVuZGVkIHN0YXRzIGZpZWxkcyAqLworCWV4dFZhY1N0YXRzLT50eXBlID0gUEdT VEFUX0VYVFZBQ19UQUJMRTsKKwlleHRWYWNTdGF0cy0+dGFibGUucGFnZXNfc2Nhbm5lZCA9 IHZhY3JlbC0+c2Nhbm5lZF9wYWdlczsKKwlleHRWYWNTdGF0cy0+dGFibGUucGFnZXNfcmVt b3ZlZCA9IHZhY3JlbC0+cmVtb3ZlZF9wYWdlczsKKwlleHRWYWNTdGF0cy0+dGFibGUudm1f bmV3X2Zyb3plbl9wYWdlcyA9IHZhY3JlbC0+dm1fbmV3X2Zyb3plbl9wYWdlczsKKwlleHRW YWNTdGF0cy0+dGFibGUudm1fbmV3X3Zpc2libGVfcGFnZXMgPSB2YWNyZWwtPnZtX25ld192 aXNpYmxlX3BhZ2VzOworCWV4dFZhY1N0YXRzLT50YWJsZS52bV9uZXdfdmlzaWJsZV9mcm96 ZW5fcGFnZXMgPSB2YWNyZWwtPnZtX25ld192aXNpYmxlX2Zyb3plbl9wYWdlczsKKwlleHRW YWNTdGF0cy0+dGFibGUudHVwbGVzX2RlbGV0ZWQgPSB2YWNyZWwtPnR1cGxlc19kZWxldGVk OworCWV4dFZhY1N0YXRzLT50YWJsZS50dXBsZXNfZnJvemVuID0gdmFjcmVsLT50dXBsZXNf ZnJvemVuOworCWV4dFZhY1N0YXRzLT50YWJsZS5yZWNlbnRseV9kZWFkX3R1cGxlcyA9IHZh Y3JlbC0+cmVjZW50bHlfZGVhZF90dXBsZXM7CisJZXh0VmFjU3RhdHMtPnRhYmxlLnJlY2Vu dGx5X2RlYWRfdHVwbGVzID0gdmFjcmVsLT5yZWNlbnRseV9kZWFkX3R1cGxlczsKKwlleHRW YWNTdGF0cy0+dGFibGUubWlzc2VkX2RlYWRfdHVwbGVzID0gdmFjcmVsLT5taXNzZWRfZGVh ZF90dXBsZXM7CisJZXh0VmFjU3RhdHMtPnRhYmxlLm1pc3NlZF9kZWFkX3BhZ2VzID0gdmFj cmVsLT5taXNzZWRfZGVhZF9wYWdlczsKKwlleHRWYWNTdGF0cy0+Y29tbW9uLndyYXBhcm91 bmRfZmFpbHNhZmVfY291bnQgPSB2YWNyZWwtPndyYXBhcm91bmRfZmFpbHNhZmVfY291bnQ7 CisKKwlleHRWYWNTdGF0cy0+Y29tbW9uLmJsa19yZWFkX3RpbWUgLT0gdmFjcmVsLT5leHRW YWNSZXBvcnRJZHguY29tbW9uLmJsa19yZWFkX3RpbWU7CisJZXh0VmFjU3RhdHMtPmNvbW1v bi5ibGtfd3JpdGVfdGltZSAtPSB2YWNyZWwtPmV4dFZhY1JlcG9ydElkeC5jb21tb24uYmxr X3dyaXRlX3RpbWU7CisJZXh0VmFjU3RhdHMtPmNvbW1vbi50b3RhbF9ibGtzX2RpcnRpZWQg LT0gdmFjcmVsLT5leHRWYWNSZXBvcnRJZHguY29tbW9uLnRvdGFsX2Jsa3NfZGlydGllZDsK KwlleHRWYWNTdGF0cy0+Y29tbW9uLnRvdGFsX2Jsa3NfaGl0IC09IHZhY3JlbC0+ZXh0VmFj UmVwb3J0SWR4LmNvbW1vbi50b3RhbF9ibGtzX2hpdDsKKwlleHRWYWNTdGF0cy0+Y29tbW9u LnRvdGFsX2Jsa3NfcmVhZCAtPSB2YWNyZWwtPmV4dFZhY1JlcG9ydElkeC5jb21tb24udG90 YWxfYmxrc19yZWFkOworCWV4dFZhY1N0YXRzLT5jb21tb24udG90YWxfYmxrc193cml0dGVu IC09IHZhY3JlbC0+ZXh0VmFjUmVwb3J0SWR4LmNvbW1vbi50b3RhbF9ibGtzX3dyaXR0ZW47 CisJZXh0VmFjU3RhdHMtPmNvbW1vbi53YWxfYnl0ZXMgLT0gdmFjcmVsLT5leHRWYWNSZXBv cnRJZHguY29tbW9uLndhbF9ieXRlczsKKwlleHRWYWNTdGF0cy0+Y29tbW9uLndhbF9mcGkg LT0gdmFjcmVsLT5leHRWYWNSZXBvcnRJZHguY29tbW9uLndhbF9mcGk7CisJZXh0VmFjU3Rh dHMtPmNvbW1vbi53YWxfcmVjb3JkcyAtPSB2YWNyZWwtPmV4dFZhY1JlcG9ydElkeC5jb21t b24ud2FsX3JlY29yZHM7CisKKwlleHRWYWNTdGF0cy0+Y29tbW9uLnRvdGFsX3RpbWUgLT0g dmFjcmVsLT5leHRWYWNSZXBvcnRJZHguY29tbW9uLnRvdGFsX3RpbWU7CisJZXh0VmFjU3Rh dHMtPmNvbW1vbi5kZWxheV90aW1lIC09IHZhY3JlbC0+ZXh0VmFjUmVwb3J0SWR4LmNvbW1v bi5kZWxheV90aW1lOworCit9CisKK3N0YXRpYyB2b2lkCithY2N1bXVsYXRlX2lkeHNfdmFj dXVtX3N0YXRpc3RpY3MoTFZSZWxTdGF0ZSAqdmFjcmVsLCBQZ1N0YXRfVmFjdXVtUmVsYXRp b25Db3VudHMgKmV4dFZhY0lkeFN0YXRzKQoreworCisJLyogRmlsbCBoZWFwLXNwZWNpZmlj IGV4dGVuZGVkIHN0YXRzIGZpZWxkcyAqLworCXZhY3JlbC0+ZXh0VmFjUmVwb3J0SWR4LmNv bW1vbi5ibGtfcmVhZF90aW1lICs9IGV4dFZhY0lkeFN0YXRzLT5jb21tb24uYmxrX3JlYWRf dGltZTsKKwl2YWNyZWwtPmV4dFZhY1JlcG9ydElkeC5jb21tb24uYmxrX3dyaXRlX3RpbWUg Kz0gZXh0VmFjSWR4U3RhdHMtPmNvbW1vbi5ibGtfd3JpdGVfdGltZTsKKwl2YWNyZWwtPmV4 dFZhY1JlcG9ydElkeC5jb21tb24udG90YWxfYmxrc19kaXJ0aWVkICs9IGV4dFZhY0lkeFN0 YXRzLT5jb21tb24udG90YWxfYmxrc19kaXJ0aWVkOworCXZhY3JlbC0+ZXh0VmFjUmVwb3J0 SWR4LmNvbW1vbi50b3RhbF9ibGtzX2hpdCArPSBleHRWYWNJZHhTdGF0cy0+Y29tbW9uLnRv dGFsX2Jsa3NfaGl0OworCXZhY3JlbC0+ZXh0VmFjUmVwb3J0SWR4LmNvbW1vbi50b3RhbF9i bGtzX3JlYWQgKz0gZXh0VmFjSWR4U3RhdHMtPmNvbW1vbi50b3RhbF9ibGtzX3JlYWQ7CisJ dmFjcmVsLT5leHRWYWNSZXBvcnRJZHguY29tbW9uLnRvdGFsX2Jsa3Nfd3JpdHRlbiArPSBl eHRWYWNJZHhTdGF0cy0+Y29tbW9uLnRvdGFsX2Jsa3Nfd3JpdHRlbjsKKwl2YWNyZWwtPmV4 dFZhY1JlcG9ydElkeC5jb21tb24ud2FsX2J5dGVzICs9IGV4dFZhY0lkeFN0YXRzLT5jb21t b24ud2FsX2J5dGVzOworCXZhY3JlbC0+ZXh0VmFjUmVwb3J0SWR4LmNvbW1vbi53YWxfZnBp ICs9IGV4dFZhY0lkeFN0YXRzLT5jb21tb24ud2FsX2ZwaTsKKwl2YWNyZWwtPmV4dFZhY1Jl cG9ydElkeC5jb21tb24ud2FsX3JlY29yZHMgKz0gZXh0VmFjSWR4U3RhdHMtPmNvbW1vbi53 YWxfcmVjb3JkczsKKwl2YWNyZWwtPmV4dFZhY1JlcG9ydElkeC5jb21tb24uZGVsYXlfdGlt ZSArPSBleHRWYWNJZHhTdGF0cy0+Y29tbW9uLmRlbGF5X3RpbWU7CisKKwl2YWNyZWwtPmV4 dFZhY1JlcG9ydElkeC5jb21tb24udG90YWxfdGltZSArPSBleHRWYWNJZHhTdGF0cy0+Y29t bW9uLnRvdGFsX3RpbWU7Cit9CiAKIAogLyoKQEAgLTYzMiw2ICs4NDAsMTMgQEAgaGVhcF92 YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAlC dWZmZXJVc2FnZSBzdGFydGJ1ZmZlcnVzYWdlID0gcGdCdWZmZXJVc2FnZTsKIAlFcnJvckNv bnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKIAljaGFyCSAgKippbmRuYW1lcyA9IE5VTEw7 CisJTFZFeHRTdGF0Q291bnRlcnMgZXh0VmFjQ291bnRlcnM7CisJUGdTdGF0X1ZhY3V1bVJl bGF0aW9uQ291bnRzIEV4dFZhY1JlcG9ydDsKKwlQZ1N0YXRfVmFjdXVtUmVsYXRpb25Db3Vu dHMgYWxsemVybzsKKworCS8qIEluaXRpYWxpemUgdmFjdXVtIHN0YXRpc3RpY3MgKi8KKwlt ZW1zZXQoJmFsbHplcm8sIDAsIHNpemVvZihQZ1N0YXRfVmFjdXVtUmVsYXRpb25Db3VudHMp KTsKKwlFeHRWYWNSZXBvcnQgPSBhbGx6ZXJvOwogCiAJdmVyYm9zZSA9IChwYXJhbXMub3B0 aW9ucyAmIFZBQ09QVF9WRVJCT1NFKSAhPSAwOwogCWluc3RydW1lbnQgPSAodmVyYm9zZSB8 fCAoQW1BdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpICYmCkBAIC02NTIsNiArODY3LDcgQEAg aGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFt cywKIAlwZ3N0YXRfcHJvZ3Jlc3Nfc3RhcnRfY29tbWFuZChQUk9HUkVTU19DT01NQU5EX1ZB Q1VVTSwKIAkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOwogCisJZXh0dmFjX3N0 YXRzX3N0YXJ0KHJlbCwgJmV4dFZhY0NvdW50ZXJzKTsKIAkvKgogCSAqIFNldHVwIGVycm9y IHRyYWNlYmFjayBzdXBwb3J0IGZvciBlcmVwb3J0KCkgZmlyc3QuICBUaGUgaWRlYSBpcyB0 byBzZXQKIAkgKiB1cCBhbiBlcnJvciBjb250ZXh0IGNhbGxiYWNrIHRvIGRpc3BsYXkgYWRk aXRpb25hbCBpbmZvcm1hdGlvbiBvbiBhbnkKQEAgLTY2OCw2ICs4ODQsNyBAQCBoZWFwX3Zh Y3V1bV9yZWwoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCXZh Y3JlbC0+ZGJuYW1lID0gZ2V0X2RhdGFiYXNlX25hbWUoTXlEYXRhYmFzZUlkKTsKIAl2YWNy ZWwtPnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVz cGFjZShyZWwpKTsKIAl2YWNyZWwtPnJlbG5hbWUgPSBwc3RyZHVwKFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCkpOworCXZhY3JlbC0+cmVsb2lkID0gUmVsYXRpb25HZXRSZWxpZChy ZWwpOwogCXZhY3JlbC0+aW5kbmFtZSA9IE5VTEw7CiAJdmFjcmVsLT5waGFzZSA9IFZBQ1VV TV9FUlJDQl9QSEFTRV9VTktOT1dOOwogCXZhY3JlbC0+dmVyYm9zZSA9IHZlcmJvc2U7CkBA IC02NzYsNiArODkzLDggQEAgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgY29uc3Qg VmFjdXVtUGFyYW1zIHBhcmFtcywKIAllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2Nv bnRleHRfc3RhY2s7CiAJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKIAor CW1lbXNldCgmdmFjcmVsLT5leHRWYWNSZXBvcnRJZHgsIDAsIHNpemVvZihQZ1N0YXRfVmFj dXVtUmVsYXRpb25Db3VudHMpKTsKKwogCS8qIFNldCB1cCBoaWdoIGxldmVsIHN0dWZmIGFi b3V0IHJlbCBhbmQgaXRzIGluZGV4ZXMgKi8KIAl2YWNyZWwtPnJlbCA9IHJlbDsKIAl2YWNf b3Blbl9pbmRleGVzKHZhY3JlbC0+cmVsLCBSb3dFeGNsdXNpdmVMb2NrLCAmdmFjcmVsLT5u aW5kZXhlcywKQEAgLTc3Niw2ICs5OTUsNyBAQCBoZWFwX3ZhY3V1bV9yZWwoUmVsYXRpb24g cmVsLCBjb25zdCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCXZhY3JlbC0+YWdncmVzc2l2ZSA9 IHZhY3V1bV9nZXRfY3V0b2ZmcyhyZWwsIHBhcmFtcywgJnZhY3JlbC0+Y3V0b2Zmcyk7CiAJ dmFjcmVsLT5yZWxfcGFnZXMgPSBvcmlnX3JlbF9wYWdlcyA9IFJlbGF0aW9uR2V0TnVtYmVy T2ZCbG9ja3MocmVsKTsKIAl2YWNyZWwtPnZpc3Rlc3QgPSBHbG9iYWxWaXNUZXN0Rm9yKHJl bCk7CisJdmFjcmVsLT53cmFwYXJvdW5kX2ZhaWxzYWZlX2NvdW50ID0gMDsKIAogCS8qIElu aXRpYWxpemUgc3RhdGUgdXNlZCB0byB0cmFjayBvbGRlc3QgZXh0YW50IFhJRC9NWElEICov CiAJdmFjcmVsLT5OZXdSZWxmcm96ZW5YaWQgPSB2YWNyZWwtPmN1dG9mZnMuT2xkZXN0WG1p bjsKQEAgLTkyNCw2ICsxMTQ0LDkgQEAgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwg Y29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkJCQkJCXZhY3JlbC0+TmV3UmVsZnJvemVu WGlkLCB2YWNyZWwtPk5ld1JlbG1pbk14aWQsCiAJCQkJCQkmZnJvemVueGlkX3VwZGF0ZWQs ICZtaW5tdWx0aV91cGRhdGVkLCBmYWxzZSk7CiAKKwkvKiBNYWtlIGdlbmVyaWMgZXh0ZW5k ZWQgdmFjdXVtIHN0YXRzIHJlcG9ydCAqLworCWV4dHZhY19zdGF0c19lbmQocmVsLCAmZXh0 VmFjQ291bnRlcnMsICZFeHRWYWNSZXBvcnQpOworCiAJLyoKIAkgKiBSZXBvcnQgcmVzdWx0 cyB0byB0aGUgY3VtdWxhdGl2ZSBzdGF0cyBzeXN0ZW0sIHRvby4KIAkgKgpAQCAtOTM0LDEy ICsxMTU3LDIwIEBAIGhlYXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsIGNvbnN0IFZhY3V1 bVBhcmFtcyBwYXJhbXMsCiAJICogc29vbiBpbiBjYXNlcyB3aGVyZSB0aGUgZmFpbHNhZmUg cHJldmVudGVkIHNpZ25pZmljYW50IGFtb3VudHMgb2YgaGVhcAogCSAqIHZhY3V1bWluZy4K IAkgKi8KKwkvKiBNYWtlIGdlbmVyaWMgZXh0ZW5kZWQgdmFjdXVtIHN0YXRzIHJlcG9ydCBh bmQKKwkJKiBmaWxsIGhlYXAtc3BlY2lmaWMgZXh0ZW5kZWQgc3RhdHMgZmllbGRzLgorCQkq LworCWV4dHZhY19zdGF0c19lbmQodmFjcmVsLT5yZWwsICZleHRWYWNDb3VudGVycywgJkV4 dFZhY1JlcG9ydCk7CisJYWNjdW11bGF0ZV9oZWFwX3ZhY3V1bV9zdGF0aXN0aWNzKHZhY3Jl bCwgJkV4dFZhY1JlcG9ydCk7CisKIAlwZ3N0YXRfcmVwb3J0X3ZhY3V1bShSZWxhdGlvbkdl dFJlbGlkKHJlbCksCi0JCQkJCQkgcmVsLT5yZF9yZWwtPnJlbGlzc2hhcmVkLAotCQkJCQkJ IE1heCh2YWNyZWwtPm5ld19saXZlX3R1cGxlcywgMCksCi0JCQkJCQkgdmFjcmVsLT5yZWNl bnRseV9kZWFkX3R1cGxlcyArCi0JCQkJCQkgdmFjcmVsLT5taXNzZWRfZGVhZF90dXBsZXMs Ci0JCQkJCQkgc3RhcnR0aW1lKTsKKwkJCQkJCXJlbC0+cmRfcmVsLT5yZWxpc3NoYXJlZCwK KwkJCQkJCU1heCh2YWNyZWwtPm5ld19saXZlX3R1cGxlcywgMCksCisJCQkJCQl2YWNyZWwt PnJlY2VudGx5X2RlYWRfdHVwbGVzICsKKwkJCQkJCXZhY3JlbC0+bWlzc2VkX2RlYWRfdHVw bGVzLAorCQkJCQkJc3RhcnR0aW1lLAorCQkJCQkJJkV4dFZhY1JlcG9ydCk7CisKIAlwZ3N0 YXRfcHJvZ3Jlc3NfZW5kX2NvbW1hbmQoKTsKIAogCWlmIChpbnN0cnVtZW50KQpAQCAtMjYz MSwxMCArMjg2MiwyMCBAQCBsYXp5X3ZhY3V1bV9hbGxfaW5kZXhlcyhMVlJlbFN0YXRlICp2 YWNyZWwpCiAJfQogCWVsc2UKIAl7CisJCUxWRXh0U3RhdENvdW50ZXJzIGNvdW50ZXJzOwor CQlQZ1N0YXRfVmFjdXVtUmVsYXRpb25Db3VudHMgUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291 bnRzOworCisJCW1lbXNldCgmUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzLCAwLCBzaXpl b2YoUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzKSk7CisKKwkJZXh0dmFjX3N0YXRzX3N0 YXJ0KHZhY3JlbC0+cmVsLCAmY291bnRlcnMpOworCiAJCS8qIE91dHNvdXJjZSBldmVyeXRo aW5nIHRvIHBhcmFsbGVsIHZhcmlhbnQgKi8KIAkJcGFyYWxsZWxfdmFjdXVtX2J1bGtkZWxf YWxsX2luZGV4ZXModmFjcmVsLT5wdnMsIG9sZF9saXZlX3R1cGxlcywKIAkJCQkJCQkJCQkJ dmFjcmVsLT5udW1faW5kZXhfc2NhbnMpOwogCisJCWV4dHZhY19zdGF0c19lbmQodmFjcmVs LT5yZWwsICZjb3VudGVycywgJlBnU3RhdF9WYWN1dW1SZWxhdGlvbkNvdW50cyk7CisJCWFj Y3VtdWxhdGVfaWR4c192YWN1dW1fc3RhdGlzdGljcyh2YWNyZWwsICZQZ1N0YXRfVmFjdXVt UmVsYXRpb25Db3VudHMpOworCiAJCS8qCiAJCSAqIERvIGEgcG9zdGNoZWNrIHRvIGNvbnNp ZGVyIGFwcGx5aW5nIHdyYXBhcm91bmQgZmFpbHNhZmUgbm93LiAgTm90ZQogCQkgKiB0aGF0 IHBhcmFsbGVsIFZBQ1VVTSBvbmx5IGdldHMgdGhlIHByZWNoZWNrIGFuZCB0aGlzIHBvc3Rj aGVjay4KQEAgLTI5NjEsNiArMzIwMiw3IEBAIGxhenlfY2hlY2tfd3JhcGFyb3VuZF9mYWls c2FmZShMVlJlbFN0YXRlICp2YWNyZWwpCiAJCWludDY0CQlwcm9ncmVzc192YWxbMl0gPSB7 MCwgMH07CiAKIAkJVmFjdXVtRmFpbHNhZmVBY3RpdmUgPSB0cnVlOworCQl2YWNyZWwtPndy YXBhcm91bmRfZmFpbHNhZmVfY291bnQgKys7CiAKIAkJLyoKIAkJICogQWJhbmRvbiB1c2Ug b2YgYSBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5IHRvIGFsbG93IHVzZSBvZiBhbGwgb2YKQEAg LTMwNDMsMTAgKzMyODUsMjAgQEAgbGF6eV9jbGVhbnVwX2FsbF9pbmRleGVzKExWUmVsU3Rh dGUgKnZhY3JlbCkKIAl9CiAJZWxzZQogCXsKKwkJTFZFeHRTdGF0Q291bnRlcnMgY291bnRl cnM7CisJCVBnU3RhdF9WYWN1dW1SZWxhdGlvbkNvdW50cyBQZ1N0YXRfVmFjdXVtUmVsYXRp b25Db3VudHM7CisKKwkJbWVtc2V0KCZQZ1N0YXRfVmFjdXVtUmVsYXRpb25Db3VudHMsIDAs IHNpemVvZihQZ1N0YXRfVmFjdXVtUmVsYXRpb25Db3VudHMpKTsKKworCQlleHR2YWNfc3Rh dHNfc3RhcnQodmFjcmVsLT5yZWwsICZjb3VudGVycyk7CisKIAkJLyogT3V0c291cmNlIGV2 ZXJ5dGhpbmcgdG8gcGFyYWxsZWwgdmFyaWFudCAqLwogCQlwYXJhbGxlbF92YWN1dW1fY2xl YW51cF9hbGxfaW5kZXhlcyh2YWNyZWwtPnB2cywgcmVsdHVwbGVzLAogCQkJCQkJCQkJCQl2 YWNyZWwtPm51bV9pbmRleF9zY2FucywKIAkJCQkJCQkJCQkJZXN0aW1hdGVkX2NvdW50KTsK KworCQlleHR2YWNfc3RhdHNfZW5kKHZhY3JlbC0+cmVsLCAmY291bnRlcnMsICZQZ1N0YXRf VmFjdXVtUmVsYXRpb25Db3VudHMpOworCQlhY2N1bXVsYXRlX2lkeHNfdmFjdXVtX3N0YXRp c3RpY3ModmFjcmVsLCAmUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzKTsKIAl9CiAKIAkv KiBSZXNldCB0aGUgcHJvZ3Jlc3MgY291bnRlcnMgKi8KQEAgLTMwNzIsNiArMzMyNCwxMSBA QCBsYXp5X3ZhY3V1bV9vbmVfaW5kZXgoUmVsYXRpb24gaW5kcmVsLCBJbmRleEJ1bGtEZWxl dGVSZXN1bHQgKmlzdGF0LAogewogCUluZGV4VmFjdXVtSW5mbyBpdmluZm87CiAJTFZTYXZl ZEVyckluZm8gc2F2ZWRfZXJyX2luZm87CisJTFZFeHRTdGF0Q291bnRlcnNJZHggZXh0VmFj Q291bnRlcnM7CisJUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzIFBnU3RhdF9WYWN1dW1S ZWxhdGlvbkNvdW50czsKKworCS8qIFNldCBpbml0aWFsIHN0YXRpc3RpY3MgdmFsdWVzIHRv IGdhdGhlciB2YWN1dW0gc3RhdGlzdGljcyBmb3IgdGhlIGluZGV4ICovCisJZXh0dmFjX3N0 YXRzX3N0YXJ0X2lkeChpbmRyZWwsIGlzdGF0LCAmZXh0VmFjQ291bnRlcnMpOwogCiAJaXZp bmZvLmluZGV4ID0gaW5kcmVsOwogCWl2aW5mby5oZWFwcmVsID0gdmFjcmVsLT5yZWw7CkBA IC0zMDkwLDYgKzMzNDcsNyBAQCBsYXp5X3ZhY3V1bV9vbmVfaW5kZXgoUmVsYXRpb24gaW5k cmVsLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmlzdGF0LAogCSAqLwogCUFzc2VydCh2YWNy ZWwtPmluZG5hbWUgPT0gTlVMTCk7CiAJdmFjcmVsLT5pbmRuYW1lID0gcHN0cmR1cChSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShpbmRyZWwpKTsKKwl2YWNyZWwtPmluZG9pZCA9IFJlbGF0 aW9uR2V0UmVsaWQoaW5kcmVsKTsKIAl1cGRhdGVfdmFjdXVtX2Vycm9yX2luZm8odmFjcmVs LCAmc2F2ZWRfZXJyX2luZm8sCiAJCQkJCQkJIFZBQ1VVTV9FUlJDQl9QSEFTRV9WQUNVVU1f SU5ERVgsCiAJCQkJCQkJIEludmFsaWRCbG9ja051bWJlciwgSW52YWxpZE9mZnNldE51bWJl cik7CkBAIC0zMDk4LDYgKzMzNTYsMTYgQEAgbGF6eV92YWN1dW1fb25lX2luZGV4KFJlbGF0 aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppc3RhdCwKIAlpc3RhdCA9IHZh Y19idWxrZGVsX29uZV9pbmRleCgmaXZpbmZvLCBpc3RhdCwgdmFjcmVsLT5kZWFkX2l0ZW1z LAogCQkJCQkJCQkgIHZhY3JlbC0+ZGVhZF9pdGVtc19pbmZvKTsKIAorCS8qIE1ha2UgZXh0 ZW5kZWQgdmFjdXVtIHN0YXRzIHJlcG9ydCBmb3IgaW5kZXggKi8KKwlleHR2YWNfc3RhdHNf ZW5kX2lkeChpbmRyZWwsIGlzdGF0LCAmZXh0VmFjQ291bnRlcnMsICZQZ1N0YXRfVmFjdXVt UmVsYXRpb25Db3VudHMpOworCisJaWYgKCFQYXJhbGxlbFZhY3V1bUlzQWN0aXZlKHZhY3Jl bCkpCisJCWFjY3VtdWxhdGVfaWR4c192YWN1dW1fc3RhdGlzdGljcyh2YWNyZWwsICZQZ1N0 YXRfVmFjdXVtUmVsYXRpb25Db3VudHMpOworCisJcGdzdGF0X3JlcG9ydF92YWN1dW0oUmVs YXRpb25HZXRSZWxpZChpbmRyZWwpLAorCQkJCQkJCWluZHJlbC0+cmRfcmVsLT5yZWxpc3No YXJlZCwKKwkJCQkJCQkwLCAwLCAwLCAmUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzKTsK KwogCS8qIFJldmVydCB0byB0aGUgcHJldmlvdXMgcGhhc2UgaW5mb3JtYXRpb24gZm9yIGVy cm9yIHRyYWNlYmFjayAqLwogCXJlc3RvcmVfdmFjdXVtX2Vycm9yX2luZm8odmFjcmVsLCAm c2F2ZWRfZXJyX2luZm8pOwogCXBmcmVlKHZhY3JlbC0+aW5kbmFtZSk7CkBAIC0zMTIyLDYg KzMzOTAsMTEgQEAgbGF6eV9jbGVhbnVwX29uZV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIElu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaXN0YXQsCiB7CiAJSW5kZXhWYWN1dW1JbmZvIGl2aW5m bzsKIAlMVlNhdmVkRXJySW5mbyBzYXZlZF9lcnJfaW5mbzsKKwlMVkV4dFN0YXRDb3VudGVy c0lkeCBleHRWYWNDb3VudGVyczsKKwlQZ1N0YXRfVmFjdXVtUmVsYXRpb25Db3VudHMgUGdT dGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzOworCisJLyogU2V0IGluaXRpYWwgc3RhdGlzdGlj cyB2YWx1ZXMgdG8gZ2F0aGVyIHZhY3V1bSBzdGF0aXN0aWNzIGZvciB0aGUgaW5kZXggKi8K KwlleHR2YWNfc3RhdHNfc3RhcnRfaWR4KGluZHJlbCwgaXN0YXQsICZleHRWYWNDb3VudGVy cyk7CiAKIAlpdmluZm8uaW5kZXggPSBpbmRyZWw7CiAJaXZpbmZvLmhlYXByZWwgPSB2YWNy ZWwtPnJlbDsKQEAgLTMxNDEsMTIgKzM0MTQsMjIgQEAgbGF6eV9jbGVhbnVwX29uZV9pbmRl eChSZWxhdGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaXN0YXQsCiAJICov CiAJQXNzZXJ0KHZhY3JlbC0+aW5kbmFtZSA9PSBOVUxMKTsKIAl2YWNyZWwtPmluZG5hbWUg PSBwc3RyZHVwKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGluZHJlbCkpOworCXZhY3JlbC0+ aW5kb2lkID0gUmVsYXRpb25HZXRSZWxpZChpbmRyZWwpOwogCXVwZGF0ZV92YWN1dW1fZXJy b3JfaW5mbyh2YWNyZWwsICZzYXZlZF9lcnJfaW5mbywKIAkJCQkJCQkgVkFDVVVNX0VSUkNC X1BIQVNFX0lOREVYX0NMRUFOVVAsCiAJCQkJCQkJIEludmFsaWRCbG9ja051bWJlciwgSW52 YWxpZE9mZnNldE51bWJlcik7CiAKIAlpc3RhdCA9IHZhY19jbGVhbnVwX29uZV9pbmRleCgm aXZpbmZvLCBpc3RhdCk7CiAKKwkvKiBNYWtlIGV4dGVuZGVkIHZhY3V1bSBzdGF0cyByZXBv cnQgZm9yIGluZGV4ICovCisJZXh0dmFjX3N0YXRzX2VuZF9pZHgoaW5kcmVsLCBpc3RhdCwg JmV4dFZhY0NvdW50ZXJzLCAmUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzKTsKKwlpZiAo IVBhcmFsbGVsVmFjdXVtSXNBY3RpdmUodmFjcmVsKSkKKwkJYWNjdW11bGF0ZV9pZHhzX3Zh Y3V1bV9zdGF0aXN0aWNzKHZhY3JlbCwgJlBnU3RhdF9WYWN1dW1SZWxhdGlvbkNvdW50cyk7 CisKKwlwZ3N0YXRfcmVwb3J0X3ZhY3V1bShSZWxhdGlvbkdldFJlbGlkKGluZHJlbCksCisJ CQkJCQkJaW5kcmVsLT5yZF9yZWwtPnJlbGlzc2hhcmVkLAorCQkJCQkJCTAsIDAsIDAsICZQ Z1N0YXRfVmFjdXVtUmVsYXRpb25Db3VudHMpOworCiAJLyogUmV2ZXJ0IHRvIHRoZSBwcmV2 aW91cyBwaGFzZSBpbmZvcm1hdGlvbiBmb3IgZXJyb3IgdHJhY2ViYWNrICovCiAJcmVzdG9y ZV92YWN1dW1fZXJyb3JfaW5mbyh2YWNyZWwsICZzYXZlZF9lcnJfaW5mbyk7CiAJcGZyZWUo dmFjcmVsLT5pbmRuYW1lKTsKQEAgLTM3NTksNiArNDA0Miw5IEBAIHZhY3V1bV9lcnJvcl9j YWxsYmFjayh2b2lkICphcmcpCiAJc3dpdGNoIChlcnJpbmZvLT5waGFzZSkKIAl7CiAJCWNh c2UgVkFDVVVNX0VSUkNCX1BIQVNFX1NDQU5fSEVBUDoKKwkJCWlmKGdldGVycmVsZXZlbCgp ID09IEVSUk9SKQorCQkJCQlwZ3N0YXRfcmVwb3J0X3ZhY3V1bV9lcnJvcihlcnJpbmZvLT5y ZWxvaWQsIGVycmluZm8tPnJlbC0+cmRfcmVsLT5yZWxpc3NoYXJlZCwgUEdTVEFUX0VYVFZB Q19UQUJMRSk7CisKIAkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoZXJyaW5mby0+Ymxrbm8p KQogCQkJewogCQkJCWlmIChPZmZzZXROdW1iZXJJc1ZhbGlkKGVycmluZm8tPm9mZm51bSkp CkBAIC0zNzc0LDYgKzQwNjAsOSBAQCB2YWN1dW1fZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJn KQogCQkJYnJlYWs7CiAKIAkJY2FzZSBWQUNVVU1fRVJSQ0JfUEhBU0VfVkFDVVVNX0hFQVA6 CisJCQlpZihnZXRlcnJlbGV2ZWwoKSA9PSBFUlJPUikKKwkJCQlwZ3N0YXRfcmVwb3J0X3Zh Y3V1bV9lcnJvcihlcnJpbmZvLT5yZWxvaWQsIGVycmluZm8tPnJlbC0+cmRfcmVsLT5yZWxp c3NoYXJlZCwgUEdTVEFUX0VYVFZBQ19UQUJMRSk7CisKIAkJCWlmIChCbG9ja051bWJlcklz VmFsaWQoZXJyaW5mby0+Ymxrbm8pKQogCQkJewogCQkJCWlmIChPZmZzZXROdW1iZXJJc1Zh bGlkKGVycmluZm8tPm9mZm51bSkpCkBAIC0zNzg5LDE2ICs0MDc4LDI1IEBAIHZhY3V1bV9l cnJvcl9jYWxsYmFjayh2b2lkICphcmcpCiAJCQlicmVhazsKIAogCQljYXNlIFZBQ1VVTV9F UlJDQl9QSEFTRV9WQUNVVU1fSU5ERVg6CisJCQlpZihnZXRlcnJlbGV2ZWwoKSA9PSBFUlJP UikKKwkJCQlwZ3N0YXRfcmVwb3J0X3ZhY3V1bV9lcnJvcihlcnJpbmZvLT5yZWxvaWQsIGVy cmluZm8tPnJlbC0+cmRfcmVsLT5yZWxpc3NoYXJlZCwgUEdTVEFUX0VYVFZBQ19JTkRFWCk7 CisKIAkJCWVycmNvbnRleHQoIndoaWxlIHZhY3V1bWluZyBpbmRleCBcIiVzXCIgb2YgcmVs YXRpb24gXCIlcy4lc1wiIiwKIAkJCQkJICAgZXJyaW5mby0+aW5kbmFtZSwgZXJyaW5mby0+ cmVsbmFtZXNwYWNlLCBlcnJpbmZvLT5yZWxuYW1lKTsKIAkJCWJyZWFrOwogCiAJCWNhc2Ug VkFDVVVNX0VSUkNCX1BIQVNFX0lOREVYX0NMRUFOVVA6CisJCQlpZihnZXRlcnJlbGV2ZWwo KSA9PSBFUlJPUikKKwkJCQlwZ3N0YXRfcmVwb3J0X3ZhY3V1bV9lcnJvcihlcnJpbmZvLT5y ZWxvaWQsIGVycmluZm8tPnJlbC0+cmRfcmVsLT5yZWxpc3NoYXJlZCwgUEdTVEFUX0VYVFZB Q19JTkRFWCk7CisKIAkJCWVycmNvbnRleHQoIndoaWxlIGNsZWFuaW5nIHVwIGluZGV4IFwi JXNcIiBvZiByZWxhdGlvbiBcIiVzLiVzXCIiLAogCQkJCQkgICBlcnJpbmZvLT5pbmRuYW1l LCBlcnJpbmZvLT5yZWxuYW1lc3BhY2UsIGVycmluZm8tPnJlbG5hbWUpOwogCQkJYnJlYWs7 CiAKIAkJY2FzZSBWQUNVVU1fRVJSQ0JfUEhBU0VfVFJVTkNBVEU6CisJCQlpZihnZXRlcnJl bGV2ZWwoKSA9PSBFUlJPUikKKwkJCQlwZ3N0YXRfcmVwb3J0X3ZhY3V1bV9lcnJvcihlcnJp bmZvLT5yZWxvaWQsIGVycmluZm8tPnJlbC0+cmRfcmVsLT5yZWxpc3NoYXJlZCwgUEdTVEFU X0VYVFZBQ19UQUJMRSk7CisKIAkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoZXJyaW5mby0+ Ymxrbm8pKQogCQkJCWVycmNvbnRleHQoIndoaWxlIHRydW5jYXRpbmcgcmVsYXRpb24gXCIl cy4lc1wiIHRvICV1IGJsb2NrcyIsCiAJCQkJCQkgICBlcnJpbmZvLT5yZWxuYW1lc3BhY2Us IGVycmluZm8tPnJlbG5hbWUsIGVycmluZm8tPmJsa25vKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL3Zpc2liaWxpdHltYXAuYwppbmRleCA5NTNhZDRhNDg0My4uYTIxZTc3Y2Q1NTEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKQEAgLTkxLDYg KzkxLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgogI2luY2x1ZGUgImFj Y2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJw Z3N0YXQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKQEAgLTE2MCw2ICsx NjEsMTUgQEAgdmlzaWJpbGl0eW1hcF9jbGVhcihSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVy IGhlYXBCbGssIEJ1ZmZlciB2bWJ1ZiwgdWludDggZmxhZ3MKIAogCWlmIChtYXBbbWFwQnl0 ZV0gJiBtYXNrKQogCXsKKwkJLyoKKwkJICogQXMgcGFydCBvZiB2YWN1dW0gc3RhdHMsIHRy YWNrIGhvdyBvZnRlbiBhbGwtdmlzaWJsZSBvciBhbGwtZnJvemVuCisJCSAqIGJpdHMgYXJl IGNsZWFyZWQuCisJCSAqLworCQlpZiAobWFwW21hcEJ5dGVdID4+IG1hcE9mZnNldCAmIGZs YWdzICYgVklTSUJJTElUWU1BUF9BTExfVklTSUJMRSkKKwkJCXBnc3RhdF9jb3VudF92bV9y ZXZfYWxsX3Zpc2libGUocmVsKTsKKwkJaWYgKG1hcFttYXBCeXRlXSA+PiBtYXBPZmZzZXQg JiBmbGFncyAmIFZJU0lCSUxJVFlNQVBfQUxMX0ZST1pFTikKKwkJCXBnc3RhdF9jb3VudF92 bV9yZXZfYWxsX2Zyb3plbihyZWwpOworCiAJCW1hcFttYXBCeXRlXSAmPSB+bWFzazsKIAog CQlNYXJrQnVmZmVyRGlydHkodm1idWYpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmll d3Muc3FsCmluZGV4IGM3N2ZhMDIzNGJiLi5iMzI0MmRjNmY1YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtNzE2LDcgKzcxNiw5IEBAIENSRUFURSBWSUVX IHBnX3N0YXRfYWxsX3RhYmxlcyBBUwogICAgICAgICAgICAgcGdfc3RhdF9nZXRfdG90YWxf dmFjdXVtX3RpbWUoQy5vaWQpIEFTIHRvdGFsX3ZhY3V1bV90aW1lLAogICAgICAgICAgICAg cGdfc3RhdF9nZXRfdG90YWxfYXV0b3ZhY3V1bV90aW1lKEMub2lkKSBBUyB0b3RhbF9hdXRv dmFjdXVtX3RpbWUsCiAgICAgICAgICAgICBwZ19zdGF0X2dldF90b3RhbF9hbmFseXplX3Rp bWUoQy5vaWQpIEFTIHRvdGFsX2FuYWx5emVfdGltZSwKLSAgICAgICAgICAgIHBnX3N0YXRf Z2V0X3RvdGFsX2F1dG9hbmFseXplX3RpbWUoQy5vaWQpIEFTIHRvdGFsX2F1dG9hbmFseXpl X3RpbWUKKyAgICAgICAgICAgIHBnX3N0YXRfZ2V0X3RvdGFsX2F1dG9hbmFseXplX3RpbWUo Qy5vaWQpIEFTIHRvdGFsX2F1dG9hbmFseXplX3RpbWUsCisgICAgICAgICAgICBwZ19zdGF0 X2dldF9yZXZfYWxsX2Zyb3plbl9wYWdlcyhDLm9pZCkgYXMgcmV2X2FsbF9mcm96ZW5fcGFn ZXMsCisgICAgICAgICAgICBwZ19zdGF0X2dldF9yZXZfYWxsX3Zpc2libGVfcGFnZXMoQy5v aWQpIGFzIHJldl9hbGxfdmlzaWJsZV9wYWdlcwogICAgIEZST00gcGdfY2xhc3MgQyBMRUZU IEpPSU4KICAgICAgICAgIHBnX2luZGV4IEkgT04gQy5vaWQgPSBJLmluZHJlbGlkCiAgICAg ICAgICBMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIE4gT04gKE4ub2lkID0gQy5yZWxuYW1lc3Bh Y2UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4IDczM2VmNDBhZTdjLi5kODc3NmZmMTkw MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTExNiw2ICsxMTYsOSBAQCBwZ19hdG9t aWNfdWludDMyICpWYWN1dW1TaGFyZWRDb3N0QmFsYW5jZSA9IE5VTEw7CiBwZ19hdG9taWNf dWludDMyICpWYWN1dW1BY3RpdmVOV29ya2VycyA9IE5VTEw7CiBpbnQJCQlWYWN1dW1Db3N0 QmFsYW5jZUxvY2FsID0gMDsKIAorLyogQ3VtdWxhdGl2ZSBzdG9yYWdlIHRvIHJlcG9ydCB0 b3RhbCB2YWN1dW0gZGVsYXkgdGltZS4gKi8KK2RvdWJsZSBWYWN1dW1EZWxheVRpbWUgPSAw OyAvKiBtc2VjLiAqLworCiAvKiBub24tZXhwb3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8K IHN0YXRpYyBMaXN0ICpleHBhbmRfdmFjdXVtX3JlbChWYWN1dW1SZWxhdGlvbiAqdnJlbCwK IAkJCQkJCQkgICBNZW1vcnlDb250ZXh0IHZhY19jb250ZXh0LCBpbnQgb3B0aW9ucyk7CkBA IC0yNTMzLDYgKzI1MzYsNyBAQCB2YWN1dW1fZGVsYXlfcG9pbnQoYm9vbCBpc19hbmFseXpl KQogCQkJZXhpdCgxKTsKIAogCQlWYWN1dW1Db3N0QmFsYW5jZSA9IDA7CisJCVZhY3V1bURl bGF5VGltZSArPSBtc2VjOwogCiAJCS8qCiAJCSAqIEJhbGFuY2UgYW5kIHVwZGF0ZSBsaW1p dCB2YWx1ZXMgZm9yIGF1dG92YWN1dW0gd29ya2Vycy4gV2UgbXVzdCBkbwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKaW5kZXggMGZlZWExZDMwZWMuLmI1NDYxZWM2 NjFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKQEAgLTg2OCw2 ICs4NjgsOCBAQCBwYXJhbGxlbF92YWN1dW1fcHJvY2Vzc19vbmVfaW5kZXgoUGFyYWxsZWxW YWN1dW1TdGF0ZSAqcHZzLCBSZWxhdGlvbiBpbmRyZWwsCiAJSW5kZXhCdWxrRGVsZXRlUmVz dWx0ICppc3RhdCA9IE5VTEw7CiAJSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICppc3RhdF9yZXM7 CiAJSW5kZXhWYWN1dW1JbmZvIGl2aW5mbzsKKwlMVkV4dFN0YXRDb3VudGVyc0lkeCBleHRW YWNDb3VudGVyczsKKwlQZ1N0YXRfVmFjdXVtUmVsYXRpb25Db3VudHMgZXh0VmFjUmVwb3J0 OwogCiAJLyoKIAkgKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcg YnVsay1kZWxldGlvbiByZXN1bHQgaWYgc29tZW9uZQpAQCAtODc2LDYgKzg3OCw5IEBAIHBh cmFsbGVsX3ZhY3V1bV9wcm9jZXNzX29uZV9pbmRleChQYXJhbGxlbFZhY3V1bVN0YXRlICpw dnMsIFJlbGF0aW9uIGluZHJlbCwKIAlpZiAoaW5kc3RhdHMtPmlzdGF0X3VwZGF0ZWQpCiAJ CWlzdGF0ID0gJihpbmRzdGF0cy0+aXN0YXQpOwogCisJLyogU2V0IGluaXRpYWwgc3RhdGlz dGljcyB2YWx1ZXMgdG8gZ2F0aGVyIHZhY3V1bSBzdGF0aXN0aWNzIGZvciB0aGUgaW5kZXgg Ki8KKwlleHR2YWNfc3RhdHNfc3RhcnRfaWR4KGluZHJlbCwgJihpbmRzdGF0cy0+aXN0YXQp LCAmZXh0VmFjQ291bnRlcnMpOworCiAJaXZpbmZvLmluZGV4ID0gaW5kcmVsOwogCWl2aW5m by5oZWFwcmVsID0gcHZzLT5oZWFwcmVsOwogCWl2aW5mby5hbmFseXplX29ubHkgPSBmYWxz ZTsKQEAgLTkwNCw2ICs5MDksMTIgQEAgcGFyYWxsZWxfdmFjdXVtX3Byb2Nlc3Nfb25lX2lu ZGV4KFBhcmFsbGVsVmFjdXVtU3RhdGUgKnB2cywgUmVsYXRpb24gaW5kcmVsLAogCQkJCSBS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpbmRyZWwpKTsKIAl9CiAKKwkvKiBNYWtlIGV4dGVu ZGVkIHZhY3V1bSBzdGF0cyByZXBvcnQgZm9yIGluZGV4ICovCisJZXh0dmFjX3N0YXRzX2Vu ZF9pZHgoaW5kcmVsLCBpc3RhdF9yZXMsICZleHRWYWNDb3VudGVycywgJmV4dFZhY1JlcG9y dCk7CisJcGdzdGF0X3JlcG9ydF92YWN1dW0oUmVsYXRpb25HZXRSZWxpZChpbmRyZWwpLAor CQkJCQkJCWluZHJlbC0+cmRfcmVsLT5yZWxpc3NoYXJlZCwKKwkJCQkJCQkwLCAwLCAwLCAm ZXh0VmFjUmVwb3J0KTsKKwogCS8qCiAJICogQ29weSB0aGUgaW5kZXggYnVsay1kZWxldGlv biByZXN1bHQgcmV0dXJuZWQgZnJvbSBhbWJ1bGtkZWxldGUgYW5kCiAJICogYW12YWN1dW1j bGVhbnVwIHRvIHRoZSBEU00gc2VnbWVudCBpZiBpdCdzIHRoZSBmaXJzdCBjeWNsZSBiZWNh dXNlIHRoZXkKQEAgLTEwNTQsNiArMTA2NSw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9tYWluKGRz bV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYykKIAkvKiBTZXQgY29zdC1iYXNlZCB2YWN1 dW0gZGVsYXkgKi8KIAlWYWN1dW1VcGRhdGVDb3N0cygpOwogCVZhY3V1bUNvc3RCYWxhbmNl ID0gMDsKKwlWYWN1dW1EZWxheVRpbWUgPSAwOwogCVZhY3V1bUNvc3RCYWxhbmNlTG9jYWwg PSAwOwogCVZhY3V1bVNoYXJlZENvc3RCYWxhbmNlID0gJihzaGFyZWQtPmNvc3RfYmFsYW5j ZSk7CiAJVmFjdXVtQWN0aXZlTldvcmtlcnMgPSAmKHNoYXJlZC0+YWN0aXZlX253b3JrZXJz KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9yZWxh dGlvbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0aW9uLmMK aW5kZXggNjlkZjc0MWNiZjYuLjMzYTQwMDlmNzQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYwpAQCAtMjAzLDEzICsyMDMsMzkgQEAg cGdzdGF0X2Ryb3BfcmVsYXRpb24oUmVsYXRpb24gcmVsKQogCX0KIH0KIAorLyogLS0tLS0t LS0tCisgKiBwZ3N0YXRfcmVwb3J0X3ZhY3V1bV9lcnJvcigpIC0KKyAqCisgKglUZWxsIHRo ZSBjb2xsZWN0b3IgYWJvdXQgYW4gKGF1dG8pdmFjdXVtIGludGVycnVwdGlvbi4KKyAqIC0t LS0tLS0tLQorICovCit2b2lkCitwZ3N0YXRfcmVwb3J0X3ZhY3V1bV9lcnJvcihPaWQgdGFi bGVvaWQsIGJvb2wgc2hhcmVkLCBFeHRWYWNSZXBvcnRUeXBlIG1fdHlwZSkKK3sKKwlQZ1N0 YXRfVmFjdXVtUmVsYXRpb25Db3VudHMgcGFyYW1zOworCisJaWYgKCFwZ3N0YXRfdHJhY2tf Y291bnRzKQorCQlyZXR1cm47CisKKwlpZiAoc2V0X3JlcG9ydF92YWN1dW1faG9vaykKKwl7 CisJCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YoUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291 bnRzKSk7CisKKwkJcGFyYW1zLmNvbW1vbi5pbnRlcnJ1cHRzX2NvdW50Kys7CisKKwkJKCpz ZXRfcmVwb3J0X3ZhY3V1bV9ob29rKSAodGFibGVvaWQsIHNoYXJlZCwgJnBhcmFtcyk7CisJ fQorfQorCitzZXRfcmVwb3J0X3ZhY3V1bV9ob29rX3R5cGUgc2V0X3JlcG9ydF92YWN1dW1f aG9vayA9IE5VTEw7CisKIC8qCiAgKiBSZXBvcnQgdGhhdCB0aGUgdGFibGUgd2FzIGp1c3Qg dmFjdXVtZWQgYW5kIGZsdXNoIElPIHN0YXRpc3RpY3MuCiAgKi8KIHZvaWQKIHBnc3RhdF9y ZXBvcnRfdmFjdXVtKE9pZCB0YWJsZW9pZCwgYm9vbCBzaGFyZWQsCiAJCQkJCSBQZ1N0YXRf Q291bnRlciBsaXZldHVwbGVzLCBQZ1N0YXRfQ291bnRlciBkZWFkdHVwbGVzLAotCQkJCQkg VGltZXN0YW1wVHogc3RhcnR0aW1lKQorCQkJCQkgVGltZXN0YW1wVHogc3RhcnR0aW1lLCBQ Z1N0YXRfVmFjdXVtUmVsYXRpb25Db3VudHMgKnBhcmFtcykKIHsKIAlQZ1N0YXRfRW50cnlS ZWYgKmVudHJ5X3JlZjsKIAlQZ1N0YXRTaGFyZWRfUmVsYXRpb24gKnNodGFiZW50cnk7CkBA IC0yMzUsNiArMjYxLDExIEBAIHBnc3RhdF9yZXBvcnRfdmFjdXVtKE9pZCB0YWJsZW9pZCwg Ym9vbCBzaGFyZWQsCiAJdGFiZW50cnktPmxpdmVfdHVwbGVzID0gbGl2ZXR1cGxlczsKIAl0 YWJlbnRyeS0+ZGVhZF90dXBsZXMgPSBkZWFkdHVwbGVzOwogCisJaWYgKHNldF9yZXBvcnRf dmFjdXVtX2hvb2spCisJeworCQkoKnNldF9yZXBvcnRfdmFjdXVtX2hvb2spICh0YWJsZW9p ZCwgc2hhcmVkLCBwYXJhbXMpOworCX0KKwogCS8qCiAJICogSXQgaXMgcXVpdGUgcG9zc2li bGUgdGhhdCBhIG5vbi1hZ2dyZXNzaXZlIFZBQ1VVTSBlbmRlZCB1cCBza2lwcGluZwogCSAq IHZhcmlvdXMgcGFnZXMsIGhvd2V2ZXIsIHdlJ2xsIHplcm8gdGhlIGluc2VydCBjb3VudGVy IGhlcmUgcmVnYXJkbGVzcy4KQEAgLTg4MSw2ICs5MTIsOSBAQCBwZ3N0YXRfcmVsYXRpb25f Zmx1c2hfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJvb2wgbm93YWl0KQogCXRh YmVudHJ5LT5ibG9ja3NfZmV0Y2hlZCArPSBsc3RhdHMtPmNvdW50cy5ibG9ja3NfZmV0Y2hl ZDsKIAl0YWJlbnRyeS0+YmxvY2tzX2hpdCArPSBsc3RhdHMtPmNvdW50cy5ibG9ja3NfaGl0 OwogCisJdGFiZW50cnktPnJldl9hbGxfZnJvemVuX3BhZ2VzICs9IGxzdGF0cy0+Y291bnRz LnJldl9hbGxfZnJvemVuX3BhZ2VzOworCXRhYmVudHJ5LT5yZXZfYWxsX3Zpc2libGVfcGFn ZXMgKz0gbHN0YXRzLT5jb3VudHMucmV2X2FsbF92aXNpYmxlX3BhZ2VzOworCiAJLyogQ2xh bXAgbGl2ZV90dXBsZXMgaW4gY2FzZSBvZiBuZWdhdGl2ZSBkZWx0YV9saXZlX3R1cGxlcyAq LwogCXRhYmVudHJ5LT5saXZlX3R1cGxlcyA9IE1heCh0YWJlbnRyeS0+bGl2ZV90dXBsZXMs IDApOwogCS8qIExpa2V3aXNlIGZvciBkZWFkX3R1cGxlcyAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcGdzdGF0ZnVuY3MuYwppbmRleCBjNzU2YzJiZWJhYS4uOTQ4MmJmODA3MjEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCkBAIC0xMDYsNiArMTA2LDEyIEBAIFBH X1NUQVRfR0VUX1JFTEVOVFJZX0lOVDY0KHR1cGxlc191cGRhdGVkKQogLyogcGdfc3RhdF9n ZXRfdmFjdXVtX2NvdW50ICovCiBQR19TVEFUX0dFVF9SRUxFTlRSWV9JTlQ2NCh2YWN1dW1f Y291bnQpCiAKKy8qIHBnX3N0YXRfZ2V0X3Jldl9mcm96ZW5fcGFnZXMgKi8KK1BHX1NUQVRf R0VUX1JFTEVOVFJZX0lOVDY0KHJldl9hbGxfZnJvemVuX3BhZ2VzKQorCisvKiBwZ19zdGF0 X2dldF9yZXZfYWxsX3Zpc2libGVfcGFnZXMgKi8KK1BHX1NUQVRfR0VUX1JFTEVOVFJZX0lO VDY0KHJldl9hbGxfdmlzaWJsZV9wYWdlcykKKwogI2RlZmluZSBQR19TVEFUX0dFVF9SRUxF TlRSWV9GTE9BVDgoc3RhdCkJCQkJCQlcCiBEYXR1bQkJCQkJCQkJCQkJCQkJCVwKIENwcENv bmNhdChwZ19zdGF0X2dldF8sc3RhdCkoUEdfRlVOQ1RJT05fQVJHUykJCQkJCVwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2Vycm9yL2Vsb2cuYwppbmRleCBiN2I5NjkyZjhjOC4uZjBlY2Y4NmU1MTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9lcnJvci9lbG9nLmMKQEAgLTE2MjcsNiArMTYyNywxOSBAQCBnZXRpbnRlcm5h bGVycnBvc2l0aW9uKHZvaWQpCiAJcmV0dXJuIGVkYXRhLT5pbnRlcm5hbHBvczsKIH0KIAor LyoKKyAqIFJldHVybiBlbGV2ZWwgb2YgZXJyb3JzCisgKi8KK2ludAorZ2V0ZXJyZWxldmVs KHZvaWQpCit7CisJRXJyb3JEYXRhICAqZWRhdGEgPSAmZXJyb3JkYXRhW2Vycm9yZGF0YV9z dGFja19kZXB0aF07CisKKwkvKiB3ZSBkb24ndCBib3RoZXIgaW5jcmVtZW50aW5nIHJlY3Vy c2lvbl9kZXB0aCAqLworCUNIRUNLX1NUQUNLX0RFUFRIKCk7CisKKwlyZXR1cm4gZWRhdGEt PmVsZXZlbDsKK30KIAogLyoKICAqIEZ1bmN0aW9ucyB0byBhbGxvdyBjb25zdHJ1Y3Rpb24g b2YgZXJyb3IgbWVzc2FnZSBzdHJpbmdzIHNlcGFyYXRlbHkgZnJvbQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKaW5kZXggMTE4ZDZkYTFhY2UuLmUwYzdjZjI5YjNhIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEyNTc2LDQgKzEyNTc2LDEyIEBACiAgIHByb2FyZ25h bWVzID0+ICd7cGlkLGlvX2lkLGlvX2dlbmVyYXRpb24sc3RhdGUsb3BlcmF0aW9uLG9mZixs ZW5ndGgsdGFyZ2V0LGhhbmRsZV9kYXRhX2xlbixyYXdfcmVzdWx0LHJlc3VsdCx0YXJnZXRf ZGVzYyxmX3N5bmMsZl9sb2NhbG1lbSxmX2J1ZmZlcmVkfScsCiAgIHByb3NyYyA9PiAncGdf Z2V0X2Fpb3MnIH0sCiAKKyAgeyBvaWQgPT4gJzgwMDInLCBkZXNjciA9PiAnc3RhdGlzdGlj czogbnVtYmVyIG9mIHRpbWVzIHRoZSBhbGwtdmlzaWJsZSBwYWdlcyBpbiB0aGUgdmlzaWJp bGl0eSBtYXAgd2FzIHJlbW92ZWQgZm9yIHBhZ2VzIG9mIHRhYmxlJywKKyAgcHJvbmFtZSA9 PiAncGdfc3RhdF9nZXRfcmV2X2FsbF92aXNpYmxlX3BhZ2VzJywgcHJvdm9sYXRpbGUgPT4g J3MnLAorICBwcm9wYXJhbGxlbCA9PiAncicsIHByb3JldHR5cGUgPT4gJ2ludDgnLCBwcm9h cmd0eXBlcyA9PiAnb2lkJywKKyAgcHJvc3JjID0+ICdwZ19zdGF0X2dldF9yZXZfYWxsX3Zp c2libGVfcGFnZXMnIH0sCisgIHsgb2lkID0+ICc4MDAzJywgZGVzY3IgPT4gJ3N0YXRpc3Rp Y3M6IG51bWJlciBvZiB0aW1lcyB0aGUgYWxsLWZyb3plbiBwYWdlcyBpbiB0aGUgdmlzaWJp bGl0eSBtYXAgd2FzIHJlbW92ZWQgZm9yIHBhZ2VzIG9mIHRhYmxlJywKKyAgcHJvbmFtZSA9 PiAncGdfc3RhdF9nZXRfcmV2X2FsbF9mcm96ZW5fcGFnZXMnLCBwcm92b2xhdGlsZSA9PiAn cycsCisgIHByb3BhcmFsbGVsID0+ICdyJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2Fy Z3R5cGVzID0+ICdvaWQnLAorICBwcm9zcmMgPT4gJ3BnX3N0YXRfZ2V0X3Jldl9hbGxfZnJv emVuX3BhZ2VzJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFj dXVtLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAppbmRleCAxNGVlY2NiZDcx OC4uYmM5ZGYxNDMzYzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1 bS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCkBAIC0yNSw2ICsyNSw3 IEBACiAjaW5jbHVkZSAic3RvcmFnZS9idWYuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xvY2su aCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgorI2luY2x1ZGUgInBnc3RhdC5oIgog CiAvKgogICogRmxhZ3MgZm9yIGFtcGFyYWxsZWx2YWN1dW1vcHRpb25zIHRvIGNvbnRyb2wg dGhlIHBhcnRpY2lwYXRpb24gb2YgYnVsa2RlbGV0ZQpAQCAtMjk1LDYgKzI5NiwyNiBAQCB0 eXBlZGVmIHN0cnVjdCBWYWNEZWFkSXRlbXNJbmZvCiAJaW50NjQJCW51bV9pdGVtczsJCS8q IGN1cnJlbnQgIyBvZiBlbnRyaWVzICovCiB9IFZhY0RlYWRJdGVtc0luZm87CiAKKy8qCisg KiBDb3VudGVycyBhbmQgdXNhZ2UgZGF0YSBmb3IgZXh0ZW5kZWQgc3RhdHMgdHJhY2tpbmcu CisgKi8KK3R5cGVkZWYgc3RydWN0IExWRXh0U3RhdENvdW50ZXJzCit7CisJVGltZXN0YW1w VHogc3RhcnR0aW1lOworCVdhbFVzYWdlCXdhbHVzYWdlOworCUJ1ZmZlclVzYWdlIGJ1ZnVz YWdlOworCWRvdWJsZQkJVmFjdXVtRGVsYXlUaW1lOworCVBnU3RhdF9Db3VudGVyIGJsb2Nr c19mZXRjaGVkOworCVBnU3RhdF9Db3VudGVyIGJsb2Nrc19oaXQ7Cit9IExWRXh0U3RhdENv dW50ZXJzOworCit0eXBlZGVmIHN0cnVjdCBMVkV4dFN0YXRDb3VudGVyc0lkeAoreworCUxW RXh0U3RhdENvdW50ZXJzIGNvbW1vbjsKKwlpbnQ2NAkJcGFnZXNfZGVsZXRlZDsKKwlpbnQ2 NAkJdHVwbGVzX3JlbW92ZWQ7Cit9IExWRXh0U3RhdENvdW50ZXJzSWR4OworCiAvKiBHVUMg cGFyYW1ldGVycyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBkZWZhdWx0X3N0YXRpc3Rp Y3NfdGFyZ2V0OwkvKiBQR0RMTElNUE9SVCBmb3IgUG9zdEdJUyAqLwogZXh0ZXJuIFBHRExM SU1QT1JUIGludCB2YWN1dW1fZnJlZXplX21pbl9hZ2U7CkBAIC0zMjcsNiArMzQ4LDcgQEAg ZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSB2YWN1dW1fbWF4X2VhZ2VyX2ZyZWV6ZV9mYWls dXJlX3JhdGU7CiBleHRlcm4gUEdETExJTVBPUlQgcGdfYXRvbWljX3VpbnQzMiAqVmFjdXVt U2hhcmVkQ29zdEJhbGFuY2U7CiBleHRlcm4gUEdETExJTVBPUlQgcGdfYXRvbWljX3VpbnQz MiAqVmFjdXVtQWN0aXZlTldvcmtlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IFZhY3V1 bUNvc3RCYWxhbmNlTG9jYWw7CitleHRlcm4gUEdETExJTVBPUlQgZG91YmxlIFZhY3V1bURl bGF5VGltZTsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgVmFjdXVtRmFpbHNhZmVBY3Rp dmU7CiBleHRlcm4gUEdETExJTVBPUlQgZG91YmxlIHZhY3V1bV9jb3N0X2RlbGF5OwpAQCAt NDA3LDQgKzQyOSw4IEBAIGV4dGVybiBkb3VibGUgYW5sX3JhbmRvbV9mcmFjdCh2b2lkKTsK IGV4dGVybiBkb3VibGUgYW5sX2luaXRfc2VsZWN0aW9uX3N0YXRlKGludCBuKTsKIGV4dGVy biBkb3VibGUgYW5sX2dldF9uZXh0X1MoZG91YmxlIHQsIGludCBuLCBkb3VibGUgKnN0YXRl cHRyKTsKIAorZXh0ZXJuIHZvaWQgZXh0dmFjX3N0YXRzX3N0YXJ0X2lkeChSZWxhdGlvbiBy ZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCisJCQkJCSAgIExWRXh0U3RhdENv dW50ZXJzSWR4ICpjb3VudGVycyk7CitleHRlcm4gdm9pZCBleHR2YWNfc3RhdHNfZW5kX2lk eChSZWxhdGlvbiByZWwsIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCisJCQkJCSBM VkV4dFN0YXRDb3VudGVyc0lkeCAqY291bnRlcnMsIFBnU3RhdF9WYWN1dW1SZWxhdGlvbkNv dW50cyAqcmVwb3J0KTsKICNlbmRpZgkJCQkJCQkvKiBWQUNVVU1fSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRleCBm NDAyYjE3Mjk1Yy4uMTVkYTFmMjc2NTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bnc3Rh dC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC0xMDAsNiArMTAwLDk3IEBAIHR5 cGVkZWYgc3RydWN0IFBnU3RhdF9GdW5jdGlvbkNhbGxVc2FnZQogCWluc3RyX3RpbWUJc3Rh cnQ7CiB9IFBnU3RhdF9GdW5jdGlvbkNhbGxVc2FnZTsKIAorCisvKiBUeXBlIG9mIEV4dFZh Y1JlcG9ydCAqLwordHlwZWRlZiBlbnVtIEV4dFZhY1JlcG9ydFR5cGUKK3sKKwlQR1NUQVRf RVhUVkFDX0lOVkFMSUQgPSAwLAorCVBHU1RBVF9FWFRWQUNfVEFCTEUgPSAxLAorCVBHU1RB VF9FWFRWQUNfSU5ERVggPSAyLAorCVBHU1RBVF9FWFRWQUNfREIgPSAzLAorfSBFeHRWYWNS ZXBvcnRUeXBlOworCit0eXBlZGVmIHN0cnVjdCBQZ1N0YXRfQ29tbW9uQ291bnRzCit7CisJ LyogYmxvY2tzICovCisJaW50NjQgdG90YWxfYmxrc19yZWFkOworCWludDY0IHRvdGFsX2Js a3NfaGl0OworCWludDY0IHRvdGFsX2Jsa3NfZGlydGllZDsKKwlpbnQ2NCB0b3RhbF9ibGtz X3dyaXR0ZW47CisKKwkvKiBoZWFwIGJsb2NrcyAqLworCWludDY0IGJsa3NfZmV0Y2hlZDsK KwlpbnQ2NCBibGtzX2hpdDsKKworCS8qIFdBTCAqLworCWludDY0IHdhbF9yZWNvcmRzOwor CWludDY0IHdhbF9mcGk7CisJdWludDY0IHdhbF9ieXRlczsKKworCS8qIFRpbWUgKi8KKwlk b3VibGUgYmxrX3JlYWRfdGltZTsKKwlkb3VibGUgYmxrX3dyaXRlX3RpbWU7CisJZG91Ymxl IGRlbGF5X3RpbWU7CisJZG91YmxlIHRvdGFsX3RpbWU7CisKKwkvKiBmYWlsc2FmZSAqLwor CWludDMyIHdyYXBhcm91bmRfZmFpbHNhZmVfY291bnQ7CisJaW50MzIgaW50ZXJydXB0c19j b3VudDsKK30gUGdTdGF0X0NvbW1vbkNvdW50czsKKworLyogLS0tLS0tLS0tLQorICoKKyAq IFBnU3RhdF9WYWN1dW1SZWxhdGlvbkNvdW50cworICoKKyAqIEFkZGl0aW9uYWwgc3RhdGlz dGljcyBvZiB2YWN1dW0gcHJvY2Vzc2luZyBvdmVyIGEgcmVsYXRpb24uCisgKiBwYWdlc19y ZW1vdmVkIGlzIHRoZSBhbW91bnQgYnkgd2hpY2ggdGhlIHBoeXNpY2FsbHkgc2hyYW5rLAor ICogaWYgYW55IChpZSB0aGUgY2hhbmdlIGluIGl0cyB0b3RhbCBzaXplIG9uIGRpc2spCisg KiBwYWdlc19kZWxldGVkIHJlZmVyIHRvIGZyZWUgc3BhY2Ugd2l0aGluIHRoZSBpbmRleCBm aWxlCisgKiAtLS0tLS0tLS0tCisgKi8KK3R5cGVkZWYgc3RydWN0IFBnU3RhdF9WYWN1dW1S ZWxhdGlvbkNvdW50cworeworCVBnU3RhdF9Db21tb25Db3VudHMgY29tbW9uOworCisJRXh0 VmFjUmVwb3J0VHlwZSB0eXBlOwkJLyogaGVhcCwgaW5kZXgsIGV0Yy4gKi8KKworCS8qIC0t LS0tLS0tLS0KKwkgKgorCSAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBtZXRyaWNzIG9mIHN0YXRp c3RpYyBmb3IgdGFibGVzIGFuZCBpbmRleGVzLAorCSAqIHdoaWNoIGNvbGxlY3QgZHVyaW5n IHZhY3V1bS4KKwkgKiBUaGUgdW5pb24gb3BlcmF0b3IgYWxsb3dzIHRvIGNvbWJpbmUgdGhl c2Ugc3RhdGlzdGljcworCSAqIHNvIHRoYXQgZWFjaCBtZXRyaWMgaXMgYXNzaWduZWQgdG8g YSBzcGVjaWZpYyBjbGFzcyBvZiBjb2xsZWN0ZWQgc3RhdGlzdGljcy4KKwkgKiBTdWNoIGEg Y29tYmluZWQgc3RydWN0dXJlIHdhcyBjYWxsZWQgcGVyX3R5cGVfc3RhdHMuCisJICogVGhl IG5hbWUgb2YgdGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IHVzZWQgYW55d2hlcmUsCisJ ICogaXQgZXhpc3RzIG9ubHkgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUuCisJICogLS0t LS0tLS0tLQorCSovCisJdW5pb24KKwl7CisJCXN0cnVjdAorCQl7CisJCQlpbnQ2NAkJdHVw bGVzX2Zyb3plbjsJCS8qIHR1cGxlcyBmcm96ZW4gdXAgYnkgdmFjdXVtICovCisJCQlpbnQ2 NAkJcmVjZW50bHlfZGVhZF90dXBsZXM7CS8qIGRlbGV0ZWQgdHVwbGVzIHRoYXQgYXJlIHN0 aWxsIHZpc2libGUgdG8gc29tZSB0cmFuc2FjdGlvbiAqLworCQkJaW50NjQJCW1pc3NlZF9k ZWFkX3R1cGxlczsJCS8qIHR1cGxlcyBub3QgcHJ1bmVkIGJ5IHZhY3V1bSBkdWUgdG8gZmFp bHVyZSB0byBnZXQgYSBjbGVhbnVwIGxvY2sgKi8KKwkJCWludDY0CQlwYWdlc19zY2FubmVk OwkJLyogaGVhcCBwYWdlcyBleGFtaW5lZCAobm90IHNraXBwZWQgYnkgVk0pICovCisJCQlp bnQ2NAkJcGFnZXNfcmVtb3ZlZDsJCS8qIGhlYXAgcGFnZXMgcmVtb3ZlZCBieSB2YWN1dW0g InRydW5jYXRpb24iICovCisJCQlpbnQ2NAkJcGFnZXNfZnJvemVuOwkJLyogcGFnZXMgbWFy a2VkIGluIFZNIGFzIGZyb3plbiAqLworCQkJaW50NjQJCXBhZ2VzX2FsbF92aXNpYmxlOwkv KiBwYWdlcyBtYXJrZWQgaW4gVk0gYXMgYWxsLXZpc2libGUgKi8KKwkJCWludDY0CQl2bV9u ZXdfZnJvemVuX3BhZ2VzOwkJLyogcGFnZXMgbWFya2VkIGluIFZNIGFzIGZyb3plbiAqLwor CQkJaW50NjQJCXZtX25ld192aXNpYmxlX3BhZ2VzOwkvKiBwYWdlcyBtYXJrZWQgaW4gVk0g YXMgYWxsLXZpc2libGUgKi8KKwkJCWludDY0CQl2bV9uZXdfdmlzaWJsZV9mcm96ZW5fcGFn ZXM7CS8qIHBhZ2VzIG1hcmtlZCBpbiBWTSBhcyBhbGwtdmlzaWJsZSBhbmQgZnJvemVuICov CisJCQlpbnQ2NAkJbWlzc2VkX2RlYWRfcGFnZXM7CQkvKiBwYWdlcyB3aXRoIG1pc3NlZCBk ZWFkIHR1cGxlcyAqLworCQkJaW50NjQgCQl0dXBsZXNfZGVsZXRlZDsKKwkJfQkJCXRhYmxl OworCQlzdHJ1Y3QKKwkJeworCQkJaW50NjQgCQl0dXBsZXNfZGVsZXRlZDsKKwkJCWludDY0 CQlwYWdlc19kZWxldGVkOwkJLyogbnVtYmVyIG9mIHBhZ2VzIGRlbGV0ZWQgYnkgdmFjdXVt ICovCisJCX0JCQlpbmRleDsKKwl9IC8qIHBlcl90eXBlX3N0YXRzICovOworfSBQZ1N0YXRf VmFjdXVtUmVsYXRpb25Db3VudHM7CisKKwogLyogLS0tLS0tLS0tLQogICogUGdTdGF0X0Jh Y2tlbmRTdWJFbnRyeQlOb24tZmx1c2hlZCBzdWJzY3JpcHRpb24gc3RhdHMuCiAgKiAtLS0t LS0tLS0tCkBAIC0xNTMsNiArMjQ0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X1RhYmxl Q291bnRzCiAKIAlQZ1N0YXRfQ291bnRlciBibG9ja3NfZmV0Y2hlZDsKIAlQZ1N0YXRfQ291 bnRlciBibG9ja3NfaGl0OworCisJUGdTdGF0X0NvdW50ZXIgcmV2X2FsbF92aXNpYmxlX3Bh Z2VzOworCVBnU3RhdF9Db3VudGVyIHJldl9hbGxfZnJvemVuX3BhZ2VzOwogfSBQZ1N0YXRf VGFibGVDb3VudHM7CiAKIC8qIC0tLS0tLS0tLS0KQEAgLTIxMSw3ICszMDUsNyBAQCB0eXBl ZGVmIHN0cnVjdCBQZ1N0YXRfVGFibGVYYWN0U3RhdHVzCiAgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0j ZGVmaW5lIFBHU1RBVF9GSUxFX0ZPUk1BVF9JRAkweDAxQTVCQ0I3CisjZGVmaW5lIFBHU1RB VF9GSUxFX0ZPUk1BVF9JRAkweDAxQTVCQ0I4CiAKIHR5cGVkZWYgc3RydWN0IFBnU3RhdF9B cmNoaXZlclN0YXRzCiB7CkBAIC00NTMsNiArNTQ3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdT dGF0X1N0YXRUYWJFbnRyeQogCVBnU3RhdF9Db3VudGVyIHRvdGFsX2F1dG92YWN1dW1fdGlt ZTsKIAlQZ1N0YXRfQ291bnRlciB0b3RhbF9hbmFseXplX3RpbWU7CiAJUGdTdGF0X0NvdW50 ZXIgdG90YWxfYXV0b2FuYWx5emVfdGltZTsKKworCVBnU3RhdF9Db3VudGVyIHJldl9hbGxf dmlzaWJsZV9wYWdlczsKKwlQZ1N0YXRfQ291bnRlciByZXZfYWxsX2Zyb3plbl9wYWdlczsK IH0gUGdTdGF0X1N0YXRUYWJFbnRyeTsKIAogLyogLS0tLS0tCkBAIC02NjAsMTAgKzc1Nywx MSBAQCBleHRlcm4gdm9pZCBwZ3N0YXRfdW5saW5rX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7 CiAKIGV4dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfdmFjdXVtKE9pZCB0YWJsZW9pZCwgYm9v bCBzaGFyZWQsCiAJCQkJCQkJCSBQZ1N0YXRfQ291bnRlciBsaXZldHVwbGVzLCBQZ1N0YXRf Q291bnRlciBkZWFkdHVwbGVzLAotCQkJCQkJCQkgVGltZXN0YW1wVHogc3RhcnR0aW1lKTsK KwkJCQkJCQkJIFRpbWVzdGFtcFR6IHN0YXJ0dGltZSwgUGdTdGF0X1ZhY3V1bVJlbGF0aW9u Q291bnRzICpwYXJhbXMpOwogZXh0ZXJuIHZvaWQgcGdzdGF0X3JlcG9ydF9hbmFseXplKFJl bGF0aW9uIHJlbCwKIAkJCQkJCQkJICBQZ1N0YXRfQ291bnRlciBsaXZldHVwbGVzLCBQZ1N0 YXRfQ291bnRlciBkZWFkdHVwbGVzLAogCQkJCQkJCQkgIGJvb2wgcmVzZXRjb3VudGVyLCBU aW1lc3RhbXBUeiBzdGFydHRpbWUpOworZXh0ZXJuIHZvaWQgcGdzdGF0X3JlcG9ydF92YWN1 dW1fZXJyb3IoT2lkIHRhYmxlb2lkLCBib29sIHNoYXJlZCwgRXh0VmFjUmVwb3J0VHlwZSBt X3R5cGUpOwogCiAvKgogICogSWYgc3RhdHMgYXJlIGVuYWJsZWQsIGJ1dCBwZW5kaW5nIGRh dGEgaGFzbid0IGJlZW4gcHJlcGFyZWQgeWV0LCBjYWxsCkBAIC03MTEsNiArODA5LDE3IEBA IGV4dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfYW5hbHl6ZShSZWxhdGlvbiByZWwsCiAJCWlm IChwZ3N0YXRfc2hvdWxkX2NvdW50X3JlbGF0aW9uKHJlbCkpCQkJCQkJXAogCQkJKHJlbCkt PnBnc3RhdF9pbmZvLT5jb3VudHMuYmxvY2tzX2hpdCsrOwkJCQlcCiAJfSB3aGlsZSAoMCkK Ky8qIGFjY3VtdWxhdGUgdW5mcm96ZW4gYWxsLXZpc2libGUgYW5kIGFsbC1mcm96ZW4gcGFn ZXMgKi8KKyNkZWZpbmUgcGdzdGF0X2NvdW50X3ZtX3Jldl9hbGxfdmlzaWJsZShyZWwpCQkJ CQkJXAorCWRvIHsJCQkJCQkJCQkJCQkJCQlcCisJCWlmIChwZ3N0YXRfc2hvdWxkX2NvdW50 X3JlbGF0aW9uKHJlbCkpCQkJCQkJXAorCQkJKHJlbCktPnBnc3RhdF9pbmZvLT5jb3VudHMu cmV2X2FsbF92aXNpYmxlX3BhZ2VzKys7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBwZ3N0 YXRfY291bnRfdm1fcmV2X2FsbF9mcm96ZW4ocmVsKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJ CQkJCQkJXAorCQlpZiAocGdzdGF0X3Nob3VsZF9jb3VudF9yZWxhdGlvbihyZWwpKQkJCQkJ CVwKKwkJCShyZWwpLT5wZ3N0YXRfaW5mby0+Y291bnRzLnJldl9hbGxfZnJvemVuX3BhZ2Vz Kys7CVwKKwl9IHdoaWxlICgwKQogCiBleHRlcm4gdm9pZCBwZ3N0YXRfY291bnRfaGVhcF9p bnNlcnQoUmVsYXRpb24gcmVsLCBQZ1N0YXRfQ291bnRlciBuKTsKIGV4dGVybiB2b2lkIHBn c3RhdF9jb3VudF9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWwsIGJvb2wgaG90LCBib29sIG5l d3BhZ2UpOwpAQCAtODM4LDQgKzk0Nyw5IEBAIGV4dGVybiBQR0RMTElNUE9SVCBQZ1N0YXRf Q291bnRlciBwZ1N0YXRUcmFuc2FjdGlvbklkbGVUaW1lOwogLyogdXBkYXRlZCBieSB0aGUg dHJhZmZpYyBjb3AgYW5kIGluIGVycmZpbmlzaCgpICovCiBleHRlcm4gUEdETExJTVBPUlQg U2Vzc2lvbkVuZFR5cGUgcGdTdGF0U2Vzc2lvbkVuZENhdXNlOwogCisvKiBIb29rIGZvciBw bHVnaW5zIHRvIGdldCBjb250cm9sIGluIHNldF9yZWxfcGF0aGxpc3QoKSAqLwordHlwZWRl ZiB2b2lkICgqc2V0X3JlcG9ydF92YWN1dW1faG9va190eXBlKSAoT2lkIHRhYmxlb2lkLCBi b29sIHNoYXJlZCwgUGdTdGF0X1ZhY3V1bVJlbGF0aW9uQ291bnRzICpwYXJhbXMpOworZXh0 ZXJuIFBHRExMSU1QT1JUIHNldF9yZXBvcnRfdmFjdXVtX2hvb2tfdHlwZSBzZXRfcmVwb3J0 X3ZhY3V1bV9ob29rOworCisKICNlbmRpZgkJCQkJCQkvKiBQR1NUQVRfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZWxvZy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZWxv Zy5oCmluZGV4IDY3NWY0ZjVmNDY5Li4zNTZkYWRkNmIwYSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvZWxvZy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2Vsb2cuaApAQCAt MjMwLDYgKzIzMCw3IEBAIGV4dGVybiBpbnQJZ2V0ZXJyY29kZSh2b2lkKTsKIGV4dGVybiBp bnQJZ2V0ZXJycG9zaXRpb24odm9pZCk7CiBleHRlcm4gaW50CWdldGludGVybmFsZXJycG9z aXRpb24odm9pZCk7CiAKK2V4dGVybiBpbnQJZ2V0ZXJyZWxldmVsKHZvaWQpOwogCiAvKi0t LS0tLS0tLS0KICAqIE9sZC1zdHlsZSBlcnJvciByZXBvcnRpbmcgQVBJOiB0byBiZSB1c2Vk IGluIHRoaXMgd2F5OgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y dWxlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCAz NWU4YWFkNzcwMS4uNDczMWNhMjEyMWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcnVsZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0CkBAIC0xODMzLDcgKzE4MzMsOSBAQCBwZ19zdGF0X2FsbF90YWJsZXN8IFNFTEVD VCBjLm9pZCBBUyByZWxpZCwKICAgICBwZ19zdGF0X2dldF90b3RhbF92YWN1dW1fdGltZShj Lm9pZCkgQVMgdG90YWxfdmFjdXVtX3RpbWUsCiAgICAgcGdfc3RhdF9nZXRfdG90YWxfYXV0 b3ZhY3V1bV90aW1lKGMub2lkKSBBUyB0b3RhbF9hdXRvdmFjdXVtX3RpbWUsCiAgICAgcGdf c3RhdF9nZXRfdG90YWxfYW5hbHl6ZV90aW1lKGMub2lkKSBBUyB0b3RhbF9hbmFseXplX3Rp bWUsCi0gICAgcGdfc3RhdF9nZXRfdG90YWxfYXV0b2FuYWx5emVfdGltZShjLm9pZCkgQVMg dG90YWxfYXV0b2FuYWx5emVfdGltZQorICAgIHBnX3N0YXRfZ2V0X3RvdGFsX2F1dG9hbmFs eXplX3RpbWUoYy5vaWQpIEFTIHRvdGFsX2F1dG9hbmFseXplX3RpbWUsCisgICAgcGdfc3Rh dF9nZXRfcmV2X2FsbF9mcm96ZW5fcGFnZXMoYy5vaWQpIEFTIHJldl9hbGxfZnJvemVuX3Bh Z2VzLAorICAgIHBnX3N0YXRfZ2V0X3Jldl9hbGxfdmlzaWJsZV9wYWdlcyhjLm9pZCkgQVMg cmV2X2FsbF92aXNpYmxlX3BhZ2VzCiAgICBGUk9NICgocGdfY2xhc3MgYwogICAgICBMRUZU IEpPSU4gcGdfaW5kZXggaSBPTiAoKGMub2lkID0gaS5pbmRyZWxpZCkpKQogICAgICBMRUZU IEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gKChuLm9pZCA9IGMucmVsbmFtZXNwYWNlKSkpCkBA IC0yMjMyLDcgKzIyMzQsOSBAQCBwZ19zdGF0X3N5c190YWJsZXN8IFNFTEVDVCByZWxpZCwK ICAgICB0b3RhbF92YWN1dW1fdGltZSwKICAgICB0b3RhbF9hdXRvdmFjdXVtX3RpbWUsCiAg ICAgdG90YWxfYW5hbHl6ZV90aW1lLAotICAgIHRvdGFsX2F1dG9hbmFseXplX3RpbWUKKyAg ICB0b3RhbF9hdXRvYW5hbHl6ZV90aW1lLAorICAgIHJldl9hbGxfZnJvemVuX3BhZ2VzLAor ICAgIHJldl9hbGxfdmlzaWJsZV9wYWdlcwogICAgRlJPTSBwZ19zdGF0X2FsbF90YWJsZXMK ICAgV0hFUkUgKChzY2hlbWFuYW1lID0gQU5ZIChBUlJBWVsncGdfY2F0YWxvZyc6Om5hbWUs ICdpbmZvcm1hdGlvbl9zY2hlbWEnOjpuYW1lXSkpIE9SIChzY2hlbWFuYW1lIH4gJ15wZ190 b2FzdCc6OnRleHQpKTsKIHBnX3N0YXRfdXNlcl9mdW5jdGlvbnN8IFNFTEVDVCBwLm9pZCBB UyBmdW5jaWQsCkBAIC0yMjg0LDcgKzIyODgsOSBAQCBwZ19zdGF0X3VzZXJfdGFibGVzfCBT RUxFQ1QgcmVsaWQsCiAgICAgdG90YWxfdmFjdXVtX3RpbWUsCiAgICAgdG90YWxfYXV0b3Zh Y3V1bV90aW1lLAogICAgIHRvdGFsX2FuYWx5emVfdGltZSwKLSAgICB0b3RhbF9hdXRvYW5h bHl6ZV90aW1lCisgICAgdG90YWxfYXV0b2FuYWx5emVfdGltZSwKKyAgICByZXZfYWxsX2Zy b3plbl9wYWdlcywKKyAgICByZXZfYWxsX3Zpc2libGVfcGFnZXMKICAgIEZST00gcGdfc3Rh dF9hbGxfdGFibGVzCiAgIFdIRVJFICgoc2NoZW1hbmFtZSA8PiBBTEwgKEFSUkFZWydwZ19j YXRhbG9nJzo6bmFtZSwgJ2luZm9ybWF0aW9uX3NjaGVtYSc6Om5hbWVdKSkgQU5EIChzY2hl bWFuYW1lICF+ICdecGdfdG9hc3QnOjp0ZXh0KSk7CiBwZ19zdGF0X3dhbHwgU0VMRUNUIHdh bF9yZWNvcmRzLAotLSAKMi4zNC4xCgo= --------------hNwPRI2u6N2cJ2mNncngU2PE--