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.96) (envelope-from ) id 1w9uAz-001sPg-1h for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 00:20:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9uAx-00CysS-3D for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 00:20:16 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9uAx-00CysK-1Y for pgsql-hackers@lists.postgresql.org; Tue, 07 Apr 2026 00:20:16 +0000 Received: from mail-ot1-x334.google.com ([2607:f8b0:4864:20::334]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9uAu-00000000zkN-1S30 for pgsql-hackers@postgresql.org; Tue, 07 Apr 2026 00:20:15 +0000 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7d4c383f2fcso3629692a34.0 for ; Mon, 06 Apr 2026 17:20:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775521210; cv=none; d=google.com; s=arc-20240605; b=WaaRdfwXOGEmCJ0WiK02M61nl6AQeqV1XQCyHdLeGfcAxBkc6bQ0O2skClO2AVPANQ Fetsz7mZrqrXXDl4dLwNRmIMXVwQh7dunntrJeAjsWHY5dx1Id1lLgIovj+NJ3CW3IFI eVAnzxXY0R19sj38eHrtnbm65bpjpSEDrAIjVlw4tk+kUo047SDhG+kvPFYvzp0I+Y1R +d87caz2itpTLKrt3TlsbOI34Yu6fJbEcPKdJwMUEXI0OHQPPcwoOsYcc9BEmMRH4Pw0 gv8P/t0wJZ1LWm52cZ/ZTNon60BGzygWnGkc+iOdsNM05vv7nLAFdvb/pDf3LQ6r0W1V MSpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=4JT8QhXvmdDznnc+CM9IJY3gKaWBst262uPpFNZxi4Q=; fh=ho5gwG8HZ9os4XeKmDbyJoX+MiSKyGd8m9hRin2H37o=; b=N4thkh4l0ERzcfFrxfBGJcFAyl6ufQUbDYXP5t7zGtnlZh6OEbKjvjlQwnbPPSvn4O WFtQAN0y4ZdhUQIALG56tZQz6xaQrIWWhaK1uWmgv+TSCQTyxfCdIQ5Ex3xJzWu6X2sT +sEyF+MZ/5EqZD7HyMkC3f+pEILGRkP4aD3sD8PtJkid8YoAqq3Yu8mh5xe9cBbEODQQ /aRK1HfDlv6vXv0jkGe+Nlel6s52Dzvq7dV6JPLBqokZTypXq00qj/Twex2h67V4fnPr HqI/CIkp2MaWgdISq5ZpdUj94gPL1IqvP09+x5v1MiM6qI7rMDBNPPoMG+r9/juE2cXN 9nLA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775521210; x=1776126010; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4JT8QhXvmdDznnc+CM9IJY3gKaWBst262uPpFNZxi4Q=; b=leykA6fOfiCsTOCS9u5LoCITgTASm6PrlfFhjdhr8Za6aUZ4iI5O9hQt8BXUZbowaD 7LysmyPs7tOWkZJWWbuHwl0l7dMVlh7KcohiyVw9vFcZB1ZhLWAuCa8jVZ+C+McvK7Ns pLKuyPOYzK0DNwI4WFcuyLGw763EgEimK/064NjT+RmBw8AYDmIzWM51xYFxbqlQeQk+ tTkj9VqOBaqlm+AE9t8JsQdMf9WslWcknT1+xlnYoHj80Q6u1evSppe1UwHEw4jHu+ZP Rk3G4bnklZi6NysJYjpaI4/rE8kl/AuBHx3auMMNDjhEIFRuXVuri3DtsIZsPJoQU1p3 tkGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775521210; x=1776126010; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=4JT8QhXvmdDznnc+CM9IJY3gKaWBst262uPpFNZxi4Q=; b=QQOoN+Uwt6ikS/rJci0jT8nZWBsHgPY52YUc3Ye1wd9WwuMgWkf/eeml4jvR11WH+3 MQ/sI2/oWok8ICE6pLpm33LuyVo56yFG6AEnFFCv/I58RllP7BqIR/hjU1wTEX/I6u8k kjhKMjfZToU0W+uvv3GhUPui+ERzmkgp1MWkclggCfNqnqWMBkQAFWInS6eTCCQ/4zKJ xhRAz4/RNLQnHysTlg+JDYwFlinyUtCAbsC5dm/u24DMtWsPykQ7t4uXHYN7eNaAMHuz 4QRfe8hi98wWTy/g+tFn7p8yeJSr8K9gwyZNJX233Gv7E0RfV5KyWm734zsGLu99WotM OUDQ== X-Forwarded-Encrypted: i=1; AJvYcCUxgLDdtHu+AWoq70uTtRwyMXgikPdHGTnwNZC+UCka8JbIB8qQIj9Xl2mb/b9I4ihl7/Gq4OX/GvahHOFK@postgresql.org X-Gm-Message-State: AOJu0YxEs0FiJf4IRYxsEh0QqMvS+gdnjzwnt4rJ/Srkn1p5pmEOhHQr Z3ucg2gm1J9PTJLZB3/9Rd+ZW/7x0M9cIaRMyg/LoK4hFCj8Pksb+vFB9qS5hVLG189t+LdcB87 4PROWW/gellHALcqOhtIEvkyyxSKjZAM= X-Gm-Gg: AeBDiesggnZZLF5wy151tzGlZXgvXLDMJffTHLvTS91D7412IdcmK5LlPdub0No9Ygl GWovTVw0xqQSBbnm8iVCTCXLOgkv88ks3CkCVwXwn6G9yJsK1/QOdf9MF3fbNRWoJ+05coeS8/q yc+564+dPFRsx7wqIItU2wp5eHEi4yg0MxOaZvNKJgUVWG2RGnBeqeX2Uj8tctHJSECfHMIY2pL tRW6srCR+pPRdE5tXHPcP9J7uY5J2e57TNPU/xNUZjkqyJqRgPdvz9qhjKeXr9uQEqdDBUHAwMX 5JQxcn3+rTIgvJ97vdtwsZ82tIy7O5wdXr+fjv3K6Dm0e7SECE4EJ5J0Lytsb3l1ifONOS5AsPC 6H68Y3LRcCwUlQKpYDM4iifwHbUuhy/chl++LK+ns X-Received: by 2002:a05:6820:61e:b0:685:b738:18bc with SMTP id 006d021491bc7-685b7381e38mr3589448eaf.26.1775521210306; Mon, 06 Apr 2026 17:20:10 -0700 (PDT) MIME-Version: 1.0 References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <2fb1d9923b6995492e7b163e6cb95402@postgrespro.ru> <782a968c8e01ec6db3b2da2120adf73b@postgrespro.ru> <554a73f7ffea8b22b3f81a4804b5fc34@postgrespro.ru> <42a9a941-e768-4fd8-8067-12958c5a1d70@gmail.com> In-Reply-To: From: Alexander Korotkov Date: Tue, 7 Apr 2026 03:19:56 +0300 X-Gm-Features: AQROBzDnmpwxROCOsoxWqpF47U6XTw-hA9dRK-KZwlw-89wacPnrgflDd5MIsZE Message-ID: Subject: Re: Asynchronous MergeAppend To: Matheus Alcantara Cc: Alexander Pyhalov , Pgsql Hackers Content-Type: multipart/mixed; boundary="000000000000085fe4064ed3bfdb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000085fe4064ed3bfdb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Matheus, Thank you for your feedback. On Tue, Apr 7, 2026 at 2:48=E2=80=AFAM Matheus Alcantara wrote: > On Sat Apr 4, 2026 at 11:24 PM -03, Alexander Korotkov wrote: > > I made more work on the patchset. > > > > Patch #1 now considers IncrementalSort as exclusion alongside with > > Sort. Exclusion check is now on the top of the switch(). > > Patch #2 is split into 3 patches: common structures, common sync > > append logic, and common async append logic. > > New structs are now named AppendBase/AppendBaseState, corresponding > > fields are "ab" and "as". > > > > Most importantly I noted that this patchset actually only makes > > initial heap filling asynchronous. The steady work after that is > > still syncnronous. Even that it used async infrastructure, it fetched > > tuples from children subplans one-by-one: effectively synchronous but > > paying for asynchronous infrastructure. I think even with this > > limitation, this patchset is valuable: the startup cost for children > > foreignscans can be high. But this understanding allowed me to > > significantly simplify the main patch including: > > 1) After initial heap filling, use ExecProcNode() to fetch from childre= n plans. > > 2) Remove ms_has_asyncresults entirely. Async responses store directly > > into ms_slots[] (the existing heap slot array), which serves as both > > the merge state and the "result arrived" indicator via TupIsNull(). > > 3) Removed needrequest usage from MergeAppend. Since MergeAppend only > > fires initial requests (via ExecAppendBaseAsyncBegin()) and never > > sends follow-up requests, needrequest tracking is unnecessary. > > ExecMergeAppendAsyncRequest() was eliminated entirely. > > 4) ExecMergeAppendAsyncGetNext() reduced to a simple wait loop: > > 5) asyncresults allocation reduced back to nasyncplans. MergeAppend > > doesn't use it (stores in ms_slots), and Append only needs nasyncplans > > entries for its stack. > > > > Additionally, I made the following changes. > > 1) WAIT_EVENT_MERGE_APPEND_READY wait event instead of extending > > WAIT_EVENT_APPEND_READY. That should be less confusing for monitoring > > purposes. > > 2) More tests: error handling with broken partition, plan-time > > partition pruning, and run-time partition pruning tests for async > > MergeAppend. > > > > Thanks for v17, the split of 0002 into multiple patches seems much > better. Overall I agree with the changes on v17 compared with v16, the > removal of ms_has_asyncresults makes the code better to read and follow. > The separate WAIT_EVENT_MERGE_APPEND_READY for better monitoring is also > good, I've tested some long running queries and I've find the event on > pg_stat_activity. The steady work changes also looks good. > > One minor issue on 0002: > > + bool valid_subplans_identified; /* is valid_async= plans valid? */ > + Bitmapset *valid_subplans; > + Bitmapset *valid_asyncplans; /* valid asynchronous plans index= es */ > > Should be /* is valid_subplans valid? */ Thank you for catching this, fixed. > Minor comment on 0005: > > +static void > +ExecMergeAppendAsyncGetNext(MergeAppendState *node, int mplan) > +{ > + /* > + * All initial async requests were fired by ExecAppendBaseAsyncBe= gin. > > Wondering if we should reference ExecMergeAppendAsyncBegin() instead of > ExecAppendBaseAsyncBegin() since this is on nodeMergeAppend, what do you > think? Technically current comment is correct, because async requests are essetially fired by ExecAppendBaseAsyncBegin(). But yes, since we're on nodeMergeAppend, it would be less confusing to mention ExecMergeAppendAsyncBegin(). Fixed. ------ Regards, Alexander Korotkov Supabase --000000000000085fe4064ed3bfdb Content-Type: application/octet-stream; name="v18-0001-mark_async_capable-subpath-should-match-subplan.patch" Content-Disposition: attachment; filename="v18-0001-mark_async_capable-subpath-should-match-subplan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnvenel0 RnJvbSA4Nzc4NDQ2MTIxYWYyMGI0ZTM5MTFkNGY5ZDhiZDA5NTdlZDFhMmI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogU3VuLCA1IEFwciAyMDI2IDAzOjU4OjIzICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTggMS81XSBtYXJrX2FzeW5jX2NhcGFibGUoKTogc3VicGF0aCBzaG91bGQgbWF0Y2gg c3VicGxhbgoKbWFya19hc3luY19jYXBhYmxlKCkgYmVsaWV2ZXMgdGhhdCB0aGUgcGF0aCBjb3Jy ZXNwb25kcyB0byB0aGUgcGxhbi4gIFRoaXMgaXMKbm90IHRydWUgd2hlbiBjcmVhdGluZ19bbWVy Z2VfXWFwcGVuZF9wbGFuKCkgaW5zZXJ0cyAoSW5jcmVtZW50YWwpU29ydCBub2RlLgpJbiB0aGlz IGNhc2UsICBtYXJrX2FzeW5jX2NhcGFibGUoKSBjYW4gdHJlYXQgdGhlIFNvcnQgcGxhbiBub2Rl IGFzIHNvbWUgb3RoZXIKbm9kZSBhbmQgY3Jhc2guICBGaXggdGhpcyBieSBleHBsaWNpdGx5IGhh bmRsaW5nIHRoZSAoSW5jcmVtZW50YWwpU29ydCBub2RlcwphcyBub3QgYXN5bmMtY2FwYWJsZS4g IEFsc28sIG1vdmUgdGhpcyBjaGVjayBvbiB0b3Agb2YgdGhlIHN3aXRjaCgpIGFzIGl0CnJlcGVh dHMgaW4gYWxsIHRoZSBjYXNlcy4KClRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIE1lcmdlQXBw ZW5kIG5vZGUgYXN5bmMtY2FwYWJsZSwgd2hpY2ggd2lsbCBiZQppbXBsZW1lbnRlZCBpbiB0aGUg c3Vic2VxdWVudCBjb21taXRzLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS81OWJl MTk0YzVhNDA5ZmI5ZmM5ZjIwMzE1ODFiOGE0NCU0MHBvc3RncmVzcHJvLnJ1CkF1dGhvcjogQWxl eGFuZGVyIFB5aGFsb3YgPGEucHloYWxvdkBwb3N0Z3Jlc3Byby5ydT4KUmV2aWV3ZWQtYnk6IE1h dGhldXMgQWxjYW50YXJhIDxtYXRoZXVzc3NpbHY5N0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBB bGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0Z3Jlc3Byby5ydT4KLS0tCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgfCAyOSArKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggYzdiYzQxYzMwZDcuLjE1 MDI4OTYxM2NkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0x MTMxLDE5ICsxMTMxLDIwIEBAIGNyZWF0ZV9qb2luX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEpv aW5QYXRoICpiZXN0X3BhdGgpCiBzdGF0aWMgYm9vbAogbWFya19hc3luY19jYXBhYmxlX3BsYW4o UGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIHsKKwkvKgorCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxh biBub2RlIGluY2x1ZGVzIGEgZ2F0aW5nIFJlc3VsdCBub2RlLCBhIFNvcnQgbm9kZSwKKwkgKiBv ciBhbiBJbmNyZW1lbnRhbFNvcnQgbm9kZSwgd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25v dXNseS4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpIHx8 CisJCUlzQShwbGFuLCBJbmNyZW1lbnRhbFNvcnQpKQorCQlyZXR1cm4gZmFsc2U7CisKIAlzd2l0 Y2ggKG5vZGVUYWcocGF0aCkpCiAJewogCQljYXNlIFRfU3VicXVlcnlTY2FuUGF0aDoKIAkJCXsK IAkJCQlTdWJxdWVyeVNjYW4gKnNjYW5fcGxhbiA9IChTdWJxdWVyeVNjYW4gKikgcGxhbjsKIAot CQkJCS8qCi0JCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRp bmcgUmVzdWx0IG5vZGUsCi0JCQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNs eS4KLQkJCQkgKi8KLQkJCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCi0JCQkJCXJldHVybiBmYWxz ZTsKLQogCQkJCS8qCiAJCQkJICogSWYgYSBTdWJxdWVyeVNjYW4gbm9kZSBhdG9wIG9mIGFuIGFz eW5jLWNhcGFibGUgcGxhbiBub2RlCiAJCQkJICogaXMgZGVsZXRhYmxlLCBjb25zaWRlciBpdCBh cyBhc3luYy1jYXBhYmxlLgpAQCAtMTE1OCwxMyArMTE1OSw2IEBAIG1hcmtfYXN5bmNfY2FwYWJs ZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAJCQl7CiAJCQkJRmR3Um91dGluZSAqZmR3 cm91dGluZSA9IHBhdGgtPnBhcmVudC0+ZmR3cm91dGluZTsKIAotCQkJCS8qCi0JCQkJICogSWYg dGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRpbmcgUmVzdWx0IG5vZGUsCi0J CQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KLQkJCQkgKi8KLQkJCQlp ZiAoSXNBKHBsYW4sIFJlc3VsdCkpCi0JCQkJCXJldHVybiBmYWxzZTsKLQogCQkJCUFzc2VydChm ZHdyb3V0aW5lICE9IE5VTEwpOwogCQkJCWlmIChmZHdyb3V0aW5lLT5Jc0ZvcmVpZ25QYXRoQXN5 bmNDYXBhYmxlICE9IE5VTEwgJiYKIAkJCQkJZmR3cm91dGluZS0+SXNGb3JlaWduUGF0aEFzeW5j Q2FwYWJsZSgoRm9yZWlnblBhdGggKikgcGF0aCkpCkBAIC0xMTczLDEzICsxMTY3LDYgQEAgbWFy a19hc3luY19jYXBhYmxlX3BsYW4oUGxhbiAqcGxhbiwgUGF0aCAqcGF0aCkKIAkJCX0KIAkJY2Fz ZSBUX1Byb2plY3Rpb25QYXRoOgogCi0JCQkvKgotCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFu IG5vZGUgaW5jbHVkZXMgYSBSZXN1bHQgbm9kZSBmb3IgdGhlCi0JCQkgKiBwcm9qZWN0aW9uLCB3 ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJvbm91c2x5LgotCQkJICovCi0JCQlpZiAoSXNBKHBs YW4sIFJlc3VsdCkpCi0JCQkJcmV0dXJuIGZhbHNlOwotCiAJCQkvKgogCQkJICogY3JlYXRlX3By b2plY3Rpb25fcGxhbigpIHdvdWxkIGhhdmUgcHVsbGVkIHVwIHRoZSBzdWJwbGFuLCBzbwogCQkJ ICogY2hlY2sgdGhlIGNhcGFiaWxpdHkgdXNpbmcgdGhlIHN1YnBhdGguCi0tIAoyLjM5LjUgKEFw cGxlIEdpdC0xNTQpCgo= --000000000000085fe4064ed3bfdb Content-Type: application/octet-stream; name="v18-0004-Move-async-infrastructure-into-shared-AppendBase.patch" Content-Disposition: attachment; filename="v18-0004-Move-async-infrastructure-into-shared-AppendBase.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnvenf13 RnJvbSA3NzVlNjNhY2IwN2Q2YTk4NjQ1MTAzMmE3ZjAzNmZmMTg0MDFmNjk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogU3VuLCA1IEFwciAyMDI2IDA0OjQyOjMyICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTggNC81XSBNb3ZlIGFzeW5jIGluZnJhc3RydWN0dXJlIGludG8gc2hhcmVkIEFwcGVu ZEJhc2UKIGZ1bmN0aW9ucwoKTW92ZSBhbGwgYXN5bmMtcmVsYXRlZCBjb2RlIGZyb20gbm9kZUFw cGVuZC5jIGludG8gdGhlIHNoYXJlZApleGVjQXBwZW5kLmMsIHByZXBhcmluZyBNZXJnZUFwcGVu ZCB0byBzdXBwb3J0IGFzeW5jIGZvcmVpZ24gc2NhbgpzdWJwbGFucy4KCiAgLSBFeGVjSW5pdEFw cGVuZEJhc2UoKSBub3cgZGV0ZWN0cyBhc3luYy1jYXBhYmxlIHN1YnBsYW5zIGFuZCBhbGxvY2F0 ZXMKICAgIGFzeW5jIHJlcXVlc3QvcmVzdWx0IHN0YXRlLgogIC0gRXhlY1JlU2NhbkFwcGVuZEJh c2UoKSBub3cgcmVzZXRzIGFzeW5jIHJlcXVlc3Qgc3RhdGUuCiAgLSBFeGVjQXBwZW5kQmFzZUFz eW5jQmVnaW4oKTogZmlyZSBhc3luYyByZXF1ZXN0cyAobW92ZWQgZnJvbQogICAgbm9kZUFwcGVu ZC5jJ3MgRXhlY0FwcGVuZEFzeW5jQmVnaW4pLgogIC0gRXhlY0FwcGVuZEJhc2VBc3luY0V2ZW50 V2FpdCgpOiB3YWl0L3BvbGwgZm9yIGFzeW5jIGV2ZW50cyAobW92ZWQKICAgIGZyb20gbm9kZUFw cGVuZC5jJ3MgRXhlY0FwcGVuZEFzeW5jRXZlbnRXYWl0KS4KICAtIGNsYXNzaWZ5X21hdGNoaW5n X3N1YnBsYW5zX2NvbW1vbigpOiBuZXcgaGVscGVyIHRvIHNwbGl0IHZhbGlkCiAgICBzdWJwbGFu cyBpbnRvIHN5bmMgYW5kIGFzeW5jIHNldHMuCiAgLSBNZXJnZUFwcGVuZCBub3cgdXNlcyB2YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkIGZsYWcgaW5zdGVhZCBvZgogICAgY2hlY2tpbmcgdmFsaWRf c3VicGxhbnMgPT0gTlVMTC4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vNTliZTE5 NGM1YTQwOWZiOWZjOWYyMDMxNTgxYjhhNDQlNDBwb3N0Z3Jlc3Byby5ydQpBdXRob3I6IE1hdGhl dXMgQWxjYW50YXJhIDxtYXRoZXVzc3NpbHY5N0BnbWFpbC5jb20+CkNvLWF1dGhvcmVkLWJ5OiBB bGV4YW5kZXIgS29yb3Rrb3YgPGFla29yb3Rrb3ZAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQWxl eGFuZGVyIFB5aGFsb3YgPGEucHloYWxvdkBwb3N0Z3Jlc3Byby5ydT4KUmV2aWV3ZWQtYnk6IEFs ZW5hIFJ5YmFraW5hIDxhLnJ5YmFraW5hQHBvc3RncmVzcHJvLnJ1PgotLS0KIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYyAgICAgIHwgMjMyICsrKysrKysrKysrKysrKysrKysrKysr Ky0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyAgICAgIHwgMjA4ICsrLS0tLS0t LS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jIHwg ICA1ICstCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQXBwZW5kLmggICAgICB8ICAgNyArCiA0 IGZpbGVzIGNoYW5nZWQsIDI1MCBpbnNlcnRpb25zKCspLCAyMDIgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0FwcGVuZC5jCmluZGV4IDk1OTlkMTBhOTUyLi5kNmJlYmFiYmQzMiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQuYwpAQCAtMTQsOCArMTQsMTQgQEAKICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FwcGVuZC5oIgorI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWNBc3luYy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24u aCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9yYWdlL3dhaXRldmVu dHNldC5oIgorCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCQkJMTYKIAogLyogIEJlZ2luIGFs bCBvZiB0aGUgc3Vic2NhbnMgb2YgYW4gQXBwZW5kQmFzZSBub2RlLiAqLwogdm9pZApAQCAtMjks NyArMzUsOSBAQCBFeGVjSW5pdEFwcGVuZEJhc2UoQXBwZW5kQmFzZVN0YXRlICpzdGF0ZSwKIAlQ bGFuU3RhdGUgKiphcHBlbmRwbGFuc3RhdGVzOwogCWNvbnN0IFR1cGxlVGFibGVTbG90T3BzICph cHBlbmRvcHM7CiAJQml0bWFwc2V0ICAqdmFsaWRzdWJwbGFuczsKKwlCaXRtYXBzZXQgICphc3lu Y3BsYW5zOwogCWludAkJCW5wbGFuczsKKwlpbnQJCQluYXN5bmNwbGFuczsKIAlpbnQJCQlmaXJz dHZhbGlkOwogCWludAkJCWksCiAJCQkJajsKQEAgLTg3LDEyICs5NSwyNSBAQCBFeGVjSW5pdEFw cGVuZEJhc2UoQXBwZW5kQmFzZVN0YXRlICpzdGF0ZSwKIAkgKiBXaGlsZSBhdCBpdCwgZmluZCBv dXQgdGhlIGZpcnN0IHZhbGlkIHBhcnRpYWwgcGxhbi4KIAkgKi8KIAlqID0gMDsKKwlhc3luY3Bs YW5zID0gTlVMTDsKKwluYXN5bmNwbGFucyA9IDA7CiAJZmlyc3R2YWxpZCA9IG5wbGFuczsKIAlp ID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+ PSAwKQogCXsKIAkJUGxhbgkgICAqaW5pdE5vZGUgPSAoUGxhbiAqKSBsaXN0X250aChub2RlLT5z dWJwbGFucywgaSk7CiAKKwkJLyoKKwkJICogUmVjb3JkIGFzeW5jIHN1YnBsYW5zLiAgV2hlbiBl eGVjdXRpbmcgRXZhbFBsYW5RdWFsLCB3ZSB0cmVhdCB0aGVtCisJCSAqIGFzIHN5bmMgb25lczsg ZG9uJ3QgZG8gdGhpcyB3aGVuIGluaXRpYWxpemluZyBhbiBFdmFsUGxhblF1YWwgcGxhbgorCQkg KiB0cmVlLgorCQkgKi8KKwkJaWYgKGluaXROb2RlLT5hc3luY19jYXBhYmxlICYmIGVzdGF0ZS0+ ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKQorCQl7CisJCQlhc3luY3BsYW5zID0gYm1zX2FkZF9tZW1i ZXIoYXN5bmNwbGFucywgaik7CisJCQluYXN5bmNwbGFucysrOworCQl9CisKIAkJLyoKIAkJICog UmVjb3JkIHRoZSBsb3dlc3QgYXBwZW5kcGxhbnMgaW5kZXggd2hpY2ggaXMgYSB2YWxpZCBwYXJ0 aWFsIHBsYW4uCiAJCSAqLwpAQCAtMTMwLDE1ICsxNTEsMzggQEAgRXhlY0luaXRBcHBlbmRCYXNl KEFwcGVuZEJhc2VTdGF0ZSAqc3RhdGUsCiAJCXN0YXRlLT5wcy5yZXN1bHRvcHNmaXhlZCA9IGZh bHNlOwogCX0KIAotCS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUgdG8gc2FmZSBkZWZhdWx0cyAq LwotCXN0YXRlLT5hc3luY3BsYW5zID0gTlVMTDsKLQlzdGF0ZS0+bmFzeW5jcGxhbnMgPSAwOwor CS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUgKi8KKwlzdGF0ZS0+YXN5bmNwbGFucyA9IGFzeW5j cGxhbnM7CisJc3RhdGUtPm5hc3luY3BsYW5zID0gbmFzeW5jcGxhbnM7CiAJc3RhdGUtPmFzeW5j cmVxdWVzdHMgPSBOVUxMOwogCXN0YXRlLT5hc3luY3Jlc3VsdHMgPSBOVUxMOwogCXN0YXRlLT5u ZWVkcmVxdWVzdCA9IE5VTEw7CiAJc3RhdGUtPmV2ZW50c2V0ID0gTlVMTDsKIAlzdGF0ZS0+dmFs aWRfYXN5bmNwbGFucyA9IE5VTEw7CiAKKwlpZiAobmFzeW5jcGxhbnMgPiAwKQorCXsKKwkJc3Rh dGUtPmFzeW5jcmVxdWVzdHMgPSBwYWxsb2MwX2FycmF5KEFzeW5jUmVxdWVzdCAqLCBucGxhbnMp OworCisJCWkgPSAtMTsKKwkJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGFzeW5jcGxhbnMs IGkpKSA+PSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXE7CisKKwkJCWFyZXEgPSBwYWxs b2Nfb2JqZWN0KEFzeW5jUmVxdWVzdCk7CisJCQlhcmVxLT5yZXF1ZXN0b3IgPSAoUGxhblN0YXRl ICopIHN0YXRlOworCQkJYXJlcS0+cmVxdWVzdGVlID0gYXBwZW5kcGxhbnN0YXRlc1tpXTsKKwkJ CWFyZXEtPnJlcXVlc3RfaW5kZXggPSBpOworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZh bHNlOworCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0 ID0gTlVMTDsKKworCQkJc3RhdGUtPmFzeW5jcmVxdWVzdHNbaV0gPSBhcmVxOworCQl9CisKKwkJ c3RhdGUtPmFzeW5jcmVzdWx0cyA9IHBhbGxvYzBfYXJyYXkoVHVwbGVUYWJsZVNsb3QgKiwgbmFz eW5jcGxhbnMpOworCX0KKwogCS8qCiAJICogTWlzY2VsbGFuZW91cyBpbml0aWFsaXphdGlvbgog CSAqLwpAQCAtMTQ5LDYgKzE5Myw3IEBAIHZvaWQKIEV4ZWNSZVNjYW5BcHBlbmRCYXNlKEFwcGVu ZEJhc2VTdGF0ZSAqbm9kZSkKIHsKIAlpbnQJCQlpOworCWludAkJCW5hc3luY3BsYW5zID0gbm9k ZS0+bmFzeW5jcGxhbnM7CiAKIAkvKgogCSAqIElmIGFueSBQQVJBTV9FWEVDIFBhcmFtcyB1c2Vk IGluIHBydW5pbmcgZXhwcmVzc2lvbnMgaGF2ZSBjaGFuZ2VkLCB0aGVuCkBAIC0xODQsNiArMjI5 LDE4NyBAQCBFeGVjUmVTY2FuQXBwZW5kQmFzZShBcHBlbmRCYXNlU3RhdGUgKm5vZGUpCiAJCWlm IChzdWJub2RlLT5jaGdQYXJhbSA9PSBOVUxMKQogCQkJRXhlY1JlU2NhbihzdWJub2RlKTsKIAl9 CisKKwkvKiBSZXNldCBhc3luYyBzdGF0ZSAqLworCWlmIChuYXN5bmNwbGFucyA+IDApCisJewor CQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc3luY3BsYW5z LCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXN5bmNyZXF1 ZXN0c1tpXTsKKworCQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOworCQkJYXJlcS0+ cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOworCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKKwkJfQor CisJCWJtc19mcmVlKG5vZGUtPm5lZWRyZXF1ZXN0KTsKKwkJbm9kZS0+bmVlZHJlcXVlc3QgPSBO VUxMOworCX0KK30KKworLyogIFdhaXQgb3IgcG9sbCBmb3IgZmlsZSBkZXNjcmlwdG9yIGV2ZW50 cyBhbmQgZmlyZSBjYWxsYmFja3MuICovCit2b2lkCitFeGVjQXBwZW5kQmFzZUFzeW5jRXZlbnRX YWl0KEFwcGVuZEJhc2VTdGF0ZSAqbm9kZSwgaW50IHRpbWVvdXQsCisJCQkJCQkJIHVpbnQzMiB3 YWl0X2V2ZW50X2luZm8pCit7CisJaW50CQkJbmV2ZW50cyA9IG5vZGUtPm5hc3luY3BsYW5zICsg MjsJLyogb25lIGZvciBQTSBkZWF0aCBhbmQKKwkJCQkJCQkJCQkJCQkgKiBvbmUgZm9yIGxhdGNo ICovCisJaW50CQkJbm9jY3VycmVkOworCWludAkJCWk7CisJV2FpdEV2ZW50CW9jY3VycmVkX2V2 ZW50W0VWRU5UX0JVRkZFUl9TSVpFXTsKKworCUFzc2VydChub2RlLT5ldmVudHNldCA9PSBOVUxM KTsKKworCW5vZGUtPmV2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNvdXJj ZU93bmVyLCBuZXZlbnRzKTsKKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5ldmVudHNldCwgV0xf RVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBOVUxMLCBOVUxMKTsK KworCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8gYWRkIGFuIGV2ZW50 LiAqLworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+YXN5bmNw bGFucywgaSkpID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc3luY3Jl cXVlc3RzW2ldOworCisJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQorCQkJRXhlY0FzeW5j Q29uZmlndXJlV2FpdChhcmVxKTsKKwl9CisKKwkvKgorCSAqIE5vIG5lZWQgZm9yIGZ1cnRoZXIg cHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBjb25maWd1cmVkIGFueQorCSAqIGV2 ZW50cy4KKwkgKi8KKwlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMobm9kZS0+ZXZlbnRz ZXQpID09IDEpCisJeworCQlGcmVlV2FpdEV2ZW50U2V0KG5vZGUtPmV2ZW50c2V0KTsKKwkJbm9k ZS0+ZXZlbnRzZXQgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIHBy b2Nlc3MgbGF0Y2ggdG8gdGhlIHNldCwgc28gdGhhdCB3ZSB3YWtlIHVwIHRvIHByb2Nlc3MgdGhl CisJICogc3RhbmRhcmQgaW50ZXJydXB0cyB3aXRoIENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkuCisJ ICoKKwkgKiBOT1RFOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBpdCdzIGltcG9ydGFudCB0aGF0 IHRoaXMgaXMgYWRkZWQgdG8gdGhlCisJICogV2FpdEV2ZW50U2V0IGFmdGVyIHRoZSBFeGVjQXN5 bmNDb25maWd1cmVXYWl0KCkgY2FsbHMuICBOYW1lbHksCisJICogcG9zdGdyZXNfZmR3IGNhbGxz ICJHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID09IDEiIHRvIGNoZWNrIGlmCisJICog YW55IG90aGVyIGV2ZW50cyBhcmUgaW4gdGhlIHNldC4gIFRoYXQncyBhIHBvb3IgZGVzaWduLCBp dCdzCisJICogcXVlc3Rpb25hYmxlIGZvciBwb3N0Z3Jlc19mZHcgdG8gYmUgZG9pbmcgdGhhdCBp biB0aGUgZmlyc3QgcGxhY2UsIGJ1dAorCSAqIHdlIGNhbm5vdCBjaGFuZ2UgaXQgbm93LiAgVGhl IHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRvIG90aGVyCisJICogZXh0ZW5zaW9u cyB0b28uCisJICovCisJQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+ZXZlbnRzZXQsIFdMX0xBVENI X1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJICBNeUxhdGNoLCBOVUxMKTsKKworCS8qIFJl dHVybiBhdCBtb3N0IEVWRU5UX0JVRkZFUl9TSVpFIGV2ZW50cyBpbiBvbmUgY2FsbC4gKi8KKwlp ZiAobmV2ZW50cyA+IEVWRU5UX0JVRkZFUl9TSVpFKQorCQluZXZlbnRzID0gRVZFTlRfQlVGRkVS X1NJWkU7CisKKwkvKgorCSAqIElmIHRoZSB0aW1lb3V0IGlzIC0xLCB3YWl0IHVudGlsIGF0IGxl YXN0IG9uZSBldmVudCBvY2N1cnMuICBJZiB0aGUKKwkgKiB0aW1lb3V0IGlzIDAsIHBvbGwgZm9y IGV2ZW50cywgYnV0IGRvIG5vdCB3YWl0IGF0IGFsbC4KKwkgKi8KKwlub2NjdXJyZWQgPSBXYWl0 RXZlbnRTZXRXYWl0KG5vZGUtPmV2ZW50c2V0LCB0aW1lb3V0LCBvY2N1cnJlZF9ldmVudCwKKwkJ CQkJCQkJIG5ldmVudHMsIHdhaXRfZXZlbnRfaW5mbyk7CisJRnJlZVdhaXRFdmVudFNldChub2Rl LT5ldmVudHNldCk7CisJbm9kZS0+ZXZlbnRzZXQgPSBOVUxMOworCWlmIChub2NjdXJyZWQgPT0g MCkKKwkJcmV0dXJuOworCisJLyogRGVsaXZlciBub3RpZmljYXRpb25zLiAqLworCWZvciAoaSA9 IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKKwl7CisJCVdhaXRFdmVudCAgKncgPSAmb2NjdXJyZWRf ZXZlbnRbaV07CisKKwkJLyoKKwkJICogRWFjaCB3YWl0aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUg cmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCisJCSAqIHVzZXJfZGF0YSBwb2ludGluZyBi YWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCisJCSAqLworCQlpZiAoKHctPmV2ZW50cyAmIFdMX1NP Q0tFVF9SRUFEQUJMRSkgIT0gMCkKKwkJeworCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5j UmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7CisKKwkJCWlmIChhcmVxLT5jYWxsYmFja19wZW5kaW5n KQorCQkJeworCQkJCS8qCisJCQkJICogTWFyayBpdCBhcyBubyBsb25nZXIgbmVlZGluZyBhIGNh bGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCisJCQkJICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBj YWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNldHMKKwkJCQkgKiB0aGUgZmxhZy4KKwkJ CQkgKi8KKwkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7CisKKwkJCQkvKiBEbyB0 aGUgYWN0dWFsIHdvcmsuICovCisJCQkJRXhlY0FzeW5jTm90aWZ5KGFyZXEpOworCQkJfQorCQl9 CisKKwkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVwdHMgKi8KKwkJaWYgKCh3LT5ldmVudHMg JiBXTF9MQVRDSF9TRVQpICE9IDApCisJCXsKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9CisJfQorfQorCisvKiAgQmVnaW4gZXhlY3V0aW5n IGFzeW5jLWNhcGFibGUgc3VicGxhbnMuICovCit2b2lkCitFeGVjQXBwZW5kQmFzZUFzeW5jQmVn aW4oQXBwZW5kQmFzZVN0YXRlICpub2RlKQoreworCWludAkJCWk7CisKKwkvKiBCYWNrd2FyZCBz Y2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgQXBwZW5kcy4gKi8KKwlBc3NlcnQo U2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisK KwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHN1YnBsYW5z ICovCisJQXNzZXJ0KG5vZGUtPm5wbGFucyA+IDApOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJl IGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBhc3luYyBzdWJwbGFucy4gKi8KKwlBc3NlcnQobm9k ZS0+bmFzeW5jcGxhbnMgPiAwKTsKKworCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRo ZSB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25l eHRfbWVtYmVyKG5vZGUtPnZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJQXN5bmNS ZXF1ZXN0ICphcmVxID0gbm9kZS0+YXN5bmNyZXF1ZXN0c1tpXTsKKworCQlBc3NlcnQoYXJlcS0+ cmVxdWVzdF9pbmRleCA9PSBpKTsKKwkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsK KworCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCisJCUV4ZWNBc3luY1JlcXVlc3QoYXJlcSk7 CisJfQorfQorCisvKgorICogY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnNfY29tbW9uCisgKgkJ Q29tbW9uIHBhcnQgb2YgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSBmb3IgQXBwZW5kIGFu ZCBNZXJnZUFwcGVuZC4KKyAqCisgKiBTcGxpdHMgdmFsaWRfc3VicGxhbnMgaW50byBzeW5jIGFu ZCBhc3luYyBzZXRzLiAgUmV0dXJucyBmYWxzZSBpZiB0aGVyZQorICogYXJlIG5vIHZhbGlkIGFz eW5jIHN1YnBsYW5zLCB0cnVlIG90aGVyd2lzZS4KKyAqLworYm9vbAorY2xhc3NpZnlfbWF0Y2hp bmdfc3VicGxhbnNfY29tbW9uKEJpdG1hcHNldCAqKnZhbGlkX3N1YnBsYW5zLAorCQkJCQkJCQkg IEJpdG1hcHNldCAqYXN5bmNwbGFucywKKwkJCQkJCQkJICBCaXRtYXBzZXQgKip2YWxpZF9hc3lu Y3BsYW5zKQoreworCUFzc2VydCgqdmFsaWRfYXN5bmNwbGFucyA9PSBOVUxMKTsKKworCS8qIENo ZWNrZWQgYnkgY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMoKSAqLworCUFzc2VydCghYm1zX2lz X2VtcHR5KCp2YWxpZF9zdWJwbGFucykpOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBh cmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCisJaWYgKCFibXNfb3ZlcmxhcCgqdmFsaWRf c3VicGxhbnMsIGFzeW5jcGxhbnMpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBHZXQgdmFsaWQg YXN5bmMgc3VicGxhbnMuICovCisJKnZhbGlkX2FzeW5jcGxhbnMgPSBibXNfaW50ZXJzZWN0KGFz eW5jcGxhbnMsCisJCQkJCQkJCQkgICp2YWxpZF9zdWJwbGFucyk7CisKKwkvKiBBZGp1c3QgdGhl IHZhbGlkIHN1YnBsYW5zIHRvIGNvbnRhaW4gc3luYyBzdWJwbGFucyBvbmx5LiAqLworCSp2YWxp ZF9zdWJwbGFucyA9IGJtc19kZWxfbWVtYmVycygqdmFsaWRfc3VicGxhbnMsCisJCQkJCQkJCQkg ICp2YWxpZF9hc3luY3BsYW5zKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyogIFNodXRzIGRvd24g dGhlIHN1YnBsYW5zIG9mIGFuIEFwcGVuZEJhc2Ugbm9kZS4gKi8KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVB cHBlbmQuYwppbmRleCBmMjY3ZmZlMTNmYS4uOTVlZDRkODZlMjAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlQXBwZW5kLmMKQEAgLTg0LDcgKzg0LDYgQEAgc3RydWN0IFBhcmFsbGVsQXBwZW5kU3RhdGUK IH07CiAKICNkZWZpbmUgSU5WQUxJRF9TVUJQTEFOX0lOREVYCQktMQotI2RlZmluZSBFVkVOVF9C VUZGRVJfU0laRQkJCTE2CiAKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY0FwcGVuZChQbGFu U3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgYm9vbCBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2FsbHko QXBwZW5kU3RhdGUgKm5vZGUpOwpAQCAtMTEyLDEwICsxMTEsNiBAQCBBcHBlbmRTdGF0ZSAqCiBF eGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQog ewogCUFwcGVuZFN0YXRlICphcHBlbmRzdGF0ZSA9IG1ha2VOb2RlKEFwcGVuZFN0YXRlKTsKLQlC aXRtYXBzZXQgICphc3luY3BsYW5zOwotCWludAkJCW5hc3luY3BsYW5zOwotCWludAkJCW5wbGFu czsKLQlpbnQJCQlpOwogCiAJLyogY2hlY2sgZm9yIHVuc3VwcG9ydGVkIGZsYWdzICovCiAJQXNz ZXJ0KCEoZWZsYWdzICYgRVhFQ19GTEFHX01BUkspKTsKQEAgLTE0MCw1OSArMTM1LDExIEBAIEV4 ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJ CQkJCSAgIG5vZGUtPmZpcnN0X3BhcnRpYWxfcGxhbiwKIAkJCQkJICAgJmFwcGVuZHN0YXRlLT5h c19maXJzdF9wYXJ0aWFsX3BsYW4pOwogCi0JbnBsYW5zID0gYXBwZW5kc3RhdGUtPmFzLm5wbGFu czsKKwlpZiAoYXBwZW5kc3RhdGUtPmFzLm5hc3luY3BsYW5zID4gMCAmJiBhcHBlbmRzdGF0ZS0+ YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxh bnMoYXBwZW5kc3RhdGUpOwogCi0JLyoKLQkgKiBEZXRlY3QgYXN5bmMtY2FwYWJsZSBzdWJwbGFu cy4gIFdoZW4gZXhlY3V0aW5nIEV2YWxQbGFuUXVhbCwgd2UgdHJlYXQKLQkgKiB0aGVtIGFzIHN5 bmMgb25lczsgZG9uJ3QgZG8gdGhpcyB3aGVuIGluaXRpYWxpemluZyBhbiBFdmFsUGxhblF1YWwg cGxhbgotCSAqIHRyZWUuCi0JICovCi0JYXN5bmNwbGFucyA9IE5VTEw7Ci0JbmFzeW5jcGxhbnMg PSAwOwotCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKLQl7Ci0JCWlmIChhcHBlbmRzdGF0 ZS0+YXMucGxhbnNbaV0tPnBsYW4tPmFzeW5jX2NhcGFibGUgJiYKLQkJCWVzdGF0ZS0+ZXNfZXBx X2FjdGl2ZSA9PSBOVUxMKQotCQl7Ci0JCQlhc3luY3BsYW5zID0gYm1zX2FkZF9tZW1iZXIoYXN5 bmNwbGFucywgaSk7Ci0JCQluYXN5bmNwbGFucysrOwotCQl9Ci0JfQotCi0JLyogSW5pdGlhbGl6 ZSBhc3luYyBzdGF0ZSAqLwotCWFwcGVuZHN0YXRlLT5hcy5hc3luY3BsYW5zID0gYXN5bmNwbGFu czsKLQlhcHBlbmRzdGF0ZS0+YXMubmFzeW5jcGxhbnMgPSBuYXN5bmNwbGFuczsKLQlhcHBlbmRz dGF0ZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJYXBwZW5kc3RhdGUtPmFzX25hc3luY3JlbWFp biA9IDA7CiAKLQlpZiAobmFzeW5jcGxhbnMgPiAwKQotCXsKLQkJYXBwZW5kc3RhdGUtPmFzLmFz eW5jcmVxdWVzdHMgPSAoQXN5bmNSZXF1ZXN0ICoqKQotCQkJcGFsbG9jMChucGxhbnMgKiBzaXpl b2YoQXN5bmNSZXF1ZXN0ICopKTsKLQotCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0 X21lbWJlcihhc3luY3BsYW5zLCBpKSkgPj0gMCkKLQkJewotCQkJQXN5bmNSZXF1ZXN0ICphcmVx OwotCi0JCQlhcmVxID0gcGFsbG9jX29iamVjdChBc3luY1JlcXVlc3QpOwotCQkJYXJlcS0+cmVx dWVzdG9yID0gKFBsYW5TdGF0ZSAqKSBhcHBlbmRzdGF0ZTsKLQkJCWFyZXEtPnJlcXVlc3RlZSA9 IGFwcGVuZHN0YXRlLT5hcy5wbGFuc1tpXTsKLQkJCWFyZXEtPnJlcXVlc3RfaW5kZXggPSBpOwot CQkJYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVzdF9jb21w bGV0ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQotCQkJYXBwZW5kc3RhdGUt PmFzLmFzeW5jcmVxdWVzdHNbaV0gPSBhcmVxOwotCQl9Ci0KLQkJYXBwZW5kc3RhdGUtPmFzLmFz eW5jcmVzdWx0cyA9IChUdXBsZVRhYmxlU2xvdCAqKikKLQkJCXBhbGxvYzAobmFzeW5jcGxhbnMg KiBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikpOwotCi0JCWlmIChhcHBlbmRzdGF0ZS0+YXMudmFs aWRfc3VicGxhbnNfaWRlbnRpZmllZCkKLQkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKGFw cGVuZHN0YXRlKTsKLQl9Ci0KIAkvKiBGb3IgcGFyYWxsZWwgcXVlcnksIHRoaXMgd2lsbCBiZSBv dmVycmlkZGVuIGxhdGVyLiAqLwogCWFwcGVuZHN0YXRlLT5jaG9vc2VfbmV4dF9zdWJwbGFuID0g Y2hvb3NlX25leHRfc3VicGxhbl9sb2NhbGx5OwogCkBAIC0zMTIsMjkgKzI1OSwxNiBAQCBFeGVj RW5kQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQogdm9pZAogRXhlY1JlU2NhbkFwcGVuZChBcHBl bmRTdGF0ZSAqbm9kZSkKIHsKKwogCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+YXMubmFzeW5j cGxhbnM7CiAKIAlFeGVjUmVTY2FuQXBwZW5kQmFzZSgmbm9kZS0+YXMpOwogCi0JLyogUmVzZXQg YXN5bmMgc3RhdGUgKi8KKwkvKiBSZXNldCBBcHBlbmQtc3BlY2lmaWMgc3RhdGUgKi8KIAlpZiAo bmFzeW5jcGxhbnMgPiAwKQogCXsKLQkJaW50CQkJaTsKLQotCQlpID0gLTE7Ci0JCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy5hc3luY3BsYW5zLCBpKSkgPj0gMCkKLQkJewot CQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXMuYXN5bmNyZXF1ZXN0c1tpXTsKLQotCQkJ YXJlcS0+Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwotCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0 ZSA9IGZhbHNlOwotCQkJYXJlcS0+cmVzdWx0ID0gTlVMTDsKLQkJfQotCiAJCW5vZGUtPmFzX25h c3luY3Jlc3VsdHMgPSAwOwogCQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSAwOwotCQlibXNfZnJl ZShub2RlLT5hcy5uZWVkcmVxdWVzdCk7Ci0JCW5vZGUtPmFzLm5lZWRyZXF1ZXN0ID0gTlVMTDsK IAl9CiAKIAkvKiBMZXQgY2hvb3NlX25leHRfc3VicGxhbl8qIGZ1bmN0aW9uIGhhbmRsZSBzZXR0 aW5nIHRoZSBmaXJzdCBzdWJwbGFuICovCkBAIC03NTQsMjEgKzY4OCw3IEBAIEV4ZWNBcHBlbmRB c3luY0JlZ2luKEFwcGVuZFN0YXRlICpub2RlKQogCWlmIChub2RlLT5hc19uYXN5bmNyZW1haW4g PT0gMCkKIAkJcmV0dXJuOwogCi0JLyogTWFrZSBhIHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIHZh bGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCXsKLQkJaW50CQkJaSA9IC0xOwotCi0JCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkK LQkJewotCQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXMuYXN5bmNyZXF1ZXN0c1tpXTsK LQotCQkJQXNzZXJ0KGFyZXEtPnJlcXVlc3RfaW5kZXggPT0gaSk7Ci0JCQlBc3NlcnQoIWFyZXEt PmNhbGxiYWNrX3BlbmRpbmcpOwotCi0JCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCQlF eGVjQXN5bmNSZXF1ZXN0KGFyZXEpOwotCQl9Ci0JfQorCUV4ZWNBcHBlbmRCYXNlQXN5bmNCZWdp bigmbm9kZS0+YXMpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04ODMsMTA1ICs4MDMsMTIgQEAgRXhl Y0FwcGVuZEFzeW5jUmVxdWVzdChBcHBlbmRTdGF0ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipy ZXN1bHQpCiBzdGF0aWMgdm9pZAogRXhlY0FwcGVuZEFzeW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRl ICpub2RlKQogewotCWludAkJCW5ldmVudHMgPSBub2RlLT5hcy5uYXN5bmNwbGFucyArIDI7CiAJ bG9uZwkJdGltZW91dCA9IG5vZGUtPmFzX3N5bmNkb25lID8gLTEgOiAwOwotCVdhaXRFdmVudAlv Y2N1cnJlZF9ldmVudFtFVkVOVF9CVUZGRVJfU0laRV07Ci0JaW50CQkJbm9jY3VycmVkOwotCWlu dAkJCWk7CiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5v IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwogCUFzc2VydChub2RlLT5hc19uYXN5bmNyZW1haW4g PiAwKTsKIAotCUFzc2VydChub2RlLT5hcy5ldmVudHNldCA9PSBOVUxMKTsKLQlub2RlLT5hcy5l dmVudHNldCA9IENyZWF0ZVdhaXRFdmVudFNldChDdXJyZW50UmVzb3VyY2VPd25lciwgbmV2ZW50 cyk7Ci0JQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+YXMuZXZlbnRzZXQsIFdMX0VYSVRfT05fUE1f REVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJCSAgTlVMTCwgTlVMTCk7Ci0KLQkvKiBHaXZl IGVhY2ggd2FpdGluZyBzdWJwbGFuIGEgY2hhbmNlIHRvIGFkZCBhbiBldmVudC4gKi8KLQlpID0g LTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLmFzeW5jcGxhbnMsIGkp KSA+PSAwKQotCXsKLQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXMuYXN5bmNyZXF1ZXN0 c1tpXTsKLQotCQlpZiAoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZykKLQkJCUV4ZWNBc3luY0NvbmZp Z3VyZVdhaXQoYXJlcSk7Ci0JfQotCi0JLyoKLQkgKiBObyBuZWVkIGZvciBmdXJ0aGVyIHByb2Nl c3NpbmcgaWYgbm9uZSBvZiB0aGUgc3VicGxhbnMgY29uZmlndXJlZCBhbnkKLQkgKiBldmVudHMu Ci0JICovCi0JaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKG5vZGUtPmFzLmV2ZW50c2V0 KSA9PSAxKQotCXsKLQkJRnJlZVdhaXRFdmVudFNldChub2RlLT5hcy5ldmVudHNldCk7Ci0JCW5v ZGUtPmFzLmV2ZW50c2V0ID0gTlVMTDsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQWRkIHRo ZSBwcm9jZXNzIGxhdGNoIHRvIHRoZSBzZXQsIHNvIHRoYXQgd2Ugd2FrZSB1cCB0byBwcm9jZXNz IHRoZQotCSAqIHN0YW5kYXJkIGludGVycnVwdHMgd2l0aCBDSEVDS19GT1JfSU5URVJSVVBUUygp LgotCSAqCi0JICogTk9URTogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgaXQncyBpbXBvcnRhbnQg dGhhdCB0aGlzIGlzIGFkZGVkIHRvIHRoZQotCSAqIFdhaXRFdmVudFNldCBhZnRlciB0aGUgRXhl Y0FzeW5jQ29uZmlndXJlV2FpdCgpIGNhbGxzLiAgTmFtZWx5LAotCSAqIHBvc3RncmVzX2ZkdyBj YWxscyAiR2V0TnVtUmVnaXN0ZXJlZFdhaXRFdmVudHMoc2V0KSA9PSAxIiB0byBjaGVjayBpZgot CSAqIGFueSBvdGhlciBldmVudHMgYXJlIGluIHRoZSBzZXQuICBUaGF0J3MgYSBwb29yIGRlc2ln biwgaXQncwotCSAqIHF1ZXN0aW9uYWJsZSBmb3IgcG9zdGdyZXNfZmR3IHRvIGJlIGRvaW5nIHRo YXQgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQKLQkgKiB3ZSBjYW5ub3QgY2hhbmdlIGl0IG5vdy4g IFRoZSBwYXR0ZXJuIGhhcyBwb3NzaWJseSBiZWVuIGNvcGllZCB0byBvdGhlcgotCSAqIGV4dGVu c2lvbnMgdG9vLgotCSAqLwotCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPmFzLmV2ZW50c2V0LCBX TF9MQVRDSF9TRVQsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJCSAgTXlMYXRjaCwgTlVMTCk7Ci0K LQkvKiBSZXR1cm4gYXQgbW9zdCBFVkVOVF9CVUZGRVJfU0laRSBldmVudHMgaW4gb25lIGNhbGwu ICovCi0JaWYgKG5ldmVudHMgPiBFVkVOVF9CVUZGRVJfU0laRSkKLQkJbmV2ZW50cyA9IEVWRU5U X0JVRkZFUl9TSVpFOwotCi0JLyoKLQkgKiBJZiB0aGUgdGltZW91dCBpcyAtMSwgd2FpdCB1bnRp bCBhdCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLiAgSWYgdGhlCi0JICogdGltZW91dCBpcyAwLCBw b2xsIGZvciBldmVudHMsIGJ1dCBkbyBub3Qgd2FpdCBhdCBhbGwuCi0JICovCi0Jbm9jY3VycmVk ID0gV2FpdEV2ZW50U2V0V2FpdChub2RlLT5hcy5ldmVudHNldCwgdGltZW91dCwgb2NjdXJyZWRf ZXZlbnQsCi0JCQkJCQkJCSBuZXZlbnRzLCBXQUlUX0VWRU5UX0FQUEVORF9SRUFEWSk7Ci0JRnJl ZVdhaXRFdmVudFNldChub2RlLT5hcy5ldmVudHNldCk7Ci0Jbm9kZS0+YXMuZXZlbnRzZXQgPSBO VUxMOwotCWlmIChub2NjdXJyZWQgPT0gMCkKLQkJcmV0dXJuOwotCi0JLyogRGVsaXZlciBub3Rp ZmljYXRpb25zLiAqLwotCWZvciAoaSA9IDA7IGkgPCBub2NjdXJyZWQ7IGkrKykKLQl7Ci0JCVdh aXRFdmVudCAgKncgPSAmb2NjdXJyZWRfZXZlbnRbaV07Ci0KLQkJLyoKLQkJICogRWFjaCB3YWl0 aW5nIHN1YnBsYW4gc2hvdWxkIGhhdmUgcmVnaXN0ZXJlZCBpdHMgd2FpdCBldmVudCB3aXRoCi0J CSAqIHVzZXJfZGF0YSBwb2ludGluZyBiYWNrIHRvIGl0cyBBc3luY1JlcXVlc3QuCi0JCSAqLwot CQlpZiAoKHctPmV2ZW50cyAmIFdMX1NPQ0tFVF9SRUFEQUJMRSkgIT0gMCkKLQkJewotCQkJQXN5 bmNSZXF1ZXN0ICphcmVxID0gKEFzeW5jUmVxdWVzdCAqKSB3LT51c2VyX2RhdGE7Ci0KLQkJCWlm IChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJewotCQkJCS8qCi0JCQkJICogTWFyayBpdCBh cyBubyBsb25nZXIgbmVlZGluZyBhIGNhbGxiYWNrLiAgV2UgbXVzdCBkbyB0aGlzCi0JCQkJICog YmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBpbiBjYXNlIHRoZSBjYWxsYmFjayByZXNl dHMKLQkJCQkgKiB0aGUgZmxhZy4KLQkJCQkgKi8KLQkJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5n ID0gZmFsc2U7Ci0KLQkJCQkvKiBEbyB0aGUgYWN0dWFsIHdvcmsuICovCi0JCQkJRXhlY0FzeW5j Tm90aWZ5KGFyZXEpOwotCQkJfQotCQl9Ci0KLQkJLyogSGFuZGxlIHN0YW5kYXJkIGludGVycnVw dHMgKi8KLQkJaWYgKCh3LT5ldmVudHMgJiBXTF9MQVRDSF9TRVQpICE9IDApCi0JCXsKLQkJCVJl c2V0TGF0Y2goTXlMYXRjaCk7Ci0JCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQl9Ci0JfQor CUV4ZWNBcHBlbmRCYXNlQXN5bmNFdmVudFdhaXQoJm5vZGUtPmFzLCB0aW1lb3V0LCBXQUlUX0VW RU5UX0FQUEVORF9SRUFEWSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMzksMTAgKzg2Niw3IEBA IEV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIHN0YXRpYyB2b2lk CiBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlCaXRt YXBzZXQgICp2YWxpZF9hc3luY3BsYW5zOwotCiAJQXNzZXJ0KG5vZGUtPmFzLnZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQpOwotCUFzc2VydChub2RlLT5hcy52YWxpZF9hc3luY3BsYW5zID09IE5V TEwpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFsaWQgc3VicGxhbnMu ICovCiAJaWYgKGJtc19pc19lbXB0eShub2RlLT5hcy52YWxpZF9zdWJwbGFucykpCkBAIC0xMDUy LDIxICs4NzYsOSBAQCBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhBcHBlbmRTdGF0ZSAqbm9k ZSkKIAkJcmV0dXJuOwogCX0KIAotCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZh bGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCWlmICghYm1zX292ZXJsYXAobm9kZS0+YXMudmFsaWRf c3VicGxhbnMsIG5vZGUtPmFzLmFzeW5jcGxhbnMpKQotCXsKKwkvKiBObyB2YWxpZCBhc3luYyBz dWJwbGFucyBpZGVudGlmaWVkLiAqLworCWlmICghY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnNf Y29tbW9uKCZub2RlLT5hcy52YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJCQkgICBub2RlLT5hcy5h c3luY3BsYW5zLAorCQkJCQkJCQkJCSAgICZub2RlLT5hcy52YWxpZF9hc3luY3BsYW5zKSkKIAkJ bm9kZS0+YXNfbmFzeW5jcmVtYWluID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEdldCB2YWxp ZCBhc3luYyBzdWJwbGFucy4gKi8KLQl2YWxpZF9hc3luY3BsYW5zID0gYm1zX2ludGVyc2VjdChu b2RlLT5hcy5hc3luY3BsYW5zLAotCQkJCQkJCQkJIG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zKTsK LQotCS8qIEFkanVzdCB0aGUgdmFsaWQgc3VicGxhbnMgdG8gY29udGFpbiBzeW5jIHN1YnBsYW5z IG9ubHkuICovCi0Jbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPSBibXNfZGVsX21lbWJlcnMobm9k ZS0+YXMudmFsaWRfc3VicGxhbnMsCi0JCQkJCQkJCQkJCSAgdmFsaWRfYXN5bmNwbGFucyk7Ci0K LQkvKiBTYXZlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwotCW5vZGUtPmFzLnZhbGlkX2FzeW5j cGxhbnMgPSB2YWxpZF9hc3luY3BsYW5zOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VB cHBlbmQuYwppbmRleCA2OTI4MTUyZjE2Zi4uNTkxYmUxMDE4ZDggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC0xNTIsOSArMTUyLDEyIEBAIEV4ZWNNZXJnZUFwcGVu ZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICogcnVuLXRpbWUgcHJ1bmluZyBpcyBkaXNhYmxlZCB0 aGVuIHRoZSB2YWxpZCBzdWJwbGFucyB3aWxsIGFsd2F5cyBiZQogCQkgKiBzZXQgdG8gYWxsIHN1 YnBsYW5zLgogCQkgKi8KLQkJaWYgKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID09IE5VTEwpCisJ CWlmICghbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJewogCQkJbm9kZS0+ YXMudmFsaWRfc3VicGxhbnMgPQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5h cy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCA9IHRydWU7CisJCX0KIAogCQkvKgogCQkgKiBGaXJzdCB0aW1lIHRocm91Z2g6 IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJwbGFuLApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY0FwcGVuZC5oCmluZGV4IGE4ZjQxYmFkOTIxLi43ZjUzYWQ4OTIxMyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oCisrKyBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNBcHBlbmQuaApAQCAtMjIsNSArMjIsMTIgQEAgZXh0ZXJuIHZvaWQgRXhlY0lu aXRBcHBlbmRCYXNlKEFwcGVuZEJhc2VTdGF0ZSAqc3RhdGUsCiAJCQkJCQkJICAgaW50ICpmaXJz dF92YWxpZF9wYXJ0aWFsX3BsYW4pOwogZXh0ZXJuIHZvaWQgRXhlY0VuZEFwcGVuZEJhc2UoQXBw ZW5kQmFzZVN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNSZVNjYW5BcHBlbmRCYXNlKEFw cGVuZEJhc2VTdGF0ZSAqbm9kZSk7CitleHRlcm4gdm9pZCBFeGVjQXBwZW5kQmFzZUFzeW5jQmVn aW4oQXBwZW5kQmFzZVN0YXRlICpub2RlKTsKK2V4dGVybiB2b2lkIEV4ZWNBcHBlbmRCYXNlQXN5 bmNFdmVudFdhaXQoQXBwZW5kQmFzZVN0YXRlICpub2RlLAorCQkJCQkJCQkJCSBpbnQgdGltZW91 dCwKKwkJCQkJCQkJCQkgdWludDMyIHdhaXRfZXZlbnRfaW5mbyk7CitleHRlcm4gYm9vbCBjbGFz c2lmeV9tYXRjaGluZ19zdWJwbGFuc19jb21tb24oQml0bWFwc2V0ICoqdmFsaWRfc3VicGxhbnMs CisJCQkJCQkJCQkJCSAgQml0bWFwc2V0ICphc3luY3BsYW5zLAorCQkJCQkJCQkJCQkgIEJpdG1h cHNldCAqKnZhbGlkX2FzeW5jcGxhbnMpOwogCiAjZW5kaWYJCQkJCQkJLyogRVhFQ0FQUEVORF9I ICovCi0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --000000000000085fe4064ed3bfdb Content-Type: application/octet-stream; name="v18-0005-MergeAppend-should-support-Async-Foreign-Scan-su.patch" Content-Disposition: attachment; filename="v18-0005-MergeAppend-should-support-Async-Foreign-Scan-su.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnvenf54 RnJvbSBmMmE0Nzc3MDRhNTNkY2NhODkyMTI1NjQzMDY2M2FjZTNiNzA4M2U0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogU3VuLCA1IEFwciAyMDI2IDA0OjQ3OjEwICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTggNS81XSBNZXJnZUFwcGVuZCBzaG91bGQgc3VwcG9ydCBBc3luYyBGb3JlaWduIFNj YW4KIHN1YnBsYW5zCgpUaGlzIGNvbW1pdCBtYWtlcyB0aGUgTWVyZ2VBcHBlbmQgbm9kZSBhc3lu Yy1jYXBhYmxlLCBzaW1pbGFyIHRvIHRoZSBleGlzdGluZwphc3luYyBzdXBwb3J0IGZvciBBcHBl bmQgbm9kZXMuIFdoZW4gdGhlIHBsYW5uZXIgY2hvb3NlcyBNZXJnZUFwcGVuZCBmb3IKcGFydGl0 aW9uZWQgdGFibGVzIHdpdGggZm9yZWlnbiBwYXJ0aXRpb25zLCBhc3luY2hyb25vdXMgZXhlY3V0 aW9uIGlzIG5vdwpwb3NzaWJsZS4KClRoZSBwcmltYXJ5IGJlbmVmaXQgaXMgZHVyaW5nIHRoZSBp bml0aWFsIGhlYXAgZmlsbDogYWxsIGFzeW5jIHN1YnBsYW5zIGFyZQpraWNrZWQgb2ZmIGNvbmN1 cnJlbnRseSwgc28gdGhlaXIgZmlyc3QgdHVwbGVzIGFyZSBmZXRjaGVkIGluIHBhcmFsbGVsIHJh dGhlcgp0aGFuIHNlcXVlbnRpYWxseS4gSW4gc3RlYWR5IHN0YXRlLCBob3dldmVyLCB0aGUgaGVh cCBtZXJnZSBhbGdvcml0aG0gbmVlZHMKdGhlIG5leHQgdHVwbGUgZnJvbSBvbmUgc3BlY2lmaWMg c3VicGxhbiAodGhlIGhlYXAgdG9wKSwgc28gZXhlY3V0aW9uIGF0CnRoYXQgcG9pbnQgaXMgZWZm ZWN0aXZlbHkgc3luY2hyb25vdXMgLSB3ZSBibG9jayB1bnRpbCB0aGF0IHBhcnRpY3VsYXIKc3Vi cGxhbiBkZWxpdmVycyBpdHMgcmVzdWx0LgoKQSBuZXcgR1VDIGVuYWJsZV9hc3luY19tZXJnZV9h cHBlbmQgY29udHJvbHMgdGhpcyBmZWF0dXJlIChkZWZhdWx0IG9uKS4KQSBuZXcgd2FpdCBldmVu dCBNRVJHRV9BUFBFTkRfUkVBRFkgaXMgYWRkZWQgKHNlcGFyYXRlIGZyb20gQVBQRU5EX1JFQURZ KQpzbyB0aGF0IG1vbml0b3JpbmcgdG9vbHMgY2FuIGRpc3Rpbmd1aXNoIHRoZSB0d28gbm9kZSB0 eXBlcy4KClRoZSBwb3N0Z3Jlc19mZHcgaXMgdXBkYXRlZCB0byB3b3JrIGdlbmVyaWNhbGx5IHdp dGggYm90aCBBcHBlbmQgYW5kCk1lcmdlQXBwZW5kIHJlcXVlc3RvcnMgYnkgY2FzdGluZyB0byB0 aGUgc2hhcmVkIEFwcGVuZEJhc2VTdGF0ZSB0eXBlLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS81OWJlMTk0YzVhNDA5ZmI5ZmM5ZjIwMzE1ODFiOGE0NCU0MHBvc3RncmVzcHJvLnJ1 CkF1dGhvcjogQWxleGFuZGVyIFB5aGFsb3YgPGEucHloYWxvdkBwb3N0Z3Jlc3Byby5ydT4KUmV2 aWV3ZWQtYnk6IE1hdGhldXMgQWxjYW50YXJhIDxtYXRoZXVzc3NpbHY5N0BnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBBbGVuYSBSeWJha2luYSA8YS5yeWJha2luYUBwb3N0Z3Jlc3Byby5ydT4KLS0t CiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAgfCAzNTMgKysr KysrKysrKysrKysrKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAg ICAgICAgfCAgIDYgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3Fs ICAgICB8IDEwNSArKysrKysKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAg ICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYyAgICAgICAg ICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgICAg ICAgIHwgMTY4ICsrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUu YyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4u YyAgICAgICB8ICAgOSArCiAuLi4vdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQg ICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQg ICAgIHwgICA4ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZSB8ICAgMSArCiBzcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaCAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwg ICAzICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCAgICAgICAgfCAgIDMg Ky0KIDE1IGZpbGVzIGNoYW5nZWQsIDY3NCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4 IGNkMjI1NTMyMzZmLi43NjIyMDIyMzQ3YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19m ZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xMTYxOCwxMiArMTE2MTgsNTYgQEAgU0VMRUNU ICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMiByb3dzKQogCiBERUxFVEUgRlJPTSBy ZXN1bHRfdGJsOworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAlIDEwMCA9IDAgT1JERVIgQlkg YiwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQXBwZW5kCisgICBTb3J0 IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBv biBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8x LmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxF Q1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEgV0hFUkUgKCgoYiAlIDEwMCkgPSAwKSkg T1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIEFzeW5j IEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAgT3V0 cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRfMi5jCisgICAgICAgICBS ZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDIgV0hFUkUgKCgo YiAlIDEwMCkgPSAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFT VAorKDggcm93cykKKworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiICUgMTAwID0gMCBP UkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQor IDEwMDAgfCAgIDAgfCAwMDAwCisgMjAwMCB8ICAgMCB8IDAwMDAKKyAxMTAwIHwgMTAwIHwgMDEw MAorIDIxMDAgfCAxMDAgfCAwMTAwCisgMTIwMCB8IDIwMCB8IDAyMDAKKyAyMjAwIHwgMjAwIHwg MDIwMAorIDEzMDAgfCAzMDAgfCAwMzAwCisgMjMwMCB8IDMwMCB8IDAzMDAKKyAxNDAwIHwgNDAw IHwgMDQwMAorIDI0MDAgfCA0MDAgfCAwNDAwCisgMTUwMCB8IDUwMCB8IDA1MDAKKyAyNTAwIHwg NTAwIHwgMDUwMAorIDE2MDAgfCA2MDAgfCAwNjAwCisgMjYwMCB8IDYwMCB8IDA2MDAKKyAxNzAw IHwgNzAwIHwgMDcwMAorIDI3MDAgfCA3MDAgfCAwNzAwCisgMTgwMCB8IDgwMCB8IDA4MDAKKyAy ODAwIHwgODAwIHwgMDgwMAorIDE5MDAgfCA5MDAgfCAwOTAwCisgMjkwMCB8IDkwMCB8IDA5MDAK KygyMCByb3dzKQorCiAtLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBpZiBhY2Nlc3Npbmcgb25lIG9m IHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAogQ1JFQVRFIEZPUkVJR04gVEFCTEUg YXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZPUiBWQUxVRVMgRlJPTSAoMTAw MDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ25v bl9leGlzdGVudF90YWJsZScpOwogU0VMRUNUICogRlJPTSBhc3luY19wdDsKIEVSUk9SOiAgcmVs YXRpb24gInB1YmxpYy5ub25fZXhpc3RlbnRfdGFibGUiIGRvZXMgbm90IGV4aXN0CiBDT05URVhU OiAgcmVtb3RlIFNRTCBjb21tYW5kOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5ub25fZXhp c3RlbnRfdGFibGUKKy0tIFRlc3QgZXJyb3IgaGFuZGxpbmcgZm9yIGFzeW5jIE1lcmdlIEFwcGVu ZAorU0VMRUNUICogRlJPTSBhc3luY19wdCBPUkRFUiBCWSBiLCBhOworRVJST1I6ICByZWxhdGlv biAicHVibGljLm5vbl9leGlzdGVudF90YWJsZSIgZG9lcyBub3QgZXhpc3QKK0NPTlRFWFQ6ICBy ZW1vdGUgU1FMIGNvbW1hbmQ6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLm5vbl9leGlzdGVu dF90YWJsZSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCiBEUk9Q IEZPUkVJR04gVEFCTEUgYXN5bmNfcF9icm9rZW47CiAtLSBDaGVjayBjYXNlIHdoZXJlIG11bHRp cGxlIHBhcnRpdGlvbnMgdXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24KIENSRUFURSBUQUJMRSBiYXNl X3RibDMgKGEgaW50LCBiIGludCwgYyB0ZXh0KTsKQEAgLTExNjY2LDYgKzExNzEwLDc2IEBAIENP UFkgYXN5bmNfcHQgVE8gc3Rkb3V0OyAtLWVycm9yCiBFUlJPUjogIGNhbm5vdCBjb3B5IGZyb20g Zm9yZWlnbiB0YWJsZSAiYXN5bmNfcDEiCiBERVRBSUw6ICBQYXJ0aXRpb24gImFzeW5jX3AxIiBp cyBhIGZvcmVpZ24gdGFibGUgaW4gcGFydGl0aW9uZWQgdGFibGUgImFzeW5jX3B0IgogSElOVDog IFRyeSB0aGUgQ09QWSAoU0VMRUNUIC4uLikgVE8gdmFyaWFudC4KKy0tIFRlc3QgTWVyZ2UgQXBw ZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0 IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBNZXJnZSBBcHBlbmQKKyAgIFNvcnQgS2V5OiBhc3luY19wdC5iLCBhc3lu Y19wdC5hCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3lu Y19wdF8xCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzEuYSwgYXN5bmNfcHRfMS5iLCBhc3lu Y19wdF8xLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzEuYiA9PT0gNTA1KQorICAgICAg ICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwxIE9SREVS IEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBBc3luYyBGb3Jl aWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AyIGFzeW5jX3B0XzIKKyAgICAgICAgIE91dHB1dDog YXN5bmNfcHRfMi5hLCBhc3luY19wdF8yLmIsIGFzeW5jX3B0XzIuYworICAgICAgICAgRmlsdGVy OiAoYXN5bmNfcHRfMi5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwg YiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDIgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBB U0MgTlVMTFMgTEFTVAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNf cDMgYXN5bmNfcHRfMworICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMu YiwgYXN5bmNfcHRfMy5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUwNSkK KyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJs MyBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisoMTQgcm93cykK KworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsK KyAgYSAgIHwgIGIgIHwgIGMgICAKKy0tLS0tLSstLS0tLSstLS0tLS0KKyAxNTA1IHwgNTA1IHwg MDUwNQorIDI1MDUgfCA1MDUgfCAwNTA1CisgMzUwNSB8IDUwNSB8IDA1MDUKKygzIHJvd3MpCisK Ky0tIFRlc3QgYXN5bmMgTWVyZ2UgQXBwZW5kIHJlc2NhbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorU0VMRUNUCisJQVJSQVkoU0VMRUNUIGYuaSBGUk9NIChTRUxFQ1QgYiArIGcuaSBG Uk9NIGFzeW5jX3B0IFdIRVJFIGEgPiBnLmkgT1JERVIgQlkgYikgZihpKSBPUkRFUiBCWSBmLmkg TElNSVQgMTApCitGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAzKSBnKGkpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5l cmF0ZV9zZXJpZXMgZworICAgT3V0cHV0OiBBUlJBWShTdWJQbGFuIGFycmF5XzEpCisgICBGdW5j dGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwgMykKKyAgIFN1YlBsYW4gYXJyYXlfMQorICAg ICAtPiAgTGltaXQKKyAgICAgICAgICAgT3V0cHV0OiBmLmkKKyAgICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgICAgT3V0cHV0OiBmLmkKKyAgICAgICAgICAgICAgICAgU29ydCBLZXk6 IGYuaQorICAgICAgICAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiBmCisgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogZi5pCisgICAgICAgICAgICAgICAgICAgICAgIC0+ICBNZXJn ZSBBcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGFzeW5jX3B0 LmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBv biBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IChhc3luY19wdF8xLmIgKyBnLmkpLCBhc3luY19wdF8xLmIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGIgRlJPTSBw dWJsaWMuYmFzZV90YmwxIFdIRVJFICgoYSA+ICQxOjppbnRlZ2VyKSkgT1JERVIgQlkgYiBBU0Mg TlVMTFMgTEFTVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQXN5bmMgRm9yZWln biBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3luY19wdF8yCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogKGFzeW5jX3B0XzIuYiArIGcuaSksIGFzeW5jX3B0XzIu YgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1Qg YiBGUk9NIHB1YmxpYy5iYXNlX3RibDIgV0hFUkUgKChhID4gJDE6OmludGVnZXIpKSBPUkRFUiBC WSBiIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBBc3lu YyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AzIGFzeW5jX3B0XzMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiAoYXN5bmNfcHRfMy5iICsgZy5pKSwgYXN5 bmNfcHRfMy5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6 IFNFTEVDVCBiIEZST00gcHVibGljLmJhc2VfdGJsMyBXSEVSRSAoKGEgPiAkMTo6aW50ZWdlcikp IE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QKKygyMiByb3dzKQorCitTRUxFQ1QKKwlBUlJBWShT RUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcu aSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDMpIGcoaSk7CisgICAgICAgICAgIGFycmF5ICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIHsxLDEsMSw2LDYsNiwxMSwxMSwxMSwxNn0KKyB7MiwyLDIs Nyw3LDcsMTIsMTIsMTIsMTd9CisgezMsMywzLDgsOCw4LDEzLDEzLDEzLDE4fQorKDMgcm93cykK KwogRFJPUCBGT1JFSUdOIFRBQkxFIGFzeW5jX3AzOwogRFJPUCBUQUJMRSBiYXNlX3RibDM7CiAt LSBDaGVjayBjYXNlIHdoZXJlIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBoYXMgbG9jYWwvcmVtb3Rl IHBhcnRpdGlvbnMKQEAgLTExNzAxLDYgKzExODE1LDM3IEBAIFNFTEVDVCAqIEZST00gcmVzdWx0 X3RibCBPUkRFUiBCWSBhOwogKDMgcm93cykKIAogREVMRVRFIEZST00gcmVzdWx0X3RibDsKKy0t IFRlc3QgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBhOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBBcHBlbmQKKyAgIFNvcnQgS2V5OiBh c3luY19wdC5iLCBhc3luY19wdC5hCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1Ymxp Yy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzEuYSwgYXN5 bmNfcHRfMS5iLCBhc3luY19wdF8xLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzEuYiA9 PT0gNTA1KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMu YmFzZV90YmwxIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKyAg IC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AyIGFzeW5jX3B0XzIKKyAg ICAgICAgIE91dHB1dDogYXN5bmNfcHRfMi5hLCBhc3luY19wdF8yLmIsIGFzeW5jX3B0XzIuYwor ICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMi5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUg U1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDIgT1JERVIgQlkgYiBBU0Mg TlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1 dDogYXN5bmNfcHRfMy5hLCBhc3luY19wdF8zLmIsIGFzeW5jX3B0XzMuYworICAgICAgICAgU29y dCBLZXk6IGFzeW5jX3B0XzMuYiwgYXN5bmNfcHRfMy5hCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmFzeW5jX3AzIGFzeW5jX3B0XzMKKyAgICAgICAgICAgICAgIE91dHB1dDogYXN5 bmNfcHRfMy5hLCBhc3luY19wdF8zLmIsIGFzeW5jX3B0XzMuYworICAgICAgICAgICAgICAgRmls dGVyOiAoYXN5bmNfcHRfMy5iID09PSA1MDUpCisoMTYgcm93cykKKworU0VMRUNUICogRlJPTSBh c3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKKyAgYSAgIHwgIGIgIHwgIGMg ICAKKy0tLS0tLSstLS0tLSstLS0tLS0KKyAxNTA1IHwgNTA1IHwgMDUwNQorIDI1MDUgfCA1MDUg fCAwNTA1CisgMzUwNSB8IDUwNSB8IDA1MDUKKygzIHJvd3MpCisKIC0tIHBhcnRpdGlvbndpc2Ug am9pbnMKIFNFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIHRydWU7CiBDUkVBVEUgVEFC TEUgam9pbl90YmwgKGExIGludCwgYjEgaW50LCBjMSB0ZXh0LCBhMiBpbnQsIGIyIGludCwgYzIg dGV4dCk7CkBAIC0xMTg5Niw2ICsxMjA0MSwyMSBAQCBTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdI RVJFIGEgPCAyMDAwOwogICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMu YmFzZV90YmwxIFdIRVJFICgoYSA8IDIwMDApKQogKDMgcm93cykKIAorLS0gVGVzdCBpbnRlcmFj dGlvbiBvZiBhc3luYyBNZXJnZSBBcHBlbmQgd2l0aCBwbGFuLXRpbWUgcGFydGl0aW9uIHBydW5p bmcKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQg V0hFUkUgYSA8IDMwMDAgT1JERVIgQlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBB cHBlbmQKKyAgIFNvcnQgS2V5OiBhc3luY19wdC5iLCBhc3luY19wdC5hCisgICAtPiAgQXN5bmMg Rm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICBPdXRw dXQ6IGFzeW5jX3B0XzEuYSwgYXN5bmNfcHRfMS5iLCBhc3luY19wdF8xLmMKKyAgICAgICAgIFJl bW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMSBXSEVSRSAoKGEg PCAzMDAwKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAg LT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAg ICAgICAgT3V0cHV0OiBhc3luY19wdF8yLmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRfMi5jCisg ICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDIg V0hFUkUgKChhIDwgMzAwMCkpIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExT IExBU1QKKyg4IHJvd3MpCisKIC0tIFRlc3QgaW50ZXJhY3Rpb24gb2YgYXN5bmMgZXhlY3V0aW9u IHdpdGggcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcKIFNFVCBwbGFuX2NhY2hlX21vZGUgVE8g Zm9yY2VfZ2VuZXJpY19wbGFuOwogUFJFUEFSRSBhc3luY19wdF9xdWVyeSAoaW50LCBpbnQpIEFT CkBAIC0xMTk0Nyw2ICsxMjEwNyw1MiBAQCBTRUxFQ1QgKiBGUk9NIHJlc3VsdF90YmwgT1JERVIg QlkgYTsKICgxIHJvdykKIAogREVMRVRFIEZST00gcmVzdWx0X3RibDsKKy0tIFRlc3QgaW50ZXJh Y3Rpb24gb2YgYXN5bmMgTWVyZ2UgQXBwZW5kIHdpdGggcnVuLXRpbWUgcGFydGl0aW9uIHBydW5p bmcKK1BSRVBBUkUgYXN5bmNfcHRfbWVyZ2VfcXVlcnkgKGludCwgaW50KSBBUworICBTRUxFQ1Qg KiBGUk9NIGFzeW5jX3B0IFdIRVJFIGEgPCAkMSBBTkQgYiA9PT0gJDIgT1JERVIgQlkgYiwgYTsK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK0VYRUNVVEUgYXN5bmNfcHRfbWVyZ2VfcXVl cnkgKDMwMDAsIDUwNSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBB cHBlbmQKKyAgIFNvcnQgS2V5OiBhc3luY19wdC5iLCBhc3luY19wdC5hCisgICBTdWJwbGFucyBS ZW1vdmVkOiAxCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBh c3luY19wdF8xCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzEuYSwgYXN5bmNfcHRfMS5iLCBh c3luY19wdF8xLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzEuYiA9PT0gJDIpCisgICAg ICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEgV0hF UkUgKChhIDwgJDE6OmludGVnZXIpKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBO VUxMUyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBh c3luY19wdF8yCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBh c3luY19wdF8yLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzIuYiA9PT0gJDIpCisgICAg ICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDIgV0hF UkUgKChhIDwgJDE6OmludGVnZXIpKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBO VUxMUyBMQVNUCisoMTEgcm93cykKKworRVhFQ1VURSBhc3luY19wdF9tZXJnZV9xdWVyeSAoMzAw MCwgNTA1KTsKKyAgYSAgIHwgIGIgIHwgIGMgICAKKy0tLS0tLSstLS0tLSstLS0tLS0KKyAxNTA1 IHwgNTA1IHwgMDUwNQorIDI1MDUgfCA1MDUgfCAwNTA1CisoMiByb3dzKQorCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitFWEVDVVRFIGFzeW5jX3B0X21lcmdlX3F1ZXJ5ICgyMDAwLCA1 MDUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQXBwZW5kCisgICBT b3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgU3VicGxhbnMgUmVtb3ZlZDogMgor ICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQor ICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5j CisgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8xLmIgPT09ICQyKQorICAgICAgICAgUmVtb3Rl IFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90YmwxIFdIRVJFICgoYSA8ICQx OjppbnRlZ2VyKSkgT1JERVIgQlkgYiBBU0MgTlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAor KDcgcm93cykKKworRVhFQ1VURSBhc3luY19wdF9tZXJnZV9xdWVyeSAoMjAwMCwgNTA1KTsKKyAg YSAgIHwgIGIgIHwgIGMgICAKKy0tLS0tLSstLS0tLSstLS0tLS0KKyAxNTA1IHwgNTA1IHwgMDUw NQorKDEgcm93KQorCiBSRVNFVCBwbGFuX2NhY2hlX21vZGU7CiBDUkVBVEUgVEFCTEUgbG9jYWxf dGJsKGEgaW50LCBiIGludCwgYyB0ZXh0KTsKIElOU0VSVCBJTlRPIGxvY2FsX3RibCBWQUxVRVMg KDE1MDUsIDUwNSwgJ2ZvbycpLCAoMjUwNSwgNTA1LCAnYmFyJyk7CkBAIC0xMjQ4Myw2ICsxMjY4 OSwxNTMgQEAgU0VMRUNUIGEgRlJPTSBiYXNlX3RibCBXSEVSRSAoYSwgcmFuZG9tKCkgPiAwKSBJ TiAoU0VMRUNUIGEsIHJhbmRvbSgpID4gMCBGUk9NIGYKIERST1AgRk9SRUlHTiBUQUJMRSBmb3Jl aWduX3RibCBDQVNDQURFOwogTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byBmb3JlaWduIHRhYmxl IGZvcmVpZ25fdGJsMgogRFJPUCBUQUJMRSBiYXNlX3RibDsKKy0tIFRlc3QgYXN5bmMgTWVyZ2Ug QXBwZW5kCitDUkVBVEUgVEFCTEUgZGlzdHIxIChpIGludCwgaiBpbnQsIGsgdGV4dCkgUEFSVElU SU9OIEJZIEhBU0ggKGkpOworQ1JFQVRFIFRBQkxFIGJhc2UxIChpIGludCwgaiBpbnQsIGsgdGV4 dCk7CitDUkVBVEUgVEFCTEUgYmFzZTIgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBG T1JFSUdOIFRBQkxFIGRpc3RyMV9wMSBQQVJUSVRJT04gT0YgZGlzdHIxIEZPUiBWQUxVRVMgV0lU SCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMCkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJs ZV9uYW1lICdiYXNlMScpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AyIFBBUlRJVElP TiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAxKQorU0VS VkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UyJyk7CitDUkVBVEUgVEFCTEUg ZGlzdHIyIChpIGludCwgaiBpbnQsIGsgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGkpOworQ1JF QVRFIFRBQkxFIGJhc2UzIChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgVEFCTEUgYmFz ZTQgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9w MSBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5E RVIgMCkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlMycpOworQ1JF QVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3AyIFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZBTFVF UyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAxKQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMg KHRhYmxlX25hbWUgJ2Jhc2U0Jyk7CitJTlNFUlQgSU5UTyBkaXN0cjEKK1NFTEVDVCBpLCBpKjEw LCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKK0lOU0VSVCBJ TlRPIGRpc3RyMgorU0VMRUNUIGksIGkqMTAsICdkYXRhXycgfHwgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDApIGk7CitBTkFMWVpFIGRpc3RyMV9wMTsKK0FOQUxZWkUgZGlzdHIxX3AyOwor QU5BTFlaRSBkaXN0cjJfcDE7CitBTkFMWVpFIGRpc3RyMl9wMjsKK1NFVCBlbmFibGVfcGFydGl0 aW9ud2lzZV9qb2luIFRPIE9OOworLS0gVGVzdCBqb2lucyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVu ZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEsIGRp c3RyMiBXSEVSRSBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIy LmsgbGlrZSAnZGF0YSUnCitPUkRFUiBCWSBkaXN0cjIuaSBMSU1JVCAxMDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBMaW1pdAorICAgT3V0cHV0OiBkaXN0cjEuaSwgZGlzdHIxLmosIGRp c3RyMS5rLCBkaXN0cjIuaSwgZGlzdHIyLmosIGRpc3RyMi5rCisgICAtPiAgTWVyZ2UgQXBwZW5k CisgICAgICAgICBTb3J0IEtleTogZGlzdHIxLmkKKyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWdu IFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDogZGlzdHIxXzEuaSwgZGlzdHIxXzEuaiwgZGlz dHIxXzEuaywgZGlzdHIyXzEuaSwgZGlzdHIyXzEuaiwgZGlzdHIyXzEuaworICAgICAgICAgICAg ICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9wMSBkaXN0cjFfMSkgSU5ORVIgSk9JTiAocHVi bGljLmRpc3RyMl9wMSBkaXN0cjJfMSkKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVD VCByMy5pLCByMy5qLCByMy5rLCByNS5pLCByNS5qLCByNS5rIEZST00gKHB1YmxpYy5iYXNlMSBy MyBJTk5FUiBKT0lOIHB1YmxpYy5iYXNlMyByNSBPTiAoKChyMy5pID0gcjUuaSkpIEFORCAoKHI1 LmogPiA5MCkpIEFORCAoKHI1Lmsgfn4gJ2RhdGElJykpKSkgT1JERVIgQlkgcjMuaSBBU0MgTlVM TFMgTEFTVAorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAg T3V0cHV0OiBkaXN0cjFfMi5pLCBkaXN0cjFfMi5qLCBkaXN0cjFfMi5rLCBkaXN0cjJfMi5pLCBk aXN0cjJfMi5qLCBkaXN0cjJfMi5rCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMu ZGlzdHIxX3AyIGRpc3RyMV8yKSBJTk5FUiBKT0lOIChwdWJsaWMuZGlzdHIyX3AyIGRpc3RyMl8y KQorICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHI0LmksIHI0LmosIHI0LmssIHI2 LmksIHI2LmosIHI2LmsgRlJPTSAocHVibGljLmJhc2UyIHI0IElOTkVSIEpPSU4gcHVibGljLmJh c2U0IHI2IE9OICgoKHI0LmkgPSByNi5pKSkgQU5EICgocjYuaiA+IDkwKSkgQU5EICgocjYuayB+ fiAnZGF0YSUnKSkpKSBPUkRFUiBCWSByNC5pIEFTQyBOVUxMUyBMQVNUCisoMTIgcm93cykKKwor U0VMRUNUICogRlJPTSBkaXN0cjEsIGRpc3RyMiBXSEVSRSBkaXN0cjEuaT1kaXN0cjIuaSBBTkQg ZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnCitPUkRFUiBCWSBkaXN0cjIu aSBMSU1JVCAxMDsKKyBpICB8ICBqICB8ICAgIGsgICAgfCBpICB8ICBqICB8ICAgIGsgICAgCist LS0tKy0tLS0tKy0tLS0tLS0tLSstLS0tKy0tLS0tKy0tLS0tLS0tLQorIDEwIHwgMTAwIHwgZGF0 YV8xMCB8IDEwIHwgMTAwIHwgZGF0YV8xMAorIDExIHwgMTEwIHwgZGF0YV8xMSB8IDExIHwgMTEw IHwgZGF0YV8xMQorIDEyIHwgMTIwIHwgZGF0YV8xMiB8IDEyIHwgMTIwIHwgZGF0YV8xMgorIDEz IHwgMTMwIHwgZGF0YV8xMyB8IDEzIHwgMTMwIHwgZGF0YV8xMworIDE0IHwgMTQwIHwgZGF0YV8x NCB8IDE0IHwgMTQwIHwgZGF0YV8xNAorIDE1IHwgMTUwIHwgZGF0YV8xNSB8IDE1IHwgMTUwIHwg ZGF0YV8xNQorIDE2IHwgMTYwIHwgZGF0YV8xNiB8IDE2IHwgMTYwIHwgZGF0YV8xNgorIDE3IHwg MTcwIHwgZGF0YV8xNyB8IDE3IHwgMTcwIHwgZGF0YV8xNworIDE4IHwgMTgwIHwgZGF0YV8xOCB8 IDE4IHwgMTgwIHwgZGF0YV8xOAorIDE5IHwgMTkwIHwgZGF0YV8xOSB8IDE5IHwgMTkwIHwgZGF0 YV8xOQorKDEwIHJvd3MpCisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gZGlzdHIxIExFRlQgSk9JTiBkaXN0cjIgT04gZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRp c3RyMi5rIGxpa2UgJ2RhdGElJyBXSEVSRSAgZGlzdHIxLmkgPiA5MAorT1JERVIgQlkgZGlzdHIx LmkgTElNSVQgMjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMaW1pdAorICAgT3V0 cHV0OiBkaXN0cjEuaSwgZGlzdHIxLmosIGRpc3RyMS5rLCBkaXN0cjIuaSwgZGlzdHIyLmosIGRp c3RyMi5rCisgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICBTb3J0IEtleTogZGlzdHIxLmkK KyAgICAgICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4KKyAgICAgICAgICAgICAgIE91dHB1dDog ZGlzdHIxXzEuaSwgZGlzdHIxXzEuaiwgZGlzdHIxXzEuaywgZGlzdHIyXzEuaSwgZGlzdHIyXzEu aiwgZGlzdHIyXzEuaworICAgICAgICAgICAgICAgUmVsYXRpb25zOiAocHVibGljLmRpc3RyMV9w MSBkaXN0cjFfMSkgTEVGVCBKT0lOIChwdWJsaWMuZGlzdHIyX3AxIGRpc3RyMl8xKQorICAgICAg ICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIHI0LmksIHI0LmosIHI0LmssIHI2LmksIHI2Lmos IHI2LmsgRlJPTSAocHVibGljLmJhc2UxIHI0IExFRlQgSk9JTiBwdWJsaWMuYmFzZTMgcjYgT04g KCgocjQuaSA9IHI2LmkpKSBBTkQgKChyNi5rIH5+ICdkYXRhJScpKSkpIFdIRVJFICgocjQuaSA+ IDkwKSkgT1JERVIgQlkgcjQuaSBBU0MgTlVMTFMgTEFTVAorICAgICAgICAgLT4gIEFzeW5jIEZv cmVpZ24gU2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMi5pLCBkaXN0cjFfMi5q LCBkaXN0cjFfMi5rLCBkaXN0cjJfMi5pLCBkaXN0cjJfMi5qLCBkaXN0cjJfMi5rCisgICAgICAg ICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3AyIGRpc3RyMV8yKSBMRUZUIEpPSU4g KHB1YmxpYy5kaXN0cjJfcDIgZGlzdHIyXzIpCisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBT RUxFQ1QgcjUuaSwgcjUuaiwgcjUuaywgcjcuaSwgcjcuaiwgcjcuayBGUk9NIChwdWJsaWMuYmFz ZTIgcjUgTEVGVCBKT0lOIHB1YmxpYy5iYXNlNCByNyBPTiAoKChyNS5pID0gcjcuaSkpIEFORCAo KHI3Lmsgfn4gJ2RhdGElJykpKSkgV0hFUkUgKChyNS5pID4gOTApKSBPUkRFUiBCWSByNS5pIEFT QyBOVUxMUyBMQVNUCisoMTIgcm93cykKKworU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lO IGRpc3RyMiBPTiAgZGlzdHIxLmk9ZGlzdHIyLmkgQU5EIGRpc3RyMi5rIGxpa2UgJ2RhdGElJyBX SEVSRSBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKKyAgaSAgfCAg aiAgIHwgICAgayAgICAgfCAgaSAgfCAgaiAgIHwgICAgayAgICAgCistLS0tLSstLS0tLS0rLS0t LS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0tLQorICA5MSB8ICA5MTAgfCBkYXRhXzkxICB8 ICA5MSB8ICA5MTAgfCBkYXRhXzkxCisgIDkyIHwgIDkyMCB8IGRhdGFfOTIgIHwgIDkyIHwgIDky MCB8IGRhdGFfOTIKKyAgOTMgfCAgOTMwIHwgZGF0YV85MyAgfCAgOTMgfCAgOTMwIHwgZGF0YV85 MworICA5NCB8ICA5NDAgfCBkYXRhXzk0ICB8ICA5NCB8ICA5NDAgfCBkYXRhXzk0CisgIDk1IHwg IDk1MCB8IGRhdGFfOTUgIHwgIDk1IHwgIDk1MCB8IGRhdGFfOTUKKyAgOTYgfCAgOTYwIHwgZGF0 YV85NiAgfCAgOTYgfCAgOTYwIHwgZGF0YV85NgorICA5NyB8ICA5NzAgfCBkYXRhXzk3ICB8ICA5 NyB8ICA5NzAgfCBkYXRhXzk3CisgIDk4IHwgIDk4MCB8IGRhdGFfOTggIHwgIDk4IHwgIDk4MCB8 IGRhdGFfOTgKKyAgOTkgfCAgOTkwIHwgZGF0YV85OSAgfCAgOTkgfCAgOTkwIHwgZGF0YV85OQor IDEwMCB8IDEwMDAgfCBkYXRhXzEwMCB8IDEwMCB8IDEwMDAgfCBkYXRhXzEwMAorIDEwMSB8IDEw MTAgfCBkYXRhXzEwMSB8ICAgICB8ICAgICAgfCAKKyAxMDIgfCAxMDIwIHwgZGF0YV8xMDIgfCAg ICAgfCAgICAgIHwgCisgMTAzIHwgMTAzMCB8IGRhdGFfMTAzIHwgICAgIHwgICAgICB8IAorIDEw NCB8IDEwNDAgfCBkYXRhXzEwNCB8ICAgICB8ICAgICAgfCAKKyAxMDUgfCAxMDUwIHwgZGF0YV8x MDUgfCAgICAgfCAgICAgIHwgCisgMTA2IHwgMTA2MCB8IGRhdGFfMTA2IHwgICAgIHwgICAgICB8 IAorIDEwNyB8IDEwNzAgfCBkYXRhXzEwNyB8ICAgICB8ICAgICAgfCAKKyAxMDggfCAxMDgwIHwg ZGF0YV8xMDggfCAgICAgfCAgICAgIHwgCisgMTA5IHwgMTA5MCB8IGRhdGFfMTA5IHwgICAgIHwg ICAgICB8IAorIDExMCB8IDExMDAgfCBkYXRhXzExMCB8ICAgICB8ICAgICAgfCAKKygyMCByb3dz KQorCistLSBUZXN0IHBydW5pbmcgd2l0aCBhc3luYyBNZXJnZSBBcHBlbmQKK0RFTEVURSBGUk9N IGRpc3RyMjsKK0lOU0VSVCBJTlRPIGRpc3RyMgorU0VMRUNUIGklMTAsIGkqMTAsICdkYXRhXycg fHwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworREVBTExPQ0FURSBBTEw7CitT RVQgcGxhbl9jYWNoZV9tb2RlIFRPIGZvcmNlX2dlbmVyaWNfcGxhbjsKK1BSRVBBUkUgYXN5bmNf cHRfcXVlcnkgKGludCwgaW50KSBBUworICBTRUxFQ1QgKiBGUk9NIGRpc3RyMiBXSEVSRSBpID0g QU5ZKEFSUkFZWyQxLCAkMl0pCisgIE9SREVSIEJZIGksagorICBMSU1JVCAxMDsKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKKwlFWEVDVVRFIGFzeW5jX3B0X3F1ZXJ5KDEsIDEpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBMaW1pdAorICAgT3V0cHV0OiBkaXN0cjIuaSwg ZGlzdHIyLmosIGRpc3RyMi5rCisgICAtPiAgTWVyZ2UgQXBwZW5kCisgICAgICAgICBTb3J0IEtl eTogZGlzdHIyLmksIGRpc3RyMi5qCisgICAgICAgICBTdWJwbGFucyBSZW1vdmVkOiAxCisgICAg ICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5kaXN0cjJfcDEgZGlzdHIyXzEK KyAgICAgICAgICAgICAgIE91dHB1dDogZGlzdHIyXzEuaSwgZGlzdHIyXzEuaiwgZGlzdHIyXzEu aworICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGksIGosIGsgRlJPTSBwdWJsaWMu YmFzZTMgV0hFUkUgKChpID0gQU5ZIChBUlJBWVskMTo6aW50ZWdlciwgJDI6OmludGVnZXJdKSkp IE9SREVSIEJZIGkgQVNDIE5VTExTIExBU1QsIGogQVNDIE5VTExTIExBU1QKKyg4IHJvd3MpCisK K0VYRUNVVEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CisgaSB8ICBqICB8ICAgIGsgICAgCistLS0r LS0tLS0rLS0tLS0tLS0tCisgMSB8ICAxMCB8IGRhdGFfMQorIDEgfCAxMTAgfCBkYXRhXzExCisg MSB8IDIxMCB8IGRhdGFfMjEKKyAxIHwgMzEwIHwgZGF0YV8zMQorIDEgfCA0MTAgfCBkYXRhXzQx CisgMSB8IDUxMCB8IGRhdGFfNTEKKyAxIHwgNjEwIHwgZGF0YV82MQorIDEgfCA3MTAgfCBkYXRh XzcxCisgMSB8IDgxMCB8IGRhdGFfODEKKyAxIHwgOTEwIHwgZGF0YV85MQorKDEwIHJvd3MpCisK K1JFU0VUIHBsYW5fY2FjaGVfbW9kZTsKK1JFU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW47 CitEUk9QIFRBQkxFIGRpc3RyMSwgZGlzdHIyLCBiYXNlMSwgYmFzZTIsIGJhc2UzLCBiYXNlNDsK IEFMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChEUk9QIGFzeW5jX2NhcGFibGUpOwogQUxU RVIgU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TIChEUk9QIGFzeW5jX2NhcGFibGUpOwogLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMg Yi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCBhYTVjNzBlNTM5NC4u OTM0NmZiM2RiNmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC03MjE0LDgg KzcyMTQsOCBAQCBwb3N0Z3Jlc0ZvcmVpZ25Bc3luY0NvbmZpZ3VyZVdhaXQoQXN5bmNSZXF1ZXN0 ICphcmVxKQogCUZvcmVpZ25TY2FuU3RhdGUgKm5vZGUgPSAoRm9yZWlnblNjYW5TdGF0ZSAqKSBh cmVxLT5yZXF1ZXN0ZWU7CiAJUGdGZHdTY2FuU3RhdGUgKmZzc3RhdGUgPSAoUGdGZHdTY2FuU3Rh dGUgKikgbm9kZS0+ZmR3X3N0YXRlOwogCUFzeW5jUmVxdWVzdCAqcGVuZGluZ0FyZXEgPSBmc3N0 YXRlLT5jb25uX3N0YXRlLT5wZW5kaW5nQXJlcTsKLQlBcHBlbmRTdGF0ZSAqcmVxdWVzdG9yID0g KEFwcGVuZFN0YXRlICopIGFyZXEtPnJlcXVlc3RvcjsKLQlXYWl0RXZlbnRTZXQgKnNldCA9IHJl cXVlc3Rvci0+YXMuZXZlbnRzZXQ7CisJQXBwZW5kQmFzZVN0YXRlICpyZXF1ZXN0b3IgPSAoQXBw ZW5kQmFzZVN0YXRlICopIGFyZXEtPnJlcXVlc3RvcjsKKwlXYWl0RXZlbnRTZXQgKnNldCA9IHJl cXVlc3Rvci0+ZXZlbnRzZXQ7CiAKIAkvKiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHVubGVz cyBjYWxsYmFja19wZW5kaW5nICovCiAJQXNzZXJ0KGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOwpA QCAtNzI1Nyw3ICs3MjU3LDcgQEAgcG9zdGdyZXNGb3JlaWduQXN5bmNDb25maWd1cmVXYWl0KEFz eW5jUmVxdWVzdCAqYXJlcSkKIAkJICogYmVsb3csIGJlY2F1c2Ugd2UgbWlnaHQgb3RoZXJ3aXNl IGVuZCB1cCB3aXRoIG5vIGNvbmZpZ3VyZWQgZXZlbnRzCiAJCSAqIG90aGVyIHRoYW4gdGhlIHBv c3RtYXN0ZXIgZGVhdGggZXZlbnQuCiAJCSAqLwotCQlpZiAoIWJtc19pc19lbXB0eShyZXF1ZXN0 b3ItPmFzLm5lZWRyZXF1ZXN0KSkKKwkJaWYgKCFibXNfaXNfZW1wdHkocmVxdWVzdG9yLT5uZWVk cmVxdWVzdCkpCiAJCQlyZXR1cm47CiAJCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhz ZXQpID4gMSkKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Nx bC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwKaW5kZXggNTk5NjNlMjk4YjguLjQyNDJlZDMyNGEwIDEwMDY0NAotLS0gYS9jb250cmli L3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVz X2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMzk3NywxMCArMzk3NywxNyBAQCBJTlNFUlQg SU5UTyByZXN1bHRfdGJsIFNFTEVDVCBhLCBiLCAnQUFBJyB8fCBjIEZST00gYXN5bmNfcHQgV0hF UkUgYiA9PT0gNTA1OwogU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiBERUxF VEUgRlJPTSByZXN1bHRfdGJsOwogCistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiICUgMTAwID0g MCBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiICUgMTAwID0g MCBPUkRFUiBCWSBiLCBhOworCiAtLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBpZiBhY2Nlc3Npbmcg b25lIG9mIHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAogQ1JFQVRFIEZPUkVJR04g VEFCTEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZPUiBWQUxVRVMgRlJP TSAoMTAwMDApIFRPICgxMDAwMSkKICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25h bWUgJ25vbl9leGlzdGVudF90YWJsZScpOwogU0VMRUNUICogRlJPTSBhc3luY19wdDsKKy0tIFRl c3QgZXJyb3IgaGFuZGxpbmcgZm9yIGFzeW5jIE1lcmdlIEFwcGVuZAorU0VMRUNUICogRlJPTSBh c3luY19wdCBPUkRFUiBCWSBiLCBhOwogRFJPUCBGT1JFSUdOIFRBQkxFIGFzeW5jX3BfYnJva2Vu OwogCiAtLSBDaGVjayBjYXNlIHdoZXJlIG11bHRpcGxlIHBhcnRpdGlvbnMgdXNlIHRoZSBzYW1l IGNvbm5lY3Rpb24KQEAgLTQwMDAsNiArNDAwNywyMCBAQCBERUxFVEUgRlJPTSByZXN1bHRfdGJs OwogLS0gVGVzdCBDT1BZIFRPIHdoZW4gZm9yZWlnbiB0YWJsZSBpcyBwYXJ0aXRpb24KIENPUFkg YXN5bmNfcHQgVE8gc3Rkb3V0OyAtLWVycm9yCiAKKy0tIFRlc3QgTWVyZ2UgQXBwZW5kCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIg PT09IDUwNSBPUkRFUiBCWSBiLCBhOworU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09 PSA1MDUgT1JERVIgQlkgYiwgYTsKKworLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQgcmVzY2Fu CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5p IEZST00gKFNFTEVDVCBiICsgZy5pIEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBC WSBiKSBmKGkpIE9SREVSIEJZIGYuaSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDMpIGcoaSk7CitTRUxFQ1QKKwlBUlJBWShTRUxFQ1QgZi5pIEZST00gKFNFTEVDVCBiICsgZy5p IEZST00gYXN5bmNfcHQgV0hFUkUgYSA+IGcuaSBPUkRFUiBCWSBiKSBmKGkpIE9SREVSIEJZIGYu aSBMSU1JVCAxMCkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDMpIGcoaSk7CisKIERST1AgRk9S RUlHTiBUQUJMRSBhc3luY19wMzsKIERST1AgVEFCTEUgYmFzZV90YmwzOwogCkBAIC00MDE1LDYg KzQwMzYsMTEgQEAgSU5TRVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0 IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBhOwog REVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0g NTA1IE9SREVSIEJZIGIsIGE7CitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUw NSBPUkRFUiBCWSBiLCBhOworCiAtLSBwYXJ0aXRpb253aXNlIGpvaW5zCiBTRVQgZW5hYmxlX3Bh cnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOwogCkBAIC00MDU1LDYgKzQwODEsMTAgQEAgU0VMRUNU ICogRlJPTSBhc3luY19wdCBXSEVSRSBhIDwgMzAwMDsKIEVYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikKIFNFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYSA8IDIwMDA7CiAKKy0tIFRlc3Qg aW50ZXJhY3Rpb24gb2YgYXN5bmMgTWVyZ2UgQXBwZW5kIHdpdGggcGxhbi10aW1lIHBhcnRpdGlv biBwcnVuaW5nCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGFz eW5jX3B0IFdIRVJFIGEgPCAzMDAwIE9SREVSIEJZIGIsIGE7CisKIC0tIFRlc3QgaW50ZXJhY3Rp b24gb2YgYXN5bmMgZXhlY3V0aW9uIHdpdGggcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcKIFNF VCBwbGFuX2NhY2hlX21vZGUgVE8gZm9yY2VfZ2VuZXJpY19wbGFuOwogCkBAIC00MDc1LDYgKzQx MDUsMTggQEAgRVhFQ1VURSBhc3luY19wdF9xdWVyeSAoMjAwMCwgNTA1KTsKIFNFTEVDVCAqIEZS T00gcmVzdWx0X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAorLS0g VGVzdCBpbnRlcmFjdGlvbiBvZiBhc3luYyBNZXJnZSBBcHBlbmQgd2l0aCBydW4tdGltZSBwYXJ0 aXRpb24gcHJ1bmluZworUFJFUEFSRSBhc3luY19wdF9tZXJnZV9xdWVyeSAoaW50LCBpbnQpIEFT CisgIFNFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYSA8ICQxIEFORCBiID09PSAkMiBPUkRF UiBCWSBiLCBhOworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitFWEVDVVRFIGFzeW5j X3B0X21lcmdlX3F1ZXJ5ICgzMDAwLCA1MDUpOworRVhFQ1VURSBhc3luY19wdF9tZXJnZV9xdWVy eSAoMzAwMCwgNTA1KTsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorRVhFQ1VURSBh c3luY19wdF9tZXJnZV9xdWVyeSAoMjAwMCwgNTA1KTsKK0VYRUNVVEUgYXN5bmNfcHRfbWVyZ2Vf cXVlcnkgKDIwMDAsIDUwNSk7CisKIFJFU0VUIHBsYW5fY2FjaGVfbW9kZTsKIAogQ1JFQVRFIFRB QkxFIGxvY2FsX3RibChhIGludCwgYiBpbnQsIGMgdGV4dCk7CkBAIC00MjUzLDYgKzQyOTUsNjkg QEAgU0VMRUNUIGEgRlJPTSBiYXNlX3RibCBXSEVSRSAoYSwgcmFuZG9tKCkgPiAwKSBJTiAoU0VM RUNUIGEsIHJhbmRvbSgpID4gMCBGUk9NIGYKIERST1AgRk9SRUlHTiBUQUJMRSBmb3JlaWduX3Ri bCBDQVNDQURFOwogRFJPUCBUQUJMRSBiYXNlX3RibDsKIAorLS0gVGVzdCBhc3luYyBNZXJnZSBB cHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEgKGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJ T04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0 KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZP UkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJVElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRI IChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxl X25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9O IE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJW RVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTInKTsKKworQ1JFQVRFIFRBQkxF IGRpc3RyMiAoaSBpbnQsIGogaW50LCBrIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NS RUFURSBUQUJMRSBiYXNlMyAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJh c2U0IChpIGludCwgaiBpbnQsIGsgdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJf cDEgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlO REVSIDApCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTMnKTsKK0NS RUFURSBGT1JFSUdOIFRBQkxFIGRpc3RyMl9wMiBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxV RVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1BSU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05T ICh0YWJsZV9uYW1lICdiYXNlNCcpOworCitJTlNFUlQgSU5UTyBkaXN0cjEKK1NFTEVDVCBpLCBp KjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworSU5T RVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMCkgaTsKKworQU5BTFlaRSBkaXN0cjFfcDE7CitBTkFMWVpFIGRpc3Ry MV9wMjsKK0FOQUxZWkUgZGlzdHIyX3AxOworQU5BTFlaRSBkaXN0cjJfcDI7CisKK1NFVCBlbmFi bGVfcGFydGl0aW9ud2lzZV9qb2luIFRPIE9OOworCistLSBUZXN0IGpvaW5zIHdpdGggYXN5bmMg TWVyZ2UgQXBwZW5kCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkw IGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOwor U0VMRUNUICogRlJPTSBkaXN0cjEsIGRpc3RyMiBXSEVSRSBkaXN0cjEuaT1kaXN0cjIuaSBBTkQg ZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnCitPUkRFUiBCWSBkaXN0cjIu aSBMSU1JVCAxMDsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIy LmsgbGlrZSAnZGF0YSUnIFdIRVJFICBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBM SU1JVCAyMDsKK1NFTEVDVCAqIEZST00gZGlzdHIxIExFRlQgSk9JTiBkaXN0cjIgT04gIGRpc3Ry MS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuayBsaWtlICdkYXRhJScgV0hFUkUgZGlzdHIxLmkgPiA5 MAorT1JERVIgQlkgZGlzdHIxLmkgTElNSVQgMjA7CisKKy0tIFRlc3QgcHJ1bmluZyB3aXRoIGFz eW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00gZGlzdHIyOworSU5TRVJUIElOVE8gZGlzdHIy CitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDApIGk7CisKK0RFQUxMT0NBVEUgQUxMOworU0VUIHBsYW5fY2FjaGVfbW9kZSBUTyBmb3Jj ZV9nZW5lcmljX3BsYW47CitQUkVQQVJFIGFzeW5jX3B0X3F1ZXJ5IChpbnQsIGludCkgQVMKKyAg U0VMRUNUICogRlJPTSBkaXN0cjIgV0hFUkUgaSA9IEFOWShBUlJBWVskMSwgJDJdKQorICBPUkRF UiBCWSBpLGoKKyAgTElNSVQgMTA7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCisJRVhF Q1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKK0VYRUNVVEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7 CitSRVNFVCBwbGFuX2NhY2hlX21vZGU7CisKK1JFU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pv aW47CisKK0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIsIGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJh c2U0OworCiBBTFRFUiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxl KTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsK IApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sCmluZGV4IDMzMjRkMmQzYzQ5Li45MjQ4OWU1ZjZlZCAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAt NTU5OSw2ICs1NTk5LDIwIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVt X3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3Rp dGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt ZW5hYmxlLWFzeW5jLW1lcmdlLWFwcGVuZCIgeHJlZmxhYmVsPSJlbmFibGVfYXN5bmNfbWVyZ2Vf YXBwZW5kIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQ8 L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAg ICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2FzeW5jX21lcmdlX2FwcGVuZDwvdmFybmFtZT4g Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAg ICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5h YmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIHVzZSBvZiBhc3luYy1hd2FyZQor ICAgICAgICBtZXJnZSBhcHBlbmQgcGxhbiB0eXBlcy4gVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+ b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwv dmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtYml0bWFw c2NhbiIgeHJlZmxhYmVsPSJlbmFibGVfYml0bWFwc2NhbiI+CiAgICAgICA8dGVybT48dmFybmFt ZT5lbmFibGVfYml0bWFwc2NhbjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAg ICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3lu Yy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FzeW5jLmMKaW5kZXggY2Y3ZGRiYjAxZjQu LmNjOTVkMjg1MjIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYwpAQCAtMTksNiArMTksNyBA QAogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKICNpbmNsdWRlICJleGVjdXRvci9u b2RlQXBwZW5kLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUZvcmVpZ25zY2FuLmgiCisjaW5j bHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgiCiAKIC8qCiAgKiBBc3luY2hyb25vdXNs eSByZXF1ZXN0IGEgdHVwbGUgZnJvbSBhIGRlc2lnbmVkIGFzeW5jLWNhcGFibGUgbm9kZS4KQEAg LTEyMiw2ICsxMjMsOSBAQCBFeGVjQXN5bmNSZXNwb25zZShBc3luY1JlcXVlc3QgKmFyZXEpCiAJ CWNhc2UgVF9BcHBlbmRTdGF0ZToKIAkJCUV4ZWNBc3luY0FwcGVuZFJlc3BvbnNlKGFyZXEpOwog CQkJYnJlYWs7CisJCWNhc2UgVF9NZXJnZUFwcGVuZFN0YXRlOgorCQkJRXhlY0FzeW5jTWVyZ2VB cHBlbmRSZXNwb25zZShhcmVxKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogSWYgdGhl IG5vZGUgZG9lc24ndCBzdXBwb3J0IGFzeW5jLCBjYWxsZXIgbWVzc2VkIHVwLiAqLwogCQkJZWxv ZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1lcmdlQXBwZW5kLmMKaW5kZXggNTkxYmUxMDE4ZDguLjllZjcxYTJhNGQ2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtMjQsNiArMjQsMTUgQEAKICAqCQl0 byBhIGNvbW1vbiBzb3J0IGtleS4gIFRoZSBNZXJnZUFwcGVuZCBub2RlIG1lcmdlcyB0aGVzZSBz dHJlYW1zCiAgKgkJdG8gcHJvZHVjZSBvdXRwdXQgc29ydGVkIHRoZSBzYW1lIHdheS4KICAqCisg KgkJTWVyZ2VBcHBlbmQgc3VwcG9ydHMgYXN5bmMtY2FwYWJsZSBzdWJwbGFucyAoZS5nLiBmb3Jl aWduIHNjYW5zKS4KKyAqCQlBc3luYyBleGVjdXRpb24gaXMgYmVuZWZpY2lhbCBkdXJpbmcgdGhl IGluaXRpYWwgaGVhcCBmaWxsLCB3aGVyZQorICoJCWFsbCBhc3luYyBzdWJwbGFucyBhcmUga2lj a2VkIG9mZiBjb25jdXJyZW50bHkgYW5kIHRoZWlyIGZpcnN0CisgKgkJdHVwbGVzIGFyZSBmZXRj aGVkIGluIHBhcmFsbGVsLiAgSW4gc3RlYWR5IHN0YXRlLCBob3dldmVyLCB0aGUKKyAqCQloZWFw IGFsZ29yaXRobSByZXF1aXJlcyB0aGUgbmV4dCB0dXBsZSBmcm9tIG9uZSBzcGVjaWZpYyBzdWJw bGFuCisgKgkJKHRoZSBvbmUgYXQgdGhlIGhlYXAgdG9wKSwgc28gZXhlY3V0aW9uIGlzIGVmZmVj dGl2ZWx5IHN5bmNocm9ub3VzCisgKgkJYXQgdGhhdCBwb2ludCAtIHdlIG11c3QgYmxvY2sgdW50 aWwgdGhhdCBwYXJ0aWN1bGFyIHN1YnBsYW4KKyAqCQlkZWxpdmVycyBpdHMgbmV4dCB0dXBsZS4K KyAqCiAgKgkJTWVyZ2VBcHBlbmQgbm9kZXMgZG9uJ3QgbWFrZSB1c2Ugb2YgdGhlaXIgbGVmdCBh bmQgcmlnaHQKICAqCQlzdWJ0cmVlcywgcmF0aGVyIHRoZXkgbWFpbnRhaW4gYSBsaXN0IG9mIHN1 YnBsYW5zIHNvCiAgKgkJYSB0eXBpY2FsIE1lcmdlQXBwZW5kIG5vZGUgbG9va3MgbGlrZSB0aGlz IGluIHRoZSBwbGFuIHRyZWU6CkBAIC00NSw2ICs1NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFy eWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9zb3J0c3Vw cG9ydC5oIgorI2luY2x1ZGUgInV0aWxzL3dhaXRfZXZlbnQuaCIKIAogLyoKICAqIFdlIGhhdmUg b25lIHNsb3QgZm9yIGVhY2ggaXRlbSBpbiB0aGUgaGVhcCBhcnJheS4gIFdlIHVzZSBTbG90TnVt YmVyCkBAIC01Niw2ICs2NiwxMSBAQCB0eXBlZGVmIGludDMyIFNsb3ROdW1iZXI7CiBzdGF0aWMg VHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSk7CiBzdGF0 aWMgaW50CWhlYXBfY29tcGFyZV9zbG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpOwog CitzdGF0aWMgdm9pZCBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhNZXJnZUFwcGVuZFN0YXRl ICpub2RlKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBl bmRTdGF0ZSAqbm9kZSk7CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQo TWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFuKTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJn ZUFwcGVuZEFzeW5jRXZlbnRXYWl0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpOworCiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAqCQlFeGVjSW5pdE1lcmdlQXBwZW5kCkBAIC04NywxMCArMTAyLDE1IEBAIEV4ZWNJ bml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZs YWdzKQogCQkJCQkgICAtMSwKIAkJCQkJICAgTlVMTCk7CiAKKwlpZiAobWVyZ2VzdGF0ZS0+YXMu bmFzeW5jcGxhbnMgPiAwICYmIG1lcmdlc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZp ZWQpCisJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG1lcmdlc3RhdGUpOworCiAJbWVyZ2Vz dGF0ZS0+bXNfc2xvdHMgPSBwYWxsb2MwX2FycmF5KFR1cGxlVGFibGVTbG90ICosIG1lcmdlc3Rh dGUtPmFzLm5wbGFucyk7CiAJbWVyZ2VzdGF0ZS0+bXNfaGVhcCA9IGJpbmFyeWhlYXBfYWxsb2Nh dGUobWVyZ2VzdGF0ZS0+YXMubnBsYW5zLCBoZWFwX2NvbXBhcmVfc2xvdHMsCiAJCQkJCQkJCQkJ CSAgbWVyZ2VzdGF0ZSk7CiAKKwltZXJnZXN0YXRlLT5tc19hc3luY3JlbWFpbiA9IE5VTEw7CisK IAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3JtYXRpb24KIAkgKi8KQEAgLTE1Nyw4 ICsxNzcsMTMgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkJbm9kZS0+ YXMudmFsaWRfc3VicGxhbnMgPQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5h cy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNf aWRlbnRpZmllZCA9IHRydWU7CisJCQljbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhub2RlKTsK IAkJfQogCisJCS8qIElmIHRoZXJlIGFyZSBhbnkgYXN5bmMgc3VicGxhbnMsIGJlZ2luIGV4ZWN1 dGluZyB0aGVtLiAqLworCQlpZiAobm9kZS0+YXMubmFzeW5jcGxhbnMgPiAwKQorCQkJRXhlY01l cmdlQXBwZW5kQXN5bmNCZWdpbihub2RlKTsKKwogCQkvKgogCQkgKiBGaXJzdCB0aW1lIHRocm91 Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxlIGZyb20gZWFjaCB2YWxpZCBzdWJwbGFuLAogCQkgKiBh bmQgc2V0IHVwIHRoZSBoZWFwLgpAQCAtMTcwLDYgKzE5NSwxNiBAQCBFeGVjTWVyZ2VBcHBlbmQo UGxhblN0YXRlICpwc3RhdGUpCiAJCQlpZiAoIVR1cElzTnVsbChub2RlLT5tc19zbG90c1tpXSkp CiAJCQkJYmluYXJ5aGVhcF9hZGRfdW5vcmRlcmVkKG5vZGUtPm1zX2hlYXAsIEludDMyR2V0RGF0 dW0oaSkpOwogCQl9CisKKwkJLyogTG9vayBhdCB2YWxpZCBhc3luYyBzdWJwbGFucyAqLworCQlp ID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9hc3lu Y3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0KG5v ZGUsIGkpOworCQkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQorCQkJCWJpbmFy eWhlYXBfYWRkX3Vub3JkZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKKwkJ fQorCiAJCWJpbmFyeWhlYXBfYnVpbGQobm9kZS0+bXNfaGVhcCk7CiAJCW5vZGUtPm1zX2luaXRp YWxpemVkID0gdHJ1ZTsKIAl9CkBAIC0yNjQsOCArMjk5LDE0MSBAQCBFeGVjRW5kTWVyZ2VBcHBl bmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHZvaWQKIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChN ZXJnZUFwcGVuZFN0YXRlICpub2RlKQogeworCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+YXMu bmFzeW5jcGxhbnM7CisKIAlFeGVjUmVTY2FuQXBwZW5kQmFzZSgmbm9kZS0+YXMpOwogCisJLyog UmVzZXQgTWVyZ2VBcHBlbmQtc3BlY2lmaWMgc3RhdGUgKi8KKwlpZiAobmFzeW5jcGxhbnMgPiAw KQorCXsKKwkJYm1zX2ZyZWUobm9kZS0+bXNfYXN5bmNyZW1haW4pOworCQlub2RlLT5tc19hc3lu Y3JlbWFpbiA9IE5VTEw7CisJfQogCWJpbmFyeWhlYXBfcmVzZXQobm9kZS0+bXNfaGVhcCk7CiAJ bm9kZS0+bXNfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH0KKworLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCWNsYXNz aWZ5X21hdGNoaW5nX3N1YnBsYW5zCisgKgorICoJCUNsYXNzaWZ5IHRoZSBub2RlJ3MgbXNfdmFs aWRfc3VicGxhbnMgaW50byBzeW5jIG9uZXMgYW5kCisgKgkJYXN5bmMgb25lcywgYWRqdXN0IGl0 IHRvIGNvbnRhaW4gc3luYyBvbmVzIG9ubHksIGFuZCBzYXZlCisgKgkJYXN5bmMgb25lcyBpbiB0 aGUgbm9kZSdzIGFzLnZhbGlkX2FzeW5jcGxhbnMuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2 b2lkCitjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhNZXJnZUFwcGVuZFN0YXRlICpub2RlKQor eworCUFzc2VydChub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKworCS8qIE5v dGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlkIHN1YnBsYW5zLiAqLworCWlmIChibXNf aXNfZW1wdHkobm9kZS0+YXMudmFsaWRfc3VicGxhbnMpKQorCXsKKwkJbm9kZS0+bXNfYXN5bmNy ZW1haW4gPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyogTm8gdmFsaWQgYXN5bmMgc3VicGxh bnMgaWRlbnRpZmllZC4gKi8KKwlpZiAoIWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zX2NvbW1v bigmbm9kZS0+YXMudmFsaWRfc3VicGxhbnMsCisJCQkJCQkJCQkJICAgbm9kZS0+YXMuYXN5bmNw bGFucywKKwkJCQkJCQkJCQkgICAmbm9kZS0+YXMudmFsaWRfYXN5bmNwbGFucykpCisJCW5vZGUt Pm1zX2FzeW5jcmVtYWluID0gTlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCUV4ZWNNZXJnZUFw cGVuZEFzeW5jQmVnaW4KKyAqCisgKgkJQmVnaW4gZXhlY3V0aW5nIGRlc2lnbmVkIGFzeW5jLWNh cGFibGUgc3VicGxhbnMuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkCitFeGVjTWVyZ2VB cHBlbmRBc3luY0JlZ2luKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCit7CisJLyogRXhlY01lcmdl QXBwZW5kKCkgaWRlbnRpZmllcyB2YWxpZCBzdWJwbGFucyAqLworCUFzc2VydChub2RlLT5hcy52 YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKTsKKworCS8qIEluaXRpYWxpemUgc3RhdGUgdmFyaWFi bGVzLiAqLworCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gYm1zX2NvcHkobm9kZS0+YXMudmFsaWRf YXN5bmNwbGFucyk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBh c3luYyBzdWJwbGFucy4gKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPm1zX2FzeW5jcmVtYWlu KSkKKwkJcmV0dXJuOworCisJRXhlY0FwcGVuZEJhc2VBc3luY0JlZ2luKCZub2RlLT5hcyk7Cit9 CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQKKyAqCisgKgkJ R2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gc3BlY2lmaWVkIGFzeW5jaHJvbm91cyBzdWJwbGFuLgor ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNHZXROZXh0 KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwkvKgorCSAqIEFsbCBpbml0 aWFsIGFzeW5jIHJlcXVlc3RzIHdlcmUgZmlyZWQgYnkgRXhlY01lcmdlQXBwZW5kQXN5bmNCZWdp bi4gVGhlCisJICogcmVzdWx0IG1heSBhbHJlYWR5IGJlIGNhY2hlZCBmcm9tIGEgcHJpb3IgZXZl bnQgd2FpdCAtIGlmIHNvLCBub3RoaW5nCisJICogdG8gZG8uICBPdGhlcndpc2UsIHdhaXQgZm9y IHRoZSBzcGVjaWZpYyBzdWJwbGFuIHRvIGRlbGl2ZXIgYSB0dXBsZSBvcgorCSAqIHJlcG9ydCBl eGhhdXN0aW9uLgorCSAqLworCXdoaWxlIChUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbbXBsYW5d KSAmJgorCQkgICBibXNfaXNfbWVtYmVyKG1wbGFuLCBub2RlLT5tc19hc3luY3JlbWFpbikpCisJ eworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50 V2FpdChub2RlKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjQXN5bmNNZXJnZUFwcGVu ZFJlc3BvbnNlCisgKgorICoJCVJlY2VpdmUgYSByZXNwb25zZSBmcm9tIGFuIGFzeW5jaHJvbm91 cyByZXF1ZXN0IHdlIG1hZGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK0V4ZWNBc3luY01lcmdl QXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQoreworCU1lcmdlQXBwZW5kU3RhdGUg Km5vZGUgPSAoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0b3I7CisJVHVwbGVUYWJs ZVNsb3QgKnNsb3QgPSBhcmVxLT5yZXN1bHQ7CisKKwkvKiBUaGUgcmVzdWx0IHNob3VsZCBiZSBh IFR1cGxlVGFibGVTbG90IG9yIE5VTEwuICovCisJQXNzZXJ0KHNsb3QgPT0gTlVMTCB8fCBJc0Eo c2xvdCwgVHVwbGVUYWJsZVNsb3QpKTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHJlcXVl c3QgaXMgcGVuZGluZy4gKi8KKwlpZiAoIWFyZXEtPnJlcXVlc3RfY29tcGxldGUpCisJeworCQkv KiBUaGUgcmVxdWVzdCB3b3VsZCBoYXZlIGJlZW4gcGVuZGluZyBmb3IgYSBjYWxsYmFjay4gKi8K KwkJQXNzZXJ0KGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOworCQlyZXR1cm47CisJfQorCisJLyog SWYgdGhlIHJlc3VsdCBpcyBOVUxMIG9yIGFuIGVtcHR5IHNsb3QsIHRoZSBzdWJwbGFuIGlzIGV4 aGF1c3RlZC4gKi8KKwlpZiAoVHVwSXNOdWxsKHNsb3QpKQorCXsKKwkJLyogVGhlIGVuZGluZyBz dWJwbGFuIHdvdWxkbid0IGhhdmUgYmVlbiBwZW5kaW5nIGZvciBhIGNhbGxiYWNrLiAqLworCQlB c3NlcnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9 IGJtc19kZWxfbWVtYmVyKG5vZGUtPm1zX2FzeW5jcmVtYWluLAorCQkJCQkJCQkJCQkgIGFyZXEt PnJlcXVlc3RfaW5kZXgpOworCQlyZXR1cm47CisJfQorCisJLyogU2F2ZSByZXN1bHQgZGlyZWN0 bHkgaW50byB0aGUgbWVyZ2Ugc2xvdCBhcnJheS4gKi8KKwlub2RlLT5tc19zbG90c1thcmVxLT5y ZXF1ZXN0X2luZGV4XSA9IHNsb3Q7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQlFeGVjTWVyZ2VBcHBl bmRBc3luY0V2ZW50V2FpdAorICoKKyAqCQlXYWl0IG9yIHBvbGwgZm9yIGZpbGUgZGVzY3JpcHRv ciBldmVudHMgYW5kIGZpcmUgY2FsbGJhY2tzLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9p ZAorRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkK K3sKKwkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHZhbGlk IGFzeW5jIHN1YnBsYW5zLiAqLworCUFzc2VydChibXNfbnVtX21lbWJlcnMobm9kZS0+bXNfYXN5 bmNyZW1haW4pID4gMCk7CisKKwlFeGVjQXBwZW5kQmFzZUFzeW5jRXZlbnRXYWl0KCZub2RlLT5h cywgLTEgLyogbm8gdGltZW91dCAqLyAsCisJCQkJCQkJCSBXQUlUX0VWRU5UX01FUkdFX0FQUEVO RF9SRUFEWSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCAxYzU3 NWU1NmZmNi4uYjYxMDllNWI5MWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUu YwpAQCAtMTY0LDYgKzE2NCw3IEBAIGJvb2wJCWVuYWJsZV9wYXJhbGxlbF9oYXNoID0gdHJ1ZTsK IGJvb2wJCWVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZyA9IHRydWU7CiBib29sCQllbmFibGVfcHJl c29ydGVkX2FnZ3JlZ2F0ZSA9IHRydWU7CiBib29sCQllbmFibGVfYXN5bmNfYXBwZW5kID0gdHJ1 ZTsKK2Jvb2wJCWVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgPSB0cnVlOwogCiB0eXBlZGVmIHN0 cnVjdAogewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IGMwODhi MGIzYzcxLi4wZGVkYTJiZDZiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYwpAQCAtMTQ1MSw2ICsxNDUxLDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlMaXN0CSAgICpzdWJw bGFucyA9IE5JTDsKIAlMaXN0Q2VsbCAgICpzdWJwYXRoczsKIAlSZWxPcHRJbmZvICpyZWwgPSBi ZXN0X3BhdGgtPnBhdGgucGFyZW50OworCWJvb2wJCWNvbnNpZGVyX2FzeW5jID0gZmFsc2U7CiAK IAkvKgogCSAqIFdlIGRvbid0IGhhdmUgdGhlIGFjdHVhbCBjcmVhdGlvbiBvZiB0aGUgTWVyZ2VB cHBlbmQgbm9kZSBzcGxpdCBvdXQKQEAgLTE0NjYsNiArMTQ2NywxMCBAQCBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRo LAogCW5vZGUtPmFiLmFwcHJlbGlkcyA9IHJlbC0+cmVsaWRzOwogCW5vZGUtPmFiLmNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzID0gYmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAor CWNvbnNpZGVyX2FzeW5jID0gKGVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgJiYKKwkJCQkJICAh YmVzdF9wYXRoLT5wYXRoLnBhcmFsbGVsX3NhZmUgJiYKKwkJCQkJICBsaXN0X2xlbmd0aChiZXN0 X3BhdGgtPnN1YnBhdGhzKSA+IDEpOworCiAJLyoKIAkgKiBDb21wdXRlIHNvcnQgY29sdW1uIGlu Zm8sIGFuZCBhZGp1c3QgTWVyZ2VBcHBlbmQncyB0bGlzdCBhcyBuZWVkZWQuCiAJICogQmVjYXVz ZSB3ZSBwYXNzIGFkanVzdF90bGlzdF9pbl9wbGFjZSA9IHRydWUsIHdlIG1heSBpZ25vcmUgdGhl CkBAIC0xNTY2LDYgKzE1NzEsMTAgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJ bmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAkJCXN1YnBsYW4gPSBzb3J0 X3BsYW47CiAJCX0KIAorCQkvKiBJZiBuZWVkZWQsIGNoZWNrIHRvIHNlZSBpZiBzdWJwbGFuIGNh biBiZSBleGVjdXRlZCBhc3luY2hyb25vdXNseSAqLworCQlpZiAoY29uc2lkZXJfYXN5bmMpCisJ CQltYXJrX2FzeW5jX2NhcGFibGVfcGxhbihzdWJwbGFuLCBzdWJwYXRoKTsKKwogCQlzdWJwbGFu cyA9IGxhcHBlbmQoc3VicGxhbnMsIHN1YnBsYW4pOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCAwYTZkMTZmODE1NC4uODgw NWZmODQzOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRf bmFtZXMudHh0CkBAIC0xNDEsNiArMTQxLDcgQEAgTE9HSUNBTF9BUFBMWV9TRU5EX0RBVEEJIldh aXRpbmcgZm9yIGEgbG9naWNhbCByZXBsaWNhdGlvbiBsZWFkZXIgYXBwbHkgcHJvY2VzcwogTE9H SUNBTF9QQVJBTExFTF9BUFBMWV9TVEFURV9DSEFOR0UJIldhaXRpbmcgZm9yIGEgbG9naWNhbCBy ZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSBwcm9jZXNzIHRvIGNoYW5nZSBzdGF0ZS4iCiBMT0dJ Q0FMX1NZTkNfREFUQQkiV2FpdGluZyBmb3IgYSBsb2dpY2FsIHJlcGxpY2F0aW9uIHJlbW90ZSBz ZXJ2ZXIgdG8gc2VuZCBkYXRhIGZvciBpbml0aWFsIHRhYmxlIHN5bmNocm9uaXphdGlvbi4iCiBM T0dJQ0FMX1NZTkNfU1RBVEVfQ0hBTkdFCSJXYWl0aW5nIGZvciBhIGxvZ2ljYWwgcmVwbGljYXRp b24gcmVtb3RlIHNlcnZlciB0byBjaGFuZ2Ugc3RhdGUuIgorTUVSR0VfQVBQRU5EX1JFQURZCSJX YWl0aW5nIGZvciBzdWJwbGFuIG5vZGVzIG9mIGEgPGxpdGVyYWw+TWVyZ2VBcHBlbmQ8L2xpdGVy YWw+IHBsYW4gbm9kZSB0byBiZSByZWFkeS4iCiBNRVNTQUdFX1FVRVVFX0lOVEVSTkFMCSJXYWl0 aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gYmUgYXR0YWNoZWQgdG8gYSBzaGFyZWQgbWVzc2Fn ZSBxdWV1ZS4iCiBNRVNTQUdFX1FVRVVFX1BVVF9NRVNTQUdFCSJXYWl0aW5nIHRvIHdyaXRlIGEg cHJvdG9jb2wgbWVzc2FnZSB0byBhIHNoYXJlZCBtZXNzYWdlIHF1ZXVlLiIKIE1FU1NBR0VfUVVF VUVfUkVDRUlWRQkiV2FpdGluZyB0byByZWNlaXZlIGJ5dGVzIGZyb20gYSBzaGFyZWQgbWVzc2Fn ZSBxdWV1ZS4iCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4 IGZjYjZhYjgwNTgzLi42YTdkMjdhYzVkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNf cGFyYW1ldGVycy5kYXQKQEAgLTg3MCw2ICs4NzAsMTQgQEAKICAgYm9vdF92YWwgPT4gJ3RydWUn LAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kJywgdHlwZSA9PiAn Ym9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19N RVRIT0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBwbGFubmVyXCdzIHVzZSBvZiBh c3luYyBtZXJnZSBhcHBlbmQgcGxhbnMuJywKKyAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKKyAg dmFyaWFibGUgPT4gJ2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQnLAorICBib290X3ZhbCA9PiAn dHJ1ZScsCit9LAorCisKIHsgbmFtZSA9PiAnZW5hYmxlX2JpdG1hcHNjYW4nLCB0eXBlID0+ICdi b29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01F VEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIGJp dG1hcC1zY2FuIHBsYW5zLicsCiAgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZTNlNDYyZjNlZmIu LjE4NmM4MmU5Mzk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlCkBAIC00MTQsNiArNDE0LDcgQEAKICMgLSBQbGFubmVyIE1ldGhvZCBDb25maWd1 cmF0aW9uIC0KIAogI2VuYWJsZV9hc3luY19hcHBlbmQgPSBvbgorI2VuYWJsZV9hc3luY19tZXJn ZV9hcHBlbmQgPSBvbgogI2VuYWJsZV9iaXRtYXBzY2FuID0gb24KICNlbmFibGVfZ2F0aGVybWVy Z2UgPSBvbgogI2VuYWJsZV9oYXNoYWdnID0gb24KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdl QXBwZW5kLmgKaW5kZXggZGZjZjQ1MDk5YmEuLjIyNTVjYzY4YjIxIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaAorKysgYi9zcmMvaW5jbHVkZS9leGVj dXRvci9ub2RlTWVyZ2VBcHBlbmQuaApAQCAtMTksNSArMTksNiBAQAogZXh0ZXJuIE1lcmdlQXBw ZW5kU3RhdGUgKkV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAq ZXN0YXRlLCBpbnQgZWZsYWdzKTsKIGV4dGVybiB2b2lkIEV4ZWNFbmRNZXJnZUFwcGVuZChNZXJn ZUFwcGVuZFN0YXRlICpub2RlKTsKIGV4dGVybiB2b2lkIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChN ZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKK2V4dGVybiB2b2lkIEV4ZWNBc3luY01lcmdlQXBwZW5k UmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKTsKIAogI2VuZGlmCQkJCQkJCS8qIE5PREVNRVJH RUFQUEVORF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDQyM2U1ZWNmYTMzLi5iZmNhMjcy ZDVlMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE2MDYsNiArMTYwNiw5IEBAIHR5cGVkZWYg c3RydWN0IE1lcmdlQXBwZW5kU3RhdGUKIAlUdXBsZVRhYmxlU2xvdCAqKm1zX3Nsb3RzOwkvKiBh cnJheSBvZiBsZW5ndGggbXNfbnBsYW5zICovCiAJc3RydWN0IGJpbmFyeWhlYXAgKm1zX2hlYXA7 IC8qIGJpbmFyeSBoZWFwIG9mIHNsb3QgaW5kaWNlcyAqLwogCWJvb2wJCW1zX2luaXRpYWxpemVk OyAvKiBhcmUgc3VicGxhbnMgc3RhcnRlZD8gKi8KKworCS8qIE1lcmdlLXNwZWNpZmljIGFzeW5j IHRyYWNraW5nICovCisJQml0bWFwc2V0ICAqbXNfYXN5bmNyZW1haW47IC8qIHJlbWFpbmluZyBh c3luY2hyb25vdXMgcGxhbnMgKi8KIH0gTWVyZ2VBcHBlbmRTdGF0ZTsKIAogLyogLS0tLS0tLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9p bmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggZjJmZDVkMzE1MDcuLjc5OGFmMWZjZDVjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJv b2wgZW5hYmxlX3BhcmFsbGVsX2hhc2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf cGFydGl0aW9uX3BydW5pbmc7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfcHJlc29y dGVkX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9hc3luY19hcHBl bmQ7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb25zdHJhaW50X2V4Y2x1c2lvbjsKIAogZXh0ZXJuIGRv dWJsZSBpbmRleF9wYWdlc19mZXRjaGVkKGRvdWJsZSB0dXBsZXNfZmV0Y2hlZCwgQmxvY2tOdW1i ZXIgcGFnZXMsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdz Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4IDEzMmI1 NmE1ODY0Li40MjJjYThiN2QxZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5v dXQKQEAgLTE1Niw2ICsxNTYsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRp bmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgICAgICAgICAgICAgIG5hbWUgICAgICAg ICAgICAgIHwgc2V0dGluZyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLQogIGVuYWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9uCisgZW5hYmxlX2FzeW5j X21lcmdlX2FwcGVuZCAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2NhbiAgICAgICAgICAgICAg fCBvbgogIGVuYWJsZV9kaXN0aW5jdF9yZW9yZGVyaW5nICAgICB8IG9uCiAgZW5hYmxlX2VhZ2Vy X2FnZ3JlZ2F0ZSAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsxODEsNyBAQCBzZWxlY3QgbmFtZSwg c2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5h YmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAg ICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjUg cm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3Jp cHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVz ZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVy IHN0YXJ0LgotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoK --000000000000085fe4064ed3bfdb Content-Type: application/octet-stream; name="v18-0002-Introduce-AppendBase-AppendBaseState-base-types-.patch" Content-Disposition: attachment; filename="v18-0002-Introduce-AppendBase-AppendBaseState-base-types-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnvenes1 RnJvbSBkMzU0NmZlOTlhNzBjOTY2MDg3NTkyYzhkNDlmOTg1MjY3NWYwMjBhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogU3VuLCA1IEFwciAyMDI2IDA0OjAwOjE1ICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTggMi81XSBJbnRyb2R1Y2UgQXBwZW5kQmFzZS9BcHBlbmRCYXNlU3RhdGUgYmFzZSB0 eXBlcyBmb3IKIEFwcGVuZC9NZXJnZUFwcGVuZAoKSW50cm9kdWNlIGNvbW1vbiBiYXNlIHR5cGVz IEFwcGVuZEJhc2UgKHBsYW4gbm9kZSkgYW5kIEFwcGVuZEJhc2VTdGF0ZQooZXhlY3V0b3Igc3Rh dGUpIHRvIHVuaWZ5IHRoZSBmaWVsZHMgc2hhcmVkIGJldHdlZW4gQXBwZW5kL01lcmdlQXBwZW5k IGFuZApBcHBlbmRTdGF0ZS9NZXJnZUFwcGVuZFN0YXRlLgoKQXBwZW5kQmFzZSBob2xkcyB0aGUg c3VicGxhbiBsaXN0LCBhcHBlbmRyZWwgaWRlbnRpZmllcnMsIGFuZCBwYXJ0aXRpb24KcHJ1bmlu ZyBpbmRleC4gIEFwcGVuZEJhc2VTdGF0ZSBob2xkcyB0aGUgc3VicGxhbiBzdGF0ZSBhcnJheSwg YXN5bmNocm9ub3VzCmV4ZWN1dGlvbiBpbmZyYXN0cnVjdHVyZSwgYW5kIHBhcnRpdGlvbiBwcnVu aW5nIHN0YXRlLgoKQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBub3cgZW1iZWQgQXBwZW5kQmFzZSBh cyB0aGVpciBmaXJzdCBmaWVsZCAoYWIpLAp3aGlsZSBBcHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBl bmRTdGF0ZSBib3RoIGVtYmVkIEFwcGVuZEJhc2VTdGF0ZSBhcwp0aGVpciBmaXJzdCBmaWVsZCAo YXMpLiAgVGhpcyBmb2xsb3dzIHRoZSBzYW1lIEMgc3RydWN0IGluaGVyaXRhbmNlCnBhdHRlcm4g dXNlZCBieSBTY2FuL1NjYW5TdGF0ZSBhbmQgSm9pbi9Kb2luU3RhdGUgdGhyb3VnaG91dCB0aGUK Y29kZWJhc2UuICBUaGUgbmFtZSAiQXBwZW5kQmFzZSIgd2FzIGNob3NlbiBiZWNhdXNlIGp1c3Qg IkFwcGVuZCIgaXMgYWxyZWFkeQp0YWtlbi4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vNTliZTE5NGM1YTQwOWZiOWZjOWYyMDMxNTgxYjhhNDQlNDBwb3N0Z3Jlc3Byby5ydQpBdXRo b3I6IE1hdGhldXMgQWxjYW50YXJhIDxtYXRoZXVzc3NpbHY5N0BnbWFpbC5jb20+CkNvLWF1dGhv cmVkLWJ5OiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFla29yb3Rrb3ZAZ21haWwuY29tPgpSZXZpZXdl ZC1ieTogQWxleGFuZGVyIFB5aGFsb3YgPGEucHloYWxvdkBwb3N0Z3Jlc3Byby5ydT4KUmV2aWV3 ZWQtYnk6IEFsZW5hIFJ5YmFraW5hIDxhLnJ5YmFraW5hQHBvc3RncmVzcHJvLnJ1PgotLS0KIGNv bnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyB8ICAgOCArLQogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyAgICAgIHwgICA0ICstCiBjb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfd2Fsa2VyLmMgICAgfCAgIDggKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bv c3RncmVzX2Zkdy5jICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j ICAgICAgICAgIHwgIDI2ICstLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jICAgICAg ICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQ3VycmVudC5jICAgICAgfCAg IDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICB8ICAgOCArLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAgICAgIHwgMjg0ICsrKysrKysrKysr Ky0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgIHwg IDgyICsrKy0tLS0KIHNyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jICAgICAgICAgICB8ICAg OCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgIDQ2ICsrLS0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAgICB8ICA0OCArKy0tCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICAgICB8ICAgOCArLQogc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmggICAgICAgICAgIHwgIDY1ICsrKystLQogc3JjL2luY2x1ZGUvbm9kZXMvcGxh bm5vZGVzLmggICAgICAgICAgIHwgIDY2ICsrKy0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgICAgICAgIHwgICAyICsKIDE4IGZpbGVzIGNoYW5nZWQsIDM1MSBpbnNlcnRpb25z KCspLCAzMzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFp bi9wZ19vdmVyZXhwbGFpbi5jIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFp bi5jCmluZGV4IDcxNWVkYThkYzU2Li4xOTZmNDI4NmE4YSAxMDA2NDQKLS0tIGEvY29udHJpYi9w Z19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxh aW4vcGdfb3ZlcmV4cGxhaW4uYwpAQCAtMjM0LDE4ICsyMzQsMTggQEAgb3ZlcmV4cGxhaW5fcGVy X25vZGVfaG9vayhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCWJy ZWFrOwogCQkJY2FzZSBUX0FwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFwcGVu ZCBSVElzIiwKLQkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcywKKwkJCQkJ CQkJCSAgKChBcHBlbmQgKikgcGxhbiktPmFiLmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOwog CQkJCW92ZXJleHBsYWluX2JpdG1hcHNldF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCi0JCQkJ CQkJCQkJICAgKChBcHBlbmQgKikgcGxhbiktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJ CQkJCQkJCSAgICgoQXBwZW5kICopIHBsYW4pLT5hYi5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywK IAkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJ CQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIsCi0JCQkJCQkJCQkgICgoTWVy Z2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcywKKwkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAq KSBwbGFuKS0+YWIuYXBwcmVsaWRzLAogCQkJCQkJCQkJICBlcyk7CiAJCQkJb3ZlcmV4cGxhaW5f Yml0bWFwc2V0X2xpc3QoIkNoaWxkIEFwcGVuZCBSVElzIiwKLQkJCQkJCQkJCQkgICAoKE1lcmdl QXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICAo KE1lcmdlQXBwZW5kICopIHBsYW4pLT5hYi5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKIAkJCQkJ CQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRfUmVzdWx0OgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9zY2FuLmMKaW5kZXggMDQ2N2Y5YjEyYmEuLjc2OGFiMzVlNmIzIDEwMDY0NAotLS0g YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCisrKyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9zY2FuLmMKQEAgLTE0OSw3ICsxNDksNyBAQCBwZ3BhX2J1aWxkX3NjYW4o cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCiAKIAkJCQkvKiBC ZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8KIAkJCQljaGlsZF9hcHBl bmRfcmVsaWRfc2V0cyA9Ci0JCQkJCSgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKKwkJCQkJKChBcHBlbmQgKikgcGxhbiktPmFiLmNoaWxkX2FwcGVuZF9yZWxpZF9z ZXRzOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUX01lcmdlQXBwZW5kOgogCQkJCS8qIFNhbWUgbG9n aWMgaGVyZSBhcyBmb3IgQXBwZW5kLCBhYm92ZS4gKi8KQEAgLTE2MSw3ICsxNjEsNyBAQCBwZ3Bh X2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4s CiAKIAkJCQkvKiBCZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8KIAkJ CQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9Ci0JCQkJCSgoTWVyZ2VBcHBlbmQgKikgcGxhbikt PmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5h Yi5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJ c3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5BUlk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fs a2VyLmMKaW5kZXggZTMyNjg0ZDIwNzUuLmYyYTM0YTFjZjc2IDEwMDY0NAotLS0gYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3dhbGtlci5jCkBAIC00NDAsMTQgKzQ0MCwxNCBAQCBwZ3BhX3dhbGtfcmVjdXJzaXZl bHkocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCiAJCQl7CiAJ CQkJQXBwZW5kCSAgICphcGxhbiA9IChBcHBlbmQgKikgcGxhbjsKIAotCQkJCWV4dHJhcGxhbnMg PSBhcGxhbi0+YXBwZW5kcGxhbnM7CisJCQkJZXh0cmFwbGFucyA9IGFwbGFuLT5hYi5zdWJwbGFu czsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQl7CiAJCQkJTWVy Z2VBcHBlbmQgKm1hcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBwbGFuOwogCi0JCQkJZXh0cmFwbGFu cyA9IG1hcGxhbi0+bWVyZ2VwbGFuczsKKwkJCQlleHRyYXBsYW5zID0gbWFwbGFuLT5hYi5zdWJw bGFuczsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFwQW5kOgpAQCAtNTcwLDkgKzU3 MCw5IEBAIHBncGFfcmVsaWRzKFBsYW4gKnBsYW4pCiAJZWxzZSBpZiAoSXNBKHBsYW4sIEZvcmVp Z25TY2FuKSkKIAkJcmV0dXJuICgoRm9yZWlnblNjYW4gKikgcGxhbiktPmZzX3JlbGlkczsKIAll bHNlIGlmIChJc0EocGxhbiwgQXBwZW5kKSkKLQkJcmV0dXJuICgoQXBwZW5kICopIHBsYW4pLT5h cHByZWxpZHM7CisJCXJldHVybiAoKEFwcGVuZCAqKSBwbGFuKS0+YWIuYXBwcmVsaWRzOwogCWVs c2UgaWYgKElzQShwbGFuLCBNZXJnZUFwcGVuZCkpCi0JCXJldHVybiAoKE1lcmdlQXBwZW5kICop IHBsYW4pLT5hcHByZWxpZHM7CisJCXJldHVybiAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hYi5h cHByZWxpZHM7CiAKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdy ZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmMKaW5kZXggY2M4ZWMyNGMzMGUuLmFhNWM3MGU1Mzk0IDEwMDY0NAotLS0gYS9jb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0 Z3Jlc19mZHcuYwpAQCAtMjQxMyw4ICsyNDEzLDggQEAgZmluZF9tb2RpZnl0YWJsZV9zdWJwbGFu KFBsYW5uZXJJbmZvICpyb290LAogCXsKIAkJQXBwZW5kCSAgICphcHBlbmRwbGFuID0gKEFwcGVu ZCAqKSBzdWJwbGFuOwogCi0JCWlmIChzdWJwbGFuX2luZGV4IDwgbGlzdF9sZW5ndGgoYXBwZW5k cGxhbi0+YXBwZW5kcGxhbnMpKQotCQkJc3VicGxhbiA9IChQbGFuICopIGxpc3RfbnRoKGFwcGVu ZHBsYW4tPmFwcGVuZHBsYW5zLCBzdWJwbGFuX2luZGV4KTsKKwkJaWYgKHN1YnBsYW5faW5kZXgg PCBsaXN0X2xlbmd0aChhcHBlbmRwbGFuLT5hYi5zdWJwbGFucykpCisJCQlzdWJwbGFuID0gKFBs YW4gKikgbGlzdF9udGgoYXBwZW5kcGxhbi0+YWIuc3VicGxhbnMsIHN1YnBsYW5faW5kZXgpOwog CX0KIAllbHNlIGlmIChJc0Eoc3VicGxhbiwgUmVzdWx0KSAmJgogCQkJIG91dGVyUGxhbihzdWJw bGFuKSAhPSBOVUxMICYmCkBAIC0yNDIyLDggKzI0MjIsOCBAQCBmaW5kX21vZGlmeXRhYmxlX3N1 YnBsYW4oUGxhbm5lckluZm8gKnJvb3QsCiAJewogCQlBcHBlbmQJICAgKmFwcGVuZHBsYW4gPSAo QXBwZW5kICopIG91dGVyUGxhbihzdWJwbGFuKTsKIAotCQlpZiAoc3VicGxhbl9pbmRleCA8IGxp c3RfbGVuZ3RoKGFwcGVuZHBsYW4tPmFwcGVuZHBsYW5zKSkKLQkJCXN1YnBsYW4gPSAoUGxhbiAq KSBsaXN0X250aChhcHBlbmRwbGFuLT5hcHBlbmRwbGFucywgc3VicGxhbl9pbmRleCk7CisJCWlm IChzdWJwbGFuX2luZGV4IDwgbGlzdF9sZW5ndGgoYXBwZW5kcGxhbi0+YWIuc3VicGxhbnMpKQor CQkJc3VicGxhbiA9IChQbGFuICopIGxpc3RfbnRoKGFwcGVuZHBsYW4tPmFiLnN1YnBsYW5zLCBz dWJwbGFuX2luZGV4KTsKIAl9CiAKIAkvKiBOb3csIGhhdmUgd2UgZ290IGEgRm9yZWlnblNjYW4g b24gdGhlIGRlc2lyZWQgcmVsPyAqLwpAQCAtNzIxNSw3ICs3MjE1LDcgQEAgcG9zdGdyZXNGb3Jl aWduQXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAlQZ0Zkd1NjYW5TdGF0 ZSAqZnNzdGF0ZSA9IChQZ0Zkd1NjYW5TdGF0ZSAqKSBub2RlLT5mZHdfc3RhdGU7CiAJQXN5bmNS ZXF1ZXN0ICpwZW5kaW5nQXJlcSA9IGZzc3RhdGUtPmNvbm5fc3RhdGUtPnBlbmRpbmdBcmVxOwog CUFwcGVuZFN0YXRlICpyZXF1ZXN0b3IgPSAoQXBwZW5kU3RhdGUgKikgYXJlcS0+cmVxdWVzdG9y OwotCVdhaXRFdmVudFNldCAqc2V0ID0gcmVxdWVzdG9yLT5hc19ldmVudHNldDsKKwlXYWl0RXZl bnRTZXQgKnNldCA9IHJlcXVlc3Rvci0+YXMuZXZlbnRzZXQ7CiAKIAkvKiBUaGlzIHNob3VsZCBu b3QgYmUgY2FsbGVkIHVubGVzcyBjYWxsYmFja19wZW5kaW5nICovCiAJQXNzZXJ0KGFyZXEtPmNh bGxiYWNrX3BlbmRpbmcpOwpAQCAtNzI1Nyw3ICs3MjU3LDcgQEAgcG9zdGdyZXNGb3JlaWduQXN5 bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkJICogYmVsb3csIGJlY2F1c2Ug d2UgbWlnaHQgb3RoZXJ3aXNlIGVuZCB1cCB3aXRoIG5vIGNvbmZpZ3VyZWQgZXZlbnRzCiAJCSAq IG90aGVyIHRoYW4gdGhlIHBvc3RtYXN0ZXIgZGVhdGggZXZlbnQuCiAJCSAqLwotCQlpZiAoIWJt c19pc19lbXB0eShyZXF1ZXN0b3ItPmFzX25lZWRyZXF1ZXN0KSkKKwkJaWYgKCFibXNfaXNfZW1w dHkocmVxdWVzdG9yLT5hcy5uZWVkcmVxdWVzdCkpCiAJCQlyZXR1cm47CiAJCWlmIChHZXROdW1S ZWdpc3RlcmVkV2FpdEV2ZW50cyhzZXQpID4gMSkKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxh aW4uYwppbmRleCA3M2VhYWYxNzZhYy4uNmIyNzBmMzU4ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMKQEAgLTEyMjYsMTEgKzEyMjYsMTEgQEAgRXhwbGFpblByZVNjYW5Ob2RlKFBsYW5TdGF0ZSAq cGxhbnN0YXRlLCBCaXRtYXBzZXQgKipyZWxzX3VzZWQpCiAJCQlicmVhazsKIAkJY2FzZSBUX0Fw cGVuZDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRkX21lbWJlcnMoKnJlbHNfdXNlZCwKLQkJCQkJ CQkJCQkgKChBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJICgoQXBwZW5k ICopIHBsYW4pLT5hYi5hcHByZWxpZHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9NZXJnZUFwcGVu ZDoKIAkJCSpyZWxzX3VzZWQgPSBibXNfYWRkX21lbWJlcnMoKnJlbHNfdXNlZCwKLQkJCQkJCQkJ CQkgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzKTsKKwkJCQkJCQkJCQkgKChNZXJn ZUFwcGVuZCAqKSBwbGFuKS0+YWIuYXBwcmVsaWRzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfUmVz dWx0OgogCQkJKnJlbHNfdXNlZCA9IGJtc19hZGRfbWVtYmVycygqcmVsc191c2VkLApAQCAtMTI3 NCw3ICsxMjc0LDcgQEAgcGxhbl9pc19kaXNhYmxlZChQbGFuICpwbGFuKQogCQkgKiBpbmNsdWRl cyBhbnkgcnVuLXRpbWUgcHJ1bmVkIGNoaWxkcmVuLiAgSWdub3JpbmcgdGhvc2UgY291bGQgZ2l2 ZQogCQkgKiB1cyB0aGUgaW5jb3JyZWN0IG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcy4KIAkJICov Ci0JCWZvcmVhY2gobGMsIGFwbGFuLT5hcHBlbmRwbGFucykKKwkJZm9yZWFjaChsYywgYXBsYW4t PmFiLnN1YnBsYW5zKQogCQl7CiAJCQlQbGFuCSAgICpzdWJwbGFuID0gbGZpcnN0KGxjKTsKIApA QCAtMTI5MSw3ICsxMjkxLDcgQEAgcGxhbl9pc19kaXNhYmxlZChQbGFuICpwbGFuKQogCQkgKiBp bmNsdWRlcyBhbnkgcnVuLXRpbWUgcHJ1bmVkIGNoaWxkcmVuLiAgSWdub3JpbmcgdGhvc2UgY291 bGQgZ2l2ZQogCQkgKiB1cyB0aGUgaW5jb3JyZWN0IG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcy4K IAkJICovCi0JCWZvcmVhY2gobGMsIG1hcGxhbi0+bWVyZ2VwbGFucykKKwkJZm9yZWFjaChsYywg bWFwbGFuLT5hYi5zdWJwbGFucykKIAkJewogCQkJUGxhbgkgICAqc3VicGxhbiA9IGxmaXJzdChs Yyk7CiAKQEAgLTIzMzksMTMgKzIzMzksMTMgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFu c3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCiAJewogCQlj YXNlIFRfQXBwZW5kOgotCQkJRXhwbGFpbk1pc3NpbmdNZW1iZXJzKCgoQXBwZW5kU3RhdGUgKikg cGxhbnN0YXRlKS0+YXNfbnBsYW5zLAotCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKCgoQXBwZW5kICop IHBsYW4pLT5hcHBlbmRwbGFucyksCisJCQlFeHBsYWluTWlzc2luZ01lbWJlcnMoKChBcHBlbmRT dGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMsCisJCQkJCQkJCSAgbGlzdF9sZW5ndGgoKChB cHBlbmQgKikgcGxhbiktPmFiLnN1YnBsYW5zKSwKIAkJCQkJCQkJICBlcyk7CiAJCQlicmVhazsK IAkJY2FzZSBUX01lcmdlQXBwZW5kOgotCQkJRXhwbGFpbk1pc3NpbmdNZW1iZXJzKCgoTWVyZ2VB cHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19ucGxhbnMsCi0JCQkJCQkJCSAgbGlzdF9sZW5n dGgoKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+bWVyZ2VwbGFucyksCisJCQlFeHBsYWluTWlzc2lu Z01lbWJlcnMoKChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzLm5wbGFucywKKwkJ CQkJCQkJICBsaXN0X2xlbmd0aCgoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5hYi5zdWJwbGFucyks CiAJCQkJCQkJCSAgZXMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0yMzg5LDEzICsyMzg5 LDEzIEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMs CiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsKIAkJY2FzZSBUX0FwcGVuZDoKLQkJCUV4cGxh aW5NZW1iZXJOb2RlcygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFwcGVuZHBsYW5zLAot CQkJCQkJCSAgICgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXNfbnBsYW5zLAorCQkJRXhw bGFpbk1lbWJlck5vZGVzKCgoQXBwZW5kU3RhdGUgKikgcGxhbnN0YXRlKS0+YXMucGxhbnMsCisJ CQkJCQkJICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJ ICAgYW5jZXN0b3JzLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX01lcmdlQXBwZW5kOgotCQkJ RXhwbGFpbk1lbWJlck5vZGVzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tZXJn ZXBsYW5zLAotCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5tc19u cGxhbnMsCisJCQlFeHBsYWluTWVtYmVyTm9kZXMoKChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5z dGF0ZSktPmFzLnBsYW5zLAorCQkJCQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3Rh dGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJICAgYW5jZXN0b3JzLCBlcyk7CiAJCQlicmVhazsKIAkJ Y2FzZSBUX0JpdG1hcEFuZDoKQEAgLTI2MDksNyArMjYwOSw3IEBAIHN0YXRpYyB2b2lkCiBzaG93 X21lcmdlX2FwcGVuZF9rZXlzKE1lcmdlQXBwZW5kU3RhdGUgKm1zdGF0ZSwgTGlzdCAqYW5jZXN0 b3JzLAogCQkJCQkgICBFeHBsYWluU3RhdGUgKmVzKQogewotCU1lcmdlQXBwZW5kICpwbGFuID0g KE1lcmdlQXBwZW5kICopIG1zdGF0ZS0+cHMucGxhbjsKKwlNZXJnZUFwcGVuZCAqcGxhbiA9IChN ZXJnZUFwcGVuZCAqKSBtc3RhdGUtPmFzLnBzLnBsYW47CiAKIAlzaG93X3NvcnRfZ3JvdXBfa2V5 cygoUGxhblN0YXRlICopIG1zdGF0ZSwgIlNvcnQgS2V5IiwKIAkJCQkJCSBwbGFuLT5udW1Db2xz LCAwLCBwbGFuLT5zb3J0Q29sSWR4LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDM3ZmUwM2Zk YzM3Li4yZDhlNjIxMjA4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Ft aS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwpAQCAtNTM4LDcgKzUzOCw3 IEBAIEV4ZWNTdXBwb3J0c0JhY2t3YXJkU2NhbihQbGFuICpub2RlKQogCQkJCWlmICgoKEFwcGVu ZCAqKSBub2RlKS0+bmFzeW5jcGxhbnMgPiAwKQogCQkJCQlyZXR1cm4gZmFsc2U7CiAKLQkJCQlm b3JlYWNoKGwsICgoQXBwZW5kICopIG5vZGUpLT5hcHBlbmRwbGFucykKKwkJCQlmb3JlYWNoKGws ICgoQXBwZW5kICopIG5vZGUpLT5hYi5zdWJwbGFucykKIAkJCQl7CiAJCQkJCWlmICghRXhlY1N1 cHBvcnRzQmFja3dhcmRTY2FuKChQbGFuICopIGxmaXJzdChsKSkpCiAJCQkJCQlyZXR1cm4gZmFs c2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQ3VycmVudC5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYwppbmRleCA5OWYyYjJkMGM2Zi4uMzdmNWM3 ZmQyYzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNDdXJyZW50LmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0N1cnJlbnQuYwpAQCAtMzc1LDkgKzM3NSw5IEBA IHNlYXJjaF9wbGFuX3RyZWUoUGxhblN0YXRlICpub2RlLCBPaWQgdGFibGVfb2lkLAogCQkJCUFw cGVuZFN0YXRlICphc3RhdGUgPSAoQXBwZW5kU3RhdGUgKikgbm9kZTsKIAkJCQlpbnQJCQlpOwog Ci0JCQkJZm9yIChpID0gMDsgaSA8IGFzdGF0ZS0+YXNfbnBsYW5zOyBpKyspCisJCQkJZm9yIChp ID0gMDsgaSA8IGFzdGF0ZS0+YXMubnBsYW5zOyBpKyspCiAJCQkJewotCQkJCQlTY2FuU3RhdGUg ICplbGVtID0gc2VhcmNoX3BsYW5fdHJlZShhc3RhdGUtPmFwcGVuZHBsYW5zW2ldLAorCQkJCQlT Y2FuU3RhdGUgICplbGVtID0gc2VhcmNoX3BsYW5fdHJlZShhc3RhdGUtPmFzLnBsYW5zW2ldLAog CQkJCQkJCQkJCQkJCQl0YWJsZV9vaWQsCiAJCQkJCQkJCQkJCQkJCXBlbmRpbmdfcmVzY2FuKTsK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYwppbmRleCAxMzJmZTM3ZWY2MC4uMDQ0ZTg3 MTYyMmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jCkBAIC05MTEsOCArOTExLDgg QEAgRXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGls ZF9ub2RlKQogCQlBcHBlbmRTdGF0ZSAqYVN0YXRlID0gKEFwcGVuZFN0YXRlICopIGNoaWxkX25v ZGU7CiAJCWludAkJCWk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGFTdGF0ZS0+YXNfbnBsYW5zOyBp KyspCi0JCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBhU3RhdGUtPmFwcGVuZHBs YW5zW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGFTdGF0ZS0+YXMubnBsYW5zOyBpKyspCisJCQlF eGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBhU3RhdGUtPmFzLnBsYW5zW2ldKTsKIAl9 CiAJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIE1lcmdlQXBwZW5kU3RhdGUpKQogCXsKQEAgLTky NCw4ICs5MjQsOCBAQCBFeGVjU2V0VHVwbGVCb3VuZChpbnQ2NCB0dXBsZXNfbmVlZGVkLCBQbGFu U3RhdGUgKmNoaWxkX25vZGUpCiAJCU1lcmdlQXBwZW5kU3RhdGUgKm1hU3RhdGUgPSAoTWVyZ2VB cHBlbmRTdGF0ZSAqKSBjaGlsZF9ub2RlOwogCQlpbnQJCQlpOwogCi0JCWZvciAoaSA9IDA7IGkg PCBtYVN0YXRlLT5tc19ucGxhbnM7IGkrKykKLQkJCUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19u ZWVkZWQsIG1hU3RhdGUtPm1lcmdlcGxhbnNbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgbWFTdGF0 ZS0+YXMubnBsYW5zOyBpKyspCisJCQlFeGVjU2V0VHVwbGVCb3VuZCh0dXBsZXNfbmVlZGVkLCBt YVN0YXRlLT5hcy5wbGFuc1tpXSk7CiAJfQogCWVsc2UgaWYgKElzQShjaGlsZF9ub2RlLCBSZXN1 bHRTdGF0ZSkpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IDg1Yzg1NTY5YjVl Li4yNzJiZjUyZmMyZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwpAQCAtMTI3LDkgKzEy Nyw5IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJLyoKIAkgKiBjcmVhdGUgbmV3IEFwcGVuZFN0YXRlIGZvciBvdXIgYXBwZW5kIG5v ZGUKIAkgKi8KLQlhcHBlbmRzdGF0ZS0+cHMucGxhbiA9IChQbGFuICopIG5vZGU7Ci0JYXBwZW5k c3RhdGUtPnBzLnN0YXRlID0gZXN0YXRlOwotCWFwcGVuZHN0YXRlLT5wcy5FeGVjUHJvY05vZGUg PSBFeGVjQXBwZW5kOworCWFwcGVuZHN0YXRlLT5hcy5wcy5wbGFuID0gKFBsYW4gKikgbm9kZTsK KwlhcHBlbmRzdGF0ZS0+YXMucHMuc3RhdGUgPSBlc3RhdGU7CisJYXBwZW5kc3RhdGUtPmFzLnBz LkV4ZWNQcm9jTm9kZSA9IEV4ZWNBcHBlbmQ7CiAKIAkvKiBMZXQgY2hvb3NlX25leHRfc3VicGxh bl8qIGZ1bmN0aW9uIGhhbmRsZSBzZXR0aW5nIHRoZSBmaXJzdCBzdWJwbGFuICovCiAJYXBwZW5k c3RhdGUtPmFzX3doaWNocGxhbiA9IElOVkFMSURfU1VCUExBTl9JTkRFWDsKQEAgLTEzNyw3ICsx MzcsNyBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQg ZWZsYWdzKQogCWFwcGVuZHN0YXRlLT5hc19iZWd1biA9IGZhbHNlOwogCiAJLyogSWYgcnVuLXRp bWUgcGFydGl0aW9uIHBydW5pbmcgaXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhhdCB1cCBub3cgKi8K LQlpZiAobm9kZS0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQorCWlmIChub2RlLT5hYi5wYXJ0X3By dW5lX2luZGV4ID49IDApCiAJewogCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwog CkBAIC0xNDYsMTIgKzE0NiwxMiBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkgKiBzdWJwbGFucyB0byBpbml0aWFsaXplICh2YWxp ZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQogCQkgKiByZXN1bHQgb2YgcGVy Zm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgogCQkgKi8KLQkJcHJ1bmVzdGF0ZSA9IEV4 ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJmFwcGVuZHN0YXRlLT5wcywKLQkJCQkJCQkJCQkJ CSAgbGlzdF9sZW5ndGgobm9kZS0+YXBwZW5kcGxhbnMpLAotCQkJCQkJCQkJCQkJICBub2RlLT5w YXJ0X3BydW5lX2luZGV4LAotCQkJCQkJCQkJCQkJICBub2RlLT5hcHByZWxpZHMsCisJCXBydW5l c3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlvbkV4ZWNQcnVuaW5nKCZhcHBlbmRzdGF0ZS0+YXMucHMs CisJCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5vZGUtPmFiLnN1YnBsYW5zKSwKKwkJCQkJCQkJ CQkJCSAgbm9kZS0+YWIucGFydF9wcnVuZV9pbmRleCwKKwkJCQkJCQkJCQkJCSAgbm9kZS0+YWIu YXBwcmVsaWRzLAogCQkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7Ci0JCWFwcGVuZHN0YXRl LT5hc19wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7CisJCWFwcGVuZHN0YXRlLT5hcy5wcnVuZV9z dGF0ZSA9IHBydW5lc3RhdGU7CiAJCW5wbGFucyA9IGJtc19udW1fbWVtYmVycyh2YWxpZHN1YnBs YW5zKTsKIAogCQkvKgpAQCAtMTYxLDIzICsxNjEsMjMgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5k ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICovCiAJCWlmICghcHJ1bmVz dGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQogCQl7Ci0JCQlhcHBlbmRzdGF0ZS0+ YXNfdmFsaWRfc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwot CQkJYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQkJ YXBwZW5kc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBu cGxhbnMgLSAxKTsKKwkJCWFwcGVuZHN0YXRlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVk ID0gdHJ1ZTsKIAkJfQogCX0KIAllbHNlCiAJewotCQlucGxhbnMgPSBsaXN0X2xlbmd0aChub2Rl LT5hcHBlbmRwbGFucyk7CisJCW5wbGFucyA9IGxpc3RfbGVuZ3RoKG5vZGUtPmFiLnN1YnBsYW5z KTsKIAogCQkvKgogCQkgKiBXaGVuIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdCBl bmFibGVkIHdlIGNhbiBqdXN0IG1hcmsgYWxsCiAJCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5 IG11c3QgYWxzbyBhbGwgYmUgaW5pdGlhbGl6ZWQuCiAJCSAqLwogCQlBc3NlcnQobnBsYW5zID4g MCk7Ci0JCWFwcGVuZHN0YXRlLT5hc192YWxpZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQor CQlhcHBlbmRzdGF0ZS0+YXMudmFsaWRfc3VicGxhbnMgPSB2YWxpZHN1YnBsYW5zID0KIAkJCWJt c19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7Ci0JCWFwcGVuZHN0YXRlLT5hc192YWxp ZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKLQkJYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0 YXRlID0gTlVMTDsKKwkJYXBwZW5kc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQg PSB0cnVlOworCQlhcHBlbmRzdGF0ZS0+YXMucHJ1bmVfc3RhdGUgPSBOVUxMOwogCX0KIAogCWFw cGVuZHBsYW5zdGF0ZXMgPSAoUGxhblN0YXRlICoqKSBwYWxsb2MobnBsYW5zICoKQEAgLTE5Niw3 ICsxOTYsNyBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCWkgPSAtMTsKIAl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIodmFsaWRz dWJwbGFucywgaSkpID49IDApCiAJewotCQlQbGFuCSAgICppbml0Tm9kZSA9IChQbGFuICopIGxp c3RfbnRoKG5vZGUtPmFwcGVuZHBsYW5zLCBpKTsKKwkJUGxhbgkgICAqaW5pdE5vZGUgPSAoUGxh biAqKSBsaXN0X250aChub2RlLT5hYi5zdWJwbGFucywgaSk7CiAKIAkJLyoKIAkJICogUmVjb3Jk IGFzeW5jIHN1YnBsYW5zLiAgV2hlbiBleGVjdXRpbmcgRXZhbFBsYW5RdWFsLCB3ZSB0cmVhdCB0 aGVtCkBAIC0yMTksOCArMjE5LDggQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3Rh dGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAl9CiAKIAlhcHBlbmRzdGF0ZS0+YXNfZmlyc3RfcGFy dGlhbF9wbGFuID0gZmlyc3R2YWxpZDsKLQlhcHBlbmRzdGF0ZS0+YXBwZW5kcGxhbnMgPSBhcHBl bmRwbGFuc3RhdGVzOwotCWFwcGVuZHN0YXRlLT5hc19ucGxhbnMgPSBucGxhbnM7CisJYXBwZW5k c3RhdGUtPmFzLnBsYW5zID0gYXBwZW5kcGxhbnN0YXRlczsKKwlhcHBlbmRzdGF0ZS0+YXMubnBs YW5zID0gbnBsYW5zOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIEFwcGVuZCdzIHJlc3VsdCB0dXBs ZSB0eXBlIGFuZCBzbG90LiAgSWYgdGhlIGNoaWxkIHBsYW5zIGFsbApAQCAtMjM0LDMwICsyMzQs MzAgQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVm bGFncykKIAlhcHBlbmRvcHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhhcHBlbmRwbGFuc3RhdGVz LCBqKTsKIAlpZiAoYXBwZW5kb3BzICE9IE5VTEwpCiAJewotCQlFeGVjSW5pdFJlc3VsdFR1cGxl U2xvdFRMKCZhcHBlbmRzdGF0ZS0+cHMsIGFwcGVuZG9wcyk7CisJCUV4ZWNJbml0UmVzdWx0VHVw bGVTbG90VEwoJmFwcGVuZHN0YXRlLT5hcy5wcywgYXBwZW5kb3BzKTsKIAl9CiAJZWxzZQogCXsK LQkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmYXBwZW5kc3RhdGUtPnBzLCAmVFRTT3BzVmly dHVhbCk7CisJCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJmFwcGVuZHN0YXRlLT5hcy5wcywg JlRUU09wc1ZpcnR1YWwpOwogCQkvKiBzaG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMg bm90IGZpeGVkICovCi0JCWFwcGVuZHN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOwotCQlh cHBlbmRzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKKwkJYXBwZW5kc3RhdGUtPmFz LnBzLnJlc3VsdG9wc3NldCA9IHRydWU7CisJCWFwcGVuZHN0YXRlLT5hcy5wcy5yZXN1bHRvcHNm aXhlZCA9IGZhbHNlOwogCX0KIAogCS8qIEluaXRpYWxpemUgYXN5bmMgc3RhdGUgKi8KLQlhcHBl bmRzdGF0ZS0+YXNfYXN5bmNwbGFucyA9IGFzeW5jcGxhbnM7Ci0JYXBwZW5kc3RhdGUtPmFzX25h c3luY3BsYW5zID0gbmFzeW5jcGxhbnM7Ci0JYXBwZW5kc3RhdGUtPmFzX2FzeW5jcmVxdWVzdHMg PSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hc19hc3luY3Jlc3VsdHMgPSBOVUxMOworCWFwcGVuZHN0 YXRlLT5hcy5hc3luY3BsYW5zID0gYXN5bmNwbGFuczsKKwlhcHBlbmRzdGF0ZS0+YXMubmFzeW5j cGxhbnMgPSBuYXN5bmNwbGFuczsKKwlhcHBlbmRzdGF0ZS0+YXMuYXN5bmNyZXF1ZXN0cyA9IE5V TEw7CisJYXBwZW5kc3RhdGUtPmFzLmFzeW5jcmVzdWx0cyA9IE5VTEw7CiAJYXBwZW5kc3RhdGUt PmFzX25hc3luY3Jlc3VsdHMgPSAwOwogCWFwcGVuZHN0YXRlLT5hc19uYXN5bmNyZW1haW4gPSAw OwotCWFwcGVuZHN0YXRlLT5hc19uZWVkcmVxdWVzdCA9IE5VTEw7Ci0JYXBwZW5kc3RhdGUtPmFz X2V2ZW50c2V0ID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXNfdmFsaWRfYXN5bmNwbGFucyA9IE5V TEw7CisJYXBwZW5kc3RhdGUtPmFzLm5lZWRyZXF1ZXN0ID0gTlVMTDsKKwlhcHBlbmRzdGF0ZS0+ YXMuZXZlbnRzZXQgPSBOVUxMOworCWFwcGVuZHN0YXRlLT5hcy52YWxpZF9hc3luY3BsYW5zID0g TlVMTDsKIAogCWlmIChuYXN5bmNwbGFucyA+IDApCiAJewotCQlhcHBlbmRzdGF0ZS0+YXNfYXN5 bmNyZXF1ZXN0cyA9IChBc3luY1JlcXVlc3QgKiopCisJCWFwcGVuZHN0YXRlLT5hcy5hc3luY3Jl cXVlc3RzID0gKEFzeW5jUmVxdWVzdCAqKikKIAkJCXBhbGxvYzAobnBsYW5zICogc2l6ZW9mKEFz eW5jUmVxdWVzdCAqKSk7CiAKIAkJaSA9IC0xOwpAQCAtMjczLDEzICsyNzMsMTMgQEAgRXhlY0lu aXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCWFy ZXEtPnJlcXVlc3RfY29tcGxldGUgPSBmYWxzZTsKIAkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CiAK LQkJCWFwcGVuZHN0YXRlLT5hc19hc3luY3JlcXVlc3RzW2ldID0gYXJlcTsKKwkJCWFwcGVuZHN0 YXRlLT5hcy5hc3luY3JlcXVlc3RzW2ldID0gYXJlcTsKIAkJfQogCi0JCWFwcGVuZHN0YXRlLT5h c19hc3luY3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCisJCWFwcGVuZHN0YXRlLT5hcy5h c3luY3Jlc3VsdHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopCiAJCQlwYWxsb2MwKG5hc3luY3BsYW5z ICogc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopKTsKIAotCQlpZiAoYXBwZW5kc3RhdGUtPmFzX3Zh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWlmIChhcHBlbmRzdGF0ZS0+YXMudmFsaWRfc3Vi cGxhbnNfaWRlbnRpZmllZCkKIAkJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKGFwcGVuZHN0 YXRlKTsKIAl9CiAKQEAgLTI4Nyw3ICsyODcsNyBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlh bGl6YXRpb24KIAkgKi8KIAotCWFwcGVuZHN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7CisJ YXBwZW5kc3RhdGUtPmFzLnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKIAogCS8qIEZvciBwYXJhbGxl bCBxdWVyeSwgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gbGF0ZXIuICovCiAJYXBwZW5kc3RhdGUt PmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2FsbHk7CkBAIC0z MTcsMTEgKzMxNywxMSBAQCBFeGVjQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQlBc3NlcnQo IW5vZGUtPmFzX3N5bmNkb25lKTsKIAogCQkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBu byBzdWJwbGFucyAqLwotCQlpZiAobm9kZS0+YXNfbnBsYW5zID09IDApCi0JCQlyZXR1cm4gRXhl Y0NsZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJaWYgKG5vZGUtPmFz Lm5wbGFucyA9PSAwKQorCQkJcmV0dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPmFzLnBzLnBzX1Jl c3VsdFR1cGxlU2xvdCk7CiAKIAkJLyogSWYgdGhlcmUgYXJlIGFueSBhc3luYyBzdWJwbGFucywg YmVnaW4gZXhlY3V0aW5nIHRoZW0uICovCi0JCWlmIChub2RlLT5hc19uYXN5bmNwbGFucyA+IDAp CisJCWlmIChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDApCiAJCQlFeGVjQXBwZW5kQXN5bmNCZWdp bihub2RlKTsKIAogCQkvKgpAQCAtMzI5LDExICszMjksMTEgQEAgRXhlY0FwcGVuZChQbGFuU3Rh dGUgKnBzdGF0ZSkKIAkJICogcHJvY2VlZGluZy4KIAkJICovCiAJCWlmICghbm9kZS0+Y2hvb3Nl X25leHRfc3VicGxhbihub2RlKSAmJiBub2RlLT5hc19uYXN5bmNyZW1haW4gPT0gMCkKLQkJCXJl dHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOworCQkJcmV0 dXJuIEV4ZWNDbGVhclR1cGxlKG5vZGUtPmFzLnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CiAKIAkJ QXNzZXJ0KG5vZGUtPmFzX3N5bmNkb25lIHx8CiAJCQkgICAobm9kZS0+YXNfd2hpY2hwbGFuID49 IDAgJiYKLQkJCQlub2RlLT5hc193aGljaHBsYW4gPCBub2RlLT5hc19ucGxhbnMpKTsKKwkJCQlu b2RlLT5hc193aGljaHBsYW4gPCBub2RlLT5hcy5ucGxhbnMpKTsKIAogCQkvKiBBbmQgd2UncmUg aW5pdGlhbGl6ZWQuICovCiAJCW5vZGUtPmFzX2JlZ3VuID0gdHJ1ZTsKQEAgLTM0OCwxOSArMzQ4 LDE5IEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCS8qCiAJCSAqIHRyeSB0byBn ZXQgYSB0dXBsZSBmcm9tIGFuIGFzeW5jIHN1YnBsYW4gaWYgYW55CiAJCSAqLwotCQlpZiAobm9k ZS0+YXNfc3luY2RvbmUgfHwgIWJtc19pc19lbXB0eShub2RlLT5hc19uZWVkcmVxdWVzdCkpCisJ CWlmIChub2RlLT5hc19zeW5jZG9uZSB8fCAhYm1zX2lzX2VtcHR5KG5vZGUtPmFzLm5lZWRyZXF1 ZXN0KSkKIAkJewogCQkJaWYgKEV4ZWNBcHBlbmRBc3luY0dldE5leHQobm9kZSwgJnJlc3VsdCkp CiAJCQkJcmV0dXJuIHJlc3VsdDsKIAkJCUFzc2VydCghbm9kZS0+YXNfc3luY2RvbmUpOwotCQkJ QXNzZXJ0KGJtc19pc19lbXB0eShub2RlLT5hc19uZWVkcmVxdWVzdCkpOworCQkJQXNzZXJ0KGJt c19pc19lbXB0eShub2RlLT5hcy5uZWVkcmVxdWVzdCkpOwogCQl9CiAKIAkJLyoKIAkJICogZmln dXJlIG91dCB3aGljaCBzeW5jIHN1YnBsYW4gd2UgYXJlIGN1cnJlbnRseSBwcm9jZXNzaW5nCiAJ CSAqLwotCQlBc3NlcnQobm9kZS0+YXNfd2hpY2hwbGFuID49IDAgJiYgbm9kZS0+YXNfd2hpY2hw bGFuIDwgbm9kZS0+YXNfbnBsYW5zKTsKLQkJc3Vibm9kZSA9IG5vZGUtPmFwcGVuZHBsYW5zW25v ZGUtPmFzX3doaWNocGxhbl07CisJCUFzc2VydChub2RlLT5hc193aGljaHBsYW4gPj0gMCAmJiBu b2RlLT5hc193aGljaHBsYW4gPCBub2RlLT5hcy5ucGxhbnMpOworCQlzdWJub2RlID0gbm9kZS0+ YXMucGxhbnNbbm9kZS0+YXNfd2hpY2hwbGFuXTsKIAogCQkvKgogCQkgKiBnZXQgYSB0dXBsZSBm cm9tIHRoZSBzdWJwbGFuCkBAIC0zODcsNyArMzg3LDcgQEAgRXhlY0FwcGVuZChQbGFuU3RhdGUg KnBzdGF0ZSkKIAogCQkvKiBjaG9vc2UgbmV3IHN5bmMgc3VicGxhbjsgaWYgbm8gc3luYy9hc3lu YyBzdWJwbGFucywgd2UncmUgZG9uZSAqLwogCQlpZiAoIW5vZGUtPmNob29zZV9uZXh0X3N1YnBs YW4obm9kZSkgJiYgbm9kZS0+YXNfbmFzeW5jcmVtYWluID09IDApCi0JCQlyZXR1cm4gRXhlY0Ns ZWFyVHVwbGUobm9kZS0+cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJCXJldHVybiBFeGVjQ2xl YXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCX0KIH0KIApAQCAtNDA5 LDggKzQwOSw4IEBAIEV4ZWNFbmRBcHBlbmQoQXBwZW5kU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBn ZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZQogCSAqLwotCWFwcGVuZHBsYW5zID0gbm9kZS0+ YXBwZW5kcGxhbnM7Ci0JbnBsYW5zID0gbm9kZS0+YXNfbnBsYW5zOworCWFwcGVuZHBsYW5zID0g bm9kZS0+YXMucGxhbnM7CisJbnBsYW5zID0gbm9kZS0+YXMubnBsYW5zOwogCiAJLyoKIAkgKiBz aHV0IGRvd24gZWFjaCBvZiB0aGUgc3Vic2NhbnMKQEAgLTQyMiw3ICs0MjIsNyBAQCBFeGVjRW5k QXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQogdm9pZAogRXhlY1JlU2NhbkFwcGVuZChBcHBlbmRT dGF0ZSAqbm9kZSkKIHsKLQlpbnQJCQluYXN5bmNwbGFucyA9IG5vZGUtPmFzX25hc3luY3BsYW5z OworCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+YXMubmFzeW5jcGxhbnM7CiAJaW50CQkJaTsK IAogCS8qCkBAIC00MzAsMjcgKzQzMCwyNyBAQCBFeGVjUmVTY2FuQXBwZW5kKEFwcGVuZFN0YXRl ICpub2RlKQogCSAqIHdlJ2QgYmV0dGVyIHVuc2V0IHRoZSB2YWxpZCBzdWJwbGFucyBzbyB0aGF0 IHRoZXkgYXJlIHJlc2VsZWN0ZWQgZm9yCiAJICogdGhlIG5ldyBwYXJhbWV0ZXIgdmFsdWVzLgog CSAqLwotCWlmIChub2RlLT5hc19wcnVuZV9zdGF0ZSAmJgotCQlibXNfb3ZlcmxhcChub2RlLT5w cy5jaGdQYXJhbSwKLQkJCQkJbm9kZS0+YXNfcHJ1bmVfc3RhdGUtPmV4ZWNwYXJhbWlkcykpCisJ aWYgKG5vZGUtPmFzLnBydW5lX3N0YXRlICYmCisJCWJtc19vdmVybGFwKG5vZGUtPmFzLnBzLmNo Z1BhcmFtLAorCQkJCQlub2RlLT5hcy5wcnVuZV9zdGF0ZS0+ZXhlY3BhcmFtaWRzKSkKIAl7Ci0J CW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSBmYWxzZTsKLQkJYm1zX2ZyZWUo bm9kZS0+YXNfdmFsaWRfc3VicGxhbnMpOwotCQlub2RlLT5hc192YWxpZF9zdWJwbGFucyA9IE5V TEw7Ci0JCWJtc19mcmVlKG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMpOwotCQlub2RlLT5hc192 YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRp ZmllZCA9IGZhbHNlOworCQlibXNfZnJlZShub2RlLT5hcy52YWxpZF9zdWJwbGFucyk7CisJCW5v ZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0gTlVMTDsKKwkJYm1zX2ZyZWUobm9kZS0+YXMudmFsaWRf YXN5bmNwbGFucyk7CisJCW5vZGUtPmFzLnZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwogCX0KIAot CWZvciAoaSA9IDA7IGkgPCBub2RlLT5hc19ucGxhbnM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwg bm9kZS0+YXMubnBsYW5zOyBpKyspCiAJewotCQlQbGFuU3RhdGUgICpzdWJub2RlID0gbm9kZS0+ YXBwZW5kcGxhbnNbaV07CisJCVBsYW5TdGF0ZSAgKnN1Ym5vZGUgPSBub2RlLT5hcy5wbGFuc1tp XTsKIAogCQkvKgogCQkgKiBFeGVjUmVTY2FuIGRvZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFu cywgc28gSSBoYXZlIHRvIGRvCiAJCSAqIGNoYW5nZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNl bGYuCiAJCSAqLwotCQlpZiAobm9kZS0+cHMuY2hnUGFyYW0gIT0gTlVMTCkKLQkJCVVwZGF0ZUNo YW5nZWRQYXJhbVNldChzdWJub2RlLCBub2RlLT5wcy5jaGdQYXJhbSk7CisJCWlmIChub2RlLT5h cy5wcy5jaGdQYXJhbSAhPSBOVUxMKQorCQkJVXBkYXRlQ2hhbmdlZFBhcmFtU2V0KHN1Ym5vZGUs IG5vZGUtPmFzLnBzLmNoZ1BhcmFtKTsKIAogCQkvKgogCQkgKiBJZiBjaGdQYXJhbSBvZiBzdWJu b2RlIGlzIG5vdCBudWxsIHRoZW4gcGxhbiB3aWxsIGJlIHJlLXNjYW5uZWQgYnkKQEAgLTQ2NCw5 ICs0NjQsOSBAQCBFeGVjUmVTY2FuQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQogCWlmIChuYXN5 bmNwbGFucyA+IDApCiAJewogCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJl cihub2RlLT5hc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJd2hpbGUgKChpID0gYm1zX25leHRf bWVtYmVyKG5vZGUtPmFzLmFzeW5jcGxhbnMsIGkpKSA+PSAwKQogCQl7Ci0JCQlBc3luY1JlcXVl c3QgKmFyZXEgPSBub2RlLT5hc19hc3luY3JlcXVlc3RzW2ldOworCQkJQXN5bmNSZXF1ZXN0ICph cmVxID0gbm9kZS0+YXMuYXN5bmNyZXF1ZXN0c1tpXTsKIAogCQkJYXJlcS0+Y2FsbGJhY2tfcGVu ZGluZyA9IGZhbHNlOwogCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZhbHNlOwpAQCAtNDc1 LDggKzQ3NSw4IEBAIEV4ZWNSZVNjYW5BcHBlbmQoQXBwZW5kU3RhdGUgKm5vZGUpCiAKIAkJbm9k ZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IDA7Ci0J CWJtc19mcmVlKG5vZGUtPmFzX25lZWRyZXF1ZXN0KTsKLQkJbm9kZS0+YXNfbmVlZHJlcXVlc3Qg PSBOVUxMOworCQlibXNfZnJlZShub2RlLT5hcy5uZWVkcmVxdWVzdCk7CisJCW5vZGUtPmFzLm5l ZWRyZXF1ZXN0ID0gTlVMTDsKIAl9CiAKIAkvKiBMZXQgY2hvb3NlX25leHRfc3VicGxhbl8qIGZ1 bmN0aW9uIGhhbmRsZSBzZXR0aW5nIHRoZSBmaXJzdCBzdWJwbGFuICovCkBAIC01MDMsNyArNTAz LDcgQEAgRXhlY0FwcGVuZEVzdGltYXRlKEFwcGVuZFN0YXRlICpub2RlLAogewogCW5vZGUtPnBz dGF0ZV9sZW4gPQogCQlhZGRfc2l6ZShvZmZzZXRvZihQYXJhbGxlbEFwcGVuZFN0YXRlLCBwYV9m aW5pc2hlZCksCi0JCQkJIHNpemVvZihib29sKSAqIG5vZGUtPmFzX25wbGFucyk7CisJCQkJIHNp emVvZihib29sKSAqIG5vZGUtPmFzLm5wbGFucyk7CiAKIAlzaG1fdG9jX2VzdGltYXRlX2NodW5r KCZwY3h0LT5lc3RpbWF0b3IsIG5vZGUtPnBzdGF0ZV9sZW4pOwogCXNobV90b2NfZXN0aW1hdGVf a2V5cygmcGN4dC0+ZXN0aW1hdG9yLCAxKTsKQEAgLTUyNSw3ICs1MjUsNyBAQCBFeGVjQXBwZW5k SW5pdGlhbGl6ZURTTShBcHBlbmRTdGF0ZSAqbm9kZSwKIAlwc3RhdGUgPSBzaG1fdG9jX2FsbG9j YXRlKHBjeHQtPnRvYywgbm9kZS0+cHN0YXRlX2xlbik7CiAJbWVtc2V0KHBzdGF0ZSwgMCwgbm9k ZS0+cHN0YXRlX2xlbik7CiAJTFdMb2NrSW5pdGlhbGl6ZSgmcHN0YXRlLT5wYV9sb2NrLCBMV1RS QU5DSEVfUEFSQUxMRUxfQVBQRU5EKTsKLQlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIG5vZGUt PnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgcHN0YXRlKTsKKwlzaG1fdG9jX2luc2VydChwY3h0LT50 b2MsIG5vZGUtPmFzLnBzLnBsYW4tPnBsYW5fbm9kZV9pZCwgcHN0YXRlKTsKIAogCW5vZGUtPmFz X3BzdGF0ZSA9IHBzdGF0ZTsKIAlub2RlLT5jaG9vc2VfbmV4dF9zdWJwbGFuID0gY2hvb3NlX25l eHRfc3VicGxhbl9mb3JfbGVhZGVyOwpAQCAtNTQzLDcgKzU0Myw3IEBAIEV4ZWNBcHBlbmRSZUlu aXRpYWxpemVEU00oQXBwZW5kU3RhdGUgKm5vZGUsIFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKIAlQ YXJhbGxlbEFwcGVuZFN0YXRlICpwc3RhdGUgPSBub2RlLT5hc19wc3RhdGU7CiAKIAlwc3RhdGUt PnBhX25leHRfcGxhbiA9IDA7Ci0JbWVtc2V0KHBzdGF0ZS0+cGFfZmluaXNoZWQsIDAsIHNpemVv Zihib29sKSAqIG5vZGUtPmFzX25wbGFucyk7CisJbWVtc2V0KHBzdGF0ZS0+cGFfZmluaXNoZWQs IDAsIHNpemVvZihib29sKSAqIG5vZGUtPmFzLm5wbGFucyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg LTU1Niw3ICs1NTYsNyBAQCBFeGVjQXBwZW5kUmVJbml0aWFsaXplRFNNKEFwcGVuZFN0YXRlICpu b2RlLCBQYXJhbGxlbENvbnRleHQgKnBjeHQpCiB2b2lkCiBFeGVjQXBwZW5kSW5pdGlhbGl6ZVdv cmtlcihBcHBlbmRTdGF0ZSAqbm9kZSwgUGFyYWxsZWxXb3JrZXJDb250ZXh0ICpwd2N4dCkKIHsK LQlub2RlLT5hc19wc3RhdGUgPSBzaG1fdG9jX2xvb2t1cChwd2N4dC0+dG9jLCBub2RlLT5wcy5w bGFuLT5wbGFuX25vZGVfaWQsIGZhbHNlKTsKKwlub2RlLT5hc19wc3RhdGUgPSBzaG1fdG9jX2xv b2t1cChwd2N4dC0+dG9jLCBub2RlLT5hcy5wcy5wbGFuLT5wbGFuX25vZGVfaWQsIGZhbHNlKTsK IAlub2RlLT5jaG9vc2VfbmV4dF9zdWJwbGFuID0gY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29y a2VyOwogfQogCkBAIC01NzQsNyArNTc0LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9sb2NhbGx5 KEFwcGVuZFN0YXRlICpub2RlKQogCWludAkJCW5leHRwbGFuOwogCiAJLyogV2Ugc2hvdWxkIG5l dmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBzdWJwbGFucyAqLwotCUFzc2VydChub2Rl LT5hc19ucGxhbnMgPiAwKTsKKwlBc3NlcnQobm9kZS0+YXMubnBsYW5zID4gMCk7CiAKIAkvKiBO b3RoaW5nIHRvIGRvIGlmIHN5bmNkb25lICovCiAJaWYgKG5vZGUtPmFzX3N5bmNkb25lKQpAQCAt NTg5LDMzICs1ODksMzMgQEAgY2hvb3NlX25leHRfc3VicGxhbl9sb2NhbGx5KEFwcGVuZFN0YXRl ICpub2RlKQogCSAqLwogCWlmICh3aGljaHBsYW4gPT0gSU5WQUxJRF9TVUJQTEFOX0lOREVYKQog CXsKLQkJaWYgKG5vZGUtPmFzX25hc3luY3BsYW5zID4gMCkKKwkJaWYgKG5vZGUtPmFzLm5hc3lu Y3BsYW5zID4gMCkKIAkJewogCQkJLyogV2UnZCBoYXZlIGZpbGxlZCBhc192YWxpZF9zdWJwbGFu cyBhbHJlYWR5ICovCi0JCQlBc3NlcnQobm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmll ZCk7CisJCQlBc3NlcnQobm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CiAJCX0K LQkJZWxzZSBpZiAoIW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJCWVsc2Ug aWYgKCFub2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQogCQl7Ci0JCQlub2RlLT5h c192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPmFz X3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7Ci0JCQlub2RlLT5hc192YWxpZF9zdWJwbGFuc19p ZGVudGlmaWVkID0gdHJ1ZTsKKwkJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCQlFeGVj RmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXMucHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsK KwkJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCQl9CiAKIAkJ d2hpY2hwbGFuID0gLTE7CiAJfQogCiAJLyogRW5zdXJlIHdoaWNocGxhbiBpcyB3aXRoaW4gdGhl IGV4cGVjdGVkIHJhbmdlICovCi0JQXNzZXJ0KHdoaWNocGxhbiA+PSAtMSAmJiB3aGljaHBsYW4g PD0gbm9kZS0+YXNfbnBsYW5zKTsKKwlBc3NlcnQod2hpY2hwbGFuID49IC0xICYmIHdoaWNocGxh biA8PSBub2RlLT5hcy5ucGxhbnMpOwogCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9k ZS0+cHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpCi0JCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLCB3aGljaHBsYW4pOworCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKG5vZGUtPmFzLnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKQorCQluZXh0cGxhbiA9 IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywgd2hpY2hwbGFuKTsKIAll bHNlCi0JCW5leHRwbGFuID0gYm1zX3ByZXZfbWVtYmVyKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5z LCB3aGljaHBsYW4pOworCQluZXh0cGxhbiA9IGJtc19wcmV2X21lbWJlcihub2RlLT5hcy52YWxp ZF9zdWJwbGFucywgd2hpY2hwbGFuKTsKIAogCWlmIChuZXh0cGxhbiA8IDApCiAJewogCQkvKiBT ZXQgYXNfc3luY2RvbmUgaWYgaW4gYXN5bmMgbW9kZSAqLwotCQlpZiAobm9kZS0+YXNfbmFzeW5j cGxhbnMgPiAwKQorCQlpZiAobm9kZS0+YXMubmFzeW5jcGxhbnMgPiAwKQogCQkJbm9kZS0+YXNf c3luY2RvbmUgPSB0cnVlOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtNjM5LDEwICs2MzksMTAg QEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3JfbGVhZGVyKEFwcGVuZFN0YXRlICpub2RlKQogCVBh cmFsbGVsQXBwZW5kU3RhdGUgKnBzdGF0ZSA9IG5vZGUtPmFzX3BzdGF0ZTsKIAogCS8qIEJhY2t3 YXJkIHNjYW4gaXMgbm90IHN1cHBvcnRlZCBieSBwYXJhbGxlbC1hd2FyZSBwbGFucyAqLwotCUFz c2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19kaXJlY3Rpb24p KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5hcy5wcy5zdGF0ZS0+ZXNf ZGlyZWN0aW9uKSk7CiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUg YXJlIG5vIHN1YnBsYW5zICovCi0JQXNzZXJ0KG5vZGUtPmFzX25wbGFucyA+IDApOworCUFzc2Vy dChub2RlLT5hcy5ucGxhbnMgPiAwKTsKIAogCUxXTG9ja0FjcXVpcmUoJnBzdGF0ZS0+cGFfbG9j aywgTFdfRVhDTFVTSVZFKTsKIApAQCAtNjU0LDE4ICs2NTQsMTggQEAgY2hvb3NlX25leHRfc3Vi cGxhbl9mb3JfbGVhZGVyKEFwcGVuZFN0YXRlICpub2RlKQogCWVsc2UKIAl7CiAJCS8qIFN0YXJ0 IHdpdGggbGFzdCBzdWJwbGFuLiAqLwotCQlub2RlLT5hc193aGljaHBsYW4gPSBub2RlLT5hc19u cGxhbnMgLSAxOworCQlub2RlLT5hc193aGljaHBsYW4gPSBub2RlLT5hcy5ucGxhbnMgLSAxOwog CiAJCS8qCiAJCSAqIElmIHdlJ3ZlIHlldCB0byBkZXRlcm1pbmUgdGhlIHZhbGlkIHN1YnBsYW5z IHRoZW4gZG8gc28gbm93LiAgSWYKIAkJICogcnVuLXRpbWUgcHJ1bmluZyBpcyBkaXNhYmxlZCB0 aGVuIHRoZSB2YWxpZCBzdWJwbGFucyB3aWxsIGFsd2F5cyBiZQogCQkgKiBzZXQgdG8gYWxsIHN1 YnBsYW5zLgogCQkgKi8KLQkJaWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVk KQorCQlpZiAoIW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJCXsKLQkJCW5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zID0KLQkJCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9k ZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJCW5vZGUtPmFzX3ZhbGlkX3N1YnBs YW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJ CUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5V TEwpOworCQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7CiAKIAkJ CS8qCiAJCQkgKiBNYXJrIGVhY2ggaW52YWxpZCBwbGFuIGFzIGZpbmlzaGVkIHRvIGFsbG93IHRo ZSBsb29wIGJlbG93IHRvCkBAIC03MjEsMTAgKzcyMSwxMCBAQCBjaG9vc2VfbmV4dF9zdWJwbGFu X2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJUGFyYWxsZWxBcHBlbmRTdGF0ZSAqcHN0 YXRlID0gbm9kZS0+YXNfcHN0YXRlOwogCiAJLyogQmFja3dhcmQgc2NhbiBpcyBub3Qgc3VwcG9y dGVkIGJ5IHBhcmFsbGVsLWF3YXJlIHBsYW5zICovCi0JQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQobm9kZS0+cHMuc3RhdGUtPmVzX2RpcmVjdGlvbikpOworCUFzc2VydChTY2FuRGlyZWN0 aW9uSXNGb3J3YXJkKG5vZGUtPmFzLnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsKIAogCS8qIFdl IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxhbnMgKi8KLQlB c3NlcnQobm9kZS0+YXNfbnBsYW5zID4gMCk7CisJQXNzZXJ0KG5vZGUtPmFzLm5wbGFucyA+IDAp OwogCiAJTFdMb2NrQWNxdWlyZSgmcHN0YXRlLT5wYV9sb2NrLCBMV19FWENMVVNJVkUpOwogCkBA IC03MzcsMTEgKzczNywxMSBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5k U3RhdGUgKm5vZGUpCiAJICogcnVuLXRpbWUgcHJ1bmluZyBpcyBkaXNhYmxlZCB0aGVuIHRoZSB2 YWxpZCBzdWJwbGFucyB3aWxsIGFsd2F5cyBiZSBzZXQKIAkgKiB0byBhbGwgc3VicGxhbnMuCiAJ ICovCi0JZWxzZSBpZiAoIW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCisJZWxz ZSBpZiAoIW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJewotCQlub2RlLT5h c192YWxpZF9zdWJwbGFucyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNf cHJ1bmVfc3RhdGUsIGZhbHNlLCBOVUxMKTsKLQkJbm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCA9IHRydWU7CisJCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0KKwkJCUV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hcy5wcnVuZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOworCQlu b2RlLT5hcy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQltYXJrX2ludmFs aWRfc3VicGxhbnNfYXNfZmluaXNoZWQobm9kZSk7CiAJfQpAQCAtNzYxLDcgKzc2MSw3IEBAIGNo b29zZV9uZXh0X3N1YnBsYW5fZm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAl7CiAJCWlu dAkJCW5leHRwbGFuOwogCi0JCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzX3Zh bGlkX3N1YnBsYW5zLAorCQluZXh0cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxp ZF9zdWJwbGFucywKIAkJCQkJCQkJICAgcHN0YXRlLT5wYV9uZXh0X3BsYW4pOwogCQlpZiAobmV4 dHBsYW4gPj0gMCkKIAkJewpAQCAtNzc0LDcgKzc3NCw3IEBAIGNob29zZV9uZXh0X3N1YnBsYW5f Zm9yX3dvcmtlcihBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJCSAqIFRyeSBsb29waW5nIGJhY2sgdG8g dGhlIGZpcnN0IHZhbGlkIHBhcnRpYWwgcGxhbiwgaWYgdGhlcmUgaXMKIAkJCSAqIG9uZS4gIElm IHRoZXJlIGlzbid0LCBhcnJhbmdlIHRvIGJhaWwgb3V0IGJlbG93LgogCQkJICovCi0JCQluZXh0 cGxhbiA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hc192YWxpZF9zdWJwbGFucywKKwkJCW5leHRw bGFuID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zLAogCQkJCQkJCQkJ ICAgbm9kZS0+YXNfZmlyc3RfcGFydGlhbF9wbGFuIC0gMSk7CiAJCQlwc3RhdGUtPnBhX25leHRf cGxhbiA9CiAJCQkJbmV4dHBsYW4gPCAwID8gbm9kZS0+YXNfd2hpY2hwbGFuIDogbmV4dHBsYW47 CkBAIC03OTksNyArNzk5LDcgQEAgY2hvb3NlX25leHRfc3VicGxhbl9mb3Jfd29ya2VyKEFwcGVu ZFN0YXRlICpub2RlKQogCiAJLyogUGljayB0aGUgcGxhbiB3ZSBmb3VuZCwgYW5kIGFkdmFuY2Ug cGFfbmV4dF9wbGFuIG9uZSBtb3JlIHRpbWUuICovCiAJbm9kZS0+YXNfd2hpY2hwbGFuID0gcHN0 YXRlLT5wYV9uZXh0X3BsYW47Ci0JcHN0YXRlLT5wYV9uZXh0X3BsYW4gPSBibXNfbmV4dF9tZW1i ZXIobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJcHN0YXRlLT5wYV9uZXh0X3BsYW4gPSBibXNf bmV4dF9tZW1iZXIobm9kZS0+YXMudmFsaWRfc3VicGxhbnMsCiAJCQkJCQkJCQkJICAgcHN0YXRl LT5wYV9uZXh0X3BsYW4pOwogCiAJLyoKQEAgLTgwOCw3ICs4MDgsNyBAQCBjaG9vc2VfbmV4dF9z dWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJICovCiAJaWYgKHBzdGF0ZS0+ cGFfbmV4dF9wbGFuIDwgMCkKIAl7Ci0JCWludAkJCW5leHRwbGFuID0gYm1zX25leHRfbWVtYmVy KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zLAorCQlpbnQJCQluZXh0cGxhbiA9IGJtc19uZXh0X21l bWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywKIAkJCQkJCQkJCQkJICAgbm9kZS0+YXNfZmly c3RfcGFydGlhbF9wbGFuIC0gMSk7CiAKIAkJaWYgKG5leHRwbGFuID49IDApCkBAIC04NTAsMTYg Kzg1MCwxNiBAQCBtYXJrX2ludmFsaWRfc3VicGxhbnNfYXNfZmluaXNoZWQoQXBwZW5kU3RhdGUg Km5vZGUpCiAJQXNzZXJ0KG5vZGUtPmFzX3BzdGF0ZSk7CiAKIAkvKiBTaG91bGRuJ3QgaGF2ZSBi ZWVuIGNhbGxlZCB3aGVuIHJ1bi10aW1lIHBydW5pbmcgaXMgbm90IGVuYWJsZWQgKi8KLQlBc3Nl cnQobm9kZS0+YXNfcHJ1bmVfc3RhdGUpOworCUFzc2VydChub2RlLT5hcy5wcnVuZV9zdGF0ZSk7 CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIGFsbCBwbGFucyBhcmUgdmFsaWQgKi8KLQlpZiAoYm1z X251bV9tZW1iZXJzKG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKSA9PSBub2RlLT5hc19ucGxhbnMp CisJaWYgKGJtc19udW1fbWVtYmVycyhub2RlLT5hcy52YWxpZF9zdWJwbGFucykgPT0gbm9kZS0+ YXMubnBsYW5zKQogCQlyZXR1cm47CiAKIAkvKiBNYXJrIGFsbCBub24tdmFsaWQgcGxhbnMgYXMg ZmluaXNoZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbm9kZS0+YXNfbnBsYW5zOyBpKyspCisJZm9y IChpID0gMDsgaSA8IG5vZGUtPmFzLm5wbGFuczsgaSsrKQogCXsKLQkJaWYgKCFibXNfaXNfbWVt YmVyKGksIG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKSkKKwkJaWYgKCFibXNfaXNfbWVtYmVyKGks IG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zKSkKIAkJCW5vZGUtPmFzX3BzdGF0ZS0+cGFfZmluaXNo ZWRbaV0gPSB0cnVlOwogCX0KIH0KQEAgLTg4MSwyNyArODgxLDI3IEBAIEV4ZWNBcHBlbmRBc3lu Y0JlZ2luKEFwcGVuZFN0YXRlICpub2RlKQogCWludAkJCWk7CiAKIAkvKiBCYWNrd2FyZCBzY2Fu IGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgQXBwZW5kcy4gKi8KLQlBc3NlcnQoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChub2RlLT5wcy5zdGF0ZS0+ZXNfZGlyZWN0aW9uKSk7CisJQXNz ZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQobm9kZS0+YXMucHMuc3RhdGUtPmVzX2RpcmVjdGlv bikpOwogCiAJLyogV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBz dWJwbGFucyAqLwotCUFzc2VydChub2RlLT5hc19ucGxhbnMgPiAwKTsKKwlBc3NlcnQobm9kZS0+ YXMubnBsYW5zID4gMCk7CiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhl cmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5zLiAqLwotCUFzc2VydChub2RlLT5hc19uYXN5bmNwbGFu cyA+IDApOworCUFzc2VydChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDApOwogCiAJLyogSWYgd2Un dmUgeWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICov Ci0JaWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCWlmICghbm9kZS0+ YXMudmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAl7Ci0JCW5vZGUtPmFzX3ZhbGlkX3N1YnBs YW5zID0KLQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9zdGF0ZSwg ZmFsc2UsIE5VTEwpOwotCQlub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1 ZTsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPQorCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBs YW5zKG5vZGUtPmFzLnBydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCW5vZGUtPmFzLnZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCiAJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBs YW5zKG5vZGUpOwogCX0KIAogCS8qIEluaXRpYWxpemUgc3RhdGUgdmFyaWFibGVzLiAqLwotCW5v ZGUtPmFzX3N5bmNkb25lID0gYm1zX2lzX2VtcHR5KG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKTsK LQlub2RlLT5hc19uYXN5bmNyZW1haW4gPSBibXNfbnVtX21lbWJlcnMobm9kZS0+YXNfdmFsaWRf YXN5bmNwbGFucyk7CisJbm9kZS0+YXNfc3luY2RvbmUgPSBibXNfaXNfZW1wdHkobm9kZS0+YXMu dmFsaWRfc3VicGxhbnMpOworCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IGJtc19udW1fbWVtYmVy cyhub2RlLT5hcy52YWxpZF9hc3luY3BsYW5zKTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhl cmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwogCWlmIChub2RlLT5hc19uYXN5bmNy ZW1haW4gPT0gMCkKQEAgLTkwOSw5ICs5MDksOSBAQCBFeGVjQXBwZW5kQXN5bmNCZWdpbihBcHBl bmRTdGF0ZSAqbm9kZSkKIAogCS8qIE1ha2UgYSByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSB2YWxp ZCBhc3luYyBzdWJwbGFucy4gKi8KIAlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVt YmVyKG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCXdoaWxlICgoaSA9IGJt c19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9hc3luY3BsYW5zLCBpKSkgPj0gMCkKIAl7Ci0J CUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFzX2FzeW5jcmVxdWVzdHNbaV07CisJCUFzeW5j UmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFzLmFzeW5jcmVxdWVzdHNbaV07CiAKIAkJQXNzZXJ0KGFy ZXEtPnJlcXVlc3RfaW5kZXggPT0gaSk7CiAJCUFzc2VydCghYXJlcS0+Y2FsbGJhY2tfcGVuZGlu Zyk7CkBAIC05NjMsNyArOTYzLDcgQEAgRXhlY0FwcGVuZEFzeW5jR2V0TmV4dChBcHBlbmRTdGF0 ZSAqbm9kZSwgVHVwbGVUYWJsZVNsb3QgKipyZXN1bHQpCiAJaWYgKG5vZGUtPmFzX3N5bmNkb25l KQogCXsKIAkJQXNzZXJ0KG5vZGUtPmFzX25hc3luY3JlbWFpbiA9PSAwKTsKLQkJKnJlc3VsdCA9 IEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCSpyZXN1bHQg PSBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5wc19SZXN1bHRUdXBsZVNsb3QpOwogCQlyZXR1 cm4gdHJ1ZTsKIAl9CiAKQEAgLTk4Myw3ICs5ODMsNyBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0 KEFwcGVuZFN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3VsdCkKIAlpbnQJCQlpOwog CiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gYXN5bmMgc3VicGxhbnMgbmVlZGlu ZyBhIG5ldyByZXF1ZXN0LiAqLwotCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXNfbmVlZHJlcXVl c3QpKQorCWlmIChibXNfaXNfZW1wdHkobm9kZS0+YXMubmVlZHJlcXVlc3QpKQogCXsKIAkJQXNz ZXJ0KG5vZGUtPmFzX25hc3luY3Jlc3VsdHMgPT0gMCk7CiAJCXJldHVybiBmYWxzZTsKQEAgLTk5 NiwxNyArOTk2LDE3IEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5vZGUs IFR1cGxlVGFibGVTbG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19uYXN5bmNyZXN1bHRzID4g MCkKIAl7CiAJCS0tbm9kZS0+YXNfbmFzeW5jcmVzdWx0czsKLQkJKnJlc3VsdCA9IG5vZGUtPmFz X2FzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKKwkJKnJlc3VsdCA9IG5vZGUt PmFzLmFzeW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKIAkJcmV0dXJuIHRydWU7 CiAJfQogCiAJLyogTWFrZSBhIG5ldyByZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJw bGFucyB0aGF0IG5lZWQgaXQuICovCi0JbmVlZHJlcXVlc3QgPSBub2RlLT5hc19uZWVkcmVxdWVz dDsKLQlub2RlLT5hc19uZWVkcmVxdWVzdCA9IE5VTEw7CisJbmVlZHJlcXVlc3QgPSBub2RlLT5h cy5uZWVkcmVxdWVzdDsKKwlub2RlLT5hcy5uZWVkcmVxdWVzdCA9IE5VTEw7CiAJaSA9IC0xOwog CXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihuZWVkcmVxdWVzdCwgaSkpID49IDApCiAJewot CQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hc19hc3luY3JlcXVlc3RzW2ldOworCQlBc3lu Y1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hcy5hc3luY3JlcXVlc3RzW2ldOwogCiAJCS8qIERvIHRo ZSBhY3R1YWwgd29yay4gKi8KIAkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKQEAgLTEwMTcsNyAr MTAxNyw3IEBAIEV4ZWNBcHBlbmRBc3luY1JlcXVlc3QoQXBwZW5kU3RhdGUgKm5vZGUsIFR1cGxl VGFibGVTbG90ICoqcmVzdWx0KQogCWlmIChub2RlLT5hc19uYXN5bmNyZXN1bHRzID4gMCkKIAl7 CiAJCS0tbm9kZS0+YXNfbmFzeW5jcmVzdWx0czsKLQkJKnJlc3VsdCA9IG5vZGUtPmFzX2FzeW5j cmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKKwkJKnJlc3VsdCA9IG5vZGUtPmFzLmFz eW5jcmVzdWx0c1tub2RlLT5hc19uYXN5bmNyZXN1bHRzXTsKIAkJcmV0dXJuIHRydWU7CiAJfQog CkBAIC0xMDMzLDcgKzEwMzMsNyBAQCBFeGVjQXBwZW5kQXN5bmNSZXF1ZXN0KEFwcGVuZFN0YXRl ICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqKnJlc3VsdCkKIHN0YXRpYyB2b2lkCiBFeGVjQXBwZW5k QXN5bmNFdmVudFdhaXQoQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JaW50CQkJbmV2ZW50cyA9IG5v ZGUtPmFzX25hc3luY3BsYW5zICsgMjsKKwlpbnQJCQluZXZlbnRzID0gbm9kZS0+YXMubmFzeW5j cGxhbnMgKyAyOwogCWxvbmcJCXRpbWVvdXQgPSBub2RlLT5hc19zeW5jZG9uZSA/IC0xIDogMDsK IAlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVdOwogCWludAkJCW5v Y2N1cnJlZDsKQEAgLTEwNDIsMTYgKzEwNDIsMTYgQEAgRXhlY0FwcGVuZEFzeW5jRXZlbnRXYWl0 KEFwcGVuZFN0YXRlICpub2RlKQogCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0 aGVyZSBhcmUgbm8gdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCiAJQXNzZXJ0KG5vZGUtPmFzX25h c3luY3JlbWFpbiA+IDApOwogCi0JQXNzZXJ0KG5vZGUtPmFzX2V2ZW50c2V0ID09IE5VTEwpOwot CW5vZGUtPmFzX2V2ZW50c2V0ID0gQ3JlYXRlV2FpdEV2ZW50U2V0KEN1cnJlbnRSZXNvdXJjZU93 bmVyLCBuZXZlbnRzKTsKLQlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5hc19ldmVudHNldCwgV0xf RVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKKwlBc3NlcnQobm9kZS0+YXMuZXZl bnRzZXQgPT0gTlVMTCk7CisJbm9kZS0+YXMuZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQo Q3VycmVudFJlc291cmNlT3duZXIsIG5ldmVudHMpOworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUt PmFzLmV2ZW50c2V0LCBXTF9FWElUX09OX1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAogCQkJ CQkgIE5VTEwsIE5VTEwpOwogCiAJLyogR2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5j ZSB0byBhZGQgYW4gZXZlbnQuICovCiAJaSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21l bWJlcihub2RlLT5hc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwl3aGlsZSAoKGkgPSBibXNfbmV4 dF9tZW1iZXIobm9kZS0+YXMuYXN5bmNwbGFucywgaSkpID49IDApCiAJewotCQlBc3luY1JlcXVl c3QgKmFyZXEgPSBub2RlLT5hc19hc3luY3JlcXVlc3RzW2ldOworCQlBc3luY1JlcXVlc3QgKmFy ZXEgPSBub2RlLT5hcy5hc3luY3JlcXVlc3RzW2ldOwogCiAJCWlmIChhcmVxLT5jYWxsYmFja19w ZW5kaW5nKQogCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChhcmVxKTsKQEAgLTEwNjEsMTAgKzEw NjEsMTAgQEAgRXhlY0FwcGVuZEFzeW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRlICpub2RlKQogCSAq IE5vIG5lZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBpZiBub25lIG9mIHRoZSBzdWJwbGFucyBj b25maWd1cmVkIGFueQogCSAqIGV2ZW50cy4KIAkgKi8KLQlpZiAoR2V0TnVtUmVnaXN0ZXJlZFdh aXRFdmVudHMobm9kZS0+YXNfZXZlbnRzZXQpID09IDEpCisJaWYgKEdldE51bVJlZ2lzdGVyZWRX YWl0RXZlbnRzKG5vZGUtPmFzLmV2ZW50c2V0KSA9PSAxKQogCXsKLQkJRnJlZVdhaXRFdmVudFNl dChub2RlLT5hc19ldmVudHNldCk7Ci0JCW5vZGUtPmFzX2V2ZW50c2V0ID0gTlVMTDsKKwkJRnJl ZVdhaXRFdmVudFNldChub2RlLT5hcy5ldmVudHNldCk7CisJCW5vZGUtPmFzLmV2ZW50c2V0ID0g TlVMTDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA4MCw3ICsxMDgwLDcgQEAgRXhlY0FwcGVuZEFz eW5jRXZlbnRXYWl0KEFwcGVuZFN0YXRlICpub2RlKQogCSAqIHdlIGNhbm5vdCBjaGFuZ2UgaXQg bm93LiAgVGhlIHBhdHRlcm4gaGFzIHBvc3NpYmx5IGJlZW4gY29waWVkIHRvIG90aGVyCiAJICog ZXh0ZW5zaW9ucyB0b28uCiAJICovCi0JQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+YXNfZXZlbnRz ZXQsIFdMX0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwlBZGRXYWl0RXZlbnRUb1NldChu b2RlLT5hcy5ldmVudHNldCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAogCQkJCQkg IE15TGF0Y2gsIE5VTEwpOwogCiAJLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUg ZXZlbnRzIGluIG9uZSBjYWxsLiAqLwpAQCAtMTA5MSwxMCArMTA5MSwxMCBAQCBFeGVjQXBwZW5k QXN5bmNFdmVudFdhaXQoQXBwZW5kU3RhdGUgKm5vZGUpCiAJICogSWYgdGhlIHRpbWVvdXQgaXMg LTEsIHdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4gIElmIHRoZQogCSAqIHRp bWVvdXQgaXMgMCwgcG9sbCBmb3IgZXZlbnRzLCBidXQgZG8gbm90IHdhaXQgYXQgYWxsLgogCSAq LwotCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+YXNfZXZlbnRzZXQsIHRpbWVv dXQsIG9jY3VycmVkX2V2ZW50LAorCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+ YXMuZXZlbnRzZXQsIHRpbWVvdXQsIG9jY3VycmVkX2V2ZW50LAogCQkJCQkJCQkgbmV2ZW50cywg V0FJVF9FVkVOVF9BUFBFTkRfUkVBRFkpOwotCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+YXNfZXZl bnRzZXQpOwotCW5vZGUtPmFzX2V2ZW50c2V0ID0gTlVMTDsKKwlGcmVlV2FpdEV2ZW50U2V0KG5v ZGUtPmFzLmV2ZW50c2V0KTsKKwlub2RlLT5hcy5ldmVudHNldCA9IE5VTEw7CiAJaWYgKG5vY2N1 cnJlZCA9PSAwKQogCQlyZXR1cm47CiAKQEAgLTExNjcsMTQgKzExNjcsMTQgQEAgRXhlY0FzeW5j QXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQogCX0KIAogCS8qIFNhdmUgcmVzdWx0 IHNvIHdlIGNhbiByZXR1cm4gaXQuICovCi0JQXNzZXJ0KG5vZGUtPmFzX25hc3luY3Jlc3VsdHMg PCBub2RlLT5hc19uYXN5bmNwbGFucyk7Ci0Jbm9kZS0+YXNfYXN5bmNyZXN1bHRzW25vZGUtPmFz X25hc3luY3Jlc3VsdHMrK10gPSBzbG90OworCUFzc2VydChub2RlLT5hc19uYXN5bmNyZXN1bHRz IDwgbm9kZS0+YXMubmFzeW5jcGxhbnMpOworCW5vZGUtPmFzLmFzeW5jcmVzdWx0c1tub2RlLT5h c19uYXN5bmNyZXN1bHRzKytdID0gc2xvdDsKIAogCS8qCiAJICogTWFyayB0aGUgc3VicGxhbiB0 aGF0IHJldHVybmVkIGEgcmVzdWx0IGFzIHJlYWR5IGZvciBhIG5ldyByZXF1ZXN0LiAgV2UKIAkg KiBkb24ndCBsYXVuY2ggYW5vdGhlciBvbmUgaGVyZSBpbW1lZGlhdGVseSBiZWNhdXNlIGl0IG1p Z2h0IGNvbXBsZXRlLgogCSAqLwotCW5vZGUtPmFzX25lZWRyZXF1ZXN0ID0gYm1zX2FkZF9tZW1i ZXIobm9kZS0+YXNfbmVlZHJlcXVlc3QsCisJbm9kZS0+YXMubmVlZHJlcXVlc3QgPSBibXNfYWRk X21lbWJlcihub2RlLT5hcy5uZWVkcmVxdWVzdCwKIAkJCQkJCQkJCQkgIGFyZXEtPnJlcXVlc3Rf aW5kZXgpOwogfQogCkBAIC0xMTkxLDExICsxMTkxLDExIEBAIGNsYXNzaWZ5X21hdGNoaW5nX3N1 YnBsYW5zKEFwcGVuZFN0YXRlICpub2RlKQogewogCUJpdG1hcHNldCAgKnZhbGlkX2FzeW5jcGxh bnM7CiAKLQlBc3NlcnQobm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7Ci0JQXNz ZXJ0KG5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMgPT0gTlVMTCk7CisJQXNzZXJ0KG5vZGUtPmFz LnZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpOworCUFzc2VydChub2RlLT5hcy52YWxpZF9hc3lu Y3BsYW5zID09IE5VTEwpOwogCiAJLyogTm90aGluZyB0byBkbyBpZiB0aGVyZSBhcmUgbm8gdmFs aWQgc3VicGxhbnMuICovCi0JaWYgKGJtc19pc19lbXB0eShub2RlLT5hc192YWxpZF9zdWJwbGFu cykpCisJaWYgKGJtc19pc19lbXB0eShub2RlLT5hcy52YWxpZF9zdWJwbGFucykpCiAJewogCQlu b2RlLT5hc19zeW5jZG9uZSA9IHRydWU7CiAJCW5vZGUtPmFzX25hc3luY3JlbWFpbiA9IDA7CkBA IC0xMjAzLDIwICsxMjAzLDIwIEBAIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKEFwcGVuZFN0 YXRlICpub2RlKQogCX0KIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlk IGFzeW5jIHN1YnBsYW5zLiAqLwotCWlmICghYm1zX292ZXJsYXAobm9kZS0+YXNfdmFsaWRfc3Vi cGxhbnMsIG5vZGUtPmFzX2FzeW5jcGxhbnMpKQorCWlmICghYm1zX292ZXJsYXAobm9kZS0+YXMu dmFsaWRfc3VicGxhbnMsIG5vZGUtPmFzLmFzeW5jcGxhbnMpKQogCXsKIAkJbm9kZS0+YXNfbmFz eW5jcmVtYWluID0gMDsKIAkJcmV0dXJuOwogCX0KIAogCS8qIEdldCB2YWxpZCBhc3luYyBzdWJw bGFucy4gKi8KLQl2YWxpZF9hc3luY3BsYW5zID0gYm1zX2ludGVyc2VjdChub2RlLT5hc19hc3lu Y3BsYW5zLAotCQkJCQkJCQkJIG5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zKTsKKwl2YWxpZF9hc3lu Y3BsYW5zID0gYm1zX2ludGVyc2VjdChub2RlLT5hcy5hc3luY3BsYW5zLAorCQkJCQkJCQkJIG5v ZGUtPmFzLnZhbGlkX3N1YnBsYW5zKTsKIAogCS8qIEFkanVzdCB0aGUgdmFsaWQgc3VicGxhbnMg dG8gY29udGFpbiBzeW5jIHN1YnBsYW5zIG9ubHkuICovCi0Jbm9kZS0+YXNfdmFsaWRfc3VicGxh bnMgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+YXNfdmFsaWRfc3VicGxhbnMsCisJbm9kZS0+YXMu dmFsaWRfc3VicGxhbnMgPSBibXNfZGVsX21lbWJlcnMobm9kZS0+YXMudmFsaWRfc3VicGxhbnMs CiAJCQkJCQkJCQkJCSAgdmFsaWRfYXN5bmNwbGFucyk7CiAKIAkvKiBTYXZlIHZhbGlkIGFzeW5j IHN1YnBsYW5zLiAqLwotCW5vZGUtPmFzX3ZhbGlkX2FzeW5jcGxhbnMgPSB2YWxpZF9hc3luY3Bs YW5zOworCW5vZGUtPmFzLnZhbGlkX2FzeW5jcGxhbnMgPSB2YWxpZF9hc3luY3BsYW5zOwogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCA3MmVlYmQ1MGJkZi4uZDdk MmRlMDgxNDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVu ZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC03OSwx MiArNzksMTIgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRl ICplc3RhdGUsIGludCBlZmxhZ3MpCiAJLyoKIAkgKiBjcmVhdGUgbmV3IE1lcmdlQXBwZW5kU3Rh dGUgZm9yIG91ciBub2RlCiAJICovCi0JbWVyZ2VzdGF0ZS0+cHMucGxhbiA9IChQbGFuICopIG5v ZGU7Ci0JbWVyZ2VzdGF0ZS0+cHMuc3RhdGUgPSBlc3RhdGU7Ci0JbWVyZ2VzdGF0ZS0+cHMuRXhl Y1Byb2NOb2RlID0gRXhlY01lcmdlQXBwZW5kOworCW1lcmdlc3RhdGUtPmFzLnBzLnBsYW4gPSAo UGxhbiAqKSBub2RlOworCW1lcmdlc3RhdGUtPmFzLnBzLnN0YXRlID0gZXN0YXRlOworCW1lcmdl c3RhdGUtPmFzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNNZXJnZUFwcGVuZDsKIAogCS8qIElmIHJ1 bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93 ICovCi0JaWYgKG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwlpZiAobm9kZS0+YWIucGFy dF9wcnVuZV9pbmRleCA+PSAwKQogCXsKIAkJUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0 ZTsKIApAQCAtOTMsMTIgKzkzLDEyIEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQg Km5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkgKiBzdWJwbGFucyB0byBpbml0 aWFsaXplICh2YWxpZHN1YnBsYW5zKSBieSB0YWtpbmcgaW50byBhY2NvdW50IHRoZQogCQkgKiBy ZXN1bHQgb2YgcGVyZm9ybWluZyBpbml0aWFsIHBydW5pbmcgaWYgYW55LgogCQkgKi8KLQkJcHJ1 bmVzdGF0ZSA9IEV4ZWNJbml0UGFydGl0aW9uRXhlY1BydW5pbmcoJm1lcmdlc3RhdGUtPnBzLAot CQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2RlLT5tZXJnZXBsYW5zKSwKLQkJCQkJCQkJCQkJ CSAgbm9kZS0+cGFydF9wcnVuZV9pbmRleCwKLQkJCQkJCQkJCQkJCSAgbm9kZS0+YXBwcmVsaWRz LAorCQlwcnVuZXN0YXRlID0gRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZygmbWVyZ2VzdGF0 ZS0+YXMucHMsCisJCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKG5vZGUtPmFiLnN1YnBsYW5zKSwK KwkJCQkJCQkJCQkJCSAgbm9kZS0+YWIucGFydF9wcnVuZV9pbmRleCwKKwkJCQkJCQkJCQkJCSAg bm9kZS0+YWIuYXBwcmVsaWRzLAogCQkJCQkJCQkJCQkJICAmdmFsaWRzdWJwbGFucyk7Ci0JCW1l cmdlc3RhdGUtPm1zX3BydW5lX3N0YXRlID0gcHJ1bmVzdGF0ZTsKKwkJbWVyZ2VzdGF0ZS0+YXMu cHJ1bmVfc3RhdGUgPSBwcnVuZXN0YXRlOwogCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFs aWRzdWJwbGFucyk7CiAKIAkJLyoKQEAgLTEwNywyNSArMTA3LDI1IEBAIEV4ZWNJbml0TWVyZ2VB cHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkg KiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCiAJCSAqLwogCQlpZiAo IXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKLQkJCW1lcmdlc3RhdGUt Pm1zX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsK KwkJCW1lcmdlc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAw LCBucGxhbnMgLSAxKTsKIAl9CiAJZWxzZQogCXsKLQkJbnBsYW5zID0gbGlzdF9sZW5ndGgobm9k ZS0+bWVyZ2VwbGFucyk7CisJCW5wbGFucyA9IGxpc3RfbGVuZ3RoKG5vZGUtPmFiLnN1YnBsYW5z KTsKIAogCQkvKgogCQkgKiBXaGVuIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdCBl bmFibGVkIHdlIGNhbiBqdXN0IG1hcmsgYWxsCiAJCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5 IG11c3QgYWxzbyBhbGwgYmUgaW5pdGlhbGl6ZWQuCiAJCSAqLwogCQlBc3NlcnQobnBsYW5zID4g MCk7Ci0JCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9CisJ CW1lcmdlc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFucyA9CiAJCQlibXNf YWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQltZXJnZXN0YXRlLT5tc19wcnVuZV9z dGF0ZSA9IE5VTEw7CisJCW1lcmdlc3RhdGUtPmFzLnBydW5lX3N0YXRlID0gTlVMTDsKIAl9CiAK IAltZXJnZXBsYW5zdGF0ZXMgPSBwYWxsb2NfYXJyYXkoUGxhblN0YXRlICosIG5wbGFucyk7Ci0J bWVyZ2VzdGF0ZS0+bWVyZ2VwbGFucyA9IG1lcmdlcGxhbnN0YXRlczsKLQltZXJnZXN0YXRlLT5t c19ucGxhbnMgPSBucGxhbnM7CisJbWVyZ2VzdGF0ZS0+YXMucGxhbnMgPSBtZXJnZXBsYW5zdGF0 ZXM7CisJbWVyZ2VzdGF0ZS0+YXMubnBsYW5zID0gbnBsYW5zOwogCiAJbWVyZ2VzdGF0ZS0+bXNf c2xvdHMgPSBwYWxsb2MwX2FycmF5KFR1cGxlVGFibGVTbG90ICosIG5wbGFucyk7CiAJbWVyZ2Vz dGF0ZS0+bXNfaGVhcCA9IGJpbmFyeWhlYXBfYWxsb2NhdGUobnBsYW5zLCBoZWFwX2NvbXBhcmVf c2xvdHMsCkBAIC0xMzksNyArMTM5LDcgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVu ZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaSA9IC0xOwogCXdoaWxlICgo aSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5zLCBpKSkgPj0gMCkKIAl7Ci0JCVBsYW4J ICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+bWVyZ2VwbGFucywgaSk7CisJ CVBsYW4JICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgobm9kZS0+YWIuc3VicGxhbnMs IGkpOwogCiAJCW1lcmdlcGxhbnN0YXRlc1tqKytdID0gRXhlY0luaXROb2RlKGluaXROb2RlLCBl c3RhdGUsIGVmbGFncyk7CiAJfQpAQCAtMTU2LDIwICsxNTYsMjAgQEAgRXhlY0luaXRNZXJnZUFw cGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJbWVy Z2VvcHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhtZXJnZXBsYW5zdGF0ZXMsIGopOwogCWlmICht ZXJnZW9wcyAhPSBOVUxMKQogCXsKLQkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmbWVyZ2Vz dGF0ZS0+cHMsIG1lcmdlb3BzKTsKKwkJRXhlY0luaXRSZXN1bHRUdXBsZVNsb3RUTCgmbWVyZ2Vz dGF0ZS0+YXMucHMsIG1lcmdlb3BzKTsKIAl9CiAJZWxzZQogCXsKLQkJRXhlY0luaXRSZXN1bHRU dXBsZVNsb3RUTCgmbWVyZ2VzdGF0ZS0+cHMsICZUVFNPcHNWaXJ0dWFsKTsKKwkJRXhlY0luaXRS ZXN1bHRUdXBsZVNsb3RUTCgmbWVyZ2VzdGF0ZS0+YXMucHMsICZUVFNPcHNWaXJ0dWFsKTsKIAkJ Lyogc2hvdyB0aGF0IHRoZSBvdXRwdXQgc2xvdCB0eXBlIGlzIG5vdCBmaXhlZCAqLwotCQltZXJn ZXN0YXRlLT5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOwotCQltZXJnZXN0YXRlLT5wcy5yZXN1bHRv cHNmaXhlZCA9IGZhbHNlOworCQltZXJnZXN0YXRlLT5hcy5wcy5yZXN1bHRvcHNzZXQgPSB0cnVl OworCQltZXJnZXN0YXRlLT5hcy5wcy5yZXN1bHRvcHNmaXhlZCA9IGZhbHNlOwogCX0KIAogCS8q CiAJICogTWlzY2VsbGFuZW91cyBpbml0aWFsaXphdGlvbgogCSAqLwotCW1lcmdlc3RhdGUtPnBz LnBzX1Byb2pJbmZvID0gTlVMTDsKKwltZXJnZXN0YXRlLT5hcy5wcy5wc19Qcm9qSW5mbyA9IE5V TEw7CiAKIAkvKgogCSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3JtYXRpb24KQEAgLTIyNCwy NiArMjI0LDI2IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAlpZiAoIW5v ZGUtPm1zX2luaXRpYWxpemVkKQogCXsKIAkJLyogTm90aGluZyB0byBkbyBpZiBhbGwgc3VicGxh bnMgd2VyZSBwcnVuZWQgKi8KLQkJaWYgKG5vZGUtPm1zX25wbGFucyA9PSAwKQotCQkJcmV0dXJu IEV4ZWNDbGVhclR1cGxlKG5vZGUtPnBzLnBzX1Jlc3VsdFR1cGxlU2xvdCk7CisJCWlmIChub2Rl LT5hcy5ucGxhbnMgPT0gMCkKKwkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShub2RlLT5hcy5wcy5w c19SZXN1bHRUdXBsZVNsb3QpOwogCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIHlldCB0byBkZXRlcm1p bmUgdGhlIHZhbGlkIHN1YnBsYW5zIHRoZW4gZG8gc28gbm93LiAgSWYKIAkJICogcnVuLXRpbWUg cHJ1bmluZyBpcyBkaXNhYmxlZCB0aGVuIHRoZSB2YWxpZCBzdWJwbGFucyB3aWxsIGFsd2F5cyBi ZQogCQkgKiBzZXQgdG8gYWxsIHN1YnBsYW5zLgogCQkgKi8KLQkJaWYgKG5vZGUtPm1zX3ZhbGlk X3N1YnBsYW5zID09IE5VTEwpCi0JCQlub2RlLT5tc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhl Y0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1zX3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7 CisJCWlmIChub2RlLT5hcy52YWxpZF9zdWJwbGFucyA9PSBOVUxMKQorCQkJbm9kZS0+YXMudmFs aWRfc3VicGxhbnMgPQorCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hcy5wcnVu ZV9zdGF0ZSwgZmFsc2UsIE5VTEwpOwogCiAJCS8qCiAJCSAqIEZpcnN0IHRpbWUgdGhyb3VnaDog cHVsbCB0aGUgZmlyc3QgdHVwbGUgZnJvbSBlYWNoIHZhbGlkIHN1YnBsYW4sCiAJCSAqIGFuZCBz ZXQgdXAgdGhlIGhlYXAuCiAJCSAqLwogCQlpID0gLTE7Ci0JCXdoaWxlICgoaSA9IGJtc19uZXh0 X21lbWJlcihub2RlLT5tc192YWxpZF9zdWJwbGFucywgaSkpID49IDApCisJCXdoaWxlICgoaSA9 IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9zdWJwbGFucywgaSkpID49IDApCiAJCXsK LQkJCW5vZGUtPm1zX3Nsb3RzW2ldID0gRXhlY1Byb2NOb2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0p OworCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+YXMucGxhbnNbaV0p OwogCQkJaWYgKCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQogCQkJCWJpbmFyeWhlYXBf YWRkX3Vub3JkZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKIAkJfQpAQCAt MjYxLDcgKzI2MSw3IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJICog dG8gbm90IHB1bGwgdHVwbGVzIHVudGlsIG5lY2Vzc2FyeS4pCiAJCSAqLwogCQlpID0gRGF0dW1H ZXRJbnQzMihiaW5hcnloZWFwX2ZpcnN0KG5vZGUtPm1zX2hlYXApKTsKLQkJbm9kZS0+bXNfc2xv dHNbaV0gPSBFeGVjUHJvY05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCW5vZGUtPm1zX3Ns b3RzW2ldID0gRXhlY1Byb2NOb2RlKG5vZGUtPmFzLnBsYW5zW2ldKTsKIAkJaWYgKCFUdXBJc051 bGwobm9kZS0+bXNfc2xvdHNbaV0pKQogCQkJYmluYXJ5aGVhcF9yZXBsYWNlX2ZpcnN0KG5vZGUt Pm1zX2hlYXAsIEludDMyR2V0RGF0dW0oaSkpOwogCQllbHNlCkBAIC0yNzEsNyArMjcxLDcgQEAg RXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCWlmIChiaW5hcnloZWFwX2VtcHR5 KG5vZGUtPm1zX2hlYXApKQogCXsKIAkJLyogQWxsIHRoZSBzdWJwbGFucyBhcmUgZXhoYXVzdGVk LCBhbmQgc28gaXMgdGhlIGhlYXAgKi8KLQkJcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+ cHMucHNfUmVzdWx0VHVwbGVTbG90KTsKKwkJcmVzdWx0ID0gRXhlY0NsZWFyVHVwbGUobm9kZS0+ YXMucHMucHNfUmVzdWx0VHVwbGVTbG90KTsKIAl9CiAJZWxzZQogCXsKQEAgLTM0Miw4ICszNDIs OCBAQCBFeGVjRW5kTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAkvKgogCSAq IGdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBub2RlCiAJICovCi0JbWVyZ2VwbGFucyA9IG5vZGUt Pm1lcmdlcGxhbnM7Ci0JbnBsYW5zID0gbm9kZS0+bXNfbnBsYW5zOworCW1lcmdlcGxhbnMgPSBu b2RlLT5hcy5wbGFuczsKKwlucGxhbnMgPSBub2RlLT5hcy5ucGxhbnM7CiAKIAkvKgogCSAqIHNo dXQgZG93biBlYWNoIG9mIHRoZSBzdWJzY2FucwpAQCAtMzYyLDI0ICszNjIsMjQgQEAgRXhlY1Jl U2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiAJICogd2UnZCBiZXR0ZXIg dW5zZXQgdGhlIHZhbGlkIHN1YnBsYW5zIHNvIHRoYXQgdGhleSBhcmUgcmVzZWxlY3RlZCBmb3IK IAkgKiB0aGUgbmV3IHBhcmFtZXRlciB2YWx1ZXMuCiAJICovCi0JaWYgKG5vZGUtPm1zX3BydW5l X3N0YXRlICYmCi0JCWJtc19vdmVybGFwKG5vZGUtPnBzLmNoZ1BhcmFtLAotCQkJCQlub2RlLT5t c19wcnVuZV9zdGF0ZS0+ZXhlY3BhcmFtaWRzKSkKKwlpZiAobm9kZS0+YXMucHJ1bmVfc3RhdGUg JiYKKwkJYm1zX292ZXJsYXAobm9kZS0+YXMucHMuY2hnUGFyYW0sCisJCQkJCW5vZGUtPmFzLnBy dW5lX3N0YXRlLT5leGVjcGFyYW1pZHMpKQogCXsKLQkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRf c3VicGxhbnMpOwotCQlub2RlLT5tc192YWxpZF9zdWJwbGFucyA9IE5VTEw7CisJCWJtc19mcmVl KG5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zKTsKKwkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnMgPSBO VUxMOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5tc19ucGxhbnM7IGkrKykKKwlmb3Ig KGkgPSAwOyBpIDwgbm9kZS0+YXMubnBsYW5zOyBpKyspCiAJewotCQlQbGFuU3RhdGUgICpzdWJu b2RlID0gbm9kZS0+bWVyZ2VwbGFuc1tpXTsKKwkJUGxhblN0YXRlICAqc3Vibm9kZSA9IG5vZGUt PmFzLnBsYW5zW2ldOwogCiAJCS8qCiAJCSAqIEV4ZWNSZVNjYW4gZG9lc24ndCBrbm93IGFib3V0 IG15IHN1YnBsYW5zLCBzbyBJIGhhdmUgdG8gZG8KIAkJICogY2hhbmdlZC1wYXJhbWV0ZXIgc2ln bmFsaW5nIG15c2VsZi4KIAkJICovCi0JCWlmIChub2RlLT5wcy5jaGdQYXJhbSAhPSBOVUxMKQot CQkJVXBkYXRlQ2hhbmdlZFBhcmFtU2V0KHN1Ym5vZGUsIG5vZGUtPnBzLmNoZ1BhcmFtKTsKKwkJ aWYgKG5vZGUtPmFzLnBzLmNoZ1BhcmFtICE9IE5VTEwpCisJCQlVcGRhdGVDaGFuZ2VkUGFyYW1T ZXQoc3Vibm9kZSwgbm9kZS0+YXMucHMuY2hnUGFyYW0pOwogCiAJCS8qCiAJCSAqIElmIGNoZ1Bh cmFtIG9mIHN1Ym5vZGUgaXMgbm90IG51bGwgdGhlbiBwbGFuIHdpbGwgYmUgcmUtc2Nhbm5lZCBi eQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCBjMGI4ODBlYzIzMy4uNWNiOWQ1NWYyZTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25v ZGVzL25vZGVGdW5jcy5jCkBAIC00ODU4LDE0ICs0ODU4LDE0IEBAIHBsYW5zdGF0ZV90cmVlX3dh bGtlcl9pbXBsKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkK IAl7CiAJCWNhc2UgVF9BcHBlbmQ6Ci0JCQlpZiAocGxhbnN0YXRlX3dhbGtfbWVtYmVycygoKEFw cGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFwcGVuZHBsYW5zLAotCQkJCQkJCQkJICAgKChBcHBl bmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hc19ucGxhbnMsCisJCQlpZiAocGxhbnN0YXRlX3dhbGtf bWVtYmVycygoKEFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPmFzLnBsYW5zLAorCQkJCQkJCQkJ ICAgKChBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMsCiAJCQkJCQkJCQkgICB3 YWxrZXIsIGNvbnRleHQpKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9N ZXJnZUFwcGVuZDoKLQkJCWlmIChwbGFuc3RhdGVfd2Fsa19tZW1iZXJzKCgoTWVyZ2VBcHBlbmRT dGF0ZSAqKSBwbGFuc3RhdGUpLT5tZXJnZXBsYW5zLAotCQkJCQkJCQkJICAgKChNZXJnZUFwcGVu ZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zX25wbGFucywKKwkJCWlmIChwbGFuc3RhdGVfd2Fsa19t ZW1iZXJzKCgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5wbGFucywKKwkJCQkJ CQkJCSAgICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBwbGFuc3RhdGUpLT5hcy5ucGxhbnMsCiAJCQkJ CQkJCQkgICB3YWxrZXIsIGNvbnRleHQpKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggMTUwMjg5NjEzY2QuLmMw ODhiMGIzYzcxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0x MjQ2LDEyICsxMjQ2LDEyIEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwg QXBwZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJICogY2hpbGQgcGxhbnMsIHRvIG1h a2UgY3Jvc3MtY2hlY2tpbmcgdGhlIHNvcnQgaW5mbyBlYXNpZXIuCiAJICovCiAJcGxhbiA9IG1h a2VOb2RlKEFwcGVuZCk7Ci0JcGxhbi0+cGxhbi50YXJnZXRsaXN0ID0gdGxpc3Q7Ci0JcGxhbi0+ cGxhbi5xdWFsID0gTklMOwotCXBsYW4tPnBsYW4ubGVmdHRyZWUgPSBOVUxMOwotCXBsYW4tPnBs YW4ucmlnaHR0cmVlID0gTlVMTDsKLQlwbGFuLT5hcHByZWxpZHMgPSByZWwtPnJlbGlkczsKLQlw bGFuLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hpbGRfYXBwZW5kX3Jl bGlkX3NldHM7CisJcGxhbi0+YWIucGxhbi50YXJnZXRsaXN0ID0gdGxpc3Q7CisJcGxhbi0+YWIu cGxhbi5xdWFsID0gTklMOworCXBsYW4tPmFiLnBsYW4ubGVmdHRyZWUgPSBOVUxMOworCXBsYW4t PmFiLnBsYW4ucmlnaHR0cmVlID0gTlVMTDsKKwlwbGFuLT5hYi5hcHByZWxpZHMgPSByZWwtPnJl bGlkczsKKwlwbGFuLT5hYi5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IGJlc3RfcGF0aC0+Y2hp bGRfYXBwZW5kX3JlbGlkX3NldHM7CiAKIAlpZiAocGF0aGtleXMgIT0gTklMKQogCXsKQEAgLTEy NzAsNyArMTI3MCw3IEBAIGNyZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBw ZW5kUGF0aCAqYmVzdF9wYXRoLCBpbnQgZmxhZ3MpCiAJCQkJCQkJCQkJICAmbm9kZVNvcnRPcGVy YXRvcnMsCiAJCQkJCQkJCQkJICAmbm9kZUNvbGxhdGlvbnMsCiAJCQkJCQkJCQkJICAmbm9kZU51 bGxzRmlyc3QpOwotCQl0bGlzdF93YXNfY2hhbmdlZCA9IChvcmlnX3RsaXN0X2xlbmd0aCAhPSBs aXN0X2xlbmd0aChwbGFuLT5wbGFuLnRhcmdldGxpc3QpKTsKKwkJdGxpc3Rfd2FzX2NoYW5nZWQg PSAob3JpZ190bGlzdF9sZW5ndGggIT0gbGlzdF9sZW5ndGgocGxhbi0+YWIucGxhbi50YXJnZXRs aXN0KSk7CiAJfQogCiAJLyogSWYgYXBwcm9wcmlhdGUsIGNvbnNpZGVyIGFzeW5jIGFwcGVuZCAq LwpAQCAtMTM4MCw3ICsxMzgwLDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpy b290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAl9CiAKIAkvKiBTZXQgYmVs b3cgaWYgd2UgZmluZCBxdWFscyB0aGF0IHdlIGNhbiB1c2UgdG8gcnVuLXRpbWUgcHJ1bmUgKi8K LQlwbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0gLTE7CisJcGxhbi0+YWIucGFydF9wcnVuZV9pbmRl eCA9IC0xOwogCiAJLyoKIAkgKiBJZiBhbnkgcXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1 bCB0byBwZXJmb3JtIGZ1cnRoZXIgcGFydGl0aW9uCkBAIC0xNDA1LDE2ICsxNDA1LDE2IEBAIGNy ZWF0ZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQXBwZW5kUGF0aCAqYmVzdF9wYXRo LCBpbnQgZmxhZ3MpCiAJCX0KIAogCQlpZiAocHJ1bmVxdWFsICE9IE5JTCkKLQkJCXBsYW4tPnBh cnRfcHJ1bmVfaW5kZXggPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAotCQkJ CQkJCQkJCQkJCQkJICBiZXN0X3BhdGgtPnN1YnBhdGhzLAotCQkJCQkJCQkJCQkJCQkJICBwcnVu ZXF1YWwpOworCQkJcGxhbi0+YWIucGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0aW9uX3By dW5laW5mbyhyb290LCByZWwsCisJCQkJCQkJCQkJCQkJCQkJIGJlc3RfcGF0aC0+c3VicGF0aHMs CisJCQkJCQkJCQkJCQkJCQkJIHBydW5lcXVhbCk7CiAJfQogCi0JcGxhbi0+YXBwZW5kcGxhbnMg PSBzdWJwbGFuczsKKwlwbGFuLT5hYi5zdWJwbGFucyA9IHN1YnBsYW5zOwogCXBsYW4tPm5hc3lu Y3BsYW5zID0gbmFzeW5jcGxhbnM7CiAJcGxhbi0+Zmlyc3RfcGFydGlhbF9wbGFuID0gYmVzdF9w YXRoLT5maXJzdF9wYXJ0aWFsX3BhdGg7CiAKLQljb3B5X2dlbmVyaWNfcGF0aF9pbmZvKCZwbGFu LT5wbGFuLCAoUGF0aCAqKSBiZXN0X3BhdGgpOworCWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnBs YW4tPmFiLnBsYW4sIChQYXRoICopIGJlc3RfcGF0aCk7CiAKIAkvKgogCSAqIElmIHByZXBhcmVf c29ydF9mcm9tX3BhdGhrZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0 bwpAQCAtMTQyMyw5ICsxNDIzLDkgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpy b290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAkgKi8KIAlpZiAodGxpc3Rf d2FzX2NoYW5nZWQgJiYgKGZsYWdzICYgKENQX0VYQUNUX1RMSVNUIHwgQ1BfU01BTExfVExJU1Qp KSkKIAl7Ci0JCXRsaXN0ID0gbGlzdF9jb3B5X2hlYWQocGxhbi0+cGxhbi50YXJnZXRsaXN0LCBv cmlnX3RsaXN0X2xlbmd0aCk7CisJCXRsaXN0ID0gbGlzdF9jb3B5X2hlYWQocGxhbi0+YWIucGxh bi50YXJnZXRsaXN0LCBvcmlnX3RsaXN0X2xlbmd0aCk7CiAJCXJldHVybiBpbmplY3RfcHJvamVj dGlvbl9wbGFuKChQbGFuICopIHBsYW4sIHRsaXN0LAotCQkJCQkJCQkJICBwbGFuLT5wbGFuLnBh cmFsbGVsX3NhZmUpOworCQkJCQkJCQkJICBwbGFuLT5hYi5wbGFuLnBhcmFsbGVsX3NhZmUpOwog CX0KIAllbHNlCiAJCXJldHVybiAoUGxhbiAqKSBwbGFuOwpAQCAtMTQ0Myw3ICsxNDQzLDcgQEAg Y3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBh dGggKmJlc3RfcGF0aCwKIAkJCQkJCSBpbnQgZmxhZ3MpCiB7CiAJTWVyZ2VBcHBlbmQgKm5vZGUg PSBtYWtlTm9kZShNZXJnZUFwcGVuZCk7Ci0JUGxhbgkgICAqcGxhbiA9ICZub2RlLT5wbGFuOwor CVBsYW4JICAgKnBsYW4gPSAmbm9kZS0+YWIucGxhbjsKIAlMaXN0CSAgICp0bGlzdCA9IGJ1aWxk X3BhdGhfdGxpc3Qocm9vdCwgJmJlc3RfcGF0aC0+cGF0aCk7CiAJaW50CQkJb3JpZ190bGlzdF9s ZW5ndGggPSBsaXN0X2xlbmd0aCh0bGlzdCk7CiAJYm9vbAkJdGxpc3Rfd2FzX2NoYW5nZWQ7CkBA IC0xNDYzLDggKzE0NjMsOCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8g KnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPnF1YWwgPSBOSUw7CiAJ cGxhbi0+bGVmdHRyZWUgPSBOVUxMOwogCXBsYW4tPnJpZ2h0dHJlZSA9IE5VTEw7Ci0Jbm9kZS0+ YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7Ci0Jbm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMg PSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOworCW5vZGUtPmFiLmFwcHJlbGlk cyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmFiLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVz dF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBzb3J0 IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgpA QCAtMTU3MCw3ICsxNTcwLDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZv ICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAl9CiAKIAkvKiBTZXQgYmVsb3cg aWYgd2UgZmluZCBxdWFscyB0aGF0IHdlIGNhbiB1c2UgdG8gcnVuLXRpbWUgcHJ1bmUgKi8KLQlu b2RlLT5wYXJ0X3BydW5lX2luZGV4ID0gLTE7CisJbm9kZS0+YWIucGFydF9wcnVuZV9pbmRleCA9 IC0xOwogCiAJLyoKIAkgKiBJZiBhbnkgcXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0 byBwZXJmb3JtIGZ1cnRoZXIgcGFydGl0aW9uCkBAIC0xNTg3LDEyICsxNTg3LDEyIEBAIGNyZWF0 ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBlbmRQYXRoICpi ZXN0X3BhdGgsCiAJCUFzc2VydChiZXN0X3BhdGgtPnBhdGgucGFyYW1faW5mbyA9PSBOVUxMKTsK IAogCQlpZiAocHJ1bmVxdWFsICE9IE5JTCkKLQkJCW5vZGUtPnBhcnRfcHJ1bmVfaW5kZXggPSBt YWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcmVsLAotCQkJCQkJCQkJCQkJCQkJICBiZXN0 X3BhdGgtPnN1YnBhdGhzLAotCQkJCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwpOworCQkJbm9kZS0+ YWIucGFydF9wcnVuZV9pbmRleCA9IG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhyb290LCByZWws CisJCQkJCQkJCQkJCQkJCQkJIGJlc3RfcGF0aC0+c3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJ IHBydW5lcXVhbCk7CiAJfQogCi0Jbm9kZS0+bWVyZ2VwbGFucyA9IHN1YnBsYW5zOworCW5vZGUt PmFiLnN1YnBsYW5zID0gc3VicGxhbnM7CiAKIAkvKgogCSAqIElmIHByZXBhcmVfc29ydF9mcm9t X3BhdGhrZXlzIGFkZGVkIHNvcnQgY29sdW1ucywgYnV0IHdlIHdlcmUgdG9sZCB0bwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IGZmMGU4NzVmMmEyLi5hZjdjZWNjYjhhZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMTg4MSwxMCArMTg4MSwxMCBA QCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogY2hlY2sgcXVh bHMuICBJZiBpdCdzIGdvdCBleGFjdGx5IG9uZSBjaGlsZCBwbGFuLCB0aGVuIGl0J3Mgbm90IGRv aW5nCiAJICogYW55dGhpbmcgdXNlZnVsIGF0IGFsbCwgYW5kIHdlIGNhbiBzdHJpcCBpdCBvdXQu CiAJICovCi0JQXNzZXJ0KGFwbGFuLT5wbGFuLnF1YWwgPT0gTklMKTsKKwlBc3NlcnQoYXBsYW4t PmFiLnBsYW4ucXVhbCA9PSBOSUwpOwogCiAJLyogRmlyc3QsIHdlIGdvdHRhIHJlY3Vyc2Ugb24g dGhlIGNoaWxkcmVuICovCi0JZm9yZWFjaChsLCBhcGxhbi0+YXBwZW5kcGxhbnMpCisJZm9yZWFj aChsLCBhcGxhbi0+YWIuc3VicGxhbnMpCiAJewogCQlsZmlyc3QobCkgPSBzZXRfcGxhbl9yZWZz KHJvb3QsIChQbGFuICopIGxmaXJzdChsKSwgcnRvZmZzZXQpOwogCX0KQEAgLTE4OTcsMTEgKzE4 OTcsMTEgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIHBs YW4gbWF5IGV4ZWN1dGUgdGhlIG5vbi1wYXJhbGxlbCBhd2FyZSBjaGlsZCBtdWx0aXBsZSB0aW1l cy4gIChJZiB5b3UKIAkgKiBjaGFuZ2UgdGhlc2UgcnVsZXMsIHVwZGF0ZSBjcmVhdGVfYXBwZW5k X3BhdGggdG8gbWF0Y2guKQogCSAqLwotCWlmIChsaXN0X2xlbmd0aChhcGxhbi0+YXBwZW5kcGxh bnMpID09IDEpCisJaWYgKGxpc3RfbGVuZ3RoKGFwbGFuLT5hYi5zdWJwbGFucykgPT0gMSkKIAl7 Ci0JCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5kcGxhbnMpOwor CQlQbGFuCSAgICpwID0gKFBsYW4gKikgbGluaXRpYWwoYXBsYW4tPmFiLnN1YnBsYW5zKTsKIAot CQlpZiAocC0+cGFyYWxsZWxfYXdhcmUgPT0gYXBsYW4tPnBsYW4ucGFyYWxsZWxfYXdhcmUpCisJ CWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+YWIucGxhbi5wYXJhbGxlbF9hd2FyZSkK IAkJewogCQkJUGxhbgkgICAqcmVzdWx0OwogCkBAIC0xOTA5LDcgKzE5MDksNyBAQCBzZXRfYXBw ZW5kX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkJCS8qIFJlbWVtYmVyIHRoYXQg d2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KIAkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9i LCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAotCQkJCQkJCSAgIG9mZnNldF9yZWxpZF9zZXQo YXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKwkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0 KGFwbGFuLT5hYi5hcHByZWxpZHMsIHJ0b2Zmc2V0KSk7CiAKIAkJCXJldHVybiByZXN1bHQ7CiAJ CX0KQEAgLTE5MjIsMTkgKzE5MjIsMTkgQEAgc2V0X2FwcGVuZF9yZWZlcmVuY2VzKFBsYW5uZXJJ bmZvICpyb290LAogCSAqLwogCXNldF9kdW1teV90bGlzdF9yZWZlcmVuY2VzKChQbGFuICopIGFw bGFuLCBydG9mZnNldCk7CiAKLQlhcGxhbi0+YXBwcmVsaWRzID0gb2Zmc2V0X3JlbGlkX3NldChh cGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCk7CisJYXBsYW4tPmFiLmFwcHJlbGlkcyA9IG9mZnNl dF9yZWxpZF9zZXQoYXBsYW4tPmFiLmFwcHJlbGlkcywgcnRvZmZzZXQpOwogCiAJLyoKIAkgKiBB ZGQgUGFydGl0aW9uUHJ1bmVJbmZvLCBpZiBhbnksIHRvIFBsYW5uZXJHbG9iYWwgYW5kIHVwZGF0 ZSB0aGUgaW5kZXguCiAJICogQWxzbyB1cGRhdGUgdGhlIFJUIGluZGV4ZXMgcHJlc2VudCBpbiBp dCB0byBhZGQgdGhlIG9mZnNldC4KIAkgKi8KLQlpZiAoYXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXgg Pj0gMCkKLQkJYXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXggPQotCQkJcmVnaXN0ZXJfcGFydHBydW5l aW5mbyhyb290LCBhcGxhbi0+cGFydF9wcnVuZV9pbmRleCwgcnRvZmZzZXQpOworCWlmIChhcGxh bi0+YWIucGFydF9wcnVuZV9pbmRleCA+PSAwKQorCQlhcGxhbi0+YWIucGFydF9wcnVuZV9pbmRl eCA9CisJCQlyZWdpc3Rlcl9wYXJ0cHJ1bmVpbmZvKHJvb3QsIGFwbGFuLT5hYi5wYXJ0X3BydW5l X2luZGV4LCBydG9mZnNldCk7CiAKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHJlY3Vyc2UgdG8gbGVm dHRyZWUgb3IgcmlnaHR0cmVlIC4uLiAqLwotCUFzc2VydChhcGxhbi0+cGxhbi5sZWZ0dHJlZSA9 PSBOVUxMKTsKLQlBc3NlcnQoYXBsYW4tPnBsYW4ucmlnaHR0cmVlID09IE5VTEwpOworCUFzc2Vy dChhcGxhbi0+YWIucGxhbi5sZWZ0dHJlZSA9PSBOVUxMKTsKKwlBc3NlcnQoYXBsYW4tPmFiLnBs YW4ucmlnaHR0cmVlID09IE5VTEwpOwogCiAJcmV0dXJuIChQbGFuICopIGFwbGFuOwogfQpAQCAt MTk1OCwxMCArMTk1OCwxMCBAQCBzZXRfbWVyZ2VhcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVySW5m byAqcm9vdCwKIAkgKiBvciBjaGVjayBxdWFscy4gIElmIGl0J3MgZ290IGV4YWN0bHkgb25lIGNo aWxkIHBsYW4sIHRoZW4gaXQncyBub3QKIAkgKiBkb2luZyBhbnl0aGluZyB1c2VmdWwgYXQgYWxs LCBhbmQgd2UgY2FuIHN0cmlwIGl0IG91dC4KIAkgKi8KLQlBc3NlcnQobXBsYW4tPnBsYW4ucXVh bCA9PSBOSUwpOworCUFzc2VydChtcGxhbi0+YWIucGxhbi5xdWFsID09IE5JTCk7CiAKIAkvKiBG aXJzdCwgd2UgZ290dGEgcmVjdXJzZSBvbiB0aGUgY2hpbGRyZW4gKi8KLQlmb3JlYWNoKGwsIG1w bGFuLT5tZXJnZXBsYW5zKQorCWZvcmVhY2gobCwgbXBsYW4tPmFiLnN1YnBsYW5zKQogCXsKIAkJ bGZpcnN0KGwpID0gc2V0X3BsYW5fcmVmcyhyb290LCAoUGxhbiAqKSBsZmlyc3QobCksIHJ0b2Zm c2V0KTsKIAl9CkBAIC0xOTc1LDExICsxOTc1LDExIEBAIHNldF9tZXJnZWFwcGVuZF9yZWZlcmVu Y2VzKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG11bHRpcGxlIHRpbWVzLiAgKElmIHlvdSBjaGFu Z2UgdGhlc2UgcnVsZXMsIHVwZGF0ZQogCSAqIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aCB0byBt YXRjaC4pCiAJICovCi0JaWYgKGxpc3RfbGVuZ3RoKG1wbGFuLT5tZXJnZXBsYW5zKSA9PSAxKQor CWlmIChsaXN0X2xlbmd0aChtcGxhbi0+YWIuc3VicGxhbnMpID09IDEpCiAJewotCQlQbGFuCSAg ICpwID0gKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPm1lcmdlcGxhbnMpOworCQlQbGFuCSAgICpw ID0gKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPmFiLnN1YnBsYW5zKTsKIAotCQlpZiAocC0+cGFy YWxsZWxfYXdhcmUgPT0gbXBsYW4tPnBsYW4ucGFyYWxsZWxfYXdhcmUpCisJCWlmIChwLT5wYXJh bGxlbF9hd2FyZSA9PSBtcGxhbi0+YWIucGxhbi5wYXJhbGxlbF9hd2FyZSkKIAkJewogCQkJUGxh bgkgICAqcmVzdWx0OwogCkBAIC0xOTg3LDcgKzE5ODcsNyBAQCBzZXRfbWVyZ2VhcHBlbmRfcmVm ZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1v dmVkIGEgTWVyZ2VBcHBlbmQgKi8KIAkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBw LT5wbGFuX25vZGVfaWQsIFRfTWVyZ2VBcHBlbmQsCi0JCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3Nl dChtcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCkpOworCQkJCQkJCSAgIG9mZnNldF9yZWxpZF9z ZXQobXBsYW4tPmFiLmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKIAogCQkJcmV0dXJuIHJlc3VsdDsK IAkJfQpAQCAtMjAwMCwxOSArMjAwMCwxOSBAQCBzZXRfbWVyZ2VhcHBlbmRfcmVmZXJlbmNlcyhQ bGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlzZXRfZHVtbXlfdGxpc3RfcmVmZXJlbmNlcygoUGxh biAqKSBtcGxhbiwgcnRvZmZzZXQpOwogCi0JbXBsYW4tPmFwcHJlbGlkcyA9IG9mZnNldF9yZWxp ZF9zZXQobXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpOworCW1wbGFuLT5hYi5hcHByZWxpZHMg PSBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hYi5hcHByZWxpZHMsIHJ0b2Zmc2V0KTsKIAogCS8q CiAJICogQWRkIFBhcnRpdGlvblBydW5lSW5mbywgaWYgYW55LCB0byBQbGFubmVyR2xvYmFsIGFu ZCB1cGRhdGUgdGhlIGluZGV4LgogCSAqIEFsc28gdXBkYXRlIHRoZSBSVCBpbmRleGVzIHByZXNl bnQgaW4gaXQgdG8gYWRkIHRoZSBvZmZzZXQuCiAJICovCi0JaWYgKG1wbGFuLT5wYXJ0X3BydW5l X2luZGV4ID49IDApCi0JCW1wbGFuLT5wYXJ0X3BydW5lX2luZGV4ID0KLQkJCXJlZ2lzdGVyX3Bh cnRwcnVuZWluZm8ocm9vdCwgbXBsYW4tPnBhcnRfcHJ1bmVfaW5kZXgsIHJ0b2Zmc2V0KTsKKwlp ZiAobXBsYW4tPmFiLnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKKwkJbXBsYW4tPmFiLnBhcnRfcHJ1 bmVfaW5kZXggPQorCQkJcmVnaXN0ZXJfcGFydHBydW5laW5mbyhyb290LCBtcGxhbi0+YWIucGFy dF9wcnVuZV9pbmRleCwgcnRvZmZzZXQpOwogCiAJLyogV2UgZG9uJ3QgbmVlZCB0byByZWN1cnNl IHRvIGxlZnR0cmVlIG9yIHJpZ2h0dHJlZSAuLi4gKi8KLQlBc3NlcnQobXBsYW4tPnBsYW4ubGVm dHRyZWUgPT0gTlVMTCk7Ci0JQXNzZXJ0KG1wbGFuLT5wbGFuLnJpZ2h0dHJlZSA9PSBOVUxMKTsK KwlBc3NlcnQobXBsYW4tPmFiLnBsYW4ubGVmdHRyZWUgPT0gTlVMTCk7CisJQXNzZXJ0KG1wbGFu LT5hYi5wbGFuLnJpZ2h0dHJlZSA9PSBOVUxMKTsKIAogCXJldHVybiAoUGxhbiAqKSBtcGxhbjsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc3Vic2VsZWN0LmMKaW5kZXggY2NlYzFlYWE3ZmUu LmUyMWViMGY4NzI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJz ZWxlY3QuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYwpAQCAt MjkwNCw3ICsyOTA0LDcgQEAgZmluYWxpemVfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAq cGxhbiwKIAogCQljYXNlIFRfQXBwZW5kOgogCQkJewotCQkJCWZvcmVhY2gobCwgKChBcHBlbmQg KikgcGxhbiktPmFwcGVuZHBsYW5zKQorCQkJCWZvcmVhY2gobCwgKChBcHBlbmQgKikgcGxhbikt PmFiLnN1YnBsYW5zKQogCQkJCXsKIAkJCQkJY29udGV4dC5wYXJhbWlkcyA9CiAJCQkJCQlibXNf YWRkX21lbWJlcnMoY29udGV4dC5wYXJhbWlkcywKQEAgLTI5MTksNyArMjkxOSw3IEBAIGZpbmFs aXplX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sCiAKIAkJY2FzZSBUX01lcmdl QXBwZW5kOgogCQkJewotCQkJCWZvcmVhY2gobCwgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+bWVy Z2VwbGFucykKKwkJCQlmb3JlYWNoKGwsICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFiLnN1YnBs YW5zKQogCQkJCXsKIAkJCQkJY29udGV4dC5wYXJhbWlkcyA9CiAJCQkJCQlibXNfYWRkX21lbWJl cnMoY29udGV4dC5wYXJhbWlkcywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAzNTA4 M2ZjYzczMy4uYTZlNzgyNmQ4NTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTU1 MjIsOSArNTUyMiw5IEBAIHNldF9kZXBhcnNlX3BsYW4oZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMs IFBsYW4gKnBsYW4pCiAJICogbmF0dXJhbCBjaG9pY2UuCiAJICovCiAJaWYgKElzQShwbGFuLCBB cHBlbmQpKQotCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChBcHBlbmQgKikgcGxhbikt PmFwcGVuZHBsYW5zKTsKKwkJZHBucy0+b3V0ZXJfcGxhbiA9IGxpbml0aWFsKCgoQXBwZW5kICop IHBsYW4pLT5hYi5zdWJwbGFucyk7CiAJZWxzZSBpZiAoSXNBKHBsYW4sIE1lcmdlQXBwZW5kKSkK LQkJZHBucy0+b3V0ZXJfcGxhbiA9IGxpbml0aWFsKCgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPm1l cmdlcGxhbnMpOworCQlkcG5zLT5vdXRlcl9wbGFuID0gbGluaXRpYWwoKChNZXJnZUFwcGVuZCAq KSBwbGFuKS0+YWIuc3VicGxhbnMpOwogCWVsc2UKIAkJZHBucy0+b3V0ZXJfcGxhbiA9IG91dGVy UGxhbihwbGFuKTsKIApAQCAtODUwNiwxMCArODUwNiwxMCBAQCByZXNvbHZlX3NwZWNpYWxfdmFy bm8oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0LAogCiAJCWlmIChJc0EoZHBu cy0+cGxhbiwgQXBwZW5kKSkKIAkJCWNvbnRleHQtPmFwcGVuZHBhcmVudHMgPSBibXNfdW5pb24o Y29udGV4dC0+YXBwZW5kcGFyZW50cywKLQkJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgZHBucy0+ cGxhbiktPmFwcHJlbGlkcyk7CisJCQkJCQkJCQkJCSAgICgoQXBwZW5kICopIGRwbnMtPnBsYW4p LT5hYi5hcHByZWxpZHMpOwogCQllbHNlIGlmIChJc0EoZHBucy0+cGxhbiwgTWVyZ2VBcHBlbmQp KQogCQkJY29udGV4dC0+YXBwZW5kcGFyZW50cyA9IGJtc191bmlvbihjb250ZXh0LT5hcHBlbmRw YXJlbnRzLAotCQkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIGRwbnMtPnBsYW4pLT5hcHBy ZWxpZHMpOworCQkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIGRwbnMtPnBsYW4pLT5hYi5h cHByZWxpZHMpOwogCiAJCXB1c2hfY2hpbGRfcGxhbihkcG5zLCBkcG5zLT5vdXRlcl9wbGFuLCAm c2F2ZV9kcG5zKTsKIAkJcmVzb2x2ZV9zcGVjaWFsX3Zhcm5vKChOb2RlICopIHRsZS0+ZXhwciwg Y29udGV4dCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggM2VjYWU3NTUyZmMuLjQyM2U1ZWNmYTMz IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTUxMCw2ICsxNTEwLDM5IEBAIHR5cGVkZWYgc3Ry dWN0IE1vZGlmeVRhYmxlU3RhdGUKIAlMaXN0CSAgICptdF9tZXJnZUpvaW5Db25kaXRpb25zOwog fSBNb2RpZnlUYWJsZVN0YXRlOwogCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkgQXBwZW5kQmFz ZVN0YXRlIGluZm9ybWF0aW9uCisgKgorICoJCUNvbW1vbiBiYXNlIGZvciBBcHBlbmRTdGF0ZSBh bmQgTWVyZ2VBcHBlbmRTdGF0ZS4KKyAqCQlDb250YWlucyBmaWVsZHMgc2hhcmVkIGJ5IGJvdGgg bm9kZSB0eXBlczogdGhlIGFycmF5IG9mIHN1YnBsYW4KKyAqCQlzdGF0ZXMsIGFzeW5jaHJvbm91 cyBleGVjdXRpb24gaW5mcmFzdHJ1Y3R1cmUsIGFuZCBwYXJ0aXRpb24KKyAqCQlwcnVuaW5nIHN0 YXRlLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit0eXBlZGVmIHN0cnVjdCBBcHBlbmRCYXNl U3RhdGUKK3sKKwlwZ19ub2RlX2F0dHIoYWJzdHJhY3QpCisKKwlQbGFuU3RhdGUJcHM7CQkJCS8q IGl0cyBmaXJzdCBmaWVsZCBpcyBOb2RlVGFnICovCisJUGxhblN0YXRlICoqcGxhbnM7CQkJLyog YXJyYXkgb2YgUGxhblN0YXRlcyBmb3IgbXkgaW5wdXRzICovCisJaW50CQkJbnBsYW5zOworCisJ LyogQXN5bmNocm9ub3VzIGV4ZWN1dGlvbiBzdGF0ZSAqLworCUJpdG1hcHNldCAgKmFzeW5jcGxh bnM7CQkvKiBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAqLworCWludAkJCW5hc3luY3BsYW5z OwkvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFucyAqLworCUFzeW5jUmVxdWVzdCAqKmFzeW5jcmVx dWVzdHM7CS8qIGFycmF5IG9mIEFzeW5jUmVxdWVzdHMgKi8KKwlUdXBsZVRhYmxlU2xvdCAqKmFz eW5jcmVzdWx0czsJLyogdW5yZXR1cm5lZCByZXN1bHRzIG9mIGFzeW5jIHBsYW5zICovCisJQml0 bWFwc2V0ICAqbmVlZHJlcXVlc3Q7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBuZWVkaW5nIGEgbmV3 IHJlcXVlc3QgKi8KKwlzdHJ1Y3QgV2FpdEV2ZW50U2V0ICpldmVudHNldDsJLyogV2FpdEV2ZW50 U2V0IHVzZWQgdG8gY29uZmlndXJlIGZpbGUKKwkJCQkJCQkJCSAqIGRlc2NyaXB0b3Igd2FpdCBl dmVudHMgKi8KKworCS8qIFBhcnRpdGlvbiBwcnVuaW5nIHN0YXRlICovCisJc3RydWN0IFBhcnRp dGlvblBydW5lU3RhdGUgKnBydW5lX3N0YXRlOworCWJvb2wJCXZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQ7CS8qIGlzIHZhbGlkX3N1YnBsYW5zIHZhbGlkPyAqLworCUJpdG1hcHNldCAgKnZhbGlk X3N1YnBsYW5zOworCUJpdG1hcHNldCAgKnZhbGlkX2FzeW5jcGxhbnM7CS8qIHZhbGlkIGFzeW5j aHJvbm91cyBwbGFucyBpbmRleGVzICovCit9IEFwcGVuZEJhc2VTdGF0ZTsKKwogLyogLS0tLS0t LS0tLS0tLS0tLQogICoJIEFwcGVuZFN0YXRlIGluZm9ybWF0aW9uCiAgKgpAQCAtMTUzMSwzMCAr MTU2NCwyMSBAQCBzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZTsKIAogc3RydWN0IEFwcGVuZFN0 YXRlCiB7Ci0JUGxhblN0YXRlCXBzOwkJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAq LwotCVBsYW5TdGF0ZSAqKmFwcGVuZHBsYW5zOwkvKiBhcnJheSBvZiBQbGFuU3RhdGVzIGZvciBt eSBpbnB1dHMgKi8KLQlpbnQJCQlhc19ucGxhbnM7CisJQXBwZW5kQmFzZVN0YXRlIGFzOwkJCS8q IGl0cyBmaXJzdCBmaWVsZCBpcyBOb2RlVGFnICovCisKIAlpbnQJCQlhc193aGljaHBsYW47CiAJ Ym9vbAkJYXNfYmVndW47CQkvKiBmYWxzZSBtZWFucyBuZWVkIHRvIGluaXRpYWxpemUgKi8KLQlC aXRtYXBzZXQgICphc19hc3luY3BsYW5zOwkvKiBhc3luY2hyb25vdXMgcGxhbnMgaW5kZXhlcyAq LwotCWludAkJCWFzX25hc3luY3BsYW5zOyAvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFucyAqLwot CUFzeW5jUmVxdWVzdCAqKmFzX2FzeW5jcmVxdWVzdHM7CS8qIGFycmF5IG9mIEFzeW5jUmVxdWVz dHMgKi8KLQlUdXBsZVRhYmxlU2xvdCAqKmFzX2FzeW5jcmVzdWx0czsJLyogdW5yZXR1cm5lZCBy ZXN1bHRzIG9mIGFzeW5jIHBsYW5zICovCi0JaW50CQkJYXNfbmFzeW5jcmVzdWx0czsJLyogIyBv ZiB2YWxpZCBlbnRyaWVzIGluIGFzX2FzeW5jcmVzdWx0cyAqLworCWludAkJCWFzX25hc3luY3Jl c3VsdHM7CS8qICMgb2YgdmFsaWQgZW50cmllcyBpbiBhc3luY3Jlc3VsdHMgKi8KIAlib29sCQlh c19zeW5jZG9uZTsJLyogdHJ1ZSBpZiBhbGwgc3luY2hyb25vdXMgcGxhbnMgZG9uZSBpbgogCQkJ CQkJCQkgKiBhc3luY2hyb25vdXMgbW9kZSwgZWxzZSBmYWxzZSAqLwogCWludAkJCWFzX25hc3lu Y3JlbWFpbjsJLyogIyBvZiByZW1haW5pbmcgYXN5bmNocm9ub3VzIHBsYW5zICovCi0JQml0bWFw c2V0ICAqYXNfbmVlZHJlcXVlc3Q7IC8qIGFzeW5jaHJvbm91cyBwbGFucyBuZWVkaW5nIGEgbmV3 IHJlcXVlc3QgKi8KLQlzdHJ1Y3QgV2FpdEV2ZW50U2V0ICphc19ldmVudHNldDsJLyogV2FpdEV2 ZW50U2V0IHVzZWQgdG8gY29uZmlndXJlIGZpbGUKLQkJCQkJCQkJCQkgKiBkZXNjcmlwdG9yIHdh aXQgZXZlbnRzICovCi0JaW50CQkJYXNfZmlyc3RfcGFydGlhbF9wbGFuOwkvKiBJbmRleCBvZiAn YXBwZW5kcGxhbnMnIGNvbnRhaW5pbmcKLQkJCQkJCQkJCQkgKiB0aGUgZmlyc3QgcGFydGlhbCBw bGFuICovCisJaW50CQkJYXNfZmlyc3RfcGFydGlhbF9wbGFuOwkvKiBJbmRleCBvZiAnYXMucGxh bnMnIGNvbnRhaW5pbmcgdGhlCisJCQkJCQkJCQkJICogZmlyc3QgcGFydGlhbCBwbGFuICovCisK KwkvKiBQYXJhbGxlbCBhcHBlbmQgc3BlY2lmaWMgKi8KIAlQYXJhbGxlbEFwcGVuZFN0YXRlICph c19wc3RhdGU7IC8qIHBhcmFsbGVsIGNvb3JkaW5hdGlvbiBpbmZvICovCiAJU2l6ZQkJcHN0YXRl X2xlbjsJCS8qIHNpemUgb2YgcGFyYWxsZWwgY29vcmRpbmF0aW9uIGluZm8gKi8KLQlzdHJ1Y3Qg UGFydGl0aW9uUHJ1bmVTdGF0ZSAqYXNfcHJ1bmVfc3RhdGU7Ci0JYm9vbAkJYXNfdmFsaWRfc3Vi cGxhbnNfaWRlbnRpZmllZDsJLyogaXMgYXNfdmFsaWRfc3VicGxhbnMgdmFsaWQ/ICovCi0JQml0 bWFwc2V0ICAqYXNfdmFsaWRfc3VicGxhbnM7Ci0JQml0bWFwc2V0ICAqYXNfdmFsaWRfYXN5bmNw bGFuczsJLyogdmFsaWQgYXN5bmNocm9ub3VzIHBsYW5zIGluZGV4ZXMgKi8KKwogCWJvb2wJCSgq Y2hvb3NlX25leHRfc3VicGxhbikgKEFwcGVuZFN0YXRlICopOwogfTsKIApAQCAtMTU3NSwxNiAr MTU5OSwxMyBAQCBzdHJ1Y3QgQXBwZW5kU3RhdGUKICAqLwogdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VB cHBlbmRTdGF0ZQogewotCVBsYW5TdGF0ZQlwczsJCQkJLyogaXRzIGZpcnN0IGZpZWxkIGlzIE5v ZGVUYWcgKi8KLQlQbGFuU3RhdGUgKiptZXJnZXBsYW5zOwkJLyogYXJyYXkgb2YgUGxhblN0YXRl cyBmb3IgbXkgaW5wdXRzICovCi0JaW50CQkJbXNfbnBsYW5zOworCUFwcGVuZEJhc2VTdGF0ZSBh czsJCQkvKiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLworCiAJaW50CQkJbXNfbmtleXM7 CiAJU29ydFN1cHBvcnQgbXNfc29ydGtleXM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ua2V5cyAq LwogCVR1cGxlVGFibGVTbG90ICoqbXNfc2xvdHM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ucGxh bnMgKi8KIAlzdHJ1Y3QgYmluYXJ5aGVhcCAqbXNfaGVhcDsgLyogYmluYXJ5IGhlYXAgb2Ygc2xv dCBpbmRpY2VzICovCiAJYm9vbAkJbXNfaW5pdGlhbGl6ZWQ7IC8qIGFyZSBzdWJwbGFucyBzdGFy dGVkPyAqLwotCXN0cnVjdCBQYXJ0aXRpb25QcnVuZVN0YXRlICptc19wcnVuZV9zdGF0ZTsKLQlC aXRtYXBzZXQgICptc192YWxpZF9zdWJwbGFuczsKIH0gTWVyZ2VBcHBlbmRTdGF0ZTsKIAogLyog LS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCAxNGExZGZlZDJiOS4uMDcy YjZhYTBhOTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0zOTEsMzggKzM5MSw0OCBAQCB0eXBl ZGVmIHN0cnVjdCBNb2RpZnlUYWJsZQogc3RydWN0IFBhcnRpdGlvblBydW5lSW5mbzsJCS8qIGZv cndhcmQgcmVmZXJlbmNlIHRvIHN0cnVjdCBiZWxvdyAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0t Ci0gKgkgQXBwZW5kIG5vZGUgLQotICoJCUdlbmVyYXRlIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRo ZSByZXN1bHRzIG9mIHN1Yi1wbGFucy4KKyAqCSBBcHBlbmRCYXNlIG5vZGUgLQorICoJCUNvbW1v biBiYXNlIGZvciBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIHBsYW4gbm9kZXMuCisgKgkJQ29udGFp bnMgZmllbGRzIHNoYXJlZCBieSBib3RoIG5vZGUgdHlwZXM6IHRoZSBsaXN0IG9mIHN1YnBsYW5z LAorICoJCWFwcGVuZHJlbCBpZGVudGlmaWVycywgYW5kIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVu aW5nIGluZm8uCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8KLXR5cGVkZWYgc3RydWN0IEFwcGVu ZAordHlwZWRlZiBzdHJ1Y3QgQXBwZW5kQmFzZQogewotCVBsYW4JCXBsYW47CisJcGdfbm9kZV9h dHRyKGFic3RyYWN0KQogCi0JLyogUlRJcyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMg bm9kZSAqLwotCUJpdG1hcHNldCAgKmFwcHJlbGlkczsKKwlQbGFuCQlwbGFuOwkJCS8qIGl0cyBm aXJzdCBmaWVsZCBpcyBOb2RlVGFnICovCisJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwkJLyogUlRJ cyBvZiBhcHBlbmRyZWwocykgZm9ybWVkIGJ5IHRoaXMgbm9kZSAqLworCUxpc3QJICAgKmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzOwkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscworCQkJCQkJ CQkJCQkgKiBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG5vZGUgKi8KKwlMaXN0CSAgICpzdWJwbGFu czsJCS8qIExpc3Qgb2YgUGxhbnMgKGZvcm1lcmx5CisJCQkJCQkJCSAqIGFwcGVuZHBsYW5zL21l cmdlcGxhbnMpICovCiAKLQkvKiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0 ZWQgaW50byB0aGlzIG5vZGUgKi8KLQlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsK KwkvKgorCSAqIEluZGV4IGludG8gUGxhbm5lZFN0bXQucGFydFBydW5lSW5mb3MgYW5kIHBhcmFs bGVsIGxpc3RzIGluIEVTdGF0ZToKKwkgKiBlc19wYXJ0X3BydW5lX3N0YXRlcyBhbmQgZXNfcGFy dF9wcnVuZV9yZXN1bHRzLiBTZXQgdG8gLTEgaWYgbm8KKwkgKiBydW4tdGltZSBwcnVuaW5nIGlz IHVzZWQuCisJICovCisJaW50CQkJcGFydF9wcnVuZV9pbmRleDsKK30gQXBwZW5kQmFzZTsKIAot CS8qIHBsYW5zIHRvIHJ1biAqLwotCUxpc3QJICAgKmFwcGVuZHBsYW5zOworLyogLS0tLS0tLS0t LS0tLS0tLQorICoJIEFwcGVuZCBub2RlIC0KKyAqCQlHZW5lcmF0ZSB0aGUgY29uY2F0ZW5hdGlv biBvZiB0aGUgcmVzdWx0cyBvZiBzdWItcGxhbnMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8K K3R5cGVkZWYgc3RydWN0IEFwcGVuZAoreworCUFwcGVuZEJhc2UJYWI7CQkJCS8qIGl0cyBmaXJz dCBmaWVsZCBpcyBOb2RlVGFnICovCiAKIAkvKiAjIG9mIGFzeW5jaHJvbm91cyBwbGFucyAqLwog CWludAkJCW5hc3luY3BsYW5zOwogCiAJLyoKLQkgKiBBbGwgJ2FwcGVuZHBsYW5zJyBwcmVjZWRp bmcgdGhpcyBpbmRleCBhcmUgbm9uLXBhcnRpYWwgcGxhbnMuIEFsbAotCSAqICdhcHBlbmRwbGFu cycgZnJvbSB0aGlzIGluZGV4IG9ud2FyZHMgYXJlIHBhcnRpYWwgcGxhbnMuCisJICogQWxsICdz dWJwbGFucycgcHJlY2VkaW5nIHRoaXMgaW5kZXggYXJlIG5vbi1wYXJ0aWFsIHBsYW5zLiBBbGwK KwkgKiAnc3VicGxhbnMnIGZyb20gdGhpcyBpbmRleCBvbndhcmRzIGFyZSBwYXJ0aWFsIHBsYW5z LgogCSAqLwogCWludAkJCWZpcnN0X3BhcnRpYWxfcGxhbjsKLQotCS8qCi0JICogSW5kZXggaW50 byBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJbmZvcyBhbmQgcGFyYWxsZWwgbGlzdHMgaW4gRVN0YXRl OgotCSAqIGVzX3BhcnRfcHJ1bmVfc3RhdGVzIGFuZCBlc19wYXJ0X3BydW5lX3Jlc3VsdHMuIFNl dCB0byAtMSBpZiBubwotCSAqIHJ1bi10aW1lIHBydW5pbmcgaXMgdXNlZC4KLQkgKi8KLQlpbnQJ CQlwYXJ0X3BydW5lX2luZGV4OwogfSBBcHBlbmQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAg LTQzMiwxNiArNDQyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kCiAgKi8KIHR5cGVkZWYgc3Ry dWN0IE1lcmdlQXBwZW5kCiB7Ci0JUGxhbgkJcGxhbjsKLQotCS8qIFJUSXMgb2YgYXBwZW5kcmVs KHMpIGZvcm1lZCBieSB0aGlzIG5vZGUgKi8KLQlCaXRtYXBzZXQgICphcHByZWxpZHM7Ci0KLQkv KiBzZXRzIG9mIFJUSXMgb2YgYXBwZW5kcmVscyBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG5vZGUg Ki8KLQlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKLQotCS8qIHBsYW5zIHRvIHJ1 biAqLwotCUxpc3QJICAgKm1lcmdlcGxhbnM7CisJQXBwZW5kQmFzZQlhYjsJCQkJLyogaXRzIGZp cnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KIAogCS8qIHRoZXNlIGZpZWxkcyBhcmUganVzdCBsaWtl IHRoZSBzb3J0LWtleSBpbmZvIGluIHN0cnVjdCBTb3J0OiAqLwogCkBAIC00NTksMTMgKzQ2MCw2 IEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kCiAKIAkvKiBOVUxMUyBGSVJTVC9MQVNUIGRp cmVjdGlvbnMgKi8KIAlib29sCSAgICpudWxsc0ZpcnN0IHBnX25vZGVfYXR0cihhcnJheV9zaXpl KG51bUNvbHMpKTsKLQotCS8qCi0JICogSW5kZXggaW50byBQbGFubmVkU3RtdC5wYXJ0UHJ1bmVJ bmZvcyBhbmQgcGFyYWxsZWwgbGlzdHMgaW4gRVN0YXRlOgotCSAqIGVzX3BhcnRfcHJ1bmVfc3Rh dGVzIGFuZCBlc19wYXJ0X3BydW5lX3Jlc3VsdHMuIFNldCB0byAtMSBpZiBubwotCSAqIHJ1bi10 aW1lIHBydW5pbmcgaXMgdXNlZC4KLQkgKi8KLQlpbnQJCQlwYXJ0X3BydW5lX2luZGV4OwogfSBN ZXJnZUFwcGVuZDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCA3NTE1NjgyZmU5Zi4uOGZhZjMwMGIwMmQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC0xMjgsNiArMTI4LDggQEAgQW5sRXhwckRhdGEKIEFubEluZGV4RGF0YQogQW55QXJy YXlUeXBlCiBBcHBlbmQKK0FwcGVuZEJhc2UKK0FwcGVuZEJhc2VTdGF0ZQogQXBwZW5kUGF0aAog QXBwZW5kUGF0aElucHV0CiBBcHBlbmRSZWxJbmZvCi0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQp Cgo= --000000000000085fe4064ed3bfdb Content-Type: application/octet-stream; name="v18-0003-Extract-common-Append-MergeAppend-executor-logic.patch" Content-Disposition: attachment; filename="v18-0003-Extract-common-Append-MergeAppend-executor-logic.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnnvenew2 RnJvbSBkMmM2ZGFhZjU0YTEyYTk4MjBjZjZjNDg2MzM0ZTA2Mjc1NDA5Yzg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogU3VuLCA1IEFwciAyMDI2IDAzOjUzOjEzICswMzAwClN1YmplY3Q6IFtQ QVRDSCB2MTggMy81XSBFeHRyYWN0IGNvbW1vbiBBcHBlbmQvTWVyZ2VBcHBlbmQgZXhlY3V0b3Ig bG9naWMgaW50bwogZXhlY0FwcGVuZC5jCgpFeHRyYWN0IHNoYXJlZCBub24tYXN5bmMgZXhlY3V0 b3Igb3BlcmF0aW9ucyBmb3IgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZApub2RlcyBpbnRvIGEgbmV3 IGV4ZWNBcHBlbmQuYyBmaWxlLCByZWR1Y2luZyBjb2RlIGR1cGxpY2F0aW9uLgoKVGhlIGV4dHJh Y3RlZCBmdW5jdGlvbnMgb3BlcmF0ZSBvbiB0aGUgY29tbW9uIEFwcGVuZEJhc2VTdGF0ZSBiYXNl IHR5cGUKaW50cm9kdWNlZCBpbiB0aGUgcHJldmlvdXMgY29tbWl0OgoKICAtIEV4ZWNJbml0QXBw ZW5kQmFzZSgpOiBzaGFyZWQgc3VicGxhbiBpbml0aWFsaXphdGlvbiwgcGFydGl0aW9uIHBydW5p bmcKICAgIHNldHVwLCBhbmQgcmVzdWx0IHR1cGxlIHNsb3QgY3JlYXRpb24uCiAgLSBFeGVjRW5k QXBwZW5kQmFzZSgpOiBzaHV0IGRvd24gYWxsIHN1YnBsYW4gbm9kZXMuCiAgLSBFeGVjUmVTY2Fu QXBwZW5kQmFzZSgpOiBwcm9wYWdhdGUgcmVzY2FuIHRvIHN1YnBsYW5zIGFuZCByZXNldCBwcnVu aW5nLgoKQXN5bmMgc3VicGxhbiBkZXRlY3Rpb24sIHNldHVwLCBhbmQgZXhlY3V0aW9uIHJlbWFp biBpbiBub2RlQXBwZW5kLmMsCnNpbmNlIE1lcmdlQXBwZW5kIGRvZXMgbm90IHlldCBzdXBwb3J0 IGFzeW5jLiAgVGhlIHR1cGxlLWZldGNoaW5nIGxvZ2ljCmFsc28gcmVtYWlucyBzcGVjaWZpYyB0 byBlYWNoIG5vZGUgdHlwZSwgcHJlc2VydmluZyB0aGVpciBkaXN0aW5jdApleGVjdXRpb24gc2Vt YW50aWNzIChzZXF1ZW50aWFsIGl0ZXJhdGlvbiBmb3IgQXBwZW5kLCBiaW5hcnkgaGVhcCBtZXJn ZQpmb3IgTWVyZ2VBcHBlbmQpLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS81OWJl MTk0YzVhNDA5ZmI5ZmM5ZjIwMzE1ODFiOGE0NCU0MHBvc3RncmVzcHJvLnJ1CkF1dGhvcjogTWF0 aGV1cyBBbGNhbnRhcmEgPG1hdGhldXNzc2lsdjk3QGdtYWlsLmNvbT4KQ28tYXV0aG9yZWQtYnk6 IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBB bGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVzcHJvLnJ1PgpSZXZpZXdlZC1ieTog QWxlbmEgUnliYWtpbmEgPGEucnliYWtpbmFAcG9zdGdyZXNwcm8ucnU+Ci0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvTWFrZWZpbGUgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FwcGVuZC5jICAgICAgfCAyMDggKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv YmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZCAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQXBwZW5kLmMgICAgICB8IDIxNiArKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYyB8IDE1MSArKy0tLS0tLS0t LS0tLS0tLQogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oICAgICAgfCAgMjYgKysr CiA2IGZpbGVzIGNoYW5nZWQsIDI4MiBpbnNlcnRpb25zKCspLCAzMjEgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0FwcGVuZC5oCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9NYWtlZmlsZQppbmRleCAxMTExOGQwY2UwMi4uMmIxMmExZWIxN2UgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL01h a2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtl ZmlsZS5nbG9iYWwKIAogT0JKUyA9IFwKIAlleGVjQW1pLm8gXAorCWV4ZWNBcHBlbmQubyBcCiAJ ZXhlY0FzeW5jLm8gXAogCWV4ZWNDdXJyZW50Lm8gXAogCWV4ZWNFeHByLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FwcGVuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45 NTk5ZDEwYTk1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNB cHBlbmQuYwpAQCAtMCwwICsxLDIwOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXhl Y0FwcGVuZC5jCisgKgkgIFRoaXMgY29kZSBwcm92aWRlcyBzdXBwb3J0IGZ1bmN0aW9ucyBmb3Ig ZXhlY3V0aW5nIE1lcmdlQXBwZW5kIGFuZAorICoJICBBcHBlbmQgbm9kZXMuCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBcHBlbmQu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNBcHBlbmQuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVj UGFydGl0aW9uLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKworLyogIEJlZ2lu IGFsbCBvZiB0aGUgc3Vic2NhbnMgb2YgYW4gQXBwZW5kQmFzZSBub2RlLiAqLwordm9pZAorRXhl Y0luaXRBcHBlbmRCYXNlKEFwcGVuZEJhc2VTdGF0ZSAqc3RhdGUsCisJCQkJICAgQXBwZW5kQmFz ZSAqbm9kZSwKKwkJCQkgICBFU3RhdGUgKmVzdGF0ZSwKKwkJCQkgICBpbnQgZWZsYWdzLAorCQkJ CSAgIGludCBmaXJzdF9wYXJ0aWFsX3BsYW4sCisJCQkJICAgaW50ICpmaXJzdF92YWxpZF9wYXJ0 aWFsX3BsYW4pCit7CisJUGxhblN0YXRlICoqYXBwZW5kcGxhbnN0YXRlczsKKwljb25zdCBUdXBs ZVRhYmxlU2xvdE9wcyAqYXBwZW5kb3BzOworCUJpdG1hcHNldCAgKnZhbGlkc3VicGxhbnM7CisJ aW50CQkJbnBsYW5zOworCWludAkJCWZpcnN0dmFsaWQ7CisJaW50CQkJaSwKKwkJCQlqOworCisJ LyogSWYgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgaXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhh dCB1cCBub3cgKi8KKwlpZiAobm9kZS0+cGFydF9wcnVuZV9pbmRleCA+PSAwKQorCXsKKwkJUGFy dGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZTsKKworCQkvKgorCQkgKiBTZXQgdXAgcHJ1bmlu ZyBkYXRhIHN0cnVjdHVyZS4gIFRoaXMgYWxzbyBpbml0aWFsaXplcyB0aGUgc2V0IG9mCisJCSAq IHN1YnBsYW5zIHRvIGluaXRpYWxpemUgKHZhbGlkc3VicGxhbnMpIGJ5IHRha2luZyBpbnRvIGFj Y291bnQgdGhlCisJCSAqIHJlc3VsdCBvZiBwZXJmb3JtaW5nIGluaXRpYWwgcHJ1bmluZyBpZiBh bnkuCisJCSAqLworCQlwcnVuZXN0YXRlID0gRXhlY0luaXRQYXJ0aXRpb25FeGVjUHJ1bmluZygm c3RhdGUtPnBzLAorCQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0aChub2RlLT5zdWJwbGFucyksCisJ CQkJCQkJCQkJCQkgIG5vZGUtPnBhcnRfcHJ1bmVfaW5kZXgsCisJCQkJCQkJCQkJCQkgIG5vZGUt PmFwcHJlbGlkcywKKwkJCQkJCQkJCQkJCSAgJnZhbGlkc3VicGxhbnMpOworCQlzdGF0ZS0+cHJ1 bmVfc3RhdGUgPSBwcnVuZXN0YXRlOworCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRz dWJwbGFucyk7CisKKwkJLyoKKwkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVp cmVkIGFuZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQorCQkgKiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCB2 YWxpZF9zdWJwbGFucyBpbW1lZGlhdGVseSwgcHJldmVudGluZyBsYXRlcgorCQkgKiBjYWxscyB0 byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCisJCSAqLworCQlpZiAoIXBydW5lc3RhdGUtPmRv X2V4ZWNfcHJ1bmUgJiYgbnBsYW5zID4gMCkKKwkJeworCQkJc3RhdGUtPnZhbGlkX3N1YnBsYW5z ID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKKwkJCXN0YXRlLT52YWxpZF9z dWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJfQorCX0KKwllbHNlCisJeworCQlucGxhbnMg PSBsaXN0X2xlbmd0aChub2RlLT5zdWJwbGFucyk7CisKKwkJLyoKKwkJICogV2hlbiBydW4tdGlt ZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBub3QgZW5hYmxlZCB3ZSBjYW4ganVzdCBtYXJrIGFsbAor CQkgKiBzdWJwbGFucyBhcyB2YWxpZDsgdGhleSBtdXN0IGFsc28gYWxsIGJlIGluaXRpYWxpemVk LgorCQkgKi8KKwkJQXNzZXJ0KG5wbGFucyA+IDApOworCQlzdGF0ZS0+dmFsaWRfc3VicGxhbnMg PSB2YWxpZHN1YnBsYW5zID0KKwkJCWJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7 CisJCXN0YXRlLT52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKKwkJc3RhdGUtPnBy dW5lX3N0YXRlID0gTlVMTDsKKwl9CisKKwlhcHBlbmRwbGFuc3RhdGVzID0gcGFsbG9jMF9hcnJh eShQbGFuU3RhdGUgKiwgbnBsYW5zKTsKKworCS8qCisJICogY2FsbCBFeGVjSW5pdE5vZGUgb24g ZWFjaCBvZiB0aGUgdmFsaWQgcGxhbnMgdG8gYmUgZXhlY3V0ZWQgYW5kIHNhdmUKKwkgKiB0aGUg cmVzdWx0cyBpbnRvIHRoZSBhcHBlbmRwbGFuc3RhdGVzIGFycmF5LgorCSAqCisJICogV2hpbGUg YXQgaXQsIGZpbmQgb3V0IHRoZSBmaXJzdCB2YWxpZCBwYXJ0aWFsIHBsYW4uCisJICovCisJaiA9 IDA7CisJZmlyc3R2YWxpZCA9IG5wbGFuczsKKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25l eHRfbWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQorCXsKKwkJUGxhbgkgICAqaW5pdE5v ZGUgPSAoUGxhbiAqKSBsaXN0X250aChub2RlLT5zdWJwbGFucywgaSk7CisKKwkJLyoKKwkJICog UmVjb3JkIHRoZSBsb3dlc3QgYXBwZW5kcGxhbnMgaW5kZXggd2hpY2ggaXMgYSB2YWxpZCBwYXJ0 aWFsIHBsYW4uCisJCSAqLworCQlpZiAoaSA+PSBmaXJzdF9wYXJ0aWFsX3BsYW4gJiYgaiA8IGZp cnN0dmFsaWQpCisJCQlmaXJzdHZhbGlkID0gajsKKworCQlhcHBlbmRwbGFuc3RhdGVzW2orK10g PSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKKwl9CisKKwlpZiAoZmly c3RfdmFsaWRfcGFydGlhbF9wbGFuKQorCQkqZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuID0gZmly c3R2YWxpZDsKKworCXN0YXRlLT5wbGFucyA9IGFwcGVuZHBsYW5zdGF0ZXM7CisJc3RhdGUtPm5w bGFucyA9IG5wbGFuczsKKworCS8qCisJICogSW5pdGlhbGl6ZSBBcHBlbmQncyByZXN1bHQgdHVw bGUgdHlwZSBhbmQgc2xvdC4gIElmIHRoZSBjaGlsZCBwbGFucyBhbGwKKwkgKiBwcm9kdWNlIHRo ZSBzYW1lIGZpeGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsgb3RoZXJ3 aXNlCisJICogbWFrZSBhIHZpcnR1YWwgc2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90 IGl0c2VsZiBpcyB1c2VkIG9ubHkgdG8KKwkgKiByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBv ZiBleGVjdXRpb247IHJlYWwgdHVwbGVzIGFyZSByZXR1cm5lZCB0bworCSAqIHRoZSBjYWxsZXIg aW4gdGhlIGNoaWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlIGRvaW5nIGhl cmUKKwkgKiBpcyBhbGxvd2luZyB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0 aGUgQXBwZW5kIHdpbGwgcmV0dXJuCisJICogb25seSBvbmUga2luZCBvZiBzbG90LikKKwkgKi8K KwlhcHBlbmRvcHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhhcHBlbmRwbGFuc3RhdGVzLCBqKTsK KwlpZiAoYXBwZW5kb3BzICE9IE5VTEwpCisJeworCQlFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRM KCZzdGF0ZS0+cHMsIGFwcGVuZG9wcyk7CisJfQorCWVsc2UKKwl7CisJCUV4ZWNJbml0UmVzdWx0 VHVwbGVTbG90VEwoJnN0YXRlLT5wcywgJlRUU09wc1ZpcnR1YWwpOworCQkvKiBzaG93IHRoYXQg dGhlIG91dHB1dCBzbG90IHR5cGUgaXMgbm90IGZpeGVkICovCisJCXN0YXRlLT5wcy5yZXN1bHRv cHNzZXQgPSB0cnVlOworCQlzdGF0ZS0+cHMucmVzdWx0b3BzZml4ZWQgPSBmYWxzZTsKKwl9CisK KwkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRlIHRvIHNhZmUgZGVmYXVsdHMgKi8KKwlzdGF0ZS0+ YXN5bmNwbGFucyA9IE5VTEw7CisJc3RhdGUtPm5hc3luY3BsYW5zID0gMDsKKwlzdGF0ZS0+YXN5 bmNyZXF1ZXN0cyA9IE5VTEw7CisJc3RhdGUtPmFzeW5jcmVzdWx0cyA9IE5VTEw7CisJc3RhdGUt Pm5lZWRyZXF1ZXN0ID0gTlVMTDsKKwlzdGF0ZS0+ZXZlbnRzZXQgPSBOVUxMOworCXN0YXRlLT52 YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKKworCS8qCisJICogTWlzY2VsbGFuZW91cyBpbml0aWFs aXphdGlvbgorCSAqLworCXN0YXRlLT5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7Cit9CisKK3ZvaWQK K0V4ZWNSZVNjYW5BcHBlbmRCYXNlKEFwcGVuZEJhc2VTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQlp OworCisJLyoKKwkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNlZCBpbiBwcnVuaW5nIGV4 cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgorCSAqIHdlJ2QgYmV0dGVyIHVuc2V0IHRoZSB2 YWxpZCBzdWJwbGFucyBzbyB0aGF0IHRoZXkgYXJlIHJlc2VsZWN0ZWQgZm9yCisJICogdGhlIG5l dyBwYXJhbWV0ZXIgdmFsdWVzLgorCSAqLworCWlmIChub2RlLT5wcnVuZV9zdGF0ZSAmJgorCQli bXNfb3ZlcmxhcChub2RlLT5wcy5jaGdQYXJhbSwKKwkJCQkJbm9kZS0+cHJ1bmVfc3RhdGUtPmV4 ZWNwYXJhbWlkcykpCisJeworCQlub2RlLT52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gZmFs c2U7CisJCWJtc19mcmVlKG5vZGUtPnZhbGlkX3N1YnBsYW5zKTsKKwkJbm9kZS0+dmFsaWRfc3Vi cGxhbnMgPSBOVUxMOworCQlibXNfZnJlZShub2RlLT52YWxpZF9hc3luY3BsYW5zKTsKKwkJbm9k ZS0+dmFsaWRfYXN5bmNwbGFucyA9IE5VTEw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5vZGUt Pm5wbGFuczsgaSsrKQorCXsKKwkJUGxhblN0YXRlICAqc3Vibm9kZSA9IG5vZGUtPnBsYW5zW2ld OworCisJCS8qCisJCSAqIEV4ZWNSZVNjYW4gZG9lc24ndCBrbm93IGFib3V0IG15IHN1YnBsYW5z LCBzbyBJIGhhdmUgdG8gZG8KKwkJICogY2hhbmdlZC1wYXJhbWV0ZXIgc2lnbmFsaW5nIG15c2Vs Zi4KKwkJICovCisJCWlmIChub2RlLT5wcy5jaGdQYXJhbSAhPSBOVUxMKQorCQkJVXBkYXRlQ2hh bmdlZFBhcmFtU2V0KHN1Ym5vZGUsIG5vZGUtPnBzLmNoZ1BhcmFtKTsKKworCQkvKgorCQkgKiBJ ZiBjaGdQYXJhbSBvZiBzdWJub2RlIGlzIG5vdCBudWxsIHRoZW4gcGxhbiB3aWxsIGJlIHJlLXNj YW5uZWQgYnkKKwkJICogZmlyc3QgRXhlY1Byb2NOb2RlLgorCQkgKi8KKwkJaWYgKHN1Ym5vZGUt PmNoZ1BhcmFtID09IE5VTEwpCisJCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOworCX0KK30KKworLyog IFNodXRzIGRvd24gdGhlIHN1YnBsYW5zIG9mIGFuIEFwcGVuZEJhc2Ugbm9kZS4gKi8KK3ZvaWQK K0V4ZWNFbmRBcHBlbmRCYXNlKEFwcGVuZEJhc2VTdGF0ZSAqbm9kZSkKK3sKKwlQbGFuU3RhdGUg KipzdWJwbGFuczsKKwlpbnQJCQlucGxhbnM7CisJaW50CQkJaTsKKworCS8qCisJICogZ2V0IGlu Zm9ybWF0aW9uIGZyb20gdGhlIG5vZGUKKwkgKi8KKwlzdWJwbGFucyA9IG5vZGUtPnBsYW5zOwor CW5wbGFucyA9IG5vZGUtPm5wbGFuczsKKworCS8qCisJICogc2h1dCBkb3duIGVhY2ggb2YgdGhl IHN1YnNjYW5zCisJICovCisJZm9yIChpID0gMDsgaSA8IG5wbGFuczsgaSsrKQorCQlFeGVjRW5k Tm9kZShzdWJwbGFuc1tpXSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9t ZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkCmluZGV4IGRjNDVi ZTBiMmNlLi5jMmYyNjFmZjIyZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVz b24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQKQEAgLTIsNiAr Miw3IEBACiAKIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2V4ZWNBbWkuYycsCisgICdl eGVjQXBwZW5kLmMnLAogICAnZXhlY0FzeW5jLmMnLAogICAnZXhlY0N1cnJlbnQuYycsCiAgICdl eGVjRXhwci5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRleCAyNzJiZjUyZmMyZC4u ZjI2N2ZmZTEzZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKQEAgLTU3LDYgKzU3LDcg QEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJleGVjdXRvci9leGVjQXBw ZW5kLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5jLmgiCiAjaW5jbHVkZSAiZXhlY3V0 b3IvZXhlY1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCkBAIC0x MTEsMTUgKzExMiwxMCBAQCBBcHBlbmRTdGF0ZSAqCiBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogewogCUFwcGVuZFN0YXRlICphcHBlbmRz dGF0ZSA9IG1ha2VOb2RlKEFwcGVuZFN0YXRlKTsKLQlQbGFuU3RhdGUgKiphcHBlbmRwbGFuc3Rh dGVzOwotCWNvbnN0IFR1cGxlVGFibGVTbG90T3BzICphcHBlbmRvcHM7Ci0JQml0bWFwc2V0ICAq dmFsaWRzdWJwbGFuczsKIAlCaXRtYXBzZXQgICphc3luY3BsYW5zOwotCWludAkJCW5wbGFuczsK IAlpbnQJCQluYXN5bmNwbGFuczsKLQlpbnQJCQlmaXJzdHZhbGlkOwotCWludAkJCWksCi0JCQkJ ajsKKwlpbnQJCQlucGxhbnM7CisJaW50CQkJaTsKIAogCS8qIGNoZWNrIGZvciB1bnN1cHBvcnRl ZCBmbGFncyAqLwogCUFzc2VydCghKGVmbGFncyAmIEVYRUNfRkxBR19NQVJLKSk7CkBAIC0xMzYs MTI0ICsxMzIsMzggQEAgRXhlY0luaXRBcHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0 ZSwgaW50IGVmbGFncykKIAlhcHBlbmRzdGF0ZS0+YXNfc3luY2RvbmUgPSBmYWxzZTsKIAlhcHBl bmRzdGF0ZS0+YXNfYmVndW4gPSBmYWxzZTsKIAotCS8qIElmIHJ1bi10aW1lIHBhcnRpdGlvbiBw cnVuaW5nIGlzIGVuYWJsZWQsIHRoZW4gc2V0IHRoYXQgdXAgbm93ICovCi0JaWYgKG5vZGUtPmFi LnBhcnRfcHJ1bmVfaW5kZXggPj0gMCkKLQl7Ci0JCVBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5l c3RhdGU7CisJLyogSW5pdGlhbGl6ZSBjb21tb24gZmllbGRzICovCisJRXhlY0luaXRBcHBlbmRC YXNlKCZhcHBlbmRzdGF0ZS0+YXMsCisJCQkJCSAgICZub2RlLT5hYiwKKwkJCQkJICAgZXN0YXRl LAorCQkJCQkgICBlZmxhZ3MsCisJCQkJCSAgIG5vZGUtPmZpcnN0X3BhcnRpYWxfcGxhbiwKKwkJ CQkJICAgJmFwcGVuZHN0YXRlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4pOwogCi0JCS8qCi0JCSAq IFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgVGhpcyBhbHNvIGluaXRpYWxpemVzIHRo ZSBzZXQgb2YKLQkJICogc3VicGxhbnMgdG8gaW5pdGlhbGl6ZSAodmFsaWRzdWJwbGFucykgYnkg dGFraW5nIGludG8gYWNjb3VudCB0aGUKLQkJICogcmVzdWx0IG9mIHBlcmZvcm1pbmcgaW5pdGlh bCBwcnVuaW5nIGlmIGFueS4KLQkJICovCi0JCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRpdGlv bkV4ZWNQcnVuaW5nKCZhcHBlbmRzdGF0ZS0+YXMucHMsCi0JCQkJCQkJCQkJCQkgIGxpc3RfbGVu Z3RoKG5vZGUtPmFiLnN1YnBsYW5zKSwKLQkJCQkJCQkJCQkJCSAgbm9kZS0+YWIucGFydF9wcnVu ZV9pbmRleCwKLQkJCQkJCQkJCQkJCSAgbm9kZS0+YWIuYXBwcmVsaWRzLAotCQkJCQkJCQkJCQkJ ICAmdmFsaWRzdWJwbGFucyk7Ci0JCWFwcGVuZHN0YXRlLT5hcy5wcnVuZV9zdGF0ZSA9IHBydW5l c3RhdGU7Ci0JCW5wbGFucyA9IGJtc19udW1fbWVtYmVycyh2YWxpZHN1YnBsYW5zKTsKLQotCQkv KgotCQkgKiBXaGVuIG5vIHJ1bi10aW1lIHBydW5pbmcgaXMgcmVxdWlyZWQgYW5kIHRoZXJlJ3Mg YXQgbGVhc3Qgb25lCi0JCSAqIHN1YnBsYW4sIHdlIGNhbiBmaWxsIGFzX3ZhbGlkX3N1YnBsYW5z IGltbWVkaWF0ZWx5LCBwcmV2ZW50aW5nCi0JCSAqIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0 Y2hpbmdTdWJQbGFucy4KLQkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAm JiBucGxhbnMgPiAwKQotCQl7Ci0JCQlhcHBlbmRzdGF0ZS0+YXMudmFsaWRfc3VicGxhbnMgPSBi bXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQkJYXBwZW5kc3RhdGUtPmFzLnZh bGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCW5w bGFucyA9IGxpc3RfbGVuZ3RoKG5vZGUtPmFiLnN1YnBsYW5zKTsKLQotCQkvKgotCQkgKiBXaGVu IHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdCBlbmFibGVkIHdlIGNhbiBqdXN0IG1h cmsgYWxsCi0JCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5IG11c3QgYWxzbyBhbGwgYmUgaW5p dGlhbGl6ZWQuCi0JCSAqLwotCQlBc3NlcnQobnBsYW5zID4gMCk7Ci0JCWFwcGVuZHN0YXRlLT5h cy52YWxpZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQotCQkJYm1zX2FkZF9yYW5nZShOVUxM LCAwLCBucGxhbnMgLSAxKTsKLQkJYXBwZW5kc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQgPSB0cnVlOwotCQlhcHBlbmRzdGF0ZS0+YXMucHJ1bmVfc3RhdGUgPSBOVUxMOwotCX0K LQotCWFwcGVuZHBsYW5zdGF0ZXMgPSAoUGxhblN0YXRlICoqKSBwYWxsb2MobnBsYW5zICoKLQkJ CQkJCQkJCQkJIHNpemVvZihQbGFuU3RhdGUgKikpOworCW5wbGFucyA9IGFwcGVuZHN0YXRlLT5h cy5ucGxhbnM7CiAKIAkvKgotCSAqIGNhbGwgRXhlY0luaXROb2RlIG9uIGVhY2ggb2YgdGhlIHZh bGlkIHBsYW5zIHRvIGJlIGV4ZWN1dGVkIGFuZCBzYXZlCi0JICogdGhlIHJlc3VsdHMgaW50byB0 aGUgYXBwZW5kcGxhbnN0YXRlcyBhcnJheS4KLQkgKgotCSAqIFdoaWxlIGF0IGl0LCBmaW5kIG91 dCB0aGUgZmlyc3QgdmFsaWQgcGFydGlhbCBwbGFuLgorCSAqIERldGVjdCBhc3luYy1jYXBhYmxl IHN1YnBsYW5zLiAgV2hlbiBleGVjdXRpbmcgRXZhbFBsYW5RdWFsLCB3ZSB0cmVhdAorCSAqIHRo ZW0gYXMgc3luYyBvbmVzOyBkb24ndCBkbyB0aGlzIHdoZW4gaW5pdGlhbGl6aW5nIGFuIEV2YWxQ bGFuUXVhbCBwbGFuCisJICogdHJlZS4KIAkgKi8KLQlqID0gMDsKIAlhc3luY3BsYW5zID0gTlVM TDsKIAluYXN5bmNwbGFucyA9IDA7Ci0JZmlyc3R2YWxpZCA9IG5wbGFuczsKLQlpID0gLTE7Ci0J d2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQorCWZv ciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKIAl7Ci0JCVBsYW4JICAgKmluaXROb2RlID0gKFBs YW4gKikgbGlzdF9udGgobm9kZS0+YWIuc3VicGxhbnMsIGkpOwotCi0JCS8qCi0JCSAqIFJlY29y ZCBhc3luYyBzdWJwbGFucy4gIFdoZW4gZXhlY3V0aW5nIEV2YWxQbGFuUXVhbCwgd2UgdHJlYXQg dGhlbQotCQkgKiBhcyBzeW5jIG9uZXM7IGRvbid0IGRvIHRoaXMgd2hlbiBpbml0aWFsaXppbmcg YW4gRXZhbFBsYW5RdWFsIHBsYW4KLQkJICogdHJlZS4KLQkJICovCi0JCWlmIChpbml0Tm9kZS0+ YXN5bmNfY2FwYWJsZSAmJiBlc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCkKKwkJaWYgKGFw cGVuZHN0YXRlLT5hcy5wbGFuc1tpXS0+cGxhbi0+YXN5bmNfY2FwYWJsZSAmJgorCQkJZXN0YXRl LT5lc19lcHFfYWN0aXZlID09IE5VTEwpCiAJCXsKLQkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21l bWJlcihhc3luY3BsYW5zLCBqKTsKKwkJCWFzeW5jcGxhbnMgPSBibXNfYWRkX21lbWJlcihhc3lu Y3BsYW5zLCBpKTsKIAkJCW5hc3luY3BsYW5zKys7CiAJCX0KLQotCQkvKgotCQkgKiBSZWNvcmQg dGhlIGxvd2VzdCBhcHBlbmRwbGFucyBpbmRleCB3aGljaCBpcyBhIHZhbGlkIHBhcnRpYWwgcGxh bi4KLQkJICovCi0JCWlmIChpID49IG5vZGUtPmZpcnN0X3BhcnRpYWxfcGxhbiAmJiBqIDwgZmly c3R2YWxpZCkKLQkJCWZpcnN0dmFsaWQgPSBqOwotCi0JCWFwcGVuZHBsYW5zdGF0ZXNbaisrXSA9 IEV4ZWNJbml0Tm9kZShpbml0Tm9kZSwgZXN0YXRlLCBlZmxhZ3MpOwotCX0KLQotCWFwcGVuZHN0 YXRlLT5hc19maXJzdF9wYXJ0aWFsX3BsYW4gPSBmaXJzdHZhbGlkOwotCWFwcGVuZHN0YXRlLT5h cy5wbGFucyA9IGFwcGVuZHBsYW5zdGF0ZXM7Ci0JYXBwZW5kc3RhdGUtPmFzLm5wbGFucyA9IG5w bGFuczsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBh bmQgc2xvdC4gIElmIHRoZSBjaGlsZCBwbGFucyBhbGwKLQkgKiBwcm9kdWNlIHRoZSBzYW1lIGZp eGVkIHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsgb3RoZXJ3aXNlCi0JICog bWFrZSBhIHZpcnR1YWwgc2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBp cyB1c2VkIG9ubHkgdG8KLQkgKiByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRp b247IHJlYWwgdHVwbGVzIGFyZSByZXR1cm5lZCB0bwotCSAqIHRoZSBjYWxsZXIgaW4gdGhlIGNo aWxkcmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlIGRvaW5nIGhlcmUKLQkgKiBp cyBhbGxvd2luZyB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUgQXBwZW5k IHdpbGwgcmV0dXJuCi0JICogb25seSBvbmUga2luZCBvZiBzbG90LikKLQkgKi8KLQlhcHBlbmRv cHMgPSBFeGVjR2V0Q29tbW9uU2xvdE9wcyhhcHBlbmRwbGFuc3RhdGVzLCBqKTsKLQlpZiAoYXBw ZW5kb3BzICE9IE5VTEwpCi0JewotCQlFeGVjSW5pdFJlc3VsdFR1cGxlU2xvdFRMKCZhcHBlbmRz dGF0ZS0+YXMucHMsIGFwcGVuZG9wcyk7Ci0JfQotCWVsc2UKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0 VHVwbGVTbG90VEwoJmFwcGVuZHN0YXRlLT5hcy5wcywgJlRUU09wc1ZpcnR1YWwpOwotCQkvKiBz aG93IHRoYXQgdGhlIG91dHB1dCBzbG90IHR5cGUgaXMgbm90IGZpeGVkICovCi0JCWFwcGVuZHN0 YXRlLT5hcy5wcy5yZXN1bHRvcHNzZXQgPSB0cnVlOwotCQlhcHBlbmRzdGF0ZS0+YXMucHMucmVz dWx0b3BzZml4ZWQgPSBmYWxzZTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIGFzeW5jIHN0YXRlICov CiAJYXBwZW5kc3RhdGUtPmFzLmFzeW5jcGxhbnMgPSBhc3luY3BsYW5zOwogCWFwcGVuZHN0YXRl LT5hcy5uYXN5bmNwbGFucyA9IG5hc3luY3BsYW5zOwotCWFwcGVuZHN0YXRlLT5hcy5hc3luY3Jl cXVlc3RzID0gTlVMTDsKLQlhcHBlbmRzdGF0ZS0+YXMuYXN5bmNyZXN1bHRzID0gTlVMTDsKIAlh cHBlbmRzdGF0ZS0+YXNfbmFzeW5jcmVzdWx0cyA9IDA7CiAJYXBwZW5kc3RhdGUtPmFzX25hc3lu Y3JlbWFpbiA9IDA7Ci0JYXBwZW5kc3RhdGUtPmFzLm5lZWRyZXF1ZXN0ID0gTlVMTDsKLQlhcHBl bmRzdGF0ZS0+YXMuZXZlbnRzZXQgPSBOVUxMOwotCWFwcGVuZHN0YXRlLT5hcy52YWxpZF9hc3lu Y3BsYW5zID0gTlVMTDsKIAogCWlmIChuYXN5bmNwbGFucyA+IDApCiAJewpAQCAtMjY3LDcgKzE3 Nyw3IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAKIAkJCWFyZXEgPSBwYWxsb2Nfb2JqZWN0KEFzeW5jUmVxdWVzdCk7CiAJCQlhcmVx LT5yZXF1ZXN0b3IgPSAoUGxhblN0YXRlICopIGFwcGVuZHN0YXRlOwotCQkJYXJlcS0+cmVxdWVz dGVlID0gYXBwZW5kcGxhbnN0YXRlc1tpXTsKKwkJCWFyZXEtPnJlcXVlc3RlZSA9IGFwcGVuZHN0 YXRlLT5hcy5wbGFuc1tpXTsKIAkJCWFyZXEtPnJlcXVlc3RfaW5kZXggPSBpOwogCQkJYXJlcS0+ Y2FsbGJhY2tfcGVuZGluZyA9IGZhbHNlOwogCQkJYXJlcS0+cmVxdWVzdF9jb21wbGV0ZSA9IGZh bHNlOwpAQCAtMjgzLDEyICsxOTMsNiBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMo YXBwZW5kc3RhdGUpOwogCX0KIAotCS8qCi0JICogTWlzY2VsbGFuZW91cyBpbml0aWFsaXphdGlv bgotCSAqLwotCi0JYXBwZW5kc3RhdGUtPmFzLnBzLnBzX1Byb2pJbmZvID0gTlVMTDsKLQogCS8q IEZvciBwYXJhbGxlbCBxdWVyeSwgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gbGF0ZXIuICovCiAJ YXBwZW5kc3RhdGUtPmNob29zZV9uZXh0X3N1YnBsYW4gPSBjaG9vc2VfbmV4dF9zdWJwbGFuX2xv Y2FsbHk7CiAKQEAgLTQwMiw2NyArMzA2LDIxIEBAIEV4ZWNBcHBlbmQoUGxhblN0YXRlICpwc3Rh dGUpCiB2b2lkCiBFeGVjRW5kQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQogewotCVBsYW5TdGF0 ZSAqKmFwcGVuZHBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlpOwotCi0JLyoKLQkgKiBn ZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZQotCSAqLwotCWFwcGVuZHBsYW5zID0gbm9kZS0+ YXMucGxhbnM7Ci0JbnBsYW5zID0gbm9kZS0+YXMubnBsYW5zOwotCi0JLyoKLQkgKiBzaHV0IGRv d24gZWFjaCBvZiB0aGUgc3Vic2NhbnMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnBsYW5zOyBp KyspCi0JCUV4ZWNFbmROb2RlKGFwcGVuZHBsYW5zW2ldKTsKKwlFeGVjRW5kQXBwZW5kQmFzZSgm bm9kZS0+YXMpOwogfQogCiB2b2lkCiBFeGVjUmVTY2FuQXBwZW5kKEFwcGVuZFN0YXRlICpub2Rl KQogewogCWludAkJCW5hc3luY3BsYW5zID0gbm9kZS0+YXMubmFzeW5jcGxhbnM7Ci0JaW50CQkJ aTsKLQotCS8qCi0JICogSWYgYW55IFBBUkFNX0VYRUMgUGFyYW1zIHVzZWQgaW4gcHJ1bmluZyBl eHByZXNzaW9ucyBoYXZlIGNoYW5nZWQsIHRoZW4KLQkgKiB3ZSdkIGJldHRlciB1bnNldCB0aGUg dmFsaWQgc3VicGxhbnMgc28gdGhhdCB0aGV5IGFyZSByZXNlbGVjdGVkIGZvcgotCSAqIHRoZSBu ZXcgcGFyYW1ldGVyIHZhbHVlcy4KLQkgKi8KLQlpZiAobm9kZS0+YXMucHJ1bmVfc3RhdGUgJiYK LQkJYm1zX292ZXJsYXAobm9kZS0+YXMucHMuY2hnUGFyYW0sCi0JCQkJCW5vZGUtPmFzLnBydW5l X3N0YXRlLT5leGVjcGFyYW1pZHMpKQotCXsKLQkJbm9kZS0+YXMudmFsaWRfc3VicGxhbnNfaWRl bnRpZmllZCA9IGZhbHNlOwotCQlibXNfZnJlZShub2RlLT5hcy52YWxpZF9zdWJwbGFucyk7Ci0J CW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0gTlVMTDsKLQkJYm1zX2ZyZWUobm9kZS0+YXMudmFs aWRfYXN5bmNwbGFucyk7Ci0JCW5vZGUtPmFzLnZhbGlkX2FzeW5jcGxhbnMgPSBOVUxMOwotCX0K LQotCWZvciAoaSA9IDA7IGkgPCBub2RlLT5hcy5ucGxhbnM7IGkrKykKLQl7Ci0JCVBsYW5TdGF0 ZSAgKnN1Ym5vZGUgPSBub2RlLT5hcy5wbGFuc1tpXTsKLQotCQkvKgotCQkgKiBFeGVjUmVTY2Fu IGRvZXNuJ3Qga25vdyBhYm91dCBteSBzdWJwbGFucywgc28gSSBoYXZlIHRvIGRvCi0JCSAqIGNo YW5nZWQtcGFyYW1ldGVyIHNpZ25hbGluZyBteXNlbGYuCi0JCSAqLwotCQlpZiAobm9kZS0+YXMu cHMuY2hnUGFyYW0gIT0gTlVMTCkKLQkJCVVwZGF0ZUNoYW5nZWRQYXJhbVNldChzdWJub2RlLCBu b2RlLT5hcy5wcy5jaGdQYXJhbSk7CiAKLQkJLyoKLQkJICogSWYgY2hnUGFyYW0gb2Ygc3Vibm9k ZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4gd2lsbCBiZSByZS1zY2FubmVkIGJ5Ci0JCSAqIGZpcnN0 IEV4ZWNQcm9jTm9kZSBvciBieSBmaXJzdCBFeGVjQXN5bmNSZXF1ZXN0LgotCQkgKi8KLQkJaWYg KHN1Ym5vZGUtPmNoZ1BhcmFtID09IE5VTEwpCi0JCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOwotCX0K KwlFeGVjUmVTY2FuQXBwZW5kQmFzZSgmbm9kZS0+YXMpOwogCiAJLyogUmVzZXQgYXN5bmMgc3Rh dGUgKi8KIAlpZiAobmFzeW5jcGxhbnMgPiAwKQogCXsKKwkJaW50CQkJaTsKKwogCQlpID0gLTE7 CiAJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy5hc3luY3BsYW5zLCBpKSkg Pj0gMCkKIAkJewpAQCAtODc4LDE3ICs3MzYsNiBAQCBtYXJrX2ludmFsaWRfc3VicGxhbnNfYXNf ZmluaXNoZWQoQXBwZW5kU3RhdGUgKm5vZGUpCiBzdGF0aWMgdm9pZAogRXhlY0FwcGVuZEFzeW5j QmVnaW4oQXBwZW5kU3RhdGUgKm5vZGUpCiB7Ci0JaW50CQkJaTsKLQotCS8qIEJhY2t3YXJkIHNj YW4gaXMgbm90IHN1cHBvcnRlZCBieSBhc3luYy1hd2FyZSBBcHBlbmRzLiAqLwotCUFzc2VydChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPmFzLnBzLnN0YXRlLT5lc19kaXJlY3Rpb24pKTsK LQotCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gc3VicGxh bnMgKi8KLQlBc3NlcnQobm9kZS0+YXMubnBsYW5zID4gMCk7Ci0KLQkvKiBXZSBzaG91bGQgbmV2 ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5zLiAqLwotCUFzc2Vy dChub2RlLT5hcy5uYXN5bmNwbGFucyA+IDApOwotCiAJLyogSWYgd2UndmUgeWV0IHRvIGRldGVy bWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICovCiAJaWYgKCFub2RlLT5h cy52YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQogCXsKQEAgLTkwOCwxNiArNzU1LDE5IEBAIEV4 ZWNBcHBlbmRBc3luY0JlZ2luKEFwcGVuZFN0YXRlICpub2RlKQogCQlyZXR1cm47CiAKIAkvKiBN YWtlIGEgcmVxdWVzdCBmb3IgZWFjaCBvZiB0aGUgdmFsaWQgYXN5bmMgc3VicGxhbnMuICovCi0J aSA9IC0xOwotCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5hcy52YWxpZF9hc3lu Y3BsYW5zLCBpKSkgPj0gMCkKIAl7Ci0JCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPmFzLmFz eW5jcmVxdWVzdHNbaV07CisJCWludAkJCWkgPSAtMTsKIAotCQlBc3NlcnQoYXJlcS0+cmVxdWVz dF9pbmRleCA9PSBpKTsKLQkJQXNzZXJ0KCFhcmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKwkJd2hp bGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPmFzLnZhbGlkX2FzeW5jcGxhbnMsIGkpKSA+ PSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5hcy5hc3luY3JlcXVlc3Rz W2ldOwogCi0JCS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KLQkJRXhlY0FzeW5jUmVxdWVzdChh cmVxKTsKKwkJCUFzc2VydChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOworCQkJQXNzZXJ0KCFh cmVxLT5jYWxsYmFja19wZW5kaW5nKTsKKworCQkJLyogRG8gdGhlIGFjdHVhbCB3b3JrLiAqLwor CQkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCBkN2QyZGUwODE0Ny4uNjkyODE1MmYxNmYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC0zOCw2ICszOCw3IEBACiAKICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FwcGVuZC5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1Bh cnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIgpAQCAtNjYs MTIgKzY3LDcgQEAgTWVyZ2VBcHBlbmRTdGF0ZSAqCiBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdl QXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIHsKIAlNZXJnZUFwcGVu ZFN0YXRlICptZXJnZXN0YXRlID0gbWFrZU5vZGUoTWVyZ2VBcHBlbmRTdGF0ZSk7Ci0JUGxhblN0 YXRlICoqbWVyZ2VwbGFuc3RhdGVzOwotCWNvbnN0IFR1cGxlVGFibGVTbG90T3BzICptZXJnZW9w czsKLQlCaXRtYXBzZXQgICp2YWxpZHN1YnBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlp LAotCQkJCWo7CisJaW50CQkJaTsKIAogCS8qIGNoZWNrIGZvciB1bnN1cHBvcnRlZCBmbGFncyAq LwogCUFzc2VydCghKGVmbGFncyAmIChFWEVDX0ZMQUdfQkFDS1dBUkQgfCBFWEVDX0ZMQUdfTUFS SykpKTsKQEAgLTgzLDk0ICs3OSwxOCBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5k ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAltZXJnZXN0YXRlLT5hcy5wcy5z dGF0ZSA9IGVzdGF0ZTsKIAltZXJnZXN0YXRlLT5hcy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjTWVy Z2VBcHBlbmQ7CiAKLQkvKiBJZiBydW4tdGltZSBwYXJ0aXRpb24gcHJ1bmluZyBpcyBlbmFibGVk LCB0aGVuIHNldCB0aGF0IHVwIG5vdyAqLwotCWlmIChub2RlLT5hYi5wYXJ0X3BydW5lX2luZGV4 ID49IDApCi0JewotCQlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwotCi0JCS8qCi0J CSAqIFNldCB1cCBwcnVuaW5nIGRhdGEgc3RydWN0dXJlLiAgVGhpcyBhbHNvIGluaXRpYWxpemVz IHRoZSBzZXQgb2YKLQkJICogc3VicGxhbnMgdG8gaW5pdGlhbGl6ZSAodmFsaWRzdWJwbGFucykg YnkgdGFraW5nIGludG8gYWNjb3VudCB0aGUKLQkJICogcmVzdWx0IG9mIHBlcmZvcm1pbmcgaW5p dGlhbCBwcnVuaW5nIGlmIGFueS4KLQkJICovCi0JCXBydW5lc3RhdGUgPSBFeGVjSW5pdFBhcnRp dGlvbkV4ZWNQcnVuaW5nKCZtZXJnZXN0YXRlLT5hcy5wcywKLQkJCQkJCQkJCQkJCSAgbGlzdF9s ZW5ndGgobm9kZS0+YWIuc3VicGxhbnMpLAotCQkJCQkJCQkJCQkJICBub2RlLT5hYi5wYXJ0X3By dW5lX2luZGV4LAotCQkJCQkJCQkJCQkJICBub2RlLT5hYi5hcHByZWxpZHMsCi0JCQkJCQkJCQkJ CQkgICZ2YWxpZHN1YnBsYW5zKTsKLQkJbWVyZ2VzdGF0ZS0+YXMucHJ1bmVfc3RhdGUgPSBwcnVu ZXN0YXRlOwotCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7Ci0KLQkJ LyoKLQkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdz IGF0IGxlYXN0IG9uZQotCQkgKiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCBtc192YWxpZF9zdWJwbGFu cyBpbW1lZGlhdGVseSwgcHJldmVudGluZwotCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1h dGNoaW5nU3ViUGxhbnMuCi0JCSAqLwotCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUg JiYgbnBsYW5zID4gMCkKLQkJCW1lcmdlc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zID0gYm1zX2Fk ZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKLQl9Ci0JZWxzZQotCXsKLQkJbnBsYW5zID0g bGlzdF9sZW5ndGgobm9kZS0+YWIuc3VicGxhbnMpOworCS8qIEluaXRpYWxpemUgY29tbW9uIGZp ZWxkcyAqLworCUV4ZWNJbml0QXBwZW5kQmFzZSgmbWVyZ2VzdGF0ZS0+YXMsCisJCQkJCSAgICZu b2RlLT5hYiwKKwkJCQkJICAgZXN0YXRlLAorCQkJCQkgICBlZmxhZ3MsCisJCQkJCSAgIC0xLAor CQkJCQkgICBOVUxMKTsKIAotCQkvKgotCQkgKiBXaGVuIHJ1bi10aW1lIHBhcnRpdGlvbiBwcnVu aW5nIGlzIG5vdCBlbmFibGVkIHdlIGNhbiBqdXN0IG1hcmsgYWxsCi0JCSAqIHN1YnBsYW5zIGFz IHZhbGlkOyB0aGV5IG11c3QgYWxzbyBhbGwgYmUgaW5pdGlhbGl6ZWQuCi0JCSAqLwotCQlBc3Nl cnQobnBsYW5zID4gMCk7Ci0JCW1lcmdlc3RhdGUtPmFzLnZhbGlkX3N1YnBsYW5zID0gdmFsaWRz dWJwbGFucyA9Ci0JCQlibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwotCQltZXJn ZXN0YXRlLT5hcy5wcnVuZV9zdGF0ZSA9IE5VTEw7Ci0JfQotCi0JbWVyZ2VwbGFuc3RhdGVzID0g cGFsbG9jX2FycmF5KFBsYW5TdGF0ZSAqLCBucGxhbnMpOwotCW1lcmdlc3RhdGUtPmFzLnBsYW5z ID0gbWVyZ2VwbGFuc3RhdGVzOwotCW1lcmdlc3RhdGUtPmFzLm5wbGFucyA9IG5wbGFuczsKLQot CW1lcmdlc3RhdGUtPm1zX3Nsb3RzID0gcGFsbG9jMF9hcnJheShUdXBsZVRhYmxlU2xvdCAqLCBu cGxhbnMpOwotCW1lcmdlc3RhdGUtPm1zX2hlYXAgPSBiaW5hcnloZWFwX2FsbG9jYXRlKG5wbGFu cywgaGVhcF9jb21wYXJlX3Nsb3RzLAorCW1lcmdlc3RhdGUtPm1zX3Nsb3RzID0gcGFsbG9jMF9h cnJheShUdXBsZVRhYmxlU2xvdCAqLCBtZXJnZXN0YXRlLT5hcy5ucGxhbnMpOworCW1lcmdlc3Rh dGUtPm1zX2hlYXAgPSBiaW5hcnloZWFwX2FsbG9jYXRlKG1lcmdlc3RhdGUtPmFzLm5wbGFucywg aGVhcF9jb21wYXJlX3Nsb3RzLAogCQkJCQkJCQkJCQkgIG1lcmdlc3RhdGUpOwogCi0JLyoKLQkg KiBjYWxsIEV4ZWNJbml0Tm9kZSBvbiBlYWNoIG9mIHRoZSB2YWxpZCBwbGFucyB0byBiZSBleGVj dXRlZCBhbmQgc2F2ZQotCSAqIHRoZSByZXN1bHRzIGludG8gdGhlIG1lcmdlcGxhbnN0YXRlcyBh cnJheS4KLQkgKi8KLQlqID0gMDsKLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVt YmVyKHZhbGlkc3VicGxhbnMsIGkpKSA+PSAwKQotCXsKLQkJUGxhbgkgICAqaW5pdE5vZGUgPSAo UGxhbiAqKSBsaXN0X250aChub2RlLT5hYi5zdWJwbGFucywgaSk7Ci0KLQkJbWVyZ2VwbGFuc3Rh dGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZsYWdzKTsKLQl9Ci0K LQkvKgotCSAqIEluaXRpYWxpemUgTWVyZ2VBcHBlbmQncyByZXN1bHQgdHVwbGUgdHlwZSBhbmQg c2xvdC4gIElmIHRoZSBjaGlsZAotCSAqIHBsYW5zIGFsbCBwcm9kdWNlIHRoZSBzYW1lIGZpeGVk IHNsb3QgdHlwZSwgd2UgY2FuIHVzZSB0aGF0IHNsb3QgdHlwZTsKLQkgKiBvdGhlcndpc2UgbWFr ZSBhIHZpcnR1YWwgc2xvdC4gIChOb3RlIHRoYXQgdGhlIHJlc3VsdCBzbG90IGl0c2VsZiBpcwot CSAqIHVzZWQgb25seSB0byByZXR1cm4gYSBudWxsIHR1cGxlIGF0IGVuZCBvZiBleGVjdXRpb247 IHJlYWwgdHVwbGVzIGFyZQotCSAqIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgaW4gdGhlIGNoaWxk cmVuJ3Mgb3duIHJlc3VsdCBzbG90cy4gIFdoYXQgd2UgYXJlCi0JICogZG9pbmcgaGVyZSBpcyBh bGxvd2luZyB0aGUgcGFyZW50IHBsYW4gbm9kZSB0byBvcHRpbWl6ZSBpZiB0aGUKLQkgKiBNZXJn ZUFwcGVuZCB3aWxsIHJldHVybiBvbmx5IG9uZSBraW5kIG9mIHNsb3QuKQotCSAqLwotCW1lcmdl b3BzID0gRXhlY0dldENvbW1vblNsb3RPcHMobWVyZ2VwbGFuc3RhdGVzLCBqKTsKLQlpZiAobWVy Z2VvcHMgIT0gTlVMTCkKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVwbGVTbG90VEwoJm1lcmdlc3Rh dGUtPmFzLnBzLCBtZXJnZW9wcyk7Ci0JfQotCWVsc2UKLQl7Ci0JCUV4ZWNJbml0UmVzdWx0VHVw bGVTbG90VEwoJm1lcmdlc3RhdGUtPmFzLnBzLCAmVFRTT3BzVmlydHVhbCk7Ci0JCS8qIHNob3cg dGhhdCB0aGUgb3V0cHV0IHNsb3QgdHlwZSBpcyBub3QgZml4ZWQgKi8KLQkJbWVyZ2VzdGF0ZS0+ YXMucHMucmVzdWx0b3Bzc2V0ID0gdHJ1ZTsKLQkJbWVyZ2VzdGF0ZS0+YXMucHMucmVzdWx0b3Bz Zml4ZWQgPSBmYWxzZTsKLQl9Ci0KLQkvKgotCSAqIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRp b24KLQkgKi8KLQltZXJnZXN0YXRlLT5hcy5wcy5wc19Qcm9qSW5mbyA9IE5VTEw7Ci0KIAkvKgog CSAqIGluaXRpYWxpemUgc29ydC1rZXkgaW5mb3JtYXRpb24KIAkgKi8KQEAgLTMzNSw1OSArMjU1 LDE0IEBAIGhlYXBfY29tcGFyZV9zbG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpCiB2 b2lkCiBFeGVjRW5kTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIHsKLQlQbGFu U3RhdGUgKiptZXJnZXBsYW5zOwotCWludAkJCW5wbGFuczsKLQlpbnQJCQlpOwotCi0JLyoKLQkg KiBnZXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZQotCSAqLwotCW1lcmdlcGxhbnMgPSBub2Rl LT5hcy5wbGFuczsKLQlucGxhbnMgPSBub2RlLT5hcy5ucGxhbnM7Ci0KLQkvKgotCSAqIHNodXQg ZG93biBlYWNoIG9mIHRoZSBzdWJzY2FucwotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7 IGkrKykKLQkJRXhlY0VuZE5vZGUobWVyZ2VwbGFuc1tpXSk7CisJRXhlY0VuZEFwcGVuZEJhc2Uo Jm5vZGUtPmFzKTsKIH0KIAogdm9pZAogRXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5k U3RhdGUgKm5vZGUpCiB7Ci0JaW50CQkJaTsKKwlFeGVjUmVTY2FuQXBwZW5kQmFzZSgmbm9kZS0+ YXMpOwogCi0JLyoKLQkgKiBJZiBhbnkgUEFSQU1fRVhFQyBQYXJhbXMgdXNlZCBpbiBwcnVuaW5n IGV4cHJlc3Npb25zIGhhdmUgY2hhbmdlZCwgdGhlbgotCSAqIHdlJ2QgYmV0dGVyIHVuc2V0IHRo ZSB2YWxpZCBzdWJwbGFucyBzbyB0aGF0IHRoZXkgYXJlIHJlc2VsZWN0ZWQgZm9yCi0JICogdGhl IG5ldyBwYXJhbWV0ZXIgdmFsdWVzLgotCSAqLwotCWlmIChub2RlLT5hcy5wcnVuZV9zdGF0ZSAm JgotCQlibXNfb3ZlcmxhcChub2RlLT5hcy5wcy5jaGdQYXJhbSwKLQkJCQkJbm9kZS0+YXMucHJ1 bmVfc3RhdGUtPmV4ZWNwYXJhbWlkcykpCi0JewotCQlibXNfZnJlZShub2RlLT5hcy52YWxpZF9z dWJwbGFucyk7Ci0JCW5vZGUtPmFzLnZhbGlkX3N1YnBsYW5zID0gTlVMTDsKLQl9Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgbm9kZS0+YXMubnBsYW5zOyBpKyspCi0JewotCQlQbGFuU3RhdGUgICpzdWJu b2RlID0gbm9kZS0+YXMucGxhbnNbaV07Ci0KLQkJLyoKLQkJICogRXhlY1JlU2NhbiBkb2Vzbid0 IGtub3cgYWJvdXQgbXkgc3VicGxhbnMsIHNvIEkgaGF2ZSB0byBkbwotCQkgKiBjaGFuZ2VkLXBh cmFtZXRlciBzaWduYWxpbmcgbXlzZWxmLgotCQkgKi8KLQkJaWYgKG5vZGUtPmFzLnBzLmNoZ1Bh cmFtICE9IE5VTEwpCi0JCQlVcGRhdGVDaGFuZ2VkUGFyYW1TZXQoc3Vibm9kZSwgbm9kZS0+YXMu cHMuY2hnUGFyYW0pOwotCi0JCS8qCi0JCSAqIElmIGNoZ1BhcmFtIG9mIHN1Ym5vZGUgaXMgbm90 IG51bGwgdGhlbiBwbGFuIHdpbGwgYmUgcmUtc2Nhbm5lZCBieQotCQkgKiBmaXJzdCBFeGVjUHJv Y05vZGUuCi0JCSAqLwotCQlpZiAoc3Vibm9kZS0+Y2hnUGFyYW0gPT0gTlVMTCkKLQkJCUV4ZWNS ZVNjYW4oc3Vibm9kZSk7Ci0JfQogCWJpbmFyeWhlYXBfcmVzZXQobm9kZS0+bXNfaGVhcCk7CiAJ bm9kZS0+bXNfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNBcHBlbmQuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNBcHBlbmQu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYThmNDFiYWQ5MjEKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQXBwZW5kLmgKQEAgLTAs MCArMSwyNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBleGVjQXBwZW5kLmgKKyAqCQlTdXBw b3J0IGZ1bmN0aW9ucyBmb3IgTWVyZ2VBcHBlbmQgYW5kIEFwcGVuZCBub2Rlcy4KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCQlzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjQXBwZW5k LmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgRVhFQ0FQUEVORF9ICisjZGVm aW5lIEVYRUNBUFBFTkRfSAorCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisKK2V4dGVy biB2b2lkIEV4ZWNJbml0QXBwZW5kQmFzZShBcHBlbmRCYXNlU3RhdGUgKnN0YXRlLAorCQkJCQkJ CSAgIEFwcGVuZEJhc2UgKm5vZGUsCisJCQkJCQkJICAgRVN0YXRlICplc3RhdGUsCisJCQkJCQkJ ICAgaW50IGVmbGFncywKKwkJCQkJCQkgICBpbnQgZmlyc3RfcGFydGlhbF9wbGFuLAorCQkJCQkJ CSAgIGludCAqZmlyc3RfdmFsaWRfcGFydGlhbF9wbGFuKTsKK2V4dGVybiB2b2lkIEV4ZWNFbmRB cHBlbmRCYXNlKEFwcGVuZEJhc2VTdGF0ZSAqbm9kZSk7CitleHRlcm4gdm9pZCBFeGVjUmVTY2Fu QXBwZW5kQmFzZShBcHBlbmRCYXNlU3RhdGUgKm5vZGUpOworCisjZW5kaWYJCQkJCQkJLyogRVhF Q0FQUEVORF9IICovCi0tIAoyLjM5LjUgKEFwcGxlIEdpdC0xNTQpCgo= --000000000000085fe4064ed3bfdb--