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 1r0gLm-0078ih-Ah for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Nov 2023 11:03:58 +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 1r0gLk-002AFa-VE for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Nov 2023 11:03:56 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r0gLk-002AFS-39 for pgsql-hackers@lists.postgresql.org; Wed, 08 Nov 2023 11:03:56 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r0gLc-004YBO-Q2 for pgsql-hackers@lists.postgresql.org; Wed, 08 Nov 2023 11:03:54 +0000 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-53dd3f169d8so11223914a12.3 for ; Wed, 08 Nov 2023 03:03:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1699441425; x=1700046225; darn=lists.postgresql.org; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=byUjod6Ow2CfH30fEBD8CdbnY+gOqCMEPPiF837OA6w=; b=QoxDMPwoDP7wrF9QImvScC4Jj1+V8MxPeYrIbkVDZRNgf5sMkAMLMq7CHnD5o+bKg2 xNKCQWwuyjaUF/Ri5bXr16aE2P/DFHpOoVlIDS6x+9Igg4xeMqqQ6cyrC2wBiuFqqPbH qVBqJQ8w0vCynE9VC70jafiN3bP8M8OaYzDsoPLqFekEAYymiEGQOjZZLZfZswI56EmV BJjx9qlpu5nzWf2YIWl4Lf4vwNQbkyZSAZPg6pPEMawM3KgYeOeRQcIMCzYloDY198bp nrrf1f6S+PVnqLHwwG/AGB+dPPDzqnlFGFLa2IPqvHiQTHP7GvHLOS3Fdgr2A6CsoLXu 3nfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699441425; x=1700046225; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=byUjod6Ow2CfH30fEBD8CdbnY+gOqCMEPPiF837OA6w=; b=brimTRdddD+zvqH759aJetfb5e4rHv0gVCJbAprC3Myp3lCR5YUz+U+1NYoctPlDel xBh3DDyPUqBop0eeC4dOifKbcj+L2LCottPCrD3dtQA5wTEwA6jlZCKlXOrDBdCUc7oa oKCvvsBbNFFVjJBkkGhSPkJssHte5/uBR+kT7gtlC+6UWWRBpDLGrl+MLA8G0iH1u/jk M3akFkAQcAMvw0L0EiXQYYue4m4qrkEDlWER+lKSEs/lpCYFFWSz0MKP1chEg4OuG/cy NNN11H8wlRsXTMf+oGSslQWs+jhLxrq2/x2G1v8EeUOIZVXxp/tPTyk1XHPlXfEBBmxu axIw== X-Gm-Message-State: AOJu0YyyYi7txs2xohAubvIIvNLPuoyN9xsa28IRWrtGRKcWQ3eWnuL1 cgE3onEjOIgHK6ZHrw7I/2Th5Ispz2T67Rko3rS0qg== X-Google-Smtp-Source: AGHT+IEtvc50+9xSwcUBmMS2NnU7sd7cXWeyWlkUPr+WLRMji0YYfJ5DI2lAPWUgVxDI59oU3NuVrQ== X-Received: by 2002:a50:8712:0:b0:53e:fdeb:13c7 with SMTP id i18-20020a508712000000b0053efdeb13c7mr1178710edb.21.1699441424824; Wed, 08 Nov 2023 03:03:44 -0800 (PST) Received: from [10.137.0.17] (srv1.mobissw.com. [89.235.0.226]) by smtp.gmail.com with ESMTPSA id f29-20020a50a6dd000000b0053dff5568acsm6687178edc.58.2023.11.08.03.03.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 03:03:44 -0800 (PST) Content-Type: multipart/mixed; boundary="------------40P67fWYxoarhvG2X8oDL355" Message-ID: Date: Wed, 8 Nov 2023 12:03:42 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: Parallel CREATE INDEX for BRIN indexes Content-Language: en-US To: Matthias van de Meent Cc: PostgreSQL Hackers References: <2d7c64de-716e-346e-b01e-03db0c2bc5ac@enterprisedb.com> <2e86059f-4004-eec1-2bc1-9e7fd119c9e2@enterprisedb.com> From: Tomas Vondra 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. --------------40P67fWYxoarhvG2X8oDL355 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, here's an updated patch, addressing the review comments, and reworking how the work is divided between the workers & leader etc. 0001 is just v2, rebased to current master 0002 and 0003 address most of the issues, in particular it - removes the unnecessary spool - fixes bs_reltuples type to double - a couple comments are reworded to be clearer - changes loop/condition in brinbuildCallbackParallel - removes asserts added for debugging - fixes cast in comparetup_index_brin - 0003 then simplifies comparetup_index_brin - I haven't inlined the tuplesort_puttuple_common parameter (didn't seem worth it) 0004 Reworks how the work is divided between workers and combined by the leader. It undoes the tableam.c changes that attempted to divide the relation into chunks matching the BRIN ranges, and instead merges the results in the leader (using the BRIN "union" function). I haven't done any indentation fixes yet. I did fairly extensive testing, using pageinspect to compare indexes built with/without parallelism. More testing is needed, but it seems to work fine (with other opclasses and so on). In general I'm quite happy with the current state, and I believe it's fairly close to be committable. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------40P67fWYxoarhvG2X8oDL355 Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-parallel-CREATE-INDEX-for-BRIN-v2.patch" Content-Disposition: attachment; filename="v3-0001-parallel-CREATE-INDEX-for-BRIN-v2.patch" Content-Transfer-Encoding: base64 RnJvbSAzZTVmYWJjNmU1YTMwYmIxNmVjMTFmZGM3ZmNmNjU4ODBlMTcyZDBjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCA3IE5vdiAyMDIzIDE3OjA0OjI4ICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2MyAxLzRdIHBhcmFsbGVsIENSRUFURSBJTkRFWCBmb3IgQlJJTiB2MgoK LS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAgICAgICAgfCA3ODEg KysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNv cnQuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFt LmMgICAgICAgICB8ICA0OSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxs ZWwuYyAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAg ICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAg ICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jICAg ICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnR2YXJpYW50 cy5jIHwgMjExICsrKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaCAgICAgICAgICAg ICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAg ICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAg ICAgfCAgIDkgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5oICAgICAgICAgICAg ICB8ICAxMSArCiAxMiBmaWxlcyBjaGFuZ2VkLCAxMDY1IGluc2VydGlvbnMoKyksIDE1IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCAyNTMzOGE5MGUyOS4u YjdjZDI5YzU5NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKQEAgLTMzLDYgKzMzLDcg QEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKICNpbmNsdWRlICJzdG9y YWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZnJlZXNwYWNlLmgiCisjaW5jbHVk ZSAidGNvcC90Y29wcHJvdC5oIgkJLyogcGdybWluY2x1ZGUgaWdub3JlICovCiAjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRl ICJ1dGlscy9kYXR1bS5oIgpAQCAtNDAsNyArNDEsMTE4IEBACiAjaW5jbHVkZSAidXRpbHMv aW5kZXhfc2VsZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc29ydC5oIgogCisvKiBN YWdpYyBudW1iZXJzIGZvciBwYXJhbGxlbCBzdGF0ZSBzaGFyaW5nICovCisjZGVmaW5lIFBB UkFMTEVMX0tFWV9CUklOX1NIQVJFRAkJVUlOVDY0Q09OU1QoMHhBMDAwMDAwMDAwMDAwMDAx KQorI2RlZmluZSBQQVJBTExFTF9LRVlfVFVQTEVTT1JUCQkJVUlOVDY0Q09OU1QoMHhBMDAw MDAwMDAwMDAwMDAyKQorI2RlZmluZSBQQVJBTExFTF9LRVlfUVVFUllfVEVYVAkJCVVJTlQ2 NENPTlNUKDB4QTAwMDAwMDAwMDAwMDAwMykKKyNkZWZpbmUgUEFSQUxMRUxfS0VZX1dBTF9V U0FHRQkJCVVJTlQ2NENPTlNUKDB4QTAwMDAwMDAwMDAwMDAwNCkKKyNkZWZpbmUgUEFSQUxM RUxfS0VZX0JVRkZFUl9VU0FHRQkJVUlOVDY0Q09OU1QoMHhBMDAwMDAwMDAwMDAwMDA1KQor CisvKgorICogU3RhdHVzIHJlY29yZCBmb3Igc3Bvb2xpbmcvc29ydGluZyBwaGFzZS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgQnJpblNwb29sCit7CisJVHVwbGVzb3J0c3RhdGUgKnNvcnRz dGF0ZTsJLyogc3RhdGUgZGF0YSBmb3IgdHVwbGVzb3J0LmMgKi8KKwlSZWxhdGlvbgloZWFw OworCVJlbGF0aW9uCWluZGV4OworfSBCcmluU3Bvb2w7CisKKy8qCisgKiBTdGF0dXMgZm9y IGluZGV4IGJ1aWxkcyBwZXJmb3JtZWQgaW4gcGFyYWxsZWwuICBUaGlzIGlzIGFsbG9jYXRl ZCBpbiBhCisgKiBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgQnJpblNoYXJlZAoreworCS8qCisJICogVGhlc2UgZmllbGRzIGFyZSBub3Qg bW9kaWZpZWQgZHVyaW5nIHRoZSBidWlsZC4gIFRoZXkgcHJpbWFyaWx5IGV4aXN0IGZvcgor CSAqIHRoZSBiZW5lZml0IG9mIHdvcmtlciBwcm9jZXNzZXMgdGhhdCBuZWVkIHRvIGNyZWF0 ZSBzdGF0ZSBjb3JyZXNwb25kaW5nCisJICogdG8gdGhhdCB1c2VkIGJ5IHRoZSBsZWFkZXIu CisJICovCisJT2lkCQkJaGVhcHJlbGlkOworCU9pZAkJCWluZGV4cmVsaWQ7CisJYm9vbAkJ aXNjb25jdXJyZW50OworCUJsb2NrTnVtYmVyCXBhZ2VzUGVyUmFuZ2U7CisJaW50CQkJc2Nh bnR1cGxlc29ydHN0YXRlczsKKworCS8qCisJICogd29ya2Vyc2RvbmVjdiBpcyB1c2VkIHRv IG1vbml0b3IgdGhlIHByb2dyZXNzIG9mIHdvcmtlcnMuICBBbGwgcGFyYWxsZWwKKwkgKiBw YXJ0aWNpcGFudHMgbXVzdCBpbmRpY2F0ZSB0aGF0IHRoZXkgYXJlIGRvbmUgYmVmb3JlIGxl YWRlciBjYW4gdXNlCisJICogcmVzdWx0cyBidWlsdCBieSB0aGUgd29ya2VycyAoYW5kIGJl Zm9yZSBsZWFkZXIgY2FuIHdyaXRlIHRoZSBkYXRhIGludG8KKwkgKiB0aGUgaW5kZXgpLgor CSAqLworCUNvbmRpdGlvblZhcmlhYmxlIHdvcmtlcnNkb25lY3Y7CisKKwkvKgorCSAqIG11 dGV4IHByb3RlY3RzIGFsbCBmaWVsZHMgYmVmb3JlIGhlYXBkZXNjLgorCSAqCisJICogVGhl c2UgZmllbGRzIGNvbnRhaW4gc3RhdHVzIGluZm9ybWF0aW9uIG9mIGludGVyZXN0IHRvIEJS SU4gaW5kZXgKKwkgKiBidWlsZHMgdGhhdCBtdXN0IHdvcmsganVzdCB0aGUgc2FtZSB3aGVu IGFuIGluZGV4IGlzIGJ1aWx0IGluIHBhcmFsbGVsLgorCSAqLworCXNsb2NrX3QJCW11dGV4 OworCisJLyoKKwkgKiBNdXRhYmxlIHN0YXRlIHRoYXQgaXMgbWFpbnRhaW5lZCBieSB3b3Jr ZXJzLCBhbmQgcmVwb3J0ZWQgYmFjayB0bworCSAqIGxlYWRlciBhdCBlbmQgb2YgdGhlIHNj YW5zLgorCSAqCisJICogbnBhcnRpY2lwYW50c2RvbmUgaXMgbnVtYmVyIG9mIHdvcmtlciBw cm9jZXNzZXMgZmluaXNoZWQuCisJICoKKwkgKiByZWx0dXBsZXMgaXMgdGhlIHRvdGFsIG51 bWJlciBvZiBpbnB1dCBoZWFwIHR1cGxlcy4KKwkgKgorCSAqIGluZHR1cGxlcyBpcyB0aGUg dG90YWwgbnVtYmVyIG9mIHR1cGxlcyB0aGF0IG1hZGUgaXQgaW50byB0aGUgaW5kZXguCisJ ICovCisJaW50CQkJbnBhcnRpY2lwYW50c2RvbmU7CisJZG91YmxlCQlyZWx0dXBsZXM7CisJ ZG91YmxlCQlpbmR0dXBsZXM7CisKKwkvKgorCSAqIFBhcmFsbGVsVGFibGVTY2FuRGVzY0Rh dGEgZGF0YSBmb2xsb3dzLiBDYW4ndCBkaXJlY3RseSBlbWJlZCBoZXJlLCBhcworCSAqIGlt cGxlbWVudGF0aW9ucyBvZiB0aGUgcGFyYWxsZWwgdGFibGUgc2NhbiBkZXNjIGludGVyZmFj ZSBtaWdodCBuZWVkCisJICogc3Ryb25nZXIgYWxpZ25tZW50LgorCSAqLworfSBCcmluU2hh cmVkOworCisvKgorICogUmV0dXJuIHBvaW50ZXIgdG8gYSBCcmluU2hhcmVkJ3MgcGFyYWxs ZWwgdGFibGUgc2Nhbi4KKyAqCisgKiBjLmYuIHNobV90b2NfYWxsb2NhdGUgYXMgdG8gd2h5 IEJVRkZFUkFMSUdOIGlzIHVzZWQsIHJhdGhlciB0aGFuIGp1c3QKKyAqIE1BWEFMSUdOLgor ICovCisjZGVmaW5lIFBhcmFsbGVsVGFibGVTY2FuRnJvbUJyaW5TaGFyZWQoc2hhcmVkKSBc CisJKFBhcmFsbGVsVGFibGVTY2FuRGVzYykgKChjaGFyICopIChzaGFyZWQpICsgQlVGRkVS QUxJR04oc2l6ZW9mKEJyaW5TaGFyZWQpKSkKKworLyoKKyAqIFN0YXR1cyBmb3IgbGVhZGVy IGluIHBhcmFsbGVsIGluZGV4IGJ1aWxkLgorICovCit0eXBlZGVmIHN0cnVjdCBCcmluTGVh ZGVyCit7CisJLyogcGFyYWxsZWwgY29udGV4dCBpdHNlbGYgKi8KKwlQYXJhbGxlbENvbnRl eHQgKnBjeHQ7CisKKwkvKgorCSAqIG5wYXJ0aWNpcGFudHR1cGxlc29ydHMgaXMgdGhlIGV4 YWN0IG51bWJlciBvZiB3b3JrZXIgcHJvY2Vzc2VzCisJICogc3VjY2Vzc2Z1bGx5IGxhdW5j aGVkLCBwbHVzIG9uZSBsZWFkZXIgcHJvY2VzcyBpZiBpdCBwYXJ0aWNpcGF0ZXMgYXMgYQor CSAqIHdvcmtlciAob25seSBESVNBQkxFX0xFQURFUl9QQVJUSUNJUEFUSU9OIGJ1aWxkcyBh dm9pZCBsZWFkZXIKKwkgKiBwYXJ0aWNpcGF0aW5nIGFzIGEgd29ya2VyKS4KKwkgKi8KKwlp bnQJCQlucGFydGljaXBhbnR0dXBsZXNvcnRzOworCisJLyoKKwkgKiBMZWFkZXIgcHJvY2Vz cyBjb252ZW5pZW5jZSBwb2ludGVycyB0byBzaGFyZWQgc3RhdGUgKGxlYWRlciBhdm9pZHMg VE9DCisJICogbG9va3VwcykuCisJICoKKwkgKiBicmluc2hhcmVkIGlzIHRoZSBzaGFyZWQg c3RhdGUgZm9yIGVudGlyZSBidWlsZC4gIHNoYXJlZHNvcnQgaXMgdGhlCisJICogc2hhcmVk LCB0dXBsZXNvcnQtbWFuYWdlZCBzdGF0ZSBwYXNzZWQgdG8gZWFjaCBwcm9jZXNzIHR1cGxl c29ydC4KKwkgKiBzbmFwc2hvdCBpcyB0aGUgc25hcHNob3QgdXNlZCBieSB0aGUgc2NhbiBp ZmYgYW4gTVZDQyBzbmFwc2hvdCBpcyByZXF1aXJlZC4KKwkgKi8KKwlCcmluU2hhcmVkCSAg ICpicmluc2hhcmVkOworCVNoYXJlZHNvcnQgKnNoYXJlZHNvcnQ7CisJU25hcHNob3QJc25h cHNob3Q7CisJV2FsVXNhZ2UgICAqd2FsdXNhZ2U7CisJQnVmZmVyVXNhZ2UgKmJ1ZmZlcnVz YWdlOworfSBCcmluTGVhZGVyOwogCiAvKgogICogV2UgdXNlIGEgQnJpbkJ1aWxkU3RhdGUg ZHVyaW5nIGluaXRpYWwgY29uc3RydWN0aW9uIG9mIGEgQlJJTiBpbmRleC4KQEAgLTUwLDEy ICsxNjIsMjMgQEAgdHlwZWRlZiBzdHJ1Y3QgQnJpbkJ1aWxkU3RhdGUKIHsKIAlSZWxhdGlv bglic19pcmVsOwogCWludAkJCWJzX251bXR1cGxlczsKKwlpbnQJCQlic19yZWx0dXBsZXM7 CiAJQnVmZmVyCQlic19jdXJyZW50SW5zZXJ0QnVmOwogCUJsb2NrTnVtYmVyIGJzX3BhZ2Vz UGVyUmFuZ2U7CiAJQmxvY2tOdW1iZXIgYnNfY3VyclJhbmdlU3RhcnQ7CiAJQnJpblJldm1h cCAqYnNfcm1BY2Nlc3M7CiAJQnJpbkRlc2MgICAqYnNfYmRlc2M7CiAJQnJpbk1lbVR1cGxl ICpic19kdHVwbGU7CisKKwkvKgorCSAqIGJzX2xlYWRlciBpcyBvbmx5IHByZXNlbnQgd2hl biBhIHBhcmFsbGVsIGluZGV4IGJ1aWxkIGlzIHBlcmZvcm1lZCwgYW5kCisJICogb25seSBp biB0aGUgbGVhZGVyIHByb2Nlc3MuIChBY3R1YWxseSwgb25seSB0aGUgbGVhZGVyIGhhcyBh CisJICogQnJpbkJ1aWxkU3RhdGUuKQorCSAqLworCUJyaW5MZWFkZXIgKmJzX2xlYWRlcjsK KwlpbnQJCQlic193b3JrZXJfaWQ7CisJQnJpblNwb29sICAqYnNfc3Bvb2w7CisJQnJpblNw b29sICAqYnNfc3Bvb2xfb3V0OwogfSBCcmluQnVpbGRTdGF0ZTsKIAogLyoKQEAgLTc2LDYg KzE5OSw3IEBAIHN0YXRpYyB2b2lkIHRlcm1pbmF0ZV9icmluX2J1aWxkc3RhdGUoQnJpbkJ1 aWxkU3RhdGUgKnN0YXRlKTsKIHN0YXRpYyB2b2lkIGJyaW5zdW1tYXJpemUoUmVsYXRpb24g aW5kZXgsIFJlbGF0aW9uIGhlYXBSZWwsIEJsb2NrTnVtYmVyIHBhZ2VSYW5nZSwKIAkJCQkJ CSAgYm9vbCBpbmNsdWRlX3BhcnRpYWwsIGRvdWJsZSAqbnVtU3VtbWFyaXplZCwgZG91Ymxl ICpudW1FeGlzdGluZyk7CiBzdGF0aWMgdm9pZCBmb3JtX2FuZF9pbnNlcnRfdHVwbGUoQnJp bkJ1aWxkU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIGZvcm1fYW5kX3NwaWxsX3R1cGxl KEJyaW5CdWlsZFN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCB1bmlvbl90dXBsZXMoQnJp bkRlc2MgKmJkZXNjLCBCcmluTWVtVHVwbGUgKmEsCiAJCQkJCQkgQnJpblR1cGxlICpiKTsK IHN0YXRpYyB2b2lkIGJyaW5fdmFjdXVtX3NjYW4oUmVsYXRpb24gaWR4cmVsLCBCdWZmZXJB Y2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CkBAIC04Myw2ICsyMDcsMjAgQEAgc3RhdGljIGJv b2wgYWRkX3ZhbHVlc190b19yYW5nZShSZWxhdGlvbiBpZHhSZWwsIEJyaW5EZXNjICpiZGVz YywKIAkJCQkJCQkJQnJpbk1lbVR1cGxlICpkdHVwLCBjb25zdCBEYXR1bSAqdmFsdWVzLCBj b25zdCBib29sICpudWxscyk7CiBzdGF0aWMgYm9vbCBjaGVja19udWxsX2tleXMoQnJpblZh bHVlcyAqYnZhbCwgU2NhbktleSAqbnVsbGtleXMsIGludCBubnVsbGtleXMpOwogCisvKiBw YXJhbGxlbCBpbmRleCBidWlsZHMgKi8KK3N0YXRpYyB2b2lkIF9icmluX2JlZ2luX3BhcmFs bGVsKEJyaW5CdWlsZFN0YXRlICpidWlsZHN0YXRlLCBSZWxhdGlvbiBoZWFwLCBSZWxhdGlv biBpbmRleCwKKwkJCQkJCQkJIGJvb2wgaXNjb25jdXJyZW50LCBpbnQgcmVxdWVzdCk7Citz dGF0aWMgdm9pZCBfYnJpbl9lbmRfcGFyYWxsZWwoQnJpbkxlYWRlciAqYnRsZWFkZXIsIEJy aW5CdWlsZFN0YXRlICpzdGF0ZSk7CitzdGF0aWMgU2l6ZSBfYnJpbl9wYXJhbGxlbF9lc3Rp bWF0ZV9zaGFyZWQoUmVsYXRpb24gaGVhcCwgU25hcHNob3Qgc25hcHNob3QpOworc3RhdGlj IHZvaWQgX2JyaW5fbGVhZGVyX3BhcnRpY2lwYXRlX2FzX3dvcmtlcihCcmluQnVpbGRTdGF0 ZSAqYnVpbGRzdGF0ZSwKKwkJCQkJCQkJCQkJICAgUmVsYXRpb24gaGVhcCwgUmVsYXRpb24g aW5kZXgpOworc3RhdGljIHZvaWQgX2JyaW5fcGFyYWxsZWxfc2Nhbl9hbmRfYnVpbGQoQnJp bkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsCisJCQkJCQkJCQkJICBCcmluU3Bvb2wgKmJyaW5z cG9vbCwKKwkJCQkJCQkJCQkgIEJyaW5TaGFyZWQgKmJyaW5zaGFyZWQsCisJCQkJCQkJCQkJ ICBTaGFyZWRzb3J0ICpzaGFyZWRzb3J0LAorCQkJCQkJCQkJCSAgUmVsYXRpb24gaGVhcCwg UmVsYXRpb24gaW5kZXgsCisJCQkJCQkJCQkJICBpbnQgc29ydG1lbSwgYm9vbCBwcm9ncmVz cyk7CisKIC8qCiAgKiBCUklOIGhhbmRsZXIgZnVuY3Rpb246IHJldHVybiBJbmRleEFtUm91 dGluZSB3aXRoIGFjY2VzcyBtZXRob2QgcGFyYW1ldGVycwogICogYW5kIGNhbGxiYWNrcy4K QEAgLTgyMCw2ICs5NTgsNjcgQEAgYnJpbmJ1aWxkQ2FsbGJhY2soUmVsYXRpb24gaW5kZXgs CiAJCQkJCQkJICAgdmFsdWVzLCBpc251bGwpOwogfQogCisvKgorICogQSB2ZXJzaW9uIG9m IHRoZSBjYWxsYmFjaywgdXNlZCBieSBwYXJhbGxlbCBpbmRleCBidWlsZHMuIFRoZSBtYWlu IGRpZmZlcmVuY2UKKyAqIGlzIHRoYXQgaW5zdGVhZCBvZiB3cml0aW5nIHRoZSBCUklOIHR1 cGxlcyBpbnRvIHRoZSBpbmRleCwgd2Ugd3JpdGUgdGhlbSBpbnRvCisgKiBhIHNoYXJlZCB0 dXBsZXN0b3JlIGZpbGUsIGFuZCBsZWF2ZSB0aGUgaW5zZXJ0aW9uIHVwIHRvIHRoZSBsZWFk ZXIgKHdoaWNoIG1heQorICogcmVvcmRlciB0aGVtIGEgYml0IGV0Yy4pLiBUaGUgY2FsbGJh Y2sgYWxzbyBkb2VzIG5vdCBnZW5lcmF0ZSBlbXB0eSByYW5nZXMsCisgKiB0aG9zZSBtYXkg YmUgYWRkZWQgYnkgdGhlIGxlYWRlciB3aGVuIG1lcmdpbmcgcmVzdWx0cyBmcm9tIHdvcmtl cnMuCisgKi8KK3N0YXRpYyB2b2lkCiticmluYnVpbGRDYWxsYmFja1BhcmFsbGVsKFJlbGF0 aW9uIGluZGV4LAorCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJCQkJCQkgIERhdHVtICp2 YWx1ZXMsCisJCQkJCQkgIGJvb2wgKmlzbnVsbCwKKwkJCQkJCSAgYm9vbCB0dXBsZUlzQWxp dmUsCisJCQkJCQkgIHZvaWQgKmJyc3RhdGUpCit7CisJQnJpbkJ1aWxkU3RhdGUgKnN0YXRl ID0gKEJyaW5CdWlsZFN0YXRlICopIGJyc3RhdGU7CisJQmxvY2tOdW1iZXIgdGhpc2Jsb2Nr OworCisJdGhpc2Jsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJ LyoKKwkgKiBJZiB3ZSdyZSBpbiBhIGJsb2NrIHRoYXQgYmVsb25ncyB0byBhIGZ1dHVyZSBy YW5nZSwgc3VtbWFyaXplIHdoYXQKKwkgKiB3ZSd2ZSBnb3QgYW5kIHN0YXJ0IGFmcmVzaC4g IE5vdGUgdGhlIHNjYW4gbWlnaHQgaGF2ZSBza2lwcGVkIG1hbnkKKwkgKiBwYWdlcywgaWYg dGhleSB3ZXJlIGRldm9pZCBvZiBsaXZlIHR1cGxlczsgbWFrZSBzdXJlIHRvIGluc2VydCBp bmRleAorCSAqIHR1cGxlcyBmb3IgdGhvc2UgdG9vLgorCSAqLworCXdoaWxlICh0aGlzYmxv Y2sgPiBzdGF0ZS0+YnNfY3VyclJhbmdlU3RhcnQgKyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5n ZSAtIDEpCisJeworCisJCUJSSU5fZWxvZygoREVCVUcyLAorCQkJCSAgICJicmluYnVpbGRD YWxsYmFjazogY29tcGxldGVkIGEgcmFuZ2U6ICV1LS0ldSIsCisJCQkJICAgc3RhdGUtPmJz X2N1cnJSYW5nZVN0YXJ0LAorCQkJCSAgIHN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCArIHN0 YXRlLT5ic19wYWdlc1BlclJhbmdlKSk7CisKKwkJLyogY3JlYXRlIHRoZSBpbmRleCB0dXBs ZSBhbmQgd3JpdGUgaXQgaW50byB0aGUgdHVwbGVzb3J0ICovCisJCWZvcm1fYW5kX3NwaWxs X3R1cGxlKHN0YXRlKTsKKworCQkvKgorCQkgKiBzZXQgc3RhdGUgdG8gY29ycmVzcG9uZCB0 byB0aGUgbmV4dCByYW5nZQorCQkgKgorCQkgKiBYWFggVGhpcyBoYXMgdGhlIGlzc3VlIHRo YXQgaXQgc2tpcHMgcmFuZ2VzIHN1bW1hcml6ZWQgYnkgb3RoZXIKKwkJICogd29ya2Vycywg YnV0IGl0IGFsc28gc2tpcHMgZW1wdHkgcmFuZ2VzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbgor CQkgKiBzdW1tYXJpemVkLiBXZSdkIG5lZWQgdG8gZWl0aGVyIG1ha2UgdGhlIHdvcmtlcnMg YXdhcmUgd2hpY2gKKwkJICogY2h1bmsgdGhleSBhcmUgYWN0dWFsbHkgcHJvY2Vzc2luZyAo d2hpY2ggaXMgY3VycmVudGx5IGtub3duCisJCSAqIG9ubHkgaW4gdGhlIFBhcmFsbGVsQmxv Y2tUYWJsZVNjYW4gYml0KS4gT3Igd2UgY291bGQgaWdub3JlIGl0CisJCSAqIGhlcmUsIGFu ZCB0aGVuIGRlY2lkZSBpdCB3aGlsZSAibWVyZ2luZyIgcmVzdWx0cyBmcm9tIHdvcmtlcnMK KwkJICogKGlmIHRoZXJlJ3Mgbm8gZW50cnkgZm9yIHRoZSByYW5nZSwgaXQgaGFkIHRvIGJl IGVtcHR5IHNvIHdlCisJCSAqIGp1c3QgYWRkIGFuIGVtcHR5IG9uZSkuCisJCSAqLworCQl3 aGlsZSAodGhpc2Jsb2NrID4gc3RhdGUtPmJzX2N1cnJSYW5nZVN0YXJ0ICsgc3RhdGUtPmJz X3BhZ2VzUGVyUmFuZ2UgLSAxKQorCQkJc3RhdGUtPmJzX2N1cnJSYW5nZVN0YXJ0ICs9IHN0 YXRlLT5ic19wYWdlc1BlclJhbmdlOworCisJCS8qIHJlLWluaXRpYWxpemUgc3RhdGUgZm9y IGl0ICovCisJCWJyaW5fbWVtdHVwbGVfaW5pdGlhbGl6ZShzdGF0ZS0+YnNfZHR1cGxlLCBz dGF0ZS0+YnNfYmRlc2MpOworCX0KKworCS8qIEFjY3VtdWxhdGUgdGhlIGN1cnJlbnQgdHVw bGUgaW50byB0aGUgcnVubmluZyBzdGF0ZSAqLworCSh2b2lkKSBhZGRfdmFsdWVzX3RvX3Jh bmdlKGluZGV4LCBzdGF0ZS0+YnNfYmRlc2MsIHN0YXRlLT5ic19kdHVwbGUsCisJCQkJCQkJ ICAgdmFsdWVzLCBpc251bGwpOworfQorCiAvKgogICogYnJpbmJ1aWxkKCkgLS0gYnVpbGQg YSBuZXcgQlJJTiBpbmRleC4KICAqLwpAQCAtODgxLDE4ICsxMDgwLDkzIEBAIGJyaW5idWls ZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgSW5kZXhJbmZvICppbmRleEluZm8p CiAJcmV2bWFwID0gYnJpblJldm1hcEluaXRpYWxpemUoaW5kZXgsICZwYWdlc1BlclJhbmdl KTsKIAlzdGF0ZSA9IGluaXRpYWxpemVfYnJpbl9idWlsZHN0YXRlKGluZGV4LCByZXZtYXAs IHBhZ2VzUGVyUmFuZ2UpOwogCisJc3RhdGUtPmJzX3Nwb29sID0gKEJyaW5TcG9vbCAqKSBw YWxsb2MwKHNpemVvZihCcmluU3Bvb2wpKTsKKwlzdGF0ZS0+YnNfc3Bvb2wtPmhlYXAgPSBo ZWFwOworCXN0YXRlLT5ic19zcG9vbC0+aW5kZXggPSBpbmRleDsKKworCS8qCisJICogQXR0 ZW1wdCB0byBsYXVuY2ggcGFyYWxsZWwgd29ya2VyIHNjYW4gd2hlbiByZXF1aXJlZAorCSAq CisJICogWFhYIHBsYW5fY3JlYXRlX2luZGV4X3dvcmtlcnMgbWFrZXMgdGhlIG51bWJlciBv ZiB3b3JrZXJzIGRlcGVuZGVudCBvbgorCSAqIG1haW50ZW5hbmNlX3dvcmtfbWVtLCByZXF1 aXJpbmcgMzJNQiBmb3IgZWFjaCB3b3JrZXIuIFRoYXQgbWFrZXMgc2Vuc2UKKwkgKiBmb3Ig YnRyZWUsIGJ1dCBub3QgZm9yIEJSSU4sIHdoaWNoIGNhbiBkbyBhd2F5IHdpdGggbXVjaCBs ZXNzIG1lbW9yeS4KKwkgKiBTbyBtYXliZSBtYWtlIHRoYXQgc29tZWhvdyBsZXNzIHN0cmlj dCwgb3B0aW9uYWxseT8KKwkgKi8KKwlpZiAoaW5kZXhJbmZvLT5paV9QYXJhbGxlbFdvcmtl cnMgPiAwKQorCQlfYnJpbl9iZWdpbl9wYXJhbGxlbChzdGF0ZSwgaGVhcCwgaW5kZXgsIGlu ZGV4SW5mby0+aWlfQ29uY3VycmVudCwKKwkJCQkJCQkgaW5kZXhJbmZvLT5paV9QYXJhbGxl bFdvcmtlcnMpOworCiAJLyoKIAkgKiBOb3cgc2NhbiB0aGUgcmVsYXRpb24uICBObyBzeW5j c2NhbiBhbGxvd2VkIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRoZQogCSAqIGhlYXAgYmxvY2tz IGluIHBoeXNpY2FsIG9yZGVyLgogCSAqLwotCXJlbHR1cGxlcyA9IHRhYmxlX2luZGV4X2J1 aWxkX3NjYW4oaGVhcCwgaW5kZXgsIGluZGV4SW5mbywgZmFsc2UsIHRydWUsCi0JCQkJCQkJ CQkgICBicmluYnVpbGRDYWxsYmFjaywgKHZvaWQgKikgc3RhdGUsIE5VTEwpOwogCi0JLyog cHJvY2VzcyB0aGUgZmluYWwgYmF0Y2ggKi8KLQlmb3JtX2FuZF9pbnNlcnRfdHVwbGUoc3Rh dGUpOworCS8qCisJICogSWYgcGFyYWxsZWwgYnVpbGQgcmVxdWVzdGVkIGFuZCBhdCBsZWFz dCBvbmUgd29ya2VyIHByb2Nlc3Mgd2FzCisJICogc3VjY2Vzc2Z1bGx5IGxhdW5jaGVkLCBz ZXQgdXAgY29vcmRpbmF0aW9uIHN0YXRlCisJICovCisJaWYgKHN0YXRlLT5ic19sZWFkZXIp CisJeworCQlTb3J0Q29vcmRpbmF0ZSBjb29yZGluYXRlOworCisJCWNvb3JkaW5hdGUgPSAo U29ydENvb3JkaW5hdGUpIHBhbGxvYzAoc2l6ZW9mKFNvcnRDb29yZGluYXRlRGF0YSkpOwor CQljb29yZGluYXRlLT5pc1dvcmtlciA9IGZhbHNlOworCQljb29yZGluYXRlLT5uUGFydGlj aXBhbnRzID0KKwkJCXN0YXRlLT5ic19sZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxlc29ydHM7 CisJCWNvb3JkaW5hdGUtPnNoYXJlZHNvcnQgPSBzdGF0ZS0+YnNfbGVhZGVyLT5zaGFyZWRz b3J0OworCisKKwkJLyoKKwkJICogQmVnaW4gc2VyaWFsL2xlYWRlciB0dXBsZXNvcnQuCisJ CSAqCisJCSAqIEluIGNhc2VzIHdoZXJlIHBhcmFsbGVsaXNtIGlzIGludm9sdmVkLCB0aGUg bGVhZGVyIHJlY2VpdmVzIHRoZSBzYW1lCisJCSAqIHNoYXJlIG9mIG1haW50ZW5hbmNlX3dv cmtfbWVtIGFzIGEgc2VyaWFsIHNvcnQgKGl0IGlzIGdlbmVyYWxseSB0cmVhdGVkCisJCSAq IGluIHRoZSBzYW1lIHdheSBhcyBhIHNlcmlhbCBzb3J0IG9uY2Ugd2UgcmV0dXJuKS4gIFBh cmFsbGVsIHdvcmtlcgorCQkgKiBUdXBsZXNvcnRzdGF0ZXMgd2lsbCBoYXZlIHJlY2VpdmVk IG9ubHkgYSBmcmFjdGlvbiBvZgorCQkgKiBtYWludGVuYW5jZV93b3JrX21lbSwgdGhvdWdo LgorCQkgKgorCQkgKiBXZSByZWx5IG9uIHRoZSBsaWZldGltZSBvZiB0aGUgTGVhZGVyIFR1 cGxlc29ydHN0YXRlIGFsbW9zdCBub3QKKwkJICogb3ZlcmxhcHBpbmcgd2l0aCBhbnkgd29y a2VyIFR1cGxlc29ydHN0YXRlJ3MgbGlmZXRpbWUuICBUaGVyZSBtYXkgYmUKKwkJICogc29t ZSBzbWFsbCBvdmVybGFwLCBidXQgdGhhdCdzIG9rYXkgYmVjYXVzZSB3ZSByZWx5IG9uIGxl YWRlcgorCQkgKiBUdXBsZXNvcnRzdGF0ZSBvbmx5IGFsbG9jYXRpbmcgYSBzbWFsbCwgZml4 ZWQgYW1vdW50IG9mIG1lbW9yeSBoZXJlLgorCQkgKiBXaGVuIGl0cyB0dXBsZXNvcnRfcGVy Zm9ybXNvcnQoKSBpcyBjYWxsZWQgKGJ5IG91ciBjYWxsZXIpLCBhbmQKKwkJICogc2lnbmlm aWNhbnQgYW1vdW50cyBvZiBtZW1vcnkgYXJlIGxpa2VseSB0byBiZSB1c2VkLCBhbGwgd29y a2VycyBtdXN0CisJCSAqIGhhdmUgYWxyZWFkeSBmcmVlZCBhbG1vc3QgYWxsIG1lbW9yeSBo ZWxkIGJ5IHRoZWlyIFR1cGxlc29ydHN0YXRlcworCQkgKiAodGhleSBhcmUgYWJvdXQgdG8g Z28gYXdheSBjb21wbGV0ZWx5LCB0b28pLiAgVGhlIG92ZXJhbGwgZWZmZWN0IGlzCisJCSAq IHRoYXQgbWFpbnRlbmFuY2Vfd29ya19tZW0gYWx3YXlzIHJlcHJlc2VudHMgYW4gYWJzb2x1 dGUgaGlnaCB3YXRlcm1hcmsKKwkJICogb24gdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBi eSBhIENSRUFURSBJTkRFWCBvcGVyYXRpb24sIHJlZ2FyZGxlc3Mgb2YKKwkJICogdGhlIHVz ZSBvZiBwYXJhbGxlbGlzbSBvciBhbnkgb3RoZXIgZmFjdG9yLgorCQkgKi8KKwkJc3RhdGUt PmJzX3Nwb29sX291dCA9IChCcmluU3Bvb2wgKikgcGFsbG9jMChzaXplb2YoQnJpblNwb29s KSk7CisJCXN0YXRlLT5ic19zcG9vbF9vdXQtPmhlYXAgPSBoZWFwOworCQlzdGF0ZS0+YnNf c3Bvb2xfb3V0LT5pbmRleCA9IGluZGV4OworCisJCXN0YXRlLT5ic19zcG9vbF9vdXQtPnNv cnRzdGF0ZSA9CisJCQl0dXBsZXNvcnRfYmVnaW5faW5kZXhfYnJpbihoZWFwLCBpbmRleCwK KwkJCQkJCQkJCSAgIG1haW50ZW5hbmNlX3dvcmtfbWVtLCBjb29yZGluYXRlLAorCQkJCQkJ CQkJICAgVFVQTEVTT1JUX05PTkUpOworCisJCS8qCisJCSAqIEluIHBhcmFsbGVsIG1vZGUs IHdhaXQgZm9yIHdvcmtlcnMgdG8gY29tcGxldGUsIGFuZCB0aGVuIHJlYWQgYWxsCisJCSAq IHR1cGxlcyBmcm9tIHRoZSBzaGFyZWQgdHVwbGVzb3J0IGFuZCBpbnNlcnQgdGhlbSBpbnRv IHRoZSBpbmRleC4KKwkJICovCisJCV9icmluX2VuZF9wYXJhbGxlbChzdGF0ZS0+YnNfbGVh ZGVyLCBzdGF0ZSk7CisJfQorCWVsc2UJLyogbm8gcGFyYWxsZWwgaW5kZXggYnVpbGQsIGp1 c3QgZG8gdGhlIHVzdWFsIHRoaW5nICovCisJeworCQlyZWx0dXBsZXMgPSB0YWJsZV9pbmRl eF9idWlsZF9zY2FuKGhlYXAsIGluZGV4LCBpbmRleEluZm8sIGZhbHNlLCB0cnVlLAorCQkJ CQkJCQkJCSAgIGJyaW5idWlsZENhbGxiYWNrLCAodm9pZCAqKSBzdGF0ZSwgTlVMTCk7CisK KwkJLyogcHJvY2VzcyB0aGUgZmluYWwgYmF0Y2ggKi8KKwkJZm9ybV9hbmRfaW5zZXJ0X3R1 cGxlKHN0YXRlKTsKKworCQkvKiB0cmFjayB0aGUgbnVtYmVyIG9mIHJlbGF0aW9uIHR1cGxl cyAqLworCQlzdGF0ZS0+YnNfcmVsdHVwbGVzID0gcmVsdHVwbGVzOworCX0KIAogCS8qIHJl bGVhc2UgcmVzb3VyY2VzICovCiAJaWR4dHVwbGVzID0gc3RhdGUtPmJzX251bXR1cGxlczsK KwlyZWx0dXBsZXMgPSBzdGF0ZS0+YnNfcmVsdHVwbGVzOwogCWJyaW5SZXZtYXBUZXJtaW5h dGUoc3RhdGUtPmJzX3JtQWNjZXNzKTsKIAl0ZXJtaW5hdGVfYnJpbl9idWlsZHN0YXRlKHN0 YXRlKTsKIApAQCAtMTMxMiwxMiArMTU4NiwxNiBAQCBpbml0aWFsaXplX2JyaW5fYnVpbGRz dGF0ZShSZWxhdGlvbiBpZHhSZWwsIEJyaW5SZXZtYXAgKnJldm1hcCwKIAogCXN0YXRlLT5i c19pcmVsID0gaWR4UmVsOwogCXN0YXRlLT5ic19udW10dXBsZXMgPSAwOworCXN0YXRlLT5i c19yZWx0dXBsZXMgPSAwOwogCXN0YXRlLT5ic19jdXJyZW50SW5zZXJ0QnVmID0gSW52YWxp ZEJ1ZmZlcjsKIAlzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSA9IHBhZ2VzUGVyUmFuZ2U7CiAJ c3RhdGUtPmJzX2N1cnJSYW5nZVN0YXJ0ID0gMDsKIAlzdGF0ZS0+YnNfcm1BY2Nlc3MgPSBy ZXZtYXA7CiAJc3RhdGUtPmJzX2JkZXNjID0gYnJpbl9idWlsZF9kZXNjKGlkeFJlbCk7CiAJ c3RhdGUtPmJzX2R0dXBsZSA9IGJyaW5fbmV3X21lbXR1cGxlKHN0YXRlLT5ic19iZGVzYyk7 CisJc3RhdGUtPmJzX2xlYWRlciA9IE5VTEw7CisJc3RhdGUtPmJzX3dvcmtlcl9pZCA9IDA7 CisJc3RhdGUtPmJzX3Nwb29sID0gTlVMTDsKIAogCXJldHVybiBzdGF0ZTsKIH0KQEAgLTE2 MDksNiArMTg4NywzMiBAQCBmb3JtX2FuZF9pbnNlcnRfdHVwbGUoQnJpbkJ1aWxkU3RhdGUg KnN0YXRlKQogCXBmcmVlKHR1cCk7CiB9CiAKKy8qCisgKiBHaXZlbiBhIGRlZm9ybWVkIHR1 cGxlIGluIHRoZSBidWlsZCBzdGF0ZSwgY29udmVydCBpdCBpbnRvIHRoZSBvbi1kaXNrCisg KiBmb3JtYXQgYW5kIHdyaXRlIGl0IHRvIGEgKHNoYXJlZCkgdHVwbGVzdG9yZSAodGhlIGxl YWRlciB3aWxsIGluc2VydCBpdAorICogaW50byB0aGUgaW5kZXggbGF0ZXIpLgorICovCitz dGF0aWMgdm9pZAorZm9ybV9hbmRfc3BpbGxfdHVwbGUoQnJpbkJ1aWxkU3RhdGUgKnN0YXRl KQoreworCUJyaW5UdXBsZSAgKnR1cDsKKwlTaXplCQlzaXplOworCisJLyogZG9uJ3QgaW5z ZXJ0IGVtcHR5IHR1cGxlcyBpbiBwYXJhbGxlbCBidWlsZCAqLworCWlmIChzdGF0ZS0+YnNf ZHR1cGxlLT5idF9lbXB0eV9yYW5nZSkKKwkJcmV0dXJuOworCisJdHVwID0gYnJpbl9mb3Jt X3R1cGxlKHN0YXRlLT5ic19iZGVzYywgc3RhdGUtPmJzX2N1cnJSYW5nZVN0YXJ0LAorCQkJ CQkJICBzdGF0ZS0+YnNfZHR1cGxlLCAmc2l6ZSk7CisKKwkvKiB3cml0ZSB0aGUgQlJJTiB0 dXBsZSB0byB0aGUgdHVwbGVzb3J0ICovCisJdHVwbGVzb3J0X3B1dGJyaW50dXBsZShzdGF0 ZS0+YnNfc3Bvb2wtPnNvcnRzdGF0ZSwgdHVwLCBzaXplKTsKKworCXN0YXRlLT5ic19udW10 dXBsZXMrKzsKKworCXBmcmVlKHR1cCk7Cit9CisKIC8qCiAgKiBHaXZlbiB0d28gZGVmb3Jt ZWQgdHVwbGVzLCBhZGp1c3QgdGhlIGZpcnN0IG9uZSBzbyB0aGF0IGl0J3MgY29uc2lzdGVu dAogICogd2l0aCB0aGUgc3VtbWFyeSB2YWx1ZXMgaW4gYm90aC4KQEAgLTE5MjgsMyArMjIz Miw0NzIgQEAgY2hlY2tfbnVsbF9rZXlzKEJyaW5WYWx1ZXMgKmJ2YWwsIFNjYW5LZXkgKm51 bGxrZXlzLCBpbnQgbm51bGxrZXlzKQogCiAJcmV0dXJuIHRydWU7CiB9CisKK3N0YXRpYyB2 b2lkCitfYnJpbl9iZWdpbl9wYXJhbGxlbChCcmluQnVpbGRTdGF0ZSAqYnVpbGRzdGF0ZSwg UmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCisJCQkJCSBib29sIGlzY29uY3VycmVu dCwgaW50IHJlcXVlc3QpCit7CisJUGFyYWxsZWxDb250ZXh0ICpwY3h0OworCWludAkJCXNj YW50dXBsZXNvcnRzdGF0ZXM7CisJU25hcHNob3QJc25hcHNob3Q7CisJU2l6ZQkJZXN0YnJp bnNoYXJlZDsKKwlTaXplCQllc3Rzb3J0OworCUJyaW5TaGFyZWQgICAqYnJpbnNoYXJlZDsK KwlTaGFyZWRzb3J0ICAgKnNoYXJlZHNvcnQ7CisJQnJpbkxlYWRlciAgICpicmlubGVhZGVy ID0gKEJyaW5MZWFkZXIgKikgcGFsbG9jMChzaXplb2YoQnJpbkxlYWRlcikpOworCVdhbFVz YWdlICAgKndhbHVzYWdlOworCUJ1ZmZlclVzYWdlICpidWZmZXJ1c2FnZTsKKwlib29sCQls ZWFkZXJwYXJ0aWNpcGF0ZXMgPSB0cnVlOworCWludAkJCXF1ZXJ5bGVuOworCisjaWZkZWYg RElTQUJMRV9MRUFERVJfUEFSVElDSVBBVElPTgorCWxlYWRlcnBhcnRpY2lwYXRlcyA9IGZh bHNlOworI2VuZGlmCisKKwkvKgorCSAqIEVudGVyIHBhcmFsbGVsIG1vZGUsIGFuZCBjcmVh dGUgY29udGV4dCBmb3IgcGFyYWxsZWwgYnVpbGQgb2YgYnJpbgorCSAqIGluZGV4CisJICov CisJRW50ZXJQYXJhbGxlbE1vZGUoKTsKKwlBc3NlcnQocmVxdWVzdCA+IDApOworCXBjeHQg PSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3RncmVzIiwgIl9icmluX3BhcmFsbGVsX2J1 aWxkX21haW4iLAorCQkJCQkJCQkgcmVxdWVzdCk7CisKKwlzY2FudHVwbGVzb3J0c3RhdGVz ID0gbGVhZGVycGFydGljaXBhdGVzID8gcmVxdWVzdCArIDEgOiByZXF1ZXN0OworCisJLyoK KwkgKiBQcmVwYXJlIGZvciBzY2FuIG9mIHRoZSBiYXNlIHJlbGF0aW9uLiAgSW4gYSBub3Jt YWwgaW5kZXggYnVpbGQsIHdlIHVzZQorCSAqIFNuYXBzaG90QW55IGJlY2F1c2Ugd2UgbXVz dCByZXRyaWV2ZSBhbGwgdHVwbGVzIGFuZCBkbyBvdXIgb3duIHRpbWUKKwkgKiBxdWFsIGNo ZWNrcyAoYmVjYXVzZSB3ZSBoYXZlIHRvIGluZGV4IFJFQ0VOVExZX0RFQUQgdHVwbGVzKS4g IEluIGEKKwkgKiBjb25jdXJyZW50IGJ1aWxkLCB3ZSB0YWtlIGEgcmVndWxhciBNVkNDIHNu YXBzaG90IGFuZCBpbmRleCB3aGF0ZXZlcidzCisJICogbGl2ZSBhY2NvcmRpbmcgdG8gdGhh dC4KKwkgKi8KKwlpZiAoIWlzY29uY3VycmVudCkKKwkJc25hcHNob3QgPSBTbmFwc2hvdEFu eTsKKwllbHNlCisJCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkpOworCisJLyoKKwkgKiBFc3RpbWF0ZSBzaXplIGZvciBvdXIgb3duIFBB UkFMTEVMX0tFWV9CUklOX1NIQVJFRCB3b3Jrc3BhY2UuCisJICovCisJZXN0YnJpbnNoYXJl ZCA9IF9icmluX3BhcmFsbGVsX2VzdGltYXRlX3NoYXJlZChoZWFwLCBzbmFwc2hvdCk7CisJ c2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBlc3Ricmluc2hhcmVk KTsKKwllc3Rzb3J0ID0gdHVwbGVzb3J0X2VzdGltYXRlX3NoYXJlZChzY2FudHVwbGVzb3J0 c3RhdGVzKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIGVz dHNvcnQpOworCisJc2htX3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDIp OworCisJLyoKKwkgKiBFc3RpbWF0ZSBzcGFjZSBmb3IgV2FsVXNhZ2UgYW5kIEJ1ZmZlclVz YWdlIC0tIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UKKwkgKiBhbmQgUEFSQUxMRUxfS0VZX0JV RkZFUl9VU0FHRS4KKwkgKgorCSAqIElmIHRoZXJlIGFyZSBubyBleHRlbnNpb25zIGxvYWRl ZCB0aGF0IGNhcmUsIHdlIGNvdWxkIHNraXAgdGhpcy4gIFdlCisJICogaGF2ZSBubyB3YXkg b2Yga25vd2luZyB3aGV0aGVyIGFueW9uZSdzIGxvb2tpbmcgYXQgcGdXYWxVc2FnZSBvcgor CSAqIHBnQnVmZmVyVXNhZ2UsIHNvIGRvIGl0IHVuY29uZGl0aW9uYWxseS4KKwkgKi8KKwlz aG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsCisJCQkJCQkgICBtdWxf c2l6ZShzaXplb2YoV2FsVXNhZ2UpLCBwY3h0LT5ud29ya2VycykpOworCXNobV90b2NfZXN0 aW1hdGVfa2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKKwlzaG1fdG9jX2VzdGltYXRlX2No dW5rKCZwY3h0LT5lc3RpbWF0b3IsCisJCQkJCQkgICBtdWxfc2l6ZShzaXplb2YoQnVmZmVy VXNhZ2UpLCBwY3h0LT5ud29ya2VycykpOworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmcGN4 dC0+ZXN0aW1hdG9yLCAxKTsKKworCS8qIEZpbmFsbHksIGVzdGltYXRlIFBBUkFMTEVMX0tF WV9RVUVSWV9URVhUIHNwYWNlICovCisJaWYgKGRlYnVnX3F1ZXJ5X3N0cmluZykKKwl7CisJ CXF1ZXJ5bGVuID0gc3RybGVuKGRlYnVnX3F1ZXJ5X3N0cmluZyk7CisJCXNobV90b2NfZXN0 aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgcXVlcnlsZW4gKyAxKTsKKwkJc2htX3Rv Y19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOworCX0KKwllbHNlCisJCXF1 ZXJ5bGVuID0gMDsJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisKKwkvKiBFdmVyeW9u ZSdzIGhhZCBhIGNoYW5jZSB0byBhc2sgZm9yIHNwYWNlLCBzbyBub3cgY3JlYXRlIHRoZSBE U00gKi8KKwlJbml0aWFsaXplUGFyYWxsZWxEU00ocGN4dCk7CisKKwkvKiBJZiBubyBEU00g c2VnbWVudCB3YXMgYXZhaWxhYmxlLCBiYWNrIG91dCAoZG8gc2VyaWFsIGJ1aWxkKSAqLwor CWlmIChwY3h0LT5zZWcgPT0gTlVMTCkKKwl7CisJCWlmIChJc01WQ0NTbmFwc2hvdChzbmFw c2hvdCkpCisJCQlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOworCQlEZXN0cm95UGFy YWxsZWxDb250ZXh0KHBjeHQpOworCQlFeGl0UGFyYWxsZWxNb2RlKCk7CisJCXJldHVybjsK Kwl9CisKKwkvKiBTdG9yZSBzaGFyZWQgYnVpbGQgc3RhdGUsIGZvciB3aGljaCB3ZSByZXNl cnZlZCBzcGFjZSAqLworCWJyaW5zaGFyZWQgPSAoQnJpblNoYXJlZCAqKSBzaG1fdG9jX2Fs bG9jYXRlKHBjeHQtPnRvYywgZXN0YnJpbnNoYXJlZCk7CisJLyogSW5pdGlhbGl6ZSBpbW11 dGFibGUgc3RhdGUgKi8KKwlicmluc2hhcmVkLT5oZWFwcmVsaWQgPSBSZWxhdGlvbkdldFJl bGlkKGhlYXApOworCWJyaW5zaGFyZWQtPmluZGV4cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlk KGluZGV4KTsKKwlicmluc2hhcmVkLT5pc2NvbmN1cnJlbnQgPSBpc2NvbmN1cnJlbnQ7CisJ YnJpbnNoYXJlZC0+c2NhbnR1cGxlc29ydHN0YXRlcyA9IHNjYW50dXBsZXNvcnRzdGF0ZXM7 CisJYnJpbnNoYXJlZC0+cGFnZXNQZXJSYW5nZSA9IGJ1aWxkc3RhdGUtPmJzX3BhZ2VzUGVy UmFuZ2U7CisJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZicmluc2hhcmVkLT53b3JrZXJzZG9u ZWN2KTsKKwlTcGluTG9ja0luaXQoJmJyaW5zaGFyZWQtPm11dGV4KTsKKworCS8qIEluaXRp YWxpemUgbXV0YWJsZSBzdGF0ZSAqLworCWJyaW5zaGFyZWQtPm5wYXJ0aWNpcGFudHNkb25l ID0gMDsKKwlicmluc2hhcmVkLT5yZWx0dXBsZXMgPSAwLjA7CisJYnJpbnNoYXJlZC0+aW5k dHVwbGVzID0gMC4wOworCisJdGFibGVfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoaGVhcCwK KwkJCQkJCQkJICBQYXJhbGxlbFRhYmxlU2NhbkZyb21CcmluU2hhcmVkKGJyaW5zaGFyZWQp LAorCQkJCQkJCQkgIHNuYXBzaG90LCBicmluc2hhcmVkLT5wYWdlc1BlclJhbmdlKTsKKwor CS8qCisJICogU3RvcmUgc2hhcmVkIHR1cGxlc29ydC1wcml2YXRlIHN0YXRlLCBmb3Igd2hp Y2ggd2UgcmVzZXJ2ZWQgc3BhY2UuCisJICogVGhlbiwgaW5pdGlhbGl6ZSBvcGFxdWUgc3Rh dGUgdXNpbmcgdHVwbGVzb3J0IHJvdXRpbmUuCisJICovCisJc2hhcmVkc29ydCA9IChTaGFy ZWRzb3J0ICopIHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBlc3Rzb3J0KTsKKwl0dXBs ZXNvcnRfaW5pdGlhbGl6ZV9zaGFyZWQoc2hhcmVkc29ydCwgc2NhbnR1cGxlc29ydHN0YXRl cywKKwkJCQkJCQkJcGN4dC0+c2VnKTsKKworCS8qCisJICogU3RvcmUgc2hhcmVkIHR1cGxl c29ydC1wcml2YXRlIHN0YXRlLCBmb3Igd2hpY2ggd2UgcmVzZXJ2ZWQgc3BhY2UuCisJICog VGhlbiwgaW5pdGlhbGl6ZSBvcGFxdWUgc3RhdGUgdXNpbmcgdHVwbGVzb3J0IHJvdXRpbmUu CisJICovCisJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfQlJJTl9T SEFSRUQsIGJyaW5zaGFyZWQpOworCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxM RUxfS0VZX1RVUExFU09SVCwgc2hhcmVkc29ydCk7CisKKwkvKiBTdG9yZSBxdWVyeSBzdHJp bmcgZm9yIHdvcmtlcnMgKi8KKwlpZiAoZGVidWdfcXVlcnlfc3RyaW5nKQorCXsKKwkJY2hh cgkgICAqc2hhcmVkcXVlcnk7CisKKwkJc2hhcmVkcXVlcnkgPSAoY2hhciAqKSBzaG1fdG9j X2FsbG9jYXRlKHBjeHQtPnRvYywgcXVlcnlsZW4gKyAxKTsKKwkJbWVtY3B5KHNoYXJlZHF1 ZXJ5LCBkZWJ1Z19xdWVyeV9zdHJpbmcsIHF1ZXJ5bGVuICsgMSk7CisJCXNobV90b2NfaW5z ZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX1FVRVJZX1RFWFQsIHNoYXJlZHF1ZXJ5KTsK Kwl9CisKKwkvKgorCSAqIEFsbG9jYXRlIHNwYWNlIGZvciBlYWNoIHdvcmtlcidzIFdhbFVz YWdlIGFuZCBCdWZmZXJVc2FnZTsgbm8gbmVlZCB0bworCSAqIGluaXRpYWxpemUuCisJICov CisJd2FsdXNhZ2UgPSBzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywKKwkJCQkJCQkJbXVs X3NpemUoc2l6ZW9mKFdhbFVzYWdlKSwgcGN4dC0+bndvcmtlcnMpKTsKKwlzaG1fdG9jX2lu c2VydChwY3h0LT50b2MsIFBBUkFMTEVMX0tFWV9XQUxfVVNBR0UsIHdhbHVzYWdlKTsKKwli dWZmZXJ1c2FnZSA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLAorCQkJCQkJCQkgICBt dWxfc2l6ZShzaXplb2YoQnVmZmVyVXNhZ2UpLCBwY3h0LT5ud29ya2VycykpOworCXNobV90 b2NfaW5zZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX0JVRkZFUl9VU0FHRSwgYnVmZmVy dXNhZ2UpOworCisJLyogTGF1bmNoIHdvcmtlcnMsIHNhdmluZyBzdGF0dXMgZm9yIGxlYWRl ci9jYWxsZXIgKi8KKwlMYXVuY2hQYXJhbGxlbFdvcmtlcnMocGN4dCk7CisJYnJpbmxlYWRl ci0+cGN4dCA9IHBjeHQ7CisJYnJpbmxlYWRlci0+bnBhcnRpY2lwYW50dHVwbGVzb3J0cyA9 IHBjeHQtPm53b3JrZXJzX2xhdW5jaGVkOworCWlmIChsZWFkZXJwYXJ0aWNpcGF0ZXMpCisJ CWJyaW5sZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxlc29ydHMrKzsKKwlicmlubGVhZGVyLT5i cmluc2hhcmVkID0gYnJpbnNoYXJlZDsKKwlicmlubGVhZGVyLT5zaGFyZWRzb3J0ID0gc2hh cmVkc29ydDsKKwlicmlubGVhZGVyLT5zbmFwc2hvdCA9IHNuYXBzaG90OworCWJyaW5sZWFk ZXItPndhbHVzYWdlID0gd2FsdXNhZ2U7CisJYnJpbmxlYWRlci0+YnVmZmVydXNhZ2UgPSBi dWZmZXJ1c2FnZTsKKworCS8qIElmIG5vIHdvcmtlcnMgd2VyZSBzdWNjZXNzZnVsbHkgbGF1 bmNoZWQsIGJhY2sgb3V0IChkbyBzZXJpYWwgYnVpbGQpICovCisJaWYgKHBjeHQtPm53b3Jr ZXJzX2xhdW5jaGVkID09IDApCisJeworCQlfYnJpbl9lbmRfcGFyYWxsZWwoYnJpbmxlYWRl ciwgTlVMTCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTYXZlIGxlYWRlciBzdGF0ZSBub3cg dGhhdCBpdCdzIGNsZWFyIGJ1aWxkIHdpbGwgYmUgcGFyYWxsZWwgKi8KKwlidWlsZHN0YXRl LT5ic19sZWFkZXIgPSBicmlubGVhZGVyOworCisJLyogSm9pbiBoZWFwIHNjYW4gb3Vyc2Vs dmVzICovCisJaWYgKGxlYWRlcnBhcnRpY2lwYXRlcykKKwkJX2JyaW5fbGVhZGVyX3BhcnRp Y2lwYXRlX2FzX3dvcmtlcihidWlsZHN0YXRlLCBoZWFwLCBpbmRleCk7CisKKwkvKgorCSAq IENhbGxlciBuZWVkcyB0byB3YWl0IGZvciBhbGwgbGF1bmNoZWQgd29ya2VycyB3aGVuIHdl IHJldHVybi4gIE1ha2UKKwkgKiBzdXJlIHRoYXQgdGhlIGZhaWx1cmUtdG8tc3RhcnQgY2Fz ZSB3aWxsIG5vdCBoYW5nIGZvcmV2ZXIuCisJICovCisJV2FpdEZvclBhcmFsbGVsV29ya2Vy c1RvQXR0YWNoKHBjeHQpOworfQorCisvKgorICogU2h1dCBkb3duIHdvcmtlcnMsIGRlc3Ry b3kgcGFyYWxsZWwgY29udGV4dCwgYW5kIGVuZCBwYXJhbGxlbCBtb2RlLgorICovCitzdGF0 aWMgdm9pZAorX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJy aW5CdWlsZFN0YXRlICpzdGF0ZSkKK3sKKwlpbnQJCQlpOworCUJyaW5UdXBsZSAgKmJ0dXA7 CisJU2l6ZQkJdHVwbGVuOworCUJyaW5TaGFyZWQgKmJyaW5zaGFyZWQgPSBicmlubGVhZGVy LT5icmluc2hhcmVkOworCUJsb2NrTnVtYmVyCXByZXZibGtubyA9IEludmFsaWRCbG9ja051 bWJlcjsKKwlCcmluVHVwbGUgICplbXB0eVR1cGxlID0gTlVMTDsKKwlTaXplCQllbXB0eVNp emU7CisKKwkvKiBTaHV0ZG93biB3b3JrZXIgcHJvY2Vzc2VzICovCisJV2FpdEZvclBhcmFs bGVsV29ya2Vyc1RvRmluaXNoKGJyaW5sZWFkZXItPnBjeHQpOworCisJaWYgKCFzdGF0ZSkK KwkJcmV0dXJuOworCisJLyogY29weSB0aGUgZGF0YSBpbnRvIGxlYWRlciBzdGF0ZSAod2Ug aGF2ZSB0byB3YWl0IGZvciB0aGUgd29ya2VycyApICovCisJc3RhdGUtPmJzX3JlbHR1cGxl cyA9IGJyaW5zaGFyZWQtPnJlbHR1cGxlczsKKwlzdGF0ZS0+YnNfbnVtdHVwbGVzID0gYnJp bnNoYXJlZC0+aW5kdHVwbGVzOworCisJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLT5i c19zcG9vbF9vdXQtPnNvcnRzdGF0ZSk7CisKKwkvKgorCSAqIFJlYWQgdGhlIEJSSU4gdHVw bGVzIGZyb20gdGhlIHNoYXJlZCB0dXBsZXNvcnQsIHNvcnRlZCBieSBibG9jayBudW1iZXIu CisJICogVGhhdCBwcm9iYWJseSBnaXZlcyB1cyBhbiBpbmRleCB0aGF0IGlzIGNoZWFwZXIg dG8gc2NhbiwgdGhhbmtzIHRvIG1vc3RseQorCSAqIGdldHRpbmcgZGF0YSBmcm9tIHRoZSBz YW1lIGluZGV4IHBhZ2UgYXMgYmVmb3JlLgorCSAqCisJICogRklYTUUgVGhpcyBwcm9iYWJs eSBuZWVkcyBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGZpeGVzIC0gd2UncmUgcmVhZGluZwor CSAqIHR1cGxlcyBmcm9tIHRoZSB0dXBsZXNvcnQsIHdlJ3JlIGFsbG9jYXRpbmcgYW4gZW10 eSB0dXBsZSwgYW5kIHNvIG9uLgorCSAqIFByb2JhYmx5IGJldHRlciB0byByZWxlYXNlIHRo aXMgbWVtb3J5LgorCSAqCisJICogWFhYIFdlIGNhbid0IHF1aXRlIGZyZWUgdGhlIEJyaW5U dXBsZSwgdGhvdWdoLCBiZWNhdXNlIHRoYXQncyBhIGZpZWxkCisJICogaW4gQnJpblNvcnRU dXBsZS4KKwkgKi8KKwl3aGlsZSAoKGJ0dXAgPSB0dXBsZXNvcnRfZ2V0YnJpbnR1cGxlKHN0 YXRlLT5ic19zcG9vbF9vdXQtPnNvcnRzdGF0ZSwgJnR1cGxlbiwgdHJ1ZSkpICE9IE5VTEwp CisJeworCQkvKgorCQkgKiBXZSBzaG91bGQgbm90IGdldCB0d28gc3VtbWFyaWVzIGZvciB0 aGUgc2FtZSByYW5nZS4gVGhlIHdvcmtlcnMKKwkJICogYXJlIHByb2R1Y2luZyByYW5nZXMg Zm9yIG5vbi1vdmVybGFwcGluZyBzZWN0aW9ucyBvZiB0aGUgdGFibGUuCisJCSAqLworCQlB c3NlcnQoYnR1cC0+YnRfYmxrbm8gIT0gcHJldmJsa25vKTsKKworCQkvKiBSYW5nZXMgc2hv dWxkIGJlIG11bHRpcGxlcyBvZiBwYWdlc19wZXJfcmFuZ2UgZm9yIHRoZSBpbmRleC4gKi8K KwkJQXNzZXJ0KGJ0dXAtPmJ0X2Jsa25vICUgYnJpbnNoYXJlZC0+cGFnZXNQZXJSYW5nZSA9 PSAwKTsKKworCQkvKiBGaWxsIGVtcHR5IHJhbmdlcyBmb3IgYWxsIHJhbmdlcyBtaXNzaW5n IGluIHRoZSB0dXBsZXNvcnQuICovCisJCXByZXZibGtubyA9IChwcmV2Ymxrbm8gPT0gSW52 YWxpZEJsb2NrTnVtYmVyKSA/IDAgOiBwcmV2Ymxrbm87CisJCXdoaWxlIChwcmV2Ymxrbm8g KyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSA8IGJ0dXAtPmJ0X2Jsa25vKQorCQl7CisJCQkv KiB0aGUgbWlzc2luZyByYW5nZSAqLworCQkJcHJldmJsa25vICs9IHN0YXRlLT5ic19wYWdl c1BlclJhbmdlOworCisJCQkvKiBEaWQgd2UgYWxyZWFkeSBidWlsZCB0aGUgZW1wdHkgcmFu Z2U/IElmIG5vdCwgZG8gaXQgbm93LiAqLworCQkJaWYgKGVtcHR5VHVwbGUgPT0gTlVMTCkK KwkJCXsKKwkJCQlCcmluTWVtVHVwbGUgKmR0dXBsZSA9IGJyaW5fbmV3X21lbXR1cGxlKHN0 YXRlLT5ic19iZGVzYyk7CisKKwkJCQllbXB0eVR1cGxlID0gYnJpbl9mb3JtX3R1cGxlKHN0 YXRlLT5ic19iZGVzYywgcHJldmJsa25vLCBkdHVwbGUsICZlbXB0eVNpemUpOworCQkJfQor CQkJZWxzZQorCQkJeworCQkJCS8qIHdlIGFscmVhZHkgaGF2ZSBhbSAiZW1wdHkgcmFuZ2Ui IHR1cGxlLCBqdXN0IHNldCB0aGUgYmxvY2sgKi8KKwkJCQllbXB0eVR1cGxlLT5idF9ibGtu byA9IHByZXZibGtubzsKKwkJCX0KKworCQkJYnJpbl9kb2luc2VydChzdGF0ZS0+YnNfaXJl bCwgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UsIHN0YXRlLT5ic19ybUFjY2VzcywKKwkJCQkJ CSAgJnN0YXRlLT5ic19jdXJyZW50SW5zZXJ0QnVmLAorCQkJCQkJICBlbXB0eVR1cGxlLT5i dF9ibGtubywgZW1wdHlUdXBsZSwgZW1wdHlTaXplKTsKKwkJfQorCisJCWJyaW5fZG9pbnNl cnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlLCBzdGF0ZS0+YnNf cm1BY2Nlc3MsCisJCQkJCSAgJnN0YXRlLT5ic19jdXJyZW50SW5zZXJ0QnVmLCBidHVwLT5i dF9ibGtubywgYnR1cCwgdHVwbGVuKTsKKworCQlwcmV2Ymxrbm8gPSBidHVwLT5idF9ibGtu bzsKKwl9CisKKwl0dXBsZXNvcnRfZW5kKHN0YXRlLT5ic19zcG9vbF9vdXQtPnNvcnRzdGF0 ZSk7CisKKwkvKgorCSAqIE5leHQsIGFjY3VtdWxhdGUgV0FMIHVzYWdlLiAgKFRoaXMgbXVz dCB3YWl0IGZvciB0aGUgd29ya2VycyB0byBmaW5pc2gsCisJICogb3Igd2UgbWlnaHQgZ2V0 IGluY29tcGxldGUgZGF0YS4pCisJICovCisJZm9yIChpID0gMDsgaSA8IGJyaW5sZWFkZXIt PnBjeHQtPm53b3JrZXJzX2xhdW5jaGVkOyBpKyspCisJCUluc3RyQWNjdW1QYXJhbGxlbFF1 ZXJ5KCZicmlubGVhZGVyLT5idWZmZXJ1c2FnZVtpXSwgJmJyaW5sZWFkZXItPndhbHVzYWdl W2ldKTsKKworCS8qIEZyZWUgbGFzdCByZWZlcmVuY2UgdG8gTVZDQyBzbmFwc2hvdCwgaWYg b25lIHdhcyB1c2VkICovCisJaWYgKElzTVZDQ1NuYXBzaG90KGJyaW5sZWFkZXItPnNuYXBz aG90KSkKKwkJVW5yZWdpc3RlclNuYXBzaG90KGJyaW5sZWFkZXItPnNuYXBzaG90KTsKKwlE ZXN0cm95UGFyYWxsZWxDb250ZXh0KGJyaW5sZWFkZXItPnBjeHQpOworCUV4aXRQYXJhbGxl bE1vZGUoKTsKK30KKworLyoKKyAqIFJldHVybnMgc2l6ZSBvZiBzaGFyZWQgbWVtb3J5IHJl cXVpcmVkIHRvIHN0b3JlIHN0YXRlIGZvciBhIHBhcmFsbGVsCisgKiBicmluIGluZGV4IGJ1 aWxkIGJhc2VkIG9uIHRoZSBzbmFwc2hvdCBpdHMgcGFyYWxsZWwgc2NhbiB3aWxsIHVzZS4K KyAqLworc3RhdGljIFNpemUKK19icmluX3BhcmFsbGVsX2VzdGltYXRlX3NoYXJlZChSZWxh dGlvbiBoZWFwLCBTbmFwc2hvdCBzbmFwc2hvdCkKK3sKKwkvKiBjLmYuIHNobV90b2NfYWxs b2NhdGUgYXMgdG8gd2h5IEJVRkZFUkFMSUdOIGlzIHVzZWQgKi8KKwlyZXR1cm4gYWRkX3Np emUoQlVGRkVSQUxJR04oc2l6ZW9mKEJyaW5TaGFyZWQpKSwKKwkJCQkJdGFibGVfcGFyYWxs ZWxzY2FuX2VzdGltYXRlKGhlYXAsIHNuYXBzaG90KSk7Cit9CisKKy8qCisgKiBXaXRoaW4g bGVhZGVyLCBwYXJ0aWNpcGF0ZSBhcyBhIHBhcmFsbGVsIHdvcmtlci4KKyAqLworc3RhdGlj IHZvaWQKK19icmluX2xlYWRlcl9wYXJ0aWNpcGF0ZV9hc193b3JrZXIoQnJpbkJ1aWxkU3Rh dGUgKmJ1aWxkc3RhdGUsIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4KQoreworCUJy aW5MZWFkZXIgKmJyaW5sZWFkZXIgPSBidWlsZHN0YXRlLT5ic19sZWFkZXI7CisJaW50CQkJ c29ydG1lbTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBwcml2YXRl IHNwb29sICovCisJYnVpbGRzdGF0ZS0+YnNfc3Bvb2wgPSAoQnJpblNwb29sICopIHBhbGxv YzAoc2l6ZW9mKEJyaW5TcG9vbCkpOworCWJ1aWxkc3RhdGUtPmJzX3Nwb29sLT5oZWFwID0g YnVpbGRzdGF0ZS0+YnNfc3Bvb2wtPmhlYXA7CisJYnVpbGRzdGF0ZS0+YnNfc3Bvb2wtPmlu ZGV4ID0gYnVpbGRzdGF0ZS0+YnNfc3Bvb2wtPmluZGV4OworCisJLyoKKwkgKiBNaWdodCBh cyB3ZWxsIHVzZSByZWxpYWJsZSBmaWd1cmUgd2hlbiBkb2xpbmcgb3V0IG1haW50ZW5hbmNl X3dvcmtfbWVtCisJICogKHdoZW4gcmVxdWVzdGVkIG51bWJlciBvZiB3b3JrZXJzIHdlcmUg bm90IGxhdW5jaGVkLCB0aGlzIHdpbGwgYmUKKwkgKiBzb21ld2hhdCBoaWdoZXIgdGhhbiBp dCBpcyBmb3Igb3RoZXIgd29ya2VycykuCisJICovCisJc29ydG1lbSA9IG1haW50ZW5hbmNl X3dvcmtfbWVtIC8gYnJpbmxlYWRlci0+bnBhcnRpY2lwYW50dHVwbGVzb3J0czsKKworCS8q IFBlcmZvcm0gd29yayBjb21tb24gdG8gYWxsIHBhcnRpY2lwYW50cyAqLworCV9icmluX3Bh cmFsbGVsX3NjYW5fYW5kX2J1aWxkKGJ1aWxkc3RhdGUsIGJ1aWxkc3RhdGUtPmJzX3Nwb29s LCBicmlubGVhZGVyLT5icmluc2hhcmVkLAorCQkJCQkJCQkgIGJyaW5sZWFkZXItPnNoYXJl ZHNvcnQsIGhlYXAsIGluZGV4LCBzb3J0bWVtLCB0cnVlKTsKK30KKworLyoKKyAqIFBlcmZv cm0gYSB3b3JrZXIncyBwb3J0aW9uIG9mIGEgcGFyYWxsZWwgc29ydC4KKyAqCisgKiBUaGlz IGdlbmVyYXRlcyBhIHR1cGxlc29ydCBmb3IgcGFzc2VkIGJ0c3Bvb2wsIGFuZCBhIHNlY29u ZCB0dXBsZXNvcnQKKyAqIHN0YXRlIGlmIGEgc2Vjb25kIGJ0c3Bvb2wgaXMgbmVlZCAoaS5l LiBmb3IgdW5pcXVlIGluZGV4IGJ1aWxkcykuICBBbGwKKyAqIG90aGVyIHNwb29sIGZpZWxk cyBzaG91bGQgYWxyZWFkeSBiZSBzZXQgd2hlbiB0aGlzIGlzIGNhbGxlZC4KKyAqCisgKiBz b3J0bWVtIGlzIHRoZSBhbW91bnQgb2Ygd29ya2luZyBtZW1vcnkgdG8gdXNlIHdpdGhpbiBl YWNoIHdvcmtlciwKKyAqIGV4cHJlc3NlZCBpbiBLQnMuCisgKgorICogV2hlbiB0aGlzIHJl dHVybnMsIHdvcmtlcnMgYXJlIGRvbmUsIGFuZCBuZWVkIG9ubHkgcmVsZWFzZSByZXNvdXJj ZXMuCisgKi8KK3N0YXRpYyB2b2lkCitfYnJpbl9wYXJhbGxlbF9zY2FuX2FuZF9idWlsZChC cmluQnVpbGRTdGF0ZSAqc3RhdGUsIEJyaW5TcG9vbCAqYnJpbnNwb29sLAorCQkJCQkJCSAg QnJpblNoYXJlZCAqYnJpbnNoYXJlZCwgU2hhcmVkc29ydCAqc2hhcmVkc29ydCwKKwkJCQkJ CQkgIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LCBpbnQgc29ydG1lbSwKKwkJCQkJ CQkgIGJvb2wgcHJvZ3Jlc3MpCit7CisJU29ydENvb3JkaW5hdGUgY29vcmRpbmF0ZTsKKwlU YWJsZVNjYW5EZXNjCXNjYW47CisJZG91YmxlCQlyZWx0dXBsZXM7CisJSW5kZXhJbmZvICAq aW5kZXhJbmZvOworCisJLyogSW5pdGlhbGl6ZSBsb2NhbCB0dXBsZXNvcnQgY29vcmRpbmF0 aW9uIHN0YXRlICovCisJY29vcmRpbmF0ZSA9IHBhbGxvYzAoc2l6ZW9mKFNvcnRDb29yZGlu YXRlRGF0YSkpOworCWNvb3JkaW5hdGUtPmlzV29ya2VyID0gdHJ1ZTsKKwljb29yZGluYXRl LT5uUGFydGljaXBhbnRzID0gLTE7CisJY29vcmRpbmF0ZS0+c2hhcmVkc29ydCA9IHNoYXJl ZHNvcnQ7CisKKwkvKiBCZWdpbiAicGFydGlhbCIgdHVwbGVzb3J0ICovCisJYnJpbnNwb29s LT5zb3J0c3RhdGUgPSB0dXBsZXNvcnRfYmVnaW5faW5kZXhfYnJpbihicmluc3Bvb2wtPmhl YXAsCisJCQkJCQkJCQkJCQkJICBicmluc3Bvb2wtPmluZGV4LAorCQkJCQkJCQkJCQkJCSAg c29ydG1lbSwgY29vcmRpbmF0ZSwKKwkJCQkJCQkJCQkJCQkgIFRVUExFU09SVF9OT05FKTsK KworCS8qIEpvaW4gcGFyYWxsZWwgc2NhbiAqLworCWluZGV4SW5mbyA9IEJ1aWxkSW5kZXhJ bmZvKGluZGV4KTsKKwlpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSBicmluc2hhcmVkLT5p c2NvbmN1cnJlbnQ7CisKKwlzY2FuID0gdGFibGVfYmVnaW5zY2FuX3BhcmFsbGVsKGhlYXAs CisJCQkJCQkJCQlQYXJhbGxlbFRhYmxlU2NhbkZyb21CcmluU2hhcmVkKGJyaW5zaGFyZWQp KTsKKworCXJlbHR1cGxlcyA9IHRhYmxlX2luZGV4X2J1aWxkX3NjYW4oaGVhcCwgaW5kZXgs IGluZGV4SW5mbywgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCQkJCSAgIGJyaW5idWlsZENhbGxiYWNr UGFyYWxsZWwsIHN0YXRlLCBzY2FuKTsKKworCS8qIGluc2VydCB0aGUgbGFzdCBpdGVtICov CisJZm9ybV9hbmRfc3BpbGxfdHVwbGUoc3RhdGUpOworCisJLyogc29ydCB0aGUgQlJJTiBy YW5nZXMgYnVpbHQgYnkgdGhpcyB3b3JrZXIgKi8KKwl0dXBsZXNvcnRfcGVyZm9ybXNvcnQo YnJpbnNwb29sLT5zb3J0c3RhdGUpOworCisJc3RhdGUtPmJzX3JlbHR1cGxlcyArPSByZWx0 dXBsZXM7CisKKwkvKgorCSAqIERvbmUuICBSZWNvcmQgYW1idWlsZCBzdGF0aXN0aWNzLgor CSAqLworCVNwaW5Mb2NrQWNxdWlyZSgmYnJpbnNoYXJlZC0+bXV0ZXgpOworCWJyaW5zaGFy ZWQtPm5wYXJ0aWNpcGFudHNkb25lKys7CisJYnJpbnNoYXJlZC0+cmVsdHVwbGVzICs9IHN0 YXRlLT5ic19yZWx0dXBsZXM7CisJYnJpbnNoYXJlZC0+aW5kdHVwbGVzICs9IHN0YXRlLT5i c19udW10dXBsZXM7CisJU3BpbkxvY2tSZWxlYXNlKCZicmluc2hhcmVkLT5tdXRleCk7CisK KwkvKiBOb3RpZnkgbGVhZGVyICovCisJQ29uZGl0aW9uVmFyaWFibGVTaWduYWwoJmJyaW5z aGFyZWQtPndvcmtlcnNkb25lY3YpOworCisJdHVwbGVzb3J0X2VuZChicmluc3Bvb2wtPnNv cnRzdGF0ZSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIHdvcmsgd2l0aGluIGEgbGF1bmNoZWQg cGFyYWxsZWwgcHJvY2Vzcy4KKyAqLwordm9pZAorX2JyaW5fcGFyYWxsZWxfYnVpbGRfbWFp bihkc21fc2VnbWVudCAqc2VnLCBzaG1fdG9jICp0b2MpCit7CisJY2hhcgkgICAqc2hhcmVk cXVlcnk7CisJQnJpblNoYXJlZCAqYnJpbnNoYXJlZDsKKwlTaGFyZWRzb3J0ICpzaGFyZWRz b3J0OworCUJyaW5CdWlsZFN0YXRlICpidWlsZHN0YXRlOworCVJlbGF0aW9uCWhlYXBSZWw7 CisJUmVsYXRpb24JaW5kZXhSZWw7CisJTE9DS01PREUJaGVhcExvY2ttb2RlOworCUxPQ0tN T0RFCWluZGV4TG9ja21vZGU7CisJV2FsVXNhZ2UgICAqd2FsdXNhZ2U7CisJQnVmZmVyVXNh Z2UgKmJ1ZmZlcnVzYWdlOworCWludAkJCXNvcnRtZW07CisKKwkvKgorCSAqIFRoZSBvbmx5 IHBvc3NpYmxlIHN0YXR1cyBmbGFnIHRoYXQgY2FuIGJlIHNldCB0byB0aGUgcGFyYWxsZWwg d29ya2VyIGlzCisJICogUFJPQ19JTl9TQUZFX0lDLgorCSAqLworCUFzc2VydCgoTXlQcm9j LT5zdGF0dXNGbGFncyA9PSAwKSB8fAorCQkgICAoTXlQcm9jLT5zdGF0dXNGbGFncyA9PSBQ Uk9DX0lOX1NBRkVfSUMpKTsKKworCS8qIFNldCBkZWJ1Z19xdWVyeV9zdHJpbmcgZm9yIGlu ZGl2aWR1YWwgd29ya2VycyBmaXJzdCAqLworCXNoYXJlZHF1ZXJ5ID0gc2htX3RvY19sb29r dXAodG9jLCBQQVJBTExFTF9LRVlfUVVFUllfVEVYVCwgdHJ1ZSk7CisJZGVidWdfcXVlcnlf c3RyaW5nID0gc2hhcmVkcXVlcnk7CisKKwkvKiBSZXBvcnQgdGhlIHF1ZXJ5IHN0cmluZyBm cm9tIGxlYWRlciAqLworCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywg ZGVidWdfcXVlcnlfc3RyaW5nKTsKKworCS8qIExvb2sgdXAgYnJpbiBzaGFyZWQgc3RhdGUg Ki8KKwlicmluc2hhcmVkID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfQlJJ Tl9TSEFSRUQsIGZhbHNlKTsKKworCS8qIE9wZW4gcmVsYXRpb25zIHVzaW5nIGxvY2sgbW9k ZXMga25vd24gdG8gYmUgb2J0YWluZWQgYnkgaW5kZXguYyAqLworCWlmICghYnJpbnNoYXJl ZC0+aXNjb25jdXJyZW50KQorCXsKKwkJaGVhcExvY2ttb2RlID0gU2hhcmVMb2NrOworCQlp bmRleExvY2ttb2RlID0gQWNjZXNzRXhjbHVzaXZlTG9jazsKKwl9CisJZWxzZQorCXsKKwkJ aGVhcExvY2ttb2RlID0gU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrOworCQlpbmRleExvY2tt b2RlID0gUm93RXhjbHVzaXZlTG9jazsKKwl9CisKKwkvKiBPcGVuIHJlbGF0aW9ucyB3aXRo aW4gd29ya2VyICovCisJaGVhcFJlbCA9IHRhYmxlX29wZW4oYnJpbnNoYXJlZC0+aGVhcHJl bGlkLCBoZWFwTG9ja21vZGUpOworCWluZGV4UmVsID0gaW5kZXhfb3Blbihicmluc2hhcmVk LT5pbmRleHJlbGlkLCBpbmRleExvY2ttb2RlKTsKKworCWJ1aWxkc3RhdGUgPSBpbml0aWFs aXplX2JyaW5fYnVpbGRzdGF0ZShpbmRleFJlbCwgTlVMTCwgYnJpbnNoYXJlZC0+cGFnZXNQ ZXJSYW5nZSk7CisKKwkvKiBJbml0aWFsaXplIHdvcmtlcidzIG93biBzcG9vbCAqLworCWJ1 aWxkc3RhdGUtPmJzX3Nwb29sID0gKEJyaW5TcG9vbCAqKSBwYWxsb2MwKHNpemVvZihCcmlu U3Bvb2wpKTsKKwlidWlsZHN0YXRlLT5ic19zcG9vbC0+aGVhcCA9IGhlYXBSZWw7CisJYnVp bGRzdGF0ZS0+YnNfc3Bvb2wtPmluZGV4ID0gaW5kZXhSZWw7CisKKwkvKiBMb29rIHVwIHNo YXJlZCBzdGF0ZSBwcml2YXRlIHRvIHR1cGxlc29ydC5jICovCisJc2hhcmVkc29ydCA9IHNo bV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1RVUExFU09SVCwgZmFsc2UpOworCXR1 cGxlc29ydF9hdHRhY2hfc2hhcmVkKHNoYXJlZHNvcnQsIHNlZyk7CisKKwkvKiBQcmVwYXJl IHRvIHRyYWNrIGJ1ZmZlciB1c2FnZSBkdXJpbmcgcGFyYWxsZWwgZXhlY3V0aW9uICovCisJ SW5zdHJTdGFydFBhcmFsbGVsUXVlcnkoKTsKKworCS8qCisJICogTWlnaHQgYXMgd2VsbCB1 c2UgcmVsaWFibGUgZmlndXJlIHdoZW4gZG9saW5nIG91dCBtYWludGVuYW5jZV93b3JrX21l bQorCSAqICh3aGVuIHJlcXVlc3RlZCBudW1iZXIgb2Ygd29ya2VycyB3ZXJlIG5vdCBsYXVu Y2hlZCwgdGhpcyB3aWxsIGJlCisJICogc29tZXdoYXQgaGlnaGVyIHRoYW4gaXQgaXMgZm9y IG90aGVyIHdvcmtlcnMpLgorCSAqLworCXNvcnRtZW0gPSBtYWludGVuYW5jZV93b3JrX21l bSAvIGJyaW5zaGFyZWQtPnNjYW50dXBsZXNvcnRzdGF0ZXM7CisKKwlfYnJpbl9wYXJhbGxl bF9zY2FuX2FuZF9idWlsZChidWlsZHN0YXRlLCBidWlsZHN0YXRlLT5ic19zcG9vbCwKKwkJ CQkJCQkJICBicmluc2hhcmVkLCBzaGFyZWRzb3J0LAorCQkJCQkJCQkgIGhlYXBSZWwsIGlu ZGV4UmVsLCBzb3J0bWVtLCBmYWxzZSk7CisKKwkvKiBSZXBvcnQgV0FML2J1ZmZlciB1c2Fn ZSBkdXJpbmcgcGFyYWxsZWwgZXhlY3V0aW9uICovCisJYnVmZmVydXNhZ2UgPSBzaG1fdG9j X2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9CVUZGRVJfVVNBR0UsIGZhbHNlKTsKKwl3YWx1 c2FnZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1dBTF9VU0FHRSwgZmFs c2UpOworCUluc3RyRW5kUGFyYWxsZWxRdWVyeSgmYnVmZmVydXNhZ2VbUGFyYWxsZWxXb3Jr ZXJOdW1iZXJdLAorCQkJCQkJICAmd2FsdXNhZ2VbUGFyYWxsZWxXb3JrZXJOdW1iZXJdKTsK KworCWluZGV4X2Nsb3NlKGluZGV4UmVsLCBpbmRleExvY2ttb2RlKTsKKwl0YWJsZV9jbG9z ZShoZWFwUmVsLCBoZWFwTG9ja21vZGUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzb3J0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNvcnQuYwppbmRleCBjMjY2NWZjZTQxMS4uNjI0MWJhZWVhODYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c29ydC5jCkBAIC0xNTc1LDcgKzE1NzUsNyBAQCBfYnRfYmVnaW5f cGFyYWxsZWwoQlRCdWlsZFN0YXRlICpidWlsZHN0YXRlLCBib29sIGlzY29uY3VycmVudCwg aW50IHJlcXVlc3QpCiAJYnRzaGFyZWQtPmJyb2tlbmhvdGNoYWluID0gZmFsc2U7CiAJdGFi bGVfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoYnRzcG9vbC0+aGVhcCwKIAkJCQkJCQkJICBQ YXJhbGxlbFRhYmxlU2NhbkZyb21CVFNoYXJlZChidHNoYXJlZCksCi0JCQkJCQkJCSAgc25h cHNob3QpOworCQkJCQkJCQkgIHNuYXBzaG90LCBJbnZhbGlkQmxvY2tOdW1iZXIpOwogCiAJ LyoKIAkgKiBTdG9yZSBzaGFyZWQgdHVwbGVzb3J0LXByaXZhdGUgc3RhdGUsIGZvciB3aGlj aCB3ZSByZXNlcnZlZCBzcGFjZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmlu ZGV4IGM2YmRiN2UxYzY4Li40YWYwZDQzM2U5ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RhYmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUv dGFibGVhbS5jCkBAIC0xNTMsOSArMTUzLDkgQEAgdGFibGVfcGFyYWxsZWxzY2FuX2VzdGlt YXRlKFJlbGF0aW9uIHJlbCwgU25hcHNob3Qgc25hcHNob3QpCiAKIHZvaWQKIHRhYmxlX3Bh cmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIHJlbCwgUGFyYWxsZWxUYWJsZVNjYW5E ZXNjIHBzY2FuLAotCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QpCisJCQkJCQkJICBTbmFw c2hvdCBzbmFwc2hvdCwgQmxvY2tOdW1iZXIgY2h1bmtfZmFjdG9yKQogewotCVNpemUJCXNu YXBzaG90X29mZiA9IHJlbC0+cmRfdGFibGVhbS0+cGFyYWxsZWxzY2FuX2luaXRpYWxpemUo cmVsLCBwc2Nhbik7CisJU2l6ZQkJc25hcHNob3Rfb2ZmID0gcmVsLT5yZF90YWJsZWFtLT5w YXJhbGxlbHNjYW5faW5pdGlhbGl6ZShyZWwsIHBzY2FuLCBjaHVua19mYWN0b3IpOwogCiAJ cHNjYW4tPnBoc19zbmFwc2hvdF9vZmYgPSBzbmFwc2hvdF9vZmY7CiAKQEAgLTM5NSwxNiAr Mzk1LDIxIEBAIHRhYmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9lc3RpbWF0ZShSZWxhdGlvbiBy ZWwpCiB9CiAKIFNpemUKLXRhYmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJl bGF0aW9uIHJlbCwgUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuKQordGFibGVfYmxvY2tf cGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gcmVsLCBQYXJhbGxlbFRhYmxlU2Nh bkRlc2MgcHNjYW4sIEJsb2NrTnVtYmVyIGNodW5rX2ZhY3RvcikKIHsKIAlQYXJhbGxlbEJs b2NrVGFibGVTY2FuRGVzYyBicHNjYW4gPSAoUGFyYWxsZWxCbG9ja1RhYmxlU2NhbkRlc2Mp IHBzY2FuOwogCiAJYnBzY2FuLT5iYXNlLnBoc19yZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQo cmVsKTsKIAlicHNjYW4tPnBoc19uYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nr cyhyZWwpOwotCS8qIGNvbXBhcmUgcGhzX3N5bmNzY2FuIGluaXRpYWxpemF0aW9uIHRvIHNp bWlsYXIgbG9naWMgaW4gaW5pdHNjYW4gKi8KKwlicHNjYW4tPnBoc19jaHVua19mYWN0b3Ig PSBjaHVua19mYWN0b3I7CisJLyogY29tcGFyZSBwaHNfc3luY3NjYW4gaW5pdGlhbGl6YXRp b24gdG8gc2ltaWxhciBsb2dpYyBpbiBpbml0c2NhbgorCSAqCisJICogRGlzYWJsZSBzeW5j IHNjYW5zIGlmIHRoZSBjaHVuayBmYWN0b3IgaXMgc2V0ICh2YWxpZCBibG9jayBudW1iZXIp LgorCSAqLwogCWJwc2Nhbi0+YmFzZS5waHNfc3luY3NjYW4gPSBzeW5jaHJvbml6ZV9zZXFz Y2FucyAmJgogCQkhUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkgJiYKLQkJYnBzY2Fu LT5waHNfbmJsb2NrcyA+IE5CdWZmZXJzIC8gNDsKKwkJKGJwc2Nhbi0+cGhzX25ibG9ja3Mg PiBOQnVmZmVycyAvIDQpICYmCisJCSFCbG9ja051bWJlcklzVmFsaWQoYnBzY2FuLT5waHNf Y2h1bmtfZmFjdG9yKTsKIAlTcGluTG9ja0luaXQoJmJwc2Nhbi0+cGhzX211dGV4KTsKIAli cHNjYW4tPnBoc19zdGFydGJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCXBnX2F0b21p Y19pbml0X3U2NCgmYnBzY2FuLT5waHNfbmFsbG9jYXRlZCwgMCk7CkBAIC00NTksNiArNDY0 LDI1IEBAIHRhYmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9zdGFydGJsb2NrX2luaXQoUmVsYXRp b24gcmVsLAogCXBic2NhbndvcmstPnBoc3dfY2h1bmtfc2l6ZSA9IE1pbihwYnNjYW53b3Jr LT5waHN3X2NodW5rX3NpemUsCiAJCQkJCQkJCQkgIFBBUkFMTEVMX1NFUVNDQU5fTUFYX0NI VU5LX1NJWkUpOwogCisJLyoKKwkgKiBJZiB0aGUgY2h1bmsgc2l6ZSBmYWN0b3IgaXMgc2V0 LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY2h1bmsgc2l6ZSBpcworCSAqIGEgbXVsdGlw bGUgb2YgdGhhdCB2YWx1ZS4gV2Ugcm91bmQgdGhlIGNodW5rIHNpemUgdG8gdGhlIG5lYXJl c3QgY2h1bmsKKwkgKiBmYWN0b3IgbXVsdGlwbGUsIGF0IGxlYXN0IG9uZSBjaHVua19mYWN0 b3IuCisJICoKKwkgKiBYWFggTm90ZSB0aGlzIG1heSBvdmVycmlkZSBQQVJBTExFTF9TRVFT Q0FOX01BWF9DSFVOS19TSVpFLCBpbiBjYXNlIHRoZQorCSAqIGNodW5rIGZhY3RvciAoZS5n LiBCUklOIHBhZ2VzX3Blcl9yYW5nZSkgaXMgbGFyZ2VyLgorCSAqLworCWlmIChwYnNjYW4t PnBoc19jaHVua19mYWN0b3IgIT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCXsKKwkJLyogbmVh cmVzdCAoc21hbGxlcikgbXVsdGlwbGUgb2YgY2h1bmtfZmFjdG9yICovCisJCXBic2Nhbndv cmstPnBoc3dfY2h1bmtfc2l6ZQorCQkJPSBwYnNjYW4tPnBoc19jaHVua19mYWN0b3IgKiAo cGJzY2Fud29yay0+cGhzd19jaHVua19zaXplIC8gcGJzY2FuLT5waHNfY2h1bmtfZmFjdG9y KTsKKworCQkvKiBidXQgYXQgbGVhc3Qgb25lIGNodW5rX2ZhY3RvciAqLworCQlwYnNjYW53 b3JrLT5waHN3X2NodW5rX3NpemUgPSBNYXgocGJzY2Fud29yay0+cGhzd19jaHVua19zaXpl LAorCQkJCQkJCQkJCSAgcGJzY2FuLT5waHNfY2h1bmtfZmFjdG9yKTsKKwl9CisKIHJldHJ5 OgogCS8qIEdyYWIgdGhlIHNwaW5sb2NrLiAqLwogCVNwaW5Mb2NrQWNxdWlyZSgmcGJzY2Fu LT5waHNfbXV0ZXgpOwpAQCAtNTc1LDYgKzU5OSwyMSBAQCB0YWJsZV9ibG9ja19wYXJhbGxl bHNjYW5fbmV4dHBhZ2UoUmVsYXRpb24gcmVsLAogCQkJKHBic2NhbndvcmstPnBoc3dfY2h1 bmtfc2l6ZSAqIFBBUkFMTEVMX1NFUVNDQU5fUkFNUERPV05fQ0hVTktTKSkKIAkJCXBic2Nh bndvcmstPnBoc3dfY2h1bmtfc2l6ZSA+Pj0gMTsKIAorCQkvKgorCQkgKiBXZSBuZWVkIHRv IG1ha2Ugc3VyZSB0aGUgbmV3IGNodW5rX3NpemUgaXMgc3RpbGwgYSBzdWl0YWJsZSBtdWx0 aXBsZQorCQkgKiBvZiBjaHVua19mYWN0b3IuCisJCSAqLworCQlpZiAocGJzY2FuLT5waHNf Y2h1bmtfZmFjdG9yICE9IEludmFsaWRCbG9ja051bWJlcikKKwkJeworCQkJLyogbmVhcmVz dCAoc21hbGxlcikgbXVsdGlwbGUgb2YgY2h1bmtfZmFjdG9yICovCisJCQlwYnNjYW53b3Jr LT5waHN3X2NodW5rX3NpemUKKwkJCQk9IHBic2Nhbi0+cGhzX2NodW5rX2ZhY3RvciAqIChw YnNjYW53b3JrLT5waHN3X2NodW5rX3NpemUgLyBwYnNjYW4tPnBoc19jaHVua19mYWN0b3Ip OworCisJCQkvKiBidXQgYXQgbGVhc3Qgb25lIGNodW5rX2ZhY3RvciAqLworCQkJcGJzY2Fu d29yay0+cGhzd19jaHVua19zaXplID0gTWF4KHBic2NhbndvcmstPnBoc3dfY2h1bmtfc2l6 ZSwKKwkJCQkJCQkJCQkJICBwYnNjYW4tPnBoc19jaHVua19mYWN0b3IpOworCQl9CisKIAkJ bmFsbG9jYXRlZCA9IHBic2NhbndvcmstPnBoc3dfbmFsbG9jYXRlZCA9CiAJCQlwZ19hdG9t aWNfZmV0Y2hfYWRkX3U2NCgmcGJzY2FuLT5waHNfbmFsbG9jYXRlZCwKIAkJCQkJCQkJCXBi c2NhbndvcmstPnBoc3dfY2h1bmtfc2l6ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v cGFyYWxsZWwuYwppbmRleCAxOTRhMTIwN2JlNi4uZDc4MzE0MDYyZTAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5j bHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9icmluLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2lu Y2x1ZGUgImFjY2Vzcy9zZXNzaW9uLmgiCkBAIC0xNDUsNiArMTQ2LDkgQEAgc3RhdGljIGNv bnN0IHN0cnVjdAogCXsKIAkJIl9idF9wYXJhbGxlbF9idWlsZF9tYWluIiwgX2J0X3BhcmFs bGVsX2J1aWxkX21haW4KIAl9LAorCXsKKwkJIl9icmluX3BhcmFsbGVsX2J1aWxkX21haW4i LCBfYnJpbl9wYXJhbGxlbF9idWlsZF9tYWluCisJfSwKIAl7CiAJCSJwYXJhbGxlbF92YWN1 dW1fbWFpbiIsIHBhcmFsbGVsX3ZhY3V1bV9tYWluCiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmlu ZGV4IDE0M2ZhZTAxZWJkLi4zN2U0MzA1ZDUwYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAt Mjk4Miw3ICsyOTgyLDggQEAgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAog CSAqIE5vdGUgdGhhdCBwbGFubmVyIGNvbnNpZGVycyBwYXJhbGxlbCBzYWZldHkgZm9yIHVz LgogCSAqLwogCWlmIChwYXJhbGxlbCAmJiBJc05vcm1hbFByb2Nlc3NpbmdNb2RlKCkgJiYK LQkJaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxhbSA9PSBCVFJFRV9BTV9PSUQpCisJCShp bmRleFJlbGF0aW9uLT5yZF9yZWwtPnJlbGFtID09IEJUUkVFX0FNX09JRCB8fAorCQkgaW5k ZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxhbSA9PSBCUklOX0FNX09JRCkpCiAJCWluZGV4SW5m by0+aWlfUGFyYWxsZWxXb3JrZXJzID0KIAkJCXBsYW5fY3JlYXRlX2luZGV4X3dvcmtlcnMo UmVsYXRpb25HZXRSZWxpZChoZWFwUmVsYXRpb24pLAogCQkJCQkJCQkJICBSZWxhdGlvbkdl dFJlbGlkKGluZGV4UmVsYXRpb24pKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVTZXFzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5j CmluZGV4IDQ5YTU5MzNhZmY2Li41MjlhN2VkMzI4NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlU2Vxc2Nhbi5jCkBAIC0yNjIsNyArMjYyLDggQEAgRXhlY1NlcVNjYW5Jbml0aWFsaXpl RFNNKFNlcVNjYW5TdGF0ZSAqbm9kZSwKIAlwc2NhbiA9IHNobV90b2NfYWxsb2NhdGUocGN4 dC0+dG9jLCBub2RlLT5wc2Nhbl9sZW4pOwogCXRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFs aXplKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICBwc2NhbiwKLQkJ CQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90KTsKKwkJCQkJCQkJICBlc3RhdGUtPmVzX3Nu YXBzaG90LAorCQkJCQkJCQkgIEludmFsaWRCbG9ja051bWJlcik7CiAJc2htX3RvY19pbnNl cnQocGN4dC0+dG9jLCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIHBzY2FuKTsK IAlub2RlLT5zcy5zc19jdXJyZW50U2NhbkRlc2MgPQogCQl0YWJsZV9iZWdpbnNjYW5fcGFy YWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLCBwc2Nhbik7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvc29ydC90dXBsZXNvcnQuYwppbmRleCBhYjYzNTNiZGNkMS4uNGM2YjM5NmE4YTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYwpAQCAtMTMyOCw2ICsxMzI4LDcgQEAg dHVwbGVzb3J0X3B1dHR1cGxlX2NvbW1vbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIFNvcnRU dXBsZSAqdHVwbGUsIGJvb2wgdXNlQWJicmUKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CisJ CQlBc3NlcnQoZmFsc2UpOwogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHVwbGVzb3J0IHN0 YXRlIik7CiAJCQlicmVhazsKIAl9CkBAIC0xNDYyLDYgKzE0NjMsNyBAQCB0dXBsZXNvcnRf cGVyZm9ybXNvcnQoVHVwbGVzb3J0c3RhdGUgKnN0YXRlKQogCQkJYnJlYWs7CiAKIAkJZGVm YXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0dXBs ZXNvcnQgc3RhdGUiKTsKIAkJCWJyZWFrOwogCX0KQEAgLTE3MTgsNiArMTcyMCw3IEBAIHR1 cGxlc29ydF9nZXR0dXBsZV9jb21tb24oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBib29sIGZv cndhcmQsCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxz ZSk7CiAJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0dXBsZXNvcnQgc3RhdGUiKTsKIAkJCXJl dHVybiBmYWxzZTsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIAl9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKaW5kZXggMmNkNTA4ZTUxMzAu LjM0M2VkNGJiYzU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxl c29ydHZhcmlhbnRzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnR2 YXJpYW50cy5jCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CisjaW5jbHVkZSAiYWNjZXNzL2JyaW5fdHVwbGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvaGFz aC5oIgogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nl c3MvbmJ0cmVlLmgiCkBAIC00Myw2ICs0NCw4IEBAIHN0YXRpYyB2b2lkIHJlbW92ZWFiYnJl dl9jbHVzdGVyKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwcywKIAkJ CQkJCQkJIGludCBjb3VudCk7CiBzdGF0aWMgdm9pZCByZW1vdmVhYmJyZXZfaW5kZXgoVHVw bGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXBzLAogCQkJCQkJCSAgIGludCBj b3VudCk7CitzdGF0aWMgdm9pZCByZW1vdmVhYmJyZXZfaW5kZXhfYnJpbihUdXBsZXNvcnRz dGF0ZSAqc3RhdGUsIFNvcnRUdXBsZSAqc3R1cHMsCisJCQkJCQkJCQlpbnQgY291bnQpOwog c3RhdGljIHZvaWQgcmVtb3ZlYWJicmV2X2RhdHVtKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwg U29ydFR1cGxlICpzdHVwcywKIAkJCQkJCQkgICBpbnQgY291bnQpOwogc3RhdGljIGludAlj b21wYXJldHVwX2hlYXAoY29uc3QgU29ydFR1cGxlICphLCBjb25zdCBTb3J0VHVwbGUgKmIs CkBAIC02OSwxMCArNzIsMTYgQEAgc3RhdGljIGludAljb21wYXJldHVwX2luZGV4X2hhc2go Y29uc3QgU29ydFR1cGxlICphLCBjb25zdCBTb3J0VHVwbGUgKmIsCiAJCQkJCQkJCSAgVHVw bGVzb3J0c3RhdGUgKnN0YXRlKTsKIHN0YXRpYyBpbnQJY29tcGFyZXR1cF9pbmRleF9oYXNo X3RpZWJyZWFrKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3QgU29ydFR1cGxlICpiLAogCQkJ CQkJCQkJCSAgIFR1cGxlc29ydHN0YXRlICpzdGF0ZSk7CitzdGF0aWMgaW50CWNvbXBhcmV0 dXBfaW5kZXhfYnJpbihjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRUdXBsZSAqYiwK KwkJCQkJCQkJICBUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgd3JpdGV0 dXBfaW5kZXgoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBMb2dpY2FsVGFwZSAqdGFwZSwKIAkJ CQkJCSAgIFNvcnRUdXBsZSAqc3R1cCk7CiBzdGF0aWMgdm9pZCByZWFkdHVwX2luZGV4KFR1 cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxlICpzdHVwLAogCQkJCQkJICBMb2dpY2Fs VGFwZSAqdGFwZSwgdW5zaWduZWQgaW50IGxlbik7CitzdGF0aWMgdm9pZCB3cml0ZXR1cF9p bmRleF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgTG9naWNhbFRhcGUgKnRhcGUsCisJ CQkJCQkJCVNvcnRUdXBsZSAqc3R1cCk7CitzdGF0aWMgdm9pZCByZWFkdHVwX2luZGV4X2Jy aW4oVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTb3J0VHVwbGUgKnN0dXAsCisJCQkJCQkJICAg TG9naWNhbFRhcGUgKnRhcGUsIHVuc2lnbmVkIGludCBsZW4pOwogc3RhdGljIGludAljb21w YXJldHVwX2RhdHVtKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3QgU29ydFR1cGxlICpiLAog CQkJCQkJCSBUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpOwogc3RhdGljIGludAljb21wYXJldHVw X2RhdHVtX3RpZWJyZWFrKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3QgU29ydFR1cGxlICpi LApAQCAtMTI4LDYgKzEzNywxNiBAQCB0eXBlZGVmIHN0cnVjdAogCXVpbnQzMgkJbWF4X2J1 Y2tldHM7CiB9IFR1cGxlc29ydEluZGV4SGFzaEFyZzsKIAorLyoKKyAqIERhdGEgc3RydXR1 cmUgcG9pbnRlZCBieSAiVHVwbGVzb3J0UHVibGljLmFyZyIgZm9yIHRoZSBpbmRleF9icmlu IHN1YmNhc2UuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJVHVwbGVzb3J0SW5kZXhBcmcg aW5kZXg7CisKKwkvKiBYWFggZG8gd2UgbmVlZCBzb21ldGhpbmcgaGVyZT8gKi8KK30gVHVw bGVzb3J0SW5kZXhCcmluQXJnOworCiAvKgogICogRGF0YSBzdHJ1dHVyZSBwb2ludGVkIGJ5 ICJUdXBsZXNvcnRQdWJsaWMuYXJnIiBmb3IgdGhlIERhdHVtIGNhc2UuCiAgKiBTZXQgYnkg dHVwbGVzb3J0X2JlZ2luX2RhdHVtIGFuZCB1c2VkIG9ubHkgYnkgdGhlIERhdHVtVHVwbGUg cm91dGluZXMuCkBAIC0xNDAsNiArMTU5LDIyIEBAIHR5cGVkZWYgc3RydWN0CiAJaW50CQkJ ZGF0dW1UeXBlTGVuOwogfSBUdXBsZXNvcnREYXR1bUFyZzsKIAorLyoKKyAqIENvbXB1dGlu ZyBCcmluVHVwbGUgc2l6ZSB3aXRoIG9ubHkgdGhlIHR1cGxlIGlzIGRpZmZpY3VsdCwgc28g d2Ugd2FudCB0byB0cmFjaworICogdGhlIGxlbmd0aCBmb3IgciByZWZlcmVuY2VkIGJ5IFNv cnRUdXBsZS4gVGhhdCdzIHdoYXQgQnJpblNvcnRUdXBsZSBpcyBtZWFudAorICogdG8gZG8g LSBpdCdzIGVzc2VudGlhbGx5IGEgQnJpblR1cGxlIHByZWZpeGVkIGJ5IGxlbmd0aC4gV2Ug b25seSB3cml0ZSB0aGUKKyAqIEJyaW5UdXBsZSB0byB0aGUgbG9ndGFwZXMsIHRob3VnaC4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgQnJpblNvcnRUdXBsZQoreworCVNpemUJCXR1cGxlbjsK KwlCcmluVHVwbGUJdHVwbGU7Cit9IEJyaW5Tb3J0VHVwbGU7CisKKy8qIFNpemUgb2YgdGhl IEJyaW5Tb3J0VHVwbGUsIGdpdmVuIGxlbmd0aCBvZiB0aGUgQnJpblR1cGxlLiAqLworI2Rl ZmluZSBCUklOU09SVFRVUExFX1NJWkUobGVuKQkJKG9mZnNldG9mKEJyaW5Tb3J0VHVwbGUs IHR1cGxlKSArIChsZW4pKQorCisKIFR1cGxlc29ydHN0YXRlICoKIHR1cGxlc29ydF9iZWdp bl9oZWFwKFR1cGxlRGVzYyB0dXBEZXNjLAogCQkJCQkgaW50IG5rZXlzLCBBdHRyTnVtYmVy ICphdHROdW1zLApAQCAtNTI3LDYgKzU2Miw0NyBAQCB0dXBsZXNvcnRfYmVnaW5faW5kZXhf Z2lzdChSZWxhdGlvbiBoZWFwUmVsLAogCXJldHVybiBzdGF0ZTsKIH0KIAorVHVwbGVzb3J0 c3RhdGUgKgordHVwbGVzb3J0X2JlZ2luX2luZGV4X2JyaW4oUmVsYXRpb24gaGVhcFJlbCwK KwkJCQkJCSAgIFJlbGF0aW9uIGluZGV4UmVsLAorCQkJCQkJICAgaW50IHdvcmtNZW0sCisJ CQkJCQkgICBTb3J0Q29vcmRpbmF0ZSBjb29yZGluYXRlLAorCQkJCQkJICAgaW50IHNvcnRv cHQpCit7CisJVHVwbGVzb3J0c3RhdGUgKnN0YXRlID0gdHVwbGVzb3J0X2JlZ2luX2NvbW1v bih3b3JrTWVtLCBjb29yZGluYXRlLAorCQkJCQkJCQkJCQkJICAgc29ydG9wdCk7CisJVHVw bGVzb3J0UHVibGljICpiYXNlID0gVHVwbGVzb3J0c3RhdGVHZXRQdWJsaWMoc3RhdGUpOwor CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlUdXBsZXNvcnRJbmRleEJyaW5BcmcgKmFy ZzsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oYmFzZS0+bWFpbmNv bnRleHQpOworCWFyZyA9IChUdXBsZXNvcnRJbmRleEJyaW5BcmcgKikgcGFsbG9jKHNpemVv ZihUdXBsZXNvcnRJbmRleEJyaW5BcmcpKTsKKworI2lmZGVmIFRSQUNFX1NPUlQKKwlpZiAo dHJhY2Vfc29ydCkKKwkJZWxvZyhMT0csCisJCQkgImJlZ2luIGluZGV4IHNvcnQ6IHdvcmtN ZW0gPSAlZCwgcmFuZG9tQWNjZXNzID0gJWMiLAorCQkJIHdvcmtNZW0sCisJCQkgc29ydG9w dCAmIFRVUExFU09SVF9SQU5ET01BQ0NFU1MgPyAndCcgOiAnZicpOworI2VuZGlmCisKKwli YXNlLT5uS2V5cyA9IDE7CQkJLyogT25seSBvbmUgc29ydCBjb2x1bW4sIHRoZSBibG9jayBu dW1iZXIgKi8KKworCWJhc2UtPnJlbW92ZWFiYnJldiA9IHJlbW92ZWFiYnJldl9pbmRleF9i cmluOworCWJhc2UtPmNvbXBhcmV0dXAgPSBjb21wYXJldHVwX2luZGV4X2JyaW47CisJYmFz ZS0+d3JpdGV0dXAgPSB3cml0ZXR1cF9pbmRleF9icmluOworCWJhc2UtPnJlYWR0dXAgPSBy ZWFkdHVwX2luZGV4X2JyaW47CisJYmFzZS0+aGF2ZURhdHVtMSA9IHRydWU7CisJYmFzZS0+ YXJnID0gYXJnOworCisJYXJnLT5pbmRleC5oZWFwUmVsID0gaGVhcFJlbDsKKwlhcmctPmlu ZGV4LmluZGV4UmVsID0gaW5kZXhSZWw7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y29udGV4dCk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKIFR1cGxlc29ydHN0YXRlICoKIHR1 cGxlc29ydF9iZWdpbl9kYXR1bShPaWQgZGF0dW1UeXBlLCBPaWQgc29ydE9wZXJhdG9yLCBP aWQgc29ydENvbGxhdGlvbiwKIAkJCQkJICBib29sIG51bGxzRmlyc3RGbGFnLCBpbnQgd29y a01lbSwKQEAgLTcwNyw2ICs3ODMsMzUgQEAgdHVwbGVzb3J0X3B1dGluZGV4dHVwbGV2YWx1 ZXMoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBSZWxhdGlvbiByZWwsCiAJCQkJCQkJICAhc3R1 cC5pc251bGwxKTsKIH0KIAorLyoKKyAqIENvbGxlY3Qgb25lIEJSSU4gdHVwbGUgd2hpbGUg Y29sbGVjdGluZyBpbnB1dCBkYXRhIGZvciBzb3J0LgorICovCit2b2lkCit0dXBsZXNvcnRf cHV0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgQnJpblR1cGxlICp0dXBsZSwg U2l6ZSBzaXplKQoreworCVNvcnRUdXBsZQlzdHVwOworCUJyaW5Tb3J0VHVwbGUgKmJzdHVw OworCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9IFR1cGxlc29ydHN0YXRlR2V0UHVibGljKHN0 YXRlKTsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oYmFzZS0+dHVwbGVjb250ZXh0KTsKKworCS8qIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUg d2hvbGUgQlJJTiBzb3J0IHR1cGxlICovCisJYnN0dXAgPSBwYWxsb2MoQlJJTlNPUlRUVVBM RV9TSVpFKHNpemUpKTsKKwlzdHVwLnR1cGxlID0gYnN0dXA7CisKKwlic3R1cC0+dHVwbGVu ID0gc2l6ZTsKKwltZW1jcHkoJmJzdHVwLT50dXBsZSwgdHVwbGUsIHNpemUpOworCisJc3R1 cC5kYXR1bTEgPSB0dXBsZS0+YnRfYmxrbm87CisJc3R1cC5pc251bGwxID0gZmFsc2U7CisK Kwl0dXBsZXNvcnRfcHV0dHVwbGVfY29tbW9uKHN0YXRlLCAmc3R1cCwKKwkJCQkJCQkgIGJh c2UtPnNvcnRLZXlzICYmCisJCQkJCQkJICBiYXNlLT5zb3J0S2V5cy0+YWJicmV2X2NvbnZl cnRlciAmJgorCQkJCQkJCSAgIXN0dXAuaXNudWxsMSk7CisKKwlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY29udGV4dCk7Cit9CisKIC8qCiAgKiBBY2NlcHQgb25lIERhdHVtIHdoaWxl IGNvbGxlY3RpbmcgaW5wdXQgZGF0YSBmb3Igc29ydC4KICAqCkBAIC04NTAsNiArOTU1LDM1 IEBAIHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9v bCBmb3J3YXJkKQogCXJldHVybiAoSW5kZXhUdXBsZSkgc3R1cC50dXBsZTsKIH0KIAorLyoK KyAqIEZldGNoIHRoZSBuZXh0IEJSSU4gdHVwbGUgaW4gZWl0aGVyIGZvcndhcmQgb3IgYmFj ayBkaXJlY3Rpb24uCisgKiBSZXR1cm5zIE5VTEwgaWYgbm8gbW9yZSB0dXBsZXMuICBSZXR1 cm5lZCB0dXBsZSBiZWxvbmdzIHRvIHR1cGxlc29ydCBtZW1vcnkKKyAqIGNvbnRleHQsIGFu ZCBtdXN0IG5vdCBiZSBmcmVlZCBieSBjYWxsZXIuICBDYWxsZXIgbWF5IG5vdCByZWx5IG9u IHR1cGxlCisgKiByZW1haW5pbmcgdmFsaWQgYWZ0ZXIgYW55IGZ1cnRoZXIgbWFuaXB1bGF0 aW9uIG9mIHR1cGxlc29ydC4KKyAqLworQnJpblR1cGxlICoKK3R1cGxlc29ydF9nZXRicmlu dHVwbGUoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTaXplICpsZW4sIGJvb2wgZm9yd2FyZCkK K3sKKwlUdXBsZXNvcnRQdWJsaWMgKmJhc2UgPSBUdXBsZXNvcnRzdGF0ZUdldFB1YmxpYyhz dGF0ZSk7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGJhc2UtPnNvcnRjb250ZXh0KTsKKwlTb3J0VHVwbGUJCXN0dXA7CisJQnJpblNvcnRU dXBsZSAgKmJ0dXA7CisKKwlpZiAoIXR1cGxlc29ydF9nZXR0dXBsZV9jb21tb24oc3RhdGUs IGZvcndhcmQsICZzdHVwKSkKKwkJc3R1cC50dXBsZSA9IE5VTEw7CisKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlpZiAoIXN0dXAudHVwbGUpCisJCXJldHVy biBOVUxMOworCisJYnR1cCA9IChCcmluU29ydFR1cGxlICopIHN0dXAudHVwbGU7CisKKwkq bGVuID0gYnR1cC0+dHVwbGVuOworCisJcmV0dXJuICZidHVwLT50dXBsZTsKK30KKwogLyoK ICAqIEZldGNoIHRoZSBuZXh0IERhdHVtIGluIGVpdGhlciBmb3J3YXJkIG9yIGJhY2sgZGly ZWN0aW9uLgogICogUmV0dXJucyBmYWxzZSBpZiBubyBtb3JlIGRhdHVtcy4KQEAgLTE1NjQs NiArMTY5OCw4MyBAQCByZWFkdHVwX2luZGV4KFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29y dFR1cGxlICpzdHVwLAogCQkJCQkJCQkgJnN0dXAtPmlzbnVsbDEpOwogfQogCisvKgorICog Um91dGluZXMgc3BlY2lhbGl6ZWQgZm9yIEJyaW5UdXBsZSBjYXNlCisgKi8KKworc3RhdGlj IHZvaWQKK3JlbW92ZWFiYnJldl9pbmRleF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwg U29ydFR1cGxlICpzdHVwcywgaW50IGNvdW50KQoreworCWludAkJCWk7CisKKwlmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykKKwl7CisJCUJyaW5Tb3J0VHVwbGUgICAqdHVwbGU7CisK KwkJdHVwbGUgPSBzdHVwc1tpXS50dXBsZTsKKwkJc3R1cHNbaV0uZGF0dW0xID0gdHVwbGUt PnR1cGxlLmJ0X2Jsa25vOworCX0KK30KKworc3RhdGljIGludAorY29tcGFyZXR1cF9pbmRl eF9icmluKGNvbnN0IFNvcnRUdXBsZSAqYSwgY29uc3QgU29ydFR1cGxlICpiLAorCQkJCQkg IFR1cGxlc29ydHN0YXRlICpzdGF0ZSkKK3sKKwlCcmluVHVwbGUgICp0dXBsZTE7CisJQnJp blR1cGxlICAqdHVwbGUyOworCisJdHVwbGUxID0gJigoQnJpblNvcnRUdXBsZSAqKSBhKS0+ dHVwbGU7CisJdHVwbGUyID0gJigoQnJpblNvcnRUdXBsZSAqKSBiKS0+dHVwbGU7CisKKwlp ZiAodHVwbGUxLT5idF9ibGtubyA+IHR1cGxlMi0+YnRfYmxrbm8pCisJCXJldHVybiAxOwor CWVsc2UgaWYgKHR1cGxlMS0+YnRfYmxrbm8gPCB0dXBsZTItPmJ0X2Jsa25vKQorCQlyZXR1 cm4gLTE7CisKKwkvKiBzaWxlbmNlIGNvbXBpbGVycyAqLworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZAord3JpdGV0dXBfaW5kZXhfYnJpbihUdXBsZXNvcnRzdGF0ZSAqc3RhdGUs IExvZ2ljYWxUYXBlICp0YXBlLCBTb3J0VHVwbGUgKnN0dXApCit7CisJVHVwbGVzb3J0UHVi bGljICpiYXNlID0gVHVwbGVzb3J0c3RhdGVHZXRQdWJsaWMoc3RhdGUpOworCUJyaW5Tb3J0 VHVwbGUgICp0dXBsZSA9IChCcmluU29ydFR1cGxlICopIHN0dXAtPnR1cGxlOworCXVuc2ln bmVkIGludAl0dXBsZW4gPSB0dXBsZS0+dHVwbGVuOworCisJdHVwbGVuID0gdHVwbGVuICsg c2l6ZW9mKHR1cGxlbik7CisJTG9naWNhbFRhcGVXcml0ZSh0YXBlLCAmdHVwbGVuLCBzaXpl b2YodHVwbGVuKSk7CisJTG9naWNhbFRhcGVXcml0ZSh0YXBlLCAmdHVwbGUtPnR1cGxlLCB0 dXBsZS0+dHVwbGVuKTsKKwlpZiAoYmFzZS0+c29ydG9wdCAmIFRVUExFU09SVF9SQU5ET01B Q0NFU1MpIC8qIG5lZWQgdHJhaWxpbmcgbGVuZ3RoIHdvcmQ/ICovCisJCUxvZ2ljYWxUYXBl V3JpdGUodGFwZSwgJnR1cGxlbiwgc2l6ZW9mKHR1cGxlbikpOworfQorCitzdGF0aWMgdm9p ZAorcmVhZHR1cF9pbmRleF9icmluKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgU29ydFR1cGxl ICpzdHVwLAorCQkJCSAgIExvZ2ljYWxUYXBlICp0YXBlLCB1bnNpZ25lZCBpbnQgbGVuKQor eworCVR1cGxlc29ydFB1YmxpYyAqYmFzZSA9IFR1cGxlc29ydHN0YXRlR2V0UHVibGljKHN0 YXRlKTsKKwl1bnNpZ25lZCBpbnQgdHVwbGVuID0gbGVuIC0gc2l6ZW9mKHVuc2lnbmVkIGlu dCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgQlJJTiBzb3J0IHR1cGxl LCB3aGljaCBpcyBCcmluVHVwbGUgd2l0aCBhbgorCSAqIGV4dHJhIGxlbmd0aCBmaWVsZC4K KwkgKi8KKwlCcmluU29ydFR1cGxlICp0dXBsZQorCQk9IChCcmluU29ydFR1cGxlICopIHR1 cGxlc29ydF9yZWFkdHVwX2FsbG9jKHN0YXRlLAorCQkJCQkJCQkJCQkJCUJSSU5TT1JUVFVQ TEVfU0laRSh0dXBsZW4pKTsKKworCXR1cGxlLT50dXBsZW4gPSB0dXBsZW47CisKKwlMb2dp Y2FsVGFwZVJlYWRFeGFjdCh0YXBlLCAmdHVwbGUtPnR1cGxlLCB0dXBsZW4pOworCWlmIChi YXNlLT5zb3J0b3B0ICYgVFVQTEVTT1JUX1JBTkRPTUFDQ0VTUykgLyogbmVlZCB0cmFpbGlu ZyBsZW5ndGggd29yZD8gKi8KKwkJTG9naWNhbFRhcGVSZWFkRXhhY3QodGFwZSwgJnR1cGxl biwgc2l6ZW9mKHR1cGxlbikpOworCXN0dXAtPnR1cGxlID0gKHZvaWQgKikgdHVwbGU7CisK KwkvKiBzZXQgdXAgZmlyc3QtY29sdW1uIGtleSB2YWx1ZSwgd2hpY2ggaXMgYmxvY2sgbnVt YmVyICovCisJc3R1cC0+ZGF0dW0xID0gdHVwbGUtPnR1cGxlLmJ0X2Jsa25vOworfQorCiAv KgogICogUm91dGluZXMgc3BlY2lhbGl6ZWQgZm9yIERhdHVtVHVwbGUgY2FzZQogICovCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2JyaW4uaAppbmRleCBlZDY2ZjFiM2Q1MS4uMzQ1MWVjYjIxMWYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9icmluLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2Jy aW4uaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBCUklOX0gKIAogI2luY2x1ZGUgIm5v ZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAKIApAQCAtNTIsNCArNTMsNiBAQCB0eXBlZGVmIHN0 cnVjdCBCcmluU3RhdHNEYXRhCiAKIGV4dGVybiB2b2lkIGJyaW5HZXRTdGF0cyhSZWxhdGlv biBpbmRleCwgQnJpblN0YXRzRGF0YSAqc3RhdHMpOwogCitleHRlcm4gdm9pZCBfYnJpbl9w YXJhbGxlbF9idWlsZF9tYWluKGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7CisK ICNlbmRpZgkJCQkJCQkvKiBCUklOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGQw MzM2MGVhYzA0Li43MmEyMGQ4ODJmNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC03OSw2 ICs3OSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5EZXNjRGF0 YQogCUJsb2NrTnVtYmVyIHBoc19uYmxvY2tzOwkvKiAjIGJsb2NrcyBpbiByZWxhdGlvbiBh dCBzdGFydCBvZiBzY2FuICovCiAJc2xvY2tfdAkJcGhzX211dGV4OwkJLyogbXV0dWFsIGV4 Y2x1c2lvbiBmb3Igc2V0dGluZyBzdGFydGJsb2NrICovCiAJQmxvY2tOdW1iZXIgcGhzX3N0 YXJ0YmxvY2s7IC8qIHN0YXJ0aW5nIGJsb2NrIG51bWJlciAqLworCUJsb2NrTnVtYmVyIHBo c19jaHVua19mYWN0b3I7IC8qIGNodW5rcyBuZWVkIHRvIGJlIGEgbXVsdGlwbGUgb2YgdGhp cyAqLwogCXBnX2F0b21pY191aW50NjQgcGhzX25hbGxvY2F0ZWQ7CS8qIG51bWJlciBvZiBi bG9ja3MgYWxsb2NhdGVkIHRvCiAJCQkJCQkJCQkJICogd29ya2VycyBzbyBmYXIuICovCiB9 CQkJUGFyYWxsZWxCbG9ja1RhYmxlU2NhbkRlc2NEYXRhOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK aW5kZXggZGJiNzA5YjU2Y2UuLmQ5NGU0ZDMyYWExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgK QEAgLTM5MCw3ICszOTAsOCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAq IHJlbGF0aW9uLgogCSAqLwogCVNpemUJCSgqcGFyYWxsZWxzY2FuX2luaXRpYWxpemUpIChS ZWxhdGlvbiByZWwsCi0JCQkJCQkJCQkJCVBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2Nhbik7 CisJCQkJCQkJCQkJCVBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbiwKKwkJCQkJCQkJCQkJ QmxvY2tOdW1iZXIgY2h1bmtfZmFjdG9yKTsKIAogCS8qCiAJICogUmVpbml0aWFsaXplIGBw c2NhbmAgZm9yIGEgbmV3IHNjYW4uIGByZWxgIHdpbGwgYmUgdGhlIHNhbWUgcmVsYXRpb24g YXMKQEAgLTExNDgsNyArMTE0OSw4IEBAIGV4dGVybiBTaXplIHRhYmxlX3BhcmFsbGVsc2Nh bl9lc3RpbWF0ZShSZWxhdGlvbiByZWwsIFNuYXBzaG90IHNuYXBzaG90KTsKICAqLwogZXh0 ZXJuIHZvaWQgdGFibGVfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gcmVsLAog CQkJCQkJCQkJCSAgUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuLAotCQkJCQkJCQkJCSAg U25hcHNob3Qgc25hcHNob3QpOworCQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCisJ CQkJCQkJCQkJICBCbG9ja051bWJlciBjaHVua19mYWN0b3IpOwogCiAvKgogICogQmVnaW4g YSBwYXJhbGxlbCBzY2FuLiBgcHNjYW5gIG5lZWRzIHRvIGhhdmUgYmVlbiBpbml0aWFsaXpl ZCB3aXRoCkBAIC0yMDY0LDcgKzIwNjYsOCBAQCBleHRlcm4gdm9pZCBzaW1wbGVfdGFibGVf dHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSXRlbVBvaW50ZXIgb3RpZCwKIAogZXh0ZXJu IFNpemUgdGFibGVfYmxvY2tfcGFyYWxsZWxzY2FuX2VzdGltYXRlKFJlbGF0aW9uIHJlbCk7 CiBleHRlcm4gU2l6ZSB0YWJsZV9ibG9ja19wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxh dGlvbiByZWwsCi0JCQkJCQkJCQkJCQlQYXJhbGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4pOwor CQkJCQkJCQkJCQkJUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuLAorCQkJCQkJCQkJCQkJ QmxvY2tOdW1iZXIgY2h1bmtfZmFjdG9yKTsKIGV4dGVybiB2b2lkIHRhYmxlX2Jsb2NrX3Bh cmFsbGVsc2Nhbl9yZWluaXRpYWxpemUoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCQkJICBQ YXJhbGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEJsb2NrTnVtYmVyIHRhYmxl X2Jsb2NrX3BhcmFsbGVsc2Nhbl9uZXh0cGFnZShSZWxhdGlvbiByZWwsCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS91dGlscy90dXBsZXNvcnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3R1 cGxlc29ydC5oCmluZGV4IDllZDJkZTc2Y2Q2Li4zNTdlYjM1MzExZCAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv dHVwbGVzb3J0LmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgVFVQTEVTT1JUX0gKICNk ZWZpbmUgVFVQTEVTT1JUX0gKIAorI2luY2x1ZGUgImFjY2Vzcy9icmluX3R1cGxlLmgiCiAj aW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5o IgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCkBAIC0yODIsNiArMjgzLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QKICAqIFRoZSAiaW5kZXhfaGFzaCIgQVBJIGlzIHNpbWlsYXIgdG8gaW5kZXhf YnRyZWUsIGJ1dCB0aGUgdHVwbGVzIGFyZQogICogYWN0dWFsbHkgc29ydGVkIGJ5IHRoZWly IGhhc2ggY29kZXMgbm90IHRoZSByYXcgZGF0YS4KICAqCisgKiBUaGUgImluZGV4X2JyaW4i IEFQSSBpcyBzaW1pbGFyIHRvIGluZGV4X2J0cmVlLCBidXQgdGhlIHR1cGxlcyBhcmUKKyAq IEJyaW5UdXBsZSBhbmQgYXJlIHNvcnRlZCBieSB0aGVpciBibG9jayBudW1iZXIgbm90IHRo ZSByYXcgZGF0YS4KKyAqCiAgKiBQYXJhbGxlbCBzb3J0IGNhbGxlcnMgYXJlIHJlcXVpcmVk IHRvIGNvb3JkaW5hdGUgbXVsdGlwbGUgdHVwbGVzb3J0IHN0YXRlcwogICogaW4gYSBsZWFk ZXIgcHJvY2VzcyBhbmQgb25lIG9yIG1vcmUgd29ya2VyIHByb2Nlc3Nlcy4gIFRoZSBsZWFk ZXIgcHJvY2VzcwogICogbXVzdCBsYXVuY2ggd29ya2VycywgYW5kIGhhdmUgZWFjaCBwZXJm b3JtIGFuIGluZGVwZW5kZW50ICJwYXJ0aWFsIgpAQCAtNDI2LDYgKzQzMCwxMCBAQCBleHRl cm4gVHVwbGVzb3J0c3RhdGUgKnR1cGxlc29ydF9iZWdpbl9pbmRleF9naXN0KFJlbGF0aW9u IGhlYXBSZWwsCiAJCQkJCQkJCQkJCQkgIFJlbGF0aW9uIGluZGV4UmVsLAogCQkJCQkJCQkJ CQkJICBpbnQgd29ya01lbSwgU29ydENvb3JkaW5hdGUgY29vcmRpbmF0ZSwKIAkJCQkJCQkJ CQkJCSAgaW50IHNvcnRvcHQpOworZXh0ZXJuIFR1cGxlc29ydHN0YXRlICp0dXBsZXNvcnRf YmVnaW5faW5kZXhfYnJpbihSZWxhdGlvbiBoZWFwUmVsLAorCQkJCQkJCQkJCQkJICBSZWxh dGlvbiBpbmRleFJlbCwKKwkJCQkJCQkJCQkJCSAgaW50IHdvcmtNZW0sIFNvcnRDb29yZGlu YXRlIGNvb3JkaW5hdGUsCisJCQkJCQkJCQkJCQkgIGludCBzb3J0b3B0KTsKIGV4dGVybiBU dXBsZXNvcnRzdGF0ZSAqdHVwbGVzb3J0X2JlZ2luX2RhdHVtKE9pZCBkYXR1bVR5cGUsCiAJ CQkJCQkJCQkJCSBPaWQgc29ydE9wZXJhdG9yLCBPaWQgc29ydENvbGxhdGlvbiwKIAkJCQkJ CQkJCQkJIGJvb2wgbnVsbHNGaXJzdEZsYWcsCkBAIC00MzgsNiArNDQ2LDcgQEAgZXh0ZXJu IHZvaWQgdHVwbGVzb3J0X3B1dGhlYXB0dXBsZShUdXBsZXNvcnRzdGF0ZSAqc3RhdGUsIEhl YXBUdXBsZSB0dXApOwogZXh0ZXJuIHZvaWQgdHVwbGVzb3J0X3B1dGluZGV4dHVwbGV2YWx1 ZXMoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLAogCQkJCQkJCQkJCSAgUmVsYXRpb24gcmVsLCBJ dGVtUG9pbnRlciBzZWxmLAogCQkJCQkJCQkJCSAgY29uc3QgRGF0dW0gKnZhbHVlcywgY29u c3QgYm9vbCAqaXNudWxsKTsKK2V4dGVybiB2b2lkIHR1cGxlc29ydF9wdXRicmludHVwbGUo VHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBCcmluVHVwbGUgKnR1cCwgU2l6ZSBsZW4pOwogZXh0 ZXJuIHZvaWQgdHVwbGVzb3J0X3B1dGRhdHVtKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgRGF0 dW0gdmFsLAogCQkJCQkJCSAgIGJvb2wgaXNOdWxsKTsKIApAQCAtNDQ1LDYgKzQ1NCw4IEBA IGV4dGVybiBib29sIHR1cGxlc29ydF9nZXR0dXBsZXNsb3QoVHVwbGVzb3J0c3RhdGUgKnN0 YXRlLCBib29sIGZvcndhcmQsCiAJCQkJCQkJCSAgIGJvb2wgY29weSwgVHVwbGVUYWJsZVNs b3QgKnNsb3QsIERhdHVtICphYmJyZXYpOwogZXh0ZXJuIEhlYXBUdXBsZSB0dXBsZXNvcnRf Z2V0aGVhcHR1cGxlKFR1cGxlc29ydHN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkKTsKIGV4 dGVybiBJbmRleFR1cGxlIHR1cGxlc29ydF9nZXRpbmRleHR1cGxlKFR1cGxlc29ydHN0YXRl ICpzdGF0ZSwgYm9vbCBmb3J3YXJkKTsKK2V4dGVybiBCcmluVHVwbGUgKnR1cGxlc29ydF9n ZXRicmludHVwbGUoVHVwbGVzb3J0c3RhdGUgKnN0YXRlLCBTaXplICpsZW4sCisJCQkJCQkJ CQkJIGJvb2wgZm9yd2FyZCk7CiBleHRlcm4gYm9vbCB0dXBsZXNvcnRfZ2V0ZGF0dW0oVHVw bGVzb3J0c3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQsIGJvb2wgY29weSwKIAkJCQkJCQkg ICBEYXR1bSAqdmFsLCBib29sICppc051bGwsIERhdHVtICphYmJyZXYpOwogCi0tIAoyLjQx LjAKCg== --------------40P67fWYxoarhvG2X8oDL355 Content-Type: text/x-patch; charset=UTF-8; name="v3-0002-fix-review-comments.patch" Content-Disposition: attachment; filename="v3-0002-fix-review-comments.patch" Content-Transfer-Encoding: base64 RnJvbSBkY2IwMDU4NTQwZjQ2ZmE1ZjljYmIyMWUxY2ZmNjQwODc0NDE4NDAxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCA3IE5vdiAyMDIzIDE4OjE1OjIwICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2MyAyLzRdIGZpeCByZXZpZXcgY29tbWVudHMKCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgIHwgNDQgKysrKysrKysrLS0tLS0t LS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXNvcnQuYyAgICAgICAgIHwg IDMgLS0KIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYyB8IDEx ICsrKy0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKaW5kZXggYjdjZDI5YzU5NjguLmQ1NGQz OWE1MzVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0xNjIsNyArMTYyLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgQnJpbkJ1aWxkU3RhdGUKIHsKIAlSZWxhdGlvbglic19pcmVsOwog CWludAkJCWJzX251bXR1cGxlczsKLQlpbnQJCQlic19yZWx0dXBsZXM7CisJZG91YmxlCQli c19yZWx0dXBsZXM7CiAJQnVmZmVyCQlic19jdXJyZW50SW5zZXJ0QnVmOwogCUJsb2NrTnVt YmVyIGJzX3BhZ2VzUGVyUmFuZ2U7CiAJQmxvY2tOdW1iZXIgYnNfY3VyclJhbmdlU3RhcnQ7 CkBAIC0xNzIsMTMgKzE3MiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBCcmluQnVpbGRTdGF0ZQog CiAJLyoKIAkgKiBic19sZWFkZXIgaXMgb25seSBwcmVzZW50IHdoZW4gYSBwYXJhbGxlbCBp bmRleCBidWlsZCBpcyBwZXJmb3JtZWQsIGFuZAotCSAqIG9ubHkgaW4gdGhlIGxlYWRlciBw cm9jZXNzLiAoQWN0dWFsbHksIG9ubHkgdGhlIGxlYWRlciBoYXMgYQorCSAqIG9ubHkgaW4g dGhlIGxlYWRlciBwcm9jZXNzLiAoQWN0dWFsbHksIG9ubHkgdGhlIGxlYWRlciBwcm9jZXNz IGhhcyBhCiAJICogQnJpbkJ1aWxkU3RhdGUuKQogCSAqLwogCUJyaW5MZWFkZXIgKmJzX2xl YWRlcjsKIAlpbnQJCQlic193b3JrZXJfaWQ7CiAJQnJpblNwb29sICAqYnNfc3Bvb2w7Ci0J QnJpblNwb29sICAqYnNfc3Bvb2xfb3V0OwogfSBCcmluQnVpbGRTdGF0ZTsKIAogLyoKQEAg LTk2MSw3ICs5NjAsNyBAQCBicmluYnVpbGRDYWxsYmFjayhSZWxhdGlvbiBpbmRleCwKIC8q CiAgKiBBIHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrLCB1c2VkIGJ5IHBhcmFsbGVsIGluZGV4 IGJ1aWxkcy4gVGhlIG1haW4gZGlmZmVyZW5jZQogICogaXMgdGhhdCBpbnN0ZWFkIG9mIHdy aXRpbmcgdGhlIEJSSU4gdHVwbGVzIGludG8gdGhlIGluZGV4LCB3ZSB3cml0ZSB0aGVtIGlu dG8KLSAqIGEgc2hhcmVkIHR1cGxlc3RvcmUgZmlsZSwgYW5kIGxlYXZlIHRoZSBpbnNlcnRp b24gdXAgdG8gdGhlIGxlYWRlciAod2hpY2ggbWF5CisgKiBhIHNoYXJlZCB0dXBsZXN0b3Jl LCBhbmQgbGVhdmUgdGhlIGluc2VydGlvbiB1cCB0byB0aGUgbGVhZGVyICh3aGljaCBtYXkK ICAqIHJlb3JkZXIgdGhlbSBhIGJpdCBldGMuKS4gVGhlIGNhbGxiYWNrIGFsc28gZG9lcyBu b3QgZ2VuZXJhdGUgZW1wdHkgcmFuZ2VzLAogICogdGhvc2UgbWF5IGJlIGFkZGVkIGJ5IHRo ZSBsZWFkZXIgd2hlbiBtZXJnaW5nIHJlc3VsdHMgZnJvbSB3b3JrZXJzLgogICovCkBAIC05 ODEsMTAgKzk4MCwxMCBAQCBicmluYnVpbGRDYWxsYmFja1BhcmFsbGVsKFJlbGF0aW9uIGlu ZGV4LAogCS8qCiAJICogSWYgd2UncmUgaW4gYSBibG9jayB0aGF0IGJlbG9uZ3MgdG8gYSBm dXR1cmUgcmFuZ2UsIHN1bW1hcml6ZSB3aGF0CiAJICogd2UndmUgZ290IGFuZCBzdGFydCBh ZnJlc2guICBOb3RlIHRoZSBzY2FuIG1pZ2h0IGhhdmUgc2tpcHBlZCBtYW55Ci0JICogcGFn ZXMsIGlmIHRoZXkgd2VyZSBkZXZvaWQgb2YgbGl2ZSB0dXBsZXM7IG1ha2Ugc3VyZSB0byBp bnNlcnQgaW5kZXgKLQkgKiB0dXBsZXMgZm9yIHRob3NlIHRvby4KKwkgKiBwYWdlcywgaWYg dGhleSB3ZXJlIGRldm9pZCBvZiBsaXZlIHR1cGxlczsgd2UgZG8gbm90IGNyZWF0ZSBlbXB0 cnkKKwkgKiBCUklOIHJhbmdlcyBoZXJlIC0gdGhlIGxlYWRlciBpcyByZXNwb25zaWJsZSBm b3IgZmlsbGluZyB0aGVtIGluLgogCSAqLwotCXdoaWxlICh0aGlzYmxvY2sgPiBzdGF0ZS0+ YnNfY3VyclJhbmdlU3RhcnQgKyBzdGF0ZS0+YnNfcGFnZXNQZXJSYW5nZSAtIDEpCisJaWYg KHRoaXNibG9jayA+IHN0YXRlLT5ic19jdXJyUmFuZ2VTdGFydCArIHN0YXRlLT5ic19wYWdl c1BlclJhbmdlIC0gMSkKIAl7CiAKIAkJQlJJTl9lbG9nKChERUJVRzIsCkBAIC05OTYsMTkg Kzk5NSwxNSBAQCBicmluYnVpbGRDYWxsYmFja1BhcmFsbGVsKFJlbGF0aW9uIGluZGV4LAog CQlmb3JtX2FuZF9zcGlsbF90dXBsZShzdGF0ZSk7CiAKIAkJLyoKLQkJICogc2V0IHN0YXRl IHRvIGNvcnJlc3BvbmQgdG8gdGhlIG5leHQgcmFuZ2UKKwkJICogU2V0IHN0YXRlIHRvIGNv cnJlc3BvbmQgdG8gdGhlIG5leHQgcmFuZ2UgKGZvciB0aGlzIGJsb2NrKS4KIAkJICoKLQkJ ICogWFhYIFRoaXMgaGFzIHRoZSBpc3N1ZSB0aGF0IGl0IHNraXBzIHJhbmdlcyBzdW1tYXJp emVkIGJ5IG90aGVyCi0JCSAqIHdvcmtlcnMsIGJ1dCBpdCBhbHNvIHNraXBzIGVtcHR5IHJh bmdlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4KLQkJICogc3VtbWFyaXplZC4gV2UnZCBuZWVk IHRvIGVpdGhlciBtYWtlIHRoZSB3b3JrZXJzIGF3YXJlIHdoaWNoCi0JCSAqIGNodW5rIHRo ZXkgYXJlIGFjdHVhbGx5IHByb2Nlc3NpbmcgKHdoaWNoIGlzIGN1cnJlbnRseSBrbm93bgot CQkgKiBvbmx5IGluIHRoZSBQYXJhbGxlbEJsb2NrVGFibGVTY2FuIGJpdCkuIE9yIHdlIGNv dWxkIGlnbm9yZSBpdAotCQkgKiBoZXJlLCBhbmQgdGhlbiBkZWNpZGUgaXQgd2hpbGUgIm1l cmdpbmciIHJlc3VsdHMgZnJvbSB3b3JrZXJzCi0JCSAqIChpZiB0aGVyZSdzIG5vIGVudHJ5 IGZvciB0aGUgcmFuZ2UsIGl0IGhhZCB0byBiZSBlbXB0eSBzbyB3ZQotCQkgKiBqdXN0IGFk ZCBhbiBlbXB0eSBvbmUpLgorCQkgKiBUaGlzIHNraXBzIHJhbmdlcyB0aGF0IGFyZSBlaXRo ZXIgZW1wdHkgKGFuZCBzbyB3ZSBkb24ndCBnZXQgYW55CisJCSAqIHR1cGxlcyB0byBzdW1t YXJpemUpLCBvciBwcm9jZXNzZXMgYnkgb3RoZXIgd29ya2Vycy4gV2UgY2FuJ3QKKwkJICog ZGlmZmVyZW50aWF0ZSB0aG9zZSBjYXNlcyBoZXJlIGVhc2lseSwgc28gd2UgbGVhdmUgaXQg dXAgdG8gdGhlCisJCSAqIGxlYWRlciB0byBmaWxsIGVtcHR5IHJhbmdlcyB3aGVyZSBuZWVk ZWQuCiAJCSAqLwotCQl3aGlsZSAodGhpc2Jsb2NrID4gc3RhdGUtPmJzX2N1cnJSYW5nZVN0 YXJ0ICsgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UgLSAxKQotCQkJc3RhdGUtPmJzX2N1cnJS YW5nZVN0YXJ0ICs9IHN0YXRlLT5ic19wYWdlc1BlclJhbmdlOworCQlzdGF0ZS0+YnNfY3Vy clJhbmdlU3RhcnQKKwkJCT0gc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UgKiAodGhpc2Jsb2Nr IC8gc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UpOwogCiAJCS8qIHJlLWluaXRpYWxpemUgc3Rh dGUgZm9yIGl0ICovCiAJCWJyaW5fbWVtdHVwbGVfaW5pdGlhbGl6ZShzdGF0ZS0+YnNfZHR1 cGxlLCBzdGF0ZS0+YnNfYmRlc2MpOwpAQCAtMTEzNywxMSArMTEzMiw3IEBAIGJyaW5idWls ZChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwgSW5kZXhJbmZvICppbmRleEluZm8p CiAJCSAqIG9uIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgYSBDUkVBVEUgSU5ERVgg b3BlcmF0aW9uLCByZWdhcmRsZXNzIG9mCiAJCSAqIHRoZSB1c2Ugb2YgcGFyYWxsZWxpc20g b3IgYW55IG90aGVyIGZhY3Rvci4KIAkJICovCi0JCXN0YXRlLT5ic19zcG9vbF9vdXQgPSAo QnJpblNwb29sICopIHBhbGxvYzAoc2l6ZW9mKEJyaW5TcG9vbCkpOwotCQlzdGF0ZS0+YnNf c3Bvb2xfb3V0LT5oZWFwID0gaGVhcDsKLQkJc3RhdGUtPmJzX3Nwb29sX291dC0+aW5kZXgg PSBpbmRleDsKLQotCQlzdGF0ZS0+YnNfc3Bvb2xfb3V0LT5zb3J0c3RhdGUgPQorCQlzdGF0 ZS0+YnNfc3Bvb2wtPnNvcnRzdGF0ZSA9CiAJCQl0dXBsZXNvcnRfYmVnaW5faW5kZXhfYnJp bihoZWFwLCBpbmRleCwKIAkJCQkJCQkJCSAgIG1haW50ZW5hbmNlX3dvcmtfbWVtLCBjb29y ZGluYXRlLAogCQkJCQkJCQkJICAgVFVQTEVTT1JUX05PTkUpOwpAQCAtMjQyNyw2ICsyNDE4 LDcgQEAgX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5C dWlsZFN0YXRlICpzdGF0ZSkKIAlCbG9ja051bWJlcglwcmV2Ymxrbm8gPSBJbnZhbGlkQmxv Y2tOdW1iZXI7CiAJQnJpblR1cGxlICAqZW1wdHlUdXBsZSA9IE5VTEw7CiAJU2l6ZQkJZW1w dHlTaXplOworCUJyaW5TcG9vbCAgKnNwb29sID0gc3RhdGUtPmJzX3Nwb29sOwogCiAJLyog U2h1dGRvd24gd29ya2VyIHByb2Nlc3NlcyAqLwogCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNU b0ZpbmlzaChicmlubGVhZGVyLT5wY3h0KTsKQEAgLTI0MzgsNyArMjQzMCw3IEBAIF9icmlu X2VuZF9wYXJhbGxlbChCcmluTGVhZGVyICpicmlubGVhZGVyLCBCcmluQnVpbGRTdGF0ZSAq c3RhdGUpCiAJc3RhdGUtPmJzX3JlbHR1cGxlcyA9IGJyaW5zaGFyZWQtPnJlbHR1cGxlczsK IAlzdGF0ZS0+YnNfbnVtdHVwbGVzID0gYnJpbnNoYXJlZC0+aW5kdHVwbGVzOwogCi0JdHVw bGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLT5ic19zcG9vbF9vdXQtPnNvcnRzdGF0ZSk7CisJ dHVwbGVzb3J0X3BlcmZvcm1zb3J0KHNwb29sLT5zb3J0c3RhdGUpOwogCiAJLyoKIAkgKiBS ZWFkIHRoZSBCUklOIHR1cGxlcyBmcm9tIHRoZSBzaGFyZWQgdHVwbGVzb3J0LCBzb3J0ZWQg YnkgYmxvY2sgbnVtYmVyLgpAQCAtMjQ1Miw3ICsyNDQ0LDcgQEAgX2JyaW5fZW5kX3BhcmFs bGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5CdWlsZFN0YXRlICpzdGF0ZSkKIAkg KiBYWFggV2UgY2FuJ3QgcXVpdGUgZnJlZSB0aGUgQnJpblR1cGxlLCB0aG91Z2gsIGJlY2F1 c2UgdGhhdCdzIGEgZmllbGQKIAkgKiBpbiBCcmluU29ydFR1cGxlLgogCSAqLwotCXdoaWxl ICgoYnR1cCA9IHR1cGxlc29ydF9nZXRicmludHVwbGUoc3RhdGUtPmJzX3Nwb29sX291dC0+ c29ydHN0YXRlLCAmdHVwbGVuLCB0cnVlKSkgIT0gTlVMTCkKKwl3aGlsZSAoKGJ0dXAgPSB0 dXBsZXNvcnRfZ2V0YnJpbnR1cGxlKHNwb29sLT5zb3J0c3RhdGUsICZ0dXBsZW4sIHRydWUp KSAhPSBOVUxMKQogCXsKIAkJLyoKIAkJICogV2Ugc2hvdWxkIG5vdCBnZXQgdHdvIHN1bW1h cmllcyBmb3IgdGhlIHNhbWUgcmFuZ2UuIFRoZSB3b3JrZXJzCkBAIC0yNDk0LDcgKzI0ODYs NyBAQCBfYnJpbl9lbmRfcGFyYWxsZWwoQnJpbkxlYWRlciAqYnJpbmxlYWRlciwgQnJpbkJ1 aWxkU3RhdGUgKnN0YXRlKQogCQlwcmV2Ymxrbm8gPSBidHVwLT5idF9ibGtubzsKIAl9CiAK LQl0dXBsZXNvcnRfZW5kKHN0YXRlLT5ic19zcG9vbF9vdXQtPnNvcnRzdGF0ZSk7CisJdHVw bGVzb3J0X2VuZChzcG9vbC0+c29ydHN0YXRlKTsKIAogCS8qCiAJICogTmV4dCwgYWNjdW11 bGF0ZSBXQUwgdXNhZ2UuICAoVGhpcyBtdXN0IHdhaXQgZm9yIHRoZSB3b3JrZXJzIHRvIGZp bmlzaCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0LmMg Yi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jCmluZGV4IDRjNmIzOTZhOGE4 Li5hYjYzNTNiZGNkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBs ZXNvcnQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydC5jCkBAIC0x MzI4LDcgKzEzMjgsNiBAQCB0dXBsZXNvcnRfcHV0dHVwbGVfY29tbW9uKFR1cGxlc29ydHN0 YXRlICpzdGF0ZSwgU29ydFR1cGxlICp0dXBsZSwgYm9vbCB1c2VBYmJyZQogCQkJYnJlYWs7 CiAKIAkJZGVmYXVsdDoKLQkJCUFzc2VydChmYWxzZSk7CiAJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCB0dXBsZXNvcnQgc3RhdGUiKTsKIAkJCWJyZWFrOwogCX0KQEAgLTE0NjMsNyArMTQ2 Miw2IEBAIHR1cGxlc29ydF9wZXJmb3Jtc29ydChUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpCiAJ CQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJQXNzZXJ0KGZhbHNlKTsKIAkJCWVsb2coRVJS T1IsICJpbnZhbGlkIHR1cGxlc29ydCBzdGF0ZSIpOwogCQkJYnJlYWs7CiAJfQpAQCAtMTcy MCw3ICsxNzE4LDYgQEAgdHVwbGVzb3J0X2dldHR1cGxlX2NvbW1vbihUdXBsZXNvcnRzdGF0 ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCwKIAkJCXJldHVybiBmYWxzZTsKIAogCQlkZWZhdWx0 OgotCQkJQXNzZXJ0KGZhbHNlKTsKIAkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR1cGxlc29y dCBzdGF0ZSIpOwogCQkJcmV0dXJuIGZhbHNlOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAq LwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFy aWFudHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYwpp bmRleCAzNDNlZDRiYmM1NC4uNTI1Y2MwMWI0NzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL3NvcnQvdHVwbGVzb3J0dmFyaWFudHMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKQEAgLTE2MSw5ICsxNjEsOCBAQCB0eXBlZGVm IHN0cnVjdAogCiAvKgogICogQ29tcHV0aW5nIEJyaW5UdXBsZSBzaXplIHdpdGggb25seSB0 aGUgdHVwbGUgaXMgZGlmZmljdWx0LCBzbyB3ZSB3YW50IHRvIHRyYWNrCi0gKiB0aGUgbGVu Z3RoIGZvciByIHJlZmVyZW5jZWQgYnkgU29ydFR1cGxlLiBUaGF0J3Mgd2hhdCBCcmluU29y dFR1cGxlIGlzIG1lYW50Ci0gKiB0byBkbyAtIGl0J3MgZXNzZW50aWFsbHkgYSBCcmluVHVw bGUgcHJlZml4ZWQgYnkgbGVuZ3RoLiBXZSBvbmx5IHdyaXRlIHRoZQotICogQnJpblR1cGxl IHRvIHRoZSBsb2d0YXBlcywgdGhvdWdoLgorICogdGhlIGxlbmd0aCByZWZlcmVuY2VkIGJ5 IHRoZSBTb3J0VHVwbGUuIFRoYXQncyB3aGF0IEJyaW5Tb3J0VHVwbGUgaXMgbWVhbnQKKyAq IHRvIGRvIC0gaXQncyBlc3NlbnRpYWxseSBhIEJyaW5UdXBsZSBwcmVmaXhlZCBieSBpdHMg bGVuZ3RoLgogICovCiB0eXBlZGVmIHN0cnVjdCBCcmluU29ydFR1cGxlCiB7CkBAIC03OTYs MTEgKzc5NSwxMSBAQCB0dXBsZXNvcnRfcHV0YnJpbnR1cGxlKFR1cGxlc29ydHN0YXRlICpz dGF0ZSwgQnJpblR1cGxlICp0dXBsZSwgU2l6ZSBzaXplKQogCiAJLyogYWxsb2NhdGUgc3Bh Y2UgZm9yIHRoZSB3aG9sZSBCUklOIHNvcnQgdHVwbGUgKi8KIAlic3R1cCA9IHBhbGxvYyhC UklOU09SVFRVUExFX1NJWkUoc2l6ZSkpOwotCXN0dXAudHVwbGUgPSBic3R1cDsKIAogCWJz dHVwLT50dXBsZW4gPSBzaXplOwogCW1lbWNweSgmYnN0dXAtPnR1cGxlLCB0dXBsZSwgc2l6 ZSk7CiAKKwlzdHVwLnR1cGxlID0gYnN0dXA7CiAJc3R1cC5kYXR1bTEgPSB0dXBsZS0+YnRf Ymxrbm87CiAJc3R1cC5pc251bGwxID0gZmFsc2U7CiAKQEAgLTE3MjMsOCArMTcyMiw4IEBA IGNvbXBhcmV0dXBfaW5kZXhfYnJpbihjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0IFNvcnRU dXBsZSAqYiwKIAlCcmluVHVwbGUgICp0dXBsZTE7CiAJQnJpblR1cGxlICAqdHVwbGUyOwog Ci0JdHVwbGUxID0gJigoQnJpblNvcnRUdXBsZSAqKSBhKS0+dHVwbGU7Ci0JdHVwbGUyID0g JigoQnJpblNvcnRUdXBsZSAqKSBiKS0+dHVwbGU7CisJdHVwbGUxID0gJigoQnJpblNvcnRU dXBsZSAqKSAoYS0+dHVwbGUpKS0+dHVwbGU7CisJdHVwbGUyID0gJigoQnJpblNvcnRUdXBs ZSAqKSAoYi0+dHVwbGUpKS0+dHVwbGU7CiAKIAlpZiAodHVwbGUxLT5idF9ibGtubyA+IHR1 cGxlMi0+YnRfYmxrbm8pCiAJCXJldHVybiAxOwotLSAKMi40MS4wCgo= --------------40P67fWYxoarhvG2X8oDL355 Content-Type: text/x-patch; charset=UTF-8; name="v3-0003-simplify-comparetup_index_brin.patch" Content-Disposition: attachment; filename="v3-0003-simplify-comparetup_index_brin.patch" Content-Transfer-Encoding: base64 RnJvbSBmNWE1YmYxOGUzMDQ5ZTIxZjJiMmNjNjJmN2NhYjdmYjg5MmJmM2E2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCA3IE5vdiAyMDIzIDE5OjA3OjQ4ICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2MyAzLzRdIHNpbXBsaWZ5IGNvbXBhcmV0dXBfaW5kZXhfYnJpbgoKLS0t CiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMgfCAxMSArKysr LS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlh bnRzLmMgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKaW5k ZXggNTI1Y2MwMWI0NzQuLjliM2E3MGU2Y2NmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv c29ydC90dXBsZXNvcnR2YXJpYW50cy5jCkBAIC0xNzE5LDE1ICsxNzE5LDEyIEBAIHN0YXRp YyBpbnQKIGNvbXBhcmV0dXBfaW5kZXhfYnJpbihjb25zdCBTb3J0VHVwbGUgKmEsIGNvbnN0 IFNvcnRUdXBsZSAqYiwKIAkJCQkJICBUdXBsZXNvcnRzdGF0ZSAqc3RhdGUpCiB7Ci0JQnJp blR1cGxlICAqdHVwbGUxOwotCUJyaW5UdXBsZSAgKnR1cGxlMjsKKwlBc3NlcnQoVHVwbGVz b3J0c3RhdGVHZXRQdWJsaWMoc3RhdGUpLT5oYXZlRGF0dW0xKTsKIAotCXR1cGxlMSA9ICYo KEJyaW5Tb3J0VHVwbGUgKikgKGEtPnR1cGxlKSktPnR1cGxlOwotCXR1cGxlMiA9ICYoKEJy aW5Tb3J0VHVwbGUgKikgKGItPnR1cGxlKSktPnR1cGxlOwotCi0JaWYgKHR1cGxlMS0+YnRf Ymxrbm8gPiB0dXBsZTItPmJ0X2Jsa25vKQorCWlmIChEYXR1bUdldFVJbnQzMihhLT5kYXR1 bTEpID4gRGF0dW1HZXRVSW50MzIoYi0+ZGF0dW0xKSkKIAkJcmV0dXJuIDE7Ci0JZWxzZSBp ZiAodHVwbGUxLT5idF9ibGtubyA8IHR1cGxlMi0+YnRfYmxrbm8pCisKKwlpZiAoRGF0dW1H ZXRVSW50MzIoYS0+ZGF0dW0xKSA8IERhdHVtR2V0VUludDMyKGItPmRhdHVtMSkpCiAJCXJl dHVybiAtMTsKIAogCS8qIHNpbGVuY2UgY29tcGlsZXJzICovCi0tIAoyLjQxLjAKCg== --------------40P67fWYxoarhvG2X8oDL355 Content-Type: text/x-patch; charset=UTF-8; name="v3-0004-remove-tableam-changes.patch" Content-Disposition: attachment; filename="v3-0004-remove-tableam-changes.patch" Content-Transfer-Encoding: base64 RnJvbSA3YzliZTVhMmE3MWEwZWVhZDYyNmM4ZjlhYzI0ODAwOGJjNmRiM2U5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCA3IE5vdiAyMDIzIDIwOjAyOjAzICswMTAwClN1Ympl Y3Q6IFtQQVRDSCB2MyA0LzRdIHJlbW92ZSB0YWJsZWFtIGNoYW5nZXMKCi0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgfCAxMTUgKysrKysrKysrKysrKysrKysr KysrKysrKy0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgIHwgIDQ5ICsrLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAgfCAgIDMgKy0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgIHwgICAxIC0KIHNyYy9pbmNsdWRl L2FjY2Vzcy90YWJsZWFtLmggICAgICAgIHwgICA5ICstLQogNiBmaWxlcyBjaGFuZ2VkLCAx MTUgaW5zZXJ0aW9ucygrKSwgNjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJp bi5jCmluZGV4IGQ1NGQzOWE1MzVlLi5kYWFkZDA1MWUzMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmlu L2JyaW4uYwpAQCAtMjMzNCw3ICsyMzM0LDcgQEAgX2JyaW5fYmVnaW5fcGFyYWxsZWwoQnJp bkJ1aWxkU3RhdGUgKmJ1aWxkc3RhdGUsIFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4 LAogCiAJdGFibGVfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoaGVhcCwKIAkJCQkJCQkJICBQ YXJhbGxlbFRhYmxlU2NhbkZyb21CcmluU2hhcmVkKGJyaW5zaGFyZWQpLAotCQkJCQkJCQkg IHNuYXBzaG90LCBicmluc2hhcmVkLT5wYWdlc1BlclJhbmdlKTsKKwkJCQkJCQkJICBzbmFw c2hvdCk7CiAKIAkvKgogCSAqIFN0b3JlIHNoYXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0 ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNwYWNlLgpAQCAtMjQxMyw2ICsyNDEzLDcgQEAg X2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5CdWlsZFN0 YXRlICpzdGF0ZSkKIHsKIAlpbnQJCQlpOwogCUJyaW5UdXBsZSAgKmJ0dXA7CisJQnJpbk1l bVR1cGxlICptZW10dXBsZSA9IE5VTEw7CiAJU2l6ZQkJdHVwbGVuOwogCUJyaW5TaGFyZWQg KmJyaW5zaGFyZWQgPSBicmlubGVhZGVyLT5icmluc2hhcmVkOwogCUJsb2NrTnVtYmVyCXBy ZXZibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKQEAgLTI0MzIsMTMgKzI0MzMsMTkgQEAg X2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5CdWlsZFN0 YXRlICpzdGF0ZSkKIAogCXR1cGxlc29ydF9wZXJmb3Jtc29ydChzcG9vbC0+c29ydHN0YXRl KTsKIAorCS8qCisJICogSW5pdGlhbGl6ZSBCcmluTWVtVHVwbGUgd2UnbGwgdXNlIHRvIHVu aW9uIHN1bW1hcmllcyBmcm9tIHdvcmtlcnMKKwkgKiAoaW4gY2FzZSB0aGV5IGhhcHBlbmVk IHRvIHByb2R1Y2UgcGFydHMgb2YgdGhlIHNhbWUgcGFnYSByYW5nZSkuCisJICovCisJbWVt dHVwbGUgPSBicmluX25ld19tZW10dXBsZShzdGF0ZS0+YnNfYmRlc2MpOworCiAJLyoKIAkg KiBSZWFkIHRoZSBCUklOIHR1cGxlcyBmcm9tIHRoZSBzaGFyZWQgdHVwbGVzb3J0LCBzb3J0 ZWQgYnkgYmxvY2sgbnVtYmVyLgogCSAqIFRoYXQgcHJvYmFibHkgZ2l2ZXMgdXMgYW4gaW5k ZXggdGhhdCBpcyBjaGVhcGVyIHRvIHNjYW4sIHRoYW5rcyB0byBtb3N0bHkKIAkgKiBnZXR0 aW5nIGRhdGEgZnJvbSB0aGUgc2FtZSBpbmRleCBwYWdlIGFzIGJlZm9yZS4KIAkgKgogCSAq IEZJWE1FIFRoaXMgcHJvYmFibHkgbmVlZHMgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmaXhl cyAtIHdlJ3JlIHJlYWRpbmcKLQkgKiB0dXBsZXMgZnJvbSB0aGUgdHVwbGVzb3J0LCB3ZSdy ZSBhbGxvY2F0aW5nIGFuIGVtdHkgdHVwbGUsIGFuZCBzbyBvbi4KKwkgKiB0dXBsZXMgZnJv bSB0aGUgdHVwbGVzb3J0LCB3ZSdyZSBhbGxvY2F0aW5nIGFuIGVtcHR5IHR1cGxlLCBhbmQg c28gb24uCiAJICogUHJvYmFibHkgYmV0dGVyIHRvIHJlbGVhc2UgdGhpcyBtZW1vcnkuCiAJ ICoKIAkgKiBYWFggV2UgY2FuJ3QgcXVpdGUgZnJlZSB0aGUgQnJpblR1cGxlLCB0aG91Z2gs IGJlY2F1c2UgdGhhdCdzIGEgZmllbGQKQEAgLTI0NDYsMTQgKzI0NTMsNjUgQEAgX2JyaW5f ZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJyaW5CdWlsZFN0YXRlICpz dGF0ZSkKIAkgKi8KIAl3aGlsZSAoKGJ0dXAgPSB0dXBsZXNvcnRfZ2V0YnJpbnR1cGxlKHNw b29sLT5zb3J0c3RhdGUsICZ0dXBsZW4sIHRydWUpKSAhPSBOVUxMKQogCXsKKwkJLyogUmFu Z2VzIHNob3VsZCBiZSBtdWx0aXBsZXMgb2YgcGFnZXNfcGVyX3JhbmdlIGZvciB0aGUgaW5k ZXguICovCisJCUFzc2VydChidHVwLT5idF9ibGtubyAlIGJyaW5zaGFyZWQtPnBhZ2VzUGVy UmFuZ2UgPT0gMCk7CisKIAkJLyoKLQkJICogV2Ugc2hvdWxkIG5vdCBnZXQgdHdvIHN1bW1h cmllcyBmb3IgdGhlIHNhbWUgcmFuZ2UuIFRoZSB3b3JrZXJzCi0JCSAqIGFyZSBwcm9kdWNp bmcgcmFuZ2VzIGZvciBub24tb3ZlcmxhcHBpbmcgc2VjdGlvbnMgb2YgdGhlIHRhYmxlLgor CQkgKiBEbyB3ZSBuZWVkIHRvIHVuaW9uIHN1bW1hcmllcyBmb3IgdGhlIHNhbWUgcGFnZSBy YW5nZT8KKwkJICoKKwkJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgYnJpbiB0dXBsZSB3ZSBy ZWFkLCB0aGVuIGp1c3QgZGVmb3JtIGl0IGludG8KKwkJICogdGhlIG1lbXR1cGxlLCBhbmQg Y29udGludWUgd2l0aCB0aGUgbmV4dCBvbmUgZnJvbSB0dXBsZXNvcnQuIFdlCisJCSAqIGhv d2V2ZXIgbWF5IG5lZWQgdG8gaW5zZXJ0IGVtcHR5IHN1bW1hcmllcyBpbnRvIHRoZSBpbmRl eC4KKwkJICoKKwkJICogSWYgaXQncyB0aGUgc2FtZSBibG9jayBhcyB0aGUgbGFzdCB3ZSBz YXcsIHdlIHNpbXBseSB1bmlvbiB0aGUKKwkJICogYnJpbiB0dXBsZSBpbnRvIGl0LCBhbmQg d2UncmUgZG9uZSAtIHdlIGRvbid0IGV2ZW4gbmVlZCB0byBpbnNlcnQKKwkJICogZW1wdHkg cmFuZ2VzLCBiZWNhdXNlIHRoYXQgd2FzIGRvbmUgZWFybGllciB3aGVuIHdlIHNhdyB0aGUg Zmlyc3QKKwkJICogYnJpbiB0dXBsZSAoZm9yIHRoaXMgcmFuZ2UpLgorCQkgKgorCQkgKiBG aW5hbGx5LCBpZiBpdCdzIG5vdCB0aGUgZmlyc3QgYnJpbiB0dXBsZSwgYW5kIGl0J3Mgbm90 IHRoZSBzYW1lCisJCSAqIHBhZ2UgcmFuZ2UsIHdlIG5lZWQgdG8gZG8gdGhlIGluc2VydCBh bmQgdGhlbiBkZWZvcm0gdGhlIHR1cGxlCisJCSAqIGludG8gdGhlIG1lbXR1cGxlLiBUaGVu IHdlJ2xsIGluc2VydCBlbXB0eSByYW5nZXMgYmVmb3JlIHRoZQorCQkgKiBuZXcgYnJpbiB0 dXBsZSwgaWYgbmVlZGVkLgogCQkgKi8KLQkJQXNzZXJ0KGJ0dXAtPmJ0X2Jsa25vICE9IHBy ZXZibGtubyk7CisJCWlmIChwcmV2Ymxrbm8gPT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCQl7 CisJCQkvKiBGaXJzdCBicmluIHR1cGxlcywganVzdCBkZWZvcm0gaW50byBtZW10dXBsZS4g Ki8KKwkJCW1lbXR1cGxlID0gYnJpbl9kZWZvcm1fdHVwbGUoc3RhdGUtPmJzX2JkZXNjLCBi dHVwLCBtZW10dXBsZSk7CiAKLQkJLyogUmFuZ2VzIHNob3VsZCBiZSBtdWx0aXBsZXMgb2Yg cGFnZXNfcGVyX3JhbmdlIGZvciB0aGUgaW5kZXguICovCi0JCUFzc2VydChidHVwLT5idF9i bGtubyAlIGJyaW5zaGFyZWQtPnBhZ2VzUGVyUmFuZ2UgPT0gMCk7CisJCQkvKiBjb250aW51 ZSB0byBpbnNlcnQgZW1wdHkgcGFnZXMgYmVmb3JlIHRoaXNibG9jayAqLworCQl9CisJCWVs c2UgaWYgKG1lbXR1cGxlLT5idF9ibGtubyA9PSBidHVwLT5idF9ibGtubykKKwkJeworCQkJ LyoKKwkJCSAqIE5vdCB0aGUgZmlyc3QgYnJpbiB0dXBsZSwgYnV0IHNhbWUgcGFnZSByYW5n ZSBhcyB0aGUgcHJldmlvdXMKKwkJCSAqIG9uZSwgc28gd2UgY2FuIG1lcmdlIGl0IGludG8g dGhlIG1lbXR1cGxlLgorCQkJICovCisJCQl1bmlvbl90dXBsZXMoc3RhdGUtPmJzX2JkZXNj LCBtZW10dXBsZSwgYnR1cCk7CisJCQljb250aW51ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJ CUJyaW5UdXBsZSAgKnRtcDsKKwkJCVNpemUJCWxlbjsKKworCQkJLyoKKwkJCSAqIFdlIGdv dCBicmluIHR1cGxlIGZvciBhIGRpZmZlcmVudCBwYWdlIHJhbmdlLCBzbyBmb3JtIGEgYnJp bgorCQkJICogdHVwbGUgZnJvbSB0aGUgbWVtdHVwbGUsIGluc2VydCBpdCwgYW5kIHJlLWlu aXQgdGhlIG1lbXR1cGxlCisJCQkgKiBmcm9tIHRoZSBuZXcgYnJpbiB0dXBsZS4KKwkJCSAq LworCQkJdG1wID0gYnJpbl9mb3JtX3R1cGxlKHN0YXRlLT5ic19iZGVzYywgbWVtdHVwbGUt PmJ0X2Jsa25vLAorCQkJCQkJCQkgIG1lbXR1cGxlLCAmbGVuKTsKKworCQkJYnJpbl9kb2lu c2VydChzdGF0ZS0+YnNfaXJlbCwgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UsIHN0YXRlLT5i c19ybUFjY2VzcywKKwkJCQkJCSAgJnN0YXRlLT5ic19jdXJyZW50SW5zZXJ0QnVmLCB0bXAt PmJ0X2Jsa25vLCB0bXAsIGxlbik7CisKKwkJCS8qIGZyZWUgdGhlIGZvcm1lZCBvbi1kaXNr IHR1cGxlICovCisJCQlwZnJlZSh0bXApOworCisJCQltZW10dXBsZSA9IGJyaW5fZGVmb3Jt X3R1cGxlKHN0YXRlLT5ic19iZGVzYywgYnR1cCwgbWVtdHVwbGUpOworCisJCQkvKiBjb250 aW51ZSB0byBpbnNlcnQgZW1wdHkgcGFnZXMgYmVmb3JlIHRoaXNibG9jayAqLworCQl9CiAK IAkJLyogRmlsbCBlbXB0eSByYW5nZXMgZm9yIGFsbCByYW5nZXMgbWlzc2luZyBpbiB0aGUg dHVwbGVzb3J0LiAqLwogCQlwcmV2Ymxrbm8gPSAocHJldmJsa25vID09IEludmFsaWRCbG9j a051bWJlcikgPyAwIDogcHJldmJsa25vOwpAQCAtMjQ4MCwxNCArMjUzOCw1MSBAQCBfYnJp bl9lbmRfcGFyYWxsZWwoQnJpbkxlYWRlciAqYnJpbmxlYWRlciwgQnJpbkJ1aWxkU3RhdGUg KnN0YXRlKQogCQkJCQkJICBlbXB0eVR1cGxlLT5idF9ibGtubywgZW1wdHlUdXBsZSwgZW1w dHlTaXplKTsKIAkJfQogCi0JCWJyaW5fZG9pbnNlcnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRl LT5ic19wYWdlc1BlclJhbmdlLCBzdGF0ZS0+YnNfcm1BY2Nlc3MsCi0JCQkJCSAgJnN0YXRl LT5ic19jdXJyZW50SW5zZXJ0QnVmLCBidHVwLT5idF9ibGtubywgYnR1cCwgdHVwbGVuKTsK LQogCQlwcmV2Ymxrbm8gPSBidHVwLT5idF9ibGtubzsKIAl9CiAKIAl0dXBsZXNvcnRfZW5k KHNwb29sLT5zb3J0c3RhdGUpOwogCisJLyogRmlsbCBlbXB0eSByYW5nZXMgZm9yIGFsbCBy YW5nZXMgbWlzc2luZyBpbiB0aGUgdHVwbGVzb3J0LiAqLworCXByZXZibGtubyA9IChwcmV2 Ymxrbm8gPT0gSW52YWxpZEJsb2NrTnVtYmVyKSA/IDAgOiBwcmV2Ymxrbm87CisJd2hpbGUg KHByZXZibGtubyArIHN0YXRlLT5ic19wYWdlc1BlclJhbmdlIDwgbWVtdHVwbGUtPmJ0X2Js a25vKQorCXsKKwkJLyogdGhlIG1pc3NpbmcgcmFuZ2UgKi8KKwkJcHJldmJsa25vICs9IHN0 YXRlLT5ic19wYWdlc1BlclJhbmdlOworCisJCS8qIERpZCB3ZSBhbHJlYWR5IGJ1aWxkIHRo ZSBlbXB0eSByYW5nZT8gSWYgbm90LCBkbyBpdCBub3cuICovCisJCWlmIChlbXB0eVR1cGxl ID09IE5VTEwpCisJCXsKKwkJCUJyaW5NZW1UdXBsZSAqZHR1cGxlID0gYnJpbl9uZXdfbWVt dHVwbGUoc3RhdGUtPmJzX2JkZXNjKTsKKworCQkJZW1wdHlUdXBsZSA9IGJyaW5fZm9ybV90 dXBsZShzdGF0ZS0+YnNfYmRlc2MsIHByZXZibGtubywgZHR1cGxlLCAmZW1wdHlTaXplKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCS8qIHdlIGFscmVhZHkgaGF2ZSBhbSAiZW1wdHkgcmFu Z2UiIHR1cGxlLCBqdXN0IHNldCB0aGUgYmxvY2sgKi8KKwkJCWVtcHR5VHVwbGUtPmJ0X2Js a25vID0gcHJldmJsa25vOworCQl9CisKKwkJYnJpbl9kb2luc2VydChzdGF0ZS0+YnNfaXJl bCwgc3RhdGUtPmJzX3BhZ2VzUGVyUmFuZ2UsIHN0YXRlLT5ic19ybUFjY2VzcywKKwkJCQkJ ICAmc3RhdGUtPmJzX2N1cnJlbnRJbnNlcnRCdWYsCisJCQkJCSAgZW1wdHlUdXBsZS0+YnRf Ymxrbm8sIGVtcHR5VHVwbGUsIGVtcHR5U2l6ZSk7CisJfQorCisJLyoqLworCWlmIChwcmV2 Ymxrbm8gIT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCXsKKwkJQnJpblR1cGxlICAqdG1wOwor CQlTaXplCQlsZW47CisKKwkJdG1wID0gYnJpbl9mb3JtX3R1cGxlKHN0YXRlLT5ic19iZGVz YywgbWVtdHVwbGUtPmJ0X2Jsa25vLAorCQkJCQkJCSAgbWVtdHVwbGUsICZsZW4pOworCisJ CWJyaW5fZG9pbnNlcnQoc3RhdGUtPmJzX2lyZWwsIHN0YXRlLT5ic19wYWdlc1BlclJhbmdl LCBzdGF0ZS0+YnNfcm1BY2Nlc3MsCisJCQkJCSAgJnN0YXRlLT5ic19jdXJyZW50SW5zZXJ0 QnVmLCB0bXAtPmJ0X2Jsa25vLCB0bXAsIGxlbik7CisKKwkJcGZyZWUodG1wKTsKKwl9CisK IAkvKgogCSAqIE5leHQsIGFjY3VtdWxhdGUgV0FMIHVzYWdlLiAgKFRoaXMgbXVzdCB3YWl0 IGZvciB0aGUgd29ya2VycyB0byBmaW5pc2gsCiAJICogb3Igd2UgbWlnaHQgZ2V0IGluY29t cGxldGUgZGF0YS4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNvcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jCmluZGV4IDYy NDFiYWVlYTg2Li5jMjY2NWZjZTQxMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRz b3J0LmMKQEAgLTE1NzUsNyArMTU3NSw3IEBAIF9idF9iZWdpbl9wYXJhbGxlbChCVEJ1aWxk U3RhdGUgKmJ1aWxkc3RhdGUsIGJvb2wgaXNjb25jdXJyZW50LCBpbnQgcmVxdWVzdCkKIAli dHNoYXJlZC0+YnJva2VuaG90Y2hhaW4gPSBmYWxzZTsKIAl0YWJsZV9wYXJhbGxlbHNjYW5f aW5pdGlhbGl6ZShidHNwb29sLT5oZWFwLAogCQkJCQkJCQkgIFBhcmFsbGVsVGFibGVTY2Fu RnJvbUJUU2hhcmVkKGJ0c2hhcmVkKSwKLQkJCQkJCQkJICBzbmFwc2hvdCwgSW52YWxpZEJs b2NrTnVtYmVyKTsKKwkJCQkJCQkJICBzbmFwc2hvdCk7CiAKIAkvKgogCSAqIFN0b3JlIHNo YXJlZCB0dXBsZXNvcnQtcHJpdmF0ZSBzdGF0ZSwgZm9yIHdoaWNoIHdlIHJlc2VydmVkIHNw YWNlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggNGFmMGQ0MzNlOWQu LmM2YmRiN2UxYzY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFi bGVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTE1 Myw5ICsxNTMsOSBAQCB0YWJsZV9wYXJhbGxlbHNjYW5fZXN0aW1hdGUoUmVsYXRpb24gcmVs LCBTbmFwc2hvdCBzbmFwc2hvdCkKIAogdm9pZAogdGFibGVfcGFyYWxsZWxzY2FuX2luaXRp YWxpemUoUmVsYXRpb24gcmVsLCBQYXJhbGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4sCi0JCQkJ CQkJICBTbmFwc2hvdCBzbmFwc2hvdCwgQmxvY2tOdW1iZXIgY2h1bmtfZmFjdG9yKQorCQkJ CQkJCSAgU25hcHNob3Qgc25hcHNob3QpCiB7Ci0JU2l6ZQkJc25hcHNob3Rfb2ZmID0gcmVs LT5yZF90YWJsZWFtLT5wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShyZWwsIHBzY2FuLCBjaHVu a19mYWN0b3IpOworCVNpemUJCXNuYXBzaG90X29mZiA9IHJlbC0+cmRfdGFibGVhbS0+cGFy YWxsZWxzY2FuX2luaXRpYWxpemUocmVsLCBwc2Nhbik7CiAKIAlwc2Nhbi0+cGhzX3NuYXBz aG90X29mZiA9IHNuYXBzaG90X29mZjsKIApAQCAtMzk1LDIxICszOTUsMTYgQEAgdGFibGVf YmxvY2tfcGFyYWxsZWxzY2FuX2VzdGltYXRlKFJlbGF0aW9uIHJlbCkKIH0KIAogU2l6ZQot dGFibGVfYmxvY2tfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gcmVsLCBQYXJh bGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4sIEJsb2NrTnVtYmVyIGNodW5rX2ZhY3RvcikKK3Rh YmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIHJlbCwgUGFyYWxs ZWxUYWJsZVNjYW5EZXNjIHBzY2FuKQogewogCVBhcmFsbGVsQmxvY2tUYWJsZVNjYW5EZXNj IGJwc2NhbiA9IChQYXJhbGxlbEJsb2NrVGFibGVTY2FuRGVzYykgcHNjYW47CiAKIAlicHNj YW4tPmJhc2UucGhzX3JlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwogCWJwc2Nhbi0+ cGhzX25ibG9ja3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHJlbCk7Ci0JYnBzY2Fu LT5waHNfY2h1bmtfZmFjdG9yID0gY2h1bmtfZmFjdG9yOwotCS8qIGNvbXBhcmUgcGhzX3N5 bmNzY2FuIGluaXRpYWxpemF0aW9uIHRvIHNpbWlsYXIgbG9naWMgaW4gaW5pdHNjYW4KLQkg KgotCSAqIERpc2FibGUgc3luYyBzY2FucyBpZiB0aGUgY2h1bmsgZmFjdG9yIGlzIHNldCAo dmFsaWQgYmxvY2sgbnVtYmVyKS4KLQkgKi8KKwkvKiBjb21wYXJlIHBoc19zeW5jc2NhbiBp bml0aWFsaXphdGlvbiB0byBzaW1pbGFyIGxvZ2ljIGluIGluaXRzY2FuICovCiAJYnBzY2Fu LT5iYXNlLnBoc19zeW5jc2NhbiA9IHN5bmNocm9uaXplX3NlcXNjYW5zICYmCiAJCSFSZWxh dGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVsKSAmJgotCQkoYnBzY2FuLT5waHNfbmJsb2NrcyA+ IE5CdWZmZXJzIC8gNCkgJiYKLQkJIUJsb2NrTnVtYmVySXNWYWxpZChicHNjYW4tPnBoc19j aHVua19mYWN0b3IpOworCQlicHNjYW4tPnBoc19uYmxvY2tzID4gTkJ1ZmZlcnMgLyA0Owog CVNwaW5Mb2NrSW5pdCgmYnBzY2FuLT5waHNfbXV0ZXgpOwogCWJwc2Nhbi0+cGhzX3N0YXJ0 YmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJcGdfYXRvbWljX2luaXRfdTY0KCZicHNj YW4tPnBoc19uYWxsb2NhdGVkLCAwKTsKQEAgLTQ2NCwyNSArNDU5LDYgQEAgdGFibGVfYmxv Y2tfcGFyYWxsZWxzY2FuX3N0YXJ0YmxvY2tfaW5pdChSZWxhdGlvbiByZWwsCiAJcGJzY2Fu d29yay0+cGhzd19jaHVua19zaXplID0gTWluKHBic2NhbndvcmstPnBoc3dfY2h1bmtfc2l6 ZSwKIAkJCQkJCQkJCSAgUEFSQUxMRUxfU0VRU0NBTl9NQVhfQ0hVTktfU0laRSk7CiAKLQkv KgotCSAqIElmIHRoZSBjaHVuayBzaXplIGZhY3RvciBpcyBzZXQsIHdlIG5lZWQgdG8gbWFr ZSBzdXJlIHRoZSBjaHVuayBzaXplIGlzCi0JICogYSBtdWx0aXBsZSBvZiB0aGF0IHZhbHVl LiBXZSByb3VuZCB0aGUgY2h1bmsgc2l6ZSB0byB0aGUgbmVhcmVzdCBjaHVuawotCSAqIGZh Y3RvciBtdWx0aXBsZSwgYXQgbGVhc3Qgb25lIGNodW5rX2ZhY3Rvci4KLQkgKgotCSAqIFhY WCBOb3RlIHRoaXMgbWF5IG92ZXJyaWRlIFBBUkFMTEVMX1NFUVNDQU5fTUFYX0NIVU5LX1NJ WkUsIGluIGNhc2UgdGhlCi0JICogY2h1bmsgZmFjdG9yIChlLmcuIEJSSU4gcGFnZXNfcGVy X3JhbmdlKSBpcyBsYXJnZXIuCi0JICovCi0JaWYgKHBic2Nhbi0+cGhzX2NodW5rX2ZhY3Rv ciAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCi0JewotCQkvKiBuZWFyZXN0IChzbWFsbGVyKSBt dWx0aXBsZSBvZiBjaHVua19mYWN0b3IgKi8KLQkJcGJzY2Fud29yay0+cGhzd19jaHVua19z aXplCi0JCQk9IHBic2Nhbi0+cGhzX2NodW5rX2ZhY3RvciAqIChwYnNjYW53b3JrLT5waHN3 X2NodW5rX3NpemUgLyBwYnNjYW4tPnBoc19jaHVua19mYWN0b3IpOwotCi0JCS8qIGJ1dCBh dCBsZWFzdCBvbmUgY2h1bmtfZmFjdG9yICovCi0JCXBic2NhbndvcmstPnBoc3dfY2h1bmtf c2l6ZSA9IE1heChwYnNjYW53b3JrLT5waHN3X2NodW5rX3NpemUsCi0JCQkJCQkJCQkJICBw YnNjYW4tPnBoc19jaHVua19mYWN0b3IpOwotCX0KLQogcmV0cnk6CiAJLyogR3JhYiB0aGUg c3BpbmxvY2suICovCiAJU3BpbkxvY2tBY3F1aXJlKCZwYnNjYW4tPnBoc19tdXRleCk7CkBA IC01OTksMjEgKzU3NSw2IEBAIHRhYmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9uZXh0cGFnZShS ZWxhdGlvbiByZWwsCiAJCQkocGJzY2Fud29yay0+cGhzd19jaHVua19zaXplICogUEFSQUxM RUxfU0VRU0NBTl9SQU1QRE9XTl9DSFVOS1MpKQogCQkJcGJzY2Fud29yay0+cGhzd19jaHVu a19zaXplID4+PSAxOwogCi0JCS8qCi0JCSAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBu ZXcgY2h1bmtfc2l6ZSBpcyBzdGlsbCBhIHN1aXRhYmxlIG11bHRpcGxlCi0JCSAqIG9mIGNo dW5rX2ZhY3Rvci4KLQkJICovCi0JCWlmIChwYnNjYW4tPnBoc19jaHVua19mYWN0b3IgIT0g SW52YWxpZEJsb2NrTnVtYmVyKQotCQl7Ci0JCQkvKiBuZWFyZXN0IChzbWFsbGVyKSBtdWx0 aXBsZSBvZiBjaHVua19mYWN0b3IgKi8KLQkJCXBic2NhbndvcmstPnBoc3dfY2h1bmtfc2l6 ZQotCQkJCT0gcGJzY2FuLT5waHNfY2h1bmtfZmFjdG9yICogKHBic2NhbndvcmstPnBoc3df Y2h1bmtfc2l6ZSAvIHBic2Nhbi0+cGhzX2NodW5rX2ZhY3Rvcik7Ci0KLQkJCS8qIGJ1dCBh dCBsZWFzdCBvbmUgY2h1bmtfZmFjdG9yICovCi0JCQlwYnNjYW53b3JrLT5waHN3X2NodW5r X3NpemUgPSBNYXgocGJzY2Fud29yay0+cGhzd19jaHVua19zaXplLAotCQkJCQkJCQkJCQkg IHBic2Nhbi0+cGhzX2NodW5rX2ZhY3Rvcik7Ci0JCX0KLQogCQluYWxsb2NhdGVkID0gcGJz Y2Fud29yay0+cGhzd19uYWxsb2NhdGVkID0KIAkJCXBnX2F0b21pY19mZXRjaF9hZGRfdTY0 KCZwYnNjYW4tPnBoc19uYWxsb2NhdGVkLAogCQkJCQkJCQkJcGJzY2Fud29yay0+cGhzd19j aHVua19zaXplKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFz Y2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCmluZGV4IDUyOWE3 ZWQzMjg0Li40OWE1OTMzYWZmNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZVNlcXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5j CkBAIC0yNjIsOCArMjYyLDcgQEAgRXhlY1NlcVNjYW5Jbml0aWFsaXplRFNNKFNlcVNjYW5T dGF0ZSAqbm9kZSwKIAlwc2NhbiA9IHNobV90b2NfYWxsb2NhdGUocGN4dC0+dG9jLCBub2Rl LT5wc2Nhbl9sZW4pOwogCXRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKG5vZGUtPnNz LnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJICBwc2NhbiwKLQkJCQkJCQkJICBlc3Rh dGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgIEludmFsaWRCbG9ja051bWJlcik7CisJCQkJ CQkJCSAgZXN0YXRlLT5lc19zbmFwc2hvdCk7CiAJc2htX3RvY19pbnNlcnQocGN4dC0+dG9j LCBub2RlLT5zcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIHBzY2FuKTsKIAlub2RlLT5zcy5z c19jdXJyZW50U2NhbkRlc2MgPQogCQl0YWJsZV9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+ c3Muc3NfY3VycmVudFJlbGF0aW9uLCBwc2Nhbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRl eCA3MmEyMGQ4ODJmNS4uZDAzMzYwZWFjMDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAt NzksNyArNzksNiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuRGVz Y0RhdGEKIAlCbG9ja051bWJlciBwaHNfbmJsb2NrczsJLyogIyBibG9ja3MgaW4gcmVsYXRp b24gYXQgc3RhcnQgb2Ygc2NhbiAqLwogCXNsb2NrX3QJCXBoc19tdXRleDsJCS8qIG11dHVh bCBleGNsdXNpb24gZm9yIHNldHRpbmcgc3RhcnRibG9jayAqLwogCUJsb2NrTnVtYmVyIHBo c19zdGFydGJsb2NrOyAvKiBzdGFydGluZyBibG9jayBudW1iZXIgKi8KLQlCbG9ja051bWJl ciBwaHNfY2h1bmtfZmFjdG9yOyAvKiBjaHVua3MgbmVlZCB0byBiZSBhIG11bHRpcGxlIG9m IHRoaXMgKi8KIAlwZ19hdG9taWNfdWludDY0IHBoc19uYWxsb2NhdGVkOwkvKiBudW1iZXIg b2YgYmxvY2tzIGFsbG9jYXRlZCB0bwogCQkJCQkJCQkJCSAqIHdvcmtlcnMgc28gZmFyLiAq LwogfQkJCVBhcmFsbGVsQmxvY2tUYWJsZVNjYW5EZXNjRGF0YTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVh bS5oCmluZGV4IGQ5NGU0ZDMyYWExLi5kYmI3MDliNTZjZSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVh bS5oCkBAIC0zOTAsOCArMzkwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUK IAkgKiByZWxhdGlvbi4KIAkgKi8KIAlTaXplCQkoKnBhcmFsbGVsc2Nhbl9pbml0aWFsaXpl KSAoUmVsYXRpb24gcmVsLAotCQkJCQkJCQkJCQlQYXJhbGxlbFRhYmxlU2NhbkRlc2MgcHNj YW4sCi0JCQkJCQkJCQkJCUJsb2NrTnVtYmVyIGNodW5rX2ZhY3Rvcik7CisJCQkJCQkJCQkJ CVBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2Nhbik7CiAKIAkvKgogCSAqIFJlaW5pdGlhbGl6 ZSBgcHNjYW5gIGZvciBhIG5ldyBzY2FuLiBgcmVsYCB3aWxsIGJlIHRoZSBzYW1lIHJlbGF0 aW9uIGFzCkBAIC0xMTQ5LDggKzExNDgsNyBAQCBleHRlcm4gU2l6ZSB0YWJsZV9wYXJhbGxl bHNjYW5fZXN0aW1hdGUoUmVsYXRpb24gcmVsLCBTbmFwc2hvdCBzbmFwc2hvdCk7CiAgKi8K IGV4dGVybiB2b2lkIHRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIHJl bCwKIAkJCQkJCQkJCQkgIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2NhbiwKLQkJCQkJCQkJ CQkgIFNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCSAgQmxvY2tOdW1iZXIgY2h1bmtf ZmFjdG9yKTsKKwkJCQkJCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90KTsKIAogLyoKICAqIEJl Z2luIGEgcGFyYWxsZWwgc2Nhbi4gYHBzY2FuYCBuZWVkcyB0byBoYXZlIGJlZW4gaW5pdGlh bGl6ZWQgd2l0aApAQCAtMjA2Niw4ICsyMDY0LDcgQEAgZXh0ZXJuIHZvaWQgc2ltcGxlX3Rh YmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2ludGVyIG90aWQsCiAKIGV4 dGVybiBTaXplIHRhYmxlX2Jsb2NrX3BhcmFsbGVsc2Nhbl9lc3RpbWF0ZShSZWxhdGlvbiBy ZWwpOwogZXh0ZXJuIFNpemUgdGFibGVfYmxvY2tfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUo UmVsYXRpb24gcmVsLAotCQkJCQkJCQkJCQkJUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2Fu LAotCQkJCQkJCQkJCQkJQmxvY2tOdW1iZXIgY2h1bmtfZmFjdG9yKTsKKwkJCQkJCQkJCQkJ CVBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2Nhbik7CiBleHRlcm4gdm9pZCB0YWJsZV9ibG9j a19wYXJhbGxlbHNjYW5fcmVpbml0aWFsaXplKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJ CSAgUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuKTsKIGV4dGVybiBCbG9ja051bWJlciB0 YWJsZV9ibG9ja19wYXJhbGxlbHNjYW5fbmV4dHBhZ2UoUmVsYXRpb24gcmVsLAotLSAKMi40 MS4wCgo= --------------40P67fWYxoarhvG2X8oDL355--