Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uosTi-00C6tQ-Oy for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Aug 2025 23:44:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uosTi-00CLVG-6c for pgsql-hackers@arkaria.postgresql.org; Wed, 20 Aug 2025 23:44:26 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uosTh-00CLUf-GP for pgsql-hackers@lists.postgresql.org; Wed, 20 Aug 2025 23:44:26 +0000 Received: from mail-vk1-xa29.google.com ([2607:f8b0:4864:20::a29]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uosTe-000vSi-33 for pgsql-hackers@lists.postgresql.org; Wed, 20 Aug 2025 23:44:25 +0000 Received: by mail-vk1-xa29.google.com with SMTP id 71dfb90a1353d-53b1718837dso196538e0c.0 for ; Wed, 20 Aug 2025 16:44:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755733463; x=1756338263; darn=lists.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=FW0dcBt2oPpKZsURPVcuPmkUxXFKQIY/RsduUG5XBFs=; b=EwvotEYw314UYLVUqRCBd1korq3oo/lI30ZjiXbrSFfTmB66JKpz+wXBzbRU3F8XL6 LA6USkS+hD864cW4yLUWuUnO+5rqjBac2Nr0HxhO1mCk6xjogbme/ZRDNYTWY41WrD1Z CO+oCHJLGH5W0o0bD1uhXsU99yRP+hmROFQkfFFsFXc7Qo6e/ejGaCE/Zjw05pCPifnE l226xewa7fl+DeifCjySjRh4W5Wmx8Wz4e7YPNCoP11kMoVUl5b8be8fEopADLYZWTLD GMcdVth6BhN4NWUkCH7mnbEP4zF0ASRoTg4BdcTd/uKGS26tMpN7JRfAJ5VA+V+yulZP CFyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755733463; x=1756338263; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=FW0dcBt2oPpKZsURPVcuPmkUxXFKQIY/RsduUG5XBFs=; b=cJhVgG5HN2iP+TjWyfkMRkRM/9vim7aHEiEzb4m9wln56lXNRnsZ4iIjVA7meF1pLU ViyphTsaUo9bVMqwbulitvFaIlUAgvCpvvQhBvbf7dE+kTwLWFkXGvXkT54ag+PfdBi1 +mGQGbKLSs1Zdyr5P7Jq1wRjSxWSnVLhZODkTz6aqHQd95bh+rKUG6jLYwqodtCHVKMZ htpiYNFbhlnTzQNQwxCW5PzzY5pfFxfUQqv5gKlq2Obj3lctN6ZF/lZGl8Kil1UNLoaI Y5l2UkiCAjuYZcEr30L38nICPWR+lA1aMrTR0PEwYqoZa9FBK4Eg62TEQywMbKUWJ/Fm LZmA== X-Forwarded-Encrypted: i=1; AJvYcCXtzhjC/ic25pPZzTCC+2oiG8MyHv1bkXfGibAJChp2xJ8NvAbqQyWWnZuWVJSR6WPG0WnYVeH2RQzaYNvG@lists.postgresql.org X-Gm-Message-State: AOJu0Ywcv7JuUpgJxavayLM//csy9AjwlA8boST9sLk3Uh4nFWJkg5Dv 7UpXfF8u/DngeGE4e9zDjdC5e/CS9dMsdSSKHcZIgb9iJQxixmsnbxya3G8cblGEdoz+NeBFabR 7OtsKOfv//P+5yu+b29S6ASYZ+ECJszM= X-Gm-Gg: ASbGncuB09R5S6b6/9V/4GX/jg882bly9Tz/VumE7x5Q+IBJcY8ftKJomgTz1n4nFma Th2o41Ob+/FbM0rGt8Cd7p0mk35RLtqQA1Yt9nrWei1YjGhyXDA6xC4WGtxgoPc0SG/2VlTCjKt QcNP9gcC+TOKyZhWsYWKZGKTDHVnk+Toi6i2vZyWnFQjvLAayEMCU65D2Q+1rJ3wOoENC/cozN7 D/fIm0= X-Google-Smtp-Source: AGHT+IFSd6mpZTKo3SmMKqTBsCJaEaE/8VScNd1WMOyOBemgG0xMFZHnexEdRyLJZ+mfR5BwYsgPht0YEgpdRSm2b10= X-Received: by 2002:a05:6102:41a8:b0:4da:fc9d:f0c with SMTP id ada2fe7eead31-51bdf24b159mr139821137.12.1755733462776; Wed, 20 Aug 2025 16:44:22 -0700 (PDT) MIME-Version: 1.0 References: <202508091333.qvgvo7ikuezm@alvherre.pgsql> In-Reply-To: <202508091333.qvgvo7ikuezm@alvherre.pgsql> From: Mihail Nikalayeu Date: Thu, 21 Aug 2025 01:44:00 +0200 X-Gm-Features: Ac12FXwL2NnaJtVPBHGzEmSfTu2e3TUTb_2Bwv_PEXNaah9FPVNZR2zi9kOxG2A Message-ID: Subject: Re: Adding REPACK [concurrently] To: Alvaro Herrera Cc: Fujii Masao , Robert Treat , Pg Hackers , Antonin Houska Content-Type: multipart/mixed; boundary="0000000000005ea692063cd48d63" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005ea692063cd48d63 Content-Type: text/plain; charset="UTF-8" Hello everyone! Alvaro Herrera : > Please note that Antonin already implemented this. See his patches > here: > https://www.postgresql.org/message-id/77690.1725610115%40antos > I proposed to leave this part out initially, which is why it hasn't been > reposted. We can review and discuss after the initial patches are in. I think it is worth pushing it at least in the same release cycle. > But you're welcome to review that part specifically if you're so > inclined, and offer feedback on it. (I suggest to rewind back your > checked-out tree to branch master at the time that patch was posted, for > easy application. We can deal with a rebase later.) I have rebased that on top of v18 (attached). Also, I think I found an issue (or lost something during rebase): we must preserve xmin,cmin during initial copy to make sure that data is going to be visible by snapshots of concurrent changes later: static void reform_and_rewrite_tuple(......) ..... /*It is also crucial to stamp the new record with the exact same xid and cid, * because the tuple must be visible to the snapshot of the applied concurrent * change later. */ CommandId cid = HeapTupleHeaderGetRawCommandId(tuple->t_data); TransactionId xid = HeapTupleHeaderGetXmin(tuple->t_data); heap_insert(NewHeap, copiedTuple, xid, cid, HEAP_INSERT_NO_LOGICAL, NULL); I'll try to polish that part a little bit. > Because having an MVCC-safe mode has drawbacks, IMO we should make it > optional. Do you mean some option for the command? Like REPACK (CONCURRENTLY, SAFE)? Best regards, Mikhail. --0000000000005ea692063cd48d63 Content-Type: application/octet-stream; name="v18-0006-Preserve-visibility-information-of-the-concurren.patch" Content-Disposition: attachment; filename="v18-0006-Preserve-visibility-information-of-the-concurren.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mekjjcpz0 RnJvbSBiMmY0ZDEyNmUwNGQwMzk2ZjhhZDY5ZjUxMTNlZDQwNWE0ZWZkNzIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVGh1LCAyMSBBdWcgMjAyNSAwMDoxOToyNCArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjE4IDYvNl0gUHJlc2VydmUgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBvZiB0aGUgY29u Y3VycmVudAogZGF0YSAgY2hhbmdlcy4KCkFzIGV4cGxhaW5lZCBpbiB0aGUgY29tbWl0IG1lc3Nh Z2Ugb2YgdGhlIHByZWNlZGluZyBwYXRjaCBvZiB0aGUgc2VyaWVzLCB0aGUKZGF0YSBjaGFuZ2Vz IGRvbmUgYnkgYXBwbGljYXRpb25zIHdoaWxlIFJFUEFDSyBDT05DVVJSRU5UTFkgaXMgY29weWlu ZyB0aGUKdGFibGUgY29udGVudHMgdG8gYSBuZXcgZmlsZSBhcmUgZGVjb2RlZCBmcm9tIFdBTCBh bmQgZXZlbnR1YWxseSBhbHNvIGFwcGxpZWQKdG8gdGhlIG5ldyBmaWxlLiBUbyByZWR1Y2UgdGhl IGNvbXBsZXhpdHkgYSBsaXR0bGUgYml0LCB0aGUgcHJlY2VkaW5nIHBhdGNoCnVzZXMgdGhlIGN1 cnJlbnQgdHJhbnNhY3Rpb24gKGkuZS4gdHJhbnNhY3Rpb24gb3BlbmVkIGJ5IHRoZSBSRVBBQ0sg Y29tbWFuZCkKdG8gZXhlY3V0ZSB0aG9zZSBJTlNFUlQsIFVQREFURSBhbmQgREVMRVRFIGNvbW1h bmRzLgoKSG93ZXZlciwgUkVQQUNLIGlzIG5vdCBleHBlY3RlZCB0byBjaGFuZ2UgdmlzaWJpbGl0 eSBvZiB0dXBsZXMuIFRoZXJlZm9yZSwKdGhpcyBwYXRjaCBmaXhlcyB0aGUgaGFuZGxpbmcgb2Yg dGhlICJjb25jdXJyZW50IGRhdGEgY2hhbmdlcyIuIEl0IGVuc3VyZXMKdGhhdCB0dXBsZXMgd3Jp dHRlbiBpbnRvIHRoZSBuZXcgdGFibGUgaGF2ZSB0aGUgc2FtZSBYSUQgYW5kIGNvbW1hbmQgSUQg KENJRCkKYXMgdGhleSBoYWQgaW4gdGhlIG9sZCB0YWJsZS4KClRvICJyZXBsYXkiIGFuIFVQREFU RSBvciBERUxFVEUgY29tbWFuZCBvbiB0aGUgbmV3IHRhYmxlLCB3ZSBuZWVkIHRoZQphcHByb3By aWF0ZSBzbmFwc2hvdCB0byBmaW5kIHRoZSBwcmV2aW91cyB0dXBsZSB2ZXJzaW9uIGluIHRoZSBu ZXcgdGFibGUuIFRoZQooaGlzdG9yaWMpIHNuYXBzaG90IHdlIHVzZWQgdG8gZGVjb2RlIHRoZSBV UERBVEUgLyBERUxFVEUgc2hvdWxkIChieQpkZWZpbml0aW9uKSBzZWUgdGhlIHN0YXRlIG9mIHRo ZSBjYXRhbG9nIHByaW9yIHRvIHRoYXQgVVBEQVRFIC8gREVMRVRFLiBUaHVzCndlIGNhbiB1c2Ug dGhlIHNhbWUgc25hcHNob3QgdG8gZmluZCB0aGUgIm9sZCB0dXBsZSIgZm9yIFVQREFURSAvIERF TEVURSBpbgp0aGUgbmV3IHRhYmxlIGlmOgoKMSkgUkVQQUNLIENPTkNVUlJFTlRMWSBwcmVzZXJ2 ZXMgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBvZiBhbGwgdHVwbGVzIC0gdGhhdCdzCnRoZSBwdXJw b3NlIG9mIHRoaXMgcGFydCBvZiB0aGUgcGF0Y2ggc2VyaWVzLgoKMikgVGhlIHRhYmxlIGJlaW5n IFJFUEFDS2VkIGlzIHRyZWF0ZWQgYXMgYSBzeXN0ZW0gY2F0YWxvZyBieSBhbGwgdHJhbnNhY3Rp b25zCnRoYXQgbW9kaWZ5IGl0cyBkYXRhLiBUaGlzIGVuc3VyZXMgdGhhdCByZW9yZGVyYnVmZmVy LmMgZ2VuZXJhdGVzIGEgbmV3CnNuYXBzaG90IGZvciBlYWNoIGRhdGEgY2hhbmdlIGluIHRoZSB0 YWJsZS4KCldlIGVuc3VyZSAyKSBieSBtYWludGFpbmluZyBhIHNoYXJlZCBoYXNodGFibGUgb2Yg dGFibGVzIGJlaW5nIFJFUEFDS2VkCkNPTkNVUlJFTlRMWSBhbmQgYnkgYWRqdXN0aW5nIHRoZSBS ZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNhbERlY29kaW5nKCkKbWFjcm8gc28gaXQgY2hlY2tz IHRoaXMgaGFzaHRhYmxlLiAoVGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBpcyBhbHNvIGFkZGVkIHRv CnRoZSByZWxhdGlvbiBjYWNoZSwgc28gdGhhdCB0aGUgc2hhcmVkIGhhc2h0YWJsZSBkb2VzIG5v dCBoYXZlIHRvIGJlIGFjY2Vzc2VkCnRvbyBvZnRlbi4pIEl0J3MgZXNzZW50aWFsIHRoYXQgYWZ0 ZXIgYWRkaW5nIGFuIGVudHJ5IHRvIHRoZSBoYXNodGFibGUgd2Ugd2FpdApmb3IgY29tcGxldGlv biBvZiBhbGwgdGhlIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgc3RhcnRlZCB0byBtb2Rp Znkgb3VyCnRhYmxlIGJlZm9yZSBvdXIgZW50cnkgaGFzIHdhcyBhZGRlZC4gV2UgYWNoaWV2ZSB0 aGF0IGJ5IHVwZ3JhZGluZyBvdXIgbG9jayBvbgp0aGUgdGFibGUgdG8gU2hhcmVMb2NrIHRlbXBv cmFyaWx5OiBhcyBzb29uIGFzIHdlIGFjcXVpcmUgaXQsIG5vIERNTCBjb21tYW5kCnNob3VsZCBi ZSBydW5uaW5nIG9uIHRoZSB0YWJsZS4gKFRoaXMgbG9jayB1cGdyYWRlIHNob3VsZG4ndCBjYXVz ZSBhbnkKZGVhZGxvY2sgYmVjYXVzZSB3ZSBjYXJlIHRvIG5vdCBob2xkIGEgbG9jayBvbiBvdGhl ciBvYmplY3RzIGF0IHRoZSBzYW1lCnRpbWUuKQoKQXMgbG9uZyBhcyB3ZSBwcmVzZXJ2ZSB0aGUg dHVwbGUgdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiAod2hpY2ggaW5jbHVkZXMgWElEKSwKaXQncyBp bXBvcnRhbnQgdG8gYXZvaWQgbG9naWNhbCBkZWNvZGluZyBvZiB0aGUgV0FMIGdlbmVyYXRlZCBi eSBETUxzIG9uIHRoZQpuZXcgdGFibGU6IHRoZSBsb2dpY2FsIGRlY29kaW5nIHN1YnN5c3RlbSBw cm9iYWJseSBkb2VzIG5vdCBleHBlY3QgdGhhdCB0aGUKaW5jb21pbmcgV0FMIHJlY29yZHMgY29u dGFpbiBYSURzIG9mIGFuIGFscmVhZHkgZGVjb2RlZCB0cmFuc2FjdGlvbnMuIChBbmQgb2YKY291 cnNlLCByZXBlYXRlZCBkZWNvZGluZyB3b3VsZCBiZSB3YXN0ZWQgZWZmb3J0LikKCkF1dGhvcjog QW50b25pbiBIb3Vza2EgPGFoQGN5YmVydGVjLmF0PiB3aXRoIHNtYWxsIGNoYW5nZXMgZnJvbSBN aWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdtYWlsLmNvbQo+Ci0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYyAgIHwgICAzICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgICAgICAgfCAgNTQgKystCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAgMjMgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICAgICAgICB8ICA1MiArKysKIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2NsdXN0ZXIuYyAgICAgICAgICAgICAgICB8IDQwMCArKysrKysrKysrKysr KysrLS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICAy OCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyAgIHwgIDIy ICstCiAuLi4vcGdvdXRwdXRfcmVwYWNrL3Bnb3V0cHV0X3JlcGFjay5jICAgICAgICAgfCAgNjgg KystCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICAgICAgICAgfCAgIDIg KwogLi4uL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0ICAgICAgIHwgICAxICsK IHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMgICAgICAgICAgICAgICB8ICAyMSArCiBz cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgIDQgKwogc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDEyICstCiBzcmMv aW5jbHVkZS9hY2Nlc3MveGFjdC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvY29tbWFuZHMvY2x1c3Rlci5oICAgICAgICAgICAgICAgIHwgIDIyICsKIHNyYy9pbmNs dWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS91dGlscy9pbnZhbC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUv dXRpbHMvcmVsLmggICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS91 dGlscy9zbmFwc2hvdC5oICAgICAgICAgICAgICAgICAgfCAgIDMgKwogLi4uL2luamVjdGlvbl9w b2ludHMvc3BlY3MvcmVwYWNrLnNwZWMgICAgICAgIHwgICA0IC0KIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMSArCiAyMSBmaWxlcyBjaGFuZ2VkLCA2 MzYgaW5zZXJ0aW9ucygrKSwgOTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2NvbW1vbi90b2FzdF9pbnRlcm5hbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9j b21tb24vdG9hc3RfaW50ZXJuYWxzLmMKaW5kZXggYTFkMGVlZDg5NTMuLjU4NmViNDJhMTM3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3RvYXN0X2ludGVybmFscy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vdG9hc3RfaW50ZXJuYWxzLmMKQEAgLTMyMCw3 ICszMjAsOCBAQCB0b2FzdF9zYXZlX2RhdHVtKFJlbGF0aW9uIHJlbCwgRGF0dW0gdmFsdWUsCiAJ CW1lbWNweShWQVJEQVRBKCZjaHVua19kYXRhKSwgZGF0YV9wLCBjaHVua19zaXplKTsKIAkJdG9h c3R0dXAgPSBoZWFwX2Zvcm1fdHVwbGUodG9hc3R0dXBEZXNjLCB0X3ZhbHVlcywgdF9pc251bGwp OwogCi0JCWhlYXBfaW5zZXJ0KHRvYXN0cmVsLCB0b2FzdHR1cCwgbXljaWQsIG9wdGlvbnMsIE5V TEwpOworCQloZWFwX2luc2VydCh0b2FzdHJlbCwgdG9hc3R0dXAsIEdldEN1cnJlbnRUcmFuc2Fj dGlvbklkKCksIG15Y2lkLAorCQkJCQlvcHRpb25zLCBOVUxMKTsKIAogCQkvKgogCQkgKiBDcmVh dGUgdGhlIGluZGV4IGVudHJ5LiAgV2UgY2hlYXQgYSBsaXR0bGUgaGVyZSBieSBub3QgdXNpbmcK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggNGZkYjNlODgwZTQuLmU3YjlmN2I2Mzc0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtMjA1OSw3ICsyMDU5LDcgQEAgUmVsZWFzZUJ1 bGtJbnNlcnRTdGF0ZVBpbihCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSkKIC8qCiAgKgloZWFwX2lu c2VydAkJLSBpbnNlcnQgdHVwbGUgaW50byBhIGhlYXAKICAqCi0gKiBUaGUgbmV3IHR1cGxlIGlz IHN0YW1wZWQgd2l0aCBjdXJyZW50IHRyYW5zYWN0aW9uIElEIGFuZCB0aGUgc3BlY2lmaWVkCisg KiBUaGUgbmV3IHR1cGxlIGlzIHN0YW1wZWQgd2l0aCBzcGVjaWZpZWQgdHJhbnNhY3Rpb24gSUQg YW5kIHRoZSBzcGVjaWZpZWQKICAqIGNvbW1hbmQgSUQuCiAgKgogICogU2VlIHRhYmxlX3R1cGxl X2luc2VydCBmb3IgY29tbWVudHMgYWJvdXQgbW9zdCBvZiB0aGUgaW5wdXQgZmxhZ3MsIGV4Y2Vw dApAQCAtMjA3NSwxNSArMjA3NSwxNiBAQCBSZWxlYXNlQnVsa0luc2VydFN0YXRlUGluKEJ1bGtJ bnNlcnRTdGF0ZSBiaXN0YXRlKQogICogcmVmbGVjdGVkIGludG8gKnR1cC4KICAqLwogdm9pZAot aGVhcF9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBj aWQsCi0JCQlpbnQgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpCitoZWFwX2luc2Vy dChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJ CQlDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpCiB7 Ci0JVHJhbnNhY3Rpb25JZCB4aWQgPSBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOwogCUhlYXBU dXBsZQloZWFwdHVwOwogCUJ1ZmZlcgkJYnVmZmVyOwogCUJ1ZmZlcgkJdm1idWZmZXIgPSBJbnZh bGlkQnVmZmVyOwogCWJvb2wJCWFsbF92aXNpYmxlX2NsZWFyZWQgPSBmYWxzZTsKIAorCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKKwogCS8qIENoZWFwLCBzaW1wbGlzdGljIGNo ZWNrIHRoYXQgdGhlIHR1cGxlIG1hdGNoZXMgdGhlIHJlbCdzIHJvd3R5cGUuICovCiAJQXNzZXJ0 KEhlYXBUdXBsZUhlYWRlckdldE5hdHRzKHR1cC0+dF9kYXRhKSA8PQogCQkgICBSZWxhdGlvbkdl dE51bWJlck9mQXR0cmlidXRlcyhyZWxhdGlvbikpOwpAQCAtMjE2NSw4ICsyMTY2LDE1IEBAIGhl YXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHVwLCBDb21tYW5kSWQgY2lk LAogCQkvKgogCQkgKiBJZiB0aGlzIGlzIGEgY2F0YWxvZywgd2UgbmVlZCB0byB0cmFuc21pdCBj b21ibyBDSURzIHRvIHByb3Blcmx5CiAJCSAqIGRlY29kZSwgc28gbG9nIHRoYXQgYXMgd2VsbC4K KwkJICoKKwkJICogSEVBUF9JTlNFUlRfTk9fTE9HSUNBTCBzaG91bGQgYmUgc2V0IHdoZW4gYXBw bHlpbmcgZGF0YSBjaGFuZ2VzCisJCSAqIGRvbmUgYnkgb3RoZXIgdHJhbnNhY3Rpb25zIGR1cmlu ZyBSRVBBQ0sgQ09OQ1VSUkVOVExZLiBJbiBzdWNoIGEKKwkJICogY2FzZSwgdGhlIGluc2VydGlv biBzaG91bGQgbm90IGJlIGRlY29kZWQgYXQgYWxsIC0gc2VlCisJCSAqIGhlYXBfZGVjb2RlKCku IChJdCdzIGFsc28gc2V0IGJ5IHJhd19oZWFwX2luc2VydCgpIGZvciBUT0FTVCwgYnV0CisJCSAq IFRPQVNUIGRvZXMgbm90IHBhc3MgdGhpcyB0ZXN0IGFueXdheS4pCiAJCSAqLwotCQlpZiAoUmVs YXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhyZWxhdGlvbikpCisJCWlmICgob3B0 aW9ucyAmIEhFQVBfSU5TRVJUX05PX0xPR0lDQUwpID09IDAgJiYKKwkJCVJlbGF0aW9uSXNBY2Nl c3NpYmxlSW5Mb2dpY2FsRGVjb2RpbmcocmVsYXRpb24pKQogCQkJbG9nX2hlYXBfbmV3X2NpZChy ZWxhdGlvbiwgaGVhcHR1cCk7CiAKIAkJLyoKQEAgLTI3MTIsNyArMjcyMCw4IEBAIGhlYXBfbXVs dGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQg bnR1cGxlcywKIHZvaWQKIHNpbXBsZV9oZWFwX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVh cFR1cGxlIHR1cCkKIHsKLQloZWFwX2luc2VydChyZWxhdGlvbiwgdHVwLCBHZXRDdXJyZW50Q29t bWFuZElkKHRydWUpLCAwLCBOVUxMKTsKKwloZWFwX2luc2VydChyZWxhdGlvbiwgdHVwLCBHZXRD dXJyZW50VHJhbnNhY3Rpb25JZCgpLAorCQkJCUdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksIDAs IE5VTEwpOwogfQogCiAvKgpAQCAtMjc2OSwxMSArMjc3OCwxMSBAQCB4bWF4X2luZm9tYXNrX2No YW5nZWQodWludDE2IG5ld19pbmZvbWFzaywgdWludDE2IG9sZF9pbmZvbWFzaykKICAqLwogVE1f UmVzdWx0CiBoZWFwX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkLAot CQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAotCQkJVE1f RmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0LCBib29sIHdhbF9sb2dpY2FsKQor CQkJVHJhbnNhY3Rpb25JZCB4aWQsIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ss IGJvb2wgd2FpdCwKKwkJCVRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFydCwK KwkJCWJvb2wgd2FsX2xvZ2ljYWwpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKLQlUcmFuc2FjdGlv bklkIHhpZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CiAJSXRlbUlkCQlscDsKIAlIZWFw VHVwbGVEYXRhIHRwOwogCVBhZ2UJCXBhZ2U7CkBAIC0yNzkwLDYgKzI3OTksNyBAQCBoZWFwX2Rl bGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkLAogCWJvb2wJCW9sZF9rZXlf Y29waWVkID0gZmFsc2U7CiAKIAlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKHRpZCkpOworCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIAogCUFzc2VydEhhc1NuYXBzaG90Rm9y VG9hc3QocmVsYXRpb24pOwogCkBAIC0zMDg2LDggKzMwOTYsMTIgQEAgbDE6CiAJCS8qCiAJCSAq IEZvciBsb2dpY2FsIGRlY29kZSB3ZSBuZWVkIGNvbWJvIENJRHMgdG8gcHJvcGVybHkgZGVjb2Rl IHRoZQogCQkgKiBjYXRhbG9nCisJCSAqCisJCSAqIExpa2UgaW4gaGVhcF9pbnNlcnQoKSwgdmlz aWJpbGl0eSBpcyB1bmNoYW5nZWQgd2hlbiBjYWxsZWQgZnJvbQorCQkgKiBWQUNVVU0gRlVMTCAv IENMVVNURVIuCiAJCSAqLwotCQlpZiAoUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNv ZGluZyhyZWxhdGlvbikpCisJCWlmICh3YWxfbG9naWNhbCAmJgorCQkJUmVsYXRpb25Jc0FjY2Vz c2libGVJbkxvZ2ljYWxEZWNvZGluZyhyZWxhdGlvbikpCiAJCQlsb2dfaGVhcF9uZXdfY2lkKHJl bGF0aW9uLCAmdHApOwogCiAJCXhscmVjLmZsYWdzID0gMDsKQEAgLTMyMDYsMTEgKzMyMjAsMTEg QEAgc2ltcGxlX2hlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQp CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAlUTV9GYWlsdXJlRGF0YSB0bWZkOwogCi0JcmVzdWx0ID0g aGVhcF9kZWxldGUocmVsYXRpb24sIHRpZCwKKwlyZXN1bHQgPSBoZWFwX2RlbGV0ZShyZWxhdGlv biwgdGlkLCBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpLAogCQkJCQkJIEdldEN1cnJlbnRDb21t YW5kSWQodHJ1ZSksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSB0cnVlIC8qIHdhaXQgZm9yIGNv bW1pdCAqLyAsCi0JCQkJCQkgJnRtZmQsIGZhbHNlLCAvKiBjaGFuZ2luZ1BhcnQgKi8KLQkJCQkJ CSB0cnVlIC8qIHdhbF9sb2dpY2FsICovKTsKKwkJCQkJCSAmdG1mZCwgZmFsc2UsCS8qIGNoYW5n aW5nUGFydCAqLworCQkJCQkJIHRydWUgLyogd2FsX2xvZ2ljYWwgKi8gKTsKIAlzd2l0Y2ggKHJl c3VsdCkKIAl7CiAJCWNhc2UgVE1fU2VsZk1vZGlmaWVkOgpAQCAtMzI0OSwxMiArMzI2MywxMSBA QCBzaW1wbGVfaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCkK ICAqLwogVE1fUmVzdWx0CiBoZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50 ZXIgb3RpZCwgSGVhcFR1cGxlIG5ld3R1cCwKLQkJCUNvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNy b3NzY2hlY2ssIGJvb2wgd2FpdCwKLQkJCVRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVN b2RlICpsb2NrbW9kZSwKKwkJCVRyYW5zYWN0aW9uSWQgeGlkLCBDb21tYW5kSWQgY2lkLCBTbmFw c2hvdCBjcm9zc2NoZWNrLAorCQkJYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9j a1R1cGxlTW9kZSAqbG9ja21vZGUsCiAJCQlUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhl cywgYm9vbCB3YWxfbG9naWNhbCkKIHsKIAlUTV9SZXN1bHQJcmVzdWx0OwotCVRyYW5zYWN0aW9u SWQgeGlkID0gR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKIAlCaXRtYXBzZXQgICpob3RfYXR0 cnM7CiAJQml0bWFwc2V0ICAqc3VtX2F0dHJzOwogCUJpdG1hcHNldCAgKmtleV9hdHRyczsKQEAg LTMyOTQsNiArMzMwNyw3IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9p bnRlciBvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCQkJCWluZm9tYXNrMl9uZXdfdHVwbGU7CiAK IAlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKG90aWQpKTsKKwlBc3NlcnQoVHJhbnNhY3Rpb25J ZElzVmFsaWQoeGlkKSk7CiAKIAkvKiBDaGVhcCwgc2ltcGxpc3RpYyBjaGVjayB0aGF0IHRoZSB0 dXBsZSBtYXRjaGVzIHRoZSByZWwncyByb3d0eXBlLiAqLwogCUFzc2VydChIZWFwVHVwbGVIZWFk ZXJHZXROYXR0cyhuZXd0dXAtPnRfZGF0YSkgPD0KQEAgLTQxMzMsOCArNDE0NywxMiBAQCBsMjoK IAkJLyoKIAkJICogRm9yIGxvZ2ljYWwgZGVjb2Rpbmcgd2UgbmVlZCBjb21ibyBDSURzIHRvIHBy b3Blcmx5IGRlY29kZSB0aGUKIAkJICogY2F0YWxvZy4KKwkJICoKKwkJICogTGlrZSBpbiBoZWFw X2luc2VydCgpLCB2aXNpYmlsaXR5IGlzIHVuY2hhbmdlZCB3aGVuIGNhbGxlZCBmcm9tCisJCSAq IFZBQ1VVTSBGVUxMIC8gQ0xVU1RFUi4KIAkJICovCi0JCWlmIChSZWxhdGlvbklzQWNjZXNzaWJs ZUluTG9naWNhbERlY29kaW5nKHJlbGF0aW9uKSkKKwkJaWYgKHdhbF9sb2dpY2FsICYmCisJCQlS ZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNhbERlY29kaW5nKHJlbGF0aW9uKSkKIAkJewogCQkJ bG9nX2hlYXBfbmV3X2NpZChyZWxhdGlvbiwgJm9sZHR1cCk7CiAJCQlsb2dfaGVhcF9uZXdfY2lk KHJlbGF0aW9uLCBoZWFwdHVwKTsKQEAgLTQ1MDAsNyArNDUxOCw3IEBAIHNpbXBsZV9oZWFwX3Vw ZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwgSGVhcFR1cGxlIHR1cCwK IAlUTV9GYWlsdXJlRGF0YSB0bWZkOwogCUxvY2tUdXBsZU1vZGUgbG9ja21vZGU7CiAKLQlyZXN1 bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgb3RpZCwgdHVwLAorCXJlc3VsdCA9IGhlYXBfdXBk YXRlKHJlbGF0aW9uLCBvdGlkLCB0dXAsIEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCksCiAJCQkJ CQkgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwgSW52YWxpZFNuYXBzaG90LAogCQkJCQkJIHRy dWUgLyogd2FpdCBmb3IgY29tbWl0ICovICwKIAkJCQkJCSAmdG1mZCwgJmxvY2ttb2RlLCB1cGRh dGVfaW5kZXhlcywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4 IGM4MjljMDZmNzY5Li5jNDJhMWJkNTVlZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCkBAIC0yNTMsNyArMjUzLDggQEAgaGVhcGFtX3R1cGxlX2luc2VydChSZWxh dGlvbiByZWxhdGlvbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIENvbW1hbmRJZCBjaWQsCiAJdHVw bGUtPnRfdGFibGVPaWQgPSBzbG90LT50dHNfdGFibGVPaWQ7CiAKIAkvKiBQZXJmb3JtIHRoZSBp bnNlcnRpb24sIGFuZCBjb3B5IHRoZSByZXN1bHRpbmcgSXRlbVBvaW50ZXIgKi8KLQloZWFwX2lu c2VydChyZWxhdGlvbiwgdHVwbGUsIGNpZCwgb3B0aW9ucywgYmlzdGF0ZSk7CisJaGVhcF9pbnNl cnQocmVsYXRpb24sIHR1cGxlLCBHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpLCBjaWQsIG9wdGlv bnMsCisJCQkJYmlzdGF0ZSk7CiAJSXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xv dC0+dHRzX3RpZCk7CiAKIAlpZiAoc2hvdWxkRnJlZSkKQEAgLTI3Niw3ICsyNzcsOCBAQCBoZWFw YW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlKFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRhYmxl U2xvdCAqc2xvdCwKIAlvcHRpb25zIHw9IEhFQVBfSU5TRVJUX1NQRUNVTEFUSVZFOwogCiAJLyog UGVyZm9ybSB0aGUgaW5zZXJ0aW9uLCBhbmQgY29weSB0aGUgcmVzdWx0aW5nIEl0ZW1Qb2ludGVy ICovCi0JaGVhcF9pbnNlcnQocmVsYXRpb24sIHR1cGxlLCBjaWQsIG9wdGlvbnMsIGJpc3RhdGUp OworCWhlYXBfaW5zZXJ0KHJlbGF0aW9uLCB0dXBsZSwgR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQo KSwgY2lkLCBvcHRpb25zLAorCQkJCWJpc3RhdGUpOwogCUl0ZW1Qb2ludGVyQ29weSgmdHVwbGUt PnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOwogCiAJaWYgKHNob3VsZEZyZWUpCkBAIC0zMTAsOCAr MzEyLDggQEAgaGVhcGFtX3R1cGxlX2RlbGV0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50 ZXIgdGlkLCBDb21tYW5kSWQgY2lkLAogCSAqIHRoZSBzdG9yYWdlIGl0c2VsZiBpcyBjbGVhbmlu ZyB0aGUgZGVhZCB0dXBsZXMgYnkgaXRzZWxmLCBpdCBpcyB0aGUKIAkgKiB0aW1lIHRvIGNhbGwg dGhlIGluZGV4IHR1cGxlIGRlbGV0aW9uIGFsc28uCiAJICovCi0JcmV0dXJuIGhlYXBfZGVsZXRl KHJlbGF0aW9uLCB0aWQsIGNpZCwgY3Jvc3NjaGVjaywgd2FpdCwgdG1mZCwgY2hhbmdpbmdQYXJ0 LAotCQkJCQkgICB0cnVlKTsKKwlyZXR1cm4gaGVhcF9kZWxldGUocmVsYXRpb24sIHRpZCwgR2V0 Q3VycmVudFRyYW5zYWN0aW9uSWQoKSwgY2lkLAorCQkJCQkgICBjcm9zc2NoZWNrLCB3YWl0LCB0 bWZkLCBjaGFuZ2luZ1BhcnQsIHRydWUpOwogfQogCiAKQEAgLTMyOSw3ICszMzEsOCBAQCBoZWFw YW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKIAlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlk KHJlbGF0aW9uKTsKIAl0dXBsZS0+dF90YWJsZU9pZCA9IHNsb3QtPnR0c190YWJsZU9pZDsKIAot CXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXBsZSwgY2lkLCBjcm9zc2No ZWNrLCB3YWl0LAorCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBvdGlkLCB0dXBsZSwg R2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKSwKKwkJCQkJCSBjaWQsIGNyb3NzY2hlY2ssIHdhaXQs CiAJCQkJCQkgdG1mZCwgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzLCB0cnVlKTsKIAlJdGVtUG9p bnRlckNvcHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKIApAQCAtMjQ3Nyw5ICsy NDgwLDE1IEBAIHJlZm9ybV9hbmRfcmV3cml0ZV90dXBsZShIZWFwVHVwbGUgdHVwbGUsCiAJCSAq IGZsYWcgdG8gc2tpcCBsb2dpY2FsIGRlY29kaW5nOiBhcyBzb29uIGFzIFJFUEFDSyBDT05DVVJS RU5UTFkgc3dhcHMKIAkJICogdGhlIHJlbGF0aW9uIGZpbGVzLCBpdCBkcm9wcyB0aGlzIHJlbGF0 aW9uLCBzbyBubyBsb2dpY2FsCiAJCSAqIHJlcGxpY2F0aW9uIHN1YnNjcmlwdGlvbiBzaG91bGQg bmVlZCB0aGUgZGF0YS4KKwkJICoKKwkJKiBJdCBpcyBhbHNvIGNydWNpYWwgdG8gc3RhbXAgdGhl IG5ldyByZWNvcmQgd2l0aCB0aGUgZXhhY3Qgc2FtZSB4aWQgYW5kIGNpZCwKKwkJKiBiZWNhdXNl IHRoZSB0dXBsZSBtdXN0IGJlIHZpc2libGUgdG8gdGhlIHNuYXBzaG90IG9mIHRoZSBhcHBsaWVk IGNvbmN1cnJlbnQKKwkJKiBjaGFuZ2UgbGF0ZXIuCiAJCSAqLwotCQloZWFwX2luc2VydChOZXdI ZWFwLCBjb3BpZWRUdXBsZSwgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKLQkJCQkJSEVBUF9J TlNFUlRfTk9fTE9HSUNBTCwgTlVMTCk7CisJCUNvbW1hbmRJZAkJY2lkID0gSGVhcFR1cGxlSGVh ZGVyR2V0UmF3Q29tbWFuZElkKHR1cGxlLT50X2RhdGEpOworCQlUcmFuc2FjdGlvbklkCXhpZCA9 IEhlYXBUdXBsZUhlYWRlckdldFhtaW4odHVwbGUtPnRfZGF0YSk7CisKKwkJaGVhcF9pbnNlcnQo TmV3SGVhcCwgY29waWVkVHVwbGUsIHhpZCwgY2lkLCBIRUFQX0lOU0VSVF9OT19MT0dJQ0FMLCBO VUxMKTsKIAl9CiAKIAloZWFwX2ZyZWV0dXBsZShjb3BpZWRUdXBsZSk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94YWN0LmMKaW5kZXggNTY3MGYyYmZiZGUuLmU5MTM1OTRmYzA3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGFjdC5jCkBAIC0xMjYsNiArMTI2LDE4IEBAIHN0YXRpYyBGdWxsVHJhbnNhY3Rp b25JZCBYYWN0VG9wRnVsbFRyYW5zYWN0aW9uSWQgPSB7SW52YWxpZFRyYW5zYWN0aW9uSWR9Owog c3RhdGljIGludAluUGFyYWxsZWxDdXJyZW50WGlkcyA9IDA7CiBzdGF0aWMgVHJhbnNhY3Rpb25J ZCAqUGFyYWxsZWxDdXJyZW50WGlkczsKIAorLyoKKyAqIEFub3RoZXIgY2FzZSB0aGF0IHJlcXVp cmVzIFRyYW5zYWN0aW9uSWRJc0N1cnJlbnRUcmFuc2FjdGlvbklkKCkgdG8gYmVoYXZlCisgKiBz cGVjaWFsbHkgaXMgd2hlbiBSRVBBQ0sgQ09OQ1VSUkVOVExZIGlzIHByb2Nlc3NpbmcgZGF0YSBj aGFuZ2VzIG1hZGUgaW4KKyAqIHRoZSBvbGQgc3RvcmFnZSBvZiBhIHRhYmxlIGJ5IG90aGVyIHRy YW5zYWN0aW9ucy4gV2hlbiBhcHBseWluZyB0aGUgY2hhbmdlcworICogdG8gdGhlIG5ldyBzdG9y YWdlLCB0aGUgYmFja2VuZCBleGVjdXRpbmcgdGhlIENMVVNURVIgY29tbWFuZCBuZWVkcyB0byBh Y3QKKyAqIG9uIGJlaGFsZiBvbiB0aG9zZSBvdGhlciB0cmFuc2FjdGlvbnMuIFRoZSB0cmFuc2Fj dGlvbnMgcmVzcG9uc2libGUgZm9yIHRoZQorICogY2hhbmdlcyBpbiB0aGUgb2xkIHN0b3JhZ2Ug YXJlIHN0b3JlZCBpbiB0aGlzIGFycmF5LCBzb3J0ZWQgYnkKKyAqIHhpZENvbXBhcmF0b3IuCisg Ki8KK3N0YXRpYyBpbnQJblJlcGFja0N1cnJlbnRYaWRzID0gMDsKK3N0YXRpYyBUcmFuc2FjdGlv bklkICpSZXBhY2tDdXJyZW50WGlkcyA9IE5VTEw7CisKIC8qCiAgKiBNaXNjZWxsYW5lb3VzIGZs YWcgYml0cyB0byByZWNvcmQgZXZlbnRzIHdoaWNoIG9jY3VyIG9uIHRoZSB0b3AgbGV2ZWwKICAq IHRyYW5zYWN0aW9uLiBUaGVzZSBmbGFncyBhcmUgb25seSBwZXJzaXN0ZWQgaW4gTXlYYWN0Rmxh Z3MgYW5kIGFyZSBpbnRlbmRlZApAQCAtOTczLDYgKzk4NSw4IEBAIFRyYW5zYWN0aW9uSWRJc0N1 cnJlbnRUcmFuc2FjdGlvbklkKFRyYW5zYWN0aW9uSWQgeGlkKQogCQlpbnQJCQlsb3csCiAJCQkJ CWhpZ2g7CiAKKwkJQXNzZXJ0KG5SZXBhY2tDdXJyZW50WGlkcyA9PSAwKTsKKwogCQlsb3cgPSAw OwogCQloaWdoID0gblBhcmFsbGVsQ3VycmVudFhpZHMgLSAxOwogCQl3aGlsZSAobG93IDw9IGhp Z2gpCkBAIC05OTIsNiArMTAwNiwyMSBAQCBUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJhbnNhY3Rp b25JZChUcmFuc2FjdGlvbklkIHhpZCkKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCS8qCisJICog V2hlbiBleGVjdXRpbmcgQ0xVU1RFUiBDT05DVVJSRU5UTFksIHRoZSBhcnJheSBvZiBjdXJyZW50 IHRyYW5zYWN0aW9ucworCSAqIGlzIGdpdmVuLgorCSAqLworCWlmIChuUmVwYWNrQ3VycmVudFhp ZHMgPiAwKQorCXsKKwkJQXNzZXJ0KG5QYXJhbGxlbEN1cnJlbnRYaWRzID09IDApOworCisJCXJl dHVybiBic2VhcmNoKCZ4aWQsCisJCQkJCSAgIFJlcGFja0N1cnJlbnRYaWRzLAorCQkJCQkgICBu UmVwYWNrQ3VycmVudFhpZHMsCisJCQkJCSAgIHNpemVvZihUcmFuc2FjdGlvbklkKSwKKwkJCQkJ ICAgeGlkQ29tcGFyYXRvcikgIT0gTlVMTDsKKwl9CisKIAkvKgogCSAqIFdlIHdpbGwgcmV0dXJu IHRydWUgZm9yIHRoZSBYaWQgb2YgdGhlIGN1cnJlbnQgc3VidHJhbnNhY3Rpb24sIGFueSBvZgog CSAqIGl0cyBzdWJjb21taXR0ZWQgY2hpbGRyZW4sIGFueSBvZiBpdHMgcGFyZW50cywgb3IgYW55 IG9mIHRoZWlyCkBAIC01NjYxLDYgKzU2OTAsMjkgQEAgRW5kUGFyYWxsZWxXb3JrZXJUcmFuc2Fj dGlvbih2b2lkKQogCUN1cnJlbnRUcmFuc2FjdGlvblN0YXRlLT5ibG9ja1N0YXRlID0gVEJMT0NL X0RFRkFVTFQ7CiB9CiAKKy8qCisgKiBTZXRSZXBhY2tDdXJyZW50WGlkcworICoJCVNldCB0aGUg WElEIGFycmF5IHRoYXQgVHJhbnNhY3Rpb25JZElzQ3VycmVudFRyYW5zYWN0aW9uSWQoKSBzaG91 bGQKKyAqCQl1c2UuCisgKi8KK3ZvaWQKK1NldFJlcGFja0N1cnJlbnRYaWRzKFRyYW5zYWN0aW9u SWQgKnhpcCwgaW50IHhjbnQpCit7CisJUmVwYWNrQ3VycmVudFhpZHMgPSB4aXA7CisJblJlcGFj a0N1cnJlbnRYaWRzID0geGNudDsKK30KKworLyoKKyAqIFJlc2V0UmVwYWNrQ3VycmVudFhpZHMK KyAqCQlVbmRvIHRoZSBlZmZlY3Qgb2YgU2V0UmVwYWNrQ3VycmVudFhpZHMoKS4KKyAqLwordm9p ZAorUmVzZXRSZXBhY2tDdXJyZW50WGlkcyh2b2lkKQoreworCVJlcGFja0N1cnJlbnRYaWRzID0g TlVMTDsKKwluUmVwYWNrQ3VycmVudFhpZHMgPSAwOworfQorCiAvKgogICogU2hvd1RyYW5zYWN0 aW9uU3RhdGUKICAqCQlEZWJ1ZyBzdXBwb3J0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jbHVzdGVyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jbHVzdGVyLmMKaW5kZXggYWEz YWU4NWJjZWUuLmE0ZDRkMzdkMjExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9j bHVzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY2x1c3Rlci5jCkBAIC04Miw2ICs4 MiwxMSBAQCB0eXBlZGVmIHN0cnVjdAogICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUg dXNlZCBmb3IgY29uY3VycmVudCBwcm9jZXNzaW5nLgogICovCiAKKy8qCisgKiBPSUQgb2YgdGhl IHRhYmxlIGJlaW5nIHJlcGFja2VkIGJ5IHRoaXMgYmFja2VuZC4KKyAqLworc3RhdGljIE9pZAly ZXBhY2tlZF9yZWwgPSBJbnZhbGlkT2lkOworCiAvKgogICogVGhlIGxvY2F0b3JzIGFyZSB1c2Vk IHRvIGF2b2lkIGxvZ2ljYWwgZGVjb2Rpbmcgb2YgZGF0YSB0aGF0IHdlIGRvIG5vdCBuZWVkCiAg KiBmb3Igb3VyIHRhYmxlLgpAQCAtMTI1LDggKzEzMCwxMCBAQCBzdGF0aWMgTGlzdCAqZ2V0X3Rh Ymxlc190b19yZXBhY2tfcGFydGl0aW9uZWQoUmVwYWNrQ29tbWFuZCBjbWQsCiBzdGF0aWMgYm9v bCBjbHVzdGVyX2lzX3Blcm1pdHRlZF9mb3JfcmVsYXRpb24oUmVwYWNrQ29tbWFuZCBjbWQsCiAJ CQkJCQkJCQkJCSAgT2lkIHJlbGlkLCBPaWQgdXNlcmlkKTsKIAotc3RhdGljIHZvaWQgYmVnaW5f Y29uY3VycmVudF9yZXBhY2soUmVsYXRpb24gcmVsKTsKLXN0YXRpYyB2b2lkIGVuZF9jb25jdXJy ZW50X3JlcGFjayh2b2lkKTsKK3N0YXRpYyB2b2lkIGJlZ2luX2NvbmN1cnJlbnRfcmVwYWNrKFJl bGF0aW9uIHJlbCwgUmVsYXRpb24gKmluZGV4X3AsCisJCQkJCQkJCQlib29sICplbnRlcmVkX3Ap Oworc3RhdGljIHZvaWQgZW5kX2NvbmN1cnJlbnRfcmVwYWNrKGJvb2wgZXJyb3IpOworc3RhdGlj IHZvaWQgY2x1c3Rlcl9iZWZvcmVfc2htZW1fZXhpdF9jYWxsYmFjayhpbnQgY29kZSwgRGF0dW0g YXJnKTsKIHN0YXRpYyBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpzZXR1cF9sb2dpY2FsX2RlY29k aW5nKE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNsb3RuYW1lLAogCQkJ CQkJCQkJCQkJCSAgVHVwbGVEZXNjIHR1cGRlc2MpOwpAQCAtMTQ2LDYgKzE1Myw3IEBAIHN0YXRp YyB2b2lkIGFwcGx5X2NvbmN1cnJlbnRfZGVsZXRlKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1 cF90YXJnZXQsCiAJCQkJCQkJCQlDb25jdXJyZW50Q2hhbmdlICpjaGFuZ2UpOwogc3RhdGljIEhl YXBUdXBsZSBmaW5kX3RhcmdldF90dXBsZShSZWxhdGlvbiByZWwsIFNjYW5LZXkga2V5LCBpbnQg bmtleXMsCiAJCQkJCQkJCSAgIEhlYXBUdXBsZSB0dXBfa2V5LAorCQkJCQkJCQkgICBTbmFwc2hv dCBzbmFwc2hvdCwKIAkJCQkJCQkJICAgSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwKIAkJCQkJ CQkJICAgVHVwbGVUYWJsZVNsb3QgKmlkZW50X3Nsb3QsCiAJCQkJCQkJCSAgIEluZGV4U2NhbkRl c2MgKnNjYW5fcCk7CkBAIC00MzcsNiArNDQ1LDggQEAgY2x1c3Rlcl9yZWwoUmVwYWNrQ29tbWFu ZCBjbWQsIGJvb2wgdXNpbmdpbmRleCwKIAlib29sCQl2ZXJib3NlID0gKChwYXJhbXMtPm9wdGlv bnMgJiBDTFVPUFRfVkVSQk9TRSkgIT0gMCk7CiAJYm9vbAkJcmVjaGVjayA9ICgocGFyYW1zLT5v cHRpb25zICYgQ0xVT1BUX1JFQ0hFQ0spICE9IDApOwogCWJvb2wJCWNvbmN1cnJlbnQgPSAoKHBh cmFtcy0+b3B0aW9ucyAmIENMVU9QVF9DT05DVVJSRU5UKSAhPSAwKTsKKwlib29sCQllbnRlcmVk LAorCQkJCXN1Y2Nlc3M7CiAKIAkvKgogCSAqIENoZWNrIHRoYXQgdGhlIGNvcnJlY3QgbG9jayBp cyBoZWxkLiBUaGUgbG9jayBtb2RlIGlzCkBAIC02MDcsMjMgKzYxNywzMCBAQCBjbHVzdGVyX3Jl bChSZXBhY2tDb21tYW5kIGNtZCwgYm9vbCB1c2luZ2luZGV4LAogCQlUcmFuc2ZlclByZWRpY2F0 ZUxvY2tzVG9IZWFwUmVsYXRpb24oT2xkSGVhcCk7CiAKIAkvKiByZWJ1aWxkX3JlbGF0aW9uIGRv ZXMgYWxsIHRoZSBkaXJ0eSB3b3JrICovCisJZW50ZXJlZCA9IGZhbHNlOworCXN1Y2Nlc3MgPSBm YWxzZTsKIAlQR19UUlkoKTsKIAl7CiAJCS8qCi0JCSAqIEZvciBjb25jdXJyZW50IHByb2Nlc3Np bmcsIG1ha2Ugc3VyZSB0aGF0IG91ciBsb2dpY2FsIGRlY29kaW5nCi0JCSAqIGlnbm9yZXMgZGF0 YSBjaGFuZ2VzIG9mIG90aGVyIHRhYmxlcyB0aGFuIHRoZSBvbmUgd2UgYXJlCi0JCSAqIHByb2Nl c3NpbmcuCisJCSAqIEZvciBjb25jdXJyZW50IHByb2Nlc3NpbmcsIG1ha2Ugc3VyZSB0aGF0CisJ CSAqCisJCSAqIDEpIG91ciBsb2dpY2FsIGRlY29kaW5nIGlnbm9yZXMgZGF0YSBjaGFuZ2VzIG9m IG90aGVyIHRhYmxlcyB0aGFuCisJCSAqIHRoZSBvbmUgd2UgYXJlIHByb2Nlc3NpbmcuCisJCSAq CisJCSAqIDIpIG90aGVyIHRyYW5zYWN0aW9ucyB0cmVhdCB0aGlzIHRhYmxlIGFzIGlmIGl0IHdh cyBhIHN5c3RlbSAvIHVzZXIKKwkJICogY2F0YWxvZywgYW5kIFdBTCB0aGUgcmVsZXZhbnQgYWRk aXRpb25hbCBpbmZvcm1hdGlvbi4KIAkJICovCiAJCWlmIChjb25jdXJyZW50KQotCQkJYmVnaW5f Y29uY3VycmVudF9yZXBhY2soT2xkSGVhcCk7CisJCQliZWdpbl9jb25jdXJyZW50X3JlcGFjayhP bGRIZWFwLCAmaW5kZXgsICZlbnRlcmVkKTsKIAogCQlyZWJ1aWxkX3JlbGF0aW9uKGNtZCwgdXNp bmdpbmRleCwgT2xkSGVhcCwgaW5kZXgsIHNhdmVfdXNlcmlkLAogCQkJCQkJIHZlcmJvc2UsIGNv bmN1cnJlbnQpOworCQlzdWNjZXNzID0gdHJ1ZTsKIAl9CiAJUEdfRklOQUxMWSgpOwogCXsKLQkJ aWYgKGNvbmN1cnJlbnQpCi0JCQllbmRfY29uY3VycmVudF9yZXBhY2soKTsKKwkJaWYgKGNvbmN1 cnJlbnQgJiYgZW50ZXJlZCkKKwkJCWVuZF9jb25jdXJyZW50X3JlcGFjayghc3VjY2Vzcyk7CiAJ fQogCVBHX0VORF9UUlkoKTsKIApAQCAtMjM4Myw2ICsyNDAwLDQ3IEBAIGRldGVybWluZV9jbHVz dGVyZWRfaW5kZXgoUmVsYXRpb24gcmVsLCBib29sIHVzaW5naW5kZXgsIGNvbnN0IGNoYXIgKmlu ZGV4bmFtZSkKIH0KIAogCisvKgorICogRWFjaCByZWxhdGlvbiBiZWluZyBwcm9jZXNzZWQgYnkg UkVQQUNLIENPTkNVUlJFTlRMWSBtdXN0IGJlIGluIHRoZQorICogcmVwYWNrZWRSZWxzIGhhc2h0 YWJsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUmVwYWNrZWRSZWwKK3sKKwlPaWQJCQlyZWxpZDsK KwlPaWQJCQlkYmlkOworfSBSZXBhY2tlZFJlbDsKKworc3RhdGljIEhUQUIgKlJlcGFja2VkUmVs c0hhc2ggPSBOVUxMOworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUg aGFzaHRhYmxlLgorICoKKyAqIEEgcmVwbGljYXRpb24gc2xvdCBpcyBuZWVkZWQgZm9yIHRoZSBw cm9jZXNzaW5nLCBzbyB1c2UgdGhpcyBHVUMgdG8KKyAqIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhl IGhhc2h0YWJsZS4KKyAqLworI2RlZmluZQlNQVhfUkVQQUNLRURfUkVMUwkobWF4X3JlcGxpY2F0 aW9uX3Nsb3RzKQorCitTaXplCitSZXBhY2tTaG1lbVNpemUodm9pZCkKK3sKKwlyZXR1cm4gaGFz aF9lc3RpbWF0ZV9zaXplKE1BWF9SRVBBQ0tFRF9SRUxTLCBzaXplb2YoUmVwYWNrZWRSZWwpKTsK K30KKwordm9pZAorUmVwYWNrU2htZW1Jbml0KHZvaWQpCit7CisJSEFTSENUTAkJaW5mbzsKKwor CWluZm8ua2V5c2l6ZSA9IHNpemVvZihSZXBhY2tlZFJlbCk7CisJaW5mby5lbnRyeXNpemUgPSBp bmZvLmtleXNpemU7CisKKwlSZXBhY2tlZFJlbHNIYXNoID0gU2htZW1Jbml0SGFzaCgiUmVwYWNr ZWQgUmVsYXRpb25zIiwKKwkJCQkJCQkJCSBNQVhfUkVQQUNLRURfUkVMUywKKwkJCQkJCQkJCSBN QVhfUkVQQUNLRURfUkVMUywKKwkJCQkJCQkJCSAmaW5mbywKKwkJCQkJCQkJCSBIQVNIX0VMRU0g fCBIQVNIX0JMT0JTKTsKK30KKwogLyoKICAqIENhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgUkVQ QUNLIENPTkNVUlJFTlRMWSBzdGFydHMgdG8gc2V0dXAgbG9naWNhbAogICogZGVjb2RpbmcuIEl0 IG1ha2VzIHN1cmUgdGhhdCBvdGhlciB1c2VycyBvZiB0aGUgdGFibGUgcHV0IGVub3VnaApAQCAt MjM5NywxMSArMjQ1NSwxMTkgQEAgZGV0ZXJtaW5lX2NsdXN0ZXJlZF9pbmRleChSZWxhdGlvbiBy ZWwsIGJvb2wgdXNpbmdpbmRleCwgY29uc3QgY2hhciAqaW5kZXhuYW1lKQogICoKICAqIE5vdGUg dGhhdCBUT0FTVCB0YWJsZSBuZWVkcyBubyBhdHRlbnRpb24gaGVyZSBhcyBpdCdzIG5vdCBzY2Fu bmVkIHVzaW5nCiAgKiBoaXN0b3JpYyBzbmFwc2hvdC4KKyAqCisgKiAnaW5kZXhfcCcgaXMgaW4v b3V0IGFyZ3VtZW50IGJlY2F1c2UgdGhlIGZ1bmN0aW9uIHVubG9ja3MgdGhlIGluZGV4CisgKiB0 ZW1wb3JhcmlseS4KKyAqCisgKiAnZW50ZXJfcCcgcmVjZWl2ZXMgYSBib29sIHZhbHVlIHRlbGxp bmcgd2hldGhlciByZWxhdGlvbiBPSUQgd2FzIGVudGVyZWQKKyAqIGludG8gUmVwYWNrZWRSZWxz SGFzaCBvciBub3QuCiAgKi8KIHN0YXRpYyB2b2lkCi1iZWdpbl9jb25jdXJyZW50X3JlcGFjayhS ZWxhdGlvbiByZWwpCitiZWdpbl9jb25jdXJyZW50X3JlcGFjayhSZWxhdGlvbiByZWwsIFJlbGF0 aW9uICppbmRleF9wLCBib29sICplbnRlcmVkX3ApCiB7Ci0JT2lkCQkJdG9hc3RyZWxpZDsKKwlP aWQJCQlyZWxpZCwKKwkJCQl0b2FzdHJlbGlkOworCVJlbGF0aW9uCWluZGV4ID0gTlVMTDsKKwlP aWQJCQlpbmRleGlkID0gSW52YWxpZE9pZDsKKwlSZXBhY2tlZFJlbCBrZXksCisJCQkgICAqZW50 cnk7CisJYm9vbAkJZm91bmQ7CisJc3RhdGljIGJvb2wgYmVmb3JlX3NobWVtX2V4aXRfY2FsbGJh Y2tfc2V0dXAgPSBmYWxzZTsKKworCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOworCWlu ZGV4ID0gaW5kZXhfcCA/ICppbmRleF9wIDogTlVMTDsKKworCS8qCisJICogTWFrZSBzdXJlIHRo YXQgd2UgZG8gbm90IGxlYXZlIGFuIGVudHJ5IGluIFJlcGFja2VkUmVsc0hhc2ggaWYgZXhpdGlu ZworCSAqIGR1ZSB0byBGQVRBTC4KKwkgKi8KKwlpZiAoIWJlZm9yZV9zaG1lbV9leGl0X2NhbGxi YWNrX3NldHVwKQorCXsKKwkJYmVmb3JlX3NobWVtX2V4aXQoY2x1c3Rlcl9iZWZvcmVfc2htZW1f ZXhpdF9jYWxsYmFjaywgMCk7CisJCWJlZm9yZV9zaG1lbV9leGl0X2NhbGxiYWNrX3NldHVwID0g dHJ1ZTsKKwl9CisKKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKGtleSkpOworCWtleS5yZWxpZCA9 IHJlbGlkOworCWtleS5kYmlkID0gTXlEYXRhYmFzZUlkOworCisJKmVudGVyZWRfcCA9IGZhbHNl OworCUxXTG9ja0FjcXVpcmUoUmVwYWNrZWRSZWxzTG9jaywgTFdfRVhDTFVTSVZFKTsKKwllbnRy eSA9IChSZXBhY2tlZFJlbCAqKQorCQloYXNoX3NlYXJjaChSZXBhY2tlZFJlbHNIYXNoLCAma2V5 LCBIQVNIX0VOVEVSX05VTEwsICZmb3VuZCk7CisJaWYgKGZvdW5kKQorCXsKKwkJLyoKKwkJICog U2luY2UgUkVQQUNLIENPTkNVUlJFTlRMWSB0YWtlcyBTaGFyZVJvd0V4Y2x1c2l2ZUxvY2ssIGEg Y29uZmxpY3QKKwkJICogc2hvdWxkIG9jY3VyIG11Y2ggZWFybGllci4gSG93ZXZlciB0aGF0IGxv Y2sgbWF5IGJlIHJlbGVhc2VkCisJCSAqIHRlbXBvcmFyaWx5LCBzZWUgYmVsb3cuICBBbnl3YXks IHdlIHNob3VsZCBjb21wbGFpbiB3aGF0ZXZlciB0aGUKKwkJICogcmVhc29uIG9mIHRoZSBjb25m bGljdCBtaWdodCBiZS4KKwkJICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygicmVs YXRpb24gXCIlc1wiIGlzIGFscmVhZHkgYmVpbmcgcHJvY2Vzc2VkIGJ5IFJFUEFDSyBDT05DVVJS RU5UTFkiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKKwl9CisJaWYg KGVudHJ5ID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygidG9vIG1hbnkg cmVxdWVzdHMgZm9yIFJFUEFDSyBDT05DVVJSRU5UTFkgYXQgYSB0aW1lIikpLAorCQkJCShlcnJo aW50KCJQbGVhc2UgY29uc2lkZXIgaW5jcmVhc2luZyB0aGUgXCJtYXhfcmVwbGljYXRpb25fc2xv dHNcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4iKSkpOworCisJLyoKKwkgKiBFdmVuIGlmIGFu eXRoaW5nIGZhaWxzIGJlbG93LCB0aGUgY2FsbGVyIGhhcyB0byBkbyBjbGVhbnVwIGluIHRoZQor CSAqIHNoYXJlZCBtZW1vcnkuCisJICovCisJKmVudGVyZWRfcCA9IHRydWU7CisKKwkvKgorCSAq IEVuYWJsZSB0aGUgY2FsbGJhY2sgdG8gcmVtb3ZlIHRoZSBlbnRyeSBpbiBjYXNlIG9mIGV4aXQu IFdlIHNob3VsZCBub3QKKwkgKiBkbyB0aGlzIGVhcmxpZXIsIG90aGVyd2lzZSBhbiBhdHRlbXB0 IHRvIGluc2VydCBhbHJlYWR5IGV4aXN0aW5nIGVudHJ5CisJICogY291bGQgbWFrZSB1cyByZW1v dmUgdGhhdCBlbnRyeSAoaW5zZXJ0ZWQgYnkgYW5vdGhlciBiYWNrZW5kKSBkdXJpbmcKKwkgKiBF UlJPUiBoYW5kbGluZy4KKwkgKi8KKwlBc3NlcnQoIU9pZElzVmFsaWQocmVwYWNrZWRfcmVsKSk7 CisJcmVwYWNrZWRfcmVsID0gcmVsaWQ7CisKKwlMV0xvY2tSZWxlYXNlKFJlcGFja2VkUmVsc0xv Y2spOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBvdGhlciBiYWNrZW5kcyBhcmUgYXdhcmUg b2YgdGhlIG5ldyBoYXNoIGVudHJ5IGFzIHNvb24KKwkgKiBhcyB0aGV5IG9wZW4gb3VyIHRhYmxl LgorCSAqLworCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlSW1tZWRpYXRlKHJlbGlkKTsKKworCS8q CisJICogQWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUgZXhpc3RpbmcgdXNlcnMgb2YgdGhlIHRhYmxl IHVwZGF0ZSB0aGVpcgorCSAqIHJlbGNhY2hlIGVudHJ5IGFzIHNvb24gYXMgdGhleSB0cnkgdG8g cnVuIERNTCBjb21tYW5kcyBvbiBpdC4KKwkgKgorCSAqIFNoYXJlTG9jayBpcyB0aGUgd2Vha2Vz dCBsb2NrIHRoYXQgY29uZmxpY3RzIHdpdGggRE1Mcy4gSWYgYW55IGJhY2tlbmQKKwkgKiBoYXMg YSBsb3dlciBsb2NrLCB3ZSBhc3N1bWUgaXQnbGwgYWNjZXB0IG91ciBpbnZhbGlkYXRpb24gbWVz c2FnZSB3aGVuCisJICogaXQgY2hhbmdlcyB0aGUgbG9jayBtb2RlLgorCSAqCisJICogQmVmb3Jl IHVwZ3JhZGluZyB0aGUgbG9jayBvbiB0aGUgcmVsYXRpb24sIGNsb3NlIHRoZSBpbmRleCB0ZW1w b3JhcmlseQorCSAqIHRvIGF2b2lkIGEgZGVhZGxvY2sgaWYgYW5vdGhlciBiYWNrZW5kIHJ1bm5p bmcgRE1MIGFscmVhZHkgaGFzIGl0cyBsb2NrCisJICogKFNoYXJlTG9jaykgb24gdGhlIHRhYmxl IGFuZCB3YWl0cyBmb3IgdGhlIGxvY2sgb24gdGhlIGluZGV4LgorCSAqLworCWlmIChpbmRleCkK Kwl7CisJCWluZGV4aWQgPSBSZWxhdGlvbkdldFJlbGlkKGluZGV4KTsKKwkJaW5kZXhfY2xvc2Uo aW5kZXgsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJfQorCUxvY2tSZWxhdGlvbk9pZChy ZWxpZCwgU2hhcmVMb2NrKTsKKwlVbmxvY2tSZWxhdGlvbk9pZChyZWxpZCwgU2hhcmVMb2NrKTsK KwlpZiAoT2lkSXNWYWxpZChpbmRleGlkKSkKKwl7CisJCS8qCisJCSAqIFJlLW9wZW4gdGhlIGlu ZGV4IGFuZCBjaGVjayB0aGF0IGl0IGhhc24ndCBjaGFuZ2VkIHdoaWxlIHVubG9ja2VkLgorCQkg Ki8KKwkJY2hlY2tfaW5kZXhfaXNfY2x1c3RlcmFibGUocmVsLCBpbmRleGlkLCBTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2spOworCisJCS8qCisJCSAqIFJldHVybiB0aGUgbmV3IHJlbGNhY2hlIGVu dHJ5IHRvIHRoZSBjYWxsZXIuIChJdCdzIGJlZW4gbG9ja2VkIGJ5CisJCSAqIHRoZSBjYWxsIGFi b3ZlLikKKwkJICovCisJCWluZGV4ID0gaW5kZXhfb3BlbihpbmRleGlkLCBOb0xvY2spOworCQkq aW5kZXhfcCA9IGluZGV4OworCX0KIAogCS8qIEF2b2lkIGxvZ2ljYWwgZGVjb2Rpbmcgb2Ygb3Ro ZXIgcmVsYXRpb25zIGJ5IHRoaXMgYmFja2VuZC4gKi8KIAlyZXBhY2tlZF9yZWxfbG9jYXRvciA9 IHJlbC0+cmRfbG9jYXRvcjsKQEAgLTI0MTksMTUgKzI1ODUsMTIyIEBAIGJlZ2luX2NvbmN1cnJl bnRfcmVwYWNrKFJlbGF0aW9uIHJlbCkKIAogLyoKICAqIENhbGwgdGhpcyB3aGVuIGRvbmUgd2l0 aCBSRVBBQ0sgQ09OQ1VSUkVOVExZLgorICoKKyAqICdlcnJvcicgdGVsbHMgd2hldGhlciB0aGUg ZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGluIG9yZGVyIHRvIGhhbmRsZQorICogZXJyb3IuCiAg Ki8KIHN0YXRpYyB2b2lkCi1lbmRfY29uY3VycmVudF9yZXBhY2sodm9pZCkKK2VuZF9jb25jdXJy ZW50X3JlcGFjayhib29sIGVycm9yKQogeworCVJlcGFja2VkUmVsIGtleTsKKwlSZXBhY2tlZFJl bCAqZW50cnkgPSBOVUxMOworCU9pZAkJCXJlbGlkID0gcmVwYWNrZWRfcmVsOworCisJLyogUmVt b3ZlIHRoZSByZWxhdGlvbiBmcm9tIHRoZSBoYXNoIGlmIHdlIG1hbmFnZWQgdG8gaW5zZXJ0IG9u ZS4gKi8KKwlpZiAoT2lkSXNWYWxpZChyZXBhY2tlZF9yZWwpKQorCXsKKwkJbWVtc2V0KCZrZXks IDAsIHNpemVvZihrZXkpKTsKKwkJa2V5LnJlbGlkID0gcmVwYWNrZWRfcmVsOworCQlrZXkuZGJp ZCA9IE15RGF0YWJhc2VJZDsKKwkJTFdMb2NrQWNxdWlyZShSZXBhY2tlZFJlbHNMb2NrLCBMV19F WENMVVNJVkUpOworCQllbnRyeSA9IGhhc2hfc2VhcmNoKFJlcGFja2VkUmVsc0hhc2gsICZrZXks IEhBU0hfUkVNT1ZFLCBOVUxMKTsKKwkJTFdMb2NrUmVsZWFzZShSZXBhY2tlZFJlbHNMb2NrKTsK KworCQkvKgorCQkgKiBNYWtlIG90aGVycyByZWZyZXNoIHRoZWlyIGluZm9ybWF0aW9uIHdoZXRo ZXIgdGhleSBzaG91bGQgc3RpbGwKKwkJICogdHJlYXQgdGhlIHRhYmxlIGFzIGNhdGFsb2cgZnJv bSB0aGUgcGVyc3BlY3RpdmUgb2Ygd3JpdGluZyBXQUwuCisJCSAqCisJCSAqIFhYWCBVbmxpa2Ug ZW50ZXJpbmcgdGhlIGVudHJ5IGludG8gdGhlIGhhc2h0YWJsZSwgd2UgZG8gbm90IGJvdGhlcgor CQkgKiB3aXRoIGxvY2tpbmcgYW5kIHVubG9ja2luZyB0aGUgdGFibGUgaGVyZToKKwkJICoKKwkJ ICogMSkgT24gbm9ybWFsIGNvbXBsZXRpb24gKGFuZCBzb21ldGltZXMgZXZlbiBvbiBFUlJPUiks IHRoZSBjYWxsZXIKKwkJICogaXMgYWxyZWFkeSBob2xkaW5nIEFjY2Vzc0V4Y2x1c2l2ZUxvY2sg b24gdGhlIHRhYmxlLCBzbyB0aGVyZQorCQkgKiBzaG91bGQgYmUgbm8gcmVsY2FjaGUgcmVmZXJl bmNlIHVuYXdhcmUgb2YgdGhpcyBjaGFuZ2UuCisJCSAqCisJCSAqIDIpIEluIHRoZSBvdGhlciBj YXNlcywgdGhlIHdvcnN0IHNjZW5hcmlvIGlzIHRoYXQgdGhlIG90aGVyCisJCSAqIGJhY2tlbmRz IHdpbGwgd3JpdGUgdW5uZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gV0FMIHVudGlsIHRoZXkgY2xv c2UKKwkJICogdGhlIHJlbGF0aW9uLgorCQkgKgorCQkgKiBTaG91bGQgd2UgdXNlIFNoYXJlTG9j ayBtb2RlIHRvIGZpeCAyKSBhdCBsZWFzdCBmb3IgdGhlIG5vbi1GQVRBTAorCQkgKiBlcnJvcnM/ IChPdXIgYmVmb3JlX3NobWVtX2V4aXQgY2FsbGJhY2sgaXMgaW4gY2hhcmdlIG9mIEZBVEFMLCBh bmQKKwkJICogdGhhdCBwcm9iYWJseSBzaG91bGQgbm90IHRyeSB0byBhY3F1aXJlIGFueSBsb2Nr LikKKwkJICovCisJCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlSW1tZWRpYXRlKHJlcGFja2VkX3Jl bCk7CisKKwkJLyoKKwkJICogQnkgY2xlYXJpbmcgdGhpcyB2YXJpYWJsZSB3ZSBhbHNvIGRpc2Fi bGUKKwkJICogY2x1c3Rlcl9iZWZvcmVfc2htZW1fZXhpdF9jYWxsYmFjaygpLgorCQkgKi8KKwkJ cmVwYWNrZWRfcmVsID0gSW52YWxpZE9pZDsKKwl9CisKIAkvKgogCSAqIFJlc3RvcmUgbm9ybWFs IGZ1bmN0aW9uIG9mIChmdXR1cmUpIGxvZ2ljYWwgZGVjb2RpbmcgZm9yIHRoaXMgYmFja2VuZC4K IAkgKi8KIAlyZXBhY2tlZF9yZWxfbG9jYXRvci5yZWxOdW1iZXIgPSBJbnZhbGlkT2lkOwogCXJl cGFja2VkX3JlbF90b2FzdF9sb2NhdG9yLnJlbE51bWJlciA9IEludmFsaWRPaWQ7CisKKwkvKgor CSAqIE9uIG5vcm1hbCBjb21wbGV0aW9uICghZXJyb3IpLCB3ZSBzaG91bGQgbm90IHJlYWxseSBm YWlsIHRvIHJlbW92ZSB0aGUKKwkgKiBlbnRyeS4gQnV0IGlmIGl0IHdhc24ndCB0aGVyZSBmb3Ig YW55IHJlYXNvbiwgcmFpc2UgRVJST1IgdG8gbWFrZSBzdXJlCisJICogdGhlIHRyYW5zYWN0aW9u IGlzIGFib3J0ZWQ6IGlmIG90aGVyIHRyYW5zYWN0aW9ucywgd2hpbGUgY2hhbmdpbmcgdGhlCisJ ICogY29udGVudHMgb2YgdGhlIHJlbGF0aW9uLCBkaWRuJ3Qga25vdyB0aGF0IFJFUEFDSyBDT05D VVJSRU5UTFkgd2FzIGluCisJICogcHJvZ3Jlc3MsIHRoZXkgY291bGQgaGF2ZSBtaXNzZWQgdG8g V0FMIGVub3VnaCBpbmZvcm1hdGlvbiwgYW5kIHRodXMgd2UKKwkgKiBjb3VsZCBoYXZlIHByb2R1 Y2VkIGFuIGluY29uc2lzdGVudCB0YWJsZSBjb250ZW50cy4KKwkgKgorCSAqIE9uIHRoZSBvdGhl ciBoYW5kLCBpZiB3ZSBhcmUgYWxyZWFkeSBoYW5kbGluZyBhbiBlcnJvciwgdGhlcmUncyBubwor CSAqIHJlYXNvbiB0byB3b3JyeSBhYm91dCBpbmNvbnNpc3RlbnQgY29udGVudHMgb2YgdGhlIG5l dyBzdG9yYWdlIGJlY2F1c2UKKwkgKiB0aGUgdHJhbnNhY3Rpb24gaXMgZ29pbmcgdG8gYmUgcm9s bGVkIGJhY2sgYW55d2F5LiBGdXJ0aGVybW9yZSwgYnkKKwkgKiByYWlzaW5nIEVSUk9SIGhlcmUg d2UnZCBzaGFkb3cgdGhlIG9yaWdpbmFsIGVycm9yLgorCSAqLworCWlmICghZXJyb3IpCisJewor CQljaGFyCSAgICpyZWxuYW1lOworCisJCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSAmJiBlbnRyeSA9 PSBOVUxMKQorCQl7CisJCQlyZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHJlbGlkKTsKKwkJCWlmICgh cmVsbmFtZSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycm1zZygiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcmVsYXRpb24gJXUiLAorCQkJCQkJCQlyZWxpZCkpKTsKKworCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycm1zZygicmVsYXRpb24gXCIlc1wiIG5vdCBmb3VuZCBhbW9uZyBy ZXBhY2tlZCByZWxhdGlvbnMiLAorCQkJCQkJCXJlbG5hbWUpKSk7CisJCX0KKwl9Cit9CisKKy8q CisgKiBBIHdyYXBwZXIgdG8gY2FsbCBlbmRfY29uY3VycmVudF9yZXBhY2soKSBhcyBhIGJlZm9y ZV9zaG1lbV9leGl0IGNhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZAorY2x1c3Rlcl9iZWZvcmVf c2htZW1fZXhpdF9jYWxsYmFjayhpbnQgY29kZSwgRGF0dW0gYXJnKQoreworCWlmIChPaWRJc1Zh bGlkKHJlcGFja2VkX3JlbCkpCisJCWVuZF9jb25jdXJyZW50X3JlcGFjayh0cnVlKTsKK30KKwor LyoKKyAqIENoZWNrIGlmIHJlbGF0aW9uIGlzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgYnkg UkVQQUNLIENPTkNVUlJFTlRMWS4KKyAqLworYm9vbAoraXNfY29uY3VycmVudF9yZXBhY2tfaW5f cHJvZ3Jlc3MoT2lkIHJlbGlkKQoreworCVJlcGFja2VkUmVsIGtleSwKKwkJCSAgICplbnRyeTsK KworCW1lbXNldCgma2V5LCAwLCBzaXplb2Yoa2V5KSk7CisJa2V5LnJlbGlkID0gcmVsaWQ7CisJ a2V5LmRiaWQgPSBNeURhdGFiYXNlSWQ7CisKKwlMV0xvY2tBY3F1aXJlKFJlcGFja2VkUmVsc0xv Y2ssIExXX1NIQVJFRCk7CisJZW50cnkgPSAoUmVwYWNrZWRSZWwgKikKKwkJaGFzaF9zZWFyY2go UmVwYWNrZWRSZWxzSGFzaCwgJmtleSwgSEFTSF9GSU5ELCBOVUxMKTsKKwlMV0xvY2tSZWxlYXNl KFJlcGFja2VkUmVsc0xvY2spOworCisJcmV0dXJuIGVudHJ5ICE9IE5VTEw7CiB9CiAKIC8qCkBA IC0yNDg5LDYgKzI3NjIsOSBAQCBzZXR1cF9sb2dpY2FsX2RlY29kaW5nKE9pZCByZWxpZCwgY29u c3QgY2hhciAqc2xvdG5hbWUsIFR1cGxlRGVzYyB0dXBkZXNjKQogCWRzdGF0ZS0+cmVsaWQgPSBy ZWxpZDsKIAlkc3RhdGUtPnRzdG9yZSA9IHR1cGxlc3RvcmVfYmVnaW5faGVhcChmYWxzZSwgZmFs c2UsCiAJCQkJCQkJCQkJICAgbWFpbnRlbmFuY2Vfd29ya19tZW0pOworI2lmZGVmIFVTRV9BU1NF UlRfQ0hFQ0tJTkcKKwlkc3RhdGUtPmxhc3RfY2hhbmdlX3hpZCA9IEludmFsaWRUcmFuc2FjdGlv bklkOworI2VuZGlmCiAKIAlkc3RhdGUtPnR1cGRlc2MgPSB0dXBkZXNjOwogCkBAIC0yNjM2LDYg KzI5MTIsNyBAQCBhcHBseV9jb25jdXJyZW50X2NoYW5nZXMoUmVwYWNrRGVjb2RpbmdTdGF0ZSAq ZHN0YXRlLCBSZWxhdGlvbiByZWwsCiAJCWNoYXIJICAgKmNoYW5nZV9yYXcsCiAJCQkJICAgKnNy YzsKIAkJQ29uY3VycmVudENoYW5nZSBjaGFuZ2U7CisJCVNuYXBzaG90CXNuYXBzaG90OwogCQli b29sCQlpc251bGxbMV07CiAJCURhdHVtCQl2YWx1ZXNbMV07CiAKQEAgLTI3MDQsOCArMjk4MSwz MCBAQCBhcHBseV9jb25jdXJyZW50X2NoYW5nZXMoUmVwYWNrRGVjb2RpbmdTdGF0ZSAqZHN0YXRl LCBSZWxhdGlvbiByZWwsCiAKIAkJCS8qCiAJCQkgKiBGaW5kIHRoZSB0dXBsZSB0byBiZSB1cGRh dGVkIG9yIGRlbGV0ZWQuCisJCQkgKgorCQkJICogQXMgdGhlIHRhYmxlIGJlaW5nIFJFUEFDS2Vk IGNvbmN1cnJlbnRseSBpcyB0cmVhdGVkIGxpa2UgYQorCQkJICogY2F0YWxvZywgbmV3IENJRCBp cyBXQUwtbG9nZ2VkIGFuZCBkZWNvZGVkLiBBbmQgc2luY2Ugd2UgdXNlCisJCQkgKiB0aGUgc2Ft ZSBYSUQgdGhhdCB0aGUgb3JpZ2luYWwgRE1McyBkaWQsIHRoZSBzbmFwc2hvdCB1c2VkIGZvcgor CQkJICogdGhlIGxvZ2ljYWwgZGVjb2RpbmcgKGJ5IG5vdyBjb252ZXJ0ZWQgdG8gYSBub24taGlz dG9yaWMgTVZDQworCQkJICogc25hcHNob3QpIHNob3VsZCBzZWUgdGhlIHR1cGxlcyBpbnNlcnRl ZCBwcmV2aW91c2x5IGludG8gdGhlCisJCQkgKiBuZXcgaGVhcCBhbmQvb3IgdXBkYXRlZCB0aGVy ZS4KIAkJCSAqLwotCQkJdHVwX2V4aXN0ID0gZmluZF90YXJnZXRfdHVwbGUocmVsLCBrZXksIG5r ZXlzLCB0dXBfa2V5LAorCQkJc25hcHNob3QgPSBjaGFuZ2Uuc25hcHNob3Q7CisKKwkJCS8qCisJ CQkgKiBTZXQgd2hhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBjdXJyZW50IHRyYW5zYWN0aW9uIChh bmQKKwkJCSAqIHN1YnRyYW5zYWN0aW9ucykgZHVyaW5nIHZpc2liaWxpdHkgY2hlY2suCisJCQkg KgorCQkJICogTm90ZSB0aGF0IHRoaXMgc25hcHNob3Qgd2FzIGNyZWF0ZWQgZnJvbSBhIGhpc3Rv cmljIHNuYXBzaG90CisJCQkgKiB1c2luZyBTbmFwQnVpbGRNVkNDRnJvbUhpc3RvcmljKCksIHdo aWNoIGRvZXMgbm90IHRvdWNoCisJCQkgKiAnc3VieGlwJy4gVGh1cywgdW5saWtlIGluIGEgcmVn dWxhciBNVkNDIHNuYXBzaG90LCB0aGUgYXJyYXkKKwkJCSAqIG9ubHkgY29udGFpbnMgdGhlIHRy YW5zYWN0aW9ucyB3aG9zZSBkYXRhIGNoYW5nZXMgd2UgYXJlCisJCQkgKiBhcHBseWluZywgYW5k IGl0cyBzdWJ0cmFuc2FjdGlvbnMuIFRoYXQncyBleGFjdGx5IHdoYXQgd2UgbmVlZAorCQkJICog dG8gY2hlY2sgaWYgcGFydGljdWxhciB4YWN0IGlzIGEgImN1cnJlbnQgdHJhbnNhY3Rpb246Ii4K KwkJCSAqLworCQkJU2V0UmVwYWNrQ3VycmVudFhpZHMoc25hcHNob3QtPnN1YnhpcCwgc25hcHNo b3QtPnN1YnhjbnQpOworCisJCQl0dXBfZXhpc3QgPSBmaW5kX3RhcmdldF90dXBsZShyZWwsIGtl eSwgbmtleXMsIHR1cF9rZXksIHNuYXBzaG90LAogCQkJCQkJCQkJCSAgaWlzdGF0ZSwgaWRlbnRf c2xvdCwgJmluZF9zY2FuKTsKIAkJCWlmICh0dXBfZXhpc3QgPT0gTlVMTCkKIAkJCQllbG9nKEVS Uk9SLCAiRmFpbGVkIHRvIGZpbmQgdGFyZ2V0IHR1cGxlIik7CkBAIC0yNzE2LDYgKzMwMTUsOCBA QCBhcHBseV9jb25jdXJyZW50X2NoYW5nZXMoUmVwYWNrRGVjb2RpbmdTdGF0ZSAqZHN0YXRlLCBS ZWxhdGlvbiByZWwsCiAJCQllbHNlCiAJCQkJYXBwbHlfY29uY3VycmVudF9kZWxldGUocmVsLCB0 dXBfZXhpc3QsICZjaGFuZ2UpOwogCisJCQlSZXNldFJlcGFja0N1cnJlbnRYaWRzKCk7CisKIAkJ CWlmICh0dXBfb2xkICE9IE5VTEwpCiAJCQl7CiAJCQkJcGZyZWUodHVwX29sZCk7CkBAIC0yNzI4 LDE0ICszMDI5LDE0IEBAIGFwcGx5X2NvbmN1cnJlbnRfY2hhbmdlcyhSZXBhY2tEZWNvZGluZ1N0 YXRlICpkc3RhdGUsIFJlbGF0aW9uIHJlbCwKIAkJZWxzZQogCQkJZWxvZyhFUlJPUiwgIlVucmVj b2duaXplZCBraW5kIG9mIGNoYW5nZTogJWQiLCBjaGFuZ2Uua2luZCk7CiAKLQkJLyoKLQkJICog SWYgYSBjaGFuZ2Ugd2FzIGFwcGxpZWQgbm93LCBpbmNyZW1lbnQgQ0lEIGZvciBuZXh0IHdyaXRl cyBhbmQKLQkJICogdXBkYXRlIHRoZSBzbmFwc2hvdCBzbyBpdCBzZWVzIHRoZSBjaGFuZ2VzIHdl J3ZlIGFwcGxpZWQgc28gZmFyLgotCQkgKi8KLQkJaWYgKGNoYW5nZS5raW5kICE9IENIQU5HRV9V UERBVEVfT0xEKQorCQkvKiBGcmVlIHRoZSBzbmFwc2hvdCBpZiB0aGlzIGlzIHRoZSBsYXN0IGNo YW5nZSB0aGF0IG5lZWRlZCBpdC4gKi8KKwkJQXNzZXJ0KGNoYW5nZS5zbmFwc2hvdC0+YWN0aXZl X2NvdW50ID4gMCk7CisJCWNoYW5nZS5zbmFwc2hvdC0+YWN0aXZlX2NvdW50LS07CisJCWlmIChj aGFuZ2Uuc25hcHNob3QtPmFjdGl2ZV9jb3VudCA9PSAwKQogCQl7Ci0JCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOwotCQkJVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQoKTsKKwkJCWlm IChjaGFuZ2Uuc25hcHNob3QgPT0gZHN0YXRlLT5zbmFwc2hvdCkKKwkJCQlkc3RhdGUtPnNuYXBz aG90ID0gTlVMTDsKKwkJCUZyZWVTbmFwc2hvdChjaGFuZ2Uuc25hcHNob3QpOwogCQl9CiAKIAkJ LyogVFRTT3BzTWluaW1hbFR1cGxlIGhhcyAuZ2V0X2hlYXBfdHVwbGU9PU5VTEwuICovCkBAIC0y NzU1LDE2ICszMDU2LDM1IEBAIHN0YXRpYyB2b2lkCiBhcHBseV9jb25jdXJyZW50X2luc2VydChS ZWxhdGlvbiByZWwsIENvbmN1cnJlbnRDaGFuZ2UgKmNoYW5nZSwgSGVhcFR1cGxlIHR1cCwKIAkJ CQkJCUluZGV4SW5zZXJ0U3RhdGUgKmlpc3RhdGUsIFR1cGxlVGFibGVTbG90ICppbmRleF9zbG90 KQogeworCVNuYXBzaG90CXNuYXBzaG90ID0gY2hhbmdlLT5zbmFwc2hvdDsKIAlMaXN0CSAgICpy ZWNoZWNrOwogCisJLyoKKwkgKiBGb3IgSU5TRVJULCB0aGUgdmlzaWJpbGl0eSBpbmZvcm1hdGlv biBpcyBub3QgaW1wb3J0YW50LCBidXQgd2UgdXNlIHRoZQorCSAqIHNuYXBzaG90IHRvIGdldCBD SUQuIEluZGV4IGZ1bmN0aW9ucyBtaWdodCBuZWVkIHRoZSB3aG9sZSBzbmFwc2hvdAorCSAqIGFu eXdheS4KKwkgKi8KKwlTZXRSZXBhY2tDdXJyZW50WGlkcyhzbmFwc2hvdC0+c3VieGlwLCBzbmFw c2hvdC0+c3VieGNudCk7CisKKwkvKgorCSAqIFdyaXRlIHRoZSB0dXBsZSBpbnRvIHRoZSBuZXcg aGVhcC4KKwkgKgorCSAqIFRoZSBzbmFwc2hvdCBpcyB0aGUgb25lIHdlIHVzZWQgdG8gZGVjb2Rl IHRoZSBpbnNlcnQgKHRob3VnaCBjb252ZXJ0ZWQKKwkgKiB0byAibm9uLWhpc3RvcmljIiBNVkND IHNuYXBzaG90KSwgaS5lLiB0aGUgc25hcHNob3QncyBjdXJjaWQgaXMgdGhlCisJICogdHVwbGUg Q0lEIGluY3JlbWVudGVkIGJ5IG9uZSAoZHVlIHRvIHRoZSAibmV3IENJRCIgV0FMIHJlY29yZCB0 aGF0IGdvdAorCSAqIHdyaXR0ZW4gYWxvbmcgd2l0aCB0aGUgSU5TRVJUIHJlY29yZCkuIFRodXMg aWYgd2Ugd2FudCB0byB1c2UgdGhlCisJICogb3JpZ2luYWwgQ0lELCB3ZSBuZWVkIHRvIHN1YnRy YWN0IDEgZnJvbSBjdXJjaWQuCisJICovCisJQXNzZXJ0KHNuYXBzaG90LT5jdXJjaWQgIT0gSW52 YWxpZENvbW1hbmRJZCAmJgorCQkgICBzbmFwc2hvdC0+Y3VyY2lkID4gRmlyc3RDb21tYW5kSWQp OwogCiAJLyoKIAkgKiBMaWtlIHNpbXBsZV9oZWFwX2luc2VydCgpLCBidXQgbWFrZSBzdXJlIHRo YXQgdGhlIElOU0VSVCBpcyBub3QKIAkgKiBsb2dpY2FsbHkgZGVjb2RlZCAtIHNlZSByZWZvcm1f YW5kX3Jld3JpdGVfdHVwbGUoKSBmb3IgbW9yZQogCSAqIGluZm9ybWF0aW9uLgogCSAqLwotCWhl YXBfaW5zZXJ0KHJlbCwgdHVwLCBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLCBIRUFQX0lOU0VS VF9OT19MT0dJQ0FMLAotCQkJCU5VTEwpOworCWhlYXBfaW5zZXJ0KHJlbCwgdHVwLCBjaGFuZ2Ut PnhpZCwgc25hcHNob3QtPmN1cmNpZCAtIDEsCisJCQkJSEVBUF9JTlNFUlRfTk9fTE9HSUNBTCwg TlVMTCk7CiAKIAkvKgogCSAqIFVwZGF0ZSBpbmRleGVzLgpAQCAtMjc3Miw2ICszMDkyLDcgQEAg YXBwbHlfY29uY3VycmVudF9pbnNlcnQoUmVsYXRpb24gcmVsLCBDb25jdXJyZW50Q2hhbmdlICpj aGFuZ2UsIEhlYXBUdXBsZSB0dXAsCiAJICogSW4gY2FzZSBmdW5jdGlvbnMgaW4gdGhlIGluZGV4 IG5lZWQgdGhlIGFjdGl2ZSBzbmFwc2hvdCBhbmQgY2FsbGVyCiAJICogaGFzbid0IHNldCBvbmUu CiAJICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKIAlFeGVjU3RvcmVIZWFwVHVw bGUodHVwLCBpbmRleF9zbG90LCBmYWxzZSk7CiAJcmVjaGVjayA9IEV4ZWNJbnNlcnRJbmRleFR1 cGxlcyhpaXN0YXRlLT5ycmksCiAJCQkJCQkJCQlpbmRleF9zbG90LApAQCAtMjc4Miw2ICszMTAz LDggQEAgYXBwbHlfY29uY3VycmVudF9pbnNlcnQoUmVsYXRpb24gcmVsLCBDb25jdXJyZW50Q2hh bmdlICpjaGFuZ2UsIEhlYXBUdXBsZSB0dXAsCiAJCQkJCQkJCQlOSUwsCS8qIGFyYml0ZXJJbmRl eGVzICovCiAJCQkJCQkJCQlmYWxzZQkvKiBvbmx5U3VtbWFyaXppbmcgKi8KIAkJKTsKKwlQb3BB Y3RpdmVTbmFwc2hvdCgpOworCVJlc2V0UmVwYWNrQ3VycmVudFhpZHMoKTsKIAogCS8qCiAJICog SWYgcmVjaGVjayBpcyByZXF1aXJlZCwgaXQgbXVzdCBoYXZlIGJlZW4gcHJlZm9ybWVkIG9uIHRo ZSBzb3VyY2UKQEAgLTI4MDMsNiArMzEyNiw3IEBAIGFwcGx5X2NvbmN1cnJlbnRfdXBkYXRlKFJl bGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cCwgSGVhcFR1cGxlIHR1cF90YXJnZXQsCiAJVFVfVXBk YXRlSW5kZXhlcyB1cGRhdGVfaW5kZXhlczsKIAlUTV9SZXN1bHQJcmVzOwogCUxpc3QJICAgKnJl Y2hlY2s7CisJU25hcHNob3QJc25hcHNob3QgPSBjaGFuZ2UtPnNuYXBzaG90OwogCiAJLyoKIAkg KiBXcml0ZSB0aGUgbmV3IHR1cGxlIGludG8gdGhlIG5ldyBoZWFwLiAoJ3R1cCcgZ2V0cyB0aGUg VElEIGFzc2lnbmVkCkBAIC0yODEwLDEzICszMTM0LDE5IEBAIGFwcGx5X2NvbmN1cnJlbnRfdXBk YXRlKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cCwgSGVhcFR1cGxlIHR1cF90YXJnZXQsCiAJ ICoKIAkgKiBEbyBpdCBsaWtlIGluIHNpbXBsZV9oZWFwX3VwZGF0ZSgpLCBleGNlcHQgZm9yICd3 YWxfbG9naWNhbCcgKGFuZAogCSAqIGV4Y2VwdCBmb3IgJ3dhaXQnKS4KKwkgKgorCSAqIFJlZ2Fy ZGluZyBDSUQsIHNlZSB0aGUgY29tbWVudCBpbiBhcHBseV9jb25jdXJyZW50X2luc2VydCgpLgog CSAqLworCUFzc2VydChzbmFwc2hvdC0+Y3VyY2lkICE9IEludmFsaWRDb21tYW5kSWQgJiYKKwkJ ICAgc25hcHNob3QtPmN1cmNpZCA+IEZpcnN0Q29tbWFuZElkKTsKKwogCXJlcyA9IGhlYXBfdXBk YXRlKHJlbCwgJnR1cF90YXJnZXQtPnRfc2VsZiwgdHVwLAotCQkJCQkgIEdldEN1cnJlbnRDb21t YW5kSWQodHJ1ZSksCisJCQkJCSAgY2hhbmdlLT54aWQsIHNuYXBzaG90LT5jdXJjaWQgLSAxLAog CQkJCQkgIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJICBmYWxzZSwJLyogbm8gd2FpdCAtIG9ubHkg d2UgYXJlIGRvaW5nIGNoYW5nZXMgKi8KIAkJCQkJICAmdG1mZCwgJmxvY2ttb2RlLCAmdXBkYXRl X2luZGV4ZXMsCi0JCQkJCSAgZmFsc2UgLyogd2FsX2xvZ2ljYWwgKi8gKTsKKwkvKiB3YWxfbG9n aWNhbCAqLworCQkJCQkgIGZhbHNlKTsKIAlpZiAocmVzICE9IFRNX09rKQogCQllcmVwb3J0KEVS Uk9SLCAoZXJybXNnKCJmYWlsZWQgdG8gYXBwbHkgY29uY3VycmVudCBVUERBVEUiKSkpOwogCkBA IC0yODI0LDYgKzMxNTQsNyBAQCBhcHBseV9jb25jdXJyZW50X3VwZGF0ZShSZWxhdGlvbiByZWws IEhlYXBUdXBsZSB0dXAsIEhlYXBUdXBsZSB0dXBfdGFyZ2V0LAogCiAJaWYgKHVwZGF0ZV9pbmRl eGVzICE9IFRVX05vbmUpCiAJeworCQlQdXNoQWN0aXZlU25hcHNob3Qoc25hcHNob3QpOwogCQly ZWNoZWNrID0gRXhlY0luc2VydEluZGV4VHVwbGVzKGlpc3RhdGUtPnJyaSwKIAkJCQkJCQkJCQlp bmRleF9zbG90LAogCQkJCQkJCQkJCWlpc3RhdGUtPmVzdGF0ZSwKQEAgLTI4MzMsNiArMzE2NCw3 IEBAIGFwcGx5X2NvbmN1cnJlbnRfdXBkYXRlKFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cCwg SGVhcFR1cGxlIHR1cF90YXJnZXQsCiAJCQkJCQkJCQkJTklMLAkvKiBhcmJpdGVySW5kZXhlcyAq LwogCQkvKiBvbmx5U3VtbWFyaXppbmcgKi8KIAkJCQkJCQkJCQl1cGRhdGVfaW5kZXhlcyA9PSBU VV9TdW1tYXJpemluZyk7CisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJCWxpc3RfZnJlZShyZWNo ZWNrKTsKIAl9CiAKQEAgLTI4NDUsNiArMzE3NywxMiBAQCBhcHBseV9jb25jdXJyZW50X2RlbGV0 ZShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXBfdGFyZ2V0LAogewogCVRNX1Jlc3VsdAlyZXM7 CiAJVE1fRmFpbHVyZURhdGEgdG1mZDsKKwlTbmFwc2hvdAlzbmFwc2hvdCA9IGNoYW5nZS0+c25h cHNob3Q7CisKKworCS8qIFJlZ2FyZGluZyBDSUQsIHNlZSB0aGUgY29tbWVudCBpbiBhcHBseV9j b25jdXJyZW50X2luc2VydCgpLiAqLworCUFzc2VydChzbmFwc2hvdC0+Y3VyY2lkICE9IEludmFs aWRDb21tYW5kSWQgJiYKKwkJICAgc25hcHNob3QtPmN1cmNpZCA+IEZpcnN0Q29tbWFuZElkKTsK IAogCS8qCiAJICogRGVsZXRlIHR1cGxlIGZyb20gdGhlIG5ldyBoZWFwLgpAQCAtMjg1MiwxMSAr MzE5MCwxMSBAQCBhcHBseV9jb25jdXJyZW50X2RlbGV0ZShSZWxhdGlvbiByZWwsIEhlYXBUdXBs ZSB0dXBfdGFyZ2V0LAogCSAqIERvIGl0IGxpa2UgaW4gc2ltcGxlX2hlYXBfZGVsZXRlKCksIGV4 Y2VwdCBmb3IgJ3dhbF9sb2dpY2FsJyAoYW5kCiAJICogZXhjZXB0IGZvciAnd2FpdCcpLgogCSAq LwotCXJlcyA9IGhlYXBfZGVsZXRlKHJlbCwgJnR1cF90YXJnZXQtPnRfc2VsZiwgR2V0Q3VycmVu dENvbW1hbmRJZCh0cnVlKSwKLQkJCQkJICBJbnZhbGlkU25hcHNob3QsIGZhbHNlLAotCQkJCQkg ICZ0bWZkLAotCQkJCQkgIGZhbHNlLAkvKiBubyB3YWl0IC0gb25seSB3ZSBhcmUgZG9pbmcgY2hh bmdlcyAqLwotCQkJCQkgIGZhbHNlIC8qIHdhbF9sb2dpY2FsICovICk7CisJcmVzID0gaGVhcF9k ZWxldGUocmVsLCAmdHVwX3RhcmdldC0+dF9zZWxmLCBjaGFuZ2UtPnhpZCwKKwkJCQkJICBzbmFw c2hvdC0+Y3VyY2lkIC0gMSwgSW52YWxpZFNuYXBzaG90LCBmYWxzZSwKKwkJCQkJICAmdG1mZCwg ZmFsc2UsCisJLyogd2FsX2xvZ2ljYWwgKi8KKwkJCQkJICBmYWxzZSk7CiAKIAlpZiAocmVzICE9 IFRNX09rKQogCQllcmVwb3J0KEVSUk9SLCAoZXJybXNnKCJmYWlsZWQgdG8gYXBwbHkgY29uY3Vy cmVudCBERUxFVEUiKSkpOwpAQCAtMjg3Nyw3ICszMjE1LDcgQEAgYXBwbHlfY29uY3VycmVudF9k ZWxldGUoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwX3RhcmdldCwKICAqLwogc3RhdGljIEhl YXBUdXBsZQogZmluZF90YXJnZXRfdHVwbGUoUmVsYXRpb24gcmVsLCBTY2FuS2V5IGtleSwgaW50 IG5rZXlzLCBIZWFwVHVwbGUgdHVwX2tleSwKLQkJCQkgIEluZGV4SW5zZXJ0U3RhdGUgKmlpc3Rh dGUsCisJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwgSW5kZXhJbnNlcnRTdGF0ZSAqaWlzdGF0ZSwK IAkJCQkgIFR1cGxlVGFibGVTbG90ICppZGVudF9zbG90LCBJbmRleFNjYW5EZXNjICpzY2FuX3Ap CiB7CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwpAQCAtMjg4Niw3ICszMjI0LDcgQEAgZmluZF90YXJn ZXRfdHVwbGUoUmVsYXRpb24gcmVsLCBTY2FuS2V5IGtleSwgaW50IG5rZXlzLCBIZWFwVHVwbGUg dHVwX2tleSwKIAlIZWFwVHVwbGUJcmVzdWx0ID0gTlVMTDsKIAogCS8qIFhYWCBubyBpbnN0cnVt ZW50YXRpb24gZm9yIG5vdyAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpaXN0YXRl LT5pZGVudF9pbmRleCwgR2V0QWN0aXZlU25hcHNob3QoKSwKKwlzY2FuID0gaW5kZXhfYmVnaW5z Y2FuKHJlbCwgaWlzdGF0ZS0+aWRlbnRfaW5kZXgsIHNuYXBzaG90LAogCQkJCQkJICAgTlVMTCwg bmtleXMsIDApOwogCSpzY2FuX3AgPSBzY2FuOwogCWluZGV4X3Jlc2NhbihzY2FuLCBrZXksIG5r ZXlzLCBOVUxMLCAwKTsKQEAgLTI5NTgsNiArMzI5Niw4IEBAIHByb2Nlc3NfY29uY3VycmVudF9j aGFuZ2VzKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY1B0ciBlbmRfb2Zfd2Fs LAogCX0KIAlQR19GSU5BTExZKCk7CiAJeworCQlSZXNldFJlcGFja0N1cnJlbnRYaWRzKCk7CisK IAkJaWYgKHJlbF9zcmMpCiAJCQlyZWxfZHN0LT5yZF90b2FzdG9pZCA9IEludmFsaWRPaWQ7CiAJ fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggNWRjNGFlNThm ZmUuLjlmZWZjZmZkOGIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2Rl LmMKQEAgLTQ3NSw5ICs0NzUsMTQgQEAgaGVhcF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiAKIAkvKgogCSAqIElmIHRoZSBjaGFuZ2Ug aXMgbm90IGludGVuZGVkIGZvciBsb2dpY2FsIGRlY29kaW5nLCBkbyBub3QgZXZlbgotCSAqIGVz dGFibGlzaCB0cmFuc2FjdGlvbiBmb3IgaXQgLSBSRVBBQ0sgQ09OQ1VSUkVOVExZIGlzIHRoZSB0 eXBpY2FsIHVzZQotCSAqIGNhc2UuCi0JICoKKwkgKiBlc3RhYmxpc2ggdHJhbnNhY3Rpb24gZm9y IGl0LiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaWYgdGhlCisJICogcmVjb3JkIHdh cyBnZW5lcmF0ZWQgYnkgUkVQQUNLIENPTkNVUlJFTlRMWSBiZWNhdXNlIHRoaXMgY29tbWFuZCB1 c2VzCisJICogdGhlIG9yaWdpbmFsIFhJRCB3aGVuIGRvaW5nIGNoYW5nZXMgaW4gdGhlIG5ldyBz dG9yYWdlLiBUaGUgZGVjb2RpbmcKKwkgKiBzeXN0ZW0gcHJvYmFibHkgZG9lcyBub3QgZXhwZWN0 IHRvIHNlZSB0aGUgc2FtZSB0cmFuc2FjdGlvbiBtdWx0aXBsZQorCSAqIHRpbWVzLgorCSAqLwor CisJLyoKIAkgKiBGaXJzdCwgY2hlY2sgaWYgUkVQQUNLIENPTkNVUlJFTlRMWSBpcyBiZWluZyBw ZXJmb3JtZWQgYnkgdGhpcyBiYWNrZW5kLgogCSAqIElmIHNvLCBvbmx5IGRlY29kZSBkYXRhIGNo YW5nZXMgb2YgdGhlIHRhYmxlIHRoYXQgaXQgaXMgcHJvY2Vzc2luZywgYW5kCiAJICogdGhlIGNo YW5nZXMgb2YgaXRzIFRPQVNUIHJlbGF0aW9uLgpAQCAtNTA0LDExICs1MDksMTEgQEAgaGVhcF9k ZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp CiAJICogU2Vjb25kLCBza2lwIHJlY29yZHMgd2hpY2ggZG8gbm90IGNvbnRhaW4gc3VmZmljaWVu dCBpbmZvcm1hdGlvbiBmb3IKIAkgKiB0aGUgZGVjb2RpbmcuCiAJICoKLQkgKiBUaGUgcHJvYmxl bSB3ZSBzb2x2ZSBoZXJlIGlzIHRoYXQgUkVQQUNLIENPTkNVUlJFTlRMWSBnZW5lcmF0ZXMgV0FM Ci0JICogd2hlbiBkb2luZyBjaGFuZ2VzIGluIHRoZSBuZXcgdGFibGUuIFRob3NlIGNoYW5nZXMg c2hvdWxkIG5vdCBiZSB1c2VmdWwKLQkgKiBmb3IgYW55IG90aGVyIHVzZXIgKHN1Y2ggYXMgbG9n aWNhbCByZXBsaWNhdGlvbiBzdWJzY3JpcHRpb24pIGJlY2F1c2UKLQkgKiB0aGUgbmV3IHRhYmxl IHdpbGwgZXZlbnR1YWxseSBiZSBkcm9wcGVkIChhZnRlciBSRVBBQ0sgQ09OQ1VSUkVOVExZIGhh cwotCSAqIGFzc2lnbmVkIGl0cyBmaWxlIHRvIHRoZSAib2xkIHRhYmxlIikuCisJICogT25lIHBh cnRpY3VsYXIgcHJvYmxlbSB3ZSBzb2x2ZSBoZXJlIGlzIHRoYXQgUkVQQUNLIENPTkNVUlJFTlRM WQorCSAqIGdlbmVyYXRlcyBXQUwgd2hlbiBkb2luZyBjaGFuZ2VzIGluIHRoZSBuZXcgdGFibGUu IFRob3NlIGNoYW5nZXMgc2hvdWxkCisJICogbm90IGJlIGRlY29kZWQgYmVjYXVzZSByZW9yZGVy YnVmZmVyLmMgY29uc2lkZXJzIHRoZWlyIFhJRCBhbHJlYWR5CisJICogY29tbWl0dGVkLiAoUkVQ QUNLIENPTkNVUlJFTlRMWSBkZWxpYmVyYXRlbHkgZ2VuZXJhdGVzIFdBTCByZWNvcmRzIGluCisJ ICogc3VjaCBhIHdheSB0aGF0IHRoZXkgYXJlIHNraXBwZWQgaGVyZS4pCiAJICovCiAJc3dpdGNo IChpbmZvKQogCXsKQEAgLTk5NSwxMyArMTAwMCw2IEBAIERlY29kZUluc2VydChMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIAogCXhscmVjID0gKHhs X2hlYXBfaW5zZXJ0ICopIFhMb2dSZWNHZXREYXRhKHIpOwogCi0JLyoKLQkgKiBJZ25vcmUgaW5z ZXJ0IHJlY29yZHMgd2l0aG91dCBuZXcgdHVwbGVzICh0aGlzIGRvZXMgaGFwcGVuIHdoZW4KLQkg KiByYXdfaGVhcF9pbnNlcnQgbWFya3MgdGhlIFRPQVNUIHJlY29yZCBhcyBIRUFQX0lOU0VSVF9O T19MT0dJQ0FMKS4KLQkgKi8KLQlpZiAoISh4bHJlYy0+ZmxhZ3MgJiBYTEhfSU5TRVJUX0NPTlRB SU5TX05FV19UVVBMRSkpCi0JCXJldHVybjsKLQogCS8qIG9ubHkgaW50ZXJlc3RlZCBpbiBvdXIg ZGF0YWJhc2UgKi8KIAlYTG9nUmVjR2V0QmxvY2tUYWcociwgMCwgJnRhcmdldF9sb2NhdG9yLCBO VUxMLCBOVUxMKTsKIAlpZiAodGFyZ2V0X2xvY2F0b3IuZGJPaWQgIT0gY3R4LT5zbG90LT5kYXRh LmRhdGFiYXNlKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9z bmFwYnVpbGQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMK aW5kZXggOGU1MTE2YTljYWIuLjcyYTM4MDc0YTdiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKQEAgLTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgYm9vbCBF eHBvcnRJblByb2dyZXNzID0gZmFsc2U7CiBzdGF0aWMgdm9pZCBTbmFwQnVpbGRQdXJnZU9sZGVy VHhuKFNuYXBCdWlsZCAqYnVpbGRlcik7CiAKIC8qIHNuYXBzaG90IGJ1aWxkaW5nL21hbmlwdWxh dGlvbi9kaXN0cmlidXRpb24gZnVuY3Rpb25zICovCi1zdGF0aWMgU25hcHNob3QgU25hcEJ1aWxk QnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpOworc3RhdGljIFNuYXBzaG90IFNuYXBC dWlsZEJ1aWxkU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbik7CiAK IHN0YXRpYyB2b2lkIFNuYXBCdWlsZEZyZWVTbmFwc2hvdChTbmFwc2hvdCBzbmFwKTsKIApAQCAt MzUyLDEyICszNTIsMTcgQEAgU25hcEJ1aWxkU25hcERlY1JlZmNvdW50KFNuYXBzaG90IHNuYXAp CiAgKiBCdWlsZCBhIG5ldyBzbmFwc2hvdCwgYmFzZWQgb24gY3VycmVudGx5IGNvbW1pdHRlZCBj YXRhbG9nLW1vZGlmeWluZwogICogdHJhbnNhY3Rpb25zLgogICoKKyAqICdsc24nIGlzIHRoZSBs b2NhdGlvbiBvZiB0aGUgY29tbWl0IHJlY29yZCAob2YgYSBjYXRhbG9nLWNoYW5naW5nCisgKiB0 cmFuc2FjdGlvbikgdGhhdCB0cmlnZ2VyZWQgY3JlYXRpb24gb2YgdGhlIHNuYXBzaG90LiBQYXNz CisgKiBJbnZhbGlkWExvZ1JlY1B0ciBmb3IgdGhlIHRyYW5zYWN0aW9uIGJhc2Ugc25hcHNob3Qg b3IgaWYgaXQgdGhlIHVzZXIgb2YKKyAqIHRoZSBzbmFwc2hvdCBzaG91bGQgbm90IG5lZWQgdGhl IExTTi4KKyAqCiAgKiBJbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgd2l0aCBjYXRhbG9nIGFjY2Vz cyBhcmUgKm5vdCogYWxsb3dlZCB0byBtb2RpZnkKICAqIHRoZXNlIHNuYXBzaG90czsgdGhleSBo YXZlIHRvIGNvcHkgdGhlbSBhbmQgZmlsbCBpbiBhcHByb3ByaWF0ZSAtPmN1cmNpZAogICogYW5k IC0+c3VieGlwL3N1YnhjbnQgdmFsdWVzLgogICovCiBzdGF0aWMgU25hcHNob3QKLVNuYXBCdWls ZEJ1aWxkU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyKQorU25hcEJ1aWxkQnVpbGRTbmFwc2hv dChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKQogewogCVNuYXBzaG90CXNuYXBz aG90OwogCVNpemUJCXNzaXplOwpAQCAtNDI1LDYgKzQzMCw3IEBAIFNuYXBCdWlsZEJ1aWxkU25h cHNob3QoU25hcEJ1aWxkICpidWlsZGVyKQogCXNuYXBzaG90LT5hY3RpdmVfY291bnQgPSAwOwog CXNuYXBzaG90LT5yZWdkX2NvdW50ID0gMDsKIAlzbmFwc2hvdC0+c25hcFhhY3RDb21wbGV0aW9u Q291bnQgPSAwOworCXNuYXBzaG90LT5sc24gPSBsc247CiAKIAlyZXR1cm4gc25hcHNob3Q7CiB9 CkBAIC00NjEsNyArNDY3LDcgQEAgU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90KFNuYXBCdWlsZCAq YnVpbGRlcikKIAlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSkKIAkJZWxv ZyhFUlJPUiwgImNhbm5vdCBidWlsZCBhbiBpbml0aWFsIHNsb3Qgc25hcHNob3Qgd2hlbiBNeVBy b2MtPnhtaW4gYWxyZWFkeSBpcyB2YWxpZCIpOwogCi0Jc25hcCA9IFNuYXBCdWlsZEJ1aWxkU25h cHNob3QoYnVpbGRlcik7CisJc25hcCA9IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoYnVpbGRlciwg SW52YWxpZFhMb2dSZWNQdHIpOwogCiAJLyoKIAkgKiBXZSBrbm93IHRoYXQgc25hcC0+eG1pbiBp cyBhbGl2ZSwgZW5mb3JjZWQgYnkgdGhlIGxvZ2ljYWwgeG1pbgpAQCAtNTAyLDcgKzUwOCw3IEBA IFNuYXBCdWlsZEluaXRpYWxTbmFwc2hvdEZvclJlcGFjayhTbmFwQnVpbGQgKmJ1aWxkZXIpCiAK IAlBc3NlcnQoYnVpbGRlci0+c3RhdGUgPT0gU05BUEJVSUxEX0NPTlNJU1RFTlQpOwogCi0Jc25h cCA9IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoYnVpbGRlcik7CisJc25hcCA9IFNuYXBCdWlsZEJ1 aWxkU25hcHNob3QoYnVpbGRlciwgSW52YWxpZFhMb2dSZWNQdHIpOwogCXJldHVybiBTbmFwQnVp bGRNVkNDRnJvbUhpc3RvcmljKHNuYXAsIGZhbHNlKTsKIH0KIApAQCAtNjM2LDcgKzY0Miw3IEBA IFNuYXBCdWlsZEdldE9yQnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCiAJLyogb25s eSBidWlsZCBhIG5ldyBzbmFwc2hvdCBpZiB3ZSBkb24ndCBoYXZlIGEgcHJlYnVpbHQgb25lICov CiAJaWYgKGJ1aWxkZXItPnNuYXBzaG90ID09IE5VTEwpCiAJewotCQlidWlsZGVyLT5zbmFwc2hv dCA9IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoYnVpbGRlcik7CisJCWJ1aWxkZXItPnNuYXBzaG90 ID0gU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChidWlsZGVyLCBJbnZhbGlkWExvZ1JlY1B0cik7CiAJ CS8qIGluY3JlYXNlIHJlZmNvdW50IGZvciB0aGUgc25hcHNob3QgYnVpbGRlciAqLwogCQlTbmFw QnVpbGRTbmFwSW5jUmVmY291bnQoYnVpbGRlci0+c25hcHNob3QpOwogCX0KQEAgLTcxNiw3ICs3 MjIsNyBAQCBTbmFwQnVpbGRQcm9jZXNzQ2hhbmdlKFNuYXBCdWlsZCAqYnVpbGRlciwgVHJhbnNh Y3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQogCQkvKiBvbmx5IGJ1aWxkIGEgbmV3IHNuYXBz aG90IGlmIHdlIGRvbid0IGhhdmUgYSBwcmVidWlsdCBvbmUgKi8KIAkJaWYgKGJ1aWxkZXItPnNu YXBzaG90ID09IE5VTEwpCiAJCXsKLQkJCWJ1aWxkZXItPnNuYXBzaG90ID0gU25hcEJ1aWxkQnVp bGRTbmFwc2hvdChidWlsZGVyKTsKKwkJCWJ1aWxkZXItPnNuYXBzaG90ID0gU25hcEJ1aWxkQnVp bGRTbmFwc2hvdChidWlsZGVyLCBsc24pOwogCQkJLyogaW5jcmVhc2UgcmVmY291bnQgZm9yIHRo ZSBzbmFwc2hvdCBidWlsZGVyICovCiAJCQlTbmFwQnVpbGRTbmFwSW5jUmVmY291bnQoYnVpbGRl ci0+c25hcHNob3QpOwogCQl9CkBAIC0xMTMwLDcgKzExMzYsNyBAQCBTbmFwQnVpbGRDb21taXRU eG4oU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbiwgVHJhbnNhY3Rpb25JZCB4aWQs CiAJCWlmIChidWlsZGVyLT5zbmFwc2hvdCkKIAkJCVNuYXBCdWlsZFNuYXBEZWNSZWZjb3VudChi dWlsZGVyLT5zbmFwc2hvdCk7CiAKLQkJYnVpbGRlci0+c25hcHNob3QgPSBTbmFwQnVpbGRCdWls ZFNuYXBzaG90KGJ1aWxkZXIpOworCQlidWlsZGVyLT5zbmFwc2hvdCA9IFNuYXBCdWlsZEJ1aWxk U25hcHNob3QoYnVpbGRlciwgbHNuKTsKIAogCQkvKiB3ZSBtaWdodCBuZWVkIHRvIGV4ZWN1dGUg aW52YWxpZGF0aW9ucywgYWRkIHNuYXBzaG90ICovCiAJCWlmICghUmVvcmRlckJ1ZmZlclhpZEhh c0Jhc2VTbmFwc2hvdChidWlsZGVyLT5yZW9yZGVyLCB4aWQpKQpAQCAtMTk1OCw3ICsxOTY0LDcg QEAgU25hcEJ1aWxkUmVzdG9yZShTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKQog CXsKIAkJU25hcEJ1aWxkU25hcERlY1JlZmNvdW50KGJ1aWxkZXItPnNuYXBzaG90KTsKIAl9Ci0J YnVpbGRlci0+c25hcHNob3QgPSBTbmFwQnVpbGRCdWlsZFNuYXBzaG90KGJ1aWxkZXIpOworCWJ1 aWxkZXItPnNuYXBzaG90ID0gU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChidWlsZGVyLCBJbnZhbGlk WExvZ1JlY1B0cik7CiAJU25hcEJ1aWxkU25hcEluY1JlZmNvdW50KGJ1aWxkZXItPnNuYXBzaG90 KTsKIAogCVJlb3JkZXJCdWZmZXJTZXRSZXN0YXJ0UG9pbnQoYnVpbGRlci0+cmVvcmRlciwgbHNu KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9w Z291dHB1dF9yZXBhY2suYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFj ay9wZ291dHB1dF9yZXBhY2suYwppbmRleCA2ODdmYmJjNTliYi4uMjhiZDE2ZjljYzcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0X3JlcGFjay9wZ291dHB1dF9y ZXBhY2suYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dF9yZXBhY2svcGdv dXRwdXRfcmVwYWNrLmMKQEAgLTMyLDcgKzMyLDggQEAgc3RhdGljIHZvaWQgcGx1Z2luX3RydW5j YXRlKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJUmVsYXRpb24g cmVsYXRpb25zW10sCiAJCQkJCQkJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIHN0YXRp YyB2b2lkIHN0b3JlX2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCi0JCQkJCQkg Q29uY3VycmVudENoYW5nZUtpbmQga2luZCwgSGVhcFR1cGxlIHR1cGxlKTsKKwkJCQkJCSBDb25j dXJyZW50Q2hhbmdlS2luZCBraW5kLCBIZWFwVHVwbGUgdHVwbGUsCisJCQkJCQkgVHJhbnNhY3Rp b25JZCB4aWQpOwogCiB2b2lkCiBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNh bGxiYWNrcyAqY2IpCkBAIC0xMDAsNiArMTAxLDcgQEAgcGx1Z2luX2NoYW5nZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCSAgUmVsYXRpb24g cmVsYXRpb24sIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIHsKIAlSZXBhY2tEZWNvZGlu Z1N0YXRlICpkc3RhdGU7CisJU25hcHNob3QJc25hcHNob3Q7CiAKIAlkc3RhdGUgPSAoUmVwYWNr RGVjb2RpbmdTdGF0ZSAqKSBjdHgtPm91dHB1dF93cml0ZXJfcHJpdmF0ZTsKIApAQCAtMTA3LDYg KzEwOSw0OCBAQCBwbHVnaW5fY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAogCWlmIChyZWxhdGlvbi0+cmRfaWQgIT0gZHN0YXRlLT5yZWxp ZCkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBDYXRhbG9nIHNuYXBzaG90IGlzIGZpbmUgYmVjYXVz ZSB0aGUgdGFibGUgd2UgYXJlIHByb2Nlc3NpbmcgaXMKKwkgKiB0ZW1wb3JhcmlseSBjb25zaWRl cmVkIGEgdXNlciBjYXRhbG9nIHRhYmxlLgorCSAqLworCXNuYXBzaG90ID0gR2V0Q2F0YWxvZ1Nu YXBzaG90KEludmFsaWRPaWQpOworCUFzc2VydChzbmFwc2hvdC0+c25hcHNob3RfdHlwZSA9PSBT TkFQU0hPVF9ISVNUT1JJQ19NVkNDKTsKKwlBc3NlcnQoIXNuYXBzaG90LT5zdWJvdmVyZmxvd2Vk KTsKKworCS8qCisJICogVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGlmIHdlIGRvbid0IGhh dmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvCisJICogYXBwbHkgYSBuZXcgc25hcHNob3QsIHRoZSBj b25zZXF1ZW5jZXMgd291bGQgYmUgYmFkLiBUaHVzIHByZWZlciBFUlJPUgorCSAqIHRvIEFzc2Vy dCgpLgorCSAqLworCWlmIChYTG9nUmVjUHRySXNJbnZhbGlkKHNuYXBzaG90LT5sc24pKQorCQll cmVwb3J0KEVSUk9SLCAoZXJybXNnKCJzbmFwc2hvdCBoYXMgaW52YWxpZCBMU04iKSkpOworCisJ LyoKKwkgKiByZW9yZGVyYnVmZmVyLmMgY2hhbmdlcyB0aGUgY2F0YWxvZyBzbmFwc2hvdCBhcyBz b29uIGFzIGl0IHNlZXMgYSBuZXcKKwkgKiBDSUQgb3IgYSBjb21taXQgcmVjb3JkIG9mIGEgY2F0 YWxvZy1jaGFuZ2luZyB0cmFuc2FjdGlvbi4KKwkgKi8KKwlpZiAoZHN0YXRlLT5zbmFwc2hvdCA9 PSBOVUxMIHx8IHNuYXBzaG90LT5sc24gIT0gZHN0YXRlLT5zbmFwc2hvdF9sc24gfHwKKwkJc25h cHNob3QtPmN1cmNpZCAhPSBkc3RhdGUtPnNuYXBzaG90LT5jdXJjaWQpCisJeworCQkvKiBDSUQg c2hvdWxkIG5vdCBnbyBiYWNrd2FyZHMuICovCisJCUFzc2VydChkc3RhdGUtPnNuYXBzaG90ID09 IE5VTEwgfHwKKwkJCSAgIHNuYXBzaG90LT5jdXJjaWQgPj0gZHN0YXRlLT5zbmFwc2hvdC0+Y3Vy Y2lkIHx8CisJCQkgICBjaGFuZ2UtPnR4bi0+eGlkICE9IGRzdGF0ZS0+bGFzdF9jaGFuZ2VfeGlk KTsKKworCQkvKgorCQkgKiBYWFggSXMgaXQgYSBwcm9ibGVtIHRoYXQgdGhlIGNvcHkgaXMgY3Jl YXRlZCBpbgorCQkgKiBUb3BUcmFuc2FjdGlvbkNvbnRleHQ/CisJCSAqCisJCSAqIFhYWCBXb3Vs ZG4ndCBpdCBiZSBvLmsuIGZvciBTbmFwQnVpbGRNVkNDRnJvbUhpc3RvcmljKCkgdG8gc2V0IHhj bnQKKwkJICogdG8gMCBpbnN0ZWFkIG9mIGNvbnZlcnRpbmcgeGlwIGluIHRoaXMgY2FzZT8gVGhl IHBvaW50IGlzIHRoYXQKKwkJICogdHJhbnNhY3Rpb25zIHdoaWNoIGFyZSBzdGlsbCBpbiBwcm9n cmVzcyBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZgorCQkgKiByZW9yZGVyYnVmZmVyLmMgY291bGQg bm90IGJlIHJlcGxheWVkIHlldCwgc28gd2UgZG8gbm90IG5lZWQgdG8KKwkJICogZXhhbWluZSB0 aGVpciBYSURzLgorCQkgKi8KKwkJZHN0YXRlLT5zbmFwc2hvdCA9IFNuYXBCdWlsZE1WQ0NGcm9t SGlzdG9yaWMoc25hcHNob3QsIGZhbHNlKTsKKwkJZHN0YXRlLT5zbmFwc2hvdF9sc24gPSBzbmFw c2hvdC0+bHNuOworCX0KKwogCS8qIERlY29kZSBlbnRyeSBkZXBlbmRpbmcgb24gaXRzIHR5cGUg Ki8KIAlzd2l0Y2ggKGNoYW5nZS0+YWN0aW9uKQogCXsKQEAgLTEyNCw3ICsxNjgsNyBAQCBwbHVn aW5fY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAq dHhuLAogCQkJCWlmIChuZXd0dXBsZSA9PSBOVUxMKQogCQkJCQllbG9nKEVSUk9SLCAiSW5jb21w bGV0ZSBpbnNlcnQgaW5mby4iKTsKIAotCQkJCXN0b3JlX2NoYW5nZShjdHgsIENIQU5HRV9JTlNF UlQsIG5ld3R1cGxlKTsKKwkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfSU5TRVJULCBuZXd0 dXBsZSwgY2hhbmdlLT50eG4tPnhpZCk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVS X0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpAQCAtMTQxLDkgKzE4NSwxMSBAQCBwbHVnaW5fY2hhbmdl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJ CQllbG9nKEVSUk9SLCAiSW5jb21wbGV0ZSB1cGRhdGUgaW5mby4iKTsKIAogCQkJCWlmIChvbGR0 dXBsZSAhPSBOVUxMKQotCQkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfVVBEQVRFX09MRCwg b2xkdHVwbGUpOworCQkJCQlzdG9yZV9jaGFuZ2UoY3R4LCBDSEFOR0VfVVBEQVRFX09MRCwgb2xk dHVwbGUsCisJCQkJCQkJCSBjaGFuZ2UtPnR4bi0+eGlkKTsKIAotCQkJCXN0b3JlX2NoYW5nZShj dHgsIENIQU5HRV9VUERBVEVfTkVXLCBuZXd0dXBsZSk7CisJCQkJc3RvcmVfY2hhbmdlKGN0eCwg Q0hBTkdFX1VQREFURV9ORVcsIG5ld3R1cGxlLAorCQkJCQkJCSBjaGFuZ2UtPnR4bi0+eGlkKTsK IAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEU6CkBA IC0xNTYsNyArMjAyLDcgQEAgcGx1Z2luX2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQlpZiAob2xkdHVwbGUgPT0gTlVMTCkKIAkJ CQkJZWxvZyhFUlJPUiwgIkluY29tcGxldGUgZGVsZXRlIGluZm8uIik7CiAKLQkJCQlzdG9yZV9j aGFuZ2UoY3R4LCBDSEFOR0VfREVMRVRFLCBvbGR0dXBsZSk7CisJCQkJc3RvcmVfY2hhbmdlKGN0 eCwgQ0hBTkdFX0RFTEVURSwgb2xkdHVwbGUsIGNoYW5nZS0+dHhuLT54aWQpOwogCQkJfQogCQkJ YnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0xOTAsMTMgKzIzNiwxMyBAQCBwbHVnaW5fdHJ1bmNhdGUo c3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAogCWlmIChpID09IG5yZWxhdGlvbnMpCiAJCXJldHVybjsKIAotCXN0b3JlX2NoYW5nZShjdHgs IENIQU5HRV9UUlVOQ0FURSwgTlVMTCk7CisJc3RvcmVfY2hhbmdlKGN0eCwgQ0hBTkdFX1RSVU5D QVRFLCBOVUxMLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CiB9CiAKIC8qIFN0b3JlIGNvbmN1cnJl bnQgZGF0YSBjaGFuZ2UuICovCiBzdGF0aWMgdm9pZAogc3RvcmVfY2hhbmdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgQ29uY3VycmVudENoYW5nZUtpbmQga2luZCwKLQkJCSBIZWFwVHVw bGUgdHVwbGUpCisJCQkgSGVhcFR1cGxlIHR1cGxlLCBUcmFuc2FjdGlvbklkIHhpZCkKIHsKIAlS ZXBhY2tEZWNvZGluZ1N0YXRlICpkc3RhdGU7CiAJY2hhcgkgICAqY2hhbmdlX3JhdzsKQEAgLTI2 Niw2ICszMTIsMTEgQEAgc3RvcmVfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg Q29uY3VycmVudENoYW5nZUtpbmQga2luZCwKIAlkc3QgPSBkc3Rfc3RhcnQgKyBTaXplT2ZDb25j dXJyZW50Q2hhbmdlOwogCW1lbWNweShkc3QsIHR1cGxlLT50X2RhdGEsIHR1cGxlLT50X2xlbik7 CiAKKwkvKiBJbml0aWFsaXplIHRoZSBvdGhlciBmaWVsZHMuICovCisJY2hhbmdlLnhpZCA9IHhp ZDsKKwljaGFuZ2Uuc25hcHNob3QgPSBkc3RhdGUtPnNuYXBzaG90OworCWRzdGF0ZS0+c25hcHNo b3QtPmFjdGl2ZV9jb3VudCsrOworCiAJLyogVGhlIGRhdGEgaGFzIGJlZW4gY29waWVkLiAqLwog CWlmIChmbGF0dGVuZWQpCiAJCXBmcmVlKHR1cGxlKTsKQEAgLTI3OSw2ICszMzAsOSBAQCBzdG9y ZToKIAlpc251bGxbMF0gPSBmYWxzZTsKIAl0dXBsZXN0b3JlX3B1dHZhbHVlcyhkc3RhdGUtPnRz dG9yZSwgZHN0YXRlLT50dXBkZXNjX2NoYW5nZSwKIAkJCQkJCSB2YWx1ZXMsIGlzbnVsbCk7Cisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWRzdGF0ZS0+bGFzdF9jaGFuZ2VfeGlkID0geGlk OworI2VuZGlmCiAKIAkvKiBBY2NvdW50aW5nLiAqLwogCWRzdGF0ZS0+bmNoYW5nZXMrKzsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYwppbmRleCBlOWRkZjM5NTAwYy4uZTI0ZTE3OTVhYTkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9pcGNpLmMKQEAgLTE1MSw2ICsxNTEsNyBAQCBDYWxjdWxhdGVTaG1lbVNpemUoaW50 ICpudW1fc2VtYXBob3JlcykKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgSW5qZWN0aW9uUG9pbnRT aG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNsb3RTeW5jU2htZW1TaXplKCkp OwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBBaW9TaG1lbVNpemUoKSk7CisJc2l6ZSA9IGFkZF9z aXplKHNpemUsIFJlcGFja1NobWVtU2l6ZSgpKTsKIAogCS8qIGluY2x1ZGUgYWRkaXRpb25hbCBy ZXF1ZXN0ZWQgc2htZW0gZnJvbSBwcmVsb2FkIGxpYnJhcmllcyAqLwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCB0b3RhbF9hZGRpbl9yZXF1ZXN0KTsKQEAgLTM0NCw2ICszNDUsNyBAQCBDcmVhdGVP ckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQogCVdhaXRFdmVudEN1c3RvbVNobWVtSW5pdCgpOwog CUluamVjdGlvblBvaW50U2htZW1Jbml0KCk7CiAJQWlvU2htZW1Jbml0KCk7CisJUmVwYWNrU2ht ZW1Jbml0KCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRf ZXZlbnRfbmFtZXMudHh0CmluZGV4IDBiZTMwN2QyY2EwLi5mNTQ2YzJlMTJjYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTM1Miw2 ICszNTIsNyBAQCBEU01SZWdpc3RyeQkiV2FpdGluZyB0byByZWFkIG9yIHVwZGF0ZSB0aGUgZHlu YW1pYyBzaGFyZWQgbWVtb3J5IHJlZ2lzdHJ5LiIKIEluamVjdGlvblBvaW50CSJXYWl0aW5nIHRv IHJlYWQgb3IgdXBkYXRlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gaW5qZWN0aW9uIHBvaW50cy4i CiBTZXJpYWxDb250cm9sCSJXYWl0aW5nIHRvIHJlYWQgb3IgdXBkYXRlIHNoYXJlZCA8ZmlsZW5h bWU+cGdfc2VyaWFsPC9maWxlbmFtZT4gc3RhdGUuIgogQWlvV29ya2VyU3VibWlzc2lvblF1ZXVl CSJXYWl0aW5nIHRvIGFjY2VzcyBBSU8gd29ya2VyIHN1Ym1pc3Npb24gcXVldWUuIgorUmVwYWNr ZWRSZWxzCSJXYWl0aW5nIHRvIGFjY2VzcyB0byBoYXNoIHRhYmxlIHdpdGggbGlzdCBvZiByZXBh Y2tlZCByZWxhdGlvbnMuIgogCiAjCiAjIEVORCBPRiBQUkVERUZJTkVEIExXTE9DS1MgKERPIE5P VCBDSEFOR0UgVEhJUyBMSU5FKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv aW52YWwuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMKaW5kZXggMDI1MDVjODhi OGUuLmVjYWEyMjgzYzJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZh bC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMKQEAgLTE2NDMsNiArMTY0 MywyNyBAQCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZShSZWxhdGlvbiByZWxhdGlvbikKIAkJCQkJ CQkJIGRhdGFiYXNlSWQsIHJlbGF0aW9uSWQpOwogfQogCisvKgorICogQ2FjaGVJbnZhbGlkYXRl UmVsY2FjaGVJbW1lZGlhdGUKKyAqCQlTZW5kIGludmFsaWRhdGlvbiBtZXNzYWdlIGZvciB0aGUg c3BlY2lmaWVkIHJlbGF0aW9uJ3MgcmVsY2FjaGUgZW50cnkuCisgKgorICogQ3VycmVudGx5IHRo aXMgaXMgdXNlZCBpbiBSRVBBQ0sgQ09OQ1VSUkVOVExZLCB0byBtYWtlIHN1cmUgdGhhdCBvdGhl cgorICogYmFja2VuZHMgYXJlIGF3YXJlIHRoYXQgdGhlIGNvbW1hbmQgaXMgYmVpbmcgZXhlY3V0 ZWQgZm9yIHRoZSByZWxhdGlvbi4KKyAqLwordm9pZAorQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVJ bW1lZGlhdGUoT2lkIHJlbGlkKQoreworCVNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgbXNnOwor CisJbXNnLnJjLmlkID0gU0hBUkVESU5WQUxSRUxDQUNIRV9JRDsKKwltc2cucmMuZGJJZCA9IE15 RGF0YWJhc2VJZDsKKwltc2cucmMucmVsSWQgPSByZWxpZDsKKwkvKiBjaGVjayBBZGRDYXRjYWNo ZUludmFsaWRhdGlvbk1lc3NhZ2UoKSBmb3IgYW4gZXhwbGFuYXRpb24gKi8KKwlWQUxHUklORF9N QUtFX01FTV9ERUZJTkVEKCZtc2csIHNpemVvZihtc2cpKTsKKworCVNlbmRTaGFyZWRJbnZhbGlk TWVzc2FnZXMoJm1zZywgMSk7Cit9CisKIC8qCiAgKiBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUFs bAogICoJCVJlZ2lzdGVyIGludmFsaWRhdGlvbiBvZiB0aGUgd2hvbGUgcmVsY2FjaGUgYXQgdGhl IGVuZCBvZiBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVs Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggZDI3YTRj MzA1NDguLmVhNTY1YjViMDUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9y ZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTEy NzksNiArMTI3OSwxMCBAQCByZXRyeToKIAkvKiBtYWtlIHN1cmUgcmVsYXRpb24gaXMgbWFya2Vk IGFzIGhhdmluZyBubyBvcGVuIGZpbGUgeWV0ICovCiAJcmVsYXRpb24tPnJkX3NtZ3IgPSBOVUxM OwogCisJLyogSXMgUkVQQUNLIENPTkNVUlJFTlRMWSBpbiBwcm9ncmVzcz8gKi8KKwlyZWxhdGlv bi0+cmRfcmVwYWNrX2NvbmN1cnJlbnQgPQorCQlpc19jb25jdXJyZW50X3JlcGFja19pbl9wcm9n cmVzcyh0YXJnZXRSZWxJZCk7CisKIAkvKgogCSAqIG5vdyB3ZSBjYW4gZnJlZSB0aGUgbWVtb3J5 IGFsbG9jYXRlZCBmb3IgcGdfY2xhc3NfdHVwbGUKIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCBi ODJkZDE3YTk2Ni4uOTgxNDI1ZjIzYjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTMxNiwyMiArMzE2 LDI0IEBAIGV4dGVybiBCdWxrSW5zZXJ0U3RhdGUgR2V0QnVsa0luc2VydFN0YXRlKHZvaWQpOwog ZXh0ZXJuIHZvaWQgRnJlZUJ1bGtJbnNlcnRTdGF0ZShCdWxrSW5zZXJ0U3RhdGUpOwogZXh0ZXJu IHZvaWQgUmVsZWFzZUJ1bGtJbnNlcnRTdGF0ZVBpbihCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7 CiAKLWV4dGVybiB2b2lkIGhlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUg dHVwLCBDb21tYW5kSWQgY2lkLAotCQkJCQkJaW50IG9wdGlvbnMsIEJ1bGtJbnNlcnRTdGF0ZSBi aXN0YXRlKTsKK2V4dGVybiB2b2lkIGhlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFw VHVwbGUgdHVwLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCUNvbW1hbmRJZCBjaWQsIGludCBv cHRpb25zLCBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CiBleHRlcm4gdm9pZCBoZWFwX211bHRp X2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgc3RydWN0IFR1cGxlVGFibGVTbG90ICoqc2xvdHMs CiAJCQkJCQkJICBpbnQgbnR1cGxlcywgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCiAJCQkJ CQkJICBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CiBleHRlcm4gVE1fUmVzdWx0IGhlYXBfZGVs ZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsCi0JCQkJCQkJIENvbW1hbmRJ ZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKKwkJCQkJCQkgVHJhbnNhY3Rp b25JZCB4aWQsIENvbW1hbmRJZCBjaWQsCisJCQkJCQkJIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJv b2wgd2FpdCwKIAkJCQkJCQkgc3RydWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29sIGNoYW5n aW5nUGFydCwKIAkJCQkJCQkgYm9vbCB3YWxfbG9naWNhbCk7CiBleHRlcm4gdm9pZCBoZWFwX2Zp bmlzaF9zcGVjdWxhdGl2ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgdGlkKTsKIGV4 dGVybiB2b2lkIGhlYXBfYWJvcnRfc3BlY3VsYXRpdmUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Q b2ludGVyIHRpZCk7CiBleHRlcm4gVE1fUmVzdWx0IGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBJdGVtUG9pbnRlciBvdGlkLAotCQkJCQkJCSBIZWFwVHVwbGUgbmV3dHVwLAorCQkJCQkJ CSBIZWFwVHVwbGUgbmV3dHVwLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkgQ29tbWFuZElk IGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAogCQkJCQkJCSBzdHJ1Y3QgVE1f RmFpbHVyZURhdGEgKnRtZmQsIExvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLAotCQkJCQkJCSBUVV9V cGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcywgYm9vbCB3YWxfbG9naWNhbCk7CisJCQkJCQkJ IFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzLAorCQkJCQkJCSBib29sIHdhbF9sb2dp Y2FsKTsKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9sb2NrX3R1cGxlKFJlbGF0aW9uIHJlbGF0aW9u LCBIZWFwVHVwbGUgdHVwbGUsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBMb2NrVHVwbGVNb2Rl IG1vZGUsIExvY2tXYWl0UG9saWN5IHdhaXRfcG9saWN5LAogCQkJCQkJCQkgYm9vbCBmb2xsb3df dXBkYXRlcywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94YWN0LmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MveGFjdC5oCmluZGV4IGIyYmMxMGVlMDQxLi5mYmI2NmQ1NTliNiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGFjdC5oCkBAIC00ODIsNiArNDgyLDggQEAgZXh0ZXJuIFNpemUgRXN0aW1hdGVUcmFuc2FjdGlv blN0YXRlU3BhY2Uodm9pZCk7CiBleHRlcm4gdm9pZCBTZXJpYWxpemVUcmFuc2FjdGlvblN0YXRl KFNpemUgbWF4c2l6ZSwgY2hhciAqc3RhcnRfYWRkcmVzcyk7CiBleHRlcm4gdm9pZCBTdGFydFBh cmFsbGVsV29ya2VyVHJhbnNhY3Rpb24oY2hhciAqdHN0YXRlc3BhY2UpOwogZXh0ZXJuIHZvaWQg RW5kUGFyYWxsZWxXb3JrZXJUcmFuc2FjdGlvbih2b2lkKTsKK2V4dGVybiB2b2lkIFNldFJlcGFj a0N1cnJlbnRYaWRzKFRyYW5zYWN0aW9uSWQgKnhpcCwgaW50IHhjbnQpOworZXh0ZXJuIHZvaWQg UmVzZXRSZXBhY2tDdXJyZW50WGlkcyh2b2lkKTsKIGV4dGVybiBib29sIElzVHJhbnNhY3Rpb25C bG9jayh2b2lkKTsKIGV4dGVybiBib29sIElzVHJhbnNhY3Rpb25PclRyYW5zYWN0aW9uQmxvY2so dm9pZCk7CiBleHRlcm4gY2hhciBUcmFuc2FjdGlvbkJsb2NrU3RhdHVzQ29kZSh2b2lkKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaCBiL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2NsdXN0ZXIuaAppbmRleCA1MzJmZmE3MjA4ZC4uMDBhZTZmYzE4ZTggMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NsdXN0ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy9jbHVzdGVyLmgKQEAgLTU5LDYgKzU5LDE0IEBAIHR5cGVkZWYgc3RydWN0IENvbmN1cnJl bnRDaGFuZ2UKIAkvKiBTZWUgdGhlIGVudW0gYWJvdmUuICovCiAJQ29uY3VycmVudENoYW5nZUtp bmQga2luZDsKIAorCS8qIFRyYW5zYWN0aW9uIHRoYXQgY2hhbmdlcyB0aGUgZGF0YS4gKi8KKwlU cmFuc2FjdGlvbklkIHhpZDsKKworCS8qCisJICogSGlzdG9yaWMgY2F0YWxvZyBzbmFwc2hvdCB0 aGF0IHdhcyB1c2VkIHRvIGRlY29kZSB0aGlzIGNoYW5nZS4KKwkgKi8KKwlTbmFwc2hvdAlzbmFw c2hvdDsKKwogCS8qCiAJICogVGhlIGFjdHVhbCB0dXBsZS4KIAkgKgpAQCAtOTAsNiArOTgsOCBA QCB0eXBlZGVmIHN0cnVjdCBSZXBhY2tEZWNvZGluZ1N0YXRlCiAJICogdHVwbGVzdG9yZSBkb2Vz IHRoaXMgdHJhbnNwYXJlbnRseS4KIAkgKi8KIAlUdXBsZXN0b3Jlc3RhdGUgKnRzdG9yZTsKKwkv KiBYSUQgb2YgdGhlIGxhc3QgY2hhbmdlIGFkZGVkIHRvIHRzdG9yZS4gKi8KKwlUcmFuc2FjdGlv bklkIGxhc3RfY2hhbmdlX3hpZCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAKIAkvKiBUaGUg Y3VycmVudCBudW1iZXIgb2YgY2hhbmdlcyBpbiB0c3RvcmUuICovCiAJZG91YmxlCQluY2hhbmdl czsKQEAgLTExMCw2ICsxMjAsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVwYWNrRGVjb2RpbmdTdGF0 ZQogCS8qIFNsb3QgdG8gcmV0cmlldmUgZGF0YSBmcm9tIHRzdG9yZS4gKi8KIAlUdXBsZVRhYmxl U2xvdCAqdHNzbG90OwogCisJLyoKKwkgKiBIaXN0b3JpYyBjYXRhbG9nIHNuYXBzaG90IHRoYXQg d2FzIHVzZWQgdG8gZGVjb2RlIHRoZSBtb3N0IHJlY2VudAorCSAqIGNoYW5nZS4KKwkgKi8KKwlT bmFwc2hvdAlzbmFwc2hvdDsKKwkvKiBMU04gb2YgdGhlIHJlY29yZCAgKi8KKwlYTG9nUmVjUHRy CXNuYXBzaG90X2xzbjsKKwogCVJlc291cmNlT3duZXIgcmVzb3duZXI7CiB9IFJlcGFja0RlY29k aW5nU3RhdGU7CiAKQEAgLTEzOSw0ICsxNTcsOCBAQCBleHRlcm4gdm9pZCBmaW5pc2hfaGVhcF9z d2FwKE9pZCBPSURPbGRIZWFwLCBPaWQgT0lETmV3SGVhcCwKIAkJCQkJCQkgTXVsdGlYYWN0SWQg Y3V0b2ZmTXVsdGksCiAJCQkJCQkJIGNoYXIgbmV3cmVscGVyc2lzdGVuY2UpOwogCitleHRlcm4g U2l6ZSBSZXBhY2tTaG1lbVNpemUodm9pZCk7CitleHRlcm4gdm9pZCBSZXBhY2tTaG1lbUluaXQo dm9pZCk7CitleHRlcm4gYm9vbCBpc19jb25jdXJyZW50X3JlcGFja19pbl9wcm9ncmVzcyhPaWQg cmVsaWQpOworCiAjZW5kaWYJCQkJCQkJLyogQ0xVU1RFUl9IICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2Nr bGlzdC5oCmluZGV4IDIwOGQyZTNhOGVkLi44NjlkOWRhNzMzNyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xv Y2tsaXN0LmgKQEAgLTg1LDYgKzg1LDcgQEAgUEdfTFdMT0NLKDUwLCBEU01SZWdpc3RyeSkKIFBH X0xXTE9DSyg1MSwgSW5qZWN0aW9uUG9pbnQpCiBQR19MV0xPQ0soNTIsIFNlcmlhbENvbnRyb2wp CiBQR19MV0xPQ0soNTMsIEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZSkKK1BHX0xXTE9DSyg1NCwg UmVwYWNrZWRSZWxzKQogCiAvKgogICogVGhlcmUgYWxzbyBleGlzdCBzZXZlcmFsIGJ1aWx0LWlu IExXTG9jayB0cmFuY2hlcy4gIEFzIHdpdGggdGhlIHByZWRlZmluZWQKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2ludmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9pbnZhbC5oCmluZGV4 IDliODcxY2FlZjYyLi5hZTlkZWUzOTRkYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv aW52YWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9pbnZhbC5oCkBAIC01MCw2ICs1MCw4IEBA IGV4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZUNhdGFsb2coT2lkIGNhdGFsb2dJZCk7CiAKIGV4 dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZVJlbGNhY2hlKFJlbGF0aW9uIHJlbGF0aW9uKTsKIAor ZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVJbW1lZGlhdGUoT2lkIHJlbGlkKTsK KwogZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVBbGwodm9pZCk7CiAKIGV4dGVy biB2b2lkIENhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQnlUdXBsZShIZWFwVHVwbGUgY2xhc3NUdXBs ZSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCmluZGV4IGI1NTIzNTk5MTVmLi42NmRlM2JjMGMyOSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTI1 Myw2ICsyNTMsOSBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlvbkRhdGEKIAlib29sCQlwZ3N0YXRf ZW5hYmxlZDsgLyogc2hvdWxkIHJlbGF0aW9uIHN0YXRzIGJlIGNvdW50ZWQgKi8KIAkvKiB1c2Ug InN0cnVjdCIgaGVyZSB0byBhdm9pZCBuZWVkaW5nIHRvIGluY2x1ZGUgcGdzdGF0Lmg6ICovCiAJ c3RydWN0IFBnU3RhdF9UYWJsZVN0YXR1cyAqcGdzdGF0X2luZm87IC8qIHN0YXRpc3RpY3MgY29s bGVjdGlvbiBhcmVhICovCisKKwkvKiBJcyBSRVBBQ0sgQ09OQ1VSUkVOVExZIGJlaW5nIHBlcmZv cm1lZCBvbiB0aGlzIHJlbGF0aW9uPyAqLworCWJvb2wJCXJkX3JlcGFja19jb25jdXJyZW50Owog fSBSZWxhdGlvbkRhdGE7CiAKIApAQCAtNjk1LDcgKzY5OCw5IEBAIFJlbGF0aW9uQ2xvc2VTbWdy KFJlbGF0aW9uIHJlbGF0aW9uKQogI2RlZmluZSBSZWxhdGlvbklzQWNjZXNzaWJsZUluTG9naWNh bERlY29kaW5nKHJlbGF0aW9uKSBcCiAJKFhMb2dMb2dpY2FsSW5mb0FjdGl2ZSgpICYmIFwKIAkg UmVsYXRpb25OZWVkc1dBTChyZWxhdGlvbikgJiYgXAotCSAoSXNDYXRhbG9nUmVsYXRpb24ocmVs YXRpb24pIHx8IFJlbGF0aW9uSXNVc2VkQXNDYXRhbG9nVGFibGUocmVsYXRpb24pKSkKKwkgKElz Q2F0YWxvZ1JlbGF0aW9uKHJlbGF0aW9uKSB8fCBcCisJICBSZWxhdGlvbklzVXNlZEFzQ2F0YWxv Z1RhYmxlKHJlbGF0aW9uKSB8fCBcCisJICAocmVsYXRpb24pLT5yZF9yZXBhY2tfY29uY3VycmVu dCkpCiAKIC8qCiAgKiBSZWxhdGlvbklzTG9naWNhbGx5TG9nZ2VkCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9zbmFwc2hvdC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaApp bmRleCAwZTU0NmVjMTQ5Ny4uMDE0ZjI3ZGI3ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL3NuYXBzaG90LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaApAQCAtMTMs NiArMTMsNyBAQAogI2lmbmRlZiBTTkFQU0hPVF9ICiAjZGVmaW5lIFNOQVBTSE9UX0gKIAorI2lu Y2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgogI2luY2x1ZGUgImxpYi9wYWlyaW5naGVhcC5oIgog CiAKQEAgLTIwMSw2ICsyMDIsOCBAQCB0eXBlZGVmIHN0cnVjdCBTbmFwc2hvdERhdGEKIAl1aW50 MzIJCXJlZ2RfY291bnQ7CQkvKiByZWZjb3VudCBvbiBSZWdpc3RlcmVkU25hcHNob3RzICovCiAJ cGFpcmluZ2hlYXBfbm9kZSBwaF9ub2RlOwkvKiBsaW5rIGluIHRoZSBSZWdpc3RlcmVkU25hcHNo b3RzIGhlYXAgKi8KIAorCVhMb2dSZWNQdHIJbHNuOwkJCS8qIHBvc2l0aW9uIGluIHRoZSBXQUwg c3RyZWFtIHdoZW4gdGFrZW4gKi8KKwogCS8qCiAJICogVGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRp b24gY291bnQgYXQgdGhlIHRpbWUgR2V0U25hcHNob3REYXRhKCkgYnVpbHQKIAkgKiB0aGlzIHNu YXBzaG90LiBBbGxvd3MgdG8gYXZvaWQgcmUtY29tcHV0aW5nIHN0YXRpYyBzbmFwc2hvdHMgd2hl biBubwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNz L3JlcGFjay5zcGVjIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNzL3Jl cGFjay5zcGVjCmluZGV4IDc1ODUwMzM0OTg2Li4zNzExYTdjOTJiOSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3NwZWNzL3JlcGFjay5zcGVjCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9yZXBhY2suc3BlYwpAQCAtODYs OSArODYsNiBAQCBzdGVwIGNoYW5nZV9uZXcKICMgV2hlbiBhcHBseWluZyBjb25jdXJyZW50IGRh dGEgY2hhbmdlcywgd2Ugc2hvdWxkIHNlZSB0aGUgZWZmZWN0cyBvZiBhbgogIyBpbi1wcm9ncmVz cyBzdWJ0cmFuc2FjdGlvbi4KICMKLSMgWFhYIE5vdCBzdXJlIHRoaXMgdGVzdCBpcyB1c2VmdWwg bm93IC0gaXQgd2FzIGRlc2lnbmVkIGZvciB0aGUgcGF0Y2ggdGhhdAotIyBwcmVzZXJ2ZXMgdHVw bGUgdmlzaWJpbGl0eSBhbmQgd2hpY2ggdGhlcmVmb3JlIG1vZGlmaWVzCi0jIFRyYW5zYWN0aW9u SWRJc0N1cnJlbnRUcmFuc2FjdGlvbklkKCkuCiBzdGVwIGNoYW5nZV9zdWJ4YWN0MQogewogCUJF R0lOOwpAQCAtMTAzLDcgKzEwMCw2IEBAIHN0ZXAgY2hhbmdlX3N1YnhhY3QxCiAjIFdoZW4gYXBw bHlpbmcgY29uY3VycmVudCBkYXRhIGNoYW5nZXMsIHdlIHNob3VsZCBub3Qgc2VlIHRoZSBlZmZl Y3RzIG9mIGEKICMgcm9sbGVkIGJhY2sgc3VidHJhbnNhY3Rpb24uCiAjCi0jIFhYWCBJcyB0aGlz IHRlc3QgdXNlZnVsPyBTZWUgYWJvdmUuCiBzdGVwIGNoYW5nZV9zdWJ4YWN0MgogewogCUJFR0lO OwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA0ODBjZTg5NDk3OC4uZTQyYmI1MjA5YzAg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNTQwLDYgKzI1NDAsNyBAQCBSZW9yZGVy QnVmZmVyVHVwbGVDaWRLZXkKIFJlb3JkZXJCdWZmZXJVcGRhdGVQcm9ncmVzc1R4bkNCCiBSZW9y ZGVyVHVwbGUKIFJlcE9yaWdpbklkCitSZXBhY2tlZFJlbAogUmVwYWNrQ29tbWFuZAogUmVwYWNr RGVjb2RpbmdTdGF0ZQogUmVwYWNrU3RtdAotLSAKMi40My4wCgo= --0000000000005ea692063cd48d63--